@akashjs/runtime 0.1.30 → 0.1.31
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chunk-JDJQW4YE.js +2 -0
- package/dist/chunk-JDJQW4YE.js.map +1 -0
- package/dist/chunk-OPXWBGJL.cjs +2 -0
- package/dist/chunk-OPXWBGJL.cjs.map +1 -0
- package/dist/index.cjs +10 -10
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +10 -10
- package/dist/index.js.map +1 -1
- package/dist/machine.cjs +1 -1
- package/dist/machine.js +1 -1
- package/package.json +1 -1
- package/dist/chunk-TS5UKZTG.js +0 -2
- package/dist/chunk-TS5UKZTG.js.map +0 -1
- package/dist/chunk-VBAO65QP.cjs +0 -2
- package/dist/chunk-VBAO65QP.cjs.map +0 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/slots.ts","../src/error-boundary.ts","../src/suspense.ts","../src/hydration.ts","../src/transition.ts","../src/head.ts","../src/plugin.ts","../src/composables.ts","../src/browser.ts","../src/portal.ts","../src/toast.ts","../src/theme.ts","../src/virtual-list.ts","../src/async-component.ts","../src/reconcile.ts","../src/leak-detector.ts","../src/a11y.ts","../src/image.ts","../src/infinite-scroll.ts","../src/css.ts","../src/data-table.ts","../src/seo.ts","../src/pipes.ts","../src/directive.ts","../src/web-component.ts","../src/ssg.ts","../src/switch.ts","../src/di.ts","../src/defer.ts","../src/view-transition.ts","../src/query-state.ts","../src/tweened.ts","../src/flip.ts","../src/await-block.ts","../src/event-modifiers.ts","../src/snippets.ts","../src/watch.ts","../src/deep-signal.ts","../src/event-bus.ts","../src/security.ts","../src/deprecation.ts","../src/devtools.ts"],"names":["renderSlot","slot","fallback","content","nodeToDOM","hasSlot","createSlots","props","slotNames","slots","name","value","ErrorBoundary","defineComponent","ctx","error","signal","onError","err","retry","currentError","currentSuspenseCtx","getSuspenseContext","registerPending","promise","Suspense","resolved","pending","suspenseCtx","prevCtx","childrenNode","container","effect","isHydrating","hydrateWalker","isHydrationActive","hydrate","options","component","claimElement","tag","node","claimText","progressiveHydrate","target","rootMargin","disposed","observer","entries","entry","HYDRATE_ATTR","findHydrationBoundaries","root","getTransitionClasses","enterTransition","el","classes","duration","resolve","onEnd","exitTransition","Transition","generateTransitionCSS","property","easing","ssrHeadTags","collectSSRHead","tags","renderHeadToString","configs","html","title","t","c","titleTemplate","finalTitle","config","meta","link","MANAGED_ATTR","useHead","getConfig","managedElements","dispose","cfg","script","key","onUnmount","definePlugin","plugin","createApp","rootComponent","rootProps","plugins","errorHandlers","beforeMountHooks","appConfig","mountedNode","containerEl","pluginCtx","provide","handler","hook","app","selector","e","useInterval","ms","count","isActive","timer","start","stop","useTimeout","ready","useDebounce","source","delay","debounced","useThrottle","interval","throttled","lastUpdate","now","elapsed","useCounter","initial","delta","useToggle","v","usePrevious","lastValue","tracked","current","useMediaQuery","query","mql","matches","DEFAULT_BREAKPOINTS","useBreakpoint","breakpoints","sorted","a","b","width","w","result","min","gte","bp","lt","useStorage","initialValue","storage","store","startValue","raw","state","useClipboard","text","copied","timeout","copy","useOnline","online","useGeolocation","pos","useWindowSize","height","useClickOutside","events","ignore","active","getTarget","shouldIgnore","event","eventTarget","pattern","listener","eventName","Portal","idCounter","createToaster","maxVisible","defaultDuration","position","toasts","timers","add","type","message","opts","id","dismissible","toast","list","next","removed","clearTimer","dismiss","dismissAll","msg","useTheme","themes","storageKey","attribute","syncSystem","themeNames","getSystemTheme","getInitialTheme","stored","isDark","computed","applyTheme","vars","theme","calculateRange","scrollTop","containerHeight","itemHeight","totalItems","overscan","firstVisible","visibleCount","end","useVirtualList","range","visibleItems","r","item","i","onScroll","setContainerHeight","VirtualFor","fixedHeight","items","outer","inner","row","defineAsyncComponent","loaderOrOptions","loader","loadingFn","errorFn","resolvedComp","loadPromise","loadError","startLoad","mod","showLoading","delayTimer","timeoutTimer","s","longestIncreasingSubsequence","arr","n","tails","predecessors","indices","lo","hi","mid","k","reconcileKeys","oldKeys","newKeys","ops","oldKeyMap","newToOld","newKeySet","lis","countOps","inserts","moves","removes","op","tracking","activeEffects","effectIdCounter","enableLeakDetection","disableLeakDetection","isLeakDetectionEnabled","trackEffect","componentName","captureStack","untrackEffect","record","getActiveEffects","checkForLeaks","thresholdMs","warnings","reportLeaks","leaks","leak","getLeakDetectionStats","stack","FOCUSABLE_SELECTOR","useFocusTrap","initialFocus","returnFocus","escapeDeactivates","allowOutsideClick","onDeactivate","previouslyFocused","getContainer","getFocusableElements","handleKeyDown","deactivate","focusable","first","last","handleFocusOut","relatedTarget","activate","announceRegion","ensureAnnounceRegion","useAnnounce","politeness","region","useKeyboard","bindings","activeScopes","listening","binding","matchesKey","startListening","bind","idx","scope","formatKeyCombo","combo","parts","needsMod","needsCtrl","needsShift","needsAlt","modPressed","isMac","Image","loaded","errored","src","alt","loading","srcset","sizes","placeholder","blurDataUrl","className","fallbackSrc","onLoad","onErrorCb","wrapper","blur","img","actualSrc","useInfiniteScroll","onLoadMore","hasMore","threshold","done","sentinelEl","handleIntersect","createObserver","sentinel","cx","inputs","input","nested","css","styles","prop","camelToKebab","val","UNITLESS_PROPS","applyStyles","str","m","createDataTable","data","columns","pageSize","initialSort","sortState","filterText","page","columnVisibility","visibleColumns","vis","filteredRows","filterableCols","col","getNestedValue","sortedRows","column","direction","rows","colDef","aVal","bVal","defaultCompare","totalRows","totalPages","paginatedRows","all","sort","columnKey","filter","toggleColumn","showColumn","hideColumn","p","obj","path","o","useStructuredData","ld","useOpenGraph","useTwitterCard","useSEO","generateSitemap","baseUrl","xml","pipe","transform","args","chain","pipes","definePipe","fn","uppercase","lowercase","capitalize","titleCase","trim","truncate","maxLength","suffix","date","format","locale","d","loc","currency","currencyCode","number","digitsInfo","max","percent","decimals","json","indent","plural","singular","pluralForm","relativeTime","diff","absDiff","units","divisors","unit","u","abs","defineDirective","hooks","directiveFromFn","cleanup","DIRECTIVE_KEY","applyDirective","directive","states","updateDirective","newValue","oldValue","removeDirectives","vAutoFocus","vClickOutside","vLongPress","cancel","fns","vIntersect","callback","vResize","defineCustomElement","tagName","shadow","AkashElement","attr","parseAttributeValue","_oldValue","styleEl","newProps","toCustomElement","_old","DEFAULT_TEMPLATE","prerender","routesInput","render","outDir","template","onPage","concurrency","routes","batch","url","filePath","urlToFilePath","discoverStaticRoutes","routeManifest","generatePaths","params","clean","sitemapFromResults","results","renderSwitch","parent","anchor","expression","cases","currentNodes","getCurrentScope","branch","liveParent","runInScope","nodes","Switch","casesMap","match","providerIdCounter","defineProvider","rootInstances","createInjector","providers","instances","multiInstances","registrations","reg","injector","provider","values","parentValues","instance","resolveRegistration","childProviders","injectProvider","clearProviders","defer","trigger","prefetch","minLoadTime","triggerLoad","setupTrigger","load","setupViewportTrigger","setupInteractionTrigger","setupIdleTrigger","setupTimerTrigger","setupCustomTrigger","condition","check","supportsViewTransitions","startViewTransition","updateCallback","onBefore","onAfter","transition","fadeTransition","viewTransitionCSS","oldAnimation","newAnimation","assignTransitionName","finished","defaultSerialize","defaultDeserialize","defaultValue","getSearchParams","updateURL","mode","search","activeStates","popstateListening","ensurePopstateListener","useQueryState","serialize","deserialize","historyMode","debounceMs","removeDefault","debounceTimer","isInternalUpdate","originalSet","doUpdate","currentParams","useQueryStates","schema","clearQueryState","getQueryParams","removeQueryState","resetQueryState","easings","defaultInterpolate","from","to","tweened","interpolate","targetValue","rafId","running","read","overrides","dur","ease","interp","del","tick","easedT","createFlip","keyAttribute","onComplete","firstPositions","getElements","getKey","measure","rect","animate","elements","animations","dx","dy","dw","dh","animation","currentKeys","update","flip","Await","currentPromise","awaitSignal","withModifiers","modifiers","onEvent","wrapped","listenerOptions","bindDimensions","bindScroll","scrollX","scrollY","originalSetY","originalSetX","bindElement","bindGroup","bindGroupItem","group","bindClass","bindClasses","disposers","cls","bindStyle","kebab","bindStyles","valueFn","defineSnippet","inspect","sources","arg","label","level","logger","when","defineFormAction","method","headers","onSuccess","customFetch","submitting","submit","response","res","extraData","form","formData","enableSnapshots","keyPrefix","capture","captureSnapshot","snapshot","formEl","restoreSnapshot","formId","saveKey","save","restore","watch","immediate","once","deep","isMulti","oldValues","isFirst","disposeEffect","newValues","deepClone","fireCallback","deepEqual","prevValues","newVals","oldVals","doCall","watchOnce","watchDebounced","SIGNAL_KEY","RAW_KEY","deepSignal","version","notify","createProxy","receiver","toRaw","proxy","isDeepSignal","createEventBus","listeners","getSet","set","globalBus","globalEventBus","SAFE_TAGS","SAFE_ATTRS","DANGEROUS_PROTOCOLS","DANGEROUS_ATTRS","sanitize","allowTags","allowAttrs","allowDataAttrs","allowAriaAttrs","allowStyle","tagFilter","attrFilter","allowedTags","allowedAttrs","doc","sanitizeNode","children","child","attrs","escapeHtml","createSafeHTML","generateCSP","directives","nonceValue","getCSPHeaderName","generateSecurityHeaders","cspConfig","hsts","policy","safeMerge","DANGEROUS_KEYS","targetVal","sourceVal","isPlainObject","deepFreeze","generateSRI","algorithm","hashAlgo","hashBuffer","hashArray","base64","generateCSRFToken","array","createCSRFInterceptor","headerName","cookieName","tokenGenerator","token","getToken","request","sanitizeURL","allowedHosts","allowedProtocols","allowRelative","parsed","createRateLimiter","maxAttempts","windowMs","attempts","warned","warningsEnabled","warningHandler","setDeprecationWarnings","enabled","setWarningHandler","resetDeprecationWarnings","deprecated","info","emitDeprecationWarning","deprecatedValue","apiRegistry","registerAPI","getRegisteredAPIs","getAPIsByStability","stability","api","isDeprecated","getDeprecationInfo","checkCompatibility","packages","errors","versions","akashPackages","majors","minors","trackedSignals","trackedEffects","inspectStore","__getStoreInstances","getters","actions","recordings","recordingDisposers","createDevToolsAPI","snap","storeId","stores","history","unsubscribe","disposer","h","installDevtools"],"mappings":"qqDAgCO,SAASA,EAAAA,CAAWC,EAA0BC,CAAAA,CAAyB,CAC5E,GAAID,CAAAA,CAAM,CACR,IAAME,CAAAA,CAAUF,CAAAA,GAChB,OAAOG,CAAAA,CAAUD,CAAO,CAC1B,CACA,OAAID,CAAAA,CACKE,CAAAA,CAAUF,GAAU,CAAA,CAEtB,SAAS,aAAA,CAAc,YAAY,CAC5C,CAKO,SAASG,GAAQJ,CAAAA,CAAmC,CACzD,GAAI,CAACA,CAAAA,CAAM,OAAO,MAAA,CAClB,IAAME,EAAUF,CAAAA,EAAK,CAErB,OADI,EAAAE,CAAAA,EAAW,IAAA,EAAQA,CAAAA,GAAY,KAAA,EAC/B,OAAOA,GAAY,QAAA,EAAYA,CAAAA,CAAQ,MAAK,GAAM,EAAA,CAExD,CAsBO,SAASG,EAAAA,CACdC,EACAC,CAAAA,CACO,CACP,IAAMC,CAAAA,CAAe,GACrB,IAAA,IAAWC,CAAAA,IAAQF,EAAW,CAC5B,IAAMG,CAAAA,CAAQJ,CAAAA,CAAMG,CAAI,CAAA,CACpB,OAAOC,CAAAA,EAAU,UAAA,GACnBF,EAAMC,CAAc,CAAA,CAAIC,GAE5B,CACA,OAAOF,CACT,CCxDO,IAAMG,GAAgBC,GAAAA,CAAqCC,CAAAA,EAAQ,CACxE,IAAMC,CAAAA,CAAQC,EAAqB,IAAI,CAAA,CAEvCC,GAAAA,CAASC,CAAAA,EAAQ,CACfH,CAAAA,CAAM,IAAIG,CAAG,EACf,CAAC,CAAA,CAED,SAASC,GAAQ,CACfJ,CAAAA,CAAM,IAAI,IAAI,EAChB,CAEA,OAAO,IAAM,CACX,IAAMK,CAAAA,CAAeL,GAAM,CAE3B,OAAIK,EACKhB,CAAAA,CAAUU,CAAAA,CAAI,MAAM,QAAA,CAASM,CAAAA,CAAcD,CAAK,CAAC,CAAA,CAGnDf,EAAUU,CAAAA,CAAI,QAAA,EAAU,CACjC,CACF,CAAC,ECzBD,IAAIO,EAA6C,IAAA,CAM1C,SAASC,IAA6C,CAC3D,OAAOD,CACT,CAOO,SAASE,EAAAA,CAAgBC,EAAiC,CAC3DH,CAAAA,EACFA,EAAmB,UAAA,CAAWG,CAAO,EAEzC,CAkBO,IAAMC,GAAWZ,GAAAA,CAAgCC,CAAAA,EAAQ,CAC9D,IAAMY,CAAAA,CAAWV,EAAO,KAAK,CAAA,CACvBW,IAA8B,EAAC,CAE/BC,CAAAA,CAA+B,CACnC,UAAA,CAAWJ,CAAAA,CAA2B,CACpCG,GAAAA,CAAQ,IAAA,CAAKH,CAAO,EACtB,CAAA,CACA,WAAY,IAAME,CAAAA,EACpB,CAAA,CAGMG,CAAAA,CAAUR,EAChBA,CAAAA,CAAqBO,CAAAA,CAGrB,IAAIE,CAAAA,CACJ,GAAI,CACFA,CAAAA,CAAehB,CAAAA,CAAI,QAAA,GACrB,CAAA,OAAE,CACAO,EAAqBQ,EACvB,CAGA,OAAIF,GAAAA,CAAQ,MAAA,CAAS,EACnB,OAAA,CAAQ,GAAA,CAAIA,GAAO,CAAA,CAAE,IAAA,CAAK,IAAM,CAC9BD,CAAAA,CAAS,IAAI,IAAI,EACnB,CAAC,CAAA,CAGDA,CAAAA,CAAS,IAAI,IAAI,CAAA,CAGZ,IAAM,CACX,IAAMK,EAAY,QAAA,CAAS,aAAA,CAAc,KAAK,CAAA,CAC9C,OAAAA,EAAU,YAAA,CAAa,qBAAA,CAAuB,EAAE,CAAA,CAChDA,CAAAA,CAAU,MAAM,OAAA,CAAU,UAAA,CAEtBL,GAAS,CACXK,CAAAA,CAAU,WAAA,CAAY3B,CAAAA,CAAU0B,CAAY,CAAC,EAE7CC,CAAAA,CAAU,WAAA,CAAY3B,EAAUU,CAAAA,CAAI,KAAA,CAAM,UAAU,CAAC,EAIvDkB,CAAAA,CAAO,IAAM,CACX,GAAIN,CAAAA,GAAY,CACd,KAAOK,EAAU,UAAA,EACfA,CAAAA,CAAU,WAAA,CAAYA,CAAAA,CAAU,UAAU,CAAA,CAE5CA,EAAU,WAAA,CAAY3B,CAAAA,CAAU0B,CAAY,CAAC,EAC/C,CACF,CAAC,CAAA,CAEMC,CACT,CACF,CAAC,ECrGD,IAAIE,CAAAA,CAAc,MAEdC,EAAmC,KAGhC,SAASC,EAAAA,EAA6B,CAC3C,OAAOF,CACT,CA8BO,SAASG,CAAAA,CAAQC,EAAqC,CAC3D,GAAM,CAAE,SAAA,CAAAN,CAAAA,CAAW,UAAAO,CAAAA,CAAW,KAAA,CAAA/B,EAAQ,EAAG,EAAI8B,CAAAA,CAE7CJ,CAAAA,CAAc,KAIdC,CAAAA,CAAgB,QAAA,CAAS,gBAAA,CACvBH,CAAAA,CACA,WAAW,YAAA,CAAe,UAAA,CAAW,SACvC,CAAA,CAEA,GAAI,CAGFO,CAAAA,CAAU/B,CAAY,EACxB,CAAA,OAAE,CACA0B,EAAc,KAAA,CAEdC,CAAAA,CAAgB,KAClB,CAEA,OAAO,IAAM,CAEb,CACF,CAMO,SAASK,GAAaC,CAAAA,CAAiC,CAC5D,GAAI,CAACP,CAAAA,EAAe,CAACC,CAAAA,CAAe,OAAO,KAE3C,IAAIO,CAAAA,CAAOP,EAAc,QAAA,EAAS,CAClC,KAAOO,CAAAA,EAAM,CACX,GACEA,CAAAA,YAAgB,WAAA,EAChBA,CAAAA,CAAK,OAAA,CAAQ,WAAA,EAAY,GAAMD,EAAI,WAAA,EAAY,CAE/C,OAAOC,CAAAA,CAETA,CAAAA,CAAOP,EAAc,QAAA,GACvB,CAEA,OAAO,IACT,CAKO,SAASQ,EAAAA,EAAyB,CACvC,GAAI,CAACT,GAAe,CAACC,CAAAA,CAAe,OAAO,IAAA,CAE3C,IAAIO,CAAAA,CAAOP,EAAc,QAAA,EAAS,CAClC,KAAOO,CAAAA,EAAM,CACX,GAAIA,CAAAA,YAAgB,IAAA,CAClB,OAAOA,CAAAA,CAETA,CAAAA,CAAOP,EAAc,QAAA,GACvB,CAEA,OAAO,IACT,CA6BO,SAASS,EAAAA,CAAmBN,EAAgD,CACjF,GAAM,CAAE,MAAA,CAAAO,CAAAA,CAAQ,UAAAN,CAAAA,CAAW,KAAA,CAAA/B,EAAO,UAAA,CAAAsC,CAAAA,CAAa,OAAQ,CAAA,CAAIR,CAAAA,CAE3D,GAAI,OAAO,oBAAA,CAAyB,IAElC,OAAOD,CAAAA,CAAQ,CAAE,SAAA,CAAWQ,CAAAA,CAAQ,SAAA,CAAAN,CAAAA,CAAW,KAAA,CAAA/B,CAAM,CAAC,CAAA,CAGxD,IAAIuC,EAAW,KAAA,CAETC,CAAAA,CAAW,IAAI,oBAAA,CAClBC,CAAAA,EAAY,CACX,IAAA,IAAWC,CAAAA,IAASD,EACdC,CAAAA,CAAM,cAAA,EAAkB,CAACH,CAAAA,GAC3BC,CAAAA,CAAS,YAAW,CACpBX,CAAAA,CAAQ,CAAE,SAAA,CAAWQ,CAAAA,CAAQ,SAAA,CAAAN,EAAW,KAAA,CAAA/B,CAAM,CAAC,CAAA,EAGrD,CAAA,CACA,CAAE,UAAA,CAAAsC,CAAW,CACf,CAAA,CAEA,OAAAE,EAAS,OAAA,CAAQH,CAAM,EAEhB,IAAM,CACXE,EAAW,IAAA,CACXC,CAAAA,CAAS,UAAA,GACX,CACF,KAKaG,EAAAA,CAAe,qBAKrB,SAASC,EAAAA,CACdC,CAAAA,CAAoB,SAAS,IAAA,CACd,CACf,OAAO,KAAA,CAAM,IAAA,CAAKA,EAAK,gBAAA,CAA8B,CAAA,CAAA,EAAIF,EAAY,CAAA,CAAA,CAAG,CAAC,CAC3E,CCrIO,SAASG,GAAqB3C,CAAAA,CAAiC,CACpE,OAAO,CACL,SAAA,CAAW,GAAGA,CAAI,CAAA,WAAA,CAAA,CAClB,YAAa,CAAA,EAAGA,CAAI,gBACpB,OAAA,CAAS,CAAA,EAAGA,CAAI,CAAA,SAAA,CAAA,CAChB,QAAA,CAAU,GAAGA,CAAI,CAAA,UAAA,CAAA,CACjB,WAAY,CAAA,EAAGA,CAAI,CAAA,YAAA,CAAA,CACnB,MAAA,CAAQ,CAAA,EAAGA,CAAI,UACjB,CACF,CAQO,SAAS4C,EAAAA,CACdC,CAAAA,CACAC,EACAC,CAAAA,CACe,CACf,OAAO,IAAI,OAAA,CAASC,GAAY,CAE9BH,CAAAA,CAAG,UAAU,GAAA,CAAIC,CAAAA,CAAQ,UAAWA,CAAAA,CAAQ,WAAW,CAAA,CAGlDD,CAAAA,CAAG,YAAA,CAGRA,CAAAA,CAAG,UAAU,MAAA,CAAOC,CAAAA,CAAQ,SAAS,CAAA,CACrCD,CAAAA,CAAG,UAAU,GAAA,CAAIC,CAAAA,CAAQ,OAAO,CAAA,CAEhC,IAAMG,EAAQ,IAAM,CAClBJ,EAAG,SAAA,CAAU,MAAA,CAAOC,EAAQ,WAAA,CAAaA,CAAAA,CAAQ,OAAO,CAAA,CACxDD,CAAAA,CAAG,mBAAA,CAAoB,gBAAiBI,CAAK,CAAA,CAC7CD,IACF,CAAA,CAEID,IAAa,MAAA,CACf,UAAA,CAAWE,EAAOF,CAAQ,CAAA,EAE1BF,EAAG,gBAAA,CAAiB,eAAA,CAAiBI,EAAO,CAAE,IAAA,CAAM,IAAK,CAAC,CAAA,CAE1D,WAAWA,CAAAA,CAAO,GAAI,GAE1B,CAAC,CACH,CAMO,SAASC,EAAAA,CACdL,EACAC,CAAAA,CACAC,CAAAA,CACe,CACf,OAAO,IAAI,QAASC,CAAAA,EAAY,CAC9BH,EAAG,SAAA,CAAU,GAAA,CAAIC,EAAQ,QAAA,CAAUA,CAAAA,CAAQ,UAAU,CAAA,CAEhDD,CAAAA,CAAG,YAAA,CAERA,EAAG,SAAA,CAAU,MAAA,CAAOC,EAAQ,QAAQ,CAAA,CACpCD,EAAG,SAAA,CAAU,GAAA,CAAIC,EAAQ,MAAM,CAAA,CAE/B,IAAMG,CAAAA,CAAQ,IAAM,CAClBJ,CAAAA,CAAG,SAAA,CAAU,OAAOC,CAAAA,CAAQ,UAAA,CAAYA,CAAAA,CAAQ,MAAM,CAAA,CACtDD,CAAAA,CAAG,oBAAoB,eAAA,CAAiBI,CAAK,EAC7CD,CAAAA,GACF,EAEID,CAAAA,GAAa,MAAA,CACf,WAAWE,CAAAA,CAAOF,CAAQ,GAE1BF,CAAAA,CAAG,gBAAA,CAAiB,gBAAiBI,CAAAA,CAAO,CAAE,KAAM,IAAK,CAAC,CAAA,CAC1D,UAAA,CAAWA,CAAAA,CAAO,GAAI,GAE1B,CAAC,CACH,CAyBO,IAAME,EAAAA,CAAahD,IAAkCC,CAAAA,EAAQ,CAClE,IAAMJ,CAAAA,CAAOI,CAAAA,CAAI,MAAM,IAAA,EAAQ,OAAA,CACzB0C,EAAUH,EAAAA,CAAqB3C,CAAI,EAEzC,OAAO,IAAM,CACX,IAAMqB,CAAAA,CAAY,QAAA,CAAS,cAAc,KAAK,CAAA,CAG9C,GAFAA,CAAAA,CAAU,KAAA,CAAM,QAAU,UAAA,CAEtBjB,CAAAA,CAAI,MAAM,IAAA,CAAM,CAClB,IAAMX,CAAAA,CAAUC,CAAAA,CAAUU,EAAI,QAAA,EAAU,EACxCiB,CAAAA,CAAU,WAAA,CAAY5B,CAAO,CAAA,CAGzBA,CAAAA,YAAmB,WAAA,GACrBW,EAAI,KAAA,CAAM,OAAA,GAAUX,CAAO,CAAA,CAC3BmD,EAAAA,CAAgBnD,EAASqD,CAAAA,CAAS1C,CAAAA,CAAI,MAAM,QAAQ,CAAA,CAAE,KAAK,IAAM,CAC/DA,EAAI,KAAA,CAAM,YAAA,GAAeX,CAAO,EAClC,CAAC,CAAA,EAEL,CAEA,OAAO4B,CACT,CACF,CAAC,EAQM,SAAS+B,EAAAA,CAAsBpD,CAAAA,CAAc2B,EAIhD,EAAC,CAAW,CACd,GAAM,CACJ,SAAA0B,CAAAA,CAAW,KAAA,CACX,SAAAN,CAAAA,CAAW,MAAA,CACX,OAAAO,CAAAA,CAAS,MACX,CAAA,CAAI3B,CAAAA,CAEJ,OAAO;AAAA,CAAA,EACN3B,CAAI,CAAA;AAAA,CAAA,EACJA,CAAI,CAAA;AAAA,cAAA,EACSqD,CAAQ,CAAA,CAAA,EAAIN,CAAQ,CAAA,CAAA,EAAIO,CAAM,CAAA;AAAA;;AAAA,CAAA,EAG3CtD,CAAI,CAAA;AAAA,CAAA,EACJA,CAAI,CAAA;AAAA;AAAA;;AAAA,CAAA,EAIJA,CAAI,CAAA;AAAA,CAAA,EACJA,CAAI,CAAA;AAAA;AAAA;AAAA,CAAA,CAGL,IAAA,EACF,CCrJA,IAAIuD,EAAAA,CAA4B,EAAC,CAG1B,SAASC,EAAAA,EAA+B,CAC7C,IAAMC,CAAAA,CAAOF,EAAAA,CACb,OAAAA,EAAAA,CAAc,EAAC,CACRE,CACT,CAGO,SAASC,EAAAA,CAAmBC,CAAAA,CAA+B,CAChE,IAAIC,CAAAA,CAAO,EAAA,CAGLC,CAAAA,CAAQF,CAAAA,CAAQ,OAAO,CAACG,CAAAA,CAAGC,CAAAA,GAAMA,CAAAA,CAAE,KAAA,EAASD,CAAAA,CAAG,EAAE,CAAA,CACjDE,CAAAA,CAAgBL,CAAAA,CAAQ,MAAA,CAAO,CAACG,CAAAA,CAAGC,CAAAA,GAAMA,CAAAA,CAAE,aAAA,EAAiBD,CAAAA,CAAG,EAAE,CAAA,CAEvE,GAAID,CAAAA,CAAO,CACT,IAAMI,CAAAA,CAAaD,CAAAA,CACfA,CAAAA,CAAc,OAAA,CAAQ,IAAA,CAAMH,CAAK,CAAA,CACjCA,CAAAA,CACJD,CAAAA,EAAQ,UAAUK,CAAU,CAAA;AAAA,EAC9B,CAGA,IAAA,IAAWC,CAAAA,IAAUP,CAAAA,CACnB,IAAA,IAAWQ,KAAQD,CAAAA,CAAO,IAAA,EAAQ,EAAC,CACjCN,GAAQ,SAAA,CACJO,CAAAA,CAAK,OAAMP,CAAAA,EAAQ,CAAA,OAAA,EAAUO,EAAK,IAAI,CAAA,CAAA,CAAA,CAAA,CACtCA,CAAAA,CAAK,QAAA,GAAUP,GAAQ,CAAA,WAAA,EAAcO,CAAAA,CAAK,QAAQ,CAAA,CAAA,CAAA,CAAA,CAClDA,EAAK,SAAA,GAAWP,CAAAA,EAAQ,CAAA,aAAA,EAAgBO,CAAAA,CAAK,SAAS,CAAA,CAAA,CAAA,CAAA,CAC1DP,CAAAA,EAAQ,aAAaO,CAAAA,CAAK,OAAO,IACjCP,CAAAA,EAAQ,CAAA;AAAA,CAAA,CAKZ,IAAA,IAAWM,CAAAA,IAAUP,CAAAA,CACnB,IAAA,IAAWS,CAAAA,IAAQF,EAAO,IAAA,EAAQ,EAAC,CACjCN,CAAAA,EAAQ,CAAA,aAAA,EAAgBQ,CAAAA,CAAK,GAAG,CAAA,QAAA,EAAWA,CAAAA,CAAK,IAAI,CAAA,CAAA,CAAA,CAChDA,CAAAA,CAAK,IAAA,GAAMR,GAAQ,CAAA,OAAA,EAAUQ,CAAAA,CAAK,IAAI,CAAA,CAAA,CAAA,CAAA,CAC1CR,CAAAA,EAAQ,CAAA;AAAA,CAAA,CAIZ,OAAOA,CACT,CAIA,IAAMS,EAAe,iBAAA,CASd,SAASC,EAAQJ,CAAAA,CAA+C,CACrE,IAAMK,CAAAA,CAAY,OAAOL,GAAW,UAAA,CAAaA,CAAAA,CAAS,IAAMA,CAAAA,CAGhE,GAAI,OAAO,QAAA,CAAa,GAAA,CAAa,CACnCX,EAAAA,CAAY,IAAA,CAAKgB,GAAW,CAAA,CAC5B,MACF,CAEA,IAAMC,IAA6B,EAAC,CAE9BC,EAAUnD,CAAAA,CAAO,IAAM,CAC3B,IAAMoD,CAAAA,CAAMH,GAAU,CAGtB,IAAA,IAAW1B,KAAM2B,GAAAA,CACf3B,CAAAA,CAAG,QAAO,CAKZ,GAHA2B,IAAgB,MAAA,CAAS,CAAA,CAGrBE,EAAI,KAAA,CAAO,CACb,IAAMb,CAAAA,CAAQa,CAAAA,CAAI,cACdA,CAAAA,CAAI,aAAA,CAAc,QAAQ,IAAA,CAAMA,CAAAA,CAAI,KAAK,CAAA,CACzCA,CAAAA,CAAI,MACR,QAAA,CAAS,KAAA,CAAQb,EACnB,CAGA,IAAA,IAAWM,KAAQO,CAAAA,CAAI,IAAA,EAAQ,EAAC,CAAG,CACjC,IAAM7B,CAAAA,CAAK,QAAA,CAAS,cAAc,MAAM,CAAA,CACxCA,EAAG,YAAA,CAAawB,CAAAA,CAAc,EAAE,CAAA,CAC5BF,CAAAA,CAAK,IAAA,EAAMtB,CAAAA,CAAG,YAAA,CAAa,MAAA,CAAQsB,EAAK,IAAI,CAAA,CAC5CA,EAAK,QAAA,EAAUtB,CAAAA,CAAG,aAAa,UAAA,CAAYsB,CAAAA,CAAK,QAAQ,CAAA,CACxDA,CAAAA,CAAK,WAAWtB,CAAAA,CAAG,YAAA,CAAa,aAAcsB,CAAAA,CAAK,SAAS,EAChEtB,CAAAA,CAAG,YAAA,CAAa,UAAWsB,CAAAA,CAAK,OAAO,EACvC,QAAA,CAAS,IAAA,CAAK,YAAYtB,CAAE,CAAA,CAC5B2B,IAAgB,IAAA,CAAK3B,CAAE,EACzB,CAGA,IAAA,IAAWuB,KAAQM,CAAAA,CAAI,IAAA,EAAQ,EAAC,CAAG,CACjC,IAAM7B,CAAAA,CAAK,QAAA,CAAS,aAAA,CAAc,MAAM,CAAA,CACxCA,CAAAA,CAAG,aAAawB,CAAAA,CAAc,EAAE,EAChCxB,CAAAA,CAAG,YAAA,CAAa,MAAOuB,CAAAA,CAAK,GAAG,EAC/BvB,CAAAA,CAAG,YAAA,CAAa,OAAQuB,CAAAA,CAAK,IAAI,EAC7BA,CAAAA,CAAK,IAAA,EAAMvB,EAAG,YAAA,CAAa,MAAA,CAAQuB,EAAK,IAAI,CAAA,CAChD,SAAS,IAAA,CAAK,WAAA,CAAYvB,CAAE,CAAA,CAC5B2B,GAAAA,CAAgB,KAAK3B,CAAE,EACzB,CAGA,IAAA,IAAW8B,CAAAA,IAAUD,EAAI,MAAA,EAAU,GAAI,CACrC,IAAM7B,EAAK,QAAA,CAAS,aAAA,CAAc,QAAQ,CAAA,CAC1CA,CAAAA,CAAG,YAAA,CAAawB,EAAc,EAAE,CAAA,CAC5BM,EAAO,GAAA,EAAK9B,CAAAA,CAAG,aAAa,KAAA,CAAO8B,CAAAA,CAAO,GAAG,CAAA,CAC7CA,CAAAA,CAAO,MAAM9B,CAAAA,CAAG,YAAA,CAAa,OAAQ8B,CAAAA,CAAO,IAAI,EAChDA,CAAAA,CAAO,KAAA,EAAO9B,EAAG,YAAA,CAAa,OAAA,CAAS,EAAE,CAAA,CACzC8B,CAAAA,CAAO,OAAO9B,CAAAA,CAAG,YAAA,CAAa,QAAS,EAAE,CAAA,CACzC8B,EAAO,SAAA,GAAW9B,CAAAA,CAAG,YAAc8B,CAAAA,CAAO,SAAA,CAAA,CAC9C,SAAS,IAAA,CAAK,WAAA,CAAY9B,CAAE,CAAA,CAC5B2B,GAAAA,CAAgB,KAAK3B,CAAE,EACzB,CAGA,GAAI6B,CAAAA,CAAI,UACN,IAAA,GAAW,CAACE,EAAK3E,CAAK,CAAA,GAAK,OAAO,OAAA,CAAQyE,CAAAA,CAAI,SAAS,CAAA,CACrD,QAAA,CAAS,gBAAgB,YAAA,CAAaE,CAAAA,CAAK3E,CAAK,CAAA,CAKpD,GAAIyE,EAAI,SAAA,CACN,IAAA,GAAW,CAACE,CAAAA,CAAK3E,CAAK,IAAK,MAAA,CAAO,OAAA,CAAQyE,EAAI,SAAS,CAAA,CACrD,SAAS,IAAA,CAAK,YAAA,CAAaE,EAAK3E,CAAK,EAG3C,CAAC,CAAA,CAGD,GAAI,CACF4E,CAAAA,CAAU,IAAM,CACdJ,CAAAA,EAAQ,CACR,IAAA,IAAW5B,KAAM2B,GAAAA,CACf3B,CAAAA,CAAG,SAEP,CAAC,EACH,CAAA,KAAQ,CAGR,CACF,CC3JO,SAASiC,GAAaC,CAAAA,CAAwB,CACnD,OAAOA,CACT,CAcO,SAASC,EAAAA,CACdC,CAAAA,CACAC,EACa,CACb,IAAMC,EAAoB,EAAC,CACrBC,EAA+C,EAAC,CAChDC,EAAsC,EAAC,CACvCC,EAAqC,EAAC,CACxCC,EAA2B,IAAA,CAC3BC,CAAAA,CAAkC,KAEhCC,CAAAA,CAA2B,CAC/B,QAAWb,CAAAA,CAAsB3E,CAAAA,CAAU,CAEzCyF,CAAAA,CAAQd,CAAAA,CAAK3E,CAAK,EACpB,CAAA,CACA,OAAA,CAAQ0F,EAAiC,CACvCP,CAAAA,CAAc,KAAKO,CAAO,EAC5B,EACA,aAAA,CAAcC,CAAAA,CAAkB,CAC9BP,CAAAA,CAAiB,IAAA,CAAKO,CAAI,EAC5B,CAAA,CACA,OAAQN,CACV,CAAA,CAEMO,EAAmB,CACvB,GAAA,CAAId,EAAgB,CAClB,OAAAI,EAAQ,IAAA,CAAKJ,CAAM,EACZc,CACT,CAAA,CAEA,OAAOjB,CAAAA,CAAa3E,CAAAA,CAAgB,CAClC,OAAAqF,CAAAA,CAAUV,CAAG,CAAA,CAAI3E,CAAAA,CACV4F,CACT,CAAA,CAEA,KAAA,CAAMC,CAAAA,CAAgC,CAMpC,GALAN,CAAAA,CACE,OAAOM,CAAAA,EAAa,QAAA,CAChB,SAAS,aAAA,CAA2BA,CAAQ,EAC5CA,CAAAA,CAEF,CAACN,EACH,MAAM,IAAI,MACR,CAAA,kCAAA,EAAqCM,CAAQ,EAC/C,CAAA,CAIF,IAAA,IAAWf,KAAUI,CAAAA,CACnBJ,CAAAA,CAAO,MAAMU,CAAS,CAAA,CAIxB,QAAWG,CAAAA,IAAQP,CAAAA,CACjBO,GAAK,CAIP,GAAI,CACFL,CAAAA,CAAcN,CAAAA,CAAeC,GAAa,EAAU,EACpDM,CAAAA,CAAY,WAAA,CAAYD,CAAW,EACrC,CAAA,MAAS/E,EAAK,CACZ,IAAMuF,EAAIvF,CAAAA,YAAe,KAAA,CAAQA,EAAM,IAAI,KAAA,CAAM,OAAOA,CAAG,CAAC,EAC5D,GAAI4E,CAAAA,CAAc,OAAS,CAAA,CACzB,IAAA,IAAWO,KAAWP,CAAAA,CACpBO,CAAAA,CAAQI,CAAC,CAAA,CAAA,KAGX,MAAMA,CAEV,CACF,CAAA,CAEA,SAAU,CACJR,CAAAA,EAAeC,IACjBA,CAAAA,CAAY,WAAA,CAAYD,CAAW,CAAA,CACnCA,CAAAA,CAAc,MAElB,CACF,CAAA,CAEA,OAAOM,CACT,CC9IO,SAASG,EAAAA,CAAYC,CAAAA,CAAYtE,EAAmC,CACzE,IAAMuE,EAAQ5F,CAAAA,CAAO,CAAC,CAAA,CAChB6F,CAAAA,CAAW7F,CAAAA,CAAOqB,CAAAA,EAAS,YAAc,KAAK,CAAA,CAChDyE,EAA+C,IAAA,CAEnD,SAASC,GAAQ,CACfC,CAAAA,GACAF,CAAAA,CAAQ,WAAA,CAAY,IAAMF,CAAAA,CAAM,MAAA,CAAQnC,GAAMA,CAAAA,CAAI,CAAC,EAAGkC,CAAE,EAC1D,CAEA,SAASK,CAAAA,EAAO,CACVF,CAAAA,GAAS,aAAA,CAAcA,CAAK,CAAA,CAAGA,CAAAA,CAAQ,MAC7C,CAEA,OAAID,GAAS,EAAGE,CAAAA,GAET,CACL,KAAA,EAAQ,IAAMH,CAAAA,EAAM,CAAA,CACpB,UAAW,IAAMC,CAAAA,EAAS,CAAA,CAC1B,KAAA,EAAQ,CAAEA,CAAAA,CAAS,IAAI,KAAK,CAAA,CAAGG,IAAQ,CAAA,CACvC,QAAS,CAAEH,CAAAA,CAAS,IAAI,IAAI,CAAA,CAAGE,IAAS,CAAA,CACxC,OAAQ,CAAEH,CAAAA,CAAM,IAAI,CAAC,EAAG,EACxB,OAAA,EAAU,CAAEI,IAAQ,CACtB,CACF,CAYO,SAASC,GAAWN,CAAAA,CAAY,CACrC,IAAMO,CAAAA,CAAQlG,CAAAA,CAAO,KAAK,CAAA,CACtB8F,CAAAA,CAA8C,KAElD,SAASC,CAAAA,EAAQ,CACfC,CAAAA,EAAK,CACLE,CAAAA,CAAM,GAAA,CAAI,KAAK,CAAA,CACfJ,EAAQ,UAAA,CAAW,IAAMI,EAAM,GAAA,CAAI,IAAI,EAAGP,CAAE,EAC9C,CAEA,SAASK,CAAAA,EAAO,CACVF,CAAAA,GAAS,YAAA,CAAaA,CAAK,CAAA,CAAGA,CAAAA,CAAQ,MAC5C,CAEA,OAAAC,GAAM,CAEC,CACL,OAAQ,IAAMG,CAAAA,IACd,OAAA,EAAU,CAAEH,IAAS,CAAA,CACrB,SAAU,CAAEC,CAAAA,GAAQ,CACtB,CACF,CAcO,SAASG,EAAAA,CAAeC,EAAiBC,CAAAA,CAAkC,CAChF,IAAMC,GAAAA,CAAYtG,CAAAA,CAAUoG,CAAAA,EAAQ,CAAA,CAChCN,CAAAA,CAA8C,KAElD,OAAA9E,CAAAA,CAAO,IAAM,CACX,IAAMrB,EAAQyG,CAAAA,EAAO,CACrB,OAAIN,CAAAA,EAAO,YAAA,CAAaA,CAAK,CAAA,CAC7BA,CAAAA,CAAQ,WAAW,IAAMQ,GAAAA,CAAU,IAAI3G,CAAK,CAAA,CAAG0G,CAAK,CAAA,CAC7C,IAAM,CAAMP,CAAAA,EAAO,YAAA,CAAaA,CAAK,EAAG,CACjD,CAAC,CAAA,EAEO,IAAMQ,KAAU,CAC1B,CAYO,SAASC,EAAAA,CAAeH,CAAAA,CAAiBI,EAAqC,CACnF,IAAMC,GAAAA,CAAYzG,CAAAA,CAAUoG,CAAAA,EAAQ,EAChCM,CAAAA,CAAa,CAAA,CACbZ,EAA8C,IAAA,CAElD,OAAA9E,EAAO,IAAM,CACX,IAAMrB,CAAAA,CAAQyG,CAAAA,GACRO,CAAAA,CAAM,IAAA,CAAK,KAAI,CACfC,CAAAA,CAAUD,EAAMD,CAAAA,CAEtB,OAAIE,GAAWJ,CAAAA,EACbC,GAAAA,CAAU,IAAI9G,CAAK,CAAA,CACnB+G,EAAaC,CAAAA,GAETb,CAAAA,EAAO,aAAaA,CAAK,CAAA,CAC7BA,EAAQ,UAAA,CAAW,IAAM,CACvBW,GAAAA,CAAU,GAAA,CAAI9G,CAAK,CAAA,CACnB+G,CAAAA,CAAa,KAAK,GAAA,GACpB,CAAA,CAAGF,CAAAA,CAAWI,CAAO,CAAA,CAAA,CAEhB,IAAM,CAAMd,CAAAA,EAAO,aAAaA,CAAK,EAAG,CACjD,CAAC,CAAA,EAEO,IAAMW,GAAAA,EAAU,CAC1B,CAWO,SAASI,EAAAA,CAAWC,EAAU,CAAA,CAAG,CACtC,IAAMlB,CAAAA,CAAQ5F,CAAAA,CAAO8G,CAAO,CAAA,CAC5B,OAAO,CACL,KAAA,EAAQ,IAAMlB,GAAM,CAAA,CACpB,GAAA,CAAImB,EAAQ,CAAA,CAAG,CAAEnB,EAAM,MAAA,CAAQnC,CAAAA,EAAMA,EAAIsD,CAAK,EAAG,EACjD,GAAA,CAAIA,CAAAA,CAAQ,EAAG,CAAEnB,CAAAA,CAAM,MAAA,CAAQnC,CAAAA,EAAMA,CAAAA,CAAIsD,CAAK,EAAG,CAAA,CACjD,GAAA,CAAIpH,EAAe,CAAEiG,CAAAA,CAAM,IAAIjG,CAAK,EAAG,EACvC,KAAA,EAAQ,CAAEiG,EAAM,GAAA,CAAIkB,CAAO,EAAG,CAChC,CACF,CAWO,SAASE,EAAAA,CAAUF,EAAU,KAAA,CAAO,CACzC,IAAMnH,CAAAA,CAAQK,CAAAA,CAAO8G,CAAO,CAAA,CAC5B,OAAO,CACL,KAAA,EAAQ,IAAMnH,GAAM,CAAA,CACpB,MAAA,EAAS,CAAEA,CAAAA,CAAM,MAAA,CAAQsH,GAAM,CAACA,CAAC,EAAG,CAAA,CACpC,OAAA,EAAU,CAAEtH,CAAAA,CAAM,GAAA,CAAI,IAAI,EAAG,CAAA,CAC7B,UAAW,CAAEA,CAAAA,CAAM,IAAI,KAAK,EAAG,CACjC,CACF,CAcO,SAASuH,EAAAA,CAAed,CAAAA,CAAgD,CAC7E,IAAIe,CAAAA,CACEC,IAAUpH,CAAAA,CAAsB,MAAS,EAE/C,OAAAgB,CAAAA,CAAO,IAAM,CACX,IAAMqG,EAAUjB,CAAAA,EAAO,CACvBgB,IAAQ,GAAA,CAAID,CAAS,EACrBA,CAAAA,CAAYE,EACd,CAAC,CAAA,EAEO,IAAMD,KAAQ,CACxB,CCtLO,SAASE,EAAAA,CAAcC,CAAAA,CAAwC,CACpE,GAAI,OAAO,MAAA,CAAW,IACpB,OAAQ,IAAM,OAGhB,IAAMC,CAAAA,CAAM,OAAO,UAAA,CAAWD,CAAK,EAC7BE,CAAAA,CAAUzH,CAAAA,CAAOwH,EAAI,OAAO,CAAA,CAE5BnC,EAAWI,CAAAA,EAA2BgC,CAAAA,CAAQ,IAAIhC,CAAAA,CAAE,OAAO,EACjE,OAAA+B,CAAAA,CAAI,iBAAiB,QAAA,CAAUnC,CAAO,GAE9B,IAAMoC,CAAAA,GAChB,CAQA,IAAMC,GAAmC,CACvC,EAAA,CAAI,IACJ,EAAA,CAAI,GAAA,CACJ,GAAI,IAAA,CACJ,EAAA,CAAI,KACJ,KAAA,CAAO,IACT,CAAA,CAYO,SAASC,EAAAA,CAAcC,CAAAA,CAA2BF,GAAqB,CAC5E,IAAMG,EAAS,MAAA,CAAO,OAAA,CAAQD,CAAW,CAAA,CAAE,IAAA,CAAK,CAACE,CAAAA,CAAGC,CAAAA,GAAMD,EAAE,CAAC,CAAA,CAAIC,EAAE,CAAC,CAAC,EAC/DC,CAAAA,CAAQhI,CAAAA,CAAO,OAAO,MAAA,CAAW,GAAA,CAAc,OAAO,UAAA,CAAa,IAAI,EAE7E,GAAI,OAAO,OAAW,GAAA,CAAa,CACjC,IAAMqF,CAAAA,CAAU,IAAM2C,EAAM,GAAA,CAAI,MAAA,CAAO,UAAU,CAAA,CACjD,MAAA,CAAO,iBAAiB,QAAA,CAAU3C,CAAAA,CAAS,CAAE,OAAA,CAAS,IAAK,CAAC,EAC9D,CAEA,SAASgC,GAAkB,CACzB,IAAMY,EAAID,CAAAA,EAAM,CACZE,EAAS,EAAA,CACb,IAAA,GAAW,CAACxI,CAAAA,CAAMyI,CAAG,IAAKN,CAAAA,CACpBI,CAAAA,EAAKE,IAAKD,CAAAA,CAASxI,CAAAA,CAAAA,CAEzB,OAAOwI,CAAAA,EAAUL,CAAAA,CAAO,CAAC,CAAA,GAAI,CAAC,GAAK,EACrC,CAEA,SAASO,CAAAA,CAAI1I,CAAAA,CAAuB,CAClC,IAAM2I,CAAAA,CAAKT,EAAYlI,CAAI,CAAA,CAC3B,OAAO2I,CAAAA,GAAO,MAAA,EAAaL,GAAM,EAAKK,CACxC,CAEA,SAASC,CAAAA,CAAG5I,EAAuB,CACjC,IAAM2I,EAAKT,CAAAA,CAAYlI,CAAI,EAC3B,OAAO2I,CAAAA,GAAO,QAAaL,CAAAA,EAAM,CAAIK,CACvC,CAEA,OAAO,CAAE,OAAA,CAAAhB,CAAAA,CAAS,IAAAe,CAAAA,CAAK,EAAA,CAAAE,EAAI,KAAA,EAAQ,IAAMN,GAAM,CAA6B,CAC9E,CAcO,SAASO,EAAAA,CACdjE,EACAkE,CAAAA,CACAC,GAAAA,CAA+B,QACpB,CACX,IAAMC,EAAQ,OAAO,MAAA,CAAW,IAC3BD,GAAAA,GAAY,OAAA,CAAU,aAAe,cAAA,CACtC,IAAA,CAGAE,CAAAA,CAAaH,CAAAA,CACjB,GAAIE,CAAAA,CACF,GAAI,CACF,IAAME,EAAMF,CAAAA,CAAM,OAAA,CAAQpE,CAAG,CAAA,CACzBsE,CAAAA,GAAQ,OAAMD,CAAAA,CAAa,IAAA,CAAK,MAAMC,CAAG,CAAA,EAC/C,MAAQ,CAAoB,CAG9B,IAAMC,CAAAA,CAAQ7I,CAAAA,CAAU2I,CAAU,CAAA,CAGlC,OAAID,IACF1H,CAAAA,CAAO,IAAM,CACX,IAAMrB,CAAAA,CAAQkJ,GAAM,CACpB,GAAI,CACFH,CAAAA,CAAM,OAAA,CAAQpE,EAAK,IAAA,CAAK,SAAA,CAAU3E,CAAK,CAAC,EAC1C,MAAQ,CAAqB,CAC/B,CAAC,CAAA,CAGG,OAAO,MAAA,CAAW,KACpB,MAAA,CAAO,gBAAA,CAAiB,UAAY8F,CAAAA,EAAM,CACxC,GAAIA,CAAAA,CAAE,GAAA,GAAQnB,GAAOmB,CAAAA,CAAE,QAAA,GAAa,KAClC,GAAI,CACFoD,EAAM,GAAA,CAAI,IAAA,CAAK,MAAMpD,CAAAA,CAAE,QAAQ,CAAC,EAClC,CAAA,KAAQ,CAAe,CAE3B,CAAC,GAIEoD,CACT,CAaO,SAASC,EAAAA,CAAazH,CAAAA,CAAgC,CAC3D,IAAM0H,CAAAA,CAAO/I,EAAO,EAAE,CAAA,CAChBgJ,EAAShJ,CAAAA,CAAO,KAAK,EACrBiJ,CAAAA,CAAU5H,CAAAA,EAAS,OAAA,EAAW,GAAA,CAChCyE,CAAAA,CAA8C,IAAA,CAElD,eAAeoD,CAAAA,CAAKvJ,CAAAA,CAA8B,CAC5C,OAAO,SAAA,CAAc,KAAe,CAAC,SAAA,CAAU,YACnD,MAAM,SAAA,CAAU,UAAU,SAAA,CAAUA,CAAK,EACzCoJ,CAAAA,CAAK,GAAA,CAAIpJ,CAAK,CAAA,CACdqJ,CAAAA,CAAO,IAAI,IAAI,CAAA,CACXlD,GAAO,YAAA,CAAaA,CAAK,EAC7BA,CAAAA,CAAQ,UAAA,CAAW,IAAMkD,CAAAA,CAAO,GAAA,CAAI,KAAK,CAAA,CAAGC,CAAO,GACrD,CAEA,OAAO,CACL,IAAA,EAAO,IAAMF,GAAK,CAAA,CAClB,MAAA,EAAS,IAAMC,CAAAA,EAAO,CAAA,CACtB,KAAAE,CACF,CACF,CAYO,SAASC,EAAAA,EAAqC,CACnD,GAAI,OAAO,OAAW,GAAA,CACpB,OAAQ,IAAM,IAAA,EAGhB,IAAMC,EAASpJ,CAAAA,CAAO,SAAA,CAAU,MAAM,CAAA,CACtC,OAAA,MAAA,CAAO,iBAAiB,QAAA,CAAU,IAAMoJ,EAAO,GAAA,CAAI,IAAI,CAAC,CAAA,CACxD,MAAA,CAAO,iBAAiB,SAAA,CAAW,IAAMA,EAAO,GAAA,CAAI,KAAK,CAAC,CAAA,EAElD,IAAMA,GAAO,CACvB,CAqBO,SAASC,EAAAA,CACdhI,CAAAA,CACkC,CAClC,IAAMwH,CAAAA,CAAQ7I,CAAAA,CAAyB,CACrC,QAAA,CAAU,IAAA,CACV,UAAW,IAAA,CACX,QAAA,CAAU,KACV,KAAA,CAAO,IAAA,CACP,QAAS,IACX,CAAC,EAED,OAAI,OAAO,UAAc,GAAA,EAAe,SAAA,CAAU,YAChD,SAAA,CAAU,WAAA,CAAY,cACnBsJ,CAAAA,EAAQ,CACPT,EAAM,GAAA,CAAI,CACR,SAAUS,CAAAA,CAAI,MAAA,CAAO,SACrB,SAAA,CAAWA,CAAAA,CAAI,OAAO,SAAA,CACtB,QAAA,CAAUA,EAAI,MAAA,CAAO,QAAA,CACrB,MAAO,IAAA,CACP,OAAA,CAAS,KACX,CAAC,EACH,CAAA,CACCpJ,CAAAA,EAAQ,CACP2I,CAAAA,CAAM,IAAI,CACR,QAAA,CAAU,KACV,SAAA,CAAW,IAAA,CACX,SAAU,IAAA,CACV,KAAA,CAAO3I,EACP,OAAA,CAAS,KACX,CAAC,EACH,CAAA,CACAmB,CACF,CAAA,CAEAwH,CAAAA,CAAM,IAAI,CAAE,GAAGA,GAAM,CAAG,OAAA,CAAS,KAAM,CAAC,CAAA,EAGlC,IAAMA,CAAAA,EAAM,CACtB,CAOO,SAASU,EAAAA,EAAgB,CAC9B,IAAMvB,CAAAA,CAAQhI,EAAO,OAAO,MAAA,CAAW,IAAc,MAAA,CAAO,UAAA,CAAa,CAAC,CAAA,CACpEwJ,CAAAA,CAASxJ,CAAAA,CAAO,OAAO,MAAA,CAAW,GAAA,CAAc,OAAO,WAAA,CAAc,CAAC,EAE5E,OAAI,OAAO,OAAW,GAAA,EACpB,MAAA,CAAO,iBAAiB,QAAA,CAAU,IAAM,CACtCgI,CAAAA,CAAM,GAAA,CAAI,OAAO,UAAU,CAAA,CAC3BwB,EAAO,GAAA,CAAI,MAAA,CAAO,WAAW,EAC/B,CAAA,CAAG,CAAE,OAAA,CAAS,IAAK,CAAC,CAAA,CAGf,CACL,OAAQ,IAAMxB,CAAAA,IACd,MAAA,EAAS,IAAMwB,GAAO,CACxB,CACF,CAqBO,SAASC,EAAAA,CACd7H,EACAyD,CAAAA,CACAhE,CAAAA,CAOI,EAAC,CACO,CACZ,GAAI,OAAO,QAAA,CAAa,GAAA,CAAa,OAAO,IAAM,CAAC,EAEnD,GAAM,CACJ,OAAAqI,CAAAA,CAAS,CAAC,aAAa,CAAA,CACvB,MAAA,CAAAC,EAAS,EAAC,CACV,OAAAC,CAAAA,CAAS,IACX,EAAIvI,CAAAA,CAEAwE,CAAAA,CAAW+D,EAEf,SAASC,CAAAA,EAAgC,CACvC,OAAO,OAAOjI,GAAW,UAAA,CAAaA,CAAAA,GAAWA,CACnD,CAEA,SAASkI,CAAAA,CAAaC,CAAAA,CAAuB,CAC3C,IAAMC,CAAAA,CAAcD,EAAM,MAAA,CAC1B,GAAI,CAACC,CAAAA,CAAa,OAAO,MAAA,CAEzB,QAAWC,CAAAA,IAAWN,CAAAA,CACpB,GAAI,OAAOM,CAAAA,EAAY,UACrB,GAAID,CAAAA,CAAY,QAAQC,CAAO,CAAA,CAAG,OAAO,KAAA,CAAA,KAAA,GAErCA,CAAAA,GAAYD,GAAeC,CAAAA,CAAQ,QAAA,CAASD,CAAW,CAAA,CAAG,OAAO,MAGzE,OAAO,MACT,CAEA,SAASE,CAAAA,CAASH,EAAoB,CACpC,GAAI,CAAClE,CAAAA,CAAU,OACf,IAAMtD,CAAAA,CAAKsH,CAAAA,GACX,GAAI,CAACtH,EAAI,OAET,IAAMyH,EAAcD,CAAAA,CAAM,MAAA,CACtBxH,CAAAA,GAAOyH,CAAAA,EAAezH,CAAAA,CAAG,QAAA,CAASyH,CAAW,CAAA,EAC7CF,CAAAA,CAAaC,CAAK,CAAA,EAEtB1E,CAAAA,CAAQ0E,CAAK,EACf,CAEA,QAAWI,CAAAA,IAAaT,CAAAA,CACtB,SAAS,gBAAA,CAAiBS,CAAAA,CAAWD,EAAU,CAAE,OAAA,CAAS,KAAM,OAAA,CAAS,IAAK,CAAC,CAAA,CAGjF,IAAM/F,EAAU,IAAM,CACpB,QAAWgG,CAAAA,IAAaT,CAAAA,CACtB,SAAS,mBAAA,CAAoBS,CAAAA,CAAWD,EAAU,CAAE,OAAA,CAAS,IAAK,CAAyB,EAE/F,EAGA,OAAC/F,CAAAA,CAAgB,OAAS,IAAM,CAAE0B,CAAAA,CAAW,KAAM,CAAA,CAClD1B,CAAAA,CAAgB,QAAU,IAAM,CAAE0B,EAAW,MAAO,CAAA,CAE9C1B,CACT,CClVO,IAAMiG,GAASvK,GAAAA,CAA8BC,CAAAA,EAAQ,CAC1D,IAAIiB,CAAAA,CAAgC,KAChCkE,CAAAA,CAA2B,IAAA,CAE/B,SAAS4E,CAAAA,EAAyB,CAChC,IAAMjI,CAAAA,CAAS9B,CAAAA,CAAI,MAAM,MAAA,CACzB,OAAK8B,EACD,OAAOA,CAAAA,EAAW,SACb,QAAA,CAAS,aAAA,CAA2BA,CAAM,CAAA,EAAK,QAAA,CAAS,KAE1DA,CAAAA,CAJa,QAAA,CAAS,IAK/B,CAEA,OAAA2C,EAAU,IAAM,CACVU,GAAelE,CAAAA,EACjBA,CAAAA,CAAU,YAAYkE,CAAW,EAErC,CAAC,CAAA,CAEM,IAAM,CACXlE,CAAAA,CAAY8I,CAAAA,GACZ,IAAM1K,CAAAA,CAAUW,EAAI,QAAA,EAAS,CAC7B,OAAAmF,CAAAA,CAAc7F,CAAAA,CAAUD,CAAO,CAAA,CAC/B4B,CAAAA,CAAU,YAAYkE,CAAW,CAAA,CAG1B,SAAS,aAAA,CAAc,QAAQ,CACxC,CACF,CAAC,ECeD,IAAIoF,EAAAA,CAAY,EAKT,SAASC,EAAAA,CAAcjJ,EAA0B,EAAC,CAAY,CACnE,GAAM,CACJ,WAAAkJ,CAAAA,CAAa,CAAA,CACb,eAAA,CAAAC,CAAAA,CAAkB,GAAA,CAClB,QAAA,CAAAC,EAAW,WACb,CAAA,CAAIpJ,EAEEqJ,CAAAA,CAAS1K,CAAAA,CAAgB,EAAE,CAAA,CAC3B2K,EAAS,IAAI,GAAA,CAEnB,SAASC,CAAAA,CAAIC,CAAAA,CAAiBC,EAAiBC,CAAAA,CAA6B,CAC1E,IAAMC,CAAAA,CAAK,CAAA,MAAA,EAAS,EAAEX,EAAS,CAAA,CAAA,CACzB5H,EAAWsI,CAAAA,EAAM,QAAA,EAAYP,EAC7BS,CAAAA,CAAcF,CAAAA,EAAM,aAAe,IAAA,CAEnCG,CAAAA,CAAe,CACnB,EAAA,CAAAF,CAAAA,CACA,KAAAH,CAAAA,CACA,OAAA,CAAAC,EACA,QAAA,CAAArI,CAAAA,CACA,YAAAwI,CAAAA,CACA,SAAA,CAAW,IAAA,CAAK,GAAA,EAClB,CAAA,CAaA,GAXAP,CAAAA,CAAO,MAAA,CAAQS,GAAS,CACtB,IAAMC,EAAO,CAAC,GAAGD,EAAMD,CAAK,CAAA,CAE5B,GAAIE,CAAAA,CAAK,MAAA,CAASb,EAAY,CAC5B,IAAMc,EAAUD,CAAAA,CAAK,KAAA,GACrBE,GAAAA,CAAWD,CAAAA,CAAQ,EAAE,EACvB,CACA,OAAOD,CACT,CAAC,EAGG3I,CAAAA,CAAW,CAAA,CAAG,CAChB,IAAMqD,CAAAA,CAAQ,WAAW,IAAMyF,CAAAA,CAAQP,CAAE,CAAA,CAAGvI,CAAQ,EACpDkI,CAAAA,CAAO,GAAA,CAAIK,CAAAA,CAAIlF,CAAK,EACtB,CAEA,OAAOkF,CACT,CAEA,SAASO,CAAAA,CAAQP,CAAAA,CAAkB,CACjCM,GAAAA,CAAWN,CAAE,EACbN,CAAAA,CAAO,MAAA,CAAQS,GAASA,CAAAA,CAAK,MAAA,CAAQ3H,GAAMA,CAAAA,CAAE,EAAA,GAAOwH,CAAE,CAAC,EACzD,CAEA,SAASQ,CAAAA,EAAmB,CAC1B,IAAA,GAAW,CAACR,CAAE,CAAA,GAAKL,CAAAA,CACjBW,IAAWN,CAAE,CAAA,CAEfN,EAAO,GAAA,CAAI,EAAE,EACf,CAEA,SAASY,GAAAA,CAAWN,CAAAA,CAAkB,CACpC,IAAMlF,CAAAA,CAAQ6E,EAAO,GAAA,CAAIK,CAAE,EACvBlF,CAAAA,GACF,YAAA,CAAaA,CAAK,CAAA,CAClB6E,CAAAA,CAAO,OAAOK,CAAE,CAAA,EAEpB,CAEA,OAAO,CACL,QAAS,IAAMN,CAAAA,IACf,QAAA,CAAAD,CAAAA,CACA,QAAS,CAACgB,CAAAA,CAAKV,IAASH,CAAAA,CAAI,SAAA,CAAWa,EAAKV,CAAI,CAAA,CAChD,MAAO,CAACU,CAAAA,CAAKV,IAASH,CAAAA,CAAI,OAAA,CAASa,EAAKV,CAAI,CAAA,CAC5C,KAAM,CAACU,CAAAA,CAAKV,IAASH,CAAAA,CAAI,MAAA,CAAQa,EAAKV,CAAI,CAAA,CAC1C,OAAA,CAAS,CAACU,CAAAA,CAAKV,CAAAA,GAASH,EAAI,SAAA,CAAWa,CAAAA,CAAKV,CAAI,CAAA,CAChD,GAAA,CAAAH,EACA,OAAA,CAAAW,CAAAA,CACA,WAAAC,CACF,CACF,CC3FO,SAASE,EAAAA,CAAS9H,EAAsB,EAAC,CAAU,CACxD,GAAM,CACJ,OAAA+H,CAAAA,CAAS,CACP,MAAO,EAAC,CACR,KAAM,EACR,EACA,UAAA,CAAAC,GAAAA,CAAa,cACb,SAAA,CAAAC,CAAAA,CAAY,aACZ,UAAA,CAAAC,CAAAA,CAAa,IACf,CAAA,CAAIlI,CAAAA,CAEEmI,EAAa,MAAA,CAAO,IAAA,CAAKJ,CAAM,CAAA,CAGrC,SAASK,CAAAA,EAAyB,CAChC,OAAI,OAAO,OAAW,GAAA,CAAoBpI,CAAAA,CAAO,cAAgB,OAAA,CAC1D,MAAA,CAAO,WAAW,8BAA8B,CAAA,CAAE,QAAU,MAAA,CAAS,OAC9E,CAGA,SAASqI,CAAAA,EAA0B,CACjC,GAAI,OAAO,OAAW,GAAA,EAAeL,GAAAA,CAAY,CAC/C,IAAMM,CAAAA,CAAS,aAAa,OAAA,CAAQN,GAAU,EAC9C,GAAIM,CAAAA,EAAUH,EAAW,QAAA,CAASG,CAAM,EAAG,OAAOA,CACpD,CACA,OAAOtI,CAAAA,CAAO,cAAgBoI,CAAAA,EAChC,CAEA,IAAM3E,CAAAA,CAAUrH,CAAAA,CAAOiM,GAAiB,CAAA,CAClCE,IAASC,CAAAA,CAAS,IAAM/E,GAAQ,GAAM,MAAM,EAGlD,SAASgF,CAAAA,CAAW3M,EAAoB,CACtC,GAAI,OAAO,QAAA,CAAa,GAAA,CAAa,OAGrC,QAAA,CAAS,eAAA,CAAgB,aAAamM,CAAAA,CAAWnM,CAAI,EAGrD,IAAM4M,CAAAA,CAAOX,EAAOjM,CAAI,CAAA,CACxB,GAAI4M,CAAAA,CACF,IAAA,GAAW,CAAChI,CAAAA,CAAK3E,CAAK,IAAK,MAAA,CAAO,OAAA,CAAQ2M,CAAI,CAAA,CAC5C,QAAA,CAAS,gBAAgB,KAAA,CAAM,WAAA,CAAYhI,EAAK3E,CAAK,CAAA,CAKzD,SAAS,eAAA,CAAgB,SAAA,CAAU,OAAO,GAAGoM,CAAU,EACvD,QAAA,CAAS,eAAA,CAAgB,UAAU,GAAA,CAAIrM,CAAI,EAC7C,CAGA,OAAAsB,EAAO,IAAM,CACX,IAAMtB,CAAAA,CAAO2H,CAAAA,GACbgF,CAAAA,CAAW3M,CAAI,EAGX,OAAO,MAAA,CAAW,KAAekM,GAAAA,EACnC,YAAA,CAAa,QAAQA,GAAAA,CAAYlM,CAAI,EAEzC,CAAC,CAAA,CAGGoM,GAAc,OAAO,MAAA,CAAW,KACtB,MAAA,CAAO,UAAA,CAAW,8BAA8B,CAAA,CACxD,gBAAA,CAAiB,QAAA,CAAWrG,CAAAA,EAAM,CAErB,YAAA,CAAa,QAAQmG,GAAU,CAAA,EAE5CvE,EAAQ,GAAA,CAAI5B,CAAAA,CAAE,QAAU,MAAA,CAAS,OAAO,EAE5C,CAAC,CAAA,CAGI,CACL,OAAA,CAAS,IAAM4B,GAAQ,CACvB,MAAA,CAAA8E,IACA,GAAA,CAAII,CAAAA,CAAe,CACbR,CAAAA,CAAW,QAAA,CAASQ,CAAK,CAAA,EAC3BlF,CAAAA,CAAQ,IAAIkF,CAAK,EAErB,EACA,MAAA,EAAS,CACPlF,EAAQ,GAAA,CAAI8E,GAAAA,GAAW,OAAA,CAAU,MAAM,EACzC,CAAA,CACA,SAAA,EAAY,CACN,OAAO,MAAA,CAAW,GAAA,EAAeP,GAAAA,EACnC,YAAA,CAAa,UAAA,CAAWA,GAAU,CAAA,CAEpCvE,CAAAA,CAAQ,IAAI2E,CAAAA,EAAgB,EAC9B,CAAA,CACA,MAAA,CAAQD,CACV,CACF,CChGO,SAASS,EAAAA,CACdC,CAAAA,CACAC,EACAC,CAAAA,CACAC,CAAAA,CACAC,EAAW,CAAA,CACG,CACd,IAAMC,CAAAA,CAAe,IAAA,CAAK,MAAML,CAAAA,CAAYE,CAAU,EAChDI,CAAAA,CAAe,IAAA,CAAK,KAAKL,CAAAA,CAAkBC,CAAU,EAErD5G,CAAAA,CAAQ,IAAA,CAAK,IAAI,CAAA,CAAG+G,CAAAA,CAAeD,CAAQ,CAAA,CAC3CG,CAAAA,CAAM,KAAK,GAAA,CAAIJ,CAAAA,CAAYE,CAAAA,CAAeC,CAAAA,CAAeF,CAAQ,CAAA,CAEvE,OAAO,CACL,KAAA,CAAA9G,EACA,GAAA,CAAAiH,CAAAA,CACA,YAAaJ,CAAAA,CAAaD,CAAAA,CAC1B,UAAW5G,CAAAA,CAAQ4G,CACrB,CACF,CAeO,SAASM,GAAkB5L,CAAAA,CAK/B,CACD,IAAMoL,CAAAA,CAAYzM,CAAAA,CAAO,CAAC,CAAA,CACpB0M,CAAAA,CAAkB1M,EAAOqB,CAAAA,CAAQ,eAAA,EAAmB,GAAG,CAAA,CACvDwL,CAAAA,CAAWxL,EAAQ,QAAA,EAAY,CAAA,CAE/B6L,EAAQd,CAAAA,CAAS,IACdI,GACLC,CAAAA,EAAU,CACVC,GAAgB,CAChBrL,CAAAA,CAAQ,WACRA,CAAAA,CAAQ,KAAA,EAAM,CAAE,MAAA,CAChBwL,CACF,CACD,EAEKM,CAAAA,CAAef,CAAAA,CAAS,IAAM,CAClC,IAAMgB,EAAIF,CAAAA,EAAM,CAChB,OAAO7L,CAAAA,CAAQ,KAAA,GAAQ,KAAA,CAAM+L,CAAAA,CAAE,MAAOA,CAAAA,CAAE,GAAG,EAAE,GAAA,CAAI,CAACC,EAAMC,CAAAA,IAAO,CAC7D,KAAAD,CAAAA,CACA,KAAA,CAAOD,EAAE,KAAA,CAAQE,CACnB,EAAE,CACJ,CAAC,EAED,SAASC,CAAAA,CAAS9H,EAAgB,CAChC,IAAM7D,EAAS6D,CAAAA,CAAE,MAAA,CACjBgH,EAAU,GAAA,CAAI7K,CAAAA,CAAO,SAAS,EAChC,CAEA,SAAS4L,EAAmBhE,CAAAA,CAAsB,CAChDkD,EAAgB,GAAA,CAAIlD,CAAM,EAC5B,CAEA,OAAO,CACL,KAAA,CAAA0D,CAAAA,CACA,aAAAC,CAAAA,CACA,QAAA,CAAAI,EACA,kBAAA,CAAAC,CAAAA,CACA,WAAY,IAAMf,CAAAA,GACpB,CACF,KAIagB,EAAAA,CAAa5N,GAAAA,CAAuCC,GAAQ,CACvE,GAAM,CACJ,UAAA,CAAA6M,CAAAA,CACA,gBAAiBe,CAAAA,CACjB,QAAA,CAAAb,EAAW,CACb,CAAA,CAAI/M,EAAI,KAAA,CAEF2M,CAAAA,CAAYzM,EAAO,CAAC,CAAA,CAE1B,OAAO,IAAM,CACX,IAAM2N,EAAQ7N,CAAAA,CAAI,KAAA,CAAM,KAClB0J,CAAAA,CAASkE,CAAAA,EAAe,IAExBN,CAAAA,CAAIZ,EAAAA,CAAeC,GAAU,CAAGjD,CAAAA,CAAQmD,EAAYgB,CAAAA,CAAM,MAAA,CAAQd,CAAQ,CAAA,CAG1Ee,CAAAA,CAAQ,SAAS,aAAA,CAAc,KAAK,EAC1CA,CAAAA,CAAM,KAAA,CAAM,OAAS,CAAA,EAAGpE,CAAM,KAC9BoE,CAAAA,CAAM,KAAA,CAAM,SAAW,MAAA,CACvBA,CAAAA,CAAM,MAAM,QAAA,CAAW,UAAA,CAEvBA,EAAM,gBAAA,CAAiB,QAAA,CAAU,IAAM,CACrCnB,CAAAA,CAAU,IAAImB,CAAAA,CAAM,SAAS,EAC/B,CAAA,CAAG,CAAE,OAAA,CAAS,IAAK,CAAC,CAAA,CAGpB,IAAMC,CAAAA,CAAQ,QAAA,CAAS,cAAc,KAAK,CAAA,CAC1CA,EAAM,KAAA,CAAM,MAAA,CAAS,GAAGT,CAAAA,CAAE,WAAW,KACrCS,CAAAA,CAAM,KAAA,CAAM,SAAW,UAAA,CAGvB,IAAM1O,EAAU,QAAA,CAAS,aAAA,CAAc,KAAK,CAAA,CAC5CA,CAAAA,CAAQ,MAAM,QAAA,CAAW,UAAA,CACzBA,EAAQ,KAAA,CAAM,GAAA,CAAM,GAAGiO,CAAAA,CAAE,SAAS,KAClCjO,CAAAA,CAAQ,KAAA,CAAM,KAAO,GAAA,CACrBA,CAAAA,CAAQ,MAAM,KAAA,CAAQ,GAAA,CAGtB,QAASmO,GAAAA,CAAIF,CAAAA,CAAE,MAAOE,GAAAA,CAAIF,CAAAA,CAAE,IAAKE,GAAAA,EAAAA,CAAK,CACpC,IAAMD,CAAAA,CAAOM,CAAAA,CAAML,GAAC,CAAA,CACpB,GAAI,CAACD,CAAAA,CAAM,SAEX,IAAMS,CAAAA,CAAM1O,CAAAA,CAAUU,EAAI,KAAA,CAAM,QAAA,CAASuN,EAAMC,GAAC,CAAC,EAC7CQ,CAAAA,YAAe,WAAA,GACjBA,EAAI,KAAA,CAAM,MAAA,CAAS,GAAGnB,CAAU,CAAA,EAAA,CAAA,CAAA,CAElCxN,EAAQ,WAAA,CAAY2O,CAAG,EACzB,CAEA,OAAAD,EAAM,WAAA,CAAY1O,CAAO,EACzByO,CAAAA,CAAM,WAAA,CAAYC,CAAK,CAAA,CAChBD,CACT,CACF,CAAC,EChJM,SAASG,GACdC,CAAAA,CACc,CACd,IAAM3M,CAAAA,CACJ,OAAO2M,GAAoB,UAAA,CACvB,CAAE,OAAQA,CAAgB,CAAA,CAC1BA,EAEA,CACJ,MAAA,CAAAC,EACA,OAAA,CAASC,CAAAA,CACT,MAAOC,CAAAA,CACP,OAAA,CAAAlF,EACA,KAAA,CAAA5C,CAAAA,CAAQ,GACV,CAAA,CAAIhF,CAAAA,CAGA+M,EAAoC,IAAA,CACpCC,CAAAA,CAAoC,KACpCC,GAAAA,CAA0B,IAAA,CAE9B,SAASC,CAAAA,EAA2B,CAClC,OAAIF,CAAAA,GAEJA,CAAAA,CAAcJ,GAAO,CAClB,IAAA,CAAMO,CAAAA,EAAQ,CACbJ,CAAAA,CAAeI,CAAAA,CAAI,QACrB,CAAC,CAAA,CACA,MAAOtO,CAAAA,EAAQ,CACdoO,IAAYpO,CAAAA,YAAe,KAAA,CAAQA,EAAM,IAAI,KAAA,CAAM,OAAOA,CAAG,CAAC,EAChE,CAAC,CAAA,CAEImO,EACT,CAEA,OAAOxO,IAAoBC,GAAAA,EAAQ,CACjC,IAAM+I,CAAAA,CAAQ7I,CAAAA,CAAsC,SAAS,CAAA,CACvDyO,CAAAA,CAAczO,EAAO,KAAK,CAAA,CAGhCuO,GAAU,CAAE,IAAA,CAAK,IAAM,CACjBD,GAAAA,CACFzF,EAAM,GAAA,CAAI,OAAO,EAEjBA,CAAAA,CAAM,GAAA,CAAI,OAAO,EAErB,CAAC,CAAA,CAGD,IAAI6F,CAAAA,CAAmD,IAAA,CACnDrI,EAAQ,CAAA,CACVqI,CAAAA,CAAa,WAAW,IAAMD,CAAAA,CAAY,IAAI,IAAI,CAAA,CAAGpI,CAAK,CAAA,CAE1DoI,CAAAA,CAAY,IAAI,IAAI,CAAA,CAItB,IAAIE,CAAAA,CAAqD,IAAA,CACzD,OAAI1F,CAAAA,GACF0F,CAAAA,CAAe,WAAW,IAAM,CAC1B9F,GAAM,GAAM,SAAA,GACdyF,IAAY,IAAI,KAAA,CAAM,mCAAmCrF,CAAO,CAAA,EAAA,CAAI,EACpEJ,CAAAA,CAAM,GAAA,CAAI,OAAO,CAAA,EAErB,CAAA,CAAGI,CAAO,CAAA,CAAA,CAGL,IAAM,CACX,IAAM2F,CAAAA,CAAI/F,CAAAA,GAQV,OALI+F,CAAAA,GAAM,YACJF,CAAAA,EAAY,YAAA,CAAaA,CAAU,CAAA,CACnCC,CAAAA,EAAc,aAAaA,CAAY,CAAA,CAAA,CAGzCC,IAAM,OAAA,EAAWR,CAAAA,CACZA,EAAatO,GAAAA,CAAI,KAAY,EAGlC8O,CAAAA,GAAM,OAAA,EAAWT,GAAWG,GAAAA,CACvBlP,CAAAA,CAAU+O,EAAQG,GAAS,CAAC,EAGjCM,CAAAA,GAAM,SAAA,EAAaH,GAAY,EAAKP,CAAAA,CAC/B9O,EAAU8O,CAAAA,EAAW,EAIvB,QAAA,CAAS,aAAA,CAAc,eAAe,CAC/C,CACF,CAAC,CACH,CC5HO,SAASW,EAAAA,CAA6BC,CAAAA,CAAyB,CACpE,IAAMC,CAAAA,CAAID,CAAAA,CAAI,OACd,GAAIC,CAAAA,GAAM,EAAG,OAAO,GAGpB,IAAMC,CAAAA,CAAkB,EAAC,CAEnBC,CAAAA,CAAyB,IAAI,KAAA,CAAMF,CAAC,EAAE,IAAA,CAAK,EAAE,EAE7CG,CAAAA,CAAoB,GAE1B,IAAA,IAAS5B,CAAAA,CAAI,EAAGA,CAAAA,CAAIyB,CAAAA,CAAGzB,IAAK,CAC1B,IAAM3N,EAAQmP,CAAAA,CAAIxB,CAAC,EAGnB,GAAI3N,CAAAA,GAAU,GAAI,SAGlB,IAAIwP,EAAK,CAAA,CACLC,CAAAA,CAAKJ,CAAAA,CAAM,MAAA,CAEf,KAAOG,CAAAA,CAAKC,GAAI,CACd,IAAMC,EAAOF,CAAAA,CAAKC,CAAAA,EAAO,EACrBJ,CAAAA,CAAMK,CAAG,EAAI1P,CAAAA,CACfwP,CAAAA,CAAKE,EAAM,CAAA,CAEXD,CAAAA,CAAKC,EAET,CAEAL,CAAAA,CAAMG,CAAE,CAAA,CAAIxP,CAAAA,CACZuP,EAAQC,CAAE,CAAA,CAAI7B,EAEV6B,CAAAA,CAAK,CAAA,GACPF,EAAa3B,CAAC,CAAA,CAAI4B,EAAQC,CAAAA,CAAK,CAAC,GAEpC,CAGA,IAAMjH,EAAmB,IAAI,KAAA,CAAM8G,EAAM,MAAM,CAAA,CAC3CM,EAAIJ,CAAAA,CAAQF,CAAAA,CAAM,MAAA,CAAS,CAAC,CAAA,CAEhC,IAAA,IAAS1B,EAAI0B,CAAAA,CAAM,MAAA,CAAS,EAAG1B,CAAAA,EAAK,CAAA,CAAGA,IACrCpF,CAAAA,CAAOoF,CAAC,EAAIgC,CAAAA,CACZA,CAAAA,CAAIL,EAAaK,CAAC,CAAA,CAGpB,OAAOpH,CACT,CAiBO,SAASqH,EAAAA,CACdC,CAAAA,CACAC,EACe,CACf,IAAMC,EAAqB,EAAC,CAGtBC,EAAY,IAAI,GAAA,CACtB,QAASrC,CAAAA,CAAI,CAAA,CAAGA,EAAIkC,CAAAA,CAAQ,MAAA,CAAQlC,IAClCqC,CAAAA,CAAU,GAAA,CAAIH,EAAQlC,CAAC,CAAA,CAAGA,CAAC,CAAA,CAI7B,IAAMsC,EAAqB,IAAI,KAAA,CAAMH,EAAQ,MAAM,CAAA,CACnD,QAASnC,CAAAA,CAAI,CAAA,CAAGA,EAAImC,CAAAA,CAAQ,MAAA,CAAQnC,IAClCsC,CAAAA,CAAStC,CAAC,EAAIqC,CAAAA,CAAU,GAAA,CAAIF,EAAQnC,CAAC,CAAC,GAAK,EAAA,CAI7C,IAAMuC,EAAY,IAAI,GAAA,CAAIJ,CAAO,CAAA,CACjC,IAAA,IAASnC,EAAI,CAAA,CAAGA,CAAAA,CAAIkC,EAAQ,MAAA,CAAQlC,CAAAA,EAAAA,CAC7BuC,EAAU,GAAA,CAAIL,CAAAA,CAAQlC,CAAC,CAAC,CAAA,EAC3BoC,EAAI,IAAA,CAAK,CAAE,KAAM,QAAA,CAAU,QAAA,CAAUpC,CAAE,CAAC,CAAA,CAK5C,IAAMwC,EAAM,IAAI,GAAA,CAAIjB,GAA6Be,CAAQ,CAAC,EAG1D,IAAA,IAAStC,CAAAA,CAAI,EAAGA,CAAAA,CAAImC,CAAAA,CAAQ,OAAQnC,CAAAA,EAAAA,CAC9BsC,CAAAA,CAAStC,CAAC,CAAA,GAAM,EAAA,CAElBoC,EAAI,IAAA,CAAK,CAAE,KAAM,QAAA,CAAU,QAAA,CAAUpC,CAAE,CAAC,CAAA,CAC9BwC,EAAI,GAAA,CAAIxC,CAAC,GAEnBoC,CAAAA,CAAI,IAAA,CAAK,CAAE,IAAA,CAAM,MAAA,CAAQ,SAAUpC,CAAAA,CAAG,QAAA,CAAUsC,EAAStC,CAAC,CAAE,CAAC,CAAA,CAKjE,OAAOoC,CACT,CAKO,SAASK,EAAAA,CAASP,EAAoBC,CAAAA,CAI3C,CACA,IAAMC,CAAAA,CAAMH,EAAAA,CAAcC,EAASC,CAAO,CAAA,CACtCO,EAAU,CAAA,CAAGC,CAAAA,CAAQ,EAAGC,CAAAA,CAAU,CAAA,CACtC,QAAWC,CAAAA,IAAMT,CAAAA,CACXS,EAAG,IAAA,GAAS,QAAA,CAAUH,IACjBG,CAAAA,CAAG,IAAA,GAAS,OAAQF,CAAAA,EAAAA,CACxBC,CAAAA,EAAAA,CAEP,OAAO,CAAE,OAAA,CAAAF,EAAS,KAAA,CAAAC,CAAAA,CAAO,QAAAC,CAAQ,CACnC,CClIA,IAAIE,CAAAA,CAAW,MACTC,CAAAA,CAAgB,IAAI,IACtBC,EAAAA,CAAkB,CAAA,CAqBf,SAASC,EAAAA,EAA4B,CAC1CH,CAAAA,CAAW,KACb,CAKO,SAASI,IAA6B,CAC3CJ,CAAAA,CAAW,MACXC,CAAAA,CAAc,KAAA,GAChB,CAKO,SAASI,IAAkC,CAChD,OAAOL,CACT,CAMO,SAASM,GAAYC,CAAAA,CAAgC,CAC1D,GAAI,CAACP,CAAAA,CAAU,OAAO,GAAA,CAEtB,IAAMpF,EAAK,EAAEsF,EAAAA,CACb,OAAAD,CAAAA,CAAc,GAAA,CAAIrF,EAAI,CACpB,EAAA,CAAAA,EACA,SAAA,CAAW,IAAA,CAAK,KAAI,CACpB,UAAA,CAAY4F,IAAa,CACzB,aAAA,CAAeD,CAAAA,EAAiB,IAAA,CAChC,QAAA,CAAU,KACZ,CAAC,CAAA,CAEM3F,CACT,CAKO,SAAS6F,EAAAA,CAAc7F,EAAkB,CAC9C,GAAI,CAACoF,CAAAA,EAAYpF,CAAAA,GAAO,GAAI,OAE5B,IAAM8F,EAAST,CAAAA,CAAc,GAAA,CAAIrF,CAAE,CAAA,CAC/B8F,CAAAA,GACFA,EAAO,QAAA,CAAW,IAAA,CAClBT,EAAc,MAAA,CAAOrF,CAAE,GAE3B,CAKO,SAAS+F,IAAmC,CACjD,OAAO,MAAM,IAAA,CAAKV,CAAAA,CAAc,QAAQ,CAC1C,CAOO,SAASW,EAAAA,CAAcC,EAAc,GAAA,CAAsB,CAChE,GAAI,CAACb,CAAAA,CAAU,OAAO,EAAC,CAEvB,IAAMzJ,EAAM,IAAA,CAAK,GAAA,GACXuK,CAAAA,CAA0B,GAEhC,IAAA,IAAWJ,CAAAA,IAAUT,EAAc,MAAA,EAAO,CACpC,CAACS,CAAAA,CAAO,QAAA,EAAYnK,EAAMmK,CAAAA,CAAO,SAAA,CAAYG,GAC/CC,CAAAA,CAAS,IAAA,CAAK,CACZ,QAAA,CAAUJ,CAAAA,CAAO,GACjB,GAAA,CAAKnK,CAAAA,CAAMmK,EAAO,SAAA,CAClB,aAAA,CAAeA,EAAO,aAAA,CACtB,UAAA,CAAYA,EAAO,UACrB,CAAC,EAIL,OAAOI,CACT,CAKO,SAASC,EAAAA,CAAYF,CAAAA,CAAc,GAAA,CAAa,CACrD,IAAMG,EAAQJ,EAAAA,CAAcC,CAAW,EACvC,GAAIG,CAAAA,CAAM,SAAW,CAAA,CAErB,CAAA,OAAA,CAAQ,KACN,CAAA,UAAA,EAAaA,CAAAA,CAAM,MAAM,CAAA,mCAAA,CAC3B,CAAA,CACA,QAAWC,CAAAA,IAAQD,CAAAA,CAAO,CACxB,IAAM9P,CAAAA,CAAY+P,EAAK,aAAA,CAAgB,CAAA,IAAA,EAAOA,EAAK,aAAa,CAAA,CAAA,CAAK,GACrE,OAAA,CAAQ,IAAA,CACN,aAAaA,CAAAA,CAAK,QAAQ,GAAG/P,CAAS,CAAA,mBAAA,EAAA,CAAkB+P,EAAK,GAAA,CAAM,GAAA,EAAM,QAAQ,CAAC,CAAC,GACrF,CAAA,CACIA,CAAAA,CAAK,UAAA,EACP,OAAA,CAAQ,IAAA,CAAK,CAAA;AAAA,EAAoBA,CAAAA,CAAK,UAAU,CAAA,CAAE,EAEtD,EACF,CAKO,SAASC,EAAAA,EAId,CACA,OAAO,CACL,OAAA,CAASlB,CAAAA,CACT,WAAA,CAAaC,EAAc,IAAA,CAC3B,YAAA,CAAcC,EAChB,CACF,CAaA,SAASM,EAAAA,EAA8B,CACrC,GAAI,CAEF,IAAMW,CAAAA,CADM,IAAI,OAAM,CACJ,KAAA,CAClB,OAAKA,CAAAA,CAESA,EAAM,KAAA,CAAM;AAAA,CAAI,CAAA,CACjB,KAAA,CAAM,CAAA,CAAG,CAAC,EAAE,IAAA,CAAK;AAAA,CAAI,CAAA,CAHf,IAIrB,CAAA,KAAQ,CACN,OAAO,IACT,CACF,CC5IA,IAAMC,EAAAA,CAAqB,CACzB,SAAA,CAAW,yBAA0B,uBAAA,CACrC,wBAAA,CAA0B,0BAAA,CAC1B,iCAAA,CAAmC,mBACrC,CAAA,CAAE,IAAA,CAAK,IAAI,CAAA,CAeJ,SAASC,EAAAA,CACd1Q,CAAAA,CACAM,CAAAA,CAA4B,EAAC,CAClB,CACX,GAAM,CACJ,YAAA,CAAAqQ,CAAAA,CACA,WAAA,CAAAC,CAAAA,CAAc,IAAA,CACd,iBAAA,CAAAC,CAAAA,CAAoB,IAAA,CACpB,iBAAA,CAAAC,CAAAA,CAAoB,KAAA,CACpB,YAAA,CAAAC,CACF,CAAA,CAAIzQ,CAAAA,CAEEuI,EAAS5J,CAAAA,CAAO,KAAK,CAAA,CACvB+R,CAAAA,CAAwC,IAAA,CAE5C,SAASC,GAAAA,EAAmC,CAC1C,OAAO,OAAOjR,CAAAA,EAAc,UAAA,CAAaA,CAAAA,EAAU,CAAIA,CACzD,CAEA,SAASkR,CAAAA,EAAsC,CAC7C,IAAM1P,CAAAA,CAAKyP,GAAAA,EAAa,CACxB,OAAKzP,CAAAA,CACE,KAAA,CAAM,IAAA,CAAKA,CAAAA,CAAG,gBAAA,CAA8BiP,EAAkB,CAAC,CAAA,CADtD,EAElB,CAEA,SAASU,CAAAA,CAAczM,CAAAA,CAAwB,CAC7C,GAAIA,CAAAA,CAAE,GAAA,GAAQ,QAAA,EAAYmM,CAAAA,CAAmB,CAC3CnM,CAAAA,CAAE,cAAA,EAAe,CACjB0M,CAAAA,EAAW,CACXL,KAAe,CACf,MACF,CAEA,GAAIrM,CAAAA,CAAE,GAAA,GAAQ,KAAA,CAAO,OAErB,IAAM2M,CAAAA,CAAYH,CAAAA,EAAqB,CACvC,GAAIG,CAAAA,CAAU,MAAA,GAAW,CAAA,CAAG,OAE5B,IAAMC,CAAAA,CAAQD,CAAAA,CAAU,CAAC,CAAA,CACnBE,CAAAA,CAAOF,CAAAA,CAAUA,CAAAA,CAAU,OAAS,CAAC,CAAA,CAEvC3M,CAAAA,CAAE,QAAA,CAEA,QAAA,CAAS,aAAA,GAAkB4M,CAAAA,GAC7B5M,CAAAA,CAAE,gBAAe,CACjB6M,CAAAA,CAAK,KAAA,EAAM,CAAA,CAIT,QAAA,CAAS,aAAA,GAAkBA,CAAAA,GAC7B7M,CAAAA,CAAE,cAAA,EAAe,CACjB4M,CAAAA,CAAM,KAAA,EAAM,EAGlB,CAEA,SAASE,CAAAA,CAAe9M,EAAqB,CAC3C,GAAI,CAACmE,CAAAA,EAAO,EAAKiI,CAAAA,CAAmB,OACpC,IAAMtP,CAAAA,CAAKyP,GAAAA,EAAa,CACxB,GAAI,CAACzP,CAAAA,CAAI,OAET,IAAMiQ,EAAgB/M,CAAAA,CAAE,aAAA,CACxB,GAAI+M,CAAAA,EAAiB,CAACjQ,CAAAA,CAAG,QAAA,CAASiQ,CAAa,CAAA,CAAG,CAEhD,IAAMJ,CAAAA,CAAYH,CAAAA,EAAqB,CACnCG,CAAAA,CAAU,MAAA,CAAS,GACrBA,CAAAA,CAAU,CAAC,CAAA,CAAE,KAAA,GAEjB,CACF,CAEA,SAASK,GAAiB,CACxB,GAAI7I,CAAAA,EAAO,CAAG,OACdA,CAAAA,CAAO,GAAA,CAAI,IAAI,EAEfmI,CAAAA,CAAoB,QAAA,CAAS,aAAA,CAE7B,QAAA,CAAS,gBAAA,CAAiB,SAAA,CAAWG,CAAAA,CAAe,IAAI,CAAA,CAExD,IAAM3P,CAAAA,CAAKyP,GAAAA,EAAa,CACpBzP,CAAAA,EACFA,CAAAA,CAAG,gBAAA,CAAiB,WAAYgQ,CAAc,CAAA,CAIhD,qBAAA,CAAsB,IAAM,CAC1B,GAAIb,CAAAA,CAAAA,CACa,OAAOA,CAAAA,EAAiB,QAAA,CACnCM,GAAAA,EAAa,EAAG,aAAA,CAA2BN,CAAY,CAAA,CACvDA,CAAAA,GACI,OAAM,CAAA,KACT,CACL,IAAMU,CAAAA,CAAYH,CAAAA,EAAqB,CACnCG,CAAAA,CAAU,MAAA,CAAS,CAAA,EAAGA,CAAAA,CAAU,CAAC,CAAA,CAAE,KAAA,GACzC,CACF,CAAC,EACH,CAEA,SAASD,CAAAA,EAAmB,CAC1B,GAAI,CAACvI,CAAAA,EAAO,CAAG,OACfA,CAAAA,CAAO,GAAA,CAAI,KAAK,CAAA,CAEhB,QAAA,CAAS,mBAAA,CAAoB,SAAA,CAAWsI,CAAAA,CAAe,IAAI,CAAA,CAE3D,IAAM3P,CAAAA,CAAKyP,GAAAA,EAAa,CACpBzP,CAAAA,EACFA,CAAAA,CAAG,mBAAA,CAAoB,UAAA,CAAYgQ,CAAc,CAAA,CAG/CZ,CAAAA,EAAeI,CAAAA,GACjBA,CAAAA,CAAkB,KAAA,EAAM,CACxBA,EAAoB,IAAA,EAExB,CAEA,OAAO,CACL,QAAA,CAAAU,CAAAA,CACA,UAAA,CAAAN,CAAAA,CACA,MAAA,CAAQ,IAAMvI,CAAAA,EAChB,CACF,CAQA,IAAI8I,CAAAA,CAAqC,KAEzC,SAASC,EAAAA,EAAoC,CAC3C,GAAID,CAAAA,EAAkB,QAAA,CAAS,IAAA,CAAK,QAAA,CAASA,CAAc,CAAA,CACzD,OAAOA,CAAAA,CAGT,IAAMnQ,CAAAA,CAAK,QAAA,CAAS,aAAA,CAAc,KAAK,CAAA,CACvC,OAAAA,CAAAA,CAAG,YAAA,CAAa,MAAA,CAAQ,QAAQ,CAAA,CAChCA,CAAAA,CAAG,aAAa,WAAA,CAAa,QAAQ,CAAA,CACrCA,CAAAA,CAAG,YAAA,CAAa,aAAA,CAAe,MAAM,CAAA,CACrCA,EAAG,KAAA,CAAM,OAAA,CAAU,CACjB,oBAAA,CACA,YAAA,CACA,aAAA,CACA,YAAA,CACA,cAAA,CACA,kBAAA,CACA,qBAAA,CACA,qBAAA,CACA,WACF,CAAA,CAAE,IAAA,CAAK,IAAI,CAAA,CAEX,SAAS,IAAA,CAAK,WAAA,CAAYA,CAAE,CAAA,CAC5BmQ,CAAAA,CAAiBnQ,CAAAA,CACVA,CACT,CAWO,SAASqQ,EAAAA,EAAgE,CAC9E,OAAO,CAAC9H,CAAAA,CAAiB+H,CAAAA,CAAuB,QAAA,GAAa,CAC3D,GAAI,OAAO,QAAA,CAAa,GAAA,CAAa,OAErC,IAAMC,CAAAA,CAASH,EAAAA,EAAqB,CACpCG,CAAAA,CAAO,YAAA,CAAa,WAAA,CAAaD,CAAU,CAAA,CAG3CC,CAAAA,CAAO,WAAA,CAAc,GACrB,qBAAA,CAAsB,IAAM,CAC1BA,CAAAA,CAAO,WAAA,CAAchI,EACvB,CAAC,EACH,CACF,CA8CO,SAASiI,EAAAA,EAA+B,CAC7C,IAAMC,CAAAA,CAAyB,EAAC,CAC1BC,EAAe,IAAI,GAAA,CACrBC,CAAAA,CAAY,KAAA,CAEhB,SAAShB,CAAAA,CAAczM,CAAAA,CAAwB,CAC7C,IAAA,IAAW0N,CAAAA,IAAWH,CAAAA,CACpB,GAAI,EAAAG,CAAAA,CAAQ,KAAA,EAAS,CAACF,EAAa,GAAA,CAAIE,CAAAA,CAAQ,KAAK,CAAA,CAAA,EAChDC,EAAAA,CAAW3N,CAAAA,CAAG0N,CAAAA,CAAQ,GAAG,CAAA,CAAG,CAC1BA,CAAAA,CAAQ,cAAA,GAAmB,KAAA,EAC7B1N,CAAAA,CAAE,cAAA,EAAe,CAEnB0N,EAAQ,OAAA,CAAQ1N,CAAC,CAAA,CACjB,MACF,CAEJ,CAEA,SAAS4N,CAAAA,EAAuB,CAC1BH,CAAAA,EACA,OAAO,QAAA,CAAa,GAAA,GACxB,QAAA,CAAS,gBAAA,CAAiB,SAAA,CAAWhB,CAAa,CAAA,CAClDgB,CAAAA,CAAY,IAAA,EACd,CAEA,SAASI,CAAAA,CACPhP,CAAAA,CACAe,CAAAA,CACAhE,EACY,CACZ,IAAM8R,CAAAA,CAAsB,CAC1B,GAAA,CAAA7O,CAAAA,CACA,OAAA,CAAAe,CAAAA,CACA,MAAOhE,CAAAA,EAAS,KAAA,CAChB,WAAA,CAAaA,CAAAA,EAAS,WAAA,EAAe,EAAA,CACrC,cAAA,CAAgBA,CAAAA,EAAS,cAC3B,CAAA,CACA,OAAA2R,CAAAA,CAAS,IAAA,CAAKG,CAAO,CAAA,CACrBE,CAAAA,GAEO,IAAM,CACX,IAAME,CAAAA,CAAMP,CAAAA,CAAS,OAAA,CAAQG,CAAO,CAAA,CAChCI,CAAAA,GAAQ,EAAA,EAAIP,CAAAA,CAAS,MAAA,CAAOO,CAAAA,CAAK,CAAC,EACxC,CACF,CAEA,OAAO,CACL,IAAA,CAAAD,CAAAA,CACA,WAAA,CAAYE,CAAAA,CAAe,CAAEP,CAAAA,CAAa,GAAA,CAAIO,CAAK,EAAG,CAAA,CACtD,YAAA,CAAaA,CAAAA,CAAe,CAAEP,CAAAA,CAAa,OAAOO,CAAK,EAAG,CAAA,CAC1D,WAAA,EAAc,CACZ,OAAOR,CAAAA,CAAS,GAAA,CAAKjL,IAAO,CAC1B,GAAA,CAAK0L,EAAAA,CAAe1L,CAAAA,CAAE,GAAG,CAAA,CACzB,WAAA,CAAaA,CAAAA,CAAE,aAAe,EAAA,CAC9B,KAAA,CAAOA,CAAAA,CAAE,KACX,CAAA,CAAE,CACJ,CAAA,CACA,OAAA,EAAU,CACRiL,CAAAA,CAAS,MAAA,CAAS,CAAA,CACd,OAAO,QAAA,CAAa,GAAA,EACtB,QAAA,CAAS,oBAAoB,SAAA,CAAWd,CAAa,CAAA,CAEvDgB,CAAAA,CAAY,MACd,CACF,CACF,CAIA,SAASE,EAAAA,CAAW,CAAA,CAAkBM,CAAAA,CAAwB,CAC5D,IAAMC,CAAAA,CAAQD,CAAAA,CAAM,aAAY,CAAE,KAAA,CAAM,GAAG,CAAA,CACrCpP,CAAAA,CAAMqP,CAAAA,CAAM,GAAA,EAAI,CAEhBC,CAAAA,CAAWD,CAAAA,CAAM,QAAA,CAAS,KAAK,CAAA,CAC/BE,CAAAA,CAAYF,CAAAA,CAAM,QAAA,CAAS,MAAM,CAAA,CACjCG,CAAAA,CAAaH,CAAAA,CAAM,QAAA,CAAS,OAAO,CAAA,CACnCI,CAAAA,CAAWJ,CAAAA,CAAM,QAAA,CAAS,KAAK,CAAA,CAI/BK,CAAAA,CADQ,OAAO,SAAA,CAAc,GAAA,EAAe,SAAA,CAAU,UAAU,QAAA,CAAS,KAAK,CAAA,CACzD,CAAA,CAAE,OAAA,CAAU,CAAA,CAAE,OAAA,CAKzC,OAHIJ,CAAAA,EAAY,CAACI,CAAAA,EACbH,CAAAA,EAAa,CAAC,CAAA,CAAE,OAAA,EAChBC,CAAAA,EAAc,CAAC,CAAA,CAAE,QAAA,EACjBC,CAAAA,EAAY,CAAC,CAAA,CAAE,MAAA,CAAe,KAAA,CAE3B,CAAA,CAAE,GAAA,CAAI,WAAA,EAAY,GAAMzP,CAAAA,EAAO,CAAA,CAAE,IAAA,CAAK,WAAA,EAAY,GAAMA,CACjE,CAEA,SAASmP,EAAAA,CAAeC,CAAAA,CAAuB,CAC7C,IAAMO,CAAAA,CAAQ,OAAO,SAAA,CAAc,GAAA,EAAe,SAAA,CAAU,QAAA,EAAU,QAAA,CAAS,KAAK,CAAA,CACpF,OAAOP,EACJ,OAAA,CAAQ,OAAA,CAASO,CAAAA,CAAQ,QAAA,CAAM,MAAM,CAAA,CACrC,OAAA,CAAQ,SAAA,CAAWA,EAAQ,QAAA,CAAM,OAAO,CAAA,CACxC,OAAA,CAAQ,OAAA,CAASA,CAAAA,CAAQ,QAAA,CAAM,KAAK,EACpC,OAAA,CAAQ,KAAA,CAAOA,CAAAA,CAAQ,EAAA,CAAK,GAAG,CACpC,CC/TO,IAAMC,EAAAA,CAAQrU,GAAAA,CAA6BC,CAAAA,EAAQ,CACxD,IAAMqU,CAAAA,CAASnU,CAAAA,CAAO,KAAK,EACrBoU,CAAAA,CAAUpU,CAAAA,CAAO,KAAK,CAAA,CAE5B,OAAO,IAAM,CACX,GAAM,CACJ,GAAA,CAAAqU,CAAAA,CACA,GAAA,CAAAC,CAAAA,CACA,KAAA,CAAAtM,CAAAA,CACA,MAAA,CAAAwB,EACA,OAAA,CAAA+K,CAAAA,CAAU,MAAA,CACV,MAAA,CAAAC,CAAAA,CACA,KAAA,CAAAC,CAAAA,CACA,WAAA,CAAAC,CAAAA,CACA,WAAA,CAAAC,CAAAA,CACA,KAAA,CAAOC,CAAAA,CACP,WAAA,CAAAC,CAAAA,CACA,MAAA,CAAAC,EACA,OAAA,CAASC,CACX,CAAA,CAAIjV,CAAAA,CAAI,KAAA,CAGFkV,CAAAA,CAAU,QAAA,CAAS,aAAA,CAAc,KAAK,CAAA,CAQ5C,GAPAA,CAAAA,CAAQ,KAAA,CAAM,QAAA,CAAW,UAAA,CACzBA,CAAAA,CAAQ,KAAA,CAAM,QAAU,cAAA,CACxBA,CAAAA,CAAQ,KAAA,CAAM,QAAA,CAAW,QAAA,CACrBhN,CAAAA,GAAOgN,CAAAA,CAAQ,KAAA,CAAM,KAAA,CAAQ,CAAA,EAAGhN,CAAK,CAAA,EAAA,CAAA,CAAA,CACrCwB,CAAAA,GAAQwL,CAAAA,CAAQ,KAAA,CAAM,MAAA,CAAS,GAAGxL,CAAM,CAAA,EAAA,CAAA,CAAA,CAGxCkL,CAAAA,GAAgB,MAAA,EAAUC,CAAAA,EAAe,CAACR,CAAAA,EAAO,CAAG,CACtD,IAAMc,CAAAA,CAAO,QAAA,CAAS,aAAA,CAAc,KAAK,CAAA,CACzCA,CAAAA,CAAK,IAAMN,CAAAA,CACXM,CAAAA,CAAK,GAAA,CAAM,EAAA,CACXA,CAAAA,CAAK,YAAA,CAAa,aAAA,CAAe,MAAM,CAAA,CACvCA,CAAAA,CAAK,KAAA,CAAM,OAAA,CAAU,2GAAA,CACrBD,CAAAA,CAAQ,WAAA,CAAYC,CAAI,EAC1B,CAGA,IAAMC,CAAAA,CAAM,QAAA,CAAS,aAAA,CAAc,KAAK,CAAA,CA+BxC,GA9BAA,EAAI,GAAA,CAAMZ,CAAAA,CACVY,CAAAA,CAAI,OAAA,CAAUX,CAAAA,CAEVH,CAAAA,EAAQ,EAAKS,CAAAA,CACfK,EAAI,GAAA,CAAML,CAAAA,CAEVK,CAAAA,CAAI,GAAA,CAAMb,CAAAA,CAGRG,CAAAA,GAAQU,CAAAA,CAAI,MAAA,CAASV,CAAAA,CAAAA,CACrBC,CAAAA,GAAOS,CAAAA,CAAI,KAAA,CAAQT,CAAAA,CAAAA,CACnBzM,CAAAA,GAAOkN,CAAAA,CAAI,KAAA,CAAQlN,GACnBwB,CAAAA,GAAQ0L,CAAAA,CAAI,MAAA,CAAS1L,CAAAA,CAAAA,CACrBoL,CAAAA,GAAWM,CAAAA,CAAI,SAAA,CAAYN,CAAAA,CAAAA,CAE/BM,CAAAA,CAAI,KAAA,CAAM,OAAA,CAAU,OAAA,CACpBA,CAAAA,CAAI,KAAA,CAAM,KAAA,CAAQ,MAAA,CAClBA,EAAI,KAAA,CAAM,MAAA,CAAS,MAAA,CAEnBA,CAAAA,CAAI,gBAAA,CAAiB,MAAA,CAAQ,IAAM,CACjCf,CAAAA,CAAO,GAAA,CAAI,IAAI,CAAA,CACfW,CAAAA,KACF,CAAC,CAAA,CAEDI,EAAI,gBAAA,CAAiB,OAAA,CAAUzP,CAAAA,EAAM,CACnC2O,CAAAA,CAAQ,GAAA,CAAI,IAAI,CAAA,CAChBW,IAAYtP,CAAC,EACf,CAAC,CAAA,CAGG8O,CAAAA,GAAY,MAAA,EAAU,OAAO,oBAAA,CAAyB,IAAa,CACrEW,CAAAA,CAAI,YAAA,CAAa,UAAA,CAAYA,CAAAA,CAAI,GAAG,CAAA,CACpC,IAAMC,CAAAA,CAAYD,CAAAA,CAAI,GAAA,CACtBA,CAAAA,CAAI,eAAA,CAAgB,KAAK,CAAA,CAEzB,IAAMnT,EAAW,IAAI,oBAAA,CAClBC,CAAAA,EAAY,CACPA,CAAAA,CAAQ,CAAC,CAAA,CAAE,cAAA,GACbkT,CAAAA,CAAI,GAAA,CAAMC,CAAAA,CACVpT,CAAAA,CAAS,UAAA,EAAW,EAExB,CAAA,CACA,CAAE,WAAY,OAAQ,CACxB,CAAA,CAGA,qBAAA,CAAsB,IAAM,CACtBmT,CAAAA,CAAI,aAAA,CACNnT,CAAAA,CAAS,OAAA,CAAQmT,CAAG,CAAA,CAGpBA,CAAAA,CAAI,GAAA,CAAMC,EAEd,CAAC,EACH,CAEA,OAAAH,CAAAA,CAAQ,WAAA,CAAYE,CAAG,CAAA,CAChBF,CACT,CACF,CAAC,ECxGM,SAASI,EAAAA,CAAkB/T,CAAAA,CAAgD,CAChF,GAAM,CAAE,UAAA,CAAAgU,EAAY,OAAA,CAAAC,CAAAA,CAAS,UAAA,CAAAzT,CAAAA,CAAa,OAAA,CAAS,SAAA,CAAA0T,CAAAA,CAAY,CAAE,CAAA,CAAIlU,CAAAA,CAE/DkT,CAAAA,CAAUvU,CAAAA,CAAO,KAAK,CAAA,CACtBwV,CAAAA,CAAOxV,CAAAA,CAAO,KAAK,CAAA,CACrB+B,CAAAA,CAAwC,IAAA,CACxC0T,CAAAA,CAAiC,IAAA,CACjC3T,GAAAA,CAAW,KAAA,CAEf,eAAe4T,CAAAA,EAAiC,CAC9C,GAAI,EAAAnB,CAAAA,EAAQ,EAAKiB,CAAAA,EAAK,EAAK1T,KAC3B,CAAA,GAAI,CAACwT,CAAAA,EAAQ,CAAG,CACdE,CAAAA,CAAK,GAAA,CAAI,IAAI,CAAA,CACb,MACF,CAEAjB,CAAAA,CAAQ,GAAA,CAAI,IAAI,CAAA,CAChB,GAAI,CACF,MAAMc,CAAAA,EAAW,CACZC,CAAAA,EAAQ,EACXE,CAAAA,CAAK,GAAA,CAAI,CAAA,CAAI,EAEjB,CAAA,OAAE,CACAjB,CAAAA,CAAQ,GAAA,CAAI,KAAK,EACnB,CAAA,CACF,CAEA,SAASoB,CAAAA,CAAepT,CAAAA,CAAuB,CACzC,OAAO,oBAAA,CAAyB,GAAA,GAEpCR,CAAAA,CAAW,IAAI,oBAAA,CACZC,CAAAA,EAAY,CACPA,CAAAA,CAAQ,CAAC,CAAA,EAAG,cAAA,EACd0T,CAAAA,GAEJ,CAAA,CACA,CAAE,UAAA,CAAA7T,CAAAA,CAAY,SAAA,CAAA0T,CAAU,CAC1B,CAAA,CAEAxT,CAAAA,CAAS,OAAA,CAAQQ,CAAE,CAAA,EACrB,CAEA,SAASqT,CAAAA,EAAwB,CAC/B,OAAIH,CAAAA,GAEJA,CAAAA,CAAa,QAAA,CAAS,aAAA,CAAc,KAAK,CAAA,CACzCA,CAAAA,CAAW,YAAA,CAAa,qBAAA,CAAuB,EAAE,CAAA,CACjDA,CAAAA,CAAW,KAAA,CAAM,MAAA,CAAS,KAAA,CAC1BA,CAAAA,CAAW,aAAa,aAAA,CAAe,MAAM,CAAA,CAG7C,qBAAA,CAAsB,IAAM,CACtBA,CAAAA,EAAc,CAAC3T,KACjB6T,CAAAA,CAAeF,CAAU,EAE7B,CAAC,CAAA,CAEMA,CAAAA,CACT,CAEA,OAAO,CACL,QAAA,CAAAG,CAAAA,CACA,OAAA,CAAS,IAAMrB,CAAAA,EAAQ,CACvB,IAAA,CAAM,IAAMiB,CAAAA,EAAK,CACjB,KAAA,EAAQ,CACNA,CAAAA,CAAK,GAAA,CAAI,KAAK,CAAA,CACdjB,EAAQ,GAAA,CAAI,KAAK,EACnB,CAAA,CACA,OAAA,EAAU,CACRzS,GAAAA,CAAW,IAAA,CACXC,CAAAA,EAAU,UAAA,EAAW,CACrBA,CAAAA,CAAW,KACb,CACF,CACF,CCxGO,SAAS8T,EAAAA,CAAAA,GAAMC,CAAAA,CAA2B,CAC/C,IAAMtT,CAAAA,CAAoB,EAAC,CAE3B,IAAA,IAAWuT,CAAAA,IAASD,CAAAA,CAClB,GAAKC,CAAAA,CAAAA,CAEL,GAAI,OAAOA,CAAAA,EAAU,QAAA,CACnBvT,EAAQ,IAAA,CAAKuT,CAAK,CAAA,CAAA,KAAA,GACT,KAAA,CAAM,OAAA,CAAQA,CAAK,CAAA,CAAG,CAC/B,IAAMC,CAAAA,CAASH,EAAAA,CAAG,GAAGE,CAAK,CAAA,CACtBC,CAAAA,EAAQxT,CAAAA,CAAQ,KAAKwT,CAAM,EACjC,CAAA,KAAA,GAAW,OAAOD,CAAAA,EAAU,QAAA,CAC1B,IAAA,GAAW,CAACzR,CAAAA,CAAK3E,CAAK,CAAA,GAAK,MAAA,CAAO,OAAA,CAAQoW,CAAK,CAAA,CACzCpW,CAAAA,EAAO6C,EAAQ,IAAA,CAAK8B,CAAG,EAAA,CAKjC,OAAO9B,CAAAA,CAAQ,IAAA,CAAK,GAAG,CACzB,CAgBO,SAASyT,EAAAA,CAAIC,CAAAA,CAA+B,CACjD,IAAMvC,CAAAA,CAAkB,GAExB,IAAA,GAAW,CAACrP,CAAAA,CAAK3E,CAAK,CAAA,GAAK,MAAA,CAAO,OAAA,CAAQuW,CAAM,CAAA,CAAG,CACjD,GAAIvW,CAAAA,EAAS,IAAA,CAAM,SAEnB,IAAMwW,CAAAA,CAAOC,GAAa9R,CAAG,CAAA,CACvB+R,CAAAA,CAAM,OAAO1W,CAAAA,EAAU,QAAA,EAAY,CAAC2W,EAAAA,CAAe,IAAIhS,CAAG,CAAA,CAC5D,CAAA,EAAG3E,CAAK,CAAA,EAAA,CAAA,CACR,MAAA,CAAOA,CAAK,CAAA,CAEhBgU,EAAM,IAAA,CAAK,CAAA,EAAGwC,CAAI,CAAA,EAAA,EAAKE,CAAG,CAAA,CAAE,EAC9B,CAEA,OAAO1C,CAAAA,CAAM,IAAA,CAAK,IAAI,CACxB,CASO,SAAS4C,EAAAA,CAAYhU,EAAiB2T,CAAAA,CAA6B,CACxE,IAAA,GAAW,CAAC5R,CAAAA,CAAK3E,CAAK,CAAA,GAAK,MAAA,CAAO,OAAA,CAAQuW,CAAM,CAAA,CAC9C,GAAIvW,CAAAA,EAAS,IAAA,CACX4C,CAAAA,CAAG,KAAA,CAAM,eAAe6T,EAAAA,CAAa9R,CAAG,CAAC,CAAA,CAAA,KACpC,CACL,IAAM+R,CAAAA,CAAM,OAAO1W,CAAAA,EAAU,QAAA,EAAY,CAAC2W,EAAAA,CAAe,GAAA,CAAIhS,CAAG,CAAA,CAC5D,CAAA,EAAG3E,CAAK,CAAA,EAAA,CAAA,CACR,MAAA,CAAOA,CAAK,CAAA,CAChB4C,CAAAA,CAAG,KAAA,CAAM,WAAA,CAAY6T,EAAAA,CAAa9R,CAAG,CAAA,CAAG+R,CAAG,EAC7C,CAEJ,CAIA,SAASD,EAAAA,CAAaI,CAAAA,CAAqB,CACzC,OAAOA,CAAAA,CAAI,OAAA,CAAQ,QAAA,CAAWC,CAAAA,EAAM,CAAA,CAAA,EAAIA,CAAAA,CAAE,WAAA,EAAa,CAAA,CAAE,CAC3D,CAGA,IAAMH,EAAAA,CAAiB,IAAI,GAAA,CAAI,CAC7B,yBAAA,CAA2B,SAAA,CAAW,cAAA,CAAgB,iBAAA,CACtD,aAAA,CAAe,aAAA,CAAe,MAAA,CAAQ,UAAA,CAAY,cAAA,CAClD,YAAA,CAAc,cAAA,CAAgB,WAAA,CAAa,YAAA,CAAc,YAAA,CACzD,SAAA,CAAW,WAAA,CAAa,aAAc,SAAA,CAAW,OAAA,CAAS,SAAA,CAC1D,SAAA,CAAW,QAAA,CAAU,QAAA,CAAU,MACjC,CAAC,CAAA,CCJM,SAASI,EAAAA,CACdrV,CAAAA,CACc,CACd,GAAM,CAAE,IAAA,CAAAsV,EAAM,OAAA,CAAAC,CAAAA,CAAS,QAAA,CAAAC,CAAAA,CAAW,CAAA,CAAG,WAAA,CAAAC,CAAY,CAAA,CAAIzV,EAE/C0V,CAAAA,CAAY/W,CAAAA,CAAkB8W,CAAAA,EAAe,CAAE,MAAA,CAAQ,IAAA,CAAM,SAAA,CAAW,IAAK,CAAC,CAAA,CAC9EE,CAAAA,CAAahX,CAAAA,CAAO,EAAE,CAAA,CACtBiX,CAAAA,CAAOjX,CAAAA,CAAO,CAAC,CAAA,CACfkX,CAAAA,CAAmBlX,CAAAA,CACvB,MAAA,CAAO,WAAA,CAAY4W,CAAAA,CAAQ,GAAA,CAAKnT,CAAAA,EAAM,CAACA,CAAAA,CAAE,GAAA,CAAKA,CAAAA,CAAE,OAAA,GAAY,KAAK,CAAC,CAAC,CACrE,CAAA,CAGM0T,GAAAA,CAAiB/K,CAAAA,CAAS,IAAM,CACpC,IAAMgL,CAAAA,CAAMF,CAAAA,GACZ,OAAON,CAAAA,CAAQ,MAAA,CAAQnT,CAAAA,EAAM2T,CAAAA,CAAI3T,CAAAA,CAAE,GAAG,CAAC,CACzC,CAAC,CAAA,CAGK4T,CAAAA,CAAejL,CAAAA,CAAS,IAAM,CAClC,IAAMrD,EAAOiO,CAAAA,EAAW,CAAE,WAAA,EAAY,CAAE,IAAA,EAAK,CAC7C,GAAI,CAACjO,EAAM,OAAO4N,CAAAA,EAAK,CAEvB,IAAMW,CAAAA,CAAiBV,CAAAA,CAAQ,MAAA,CAAQnT,CAAAA,EAAMA,EAAE,UAAU,CAAA,CACzD,OAAI6T,CAAAA,CAAe,MAAA,GAAW,CAAA,CAAUX,CAAAA,EAAK,CAEtCA,CAAAA,EAAK,CAAE,MAAA,CAAQ7I,CAAAA,EACbwJ,CAAAA,CAAe,IAAA,CAAMC,CAAAA,EAAQ,CAClC,IAAM5X,CAAAA,CAAQ6X,EAAAA,CAAe1J,CAAAA,CAAKyJ,CAAAA,CAAI,GAAG,CAAA,CACzC,OAAO,MAAA,CAAO5X,CAAK,CAAA,CAAE,WAAA,EAAY,CAAE,QAAA,CAASoJ,CAAI,CAClD,CAAC,CACF,CACH,CAAC,CAAA,CAGK0O,CAAAA,CAAarL,CAAAA,CAAS,IAAM,CAChC,GAAM,CAAE,MAAA,CAAAsL,CAAAA,CAAQ,SAAA,CAAAC,CAAU,CAAA,CAAIZ,CAAAA,EAAU,CAClCa,EAAO,CAAC,GAAGP,CAAAA,EAAc,CAAA,CAE/B,GAAI,CAACK,CAAAA,EAAU,CAACC,CAAAA,CAAW,OAAOC,CAAAA,CAElC,IAAMC,CAAAA,CAASjB,CAAAA,CAAQ,IAAA,CAAMnT,CAAAA,EAAMA,EAAE,GAAA,GAAQiU,CAAM,CAAA,CACnD,OAAKG,CAAAA,CAEED,CAAAA,CAAK,IAAA,CAAK,CAAC9P,CAAAA,CAAGC,EAAAA,GAAM,CACzB,GAAI8P,CAAAA,CAAO,OAAA,CAAS,CAClB,IAAM3P,GAAS2P,CAAAA,CAAO,OAAA,CAAQ/P,CAAAA,CAAGC,EAAC,CAAA,CAClC,OAAO4P,CAAAA,GAAc,MAAA,CAAS,CAACzP,EAAAA,CAASA,EAC1C,CAEA,IAAM4P,EAAAA,CAAON,EAAAA,CAAe1P,CAAAA,CAAG4P,CAAM,CAAA,CAC/BK,EAAAA,CAAOP,EAAAA,CAAezP,EAAAA,CAAG2P,CAAM,CAAA,CAC/BxP,EAAAA,CAAS8P,EAAAA,CAAeF,EAAAA,CAAMC,EAAI,CAAA,CACxC,OAAOJ,CAAAA,GAAc,MAAA,CAAS,CAACzP,EAAAA,CAASA,EAC1C,CAAC,CAAA,CAZmB0P,CAatB,CAAC,CAAA,CAGKK,CAAAA,CAAY7L,CAAAA,CAAS,IAAMiL,GAAa,CAAE,MAAM,CAAA,CAGhDa,CAAAA,CAAa9L,CAAAA,CAAS,IACtByK,CAAAA,EAAY,CAAA,CAAU,EACnB,IAAA,CAAK,GAAA,CAAI,CAAA,CAAG,IAAA,CAAK,IAAA,CAAKoB,CAAAA,EAAU,CAAIpB,CAAQ,CAAC,CACrD,CAAA,CAGKsB,CAAAA,CAAgB/L,CAAAA,CAAS,IAAM,CACnC,IAAMgM,EAAMX,CAAAA,EAAW,CACvB,GAAIZ,CAAAA,EAAY,CAAA,CAAG,OAAOuB,CAAAA,CAC1B,IAAMrS,CAAAA,CAAAA,CAASkR,CAAAA,EAAK,CAAI,CAAA,EAAKJ,CAAAA,CAC7B,OAAOuB,CAAAA,CAAI,KAAA,CAAMrS,EAAOA,CAAAA,CAAQ8Q,CAAQ,CAC1C,CAAC,CAAA,CAID,SAASwB,CAAAA,CAAKC,CAAAA,CAAyB,CACrC,IAAMjR,CAAAA,CAAU0P,CAAAA,EAAU,CACtB1P,CAAAA,CAAQ,MAAA,GAAWiR,CAAAA,CAEjBjR,EAAQ,SAAA,GAAc,KAAA,CACxB0P,CAAAA,CAAU,GAAA,CAAI,CAAE,MAAA,CAAQuB,CAAAA,CAAW,SAAA,CAAW,MAAO,CAAC,CAAA,CAC7CjR,CAAAA,CAAQ,SAAA,GAAc,MAAA,CAC/B0P,CAAAA,CAAU,GAAA,CAAI,CAAE,OAAQ,IAAA,CAAM,SAAA,CAAW,IAAK,CAAC,CAAA,CAE/CA,CAAAA,CAAU,GAAA,CAAI,CAAE,MAAA,CAAQuB,CAAAA,CAAW,SAAA,CAAW,KAAM,CAAC,CAAA,CAGvDvB,CAAAA,CAAU,GAAA,CAAI,CAAE,MAAA,CAAQuB,CAAAA,CAAW,SAAA,CAAW,KAAM,CAAC,CAAA,CAEvDrB,CAAAA,CAAK,GAAA,CAAI,CAAC,EACZ,CAEA,SAASsB,GAAAA,CAAOxP,CAAAA,CAAoB,CAClCiO,CAAAA,CAAW,IAAIjO,CAAI,CAAA,CACnBkO,CAAAA,CAAK,GAAA,CAAI,CAAC,EACZ,CAEA,SAASuB,CAAAA,CAAalU,CAAAA,CAAmB,CACvC4S,CAAAA,CAAiB,MAAA,CAAQE,CAAAA,GAAS,CAAE,GAAGA,EAAK,CAAC9S,CAAG,EAAG,CAAC8S,CAAAA,CAAI9S,CAAG,CAAE,CAAA,CAAE,EACjE,CAEA,SAASmU,CAAAA,CAAWnU,CAAAA,CAAmB,CACrC4S,CAAAA,CAAiB,MAAA,CAAQE,IAAS,CAAE,GAAGA,CAAAA,CAAK,CAAC9S,CAAG,EAAG,IAAK,CAAA,CAAE,EAC5D,CAEA,SAASoU,CAAAA,CAAWpU,CAAAA,CAAmB,CACrC4S,CAAAA,CAAiB,MAAA,CAAQE,IAAS,CAAE,GAAGA,CAAAA,CAAK,CAAC9S,CAAG,EAAG,KAAM,CAAA,CAAE,EAC7D,CAEA,OAAO,CACL,IAAA,CAAM6T,CAAAA,CACN,OAAA,CAASV,CAAAA,CACT,UAAAQ,CAAAA,CACA,cAAA,CAAAd,GAAAA,CACA,SAAA,CAAW,IAAMJ,CAAAA,EAAU,CAC3B,UAAA,CAAY,IAAMC,CAAAA,EAAW,CAC7B,IAAA,CAAM,IAAMC,CAAAA,EAAK,CACjB,UAAA,CAAAiB,EACA,IAAA,CAAAG,CAAAA,CACA,MAAA,CAAAE,GAAAA,CACA,YAAA,CAAAC,CAAAA,CACA,UAAA,CAAAC,CAAAA,CACA,WAAAC,CAAAA,CACA,QAAA,EAAW,CAAMzB,CAAAA,EAAK,CAAIiB,CAAAA,EAAW,EAAGjB,CAAAA,CAAK,OAAQ0B,CAAAA,EAAMA,CAAAA,CAAI,CAAC,EAAG,CAAA,CACnE,QAAA,EAAW,CAAM1B,CAAAA,EAAK,CAAI,CAAA,EAAGA,CAAAA,CAAK,MAAA,CAAQ0B,CAAAA,EAAMA,CAAAA,CAAI,CAAC,EAAG,EACxD,QAAA,CAASA,CAAAA,CAAW,CAAE1B,CAAAA,CAAK,GAAA,CAAI,IAAA,CAAK,GAAA,CAAI,CAAA,CAAG,IAAA,CAAK,GAAA,CAAI0B,CAAAA,CAAGT,CAAAA,EAAY,CAAC,CAAC,EAAG,EACxE,KAAA,EAAQ,CACNnB,CAAAA,CAAU,GAAA,CAAI,CAAE,MAAA,CAAQ,IAAA,CAAM,SAAA,CAAW,IAAK,CAAC,CAAA,CAC/CC,CAAAA,CAAW,GAAA,CAAI,EAAE,CAAA,CACjBC,CAAAA,CAAK,IAAI,CAAC,EACZ,CACF,CACF,CAIA,SAASO,EAAAA,CAAeoB,CAAAA,CAA8BC,EAAuB,CAC3E,OAAOA,CAAAA,CAAK,KAAA,CAAM,GAAG,CAAA,CAAE,MAAA,CAAO,CAACC,EAAQxJ,CAAAA,GAAMwJ,CAAAA,GAAIxJ,CAAC,CAAA,CAAGsJ,CAAG,CAC1D,CAEA,SAASZ,EAAAA,CAAelQ,CAAAA,CAAYC,CAAAA,CAAoB,CACtD,OAAID,CAAAA,EAAK,IAAA,EAAQC,CAAAA,EAAK,KAAa,CAAA,CAC/BD,CAAAA,EAAK,IAAA,CAAa,EAAA,CAClBC,CAAAA,EAAK,IAAA,CAAa,CAAA,CAClB,OAAOD,CAAAA,EAAM,QAAA,EAAY,OAAOC,CAAAA,EAAM,QAAA,CAAiBD,CAAAA,CAAIC,CAAAA,CACxD,MAAA,CAAOD,CAAC,CAAA,CAAE,aAAA,CAAc,MAAA,CAAOC,CAAC,CAAC,CAC1C,CCvLO,SAASgR,EAAAA,CAAkBpC,CAAAA,CAA+C,CAC/E,IAAMhJ,CAAAA,CAAQ,KAAA,CAAM,OAAA,CAAQgJ,CAAI,EAAIA,CAAAA,CAAO,CAACA,CAAI,CAAA,CAEhD,IAAA,IAAWtJ,CAAAA,IAAQM,CAAAA,CAAO,CACxB,IAAMqL,CAAAA,CAAK,CAAE,UAAA,CAAY,oBAAA,CAAsB,GAAG3L,CAAK,CAAA,CACvDrJ,CAAAA,CAAQ,CACN,MAAA,CAAQ,CACN,CAAE,IAAA,CAAM,qBAAA,CAAuB,SAAA,CAAW,IAAA,CAAK,SAAA,CAAUgV,CAAE,CAAE,CAC/D,CACF,CAAC,EACH,CACF,CAgBO,SAASC,EAAAA,CAAatC,CAAAA,CAA2B,CACtD,IAAM9S,CAAAA,CAAqD,CACzD,CAAE,QAAA,CAAU,UAAA,CAAY,OAAA,CAAS8S,CAAAA,CAAK,KAAM,CAC9C,CAAA,CAEIA,CAAAA,CAAK,WAAA,EAAa9S,EAAK,IAAA,CAAK,CAAE,QAAA,CAAU,gBAAA,CAAkB,OAAA,CAAS8S,CAAAA,CAAK,WAAY,CAAC,CAAA,CACrFA,CAAAA,CAAK,KAAA,EAAO9S,CAAAA,CAAK,IAAA,CAAK,CAAE,QAAA,CAAU,UAAA,CAAY,QAAS8S,CAAAA,CAAK,KAAM,CAAC,CAAA,CACnEA,CAAAA,CAAK,GAAA,EAAK9S,CAAAA,CAAK,IAAA,CAAK,CAAE,QAAA,CAAU,QAAA,CAAU,OAAA,CAAS8S,CAAAA,CAAK,GAAI,CAAC,CAAA,CAC7DA,CAAAA,CAAK,MAAM9S,CAAAA,CAAK,IAAA,CAAK,CAAE,QAAA,CAAU,SAAA,CAAW,OAAA,CAAS8S,CAAAA,CAAK,IAAK,CAAC,CAAA,CAChEA,CAAAA,CAAK,QAAA,EAAU9S,CAAAA,CAAK,IAAA,CAAK,CAAE,QAAA,CAAU,eAAgB,OAAA,CAAS8S,CAAAA,CAAK,QAAS,CAAC,CAAA,CAC7EA,CAAAA,CAAK,MAAA,EAAQ9S,CAAAA,CAAK,IAAA,CAAK,CAAE,QAAA,CAAU,WAAA,CAAa,OAAA,CAAS8S,CAAAA,CAAK,MAAO,CAAC,EAE1E3S,CAAAA,CAAQ,CAAE,IAAA,CAAAH,CAAK,CAAC,EAClB,CAeO,SAASqV,EAAAA,CAAevC,CAAAA,CAA6B,CAC1D,IAAM9S,CAAAA,CAAiD,CACrD,CAAE,IAAA,CAAM,gBAAiB,OAAA,CAAS8S,CAAAA,CAAK,KAAM,CAC/C,CAAA,CAEIA,CAAAA,CAAK,IAAA,EAAM9S,CAAAA,CAAK,KAAK,CAAE,IAAA,CAAM,cAAA,CAAgB,OAAA,CAAS8S,CAAAA,CAAK,IAAK,CAAC,CAAA,CACjEA,EAAK,WAAA,EAAa9S,CAAAA,CAAK,IAAA,CAAK,CAAE,IAAA,CAAM,qBAAA,CAAuB,OAAA,CAAS8S,CAAAA,CAAK,WAAY,CAAC,CAAA,CACtFA,CAAAA,CAAK,KAAA,EAAO9S,CAAAA,CAAK,IAAA,CAAK,CAAE,KAAM,eAAA,CAAiB,OAAA,CAAS8S,CAAAA,CAAK,KAAM,CAAC,CAAA,CACpEA,CAAAA,CAAK,IAAA,EAAM9S,CAAAA,CAAK,IAAA,CAAK,CAAE,IAAA,CAAM,cAAA,CAAgB,OAAA,CAAS8S,CAAAA,CAAK,IAAK,CAAC,CAAA,CACjEA,CAAAA,CAAK,OAAA,EAAS9S,CAAAA,CAAK,IAAA,CAAK,CAAE,IAAA,CAAM,iBAAA,CAAmB,OAAA,CAAS8S,CAAAA,CAAK,OAAQ,CAAC,CAAA,CAE9E3S,CAAAA,CAAQ,CAAE,IAAA,CAAAH,CAAK,CAAC,EAClB,CAkBO,SAASsV,EAAAA,CAAOvV,CAAAA,CAAyB,CAC9C,IAAMC,EAAqE,EAAC,CAExED,CAAAA,CAAO,WAAA,EACTC,CAAAA,CAAK,IAAA,CAAK,CAAE,IAAA,CAAM,cAAe,OAAA,CAASD,CAAAA,CAAO,WAAY,CAAC,CAAA,CAE5DA,CAAAA,CAAO,MAAA,EACTC,CAAAA,CAAK,IAAA,CAAK,CAAE,IAAA,CAAM,QAAA,CAAU,OAAA,CAASD,CAAAA,CAAO,MAAO,CAAC,EAGtD,IAAME,CAAAA,CAA6C,EAAC,CAChDF,CAAAA,CAAO,SAAA,EACTE,CAAAA,CAAK,IAAA,CAAK,CAAE,GAAA,CAAK,WAAA,CAAa,IAAA,CAAMF,CAAAA,CAAO,SAAU,CAAC,CAAA,CAGxDI,EAAQ,CAAE,KAAA,CAAOJ,CAAAA,CAAO,KAAA,CAAO,IAAA,CAAAC,CAAAA,CAAM,IAAA,CAAAC,CAAK,CAAC,CAAA,CAEvCF,CAAAA,CAAO,SAAA,EAAWqV,EAAAA,CAAarV,CAAAA,CAAO,SAAS,CAAA,CAC/CA,EAAO,OAAA,EAASsV,EAAAA,CAAetV,CAAAA,CAAO,OAAO,CAAA,CAC7CA,CAAAA,CAAO,cAAA,EAAgBmV,EAAAA,CAAkBnV,EAAO,cAAc,EACpE,CAsBO,SAASwV,EAAAA,CAAgBC,CAAAA,CAAiBrX,CAAAA,CAAiC,CAChF,IAAIsX,CAAAA,CAAM,CAAA;AAAA,CAAA,CACVA,CAAAA,EAAO,CAAA;AAAA,CAAA,CAEP,IAAA,IAAWrX,CAAAA,IAASD,CAAAA,CAClBsX,CAAAA,EAAO,CAAA;AAAA,CAAA,CACPA,CAAAA,EAAO,CAAA,SAAA,EAAYD,CAAO,CAAA,EAAGpX,EAAM,GAAG,CAAA;AAAA,CAAA,CAClCA,CAAAA,CAAM,OAAA,GAASqX,CAAAA,EAAO,CAAA,aAAA,EAAgBrX,EAAM,OAAO,CAAA;AAAA,CAAA,CAAA,CACnDA,CAAAA,CAAM,UAAA,GAAYqX,CAAAA,EAAO,CAAA,gBAAA,EAAmBrX,EAAM,UAAU,CAAA;AAAA,CAAA,CAAA,CAC5DA,EAAM,QAAA,EAAY,IAAA,GAAMqX,CAAAA,EAAO,CAAA,cAAA,EAAiBrX,EAAM,QAAQ,CAAA;AAAA,CAAA,CAAA,CAClEqX,CAAAA,EAAO,CAAA;AAAA,CAAA,CAGT,OAAAA,CAAAA,EAAO,CAAA;AAAA,CAAA,CACAA,CACT,CCpLO,SAASC,EAAAA,CAAgB5Z,CAAAA,CAAY6Z,KAAiCC,CAAAA,CAAmB,CAC9F,OAAOD,CAAAA,CAAU7Z,EAAO,GAAG8Z,CAAI,CACjC,CAUO,SAASC,EAAAA,CAAAA,GAAYC,CAAAA,CAAiC,CAC3D,OAAO,CAACha,CAAAA,CAAAA,GAAa8Z,CAAAA,GAAgB,CACnC,IAAIvR,EAAcvI,CAAAA,CAClB,IAAA,IAAWgZ,CAAAA,IAAKgB,CAAAA,CACdzR,EAASyQ,CAAAA,CAAEzQ,CAAAA,CAAQ,GAAGuR,CAAI,EAE5B,OAAOvR,CACT,CACF,CAYO,SAAS0R,EAAAA,CAAsBC,CAAAA,CAA0C,CAC9E,OAAOA,CACT,CAOO,IAAMC,EAAAA,CAAqCna,CAAAA,EAAU,OAAOA,CAAK,CAAA,CAAE,WAAA,EAAY,CAGzEoa,GAAqCpa,CAAAA,EAAU,MAAA,CAAOA,CAAK,CAAA,CAAE,aAAY,CAGzEqa,EAAAA,CAAsCra,CAAAA,EAAU,CAC3D,IAAMiP,CAAAA,CAAI,MAAA,CAAOjP,CAAK,CAAA,CACtB,OAAOiP,CAAAA,CAAE,MAAA,CAAO,CAAC,CAAA,CAAE,aAAY,CAAIA,CAAAA,CAAE,KAAA,CAAM,CAAC,CAC9C,CAAA,CAGaqL,EAAAA,CAAqCta,CAAAA,EACzC,MAAA,CAAOA,CAAK,CAAA,CAAE,OAAA,CAAQ,OAAA,CAAU8D,CAAAA,EAAMA,EAAE,WAAA,EAAa,CAAA,CAIjDyW,EAAAA,CAAgCva,GAAU,MAAA,CAAOA,CAAK,CAAA,CAAE,IAAA,GASxDwa,EAAAA,CAAmC,CAACxa,CAAAA,CAAOya,CAAAA,CAAoB,GAAIC,CAAAA,CAAS,KAAA,GAAU,CACjG,IAAMzL,EAAI,MAAA,CAAOjP,CAAK,CAAA,CACtB,OAAIiP,EAAE,MAAA,EAAUwL,CAAAA,CAAkBxL,CAAAA,CAC3BA,CAAAA,CAAE,MAAM,CAAA,CAAGwL,CAAAA,CAAYC,CAAAA,CAAO,MAAM,EAAIA,CACjD,CAAA,CAaaC,EAAAA,CAA+C,CAC1D3a,EACA4a,CAAAA,CAAgE,QAAA,CAChEC,CAAAA,GACG,CACH,IAAMC,CAAAA,CAAI9a,CAAAA,YAAiB,IAAA,CAAOA,CAAAA,CAAQ,IAAI,IAAA,CAAKA,CAAK,CAAA,CACxD,GAAI,MAAM8a,CAAAA,CAAE,OAAA,EAAS,CAAA,CAAG,OAAO,MAAA,CAAO9a,CAAK,EAE3C,GAAI4a,CAAAA,GAAW,MAAO,OAAOE,CAAAA,CAAE,WAAA,EAAY,CAE3C,IAAMC,CAAAA,CAAMF,CAAAA,EAAU,OAAA,CAEhBnZ,CAAAA,CAAsD,CAC1D,KAAA,CAAO,CAAE,IAAA,CAAM,SAAA,CAAW,MAAO,SAAA,CAAW,GAAA,CAAK,SAAU,CAAA,CAC3D,OAAQ,CAAE,IAAA,CAAM,SAAA,CAAW,KAAA,CAAO,UAAW,GAAA,CAAK,SAAU,CAAA,CAC5D,IAAA,CAAM,CAAE,IAAA,CAAM,SAAA,CAAW,KAAA,CAAO,MAAA,CAAQ,IAAK,SAAU,CAAA,CACvD,IAAA,CAAM,CAAE,QAAS,MAAA,CAAQ,IAAA,CAAM,SAAA,CAAW,KAAA,CAAO,OAAQ,GAAA,CAAK,SAAU,CAAA,CACxE,IAAA,CAAM,CAAE,IAAA,CAAM,SAAA,CAAW,MAAA,CAAQ,SAAU,CAC7C,CAAA,CAEA,OAAO,IAAI,IAAA,CAAK,eAAeqZ,CAAAA,CAAKrZ,CAAAA,CAAQkZ,CAAM,CAAC,EAAE,MAAA,CAAOE,CAAC,CAC/D,CAAA,CAUaE,GAAmC,CAAChb,CAAAA,CAAOib,CAAAA,CAAe,KAAA,CAAOJ,IACrE,IAAI,IAAA,CAAK,YAAA,CAAaA,CAAAA,EAAU,QAAS,CAC9C,KAAA,CAAO,UAAA,CACP,QAAA,CAAUI,CACZ,CAAC,CAAA,CAAE,MAAA,CAAO,MAAA,CAAOjb,CAAK,CAAC,CAAA,CAWZkb,EAAAA,CAAiC,CAAClb,EAAOmb,CAAAA,CAAqBN,CAAAA,GAAoB,CAC7F,IAAMzP,EAAiC,EAAC,CACxC,GAAI+P,CAAAA,CAAY,CACd,GAAM,CAAC3S,CAAAA,CAAK4S,CAAG,EAAID,CAAAA,CAAW,KAAA,CAAM,GAAG,CAAA,CAAE,IAAI,MAAM,CAAA,CACnD/P,CAAAA,CAAK,qBAAA,CAAwB5C,EAC7B4C,CAAAA,CAAK,qBAAA,CAAwBgQ,CAAAA,EAAO5S,EACtC,CACA,OAAO,IAAI,IAAA,CAAK,YAAA,CAAaqS,GAAU,OAAA,CAASzP,CAAI,CAAA,CAAE,MAAA,CAAO,OAAOpL,CAAK,CAAC,CAC5E,CAAA,CAUaqb,GAAkC,CAACrb,CAAAA,CAAOsb,CAAAA,CAAW,CAAA,CAAGT,IAC5D,IAAI,IAAA,CAAK,YAAA,CAAaA,CAAAA,EAAU,QAAS,CAC9C,KAAA,CAAO,SAAA,CACP,qBAAA,CAAuBS,EACvB,qBAAA,CAAuBA,CACzB,CAAC,CAAA,CAAE,MAAA,CAAO,OAAOtb,CAAK,CAAC,CAAA,CAWZub,EAAAA,CAAgC,CAACvb,CAAAA,CAAOwb,CAAAA,CAAS,CAAA,GACrD,IAAA,CAAK,UAAUxb,CAAAA,CAAO,IAAA,CAAMwb,CAAM,CAAA,CAW9BC,GAAiC,CAACzb,CAAAA,CAAO0b,CAAAA,CAAkBC,CAAAA,GAAwB,CAC9F,IAAM3C,CAAAA,CAAI2C,CAAAA,EAAc,CAAA,EAAGD,CAAQ,CAAA,CAAA,CAAA,CACnC,OAAO,CAAA,EAAG1b,CAAK,IAAIA,CAAAA,GAAU,CAAA,CAAI0b,CAAAA,CAAW1C,CAAC,EAC/C,CAAA,CASa4C,EAAAA,CAA8C,CAAC5b,CAAAA,CAAO6a,IAAoB,CAErF,IAAMgB,CAAAA,CAAAA,CADI7b,CAAAA,YAAiB,KAAOA,CAAAA,CAAM,OAAA,EAAQ,CAAI,MAAA,CAAOA,CAAK,CAAA,EAC/C,IAAA,CAAK,GAAA,EAAI,CACpB8b,EAAU,IAAA,CAAK,GAAA,CAAID,CAAI,CAAA,CAEvBE,EAAsD,CAC1D,CAAC,GAAA,CAAO,QAAQ,EAChB,CAAC,IAAA,CAAS,QAAQ,CAAA,CAClB,CAAC,KAAA,CAAU,MAAM,CAAA,CACjB,CAAC,OAAY,KAAK,CAAA,CAClB,CAAC,OAAA,CAAa,OAAO,CAAA,CACrB,CAAC,CAAA,CAAA,CAAA,CAAU,MAAM,CACnB,CAAA,CAEMC,CAAAA,CAAmC,CACvC,MAAA,CAAQ,IAAM,MAAA,CAAQ,GAAA,CAAO,IAAA,CAAM,IAAA,CACnC,IAAK,KAAA,CAAU,KAAA,CAAO,MAAA,CAAY,IAAA,CAAM,OAC1C,CAAA,CAEIC,CAAAA,CAAoC,QAAA,CACxC,IAAA,GAAW,CAACrG,CAAAA,CAAWsG,CAAC,CAAA,GAAKH,CAAAA,CAC3B,GAAID,CAAAA,CAAUlG,CAAAA,CAAW,CAAEqG,CAAAA,CAAOC,EAAG,KAAO,CAG9C,IAAM9M,CAAAA,CAAI,KAAK,KAAA,CAAMyM,CAAAA,CAAOG,CAAAA,CAASC,CAAI,CAAC,CAAA,CAE1C,GAAI,OAAO,IAAA,CAAS,KAAe,IAAA,CAAK,kBAAA,CACtC,OAAO,IAAI,KAAK,kBAAA,CAAmBpB,CAAAA,EAAU,IAAA,CAAM,CAAE,QAAS,MAAO,CAAC,CAAA,CAAE,MAAA,CAAOzL,EAAG6M,CAAI,CAAA,CAGxF,IAAME,CAAAA,CAAM,KAAK,GAAA,CAAI/M,CAAC,CAAA,CAChBsL,CAAAA,CAAStL,EAAI,CAAA,CAAI,KAAA,CAAQ,WAC/B,OAAO,CAAA,EAAG+M,CAAG,CAAA,CAAA,EAAIF,CAAI,CAAA,EAAGE,CAAAA,GAAQ,EAAI,GAAA,CAAM,EAAE,CAAA,CAAA,EAAIzB,CAAM,EACxD,ECjLO,SAAS0B,CAAAA,CAAyBC,CAAAA,CAAwC,CAC/E,OAAO,CAAE,KAAA,CAAO,WAAA,CAAa,MAAAA,CAAM,CACrC,CAKO,SAASC,GACdpC,CAAAA,CACc,CACd,OAAOkC,CAAAA,CAAmB,CACxB,OAAA,CAAQxZ,CAAAA,CAAI4Q,CAAAA,CAAS,CACnB,IAAM+I,CAAAA,CAAUrC,CAAAA,CAAGtX,CAAAA,CAAI4Q,CAAO,EAC1B,OAAO+I,CAAAA,EAAY,UAAA,GACpB3Z,CAAAA,CAAW,mBAAqB2Z,CAAAA,EAErC,CAAA,CACA,SAAA,CAAU3Z,CAAAA,CAAI,CACXA,CAAAA,CAAW,kBAAA,KACd,CACF,CAAC,CACH,CAMA,IAAM4Z,CAAAA,CAAgB,OAAO,kBAAkB,CAAA,CAexC,SAASC,EAAAA,CACd7Z,EACA8Z,CAAAA,CACA1c,CAAAA,CACA0B,CAAAA,CACM,CACN,IAAM8R,CAAAA,CAA+B,CACnC,KAAA,CAAOxT,CAAAA,CACP,IAAK0B,CAAAA,EAAS,GAAA,CACd,SAAA,CAAWA,CAAAA,EAAS,SACtB,CAAA,CAGMib,CAAAA,CAA4B/Z,CAAAA,CAAW4Z,CAAa,GAAK,EAAC,CAChEG,CAAAA,CAAO,IAAA,CAAK,CAAE,SAAA,CAAAD,CAAAA,CAAW,OAAA,CAAAlJ,CAAQ,CAAC,CAAA,CACjC5Q,CAAAA,CAAW4Z,CAAa,CAAA,CAAIG,EAG7BD,CAAAA,CAAU,KAAA,CAAM,OAAA,GAAU9Z,CAAAA,CAAI4Q,CAAO,EACvC,CAKO,SAASoJ,EAAAA,CACdha,EACA8Z,CAAAA,CACAG,CAAAA,CACM,CAEN,IAAM3T,GAD4BtG,CAAAA,CAAW4Z,CAAa,CAAA,EAAK,IAC1C,IAAA,CAAMvN,CAAAA,EAAMA,CAAAA,CAAE,SAAA,GAAcyN,CAAS,CAAA,CAE1D,GAAIxT,CAAAA,CAAO,CACT,IAAM4T,CAAAA,CAAW5T,CAAAA,CAAM,OAAA,CAAQ,KAAA,CAC/BA,EAAM,OAAA,CAAU,CAAE,GAAGA,CAAAA,CAAM,QAAS,KAAA,CAAO2T,CAAAA,CAAU,QAAA,CAAAC,CAAS,EAC9DJ,CAAAA,CAAU,KAAA,CAAM,OAAA,GAAU9Z,CAAAA,CAAIsG,EAAM,OAAO,EAC7C,CACF,CAKO,SAAS6T,EAAAA,CAAiBna,CAAAA,CAAuB,CACtD,IAAM+Z,CAAAA,CAA4B/Z,EAAW4Z,CAAa,CAAA,EAAK,EAAC,CAChE,QAAWtT,CAAAA,IAASyT,CAAAA,CAClBzT,CAAAA,CAAM,SAAA,CAAU,MAAM,SAAA,GAAYtG,CAAAA,CAAIsG,CAAAA,CAAM,OAAO,EAErD,OAAQtG,CAAAA,CAAW4Z,CAAa,EAClC,CAOO,IAAMQ,EAAAA,CAAaZ,CAAAA,CAAgB,CACxC,QAAQxZ,CAAAA,CAAI,CACV,qBAAA,CAAsB,IAAMA,EAAG,KAAA,EAAO,EACxC,CACF,CAAC,CAAA,CAGYqa,EAAAA,CAAgBb,CAAAA,CAA4B,CACvD,QAAQxZ,CAAAA,CAAI,CAAE,KAAA,CAAO8C,CAAQ,EAAG,CAC9B,IAAM6E,CAAAA,CAAYzE,CAAAA,EAAa,CACxBlD,CAAAA,CAAG,QAAA,CAASkD,CAAAA,CAAE,MAAc,GAAGJ,CAAAA,GACtC,CAAA,CACA,QAAA,CAAS,iBAAiB,OAAA,CAAS6E,CAAAA,CAAU,IAAI,CAAA,CAChD3H,EAAW,eAAA,CAAkB2H,EAChC,CAAA,CACA,SAAA,CAAU3H,EAAI,CACZ,QAAA,CAAS,mBAAA,CAAoB,OAAA,CAAUA,EAAW,eAAA,CAAiB,IAAI,CAAA,CACvE,OAAQA,EAAW,gBACrB,CACF,CAAC,CAAA,CAGYsa,GAAad,CAAAA,CAA4D,CACpF,OAAA,CAAQxZ,CAAAA,CAAI,CAAE,KAAA,CAAA5C,CAAM,CAAA,CAAG,CACrB,IAAImG,CAAAA,CAA8C,IAAA,CAC5CrD,CAAAA,CAAW9C,CAAAA,CAAM,UAAY,GAAA,CAE7BoG,CAAAA,CAAQ,IAAM,CAAED,EAAQ,UAAA,CAAWnG,CAAAA,CAAM,OAAA,CAAS8C,CAAQ,EAAG,CAAA,CAC7Dqa,CAAAA,CAAS,IAAM,CAAMhX,IAAS,YAAA,CAAaA,CAAK,CAAA,CAAGA,CAAAA,CAAQ,MAAQ,CAAA,CAEzEvD,CAAAA,CAAG,gBAAA,CAAiB,aAAA,CAAewD,CAAK,CAAA,CACxCxD,CAAAA,CAAG,gBAAA,CAAiB,WAAA,CAAaua,CAAM,CAAA,CACvCva,CAAAA,CAAG,gBAAA,CAAiB,cAAA,CAAgBua,CAAM,CAAA,CAEzCva,CAAAA,CAAW,YAAA,CAAe,CAAE,MAAAwD,CAAAA,CAAO,MAAA,CAAA+W,CAAO,EAC7C,EACA,SAAA,CAAUva,CAAAA,CAAI,CACZ,IAAMwa,EAAOxa,CAAAA,CAAW,YAAA,CACpBwa,CAAAA,GACFxa,CAAAA,CAAG,oBAAoB,aAAA,CAAewa,CAAAA,CAAI,KAAK,CAAA,CAC/Cxa,CAAAA,CAAG,oBAAoB,WAAA,CAAawa,CAAAA,CAAI,MAAM,CAAA,CAC9Cxa,EAAG,mBAAA,CAAoB,cAAA,CAAgBwa,CAAAA,CAAI,MAAM,GAErD,CACF,CAAC,CAAA,CAGYC,EAAAA,CAAajB,EAAmD,CAC3E,OAAA,CAAQxZ,CAAAA,CAAI,CAAE,MAAO0a,CAAS,CAAA,CAAG,CAC/B,IAAMlb,EAAW,IAAI,oBAAA,CAAsBC,CAAAA,EAAY,CACrDib,EAASjb,CAAAA,CAAQ,CAAC,CAAA,CAAE,cAAc,EACpC,CAAC,CAAA,CACDD,CAAAA,CAAS,OAAA,CAAQQ,CAAE,CAAA,CAClBA,CAAAA,CAAW,YAAA,CAAeR,EAC7B,EACA,SAAA,CAAUQ,CAAAA,CAAI,CACXA,CAAAA,CAAW,cAAc,UAAA,GAC5B,CACF,CAAC,EAGY2a,EAAAA,CAAUnB,CAAAA,CAAsD,CAC3E,OAAA,CAAQxZ,EAAI,CAAE,KAAA,CAAO0a,CAAS,CAAA,CAAG,CAC/B,IAAMlb,CAAAA,CAAW,IAAI,cAAA,CAAgBC,GAAY,CAC/Cib,CAAAA,CAASjb,CAAAA,CAAQ,CAAC,CAAC,EACrB,CAAC,CAAA,CACDD,CAAAA,CAAS,QAAQQ,CAAE,CAAA,CAClBA,CAAAA,CAAW,SAAA,CAAYR,EAC1B,CAAA,CACA,SAAA,CAAUQ,CAAAA,CAAI,CACXA,EAAW,SAAA,EAAW,UAAA,GACzB,CACF,CAAC,EChMM,SAAS4a,EAAAA,CACdC,CAAAA,CACA9b,EACAD,CAAAA,CAAgC,EAAC,CACb,CACpB,GAAM,CAAE,KAAA,CAAA9B,CAAAA,CAAQ,GAAI,MAAA,CAAA8d,CAAAA,CAAS,IAAA,CAAM,MAAA,CAAAnH,CAAO,CAAA,CAAI7U,CAAAA,CAE9C,MAAMic,CAAAA,SAAqB,WAAY,CACrC,WAAW,kBAAA,EAA+B,CACxC,OAAO/d,CACT,CAEQ,KAAA,CACA,QAAA,CAAW,MACX,MAAA,CAAkC,EAAC,CAE3C,WAAA,EAAc,CACZ,KAAA,EAAM,CACN,IAAA,CAAK,KAAA,CAAQ8d,EAAS,IAAA,CAAK,YAAA,CAAa,CAAE,IAAA,CAAM,MAAO,CAAC,CAAA,CAAI,KAC9D,CAEA,mBAA0B,CAExB,IAAA,IAAWlH,CAAAA,IAAQ5W,CAAAA,CAAO,CACxB,IAAMge,CAAAA,CAAO,KAAK,YAAA,CAAapH,CAAI,EAC/BoH,CAAAA,GAAS,IAAA,GACX,IAAA,CAAK,MAAA,CAAOpH,CAAI,CAAA,CAAIqH,CAAAA,CAAoBD,CAAI,CAAA,EAEhD,CAEA,IAAA,CAAK,OAAA,EAAQ,CACb,IAAA,CAAK,SAAW,KAClB,CAEA,oBAAA,EAA6B,CAE3B,KAAO,IAAA,CAAK,KAAA,CAAM,UAAA,EAChB,IAAA,CAAK,MAAM,WAAA,CAAY,IAAA,CAAK,KAAA,CAAM,UAAU,EAE9C,IAAA,CAAK,QAAA,CAAW,MAClB,CAEA,yBAAyB7d,CAAAA,CAAc+d,CAAAA,CAA0BjB,CAAAA,CAA+B,CAC9F,KAAK,MAAA,CAAO9c,CAAI,CAAA,CAAI8c,CAAAA,GAAa,KAAOgB,CAAAA,CAAoBhB,CAAQ,CAAA,CAAI,MAAA,CACpE,KAAK,QAAA,EACP,IAAA,CAAK,OAAA,GAET,CAEQ,OAAA,EAAgB,CAEtB,KAAO,IAAA,CAAK,MAAM,UAAA,EAChB,IAAA,CAAK,KAAA,CAAM,WAAA,CAAY,KAAK,KAAA,CAAM,UAAU,CAAA,CAI9C,GAAIa,GAAUnH,CAAAA,CAAQ,CACpB,IAAMwH,CAAAA,CAAU,SAAS,aAAA,CAAc,OAAO,CAAA,CAC9CA,CAAAA,CAAQ,YAAcxH,CAAAA,CACtB,IAAA,CAAK,KAAA,CAAM,WAAA,CAAYwH,CAAO,EAChC,CAGA,IAAMjc,CAAAA,CAAOH,EAAU,IAAA,CAAK,MAAa,CAAA,CACzC,IAAA,CAAK,MAAM,WAAA,CAAYG,CAAI,EAC7B,CAGA,SAASkc,CAAAA,CAA4B,CACnC,MAAA,CAAO,MAAA,CAAO,KAAK,MAAA,CAAQA,CAAQ,CAAA,CAC/B,IAAA,CAAK,UAAU,IAAA,CAAK,OAAA,GAC1B,CACF,CAGA,OAAI,OAAO,cAAA,CAAmB,GAAA,EAAe,CAAC,cAAA,CAAe,GAAA,CAAIP,CAAO,CAAA,GAClE/b,EAAQ,OAAA,CACV,cAAA,CAAe,MAAA,CAAO+b,CAAAA,CAASE,EAAc,CAAE,OAAA,CAASjc,CAAAA,CAAQ,OAAQ,CAAC,CAAA,CAEzE,cAAA,CAAe,MAAA,CAAO+b,CAAAA,CAASE,CAAY,CAAA,CAAA,CAIxCA,CACT,CAMO,SAASM,GACdtc,CAAAA,CACAD,CAAAA,CAAgC,EAAC,CACb,CAEpB,GAAM,CAAE,KAAA,CAAA9B,CAAAA,CAAQ,EAAC,CAAG,MAAA,CAAA8d,EAAS,IAAA,CAAM,MAAA,CAAAnH,CAAO,CAAA,CAAI7U,CAAAA,CAE9C,OAAO,cAAc,WAAY,CAC/B,WAAW,kBAAA,EAAqB,CAAE,OAAO9B,CAAO,CAExC,KAAA,CACA,QAAA,CAAW,MACX,MAAA,CAAkC,EAAC,CAE3C,WAAA,EAAc,CACZ,KAAA,EAAM,CACN,IAAA,CAAK,KAAA,CAAQ8d,EAAS,IAAA,CAAK,YAAA,CAAa,CAAE,IAAA,CAAM,MAAO,CAAC,CAAA,CAAI,KAC9D,CAEA,mBAAoB,CAClB,IAAA,IAAWlH,CAAAA,IAAQ5W,CAAAA,CAAO,CACxB,IAAMge,CAAAA,CAAO,IAAA,CAAK,YAAA,CAAapH,CAAI,CAAA,CAC/BoH,CAAAA,GAAS,IAAA,GAAM,IAAA,CAAK,OAAOpH,CAAI,CAAA,CAAIqH,CAAAA,CAAoBD,CAAI,GACjE,CACA,IAAA,CAAK,OAAA,EAAQ,CACb,KAAK,QAAA,CAAW,KAClB,CAEA,oBAAA,EAAuB,CACrB,KAAO,IAAA,CAAK,KAAA,CAAM,UAAA,EAAY,KAAK,KAAA,CAAM,WAAA,CAAY,IAAA,CAAK,KAAA,CAAM,UAAU,CAAA,CAC1E,IAAA,CAAK,SAAW,MAClB,CAEA,yBAAyB7d,CAAAA,CAAcme,CAAAA,CAAqBxH,CAAAA,CAAoB,CAC9E,KAAK,MAAA,CAAO3W,CAAI,CAAA,CAAI2W,CAAAA,GAAQ,KAAOmH,CAAAA,CAAoBnH,CAAG,CAAA,CAAI,MAAA,CAC1D,KAAK,QAAA,EAAU,IAAA,CAAK,OAAA,GAC1B,CAEQ,OAAA,EAAU,CAChB,KAAO,IAAA,CAAK,MAAM,UAAA,EAAY,IAAA,CAAK,KAAA,CAAM,WAAA,CAAY,KAAK,KAAA,CAAM,UAAU,CAAA,CAC1E,GAAIgH,GAAUnH,CAAAA,CAAQ,CACpB,IAAMtH,CAAAA,CAAI,SAAS,aAAA,CAAc,OAAO,CAAA,CACxCA,CAAAA,CAAE,YAAcsH,CAAAA,CAChB,IAAA,CAAK,KAAA,CAAM,WAAA,CAAYtH,CAAC,EAC1B,CACA,IAAA,CAAK,KAAA,CAAM,YAAYtN,CAAAA,CAAU,IAAA,CAAK,MAAa,CAAC,EACtD,CACF,CACF,CAMA,SAASkc,EAAoB7d,CAAAA,CAAwB,CAEnD,GAAI,CACF,OAAO,IAAA,CAAK,KAAA,CAAMA,CAAK,CACzB,MAAQ,CACN,OAAOA,CACT,CACF,CCxJA,IAAMme,EAAAA,CAAmB,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OAAA,CAAA,CAoBzB,eAAsBC,EAAAA,CAAU1c,CAAAA,CAAqD,CACnF,GAAM,CACJ,MAAA,CAAQ2c,CAAAA,CACR,MAAA,CAAAC,CAAAA,CACA,MAAA,CAAAC,CAAAA,CAAS,MAAA,CACT,QAAA,CAAAC,CAAAA,CAAWL,EAAAA,CACX,MAAA,CAAAM,CAAAA,CACA,OAAA,CAAAne,CAAAA,CACA,WAAA,CAAAoe,CAAAA,CAAc,CAChB,CAAA,CAAIhd,CAAAA,CAEE0E,CAAAA,CAAQ,IAAA,CAAK,GAAA,EAAI,CAGjBuY,CAAAA,CAAS,OAAON,CAAAA,EAAgB,UAAA,CAClC,MAAMA,CAAAA,EAAY,CAClBA,CAAAA,CAEE9V,CAAAA,CAA0B,CAC9B,QAAA,CAAU,EAAC,CACX,MAAA,CAAQ,EAAC,CACT,QAAA,CAAU,CACZ,CAAA,CAGA,IAAA,IAASoF,CAAAA,CAAI,CAAA,CAAGA,CAAAA,CAAIgR,CAAAA,CAAO,MAAA,CAAQhR,CAAAA,EAAK+Q,CAAAA,CAAa,CACnD,IAAME,CAAAA,CAAQD,CAAAA,CAAO,MAAMhR,CAAAA,CAAGA,CAAAA,CAAI+Q,CAAW,CAAA,CAC7C,MAAM,OAAA,CAAQ,GAAA,CAAIE,CAAAA,CAAM,GAAA,CAAI,MAAOC,CAAAA,EAAQ,CACzC,GAAI,CACF,IAAMrf,CAAAA,CAAU,MAAM8e,CAAAA,CAAOO,CAAG,CAAA,CAC1Blb,CAAAA,CAAO6a,CAAAA,CACV,OAAA,CAAQ,aAAA,CAAehf,CAAO,CAAA,CAC9B,OAAA,CAAQ,UAAA,CAAY,EAAE,CAAA,CACtB,OAAA,CAAQ,aAAA,CAAe,EAAE,CAAA,CAEtBsf,CAAAA,CAAWC,EAAAA,CAAcF,CAAG,CAAA,CAIlCtW,CAAAA,CAAO,QAAA,CAAS,IAAA,CAAK,CACnB,GAAA,CAAAsW,CAAAA,CACA,IAAA,CAAM,CAAA,EAAGN,CAAM,CAAA,CAAA,EAAIO,CAAQ,CAAA,CAAA,CAC3B,IAAA,CAAM,IAAI,IAAA,CAAK,CAACnb,CAAI,CAAC,CAAA,CAAE,IACzB,CAAC,CAAA,CAED8a,CAAAA,GAASI,CAAAA,CAAKlb,CAAI,EACpB,CAAA,MAASpD,EAAK,CACZ,IAAMH,CAAAA,CAAQG,CAAAA,YAAe,KAAA,CAAQA,CAAAA,CAAM,IAAI,KAAA,CAAM,MAAA,CAAOA,CAAG,CAAC,CAAA,CAChEgI,CAAAA,CAAO,MAAA,CAAO,IAAA,CAAK,CAAE,GAAA,CAAAsW,CAAAA,CAAK,KAAA,CAAOze,CAAAA,CAAM,OAAQ,CAAC,CAAA,CAChDE,CAAAA,GAAUue,CAAAA,CAAKze,CAAK,EACtB,CACF,CAAC,CAAC,EACJ,CAEA,OAAAmI,CAAAA,CAAO,QAAA,CAAW,IAAA,CAAK,GAAA,EAAI,CAAInC,CAAAA,CACxBmC,CACT,CAUO,SAASyW,EAAAA,CAAqBC,CAAAA,CAAkD,CACrF,OAAOA,CAAAA,CACJ,MAAA,CAAQxR,CAAAA,EAAM,CAACA,CAAAA,CAAE,IAAA,CAAK,QAAA,CAAS,GAAG,CAAA,EAAK,CAACA,CAAAA,CAAE,IAAA,CAAK,QAAA,CAAS,GAAG,CAAC,CAAA,CAC5D,GAAA,CAAKA,CAAAA,EAAMA,EAAE,IAAI,CACtB,CAaO,SAASyR,EAAAA,CACd5U,CAAAA,CACA6U,CAAAA,CACU,CACV,OAAOA,CAAAA,CAAO,GAAA,CAAKnG,CAAAA,EAAM,CACvB,IAAIE,CAAAA,CAAO5O,CAAAA,CACX,IAAA,GAAW,CAAC3F,CAAAA,CAAK3E,CAAK,CAAA,GAAK,MAAA,CAAO,OAAA,CAAQgZ,CAAC,CAAA,CACzCE,CAAAA,CAAOA,CAAAA,CAAK,OAAA,CAAQ,CAAA,CAAA,EAAIvU,CAAG,CAAA,CAAA,CAAI3E,CAAK,EAEtC,OAAOkZ,CACT,CAAC,CACH,CAYO,SAAS6F,EAAAA,CAAcF,CAAAA,CAAqB,CACjD,IAAMO,CAAAA,CAAQP,CAAAA,CAAI,OAAA,CAAQ,KAAA,CAAO,EAAE,CAAA,CAAE,OAAA,CAAQ,KAAA,CAAO,EAAE,CAAA,CACtD,OAAKO,CAAAA,CACE,CAAA,EAAGA,CAAK,CAAA,WAAA,CAAA,CADI,YAErB,CAKO,SAASC,EAAAA,CACd3F,CAAAA,CACA4F,CAAAA,CACQ,CACR,IAAI3F,CAAAA,CAAM,CAAA;AAAA,CAAA,CACVA,CAAAA,EAAO,CAAA;AAAA,CAAA,CAEP,IAAA,IAAWrC,CAAAA,IAAQgI,CAAAA,CAAQ,QAAA,CACzB3F,CAAAA,EAAO,CAAA;AAAA,CAAA,CACPA,CAAAA,EAAO,CAAA,SAAA,EAAYD,CAAO,CAAA,EAAGpC,EAAK,GAAG,CAAA;AAAA,CAAA,CACrCqC,CAAAA,EAAO,CAAA,aAAA,EAAgB,IAAI,IAAA,EAAK,CAAE,WAAA,EAAY,CAAE,KAAA,CAAM,GAAG,CAAA,CAAE,CAAC,CAAC,CAAA;AAAA,CAAA,CAC7DA,CAAAA,EAAO,CAAA;AAAA,CAAA,CAGT,OAAAA,CAAAA,EAAO,CAAA;AAAA,CAAA,CACAA,CACT,CCnKO,SAAS4F,EAAAA,CACdC,IACAC,CAAAA,CACAC,GAAAA,CACAC,CAAAA,CACY,CACZ,IAAIC,CAAAA,CAAuB,EAAC,CAGtB/L,EAAQgM,CAAAA,EAAgB,CAExBrb,CAAAA,CAAUnD,CAAAA,CACd,IAAM,CACJ,IAAMrB,CAAAA,CAAQ,OAAO0f,GAAAA,EAAY,CAAA,CAGjC,IAAA,IAAW5d,CAAAA,IAAQ8d,CAAAA,CACb9d,CAAAA,CAAK,UAAA,EAAYA,EAAK,UAAA,CAAW,WAAA,CAAYA,CAAI,CAAA,CAEvD8d,CAAAA,CAAe,EAAC,CAGhB,IAAME,EAASH,CAAAA,CAAM3f,CAAK,CAAA,EAAK2f,CAAAA,CAAM,QAAA,CAC/BI,CAAAA,CAAaN,CAAAA,CAAO,UAAA,CAC1B,GAAIK,CAAAA,EAAUC,CAAAA,CAAY,CACxB,IAAMje,CAAAA,CAAO+R,CAAAA,CAAQmM,CAAAA,CAAWnM,CAAAA,CAAOiM,CAAM,CAAA,CAAIA,CAAAA,EAAO,CAClDG,CAAAA,CAAQne,CAAAA,YAAgB,gBAAA,CAC1B,KAAA,CAAM,IAAA,CAAKA,EAAK,UAAU,CAAA,CAC1B,CAACA,CAAI,CAAA,CACT,IAAA,IAAWsN,CAAAA,IAAK6Q,CAAAA,CACdF,EAAW,YAAA,CAAa3Q,CAAAA,CAAGqQ,CAAM,CAAA,CAEnCG,CAAAA,CAAeK,EACjB,CACF,CAAA,CACA,CAAE,MAAA,CAAQ,IAAK,CACjB,CAAA,CAEA,OAAO,IAAM,CACXzb,CAAAA,GACA,IAAA,IAAW1C,CAAAA,IAAQ8d,CAAAA,CACb9d,CAAAA,CAAK,UAAA,EAAYA,CAAAA,CAAK,UAAA,CAAW,WAAA,CAAYA,CAAI,EAEzD,CACF,CA8BO,IAAMoe,EAAAA,CAAShgB,GAAAA,CAA8BC,CAAAA,EAC3C,IAAM,CACX,IAAMiB,CAAAA,CAAY,QAAA,CAAS,aAAA,CAAc,KAAK,CAAA,CAC9CA,CAAAA,CAAU,KAAA,CAAM,QAAU,UAAA,CAC1B,IAAMqe,CAAAA,CAAS,QAAA,CAAS,aAAA,CAAc,QAAQ,CAAA,CAC9Cre,CAAAA,CAAU,YAAYqe,CAAM,CAAA,CAE5B,IAAMU,CAAAA,CAAW,CAAE,GAAGhgB,CAAAA,CAAI,KAAA,CAAM,KAAM,EACtC,OAAIA,CAAAA,CAAI,KAAA,CAAM,QAAA,GACZggB,CAAAA,CAAS,QAAA,CAAW,IAAM1gB,CAAAA,CAAUU,EAAI,KAAA,CAAM,QAAA,EAAW,CAAA,CAAA,CAG3Dof,EAAAA,CACEne,CAAAA,CACAqe,CAAAA,CACA,IAAMtf,EAAI,KAAA,CAAM,EAAA,CAChB,MAAA,CAAO,WAAA,CACL,MAAA,CAAO,OAAA,CAAQggB,CAAQ,CAAA,CAAE,IAAI,CAAC,CAACxQ,CAAAA,CAAGrI,CAAC,CAAA,GAAM,CACvCqI,CAAAA,CACA,IAAMlQ,EAAU6H,CAAAA,EAAG,CACrB,CAAC,CACH,CACF,CAAA,CAEOlG,CACT,CACD,EAkBM,SAASgf,EAAAA,CACdpgB,CAAAA,CACA2f,CAAAA,CACe,CACf,IAAMhb,CAAAA,CAAM,OAAO3E,CAAK,CAAA,CAClB8f,CAAAA,CAASH,CAAAA,CAAMhb,CAAG,CAAA,EAAKgb,CAAAA,CAAM,CAAA,CACnC,OAAOG,CAAAA,CAASA,CAAAA,CAAO9f,CAAK,CAAA,CAAI,MAClC,CCvGA,IAAIqgB,EAAAA,CAAoB,EAYjB,SAASC,EAAAA,CAAkBrc,CAAAA,CAIf,CACjB,OAAO,CACL,KAAA,CAAO,UAAA,CACP,QAASA,CAAAA,CAAO,OAAA,CAChB,UAAA,CAAYA,CAAAA,CAAO,UAAA,CACnB,KAAA,CAAOA,CAAAA,CAAO,KAAA,CACd,IAAK,MAAA,CAAO,CAAA,SAAA,EAAY,EAAEoc,EAAiB,CAAA,CAAE,CAC/C,CACF,CAMA,IAAME,CAAAA,CAAgB,IAAI,GAAA,CAcnB,SAASC,EAAAA,CACdC,CAAAA,CAAoC,EAAC,CACrCjB,EACU,CACV,IAAMkB,CAAAA,CAAY,IAAI,GAAA,CAChBC,CAAAA,CAAiB,IAAI,GAAA,CACrBC,EAAgB,IAAI,GAAA,CAG1B,IAAA,IAAWC,CAAAA,IAAOJ,CAAAA,CAChBG,CAAAA,CAAc,GAAA,CAAIC,CAAAA,CAAI,QAAQ,GAAA,CAAKA,CAAG,CAAA,CAGxC,IAAMC,CAAAA,CAAqB,CACzB,GAAA,CAAOC,CAAAA,CAA6B,CAClC,IAAM1V,CAAAA,CAAK0V,CAAAA,CAAS,GAAA,CAGpB,GAAIA,CAAAA,CAAS,KAAA,CAAO,CAClB,GAAIJ,EAAe,GAAA,CAAItV,CAAE,CAAA,CAAG,OAAOsV,CAAAA,CAAe,GAAA,CAAItV,CAAE,CAAA,CACxD,IAAM2V,CAAAA,CAAoB,EAAC,CACrBH,CAAAA,CAAMD,CAAAA,CAAc,GAAA,CAAIvV,CAAE,CAAA,CAGhC,GAFIwV,CAAAA,EAAK,UAAA,CAAYG,CAAAA,CAAO,IAAA,CAAKH,CAAAA,CAAI,UAAA,EAAY,CAAA,CACxCA,GAAK,QAAA,GAAa,MAAA,EAAWG,CAAAA,CAAO,IAAA,CAAKH,CAAAA,CAAI,QAAQ,CAAA,CAC1DrB,CAAAA,EAAQ,IAAIuB,CAAQ,CAAA,CAAG,CACzB,IAAME,CAAAA,CAAezB,CAAAA,CAAO,GAAA,CAAIuB,CAAQ,EACpC,KAAA,CAAM,OAAA,CAAQE,CAAY,CAAA,EAAGD,CAAAA,CAAO,IAAA,CAAK,GAAGC,CAAY,EAC9D,CACA,OAAAN,CAAAA,CAAe,GAAA,CAAItV,CAAAA,CAAI2V,CAAM,CAAA,CACtBA,CACT,CAGA,GAAIN,CAAAA,CAAU,GAAA,CAAIrV,CAAE,CAAA,CAAG,OAAOqV,CAAAA,CAAU,GAAA,CAAIrV,CAAE,CAAA,CAG9C,GAAI0V,CAAAA,CAAS,UAAA,GAAe,MAAA,EAAUR,CAAAA,CAAc,GAAA,CAAIlV,CAAE,EACxD,OAAOkV,CAAAA,CAAc,GAAA,CAAIlV,CAAE,CAAA,CAI7B,IAAMwV,CAAAA,CAAMD,CAAAA,CAAc,IAAIvV,CAAE,CAAA,CAChC,GAAIwV,CAAAA,CAAK,CACP,IAAMK,CAAAA,CAAWC,EAAAA,CAAoBN,EAAKC,CAAQ,CAAA,CAClD,OAAAJ,CAAAA,CAAU,GAAA,CAAIrV,CAAAA,CAAI6V,CAAQ,CAAA,CACnBA,CACT,CAGA,GAAI1B,CAAAA,CACF,OAAOA,CAAAA,CAAO,GAAA,CAAIuB,CAAQ,CAAA,CAI5B,IAAMG,CAAAA,CAAWH,CAAAA,CAAS,OAAA,EAAQ,CAGlC,OAAIA,CAAAA,CAAS,UAAA,GAAe,MAAA,CAC1BR,EAAc,GAAA,CAAIlV,CAAAA,CAAI6V,CAAQ,CAAA,CAE9BR,CAAAA,CAAU,GAAA,CAAIrV,CAAAA,CAAI6V,CAAQ,EAGrBA,CACT,CAAA,CAEA,GAAA,CAAIH,CAAAA,CAAyC,CAG3C,OAFIL,CAAAA,CAAU,GAAA,CAAIK,CAAAA,CAAS,GAAG,CAAA,EAC1BH,CAAAA,CAAc,GAAA,CAAIG,CAAAA,CAAS,GAAG,CAAA,EAC9BA,CAAAA,CAAS,UAAA,GAAe,QAAUR,CAAAA,CAAc,GAAA,CAAIQ,CAAAA,CAAS,GAAG,CAAA,CAAU,IAAA,CAC1EvB,CAAAA,CAAeA,CAAAA,CAAO,IAAIuB,CAAQ,CAAA,CAC/B,KACT,CAAA,CAEA,WAAA,CAAYK,CAAAA,CAAmD,CAC7D,OAAOZ,GAAeY,CAAAA,EAAkB,EAAC,CAAGN,CAAQ,CACtD,CAAA,CAEA,OAAA,EAAU,CACRJ,EAAU,KAAA,EAAM,CAChBC,CAAAA,CAAe,KAAA,GACjB,CACF,CAAA,CAEA,OAAOG,CACT,CAEA,SAASK,EAAAA,CAAoBN,CAAAA,CAA2BC,CAAAA,CAA6B,CACnF,OAAID,CAAAA,CAAI,WAAa,MAAA,CAAkBA,CAAAA,CAAI,QAAA,CACvCA,CAAAA,CAAI,UAAA,CAAmBA,CAAAA,CAAI,UAAA,EAAW,CACtCA,EAAI,WAAA,CAAoBC,CAAAA,CAAS,GAAA,CAAID,CAAAA,CAAI,WAAW,CAAA,CACjDA,CAAAA,CAAI,OAAA,CAAQ,OAAA,EACrB,CAyBO,SAASQ,EAAAA,CAAkBN,CAAAA,CAA6B,CACvC,CAEpB,GAAIA,CAAAA,CAAS,UAAA,GAAe,MAAA,CAAQ,CAClC,GAAIR,CAAAA,CAAc,GAAA,CAAIQ,CAAAA,CAAS,GAAG,CAAA,CAChC,OAAOR,CAAAA,CAAc,GAAA,CAAIQ,EAAS,GAAG,CAAA,CAEvC,IAAMG,CAAAA,CAAWH,CAAAA,CAAS,OAAA,EAAQ,CAClC,OAAAR,EAAc,GAAA,CAAIQ,CAAAA,CAAS,GAAA,CAAKG,CAAQ,CAAA,CACjCA,CACT,CACA,OAAOH,EAAS,OAAA,EAClB,CAEF,CAKO,SAASO,EAAAA,EAAuB,CACrCf,CAAAA,CAAc,KAAA,GAChB,CCjLO,SAASgB,GACdjT,CAAAA,CACA5M,CAAAA,CAAwB,EAAC,CACX,CACd,GAAM,CACJ,OAAA,CAAA8f,CAAAA,CAAU,WACV,OAAA,CAASjT,CAAAA,CACT,KAAA,CAAOC,CAAAA,CACP,QAAA,CAAAiT,CAAAA,CAAW,KAAA,CACX,WAAA,CAAAC,EAAc,CAAA,CACd,UAAA,CAAAxf,CAAAA,CAAa,OACf,CAAA,CAAIR,CAAAA,CAEA+M,CAAAA,CAAoC,IAAA,CACpCC,IAAoC,IAAA,CACpCC,CAAAA,CAA0B,IAAA,CAE9B,SAASC,GAAAA,EAA2B,CAClC,GAAIF,GAAAA,CAAa,OAAOA,GAAAA,CAExB,IAAMtI,CAAAA,CAAQ,IAAA,CAAK,GAAA,EAAI,CACvB,OAAAsI,GAAAA,CAAcJ,GAAO,CAClB,IAAA,CAAK,MAAOO,CAAAA,EAAQ,CAEnB,IAAM5H,CAAAA,CAAU,IAAA,CAAK,KAAI,CAAIb,CAAAA,CACzBsb,CAAAA,CAAc,CAAA,EAAKza,CAAAA,CAAUya,CAAAA,EAC/B,MAAM,IAAI,QAASjU,CAAAA,EAAM,UAAA,CAAWA,CAAAA,CAAGiU,CAAAA,CAAcza,CAAO,CAAC,CAAA,CAE/DwH,CAAAA,CAAeI,EAAI,QACrB,CAAC,CAAA,CACA,KAAA,CAAOtO,CAAAA,EAAQ,CACdoO,CAAAA,CAAYpO,CAAAA,YAAe,MAAQA,CAAAA,CAAM,IAAI,KAAA,CAAM,MAAA,CAAOA,CAAG,CAAC,EAChE,CAAC,EAEImO,GACT,CAGA,OAAI+S,CAAAA,EAAU7S,GAAAA,EAAU,CAEjB1O,GAAAA,CAAoBC,CAAAA,EAAQ,CACjC,IAAM+I,CAAAA,CAAQ7I,CAAAA,CAA+C,MAAM,CAAA,CAGnE,eAAeshB,GAA6B,CACtCzY,CAAAA,EAAM,GAAM,MAAA,GAChBA,CAAAA,CAAM,GAAA,CAAI,SAAS,CAAA,CACnB,MAAM0F,GAAAA,EAAU,CAChB1F,CAAAA,CAAM,GAAA,CAAIyF,CAAAA,CAAY,OAAA,CAAU,OAAO,CAAA,EACzC,CAEA,OAAO,IAAM,CACX,IAAMvN,CAAAA,CAAY,QAAA,CAAS,aAAA,CAAc,KAAK,EAC9CA,CAAAA,CAAU,KAAA,CAAM,OAAA,CAAU,UAAA,CAE1B,IAAM6N,CAAAA,CAAI/F,CAAAA,EAAM,CAEhB,OAAI+F,CAAAA,GAAM,OAAA,EAAWR,CAAAA,EACnBrN,CAAAA,CAAU,YAAYqN,CAAAA,CAAatO,CAAAA,CAAI,KAAY,CAAC,EAC7CiB,CAAAA,EAGL6N,CAAAA,GAAM,OAAA,EAAWT,CAAAA,EAAWG,CAAAA,EAC9BvN,CAAAA,CAAU,WAAA,CAAY3B,CAAAA,CAAU+O,EAAQG,CAAS,CAAC,CAAC,CAAA,CAC5CvN,CAAAA,GAILmN,CAAAA,EAAaU,CAAAA,GAAM,SAAA,EACrB7N,EAAU,WAAA,CAAY3B,CAAAA,CAAU8O,CAAAA,EAAW,CAAC,CAAA,CAI1CU,CAAAA,GAAM,MAAA,EACR2S,GAAaxgB,CAAAA,CAAWogB,CAAAA,CAASG,CAAAA,CAAazf,CAAU,CAAA,CAAE,IAAA,CAAMqa,CAAAA,EAAY,CAE5E,CAAC,CAAA,CAGInb,CAAAA,CACT,CACF,CAAC,CACH,CAMA,eAAewgB,EAAAA,CACbhf,CAAAA,CACA4e,CAAAA,CACAK,CAAAA,CACA3f,CAAAA,CACqB,CACrB,OAAIsf,CAAAA,GAAY,aACdK,CAAAA,EAAK,CACE,IAAM,CAAC,CAAA,EAGZL,CAAAA,GAAY,UAAA,CACPM,EAAAA,CAAqBlf,EAAIif,CAAAA,CAAM3f,CAAU,CAAA,CAG9Csf,CAAAA,GAAY,aAAA,EAAiBA,CAAAA,GAAY,OAAA,CACpCO,EAAAA,CAAwBnf,EAAIif,CAAAA,CAAML,CAAO,CAAA,CAG9CA,CAAAA,GAAY,MAAA,CACPQ,EAAAA,CAAiBH,CAAI,CAAA,CAG1B,OAAOL,CAAAA,EAAY,QAAA,EAAYA,CAAAA,CAAQ,IAAA,GAAS,OAAA,CAC3CS,EAAAA,CAAkBJ,CAAAA,CAAML,CAAAA,CAAQ,KAAK,CAAA,CAG1C,OAAOA,CAAAA,EAAY,QAAA,EAAYA,CAAAA,CAAQ,IAAA,GAAS,QAAA,CAC3CU,EAAAA,CAAmBL,EAAML,CAAAA,CAAQ,SAAS,CAAA,EAGnDK,CAAAA,EAAK,CACE,IAAM,CAAC,CAAA,CAChB,CAEA,SAASC,EAAAA,CACPlf,CAAAA,CACAif,CAAAA,CACA3f,CAAAA,CACY,CACZ,GAAI,OAAO,qBAAyB,GAAA,CAClC,OAAA2f,CAAAA,EAAK,CACE,IAAM,CAAC,CAAA,CAGhB,IAAMzf,EAAW,IAAI,oBAAA,CAClBC,CAAAA,EAAY,CACPA,CAAAA,CAAQ,CAAC,CAAA,EAAG,cAAA,GACdD,EAAS,UAAA,EAAW,CACpByf,CAAAA,EAAK,EAET,EACA,CAAE,UAAA,CAAA3f,CAAW,CACf,EAGA,OAAA,qBAAA,CAAsB,IAAME,CAAAA,CAAS,OAAA,CAAQQ,CAAE,CAAC,CAAA,CACzC,IAAMR,EAAS,UAAA,EACxB,CAEA,SAAS2f,EAAAA,CACPnf,CAAAA,CACAif,CAAAA,CACA3W,CAAAA,CACY,CACZ,IAAMnB,CAAAA,CAASmB,CAAAA,GAAS,OAAA,CACpB,CAAC,YAAA,CAAc,SAAS,CAAA,CACxB,CAAC,OAAA,CAAS,YAAA,CAAc,SAAA,CAAW,YAAY,CAAA,CAE7CxF,CAAAA,CAAU,IAAM,CACpB,QAAW0E,CAAAA,IAASL,CAAAA,CAClBnH,CAAAA,CAAG,mBAAA,CAAoBwH,CAAAA,CAAO1E,CAAO,CAAA,CAEvCmc,CAAAA,GACF,CAAA,CAEA,IAAA,IAAWzX,CAAAA,IAASL,CAAAA,CAClBnH,CAAAA,CAAG,gBAAA,CAAiBwH,CAAAA,CAAO1E,CAAAA,CAAS,CAAE,IAAA,CAAM,IAAA,CAAM,OAAA,CAAS,IAAK,CAAC,CAAA,CAGnE,OAAO,IAAM,CACX,IAAA,IAAW0E,CAAAA,IAASL,CAAAA,CAClBnH,CAAAA,CAAG,mBAAA,CAAoBwH,CAAAA,CAAO1E,CAAO,EAEzC,CACF,CAEA,SAASsc,EAAAA,CAAiBH,CAAAA,CAA8B,CACtD,GAAI,OAAO,mBAAA,CAAwB,IAAa,CAC9C,IAAMxW,CAAAA,CAAK,mBAAA,CAAoB,IAAMwW,CAAAA,EAAM,CAAA,CAC3C,OAAO,IAAM,kBAAA,CAAmBxW,CAAE,CACpC,CAEA,IAAMlF,CAAAA,CAAQ,UAAA,CAAW0b,EAAM,GAAG,CAAA,CAClC,OAAO,IAAM,YAAA,CAAa1b,CAAK,CACjC,CAEA,SAAS8b,EAAAA,CAAkBJ,CAAAA,CAAkBnb,CAAAA,CAA2B,CACtE,IAAMP,CAAAA,CAAQ,UAAA,CAAW0b,CAAAA,CAAMnb,CAAK,CAAA,CACpC,OAAO,IAAM,YAAA,CAAaP,CAAK,CACjC,CAEA,SAAS+b,GAAmBL,CAAAA,CAAkBM,CAAAA,CAAsC,CAClF,IAAMC,CAAAA,CAAQ,IAAM,CACdD,CAAAA,GAAaN,CAAAA,EAAK,CACjB,qBAAA,CAAsBO,CAAK,EAClC,CAAA,CACA,OAAA,qBAAA,CAAsBA,CAAK,CAAA,CACpB,IAAM,CAAC,CAChB,CCnNO,SAASC,EAAAA,EAAmC,CACjD,OAAO,OAAO,SAAa,GAAA,EAAe,qBAAA,GAAyB,QACrE,CAgBO,SAASC,EAAAA,CACdC,CAAAA,CACA7gB,CAAAA,CAAiC,EAAC,CAClB,CAChB,GAAM,CAAE,SAAA,CAAAuT,CAAAA,CAAW,QAAA,CAAAuN,CAAAA,CAAU,QAAAC,CAAAA,CAAS,QAAA,CAAAljB,CAAAA,CAAW,SAAU,CAAA,CAAImC,CAAAA,CAK/D,GAHA8gB,CAAAA,KAGIH,EAAAA,EAAwB,CAAG,CACzBpN,CAAAA,EAAW,QAAA,CAAS,eAAA,CAAgB,SAAA,CAAU,GAAA,CAAIA,CAAS,CAAA,CAE/D,IAAMyN,CAAAA,CAAc,QAAA,CAAiB,mBAAA,CAAoB,SAAY,CACnE,MAAMH,IACR,CAAC,CAAA,CAOD,OAAO,CACL,QAAA,CANeG,CAAAA,CAAW,QAAA,CAAS,KAAK,IAAM,CAC1CzN,CAAAA,EAAW,QAAA,CAAS,gBAAgB,SAAA,CAAU,MAAA,CAAOA,CAAS,CAAA,CAClEwN,MACF,CAAC,CAAA,CAIC,kBAAA,CAAoBC,CAAAA,CAAW,kBAAA,CAC/B,KAAA,CAAOA,CAAAA,CAAW,MAClB,cAAA,CAAgB,IAAMA,CAAAA,CAAW,cAAA,EACnC,CACF,CAGA,GAAInjB,IAAa,MAAA,CACf,OAAOojB,EAAAA,CAAeJ,CAAAA,CAAgB7gB,CAAO,CAAA,CAI/C,IAAM6G,CAAAA,CAASga,GAAe,CACxB1M,CAAAA,CAAOtN,CAAAA,YAAkB,OAAA,CAAUA,CAAAA,CAAS,OAAA,CAAQ,OAAA,EAAQ,CAElE,OAAAka,CAAAA,IAAU,CAEH,CACL,QAAA,CAAU5M,CAAAA,CACV,kBAAA,CAAoBA,CAAAA,CACpB,KAAA,CAAO,QAAQ,OAAA,EAAQ,CACvB,cAAA,CAAgB,IAAM,CAAC,CACzB,CACF,CAiBO,SAAS+M,EAAAA,CAAkB3e,CAAAA,CAK9B,EAAC,CAAW,CACd,GAAM,CACJ,QAAA,CAAAnB,EAAW,OAAA,CACX,MAAA,CAAAO,CAAAA,CAAS,MAAA,CACT,aAAAwf,CAAAA,CACA,YAAA,CAAAC,CACF,CAAA,CAAI7e,EAEAqS,CAAAA,CAAM,CAAA;AAAA;AAAA,CAAA,CACV,OAAAA,CAAAA,EAAO,CAAA,sBAAA,EAAyBxT,CAAQ,CAAA;AAAA,CAAA,CACxCwT,CAAAA,EAAO,gCAAgCjT,CAAM,CAAA;AAAA,CAAA,CAC7CiT,CAAAA,EAAO,CAAA;AAAA,CAAA,CAEHuM,IACFvM,CAAAA,EAAO,CAAA;AAAA,kBAAA,EAAoDuM,CAAY,CAAA;AAAA;AAAA,CAAA,CAAA,CAErEC,IACFxM,CAAAA,EAAO,CAAA;AAAA,kBAAA,EAAoDwM,CAAY,CAAA;AAAA;AAAA,CAAA,CAAA,CAGlExM,CACT,CAUO,SAASyM,EAAAA,CAAqBngB,CAAAA,CAAiB7C,CAAAA,CAAoB,CACxE6C,CAAAA,CAAG,KAAA,CAAM,kBAAA,CAAqB7C,EAChC,CAMA,SAAS4iB,EAAAA,CACPJ,CAAAA,CACA7gB,CAAAA,CACgB,CAChB,IAAMkB,CAAAA,CAAK,QAAA,CAAS,eAAA,CAEdogB,CAAAA,CAAW,IAAI,OAAA,CAAc,MAAOjgB,CAAAA,EAAY,CAEpDH,CAAAA,CAAG,KAAA,CAAM,WAAa,oBAAA,CACtBA,CAAAA,CAAG,KAAA,CAAM,OAAA,CAAU,GAAA,CAEnB,MAAM,IAAI,OAAA,CAAS6K,CAAAA,EAAM,UAAA,CAAWA,CAAAA,CAAG,GAAG,CAAC,CAAA,CAG3C,MAAM8U,CAAAA,GAGN3f,CAAAA,CAAG,KAAA,CAAM,OAAA,CAAU,GAAA,CAEnB,MAAM,IAAI,OAAA,CAAS6K,CAAAA,EAAM,UAAA,CAAWA,CAAAA,CAAG,GAAG,CAAC,CAAA,CAE3C7K,CAAAA,CAAG,KAAA,CAAM,UAAA,CAAa,GACtBA,CAAAA,CAAG,KAAA,CAAM,OAAA,CAAU,EAAA,CAEnBlB,CAAAA,CAAQ,OAAA,IAAU,CAClBqB,CAAAA,GACF,CAAC,CAAA,CAED,OAAO,CACL,QAAA,CAAAigB,CAAAA,CACA,kBAAA,CAAoBA,EACpB,KAAA,CAAO,OAAA,CAAQ,OAAA,EAAQ,CACvB,cAAA,CAAgB,IAAM,CACpBpgB,CAAAA,CAAG,KAAA,CAAM,UAAA,CAAa,EAAA,CACtBA,CAAAA,CAAG,KAAA,CAAM,OAAA,CAAU,GACrB,CACF,CACF,CC3KA,SAASqgB,EAAAA,CAAiBjjB,CAAAA,CAAwB,CAChD,OAAI,KAAA,CAAM,OAAA,CAAQA,CAAK,CAAA,CAAUA,CAAAA,CAAM,IAAA,CAAK,GAAG,CAAA,CAC3C,OAAOA,CAAAA,EAAU,UAAkBA,CAAAA,CAAQ,MAAA,CAAS,OAAA,CACjD,MAAA,CAAOA,CAAK,CACrB,CAEA,SAASkjB,GAAsBja,CAAAA,CAAaka,CAAAA,CAAoB,CAC9D,OAAI,OAAOA,CAAAA,EAAiB,QAAA,CAAiB,MAAA,CAAOla,CAAG,CAAA,CACnD,OAAOka,CAAAA,EAAiB,SAAA,CAAmBla,CAAAA,GAAQ,MAAA,EAAUA,CAAAA,GAAQ,GAAA,CACrE,KAAA,CAAM,OAAA,CAAQka,CAAY,CAAA,CACpBla,CAAAA,CAAMA,CAAAA,CAAI,KAAA,CAAM,GAAG,EAAI,EAAC,CAE3BA,CACT,CAMA,SAASma,CAAAA,EAAmC,CAC1C,OAAI,OAAO,MAAA,CAAW,GAAA,CAAoB,IAAI,eAAA,CACvC,IAAI,eAAA,CAAgB,MAAA,CAAO,SAAS,MAAM,CACnD,CAEA,SAASC,EAAAA,CAAUlE,CAAAA,CAAyBmE,CAAAA,CAAgC,CAC1E,GAAI,OAAO,MAAA,CAAW,GAAA,CAAa,OAEnC,IAAMC,CAAAA,CAASpE,CAAAA,CAAO,UAAS,CACzBN,CAAAA,CAAM0E,CAAAA,CAAS,CAAA,EAAG,MAAA,CAAO,QAAA,CAAS,QAAQ,CAAA,CAAA,EAAIA,CAAM,CAAA,EAAG,MAAA,CAAO,QAAA,CAAS,IAAI,CAAA,CAAA,CAAK,CAAA,EAAG,MAAA,CAAO,SAAS,QAAQ,CAAA,EAAG,MAAA,CAAO,QAAA,CAAS,IAAI,CAAA,CAAA,CAEpID,CAAAA,GAAS,MAAA,CACX,MAAA,CAAO,OAAA,CAAQ,SAAA,CAAU,IAAA,CAAM,EAAA,CAAIzE,CAAG,CAAA,CAEtC,MAAA,CAAO,QAAQ,YAAA,CAAa,IAAA,CAAM,EAAA,CAAIA,CAAG,EAE7C,CAOA,IAAM2E,CAAAA,CAAe,IAAI,GAAA,CACrBC,EAAAA,CAAoB,KAAA,CAExB,SAASC,EAAAA,EAA+B,CAClCD,EAAAA,EAAqB,OAAO,MAAA,CAAW,GAAA,GAC3CA,EAAAA,CAAoB,IAAA,CAEpB,MAAA,CAAO,gBAAA,CAAiB,UAAA,CAAY,IAAM,CACxC,IAAMtE,CAAAA,CAASiE,CAAAA,EAAgB,CAC/BxE,CAAAA,CAAM,IAAM,CACV,OAAW,CAACja,CAAAA,CAAKuE,CAAK,CAAA,GAAKsa,CAAAA,CAAc,CACvC,IAAMva,CAAAA,CAAMkW,EAAO,GAAA,CAAIxa,CAAG,CAAA,CACpB3E,CAAAA,CAAQiJ,CAAAA,GAAQ,IAAA,CAClBC,CAAAA,CAAM,WAAA,CAAYD,CAAG,CAAA,CACrBC,CAAAA,CAAM,YAAA,CACVA,CAAAA,CAAM,MAAA,CAAO,GAAA,CAAIlJ,CAAK,EACxB,CACF,CAAC,EACH,CAAC,CAAA,EACH,CAWO,SAAS2jB,EAAAA,CACdhf,EACAwe,CAAAA,CACAzhB,CAAAA,CAAgC,EAAC,CACtB,CACX,GAAM,CACJ,SAAA,CAAAkiB,CAAAA,CAAatc,CAAAA,EAAS2b,EAAAA,CAAiB3b,CAAC,CAAA,CACxC,WAAA,CAAAuc,CAAAA,CAAe5a,CAAAA,EAAgBia,GAAmBja,CAAAA,CAAKka,CAAY,CAAA,CACnE,OAAA,CAASW,CAAAA,CAAc,SAAA,CACvB,QAAA,CAAUC,CAAAA,CAAa,CAAA,CACvB,aAAA,CAAAC,CAAAA,CAAgB,IAClB,CAAA,CAAItiB,CAAAA,CAIEuH,GAAAA,CADSma,CAAAA,GACI,GAAA,CAAIze,CAAG,CAAA,CACpBkE,CAAAA,CAAeI,GAAAA,GAAQ,IAAA,CAAO4a,CAAAA,CAAY5a,GAAG,CAAA,CAAIka,CAAAA,CAEjDja,CAAAA,CAAQ7I,CAAAA,CAAUwI,CAAY,CAAA,CAGpC2a,CAAAA,CAAa,GAAA,CAAI7e,EAAK,CAAE,MAAA,CAAQuE,CAAAA,CAAO,WAAA,CAAA2a,CAAAA,CAAa,YAAA,CAAAV,CAAa,CAAC,CAAA,CAClEO,EAAAA,EAAuB,CAGvB,IAAIO,CAAAA,CAAsD,IAAA,CACtDC,CAAAA,CAAmB,KAAA,CAEjBC,EAAcjb,CAAAA,CAAM,GAAA,CAC1BA,CAAAA,CAAM,GAAA,CAAOlJ,CAAAA,EAAa,CAGxB,GAFAmkB,CAAAA,CAAYnkB,CAAK,CAAA,CAEbkkB,CAAAA,CAAkB,CAEtB,IAAME,CAAAA,CAAW,IAAM,CACrB,IAAMC,CAAAA,CAAgBjB,CAAAA,EAAgB,CAElCY,CAAAA,EAAiBhkB,CAAAA,GAAUmjB,CAAAA,CAC7BkB,CAAAA,CAAc,MAAA,CAAO1f,CAAG,CAAA,CAExB0f,CAAAA,CAAc,GAAA,CAAI1f,CAAAA,CAAKif,CAAAA,CAAU5jB,CAAK,CAAC,EAGzCqjB,EAAAA,CAAUgB,CAAAA,CAAeP,CAAW,EACtC,CAAA,CAEIC,CAAAA,CAAa,CAAA,EACXE,CAAAA,EAAe,aAAaA,CAAa,CAAA,CAC7CA,CAAAA,CAAgB,UAAA,CAAWG,CAAAA,CAAUL,CAAU,CAAA,EAE/CK,CAAAA,GAEJ,CAAA,CAEuBlb,CAAAA,CAAM,OAC7B,OAAAA,CAAAA,CAAM,MAAA,CAAUgR,CAAAA,EAAuB,CACrChR,CAAAA,CAAM,GAAA,CAAIgR,CAAAA,CAAGhR,CAAAA,EAAO,CAAC,EACvB,CAAA,CAEOA,CACT,CA4BO,SAASob,EAAAA,CACdC,CAAAA,CACA7iB,CAAAA,CACgB,CAChB,IAAM6G,CAAAA,CAAS,EAAC,CAChB,IAAA,GAAW,CAAC5D,CAAAA,CAAKV,CAAM,IAAK,MAAA,CAAO,OAAA,CAAQsgB,CAAM,CAAA,CAC/Chc,CAAAA,CAAO5D,CAAG,CAAA,CAAIgf,EAAAA,CAAchf,CAAAA,CAAKV,CAAAA,CAAO,OAAA,CAAS,CAC/C,SAAA,CAAWA,CAAAA,CAAO,SAAA,CAClB,WAAA,CAAaA,EAAO,WAAA,CACpB,OAAA,CAASvC,CAAAA,EAAS,OACpB,CAAC,CAAA,CAEH,OAAO6G,CACT,CASO,SAASic,EAAAA,EAAwB,CACtC,GAAI,OAAO,MAAA,CAAW,GAAA,CAAa,OACnC,IAAM3F,CAAAA,CAAM,CAAA,EAAG,MAAA,CAAO,QAAA,CAAS,QAAQ,CAAA,EAAG,MAAA,CAAO,QAAA,CAAS,IAAI,CAAA,CAAA,CAC9D,MAAA,CAAO,OAAA,CAAQ,YAAA,CAAa,IAAA,CAAM,EAAA,CAAIA,CAAG,CAAA,CAEzCD,CAAAA,CAAM,IAAM,CACV,IAAA,GAAW,EAAG1V,CAAK,CAAA,GAAKsa,CAAAA,CACtBta,CAAAA,CAAM,MAAA,CAAO,GAAA,CAAIA,CAAAA,CAAM,YAAY,EAEvC,CAAC,EACH,CAKO,SAASub,EAAAA,EAAyC,CACvD,IAAMtF,CAAAA,CAASiE,CAAAA,EAAgB,CACzB7a,CAAAA,CAAiC,EAAC,CACxC,OAAA4W,CAAAA,CAAO,OAAA,CAAQ,CAACnf,EAAO2E,CAAAA,GAAQ,CAAE4D,CAAAA,CAAO5D,CAAG,CAAA,CAAI3E,EAAO,CAAC,CAAA,CAChDuI,CACT,CAKO,SAASmc,EAAAA,CAAiB/f,CAAAA,CAAmB,CAClD6e,CAAAA,CAAa,MAAA,CAAO7e,CAAG,EACzB,CAKO,SAASggB,EAAAA,EAAwB,CACtCnB,CAAAA,CAAa,KAAA,GACf,CC9MO,IAAMoB,EAAAA,CAAU,CACrB,MAAA,CAAS/gB,CAAAA,EAAcA,CAAAA,CACvB,OAAA,CAAUA,CAAAA,EAAcA,EAAIA,CAAAA,CAAIA,CAAAA,CAChC,QAAA,CAAWA,CAAAA,EAAc,CAAA,CAAI,IAAA,CAAK,GAAA,CAAI,CAAA,CAAIA,CAAAA,CAAG,CAAC,CAAA,CAC9C,UAAA,CAAaA,CAAAA,EAAcA,CAAAA,CAAI,EAAA,CAAM,CAAA,CAAIA,EAAIA,CAAAA,CAAIA,CAAAA,CAAI,CAAA,CAAI,IAAA,CAAK,GAAA,CAAI,EAAA,CAAKA,CAAAA,CAAI,CAAA,CAAG,CAAC,CAAA,CAAI,CAAA,CACnF,MAAA,CAASA,CAAAA,EAAcA,CAAAA,CAAIA,CAAAA,CAC3B,OAAA,CAAUA,GAAc,CAAA,CAAA,CAAK,CAAA,CAAIA,CAAAA,GAAM,CAAA,CAAIA,CAAAA,CAAAA,CAC3C,QAAA,CAAWA,CAAAA,EAAc,CAAA,CAAI,IAAA,CAAK,GAAA,CAAI,CAAA,CAAIA,CAAAA,CAAG,CAAC,CAAA,CAC9C,SAAA,CAAYA,CAAAA,EACNA,EAAI,CAAA,CAAI,IAAA,CAAa,MAAA,CAASA,CAAAA,CAAIA,CAAAA,CAClCA,CAAAA,CAAI,CAAA,CAAI,IAAA,CAAa,MAAA,EAAUA,CAAAA,EAAK,GAAA,CAAM,IAAA,CAAA,CAAQA,CAAAA,CAAI,GAAA,CACtDA,CAAAA,CAAI,GAAA,CAAM,KAAa,MAAA,EAAUA,CAAAA,EAAK,IAAA,CAAO,IAAA,CAAA,CAAQA,CAAAA,CAAI,KAAA,CACtD,MAAA,EAAUA,CAAAA,EAAK,KAAA,CAAQ,IAAA,CAAA,CAAQA,CAAAA,CAAI,OAAA,CAE5C,UAAA,CAAaA,CAAAA,EACPA,CAAAA,GAAM,CAAA,EAAKA,IAAM,CAAA,CAAUA,CAAAA,CACxB,IAAA,CAAK,GAAA,CAAI,CAAA,CAAG,GAAA,CAAMA,CAAC,CAAA,CAAI,IAAA,CAAK,GAAA,CAAA,CAAKA,CAAAA,CAAI,EAAA,EAAO,CAAA,CAAI,IAAA,CAAK,EAAE,CAAA,CAAI,CAEtE,EAMA,SAASghB,EAAAA,CAAsBC,CAAAA,CAASC,CAAAA,CAAOlhB,CAAAA,CAAc,CAC3D,OAAI,OAAOihB,CAAAA,EAAS,QAAA,EAAY,OAAOC,CAAAA,EAAO,QAAA,CACpCD,CAAAA,CAAAA,CAAQC,CAAAA,CAAKD,CAAAA,EAAQjhB,EAGxBA,CAAAA,CAAI,EAAA,CAAMihB,CAAAA,CAAOC,CAC1B,CAeO,SAASC,EAAAA,CACdnc,CAAAA,CACAnH,CAAAA,CAA6B,EAAC,CACZ,CAClB,GAAM,CACJ,QAAA,CAAAoB,CAAAA,CAAW,IACX,MAAA,CAAAO,CAAAA,CAASuhB,EAAAA,CAAQ,QAAA,CACjB,WAAA,CAAAK,CAAAA,CAAcJ,EAAAA,CACd,KAAA,CAAAne,CAAAA,CAAQ,CACV,CAAA,CAAIhF,CAAAA,CAEEgG,CAAAA,CAAUrH,CAAAA,CAAUwI,CAAY,CAAA,CAChCqc,EAAc7kB,CAAAA,CAAUwI,CAAY,CAAA,CACtCsc,CAAAA,CAAQ,CAAA,CACRC,GAAAA,CAAU,KAAA,CAERC,CAAAA,EAAQ,IAAM3d,CAAAA,EAAQ,CAAA,CAE5B,OAAA2d,CAAAA,CAAK,GAAA,CAAM,CAACrlB,CAAAA,CAAUslB,IAA0D,CAC9E,IAAMC,CAAAA,CAAMD,CAAAA,EAAW,QAAA,EAAYxiB,CAAAA,CAC7B0iB,CAAAA,CAAOF,CAAAA,EAAW,MAAA,EAAUjiB,CAAAA,CAC5BoiB,CAAAA,CAASH,CAAAA,EAAW,WAAA,EAAeL,CAAAA,CACnCS,CAAAA,CAAMJ,CAAAA,EAAW,OAAS5e,CAAAA,CAE1Boe,CAAAA,CAAOpd,CAAAA,EAAQ,CAGrB,OAFAwd,CAAAA,CAAY,GAAA,CAAIllB,CAAK,CAAA,CAEjBulB,CAAAA,GAAQ,CAAA,EACV7d,CAAAA,CAAQ,GAAA,CAAI1H,CAAK,CAAA,CACV,OAAA,CAAQ,SAAQ,GAIrBolB,GAAAA,GACF,oBAAA,CAAqBD,CAAK,CAAA,CAC1BC,GAAAA,CAAU,KAAA,CAAA,CAGL,IAAI,OAAA,CAAeriB,CAAAA,EAAY,CACpC,IAAMqD,CAAAA,CAAQ,WAAA,CAAY,GAAA,EAAI,CAAIsf,EAClCN,GAAAA,CAAU,IAAA,CAEV,SAASO,CAAAA,CAAK3e,CAAAA,CAAmB,CAC/B,GAAI,CAACoe,GAAAA,CAAS,CAAEriB,CAAAA,EAAQ,CAAG,MAAQ,CAEnC,IAAMkE,CAAAA,CAAUD,EAAMZ,CAAAA,CACtB,GAAIa,CAAAA,CAAU,CAAA,CAAG,CACfke,CAAAA,CAAQ,qBAAA,CAAsBQ,CAAI,EAClC,MACF,CAEA,IAAM9hB,CAAAA,CAAI,IAAA,CAAK,GAAA,CAAIoD,CAAAA,CAAUse,CAAAA,CAAK,CAAC,CAAA,CAC7BK,CAAAA,CAASJ,CAAAA,CAAK3hB,CAAC,CAAA,CACrB6D,CAAAA,CAAQ,GAAA,CAAI+d,CAAAA,CAAOX,CAAAA,CAAM9kB,CAAAA,CAAO4lB,CAAM,CAAC,CAAA,CAEnC/hB,CAAAA,CAAI,CAAA,CACNshB,CAAAA,CAAQ,sBAAsBQ,CAAI,CAAA,EAElCP,GAAAA,CAAU,KAAA,CACVriB,CAAAA,EAAQ,EAEZ,CAEAoiB,CAAAA,CAAQ,qBAAA,CAAsBQ,CAAI,EACpC,CAAC,CAAA,CACH,CAAA,CAEAN,CAAAA,CAAK,YAAA,CAAgBrlB,GAAmB,CAClColB,GAAAA,GAAW,oBAAA,CAAqBD,CAAK,CAAA,CAAGC,GAAAA,CAAU,KAAA,CAAA,CACtD1d,CAAAA,CAAQ,GAAA,CAAI1H,CAAK,CAAA,CACjBklB,CAAAA,CAAY,GAAA,CAAIllB,CAAK,EACvB,CAAA,CAEAqlB,EAAK,MAAA,CAAS,IAAMH,CAAAA,EAAY,CAEzBG,CACT,CCtGO,SAASQ,EAAAA,CACdzkB,CAAAA,CACAM,CAAAA,CAAuB,EAAC,CACR,CAChB,GAAM,CACJ,QAAA,CAAAoB,EAAW,GAAA,CACX,MAAA,CAAAO,CAAAA,CAAS,4BAAA,CACT,KAAA,CAAAqD,CAAAA,CAAQ,CAAA,CACR,QAAA,CAAAb,CAAAA,CACA,YAAA,CAAAigB,CAAAA,CAAe,UAAA,CACf,UAAA,CAAAC,CACF,CAAA,CAAIrkB,CAAAA,CAEAskB,EAAiB,IAAI,GAAA,CAEzB,SAASC,CAAAA,EAA6B,CACpC,OACS,KAAA,CAAM,IAAA,CADXpgB,CAAAA,CACgBzE,CAAAA,CAAU,gBAAA,CAA8ByE,CAAQ,CAAA,CAElDzE,CAAAA,CAAU,QAFyC,CAGvE,CAEA,SAAS8kB,CAAAA,CAAOtjB,CAAAA,CAAyB,CACvC,OAAOA,CAAAA,CAAG,YAAA,CAAakjB,CAAY,CAAA,EAAKljB,CAAAA,CAAG,EAAA,EAAM,EACnD,CAEA,SAASujB,CAAAA,EAAgB,CACvBH,EAAiB,IAAI,GAAA,CACrB,IAAA,IAAWpjB,CAAAA,IAAMqjB,CAAAA,EAAY,CAAG,CAC9B,IAAMthB,EAAMuhB,CAAAA,CAAOtjB,CAAE,CAAA,CACrB,GAAI+B,CAAAA,CAAK,CACP,IAAMyhB,CAAAA,CAAOxjB,EAAG,qBAAA,EAAsB,CACtCojB,CAAAA,CAAe,GAAA,CAAIrhB,CAAAA,CAAK,CACtB,IAAA,CAAMyhB,CAAAA,CAAK,IAAA,CACX,GAAA,CAAKA,CAAAA,CAAK,GAAA,CACV,KAAA,CAAOA,CAAAA,CAAK,KAAA,CACZ,MAAA,CAAQA,EAAK,MACf,CAAC,EACH,CACF,CACF,CAEA,SAASC,CAAAA,EAAyB,CAChC,IAAMC,CAAAA,CAAWL,CAAAA,EAAY,CACvBM,CAAAA,CAA0B,EAAC,CAEjC,QAAW3jB,CAAAA,IAAM0jB,CAAAA,CAAU,CACzB,IAAM3hB,CAAAA,CAAMuhB,CAAAA,CAAOtjB,CAAE,CAAA,CACf8P,CAAAA,CAAQsT,CAAAA,CAAe,GAAA,CAAIrhB,CAAG,CAAA,CACpC,GAAI,CAAC+N,CAAAA,CAAO,SAEZ,IAAMC,CAAAA,CAAO/P,CAAAA,CAAG,qBAAA,EAAsB,CAEhC4jB,CAAAA,CAAK9T,CAAAA,CAAM,IAAA,CAAOC,EAAK,IAAA,CACvB8T,CAAAA,CAAK/T,CAAAA,CAAM,GAAA,CAAMC,CAAAA,CAAK,GAAA,CACtB+T,CAAAA,CAAKhU,CAAAA,CAAM,OAASC,CAAAA,CAAK,KAAA,EAAS,CAAA,CAAA,CAClCgU,CAAAA,CAAKjU,CAAAA,CAAM,MAAA,EAAUC,CAAAA,CAAK,MAAA,EAAU,CAAA,CAAA,CAG1C,GAAI,IAAA,CAAK,GAAA,CAAI6T,CAAE,CAAA,CAAI,EAAA,EAAO,IAAA,CAAK,IAAIC,CAAE,CAAA,CAAI,EAAA,EAAO,IAAA,CAAK,GAAA,CAAIC,CAAAA,CAAK,CAAC,CAAA,CAAI,GAAA,EAAQ,IAAA,CAAK,GAAA,CAAIC,CAAAA,CAAK,CAAC,CAAA,CAAI,GAAA,CAC5F,SAGF,IAAMC,CAAAA,CAAYhkB,CAAAA,CAAG,OAAA,CACnB,CACE,CACE,SAAA,CAAW,CAAA,UAAA,EAAa4jB,CAAE,CAAA,IAAA,EAAOC,CAAE,CAAA,UAAA,EAAaC,CAAE,CAAA,EAAA,EAAKC,CAAE,CAAA,CAAA,CAC3D,CAAA,CACA,CACE,SAAA,CAAW,6BACb,CACF,CAAA,CACA,CACE,QAAA,CAAA7jB,CAAAA,CACA,MAAA,CAAAO,EACA,KAAA,CAAAqD,CAAAA,CACA,IAAA,CAAM,MACR,CACF,CAAA,CAEA6f,CAAAA,CAAW,IAAA,CAAKK,CAAS,EAC3B,CAGA,IAAMC,CAAAA,CAAc,IAAI,GAAA,CAAIP,CAAAA,CAAS,GAAA,CAAIJ,CAAM,CAAC,CAAA,CAChD,IAAA,GAAW,CAACvhB,CAAAA,CAAKyhB,CAAI,CAAA,GAAKJ,EACnBa,CAAAA,CAAY,GAAA,CAAIliB,CAAG,CAAA,CAK1B,OAAAqhB,CAAAA,CAAe,KAAA,EAAM,CAEd,IAAI,OAAA,CAAejjB,CAAAA,EAAY,CACpC,GAAIwjB,CAAAA,CAAW,MAAA,GAAW,CAAA,CAAG,CAC3BR,CAAAA,IAAa,CACbhjB,CAAAA,EAAQ,CACR,MACF,CAEA,OAAA,CAAQ,GAAA,CAAIwjB,CAAAA,CAAW,GAAA,CAAKpe,CAAAA,EAAMA,CAAAA,CAAE,QAAQ,CAAC,CAAA,CAAE,IAAA,CAAK,IAAM,CAExD,IAAA,IAAWA,CAAAA,IAAKoe,CAAAA,CACdpe,CAAAA,CAAE,MAAA,EAAO,CAEX4d,CAAAA,IAAa,CACbhjB,CAAAA,GACF,CAAC,EACH,CAAC,CACH,CAEA,OAAO,CACL,OAAA,CAAAojB,CAAAA,CACA,OAAA,CAAAE,CAAAA,CACA,MAAM,IAAA,CAAKS,CAAAA,CAAmC,CAC5C,OAAAX,CAAAA,EAAQ,CACRW,CAAAA,EAAO,CAEP,MAAM,IAAI,QAASrZ,CAAAA,EAAM,qBAAA,CAAsBA,CAAC,CAAC,CAAA,CAC1C4Y,CAAAA,EACT,CACF,CACF,CAWA,eAAsBU,EAAAA,CACpB3lB,CAAAA,CACA0lB,CAAAA,CACAplB,CAAAA,CACe,CAEf,OADamkB,EAAAA,CAAWzkB,CAAAA,CAAWM,CAAO,CAAA,CAC9B,IAAA,CAAKolB,CAAM,CACzB,CCnKO,IAAME,EAAAA,CAAQ9mB,GAAAA,CAAkCC,CAAAA,EAAQ,CAC7D,IAAM+I,CAAAA,CAAQ7I,CAAAA,CAA4B,CAAE,MAAA,CAAQ,SAAU,CAAC,CAAA,CAG3D4mB,CAAAA,CAAiB9mB,CAAAA,CAAI,KAAA,CAAM,OAAA,CAE/B,OAAAA,CAAAA,CAAI,KAAA,CAAM,OAAA,CACP,IAAA,CAAMH,CAAAA,EAAU,CACXG,CAAAA,CAAI,KAAA,CAAM,UAAY8mB,CAAAA,EACxB/d,CAAAA,CAAM,GAAA,CAAI,CAAE,MAAA,CAAQ,UAAA,CAAY,KAAA,CAAAlJ,CAAM,CAAC,EAE3C,CAAC,CAAA,CACA,KAAA,CAAOO,CAAAA,EAAQ,CACVJ,CAAAA,CAAI,MAAM,OAAA,GAAY8mB,CAAAA,EACxB/d,CAAAA,CAAM,GAAA,CAAI,CACR,MAAA,CAAQ,UAAA,CACR,KAAA,CAAO3I,CAAAA,YAAe,KAAA,CAAQA,CAAAA,CAAM,IAAI,KAAA,CAAM,MAAA,CAAOA,CAAG,CAAC,CAC3D,CAAC,EAEL,CAAC,CAAA,CAEI,IAAM,CACX,IAAM0O,CAAAA,CAAI/F,CAAAA,EAAM,CAEhB,OAAQ+F,CAAAA,CAAE,MAAA,EACR,KAAK,SAAA,CACH,OAAO9O,CAAAA,CAAI,KAAA,CAAM,OAAA,CACbV,CAAAA,CAAUU,CAAAA,CAAI,KAAA,CAAM,OAAA,EAAS,CAAA,CAC7B,QAAA,CAAS,aAAA,CAAc,eAAe,CAAA,CAE5C,KAAK,UAAA,CACH,OAAOV,EAAUU,CAAAA,CAAI,KAAA,CAAM,IAAA,CAAK8O,CAAAA,CAAE,KAAK,CAAC,CAAA,CAE1C,KAAK,UAAA,CACH,OAAO9O,CAAAA,CAAI,KAAA,CAAM,KAAA,CACbV,CAAAA,CAAUU,CAAAA,CAAI,KAAA,CAAM,MAAM8O,CAAAA,CAAE,KAAK,CAAC,CAAA,CAClC,QAAA,CAAS,aAAA,CAAc,aAAa,CAC5C,CACF,CACF,CAAC,EAcM,SAASiY,EAAAA,CAAermB,CAAAA,CAAqB,CAClD,IAAMqI,CAAAA,CAAQ7I,CAAAA,CAAsB,CAAE,MAAA,CAAQ,SAAU,CAAC,CAAA,CAEzD,OAAAQ,CAAAA,CACG,IAAA,CAAMb,CAAAA,EAAUkJ,CAAAA,CAAM,GAAA,CAAI,CAAE,MAAA,CAAQ,UAAA,CAAY,MAAAlJ,CAAM,CAAC,CAAC,CAAA,CACxD,KAAA,CAAOI,CAAAA,EAAU8I,CAAAA,CAAM,GAAA,CAAI,CAC1B,MAAA,CAAQ,UAAA,CACR,KAAA,CAAO9I,CAAAA,YAAiB,KAAA,CAAQA,CAAAA,CAAQ,IAAI,KAAA,CAAM,OAAOA,CAAK,CAAC,CACjE,CAAC,CAAC,CAAA,CAEG,IAAM8I,CAAAA,EACf,CC1EO,SAASie,EAAAA,CACdzhB,CAAAA,CACA0hB,CAAAA,CACgB,CAChB,OAAQthB,GAAS,CACXshB,CAAAA,CAAU,IAAA,EAAQthB,CAAAA,CAAE,MAAA,GAAWA,CAAAA,CAAE,aAAA,GACjCshB,CAAAA,CAAU,cAAA,EAAgBthB,CAAAA,CAAE,cAAA,EAAe,CAC3CshB,CAAAA,CAAU,eAAA,EAAiBthB,CAAAA,CAAE,eAAA,GAC7BshB,CAAAA,CAAU,wBAAA,EAA2BthB,CAAAA,CAAU,wBAAA,IAA2B,CAC9EJ,CAAAA,CAAQI,CAAC,CAAA,EACX,CACF,CASO,SAASuhB,EAAAA,CACdzkB,CAAAA,CACAwH,CAAAA,CACA1E,CAAAA,CACA0hB,CAAAA,CAA4B,EAAC,CACjB,CACZ,IAAME,CAAAA,CAAUH,EAAAA,CAAczhB,CAAAA,CAAS0hB,CAAS,CAAA,CAC1CG,CAAAA,CAA2C,CAC/C,IAAA,CAAMH,CAAAA,CAAU,IAAA,CAChB,OAAA,CAASA,CAAAA,CAAU,OAAA,CACnB,QAASA,CAAAA,CAAU,OACrB,CAAA,CAEA,OAAAxkB,CAAAA,CAAG,gBAAA,CAAiBwH,CAAAA,CAAOkd,CAAAA,CAA0BC,CAAe,CAAA,CAC7D,IAAM3kB,CAAAA,CAAG,mBAAA,CAAoBwH,CAAAA,CAAOkd,CAAAA,CAA0BC,CAAe,CACtF,CAcO,SAASC,EAAAA,CAAe5kB,CAAAA,CAG7B,CACA,IAAMyF,CAAAA,CAAQhI,CAAAA,CAAOuC,CAAAA,CAAG,WAAW,CAAA,CAC7BiH,CAAAA,CAASxJ,CAAAA,CAAOuC,CAAAA,CAAG,YAAY,CAAA,CAErC,OAAI,OAAO,cAAA,CAAmB,GAAA,EACX,IAAI,cAAA,CAAgBP,CAAAA,EAAY,CAC/C,IAAMC,CAAAA,CAAQD,CAAAA,CAAQ,CAAC,CAAA,CACnBC,CAAAA,GACF+F,CAAAA,CAAM,GAAA,CAAI/F,CAAAA,CAAM,YAAY,KAAK,CAAA,CACjCuH,CAAAA,CAAO,GAAA,CAAIvH,CAAAA,CAAM,WAAA,CAAY,MAAM,CAAA,EAEvC,CAAC,CAAA,CACQ,OAAA,CAAQM,CAAE,CAAA,CAGd,CACL,KAAA,CAAO,IAAMyF,CAAAA,GACb,MAAA,CAAQ,IAAMwB,CAAAA,EAChB,CACF,CAWO,SAAS4d,EAAAA,CAAW7kB,CAAAA,CAGzB,CACA,IAAMX,CAAAA,CAASW,CAAAA,GAAO,OAAO,MAAA,CAAW,GAAA,CAAc,OAAS,IAAA,CAAA,CACzD8kB,CAAAA,CAAUrnB,CAAAA,CAAOuC,CAAAA,CAAKA,CAAAA,CAAG,UAAA,CAAc,MAAA,EAAQ,OAAA,EAAW,CAAE,CAAA,CAC5D+kB,CAAAA,CAAUtnB,CAAAA,CAAOuC,CAAAA,CAAKA,CAAAA,CAAG,SAAA,CAAa,MAAA,EAAQ,SAAW,CAAE,CAAA,CAEjE,GAAIX,CAAAA,CAAQ,CACV,IAAMyD,CAAAA,CAAU,IAAM,CAChB9C,CAAAA,EACF8kB,CAAAA,CAAQ,GAAA,CAAI9kB,CAAAA,CAAG,UAAU,CAAA,CACzB+kB,CAAAA,CAAQ,IAAI/kB,CAAAA,CAAG,SAAS,CAAA,GAExB8kB,CAAAA,CAAQ,GAAA,CAAI,MAAA,CAAO,OAAO,CAAA,CAC1BC,EAAQ,GAAA,CAAI,MAAA,CAAO,OAAO,CAAA,EAE9B,CAAA,CACC1lB,CAAAA,CAAe,gBAAA,CAAiB,QAAA,CAAUyD,EAAS,CAAE,OAAA,CAAS,IAAK,CAAC,EACvE,CAGA,IAAMkiB,CAAAA,CAAeD,CAAAA,CAAQ,GAAA,CAC7BA,CAAAA,CAAQ,GAAA,CAAO3nB,CAAAA,EAAkB,CAC/B4nB,CAAAA,CAAa5nB,CAAK,EACd4C,CAAAA,CAAIA,CAAAA,CAAG,SAAA,CAAY5C,CAAAA,CAClB,MAAA,EAAQ,QAAA,CAAS,MAAA,CAAO,OAAA,CAASA,CAAK,EAC7C,CAAA,CAEA,IAAM6nB,CAAAA,CAAeH,CAAAA,CAAQ,GAAA,CAC7B,OAAAA,EAAQ,GAAA,CAAO1nB,CAAAA,EAAkB,CAC/B6nB,CAAAA,CAAa7nB,CAAK,CAAA,CACd4C,CAAAA,CAAIA,CAAAA,CAAG,UAAA,CAAa5C,CAAAA,CACnB,MAAA,EAAQ,QAAA,CAASA,CAAAA,CAAO,MAAA,CAAO,OAAO,EAC7C,EAEO,CAAE,OAAA,CAAA0nB,CAAAA,CAAS,OAAA,CAAAC,CAAQ,CAC5B,CAWO,SAASG,IAAqE,CACnF,OAAOznB,CAAAA,CAAiB,IAAI,CAC9B,CAUO,SAAS0nB,EAAAA,CAAahoB,EAAgC,CAC3D,OAAOM,CAAAA,CAAiB,IAAI,CAC9B,CAEO,SAAS2nB,EAAAA,CACdplB,CAAAA,CACAqlB,CAAAA,CACAjoB,GAAAA,CACM,CACN4C,CAAAA,CAAG,IAAA,CAAO,OAAO5C,GAAAA,EAAU,SAAWA,GAAAA,CAAQ,EAAA,CAC9C4C,CAAAA,CAAG,gBAAA,CAAiB,QAAA,CAAU,IAAM,CAC9BA,CAAAA,CAAG,OAAA,EAASqlB,CAAAA,CAAM,GAAA,CAAIjoB,GAAK,EACjC,CAAC,CAAA,CAEDqB,CAAAA,CAAO,IAAM,CACXuB,CAAAA,CAAG,OAAA,CAAUqlB,CAAAA,EAAM,GAAMjoB,IAC3B,CAAC,EACH,CAcO,SAASkoB,EAAAA,CACdtlB,CAAAA,CACAqS,CAAAA,CACAkN,GAAAA,CACY,CACZ,OAAO9gB,EAAO,IAAM,CACd8gB,GAAAA,EAAU,CACZvf,CAAAA,CAAG,SAAA,CAAU,GAAA,CAAIqS,CAAS,CAAA,CAE1BrS,CAAAA,CAAG,SAAA,CAAU,MAAA,CAAOqS,CAAS,EAEjC,CAAC,CACH,CAaO,SAASkT,EAAAA,CACdvlB,CAAAA,CACAC,CAAAA,CACY,CACZ,IAAMulB,CAAAA,CAAY,MAAA,CAAO,OAAA,CAAQvlB,CAAO,CAAA,CAAE,GAAA,CAAI,CAAC,CAACwlB,CAAAA,CAAKlG,CAAS,IAC5D+F,EAAAA,CAAUtlB,CAAAA,CAAIylB,CAAAA,CAAKlG,CAAS,CAC9B,CAAA,CACA,OAAO,IAAMiG,CAAAA,CAAU,OAAA,CAAStN,CAAAA,EAAMA,CAAAA,EAAG,CAC3C,CAcO,SAASwN,GACd1lB,CAAAA,CACAQ,CAAAA,CACApD,GAAAA,CACY,CACZ,IAAMuoB,CAAAA,CAAQnlB,CAAAA,CAAS,OAAA,CAAQ,QAAA,CAAW0T,CAAAA,EAAM,CAAA,CAAA,EAAIA,CAAAA,CAAE,WAAA,EAAa,CAAA,CAAE,CAAA,CAErE,OAAOzV,CAAAA,CAAO,IAAM,CAClB,IAAMiG,CAAAA,CAAItH,GAAAA,EAAM,CACZsH,CAAAA,EAAK,KACP1E,CAAAA,CAAG,KAAA,CAAM,cAAA,CAAe2lB,CAAK,CAAA,CAE7B3lB,CAAAA,CAAG,KAAA,CAAM,WAAA,CAAY2lB,EAAO,OAAOjhB,CAAAA,EAAM,QAAA,CAAW,CAAA,EAAGA,CAAC,CAAA,EAAA,CAAA,CAAO,MAAA,CAAOA,CAAC,CAAC,EAE5E,CAAC,CACH,CAaO,SAASkhB,EAAAA,CACd5lB,CAAAA,CACA2T,EACY,CACZ,IAAM6R,CAAAA,CAAY,MAAA,CAAO,OAAA,CAAQ7R,CAAM,CAAA,CAAE,GAAA,CAAI,CAAC,CAACC,CAAAA,CAAMiS,CAAO,CAAA,GAC1DH,EAAAA,CAAU1lB,CAAAA,CAAI4T,CAAAA,CAAMiS,CAAO,CAC7B,CAAA,CACA,OAAO,IAAML,CAAAA,CAAU,OAAA,CAAStN,CAAAA,EAAMA,CAAAA,EAAG,CAC3C,CCxQO,SAAS4N,EAAAA,CACdpK,CAAAA,CACgB,CAChB,OAAOA,CACT,CAgCO,SAASqK,EAAAA,CAAAA,GACX7O,CAAAA,CACS,CACZ,IAAIpY,CAAAA,CAA0B,EAAC,CACzBknB,GAAAA,CAAgC,EAAC,CAEvC,IAAA,IAAWC,CAAAA,IAAO/O,CAAAA,CACZ,OAAO+O,GAAQ,UAAA,CACjBD,GAAAA,CAAQ,IAAA,CAAKC,CAAG,CAAA,CACP,OAAOA,CAAAA,EAAQ,QAAA,EAAYA,CAAAA,GAAQ,IAAA,GAC5CnnB,CAAAA,CAAUmnB,CAAAA,CAAAA,CAId,GAAM,CACJ,KAAA,CAAAC,CAAAA,CAAQ,UACR,KAAA,CAAAC,CAAAA,CAAQ,KAAA,CACR,MAAA,CAAAC,CAAAA,CACA,IAAA,CAAAC,CACF,CAAA,CAAIvnB,CAAAA,CAEE6G,CAAAA,CAAS,CACb,OAAA,CAAS,IAAA,CACT,IAAI,MAAA,EAAS,CAAE,OAAOqgB,GAAAA,CAAQ,GAAA,CAAI3Z,CAAAA,EAAKA,CAAAA,EAAG,CAAG,CAAA,CAC7C,IAAI,KAAA,EAAQ,CAAE,OAAO2Z,GAAAA,CAAQ,MAAA,GAAW,CAAA,CAAIA,GAAAA,CAAQ,CAAC,GAAE,CAAIA,GAAAA,CAAQ,GAAA,CAAI3Z,CAAAA,EAAKA,CAAAA,EAAG,CAAG,CAAA,CAClF,MAAA6Z,CAAAA,CACA,OAAA,CAASF,GAAAA,CAAQ,MACnB,CAAA,CAEA,OAAArgB,CAAAA,CAAO,OAAA,CAAUlH,EAAO,IAAM,CAC5B,GAAI4nB,CAAAA,EAAQ,CAACA,CAAAA,EAAK,CAAG,OAErB,IAAMjI,CAAAA,CAAS4H,GAAAA,CAAQ,GAAA,CAAK3Z,CAAAA,EAAMA,CAAAA,EAAG,CAAA,CAEjC+Z,EACFA,CAAAA,CAAOF,CAAAA,CAAO,GAAG9H,CAAM,CAAA,CAEtB,OAAA,CAAgB+H,CAAK,CAAA,CAAE,CAAA,CAAA,EAAID,CAAK,CAAA,CAAA,CAAA,CAAK,GAAG9H,CAAM,EAEnD,CAAC,CAAA,CAEMzY,CACT,CAwCO,SAAS2gB,EAAAA,CACdrK,CAAAA,CACAnd,CAAAA,CAMI,EAAC,CACU,CACf,GAAM,CACJ,MAAA,CAAAynB,CAAAA,CAAS,MAAA,CACT,OAAA,CAAAC,CAAAA,CAAU,GACV,SAAA,CAAAC,CAAAA,CACA,OAAA,CAAA/oB,CAAAA,CACA,KAAA,CAAOgpB,CAAAA,CAAc,UAAA,CAAW,KAAA,CAAM,IAAA,CAAK,UAAU,CACvD,CAAA,CAAI5nB,CAAAA,CAEE6nB,CAAAA,CAAalpB,CAAAA,CAAO,KAAK,EACzBkI,CAAAA,CAASlI,CAAAA,CAAiB,IAAI,CAAA,CAC9BD,GAAAA,CAAQC,CAAAA,CAAqB,IAAI,CAAA,CAEvC,eAAempB,CAAAA,CAAOxS,CAAAA,CAA2C,CAC/DuS,CAAAA,CAAW,GAAA,CAAI,IAAI,CAAA,CACnBnpB,IAAM,GAAA,CAAI,IAAI,CAAA,CAEd,GAAI,CACF,IAAMqpB,CAAAA,CAAW,MAAMH,CAAAA,CAAYzK,CAAAA,CAAK,CACtC,MAAA,CAAAsK,CAAAA,CACA,OAAA,CAAS,CAAE,cAAA,CAAgB,mBAAoB,GAAGC,CAAQ,CAAA,CAC1D,IAAA,CAAM,IAAA,CAAK,SAAA,CAAUpS,CAAI,CAC3B,CAAC,CAAA,CAED,GAAI,CAACyS,CAAAA,CAAS,EAAA,CACZ,MAAM,IAAI,MAAM,CAAA,oBAAA,EAAuBA,CAAAA,CAAS,MAAM,CAAA,CAAE,CAAA,CAG1D,IAAMC,CAAAA,CAAM,MAAMD,EAAS,IAAA,EAAK,CAChC,OAAAlhB,CAAAA,CAAO,GAAA,CAAImhB,CAAG,CAAA,CACdH,CAAAA,CAAW,IAAI,CAAA,CAAK,CAAA,CACpBF,CAAAA,GAAYK,CAAG,CAAA,CACRA,CACT,CAAA,MAASnpB,CAAAA,CAAK,CACZ,IAAMuF,CAAAA,CAAIvF,CAAAA,YAAe,KAAA,CAAQA,CAAAA,CAAM,IAAI,KAAA,CAAM,OAAOA,CAAG,CAAC,CAAA,CAC5D,MAAAH,GAAAA,CAAM,GAAA,CAAI0F,CAAC,CAAA,CACXyjB,CAAAA,CAAW,GAAA,CAAI,KAAK,CAAA,CACpBjpB,CAAAA,GAAUwF,CAAC,CAAA,CACLA,CACR,CACF,CAEA,OAAO,CACL,GAAA,CAAA+Y,CAAAA,CACA,MAAA,CAAAsK,CAAAA,CACA,UAAA,CAAY,IAAMI,CAAAA,EAAW,CAC7B,MAAA,CAAQ,IAAMhhB,CAAAA,EAAO,CACrB,KAAA,CAAO,IAAMnI,GAAAA,EAAM,CACnB,MAAA,CAAOupB,CAAAA,CAAqC,CAC1C,OAAQ7jB,CAAAA,EAAa,CACnBA,EAAE,cAAA,EAAe,CACjB,IAAM8jB,CAAAA,CAAO9jB,CAAAA,CAAE,MAAA,CACT+jB,CAAAA,CAAW,IAAI,SAASD,CAAI,CAAA,CAC5B5S,CAAAA,CAAgC,CAAE,GAAG2S,CAAU,CAAA,CACrDE,CAAAA,CAAS,OAAA,CAAQ,CAAC7pB,CAAAA,CAAO2E,CAAAA,GAAQ,CAAEqS,CAAAA,CAAKrS,CAAG,CAAA,CAAI3E,EAAO,CAAC,CAAA,CACvDwpB,CAAAA,CAAOxS,CAAI,EACb,CACF,CAAA,CACA,MAAA,CAAAwS,CACF,CACF,CA6BO,SAASM,EAAAA,CAAgB7lB,CAAAA,CAAyB,EAAC,CAAe,CACvE,GAAI,OAAO,MAAA,CAAW,GAAA,CAAa,OAAO,IAAM,CAAC,CAAA,CAEjD,GAAM,CAAE,SAAA,CAAA8lB,CAAAA,CAAY,gBAAA,CAAkB,OAAA,CAAAC,CAAAA,CAAU,CAAC,SAAU,OAAO,CAAE,CAAA,CAAI/lB,CAAAA,CAExE,SAASgmB,CAAAA,EAAgC,CACvC,IAAMC,EAAyB,CAC7B,OAAA,CAAS,MAAA,CAAO,OAAA,CAChB,OAAA,CAAS,MAAA,CAAO,OAAA,CAChB,KAAA,CAAO,EAAC,CACR,SAAA,CAAW,IAAA,CAAK,GAAA,EAClB,CAAA,CAEA,OAAIF,CAAAA,CAAQ,QAAA,CAAS,OAAO,CAAA,EAC1B,QAAA,CAAS,gBAAA,CAAiB,UAAU,CAAA,CAAE,OAAA,CAASJ,GAAS,CACtD,IAAMO,CAAAA,CAASP,CAAAA,CACT5S,CAAAA,CAA+B,EAAC,CACtC,IAAI,QAAA,CAASmT,CAAM,CAAA,CAAE,OAAA,CAAQ,CAACnqB,CAAAA,CAAO2E,CAAAA,GAAQ,CAC3CqS,EAAKrS,CAAG,CAAA,CAAI,MAAA,CAAO3E,CAAK,EAC1B,CAAC,CAAA,CACDkqB,CAAAA,CAAS,KAAA,CAAMC,CAAAA,CAAO,EAAE,CAAA,CAAInT,EAC9B,CAAC,CAAA,CAGIkT,CACT,CAEA,SAASE,CAAAA,CAAgBF,CAAAA,CAA8B,CAOrD,GANIF,CAAAA,CAAQ,QAAA,CAAS,QAAQ,CAAA,EAC3B,qBAAA,CAAsB,IAAM,CAC1B,MAAA,CAAO,QAAA,CAASE,CAAAA,CAAS,OAAA,CAASA,EAAS,OAAO,EACpD,CAAC,CAAA,CAGCF,CAAAA,CAAQ,QAAA,CAAS,OAAO,CAAA,CAC1B,IAAA,GAAW,CAACK,CAAAA,CAAQrT,CAAI,CAAA,GAAK,MAAA,CAAO,OAAA,CAAQkT,CAAAA,CAAS,KAAK,CAAA,CAAG,CAC3D,IAAMN,CAAAA,CAAO,QAAA,CAAS,cAAA,CAAeS,CAAM,CAAA,CAC3C,GAAKT,CAAAA,CACL,IAAA,GAAW,CAACjlB,CAAAA,CAAK3E,CAAK,CAAA,GAAK,MAAA,CAAO,QAAQgX,CAAI,CAAA,CAAG,CAC/C,IAAMZ,CAAAA,CAAQwT,CAAAA,CAAK,QAAA,CAAS,SAAA,CAAUjlB,CAAG,CAAA,CACrCyR,CAAAA,GAAOA,CAAAA,CAAM,KAAA,CAAQpW,CAAAA,EAC3B,CACF,CAEJ,CAGA,IAAMsqB,CAAAA,CAAU,IAAM,CAAA,EAAGP,CAAS,CAAA,CAAA,EAAI,MAAA,CAAO,QAAA,CAAS,QAAQ,CAAA,CAAA,CAE9D,SAASQ,CAAAA,EAAa,CACpB,GAAI,CACF,IAAML,CAAAA,CAAWD,GAAgB,CACjC,cAAA,CAAe,OAAA,CAAQK,CAAAA,EAAQ,CAAG,IAAA,CAAK,SAAA,CAAUJ,CAAQ,CAAC,EAC5D,CAAA,KAAQ,CAAqB,CAC/B,CAEA,SAASM,CAAAA,EAAgB,CACvB,GAAI,CACF,IAAMvhB,CAAAA,CAAM,cAAA,CAAe,OAAA,CAAQqhB,CAAAA,EAAS,CAAA,CAC5C,GAAIrhB,CAAAA,CAAK,CACP,IAAMihB,CAAAA,CAAW,IAAA,CAAK,KAAA,CAAMjhB,CAAG,CAAA,CAE3B,IAAA,CAAK,GAAA,EAAI,CAAIihB,CAAAA,CAAS,SAAA,CAAY,IAAA,CAAU,GAAA,EAC9CE,CAAAA,CAAgBF,CAAQ,EAE5B,CACF,CAAA,KAAQ,CAAQ,CAClB,CAGA,cAAO,gBAAA,CAAiB,cAAA,CAAgBK,CAAI,CAAA,CAC5C,MAAA,CAAO,gBAAA,CAAiB,UAAA,CAAY,IAAM,CACxC,qBAAA,CAAsBC,CAAO,EAC/B,CAAC,CAAA,CAGG,WAAA,CAAY,gBAAA,CAAiB,YAAY,CAAA,CAAE,CAAC,CAAA,EAAG,IAAA,GAAS,cAAA,EAC1D,qBAAA,CAAsBA,CAAO,CAAA,CAGxB,IAAM,CACX,MAAA,CAAO,mBAAA,CAAoB,cAAA,CAAgBD,CAAI,EACjD,CACF,CCpQO,SAASE,EAAAA,CACdhkB,CAAAA,CACA6W,CAAAA,CACA5b,GAAAA,CAAwB,EAAC,CACb,CACZ,GAAM,CAAE,SAAA,CAAAgpB,CAAAA,CAAY,KAAA,CAAO,IAAA,CAAAC,CAAAA,CAAO,KAAA,CAAO,SAAU5G,CAAAA,CAAY,IAAA,CAAA6G,CAAAA,CAAO,KAAM,CAAA,CAAIlpB,GAAAA,CAE1EmpB,CAAAA,CAAU,KAAA,CAAM,OAAA,CAAQpkB,CAAM,CAAA,CAC9BmiB,CAAAA,CAAUiC,CAAAA,CAAUpkB,CAAAA,CAAS,CAACA,CAAM,EAEtCqkB,CAAAA,CAAmBlC,CAAAA,CAAQ,GAAA,CAAI,IAAG,CAAA,CAAY,CAAA,CAC9CmC,CAAAA,CAAU,IAAA,CACV9G,EAAsD,IAAA,CACtD9hB,CAAAA,CAAW,KAAA,CACX6oB,CAAAA,CAAqC,IAAA,CAEnCxmB,CAAAA,CAAU,IAAM,CACpBrC,EAAW,IAAA,CACP8hB,CAAAA,EAAe,YAAA,CAAaA,CAAa,CAAA,CAC7C+G,CAAAA,KACF,CAAA,CAEAA,CAAAA,CAAgB3pB,CAAAA,CAAO,IAAM,CAE3B,IAAM4pB,CAAAA,CAAYrC,CAAAA,CAAQ,GAAA,CAAK3Z,GAAMA,CAAAA,EAAG,CAAA,CAExC,GAAI8b,CAAAA,CAAS,CACXA,CAAAA,CAAU,KAAA,CACVD,CAAAA,CAAYF,CAAAA,CAAOK,CAAAA,CAAU,GAAA,CAAIC,EAAS,CAAA,CAAI,CAAC,GAAGD,CAAS,CAAA,CAEvDP,CAAAA,EACFS,CAAAA,CAAaF,CAAAA,CAAWrC,CAAAA,CAAQ,GAAA,CAAI,IAAG,CAAA,CAAY,CAAC,CAAA,CAEtD,MACF,CAOA,GAAI,EAJYgC,CAAAA,CACZK,CAAAA,CAAU,KAAK,CAAC3jB,CAAAA,CAAGqG,CAAAA,GAAM,CAACyd,EAAAA,CAAU9jB,CAAAA,CAAGwjB,CAAAA,CAAUnd,CAAC,CAAC,CAAC,CAAA,CACpDsd,CAAAA,CAAU,IAAA,CAAK,CAAC3jB,CAAAA,CAAGqG,CAAAA,GAAM,CAAC,MAAA,CAAO,EAAA,CAAGrG,CAAAA,CAAGwjB,CAAAA,CAAUnd,CAAC,CAAC,CAAC,CAAA,CAAA,CAE1C,OAEd,IAAM0d,CAAAA,CAAa,CAAC,GAAGP,CAAS,CAAA,CAChCA,CAAAA,CAAYF,EAAOK,CAAAA,CAAU,GAAA,CAAIC,EAAS,CAAA,CAAI,CAAC,GAAGD,CAAS,CAAA,CAE3DE,CAAAA,CAAaF,CAAAA,CAAWI,CAAU,EACpC,CAAC,CAAA,CAED,SAASF,CAAAA,CAAaG,EAAgBC,CAAAA,CAAsB,CAC1D,GAAIppB,CAAAA,CAAU,OAEd,IAAMqpB,CAAAA,CAAS,IAAM,CACfb,CAAAA,GAGFxoB,CAAAA,CAAW,IAAA,CACX,cAAA,CAAeqC,CAAO,CAAA,CAAA,CAGpBqmB,CAAAA,CACFvN,EAASgO,CAAAA,CAASC,CAAO,CAAA,CAEzBjO,CAAAA,CAASgO,CAAAA,CAAQ,CAAC,CAAA,CAAGC,CAAAA,CAAQ,CAAC,CAAC,EAEnC,CAAA,CAEIxH,CAAAA,EAAcA,CAAAA,CAAa,CAAA,EACzBE,CAAAA,EAAe,YAAA,CAAaA,CAAa,CAAA,CAC7CA,CAAAA,CAAgB,UAAA,CAAWuH,CAAAA,CAAQzH,CAAU,CAAA,EAE7CyH,CAAAA,GAEJ,CAEA,OAAOhnB,CACT,CAeO,SAASinB,EAAAA,CACdhlB,CAAAA,CACA6W,CAAAA,CACY,CACZ,OAAOmN,EAAAA,CAAMhkB,CAAAA,CAAQ6W,CAAAA,CAAU,CAAE,IAAA,CAAM,IAAK,CAAC,CAC/C,CAeO,SAASoO,EAAAA,CACdjlB,CAAAA,CACA6W,CAAAA,CACAtX,CAAAA,CACY,CACZ,OAAOykB,EAAAA,CAAMhkB,CAAAA,CAAQ6W,CAAAA,CAAU,CAAE,QAAA,CAAUtX,CAAG,CAAC,CACjD,CAMA,SAASklB,EAAAA,CAAalrB,CAAAA,CAAa,CACjC,GAAIA,CAAAA,GAAU,IAAA,EAAQ,OAAOA,CAAAA,EAAU,QAAA,CAAU,OAAOA,CAAAA,CACxD,GAAI,CACF,OAAO,IAAA,CAAK,MAAM,IAAA,CAAK,SAAA,CAAUA,CAAK,CAAC,CACzC,CAAA,KAAQ,CACN,OAAOA,CACT,CACF,CAEA,SAASorB,EAAAA,CAAUjjB,CAAAA,CAAYC,CAAAA,CAAqB,CAClD,GAAI,MAAA,CAAO,EAAA,CAAGD,CAAAA,CAAGC,CAAC,CAAA,CAAG,OAAO,KAAA,CAC5B,GAAID,IAAM,IAAA,EAAQC,CAAAA,GAAM,IAAA,EAAQ,OAAOD,CAAAA,EAAM,QAAA,EAAY,OAAOC,CAAAA,EAAM,QAAA,CAAU,OAAO,MAAA,CACvF,GAAI,CACF,OAAO,IAAA,CAAK,SAAA,CAAUD,CAAC,CAAA,GAAM,IAAA,CAAK,SAAA,CAAUC,CAAC,CAC/C,CAAA,KAAQ,CACN,OAAO,MACT,CACF,CCnLA,IAAMujB,EAAAA,CAAa,MAAA,CAAO,YAAY,CAAA,CAChCC,GAAU,MAAA,CAAO,SAAS,CAAA,CAmBzB,SAASC,EAAAA,CAA6BhjB,CAAAA,CAAgC,CAC3E,IAAMijB,EAAUzrB,CAAAA,CAAO,CAAC,CAAA,CAClB4I,CAAAA,CAAM,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,SAAA,CAAUJ,CAAY,CAAC,CAAA,CAEnD,SAASkjB,CAAAA,EAAe,CACtBD,CAAAA,CAAQ,MAAA,CAAQxkB,CAAAA,EAAMA,CAAAA,CAAI,CAAC,EAC7B,CAEA,SAAS0kB,CAAAA,CAA8B/pB,CAAAA,CAAWiX,CAAAA,CAAiB,EAAC,CAAkB,CACpF,OAAO,IAAI,KAAA,CAAMjX,CAAAA,CAAQ,CACvB,GAAA,CAAIgX,CAAAA,CAAKzC,CAAAA,CAAMyV,CAAAA,CAAU,CAEvB,GAAIzV,CAAAA,GAAS,MAAA,CAAQ,OAAO,KAAK,KAAA,CAAM,IAAA,CAAK,SAAA,CAAUvN,CAAG,CAAC,CAAA,CAC1D,GAAIuN,CAAAA,GAAS,SAAA,CAAW,OAAO,KAAQsV,CAAAA,EAAQ,CAAU,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,UAAU7iB,CAAG,CAAC,CAAA,CAAA,CACvF,GAAIuN,CAAAA,GAASmV,EAAAA,CAAY,OAAOG,CAAAA,CAChC,GAAItV,CAAAA,GAASoV,EAAAA,CAAS,OAAO3iB,CAAAA,CAE7B,IAAMjJ,CAAAA,CAAQ,OAAA,CAAQ,IAAIiZ,CAAAA,CAAKzC,CAAAA,CAAMyV,CAAQ,CAAA,CAM7C,OAHAH,CAAAA,EAAQ,CAGJ9rB,CAAAA,GAAU,IAAA,EAAQ,OAAOA,CAAAA,EAAU,QAAA,CAC9BgsB,CAAAA,CAAYhsB,CAAAA,CAAO,CAAC,GAAGkZ,EAAM,MAAA,CAAO1C,CAAI,CAAC,CAAC,CAAA,CAG5CxW,CACT,CAAA,CAEA,GAAA,CAAIiZ,CAAAA,CAAKzC,CAAAA,CAAMxW,CAAAA,CAAO,CACpB,IAAMuI,CAAAA,CAAS,OAAA,CAAQ,GAAA,CAAI0Q,EAAKzC,CAAAA,CAAMxW,CAAK,CAAA,CAC3C,OAAA+rB,CAAAA,EAAO,CACAxjB,CACT,CAAA,CAEA,cAAA,CAAe0Q,CAAAA,CAAKzC,CAAAA,CAAM,CACxB,IAAMjO,CAAAA,CAAS,OAAA,CAAQ,cAAA,CAAe0Q,EAAKzC,CAAI,CAAA,CAC/C,OAAAuV,CAAAA,EAAO,CACAxjB,CACT,CACF,CAAC,CACH,CAGA,OACqByjB,CAAAA,CAAY/iB,CAAG,CAKtC,CAKO,SAASijB,EAAAA,CAASC,CAAAA,CAAyB,CAChD,OAAQA,CAAAA,CAAc,IAAA,EAAQA,CAChC,CAKO,SAASC,EAAAA,CAAapsB,CAAAA,CAAyB,CACpD,GAAIA,CAAAA,GAAU,MAAQ,OAAOA,CAAAA,EAAU,QAAA,CAAU,OAAO,MAAA,CACxD,GAAI,CACF,OAAQA,CAAAA,CAAc2rB,EAAU,CAAA,GAAM,KAAA,CACxC,CAAA,KAAQ,CACN,OAAO,MACT,CACF,CC1DO,SAASU,EAAAA,EAA4E,CAC1F,IAAMC,CAAAA,CAAY,IAAI,GAAA,CAEtB,SAASC,CAAAA,CAAOniB,CAAAA,CAAkC,CAChD,IAAIoiB,CAAAA,CAAMF,CAAAA,CAAU,GAAA,CAAIliB,CAAK,CAAA,CAC7B,OAAKoiB,CAAAA,GACHA,CAAAA,CAAM,IAAI,GAAA,CACVF,CAAAA,CAAU,GAAA,CAAIliB,CAAAA,CAAOoiB,CAAG,CAAA,CAAA,CAEnBA,CACT,CAEA,OAAO,CACL,EAAA,CAA+BpiB,EAAU1E,CAAAA,CAAyC,CAChF,OAAA6mB,CAAAA,CAAOniB,CAAK,CAAA,CAAE,GAAA,CAAI1E,CAAuB,CAAA,CAClC,IAAM6mB,CAAAA,CAAOniB,CAAK,CAAA,CAAE,MAAA,CAAO1E,CAAuB,CAC3D,EAEA,IAAA,CAAiC0E,CAAAA,CAAU1E,CAAAA,CAAyC,CAClF,IAAM2P,CAAAA,CAA+B2B,CAAAA,EAAS,CAC5CuV,CAAAA,CAAOniB,CAAK,CAAA,CAAE,MAAA,CAAOiL,CAAuB,CAAA,CAC5C3P,CAAAA,CAAQsR,CAAI,EACd,CAAA,CACA,OAAAuV,CAAAA,CAAOniB,CAAK,CAAA,CAAE,GAAA,CAAIiL,CAAuB,CAAA,CAClC,IAAMkX,CAAAA,CAAOniB,CAAK,CAAA,CAAE,MAAA,CAAOiL,CAAuB,CAC3D,CAAA,CAEA,KAAiCjL,CAAAA,CAAU4M,CAAAA,CAAkB,CAC3D,IAAMwV,CAAAA,CAAMF,CAAAA,CAAU,GAAA,CAAIliB,CAAK,EAC/B,GAAIoiB,CAAAA,CACF,IAAA,IAAW9mB,CAAAA,IAAW,KAAA,CAAM,IAAA,CAAK8mB,CAAG,CAAA,CAClC9mB,EAAQsR,CAAI,EAGlB,CAAA,CAEA,GAAA,CAAgC5M,CAAAA,CAAU1E,CAAAA,CAAmC,CAC3E6mB,CAAAA,CAAOniB,CAAK,CAAA,CAAE,MAAA,CAAO1E,CAAuB,EAC9C,CAAA,CAEA,KAAA,CAAM0E,CAAAA,CAAgC,CAChCA,CAAAA,CACFkiB,CAAAA,CAAU,MAAA,CAAOliB,CAAK,CAAA,CAEtBkiB,CAAAA,CAAU,KAAA,GAEd,CAAA,CAEA,aAAA,CAAcliB,CAAAA,CAAiC,CAC7C,OAAOkiB,CAAAA,CAAU,GAAA,CAAIliB,CAAK,GAAG,IAAA,EAAQ,CACvC,CAAA,CAEA,YAAA,CAAaA,CAAAA,CAAkC,CAC7C,OAAA,CAAQkiB,CAAAA,CAAU,GAAA,CAAIliB,CAAK,CAAA,EAAG,IAAA,EAAQ,CAAA,EAAK,CAC7C,CACF,CACF,CAMA,IAAIqiB,EAAAA,CAAkC,IAAA,CAe/B,SAASC,EAAAA,EAA4E,CAC1F,OAAKD,EAAAA,GACHA,EAAAA,CAAYJ,EAAAA,EAAkB,CAAA,CAEzBI,EACT,CCpIA,IAAME,EAAAA,CAAY,IAAI,IAAI,CACxB,GAAA,CAAK,MAAA,CAAQ,SAAA,CAAW,SAAA,CAAW,OAAA,CAAS,GAAA,CAAK,KAAA,CAAO,KAAA,CACxD,YAAA,CAAc,IAAA,CAAM,SAAA,CAAW,MAAA,CAAQ,MAAA,CAAQ,KAAA,CAAO,UAAA,CACtD,KAAM,KAAA,CAAO,SAAA,CAAW,KAAA,CAAO,KAAA,CAAO,IAAA,CAAM,IAAA,CAAM,IAAA,CAAM,YAAA,CACxD,QAAA,CAAU,QAAA,CAAU,IAAA,CAAM,IAAA,CAAM,IAAA,CAAM,IAAA,CAAM,IAAA,CAAM,IAAA,CAAM,SACxD,IAAA,CAAM,GAAA,CAAK,KAAA,CAAO,KAAA,CAAO,KAAA,CAAO,IAAA,CAAM,MAAA,CAAQ,MAAA,CAAQ,KAAA,CAAO,IAAA,CAC7D,GAAA,CAAK,KAAA,CAAO,GAAA,CAAK,IAAA,CAAM,IAAA,CAAM,MAAA,CAAQ,IAAK,MAAA,CAAQ,SAAA,CAAW,OAAA,CAC7D,MAAA,CAAQ,QAAA,CAAU,KAAA,CAAO,SAAA,CAAW,KAAA,CAAO,QAAS,OAAA,CAAS,IAAA,CAC7D,OAAA,CAAS,IAAA,CAAM,OAAA,CAAS,MAAA,CAAQ,IAAA,CAAM,GAAA,CAAK,KAAM,KAAA,CAAO,KAC1D,CAAC,CAAA,CAGKC,EAAAA,CAAa,IAAI,GAAA,CAAI,CACzB,KAAA,CAAO,OAAA,CAAS,KAAA,CAAO,MAAA,CAAQ,IAAA,CAAM,MAAA,CAAQ,MAAA,CAAQ,KAAA,CACrD,MAAO,OAAA,CAAS,UAAA,CAAY,QAAA,CAAU,OAAA,CAAS,MAAA,CAAQ,OAAA,CACvD,QAAA,CAAU,SAAA,CAAW,SAAA,CAAW,OAAA,CAAS,SAAA,CAAW,UACtD,CAAC,CAAA,CAGKC,EAAAA,CAAsB,+BAAA,CAGtBC,GAAkB,MAAA,CA8BjB,SAASC,EAAAA,CAASppB,CAAAA,CAAcjC,CAAAA,CAA2B,EAAC,CAAW,CAC5E,GAAI,OAAO,QAAA,CAAa,GAAA,CAEtB,OAAOiC,CAAAA,CAAK,OAAA,CAAQ,UAAA,CAAY,EAAE,CAAA,CAGpC,GAAM,CACJ,SAAA,CAAAqpB,CAAAA,CAAY,EAAC,CACb,UAAA,CAAAC,EAAa,EAAC,CACd,cAAA,CAAAC,CAAAA,CAAiB,IAAA,CACjB,cAAA,CAAAC,CAAAA,CAAiB,IAAA,CACjB,WAAAC,CAAAA,CAAa,KAAA,CACb,SAAA,CAAAC,CAAAA,CACA,UAAA,CAAAC,CACF,CAAA,CAAI5rB,CAAAA,CAEE6rB,CAAAA,CAAc,IAAI,GAAA,CAAI,CAAC,GAAGZ,EAAAA,CAAW,GAAGK,CAAS,CAAC,CAAA,CAClDQ,CAAAA,CAAe,IAAI,GAAA,CAAI,CAAC,GAAGZ,EAAAA,CAAY,GAAGK,CAAU,CAAC,CAAA,CAEtDG,CAAAA,EAAYI,CAAAA,CAAa,MAAA,CAAO,OAAO,CAAA,CAG5C,IAAMC,CAAAA,CAAM,IAAI,SAAA,EAAU,CAAE,eAAA,CAAgB9pB,CAAAA,CAAM,WAAW,CAAA,CAC7D,OAAA+pB,EAAAA,CAAaD,CAAAA,CAAI,IAAA,CAAMF,CAAAA,CAAaC,CAAAA,CAAcN,CAAAA,CAAgBC,CAAAA,CAAgBE,EAAWC,CAAU,CAAA,CAEhGG,CAAAA,CAAI,IAAA,CAAK,SAClB,CAEA,SAASC,EAAAA,CACP5rB,EACAyrB,CAAAA,CACAC,CAAAA,CACAN,CAAAA,CACAC,CAAAA,CACAE,CAAAA,CACAC,CAAAA,CACM,CACN,IAAMK,EAAW,KAAA,CAAM,IAAA,CAAK7rB,CAAAA,CAAK,UAAU,CAAA,CAE3C,IAAA,IAAW8rB,CAAAA,IAASD,CAAAA,CAClB,GAAIC,CAAAA,CAAM,QAAA,GAAa,IAAA,CAAK,YAAA,CAAc,CACxC,IAAMhrB,CAAAA,CAAKgrB,EACL/rB,CAAAA,CAAMe,CAAAA,CAAG,OAAA,CAAQ,WAAA,EAAY,CAKnC,GAAI,EAFcyqB,CAAAA,CAAYA,CAAAA,CAAUxrB,CAAG,CAAA,CAAI0rB,CAAAA,CAAY,GAAA,CAAI1rB,CAAG,CAAA,CAAA,CAElD,CAEd,IAAMuH,CAAAA,CAAO,QAAA,CAAS,cAAA,CAAexG,CAAAA,CAAG,WAAA,EAAe,EAAE,CAAA,CACzDd,CAAAA,CAAK,YAAA,CAAasH,CAAAA,CAAMwkB,CAAK,CAAA,CAC7B,QACF,CAGA,IAAMC,CAAAA,CAAQ,MAAM,IAAA,CAAKjrB,CAAAA,CAAG,UAAU,CAAA,CACtC,IAAA,IAAWgb,CAAAA,IAAQiQ,CAAAA,CAAO,CACxB,IAAM9tB,CAAAA,CAAO6d,CAAAA,CAAK,IAAA,CAAK,WAAA,EAAY,CAC7B5d,CAAAA,CAAQ4d,CAAAA,CAAK,MAGnB,GAAIkP,EAAAA,CAAgB,IAAA,CAAK/sB,CAAI,CAAA,CAAG,CAC9B6C,CAAAA,CAAG,eAAA,CAAgBgb,CAAAA,CAAK,IAAI,CAAA,CAC5B,QACF,CAGA,GAAI,EAAA7d,CAAAA,CAAK,WAAW,OAAO,CAAA,EAAKmtB,CAAAA,CAAAA,EAC5B,EAAAntB,CAAAA,CAAK,UAAA,CAAW,OAAO,CAAA,EAAKotB,CAAAA,CAAAA,CAGhC,CAAA,GAAIG,CAAAA,EAAc,CAACA,CAAAA,CAAWvtB,CAAAA,CAAMC,CAAAA,CAAO6B,CAAG,EAAG,CAC/Ce,CAAAA,CAAG,eAAA,CAAgBgb,CAAAA,CAAK,IAAI,CAAA,CAC5B,QACF,CAGA,GAAI,CAAC4P,CAAAA,CAAa,GAAA,CAAIztB,CAAI,CAAA,CAAG,CAC3B6C,CAAAA,CAAG,gBAAgBgb,CAAAA,CAAK,IAAI,CAAA,CAC5B,QACF,CAGA,GAAA,CAAK7d,CAAAA,GAAS,MAAA,EAAUA,IAAS,KAAA,GAAU8sB,EAAAA,CAAoB,IAAA,CAAK7sB,CAAK,CAAA,CAAG,CAC1E4C,CAAAA,CAAG,eAAA,CAAgBgb,EAAK,IAAI,CAAA,CAC5B,QACF,CAAA,CACF,CAGA8P,EAAAA,CAAa9qB,CAAAA,CAAI2qB,CAAAA,CAAaC,CAAAA,CAAcN,CAAAA,CAAgBC,CAAAA,CAAgBE,CAAAA,CAAWC,CAAU,EACnG,CAEJ,CAKO,SAASQ,EAAAA,CAAWjX,CAAAA,CAAqB,CAC9C,OAAOA,CAAAA,CACJ,OAAA,CAAQ,IAAA,CAAM,OAAO,CAAA,CACrB,OAAA,CAAQ,IAAA,CAAM,MAAM,CAAA,CACpB,OAAA,CAAQ,IAAA,CAAM,MAAM,EACpB,OAAA,CAAQ,IAAA,CAAM,QAAQ,CAAA,CACtB,OAAA,CAAQ,IAAA,CAAM,OAAO,CAC1B,CAUO,SAASkX,EAAAA,CAAenrB,CAAAA,CAAiBlB,CAAAA,CAAmD,CACjG,OAAQiC,CAAAA,EAAiB,CACvBf,CAAAA,CAAG,SAAA,CAAYmqB,EAAAA,CAASppB,CAAAA,CAAMjC,CAAO,EACvC,CACF,CAgCO,SAASssB,EAAAA,CAAY/pB,CAAAA,CAAoB,EAAC,CAAW,CAc1D,IAAMgqB,CAAAA,CAAa,CAAE,GAbsB,CACzC,aAAA,CAAe,CAAC,QAAQ,CAAA,CACxB,YAAA,CAAc,CAAC,QAAQ,CAAA,CACvB,WAAA,CAAa,CAAC,QAAA,CAAU,iBAAiB,CAAA,CACzC,SAAA,CAAW,CAAC,QAAA,CAAU,OAAA,CAAS,QAAQ,CAAA,CACvC,UAAA,CAAY,CAAC,QAAA,CAAU,QAAQ,CAAA,CAC/B,aAAA,CAAe,CAAC,QAAQ,CAAA,CACxB,iBAAA,CAAmB,CAAC,QAAQ,EAC5B,UAAA,CAAY,CAAC,QAAQ,CAAA,CACrB,aAAA,CAAe,CAAC,QAAQ,CAAA,CACxB,YAAA,CAAc,CAAC,QAAQ,CACzB,CAAA,CAEkC,GAAGhqB,CAAAA,CAAO,UAAW,EAGvD,GAAIA,CAAAA,CAAO,KAAA,CAAO,CAChB,IAAMiqB,CAAAA,CAAa,CAAA,OAAA,EAAUjqB,CAAAA,CAAO,KAAK,CAAA,CAAA,CAAA,CACrCgqB,CAAAA,CAAW,YAAY,CAAA,EACzBA,CAAAA,CAAW,YAAY,CAAA,CAAE,IAAA,CAAKC,CAAU,CAAA,CAEtCD,CAAAA,CAAW,WAAW,CAAA,EACxBA,CAAAA,CAAW,WAAW,CAAA,CAAE,IAAA,CAAKC,CAAU,EAE3C,CAGA,OAAIjqB,CAAAA,CAAO,SAAA,GACTgqB,CAAAA,CAAW,YAAY,EAAI,CAAChqB,CAAAA,CAAO,SAAS,CAAA,CAAA,CAGvC,MAAA,CAAO,OAAA,CAAQgqB,CAAU,CAAA,CAC7B,GAAA,CAAI,CAAC,CAACtpB,CAAAA,CAAKqc,CAAM,CAAA,GAAM,CAAA,EAAGrc,CAAG,IAAIqc,CAAAA,CAAO,IAAA,CAAK,GAAG,CAAC,CAAA,CAAE,CAAA,CACnD,IAAA,CAAK,IAAI,CACd,CAKO,SAASmN,EAAAA,CAAiBlqB,CAAAA,CAAoB,EAAC,CAAW,CAC/D,OAAOA,CAAAA,CAAO,UAAA,CACV,qCAAA,CACA,yBACN,CAsCO,SAASmqB,EAAAA,CAAwBnqB,CAAAA,CAAgC,EAAC,CAA2B,CAClG,IAAMmlB,CAAAA,CAAkC,EAAC,CAGzC,GAAInlB,EAAO,GAAA,GAAQ,KAAA,CAAO,CACxB,IAAMoqB,CAAAA,CAAYpqB,CAAAA,CAAO,GAAA,EAAO,EAAC,CACjCmlB,CAAAA,CAAQ+E,EAAAA,CAAiBE,CAAS,CAAC,CAAA,CAAIL,EAAAA,CAAYK,CAAS,EAC9D,CAgBA,GAbIpqB,CAAAA,CAAO,YAAA,GAAiB,KAAA,GAC1BmlB,CAAAA,CAAQ,iBAAiB,CAAA,CAAInlB,CAAAA,CAAO,YAAA,EAAgB,MAAA,CAAA,CAIlDA,CAAAA,CAAO,kBAAA,GAAuB,KAAA,GAChCmlB,CAAAA,CAAQ,wBAAwB,EAAI,SAAA,CAAA,CAItCA,CAAAA,CAAQ,kBAAkB,CAAA,CAAInlB,CAAAA,CAAO,aAAA,CAAgB,eAAA,CAAkB,GAAA,CAGnEA,CAAAA,CAAO,IAAA,GAAS,KAAA,CAAO,CACzB,IAAMqqB,CAAAA,CAAOrqB,CAAAA,CAAO,IAAA,EAAQ,CAAE,MAAA,CAAQ,OAAA,CAAU,iBAAA,CAAmB,IAAK,CAAA,CACpEjE,CAAAA,CAAQ,CAAA,QAAA,EAAWsuB,CAAAA,CAAK,MAAM,CAAA,CAAA,CAC9BA,CAAAA,CAAK,iBAAA,GAAmBtuB,CAAAA,EAAS,qBAAA,CAAA,CACjCsuB,CAAAA,CAAK,OAAA,GAAStuB,CAAAA,EAAS,aAC3BopB,CAAAA,CAAQ,2BAA2B,CAAA,CAAIppB,EACzC,CAQA,GALIiE,CAAAA,CAAO,cAAA,GAAmB,KAAA,GAC5BmlB,CAAAA,CAAQ,iBAAiB,CAAA,CAAInlB,CAAAA,CAAO,cAAA,EAAkB,iCAAA,CAAA,CAIpDA,CAAAA,CAAO,oBAAsB,KAAA,CAAO,CACtC,IAAMsqB,CAAAA,CAAStqB,CAAAA,CAAO,iBAAA,EAAqB,CACzC,MAAA,CAAQ,EAAC,CACT,UAAA,CAAY,EAAC,CACb,WAAA,CAAa,EAAC,CACd,QAAW,EACb,CAAA,CACAmlB,CAAAA,CAAQ,oBAAoB,CAAA,CAAI,MAAA,CAAO,OAAA,CAAQmF,CAAM,CAAA,CAClD,GAAA,CAAI,CAAC,CAAC5pB,CAAAA,CAAKqc,CAAM,CAAA,GAAM,GAAGrc,CAAG,CAAA,EAAA,EAAKqc,CAAAA,CAAO,IAAA,CAAK,GAAG,CAAC,CAAA,CAAA,CAAG,CAAA,CACrD,KAAK,IAAI,EACd,CAGA,OAAI/c,CAAAA,CAAO,IAAA,GAAS,KAAA,GAClBmlB,CAAAA,CAAQ,4BAA4B,CAAA,CAAInlB,CAAAA,CAAO,IAAA,EAAQ,aAAA,CAAA,CAIrDA,CAAAA,CAAO,IAAA,GAAS,KAAA,GAClBmlB,CAAAA,CAAQ,8BAA8B,CAAA,CAAInlB,CAAAA,CAAO,IAAA,EAAQ,cAAA,CAAA,CAGpDmlB,CACT,CAcO,SAASoF,GACdvsB,CAAAA,CAAAA,GACG2mB,CAAAA,CACA,CACH,IAAM6F,CAAAA,CAAiB,IAAI,GAAA,CAAI,CAAC,WAAA,CAAa,aAAA,CAAe,WAAW,CAAC,CAAA,CAExE,IAAA,IAAWhoB,CAAAA,IAAUmiB,CAAAA,CACnB,GAAI,EAAA,CAACniB,CAAAA,EAAU,OAAOA,CAAAA,EAAW,QAAA,CAAA,CAEjC,IAAA,IAAW9B,CAAAA,IAAO,MAAA,CAAO,IAAA,CAAK8B,CAAM,CAAA,CAAG,CACrC,GAAIgoB,CAAAA,CAAe,GAAA,CAAI9pB,CAAG,EAAG,SAE7B,IAAM+pB,CAAAA,CAAazsB,CAAAA,CAAe0C,CAAG,CAAA,CAC/BgqB,CAAAA,CAAaloB,CAAAA,CAAe9B,CAAG,CAAA,CAEjCiqB,EAAAA,CAAcD,CAAS,CAAA,EAAKC,EAAAA,CAAcF,CAAS,CAAA,CACpDzsB,CAAAA,CAAe0C,CAAG,CAAA,CAAI6pB,EAAAA,CAAU,CAAE,GAAGE,CAAU,CAAA,CAAGC,CAAS,CAAA,CAE3D1sB,CAAAA,CAAe0C,CAAG,CAAA,CAAIgqB,EAE3B,CAGF,OAAO1sB,CACT,CAKO,SAAS4sB,EAAAA,CAAc5V,CAAAA,CAAqB,CACjD,GAAIA,CAAAA,GAAQ,IAAA,EAAQ,OAAOA,CAAAA,EAAQ,QAAA,CAAU,OAAOA,CAAAA,CACpD,MAAA,CAAO,MAAA,CAAOA,CAAG,CAAA,CACjB,IAAA,IAAWjZ,KAAS,MAAA,CAAO,MAAA,CAAOiZ,CAAG,CAAA,CAC/B,OAAOjZ,CAAAA,EAAU,QAAA,EAAYA,CAAAA,GAAU,IAAA,EACzC6uB,EAAAA,CAAW7uB,CAAK,CAAA,CAGpB,OAAOiZ,CACT,CAEA,SAAS2V,GAAclY,CAAAA,CAA8C,CACnE,OAAOA,CAAAA,GAAQ,IAAA,EAAQ,OAAOA,CAAAA,EAAQ,QAAA,EAAY,MAAA,CAAO,cAAA,CAAeA,CAAG,CAAA,GAAM,MAAA,CAAO,SAC1F,CAgBA,eAAsBoY,GAAYtvB,CAAAA,CAAiBuvB,CAAAA,CAA4C,QAAA,CAA2B,CAExH,IAAM/X,CAAAA,CADU,IAAI,WAAA,EAAY,CACX,MAAA,CAAOxX,CAAO,CAAA,CAE7BwvB,CAAAA,CAAWD,CAAAA,GAAc,QAAA,CAAW,SAAA,CAAYA,IAAc,QAAA,CAAW,SAAA,CAAY,SAAA,CACrFE,CAAAA,CAAa,MAAM,MAAA,CAAO,MAAA,CAAO,MAAA,CAAOD,CAAAA,CAAUhY,CAAI,CAAA,CACtDkY,CAAAA,CAAY,IAAI,UAAA,CAAWD,CAAU,CAAA,CACrCE,EAAS,IAAA,CAAK,MAAA,CAAO,YAAA,CAAa,GAAGD,CAAS,CAAC,CAAA,CAErD,OAAO,CAAA,EAAGH,CAAS,CAAA,CAAA,EAAII,CAAM,CAAA,CAC/B,CASO,SAASC,EAAAA,EAA4B,CAC1C,IAAMC,CAAAA,CAAQ,IAAI,UAAA,CAAW,EAAE,CAAA,CAC/B,OAAA,MAAA,CAAO,eAAA,CAAgBA,CAAK,CAAA,CACrB,KAAA,CAAM,IAAA,CAAKA,CAAAA,CAAQjnB,CAAAA,EAAMA,CAAAA,CAAE,QAAA,CAAS,EAAE,EAAE,QAAA,CAAS,CAAA,CAAG,GAAG,CAAC,CAAA,CAAE,IAAA,CAAK,EAAE,CAC1E,CAWO,SAASknB,EAAAA,CAAsB5tB,CAAAA,CAIlC,EAAC,CAAG,CACN,GAAM,CACJ,UAAA,CAAA6tB,CAAAA,CAAa,cAAA,CACb,UAAA,CAAAC,CAAAA,CAAa,YAAA,CACb,cAAA,CAAAC,CAAAA,CAAiBL,EACnB,CAAA,CAAI1tB,CAAAA,CAEAguB,CAAAA,CAAuB,IAAA,CAE3B,SAASC,CAAAA,EAAmB,CAC1B,GAAI,CAACD,CAAAA,CAAO,CAEV,GAAI,OAAO,QAAA,CAAa,GAAA,CAAa,CACnC,IAAMtP,CAAAA,CAAQ,QAAA,CAAS,MAAA,CAAO,KAAA,CAAM,IAAI,MAAA,CAAO,CAAA,EAAGoP,CAAU,CAAA,QAAA,CAAU,CAAC,CAAA,CACvE,GAAIpP,CAAAA,CACF,OAAAsP,CAAAA,CAAQtP,CAAAA,CAAM,CAAC,CAAA,CACRsP,CAEX,CAEAA,CAAAA,CAAQD,CAAAA,GACV,CACA,OAAOC,CACT,CAWA,OAAO,CACL,WAAA,CAVkB,MAAOE,CAAAA,CAAkBnkB,CAAAA,GAAiE,CAC5G,IAAM0d,CAAAA,CAASyG,CAAAA,CAAQ,MAAA,CAAO,WAAA,EAAY,CAE1C,OAAI,CAAC,MAAA,CAAQ,KAAA,CAAO,OAAA,CAAS,QAAQ,CAAA,CAAE,QAAA,CAASzG,CAAM,CAAA,EACpDyG,CAAAA,CAAQ,OAAA,CAAQ,GAAA,CAAIL,CAAAA,CAAYI,CAAAA,EAAU,CAAA,CAErClkB,CAAAA,CAAKmkB,CAAO,CACrB,CAAA,CAIE,KAAA,CAAOD,CAAAA,CACP,OAAA,EAAU,CAAED,CAAAA,CAAQD,CAAAA,GAAkB,CACxC,CACF,CAcO,SAASI,EAAAA,CAAYhR,CAAAA,CAAand,CAAAA,CAIrC,EAAC,CAAkB,CACrB,GAAM,CACJ,YAAA,CAAAouB,CAAAA,CACA,gBAAA,CAAAC,CAAAA,CAAmB,CAAC,OAAA,CAAS,QAAQ,CAAA,CACrC,aAAA,CAAAC,CAAAA,CAAgB,IAClB,CAAA,CAAItuB,CAAAA,CAGJ,GAAImd,CAAAA,CAAI,UAAA,CAAW,GAAG,CAAA,EAAK,CAACA,CAAAA,CAAI,UAAA,CAAW,IAAI,CAAA,CAC7C,OAAOmR,CAAAA,CAAgBnR,CAAAA,CAAM,IAAA,CAG/B,GAAI,CACF,IAAMoR,EAAS,IAAI,GAAA,CAAIpR,CAAG,CAAA,CAM1B,OAHI,CAACkR,CAAAA,CAAiB,QAAA,CAASE,CAAAA,CAAO,QAAQ,CAAA,EAG1CH,CAAAA,EAAgB,CAACA,CAAAA,CAAa,QAAA,CAASG,CAAAA,CAAO,QAAQ,CAAA,CAAU,IAAA,CAE7DA,CAAAA,CAAO,QAAA,EAChB,CAAA,KAAQ,CACN,OAAO,IACT,CACF,CAaO,SAASC,EAAAA,CAAkBxuB,CAAAA,CAG/B,CACD,GAAM,CAAE,WAAA,CAAAyuB,CAAAA,CAAa,QAAA,CAAAC,CAAS,CAAA,CAAI1uB,CAAAA,CAC5B2uB,CAAAA,CAAqB,EAAC,CAE5B,OAAO,CACL,KAAA,EAAiB,CACf,IAAMrpB,CAAAA,CAAM,IAAA,CAAK,KAAI,CAErB,KAAOqpB,CAAAA,CAAS,MAAA,CAAS,CAAA,EAAKA,CAAAA,CAAS,CAAC,CAAA,CAAIrpB,CAAAA,CAAMopB,CAAAA,EAChDC,CAAAA,CAAS,KAAA,EAAM,CAEjB,OAAIA,CAAAA,CAAS,MAAA,EAAUF,EAAoB,KAAA,EAC3CE,CAAAA,CAAS,IAAA,CAAKrpB,CAAG,CAAA,CACV,IAAA,CACT,CAAA,CACA,SAAA,EAAoB,CAClB,IAAMA,CAAAA,CAAM,IAAA,CAAK,GAAA,EAAI,CACrB,KAAOqpB,CAAAA,CAAS,OAAS,CAAA,EAAKA,CAAAA,CAAS,CAAC,CAAA,CAAIrpB,CAAAA,CAAMopB,CAAAA,EAChDC,CAAAA,CAAS,KAAA,EAAM,CAEjB,OAAO,IAAA,CAAK,GAAA,CAAI,CAAA,CAAGF,CAAAA,CAAcE,CAAAA,CAAS,MAAM,CAClD,CAAA,CACA,KAAA,EAAc,CACZA,CAAAA,CAAS,MAAA,CAAS,EACpB,CACF,CACF,CCphBA,IAAMC,EAAAA,CAAS,IAAI,GAAA,CACfC,EAAAA,CAAkB,IAAA,CAClBC,EAAAA,CAAiD,IAAA,CAK9C,SAASC,EAAAA,CAAuBC,CAAAA,CAAwB,CAC7DH,EAAAA,CAAkBG,EACpB,CAKO,SAASC,EAAAA,CAAkBjrB,CAAAA,CAA+C,CAC/E8qB,EAAAA,CAAiB9qB,EACnB,CAKO,SAASkrB,EAAAA,EAAiC,CAC/CN,GAAO,KAAA,GACT,CAmBO,SAASO,EAAAA,CACd3W,CAAAA,CACA4W,CAAAA,CACG,CACH,IAAMzb,CAAAA,EAAW,CAAA,GAAIyE,CAAAA,IACnBiX,EAAAA,CAAuBD,CAAI,CAAA,CACpB5W,CAAAA,CAAG,GAAGJ,CAAI,CAAA,CAAA,CAAA,CAInB,OAAA,MAAA,CAAO,IAAA,CAAKI,CAAE,CAAA,CAAE,OAAA,CAASvV,CAAAA,EAAQ,CAC9B0Q,CAAAA,CAAgB1Q,CAAG,CAAA,CAAKuV,CAAAA,CAAWvV,CAAG,EACzC,CAAC,EAGA0Q,CAAAA,CAAgB,YAAA,CAAeyb,CAAAA,CAEzBzb,CACT,CAMO,SAAS2b,EAAAA,CAAmBhxB,CAAAA,CAAU8wB,EAA0B,CACrE,OAAAC,EAAAA,CAAuBD,CAAI,CAAA,CACpB9wB,CACT,CAMA,SAAS+wB,GAAuBD,CAAAA,CAA6B,CAE3D,GADI,CAACP,EAAAA,EACDD,EAAAA,CAAO,GAAA,CAAIQ,CAAAA,CAAK,IAAI,CAAA,CAAG,OAC3BR,EAAAA,CAAO,GAAA,CAAIQ,CAAAA,CAAK,IAAI,CAAA,CAEpB,IAAM9c,CAAAA,CAAkB,CACtB,CAAA,sBAAA,EAAyB8c,CAAAA,CAAK,IAAI,CAAA,wBAAA,EAA2BA,CAAAA,CAAK,KAAK,CAAA,CACzE,CAAA,CAEIA,CAAAA,CAAK,QAAA,CACP9c,CAAAA,CAAM,CAAC,CAAA,EAAK,CAAA,yBAAA,EAA4B8c,EAAK,QAAQ,CAAA,CAAA,CAAA,CAErD9c,CAAAA,CAAM,CAAC,CAAA,EAAK,GAAA,CAGV8c,CAAAA,CAAK,WAAA,EACP9c,CAAAA,CAAM,IAAA,CAAK,CAAA,cAAA,EAAiB8c,CAAAA,CAAK,WAAW,CAAA,EAAA,CAAI,CAAA,CAG9CA,CAAAA,CAAK,SACP9c,CAAAA,CAAM,IAAA,CAAK,CAAA,EAAA,EAAK8c,CAAAA,CAAK,OAAO,CAAA,CAAE,CAAA,CAGhC9c,CAAAA,CAAM,KAAK,CAAA,OAAA,EAAU8c,CAAAA,CAAK,IAAA,EAAQ,gCAAgC,CAAA,CAAE,CAAA,CAEpE,IAAMhlB,CAAAA,CAAMkI,EAAM,IAAA,CAAK;AAAA,CAAI,EAEvBwc,EAAAA,CACFA,EAAAA,CAAe1kB,CAAG,CAAA,CACT,OAAO,QAAY,GAAA,EAC5B,OAAA,CAAQ,KAAKA,CAAG,EAEpB,CAMA,IAAMmlB,CAAAA,CAAc,IAAI,GAAA,CAKjB,SAASC,GAAYJ,CAAAA,CAAqB,CAC/CG,EAAY,GAAA,CAAIH,CAAAA,CAAK,KAAMA,CAAI,EACjC,CAKO,SAASK,EAAAA,EAA+B,CAC7C,OAAO,KAAA,CAAM,KAAKF,CAAAA,CAAY,MAAA,EAAQ,CACxC,CAKO,SAASG,EAAAA,CAAmBC,CAAAA,CAAoC,CACrE,OAAOF,EAAAA,GAAoB,MAAA,CAAQG,CAAAA,EAAQA,EAAI,SAAA,GAAcD,CAAS,CACxE,CAKO,SAASE,GAAaxxB,CAAAA,CAAuB,CAElD,OADakxB,CAAAA,CAAY,GAAA,CAAIlxB,CAAI,CAAA,EACpB,SAAA,GAAc,YAC7B,CAKO,SAASyxB,GAAmBzxB,CAAAA,CAAsC,CAEvE,OADakxB,CAAAA,CAAY,GAAA,CAAIlxB,CAAI,CAAA,EACpB,WAAA,EAAe,IAC9B,CAyBO,SAAS0xB,GACdC,CAAAA,CACqB,CACrB,IAAMngB,CAAAA,CAAqB,GACrBogB,CAAAA,CAAmB,GAEnBC,CAAAA,CAAW,MAAA,CAAO,QAAQF,CAAQ,CAAA,CACxC,GAAIE,CAAAA,CAAS,SAAW,CAAA,CAAG,OAAO,CAAE,UAAA,CAAY,IAAA,CAAM,SAAArgB,CAAAA,CAAU,MAAA,CAAAogB,CAAO,CAAA,CAGvE,IAAME,EAAgBD,CAAAA,CAAS,MAAA,CAAO,CAAC,CAAC7xB,CAAI,IAAMA,CAAAA,CAAK,UAAA,CAAW,WAAW,CAAC,CAAA,CAE9E,GAAI8xB,CAAAA,CAAc,MAAA,CAAS,EAAG,CAC5B,IAAMC,EAAS,IAAI,GAAA,CAAID,EAAc,GAAA,CAAI,CAAC,EAAGvqB,CAAC,IAAMA,CAAAA,CAAE,KAAA,CAAM,GAAG,CAAA,CAAE,CAAC,CAAC,CAAC,CAAA,CAC9DyqB,EAAS,IAAI,GAAA,CAAIF,EAAc,GAAA,CAAI,CAAC,EAAGvqB,CAAC,IAAMA,CAAAA,CAAE,KAAA,CAAM,GAAG,CAAA,CAAE,KAAA,CAAM,EAAG,CAAC,CAAA,CAAE,KAAK,GAAG,CAAC,CAAC,CAAA,CAEnFwqB,CAAAA,CAAO,KAAO,CAAA,CAChBH,CAAAA,CAAO,KACL,CAAA,wBAAA,EAA2BE,CAAAA,CAAc,IAAI,CAAC,CAACziB,EAAG9H,CAAC,CAAA,GAAM,GAAG8H,CAAC,CAAA,CAAA,EAAI9H,CAAC,CAAA,CAAE,CAAA,CAAE,KAAK,IAAI,CAAC,CAAA,4DAAA,CAElF,CAAA,CACSyqB,EAAO,IAAA,CAAO,CAAA,EACvBxgB,EAAS,IAAA,CACP,CAAA,wBAAA,EAA2BsgB,EAAc,GAAA,CAAI,CAAC,CAACziB,CAAAA,CAAG9H,CAAC,IAAM,CAAA,EAAG8H,CAAC,IAAI9H,CAAC,CAAA,CAAE,EAAE,IAAA,CAAK,IAAI,CAAC,CAAA,2EAAA,CAElF,EAEJ,CAEA,OAAO,CACL,WAAYqqB,CAAAA,CAAO,MAAA,GAAW,EAC9B,QAAA,CAAApgB,CAAAA,CACA,OAAAogB,CACF,CACF,CC5OA,IAAMK,EAAAA,CAAiB,IAAI,GAAA,CACrBC,EAAAA,CAAiB,IAAI,GAAA,CA0C3B,SAASC,EAAa7mB,CAAAA,CAAkC,CAEtD,IAAMtC,CAAAA,CADYopB,CAAAA,GACM9mB,CAAE,CAAA,CAC1B,GAAI,CAACtC,CAAAA,CAAO,OAAO,IAAA,CAEnB,IAAMmhB,EAAWnhB,CAAAA,CAAM,SAAA,GAEjBqpB,CAAAA,CAAmC,GACnCC,CAAAA,CAAoB,GAE1B,IAAA,GAAW,CAAC1tB,EAAK3E,CAAK,CAAA,GAAK,OAAO,OAAA,CAAQ+I,CAAK,EAC7C,GAAI,CAAApE,EAAI,UAAA,CAAW,GAAG,GACtB,GAAI,OAAO3E,GAAU,UAAA,EAAc,KAAA,GAASA,CAAAA,EAAS,QAAA,GAAYA,EAEjDA,CAAAA,EAAc,CAAA,KAAA,GACnB,OAAOA,CAAAA,EAAU,UAAA,EAAc,EAAE,KAAA,GAASA,CAAAA,CAAAA,EAAU,CAAC2E,CAAAA,CAAI,UAAA,CAAW,GAAG,CAAA,CAEhF,GAAI,CACF,IAAM4D,CAAAA,CAAUvI,GAAc,CAE1B,OAAOuI,EAAW,GAAA,CACpB6pB,CAAAA,CAAQztB,CAAG,CAAA,CAAI4D,CAAAA,CAEf8pB,EAAQ,IAAA,CAAK1tB,CAAG,EAEpB,CAAA,KAAQ,CACN0tB,EAAQ,IAAA,CAAK1tB,CAAG,EAClB,CAAA,CAIJ,OAAO,CACL,GAAA,CAAK0G,CAAAA,CACL,MAAO6e,CAAAA,CACP,OAAA,CAAAkI,EACA,OAAA,CAAAC,CAAAA,CACA,gBAAiB,CACnB,CACF,CAyBA,IAAMC,EAAAA,CAAa,IAAI,GAAA,CACjBC,EAAAA,CAAqB,IAAI,GAAA,CAE/B,SAASC,IAAiC,CACxC,OAAO,CACL,MAAA,EAAS,CACP,OAAO,MAAA,CAAO,IAAA,CAAKL,GAAqB,CAC1C,EAEA,KAAA,CAAM9mB,CAAAA,CAAY,CAChB,OAAO6mB,CAAAA,CAAa7mB,CAAE,CACxB,CAAA,CAEA,gBAAiB,CACf,IAAM9C,EAAwC,EAAC,CAC/C,QAAW8C,CAAAA,IAAM,MAAA,CAAO,IAAA,CAAK8mB,CAAAA,EAAqB,CAAA,CAAG,CACnD,IAAMM,CAAAA,CAAOP,CAAAA,CAAa7mB,CAAE,CAAA,CACxBonB,CAAAA,GAAMlqB,EAAO8C,CAAE,CAAA,CAAIonB,GACzB,CACA,OAAOlqB,CACT,CAAA,CAEA,OAAA,EAAU,CACR,OAAO,CAAC,GAAGypB,EAAAA,CAAe,MAAA,EAAQ,CAAA,CAAE,GAAA,CAAI/iB,IAAM,CAC5C,IAAA,CAAMA,EAAE,IAAA,CACR,KAAA,CAAOA,EAAE,IAAA,EAAK,CACd,YAAaA,CAAAA,CAAE,eACjB,EAAE,CACJ,CAAA,CAEA,SAAU,CACR,OAAO,CAAC,GAAGgjB,EAAAA,CAAe,QAAQ,CAAA,CAAE,IAAI,CAAA,GAAM,CAC5C,KAAM,CAAA,CAAE,IAAA,CACR,KAAM,CAAA,CAAE,QAAA,CACR,SAAU,CAAA,CAAE,QAAA,CACZ,QAAS,CAAA,CAAE,WACb,EAAE,CACJ,CAAA,CAEA,SAAU,CACR,OAAO,CAAE,OAAA,CAAS,QAAS,CAC7B,CAAA,CAEA,GAAA,CAAIS,EAAkB,CACpB,GAAIA,EAAS,CACX,IAAMD,EAAOP,CAAAA,CAAaQ,CAAO,EAC7BD,CAAAA,EACF,OAAA,CAAQ,MAAM,CAAA,iBAAA,EAAaC,CAAO,CAAA,CAAE,CAAA,CACpC,QAAQ,GAAA,CAAI,QAAA,CAAUD,EAAK,KAAK,CAAA,CAChC,QAAQ,GAAA,CAAI,UAAA,CAAYA,EAAK,OAAO,CAAA,CACpC,QAAQ,GAAA,CAAI,UAAA,CAAYA,EAAK,OAAO,CAAA,CACpC,QAAQ,QAAA,EAAS,EAEjB,QAAQ,IAAA,CAAK,CAAA,OAAA,EAAUC,CAAO,CAAA,uBAAA,CAAA,CAA2B,MAAA,CAAO,KAAKP,CAAAA,EAAqB,CAAC,EAE/F,CAAA,KAAO,CACL,IAAMQ,CAAAA,CAAS,OAAO,IAAA,CAAKR,CAAAA,EAAqB,CAAA,CAChD,OAAA,CAAQ,MAAM,0BAAmB,CAAA,CACjC,QAAW9mB,CAAAA,IAAMsnB,CAAAA,CAAQ,CACvB,IAAMF,CAAAA,CAAOP,EAAa7mB,CAAE,CAAA,CACxBonB,IACF,OAAA,CAAQ,KAAA,CAAMpnB,CAAE,CAAA,CAChB,OAAA,CAAQ,IAAI,QAAA,CAAUonB,CAAAA,CAAK,KAAK,CAAA,CAChC,OAAA,CAAQ,IAAI,UAAA,CAAYA,CAAAA,CAAK,OAAO,CAAA,CACpC,OAAA,CAAQ,UAAS,EAErB,CACA,QAAQ,QAAA,GACV,CACF,CAAA,CAEA,cAAA,CAAeC,EAAiB,CAC9B,IAAM3pB,EAAQopB,CAAAA,EAAoB,CAAEO,CAAO,CAAA,CAC3C,GAAI,CAAC3pB,CAAAA,CAAO,CACV,OAAA,CAAQ,IAAA,CAAK,UAAU2pB,CAAO,CAAA,YAAA,CAAc,EAC5C,MACF,CAEA,IAAME,CAAAA,CAAyF,GAE/FA,CAAAA,CAAQ,IAAA,CAAK,CAAE,SAAA,CAAW,IAAA,CAAK,KAAI,CAAG,KAAA,CAAO7pB,EAAM,SAAA,EAAY,CAAC,CAAA,CAEhE,IAAM8pB,EAAc9pB,CAAAA,CAAM,UAAA,CAAYG,GAAU,CAC9C0pB,CAAAA,CAAQ,KAAK,CAAE,SAAA,CAAW,KAAK,GAAA,EAAI,CAAG,MAAO,CAAE,GAAG1pB,CAAM,CAAE,CAAC,EAC7D,CAAC,CAAA,CAEDopB,GAAW,GAAA,CAAII,CAAAA,CAASE,CAAO,CAAA,CAC/BL,EAAAA,CAAmB,IAAIG,CAAAA,CAASG,CAAW,EAC3C,OAAA,CAAQ,GAAA,CAAI,2BAAsBH,CAAO,CAAA,0CAAA,EAA6CA,CAAO,CAAA,mBAAA,CAAqB,EACpH,EAEA,aAAA,CAAcA,CAAAA,CAAiB,CAC7B,IAAMI,CAAAA,CAAWP,GAAmB,GAAA,CAAIG,CAAO,EAC3CI,CAAAA,EAAUA,CAAAA,GACdP,EAAAA,CAAmB,MAAA,CAAOG,CAAO,CAAA,CAEjC,IAAME,EAAUN,EAAAA,CAAW,GAAA,CAAII,CAAO,CAAA,EAAK,GAC3C,OAAAJ,EAAAA,CAAW,OAAOI,CAAO,CAAA,CAEzB,OAAA,CAAQ,GAAA,CAAI,6BAAwBA,CAAO,CAAA,GAAA,EAAME,EAAQ,MAAM,CAAA,oBAAA,CAAsB,EACrF,OAAA,CAAQ,KAAA,CAAMA,EAAQ,GAAA,CAAI,CAACG,EAAGplB,CAAAA,IAAO,CACnC,IAAKA,CAAAA,CACL,IAAA,CAAM,IAAI,IAAA,CAAKolB,CAAAA,CAAE,SAAS,CAAA,CAAE,WAAA,GAAc,KAAA,CAAM,EAAA,CAAI,EAAE,CAAA,CACtD,KAAA,CAAO,KAAK,SAAA,CAAUA,CAAAA,CAAE,KAAK,CAC/B,CAAA,CAAE,CAAC,CAAA,CAEIH,CACT,CACF,CACF,CAWO,SAASI,EAAAA,EAAwB,CACtC,IAAM1B,CAAAA,CAAMkB,EAAAA,GAER,OAAO,UAAA,CAAe,MACvB,UAAA,CAAmB,kBAAA,CAAqBlB,EACzC,OAAA,CAAQ,GAAA,CACN,oFACA,oCACF,CAAA,CACA,QAAQ,GAAA,CAAI,6CAAwC,EACpD,OAAA,CAAQ,GAAA,CAAI,+CAA0C,CAAA,CACtD,OAAA,CAAQ,IAAI,yDAAoD,CAAA,CAChE,QAAQ,GAAA,CAAI,wDAAmD,EAC/D,OAAA,CAAQ,GAAA,CAAI,sDAAiD,CAAA,CAC7D,OAAA,CAAQ,IAAI,uDAAkD,CAAA,CAC9D,QAAQ,GAAA,CAAI,sDAAiD,EAC7D,OAAA,CAAQ,GAAA,CAAI,sDAAiD,CAAA,EAEjE","file":"index.js","sourcesContent":["/**\n * Slot helpers for content projection.\n *\n * Children are passed as the default slot. Named slots are\n * passed as render-function props. These helpers make working\n * with both patterns consistent.\n */\n\nimport { nodeToDOM } from './dom.js';\nimport type { AkashNode } from './types.js';\n\n/** A slot is a function that returns renderable content */\nexport type SlotFn = () => AkashNode;\n\n/** Named slots map */\nexport type Slots = Record<string, SlotFn>;\n\n/**\n * Render a slot (named or default) into a DOM node.\n * Returns a placeholder comment if the slot is not provided.\n *\n * ```ts\n * const Card = defineComponent<{ header?: SlotFn }>((ctx) => {\n * return () => {\n * const el = document.createElement('div');\n * el.appendChild(renderSlot(ctx.props.header));\n * el.appendChild(renderSlot(ctx.children));\n * return el;\n * };\n * });\n * ```\n */\nexport function renderSlot(slot: SlotFn | undefined, fallback?: SlotFn): Node {\n if (slot) {\n const content = slot();\n return nodeToDOM(content);\n }\n if (fallback) {\n return nodeToDOM(fallback());\n }\n return document.createComment('empty slot');\n}\n\n/**\n * Check if a slot has content.\n */\nexport function hasSlot(slot: SlotFn | undefined): boolean {\n if (!slot) return false;\n const content = slot();\n if (content == null || content === false) return false;\n if (typeof content === 'string' && content.trim() === '') return false;\n return true;\n}\n\n/**\n * Create a named slots object from component props.\n * Extracts all function-typed props as named slots.\n *\n * ```ts\n * const Layout = defineComponent<{\n * header: SlotFn;\n * footer: SlotFn;\n * }>((ctx) => {\n * const slots = createSlots(ctx.props, ['header', 'footer']);\n * return () => {\n * const el = document.createElement('div');\n * el.appendChild(renderSlot(slots.header));\n * el.appendChild(renderSlot(ctx.children));\n * el.appendChild(renderSlot(slots.footer));\n * return el;\n * };\n * });\n * ```\n */\nexport function createSlots<T extends Record<string, unknown>>(\n props: T,\n slotNames: (keyof T)[],\n): Slots {\n const slots: Slots = {};\n for (const name of slotNames) {\n const value = props[name];\n if (typeof value === 'function') {\n slots[name as string] = value as SlotFn;\n }\n }\n return slots;\n}\n","/**\n * ErrorBoundary component.\n *\n * Declarative error handling — catches errors from child components\n * and renders a fallback UI.\n *\n * ```html\n * <ErrorBoundary fallback={(err) => <p>Error: {err.message}</p>}>\n * <RiskyComponent />\n * </ErrorBoundary>\n * ```\n */\n\nimport { defineComponent, onError } from './component.js';\nimport { signal } from './signals.js';\nimport { nodeToDOM } from './dom.js';\nimport type { AkashNode } from './types.js';\n\nexport interface ErrorBoundaryProps {\n /** Render function called when an error is caught */\n fallback: (error: Error, retry: () => void) => AkashNode;\n}\n\n/**\n * ErrorBoundary component.\n *\n * Catches errors from descendant components and renders a fallback.\n * The fallback receives the error and a `retry` function that re-renders\n * the children.\n */\nexport const ErrorBoundary = defineComponent<ErrorBoundaryProps>((ctx) => {\n const error = signal<Error | null>(null);\n\n onError((err) => {\n error.set(err);\n });\n\n function retry() {\n error.set(null);\n }\n\n return () => {\n const currentError = error();\n\n if (currentError) {\n return nodeToDOM(ctx.props.fallback(currentError, retry));\n }\n\n return nodeToDOM(ctx.children());\n };\n});\n","/**\n * <Suspense> component.\n *\n * Shows a fallback while async children are loading.\n * When all pending async work resolves, swaps to the real content.\n *\n * Works with both client rendering and SSR streaming:\n * - Client: shows fallback, swaps when promises resolve\n * - SSR: flushes fallback HTML immediately, then sends replacement when ready\n */\n\nimport { defineComponent } from './component.js';\nimport { signal, effect } from './signals.js';\nimport { nodeToDOM } from './dom.js';\nimport type { AkashNode } from './types.js';\n\n// --- Suspense tracking ---\n\ninterface SuspenseContext {\n /** Register a pending promise */\n addPending(promise: Promise<unknown>): void;\n /** Check if all pending work is resolved */\n isResolved: () => boolean;\n}\n\nlet currentSuspenseCtx: SuspenseContext | null = null;\n\n/**\n * Get the current Suspense context (if inside a <Suspense> boundary).\n * Used by async components and createResource to register pending work.\n */\nexport function getSuspenseContext(): SuspenseContext | null {\n return currentSuspenseCtx;\n}\n\n/**\n * Register a promise with the nearest Suspense boundary.\n * If there is no Suspense boundary, the promise is ignored\n * (component renders without waiting).\n */\nexport function registerPending(promise: Promise<unknown>): void {\n if (currentSuspenseCtx) {\n currentSuspenseCtx.addPending(promise);\n }\n}\n\n// --- Suspense component ---\n\nexport interface SuspenseProps {\n /** Fallback UI shown while children are loading */\n fallback: () => AkashNode;\n}\n\n/**\n * <Suspense> component.\n *\n * ```html\n * <Suspense fallback={() => <Spinner />}>\n * <AsyncComponent />\n * </Suspense>\n * ```\n */\nexport const Suspense = defineComponent<SuspenseProps>((ctx) => {\n const resolved = signal(false);\n const pending: Promise<unknown>[] = [];\n\n const suspenseCtx: SuspenseContext = {\n addPending(promise: Promise<unknown>) {\n pending.push(promise);\n },\n isResolved: () => resolved(),\n };\n\n // Set up the context so child components can register promises\n const prevCtx = currentSuspenseCtx;\n currentSuspenseCtx = suspenseCtx;\n\n // Render children (this may trigger async work registration)\n let childrenNode: AkashNode;\n try {\n childrenNode = ctx.children();\n } finally {\n currentSuspenseCtx = prevCtx;\n }\n\n // If there are pending promises, wait for them\n if (pending.length > 0) {\n Promise.all(pending).then(() => {\n resolved.set(true);\n });\n } else {\n // No async work — resolve immediately\n resolved.set(true);\n }\n\n return () => {\n const container = document.createElement('div');\n container.setAttribute('data-akash-suspense', '');\n container.style.display = 'contents';\n\n if (resolved()) {\n container.appendChild(nodeToDOM(childrenNode));\n } else {\n container.appendChild(nodeToDOM(ctx.props.fallback()));\n }\n\n // Watch for resolution and swap content\n effect(() => {\n if (resolved()) {\n while (container.firstChild) {\n container.removeChild(container.firstChild);\n }\n container.appendChild(nodeToDOM(childrenNode));\n }\n });\n\n return container;\n };\n});\n","/**\n * Client-side hydration.\n *\n * After SSR delivers HTML, the client needs to \"hydrate\" —\n * walk the existing DOM, attach signal effects, and make it interactive.\n * No new DOM nodes are created during hydration.\n *\n * Supports progressive hydration via IntersectionObserver:\n * components hydrate lazily when they enter the viewport.\n */\n\nimport { signal, effect } from './signals.js';\nimport type { Component } from './component.js';\nimport type { AkashNode } from './types.js';\n\n// --- Hydration state ---\n\nlet isHydrating = false;\nlet hydrateRoot: Node | null = null;\nlet hydrateWalker: TreeWalker | null = null;\n\n/** Check if we're currently hydrating (vs. fresh rendering) */\nexport function isHydrationActive(): boolean {\n return isHydrating;\n}\n\n// --- Hydration context ---\n\nexport interface HydrateOptions {\n /** The root DOM element (rendered by SSR) */\n container: HTMLElement;\n /** The root component to hydrate */\n component: Component<any>;\n /** Props to pass to the root component */\n props?: Record<string, unknown>;\n}\n\n/**\n * Hydrate a server-rendered DOM tree.\n *\n * Walks the existing DOM instead of creating new nodes,\n * attaching signal effects to existing elements.\n *\n * ```ts\n * import { hydrate } from '@akashjs/runtime';\n * import App from './App.akash';\n *\n * hydrate({\n * container: document.getElementById('app')!,\n * component: App,\n * props: { title: 'Home' },\n * });\n * ```\n */\nexport function hydrate(options: HydrateOptions): () => void {\n const { container, component, props = {} } = options;\n\n isHydrating = true;\n hydrateRoot = container;\n\n // Create a tree walker to traverse the existing DOM\n hydrateWalker = document.createTreeWalker(\n container,\n NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_TEXT,\n );\n\n try {\n // Run the component — during hydration, DOM creation helpers\n // will claim existing nodes instead of creating new ones\n component(props as any);\n } finally {\n isHydrating = false;\n hydrateRoot = null;\n hydrateWalker = null;\n }\n\n return () => {\n // Cleanup — dispose all hydration effects\n };\n}\n\n/**\n * Claim the next DOM node during hydration.\n * Instead of creating a new element, returns the existing one.\n */\nexport function claimElement(tag: string): HTMLElement | null {\n if (!isHydrating || !hydrateWalker) return null;\n\n let node = hydrateWalker.nextNode();\n while (node) {\n if (\n node instanceof HTMLElement &&\n node.tagName.toLowerCase() === tag.toLowerCase()\n ) {\n return node;\n }\n node = hydrateWalker.nextNode();\n }\n\n return null;\n}\n\n/**\n * Claim the next text node during hydration.\n */\nexport function claimText(): Text | null {\n if (!isHydrating || !hydrateWalker) return null;\n\n let node = hydrateWalker.nextNode();\n while (node) {\n if (node instanceof Text) {\n return node;\n }\n node = hydrateWalker.nextNode();\n }\n\n return null;\n}\n\n// --- Progressive hydration ---\n\nexport interface ProgressiveHydrateOptions {\n /** CSS selector or element to observe */\n target: HTMLElement;\n /** Component to hydrate when visible */\n component: Component<any>;\n /** Props */\n props?: Record<string, unknown>;\n /** IntersectionObserver root margin (default: '200px') */\n rootMargin?: string;\n}\n\n/**\n * Hydrate a component lazily when it enters the viewport.\n *\n * Uses IntersectionObserver to detect when the SSR placeholder\n * becomes visible, then runs full hydration.\n *\n * ```ts\n * progressiveHydrate({\n * target: document.querySelector('[data-hydrate=\"comments\"]')!,\n * component: Comments,\n * props: { postId: 123 },\n * });\n * ```\n */\nexport function progressiveHydrate(options: ProgressiveHydrateOptions): () => void {\n const { target, component, props, rootMargin = '200px' } = options;\n\n if (typeof IntersectionObserver === 'undefined') {\n // Fallback: hydrate immediately if IO is not available\n return hydrate({ container: target, component, props });\n }\n\n let disposed = false;\n\n const observer = new IntersectionObserver(\n (entries) => {\n for (const entry of entries) {\n if (entry.isIntersecting && !disposed) {\n observer.disconnect();\n hydrate({ container: target, component, props });\n }\n }\n },\n { rootMargin },\n );\n\n observer.observe(target);\n\n return () => {\n disposed = true;\n observer.disconnect();\n };\n}\n\n// --- Hydrate boundary marker ---\n\n/** Data attribute used to mark hydration boundaries in SSR HTML */\nexport const HYDRATE_ATTR = 'data-akash-hydrate';\n\n/**\n * Find all hydration boundaries in the document.\n */\nexport function findHydrationBoundaries(\n root: HTMLElement = document.body,\n): HTMLElement[] {\n return Array.from(root.querySelectorAll<HTMLElement>(`[${HYDRATE_ATTR}]`));\n}\n","/**\n * Transition/Animation system.\n *\n * Provides CSS-based enter/exit transitions for elements.\n * Works with <Transition> component or programmatic API.\n *\n * Class naming convention (matches Vue/Svelte):\n * - `{name}-enter-from` — initial enter state\n * - `{name}-enter-active` — active enter transition\n * - `{name}-enter-to` — final enter state\n * - `{name}-exit-from` — initial exit state\n * - `{name}-exit-active` — active exit transition\n * - `{name}-exit-to` — final exit state\n */\n\nimport { defineComponent } from './component.js';\nimport { signal, effect } from './signals.js';\nimport { nodeToDOM } from './dom.js';\nimport type { AkashNode } from './types.js';\n\n// --- Types ---\n\nexport interface TransitionProps {\n /** Transition name (used as CSS class prefix) */\n name?: string;\n /** Duration in ms (overrides CSS transition duration) */\n duration?: number;\n /** Whether the content is shown */\n when: boolean;\n /** CSS transition mode */\n mode?: 'in-out' | 'out-in';\n /** Callback when enter transition starts */\n onEnter?: (el: HTMLElement) => void;\n /** Callback when enter transition completes */\n onAfterEnter?: (el: HTMLElement) => void;\n /** Callback when exit transition starts */\n onExit?: (el: HTMLElement) => void;\n /** Callback when exit transition completes */\n onAfterExit?: (el: HTMLElement) => void;\n}\n\nexport interface TransitionClasses {\n enterFrom: string;\n enterActive: string;\n enterTo: string;\n exitFrom: string;\n exitActive: string;\n exitTo: string;\n}\n\n// --- CSS class helpers ---\n\n/**\n * Get the transition CSS class names for a given transition name.\n */\nexport function getTransitionClasses(name: string): TransitionClasses {\n return {\n enterFrom: `${name}-enter-from`,\n enterActive: `${name}-enter-active`,\n enterTo: `${name}-enter-to`,\n exitFrom: `${name}-exit-from`,\n exitActive: `${name}-exit-active`,\n exitTo: `${name}-exit-to`,\n };\n}\n\n// --- Programmatic transition API ---\n\n/**\n * Run an enter transition on an element.\n * Returns a promise that resolves when the transition completes.\n */\nexport function enterTransition(\n el: HTMLElement,\n classes: TransitionClasses,\n duration?: number,\n): Promise<void> {\n return new Promise((resolve) => {\n // Apply initial state\n el.classList.add(classes.enterFrom, classes.enterActive);\n\n // Force reflow to ensure the initial state is applied\n void el.offsetHeight;\n\n // Transition to final state\n el.classList.remove(classes.enterFrom);\n el.classList.add(classes.enterTo);\n\n const onEnd = () => {\n el.classList.remove(classes.enterActive, classes.enterTo);\n el.removeEventListener('transitionend', onEnd);\n resolve();\n };\n\n if (duration !== undefined) {\n setTimeout(onEnd, duration);\n } else {\n el.addEventListener('transitionend', onEnd, { once: true });\n // Fallback timeout in case transitionend never fires\n setTimeout(onEnd, 5000);\n }\n });\n}\n\n/**\n * Run an exit transition on an element.\n * Returns a promise that resolves when the transition completes.\n */\nexport function exitTransition(\n el: HTMLElement,\n classes: TransitionClasses,\n duration?: number,\n): Promise<void> {\n return new Promise((resolve) => {\n el.classList.add(classes.exitFrom, classes.exitActive);\n\n void el.offsetHeight;\n\n el.classList.remove(classes.exitFrom);\n el.classList.add(classes.exitTo);\n\n const onEnd = () => {\n el.classList.remove(classes.exitActive, classes.exitTo);\n el.removeEventListener('transitionend', onEnd);\n resolve();\n };\n\n if (duration !== undefined) {\n setTimeout(onEnd, duration);\n } else {\n el.addEventListener('transitionend', onEnd, { once: true });\n setTimeout(onEnd, 5000);\n }\n });\n}\n\n// --- <Transition> component ---\n\n/**\n * <Transition> component.\n *\n * Applies CSS enter/exit transitions when `when` changes.\n *\n * ```html\n * <Transition name=\"fade\" when={isVisible()}>\n * <div>Content</div>\n * </Transition>\n * ```\n *\n * CSS:\n * ```css\n * .fade-enter-active, .fade-exit-active {\n * transition: opacity 0.3s;\n * }\n * .fade-enter-from, .fade-exit-to {\n * opacity: 0;\n * }\n * ```\n */\nexport const Transition = defineComponent<TransitionProps>((ctx) => {\n const name = ctx.props.name ?? 'akash';\n const classes = getTransitionClasses(name);\n\n return () => {\n const container = document.createElement('div');\n container.style.display = 'contents';\n\n if (ctx.props.when) {\n const content = nodeToDOM(ctx.children());\n container.appendChild(content);\n\n // Run enter transition on mount\n if (content instanceof HTMLElement) {\n ctx.props.onEnter?.(content);\n enterTransition(content, classes, ctx.props.duration).then(() => {\n ctx.props.onAfterEnter?.(content);\n });\n }\n }\n\n return container;\n };\n});\n\n// --- Preset transition styles ---\n\n/**\n * Generate CSS for common transition presets.\n * Inject this into your app's styles or use the CLI to generate it.\n */\nexport function generateTransitionCSS(name: string, options: {\n property?: string;\n duration?: string;\n easing?: string;\n} = {}): string {\n const {\n property = 'all',\n duration = '0.3s',\n easing = 'ease',\n } = options;\n\n return `\n.${name}-enter-active,\n.${name}-exit-active {\n transition: ${property} ${duration} ${easing};\n}\n\n.${name}-enter-from,\n.${name}-exit-to {\n opacity: 0;\n}\n\n.${name}-enter-to,\n.${name}-exit-from {\n opacity: 1;\n}\n`.trim();\n}\n","/**\n * Document head management.\n *\n * Provides Title, Meta, and Head components for managing\n * <head> content declaratively. SSR-compatible — on the server,\n * collects tags; on the client, directly mutates the DOM.\n *\n * ```ts\n * // In any component:\n * useHead({\n * title: 'My Page',\n * meta: [\n * { name: 'description', content: 'Page description' },\n * { property: 'og:title', content: 'My Page' },\n * ],\n * link: [\n * { rel: 'canonical', href: 'https://example.com/page' },\n * ],\n * });\n * ```\n */\n\nimport { effect } from './signals.js';\nimport { onUnmount } from './component.js';\n\n// --- Types ---\n\nexport interface HeadConfig {\n /** Document title */\n title?: string;\n /** Title template — use %s as placeholder */\n titleTemplate?: string;\n /** Meta tags */\n meta?: MetaTag[];\n /** Link tags */\n link?: LinkTag[];\n /** Script tags */\n script?: ScriptTag[];\n /** HTML attributes */\n htmlAttrs?: Record<string, string>;\n /** Body attributes */\n bodyAttrs?: Record<string, string>;\n}\n\nexport interface MetaTag {\n name?: string;\n property?: string;\n httpEquiv?: string;\n content: string;\n}\n\nexport interface LinkTag {\n rel: string;\n href: string;\n type?: string;\n crossorigin?: string;\n}\n\nexport interface ScriptTag {\n src?: string;\n type?: string;\n async?: boolean;\n defer?: boolean;\n innerHTML?: string;\n}\n\n// --- SSR head collection ---\n\nlet ssrHeadTags: HeadConfig[] = [];\n\n/** @internal — collect head tags during SSR */\nexport function collectSSRHead(): HeadConfig[] {\n const tags = ssrHeadTags;\n ssrHeadTags = [];\n return tags;\n}\n\n/** Render collected head tags to HTML string (for SSR) */\nexport function renderHeadToString(configs: HeadConfig[]): string {\n let html = '';\n\n // Last title wins\n const title = configs.reduce((t, c) => c.title ?? t, '');\n const titleTemplate = configs.reduce((t, c) => c.titleTemplate ?? t, '');\n\n if (title) {\n const finalTitle = titleTemplate\n ? titleTemplate.replace('%s', title)\n : title;\n html += `<title>${finalTitle}</title>\\n`;\n }\n\n // Merge all meta tags\n for (const config of configs) {\n for (const meta of config.meta ?? []) {\n html += ' <meta';\n if (meta.name) html += ` name=\"${meta.name}\"`;\n if (meta.property) html += ` property=\"${meta.property}\"`;\n if (meta.httpEquiv) html += ` http-equiv=\"${meta.httpEquiv}\"`;\n html += ` content=\"${meta.content}\"`;\n html += ' />\\n';\n }\n }\n\n // Merge all link tags\n for (const config of configs) {\n for (const link of config.link ?? []) {\n html += ` <link rel=\"${link.rel}\" href=\"${link.href}\"`;\n if (link.type) html += ` type=\"${link.type}\"`;\n html += ' />\\n';\n }\n }\n\n return html;\n}\n\n// --- Client-side head management ---\n\nconst MANAGED_ATTR = 'data-akash-head';\n\n/**\n * Declaratively manage document head tags.\n * Call inside defineComponent() setup.\n *\n * Tags are automatically cleaned up when the component unmounts.\n * Reactive values (signals) in the config trigger updates.\n */\nexport function useHead(config: HeadConfig | (() => HeadConfig)): void {\n const getConfig = typeof config === 'function' ? config : () => config;\n\n // SSR: just collect\n if (typeof document === 'undefined') {\n ssrHeadTags.push(getConfig());\n return;\n }\n\n const managedElements: Element[] = [];\n\n const dispose = effect(() => {\n const cfg = getConfig();\n\n // Clean up previously managed elements\n for (const el of managedElements) {\n el.remove();\n }\n managedElements.length = 0;\n\n // Title\n if (cfg.title) {\n const title = cfg.titleTemplate\n ? cfg.titleTemplate.replace('%s', cfg.title)\n : cfg.title;\n document.title = title;\n }\n\n // Meta tags\n for (const meta of cfg.meta ?? []) {\n const el = document.createElement('meta');\n el.setAttribute(MANAGED_ATTR, '');\n if (meta.name) el.setAttribute('name', meta.name);\n if (meta.property) el.setAttribute('property', meta.property);\n if (meta.httpEquiv) el.setAttribute('http-equiv', meta.httpEquiv);\n el.setAttribute('content', meta.content);\n document.head.appendChild(el);\n managedElements.push(el);\n }\n\n // Link tags\n for (const link of cfg.link ?? []) {\n const el = document.createElement('link');\n el.setAttribute(MANAGED_ATTR, '');\n el.setAttribute('rel', link.rel);\n el.setAttribute('href', link.href);\n if (link.type) el.setAttribute('type', link.type);\n document.head.appendChild(el);\n managedElements.push(el);\n }\n\n // Script tags\n for (const script of cfg.script ?? []) {\n const el = document.createElement('script');\n el.setAttribute(MANAGED_ATTR, '');\n if (script.src) el.setAttribute('src', script.src);\n if (script.type) el.setAttribute('type', script.type);\n if (script.async) el.setAttribute('async', '');\n if (script.defer) el.setAttribute('defer', '');\n if (script.innerHTML) el.textContent = script.innerHTML;\n document.head.appendChild(el);\n managedElements.push(el);\n }\n\n // HTML attributes\n if (cfg.htmlAttrs) {\n for (const [key, value] of Object.entries(cfg.htmlAttrs)) {\n document.documentElement.setAttribute(key, value);\n }\n }\n\n // Body attributes\n if (cfg.bodyAttrs) {\n for (const [key, value] of Object.entries(cfg.bodyAttrs)) {\n document.body.setAttribute(key, value);\n }\n }\n });\n\n // Cleanup on unmount\n try {\n onUnmount(() => {\n dispose();\n for (const el of managedElements) {\n el.remove();\n }\n });\n } catch {\n // onUnmount may throw if called outside component — that's fine,\n // the effect will just persist until the page unloads\n }\n}\n","/**\n * Plugin system.\n *\n * Allows third-party extensions to hook into the AkashJS lifecycle.\n * Plugins can provide context values, add global error handlers,\n * register stores, and run setup code.\n *\n * ```ts\n * const authPlugin = definePlugin({\n * name: 'auth',\n * setup(app) {\n * const store = defineStore('auth', { ... })();\n * app.provide(AuthContext, store);\n * app.onError((err) => { if (err.status === 401) logout(); });\n * },\n * });\n *\n * const app = createApp(App);\n * app.use(authPlugin);\n * app.mount('#app');\n * ```\n */\n\nimport { provide } from './context.js';\nimport type { InjectionKey } from './context.js';\nimport type { Component } from './component.js';\n\n// --- Types ---\n\nexport interface PluginContext {\n /** Provide a value to all components */\n provide<T>(key: InjectionKey<T>, value: T): void;\n /** Register a global error handler */\n onError(handler: (error: Error) => void): void;\n /** Register a hook that runs before each component mount */\n onBeforeMount(hook: () => void): void;\n /** Access the app config */\n config: Record<string, unknown>;\n}\n\nexport interface Plugin {\n /** Plugin name (for debugging) */\n name: string;\n /** Setup function called when the plugin is installed */\n setup: (ctx: PluginContext) => void | Promise<void>;\n}\n\nexport interface AppInstance {\n /** Install a plugin */\n use(plugin: Plugin): AppInstance;\n /** Set a config value */\n config(key: string, value: unknown): AppInstance;\n /** Mount the app to a DOM element */\n mount(selector: string | HTMLElement): void;\n /** Unmount the app */\n unmount(): void;\n}\n\n// --- definePlugin ---\n\n/**\n * Define a framework plugin.\n */\nexport function definePlugin(plugin: Plugin): Plugin {\n return plugin;\n}\n\n// --- createApp ---\n\n/**\n * Create an application instance with plugin support.\n *\n * ```ts\n * const app = createApp(App);\n * app.use(authPlugin);\n * app.use(i18nPlugin);\n * app.mount('#app');\n * ```\n */\nexport function createApp<P extends Record<string, unknown>>(\n rootComponent: Component<P>,\n rootProps?: P,\n): AppInstance {\n const plugins: Plugin[] = [];\n const errorHandlers: Array<(error: Error) => void> = [];\n const beforeMountHooks: Array<() => void> = [];\n const appConfig: Record<string, unknown> = {};\n let mountedNode: Node | null = null;\n let containerEl: HTMLElement | null = null;\n\n const pluginCtx: PluginContext = {\n provide<T>(key: InjectionKey<T>, value: T) {\n // Will be called during setup — context scope is active\n provide(key, value);\n },\n onError(handler: (error: Error) => void) {\n errorHandlers.push(handler);\n },\n onBeforeMount(hook: () => void) {\n beforeMountHooks.push(hook);\n },\n config: appConfig,\n };\n\n const app: AppInstance = {\n use(plugin: Plugin) {\n plugins.push(plugin);\n return app;\n },\n\n config(key: string, value: unknown) {\n appConfig[key] = value;\n return app;\n },\n\n mount(selector: string | HTMLElement) {\n containerEl =\n typeof selector === 'string'\n ? document.querySelector<HTMLElement>(selector)\n : selector;\n\n if (!containerEl) {\n throw new Error(\n `[AkashJS] Mount target not found: ${selector}`,\n );\n }\n\n // Run plugin setup\n for (const plugin of plugins) {\n plugin.setup(pluginCtx);\n }\n\n // Run before-mount hooks\n for (const hook of beforeMountHooks) {\n hook();\n }\n\n // Render root component\n try {\n mountedNode = rootComponent((rootProps ?? {}) as any);\n containerEl.appendChild(mountedNode);\n } catch (err) {\n const e = err instanceof Error ? err : new Error(String(err));\n if (errorHandlers.length > 0) {\n for (const handler of errorHandlers) {\n handler(e);\n }\n } else {\n throw e;\n }\n }\n },\n\n unmount() {\n if (mountedNode && containerEl) {\n containerEl.removeChild(mountedNode);\n mountedNode = null;\n }\n },\n };\n\n return app;\n}\n","/**\n * Reactive composables — signal-based utility functions.\n *\n * Timers, debounce, throttle, and other commonly needed\n * reactive primitives that every app uses.\n */\n\nimport { signal, effect } from './signals.js';\nimport type { Signal, ReadonlySignal } from './signals.js';\n\n// --- useInterval ---\n\n/**\n * Create a reactive interval that ticks at a given rate.\n *\n * ```ts\n * const { count, pause, resume, reset } = useInterval(1000);\n * count(); // increments every second\n * ```\n */\nexport function useInterval(ms: number, options?: { immediate?: boolean }) {\n const count = signal(0);\n const isActive = signal(options?.immediate !== false);\n let timer: ReturnType<typeof setInterval> | null = null;\n\n function start() {\n stop();\n timer = setInterval(() => count.update((c) => c + 1), ms);\n }\n\n function stop() {\n if (timer) { clearInterval(timer); timer = null; }\n }\n\n if (isActive()) start();\n\n return {\n count: (() => count()) as ReadonlySignal<number>,\n isActive: (() => isActive()) as ReadonlySignal<boolean>,\n pause() { isActive.set(false); stop(); },\n resume() { isActive.set(true); start(); },\n reset() { count.set(0); },\n dispose() { stop(); },\n };\n}\n\n// --- useTimeout ---\n\n/**\n * Reactive timeout that exposes ready state.\n *\n * ```ts\n * const { ready, restart } = useTimeout(3000);\n * ready(); // false, then true after 3s\n * ```\n */\nexport function useTimeout(ms: number) {\n const ready = signal(false);\n let timer: ReturnType<typeof setTimeout> | null = null;\n\n function start() {\n stop();\n ready.set(false);\n timer = setTimeout(() => ready.set(true), ms);\n }\n\n function stop() {\n if (timer) { clearTimeout(timer); timer = null; }\n }\n\n start();\n\n return {\n ready: (() => ready()) as ReadonlySignal<boolean>,\n restart() { start(); },\n dispose() { stop(); },\n };\n}\n\n// --- useDebounce ---\n\n/**\n * Debounce a signal value. The output updates only after the input\n * stops changing for the given delay.\n *\n * ```ts\n * const search = signal('');\n * const debouncedSearch = useDebounce(search, 300);\n * // debouncedSearch() updates 300ms after last search.set()\n * ```\n */\nexport function useDebounce<T>(source: () => T, delay: number): ReadonlySignal<T> {\n const debounced = signal<T>(source());\n let timer: ReturnType<typeof setTimeout> | null = null;\n\n effect(() => {\n const value = source();\n if (timer) clearTimeout(timer);\n timer = setTimeout(() => debounced.set(value), delay);\n return () => { if (timer) clearTimeout(timer); };\n });\n\n return (() => debounced()) as ReadonlySignal<T>;\n}\n\n// --- useThrottle ---\n\n/**\n * Throttle a signal value. The output updates at most once per interval.\n *\n * ```ts\n * const scrollY = signal(0);\n * const throttled = useThrottle(scrollY, 100);\n * ```\n */\nexport function useThrottle<T>(source: () => T, interval: number): ReadonlySignal<T> {\n const throttled = signal<T>(source());\n let lastUpdate = 0;\n let timer: ReturnType<typeof setTimeout> | null = null;\n\n effect(() => {\n const value = source();\n const now = Date.now();\n const elapsed = now - lastUpdate;\n\n if (elapsed >= interval) {\n throttled.set(value);\n lastUpdate = now;\n } else {\n if (timer) clearTimeout(timer);\n timer = setTimeout(() => {\n throttled.set(value);\n lastUpdate = Date.now();\n }, interval - elapsed);\n }\n return () => { if (timer) clearTimeout(timer); };\n });\n\n return (() => throttled()) as ReadonlySignal<T>;\n}\n\n// --- useCounter ---\n\n/**\n * Simple reactive counter with inc/dec/set/reset.\n *\n * ```ts\n * const { count, inc, dec, set, reset } = useCounter(0);\n * ```\n */\nexport function useCounter(initial = 0) {\n const count = signal(initial);\n return {\n count: (() => count()) as ReadonlySignal<number>,\n inc(delta = 1) { count.update((c) => c + delta); },\n dec(delta = 1) { count.update((c) => c - delta); },\n set(value: number) { count.set(value); },\n reset() { count.set(initial); },\n };\n}\n\n// --- useToggle ---\n\n/**\n * Reactive boolean toggle.\n *\n * ```ts\n * const { value, toggle, setTrue, setFalse } = useToggle(false);\n * ```\n */\nexport function useToggle(initial = false) {\n const value = signal(initial);\n return {\n value: (() => value()) as ReadonlySignal<boolean>,\n toggle() { value.update((v) => !v); },\n setTrue() { value.set(true); },\n setFalse() { value.set(false); },\n };\n}\n\n// --- usePrevious ---\n\n/**\n * Track the previous value of a signal.\n *\n * ```ts\n * const count = signal(0);\n * const prev = usePrevious(count);\n * count.set(1);\n * prev(); // 0\n * ```\n */\nexport function usePrevious<T>(source: () => T): ReadonlySignal<T | undefined> {\n let lastValue: T | undefined;\n const tracked = signal<T | undefined>(undefined);\n\n effect(() => {\n const current = source();\n tracked.set(lastValue);\n lastValue = current;\n });\n\n return (() => tracked()) as ReadonlySignal<T | undefined>;\n}\n","/**\n * Browser API composables.\n *\n * Signal-based wrappers for common browser APIs.\n * All composables are SSR-safe — they return fallback values\n * when `window` is not available.\n */\n\nimport { signal, effect } from './signals.js';\nimport type { Signal, ReadonlySignal } from './signals.js';\n\n// --- useMediaQuery ---\n\n/**\n * Reactive media query matcher.\n *\n * ```ts\n * const isMobile = useMediaQuery('(max-width: 768px)');\n * isMobile(); // true/false, updates on resize\n * ```\n */\nexport function useMediaQuery(query: string): ReadonlySignal<boolean> {\n if (typeof window === 'undefined') {\n return (() => false) as ReadonlySignal<boolean>;\n }\n\n const mql = window.matchMedia(query);\n const matches = signal(mql.matches);\n\n const handler = (e: MediaQueryListEvent) => matches.set(e.matches);\n mql.addEventListener('change', handler);\n\n return (() => matches()) as ReadonlySignal<boolean>;\n}\n\n// --- useBreakpoint ---\n\nexport interface Breakpoints {\n [name: string]: number;\n}\n\nconst DEFAULT_BREAKPOINTS: Breakpoints = {\n sm: 640,\n md: 768,\n lg: 1024,\n xl: 1280,\n '2xl': 1536,\n};\n\n/**\n * Reactive breakpoint tracker (Tailwind-style).\n *\n * ```ts\n * const bp = useBreakpoint();\n * bp.current(); // 'md'\n * bp.gte('lg'); // false\n * bp.lt('sm'); // false\n * ```\n */\nexport function useBreakpoint(breakpoints: Breakpoints = DEFAULT_BREAKPOINTS) {\n const sorted = Object.entries(breakpoints).sort((a, b) => a[1] - b[1]);\n const width = signal(typeof window !== 'undefined' ? window.innerWidth : 1024);\n\n if (typeof window !== 'undefined') {\n const handler = () => width.set(window.innerWidth);\n window.addEventListener('resize', handler, { passive: true });\n }\n\n function current(): string {\n const w = width();\n let result = '';\n for (const [name, min] of sorted) {\n if (w >= min) result = name;\n }\n return result || sorted[0]?.[0] || '';\n }\n\n function gte(name: string): boolean {\n const bp = breakpoints[name];\n return bp !== undefined && width() >= bp;\n }\n\n function lt(name: string): boolean {\n const bp = breakpoints[name];\n return bp !== undefined && width() < bp;\n }\n\n return { current, gte, lt, width: (() => width()) as ReadonlySignal<number> };\n}\n\n// --- useStorage ---\n\n/**\n * Signal backed by localStorage or sessionStorage.\n * Persists across page refreshes.\n *\n * ```ts\n * const name = useStorage('user-name', 'Guest');\n * name(); // reads from localStorage or 'Guest'\n * name.set('Alice'); // writes to localStorage\n * ```\n */\nexport function useStorage<T>(\n key: string,\n initialValue: T,\n storage: 'local' | 'session' = 'local',\n): Signal<T> {\n const store = typeof window !== 'undefined'\n ? (storage === 'local' ? localStorage : sessionStorage)\n : null;\n\n // Read existing value\n let startValue = initialValue;\n if (store) {\n try {\n const raw = store.getItem(key);\n if (raw !== null) startValue = JSON.parse(raw);\n } catch { /* use initial */ }\n }\n\n const state = signal<T>(startValue);\n\n // Sync writes to storage\n if (store) {\n effect(() => {\n const value = state();\n try {\n store.setItem(key, JSON.stringify(value));\n } catch { /* storage full */ }\n });\n\n // Listen for changes from other tabs\n if (typeof window !== 'undefined') {\n window.addEventListener('storage', (e) => {\n if (e.key === key && e.newValue !== null) {\n try {\n state.set(JSON.parse(e.newValue));\n } catch { /* ignore */ }\n }\n });\n }\n }\n\n return state;\n}\n\n// --- useClipboard ---\n\n/**\n * Reactive clipboard access.\n *\n * ```ts\n * const { text, copy, copied } = useClipboard();\n * await copy('Hello');\n * copied(); // true for 2 seconds\n * ```\n */\nexport function useClipboard(options?: { timeout?: number }) {\n const text = signal('');\n const copied = signal(false);\n const timeout = options?.timeout ?? 2000;\n let timer: ReturnType<typeof setTimeout> | null = null;\n\n async function copy(value: string): Promise<void> {\n if (typeof navigator === 'undefined' || !navigator.clipboard) return;\n await navigator.clipboard.writeText(value);\n text.set(value);\n copied.set(true);\n if (timer) clearTimeout(timer);\n timer = setTimeout(() => copied.set(false), timeout);\n }\n\n return {\n text: (() => text()) as ReadonlySignal<string>,\n copied: (() => copied()) as ReadonlySignal<boolean>,\n copy,\n };\n}\n\n// --- useOnline ---\n\n/**\n * Reactive online/offline status.\n *\n * ```ts\n * const online = useOnline();\n * online(); // true/false\n * ```\n */\nexport function useOnline(): ReadonlySignal<boolean> {\n if (typeof window === 'undefined') {\n return (() => true) as ReadonlySignal<boolean>;\n }\n\n const online = signal(navigator.onLine);\n window.addEventListener('online', () => online.set(true));\n window.addEventListener('offline', () => online.set(false));\n\n return (() => online()) as ReadonlySignal<boolean>;\n}\n\n// --- useGeolocation ---\n\nexport interface GeolocationState {\n latitude: number | null;\n longitude: number | null;\n accuracy: number | null;\n error: GeolocationPositionError | null;\n loading: boolean;\n}\n\n/**\n * Reactive geolocation.\n *\n * ```ts\n * const geo = useGeolocation();\n * geo().latitude; // number | null\n * geo().loading; // boolean\n * ```\n */\nexport function useGeolocation(\n options?: PositionOptions,\n): ReadonlySignal<GeolocationState> {\n const state = signal<GeolocationState>({\n latitude: null,\n longitude: null,\n accuracy: null,\n error: null,\n loading: true,\n });\n\n if (typeof navigator !== 'undefined' && navigator.geolocation) {\n navigator.geolocation.watchPosition(\n (pos) => {\n state.set({\n latitude: pos.coords.latitude,\n longitude: pos.coords.longitude,\n accuracy: pos.coords.accuracy,\n error: null,\n loading: false,\n });\n },\n (err) => {\n state.set({\n latitude: null,\n longitude: null,\n accuracy: null,\n error: err,\n loading: false,\n });\n },\n options,\n );\n } else {\n state.set({ ...state(), loading: false });\n }\n\n return (() => state()) as ReadonlySignal<GeolocationState>;\n}\n\n// --- useWindowSize ---\n\n/**\n * Reactive window dimensions.\n */\nexport function useWindowSize() {\n const width = signal(typeof window !== 'undefined' ? window.innerWidth : 0);\n const height = signal(typeof window !== 'undefined' ? window.innerHeight : 0);\n\n if (typeof window !== 'undefined') {\n window.addEventListener('resize', () => {\n width.set(window.innerWidth);\n height.set(window.innerHeight);\n }, { passive: true });\n }\n\n return {\n width: (() => width()) as ReadonlySignal<number>,\n height: (() => height()) as ReadonlySignal<number>,\n };\n}\n\n// --- useClickOutside ---\n\n/**\n * Detect clicks outside an element. Essential for closing\n * dropdowns, modals, popovers, and context menus.\n *\n * ```ts\n * const dropdown = document.querySelector('.dropdown')!;\n * const dispose = useClickOutside(dropdown, () => {\n * closeDropdown();\n * });\n *\n * // With options:\n * useClickOutside(dropdown, onClose, {\n * events: ['mousedown', 'touchstart'],\n * ignore: ['.trigger-button'],\n * });\n * ```\n */\nexport function useClickOutside(\n target: HTMLElement | (() => HTMLElement | null),\n handler: (event: Event) => void,\n options: {\n /** Events to listen for (default: ['pointerdown']) */\n events?: string[];\n /** Selectors or elements to ignore (clicks on these won't trigger) */\n ignore?: (string | HTMLElement)[];\n /** Whether the listener is active (default: true) */\n active?: boolean;\n } = {},\n): () => void {\n if (typeof document === 'undefined') return () => {};\n\n const {\n events = ['pointerdown'],\n ignore = [],\n active = true,\n } = options;\n\n let isActive = active;\n\n function getTarget(): HTMLElement | null {\n return typeof target === 'function' ? target() : target;\n }\n\n function shouldIgnore(event: Event): boolean {\n const eventTarget = event.target as HTMLElement;\n if (!eventTarget) return false;\n\n for (const pattern of ignore) {\n if (typeof pattern === 'string') {\n if (eventTarget.closest(pattern)) return true;\n } else {\n if (pattern === eventTarget || pattern.contains(eventTarget)) return true;\n }\n }\n return false;\n }\n\n function listener(event: Event): void {\n if (!isActive) return;\n const el = getTarget();\n if (!el) return;\n\n const eventTarget = event.target as Node;\n if (el === eventTarget || el.contains(eventTarget)) return;\n if (shouldIgnore(event)) return;\n\n handler(event);\n }\n\n for (const eventName of events) {\n document.addEventListener(eventName, listener, { passive: true, capture: true });\n }\n\n const dispose = () => {\n for (const eventName of events) {\n document.removeEventListener(eventName, listener, { capture: true } as EventListenerOptions);\n }\n };\n\n // Attach enable/disable to dispose function\n (dispose as any).enable = () => { isActive = true; };\n (dispose as any).disable = () => { isActive = false; };\n\n return dispose;\n}\n","/**\n * <Portal> component.\n *\n * Renders children into a different DOM node, outside the\n * component tree. Essential for modals, tooltips, toasts,\n * dropdowns, and overlays.\n *\n * ```html\n * <Portal target=\"body\">\n * <div class=\"modal\">Modal content</div>\n * </Portal>\n *\n * <Portal target=\"#tooltip-container\">\n * <Tooltip />\n * </Portal>\n * ```\n */\n\nimport { defineComponent, onUnmount } from './component.js';\nimport { nodeToDOM } from './dom.js';\nimport type { AkashNode } from './types.js';\n\nexport interface PortalProps {\n /** CSS selector or HTMLElement to render into (default: document.body) */\n target?: string | HTMLElement;\n}\n\n/**\n * <Portal> — render children into a different DOM location.\n */\nexport const Portal = defineComponent<PortalProps>((ctx) => {\n let container: HTMLElement | null = null;\n let mountedNode: Node | null = null;\n\n function getTarget(): HTMLElement {\n const target = ctx.props.target;\n if (!target) return document.body;\n if (typeof target === 'string') {\n return document.querySelector<HTMLElement>(target) ?? document.body;\n }\n return target;\n }\n\n onUnmount(() => {\n if (mountedNode && container) {\n container.removeChild(mountedNode);\n }\n });\n\n return () => {\n container = getTarget();\n const content = ctx.children();\n mountedNode = nodeToDOM(content);\n container.appendChild(mountedNode);\n\n // Return a placeholder comment in the original tree\n return document.createComment('portal');\n };\n});\n","/**\n * Toast notification system.\n *\n * Signal-based toast queue with auto-dismiss, stacking, and positions.\n *\n * ```ts\n * const toast = createToaster();\n * toast.success('Saved!');\n * toast.error('Something went wrong');\n * toast.info('Tip: try dark mode', { duration: 5000 });\n * toast.toasts(); // reactive list of active toasts\n * ```\n */\n\nimport { signal } from './signals.js';\nimport type { ReadonlySignal } from './signals.js';\n\n// --- Types ---\n\nexport type ToastType = 'success' | 'error' | 'info' | 'warning';\n\nexport type ToastPosition =\n | 'top-right' | 'top-left' | 'top-center'\n | 'bottom-right' | 'bottom-left' | 'bottom-center';\n\nexport interface Toast {\n id: string;\n type: ToastType;\n message: string;\n duration: number;\n dismissible: boolean;\n createdAt: number;\n}\n\nexport interface ToastOptions {\n /** Duration in ms (default: 3000, 0 = no auto-dismiss) */\n duration?: number;\n /** Whether the toast can be manually dismissed (default: true) */\n dismissible?: boolean;\n}\n\nexport interface ToasterOptions {\n /** Max visible toasts (default: 5) */\n maxVisible?: number;\n /** Default duration in ms (default: 3000) */\n defaultDuration?: number;\n /** Position (default: 'top-right') */\n position?: ToastPosition;\n}\n\nexport interface Toaster {\n /** Active toasts (reactive signal) */\n toasts: ReadonlySignal<Toast[]>;\n /** Position setting */\n position: ToastPosition;\n /** Show a success toast */\n success(message: string, options?: ToastOptions): string;\n /** Show an error toast */\n error(message: string, options?: ToastOptions): string;\n /** Show an info toast */\n info(message: string, options?: ToastOptions): string;\n /** Show a warning toast */\n warning(message: string, options?: ToastOptions): string;\n /** Show a toast with custom type */\n add(type: ToastType, message: string, options?: ToastOptions): string;\n /** Dismiss a specific toast */\n dismiss(id: string): void;\n /** Dismiss all toasts */\n dismissAll(): void;\n}\n\n// --- Implementation ---\n\nlet idCounter = 0;\n\n/**\n * Create a toast notification manager.\n */\nexport function createToaster(options: ToasterOptions = {}): Toaster {\n const {\n maxVisible = 5,\n defaultDuration = 3000,\n position = 'top-right',\n } = options;\n\n const toasts = signal<Toast[]>([]);\n const timers = new Map<string, ReturnType<typeof setTimeout>>();\n\n function add(type: ToastType, message: string, opts?: ToastOptions): string {\n const id = `toast-${++idCounter}`;\n const duration = opts?.duration ?? defaultDuration;\n const dismissible = opts?.dismissible ?? true;\n\n const toast: Toast = {\n id,\n type,\n message,\n duration,\n dismissible,\n createdAt: Date.now(),\n };\n\n toasts.update((list) => {\n const next = [...list, toast];\n // Trim to maxVisible\n if (next.length > maxVisible) {\n const removed = next.shift()!;\n clearTimer(removed.id);\n }\n return next;\n });\n\n // Auto-dismiss\n if (duration > 0) {\n const timer = setTimeout(() => dismiss(id), duration);\n timers.set(id, timer);\n }\n\n return id;\n }\n\n function dismiss(id: string): void {\n clearTimer(id);\n toasts.update((list) => list.filter((t) => t.id !== id));\n }\n\n function dismissAll(): void {\n for (const [id] of timers) {\n clearTimer(id);\n }\n toasts.set([]);\n }\n\n function clearTimer(id: string): void {\n const timer = timers.get(id);\n if (timer) {\n clearTimeout(timer);\n timers.delete(id);\n }\n }\n\n return {\n toasts: (() => toasts()) as ReadonlySignal<Toast[]>,\n position,\n success: (msg, opts) => add('success', msg, opts),\n error: (msg, opts) => add('error', msg, opts),\n info: (msg, opts) => add('info', msg, opts),\n warning: (msg, opts) => add('warning', msg, opts),\n add,\n dismiss,\n dismissAll,\n };\n}\n","/**\n * Theme / dark mode system.\n *\n * Signal-based theme management with system preference detection,\n * CSS variable injection, and localStorage persistence.\n *\n * ```ts\n * const theme = useTheme({\n * themes: {\n * light: { '--bg': '#fff', '--text': '#111' },\n * dark: { '--bg': '#111', '--text': '#eee' },\n * },\n * });\n *\n * theme.current(); // 'light' or 'dark'\n * theme.toggle(); // switch between light/dark\n * theme.set('dark'); // set explicitly\n * theme.isDark(); // boolean\n * ```\n */\n\nimport { signal, computed, effect } from './signals.js';\nimport type { ReadonlySignal } from './signals.js';\n\n// --- Types ---\n\nexport type ThemeVariables = Record<string, string>;\n\nexport interface ThemeConfig {\n /** Theme definitions (name → CSS variables) */\n themes?: Record<string, ThemeVariables>;\n /** Default theme name (default: auto-detect from system) */\n defaultTheme?: string;\n /** localStorage key for persistence (default: 'akash-theme') */\n storageKey?: string;\n /** CSS attribute to set on <html> (default: 'data-theme') */\n attribute?: string;\n /** Whether to sync with system preference (default: true) */\n syncSystem?: boolean;\n}\n\nexport interface Theme {\n /** Current theme name (reactive) */\n current: ReadonlySignal<string>;\n /** Whether dark mode is active */\n isDark: ReadonlySignal<boolean>;\n /** Set a specific theme */\n set(theme: string): void;\n /** Toggle between light and dark */\n toggle(): void;\n /** Set the system preference strategy */\n setSystem(): void;\n /** Available theme names */\n themes: string[];\n}\n\n// --- Implementation ---\n\n/**\n * Create a theme manager with system preference detection and persistence.\n */\nexport function useTheme(config: ThemeConfig = {}): Theme {\n const {\n themes = {\n light: {},\n dark: {},\n },\n storageKey = 'akash-theme',\n attribute = 'data-theme',\n syncSystem = true,\n } = config;\n\n const themeNames = Object.keys(themes);\n\n // Detect system preference\n function getSystemTheme(): string {\n if (typeof window === 'undefined') return config.defaultTheme ?? 'light';\n return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';\n }\n\n // Read persisted theme or use default\n function getInitialTheme(): string {\n if (typeof window !== 'undefined' && storageKey) {\n const stored = localStorage.getItem(storageKey);\n if (stored && themeNames.includes(stored)) return stored;\n }\n return config.defaultTheme ?? getSystemTheme();\n }\n\n const current = signal(getInitialTheme());\n const isDark = computed(() => current() === 'dark');\n\n // Apply theme\n function applyTheme(name: string): void {\n if (typeof document === 'undefined') return;\n\n // Set attribute on <html>\n document.documentElement.setAttribute(attribute, name);\n\n // Apply CSS variables\n const vars = themes[name];\n if (vars) {\n for (const [key, value] of Object.entries(vars)) {\n document.documentElement.style.setProperty(key, value);\n }\n }\n\n // Add/remove class for convenience\n document.documentElement.classList.remove(...themeNames);\n document.documentElement.classList.add(name);\n }\n\n // React to theme changes\n effect(() => {\n const name = current();\n applyTheme(name);\n\n // Persist\n if (typeof window !== 'undefined' && storageKey) {\n localStorage.setItem(storageKey, name);\n }\n });\n\n // Sync with system preference changes\n if (syncSystem && typeof window !== 'undefined') {\n const mql = window.matchMedia('(prefers-color-scheme: dark)');\n mql.addEventListener('change', (e) => {\n // Only auto-switch if user hasn't manually overridden\n const stored = localStorage.getItem(storageKey);\n if (!stored) {\n current.set(e.matches ? 'dark' : 'light');\n }\n });\n }\n\n return {\n current: () => current(),\n isDark,\n set(theme: string) {\n if (themeNames.includes(theme)) {\n current.set(theme);\n }\n },\n toggle() {\n current.set(isDark() ? 'light' : 'dark');\n },\n setSystem() {\n if (typeof window !== 'undefined' && storageKey) {\n localStorage.removeItem(storageKey);\n }\n current.set(getSystemTheme());\n },\n themes: themeNames,\n };\n}\n","/**\n * <VirtualFor> — virtualized list rendering.\n *\n * Only renders items visible in the viewport plus a small overscan\n * buffer. Essential for rendering thousands of items without\n * destroying performance.\n *\n * ```html\n * <VirtualFor\n * each={items()}\n * key={(item) => item.id}\n * itemHeight={40}\n * overscan={5}\n * >\n * {(item) => <div class=\"row\">{item.name}</div>}\n * </VirtualFor>\n * ```\n */\n\nimport { signal, effect, computed } from './signals.js';\nimport { defineComponent } from './component.js';\nimport { nodeToDOM } from './dom.js';\nimport type { AkashNode } from './types.js';\nimport type { ReadonlySignal } from './signals.js';\n\n// --- Types ---\n\nexport interface VirtualForProps<T> {\n /** Array of items */\n each: T[];\n /** Key function for reconciliation */\n key: (item: T) => unknown;\n /** Fixed height per item in pixels */\n itemHeight: number;\n /** Container height in pixels (default: auto-detect from parent) */\n containerHeight?: number;\n /** Number of extra items to render above/below viewport */\n overscan?: number;\n /** Render function for each item */\n children: (item: T, index: number) => AkashNode;\n}\n\n// --- Virtual scroll calculations ---\n\nexport interface VirtualRange {\n /** First visible index */\n start: number;\n /** Last visible index (exclusive) */\n end: number;\n /** Total content height in pixels */\n totalHeight: number;\n /** Offset of the first rendered item */\n offsetTop: number;\n}\n\n/**\n * Calculate the visible range given scroll position and dimensions.\n */\nexport function calculateRange(\n scrollTop: number,\n containerHeight: number,\n itemHeight: number,\n totalItems: number,\n overscan = 3,\n): VirtualRange {\n const firstVisible = Math.floor(scrollTop / itemHeight);\n const visibleCount = Math.ceil(containerHeight / itemHeight);\n\n const start = Math.max(0, firstVisible - overscan);\n const end = Math.min(totalItems, firstVisible + visibleCount + overscan);\n\n return {\n start,\n end,\n totalHeight: totalItems * itemHeight,\n offsetTop: start * itemHeight,\n };\n}\n\n// --- useVirtualList composable ---\n\n/**\n * Low-level virtual list composable for custom implementations.\n *\n * ```ts\n * const { containerRef, range, visibleItems } = useVirtualList({\n * items: () => allItems(),\n * itemHeight: 40,\n * overscan: 5,\n * });\n * ```\n */\nexport function useVirtualList<T>(options: {\n items: () => T[];\n itemHeight: number;\n containerHeight?: number;\n overscan?: number;\n}) {\n const scrollTop = signal(0);\n const containerHeight = signal(options.containerHeight ?? 400);\n const overscan = options.overscan ?? 3;\n\n const range = computed((): VirtualRange => {\n return calculateRange(\n scrollTop(),\n containerHeight(),\n options.itemHeight,\n options.items().length,\n overscan,\n );\n });\n\n const visibleItems = computed(() => {\n const r = range();\n return options.items().slice(r.start, r.end).map((item, i) => ({\n item,\n index: r.start + i,\n }));\n });\n\n function onScroll(e: Event): void {\n const target = e.target as HTMLElement;\n scrollTop.set(target.scrollTop);\n }\n\n function setContainerHeight(height: number): void {\n containerHeight.set(height);\n }\n\n return {\n range,\n visibleItems,\n onScroll,\n setContainerHeight,\n scrollTop: (() => scrollTop()) as ReadonlySignal<number>,\n };\n}\n\n// --- <VirtualFor> component ---\n\nexport const VirtualFor = defineComponent<VirtualForProps<any>>((ctx) => {\n const {\n itemHeight,\n containerHeight: fixedHeight,\n overscan = 3,\n } = ctx.props;\n\n const scrollTop = signal(0);\n\n return () => {\n const items = ctx.props.each;\n const height = fixedHeight ?? 400;\n\n const r = calculateRange(scrollTop(), height, itemHeight, items.length, overscan);\n\n // Outer container (scrollable)\n const outer = document.createElement('div');\n outer.style.height = `${height}px`;\n outer.style.overflow = 'auto';\n outer.style.position = 'relative';\n\n outer.addEventListener('scroll', () => {\n scrollTop.set(outer.scrollTop);\n }, { passive: true });\n\n // Inner spacer (total height)\n const inner = document.createElement('div');\n inner.style.height = `${r.totalHeight}px`;\n inner.style.position = 'relative';\n\n // Rendered items container\n const content = document.createElement('div');\n content.style.position = 'absolute';\n content.style.top = `${r.offsetTop}px`;\n content.style.left = '0';\n content.style.right = '0';\n\n // Render visible items\n for (let i = r.start; i < r.end; i++) {\n const item = items[i];\n if (!item) continue;\n\n const row = nodeToDOM(ctx.props.children(item, i));\n if (row instanceof HTMLElement) {\n row.style.height = `${itemHeight}px`;\n }\n content.appendChild(row);\n }\n\n inner.appendChild(content);\n outer.appendChild(inner);\n return outer;\n };\n});\n","/**\n * defineAsyncComponent — lazy component loading.\n *\n * Wraps a dynamic import() into a component that shows a loading\n * state while the chunk downloads, an error state if it fails,\n * and the real component once resolved.\n *\n * ```ts\n * const LazyChart = defineAsyncComponent(() => import('./Chart.akash'));\n *\n * // With loading/error:\n * const LazyChart = defineAsyncComponent({\n * loader: () => import('./Chart.akash'),\n * loading: () => <Spinner />,\n * error: (err) => <p>Failed: {err.message}</p>,\n * timeout: 10000,\n * });\n * ```\n */\n\nimport { defineComponent } from './component.js';\nimport { signal } from './signals.js';\nimport { nodeToDOM } from './dom.js';\nimport type { Component } from './component.js';\nimport type { AkashNode } from './types.js';\n\n// --- Types ---\n\nexport type AsyncComponentLoader<P extends Record<string, unknown> = any> =\n () => Promise<{ default: Component<P> }>;\n\nexport interface AsyncComponentOptions<P extends Record<string, unknown> = any> {\n /** The async loader function (dynamic import) */\n loader: AsyncComponentLoader<P>;\n /** Component to show while loading */\n loading?: () => AkashNode;\n /** Component to show on error */\n error?: (error: Error) => AkashNode;\n /** Timeout in ms — show error after this (default: none) */\n timeout?: number;\n /** Delay in ms before showing loading state (default: 200) */\n delay?: number;\n}\n\n// --- defineAsyncComponent ---\n\n/**\n * Define a component that loads asynchronously via dynamic import.\n */\nexport function defineAsyncComponent<P extends Record<string, unknown> = any>(\n loaderOrOptions: AsyncComponentLoader<P> | AsyncComponentOptions<P>,\n): Component<P> {\n const options: AsyncComponentOptions<P> =\n typeof loaderOrOptions === 'function'\n ? { loader: loaderOrOptions }\n : loaderOrOptions;\n\n const {\n loader,\n loading: loadingFn,\n error: errorFn,\n timeout,\n delay = 200,\n } = options;\n\n // Cache the loaded component\n let resolvedComp: Component<P> | null = null;\n let loadPromise: Promise<void> | null = null;\n let loadError: Error | null = null;\n\n function startLoad(): Promise<void> {\n if (loadPromise) return loadPromise;\n\n loadPromise = loader()\n .then((mod) => {\n resolvedComp = mod.default;\n })\n .catch((err) => {\n loadError = err instanceof Error ? err : new Error(String(err));\n });\n\n return loadPromise;\n }\n\n return defineComponent<P>((ctx) => {\n const state = signal<'loading' | 'ready' | 'error'>('loading');\n const showLoading = signal(false);\n\n // Start loading\n startLoad().then(() => {\n if (loadError) {\n state.set('error');\n } else {\n state.set('ready');\n }\n });\n\n // Delay before showing loading indicator\n let delayTimer: ReturnType<typeof setTimeout> | null = null;\n if (delay > 0) {\n delayTimer = setTimeout(() => showLoading.set(true), delay);\n } else {\n showLoading.set(true);\n }\n\n // Timeout\n let timeoutTimer: ReturnType<typeof setTimeout> | null = null;\n if (timeout) {\n timeoutTimer = setTimeout(() => {\n if (state() === 'loading') {\n loadError = new Error(`Async component timed out after ${timeout}ms`);\n state.set('error');\n }\n }, timeout);\n }\n\n return () => {\n const s = state();\n\n // Clear timers once resolved\n if (s !== 'loading') {\n if (delayTimer) clearTimeout(delayTimer);\n if (timeoutTimer) clearTimeout(timeoutTimer);\n }\n\n if (s === 'ready' && resolvedComp) {\n return resolvedComp(ctx.props as any);\n }\n\n if (s === 'error' && errorFn && loadError) {\n return nodeToDOM(errorFn(loadError));\n }\n\n if (s === 'loading' && showLoading() && loadingFn) {\n return nodeToDOM(loadingFn());\n }\n\n // Nothing to show yet\n return document.createComment('async-loading');\n };\n });\n}\n","/**\n * List reconciliation with Longest Increasing Subsequence (LIS).\n *\n * When a keyed list updates, we need to determine the minimal set of\n * DOM operations (inserts, moves, removes). The LIS of the new key\n * positions tells us which nodes are already in the correct relative\n * order and don't need to move.\n *\n * This is the same algorithm used by Vue 3, Solid, and Inferno.\n */\n\n/**\n * Find the Longest Increasing Subsequence of indices.\n * Returns the indices into the input array that form the LIS.\n *\n * Time: O(n log n), Space: O(n)\n */\nexport function longestIncreasingSubsequence(arr: number[]): number[] {\n const n = arr.length;\n if (n === 0) return [];\n\n // tails[i] = smallest tail value for increasing subsequence of length i+1\n const tails: number[] = [];\n // predecessors[i] = index of previous element in the LIS ending at i\n const predecessors: number[] = new Array(n).fill(-1);\n // indices[i] = index in arr of the tail for length i+1\n const indices: number[] = [];\n\n for (let i = 0; i < n; i++) {\n const value = arr[i];\n\n // Skip items not in the old list (marked as -1)\n if (value === -1) continue;\n\n // Binary search for the position to insert/replace\n let lo = 0;\n let hi = tails.length;\n\n while (lo < hi) {\n const mid = (lo + hi) >> 1;\n if (tails[mid] < value) {\n lo = mid + 1;\n } else {\n hi = mid;\n }\n }\n\n tails[lo] = value;\n indices[lo] = i;\n\n if (lo > 0) {\n predecessors[i] = indices[lo - 1];\n }\n }\n\n // Reconstruct the LIS by following predecessors\n const result: number[] = new Array(tails.length);\n let k = indices[tails.length - 1];\n\n for (let i = tails.length - 1; i >= 0; i--) {\n result[i] = k;\n k = predecessors[k];\n }\n\n return result;\n}\n\n/**\n * Reconcile two keyed lists and return the minimal DOM operations.\n *\n * @param oldKeys - Keys of the current DOM list\n * @param newKeys - Keys of the new data list\n * @returns Operations to transform old into new\n */\nexport interface ReconcileOp {\n type: 'insert' | 'move' | 'remove';\n /** Index in the NEW array (for insert/move) */\n newIndex?: number;\n /** Index in the OLD array (for remove/move source) */\n oldIndex?: number;\n}\n\nexport function reconcileKeys(\n oldKeys: unknown[],\n newKeys: unknown[],\n): ReconcileOp[] {\n const ops: ReconcileOp[] = [];\n\n // Build old key → index map\n const oldKeyMap = new Map<unknown, number>();\n for (let i = 0; i < oldKeys.length; i++) {\n oldKeyMap.set(oldKeys[i], i);\n }\n\n // For each new key, find its position in old (or -1 if new)\n const newToOld: number[] = new Array(newKeys.length);\n for (let i = 0; i < newKeys.length; i++) {\n newToOld[i] = oldKeyMap.get(newKeys[i]) ?? -1;\n }\n\n // Find nodes that need to be removed (in old but not in new)\n const newKeySet = new Set(newKeys);\n for (let i = 0; i < oldKeys.length; i++) {\n if (!newKeySet.has(oldKeys[i])) {\n ops.push({ type: 'remove', oldIndex: i });\n }\n }\n\n // Find the LIS of old indices — these nodes stay in place\n const lis = new Set(longestIncreasingSubsequence(newToOld));\n\n // Nodes not in the LIS need to be moved or inserted\n for (let i = 0; i < newKeys.length; i++) {\n if (newToOld[i] === -1) {\n // New item — insert\n ops.push({ type: 'insert', newIndex: i });\n } else if (!lis.has(i)) {\n // Existing item not in LIS — move\n ops.push({ type: 'move', newIndex: i, oldIndex: newToOld[i] });\n }\n // Items in LIS stay in place — no op needed\n }\n\n return ops;\n}\n\n/**\n * Count the minimum number of DOM operations needed.\n */\nexport function countOps(oldKeys: unknown[], newKeys: unknown[]): {\n inserts: number;\n moves: number;\n removes: number;\n} {\n const ops = reconcileKeys(oldKeys, newKeys);\n let inserts = 0, moves = 0, removes = 0;\n for (const op of ops) {\n if (op.type === 'insert') inserts++;\n else if (op.type === 'move') moves++;\n else removes++;\n }\n return { inserts, moves, removes };\n}\n","/**\n * Effect disposal and leak detection (dev mode).\n *\n * In development, tracks all created effects and verifies they\n * get properly cleaned up when components unmount. Logs warnings\n * for leaked effects that were never disposed.\n */\n\nimport type { ScheduledEffect } from './scheduler.js';\n\n// --- Tracking state ---\n\nlet tracking = false;\nconst activeEffects = new Map<number, EffectRecord>();\nlet effectIdCounter = 0;\n\ninterface EffectRecord {\n id: number;\n createdAt: number;\n stackTrace: string | null;\n componentName: string | null;\n disposed: boolean;\n}\n\n// --- Public API ---\n\n/**\n * Enable leak detection. Call once at app startup in dev mode.\n *\n * ```ts\n * if (import.meta.env.DEV) {\n * enableLeakDetection();\n * }\n * ```\n */\nexport function enableLeakDetection(): void {\n tracking = true;\n}\n\n/**\n * Disable leak detection.\n */\nexport function disableLeakDetection(): void {\n tracking = false;\n activeEffects.clear();\n}\n\n/**\n * Check if leak detection is enabled.\n */\nexport function isLeakDetectionEnabled(): boolean {\n return tracking;\n}\n\n/**\n * Register an effect for tracking. Called internally by effect().\n * Returns an ID for later disposal tracking.\n */\nexport function trackEffect(componentName?: string): number {\n if (!tracking) return -1;\n\n const id = ++effectIdCounter;\n activeEffects.set(id, {\n id,\n createdAt: Date.now(),\n stackTrace: captureStack(),\n componentName: componentName ?? null,\n disposed: false,\n });\n\n return id;\n}\n\n/**\n * Mark an effect as disposed. Called internally by effect dispose function.\n */\nexport function untrackEffect(id: number): void {\n if (!tracking || id === -1) return;\n\n const record = activeEffects.get(id);\n if (record) {\n record.disposed = true;\n activeEffects.delete(id);\n }\n}\n\n/**\n * Get all currently active (undisposed) effects.\n */\nexport function getActiveEffects(): EffectRecord[] {\n return Array.from(activeEffects.values());\n}\n\n/**\n * Check for leaked effects and return warnings.\n * An effect is considered leaked if it's been active for longer\n * than the given threshold without being disposed.\n */\nexport function checkForLeaks(thresholdMs = 30000): LeakWarning[] {\n if (!tracking) return [];\n\n const now = Date.now();\n const warnings: LeakWarning[] = [];\n\n for (const record of activeEffects.values()) {\n if (!record.disposed && now - record.createdAt > thresholdMs) {\n warnings.push({\n effectId: record.id,\n age: now - record.createdAt,\n componentName: record.componentName,\n stackTrace: record.stackTrace,\n });\n }\n }\n\n return warnings;\n}\n\n/**\n * Log leak warnings to the console.\n */\nexport function reportLeaks(thresholdMs = 30000): void {\n const leaks = checkForLeaks(thresholdMs);\n if (leaks.length === 0) return;\n\n console.warn(\n `[AkashJS] ${leaks.length} potential effect leak(s) detected:`,\n );\n for (const leak of leaks) {\n const component = leak.componentName ? ` in ${leak.componentName}` : '';\n console.warn(\n ` Effect #${leak.effectId}${component} — active for ${(leak.age / 1000).toFixed(1)}s`,\n );\n if (leak.stackTrace) {\n console.warn(` Created at:\\n${leak.stackTrace}`);\n }\n }\n}\n\n/**\n * Get a summary of effect tracking state.\n */\nexport function getLeakDetectionStats(): {\n enabled: boolean;\n activeCount: number;\n totalTracked: number;\n} {\n return {\n enabled: tracking,\n activeCount: activeEffects.size,\n totalTracked: effectIdCounter,\n };\n}\n\n// --- Types ---\n\nexport interface LeakWarning {\n effectId: number;\n age: number;\n componentName: string | null;\n stackTrace: string | null;\n}\n\n// --- Internal ---\n\nfunction captureStack(): string | null {\n try {\n const err = new Error();\n const stack = err.stack;\n if (!stack) return null;\n // Remove first 3 lines (Error, captureStack, trackEffect)\n const lines = stack.split('\\n');\n return lines.slice(3, 8).join('\\n');\n } catch {\n return null;\n }\n}\n","/**\n * Accessibility composables.\n *\n * Built-in a11y primitives that no other framework ships natively.\n * Focus management, screen reader announcements, and keyboard shortcuts.\n */\n\nimport { signal } from './signals.js';\nimport type { ReadonlySignal } from './signals.js';\n\n// =========================================================================\n// useFocusTrap\n// =========================================================================\n\nexport interface FocusTrapOptions {\n /** CSS selector or element to focus initially (default: first focusable) */\n initialFocus?: string | HTMLElement;\n /** Return focus to the previously focused element on deactivate */\n returnFocus?: boolean;\n /** Escape key deactivates the trap (default: true) */\n escapeDeactivates?: boolean;\n /** Allow clicks outside the trap container (default: false) */\n allowOutsideClick?: boolean;\n /** Callback when Escape deactivates */\n onDeactivate?: () => void;\n}\n\nexport interface FocusTrap {\n /** Activate the focus trap */\n activate(): void;\n /** Deactivate the focus trap */\n deactivate(): void;\n /** Whether the trap is currently active */\n active: ReadonlySignal<boolean>;\n}\n\nconst FOCUSABLE_SELECTOR = [\n 'a[href]', 'button:not([disabled])', 'input:not([disabled])',\n 'select:not([disabled])', 'textarea:not([disabled])',\n '[tabindex]:not([tabindex=\"-1\"])', '[contenteditable]',\n].join(', ');\n\n/**\n * Trap focus inside a container element.\n *\n * ```ts\n * const trap = useFocusTrap(dialogRef, {\n * initialFocus: '#first-input',\n * returnFocus: true,\n * escapeDeactivates: true,\n * });\n * trap.activate(); // on open\n * trap.deactivate(); // on close\n * ```\n */\nexport function useFocusTrap(\n container: HTMLElement | (() => HTMLElement | null),\n options: FocusTrapOptions = {},\n): FocusTrap {\n const {\n initialFocus,\n returnFocus = true,\n escapeDeactivates = true,\n allowOutsideClick = false,\n onDeactivate,\n } = options;\n\n const active = signal(false);\n let previouslyFocused: HTMLElement | null = null;\n\n function getContainer(): HTMLElement | null {\n return typeof container === 'function' ? container() : container;\n }\n\n function getFocusableElements(): HTMLElement[] {\n const el = getContainer();\n if (!el) return [];\n return Array.from(el.querySelectorAll<HTMLElement>(FOCUSABLE_SELECTOR));\n }\n\n function handleKeyDown(e: KeyboardEvent): void {\n if (e.key === 'Escape' && escapeDeactivates) {\n e.preventDefault();\n deactivate();\n onDeactivate?.();\n return;\n }\n\n if (e.key !== 'Tab') return;\n\n const focusable = getFocusableElements();\n if (focusable.length === 0) return;\n\n const first = focusable[0];\n const last = focusable[focusable.length - 1];\n\n if (e.shiftKey) {\n // Shift+Tab: wrap from first to last\n if (document.activeElement === first) {\n e.preventDefault();\n last.focus();\n }\n } else {\n // Tab: wrap from last to first\n if (document.activeElement === last) {\n e.preventDefault();\n first.focus();\n }\n }\n }\n\n function handleFocusOut(e: FocusEvent): void {\n if (!active() || allowOutsideClick) return;\n const el = getContainer();\n if (!el) return;\n\n const relatedTarget = e.relatedTarget as HTMLElement | null;\n if (relatedTarget && !el.contains(relatedTarget)) {\n // Focus escaped — pull it back\n const focusable = getFocusableElements();\n if (focusable.length > 0) {\n focusable[0].focus();\n }\n }\n }\n\n function activate(): void {\n if (active()) return;\n active.set(true);\n\n previouslyFocused = document.activeElement as HTMLElement | null;\n\n document.addEventListener('keydown', handleKeyDown, true);\n\n const el = getContainer();\n if (el) {\n el.addEventListener('focusout', handleFocusOut);\n }\n\n // Focus the initial element\n requestAnimationFrame(() => {\n if (initialFocus) {\n const target = typeof initialFocus === 'string'\n ? getContainer()?.querySelector<HTMLElement>(initialFocus)\n : initialFocus;\n target?.focus();\n } else {\n const focusable = getFocusableElements();\n if (focusable.length > 0) focusable[0].focus();\n }\n });\n }\n\n function deactivate(): void {\n if (!active()) return;\n active.set(false);\n\n document.removeEventListener('keydown', handleKeyDown, true);\n\n const el = getContainer();\n if (el) {\n el.removeEventListener('focusout', handleFocusOut);\n }\n\n if (returnFocus && previouslyFocused) {\n previouslyFocused.focus();\n previouslyFocused = null;\n }\n }\n\n return {\n activate,\n deactivate,\n active: () => active(),\n };\n}\n\n// =========================================================================\n// useAnnounce\n// =========================================================================\n\nexport type AriaLive = 'polite' | 'assertive' | 'off';\n\nlet announceRegion: HTMLElement | null = null;\n\nfunction ensureAnnounceRegion(): HTMLElement {\n if (announceRegion && document.body.contains(announceRegion)) {\n return announceRegion;\n }\n\n const el = document.createElement('div');\n el.setAttribute('role', 'status');\n el.setAttribute('aria-live', 'polite');\n el.setAttribute('aria-atomic', 'true');\n el.style.cssText = [\n 'position: absolute',\n 'width: 1px',\n 'height: 1px',\n 'padding: 0',\n 'margin: -1px',\n 'overflow: hidden',\n 'clip: rect(0,0,0,0)',\n 'white-space: nowrap',\n 'border: 0',\n ].join('; ');\n\n document.body.appendChild(el);\n announceRegion = el;\n return el;\n}\n\n/**\n * Screen reader announcements via ARIA live regions.\n *\n * ```ts\n * const announce = useAnnounce();\n * announce('Page loaded: Dashboard');\n * announce('Error: Invalid email', 'assertive');\n * ```\n */\nexport function useAnnounce(): (message: string, politeness?: AriaLive) => void {\n return (message: string, politeness: AriaLive = 'polite') => {\n if (typeof document === 'undefined') return;\n\n const region = ensureAnnounceRegion();\n region.setAttribute('aria-live', politeness);\n\n // Clear then set to trigger announcement\n region.textContent = '';\n requestAnimationFrame(() => {\n region.textContent = message;\n });\n };\n}\n\n// =========================================================================\n// useKeyboard\n// =========================================================================\n\nexport interface KeyBinding {\n /** Key combo: 'mod+k', 'Escape', 'ArrowDown', 'shift+Enter' */\n key: string;\n /** Handler function */\n handler: (e: KeyboardEvent) => void;\n /** Optional scope (only active when scope is enabled) */\n scope?: string;\n /** Description for help dialog */\n description?: string;\n /** Prevent default browser behavior (default: true) */\n preventDefault?: boolean;\n}\n\nexport interface KeyboardManager {\n /** Register a binding */\n bind(key: string, handler: (e: KeyboardEvent) => void, options?: {\n scope?: string;\n description?: string;\n preventDefault?: boolean;\n }): () => void;\n /** Enable a scope */\n enableScope(scope: string): void;\n /** Disable a scope */\n disableScope(scope: string): void;\n /** Get all bindings (for help dialog) */\n getBindings(): Array<{ key: string; description: string; scope?: string }>;\n /** Dispose all bindings */\n dispose(): void;\n}\n\n/**\n * Keyboard shortcut manager with scope support.\n *\n * ```ts\n * const kb = useKeyboard();\n * kb.bind('mod+k', () => openSearch(), { description: 'Open search' });\n * kb.bind('Escape', () => close(), { scope: 'modal' });\n * kb.enableScope('modal');\n * ```\n */\nexport function useKeyboard(): KeyboardManager {\n const bindings: KeyBinding[] = [];\n const activeScopes = new Set<string>();\n let listening = false;\n\n function handleKeyDown(e: KeyboardEvent): void {\n for (const binding of bindings) {\n if (binding.scope && !activeScopes.has(binding.scope)) continue;\n if (matchesKey(e, binding.key)) {\n if (binding.preventDefault !== false) {\n e.preventDefault();\n }\n binding.handler(e);\n return;\n }\n }\n }\n\n function startListening(): void {\n if (listening) return;\n if (typeof document === 'undefined') return;\n document.addEventListener('keydown', handleKeyDown);\n listening = true;\n }\n\n function bind(\n key: string,\n handler: (e: KeyboardEvent) => void,\n options?: { scope?: string; description?: string; preventDefault?: boolean },\n ): () => void {\n const binding: KeyBinding = {\n key,\n handler,\n scope: options?.scope,\n description: options?.description ?? '',\n preventDefault: options?.preventDefault,\n };\n bindings.push(binding);\n startListening();\n\n return () => {\n const idx = bindings.indexOf(binding);\n if (idx !== -1) bindings.splice(idx, 1);\n };\n }\n\n return {\n bind,\n enableScope(scope: string) { activeScopes.add(scope); },\n disableScope(scope: string) { activeScopes.delete(scope); },\n getBindings() {\n return bindings.map((b) => ({\n key: formatKeyCombo(b.key),\n description: b.description ?? '',\n scope: b.scope,\n }));\n },\n dispose() {\n bindings.length = 0;\n if (typeof document !== 'undefined') {\n document.removeEventListener('keydown', handleKeyDown);\n }\n listening = false;\n },\n };\n}\n\n// --- Key matching ---\n\nfunction matchesKey(e: KeyboardEvent, combo: string): boolean {\n const parts = combo.toLowerCase().split('+');\n const key = parts.pop()!;\n\n const needsMod = parts.includes('mod');\n const needsCtrl = parts.includes('ctrl');\n const needsShift = parts.includes('shift');\n const needsAlt = parts.includes('alt');\n\n // mod = Cmd on Mac, Ctrl elsewhere\n const isMac = typeof navigator !== 'undefined' && navigator.platform?.includes('Mac');\n const modPressed = isMac ? e.metaKey : e.ctrlKey;\n\n if (needsMod && !modPressed) return false;\n if (needsCtrl && !e.ctrlKey) return false;\n if (needsShift && !e.shiftKey) return false;\n if (needsAlt && !e.altKey) return false;\n\n return e.key.toLowerCase() === key || e.code.toLowerCase() === key;\n}\n\nfunction formatKeyCombo(combo: string): string {\n const isMac = typeof navigator !== 'undefined' && navigator.platform?.includes('Mac');\n return combo\n .replace(/mod/gi, isMac ? '⌘' : 'Ctrl')\n .replace(/shift/gi, isMac ? '⇧' : 'Shift')\n .replace(/alt/gi, isMac ? '⌥' : 'Alt')\n .replace(/\\+/g, isMac ? '' : '+');\n}\n","/**\n * <Image> component.\n *\n * Optimized image rendering with lazy loading, srcset/sizes,\n * blur placeholder, and error fallback.\n *\n * ```html\n * <Image\n * src=\"/photos/hero.jpg\"\n * alt=\"Hero image\"\n * width={800}\n * height={600}\n * placeholder=\"blur\"\n * blurDataUrl=\"data:image/jpeg;base64,...\"\n * srcset=\"/photos/hero-400.jpg 400w, /photos/hero-800.jpg 800w\"\n * sizes=\"(max-width: 600px) 400px, 800px\"\n * loading=\"lazy\"\n * />\n * ```\n */\n\nimport { defineComponent } from './component.js';\nimport { signal } from './signals.js';\n\n// --- Types ---\n\nexport interface ImageProps {\n /** Image source URL */\n src: string;\n /** Alt text (required for accessibility) */\n alt: string;\n /** Width in pixels */\n width?: number;\n /** Height in pixels */\n height?: number;\n /** Loading strategy (default: 'lazy') */\n loading?: 'lazy' | 'eager';\n /** Srcset for responsive images */\n srcset?: string;\n /** Sizes attribute for responsive images */\n sizes?: string;\n /** Placeholder strategy */\n placeholder?: 'blur' | 'empty';\n /** Base64 data URL for blur placeholder */\n blurDataUrl?: string;\n /** CSS class */\n class?: string;\n /** Error fallback image URL */\n fallbackSrc?: string;\n /** Callback when image loads */\n onLoad?: () => void;\n /** Callback when image fails to load */\n onError?: (error: Event) => void;\n}\n\n// --- Component ---\n\nexport const Image = defineComponent<ImageProps>((ctx) => {\n const loaded = signal(false);\n const errored = signal(false);\n\n return () => {\n const {\n src,\n alt,\n width,\n height,\n loading = 'lazy',\n srcset,\n sizes,\n placeholder,\n blurDataUrl,\n class: className,\n fallbackSrc,\n onLoad,\n onError: onErrorCb,\n } = ctx.props;\n\n // Wrapper for placeholder\n const wrapper = document.createElement('div');\n wrapper.style.position = 'relative';\n wrapper.style.display = 'inline-block';\n wrapper.style.overflow = 'hidden';\n if (width) wrapper.style.width = `${width}px`;\n if (height) wrapper.style.height = `${height}px`;\n\n // Blur placeholder\n if (placeholder === 'blur' && blurDataUrl && !loaded()) {\n const blur = document.createElement('img');\n blur.src = blurDataUrl;\n blur.alt = '';\n blur.setAttribute('aria-hidden', 'true');\n blur.style.cssText = 'position:absolute;inset:0;width:100%;height:100%;object-fit:cover;filter:blur(20px);transform:scale(1.1);';\n wrapper.appendChild(blur);\n }\n\n // Main image\n const img = document.createElement('img');\n img.alt = alt;\n img.loading = loading;\n\n if (errored() && fallbackSrc) {\n img.src = fallbackSrc;\n } else {\n img.src = src;\n }\n\n if (srcset) img.srcset = srcset;\n if (sizes) img.sizes = sizes;\n if (width) img.width = width;\n if (height) img.height = height;\n if (className) img.className = className;\n\n img.style.display = 'block';\n img.style.width = '100%';\n img.style.height = 'auto';\n\n img.addEventListener('load', () => {\n loaded.set(true);\n onLoad?.();\n });\n\n img.addEventListener('error', (e) => {\n errored.set(true);\n onErrorCb?.(e);\n });\n\n // Intersection Observer for lazy loading (fallback for browsers without native lazy)\n if (loading === 'lazy' && typeof IntersectionObserver !== 'undefined') {\n img.setAttribute('data-src', img.src);\n const actualSrc = img.src;\n img.removeAttribute('src');\n\n const observer = new IntersectionObserver(\n (entries) => {\n if (entries[0].isIntersecting) {\n img.src = actualSrc;\n observer.disconnect();\n }\n },\n { rootMargin: '200px' },\n );\n\n // Observe after appended to DOM\n requestAnimationFrame(() => {\n if (img.parentElement) {\n observer.observe(img);\n } else {\n // Fallback: set src immediately\n img.src = actualSrc;\n }\n });\n }\n\n wrapper.appendChild(img);\n return wrapper;\n };\n});\n","/**\n * Infinite scroll composable.\n *\n * Uses IntersectionObserver to detect when a sentinel element\n * enters the viewport, then triggers loading more data.\n * Pairs with createCursorPagination() from @akashjs/http.\n *\n * ```ts\n * const { sentinel, loading, done } = useInfiniteScroll({\n * onLoadMore: async () => {\n * pager.loadMore();\n * await fetchNextPage();\n * },\n * hasMore: () => pager.hasMore(),\n * });\n * // Append sentinel() element at the end of your list\n * ```\n */\n\nimport { signal } from './signals.js';\nimport type { ReadonlySignal } from './signals.js';\n\n// --- Types ---\n\nexport interface InfiniteScrollOptions {\n /** Callback to load more items */\n onLoadMore: () => Promise<void> | void;\n /** Whether there are more items to load */\n hasMore: () => boolean;\n /** Root margin for the observer (default: '200px') */\n rootMargin?: string;\n /** Threshold for the observer (default: 0) */\n threshold?: number;\n}\n\nexport interface InfiniteScroll {\n /** Sentinel element to place at the end of the list */\n sentinel: () => HTMLElement;\n /** Whether a load is in progress */\n loading: ReadonlySignal<boolean>;\n /** Whether all items have been loaded */\n done: ReadonlySignal<boolean>;\n /** Reset the scroll state */\n reset(): void;\n /** Dispose the observer */\n dispose(): void;\n}\n\n// --- Implementation ---\n\n/**\n * Create an infinite scroll controller.\n */\nexport function useInfiniteScroll(options: InfiniteScrollOptions): InfiniteScroll {\n const { onLoadMore, hasMore, rootMargin = '200px', threshold = 0 } = options;\n\n const loading = signal(false);\n const done = signal(false);\n let observer: IntersectionObserver | null = null;\n let sentinelEl: HTMLElement | null = null;\n let disposed = false;\n\n async function handleIntersect(): Promise<void> {\n if (loading() || done() || disposed) return;\n if (!hasMore()) {\n done.set(true);\n return;\n }\n\n loading.set(true);\n try {\n await onLoadMore();\n if (!hasMore()) {\n done.set(true);\n }\n } finally {\n loading.set(false);\n }\n }\n\n function createObserver(el: HTMLElement): void {\n if (typeof IntersectionObserver === 'undefined') return;\n\n observer = new IntersectionObserver(\n (entries) => {\n if (entries[0]?.isIntersecting) {\n handleIntersect();\n }\n },\n { rootMargin, threshold },\n );\n\n observer.observe(el);\n }\n\n function sentinel(): HTMLElement {\n if (sentinelEl) return sentinelEl;\n\n sentinelEl = document.createElement('div');\n sentinelEl.setAttribute('data-akash-sentinel', '');\n sentinelEl.style.height = '1px';\n sentinelEl.setAttribute('aria-hidden', 'true');\n\n // Start observing\n requestAnimationFrame(() => {\n if (sentinelEl && !disposed) {\n createObserver(sentinelEl);\n }\n });\n\n return sentinelEl;\n }\n\n return {\n sentinel,\n loading: () => loading(),\n done: () => done(),\n reset() {\n done.set(false);\n loading.set(false);\n },\n dispose() {\n disposed = true;\n observer?.disconnect();\n observer = null;\n },\n };\n}\n","/**\n * CSS utility functions.\n *\n * cx() for class name merging and css() for dynamic style objects.\n * Tiny but used in every component.\n */\n\n// --- cx() — class name merging ---\n\ntype CxInput = string | boolean | null | undefined | Record<string, boolean> | CxInput[];\n\n/**\n * Merge class names conditionally. Falsy values are filtered out.\n * Object keys are included when their value is truthy.\n *\n * ```ts\n * cx('btn', isActive && 'btn-active', { 'btn-lg': isLarge })\n * // 'btn btn-active btn-lg'\n *\n * cx('card', undefined, false, null, 'card-primary')\n * // 'card card-primary'\n * ```\n */\nexport function cx(...inputs: CxInput[]): string {\n const classes: string[] = [];\n\n for (const input of inputs) {\n if (!input) continue;\n\n if (typeof input === 'string') {\n classes.push(input);\n } else if (Array.isArray(input)) {\n const nested = cx(...input);\n if (nested) classes.push(nested);\n } else if (typeof input === 'object') {\n for (const [key, value] of Object.entries(input)) {\n if (value) classes.push(key);\n }\n }\n }\n\n return classes.join(' ');\n}\n\n// --- css() — dynamic style objects ---\n\ntype CssValue = string | number | null | undefined;\ntype CssProperties = Record<string, CssValue>;\n\n/**\n * Build a CSS style string from an object. Handles camelCase → kebab-case\n * conversion and filters out null/undefined values.\n *\n * ```ts\n * css({ backgroundColor: 'red', fontSize: 14, display: isVisible ? 'block' : 'none' })\n * // 'background-color: red; font-size: 14px; display: block'\n * ```\n */\nexport function css(styles: CssProperties): string {\n const parts: string[] = [];\n\n for (const [key, value] of Object.entries(styles)) {\n if (value == null) continue;\n\n const prop = camelToKebab(key);\n const val = typeof value === 'number' && !UNITLESS_PROPS.has(key)\n ? `${value}px`\n : String(value);\n\n parts.push(`${prop}: ${val}`);\n }\n\n return parts.join('; ');\n}\n\n/**\n * Apply a style object to an element.\n *\n * ```ts\n * applyStyles(el, { color: 'red', marginTop: 10 });\n * ```\n */\nexport function applyStyles(el: HTMLElement, styles: CssProperties): void {\n for (const [key, value] of Object.entries(styles)) {\n if (value == null) {\n el.style.removeProperty(camelToKebab(key));\n } else {\n const val = typeof value === 'number' && !UNITLESS_PROPS.has(key)\n ? `${value}px`\n : String(value);\n el.style.setProperty(camelToKebab(key), val);\n }\n }\n}\n\n// --- Helpers ---\n\nfunction camelToKebab(str: string): string {\n return str.replace(/[A-Z]/g, (m) => `-${m.toLowerCase()}`);\n}\n\n/** CSS properties that don't get automatic px units */\nconst UNITLESS_PROPS = new Set([\n 'animationIterationCount', 'boxFlex', 'boxFlexGroup', 'boxOrdinalGroup',\n 'columnCount', 'fillOpacity', 'flex', 'flexGrow', 'flexPositive',\n 'flexShrink', 'flexNegative', 'flexOrder', 'fontWeight', 'gridColumn',\n 'gridRow', 'lineClamp', 'lineHeight', 'opacity', 'order', 'orphans',\n 'tabSize', 'widows', 'zIndex', 'zoom',\n]);\n","/**\n * Headless data table.\n *\n * Signal-based table state management with sorting, filtering,\n * column visibility, and pagination integration. No DOM — just logic.\n *\n * ```ts\n * const table = createDataTable({\n * data: () => users(),\n * columns: [\n * { key: 'name', header: 'Name', sortable: true },\n * { key: 'email', header: 'Email', sortable: true, filterable: true },\n * { key: 'age', header: 'Age', sortable: true },\n * ],\n * pageSize: 20,\n * });\n *\n * table.rows(); // current page of sorted/filtered data\n * table.sort('name'); // toggle sort by column\n * table.filter('search term');\n * table.toggleColumn('age');\n * table.nextPage();\n * ```\n */\n\nimport { signal, computed } from './signals.js';\nimport type { ReadonlySignal } from './signals.js';\n\n// --- Types ---\n\nexport interface ColumnDef<T> {\n /** Key to access the data (dot notation supported) */\n key: string;\n /** Display header */\n header: string;\n /** Whether this column is sortable (default: false) */\n sortable?: boolean;\n /** Whether this column is searchable by the global filter (default: false) */\n filterable?: boolean;\n /** Custom sort comparator */\n compare?: (a: T, b: T) => number;\n /** Custom cell value accessor */\n accessor?: (row: T) => unknown;\n /** Whether column is visible by default (default: true) */\n visible?: boolean;\n}\n\nexport type SortDirection = 'asc' | 'desc' | null;\n\nexport interface SortState {\n column: string | null;\n direction: SortDirection;\n}\n\nexport interface DataTableOptions<T> {\n /** Reactive data source */\n data: () => T[];\n /** Column definitions */\n columns: ColumnDef<T>[];\n /** Page size (0 = no pagination) */\n pageSize?: number;\n /** Initial sort */\n initialSort?: SortState;\n}\n\nexport interface DataTable<T> {\n /** Current page of processed (sorted + filtered) rows */\n rows: ReadonlySignal<T[]>;\n /** All processed rows (before pagination) */\n allRows: ReadonlySignal<T[]>;\n /** Total row count after filtering */\n totalRows: ReadonlySignal<number>;\n /** Visible columns */\n visibleColumns: ReadonlySignal<ColumnDef<T>[]>;\n /** Current sort state */\n sortState: ReadonlySignal<SortState>;\n /** Current filter text */\n filterText: ReadonlySignal<string>;\n /** Current page (1-based) */\n page: ReadonlySignal<number>;\n /** Total pages */\n totalPages: ReadonlySignal<number>;\n /** Toggle or set sort on a column */\n sort(columnKey: string): void;\n /** Set the global filter text */\n filter(text: string): void;\n /** Toggle column visibility */\n toggleColumn(columnKey: string): void;\n /** Show a column */\n showColumn(columnKey: string): void;\n /** Hide a column */\n hideColumn(columnKey: string): void;\n /** Go to next page */\n nextPage(): void;\n /** Go to previous page */\n prevPage(): void;\n /** Go to specific page */\n goToPage(page: number): void;\n /** Reset all state (sort, filter, page) */\n reset(): void;\n}\n\n// --- Implementation ---\n\nexport function createDataTable<T extends Record<string, unknown>>(\n options: DataTableOptions<T>,\n): DataTable<T> {\n const { data, columns, pageSize = 0, initialSort } = options;\n\n const sortState = signal<SortState>(initialSort ?? { column: null, direction: null });\n const filterText = signal('');\n const page = signal(1);\n const columnVisibility = signal<Record<string, boolean>>(\n Object.fromEntries(columns.map((c) => [c.key, c.visible !== false])),\n );\n\n // Visible columns\n const visibleColumns = computed(() => {\n const vis = columnVisibility();\n return columns.filter((c) => vis[c.key]);\n });\n\n // Filtered rows\n const filteredRows = computed(() => {\n const text = filterText().toLowerCase().trim();\n if (!text) return data();\n\n const filterableCols = columns.filter((c) => c.filterable);\n if (filterableCols.length === 0) return data();\n\n return data().filter((row) => {\n return filterableCols.some((col) => {\n const value = getNestedValue(row, col.key);\n return String(value).toLowerCase().includes(text);\n });\n });\n });\n\n // Sorted rows\n const sortedRows = computed(() => {\n const { column, direction } = sortState();\n const rows = [...filteredRows()];\n\n if (!column || !direction) return rows;\n\n const colDef = columns.find((c) => c.key === column);\n if (!colDef) return rows;\n\n return rows.sort((a, b) => {\n if (colDef.compare) {\n const result = colDef.compare(a, b);\n return direction === 'desc' ? -result : result;\n }\n\n const aVal = getNestedValue(a, column);\n const bVal = getNestedValue(b, column);\n const result = defaultCompare(aVal, bVal);\n return direction === 'desc' ? -result : result;\n });\n });\n\n // Total rows after filtering\n const totalRows = computed(() => filteredRows().length);\n\n // Total pages\n const totalPages = computed(() => {\n if (pageSize <= 0) return 1;\n return Math.max(1, Math.ceil(totalRows() / pageSize));\n });\n\n // Paginated rows\n const paginatedRows = computed(() => {\n const all = sortedRows();\n if (pageSize <= 0) return all;\n const start = (page() - 1) * pageSize;\n return all.slice(start, start + pageSize);\n });\n\n // --- Actions ---\n\n function sort(columnKey: string): void {\n const current = sortState();\n if (current.column === columnKey) {\n // Cycle: asc → desc → none\n if (current.direction === 'asc') {\n sortState.set({ column: columnKey, direction: 'desc' });\n } else if (current.direction === 'desc') {\n sortState.set({ column: null, direction: null });\n } else {\n sortState.set({ column: columnKey, direction: 'asc' });\n }\n } else {\n sortState.set({ column: columnKey, direction: 'asc' });\n }\n page.set(1);\n }\n\n function filter(text: string): void {\n filterText.set(text);\n page.set(1);\n }\n\n function toggleColumn(key: string): void {\n columnVisibility.update((vis) => ({ ...vis, [key]: !vis[key] }));\n }\n\n function showColumn(key: string): void {\n columnVisibility.update((vis) => ({ ...vis, [key]: true }));\n }\n\n function hideColumn(key: string): void {\n columnVisibility.update((vis) => ({ ...vis, [key]: false }));\n }\n\n return {\n rows: paginatedRows,\n allRows: sortedRows,\n totalRows,\n visibleColumns,\n sortState: () => sortState(),\n filterText: () => filterText(),\n page: () => page(),\n totalPages,\n sort,\n filter,\n toggleColumn,\n showColumn,\n hideColumn,\n nextPage() { if (page() < totalPages()) page.update((p) => p + 1); },\n prevPage() { if (page() > 1) page.update((p) => p - 1); },\n goToPage(p: number) { page.set(Math.max(1, Math.min(p, totalPages()))); },\n reset() {\n sortState.set({ column: null, direction: null });\n filterText.set('');\n page.set(1);\n },\n };\n}\n\n// --- Helpers ---\n\nfunction getNestedValue(obj: Record<string, unknown>, path: string): unknown {\n return path.split('.').reduce((o: any, k) => o?.[k], obj);\n}\n\nfunction defaultCompare(a: unknown, b: unknown): number {\n if (a == null && b == null) return 0;\n if (a == null) return -1;\n if (b == null) return 1;\n if (typeof a === 'number' && typeof b === 'number') return a - b;\n return String(a).localeCompare(String(b));\n}\n","/**\n * SEO utilities.\n *\n * Structured data (JSON-LD), Open Graph helpers, and canonical URL management.\n * Works with useHead() for SSR-compatible head tag management.\n *\n * ```ts\n * useStructuredData({\n * '@type': 'Article',\n * headline: 'My Post',\n * author: { '@type': 'Person', name: 'Alice' },\n * });\n * ```\n */\n\nimport { useHead } from './head.js';\n\n// --- Types ---\n\nexport interface StructuredData {\n '@context'?: string;\n '@type': string;\n [key: string]: unknown;\n}\n\nexport interface OpenGraphData {\n title: string;\n description?: string;\n image?: string;\n url?: string;\n type?: string;\n siteName?: string;\n locale?: string;\n}\n\nexport interface TwitterCardData {\n card?: 'summary' | 'summary_large_image' | 'player' | 'app';\n title: string;\n description?: string;\n image?: string;\n site?: string;\n creator?: string;\n}\n\nexport interface SEOConfig {\n title: string;\n description?: string;\n canonical?: string;\n robots?: string;\n openGraph?: OpenGraphData;\n twitter?: TwitterCardData;\n structuredData?: StructuredData | StructuredData[];\n}\n\n// --- useStructuredData ---\n\n/**\n * Inject JSON-LD structured data into the document head.\n * Data is automatically wrapped with @context.\n *\n * ```ts\n * useStructuredData({\n * '@type': 'WebSite',\n * name: 'AkashJS',\n * url: 'https://akashjs.dev',\n * });\n * ```\n */\nexport function useStructuredData(data: StructuredData | StructuredData[]): void {\n const items = Array.isArray(data) ? data : [data];\n\n for (const item of items) {\n const ld = { '@context': 'https://schema.org', ...item };\n useHead({\n script: [\n { type: 'application/ld+json', innerHTML: JSON.stringify(ld) },\n ],\n });\n }\n}\n\n// --- useOpenGraph ---\n\n/**\n * Set Open Graph meta tags.\n *\n * ```ts\n * useOpenGraph({\n * title: 'My Page',\n * description: 'Page description',\n * image: '/og-image.jpg',\n * type: 'article',\n * });\n * ```\n */\nexport function useOpenGraph(data: OpenGraphData): void {\n const meta: Array<{ property: string; content: string }> = [\n { property: 'og:title', content: data.title },\n ];\n\n if (data.description) meta.push({ property: 'og:description', content: data.description });\n if (data.image) meta.push({ property: 'og:image', content: data.image });\n if (data.url) meta.push({ property: 'og:url', content: data.url });\n if (data.type) meta.push({ property: 'og:type', content: data.type });\n if (data.siteName) meta.push({ property: 'og:site_name', content: data.siteName });\n if (data.locale) meta.push({ property: 'og:locale', content: data.locale });\n\n useHead({ meta });\n}\n\n// --- useTwitterCard ---\n\n/**\n * Set Twitter Card meta tags.\n *\n * ```ts\n * useTwitterCard({\n * card: 'summary_large_image',\n * title: 'My Page',\n * image: '/twitter-card.jpg',\n * });\n * ```\n */\nexport function useTwitterCard(data: TwitterCardData): void {\n const meta: Array<{ name: string; content: string }> = [\n { name: 'twitter:title', content: data.title },\n ];\n\n if (data.card) meta.push({ name: 'twitter:card', content: data.card });\n if (data.description) meta.push({ name: 'twitter:description', content: data.description });\n if (data.image) meta.push({ name: 'twitter:image', content: data.image });\n if (data.site) meta.push({ name: 'twitter:site', content: data.site });\n if (data.creator) meta.push({ name: 'twitter:creator', content: data.creator });\n\n useHead({ meta });\n}\n\n// --- useSEO (all-in-one) ---\n\n/**\n * Set all SEO-related head tags at once.\n *\n * ```ts\n * useSEO({\n * title: 'My Page | MySite',\n * description: 'Page description',\n * canonical: 'https://mysite.com/page',\n * openGraph: { title: 'My Page', image: '/og.jpg' },\n * twitter: { card: 'summary_large_image', title: 'My Page' },\n * structuredData: { '@type': 'WebPage', name: 'My Page' },\n * });\n * ```\n */\nexport function useSEO(config: SEOConfig): void {\n const meta: Array<{ name?: string; property?: string; content: string }> = [];\n\n if (config.description) {\n meta.push({ name: 'description', content: config.description });\n }\n if (config.robots) {\n meta.push({ name: 'robots', content: config.robots });\n }\n\n const link: Array<{ rel: string; href: string }> = [];\n if (config.canonical) {\n link.push({ rel: 'canonical', href: config.canonical });\n }\n\n useHead({ title: config.title, meta, link });\n\n if (config.openGraph) useOpenGraph(config.openGraph);\n if (config.twitter) useTwitterCard(config.twitter);\n if (config.structuredData) useStructuredData(config.structuredData);\n}\n\n// --- Sitemap generation (for CLI/build) ---\n\nexport interface SitemapEntry {\n url: string;\n lastmod?: string;\n changefreq?: 'always' | 'hourly' | 'daily' | 'weekly' | 'monthly' | 'yearly' | 'never';\n priority?: number;\n}\n\n/**\n * Generate a sitemap.xml string from route entries.\n *\n * ```ts\n * const xml = generateSitemap('https://mysite.com', [\n * { url: '/', priority: 1.0 },\n * { url: '/about', changefreq: 'monthly' },\n * { url: '/blog/hello', lastmod: '2026-03-29' },\n * ]);\n * ```\n */\nexport function generateSitemap(baseUrl: string, entries: SitemapEntry[]): string {\n let xml = '<?xml version=\"1.0\" encoding=\"UTF-8\"?>\\n';\n xml += '<urlset xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\">\\n';\n\n for (const entry of entries) {\n xml += ' <url>\\n';\n xml += ` <loc>${baseUrl}${entry.url}</loc>\\n`;\n if (entry.lastmod) xml += ` <lastmod>${entry.lastmod}</lastmod>\\n`;\n if (entry.changefreq) xml += ` <changefreq>${entry.changefreq}</changefreq>\\n`;\n if (entry.priority != null) xml += ` <priority>${entry.priority}</priority>\\n`;\n xml += ' </url>\\n';\n }\n\n xml += '</urlset>\\n';\n return xml;\n}\n","/**\n * Pipes — template transform functions.\n *\n * Pure functions that transform display values. Chainable, memoized,\n * and usable both in templates and in script.\n *\n * ```ts\n * import { pipe, uppercase, date, currency } from '@akashjs/runtime';\n *\n * pipe('hello', uppercase); // 'HELLO'\n * pipe(new Date(), date, 'short'); // '3/29/26'\n * pipe(1234.5, currency, 'USD'); // '$1,234.50'\n * pipe('hello world', capitalize, truncate, 5); // 'Hello...'\n * ```\n */\n\n// =========================================================================\n// Pipe type and runner\n// =========================================================================\n\nexport type PipeFn<TIn = any, TOut = any> = (value: TIn, ...args: any[]) => TOut;\n\n/**\n * Apply a pipe transform to a value.\n *\n * ```ts\n * pipe('hello', uppercase); // 'HELLO'\n * pipe(1234, currency, 'USD'); // '$1,234.00'\n * ```\n */\nexport function pipe<TIn, TOut>(value: TIn, transform: PipeFn<TIn, TOut>, ...args: any[]): TOut {\n return transform(value, ...args);\n}\n\n/**\n * Chain multiple pipes together.\n *\n * ```ts\n * const format = chain(trim, capitalize, truncate);\n * format(' hello world ', 10); // 'Hello w...'\n * ```\n */\nexport function chain<T>(...pipes: PipeFn[]): PipeFn<T, any> {\n return (value: T, ...args: any[]) => {\n let result: any = value;\n for (const p of pipes) {\n result = p(result, ...args);\n }\n return result;\n };\n}\n\n/**\n * Define a custom pipe.\n *\n * ```ts\n * const reverse = definePipe<string, string>((value) =>\n * value.split('').reverse().join('')\n * );\n * pipe('hello', reverse); // 'olleh'\n * ```\n */\nexport function definePipe<TIn, TOut>(fn: PipeFn<TIn, TOut>): PipeFn<TIn, TOut> {\n return fn;\n}\n\n// =========================================================================\n// Built-in pipes\n// =========================================================================\n\n/** Convert string to uppercase */\nexport const uppercase: PipeFn<string, string> = (value) => String(value).toUpperCase();\n\n/** Convert string to lowercase */\nexport const lowercase: PipeFn<string, string> = (value) => String(value).toLowerCase();\n\n/** Capitalize first letter */\nexport const capitalize: PipeFn<string, string> = (value) => {\n const s = String(value);\n return s.charAt(0).toUpperCase() + s.slice(1);\n};\n\n/** Title case — capitalize each word */\nexport const titleCase: PipeFn<string, string> = (value) => {\n return String(value).replace(/\\b\\w/g, (c) => c.toUpperCase());\n};\n\n/** Trim whitespace */\nexport const trim: PipeFn<string, string> = (value) => String(value).trim();\n\n/**\n * Truncate string to a max length, adding ellipsis.\n *\n * ```ts\n * pipe('Hello World', truncate, 8); // 'Hello...'\n * ```\n */\nexport const truncate: PipeFn<string, string> = (value, maxLength: number = 50, suffix = '...') => {\n const s = String(value);\n if (s.length <= maxLength) return s;\n return s.slice(0, maxLength - suffix.length) + suffix;\n};\n\n/**\n * Format a date.\n *\n * ```ts\n * pipe(new Date(), date); // '3/29/2026'\n * pipe(new Date(), date, 'short'); // '3/29/26'\n * pipe(new Date(), date, 'long'); // 'March 29, 2026'\n * pipe(new Date(), date, 'time'); // '2:30 PM'\n * pipe(new Date(), date, 'iso'); // '2026-03-29T...'\n * ```\n */\nexport const date: PipeFn<Date | string | number, string> = (\n value,\n format: 'short' | 'medium' | 'long' | 'full' | 'time' | 'iso' = 'medium',\n locale?: string,\n) => {\n const d = value instanceof Date ? value : new Date(value);\n if (isNaN(d.getTime())) return String(value);\n\n if (format === 'iso') return d.toISOString();\n\n const loc = locale ?? 'en-US';\n\n const options: Record<string, Intl.DateTimeFormatOptions> = {\n short: { year: '2-digit', month: 'numeric', day: 'numeric' },\n medium: { year: 'numeric', month: 'numeric', day: 'numeric' },\n long: { year: 'numeric', month: 'long', day: 'numeric' },\n full: { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' },\n time: { hour: 'numeric', minute: '2-digit' },\n };\n\n return new Intl.DateTimeFormat(loc, options[format]).format(d);\n};\n\n/**\n * Format a number as currency.\n *\n * ```ts\n * pipe(1234.5, currency); // '$1,234.50'\n * pipe(1234.5, currency, 'EUR'); // '€1,234.50'\n * ```\n */\nexport const currency: PipeFn<number, string> = (value, currencyCode = 'USD', locale?: string) => {\n return new Intl.NumberFormat(locale ?? 'en-US', {\n style: 'currency',\n currency: currencyCode,\n }).format(Number(value));\n};\n\n/**\n * Format a number with locale formatting.\n *\n * ```ts\n * pipe(1234567.89, number); // '1,234,567.89'\n * pipe(1234567.89, number, '0-2'); // '1,234,567.89' (0-2 decimal digits)\n * ```\n */\nexport const number: PipeFn<number, string> = (value, digitsInfo?: string, locale?: string) => {\n const opts: Intl.NumberFormatOptions = {};\n if (digitsInfo) {\n const [min, max] = digitsInfo.split('-').map(Number);\n opts.minimumFractionDigits = min;\n opts.maximumFractionDigits = max ?? min;\n }\n return new Intl.NumberFormat(locale ?? 'en-US', opts).format(Number(value));\n};\n\n/**\n * Format a number as a percentage.\n *\n * ```ts\n * pipe(0.85, percent); // '85%'\n * pipe(0.856, percent); // '86%'\n * ```\n */\nexport const percent: PipeFn<number, string> = (value, decimals = 0, locale?: string) => {\n return new Intl.NumberFormat(locale ?? 'en-US', {\n style: 'percent',\n minimumFractionDigits: decimals,\n maximumFractionDigits: decimals,\n }).format(Number(value));\n};\n\n/**\n * JSON stringify with formatting.\n *\n * ```ts\n * pipe({ a: 1 }, json); // '{\\n \"a\": 1\\n}'\n * pipe({ a: 1 }, json, 0); // '{\"a\":1}'\n * ```\n */\nexport const json: PipeFn<unknown, string> = (value, indent = 2) => {\n return JSON.stringify(value, null, indent);\n};\n\n/**\n * Pluralize a string based on count.\n *\n * ```ts\n * pipe(1, plural, 'item', 'items'); // '1 item'\n * pipe(5, plural, 'item', 'items'); // '5 items'\n * ```\n */\nexport const plural: PipeFn<number, string> = (value, singular: string, pluralForm?: string) => {\n const p = pluralForm ?? `${singular}s`;\n return `${value} ${value === 1 ? singular : p}`;\n};\n\n/**\n * Relative time formatting.\n *\n * ```ts\n * pipe(Date.now() - 60000, relativeTime); // '1 minute ago'\n * ```\n */\nexport const relativeTime: PipeFn<Date | number, string> = (value, locale?: string) => {\n const d = value instanceof Date ? value.getTime() : Number(value);\n const diff = d - Date.now();\n const absDiff = Math.abs(diff);\n\n const units: Array<[number, Intl.RelativeTimeFormatUnit]> = [\n [60000, 'second'],\n [3600000, 'minute'],\n [86400000, 'hour'],\n [2592000000, 'day'],\n [31536000000, 'month'],\n [Infinity, 'year'],\n ];\n\n const divisors: Record<string, number> = {\n second: 1000, minute: 60000, hour: 3600000,\n day: 86400000, month: 2592000000, year: 31536000000,\n };\n\n let unit: Intl.RelativeTimeFormatUnit = 'second';\n for (const [threshold, u] of units) {\n if (absDiff < threshold) { unit = u; break; }\n }\n\n const n = Math.round(diff / divisors[unit]);\n\n if (typeof Intl !== 'undefined' && Intl.RelativeTimeFormat) {\n return new Intl.RelativeTimeFormat(locale ?? 'en', { numeric: 'auto' }).format(n, unit);\n }\n\n const abs = Math.abs(n);\n const suffix = n < 0 ? 'ago' : 'from now';\n return `${abs} ${unit}${abs !== 1 ? 's' : ''} ${suffix}`;\n};\n","/**\n * Custom directive system.\n *\n * Reusable attribute behaviors with lifecycle hooks.\n * Directives attach behavior to elements without components.\n *\n * ```ts\n * const vAutoFocus = defineDirective({\n * mounted(el) { el.focus(); },\n * });\n *\n * const vTooltip = defineDirective<string>({\n * mounted(el, { value }) { addTooltip(el, value); },\n * updated(el, { value }) { updateTooltip(el, value); },\n * unmounted(el) { removeTooltip(el); },\n * });\n *\n * // Usage:\n * applyDirective(el, vAutoFocus);\n * applyDirective(el, vTooltip, 'Hello tooltip');\n * ```\n */\n\n// =========================================================================\n// Types\n// =========================================================================\n\nexport interface DirectiveBinding<T = any> {\n /** Current value passed to the directive */\n value: T;\n /** Previous value (on update) */\n oldValue?: T;\n /** Argument (e.g., v-on:click → arg = 'click') */\n arg?: string;\n /** Modifiers (e.g., v-on.prevent → modifiers.prevent = true) */\n modifiers?: Record<string, boolean>;\n}\n\nexport interface DirectiveHooks<T = any> {\n /** Called when the element is inserted into the DOM */\n mounted?: (el: HTMLElement, binding: DirectiveBinding<T>) => void;\n /** Called when the bound value updates */\n updated?: (el: HTMLElement, binding: DirectiveBinding<T>) => void;\n /** Called before the element is removed from the DOM */\n unmounted?: (el: HTMLElement, binding: DirectiveBinding<T>) => void;\n}\n\nexport interface Directive<T = any> {\n _type: 'directive';\n hooks: DirectiveHooks<T>;\n}\n\n// =========================================================================\n// defineDirective\n// =========================================================================\n\n/**\n * Define a custom directive.\n *\n * ```ts\n * const vClickOutside = defineDirective<() => void>({\n * mounted(el, { value: handler }) {\n * const listener = (e: Event) => {\n * if (!el.contains(e.target as Node)) handler();\n * };\n * document.addEventListener('click', listener);\n * (el as any).__clickOutside = listener;\n * },\n * unmounted(el) {\n * document.removeEventListener('click', (el as any).__clickOutside);\n * },\n * });\n * ```\n */\nexport function defineDirective<T = any>(hooks: DirectiveHooks<T>): Directive<T> {\n return { _type: 'directive', hooks };\n}\n\n/**\n * Shorthand: directive from a single function (runs on mount).\n */\nexport function directiveFromFn<T = any>(\n fn: (el: HTMLElement, binding: DirectiveBinding<T>) => void | (() => void),\n): Directive<T> {\n return defineDirective<T>({\n mounted(el, binding) {\n const cleanup = fn(el, binding);\n if (typeof cleanup === 'function') {\n (el as any).__directiveCleanup = cleanup;\n }\n },\n unmounted(el) {\n (el as any).__directiveCleanup?.();\n },\n });\n}\n\n// =========================================================================\n// applyDirective — attach a directive to an element\n// =========================================================================\n\nconst DIRECTIVE_KEY = Symbol('akash.directives');\n\ninterface DirectiveState {\n directive: Directive;\n binding: DirectiveBinding;\n}\n\n/**\n * Apply a directive to an element.\n *\n * ```ts\n * applyDirective(el, vAutoFocus);\n * applyDirective(el, vTooltip, 'Hello');\n * ```\n */\nexport function applyDirective<T>(\n el: HTMLElement,\n directive: Directive<T>,\n value?: T,\n options?: { arg?: string; modifiers?: Record<string, boolean> },\n): void {\n const binding: DirectiveBinding<T> = {\n value: value as T,\n arg: options?.arg,\n modifiers: options?.modifiers,\n };\n\n // Store directive state on element\n const states: DirectiveState[] = (el as any)[DIRECTIVE_KEY] ?? [];\n states.push({ directive, binding });\n (el as any)[DIRECTIVE_KEY] = states;\n\n // Call mounted hook\n directive.hooks.mounted?.(el, binding);\n}\n\n/**\n * Update a directive's value on an element.\n */\nexport function updateDirective<T>(\n el: HTMLElement,\n directive: Directive<T>,\n newValue: T,\n): void {\n const states: DirectiveState[] = (el as any)[DIRECTIVE_KEY] ?? [];\n const state = states.find((s) => s.directive === directive);\n\n if (state) {\n const oldValue = state.binding.value;\n state.binding = { ...state.binding, value: newValue, oldValue };\n directive.hooks.updated?.(el, state.binding);\n }\n}\n\n/**\n * Remove all directives from an element (call on unmount).\n */\nexport function removeDirectives(el: HTMLElement): void {\n const states: DirectiveState[] = (el as any)[DIRECTIVE_KEY] ?? [];\n for (const state of states) {\n state.directive.hooks.unmounted?.(el, state.binding);\n }\n delete (el as any)[DIRECTIVE_KEY];\n}\n\n// =========================================================================\n// Built-in directives\n// =========================================================================\n\n/** Auto-focus an element when mounted */\nexport const vAutoFocus = defineDirective({\n mounted(el) {\n requestAnimationFrame(() => el.focus());\n },\n});\n\n/** Click outside handler */\nexport const vClickOutside = defineDirective<() => void>({\n mounted(el, { value: handler }) {\n const listener = (e: Event) => {\n if (!el.contains(e.target as Node)) handler();\n };\n document.addEventListener('click', listener, true);\n (el as any).__vClickOutside = listener;\n },\n unmounted(el) {\n document.removeEventListener('click', (el as any).__vClickOutside, true);\n delete (el as any).__vClickOutside;\n },\n});\n\n/** Long press handler */\nexport const vLongPress = defineDirective<{ handler: () => void; duration?: number }>({\n mounted(el, { value }) {\n let timer: ReturnType<typeof setTimeout> | null = null;\n const duration = value.duration ?? 500;\n\n const start = () => { timer = setTimeout(value.handler, duration); };\n const cancel = () => { if (timer) { clearTimeout(timer); timer = null; } };\n\n el.addEventListener('pointerdown', start);\n el.addEventListener('pointerup', cancel);\n el.addEventListener('pointerleave', cancel);\n\n (el as any).__vLongPress = { start, cancel };\n },\n unmounted(el) {\n const fns = (el as any).__vLongPress;\n if (fns) {\n el.removeEventListener('pointerdown', fns.start);\n el.removeEventListener('pointerup', fns.cancel);\n el.removeEventListener('pointerleave', fns.cancel);\n }\n },\n});\n\n/** Intersection observer — triggers callback when element enters viewport */\nexport const vIntersect = defineDirective<(isIntersecting: boolean) => void>({\n mounted(el, { value: callback }) {\n const observer = new IntersectionObserver((entries) => {\n callback(entries[0].isIntersecting);\n });\n observer.observe(el);\n (el as any).__vIntersect = observer;\n },\n unmounted(el) {\n (el as any).__vIntersect?.disconnect();\n },\n});\n\n/** Resize observer — triggers callback on element resize */\nexport const vResize = defineDirective<(entry: ResizeObserverEntry) => void>({\n mounted(el, { value: callback }) {\n const observer = new ResizeObserver((entries) => {\n callback(entries[0]);\n });\n observer.observe(el);\n (el as any).__vResize = observer;\n },\n unmounted(el) {\n (el as any).__vResize?.disconnect();\n },\n});\n","/**\n * Web Components output.\n *\n * Compile AkashJS components to native Custom Elements that can\n * be used in any framework or plain HTML.\n *\n * ```ts\n * import { defineCustomElement } from '@akashjs/runtime';\n * import Counter from './Counter.akash';\n *\n * defineCustomElement('my-counter', Counter, {\n * props: ['initial'],\n * shadow: true,\n * });\n *\n * // Now usable as: <my-counter initial=\"5\"></my-counter>\n * ```\n */\n\nimport type { Component } from './component.js';\n\n// =========================================================================\n// Types\n// =========================================================================\n\nexport interface CustomElementOptions {\n /** Props to observe as attributes */\n props?: string[];\n /** Use Shadow DOM (default: true) */\n shadow?: boolean;\n /** CSS styles to inject (for shadow DOM) */\n styles?: string;\n /** Extend an existing element */\n extends?: string;\n}\n\n// =========================================================================\n// defineCustomElement\n// =========================================================================\n\n/**\n * Register an AkashJS component as a Custom Element.\n *\n * ```ts\n * defineCustomElement('my-counter', Counter, {\n * props: ['initial', 'step'],\n * shadow: true,\n * styles: ':host { display: block; }',\n * });\n * ```\n */\nexport function defineCustomElement<P extends Record<string, unknown>>(\n tagName: string,\n component: Component<P>,\n options: CustomElementOptions = {},\n): typeof HTMLElement {\n const { props = [], shadow = true, styles } = options;\n\n class AkashElement extends HTMLElement {\n static get observedAttributes(): string[] {\n return props;\n }\n\n private _root: ShadowRoot | HTMLElement;\n private _mounted = false;\n private _props: Record<string, unknown> = {};\n\n constructor() {\n super();\n this._root = shadow ? this.attachShadow({ mode: 'open' }) : this;\n }\n\n connectedCallback(): void {\n // Read initial attribute values\n for (const prop of props) {\n const attr = this.getAttribute(prop);\n if (attr !== null) {\n this._props[prop] = parseAttributeValue(attr);\n }\n }\n\n this._render();\n this._mounted = true;\n }\n\n disconnectedCallback(): void {\n // Clear rendered content\n while (this._root.firstChild) {\n this._root.removeChild(this._root.firstChild);\n }\n this._mounted = false;\n }\n\n attributeChangedCallback(name: string, _oldValue: string | null, newValue: string | null): void {\n this._props[name] = newValue !== null ? parseAttributeValue(newValue) : undefined;\n if (this._mounted) {\n this._render();\n }\n }\n\n private _render(): void {\n // Clear previous\n while (this._root.firstChild) {\n this._root.removeChild(this._root.firstChild);\n }\n\n // Inject styles if shadow DOM\n if (shadow && styles) {\n const styleEl = document.createElement('style');\n styleEl.textContent = styles;\n this._root.appendChild(styleEl);\n }\n\n // Render component\n const node = component(this._props as any);\n this._root.appendChild(node);\n }\n\n // Allow programmatic prop setting\n setProps(newProps: Partial<P>): void {\n Object.assign(this._props, newProps);\n if (this._mounted) this._render();\n }\n }\n\n // Register the custom element\n if (typeof customElements !== 'undefined' && !customElements.get(tagName)) {\n if (options.extends) {\n customElements.define(tagName, AkashElement, { extends: options.extends });\n } else {\n customElements.define(tagName, AkashElement);\n }\n }\n\n return AkashElement;\n}\n\n/**\n * Convert an AkashJS component to a Custom Element class without registering.\n * Useful for testing or when you want to register later.\n */\nexport function toCustomElement<P extends Record<string, unknown>>(\n component: Component<P>,\n options: CustomElementOptions = {},\n): typeof HTMLElement {\n // Same implementation but without auto-registration\n const { props = [], shadow = true, styles } = options;\n\n return class extends HTMLElement {\n static get observedAttributes() { return props; }\n\n private _root: ShadowRoot | HTMLElement;\n private _mounted = false;\n private _props: Record<string, unknown> = {};\n\n constructor() {\n super();\n this._root = shadow ? this.attachShadow({ mode: 'open' }) : this;\n }\n\n connectedCallback() {\n for (const prop of props) {\n const attr = this.getAttribute(prop);\n if (attr !== null) this._props[prop] = parseAttributeValue(attr);\n }\n this._render();\n this._mounted = true;\n }\n\n disconnectedCallback() {\n while (this._root.firstChild) this._root.removeChild(this._root.firstChild);\n this._mounted = false;\n }\n\n attributeChangedCallback(name: string, _old: string | null, val: string | null) {\n this._props[name] = val !== null ? parseAttributeValue(val) : undefined;\n if (this._mounted) this._render();\n }\n\n private _render() {\n while (this._root.firstChild) this._root.removeChild(this._root.firstChild);\n if (shadow && styles) {\n const s = document.createElement('style');\n s.textContent = styles;\n this._root.appendChild(s);\n }\n this._root.appendChild(component(this._props as any));\n }\n } as any;\n}\n\n// =========================================================================\n// Helpers\n// =========================================================================\n\nfunction parseAttributeValue(value: string): unknown {\n // Try to parse as JSON (numbers, booleans, objects)\n try {\n return JSON.parse(value);\n } catch {\n return value; // Keep as string\n }\n}\n","/**\n * Static Site Generation (SSG) / Prerendering.\n *\n * Pre-render pages at build time to static HTML files.\n * Combine with hydration for interactive islands.\n *\n * ```ts\n * // In build script or akash build --prerender:\n * await prerender({\n * routes: ['/', '/about', '/blog/hello'],\n * render: (url) => renderToString(App, { url }),\n * outDir: 'dist',\n * });\n * ```\n */\n\n// =========================================================================\n// Types\n// =========================================================================\n\nexport interface PrerenderOptions {\n /** Routes to prerender */\n routes: string[] | (() => Promise<string[]>);\n /** Render function — returns HTML for a given URL */\n render: (url: string) => Promise<string> | string;\n /** Output directory (default: 'dist') */\n outDir?: string;\n /** HTML template with {{content}} placeholder */\n template?: string;\n /** Callback per rendered page */\n onPage?: (url: string, html: string) => void;\n /** Callback on error */\n onError?: (url: string, error: Error) => void;\n /** Concurrency limit (default: 5) */\n concurrency?: number;\n}\n\nexport interface PrerenderResult {\n /** Successfully rendered pages */\n rendered: Array<{ url: string; file: string; size: number }>;\n /** Pages that failed to render */\n errors: Array<{ url: string; error: string }>;\n /** Total time in ms */\n duration: number;\n}\n\n// =========================================================================\n// Default HTML template\n// =========================================================================\n\nconst DEFAULT_TEMPLATE = `<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"UTF-8\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n {{head}}\n</head>\n<body>\n <div id=\"app\">{{content}}</div>\n {{scripts}}\n</body>\n</html>`;\n\n// =========================================================================\n// prerender()\n// =========================================================================\n\n/**\n * Pre-render routes to static HTML files.\n */\nexport async function prerender(options: PrerenderOptions): Promise<PrerenderResult> {\n const {\n routes: routesInput,\n render,\n outDir = 'dist',\n template = DEFAULT_TEMPLATE,\n onPage,\n onError,\n concurrency = 5,\n } = options;\n\n const start = Date.now();\n\n // Resolve routes\n const routes = typeof routesInput === 'function'\n ? await routesInput()\n : routesInput;\n\n const result: PrerenderResult = {\n rendered: [],\n errors: [],\n duration: 0,\n };\n\n // Process in batches for concurrency control\n for (let i = 0; i < routes.length; i += concurrency) {\n const batch = routes.slice(i, i + concurrency);\n await Promise.all(batch.map(async (url) => {\n try {\n const content = await render(url);\n const html = template\n .replace('{{content}}', content)\n .replace('{{head}}', '')\n .replace('{{scripts}}', '');\n\n const filePath = urlToFilePath(url);\n\n // In a real implementation, we'd write to disk here.\n // For now, we return the result for the caller to handle.\n result.rendered.push({\n url,\n file: `${outDir}/${filePath}`,\n size: new Blob([html]).size,\n });\n\n onPage?.(url, html);\n } catch (err) {\n const error = err instanceof Error ? err : new Error(String(err));\n result.errors.push({ url, error: error.message });\n onError?.(url, error);\n }\n }));\n }\n\n result.duration = Date.now() - start;\n return result;\n}\n\n// =========================================================================\n// Route discovery\n// =========================================================================\n\n/**\n * Discover routes from the file system for prerendering.\n * Scans src/routes/ and returns all static (non-parameterized) paths.\n */\nexport function discoverStaticRoutes(routeManifest: Array<{ path: string }>): string[] {\n return routeManifest\n .filter((r) => !r.path.includes(':') && !r.path.includes('*'))\n .map((r) => r.path);\n}\n\n/**\n * Generate all possible paths for parameterized routes.\n *\n * ```ts\n * const paths = generatePaths('/blog/:slug', [\n * { slug: 'hello' },\n * { slug: 'world' },\n * ]);\n * // ['/blog/hello', '/blog/world']\n * ```\n */\nexport function generatePaths(\n pattern: string,\n params: Record<string, string>[],\n): string[] {\n return params.map((p) => {\n let path = pattern;\n for (const [key, value] of Object.entries(p)) {\n path = path.replace(`:${key}`, value);\n }\n return path;\n });\n}\n\n// =========================================================================\n// Helpers\n// =========================================================================\n\n/**\n * Convert a URL path to a file path for static output.\n * / → index.html\n * /about → about/index.html\n * /blog/hello → blog/hello/index.html\n */\nexport function urlToFilePath(url: string): string {\n const clean = url.replace(/^\\//, '').replace(/\\/$/, '');\n if (!clean) return 'index.html';\n return `${clean}/index.html`;\n}\n\n/**\n * Generate a sitemap from prerender results.\n */\nexport function sitemapFromResults(\n baseUrl: string,\n results: PrerenderResult,\n): string {\n let xml = '<?xml version=\"1.0\" encoding=\"UTF-8\"?>\\n';\n xml += '<urlset xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\">\\n';\n\n for (const page of results.rendered) {\n xml += ` <url>\\n`;\n xml += ` <loc>${baseUrl}${page.url}</loc>\\n`;\n xml += ` <lastmod>${new Date().toISOString().split('T')[0]}</lastmod>\\n`;\n xml += ` </url>\\n`;\n }\n\n xml += '</urlset>\\n';\n return xml;\n}\n","/**\n * Switch/Case/Default control flow component.\n *\n * Renders one of multiple branches based on a reactive expression.\n *\n * ```html\n * <Switch on={status()}>\n * <Case value=\"loading\"><Spinner /></Case>\n * <Case value=\"error\"><ErrorMessage /></Case>\n * <Case value=\"success\"><Content /></Case>\n * <Default><Fallback /></Default>\n * </Switch>\n * ```\n *\n * Or programmatic:\n * ```ts\n * renderSwitch(container, anchor, () => status(), {\n * loading: () => Spinner({}),\n * error: () => ErrorView({}),\n * success: () => Content({}),\n * _default: () => Fallback({}),\n * });\n * ```\n */\n\nimport { defineComponent } from './component.js';\nimport { signal, effect } from './signals.js';\nimport { getCurrentScope, runInScope } from './context.js';\nimport { nodeToDOM } from './dom.js';\nimport type { AkashNode } from './types.js';\n\n// =========================================================================\n// Programmatic renderSwitch\n// =========================================================================\n\n/**\n * Render a switch block. Swaps DOM based on reactive expression value.\n */\nexport function renderSwitch(\n parent: Node,\n anchor: Node,\n expression: () => unknown,\n cases: Record<string, () => Node>,\n): () => void {\n let currentNodes: Node[] = [];\n\n // Capture scope so children inherit provide/inject context\n const scope = getCurrentScope();\n\n const dispose = effect(\n () => {\n const value = String(expression());\n\n // Remove current nodes\n for (const node of currentNodes) {\n if (node.parentNode) node.parentNode.removeChild(node);\n }\n currentNodes = [];\n\n // Find matching case or default\n const branch = cases[value] ?? cases._default;\n const liveParent = anchor.parentNode;\n if (branch && liveParent) {\n const node = scope ? runInScope(scope, branch) : branch();\n const nodes = node instanceof DocumentFragment\n ? Array.from(node.childNodes)\n : [node];\n for (const n of nodes) {\n liveParent.insertBefore(n, anchor);\n }\n currentNodes = nodes;\n }\n },\n { render: true },\n );\n\n return () => {\n dispose();\n for (const node of currentNodes) {\n if (node.parentNode) node.parentNode.removeChild(node);\n }\n };\n}\n\n// =========================================================================\n// <Switch> component\n// =========================================================================\n\nexport interface SwitchProps {\n /** The value to switch on */\n on: unknown;\n /** Cases map: value → render function */\n cases: Record<string, () => AkashNode>;\n /** Default case */\n fallback?: () => AkashNode;\n}\n\n/**\n * <Switch> component — declarative switch/case.\n *\n * ```ts\n * Switch({\n * on: status(),\n * cases: {\n * loading: () => Spinner({}),\n * error: () => ErrorView({}),\n * success: () => Content({}),\n * },\n * fallback: () => 'Unknown status',\n * });\n * ```\n */\nexport const Switch = defineComponent<SwitchProps>((ctx) => {\n return () => {\n const container = document.createElement('div');\n container.style.display = 'contents';\n const anchor = document.createComment('switch');\n container.appendChild(anchor);\n\n const casesMap = { ...ctx.props.cases };\n if (ctx.props.fallback) {\n casesMap._default = () => nodeToDOM(ctx.props.fallback!());\n }\n\n renderSwitch(\n container,\n anchor,\n () => ctx.props.on,\n Object.fromEntries(\n Object.entries(casesMap).map(([k, v]) => [\n k,\n () => nodeToDOM(v()),\n ]),\n ),\n );\n\n return container;\n };\n});\n\n// =========================================================================\n// match() — functional pattern matching for signals\n// =========================================================================\n\n/**\n * Pattern match on a signal value. Returns the result of the matching branch.\n *\n * ```ts\n * const message = match(status(), {\n * loading: () => 'Loading...',\n * error: () => 'Something went wrong',\n * success: () => 'Done!',\n * _: () => 'Unknown',\n * });\n * ```\n */\nexport function match<T, R>(\n value: T,\n cases: Record<string, (value: T) => R> & { _?: (value: T) => R },\n): R | undefined {\n const key = String(value);\n const branch = cases[key] ?? cases._;\n return branch ? branch(value) : undefined;\n}\n","/**\n * Hierarchical Dependency Injection.\n *\n * Extends the basic provide/inject with multi-level injectors,\n * provider factories, tree-shakable providers, and multi-providers.\n *\n * ```ts\n * // Define a provider with factory\n * const ApiService = defineProvider({\n * factory: () => createHttpClient({ baseUrl: '/api' }),\n * });\n *\n * // Tree-shakable provider (only bundled if injected)\n * const Logger = defineProvider({\n * factory: () => new ConsoleLogger(),\n * providedIn: 'root',\n * });\n *\n * // Use in component\n * const api = injectProvider(ApiService);\n * ```\n */\n\nimport { signal } from './signals.js';\n\n// =========================================================================\n// Types\n// =========================================================================\n\nexport interface ProviderDef<T> {\n _type: 'provider';\n factory: () => T;\n providedIn?: 'root' | 'component';\n multi?: boolean;\n _id: symbol;\n}\n\nexport interface Injector {\n /** Get a provider value */\n get<T>(provider: ProviderDef<T>): T;\n /** Check if a provider is registered */\n has(provider: ProviderDef<unknown>): boolean;\n /** Create a child injector */\n createChild(providers?: ProviderRegistration[]): Injector;\n /** Dispose this injector and all cached instances */\n dispose(): void;\n}\n\nexport interface ProviderRegistration<T = unknown> {\n provide: ProviderDef<T>;\n useFactory?: () => T;\n useValue?: T;\n useExisting?: ProviderDef<T>;\n multi?: boolean;\n}\n\n// =========================================================================\n// defineProvider\n// =========================================================================\n\nlet providerIdCounter = 0;\n\n/**\n * Define a typed provider.\n *\n * ```ts\n * const DatabaseService = defineProvider({\n * factory: () => new Database(config),\n * providedIn: 'root', // singleton, tree-shakable\n * });\n * ```\n */\nexport function defineProvider<T>(config: {\n factory: () => T;\n providedIn?: 'root' | 'component';\n multi?: boolean;\n}): ProviderDef<T> {\n return {\n _type: 'provider',\n factory: config.factory,\n providedIn: config.providedIn,\n multi: config.multi,\n _id: Symbol(`provider-${++providerIdCounter}`),\n };\n}\n\n// =========================================================================\n// Injector implementation\n// =========================================================================\n\nconst rootInstances = new Map<symbol, unknown>();\n\n/**\n * Create an injector with hierarchical resolution.\n *\n * ```ts\n * const injector = createInjector([\n * { provide: ApiService, useFactory: () => new MockApi() },\n * { provide: Logger, useValue: console },\n * ]);\n *\n * const api = injector.get(ApiService);\n * ```\n */\nexport function createInjector(\n providers: ProviderRegistration[] = [],\n parent?: Injector,\n): Injector {\n const instances = new Map<symbol, unknown>();\n const multiInstances = new Map<symbol, unknown[]>();\n const registrations = new Map<symbol, ProviderRegistration>();\n\n // Register providers\n for (const reg of providers) {\n registrations.set(reg.provide._id, reg);\n }\n\n const injector: Injector = {\n get<T>(provider: ProviderDef<T>): T {\n const id = provider._id;\n\n // Multi-provider\n if (provider.multi) {\n if (multiInstances.has(id)) return multiInstances.get(id) as T;\n const values: unknown[] = [];\n const reg = registrations.get(id);\n if (reg?.useFactory) values.push(reg.useFactory());\n else if (reg?.useValue !== undefined) values.push(reg.useValue);\n if (parent?.has(provider)) {\n const parentValues = parent.get(provider);\n if (Array.isArray(parentValues)) values.push(...parentValues);\n }\n multiInstances.set(id, values);\n return values as T;\n }\n\n // Check local cache\n if (instances.has(id)) return instances.get(id) as T;\n\n // Check root singleton\n if (provider.providedIn === 'root' && rootInstances.has(id)) {\n return rootInstances.get(id) as T;\n }\n\n // Check local registrations\n const reg = registrations.get(id);\n if (reg) {\n const instance = resolveRegistration(reg, injector);\n instances.set(id, instance);\n return instance as T;\n }\n\n // Check parent\n if (parent) {\n return parent.get(provider);\n }\n\n // Use default factory\n const instance = provider.factory();\n\n // Cache at appropriate level\n if (provider.providedIn === 'root') {\n rootInstances.set(id, instance);\n } else {\n instances.set(id, instance);\n }\n\n return instance;\n },\n\n has(provider: ProviderDef<unknown>): boolean {\n if (instances.has(provider._id)) return true;\n if (registrations.has(provider._id)) return true;\n if (provider.providedIn === 'root' && rootInstances.has(provider._id)) return true;\n if (parent) return parent.has(provider);\n return false;\n },\n\n createChild(childProviders?: ProviderRegistration[]): Injector {\n return createInjector(childProviders ?? [], injector);\n },\n\n dispose() {\n instances.clear();\n multiInstances.clear();\n },\n };\n\n return injector;\n}\n\nfunction resolveRegistration(reg: ProviderRegistration, injector: Injector): unknown {\n if (reg.useValue !== undefined) return reg.useValue;\n if (reg.useFactory) return reg.useFactory();\n if (reg.useExisting) return injector.get(reg.useExisting);\n return reg.provide.factory();\n}\n\n// =========================================================================\n// Component-level injection helpers\n// =========================================================================\n\nlet currentInjector: Injector | null = null;\n\n/**\n * Set the current injector (called by component setup).\n * @internal\n */\nexport function setCurrentInjector(injector: Injector | null): Injector | null {\n const prev = currentInjector;\n currentInjector = injector;\n return prev;\n}\n\n/**\n * Inject a provider in the current component context.\n *\n * ```ts\n * const api = injectProvider(ApiService);\n * ```\n */\nexport function injectProvider<T>(provider: ProviderDef<T>): T {\n if (!currentInjector) {\n // Fallback to root or create new instance\n if (provider.providedIn === 'root') {\n if (rootInstances.has(provider._id)) {\n return rootInstances.get(provider._id) as T;\n }\n const instance = provider.factory();\n rootInstances.set(provider._id, instance);\n return instance;\n }\n return provider.factory();\n }\n return currentInjector.get(provider);\n}\n\n/**\n * Clear root provider instances (useful for testing).\n */\nexport function clearProviders(): void {\n rootInstances.clear();\n}\n","/**\n * Deferred loading with triggers.\n *\n * Lazy-load components based on viewport visibility, user interaction,\n * idle time, timer, hover, or custom conditions.\n *\n * ```ts\n * const LazyComments = defer(() => import('./Comments.akash'), {\n * trigger: 'viewport',\n * loading: () => <Skeleton variant=\"text\" />,\n * });\n *\n * const LazyChart = defer(() => import('./Chart.akash'), {\n * trigger: 'idle',\n * loading: () => <Spinner />,\n * });\n *\n * const LazyDropdown = defer(() => import('./Dropdown.akash'), {\n * trigger: 'interaction', // loads on hover/focus/click\n * });\n * ```\n */\n\nimport { signal } from './signals.js';\nimport { defineComponent } from './component.js';\nimport { nodeToDOM } from './dom.js';\nimport type { Component } from './component.js';\nimport type { AkashNode } from './types.js';\nimport type { ReadonlySignal } from './signals.js';\n\n// =========================================================================\n// Types\n// =========================================================================\n\nexport type DeferTrigger =\n | 'immediate'\n | 'viewport'\n | 'interaction'\n | 'idle'\n | 'hover'\n | { type: 'timer'; delay: number }\n | { type: 'custom'; condition: () => boolean };\n\nexport interface DeferOptions {\n /** When to start loading (default: 'viewport') */\n trigger?: DeferTrigger;\n /** Loading placeholder */\n loading?: () => AkashNode;\n /** Error fallback */\n error?: (err: Error) => AkashNode;\n /** Prefetch — start loading early but don't render until triggered */\n prefetch?: boolean;\n /** Minimum loading time in ms (prevent flash of loading state) */\n minLoadTime?: number;\n /** Viewport root margin for 'viewport' trigger */\n rootMargin?: string;\n}\n\n// =========================================================================\n// defer()\n// =========================================================================\n\n/**\n * Create a deferred component that loads based on a trigger.\n */\nexport function defer<P extends Record<string, unknown>>(\n loader: () => Promise<{ default: Component<P> }>,\n options: DeferOptions = {},\n): Component<P> {\n const {\n trigger = 'viewport',\n loading: loadingFn,\n error: errorFn,\n prefetch = false,\n minLoadTime = 0,\n rootMargin = '200px',\n } = options;\n\n let resolvedComp: Component<P> | null = null;\n let loadPromise: Promise<void> | null = null;\n let loadError: Error | null = null;\n\n function startLoad(): Promise<void> {\n if (loadPromise) return loadPromise;\n\n const start = Date.now();\n loadPromise = loader()\n .then(async (mod) => {\n // Enforce minimum load time\n const elapsed = Date.now() - start;\n if (minLoadTime > 0 && elapsed < minLoadTime) {\n await new Promise((r) => setTimeout(r, minLoadTime - elapsed));\n }\n resolvedComp = mod.default;\n })\n .catch((err) => {\n loadError = err instanceof Error ? err : new Error(String(err));\n });\n\n return loadPromise;\n }\n\n // Prefetch if requested\n if (prefetch) startLoad();\n\n return defineComponent<P>((ctx) => {\n const state = signal<'idle' | 'loading' | 'ready' | 'error'>('idle');\n let triggerCleanup: (() => void) | null = null;\n\n async function triggerLoad(): Promise<void> {\n if (state() !== 'idle') return;\n state.set('loading');\n await startLoad();\n state.set(loadError ? 'error' : 'ready');\n }\n\n return () => {\n const container = document.createElement('div');\n container.style.display = 'contents';\n\n const s = state();\n\n if (s === 'ready' && resolvedComp) {\n container.appendChild(resolvedComp(ctx.props as any));\n return container;\n }\n\n if (s === 'error' && errorFn && loadError) {\n container.appendChild(nodeToDOM(errorFn(loadError)));\n return container;\n }\n\n // Show loading placeholder\n if (loadingFn && s === 'loading') {\n container.appendChild(nodeToDOM(loadingFn()));\n }\n\n // Set up trigger\n if (s === 'idle') {\n setupTrigger(container, trigger, triggerLoad, rootMargin).then((cleanup) => {\n triggerCleanup = cleanup;\n });\n }\n\n return container;\n };\n });\n}\n\n// =========================================================================\n// Trigger setup\n// =========================================================================\n\nasync function setupTrigger(\n el: HTMLElement,\n trigger: DeferTrigger,\n load: () => void,\n rootMargin: string,\n): Promise<() => void> {\n if (trigger === 'immediate') {\n load();\n return () => {};\n }\n\n if (trigger === 'viewport') {\n return setupViewportTrigger(el, load, rootMargin);\n }\n\n if (trigger === 'interaction' || trigger === 'hover') {\n return setupInteractionTrigger(el, load, trigger);\n }\n\n if (trigger === 'idle') {\n return setupIdleTrigger(load);\n }\n\n if (typeof trigger === 'object' && trigger.type === 'timer') {\n return setupTimerTrigger(load, trigger.delay);\n }\n\n if (typeof trigger === 'object' && trigger.type === 'custom') {\n return setupCustomTrigger(load, trigger.condition);\n }\n\n load();\n return () => {};\n}\n\nfunction setupViewportTrigger(\n el: HTMLElement,\n load: () => void,\n rootMargin: string,\n): () => void {\n if (typeof IntersectionObserver === 'undefined') {\n load();\n return () => {};\n }\n\n const observer = new IntersectionObserver(\n (entries) => {\n if (entries[0]?.isIntersecting) {\n observer.disconnect();\n load();\n }\n },\n { rootMargin },\n );\n\n // Observe after element is in DOM\n requestAnimationFrame(() => observer.observe(el));\n return () => observer.disconnect();\n}\n\nfunction setupInteractionTrigger(\n el: HTMLElement,\n load: () => void,\n type: 'interaction' | 'hover',\n): () => void {\n const events = type === 'hover'\n ? ['mouseenter', 'focusin']\n : ['click', 'mouseenter', 'focusin', 'touchstart'];\n\n const handler = () => {\n for (const event of events) {\n el.removeEventListener(event, handler);\n }\n load();\n };\n\n for (const event of events) {\n el.addEventListener(event, handler, { once: true, passive: true });\n }\n\n return () => {\n for (const event of events) {\n el.removeEventListener(event, handler);\n }\n };\n}\n\nfunction setupIdleTrigger(load: () => void): () => void {\n if (typeof requestIdleCallback !== 'undefined') {\n const id = requestIdleCallback(() => load());\n return () => cancelIdleCallback(id);\n }\n // Fallback\n const timer = setTimeout(load, 200);\n return () => clearTimeout(timer);\n}\n\nfunction setupTimerTrigger(load: () => void, delay: number): () => void {\n const timer = setTimeout(load, delay);\n return () => clearTimeout(timer);\n}\n\nfunction setupCustomTrigger(load: () => void, condition: () => boolean): () => void {\n const check = () => {\n if (condition()) load();\n else requestAnimationFrame(check);\n };\n requestAnimationFrame(check);\n return () => {}; // Can't cancel rAF chain easily\n}\n","/**\n * View Transitions API integration.\n *\n * Wraps the browser's native View Transitions API for smooth\n * page transitions. Falls back gracefully when not supported.\n *\n * ```ts\n * // With router\n * const router = createRouter(routes);\n * enableViewTransitions(router);\n *\n * // Manual\n * await startViewTransition(() => {\n * updateDOM();\n * });\n * ```\n */\n\n// =========================================================================\n// Types\n// =========================================================================\n\nexport interface ViewTransitionOptions {\n /** CSS class to add to the document during transition */\n className?: string;\n /** Callback before the transition starts */\n onBefore?: () => void;\n /** Callback after the transition completes */\n onAfter?: () => void;\n /** Fallback behavior when API is not supported (default: 'instant') */\n fallback?: 'instant' | 'fade' | 'none';\n}\n\nexport interface ViewTransition {\n /** Promise that resolves when transition animation is complete */\n finished: Promise<void>;\n /** Promise that resolves when the DOM update callback has run */\n updateCallbackDone: Promise<void>;\n /** Promise that resolves when the transition is ready to animate */\n ready: Promise<void>;\n /** Skip the transition animation */\n skipTransition(): void;\n}\n\n// =========================================================================\n// Feature detection\n// =========================================================================\n\n/**\n * Check if the View Transitions API is supported.\n */\nexport function supportsViewTransitions(): boolean {\n return typeof document !== 'undefined' && 'startViewTransition' in document;\n}\n\n// =========================================================================\n// startViewTransition\n// =========================================================================\n\n/**\n * Start a view transition with the native API, falling back\n * to instant DOM update when not supported.\n *\n * ```ts\n * await startViewTransition(() => {\n * container.innerHTML = newContent;\n * });\n * ```\n */\nexport function startViewTransition(\n updateCallback: () => void | Promise<void>,\n options: ViewTransitionOptions = {},\n): ViewTransition {\n const { className, onBefore, onAfter, fallback = 'instant' } = options;\n\n onBefore?.();\n\n // Native View Transitions API\n if (supportsViewTransitions()) {\n if (className) document.documentElement.classList.add(className);\n\n const transition = (document as any).startViewTransition(async () => {\n await updateCallback();\n });\n\n const finished = transition.finished.then(() => {\n if (className) document.documentElement.classList.remove(className);\n onAfter?.();\n });\n\n return {\n finished,\n updateCallbackDone: transition.updateCallbackDone,\n ready: transition.ready,\n skipTransition: () => transition.skipTransition(),\n };\n }\n\n // Fallback\n if (fallback === 'fade') {\n return fadeTransition(updateCallback, options);\n }\n\n // Instant fallback\n const result = updateCallback();\n const done = result instanceof Promise ? result : Promise.resolve();\n\n onAfter?.();\n\n return {\n finished: done,\n updateCallbackDone: done,\n ready: Promise.resolve(),\n skipTransition: () => {},\n };\n}\n\n// =========================================================================\n// CSS helpers for View Transitions\n// =========================================================================\n\n/**\n * Generate CSS for customizing view transitions.\n *\n * ```ts\n * const css = viewTransitionCSS({\n * duration: '0.3s',\n * oldAnimation: 'slide-out-left',\n * newAnimation: 'slide-in-right',\n * });\n * ```\n */\nexport function viewTransitionCSS(config: {\n duration?: string;\n easing?: string;\n oldAnimation?: string;\n newAnimation?: string;\n} = {}): string {\n const {\n duration = '0.25s',\n easing = 'ease',\n oldAnimation,\n newAnimation,\n } = config;\n\n let css = `::view-transition-old(root),\\n::view-transition-new(root) {\\n`;\n css += ` animation-duration: ${duration};\\n`;\n css += ` animation-timing-function: ${easing};\\n`;\n css += `}\\n`;\n\n if (oldAnimation) {\n css += `::view-transition-old(root) {\\n animation-name: ${oldAnimation};\\n}\\n`;\n }\n if (newAnimation) {\n css += `::view-transition-new(root) {\\n animation-name: ${newAnimation};\\n}\\n`;\n }\n\n return css;\n}\n\n/**\n * Assign a view-transition-name to an element for per-element transitions.\n *\n * ```ts\n * assignTransitionName(headerEl, 'page-header');\n * assignTransitionName(contentEl, 'page-content');\n * ```\n */\nexport function assignTransitionName(el: HTMLElement, name: string): void {\n el.style.viewTransitionName = name;\n}\n\n// =========================================================================\n// Fade fallback (for browsers without View Transitions)\n// =========================================================================\n\nfunction fadeTransition(\n updateCallback: () => void | Promise<void>,\n options: ViewTransitionOptions,\n): ViewTransition {\n const el = document.documentElement;\n\n const finished = new Promise<void>(async (resolve) => {\n // Fade out\n el.style.transition = 'opacity 0.15s ease';\n el.style.opacity = '0';\n\n await new Promise((r) => setTimeout(r, 150));\n\n // Update DOM\n await updateCallback();\n\n // Fade in\n el.style.opacity = '1';\n\n await new Promise((r) => setTimeout(r, 150));\n\n el.style.transition = '';\n el.style.opacity = '';\n\n options.onAfter?.();\n resolve();\n });\n\n return {\n finished,\n updateCallbackDone: finished,\n ready: Promise.resolve(),\n skipTransition: () => {\n el.style.transition = '';\n el.style.opacity = '';\n },\n };\n}\n","/**\n * URL-synced reactive state.\n *\n * Automatically sync signal values to URL query parameters.\n * Users can share links, use browser back/forward, and state\n * persists across page reloads — all with zero boilerplate.\n *\n * ```ts\n * const search = useQueryState('q', '');\n * const page = useQueryState('page', 1);\n * const tags = useQueryState('tags', ['js']);\n *\n * search.set('akashjs'); // URL → ?q=akashjs&page=1&tags=js\n * // User hits back → signals update automatically\n * ```\n */\n\nimport { signal, effect } from './signals.js';\nimport { batch } from './scheduler.js';\nimport type { Signal } from './signals.js';\n\n// =========================================================================\n// Types\n// =========================================================================\n\nexport interface QueryStateOptions<T> {\n /** Custom serializer (default: auto-detect from type) */\n serialize?: (value: T) => string;\n /** Custom deserializer (default: auto-detect from type) */\n deserialize?: (raw: string) => T;\n /** Whether to push or replace history entry (default: 'replace') */\n history?: 'push' | 'replace';\n /** Debounce URL updates in ms (default: 0) */\n debounce?: number;\n /** Remove param from URL when value equals default */\n removeDefault?: boolean;\n}\n\n// =========================================================================\n// Serializers\n// =========================================================================\n\nfunction defaultSerialize(value: unknown): string {\n if (Array.isArray(value)) return value.join(',');\n if (typeof value === 'boolean') return value ? 'true' : 'false';\n return String(value);\n}\n\nfunction defaultDeserialize<T>(raw: string, defaultValue: T): T {\n if (typeof defaultValue === 'number') return Number(raw) as T;\n if (typeof defaultValue === 'boolean') return (raw === 'true' || raw === '1') as T;\n if (Array.isArray(defaultValue)) {\n return (raw ? raw.split(',') : []) as T;\n }\n return raw as T;\n}\n\n// =========================================================================\n// URL helpers\n// =========================================================================\n\nfunction getSearchParams(): URLSearchParams {\n if (typeof window === 'undefined') return new URLSearchParams();\n return new URLSearchParams(window.location.search);\n}\n\nfunction updateURL(params: URLSearchParams, mode: 'push' | 'replace'): void {\n if (typeof window === 'undefined') return;\n\n const search = params.toString();\n const url = search ? `${window.location.pathname}?${search}${window.location.hash}` : `${window.location.pathname}${window.location.hash}`;\n\n if (mode === 'push') {\n window.history.pushState(null, '', url);\n } else {\n window.history.replaceState(null, '', url);\n }\n}\n\n// =========================================================================\n// useQueryState — single value\n// =========================================================================\n\n/** Track active query state signals for popstate sync */\nconst activeStates = new Map<string, { signal: Signal<any>; deserialize: (raw: string) => any; defaultValue: any }>();\nlet popstateListening = false;\n\nfunction ensurePopstateListener(): void {\n if (popstateListening || typeof window === 'undefined') return;\n popstateListening = true;\n\n window.addEventListener('popstate', () => {\n const params = getSearchParams();\n batch(() => {\n for (const [key, state] of activeStates) {\n const raw = params.get(key);\n const value = raw !== null\n ? state.deserialize(raw)\n : state.defaultValue;\n state.signal.set(value);\n }\n });\n });\n}\n\n/**\n * Create a signal synced to a URL query parameter.\n *\n * ```ts\n * const search = useQueryState('q', '');\n * search(); // reads from URL or default\n * search.set('hello'); // updates URL to ?q=hello\n * ```\n */\nexport function useQueryState<T>(\n key: string,\n defaultValue: T,\n options: QueryStateOptions<T> = {},\n): Signal<T> {\n const {\n serialize = (v: T) => defaultSerialize(v),\n deserialize = (raw: string) => defaultDeserialize(raw, defaultValue),\n history: historyMode = 'replace',\n debounce: debounceMs = 0,\n removeDefault = true,\n } = options;\n\n // Read initial value from URL\n const params = getSearchParams();\n const raw = params.get(key);\n const initialValue = raw !== null ? deserialize(raw) : defaultValue;\n\n const state = signal<T>(initialValue);\n\n // Register for popstate sync\n activeStates.set(key, { signal: state, deserialize, defaultValue });\n ensurePopstateListener();\n\n // Sync signal → URL\n let debounceTimer: ReturnType<typeof setTimeout> | null = null;\n let isInternalUpdate = false;\n\n const originalSet = state.set;\n state.set = (value: T) => {\n originalSet(value);\n\n if (isInternalUpdate) return;\n\n const doUpdate = () => {\n const currentParams = getSearchParams();\n\n if (removeDefault && value === defaultValue) {\n currentParams.delete(key);\n } else {\n currentParams.set(key, serialize(value));\n }\n\n updateURL(currentParams, historyMode);\n };\n\n if (debounceMs > 0) {\n if (debounceTimer) clearTimeout(debounceTimer);\n debounceTimer = setTimeout(doUpdate, debounceMs);\n } else {\n doUpdate();\n }\n };\n\n const originalUpdate = state.update;\n state.update = (fn: (prev: T) => T) => {\n state.set(fn(state()));\n };\n\n return state;\n}\n\n// =========================================================================\n// useQueryStates — multiple values at once\n// =========================================================================\n\ntype QueryStateSchema = Record<string, {\n default: unknown;\n serialize?: (value: any) => string;\n deserialize?: (raw: string) => any;\n}>;\n\ntype QueryStates<T extends QueryStateSchema> = {\n [K in keyof T]: Signal<T[K]['default']>;\n};\n\n/**\n * Create multiple URL-synced signals at once.\n * All updates within a batch result in a single URL change.\n *\n * ```ts\n * const { q, page, sort } = useQueryStates({\n * q: { default: '' },\n * page: { default: 1 },\n * sort: { default: 'name' },\n * });\n * ```\n */\nexport function useQueryStates<T extends QueryStateSchema>(\n schema: T,\n options?: { history?: 'push' | 'replace' },\n): QueryStates<T> {\n const result = {} as any;\n for (const [key, config] of Object.entries(schema)) {\n result[key] = useQueryState(key, config.default, {\n serialize: config.serialize,\n deserialize: config.deserialize,\n history: options?.history,\n });\n }\n return result;\n}\n\n// =========================================================================\n// Utilities\n// =========================================================================\n\n/**\n * Remove all query state params from the URL.\n */\nexport function clearQueryState(): void {\n if (typeof window === 'undefined') return;\n const url = `${window.location.pathname}${window.location.hash}`;\n window.history.replaceState(null, '', url);\n\n batch(() => {\n for (const [, state] of activeStates) {\n state.signal.set(state.defaultValue);\n }\n });\n}\n\n/**\n * Get all current query params as a plain object.\n */\nexport function getQueryParams(): Record<string, string> {\n const params = getSearchParams();\n const result: Record<string, string> = {};\n params.forEach((value, key) => { result[key] = value; });\n return result;\n}\n\n/**\n * Cleanup: remove a specific query state binding.\n */\nexport function removeQueryState(key: string): void {\n activeStates.delete(key);\n}\n\n/**\n * Cleanup all query state bindings (useful for testing).\n */\nexport function resetQueryState(): void {\n activeStates.clear();\n}\n","/**\n * Tweened values — smooth interpolation between states.\n *\n * Unlike signals that update instantly, tweened values animate\n * smoothly from old to new over a duration.\n *\n * ```ts\n * const progress = tweened(0, { duration: 400 });\n * progress.set(100); // smoothly animates 0 → 100 over 400ms\n * progress(); // intermediate values during animation\n *\n * const color = tweened('#ff0000', { duration: 300, interpolate: lerpColor });\n * ```\n */\n\nimport { signal } from './signals.js';\nimport type { Signal, ReadonlySignal } from './signals.js';\n\n// =========================================================================\n// Types\n// =========================================================================\n\nexport type Interpolator<T> = (from: T, to: T, t: number) => T;\n\nexport type EasingFn = (t: number) => number;\n\nexport interface TweenedOptions<T> {\n /** Duration in ms (default: 400) */\n duration?: number;\n /** Easing function (default: cubicOut) */\n easing?: EasingFn;\n /** Custom interpolation function */\n interpolate?: Interpolator<T>;\n /** Delay before animation starts */\n delay?: number;\n}\n\nexport interface TweenedSignal<T> {\n /** Read current (animated) value */\n (): T;\n /** Set new target — animates from current to new */\n set(value: T, opts?: Partial<TweenedOptions<T>>): Promise<void>;\n /** Set immediately without animation */\n setImmediate(value: T): void;\n /** Current target value */\n target: () => T;\n}\n\n// =========================================================================\n// Built-in easing functions\n// =========================================================================\n\nexport const easings = {\n linear: (t: number) => t,\n cubicIn: (t: number) => t * t * t,\n cubicOut: (t: number) => 1 - Math.pow(1 - t, 3),\n cubicInOut: (t: number) => t < 0.5 ? 4 * t * t * t : 1 - Math.pow(-2 * t + 2, 3) / 2,\n quadIn: (t: number) => t * t,\n quadOut: (t: number) => 1 - (1 - t) * (1 - t),\n quintOut: (t: number) => 1 - Math.pow(1 - t, 5),\n bounceOut: (t: number) => {\n if (t < 1 / 2.75) return 7.5625 * t * t;\n if (t < 2 / 2.75) return 7.5625 * (t -= 1.5 / 2.75) * t + 0.75;\n if (t < 2.5 / 2.75) return 7.5625 * (t -= 2.25 / 2.75) * t + 0.9375;\n return 7.5625 * (t -= 2.625 / 2.75) * t + 0.984375;\n },\n elasticOut: (t: number) => {\n if (t === 0 || t === 1) return t;\n return Math.pow(2, -10 * t) * Math.sin((t - 0.1) * 5 * Math.PI) + 1;\n },\n} as const;\n\n// =========================================================================\n// Default interpolators\n// =========================================================================\n\nfunction defaultInterpolate<T>(from: T, to: T, t: number): T {\n if (typeof from === 'number' && typeof to === 'number') {\n return (from + (to - from) * t) as T;\n }\n // For non-numbers, snap at halfway\n return t < 0.5 ? from : to;\n}\n\n// =========================================================================\n// tweened()\n// =========================================================================\n\n/**\n * Create a tweened signal that animates between values.\n *\n * ```ts\n * const count = tweened(0, { duration: 300, easing: easings.cubicOut });\n * count.set(100); // smoothly goes 0 → 100\n * count(); // current interpolated value\n * ```\n */\nexport function tweened<T>(\n initialValue: T,\n options: TweenedOptions<T> = {},\n): TweenedSignal<T> {\n const {\n duration = 400,\n easing = easings.cubicOut,\n interpolate = defaultInterpolate,\n delay = 0,\n } = options;\n\n const current = signal<T>(initialValue);\n const targetValue = signal<T>(initialValue);\n let rafId = 0;\n let running = false;\n\n const read = (() => current()) as TweenedSignal<T>;\n\n read.set = (value: T, overrides?: Partial<TweenedOptions<T>>): Promise<void> => {\n const dur = overrides?.duration ?? duration;\n const ease = overrides?.easing ?? easing;\n const interp = overrides?.interpolate ?? interpolate;\n const del = overrides?.delay ?? delay;\n\n const from = current();\n targetValue.set(value);\n\n if (dur === 0) {\n current.set(value);\n return Promise.resolve();\n }\n\n // Cancel any running animation\n if (running) {\n cancelAnimationFrame(rafId);\n running = false;\n }\n\n return new Promise<void>((resolve) => {\n const start = performance.now() + del;\n running = true;\n\n function tick(now: number): void {\n if (!running) { resolve(); return; }\n\n const elapsed = now - start;\n if (elapsed < 0) {\n rafId = requestAnimationFrame(tick);\n return;\n }\n\n const t = Math.min(elapsed / dur, 1);\n const easedT = ease(t);\n current.set(interp(from, value, easedT));\n\n if (t < 1) {\n rafId = requestAnimationFrame(tick);\n } else {\n running = false;\n resolve();\n }\n }\n\n rafId = requestAnimationFrame(tick);\n });\n };\n\n read.setImmediate = (value: T): void => {\n if (running) { cancelAnimationFrame(rafId); running = false; }\n current.set(value);\n targetValue.set(value);\n };\n\n read.target = () => targetValue();\n\n return read;\n}\n","/**\n * FLIP animations for list reordering.\n *\n * First-Last-Invert-Play: measure element positions before and after\n * a DOM change, then animate from old to new positions.\n *\n * ```ts\n * const flip = createFlip(listContainer, {\n * duration: 300,\n * easing: 'cubic-bezier(0.2, 0, 0, 1)',\n * });\n *\n * // Before changing the list:\n * flip.measure();\n * // Change the DOM (reorder, add, remove)\n * items.set(newOrder);\n * // Animate:\n * flip.animate();\n * ```\n */\n\n// =========================================================================\n// Types\n// =========================================================================\n\nexport interface FlipOptions {\n /** Animation duration in ms (default: 300) */\n duration?: number;\n /** CSS easing (default: 'cubic-bezier(0.2, 0, 0, 1)') */\n easing?: string;\n /** Delay in ms */\n delay?: number;\n /** Only animate elements matching this selector */\n selector?: string;\n /** Key attribute to track elements across reorders (default: 'data-key') */\n keyAttribute?: string;\n /** Callback when animation completes */\n onComplete?: () => void;\n}\n\nexport interface FlipController {\n /** Measure current positions (call BEFORE DOM change) */\n measure(): void;\n /** Animate from measured positions to current (call AFTER DOM change) */\n animate(): Promise<void>;\n /** Measure and animate in one step using a callback */\n flip(update: () => void): Promise<void>;\n}\n\ninterface Rect {\n left: number;\n top: number;\n width: number;\n height: number;\n}\n\n// =========================================================================\n// createFlip\n// =========================================================================\n\n/**\n * Create a FLIP animation controller for a container.\n *\n * ```ts\n * const flip = createFlip(container);\n * flip.flip(() => {\n * // reorder DOM elements here\n * container.appendChild(container.firstChild); // move first to last\n * });\n * ```\n */\nexport function createFlip(\n container: HTMLElement,\n options: FlipOptions = {},\n): FlipController {\n const {\n duration = 300,\n easing = 'cubic-bezier(0.2, 0, 0, 1)',\n delay = 0,\n selector,\n keyAttribute = 'data-key',\n onComplete,\n } = options;\n\n let firstPositions = new Map<string, Rect>();\n\n function getElements(): HTMLElement[] {\n if (selector) {\n return Array.from(container.querySelectorAll<HTMLElement>(selector));\n }\n return Array.from(container.children) as HTMLElement[];\n }\n\n function getKey(el: HTMLElement): string {\n return el.getAttribute(keyAttribute) ?? el.id ?? '';\n }\n\n function measure(): void {\n firstPositions = new Map();\n for (const el of getElements()) {\n const key = getKey(el);\n if (key) {\n const rect = el.getBoundingClientRect();\n firstPositions.set(key, {\n left: rect.left,\n top: rect.top,\n width: rect.width,\n height: rect.height,\n });\n }\n }\n }\n\n function animate(): Promise<void> {\n const elements = getElements();\n const animations: Animation[] = [];\n\n for (const el of elements) {\n const key = getKey(el);\n const first = firstPositions.get(key);\n if (!first) continue; // New element — could add enter animation\n\n const last = el.getBoundingClientRect();\n\n const dx = first.left - last.left;\n const dy = first.top - last.top;\n const dw = first.width / (last.width || 1);\n const dh = first.height / (last.height || 1);\n\n // Skip if no movement\n if (Math.abs(dx) < 0.5 && Math.abs(dy) < 0.5 && Math.abs(dw - 1) < 0.01 && Math.abs(dh - 1) < 0.01) {\n continue;\n }\n\n const animation = el.animate(\n [\n {\n transform: `translate(${dx}px, ${dy}px) scale(${dw}, ${dh})`,\n },\n {\n transform: 'translate(0, 0) scale(1, 1)',\n },\n ],\n {\n duration,\n easing,\n delay,\n fill: 'both',\n },\n );\n\n animations.push(animation);\n }\n\n // Detect removed elements (in first but not in last)\n const currentKeys = new Set(elements.map(getKey));\n for (const [key, rect] of firstPositions) {\n if (!currentKeys.has(key)) {\n // Element was removed — could add exit animation placeholder\n }\n }\n\n firstPositions.clear();\n\n return new Promise<void>((resolve) => {\n if (animations.length === 0) {\n onComplete?.();\n resolve();\n return;\n }\n\n Promise.all(animations.map((a) => a.finished)).then(() => {\n // Clean up fill\n for (const a of animations) {\n a.cancel();\n }\n onComplete?.();\n resolve();\n });\n });\n }\n\n return {\n measure,\n animate,\n async flip(update: () => void): Promise<void> {\n measure();\n update();\n // Wait one frame for DOM to update\n await new Promise((r) => requestAnimationFrame(r));\n return animate();\n },\n };\n}\n\n/**\n * One-shot FLIP animation helper.\n *\n * ```ts\n * await flip(container, () => {\n * // reorder items\n * }, { duration: 300 });\n * ```\n */\nexport async function flip(\n container: HTMLElement,\n update: () => void,\n options?: FlipOptions,\n): Promise<void> {\n const ctrl = createFlip(container, options);\n return ctrl.flip(update);\n}\n","/**\n * Await block — template-level async handling.\n *\n * Renders different content for pending/resolved/rejected states\n * of a promise, similar to Svelte's {#await} blocks.\n *\n * ```ts\n * Await({\n * promise: fetchUser(userId()),\n * pending: () => <Spinner />,\n * then: (user) => <UserCard user={user} />,\n * catch: (err) => <Error message={err.message} />,\n * });\n * ```\n */\n\nimport { defineComponent } from './component.js';\nimport { signal } from './signals.js';\nimport { nodeToDOM } from './dom.js';\nimport type { AkashNode } from './types.js';\n\n// =========================================================================\n// Types\n// =========================================================================\n\nexport interface AwaitProps<T> {\n /** The promise to await */\n promise: Promise<T>;\n /** Render while pending */\n pending?: () => AkashNode;\n /** Render when resolved */\n then: (value: T) => AkashNode;\n /** Render when rejected */\n catch?: (error: Error) => AkashNode;\n}\n\ntype AwaitState<T> =\n | { status: 'pending' }\n | { status: 'resolved'; value: T }\n | { status: 'rejected'; error: Error };\n\n// =========================================================================\n// Await component\n// =========================================================================\n\n/**\n * <Await> component — declarative promise handling.\n */\nexport const Await = defineComponent<AwaitProps<any>>((ctx) => {\n const state = signal<AwaitState<unknown>>({ status: 'pending' });\n\n // Track the promise to handle race conditions\n let currentPromise = ctx.props.promise;\n\n ctx.props.promise\n .then((value) => {\n if (ctx.props.promise === currentPromise) {\n state.set({ status: 'resolved', value });\n }\n })\n .catch((err) => {\n if (ctx.props.promise === currentPromise) {\n state.set({\n status: 'rejected',\n error: err instanceof Error ? err : new Error(String(err)),\n });\n }\n });\n\n return () => {\n const s = state();\n\n switch (s.status) {\n case 'pending':\n return ctx.props.pending\n ? nodeToDOM(ctx.props.pending())\n : document.createComment('await-pending');\n\n case 'resolved':\n return nodeToDOM(ctx.props.then(s.value));\n\n case 'rejected':\n return ctx.props.catch\n ? nodeToDOM(ctx.props.catch(s.error))\n : document.createComment('await-error');\n }\n };\n});\n\n// =========================================================================\n// Functional await helper\n// =========================================================================\n\n/**\n * Functional await block — returns a signal that updates as the promise resolves.\n *\n * ```ts\n * const result = awaitSignal(fetchData());\n * result().status; // 'pending' | 'resolved' | 'rejected'\n * ```\n */\nexport function awaitSignal<T>(promise: Promise<T>) {\n const state = signal<AwaitState<T>>({ status: 'pending' });\n\n promise\n .then((value) => state.set({ status: 'resolved', value }))\n .catch((error) => state.set({\n status: 'rejected',\n error: error instanceof Error ? error : new Error(String(error)),\n }));\n\n return () => state();\n}\n","/**\n * Event modifiers and extended bind/class/style directives.\n *\n * Modifiers: onClick|preventDefault|stopPropagation|once|self|capture\n * Extended binds: bind:clientWidth, bind:scrollY, bind:group, bind:this\n * Class directive: class:active={isActive}\n * Style directive: style:color={textColor}\n */\n\nimport { signal, effect } from './signals.js';\nimport type { Signal, ReadonlySignal } from './signals.js';\n\n// =========================================================================\n// Event modifiers\n// =========================================================================\n\nexport interface EventModifiers {\n preventDefault?: boolean;\n stopPropagation?: boolean;\n stopImmediatePropagation?: boolean;\n once?: boolean;\n capture?: boolean;\n passive?: boolean;\n self?: boolean;\n}\n\n/**\n * Wrap an event handler with modifiers.\n *\n * ```ts\n * const handler = withModifiers(onClick, {\n * preventDefault: true,\n * stopPropagation: true,\n * once: true,\n * });\n * el.addEventListener('click', handler);\n * ```\n */\nexport function withModifiers<E extends Event>(\n handler: (e: E) => void,\n modifiers: EventModifiers,\n): (e: E) => void {\n return (e: E) => {\n if (modifiers.self && e.target !== e.currentTarget) return;\n if (modifiers.preventDefault) e.preventDefault();\n if (modifiers.stopPropagation) e.stopPropagation();\n if (modifiers.stopImmediatePropagation) (e as any).stopImmediatePropagation?.();\n handler(e);\n };\n}\n\n/**\n * Attach an event handler with modifiers to an element.\n *\n * ```ts\n * onEvent(el, 'click', handler, { preventDefault: true, once: true });\n * ```\n */\nexport function onEvent<K extends keyof HTMLElementEventMap>(\n el: HTMLElement,\n event: K,\n handler: (e: HTMLElementEventMap[K]) => void,\n modifiers: EventModifiers = {},\n): () => void {\n const wrapped = withModifiers(handler, modifiers);\n const listenerOptions: AddEventListenerOptions = {\n once: modifiers.once,\n capture: modifiers.capture,\n passive: modifiers.passive,\n };\n\n el.addEventListener(event, wrapped as EventListener, listenerOptions);\n return () => el.removeEventListener(event, wrapped as EventListener, listenerOptions);\n}\n\n// =========================================================================\n// Extended bind directives\n// =========================================================================\n\n/**\n * Bind element dimensions to signals (read-only, auto-updating).\n *\n * ```ts\n * const { width, height } = bindDimensions(el);\n * width(); // tracks clientWidth\n * ```\n */\nexport function bindDimensions(el: HTMLElement): {\n width: ReadonlySignal<number>;\n height: ReadonlySignal<number>;\n} {\n const width = signal(el.clientWidth);\n const height = signal(el.clientHeight);\n\n if (typeof ResizeObserver !== 'undefined') {\n const observer = new ResizeObserver((entries) => {\n const entry = entries[0];\n if (entry) {\n width.set(entry.contentRect.width);\n height.set(entry.contentRect.height);\n }\n });\n observer.observe(el);\n }\n\n return {\n width: () => width(),\n height: () => height(),\n };\n}\n\n/**\n * Bind scroll position to signals.\n *\n * ```ts\n * const { scrollX, scrollY } = bindScroll(el);\n * // or for window:\n * const { scrollX, scrollY } = bindScroll();\n * ```\n */\nexport function bindScroll(el?: HTMLElement): {\n scrollX: Signal<number>;\n scrollY: Signal<number>;\n} {\n const target = el ?? (typeof window !== 'undefined' ? window : null);\n const scrollX = signal(el ? el.scrollLeft : (window?.scrollX ?? 0));\n const scrollY = signal(el ? el.scrollTop : (window?.scrollY ?? 0));\n\n if (target) {\n const handler = () => {\n if (el) {\n scrollX.set(el.scrollLeft);\n scrollY.set(el.scrollTop);\n } else {\n scrollX.set(window.scrollX);\n scrollY.set(window.scrollY);\n }\n };\n (target as any).addEventListener('scroll', handler, { passive: true });\n }\n\n // Also allow setting scroll position\n const originalSetY = scrollY.set;\n scrollY.set = (value: number) => {\n originalSetY(value);\n if (el) el.scrollTop = value;\n else window?.scrollTo(window.scrollX, value);\n };\n\n const originalSetX = scrollX.set;\n scrollX.set = (value: number) => {\n originalSetX(value);\n if (el) el.scrollLeft = value;\n else window?.scrollTo(value, window.scrollY);\n };\n\n return { scrollX, scrollY };\n}\n\n/**\n * Bind a signal to an element reference (like bind:this in Svelte).\n *\n * ```ts\n * const myRef = bindElement<HTMLInputElement>();\n * // In render: myRef.set(inputEl);\n * myRef()?.focus();\n * ```\n */\nexport function bindElement<T extends HTMLElement = HTMLElement>(): Signal<T | null> {\n return signal<T | null>(null);\n}\n\n/**\n * Bind a group of radio/checkbox inputs to a signal.\n *\n * ```ts\n * const selected = bindGroup<string>('color');\n * // Apply to each radio: bindGroupItem(radioEl, selected, 'red');\n * ```\n */\nexport function bindGroup<T>(name: string): Signal<T | null> {\n return signal<T | null>(null);\n}\n\nexport function bindGroupItem<T>(\n el: HTMLInputElement,\n group: Signal<T | null>,\n value: T,\n): void {\n el.name = typeof value === 'string' ? value : '';\n el.addEventListener('change', () => {\n if (el.checked) group.set(value);\n });\n\n effect(() => {\n el.checked = group() === value;\n });\n}\n\n// =========================================================================\n// Class directive\n// =========================================================================\n\n/**\n * Conditionally apply a CSS class based on a reactive condition.\n *\n * ```ts\n * bindClass(el, 'active', () => isActive());\n * bindClass(el, 'disabled', () => isDisabled());\n * ```\n */\nexport function bindClass(\n el: HTMLElement,\n className: string,\n condition: () => boolean,\n): () => void {\n return effect(() => {\n if (condition()) {\n el.classList.add(className);\n } else {\n el.classList.remove(className);\n }\n });\n}\n\n/**\n * Apply multiple conditional classes at once.\n *\n * ```ts\n * bindClasses(el, {\n * active: () => isActive(),\n * disabled: () => isDisabled(),\n * 'text-bold': () => isBold(),\n * });\n * ```\n */\nexport function bindClasses(\n el: HTMLElement,\n classes: Record<string, () => boolean>,\n): () => void {\n const disposers = Object.entries(classes).map(([cls, condition]) =>\n bindClass(el, cls, condition),\n );\n return () => disposers.forEach((d) => d());\n}\n\n// =========================================================================\n// Style directive\n// =========================================================================\n\n/**\n * Reactively bind a CSS property to a value.\n *\n * ```ts\n * bindStyle(el, 'color', () => textColor());\n * bindStyle(el, 'font-size', () => `${fontSize()}px`);\n * ```\n */\nexport function bindStyle(\n el: HTMLElement,\n property: string,\n value: () => string | number | null,\n): () => void {\n const kebab = property.replace(/[A-Z]/g, (m) => `-${m.toLowerCase()}`);\n\n return effect(() => {\n const v = value();\n if (v == null) {\n el.style.removeProperty(kebab);\n } else {\n el.style.setProperty(kebab, typeof v === 'number' ? `${v}px` : String(v));\n }\n });\n}\n\n/**\n * Bind multiple style properties at once.\n *\n * ```ts\n * bindStyles(el, {\n * color: () => color(),\n * 'font-size': () => `${size()}px`,\n * opacity: () => isVisible() ? 1 : 0,\n * });\n * ```\n */\nexport function bindStyles(\n el: HTMLElement,\n styles: Record<string, () => string | number | null>,\n): () => void {\n const disposers = Object.entries(styles).map(([prop, valueFn]) =>\n bindStyle(el, prop, valueFn),\n );\n return () => disposers.forEach((d) => d());\n}\n","/**\n * Snippets, $inspect, form actions, and navigation snapshots.\n */\n\nimport { signal, effect } from './signals.js';\nimport type { AkashNode } from './types.js';\nimport type { ReadonlySignal } from './signals.js';\n\n// =========================================================================\n// Snippets — reusable template fragments\n// =========================================================================\n\nexport type Snippet<TArgs extends unknown[] = []> = (...args: TArgs) => AkashNode;\n\n/**\n * Define a reusable template snippet.\n *\n * ```ts\n * const UserBadge = defineSnippet((name: string, role: string) => {\n * const el = document.createElement('span');\n * el.textContent = `${name} (${role})`;\n * el.className = 'badge';\n * return el;\n * });\n *\n * // Reuse anywhere:\n * container.appendChild(nodeToDOM(UserBadge('Alice', 'admin')));\n * container.appendChild(nodeToDOM(UserBadge('Bob', 'user')));\n * ```\n */\nexport function defineSnippet<TArgs extends unknown[]>(\n render: (...args: TArgs) => AkashNode,\n): Snippet<TArgs> {\n return render;\n}\n\n// =========================================================================\n// $inspect — debug reactive values\n// =========================================================================\n\nexport interface InspectOptions {\n /** Label prefix for console output */\n label?: string;\n /** Log level (default: 'log') */\n level?: 'log' | 'warn' | 'debug' | 'trace';\n /** Custom logger */\n logger?: (label: string, ...values: unknown[]) => void;\n /** Only log when a condition is true */\n when?: () => boolean;\n}\n\n/**\n * Debug helper — logs when reactive values change.\n *\n * ```ts\n * const count = signal(0);\n * const name = signal('Alice');\n *\n * inspect(count, name); // logs: [inspect] 0, 'Alice'\n * count.set(1); // logs: [inspect] 1, 'Alice'\n *\n * // With label:\n * inspect(count, { label: 'counter' });\n * // logs: [counter] 1\n * ```\n */\nexport function inspect(\n ...args: [...Array<() => unknown>, InspectOptions?] | Array<() => unknown>\n): () => void {\n let options: InspectOptions = {};\n const sources: Array<() => unknown> = [];\n\n for (const arg of args) {\n if (typeof arg === 'function') {\n sources.push(arg);\n } else if (typeof arg === 'object' && arg !== null) {\n options = arg as InspectOptions;\n }\n }\n\n const {\n label = 'inspect',\n level = 'log',\n logger,\n when,\n } = options;\n\n const result = {\n dispose: null as unknown as () => void,\n get values() { return sources.map(s => s()); },\n get value() { return sources.length === 1 ? sources[0]() : sources.map(s => s()); },\n label,\n sources: sources.length,\n };\n\n result.dispose = effect(() => {\n if (when && !when()) return;\n\n const values = sources.map((s) => s());\n\n if (logger) {\n logger(label, ...values);\n } else {\n (console as any)[level](`[${label}]`, ...values);\n }\n });\n\n return result as any;\n}\n\n// =========================================================================\n// Form actions — server-side form handling\n// =========================================================================\n\nexport interface FormAction<T = unknown> {\n /** The action URL */\n url: string;\n /** Submit method */\n method: 'POST' | 'PUT' | 'PATCH' | 'DELETE';\n /** Whether a submission is in progress */\n submitting: ReadonlySignal<boolean>;\n /** The last result */\n result: ReadonlySignal<T | null>;\n /** The last error */\n error: ReadonlySignal<Error | null>;\n /** Create an onSubmit handler for a <form> */\n handle(formData?: Record<string, unknown>): (e: Event) => void;\n /** Submit programmatically */\n submit(data: Record<string, unknown>): Promise<T>;\n}\n\n/**\n * Define a server-side form action with progressive enhancement.\n *\n * ```ts\n * const createPost = defineFormAction<Post>('/api/posts', {\n * method: 'POST',\n * onSuccess: (post) => navigate(`/posts/${post.id}`),\n * onError: (err) => toast.error(err.message),\n * });\n *\n * // In template:\n * <form onSubmit={createPost.handle()}>\n * <input name=\"title\" />\n * <button disabled={createPost.submitting()}>Create</button>\n * </form>\n * ```\n */\nexport function defineFormAction<T = unknown>(\n url: string,\n options: {\n method?: 'POST' | 'PUT' | 'PATCH' | 'DELETE';\n headers?: Record<string, string>;\n onSuccess?: (result: T) => void;\n onError?: (error: Error) => void;\n fetch?: typeof globalThis.fetch;\n } = {},\n): FormAction<T> {\n const {\n method = 'POST',\n headers = {},\n onSuccess,\n onError,\n fetch: customFetch = globalThis.fetch.bind(globalThis),\n } = options;\n\n const submitting = signal(false);\n const result = signal<T | null>(null);\n const error = signal<Error | null>(null);\n\n async function submit(data: Record<string, unknown>): Promise<T> {\n submitting.set(true);\n error.set(null);\n\n try {\n const response = await customFetch(url, {\n method,\n headers: { 'Content-Type': 'application/json', ...headers },\n body: JSON.stringify(data),\n });\n\n if (!response.ok) {\n throw new Error(`Form action failed: ${response.status}`);\n }\n\n const res = await response.json() as T;\n result.set(res);\n submitting.set(false);\n onSuccess?.(res);\n return res;\n } catch (err) {\n const e = err instanceof Error ? err : new Error(String(err));\n error.set(e);\n submitting.set(false);\n onError?.(e);\n throw e;\n }\n }\n\n return {\n url,\n method,\n submitting: () => submitting(),\n result: () => result(),\n error: () => error(),\n handle(extraData?: Record<string, unknown>) {\n return (e: Event) => {\n e.preventDefault();\n const form = e.target as HTMLFormElement;\n const formData = new FormData(form);\n const data: Record<string, unknown> = { ...extraData };\n formData.forEach((value, key) => { data[key] = value; });\n submit(data);\n };\n },\n submit,\n };\n}\n\n// =========================================================================\n// Navigation snapshots — preserve scroll & form state\n// =========================================================================\n\nexport interface SnapshotConfig {\n /** Storage key prefix (default: 'akash-snapshot') */\n keyPrefix?: string;\n /** What to capture */\n capture?: ('scroll' | 'forms')[];\n}\n\ninterface PageSnapshot {\n scrollX: number;\n scrollY: number;\n forms: Record<string, Record<string, string>>;\n timestamp: number;\n}\n\n/**\n * Enable navigation snapshots — preserves scroll position and form\n * state when navigating with back/forward.\n *\n * ```ts\n * enableSnapshots();\n * // Now back/forward restores scroll position and form inputs\n * ```\n */\nexport function enableSnapshots(config: SnapshotConfig = {}): () => void {\n if (typeof window === 'undefined') return () => {};\n\n const { keyPrefix = 'akash-snapshot', capture = ['scroll', 'forms'] } = config;\n\n function captureSnapshot(): PageSnapshot {\n const snapshot: PageSnapshot = {\n scrollX: window.scrollX,\n scrollY: window.scrollY,\n forms: {},\n timestamp: Date.now(),\n };\n\n if (capture.includes('forms')) {\n document.querySelectorAll('form[id]').forEach((form) => {\n const formEl = form as HTMLFormElement;\n const data: Record<string, string> = {};\n new FormData(formEl).forEach((value, key) => {\n data[key] = String(value);\n });\n snapshot.forms[formEl.id] = data;\n });\n }\n\n return snapshot;\n }\n\n function restoreSnapshot(snapshot: PageSnapshot): void {\n if (capture.includes('scroll')) {\n requestAnimationFrame(() => {\n window.scrollTo(snapshot.scrollX, snapshot.scrollY);\n });\n }\n\n if (capture.includes('forms')) {\n for (const [formId, data] of Object.entries(snapshot.forms)) {\n const form = document.getElementById(formId) as HTMLFormElement | null;\n if (!form) continue;\n for (const [key, value] of Object.entries(data)) {\n const input = form.elements.namedItem(key) as HTMLInputElement | null;\n if (input) input.value = value;\n }\n }\n }\n }\n\n // Save snapshot before navigation\n const saveKey = () => `${keyPrefix}-${window.location.pathname}`;\n\n function save(): void {\n try {\n const snapshot = captureSnapshot();\n sessionStorage.setItem(saveKey(), JSON.stringify(snapshot));\n } catch { /* storage full */ }\n }\n\n function restore(): void {\n try {\n const raw = sessionStorage.getItem(saveKey());\n if (raw) {\n const snapshot = JSON.parse(raw) as PageSnapshot;\n // Only restore if recent (within 30 minutes)\n if (Date.now() - snapshot.timestamp < 30 * 60 * 1000) {\n restoreSnapshot(snapshot);\n }\n }\n } catch { /* */ }\n }\n\n // Listen for navigation\n window.addEventListener('beforeunload', save);\n window.addEventListener('popstate', () => {\n requestAnimationFrame(restore);\n });\n\n // Restore on initial load if coming from back/forward\n if (performance.getEntriesByType('navigation')[0]?.type === 'back_forward') {\n requestAnimationFrame(restore);\n }\n\n return () => {\n window.removeEventListener('beforeunload', save);\n };\n}\n","/**\n * watch() — react to signal changes with old/new values.\n *\n * Unlike effect() which just re-runs, watch() gives you the previous\n * and current value so you can react to *what changed*.\n *\n * ```ts\n * const count = signal(0);\n * watch(count, (newVal, oldVal) => {\n * console.log(`Changed from ${oldVal} to ${newVal}`);\n * });\n *\n * // With options:\n * watch(count, callback, { immediate: true, once: true });\n *\n * // Multiple sources:\n * watch([count, name], ([newCount, newName], [oldCount, oldName]) => { ... });\n * ```\n */\n\nimport { effect } from './signals.js';\n\n// =========================================================================\n// Types\n// =========================================================================\n\nexport interface WatchOptions {\n /** Run callback immediately with current value (default: false) */\n immediate?: boolean;\n /** Only fire once, then auto-dispose (default: false) */\n once?: boolean;\n /** Debounce callback in ms */\n debounce?: number;\n /** Deep comparison for objects (default: false) */\n deep?: boolean;\n}\n\nexport type WatchSource<T> = () => T;\nexport type WatchCallback<T> = (newValue: T, oldValue: T | undefined) => void;\nexport type WatchArrayCallback<T extends unknown[]> = (newValues: T, oldValues: (T[number] | undefined)[]) => void;\n\n// =========================================================================\n// watch() — single source\n// =========================================================================\n\n/**\n * Watch a reactive source and call back with old + new values.\n *\n * ```ts\n * const dispose = watch(count, (newVal, oldVal) => {\n * analytics.track('count_changed', { from: oldVal, to: newVal });\n * });\n * ```\n */\nexport function watch<T>(\n source: WatchSource<T>,\n callback: WatchCallback<T>,\n options?: WatchOptions,\n): () => void;\n\n/**\n * Watch multiple sources.\n */\nexport function watch<T extends unknown[]>(\n sources: { [K in keyof T]: WatchSource<T[K]> },\n callback: WatchArrayCallback<T>,\n options?: WatchOptions,\n): () => void;\n\nexport function watch(\n source: WatchSource<any> | WatchSource<any>[],\n callback: any,\n options: WatchOptions = {},\n): () => void {\n const { immediate = false, once = false, debounce: debounceMs, deep = false } = options;\n\n const isMulti = Array.isArray(source);\n const sources = isMulti ? source : [source];\n\n let oldValues: any[] = sources.map(() => undefined);\n let isFirst = true;\n let debounceTimer: ReturnType<typeof setTimeout> | null = null;\n let disposed = false;\n let disposeEffect: (() => void) | null = null;\n\n const dispose = () => {\n disposed = true;\n if (debounceTimer) clearTimeout(debounceTimer);\n disposeEffect?.();\n };\n\n disposeEffect = effect(() => {\n // Read all sources to establish tracking\n const newValues = sources.map((s) => s());\n\n if (isFirst) {\n isFirst = false;\n oldValues = deep ? newValues.map(deepClone) : [...newValues];\n\n if (immediate) {\n fireCallback(newValues, sources.map(() => undefined));\n }\n return;\n }\n\n // Check if anything actually changed\n const changed = deep\n ? newValues.some((v, i) => !deepEqual(v, oldValues[i]))\n : newValues.some((v, i) => !Object.is(v, oldValues[i]));\n\n if (!changed) return;\n\n const prevValues = [...oldValues];\n oldValues = deep ? newValues.map(deepClone) : [...newValues];\n\n fireCallback(newValues, prevValues);\n });\n\n function fireCallback(newVals: any[], oldVals: any[]): void {\n if (disposed) return;\n\n const doCall = () => {\n if (once) {\n // Dispose BEFORE calling callback so any signal writes in the\n // callback don't re-trigger this watcher\n disposed = true;\n queueMicrotask(dispose);\n }\n\n if (isMulti) {\n callback(newVals, oldVals);\n } else {\n callback(newVals[0], oldVals[0]);\n }\n };\n\n if (debounceMs && debounceMs > 0) {\n if (debounceTimer) clearTimeout(debounceTimer);\n debounceTimer = setTimeout(doCall, debounceMs);\n } else {\n doCall();\n }\n }\n\n return dispose;\n}\n\n// =========================================================================\n// watchOnce — convenience\n// =========================================================================\n\n/**\n * Watch a source once, then auto-dispose.\n *\n * ```ts\n * watchOnce(isReady, (ready) => {\n * if (ready) initApp();\n * });\n * ```\n */\nexport function watchOnce<T>(\n source: WatchSource<T>,\n callback: WatchCallback<T>,\n): () => void {\n return watch(source, callback, { once: true });\n}\n\n// =========================================================================\n// watchDebounced — convenience\n// =========================================================================\n\n/**\n * Watch with built-in debounce.\n *\n * ```ts\n * watchDebounced(searchInput, (query) => {\n * fetchResults(query);\n * }, 300);\n * ```\n */\nexport function watchDebounced<T>(\n source: WatchSource<T>,\n callback: WatchCallback<T>,\n ms: number,\n): () => void {\n return watch(source, callback, { debounce: ms });\n}\n\n// =========================================================================\n// Helpers\n// =========================================================================\n\nfunction deepClone<T>(value: T): T {\n if (value === null || typeof value !== 'object') return value;\n try {\n return JSON.parse(JSON.stringify(value));\n } catch {\n return value;\n }\n}\n\nfunction deepEqual(a: unknown, b: unknown): boolean {\n if (Object.is(a, b)) return true;\n if (a === null || b === null || typeof a !== 'object' || typeof b !== 'object') return false;\n try {\n return JSON.stringify(a) === JSON.stringify(b);\n } catch {\n return false;\n }\n}\n","/**\n * Deep reactive signals.\n *\n * Unlike regular signals that are shallow, deepSignal() tracks\n * nested property access and triggers updates when any nested\n * property changes.\n *\n * ```ts\n * const state = deepSignal({ user: { name: 'Alice', age: 30 }, items: [1, 2, 3] });\n * state.user.name; // 'Alice' (tracked)\n * state.user.name = 'Bob'; // triggers reactivity\n * state.items.push(4); // triggers reactivity\n * ```\n */\n\nimport { signal, computed } from './signals.js';\nimport { batch } from './scheduler.js';\n\n// =========================================================================\n// Types\n// =========================================================================\n\nexport type DeepSignal<T> = T extends object\n ? { [K in keyof T]: DeepSignal<T[K]> } & { readonly $raw: T; readonly $signal: () => T }\n : T;\n\n// =========================================================================\n// deepSignal()\n// =========================================================================\n\nconst SIGNAL_KEY = Symbol('deepSignal');\nconst RAW_KEY = Symbol('deepRaw');\n\n/**\n * Create a deeply reactive signal. Nested property access is tracked,\n * and setting any nested property triggers updates.\n *\n * ```ts\n * const state = deepSignal({\n * user: { name: 'Alice', age: 30 },\n * todos: [{ text: 'Buy milk', done: false }],\n * });\n *\n * effect(() => {\n * console.log(state.user.name); // re-runs when name changes\n * });\n *\n * state.user.name = 'Bob'; // triggers the effect above\n * ```\n */\nexport function deepSignal<T extends object>(initialValue: T): DeepSignal<T> {\n const version = signal(0);\n const raw = JSON.parse(JSON.stringify(initialValue));\n\n function notify(): void {\n version.update((v) => v + 1);\n }\n\n function createProxy<O extends object>(target: O, path: string[] = []): DeepSignal<O> {\n return new Proxy(target, {\n get(obj, prop, receiver) {\n // Special properties\n if (prop === '$raw') return JSON.parse(JSON.stringify(raw));\n if (prop === '$signal') return () => { version(); return JSON.parse(JSON.stringify(raw)); };\n if (prop === SIGNAL_KEY) return version;\n if (prop === RAW_KEY) return raw;\n\n const value = Reflect.get(obj, prop, receiver);\n\n // Track read\n version();\n\n // Wrap nested objects in proxies\n if (value !== null && typeof value === 'object') {\n return createProxy(value, [...path, String(prop)]);\n }\n\n return value;\n },\n\n set(obj, prop, value) {\n const result = Reflect.set(obj, prop, value);\n notify();\n return result;\n },\n\n deleteProperty(obj, prop) {\n const result = Reflect.deleteProperty(obj, prop);\n notify();\n return result;\n },\n }) as DeepSignal<O>;\n }\n\n // Wrap arrays to track mutation methods\n if (Array.isArray(raw)) {\n const arrayProxy = createProxy(raw);\n return arrayProxy as DeepSignal<T>;\n }\n\n return createProxy(raw);\n}\n\n/**\n * Get the raw (unwrapped) value from a deep signal.\n */\nexport function toRaw<T>(proxy: DeepSignal<T>): T {\n return (proxy as any).$raw ?? proxy;\n}\n\n/**\n * Check if a value is a deep signal proxy.\n */\nexport function isDeepSignal(value: unknown): boolean {\n if (value === null || typeof value !== 'object') return false;\n try {\n return (value as any)[SIGNAL_KEY] !== undefined;\n } catch {\n return false;\n }\n}\n","/**\n * Event bus — typed pub/sub for cross-component communication.\n *\n * Fire-and-forget events between unrelated components without\n * prop drilling or context coupling.\n *\n * ```ts\n * const bus = createEventBus<{\n * 'user:login': { userId: string };\n * 'cart:updated': { itemCount: number };\n * 'notification': string;\n * }>();\n *\n * // Subscribe\n * bus.on('user:login', ({ userId }) => fetchProfile(userId));\n *\n * // Emit from anywhere\n * bus.emit('user:login', { userId: '123' });\n *\n * // One-time listener\n * bus.once('cart:updated', ({ itemCount }) => showBadge(itemCount));\n * ```\n */\n\n// =========================================================================\n// Types\n// =========================================================================\n\nexport type EventMap = Record<string, unknown>;\nexport type EventHandler<T = unknown> = (data: T) => void;\n\nexport interface EventBus<T extends EventMap> {\n /** Subscribe to an event */\n on<K extends keyof T & string>(event: K, handler: EventHandler<T[K]>): () => void;\n /** Subscribe once — auto-removes after first call */\n once<K extends keyof T & string>(event: K, handler: EventHandler<T[K]>): () => void;\n /** Emit an event to all listeners */\n emit<K extends keyof T & string>(event: K, data: T[K]): void;\n /** Remove a specific handler */\n off<K extends keyof T & string>(event: K, handler: EventHandler<T[K]>): void;\n /** Remove all handlers for an event (or all events) */\n clear(event?: keyof T & string): void;\n /** Get listener count for an event */\n listenerCount(event: keyof T & string): number;\n /** Check if an event has listeners */\n hasListeners(event: keyof T & string): boolean;\n}\n\n// =========================================================================\n// createEventBus\n// =========================================================================\n\n/**\n * Create a typed event bus.\n *\n * ```ts\n * const bus = createEventBus<{\n * 'theme:change': 'light' | 'dark';\n * 'toast': { message: string; type: string };\n * }>();\n * ```\n */\nexport function createEventBus<T extends EventMap = Record<string, unknown>>(): EventBus<T> {\n const listeners = new Map<string, Set<EventHandler>>();\n\n function getSet(event: string): Set<EventHandler> {\n let set = listeners.get(event);\n if (!set) {\n set = new Set();\n listeners.set(event, set);\n }\n return set;\n }\n\n return {\n on<K extends keyof T & string>(event: K, handler: EventHandler<T[K]>): () => void {\n getSet(event).add(handler as EventHandler);\n return () => getSet(event).delete(handler as EventHandler);\n },\n\n once<K extends keyof T & string>(event: K, handler: EventHandler<T[K]>): () => void {\n const wrapper: EventHandler<T[K]> = (data) => {\n getSet(event).delete(wrapper as EventHandler);\n handler(data);\n };\n getSet(event).add(wrapper as EventHandler);\n return () => getSet(event).delete(wrapper as EventHandler);\n },\n\n emit<K extends keyof T & string>(event: K, data: T[K]): void {\n const set = listeners.get(event);\n if (set) {\n for (const handler of Array.from(set)) {\n handler(data);\n }\n }\n },\n\n off<K extends keyof T & string>(event: K, handler: EventHandler<T[K]>): void {\n getSet(event).delete(handler as EventHandler);\n },\n\n clear(event?: keyof T & string): void {\n if (event) {\n listeners.delete(event);\n } else {\n listeners.clear();\n }\n },\n\n listenerCount(event: keyof T & string): number {\n return listeners.get(event)?.size ?? 0;\n },\n\n hasListeners(event: keyof T & string): boolean {\n return (listeners.get(event)?.size ?? 0) > 0;\n },\n };\n}\n\n// =========================================================================\n// Global bus singleton\n// =========================================================================\n\nlet globalBus: EventBus<any> | null = null;\n\n/**\n * Get the global event bus (created on first call).\n *\n * ```ts\n * import { globalEventBus } from '@akashjs/runtime';\n *\n * // In component A:\n * globalEventBus().emit('notification', 'Hello!');\n *\n * // In component B:\n * globalEventBus().on('notification', (msg) => show(msg));\n * ```\n */\nexport function globalEventBus<T extends EventMap = Record<string, unknown>>(): EventBus<T> {\n if (!globalBus) {\n globalBus = createEventBus<T>();\n }\n return globalBus as EventBus<T>;\n}\n","/**\n * Security module — built-in protection for AkashJS apps.\n *\n * Auto-sanitization, CSP support, prototype pollution prevention,\n * and secure defaults. AkashJS is secure by default.\n */\n\n// =========================================================================\n// HTML Sanitizer — DOMPurify-style, zero dependencies\n// =========================================================================\n\n/** Tags allowed by default in sanitized HTML */\nconst SAFE_TAGS = new Set([\n 'a', 'abbr', 'address', 'article', 'aside', 'b', 'bdi', 'bdo',\n 'blockquote', 'br', 'caption', 'cite', 'code', 'col', 'colgroup',\n 'dd', 'del', 'details', 'dfn', 'div', 'dl', 'dt', 'em', 'figcaption',\n 'figure', 'footer', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'header',\n 'hr', 'i', 'img', 'ins', 'kbd', 'li', 'main', 'mark', 'nav', 'ol',\n 'p', 'pre', 'q', 'rp', 'rt', 'ruby', 's', 'samp', 'section', 'small',\n 'span', 'strong', 'sub', 'summary', 'sup', 'table', 'tbody', 'td',\n 'tfoot', 'th', 'thead', 'time', 'tr', 'u', 'ul', 'var', 'wbr',\n]);\n\n/** Attributes allowed by default */\nconst SAFE_ATTRS = new Set([\n 'alt', 'class', 'dir', 'href', 'id', 'lang', 'name', 'rel',\n 'src', 'style', 'tabindex', 'target', 'title', 'type', 'width',\n 'height', 'colspan', 'rowspan', 'scope', 'loading', 'decoding',\n]);\n\n/** Dangerous URL protocols */\nconst DANGEROUS_PROTOCOLS = /^(javascript|data|vbscript):/i;\n\n/** Dangerous attribute names (event handlers) */\nconst DANGEROUS_ATTRS = /^on/i;\n\nexport interface SanitizeOptions {\n /** Additional allowed tags */\n allowTags?: string[];\n /** Additional allowed attributes */\n allowAttrs?: string[];\n /** Allow data-* attributes (default: true) */\n allowDataAttrs?: boolean;\n /** Allow aria-* attributes (default: true) */\n allowAriaAttrs?: boolean;\n /** Allow style attribute (default: false) */\n allowStyle?: boolean;\n /** Custom tag filter */\n tagFilter?: (tag: string) => boolean;\n /** Custom attribute filter */\n attrFilter?: (attr: string, value: string, tag: string) => boolean;\n}\n\n/**\n * Sanitize HTML string — remove dangerous tags, attributes, and URLs.\n *\n * ```ts\n * const safe = sanitize(userInput);\n * el.innerHTML = safe; // Safe from XSS\n *\n * // With options:\n * const safe = sanitize(html, { allowTags: ['iframe'], allowStyle: true });\n * ```\n */\nexport function sanitize(html: string, options: SanitizeOptions = {}): string {\n if (typeof document === 'undefined') {\n // SSR fallback — strip all tags\n return html.replace(/<[^>]*>/g, '');\n }\n\n const {\n allowTags = [],\n allowAttrs = [],\n allowDataAttrs = true,\n allowAriaAttrs = true,\n allowStyle = false,\n tagFilter,\n attrFilter,\n } = options;\n\n const allowedTags = new Set([...SAFE_TAGS, ...allowTags]);\n const allowedAttrs = new Set([...SAFE_ATTRS, ...allowAttrs]);\n\n if (!allowStyle) allowedAttrs.delete('style');\n\n // Parse HTML using browser's parser\n const doc = new DOMParser().parseFromString(html, 'text/html');\n sanitizeNode(doc.body, allowedTags, allowedAttrs, allowDataAttrs, allowAriaAttrs, tagFilter, attrFilter);\n\n return doc.body.innerHTML;\n}\n\nfunction sanitizeNode(\n node: Node,\n allowedTags: Set<string>,\n allowedAttrs: Set<string>,\n allowDataAttrs: boolean,\n allowAriaAttrs: boolean,\n tagFilter?: (tag: string) => boolean,\n attrFilter?: (attr: string, value: string, tag: string) => boolean,\n): void {\n const children = Array.from(node.childNodes);\n\n for (const child of children) {\n if (child.nodeType === Node.ELEMENT_NODE) {\n const el = child as Element;\n const tag = el.tagName.toLowerCase();\n\n // Check if tag is allowed\n const isAllowed = tagFilter ? tagFilter(tag) : allowedTags.has(tag);\n\n if (!isAllowed) {\n // Replace dangerous element with its text content\n const text = document.createTextNode(el.textContent ?? '');\n node.replaceChild(text, child);\n continue;\n }\n\n // Sanitize attributes\n const attrs = Array.from(el.attributes);\n for (const attr of attrs) {\n const name = attr.name.toLowerCase();\n const value = attr.value;\n\n // Always remove event handlers\n if (DANGEROUS_ATTRS.test(name)) {\n el.removeAttribute(attr.name);\n continue;\n }\n\n // Check data-* and aria-*\n if (name.startsWith('data-') && allowDataAttrs) continue;\n if (name.startsWith('aria-') && allowAriaAttrs) continue;\n\n // Custom filter\n if (attrFilter && !attrFilter(name, value, tag)) {\n el.removeAttribute(attr.name);\n continue;\n }\n\n // Check if attribute is allowed\n if (!allowedAttrs.has(name)) {\n el.removeAttribute(attr.name);\n continue;\n }\n\n // Sanitize URLs\n if ((name === 'href' || name === 'src') && DANGEROUS_PROTOCOLS.test(value)) {\n el.removeAttribute(attr.name);\n continue;\n }\n }\n\n // Recurse into children\n sanitizeNode(el, allowedTags, allowedAttrs, allowDataAttrs, allowAriaAttrs, tagFilter, attrFilter);\n }\n }\n}\n\n/**\n * Escape HTML entities — prevents XSS in text content.\n */\nexport function escapeHtml(str: string): string {\n return str\n .replace(/&/g, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/\"/g, '"')\n .replace(/'/g, ''');\n}\n\n/**\n * Create a safe HTML setter that sanitizes automatically.\n *\n * ```ts\n * const setHTML = createSafeHTML(el);\n * setHTML(userContent); // Auto-sanitized\n * ```\n */\nexport function createSafeHTML(el: HTMLElement, options?: SanitizeOptions): (html: string) => void {\n return (html: string) => {\n el.innerHTML = sanitize(html, options);\n };\n}\n\n// =========================================================================\n// CSP (Content Security Policy) Support\n// =========================================================================\n\nexport interface CSPConfig {\n /** Nonce for inline scripts/styles */\n nonce?: string;\n /** Report-only mode (default: false) */\n reportOnly?: boolean;\n /** Report URI for CSP violations */\n reportUri?: string;\n /** Custom directives */\n directives?: Record<string, string[]>;\n}\n\n/**\n * Generate a CSP header string.\n *\n * ```ts\n * const csp = generateCSP({\n * nonce: 'abc123',\n * directives: {\n * 'script-src': [\"'self'\"],\n * 'style-src': [\"'self'\", \"'unsafe-inline'\"],\n * 'img-src': [\"'self'\", 'data:', 'https:'],\n * },\n * });\n * // \"script-src 'self' 'nonce-abc123'; style-src 'self' 'unsafe-inline'; ...\"\n * ```\n */\nexport function generateCSP(config: CSPConfig = {}): string {\n const defaults: Record<string, string[]> = {\n 'default-src': [\"'self'\"],\n 'script-src': [\"'self'\"],\n 'style-src': [\"'self'\", \"'unsafe-inline'\"],\n 'img-src': [\"'self'\", 'data:', 'https:'],\n 'font-src': [\"'self'\", 'https:'],\n 'connect-src': [\"'self'\"],\n 'frame-ancestors': [\"'none'\"],\n 'base-uri': [\"'self'\"],\n 'form-action': [\"'self'\"],\n 'object-src': [\"'none'\"],\n };\n\n const directives = { ...defaults, ...config.directives };\n\n // Add nonce\n if (config.nonce) {\n const nonceValue = `'nonce-${config.nonce}'`;\n if (directives['script-src']) {\n directives['script-src'].push(nonceValue);\n }\n if (directives['style-src']) {\n directives['style-src'].push(nonceValue);\n }\n }\n\n // Add report-uri\n if (config.reportUri) {\n directives['report-uri'] = [config.reportUri];\n }\n\n return Object.entries(directives)\n .map(([key, values]) => `${key} ${values.join(' ')}`)\n .join('; ');\n}\n\n/**\n * Get the CSP header name based on config.\n */\nexport function getCSPHeaderName(config: CSPConfig = {}): string {\n return config.reportOnly\n ? 'Content-Security-Policy-Report-Only'\n : 'Content-Security-Policy';\n}\n\n// =========================================================================\n// Security Headers (Helmet-like)\n// =========================================================================\n\nexport interface SecurityHeadersConfig {\n /** Content Security Policy */\n csp?: CSPConfig;\n /** X-Frame-Options (default: 'DENY') */\n frameOptions?: 'DENY' | 'SAMEORIGIN' | false;\n /** X-Content-Type-Options (default: 'nosniff') */\n contentTypeOptions?: boolean;\n /** X-XSS-Protection (default: '0' — let CSP handle it) */\n xssProtection?: boolean;\n /** Strict-Transport-Security */\n hsts?: { maxAge: number; includeSubDomains?: boolean; preload?: boolean } | false;\n /** Referrer-Policy (default: 'strict-origin-when-cross-origin') */\n referrerPolicy?: string | false;\n /** Permissions-Policy */\n permissionsPolicy?: Record<string, string[]> | false;\n /** Cross-Origin-Opener-Policy */\n coop?: 'same-origin' | 'same-origin-allow-popups' | 'unsafe-none' | false;\n /** Cross-Origin-Embedder-Policy */\n coep?: 'require-corp' | 'credentialless' | 'unsafe-none' | false;\n}\n\n/**\n * Generate security headers for SSR responses.\n *\n * ```ts\n * const headers = generateSecurityHeaders();\n * // Apply to your server response\n * for (const [name, value] of Object.entries(headers)) {\n * res.setHeader(name, value);\n * }\n * ```\n */\nexport function generateSecurityHeaders(config: SecurityHeadersConfig = {}): Record<string, string> {\n const headers: Record<string, string> = {};\n\n // CSP\n if (config.csp !== false) {\n const cspConfig = config.csp ?? {};\n headers[getCSPHeaderName(cspConfig)] = generateCSP(cspConfig);\n }\n\n // X-Frame-Options\n if (config.frameOptions !== false) {\n headers['X-Frame-Options'] = config.frameOptions ?? 'DENY';\n }\n\n // X-Content-Type-Options\n if (config.contentTypeOptions !== false) {\n headers['X-Content-Type-Options'] = 'nosniff';\n }\n\n // X-XSS-Protection (disabled by default — CSP is better)\n headers['X-XSS-Protection'] = config.xssProtection ? '1; mode=block' : '0';\n\n // HSTS\n if (config.hsts !== false) {\n const hsts = config.hsts ?? { maxAge: 31536000, includeSubDomains: true };\n let value = `max-age=${hsts.maxAge}`;\n if (hsts.includeSubDomains) value += '; includeSubDomains';\n if (hsts.preload) value += '; preload';\n headers['Strict-Transport-Security'] = value;\n }\n\n // Referrer-Policy\n if (config.referrerPolicy !== false) {\n headers['Referrer-Policy'] = config.referrerPolicy ?? 'strict-origin-when-cross-origin';\n }\n\n // Permissions-Policy\n if (config.permissionsPolicy !== false) {\n const policy = config.permissionsPolicy ?? {\n camera: [],\n microphone: [],\n geolocation: [],\n 'payment': [],\n };\n headers['Permissions-Policy'] = Object.entries(policy)\n .map(([key, values]) => `${key}=(${values.join(' ')})`)\n .join(', ');\n }\n\n // COOP\n if (config.coop !== false) {\n headers['Cross-Origin-Opener-Policy'] = config.coop ?? 'same-origin';\n }\n\n // COEP\n if (config.coep !== false) {\n headers['Cross-Origin-Embedder-Policy'] = config.coep ?? 'require-corp';\n }\n\n return headers;\n}\n\n// =========================================================================\n// Prototype Pollution Prevention\n// =========================================================================\n\n/**\n * Safe deep merge that prevents prototype pollution.\n * Will not set __proto__, constructor, or prototype keys.\n *\n * ```ts\n * const result = safeMerge(defaults, userConfig);\n * ```\n */\nexport function safeMerge<T extends Record<string, unknown>>(\n target: T,\n ...sources: Partial<T>[]\n): T {\n const DANGEROUS_KEYS = new Set(['__proto__', 'constructor', 'prototype']);\n\n for (const source of sources) {\n if (!source || typeof source !== 'object') continue;\n\n for (const key of Object.keys(source)) {\n if (DANGEROUS_KEYS.has(key)) continue;\n\n const targetVal = (target as any)[key];\n const sourceVal = (source as any)[key];\n\n if (isPlainObject(sourceVal) && isPlainObject(targetVal)) {\n (target as any)[key] = safeMerge({ ...targetVal }, sourceVal);\n } else {\n (target as any)[key] = sourceVal;\n }\n }\n }\n\n return target;\n}\n\n/**\n * Freeze an object deeply — prevents any modification.\n */\nexport function deepFreeze<T>(obj: T): Readonly<T> {\n if (obj === null || typeof obj !== 'object') return obj;\n Object.freeze(obj);\n for (const value of Object.values(obj)) {\n if (typeof value === 'object' && value !== null) {\n deepFreeze(value);\n }\n }\n return obj;\n}\n\nfunction isPlainObject(val: unknown): val is Record<string, unknown> {\n return val !== null && typeof val === 'object' && Object.getPrototypeOf(val) === Object.prototype;\n}\n\n// =========================================================================\n// Subresource Integrity (SRI)\n// =========================================================================\n\n/**\n * Generate SRI hash for a script/style resource.\n * For use in <script integrity=\"...\"> and <link integrity=\"...\">.\n *\n * ```ts\n * // In Node.js build script:\n * const hash = await generateSRI(fileContent);\n * // 'sha384-...'\n * ```\n */\nexport async function generateSRI(content: string, algorithm: 'sha256' | 'sha384' | 'sha512' = 'sha384'): Promise<string> {\n const encoder = new TextEncoder();\n const data = encoder.encode(content);\n\n const hashAlgo = algorithm === 'sha256' ? 'SHA-256' : algorithm === 'sha384' ? 'SHA-384' : 'SHA-512';\n const hashBuffer = await crypto.subtle.digest(hashAlgo, data);\n const hashArray = new Uint8Array(hashBuffer);\n const base64 = btoa(String.fromCharCode(...hashArray));\n\n return `${algorithm}-${base64}`;\n}\n\n// =========================================================================\n// CSRF Protection\n// =========================================================================\n\n/**\n * Generate a CSRF token.\n */\nexport function generateCSRFToken(): string {\n const array = new Uint8Array(32);\n crypto.getRandomValues(array);\n return Array.from(array, (b) => b.toString(16).padStart(2, '0')).join('');\n}\n\n/**\n * Create an HTTP interceptor that attaches CSRF tokens.\n *\n * ```ts\n * const csrf = createCSRFInterceptor();\n * const http = createHttpClient({ interceptors: [csrf.interceptor] });\n * // Token is auto-attached to every mutation request\n * ```\n */\nexport function createCSRFInterceptor(options: {\n headerName?: string;\n cookieName?: string;\n tokenGenerator?: () => string;\n} = {}) {\n const {\n headerName = 'X-CSRF-Token',\n cookieName = 'csrf-token',\n tokenGenerator = generateCSRFToken,\n } = options;\n\n let token: string | null = null;\n\n function getToken(): string {\n if (!token) {\n // Try to read from cookie\n if (typeof document !== 'undefined') {\n const match = document.cookie.match(new RegExp(`${cookieName}=([^;]+)`));\n if (match) {\n token = match[1];\n return token;\n }\n }\n // Generate new token\n token = tokenGenerator();\n }\n return token;\n }\n\n const interceptor = async (request: Request, next: (req: Request) => Promise<Response>): Promise<Response> => {\n const method = request.method.toUpperCase();\n // Only attach to mutating requests\n if (['POST', 'PUT', 'PATCH', 'DELETE'].includes(method)) {\n request.headers.set(headerName, getToken());\n }\n return next(request);\n };\n\n return {\n interceptor,\n token: getToken,\n refresh() { token = tokenGenerator(); },\n };\n}\n\n// =========================================================================\n// Input Validation\n// =========================================================================\n\n/**\n * Validate and sanitize a URL — prevent open redirect attacks.\n *\n * ```ts\n * const safe = sanitizeURL(userInput, { allowedHosts: ['example.com'] });\n * if (safe) window.location.href = safe;\n * ```\n */\nexport function sanitizeURL(url: string, options: {\n allowedHosts?: string[];\n allowedProtocols?: string[];\n allowRelative?: boolean;\n} = {}): string | null {\n const {\n allowedHosts,\n allowedProtocols = ['http:', 'https:'],\n allowRelative = true,\n } = options;\n\n // Relative URLs\n if (url.startsWith('/') && !url.startsWith('//')) {\n return allowRelative ? url : null;\n }\n\n try {\n const parsed = new URL(url);\n\n // Check protocol\n if (!allowedProtocols.includes(parsed.protocol)) return null;\n\n // Check host\n if (allowedHosts && !allowedHosts.includes(parsed.hostname)) return null;\n\n return parsed.toString();\n } catch {\n return null;\n }\n}\n\n/**\n * Rate limiter for client-side actions (e.g., form submissions).\n *\n * ```ts\n * const limiter = createRateLimiter({ maxAttempts: 5, windowMs: 60000 });\n * if (!limiter.check()) {\n * toast.error('Too many attempts. Please wait.');\n * return;\n * }\n * ```\n */\nexport function createRateLimiter(options: {\n maxAttempts: number;\n windowMs: number;\n}) {\n const { maxAttempts, windowMs } = options;\n const attempts: number[] = [];\n\n return {\n check(): boolean {\n const now = Date.now();\n // Remove old attempts\n while (attempts.length > 0 && attempts[0] < now - windowMs) {\n attempts.shift();\n }\n if (attempts.length >= maxAttempts) return false;\n attempts.push(now);\n return true;\n },\n remaining(): number {\n const now = Date.now();\n while (attempts.length > 0 && attempts[0] < now - windowMs) {\n attempts.shift();\n }\n return Math.max(0, maxAttempts - attempts.length);\n },\n reset(): void {\n attempts.length = 0;\n },\n };\n}\n","/**\n * Deprecation warnings and API stability markers.\n *\n * Provides runtime warnings when deprecated APIs are used,\n * with migration hints pointing to the replacement.\n *\n * ```ts\n * // Mark an API as deprecated:\n * export const oldName = deprecated(newImplementation, {\n * name: 'oldName',\n * replacement: 'newName',\n * since: '0.2.0',\n * removeIn: '1.0.0',\n * message: 'Use newName() instead for better performance.',\n * });\n *\n * // Users see:\n * // [AkashJS] DEPRECATED: oldName() is deprecated since v0.2.0 and will be removed in v1.0.0.\n * // Use newName() instead for better performance.\n * // See: https://akash.js.org/migration\n * ```\n */\n\n// =========================================================================\n// Types\n// =========================================================================\n\nexport type APIStability = 'stable' | 'experimental' | 'deprecated' | 'internal';\n\nexport interface DeprecationInfo {\n /** Name of the deprecated API */\n name: string;\n /** Replacement API name */\n replacement?: string;\n /** Version when deprecated */\n since: string;\n /** Version when it will be removed */\n removeIn?: string;\n /** Custom migration message */\n message?: string;\n /** Documentation link */\n link?: string;\n}\n\nexport interface APIInfo {\n /** API name */\n name: string;\n /** Stability level */\n stability: APIStability;\n /** Version introduced */\n since: string;\n /** Deprecation info (if deprecated) */\n deprecation?: DeprecationInfo;\n}\n\n// =========================================================================\n// Warning state\n// =========================================================================\n\nconst warned = new Set<string>();\nlet warningsEnabled = true;\nlet warningHandler: ((msg: string) => void) | null = null;\n\n/**\n * Enable or disable deprecation warnings globally.\n */\nexport function setDeprecationWarnings(enabled: boolean): void {\n warningsEnabled = enabled;\n}\n\n/**\n * Set a custom warning handler (default: console.warn).\n */\nexport function setWarningHandler(handler: ((msg: string) => void) | null): void {\n warningHandler = handler;\n}\n\n/**\n * Reset warned-about APIs (useful for testing).\n */\nexport function resetDeprecationWarnings(): void {\n warned.clear();\n}\n\n// =========================================================================\n// deprecated() — wrap a function with a deprecation warning\n// =========================================================================\n\n/**\n * Wrap a function so it emits a deprecation warning on first call.\n *\n * ```ts\n * // Old API that still works but warns:\n * export const createStore = deprecated(defineStore, {\n * name: 'createStore',\n * replacement: 'defineStore',\n * since: '0.2.0',\n * removeIn: '1.0.0',\n * });\n * ```\n */\nexport function deprecated<T extends (...args: any[]) => any>(\n fn: T,\n info: DeprecationInfo,\n): T {\n const wrapper = ((...args: any[]) => {\n emitDeprecationWarning(info);\n return fn(...args);\n }) as unknown as T;\n\n // Copy properties from original\n Object.keys(fn).forEach((key) => {\n (wrapper as any)[key] = (fn as any)[key];\n });\n\n // Mark as deprecated\n (wrapper as any).__deprecated = info;\n\n return wrapper;\n}\n\n/**\n * Mark a value (non-function) as deprecated.\n * Returns the value but warns on first access.\n */\nexport function deprecatedValue<T>(value: T, info: DeprecationInfo): T {\n emitDeprecationWarning(info);\n return value;\n}\n\n// =========================================================================\n// Warning emission\n// =========================================================================\n\nfunction emitDeprecationWarning(info: DeprecationInfo): void {\n if (!warningsEnabled) return;\n if (warned.has(info.name)) return; // Only warn once per API\n warned.add(info.name);\n\n const parts: string[] = [\n `[AkashJS] DEPRECATED: ${info.name}() is deprecated since v${info.since}`,\n ];\n\n if (info.removeIn) {\n parts[0] += ` and will be removed in v${info.removeIn}.`;\n } else {\n parts[0] += '.';\n }\n\n if (info.replacement) {\n parts.push(` Migrate to: ${info.replacement}()`);\n }\n\n if (info.message) {\n parts.push(` ${info.message}`);\n }\n\n parts.push(` See: ${info.link ?? 'https://akash.js.org/migration'}`);\n\n const msg = parts.join('\\n');\n\n if (warningHandler) {\n warningHandler(msg);\n } else if (typeof console !== 'undefined') {\n console.warn(msg);\n }\n}\n\n// =========================================================================\n// API Registry — track stability of all APIs\n// =========================================================================\n\nconst apiRegistry = new Map<string, APIInfo>();\n\n/**\n * Register an API with its stability level.\n */\nexport function registerAPI(info: APIInfo): void {\n apiRegistry.set(info.name, info);\n}\n\n/**\n * Get all registered APIs.\n */\nexport function getRegisteredAPIs(): APIInfo[] {\n return Array.from(apiRegistry.values());\n}\n\n/**\n * Get APIs by stability level.\n */\nexport function getAPIsByStability(stability: APIStability): APIInfo[] {\n return getRegisteredAPIs().filter((api) => api.stability === stability);\n}\n\n/**\n * Check if an API is deprecated.\n */\nexport function isDeprecated(name: string): boolean {\n const info = apiRegistry.get(name);\n return info?.stability === 'deprecated';\n}\n\n/**\n * Get deprecation info for an API.\n */\nexport function getDeprecationInfo(name: string): DeprecationInfo | null {\n const info = apiRegistry.get(name);\n return info?.deprecation ?? null;\n}\n\n// =========================================================================\n// Compatibility check\n// =========================================================================\n\nexport interface CompatibilityResult {\n compatible: boolean;\n warnings: string[];\n errors: string[];\n}\n\n/**\n * Check if package versions are compatible.\n *\n * ```ts\n * const result = checkCompatibility({\n * '@akashjs/runtime': '0.2.0',\n * '@akashjs/router': '0.1.0',\n * });\n * if (!result.compatible) {\n * console.error(result.errors);\n * }\n * ```\n */\nexport function checkCompatibility(\n packages: Record<string, string>,\n): CompatibilityResult {\n const warnings: string[] = [];\n const errors: string[] = [];\n\n const versions = Object.entries(packages);\n if (versions.length === 0) return { compatible: true, warnings, errors };\n\n // Check that all @akashjs packages are on compatible versions\n const akashPackages = versions.filter(([name]) => name.startsWith('@akashjs/'));\n\n if (akashPackages.length > 1) {\n const majors = new Set(akashPackages.map(([, v]) => v.split('.')[0]));\n const minors = new Set(akashPackages.map(([, v]) => v.split('.').slice(0, 2).join('.')));\n\n if (majors.size > 1) {\n errors.push(\n `Major version mismatch: ${akashPackages.map(([n, v]) => `${n}@${v}`).join(', ')}. ` +\n 'All @akashjs packages should be on the same major version.',\n );\n } else if (minors.size > 1) {\n warnings.push(\n `Minor version mismatch: ${akashPackages.map(([n, v]) => `${n}@${v}`).join(', ')}. ` +\n 'Consider updating all packages to the same version with `akash update`.',\n );\n }\n }\n\n return {\n compatible: errors.length === 0,\n warnings,\n errors,\n };\n}\n","/**\n * AkashJS DevTools — Console-based debugging utilities.\n *\n * Call `installDevtools()` in development to expose `__AKASH_DEVTOOLS__`\n * on the global object. Access it from the browser console:\n *\n * ```js\n * __AKASH_DEVTOOLS__.stores() // list all stores\n * __AKASH_DEVTOOLS__.store('cart') // inspect a store\n * __AKASH_DEVTOOLS__.signals() // list tracked signals\n * __AKASH_DEVTOOLS__.effects() // list active effects\n * ```\n */\n\nimport { __getStoreInstances } from './store.js';\nimport type { Store } from './store.js';\n\n// --- Signal/Effect tracking ---\n\ninterface TrackedSignal {\n name: string;\n read: () => unknown;\n subscriberCount: number;\n}\n\ninterface TrackedEffect {\n name: string;\n runCount: number;\n isRender: boolean;\n sourceCount: number;\n}\n\nconst trackedSignals = new Map<string, TrackedSignal>();\nconst trackedEffects = new Map<string, TrackedEffect>();\nlet signalCounter = 0;\nlet effectCounter = 0;\n\n/** Register a signal for devtools tracking (call in dev mode) */\nexport function __trackSignal(name: string, read: () => unknown, getSubscriberCount: () => number): void {\n trackedSignals.set(name || `signal_${signalCounter++}`, {\n name,\n read,\n subscriberCount: 0,\n get subscriberCount() { return getSubscriberCount(); },\n } as TrackedSignal);\n}\n\n/** Register an effect for devtools tracking */\nexport function __trackEffect(name: string, meta: { isRender: boolean; getSourceCount: () => number }): () => void {\n const id = name || `effect_${effectCounter++}`;\n const entry: TrackedEffect = {\n name: id,\n runCount: 0,\n isRender: meta.isRender,\n sourceCount: 0,\n };\n trackedEffects.set(id, entry);\n\n // Return a function to increment run count (called each time effect runs)\n return () => {\n entry.runCount++;\n entry.sourceCount = meta.getSourceCount();\n };\n}\n\n// --- Store inspection ---\n\ninterface StoreSnapshot {\n $id: string;\n state: Record<string, unknown>;\n getters: Record<string, unknown>;\n actions: string[];\n subscriberCount: number;\n}\n\nfunction inspectStore(id: string): StoreSnapshot | null {\n const instances = __getStoreInstances();\n const store = instances[id];\n if (!store) return null;\n\n const snapshot = store.$snapshot();\n const state: Record<string, unknown> = {};\n const getters: Record<string, unknown> = {};\n const actions: string[] = [];\n\n for (const [key, value] of Object.entries(store)) {\n if (key.startsWith('$')) continue;\n if (typeof value === 'function' && 'set' in value && 'update' in value) {\n // Signal\n state[key] = (value as any)();\n } else if (typeof value === 'function' && !('set' in value) && !key.startsWith('$')) {\n // Could be getter (computed) or action\n try {\n const result = (value as any)();\n // If it returns a primitive/object, it's likely a getter\n if (typeof result !== 'undefined') {\n getters[key] = result;\n } else {\n actions.push(key);\n }\n } catch {\n actions.push(key);\n }\n }\n }\n\n return {\n $id: id,\n state: snapshot,\n getters,\n actions,\n subscriberCount: 0,\n };\n}\n\n// --- DevTools API ---\n\nexport interface DevToolsAPI {\n /** List all registered stores */\n stores(): string[];\n /** Inspect a specific store by ID */\n store(id: string): StoreSnapshot | null;\n /** Get all store snapshots */\n storeSnapshots(): Record<string, StoreSnapshot>;\n /** List tracked signals with current values */\n signals(): Array<{ name: string; value: unknown; subscribers: number }>;\n /** List tracked effects with run counts */\n effects(): Array<{ name: string; runs: number; isRender: boolean; sources: number }>;\n /** Get framework version info */\n version(): { runtime: string };\n /** Pretty-print store state to console */\n log(storeId?: string): void;\n /** Record store state history for time-travel */\n startRecording(storeId: string): void;\n /** Stop recording and return history */\n stopRecording(storeId: string): Array<{ timestamp: number; state: Record<string, unknown>; action?: string }>;\n}\n\nconst recordings = new Map<string, Array<{ timestamp: number; state: Record<string, unknown>; action?: string }>>();\nconst recordingDisposers = new Map<string, () => void>();\n\nfunction createDevToolsAPI(): DevToolsAPI {\n return {\n stores() {\n return Object.keys(__getStoreInstances());\n },\n\n store(id: string) {\n return inspectStore(id);\n },\n\n storeSnapshots() {\n const result: Record<string, StoreSnapshot> = {};\n for (const id of Object.keys(__getStoreInstances())) {\n const snap = inspectStore(id);\n if (snap) result[id] = snap;\n }\n return result;\n },\n\n signals() {\n return [...trackedSignals.values()].map(s => ({\n name: s.name,\n value: s.read(),\n subscribers: s.subscriberCount,\n }));\n },\n\n effects() {\n return [...trackedEffects.values()].map(e => ({\n name: e.name,\n runs: e.runCount,\n isRender: e.isRender,\n sources: e.sourceCount,\n }));\n },\n\n version() {\n return { runtime: '0.1.26' };\n },\n\n log(storeId?: string) {\n if (storeId) {\n const snap = inspectStore(storeId);\n if (snap) {\n console.group(`🔍 Store: ${storeId}`);\n console.log('State:', snap.state);\n console.log('Getters:', snap.getters);\n console.log('Actions:', snap.actions);\n console.groupEnd();\n } else {\n console.warn(`Store \"${storeId}\" not found. Available:`, Object.keys(__getStoreInstances()));\n }\n } else {\n const stores = Object.keys(__getStoreInstances());\n console.group('🔍 AkashJS Stores');\n for (const id of stores) {\n const snap = inspectStore(id);\n if (snap) {\n console.group(id);\n console.log('State:', snap.state);\n console.log('Getters:', snap.getters);\n console.groupEnd();\n }\n }\n console.groupEnd();\n }\n },\n\n startRecording(storeId: string) {\n const store = __getStoreInstances()[storeId];\n if (!store) {\n console.warn(`Store \"${storeId}\" not found.`);\n return;\n }\n\n const history: Array<{ timestamp: number; state: Record<string, unknown>; action?: string }> = [];\n // Record initial state\n history.push({ timestamp: Date.now(), state: store.$snapshot() });\n\n const unsubscribe = store.$subscribe((state) => {\n history.push({ timestamp: Date.now(), state: { ...state } });\n });\n\n recordings.set(storeId, history);\n recordingDisposers.set(storeId, unsubscribe);\n console.log(`⏺ Recording store \"${storeId}\". Call __AKASH_DEVTOOLS__.stopRecording(\"${storeId}\") to view history.`);\n },\n\n stopRecording(storeId: string) {\n const disposer = recordingDisposers.get(storeId);\n if (disposer) disposer();\n recordingDisposers.delete(storeId);\n\n const history = recordings.get(storeId) ?? [];\n recordings.delete(storeId);\n\n console.log(`⏹ Stopped recording \"${storeId}\". ${history.length} snapshots captured.`);\n console.table(history.map((h, i) => ({\n '#': i,\n time: new Date(h.timestamp).toISOString().slice(11, 23),\n state: JSON.stringify(h.state),\n })));\n\n return history;\n },\n };\n}\n\n/**\n * Install AkashJS DevTools on the global object.\n * Call this in your app's entry point during development:\n *\n * ```ts\n * import { installDevtools } from '@akashjs/runtime';\n * if (import.meta.env.DEV) installDevtools();\n * ```\n */\nexport function installDevtools(): void {\n const api = createDevToolsAPI();\n\n if (typeof globalThis !== 'undefined') {\n (globalThis as any).__AKASH_DEVTOOLS__ = api;\n console.log(\n '%c🔧 AkashJS DevTools installed. Access via __AKASH_DEVTOOLS__ in console.',\n 'color: #7c3aed; font-weight: bold;'\n );\n console.log(' .stores() — list stores');\n console.log(' .store(\"id\") — inspect store');\n console.log(' .log() — pretty-print all stores');\n console.log(' .log(\"id\") — pretty-print one store');\n console.log(' .startRecording(\"id\") — record state changes');\n console.log(' .stopRecording(\"id\") — view recorded history');\n console.log(' .signals() — list tracked signals');\n console.log(' .effects() — list tracked effects');\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/slots.ts","../src/error-boundary.ts","../src/suspense.ts","../src/hydration.ts","../src/transition.ts","../src/head.ts","../src/plugin.ts","../src/composables.ts","../src/browser.ts","../src/portal.ts","../src/toast.ts","../src/theme.ts","../src/virtual-list.ts","../src/async-component.ts","../src/reconcile.ts","../src/leak-detector.ts","../src/a11y.ts","../src/image.ts","../src/infinite-scroll.ts","../src/css.ts","../src/data-table.ts","../src/seo.ts","../src/pipes.ts","../src/directive.ts","../src/web-component.ts","../src/ssg.ts","../src/switch.ts","../src/di.ts","../src/defer.ts","../src/view-transition.ts","../src/query-state.ts","../src/tweened.ts","../src/flip.ts","../src/await-block.ts","../src/event-modifiers.ts","../src/snippets.ts","../src/watch.ts","../src/deep-signal.ts","../src/event-bus.ts","../src/security.ts","../src/deprecation.ts","../src/devtools.ts"],"names":["renderSlot","slot","fallback","content","nodeToDOM","hasSlot","createSlots","props","slotNames","slots","keys","name","value","ErrorBoundary","defineComponent","ctx","error","signal","onError","err","retry","currentError","currentSuspenseCtx","getSuspenseContext","registerPending","promise","Suspense","resolved","pending","suspenseCtx","prevCtx","childrenNode","container","effect","isHydrating","hydrateWalker","isHydrationActive","hydrate","options","component","claimElement","tag","node","claimText","progressiveHydrate","target","rootMargin","disposed","observer","entries","entry","HYDRATE_ATTR","findHydrationBoundaries","root","getTransitionClasses","enterTransition","el","classes","duration","resolve","onEnd","exitTransition","Transition","generateTransitionCSS","property","easing","ssrHeadTags","collectSSRHead","tags","renderHeadToString","configs","html","title","t","c","titleTemplate","finalTitle","config","meta","link","MANAGED_ATTR","useHead","getConfig","managedElements","dispose","cfg","script","key","onUnmount","definePlugin","plugin","createApp","rootComponent","rootProps","plugins","errorHandlers","beforeMountHooks","appConfig","mountedNode","containerEl","pluginCtx","provide","handler","hook","app","selector","e","useInterval","ms","count","isActive","timer","start","stop","useTimeout","ready","useDebounce","source","delay","debounced","useThrottle","interval","throttled","lastUpdate","now","elapsed","useCounter","initial","delta","useToggle","v","usePrevious","lastValue","tracked","current","useMediaQuery","query","mql","matches","DEFAULT_BREAKPOINTS","useBreakpoint","breakpoints","sorted","a","b","width","w","result","min","gte","bp","lt","useStorage","initialValue","storage","store","startValue","raw","state","useClipboard","text","copied","timeout","copy","useOnline","online","useGeolocation","pos","useWindowSize","height","useClickOutside","events","ignore","active","getTarget","shouldIgnore","event","eventTarget","pattern","listener","eventName","Portal","idCounter","createToaster","maxVisible","defaultDuration","position","toasts","timers","add","type","message","opts","id","dismissible","toast","list","next","removed","clearTimer","dismiss","dismissAll","msg","useTheme","themes","storageKey","attribute","syncSystem","themeNames","getSystemTheme","getInitialTheme","stored","isDark","computed","applyTheme","vars","theme","calculateRange","scrollTop","containerHeight","itemHeight","totalItems","overscan","firstVisible","visibleCount","end","useVirtualList","range","visibleItems","r","item","i","onScroll","setContainerHeight","VirtualFor","fixedHeight","items","outer","inner","row","defineAsyncComponent","loaderOrOptions","loader","loadingFn","errorFn","resolvedComp","loadPromise","loadError","startLoad","mod","showLoading","delayTimer","timeoutTimer","s","longestIncreasingSubsequence","arr","n","tails","predecessors","indices","lo","hi","mid","k","reconcileKeys","oldKeys","newKeys","ops","oldKeyMap","newToOld","newKeySet","lis","countOps","inserts","moves","removes","op","tracking","activeEffects","effectIdCounter","enableLeakDetection","disableLeakDetection","isLeakDetectionEnabled","trackEffect","componentName","captureStack","untrackEffect","record","getActiveEffects","checkForLeaks","thresholdMs","warnings","reportLeaks","leaks","leak","getLeakDetectionStats","stack","FOCUSABLE_SELECTOR","useFocusTrap","initialFocus","returnFocus","escapeDeactivates","allowOutsideClick","onDeactivate","previouslyFocused","getContainer","getFocusableElements","handleKeyDown","deactivate","focusable","first","last","handleFocusOut","relatedTarget","activate","announceRegion","ensureAnnounceRegion","useAnnounce","politeness","region","useKeyboard","bindings","activeScopes","listening","binding","matchesKey","startListening","bind","idx","scope","formatKeyCombo","combo","parts","needsMod","needsCtrl","needsShift","needsAlt","modPressed","isMac","Image","loaded","errored","src","alt","loading","srcset","sizes","placeholder","blurDataUrl","className","fallbackSrc","onLoad","onErrorCb","wrapper","blur","img","actualSrc","useInfiniteScroll","onLoadMore","hasMore","threshold","done","sentinelEl","handleIntersect","createObserver","sentinel","cx","inputs","input","nested","css","styles","prop","camelToKebab","val","UNITLESS_PROPS","applyStyles","str","m","createDataTable","data","columns","pageSize","initialSort","sortState","filterText","page","columnVisibility","visibleColumns","vis","filteredRows","filterableCols","colsToSearch","col","getNestedValue","sortedRows","column","direction","rows","colDef","aVal","bVal","defaultCompare","totalRows","totalPages","paginatedRows","all","sort","columnKey","filter","toggleColumn","showColumn","hideColumn","p","obj","path","o","useStructuredData","ld","useOpenGraph","useTwitterCard","useSEO","generateSitemap","baseUrl","xml","pipe","transform","args","chain","pipes","definePipe","fn","uppercase","lowercase","capitalize","titleCase","trim","truncate","maxLength","suffix","date","format","locale","d","loc","currency","currencyCode","number","digitsInfo","max","percent","decimals","json","indent","plural","singular","pluralForm","relativeTime","diff","absDiff","units","divisors","unit","u","abs","defineDirective","hooks","directiveFromFn","cleanup","DIRECTIVE_KEY","applyDirective","directive","states","updateDirective","newValue","oldValue","removeDirectives","vAutoFocus","vClickOutside","vLongPress","cancel","fns","vIntersect","callback","vResize","defineCustomElement","tagName","shadow","AkashElement","attr","parseAttributeValue","_oldValue","styleEl","newProps","toCustomElement","_old","DEFAULT_TEMPLATE","prerender","routesInput","render","outDir","template","onPage","concurrency","routes","batch","url","filePath","urlToFilePath","discoverStaticRoutes","routeManifest","generatePaths","params","clean","sitemapFromResults","results","renderSwitch","parent","anchor","expression","cases","currentNodes","getCurrentScope","branch","liveParent","runInScope","nodes","Switch","casesMap","match","providerIdCounter","defineProvider","rootInstances","createInjector","providers","instances","multiInstances","registrations","reg","injector","provider","values","parentValues","instance","resolveRegistration","childProviders","injectProvider","clearProviders","defer","trigger","prefetch","minLoadTime","triggerLoad","setupTrigger","load","setupViewportTrigger","setupInteractionTrigger","setupIdleTrigger","setupTimerTrigger","setupCustomTrigger","condition","check","supportsViewTransitions","startViewTransition","updateCallback","onBefore","onAfter","transition","fadeTransition","viewTransitionCSS","oldAnimation","newAnimation","assignTransitionName","finished","defaultSerialize","defaultDeserialize","defaultValue","getSearchParams","updateURL","mode","search","activeStates","popstateListening","ensurePopstateListener","useQueryState","serialize","deserialize","historyMode","debounceMs","removeDefault","debounceTimer","isInternalUpdate","originalSet","doUpdate","currentParams","useQueryStates","schema","clearQueryState","getQueryParams","removeQueryState","resetQueryState","raf","caf","easings","defaultInterpolate","from","to","tweened","interpolate","targetValue","rafId","running","read","overrides","dur","ease","interp","del","tick","easedT","createFlip","keyAttribute","onComplete","firstPositions","getElements","getKey","measure","rect","animate","elements","animations","dx","dy","dw","dh","animation","currentKeys","update","flip","Await","currentPromise","awaitSignal","withModifiers","modifiers","onEvent","wrapped","listenerOptions","bindDimensions","bindScroll","scrollX","scrollY","originalSetY","originalSetX","bindElement","bindGroup","bindGroupItem","group","bindClass","bindClasses","disposers","cls","bindStyle","kebab","bindStyles","valueFn","defineSnippet","inspect","sources","arg","label","level","logger","when","defineFormAction","method","headers","onSuccess","customFetch","submitting","submit","response","res","extraData","form","formData","enableSnapshots","keyPrefix","capture","captureSnapshot","snapshot","formEl","restoreSnapshot","formId","saveKey","save","restore","watch","immediate","once","deep","isMulti","oldValues","isFirst","disposeEffect","newValues","deepClone","fireCallback","deepEqual","prevValues","newVals","oldVals","doCall","watchOnce","watchDebounced","SIGNAL_KEY","RAW_KEY","deepSignal","version","notify","createProxy","receiver","toRaw","proxy","isDeepSignal","createEventBus","listeners","getSet","set","globalBus","globalEventBus","SAFE_TAGS","SAFE_ATTRS","DANGEROUS_PROTOCOLS","DANGEROUS_ATTRS","sanitize","allowTags","allowAttrs","allowDataAttrs","allowAriaAttrs","allowStyle","tagFilter","attrFilter","allowedTags","allowedAttrs","doc","sanitizeNode","children","child","attrs","escapeHtml","createSafeHTML","generateCSP","directives","nonceValue","getCSPHeaderName","generateSecurityHeaders","cspConfig","hsts","policy","safeMerge","DANGEROUS_KEYS","targetVal","sourceVal","isPlainObject","deepFreeze","generateSRI","algorithm","hashAlgo","hashBuffer","hashArray","base64","generateCSRFToken","array","createCSRFInterceptor","headerName","cookieName","tokenGenerator","token","getToken","request","sanitizeURL","allowedHosts","allowedProtocols","allowRelative","parsed","createRateLimiter","maxAttempts","windowMs","attempts","warned","warningsEnabled","warningHandler","setDeprecationWarnings","enabled","setWarningHandler","resetDeprecationWarnings","deprecated","info","emitDeprecationWarning","deprecatedValue","apiRegistry","registerAPI","getRegisteredAPIs","getAPIsByStability","stability","api","isDeprecated","getDeprecationInfo","checkCompatibility","packages","errors","versions","akashPackages","majors","minors","trackedSignals","trackedEffects","inspectStore","__getStoreInstances","getters","actions","recordings","recordingDisposers","createDevToolsAPI","snap","storeId","stores","history","unsubscribe","disposer","h","installDevtools"],"mappings":"qqDAgCO,SAASA,EAAAA,CAAWC,EAA0BC,CAAAA,CAAyB,CAC5E,GAAID,CAAAA,CAAM,CACR,IAAME,CAAAA,CAAUF,CAAAA,GAChB,OAAOG,CAAAA,CAAUD,CAAO,CAC1B,CACA,OAAID,CAAAA,CACKE,CAAAA,CAAUF,CAAAA,EAAU,CAAA,CAEtB,QAAA,CAAS,cAAc,YAAY,CAC5C,CAKO,SAASG,EAAAA,CAAQJ,EAAmC,CACzD,GAAI,CAACA,CAAAA,CAAM,OAAO,OAClB,IAAME,CAAAA,CAAUF,GAAK,CAErB,OADI,EAAAE,CAAAA,EAAW,IAAA,EAAQA,CAAAA,GAAY,KAAA,EAC/B,OAAOA,CAAAA,EAAY,UAAYA,CAAAA,CAAQ,IAAA,KAAW,EAAA,CAExD,CAsBO,SAASG,EAAAA,CACdC,CAAAA,CACAC,EACO,CACP,IAAMC,EAAe,EAAC,CAEhBC,EAAOF,CAAAA,EAAa,MAAA,CAAO,KAAKD,CAAK,CAAA,CAC3C,IAAA,IAAWI,CAAAA,IAAQD,CAAAA,CAAM,CACvB,IAAME,CAAAA,CAAQL,CAAAA,CAAMI,CAAI,CAAA,CACpB,OAAOC,GAAU,UAAA,GACnBH,CAAAA,CAAME,CAAc,CAAA,CAAIC,CAAAA,EAE5B,CACA,OAAOH,CACT,CC1DO,IAAMI,EAAAA,CAAgBC,IAAqCC,CAAAA,EAAQ,CACxE,IAAMC,CAAAA,CAAQC,CAAAA,CAAqB,IAAI,EAEvCC,GAAAA,CAASC,CAAAA,EAAQ,CACfH,CAAAA,CAAM,GAAA,CAAIG,CAAG,EACf,CAAC,EAED,SAASC,CAAAA,EAAQ,CACfJ,CAAAA,CAAM,GAAA,CAAI,IAAI,EAChB,CAEA,OAAO,IAAM,CACX,IAAMK,CAAAA,CAAeL,CAAAA,EAAM,CAE3B,OAAIK,CAAAA,CACKjB,CAAAA,CAAUW,EAAI,KAAA,CAAM,QAAA,CAASM,EAAcD,CAAK,CAAC,EAGnDhB,CAAAA,CAAUW,CAAAA,CAAI,UAAU,CACjC,CACF,CAAC,ECzBD,IAAIO,CAAAA,CAA6C,IAAA,CAM1C,SAASC,EAAAA,EAA6C,CAC3D,OAAOD,CACT,CAOO,SAASE,GAAgBC,CAAAA,CAAiC,CAC3DH,GACFA,CAAAA,CAAmB,UAAA,CAAWG,CAAO,EAEzC,KAkBaC,EAAAA,CAAWZ,GAAAA,CAAgCC,GAAQ,CAC9D,IAAMY,EAAWV,CAAAA,CAAO,KAAK,CAAA,CACvBW,GAAAA,CAA8B,EAAC,CAE/BC,EAA+B,CACnC,UAAA,CAAWJ,EAA2B,CACpCG,GAAAA,CAAQ,KAAKH,CAAO,EACtB,EACA,UAAA,CAAY,IAAME,GACpB,CAAA,CAGMG,EAAUR,CAAAA,CAChBA,CAAAA,CAAqBO,EAGrB,IAAIE,CAAAA,CACJ,GAAI,CACFA,CAAAA,CAAehB,CAAAA,CAAI,WACrB,CAAA,OAAE,CACAO,CAAAA,CAAqBQ,EACvB,CAGA,OAAIF,GAAAA,CAAQ,OAAS,CAAA,CACnB,OAAA,CAAQ,IAAIA,GAAO,CAAA,CAAE,KAAK,IAAM,CAC9BD,EAAS,GAAA,CAAI,IAAI,EACnB,CAAC,CAAA,CAGDA,CAAAA,CAAS,IAAI,IAAI,CAAA,CAGZ,IAAM,CACX,IAAMK,EAAY,QAAA,CAAS,aAAA,CAAc,KAAK,CAAA,CAC9C,OAAAA,EAAU,YAAA,CAAa,qBAAA,CAAuB,EAAE,CAAA,CAChDA,CAAAA,CAAU,MAAM,OAAA,CAAU,UAAA,CAEtBL,CAAAA,EAAS,CACXK,CAAAA,CAAU,WAAA,CAAY5B,EAAU2B,CAAY,CAAC,EAE7CC,CAAAA,CAAU,WAAA,CAAY5B,EAAUW,CAAAA,CAAI,KAAA,CAAM,UAAU,CAAC,EAIvDkB,CAAAA,CAAO,IAAM,CACX,GAAIN,CAAAA,GAAY,CACd,KAAOK,CAAAA,CAAU,UAAA,EACfA,CAAAA,CAAU,WAAA,CAAYA,EAAU,UAAU,CAAA,CAE5CA,EAAU,WAAA,CAAY5B,CAAAA,CAAU2B,CAAY,CAAC,EAC/C,CACF,CAAC,CAAA,CAEMC,CACT,CACF,CAAC,ECrGD,IAAIE,CAAAA,CAAc,MAEdC,CAAAA,CAAmC,KAGhC,SAASC,EAAAA,EAA6B,CAC3C,OAAOF,CACT,CA8BO,SAASG,CAAAA,CAAQC,EAAqC,CAC3D,GAAM,CAAE,SAAA,CAAAN,CAAAA,CAAW,UAAAO,CAAAA,CAAW,KAAA,CAAAhC,EAAQ,EAAG,EAAI+B,CAAAA,CAE7CJ,CAAAA,CAAc,IAAA,CAIdC,CAAAA,CAAgB,SAAS,gBAAA,CACvBH,CAAAA,CACA,WAAW,YAAA,CAAe,UAAA,CAAW,SACvC,CAAA,CAEA,GAAI,CAGFO,CAAAA,CAAUhC,CAAY,EACxB,CAAA,OAAE,CACA2B,EAAc,KAAA,CAEdC,CAAAA,CAAgB,KAClB,CAEA,OAAO,IAAM,CAEb,CACF,CAMO,SAASK,GAAaC,CAAAA,CAAiC,CAC5D,GAAI,CAACP,CAAAA,EAAe,CAACC,CAAAA,CAAe,OAAO,KAE3C,IAAIO,CAAAA,CAAOP,EAAc,QAAA,EAAS,CAClC,KAAOO,CAAAA,EAAM,CACX,GACEA,CAAAA,YAAgB,WAAA,EAChBA,CAAAA,CAAK,QAAQ,WAAA,EAAY,GAAMD,EAAI,WAAA,EAAY,CAE/C,OAAOC,CAAAA,CAETA,CAAAA,CAAOP,EAAc,QAAA,GACvB,CAEA,OAAO,IACT,CAKO,SAASQ,EAAAA,EAAyB,CACvC,GAAI,CAACT,CAAAA,EAAe,CAACC,CAAAA,CAAe,OAAO,KAE3C,IAAIO,CAAAA,CAAOP,EAAc,QAAA,EAAS,CAClC,KAAOO,CAAAA,EAAM,CACX,GAAIA,CAAAA,YAAgB,IAAA,CAClB,OAAOA,CAAAA,CAETA,CAAAA,CAAOP,EAAc,QAAA,GACvB,CAEA,OAAO,IACT,CA6BO,SAASS,EAAAA,CAAmBN,CAAAA,CAAgD,CACjF,GAAM,CAAE,OAAAO,CAAAA,CAAQ,SAAA,CAAAN,EAAW,KAAA,CAAAhC,CAAAA,CAAO,WAAAuC,CAAAA,CAAa,OAAQ,EAAIR,CAAAA,CAE3D,GAAI,OAAO,oBAAA,CAAyB,GAAA,CAElC,OAAOD,CAAAA,CAAQ,CAAE,SAAA,CAAWQ,CAAAA,CAAQ,SAAA,CAAAN,CAAAA,CAAW,MAAAhC,CAAM,CAAC,EAGxD,IAAIwC,CAAAA,CAAW,MAETC,CAAAA,CAAW,IAAI,qBAClBC,CAAAA,EAAY,CACX,QAAWC,CAAAA,IAASD,CAAAA,CACdC,EAAM,cAAA,EAAkB,CAACH,IAC3BC,CAAAA,CAAS,UAAA,EAAW,CACpBX,CAAAA,CAAQ,CAAE,SAAA,CAAWQ,EAAQ,SAAA,CAAAN,CAAAA,CAAW,MAAAhC,CAAM,CAAC,GAGrD,CAAA,CACA,CAAE,WAAAuC,CAAW,CACf,EAEA,OAAAE,CAAAA,CAAS,QAAQH,CAAM,CAAA,CAEhB,IAAM,CACXE,CAAAA,CAAW,IAAA,CACXC,CAAAA,CAAS,UAAA,GACX,CACF,CAKO,IAAMG,GAAe,qBAKrB,SAASC,GACdC,CAAAA,CAAoB,QAAA,CAAS,KACd,CACf,OAAO,MAAM,IAAA,CAAKA,CAAAA,CAAK,iBAA8B,CAAA,CAAA,EAAIF,EAAY,GAAG,CAAC,CAC3E,CCrIO,SAASG,EAAAA,CAAqB3C,CAAAA,CAAiC,CACpE,OAAO,CACL,UAAW,CAAA,EAAGA,CAAI,cAClB,WAAA,CAAa,CAAA,EAAGA,CAAI,CAAA,aAAA,CAAA,CACpB,OAAA,CAAS,GAAGA,CAAI,CAAA,SAAA,CAAA,CAChB,SAAU,CAAA,EAAGA,CAAI,aACjB,UAAA,CAAY,CAAA,EAAGA,CAAI,CAAA,YAAA,CAAA,CACnB,MAAA,CAAQ,CAAA,EAAGA,CAAI,CAAA,QAAA,CACjB,CACF,CAQO,SAAS4C,EAAAA,CACdC,EACAC,CAAAA,CACAC,CAAAA,CACe,CACf,OAAO,IAAI,QAASC,CAAAA,EAAY,CAE9BH,EAAG,SAAA,CAAU,GAAA,CAAIC,EAAQ,SAAA,CAAWA,CAAAA,CAAQ,WAAW,CAAA,CAGlDD,CAAAA,CAAG,YAAA,CAGRA,EAAG,SAAA,CAAU,MAAA,CAAOC,EAAQ,SAAS,CAAA,CACrCD,EAAG,SAAA,CAAU,GAAA,CAAIC,EAAQ,OAAO,CAAA,CAEhC,IAAMG,CAAAA,CAAQ,IAAM,CAClBJ,CAAAA,CAAG,SAAA,CAAU,OAAOC,CAAAA,CAAQ,WAAA,CAAaA,CAAAA,CAAQ,OAAO,CAAA,CACxDD,CAAAA,CAAG,oBAAoB,eAAA,CAAiBI,CAAK,EAC7CD,CAAAA,GACF,EAEID,CAAAA,GAAa,MAAA,CACf,WAAWE,CAAAA,CAAOF,CAAQ,GAE1BF,CAAAA,CAAG,gBAAA,CAAiB,gBAAiBI,CAAAA,CAAO,CAAE,KAAM,IAAK,CAAC,CAAA,CAE1D,UAAA,CAAWA,CAAAA,CAAO,GAAI,GAE1B,CAAC,CACH,CAMO,SAASC,EAAAA,CACdL,EACAC,CAAAA,CACAC,CAAAA,CACe,CACf,OAAO,IAAI,QAASC,CAAAA,EAAY,CAC9BH,EAAG,SAAA,CAAU,GAAA,CAAIC,EAAQ,QAAA,CAAUA,CAAAA,CAAQ,UAAU,CAAA,CAEhDD,CAAAA,CAAG,YAAA,CAERA,EAAG,SAAA,CAAU,MAAA,CAAOC,EAAQ,QAAQ,CAAA,CACpCD,EAAG,SAAA,CAAU,GAAA,CAAIC,EAAQ,MAAM,CAAA,CAE/B,IAAMG,CAAAA,CAAQ,IAAM,CAClBJ,CAAAA,CAAG,SAAA,CAAU,OAAOC,CAAAA,CAAQ,UAAA,CAAYA,CAAAA,CAAQ,MAAM,CAAA,CACtDD,CAAAA,CAAG,oBAAoB,eAAA,CAAiBI,CAAK,EAC7CD,CAAAA,GACF,EAEID,CAAAA,GAAa,MAAA,CACf,WAAWE,CAAAA,CAAOF,CAAQ,GAE1BF,CAAAA,CAAG,gBAAA,CAAiB,gBAAiBI,CAAAA,CAAO,CAAE,KAAM,IAAK,CAAC,CAAA,CAC1D,UAAA,CAAWA,CAAAA,CAAO,GAAI,GAE1B,CAAC,CACH,CAyBO,IAAME,EAAAA,CAAahD,IAAkCC,CAAAA,EAAQ,CAClE,IAAMJ,CAAAA,CAAOI,CAAAA,CAAI,MAAM,IAAA,EAAQ,OAAA,CACzB0C,EAAUH,EAAAA,CAAqB3C,CAAI,EAEzC,OAAO,IAAM,CACX,IAAMqB,CAAAA,CAAY,QAAA,CAAS,cAAc,KAAK,CAAA,CAG9C,GAFAA,CAAAA,CAAU,KAAA,CAAM,QAAU,UAAA,CAEtBjB,CAAAA,CAAI,MAAM,IAAA,CAAM,CAClB,IAAMZ,CAAAA,CAAUC,CAAAA,CAAUW,EAAI,QAAA,EAAU,EACxCiB,CAAAA,CAAU,WAAA,CAAY7B,CAAO,CAAA,CAGzBA,CAAAA,YAAmB,WAAA,GACrBY,EAAI,KAAA,CAAM,OAAA,GAAUZ,CAAO,CAAA,CAC3BoD,EAAAA,CAAgBpD,EAASsD,CAAAA,CAAS1C,CAAAA,CAAI,MAAM,QAAQ,CAAA,CAAE,KAAK,IAAM,CAC/DA,EAAI,KAAA,CAAM,YAAA,GAAeZ,CAAO,EAClC,CAAC,CAAA,EAEL,CAEA,OAAO6B,CACT,CACF,CAAC,EAQM,SAAS+B,EAAAA,CAAsBpD,CAAAA,CAAc2B,EAIhD,EAAC,CAAW,CACd,GAAM,CACJ,SAAA0B,CAAAA,CAAW,KAAA,CACX,SAAAN,CAAAA,CAAW,MAAA,CACX,OAAAO,CAAAA,CAAS,MACX,CAAA,CAAI3B,CAAAA,CAEJ,OAAO;AAAA,CAAA,EACN3B,CAAI,CAAA;AAAA,CAAA,EACJA,CAAI,CAAA;AAAA,cAAA,EACSqD,CAAQ,CAAA,CAAA,EAAIN,CAAQ,CAAA,CAAA,EAAIO,CAAM,CAAA;AAAA;;AAAA,CAAA,EAG3CtD,CAAI,CAAA;AAAA,CAAA,EACJA,CAAI,CAAA;AAAA;AAAA;;AAAA,CAAA,EAIJA,CAAI,CAAA;AAAA,CAAA,EACJA,CAAI,CAAA;AAAA;AAAA;AAAA,CAAA,CAGL,IAAA,EACF,CCrJA,IAAIuD,EAAAA,CAA4B,EAAC,CAG1B,SAASC,EAAAA,EAA+B,CAC7C,IAAMC,CAAAA,CAAOF,EAAAA,CACb,OAAAA,EAAAA,CAAc,EAAC,CACRE,CACT,CAGO,SAASC,EAAAA,CAAmBC,CAAAA,CAA+B,CAChE,IAAIC,CAAAA,CAAO,EAAA,CAGLC,CAAAA,CAAQF,CAAAA,CAAQ,OAAO,CAACG,CAAAA,CAAGC,CAAAA,GAAMA,CAAAA,CAAE,KAAA,EAASD,CAAAA,CAAG,EAAE,CAAA,CACjDE,CAAAA,CAAgBL,CAAAA,CAAQ,MAAA,CAAO,CAACG,CAAAA,CAAGC,CAAAA,GAAMA,CAAAA,CAAE,aAAA,EAAiBD,CAAAA,CAAG,EAAE,CAAA,CAEvE,GAAID,CAAAA,CAAO,CACT,IAAMI,CAAAA,CAAaD,CAAAA,CACfA,CAAAA,CAAc,OAAA,CAAQ,IAAA,CAAMH,CAAK,CAAA,CACjCA,CAAAA,CACJD,CAAAA,EAAQ,UAAUK,CAAU,CAAA;AAAA,EAC9B,CAGA,IAAA,IAAWC,CAAAA,IAAUP,CAAAA,CACnB,IAAA,IAAWQ,KAAQD,CAAAA,CAAO,IAAA,EAAQ,EAAC,CACjCN,GAAQ,SAAA,CACJO,CAAAA,CAAK,OAAMP,CAAAA,EAAQ,CAAA,OAAA,EAAUO,EAAK,IAAI,CAAA,CAAA,CAAA,CAAA,CACtCA,CAAAA,CAAK,QAAA,GAAUP,GAAQ,CAAA,WAAA,EAAcO,CAAAA,CAAK,QAAQ,CAAA,CAAA,CAAA,CAAA,CAClDA,EAAK,SAAA,GAAWP,CAAAA,EAAQ,CAAA,aAAA,EAAgBO,CAAAA,CAAK,SAAS,CAAA,CAAA,CAAA,CAAA,CAC1DP,CAAAA,EAAQ,aAAaO,CAAAA,CAAK,OAAO,IACjCP,CAAAA,EAAQ,CAAA;AAAA,CAAA,CAKZ,IAAA,IAAWM,CAAAA,IAAUP,CAAAA,CACnB,IAAA,IAAWS,CAAAA,IAAQF,EAAO,IAAA,EAAQ,EAAC,CACjCN,CAAAA,EAAQ,CAAA,aAAA,EAAgBQ,CAAAA,CAAK,GAAG,CAAA,QAAA,EAAWA,CAAAA,CAAK,IAAI,CAAA,CAAA,CAAA,CAChDA,CAAAA,CAAK,IAAA,GAAMR,GAAQ,CAAA,OAAA,EAAUQ,CAAAA,CAAK,IAAI,CAAA,CAAA,CAAA,CAAA,CAC1CR,CAAAA,EAAQ,CAAA;AAAA,CAAA,CAIZ,OAAOA,CACT,CAIA,IAAMS,GAAe,iBAAA,CASd,SAASC,EAAQJ,CAAAA,CAA+C,CACrE,IAAMK,CAAAA,CAAY,OAAOL,GAAW,UAAA,CAAaA,CAAAA,CAAS,IAAMA,CAAAA,CAGhE,GAAI,OAAO,QAAA,CAAa,GAAA,CAAa,CACnCX,EAAAA,CAAY,IAAA,CAAKgB,GAAW,CAAA,CAC5B,MACF,CAEA,IAAMC,IAA6B,EAAC,CAE9BC,EAAUnD,CAAAA,CAAO,IAAM,CAC3B,IAAMoD,CAAAA,CAAMH,GAAU,CAGtB,IAAA,IAAW1B,KAAM2B,GAAAA,CACf3B,CAAAA,CAAG,QAAO,CAKZ,GAHA2B,IAAgB,MAAA,CAAS,CAAA,CAGrBE,EAAI,KAAA,CAAO,CACb,IAAMb,CAAAA,CAAQa,CAAAA,CAAI,cACdA,CAAAA,CAAI,aAAA,CAAc,QAAQ,IAAA,CAAMA,CAAAA,CAAI,KAAK,CAAA,CACzCA,CAAAA,CAAI,MACR,QAAA,CAAS,KAAA,CAAQb,EACnB,CAGA,IAAA,IAAWM,KAAQO,CAAAA,CAAI,IAAA,EAAQ,EAAC,CAAG,CACjC,IAAM7B,CAAAA,CAAK,QAAA,CAAS,cAAc,MAAM,CAAA,CACxCA,EAAG,YAAA,CAAawB,EAAAA,CAAc,EAAE,CAAA,CAC5BF,CAAAA,CAAK,IAAA,EAAMtB,CAAAA,CAAG,YAAA,CAAa,MAAA,CAAQsB,EAAK,IAAI,CAAA,CAC5CA,EAAK,QAAA,EAAUtB,CAAAA,CAAG,aAAa,UAAA,CAAYsB,CAAAA,CAAK,QAAQ,CAAA,CACxDA,CAAAA,CAAK,WAAWtB,CAAAA,CAAG,YAAA,CAAa,aAAcsB,CAAAA,CAAK,SAAS,EAChEtB,CAAAA,CAAG,YAAA,CAAa,UAAWsB,CAAAA,CAAK,OAAO,EACvC,QAAA,CAAS,IAAA,CAAK,YAAYtB,CAAE,CAAA,CAC5B2B,IAAgB,IAAA,CAAK3B,CAAE,EACzB,CAGA,IAAA,IAAWuB,KAAQM,CAAAA,CAAI,IAAA,EAAQ,EAAC,CAAG,CACjC,IAAM7B,CAAAA,CAAK,QAAA,CAAS,aAAA,CAAc,MAAM,CAAA,CACxCA,CAAAA,CAAG,aAAawB,EAAAA,CAAc,EAAE,EAChCxB,CAAAA,CAAG,YAAA,CAAa,MAAOuB,CAAAA,CAAK,GAAG,EAC/BvB,CAAAA,CAAG,YAAA,CAAa,OAAQuB,CAAAA,CAAK,IAAI,EAC7BA,CAAAA,CAAK,IAAA,EAAMvB,EAAG,YAAA,CAAa,MAAA,CAAQuB,EAAK,IAAI,CAAA,CAChD,SAAS,IAAA,CAAK,WAAA,CAAYvB,CAAE,CAAA,CAC5B2B,GAAAA,CAAgB,KAAK3B,CAAE,EACzB,CAGA,IAAA,IAAW8B,CAAAA,IAAUD,EAAI,MAAA,EAAU,GAAI,CACrC,IAAM7B,EAAK,QAAA,CAAS,aAAA,CAAc,QAAQ,CAAA,CAC1CA,CAAAA,CAAG,YAAA,CAAawB,GAAc,EAAE,CAAA,CAC5BM,EAAO,GAAA,EAAK9B,CAAAA,CAAG,aAAa,KAAA,CAAO8B,CAAAA,CAAO,GAAG,CAAA,CAC7CA,CAAAA,CAAO,MAAM9B,CAAAA,CAAG,YAAA,CAAa,OAAQ8B,CAAAA,CAAO,IAAI,EAChDA,CAAAA,CAAO,KAAA,EAAO9B,EAAG,YAAA,CAAa,OAAA,CAAS,EAAE,CAAA,CACzC8B,CAAAA,CAAO,OAAO9B,CAAAA,CAAG,YAAA,CAAa,QAAS,EAAE,CAAA,CACzC8B,EAAO,SAAA,GAAW9B,CAAAA,CAAG,YAAc8B,CAAAA,CAAO,SAAA,CAAA,CAC9C,SAAS,IAAA,CAAK,WAAA,CAAY9B,CAAE,CAAA,CAC5B2B,GAAAA,CAAgB,KAAK3B,CAAE,EACzB,CAGA,GAAI6B,CAAAA,CAAI,UACN,IAAA,GAAW,CAACE,EAAK3E,CAAK,CAAA,GAAK,OAAO,OAAA,CAAQyE,CAAAA,CAAI,SAAS,CAAA,CACrD,QAAA,CAAS,gBAAgB,YAAA,CAAaE,CAAAA,CAAK3E,CAAK,CAAA,CAKpD,GAAIyE,EAAI,SAAA,CACN,IAAA,GAAW,CAACE,CAAAA,CAAK3E,CAAK,IAAK,MAAA,CAAO,OAAA,CAAQyE,EAAI,SAAS,CAAA,CACrD,SAAS,IAAA,CAAK,YAAA,CAAaE,EAAK3E,CAAK,EAG3C,CAAC,CAAA,CAGD,GAAI,CACF4E,CAAAA,CAAU,IAAM,CACdJ,CAAAA,EAAQ,CACR,IAAA,IAAW5B,KAAM2B,GAAAA,CACf3B,CAAAA,CAAG,SAEP,CAAC,EACH,CAAA,KAAQ,CAGR,CACF,CC3JO,SAASiC,GAAaC,CAAAA,CAAwB,CACnD,OAAOA,CACT,CAcO,SAASC,EAAAA,CACdC,CAAAA,CACAC,EACa,CACb,IAAMC,EAAoB,EAAC,CACrBC,EAA+C,EAAC,CAChDC,EAAsC,EAAC,CACvCC,EAAqC,EAAC,CACxCC,EAA2B,IAAA,CAC3BC,CAAAA,CAAkC,KAEhCC,CAAAA,CAA2B,CAC/B,QAAWb,CAAAA,CAAsB3E,CAAAA,CAAU,CAEzCyF,CAAAA,CAAQd,CAAAA,CAAK3E,CAAK,EACpB,CAAA,CACA,OAAA,CAAQ0F,EAAiC,CACvCP,CAAAA,CAAc,KAAKO,CAAO,EAC5B,EACA,aAAA,CAAcC,CAAAA,CAAkB,CAC9BP,CAAAA,CAAiB,IAAA,CAAKO,CAAI,EAC5B,CAAA,CACA,OAAQN,CACV,CAAA,CAEMO,EAAmB,CACvB,GAAA,CAAId,EAAgB,CAClB,OAAAI,EAAQ,IAAA,CAAKJ,CAAM,EACZc,CACT,CAAA,CAEA,OAAOjB,CAAAA,CAAa3E,CAAAA,CAAgB,CAClC,OAAAqF,CAAAA,CAAUV,CAAG,CAAA,CAAI3E,CAAAA,CACV4F,CACT,CAAA,CAEA,KAAA,CAAMC,CAAAA,CAAgC,CAMpC,GALAN,CAAAA,CACE,OAAOM,CAAAA,EAAa,QAAA,CAChB,SAAS,aAAA,CAA2BA,CAAQ,EAC5CA,CAAAA,CAEF,CAACN,EACH,MAAM,IAAI,MACR,CAAA,kCAAA,EAAqCM,CAAQ,EAC/C,CAAA,CAIF,IAAA,IAAWf,KAAUI,CAAAA,CACnBJ,CAAAA,CAAO,MAAMU,CAAS,CAAA,CAIxB,QAAWG,CAAAA,IAAQP,CAAAA,CACjBO,GAAK,CAIP,GAAI,CACFL,CAAAA,CAAcN,CAAAA,CAAeC,GAAa,EAAU,EACpDM,CAAAA,CAAY,WAAA,CAAYD,CAAW,EACrC,CAAA,MAAS/E,EAAK,CACZ,IAAMuF,EAAIvF,CAAAA,YAAe,KAAA,CAAQA,EAAM,IAAI,KAAA,CAAM,OAAOA,CAAG,CAAC,EAC5D,GAAI4E,CAAAA,CAAc,OAAS,CAAA,CACzB,IAAA,IAAWO,KAAWP,CAAAA,CACpBO,CAAAA,CAAQI,CAAC,CAAA,CAAA,KAGX,MAAMA,CAEV,CACF,CAAA,CAEA,SAAU,CACJR,CAAAA,EAAeC,IACjBA,CAAAA,CAAY,WAAA,CAAYD,CAAW,CAAA,CACnCA,CAAAA,CAAc,MAElB,CACF,CAAA,CAEA,OAAOM,CACT,CC9IO,SAASG,EAAAA,CAAYC,CAAAA,CAAYtE,EAAmC,CACzE,IAAMuE,EAAQ5F,CAAAA,CAAO,CAAC,CAAA,CAChB6F,CAAAA,CAAW7F,CAAAA,CAAOqB,CAAAA,EAAS,YAAc,KAAK,CAAA,CAChDyE,EAA+C,IAAA,CAEnD,SAASC,GAAQ,CACfC,CAAAA,GACAF,CAAAA,CAAQ,WAAA,CAAY,IAAMF,CAAAA,CAAM,MAAA,CAAQnC,GAAMA,CAAAA,CAAI,CAAC,EAAGkC,CAAE,EAC1D,CAEA,SAASK,CAAAA,EAAO,CACVF,CAAAA,GAAS,aAAA,CAAcA,CAAK,CAAA,CAAGA,CAAAA,CAAQ,MAC7C,CAEA,OAAID,GAAS,EAAGE,CAAAA,GAET,CACL,KAAA,EAAQ,IAAMH,CAAAA,EAAM,CAAA,CACpB,UAAW,IAAMC,CAAAA,EAAS,CAAA,CAC1B,KAAA,EAAQ,CAAEA,CAAAA,CAAS,IAAI,KAAK,CAAA,CAAGG,IAAQ,CAAA,CACvC,QAAS,CAAEH,CAAAA,CAAS,IAAI,IAAI,CAAA,CAAGE,IAAS,CAAA,CACxC,OAAQ,CAAEH,CAAAA,CAAM,IAAI,CAAC,EAAG,EACxB,OAAA,EAAU,CAAEI,IAAQ,CACtB,CACF,CAYO,SAASC,GAAWN,CAAAA,CAAY,CACrC,IAAMO,CAAAA,CAAQlG,CAAAA,CAAO,KAAK,CAAA,CACtB8F,CAAAA,CAA8C,KAElD,SAASC,CAAAA,EAAQ,CACfC,CAAAA,EAAK,CACLE,CAAAA,CAAM,GAAA,CAAI,KAAK,CAAA,CACfJ,EAAQ,UAAA,CAAW,IAAMI,EAAM,GAAA,CAAI,IAAI,EAAGP,CAAE,EAC9C,CAEA,SAASK,CAAAA,EAAO,CACVF,CAAAA,GAAS,YAAA,CAAaA,CAAK,CAAA,CAAGA,CAAAA,CAAQ,MAC5C,CAEA,OAAAC,GAAM,CAEC,CACL,OAAQ,IAAMG,CAAAA,IACd,OAAA,EAAU,CAAEH,IAAS,CAAA,CACrB,SAAU,CAAEC,CAAAA,GAAQ,CACtB,CACF,CAcO,SAASG,EAAAA,CAAeC,EAAiBC,CAAAA,CAAkC,CAChF,IAAMC,GAAAA,CAAYtG,CAAAA,CAAUoG,CAAAA,EAAQ,CAAA,CAChCN,CAAAA,CAA8C,KAElD,OAAA9E,CAAAA,CAAO,IAAM,CACX,IAAMrB,EAAQyG,CAAAA,EAAO,CACrB,OAAIN,CAAAA,EAAO,YAAA,CAAaA,CAAK,CAAA,CAC7BA,CAAAA,CAAQ,WAAW,IAAMQ,GAAAA,CAAU,IAAI3G,CAAK,CAAA,CAAG0G,CAAK,CAAA,CAC7C,IAAM,CAAMP,CAAAA,EAAO,YAAA,CAAaA,CAAK,EAAG,CACjD,CAAC,CAAA,EAEO,IAAMQ,KAAU,CAC1B,CAYO,SAASC,EAAAA,CAAeH,CAAAA,CAAiBI,EAAqC,CACnF,IAAMC,GAAAA,CAAYzG,CAAAA,CAAUoG,CAAAA,EAAQ,EAChCM,CAAAA,CAAa,CAAA,CACbZ,EAA8C,IAAA,CAElD,OAAA9E,EAAO,IAAM,CACX,IAAMrB,CAAAA,CAAQyG,CAAAA,GACRO,CAAAA,CAAM,IAAA,CAAK,KAAI,CACfC,CAAAA,CAAUD,EAAMD,CAAAA,CAEtB,OAAIE,GAAWJ,CAAAA,EACbC,GAAAA,CAAU,IAAI9G,CAAK,CAAA,CACnB+G,EAAaC,CAAAA,GAETb,CAAAA,EAAO,aAAaA,CAAK,CAAA,CAC7BA,EAAQ,UAAA,CAAW,IAAM,CACvBW,GAAAA,CAAU,GAAA,CAAI9G,CAAK,CAAA,CACnB+G,CAAAA,CAAa,KAAK,GAAA,GACpB,CAAA,CAAGF,CAAAA,CAAWI,CAAO,CAAA,CAAA,CAEhB,IAAM,CAAMd,CAAAA,EAAO,aAAaA,CAAK,EAAG,CACjD,CAAC,CAAA,EAEO,IAAMW,GAAAA,EAAU,CAC1B,CAWO,SAASI,EAAAA,CAAWC,EAAU,CAAA,CAAG,CACtC,IAAMlB,CAAAA,CAAQ5F,CAAAA,CAAO8G,CAAO,CAAA,CAC5B,OAAO,CACL,KAAA,EAAQ,IAAMlB,GAAM,CAAA,CACpB,GAAA,CAAImB,EAAQ,CAAA,CAAG,CAAEnB,EAAM,MAAA,CAAQnC,CAAAA,EAAMA,EAAIsD,CAAK,EAAG,EACjD,GAAA,CAAIA,CAAAA,CAAQ,EAAG,CAAEnB,CAAAA,CAAM,MAAA,CAAQnC,CAAAA,EAAMA,CAAAA,CAAIsD,CAAK,EAAG,CAAA,CACjD,GAAA,CAAIpH,EAAe,CAAEiG,CAAAA,CAAM,IAAIjG,CAAK,EAAG,EACvC,KAAA,EAAQ,CAAEiG,EAAM,GAAA,CAAIkB,CAAO,EAAG,CAChC,CACF,CAWO,SAASE,EAAAA,CAAUF,EAAU,KAAA,CAAO,CACzC,IAAMnH,CAAAA,CAAQK,CAAAA,CAAO8G,CAAO,CAAA,CAC5B,OAAO,CACL,KAAA,EAAQ,IAAMnH,GAAM,CAAA,CACpB,MAAA,EAAS,CAAEA,CAAAA,CAAM,MAAA,CAAQsH,GAAM,CAACA,CAAC,EAAG,CAAA,CACpC,OAAA,EAAU,CAAEtH,CAAAA,CAAM,GAAA,CAAI,IAAI,EAAG,CAAA,CAC7B,UAAW,CAAEA,CAAAA,CAAM,IAAI,KAAK,EAAG,CACjC,CACF,CAcO,SAASuH,EAAAA,CAAed,CAAAA,CAAgD,CAC7E,IAAIe,CAAAA,CACEC,IAAUpH,CAAAA,CAAsB,MAAS,EAE/C,OAAAgB,CAAAA,CAAO,IAAM,CACX,IAAMqG,EAAUjB,CAAAA,EAAO,CACvBgB,IAAQ,GAAA,CAAID,CAAS,EACrBA,CAAAA,CAAYE,EACd,CAAC,CAAA,EAEO,IAAMD,KAAQ,CACxB,CCtLO,SAASE,EAAAA,CAAcC,CAAAA,CAAwC,CACpE,GAAI,OAAO,MAAA,CAAW,IACpB,OAAQ,IAAM,OAGhB,IAAMC,CAAAA,CAAM,OAAO,UAAA,CAAWD,CAAK,EAC7BE,CAAAA,CAAUzH,CAAAA,CAAOwH,EAAI,OAAO,CAAA,CAE5BnC,EAAWI,CAAAA,EAA2BgC,CAAAA,CAAQ,IAAIhC,CAAAA,CAAE,OAAO,EACjE,OAAA+B,CAAAA,CAAI,iBAAiB,QAAA,CAAUnC,CAAO,GAE9B,IAAMoC,CAAAA,GAChB,CAQA,IAAMC,GAAmC,CACvC,EAAA,CAAI,IACJ,EAAA,CAAI,GAAA,CACJ,GAAI,IAAA,CACJ,EAAA,CAAI,KACJ,KAAA,CAAO,IACT,CAAA,CAYO,SAASC,EAAAA,CAAcC,CAAAA,CAA2BF,GAAqB,CAC5E,IAAMG,EAAS,MAAA,CAAO,OAAA,CAAQD,CAAW,CAAA,CAAE,IAAA,CAAK,CAACE,CAAAA,CAAGC,CAAAA,GAAMD,EAAE,CAAC,CAAA,CAAIC,EAAE,CAAC,CAAC,EAC/DC,CAAAA,CAAQhI,CAAAA,CAAO,OAAO,MAAA,CAAW,GAAA,CAAc,OAAO,UAAA,CAAa,IAAI,EAE7E,GAAI,OAAO,OAAW,GAAA,CAAa,CACjC,IAAMqF,CAAAA,CAAU,IAAM2C,EAAM,GAAA,CAAI,MAAA,CAAO,UAAU,CAAA,CACjD,MAAA,CAAO,iBAAiB,QAAA,CAAU3C,CAAAA,CAAS,CAAE,OAAA,CAAS,IAAK,CAAC,EAC9D,CAEA,SAASgC,GAAkB,CACzB,IAAMY,EAAID,CAAAA,EAAM,CACZE,EAAS,EAAA,CACb,IAAA,GAAW,CAACxI,CAAAA,CAAMyI,CAAG,IAAKN,CAAAA,CACpBI,CAAAA,EAAKE,IAAKD,CAAAA,CAASxI,CAAAA,CAAAA,CAEzB,OAAOwI,CAAAA,EAAUL,CAAAA,CAAO,CAAC,CAAA,GAAI,CAAC,GAAK,EACrC,CAEA,SAASO,CAAAA,CAAI1I,CAAAA,CAAuB,CAClC,IAAM2I,CAAAA,CAAKT,EAAYlI,CAAI,CAAA,CAC3B,OAAO2I,CAAAA,GAAO,MAAA,EAAaL,GAAM,EAAKK,CACxC,CAEA,SAASC,CAAAA,CAAG5I,EAAuB,CACjC,IAAM2I,EAAKT,CAAAA,CAAYlI,CAAI,EAC3B,OAAO2I,CAAAA,GAAO,QAAaL,CAAAA,EAAM,CAAIK,CACvC,CAEA,OAAO,CAAE,OAAA,CAAAhB,CAAAA,CAAS,IAAAe,CAAAA,CAAK,EAAA,CAAAE,EAAI,KAAA,EAAQ,IAAMN,GAAM,CAA6B,CAC9E,CAcO,SAASO,EAAAA,CACdjE,EACAkE,CAAAA,CACAC,GAAAA,CAA+B,QACpB,CACX,IAAMC,EAAQ,OAAO,MAAA,CAAW,IAC3BD,GAAAA,GAAY,OAAA,CAAU,aAAe,cAAA,CACtC,IAAA,CAGAE,CAAAA,CAAaH,CAAAA,CACjB,GAAIE,CAAAA,CACF,GAAI,CACF,IAAME,EAAMF,CAAAA,CAAM,OAAA,CAAQpE,CAAG,CAAA,CACzBsE,CAAAA,GAAQ,OAAMD,CAAAA,CAAa,IAAA,CAAK,MAAMC,CAAG,CAAA,EAC/C,MAAQ,CAAoB,CAG9B,IAAMC,CAAAA,CAAQ7I,CAAAA,CAAU2I,CAAU,CAAA,CAGlC,OAAID,IACF1H,CAAAA,CAAO,IAAM,CACX,IAAMrB,CAAAA,CAAQkJ,GAAM,CACpB,GAAI,CACFH,CAAAA,CAAM,OAAA,CAAQpE,EAAK,IAAA,CAAK,SAAA,CAAU3E,CAAK,CAAC,EAC1C,MAAQ,CAAqB,CAC/B,CAAC,CAAA,CAGG,OAAO,MAAA,CAAW,KACpB,MAAA,CAAO,gBAAA,CAAiB,UAAY8F,CAAAA,EAAM,CACxC,GAAIA,CAAAA,CAAE,GAAA,GAAQnB,GAAOmB,CAAAA,CAAE,QAAA,GAAa,KAClC,GAAI,CACFoD,EAAM,GAAA,CAAI,IAAA,CAAK,MAAMpD,CAAAA,CAAE,QAAQ,CAAC,EAClC,CAAA,KAAQ,CAAe,CAE3B,CAAC,GAIEoD,CACT,CAaO,SAASC,EAAAA,CAAazH,CAAAA,CAAgC,CAC3D,IAAM0H,CAAAA,CAAO/I,EAAO,EAAE,CAAA,CAChBgJ,EAAShJ,CAAAA,CAAO,KAAK,EACrBiJ,CAAAA,CAAU5H,CAAAA,EAAS,OAAA,EAAW,GAAA,CAChCyE,CAAAA,CAA8C,IAAA,CAElD,eAAeoD,CAAAA,CAAKvJ,CAAAA,CAA8B,CAC5C,OAAO,SAAA,CAAc,KAAe,CAAC,SAAA,CAAU,YACnD,MAAM,SAAA,CAAU,UAAU,SAAA,CAAUA,CAAK,EACzCoJ,CAAAA,CAAK,GAAA,CAAIpJ,CAAK,CAAA,CACdqJ,CAAAA,CAAO,IAAI,IAAI,CAAA,CACXlD,GAAO,YAAA,CAAaA,CAAK,EAC7BA,CAAAA,CAAQ,UAAA,CAAW,IAAMkD,CAAAA,CAAO,GAAA,CAAI,KAAK,CAAA,CAAGC,CAAO,GACrD,CAEA,OAAO,CACL,IAAA,EAAO,IAAMF,GAAK,CAAA,CAClB,MAAA,EAAS,IAAMC,CAAAA,EAAO,CAAA,CACtB,KAAAE,CACF,CACF,CAYO,SAASC,EAAAA,EAAqC,CACnD,GAAI,OAAO,OAAW,GAAA,CACpB,OAAQ,IAAM,IAAA,EAGhB,IAAMC,EAASpJ,CAAAA,CAAO,SAAA,CAAU,MAAM,CAAA,CACtC,OAAA,MAAA,CAAO,iBAAiB,QAAA,CAAU,IAAMoJ,EAAO,GAAA,CAAI,IAAI,CAAC,CAAA,CACxD,MAAA,CAAO,iBAAiB,SAAA,CAAW,IAAMA,EAAO,GAAA,CAAI,KAAK,CAAC,CAAA,EAElD,IAAMA,GAAO,CACvB,CAqBO,SAASC,EAAAA,CACdhI,CAAAA,CACkC,CAClC,IAAMwH,CAAAA,CAAQ7I,CAAAA,CAAyB,CACrC,QAAA,CAAU,IAAA,CACV,UAAW,IAAA,CACX,QAAA,CAAU,KACV,KAAA,CAAO,IAAA,CACP,QAAS,IACX,CAAC,EAED,OAAI,OAAO,UAAc,GAAA,EAAe,SAAA,CAAU,YAChD,SAAA,CAAU,WAAA,CAAY,cACnBsJ,CAAAA,EAAQ,CACPT,EAAM,GAAA,CAAI,CACR,SAAUS,CAAAA,CAAI,MAAA,CAAO,SACrB,SAAA,CAAWA,CAAAA,CAAI,OAAO,SAAA,CACtB,QAAA,CAAUA,EAAI,MAAA,CAAO,QAAA,CACrB,MAAO,IAAA,CACP,OAAA,CAAS,KACX,CAAC,EACH,CAAA,CACCpJ,CAAAA,EAAQ,CACP2I,CAAAA,CAAM,IAAI,CACR,QAAA,CAAU,KACV,SAAA,CAAW,IAAA,CACX,SAAU,IAAA,CACV,KAAA,CAAO3I,EACP,OAAA,CAAS,KACX,CAAC,EACH,CAAA,CACAmB,CACF,CAAA,CAEAwH,CAAAA,CAAM,IAAI,CAAE,GAAGA,GAAM,CAAG,OAAA,CAAS,KAAM,CAAC,CAAA,EAGlC,IAAMA,CAAAA,EAAM,CACtB,CAOO,SAASU,EAAAA,EAAgB,CAC9B,IAAMvB,CAAAA,CAAQhI,EAAO,OAAO,MAAA,CAAW,IAAc,MAAA,CAAO,UAAA,CAAa,CAAC,CAAA,CACpEwJ,CAAAA,CAASxJ,CAAAA,CAAO,OAAO,MAAA,CAAW,GAAA,CAAc,OAAO,WAAA,CAAc,CAAC,EAE5E,OAAI,OAAO,OAAW,GAAA,EACpB,MAAA,CAAO,iBAAiB,QAAA,CAAU,IAAM,CACtCgI,CAAAA,CAAM,GAAA,CAAI,OAAO,UAAU,CAAA,CAC3BwB,EAAO,GAAA,CAAI,MAAA,CAAO,WAAW,EAC/B,CAAA,CAAG,CAAE,OAAA,CAAS,IAAK,CAAC,CAAA,CAGf,CACL,OAAQ,IAAMxB,CAAAA,IACd,MAAA,EAAS,IAAMwB,GAAO,CACxB,CACF,CAqBO,SAASC,EAAAA,CACd7H,EACAyD,CAAAA,CACAhE,CAAAA,CAOI,EAAC,CACO,CACZ,GAAI,OAAO,QAAA,CAAa,GAAA,CAAa,OAAO,IAAM,CAAC,EAEnD,GAAM,CACJ,OAAAqI,CAAAA,CAAS,CAAC,aAAa,CAAA,CACvB,MAAA,CAAAC,EAAS,EAAC,CACV,OAAAC,CAAAA,CAAS,IACX,EAAIvI,CAAAA,CAEAwE,CAAAA,CAAW+D,EAEf,SAASC,CAAAA,EAAgC,CACvC,OAAO,OAAOjI,GAAW,UAAA,CAAaA,CAAAA,GAAWA,CACnD,CAEA,SAASkI,CAAAA,CAAaC,CAAAA,CAAuB,CAC3C,IAAMC,CAAAA,CAAcD,EAAM,MAAA,CAC1B,GAAI,CAACC,CAAAA,CAAa,OAAO,MAAA,CAEzB,QAAWC,CAAAA,IAAWN,CAAAA,CACpB,GAAI,OAAOM,CAAAA,EAAY,UACrB,GAAID,CAAAA,CAAY,QAAQC,CAAO,CAAA,CAAG,OAAO,KAAA,CAAA,KAAA,GAErCA,CAAAA,GAAYD,GAAeC,CAAAA,CAAQ,QAAA,CAASD,CAAW,CAAA,CAAG,OAAO,MAGzE,OAAO,MACT,CAEA,SAASE,CAAAA,CAASH,EAAoB,CACpC,GAAI,CAAClE,CAAAA,CAAU,OACf,IAAMtD,CAAAA,CAAKsH,CAAAA,GACX,GAAI,CAACtH,EAAI,OAET,IAAMyH,EAAcD,CAAAA,CAAM,MAAA,CACtBxH,CAAAA,GAAOyH,CAAAA,EAAezH,CAAAA,CAAG,QAAA,CAASyH,CAAW,CAAA,EAC7CF,CAAAA,CAAaC,CAAK,CAAA,EAEtB1E,CAAAA,CAAQ0E,CAAK,EACf,CAEA,QAAWI,CAAAA,IAAaT,CAAAA,CACtB,SAAS,gBAAA,CAAiBS,CAAAA,CAAWD,EAAU,CAAE,OAAA,CAAS,KAAM,OAAA,CAAS,IAAK,CAAC,CAAA,CAGjF,IAAM/F,EAAU,IAAM,CACpB,QAAWgG,CAAAA,IAAaT,CAAAA,CACtB,SAAS,mBAAA,CAAoBS,CAAAA,CAAWD,EAAU,CAAE,OAAA,CAAS,IAAK,CAAyB,EAE/F,EAGA,OAAC/F,CAAAA,CAAgB,OAAS,IAAM,CAAE0B,CAAAA,CAAW,KAAM,CAAA,CAClD1B,CAAAA,CAAgB,QAAU,IAAM,CAAE0B,EAAW,MAAO,CAAA,CAE9C1B,CACT,CClVO,IAAMiG,GAASvK,GAAAA,CAA8BC,CAAAA,EAAQ,CAC1D,IAAIiB,CAAAA,CAAgC,KAChCkE,CAAAA,CAA2B,IAAA,CAE/B,SAAS4E,CAAAA,EAAyB,CAChC,IAAMjI,CAAAA,CAAS9B,CAAAA,CAAI,MAAM,MAAA,CACzB,OAAK8B,EACD,OAAOA,CAAAA,EAAW,SACb,QAAA,CAAS,aAAA,CAA2BA,CAAM,CAAA,EAAK,QAAA,CAAS,KAE1DA,CAAAA,CAJa,QAAA,CAAS,IAK/B,CAEA,OAAA2C,EAAU,IAAM,CACVU,GAAelE,CAAAA,EACjBA,CAAAA,CAAU,YAAYkE,CAAW,EAErC,CAAC,CAAA,CAEM,IAAM,CACXlE,CAAAA,CAAY8I,CAAAA,GACZ,IAAM3K,CAAAA,CAAUY,EAAI,QAAA,EAAS,CAC7B,OAAAmF,CAAAA,CAAc9F,CAAAA,CAAUD,CAAO,CAAA,CAC/B6B,CAAAA,CAAU,YAAYkE,CAAW,CAAA,CAG1B,SAAS,aAAA,CAAc,QAAQ,CACxC,CACF,CAAC,ECeD,IAAIoF,EAAAA,CAAY,EAKT,SAASC,EAAAA,CAAcjJ,EAA0B,EAAC,CAAY,CACnE,GAAM,CACJ,WAAAkJ,CAAAA,CAAa,CAAA,CACb,eAAA,CAAAC,CAAAA,CAAkB,GAAA,CAClB,QAAA,CAAAC,EAAW,WACb,CAAA,CAAIpJ,EAEEqJ,CAAAA,CAAS1K,CAAAA,CAAgB,EAAE,CAAA,CAC3B2K,EAAS,IAAI,GAAA,CAEnB,SAASC,CAAAA,CAAIC,CAAAA,CAAiBC,EAAiBC,CAAAA,CAA6B,CAC1E,IAAMC,CAAAA,CAAK,CAAA,MAAA,EAAS,EAAEX,EAAS,CAAA,CAAA,CACzB5H,EAAWsI,CAAAA,EAAM,QAAA,EAAYP,EAC7BS,CAAAA,CAAcF,CAAAA,EAAM,aAAe,IAAA,CAEnCG,CAAAA,CAAe,CACnB,EAAA,CAAAF,CAAAA,CACA,KAAAH,CAAAA,CACA,OAAA,CAAAC,EACA,QAAA,CAAArI,CAAAA,CACA,YAAAwI,CAAAA,CACA,SAAA,CAAW,IAAA,CAAK,GAAA,EAClB,CAAA,CAaA,GAXAP,CAAAA,CAAO,MAAA,CAAQS,GAAS,CACtB,IAAMC,EAAO,CAAC,GAAGD,EAAMD,CAAK,CAAA,CAE5B,GAAIE,CAAAA,CAAK,MAAA,CAASb,EAAY,CAC5B,IAAMc,EAAUD,CAAAA,CAAK,KAAA,GACrBE,GAAAA,CAAWD,CAAAA,CAAQ,EAAE,EACvB,CACA,OAAOD,CACT,CAAC,EAGG3I,CAAAA,CAAW,CAAA,CAAG,CAChB,IAAMqD,CAAAA,CAAQ,WAAW,IAAMyF,CAAAA,CAAQP,CAAE,CAAA,CAAGvI,CAAQ,EACpDkI,CAAAA,CAAO,GAAA,CAAIK,CAAAA,CAAIlF,CAAK,EACtB,CAEA,OAAOkF,CACT,CAEA,SAASO,CAAAA,CAAQP,CAAAA,CAAkB,CACjCM,GAAAA,CAAWN,CAAE,EACbN,CAAAA,CAAO,MAAA,CAAQS,GAASA,CAAAA,CAAK,MAAA,CAAQ3H,GAAMA,CAAAA,CAAE,EAAA,GAAOwH,CAAE,CAAC,EACzD,CAEA,SAASQ,CAAAA,EAAmB,CAC1B,IAAA,GAAW,CAACR,CAAE,CAAA,GAAKL,CAAAA,CACjBW,IAAWN,CAAE,CAAA,CAEfN,EAAO,GAAA,CAAI,EAAE,EACf,CAEA,SAASY,GAAAA,CAAWN,CAAAA,CAAkB,CACpC,IAAMlF,CAAAA,CAAQ6E,EAAO,GAAA,CAAIK,CAAE,EACvBlF,CAAAA,GACF,YAAA,CAAaA,CAAK,CAAA,CAClB6E,CAAAA,CAAO,OAAOK,CAAE,CAAA,EAEpB,CAEA,OAAO,CACL,QAAS,IAAMN,CAAAA,IACf,QAAA,CAAAD,CAAAA,CACA,QAAS,CAACgB,CAAAA,CAAKV,IAASH,CAAAA,CAAI,SAAA,CAAWa,EAAKV,CAAI,CAAA,CAChD,MAAO,CAACU,CAAAA,CAAKV,IAASH,CAAAA,CAAI,OAAA,CAASa,EAAKV,CAAI,CAAA,CAC5C,KAAM,CAACU,CAAAA,CAAKV,IAASH,CAAAA,CAAI,MAAA,CAAQa,EAAKV,CAAI,CAAA,CAC1C,OAAA,CAAS,CAACU,CAAAA,CAAKV,CAAAA,GAASH,EAAI,SAAA,CAAWa,CAAAA,CAAKV,CAAI,CAAA,CAChD,GAAA,CAAAH,EACA,OAAA,CAAAW,CAAAA,CACA,WAAAC,CACF,CACF,CC3FO,SAASE,EAAAA,CAAS9H,EAAsB,EAAC,CAAU,CACxD,GAAM,CACJ,OAAA+H,CAAAA,CAAS,CACP,MAAO,EAAC,CACR,KAAM,EACR,EACA,UAAA,CAAAC,GAAAA,CAAa,cACb,SAAA,CAAAC,CAAAA,CAAY,aACZ,UAAA,CAAAC,CAAAA,CAAa,IACf,CAAA,CAAIlI,CAAAA,CAEEmI,EAAa,MAAA,CAAO,IAAA,CAAKJ,CAAM,CAAA,CAGrC,SAASK,CAAAA,EAAyB,CAChC,OAAI,OAAO,OAAW,GAAA,CAAoBpI,CAAAA,CAAO,cAAgB,OAAA,CAC1D,MAAA,CAAO,WAAW,8BAA8B,CAAA,CAAE,QAAU,MAAA,CAAS,OAC9E,CAGA,SAASqI,CAAAA,EAA0B,CACjC,GAAI,OAAO,OAAW,GAAA,EAAeL,GAAAA,CAAY,CAC/C,IAAMM,CAAAA,CAAS,aAAa,OAAA,CAAQN,GAAU,EAC9C,GAAIM,CAAAA,EAAUH,EAAW,QAAA,CAASG,CAAM,EAAG,OAAOA,CACpD,CACA,OAAOtI,CAAAA,CAAO,cAAgBoI,CAAAA,EAChC,CAEA,IAAM3E,CAAAA,CAAUrH,CAAAA,CAAOiM,GAAiB,CAAA,CAClCE,IAASC,CAAAA,CAAS,IAAM/E,GAAQ,GAAM,MAAM,EAGlD,SAASgF,CAAAA,CAAW3M,EAAoB,CACtC,GAAI,OAAO,QAAA,CAAa,GAAA,CAAa,OAGrC,QAAA,CAAS,eAAA,CAAgB,aAAamM,CAAAA,CAAWnM,CAAI,EAGrD,IAAM4M,CAAAA,CAAOX,EAAOjM,CAAI,CAAA,CACxB,GAAI4M,CAAAA,CACF,IAAA,GAAW,CAAChI,CAAAA,CAAK3E,CAAK,IAAK,MAAA,CAAO,OAAA,CAAQ2M,CAAI,CAAA,CAC5C,QAAA,CAAS,gBAAgB,KAAA,CAAM,WAAA,CAAYhI,EAAK3E,CAAK,CAAA,CAKzD,SAAS,eAAA,CAAgB,SAAA,CAAU,OAAO,GAAGoM,CAAU,EACvD,QAAA,CAAS,eAAA,CAAgB,UAAU,GAAA,CAAIrM,CAAI,EAC7C,CAGA,OAAAsB,EAAO,IAAM,CACX,IAAMtB,CAAAA,CAAO2H,CAAAA,GACbgF,CAAAA,CAAW3M,CAAI,EAGX,OAAO,MAAA,CAAW,KAAekM,GAAAA,EACnC,YAAA,CAAa,QAAQA,GAAAA,CAAYlM,CAAI,EAEzC,CAAC,CAAA,CAGGoM,GAAc,OAAO,MAAA,CAAW,KACtB,MAAA,CAAO,UAAA,CAAW,8BAA8B,CAAA,CACxD,gBAAA,CAAiB,QAAA,CAAWrG,CAAAA,EAAM,CAErB,YAAA,CAAa,QAAQmG,GAAU,CAAA,EAE5CvE,EAAQ,GAAA,CAAI5B,CAAAA,CAAE,QAAU,MAAA,CAAS,OAAO,EAE5C,CAAC,CAAA,CAGI,CACL,OAAA,CAAS,IAAM4B,GAAQ,CACvB,MAAA,CAAA8E,IACA,GAAA,CAAII,CAAAA,CAAe,CACbR,CAAAA,CAAW,QAAA,CAASQ,CAAK,CAAA,EAC3BlF,CAAAA,CAAQ,IAAIkF,CAAK,EAErB,EACA,MAAA,EAAS,CACPlF,EAAQ,GAAA,CAAI8E,GAAAA,GAAW,OAAA,CAAU,MAAM,EACzC,CAAA,CACA,SAAA,EAAY,CACN,OAAO,MAAA,CAAW,GAAA,EAAeP,GAAAA,EACnC,YAAA,CAAa,UAAA,CAAWA,GAAU,CAAA,CAEpCvE,CAAAA,CAAQ,IAAI2E,CAAAA,EAAgB,EAC9B,CAAA,CACA,MAAA,CAAQD,CACV,CACF,CChGO,SAASS,EAAAA,CACdC,CAAAA,CACAC,EACAC,CAAAA,CACAC,CAAAA,CACAC,EAAW,CAAA,CACG,CACd,IAAMC,CAAAA,CAAe,IAAA,CAAK,MAAML,CAAAA,CAAYE,CAAU,EAChDI,CAAAA,CAAe,IAAA,CAAK,KAAKL,CAAAA,CAAkBC,CAAU,EAErD5G,CAAAA,CAAQ,IAAA,CAAK,IAAI,CAAA,CAAG+G,CAAAA,CAAeD,CAAQ,CAAA,CAC3CG,CAAAA,CAAM,KAAK,GAAA,CAAIJ,CAAAA,CAAYE,CAAAA,CAAeC,CAAAA,CAAeF,CAAQ,CAAA,CAEvE,OAAO,CACL,KAAA,CAAA9G,EACA,GAAA,CAAAiH,CAAAA,CACA,YAAaJ,CAAAA,CAAaD,CAAAA,CAC1B,UAAW5G,CAAAA,CAAQ4G,CACrB,CACF,CAeO,SAASM,GAAkB5L,CAAAA,CAK/B,CACD,IAAMoL,CAAAA,CAAYzM,CAAAA,CAAO,CAAC,CAAA,CACpB0M,CAAAA,CAAkB1M,EAAOqB,CAAAA,CAAQ,eAAA,EAAmB,GAAG,CAAA,CACvDwL,CAAAA,CAAWxL,EAAQ,QAAA,EAAY,CAAA,CAE/B6L,EAAQd,CAAAA,CAAS,IACdI,GACLC,CAAAA,EAAU,CACVC,GAAgB,CAChBrL,CAAAA,CAAQ,WACRA,CAAAA,CAAQ,KAAA,EAAM,CAAE,MAAA,CAChBwL,CACF,CACD,EAEKM,CAAAA,CAAef,CAAAA,CAAS,IAAM,CAClC,IAAMgB,EAAIF,CAAAA,EAAM,CAChB,OAAO7L,CAAAA,CAAQ,KAAA,GAAQ,KAAA,CAAM+L,CAAAA,CAAE,MAAOA,CAAAA,CAAE,GAAG,EAAE,GAAA,CAAI,CAACC,EAAMC,CAAAA,IAAO,CAC7D,KAAAD,CAAAA,CACA,KAAA,CAAOD,EAAE,KAAA,CAAQE,CACnB,EAAE,CACJ,CAAC,EAED,SAASC,CAAAA,CAAS9H,EAAgB,CAChC,IAAM7D,EAAS6D,CAAAA,CAAE,MAAA,CACjBgH,EAAU,GAAA,CAAI7K,CAAAA,CAAO,SAAS,EAChC,CAEA,SAAS4L,EAAmBhE,CAAAA,CAAsB,CAChDkD,EAAgB,GAAA,CAAIlD,CAAM,EAC5B,CAEA,OAAO,CACL,KAAA,CAAA0D,CAAAA,CACA,aAAAC,CAAAA,CACA,QAAA,CAAAI,EACA,kBAAA,CAAAC,CAAAA,CACA,WAAY,IAAMf,CAAAA,GACpB,CACF,KAIagB,EAAAA,CAAa5N,GAAAA,CAAuCC,GAAQ,CACvE,GAAM,CACJ,UAAA,CAAA6M,CAAAA,CACA,gBAAiBe,CAAAA,CACjB,QAAA,CAAAb,EAAW,CACb,CAAA,CAAI/M,EAAI,KAAA,CAEF2M,CAAAA,CAAYzM,EAAO,CAAC,CAAA,CAE1B,OAAO,IAAM,CACX,IAAM2N,EAAQ7N,CAAAA,CAAI,KAAA,CAAM,KAClB0J,CAAAA,CAASkE,CAAAA,EAAe,IAExBN,CAAAA,CAAIZ,EAAAA,CAAeC,GAAU,CAAGjD,CAAAA,CAAQmD,EAAYgB,CAAAA,CAAM,MAAA,CAAQd,CAAQ,CAAA,CAG1Ee,CAAAA,CAAQ,SAAS,aAAA,CAAc,KAAK,EAC1CA,CAAAA,CAAM,KAAA,CAAM,OAAS,CAAA,EAAGpE,CAAM,KAC9BoE,CAAAA,CAAM,KAAA,CAAM,SAAW,MAAA,CACvBA,CAAAA,CAAM,MAAM,QAAA,CAAW,UAAA,CAEvBA,EAAM,gBAAA,CAAiB,QAAA,CAAU,IAAM,CACrCnB,CAAAA,CAAU,IAAImB,CAAAA,CAAM,SAAS,EAC/B,CAAA,CAAG,CAAE,OAAA,CAAS,IAAK,CAAC,CAAA,CAGpB,IAAMC,CAAAA,CAAQ,QAAA,CAAS,cAAc,KAAK,CAAA,CAC1CA,EAAM,KAAA,CAAM,MAAA,CAAS,GAAGT,CAAAA,CAAE,WAAW,KACrCS,CAAAA,CAAM,KAAA,CAAM,SAAW,UAAA,CAGvB,IAAM3O,EAAU,QAAA,CAAS,aAAA,CAAc,KAAK,CAAA,CAC5CA,CAAAA,CAAQ,MAAM,QAAA,CAAW,UAAA,CACzBA,EAAQ,KAAA,CAAM,GAAA,CAAM,GAAGkO,CAAAA,CAAE,SAAS,KAClClO,CAAAA,CAAQ,KAAA,CAAM,KAAO,GAAA,CACrBA,CAAAA,CAAQ,MAAM,KAAA,CAAQ,GAAA,CAGtB,QAASoO,GAAAA,CAAIF,CAAAA,CAAE,MAAOE,GAAAA,CAAIF,CAAAA,CAAE,IAAKE,GAAAA,EAAAA,CAAK,CACpC,IAAMD,CAAAA,CAAOM,CAAAA,CAAML,GAAC,CAAA,CACpB,GAAI,CAACD,CAAAA,CAAM,SAEX,IAAMS,CAAAA,CAAM3O,CAAAA,CAAUW,EAAI,KAAA,CAAM,QAAA,CAASuN,EAAMC,GAAC,CAAC,EAC7CQ,CAAAA,YAAe,WAAA,GACjBA,EAAI,KAAA,CAAM,MAAA,CAAS,GAAGnB,CAAU,CAAA,EAAA,CAAA,CAAA,CAElCzN,EAAQ,WAAA,CAAY4O,CAAG,EACzB,CAEA,OAAAD,EAAM,WAAA,CAAY3O,CAAO,EACzB0O,CAAAA,CAAM,WAAA,CAAYC,CAAK,CAAA,CAChBD,CACT,CACF,CAAC,EChJM,SAASG,GACdC,CAAAA,CACc,CACd,IAAM3M,CAAAA,CACJ,OAAO2M,GAAoB,UAAA,CACvB,CAAE,OAAQA,CAAgB,CAAA,CAC1BA,EAEA,CACJ,MAAA,CAAAC,EACA,OAAA,CAASC,CAAAA,CACT,MAAOC,CAAAA,CACP,OAAA,CAAAlF,EACA,KAAA,CAAA5C,CAAAA,CAAQ,GACV,CAAA,CAAIhF,CAAAA,CAGA+M,EAAoC,IAAA,CACpCC,CAAAA,CAAoC,KACpCC,GAAAA,CAA0B,IAAA,CAE9B,SAASC,CAAAA,EAA2B,CAClC,OAAIF,CAAAA,GAEJA,CAAAA,CAAcJ,GAAO,CAClB,IAAA,CAAMO,CAAAA,EAAQ,CACbJ,CAAAA,CAAeI,CAAAA,CAAI,QACrB,CAAC,CAAA,CACA,MAAOtO,CAAAA,EAAQ,CACdoO,IAAYpO,CAAAA,YAAe,KAAA,CAAQA,EAAM,IAAI,KAAA,CAAM,OAAOA,CAAG,CAAC,EAChE,CAAC,CAAA,CAEImO,EACT,CAEA,OAAOxO,IAAoBC,GAAAA,EAAQ,CACjC,IAAM+I,CAAAA,CAAQ7I,CAAAA,CAAsC,SAAS,CAAA,CACvDyO,CAAAA,CAAczO,EAAO,KAAK,CAAA,CAGhCuO,GAAU,CAAE,IAAA,CAAK,IAAM,CACjBD,GAAAA,CACFzF,EAAM,GAAA,CAAI,OAAO,EAEjBA,CAAAA,CAAM,GAAA,CAAI,OAAO,EAErB,CAAC,CAAA,CAGD,IAAI6F,CAAAA,CAAmD,IAAA,CACnDrI,EAAQ,CAAA,CACVqI,CAAAA,CAAa,WAAW,IAAMD,CAAAA,CAAY,IAAI,IAAI,CAAA,CAAGpI,CAAK,CAAA,CAE1DoI,CAAAA,CAAY,IAAI,IAAI,CAAA,CAItB,IAAIE,CAAAA,CAAqD,IAAA,CACzD,OAAI1F,CAAAA,GACF0F,CAAAA,CAAe,WAAW,IAAM,CAC1B9F,GAAM,GAAM,SAAA,GACdyF,IAAY,IAAI,KAAA,CAAM,mCAAmCrF,CAAO,CAAA,EAAA,CAAI,EACpEJ,CAAAA,CAAM,GAAA,CAAI,OAAO,CAAA,EAErB,CAAA,CAAGI,CAAO,CAAA,CAAA,CAGL,IAAM,CACX,IAAM2F,CAAAA,CAAI/F,CAAAA,GAQV,OALI+F,CAAAA,GAAM,YACJF,CAAAA,EAAY,YAAA,CAAaA,CAAU,CAAA,CACnCC,CAAAA,EAAc,aAAaA,CAAY,CAAA,CAAA,CAGzCC,IAAM,OAAA,EAAWR,CAAAA,CACZA,EAAatO,GAAAA,CAAI,KAAY,EAGlC8O,CAAAA,GAAM,OAAA,EAAWT,GAAWG,GAAAA,CACvBnP,CAAAA,CAAUgP,EAAQG,GAAS,CAAC,EAGjCM,CAAAA,GAAM,SAAA,EAAaH,GAAY,EAAKP,CAAAA,CAC/B/O,EAAU+O,CAAAA,EAAW,EAIvB,QAAA,CAAS,aAAA,CAAc,eAAe,CAC/C,CACF,CAAC,CACH,CC5HO,SAASW,EAAAA,CAA6BC,CAAAA,CAAyB,CACpE,IAAMC,CAAAA,CAAID,CAAAA,CAAI,OACd,GAAIC,CAAAA,GAAM,EAAG,OAAO,GAGpB,IAAMC,CAAAA,CAAkB,EAAC,CAEnBC,CAAAA,CAAyB,IAAI,KAAA,CAAMF,CAAC,EAAE,IAAA,CAAK,EAAE,EAE7CG,CAAAA,CAAoB,GAE1B,IAAA,IAAS5B,CAAAA,CAAI,EAAGA,CAAAA,CAAIyB,CAAAA,CAAGzB,IAAK,CAC1B,IAAM3N,EAAQmP,CAAAA,CAAIxB,CAAC,EAGnB,GAAI3N,CAAAA,GAAU,GAAI,SAGlB,IAAIwP,EAAK,CAAA,CACLC,CAAAA,CAAKJ,CAAAA,CAAM,MAAA,CAEf,KAAOG,CAAAA,CAAKC,GAAI,CACd,IAAMC,EAAOF,CAAAA,CAAKC,CAAAA,EAAO,EACrBJ,CAAAA,CAAMK,CAAG,EAAI1P,CAAAA,CACfwP,CAAAA,CAAKE,EAAM,CAAA,CAEXD,CAAAA,CAAKC,EAET,CAEAL,CAAAA,CAAMG,CAAE,CAAA,CAAIxP,CAAAA,CACZuP,EAAQC,CAAE,CAAA,CAAI7B,EAEV6B,CAAAA,CAAK,CAAA,GACPF,EAAa3B,CAAC,CAAA,CAAI4B,EAAQC,CAAAA,CAAK,CAAC,GAEpC,CAGA,IAAMjH,EAAmB,IAAI,KAAA,CAAM8G,EAAM,MAAM,CAAA,CAC3CM,EAAIJ,CAAAA,CAAQF,CAAAA,CAAM,MAAA,CAAS,CAAC,CAAA,CAEhC,IAAA,IAAS1B,EAAI0B,CAAAA,CAAM,MAAA,CAAS,EAAG1B,CAAAA,EAAK,CAAA,CAAGA,IACrCpF,CAAAA,CAAOoF,CAAC,EAAIgC,CAAAA,CACZA,CAAAA,CAAIL,EAAaK,CAAC,CAAA,CAGpB,OAAOpH,CACT,CAiBO,SAASqH,EAAAA,CACdC,CAAAA,CACAC,EACe,CACf,IAAMC,EAAqB,EAAC,CAGtBC,EAAY,IAAI,GAAA,CACtB,QAASrC,CAAAA,CAAI,CAAA,CAAGA,EAAIkC,CAAAA,CAAQ,MAAA,CAAQlC,IAClCqC,CAAAA,CAAU,GAAA,CAAIH,EAAQlC,CAAC,CAAA,CAAGA,CAAC,CAAA,CAI7B,IAAMsC,EAAqB,IAAI,KAAA,CAAMH,EAAQ,MAAM,CAAA,CACnD,QAASnC,CAAAA,CAAI,CAAA,CAAGA,EAAImC,CAAAA,CAAQ,MAAA,CAAQnC,IAClCsC,CAAAA,CAAStC,CAAC,EAAIqC,CAAAA,CAAU,GAAA,CAAIF,EAAQnC,CAAC,CAAC,GAAK,EAAA,CAI7C,IAAMuC,EAAY,IAAI,GAAA,CAAIJ,CAAO,CAAA,CACjC,IAAA,IAASnC,EAAI,CAAA,CAAGA,CAAAA,CAAIkC,EAAQ,MAAA,CAAQlC,CAAAA,EAAAA,CAC7BuC,EAAU,GAAA,CAAIL,CAAAA,CAAQlC,CAAC,CAAC,CAAA,EAC3BoC,EAAI,IAAA,CAAK,CAAE,KAAM,QAAA,CAAU,QAAA,CAAUpC,CAAE,CAAC,CAAA,CAK5C,IAAMwC,EAAM,IAAI,GAAA,CAAIjB,GAA6Be,CAAQ,CAAC,EAG1D,IAAA,IAAStC,CAAAA,CAAI,EAAGA,CAAAA,CAAImC,CAAAA,CAAQ,OAAQnC,CAAAA,EAAAA,CAC9BsC,CAAAA,CAAStC,CAAC,CAAA,GAAM,EAAA,CAElBoC,EAAI,IAAA,CAAK,CAAE,KAAM,QAAA,CAAU,QAAA,CAAUpC,CAAE,CAAC,CAAA,CAC9BwC,EAAI,GAAA,CAAIxC,CAAC,GAEnBoC,CAAAA,CAAI,IAAA,CAAK,CAAE,IAAA,CAAM,MAAA,CAAQ,SAAUpC,CAAAA,CAAG,QAAA,CAAUsC,EAAStC,CAAC,CAAE,CAAC,CAAA,CAKjE,OAAOoC,CACT,CAKO,SAASK,EAAAA,CAASP,EAAoBC,CAAAA,CAI3C,CACA,IAAMC,CAAAA,CAAMH,EAAAA,CAAcC,EAASC,CAAO,CAAA,CACtCO,EAAU,CAAA,CAAGC,CAAAA,CAAQ,EAAGC,CAAAA,CAAU,CAAA,CACtC,QAAWC,CAAAA,IAAMT,CAAAA,CACXS,EAAG,IAAA,GAAS,QAAA,CAAUH,IACjBG,CAAAA,CAAG,IAAA,GAAS,OAAQF,CAAAA,EAAAA,CACxBC,CAAAA,EAAAA,CAEP,OAAO,CAAE,OAAA,CAAAF,EAAS,KAAA,CAAAC,CAAAA,CAAO,QAAAC,CAAQ,CACnC,CClIA,IAAIE,CAAAA,CAAW,MACTC,CAAAA,CAAgB,IAAI,IACtBC,EAAAA,CAAkB,CAAA,CAqBf,SAASC,EAAAA,EAA4B,CAC1CH,CAAAA,CAAW,KACb,CAKO,SAASI,IAA6B,CAC3CJ,CAAAA,CAAW,MACXC,CAAAA,CAAc,KAAA,GAChB,CAKO,SAASI,IAAkC,CAChD,OAAOL,CACT,CAMO,SAASM,GAAYC,CAAAA,CAAgC,CAC1D,GAAI,CAACP,CAAAA,CAAU,OAAO,GAAA,CAEtB,IAAMpF,EAAK,EAAEsF,EAAAA,CACb,OAAAD,CAAAA,CAAc,GAAA,CAAIrF,EAAI,CACpB,EAAA,CAAAA,EACA,SAAA,CAAW,IAAA,CAAK,KAAI,CACpB,UAAA,CAAY4F,IAAa,CACzB,aAAA,CAAeD,CAAAA,EAAiB,IAAA,CAChC,QAAA,CAAU,KACZ,CAAC,CAAA,CAEM3F,CACT,CAKO,SAAS6F,EAAAA,CAAc7F,EAAkB,CAC9C,GAAI,CAACoF,CAAAA,EAAYpF,CAAAA,GAAO,GAAI,OAE5B,IAAM8F,EAAST,CAAAA,CAAc,GAAA,CAAIrF,CAAE,CAAA,CAC/B8F,CAAAA,GACFA,EAAO,QAAA,CAAW,IAAA,CAClBT,EAAc,MAAA,CAAOrF,CAAE,GAE3B,CAKO,SAAS+F,IAAmC,CACjD,OAAO,MAAM,IAAA,CAAKV,CAAAA,CAAc,QAAQ,CAC1C,CAOO,SAASW,EAAAA,CAAcC,EAAc,GAAA,CAAsB,CAChE,GAAI,CAACb,CAAAA,CAAU,OAAO,EAAC,CAEvB,IAAMzJ,EAAM,IAAA,CAAK,GAAA,GACXuK,CAAAA,CAA0B,GAEhC,IAAA,IAAWJ,CAAAA,IAAUT,EAAc,MAAA,EAAO,CACpC,CAACS,CAAAA,CAAO,QAAA,EAAYnK,EAAMmK,CAAAA,CAAO,SAAA,CAAYG,GAC/CC,CAAAA,CAAS,IAAA,CAAK,CACZ,QAAA,CAAUJ,CAAAA,CAAO,GACjB,GAAA,CAAKnK,CAAAA,CAAMmK,EAAO,SAAA,CAClB,aAAA,CAAeA,EAAO,aAAA,CACtB,UAAA,CAAYA,EAAO,UACrB,CAAC,EAIL,OAAOI,CACT,CAKO,SAASC,EAAAA,CAAYF,CAAAA,CAAc,GAAA,CAAa,CACrD,IAAMG,EAAQJ,EAAAA,CAAcC,CAAW,EACvC,GAAIG,CAAAA,CAAM,SAAW,CAAA,CAErB,CAAA,OAAA,CAAQ,KACN,CAAA,UAAA,EAAaA,CAAAA,CAAM,MAAM,CAAA,mCAAA,CAC3B,CAAA,CACA,QAAWC,CAAAA,IAAQD,CAAAA,CAAO,CACxB,IAAM9P,CAAAA,CAAY+P,EAAK,aAAA,CAAgB,CAAA,IAAA,EAAOA,EAAK,aAAa,CAAA,CAAA,CAAK,GACrE,OAAA,CAAQ,IAAA,CACN,aAAaA,CAAAA,CAAK,QAAQ,GAAG/P,CAAS,CAAA,mBAAA,EAAA,CAAkB+P,EAAK,GAAA,CAAM,GAAA,EAAM,QAAQ,CAAC,CAAC,GACrF,CAAA,CACIA,CAAAA,CAAK,UAAA,EACP,OAAA,CAAQ,IAAA,CAAK,CAAA;AAAA,EAAoBA,CAAAA,CAAK,UAAU,CAAA,CAAE,EAEtD,EACF,CAKO,SAASC,EAAAA,EAId,CACA,OAAO,CACL,OAAA,CAASlB,CAAAA,CACT,WAAA,CAAaC,EAAc,IAAA,CAC3B,YAAA,CAAcC,EAChB,CACF,CAaA,SAASM,EAAAA,EAA8B,CACrC,GAAI,CAEF,IAAMW,CAAAA,CADM,IAAI,OAAM,CACJ,KAAA,CAClB,OAAKA,CAAAA,CAESA,EAAM,KAAA,CAAM;AAAA,CAAI,CAAA,CACjB,KAAA,CAAM,CAAA,CAAG,CAAC,EAAE,IAAA,CAAK;AAAA,CAAI,CAAA,CAHf,IAIrB,CAAA,KAAQ,CACN,OAAO,IACT,CACF,CC5IA,IAAMC,EAAAA,CAAqB,CACzB,SAAA,CAAW,yBAA0B,uBAAA,CACrC,wBAAA,CAA0B,0BAAA,CAC1B,iCAAA,CAAmC,mBACrC,CAAA,CAAE,IAAA,CAAK,IAAI,CAAA,CAeJ,SAASC,EAAAA,CACd1Q,CAAAA,CACAM,CAAAA,CAA4B,EAAC,CAClB,CACX,GAAM,CACJ,YAAA,CAAAqQ,CAAAA,CACA,WAAA,CAAAC,CAAAA,CAAc,IAAA,CACd,iBAAA,CAAAC,CAAAA,CAAoB,IAAA,CACpB,iBAAA,CAAAC,CAAAA,CAAoB,KAAA,CACpB,YAAA,CAAAC,CACF,CAAA,CAAIzQ,CAAAA,CAEEuI,EAAS5J,CAAAA,CAAO,KAAK,CAAA,CACvB+R,CAAAA,CAAwC,IAAA,CAE5C,SAASC,GAAAA,EAAmC,CAC1C,OAAO,OAAOjR,CAAAA,EAAc,UAAA,CAAaA,CAAAA,EAAU,CAAIA,CACzD,CAEA,SAASkR,CAAAA,EAAsC,CAC7C,IAAM1P,CAAAA,CAAKyP,GAAAA,EAAa,CACxB,OAAKzP,CAAAA,CACE,KAAA,CAAM,IAAA,CAAKA,CAAAA,CAAG,gBAAA,CAA8BiP,EAAkB,CAAC,CAAA,CADtD,EAElB,CAEA,SAASU,CAAAA,CAAczM,CAAAA,CAAwB,CAC7C,GAAIA,CAAAA,CAAE,GAAA,GAAQ,QAAA,EAAYmM,CAAAA,CAAmB,CAC3CnM,CAAAA,CAAE,cAAA,EAAe,CACjB0M,CAAAA,EAAW,CACXL,KAAe,CACf,MACF,CAEA,GAAIrM,CAAAA,CAAE,GAAA,GAAQ,KAAA,CAAO,OAErB,IAAM2M,CAAAA,CAAYH,CAAAA,EAAqB,CACvC,GAAIG,CAAAA,CAAU,MAAA,GAAW,CAAA,CAAG,OAE5B,IAAMC,CAAAA,CAAQD,CAAAA,CAAU,CAAC,CAAA,CACnBE,CAAAA,CAAOF,CAAAA,CAAUA,CAAAA,CAAU,OAAS,CAAC,CAAA,CAEvC3M,CAAAA,CAAE,QAAA,CAEA,QAAA,CAAS,aAAA,GAAkB4M,CAAAA,GAC7B5M,CAAAA,CAAE,gBAAe,CACjB6M,CAAAA,CAAK,KAAA,EAAM,CAAA,CAIT,QAAA,CAAS,aAAA,GAAkBA,CAAAA,GAC7B7M,CAAAA,CAAE,cAAA,EAAe,CACjB4M,CAAAA,CAAM,KAAA,EAAM,EAGlB,CAEA,SAASE,CAAAA,CAAe9M,EAAqB,CAC3C,GAAI,CAACmE,CAAAA,EAAO,EAAKiI,CAAAA,CAAmB,OACpC,IAAMtP,CAAAA,CAAKyP,GAAAA,EAAa,CACxB,GAAI,CAACzP,CAAAA,CAAI,OAET,IAAMiQ,EAAgB/M,CAAAA,CAAE,aAAA,CACxB,GAAI+M,CAAAA,EAAiB,CAACjQ,CAAAA,CAAG,QAAA,CAASiQ,CAAa,CAAA,CAAG,CAEhD,IAAMJ,CAAAA,CAAYH,CAAAA,EAAqB,CACnCG,CAAAA,CAAU,MAAA,CAAS,GACrBA,CAAAA,CAAU,CAAC,CAAA,CAAE,KAAA,GAEjB,CACF,CAEA,SAASK,GAAiB,CACxB,GAAI7I,CAAAA,EAAO,CAAG,OACdA,CAAAA,CAAO,GAAA,CAAI,IAAI,EAEfmI,CAAAA,CAAoB,QAAA,CAAS,aAAA,CAE7B,QAAA,CAAS,gBAAA,CAAiB,SAAA,CAAWG,CAAAA,CAAe,IAAI,CAAA,CAExD,IAAM3P,CAAAA,CAAKyP,GAAAA,EAAa,CACpBzP,CAAAA,EACFA,CAAAA,CAAG,gBAAA,CAAiB,WAAYgQ,CAAc,CAAA,CAIhD,qBAAA,CAAsB,IAAM,CAC1B,GAAIb,CAAAA,CAAAA,CACa,OAAOA,CAAAA,EAAiB,QAAA,CACnCM,GAAAA,EAAa,EAAG,aAAA,CAA2BN,CAAY,CAAA,CACvDA,CAAAA,GACI,OAAM,CAAA,KACT,CACL,IAAMU,CAAAA,CAAYH,CAAAA,EAAqB,CACnCG,CAAAA,CAAU,MAAA,CAAS,CAAA,EAAGA,CAAAA,CAAU,CAAC,CAAA,CAAE,KAAA,GACzC,CACF,CAAC,EACH,CAEA,SAASD,CAAAA,EAAmB,CAC1B,GAAI,CAACvI,CAAAA,EAAO,CAAG,OACfA,CAAAA,CAAO,GAAA,CAAI,KAAK,CAAA,CAEhB,QAAA,CAAS,mBAAA,CAAoB,SAAA,CAAWsI,CAAAA,CAAe,IAAI,CAAA,CAE3D,IAAM3P,CAAAA,CAAKyP,GAAAA,EAAa,CACpBzP,CAAAA,EACFA,CAAAA,CAAG,mBAAA,CAAoB,UAAA,CAAYgQ,CAAc,CAAA,CAG/CZ,CAAAA,EAAeI,CAAAA,GACjBA,CAAAA,CAAkB,KAAA,EAAM,CACxBA,EAAoB,IAAA,EAExB,CAEA,OAAO,CACL,QAAA,CAAAU,CAAAA,CACA,UAAA,CAAAN,CAAAA,CACA,MAAA,CAAQ,IAAMvI,CAAAA,EAChB,CACF,CAQA,IAAI8I,CAAAA,CAAqC,KAEzC,SAASC,EAAAA,EAAoC,CAC3C,GAAID,CAAAA,EAAkB,QAAA,CAAS,IAAA,CAAK,QAAA,CAASA,CAAc,CAAA,CACzD,OAAOA,CAAAA,CAGT,IAAMnQ,CAAAA,CAAK,QAAA,CAAS,aAAA,CAAc,KAAK,CAAA,CACvC,OAAAA,CAAAA,CAAG,YAAA,CAAa,MAAA,CAAQ,QAAQ,CAAA,CAChCA,CAAAA,CAAG,aAAa,WAAA,CAAa,QAAQ,CAAA,CACrCA,CAAAA,CAAG,YAAA,CAAa,aAAA,CAAe,MAAM,CAAA,CACrCA,EAAG,KAAA,CAAM,OAAA,CAAU,CACjB,oBAAA,CACA,YAAA,CACA,aAAA,CACA,YAAA,CACA,cAAA,CACA,kBAAA,CACA,qBAAA,CACA,qBAAA,CACA,WACF,CAAA,CAAE,IAAA,CAAK,IAAI,CAAA,CAEX,SAAS,IAAA,CAAK,WAAA,CAAYA,CAAE,CAAA,CAC5BmQ,CAAAA,CAAiBnQ,CAAAA,CACVA,CACT,CAWO,SAASqQ,EAAAA,EAAgE,CAC9E,OAAO,CAAC9H,CAAAA,CAAiB+H,CAAAA,CAAuB,QAAA,GAAa,CAC3D,GAAI,OAAO,QAAA,CAAa,GAAA,CAAa,OAErC,IAAMC,CAAAA,CAASH,EAAAA,EAAqB,CACpCG,CAAAA,CAAO,YAAA,CAAa,WAAA,CAAaD,CAAU,CAAA,CAG3CC,CAAAA,CAAO,WAAA,CAAc,GACrB,qBAAA,CAAsB,IAAM,CAC1BA,CAAAA,CAAO,WAAA,CAAchI,EACvB,CAAC,EACH,CACF,CA8CO,SAASiI,EAAAA,EAA+B,CAC7C,IAAMC,CAAAA,CAAyB,EAAC,CAC1BC,EAAe,IAAI,GAAA,CACrBC,CAAAA,CAAY,KAAA,CAEhB,SAAShB,CAAAA,CAAczM,CAAAA,CAAwB,CAC7C,IAAA,IAAW0N,CAAAA,IAAWH,CAAAA,CACpB,GAAI,EAAAG,CAAAA,CAAQ,KAAA,EAAS,CAACF,EAAa,GAAA,CAAIE,CAAAA,CAAQ,KAAK,CAAA,CAAA,EAChDC,EAAAA,CAAW3N,CAAAA,CAAG0N,CAAAA,CAAQ,GAAG,CAAA,CAAG,CAC1BA,CAAAA,CAAQ,cAAA,GAAmB,KAAA,EAC7B1N,CAAAA,CAAE,cAAA,EAAe,CAEnB0N,EAAQ,OAAA,CAAQ1N,CAAC,CAAA,CACjB,MACF,CAEJ,CAEA,SAAS4N,CAAAA,EAAuB,CAC1BH,CAAAA,EACA,OAAO,QAAA,CAAa,GAAA,GACxB,QAAA,CAAS,gBAAA,CAAiB,SAAA,CAAWhB,CAAa,CAAA,CAClDgB,CAAAA,CAAY,IAAA,EACd,CAEA,SAASI,CAAAA,CACPhP,CAAAA,CACAe,CAAAA,CACAhE,EACY,CACZ,IAAM8R,CAAAA,CAAsB,CAC1B,GAAA,CAAA7O,CAAAA,CACA,OAAA,CAAAe,CAAAA,CACA,MAAOhE,CAAAA,EAAS,KAAA,CAChB,WAAA,CAAaA,CAAAA,EAAS,WAAA,EAAe,EAAA,CACrC,cAAA,CAAgBA,CAAAA,EAAS,cAC3B,CAAA,CACA,OAAA2R,CAAAA,CAAS,IAAA,CAAKG,CAAO,CAAA,CACrBE,CAAAA,GAEO,IAAM,CACX,IAAME,CAAAA,CAAMP,CAAAA,CAAS,OAAA,CAAQG,CAAO,CAAA,CAChCI,CAAAA,GAAQ,EAAA,EAAIP,CAAAA,CAAS,MAAA,CAAOO,CAAAA,CAAK,CAAC,EACxC,CACF,CAEA,OAAO,CACL,IAAA,CAAAD,CAAAA,CACA,WAAA,CAAYE,CAAAA,CAAe,CAAEP,CAAAA,CAAa,GAAA,CAAIO,CAAK,EAAG,CAAA,CACtD,YAAA,CAAaA,CAAAA,CAAe,CAAEP,CAAAA,CAAa,OAAOO,CAAK,EAAG,CAAA,CAC1D,WAAA,EAAc,CACZ,OAAOR,CAAAA,CAAS,GAAA,CAAKjL,IAAO,CAC1B,GAAA,CAAK0L,EAAAA,CAAe1L,CAAAA,CAAE,GAAG,CAAA,CACzB,WAAA,CAAaA,CAAAA,CAAE,aAAe,EAAA,CAC9B,KAAA,CAAOA,CAAAA,CAAE,KACX,CAAA,CAAE,CACJ,CAAA,CACA,OAAA,EAAU,CACRiL,CAAAA,CAAS,MAAA,CAAS,CAAA,CACd,OAAO,QAAA,CAAa,GAAA,EACtB,QAAA,CAAS,oBAAoB,SAAA,CAAWd,CAAa,CAAA,CAEvDgB,CAAAA,CAAY,MACd,CACF,CACF,CAIA,SAASE,EAAAA,CAAW,CAAA,CAAkBM,CAAAA,CAAwB,CAC5D,IAAMC,CAAAA,CAAQD,CAAAA,CAAM,aAAY,CAAE,KAAA,CAAM,GAAG,CAAA,CACrCpP,CAAAA,CAAMqP,CAAAA,CAAM,GAAA,EAAI,CAEhBC,CAAAA,CAAWD,CAAAA,CAAM,QAAA,CAAS,KAAK,CAAA,CAC/BE,CAAAA,CAAYF,CAAAA,CAAM,QAAA,CAAS,MAAM,CAAA,CACjCG,CAAAA,CAAaH,CAAAA,CAAM,QAAA,CAAS,OAAO,CAAA,CACnCI,CAAAA,CAAWJ,CAAAA,CAAM,QAAA,CAAS,KAAK,CAAA,CAI/BK,CAAAA,CADQ,OAAO,SAAA,CAAc,GAAA,EAAe,SAAA,CAAU,UAAU,QAAA,CAAS,KAAK,CAAA,CACzD,CAAA,CAAE,OAAA,CAAU,CAAA,CAAE,OAAA,CAKzC,OAHIJ,CAAAA,EAAY,CAACI,CAAAA,EACbH,CAAAA,EAAa,CAAC,CAAA,CAAE,OAAA,EAChBC,CAAAA,EAAc,CAAC,CAAA,CAAE,QAAA,EACjBC,CAAAA,EAAY,CAAC,CAAA,CAAE,MAAA,CAAe,KAAA,CAE3B,CAAA,CAAE,GAAA,CAAI,WAAA,EAAY,GAAMzP,CAAAA,EAAO,CAAA,CAAE,IAAA,CAAK,WAAA,EAAY,GAAMA,CACjE,CAEA,SAASmP,EAAAA,CAAeC,CAAAA,CAAuB,CAC7C,IAAMO,CAAAA,CAAQ,OAAO,SAAA,CAAc,GAAA,EAAe,SAAA,CAAU,QAAA,EAAU,QAAA,CAAS,KAAK,CAAA,CACpF,OAAOP,EACJ,OAAA,CAAQ,OAAA,CAASO,CAAAA,CAAQ,QAAA,CAAM,MAAM,CAAA,CACrC,OAAA,CAAQ,SAAA,CAAWA,EAAQ,QAAA,CAAM,OAAO,CAAA,CACxC,OAAA,CAAQ,OAAA,CAASA,CAAAA,CAAQ,QAAA,CAAM,KAAK,EACpC,OAAA,CAAQ,KAAA,CAAOA,CAAAA,CAAQ,EAAA,CAAK,GAAG,CACpC,CC/TO,IAAMC,EAAAA,CAAQrU,GAAAA,CAA6BC,CAAAA,EAAQ,CACxD,IAAMqU,CAAAA,CAASnU,CAAAA,CAAO,KAAK,EACrBoU,CAAAA,CAAUpU,CAAAA,CAAO,KAAK,CAAA,CAE5B,OAAO,IAAM,CACX,GAAM,CACJ,GAAA,CAAAqU,CAAAA,CACA,GAAA,CAAAC,CAAAA,CACA,KAAA,CAAAtM,CAAAA,CACA,MAAA,CAAAwB,EACA,OAAA,CAAA+K,CAAAA,CAAU,MAAA,CACV,MAAA,CAAAC,CAAAA,CACA,KAAA,CAAAC,CAAAA,CACA,WAAA,CAAAC,CAAAA,CACA,WAAA,CAAAC,CAAAA,CACA,KAAA,CAAOC,CAAAA,CACP,WAAA,CAAAC,CAAAA,CACA,MAAA,CAAAC,EACA,OAAA,CAASC,CACX,CAAA,CAAIjV,CAAAA,CAAI,KAAA,CAGFkV,CAAAA,CAAU,QAAA,CAAS,aAAA,CAAc,KAAK,CAAA,CAQ5C,GAPAA,CAAAA,CAAQ,KAAA,CAAM,QAAA,CAAW,UAAA,CACzBA,CAAAA,CAAQ,KAAA,CAAM,QAAU,cAAA,CACxBA,CAAAA,CAAQ,KAAA,CAAM,QAAA,CAAW,QAAA,CACrBhN,CAAAA,GAAOgN,CAAAA,CAAQ,KAAA,CAAM,KAAA,CAAQ,CAAA,EAAGhN,CAAK,CAAA,EAAA,CAAA,CAAA,CACrCwB,CAAAA,GAAQwL,CAAAA,CAAQ,KAAA,CAAM,MAAA,CAAS,GAAGxL,CAAM,CAAA,EAAA,CAAA,CAAA,CAGxCkL,CAAAA,GAAgB,MAAA,EAAUC,CAAAA,EAAe,CAACR,CAAAA,EAAO,CAAG,CACtD,IAAMc,CAAAA,CAAO,QAAA,CAAS,aAAA,CAAc,KAAK,CAAA,CACzCA,CAAAA,CAAK,IAAMN,CAAAA,CACXM,CAAAA,CAAK,GAAA,CAAM,EAAA,CACXA,CAAAA,CAAK,YAAA,CAAa,aAAA,CAAe,MAAM,CAAA,CACvCA,CAAAA,CAAK,KAAA,CAAM,OAAA,CAAU,2GAAA,CACrBD,CAAAA,CAAQ,WAAA,CAAYC,CAAI,EAC1B,CAGA,IAAMC,CAAAA,CAAM,QAAA,CAAS,aAAA,CAAc,KAAK,CAAA,CA+BxC,GA9BAA,EAAI,GAAA,CAAMZ,CAAAA,CACVY,CAAAA,CAAI,OAAA,CAAUX,CAAAA,CAEVH,CAAAA,EAAQ,EAAKS,CAAAA,CACfK,EAAI,GAAA,CAAML,CAAAA,CAEVK,CAAAA,CAAI,GAAA,CAAMb,CAAAA,CAGRG,CAAAA,GAAQU,CAAAA,CAAI,MAAA,CAASV,CAAAA,CAAAA,CACrBC,CAAAA,GAAOS,CAAAA,CAAI,KAAA,CAAQT,CAAAA,CAAAA,CACnBzM,CAAAA,GAAOkN,CAAAA,CAAI,KAAA,CAAQlN,GACnBwB,CAAAA,GAAQ0L,CAAAA,CAAI,MAAA,CAAS1L,CAAAA,CAAAA,CACrBoL,CAAAA,GAAWM,CAAAA,CAAI,SAAA,CAAYN,CAAAA,CAAAA,CAE/BM,CAAAA,CAAI,KAAA,CAAM,OAAA,CAAU,OAAA,CACpBA,CAAAA,CAAI,KAAA,CAAM,KAAA,CAAQ,MAAA,CAClBA,EAAI,KAAA,CAAM,MAAA,CAAS,MAAA,CAEnBA,CAAAA,CAAI,gBAAA,CAAiB,MAAA,CAAQ,IAAM,CACjCf,CAAAA,CAAO,GAAA,CAAI,IAAI,CAAA,CACfW,CAAAA,KACF,CAAC,CAAA,CAEDI,EAAI,gBAAA,CAAiB,OAAA,CAAUzP,CAAAA,EAAM,CACnC2O,CAAAA,CAAQ,GAAA,CAAI,IAAI,CAAA,CAChBW,IAAYtP,CAAC,EACf,CAAC,CAAA,CAGG8O,CAAAA,GAAY,MAAA,EAAU,OAAO,oBAAA,CAAyB,IAAa,CACrEW,CAAAA,CAAI,YAAA,CAAa,UAAA,CAAYA,CAAAA,CAAI,GAAG,CAAA,CACpC,IAAMC,CAAAA,CAAYD,CAAAA,CAAI,GAAA,CACtBA,CAAAA,CAAI,eAAA,CAAgB,KAAK,CAAA,CAEzB,IAAMnT,EAAW,IAAI,oBAAA,CAClBC,CAAAA,EAAY,CACPA,CAAAA,CAAQ,CAAC,CAAA,CAAE,cAAA,GACbkT,CAAAA,CAAI,GAAA,CAAMC,CAAAA,CACVpT,CAAAA,CAAS,UAAA,EAAW,EAExB,CAAA,CACA,CAAE,WAAY,OAAQ,CACxB,CAAA,CAGA,qBAAA,CAAsB,IAAM,CACtBmT,CAAAA,CAAI,aAAA,CACNnT,CAAAA,CAAS,OAAA,CAAQmT,CAAG,CAAA,CAGpBA,CAAAA,CAAI,GAAA,CAAMC,EAEd,CAAC,EACH,CAEA,OAAAH,CAAAA,CAAQ,WAAA,CAAYE,CAAG,CAAA,CAChBF,CACT,CACF,CAAC,ECxGM,SAASI,EAAAA,CAAkB/T,CAAAA,CAAgD,CAChF,GAAM,CAAE,UAAA,CAAAgU,EAAY,OAAA,CAAAC,CAAAA,CAAS,UAAA,CAAAzT,CAAAA,CAAa,OAAA,CAAS,SAAA,CAAA0T,CAAAA,CAAY,CAAE,CAAA,CAAIlU,CAAAA,CAE/DkT,CAAAA,CAAUvU,CAAAA,CAAO,KAAK,CAAA,CACtBwV,CAAAA,CAAOxV,CAAAA,CAAO,KAAK,CAAA,CACrB+B,CAAAA,CAAwC,IAAA,CACxC0T,CAAAA,CAAiC,IAAA,CACjC3T,GAAAA,CAAW,KAAA,CAEf,eAAe4T,CAAAA,EAAiC,CAC9C,GAAI,EAAAnB,CAAAA,EAAQ,EAAKiB,CAAAA,EAAK,EAAK1T,KAC3B,CAAA,GAAI,CAACwT,CAAAA,EAAQ,CAAG,CACdE,CAAAA,CAAK,GAAA,CAAI,IAAI,CAAA,CACb,MACF,CAEAjB,CAAAA,CAAQ,GAAA,CAAI,IAAI,CAAA,CAChB,GAAI,CACF,MAAMc,CAAAA,EAAW,CACZC,CAAAA,EAAQ,EACXE,CAAAA,CAAK,GAAA,CAAI,CAAA,CAAI,EAEjB,CAAA,OAAE,CACAjB,CAAAA,CAAQ,GAAA,CAAI,KAAK,EACnB,CAAA,CACF,CAEA,SAASoB,CAAAA,CAAepT,CAAAA,CAAuB,CACzC,OAAO,oBAAA,CAAyB,GAAA,GAEpCR,CAAAA,CAAW,IAAI,oBAAA,CACZC,CAAAA,EAAY,CACPA,CAAAA,CAAQ,CAAC,CAAA,EAAG,cAAA,EACd0T,CAAAA,GAEJ,CAAA,CACA,CAAE,UAAA,CAAA7T,CAAAA,CAAY,SAAA,CAAA0T,CAAU,CAC1B,CAAA,CAEAxT,CAAAA,CAAS,OAAA,CAAQQ,CAAE,CAAA,EACrB,CAEA,SAASqT,CAAAA,EAAwB,CAC/B,OAAIH,CAAAA,GAEJA,CAAAA,CAAa,QAAA,CAAS,aAAA,CAAc,KAAK,CAAA,CACzCA,CAAAA,CAAW,YAAA,CAAa,qBAAA,CAAuB,EAAE,CAAA,CACjDA,CAAAA,CAAW,KAAA,CAAM,MAAA,CAAS,KAAA,CAC1BA,CAAAA,CAAW,aAAa,aAAA,CAAe,MAAM,CAAA,CAG7C,qBAAA,CAAsB,IAAM,CACtBA,CAAAA,EAAc,CAAC3T,KACjB6T,CAAAA,CAAeF,CAAU,EAE7B,CAAC,CAAA,CAEMA,CAAAA,CACT,CAEA,OAAO,CACL,QAAA,CAAAG,CAAAA,CACA,OAAA,CAAS,IAAMrB,CAAAA,EAAQ,CACvB,IAAA,CAAM,IAAMiB,CAAAA,EAAK,CACjB,KAAA,EAAQ,CACNA,CAAAA,CAAK,GAAA,CAAI,KAAK,CAAA,CACdjB,EAAQ,GAAA,CAAI,KAAK,EACnB,CAAA,CACA,OAAA,EAAU,CACRzS,GAAAA,CAAW,IAAA,CACXC,CAAAA,EAAU,UAAA,EAAW,CACrBA,CAAAA,CAAW,KACb,CACF,CACF,CCxGO,SAAS8T,EAAAA,CAAAA,GAAMC,CAAAA,CAA2B,CAC/C,IAAMtT,CAAAA,CAAoB,EAAC,CAE3B,IAAA,IAAWuT,CAAAA,IAASD,CAAAA,CAClB,GAAKC,CAAAA,CAAAA,CAEL,GAAI,OAAOA,CAAAA,EAAU,QAAA,CACnBvT,EAAQ,IAAA,CAAKuT,CAAK,CAAA,CAAA,KAAA,GACT,KAAA,CAAM,OAAA,CAAQA,CAAK,CAAA,CAAG,CAC/B,IAAMC,CAAAA,CAASH,EAAAA,CAAG,GAAGE,CAAK,CAAA,CACtBC,CAAAA,EAAQxT,CAAAA,CAAQ,KAAKwT,CAAM,EACjC,CAAA,KAAA,GAAW,OAAOD,CAAAA,EAAU,QAAA,CAC1B,IAAA,GAAW,CAACzR,CAAAA,CAAK3E,CAAK,CAAA,GAAK,MAAA,CAAO,OAAA,CAAQoW,CAAK,CAAA,CACzCpW,CAAAA,EAAO6C,EAAQ,IAAA,CAAK8B,CAAG,EAAA,CAKjC,OAAO9B,CAAAA,CAAQ,IAAA,CAAK,GAAG,CACzB,CAgBO,SAASyT,EAAAA,CAAIC,CAAAA,CAA+B,CACjD,IAAMvC,CAAAA,CAAkB,GAExB,IAAA,GAAW,CAACrP,CAAAA,CAAK3E,CAAK,CAAA,GAAK,MAAA,CAAO,OAAA,CAAQuW,CAAM,CAAA,CAAG,CACjD,GAAIvW,CAAAA,EAAS,IAAA,CAAM,SAEnB,IAAMwW,CAAAA,CAAOC,GAAa9R,CAAG,CAAA,CACvB+R,CAAAA,CAAM,OAAO1W,CAAAA,EAAU,QAAA,EAAY,CAAC2W,EAAAA,CAAe,IAAIhS,CAAG,CAAA,CAC5D,CAAA,EAAG3E,CAAK,CAAA,EAAA,CAAA,CACR,MAAA,CAAOA,CAAK,CAAA,CAEhBgU,EAAM,IAAA,CAAK,CAAA,EAAGwC,CAAI,CAAA,EAAA,EAAKE,CAAG,CAAA,CAAE,EAC9B,CAEA,OAAO1C,CAAAA,CAAM,IAAA,CAAK,IAAI,CACxB,CASO,SAAS4C,EAAAA,CAAYhU,EAAiB2T,CAAAA,CAA6B,CACxE,IAAA,GAAW,CAAC5R,CAAAA,CAAK3E,CAAK,CAAA,GAAK,MAAA,CAAO,OAAA,CAAQuW,CAAM,CAAA,CAC9C,GAAIvW,CAAAA,EAAS,IAAA,CACX4C,CAAAA,CAAG,KAAA,CAAM,eAAe6T,EAAAA,CAAa9R,CAAG,CAAC,CAAA,CAAA,KACpC,CACL,IAAM+R,CAAAA,CAAM,OAAO1W,CAAAA,EAAU,QAAA,EAAY,CAAC2W,EAAAA,CAAe,GAAA,CAAIhS,CAAG,CAAA,CAC5D,CAAA,EAAG3E,CAAK,CAAA,EAAA,CAAA,CACR,MAAA,CAAOA,CAAK,CAAA,CAChB4C,CAAAA,CAAG,KAAA,CAAM,WAAA,CAAY6T,EAAAA,CAAa9R,CAAG,CAAA,CAAG+R,CAAG,EAC7C,CAEJ,CAIA,SAASD,EAAAA,CAAaI,CAAAA,CAAqB,CACzC,OAAOA,CAAAA,CAAI,OAAA,CAAQ,QAAA,CAAWC,CAAAA,EAAM,CAAA,CAAA,EAAIA,CAAAA,CAAE,WAAA,EAAa,CAAA,CAAE,CAC3D,CAGA,IAAMH,EAAAA,CAAiB,IAAI,GAAA,CAAI,CAC7B,yBAAA,CAA2B,SAAA,CAAW,cAAA,CAAgB,iBAAA,CACtD,aAAA,CAAe,aAAA,CAAe,MAAA,CAAQ,UAAA,CAAY,cAAA,CAClD,YAAA,CAAc,cAAA,CAAgB,WAAA,CAAa,YAAA,CAAc,YAAA,CACzD,SAAA,CAAW,WAAA,CAAa,aAAc,SAAA,CAAW,OAAA,CAAS,SAAA,CAC1D,SAAA,CAAW,QAAA,CAAU,QAAA,CAAU,MACjC,CAAC,CAAA,CCJM,SAASI,EAAAA,CACdrV,CAAAA,CACc,CACd,GAAM,CAAE,IAAA,CAAAsV,EAAM,OAAA,CAAAC,CAAAA,CAAS,QAAA,CAAAC,CAAAA,CAAW,CAAA,CAAG,WAAA,CAAAC,CAAY,CAAA,CAAIzV,EAE/C0V,CAAAA,CAAY/W,CAAAA,CAAkB8W,CAAAA,EAAe,CAAE,MAAA,CAAQ,IAAA,CAAM,SAAA,CAAW,IAAK,CAAC,CAAA,CAC9EE,CAAAA,CAAahX,CAAAA,CAAO,EAAE,CAAA,CACtBiX,CAAAA,CAAOjX,CAAAA,CAAO,CAAC,CAAA,CACfkX,CAAAA,CAAmBlX,CAAAA,CACvB,MAAA,CAAO,WAAA,CAAY4W,CAAAA,CAAQ,GAAA,CAAKnT,CAAAA,EAAM,CAACA,CAAAA,CAAE,GAAA,CAAKA,CAAAA,CAAE,OAAA,GAAY,KAAK,CAAC,CAAC,CACrE,CAAA,CAGM0T,GAAAA,CAAiB/K,CAAAA,CAAS,IAAM,CACpC,IAAMgL,CAAAA,CAAMF,CAAAA,GACZ,OAAON,CAAAA,CAAQ,MAAA,CAAQnT,CAAAA,EAAM2T,CAAAA,CAAI3T,CAAAA,CAAE,GAAG,CAAC,CACzC,CAAC,CAAA,CAGK4T,CAAAA,CAAejL,CAAAA,CAAS,IAAM,CAClC,IAAMrD,EAAOiO,CAAAA,EAAW,CAAE,WAAA,EAAY,CAAE,IAAA,EAAK,CAC7C,GAAI,CAACjO,EAAM,OAAO4N,CAAAA,EAAK,CAGvB,IAAMW,CAAAA,CAAiBV,CAAAA,CAAQ,MAAA,CAAQnT,CAAAA,EAAMA,EAAE,UAAU,CAAA,CACnD8T,CAAAA,CAAeD,CAAAA,CAAe,MAAA,CAAS,CAAA,CAAIA,CAAAA,CAAiBV,CAAAA,CAElE,OAAOD,CAAAA,EAAK,CAAE,MAAA,CAAQ7I,CAAAA,EACbyJ,CAAAA,CAAa,IAAA,CAAMC,CAAAA,EAAQ,CAChC,IAAM7X,CAAAA,CAAQ8X,EAAAA,CAAe3J,CAAAA,CAAK0J,CAAAA,CAAI,GAAG,CAAA,CACzC,OAAO,MAAA,CAAO7X,CAAK,CAAA,CAAE,WAAA,EAAY,CAAE,QAAA,CAASoJ,CAAI,CAClD,CAAC,CACF,CACH,CAAC,CAAA,CAGK2O,CAAAA,CAAatL,CAAAA,CAAS,IAAM,CAChC,GAAM,CAAE,MAAA,CAAAuL,CAAAA,CAAQ,SAAA,CAAAC,CAAU,CAAA,CAAIb,CAAAA,GACxBc,CAAAA,CAAO,CAAC,GAAGR,CAAAA,EAAc,CAAA,CAE/B,GAAI,CAACM,GAAU,CAACC,CAAAA,CAAW,OAAOC,CAAAA,CAElC,IAAMC,CAAAA,CAASlB,CAAAA,CAAQ,IAAA,CAAMnT,GAAMA,CAAAA,CAAE,GAAA,GAAQkU,CAAM,CAAA,CACnD,OAAKG,CAAAA,CAEED,CAAAA,CAAK,IAAA,CAAK,CAAC/P,CAAAA,CAAGC,CAAAA,GAAM,CACzB,GAAI+P,CAAAA,CAAO,OAAA,CAAS,CAClB,IAAM5P,EAAAA,CAAS4P,CAAAA,CAAO,OAAA,CAAQhQ,CAAAA,CAAGC,CAAC,CAAA,CAClC,OAAO6P,CAAAA,GAAc,MAAA,CAAS,CAAC1P,EAAAA,CAASA,EAC1C,CAEA,IAAM6P,EAAAA,CAAON,EAAAA,CAAe3P,EAAG6P,CAAM,CAAA,CAC/BK,EAAAA,CAAOP,EAAAA,CAAe1P,CAAAA,CAAG4P,CAAM,CAAA,CAC/BzP,EAAAA,CAAS+P,EAAAA,CAAeF,EAAAA,CAAMC,EAAI,CAAA,CACxC,OAAOJ,CAAAA,GAAc,MAAA,CAAS,CAAC1P,GAASA,EAC1C,CAAC,CAAA,CAZmB2P,CAatB,CAAC,CAAA,CAGKK,CAAAA,CAAY9L,CAAAA,CAAS,IAAMiL,CAAAA,EAAa,CAAE,MAAM,CAAA,CAGhDc,CAAAA,CAAa/L,CAAAA,CAAS,IACtByK,CAAAA,EAAY,EAAU,CAAA,CACnB,IAAA,CAAK,GAAA,CAAI,CAAA,CAAG,IAAA,CAAK,IAAA,CAAKqB,CAAAA,EAAU,CAAIrB,CAAQ,CAAC,CACrD,CAAA,CAGKuB,CAAAA,CAAgBhM,CAAAA,CAAS,IAAM,CACnC,IAAMiM,CAAAA,CAAMX,CAAAA,EAAW,CACvB,GAAIb,CAAAA,EAAY,CAAA,CAAG,OAAOwB,CAAAA,CAC1B,IAAMtS,CAAAA,CAAAA,CAASkR,CAAAA,EAAK,CAAI,CAAA,EAAKJ,CAAAA,CAC7B,OAAOwB,CAAAA,CAAI,MAAMtS,CAAAA,CAAOA,CAAAA,CAAQ8Q,CAAQ,CAC1C,CAAC,CAAA,CAID,SAASyB,CAAAA,CAAKC,CAAAA,CAAyB,CACrC,IAAMlR,CAAAA,CAAU0P,CAAAA,EAAU,CACtB1P,CAAAA,CAAQ,MAAA,GAAWkR,EAEjBlR,CAAAA,CAAQ,SAAA,GAAc,KAAA,CACxB0P,CAAAA,CAAU,GAAA,CAAI,CAAE,MAAA,CAAQwB,CAAAA,CAAW,UAAW,MAAO,CAAC,CAAA,CAC7ClR,CAAAA,CAAQ,SAAA,GAAc,MAAA,CAC/B0P,CAAAA,CAAU,GAAA,CAAI,CAAE,MAAA,CAAQ,IAAA,CAAM,SAAA,CAAW,IAAK,CAAC,CAAA,CAE/CA,CAAAA,CAAU,GAAA,CAAI,CAAE,MAAA,CAAQwB,CAAAA,CAAW,SAAA,CAAW,KAAM,CAAC,CAAA,CAGvDxB,CAAAA,CAAU,IAAI,CAAE,MAAA,CAAQwB,CAAAA,CAAW,SAAA,CAAW,KAAM,CAAC,CAAA,CAEvDtB,CAAAA,CAAK,GAAA,CAAI,CAAC,EACZ,CAEA,SAASuB,GAAAA,CAAOzP,CAAAA,CAAoB,CAClCiO,EAAW,GAAA,CAAIjO,CAAI,CAAA,CACnBkO,CAAAA,CAAK,GAAA,CAAI,CAAC,EACZ,CAEA,SAASwB,CAAAA,CAAanU,CAAAA,CAAmB,CACvC4S,CAAAA,CAAiB,MAAA,CAAQE,CAAAA,GAAS,CAAE,GAAGA,CAAAA,CAAK,CAAC9S,CAAG,EAAG,CAAC8S,CAAAA,CAAI9S,CAAG,CAAE,EAAE,EACjE,CAEA,SAASoU,CAAAA,CAAWpU,CAAAA,CAAmB,CACrC4S,CAAAA,CAAiB,MAAA,CAAQE,IAAS,CAAE,GAAGA,CAAAA,CAAK,CAAC9S,CAAG,EAAG,IAAK,CAAA,CAAE,EAC5D,CAEA,SAASqU,CAAAA,CAAWrU,CAAAA,CAAmB,CACrC4S,CAAAA,CAAiB,MAAA,CAAQE,IAAS,CAAE,GAAGA,CAAAA,CAAK,CAAC9S,CAAG,EAAG,KAAM,CAAA,CAAE,EAC7D,CAEA,OAAO,CACL,IAAA,CAAM8T,CAAAA,CACN,OAAA,CAASV,CAAAA,CACT,UAAAQ,CAAAA,CACA,cAAA,CAAAf,GAAAA,CACA,SAAA,CAAW,IAAMJ,CAAAA,EAAU,CAC3B,UAAA,CAAY,IAAMC,CAAAA,EAAW,CAC7B,IAAA,CAAM,IAAMC,CAAAA,EAAK,CACjB,UAAA,CAAAkB,EACA,IAAA,CAAAG,CAAAA,CACA,MAAA,CAAAE,GAAAA,CACA,YAAA,CAAAC,CAAAA,CACA,UAAA,CAAAC,CAAAA,CACA,WAAAC,CAAAA,CACA,QAAA,EAAW,CAAM1B,CAAAA,EAAK,CAAIkB,CAAAA,EAAW,EAAGlB,CAAAA,CAAK,OAAQ2B,CAAAA,EAAMA,CAAAA,CAAI,CAAC,EAAG,CAAA,CACnE,QAAA,EAAW,CAAM3B,CAAAA,EAAK,CAAI,CAAA,EAAGA,CAAAA,CAAK,MAAA,CAAQ2B,CAAAA,EAAMA,CAAAA,CAAI,CAAC,EAAG,EACxD,QAAA,CAASA,CAAAA,CAAW,CAAE3B,CAAAA,CAAK,GAAA,CAAI,IAAA,CAAK,GAAA,CAAI,CAAA,CAAG,IAAA,CAAK,GAAA,CAAI2B,CAAAA,CAAGT,CAAAA,EAAY,CAAC,CAAC,EAAG,EACxE,KAAA,EAAQ,CACNpB,CAAAA,CAAU,GAAA,CAAI,CAAE,MAAA,CAAQ,IAAA,CAAM,SAAA,CAAW,IAAK,CAAC,CAAA,CAC/CC,CAAAA,CAAW,GAAA,CAAI,EAAE,CAAA,CACjBC,CAAAA,CAAK,IAAI,CAAC,EACZ,CACF,CACF,CAIA,SAASQ,EAAAA,CAAeoB,CAAAA,CAA8BC,EAAuB,CAC3E,OAAOA,CAAAA,CAAK,KAAA,CAAM,GAAG,CAAA,CAAE,MAAA,CAAO,CAACC,EAAQzJ,CAAAA,GAAMyJ,CAAAA,GAAIzJ,CAAC,CAAA,CAAGuJ,CAAG,CAC1D,CAEA,SAASZ,EAAAA,CAAenQ,CAAAA,CAAYC,CAAAA,CAAoB,CACtD,OAAID,CAAAA,EAAK,IAAA,EAAQC,CAAAA,EAAK,KAAa,CAAA,CAC/BD,CAAAA,EAAK,IAAA,CAAa,EAAA,CAClBC,CAAAA,EAAK,IAAA,CAAa,CAAA,CAClB,OAAOD,CAAAA,EAAM,QAAA,EAAY,OAAOC,CAAAA,EAAM,QAAA,CAAiBD,CAAAA,CAAIC,CAAAA,CACxD,MAAA,CAAOD,CAAC,CAAA,CAAE,aAAA,CAAc,MAAA,CAAOC,CAAC,CAAC,CAC1C,CCxLO,SAASiR,EAAAA,CAAkBrC,CAAAA,CAA+C,CAC/E,IAAMhJ,CAAAA,CAAQ,KAAA,CAAM,OAAA,CAAQgJ,CAAI,EAAIA,CAAAA,CAAO,CAACA,CAAI,CAAA,CAEhD,IAAA,IAAWtJ,CAAAA,IAAQM,CAAAA,CAAO,CACxB,IAAMsL,CAAAA,CAAK,CAAE,UAAA,CAAY,oBAAA,CAAsB,GAAG5L,CAAK,CAAA,CACvDrJ,CAAAA,CAAQ,CACN,MAAA,CAAQ,CACN,CAAE,IAAA,CAAM,qBAAA,CAAuB,SAAA,CAAW,IAAA,CAAK,SAAA,CAAUiV,CAAE,CAAE,CAC/D,CACF,CAAC,EACH,CACF,CAgBO,SAASC,EAAAA,CAAavC,CAAAA,CAA2B,CACtD,IAAM9S,CAAAA,CAAqD,CACzD,CAAE,QAAA,CAAU,UAAA,CAAY,OAAA,CAAS8S,CAAAA,CAAK,KAAM,CAC9C,CAAA,CAEIA,CAAAA,CAAK,WAAA,EAAa9S,EAAK,IAAA,CAAK,CAAE,QAAA,CAAU,gBAAA,CAAkB,OAAA,CAAS8S,CAAAA,CAAK,WAAY,CAAC,CAAA,CACrFA,CAAAA,CAAK,KAAA,EAAO9S,CAAAA,CAAK,IAAA,CAAK,CAAE,QAAA,CAAU,UAAA,CAAY,QAAS8S,CAAAA,CAAK,KAAM,CAAC,CAAA,CACnEA,CAAAA,CAAK,GAAA,EAAK9S,CAAAA,CAAK,IAAA,CAAK,CAAE,QAAA,CAAU,QAAA,CAAU,OAAA,CAAS8S,CAAAA,CAAK,GAAI,CAAC,CAAA,CAC7DA,CAAAA,CAAK,MAAM9S,CAAAA,CAAK,IAAA,CAAK,CAAE,QAAA,CAAU,SAAA,CAAW,OAAA,CAAS8S,CAAAA,CAAK,IAAK,CAAC,CAAA,CAChEA,CAAAA,CAAK,QAAA,EAAU9S,CAAAA,CAAK,IAAA,CAAK,CAAE,QAAA,CAAU,eAAgB,OAAA,CAAS8S,CAAAA,CAAK,QAAS,CAAC,CAAA,CAC7EA,CAAAA,CAAK,MAAA,EAAQ9S,CAAAA,CAAK,IAAA,CAAK,CAAE,QAAA,CAAU,WAAA,CAAa,OAAA,CAAS8S,CAAAA,CAAK,MAAO,CAAC,EAE1E3S,CAAAA,CAAQ,CAAE,IAAA,CAAAH,CAAK,CAAC,EAClB,CAeO,SAASsV,EAAAA,CAAexC,CAAAA,CAA6B,CAC1D,IAAM9S,CAAAA,CAAiD,CACrD,CAAE,IAAA,CAAM,gBAAiB,OAAA,CAAS8S,CAAAA,CAAK,KAAM,CAC/C,CAAA,CAEIA,CAAAA,CAAK,IAAA,EAAM9S,CAAAA,CAAK,KAAK,CAAE,IAAA,CAAM,cAAA,CAAgB,OAAA,CAAS8S,CAAAA,CAAK,IAAK,CAAC,CAAA,CACjEA,EAAK,WAAA,EAAa9S,CAAAA,CAAK,IAAA,CAAK,CAAE,IAAA,CAAM,qBAAA,CAAuB,OAAA,CAAS8S,CAAAA,CAAK,WAAY,CAAC,CAAA,CACtFA,CAAAA,CAAK,KAAA,EAAO9S,CAAAA,CAAK,IAAA,CAAK,CAAE,KAAM,eAAA,CAAiB,OAAA,CAAS8S,CAAAA,CAAK,KAAM,CAAC,CAAA,CACpEA,CAAAA,CAAK,IAAA,EAAM9S,CAAAA,CAAK,IAAA,CAAK,CAAE,IAAA,CAAM,cAAA,CAAgB,OAAA,CAAS8S,CAAAA,CAAK,IAAK,CAAC,CAAA,CACjEA,CAAAA,CAAK,OAAA,EAAS9S,CAAAA,CAAK,IAAA,CAAK,CAAE,IAAA,CAAM,iBAAA,CAAmB,OAAA,CAAS8S,CAAAA,CAAK,OAAQ,CAAC,CAAA,CAE9E3S,CAAAA,CAAQ,CAAE,IAAA,CAAAH,CAAK,CAAC,EAClB,CAkBO,SAASuV,EAAAA,CAAOxV,CAAAA,CAAyB,CAC9C,IAAMC,EAAqE,EAAC,CAExED,CAAAA,CAAO,WAAA,EACTC,CAAAA,CAAK,IAAA,CAAK,CAAE,IAAA,CAAM,cAAe,OAAA,CAASD,CAAAA,CAAO,WAAY,CAAC,CAAA,CAE5DA,CAAAA,CAAO,MAAA,EACTC,CAAAA,CAAK,IAAA,CAAK,CAAE,IAAA,CAAM,QAAA,CAAU,OAAA,CAASD,CAAAA,CAAO,MAAO,CAAC,EAGtD,IAAME,CAAAA,CAA6C,EAAC,CAChDF,CAAAA,CAAO,SAAA,EACTE,CAAAA,CAAK,IAAA,CAAK,CAAE,GAAA,CAAK,WAAA,CAAa,IAAA,CAAMF,CAAAA,CAAO,SAAU,CAAC,CAAA,CAGxDI,EAAQ,CAAE,KAAA,CAAOJ,CAAAA,CAAO,KAAA,CAAO,IAAA,CAAAC,CAAAA,CAAM,IAAA,CAAAC,CAAK,CAAC,CAAA,CAEvCF,CAAAA,CAAO,SAAA,EAAWsV,EAAAA,CAAatV,CAAAA,CAAO,SAAS,CAAA,CAC/CA,EAAO,OAAA,EAASuV,EAAAA,CAAevV,CAAAA,CAAO,OAAO,CAAA,CAC7CA,CAAAA,CAAO,cAAA,EAAgBoV,EAAAA,CAAkBpV,EAAO,cAAc,EACpE,CAsBO,SAASyV,EAAAA,CAAgBC,CAAAA,CAAiBtX,CAAAA,CAAiC,CAChF,IAAIuX,CAAAA,CAAM,CAAA;AAAA,CAAA,CACVA,CAAAA,EAAO,CAAA;AAAA,CAAA,CAEP,IAAA,IAAWtX,CAAAA,IAASD,CAAAA,CAClBuX,CAAAA,EAAO,CAAA;AAAA,CAAA,CACPA,CAAAA,EAAO,CAAA,SAAA,EAAYD,CAAO,CAAA,EAAGrX,EAAM,GAAG,CAAA;AAAA,CAAA,CAClCA,CAAAA,CAAM,OAAA,GAASsX,CAAAA,EAAO,CAAA,aAAA,EAAgBtX,EAAM,OAAO,CAAA;AAAA,CAAA,CAAA,CACnDA,CAAAA,CAAM,UAAA,GAAYsX,CAAAA,EAAO,CAAA,gBAAA,EAAmBtX,EAAM,UAAU,CAAA;AAAA,CAAA,CAAA,CAC5DA,EAAM,QAAA,EAAY,IAAA,GAAMsX,CAAAA,EAAO,CAAA,cAAA,EAAiBtX,EAAM,QAAQ,CAAA;AAAA,CAAA,CAAA,CAClEsX,CAAAA,EAAO,CAAA;AAAA,CAAA,CAGT,OAAAA,CAAAA,EAAO,CAAA;AAAA,CAAA,CACAA,CACT,CCpLO,SAASC,EAAAA,CAAgB7Z,CAAAA,CAAY8Z,KAAiCC,CAAAA,CAAmB,CAC9F,OAAOD,CAAAA,CAAU9Z,EAAO,GAAG+Z,CAAI,CACjC,CAUO,SAASC,EAAAA,CAAAA,GAAYC,CAAAA,CAAiC,CAC3D,OAAO,CAACja,CAAAA,CAAAA,GAAa+Z,CAAAA,GAAgB,CACnC,IAAIxR,EAAcvI,CAAAA,CAClB,IAAA,IAAWiZ,CAAAA,IAAKgB,CAAAA,CACd1R,EAAS0Q,CAAAA,CAAE1Q,CAAAA,CAAQ,GAAGwR,CAAI,EAE5B,OAAOxR,CACT,CACF,CAYO,SAAS2R,EAAAA,CAAsBC,CAAAA,CAA0C,CAC9E,OAAOA,CACT,CAOO,IAAMC,EAAAA,CAAqCpa,CAAAA,EAAU,OAAOA,CAAK,CAAA,CAAE,WAAA,EAAY,CAGzEqa,GAAqCra,CAAAA,EAAU,MAAA,CAAOA,CAAK,CAAA,CAAE,aAAY,CAGzEsa,EAAAA,CAAsCta,CAAAA,EAAU,CAC3D,IAAMiP,CAAAA,CAAI,MAAA,CAAOjP,CAAK,CAAA,CACtB,OAAOiP,CAAAA,CAAE,MAAA,CAAO,CAAC,CAAA,CAAE,aAAY,CAAIA,CAAAA,CAAE,KAAA,CAAM,CAAC,CAC9C,CAAA,CAGasL,EAAAA,CAAqCva,CAAAA,EACzC,MAAA,CAAOA,CAAK,CAAA,CAAE,OAAA,CAAQ,OAAA,CAAU8D,CAAAA,EAAMA,EAAE,WAAA,EAAa,CAAA,CAIjD0W,EAAAA,CAAgCxa,GAAU,MAAA,CAAOA,CAAK,CAAA,CAAE,IAAA,GASxDya,EAAAA,CAAmC,CAACza,CAAAA,CAAO0a,CAAAA,CAAoB,GAAIC,CAAAA,CAAS,KAAA,GAAU,CACjG,IAAM1L,EAAI,MAAA,CAAOjP,CAAK,CAAA,CACtB,OAAIiP,EAAE,MAAA,EAAUyL,CAAAA,CAAkBzL,CAAAA,CAC3BA,CAAAA,CAAE,MAAM,CAAA,CAAGyL,CAAAA,CAAYC,CAAAA,CAAO,MAAM,EAAIA,CACjD,CAAA,CAaaC,EAAAA,CAA+C,CAC1D5a,EACA6a,CAAAA,CAAgE,QAAA,CAChEC,CAAAA,GACG,CACH,IAAMC,CAAAA,CAAI/a,CAAAA,YAAiB,IAAA,CAAOA,CAAAA,CAAQ,IAAI,IAAA,CAAKA,CAAK,CAAA,CACxD,GAAI,MAAM+a,CAAAA,CAAE,OAAA,EAAS,CAAA,CAAG,OAAO,MAAA,CAAO/a,CAAK,EAE3C,GAAI6a,CAAAA,GAAW,MAAO,OAAOE,CAAAA,CAAE,WAAA,EAAY,CAE3C,IAAMC,CAAAA,CAAMF,CAAAA,EAAU,OAAA,CAEhBpZ,CAAAA,CAAsD,CAC1D,KAAA,CAAO,CAAE,IAAA,CAAM,SAAA,CAAW,MAAO,SAAA,CAAW,GAAA,CAAK,SAAU,CAAA,CAC3D,OAAQ,CAAE,IAAA,CAAM,SAAA,CAAW,KAAA,CAAO,UAAW,GAAA,CAAK,SAAU,CAAA,CAC5D,IAAA,CAAM,CAAE,IAAA,CAAM,SAAA,CAAW,KAAA,CAAO,MAAA,CAAQ,IAAK,SAAU,CAAA,CACvD,IAAA,CAAM,CAAE,QAAS,MAAA,CAAQ,IAAA,CAAM,SAAA,CAAW,KAAA,CAAO,OAAQ,GAAA,CAAK,SAAU,CAAA,CACxE,IAAA,CAAM,CAAE,IAAA,CAAM,SAAA,CAAW,MAAA,CAAQ,SAAU,CAC7C,CAAA,CAEA,OAAO,IAAI,IAAA,CAAK,eAAesZ,CAAAA,CAAKtZ,CAAAA,CAAQmZ,CAAM,CAAC,EAAE,MAAA,CAAOE,CAAC,CAC/D,CAAA,CAUaE,GAAmC,CAACjb,CAAAA,CAAOkb,CAAAA,CAAe,KAAA,CAAOJ,IACrE,IAAI,IAAA,CAAK,YAAA,CAAaA,CAAAA,EAAU,QAAS,CAC9C,KAAA,CAAO,UAAA,CACP,QAAA,CAAUI,CACZ,CAAC,CAAA,CAAE,MAAA,CAAO,MAAA,CAAOlb,CAAK,CAAC,CAAA,CAWZmb,EAAAA,CAAiC,CAACnb,EAAOob,CAAAA,CAAqBN,CAAAA,GAAoB,CAC7F,IAAM1P,EAAiC,EAAC,CACxC,GAAIgQ,CAAAA,CAAY,CACd,GAAM,CAAC5S,CAAAA,CAAK6S,CAAG,EAAID,CAAAA,CAAW,KAAA,CAAM,GAAG,CAAA,CAAE,IAAI,MAAM,CAAA,CACnDhQ,CAAAA,CAAK,qBAAA,CAAwB5C,EAC7B4C,CAAAA,CAAK,qBAAA,CAAwBiQ,CAAAA,EAAO7S,EACtC,CACA,OAAO,IAAI,IAAA,CAAK,YAAA,CAAasS,GAAU,OAAA,CAAS1P,CAAI,CAAA,CAAE,MAAA,CAAO,OAAOpL,CAAK,CAAC,CAC5E,CAAA,CAUasb,GAAkC,CAACtb,CAAAA,CAAOub,CAAAA,CAAW,CAAA,CAAGT,IAC5D,IAAI,IAAA,CAAK,YAAA,CAAaA,CAAAA,EAAU,QAAS,CAC9C,KAAA,CAAO,SAAA,CACP,qBAAA,CAAuBS,EACvB,qBAAA,CAAuBA,CACzB,CAAC,CAAA,CAAE,MAAA,CAAO,OAAOvb,CAAK,CAAC,CAAA,CAWZwb,EAAAA,CAAgC,CAACxb,CAAAA,CAAOyb,CAAAA,CAAS,CAAA,GACrD,IAAA,CAAK,UAAUzb,CAAAA,CAAO,IAAA,CAAMyb,CAAM,CAAA,CAW9BC,GAAiC,CAAC1b,CAAAA,CAAO2b,CAAAA,CAAkBC,CAAAA,GAAwB,CAC9F,IAAM3C,CAAAA,CAAI2C,CAAAA,EAAc,CAAA,EAAGD,CAAQ,CAAA,CAAA,CAAA,CACnC,OAAO,CAAA,EAAG3b,CAAK,IAAIA,CAAAA,GAAU,CAAA,CAAI2b,CAAAA,CAAW1C,CAAC,EAC/C,CAAA,CASa4C,EAAAA,CAA8C,CAAC7b,CAAAA,CAAO8a,IAAoB,CAErF,IAAMgB,CAAAA,CAAAA,CADI9b,CAAAA,YAAiB,KAAOA,CAAAA,CAAM,OAAA,EAAQ,CAAI,MAAA,CAAOA,CAAK,CAAA,EAC/C,IAAA,CAAK,GAAA,EAAI,CACpB+b,EAAU,IAAA,CAAK,GAAA,CAAID,CAAI,CAAA,CAEvBE,EAAsD,CAC1D,CAAC,GAAA,CAAO,QAAQ,EAChB,CAAC,IAAA,CAAS,QAAQ,CAAA,CAClB,CAAC,KAAA,CAAU,MAAM,CAAA,CACjB,CAAC,OAAY,KAAK,CAAA,CAClB,CAAC,OAAA,CAAa,OAAO,CAAA,CACrB,CAAC,CAAA,CAAA,CAAA,CAAU,MAAM,CACnB,CAAA,CAEMC,CAAAA,CAAmC,CACvC,MAAA,CAAQ,IAAM,MAAA,CAAQ,GAAA,CAAO,IAAA,CAAM,IAAA,CACnC,IAAK,KAAA,CAAU,KAAA,CAAO,MAAA,CAAY,IAAA,CAAM,OAC1C,CAAA,CAEIC,CAAAA,CAAoC,QAAA,CACxC,IAAA,GAAW,CAACtG,CAAAA,CAAWuG,CAAC,CAAA,GAAKH,CAAAA,CAC3B,GAAID,CAAAA,CAAUnG,CAAAA,CAAW,CAAEsG,CAAAA,CAAOC,EAAG,KAAO,CAG9C,IAAM/M,CAAAA,CAAI,KAAK,KAAA,CAAM0M,CAAAA,CAAOG,CAAAA,CAASC,CAAI,CAAC,CAAA,CAE1C,GAAI,OAAO,IAAA,CAAS,KAAe,IAAA,CAAK,kBAAA,CACtC,OAAO,IAAI,KAAK,kBAAA,CAAmBpB,CAAAA,EAAU,IAAA,CAAM,CAAE,QAAS,MAAO,CAAC,CAAA,CAAE,MAAA,CAAO1L,EAAG8M,CAAI,CAAA,CAGxF,IAAME,CAAAA,CAAM,KAAK,GAAA,CAAIhN,CAAC,CAAA,CAChBuL,CAAAA,CAASvL,EAAI,CAAA,CAAI,KAAA,CAAQ,WAC/B,OAAO,CAAA,EAAGgN,CAAG,CAAA,CAAA,EAAIF,CAAI,CAAA,EAAGE,CAAAA,GAAQ,EAAI,GAAA,CAAM,EAAE,CAAA,CAAA,EAAIzB,CAAM,EACxD,ECjLO,SAAS0B,CAAAA,CAAyBC,CAAAA,CAAwC,CAC/E,OAAO,CAAE,KAAA,CAAO,WAAA,CAAa,MAAAA,CAAM,CACrC,CAKO,SAASC,GACdpC,CAAAA,CACc,CACd,OAAOkC,CAAAA,CAAmB,CACxB,OAAA,CAAQzZ,CAAAA,CAAI4Q,CAAAA,CAAS,CACnB,IAAMgJ,CAAAA,CAAUrC,CAAAA,CAAGvX,CAAAA,CAAI4Q,CAAO,EAC1B,OAAOgJ,CAAAA,EAAY,UAAA,GACpB5Z,CAAAA,CAAW,mBAAqB4Z,CAAAA,EAErC,CAAA,CACA,SAAA,CAAU5Z,CAAAA,CAAI,CACXA,CAAAA,CAAW,kBAAA,KACd,CACF,CAAC,CACH,CAMA,IAAM6Z,CAAAA,CAAgB,OAAO,kBAAkB,CAAA,CAexC,SAASC,EAAAA,CACd9Z,EACA+Z,CAAAA,CACA3c,CAAAA,CACA0B,CAAAA,CACM,CACN,IAAM8R,CAAAA,CAA+B,CACnC,KAAA,CAAOxT,CAAAA,CACP,IAAK0B,CAAAA,EAAS,GAAA,CACd,SAAA,CAAWA,CAAAA,EAAS,SACtB,CAAA,CAGMkb,CAAAA,CAA4Bha,CAAAA,CAAW6Z,CAAa,GAAK,EAAC,CAChEG,CAAAA,CAAO,IAAA,CAAK,CAAE,SAAA,CAAAD,CAAAA,CAAW,OAAA,CAAAnJ,CAAQ,CAAC,CAAA,CACjC5Q,CAAAA,CAAW6Z,CAAa,CAAA,CAAIG,EAG7BD,CAAAA,CAAU,KAAA,CAAM,OAAA,GAAU/Z,CAAAA,CAAI4Q,CAAO,EACvC,CAKO,SAASqJ,EAAAA,CACdja,EACA+Z,CAAAA,CACAG,CAAAA,CACM,CAEN,IAAM5T,GAD4BtG,CAAAA,CAAW6Z,CAAa,CAAA,EAAK,IAC1C,IAAA,CAAMxN,CAAAA,EAAMA,CAAAA,CAAE,SAAA,GAAc0N,CAAS,CAAA,CAE1D,GAAIzT,CAAAA,CAAO,CACT,IAAM6T,CAAAA,CAAW7T,CAAAA,CAAM,OAAA,CAAQ,KAAA,CAC/BA,EAAM,OAAA,CAAU,CAAE,GAAGA,CAAAA,CAAM,QAAS,KAAA,CAAO4T,CAAAA,CAAU,QAAA,CAAAC,CAAS,EAC9DJ,CAAAA,CAAU,KAAA,CAAM,OAAA,GAAU/Z,CAAAA,CAAIsG,EAAM,OAAO,EAC7C,CACF,CAKO,SAAS8T,EAAAA,CAAiBpa,CAAAA,CAAuB,CACtD,IAAMga,CAAAA,CAA4Bha,EAAW6Z,CAAa,CAAA,EAAK,EAAC,CAChE,QAAWvT,CAAAA,IAAS0T,CAAAA,CAClB1T,CAAAA,CAAM,SAAA,CAAU,MAAM,SAAA,GAAYtG,CAAAA,CAAIsG,CAAAA,CAAM,OAAO,EAErD,OAAQtG,CAAAA,CAAW6Z,CAAa,EAClC,CAOO,IAAMQ,EAAAA,CAAaZ,CAAAA,CAAgB,CACxC,QAAQzZ,CAAAA,CAAI,CACV,qBAAA,CAAsB,IAAMA,EAAG,KAAA,EAAO,EACxC,CACF,CAAC,CAAA,CAGYsa,EAAAA,CAAgBb,CAAAA,CAA4B,CACvD,QAAQzZ,CAAAA,CAAI,CAAE,KAAA,CAAO8C,CAAQ,EAAG,CAC9B,IAAM6E,CAAAA,CAAYzE,CAAAA,EAAa,CACxBlD,CAAAA,CAAG,QAAA,CAASkD,CAAAA,CAAE,MAAc,GAAGJ,CAAAA,GACtC,CAAA,CACA,QAAA,CAAS,iBAAiB,OAAA,CAAS6E,CAAAA,CAAU,IAAI,CAAA,CAChD3H,EAAW,eAAA,CAAkB2H,EAChC,CAAA,CACA,SAAA,CAAU3H,EAAI,CACZ,QAAA,CAAS,mBAAA,CAAoB,OAAA,CAAUA,EAAW,eAAA,CAAiB,IAAI,CAAA,CACvE,OAAQA,EAAW,gBACrB,CACF,CAAC,CAAA,CAGYua,GAAad,CAAAA,CAA4D,CACpF,OAAA,CAAQzZ,CAAAA,CAAI,CAAE,KAAA,CAAA5C,CAAM,CAAA,CAAG,CACrB,IAAImG,CAAAA,CAA8C,IAAA,CAC5CrD,CAAAA,CAAW9C,CAAAA,CAAM,UAAY,GAAA,CAE7BoG,CAAAA,CAAQ,IAAM,CAAED,EAAQ,UAAA,CAAWnG,CAAAA,CAAM,OAAA,CAAS8C,CAAQ,EAAG,CAAA,CAC7Dsa,CAAAA,CAAS,IAAM,CAAMjX,IAAS,YAAA,CAAaA,CAAK,CAAA,CAAGA,CAAAA,CAAQ,MAAQ,CAAA,CAEzEvD,CAAAA,CAAG,gBAAA,CAAiB,aAAA,CAAewD,CAAK,CAAA,CACxCxD,CAAAA,CAAG,gBAAA,CAAiB,WAAA,CAAawa,CAAM,CAAA,CACvCxa,CAAAA,CAAG,gBAAA,CAAiB,cAAA,CAAgBwa,CAAM,CAAA,CAEzCxa,CAAAA,CAAW,YAAA,CAAe,CAAE,MAAAwD,CAAAA,CAAO,MAAA,CAAAgX,CAAO,EAC7C,EACA,SAAA,CAAUxa,CAAAA,CAAI,CACZ,IAAMya,EAAOza,CAAAA,CAAW,YAAA,CACpBya,CAAAA,GACFza,CAAAA,CAAG,oBAAoB,aAAA,CAAeya,CAAAA,CAAI,KAAK,CAAA,CAC/Cza,CAAAA,CAAG,oBAAoB,WAAA,CAAaya,CAAAA,CAAI,MAAM,CAAA,CAC9Cza,EAAG,mBAAA,CAAoB,cAAA,CAAgBya,CAAAA,CAAI,MAAM,GAErD,CACF,CAAC,CAAA,CAGYC,EAAAA,CAAajB,EAAmD,CAC3E,OAAA,CAAQzZ,CAAAA,CAAI,CAAE,MAAO2a,CAAS,CAAA,CAAG,CAC/B,IAAMnb,EAAW,IAAI,oBAAA,CAAsBC,CAAAA,EAAY,CACrDkb,EAASlb,CAAAA,CAAQ,CAAC,CAAA,CAAE,cAAc,EACpC,CAAC,CAAA,CACDD,CAAAA,CAAS,OAAA,CAAQQ,CAAE,CAAA,CAClBA,CAAAA,CAAW,YAAA,CAAeR,EAC7B,EACA,SAAA,CAAUQ,CAAAA,CAAI,CACXA,CAAAA,CAAW,cAAc,UAAA,GAC5B,CACF,CAAC,EAGY4a,EAAAA,CAAUnB,CAAAA,CAAsD,CAC3E,OAAA,CAAQzZ,EAAI,CAAE,KAAA,CAAO2a,CAAS,CAAA,CAAG,CAC/B,IAAMnb,CAAAA,CAAW,IAAI,cAAA,CAAgBC,GAAY,CAC/Ckb,CAAAA,CAASlb,CAAAA,CAAQ,CAAC,CAAC,EACrB,CAAC,CAAA,CACDD,CAAAA,CAAS,QAAQQ,CAAE,CAAA,CAClBA,CAAAA,CAAW,SAAA,CAAYR,EAC1B,CAAA,CACA,SAAA,CAAUQ,CAAAA,CAAI,CACXA,EAAW,SAAA,EAAW,UAAA,GACzB,CACF,CAAC,EChMM,SAAS6a,EAAAA,CACdC,CAAAA,CACA/b,EACAD,CAAAA,CAAgC,EAAC,CACb,CACpB,GAAM,CAAE,KAAA,CAAA/B,CAAAA,CAAQ,GAAI,MAAA,CAAAge,CAAAA,CAAS,IAAA,CAAM,MAAA,CAAApH,CAAO,CAAA,CAAI7U,CAAAA,CAE9C,MAAMkc,CAAAA,SAAqB,WAAY,CACrC,WAAW,kBAAA,EAA+B,CACxC,OAAOje,CACT,CAEQ,KAAA,CACA,QAAA,CAAW,MACX,MAAA,CAAkC,EAAC,CAE3C,WAAA,EAAc,CACZ,KAAA,EAAM,CACN,IAAA,CAAK,KAAA,CAAQge,EAAS,IAAA,CAAK,YAAA,CAAa,CAAE,IAAA,CAAM,MAAO,CAAC,CAAA,CAAI,KAC9D,CAEA,mBAA0B,CAExB,IAAA,IAAWnH,CAAAA,IAAQ7W,CAAAA,CAAO,CACxB,IAAMke,CAAAA,CAAO,KAAK,YAAA,CAAarH,CAAI,EAC/BqH,CAAAA,GAAS,IAAA,GACX,IAAA,CAAK,MAAA,CAAOrH,CAAI,CAAA,CAAIsH,CAAAA,CAAoBD,CAAI,CAAA,EAEhD,CAEA,IAAA,CAAK,OAAA,EAAQ,CACb,IAAA,CAAK,SAAW,KAClB,CAEA,oBAAA,EAA6B,CAE3B,KAAO,IAAA,CAAK,KAAA,CAAM,UAAA,EAChB,IAAA,CAAK,MAAM,WAAA,CAAY,IAAA,CAAK,KAAA,CAAM,UAAU,EAE9C,IAAA,CAAK,QAAA,CAAW,MAClB,CAEA,yBAAyB9d,CAAAA,CAAcge,CAAAA,CAA0BjB,CAAAA,CAA+B,CAC9F,KAAK,MAAA,CAAO/c,CAAI,CAAA,CAAI+c,CAAAA,GAAa,KAAOgB,CAAAA,CAAoBhB,CAAQ,CAAA,CAAI,MAAA,CACpE,KAAK,QAAA,EACP,IAAA,CAAK,OAAA,GAET,CAEQ,OAAA,EAAgB,CAEtB,KAAO,IAAA,CAAK,MAAM,UAAA,EAChB,IAAA,CAAK,KAAA,CAAM,WAAA,CAAY,KAAK,KAAA,CAAM,UAAU,CAAA,CAI9C,GAAIa,GAAUpH,CAAAA,CAAQ,CACpB,IAAMyH,CAAAA,CAAU,SAAS,aAAA,CAAc,OAAO,CAAA,CAC9CA,CAAAA,CAAQ,YAAczH,CAAAA,CACtB,IAAA,CAAK,KAAA,CAAM,WAAA,CAAYyH,CAAO,EAChC,CAGA,IAAMlc,CAAAA,CAAOH,EAAU,IAAA,CAAK,MAAa,CAAA,CACzC,IAAA,CAAK,MAAM,WAAA,CAAYG,CAAI,EAC7B,CAGA,SAASmc,CAAAA,CAA4B,CACnC,MAAA,CAAO,MAAA,CAAO,KAAK,MAAA,CAAQA,CAAQ,CAAA,CAC/B,IAAA,CAAK,UAAU,IAAA,CAAK,OAAA,GAC1B,CACF,CAGA,OAAI,OAAO,cAAA,CAAmB,GAAA,EAAe,CAAC,cAAA,CAAe,GAAA,CAAIP,CAAO,CAAA,GAClEhc,EAAQ,OAAA,CACV,cAAA,CAAe,MAAA,CAAOgc,CAAAA,CAASE,EAAc,CAAE,OAAA,CAASlc,CAAAA,CAAQ,OAAQ,CAAC,CAAA,CAEzE,cAAA,CAAe,MAAA,CAAOgc,CAAAA,CAASE,CAAY,CAAA,CAAA,CAIxCA,CACT,CAMO,SAASM,GACdvc,CAAAA,CACAD,CAAAA,CAAgC,EAAC,CACb,CAEpB,GAAM,CAAE,KAAA,CAAA/B,CAAAA,CAAQ,EAAC,CAAG,MAAA,CAAAge,EAAS,IAAA,CAAM,MAAA,CAAApH,CAAO,CAAA,CAAI7U,CAAAA,CAE9C,OAAO,cAAc,WAAY,CAC/B,WAAW,kBAAA,EAAqB,CAAE,OAAO/B,CAAO,CAExC,KAAA,CACA,QAAA,CAAW,MACX,MAAA,CAAkC,EAAC,CAE3C,WAAA,EAAc,CACZ,KAAA,EAAM,CACN,IAAA,CAAK,KAAA,CAAQge,EAAS,IAAA,CAAK,YAAA,CAAa,CAAE,IAAA,CAAM,MAAO,CAAC,CAAA,CAAI,KAC9D,CAEA,mBAAoB,CAClB,IAAA,IAAWnH,CAAAA,IAAQ7W,CAAAA,CAAO,CACxB,IAAMke,CAAAA,CAAO,IAAA,CAAK,YAAA,CAAarH,CAAI,CAAA,CAC/BqH,CAAAA,GAAS,IAAA,GAAM,IAAA,CAAK,OAAOrH,CAAI,CAAA,CAAIsH,CAAAA,CAAoBD,CAAI,GACjE,CACA,IAAA,CAAK,OAAA,EAAQ,CACb,KAAK,QAAA,CAAW,KAClB,CAEA,oBAAA,EAAuB,CACrB,KAAO,IAAA,CAAK,KAAA,CAAM,UAAA,EAAY,KAAK,KAAA,CAAM,WAAA,CAAY,IAAA,CAAK,KAAA,CAAM,UAAU,CAAA,CAC1E,IAAA,CAAK,SAAW,MAClB,CAEA,yBAAyB9d,CAAAA,CAAcoe,CAAAA,CAAqBzH,CAAAA,CAAoB,CAC9E,KAAK,MAAA,CAAO3W,CAAI,CAAA,CAAI2W,CAAAA,GAAQ,KAAOoH,CAAAA,CAAoBpH,CAAG,CAAA,CAAI,MAAA,CAC1D,KAAK,QAAA,EAAU,IAAA,CAAK,OAAA,GAC1B,CAEQ,OAAA,EAAU,CAChB,KAAO,IAAA,CAAK,MAAM,UAAA,EAAY,IAAA,CAAK,KAAA,CAAM,WAAA,CAAY,KAAK,KAAA,CAAM,UAAU,CAAA,CAC1E,GAAIiH,GAAUpH,CAAAA,CAAQ,CACpB,IAAMtH,CAAAA,CAAI,SAAS,aAAA,CAAc,OAAO,CAAA,CACxCA,CAAAA,CAAE,YAAcsH,CAAAA,CAChB,IAAA,CAAK,KAAA,CAAM,WAAA,CAAYtH,CAAC,EAC1B,CACA,IAAA,CAAK,KAAA,CAAM,YAAYtN,CAAAA,CAAU,IAAA,CAAK,MAAa,CAAC,EACtD,CACF,CACF,CAMA,SAASmc,EAAoB9d,CAAAA,CAAwB,CAEnD,GAAI,CACF,OAAO,IAAA,CAAK,KAAA,CAAMA,CAAK,CACzB,MAAQ,CACN,OAAOA,CACT,CACF,CCxJA,IAAMoe,EAAAA,CAAmB,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OAAA,CAAA,CAoBzB,eAAsBC,EAAAA,CAAU3c,CAAAA,CAAqD,CACnF,GAAM,CACJ,MAAA,CAAQ4c,CAAAA,CACR,MAAA,CAAAC,CAAAA,CACA,MAAA,CAAAC,CAAAA,CAAS,MAAA,CACT,QAAA,CAAAC,CAAAA,CAAWL,EAAAA,CACX,MAAA,CAAAM,CAAAA,CACA,OAAA,CAAApe,CAAAA,CACA,WAAA,CAAAqe,CAAAA,CAAc,CAChB,CAAA,CAAIjd,CAAAA,CAEE0E,CAAAA,CAAQ,IAAA,CAAK,GAAA,EAAI,CAGjBwY,CAAAA,CAAS,OAAON,CAAAA,EAAgB,UAAA,CAClC,MAAMA,CAAAA,EAAY,CAClBA,CAAAA,CAEE/V,CAAAA,CAA0B,CAC9B,QAAA,CAAU,EAAC,CACX,MAAA,CAAQ,EAAC,CACT,QAAA,CAAU,CACZ,CAAA,CAGA,IAAA,IAASoF,CAAAA,CAAI,CAAA,CAAGA,CAAAA,CAAIiR,CAAAA,CAAO,MAAA,CAAQjR,CAAAA,EAAKgR,CAAAA,CAAa,CACnD,IAAME,CAAAA,CAAQD,CAAAA,CAAO,MAAMjR,CAAAA,CAAGA,CAAAA,CAAIgR,CAAW,CAAA,CAC7C,MAAM,OAAA,CAAQ,GAAA,CAAIE,CAAAA,CAAM,GAAA,CAAI,MAAOC,CAAAA,EAAQ,CACzC,GAAI,CACF,IAAMvf,CAAAA,CAAU,MAAMgf,CAAAA,CAAOO,CAAG,CAAA,CAC1Bnb,CAAAA,CAAO8a,CAAAA,CACV,OAAA,CAAQ,aAAA,CAAelf,CAAO,CAAA,CAC9B,OAAA,CAAQ,UAAA,CAAY,EAAE,CAAA,CACtB,OAAA,CAAQ,aAAA,CAAe,EAAE,CAAA,CAEtBwf,CAAAA,CAAWC,EAAAA,CAAcF,CAAG,CAAA,CAIlCvW,CAAAA,CAAO,QAAA,CAAS,IAAA,CAAK,CACnB,GAAA,CAAAuW,CAAAA,CACA,IAAA,CAAM,CAAA,EAAGN,CAAM,CAAA,CAAA,EAAIO,CAAQ,CAAA,CAAA,CAC3B,IAAA,CAAM,IAAI,IAAA,CAAK,CAACpb,CAAI,CAAC,CAAA,CAAE,IACzB,CAAC,CAAA,CAED+a,CAAAA,GAASI,CAAAA,CAAKnb,CAAI,EACpB,CAAA,MAASpD,EAAK,CACZ,IAAMH,CAAAA,CAAQG,CAAAA,YAAe,KAAA,CAAQA,CAAAA,CAAM,IAAI,KAAA,CAAM,MAAA,CAAOA,CAAG,CAAC,CAAA,CAChEgI,CAAAA,CAAO,MAAA,CAAO,IAAA,CAAK,CAAE,GAAA,CAAAuW,CAAAA,CAAK,KAAA,CAAO1e,CAAAA,CAAM,OAAQ,CAAC,CAAA,CAChDE,CAAAA,GAAUwe,CAAAA,CAAK1e,CAAK,EACtB,CACF,CAAC,CAAC,EACJ,CAEA,OAAAmI,CAAAA,CAAO,QAAA,CAAW,IAAA,CAAK,GAAA,EAAI,CAAInC,CAAAA,CACxBmC,CACT,CAUO,SAAS0W,EAAAA,CAAqBC,CAAAA,CAAkD,CACrF,OAAOA,CAAAA,CACJ,MAAA,CAAQzR,CAAAA,EAAM,CAACA,CAAAA,CAAE,IAAA,CAAK,QAAA,CAAS,GAAG,CAAA,EAAK,CAACA,CAAAA,CAAE,IAAA,CAAK,QAAA,CAAS,GAAG,CAAC,CAAA,CAC5D,GAAA,CAAKA,CAAAA,EAAMA,EAAE,IAAI,CACtB,CAaO,SAAS0R,EAAAA,CACd7U,CAAAA,CACA8U,CAAAA,CACU,CACV,OAAOA,CAAAA,CAAO,GAAA,CAAKnG,CAAAA,EAAM,CACvB,IAAIE,CAAAA,CAAO7O,CAAAA,CACX,IAAA,GAAW,CAAC3F,CAAAA,CAAK3E,CAAK,CAAA,GAAK,MAAA,CAAO,OAAA,CAAQiZ,CAAC,CAAA,CACzCE,CAAAA,CAAOA,CAAAA,CAAK,OAAA,CAAQ,CAAA,CAAA,EAAIxU,CAAG,CAAA,CAAA,CAAI3E,CAAK,EAEtC,OAAOmZ,CACT,CAAC,CACH,CAYO,SAAS6F,EAAAA,CAAcF,CAAAA,CAAqB,CACjD,IAAMO,CAAAA,CAAQP,CAAAA,CAAI,OAAA,CAAQ,KAAA,CAAO,EAAE,CAAA,CAAE,OAAA,CAAQ,KAAA,CAAO,EAAE,CAAA,CACtD,OAAKO,CAAAA,CACE,CAAA,EAAGA,CAAK,CAAA,WAAA,CAAA,CADI,YAErB,CAKO,SAASC,EAAAA,CACd3F,CAAAA,CACA4F,CAAAA,CACQ,CACR,IAAI3F,CAAAA,CAAM,CAAA;AAAA,CAAA,CACVA,CAAAA,EAAO,CAAA;AAAA,CAAA,CAEP,IAAA,IAAWtC,CAAAA,IAAQiI,CAAAA,CAAQ,QAAA,CACzB3F,CAAAA,EAAO,CAAA;AAAA,CAAA,CACPA,CAAAA,EAAO,CAAA,SAAA,EAAYD,CAAO,CAAA,EAAGrC,EAAK,GAAG,CAAA;AAAA,CAAA,CACrCsC,CAAAA,EAAO,CAAA,aAAA,EAAgB,IAAI,IAAA,EAAK,CAAE,WAAA,EAAY,CAAE,KAAA,CAAM,GAAG,CAAA,CAAE,CAAC,CAAC,CAAA;AAAA,CAAA,CAC7DA,CAAAA,EAAO,CAAA;AAAA,CAAA,CAGT,OAAAA,CAAAA,EAAO,CAAA;AAAA,CAAA,CACAA,CACT,CCnKO,SAAS4F,EAAAA,CACdC,IACAC,CAAAA,CACAC,GAAAA,CACAC,CAAAA,CACY,CACZ,IAAIC,CAAAA,CAAuB,EAAC,CAGtBhM,EAAQiM,CAAAA,EAAgB,CAExBtb,CAAAA,CAAUnD,CAAAA,CACd,IAAM,CACJ,IAAMrB,CAAAA,CAAQ,OAAO2f,GAAAA,EAAY,CAAA,CAGjC,IAAA,IAAW7d,CAAAA,IAAQ+d,CAAAA,CACb/d,CAAAA,CAAK,UAAA,EAAYA,EAAK,UAAA,CAAW,WAAA,CAAYA,CAAI,CAAA,CAEvD+d,CAAAA,CAAe,EAAC,CAGhB,IAAME,EAASH,CAAAA,CAAM5f,CAAK,CAAA,EAAK4f,CAAAA,CAAM,QAAA,CAC/BI,CAAAA,CAAaN,CAAAA,CAAO,UAAA,CAC1B,GAAIK,CAAAA,EAAUC,CAAAA,CAAY,CACxB,IAAMle,CAAAA,CAAO+R,CAAAA,CAAQoM,CAAAA,CAAWpM,CAAAA,CAAOkM,CAAM,CAAA,CAAIA,CAAAA,EAAO,CAClDG,CAAAA,CAAQpe,CAAAA,YAAgB,gBAAA,CAC1B,KAAA,CAAM,IAAA,CAAKA,EAAK,UAAU,CAAA,CAC1B,CAACA,CAAI,CAAA,CACT,IAAA,IAAWsN,CAAAA,IAAK8Q,CAAAA,CACdF,EAAW,YAAA,CAAa5Q,CAAAA,CAAGsQ,CAAM,CAAA,CAEnCG,CAAAA,CAAeK,EACjB,CACF,CAAA,CACA,CAAE,MAAA,CAAQ,IAAK,CACjB,CAAA,CAEA,OAAO,IAAM,CACX1b,CAAAA,GACA,IAAA,IAAW1C,CAAAA,IAAQ+d,CAAAA,CACb/d,CAAAA,CAAK,UAAA,EAAYA,CAAAA,CAAK,UAAA,CAAW,WAAA,CAAYA,CAAI,EAEzD,CACF,CA8BO,IAAMqe,EAAAA,CAASjgB,GAAAA,CAA8BC,CAAAA,EAC3C,IAAM,CACX,IAAMiB,CAAAA,CAAY,QAAA,CAAS,aAAA,CAAc,KAAK,CAAA,CAC9CA,CAAAA,CAAU,KAAA,CAAM,QAAU,UAAA,CAC1B,IAAMse,CAAAA,CAAS,QAAA,CAAS,aAAA,CAAc,QAAQ,CAAA,CAC9Cte,CAAAA,CAAU,YAAYse,CAAM,CAAA,CAE5B,IAAMU,CAAAA,CAAW,CAAE,GAAGjgB,CAAAA,CAAI,KAAA,CAAM,KAAM,EACtC,OAAIA,CAAAA,CAAI,KAAA,CAAM,QAAA,GACZigB,CAAAA,CAAS,QAAA,CAAW,IAAM5gB,CAAAA,CAAUW,EAAI,KAAA,CAAM,QAAA,EAAW,CAAA,CAAA,CAG3Dqf,EAAAA,CACEpe,CAAAA,CACAse,CAAAA,CACA,IAAMvf,EAAI,KAAA,CAAM,EAAA,CAChB,MAAA,CAAO,WAAA,CACL,MAAA,CAAO,OAAA,CAAQigB,CAAQ,CAAA,CAAE,IAAI,CAAC,CAACzQ,CAAAA,CAAGrI,CAAC,CAAA,GAAM,CACvCqI,CAAAA,CACA,IAAMnQ,EAAU8H,CAAAA,EAAG,CACrB,CAAC,CACH,CACF,CAAA,CAEOlG,CACT,CACD,EAkBM,SAASif,EAAAA,CACdrgB,CAAAA,CACA4f,CAAAA,CACe,CACf,IAAMjb,CAAAA,CAAM,OAAO3E,CAAK,CAAA,CAClB+f,CAAAA,CAASH,CAAAA,CAAMjb,CAAG,CAAA,EAAKib,CAAAA,CAAM,CAAA,CACnC,OAAOG,CAAAA,CAASA,CAAAA,CAAO/f,CAAK,CAAA,CAAI,MAClC,CCvGA,IAAIsgB,EAAAA,CAAoB,EAYjB,SAASC,EAAAA,CAAkBtc,CAAAA,CAIf,CACjB,OAAO,CACL,KAAA,CAAO,UAAA,CACP,QAASA,CAAAA,CAAO,OAAA,CAChB,UAAA,CAAYA,CAAAA,CAAO,UAAA,CACnB,KAAA,CAAOA,CAAAA,CAAO,KAAA,CACd,IAAK,MAAA,CAAO,CAAA,SAAA,EAAY,EAAEqc,EAAiB,CAAA,CAAE,CAC/C,CACF,CAMA,IAAME,CAAAA,CAAgB,IAAI,GAAA,CAcnB,SAASC,EAAAA,CACdC,CAAAA,CAAoC,EAAC,CACrCjB,EACU,CACV,IAAMkB,CAAAA,CAAY,IAAI,GAAA,CAChBC,CAAAA,CAAiB,IAAI,GAAA,CACrBC,EAAgB,IAAI,GAAA,CAG1B,IAAA,IAAWC,CAAAA,IAAOJ,CAAAA,CAChBG,CAAAA,CAAc,GAAA,CAAIC,CAAAA,CAAI,QAAQ,GAAA,CAAKA,CAAG,CAAA,CAGxC,IAAMC,CAAAA,CAAqB,CACzB,GAAA,CAAOC,CAAAA,CAA6B,CAClC,IAAM3V,CAAAA,CAAK2V,CAAAA,CAAS,GAAA,CAGpB,GAAIA,CAAAA,CAAS,KAAA,CAAO,CAClB,GAAIJ,EAAe,GAAA,CAAIvV,CAAE,CAAA,CAAG,OAAOuV,CAAAA,CAAe,GAAA,CAAIvV,CAAE,CAAA,CACxD,IAAM4V,CAAAA,CAAoB,EAAC,CACrBH,CAAAA,CAAMD,CAAAA,CAAc,GAAA,CAAIxV,CAAE,CAAA,CAGhC,GAFIyV,CAAAA,EAAK,UAAA,CAAYG,CAAAA,CAAO,IAAA,CAAKH,CAAAA,CAAI,UAAA,EAAY,CAAA,CACxCA,GAAK,QAAA,GAAa,MAAA,EAAWG,CAAAA,CAAO,IAAA,CAAKH,CAAAA,CAAI,QAAQ,CAAA,CAC1DrB,CAAAA,EAAQ,IAAIuB,CAAQ,CAAA,CAAG,CACzB,IAAME,CAAAA,CAAezB,CAAAA,CAAO,GAAA,CAAIuB,CAAQ,EACpC,KAAA,CAAM,OAAA,CAAQE,CAAY,CAAA,EAAGD,CAAAA,CAAO,IAAA,CAAK,GAAGC,CAAY,EAC9D,CACA,OAAAN,CAAAA,CAAe,GAAA,CAAIvV,CAAAA,CAAI4V,CAAM,CAAA,CACtBA,CACT,CAGA,GAAIN,CAAAA,CAAU,GAAA,CAAItV,CAAE,CAAA,CAAG,OAAOsV,CAAAA,CAAU,GAAA,CAAItV,CAAE,CAAA,CAG9C,GAAI2V,CAAAA,CAAS,UAAA,GAAe,MAAA,EAAUR,CAAAA,CAAc,GAAA,CAAInV,CAAE,EACxD,OAAOmV,CAAAA,CAAc,GAAA,CAAInV,CAAE,CAAA,CAI7B,IAAMyV,CAAAA,CAAMD,CAAAA,CAAc,IAAIxV,CAAE,CAAA,CAChC,GAAIyV,CAAAA,CAAK,CACP,IAAMK,CAAAA,CAAWC,EAAAA,CAAoBN,EAAKC,CAAQ,CAAA,CAClD,OAAAJ,CAAAA,CAAU,GAAA,CAAItV,CAAAA,CAAI8V,CAAQ,CAAA,CACnBA,CACT,CAGA,GAAI1B,CAAAA,CACF,OAAOA,CAAAA,CAAO,GAAA,CAAIuB,CAAQ,CAAA,CAI5B,IAAMG,CAAAA,CAAWH,CAAAA,CAAS,OAAA,EAAQ,CAGlC,OAAIA,CAAAA,CAAS,UAAA,GAAe,MAAA,CAC1BR,EAAc,GAAA,CAAInV,CAAAA,CAAI8V,CAAQ,CAAA,CAE9BR,CAAAA,CAAU,GAAA,CAAItV,CAAAA,CAAI8V,CAAQ,EAGrBA,CACT,CAAA,CAEA,GAAA,CAAIH,CAAAA,CAAyC,CAG3C,OAFIL,CAAAA,CAAU,GAAA,CAAIK,CAAAA,CAAS,GAAG,CAAA,EAC1BH,CAAAA,CAAc,GAAA,CAAIG,CAAAA,CAAS,GAAG,CAAA,EAC9BA,CAAAA,CAAS,UAAA,GAAe,QAAUR,CAAAA,CAAc,GAAA,CAAIQ,CAAAA,CAAS,GAAG,CAAA,CAAU,IAAA,CAC1EvB,CAAAA,CAAeA,CAAAA,CAAO,IAAIuB,CAAQ,CAAA,CAC/B,KACT,CAAA,CAEA,WAAA,CAAYK,CAAAA,CAAmD,CAC7D,OAAOZ,GAAeY,CAAAA,EAAkB,EAAC,CAAGN,CAAQ,CACtD,CAAA,CAEA,OAAA,EAAU,CACRJ,EAAU,KAAA,EAAM,CAChBC,CAAAA,CAAe,KAAA,GACjB,CACF,CAAA,CAEA,OAAOG,CACT,CAEA,SAASK,EAAAA,CAAoBN,CAAAA,CAA2BC,CAAAA,CAA6B,CACnF,OAAID,CAAAA,CAAI,WAAa,MAAA,CAAkBA,CAAAA,CAAI,QAAA,CACvCA,CAAAA,CAAI,UAAA,CAAmBA,CAAAA,CAAI,UAAA,EAAW,CACtCA,EAAI,WAAA,CAAoBC,CAAAA,CAAS,GAAA,CAAID,CAAAA,CAAI,WAAW,CAAA,CACjDA,CAAAA,CAAI,OAAA,CAAQ,OAAA,EACrB,CAyBO,SAASQ,EAAAA,CAAkBN,CAAAA,CAA6B,CACvC,CAEpB,GAAIA,CAAAA,CAAS,UAAA,GAAe,MAAA,CAAQ,CAClC,GAAIR,CAAAA,CAAc,GAAA,CAAIQ,CAAAA,CAAS,GAAG,CAAA,CAChC,OAAOR,CAAAA,CAAc,GAAA,CAAIQ,EAAS,GAAG,CAAA,CAEvC,IAAMG,CAAAA,CAAWH,CAAAA,CAAS,OAAA,EAAQ,CAClC,OAAAR,EAAc,GAAA,CAAIQ,CAAAA,CAAS,GAAA,CAAKG,CAAQ,CAAA,CACjCA,CACT,CACA,OAAOH,EAAS,OAAA,EAClB,CAEF,CAKO,SAASO,EAAAA,EAAuB,CACrCf,CAAAA,CAAc,KAAA,GAChB,CCjLO,SAASgB,GACdlT,CAAAA,CACA5M,CAAAA,CAAwB,EAAC,CACX,CACd,GAAM,CACJ,OAAA,CAAA+f,CAAAA,CAAU,WACV,OAAA,CAASlT,CAAAA,CACT,KAAA,CAAOC,CAAAA,CACP,QAAA,CAAAkT,CAAAA,CAAW,KAAA,CACX,WAAA,CAAAC,EAAc,CAAA,CACd,UAAA,CAAAzf,CAAAA,CAAa,OACf,CAAA,CAAIR,CAAAA,CAEA+M,CAAAA,CAAoC,IAAA,CACpCC,IAAoC,IAAA,CACpCC,CAAAA,CAA0B,IAAA,CAE9B,SAASC,GAAAA,EAA2B,CAClC,GAAIF,GAAAA,CAAa,OAAOA,GAAAA,CAExB,IAAMtI,CAAAA,CAAQ,IAAA,CAAK,GAAA,EAAI,CACvB,OAAAsI,GAAAA,CAAcJ,GAAO,CAClB,IAAA,CAAK,MAAOO,CAAAA,EAAQ,CAEnB,IAAM5H,CAAAA,CAAU,IAAA,CAAK,KAAI,CAAIb,CAAAA,CACzBub,CAAAA,CAAc,CAAA,EAAK1a,CAAAA,CAAU0a,CAAAA,EAC/B,MAAM,IAAI,QAASlU,CAAAA,EAAM,UAAA,CAAWA,CAAAA,CAAGkU,CAAAA,CAAc1a,CAAO,CAAC,CAAA,CAE/DwH,CAAAA,CAAeI,EAAI,QACrB,CAAC,CAAA,CACA,KAAA,CAAOtO,CAAAA,EAAQ,CACdoO,CAAAA,CAAYpO,CAAAA,YAAe,MAAQA,CAAAA,CAAM,IAAI,KAAA,CAAM,MAAA,CAAOA,CAAG,CAAC,EAChE,CAAC,EAEImO,GACT,CAGA,OAAIgT,CAAAA,EAAU9S,GAAAA,EAAU,CAEjB1O,GAAAA,CAAoBC,CAAAA,EAAQ,CACjC,IAAM+I,CAAAA,CAAQ7I,CAAAA,CAA+C,MAAM,CAAA,CAGnE,eAAeuhB,GAA6B,CACtC1Y,CAAAA,EAAM,GAAM,MAAA,GAChBA,CAAAA,CAAM,GAAA,CAAI,SAAS,CAAA,CACnB,MAAM0F,GAAAA,EAAU,CAChB1F,CAAAA,CAAM,GAAA,CAAIyF,CAAAA,CAAY,OAAA,CAAU,OAAO,CAAA,EACzC,CAEA,OAAO,IAAM,CACX,IAAMvN,CAAAA,CAAY,QAAA,CAAS,aAAA,CAAc,KAAK,EAC9CA,CAAAA,CAAU,KAAA,CAAM,OAAA,CAAU,UAAA,CAE1B,IAAM6N,CAAAA,CAAI/F,CAAAA,EAAM,CAEhB,OAAI+F,CAAAA,GAAM,OAAA,EAAWR,CAAAA,EACnBrN,CAAAA,CAAU,YAAYqN,CAAAA,CAAatO,CAAAA,CAAI,KAAY,CAAC,EAC7CiB,CAAAA,EAGL6N,CAAAA,GAAM,OAAA,EAAWT,CAAAA,EAAWG,CAAAA,EAC9BvN,CAAAA,CAAU,WAAA,CAAY5B,CAAAA,CAAUgP,EAAQG,CAAS,CAAC,CAAC,CAAA,CAC5CvN,CAAAA,GAILmN,CAAAA,EAAaU,CAAAA,GAAM,SAAA,EACrB7N,EAAU,WAAA,CAAY5B,CAAAA,CAAU+O,CAAAA,EAAW,CAAC,CAAA,CAI1CU,CAAAA,GAAM,MAAA,EACR4S,GAAazgB,CAAAA,CAAWqgB,CAAAA,CAASG,CAAAA,CAAa1f,CAAU,CAAA,CAAE,IAAA,CAAMsa,CAAAA,EAAY,CAE5E,CAAC,CAAA,CAGIpb,CAAAA,CACT,CACF,CAAC,CACH,CAMA,eAAeygB,EAAAA,CACbjf,CAAAA,CACA6e,CAAAA,CACAK,CAAAA,CACA5f,CAAAA,CACqB,CACrB,OAAIuf,CAAAA,GAAY,aACdK,CAAAA,EAAK,CACE,IAAM,CAAC,CAAA,EAGZL,CAAAA,GAAY,UAAA,CACPM,EAAAA,CAAqBnf,EAAIkf,CAAAA,CAAM5f,CAAU,CAAA,CAG9Cuf,CAAAA,GAAY,aAAA,EAAiBA,CAAAA,GAAY,OAAA,CACpCO,EAAAA,CAAwBpf,EAAIkf,CAAAA,CAAML,CAAO,CAAA,CAG9CA,CAAAA,GAAY,MAAA,CACPQ,EAAAA,CAAiBH,CAAI,CAAA,CAG1B,OAAOL,CAAAA,EAAY,QAAA,EAAYA,CAAAA,CAAQ,IAAA,GAAS,OAAA,CAC3CS,EAAAA,CAAkBJ,CAAAA,CAAML,CAAAA,CAAQ,KAAK,CAAA,CAG1C,OAAOA,CAAAA,EAAY,QAAA,EAAYA,CAAAA,CAAQ,IAAA,GAAS,QAAA,CAC3CU,EAAAA,CAAmBL,EAAML,CAAAA,CAAQ,SAAS,CAAA,EAGnDK,CAAAA,EAAK,CACE,IAAM,CAAC,CAAA,CAChB,CAEA,SAASC,EAAAA,CACPnf,CAAAA,CACAkf,CAAAA,CACA5f,CAAAA,CACY,CACZ,GAAI,OAAO,qBAAyB,GAAA,CAClC,OAAA4f,CAAAA,EAAK,CACE,IAAM,CAAC,CAAA,CAGhB,IAAM1f,EAAW,IAAI,oBAAA,CAClBC,CAAAA,EAAY,CACPA,CAAAA,CAAQ,CAAC,CAAA,EAAG,cAAA,GACdD,EAAS,UAAA,EAAW,CACpB0f,CAAAA,EAAK,EAET,EACA,CAAE,UAAA,CAAA5f,CAAW,CACf,EAGA,OAAA,qBAAA,CAAsB,IAAME,CAAAA,CAAS,OAAA,CAAQQ,CAAE,CAAC,CAAA,CACzC,IAAMR,EAAS,UAAA,EACxB,CAEA,SAAS4f,EAAAA,CACPpf,CAAAA,CACAkf,CAAAA,CACA5W,CAAAA,CACY,CACZ,IAAMnB,CAAAA,CAASmB,CAAAA,GAAS,OAAA,CACpB,CAAC,YAAA,CAAc,SAAS,CAAA,CACxB,CAAC,OAAA,CAAS,YAAA,CAAc,SAAA,CAAW,YAAY,CAAA,CAE7CxF,CAAAA,CAAU,IAAM,CACpB,QAAW0E,CAAAA,IAASL,CAAAA,CAClBnH,CAAAA,CAAG,mBAAA,CAAoBwH,CAAAA,CAAO1E,CAAO,CAAA,CAEvCoc,CAAAA,GACF,CAAA,CAEA,IAAA,IAAW1X,CAAAA,IAASL,CAAAA,CAClBnH,CAAAA,CAAG,gBAAA,CAAiBwH,CAAAA,CAAO1E,CAAAA,CAAS,CAAE,IAAA,CAAM,IAAA,CAAM,OAAA,CAAS,IAAK,CAAC,CAAA,CAGnE,OAAO,IAAM,CACX,IAAA,IAAW0E,CAAAA,IAASL,CAAAA,CAClBnH,CAAAA,CAAG,mBAAA,CAAoBwH,CAAAA,CAAO1E,CAAO,EAEzC,CACF,CAEA,SAASuc,EAAAA,CAAiBH,CAAAA,CAA8B,CACtD,GAAI,OAAO,mBAAA,CAAwB,IAAa,CAC9C,IAAMzW,CAAAA,CAAK,mBAAA,CAAoB,IAAMyW,CAAAA,EAAM,CAAA,CAC3C,OAAO,IAAM,kBAAA,CAAmBzW,CAAE,CACpC,CAEA,IAAMlF,CAAAA,CAAQ,UAAA,CAAW2b,EAAM,GAAG,CAAA,CAClC,OAAO,IAAM,YAAA,CAAa3b,CAAK,CACjC,CAEA,SAAS+b,EAAAA,CAAkBJ,CAAAA,CAAkBpb,CAAAA,CAA2B,CACtE,IAAMP,CAAAA,CAAQ,UAAA,CAAW2b,CAAAA,CAAMpb,CAAK,CAAA,CACpC,OAAO,IAAM,YAAA,CAAaP,CAAK,CACjC,CAEA,SAASgc,GAAmBL,CAAAA,CAAkBM,CAAAA,CAAsC,CAClF,IAAMC,CAAAA,CAAQ,IAAM,CACdD,CAAAA,GAAaN,CAAAA,EAAK,CACjB,qBAAA,CAAsBO,CAAK,EAClC,CAAA,CACA,OAAA,qBAAA,CAAsBA,CAAK,CAAA,CACpB,IAAM,CAAC,CAChB,CCnNO,SAASC,EAAAA,EAAmC,CACjD,OAAO,OAAO,SAAa,GAAA,EAAe,qBAAA,GAAyB,QACrE,CAgBO,SAASC,EAAAA,CACdC,CAAAA,CACA9gB,CAAAA,CAAiC,EAAC,CAClB,CAChB,GAAM,CAAE,SAAA,CAAAuT,CAAAA,CAAW,QAAA,CAAAwN,CAAAA,CAAU,QAAAC,CAAAA,CAAS,QAAA,CAAApjB,CAAAA,CAAW,SAAU,CAAA,CAAIoC,CAAAA,CAK/D,GAHA+gB,CAAAA,KAGIH,EAAAA,EAAwB,CAAG,CACzBrN,CAAAA,EAAW,QAAA,CAAS,eAAA,CAAgB,SAAA,CAAU,GAAA,CAAIA,CAAS,CAAA,CAE/D,IAAM0N,CAAAA,CAAc,QAAA,CAAiB,mBAAA,CAAoB,SAAY,CACnE,MAAMH,IACR,CAAC,CAAA,CAOD,OAAO,CACL,QAAA,CANeG,CAAAA,CAAW,QAAA,CAAS,KAAK,IAAM,CAC1C1N,CAAAA,EAAW,QAAA,CAAS,gBAAgB,SAAA,CAAU,MAAA,CAAOA,CAAS,CAAA,CAClEyN,MACF,CAAC,CAAA,CAIC,kBAAA,CAAoBC,CAAAA,CAAW,kBAAA,CAC/B,KAAA,CAAOA,CAAAA,CAAW,MAClB,cAAA,CAAgB,IAAMA,CAAAA,CAAW,cAAA,EACnC,CACF,CAGA,GAAIrjB,IAAa,MAAA,CACf,OAAOsjB,EAAAA,CAAeJ,CAAAA,CAAgB9gB,CAAO,CAAA,CAI/C,IAAM6G,CAAAA,CAASia,GAAe,CACxB3M,CAAAA,CAAOtN,CAAAA,YAAkB,OAAA,CAAUA,CAAAA,CAAS,OAAA,CAAQ,OAAA,EAAQ,CAElE,OAAAma,CAAAA,IAAU,CAEH,CACL,QAAA,CAAU7M,CAAAA,CACV,kBAAA,CAAoBA,CAAAA,CACpB,KAAA,CAAO,QAAQ,OAAA,EAAQ,CACvB,cAAA,CAAgB,IAAM,CAAC,CACzB,CACF,CAiBO,SAASgN,EAAAA,CAAkB5e,CAAAA,CAK9B,EAAC,CAAW,CACd,GAAM,CACJ,QAAA,CAAAnB,EAAW,OAAA,CACX,MAAA,CAAAO,CAAAA,CAAS,MAAA,CACT,aAAAyf,CAAAA,CACA,YAAA,CAAAC,CACF,CAAA,CAAI9e,EAEAqS,CAAAA,CAAM,CAAA;AAAA;AAAA,CAAA,CACV,OAAAA,CAAAA,EAAO,CAAA,sBAAA,EAAyBxT,CAAQ,CAAA;AAAA,CAAA,CACxCwT,CAAAA,EAAO,gCAAgCjT,CAAM,CAAA;AAAA,CAAA,CAC7CiT,CAAAA,EAAO,CAAA;AAAA,CAAA,CAEHwM,IACFxM,CAAAA,EAAO,CAAA;AAAA,kBAAA,EAAoDwM,CAAY,CAAA;AAAA;AAAA,CAAA,CAAA,CAErEC,IACFzM,CAAAA,EAAO,CAAA;AAAA,kBAAA,EAAoDyM,CAAY,CAAA;AAAA;AAAA,CAAA,CAAA,CAGlEzM,CACT,CAUO,SAAS0M,EAAAA,CAAqBpgB,CAAAA,CAAiB7C,CAAAA,CAAoB,CACxE6C,CAAAA,CAAG,KAAA,CAAM,kBAAA,CAAqB7C,EAChC,CAMA,SAAS6iB,EAAAA,CACPJ,CAAAA,CACA9gB,CAAAA,CACgB,CAChB,IAAMkB,CAAAA,CAAK,QAAA,CAAS,eAAA,CAEdqgB,CAAAA,CAAW,IAAI,OAAA,CAAc,MAAOlgB,CAAAA,EAAY,CAEpDH,CAAAA,CAAG,KAAA,CAAM,WAAa,oBAAA,CACtBA,CAAAA,CAAG,KAAA,CAAM,OAAA,CAAU,GAAA,CAEnB,MAAM,IAAI,OAAA,CAAS6K,CAAAA,EAAM,UAAA,CAAWA,CAAAA,CAAG,GAAG,CAAC,CAAA,CAG3C,MAAM+U,CAAAA,GAGN5f,CAAAA,CAAG,KAAA,CAAM,OAAA,CAAU,GAAA,CAEnB,MAAM,IAAI,OAAA,CAAS6K,CAAAA,EAAM,UAAA,CAAWA,CAAAA,CAAG,GAAG,CAAC,CAAA,CAE3C7K,CAAAA,CAAG,KAAA,CAAM,UAAA,CAAa,GACtBA,CAAAA,CAAG,KAAA,CAAM,OAAA,CAAU,EAAA,CAEnBlB,CAAAA,CAAQ,OAAA,IAAU,CAClBqB,CAAAA,GACF,CAAC,CAAA,CAED,OAAO,CACL,QAAA,CAAAkgB,CAAAA,CACA,kBAAA,CAAoBA,EACpB,KAAA,CAAO,OAAA,CAAQ,OAAA,EAAQ,CACvB,cAAA,CAAgB,IAAM,CACpBrgB,CAAAA,CAAG,KAAA,CAAM,UAAA,CAAa,EAAA,CACtBA,CAAAA,CAAG,KAAA,CAAM,OAAA,CAAU,GACrB,CACF,CACF,CC3KA,SAASsgB,EAAAA,CAAiBljB,CAAAA,CAAwB,CAChD,OAAI,KAAA,CAAM,OAAA,CAAQA,CAAK,CAAA,CAAUA,CAAAA,CAAM,IAAA,CAAK,GAAG,CAAA,CAC3C,OAAOA,CAAAA,EAAU,UAAkBA,CAAAA,CAAQ,MAAA,CAAS,OAAA,CACjD,MAAA,CAAOA,CAAK,CACrB,CAEA,SAASmjB,GAAsBla,CAAAA,CAAama,CAAAA,CAAoB,CAC9D,OAAI,OAAOA,CAAAA,EAAiB,QAAA,CAAiB,MAAA,CAAOna,CAAG,CAAA,CACnD,OAAOma,CAAAA,EAAiB,SAAA,CAAmBna,CAAAA,GAAQ,MAAA,EAAUA,CAAAA,GAAQ,GAAA,CACrE,KAAA,CAAM,OAAA,CAAQma,CAAY,CAAA,CACpBna,CAAAA,CAAMA,CAAAA,CAAI,KAAA,CAAM,GAAG,EAAI,EAAC,CAE3BA,CACT,CAMA,SAASoa,CAAAA,EAAmC,CAC1C,OAAI,OAAO,MAAA,CAAW,GAAA,CAAoB,IAAI,eAAA,CACvC,IAAI,eAAA,CAAgB,MAAA,CAAO,SAAS,MAAM,CACnD,CAEA,SAASC,EAAAA,CAAUlE,CAAAA,CAAyBmE,CAAAA,CAAgC,CAC1E,GAAI,OAAO,MAAA,CAAW,GAAA,CAAa,OAEnC,IAAMC,CAAAA,CAASpE,CAAAA,CAAO,UAAS,CACzBN,CAAAA,CAAM0E,CAAAA,CAAS,CAAA,EAAG,MAAA,CAAO,QAAA,CAAS,QAAQ,CAAA,CAAA,EAAIA,CAAM,CAAA,EAAG,MAAA,CAAO,QAAA,CAAS,IAAI,CAAA,CAAA,CAAK,CAAA,EAAG,MAAA,CAAO,QAAA,CAAS,QAAQ,CAAA,EAAG,MAAA,CAAO,QAAA,CAAS,IAAI,CAAA,CAAA,CAEpID,CAAAA,GAAS,MAAA,CACX,MAAA,CAAO,OAAA,CAAQ,SAAA,CAAU,IAAA,CAAM,EAAA,CAAIzE,CAAG,CAAA,CAEtC,MAAA,CAAO,OAAA,CAAQ,aAAa,IAAA,CAAM,EAAA,CAAIA,CAAG,EAE7C,CAOA,IAAM2E,CAAAA,CAAe,IAAI,GAAA,CACrBC,EAAAA,CAAoB,KAAA,CAExB,SAASC,EAAAA,EAA+B,CAClCD,EAAAA,EAAqB,OAAO,OAAW,GAAA,GAC3CA,EAAAA,CAAoB,IAAA,CAEpB,MAAA,CAAO,gBAAA,CAAiB,UAAA,CAAY,IAAM,CACxC,IAAMtE,CAAAA,CAASiE,CAAAA,EAAgB,CAC/BxE,CAAAA,CAAM,IAAM,CACV,IAAA,GAAW,CAACla,CAAAA,CAAKuE,CAAK,CAAA,GAAKua,CAAAA,CAAc,CACvC,IAAMxa,CAAAA,CAAMmW,CAAAA,CAAO,IAAIza,CAAG,CAAA,CACpB3E,CAAAA,CAAQiJ,CAAAA,GAAQ,IAAA,CAClBC,CAAAA,CAAM,WAAA,CAAYD,CAAG,EACrBC,CAAAA,CAAM,YAAA,CACVA,CAAAA,CAAM,MAAA,CAAO,GAAA,CAAIlJ,CAAK,EACxB,CACF,CAAC,EACH,CAAC,CAAA,EACH,CAWO,SAAS4jB,EAAAA,CACdjf,CAAAA,CACAye,EACA1hB,CAAAA,CAAgC,EAAC,CACtB,CACX,GAAM,CACJ,SAAA,CAAAmiB,CAAAA,CAAavc,CAAAA,EAAS4b,EAAAA,CAAiB5b,CAAC,CAAA,CACxC,WAAA,CAAAwc,CAAAA,CAAe7a,CAAAA,EAAgBka,EAAAA,CAAmBla,EAAKma,CAAY,CAAA,CACnE,OAAA,CAASW,CAAAA,CAAc,SAAA,CACvB,QAAA,CAAUC,CAAAA,CAAa,CAAA,CACvB,aAAA,CAAAC,CAAAA,CAAgB,IAClB,CAAA,CAAIviB,CAAAA,CAIEuH,GAAAA,CADSoa,CAAAA,EAAgB,CACZ,IAAI1e,CAAG,CAAA,CACpBkE,CAAAA,CAAeI,GAAAA,GAAQ,IAAA,CAAO6a,CAAAA,CAAY7a,GAAG,CAAA,CAAIma,EAEjDla,CAAAA,CAAQ7I,CAAAA,CAAUwI,CAAY,CAAA,CAGpC4a,CAAAA,CAAa,GAAA,CAAI9e,CAAAA,CAAK,CAAE,OAAQuE,CAAAA,CAAO,WAAA,CAAA4a,CAAAA,CAAa,YAAA,CAAAV,CAAa,CAAC,CAAA,CAClEO,EAAAA,EAAuB,CAGvB,IAAIO,CAAAA,CAAsD,IAAA,CACtDC,CAAAA,CAAmB,KAAA,CAEjBC,CAAAA,CAAclb,CAAAA,CAAM,IAC1BA,CAAAA,CAAM,GAAA,CAAOlJ,CAAAA,EAAa,CAGxB,GAFAokB,CAAAA,CAAYpkB,CAAK,CAAA,CAEbmkB,CAAAA,CAAkB,CAEtB,IAAME,CAAAA,CAAW,IAAM,CACrB,IAAMC,CAAAA,CAAgBjB,GAAgB,CAElCY,CAAAA,EAAiBjkB,CAAAA,GAAUojB,CAAAA,CAC7BkB,CAAAA,CAAc,MAAA,CAAO3f,CAAG,CAAA,CAExB2f,CAAAA,CAAc,GAAA,CAAI3f,CAAAA,CAAKkf,CAAAA,CAAU7jB,CAAK,CAAC,CAAA,CAGzCsjB,EAAAA,CAAUgB,EAAeP,CAAW,EACtC,CAAA,CAEIC,CAAAA,CAAa,CAAA,EACXE,CAAAA,EAAe,YAAA,CAAaA,CAAa,EAC7CA,CAAAA,CAAgB,UAAA,CAAWG,CAAAA,CAAUL,CAAU,CAAA,EAE/CK,CAAAA,GAEJ,CAAA,CAEuBnb,CAAAA,CAAM,OAC7B,OAAAA,CAAAA,CAAM,MAAA,CAAUiR,CAAAA,EAAuB,CACrCjR,CAAAA,CAAM,GAAA,CAAIiR,CAAAA,CAAGjR,CAAAA,EAAO,CAAC,EACvB,CAAA,CAEOA,CACT,CA4BO,SAASqb,EAAAA,CACdC,CAAAA,CACA9iB,CAAAA,CACgB,CAChB,IAAM6G,CAAAA,CAAS,EAAC,CAChB,IAAA,GAAW,CAAC5D,CAAAA,CAAKV,CAAM,CAAA,GAAK,MAAA,CAAO,QAAQugB,CAAM,CAAA,CAC/Cjc,CAAAA,CAAO5D,CAAG,CAAA,CAAIif,EAAAA,CAAcjf,CAAAA,CAAKV,CAAAA,CAAO,OAAA,CAAS,CAC/C,SAAA,CAAWA,CAAAA,CAAO,SAAA,CAClB,WAAA,CAAaA,CAAAA,CAAO,WAAA,CACpB,QAASvC,CAAAA,EAAS,OACpB,CAAC,CAAA,CAEH,OAAO6G,CACT,CASO,SAASkc,IAAwB,CACtC,GAAI,OAAO,MAAA,CAAW,GAAA,CAAa,OACnC,IAAM3F,CAAAA,CAAM,GAAG,MAAA,CAAO,QAAA,CAAS,QAAQ,CAAA,EAAG,MAAA,CAAO,QAAA,CAAS,IAAI,CAAA,CAAA,CAC9D,MAAA,CAAO,OAAA,CAAQ,YAAA,CAAa,IAAA,CAAM,EAAA,CAAIA,CAAG,CAAA,CAEzCD,CAAAA,CAAM,IAAM,CACV,IAAA,GAAW,EAAG3V,CAAK,CAAA,GAAKua,CAAAA,CACtBva,CAAAA,CAAM,MAAA,CAAO,GAAA,CAAIA,CAAAA,CAAM,YAAY,EAEvC,CAAC,EACH,CAKO,SAASwb,EAAAA,EAAyC,CACvD,IAAMtF,CAAAA,CAASiE,CAAAA,EAAgB,CACzB9a,CAAAA,CAAiC,EAAC,CACxC,OAAA6W,CAAAA,CAAO,OAAA,CAAQ,CAACpf,CAAAA,CAAO2E,CAAAA,GAAQ,CAAE4D,EAAO5D,CAAG,CAAA,CAAI3E,EAAO,CAAC,CAAA,CAChDuI,CACT,CAKO,SAASoc,GAAiBhgB,CAAAA,CAAmB,CAClD8e,CAAAA,CAAa,MAAA,CAAO9e,CAAG,EACzB,CAKO,SAASigB,IAAwB,CACtCnB,CAAAA,CAAa,KAAA,GACf,CClPA,IAAMoB,EAAAA,CAAM,OAAO,qBAAA,EAA0B,UAAA,CACzC,qBAAA,CACC1K,CAAAA,EAA4B,UAAA,CAAW,IAAMA,CAAAA,CAAG,IAAA,CAAK,KAAK,CAAA,CAAG,EAAE,CAAA,CAC9D2K,EAAAA,CAAM,OAAO,oBAAA,EAAyB,UAAA,CACxC,oBAAA,CACCzZ,CAAAA,EAAe,YAAA,CAAaA,CAAE,CAAA,CAuCtB0Z,EAAAA,CAAU,CACrB,MAAA,CAASlhB,GAAcA,CAAAA,CACvB,OAAA,CAAUA,CAAAA,EAAcA,CAAAA,CAAIA,CAAAA,CAAIA,CAAAA,CAChC,QAAA,CAAWA,CAAAA,EAAc,CAAA,CAAI,IAAA,CAAK,GAAA,CAAI,CAAA,CAAIA,CAAAA,CAAG,CAAC,CAAA,CAC9C,UAAA,CAAaA,GAAcA,CAAAA,CAAI,EAAA,CAAM,CAAA,CAAIA,CAAAA,CAAIA,CAAAA,CAAIA,CAAAA,CAAI,CAAA,CAAI,IAAA,CAAK,IAAI,EAAA,CAAKA,CAAAA,CAAI,CAAA,CAAG,CAAC,CAAA,CAAI,CAAA,CACnF,MAAA,CAASA,CAAAA,EAAcA,EAAIA,CAAAA,CAC3B,OAAA,CAAUA,CAAAA,EAAc,CAAA,CAAA,CAAK,CAAA,CAAIA,CAAAA,GAAM,CAAA,CAAIA,CAAAA,CAAAA,CAC3C,QAAA,CAAWA,CAAAA,EAAc,CAAA,CAAI,IAAA,CAAK,GAAA,CAAI,CAAA,CAAIA,CAAAA,CAAG,CAAC,EAC9C,SAAA,CAAYA,CAAAA,EACNA,CAAAA,CAAI,CAAA,CAAI,IAAA,CAAa,MAAA,CAASA,CAAAA,CAAIA,CAAAA,CAClCA,CAAAA,CAAI,CAAA,CAAI,IAAA,CAAa,MAAA,EAAUA,CAAAA,EAAK,GAAA,CAAM,IAAA,CAAA,CAAQA,CAAAA,CAAI,IACtDA,CAAAA,CAAI,GAAA,CAAM,IAAA,CAAa,MAAA,EAAUA,CAAAA,EAAK,IAAA,CAAO,IAAA,CAAA,CAAQA,CAAAA,CAAI,KAAA,CACtD,MAAA,EAAUA,CAAAA,EAAK,KAAA,CAAQ,IAAA,CAAA,CAAQA,CAAAA,CAAI,OAAA,CAE5C,UAAA,CAAaA,GACPA,CAAAA,GAAM,CAAA,EAAKA,CAAAA,GAAM,CAAA,CAAUA,CAAAA,CACxB,IAAA,CAAK,GAAA,CAAI,CAAA,CAAG,IAAMA,CAAC,CAAA,CAAI,IAAA,CAAK,GAAA,CAAA,CAAKA,CAAAA,CAAI,EAAA,EAAO,CAAA,CAAI,IAAA,CAAK,EAAE,CAAA,CAAI,CAEtE,EAMA,SAASmhB,EAAAA,CAAsBC,CAAAA,CAASC,CAAAA,CAAOrhB,CAAAA,CAAc,CAC3D,OAAI,OAAOohB,CAAAA,EAAS,QAAA,EAAY,OAAOC,CAAAA,EAAO,QAAA,CACpCD,GAAQC,CAAAA,CAAKD,CAAAA,EAAQphB,CAAAA,CAGxBA,CAAAA,CAAI,EAAA,CAAMohB,CAAAA,CAAOC,CAC1B,CAeO,SAASC,EAAAA,CACdtc,CAAAA,CACAnH,CAAAA,CAA6B,EAAC,CACZ,CAClB,GAAM,CACJ,QAAA,CAAAoB,CAAAA,CAAW,GAAA,CACX,MAAA,CAAAO,CAAAA,CAAS0hB,EAAAA,CAAQ,QAAA,CACjB,WAAA,CAAAK,CAAAA,CAAcJ,EAAAA,CACd,KAAA,CAAAte,CAAAA,CAAQ,CACV,CAAA,CAAIhF,CAAAA,CAEEgG,CAAAA,CAAUrH,EAAUwI,CAAY,CAAA,CAChCwc,CAAAA,CAAchlB,CAAAA,CAAUwI,CAAY,CAAA,CACtCyc,CAAAA,CAAQ,CAAA,CACRC,IAAU,KAAA,CAERC,CAAAA,EAAQ,IAAM9d,CAAAA,EAAQ,CAAA,CAE5B,OAAA8d,CAAAA,CAAK,GAAA,CAAM,CAACxlB,CAAAA,CAAUylB,CAAAA,GAA0D,CAC9E,IAAMC,CAAAA,CAAMD,CAAAA,EAAW,QAAA,EAAY3iB,CAAAA,CAC7B6iB,CAAAA,CAAOF,CAAAA,EAAW,MAAA,EAAUpiB,CAAAA,CAC5BuiB,CAAAA,CAASH,CAAAA,EAAW,WAAA,EAAeL,CAAAA,CACnCS,EAAMJ,CAAAA,EAAW,KAAA,EAAS/e,CAAAA,CAE1Bue,CAAAA,CAAOvd,CAAAA,EAAQ,CAGrB,OAFA2d,CAAAA,CAAY,GAAA,CAAIrlB,CAAK,CAAA,CAEjB0lB,CAAAA,GAAQ,CAAA,EACVhe,CAAAA,CAAQ,GAAA,CAAI1H,CAAK,EACV,OAAA,CAAQ,OAAA,EAAQ,GAIrBulB,GAAAA,GACFT,EAAAA,CAAIQ,CAAK,CAAA,CACTC,GAAAA,CAAU,KAAA,CAAA,CAGL,IAAI,OAAA,CAAexiB,CAAAA,EAAY,CACpC,IAAMqD,CAAAA,CAAQ,WAAA,CAAY,KAAI,CAAIyf,CAAAA,CAClCN,GAAAA,CAAU,IAAA,CAEV,SAASO,CAAAA,CAAK9e,CAAAA,CAAmB,CAC/B,GAAI,CAACue,GAAAA,CAAS,CAAExiB,CAAAA,EAAQ,CAAG,MAAQ,CAEnC,IAAMkE,EAAUD,CAAAA,CAAMZ,CAAAA,CACtB,GAAIa,CAAAA,CAAU,CAAA,CAAG,CACfqe,CAAAA,CAAQT,EAAAA,CAAIiB,CAAI,CAAA,CAChB,MACF,CAEA,IAAMjiB,CAAAA,CAAI,IAAA,CAAK,GAAA,CAAIoD,EAAUye,CAAAA,CAAK,CAAC,CAAA,CAC7BK,CAAAA,CAASJ,CAAAA,CAAK9hB,CAAC,CAAA,CACrB6D,CAAAA,CAAQ,GAAA,CAAIke,CAAAA,CAAOX,CAAAA,CAAMjlB,CAAAA,CAAO+lB,CAAM,CAAC,CAAA,CAEnCliB,CAAAA,CAAI,EACNyhB,CAAAA,CAAQT,EAAAA,CAAIiB,CAAI,CAAA,EAEhBP,GAAAA,CAAU,KAAA,CACVxiB,CAAAA,EAAQ,EAEZ,CAEAuiB,CAAAA,CAAQT,EAAAA,CAAIiB,CAAI,EAClB,CAAC,CAAA,CACH,CAAA,CAEAN,EAAK,YAAA,CAAgBxlB,CAAAA,EAAmB,CAClCulB,GAAAA,GAAWT,EAAAA,CAAIQ,CAAK,CAAA,CAAGC,GAAAA,CAAU,OACrC7d,CAAAA,CAAQ,GAAA,CAAI1H,CAAK,CAAA,CACjBqlB,CAAAA,CAAY,GAAA,CAAIrlB,CAAK,EACvB,EAEAwlB,CAAAA,CAAK,MAAA,CAAS,IAAMH,CAAAA,EAAY,CAEzBG,CACT,CC9GO,SAASQ,EAAAA,CACd5kB,CAAAA,CACAM,CAAAA,CAAuB,EAAC,CACR,CAChB,GAAM,CACJ,SAAAoB,CAAAA,CAAW,GAAA,CACX,MAAA,CAAAO,CAAAA,CAAS,4BAAA,CACT,KAAA,CAAAqD,CAAAA,CAAQ,CAAA,CACR,QAAA,CAAAb,CAAAA,CACA,YAAA,CAAAogB,CAAAA,CAAe,UAAA,CACf,UAAA,CAAAC,CACF,CAAA,CAAIxkB,EAEAykB,CAAAA,CAAiB,IAAI,GAAA,CAEzB,SAASC,CAAAA,EAA6B,CACpC,OACS,KAAA,CAAM,IAAA,CADXvgB,CAAAA,CACgBzE,CAAAA,CAAU,gBAAA,CAA8ByE,CAAQ,CAAA,CAElDzE,CAAAA,CAAU,QAFyC,CAGvE,CAEA,SAASilB,CAAAA,CAAOzjB,CAAAA,CAAyB,CACvC,OAAOA,CAAAA,CAAG,YAAA,CAAaqjB,CAAY,CAAA,EAAKrjB,CAAAA,CAAG,EAAA,EAAM,EACnD,CAEA,SAAS0jB,CAAAA,EAAgB,CACvBH,EAAiB,IAAI,GAAA,CACrB,IAAA,IAAWvjB,CAAAA,IAAMwjB,CAAAA,EAAY,CAAG,CAC9B,IAAMzhB,CAAAA,CAAM0hB,CAAAA,CAAOzjB,CAAE,CAAA,CACrB,GAAI+B,CAAAA,CAAK,CACP,IAAM4hB,EAAO3jB,CAAAA,CAAG,qBAAA,EAAsB,CACtCujB,CAAAA,CAAe,GAAA,CAAIxhB,CAAAA,CAAK,CACtB,IAAA,CAAM4hB,CAAAA,CAAK,IAAA,CACX,GAAA,CAAKA,CAAAA,CAAK,GAAA,CACV,KAAA,CAAOA,CAAAA,CAAK,KAAA,CACZ,OAAQA,CAAAA,CAAK,MACf,CAAC,EACH,CACF,CACF,CAEA,SAASC,CAAAA,EAAyB,CAChC,IAAMC,CAAAA,CAAWL,CAAAA,EAAY,CACvBM,CAAAA,CAA0B,GAEhC,IAAA,IAAW9jB,CAAAA,IAAM6jB,CAAAA,CAAU,CACzB,IAAM9hB,CAAAA,CAAM0hB,CAAAA,CAAOzjB,CAAE,EACf8P,CAAAA,CAAQyT,CAAAA,CAAe,GAAA,CAAIxhB,CAAG,CAAA,CACpC,GAAI,CAAC+N,CAAAA,CAAO,SAEZ,IAAMC,CAAAA,CAAO/P,CAAAA,CAAG,qBAAA,EAAsB,CAEhC+jB,CAAAA,CAAKjU,CAAAA,CAAM,IAAA,CAAOC,CAAAA,CAAK,IAAA,CACvBiU,CAAAA,CAAKlU,CAAAA,CAAM,GAAA,CAAMC,CAAAA,CAAK,GAAA,CACtBkU,CAAAA,CAAKnU,EAAM,KAAA,EAASC,CAAAA,CAAK,KAAA,EAAS,CAAA,CAAA,CAClCmU,CAAAA,CAAKpU,CAAAA,CAAM,MAAA,EAAUC,CAAAA,CAAK,MAAA,EAAU,CAAA,CAAA,CAG1C,GAAI,IAAA,CAAK,GAAA,CAAIgU,CAAE,CAAA,CAAI,EAAA,EAAO,KAAK,GAAA,CAAIC,CAAE,CAAA,CAAI,EAAA,EAAO,IAAA,CAAK,GAAA,CAAIC,CAAAA,CAAK,CAAC,CAAA,CAAI,GAAA,EAAQ,IAAA,CAAK,GAAA,CAAIC,CAAAA,CAAK,CAAC,CAAA,CAAI,GAAA,CAC5F,SAGF,IAAMC,CAAAA,CAAYnkB,CAAAA,CAAG,OAAA,CACnB,CACE,CACE,SAAA,CAAW,CAAA,UAAA,EAAa+jB,CAAE,CAAA,IAAA,EAAOC,CAAE,CAAA,UAAA,EAAaC,CAAE,CAAA,EAAA,EAAKC,CAAE,CAAA,CAAA,CAC3D,CAAA,CACA,CACE,SAAA,CAAW,6BACb,CACF,CAAA,CACA,CACE,QAAA,CAAAhkB,CAAAA,CACA,MAAA,CAAAO,CAAAA,CACA,KAAA,CAAAqD,CAAAA,CACA,IAAA,CAAM,MACR,CACF,CAAA,CAEAggB,CAAAA,CAAW,KAAKK,CAAS,EAC3B,CAGA,IAAMC,CAAAA,CAAc,IAAI,GAAA,CAAIP,CAAAA,CAAS,GAAA,CAAIJ,CAAM,CAAC,CAAA,CAChD,IAAA,GAAW,CAAC1hB,CAAAA,CAAK4hB,CAAI,IAAKJ,CAAAA,CACnBa,CAAAA,CAAY,GAAA,CAAIriB,CAAG,CAAA,CAK1B,OAAAwhB,CAAAA,CAAe,KAAA,EAAM,CAEd,IAAI,OAAA,CAAepjB,CAAAA,EAAY,CACpC,GAAI2jB,CAAAA,CAAW,MAAA,GAAW,EAAG,CAC3BR,CAAAA,IAAa,CACbnjB,CAAAA,EAAQ,CACR,MACF,CAEA,OAAA,CAAQ,IAAI2jB,CAAAA,CAAW,GAAA,CAAKve,CAAAA,EAAMA,CAAAA,CAAE,QAAQ,CAAC,CAAA,CAAE,IAAA,CAAK,IAAM,CAExD,IAAA,IAAWA,CAAAA,IAAKue,CAAAA,CACdve,CAAAA,CAAE,MAAA,EAAO,CAEX+d,CAAAA,IAAa,CACbnjB,CAAAA,GACF,CAAC,EACH,CAAC,CACH,CAEA,OAAO,CACL,OAAA,CAAAujB,CAAAA,CACA,OAAA,CAAAE,CAAAA,CACA,MAAM,IAAA,CAAKS,CAAAA,CAAmC,CAC5C,OAAAX,CAAAA,EAAQ,CACRW,CAAAA,EAAO,CAEP,MAAM,IAAI,QAASxZ,CAAAA,EAAM,qBAAA,CAAsBA,CAAC,CAAC,CAAA,CAC1C+Y,CAAAA,EACT,CACF,CACF,CAWA,eAAsBU,EAAAA,CACpB9lB,CAAAA,CACA6lB,CAAAA,CACAvlB,CAAAA,CACe,CAEf,OADaskB,EAAAA,CAAW5kB,CAAAA,CAAWM,CAAO,CAAA,CAC9B,IAAA,CAAKulB,CAAM,CACzB,KCnKaE,EAAAA,CAAQjnB,GAAAA,CAAkCC,CAAAA,EAAQ,CAC7D,IAAM+I,CAAAA,CAAQ7I,CAAAA,CAA4B,CAAE,OAAQ,SAAU,CAAC,CAAA,CAG3D+mB,CAAAA,CAAiBjnB,CAAAA,CAAI,KAAA,CAAM,OAAA,CAE/B,OAAAA,CAAAA,CAAI,KAAA,CAAM,OAAA,CACP,IAAA,CAAMH,CAAAA,EAAU,CACXG,CAAAA,CAAI,KAAA,CAAM,UAAYinB,CAAAA,EACxBle,CAAAA,CAAM,GAAA,CAAI,CAAE,MAAA,CAAQ,UAAA,CAAY,KAAA,CAAAlJ,CAAM,CAAC,EAE3C,CAAC,CAAA,CACA,KAAA,CAAOO,CAAAA,EAAQ,CACVJ,CAAAA,CAAI,MAAM,OAAA,GAAYinB,CAAAA,EACxBle,CAAAA,CAAM,GAAA,CAAI,CACR,MAAA,CAAQ,UAAA,CACR,KAAA,CAAO3I,CAAAA,YAAe,KAAA,CAAQA,CAAAA,CAAM,IAAI,KAAA,CAAM,MAAA,CAAOA,CAAG,CAAC,CAC3D,CAAC,EAEL,CAAC,CAAA,CAEI,IAAM,CACX,IAAM0O,CAAAA,CAAI/F,GAAM,CAEhB,OAAQ+F,CAAAA,CAAE,MAAA,EACR,KAAK,SAAA,CACH,OAAO9O,EAAI,KAAA,CAAM,OAAA,CACbX,CAAAA,CAAUW,CAAAA,CAAI,KAAA,CAAM,OAAA,EAAS,CAAA,CAC7B,QAAA,CAAS,aAAA,CAAc,eAAe,CAAA,CAE5C,KAAK,UAAA,CACH,OAAOX,CAAAA,CAAUW,EAAI,KAAA,CAAM,IAAA,CAAK8O,CAAAA,CAAE,KAAK,CAAC,CAAA,CAE1C,KAAK,UAAA,CACH,OAAO9O,CAAAA,CAAI,KAAA,CAAM,KAAA,CACbX,CAAAA,CAAUW,CAAAA,CAAI,KAAA,CAAM,KAAA,CAAM8O,EAAE,KAAK,CAAC,CAAA,CAClC,QAAA,CAAS,aAAA,CAAc,aAAa,CAC5C,CACF,CACF,CAAC,EAcM,SAASoY,EAAAA,CAAexmB,CAAAA,CAAqB,CAClD,IAAMqI,EAAQ7I,CAAAA,CAAsB,CAAE,MAAA,CAAQ,SAAU,CAAC,CAAA,CAEzD,OAAAQ,CAAAA,CACG,KAAMb,CAAAA,EAAUkJ,CAAAA,CAAM,GAAA,CAAI,CAAE,MAAA,CAAQ,UAAA,CAAY,KAAA,CAAAlJ,CAAM,CAAC,CAAC,CAAA,CACxD,KAAA,CAAOI,CAAAA,EAAU8I,CAAAA,CAAM,GAAA,CAAI,CAC1B,MAAA,CAAQ,UAAA,CACR,KAAA,CAAO9I,CAAAA,YAAiB,KAAA,CAAQA,CAAAA,CAAQ,IAAI,KAAA,CAAM,MAAA,CAAOA,CAAK,CAAC,CACjE,CAAC,CAAC,CAAA,CAEG,IAAM8I,CAAAA,EACf,CC1EO,SAASoe,EAAAA,CACd5hB,CAAAA,CACA6hB,CAAAA,CACgB,CAChB,OAAQzhB,CAAAA,EAAS,CACXyhB,CAAAA,CAAU,IAAA,EAAQzhB,CAAAA,CAAE,MAAA,GAAWA,CAAAA,CAAE,aAAA,GACjCyhB,CAAAA,CAAU,cAAA,EAAgBzhB,CAAAA,CAAE,cAAA,EAAe,CAC3CyhB,CAAAA,CAAU,eAAA,EAAiBzhB,CAAAA,CAAE,eAAA,EAAgB,CAC7CyhB,EAAU,wBAAA,EAA2BzhB,CAAAA,CAAU,wBAAA,IAA2B,CAC9EJ,CAAAA,CAAQI,CAAC,CAAA,EACX,CACF,CASO,SAAS0hB,EAAAA,CACd5kB,CAAAA,CACAwH,CAAAA,CACA1E,CAAAA,CACA6hB,CAAAA,CAA4B,EAAC,CACjB,CACZ,IAAME,CAAAA,CAAUH,EAAAA,CAAc5hB,CAAAA,CAAS6hB,CAAS,CAAA,CAC1CG,CAAAA,CAA2C,CAC/C,IAAA,CAAMH,CAAAA,CAAU,IAAA,CAChB,OAAA,CAASA,CAAAA,CAAU,OAAA,CACnB,OAAA,CAASA,CAAAA,CAAU,OACrB,CAAA,CAEA,OAAA3kB,CAAAA,CAAG,gBAAA,CAAiBwH,CAAAA,CAAOqd,CAAAA,CAA0BC,CAAe,CAAA,CAC7D,IAAM9kB,CAAAA,CAAG,mBAAA,CAAoBwH,CAAAA,CAAOqd,CAAAA,CAA0BC,CAAe,CACtF,CAcO,SAASC,EAAAA,CAAe/kB,CAAAA,CAG7B,CACA,IAAMyF,CAAAA,CAAQhI,CAAAA,CAAOuC,CAAAA,CAAG,WAAW,CAAA,CAC7BiH,CAAAA,CAASxJ,CAAAA,CAAOuC,CAAAA,CAAG,YAAY,CAAA,CAErC,OAAI,OAAO,eAAmB,GAAA,EACX,IAAI,cAAA,CAAgBP,CAAAA,EAAY,CAC/C,IAAMC,CAAAA,CAAQD,CAAAA,CAAQ,CAAC,CAAA,CACnBC,CAAAA,GACF+F,CAAAA,CAAM,GAAA,CAAI/F,CAAAA,CAAM,WAAA,CAAY,KAAK,CAAA,CACjCuH,EAAO,GAAA,CAAIvH,CAAAA,CAAM,WAAA,CAAY,MAAM,CAAA,EAEvC,CAAC,CAAA,CACQ,OAAA,CAAQM,CAAE,CAAA,CAGd,CACL,KAAA,CAAO,IAAMyF,CAAAA,EAAM,CACnB,MAAA,CAAQ,IAAMwB,CAAAA,EAChB,CACF,CAWO,SAAS+d,EAAAA,CAAWhlB,CAAAA,CAGzB,CACA,IAAMX,CAAAA,CAASW,CAAAA,GAAO,OAAO,MAAA,CAAW,GAAA,CAAc,MAAA,CAAS,IAAA,CAAA,CACzDilB,EAAUxnB,CAAAA,CAAOuC,CAAAA,CAAKA,CAAAA,CAAG,UAAA,CAAc,MAAA,EAAQ,OAAA,EAAW,CAAE,CAAA,CAC5DklB,CAAAA,CAAUznB,CAAAA,CAAOuC,CAAAA,CAAKA,CAAAA,CAAG,SAAA,CAAa,MAAA,EAAQ,OAAA,EAAW,CAAE,EAEjE,GAAIX,CAAAA,CAAQ,CACV,IAAMyD,CAAAA,CAAU,IAAM,CAChB9C,CAAAA,EACFilB,EAAQ,GAAA,CAAIjlB,CAAAA,CAAG,UAAU,CAAA,CACzBklB,CAAAA,CAAQ,GAAA,CAAIllB,CAAAA,CAAG,SAAS,IAExBilB,CAAAA,CAAQ,GAAA,CAAI,MAAA,CAAO,OAAO,CAAA,CAC1BC,CAAAA,CAAQ,GAAA,CAAI,MAAA,CAAO,OAAO,CAAA,EAE9B,CAAA,CACC7lB,CAAAA,CAAe,gBAAA,CAAiB,QAAA,CAAUyD,CAAAA,CAAS,CAAE,QAAS,IAAK,CAAC,EACvE,CAGA,IAAMqiB,CAAAA,CAAeD,CAAAA,CAAQ,GAAA,CAC7BA,CAAAA,CAAQ,GAAA,CAAO9nB,CAAAA,EAAkB,CAC/B+nB,CAAAA,CAAa/nB,CAAK,CAAA,CACd4C,CAAAA,CAAIA,EAAG,SAAA,CAAY5C,CAAAA,CAClB,MAAA,EAAQ,QAAA,CAAS,MAAA,CAAO,OAAA,CAASA,CAAK,EAC7C,CAAA,CAEA,IAAMgoB,CAAAA,CAAeH,CAAAA,CAAQ,GAAA,CAC7B,OAAAA,CAAAA,CAAQ,GAAA,CAAO7nB,GAAkB,CAC/BgoB,CAAAA,CAAahoB,CAAK,CAAA,CACd4C,CAAAA,CAAIA,CAAAA,CAAG,UAAA,CAAa5C,CAAAA,CACnB,QAAQ,QAAA,CAASA,CAAAA,CAAO,MAAA,CAAO,OAAO,EAC7C,CAAA,CAEO,CAAE,OAAA,CAAA6nB,EAAS,OAAA,CAAAC,CAAQ,CAC5B,CAWO,SAASG,EAAAA,EAAqE,CACnF,OAAO5nB,CAAAA,CAAiB,IAAI,CAC9B,CAUO,SAAS6nB,EAAAA,CAAanoB,CAAAA,CAAgC,CAC3D,OAAOM,CAAAA,CAAiB,IAAI,CAC9B,CAEO,SAAS8nB,EAAAA,CACdvlB,CAAAA,CACAwlB,CAAAA,CACApoB,GAAAA,CACM,CACN4C,CAAAA,CAAG,IAAA,CAAO,OAAO5C,GAAAA,EAAU,QAAA,CAAWA,GAAAA,CAAQ,GAC9C4C,CAAAA,CAAG,gBAAA,CAAiB,QAAA,CAAU,IAAM,CAC9BA,CAAAA,CAAG,OAAA,EAASwlB,CAAAA,CAAM,GAAA,CAAIpoB,GAAK,EACjC,CAAC,CAAA,CAEDqB,CAAAA,CAAO,IAAM,CACXuB,EAAG,OAAA,CAAUwlB,CAAAA,EAAM,GAAMpoB,IAC3B,CAAC,EACH,CAcO,SAASqoB,GACdzlB,CAAAA,CACAqS,CAAAA,CACAmN,GAAAA,CACY,CACZ,OAAO/gB,CAAAA,CAAO,IAAM,CACd+gB,KAAU,CACZxf,CAAAA,CAAG,SAAA,CAAU,GAAA,CAAIqS,CAAS,CAAA,CAE1BrS,CAAAA,CAAG,SAAA,CAAU,MAAA,CAAOqS,CAAS,EAEjC,CAAC,CACH,CAaO,SAASqT,EAAAA,CACd1lB,EACAC,CAAAA,CACY,CACZ,IAAM0lB,CAAAA,CAAY,MAAA,CAAO,OAAA,CAAQ1lB,CAAO,CAAA,CAAE,GAAA,CAAI,CAAC,CAAC2lB,CAAAA,CAAKpG,CAAS,CAAA,GAC5DiG,EAAAA,CAAUzlB,CAAAA,CAAI4lB,EAAKpG,CAAS,CAC9B,CAAA,CACA,OAAO,IAAMmG,CAAAA,CAAU,OAAA,CAASxN,CAAAA,EAAMA,CAAAA,EAAG,CAC3C,CAcO,SAAS0N,EAAAA,CACd7lB,CAAAA,CACAQ,CAAAA,CACApD,IACY,CACZ,IAAM0oB,CAAAA,CAAQtlB,CAAAA,CAAS,OAAA,CAAQ,QAAA,CAAW0T,CAAAA,EAAM,CAAA,CAAA,EAAIA,EAAE,WAAA,EAAa,CAAA,CAAE,CAAA,CAErE,OAAOzV,CAAAA,CAAO,IAAM,CAClB,IAAMiG,CAAAA,CAAItH,GAAAA,EAAM,CACZsH,CAAAA,EAAK,IAAA,CACP1E,CAAAA,CAAG,KAAA,CAAM,cAAA,CAAe8lB,CAAK,CAAA,CAE7B9lB,CAAAA,CAAG,KAAA,CAAM,WAAA,CAAY8lB,CAAAA,CAAO,OAAOphB,CAAAA,EAAM,SAAW,CAAA,EAAGA,CAAC,CAAA,EAAA,CAAA,CAAO,MAAA,CAAOA,CAAC,CAAC,EAE5E,CAAC,CACH,CAaO,SAASqhB,EAAAA,CACd/lB,CAAAA,CACA2T,CAAAA,CACY,CACZ,IAAMgS,EAAY,MAAA,CAAO,OAAA,CAAQhS,CAAM,CAAA,CAAE,GAAA,CAAI,CAAC,CAACC,CAAAA,CAAMoS,CAAO,CAAA,GAC1DH,EAAAA,CAAU7lB,CAAAA,CAAI4T,CAAAA,CAAMoS,CAAO,CAC7B,CAAA,CACA,OAAO,IAAML,CAAAA,CAAU,OAAA,CAASxN,CAAAA,EAAMA,CAAAA,EAAG,CAC3C,CCxQO,SAAS8N,EAAAA,CACdtK,CAAAA,CACgB,CAChB,OAAOA,CACT,CAgCO,SAASuK,EAAAA,CAAAA,GACX/O,EACS,CACZ,IAAIrY,CAAAA,CAA0B,EAAC,CACzBqnB,GAAAA,CAAgC,EAAC,CAEvC,IAAA,IAAWC,CAAAA,IAAOjP,CAAAA,CACZ,OAAOiP,CAAAA,EAAQ,UAAA,CACjBD,GAAAA,CAAQ,IAAA,CAAKC,CAAG,CAAA,CACP,OAAOA,CAAAA,EAAQ,QAAA,EAAYA,CAAAA,GAAQ,IAAA,GAC5CtnB,CAAAA,CAAUsnB,CAAAA,CAAAA,CAId,GAAM,CACJ,KAAA,CAAAC,CAAAA,CAAQ,SAAA,CACR,KAAA,CAAAC,CAAAA,CAAQ,KAAA,CACR,OAAAC,CAAAA,CACA,IAAA,CAAAC,CACF,CAAA,CAAI1nB,CAAAA,CAEE6G,CAAAA,CAAS,CACb,OAAA,CAAS,IAAA,CACT,IAAI,MAAA,EAAS,CAAE,OAAOwgB,GAAAA,CAAQ,GAAA,CAAI9Z,CAAAA,EAAKA,GAAG,CAAG,CAAA,CAC7C,IAAI,KAAA,EAAQ,CAAE,OAAO8Z,GAAAA,CAAQ,SAAW,CAAA,CAAIA,GAAAA,CAAQ,CAAC,CAAA,EAAE,CAAIA,GAAAA,CAAQ,GAAA,CAAI9Z,CAAAA,EAAKA,GAAG,CAAG,CAAA,CAClF,KAAA,CAAAga,CAAAA,CACA,OAAA,CAASF,GAAAA,CAAQ,MACnB,CAAA,CAEA,OAAAxgB,CAAAA,CAAO,OAAA,CAAUlH,CAAAA,CAAO,IAAM,CAC5B,GAAI+nB,GAAQ,CAACA,CAAAA,EAAK,CAAG,OAErB,IAAMnI,CAAAA,CAAS8H,GAAAA,CAAQ,GAAA,CAAK9Z,CAAAA,EAAMA,CAAAA,EAAG,CAAA,CAEjCka,CAAAA,CACFA,CAAAA,CAAOF,CAAAA,CAAO,GAAGhI,CAAM,CAAA,CAEtB,OAAA,CAAgBiI,CAAK,CAAA,CAAE,CAAA,CAAA,EAAID,CAAK,CAAA,CAAA,CAAA,CAAK,GAAGhI,CAAM,EAEnD,CAAC,CAAA,CAEM1Y,CACT,CAwCO,SAAS8gB,EAAAA,CACdvK,EACApd,CAAAA,CAMI,EAAC,CACU,CACf,GAAM,CACJ,MAAA,CAAA4nB,CAAAA,CAAS,OACT,OAAA,CAAAC,CAAAA,CAAU,EAAC,CACX,SAAA,CAAAC,CAAAA,CACA,OAAA,CAAAlpB,CAAAA,CACA,MAAOmpB,CAAAA,CAAc,UAAA,CAAW,KAAA,CAAM,IAAA,CAAK,UAAU,CACvD,CAAA,CAAI/nB,CAAAA,CAEEgoB,CAAAA,CAAarpB,CAAAA,CAAO,KAAK,CAAA,CACzBkI,CAAAA,CAASlI,CAAAA,CAAiB,IAAI,CAAA,CAC9BD,IAAQC,CAAAA,CAAqB,IAAI,CAAA,CAEvC,eAAespB,CAAAA,CAAO3S,CAAAA,CAA2C,CAC/D0S,CAAAA,CAAW,GAAA,CAAI,IAAI,CAAA,CACnBtpB,GAAAA,CAAM,GAAA,CAAI,IAAI,CAAA,CAEd,GAAI,CACF,IAAMwpB,CAAAA,CAAW,MAAMH,CAAAA,CAAY3K,CAAAA,CAAK,CACtC,MAAA,CAAAwK,CAAAA,CACA,OAAA,CAAS,CAAE,cAAA,CAAgB,kBAAA,CAAoB,GAAGC,CAAQ,CAAA,CAC1D,IAAA,CAAM,KAAK,SAAA,CAAUvS,CAAI,CAC3B,CAAC,CAAA,CAED,GAAI,CAAC4S,CAAAA,CAAS,GACZ,MAAM,IAAI,KAAA,CAAM,CAAA,oBAAA,EAAuBA,CAAAA,CAAS,MAAM,CAAA,CAAE,CAAA,CAG1D,IAAMC,CAAAA,CAAM,MAAMD,CAAAA,CAAS,IAAA,EAAK,CAChC,OAAArhB,CAAAA,CAAO,GAAA,CAAIshB,CAAG,CAAA,CACdH,CAAAA,CAAW,GAAA,CAAI,CAAA,CAAK,CAAA,CACpBF,CAAAA,GAAYK,CAAG,EACRA,CACT,CAAA,MAAStpB,CAAAA,CAAK,CACZ,IAAMuF,CAAAA,CAAIvF,CAAAA,YAAe,KAAA,CAAQA,CAAAA,CAAM,IAAI,KAAA,CAAM,MAAA,CAAOA,CAAG,CAAC,CAAA,CAC5D,MAAAH,IAAM,GAAA,CAAI0F,CAAC,CAAA,CACX4jB,CAAAA,CAAW,GAAA,CAAI,KAAK,CAAA,CACpBppB,CAAAA,GAAUwF,CAAC,CAAA,CACLA,CACR,CACF,CAEA,OAAO,CACL,GAAA,CAAAgZ,EACA,MAAA,CAAAwK,CAAAA,CACA,UAAA,CAAY,IAAMI,CAAAA,EAAW,CAC7B,MAAA,CAAQ,IAAMnhB,GAAO,CACrB,KAAA,CAAO,IAAMnI,GAAAA,EAAM,CACnB,MAAA,CAAO0pB,CAAAA,CAAqC,CAC1C,OAAQhkB,CAAAA,EAAa,CACnBA,CAAAA,CAAE,cAAA,EAAe,CACjB,IAAMikB,CAAAA,CAAOjkB,CAAAA,CAAE,MAAA,CACTkkB,CAAAA,CAAW,IAAI,QAAA,CAASD,CAAI,CAAA,CAC5B/S,CAAAA,CAAgC,CAAE,GAAG8S,CAAU,CAAA,CACrDE,CAAAA,CAAS,OAAA,CAAQ,CAAChqB,CAAAA,CAAO2E,CAAAA,GAAQ,CAAEqS,CAAAA,CAAKrS,CAAG,CAAA,CAAI3E,EAAO,CAAC,CAAA,CACvD2pB,CAAAA,CAAO3S,CAAI,EACb,CACF,CAAA,CACA,MAAA,CAAA2S,CACF,CACF,CA6BO,SAASM,EAAAA,CAAgBhmB,CAAAA,CAAyB,EAAC,CAAe,CACvE,GAAI,OAAO,MAAA,CAAW,GAAA,CAAa,OAAO,IAAM,CAAC,CAAA,CAEjD,GAAM,CAAE,SAAA,CAAAimB,CAAAA,CAAY,gBAAA,CAAkB,QAAAC,CAAAA,CAAU,CAAC,QAAA,CAAU,OAAO,CAAE,CAAA,CAAIlmB,CAAAA,CAExE,SAASmmB,GAAgC,CACvC,IAAMC,CAAAA,CAAyB,CAC7B,OAAA,CAAS,MAAA,CAAO,OAAA,CAChB,OAAA,CAAS,MAAA,CAAO,OAAA,CAChB,KAAA,CAAO,EAAC,CACR,SAAA,CAAW,IAAA,CAAK,GAAA,EAClB,CAAA,CAEA,OAAIF,CAAAA,CAAQ,QAAA,CAAS,OAAO,CAAA,EAC1B,QAAA,CAAS,gBAAA,CAAiB,UAAU,CAAA,CAAE,OAAA,CAASJ,CAAAA,EAAS,CACtD,IAAMO,CAAAA,CAASP,CAAAA,CACT/S,EAA+B,EAAC,CACtC,IAAI,QAAA,CAASsT,CAAM,CAAA,CAAE,OAAA,CAAQ,CAACtqB,CAAAA,CAAO2E,CAAAA,GAAQ,CAC3CqS,CAAAA,CAAKrS,CAAG,CAAA,CAAI,MAAA,CAAO3E,CAAK,EAC1B,CAAC,CAAA,CACDqqB,CAAAA,CAAS,KAAA,CAAMC,CAAAA,CAAO,EAAE,CAAA,CAAItT,EAC9B,CAAC,CAAA,CAGIqT,CACT,CAEA,SAASE,CAAAA,CAAgBF,CAAAA,CAA8B,CAOrD,GANIF,EAAQ,QAAA,CAAS,QAAQ,CAAA,EAC3B,qBAAA,CAAsB,IAAM,CAC1B,MAAA,CAAO,QAAA,CAASE,CAAAA,CAAS,OAAA,CAASA,CAAAA,CAAS,OAAO,EACpD,CAAC,CAAA,CAGCF,CAAAA,CAAQ,SAAS,OAAO,CAAA,CAC1B,IAAA,GAAW,CAACK,CAAAA,CAAQxT,CAAI,CAAA,GAAK,MAAA,CAAO,OAAA,CAAQqT,CAAAA,CAAS,KAAK,CAAA,CAAG,CAC3D,IAAMN,CAAAA,CAAO,QAAA,CAAS,eAAeS,CAAM,CAAA,CAC3C,GAAKT,CAAAA,CACL,IAAA,GAAW,CAACplB,CAAAA,CAAK3E,CAAK,CAAA,GAAK,MAAA,CAAO,OAAA,CAAQgX,CAAI,CAAA,CAAG,CAC/C,IAAMZ,CAAAA,CAAQ2T,EAAK,QAAA,CAAS,SAAA,CAAUplB,CAAG,CAAA,CACrCyR,CAAAA,GAAOA,CAAAA,CAAM,KAAA,CAAQpW,CAAAA,EAC3B,CACF,CAEJ,CAGA,IAAMyqB,CAAAA,CAAU,IAAM,CAAA,EAAGP,CAAS,CAAA,CAAA,EAAI,OAAO,QAAA,CAAS,QAAQ,CAAA,CAAA,CAE9D,SAASQ,CAAAA,EAAa,CACpB,GAAI,CACF,IAAML,CAAAA,CAAWD,CAAAA,EAAgB,CACjC,cAAA,CAAe,OAAA,CAAQK,CAAAA,EAAQ,CAAG,KAAK,SAAA,CAAUJ,CAAQ,CAAC,EAC5D,CAAA,KAAQ,CAAqB,CAC/B,CAEA,SAASM,CAAAA,EAAgB,CACvB,GAAI,CACF,IAAM1hB,CAAAA,CAAM,cAAA,CAAe,QAAQwhB,CAAAA,EAAS,CAAA,CAC5C,GAAIxhB,CAAAA,CAAK,CACP,IAAMohB,CAAAA,CAAW,IAAA,CAAK,KAAA,CAAMphB,CAAG,CAAA,CAE3B,IAAA,CAAK,GAAA,EAAI,CAAIohB,CAAAA,CAAS,UAAY,IAAA,CAAU,GAAA,EAC9CE,CAAAA,CAAgBF,CAAQ,EAE5B,CACF,CAAA,KAAQ,CAAQ,CAClB,CAGA,OAAA,MAAA,CAAO,gBAAA,CAAiB,cAAA,CAAgBK,CAAI,CAAA,CAC5C,MAAA,CAAO,gBAAA,CAAiB,WAAY,IAAM,CACxC,qBAAA,CAAsBC,CAAO,EAC/B,CAAC,CAAA,CAGG,WAAA,CAAY,gBAAA,CAAiB,YAAY,CAAA,CAAE,CAAC,CAAA,EAAG,IAAA,GAAS,cAAA,EAC1D,qBAAA,CAAsBA,CAAO,CAAA,CAGxB,IAAM,CACX,MAAA,CAAO,mBAAA,CAAoB,cAAA,CAAgBD,CAAI,EACjD,CACF,CCpQO,SAASE,EAAAA,CACdnkB,CAAAA,CACA8W,CAAAA,CACA7b,GAAAA,CAAwB,GACZ,CACZ,GAAM,CAAE,SAAA,CAAAmpB,CAAAA,CAAY,KAAA,CAAO,IAAA,CAAAC,CAAAA,CAAO,KAAA,CAAO,QAAA,CAAU9G,CAAAA,CAAY,IAAA,CAAA+G,CAAAA,CAAO,KAAM,CAAA,CAAIrpB,GAAAA,CAE1EspB,EAAU,KAAA,CAAM,OAAA,CAAQvkB,CAAM,CAAA,CAC9BsiB,CAAAA,CAAUiC,CAAAA,CAAUvkB,CAAAA,CAAS,CAACA,CAAM,CAAA,CAEtCwkB,CAAAA,CAAmBlC,CAAAA,CAAQ,GAAA,CAAI,IAAG,CAAA,CAAY,CAAA,CAC9CmC,CAAAA,CAAU,KACVhH,CAAAA,CAAsD,IAAA,CACtD/hB,CAAAA,CAAW,KAAA,CACXgpB,CAAAA,CAAqC,IAAA,CAEnC3mB,CAAAA,CAAU,IAAM,CACpBrC,CAAAA,CAAW,IAAA,CACP+hB,CAAAA,EAAe,YAAA,CAAaA,CAAa,CAAA,CAC7CiH,CAAAA,KACF,CAAA,CAEAA,CAAAA,CAAgB9pB,CAAAA,CAAO,IAAM,CAE3B,IAAM+pB,CAAAA,CAAYrC,CAAAA,CAAQ,GAAA,CAAK9Z,CAAAA,EAAMA,CAAAA,EAAG,CAAA,CAExC,GAAIic,CAAAA,CAAS,CACXA,EAAU,KAAA,CACVD,CAAAA,CAAYF,CAAAA,CAAOK,CAAAA,CAAU,GAAA,CAAIC,EAAS,CAAA,CAAI,CAAC,GAAGD,CAAS,CAAA,CAEvDP,CAAAA,EACFS,CAAAA,CAAaF,CAAAA,CAAWrC,CAAAA,CAAQ,GAAA,CAAI,IAAG,CAAA,CAAY,CAAC,CAAA,CAEtD,MACF,CAOA,GAAI,EAJYgC,CAAAA,CACZK,EAAU,IAAA,CAAK,CAAC9jB,CAAAA,CAAGqG,CAAAA,GAAM,CAAC4d,EAAAA,CAAUjkB,CAAAA,CAAG2jB,CAAAA,CAAUtd,CAAC,CAAC,CAAC,CAAA,CACpDyd,CAAAA,CAAU,IAAA,CAAK,CAAC9jB,CAAAA,CAAGqG,CAAAA,GAAM,CAAC,MAAA,CAAO,EAAA,CAAGrG,CAAAA,CAAG2jB,CAAAA,CAAUtd,CAAC,CAAC,CAAC,GAE1C,OAEd,IAAM6d,CAAAA,CAAa,CAAC,GAAGP,CAAS,CAAA,CAChCA,CAAAA,CAAYF,CAAAA,CAAOK,CAAAA,CAAU,GAAA,CAAIC,EAAS,CAAA,CAAI,CAAC,GAAGD,CAAS,EAE3DE,CAAAA,CAAaF,CAAAA,CAAWI,CAAU,EACpC,CAAC,CAAA,CAED,SAASF,CAAAA,CAAaG,CAAAA,CAAgBC,CAAAA,CAAsB,CAC1D,GAAIvpB,CAAAA,CAAU,OAEd,IAAMwpB,CAAAA,CAAS,IAAM,CACfb,CAAAA,GAGF3oB,CAAAA,CAAW,IAAA,CACX,cAAA,CAAeqC,CAAO,CAAA,CAAA,CAGpBwmB,CAAAA,CACFzN,EAASkO,CAAAA,CAASC,CAAO,CAAA,CAEzBnO,CAAAA,CAASkO,CAAAA,CAAQ,CAAC,CAAA,CAAGC,CAAAA,CAAQ,CAAC,CAAC,EAEnC,CAAA,CAEI1H,CAAAA,EAAcA,CAAAA,CAAa,CAAA,EACzBE,CAAAA,EAAe,YAAA,CAAaA,CAAa,CAAA,CAC7CA,CAAAA,CAAgB,UAAA,CAAWyH,CAAAA,CAAQ3H,CAAU,CAAA,EAE7C2H,CAAAA,GAEJ,CAEA,OAAOnnB,CACT,CAeO,SAASonB,EAAAA,CACdnlB,CAAAA,CACA8W,CAAAA,CACY,CACZ,OAAOqN,EAAAA,CAAMnkB,CAAAA,CAAQ8W,CAAAA,CAAU,CAAE,IAAA,CAAM,IAAK,CAAC,CAC/C,CAeO,SAASsO,EAAAA,CACdplB,CAAAA,CACA8W,CAAAA,CACAvX,CAAAA,CACY,CACZ,OAAO4kB,EAAAA,CAAMnkB,CAAAA,CAAQ8W,CAAAA,CAAU,CAAE,QAAA,CAAUvX,CAAG,CAAC,CACjD,CAMA,SAASqlB,EAAAA,CAAarrB,CAAAA,CAAa,CACjC,GAAIA,CAAAA,GAAU,IAAA,EAAQ,OAAOA,CAAAA,EAAU,QAAA,CAAU,OAAOA,CAAAA,CACxD,GAAI,CACF,OAAO,IAAA,CAAK,MAAM,IAAA,CAAK,SAAA,CAAUA,CAAK,CAAC,CACzC,CAAA,KAAQ,CACN,OAAOA,CACT,CACF,CAEA,SAASurB,EAAAA,CAAUpjB,CAAAA,CAAYC,CAAAA,CAAqB,CAClD,GAAI,MAAA,CAAO,EAAA,CAAGD,CAAAA,CAAGC,CAAC,CAAA,CAAG,OAAO,KAAA,CAC5B,GAAID,CAAAA,GAAM,IAAA,EAAQC,CAAAA,GAAM,IAAA,EAAQ,OAAOD,CAAAA,EAAM,QAAA,EAAY,OAAOC,GAAM,QAAA,CAAU,OAAO,MAAA,CACvF,GAAI,CACF,OAAO,IAAA,CAAK,SAAA,CAAUD,CAAC,CAAA,GAAM,IAAA,CAAK,SAAA,CAAUC,CAAC,CAC/C,CAAA,KAAQ,CACN,OAAO,MACT,CACF,CCnLA,IAAM0jB,EAAAA,CAAa,MAAA,CAAO,YAAY,CAAA,CAChCC,GAAU,MAAA,CAAO,SAAS,CAAA,CAmBzB,SAASC,EAAAA,CAA6BnjB,CAAAA,CAAgC,CAC3E,IAAMojB,EAAU5rB,CAAAA,CAAO,CAAC,CAAA,CAClB4I,CAAAA,CAAM,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,SAAA,CAAUJ,CAAY,CAAC,CAAA,CAEnD,SAASqjB,CAAAA,EAAe,CACtBD,CAAAA,CAAQ,MAAA,CAAQ3kB,GAAMA,CAAAA,CAAI,CAAC,EAC7B,CAEA,SAAS6kB,CAAAA,CAA8BlqB,CAAAA,CAAWkX,CAAAA,CAAiB,EAAC,CAAkB,CACpF,OAAO,IAAI,KAAA,CAAMlX,CAAAA,CAAQ,CACvB,IAAIiX,CAAAA,CAAK1C,CAAAA,CAAM4V,CAAAA,CAAU,CAEvB,GAAI5V,CAAAA,GAAS,MAAA,CAAQ,OAAO,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,SAAA,CAAUvN,CAAG,CAAC,CAAA,CAC1D,GAAIuN,IAAS,SAAA,CAAW,OAAO,KAAQyV,CAAAA,EAAQ,CAAU,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,UAAUhjB,CAAG,CAAC,CAAA,CAAA,CACvF,GAAIuN,CAAAA,GAASsV,EAAAA,CAAY,OAAOG,CAAAA,CAChC,GAAIzV,CAAAA,GAASuV,EAAAA,CAAS,OAAO9iB,CAAAA,CAE7B,IAAMjJ,CAAAA,CAAQ,OAAA,CAAQ,GAAA,CAAIkZ,CAAAA,CAAK1C,CAAAA,CAAM4V,CAAQ,CAAA,CAM7C,OAHAH,CAAAA,EAAQ,CAGJjsB,CAAAA,GAAU,MAAQ,OAAOA,CAAAA,EAAU,QAAA,CAC9BmsB,CAAAA,CAAYnsB,CAAAA,CAAO,CAAC,GAAGmZ,CAAAA,CAAM,MAAA,CAAO3C,CAAI,CAAC,CAAC,CAAA,CAG5CxW,CACT,CAAA,CAEA,GAAA,CAAIkZ,EAAK1C,CAAAA,CAAMxW,CAAAA,CAAO,CACpB,IAAMuI,CAAAA,CAAS,OAAA,CAAQ,GAAA,CAAI2Q,CAAAA,CAAK1C,CAAAA,CAAMxW,CAAK,CAAA,CAC3C,OAAAksB,CAAAA,EAAO,CACA3jB,CACT,CAAA,CAEA,eAAe2Q,CAAAA,CAAK1C,CAAAA,CAAM,CACxB,IAAMjO,CAAAA,CAAS,OAAA,CAAQ,cAAA,CAAe2Q,CAAAA,CAAK1C,CAAI,CAAA,CAC/C,OAAA0V,CAAAA,EAAO,CACA3jB,CACT,CACF,CAAC,CACH,CAGA,OACqB4jB,CAAAA,CAAYljB,CAAG,CAKtC,CAKO,SAASojB,EAAAA,CAASC,CAAAA,CAAyB,CAChD,OAAQA,CAAAA,CAAc,IAAA,EAAQA,CAChC,CAKO,SAASC,EAAAA,CAAavsB,CAAAA,CAAyB,CACpD,GAAIA,CAAAA,GAAU,IAAA,EAAQ,OAAOA,CAAAA,EAAU,QAAA,CAAU,OAAO,MAAA,CACxD,GAAI,CACF,OAAQA,EAAc8rB,EAAU,CAAA,GAAM,KAAA,CACxC,CAAA,KAAQ,CACN,OAAO,MACT,CACF,CC1DO,SAASU,EAAAA,EAA4E,CAC1F,IAAMC,CAAAA,CAAY,IAAI,GAAA,CAEtB,SAASC,CAAAA,CAAOtiB,CAAAA,CAAkC,CAChD,IAAIuiB,CAAAA,CAAMF,CAAAA,CAAU,GAAA,CAAIriB,CAAK,EAC7B,OAAKuiB,CAAAA,GACHA,CAAAA,CAAM,IAAI,GAAA,CACVF,CAAAA,CAAU,GAAA,CAAIriB,CAAAA,CAAOuiB,CAAG,CAAA,CAAA,CAEnBA,CACT,CAEA,OAAO,CACL,EAAA,CAA+BviB,CAAAA,CAAU1E,CAAAA,CAAyC,CAChF,OAAAgnB,CAAAA,CAAOtiB,CAAK,CAAA,CAAE,GAAA,CAAI1E,CAAuB,CAAA,CAClC,IAAMgnB,CAAAA,CAAOtiB,CAAK,CAAA,CAAE,MAAA,CAAO1E,CAAuB,CAC3D,CAAA,CAEA,IAAA,CAAiC0E,CAAAA,CAAU1E,CAAAA,CAAyC,CAClF,IAAM2P,CAAAA,CAA+B2B,CAAAA,EAAS,CAC5C0V,CAAAA,CAAOtiB,CAAK,CAAA,CAAE,MAAA,CAAOiL,CAAuB,CAAA,CAC5C3P,CAAAA,CAAQsR,CAAI,EACd,CAAA,CACA,OAAA0V,CAAAA,CAAOtiB,CAAK,CAAA,CAAE,GAAA,CAAIiL,CAAuB,CAAA,CAClC,IAAMqX,EAAOtiB,CAAK,CAAA,CAAE,MAAA,CAAOiL,CAAuB,CAC3D,CAAA,CAEA,IAAA,CAAiCjL,CAAAA,CAAU4M,EAAkB,CAC3D,IAAM2V,CAAAA,CAAMF,CAAAA,CAAU,GAAA,CAAIriB,CAAK,CAAA,CAC/B,GAAIuiB,EACF,IAAA,IAAWjnB,CAAAA,IAAW,KAAA,CAAM,IAAA,CAAKinB,CAAG,CAAA,CAClCjnB,CAAAA,CAAQsR,CAAI,EAGlB,CAAA,CAEA,GAAA,CAAgC5M,CAAAA,CAAU1E,CAAAA,CAAmC,CAC3EgnB,CAAAA,CAAOtiB,CAAK,EAAE,MAAA,CAAO1E,CAAuB,EAC9C,CAAA,CAEA,KAAA,CAAM0E,CAAAA,CAAgC,CAChCA,CAAAA,CACFqiB,CAAAA,CAAU,MAAA,CAAOriB,CAAK,CAAA,CAEtBqiB,CAAAA,CAAU,KAAA,GAEd,CAAA,CAEA,cAAcriB,CAAAA,CAAiC,CAC7C,OAAOqiB,CAAAA,CAAU,GAAA,CAAIriB,CAAK,CAAA,EAAG,IAAA,EAAQ,CACvC,CAAA,CAEA,YAAA,CAAaA,CAAAA,CAAkC,CAC7C,OAAA,CAAQqiB,CAAAA,CAAU,GAAA,CAAIriB,CAAK,CAAA,EAAG,IAAA,EAAQ,CAAA,EAAK,CAC7C,CACF,CACF,CAMA,IAAIwiB,GAAkC,IAAA,CAe/B,SAASC,EAAAA,EAA4E,CAC1F,OAAKD,EAAAA,GACHA,EAAAA,CAAYJ,EAAAA,IAEPI,EACT,CCpIA,IAAME,EAAAA,CAAY,IAAI,GAAA,CAAI,CACxB,GAAA,CAAK,MAAA,CAAQ,SAAA,CAAW,SAAA,CAAW,OAAA,CAAS,GAAA,CAAK,KAAA,CAAO,KAAA,CACxD,YAAA,CAAc,KAAM,SAAA,CAAW,MAAA,CAAQ,MAAA,CAAQ,KAAA,CAAO,UAAA,CACtD,IAAA,CAAM,KAAA,CAAO,SAAA,CAAW,KAAA,CAAO,KAAA,CAAO,IAAA,CAAM,IAAA,CAAM,IAAA,CAAM,YAAA,CACxD,QAAA,CAAU,QAAA,CAAU,KAAM,IAAA,CAAM,IAAA,CAAM,IAAA,CAAM,IAAA,CAAM,IAAA,CAAM,QAAA,CACxD,IAAA,CAAM,GAAA,CAAK,KAAA,CAAO,KAAA,CAAO,KAAA,CAAO,IAAA,CAAM,MAAA,CAAQ,MAAA,CAAQ,KAAA,CAAO,IAAA,CAC7D,IAAK,KAAA,CAAO,GAAA,CAAK,IAAA,CAAM,IAAA,CAAM,MAAA,CAAQ,GAAA,CAAK,MAAA,CAAQ,SAAA,CAAW,QAC7D,MAAA,CAAQ,QAAA,CAAU,KAAA,CAAO,SAAA,CAAW,KAAA,CAAO,OAAA,CAAS,OAAA,CAAS,IAAA,CAC7D,QAAS,IAAA,CAAM,OAAA,CAAS,MAAA,CAAQ,IAAA,CAAM,GAAA,CAAK,IAAA,CAAM,KAAA,CAAO,KAC1D,CAAC,CAAA,CAGKC,EAAAA,CAAa,IAAI,GAAA,CAAI,CACzB,KAAA,CAAO,OAAA,CAAS,MAAO,MAAA,CAAQ,IAAA,CAAM,MAAA,CAAQ,MAAA,CAAQ,KAAA,CACrD,KAAA,CAAO,OAAA,CAAS,UAAA,CAAY,QAAA,CAAU,OAAA,CAAS,MAAA,CAAQ,OAAA,CACvD,QAAA,CAAU,SAAA,CAAW,SAAA,CAAW,OAAA,CAAS,UAAW,UACtD,CAAC,CAAA,CAGKC,EAAAA,CAAsB,+BAAA,CAGtBC,EAAAA,CAAkB,MAAA,CA8BjB,SAASC,EAAAA,CAASvpB,CAAAA,CAAcjC,CAAAA,CAA2B,EAAC,CAAW,CAC5E,GAAI,OAAO,SAAa,GAAA,CAEtB,OAAOiC,CAAAA,CAAK,OAAA,CAAQ,UAAA,CAAY,EAAE,CAAA,CAGpC,GAAM,CACJ,SAAA,CAAAwpB,CAAAA,CAAY,EAAC,CACb,UAAA,CAAAC,CAAAA,CAAa,EAAC,CACd,eAAAC,CAAAA,CAAiB,IAAA,CACjB,cAAA,CAAAC,CAAAA,CAAiB,IAAA,CACjB,UAAA,CAAAC,CAAAA,CAAa,KAAA,CACb,SAAA,CAAAC,CAAAA,CACA,UAAA,CAAAC,CACF,CAAA,CAAI/rB,CAAAA,CAEEgsB,CAAAA,CAAc,IAAI,IAAI,CAAC,GAAGZ,EAAAA,CAAW,GAAGK,CAAS,CAAC,CAAA,CAClDQ,CAAAA,CAAe,IAAI,GAAA,CAAI,CAAC,GAAGZ,EAAAA,CAAY,GAAGK,CAAU,CAAC,EAEtDG,CAAAA,EAAYI,CAAAA,CAAa,MAAA,CAAO,OAAO,CAAA,CAG5C,IAAMC,CAAAA,CAAM,IAAI,SAAA,EAAU,CAAE,eAAA,CAAgBjqB,CAAAA,CAAM,WAAW,CAAA,CAC7D,OAAAkqB,EAAAA,CAAaD,EAAI,IAAA,CAAMF,CAAAA,CAAaC,CAAAA,CAAcN,CAAAA,CAAgBC,CAAAA,CAAgBE,CAAAA,CAAWC,CAAU,CAAA,CAEhGG,EAAI,IAAA,CAAK,SAClB,CAEA,SAASC,EAAAA,CACP/rB,CAAAA,CACA4rB,CAAAA,CACAC,CAAAA,CACAN,EACAC,CAAAA,CACAE,CAAAA,CACAC,CAAAA,CACM,CACN,IAAMK,CAAAA,CAAW,KAAA,CAAM,IAAA,CAAKhsB,CAAAA,CAAK,UAAU,CAAA,CAE3C,IAAA,IAAWisB,CAAAA,IAASD,CAAAA,CAClB,GAAIC,CAAAA,CAAM,WAAa,IAAA,CAAK,YAAA,CAAc,CACxC,IAAMnrB,CAAAA,CAAKmrB,CAAAA,CACLlsB,CAAAA,CAAMe,CAAAA,CAAG,OAAA,CAAQ,WAAA,EAAY,CAKnC,GAAI,EAFc4qB,CAAAA,CAAYA,CAAAA,CAAU3rB,CAAG,EAAI6rB,CAAAA,CAAY,GAAA,CAAI7rB,CAAG,CAAA,CAAA,CAElD,CAEd,IAAMuH,CAAAA,CAAO,QAAA,CAAS,cAAA,CAAexG,CAAAA,CAAG,WAAA,EAAe,EAAE,CAAA,CACzDd,CAAAA,CAAK,YAAA,CAAasH,CAAAA,CAAM2kB,CAAK,CAAA,CAC7B,QACF,CAGA,IAAMC,CAAAA,CAAQ,KAAA,CAAM,IAAA,CAAKprB,CAAAA,CAAG,UAAU,CAAA,CACtC,IAAA,IAAWib,CAAAA,IAAQmQ,CAAAA,CAAO,CACxB,IAAMjuB,CAAAA,CAAO8d,CAAAA,CAAK,KAAK,WAAA,EAAY,CAC7B7d,CAAAA,CAAQ6d,CAAAA,CAAK,KAAA,CAGnB,GAAIoP,EAAAA,CAAgB,IAAA,CAAKltB,CAAI,CAAA,CAAG,CAC9B6C,CAAAA,CAAG,eAAA,CAAgBib,CAAAA,CAAK,IAAI,CAAA,CAC5B,QACF,CAGA,GAAI,EAAA9d,CAAAA,CAAK,UAAA,CAAW,OAAO,CAAA,EAAKstB,CAAAA,CAAAA,EAC5B,EAAAttB,CAAAA,CAAK,UAAA,CAAW,OAAO,CAAA,EAAKutB,CAAAA,CAAAA,CAGhC,CAAA,GAAIG,CAAAA,EAAc,CAACA,CAAAA,CAAW1tB,CAAAA,CAAMC,CAAAA,CAAO6B,CAAG,CAAA,CAAG,CAC/Ce,CAAAA,CAAG,eAAA,CAAgBib,CAAAA,CAAK,IAAI,CAAA,CAC5B,QACF,CAGA,GAAI,CAAC8P,CAAAA,CAAa,IAAI5tB,CAAI,CAAA,CAAG,CAC3B6C,CAAAA,CAAG,eAAA,CAAgBib,CAAAA,CAAK,IAAI,CAAA,CAC5B,QACF,CAGA,GAAA,CAAK9d,CAAAA,GAAS,MAAA,EAAUA,CAAAA,GAAS,KAAA,GAAUitB,EAAAA,CAAoB,IAAA,CAAKhtB,CAAK,CAAA,CAAG,CAC1E4C,CAAAA,CAAG,eAAA,CAAgBib,CAAAA,CAAK,IAAI,CAAA,CAC5B,QACF,CAAA,CACF,CAGAgQ,EAAAA,CAAajrB,CAAAA,CAAI8qB,CAAAA,CAAaC,CAAAA,CAAcN,CAAAA,CAAgBC,CAAAA,CAAgBE,EAAWC,CAAU,EACnG,CAEJ,CAKO,SAASQ,EAAAA,CAAWpX,CAAAA,CAAqB,CAC9C,OAAOA,CAAAA,CACJ,OAAA,CAAQ,IAAA,CAAM,OAAO,CAAA,CACrB,OAAA,CAAQ,IAAA,CAAM,MAAM,CAAA,CACpB,OAAA,CAAQ,IAAA,CAAM,MAAM,CAAA,CACpB,OAAA,CAAQ,IAAA,CAAM,QAAQ,CAAA,CACtB,OAAA,CAAQ,IAAA,CAAM,OAAO,CAC1B,CAUO,SAASqX,EAAAA,CAAetrB,EAAiBlB,CAAAA,CAAmD,CACjG,OAAQiC,CAAAA,EAAiB,CACvBf,CAAAA,CAAG,SAAA,CAAYsqB,EAAAA,CAASvpB,EAAMjC,CAAO,EACvC,CACF,CAgCO,SAASysB,EAAAA,CAAYlqB,CAAAA,CAAoB,GAAY,CAc1D,IAAMmqB,CAAAA,CAAa,CAAE,GAbsB,CACzC,aAAA,CAAe,CAAC,QAAQ,CAAA,CACxB,YAAA,CAAc,CAAC,QAAQ,CAAA,CACvB,WAAA,CAAa,CAAC,SAAU,iBAAiB,CAAA,CACzC,SAAA,CAAW,CAAC,QAAA,CAAU,OAAA,CAAS,QAAQ,CAAA,CACvC,UAAA,CAAY,CAAC,QAAA,CAAU,QAAQ,CAAA,CAC/B,aAAA,CAAe,CAAC,QAAQ,EACxB,iBAAA,CAAmB,CAAC,QAAQ,CAAA,CAC5B,UAAA,CAAY,CAAC,QAAQ,CAAA,CACrB,aAAA,CAAe,CAAC,QAAQ,CAAA,CACxB,YAAA,CAAc,CAAC,QAAQ,CACzB,EAEkC,GAAGnqB,CAAAA,CAAO,UAAW,CAAA,CAGvD,GAAIA,CAAAA,CAAO,KAAA,CAAO,CAChB,IAAMoqB,CAAAA,CAAa,CAAA,OAAA,EAAUpqB,CAAAA,CAAO,KAAK,CAAA,CAAA,CAAA,CACrCmqB,CAAAA,CAAW,YAAY,CAAA,EACzBA,EAAW,YAAY,CAAA,CAAE,IAAA,CAAKC,CAAU,CAAA,CAEtCD,CAAAA,CAAW,WAAW,CAAA,EACxBA,CAAAA,CAAW,WAAW,CAAA,CAAE,IAAA,CAAKC,CAAU,EAE3C,CAGA,OAAIpqB,EAAO,SAAA,GACTmqB,CAAAA,CAAW,YAAY,CAAA,CAAI,CAACnqB,CAAAA,CAAO,SAAS,CAAA,CAAA,CAGvC,MAAA,CAAO,OAAA,CAAQmqB,CAAU,CAAA,CAC7B,GAAA,CAAI,CAAC,CAACzpB,CAAAA,CAAKsc,CAAM,CAAA,GAAM,CAAA,EAAGtc,CAAG,CAAA,CAAA,EAAIsc,CAAAA,CAAO,IAAA,CAAK,GAAG,CAAC,CAAA,CAAE,CAAA,CACnD,IAAA,CAAK,IAAI,CACd,CAKO,SAASqN,EAAAA,CAAiBrqB,EAAoB,EAAC,CAAW,CAC/D,OAAOA,CAAAA,CAAO,UAAA,CACV,qCAAA,CACA,yBACN,CAsCO,SAASsqB,EAAAA,CAAwBtqB,CAAAA,CAAgC,EAAC,CAA2B,CAClG,IAAMslB,CAAAA,CAAkC,EAAC,CAGzC,GAAItlB,CAAAA,CAAO,GAAA,GAAQ,KAAA,CAAO,CACxB,IAAMuqB,CAAAA,CAAYvqB,CAAAA,CAAO,GAAA,EAAO,EAAC,CACjCslB,CAAAA,CAAQ+E,EAAAA,CAAiBE,CAAS,CAAC,EAAIL,EAAAA,CAAYK,CAAS,EAC9D,CAgBA,GAbIvqB,CAAAA,CAAO,YAAA,GAAiB,KAAA,GAC1BslB,CAAAA,CAAQ,iBAAiB,CAAA,CAAItlB,CAAAA,CAAO,YAAA,EAAgB,MAAA,CAAA,CAIlDA,CAAAA,CAAO,kBAAA,GAAuB,QAChCslB,CAAAA,CAAQ,wBAAwB,CAAA,CAAI,SAAA,CAAA,CAItCA,CAAAA,CAAQ,kBAAkB,CAAA,CAAItlB,CAAAA,CAAO,aAAA,CAAgB,eAAA,CAAkB,GAAA,CAGnEA,CAAAA,CAAO,IAAA,GAAS,KAAA,CAAO,CACzB,IAAMwqB,EAAOxqB,CAAAA,CAAO,IAAA,EAAQ,CAAE,MAAA,CAAQ,OAAA,CAAU,iBAAA,CAAmB,IAAK,CAAA,CACpEjE,EAAQ,CAAA,QAAA,EAAWyuB,CAAAA,CAAK,MAAM,CAAA,CAAA,CAC9BA,CAAAA,CAAK,iBAAA,GAAmBzuB,CAAAA,EAAS,qBAAA,CAAA,CACjCyuB,EAAK,OAAA,GAASzuB,CAAAA,EAAS,WAAA,CAAA,CAC3BupB,CAAAA,CAAQ,2BAA2B,CAAA,CAAIvpB,EACzC,CAQA,GALIiE,CAAAA,CAAO,cAAA,GAAmB,KAAA,GAC5BslB,CAAAA,CAAQ,iBAAiB,CAAA,CAAItlB,CAAAA,CAAO,gBAAkB,iCAAA,CAAA,CAIpDA,CAAAA,CAAO,iBAAA,GAAsB,KAAA,CAAO,CACtC,IAAMyqB,CAAAA,CAASzqB,CAAAA,CAAO,iBAAA,EAAqB,CACzC,MAAA,CAAQ,EAAC,CACT,UAAA,CAAY,EAAC,CACb,YAAa,EAAC,CACd,OAAA,CAAW,EACb,CAAA,CACAslB,CAAAA,CAAQ,oBAAoB,CAAA,CAAI,MAAA,CAAO,OAAA,CAAQmF,CAAM,CAAA,CAClD,GAAA,CAAI,CAAC,CAAC/pB,EAAKsc,CAAM,CAAA,GAAM,CAAA,EAAGtc,CAAG,CAAA,EAAA,EAAKsc,CAAAA,CAAO,IAAA,CAAK,GAAG,CAAC,CAAA,CAAA,CAAG,CAAA,CACrD,IAAA,CAAK,IAAI,EACd,CAGA,OAAIhd,CAAAA,CAAO,OAAS,KAAA,GAClBslB,CAAAA,CAAQ,4BAA4B,CAAA,CAAItlB,CAAAA,CAAO,IAAA,EAAQ,aAAA,CAAA,CAIrDA,CAAAA,CAAO,IAAA,GAAS,KAAA,GAClBslB,CAAAA,CAAQ,8BAA8B,CAAA,CAAItlB,CAAAA,CAAO,IAAA,EAAQ,cAAA,CAAA,CAGpDslB,CACT,CAcO,SAASoF,EAAAA,CACd1sB,CAAAA,CAAAA,GACG8mB,CAAAA,CACA,CACH,IAAM6F,CAAAA,CAAiB,IAAI,GAAA,CAAI,CAAC,WAAA,CAAa,aAAA,CAAe,WAAW,CAAC,CAAA,CAExE,QAAWnoB,CAAAA,IAAUsiB,CAAAA,CACnB,GAAI,EAAA,CAACtiB,CAAAA,EAAU,OAAOA,CAAAA,EAAW,QAAA,CAAA,CAEjC,IAAA,IAAW9B,CAAAA,IAAO,MAAA,CAAO,IAAA,CAAK8B,CAAM,CAAA,CAAG,CACrC,GAAImoB,EAAe,GAAA,CAAIjqB,CAAG,CAAA,CAAG,SAE7B,IAAMkqB,CAAAA,CAAa5sB,CAAAA,CAAe0C,CAAG,EAC/BmqB,CAAAA,CAAaroB,CAAAA,CAAe9B,CAAG,CAAA,CAEjCoqB,EAAAA,CAAcD,CAAS,CAAA,EAAKC,EAAAA,CAAcF,CAAS,CAAA,CACpD5sB,CAAAA,CAAe0C,CAAG,CAAA,CAAIgqB,EAAAA,CAAU,CAAE,GAAGE,CAAU,CAAA,CAAGC,CAAS,CAAA,CAE3D7sB,CAAAA,CAAe0C,CAAG,CAAA,CAAImqB,EAE3B,CAGF,OAAO7sB,CACT,CAKO,SAAS+sB,EAAAA,CAAc9V,CAAAA,CAAqB,CACjD,GAAIA,CAAAA,GAAQ,IAAA,EAAQ,OAAOA,CAAAA,EAAQ,QAAA,CAAU,OAAOA,CAAAA,CACpD,MAAA,CAAO,MAAA,CAAOA,CAAG,CAAA,CACjB,IAAA,IAAWlZ,CAAAA,IAAS,MAAA,CAAO,MAAA,CAAOkZ,CAAG,CAAA,CAC/B,OAAOlZ,CAAAA,EAAU,QAAA,EAAYA,CAAAA,GAAU,IAAA,EACzCgvB,EAAAA,CAAWhvB,CAAK,CAAA,CAGpB,OAAOkZ,CACT,CAEA,SAAS6V,EAAAA,CAAcrY,CAAAA,CAA8C,CACnE,OAAOA,CAAAA,GAAQ,IAAA,EAAQ,OAAOA,CAAAA,EAAQ,QAAA,EAAY,MAAA,CAAO,cAAA,CAAeA,CAAG,CAAA,GAAM,MAAA,CAAO,SAC1F,CAgBA,eAAsBuY,EAAAA,CAAY1vB,CAAAA,CAAiB2vB,CAAAA,CAA4C,QAAA,CAA2B,CAExH,IAAMlY,CAAAA,CADU,IAAI,WAAA,EAAY,CACX,MAAA,CAAOzX,CAAO,CAAA,CAE7B4vB,CAAAA,CAAWD,CAAAA,GAAc,SAAW,SAAA,CAAYA,CAAAA,GAAc,QAAA,CAAW,SAAA,CAAY,SAAA,CACrFE,CAAAA,CAAa,MAAM,MAAA,CAAO,MAAA,CAAO,MAAA,CAAOD,CAAAA,CAAUnY,CAAI,CAAA,CACtDqY,CAAAA,CAAY,IAAI,UAAA,CAAWD,CAAU,CAAA,CACrCE,CAAAA,CAAS,IAAA,CAAK,MAAA,CAAO,YAAA,CAAa,GAAGD,CAAS,CAAC,CAAA,CAErD,OAAO,CAAA,EAAGH,CAAS,CAAA,CAAA,EAAII,CAAM,CAAA,CAC/B,CASO,SAASC,EAAAA,EAA4B,CAC1C,IAAMC,CAAAA,CAAQ,IAAI,UAAA,CAAW,EAAE,CAAA,CAC/B,cAAO,eAAA,CAAgBA,CAAK,CAAA,CACrB,KAAA,CAAM,IAAA,CAAKA,CAAAA,CAAQpnB,CAAAA,EAAMA,CAAAA,CAAE,SAAS,EAAE,CAAA,CAAE,QAAA,CAAS,CAAA,CAAG,GAAG,CAAC,CAAA,CAAE,IAAA,CAAK,EAAE,CAC1E,CAWO,SAASqnB,EAAAA,CAAsB/tB,CAAAA,CAIlC,EAAC,CAAG,CACN,GAAM,CACJ,UAAA,CAAAguB,CAAAA,CAAa,cAAA,CACb,UAAA,CAAAC,CAAAA,CAAa,YAAA,CACb,cAAA,CAAAC,CAAAA,CAAiBL,EACnB,CAAA,CAAI7tB,CAAAA,CAEAmuB,CAAAA,CAAuB,IAAA,CAE3B,SAASC,GAAmB,CAC1B,GAAI,CAACD,CAAAA,CAAO,CAEV,GAAI,OAAO,QAAA,CAAa,GAAA,CAAa,CACnC,IAAMxP,CAAAA,CAAQ,QAAA,CAAS,MAAA,CAAO,KAAA,CAAM,IAAI,OAAO,CAAA,EAAGsP,CAAU,CAAA,QAAA,CAAU,CAAC,CAAA,CACvE,GAAItP,CAAAA,CACF,OAAAwP,EAAQxP,CAAAA,CAAM,CAAC,CAAA,CACRwP,CAEX,CAEAA,CAAAA,CAAQD,CAAAA,GACV,CACA,OAAOC,CACT,CAWA,OAAO,CACL,WAAA,CAVkB,MAAOE,CAAAA,CAAkBtkB,CAAAA,GAAiE,CAC5G,IAAM6d,CAAAA,CAASyG,CAAAA,CAAQ,MAAA,CAAO,WAAA,EAAY,CAE1C,OAAI,CAAC,MAAA,CAAQ,KAAA,CAAO,OAAA,CAAS,QAAQ,CAAA,CAAE,QAAA,CAASzG,CAAM,CAAA,EACpDyG,CAAAA,CAAQ,OAAA,CAAQ,GAAA,CAAIL,CAAAA,CAAYI,CAAAA,EAAU,CAAA,CAErCrkB,EAAKskB,CAAO,CACrB,CAAA,CAIE,KAAA,CAAOD,CAAAA,CACP,OAAA,EAAU,CAAED,CAAAA,CAAQD,CAAAA,GAAkB,CACxC,CACF,CAcO,SAASI,EAAAA,CAAYlR,CAAAA,CAAapd,EAIrC,EAAC,CAAkB,CACrB,GAAM,CACJ,YAAA,CAAAuuB,CAAAA,CACA,gBAAA,CAAAC,EAAmB,CAAC,OAAA,CAAS,QAAQ,CAAA,CACrC,aAAA,CAAAC,CAAAA,CAAgB,IAClB,CAAA,CAAIzuB,EAGJ,GAAIod,CAAAA,CAAI,UAAA,CAAW,GAAG,CAAA,EAAK,CAACA,CAAAA,CAAI,UAAA,CAAW,IAAI,CAAA,CAC7C,OAAOqR,CAAAA,CAAgBrR,CAAAA,CAAM,IAAA,CAG/B,GAAI,CACF,IAAMsR,CAAAA,CAAS,IAAI,GAAA,CAAItR,CAAG,CAAA,CAM1B,OAHI,CAACoR,CAAAA,CAAiB,QAAA,CAASE,CAAAA,CAAO,QAAQ,CAAA,EAG1CH,CAAAA,EAAgB,CAACA,CAAAA,CAAa,QAAA,CAASG,EAAO,QAAQ,CAAA,CAAU,IAAA,CAE7DA,CAAAA,CAAO,QAAA,EAChB,CAAA,KAAQ,CACN,OAAO,IACT,CACF,CAaO,SAASC,EAAAA,CAAkB3uB,CAAAA,CAG/B,CACD,GAAM,CAAE,WAAA,CAAA4uB,CAAAA,CAAa,QAAA,CAAAC,CAAS,CAAA,CAAI7uB,CAAAA,CAC5B8uB,CAAAA,CAAqB,EAAC,CAE5B,OAAO,CACL,KAAA,EAAiB,CACf,IAAMxpB,CAAAA,CAAM,IAAA,CAAK,KAAI,CAErB,KAAOwpB,CAAAA,CAAS,MAAA,CAAS,CAAA,EAAKA,CAAAA,CAAS,CAAC,CAAA,CAAIxpB,CAAAA,CAAMupB,CAAAA,EAChDC,CAAAA,CAAS,KAAA,EAAM,CAEjB,OAAIA,CAAAA,CAAS,MAAA,EAAUF,EAAoB,KAAA,EAC3CE,CAAAA,CAAS,IAAA,CAAKxpB,CAAG,CAAA,CACV,IAAA,CACT,CAAA,CACA,SAAA,EAAoB,CAClB,IAAMA,CAAAA,CAAM,IAAA,CAAK,GAAA,EAAI,CACrB,KAAOwpB,CAAAA,CAAS,OAAS,CAAA,EAAKA,CAAAA,CAAS,CAAC,CAAA,CAAIxpB,CAAAA,CAAMupB,CAAAA,EAChDC,CAAAA,CAAS,KAAA,EAAM,CAEjB,OAAO,IAAA,CAAK,GAAA,CAAI,CAAA,CAAGF,CAAAA,CAAcE,CAAAA,CAAS,MAAM,CAClD,CAAA,CACA,KAAA,EAAc,CACZA,CAAAA,CAAS,MAAA,CAAS,EACpB,CACF,CACF,CCphBA,IAAMC,EAAAA,CAAS,IAAI,GAAA,CACfC,EAAAA,CAAkB,IAAA,CAClBC,EAAAA,CAAiD,IAAA,CAK9C,SAASC,EAAAA,CAAuBC,CAAAA,CAAwB,CAC7DH,EAAAA,CAAkBG,EACpB,CAKO,SAASC,EAAAA,CAAkBprB,CAAAA,CAA+C,CAC/EirB,EAAAA,CAAiBjrB,EACnB,CAKO,SAASqrB,EAAAA,EAAiC,CAC/CN,GAAO,KAAA,GACT,CAmBO,SAASO,EAAAA,CACd7W,CAAAA,CACA8W,CAAAA,CACG,CACH,IAAM5b,CAAAA,EAAW,CAAA,GAAI0E,CAAAA,IACnBmX,EAAAA,CAAuBD,CAAI,CAAA,CACpB9W,CAAAA,CAAG,GAAGJ,CAAI,CAAA,CAAA,CAAA,CAInB,OAAA,MAAA,CAAO,IAAA,CAAKI,CAAE,CAAA,CAAE,OAAA,CAASxV,CAAAA,EAAQ,CAC9B0Q,CAAAA,CAAgB1Q,CAAG,CAAA,CAAKwV,CAAAA,CAAWxV,CAAG,EACzC,CAAC,EAGA0Q,CAAAA,CAAgB,YAAA,CAAe4b,CAAAA,CAEzB5b,CACT,CAMO,SAAS8b,EAAAA,CAAmBnxB,CAAAA,CAAUixB,EAA0B,CACrE,OAAAC,EAAAA,CAAuBD,CAAI,CAAA,CACpBjxB,CACT,CAMA,SAASkxB,GAAuBD,CAAAA,CAA6B,CAE3D,GADI,CAACP,EAAAA,EACDD,EAAAA,CAAO,GAAA,CAAIQ,CAAAA,CAAK,IAAI,CAAA,CAAG,OAC3BR,EAAAA,CAAO,GAAA,CAAIQ,CAAAA,CAAK,IAAI,CAAA,CAEpB,IAAMjd,CAAAA,CAAkB,CACtB,CAAA,sBAAA,EAAyBid,CAAAA,CAAK,IAAI,CAAA,wBAAA,EAA2BA,CAAAA,CAAK,KAAK,CAAA,CACzE,CAAA,CAEIA,CAAAA,CAAK,QAAA,CACPjd,CAAAA,CAAM,CAAC,CAAA,EAAK,CAAA,yBAAA,EAA4Bid,EAAK,QAAQ,CAAA,CAAA,CAAA,CAErDjd,CAAAA,CAAM,CAAC,CAAA,EAAK,GAAA,CAGVid,CAAAA,CAAK,WAAA,EACPjd,CAAAA,CAAM,IAAA,CAAK,CAAA,cAAA,EAAiBid,CAAAA,CAAK,WAAW,CAAA,EAAA,CAAI,CAAA,CAG9CA,CAAAA,CAAK,SACPjd,CAAAA,CAAM,IAAA,CAAK,CAAA,EAAA,EAAKid,CAAAA,CAAK,OAAO,CAAA,CAAE,CAAA,CAGhCjd,CAAAA,CAAM,KAAK,CAAA,OAAA,EAAUid,CAAAA,CAAK,IAAA,EAAQ,gCAAgC,CAAA,CAAE,CAAA,CAEpE,IAAMnlB,CAAAA,CAAMkI,EAAM,IAAA,CAAK;AAAA,CAAI,EAEvB2c,EAAAA,CACFA,EAAAA,CAAe7kB,CAAG,CAAA,CACT,OAAO,QAAY,GAAA,EAC5B,OAAA,CAAQ,KAAKA,CAAG,EAEpB,CAMA,IAAMslB,CAAAA,CAAc,IAAI,GAAA,CAKjB,SAASC,GAAYJ,CAAAA,CAAqB,CAC/CG,EAAY,GAAA,CAAIH,CAAAA,CAAK,KAAMA,CAAI,EACjC,CAKO,SAASK,EAAAA,EAA+B,CAC7C,OAAO,KAAA,CAAM,KAAKF,CAAAA,CAAY,MAAA,EAAQ,CACxC,CAKO,SAASG,EAAAA,CAAmBC,CAAAA,CAAoC,CACrE,OAAOF,EAAAA,GAAoB,MAAA,CAAQG,CAAAA,EAAQA,EAAI,SAAA,GAAcD,CAAS,CACxE,CAKO,SAASE,GAAa3xB,CAAAA,CAAuB,CAElD,OADaqxB,CAAAA,CAAY,GAAA,CAAIrxB,CAAI,CAAA,EACpB,SAAA,GAAc,YAC7B,CAKO,SAAS4xB,GAAmB5xB,CAAAA,CAAsC,CAEvE,OADaqxB,CAAAA,CAAY,GAAA,CAAIrxB,CAAI,CAAA,EACpB,WAAA,EAAe,IAC9B,CAyBO,SAAS6xB,GACdC,CAAAA,CACqB,CACrB,IAAMtgB,CAAAA,CAAqB,GACrBugB,CAAAA,CAAmB,GAEnBC,CAAAA,CAAW,MAAA,CAAO,QAAQF,CAAQ,CAAA,CACxC,GAAIE,CAAAA,CAAS,SAAW,CAAA,CAAG,OAAO,CAAE,UAAA,CAAY,IAAA,CAAM,SAAAxgB,CAAAA,CAAU,MAAA,CAAAugB,CAAO,CAAA,CAGvE,IAAME,EAAgBD,CAAAA,CAAS,MAAA,CAAO,CAAC,CAAChyB,CAAI,IAAMA,CAAAA,CAAK,UAAA,CAAW,WAAW,CAAC,CAAA,CAE9E,GAAIiyB,CAAAA,CAAc,MAAA,CAAS,EAAG,CAC5B,IAAMC,EAAS,IAAI,GAAA,CAAID,EAAc,GAAA,CAAI,CAAC,EAAG1qB,CAAC,IAAMA,CAAAA,CAAE,KAAA,CAAM,GAAG,CAAA,CAAE,CAAC,CAAC,CAAC,CAAA,CAC9D4qB,EAAS,IAAI,GAAA,CAAIF,EAAc,GAAA,CAAI,CAAC,EAAG1qB,CAAC,IAAMA,CAAAA,CAAE,KAAA,CAAM,GAAG,CAAA,CAAE,KAAA,CAAM,EAAG,CAAC,CAAA,CAAE,KAAK,GAAG,CAAC,CAAC,CAAA,CAEnF2qB,CAAAA,CAAO,KAAO,CAAA,CAChBH,CAAAA,CAAO,KACL,CAAA,wBAAA,EAA2BE,CAAAA,CAAc,IAAI,CAAC,CAAC5iB,EAAG9H,CAAC,CAAA,GAAM,GAAG8H,CAAC,CAAA,CAAA,EAAI9H,CAAC,CAAA,CAAE,CAAA,CAAE,KAAK,IAAI,CAAC,CAAA,4DAAA,CAElF,CAAA,CACS4qB,EAAO,IAAA,CAAO,CAAA,EACvB3gB,EAAS,IAAA,CACP,CAAA,wBAAA,EAA2BygB,EAAc,GAAA,CAAI,CAAC,CAAC5iB,CAAAA,CAAG9H,CAAC,IAAM,CAAA,EAAG8H,CAAC,IAAI9H,CAAC,CAAA,CAAE,EAAE,IAAA,CAAK,IAAI,CAAC,CAAA,2EAAA,CAElF,EAEJ,CAEA,OAAO,CACL,WAAYwqB,CAAAA,CAAO,MAAA,GAAW,EAC9B,QAAA,CAAAvgB,CAAAA,CACA,OAAAugB,CACF,CACF,CC5OA,IAAMK,EAAAA,CAAiB,IAAI,GAAA,CACrBC,EAAAA,CAAiB,IAAI,GAAA,CA0C3B,SAASC,EAAahnB,CAAAA,CAAkC,CAEtD,IAAMtC,CAAAA,CADYupB,CAAAA,GACMjnB,CAAE,CAAA,CAC1B,GAAI,CAACtC,CAAAA,CAAO,OAAO,IAAA,CAEnB,IAAMshB,EAAWthB,CAAAA,CAAM,SAAA,GAEjBwpB,CAAAA,CAAmC,GACnCC,CAAAA,CAAoB,GAE1B,IAAA,GAAW,CAAC7tB,EAAK3E,CAAK,CAAA,GAAK,OAAO,OAAA,CAAQ+I,CAAK,EAC7C,GAAI,CAAApE,EAAI,UAAA,CAAW,GAAG,GACtB,GAAI,OAAO3E,GAAU,UAAA,EAAc,KAAA,GAASA,CAAAA,EAAS,QAAA,GAAYA,EAEjDA,CAAAA,EAAc,CAAA,KAAA,GACnB,OAAOA,CAAAA,EAAU,UAAA,EAAc,EAAE,KAAA,GAASA,CAAAA,CAAAA,EAAU,CAAC2E,CAAAA,CAAI,UAAA,CAAW,GAAG,CAAA,CAEhF,GAAI,CACF,IAAM4D,CAAAA,CAAUvI,GAAc,CAE1B,OAAOuI,EAAW,GAAA,CACpBgqB,CAAAA,CAAQ5tB,CAAG,CAAA,CAAI4D,CAAAA,CAEfiqB,EAAQ,IAAA,CAAK7tB,CAAG,EAEpB,CAAA,KAAQ,CACN6tB,EAAQ,IAAA,CAAK7tB,CAAG,EAClB,CAAA,CAIJ,OAAO,CACL,GAAA,CAAK0G,CAAAA,CACL,MAAOgf,CAAAA,CACP,OAAA,CAAAkI,EACA,OAAA,CAAAC,CAAAA,CACA,gBAAiB,CACnB,CACF,CAyBA,IAAMC,EAAAA,CAAa,IAAI,GAAA,CACjBC,EAAAA,CAAqB,IAAI,GAAA,CAE/B,SAASC,IAAiC,CACxC,OAAO,CACL,MAAA,EAAS,CACP,OAAO,MAAA,CAAO,IAAA,CAAKL,GAAqB,CAC1C,EAEA,KAAA,CAAMjnB,CAAAA,CAAY,CAChB,OAAOgnB,CAAAA,CAAahnB,CAAE,CACxB,CAAA,CAEA,gBAAiB,CACf,IAAM9C,EAAwC,EAAC,CAC/C,QAAW8C,CAAAA,IAAM,MAAA,CAAO,IAAA,CAAKinB,CAAAA,EAAqB,CAAA,CAAG,CACnD,IAAMM,CAAAA,CAAOP,CAAAA,CAAahnB,CAAE,CAAA,CACxBunB,CAAAA,GAAMrqB,EAAO8C,CAAE,CAAA,CAAIunB,GACzB,CACA,OAAOrqB,CACT,CAAA,CAEA,OAAA,EAAU,CACR,OAAO,CAAC,GAAG4pB,EAAAA,CAAe,MAAA,EAAQ,CAAA,CAAE,GAAA,CAAIljB,IAAM,CAC5C,IAAA,CAAMA,EAAE,IAAA,CACR,KAAA,CAAOA,EAAE,IAAA,EAAK,CACd,YAAaA,CAAAA,CAAE,eACjB,EAAE,CACJ,CAAA,CAEA,SAAU,CACR,OAAO,CAAC,GAAGmjB,EAAAA,CAAe,QAAQ,CAAA,CAAE,IAAI,CAAA,GAAM,CAC5C,KAAM,CAAA,CAAE,IAAA,CACR,KAAM,CAAA,CAAE,QAAA,CACR,SAAU,CAAA,CAAE,QAAA,CACZ,QAAS,CAAA,CAAE,WACb,EAAE,CACJ,CAAA,CAEA,SAAU,CACR,OAAO,CAAE,OAAA,CAAS,QAAS,CAC7B,CAAA,CAEA,GAAA,CAAIS,EAAkB,CACpB,GAAIA,EAAS,CACX,IAAMD,EAAOP,CAAAA,CAAaQ,CAAO,EAC7BD,CAAAA,EACF,OAAA,CAAQ,MAAM,CAAA,iBAAA,EAAaC,CAAO,CAAA,CAAE,CAAA,CACpC,QAAQ,GAAA,CAAI,QAAA,CAAUD,EAAK,KAAK,CAAA,CAChC,QAAQ,GAAA,CAAI,UAAA,CAAYA,EAAK,OAAO,CAAA,CACpC,QAAQ,GAAA,CAAI,UAAA,CAAYA,EAAK,OAAO,CAAA,CACpC,QAAQ,QAAA,EAAS,EAEjB,QAAQ,IAAA,CAAK,CAAA,OAAA,EAAUC,CAAO,CAAA,uBAAA,CAAA,CAA2B,MAAA,CAAO,KAAKP,CAAAA,EAAqB,CAAC,EAE/F,CAAA,KAAO,CACL,IAAMQ,CAAAA,CAAS,OAAO,IAAA,CAAKR,CAAAA,EAAqB,CAAA,CAChD,OAAA,CAAQ,MAAM,0BAAmB,CAAA,CACjC,QAAWjnB,CAAAA,IAAMynB,CAAAA,CAAQ,CACvB,IAAMF,CAAAA,CAAOP,EAAahnB,CAAE,CAAA,CACxBunB,IACF,OAAA,CAAQ,KAAA,CAAMvnB,CAAE,CAAA,CAChB,OAAA,CAAQ,IAAI,QAAA,CAAUunB,CAAAA,CAAK,KAAK,CAAA,CAChC,OAAA,CAAQ,IAAI,UAAA,CAAYA,CAAAA,CAAK,OAAO,CAAA,CACpC,OAAA,CAAQ,UAAS,EAErB,CACA,QAAQ,QAAA,GACV,CACF,CAAA,CAEA,cAAA,CAAeC,EAAiB,CAC9B,IAAM9pB,EAAQupB,CAAAA,EAAoB,CAAEO,CAAO,CAAA,CAC3C,GAAI,CAAC9pB,CAAAA,CAAO,CACV,OAAA,CAAQ,IAAA,CAAK,UAAU8pB,CAAO,CAAA,YAAA,CAAc,EAC5C,MACF,CAEA,IAAME,CAAAA,CAAyF,GAE/FA,CAAAA,CAAQ,IAAA,CAAK,CAAE,SAAA,CAAW,IAAA,CAAK,KAAI,CAAG,KAAA,CAAOhqB,EAAM,SAAA,EAAY,CAAC,CAAA,CAEhE,IAAMiqB,EAAcjqB,CAAAA,CAAM,UAAA,CAAYG,GAAU,CAC9C6pB,CAAAA,CAAQ,KAAK,CAAE,SAAA,CAAW,KAAK,GAAA,EAAI,CAAG,MAAO,CAAE,GAAG7pB,CAAM,CAAE,CAAC,EAC7D,CAAC,CAAA,CAEDupB,GAAW,GAAA,CAAII,CAAAA,CAASE,CAAO,CAAA,CAC/BL,EAAAA,CAAmB,IAAIG,CAAAA,CAASG,CAAW,EAC3C,OAAA,CAAQ,GAAA,CAAI,2BAAsBH,CAAO,CAAA,0CAAA,EAA6CA,CAAO,CAAA,mBAAA,CAAqB,EACpH,EAEA,aAAA,CAAcA,CAAAA,CAAiB,CAC7B,IAAMI,CAAAA,CAAWP,GAAmB,GAAA,CAAIG,CAAO,EAC3CI,CAAAA,EAAUA,CAAAA,GACdP,EAAAA,CAAmB,MAAA,CAAOG,CAAO,CAAA,CAEjC,IAAME,EAAUN,EAAAA,CAAW,GAAA,CAAII,CAAO,CAAA,EAAK,GAC3C,OAAAJ,EAAAA,CAAW,OAAOI,CAAO,CAAA,CAEzB,OAAA,CAAQ,GAAA,CAAI,6BAAwBA,CAAO,CAAA,GAAA,EAAME,EAAQ,MAAM,CAAA,oBAAA,CAAsB,EACrF,OAAA,CAAQ,KAAA,CAAMA,EAAQ,GAAA,CAAI,CAACG,EAAGvlB,CAAAA,IAAO,CACnC,IAAKA,CAAAA,CACL,IAAA,CAAM,IAAI,IAAA,CAAKulB,CAAAA,CAAE,SAAS,CAAA,CAAE,WAAA,GAAc,KAAA,CAAM,EAAA,CAAI,EAAE,CAAA,CACtD,KAAA,CAAO,KAAK,SAAA,CAAUA,CAAAA,CAAE,KAAK,CAC/B,CAAA,CAAE,CAAC,CAAA,CAEIH,CACT,CACF,CACF,CAWO,SAASI,EAAAA,EAAwB,CACtC,IAAM1B,CAAAA,CAAMkB,EAAAA,GAER,OAAO,UAAA,CAAe,MACvB,UAAA,CAAmB,kBAAA,CAAqBlB,EACzC,OAAA,CAAQ,GAAA,CACN,oFACA,oCACF,CAAA,CACA,QAAQ,GAAA,CAAI,6CAAwC,EACpD,OAAA,CAAQ,GAAA,CAAI,+CAA0C,CAAA,CACtD,OAAA,CAAQ,IAAI,yDAAoD,CAAA,CAChE,QAAQ,GAAA,CAAI,wDAAmD,EAC/D,OAAA,CAAQ,GAAA,CAAI,sDAAiD,CAAA,CAC7D,OAAA,CAAQ,IAAI,uDAAkD,CAAA,CAC9D,QAAQ,GAAA,CAAI,sDAAiD,EAC7D,OAAA,CAAQ,GAAA,CAAI,sDAAiD,CAAA,EAEjE","file":"index.js","sourcesContent":["/**\n * Slot helpers for content projection.\n *\n * Children are passed as the default slot. Named slots are\n * passed as render-function props. These helpers make working\n * with both patterns consistent.\n */\n\nimport { nodeToDOM } from './dom.js';\nimport type { AkashNode } from './types.js';\n\n/** A slot is a function that returns renderable content */\nexport type SlotFn = () => AkashNode;\n\n/** Named slots map */\nexport type Slots = Record<string, SlotFn>;\n\n/**\n * Render a slot (named or default) into a DOM node.\n * Returns a placeholder comment if the slot is not provided.\n *\n * ```ts\n * const Card = defineComponent<{ header?: SlotFn }>((ctx) => {\n * return () => {\n * const el = document.createElement('div');\n * el.appendChild(renderSlot(ctx.props.header));\n * el.appendChild(renderSlot(ctx.children));\n * return el;\n * };\n * });\n * ```\n */\nexport function renderSlot(slot: SlotFn | undefined, fallback?: SlotFn): Node {\n if (slot) {\n const content = slot();\n return nodeToDOM(content);\n }\n if (fallback) {\n return nodeToDOM(fallback());\n }\n return document.createComment('empty slot');\n}\n\n/**\n * Check if a slot has content.\n */\nexport function hasSlot(slot: SlotFn | undefined): boolean {\n if (!slot) return false;\n const content = slot();\n if (content == null || content === false) return false;\n if (typeof content === 'string' && content.trim() === '') return false;\n return true;\n}\n\n/**\n * Create a named slots object from component props.\n * Extracts all function-typed props as named slots.\n *\n * ```ts\n * const Layout = defineComponent<{\n * header: SlotFn;\n * footer: SlotFn;\n * }>((ctx) => {\n * const slots = createSlots(ctx.props, ['header', 'footer']);\n * return () => {\n * const el = document.createElement('div');\n * el.appendChild(renderSlot(slots.header));\n * el.appendChild(renderSlot(ctx.children));\n * el.appendChild(renderSlot(slots.footer));\n * return el;\n * };\n * });\n * ```\n */\nexport function createSlots<T extends Record<string, unknown>>(\n props: T,\n slotNames?: (keyof T)[],\n): Slots {\n const slots: Slots = {};\n // If no slotNames provided, treat all function props as slots\n const keys = slotNames ?? Object.keys(props) as (keyof T)[];\n for (const name of keys) {\n const value = props[name];\n if (typeof value === 'function') {\n slots[name as string] = value as SlotFn;\n }\n }\n return slots;\n}\n","/**\n * ErrorBoundary component.\n *\n * Declarative error handling — catches errors from child components\n * and renders a fallback UI.\n *\n * ```html\n * <ErrorBoundary fallback={(err) => <p>Error: {err.message}</p>}>\n * <RiskyComponent />\n * </ErrorBoundary>\n * ```\n */\n\nimport { defineComponent, onError } from './component.js';\nimport { signal } from './signals.js';\nimport { nodeToDOM } from './dom.js';\nimport type { AkashNode } from './types.js';\n\nexport interface ErrorBoundaryProps {\n /** Render function called when an error is caught */\n fallback: (error: Error, retry: () => void) => AkashNode;\n}\n\n/**\n * ErrorBoundary component.\n *\n * Catches errors from descendant components and renders a fallback.\n * The fallback receives the error and a `retry` function that re-renders\n * the children.\n */\nexport const ErrorBoundary = defineComponent<ErrorBoundaryProps>((ctx) => {\n const error = signal<Error | null>(null);\n\n onError((err) => {\n error.set(err);\n });\n\n function retry() {\n error.set(null);\n }\n\n return () => {\n const currentError = error();\n\n if (currentError) {\n return nodeToDOM(ctx.props.fallback(currentError, retry));\n }\n\n return nodeToDOM(ctx.children());\n };\n});\n","/**\n * <Suspense> component.\n *\n * Shows a fallback while async children are loading.\n * When all pending async work resolves, swaps to the real content.\n *\n * Works with both client rendering and SSR streaming:\n * - Client: shows fallback, swaps when promises resolve\n * - SSR: flushes fallback HTML immediately, then sends replacement when ready\n */\n\nimport { defineComponent } from './component.js';\nimport { signal, effect } from './signals.js';\nimport { nodeToDOM } from './dom.js';\nimport type { AkashNode } from './types.js';\n\n// --- Suspense tracking ---\n\ninterface SuspenseContext {\n /** Register a pending promise */\n addPending(promise: Promise<unknown>): void;\n /** Check if all pending work is resolved */\n isResolved: () => boolean;\n}\n\nlet currentSuspenseCtx: SuspenseContext | null = null;\n\n/**\n * Get the current Suspense context (if inside a <Suspense> boundary).\n * Used by async components and createResource to register pending work.\n */\nexport function getSuspenseContext(): SuspenseContext | null {\n return currentSuspenseCtx;\n}\n\n/**\n * Register a promise with the nearest Suspense boundary.\n * If there is no Suspense boundary, the promise is ignored\n * (component renders without waiting).\n */\nexport function registerPending(promise: Promise<unknown>): void {\n if (currentSuspenseCtx) {\n currentSuspenseCtx.addPending(promise);\n }\n}\n\n// --- Suspense component ---\n\nexport interface SuspenseProps {\n /** Fallback UI shown while children are loading */\n fallback: () => AkashNode;\n}\n\n/**\n * <Suspense> component.\n *\n * ```html\n * <Suspense fallback={() => <Spinner />}>\n * <AsyncComponent />\n * </Suspense>\n * ```\n */\nexport const Suspense = defineComponent<SuspenseProps>((ctx) => {\n const resolved = signal(false);\n const pending: Promise<unknown>[] = [];\n\n const suspenseCtx: SuspenseContext = {\n addPending(promise: Promise<unknown>) {\n pending.push(promise);\n },\n isResolved: () => resolved(),\n };\n\n // Set up the context so child components can register promises\n const prevCtx = currentSuspenseCtx;\n currentSuspenseCtx = suspenseCtx;\n\n // Render children (this may trigger async work registration)\n let childrenNode: AkashNode;\n try {\n childrenNode = ctx.children();\n } finally {\n currentSuspenseCtx = prevCtx;\n }\n\n // If there are pending promises, wait for them\n if (pending.length > 0) {\n Promise.all(pending).then(() => {\n resolved.set(true);\n });\n } else {\n // No async work — resolve immediately\n resolved.set(true);\n }\n\n return () => {\n const container = document.createElement('div');\n container.setAttribute('data-akash-suspense', '');\n container.style.display = 'contents';\n\n if (resolved()) {\n container.appendChild(nodeToDOM(childrenNode));\n } else {\n container.appendChild(nodeToDOM(ctx.props.fallback()));\n }\n\n // Watch for resolution and swap content\n effect(() => {\n if (resolved()) {\n while (container.firstChild) {\n container.removeChild(container.firstChild);\n }\n container.appendChild(nodeToDOM(childrenNode));\n }\n });\n\n return container;\n };\n});\n","/**\n * Client-side hydration.\n *\n * After SSR delivers HTML, the client needs to \"hydrate\" —\n * walk the existing DOM, attach signal effects, and make it interactive.\n * No new DOM nodes are created during hydration.\n *\n * Supports progressive hydration via IntersectionObserver:\n * components hydrate lazily when they enter the viewport.\n */\n\nimport { signal, effect } from './signals.js';\nimport type { Component } from './component.js';\nimport type { AkashNode } from './types.js';\n\n// --- Hydration state ---\n\nlet isHydrating = false;\nlet hydrateRoot: Node | null = null;\nlet hydrateWalker: TreeWalker | null = null;\n\n/** Check if we're currently hydrating (vs. fresh rendering) */\nexport function isHydrationActive(): boolean {\n return isHydrating;\n}\n\n// --- Hydration context ---\n\nexport interface HydrateOptions {\n /** The root DOM element (rendered by SSR) */\n container: HTMLElement;\n /** The root component to hydrate */\n component: Component<any>;\n /** Props to pass to the root component */\n props?: Record<string, unknown>;\n}\n\n/**\n * Hydrate a server-rendered DOM tree.\n *\n * Walks the existing DOM instead of creating new nodes,\n * attaching signal effects to existing elements.\n *\n * ```ts\n * import { hydrate } from '@akashjs/runtime';\n * import App from './App.akash';\n *\n * hydrate({\n * container: document.getElementById('app')!,\n * component: App,\n * props: { title: 'Home' },\n * });\n * ```\n */\nexport function hydrate(options: HydrateOptions): () => void {\n const { container, component, props = {} } = options;\n\n isHydrating = true;\n hydrateRoot = container;\n\n // Create a tree walker to traverse the existing DOM\n hydrateWalker = document.createTreeWalker(\n container,\n NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_TEXT,\n );\n\n try {\n // Run the component — during hydration, DOM creation helpers\n // will claim existing nodes instead of creating new ones\n component(props as any);\n } finally {\n isHydrating = false;\n hydrateRoot = null;\n hydrateWalker = null;\n }\n\n return () => {\n // Cleanup — dispose all hydration effects\n };\n}\n\n/**\n * Claim the next DOM node during hydration.\n * Instead of creating a new element, returns the existing one.\n */\nexport function claimElement(tag: string): HTMLElement | null {\n if (!isHydrating || !hydrateWalker) return null;\n\n let node = hydrateWalker.nextNode();\n while (node) {\n if (\n node instanceof HTMLElement &&\n node.tagName.toLowerCase() === tag.toLowerCase()\n ) {\n return node;\n }\n node = hydrateWalker.nextNode();\n }\n\n return null;\n}\n\n/**\n * Claim the next text node during hydration.\n */\nexport function claimText(): Text | null {\n if (!isHydrating || !hydrateWalker) return null;\n\n let node = hydrateWalker.nextNode();\n while (node) {\n if (node instanceof Text) {\n return node;\n }\n node = hydrateWalker.nextNode();\n }\n\n return null;\n}\n\n// --- Progressive hydration ---\n\nexport interface ProgressiveHydrateOptions {\n /** CSS selector or element to observe */\n target: HTMLElement;\n /** Component to hydrate when visible */\n component: Component<any>;\n /** Props */\n props?: Record<string, unknown>;\n /** IntersectionObserver root margin (default: '200px') */\n rootMargin?: string;\n}\n\n/**\n * Hydrate a component lazily when it enters the viewport.\n *\n * Uses IntersectionObserver to detect when the SSR placeholder\n * becomes visible, then runs full hydration.\n *\n * ```ts\n * progressiveHydrate({\n * target: document.querySelector('[data-hydrate=\"comments\"]')!,\n * component: Comments,\n * props: { postId: 123 },\n * });\n * ```\n */\nexport function progressiveHydrate(options: ProgressiveHydrateOptions): () => void {\n const { target, component, props, rootMargin = '200px' } = options;\n\n if (typeof IntersectionObserver === 'undefined') {\n // Fallback: hydrate immediately if IO is not available\n return hydrate({ container: target, component, props });\n }\n\n let disposed = false;\n\n const observer = new IntersectionObserver(\n (entries) => {\n for (const entry of entries) {\n if (entry.isIntersecting && !disposed) {\n observer.disconnect();\n hydrate({ container: target, component, props });\n }\n }\n },\n { rootMargin },\n );\n\n observer.observe(target);\n\n return () => {\n disposed = true;\n observer.disconnect();\n };\n}\n\n// --- Hydrate boundary marker ---\n\n/** Data attribute used to mark hydration boundaries in SSR HTML */\nexport const HYDRATE_ATTR = 'data-akash-hydrate';\n\n/**\n * Find all hydration boundaries in the document.\n */\nexport function findHydrationBoundaries(\n root: HTMLElement = document.body,\n): HTMLElement[] {\n return Array.from(root.querySelectorAll<HTMLElement>(`[${HYDRATE_ATTR}]`));\n}\n","/**\n * Transition/Animation system.\n *\n * Provides CSS-based enter/exit transitions for elements.\n * Works with <Transition> component or programmatic API.\n *\n * Class naming convention (matches Vue/Svelte):\n * - `{name}-enter-from` — initial enter state\n * - `{name}-enter-active` — active enter transition\n * - `{name}-enter-to` — final enter state\n * - `{name}-exit-from` — initial exit state\n * - `{name}-exit-active` — active exit transition\n * - `{name}-exit-to` — final exit state\n */\n\nimport { defineComponent } from './component.js';\nimport { signal, effect } from './signals.js';\nimport { nodeToDOM } from './dom.js';\nimport type { AkashNode } from './types.js';\n\n// --- Types ---\n\nexport interface TransitionProps {\n /** Transition name (used as CSS class prefix) */\n name?: string;\n /** Duration in ms (overrides CSS transition duration) */\n duration?: number;\n /** Whether the content is shown */\n when: boolean;\n /** CSS transition mode */\n mode?: 'in-out' | 'out-in';\n /** Callback when enter transition starts */\n onEnter?: (el: HTMLElement) => void;\n /** Callback when enter transition completes */\n onAfterEnter?: (el: HTMLElement) => void;\n /** Callback when exit transition starts */\n onExit?: (el: HTMLElement) => void;\n /** Callback when exit transition completes */\n onAfterExit?: (el: HTMLElement) => void;\n}\n\nexport interface TransitionClasses {\n enterFrom: string;\n enterActive: string;\n enterTo: string;\n exitFrom: string;\n exitActive: string;\n exitTo: string;\n}\n\n// --- CSS class helpers ---\n\n/**\n * Get the transition CSS class names for a given transition name.\n */\nexport function getTransitionClasses(name: string): TransitionClasses {\n return {\n enterFrom: `${name}-enter-from`,\n enterActive: `${name}-enter-active`,\n enterTo: `${name}-enter-to`,\n exitFrom: `${name}-exit-from`,\n exitActive: `${name}-exit-active`,\n exitTo: `${name}-exit-to`,\n };\n}\n\n// --- Programmatic transition API ---\n\n/**\n * Run an enter transition on an element.\n * Returns a promise that resolves when the transition completes.\n */\nexport function enterTransition(\n el: HTMLElement,\n classes: TransitionClasses,\n duration?: number,\n): Promise<void> {\n return new Promise((resolve) => {\n // Apply initial state\n el.classList.add(classes.enterFrom, classes.enterActive);\n\n // Force reflow to ensure the initial state is applied\n void el.offsetHeight;\n\n // Transition to final state\n el.classList.remove(classes.enterFrom);\n el.classList.add(classes.enterTo);\n\n const onEnd = () => {\n el.classList.remove(classes.enterActive, classes.enterTo);\n el.removeEventListener('transitionend', onEnd);\n resolve();\n };\n\n if (duration !== undefined) {\n setTimeout(onEnd, duration);\n } else {\n el.addEventListener('transitionend', onEnd, { once: true });\n // Fallback timeout in case transitionend never fires\n setTimeout(onEnd, 5000);\n }\n });\n}\n\n/**\n * Run an exit transition on an element.\n * Returns a promise that resolves when the transition completes.\n */\nexport function exitTransition(\n el: HTMLElement,\n classes: TransitionClasses,\n duration?: number,\n): Promise<void> {\n return new Promise((resolve) => {\n el.classList.add(classes.exitFrom, classes.exitActive);\n\n void el.offsetHeight;\n\n el.classList.remove(classes.exitFrom);\n el.classList.add(classes.exitTo);\n\n const onEnd = () => {\n el.classList.remove(classes.exitActive, classes.exitTo);\n el.removeEventListener('transitionend', onEnd);\n resolve();\n };\n\n if (duration !== undefined) {\n setTimeout(onEnd, duration);\n } else {\n el.addEventListener('transitionend', onEnd, { once: true });\n setTimeout(onEnd, 5000);\n }\n });\n}\n\n// --- <Transition> component ---\n\n/**\n * <Transition> component.\n *\n * Applies CSS enter/exit transitions when `when` changes.\n *\n * ```html\n * <Transition name=\"fade\" when={isVisible()}>\n * <div>Content</div>\n * </Transition>\n * ```\n *\n * CSS:\n * ```css\n * .fade-enter-active, .fade-exit-active {\n * transition: opacity 0.3s;\n * }\n * .fade-enter-from, .fade-exit-to {\n * opacity: 0;\n * }\n * ```\n */\nexport const Transition = defineComponent<TransitionProps>((ctx) => {\n const name = ctx.props.name ?? 'akash';\n const classes = getTransitionClasses(name);\n\n return () => {\n const container = document.createElement('div');\n container.style.display = 'contents';\n\n if (ctx.props.when) {\n const content = nodeToDOM(ctx.children());\n container.appendChild(content);\n\n // Run enter transition on mount\n if (content instanceof HTMLElement) {\n ctx.props.onEnter?.(content);\n enterTransition(content, classes, ctx.props.duration).then(() => {\n ctx.props.onAfterEnter?.(content);\n });\n }\n }\n\n return container;\n };\n});\n\n// --- Preset transition styles ---\n\n/**\n * Generate CSS for common transition presets.\n * Inject this into your app's styles or use the CLI to generate it.\n */\nexport function generateTransitionCSS(name: string, options: {\n property?: string;\n duration?: string;\n easing?: string;\n} = {}): string {\n const {\n property = 'all',\n duration = '0.3s',\n easing = 'ease',\n } = options;\n\n return `\n.${name}-enter-active,\n.${name}-exit-active {\n transition: ${property} ${duration} ${easing};\n}\n\n.${name}-enter-from,\n.${name}-exit-to {\n opacity: 0;\n}\n\n.${name}-enter-to,\n.${name}-exit-from {\n opacity: 1;\n}\n`.trim();\n}\n","/**\n * Document head management.\n *\n * Provides Title, Meta, and Head components for managing\n * <head> content declaratively. SSR-compatible — on the server,\n * collects tags; on the client, directly mutates the DOM.\n *\n * ```ts\n * // In any component:\n * useHead({\n * title: 'My Page',\n * meta: [\n * { name: 'description', content: 'Page description' },\n * { property: 'og:title', content: 'My Page' },\n * ],\n * link: [\n * { rel: 'canonical', href: 'https://example.com/page' },\n * ],\n * });\n * ```\n */\n\nimport { effect } from './signals.js';\nimport { onUnmount } from './component.js';\n\n// --- Types ---\n\nexport interface HeadConfig {\n /** Document title */\n title?: string;\n /** Title template — use %s as placeholder */\n titleTemplate?: string;\n /** Meta tags */\n meta?: MetaTag[];\n /** Link tags */\n link?: LinkTag[];\n /** Script tags */\n script?: ScriptTag[];\n /** HTML attributes */\n htmlAttrs?: Record<string, string>;\n /** Body attributes */\n bodyAttrs?: Record<string, string>;\n}\n\nexport interface MetaTag {\n name?: string;\n property?: string;\n httpEquiv?: string;\n content: string;\n}\n\nexport interface LinkTag {\n rel: string;\n href: string;\n type?: string;\n crossorigin?: string;\n}\n\nexport interface ScriptTag {\n src?: string;\n type?: string;\n async?: boolean;\n defer?: boolean;\n innerHTML?: string;\n}\n\n// --- SSR head collection ---\n\nlet ssrHeadTags: HeadConfig[] = [];\n\n/** @internal — collect head tags during SSR */\nexport function collectSSRHead(): HeadConfig[] {\n const tags = ssrHeadTags;\n ssrHeadTags = [];\n return tags;\n}\n\n/** Render collected head tags to HTML string (for SSR) */\nexport function renderHeadToString(configs: HeadConfig[]): string {\n let html = '';\n\n // Last title wins\n const title = configs.reduce((t, c) => c.title ?? t, '');\n const titleTemplate = configs.reduce((t, c) => c.titleTemplate ?? t, '');\n\n if (title) {\n const finalTitle = titleTemplate\n ? titleTemplate.replace('%s', title)\n : title;\n html += `<title>${finalTitle}</title>\\n`;\n }\n\n // Merge all meta tags\n for (const config of configs) {\n for (const meta of config.meta ?? []) {\n html += ' <meta';\n if (meta.name) html += ` name=\"${meta.name}\"`;\n if (meta.property) html += ` property=\"${meta.property}\"`;\n if (meta.httpEquiv) html += ` http-equiv=\"${meta.httpEquiv}\"`;\n html += ` content=\"${meta.content}\"`;\n html += ' />\\n';\n }\n }\n\n // Merge all link tags\n for (const config of configs) {\n for (const link of config.link ?? []) {\n html += ` <link rel=\"${link.rel}\" href=\"${link.href}\"`;\n if (link.type) html += ` type=\"${link.type}\"`;\n html += ' />\\n';\n }\n }\n\n return html;\n}\n\n// --- Client-side head management ---\n\nconst MANAGED_ATTR = 'data-akash-head';\n\n/**\n * Declaratively manage document head tags.\n * Call inside defineComponent() setup.\n *\n * Tags are automatically cleaned up when the component unmounts.\n * Reactive values (signals) in the config trigger updates.\n */\nexport function useHead(config: HeadConfig | (() => HeadConfig)): void {\n const getConfig = typeof config === 'function' ? config : () => config;\n\n // SSR: just collect\n if (typeof document === 'undefined') {\n ssrHeadTags.push(getConfig());\n return;\n }\n\n const managedElements: Element[] = [];\n\n const dispose = effect(() => {\n const cfg = getConfig();\n\n // Clean up previously managed elements\n for (const el of managedElements) {\n el.remove();\n }\n managedElements.length = 0;\n\n // Title\n if (cfg.title) {\n const title = cfg.titleTemplate\n ? cfg.titleTemplate.replace('%s', cfg.title)\n : cfg.title;\n document.title = title;\n }\n\n // Meta tags\n for (const meta of cfg.meta ?? []) {\n const el = document.createElement('meta');\n el.setAttribute(MANAGED_ATTR, '');\n if (meta.name) el.setAttribute('name', meta.name);\n if (meta.property) el.setAttribute('property', meta.property);\n if (meta.httpEquiv) el.setAttribute('http-equiv', meta.httpEquiv);\n el.setAttribute('content', meta.content);\n document.head.appendChild(el);\n managedElements.push(el);\n }\n\n // Link tags\n for (const link of cfg.link ?? []) {\n const el = document.createElement('link');\n el.setAttribute(MANAGED_ATTR, '');\n el.setAttribute('rel', link.rel);\n el.setAttribute('href', link.href);\n if (link.type) el.setAttribute('type', link.type);\n document.head.appendChild(el);\n managedElements.push(el);\n }\n\n // Script tags\n for (const script of cfg.script ?? []) {\n const el = document.createElement('script');\n el.setAttribute(MANAGED_ATTR, '');\n if (script.src) el.setAttribute('src', script.src);\n if (script.type) el.setAttribute('type', script.type);\n if (script.async) el.setAttribute('async', '');\n if (script.defer) el.setAttribute('defer', '');\n if (script.innerHTML) el.textContent = script.innerHTML;\n document.head.appendChild(el);\n managedElements.push(el);\n }\n\n // HTML attributes\n if (cfg.htmlAttrs) {\n for (const [key, value] of Object.entries(cfg.htmlAttrs)) {\n document.documentElement.setAttribute(key, value);\n }\n }\n\n // Body attributes\n if (cfg.bodyAttrs) {\n for (const [key, value] of Object.entries(cfg.bodyAttrs)) {\n document.body.setAttribute(key, value);\n }\n }\n });\n\n // Cleanup on unmount\n try {\n onUnmount(() => {\n dispose();\n for (const el of managedElements) {\n el.remove();\n }\n });\n } catch {\n // onUnmount may throw if called outside component — that's fine,\n // the effect will just persist until the page unloads\n }\n}\n","/**\n * Plugin system.\n *\n * Allows third-party extensions to hook into the AkashJS lifecycle.\n * Plugins can provide context values, add global error handlers,\n * register stores, and run setup code.\n *\n * ```ts\n * const authPlugin = definePlugin({\n * name: 'auth',\n * setup(app) {\n * const store = defineStore('auth', { ... })();\n * app.provide(AuthContext, store);\n * app.onError((err) => { if (err.status === 401) logout(); });\n * },\n * });\n *\n * const app = createApp(App);\n * app.use(authPlugin);\n * app.mount('#app');\n * ```\n */\n\nimport { provide } from './context.js';\nimport type { InjectionKey } from './context.js';\nimport type { Component } from './component.js';\n\n// --- Types ---\n\nexport interface PluginContext {\n /** Provide a value to all components */\n provide<T>(key: InjectionKey<T>, value: T): void;\n /** Register a global error handler */\n onError(handler: (error: Error) => void): void;\n /** Register a hook that runs before each component mount */\n onBeforeMount(hook: () => void): void;\n /** Access the app config */\n config: Record<string, unknown>;\n}\n\nexport interface Plugin {\n /** Plugin name (for debugging) */\n name: string;\n /** Setup function called when the plugin is installed */\n setup: (ctx: PluginContext) => void | Promise<void>;\n}\n\nexport interface AppInstance {\n /** Install a plugin */\n use(plugin: Plugin): AppInstance;\n /** Set a config value */\n config(key: string, value: unknown): AppInstance;\n /** Mount the app to a DOM element */\n mount(selector: string | HTMLElement): void;\n /** Unmount the app */\n unmount(): void;\n}\n\n// --- definePlugin ---\n\n/**\n * Define a framework plugin.\n */\nexport function definePlugin(plugin: Plugin): Plugin {\n return plugin;\n}\n\n// --- createApp ---\n\n/**\n * Create an application instance with plugin support.\n *\n * ```ts\n * const app = createApp(App);\n * app.use(authPlugin);\n * app.use(i18nPlugin);\n * app.mount('#app');\n * ```\n */\nexport function createApp<P extends Record<string, unknown>>(\n rootComponent: Component<P>,\n rootProps?: P,\n): AppInstance {\n const plugins: Plugin[] = [];\n const errorHandlers: Array<(error: Error) => void> = [];\n const beforeMountHooks: Array<() => void> = [];\n const appConfig: Record<string, unknown> = {};\n let mountedNode: Node | null = null;\n let containerEl: HTMLElement | null = null;\n\n const pluginCtx: PluginContext = {\n provide<T>(key: InjectionKey<T>, value: T) {\n // Will be called during setup — context scope is active\n provide(key, value);\n },\n onError(handler: (error: Error) => void) {\n errorHandlers.push(handler);\n },\n onBeforeMount(hook: () => void) {\n beforeMountHooks.push(hook);\n },\n config: appConfig,\n };\n\n const app: AppInstance = {\n use(plugin: Plugin) {\n plugins.push(plugin);\n return app;\n },\n\n config(key: string, value: unknown) {\n appConfig[key] = value;\n return app;\n },\n\n mount(selector: string | HTMLElement) {\n containerEl =\n typeof selector === 'string'\n ? document.querySelector<HTMLElement>(selector)\n : selector;\n\n if (!containerEl) {\n throw new Error(\n `[AkashJS] Mount target not found: ${selector}`,\n );\n }\n\n // Run plugin setup\n for (const plugin of plugins) {\n plugin.setup(pluginCtx);\n }\n\n // Run before-mount hooks\n for (const hook of beforeMountHooks) {\n hook();\n }\n\n // Render root component\n try {\n mountedNode = rootComponent((rootProps ?? {}) as any);\n containerEl.appendChild(mountedNode);\n } catch (err) {\n const e = err instanceof Error ? err : new Error(String(err));\n if (errorHandlers.length > 0) {\n for (const handler of errorHandlers) {\n handler(e);\n }\n } else {\n throw e;\n }\n }\n },\n\n unmount() {\n if (mountedNode && containerEl) {\n containerEl.removeChild(mountedNode);\n mountedNode = null;\n }\n },\n };\n\n return app;\n}\n","/**\n * Reactive composables — signal-based utility functions.\n *\n * Timers, debounce, throttle, and other commonly needed\n * reactive primitives that every app uses.\n */\n\nimport { signal, effect } from './signals.js';\nimport type { Signal, ReadonlySignal } from './signals.js';\n\n// --- useInterval ---\n\n/**\n * Create a reactive interval that ticks at a given rate.\n *\n * ```ts\n * const { count, pause, resume, reset } = useInterval(1000);\n * count(); // increments every second\n * ```\n */\nexport function useInterval(ms: number, options?: { immediate?: boolean }) {\n const count = signal(0);\n const isActive = signal(options?.immediate !== false);\n let timer: ReturnType<typeof setInterval> | null = null;\n\n function start() {\n stop();\n timer = setInterval(() => count.update((c) => c + 1), ms);\n }\n\n function stop() {\n if (timer) { clearInterval(timer); timer = null; }\n }\n\n if (isActive()) start();\n\n return {\n count: (() => count()) as ReadonlySignal<number>,\n isActive: (() => isActive()) as ReadonlySignal<boolean>,\n pause() { isActive.set(false); stop(); },\n resume() { isActive.set(true); start(); },\n reset() { count.set(0); },\n dispose() { stop(); },\n };\n}\n\n// --- useTimeout ---\n\n/**\n * Reactive timeout that exposes ready state.\n *\n * ```ts\n * const { ready, restart } = useTimeout(3000);\n * ready(); // false, then true after 3s\n * ```\n */\nexport function useTimeout(ms: number) {\n const ready = signal(false);\n let timer: ReturnType<typeof setTimeout> | null = null;\n\n function start() {\n stop();\n ready.set(false);\n timer = setTimeout(() => ready.set(true), ms);\n }\n\n function stop() {\n if (timer) { clearTimeout(timer); timer = null; }\n }\n\n start();\n\n return {\n ready: (() => ready()) as ReadonlySignal<boolean>,\n restart() { start(); },\n dispose() { stop(); },\n };\n}\n\n// --- useDebounce ---\n\n/**\n * Debounce a signal value. The output updates only after the input\n * stops changing for the given delay.\n *\n * ```ts\n * const search = signal('');\n * const debouncedSearch = useDebounce(search, 300);\n * // debouncedSearch() updates 300ms after last search.set()\n * ```\n */\nexport function useDebounce<T>(source: () => T, delay: number): ReadonlySignal<T> {\n const debounced = signal<T>(source());\n let timer: ReturnType<typeof setTimeout> | null = null;\n\n effect(() => {\n const value = source();\n if (timer) clearTimeout(timer);\n timer = setTimeout(() => debounced.set(value), delay);\n return () => { if (timer) clearTimeout(timer); };\n });\n\n return (() => debounced()) as ReadonlySignal<T>;\n}\n\n// --- useThrottle ---\n\n/**\n * Throttle a signal value. The output updates at most once per interval.\n *\n * ```ts\n * const scrollY = signal(0);\n * const throttled = useThrottle(scrollY, 100);\n * ```\n */\nexport function useThrottle<T>(source: () => T, interval: number): ReadonlySignal<T> {\n const throttled = signal<T>(source());\n let lastUpdate = 0;\n let timer: ReturnType<typeof setTimeout> | null = null;\n\n effect(() => {\n const value = source();\n const now = Date.now();\n const elapsed = now - lastUpdate;\n\n if (elapsed >= interval) {\n throttled.set(value);\n lastUpdate = now;\n } else {\n if (timer) clearTimeout(timer);\n timer = setTimeout(() => {\n throttled.set(value);\n lastUpdate = Date.now();\n }, interval - elapsed);\n }\n return () => { if (timer) clearTimeout(timer); };\n });\n\n return (() => throttled()) as ReadonlySignal<T>;\n}\n\n// --- useCounter ---\n\n/**\n * Simple reactive counter with inc/dec/set/reset.\n *\n * ```ts\n * const { count, inc, dec, set, reset } = useCounter(0);\n * ```\n */\nexport function useCounter(initial = 0) {\n const count = signal(initial);\n return {\n count: (() => count()) as ReadonlySignal<number>,\n inc(delta = 1) { count.update((c) => c + delta); },\n dec(delta = 1) { count.update((c) => c - delta); },\n set(value: number) { count.set(value); },\n reset() { count.set(initial); },\n };\n}\n\n// --- useToggle ---\n\n/**\n * Reactive boolean toggle.\n *\n * ```ts\n * const { value, toggle, setTrue, setFalse } = useToggle(false);\n * ```\n */\nexport function useToggle(initial = false) {\n const value = signal(initial);\n return {\n value: (() => value()) as ReadonlySignal<boolean>,\n toggle() { value.update((v) => !v); },\n setTrue() { value.set(true); },\n setFalse() { value.set(false); },\n };\n}\n\n// --- usePrevious ---\n\n/**\n * Track the previous value of a signal.\n *\n * ```ts\n * const count = signal(0);\n * const prev = usePrevious(count);\n * count.set(1);\n * prev(); // 0\n * ```\n */\nexport function usePrevious<T>(source: () => T): ReadonlySignal<T | undefined> {\n let lastValue: T | undefined;\n const tracked = signal<T | undefined>(undefined);\n\n effect(() => {\n const current = source();\n tracked.set(lastValue);\n lastValue = current;\n });\n\n return (() => tracked()) as ReadonlySignal<T | undefined>;\n}\n","/**\n * Browser API composables.\n *\n * Signal-based wrappers for common browser APIs.\n * All composables are SSR-safe — they return fallback values\n * when `window` is not available.\n */\n\nimport { signal, effect } from './signals.js';\nimport type { Signal, ReadonlySignal } from './signals.js';\n\n// --- useMediaQuery ---\n\n/**\n * Reactive media query matcher.\n *\n * ```ts\n * const isMobile = useMediaQuery('(max-width: 768px)');\n * isMobile(); // true/false, updates on resize\n * ```\n */\nexport function useMediaQuery(query: string): ReadonlySignal<boolean> {\n if (typeof window === 'undefined') {\n return (() => false) as ReadonlySignal<boolean>;\n }\n\n const mql = window.matchMedia(query);\n const matches = signal(mql.matches);\n\n const handler = (e: MediaQueryListEvent) => matches.set(e.matches);\n mql.addEventListener('change', handler);\n\n return (() => matches()) as ReadonlySignal<boolean>;\n}\n\n// --- useBreakpoint ---\n\nexport interface Breakpoints {\n [name: string]: number;\n}\n\nconst DEFAULT_BREAKPOINTS: Breakpoints = {\n sm: 640,\n md: 768,\n lg: 1024,\n xl: 1280,\n '2xl': 1536,\n};\n\n/**\n * Reactive breakpoint tracker (Tailwind-style).\n *\n * ```ts\n * const bp = useBreakpoint();\n * bp.current(); // 'md'\n * bp.gte('lg'); // false\n * bp.lt('sm'); // false\n * ```\n */\nexport function useBreakpoint(breakpoints: Breakpoints = DEFAULT_BREAKPOINTS) {\n const sorted = Object.entries(breakpoints).sort((a, b) => a[1] - b[1]);\n const width = signal(typeof window !== 'undefined' ? window.innerWidth : 1024);\n\n if (typeof window !== 'undefined') {\n const handler = () => width.set(window.innerWidth);\n window.addEventListener('resize', handler, { passive: true });\n }\n\n function current(): string {\n const w = width();\n let result = '';\n for (const [name, min] of sorted) {\n if (w >= min) result = name;\n }\n return result || sorted[0]?.[0] || '';\n }\n\n function gte(name: string): boolean {\n const bp = breakpoints[name];\n return bp !== undefined && width() >= bp;\n }\n\n function lt(name: string): boolean {\n const bp = breakpoints[name];\n return bp !== undefined && width() < bp;\n }\n\n return { current, gte, lt, width: (() => width()) as ReadonlySignal<number> };\n}\n\n// --- useStorage ---\n\n/**\n * Signal backed by localStorage or sessionStorage.\n * Persists across page refreshes.\n *\n * ```ts\n * const name = useStorage('user-name', 'Guest');\n * name(); // reads from localStorage or 'Guest'\n * name.set('Alice'); // writes to localStorage\n * ```\n */\nexport function useStorage<T>(\n key: string,\n initialValue: T,\n storage: 'local' | 'session' = 'local',\n): Signal<T> {\n const store = typeof window !== 'undefined'\n ? (storage === 'local' ? localStorage : sessionStorage)\n : null;\n\n // Read existing value\n let startValue = initialValue;\n if (store) {\n try {\n const raw = store.getItem(key);\n if (raw !== null) startValue = JSON.parse(raw);\n } catch { /* use initial */ }\n }\n\n const state = signal<T>(startValue);\n\n // Sync writes to storage\n if (store) {\n effect(() => {\n const value = state();\n try {\n store.setItem(key, JSON.stringify(value));\n } catch { /* storage full */ }\n });\n\n // Listen for changes from other tabs\n if (typeof window !== 'undefined') {\n window.addEventListener('storage', (e) => {\n if (e.key === key && e.newValue !== null) {\n try {\n state.set(JSON.parse(e.newValue));\n } catch { /* ignore */ }\n }\n });\n }\n }\n\n return state;\n}\n\n// --- useClipboard ---\n\n/**\n * Reactive clipboard access.\n *\n * ```ts\n * const { text, copy, copied } = useClipboard();\n * await copy('Hello');\n * copied(); // true for 2 seconds\n * ```\n */\nexport function useClipboard(options?: { timeout?: number }) {\n const text = signal('');\n const copied = signal(false);\n const timeout = options?.timeout ?? 2000;\n let timer: ReturnType<typeof setTimeout> | null = null;\n\n async function copy(value: string): Promise<void> {\n if (typeof navigator === 'undefined' || !navigator.clipboard) return;\n await navigator.clipboard.writeText(value);\n text.set(value);\n copied.set(true);\n if (timer) clearTimeout(timer);\n timer = setTimeout(() => copied.set(false), timeout);\n }\n\n return {\n text: (() => text()) as ReadonlySignal<string>,\n copied: (() => copied()) as ReadonlySignal<boolean>,\n copy,\n };\n}\n\n// --- useOnline ---\n\n/**\n * Reactive online/offline status.\n *\n * ```ts\n * const online = useOnline();\n * online(); // true/false\n * ```\n */\nexport function useOnline(): ReadonlySignal<boolean> {\n if (typeof window === 'undefined') {\n return (() => true) as ReadonlySignal<boolean>;\n }\n\n const online = signal(navigator.onLine);\n window.addEventListener('online', () => online.set(true));\n window.addEventListener('offline', () => online.set(false));\n\n return (() => online()) as ReadonlySignal<boolean>;\n}\n\n// --- useGeolocation ---\n\nexport interface GeolocationState {\n latitude: number | null;\n longitude: number | null;\n accuracy: number | null;\n error: GeolocationPositionError | null;\n loading: boolean;\n}\n\n/**\n * Reactive geolocation.\n *\n * ```ts\n * const geo = useGeolocation();\n * geo().latitude; // number | null\n * geo().loading; // boolean\n * ```\n */\nexport function useGeolocation(\n options?: PositionOptions,\n): ReadonlySignal<GeolocationState> {\n const state = signal<GeolocationState>({\n latitude: null,\n longitude: null,\n accuracy: null,\n error: null,\n loading: true,\n });\n\n if (typeof navigator !== 'undefined' && navigator.geolocation) {\n navigator.geolocation.watchPosition(\n (pos) => {\n state.set({\n latitude: pos.coords.latitude,\n longitude: pos.coords.longitude,\n accuracy: pos.coords.accuracy,\n error: null,\n loading: false,\n });\n },\n (err) => {\n state.set({\n latitude: null,\n longitude: null,\n accuracy: null,\n error: err,\n loading: false,\n });\n },\n options,\n );\n } else {\n state.set({ ...state(), loading: false });\n }\n\n return (() => state()) as ReadonlySignal<GeolocationState>;\n}\n\n// --- useWindowSize ---\n\n/**\n * Reactive window dimensions.\n */\nexport function useWindowSize() {\n const width = signal(typeof window !== 'undefined' ? window.innerWidth : 0);\n const height = signal(typeof window !== 'undefined' ? window.innerHeight : 0);\n\n if (typeof window !== 'undefined') {\n window.addEventListener('resize', () => {\n width.set(window.innerWidth);\n height.set(window.innerHeight);\n }, { passive: true });\n }\n\n return {\n width: (() => width()) as ReadonlySignal<number>,\n height: (() => height()) as ReadonlySignal<number>,\n };\n}\n\n// --- useClickOutside ---\n\n/**\n * Detect clicks outside an element. Essential for closing\n * dropdowns, modals, popovers, and context menus.\n *\n * ```ts\n * const dropdown = document.querySelector('.dropdown')!;\n * const dispose = useClickOutside(dropdown, () => {\n * closeDropdown();\n * });\n *\n * // With options:\n * useClickOutside(dropdown, onClose, {\n * events: ['mousedown', 'touchstart'],\n * ignore: ['.trigger-button'],\n * });\n * ```\n */\nexport function useClickOutside(\n target: HTMLElement | (() => HTMLElement | null),\n handler: (event: Event) => void,\n options: {\n /** Events to listen for (default: ['pointerdown']) */\n events?: string[];\n /** Selectors or elements to ignore (clicks on these won't trigger) */\n ignore?: (string | HTMLElement)[];\n /** Whether the listener is active (default: true) */\n active?: boolean;\n } = {},\n): () => void {\n if (typeof document === 'undefined') return () => {};\n\n const {\n events = ['pointerdown'],\n ignore = [],\n active = true,\n } = options;\n\n let isActive = active;\n\n function getTarget(): HTMLElement | null {\n return typeof target === 'function' ? target() : target;\n }\n\n function shouldIgnore(event: Event): boolean {\n const eventTarget = event.target as HTMLElement;\n if (!eventTarget) return false;\n\n for (const pattern of ignore) {\n if (typeof pattern === 'string') {\n if (eventTarget.closest(pattern)) return true;\n } else {\n if (pattern === eventTarget || pattern.contains(eventTarget)) return true;\n }\n }\n return false;\n }\n\n function listener(event: Event): void {\n if (!isActive) return;\n const el = getTarget();\n if (!el) return;\n\n const eventTarget = event.target as Node;\n if (el === eventTarget || el.contains(eventTarget)) return;\n if (shouldIgnore(event)) return;\n\n handler(event);\n }\n\n for (const eventName of events) {\n document.addEventListener(eventName, listener, { passive: true, capture: true });\n }\n\n const dispose = () => {\n for (const eventName of events) {\n document.removeEventListener(eventName, listener, { capture: true } as EventListenerOptions);\n }\n };\n\n // Attach enable/disable to dispose function\n (dispose as any).enable = () => { isActive = true; };\n (dispose as any).disable = () => { isActive = false; };\n\n return dispose;\n}\n","/**\n * <Portal> component.\n *\n * Renders children into a different DOM node, outside the\n * component tree. Essential for modals, tooltips, toasts,\n * dropdowns, and overlays.\n *\n * ```html\n * <Portal target=\"body\">\n * <div class=\"modal\">Modal content</div>\n * </Portal>\n *\n * <Portal target=\"#tooltip-container\">\n * <Tooltip />\n * </Portal>\n * ```\n */\n\nimport { defineComponent, onUnmount } from './component.js';\nimport { nodeToDOM } from './dom.js';\nimport type { AkashNode } from './types.js';\n\nexport interface PortalProps {\n /** CSS selector or HTMLElement to render into (default: document.body) */\n target?: string | HTMLElement;\n}\n\n/**\n * <Portal> — render children into a different DOM location.\n */\nexport const Portal = defineComponent<PortalProps>((ctx) => {\n let container: HTMLElement | null = null;\n let mountedNode: Node | null = null;\n\n function getTarget(): HTMLElement {\n const target = ctx.props.target;\n if (!target) return document.body;\n if (typeof target === 'string') {\n return document.querySelector<HTMLElement>(target) ?? document.body;\n }\n return target;\n }\n\n onUnmount(() => {\n if (mountedNode && container) {\n container.removeChild(mountedNode);\n }\n });\n\n return () => {\n container = getTarget();\n const content = ctx.children();\n mountedNode = nodeToDOM(content);\n container.appendChild(mountedNode);\n\n // Return a placeholder comment in the original tree\n return document.createComment('portal');\n };\n});\n","/**\n * Toast notification system.\n *\n * Signal-based toast queue with auto-dismiss, stacking, and positions.\n *\n * ```ts\n * const toast = createToaster();\n * toast.success('Saved!');\n * toast.error('Something went wrong');\n * toast.info('Tip: try dark mode', { duration: 5000 });\n * toast.toasts(); // reactive list of active toasts\n * ```\n */\n\nimport { signal } from './signals.js';\nimport type { ReadonlySignal } from './signals.js';\n\n// --- Types ---\n\nexport type ToastType = 'success' | 'error' | 'info' | 'warning';\n\nexport type ToastPosition =\n | 'top-right' | 'top-left' | 'top-center'\n | 'bottom-right' | 'bottom-left' | 'bottom-center';\n\nexport interface Toast {\n id: string;\n type: ToastType;\n message: string;\n duration: number;\n dismissible: boolean;\n createdAt: number;\n}\n\nexport interface ToastOptions {\n /** Duration in ms (default: 3000, 0 = no auto-dismiss) */\n duration?: number;\n /** Whether the toast can be manually dismissed (default: true) */\n dismissible?: boolean;\n}\n\nexport interface ToasterOptions {\n /** Max visible toasts (default: 5) */\n maxVisible?: number;\n /** Default duration in ms (default: 3000) */\n defaultDuration?: number;\n /** Position (default: 'top-right') */\n position?: ToastPosition;\n}\n\nexport interface Toaster {\n /** Active toasts (reactive signal) */\n toasts: ReadonlySignal<Toast[]>;\n /** Position setting */\n position: ToastPosition;\n /** Show a success toast */\n success(message: string, options?: ToastOptions): string;\n /** Show an error toast */\n error(message: string, options?: ToastOptions): string;\n /** Show an info toast */\n info(message: string, options?: ToastOptions): string;\n /** Show a warning toast */\n warning(message: string, options?: ToastOptions): string;\n /** Show a toast with custom type */\n add(type: ToastType, message: string, options?: ToastOptions): string;\n /** Dismiss a specific toast */\n dismiss(id: string): void;\n /** Dismiss all toasts */\n dismissAll(): void;\n}\n\n// --- Implementation ---\n\nlet idCounter = 0;\n\n/**\n * Create a toast notification manager.\n */\nexport function createToaster(options: ToasterOptions = {}): Toaster {\n const {\n maxVisible = 5,\n defaultDuration = 3000,\n position = 'top-right',\n } = options;\n\n const toasts = signal<Toast[]>([]);\n const timers = new Map<string, ReturnType<typeof setTimeout>>();\n\n function add(type: ToastType, message: string, opts?: ToastOptions): string {\n const id = `toast-${++idCounter}`;\n const duration = opts?.duration ?? defaultDuration;\n const dismissible = opts?.dismissible ?? true;\n\n const toast: Toast = {\n id,\n type,\n message,\n duration,\n dismissible,\n createdAt: Date.now(),\n };\n\n toasts.update((list) => {\n const next = [...list, toast];\n // Trim to maxVisible\n if (next.length > maxVisible) {\n const removed = next.shift()!;\n clearTimer(removed.id);\n }\n return next;\n });\n\n // Auto-dismiss\n if (duration > 0) {\n const timer = setTimeout(() => dismiss(id), duration);\n timers.set(id, timer);\n }\n\n return id;\n }\n\n function dismiss(id: string): void {\n clearTimer(id);\n toasts.update((list) => list.filter((t) => t.id !== id));\n }\n\n function dismissAll(): void {\n for (const [id] of timers) {\n clearTimer(id);\n }\n toasts.set([]);\n }\n\n function clearTimer(id: string): void {\n const timer = timers.get(id);\n if (timer) {\n clearTimeout(timer);\n timers.delete(id);\n }\n }\n\n return {\n toasts: (() => toasts()) as ReadonlySignal<Toast[]>,\n position,\n success: (msg, opts) => add('success', msg, opts),\n error: (msg, opts) => add('error', msg, opts),\n info: (msg, opts) => add('info', msg, opts),\n warning: (msg, opts) => add('warning', msg, opts),\n add,\n dismiss,\n dismissAll,\n };\n}\n","/**\n * Theme / dark mode system.\n *\n * Signal-based theme management with system preference detection,\n * CSS variable injection, and localStorage persistence.\n *\n * ```ts\n * const theme = useTheme({\n * themes: {\n * light: { '--bg': '#fff', '--text': '#111' },\n * dark: { '--bg': '#111', '--text': '#eee' },\n * },\n * });\n *\n * theme.current(); // 'light' or 'dark'\n * theme.toggle(); // switch between light/dark\n * theme.set('dark'); // set explicitly\n * theme.isDark(); // boolean\n * ```\n */\n\nimport { signal, computed, effect } from './signals.js';\nimport type { ReadonlySignal } from './signals.js';\n\n// --- Types ---\n\nexport type ThemeVariables = Record<string, string>;\n\nexport interface ThemeConfig {\n /** Theme definitions (name → CSS variables) */\n themes?: Record<string, ThemeVariables>;\n /** Default theme name (default: auto-detect from system) */\n defaultTheme?: string;\n /** localStorage key for persistence (default: 'akash-theme') */\n storageKey?: string;\n /** CSS attribute to set on <html> (default: 'data-theme') */\n attribute?: string;\n /** Whether to sync with system preference (default: true) */\n syncSystem?: boolean;\n}\n\nexport interface Theme {\n /** Current theme name (reactive) */\n current: ReadonlySignal<string>;\n /** Whether dark mode is active */\n isDark: ReadonlySignal<boolean>;\n /** Set a specific theme */\n set(theme: string): void;\n /** Toggle between light and dark */\n toggle(): void;\n /** Set the system preference strategy */\n setSystem(): void;\n /** Available theme names */\n themes: string[];\n}\n\n// --- Implementation ---\n\n/**\n * Create a theme manager with system preference detection and persistence.\n */\nexport function useTheme(config: ThemeConfig = {}): Theme {\n const {\n themes = {\n light: {},\n dark: {},\n },\n storageKey = 'akash-theme',\n attribute = 'data-theme',\n syncSystem = true,\n } = config;\n\n const themeNames = Object.keys(themes);\n\n // Detect system preference\n function getSystemTheme(): string {\n if (typeof window === 'undefined') return config.defaultTheme ?? 'light';\n return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';\n }\n\n // Read persisted theme or use default\n function getInitialTheme(): string {\n if (typeof window !== 'undefined' && storageKey) {\n const stored = localStorage.getItem(storageKey);\n if (stored && themeNames.includes(stored)) return stored;\n }\n return config.defaultTheme ?? getSystemTheme();\n }\n\n const current = signal(getInitialTheme());\n const isDark = computed(() => current() === 'dark');\n\n // Apply theme\n function applyTheme(name: string): void {\n if (typeof document === 'undefined') return;\n\n // Set attribute on <html>\n document.documentElement.setAttribute(attribute, name);\n\n // Apply CSS variables\n const vars = themes[name];\n if (vars) {\n for (const [key, value] of Object.entries(vars)) {\n document.documentElement.style.setProperty(key, value);\n }\n }\n\n // Add/remove class for convenience\n document.documentElement.classList.remove(...themeNames);\n document.documentElement.classList.add(name);\n }\n\n // React to theme changes\n effect(() => {\n const name = current();\n applyTheme(name);\n\n // Persist\n if (typeof window !== 'undefined' && storageKey) {\n localStorage.setItem(storageKey, name);\n }\n });\n\n // Sync with system preference changes\n if (syncSystem && typeof window !== 'undefined') {\n const mql = window.matchMedia('(prefers-color-scheme: dark)');\n mql.addEventListener('change', (e) => {\n // Only auto-switch if user hasn't manually overridden\n const stored = localStorage.getItem(storageKey);\n if (!stored) {\n current.set(e.matches ? 'dark' : 'light');\n }\n });\n }\n\n return {\n current: () => current(),\n isDark,\n set(theme: string) {\n if (themeNames.includes(theme)) {\n current.set(theme);\n }\n },\n toggle() {\n current.set(isDark() ? 'light' : 'dark');\n },\n setSystem() {\n if (typeof window !== 'undefined' && storageKey) {\n localStorage.removeItem(storageKey);\n }\n current.set(getSystemTheme());\n },\n themes: themeNames,\n };\n}\n","/**\n * <VirtualFor> — virtualized list rendering.\n *\n * Only renders items visible in the viewport plus a small overscan\n * buffer. Essential for rendering thousands of items without\n * destroying performance.\n *\n * ```html\n * <VirtualFor\n * each={items()}\n * key={(item) => item.id}\n * itemHeight={40}\n * overscan={5}\n * >\n * {(item) => <div class=\"row\">{item.name}</div>}\n * </VirtualFor>\n * ```\n */\n\nimport { signal, effect, computed } from './signals.js';\nimport { defineComponent } from './component.js';\nimport { nodeToDOM } from './dom.js';\nimport type { AkashNode } from './types.js';\nimport type { ReadonlySignal } from './signals.js';\n\n// --- Types ---\n\nexport interface VirtualForProps<T> {\n /** Array of items */\n each: T[];\n /** Key function for reconciliation */\n key: (item: T) => unknown;\n /** Fixed height per item in pixels */\n itemHeight: number;\n /** Container height in pixels (default: auto-detect from parent) */\n containerHeight?: number;\n /** Number of extra items to render above/below viewport */\n overscan?: number;\n /** Render function for each item */\n children: (item: T, index: number) => AkashNode;\n}\n\n// --- Virtual scroll calculations ---\n\nexport interface VirtualRange {\n /** First visible index */\n start: number;\n /** Last visible index (exclusive) */\n end: number;\n /** Total content height in pixels */\n totalHeight: number;\n /** Offset of the first rendered item */\n offsetTop: number;\n}\n\n/**\n * Calculate the visible range given scroll position and dimensions.\n */\nexport function calculateRange(\n scrollTop: number,\n containerHeight: number,\n itemHeight: number,\n totalItems: number,\n overscan = 3,\n): VirtualRange {\n const firstVisible = Math.floor(scrollTop / itemHeight);\n const visibleCount = Math.ceil(containerHeight / itemHeight);\n\n const start = Math.max(0, firstVisible - overscan);\n const end = Math.min(totalItems, firstVisible + visibleCount + overscan);\n\n return {\n start,\n end,\n totalHeight: totalItems * itemHeight,\n offsetTop: start * itemHeight,\n };\n}\n\n// --- useVirtualList composable ---\n\n/**\n * Low-level virtual list composable for custom implementations.\n *\n * ```ts\n * const { containerRef, range, visibleItems } = useVirtualList({\n * items: () => allItems(),\n * itemHeight: 40,\n * overscan: 5,\n * });\n * ```\n */\nexport function useVirtualList<T>(options: {\n items: () => T[];\n itemHeight: number;\n containerHeight?: number;\n overscan?: number;\n}) {\n const scrollTop = signal(0);\n const containerHeight = signal(options.containerHeight ?? 400);\n const overscan = options.overscan ?? 3;\n\n const range = computed((): VirtualRange => {\n return calculateRange(\n scrollTop(),\n containerHeight(),\n options.itemHeight,\n options.items().length,\n overscan,\n );\n });\n\n const visibleItems = computed(() => {\n const r = range();\n return options.items().slice(r.start, r.end).map((item, i) => ({\n item,\n index: r.start + i,\n }));\n });\n\n function onScroll(e: Event): void {\n const target = e.target as HTMLElement;\n scrollTop.set(target.scrollTop);\n }\n\n function setContainerHeight(height: number): void {\n containerHeight.set(height);\n }\n\n return {\n range,\n visibleItems,\n onScroll,\n setContainerHeight,\n scrollTop: (() => scrollTop()) as ReadonlySignal<number>,\n };\n}\n\n// --- <VirtualFor> component ---\n\nexport const VirtualFor = defineComponent<VirtualForProps<any>>((ctx) => {\n const {\n itemHeight,\n containerHeight: fixedHeight,\n overscan = 3,\n } = ctx.props;\n\n const scrollTop = signal(0);\n\n return () => {\n const items = ctx.props.each;\n const height = fixedHeight ?? 400;\n\n const r = calculateRange(scrollTop(), height, itemHeight, items.length, overscan);\n\n // Outer container (scrollable)\n const outer = document.createElement('div');\n outer.style.height = `${height}px`;\n outer.style.overflow = 'auto';\n outer.style.position = 'relative';\n\n outer.addEventListener('scroll', () => {\n scrollTop.set(outer.scrollTop);\n }, { passive: true });\n\n // Inner spacer (total height)\n const inner = document.createElement('div');\n inner.style.height = `${r.totalHeight}px`;\n inner.style.position = 'relative';\n\n // Rendered items container\n const content = document.createElement('div');\n content.style.position = 'absolute';\n content.style.top = `${r.offsetTop}px`;\n content.style.left = '0';\n content.style.right = '0';\n\n // Render visible items\n for (let i = r.start; i < r.end; i++) {\n const item = items[i];\n if (!item) continue;\n\n const row = nodeToDOM(ctx.props.children(item, i));\n if (row instanceof HTMLElement) {\n row.style.height = `${itemHeight}px`;\n }\n content.appendChild(row);\n }\n\n inner.appendChild(content);\n outer.appendChild(inner);\n return outer;\n };\n});\n","/**\n * defineAsyncComponent — lazy component loading.\n *\n * Wraps a dynamic import() into a component that shows a loading\n * state while the chunk downloads, an error state if it fails,\n * and the real component once resolved.\n *\n * ```ts\n * const LazyChart = defineAsyncComponent(() => import('./Chart.akash'));\n *\n * // With loading/error:\n * const LazyChart = defineAsyncComponent({\n * loader: () => import('./Chart.akash'),\n * loading: () => <Spinner />,\n * error: (err) => <p>Failed: {err.message}</p>,\n * timeout: 10000,\n * });\n * ```\n */\n\nimport { defineComponent } from './component.js';\nimport { signal } from './signals.js';\nimport { nodeToDOM } from './dom.js';\nimport type { Component } from './component.js';\nimport type { AkashNode } from './types.js';\n\n// --- Types ---\n\nexport type AsyncComponentLoader<P extends Record<string, unknown> = any> =\n () => Promise<{ default: Component<P> }>;\n\nexport interface AsyncComponentOptions<P extends Record<string, unknown> = any> {\n /** The async loader function (dynamic import) */\n loader: AsyncComponentLoader<P>;\n /** Component to show while loading */\n loading?: () => AkashNode;\n /** Component to show on error */\n error?: (error: Error) => AkashNode;\n /** Timeout in ms — show error after this (default: none) */\n timeout?: number;\n /** Delay in ms before showing loading state (default: 200) */\n delay?: number;\n}\n\n// --- defineAsyncComponent ---\n\n/**\n * Define a component that loads asynchronously via dynamic import.\n */\nexport function defineAsyncComponent<P extends Record<string, unknown> = any>(\n loaderOrOptions: AsyncComponentLoader<P> | AsyncComponentOptions<P>,\n): Component<P> {\n const options: AsyncComponentOptions<P> =\n typeof loaderOrOptions === 'function'\n ? { loader: loaderOrOptions }\n : loaderOrOptions;\n\n const {\n loader,\n loading: loadingFn,\n error: errorFn,\n timeout,\n delay = 200,\n } = options;\n\n // Cache the loaded component\n let resolvedComp: Component<P> | null = null;\n let loadPromise: Promise<void> | null = null;\n let loadError: Error | null = null;\n\n function startLoad(): Promise<void> {\n if (loadPromise) return loadPromise;\n\n loadPromise = loader()\n .then((mod) => {\n resolvedComp = mod.default;\n })\n .catch((err) => {\n loadError = err instanceof Error ? err : new Error(String(err));\n });\n\n return loadPromise;\n }\n\n return defineComponent<P>((ctx) => {\n const state = signal<'loading' | 'ready' | 'error'>('loading');\n const showLoading = signal(false);\n\n // Start loading\n startLoad().then(() => {\n if (loadError) {\n state.set('error');\n } else {\n state.set('ready');\n }\n });\n\n // Delay before showing loading indicator\n let delayTimer: ReturnType<typeof setTimeout> | null = null;\n if (delay > 0) {\n delayTimer = setTimeout(() => showLoading.set(true), delay);\n } else {\n showLoading.set(true);\n }\n\n // Timeout\n let timeoutTimer: ReturnType<typeof setTimeout> | null = null;\n if (timeout) {\n timeoutTimer = setTimeout(() => {\n if (state() === 'loading') {\n loadError = new Error(`Async component timed out after ${timeout}ms`);\n state.set('error');\n }\n }, timeout);\n }\n\n return () => {\n const s = state();\n\n // Clear timers once resolved\n if (s !== 'loading') {\n if (delayTimer) clearTimeout(delayTimer);\n if (timeoutTimer) clearTimeout(timeoutTimer);\n }\n\n if (s === 'ready' && resolvedComp) {\n return resolvedComp(ctx.props as any);\n }\n\n if (s === 'error' && errorFn && loadError) {\n return nodeToDOM(errorFn(loadError));\n }\n\n if (s === 'loading' && showLoading() && loadingFn) {\n return nodeToDOM(loadingFn());\n }\n\n // Nothing to show yet\n return document.createComment('async-loading');\n };\n });\n}\n","/**\n * List reconciliation with Longest Increasing Subsequence (LIS).\n *\n * When a keyed list updates, we need to determine the minimal set of\n * DOM operations (inserts, moves, removes). The LIS of the new key\n * positions tells us which nodes are already in the correct relative\n * order and don't need to move.\n *\n * This is the same algorithm used by Vue 3, Solid, and Inferno.\n */\n\n/**\n * Find the Longest Increasing Subsequence of indices.\n * Returns the indices into the input array that form the LIS.\n *\n * Time: O(n log n), Space: O(n)\n */\nexport function longestIncreasingSubsequence(arr: number[]): number[] {\n const n = arr.length;\n if (n === 0) return [];\n\n // tails[i] = smallest tail value for increasing subsequence of length i+1\n const tails: number[] = [];\n // predecessors[i] = index of previous element in the LIS ending at i\n const predecessors: number[] = new Array(n).fill(-1);\n // indices[i] = index in arr of the tail for length i+1\n const indices: number[] = [];\n\n for (let i = 0; i < n; i++) {\n const value = arr[i];\n\n // Skip items not in the old list (marked as -1)\n if (value === -1) continue;\n\n // Binary search for the position to insert/replace\n let lo = 0;\n let hi = tails.length;\n\n while (lo < hi) {\n const mid = (lo + hi) >> 1;\n if (tails[mid] < value) {\n lo = mid + 1;\n } else {\n hi = mid;\n }\n }\n\n tails[lo] = value;\n indices[lo] = i;\n\n if (lo > 0) {\n predecessors[i] = indices[lo - 1];\n }\n }\n\n // Reconstruct the LIS by following predecessors\n const result: number[] = new Array(tails.length);\n let k = indices[tails.length - 1];\n\n for (let i = tails.length - 1; i >= 0; i--) {\n result[i] = k;\n k = predecessors[k];\n }\n\n return result;\n}\n\n/**\n * Reconcile two keyed lists and return the minimal DOM operations.\n *\n * @param oldKeys - Keys of the current DOM list\n * @param newKeys - Keys of the new data list\n * @returns Operations to transform old into new\n */\nexport interface ReconcileOp {\n type: 'insert' | 'move' | 'remove';\n /** Index in the NEW array (for insert/move) */\n newIndex?: number;\n /** Index in the OLD array (for remove/move source) */\n oldIndex?: number;\n}\n\nexport function reconcileKeys(\n oldKeys: unknown[],\n newKeys: unknown[],\n): ReconcileOp[] {\n const ops: ReconcileOp[] = [];\n\n // Build old key → index map\n const oldKeyMap = new Map<unknown, number>();\n for (let i = 0; i < oldKeys.length; i++) {\n oldKeyMap.set(oldKeys[i], i);\n }\n\n // For each new key, find its position in old (or -1 if new)\n const newToOld: number[] = new Array(newKeys.length);\n for (let i = 0; i < newKeys.length; i++) {\n newToOld[i] = oldKeyMap.get(newKeys[i]) ?? -1;\n }\n\n // Find nodes that need to be removed (in old but not in new)\n const newKeySet = new Set(newKeys);\n for (let i = 0; i < oldKeys.length; i++) {\n if (!newKeySet.has(oldKeys[i])) {\n ops.push({ type: 'remove', oldIndex: i });\n }\n }\n\n // Find the LIS of old indices — these nodes stay in place\n const lis = new Set(longestIncreasingSubsequence(newToOld));\n\n // Nodes not in the LIS need to be moved or inserted\n for (let i = 0; i < newKeys.length; i++) {\n if (newToOld[i] === -1) {\n // New item — insert\n ops.push({ type: 'insert', newIndex: i });\n } else if (!lis.has(i)) {\n // Existing item not in LIS — move\n ops.push({ type: 'move', newIndex: i, oldIndex: newToOld[i] });\n }\n // Items in LIS stay in place — no op needed\n }\n\n return ops;\n}\n\n/**\n * Count the minimum number of DOM operations needed.\n */\nexport function countOps(oldKeys: unknown[], newKeys: unknown[]): {\n inserts: number;\n moves: number;\n removes: number;\n} {\n const ops = reconcileKeys(oldKeys, newKeys);\n let inserts = 0, moves = 0, removes = 0;\n for (const op of ops) {\n if (op.type === 'insert') inserts++;\n else if (op.type === 'move') moves++;\n else removes++;\n }\n return { inserts, moves, removes };\n}\n","/**\n * Effect disposal and leak detection (dev mode).\n *\n * In development, tracks all created effects and verifies they\n * get properly cleaned up when components unmount. Logs warnings\n * for leaked effects that were never disposed.\n */\n\nimport type { ScheduledEffect } from './scheduler.js';\n\n// --- Tracking state ---\n\nlet tracking = false;\nconst activeEffects = new Map<number, EffectRecord>();\nlet effectIdCounter = 0;\n\ninterface EffectRecord {\n id: number;\n createdAt: number;\n stackTrace: string | null;\n componentName: string | null;\n disposed: boolean;\n}\n\n// --- Public API ---\n\n/**\n * Enable leak detection. Call once at app startup in dev mode.\n *\n * ```ts\n * if (import.meta.env.DEV) {\n * enableLeakDetection();\n * }\n * ```\n */\nexport function enableLeakDetection(): void {\n tracking = true;\n}\n\n/**\n * Disable leak detection.\n */\nexport function disableLeakDetection(): void {\n tracking = false;\n activeEffects.clear();\n}\n\n/**\n * Check if leak detection is enabled.\n */\nexport function isLeakDetectionEnabled(): boolean {\n return tracking;\n}\n\n/**\n * Register an effect for tracking. Called internally by effect().\n * Returns an ID for later disposal tracking.\n */\nexport function trackEffect(componentName?: string): number {\n if (!tracking) return -1;\n\n const id = ++effectIdCounter;\n activeEffects.set(id, {\n id,\n createdAt: Date.now(),\n stackTrace: captureStack(),\n componentName: componentName ?? null,\n disposed: false,\n });\n\n return id;\n}\n\n/**\n * Mark an effect as disposed. Called internally by effect dispose function.\n */\nexport function untrackEffect(id: number): void {\n if (!tracking || id === -1) return;\n\n const record = activeEffects.get(id);\n if (record) {\n record.disposed = true;\n activeEffects.delete(id);\n }\n}\n\n/**\n * Get all currently active (undisposed) effects.\n */\nexport function getActiveEffects(): EffectRecord[] {\n return Array.from(activeEffects.values());\n}\n\n/**\n * Check for leaked effects and return warnings.\n * An effect is considered leaked if it's been active for longer\n * than the given threshold without being disposed.\n */\nexport function checkForLeaks(thresholdMs = 30000): LeakWarning[] {\n if (!tracking) return [];\n\n const now = Date.now();\n const warnings: LeakWarning[] = [];\n\n for (const record of activeEffects.values()) {\n if (!record.disposed && now - record.createdAt > thresholdMs) {\n warnings.push({\n effectId: record.id,\n age: now - record.createdAt,\n componentName: record.componentName,\n stackTrace: record.stackTrace,\n });\n }\n }\n\n return warnings;\n}\n\n/**\n * Log leak warnings to the console.\n */\nexport function reportLeaks(thresholdMs = 30000): void {\n const leaks = checkForLeaks(thresholdMs);\n if (leaks.length === 0) return;\n\n console.warn(\n `[AkashJS] ${leaks.length} potential effect leak(s) detected:`,\n );\n for (const leak of leaks) {\n const component = leak.componentName ? ` in ${leak.componentName}` : '';\n console.warn(\n ` Effect #${leak.effectId}${component} — active for ${(leak.age / 1000).toFixed(1)}s`,\n );\n if (leak.stackTrace) {\n console.warn(` Created at:\\n${leak.stackTrace}`);\n }\n }\n}\n\n/**\n * Get a summary of effect tracking state.\n */\nexport function getLeakDetectionStats(): {\n enabled: boolean;\n activeCount: number;\n totalTracked: number;\n} {\n return {\n enabled: tracking,\n activeCount: activeEffects.size,\n totalTracked: effectIdCounter,\n };\n}\n\n// --- Types ---\n\nexport interface LeakWarning {\n effectId: number;\n age: number;\n componentName: string | null;\n stackTrace: string | null;\n}\n\n// --- Internal ---\n\nfunction captureStack(): string | null {\n try {\n const err = new Error();\n const stack = err.stack;\n if (!stack) return null;\n // Remove first 3 lines (Error, captureStack, trackEffect)\n const lines = stack.split('\\n');\n return lines.slice(3, 8).join('\\n');\n } catch {\n return null;\n }\n}\n","/**\n * Accessibility composables.\n *\n * Built-in a11y primitives that no other framework ships natively.\n * Focus management, screen reader announcements, and keyboard shortcuts.\n */\n\nimport { signal } from './signals.js';\nimport type { ReadonlySignal } from './signals.js';\n\n// =========================================================================\n// useFocusTrap\n// =========================================================================\n\nexport interface FocusTrapOptions {\n /** CSS selector or element to focus initially (default: first focusable) */\n initialFocus?: string | HTMLElement;\n /** Return focus to the previously focused element on deactivate */\n returnFocus?: boolean;\n /** Escape key deactivates the trap (default: true) */\n escapeDeactivates?: boolean;\n /** Allow clicks outside the trap container (default: false) */\n allowOutsideClick?: boolean;\n /** Callback when Escape deactivates */\n onDeactivate?: () => void;\n}\n\nexport interface FocusTrap {\n /** Activate the focus trap */\n activate(): void;\n /** Deactivate the focus trap */\n deactivate(): void;\n /** Whether the trap is currently active */\n active: ReadonlySignal<boolean>;\n}\n\nconst FOCUSABLE_SELECTOR = [\n 'a[href]', 'button:not([disabled])', 'input:not([disabled])',\n 'select:not([disabled])', 'textarea:not([disabled])',\n '[tabindex]:not([tabindex=\"-1\"])', '[contenteditable]',\n].join(', ');\n\n/**\n * Trap focus inside a container element.\n *\n * ```ts\n * const trap = useFocusTrap(dialogRef, {\n * initialFocus: '#first-input',\n * returnFocus: true,\n * escapeDeactivates: true,\n * });\n * trap.activate(); // on open\n * trap.deactivate(); // on close\n * ```\n */\nexport function useFocusTrap(\n container: HTMLElement | (() => HTMLElement | null),\n options: FocusTrapOptions = {},\n): FocusTrap {\n const {\n initialFocus,\n returnFocus = true,\n escapeDeactivates = true,\n allowOutsideClick = false,\n onDeactivate,\n } = options;\n\n const active = signal(false);\n let previouslyFocused: HTMLElement | null = null;\n\n function getContainer(): HTMLElement | null {\n return typeof container === 'function' ? container() : container;\n }\n\n function getFocusableElements(): HTMLElement[] {\n const el = getContainer();\n if (!el) return [];\n return Array.from(el.querySelectorAll<HTMLElement>(FOCUSABLE_SELECTOR));\n }\n\n function handleKeyDown(e: KeyboardEvent): void {\n if (e.key === 'Escape' && escapeDeactivates) {\n e.preventDefault();\n deactivate();\n onDeactivate?.();\n return;\n }\n\n if (e.key !== 'Tab') return;\n\n const focusable = getFocusableElements();\n if (focusable.length === 0) return;\n\n const first = focusable[0];\n const last = focusable[focusable.length - 1];\n\n if (e.shiftKey) {\n // Shift+Tab: wrap from first to last\n if (document.activeElement === first) {\n e.preventDefault();\n last.focus();\n }\n } else {\n // Tab: wrap from last to first\n if (document.activeElement === last) {\n e.preventDefault();\n first.focus();\n }\n }\n }\n\n function handleFocusOut(e: FocusEvent): void {\n if (!active() || allowOutsideClick) return;\n const el = getContainer();\n if (!el) return;\n\n const relatedTarget = e.relatedTarget as HTMLElement | null;\n if (relatedTarget && !el.contains(relatedTarget)) {\n // Focus escaped — pull it back\n const focusable = getFocusableElements();\n if (focusable.length > 0) {\n focusable[0].focus();\n }\n }\n }\n\n function activate(): void {\n if (active()) return;\n active.set(true);\n\n previouslyFocused = document.activeElement as HTMLElement | null;\n\n document.addEventListener('keydown', handleKeyDown, true);\n\n const el = getContainer();\n if (el) {\n el.addEventListener('focusout', handleFocusOut);\n }\n\n // Focus the initial element\n requestAnimationFrame(() => {\n if (initialFocus) {\n const target = typeof initialFocus === 'string'\n ? getContainer()?.querySelector<HTMLElement>(initialFocus)\n : initialFocus;\n target?.focus();\n } else {\n const focusable = getFocusableElements();\n if (focusable.length > 0) focusable[0].focus();\n }\n });\n }\n\n function deactivate(): void {\n if (!active()) return;\n active.set(false);\n\n document.removeEventListener('keydown', handleKeyDown, true);\n\n const el = getContainer();\n if (el) {\n el.removeEventListener('focusout', handleFocusOut);\n }\n\n if (returnFocus && previouslyFocused) {\n previouslyFocused.focus();\n previouslyFocused = null;\n }\n }\n\n return {\n activate,\n deactivate,\n active: () => active(),\n };\n}\n\n// =========================================================================\n// useAnnounce\n// =========================================================================\n\nexport type AriaLive = 'polite' | 'assertive' | 'off';\n\nlet announceRegion: HTMLElement | null = null;\n\nfunction ensureAnnounceRegion(): HTMLElement {\n if (announceRegion && document.body.contains(announceRegion)) {\n return announceRegion;\n }\n\n const el = document.createElement('div');\n el.setAttribute('role', 'status');\n el.setAttribute('aria-live', 'polite');\n el.setAttribute('aria-atomic', 'true');\n el.style.cssText = [\n 'position: absolute',\n 'width: 1px',\n 'height: 1px',\n 'padding: 0',\n 'margin: -1px',\n 'overflow: hidden',\n 'clip: rect(0,0,0,0)',\n 'white-space: nowrap',\n 'border: 0',\n ].join('; ');\n\n document.body.appendChild(el);\n announceRegion = el;\n return el;\n}\n\n/**\n * Screen reader announcements via ARIA live regions.\n *\n * ```ts\n * const announce = useAnnounce();\n * announce('Page loaded: Dashboard');\n * announce('Error: Invalid email', 'assertive');\n * ```\n */\nexport function useAnnounce(): (message: string, politeness?: AriaLive) => void {\n return (message: string, politeness: AriaLive = 'polite') => {\n if (typeof document === 'undefined') return;\n\n const region = ensureAnnounceRegion();\n region.setAttribute('aria-live', politeness);\n\n // Clear then set to trigger announcement\n region.textContent = '';\n requestAnimationFrame(() => {\n region.textContent = message;\n });\n };\n}\n\n// =========================================================================\n// useKeyboard\n// =========================================================================\n\nexport interface KeyBinding {\n /** Key combo: 'mod+k', 'Escape', 'ArrowDown', 'shift+Enter' */\n key: string;\n /** Handler function */\n handler: (e: KeyboardEvent) => void;\n /** Optional scope (only active when scope is enabled) */\n scope?: string;\n /** Description for help dialog */\n description?: string;\n /** Prevent default browser behavior (default: true) */\n preventDefault?: boolean;\n}\n\nexport interface KeyboardManager {\n /** Register a binding */\n bind(key: string, handler: (e: KeyboardEvent) => void, options?: {\n scope?: string;\n description?: string;\n preventDefault?: boolean;\n }): () => void;\n /** Enable a scope */\n enableScope(scope: string): void;\n /** Disable a scope */\n disableScope(scope: string): void;\n /** Get all bindings (for help dialog) */\n getBindings(): Array<{ key: string; description: string; scope?: string }>;\n /** Dispose all bindings */\n dispose(): void;\n}\n\n/**\n * Keyboard shortcut manager with scope support.\n *\n * ```ts\n * const kb = useKeyboard();\n * kb.bind('mod+k', () => openSearch(), { description: 'Open search' });\n * kb.bind('Escape', () => close(), { scope: 'modal' });\n * kb.enableScope('modal');\n * ```\n */\nexport function useKeyboard(): KeyboardManager {\n const bindings: KeyBinding[] = [];\n const activeScopes = new Set<string>();\n let listening = false;\n\n function handleKeyDown(e: KeyboardEvent): void {\n for (const binding of bindings) {\n if (binding.scope && !activeScopes.has(binding.scope)) continue;\n if (matchesKey(e, binding.key)) {\n if (binding.preventDefault !== false) {\n e.preventDefault();\n }\n binding.handler(e);\n return;\n }\n }\n }\n\n function startListening(): void {\n if (listening) return;\n if (typeof document === 'undefined') return;\n document.addEventListener('keydown', handleKeyDown);\n listening = true;\n }\n\n function bind(\n key: string,\n handler: (e: KeyboardEvent) => void,\n options?: { scope?: string; description?: string; preventDefault?: boolean },\n ): () => void {\n const binding: KeyBinding = {\n key,\n handler,\n scope: options?.scope,\n description: options?.description ?? '',\n preventDefault: options?.preventDefault,\n };\n bindings.push(binding);\n startListening();\n\n return () => {\n const idx = bindings.indexOf(binding);\n if (idx !== -1) bindings.splice(idx, 1);\n };\n }\n\n return {\n bind,\n enableScope(scope: string) { activeScopes.add(scope); },\n disableScope(scope: string) { activeScopes.delete(scope); },\n getBindings() {\n return bindings.map((b) => ({\n key: formatKeyCombo(b.key),\n description: b.description ?? '',\n scope: b.scope,\n }));\n },\n dispose() {\n bindings.length = 0;\n if (typeof document !== 'undefined') {\n document.removeEventListener('keydown', handleKeyDown);\n }\n listening = false;\n },\n };\n}\n\n// --- Key matching ---\n\nfunction matchesKey(e: KeyboardEvent, combo: string): boolean {\n const parts = combo.toLowerCase().split('+');\n const key = parts.pop()!;\n\n const needsMod = parts.includes('mod');\n const needsCtrl = parts.includes('ctrl');\n const needsShift = parts.includes('shift');\n const needsAlt = parts.includes('alt');\n\n // mod = Cmd on Mac, Ctrl elsewhere\n const isMac = typeof navigator !== 'undefined' && navigator.platform?.includes('Mac');\n const modPressed = isMac ? e.metaKey : e.ctrlKey;\n\n if (needsMod && !modPressed) return false;\n if (needsCtrl && !e.ctrlKey) return false;\n if (needsShift && !e.shiftKey) return false;\n if (needsAlt && !e.altKey) return false;\n\n return e.key.toLowerCase() === key || e.code.toLowerCase() === key;\n}\n\nfunction formatKeyCombo(combo: string): string {\n const isMac = typeof navigator !== 'undefined' && navigator.platform?.includes('Mac');\n return combo\n .replace(/mod/gi, isMac ? '⌘' : 'Ctrl')\n .replace(/shift/gi, isMac ? '⇧' : 'Shift')\n .replace(/alt/gi, isMac ? '⌥' : 'Alt')\n .replace(/\\+/g, isMac ? '' : '+');\n}\n","/**\n * <Image> component.\n *\n * Optimized image rendering with lazy loading, srcset/sizes,\n * blur placeholder, and error fallback.\n *\n * ```html\n * <Image\n * src=\"/photos/hero.jpg\"\n * alt=\"Hero image\"\n * width={800}\n * height={600}\n * placeholder=\"blur\"\n * blurDataUrl=\"data:image/jpeg;base64,...\"\n * srcset=\"/photos/hero-400.jpg 400w, /photos/hero-800.jpg 800w\"\n * sizes=\"(max-width: 600px) 400px, 800px\"\n * loading=\"lazy\"\n * />\n * ```\n */\n\nimport { defineComponent } from './component.js';\nimport { signal } from './signals.js';\n\n// --- Types ---\n\nexport interface ImageProps {\n /** Image source URL */\n src: string;\n /** Alt text (required for accessibility) */\n alt: string;\n /** Width in pixels */\n width?: number;\n /** Height in pixels */\n height?: number;\n /** Loading strategy (default: 'lazy') */\n loading?: 'lazy' | 'eager';\n /** Srcset for responsive images */\n srcset?: string;\n /** Sizes attribute for responsive images */\n sizes?: string;\n /** Placeholder strategy */\n placeholder?: 'blur' | 'empty';\n /** Base64 data URL for blur placeholder */\n blurDataUrl?: string;\n /** CSS class */\n class?: string;\n /** Error fallback image URL */\n fallbackSrc?: string;\n /** Callback when image loads */\n onLoad?: () => void;\n /** Callback when image fails to load */\n onError?: (error: Event) => void;\n}\n\n// --- Component ---\n\nexport const Image = defineComponent<ImageProps>((ctx) => {\n const loaded = signal(false);\n const errored = signal(false);\n\n return () => {\n const {\n src,\n alt,\n width,\n height,\n loading = 'lazy',\n srcset,\n sizes,\n placeholder,\n blurDataUrl,\n class: className,\n fallbackSrc,\n onLoad,\n onError: onErrorCb,\n } = ctx.props;\n\n // Wrapper for placeholder\n const wrapper = document.createElement('div');\n wrapper.style.position = 'relative';\n wrapper.style.display = 'inline-block';\n wrapper.style.overflow = 'hidden';\n if (width) wrapper.style.width = `${width}px`;\n if (height) wrapper.style.height = `${height}px`;\n\n // Blur placeholder\n if (placeholder === 'blur' && blurDataUrl && !loaded()) {\n const blur = document.createElement('img');\n blur.src = blurDataUrl;\n blur.alt = '';\n blur.setAttribute('aria-hidden', 'true');\n blur.style.cssText = 'position:absolute;inset:0;width:100%;height:100%;object-fit:cover;filter:blur(20px);transform:scale(1.1);';\n wrapper.appendChild(blur);\n }\n\n // Main image\n const img = document.createElement('img');\n img.alt = alt;\n img.loading = loading;\n\n if (errored() && fallbackSrc) {\n img.src = fallbackSrc;\n } else {\n img.src = src;\n }\n\n if (srcset) img.srcset = srcset;\n if (sizes) img.sizes = sizes;\n if (width) img.width = width;\n if (height) img.height = height;\n if (className) img.className = className;\n\n img.style.display = 'block';\n img.style.width = '100%';\n img.style.height = 'auto';\n\n img.addEventListener('load', () => {\n loaded.set(true);\n onLoad?.();\n });\n\n img.addEventListener('error', (e) => {\n errored.set(true);\n onErrorCb?.(e);\n });\n\n // Intersection Observer for lazy loading (fallback for browsers without native lazy)\n if (loading === 'lazy' && typeof IntersectionObserver !== 'undefined') {\n img.setAttribute('data-src', img.src);\n const actualSrc = img.src;\n img.removeAttribute('src');\n\n const observer = new IntersectionObserver(\n (entries) => {\n if (entries[0].isIntersecting) {\n img.src = actualSrc;\n observer.disconnect();\n }\n },\n { rootMargin: '200px' },\n );\n\n // Observe after appended to DOM\n requestAnimationFrame(() => {\n if (img.parentElement) {\n observer.observe(img);\n } else {\n // Fallback: set src immediately\n img.src = actualSrc;\n }\n });\n }\n\n wrapper.appendChild(img);\n return wrapper;\n };\n});\n","/**\n * Infinite scroll composable.\n *\n * Uses IntersectionObserver to detect when a sentinel element\n * enters the viewport, then triggers loading more data.\n * Pairs with createCursorPagination() from @akashjs/http.\n *\n * ```ts\n * const { sentinel, loading, done } = useInfiniteScroll({\n * onLoadMore: async () => {\n * pager.loadMore();\n * await fetchNextPage();\n * },\n * hasMore: () => pager.hasMore(),\n * });\n * // Append sentinel() element at the end of your list\n * ```\n */\n\nimport { signal } from './signals.js';\nimport type { ReadonlySignal } from './signals.js';\n\n// --- Types ---\n\nexport interface InfiniteScrollOptions {\n /** Callback to load more items */\n onLoadMore: () => Promise<void> | void;\n /** Whether there are more items to load */\n hasMore: () => boolean;\n /** Root margin for the observer (default: '200px') */\n rootMargin?: string;\n /** Threshold for the observer (default: 0) */\n threshold?: number;\n}\n\nexport interface InfiniteScroll {\n /** Sentinel element to place at the end of the list */\n sentinel: () => HTMLElement;\n /** Whether a load is in progress */\n loading: ReadonlySignal<boolean>;\n /** Whether all items have been loaded */\n done: ReadonlySignal<boolean>;\n /** Reset the scroll state */\n reset(): void;\n /** Dispose the observer */\n dispose(): void;\n}\n\n// --- Implementation ---\n\n/**\n * Create an infinite scroll controller.\n */\nexport function useInfiniteScroll(options: InfiniteScrollOptions): InfiniteScroll {\n const { onLoadMore, hasMore, rootMargin = '200px', threshold = 0 } = options;\n\n const loading = signal(false);\n const done = signal(false);\n let observer: IntersectionObserver | null = null;\n let sentinelEl: HTMLElement | null = null;\n let disposed = false;\n\n async function handleIntersect(): Promise<void> {\n if (loading() || done() || disposed) return;\n if (!hasMore()) {\n done.set(true);\n return;\n }\n\n loading.set(true);\n try {\n await onLoadMore();\n if (!hasMore()) {\n done.set(true);\n }\n } finally {\n loading.set(false);\n }\n }\n\n function createObserver(el: HTMLElement): void {\n if (typeof IntersectionObserver === 'undefined') return;\n\n observer = new IntersectionObserver(\n (entries) => {\n if (entries[0]?.isIntersecting) {\n handleIntersect();\n }\n },\n { rootMargin, threshold },\n );\n\n observer.observe(el);\n }\n\n function sentinel(): HTMLElement {\n if (sentinelEl) return sentinelEl;\n\n sentinelEl = document.createElement('div');\n sentinelEl.setAttribute('data-akash-sentinel', '');\n sentinelEl.style.height = '1px';\n sentinelEl.setAttribute('aria-hidden', 'true');\n\n // Start observing\n requestAnimationFrame(() => {\n if (sentinelEl && !disposed) {\n createObserver(sentinelEl);\n }\n });\n\n return sentinelEl;\n }\n\n return {\n sentinel,\n loading: () => loading(),\n done: () => done(),\n reset() {\n done.set(false);\n loading.set(false);\n },\n dispose() {\n disposed = true;\n observer?.disconnect();\n observer = null;\n },\n };\n}\n","/**\n * CSS utility functions.\n *\n * cx() for class name merging and css() for dynamic style objects.\n * Tiny but used in every component.\n */\n\n// --- cx() — class name merging ---\n\ntype CxInput = string | boolean | null | undefined | Record<string, boolean> | CxInput[];\n\n/**\n * Merge class names conditionally. Falsy values are filtered out.\n * Object keys are included when their value is truthy.\n *\n * ```ts\n * cx('btn', isActive && 'btn-active', { 'btn-lg': isLarge })\n * // 'btn btn-active btn-lg'\n *\n * cx('card', undefined, false, null, 'card-primary')\n * // 'card card-primary'\n * ```\n */\nexport function cx(...inputs: CxInput[]): string {\n const classes: string[] = [];\n\n for (const input of inputs) {\n if (!input) continue;\n\n if (typeof input === 'string') {\n classes.push(input);\n } else if (Array.isArray(input)) {\n const nested = cx(...input);\n if (nested) classes.push(nested);\n } else if (typeof input === 'object') {\n for (const [key, value] of Object.entries(input)) {\n if (value) classes.push(key);\n }\n }\n }\n\n return classes.join(' ');\n}\n\n// --- css() — dynamic style objects ---\n\ntype CssValue = string | number | null | undefined;\ntype CssProperties = Record<string, CssValue>;\n\n/**\n * Build a CSS style string from an object. Handles camelCase → kebab-case\n * conversion and filters out null/undefined values.\n *\n * ```ts\n * css({ backgroundColor: 'red', fontSize: 14, display: isVisible ? 'block' : 'none' })\n * // 'background-color: red; font-size: 14px; display: block'\n * ```\n */\nexport function css(styles: CssProperties): string {\n const parts: string[] = [];\n\n for (const [key, value] of Object.entries(styles)) {\n if (value == null) continue;\n\n const prop = camelToKebab(key);\n const val = typeof value === 'number' && !UNITLESS_PROPS.has(key)\n ? `${value}px`\n : String(value);\n\n parts.push(`${prop}: ${val}`);\n }\n\n return parts.join('; ');\n}\n\n/**\n * Apply a style object to an element.\n *\n * ```ts\n * applyStyles(el, { color: 'red', marginTop: 10 });\n * ```\n */\nexport function applyStyles(el: HTMLElement, styles: CssProperties): void {\n for (const [key, value] of Object.entries(styles)) {\n if (value == null) {\n el.style.removeProperty(camelToKebab(key));\n } else {\n const val = typeof value === 'number' && !UNITLESS_PROPS.has(key)\n ? `${value}px`\n : String(value);\n el.style.setProperty(camelToKebab(key), val);\n }\n }\n}\n\n// --- Helpers ---\n\nfunction camelToKebab(str: string): string {\n return str.replace(/[A-Z]/g, (m) => `-${m.toLowerCase()}`);\n}\n\n/** CSS properties that don't get automatic px units */\nconst UNITLESS_PROPS = new Set([\n 'animationIterationCount', 'boxFlex', 'boxFlexGroup', 'boxOrdinalGroup',\n 'columnCount', 'fillOpacity', 'flex', 'flexGrow', 'flexPositive',\n 'flexShrink', 'flexNegative', 'flexOrder', 'fontWeight', 'gridColumn',\n 'gridRow', 'lineClamp', 'lineHeight', 'opacity', 'order', 'orphans',\n 'tabSize', 'widows', 'zIndex', 'zoom',\n]);\n","/**\n * Headless data table.\n *\n * Signal-based table state management with sorting, filtering,\n * column visibility, and pagination integration. No DOM — just logic.\n *\n * ```ts\n * const table = createDataTable({\n * data: () => users(),\n * columns: [\n * { key: 'name', header: 'Name', sortable: true },\n * { key: 'email', header: 'Email', sortable: true, filterable: true },\n * { key: 'age', header: 'Age', sortable: true },\n * ],\n * pageSize: 20,\n * });\n *\n * table.rows(); // current page of sorted/filtered data\n * table.sort('name'); // toggle sort by column\n * table.filter('search term');\n * table.toggleColumn('age');\n * table.nextPage();\n * ```\n */\n\nimport { signal, computed } from './signals.js';\nimport type { ReadonlySignal } from './signals.js';\n\n// --- Types ---\n\nexport interface ColumnDef<T> {\n /** Key to access the data (dot notation supported) */\n key: string;\n /** Display header */\n header: string;\n /** Whether this column is sortable (default: false) */\n sortable?: boolean;\n /** Whether this column is searchable by the global filter (default: false) */\n filterable?: boolean;\n /** Custom sort comparator */\n compare?: (a: T, b: T) => number;\n /** Custom cell value accessor */\n accessor?: (row: T) => unknown;\n /** Whether column is visible by default (default: true) */\n visible?: boolean;\n}\n\nexport type SortDirection = 'asc' | 'desc' | null;\n\nexport interface SortState {\n column: string | null;\n direction: SortDirection;\n}\n\nexport interface DataTableOptions<T> {\n /** Reactive data source */\n data: () => T[];\n /** Column definitions */\n columns: ColumnDef<T>[];\n /** Page size (0 = no pagination) */\n pageSize?: number;\n /** Initial sort */\n initialSort?: SortState;\n}\n\nexport interface DataTable<T> {\n /** Current page of processed (sorted + filtered) rows */\n rows: ReadonlySignal<T[]>;\n /** All processed rows (before pagination) */\n allRows: ReadonlySignal<T[]>;\n /** Total row count after filtering */\n totalRows: ReadonlySignal<number>;\n /** Visible columns */\n visibleColumns: ReadonlySignal<ColumnDef<T>[]>;\n /** Current sort state */\n sortState: ReadonlySignal<SortState>;\n /** Current filter text */\n filterText: ReadonlySignal<string>;\n /** Current page (1-based) */\n page: ReadonlySignal<number>;\n /** Total pages */\n totalPages: ReadonlySignal<number>;\n /** Toggle or set sort on a column */\n sort(columnKey: string): void;\n /** Set the global filter text */\n filter(text: string): void;\n /** Toggle column visibility */\n toggleColumn(columnKey: string): void;\n /** Show a column */\n showColumn(columnKey: string): void;\n /** Hide a column */\n hideColumn(columnKey: string): void;\n /** Go to next page */\n nextPage(): void;\n /** Go to previous page */\n prevPage(): void;\n /** Go to specific page */\n goToPage(page: number): void;\n /** Reset all state (sort, filter, page) */\n reset(): void;\n}\n\n// --- Implementation ---\n\nexport function createDataTable<T extends Record<string, unknown>>(\n options: DataTableOptions<T>,\n): DataTable<T> {\n const { data, columns, pageSize = 0, initialSort } = options;\n\n const sortState = signal<SortState>(initialSort ?? { column: null, direction: null });\n const filterText = signal('');\n const page = signal(1);\n const columnVisibility = signal<Record<string, boolean>>(\n Object.fromEntries(columns.map((c) => [c.key, c.visible !== false])),\n );\n\n // Visible columns\n const visibleColumns = computed(() => {\n const vis = columnVisibility();\n return columns.filter((c) => vis[c.key]);\n });\n\n // Filtered rows\n const filteredRows = computed(() => {\n const text = filterText().toLowerCase().trim();\n if (!text) return data();\n\n // If no columns explicitly marked filterable, filter all columns\n const filterableCols = columns.filter((c) => c.filterable);\n const colsToSearch = filterableCols.length > 0 ? filterableCols : columns;\n\n return data().filter((row) => {\n return colsToSearch.some((col) => {\n const value = getNestedValue(row, col.key);\n return String(value).toLowerCase().includes(text);\n });\n });\n });\n\n // Sorted rows\n const sortedRows = computed(() => {\n const { column, direction } = sortState();\n const rows = [...filteredRows()];\n\n if (!column || !direction) return rows;\n\n const colDef = columns.find((c) => c.key === column);\n if (!colDef) return rows;\n\n return rows.sort((a, b) => {\n if (colDef.compare) {\n const result = colDef.compare(a, b);\n return direction === 'desc' ? -result : result;\n }\n\n const aVal = getNestedValue(a, column);\n const bVal = getNestedValue(b, column);\n const result = defaultCompare(aVal, bVal);\n return direction === 'desc' ? -result : result;\n });\n });\n\n // Total rows after filtering\n const totalRows = computed(() => filteredRows().length);\n\n // Total pages\n const totalPages = computed(() => {\n if (pageSize <= 0) return 1;\n return Math.max(1, Math.ceil(totalRows() / pageSize));\n });\n\n // Paginated rows\n const paginatedRows = computed(() => {\n const all = sortedRows();\n if (pageSize <= 0) return all;\n const start = (page() - 1) * pageSize;\n return all.slice(start, start + pageSize);\n });\n\n // --- Actions ---\n\n function sort(columnKey: string): void {\n const current = sortState();\n if (current.column === columnKey) {\n // Cycle: asc → desc → none\n if (current.direction === 'asc') {\n sortState.set({ column: columnKey, direction: 'desc' });\n } else if (current.direction === 'desc') {\n sortState.set({ column: null, direction: null });\n } else {\n sortState.set({ column: columnKey, direction: 'asc' });\n }\n } else {\n sortState.set({ column: columnKey, direction: 'asc' });\n }\n page.set(1);\n }\n\n function filter(text: string): void {\n filterText.set(text);\n page.set(1);\n }\n\n function toggleColumn(key: string): void {\n columnVisibility.update((vis) => ({ ...vis, [key]: !vis[key] }));\n }\n\n function showColumn(key: string): void {\n columnVisibility.update((vis) => ({ ...vis, [key]: true }));\n }\n\n function hideColumn(key: string): void {\n columnVisibility.update((vis) => ({ ...vis, [key]: false }));\n }\n\n return {\n rows: paginatedRows,\n allRows: sortedRows,\n totalRows,\n visibleColumns,\n sortState: () => sortState(),\n filterText: () => filterText(),\n page: () => page(),\n totalPages,\n sort,\n filter,\n toggleColumn,\n showColumn,\n hideColumn,\n nextPage() { if (page() < totalPages()) page.update((p) => p + 1); },\n prevPage() { if (page() > 1) page.update((p) => p - 1); },\n goToPage(p: number) { page.set(Math.max(1, Math.min(p, totalPages()))); },\n reset() {\n sortState.set({ column: null, direction: null });\n filterText.set('');\n page.set(1);\n },\n };\n}\n\n// --- Helpers ---\n\nfunction getNestedValue(obj: Record<string, unknown>, path: string): unknown {\n return path.split('.').reduce((o: any, k) => o?.[k], obj);\n}\n\nfunction defaultCompare(a: unknown, b: unknown): number {\n if (a == null && b == null) return 0;\n if (a == null) return -1;\n if (b == null) return 1;\n if (typeof a === 'number' && typeof b === 'number') return a - b;\n return String(a).localeCompare(String(b));\n}\n","/**\n * SEO utilities.\n *\n * Structured data (JSON-LD), Open Graph helpers, and canonical URL management.\n * Works with useHead() for SSR-compatible head tag management.\n *\n * ```ts\n * useStructuredData({\n * '@type': 'Article',\n * headline: 'My Post',\n * author: { '@type': 'Person', name: 'Alice' },\n * });\n * ```\n */\n\nimport { useHead } from './head.js';\n\n// --- Types ---\n\nexport interface StructuredData {\n '@context'?: string;\n '@type': string;\n [key: string]: unknown;\n}\n\nexport interface OpenGraphData {\n title: string;\n description?: string;\n image?: string;\n url?: string;\n type?: string;\n siteName?: string;\n locale?: string;\n}\n\nexport interface TwitterCardData {\n card?: 'summary' | 'summary_large_image' | 'player' | 'app';\n title: string;\n description?: string;\n image?: string;\n site?: string;\n creator?: string;\n}\n\nexport interface SEOConfig {\n title: string;\n description?: string;\n canonical?: string;\n robots?: string;\n openGraph?: OpenGraphData;\n twitter?: TwitterCardData;\n structuredData?: StructuredData | StructuredData[];\n}\n\n// --- useStructuredData ---\n\n/**\n * Inject JSON-LD structured data into the document head.\n * Data is automatically wrapped with @context.\n *\n * ```ts\n * useStructuredData({\n * '@type': 'WebSite',\n * name: 'AkashJS',\n * url: 'https://akashjs.dev',\n * });\n * ```\n */\nexport function useStructuredData(data: StructuredData | StructuredData[]): void {\n const items = Array.isArray(data) ? data : [data];\n\n for (const item of items) {\n const ld = { '@context': 'https://schema.org', ...item };\n useHead({\n script: [\n { type: 'application/ld+json', innerHTML: JSON.stringify(ld) },\n ],\n });\n }\n}\n\n// --- useOpenGraph ---\n\n/**\n * Set Open Graph meta tags.\n *\n * ```ts\n * useOpenGraph({\n * title: 'My Page',\n * description: 'Page description',\n * image: '/og-image.jpg',\n * type: 'article',\n * });\n * ```\n */\nexport function useOpenGraph(data: OpenGraphData): void {\n const meta: Array<{ property: string; content: string }> = [\n { property: 'og:title', content: data.title },\n ];\n\n if (data.description) meta.push({ property: 'og:description', content: data.description });\n if (data.image) meta.push({ property: 'og:image', content: data.image });\n if (data.url) meta.push({ property: 'og:url', content: data.url });\n if (data.type) meta.push({ property: 'og:type', content: data.type });\n if (data.siteName) meta.push({ property: 'og:site_name', content: data.siteName });\n if (data.locale) meta.push({ property: 'og:locale', content: data.locale });\n\n useHead({ meta });\n}\n\n// --- useTwitterCard ---\n\n/**\n * Set Twitter Card meta tags.\n *\n * ```ts\n * useTwitterCard({\n * card: 'summary_large_image',\n * title: 'My Page',\n * image: '/twitter-card.jpg',\n * });\n * ```\n */\nexport function useTwitterCard(data: TwitterCardData): void {\n const meta: Array<{ name: string; content: string }> = [\n { name: 'twitter:title', content: data.title },\n ];\n\n if (data.card) meta.push({ name: 'twitter:card', content: data.card });\n if (data.description) meta.push({ name: 'twitter:description', content: data.description });\n if (data.image) meta.push({ name: 'twitter:image', content: data.image });\n if (data.site) meta.push({ name: 'twitter:site', content: data.site });\n if (data.creator) meta.push({ name: 'twitter:creator', content: data.creator });\n\n useHead({ meta });\n}\n\n// --- useSEO (all-in-one) ---\n\n/**\n * Set all SEO-related head tags at once.\n *\n * ```ts\n * useSEO({\n * title: 'My Page | MySite',\n * description: 'Page description',\n * canonical: 'https://mysite.com/page',\n * openGraph: { title: 'My Page', image: '/og.jpg' },\n * twitter: { card: 'summary_large_image', title: 'My Page' },\n * structuredData: { '@type': 'WebPage', name: 'My Page' },\n * });\n * ```\n */\nexport function useSEO(config: SEOConfig): void {\n const meta: Array<{ name?: string; property?: string; content: string }> = [];\n\n if (config.description) {\n meta.push({ name: 'description', content: config.description });\n }\n if (config.robots) {\n meta.push({ name: 'robots', content: config.robots });\n }\n\n const link: Array<{ rel: string; href: string }> = [];\n if (config.canonical) {\n link.push({ rel: 'canonical', href: config.canonical });\n }\n\n useHead({ title: config.title, meta, link });\n\n if (config.openGraph) useOpenGraph(config.openGraph);\n if (config.twitter) useTwitterCard(config.twitter);\n if (config.structuredData) useStructuredData(config.structuredData);\n}\n\n// --- Sitemap generation (for CLI/build) ---\n\nexport interface SitemapEntry {\n url: string;\n lastmod?: string;\n changefreq?: 'always' | 'hourly' | 'daily' | 'weekly' | 'monthly' | 'yearly' | 'never';\n priority?: number;\n}\n\n/**\n * Generate a sitemap.xml string from route entries.\n *\n * ```ts\n * const xml = generateSitemap('https://mysite.com', [\n * { url: '/', priority: 1.0 },\n * { url: '/about', changefreq: 'monthly' },\n * { url: '/blog/hello', lastmod: '2026-03-29' },\n * ]);\n * ```\n */\nexport function generateSitemap(baseUrl: string, entries: SitemapEntry[]): string {\n let xml = '<?xml version=\"1.0\" encoding=\"UTF-8\"?>\\n';\n xml += '<urlset xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\">\\n';\n\n for (const entry of entries) {\n xml += ' <url>\\n';\n xml += ` <loc>${baseUrl}${entry.url}</loc>\\n`;\n if (entry.lastmod) xml += ` <lastmod>${entry.lastmod}</lastmod>\\n`;\n if (entry.changefreq) xml += ` <changefreq>${entry.changefreq}</changefreq>\\n`;\n if (entry.priority != null) xml += ` <priority>${entry.priority}</priority>\\n`;\n xml += ' </url>\\n';\n }\n\n xml += '</urlset>\\n';\n return xml;\n}\n","/**\n * Pipes — template transform functions.\n *\n * Pure functions that transform display values. Chainable, memoized,\n * and usable both in templates and in script.\n *\n * ```ts\n * import { pipe, uppercase, date, currency } from '@akashjs/runtime';\n *\n * pipe('hello', uppercase); // 'HELLO'\n * pipe(new Date(), date, 'short'); // '3/29/26'\n * pipe(1234.5, currency, 'USD'); // '$1,234.50'\n * pipe('hello world', capitalize, truncate, 5); // 'Hello...'\n * ```\n */\n\n// =========================================================================\n// Pipe type and runner\n// =========================================================================\n\nexport type PipeFn<TIn = any, TOut = any> = (value: TIn, ...args: any[]) => TOut;\n\n/**\n * Apply a pipe transform to a value.\n *\n * ```ts\n * pipe('hello', uppercase); // 'HELLO'\n * pipe(1234, currency, 'USD'); // '$1,234.00'\n * ```\n */\nexport function pipe<TIn, TOut>(value: TIn, transform: PipeFn<TIn, TOut>, ...args: any[]): TOut {\n return transform(value, ...args);\n}\n\n/**\n * Chain multiple pipes together.\n *\n * ```ts\n * const format = chain(trim, capitalize, truncate);\n * format(' hello world ', 10); // 'Hello w...'\n * ```\n */\nexport function chain<T>(...pipes: PipeFn[]): PipeFn<T, any> {\n return (value: T, ...args: any[]) => {\n let result: any = value;\n for (const p of pipes) {\n result = p(result, ...args);\n }\n return result;\n };\n}\n\n/**\n * Define a custom pipe.\n *\n * ```ts\n * const reverse = definePipe<string, string>((value) =>\n * value.split('').reverse().join('')\n * );\n * pipe('hello', reverse); // 'olleh'\n * ```\n */\nexport function definePipe<TIn, TOut>(fn: PipeFn<TIn, TOut>): PipeFn<TIn, TOut> {\n return fn;\n}\n\n// =========================================================================\n// Built-in pipes\n// =========================================================================\n\n/** Convert string to uppercase */\nexport const uppercase: PipeFn<string, string> = (value) => String(value).toUpperCase();\n\n/** Convert string to lowercase */\nexport const lowercase: PipeFn<string, string> = (value) => String(value).toLowerCase();\n\n/** Capitalize first letter */\nexport const capitalize: PipeFn<string, string> = (value) => {\n const s = String(value);\n return s.charAt(0).toUpperCase() + s.slice(1);\n};\n\n/** Title case — capitalize each word */\nexport const titleCase: PipeFn<string, string> = (value) => {\n return String(value).replace(/\\b\\w/g, (c) => c.toUpperCase());\n};\n\n/** Trim whitespace */\nexport const trim: PipeFn<string, string> = (value) => String(value).trim();\n\n/**\n * Truncate string to a max length, adding ellipsis.\n *\n * ```ts\n * pipe('Hello World', truncate, 8); // 'Hello...'\n * ```\n */\nexport const truncate: PipeFn<string, string> = (value, maxLength: number = 50, suffix = '...') => {\n const s = String(value);\n if (s.length <= maxLength) return s;\n return s.slice(0, maxLength - suffix.length) + suffix;\n};\n\n/**\n * Format a date.\n *\n * ```ts\n * pipe(new Date(), date); // '3/29/2026'\n * pipe(new Date(), date, 'short'); // '3/29/26'\n * pipe(new Date(), date, 'long'); // 'March 29, 2026'\n * pipe(new Date(), date, 'time'); // '2:30 PM'\n * pipe(new Date(), date, 'iso'); // '2026-03-29T...'\n * ```\n */\nexport const date: PipeFn<Date | string | number, string> = (\n value,\n format: 'short' | 'medium' | 'long' | 'full' | 'time' | 'iso' = 'medium',\n locale?: string,\n) => {\n const d = value instanceof Date ? value : new Date(value);\n if (isNaN(d.getTime())) return String(value);\n\n if (format === 'iso') return d.toISOString();\n\n const loc = locale ?? 'en-US';\n\n const options: Record<string, Intl.DateTimeFormatOptions> = {\n short: { year: '2-digit', month: 'numeric', day: 'numeric' },\n medium: { year: 'numeric', month: 'numeric', day: 'numeric' },\n long: { year: 'numeric', month: 'long', day: 'numeric' },\n full: { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' },\n time: { hour: 'numeric', minute: '2-digit' },\n };\n\n return new Intl.DateTimeFormat(loc, options[format]).format(d);\n};\n\n/**\n * Format a number as currency.\n *\n * ```ts\n * pipe(1234.5, currency); // '$1,234.50'\n * pipe(1234.5, currency, 'EUR'); // '€1,234.50'\n * ```\n */\nexport const currency: PipeFn<number, string> = (value, currencyCode = 'USD', locale?: string) => {\n return new Intl.NumberFormat(locale ?? 'en-US', {\n style: 'currency',\n currency: currencyCode,\n }).format(Number(value));\n};\n\n/**\n * Format a number with locale formatting.\n *\n * ```ts\n * pipe(1234567.89, number); // '1,234,567.89'\n * pipe(1234567.89, number, '0-2'); // '1,234,567.89' (0-2 decimal digits)\n * ```\n */\nexport const number: PipeFn<number, string> = (value, digitsInfo?: string, locale?: string) => {\n const opts: Intl.NumberFormatOptions = {};\n if (digitsInfo) {\n const [min, max] = digitsInfo.split('-').map(Number);\n opts.minimumFractionDigits = min;\n opts.maximumFractionDigits = max ?? min;\n }\n return new Intl.NumberFormat(locale ?? 'en-US', opts).format(Number(value));\n};\n\n/**\n * Format a number as a percentage.\n *\n * ```ts\n * pipe(0.85, percent); // '85%'\n * pipe(0.856, percent); // '86%'\n * ```\n */\nexport const percent: PipeFn<number, string> = (value, decimals = 0, locale?: string) => {\n return new Intl.NumberFormat(locale ?? 'en-US', {\n style: 'percent',\n minimumFractionDigits: decimals,\n maximumFractionDigits: decimals,\n }).format(Number(value));\n};\n\n/**\n * JSON stringify with formatting.\n *\n * ```ts\n * pipe({ a: 1 }, json); // '{\\n \"a\": 1\\n}'\n * pipe({ a: 1 }, json, 0); // '{\"a\":1}'\n * ```\n */\nexport const json: PipeFn<unknown, string> = (value, indent = 2) => {\n return JSON.stringify(value, null, indent);\n};\n\n/**\n * Pluralize a string based on count.\n *\n * ```ts\n * pipe(1, plural, 'item', 'items'); // '1 item'\n * pipe(5, plural, 'item', 'items'); // '5 items'\n * ```\n */\nexport const plural: PipeFn<number, string> = (value, singular: string, pluralForm?: string) => {\n const p = pluralForm ?? `${singular}s`;\n return `${value} ${value === 1 ? singular : p}`;\n};\n\n/**\n * Relative time formatting.\n *\n * ```ts\n * pipe(Date.now() - 60000, relativeTime); // '1 minute ago'\n * ```\n */\nexport const relativeTime: PipeFn<Date | number, string> = (value, locale?: string) => {\n const d = value instanceof Date ? value.getTime() : Number(value);\n const diff = d - Date.now();\n const absDiff = Math.abs(diff);\n\n const units: Array<[number, Intl.RelativeTimeFormatUnit]> = [\n [60000, 'second'],\n [3600000, 'minute'],\n [86400000, 'hour'],\n [2592000000, 'day'],\n [31536000000, 'month'],\n [Infinity, 'year'],\n ];\n\n const divisors: Record<string, number> = {\n second: 1000, minute: 60000, hour: 3600000,\n day: 86400000, month: 2592000000, year: 31536000000,\n };\n\n let unit: Intl.RelativeTimeFormatUnit = 'second';\n for (const [threshold, u] of units) {\n if (absDiff < threshold) { unit = u; break; }\n }\n\n const n = Math.round(diff / divisors[unit]);\n\n if (typeof Intl !== 'undefined' && Intl.RelativeTimeFormat) {\n return new Intl.RelativeTimeFormat(locale ?? 'en', { numeric: 'auto' }).format(n, unit);\n }\n\n const abs = Math.abs(n);\n const suffix = n < 0 ? 'ago' : 'from now';\n return `${abs} ${unit}${abs !== 1 ? 's' : ''} ${suffix}`;\n};\n","/**\n * Custom directive system.\n *\n * Reusable attribute behaviors with lifecycle hooks.\n * Directives attach behavior to elements without components.\n *\n * ```ts\n * const vAutoFocus = defineDirective({\n * mounted(el) { el.focus(); },\n * });\n *\n * const vTooltip = defineDirective<string>({\n * mounted(el, { value }) { addTooltip(el, value); },\n * updated(el, { value }) { updateTooltip(el, value); },\n * unmounted(el) { removeTooltip(el); },\n * });\n *\n * // Usage:\n * applyDirective(el, vAutoFocus);\n * applyDirective(el, vTooltip, 'Hello tooltip');\n * ```\n */\n\n// =========================================================================\n// Types\n// =========================================================================\n\nexport interface DirectiveBinding<T = any> {\n /** Current value passed to the directive */\n value: T;\n /** Previous value (on update) */\n oldValue?: T;\n /** Argument (e.g., v-on:click → arg = 'click') */\n arg?: string;\n /** Modifiers (e.g., v-on.prevent → modifiers.prevent = true) */\n modifiers?: Record<string, boolean>;\n}\n\nexport interface DirectiveHooks<T = any> {\n /** Called when the element is inserted into the DOM */\n mounted?: (el: HTMLElement, binding: DirectiveBinding<T>) => void;\n /** Called when the bound value updates */\n updated?: (el: HTMLElement, binding: DirectiveBinding<T>) => void;\n /** Called before the element is removed from the DOM */\n unmounted?: (el: HTMLElement, binding: DirectiveBinding<T>) => void;\n}\n\nexport interface Directive<T = any> {\n _type: 'directive';\n hooks: DirectiveHooks<T>;\n}\n\n// =========================================================================\n// defineDirective\n// =========================================================================\n\n/**\n * Define a custom directive.\n *\n * ```ts\n * const vClickOutside = defineDirective<() => void>({\n * mounted(el, { value: handler }) {\n * const listener = (e: Event) => {\n * if (!el.contains(e.target as Node)) handler();\n * };\n * document.addEventListener('click', listener);\n * (el as any).__clickOutside = listener;\n * },\n * unmounted(el) {\n * document.removeEventListener('click', (el as any).__clickOutside);\n * },\n * });\n * ```\n */\nexport function defineDirective<T = any>(hooks: DirectiveHooks<T>): Directive<T> {\n return { _type: 'directive', hooks };\n}\n\n/**\n * Shorthand: directive from a single function (runs on mount).\n */\nexport function directiveFromFn<T = any>(\n fn: (el: HTMLElement, binding: DirectiveBinding<T>) => void | (() => void),\n): Directive<T> {\n return defineDirective<T>({\n mounted(el, binding) {\n const cleanup = fn(el, binding);\n if (typeof cleanup === 'function') {\n (el as any).__directiveCleanup = cleanup;\n }\n },\n unmounted(el) {\n (el as any).__directiveCleanup?.();\n },\n });\n}\n\n// =========================================================================\n// applyDirective — attach a directive to an element\n// =========================================================================\n\nconst DIRECTIVE_KEY = Symbol('akash.directives');\n\ninterface DirectiveState {\n directive: Directive;\n binding: DirectiveBinding;\n}\n\n/**\n * Apply a directive to an element.\n *\n * ```ts\n * applyDirective(el, vAutoFocus);\n * applyDirective(el, vTooltip, 'Hello');\n * ```\n */\nexport function applyDirective<T>(\n el: HTMLElement,\n directive: Directive<T>,\n value?: T,\n options?: { arg?: string; modifiers?: Record<string, boolean> },\n): void {\n const binding: DirectiveBinding<T> = {\n value: value as T,\n arg: options?.arg,\n modifiers: options?.modifiers,\n };\n\n // Store directive state on element\n const states: DirectiveState[] = (el as any)[DIRECTIVE_KEY] ?? [];\n states.push({ directive, binding });\n (el as any)[DIRECTIVE_KEY] = states;\n\n // Call mounted hook\n directive.hooks.mounted?.(el, binding);\n}\n\n/**\n * Update a directive's value on an element.\n */\nexport function updateDirective<T>(\n el: HTMLElement,\n directive: Directive<T>,\n newValue: T,\n): void {\n const states: DirectiveState[] = (el as any)[DIRECTIVE_KEY] ?? [];\n const state = states.find((s) => s.directive === directive);\n\n if (state) {\n const oldValue = state.binding.value;\n state.binding = { ...state.binding, value: newValue, oldValue };\n directive.hooks.updated?.(el, state.binding);\n }\n}\n\n/**\n * Remove all directives from an element (call on unmount).\n */\nexport function removeDirectives(el: HTMLElement): void {\n const states: DirectiveState[] = (el as any)[DIRECTIVE_KEY] ?? [];\n for (const state of states) {\n state.directive.hooks.unmounted?.(el, state.binding);\n }\n delete (el as any)[DIRECTIVE_KEY];\n}\n\n// =========================================================================\n// Built-in directives\n// =========================================================================\n\n/** Auto-focus an element when mounted */\nexport const vAutoFocus = defineDirective({\n mounted(el) {\n requestAnimationFrame(() => el.focus());\n },\n});\n\n/** Click outside handler */\nexport const vClickOutside = defineDirective<() => void>({\n mounted(el, { value: handler }) {\n const listener = (e: Event) => {\n if (!el.contains(e.target as Node)) handler();\n };\n document.addEventListener('click', listener, true);\n (el as any).__vClickOutside = listener;\n },\n unmounted(el) {\n document.removeEventListener('click', (el as any).__vClickOutside, true);\n delete (el as any).__vClickOutside;\n },\n});\n\n/** Long press handler */\nexport const vLongPress = defineDirective<{ handler: () => void; duration?: number }>({\n mounted(el, { value }) {\n let timer: ReturnType<typeof setTimeout> | null = null;\n const duration = value.duration ?? 500;\n\n const start = () => { timer = setTimeout(value.handler, duration); };\n const cancel = () => { if (timer) { clearTimeout(timer); timer = null; } };\n\n el.addEventListener('pointerdown', start);\n el.addEventListener('pointerup', cancel);\n el.addEventListener('pointerleave', cancel);\n\n (el as any).__vLongPress = { start, cancel };\n },\n unmounted(el) {\n const fns = (el as any).__vLongPress;\n if (fns) {\n el.removeEventListener('pointerdown', fns.start);\n el.removeEventListener('pointerup', fns.cancel);\n el.removeEventListener('pointerleave', fns.cancel);\n }\n },\n});\n\n/** Intersection observer — triggers callback when element enters viewport */\nexport const vIntersect = defineDirective<(isIntersecting: boolean) => void>({\n mounted(el, { value: callback }) {\n const observer = new IntersectionObserver((entries) => {\n callback(entries[0].isIntersecting);\n });\n observer.observe(el);\n (el as any).__vIntersect = observer;\n },\n unmounted(el) {\n (el as any).__vIntersect?.disconnect();\n },\n});\n\n/** Resize observer — triggers callback on element resize */\nexport const vResize = defineDirective<(entry: ResizeObserverEntry) => void>({\n mounted(el, { value: callback }) {\n const observer = new ResizeObserver((entries) => {\n callback(entries[0]);\n });\n observer.observe(el);\n (el as any).__vResize = observer;\n },\n unmounted(el) {\n (el as any).__vResize?.disconnect();\n },\n});\n","/**\n * Web Components output.\n *\n * Compile AkashJS components to native Custom Elements that can\n * be used in any framework or plain HTML.\n *\n * ```ts\n * import { defineCustomElement } from '@akashjs/runtime';\n * import Counter from './Counter.akash';\n *\n * defineCustomElement('my-counter', Counter, {\n * props: ['initial'],\n * shadow: true,\n * });\n *\n * // Now usable as: <my-counter initial=\"5\"></my-counter>\n * ```\n */\n\nimport type { Component } from './component.js';\n\n// =========================================================================\n// Types\n// =========================================================================\n\nexport interface CustomElementOptions {\n /** Props to observe as attributes */\n props?: string[];\n /** Use Shadow DOM (default: true) */\n shadow?: boolean;\n /** CSS styles to inject (for shadow DOM) */\n styles?: string;\n /** Extend an existing element */\n extends?: string;\n}\n\n// =========================================================================\n// defineCustomElement\n// =========================================================================\n\n/**\n * Register an AkashJS component as a Custom Element.\n *\n * ```ts\n * defineCustomElement('my-counter', Counter, {\n * props: ['initial', 'step'],\n * shadow: true,\n * styles: ':host { display: block; }',\n * });\n * ```\n */\nexport function defineCustomElement<P extends Record<string, unknown>>(\n tagName: string,\n component: Component<P>,\n options: CustomElementOptions = {},\n): typeof HTMLElement {\n const { props = [], shadow = true, styles } = options;\n\n class AkashElement extends HTMLElement {\n static get observedAttributes(): string[] {\n return props;\n }\n\n private _root: ShadowRoot | HTMLElement;\n private _mounted = false;\n private _props: Record<string, unknown> = {};\n\n constructor() {\n super();\n this._root = shadow ? this.attachShadow({ mode: 'open' }) : this;\n }\n\n connectedCallback(): void {\n // Read initial attribute values\n for (const prop of props) {\n const attr = this.getAttribute(prop);\n if (attr !== null) {\n this._props[prop] = parseAttributeValue(attr);\n }\n }\n\n this._render();\n this._mounted = true;\n }\n\n disconnectedCallback(): void {\n // Clear rendered content\n while (this._root.firstChild) {\n this._root.removeChild(this._root.firstChild);\n }\n this._mounted = false;\n }\n\n attributeChangedCallback(name: string, _oldValue: string | null, newValue: string | null): void {\n this._props[name] = newValue !== null ? parseAttributeValue(newValue) : undefined;\n if (this._mounted) {\n this._render();\n }\n }\n\n private _render(): void {\n // Clear previous\n while (this._root.firstChild) {\n this._root.removeChild(this._root.firstChild);\n }\n\n // Inject styles if shadow DOM\n if (shadow && styles) {\n const styleEl = document.createElement('style');\n styleEl.textContent = styles;\n this._root.appendChild(styleEl);\n }\n\n // Render component\n const node = component(this._props as any);\n this._root.appendChild(node);\n }\n\n // Allow programmatic prop setting\n setProps(newProps: Partial<P>): void {\n Object.assign(this._props, newProps);\n if (this._mounted) this._render();\n }\n }\n\n // Register the custom element\n if (typeof customElements !== 'undefined' && !customElements.get(tagName)) {\n if (options.extends) {\n customElements.define(tagName, AkashElement, { extends: options.extends });\n } else {\n customElements.define(tagName, AkashElement);\n }\n }\n\n return AkashElement;\n}\n\n/**\n * Convert an AkashJS component to a Custom Element class without registering.\n * Useful for testing or when you want to register later.\n */\nexport function toCustomElement<P extends Record<string, unknown>>(\n component: Component<P>,\n options: CustomElementOptions = {},\n): typeof HTMLElement {\n // Same implementation but without auto-registration\n const { props = [], shadow = true, styles } = options;\n\n return class extends HTMLElement {\n static get observedAttributes() { return props; }\n\n private _root: ShadowRoot | HTMLElement;\n private _mounted = false;\n private _props: Record<string, unknown> = {};\n\n constructor() {\n super();\n this._root = shadow ? this.attachShadow({ mode: 'open' }) : this;\n }\n\n connectedCallback() {\n for (const prop of props) {\n const attr = this.getAttribute(prop);\n if (attr !== null) this._props[prop] = parseAttributeValue(attr);\n }\n this._render();\n this._mounted = true;\n }\n\n disconnectedCallback() {\n while (this._root.firstChild) this._root.removeChild(this._root.firstChild);\n this._mounted = false;\n }\n\n attributeChangedCallback(name: string, _old: string | null, val: string | null) {\n this._props[name] = val !== null ? parseAttributeValue(val) : undefined;\n if (this._mounted) this._render();\n }\n\n private _render() {\n while (this._root.firstChild) this._root.removeChild(this._root.firstChild);\n if (shadow && styles) {\n const s = document.createElement('style');\n s.textContent = styles;\n this._root.appendChild(s);\n }\n this._root.appendChild(component(this._props as any));\n }\n } as any;\n}\n\n// =========================================================================\n// Helpers\n// =========================================================================\n\nfunction parseAttributeValue(value: string): unknown {\n // Try to parse as JSON (numbers, booleans, objects)\n try {\n return JSON.parse(value);\n } catch {\n return value; // Keep as string\n }\n}\n","/**\n * Static Site Generation (SSG) / Prerendering.\n *\n * Pre-render pages at build time to static HTML files.\n * Combine with hydration for interactive islands.\n *\n * ```ts\n * // In build script or akash build --prerender:\n * await prerender({\n * routes: ['/', '/about', '/blog/hello'],\n * render: (url) => renderToString(App, { url }),\n * outDir: 'dist',\n * });\n * ```\n */\n\n// =========================================================================\n// Types\n// =========================================================================\n\nexport interface PrerenderOptions {\n /** Routes to prerender */\n routes: string[] | (() => Promise<string[]>);\n /** Render function — returns HTML for a given URL */\n render: (url: string) => Promise<string> | string;\n /** Output directory (default: 'dist') */\n outDir?: string;\n /** HTML template with {{content}} placeholder */\n template?: string;\n /** Callback per rendered page */\n onPage?: (url: string, html: string) => void;\n /** Callback on error */\n onError?: (url: string, error: Error) => void;\n /** Concurrency limit (default: 5) */\n concurrency?: number;\n}\n\nexport interface PrerenderResult {\n /** Successfully rendered pages */\n rendered: Array<{ url: string; file: string; size: number }>;\n /** Pages that failed to render */\n errors: Array<{ url: string; error: string }>;\n /** Total time in ms */\n duration: number;\n}\n\n// =========================================================================\n// Default HTML template\n// =========================================================================\n\nconst DEFAULT_TEMPLATE = `<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"UTF-8\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n {{head}}\n</head>\n<body>\n <div id=\"app\">{{content}}</div>\n {{scripts}}\n</body>\n</html>`;\n\n// =========================================================================\n// prerender()\n// =========================================================================\n\n/**\n * Pre-render routes to static HTML files.\n */\nexport async function prerender(options: PrerenderOptions): Promise<PrerenderResult> {\n const {\n routes: routesInput,\n render,\n outDir = 'dist',\n template = DEFAULT_TEMPLATE,\n onPage,\n onError,\n concurrency = 5,\n } = options;\n\n const start = Date.now();\n\n // Resolve routes\n const routes = typeof routesInput === 'function'\n ? await routesInput()\n : routesInput;\n\n const result: PrerenderResult = {\n rendered: [],\n errors: [],\n duration: 0,\n };\n\n // Process in batches for concurrency control\n for (let i = 0; i < routes.length; i += concurrency) {\n const batch = routes.slice(i, i + concurrency);\n await Promise.all(batch.map(async (url) => {\n try {\n const content = await render(url);\n const html = template\n .replace('{{content}}', content)\n .replace('{{head}}', '')\n .replace('{{scripts}}', '');\n\n const filePath = urlToFilePath(url);\n\n // In a real implementation, we'd write to disk here.\n // For now, we return the result for the caller to handle.\n result.rendered.push({\n url,\n file: `${outDir}/${filePath}`,\n size: new Blob([html]).size,\n });\n\n onPage?.(url, html);\n } catch (err) {\n const error = err instanceof Error ? err : new Error(String(err));\n result.errors.push({ url, error: error.message });\n onError?.(url, error);\n }\n }));\n }\n\n result.duration = Date.now() - start;\n return result;\n}\n\n// =========================================================================\n// Route discovery\n// =========================================================================\n\n/**\n * Discover routes from the file system for prerendering.\n * Scans src/routes/ and returns all static (non-parameterized) paths.\n */\nexport function discoverStaticRoutes(routeManifest: Array<{ path: string }>): string[] {\n return routeManifest\n .filter((r) => !r.path.includes(':') && !r.path.includes('*'))\n .map((r) => r.path);\n}\n\n/**\n * Generate all possible paths for parameterized routes.\n *\n * ```ts\n * const paths = generatePaths('/blog/:slug', [\n * { slug: 'hello' },\n * { slug: 'world' },\n * ]);\n * // ['/blog/hello', '/blog/world']\n * ```\n */\nexport function generatePaths(\n pattern: string,\n params: Record<string, string>[],\n): string[] {\n return params.map((p) => {\n let path = pattern;\n for (const [key, value] of Object.entries(p)) {\n path = path.replace(`:${key}`, value);\n }\n return path;\n });\n}\n\n// =========================================================================\n// Helpers\n// =========================================================================\n\n/**\n * Convert a URL path to a file path for static output.\n * / → index.html\n * /about → about/index.html\n * /blog/hello → blog/hello/index.html\n */\nexport function urlToFilePath(url: string): string {\n const clean = url.replace(/^\\//, '').replace(/\\/$/, '');\n if (!clean) return 'index.html';\n return `${clean}/index.html`;\n}\n\n/**\n * Generate a sitemap from prerender results.\n */\nexport function sitemapFromResults(\n baseUrl: string,\n results: PrerenderResult,\n): string {\n let xml = '<?xml version=\"1.0\" encoding=\"UTF-8\"?>\\n';\n xml += '<urlset xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\">\\n';\n\n for (const page of results.rendered) {\n xml += ` <url>\\n`;\n xml += ` <loc>${baseUrl}${page.url}</loc>\\n`;\n xml += ` <lastmod>${new Date().toISOString().split('T')[0]}</lastmod>\\n`;\n xml += ` </url>\\n`;\n }\n\n xml += '</urlset>\\n';\n return xml;\n}\n","/**\n * Switch/Case/Default control flow component.\n *\n * Renders one of multiple branches based on a reactive expression.\n *\n * ```html\n * <Switch on={status()}>\n * <Case value=\"loading\"><Spinner /></Case>\n * <Case value=\"error\"><ErrorMessage /></Case>\n * <Case value=\"success\"><Content /></Case>\n * <Default><Fallback /></Default>\n * </Switch>\n * ```\n *\n * Or programmatic:\n * ```ts\n * renderSwitch(container, anchor, () => status(), {\n * loading: () => Spinner({}),\n * error: () => ErrorView({}),\n * success: () => Content({}),\n * _default: () => Fallback({}),\n * });\n * ```\n */\n\nimport { defineComponent } from './component.js';\nimport { signal, effect } from './signals.js';\nimport { getCurrentScope, runInScope } from './context.js';\nimport { nodeToDOM } from './dom.js';\nimport type { AkashNode } from './types.js';\n\n// =========================================================================\n// Programmatic renderSwitch\n// =========================================================================\n\n/**\n * Render a switch block. Swaps DOM based on reactive expression value.\n */\nexport function renderSwitch(\n parent: Node,\n anchor: Node,\n expression: () => unknown,\n cases: Record<string, () => Node>,\n): () => void {\n let currentNodes: Node[] = [];\n\n // Capture scope so children inherit provide/inject context\n const scope = getCurrentScope();\n\n const dispose = effect(\n () => {\n const value = String(expression());\n\n // Remove current nodes\n for (const node of currentNodes) {\n if (node.parentNode) node.parentNode.removeChild(node);\n }\n currentNodes = [];\n\n // Find matching case or default\n const branch = cases[value] ?? cases._default;\n const liveParent = anchor.parentNode;\n if (branch && liveParent) {\n const node = scope ? runInScope(scope, branch) : branch();\n const nodes = node instanceof DocumentFragment\n ? Array.from(node.childNodes)\n : [node];\n for (const n of nodes) {\n liveParent.insertBefore(n, anchor);\n }\n currentNodes = nodes;\n }\n },\n { render: true },\n );\n\n return () => {\n dispose();\n for (const node of currentNodes) {\n if (node.parentNode) node.parentNode.removeChild(node);\n }\n };\n}\n\n// =========================================================================\n// <Switch> component\n// =========================================================================\n\nexport interface SwitchProps {\n /** The value to switch on */\n on: unknown;\n /** Cases map: value → render function */\n cases: Record<string, () => AkashNode>;\n /** Default case */\n fallback?: () => AkashNode;\n}\n\n/**\n * <Switch> component — declarative switch/case.\n *\n * ```ts\n * Switch({\n * on: status(),\n * cases: {\n * loading: () => Spinner({}),\n * error: () => ErrorView({}),\n * success: () => Content({}),\n * },\n * fallback: () => 'Unknown status',\n * });\n * ```\n */\nexport const Switch = defineComponent<SwitchProps>((ctx) => {\n return () => {\n const container = document.createElement('div');\n container.style.display = 'contents';\n const anchor = document.createComment('switch');\n container.appendChild(anchor);\n\n const casesMap = { ...ctx.props.cases };\n if (ctx.props.fallback) {\n casesMap._default = () => nodeToDOM(ctx.props.fallback!());\n }\n\n renderSwitch(\n container,\n anchor,\n () => ctx.props.on,\n Object.fromEntries(\n Object.entries(casesMap).map(([k, v]) => [\n k,\n () => nodeToDOM(v()),\n ]),\n ),\n );\n\n return container;\n };\n});\n\n// =========================================================================\n// match() — functional pattern matching for signals\n// =========================================================================\n\n/**\n * Pattern match on a signal value. Returns the result of the matching branch.\n *\n * ```ts\n * const message = match(status(), {\n * loading: () => 'Loading...',\n * error: () => 'Something went wrong',\n * success: () => 'Done!',\n * _: () => 'Unknown',\n * });\n * ```\n */\nexport function match<T, R>(\n value: T,\n cases: Record<string, (value: T) => R> & { _?: (value: T) => R },\n): R | undefined {\n const key = String(value);\n const branch = cases[key] ?? cases._;\n return branch ? branch(value) : undefined;\n}\n","/**\n * Hierarchical Dependency Injection.\n *\n * Extends the basic provide/inject with multi-level injectors,\n * provider factories, tree-shakable providers, and multi-providers.\n *\n * ```ts\n * // Define a provider with factory\n * const ApiService = defineProvider({\n * factory: () => createHttpClient({ baseUrl: '/api' }),\n * });\n *\n * // Tree-shakable provider (only bundled if injected)\n * const Logger = defineProvider({\n * factory: () => new ConsoleLogger(),\n * providedIn: 'root',\n * });\n *\n * // Use in component\n * const api = injectProvider(ApiService);\n * ```\n */\n\nimport { signal } from './signals.js';\n\n// =========================================================================\n// Types\n// =========================================================================\n\nexport interface ProviderDef<T> {\n _type: 'provider';\n factory: () => T;\n providedIn?: 'root' | 'component';\n multi?: boolean;\n _id: symbol;\n}\n\nexport interface Injector {\n /** Get a provider value */\n get<T>(provider: ProviderDef<T>): T;\n /** Check if a provider is registered */\n has(provider: ProviderDef<unknown>): boolean;\n /** Create a child injector */\n createChild(providers?: ProviderRegistration[]): Injector;\n /** Dispose this injector and all cached instances */\n dispose(): void;\n}\n\nexport interface ProviderRegistration<T = unknown> {\n provide: ProviderDef<T>;\n useFactory?: () => T;\n useValue?: T;\n useExisting?: ProviderDef<T>;\n multi?: boolean;\n}\n\n// =========================================================================\n// defineProvider\n// =========================================================================\n\nlet providerIdCounter = 0;\n\n/**\n * Define a typed provider.\n *\n * ```ts\n * const DatabaseService = defineProvider({\n * factory: () => new Database(config),\n * providedIn: 'root', // singleton, tree-shakable\n * });\n * ```\n */\nexport function defineProvider<T>(config: {\n factory: () => T;\n providedIn?: 'root' | 'component';\n multi?: boolean;\n}): ProviderDef<T> {\n return {\n _type: 'provider',\n factory: config.factory,\n providedIn: config.providedIn,\n multi: config.multi,\n _id: Symbol(`provider-${++providerIdCounter}`),\n };\n}\n\n// =========================================================================\n// Injector implementation\n// =========================================================================\n\nconst rootInstances = new Map<symbol, unknown>();\n\n/**\n * Create an injector with hierarchical resolution.\n *\n * ```ts\n * const injector = createInjector([\n * { provide: ApiService, useFactory: () => new MockApi() },\n * { provide: Logger, useValue: console },\n * ]);\n *\n * const api = injector.get(ApiService);\n * ```\n */\nexport function createInjector(\n providers: ProviderRegistration[] = [],\n parent?: Injector,\n): Injector {\n const instances = new Map<symbol, unknown>();\n const multiInstances = new Map<symbol, unknown[]>();\n const registrations = new Map<symbol, ProviderRegistration>();\n\n // Register providers\n for (const reg of providers) {\n registrations.set(reg.provide._id, reg);\n }\n\n const injector: Injector = {\n get<T>(provider: ProviderDef<T>): T {\n const id = provider._id;\n\n // Multi-provider\n if (provider.multi) {\n if (multiInstances.has(id)) return multiInstances.get(id) as T;\n const values: unknown[] = [];\n const reg = registrations.get(id);\n if (reg?.useFactory) values.push(reg.useFactory());\n else if (reg?.useValue !== undefined) values.push(reg.useValue);\n if (parent?.has(provider)) {\n const parentValues = parent.get(provider);\n if (Array.isArray(parentValues)) values.push(...parentValues);\n }\n multiInstances.set(id, values);\n return values as T;\n }\n\n // Check local cache\n if (instances.has(id)) return instances.get(id) as T;\n\n // Check root singleton\n if (provider.providedIn === 'root' && rootInstances.has(id)) {\n return rootInstances.get(id) as T;\n }\n\n // Check local registrations\n const reg = registrations.get(id);\n if (reg) {\n const instance = resolveRegistration(reg, injector);\n instances.set(id, instance);\n return instance as T;\n }\n\n // Check parent\n if (parent) {\n return parent.get(provider);\n }\n\n // Use default factory\n const instance = provider.factory();\n\n // Cache at appropriate level\n if (provider.providedIn === 'root') {\n rootInstances.set(id, instance);\n } else {\n instances.set(id, instance);\n }\n\n return instance;\n },\n\n has(provider: ProviderDef<unknown>): boolean {\n if (instances.has(provider._id)) return true;\n if (registrations.has(provider._id)) return true;\n if (provider.providedIn === 'root' && rootInstances.has(provider._id)) return true;\n if (parent) return parent.has(provider);\n return false;\n },\n\n createChild(childProviders?: ProviderRegistration[]): Injector {\n return createInjector(childProviders ?? [], injector);\n },\n\n dispose() {\n instances.clear();\n multiInstances.clear();\n },\n };\n\n return injector;\n}\n\nfunction resolveRegistration(reg: ProviderRegistration, injector: Injector): unknown {\n if (reg.useValue !== undefined) return reg.useValue;\n if (reg.useFactory) return reg.useFactory();\n if (reg.useExisting) return injector.get(reg.useExisting);\n return reg.provide.factory();\n}\n\n// =========================================================================\n// Component-level injection helpers\n// =========================================================================\n\nlet currentInjector: Injector | null = null;\n\n/**\n * Set the current injector (called by component setup).\n * @internal\n */\nexport function setCurrentInjector(injector: Injector | null): Injector | null {\n const prev = currentInjector;\n currentInjector = injector;\n return prev;\n}\n\n/**\n * Inject a provider in the current component context.\n *\n * ```ts\n * const api = injectProvider(ApiService);\n * ```\n */\nexport function injectProvider<T>(provider: ProviderDef<T>): T {\n if (!currentInjector) {\n // Fallback to root or create new instance\n if (provider.providedIn === 'root') {\n if (rootInstances.has(provider._id)) {\n return rootInstances.get(provider._id) as T;\n }\n const instance = provider.factory();\n rootInstances.set(provider._id, instance);\n return instance;\n }\n return provider.factory();\n }\n return currentInjector.get(provider);\n}\n\n/**\n * Clear root provider instances (useful for testing).\n */\nexport function clearProviders(): void {\n rootInstances.clear();\n}\n","/**\n * Deferred loading with triggers.\n *\n * Lazy-load components based on viewport visibility, user interaction,\n * idle time, timer, hover, or custom conditions.\n *\n * ```ts\n * const LazyComments = defer(() => import('./Comments.akash'), {\n * trigger: 'viewport',\n * loading: () => <Skeleton variant=\"text\" />,\n * });\n *\n * const LazyChart = defer(() => import('./Chart.akash'), {\n * trigger: 'idle',\n * loading: () => <Spinner />,\n * });\n *\n * const LazyDropdown = defer(() => import('./Dropdown.akash'), {\n * trigger: 'interaction', // loads on hover/focus/click\n * });\n * ```\n */\n\nimport { signal } from './signals.js';\nimport { defineComponent } from './component.js';\nimport { nodeToDOM } from './dom.js';\nimport type { Component } from './component.js';\nimport type { AkashNode } from './types.js';\nimport type { ReadonlySignal } from './signals.js';\n\n// =========================================================================\n// Types\n// =========================================================================\n\nexport type DeferTrigger =\n | 'immediate'\n | 'viewport'\n | 'interaction'\n | 'idle'\n | 'hover'\n | { type: 'timer'; delay: number }\n | { type: 'custom'; condition: () => boolean };\n\nexport interface DeferOptions {\n /** When to start loading (default: 'viewport') */\n trigger?: DeferTrigger;\n /** Loading placeholder */\n loading?: () => AkashNode;\n /** Error fallback */\n error?: (err: Error) => AkashNode;\n /** Prefetch — start loading early but don't render until triggered */\n prefetch?: boolean;\n /** Minimum loading time in ms (prevent flash of loading state) */\n minLoadTime?: number;\n /** Viewport root margin for 'viewport' trigger */\n rootMargin?: string;\n}\n\n// =========================================================================\n// defer()\n// =========================================================================\n\n/**\n * Create a deferred component that loads based on a trigger.\n */\nexport function defer<P extends Record<string, unknown>>(\n loader: () => Promise<{ default: Component<P> }>,\n options: DeferOptions = {},\n): Component<P> {\n const {\n trigger = 'viewport',\n loading: loadingFn,\n error: errorFn,\n prefetch = false,\n minLoadTime = 0,\n rootMargin = '200px',\n } = options;\n\n let resolvedComp: Component<P> | null = null;\n let loadPromise: Promise<void> | null = null;\n let loadError: Error | null = null;\n\n function startLoad(): Promise<void> {\n if (loadPromise) return loadPromise;\n\n const start = Date.now();\n loadPromise = loader()\n .then(async (mod) => {\n // Enforce minimum load time\n const elapsed = Date.now() - start;\n if (minLoadTime > 0 && elapsed < minLoadTime) {\n await new Promise((r) => setTimeout(r, minLoadTime - elapsed));\n }\n resolvedComp = mod.default;\n })\n .catch((err) => {\n loadError = err instanceof Error ? err : new Error(String(err));\n });\n\n return loadPromise;\n }\n\n // Prefetch if requested\n if (prefetch) startLoad();\n\n return defineComponent<P>((ctx) => {\n const state = signal<'idle' | 'loading' | 'ready' | 'error'>('idle');\n let triggerCleanup: (() => void) | null = null;\n\n async function triggerLoad(): Promise<void> {\n if (state() !== 'idle') return;\n state.set('loading');\n await startLoad();\n state.set(loadError ? 'error' : 'ready');\n }\n\n return () => {\n const container = document.createElement('div');\n container.style.display = 'contents';\n\n const s = state();\n\n if (s === 'ready' && resolvedComp) {\n container.appendChild(resolvedComp(ctx.props as any));\n return container;\n }\n\n if (s === 'error' && errorFn && loadError) {\n container.appendChild(nodeToDOM(errorFn(loadError)));\n return container;\n }\n\n // Show loading placeholder\n if (loadingFn && s === 'loading') {\n container.appendChild(nodeToDOM(loadingFn()));\n }\n\n // Set up trigger\n if (s === 'idle') {\n setupTrigger(container, trigger, triggerLoad, rootMargin).then((cleanup) => {\n triggerCleanup = cleanup;\n });\n }\n\n return container;\n };\n });\n}\n\n// =========================================================================\n// Trigger setup\n// =========================================================================\n\nasync function setupTrigger(\n el: HTMLElement,\n trigger: DeferTrigger,\n load: () => void,\n rootMargin: string,\n): Promise<() => void> {\n if (trigger === 'immediate') {\n load();\n return () => {};\n }\n\n if (trigger === 'viewport') {\n return setupViewportTrigger(el, load, rootMargin);\n }\n\n if (trigger === 'interaction' || trigger === 'hover') {\n return setupInteractionTrigger(el, load, trigger);\n }\n\n if (trigger === 'idle') {\n return setupIdleTrigger(load);\n }\n\n if (typeof trigger === 'object' && trigger.type === 'timer') {\n return setupTimerTrigger(load, trigger.delay);\n }\n\n if (typeof trigger === 'object' && trigger.type === 'custom') {\n return setupCustomTrigger(load, trigger.condition);\n }\n\n load();\n return () => {};\n}\n\nfunction setupViewportTrigger(\n el: HTMLElement,\n load: () => void,\n rootMargin: string,\n): () => void {\n if (typeof IntersectionObserver === 'undefined') {\n load();\n return () => {};\n }\n\n const observer = new IntersectionObserver(\n (entries) => {\n if (entries[0]?.isIntersecting) {\n observer.disconnect();\n load();\n }\n },\n { rootMargin },\n );\n\n // Observe after element is in DOM\n requestAnimationFrame(() => observer.observe(el));\n return () => observer.disconnect();\n}\n\nfunction setupInteractionTrigger(\n el: HTMLElement,\n load: () => void,\n type: 'interaction' | 'hover',\n): () => void {\n const events = type === 'hover'\n ? ['mouseenter', 'focusin']\n : ['click', 'mouseenter', 'focusin', 'touchstart'];\n\n const handler = () => {\n for (const event of events) {\n el.removeEventListener(event, handler);\n }\n load();\n };\n\n for (const event of events) {\n el.addEventListener(event, handler, { once: true, passive: true });\n }\n\n return () => {\n for (const event of events) {\n el.removeEventListener(event, handler);\n }\n };\n}\n\nfunction setupIdleTrigger(load: () => void): () => void {\n if (typeof requestIdleCallback !== 'undefined') {\n const id = requestIdleCallback(() => load());\n return () => cancelIdleCallback(id);\n }\n // Fallback\n const timer = setTimeout(load, 200);\n return () => clearTimeout(timer);\n}\n\nfunction setupTimerTrigger(load: () => void, delay: number): () => void {\n const timer = setTimeout(load, delay);\n return () => clearTimeout(timer);\n}\n\nfunction setupCustomTrigger(load: () => void, condition: () => boolean): () => void {\n const check = () => {\n if (condition()) load();\n else requestAnimationFrame(check);\n };\n requestAnimationFrame(check);\n return () => {}; // Can't cancel rAF chain easily\n}\n","/**\n * View Transitions API integration.\n *\n * Wraps the browser's native View Transitions API for smooth\n * page transitions. Falls back gracefully when not supported.\n *\n * ```ts\n * // With router\n * const router = createRouter(routes);\n * enableViewTransitions(router);\n *\n * // Manual\n * await startViewTransition(() => {\n * updateDOM();\n * });\n * ```\n */\n\n// =========================================================================\n// Types\n// =========================================================================\n\nexport interface ViewTransitionOptions {\n /** CSS class to add to the document during transition */\n className?: string;\n /** Callback before the transition starts */\n onBefore?: () => void;\n /** Callback after the transition completes */\n onAfter?: () => void;\n /** Fallback behavior when API is not supported (default: 'instant') */\n fallback?: 'instant' | 'fade' | 'none';\n}\n\nexport interface ViewTransition {\n /** Promise that resolves when transition animation is complete */\n finished: Promise<void>;\n /** Promise that resolves when the DOM update callback has run */\n updateCallbackDone: Promise<void>;\n /** Promise that resolves when the transition is ready to animate */\n ready: Promise<void>;\n /** Skip the transition animation */\n skipTransition(): void;\n}\n\n// =========================================================================\n// Feature detection\n// =========================================================================\n\n/**\n * Check if the View Transitions API is supported.\n */\nexport function supportsViewTransitions(): boolean {\n return typeof document !== 'undefined' && 'startViewTransition' in document;\n}\n\n// =========================================================================\n// startViewTransition\n// =========================================================================\n\n/**\n * Start a view transition with the native API, falling back\n * to instant DOM update when not supported.\n *\n * ```ts\n * await startViewTransition(() => {\n * container.innerHTML = newContent;\n * });\n * ```\n */\nexport function startViewTransition(\n updateCallback: () => void | Promise<void>,\n options: ViewTransitionOptions = {},\n): ViewTransition {\n const { className, onBefore, onAfter, fallback = 'instant' } = options;\n\n onBefore?.();\n\n // Native View Transitions API\n if (supportsViewTransitions()) {\n if (className) document.documentElement.classList.add(className);\n\n const transition = (document as any).startViewTransition(async () => {\n await updateCallback();\n });\n\n const finished = transition.finished.then(() => {\n if (className) document.documentElement.classList.remove(className);\n onAfter?.();\n });\n\n return {\n finished,\n updateCallbackDone: transition.updateCallbackDone,\n ready: transition.ready,\n skipTransition: () => transition.skipTransition(),\n };\n }\n\n // Fallback\n if (fallback === 'fade') {\n return fadeTransition(updateCallback, options);\n }\n\n // Instant fallback\n const result = updateCallback();\n const done = result instanceof Promise ? result : Promise.resolve();\n\n onAfter?.();\n\n return {\n finished: done,\n updateCallbackDone: done,\n ready: Promise.resolve(),\n skipTransition: () => {},\n };\n}\n\n// =========================================================================\n// CSS helpers for View Transitions\n// =========================================================================\n\n/**\n * Generate CSS for customizing view transitions.\n *\n * ```ts\n * const css = viewTransitionCSS({\n * duration: '0.3s',\n * oldAnimation: 'slide-out-left',\n * newAnimation: 'slide-in-right',\n * });\n * ```\n */\nexport function viewTransitionCSS(config: {\n duration?: string;\n easing?: string;\n oldAnimation?: string;\n newAnimation?: string;\n} = {}): string {\n const {\n duration = '0.25s',\n easing = 'ease',\n oldAnimation,\n newAnimation,\n } = config;\n\n let css = `::view-transition-old(root),\\n::view-transition-new(root) {\\n`;\n css += ` animation-duration: ${duration};\\n`;\n css += ` animation-timing-function: ${easing};\\n`;\n css += `}\\n`;\n\n if (oldAnimation) {\n css += `::view-transition-old(root) {\\n animation-name: ${oldAnimation};\\n}\\n`;\n }\n if (newAnimation) {\n css += `::view-transition-new(root) {\\n animation-name: ${newAnimation};\\n}\\n`;\n }\n\n return css;\n}\n\n/**\n * Assign a view-transition-name to an element for per-element transitions.\n *\n * ```ts\n * assignTransitionName(headerEl, 'page-header');\n * assignTransitionName(contentEl, 'page-content');\n * ```\n */\nexport function assignTransitionName(el: HTMLElement, name: string): void {\n el.style.viewTransitionName = name;\n}\n\n// =========================================================================\n// Fade fallback (for browsers without View Transitions)\n// =========================================================================\n\nfunction fadeTransition(\n updateCallback: () => void | Promise<void>,\n options: ViewTransitionOptions,\n): ViewTransition {\n const el = document.documentElement;\n\n const finished = new Promise<void>(async (resolve) => {\n // Fade out\n el.style.transition = 'opacity 0.15s ease';\n el.style.opacity = '0';\n\n await new Promise((r) => setTimeout(r, 150));\n\n // Update DOM\n await updateCallback();\n\n // Fade in\n el.style.opacity = '1';\n\n await new Promise((r) => setTimeout(r, 150));\n\n el.style.transition = '';\n el.style.opacity = '';\n\n options.onAfter?.();\n resolve();\n });\n\n return {\n finished,\n updateCallbackDone: finished,\n ready: Promise.resolve(),\n skipTransition: () => {\n el.style.transition = '';\n el.style.opacity = '';\n },\n };\n}\n","/**\n * URL-synced reactive state.\n *\n * Automatically sync signal values to URL query parameters.\n * Users can share links, use browser back/forward, and state\n * persists across page reloads — all with zero boilerplate.\n *\n * ```ts\n * const search = useQueryState('q', '');\n * const page = useQueryState('page', 1);\n * const tags = useQueryState('tags', ['js']);\n *\n * search.set('akashjs'); // URL → ?q=akashjs&page=1&tags=js\n * // User hits back → signals update automatically\n * ```\n */\n\nimport { signal, effect } from './signals.js';\nimport { batch } from './scheduler.js';\nimport type { Signal } from './signals.js';\n\n// =========================================================================\n// Types\n// =========================================================================\n\nexport interface QueryStateOptions<T> {\n /** Custom serializer (default: auto-detect from type) */\n serialize?: (value: T) => string;\n /** Custom deserializer (default: auto-detect from type) */\n deserialize?: (raw: string) => T;\n /** Whether to push or replace history entry (default: 'replace') */\n history?: 'push' | 'replace';\n /** Debounce URL updates in ms (default: 0) */\n debounce?: number;\n /** Remove param from URL when value equals default */\n removeDefault?: boolean;\n}\n\n// =========================================================================\n// Serializers\n// =========================================================================\n\nfunction defaultSerialize(value: unknown): string {\n if (Array.isArray(value)) return value.join(',');\n if (typeof value === 'boolean') return value ? 'true' : 'false';\n return String(value);\n}\n\nfunction defaultDeserialize<T>(raw: string, defaultValue: T): T {\n if (typeof defaultValue === 'number') return Number(raw) as T;\n if (typeof defaultValue === 'boolean') return (raw === 'true' || raw === '1') as T;\n if (Array.isArray(defaultValue)) {\n return (raw ? raw.split(',') : []) as T;\n }\n return raw as T;\n}\n\n// =========================================================================\n// URL helpers\n// =========================================================================\n\nfunction getSearchParams(): URLSearchParams {\n if (typeof window === 'undefined') return new URLSearchParams();\n return new URLSearchParams(window.location.search);\n}\n\nfunction updateURL(params: URLSearchParams, mode: 'push' | 'replace'): void {\n if (typeof window === 'undefined') return;\n\n const search = params.toString();\n const url = search ? `${window.location.pathname}?${search}${window.location.hash}` : `${window.location.pathname}${window.location.hash}`;\n\n if (mode === 'push') {\n window.history.pushState(null, '', url);\n } else {\n window.history.replaceState(null, '', url);\n }\n}\n\n// =========================================================================\n// useQueryState — single value\n// =========================================================================\n\n/** Track active query state signals for popstate sync */\nconst activeStates = new Map<string, { signal: Signal<any>; deserialize: (raw: string) => any; defaultValue: any }>();\nlet popstateListening = false;\n\nfunction ensurePopstateListener(): void {\n if (popstateListening || typeof window === 'undefined') return;\n popstateListening = true;\n\n window.addEventListener('popstate', () => {\n const params = getSearchParams();\n batch(() => {\n for (const [key, state] of activeStates) {\n const raw = params.get(key);\n const value = raw !== null\n ? state.deserialize(raw)\n : state.defaultValue;\n state.signal.set(value);\n }\n });\n });\n}\n\n/**\n * Create a signal synced to a URL query parameter.\n *\n * ```ts\n * const search = useQueryState('q', '');\n * search(); // reads from URL or default\n * search.set('hello'); // updates URL to ?q=hello\n * ```\n */\nexport function useQueryState<T>(\n key: string,\n defaultValue: T,\n options: QueryStateOptions<T> = {},\n): Signal<T> {\n const {\n serialize = (v: T) => defaultSerialize(v),\n deserialize = (raw: string) => defaultDeserialize(raw, defaultValue),\n history: historyMode = 'replace',\n debounce: debounceMs = 0,\n removeDefault = true,\n } = options;\n\n // Read initial value from URL\n const params = getSearchParams();\n const raw = params.get(key);\n const initialValue = raw !== null ? deserialize(raw) : defaultValue;\n\n const state = signal<T>(initialValue);\n\n // Register for popstate sync\n activeStates.set(key, { signal: state, deserialize, defaultValue });\n ensurePopstateListener();\n\n // Sync signal → URL\n let debounceTimer: ReturnType<typeof setTimeout> | null = null;\n let isInternalUpdate = false;\n\n const originalSet = state.set;\n state.set = (value: T) => {\n originalSet(value);\n\n if (isInternalUpdate) return;\n\n const doUpdate = () => {\n const currentParams = getSearchParams();\n\n if (removeDefault && value === defaultValue) {\n currentParams.delete(key);\n } else {\n currentParams.set(key, serialize(value));\n }\n\n updateURL(currentParams, historyMode);\n };\n\n if (debounceMs > 0) {\n if (debounceTimer) clearTimeout(debounceTimer);\n debounceTimer = setTimeout(doUpdate, debounceMs);\n } else {\n doUpdate();\n }\n };\n\n const originalUpdate = state.update;\n state.update = (fn: (prev: T) => T) => {\n state.set(fn(state()));\n };\n\n return state;\n}\n\n// =========================================================================\n// useQueryStates — multiple values at once\n// =========================================================================\n\ntype QueryStateSchema = Record<string, {\n default: unknown;\n serialize?: (value: any) => string;\n deserialize?: (raw: string) => any;\n}>;\n\ntype QueryStates<T extends QueryStateSchema> = {\n [K in keyof T]: Signal<T[K]['default']>;\n};\n\n/**\n * Create multiple URL-synced signals at once.\n * All updates within a batch result in a single URL change.\n *\n * ```ts\n * const { q, page, sort } = useQueryStates({\n * q: { default: '' },\n * page: { default: 1 },\n * sort: { default: 'name' },\n * });\n * ```\n */\nexport function useQueryStates<T extends QueryStateSchema>(\n schema: T,\n options?: { history?: 'push' | 'replace' },\n): QueryStates<T> {\n const result = {} as any;\n for (const [key, config] of Object.entries(schema)) {\n result[key] = useQueryState(key, config.default, {\n serialize: config.serialize,\n deserialize: config.deserialize,\n history: options?.history,\n });\n }\n return result;\n}\n\n// =========================================================================\n// Utilities\n// =========================================================================\n\n/**\n * Remove all query state params from the URL.\n */\nexport function clearQueryState(): void {\n if (typeof window === 'undefined') return;\n const url = `${window.location.pathname}${window.location.hash}`;\n window.history.replaceState(null, '', url);\n\n batch(() => {\n for (const [, state] of activeStates) {\n state.signal.set(state.defaultValue);\n }\n });\n}\n\n/**\n * Get all current query params as a plain object.\n */\nexport function getQueryParams(): Record<string, string> {\n const params = getSearchParams();\n const result: Record<string, string> = {};\n params.forEach((value, key) => { result[key] = value; });\n return result;\n}\n\n/**\n * Cleanup: remove a specific query state binding.\n */\nexport function removeQueryState(key: string): void {\n activeStates.delete(key);\n}\n\n/**\n * Cleanup all query state bindings (useful for testing).\n */\nexport function resetQueryState(): void {\n activeStates.clear();\n}\n","/**\n * Tweened values — smooth interpolation between states.\n *\n * Unlike signals that update instantly, tweened values animate\n * smoothly from old to new over a duration.\n *\n * ```ts\n * const progress = tweened(0, { duration: 400 });\n * progress.set(100); // smoothly animates 0 → 100 over 400ms\n * progress(); // intermediate values during animation\n *\n * const color = tweened('#ff0000', { duration: 300, interpolate: lerpColor });\n * ```\n */\n\n// Fallback for non-browser environments (Node.js, SSR)\nconst raf = typeof requestAnimationFrame === 'function'\n ? requestAnimationFrame\n : (fn: (t: number) => void) => setTimeout(() => fn(Date.now()), 16) as unknown as number;\nconst caf = typeof cancelAnimationFrame === 'function'\n ? cancelAnimationFrame\n : (id: number) => clearTimeout(id);\n\nimport { signal } from './signals.js';\nimport type { Signal, ReadonlySignal } from './signals.js';\n\n// =========================================================================\n// Types\n// =========================================================================\n\nexport type Interpolator<T> = (from: T, to: T, t: number) => T;\n\nexport type EasingFn = (t: number) => number;\n\nexport interface TweenedOptions<T> {\n /** Duration in ms (default: 400) */\n duration?: number;\n /** Easing function (default: cubicOut) */\n easing?: EasingFn;\n /** Custom interpolation function */\n interpolate?: Interpolator<T>;\n /** Delay before animation starts */\n delay?: number;\n}\n\nexport interface TweenedSignal<T> {\n /** Read current (animated) value */\n (): T;\n /** Set new target — animates from current to new */\n set(value: T, opts?: Partial<TweenedOptions<T>>): Promise<void>;\n /** Set immediately without animation */\n setImmediate(value: T): void;\n /** Current target value */\n target: () => T;\n}\n\n// =========================================================================\n// Built-in easing functions\n// =========================================================================\n\nexport const easings = {\n linear: (t: number) => t,\n cubicIn: (t: number) => t * t * t,\n cubicOut: (t: number) => 1 - Math.pow(1 - t, 3),\n cubicInOut: (t: number) => t < 0.5 ? 4 * t * t * t : 1 - Math.pow(-2 * t + 2, 3) / 2,\n quadIn: (t: number) => t * t,\n quadOut: (t: number) => 1 - (1 - t) * (1 - t),\n quintOut: (t: number) => 1 - Math.pow(1 - t, 5),\n bounceOut: (t: number) => {\n if (t < 1 / 2.75) return 7.5625 * t * t;\n if (t < 2 / 2.75) return 7.5625 * (t -= 1.5 / 2.75) * t + 0.75;\n if (t < 2.5 / 2.75) return 7.5625 * (t -= 2.25 / 2.75) * t + 0.9375;\n return 7.5625 * (t -= 2.625 / 2.75) * t + 0.984375;\n },\n elasticOut: (t: number) => {\n if (t === 0 || t === 1) return t;\n return Math.pow(2, -10 * t) * Math.sin((t - 0.1) * 5 * Math.PI) + 1;\n },\n} as const;\n\n// =========================================================================\n// Default interpolators\n// =========================================================================\n\nfunction defaultInterpolate<T>(from: T, to: T, t: number): T {\n if (typeof from === 'number' && typeof to === 'number') {\n return (from + (to - from) * t) as T;\n }\n // For non-numbers, snap at halfway\n return t < 0.5 ? from : to;\n}\n\n// =========================================================================\n// tweened()\n// =========================================================================\n\n/**\n * Create a tweened signal that animates between values.\n *\n * ```ts\n * const count = tweened(0, { duration: 300, easing: easings.cubicOut });\n * count.set(100); // smoothly goes 0 → 100\n * count(); // current interpolated value\n * ```\n */\nexport function tweened<T>(\n initialValue: T,\n options: TweenedOptions<T> = {},\n): TweenedSignal<T> {\n const {\n duration = 400,\n easing = easings.cubicOut,\n interpolate = defaultInterpolate,\n delay = 0,\n } = options;\n\n const current = signal<T>(initialValue);\n const targetValue = signal<T>(initialValue);\n let rafId = 0;\n let running = false;\n\n const read = (() => current()) as TweenedSignal<T>;\n\n read.set = (value: T, overrides?: Partial<TweenedOptions<T>>): Promise<void> => {\n const dur = overrides?.duration ?? duration;\n const ease = overrides?.easing ?? easing;\n const interp = overrides?.interpolate ?? interpolate;\n const del = overrides?.delay ?? delay;\n\n const from = current();\n targetValue.set(value);\n\n if (dur === 0) {\n current.set(value);\n return Promise.resolve();\n }\n\n // Cancel any running animation\n if (running) {\n caf(rafId);\n running = false;\n }\n\n return new Promise<void>((resolve) => {\n const start = performance.now() + del;\n running = true;\n\n function tick(now: number): void {\n if (!running) { resolve(); return; }\n\n const elapsed = now - start;\n if (elapsed < 0) {\n rafId = raf(tick);\n return;\n }\n\n const t = Math.min(elapsed / dur, 1);\n const easedT = ease(t);\n current.set(interp(from, value, easedT));\n\n if (t < 1) {\n rafId = raf(tick);\n } else {\n running = false;\n resolve();\n }\n }\n\n rafId = raf(tick);\n });\n };\n\n read.setImmediate = (value: T): void => {\n if (running) { caf(rafId); running = false; }\n current.set(value);\n targetValue.set(value);\n };\n\n read.target = () => targetValue();\n\n return read;\n}\n","/**\n * FLIP animations for list reordering.\n *\n * First-Last-Invert-Play: measure element positions before and after\n * a DOM change, then animate from old to new positions.\n *\n * ```ts\n * const flip = createFlip(listContainer, {\n * duration: 300,\n * easing: 'cubic-bezier(0.2, 0, 0, 1)',\n * });\n *\n * // Before changing the list:\n * flip.measure();\n * // Change the DOM (reorder, add, remove)\n * items.set(newOrder);\n * // Animate:\n * flip.animate();\n * ```\n */\n\n// =========================================================================\n// Types\n// =========================================================================\n\nexport interface FlipOptions {\n /** Animation duration in ms (default: 300) */\n duration?: number;\n /** CSS easing (default: 'cubic-bezier(0.2, 0, 0, 1)') */\n easing?: string;\n /** Delay in ms */\n delay?: number;\n /** Only animate elements matching this selector */\n selector?: string;\n /** Key attribute to track elements across reorders (default: 'data-key') */\n keyAttribute?: string;\n /** Callback when animation completes */\n onComplete?: () => void;\n}\n\nexport interface FlipController {\n /** Measure current positions (call BEFORE DOM change) */\n measure(): void;\n /** Animate from measured positions to current (call AFTER DOM change) */\n animate(): Promise<void>;\n /** Measure and animate in one step using a callback */\n flip(update: () => void): Promise<void>;\n}\n\ninterface Rect {\n left: number;\n top: number;\n width: number;\n height: number;\n}\n\n// =========================================================================\n// createFlip\n// =========================================================================\n\n/**\n * Create a FLIP animation controller for a container.\n *\n * ```ts\n * const flip = createFlip(container);\n * flip.flip(() => {\n * // reorder DOM elements here\n * container.appendChild(container.firstChild); // move first to last\n * });\n * ```\n */\nexport function createFlip(\n container: HTMLElement,\n options: FlipOptions = {},\n): FlipController {\n const {\n duration = 300,\n easing = 'cubic-bezier(0.2, 0, 0, 1)',\n delay = 0,\n selector,\n keyAttribute = 'data-key',\n onComplete,\n } = options;\n\n let firstPositions = new Map<string, Rect>();\n\n function getElements(): HTMLElement[] {\n if (selector) {\n return Array.from(container.querySelectorAll<HTMLElement>(selector));\n }\n return Array.from(container.children) as HTMLElement[];\n }\n\n function getKey(el: HTMLElement): string {\n return el.getAttribute(keyAttribute) ?? el.id ?? '';\n }\n\n function measure(): void {\n firstPositions = new Map();\n for (const el of getElements()) {\n const key = getKey(el);\n if (key) {\n const rect = el.getBoundingClientRect();\n firstPositions.set(key, {\n left: rect.left,\n top: rect.top,\n width: rect.width,\n height: rect.height,\n });\n }\n }\n }\n\n function animate(): Promise<void> {\n const elements = getElements();\n const animations: Animation[] = [];\n\n for (const el of elements) {\n const key = getKey(el);\n const first = firstPositions.get(key);\n if (!first) continue; // New element — could add enter animation\n\n const last = el.getBoundingClientRect();\n\n const dx = first.left - last.left;\n const dy = first.top - last.top;\n const dw = first.width / (last.width || 1);\n const dh = first.height / (last.height || 1);\n\n // Skip if no movement\n if (Math.abs(dx) < 0.5 && Math.abs(dy) < 0.5 && Math.abs(dw - 1) < 0.01 && Math.abs(dh - 1) < 0.01) {\n continue;\n }\n\n const animation = el.animate(\n [\n {\n transform: `translate(${dx}px, ${dy}px) scale(${dw}, ${dh})`,\n },\n {\n transform: 'translate(0, 0) scale(1, 1)',\n },\n ],\n {\n duration,\n easing,\n delay,\n fill: 'both',\n },\n );\n\n animations.push(animation);\n }\n\n // Detect removed elements (in first but not in last)\n const currentKeys = new Set(elements.map(getKey));\n for (const [key, rect] of firstPositions) {\n if (!currentKeys.has(key)) {\n // Element was removed — could add exit animation placeholder\n }\n }\n\n firstPositions.clear();\n\n return new Promise<void>((resolve) => {\n if (animations.length === 0) {\n onComplete?.();\n resolve();\n return;\n }\n\n Promise.all(animations.map((a) => a.finished)).then(() => {\n // Clean up fill\n for (const a of animations) {\n a.cancel();\n }\n onComplete?.();\n resolve();\n });\n });\n }\n\n return {\n measure,\n animate,\n async flip(update: () => void): Promise<void> {\n measure();\n update();\n // Wait one frame for DOM to update\n await new Promise((r) => requestAnimationFrame(r));\n return animate();\n },\n };\n}\n\n/**\n * One-shot FLIP animation helper.\n *\n * ```ts\n * await flip(container, () => {\n * // reorder items\n * }, { duration: 300 });\n * ```\n */\nexport async function flip(\n container: HTMLElement,\n update: () => void,\n options?: FlipOptions,\n): Promise<void> {\n const ctrl = createFlip(container, options);\n return ctrl.flip(update);\n}\n","/**\n * Await block — template-level async handling.\n *\n * Renders different content for pending/resolved/rejected states\n * of a promise, similar to Svelte's {#await} blocks.\n *\n * ```ts\n * Await({\n * promise: fetchUser(userId()),\n * pending: () => <Spinner />,\n * then: (user) => <UserCard user={user} />,\n * catch: (err) => <Error message={err.message} />,\n * });\n * ```\n */\n\nimport { defineComponent } from './component.js';\nimport { signal } from './signals.js';\nimport { nodeToDOM } from './dom.js';\nimport type { AkashNode } from './types.js';\n\n// =========================================================================\n// Types\n// =========================================================================\n\nexport interface AwaitProps<T> {\n /** The promise to await */\n promise: Promise<T>;\n /** Render while pending */\n pending?: () => AkashNode;\n /** Render when resolved */\n then: (value: T) => AkashNode;\n /** Render when rejected */\n catch?: (error: Error) => AkashNode;\n}\n\ntype AwaitState<T> =\n | { status: 'pending' }\n | { status: 'resolved'; value: T }\n | { status: 'rejected'; error: Error };\n\n// =========================================================================\n// Await component\n// =========================================================================\n\n/**\n * <Await> component — declarative promise handling.\n */\nexport const Await = defineComponent<AwaitProps<any>>((ctx) => {\n const state = signal<AwaitState<unknown>>({ status: 'pending' });\n\n // Track the promise to handle race conditions\n let currentPromise = ctx.props.promise;\n\n ctx.props.promise\n .then((value) => {\n if (ctx.props.promise === currentPromise) {\n state.set({ status: 'resolved', value });\n }\n })\n .catch((err) => {\n if (ctx.props.promise === currentPromise) {\n state.set({\n status: 'rejected',\n error: err instanceof Error ? err : new Error(String(err)),\n });\n }\n });\n\n return () => {\n const s = state();\n\n switch (s.status) {\n case 'pending':\n return ctx.props.pending\n ? nodeToDOM(ctx.props.pending())\n : document.createComment('await-pending');\n\n case 'resolved':\n return nodeToDOM(ctx.props.then(s.value));\n\n case 'rejected':\n return ctx.props.catch\n ? nodeToDOM(ctx.props.catch(s.error))\n : document.createComment('await-error');\n }\n };\n});\n\n// =========================================================================\n// Functional await helper\n// =========================================================================\n\n/**\n * Functional await block — returns a signal that updates as the promise resolves.\n *\n * ```ts\n * const result = awaitSignal(fetchData());\n * result().status; // 'pending' | 'resolved' | 'rejected'\n * ```\n */\nexport function awaitSignal<T>(promise: Promise<T>) {\n const state = signal<AwaitState<T>>({ status: 'pending' });\n\n promise\n .then((value) => state.set({ status: 'resolved', value }))\n .catch((error) => state.set({\n status: 'rejected',\n error: error instanceof Error ? error : new Error(String(error)),\n }));\n\n return () => state();\n}\n","/**\n * Event modifiers and extended bind/class/style directives.\n *\n * Modifiers: onClick|preventDefault|stopPropagation|once|self|capture\n * Extended binds: bind:clientWidth, bind:scrollY, bind:group, bind:this\n * Class directive: class:active={isActive}\n * Style directive: style:color={textColor}\n */\n\nimport { signal, effect } from './signals.js';\nimport type { Signal, ReadonlySignal } from './signals.js';\n\n// =========================================================================\n// Event modifiers\n// =========================================================================\n\nexport interface EventModifiers {\n preventDefault?: boolean;\n stopPropagation?: boolean;\n stopImmediatePropagation?: boolean;\n once?: boolean;\n capture?: boolean;\n passive?: boolean;\n self?: boolean;\n}\n\n/**\n * Wrap an event handler with modifiers.\n *\n * ```ts\n * const handler = withModifiers(onClick, {\n * preventDefault: true,\n * stopPropagation: true,\n * once: true,\n * });\n * el.addEventListener('click', handler);\n * ```\n */\nexport function withModifiers<E extends Event>(\n handler: (e: E) => void,\n modifiers: EventModifiers,\n): (e: E) => void {\n return (e: E) => {\n if (modifiers.self && e.target !== e.currentTarget) return;\n if (modifiers.preventDefault) e.preventDefault();\n if (modifiers.stopPropagation) e.stopPropagation();\n if (modifiers.stopImmediatePropagation) (e as any).stopImmediatePropagation?.();\n handler(e);\n };\n}\n\n/**\n * Attach an event handler with modifiers to an element.\n *\n * ```ts\n * onEvent(el, 'click', handler, { preventDefault: true, once: true });\n * ```\n */\nexport function onEvent<K extends keyof HTMLElementEventMap>(\n el: HTMLElement,\n event: K,\n handler: (e: HTMLElementEventMap[K]) => void,\n modifiers: EventModifiers = {},\n): () => void {\n const wrapped = withModifiers(handler, modifiers);\n const listenerOptions: AddEventListenerOptions = {\n once: modifiers.once,\n capture: modifiers.capture,\n passive: modifiers.passive,\n };\n\n el.addEventListener(event, wrapped as EventListener, listenerOptions);\n return () => el.removeEventListener(event, wrapped as EventListener, listenerOptions);\n}\n\n// =========================================================================\n// Extended bind directives\n// =========================================================================\n\n/**\n * Bind element dimensions to signals (read-only, auto-updating).\n *\n * ```ts\n * const { width, height } = bindDimensions(el);\n * width(); // tracks clientWidth\n * ```\n */\nexport function bindDimensions(el: HTMLElement): {\n width: ReadonlySignal<number>;\n height: ReadonlySignal<number>;\n} {\n const width = signal(el.clientWidth);\n const height = signal(el.clientHeight);\n\n if (typeof ResizeObserver !== 'undefined') {\n const observer = new ResizeObserver((entries) => {\n const entry = entries[0];\n if (entry) {\n width.set(entry.contentRect.width);\n height.set(entry.contentRect.height);\n }\n });\n observer.observe(el);\n }\n\n return {\n width: () => width(),\n height: () => height(),\n };\n}\n\n/**\n * Bind scroll position to signals.\n *\n * ```ts\n * const { scrollX, scrollY } = bindScroll(el);\n * // or for window:\n * const { scrollX, scrollY } = bindScroll();\n * ```\n */\nexport function bindScroll(el?: HTMLElement): {\n scrollX: Signal<number>;\n scrollY: Signal<number>;\n} {\n const target = el ?? (typeof window !== 'undefined' ? window : null);\n const scrollX = signal(el ? el.scrollLeft : (window?.scrollX ?? 0));\n const scrollY = signal(el ? el.scrollTop : (window?.scrollY ?? 0));\n\n if (target) {\n const handler = () => {\n if (el) {\n scrollX.set(el.scrollLeft);\n scrollY.set(el.scrollTop);\n } else {\n scrollX.set(window.scrollX);\n scrollY.set(window.scrollY);\n }\n };\n (target as any).addEventListener('scroll', handler, { passive: true });\n }\n\n // Also allow setting scroll position\n const originalSetY = scrollY.set;\n scrollY.set = (value: number) => {\n originalSetY(value);\n if (el) el.scrollTop = value;\n else window?.scrollTo(window.scrollX, value);\n };\n\n const originalSetX = scrollX.set;\n scrollX.set = (value: number) => {\n originalSetX(value);\n if (el) el.scrollLeft = value;\n else window?.scrollTo(value, window.scrollY);\n };\n\n return { scrollX, scrollY };\n}\n\n/**\n * Bind a signal to an element reference (like bind:this in Svelte).\n *\n * ```ts\n * const myRef = bindElement<HTMLInputElement>();\n * // In render: myRef.set(inputEl);\n * myRef()?.focus();\n * ```\n */\nexport function bindElement<T extends HTMLElement = HTMLElement>(): Signal<T | null> {\n return signal<T | null>(null);\n}\n\n/**\n * Bind a group of radio/checkbox inputs to a signal.\n *\n * ```ts\n * const selected = bindGroup<string>('color');\n * // Apply to each radio: bindGroupItem(radioEl, selected, 'red');\n * ```\n */\nexport function bindGroup<T>(name: string): Signal<T | null> {\n return signal<T | null>(null);\n}\n\nexport function bindGroupItem<T>(\n el: HTMLInputElement,\n group: Signal<T | null>,\n value: T,\n): void {\n el.name = typeof value === 'string' ? value : '';\n el.addEventListener('change', () => {\n if (el.checked) group.set(value);\n });\n\n effect(() => {\n el.checked = group() === value;\n });\n}\n\n// =========================================================================\n// Class directive\n// =========================================================================\n\n/**\n * Conditionally apply a CSS class based on a reactive condition.\n *\n * ```ts\n * bindClass(el, 'active', () => isActive());\n * bindClass(el, 'disabled', () => isDisabled());\n * ```\n */\nexport function bindClass(\n el: HTMLElement,\n className: string,\n condition: () => boolean,\n): () => void {\n return effect(() => {\n if (condition()) {\n el.classList.add(className);\n } else {\n el.classList.remove(className);\n }\n });\n}\n\n/**\n * Apply multiple conditional classes at once.\n *\n * ```ts\n * bindClasses(el, {\n * active: () => isActive(),\n * disabled: () => isDisabled(),\n * 'text-bold': () => isBold(),\n * });\n * ```\n */\nexport function bindClasses(\n el: HTMLElement,\n classes: Record<string, () => boolean>,\n): () => void {\n const disposers = Object.entries(classes).map(([cls, condition]) =>\n bindClass(el, cls, condition),\n );\n return () => disposers.forEach((d) => d());\n}\n\n// =========================================================================\n// Style directive\n// =========================================================================\n\n/**\n * Reactively bind a CSS property to a value.\n *\n * ```ts\n * bindStyle(el, 'color', () => textColor());\n * bindStyle(el, 'font-size', () => `${fontSize()}px`);\n * ```\n */\nexport function bindStyle(\n el: HTMLElement,\n property: string,\n value: () => string | number | null,\n): () => void {\n const kebab = property.replace(/[A-Z]/g, (m) => `-${m.toLowerCase()}`);\n\n return effect(() => {\n const v = value();\n if (v == null) {\n el.style.removeProperty(kebab);\n } else {\n el.style.setProperty(kebab, typeof v === 'number' ? `${v}px` : String(v));\n }\n });\n}\n\n/**\n * Bind multiple style properties at once.\n *\n * ```ts\n * bindStyles(el, {\n * color: () => color(),\n * 'font-size': () => `${size()}px`,\n * opacity: () => isVisible() ? 1 : 0,\n * });\n * ```\n */\nexport function bindStyles(\n el: HTMLElement,\n styles: Record<string, () => string | number | null>,\n): () => void {\n const disposers = Object.entries(styles).map(([prop, valueFn]) =>\n bindStyle(el, prop, valueFn),\n );\n return () => disposers.forEach((d) => d());\n}\n","/**\n * Snippets, $inspect, form actions, and navigation snapshots.\n */\n\nimport { signal, effect } from './signals.js';\nimport type { AkashNode } from './types.js';\nimport type { ReadonlySignal } from './signals.js';\n\n// =========================================================================\n// Snippets — reusable template fragments\n// =========================================================================\n\nexport type Snippet<TArgs extends unknown[] = []> = (...args: TArgs) => AkashNode;\n\n/**\n * Define a reusable template snippet.\n *\n * ```ts\n * const UserBadge = defineSnippet((name: string, role: string) => {\n * const el = document.createElement('span');\n * el.textContent = `${name} (${role})`;\n * el.className = 'badge';\n * return el;\n * });\n *\n * // Reuse anywhere:\n * container.appendChild(nodeToDOM(UserBadge('Alice', 'admin')));\n * container.appendChild(nodeToDOM(UserBadge('Bob', 'user')));\n * ```\n */\nexport function defineSnippet<TArgs extends unknown[]>(\n render: (...args: TArgs) => AkashNode,\n): Snippet<TArgs> {\n return render;\n}\n\n// =========================================================================\n// $inspect — debug reactive values\n// =========================================================================\n\nexport interface InspectOptions {\n /** Label prefix for console output */\n label?: string;\n /** Log level (default: 'log') */\n level?: 'log' | 'warn' | 'debug' | 'trace';\n /** Custom logger */\n logger?: (label: string, ...values: unknown[]) => void;\n /** Only log when a condition is true */\n when?: () => boolean;\n}\n\n/**\n * Debug helper — logs when reactive values change.\n *\n * ```ts\n * const count = signal(0);\n * const name = signal('Alice');\n *\n * inspect(count, name); // logs: [inspect] 0, 'Alice'\n * count.set(1); // logs: [inspect] 1, 'Alice'\n *\n * // With label:\n * inspect(count, { label: 'counter' });\n * // logs: [counter] 1\n * ```\n */\nexport function inspect(\n ...args: [...Array<() => unknown>, InspectOptions?] | Array<() => unknown>\n): () => void {\n let options: InspectOptions = {};\n const sources: Array<() => unknown> = [];\n\n for (const arg of args) {\n if (typeof arg === 'function') {\n sources.push(arg);\n } else if (typeof arg === 'object' && arg !== null) {\n options = arg as InspectOptions;\n }\n }\n\n const {\n label = 'inspect',\n level = 'log',\n logger,\n when,\n } = options;\n\n const result = {\n dispose: null as unknown as () => void,\n get values() { return sources.map(s => s()); },\n get value() { return sources.length === 1 ? sources[0]() : sources.map(s => s()); },\n label,\n sources: sources.length,\n };\n\n result.dispose = effect(() => {\n if (when && !when()) return;\n\n const values = sources.map((s) => s());\n\n if (logger) {\n logger(label, ...values);\n } else {\n (console as any)[level](`[${label}]`, ...values);\n }\n });\n\n return result as any;\n}\n\n// =========================================================================\n// Form actions — server-side form handling\n// =========================================================================\n\nexport interface FormAction<T = unknown> {\n /** The action URL */\n url: string;\n /** Submit method */\n method: 'POST' | 'PUT' | 'PATCH' | 'DELETE';\n /** Whether a submission is in progress */\n submitting: ReadonlySignal<boolean>;\n /** The last result */\n result: ReadonlySignal<T | null>;\n /** The last error */\n error: ReadonlySignal<Error | null>;\n /** Create an onSubmit handler for a <form> */\n handle(formData?: Record<string, unknown>): (e: Event) => void;\n /** Submit programmatically */\n submit(data: Record<string, unknown>): Promise<T>;\n}\n\n/**\n * Define a server-side form action with progressive enhancement.\n *\n * ```ts\n * const createPost = defineFormAction<Post>('/api/posts', {\n * method: 'POST',\n * onSuccess: (post) => navigate(`/posts/${post.id}`),\n * onError: (err) => toast.error(err.message),\n * });\n *\n * // In template:\n * <form onSubmit={createPost.handle()}>\n * <input name=\"title\" />\n * <button disabled={createPost.submitting()}>Create</button>\n * </form>\n * ```\n */\nexport function defineFormAction<T = unknown>(\n url: string,\n options: {\n method?: 'POST' | 'PUT' | 'PATCH' | 'DELETE';\n headers?: Record<string, string>;\n onSuccess?: (result: T) => void;\n onError?: (error: Error) => void;\n fetch?: typeof globalThis.fetch;\n } = {},\n): FormAction<T> {\n const {\n method = 'POST',\n headers = {},\n onSuccess,\n onError,\n fetch: customFetch = globalThis.fetch.bind(globalThis),\n } = options;\n\n const submitting = signal(false);\n const result = signal<T | null>(null);\n const error = signal<Error | null>(null);\n\n async function submit(data: Record<string, unknown>): Promise<T> {\n submitting.set(true);\n error.set(null);\n\n try {\n const response = await customFetch(url, {\n method,\n headers: { 'Content-Type': 'application/json', ...headers },\n body: JSON.stringify(data),\n });\n\n if (!response.ok) {\n throw new Error(`Form action failed: ${response.status}`);\n }\n\n const res = await response.json() as T;\n result.set(res);\n submitting.set(false);\n onSuccess?.(res);\n return res;\n } catch (err) {\n const e = err instanceof Error ? err : new Error(String(err));\n error.set(e);\n submitting.set(false);\n onError?.(e);\n throw e;\n }\n }\n\n return {\n url,\n method,\n submitting: () => submitting(),\n result: () => result(),\n error: () => error(),\n handle(extraData?: Record<string, unknown>) {\n return (e: Event) => {\n e.preventDefault();\n const form = e.target as HTMLFormElement;\n const formData = new FormData(form);\n const data: Record<string, unknown> = { ...extraData };\n formData.forEach((value, key) => { data[key] = value; });\n submit(data);\n };\n },\n submit,\n };\n}\n\n// =========================================================================\n// Navigation snapshots — preserve scroll & form state\n// =========================================================================\n\nexport interface SnapshotConfig {\n /** Storage key prefix (default: 'akash-snapshot') */\n keyPrefix?: string;\n /** What to capture */\n capture?: ('scroll' | 'forms')[];\n}\n\ninterface PageSnapshot {\n scrollX: number;\n scrollY: number;\n forms: Record<string, Record<string, string>>;\n timestamp: number;\n}\n\n/**\n * Enable navigation snapshots — preserves scroll position and form\n * state when navigating with back/forward.\n *\n * ```ts\n * enableSnapshots();\n * // Now back/forward restores scroll position and form inputs\n * ```\n */\nexport function enableSnapshots(config: SnapshotConfig = {}): () => void {\n if (typeof window === 'undefined') return () => {};\n\n const { keyPrefix = 'akash-snapshot', capture = ['scroll', 'forms'] } = config;\n\n function captureSnapshot(): PageSnapshot {\n const snapshot: PageSnapshot = {\n scrollX: window.scrollX,\n scrollY: window.scrollY,\n forms: {},\n timestamp: Date.now(),\n };\n\n if (capture.includes('forms')) {\n document.querySelectorAll('form[id]').forEach((form) => {\n const formEl = form as HTMLFormElement;\n const data: Record<string, string> = {};\n new FormData(formEl).forEach((value, key) => {\n data[key] = String(value);\n });\n snapshot.forms[formEl.id] = data;\n });\n }\n\n return snapshot;\n }\n\n function restoreSnapshot(snapshot: PageSnapshot): void {\n if (capture.includes('scroll')) {\n requestAnimationFrame(() => {\n window.scrollTo(snapshot.scrollX, snapshot.scrollY);\n });\n }\n\n if (capture.includes('forms')) {\n for (const [formId, data] of Object.entries(snapshot.forms)) {\n const form = document.getElementById(formId) as HTMLFormElement | null;\n if (!form) continue;\n for (const [key, value] of Object.entries(data)) {\n const input = form.elements.namedItem(key) as HTMLInputElement | null;\n if (input) input.value = value;\n }\n }\n }\n }\n\n // Save snapshot before navigation\n const saveKey = () => `${keyPrefix}-${window.location.pathname}`;\n\n function save(): void {\n try {\n const snapshot = captureSnapshot();\n sessionStorage.setItem(saveKey(), JSON.stringify(snapshot));\n } catch { /* storage full */ }\n }\n\n function restore(): void {\n try {\n const raw = sessionStorage.getItem(saveKey());\n if (raw) {\n const snapshot = JSON.parse(raw) as PageSnapshot;\n // Only restore if recent (within 30 minutes)\n if (Date.now() - snapshot.timestamp < 30 * 60 * 1000) {\n restoreSnapshot(snapshot);\n }\n }\n } catch { /* */ }\n }\n\n // Listen for navigation\n window.addEventListener('beforeunload', save);\n window.addEventListener('popstate', () => {\n requestAnimationFrame(restore);\n });\n\n // Restore on initial load if coming from back/forward\n if (performance.getEntriesByType('navigation')[0]?.type === 'back_forward') {\n requestAnimationFrame(restore);\n }\n\n return () => {\n window.removeEventListener('beforeunload', save);\n };\n}\n","/**\n * watch() — react to signal changes with old/new values.\n *\n * Unlike effect() which just re-runs, watch() gives you the previous\n * and current value so you can react to *what changed*.\n *\n * ```ts\n * const count = signal(0);\n * watch(count, (newVal, oldVal) => {\n * console.log(`Changed from ${oldVal} to ${newVal}`);\n * });\n *\n * // With options:\n * watch(count, callback, { immediate: true, once: true });\n *\n * // Multiple sources:\n * watch([count, name], ([newCount, newName], [oldCount, oldName]) => { ... });\n * ```\n */\n\nimport { effect } from './signals.js';\n\n// =========================================================================\n// Types\n// =========================================================================\n\nexport interface WatchOptions {\n /** Run callback immediately with current value (default: false) */\n immediate?: boolean;\n /** Only fire once, then auto-dispose (default: false) */\n once?: boolean;\n /** Debounce callback in ms */\n debounce?: number;\n /** Deep comparison for objects (default: false) */\n deep?: boolean;\n}\n\nexport type WatchSource<T> = () => T;\nexport type WatchCallback<T> = (newValue: T, oldValue: T | undefined) => void;\nexport type WatchArrayCallback<T extends unknown[]> = (newValues: T, oldValues: (T[number] | undefined)[]) => void;\n\n// =========================================================================\n// watch() — single source\n// =========================================================================\n\n/**\n * Watch a reactive source and call back with old + new values.\n *\n * ```ts\n * const dispose = watch(count, (newVal, oldVal) => {\n * analytics.track('count_changed', { from: oldVal, to: newVal });\n * });\n * ```\n */\nexport function watch<T>(\n source: WatchSource<T>,\n callback: WatchCallback<T>,\n options?: WatchOptions,\n): () => void;\n\n/**\n * Watch multiple sources.\n */\nexport function watch<T extends unknown[]>(\n sources: { [K in keyof T]: WatchSource<T[K]> },\n callback: WatchArrayCallback<T>,\n options?: WatchOptions,\n): () => void;\n\nexport function watch(\n source: WatchSource<any> | WatchSource<any>[],\n callback: any,\n options: WatchOptions = {},\n): () => void {\n const { immediate = false, once = false, debounce: debounceMs, deep = false } = options;\n\n const isMulti = Array.isArray(source);\n const sources = isMulti ? source : [source];\n\n let oldValues: any[] = sources.map(() => undefined);\n let isFirst = true;\n let debounceTimer: ReturnType<typeof setTimeout> | null = null;\n let disposed = false;\n let disposeEffect: (() => void) | null = null;\n\n const dispose = () => {\n disposed = true;\n if (debounceTimer) clearTimeout(debounceTimer);\n disposeEffect?.();\n };\n\n disposeEffect = effect(() => {\n // Read all sources to establish tracking\n const newValues = sources.map((s) => s());\n\n if (isFirst) {\n isFirst = false;\n oldValues = deep ? newValues.map(deepClone) : [...newValues];\n\n if (immediate) {\n fireCallback(newValues, sources.map(() => undefined));\n }\n return;\n }\n\n // Check if anything actually changed\n const changed = deep\n ? newValues.some((v, i) => !deepEqual(v, oldValues[i]))\n : newValues.some((v, i) => !Object.is(v, oldValues[i]));\n\n if (!changed) return;\n\n const prevValues = [...oldValues];\n oldValues = deep ? newValues.map(deepClone) : [...newValues];\n\n fireCallback(newValues, prevValues);\n });\n\n function fireCallback(newVals: any[], oldVals: any[]): void {\n if (disposed) return;\n\n const doCall = () => {\n if (once) {\n // Dispose BEFORE calling callback so any signal writes in the\n // callback don't re-trigger this watcher\n disposed = true;\n queueMicrotask(dispose);\n }\n\n if (isMulti) {\n callback(newVals, oldVals);\n } else {\n callback(newVals[0], oldVals[0]);\n }\n };\n\n if (debounceMs && debounceMs > 0) {\n if (debounceTimer) clearTimeout(debounceTimer);\n debounceTimer = setTimeout(doCall, debounceMs);\n } else {\n doCall();\n }\n }\n\n return dispose;\n}\n\n// =========================================================================\n// watchOnce — convenience\n// =========================================================================\n\n/**\n * Watch a source once, then auto-dispose.\n *\n * ```ts\n * watchOnce(isReady, (ready) => {\n * if (ready) initApp();\n * });\n * ```\n */\nexport function watchOnce<T>(\n source: WatchSource<T>,\n callback: WatchCallback<T>,\n): () => void {\n return watch(source, callback, { once: true });\n}\n\n// =========================================================================\n// watchDebounced — convenience\n// =========================================================================\n\n/**\n * Watch with built-in debounce.\n *\n * ```ts\n * watchDebounced(searchInput, (query) => {\n * fetchResults(query);\n * }, 300);\n * ```\n */\nexport function watchDebounced<T>(\n source: WatchSource<T>,\n callback: WatchCallback<T>,\n ms: number,\n): () => void {\n return watch(source, callback, { debounce: ms });\n}\n\n// =========================================================================\n// Helpers\n// =========================================================================\n\nfunction deepClone<T>(value: T): T {\n if (value === null || typeof value !== 'object') return value;\n try {\n return JSON.parse(JSON.stringify(value));\n } catch {\n return value;\n }\n}\n\nfunction deepEqual(a: unknown, b: unknown): boolean {\n if (Object.is(a, b)) return true;\n if (a === null || b === null || typeof a !== 'object' || typeof b !== 'object') return false;\n try {\n return JSON.stringify(a) === JSON.stringify(b);\n } catch {\n return false;\n }\n}\n","/**\n * Deep reactive signals.\n *\n * Unlike regular signals that are shallow, deepSignal() tracks\n * nested property access and triggers updates when any nested\n * property changes.\n *\n * ```ts\n * const state = deepSignal({ user: { name: 'Alice', age: 30 }, items: [1, 2, 3] });\n * state.user.name; // 'Alice' (tracked)\n * state.user.name = 'Bob'; // triggers reactivity\n * state.items.push(4); // triggers reactivity\n * ```\n */\n\nimport { signal, computed } from './signals.js';\nimport { batch } from './scheduler.js';\n\n// =========================================================================\n// Types\n// =========================================================================\n\nexport type DeepSignal<T> = T extends object\n ? { [K in keyof T]: DeepSignal<T[K]> } & { readonly $raw: T; readonly $signal: () => T }\n : T;\n\n// =========================================================================\n// deepSignal()\n// =========================================================================\n\nconst SIGNAL_KEY = Symbol('deepSignal');\nconst RAW_KEY = Symbol('deepRaw');\n\n/**\n * Create a deeply reactive signal. Nested property access is tracked,\n * and setting any nested property triggers updates.\n *\n * ```ts\n * const state = deepSignal({\n * user: { name: 'Alice', age: 30 },\n * todos: [{ text: 'Buy milk', done: false }],\n * });\n *\n * effect(() => {\n * console.log(state.user.name); // re-runs when name changes\n * });\n *\n * state.user.name = 'Bob'; // triggers the effect above\n * ```\n */\nexport function deepSignal<T extends object>(initialValue: T): DeepSignal<T> {\n const version = signal(0);\n const raw = JSON.parse(JSON.stringify(initialValue));\n\n function notify(): void {\n version.update((v) => v + 1);\n }\n\n function createProxy<O extends object>(target: O, path: string[] = []): DeepSignal<O> {\n return new Proxy(target, {\n get(obj, prop, receiver) {\n // Special properties\n if (prop === '$raw') return JSON.parse(JSON.stringify(raw));\n if (prop === '$signal') return () => { version(); return JSON.parse(JSON.stringify(raw)); };\n if (prop === SIGNAL_KEY) return version;\n if (prop === RAW_KEY) return raw;\n\n const value = Reflect.get(obj, prop, receiver);\n\n // Track read\n version();\n\n // Wrap nested objects in proxies\n if (value !== null && typeof value === 'object') {\n return createProxy(value, [...path, String(prop)]);\n }\n\n return value;\n },\n\n set(obj, prop, value) {\n const result = Reflect.set(obj, prop, value);\n notify();\n return result;\n },\n\n deleteProperty(obj, prop) {\n const result = Reflect.deleteProperty(obj, prop);\n notify();\n return result;\n },\n }) as DeepSignal<O>;\n }\n\n // Wrap arrays to track mutation methods\n if (Array.isArray(raw)) {\n const arrayProxy = createProxy(raw);\n return arrayProxy as DeepSignal<T>;\n }\n\n return createProxy(raw);\n}\n\n/**\n * Get the raw (unwrapped) value from a deep signal.\n */\nexport function toRaw<T>(proxy: DeepSignal<T>): T {\n return (proxy as any).$raw ?? proxy;\n}\n\n/**\n * Check if a value is a deep signal proxy.\n */\nexport function isDeepSignal(value: unknown): boolean {\n if (value === null || typeof value !== 'object') return false;\n try {\n return (value as any)[SIGNAL_KEY] !== undefined;\n } catch {\n return false;\n }\n}\n","/**\n * Event bus — typed pub/sub for cross-component communication.\n *\n * Fire-and-forget events between unrelated components without\n * prop drilling or context coupling.\n *\n * ```ts\n * const bus = createEventBus<{\n * 'user:login': { userId: string };\n * 'cart:updated': { itemCount: number };\n * 'notification': string;\n * }>();\n *\n * // Subscribe\n * bus.on('user:login', ({ userId }) => fetchProfile(userId));\n *\n * // Emit from anywhere\n * bus.emit('user:login', { userId: '123' });\n *\n * // One-time listener\n * bus.once('cart:updated', ({ itemCount }) => showBadge(itemCount));\n * ```\n */\n\n// =========================================================================\n// Types\n// =========================================================================\n\nexport type EventMap = Record<string, unknown>;\nexport type EventHandler<T = unknown> = (data: T) => void;\n\nexport interface EventBus<T extends EventMap> {\n /** Subscribe to an event */\n on<K extends keyof T & string>(event: K, handler: EventHandler<T[K]>): () => void;\n /** Subscribe once — auto-removes after first call */\n once<K extends keyof T & string>(event: K, handler: EventHandler<T[K]>): () => void;\n /** Emit an event to all listeners */\n emit<K extends keyof T & string>(event: K, data: T[K]): void;\n /** Remove a specific handler */\n off<K extends keyof T & string>(event: K, handler: EventHandler<T[K]>): void;\n /** Remove all handlers for an event (or all events) */\n clear(event?: keyof T & string): void;\n /** Get listener count for an event */\n listenerCount(event: keyof T & string): number;\n /** Check if an event has listeners */\n hasListeners(event: keyof T & string): boolean;\n}\n\n// =========================================================================\n// createEventBus\n// =========================================================================\n\n/**\n * Create a typed event bus.\n *\n * ```ts\n * const bus = createEventBus<{\n * 'theme:change': 'light' | 'dark';\n * 'toast': { message: string; type: string };\n * }>();\n * ```\n */\nexport function createEventBus<T extends EventMap = Record<string, unknown>>(): EventBus<T> {\n const listeners = new Map<string, Set<EventHandler>>();\n\n function getSet(event: string): Set<EventHandler> {\n let set = listeners.get(event);\n if (!set) {\n set = new Set();\n listeners.set(event, set);\n }\n return set;\n }\n\n return {\n on<K extends keyof T & string>(event: K, handler: EventHandler<T[K]>): () => void {\n getSet(event).add(handler as EventHandler);\n return () => getSet(event).delete(handler as EventHandler);\n },\n\n once<K extends keyof T & string>(event: K, handler: EventHandler<T[K]>): () => void {\n const wrapper: EventHandler<T[K]> = (data) => {\n getSet(event).delete(wrapper as EventHandler);\n handler(data);\n };\n getSet(event).add(wrapper as EventHandler);\n return () => getSet(event).delete(wrapper as EventHandler);\n },\n\n emit<K extends keyof T & string>(event: K, data: T[K]): void {\n const set = listeners.get(event);\n if (set) {\n for (const handler of Array.from(set)) {\n handler(data);\n }\n }\n },\n\n off<K extends keyof T & string>(event: K, handler: EventHandler<T[K]>): void {\n getSet(event).delete(handler as EventHandler);\n },\n\n clear(event?: keyof T & string): void {\n if (event) {\n listeners.delete(event);\n } else {\n listeners.clear();\n }\n },\n\n listenerCount(event: keyof T & string): number {\n return listeners.get(event)?.size ?? 0;\n },\n\n hasListeners(event: keyof T & string): boolean {\n return (listeners.get(event)?.size ?? 0) > 0;\n },\n };\n}\n\n// =========================================================================\n// Global bus singleton\n// =========================================================================\n\nlet globalBus: EventBus<any> | null = null;\n\n/**\n * Get the global event bus (created on first call).\n *\n * ```ts\n * import { globalEventBus } from '@akashjs/runtime';\n *\n * // In component A:\n * globalEventBus().emit('notification', 'Hello!');\n *\n * // In component B:\n * globalEventBus().on('notification', (msg) => show(msg));\n * ```\n */\nexport function globalEventBus<T extends EventMap = Record<string, unknown>>(): EventBus<T> {\n if (!globalBus) {\n globalBus = createEventBus<T>();\n }\n return globalBus as EventBus<T>;\n}\n","/**\n * Security module — built-in protection for AkashJS apps.\n *\n * Auto-sanitization, CSP support, prototype pollution prevention,\n * and secure defaults. AkashJS is secure by default.\n */\n\n// =========================================================================\n// HTML Sanitizer — DOMPurify-style, zero dependencies\n// =========================================================================\n\n/** Tags allowed by default in sanitized HTML */\nconst SAFE_TAGS = new Set([\n 'a', 'abbr', 'address', 'article', 'aside', 'b', 'bdi', 'bdo',\n 'blockquote', 'br', 'caption', 'cite', 'code', 'col', 'colgroup',\n 'dd', 'del', 'details', 'dfn', 'div', 'dl', 'dt', 'em', 'figcaption',\n 'figure', 'footer', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'header',\n 'hr', 'i', 'img', 'ins', 'kbd', 'li', 'main', 'mark', 'nav', 'ol',\n 'p', 'pre', 'q', 'rp', 'rt', 'ruby', 's', 'samp', 'section', 'small',\n 'span', 'strong', 'sub', 'summary', 'sup', 'table', 'tbody', 'td',\n 'tfoot', 'th', 'thead', 'time', 'tr', 'u', 'ul', 'var', 'wbr',\n]);\n\n/** Attributes allowed by default */\nconst SAFE_ATTRS = new Set([\n 'alt', 'class', 'dir', 'href', 'id', 'lang', 'name', 'rel',\n 'src', 'style', 'tabindex', 'target', 'title', 'type', 'width',\n 'height', 'colspan', 'rowspan', 'scope', 'loading', 'decoding',\n]);\n\n/** Dangerous URL protocols */\nconst DANGEROUS_PROTOCOLS = /^(javascript|data|vbscript):/i;\n\n/** Dangerous attribute names (event handlers) */\nconst DANGEROUS_ATTRS = /^on/i;\n\nexport interface SanitizeOptions {\n /** Additional allowed tags */\n allowTags?: string[];\n /** Additional allowed attributes */\n allowAttrs?: string[];\n /** Allow data-* attributes (default: true) */\n allowDataAttrs?: boolean;\n /** Allow aria-* attributes (default: true) */\n allowAriaAttrs?: boolean;\n /** Allow style attribute (default: false) */\n allowStyle?: boolean;\n /** Custom tag filter */\n tagFilter?: (tag: string) => boolean;\n /** Custom attribute filter */\n attrFilter?: (attr: string, value: string, tag: string) => boolean;\n}\n\n/**\n * Sanitize HTML string — remove dangerous tags, attributes, and URLs.\n *\n * ```ts\n * const safe = sanitize(userInput);\n * el.innerHTML = safe; // Safe from XSS\n *\n * // With options:\n * const safe = sanitize(html, { allowTags: ['iframe'], allowStyle: true });\n * ```\n */\nexport function sanitize(html: string, options: SanitizeOptions = {}): string {\n if (typeof document === 'undefined') {\n // SSR fallback — strip all tags\n return html.replace(/<[^>]*>/g, '');\n }\n\n const {\n allowTags = [],\n allowAttrs = [],\n allowDataAttrs = true,\n allowAriaAttrs = true,\n allowStyle = false,\n tagFilter,\n attrFilter,\n } = options;\n\n const allowedTags = new Set([...SAFE_TAGS, ...allowTags]);\n const allowedAttrs = new Set([...SAFE_ATTRS, ...allowAttrs]);\n\n if (!allowStyle) allowedAttrs.delete('style');\n\n // Parse HTML using browser's parser\n const doc = new DOMParser().parseFromString(html, 'text/html');\n sanitizeNode(doc.body, allowedTags, allowedAttrs, allowDataAttrs, allowAriaAttrs, tagFilter, attrFilter);\n\n return doc.body.innerHTML;\n}\n\nfunction sanitizeNode(\n node: Node,\n allowedTags: Set<string>,\n allowedAttrs: Set<string>,\n allowDataAttrs: boolean,\n allowAriaAttrs: boolean,\n tagFilter?: (tag: string) => boolean,\n attrFilter?: (attr: string, value: string, tag: string) => boolean,\n): void {\n const children = Array.from(node.childNodes);\n\n for (const child of children) {\n if (child.nodeType === Node.ELEMENT_NODE) {\n const el = child as Element;\n const tag = el.tagName.toLowerCase();\n\n // Check if tag is allowed\n const isAllowed = tagFilter ? tagFilter(tag) : allowedTags.has(tag);\n\n if (!isAllowed) {\n // Replace dangerous element with its text content\n const text = document.createTextNode(el.textContent ?? '');\n node.replaceChild(text, child);\n continue;\n }\n\n // Sanitize attributes\n const attrs = Array.from(el.attributes);\n for (const attr of attrs) {\n const name = attr.name.toLowerCase();\n const value = attr.value;\n\n // Always remove event handlers\n if (DANGEROUS_ATTRS.test(name)) {\n el.removeAttribute(attr.name);\n continue;\n }\n\n // Check data-* and aria-*\n if (name.startsWith('data-') && allowDataAttrs) continue;\n if (name.startsWith('aria-') && allowAriaAttrs) continue;\n\n // Custom filter\n if (attrFilter && !attrFilter(name, value, tag)) {\n el.removeAttribute(attr.name);\n continue;\n }\n\n // Check if attribute is allowed\n if (!allowedAttrs.has(name)) {\n el.removeAttribute(attr.name);\n continue;\n }\n\n // Sanitize URLs\n if ((name === 'href' || name === 'src') && DANGEROUS_PROTOCOLS.test(value)) {\n el.removeAttribute(attr.name);\n continue;\n }\n }\n\n // Recurse into children\n sanitizeNode(el, allowedTags, allowedAttrs, allowDataAttrs, allowAriaAttrs, tagFilter, attrFilter);\n }\n }\n}\n\n/**\n * Escape HTML entities — prevents XSS in text content.\n */\nexport function escapeHtml(str: string): string {\n return str\n .replace(/&/g, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/\"/g, '"')\n .replace(/'/g, ''');\n}\n\n/**\n * Create a safe HTML setter that sanitizes automatically.\n *\n * ```ts\n * const setHTML = createSafeHTML(el);\n * setHTML(userContent); // Auto-sanitized\n * ```\n */\nexport function createSafeHTML(el: HTMLElement, options?: SanitizeOptions): (html: string) => void {\n return (html: string) => {\n el.innerHTML = sanitize(html, options);\n };\n}\n\n// =========================================================================\n// CSP (Content Security Policy) Support\n// =========================================================================\n\nexport interface CSPConfig {\n /** Nonce for inline scripts/styles */\n nonce?: string;\n /** Report-only mode (default: false) */\n reportOnly?: boolean;\n /** Report URI for CSP violations */\n reportUri?: string;\n /** Custom directives */\n directives?: Record<string, string[]>;\n}\n\n/**\n * Generate a CSP header string.\n *\n * ```ts\n * const csp = generateCSP({\n * nonce: 'abc123',\n * directives: {\n * 'script-src': [\"'self'\"],\n * 'style-src': [\"'self'\", \"'unsafe-inline'\"],\n * 'img-src': [\"'self'\", 'data:', 'https:'],\n * },\n * });\n * // \"script-src 'self' 'nonce-abc123'; style-src 'self' 'unsafe-inline'; ...\"\n * ```\n */\nexport function generateCSP(config: CSPConfig = {}): string {\n const defaults: Record<string, string[]> = {\n 'default-src': [\"'self'\"],\n 'script-src': [\"'self'\"],\n 'style-src': [\"'self'\", \"'unsafe-inline'\"],\n 'img-src': [\"'self'\", 'data:', 'https:'],\n 'font-src': [\"'self'\", 'https:'],\n 'connect-src': [\"'self'\"],\n 'frame-ancestors': [\"'none'\"],\n 'base-uri': [\"'self'\"],\n 'form-action': [\"'self'\"],\n 'object-src': [\"'none'\"],\n };\n\n const directives = { ...defaults, ...config.directives };\n\n // Add nonce\n if (config.nonce) {\n const nonceValue = `'nonce-${config.nonce}'`;\n if (directives['script-src']) {\n directives['script-src'].push(nonceValue);\n }\n if (directives['style-src']) {\n directives['style-src'].push(nonceValue);\n }\n }\n\n // Add report-uri\n if (config.reportUri) {\n directives['report-uri'] = [config.reportUri];\n }\n\n return Object.entries(directives)\n .map(([key, values]) => `${key} ${values.join(' ')}`)\n .join('; ');\n}\n\n/**\n * Get the CSP header name based on config.\n */\nexport function getCSPHeaderName(config: CSPConfig = {}): string {\n return config.reportOnly\n ? 'Content-Security-Policy-Report-Only'\n : 'Content-Security-Policy';\n}\n\n// =========================================================================\n// Security Headers (Helmet-like)\n// =========================================================================\n\nexport interface SecurityHeadersConfig {\n /** Content Security Policy */\n csp?: CSPConfig;\n /** X-Frame-Options (default: 'DENY') */\n frameOptions?: 'DENY' | 'SAMEORIGIN' | false;\n /** X-Content-Type-Options (default: 'nosniff') */\n contentTypeOptions?: boolean;\n /** X-XSS-Protection (default: '0' — let CSP handle it) */\n xssProtection?: boolean;\n /** Strict-Transport-Security */\n hsts?: { maxAge: number; includeSubDomains?: boolean; preload?: boolean } | false;\n /** Referrer-Policy (default: 'strict-origin-when-cross-origin') */\n referrerPolicy?: string | false;\n /** Permissions-Policy */\n permissionsPolicy?: Record<string, string[]> | false;\n /** Cross-Origin-Opener-Policy */\n coop?: 'same-origin' | 'same-origin-allow-popups' | 'unsafe-none' | false;\n /** Cross-Origin-Embedder-Policy */\n coep?: 'require-corp' | 'credentialless' | 'unsafe-none' | false;\n}\n\n/**\n * Generate security headers for SSR responses.\n *\n * ```ts\n * const headers = generateSecurityHeaders();\n * // Apply to your server response\n * for (const [name, value] of Object.entries(headers)) {\n * res.setHeader(name, value);\n * }\n * ```\n */\nexport function generateSecurityHeaders(config: SecurityHeadersConfig = {}): Record<string, string> {\n const headers: Record<string, string> = {};\n\n // CSP\n if (config.csp !== false) {\n const cspConfig = config.csp ?? {};\n headers[getCSPHeaderName(cspConfig)] = generateCSP(cspConfig);\n }\n\n // X-Frame-Options\n if (config.frameOptions !== false) {\n headers['X-Frame-Options'] = config.frameOptions ?? 'DENY';\n }\n\n // X-Content-Type-Options\n if (config.contentTypeOptions !== false) {\n headers['X-Content-Type-Options'] = 'nosniff';\n }\n\n // X-XSS-Protection (disabled by default — CSP is better)\n headers['X-XSS-Protection'] = config.xssProtection ? '1; mode=block' : '0';\n\n // HSTS\n if (config.hsts !== false) {\n const hsts = config.hsts ?? { maxAge: 31536000, includeSubDomains: true };\n let value = `max-age=${hsts.maxAge}`;\n if (hsts.includeSubDomains) value += '; includeSubDomains';\n if (hsts.preload) value += '; preload';\n headers['Strict-Transport-Security'] = value;\n }\n\n // Referrer-Policy\n if (config.referrerPolicy !== false) {\n headers['Referrer-Policy'] = config.referrerPolicy ?? 'strict-origin-when-cross-origin';\n }\n\n // Permissions-Policy\n if (config.permissionsPolicy !== false) {\n const policy = config.permissionsPolicy ?? {\n camera: [],\n microphone: [],\n geolocation: [],\n 'payment': [],\n };\n headers['Permissions-Policy'] = Object.entries(policy)\n .map(([key, values]) => `${key}=(${values.join(' ')})`)\n .join(', ');\n }\n\n // COOP\n if (config.coop !== false) {\n headers['Cross-Origin-Opener-Policy'] = config.coop ?? 'same-origin';\n }\n\n // COEP\n if (config.coep !== false) {\n headers['Cross-Origin-Embedder-Policy'] = config.coep ?? 'require-corp';\n }\n\n return headers;\n}\n\n// =========================================================================\n// Prototype Pollution Prevention\n// =========================================================================\n\n/**\n * Safe deep merge that prevents prototype pollution.\n * Will not set __proto__, constructor, or prototype keys.\n *\n * ```ts\n * const result = safeMerge(defaults, userConfig);\n * ```\n */\nexport function safeMerge<T extends Record<string, unknown>>(\n target: T,\n ...sources: Partial<T>[]\n): T {\n const DANGEROUS_KEYS = new Set(['__proto__', 'constructor', 'prototype']);\n\n for (const source of sources) {\n if (!source || typeof source !== 'object') continue;\n\n for (const key of Object.keys(source)) {\n if (DANGEROUS_KEYS.has(key)) continue;\n\n const targetVal = (target as any)[key];\n const sourceVal = (source as any)[key];\n\n if (isPlainObject(sourceVal) && isPlainObject(targetVal)) {\n (target as any)[key] = safeMerge({ ...targetVal }, sourceVal);\n } else {\n (target as any)[key] = sourceVal;\n }\n }\n }\n\n return target;\n}\n\n/**\n * Freeze an object deeply — prevents any modification.\n */\nexport function deepFreeze<T>(obj: T): Readonly<T> {\n if (obj === null || typeof obj !== 'object') return obj;\n Object.freeze(obj);\n for (const value of Object.values(obj)) {\n if (typeof value === 'object' && value !== null) {\n deepFreeze(value);\n }\n }\n return obj;\n}\n\nfunction isPlainObject(val: unknown): val is Record<string, unknown> {\n return val !== null && typeof val === 'object' && Object.getPrototypeOf(val) === Object.prototype;\n}\n\n// =========================================================================\n// Subresource Integrity (SRI)\n// =========================================================================\n\n/**\n * Generate SRI hash for a script/style resource.\n * For use in <script integrity=\"...\"> and <link integrity=\"...\">.\n *\n * ```ts\n * // In Node.js build script:\n * const hash = await generateSRI(fileContent);\n * // 'sha384-...'\n * ```\n */\nexport async function generateSRI(content: string, algorithm: 'sha256' | 'sha384' | 'sha512' = 'sha384'): Promise<string> {\n const encoder = new TextEncoder();\n const data = encoder.encode(content);\n\n const hashAlgo = algorithm === 'sha256' ? 'SHA-256' : algorithm === 'sha384' ? 'SHA-384' : 'SHA-512';\n const hashBuffer = await crypto.subtle.digest(hashAlgo, data);\n const hashArray = new Uint8Array(hashBuffer);\n const base64 = btoa(String.fromCharCode(...hashArray));\n\n return `${algorithm}-${base64}`;\n}\n\n// =========================================================================\n// CSRF Protection\n// =========================================================================\n\n/**\n * Generate a CSRF token.\n */\nexport function generateCSRFToken(): string {\n const array = new Uint8Array(32);\n crypto.getRandomValues(array);\n return Array.from(array, (b) => b.toString(16).padStart(2, '0')).join('');\n}\n\n/**\n * Create an HTTP interceptor that attaches CSRF tokens.\n *\n * ```ts\n * const csrf = createCSRFInterceptor();\n * const http = createHttpClient({ interceptors: [csrf.interceptor] });\n * // Token is auto-attached to every mutation request\n * ```\n */\nexport function createCSRFInterceptor(options: {\n headerName?: string;\n cookieName?: string;\n tokenGenerator?: () => string;\n} = {}) {\n const {\n headerName = 'X-CSRF-Token',\n cookieName = 'csrf-token',\n tokenGenerator = generateCSRFToken,\n } = options;\n\n let token: string | null = null;\n\n function getToken(): string {\n if (!token) {\n // Try to read from cookie\n if (typeof document !== 'undefined') {\n const match = document.cookie.match(new RegExp(`${cookieName}=([^;]+)`));\n if (match) {\n token = match[1];\n return token;\n }\n }\n // Generate new token\n token = tokenGenerator();\n }\n return token;\n }\n\n const interceptor = async (request: Request, next: (req: Request) => Promise<Response>): Promise<Response> => {\n const method = request.method.toUpperCase();\n // Only attach to mutating requests\n if (['POST', 'PUT', 'PATCH', 'DELETE'].includes(method)) {\n request.headers.set(headerName, getToken());\n }\n return next(request);\n };\n\n return {\n interceptor,\n token: getToken,\n refresh() { token = tokenGenerator(); },\n };\n}\n\n// =========================================================================\n// Input Validation\n// =========================================================================\n\n/**\n * Validate and sanitize a URL — prevent open redirect attacks.\n *\n * ```ts\n * const safe = sanitizeURL(userInput, { allowedHosts: ['example.com'] });\n * if (safe) window.location.href = safe;\n * ```\n */\nexport function sanitizeURL(url: string, options: {\n allowedHosts?: string[];\n allowedProtocols?: string[];\n allowRelative?: boolean;\n} = {}): string | null {\n const {\n allowedHosts,\n allowedProtocols = ['http:', 'https:'],\n allowRelative = true,\n } = options;\n\n // Relative URLs\n if (url.startsWith('/') && !url.startsWith('//')) {\n return allowRelative ? url : null;\n }\n\n try {\n const parsed = new URL(url);\n\n // Check protocol\n if (!allowedProtocols.includes(parsed.protocol)) return null;\n\n // Check host\n if (allowedHosts && !allowedHosts.includes(parsed.hostname)) return null;\n\n return parsed.toString();\n } catch {\n return null;\n }\n}\n\n/**\n * Rate limiter for client-side actions (e.g., form submissions).\n *\n * ```ts\n * const limiter = createRateLimiter({ maxAttempts: 5, windowMs: 60000 });\n * if (!limiter.check()) {\n * toast.error('Too many attempts. Please wait.');\n * return;\n * }\n * ```\n */\nexport function createRateLimiter(options: {\n maxAttempts: number;\n windowMs: number;\n}) {\n const { maxAttempts, windowMs } = options;\n const attempts: number[] = [];\n\n return {\n check(): boolean {\n const now = Date.now();\n // Remove old attempts\n while (attempts.length > 0 && attempts[0] < now - windowMs) {\n attempts.shift();\n }\n if (attempts.length >= maxAttempts) return false;\n attempts.push(now);\n return true;\n },\n remaining(): number {\n const now = Date.now();\n while (attempts.length > 0 && attempts[0] < now - windowMs) {\n attempts.shift();\n }\n return Math.max(0, maxAttempts - attempts.length);\n },\n reset(): void {\n attempts.length = 0;\n },\n };\n}\n","/**\n * Deprecation warnings and API stability markers.\n *\n * Provides runtime warnings when deprecated APIs are used,\n * with migration hints pointing to the replacement.\n *\n * ```ts\n * // Mark an API as deprecated:\n * export const oldName = deprecated(newImplementation, {\n * name: 'oldName',\n * replacement: 'newName',\n * since: '0.2.0',\n * removeIn: '1.0.0',\n * message: 'Use newName() instead for better performance.',\n * });\n *\n * // Users see:\n * // [AkashJS] DEPRECATED: oldName() is deprecated since v0.2.0 and will be removed in v1.0.0.\n * // Use newName() instead for better performance.\n * // See: https://akash.js.org/migration\n * ```\n */\n\n// =========================================================================\n// Types\n// =========================================================================\n\nexport type APIStability = 'stable' | 'experimental' | 'deprecated' | 'internal';\n\nexport interface DeprecationInfo {\n /** Name of the deprecated API */\n name: string;\n /** Replacement API name */\n replacement?: string;\n /** Version when deprecated */\n since: string;\n /** Version when it will be removed */\n removeIn?: string;\n /** Custom migration message */\n message?: string;\n /** Documentation link */\n link?: string;\n}\n\nexport interface APIInfo {\n /** API name */\n name: string;\n /** Stability level */\n stability: APIStability;\n /** Version introduced */\n since: string;\n /** Deprecation info (if deprecated) */\n deprecation?: DeprecationInfo;\n}\n\n// =========================================================================\n// Warning state\n// =========================================================================\n\nconst warned = new Set<string>();\nlet warningsEnabled = true;\nlet warningHandler: ((msg: string) => void) | null = null;\n\n/**\n * Enable or disable deprecation warnings globally.\n */\nexport function setDeprecationWarnings(enabled: boolean): void {\n warningsEnabled = enabled;\n}\n\n/**\n * Set a custom warning handler (default: console.warn).\n */\nexport function setWarningHandler(handler: ((msg: string) => void) | null): void {\n warningHandler = handler;\n}\n\n/**\n * Reset warned-about APIs (useful for testing).\n */\nexport function resetDeprecationWarnings(): void {\n warned.clear();\n}\n\n// =========================================================================\n// deprecated() — wrap a function with a deprecation warning\n// =========================================================================\n\n/**\n * Wrap a function so it emits a deprecation warning on first call.\n *\n * ```ts\n * // Old API that still works but warns:\n * export const createStore = deprecated(defineStore, {\n * name: 'createStore',\n * replacement: 'defineStore',\n * since: '0.2.0',\n * removeIn: '1.0.0',\n * });\n * ```\n */\nexport function deprecated<T extends (...args: any[]) => any>(\n fn: T,\n info: DeprecationInfo,\n): T {\n const wrapper = ((...args: any[]) => {\n emitDeprecationWarning(info);\n return fn(...args);\n }) as unknown as T;\n\n // Copy properties from original\n Object.keys(fn).forEach((key) => {\n (wrapper as any)[key] = (fn as any)[key];\n });\n\n // Mark as deprecated\n (wrapper as any).__deprecated = info;\n\n return wrapper;\n}\n\n/**\n * Mark a value (non-function) as deprecated.\n * Returns the value but warns on first access.\n */\nexport function deprecatedValue<T>(value: T, info: DeprecationInfo): T {\n emitDeprecationWarning(info);\n return value;\n}\n\n// =========================================================================\n// Warning emission\n// =========================================================================\n\nfunction emitDeprecationWarning(info: DeprecationInfo): void {\n if (!warningsEnabled) return;\n if (warned.has(info.name)) return; // Only warn once per API\n warned.add(info.name);\n\n const parts: string[] = [\n `[AkashJS] DEPRECATED: ${info.name}() is deprecated since v${info.since}`,\n ];\n\n if (info.removeIn) {\n parts[0] += ` and will be removed in v${info.removeIn}.`;\n } else {\n parts[0] += '.';\n }\n\n if (info.replacement) {\n parts.push(` Migrate to: ${info.replacement}()`);\n }\n\n if (info.message) {\n parts.push(` ${info.message}`);\n }\n\n parts.push(` See: ${info.link ?? 'https://akash.js.org/migration'}`);\n\n const msg = parts.join('\\n');\n\n if (warningHandler) {\n warningHandler(msg);\n } else if (typeof console !== 'undefined') {\n console.warn(msg);\n }\n}\n\n// =========================================================================\n// API Registry — track stability of all APIs\n// =========================================================================\n\nconst apiRegistry = new Map<string, APIInfo>();\n\n/**\n * Register an API with its stability level.\n */\nexport function registerAPI(info: APIInfo): void {\n apiRegistry.set(info.name, info);\n}\n\n/**\n * Get all registered APIs.\n */\nexport function getRegisteredAPIs(): APIInfo[] {\n return Array.from(apiRegistry.values());\n}\n\n/**\n * Get APIs by stability level.\n */\nexport function getAPIsByStability(stability: APIStability): APIInfo[] {\n return getRegisteredAPIs().filter((api) => api.stability === stability);\n}\n\n/**\n * Check if an API is deprecated.\n */\nexport function isDeprecated(name: string): boolean {\n const info = apiRegistry.get(name);\n return info?.stability === 'deprecated';\n}\n\n/**\n * Get deprecation info for an API.\n */\nexport function getDeprecationInfo(name: string): DeprecationInfo | null {\n const info = apiRegistry.get(name);\n return info?.deprecation ?? null;\n}\n\n// =========================================================================\n// Compatibility check\n// =========================================================================\n\nexport interface CompatibilityResult {\n compatible: boolean;\n warnings: string[];\n errors: string[];\n}\n\n/**\n * Check if package versions are compatible.\n *\n * ```ts\n * const result = checkCompatibility({\n * '@akashjs/runtime': '0.2.0',\n * '@akashjs/router': '0.1.0',\n * });\n * if (!result.compatible) {\n * console.error(result.errors);\n * }\n * ```\n */\nexport function checkCompatibility(\n packages: Record<string, string>,\n): CompatibilityResult {\n const warnings: string[] = [];\n const errors: string[] = [];\n\n const versions = Object.entries(packages);\n if (versions.length === 0) return { compatible: true, warnings, errors };\n\n // Check that all @akashjs packages are on compatible versions\n const akashPackages = versions.filter(([name]) => name.startsWith('@akashjs/'));\n\n if (akashPackages.length > 1) {\n const majors = new Set(akashPackages.map(([, v]) => v.split('.')[0]));\n const minors = new Set(akashPackages.map(([, v]) => v.split('.').slice(0, 2).join('.')));\n\n if (majors.size > 1) {\n errors.push(\n `Major version mismatch: ${akashPackages.map(([n, v]) => `${n}@${v}`).join(', ')}. ` +\n 'All @akashjs packages should be on the same major version.',\n );\n } else if (minors.size > 1) {\n warnings.push(\n `Minor version mismatch: ${akashPackages.map(([n, v]) => `${n}@${v}`).join(', ')}. ` +\n 'Consider updating all packages to the same version with `akash update`.',\n );\n }\n }\n\n return {\n compatible: errors.length === 0,\n warnings,\n errors,\n };\n}\n","/**\n * AkashJS DevTools — Console-based debugging utilities.\n *\n * Call `installDevtools()` in development to expose `__AKASH_DEVTOOLS__`\n * on the global object. Access it from the browser console:\n *\n * ```js\n * __AKASH_DEVTOOLS__.stores() // list all stores\n * __AKASH_DEVTOOLS__.store('cart') // inspect a store\n * __AKASH_DEVTOOLS__.signals() // list tracked signals\n * __AKASH_DEVTOOLS__.effects() // list active effects\n * ```\n */\n\nimport { __getStoreInstances } from './store.js';\nimport type { Store } from './store.js';\n\n// --- Signal/Effect tracking ---\n\ninterface TrackedSignal {\n name: string;\n read: () => unknown;\n subscriberCount: number;\n}\n\ninterface TrackedEffect {\n name: string;\n runCount: number;\n isRender: boolean;\n sourceCount: number;\n}\n\nconst trackedSignals = new Map<string, TrackedSignal>();\nconst trackedEffects = new Map<string, TrackedEffect>();\nlet signalCounter = 0;\nlet effectCounter = 0;\n\n/** Register a signal for devtools tracking (call in dev mode) */\nexport function __trackSignal(name: string, read: () => unknown, getSubscriberCount: () => number): void {\n trackedSignals.set(name || `signal_${signalCounter++}`, {\n name,\n read,\n subscriberCount: 0,\n get subscriberCount() { return getSubscriberCount(); },\n } as TrackedSignal);\n}\n\n/** Register an effect for devtools tracking */\nexport function __trackEffect(name: string, meta: { isRender: boolean; getSourceCount: () => number }): () => void {\n const id = name || `effect_${effectCounter++}`;\n const entry: TrackedEffect = {\n name: id,\n runCount: 0,\n isRender: meta.isRender,\n sourceCount: 0,\n };\n trackedEffects.set(id, entry);\n\n // Return a function to increment run count (called each time effect runs)\n return () => {\n entry.runCount++;\n entry.sourceCount = meta.getSourceCount();\n };\n}\n\n// --- Store inspection ---\n\ninterface StoreSnapshot {\n $id: string;\n state: Record<string, unknown>;\n getters: Record<string, unknown>;\n actions: string[];\n subscriberCount: number;\n}\n\nfunction inspectStore(id: string): StoreSnapshot | null {\n const instances = __getStoreInstances();\n const store = instances[id];\n if (!store) return null;\n\n const snapshot = store.$snapshot();\n const state: Record<string, unknown> = {};\n const getters: Record<string, unknown> = {};\n const actions: string[] = [];\n\n for (const [key, value] of Object.entries(store)) {\n if (key.startsWith('$')) continue;\n if (typeof value === 'function' && 'set' in value && 'update' in value) {\n // Signal\n state[key] = (value as any)();\n } else if (typeof value === 'function' && !('set' in value) && !key.startsWith('$')) {\n // Could be getter (computed) or action\n try {\n const result = (value as any)();\n // If it returns a primitive/object, it's likely a getter\n if (typeof result !== 'undefined') {\n getters[key] = result;\n } else {\n actions.push(key);\n }\n } catch {\n actions.push(key);\n }\n }\n }\n\n return {\n $id: id,\n state: snapshot,\n getters,\n actions,\n subscriberCount: 0,\n };\n}\n\n// --- DevTools API ---\n\nexport interface DevToolsAPI {\n /** List all registered stores */\n stores(): string[];\n /** Inspect a specific store by ID */\n store(id: string): StoreSnapshot | null;\n /** Get all store snapshots */\n storeSnapshots(): Record<string, StoreSnapshot>;\n /** List tracked signals with current values */\n signals(): Array<{ name: string; value: unknown; subscribers: number }>;\n /** List tracked effects with run counts */\n effects(): Array<{ name: string; runs: number; isRender: boolean; sources: number }>;\n /** Get framework version info */\n version(): { runtime: string };\n /** Pretty-print store state to console */\n log(storeId?: string): void;\n /** Record store state history for time-travel */\n startRecording(storeId: string): void;\n /** Stop recording and return history */\n stopRecording(storeId: string): Array<{ timestamp: number; state: Record<string, unknown>; action?: string }>;\n}\n\nconst recordings = new Map<string, Array<{ timestamp: number; state: Record<string, unknown>; action?: string }>>();\nconst recordingDisposers = new Map<string, () => void>();\n\nfunction createDevToolsAPI(): DevToolsAPI {\n return {\n stores() {\n return Object.keys(__getStoreInstances());\n },\n\n store(id: string) {\n return inspectStore(id);\n },\n\n storeSnapshots() {\n const result: Record<string, StoreSnapshot> = {};\n for (const id of Object.keys(__getStoreInstances())) {\n const snap = inspectStore(id);\n if (snap) result[id] = snap;\n }\n return result;\n },\n\n signals() {\n return [...trackedSignals.values()].map(s => ({\n name: s.name,\n value: s.read(),\n subscribers: s.subscriberCount,\n }));\n },\n\n effects() {\n return [...trackedEffects.values()].map(e => ({\n name: e.name,\n runs: e.runCount,\n isRender: e.isRender,\n sources: e.sourceCount,\n }));\n },\n\n version() {\n return { runtime: '0.1.26' };\n },\n\n log(storeId?: string) {\n if (storeId) {\n const snap = inspectStore(storeId);\n if (snap) {\n console.group(`🔍 Store: ${storeId}`);\n console.log('State:', snap.state);\n console.log('Getters:', snap.getters);\n console.log('Actions:', snap.actions);\n console.groupEnd();\n } else {\n console.warn(`Store \"${storeId}\" not found. Available:`, Object.keys(__getStoreInstances()));\n }\n } else {\n const stores = Object.keys(__getStoreInstances());\n console.group('🔍 AkashJS Stores');\n for (const id of stores) {\n const snap = inspectStore(id);\n if (snap) {\n console.group(id);\n console.log('State:', snap.state);\n console.log('Getters:', snap.getters);\n console.groupEnd();\n }\n }\n console.groupEnd();\n }\n },\n\n startRecording(storeId: string) {\n const store = __getStoreInstances()[storeId];\n if (!store) {\n console.warn(`Store \"${storeId}\" not found.`);\n return;\n }\n\n const history: Array<{ timestamp: number; state: Record<string, unknown>; action?: string }> = [];\n // Record initial state\n history.push({ timestamp: Date.now(), state: store.$snapshot() });\n\n const unsubscribe = store.$subscribe((state) => {\n history.push({ timestamp: Date.now(), state: { ...state } });\n });\n\n recordings.set(storeId, history);\n recordingDisposers.set(storeId, unsubscribe);\n console.log(`⏺ Recording store \"${storeId}\". Call __AKASH_DEVTOOLS__.stopRecording(\"${storeId}\") to view history.`);\n },\n\n stopRecording(storeId: string) {\n const disposer = recordingDisposers.get(storeId);\n if (disposer) disposer();\n recordingDisposers.delete(storeId);\n\n const history = recordings.get(storeId) ?? [];\n recordings.delete(storeId);\n\n console.log(`⏹ Stopped recording \"${storeId}\". ${history.length} snapshots captured.`);\n console.table(history.map((h, i) => ({\n '#': i,\n time: new Date(h.timestamp).toISOString().slice(11, 23),\n state: JSON.stringify(h.state),\n })));\n\n return history;\n },\n };\n}\n\n/**\n * Install AkashJS DevTools on the global object.\n * Call this in your app's entry point during development:\n *\n * ```ts\n * import { installDevtools } from '@akashjs/runtime';\n * if (import.meta.env.DEV) installDevtools();\n * ```\n */\nexport function installDevtools(): void {\n const api = createDevToolsAPI();\n\n if (typeof globalThis !== 'undefined') {\n (globalThis as any).__AKASH_DEVTOOLS__ = api;\n console.log(\n '%c🔧 AkashJS DevTools installed. Access via __AKASH_DEVTOOLS__ in console.',\n 'color: #7c3aed; font-weight: bold;'\n );\n console.log(' .stores() — list stores');\n console.log(' .store(\"id\") — inspect store');\n console.log(' .log() — pretty-print all stores');\n console.log(' .log(\"id\") — pretty-print one store');\n console.log(' .startRecording(\"id\") — record state changes');\n console.log(' .stopRecording(\"id\") — view recorded history');\n console.log(' .signals() — list tracked signals');\n console.log(' .effects() — list tracked effects');\n }\n}\n"]}
|