@omerdlw/base-framework 1.0.6 → 2.0.1
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/atoms/index.js +1 -103
- package/dist/atoms/index.js.map +1 -1
- package/dist/chunk-3BUP64Q6.js +105 -0
- package/dist/chunk-3BUP64Q6.js.map +1 -0
- package/dist/chunk-4GMQKD6F.js +353 -0
- package/dist/chunk-4GMQKD6F.js.map +1 -0
- package/dist/chunk-6SG7V77J.js +577 -0
- package/dist/chunk-6SG7V77J.js.map +1 -0
- package/dist/chunk-6ZJVLUBE.js +26 -0
- package/dist/chunk-6ZJVLUBE.js.map +1 -0
- package/dist/chunk-7HQMXTNP.js +419 -0
- package/dist/chunk-7HQMXTNP.js.map +1 -0
- package/dist/chunk-7TAVYJ3A.js +371 -0
- package/dist/chunk-7TAVYJ3A.js.map +1 -0
- package/dist/chunk-A5RE3F6O.js +9905 -0
- package/dist/chunk-A5RE3F6O.js.map +1 -0
- package/dist/chunk-AQ4BNXA2.js +349 -0
- package/dist/chunk-AQ4BNXA2.js.map +1 -0
- package/dist/chunk-CGHZSSFR.js +2166 -0
- package/dist/chunk-CGHZSSFR.js.map +1 -0
- package/dist/chunk-DGCQWQLZ.js +61 -0
- package/dist/chunk-DGCQWQLZ.js.map +1 -0
- package/dist/chunk-FIMPHODX.js +67 -0
- package/dist/chunk-FIMPHODX.js.map +1 -0
- package/dist/chunk-GF7TUX5I.js +1889 -0
- package/dist/chunk-GF7TUX5I.js.map +1 -0
- package/dist/chunk-JELG4JLT.js +454 -0
- package/dist/chunk-JELG4JLT.js.map +1 -0
- package/dist/chunk-K676GL7Z.js +51 -0
- package/dist/chunk-K676GL7Z.js.map +1 -0
- package/dist/chunk-QI3ALLIB.js +38 -0
- package/dist/chunk-QI3ALLIB.js.map +1 -0
- package/dist/chunk-QXR55VVS.js +1139 -0
- package/dist/chunk-QXR55VVS.js.map +1 -0
- package/dist/chunk-R2YGFJDJ.js +408 -0
- package/dist/chunk-R2YGFJDJ.js.map +1 -0
- package/dist/chunk-RFZQWLC5.js +27 -0
- package/dist/chunk-RFZQWLC5.js.map +1 -0
- package/dist/chunk-SKBITB5X.js +888 -0
- package/dist/chunk-SKBITB5X.js.map +1 -0
- package/dist/chunk-SYAVGTOX.js +521 -0
- package/dist/chunk-SYAVGTOX.js.map +1 -0
- package/dist/chunk-TV3WEF5G.js +784 -0
- package/dist/chunk-TV3WEF5G.js.map +1 -0
- package/dist/chunk-XASQT4CQ.js +280 -0
- package/dist/chunk-XASQT4CQ.js.map +1 -0
- package/dist/error/index.js +5 -682
- package/dist/error/index.js.map +1 -1
- package/dist/error/reporter.d.ts.map +1 -1
- package/dist/error/theme.d.ts +1 -1
- package/dist/error/theme.d.ts.map +1 -1
- package/dist/events.js +1 -7
- package/dist/events.js.map +1 -1
- package/dist/hooks/index.js +1 -358
- package/dist/hooks/index.js.map +1 -1
- package/dist/hooks/use-global-event.d.ts +1 -1
- package/dist/index.js +18 -20029
- package/dist/index.js.map +1 -1
- package/dist/kernel/index.js +2 -2035
- package/dist/kernel/index.js.map +1 -1
- package/dist/kernel/types.d.ts +1 -1
- package/dist/modules/ambient/analyze.d.ts +46 -0
- package/dist/modules/ambient/analyze.d.ts.map +1 -0
- package/dist/modules/ambient/constants.d.ts +1 -5
- package/dist/modules/ambient/constants.d.ts.map +1 -1
- package/dist/modules/ambient/context.d.ts.map +1 -1
- package/dist/modules/ambient/dom.d.ts +11 -12
- package/dist/modules/ambient/dom.d.ts.map +1 -1
- package/dist/modules/ambient/extractor.d.ts +10 -10
- package/dist/modules/ambient/extractor.d.ts.map +1 -1
- package/dist/modules/ambient/hooks.d.ts +1 -1
- package/dist/modules/ambient/hooks.d.ts.map +1 -1
- package/dist/modules/ambient/index.d.ts +6 -4
- package/dist/modules/ambient/index.d.ts.map +1 -1
- package/dist/modules/ambient/index.js +7 -762
- package/dist/modules/ambient/index.js.map +1 -1
- package/dist/modules/ambient/module.d.ts +1 -1
- package/dist/modules/ambient/module.d.ts.map +1 -1
- package/dist/modules/ambient/oklab.d.ts +36 -0
- package/dist/modules/ambient/oklab.d.ts.map +1 -0
- package/dist/modules/ambient/pipeline.d.ts +28 -0
- package/dist/modules/ambient/pipeline.d.ts.map +1 -0
- package/dist/modules/ambient/quantize.d.ts +22 -0
- package/dist/modules/ambient/quantize.d.ts.map +1 -0
- package/dist/modules/ambient/server/address.d.ts +8 -0
- package/dist/modules/ambient/server/address.d.ts.map +1 -0
- package/dist/modules/ambient/server/index.d.ts +53 -0
- package/dist/modules/ambient/server/index.d.ts.map +1 -0
- package/dist/modules/ambient/server/index.js +221 -0
- package/dist/modules/ambient/server/index.js.map +1 -0
- package/dist/modules/ambient/settings.d.ts +19 -0
- package/dist/modules/ambient/settings.d.ts.map +1 -0
- package/dist/modules/ambient/types.d.ts +105 -9
- package/dist/modules/ambient/types.d.ts.map +1 -1
- package/dist/modules/ambient/worker/index.d.ts +15 -0
- package/dist/modules/ambient/worker/index.d.ts.map +1 -0
- package/dist/modules/ambient/worker/index.js +114 -0
- package/dist/modules/ambient/worker/index.js.map +1 -0
- package/dist/modules/background/constants.d.ts +2 -2
- package/dist/modules/background/constants.d.ts.map +1 -1
- package/dist/modules/background/hooks.d.ts +1 -1
- package/dist/modules/background/index.js +6 -3078
- package/dist/modules/background/index.js.map +1 -1
- package/dist/modules/background/motion.d.ts +9 -7
- package/dist/modules/background/motion.d.ts.map +1 -1
- package/dist/modules/background/overlay.d.ts +3 -8
- package/dist/modules/background/overlay.d.ts.map +1 -1
- package/dist/modules/background/types.d.ts +16 -2
- package/dist/modules/background/types.d.ts.map +1 -1
- package/dist/modules/context-menu/constants.d.ts +2 -2
- package/dist/modules/context-menu/constants.d.ts.map +1 -1
- package/dist/modules/context-menu/hooks.d.ts +1 -1
- package/dist/modules/context-menu/index.js +10 -1896
- package/dist/modules/context-menu/index.js.map +1 -1
- package/dist/modules/context-menu/motion.d.ts +1 -8
- package/dist/modules/context-menu/motion.d.ts.map +1 -1
- package/dist/modules/context-menu/overlay.d.ts.map +1 -1
- package/dist/modules/context-menu/types.d.ts +16 -2
- package/dist/modules/context-menu/types.d.ts.map +1 -1
- package/dist/modules/controls/constants.d.ts +1 -1
- package/dist/modules/controls/constants.d.ts.map +1 -1
- package/dist/modules/controls/entries.d.ts +1 -1
- package/dist/modules/controls/hooks.d.ts +1 -1
- package/dist/modules/controls/index.js +4 -1110
- package/dist/modules/controls/index.js.map +1 -1
- package/dist/modules/controls/overlay.d.ts +1 -1
- package/dist/modules/controls/types.d.ts +2 -2
- package/dist/modules/dock/cards.d.ts +711 -24
- package/dist/modules/dock/cards.d.ts.map +1 -1
- package/dist/modules/dock/constants.d.ts +2 -2
- package/dist/modules/dock/constants.d.ts.map +1 -1
- package/dist/modules/dock/helpers.d.ts +2 -2
- package/dist/modules/dock/hooks.d.ts +2 -2
- package/dist/modules/dock/index.d.ts +1 -1
- package/dist/modules/dock/index.d.ts.map +1 -1
- package/dist/modules/dock/index.js +9 -12132
- package/dist/modules/dock/index.js.map +1 -1
- package/dist/modules/dock/layout.d.ts.map +1 -1
- package/dist/modules/dock/module.d.ts +1 -1
- package/dist/modules/dock/motion.d.ts +44 -912
- package/dist/modules/dock/motion.d.ts.map +1 -1
- package/dist/modules/dock/overlay.d.ts +1 -1
- package/dist/modules/dock/overlay.d.ts.map +1 -1
- package/dist/modules/dock/runtime/dock.d.ts +1 -23
- package/dist/modules/dock/runtime/dock.d.ts.map +1 -1
- package/dist/modules/dock/styles.d.ts +4 -4
- package/dist/modules/dock/surface/hooks.d.ts +5 -20
- package/dist/modules/dock/surface/hooks.d.ts.map +1 -1
- package/dist/modules/dock/surface/machine.d.ts +4 -3
- package/dist/modules/dock/surface/machine.d.ts.map +1 -1
- package/dist/modules/dock/surface/stack.d.ts.map +1 -1
- package/dist/modules/dock/surface/view-model.d.ts.map +1 -1
- package/dist/modules/dock/types.d.ts +162 -3
- package/dist/modules/dock/types.d.ts.map +1 -1
- package/dist/modules/index.js +16 -17883
- package/dist/modules/index.js.map +1 -1
- package/dist/modules/loading/constants.d.ts +1 -1
- package/dist/modules/loading/constants.d.ts.map +1 -1
- package/dist/modules/loading/context.d.ts +1 -1
- package/dist/modules/loading/hooks.d.ts +1 -1
- package/dist/modules/loading/index.js +5 -1153
- package/dist/modules/loading/index.js.map +1 -1
- package/dist/modules/loading/types.d.ts +2 -2
- package/dist/modules/media/context.d.ts +1 -1
- package/dist/modules/media/index.js +3 -570
- package/dist/modules/media/index.js.map +1 -1
- package/dist/modules/media/types.d.ts +2 -2
- package/dist/modules/modal/constants.d.ts +2 -2
- package/dist/modules/modal/constants.d.ts.map +1 -1
- package/dist/modules/modal/context.d.ts +1 -1
- package/dist/modules/modal/hooks.d.ts +3 -3
- package/dist/modules/modal/index.js +8 -2355
- package/dist/modules/modal/index.js.map +1 -1
- package/dist/modules/modal/motion.d.ts +3 -8
- package/dist/modules/modal/motion.d.ts.map +1 -1
- package/dist/modules/modal/overlay.d.ts.map +1 -1
- package/dist/modules/modal/types.d.ts +21 -0
- package/dist/modules/modal/types.d.ts.map +1 -1
- package/dist/modules/notification/constants.d.ts +2 -2
- package/dist/modules/notification/constants.d.ts.map +1 -1
- package/dist/modules/notification/context.d.ts +1 -1
- package/dist/modules/notification/hooks.d.ts +1 -1
- package/dist/modules/notification/index.js +4 -828
- package/dist/modules/notification/index.js.map +1 -1
- package/dist/modules/notification/motion.d.ts +1 -7
- package/dist/modules/notification/motion.d.ts.map +1 -1
- package/dist/modules/notification/overlay.d.ts.map +1 -1
- package/dist/modules/notification/types.d.ts +9 -1
- package/dist/modules/notification/types.d.ts.map +1 -1
- package/dist/overlay-TZ6L52A5.js +9 -0
- package/dist/overlay-TZ6L52A5.js.map +1 -0
- package/dist/provider.d.ts +1 -1
- package/dist/provider.d.ts.map +1 -1
- package/dist/provider.js +6 -1968
- package/dist/provider.js.map +1 -1
- package/dist/result.js +2 -63
- package/dist/result.js.map +1 -1
- package/dist/theme.d.ts +45 -8
- package/dist/theme.d.ts.map +1 -1
- package/dist/theme.js +3 -41
- package/dist/theme.js.map +1 -1
- package/dist/tokens/index.d.ts +1 -0
- package/dist/tokens/index.d.ts.map +1 -1
- package/dist/tokens/index.js +126 -155
- package/dist/tokens/index.js.map +1 -1
- package/dist/tokens/motion-config.d.ts +44 -0
- package/dist/tokens/motion-config.d.ts.map +1 -0
- package/dist/tokens/motion.d.ts +23 -174
- package/dist/tokens/motion.d.ts.map +1 -1
- package/dist/utils/index.js +4 -82
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/report.d.ts.map +1 -1
- package/docs/README.md +1 -0
- package/docs/architecture-and-rules.md +4 -3
- package/docs/core-engine.md +7 -10
- package/docs/getting-started.md +4 -2
- package/docs/modules/ambient.md +194 -80
- package/docs/modules/background.md +3 -3
- package/docs/modules/context-menu.md +2 -2
- package/docs/modules/dock.md +9 -6
- package/docs/modules/modal.md +2 -2
- package/docs/modules/notification.md +2 -2
- package/docs/theming.md +81 -9
- package/package.json +22 -5
- package/templates/AGENTS.md +1 -1
- package/templates/motion/background.ts +17 -0
- package/templates/motion/context-menu.ts +63 -0
- package/templates/motion/dock.ts +327 -0
- package/templates/motion/modal.ts +79 -0
- package/templates/motion/notification.ts +27 -0
- package/templates/motion/tokens.ts +47 -0
- package/templates/tsconfig.json +7 -0
- package/dist/modules/ambient/color.d.ts +0 -21
- package/dist/modules/ambient/color.d.ts.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/kernel/constants.ts","../src/kernel/context-registry.ts","../src/kernel/utils.ts","../src/kernel/schema.ts","../src/kernel/operations.ts","../src/kernel/runtime.ts","../src/kernel/store.ts","../src/kernel/provider.tsx","../src/kernel/installed.ts","../src/kernel/handlers.ts","../src/kernel/hooks.ts","../src/kernel/page-controller.tsx","../src/kernel/module.tsx","../src/kernel/adapters.ts","../src/kernel/compose.ts"],"names":["isPlainObject","isValidElement","hasChanged","stabilizedValue","useState","useMemo","useSyncExternalStore","jsx","use","useId","useCallback","useRef","Component","createElement","Fragment"],"mappings":";;;;;;AAOO,IAAM,cAAA,GAAiC,SAAA;AAEvC,IAAM,gBAAA,GACX,OAAO,MAAA,CAAO;AAAA,EACZ,MAAA,EAAQ,QAAA;AAAA,EACR,OAAA,EAAS,SAAA;AAAA,EACT,IAAA,EAAM;AACR,CAAC;AAEI,IAAM,mBAAA,GACX,OAAO,MAAA,CAAO;AAAA,EACZ,SAAA,EAAW,WAAA;AAAA,EACX,QAAA,EAAU,UAAA;AAAA,EACV,UAAA,EAAY,YAAA;AAAA,EACZ,KAAA,EAAO;AACT,CAAC,CAAA;AAEI,IAAM,yBAAA,GAET,OAAO,MAAA,CAAO;AAAA,EAChB,IAAA,EAAM,MAAA;AAAA,EACN,MAAA,EAAQ;AACV,CAAC,CAAA;AAEM,IAAM,sBAAA,GAA4C,OAAO,MAAA,CAAO;AAAA,EACrE,SAAA;AAAA,EACA,gBAAA;AAAA,EACA,YAAA;AAAA,EACA,WAAA;AAAA,EACA,UAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA;AACF,CAAC,CAAA;AAEM,IAAM,wBAAA,GACX,OAAO,MAAA,CAAO;AAAA,EACZ,CAAC,gBAAA,CAAiB,MAAM,GAAG,GAAA;AAAA,EAC3B,CAAC,gBAAA,CAAiB,OAAO,GAAG,GAAA;AAAA,EAC5B,CAAC,gBAAA,CAAiB,IAAI,GAAG;AAC3B,CAAC,CAAA;AAEI,IAAM,oBAAA,GACX,OAAO,MAAA,CAAO;AAAA,EACZ,CAAC,gBAAA,CAAiB,MAAM,GAAG,EAAA;AAAA,EAC3B,CAAC,gBAAA,CAAiB,OAAO,GAAG,EAAA;AAAA,EAC5B,CAAC,gBAAA,CAAiB,IAAI,GAAG;AAC3B,CAAC,CAAA;AAEI,IAAM,4BAAiD,IAAI,GAAA;AAAA,EAChE,MAAA,CAAO,OAAO,mBAAmB;AACnC,CAAA;AAEO,IAAM,4BAAiD,IAAI,GAAA;AAAA,EAChE;AACF,CAAA;AAEA,IAAM,oBAAA,GACJ,OAAO,MAAA,CAAO;AAAA,EACZ,GAAA,EAAK,KAAA;AAAA,EACL,OAAA,EAAS,SAAA;AAAA,EACT,KAAA,EAAO,OAAA;AAAA,EACP,QAAA,EAAU,UAAA;AAAA,EACV,SAAA,EAAW;AACb,CAAC,CAAA;AAEI,IAAM,yBACX,oBAAA,CAAqB,GAAA;ACxEhB,SAAS,wBAAA,CACd,MACA,YAAA,EACY;AACZ,EAAA,MAAM,GAAA,mBAAM,MAAA,CAAO,GAAA,CAAI,CAAA,gCAAA,EAAmC,IAAI,CAAA,CAAE,CAAA;AAChE,EAAA,MAAM,KAAA,GAAQ,UAAA;AACd,EAAA,IAAI,CAAC,KAAA,CAAM,GAAG,CAAA,EAAG;AACf,IAAA,KAAA,CAAM,GAAG,CAAA,GAAI,aAAA,CAAiB,YAAY,CAAA;AAAA,EAC5C;AACA,EAAA,OAAO,MAAM,GAAG,CAAA;AAClB;;;ACJO,SAAS,cAAA,CAAe,QAAgB,GAAA,EAAsB;AACnE,EAAA,OAAO,MAAA,CAAO,SAAA,CAAU,cAAA,CAAe,IAAA,CAAK,QAAQ,GAAG,CAAA;AACzD;AAEO,SAAS,kBAAkB,KAAA,EAA+B;AAC/D,EAAA,MAAM,MAAA,GAAS,OAAO,KAAK,CAAA;AAC3B,EAAA,OAAO,MAAA,CAAO,QAAA,CAAS,MAAM,CAAA,GAAI,MAAA,GAAS,IAAA;AAC5C;AAEO,SAAS,cAAA,CACd,KAAA,EACA,QAAA,GAA0B,IAAA,EACX;AACf,EAAA,OAAO,UAAA,CAAW,KAAK,CAAA,IAAK,QAAA;AAC9B;AAEO,SAAS,kBAAkB,KAAA,EAA+B;AAC/D,EAAA,OAAO,QAAA,CAAS,KAAK,CAAA,IAAK,OAAO,MAAM,UAAA,KAAe,QAAA,GAClD,MAAM,UAAA,GACN,IAAA;AACN;AAEO,SAAS,cAAc,MAAA,EAAwB;AACpD,EAAA,OAAO,oBAAA,CAAqB,MAAM,CAAA,IAAK,CAAA;AACzC;AAEO,SAAS,oBAAA,CACd,iBACA,UAAA,EAC+C;AAC/C,EAAA,IAAI,OAAO,oBAAoB,QAAA,EAAU;AACvC,IAAA,OAAO;AAAA,MACL,MAAA,EAAQ,eAAA;AAAA,MACR,OAAA,EAAS,QAAA,CAAS,UAAU,CAAA,GAAI,aAAa;AAAC,KAChD;AAAA,EACF;AACA,EAAA,IAAI,QAAA,CAAS,eAAe,CAAA,EAAG;AAC7B,IAAA,OAAO;AAAA,MACL,QACE,OAAO,eAAA,CAAgB,MAAA,KAAW,QAAA,GAC9B,gBAAgB,MAAA,GAChB,cAAA;AAAA,MACN,OAAA,EAAS;AAAA,KACX;AAAA,EACF;AACA,EAAA,OAAO;AAAA,IACL,MAAA,EAAQ,cAAA;AAAA,IACR,OAAA,EAAS,QAAA,CAAS,UAAU,CAAA,GAAI,aAAa;AAAC,GAChD;AACF;AAEO,SAAS,aACd,OAAA,EACQ;AACR,EAAA,OAAO,OAAO,OAAA,EAAS,KAAA,KAAU,QAAA,IAAY,OAAA,CAAQ,KAAA,CAAM,IAAA,EAAK,GAC5D,OAAA,CAAQ,KAAA,CAAM,IAAA,EAAK,GACnB,sBAAA;AACN;AAEO,SAAS,uBAAuB,eAAA,EAIrC;AACA,EAAA,IAAI,OAAO,oBAAoB,QAAA,EAAU;AACvC,IAAA,OAAO,EAAE,UAAA,EAAY,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,QAAQ,eAAA,EAAgB;AAAA,EAClE;AACA,EAAA,IAAI,QAAA,CAAS,eAAe,CAAA,EAAG;AAC7B,IAAA,OAAO;AAAA,MACL,UAAA,EAAY,kBAAkB,eAAe,CAAA;AAAA,MAC7C,KAAA,EACE,OAAO,eAAA,CAAgB,KAAA,KAAU,QAAA,IACjC,eAAA,CAAgB,KAAA,CAAM,IAAA,EAAK,GACvB,eAAA,CAAgB,KAAA,CAAM,IAAA,EAAK,GAC3B,IAAA;AAAA,MACN,QACE,OAAO,eAAA,CAAgB,MAAA,KAAW,QAAA,GAC9B,gBAAgB,MAAA,GAChB;AAAA,KACR;AAAA,EACF;AACA,EAAA,OAAO,EAAE,UAAA,EAAY,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,QAAQ,cAAA,EAAe;AACjE;AAEO,SAAS,kBAAA,CACd,MACA,KAAA,EACG;AACH,EAAA,MAAM,MAAA,GAAS,IAAA;AACf,EAAA,MAAM,OAAA,GAAU,KAAA;AAChB,EAAA,MAAM,MAAA,GAAkC,EAAE,GAAG,MAAA,EAAO;AACpD,EAAA,MAAA,CAAO,IAAA,CAAK,OAAO,CAAA,CAAE,OAAA,CAAQ,CAAC,GAAA,KAAQ;AACpC,IAAA,MAAM,OAAA,GAAU,OAAO,GAAG,CAAA;AAC1B,IAAA,MAAM,QAAA,GAAW,QAAQ,GAAG,CAAA;AAC5B,IAAA,IACE,WACA,OAAO,OAAA,KAAY,QAAA,IACnB,CAAC,MAAM,OAAA,CAAQ,OAAO,CAAA,IACtB,QAAA,IACA,OAAO,QAAA,KAAa,QAAA,IACpB,CAAC,KAAA,CAAM,OAAA,CAAQ,QAAQ,CAAA,EACvB;AACA,MAAA,MAAA,CAAO,GAAG,CAAA,GAAI,EAAE,GAAG,OAAA,EAAS,GAAG,QAAA,EAAS;AAAA,IAC1C,CAAA,MAAO;AACL,MAAA,MAAA,CAAO,GAAG,CAAA,GAAI,QAAA;AAAA,IAChB;AAAA,EACF,CAAC,CAAA;AACD,EAAA,OAAO,MAAA;AACT;;;ACjGA,SAAS,gBAAA,CACP,UACA,QAAA,EAC0B;AAC1B,EAAA,MAAM,SAAA,GAAY,QAAA,EAAU,SAAA,IAAa,QAAA,EAAU,OAAA;AACnD,EAAA,OAAO,SAAA,IAAa,yBAAA,CAA0B,GAAA,CAAI,SAAS,IACvD,SAAA,GACA,QAAA;AACN;AAEO,SAAS,yBAAyB,QAAA,EAAqC;AAC5E,EAAA,IAAI,QAAA,KAAa,UAAa,QAAA,KAAa,IAAA;AACzC,IAAA,OAAO,EAAE,MAAA,EAAQ,EAAC,EAAG,OAAO,IAAA,EAAK;AACnC,EAAA,IAAI,CAAC,SAAS,QAAQ,CAAA;AACpB,IAAA,OAAO,EAAE,MAAA,EAAQ,CAAC,qCAAqC,CAAA,EAAG,OAAO,KAAA,EAAM;AAEzE,EAAA,MAAM,SAAmB,EAAC;AAE1B,EAAA,MAAA,CAAO,IAAA,CAAK,QAAQ,CAAA,CAAE,OAAA,CAAQ,CAAC,GAAA,KAAQ;AACrC,IAAA,IAAI,CAAC,yBAAA,CAA0B,GAAA,CAAI,GAAG,CAAA;AACpC,MAAA,MAAA,CAAO,IAAA,CAAK,CAAA,iCAAA,EAAoC,GAAG,CAAA,CAAE,CAAA;AAAA,EACzD,CAAC,CAAA;AAED,EAAA,IAAI,SAAS,MAAA,KAAW,MAAA,IAAa,CAAC,cAAA,CAAe,SAAS,MAAM,CAAA;AAClE,IAAA,MAAA,CAAO,KAAK,mCAAmC,CAAA;AACjD,EAAA,IAAI,SAAS,UAAA,KAAe,MAAA,IAAa,CAAC,cAAA,CAAe,SAAS,UAAU,CAAA;AAC1E,IAAA,MAAA,CAAO,KAAK,uCAAuC,CAAA;AACrD,EAAA,IAAI,SAAS,KAAA,KAAU,MAAA,IAAa,CAAC,cAAA,CAAe,SAAS,KAAK,CAAA;AAChE,IAAA,MAAA,CAAO,KAAK,kCAAkC,CAAA;AAChD,EAAA,IACE,SAAS,QAAA,KAAa,MAAA,IACtB,iBAAA,CAAkB,QAAA,CAAS,QAAQ,CAAA,KAAM,IAAA;AAEzC,IAAA,MAAA,CAAO,KAAK,kCAAkC,CAAA;AAEhD,EAAA,IAAI,QAAA,CAAS,mBAAmB,MAAA,EAAW;AACzC,IAAA,MAAM,KAAA,GAAQ,iBAAA,CAAkB,QAAA,CAAS,cAAc,CAAA;AACvD,IAAA,IAAI,KAAA,KAAU,QAAQ,KAAA,GAAQ,CAAA;AAC5B,MAAA,MAAA,CAAO,KAAK,qDAAqD,CAAA;AAAA,EACrE;AAEA,EAAA,MAAM,SAAA,GAAY,QAAA,CAAS,SAAA,IAAa,QAAA,CAAS,OAAA;AACjD,EAAA,IACE,SAAA,KAAc,UACd,CAAC,yBAAA,CAA0B,IAAI,MAAA,CAAO,SAAS,CAAC,CAAA,EAChD;AACA,IAAA,MAAA,CAAO,IAAA;AAAA,MACL,6BAA6B,CAAC,GAAG,yBAAyB,CAAA,CAAE,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA,KACxE;AAAA,EACF;AAEA,EAAA,IACE,SAAS,UAAA,KAAe,MAAA,IACxB,CAAC,MAAA,CAAO,MAAA,CAAgB,yBAAyB,CAAA,CAAE,QAAA;AAAA,IACjD,QAAA,CAAS;AAAA,GACX,EACA;AACA,IAAA,MAAA,CAAO,IAAA;AAAA,MACL,8BAA8B,MAAA,CAAO,MAAA,CAAO,yBAAyB,CAAA,CAAE,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA,KACnF;AAAA,EACF;AAEA,EAAA,OAAO,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,CAAO,WAAW,CAAA,EAAE;AAC9C;AAEO,SAAS,mBAAA,CACd,IAAA,EACA,GAAA,EACA,WAAA,EACkB;AAClB,EAAA,MAAM,UAAA,GAAa,WAAA,CAAY,GAAA,CAAI,IAAI,CAAA;AACvC,EAAA,MAAM,SAAmB,EAAC;AAE1B,EAAA,IAAI,CAAC,YAAY,MAAA,CAAO,IAAA,CAAK,0BAA0B,MAAA,CAAO,IAAI,CAAC,CAAA,CAAE,CAAA;AACrE,EAAA,IAAI,CAAC,eAAe,GAAG,CAAA;AACrB,IAAA,OAAO;AAAA,MACL,MAAA,EAAQ,CAAC,GAAG,MAAA,EAAQ,gCAAgC,CAAA;AAAA,MACpD,KAAA,EAAO;AAAA,KACT;AAEF,EAAA,MAAM,aAAA,GAAgB,MAAA,CAAO,GAAG,CAAA,CAAE,IAAA,EAAK;AAEvC,EAAA,IAAI,UAAA,EAAY,cAAc,WAAA,EAAa;AACzC,IAAA,MAAM,cAAc,UAAA,CAAW,YAAA;AAC/B,IAAA,IAAI,eAAe,aAAA,KAAkB,WAAA;AACnC,MAAA,MAAA,CAAO,IAAA,CAAK,CAAA,EAAG,IAAI,CAAA,aAAA,EAAgB,WAAW,CAAA,CAAE,CAAA;AAAA,EACpD,CAAA,MAAA,IAAW,UAAA,EAAY,SAAA,KAAc,MAAA,EAAQ;AAC3C,IAAA,IAAI,CAAC,aAAA,CAAc,UAAA,CAAW,GAAG,CAAA;AAC/B,MAAA,MAAA,CAAO,IAAA,CAAK,CAAA,EAAG,IAAI,CAAA,6BAAA,CAA+B,CAAA;AAAA,EACtD,CAAA,MAAA,IAAW,UAAA,EAAY,SAAA,KAAc,OAAA,EAAS;AAC5C,IAAA,IACE,CAAC,aAAA,CAAc,UAAA,CAAW,GAAG,CAAA,IAC7B,CAAC,UAAA,CAAW,YAAA,EAAc,QAAA,CAAS,aAAa,CAAA,EAChD;AACA,MAAA,MAAA,CAAO,IAAA,CAAK,CAAA,EAAG,IAAI,CAAA,iDAAA,CAAmD,CAAA;AAAA,IACxE;AAAA,EACF;AAEA,EAAA,OAAO,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,CAAO,WAAW,CAAA,EAAE;AAC9C;AAEO,SAAS,qBAAA,CACd,IAAA,EACA,GAAA,EACA,KAAA,EACA,WAAA,EACkB;AAClB,EAAA,MAAM,UAAA,GAAa,WAAA,CAAY,GAAA,CAAI,IAAI,CAAA;AACvC,EAAA,MAAM,MAAA,GAAS,CAAC,GAAG,mBAAA,CAAoB,MAAM,GAAA,EAAK,WAAW,EAAE,MAAM,CAAA;AACrE,EAAA,MAAM,SAAA,GAAY,YAAY,SAAA,IAAa,QAAA;AAE3C,EAAA,IAAI,cAAc,SAAA,KAAc,QAAA,IAAY,CAAC,aAAA,CAAc,KAAK,CAAA,EAAG;AACjE,IAAA,MAAA,CAAO,IAAA,CAAK,CAAA,EAAG,IAAI,CAAA,6BAAA,CAA+B,CAAA;AAAA,EACpD;AACA,EAAA,IACE,UAAA,IACA,cAAc,WAAA,IACd,OAAO,UAAU,UAAA,IACjB,CAAC,aAAA,CAAc,KAAK,CAAA,EACpB;AACA,IAAA,MAAA,CAAO,IAAA;AAAA,MACL,GAAG,IAAI,CAAA,wDAAA;AAAA,KACT;AAAA,EACF;AAEA,EAAA,MAAM,UAAA,GAAa,UAAA,EAAY,QAAA,GAAW,KAAK,CAAA;AAC/C,EAAA,IAAI,UAAA,IAAc,CAAC,UAAA,CAAW,KAAA,IAAS,MAAM,OAAA,CAAQ,UAAA,CAAW,MAAM,CAAA,EAAG;AACvE,IAAA,MAAA,CAAO,IAAA,CAAK,GAAG,UAAA,CAAW,MAAM,CAAA;AAAA,EAClC;AAEA,EAAA,OAAO,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,CAAO,WAAW,CAAA,EAAE;AAC9C;AAEO,SAAS,0BACd,QAAA,EACA;AAAA,EACE,qBAAA,GAAwB,IAAA;AAAA,EACxB,gBAAA,GAAmB,IAAA;AAAA,EACnB,aAAA,GAAgB;AAClB,CAAA,GAII,EAAC,EACuB;AAC5B,EAAA,MAAM,YAAA,GAAe,QAAA,CAAS,QAAQ,CAAA,GAAI,WAAW,EAAC;AAEtD,EAAA,MAAM,sBAAA,GAAyB,kBAAkB,qBAAqB,CAAA;AACtE,EAAA,MAAM,sBAAA,GACJ,sBAAA,KAA2B,IAAA,IAAQ,sBAAA,IAA0B,IACzD,sBAAA,GACA,IAAA;AACN,EAAA,MAAM,oBACJ,gBAAA,IAAoB,yBAAA,CAA0B,GAAA,CAAI,gBAAgB,IAC9D,gBAAA,GACA,IAAA;AAEN,EAAA,MAAM,MAAA,GACJ,eAAe,YAAA,CAAa,MAAM,KAClC,cAAA,CAAe,aAAA,EAAe,cAAc,CAAA,IAC5C,cAAA;AACF,EAAA,MAAM,KAAA,GAAQ,cAAA,CAAe,YAAA,CAAa,KAAK,CAAA;AAC/C,EAAA,MAAM,QAAA,GAAW,iBAAA,CAAkB,YAAA,CAAa,QAAQ,CAAA;AACxD,EAAA,MAAM,SAAA,GAAY,gBAAA,CAAiB,YAAA,EAAc,iBAAiB,CAAA;AAClE,EAAA,MAAM,aAAa,gBAAA,CAAiB,YAAA,CAAa,UAAU,CAAA,GACvD,aAAa,UAAA,GACb,IAAA;AAEJ,EAAA,MAAM,qBAAA,GAAwB,iBAAA,CAAkB,YAAA,CAAa,cAAc,CAAA;AAC3E,EAAA,IAAI,cAAA,GACF,qBAAA,KAA0B,IAAA,IAAQ,qBAAA,IAAyB,IACvD,qBAAA,GACA,sBAAA;AAEN,EAAA,IAAI,SAAA,KAAc,oBAAoB,SAAA,EAAW;AAC/C,IAAA,cAAA,GAAiB,CAAA;AAAA,EACnB,CAAA,MAAA,IAAA,CACG,cAAc,mBAAA,CAAoB,QAAA,IACjC,cAAc,mBAAA,CAAoB,KAAA,KACpC,mBAAmB,IAAA,EACnB;AACA,IAAA,cAAA,GAAiB,sBAAA;AAAA,EACnB;AAEA,EAAA,OAAO;AAAA,IACL,cAAA;AAAA,IACA,SAAA;AAAA,IACA,QAAA;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,GAAI,QAAA,KAAa,IAAA,IAAQ,EAAE,QAAA,EAAS;AAAA,MACpC,GAAI,UAAA,KAAe,yBAAA,CAA0B,MAAA,IAAU,EAAE,UAAA,EAAW;AAAA,MACpE,GAAI,KAAA,IAAS,EAAE,KAAA;AAAM,KACvB;AAAA,IACA,MAAA;AAAA,IACA,GAAI,KAAA,IAAS,EAAE,KAAA,EAAM;AAAA,IACrB,GAAI,UAAA,IAAc,EAAE,UAAA;AAAW,GACjC;AACF;AAEA,SAAS,iBAAiB,KAAA,EAAiD;AACzE,EAAA,OAAO,MAAA,CAAO,MAAA,CAAgB,yBAAyB,CAAA,CAAE,SAAS,KAAK,CAAA;AACzE;AAEO,SAAS,qBAAqB,OAAA,EAAoC;AACvE,EAAA,IAAI,CAAC,QAAA,CAAS,OAAO,CAAA,SAAU,EAAC;AAChC,EAAA,OAAO,MAAA,CAAO,WAAA;AAAA,IACZ,sBAAA,CAAuB,OAAO,CAAC,GAAA,KAAQ,QAAQ,GAAG,CAAA,KAAM,MAAS,CAAA,CAAE,GAAA;AAAA,MACjE,CAAC,GAAA,KAAQ,CAAC,GAAA,EAAK,OAAA,CAAQ,GAAG,CAAC;AAAA;AAC7B,GACF;AACF;;;ACxMA,SAAS,2BACP,WAAA,EACe;AACf,EAAA,OAAO,MAAA,CAAO,WAAA;AAAA,IACZ,KAAA,CAAM,IAAA,CAAK,WAAA,CAAY,IAAA,EAAK,EAAG,CAAC,IAAA,KAAS,CAAC,IAAA,EAAM,EAAE,CAAC;AAAA,GACrD;AACF;AAEA,SAAS,iBAAA,CAAkB;AAAA,EACzB,MAAA;AAAA,EACA,KAAA;AAAA,EACA,UAAA,GAAa,IAAA;AAAA,EACb,QAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA;AAAA,EACA,KAAA,GAAQ;AACV,CAAA,EAQiB;AACf,EAAA,OAAO;AAAA,IACL,SAAA,EAAW,SAAA;AAAA,IACX,QAAA,EAAU,MAAA,CAAO,QAAA,CAAS,QAAQ,IAAK,QAAA,GAAsB,SAAA;AAAA,IAC7D,UAAA,EAAY,OAAO,UAAA,KAAe,QAAA,GAAW,UAAA,GAAa,IAAA;AAAA,IAC1D,QAAA;AAAA,IACA,KAAA;AAAA,IACA,MAAA;AAAA,IACA;AAAA,GACF;AACF;AAEO,SAAS,eAAA,CACd,MAAA,EACA,UAAA,GAA4B,IAAA,EAC5B,QAAgB,sBAAA,EACR;AACR,EAAA,IAAI,UAAU,sBAAA,EAAwB;AACpC,IAAA,IAAI,OAAO,UAAA,KAAe,QAAA,IAAY,UAAA,CAAW,SAAS,CAAA,EAAG;AAC3D,MAAA,OAAO,YAAY,IAAA,CAAK,SAAA,CAAU,CAAC,MAAA,EAAQ,UAAU,CAAC,CAAC,CAAA,CAAA;AAAA,IACzD;AACA,IAAA,OAAO,CAAA,OAAA,EAAU,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA,CAAA;AAAA,EACzC;AACA,EAAA,IAAI,OAAO,UAAA,KAAe,QAAA,IAAY,UAAA,CAAW,SAAS,CAAA,EAAG;AAC3D,IAAA,OAAO,CAAA,SAAA,EAAY,KAAK,SAAA,CAAU,CAAC,OAAO,MAAA,EAAQ,UAAU,CAAC,CAAC,CAAA,CAAA;AAAA,EAChE;AACA,EAAA,OAAO,UAAU,IAAA,CAAK,SAAA,CAAU,CAAC,KAAA,EAAO,MAAM,CAAC,CAAC,CAAA,CAAA;AAClD;AAEA,SAAS,gBAAA,CACP,KAAA,EACA,MAAA,EACA,KAAA,GAAuB,IAAA,EAC+B;AACtD,EAAA,IAAI,CAAC,KAAA,EAAO,OAAO,EAAC;AACpB,EAAA,OAAO,MAAA,CAAO,QAAQ,KAAK,CAAA,CACxB,IAAI,CAAC,CAAC,SAAA,EAAW,SAAS,CAAA,MAAO;AAAA,IAChC,SAAA;AAAA,IACA,MAAA,EAAQ,cAAA,CAAe,SAAA,EAAW,SAAS;AAAA,IAC3C,CAAA,CACD,MAAA;AAAA,IACC,CAAC,EAAE,MAAA,EAAO,KACR,MAAA,EAAQ,WAAW,MAAA,KAAW,KAAA,KAAU,IAAA,IAAQ,MAAA,CAAO,KAAA,KAAU,KAAA;AAAA,GACrE;AACJ;AAEA,SAAS,gBACP,KAAA,EACA,MAAA,EACA,UAAA,GAA4B,IAAA,EAC5B,QAAgB,sBAAA,EACK;AACrB,EAAA,MAAM,SAAA,GAAY,eAAA,CAAgB,MAAA,EAAQ,UAAA,EAAY,KAAK,CAAA;AAC3D,EAAA,OAAO,cAAA,CAAe,KAAA,GAAQ,SAAS,CAAA,EAAG,MAAM,CAAA;AAClD;AAEA,SAAS,qBAAA,CAAsB,SAAkB,MAAA,EAAwB;AACvE,EAAA,IAAI,SAAS,OAAO,CAAA,IAAK,cAAA,CAAe,OAAA,EAAS,UAAU,CAAA,EAAG;AAC5D,IAAA,MAAM,cAAA,GAAiB,MAAA,CAAO,OAAA,CAAQ,QAAQ,CAAA;AAC9C,IAAA,IAAI,MAAA,CAAO,QAAA,CAAS,cAAc,CAAA,EAAG,OAAO,cAAA;AAAA,EAC9C;AACA,EAAA,OAAO,wBAAA,CAAyB,MAAM,CAAA,IAAK,CAAA;AAC7C;AAEA,SAAS,cAAA,CACP,QAAA,EACA,MAAA,GAAiB,cAAA,EACI;AACrB,EAAA,IAAI,QAAA,KAAa,QAAW,OAAO,IAAA;AACnC,EAAA,MAAM,SAAA,GAAY,QAAA;AAElB,EAAA,MAAM,kBACJ,QAAA,CAAS,QAAQ,KACjB,cAAA,CAAe,SAAA,EAAW,OAAO,CAAA,IACjC,cAAA,CAAe,SAAA,EAAW,WAAW,KACrC,cAAA,CAAe,SAAA,EAAW,UAAU,CAAA,IACpC,cAAA,CAAe,WAAW,QAAQ,CAAA;AAEpC,EAAA,IAAI,eAAA,EAAiB;AACnB,IAAA,MAAM,cAAA,GAAiB,MAAA,CAAO,SAAA,CAAU,QAAQ,CAAA;AAChD,IAAA,OAAO;AAAA,MACL,SAAA,EAAW,MAAA,CAAO,SAAA,CAAU,SAAS,CAAA,IAAK,CAAA;AAAA,MAC1C,QAAA,EAAU,OAAO,SAAA,CAAU,QAAQ,KAAK,MAAA,CAAO,SAAA,CAAU,SAAS,CAAA,IAAK,CAAA;AAAA,MACvE,YACE,OAAO,SAAA,CAAU,UAAA,KAAe,QAAA,GAAW,UAAU,UAAA,GAAa,IAAA;AAAA,MACpE,QAAA,EAAU,OAAO,QAAA,CAAS,cAAc,IACpC,cAAA,GACC,wBAAA,CAAyB,MAAM,CAAA,IAAK,CAAA;AAAA,MACzC,QAAQ,OAAO,SAAA,CAAU,MAAA,KAAW,QAAA,GAAW,UAAU,MAAA,GAAS,MAAA;AAAA,MAClE,OACE,OAAO,SAAA,CAAU,KAAA,KAAU,QAAA,GACvB,UAAU,KAAA,GACV,sBAAA;AAAA,MACN,OAAO,SAAA,CAAU;AAAA,KACnB;AAAA,EACF;AAEA,EAAA,OAAO;AAAA,IACL,SAAA,EAAW,CAAA;AAAA,IACX,QAAA,EAAU,CAAA;AAAA,IACV,UAAA,EAAY,IAAA;AAAA,IACZ,QAAA,EAAU,wBAAA,CAAyB,MAAM,CAAA,IAAK,CAAA;AAAA,IAC9C,MAAA;AAAA,IACA,KAAA,EAAO,sBAAA;AAAA,IACP,KAAA,EAAO;AAAA,GACT;AACF;AAEA,SAAS,cAAA,CAAe,GAAiB,CAAA,EAAyB;AAChE,EAAA,IAAI,EAAE,QAAA,KAAa,CAAA,CAAE,UAAU,OAAO,CAAA,CAAE,WAAW,CAAA,CAAE,QAAA;AACrD,EAAA,MAAM,WAAW,aAAA,CAAc,CAAA,CAAE,MAAM,CAAA,GAAI,aAAA,CAAc,EAAE,MAAM,CAAA;AACjE,EAAA,IAAI,QAAA,KAAa,GAAG,OAAO,QAAA;AAC3B,EAAA,OAAA,CAAQ,EAAE,QAAA,IAAY,CAAA,CAAE,SAAA,KAAc,CAAA,CAAE,YAAY,CAAA,CAAE,SAAA,CAAA;AACxD;AAEA,SAAS,oBAAA,CACP,YACA,UAAA,EACS;AACT,EAAA,IAAI,OAAO,EAAA,CAAG,UAAA,EAAY,OAAO,UAAA,EAAY,KAAK,GAAG,OAAO,IAAA;AAC5D,EAAA,IAAI,SAAS,UAAA,EAAY,KAAK,KAAK,QAAA,CAAS,UAAA,EAAY,KAAK,CAAA,EAAG;AAC9D,IAAA,OAAO,YAAA,CAAa,UAAA,CAAY,KAAA,EAAO,UAAA,CAAW,KAAK,CAAA;AAAA,EACzD;AACA,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,gBAAA,CACP,YACA,UAAA,EACS;AACT,EAAA,IAAI,CAAC,YAAY,OAAO,IAAA;AACxB,EAAA,OACE,WAAW,QAAA,KAAa,UAAA,CAAW,YACnC,UAAA,CAAW,MAAA,KAAW,WAAW,MAAA,IACjC,UAAA,CAAW,eAAe,UAAA,CAAW,UAAA,IACrC,WAAW,KAAA,KAAU,UAAA,CAAW,SAChC,CAAC,oBAAA,CAAqB,YAAY,UAAU,CAAA;AAEhD;AAEA,SAAS,mBAAmB,KAAA,EAA4B;AACtD,EAAA,OAAO,MAAA,CAAO,MAAA,CAAO,KAAA,IAAS,EAAE,CAAA,CAAE,IAAA;AAAA,IAChC,CAAC,cAAc,SAAA,KAAc;AAAA,GAC/B;AACF;AAEA,SAAS,eAAA,CACP,KAAA,EACA,IAAA,EACA,GAAA,EACA,QACA,MAAA,EACe;AACf,EAAA,MAAM,YAAA,GAAe,KAAA,CAAM,IAAI,CAAA,IAAK,EAAC;AACrC,EAAA,MAAM,YAAA,GAAe,YAAA,CAAa,GAAG,CAAA,IAAK,EAAC;AAC3C,EAAA,MAAM,YAAY,eAAA,CAAgB,MAAA,EAAQ,MAAA,CAAO,UAAA,EAAY,OAAO,KAAK,CAAA;AACzE,EAAA,MAAM,UAAA,GAAa,cAAA,CAAe,YAAA,CAAa,SAAS,GAAG,MAAM,CAAA;AAEjE,EAAA,IAAI,CAAC,gBAAA,CAAiB,UAAA,EAAY,MAAM,CAAA,EAAG;AACzC,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,OAAO;AAAA,IACL,GAAG,KAAA;AAAA,IACH,CAAC,IAAI,GAAG;AAAA,MACN,GAAG,YAAA;AAAA,MACH,CAAC,GAAG,GAAG;AAAA,QACL,GAAG,YAAA;AAAA,QACH,CAAC,SAAS,GAAG;AAAA;AACf;AACF,GACF;AACF;AAEA,SAAS,kBAAA,CACP,OACA,IAAA,EACA,GAAA,EACA,QACA,UAAA,GAA4B,IAAA,EAC5B,QAAuB,IAAA,EACR;AACf,EAAA,MAAM,YAAA,GAAe,MAAM,IAAI,CAAA;AAC/B,EAAA,MAAM,YAAA,GAAe,eAAe,GAAG,CAAA;AACvC,EAAA,IAAI,CAAC,YAAA,IAAgB,CAAC,YAAA,EAAc,OAAO,KAAA;AAE3C,EAAA,IAAI,gBAA+D,EAAC;AAEpE,EAAA,IACE,OAAO,UAAA,KAAe,QAAA,IACtB,WAAW,MAAA,GAAS,CAAA,IACpB,UAAU,IAAA,EACV;AACA,IAAA,MAAM,YAAY,KAAA,IAAS,sBAAA;AAC3B,IAAA,MAAM,SAAA,GAAY,eAAA,CAAgB,MAAA,EAAQ,UAAA,EAAY,SAAS,CAAA;AAC/D,IAAA,MAAM,MAAA,GAAS,eAAA,CAAgB,YAAA,EAAc,MAAA,EAAQ,YAAY,SAAS,CAAA;AAE1E,IAAA,IAAI,QAAQ,aAAA,CAAc,IAAA,CAAK,EAAE,SAAA,EAAW,QAAQ,CAAA;AAAA,EACtD,CAAA,MAAO;AACL,IAAA,aAAA,GAAgB,gBAAA,CAAiB,YAAA,EAAc,MAAA,EAAQ,KAAK,EACzD,MAAA,CAAO,CAAC,EAAE,MAAA,OAAa,CAAC,UAAA,IAAc,MAAA,EAAQ,UAAA,KAAe,UAAU,CAAA,CACvE,MAAA;AAAA,MAAO,CAAC,KAAA,KACP,OAAA,CAAQ,KAAA,CAAM,MAAM;AAAA,KACtB;AAAA,EACJ;AAEA,EAAA,IAAI,aAAA,CAAc,MAAA,KAAW,CAAA,EAAG,OAAO,KAAA;AAEvC,EAAA,MAAM,SAAA,GAAY,EAAE,GAAG,YAAA,EAAa;AACpC,EAAA,aAAA,CAAc,OAAA,CAAQ,CAAC,EAAE,SAAA,EAAU,KAAM;AACvC,IAAA,OAAO,UAAU,SAAS,CAAA;AAAA,EAC5B,CAAC,CAAA;AAED,EAAA,IAAI,CAAC,kBAAA,CAAmB,SAAS,CAAA,EAAG;AAClC,IAAA,MAAM,gBAAA,GAAmB,EAAE,GAAG,YAAA,EAAa;AAC3C,IAAA,OAAO,iBAAiB,GAAG,CAAA;AAC3B,IAAA,OAAO,EAAE,GAAG,KAAA,EAAO,CAAC,IAAI,GAAG,gBAAA,EAAiB;AAAA,EAC9C;AAEA,EAAA,OAAO;AAAA,IACL,GAAG,KAAA;AAAA,IACH,CAAC,IAAI,GAAG,EAAE,GAAG,YAAA,EAAc,CAAC,GAAG,GAAG,SAAA;AAAU,GAC9C;AACF;AAEA,SAAS,oBAAA,CACP,WAAA,EACA,IAAA,EACA,KAAA,EACA,QAAuB,IAAA,EACd;AACT,EAAA,IAAI,CAAC,OAAO,OAAO,MAAA;AAEnB,EAAA,MAAM,aAAA,GAAgB,MAAA,CAAO,OAAA,CAAQ,KAAK,EACvC,GAAA,CAAI,CAAC,CAAC,MAAA,EAAQ,SAAS,CAAA,KAAM,cAAA,CAAe,SAAA,EAAW,MAAM,CAAC,CAAA,CAC9D,MAAA;AAAA,IACC,CAAC,MAAA,KACC,MAAA,KAAW,SAAS,KAAA,KAAU,IAAA,IAAQ,OAAO,KAAA,KAAU,KAAA;AAAA,GAC3D;AAEF,EAAA,IAAI,aAAA,CAAc,MAAA,KAAW,CAAA,EAAG,OAAO,MAAA;AAEvC,EAAA,MAAM,KAAA,GAAQ,WAAA,CAAY,GAAA,CAAI,IAAI,CAAA,EAAG,KAAA;AACrC,EAAA,IAAI,KAAA,EAAO;AACT,IAAA,MAAM,gBAAgB,CAAC,GAAG,aAAa,CAAA,CAAE,KAAK,cAAc,CAAA;AAC5D,IAAA,MAAM,iBAAiB,aAAA,CAAc,KAAA;AAAA,MAAM,CAAC,MAAA,KAC1C,QAAA,CAAS,MAAA,CAAO,KAAK;AAAA,KACvB;AAEA,IAAA,IAAI,cAAA,EAAgB;AAClB,MAAA,MAAM,SAAS,aAAA,CAAc,GAAA;AAAA,QAC3B,CAAC,WAAW,MAAA,CAAO;AAAA,OACrB;AACA,MAAA,OAAO,MAAM,MAAM,CAAA;AAAA,IACrB;AACA,IAAA,OAAO,aAAA,CAAc,aAAA,CAAc,MAAA,GAAS,CAAC,CAAA,CAAE,KAAA;AAAA,EACjD;AAEA,EAAA,OAAO,aAAA,CAAc,MAAA;AAAA,IAAO,CAAC,QAAQ,OAAA,KACnC,cAAA,CAAe,SAAS,MAAM,CAAA,GAAI,IAAI,OAAA,GAAU;AAAA,GAClD,CAAE,KAAA;AACJ;AAEA,SAAS,uBACP,WAAA,EACqE;AACrE,EAAA,MAAM,UAAA,uBAAiB,OAAA,EAAsC;AAE7D,EAAA,OAAO,CAAC,IAAA,EAAc,KAAA,EAAmB,KAAA,GAAuB,IAAA,KAAS;AACvE,IAAA,IAAI,CAAC,KAAA,IAAS,OAAO,KAAA,KAAU,QAAA,EAAU;AACvC,MAAA,OAAO,oBAAA,CAAqB,WAAA,EAAa,IAAA,EAAM,KAAA,EAAO,KAAK,CAAA;AAAA,IAC7D;AAEA,IAAA,IAAI,SAAA,GAAY,UAAA,CAAW,GAAA,CAAI,KAAK,CAAA;AACpC,IAAA,IAAI,CAAC,SAAA,EAAW;AACd,MAAA,SAAA,uBAAgB,GAAA,EAAI;AACpB,MAAA,UAAA,CAAW,GAAA,CAAI,OAAO,SAAS,CAAA;AAAA,IACjC;AAEA,IAAA,MAAM,WAAW,KAAA,IAAS,SAAA;AAE1B,IAAA,IAAI,UAAU,GAAA,CAAI,QAAQ,GAAG,OAAO,SAAA,CAAU,IAAI,QAAQ,CAAA;AAE1D,IAAA,MAAM,KAAA,GAAQ,oBAAA,CAAqB,WAAA,EAAa,IAAA,EAAM,OAAO,KAAK,CAAA;AAClE,IAAA,SAAA,CAAU,GAAA,CAAI,UAAU,KAAK,CAAA;AAC7B,IAAA,OAAO,KAAA;AAAA,EACT,CAAA;AACF;AAEO,SAAS,uBAAA,CACd,MACA,GAAA,EACA,IAAA,EACA,iBACA,UAAA,EACA,SAAA,EACA,WAAmB,SAAA,EACA;AACnB,EAAA,MAAM,EAAE,MAAA,EAAQ,OAAA,EAAQ,GAAI,oBAAA,CAAqB,iBAAiB,UAAU,CAAA;AAC5E,EAAA,MAAM,UAAA,GAAa,kBAAkB,OAAO,CAAA;AAC5C,EAAA,MAAM,KAAA,GAAQ,aAAa,OAAO,CAAA;AAElC,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,UAAA;AAAA,IACN,YAAY,OAAA,CAAQ,UAAA;AAAA,IACpB,MAAA;AAAA,IACA,KAAA;AAAA,IACA,QAAQ,iBAAA,CAAkB;AAAA,MACxB,MAAA;AAAA,MACA,KAAA,EAAO,IAAA;AAAA,MACP,UAAA;AAAA,MACA,QAAA,EAAU,qBAAA,CAAsB,OAAA,EAAS,MAAM,CAAA;AAAA,MAC/C,KAAA;AAAA,MACA,SAAA;AAAA,MACA;AAAA,KACD,CAAA;AAAA,IACD,UAAA;AAAA,IACA,IAAA;AAAA,IACA,KAAK,OAAO,GAAA,KAAQ,QAAA,GAAW,GAAA,CAAI,MAAK,GAAI;AAAA,GAC9C;AACF;AAEO,SAAS,yBAAA,CACd,IAAA,EACA,GAAA,EACA,eAAA,EACqB;AACrB,EAAA,MAAM,EAAE,KAAA,EAAO,MAAA,EAAQ,UAAA,EAAW,GAAI,uBAAuB,eAAe,CAAA;AAC5E,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,YAAA;AAAA,IACN,UAAA;AAAA,IACA,KAAA;AAAA,IACA,MAAA;AAAA,IACA,IAAA;AAAA,IACA,KAAK,OAAO,GAAA,KAAQ,QAAA,GAAW,GAAA,CAAI,MAAK,GAAI;AAAA,GAC9C;AACF;AAEA,SAAS,wBAAA,CACP,WAAA,EACA,IAAA,EACA,GAAA,EACS;AACT,EAAA,OAAO,mBAAA,CAAoB,IAAA,EAAM,GAAA,EAAK,WAAW,CAAA,CAAE,KAAA;AACrD;AAEA,SAAS,iBAAA,CACP,WAAA,EACA,KAAA,EACA,SAAA,EACe;AACf,EAAA,IAAI,CAAC,wBAAA,CAAyB,WAAA,EAAa,SAAA,EAAW,IAAA,EAAM,WAAW,GAAG,CAAA;AACxE,IAAA,OAAO,KAAA;AAET,EAAA,IAAI,SAAA,CAAU,SAAS,UAAA,EAAY;AACjC,IAAA,OAAO,eAAA;AAAA,MACL,KAAA;AAAA,MACA,SAAA,CAAU,IAAA;AAAA,MACV,SAAA,CAAU,GAAA;AAAA,MACV,SAAA,CAAU,MAAA;AAAA,MACV,SAAA,CAAU;AAAA,KACZ;AAAA,EACF;AACA,EAAA,IAAI,SAAA,CAAU,SAAS,YAAA,EAAc;AACnC,IAAA,OAAO,kBAAA;AAAA,MACL,KAAA;AAAA,MACA,SAAA,CAAU,IAAA;AAAA,MACV,SAAA,CAAU,GAAA;AAAA,MACV,SAAA,CAAU,MAAA;AAAA,MACV,SAAA,CAAU,UAAA;AAAA,MACV,SAAA,CAAU;AAAA,KACZ;AAAA,EACF;AACA,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,qBAAA,CACP,WAAA,EACA,KAAA,EACA,SAAA,EACS;AACT,EAAA,IAAI,CAAC,wBAAA,CAAyB,WAAA,EAAa,SAAA,EAAW,IAAA,EAAM,WAAW,GAAG,CAAA;AACxE,IAAA,OAAO,KAAA;AAET,EAAA,IAAI,SAAA,CAAU,SAAS,UAAA,EAAY;AACjC,IAAA,MAAM,aAAA,GAAgB,eAAA;AAAA,MACpB,KAAA,CAAM,SAAA,CAAU,IAAI,CAAA,GAAI,UAAU,GAAG,CAAA;AAAA,MACrC,SAAA,CAAU,MAAA;AAAA,MACV,SAAA,CAAU,UAAA;AAAA,MACV,SAAA,CAAU;AAAA,KACZ;AACA,IAAA,OAAO,gBAAA,CAAiB,aAAA,EAAe,SAAA,CAAU,MAAM,CAAA;AAAA,EACzD;AAEA,EAAA,IAAI,SAAA,CAAU,SAAS,YAAA,EAAc;AACnC,IAAA,MAAM,QAAQ,KAAA,CAAM,SAAA,CAAU,IAAI,CAAA,GAAI,UAAU,GAAG,CAAA;AACnD,IAAA,IACE,OAAO,SAAA,CAAU,UAAA,KAAe,YAChC,SAAA,CAAU,UAAA,CAAW,SAAS,CAAA,EAC9B;AACA,MAAA,OAAO,UAAU,KAAA,KAAU,IAAA,GACvB,iBAAiB,KAAA,EAAO,SAAA,CAAU,MAAM,CAAA,CAAE,IAAA;AAAA,QACxC,CAAC,EAAE,MAAA,EAAO,KAAM,MAAA,EAAQ,eAAe,SAAA,CAAU;AAAA,OACnD,GACA,OAAA;AAAA,QACE,eAAA;AAAA,UACE,KAAA;AAAA,UACA,SAAA,CAAU,MAAA;AAAA,UACV,SAAA,CAAU,UAAA;AAAA,UACV,SAAA,CAAU;AAAA;AACZ,OACF;AAAA,IACN;AACA,IAAA,OACE,iBAAiB,KAAA,EAAO,SAAA,CAAU,QAAQ,SAAA,CAAU,KAAK,EAAE,MAAA,GAAS,CAAA;AAAA,EAExE;AACA,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,6BAAA,CACP,WAAA,EACA,KAAA,EACA,UAAA,EACwE;AACxE,EAAA,MAAM,sBAA2C,EAAC;AAClD,EAAA,IAAI,SAAA,GAAY,KAAA;AAEhB,EAAA,UAAA,CAAW,OAAA,CAAQ,CAAC,SAAA,KAAc;AAChC,IAAA,IAAI,CAAC,qBAAA,CAAsB,WAAA,EAAa,SAAA,EAAW,SAAS,CAAA,EAAG;AAC/D,IAAA,mBAAA,CAAoB,KAAK,SAAS,CAAA;AAClC,IAAA,SAAA,GAAY,iBAAA,CAAkB,WAAA,EAAa,SAAA,EAAW,SAAS,CAAA;AAAA,EACjE,CAAC,CAAA;AAED,EAAA,OAAO,EAAE,qBAAqB,SAAA,EAAU;AAC1C;AAEO,SAAS,yBAAyB,WAAA,EAAkC;AACzE,EAAA,OAAO,OAAO,MAAA,CAAO;AAAA,IACnB,gBAAgB,CAAC,KAAA,EAAsB,cACrC,iBAAA,CAAkB,WAAA,EAAa,OAAO,SAAS,CAAA;AAAA,IACjD,uBAAA,EAAyB,MAAM,0BAAA,CAA2B,WAAW,CAAA;AAAA,IACrE,mBAAA,EAAqB,MAAM,sBAAA,CAAuB,WAAW,CAAA;AAAA,IAC7D,oBAAoB,CAAC,KAAA,EAAsB,cACzC,qBAAA,CAAsB,WAAA,EAAa,OAAO,SAAS,CAAA;AAAA,IACrD,gBAAgB,CAAC,IAAA,KAAiB,WAAA,CAAY,GAAA,CAAI,IAAI,CAAA,KAAM,MAAA;AAAA,IAC5D,uBAAuB,CAAC,IAAA,EAAc,QACpC,wBAAA,CAAyB,WAAA,EAAa,MAAM,GAAG,CAAA;AAAA,IACjD,4BAA4B,CAC1B,KAAA,EACA,eACG,6BAAA,CAA8B,WAAA,EAAa,OAAO,UAAU,CAAA;AAAA,IACjE,iBAAA,EAAmB,CACjB,IAAA,EACA,KAAA,EACA,KAAA,GAAuB,SACpB,oBAAA,CAAqB,WAAA,EAAa,IAAA,EAAM,KAAA,EAAO,KAAK;AAAA,GAC1D,CAAA;AACH;;;ACldO,SAAS,yBAAA,CACd,KAAA,EACA,QAAA,GAAqE,EAAC,EACjD;AACrB,EAAA,MAAM,aAAgC,EAAC;AACvC,EAAA,IAAI,MAAA,GAA4B,MAAA;AAChC,EAAA,MAAM,OAAA,GACJ,SAAS,OAAA,IACT,CAAA,GAAA,EAAM,KAAK,GAAA,EAAI,CAAE,SAAS,EAAE,CAAC,IAAI,IAAA,CAAK,MAAA,GAAS,QAAA,CAAS,EAAE,EAAE,KAAA,CAAM,CAAA,EAAG,CAAC,CAAC,CAAA,CAAA;AAEzE,EAAA,MAAM,UAAA,GAAa,MAAM,MAAA,KAAW,MAAA;AAEpC,EAAA,MAAM,YAAA,GAAe,CACnB,OAAA,KACqB;AACrB,IAAA,MAAM,WAAW,OAAA,IAAW,OAAO,OAAA,KAAY,QAAA,GAAW,UAAU,EAAC;AACrE,IAAA,MAAM,WAAA,GAAc,QAAA,CAAS,MAAA,IAAU,CAAC,QAAA,CAAS,MAAA;AACjD,IAAA,MAAM,UAAA,GAAa,QAAA,CAAS,KAAA,IAAS,CAAC,QAAA,CAAS,KAAA;AAE/C,IAAA,IAAI,CAAC,WAAA,IAAe,CAAC,UAAA,EAAY,OAAO,QAAA;AAExC,IAAA,OAAO;AAAA,MACL,GAAG,QAAA;AAAA,MACH,GAAI,WAAA,GAAc,EAAE,QAAQ,QAAA,CAAS,MAAA,KAAW,EAAC;AAAA,MACjD,GAAI,UAAA,GAAa,EAAE,OAAO,QAAA,CAAS,KAAA,KAAU;AAAC,KAChD;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,WAAiD,CACrD,IAAA,EACA,GAAA,EACA,KAAA,EACA,iBACA,UAAA,KACG;AACH,IAAA,IAAI,CAAC,YAAW,EAAG,OAAO,EAAE,KAAA,EAAO,EAAA,EAAI,QAAQ,OAAA,EAAQ;AAEvD,IAAA,MAAM,OAAA,GACJ,OAAO,eAAA,KAAoB,QAAA,GACvB,aAAa,EAAE,GAAI,UAAA,IAAc,IAAK,MAAA,EAAQ,eAAA,EAAiB,CAAA,GAC/D,aAAa,eAA+C,CAAA;AAElE,IAAA,UAAA,CAAW,KAAK,EAAE,GAAA,EAAK,MAAM,KAAA,EAAO,OAAA,EAAS,MAAM,CAAA;AACnD,IAAA,OAAO,EAAE,KAAA,EAAO,UAAA,CAAW,SAAS,CAAA,EAAG,MAAA,EAAQ,UAAU,OAAA,EAAQ;AAAA,EACnE,CAAA;AAEA,EAAA,MAAM,UAAA,GAAqD,CACzD,IAAA,EACA,GAAA,EACA,eAAA,KACG;AACH,IAAA,IAAI,CAAC,YAAW,EAAG,OAAO,EAAE,KAAA,EAAO,EAAA,EAAI,QAAQ,OAAA,EAAQ;AAEvD,IAAA,MAAM,OAAA,GAAU,YAAA;AAAA,MACd,OAAO,eAAA,KAAoB,QAAA,GACvB,EAAE,MAAA,EAAQ,iBAAgB,GACzB;AAAA,KACP;AAEA,IAAA,UAAA,CAAW,KAAK,EAAE,GAAA,EAAK,SAAS,IAAA,EAAM,UAAA,EAAY,MAAM,CAAA;AACxD,IAAA,OAAO,EAAE,KAAA,EAAO,UAAA,CAAW,SAAS,CAAA,EAAG,MAAA,EAAQ,UAAU,OAAA,EAAQ;AAAA,EACnE,CAAA;AAEA,EAAA,MAAM,QAAA,GAAW,CAAC,OAAA,GAAU,QAAA,KAAqC;AAC/D,IAAA,IAAI,CAAC,YAAW,EAAG,OAAO,EAAE,KAAA,EAAO,EAAA,EAAI,QAAQ,OAAA,EAAQ;AAEvD,IAAA,MAAA,GAAS,aAAA;AACT,IAAA,UAAA,CAAW,MAAA,GAAS,CAAA;AACpB,IAAA,OAAO,EAAE,KAAA,EAAO,EAAA,EAAI,MAAA,EAAQ,OAAA,EAAQ;AAAA,EACtC,CAAA;AAEA,EAAA,MAAM,SAAS,MAAiC;AAC9C,IAAA,IAAI,CAAC,UAAA,EAAW,EAAG,OAAO,EAAE,QAAQ,OAAA,EAAQ;AAE5C,IAAA,MAAA,GAAS,WAAA;AACT,IAAA,MAAM,MAAA,GAAS,KAAA,CAAM,KAAA,CAAM,CAAC,KAAA,KAAU;AACpC,MAAA,UAAA,CAAW,OAAA,CAAQ,CAAC,EAAA,KAAO;AACzB,QAAA,IAAI,EAAA,CAAG,YAAY,KAAA,CAAM,UAAA,CAAW,GAAG,IAAA,EAAM,EAAA,CAAG,GAAA,EAAK,EAAA,CAAG,OAAO,CAAA;AAAA,aAC1D,KAAA,CAAM,SAAS,EAAA,CAAG,IAAA,EAAM,GAAG,GAAA,EAAK,EAAA,CAAG,IAAA,EAAM,EAAA,CAAG,OAAO,CAAA;AAAA,MAC1D,CAAC,CAAA;AAAA,IACH,CAAC,CAAA;AAED,IAAA,MAAM,OAAA,GACJ,OAAO,MAAA,KAAW,QAAA,IAAY,OAAO,QAAA,CAAS,MAAM,IAAI,MAAA,GAAS,CAAA;AACnE,IAAA,OAAO,EAAE,OAAA,EAAS,MAAA,EAAQ,UAAA,CAAW,MAAA,EAAQ,QAAQ,OAAA,EAAQ;AAAA,EAC/D,CAAA;AAEA,EAAA,MAAM,GAAA,GAAM,CACV,QAAA,KAC8B;AAC9B,IAAA,IAAI,OAAO,aAAa,UAAA,EAAY;AAClC,MAAA,QAAA,CAAS,kBAAkB,CAAA;AAC3B,MAAA,OAAO,EAAE,QAAQ,OAAA,EAAQ;AAAA,IAC3B;AACA,IAAA,IAAI;AACF,MAAA,QAAA,CAAS,EAAE,QAAA,EAAU,UAAA,EAAY,CAAA;AACjC,MAAA,OAAO,MAAA,EAAO;AAAA,IAChB,SAAS,KAAA,EAAO;AACd,MAAA,QAAA,CAAS,iBAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,MAAA,CAAO,KAAK,CAAC,CAAA;AAC/D,MAAA,MAAM,KAAA;AAAA,IACR;AAAA,EACF,CAAA;AAEA,EAAA,OAAO;AAAA,IACL,MAAA;AAAA,IACA,IAAI,UAAA,GAAa;AACf,MAAA,OAAO,WAAW,KAAA,EAAM;AAAA,IAC1B,CAAA;AAAA,IACA,QAAA;AAAA,IACA,QAAA;AAAA,IACA,GAAA;AAAA,IACA,IAAI,MAAA,GAAS;AACX,MAAA,OAAO,MAAA;AAAA,IACT,CAAA;AAAA,IACA,OAAA;AAAA,IACA;AAAA,GACF;AACF;;;AC/HA,IAAM,cAAA,uBAA0C,GAAA,EAAI;AAEpD,SAAS,gBAAA,CACP,MAAA,GAAuC,UAAA,EACvC,MAAA,GAAS,SAAA,EACW;AACpB,EAAA,MAAM,MAAA,GAA6B,MAAA,CAAO,MAAA,CAAO,MAAM,KAAA,EAAO;AAAA,IAC5D,MAAA,EAAQ,KAAA;AAAA,IACR,SAAS,MAAM,KAAA;AAAA,IACf,UAAA,EAAY,IAAA;AAAA,IACZ,GAAA,EAAK,EAAA;AAAA,IACL,QAAA,EAAU,CAAA;AAAA,IACV,MAAA;AAAA,IACA,MAAA,EAAQ,EAAA;AAAA,IACR,MAAA;AAAA,IACA,IAAA,EAAM,EAAA;AAAA,IACN,QAAQ,MAA0B,MAAA;AAAA,IAClC,SAAA,EAAW,CAAA;AAAA,IACX,UAAA,EAAY;AAAA,GACb,CAAA;AACD,EAAA,OAAO,MAAA;AACT;AAEA,IAAM,cAAkC,gBAAA,EAAiB;AAEzD,SAAS,aAAa,MAAA,EAAwD;AAC5E,EAAA,OACE,WAAW,WAAA,IACX,MAAA,EAAQ,MAAA,KAAW,UAAA,IACnB,QAAQ,MAAA,KAAW,SAAA;AAEvB;AAEA,SAAS,kBAAA,CACP,KAAA,EACA,IAAA,mBAAO,IAAI,SAAyB,EACjC;AACH,EAAA,IAAI,UAAU,IAAA,IAAQ,OAAO,UAAU,QAAA,IAAY,cAAA,CAAe,KAAK,CAAA,EAAG;AACxE,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,MAAM,SAAA,GAAY,MAAA,CAAO,cAAA,CAAe,KAAK,CAAA;AAC7C,EAAA,MAAMA,cAAAA,GACJ,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,KACnB,SAAA,KAAc,MAAA,CAAO,SAAA,IAAa,SAAA,KAAc,IAAA,CAAA;AAEnD,EAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,IAAK,CAACA,gBAAe,OAAO,KAAA;AACpD,EAAA,IAAI,KAAK,GAAA,CAAI,KAAK,GAAG,OAAO,IAAA,CAAK,IAAI,KAAK,CAAA;AAE1C,EAAA,MAAM,MAAA,GAAS,KAAA;AACf,EAAA,MAAM,QAAS,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,GAAI,KAAK,EAAC;AAC5C,EAAA,IAAA,CAAK,GAAA,CAAI,OAAO,KAAK,CAAA;AAErB,EAAA,KAAA,MAAW,OAAO,MAAA,EAAQ;AACxB,IAAA,IAAI,OAAO,SAAA,CAAU,cAAA,CAAe,IAAA,CAAK,MAAA,EAAQ,GAAG,CAAA,EAAG;AACrD,MAAA,KAAA,CAAM,GAAG,CAAA,GAAI,kBAAA,CAAmB,MAAA,CAAO,GAAG,GAAG,IAAI,CAAA;AAAA,IACnD;AAAA,EACF;AAEA,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,wBAAwB,OAAA,EAAsC;AACrE,EAAA,OAAA,CAAQ,MAAM,OAAA,CAAQ,OAAO,CAAA,GAAI,OAAA,GAAU,EAAC,EAAG,MAAA;AAAA,IAC7C,CAAC,UACC,KAAA,EAAO,IAAA,IAAQ,OAAO,KAAA,IAAS,OAAO,MAAM,KAAA,KAAU;AAAA,GAC1D;AACF;AAEA,SAAS,kBAAA,CACP,GAAA,EACA,WAAA,EACA,OAAA,EACe;AACf,EAAA,MAAM,iBAAA,GAAoB,wBAAwB,OAAO,CAAA;AACzD,EAAA,IAAI,iBAAA,CAAkB,MAAA,KAAW,CAAA,EAAG,OAAO,IAAI,uBAAA,EAAwB;AAEvE,EAAA,MAAM,SAAA,GAAY,KAAK,GAAA,EAAI;AAC3B,EAAA,IAAI,QAAA,GAAW,CAAA;AACf,EAAA,IAAI,KAAA,GAAQ,IAAI,uBAAA,EAAwB;AAExC,EAAA,iBAAA,CAAkB,OAAA,CAAQ,CAAC,KAAA,KAAU;AACnC,IAAA,MAAM,MAAA,GAAS,KAAA,CAAM,MAAA,IAAU,gBAAA,CAAiB,MAAA;AAChD,IAAA,MAAM,OAAA,GAA4B;AAAA,MAChC,GAAI,KAAA,CAAM,OAAA,IAAW,EAAC;AAAA,MACtB,UAAA,EACE,KAAA,CAAM,UAAA,IAAc,KAAA,CAAM,SAAS,UAAA,IAAc;AAAA,KACrD;AAEA,IAAA,MAAA,CAAO,OAAA,CAAQ,MAAM,KAAK,CAAA,CAAE,QAAQ,CAAC,CAAC,GAAA,EAAK,KAAK,CAAA,KAAM;AACpD,MAAA,MAAM,UAAA,GAAa,oBAAA;AAAA,QACjB,WAAA;AAAA,QACA,KAAA,CAAM,IAAA;AAAA,QACN,GAAA;AAAA,QACA,KAAA;AAAA,QACA,MAAA;AAAA,QACA;AAAA,OACF;AACA,MAAA,IAAI,CAAC,WAAW,KAAA,EAAO;AAEvB,MAAA,MAAM,SAAA,GAAY,uBAAA;AAAA,QAChB,KAAA,CAAM,IAAA;AAAA,QACN,GAAA;AAAA,QACA,mBAAmB,KAAK,CAAA;AAAA,QACxB,MAAA;AAAA,QACA,OAAA;AAAA,QACA,SAAA;AAAA,QACA,EAAE;AAAA,OACJ;AACA,MAAA,IAAI,GAAA,CAAI,kBAAA,CAAmB,KAAA,EAAO,SAAS,CAAA,EAAG;AAC5C,QAAA,KAAA,GAAQ,GAAA,CAAI,cAAA,CAAe,KAAA,EAAO,SAAS,CAAA;AAAA,MAC7C;AAAA,IACF,CAAC,CAAA;AAAA,EACH,CAAC,CAAA;AACD,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,gBAAgB,SAAA,EAA8C;AACrE,EAAA,IAAI,CAAC,SAAA,EAAW;AAChB,EAAA,KAAA,MAAW,YAAY,SAAA,EAAW;AAChC,IAAA,IAAI;AACF,MAAA,QAAA,EAAS;AAAA,IACX,SAAS,KAAA,EAAO;AACd,MAAA,MAAA,CAAO,qBAAqB,KAAK,CAAA;AAAA,IACnC;AAAA,EACF;AACF;AAEA,SAAS,uBAAA,CACP,eAAA,EACA,IAAA,EACA,GAAA,EACiB;AACjB,EAAA,IAAI,SAAA,GAAY,eAAA,CAAgB,GAAA,CAAI,IAAI,CAAA;AACxC,EAAA,IAAI,CAAC,SAAA,EAAW;AACd,IAAA,SAAA,uBAAgB,GAAA,EAAI;AACpB,IAAA,eAAA,CAAgB,GAAA,CAAI,MAAM,SAAS,CAAA;AAAA,EACrC;AACA,EAAA,IAAI,YAAA,GAAe,SAAA,CAAU,GAAA,CAAI,GAAG,CAAA;AACpC,EAAA,IAAI,CAAC,YAAA,EAAc;AACjB,IAAA,YAAA,uBAAmB,GAAA,EAAI;AACvB,IAAA,SAAA,CAAU,GAAA,CAAI,KAAK,YAAY,CAAA;AAAA,EACjC;AACA,EAAA,OAAO,YAAA;AACT;AAEA,SAAS,0BAAA,CACP,iBACA,UAAA,EACkB;AAClB,EAAA,IAAI,eAAA,IAAmB,OAAO,eAAA,KAAoB,QAAA;AAChD,IAAA,OAAO,eAAA;AACT,EAAA,OAAO,UAAA,IAAc,OAAO,UAAA,KAAe,QAAA,GAAW,aAAa,EAAC;AACtE;AAEA,SAAS,qBACP,WAAA,EACA,IAAA,EACA,GAAA,EACA,KAAA,EACA,iBACA,UAAA,EACwD;AACxD,EAAA,MAAM,OAAA,GAAU,0BAAA,CAA2B,eAAA,EAAiB,UAAU,CAAA;AACtE,EAAA,MAAM,kBAAA,GAAqB,yBAAyB,OAAO,CAAA;AAC3D,EAAA,MAAM,QAAA,GAAW,OAAA,CAAQ,UAAA,KAAe,yBAAA,CAA0B,MAAA;AAElE,EAAA,IAAI,CAAC,kBAAA,CAAmB,KAAA,IAAS,QAAA,EAAU;AACzC,IAAA,OAAO;AAAA,MACL,QAAQ,kBAAA,CAAmB,MAAA;AAAA,MAC3B,MAAA,EAAQ,kBAAA;AAAA,MACR,KAAA,EAAO;AAAA,KACT;AAAA,EACF;AAEA,EAAA,MAAM,UAAA,GAAa,qBAAA,CAAsB,IAAA,EAAM,GAAA,EAAK,OAAO,WAAW,CAAA;AACtE,EAAA,IAAI,UAAA,CAAW,KAAA,EAAO,OAAO,EAAE,OAAO,IAAA,EAAK;AAE3C,EAAA,IAAI,CAAC,QAAA,EAAU;AACb,IAAA,MAAA,CAAO,YAAY,IAAI,CAAA,EAAA,EAAK,GAAG,CAAA,YAAA,CAAA,EAAgB,UAAA,CAAW,QAAQ,MAAM,CAAA;AAAA,EAC1E;AAEA,EAAA,OAAO;AAAA,IACL,QAAQ,UAAA,CAAW,MAAA;AAAA,IACnB,MAAA,EAAQ,eAAA;AAAA,IACR,OAAO,CAAC;AAAA,GACV;AACF;AAEA,SAAS,wBAAA,CACP,OACA,SAAA,EACoB;AACpB,EAAA,IAAI,QAAA,GAAW,KAAA;AACf,EAAA,MAAM,OAAA,GAAU,CAAC,MAAA,GAAS,QAAA,KAAa;AACrC,IAAA,IAAI,UAAU,OAAO,KAAA;AACrB,IAAA,QAAA,GAAW,IAAA;AACX,IAAA,OAAO,KAAA,CAAM,OAAA,CAAQ,SAAA,EAAW,MAAM,CAAA;AAAA,EACxC,CAAA;AAEA,EAAA,MAAM,MAAA,IAAU,CAAC,MAAA,KAAoB,OAAA,CAAQ,MAAM,CAAA,CAAA;AACnD,EAAA,MAAA,CAAO,OAAA,GAAU,OAAA;AAEjB,EAAA,MAAA,CAAO,MAAA,GAAS,CAAC,KAAA,EAAgB,OAAA,GAA4B,EAAC,KAAM;AAClE,IAAA,IAAI,YAAY,CAAC,KAAA,CAAM,SAAA,CAAU,SAAS,GAAG,OAAO,WAAA;AACpD,IAAA,MAAM,aAAa,KAAA,CAAM,QAAA;AAAA,MACvB,SAAA,CAAU,IAAA;AAAA,MACV,SAAA,CAAU,GAAA;AAAA,MACV,KAAA;AAAA,MACA,SAAA,CAAU,MAAA;AAAA,MACV;AAAA,QACE,GAAI,OAAO,OAAA,KAAY,QAAA,GAAW,UAAU,EAAC;AAAA,QAC7C,YAAY,SAAA,CAAU,UAAA;AAAA,QACtB,QAAA,EAAU,UAAU,MAAA,CAAO,QAAA;AAAA,QAC3B,GAAI,UAAU,KAAA,GAAQ,EAAE,OAAO,SAAA,CAAU,KAAA,KAAU,EAAC;AAAA,QACpD,GAAI,UAAU,UAAA,GAAa,EAAE,YAAY,SAAA,CAAU,UAAA,KAAe;AAAC;AACrE,KACF;AACA,IAAA,IAAI,YAAA,CAAa,UAAU,CAAA,EAAG,OAAO,MAAA;AACrC,IAAA,QAAA,GAAW,IAAA;AACX,IAAA,OAAO,UAAA;AAAA,EACT,CAAA;AAEA,EAAA,MAAA,CAAO,iBAAiB,MAAA,EAAQ;AAAA,IAC9B,MAAA,EAAQ;AAAA,MACN,UAAA,EAAY,IAAA;AAAA,MACZ,KAAK,MAAM,CAAC,QAAA,IAAY,KAAA,CAAM,UAAU,SAAS;AAAA,KACnD;AAAA,IACA,YAAY,EAAE,UAAA,EAAY,IAAA,EAAM,KAAA,EAAO,UAAU,UAAA,EAAW;AAAA,IAC5D,KAAK,EAAE,UAAA,EAAY,IAAA,EAAM,KAAA,EAAO,UAAU,GAAA,EAAI;AAAA,IAC9C,UAAU,EAAE,UAAA,EAAY,MAAM,KAAA,EAAO,SAAA,CAAU,OAAO,QAAA,EAAS;AAAA,IAC/D,QAAQ,EAAE,UAAA,EAAY,IAAA,EAAM,KAAA,EAAO,UAAU,MAAA,EAAO;AAAA,IACpD,MAAA,EAAQ;AAAA,MACN,UAAA,EAAY,IAAA;AAAA,MACZ,GAAA,EAAK,MACH,QAAA,GACI,UAAA,GACA,MAAM,SAAA,CAAU,SAAS,IACvB,QAAA,GACA;AAAA,KACV;AAAA,IACA,MAAM,EAAE,UAAA,EAAY,IAAA,EAAM,KAAA,EAAO,UAAU,IAAA,EAAK;AAAA,IAChD,WAAW,EAAE,UAAA,EAAY,MAAM,KAAA,EAAO,SAAA,CAAU,OAAO,SAAA,EAAU;AAAA,IACjE,YAAY,EAAE,UAAA,EAAY,MAAM,KAAA,EAAO,SAAA,CAAU,cAAc,MAAA;AAAO,GACvE,CAAA;AAED,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,wBAAA,CACP,KACA,WAAA,EACA,IAAA,EACA,KACA,IAAA,EACA,eAAA,EACA,UAAA,EACA,SAAA,EACA,QAAA,EACqE;AACrE,EAAA,IAAI,CAAC,GAAA,CAAI,qBAAA,CAAsB,IAAA,EAAM,GAAG,CAAA,EAAG;AACzC,IAAA,OAAO,EAAE,QAAA,EAAU,gBAAA,CAAiB,UAAA,EAAY,gBAAgB,CAAA,EAAE;AAAA,EACpE;AAEA,EAAA,MAAM,UAAA,GAAa,oBAAA;AAAA,IACjB,WAAA;AAAA,IACA,IAAA;AAAA,IACA,GAAA;AAAA,IACA,IAAA;AAAA,IACA,eAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,IAAI,CAAC,WAAW,KAAA,EAAO;AACrB,IAAA,OAAO,EAAE,QAAA,EAAU,gBAAA,CAAiB,UAAA,EAAY,UAAA,CAAW,MAAM,CAAA,EAAE;AAAA,EACrE;AAEA,EAAA,OAAO;AAAA,IACL,SAAA,EAAW,uBAAA;AAAA,MACT,IAAA;AAAA,MACA,GAAA;AAAA,MACA,mBAAmB,IAAI,CAAA;AAAA,MACvB,eAAA;AAAA,MACA,UAAA;AAAA,MACA,SAAA;AAAA,MACA;AAAA;AACF,GACF;AACF;AAEO,SAAS,mBAAA,CACd,cAAA,GAAyC,EAAC,EAC1C,cAAmC,cAAA,EACpB;AACf,EAAA,MAAM,GAAA,GAAM,yBAAyB,WAAW,CAAA;AAChD,EAAA,IAAI,UAAA,GAAa,kBAAA,CAAmB,GAAA,EAAK,WAAA,EAAa,cAAc,CAAA;AACpE,EAAA,IAAI,QAAA,GAAW,uBAAA,CAAwB,cAAc,CAAA,CAAE,MAAA;AAAA,IACrD,CAAC,OAAO,KAAA,KAAU,KAAA,GAAQ,OAAO,IAAA,CAAK,KAAA,CAAM,KAAK,CAAA,CAAE,MAAA;AAAA,IACnD;AAAA,GACF;AAEA,EAAA,MAAM,eAAA,uBAAsB,GAAA,EAG1B;AACF,EAAA,MAAM,cAAA,uBAAqB,GAAA,EAMzB;AACF,EAAA,MAAM,cAAA,uBAAqB,GAAA,EAMzB;AACF,EAAA,MAAM,kBAAA,GAAqB,IAAI,mBAAA,EAAoB;AAEnD,EAAA,MAAM,SAAA,GAAY,CAChB,IAAA,EACA,GAAA,EACA,QAAA,KACG;AACH,IAAA,MAAM,YAAA,GAAe,uBAAA;AAAA,MACnB,eAAA;AAAA,MACA,IAAA;AAAA,MACA,GAAA,IAAO;AAAA,KACT;AACA,IAAA,YAAA,CAAa,IAAI,QAAQ,CAAA;AAEzB,IAAA,OAAO,MAAM;AACX,MAAA,YAAA,CAAa,OAAO,QAAQ,CAAA;AAC5B,MAAA,IAAI,YAAA,CAAa,OAAO,CAAA,EAAG;AAE3B,MAAA,MAAM,SAAA,GAAY,eAAA,CAAgB,GAAA,CAAI,IAAI,CAAA;AAC1C,MAAA,IAAI,SAAA,EAAW;AACb,QAAA,SAAA,CAAU,MAAA,CAAO,OAAO,IAAI,CAAA;AAC5B,QAAA,IAAI,SAAA,CAAU,IAAA,KAAS,CAAA,EAAG,eAAA,CAAgB,OAAO,IAAI,CAAA;AAAA,MACvD;AAAA,IACF,CAAA;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,MAAA,GAAS,CACb,SAAA,EACA,UAAA,GAAkC,EAAC,KAChC;AACH,IAAA,IAAI,eAAe,SAAA,EAAW;AAC9B,IAAA,MAAM,aAAA,GAAgB,UAAA;AACtB,IAAA,UAAA,GAAa,SAAA;AAEb,IAAA,MAAM,iBAAA,uBAAwB,GAAA,EAAyB;AACvD,IAAA,KAAA,MAAW,aAAa,UAAA,EAAY;AAClC,MAAA,IAAI,CAAC,GAAA,CAAI,qBAAA,CAAsB,WAAW,IAAA,EAAM,SAAA,EAAW,GAAG,CAAA,EAAG;AACjE,MAAA,IAAI,IAAA,GAAO,iBAAA,CAAkB,GAAA,CAAI,SAAA,CAAU,IAAI,CAAA;AAC/C,MAAA,IAAI,CAAC,IAAA,EAAM;AACT,QAAA,IAAA,uBAAW,GAAA,EAAI;AACf,QAAA,iBAAA,CAAkB,GAAA,CAAI,SAAA,CAAU,IAAA,EAAM,IAAI,CAAA;AAAA,MAC5C;AACA,MAAA,IAAA,CAAK,GAAA,CAAI,UAAU,GAAG,CAAA;AAAA,IACxB;AAEA,IAAA,KAAA,MAAW,CAAC,IAAA,EAAM,WAAW,CAAA,IAAK,iBAAA,EAAmB;AACnD,MAAA,MAAM,gBAAA,GAAmB,aAAA,CAAc,IAAI,CAAA,IAAK,EAAC;AACjD,MAAA,MAAM,YAAA,GAAe,SAAA,CAAU,IAAI,CAAA,IAAK,EAAC;AACzC,MAAA,MAAM,aAAA,GAAgB,eAAA,CAAgB,GAAA,CAAI,IAAI,CAAA;AAC9C,MAAA,IAAI,WAAA,GAAc,KAAA;AAElB,MAAA,IAAI,CAAC,aAAA,EAAe;AAEpB,MAAA,KAAA,MAAW,OAAO,WAAA,EAAa;AAC7B,QAAA,IAAI,gBAAA,CAAiB,GAAG,CAAA,KAAM,YAAA,CAAa,GAAG,CAAA,EAAG;AACjD,QAAA,WAAA,GAAc,IAAA;AACd,QAAA,eAAA,CAAgB,aAAA,CAAc,GAAA,CAAI,GAAG,CAAC,CAAA;AAAA,MACxC;AAEA,MAAA,IAAI,WAAA,EAAa;AACf,QAAA,eAAA,CAAgB,aAAA,CAAc,GAAA,CAAI,IAAI,CAAC,CAAA;AAAA,MACzC;AAAA,IACF;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,SAAA,GAAY,CAAC,SAAA,KAAiC;AAClD,IAAA,MAAM,QAAQ,UAAA,CAAW,SAAA,CAAU,IAAI,CAAA,GAAI,UAAU,GAAG,CAAA;AACxD,IAAA,MAAM,SAAA,GAAY,eAAA;AAAA,MAChB,SAAA,CAAU,MAAA;AAAA,MACV,SAAA,CAAU,UAAA;AAAA,MACV,SAAA,CAAU;AAAA,KACZ;AACA,IAAA,OAAO,KAAA,GAAQ,SAAS,CAAA,KAAM,SAAA,CAAU,MAAA;AAAA,EAC1C,CAAA;AAEA,EAAA,MAAM,OAAA,GAAU,CACd,SAAA,EACA,OAAA,GAAU,QAAA,KACE;AACZ,IAAA,IAAI,CAAC,SAAA,CAAU,SAAS,CAAA,EAAG,OAAO,KAAA;AAClC,IAAA,MAAM,mBAAA,GAAsB,yBAAA;AAAA,MAC1B,SAAA,CAAU,IAAA;AAAA,MACV,SAAA,CAAU,GAAA;AAAA,MACV;AAAA,QACE,QAAQ,SAAA,CAAU,MAAA;AAAA,QAClB,YAAY,SAAA,CAAU,UAAA;AAAA,QACtB,OAAO,SAAA,CAAU;AAAA;AACnB,KACF;AAEA,IAAA,IAAI,CAAC,GAAA,CAAI,kBAAA,CAAmB,UAAA,EAAY,mBAAmB,GAAG,OAAO,KAAA;AACrE,IAAA,MAAA,CAAO,GAAA,CAAI,cAAA,CAAe,UAAA,EAAY,mBAAmB,CAAA,EAAG;AAAA,MAC1D;AAAA,KACD,CAAA;AACD,IAAA,OAAO,IAAA;AAAA,EACT,CAAA;AAEA,EAAA,MAAM,QAAA,GAAW,CACf,IAAA,EACA,GAAA,EACA,MACA,eAAA,GAA2C,cAAA,EAC3C,UAAA,GAA+B,EAAC,KACT;AACvB,IAAA,MAAM,QAAA,GAAW,wBAAA;AAAA,MACf,GAAA;AAAA,MACA,WAAA;AAAA,MACA,IAAA;AAAA,MACA,GAAA;AAAA,MACA,IAAA;AAAA,MACA,eAAA;AAAA,MACA,UAAA;AAAA,MACA,KAAK,GAAA,EAAI;AAAA,MACT,EAAE;AAAA,KACJ;AACA,IAAA,IAAI,UAAA,IAAc,QAAA,EAAU,OAAO,QAAA,CAAS,QAAA;AAE5C,IAAA,MAAM,EAAE,WAAU,GAAI,QAAA;AACtB,IAAA,IAAI,CAAC,GAAA,CAAI,kBAAA,CAAmB,UAAA,EAAY,SAAS,CAAA,EAAG;AAClD,MAAA,OAAO,gBAAA,CAAiB,WAAW,WAAW,CAAA;AAAA,IAChD;AAEA,IAAA,MAAA,CAAO,IAAI,cAAA,CAAe,UAAA,EAAY,SAAS,CAAA,EAAG,CAAC,SAAS,CAAC,CAAA;AAC7D,IAAA,OAAO,wBAAA,CAAyB,OAAO,SAAS,CAAA;AAAA,EAClD,CAAA;AAEA,EAAA,MAAM,UAAA,GAAa,CACjB,IAAA,EACA,GAAA,EACA,kBAA2C,cAAA,KAClC;AACT,IAAA,IAAI,CAAC,GAAA,CAAI,qBAAA,CAAsB,IAAA,EAAM,GAAG,CAAA,EAAG;AAC3C,IAAA,MAAM,SAAA,GAAY,yBAAA,CAA0B,IAAA,EAAM,GAAA,EAAK,eAAe,CAAA;AACtE,IAAA,IAAI,CAAC,GAAA,CAAI,kBAAA,CAAmB,UAAA,EAAY,SAAS,CAAA,EAAG;AAEpD,IAAA,MAAA,CAAO,IAAI,cAAA,CAAe,UAAA,EAAY,SAAS,CAAA,EAAG,CAAC,SAAS,CAAC,CAAA;AAAA,EAC/D,CAAA;AAEA,EAAA,MAAM,KAAA,GAAQ,CAAC,QAAA,KAAqD;AAClE,IAAA,IAAI,OAAO,QAAA,KAAa,UAAA,EAAY,OAAO,CAAA;AAC3C,IAAA,MAAM,SAAA,GAAY,KAAK,GAAA,EAAI;AAC3B,IAAA,MAAM,aAAkC,EAAC;AAEzC,IAAA,MAAM,KAAA,GAAuB;AAAA,MAC3B,QAAA,EAAU,CACR,IAAA,EACA,GAAA,EACA,MACA,eAAA,GAA2C,cAAA,EAC3C,UAAA,GAA+B,EAAC,KACT;AACvB,QAAA,MAAM,QAAA,GAAW,wBAAA;AAAA,UACf,GAAA;AAAA,UACA,WAAA;AAAA,UACA,IAAA;AAAA,UACA,GAAA;AAAA,UACA,IAAA;AAAA,UACA,eAAA;AAAA,UACA,UAAA;AAAA,UACA,SAAA;AAAA,UACA,EAAE;AAAA,SACJ;AACA,QAAA,IAAI,UAAA,IAAc,QAAA,EAAU,OAAO,QAAA,CAAS,QAAA;AAE5C,QAAA,UAAA,CAAW,IAAA,CAAK,SAAS,SAAS,CAAA;AAClC,QAAA,OAAO,wBAAA,CAAyB,KAAA,EAAO,QAAA,CAAS,SAAS,CAAA;AAAA,MAC3D,CAAA;AAAA,MACA,UAAA,EAAY,CACV,IAAA,EACA,GAAA,EACA,kBAA2C,cAAA,KAClC;AACT,QAAA,IAAI,CAAC,GAAA,CAAI,qBAAA,CAAsB,IAAA,EAAM,GAAG,CAAA,EAAG;AAC3C,QAAA,UAAA,CAAW,IAAA,CAAK,yBAAA,CAA0B,IAAA,EAAM,GAAA,EAAK,eAAe,CAAC,CAAA;AAAA,MACvE;AAAA,KACF;AAEA,IAAA,QAAA,CAAS,KAAK,CAAA;AACd,IAAA,IAAI,UAAA,CAAW,MAAA,KAAW,CAAA,EAAG,OAAO,CAAA;AAEpC,IAAA,MAAM,EAAE,mBAAA,EAAqB,SAAA,EAAU,GAAI,GAAA,CAAI,0BAAA;AAAA,MAC7C,UAAA;AAAA,MACA;AAAA,KACF;AACA,IAAA,IAAI,mBAAA,CAAoB,MAAA,KAAW,CAAA,EAAG,OAAO,CAAA;AAE7C,IAAA,MAAA,CAAO,WAAW,mBAAmB,CAAA;AACrC,IAAA,OAAO,mBAAA,CAAoB,MAAA;AAAA,EAC7B,CAAA;AAEA,EAAA,MAAM,WAAA,GAAc,CAClB,IAAA,EACA,GAAA,EACA,QAAuB,IAAA,KACX;AACZ,IAAA,MAAM,KAAA,GAAQ,UAAA,CAAW,IAAI,CAAA,GAAI,GAAG,CAAA;AACpC,IAAA,IAAI,SAAA,GAAY,cAAA,CAAe,GAAA,CAAI,IAAI,CAAA;AACvC,IAAA,IAAI,CAAC,SAAA,EAAW;AACd,MAAA,SAAA,uBAAgB,GAAA,EAAI;AACpB,MAAA,cAAA,CAAe,GAAA,CAAI,MAAM,SAAS,CAAA;AAAA,IACpC;AAEA,IAAA,MAAM,WAAW,KAAA,KAAU,IAAA,GAAO,MAAM,CAAA,EAAG,KAAK,KAAS,GAAG,CAAA,CAAA;AAE5D,IAAA,IAAI,UAAU,MAAA,EAAW;AACvB,MAAA,SAAA,CAAU,OAAO,QAAQ,CAAA;AACzB,MAAA,OAAO,MAAA;AAAA,IACT;AAEA,IAAA,MAAM,MAAA,GAAS,SAAA,CAAU,GAAA,CAAI,QAAQ,CAAA;AACrC,IAAA,IAAI,MAAA,IAAU,MAAA,CAAO,KAAA,KAAU,KAAA,SAAc,MAAA,CAAO,KAAA;AAEpD,IAAA,MAAM,KAAA,GAAQ,kBAAA,CAAmB,IAAA,EAAM,KAAA,EAAO,KAAK,CAAA;AACnD,IAAA,SAAA,CAAU,GAAA,CAAI,QAAA,EAAU,EAAE,KAAA,EAAO,OAAO,CAAA;AACxC,IAAA,OAAO,KAAA;AAAA,EACT,CAAA;AAEA,EAAA,MAAM,kBAAA,GAAqB,CACzB,IAAA,EACA,KAAA,GAAuB,IAAA,KACe;AACtC,IAAA,MAAM,YAAA,GAAe,UAAA,CAAW,IAAI,CAAA,IAAK,EAAC;AAE1C,IAAA,MAAM,QAAA,GAAW,CAAA,EAAG,IAAI,CAAA,EAAA,EAAK,SAAS,MAAM,CAAA,CAAA;AAC5C,IAAA,MAAM,MAAA,GAAS,cAAA,CAAe,GAAA,CAAI,QAAQ,CAAA;AAE1C,IAAA,IAAI,MAAA,EAAQ,YAAA,KAAiB,YAAA,EAAc,OAAO,MAAA,CAAO,KAAA;AAEzD,IAAA,MAAM,WAAoC,EAAC;AAC3C,IAAA,KAAA,MAAW,OAAO,YAAA,EAAc;AAC9B,MAAA,IAAI,OAAO,SAAA,CAAU,cAAA,CAAe,IAAA,CAAK,YAAA,EAAc,GAAG,CAAA,EAAG;AAC3D,QAAA,MAAM,QAAQ,kBAAA,CAAmB,IAAA,EAAM,YAAA,CAAa,GAAG,GAAG,KAAK,CAAA;AAC/D,QAAA,IAAI,KAAA,KAAU,MAAA,EAAW,QAAA,CAAS,GAAG,CAAA,GAAI,KAAA;AAAA,MAC3C;AAAA,IACF;AAEA,IAAA,MAAM,UAAA,GAAa,MAAA,CAAO,MAAA,CAAO,QAAQ,CAAA;AACzC,IAAA,cAAA,CAAe,IAAI,QAAA,EAAU,EAAE,YAAA,EAAc,KAAA,EAAO,YAAY,CAAA;AAChE,IAAA,OAAO,UAAA;AAAA,EACT,CAAA;AAEA,EAAA,MAAM,KAAA,GAAQ;AAAA,IACZ,KAAA;AAAA,IACA,OAAA;AAAA,IACA,kBAAA;AAAA,IACA,WAAA;AAAA,IACA,SAAA;AAAA,IACA,QAAA;AAAA,IACA,SAAA;AAAA,IACA,WAAA,EAAa,CACX,QAAA,EACA,QAAA,GAA6B,EAAC,KAC3B,yBAAA,CAA0B,KAAA,EAAO,QAAQ,CAAA,CAAE,GAAA,CAAI,QAAQ,CAAA;AAAA,IAC5D;AAAA,GACF;AACA,EAAA,OAAO,KAAA;AACT;AC/jBA,IAAM,eAAA,GAAkB,wBAAA;AAAA,EAEtB,iBAAA;AAAA,EACA;AACF,CAAA;AAEO,SAAS,gBAAA,CAAiB;AAAA,EAC/B,QAAA;AAAA,EACA,WAAA;AAAA,EACA,iBAAiB;AACnB,CAAA,EAIG;AACD,EAAA,MAAM,CAAC,KAAK,CAAA,GAAI,QAAA;AAAA,IAAS,MACvB,mBAAA,CAAoB,cAAA,EAAgB,WAAW;AAAA,GACjD;AAEA,EAAA,MAAM,YAAA,GAAe,OAAA;AAAA,IACnB,OAAO;AAAA,MACL,OAAA,EAAS;AAAA,QACP,OAAO,KAAA,CAAM,KAAA;AAAA,QACb,UAAU,KAAA,CAAM,QAAA;AAAA,QAChB,aAAa,KAAA,CAAM,WAAA;AAAA,QACnB,YAAY,KAAA,CAAM;AAAA,OACpB;AAAA,MACA,YAAA,EAAc;AAAA,QACZ,oBAAoB,KAAA,CAAM,kBAAA;AAAA,QAC1B,aAAa,KAAA,CAAM,WAAA;AAAA,QACnB,WAAW,KAAA,CAAM;AAAA;AACnB,KACF,CAAA;AAAA,IACA,CAAC,KAAK;AAAA,GACR;AAEA,EAAA,uBAAO,GAAA,CAAC,eAAA,EAAA,EAAgB,KAAA,EAAO,YAAA,EAAe,QAAA,EAAS,CAAA;AACzD;AAEO,SAAS,kBAAA,GAAsD;AACpE,EAAA,OAAO,kBAAA;AAAA,IACL,eAAA;AAAA,IACA,oBAAA;AAAA,IACA;AAAA,GACF,CAAE,OAAA;AACJ;AAEA,SAAS,uBAAA,GAAgE;AACvE,EAAA,OAAO,kBAAA;AAAA,IACL,eAAA;AAAA,IACA,yBAAA;AAAA,IACA;AAAA,GACF,CAAE,YAAA;AACJ;AAEO,SAAS,gBAAA,CAGd,MAAS,GAAA,EAA4B;AACrC,EAAA,MAAM,EAAE,WAAA,EAAa,SAAA,EAAU,GAAI,uBAAA,EAAwB;AAE3D,EAAA,MAAM,cAAA,GAAiB,WAAA;AAAA,IACrB,CAAC,QAAA,KAAyB,SAAA,CAAU,IAAA,EAAM,KAAK,QAAQ,CAAA;AAAA,IACvD,CAAC,GAAA,EAAK,SAAA,EAAW,IAAI;AAAA,GACvB;AACA,EAAA,MAAM,QAAA,GAAW,WAAA;AAAA,IACf,MAAM,WAAA,CAAkB,IAAA,EAAM,GAAG,CAAA;AAAA,IACjC,CAAC,WAAA,EAAa,GAAA,EAAK,IAAI;AAAA,GACzB;AAEA,EAAA,OAAO,oBAAA,CAAqB,cAAA,EAAgB,QAAA,EAAU,QAAQ,CAAA;AAChE;AAEO,SAAS,mBAGd,IAAA,EAA4B;AAC5B,EAAA,MAAM,EAAE,kBAAA,EAAoB,SAAA,EAAU,GAAI,uBAAA,EAAwB;AAElE,EAAA,MAAM,eAAA,GAAkB,WAAA;AAAA,IACtB,CAAC,QAAA,KAAyB,SAAA,CAAU,IAAA,EAAM,MAAM,QAAQ,CAAA;AAAA,IACxD,CAAC,WAAW,IAAI;AAAA,GAClB;AACA,EAAA,MAAM,UAAA,GAAa,WAAA;AAAA,IACjB,MAAM,mBAAyB,IAAI,CAAA;AAAA,IACnC,CAAC,oBAAoB,IAAI;AAAA,GAC3B;AAEA,EAAA,OAAO,oBAAA,CAAqB,eAAA,EAAiB,UAAA,EAAY,UAAU,CAAA;AACrE;AClGO,IAAM,aAAA,GAA0C,MAAA,CAAO,MAAA,CAAO,EAAE,CAAA;AAEhE,IAAM,mBAAA,GAAyC,CAAC,EAAE,QAAA,EAAS,KAChE,QAAA;AAEK,IAAM,iBAAA,GACX,wBAAA,CAAiD,mBAAA,EAAqB,IAAI,CAAA;AAGrE,SAAS,iBAAA,CACd,YACA,MAAA,EACS;AACT,EAAA,MAAM,KAAA,GAAQ,UAAA,CAAW,IAAA,EAAM,MAAA,GAC3B,UAAA,CAAW,IAAA,CAAK,MAAA,CAAO,MAAM,CAAA,GAC5B,MAAA,CAAmC,UAAA,CAAW,EAAE,CAAA;AACrD,EAAA,OAAO,KAAA,IAAS,IAAA;AAClB;AAEO,SAAS,mBAAA,CACd,OAAA,EACA,MAAA,EACA,QAAA,GAA6B,EAAC,EACX;AACnB,EAAA,MAAM,UAAmC,EAAC;AAC1C,EAAA,IAAI,SAAA,GAAY,KAAA;AAChB,EAAA,KAAA,MAAW,cAAc,OAAA,EAAS;AAChC,IAAA,IAAI,CAAC,UAAA,CAAW,IAAA,EAAM,OAAA,EAAS;AAC/B,IAAA,MAAM,KAAA,GAAQ,iBAAA,CAAkB,UAAA,EAAY,MAAM,CAAA;AAClD,IAAA,IAAI,UAAU,IAAA,EAAM;AACpB,IAAA,OAAA,CAAQ,UAAA,CAAW,EAAE,CAAA,GAAI,KAAA;AACzB,IAAA,SAAA,GAAY,IAAA;AAAA,EACd;AACA,EAAA,IAAI,CAAC,WAAW,OAAO,IAAA;AACvB,EAAA,OAAO;AAAA,IACL,GAAG,OAAA;AAAA,IACH,QAAA,EAAU;AAAA,MACR,GAAG,QAAA;AAAA,MACH,GAAI,QAAA,CAAS,MAAA,CAAO,QAAQ,CAAA,GAAI,MAAA,CAAO,WAAW;AAAC;AACrD,GACF;AACF;AAEA,IAAM,iBAAA,GAAoB,qBAAA;AAEnB,SAAS,YACd,OAAA,EACiB;AACjB,EAAA,MAAM,IAAA,uBAAW,GAAA,EAA2B;AAC5C,EAAA,KAAA,MAAW,cAAc,OAAA,EAAS;AAChC,IAAA,IAAI,CAAC,iBAAA,CAAkB,IAAA,CAAK,UAAA,CAAW,EAAE,CAAA,EAAG;AAC1C,MAAA,MAAM,IAAI,KAAA;AAAA,QACR,CAAA,0BAAA,EAA6B,WAAW,EAAE,CAAA,8CAAA;AAAA,OAC5C;AAAA,IACF;AACA,IAAA,IAAI,IAAA,CAAK,GAAA,CAAI,UAAA,CAAW,EAAE,CAAA,EAAG;AAC3B,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,eAAA,EAAkB,UAAA,CAAW,EAAE,CAAA,qBAAA,CAAuB,CAAA;AAAA,IACxE;AACA,IAAA,IAAA,CAAK,GAAA,CAAI,UAAA,CAAW,EAAA,EAAI,UAAU,CAAA;AAAA,EACpC;AAEA,EAAA,MAAM,SAA0B,EAAC;AACjC,EAAA,MAAM,KAAA,uBAAY,GAAA,EAAiC;AACnD,EAAA,MAAM,KAAA,GAAQ,CAAC,UAAA,EAA2B,IAAA,KAAmB;AAC3D,IAAA,MAAM,OAAA,GAAU,KAAA,CAAM,GAAA,CAAI,UAAA,CAAW,EAAE,CAAA;AACvC,IAAA,IAAI,YAAY,MAAA,EAAQ;AACxB,IAAA,IAAI,YAAY,UAAA,EAAY;AAC1B,MAAA,MAAM,IAAI,KAAA;AAAA,QACR,CAAA,gCAAA,EAAmC,CAAC,GAAG,IAAA,EAAM,WAAW,EAAE,CAAA,CAAE,IAAA,CAAK,MAAM,CAAC,CAAA;AAAA,OAC1E;AAAA,IACF;AACA,IAAA,KAAA,CAAM,GAAA,CAAI,UAAA,CAAW,EAAA,EAAI,UAAU,CAAA;AACnC,IAAA,KAAA,MAAW,EAAA,IAAM,UAAA,CAAW,IAAA,IAAQ,EAAC,EAAG;AACtC,MAAA,MAAM,UAAA,GAAa,IAAA,CAAK,GAAA,CAAI,EAAE,CAAA;AAC9B,MAAA,IAAI,UAAA,QAAkB,UAAA,EAAY,CAAC,GAAG,IAAA,EAAM,UAAA,CAAW,EAAE,CAAC,CAAA;AAAA,IAC5D;AACA,IAAA,KAAA,CAAM,GAAA,CAAI,UAAA,CAAW,EAAA,EAAI,MAAM,CAAA;AAC/B,IAAA,MAAA,CAAO,KAAK,UAAU,CAAA;AAAA,EACxB,CAAA;AACA,EAAA,OAAA,CAAQ,QAAQ,CAAC,UAAA,KAAe,MAAM,UAAA,EAAY,EAAE,CAAC,CAAA;AACrD,EAAA,OAAO,MAAA;AACT;AAEO,SAAS,gCACd,OAAA,EACqB;AACrB,EAAA,MAAM,WAAA,uBAAkB,GAAA,EAAgC;AACxD,EAAA,KAAA,MAAW,cAAc,OAAA,EAAS;AAChC,IAAA,IAAI,UAAA,CAAW,QAAA;AACb,MAAA,WAAA,CAAY,GAAA,CAAI,UAAA,CAAW,EAAA,EAAI,UAAA,CAAW,QAAQ,CAAA;AAAA,EACtD;AACA,EAAA,OAAO,WAAA;AACT;AAEO,SAAS,mBAAA,GAAgD;AAC9D,EAAA,OAAO,GAAA,CAAI,iBAAiB,CAAA,EAAG,OAAA,IAAW,aAAA;AAC5C;;;ACvGA,SAAS,sBAAsB,SAAA,EAA6B;AAC1D,EAAA,OAAO,cAAc,mBAAA,CAAoB,UAAA;AAC3C;AAEA,SAAS,oBAAA,CACP,SACA,QAAA,EACe;AACf,EAAA,OAAO,OAAO,QAAQ,KAAA,KAAU,UAAA,GAC5B,QAAQ,KAAA,CAAM,QAAQ,CAAA,GACtB,QAAA,CAAS,OAAO,CAAA;AACtB;AAEA,SAAS,qBAAA,CACP,IAAA,EACA,GAAA,EACA,MAAA,EACA,YACA,KAAA,EACQ;AACR,EAAA,OAAO,KAAK,SAAA,CAAU;AAAA,IACpB,OAAA;AAAA,IACA,IAAA;AAAA,IACA,GAAA;AAAA,IACA,KAAA,IAAS,IAAA;AAAA,IACT,MAAA;AAAA,IACA;AAAA,GACD,CAAA;AACH;AAEA,SAAS,gBACP,OAAA,EACc;AACd,EAAA,OAAO,OAAA,EAAS,YAAA,oBAAgB,IAAI,GAAA,EAAI;AAC1C;AAEA,SAAS,iBAAA,CAAkB,OAAqB,UAAA,EAA0B;AACxE,EAAA,MAAM,SAAA,GAAY,KAAA,CAAM,GAAA,CAAI,UAAU,CAAA;AACtC,EAAA,IAAI,CAAC,SAAA,EAAW;AAChB,EAAA,SAAA,CAAU,SAAA,GAAY,IAAA;AACtB,EAAA,IAAI,SAAA,CAAU,OAAA,KAAY,IAAA,EAAM,YAAA,CAAa,UAAU,OAAO,CAAA;AAC9D,EAAA,KAAA,CAAM,OAAO,UAAU,CAAA;AACzB;AAEA,SAAS,eAAA,CACP,KAAA,EACA,UAAA,EACA,QAAA,EACA,OAAA,EACM;AACN,EAAA,iBAAA,CAAkB,OAAO,UAAU,CAAA;AACnC,EAAA,MAAM,SAAA,GAAkC;AAAA,IACtC,SAAA,EAAW,KAAA;AAAA,IACX,OAAA,EAAS;AAAA,GACX;AAEA,EAAA,SAAA,CAAU,OAAA,GAAU,WAAW,MAAM;AACnC,IAAA,IAAI,UAAU,SAAA,IAAa,KAAA,CAAM,GAAA,CAAI,UAAU,MAAM,SAAA,EAAW;AAChE,IAAA,KAAA,CAAM,OAAO,UAAU,CAAA;AACvB,IAAA,QAAA,EAAS;AAAA,EACX,GAAG,OAAO,CAAA;AAEV,EAAA,KAAA,CAAM,GAAA,CAAI,YAAY,SAAS,CAAA;AACjC;AAOA,SAAS,0BAAA,CACP,UAAA,EACA,KAAA,EACA,YAAA,EACA,OAAA,EACsB;AACtB,EAAA,MAAM,aAAa,UAAA,CAAW,QAAA;AAC9B,EAAA,MAAM,SAAA,GAAY,WAAW,IAAA,EAAM,OAAA;AACnC,EAAA,IAAI,CAAC,cAAc,CAAC,SAAA,IAAa,SAAS,IAAA,IAAQ,KAAA,KAAU,KAAA,EAAO,OAAO,EAAC;AAE3E,EAAA,MAAM,OAAO,UAAA,CAAW,EAAA;AACxB,EAAA,MAAM,QAAQ,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,GAAI,KAAA,GAAQ,CAAC,KAAK,CAAA;AACnD,EAAA,MAAM,gBAAsC,EAAC;AAE7C,EAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,IAAA,IAAI,IAAA,IAAQ,IAAA,IAAQ,IAAA,KAAS,KAAA,EAAO;AACpC,IAAA,MAAM,YAAA,GACJ,QAAA,CAAS,IAAI,CAAA,IAAK,QAAA,CAAS,KAAK,QAAQ,CAAA,GAAI,IAAA,CAAK,QAAA,GAAW,EAAC;AAC/D,IAAA,MAAM,QAAA,GAAW,EAAE,GAAG,YAAA,EAAc,GAAG,YAAA,EAAa;AACpD,IAAA,IACE,SAAS,UAAA,KAAe,QAAA,IACxB,CAAC,wBAAA,CAAyB,QAAQ,EAAE,KAAA,EACpC;AACA,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,OAAA,GAAU,QAAA,CAAS,IAAI,CAAA,GACzB,MAAA,CAAO,WAAA;AAAA,MACL,MAAA,CAAO,OAAA,CAAQ,IAAI,CAAA,CAAE,MAAA,CAAO,CAAC,CAAC,GAAG,CAAA,KAAM,GAAA,KAAQ,UAAU;AAAA,KAC3D,GACA,IAAA;AACJ,IAAA,MAAM,EAAE,gBAAgB,SAAA,EAAW,eAAA,EAAiB,OAAO,MAAA,EAAO,GAChE,0BAA0B,QAAA,EAAU;AAAA,MAClC,qBAAA,EAAuB,WAAW,cAAA,IAAkB,IAAA;AAAA,MACpD,kBAAkB,UAAA,CAAW,SAAA;AAAA,MAC7B,aAAA,EAAe;AAAA,KAChB,CAAA;AAEH,IAAA,KAAA,MAAW,EAAE,KAAK,KAAA,EAAM,IAAK,UAAU,OAAA,EAAS,OAAO,CAAA,IAAK,EAAC,EAAG;AAC9D,MAAA,MAAM,UAAA,GAAa,UAAA,CAAW,QAAA,GAAW,KAAK,CAAA;AAC9C,MAAA,IAAI,UAAA,IAAc,CAAC,UAAA,CAAW,KAAA,EAAO;AACnC,QAAA,MAAA,CAAO,CAAA,SAAA,EAAY,IAAI,CAAA,kBAAA,CAAA,EAAsB,UAAA,CAAW,QAAQ,MAAM,CAAA;AACtE,QAAA;AAAA,MACF;AACA,MAAA,aAAA,CAAc,IAAA,CAAK;AAAA,QACjB,cAAA;AAAA,QACA,UAAA,EAAY,qBAAA;AAAA,UACV,IAAA;AAAA,UACA,GAAA;AAAA,UACA,MAAA;AAAA,UACA,OAAA,CAAQ,UAAA;AAAA,UACR;AAAA,SACF;AAAA,QACA,GAAA;AAAA,QACA,SAAA;AAAA,QACA,eAAA;AAAA,QACA,KAAA;AAAA,QACA,MAAA;AAAA,QACA,IAAA;AAAA,QACA;AAAA,OACD,CAAA;AAAA,IACH;AAAA,EACF;AACA,EAAA,OAAO,aAAA;AACT;AAEA,IAAM,aAAa,MAAM;AAAC,CAAA;AAEnB,SAAS,mBAAA,CACd,QACA,OAAA,EACY;AACZ,EAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,OAAA,IAAW,EAAC;AACpC,EAAA,IAAI,CAAC,MAAA,IAAU,OAAA,CAAQ,MAAA,KAAW,GAAG,OAAO,UAAA;AAC5C,EAAA,MAAM,eAAe,QAAA,CAAS,MAAA,CAAO,QAAQ,CAAA,GAAI,MAAA,CAAO,WAAW,EAAC;AACpE,EAAA,MAAM,MAAA,GAAS,MAAA;AAEf,EAAA,MAAM,aAAA,GAAgB,OAAA,CAAQ,OAAA,CAAQ,CAAC,UAAA,KAAe;AACpD,IAAA,IAAI;AACF,MAAA,OAAO,0BAAA;AAAA,QACL,UAAA;AAAA,QACA,MAAA,CAAO,WAAW,EAAE,CAAA;AAAA,QACpB,YAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,MAAA,CAAO,CAAA,gBAAA,EAAmB,UAAA,CAAW,EAAE,CAAA,CAAA,CAAA,EAAK,KAAK,CAAA;AACjD,MAAA,OAAO,EAAC;AAAA,IACV;AAAA,EACF,CAAC,CAAA;AACD,EAAA,IAAI,aAAA,CAAc,MAAA,KAAW,CAAA,EAAG,OAAO,UAAA;AAEvC,EAAA,MAAM,YAAA,GAAe,gBAAgB,OAAO,CAAA;AAC5C,EAAA,MAAM,KAAA,GAAQ,CAAC,YAAA,MAAsC;AAAA,IACnD,YAAY,OAAA,CAAQ,UAAA;AAAA,IACpB,OAAO,YAAA,CAAa,KAAA;AAAA,IACpB,QAAQ,YAAA,CAAa;AAAA,GACvB,CAAA;AAEA,EAAA,oBAAA,CAAqB,OAAA,EAAS,CAAC,KAAA,KAAU;AACvC,IAAA,aAAA,CAAc,OAAA;AAAA,MACZ,CAAC,EAAE,UAAA,EAAY,GAAA,EAAK,iBAAiB,MAAA,EAAQ,IAAA,EAAM,OAAM,KAAM;AAC7D,QAAA,iBAAA,CAAkB,cAAc,UAAU,CAAA;AAC1C,QAAA,KAAA,CAAM,QAAA,CAAS,IAAA,EAAM,GAAA,EAAK,KAAA,EAAO,QAAQ,eAAe,CAAA;AAAA,MAC1D;AAAA,KACF;AAAA,EACF,CAAC,CAAA;AAED,EAAA,OAAO,MAAM;AACX,IAAA,MAAM,YAAkC,EAAC;AACzC,IAAA,aAAA,CAAc,OAAA,CAAQ,CAAC,YAAA,KAAiB;AACtC,MAAA,IAAI,qBAAA,CAAsB,YAAA,CAAa,SAAS,CAAA,EAAG;AACnD,MAAA,MAAM,EAAE,cAAA,EAAgB,UAAA,EAAY,GAAA,EAAK,MAAK,GAAI,YAAA;AAClD,MAAA,IAAI,OAAO,cAAA,KAAmB,QAAA,IAAY,cAAA,GAAiB,CAAA,EAAG;AAC5D,QAAA,eAAA;AAAA,UACE,YAAA;AAAA,UACA,UAAA;AAAA,UACA,MAAM,OAAA,CAAQ,UAAA,CAAW,MAAM,GAAA,EAAK,KAAA,CAAM,YAAY,CAAC,CAAA;AAAA,UACvD;AAAA,SACF;AAAA,MACF,CAAA,MAAO;AACL,QAAA,SAAA,CAAU,KAAK,YAAY,CAAA;AAAA,MAC7B;AAAA,IACF,CAAC,CAAA;AACD,IAAA,IAAI,SAAA,CAAU,WAAW,CAAA,EAAG;AAC5B,IAAA,oBAAA,CAAqB,OAAA,EAAS,CAAC,KAAA,KAAU;AACvC,MAAA,SAAA,CAAU,OAAA;AAAA,QAAQ,CAAC,iBACjB,KAAA,CAAM,UAAA;AAAA,UACJ,YAAA,CAAa,IAAA;AAAA,UACb,YAAA,CAAa,GAAA;AAAA,UACb,MAAM,YAAY;AAAA;AACpB,OACF;AAAA,IACF,CAAC,CAAA;AAAA,EACH,CAAA;AACF;;;ACnMA,SAAS,cAAA,CACP,UAAA,EACA,eAAA,EACA,UAAA,EAIA;AACA,EAAA,IAAI,OAAO,oBAAoB,QAAA,EAAU;AACvC,IAAA,OAAO;AAAA,MACL,UAAA,EAAY,EAAE,GAAI,QAAA,CAAS,UAAU,CAAA,GAAI,UAAA,GAAa,EAAC,EAAI,UAAA,EAAW;AAAA,MACtE;AAAA,KACF;AAAA,EACF;AACA,EAAA,IAAI,QAAA,CAAS,eAAe,CAAA,EAAG;AAC7B,IAAA,OAAO;AAAA,MACL,UAAA;AAAA,MACA,eAAA,EAAiB,EAAE,GAAG,eAAA,EAAiB,UAAA;AAAW,KACpD;AAAA,EACF;AACA,EAAA,OAAO;AAAA,IACL,UAAA,EAAY,MAAA;AAAA,IACZ,eAAA,EAAiB;AAAA,MACf,GAAI,QAAA,CAAS,UAAU,CAAA,GAAI,aAAa,EAAC;AAAA,MACzC;AAAA;AACF,GACF;AACF;AAEA,SAAS,2BAAA,CACP,YACA,eAAA,EACkB;AAClB,EAAA,IAAI,OAAO,oBAAoB,QAAA,EAAU;AACvC,IAAA,OAAO,EAAE,UAAA,EAAY,MAAA,EAAQ,eAAA,EAAgB;AAAA,EAC/C;AACA,EAAA,IAAI,QAAA,CAAS,eAAe,CAAA,EAAG;AAC7B,IAAA,OAAO,EAAE,GAAG,eAAA,EAAiB,UAAA,EAAW;AAAA,EAC1C;AACA,EAAA,OAAO,EAAE,UAAA,EAAW;AACtB;AAEA,SAAS,+BAAA,CACP,UAAA,EACA,eAAA,EACA,UAAA,EACyD;AACzD,EAAA,MAAM,KAAA,GAAQ,cAAA,CAAe,UAAA,EAAY,eAAA,EAAiB,UAAU,CAAA;AACpE,EAAA,OAAO,CAAC,KAAA,CAAM,eAAA,EAAiB,KAAA,CAAM,UAAU,CAAA;AACjD;AAEO,SAAS,iBAAmC,KAAA,EAAa;AAC9D,EAAA,MAAM,GAAA,GAAM,OAAO,KAAK,CAAA;AACxB,EAAA,IAAI,GAAA,CAAI,YAAY,KAAA,IAAS,CAAC,aAAa,GAAA,CAAI,OAAA,EAAS,KAAK,CAAA,EAAG;AAC9D,IAAA,GAAA,CAAI,OAAA,GAAU,KAAA;AAAA,EAChB;AACA,EAAA,OAAO,GAAA,CAAI,OAAA;AACb;AAEA,IAAM,uBAAA,GAA0B,EAAA;AAEhC,SAAS,0BAA0B,EAAA,EAAsC;AACvE,EAAA,MAAM,KAAA,GAA6B;AAAA,IACjC,OAAA,EAAS,EAAA;AAAA,IACT,UAAyB,IAAA,EAAiB;AACxC,MAAA,OAAO,KAAA,CAAM,OAAA,EAAS,KAAA,CAAM,IAAA,EAAM,IAAI,CAAA;AAAA,IACxC;AAAA,GACF;AACA,EAAA,OAAO,KAAA;AACT;AAQA,SAAS,6BAAA,CACP,MACA,eAAA,EACS;AACT,EAAA,MAAM,KAAA,GAAQ,4BAAA,CAA6B,IAAA,CAAK,IAAI,CAAA;AACpD,EAAA,OAAO,QAAQ,KAAA,IAAS,eAAA,CAAgB,IAAI,KAAA,CAAM,CAAC,CAAC,CAAC,CAAA;AACvD;AAEA,SAAS,gBAAgB,KAAA,EAAyB;AAChD,EAAA,OACE,KAAA,KAAU,IAAA,IACV,KAAA,KAAU,MAAA,IACV,OAAO,KAAA,KAAU,SAAA,IACjB,OAAO,KAAA,KAAU,QAAA,IACjB,OAAO,KAAA,KAAU,QAAA,IACjBC,eAAe,KAAK,CAAA;AAExB;AAEA,SAAS,qBACP,KAAA,EACkC;AAClC,EAAA,OACE,OAAO,KAAA,KAAU,QAAA,IACjB,KAAA,KAAU,IAAA,IACV,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,IACpB,CAACA,cAAAA,CAAe,KAAK,CAAA;AAEzB;AAEA,SAAS,iBAAA,CACP,eACA,SAAA,EACS;AACT,EAAA,IACE,CAAC,oBAAA,CAAqB,aAAa,KACnC,CAAC,oBAAA,CAAqB,SAAS,CAAA,EAC/B;AACA,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,MAAM,YAAA,GAAe,MAAA,CAAO,IAAA,CAAK,aAAa,CAAA;AAC9C,EAAA,MAAM,QAAA,GAAW,MAAA,CAAO,IAAA,CAAK,SAAS,CAAA;AACtC,EAAA,IAAI,YAAA,CAAa,MAAA,KAAW,QAAA,CAAS,MAAA,EAAQ,OAAO,KAAA;AACpD,EAAA,OAAO,QAAA,CAAS,KAAA;AAAA,IAAM,CAAC,GAAA,KACrB,MAAA,CAAO,UAAU,cAAA,CAAe,IAAA,CAAK,eAAe,GAAG;AAAA,GACzD;AACF;AAEA,SAAS,sBAAA,CACP,KAAA,EACA,IAAA,EACA,KAAA,EACA,aAAA,EACA,uBAAO,IAAI,OAAA,EAAgB,EAC3B,KAAA,GAAQ,CAAA,EACC;AACT,EAAA,IAAI,KAAA,GAAQ,yBAAyB,OAAO,KAAA;AAE5C,EAAA,IAAI,OAAO,UAAU,UAAA,EAAY;AAC/B,IAAA,MAAM,cAAc,KAAA,CAAM,IAAA,IAAQ,QAAA,CAAS,IAAA,CAAK,MAAM,IAAI,CAAA;AAC1D,IAAA,IACE,WAAA,IACA,6BAAA,CAA8B,IAAA,EAAM,KAAA,CAAM,eAAe,CAAA,EACzD;AACA,MAAA,OAAO,KAAA;AAAA,IACT;AACA,IAAA,KAAA,CAAM,SAAA,CAAU,IAAI,IAAI,CAAA;AACxB,IAAA,IAAI,KAAA,GAAQ,KAAA,CAAM,eAAA,CAAgB,GAAA,CAAI,IAAI,CAAA;AAC1C,IAAA,IAAI,CAAC,KAAA,EAAO;AACV,MAAA,KAAA,GAAQ,0BAA0B,KAAoB,CAAA;AACtD,MAAA,KAAA,CAAM,eAAA,CAAgB,GAAA,CAAI,IAAA,EAAM,KAAK,CAAA;AAAA,IACvC,CAAA,MAAO;AACL,MAAA,KAAA,CAAM,OAAA,GAAU,KAAA;AAAA,IAClB;AACA,IAAA,OAAO,KAAA,CAAM,MAAA;AAAA,EACf;AAEA,EAAA,IAAI,KAAA,IAAS,OAAO,KAAA,KAAU,QAAA,EAAU;AACtC,IAAA,IAAI,IAAA,CAAK,GAAA,CAAI,KAAK,CAAA,EAAG,OAAO,KAAA;AAC5B,IAAA,IAAA,CAAK,IAAI,KAAK,CAAA;AAAA,EAChB;AAEA,EAAA,IAAIA,cAAAA,CAAe,KAAK,CAAA,EAAG;AACzB,IAAA,MAAM,SAAA,GAAY,sBAAA;AAAA,MAChB,KAAA,CAAM,KAAA;AAAA,MACN,GAAG,IAAI,CAAA,MAAA,CAAA;AAAA,MACP,KAAA;AAAA,MACAA,cAAAA,CAAe,aAAa,CAAA,GAAI,aAAA,CAAc,KAAA,GAAQ,MAAA;AAAA,MACtD,IAAA;AAAA,MACA,KAAA,GAAQ;AAAA,KACV;AACA,IAAA,IACEA,cAAAA,CAAe,aAAa,CAAA,IAC5B,aAAA,CAAc,IAAA,KAAS,KAAA,CAAM,IAAA,IAC7B,aAAA,CAAc,GAAA,KAAQ,KAAA,CAAM,GAAA,IAC5B,aAAA,CAAc,UAAU,SAAA,EACxB;AACA,MAAA,OAAO,aAAA;AAAA,IACT;AACA,IAAA,OAAO,YAAA,CAAa,OAAO,SAAS,CAAA;AAAA,EACtC;AAEA,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACxB,IAAA,MAAM,SAAA,GAAY,MAAM,KAAA,CAAM,eAAe,IACzC,QAAA,CAAS,OAAA,CAAQ,KAAK,CAAA,GACtB,KAAA;AACJ,IAAA,MAAM,aAAA,GAAgB,KAAA,CAAM,OAAA,CAAQ,aAAa,IAAI,aAAA,GAAgB,IAAA;AACrE,IAAA,IAAIC,WAAAA,GACF,CAAC,aAAA,IAAiB,aAAA,CAAc,WAAW,SAAA,CAAU,MAAA;AAEvD,IAAA,MAAMC,gBAAAA,GAA6B,SAAA,CAAU,GAAA,CAAI,CAAC,MAAM,KAAA,KAAU;AAChE,MAAA,MAAM,QAAA,GAAW,sBAAA;AAAA,QACf,IAAA;AAAA,QACA,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,KAAK,CAAA,CAAA,CAAA;AAAA,QAChB,KAAA;AAAA,QACA,gBAAgB,KAAK,CAAA;AAAA,QACrB,IAAA;AAAA,QACA,KAAA,GAAQ;AAAA,OACV;AACA,MAAA,IAAI,CAAC,aAAA,IAAiB,QAAA,KAAa,aAAA,CAAc,KAAK,CAAA,EAAG;AACvD,QAAAD,WAAAA,GAAa,IAAA;AAAA,MACf;AACA,MAAA,OAAO,QAAA;AAAA,IACT,CAAC,CAAA;AACD,IAAA,OAAO,CAACA,cAAa,aAAA,GAAgBC,gBAAAA;AAAA,EACvC;AAEA,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,KAAU,IAAA,EAAM;AAC/C,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,MAAM,MAAA,GAAS,KAAA;AACf,EAAA,MAAM,cAAA,GAAiB,aAAA;AACvB,EAAA,MAAM,kBAA2C,EAAC;AAClD,EAAA,MAAM,gBAAA,GAAmB,iBAAA,CAAkB,aAAA,EAAe,KAAK,CAAA;AAC/D,EAAA,IAAI,aAAa,CAAC,gBAAA;AAElB,EAAA,MAAA,CAAO,IAAA,CAAK,MAAM,CAAA,CAAE,OAAA,CAAQ,CAAC,GAAA,KAAQ;AACnC,IAAA,MAAM,SAAA,GAAY,sBAAA;AAAA,MAChB,OAAO,GAAG,CAAA;AAAA,MACV,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,GAAG,CAAA,CAAA;AAAA,MACd,KAAA;AAAA,MACA,iBAAiB,GAAG,CAAA;AAAA,MACpB,IAAA;AAAA,MACA,KAAA,GAAQ;AAAA,KACV;AACA,IAAA,eAAA,CAAgB,GAAG,CAAA,GAAI,SAAA;AACvB,IAAA,IAAI,CAAC,gBAAA,IAAoB,SAAA,KAAc,cAAA,GAAiB,GAAG,CAAA,EAAG;AAC5D,MAAA,UAAA,GAAa,IAAA;AAAA,IACf;AAAA,EACF,CAAC,CAAA;AAED,EAAA,OAAO,CAAC,aAAa,aAAA,GAAgB,eAAA;AACvC;AAEA,SAAS,wBAAA,CACP,OAAA,EACA,OAAA,EACA,eAAA,EACM;AACN,EAAA,MAAM,kBAAA,GAAqB,MAAA,iBAAO,IAAI,GAAA,EAAkC,CAAA;AACxE,EAAA,MAAM,UAAA,GAAa,OAKT,IAAI,CAAA;AAEd,EAAA,yBAAA,CAA0B,MAAM;AAC9B,IAAA,MAAM,WAAW,UAAA,CAAW,OAAA;AAC5B,IAAA,IACE,YACA,QAAA,CAAS,OAAA,KAAY,OAAA,IACrB,QAAA,CAAS,YAAY,OAAA,EACrB;AACA,MAAA;AAAA,IACF;AACA,IAAA,MAAM,kBAAkB,kBAAA,CAAmB,OAAA;AAC3C,IAAA,MAAM,SAAA,uBAAgB,GAAA,EAAY;AAClC,IAAA,MAAM,MAAA,GAAS,sBAAA;AAAA,MACb,OAAA;AAAA,MACA,QAAA;AAAA,MACA,EAAE,eAAA,EAAiB,eAAA,EAAiB,SAAA,EAAU;AAAA,MAC9C,QAAA,EAAU;AAAA,KACZ;AACA,IAAA,eAAA,CAAgB,OAAA,CAAQ,CAAC,MAAA,EAAQ,IAAA,KAAS;AACxC,MAAA,IAAI,CAAC,SAAA,CAAU,GAAA,CAAI,IAAI,CAAA,EAAG,eAAA,CAAgB,OAAO,IAAI,CAAA;AAAA,IACvD,CAAC,CAAA;AAED,IAAA,IACE,YACA,QAAA,CAAS,MAAA,KAAW,MAAA,IACpB,QAAA,CAAS,YAAY,OAAA,EACrB;AACA,MAAA,QAAA,CAAS,OAAA,GAAU,OAAA;AACnB,MAAA;AAAA,IACF;AACA,IAAA,QAAA,EAAU,OAAA,EAAQ;AAClB,IAAA,UAAA,CAAW,OAAA,GAAU;AAAA,MACnB,OAAA,EAAS,mBAAA,CAAoB,MAAA,EAA6B,OAAO,CAAA;AAAA,MACjE,MAAA;AAAA,MACA,OAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF,CAAC,CAAA;AAED,EAAA,yBAAA;AAAA,IACE,MAAM,MAAM;AACV,MAAA,UAAA,CAAW,SAAS,OAAA,EAAQ;AAC5B,MAAA,UAAA,CAAW,OAAA,GAAU,IAAA;AAAA,IACvB,CAAA;AAAA,IACA;AAAC,GACH;AACF;AAEO,SAAS,2BACd,OAAA,EACA;AAAA,EACE,YAAA,uBAAmB,GAAA,EAAkC;AAAA,EACrD,UAAA;AAAA,EACA,UAAU,EAAC;AAAA,EACX;AACF,CAAA,EAGsB;AACtB,EAAA,MAAM,KAAA,GAAQ,CAAC,KAAA,MACZ;AAAA,IACC,UAAU,CACR,IAAA,EACA,KACA,IAAA,EACA,eAAA,EACA,eAEA,KAAA,CAAM,QAAA;AAAA,MACJ,IAAA;AAAA,MACA,GAAA;AAAA,MACA,IAAA;AAAA,MACA,GAAG,+BAAA;AAAA,QACD,UAAA;AAAA,QACA,eAAA;AAAA,QACA;AAAA;AACF,KACF;AAAA,IACF,UAAA,EAAY,CACV,IAAA,EACA,GAAA,EACA,oBAEA,KAAA,CAAM,UAAA;AAAA,MACJ,IAAA;AAAA,MACA,GAAA;AAAA,MACA,2BAAA,CAA4B,YAAY,eAAe;AAAA;AACzD,GACJ,CAAA;AAEF,EAAA,OAAO;AAAA,IACL,GAAG,MAAM,OAAO,CAAA;AAAA,IAChB,KAAA,EAAO,CAAC,QAAA,KACN,OAAO,aAAa,UAAA,GAChB,OAAA,CAAQ,KAAA,CAAM,CAAC,UAAU,QAAA,CAAS,KAAA,CAAM,KAAK,CAAC,CAAC,CAAA,GAC/C,CAAA;AAAA,IACN,YAAA;AAAA,IACA,UAAA;AAAA,IACA,OAAA;AAAA,IACA;AAAA,GACF;AACF;AAEO,SAAS,WAAA,CACd,QACA,QAAA,EACM;AACN,EAAA,MAAM,EAAE,KAAA,EAAO,QAAA,EAAU,UAAA,KAAe,kBAAA,EAAmB;AAC3D,EAAA,MAAM,WAAW,WAAA,EAAY;AAC7B,EAAA,MAAM,UAAU,mBAAA,EAAoB;AACpC,EAAA,MAAM,UAAA,GAAa,CAAA,kBAAA,EAAqB,KAAA,EAAO,CAAA,CAAA;AAC/C,EAAA,MAAM,CAAC,YAAY,CAAA,GAAIC,QAAAA;AAAA,IACrB,0BAAU,GAAA;AAAkC,GAC9C;AAEA,EAAA,MAAM,OAAA,GAAUC,OAAAA;AAAA,IACd,MACE,0BAAA;AAAA,MACE,EAAE,KAAA,EAAO,QAAA,EAAU,UAAA,EAAW;AAAA,MAC9B;AAAA,QACE,YAAA;AAAA,QACA,UAAA;AAAA,QACA,OAAA;AAAA,QACA;AAAA;AACF,KACF;AAAA,IACF,CAAC,KAAA,EAAO,YAAA,EAAc,YAAY,OAAA,EAAS,QAAA,EAAU,UAAU,UAAU;AAAA,GAC3E;AAEA,EAAA,MAAM,OAAA,GAAUA,OAAAA;AAAA,IACd,MAAO,MAAA,GAAS,mBAAA,CAAoB,OAAA,EAAS,MAAA,EAAQ,QAAQ,CAAA,GAAI,IAAA;AAAA,IACjE,CAAC,MAAA,EAAQ,QAAA,EAAU,OAAO;AAAA,GAC5B;AACA,EAAA,MAAM,eAAA,GAAkBA,OAAAA;AAAA,IACtB,MACE,IAAI,GAAA;AAAA,MACF,OAAA,CACG,MAAA;AAAA,QACC,CAAC,UAAA,KAAe,UAAA,CAAW,QAAA,EAAU,SAAA,KAAc;AAAA,OACrD,CACC,GAAA,CAAI,CAAC,UAAA,KAAe,WAAW,EAAE;AAAA,KACtC;AAAA,IACF,CAAC,OAAO;AAAA,GACV;AACA,EAAA,wBAAA,CAAyB,OAAA,EAAS,SAAS,eAAe,CAAA;AAC5D;ACnYA,IAAM,YAAA,GAA2B,MAAA,CAAO,MAAA,CAAO,EAAE,CAAA;AAEjD,SAAS,yBAAA,GAAiD;AACxD,EAAA,MAAM,SAAA,uBAAgB,GAAA,EAAgB;AACtC,EAAA,IAAI,QAGE,EAAC;AAEP,EAAA,MAAM,SAAS,MAAY;AACzB,IAAA,SAAA,CAAU,OAAA,CAAQ,CAAC,QAAA,KAAa;AAC9B,MAAA,IAAI;AACF,QAAA,QAAA,EAAS;AAAA,MACX,SAAS,KAAA,EAAO;AACd,QAAA,MAAA,CAAO,4BAA4B,KAAK,CAAA;AAAA,MAC1C;AAAA,IACF,CAAC,CAAA;AAAA,EACH,CAAA;AAEA,EAAA,OAAO;AAAA,IACL,WAAA,GAAqC;AACnC,MAAA,MAAM,GAAA,GAAM,KAAA,CAAM,KAAA,CAAM,MAAA,GAAS,CAAC,CAAA;AAClC,MAAA,OAAO,GAAA,EAAK,eAAe,OAAA,IAAW,IAAA;AAAA,IACxC,CAAA;AAAA,IACA,MAAA;AAAA,IACA,QAAA,CACE,IACA,aAAA,EACM;AACN,MAAA,KAAA,GAAQ,MAAM,MAAA,CAAO,CAAC,IAAA,KAAS,IAAA,CAAK,OAAO,EAAE,CAAA;AAC7C,MAAA,KAAA,CAAM,IAAA,CAAK,EAAE,aAAA,EAAe,EAAA,EAAI,CAAA;AAChC,MAAA,MAAA,EAAO;AAAA,IACT,CAAA;AAAA,IACA,UAAU,QAAA,EAAkC;AAC1C,MAAA,SAAA,CAAU,IAAI,QAAQ,CAAA;AACtB,MAAA,OAAO,MAAM;AACX,QAAA,SAAA,CAAU,OAAO,QAAQ,CAAA;AAAA,MAC3B,CAAA;AAAA,IACF,CAAA;AAAA,IACA,WAAW,EAAA,EAAkB;AAC3B,MAAA,KAAA,GAAQ,MAAM,MAAA,CAAO,CAAC,IAAA,KAAS,IAAA,CAAK,OAAO,EAAE,CAAA;AAC7C,MAAA,MAAA,EAAO;AAAA,IACT;AAAA,GACF;AACF;AAEA,SAAS,qBAAA,GAGP;AACA,EAAA,MAAM,SAAA,uBAAgB,GAAA,EAAgB;AACtC,EAAA,IAAI,OAAA,GAAiC,IAAA;AAErC,EAAA,MAAM,SAAA,GAAY,CAAC,QAAA,KAAyB;AAC1C,IAAA,SAAA,CAAU,IAAI,QAAQ,CAAA;AACtB,IAAA,OAAO,MAAM;AACX,MAAA,SAAA,CAAU,OAAO,QAAQ,CAAA;AAAA,IAC3B,CAAA;AAAA,EACF,CAAA;AACA,EAAA,MAAM,cAAc,MAAM,OAAA;AAE1B,EAAA,SAAS,YAAA,CAAa,EAAE,QAAA,EAAS,EAA6B;AAC5D,IAAA,MAAM,UAAA,GAAaC,oBAAAA;AAAA,MACjB,SAAA;AAAA,MACA,WAAA;AAAA,MACA;AAAA,KACF;AACA,IAAA,uBACEC,GAAAA,CAAC,qBAAA,EAAA,EAAsB,KAAA,EAAO,YAC3B,QAAA,EACH,CAAA;AAAA,EAEJ;AAEA,EAAA,OAAO;AAAA,IACL,QAAA,EAAU,YAAA;AAAA,IACV,QAAQ,UAAA,EAAY;AAClB,MAAA,IAAI,YAAY,UAAA,EAAY;AAC5B,MAAA,OAAA,GAAU,UAAA;AACV,MAAA,SAAA,CAAU,OAAA,CAAQ,CAAC,QAAA,KAAa,QAAA,EAAU,CAAA;AAAA,IAC5C;AAAA,GACF;AACF;AAEA,IAAM,0BAA0B,yBAAA,EAA0B;AAE1D,IAAM,WAAW,MAAM;AAAC,CAAA;AACxB,IAAM,mBAAA,GAAsB,CAAC,EAAE,QAAA,EAAS,KACtC,QAAA;AAEF,IAAM,qBAAA,GAAwB,wBAAA;AAAA,EAC5B,uBAAA;AAAA,EACA;AACF,CAAA;AAEA,IAAM,0BAAA,GACJ,wBAAA;AAAA,EACE,4BAAA;AAAA,EACA;AACF,CAAA;AAEK,SAAS,sBAAA,CAAuB,EAAE,QAAA,EAAS,EAA6B;AAC7E,EAAA,MAAM,CAAC,KAAK,CAAA,GAAIH,QAAAA;AAAA,IAA8B,MAC5C,yBAAA;AAA0B,GAC5B;AACA,EAAA,uBACEG,GAAAA,CAAC,0BAAA,EAAA,EAA2B,KAAA,EAAO,OAChC,QAAA,EACH,CAAA;AAEJ;AAEA,IAAM,cAAA,GAAiB,MAAM,MAAM;AAAC,CAAA;AACpC,IAAM,kBAAkB,MAAM,IAAA;AAE9B,IAAM,wBAAA,GAA2C,OAAO,MAAA,CAAO;AAAA,EAC7D,QAAA,EAAU,mBAAA;AAAA,EACV,MAAA,EAAQ,YAAA;AAAA,EACR,OAAA,EAAS,MAAA,CAAO,MAAA,CAAO,EAAE,CAAA;AAAA,EACzB,KAAA,EAAO,QAAA;AAAA,EACP,GAAA,EAAK;AACP,CAAC,CAAA;AAEM,SAAS,iBAAA,GAAoC;AAClD,EAAA,MAAM,aAAA,GAAgBC,IAAI,qBAAqB,CAAA;AAC/C,EAAA,MAAM,eAAA,GAAkBA,IAAI,0BAA0B,CAAA;AAEtD,EAAA,MAAM,cAAA,GAAiB,aAAA,GACnB,cAAA,GACA,eAAA,CAAgB,SAAA;AACpB,EAAA,MAAM,aAAA,GAAgB,aAAA,GAClB,eAAA,GACA,eAAA,CAAgB,WAAA;AAEpB,EAAA,MAAM,eAAA,GAAkBF,oBAAAA;AAAA,IACtB,cAAA;AAAA,IACA,aAAA;AAAA,IACA;AAAA,GACF;AAEA,EAAA,OAAO,iBAAiB,eAAA,IAAmB,wBAAA;AAC7C;AAEO,SAAS,OAAA,CACd,UAAA,GAAyB,YAAA,EACzB,OAAA,EACgB;AAChB,EAAA,MAAM,aAAaG,KAAAA,EAAM;AACzB,EAAA,MAAM,eAAA,GAAkBD,IAAI,0BAA0B,CAAA;AACtD,EAAA,MAAM,UAAU,mBAAA,EAAoB;AAEpC,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIJ,SAA8B,YAAY,CAAA;AAE5E,EAAA,MAAM,GAAA,GAAMM,WAAAA,CAAY,CAAC,OAAA,KAAiC;AACxD,IAAA,IAAI,CAAC,OAAA,IAAW,OAAO,OAAA,KAAY,QAAA,EAAU;AAC7C,IAAA,YAAA,CAAa,CAAC,IAAA,KAAS,kBAAA,CAAmB,IAAA,EAAM,OAAO,CAAC,CAAA;AAAA,EAC1D,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,KAAA,GAAQA,YAAY,MAAM;AAC9B,IAAA,YAAA,CAAa,YAAY,CAAA;AAAA,EAC3B,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,eAAA,GAAkBL,QAAoB,MAAM;AAChD,IAAA,MAAM,OAAO,UAAA,IAAc,YAAA;AAC3B,IAAA,IAAI,OAAO,IAAA,CAAK,SAAS,CAAA,CAAE,MAAA,KAAW,GAAG,OAAO,IAAA;AAChD,IAAA,OAAO,kBAAA,CAAmB,MAAM,SAAS,CAAA;AAAA,EAC3C,CAAA,EAAG,CAAC,UAAA,EAAY,SAAS,CAAC,CAAA;AAE1B,EAAA,MAAM,YAAA,GAAeA,OAAAA;AAAA,IACnB,MACE,OAAA,CAAQ,GAAA;AAAA,MAAI,CAAC,UAAA,KACX,iBAAA,CAAkB,UAAA,EAAY,eAAe;AAAA,KAC/C;AAAA,IACF,CAAC,iBAAiB,OAAO;AAAA,GAC3B;AAEA,EAAA,MAAM,gBAAA,GAAmBA,OAAAA;AAAA,IACvB,MAAM,qBAAqB,OAAO,CAAA;AAAA,IAClC,CAAC,OAAO;AAAA,GACV;AACA,EAAA,WAAA,CAAY,iBAAiB,gBAAgB,CAAA;AAE7C,EAAA,MAAM,OAAA,GAAUA,QAAuB,OAAO,EAAE,KAAI,CAAA,EAAI,CAAC,GAAG,CAAC,CAAA;AAC7D,EAAA,MAAM,oBAA6C,EAAC;AACpD,EAAA,KAAA,IAAS,QAAQ,CAAA,EAAG,KAAA,GAAQ,OAAA,CAAQ,MAAA,EAAQ,SAAS,CAAA,EAAG;AACtD,IAAA,MAAM,UAAA,GAAa,QAAQ,KAAK,CAAA;AAChC,IAAA,IAAI,UAAA,CAAW,MAAM,GAAA,EAAK;AACxB,MAAA,iBAAA,CAAkB,UAAA,CAAW,EAAE,CAAA,GAAI,UAAA,CAAW,IAAA,CAAK,GAAA;AAAA,QACjD,aAAa,KAAK,CAAA;AAAA,QAClB;AAAA,OACF;AAAA,IACF;AAAA,EACF;AACA,EAAA,MAAM,WAAA,GAAc,iBAAiB,iBAAiB,CAAA;AAEtD,EAAA,MAAM,CAAC,KAAK,CAAA,GAAID,QAAAA,CAAS,qBAAqB,CAAA;AAE9C,EAAA,MAAM,UAAA,GAAaC,OAAAA;AAAA,IACjB,OAAO;AAAA,MACL,UAAU,KAAA,CAAM,QAAA;AAAA,MAChB,MAAA,EAAQ,eAAA;AAAA,MACR,OAAA,EAAS,WAAA;AAAA,MACT,KAAA;AAAA,MACA;AAAA,KACF,CAAA;AAAA,IACA,CAAC,eAAA,EAAiB,WAAA,EAAa,KAAA,EAAO,OAAO,GAAG;AAAA,GAClD;AAEA,EAAA,MAAM,aAAA,GAAgBM,OAA8B,UAAU,CAAA;AAE9D,EAAA,yBAAA,CAA0B,MAAM;AAC9B,IAAA,aAAA,CAAc,OAAA,GAAU,UAAA;AACxB,IAAA,KAAA,CAAM,QAAQ,UAAU,CAAA;AACxB,IAAA,eAAA,CAAgB,MAAA,EAAO;AAAA,EACzB,CAAA,EAAG,CAAC,UAAA,EAAY,eAAA,EAAiB,KAAK,CAAC,CAAA;AAEvC,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,eAAA,CAAgB,QAAA,CAAS,YAAY,aAAa,CAAA;AAClD,IAAA,OAAO,MAAM;AACX,MAAA,eAAA,CAAgB,WAAW,UAAU,CAAA;AAAA,IACvC,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,eAAA,EAAiB,UAAU,CAAC,CAAA;AAEhC,EAAA,OAAO,UAAA;AACT;ACnOO,SAAS,aAMd,UAAA,EACgD;AAChD,EAAA,OAAO,MAAA,CAAO,MAAA,CAAO,EAAE,GAAG,YAAY,CAAA;AACxC;AAEA,SAAS,iBAAiB,OAAA,EAAyC;AACjE,EAAA,MAAM,SAAA,GAAY,IAAI,GAAA,CAAI,OAAA,CAAQ,IAAI,CAAC,UAAA,KAAe,UAAA,CAAW,EAAE,CAAC,CAAA;AACpE,EAAA,KAAA,MAAW,EAAE,EAAA,EAAI,IAAA,EAAK,IAAK,OAAA,EAAS;AAClC,IAAA,MAAM,OAAA,GAAA,CAAW,IAAA,IAAQ,EAAC,EAAG,MAAA,CAAO,CAAC,IAAA,KAAS,CAAC,SAAA,CAAU,GAAA,CAAI,IAAI,CAAC,CAAA;AAClE,IAAA,IAAI,OAAA,CAAQ,SAAS,CAAA,EAAG;AACtB,MAAA,MAAA;AAAA,QACE,WAAW,EAAE,CAAA,iCAAA,CAAA;AAAA,QACb,OAAA,CAAQ,KAAK,IAAI,CAAA;AAAA,QACjB;AAAA,OACF;AAAA,IACF;AAAA,EACF;AACF;AAEA,SAAS,gBAAA,CACP,SACA,QAAA,EACiB;AACjB,EAAA,MAAM,MAAA,GAAS,YAAY,OAAO,CAAA;AAClC,EAAA,IAAI,OAAA,CAAQ,GAAA,CAAI,QAAA,KAAa,YAAA,mBAA+B,MAAM,CAAA;AAClE,EAAA,OAAO;AAAA,IACL,QAAA;AAAA,IACA,IAAA,EAAM,IAAI,GAAA,CAAI,MAAA,CAAO,GAAA,CAAI,CAAC,UAAA,KAAe,CAAC,UAAA,CAAW,EAAA,EAAI,UAAU,CAAC,CAAC,CAAA;AAAA,IACrE,WAAA,EAAa,gCAAgC,MAAM,CAAA;AAAA,IACnD,OAAA,EAAS,MAAA,CAAO,MAAA,CAAO,MAAM;AAAA,GAC/B;AACF;AASO,SAAS,UAAA,CAAW;AAAA,EACzB,QAAA,GAAW,mBAAA;AAAA,EACX,QAAA;AAAA,EACA,OAAA,GAAU,aAAA;AAAA,EACV;AACF,CAAA,EAAoB;AAClB,EAAA,MAAM,CAAC,IAAI,CAAA,GAAIP,QAAAA,CAAS,MAAM,gBAAA,CAAiB,OAAA,EAAS,QAAQ,CAAC,CAAA;AACjE,EAAA,MAAM,EAAE,UAAS,GAAI,IAAA;AAErB,EAAA,MAAM,0BACJ,IAAA,CAAA,QAAA,EAAA,EACG,QAAA,EAAA;AAAA,IAAA,IAAA,CAAK,OAAA,CAAQ,GAAA;AAAA,MAAI,CAAC,EAAE,QAAA,EAAU,EAAA,EAAG,KAChC,2BACEG,GAAAA,CAAC,QAAA,EAAA,EAAkB,IAAA,EAAM,IACvB,QAAA,kBAAAA,GAAAA,CAAC,QAAA,EAAA,EAAS,CAAA,EAAA,EADG,EAEf,CAAA,GACE;AAAA,KACN;AAAA,IACC,QAAA;AAAA,IACA,KAAK,OAAA,CAAQ,GAAA;AAAA,MAAI,CAAC,EAAE,OAAA,EAAS,EAAA,EAAG,KAC/B,0BACEA,GAAAA,CAAC,QAAA,EAAA,EAAkB,IAAA,EAAM,IACvB,QAAA,kBAAAA,GAAAA,CAAC,OAAA,EAAA,EAAQ,CAAA,EAAA,EADI,EAEf,CAAA,GACE;AAAA;AACN,GAAA,EACF,CAAA;AAGF,EAAA,MAAM,IAAA,GAAO,KAAK,OAAA,CAAQ,WAAA;AAAA,IACxB,CAAC,KAAA,EAAO,EAAE,QAAA,EAAS,KAAO,2BAAWA,GAAAA,CAAC,QAAA,EAAA,EAAU,QAAA,EAAA,KAAA,EAAM,CAAA,GAAc,KAAA;AAAA,IACpE;AAAA,GACF;AAEA,EAAA,uBACEA,GAAAA;AAAA,IAAC,gBAAA;AAAA,IAAA;AAAA,MACC,aAAa,IAAA,CAAK,WAAA;AAAA,MAClB,cAAA,EAAgB,eAAA;AAAA,MAEhB,QAAA,kBAAAA,IAAC,iBAAA,EAAA,EAAkB,KAAA,EAAO,MACxB,QAAA,kBAAAA,GAAAA,CAAC,sBAAA,EAAA,EAAwB,QAAA,EAAA,IAAA,EAAK,CAAA,EAChC;AAAA;AAAA,GACF;AAEJ;AAEO,SAAS,UACd,EAAA,EACwC;AACxC,EAAA,MAAM,aAAaC,GAAAA,CAAI,iBAAiB,CAAA,EAAG,IAAA,CAAK,IAAI,EAAE,CAAA;AACtD,EAAA,OAAO,YAAY,OAAA,GAAWA,GAAAA,CAAI,UAAA,CAAW,OAAO,KAAK,IAAA,GAAQ,IAAA;AACnE;AAgBO,SAAS,UAAA,CACd,IACA,KAAA,EACe;AACf,EAAA,MAAM,UAAA,GAAa,MACjB,SAAA,CAAU,EAAE,CAAA,IAAK,KAAA;AACnB,EAAA,OAAO;AAAA,IACL,UAAA;AAAA,IACA,UAAA,EAAY,MAAM,UAAA,EAAW,CAAE,OAAA;AAAA,IAC/B,QAAA,EAAU,CACR,QAAA,EACA,OAAA,KAEA,QAAA;AAAA,MACG,YAAW,CAAiD,KAAA;AAAA,MAC7D,QAAA;AAAA,MACA;AAAA;AACF,GACJ;AACF;AAEA,IAAM,eAAA,GAA0C,YAAqB,MAAS,CAAA;AAEvE,SAAS,eACd,EAAA,EACA,QAAA,EACA,QAAA,EACA,OAAA,GAAmC,OAAO,EAAA,EACvC;AACH,EAAA,MAAM,OAAA,GAAU,UAAU,EAAE,CAAA;AAC5B,EAAA,OAAO,QAAA;AAAA,IACL,SAAS,KAAA,IAAS,eAAA;AAAA,IAClB,CAAC,KAAA,KAAW,OAAA,GAAU,QAAA,CAAS,KAAyB,CAAA,GAAI,QAAA;AAAA,IAC5D;AAAA,GACF;AACF;AAEO,SAAS,cAAA,CAAe;AAAA,EAC7B,QAAA;AAAA,EACA;AACF,CAAA,EAGG;AACD,EAAA,MAAM,QAAA,GAAWA,GAAAA,CAAI,iBAAiB,CAAA,EAAG,QAAA,IAAY,mBAAA;AACrD,EAAA,OAAO,aAAA,CAAc,QAAA,EAAU,EAAE,IAAA,IAAQ,QAAQ,CAAA;AACnD;AAEO,SAAS,qBAAqB,EAAA,EAAuB;AAC1D,EAAA,OAAOA,IAAI,iBAAiB,CAAA,EAAG,IAAA,CAAK,GAAA,CAAI,EAAE,CAAA,IAAK,KAAA;AACjD;;;ACvLO,SAAS,qBAAA,CACd,EAAA,EACA,KAAA,EACA,OAAA,EACM;AACN,EAAA,MAAM,UAAA,GAAa,qBAAoB,CAAE,IAAA;AAAA,IACvC,CAAC,SAAA,KAAc,SAAA,CAAU,EAAA,KAAO;AAAA,GAClC;AACA,EAAA,MAAM,MAAA,GACJ,UAAA,IAAc,OAAA,EAAS,OAAA,KAAY,KAAA,IAAS,KAAA,IAAS,IAAA,GAChD,EAAE,CAAC,EAAE,GAAG,KAAA,EAAM,GACf,IAAA;AACN,EAAA,WAAA,CAAY,MAAA,EAAQ,oBAAA,CAAqB,OAAO,CAAC,CAAA;AACnD;ACOO,SAAS,OAAA,CAAQ,EAAE,SAAA,EAAW,QAAA,EAAS,EAA8B;AAC1E,EAAA,OAAO,SAAA,CAAU,WAAA;AAAA,IACf,CAAC,KAAK,KAAA,KAAU;AACd,MAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACxB,QAAA,MAAM,CAACI,UAAAA,EAAW,KAAK,CAAA,GAAI,KAAA;AAC3B,QAAA,OAAOC,aAAAA,CAAcD,UAAAA,EAAW,KAAA,EAAO,GAAG,CAAA;AAAA,MAC5C;AACA,MAAA,MAAM,SAAA,GAAY,KAAA;AAClB,MAAA,OAAOC,aAAAA,CAAc,SAAA,EAAW,IAAA,EAAM,GAAG,CAAA;AAAA,IAC3C,CAAA;AAAA,IACAA,aAAAA,CAAcC,UAAAA,EAAU,IAAA,EAAM,QAAQ;AAAA,GACxC;AACF","file":"chunk-GF7TUX5I.js","sourcesContent":["import type {\n RegistryLifecycle,\n RegistryScopeKind,\n RegistrySource,\n RegistryValidationMode,\n} from \"./types\";\n\nexport const DEFAULT_SOURCE: RegistrySource = \"dynamic\";\n\nexport const REGISTRY_SOURCES: Readonly<Record<string, RegistrySource>> =\n Object.freeze({\n STATIC: \"static\",\n DYNAMIC: \"dynamic\",\n USER: \"user\",\n });\n\nexport const REGISTRY_LIFECYCLES: Readonly<Record<string, RegistryLifecycle>> =\n Object.freeze({\n IMMEDIATE: \"immediate\",\n GRACEFUL: \"graceful\",\n PERSISTENT: \"persistent\",\n ROUTE: \"route\",\n });\n\nexport const REGISTRY_VALIDATION_MODES: Readonly<\n Record<string, RegistryValidationMode>\n> = Object.freeze({\n WARN: \"warn\",\n STRICT: \"strict\",\n});\n\nexport const REGISTRY_METADATA_KEYS: readonly string[] = Object.freeze([\n \"cleanup\",\n \"cleanupDelayMs\",\n \"instanceId\",\n \"lifecycle\",\n \"priority\",\n \"source\",\n \"scope\",\n \"validation\",\n]);\n\nexport const REGISTRY_SOURCE_PRIORITY: Readonly<Record<string, number>> =\n Object.freeze({\n [REGISTRY_SOURCES.STATIC]: 100,\n [REGISTRY_SOURCES.DYNAMIC]: 200,\n [REGISTRY_SOURCES.USER]: 300,\n });\n\nexport const REGISTRY_SOURCE_RANK: Readonly<Record<string, number>> =\n Object.freeze({\n [REGISTRY_SOURCES.STATIC]: 10,\n [REGISTRY_SOURCES.DYNAMIC]: 20,\n [REGISTRY_SOURCES.USER]: 30,\n });\n\nexport const REGISTRY_LIFECYCLE_VALUES: ReadonlySet<string> = new Set(\n Object.values(REGISTRY_LIFECYCLES),\n);\n\nexport const REGISTRY_METADATA_KEY_SET: ReadonlySet<string> = new Set(\n REGISTRY_METADATA_KEYS,\n);\n\nconst REGISTRY_SCOPE_KINDS: Readonly<Record<string, RegistryScopeKind>> =\n Object.freeze({\n APP: \"app\",\n SESSION: \"session\",\n ROUTE: \"route\",\n INSTANCE: \"instance\",\n WORKSPACE: \"workspace\",\n });\n\nexport const DEFAULT_REGISTRY_SCOPE: RegistryScopeKind =\n REGISTRY_SCOPE_KINDS.APP;\n","import { createContext, type Context } from \"react\";\n\nexport function getOrCreateGlobalContext<T>(\n name: string,\n defaultValue: T,\n): Context<T> {\n const sym = Symbol.for(`@omerdlw/base-framework/context/${name}`);\n const store = globalThis as unknown as Record<symbol, Context<T>>;\n if (!store[sym]) {\n store[sym] = createContext<T>(defaultValue);\n }\n return store[sym];\n}\n","import {\n DEFAULT_REGISTRY_SCOPE,\n DEFAULT_SOURCE,\n REGISTRY_SOURCE_RANK,\n} from \"./constants\";\nimport type { RegistryMetadata } from \"./types\";\nimport { isObject, trimToNull } from \"@/utils\";\n\nexport function hasOwnProperty(target: object, key: string): boolean {\n return Object.prototype.hasOwnProperty.call(target, key);\n}\n\nexport function parseFiniteNumber(value: unknown): number | null {\n const parsed = Number(value);\n return Number.isFinite(parsed) ? parsed : null;\n}\n\nexport function getValidString(\n value: unknown,\n fallback: string | null = null,\n): string | null {\n return trimToNull(value) ?? fallback;\n}\n\nexport function resolveInstanceId(value: unknown): string | null {\n return isObject(value) && typeof value.instanceId === \"string\"\n ? value.instanceId\n : null;\n}\n\nexport function getSourceRank(source: string): number {\n return REGISTRY_SOURCE_RANK[source] ?? 0;\n}\n\nexport function resolveRegisterInput(\n sourceOrOptions: unknown,\n optionsArg?: unknown,\n): { source: string; options: RegistryMetadata } {\n if (typeof sourceOrOptions === \"string\") {\n return {\n source: sourceOrOptions,\n options: isObject(optionsArg) ? optionsArg : {},\n };\n }\n if (isObject(sourceOrOptions)) {\n return {\n source:\n typeof sourceOrOptions.source === \"string\"\n ? sourceOrOptions.source\n : DEFAULT_SOURCE,\n options: sourceOrOptions,\n };\n }\n return {\n source: DEFAULT_SOURCE,\n options: isObject(optionsArg) ? optionsArg : {},\n };\n}\n\nexport function resolveScope(\n options: RegistryMetadata | null | undefined,\n): string {\n return typeof options?.scope === \"string\" && options.scope.trim()\n ? options.scope.trim()\n : DEFAULT_REGISTRY_SCOPE;\n}\n\nexport function resolveUnregisterInput(sourceOrOptions: unknown): {\n instanceId: string | null;\n scope: string | null;\n source: string;\n} {\n if (typeof sourceOrOptions === \"string\") {\n return { instanceId: null, scope: null, source: sourceOrOptions };\n }\n if (isObject(sourceOrOptions)) {\n return {\n instanceId: resolveInstanceId(sourceOrOptions),\n scope:\n typeof sourceOrOptions.scope === \"string\" &&\n sourceOrOptions.scope.trim()\n ? sourceOrOptions.scope.trim()\n : null,\n source:\n typeof sourceOrOptions.source === \"string\"\n ? sourceOrOptions.source\n : DEFAULT_SOURCE,\n };\n }\n return { instanceId: null, scope: null, source: DEFAULT_SOURCE };\n}\n\nexport function mergeModuleConfigs<T extends object>(\n base: T,\n patch: Partial<T>,\n): T {\n const source = base as Record<string, unknown>;\n const changes = patch as Record<string, unknown>;\n const result: Record<string, unknown> = { ...source };\n Object.keys(changes).forEach((key) => {\n const baseVal = source[key];\n const patchVal = changes[key];\n if (\n baseVal &&\n typeof baseVal === \"object\" &&\n !Array.isArray(baseVal) &&\n patchVal &&\n typeof patchVal === \"object\" &&\n !Array.isArray(patchVal)\n ) {\n result[key] = { ...baseVal, ...patchVal };\n } else {\n result[key] = patchVal;\n }\n });\n return result as T;\n}\n","import {\n DEFAULT_SOURCE,\n REGISTRY_LIFECYCLE_VALUES,\n REGISTRY_LIFECYCLES,\n REGISTRY_METADATA_KEY_SET,\n REGISTRY_METADATA_KEYS,\n REGISTRY_VALIDATION_MODES,\n} from \"./constants\";\nimport { isObject, isPlainObject } from \"@/utils\";\nimport { getValidString, parseFiniteNumber } from \"./utils\";\nimport type {\n NormalizedRegistryMetadata,\n RegistryDefinitions,\n RegistryLifecycle,\n RegistryMetadata,\n RegistryValidationMode,\n ValidationResult,\n} from \"./types\";\n\nfunction resolveLifecycle(\n metadata: RegistryMetadata | null | undefined,\n fallback: RegistryLifecycle | null,\n): RegistryLifecycle | null {\n const lifecycle = metadata?.lifecycle ?? metadata?.cleanup;\n return lifecycle && REGISTRY_LIFECYCLE_VALUES.has(lifecycle)\n ? lifecycle\n : fallback;\n}\n\nexport function validateRegistryMetadata(metadata: unknown): ValidationResult {\n if (metadata === undefined || metadata === null)\n return { issues: [], valid: true };\n if (!isObject(metadata))\n return { issues: [\"registry metadata must be an object\"], valid: false };\n\n const issues: string[] = [];\n\n Object.keys(metadata).forEach((key) => {\n if (!REGISTRY_METADATA_KEY_SET.has(key))\n issues.push(`unknown registry metadata field: ${key}`);\n });\n\n if (metadata.source !== undefined && !getValidString(metadata.source))\n issues.push(\"source must be a non-empty string\");\n if (metadata.instanceId !== undefined && !getValidString(metadata.instanceId))\n issues.push(\"instanceId must be a non-empty string\");\n if (metadata.scope !== undefined && !getValidString(metadata.scope))\n issues.push(\"scope must be a non-empty string\");\n if (\n metadata.priority !== undefined &&\n parseFiniteNumber(metadata.priority) === null\n )\n issues.push(\"priority must be a finite number\");\n\n if (metadata.cleanupDelayMs !== undefined) {\n const delay = parseFiniteNumber(metadata.cleanupDelayMs);\n if (delay === null || delay < 0)\n issues.push(\"cleanupDelayMs must be a non-negative finite number\");\n }\n\n const lifecycle = metadata.lifecycle ?? metadata.cleanup;\n if (\n lifecycle !== undefined &&\n !REGISTRY_LIFECYCLE_VALUES.has(String(lifecycle))\n ) {\n issues.push(\n `lifecycle must be one of: ${[...REGISTRY_LIFECYCLE_VALUES].join(\", \")}`,\n );\n }\n\n if (\n metadata.validation !== undefined &&\n !Object.values<unknown>(REGISTRY_VALIDATION_MODES).includes(\n metadata.validation,\n )\n ) {\n issues.push(\n `validation must be one of: ${Object.values(REGISTRY_VALIDATION_MODES).join(\", \")}`,\n );\n }\n\n return { issues, valid: issues.length === 0 };\n}\n\nexport function validateRegistryKey(\n type: string,\n key: unknown,\n definitions: RegistryDefinitions,\n): ValidationResult {\n const definition = definitions.get(type);\n const issues: string[] = [];\n\n if (!definition) issues.push(`unknown registry type: ${String(type)}`);\n if (!getValidString(key))\n return {\n issues: [...issues, \"key must be a non-empty string\"],\n valid: false,\n };\n\n const normalizedKey = String(key).trim();\n\n if (definition?.keyPolicy === \"singleton\") {\n const expectedKey = definition.singletonKey;\n if (expectedKey && normalizedKey !== expectedKey)\n issues.push(`${type} key must be ${expectedKey}`);\n } else if (definition?.keyPolicy === \"path\") {\n if (!normalizedKey.startsWith(\"/\"))\n issues.push(`${type} key must be an absolute path`);\n } else if (definition?.keyPolicy === \"route\") {\n if (\n !normalizedKey.startsWith(\"/\") &&\n !definition.reservedKeys?.includes(normalizedKey)\n ) {\n issues.push(`${type} key must be a route path or a reserved route key`);\n }\n }\n\n return { issues, valid: issues.length === 0 };\n}\n\nexport function validateRegistryValue(\n type: string,\n key: unknown,\n value: unknown,\n definitions: RegistryDefinitions,\n): ValidationResult {\n const definition = definitions.get(type);\n const issues = [...validateRegistryKey(type, key, definitions).issues];\n const valueKind = definition?.valueKind ?? \"object\";\n\n if (definition && valueKind === \"object\" && !isPlainObject(value)) {\n issues.push(`${type} values must be plain objects`);\n }\n if (\n definition &&\n valueKind === \"component\" &&\n typeof value !== \"function\" &&\n !isPlainObject(value)\n ) {\n issues.push(\n `${type} values must be component functions or component objects`,\n );\n }\n\n const validation = definition?.validate?.(value);\n if (validation && !validation.valid && Array.isArray(validation.issues)) {\n issues.push(...validation.issues);\n }\n\n return { issues, valid: issues.length === 0 };\n}\n\nexport function normalizeRegistryMetadata(\n metadata: unknown,\n {\n defaultCleanupDelayMs = null,\n defaultLifecycle = null,\n defaultSource = DEFAULT_SOURCE,\n }: {\n defaultCleanupDelayMs?: number | null;\n defaultLifecycle?: RegistryLifecycle | null;\n defaultSource?: string;\n } = {},\n): NormalizedRegistryMetadata {\n const registryMeta = isObject(metadata) ? metadata : {};\n\n const normalizedDefaultDelay = parseFiniteNumber(defaultCleanupDelayMs);\n const fallbackCleanupDelayMs =\n normalizedDefaultDelay !== null && normalizedDefaultDelay >= 0\n ? normalizedDefaultDelay\n : null;\n const fallbackLifecycle =\n defaultLifecycle && REGISTRY_LIFECYCLE_VALUES.has(defaultLifecycle)\n ? defaultLifecycle\n : null;\n\n const source =\n getValidString(registryMeta.source) ||\n getValidString(defaultSource, DEFAULT_SOURCE) ||\n DEFAULT_SOURCE;\n const scope = getValidString(registryMeta.scope);\n const priority = parseFiniteNumber(registryMeta.priority);\n const lifecycle = resolveLifecycle(registryMeta, fallbackLifecycle);\n const validation = isValidationMode(registryMeta.validation)\n ? registryMeta.validation\n : null;\n\n const cleanupDelayCandidate = parseFiniteNumber(registryMeta.cleanupDelayMs);\n let cleanupDelayMs =\n cleanupDelayCandidate !== null && cleanupDelayCandidate >= 0\n ? cleanupDelayCandidate\n : fallbackCleanupDelayMs;\n\n if (lifecycle === REGISTRY_LIFECYCLES.IMMEDIATE) {\n cleanupDelayMs = 0;\n } else if (\n (lifecycle === REGISTRY_LIFECYCLES.GRACEFUL ||\n lifecycle === REGISTRY_LIFECYCLES.ROUTE) &&\n cleanupDelayMs === null\n ) {\n cleanupDelayMs = fallbackCleanupDelayMs;\n }\n\n return {\n cleanupDelayMs,\n lifecycle,\n priority,\n registerOptions: {\n ...(priority !== null && { priority }),\n ...(validation === REGISTRY_VALIDATION_MODES.STRICT && { validation }),\n ...(scope && { scope }),\n },\n source,\n ...(scope && { scope }),\n ...(validation && { validation }),\n };\n}\n\nfunction isValidationMode(value: unknown): value is RegistryValidationMode {\n return Object.values<unknown>(REGISTRY_VALIDATION_MODES).includes(value);\n}\n\nexport function pickRegistryMetadata(options: unknown): RegistryMetadata {\n if (!isObject(options)) return {};\n return Object.fromEntries(\n REGISTRY_METADATA_KEYS.filter((key) => options[key] !== undefined).map(\n (key) => [key, options[key]],\n ),\n );\n}\n","import {\n DEFAULT_REGISTRY_SCOPE,\n DEFAULT_SOURCE,\n REGISTRY_SOURCE_PRIORITY,\n} from \"./constants\";\nimport { isObject, shallowEqual } from \"@/utils\";\nimport {\n getSourceRank,\n hasOwnProperty,\n resolveInstanceId,\n resolveRegisterInput,\n resolveScope,\n resolveUnregisterInput,\n} from \"./utils\";\nimport { validateRegistryKey } from \"./schema\";\nimport type {\n RegisterOperation,\n RegistryDefinitions,\n RegistryEntryRecords,\n RegistryMetadata,\n RegistryOperation,\n RegistrySourceOrOptions,\n RegistryState,\n SourceRecord,\n UnregisterOperation,\n} from \"./types\";\n\ntype MaybeEntry = RegistryEntryRecords | null | undefined;\n\nfunction createInitialRegistriesFor(\n definitions: RegistryDefinitions,\n): RegistryState {\n return Object.fromEntries(\n Array.from(definitions.keys(), (type) => [type, {}]),\n );\n}\n\nfunction buildSourceRecord({\n source,\n value,\n instanceId = null,\n priority,\n timestamp,\n sequence,\n scope = DEFAULT_REGISTRY_SCOPE,\n}: {\n source: string;\n value: unknown;\n instanceId?: string | null;\n priority: number;\n timestamp: number;\n sequence?: number;\n scope?: string;\n}): SourceRecord {\n return {\n updatedAt: timestamp,\n sequence: Number.isFinite(sequence) ? (sequence as number) : timestamp,\n instanceId: typeof instanceId === \"string\" ? instanceId : null,\n priority,\n value,\n source,\n scope,\n };\n}\n\nexport function createRecordKey(\n source: string,\n instanceId: string | null = null,\n scope: string = DEFAULT_REGISTRY_SCOPE,\n): string {\n if (scope === DEFAULT_REGISTRY_SCOPE) {\n if (typeof instanceId === \"string\" && instanceId.length > 0) {\n return `instance:${JSON.stringify([source, instanceId])}`;\n }\n return `source:${JSON.stringify(source)}`;\n }\n if (typeof instanceId === \"string\" && instanceId.length > 0) {\n return `instance:${JSON.stringify([scope, source, instanceId])}`;\n }\n return `source:${JSON.stringify([scope, source])}`;\n}\n\nfunction getSourceRecords(\n entry: MaybeEntry,\n source: string,\n scope: string | null = null,\n): { recordKey: string; record: SourceRecord | null }[] {\n if (!entry) return [];\n return Object.entries(entry)\n .map(([recordKey, rawRecord]) => ({\n recordKey,\n record: toSourceRecord(rawRecord, recordKey),\n }))\n .filter(\n ({ record }) =>\n record?.source === source && (scope === null || record.scope === scope),\n );\n}\n\nfunction getSourceRecord(\n entry: MaybeEntry,\n source: string,\n instanceId: string | null = null,\n scope: string = DEFAULT_REGISTRY_SCOPE,\n): SourceRecord | null {\n const recordKey = createRecordKey(source, instanceId, scope);\n return toSourceRecord(entry?.[recordKey], source);\n}\n\nfunction resolveRecordPriority(options: unknown, source: string): number {\n if (isObject(options) && hasOwnProperty(options, \"priority\")) {\n const parsedPriority = Number(options.priority);\n if (Number.isFinite(parsedPriority)) return parsedPriority;\n }\n return REGISTRY_SOURCE_PRIORITY[source] ?? 0;\n}\n\nfunction toSourceRecord(\n rawValue: unknown,\n source: string = DEFAULT_SOURCE,\n): SourceRecord | null {\n if (rawValue === undefined) return null;\n const rawRecord = rawValue as Record<string, unknown>;\n\n const isWrappedRecord =\n isObject(rawValue) &&\n hasOwnProperty(rawRecord, \"value\") &&\n hasOwnProperty(rawRecord, \"updatedAt\") &&\n hasOwnProperty(rawRecord, \"priority\") &&\n hasOwnProperty(rawRecord, \"source\");\n\n if (isWrappedRecord) {\n const parsedPriority = Number(rawRecord.priority);\n return {\n updatedAt: Number(rawRecord.updatedAt) || 0,\n sequence: Number(rawRecord.sequence) || Number(rawRecord.updatedAt) || 0,\n instanceId:\n typeof rawRecord.instanceId === \"string\" ? rawRecord.instanceId : null,\n priority: Number.isFinite(parsedPriority)\n ? parsedPriority\n : (REGISTRY_SOURCE_PRIORITY[source] ?? 0),\n source: typeof rawRecord.source === \"string\" ? rawRecord.source : source,\n scope:\n typeof rawRecord.scope === \"string\"\n ? rawRecord.scope\n : DEFAULT_REGISTRY_SCOPE,\n value: rawRecord.value,\n };\n }\n\n return {\n updatedAt: 0,\n sequence: 0,\n instanceId: null,\n priority: REGISTRY_SOURCE_PRIORITY[source] ?? 0,\n source,\n scope: DEFAULT_REGISTRY_SCOPE,\n value: rawValue,\n };\n}\n\nfunction compareRecords(a: SourceRecord, b: SourceRecord): number {\n if (a.priority !== b.priority) return a.priority - b.priority;\n const rankDiff = getSourceRank(a.source) - getSourceRank(b.source);\n if (rankDiff !== 0) return rankDiff;\n return (a.sequence ?? a.updatedAt) - (b.sequence ?? b.updatedAt);\n}\n\nfunction recordsHaveSameValue(\n prevRecord: SourceRecord | null,\n nextRecord: SourceRecord,\n): boolean {\n if (Object.is(prevRecord?.value, nextRecord?.value)) return true;\n if (isObject(prevRecord?.value) && isObject(nextRecord?.value)) {\n return shallowEqual(prevRecord!.value, nextRecord.value);\n }\n return false;\n}\n\nfunction hasRecordChanged(\n prevRecord: SourceRecord | null,\n nextRecord: SourceRecord,\n): boolean {\n if (!prevRecord) return true;\n return (\n prevRecord.priority !== nextRecord.priority ||\n prevRecord.source !== nextRecord.source ||\n prevRecord.instanceId !== nextRecord.instanceId ||\n prevRecord.scope !== nextRecord.scope ||\n !recordsHaveSameValue(prevRecord, nextRecord)\n );\n}\n\nfunction hasAnySourceRecord(entry: MaybeEntry): boolean {\n return Object.values(entry || {}).some(\n (rawRecord) => rawRecord !== undefined,\n );\n}\n\nfunction setSourceRecord(\n state: RegistryState,\n type: string,\n key: string,\n source: string,\n record: SourceRecord,\n): RegistryState {\n const typeRegistry = state[type] || {};\n const currentEntry = typeRegistry[key] || {};\n const recordKey = createRecordKey(source, record.instanceId, record.scope);\n const prevRecord = toSourceRecord(currentEntry[recordKey], source);\n\n if (!hasRecordChanged(prevRecord, record)) {\n return state;\n }\n\n return {\n ...state,\n [type]: {\n ...typeRegistry,\n [key]: {\n ...currentEntry,\n [recordKey]: record,\n },\n },\n };\n}\n\nfunction removeSourceRecord(\n state: RegistryState,\n type: string,\n key: string,\n source: string,\n instanceId: string | null = null,\n scope: string | null = null,\n): RegistryState {\n const typeRegistry = state[type];\n const currentEntry = typeRegistry?.[key];\n if (!typeRegistry || !currentEntry) return state;\n\n let activeRecords: { recordKey: string; record: SourceRecord }[] = [];\n\n if (\n typeof instanceId === \"string\" &&\n instanceId.length > 0 &&\n scope !== null\n ) {\n const safeScope = scope || DEFAULT_REGISTRY_SCOPE;\n const recordKey = createRecordKey(source, instanceId, safeScope);\n const record = getSourceRecord(currentEntry, source, instanceId, safeScope);\n\n if (record) activeRecords.push({ recordKey, record });\n } else {\n activeRecords = getSourceRecords(currentEntry, source, scope)\n .filter(({ record }) => !instanceId || record?.instanceId === instanceId)\n .filter((entry): entry is { recordKey: string; record: SourceRecord } =>\n Boolean(entry.record),\n );\n }\n\n if (activeRecords.length === 0) return state;\n\n const nextEntry = { ...currentEntry };\n activeRecords.forEach(({ recordKey }) => {\n delete nextEntry[recordKey];\n });\n\n if (!hasAnySourceRecord(nextEntry)) {\n const nextTypeRegistry = { ...typeRegistry };\n delete nextTypeRegistry[key];\n return { ...state, [type]: nextTypeRegistry };\n }\n\n return {\n ...state,\n [type]: { ...typeRegistry, [key]: nextEntry },\n };\n}\n\nfunction resolveEntryValueFor(\n definitions: RegistryDefinitions,\n type: string,\n entry: MaybeEntry,\n scope: string | null = null,\n): unknown {\n if (!entry) return undefined;\n\n const activeRecords = Object.entries(entry)\n .map(([source, rawRecord]) => toSourceRecord(rawRecord, source))\n .filter(\n (record): record is SourceRecord =>\n record !== null && (scope === null || record.scope === scope),\n );\n\n if (activeRecords.length === 0) return undefined;\n\n const merge = definitions.get(type)?.merge;\n if (merge) {\n const sortedRecords = [...activeRecords].sort(compareRecords);\n const mergeCandidate = sortedRecords.every((record) =>\n isObject(record.value),\n );\n\n if (mergeCandidate) {\n const values = sortedRecords.map(\n (record) => record.value as Record<string, unknown>,\n );\n return merge(values);\n }\n return sortedRecords[sortedRecords.length - 1].value;\n }\n\n return activeRecords.reduce((winner, current) =>\n compareRecords(current, winner) > 0 ? current : winner,\n ).value;\n}\n\nfunction createResolverCacheFor(\n definitions: RegistryDefinitions,\n): (type: string, entry: MaybeEntry, scope?: string | null) => unknown {\n const entryCache = new WeakMap<object, Map<string, unknown>>();\n\n return (type: string, entry: MaybeEntry, scope: string | null = null) => {\n if (!entry || typeof entry !== \"object\") {\n return resolveEntryValueFor(definitions, type, entry, scope);\n }\n\n let typeCache = entryCache.get(entry);\n if (!typeCache) {\n typeCache = new Map();\n entryCache.set(entry, typeCache);\n }\n\n const cacheKey = scope || \"default\";\n\n if (typeCache.has(cacheKey)) return typeCache.get(cacheKey);\n\n const value = resolveEntryValueFor(definitions, type, entry, scope);\n typeCache.set(cacheKey, value);\n return value;\n };\n}\n\nexport function createRegisterOperation(\n type: string,\n key: string,\n item: unknown,\n sourceOrOptions: RegistrySourceOrOptions | undefined,\n optionsArg: RegistryMetadata | undefined,\n timestamp: number,\n sequence: number = timestamp,\n): RegisterOperation {\n const { source, options } = resolveRegisterInput(sourceOrOptions, optionsArg);\n const instanceId = resolveInstanceId(options);\n const scope = resolveScope(options);\n\n return {\n kind: \"register\",\n validation: options.validation,\n source,\n scope,\n record: buildSourceRecord({\n source,\n value: item,\n instanceId,\n priority: resolveRecordPriority(options, source),\n scope,\n timestamp,\n sequence,\n }),\n instanceId,\n type,\n key: typeof key === \"string\" ? key.trim() : key,\n };\n}\n\nexport function createUnregisterOperation(\n type: string,\n key: string,\n sourceOrOptions: RegistrySourceOrOptions | undefined,\n): UnregisterOperation {\n const { scope, source, instanceId } = resolveUnregisterInput(sourceOrOptions);\n return {\n kind: \"unregister\",\n instanceId,\n scope,\n source,\n type,\n key: typeof key === \"string\" ? key.trim() : key,\n };\n}\n\nfunction isValidRegistryTargetFor(\n definitions: RegistryDefinitions,\n type: string,\n key: unknown,\n): boolean {\n return validateRegistryKey(type, key, definitions).valid;\n}\n\nfunction applyOperationFor(\n definitions: RegistryDefinitions,\n state: RegistryState,\n operation: RegistryOperation,\n): RegistryState {\n if (!isValidRegistryTargetFor(definitions, operation?.type, operation?.key))\n return state;\n\n if (operation.kind === \"register\") {\n return setSourceRecord(\n state,\n operation.type,\n operation.key,\n operation.source,\n operation.record,\n );\n }\n if (operation.kind === \"unregister\") {\n return removeSourceRecord(\n state,\n operation.type,\n operation.key,\n operation.source,\n operation.instanceId,\n operation.scope,\n );\n }\n return state;\n}\n\nfunction hasOperationEffectFor(\n definitions: RegistryDefinitions,\n state: RegistryState,\n operation: RegistryOperation,\n): boolean {\n if (!isValidRegistryTargetFor(definitions, operation?.type, operation?.key))\n return false;\n\n if (operation.kind === \"register\") {\n const currentRecord = getSourceRecord(\n state[operation.type]?.[operation.key],\n operation.source,\n operation.instanceId,\n operation.scope,\n );\n return hasRecordChanged(currentRecord, operation.record);\n }\n\n if (operation.kind === \"unregister\") {\n const entry = state[operation.type]?.[operation.key];\n if (\n typeof operation.instanceId === \"string\" &&\n operation.instanceId.length > 0\n ) {\n return operation.scope === null\n ? getSourceRecords(entry, operation.source).some(\n ({ record }) => record?.instanceId === operation.instanceId,\n )\n : Boolean(\n getSourceRecord(\n entry,\n operation.source,\n operation.instanceId,\n operation.scope,\n ),\n );\n }\n return (\n getSourceRecords(entry, operation.source, operation.scope).length > 0\n );\n }\n return false;\n}\n\nfunction resolveEffectiveOperationsFor(\n definitions: RegistryDefinitions,\n state: RegistryState,\n operations: RegistryOperation[],\n): { effectiveOperations: RegistryOperation[]; nextState: RegistryState } {\n const effectiveOperations: RegistryOperation[] = [];\n let nextState = state;\n\n operations.forEach((operation) => {\n if (!hasOperationEffectFor(definitions, nextState, operation)) return;\n effectiveOperations.push(operation);\n nextState = applyOperationFor(definitions, nextState, operation);\n });\n\n return { effectiveOperations, nextState };\n}\n\nexport function createRegistryOperations(definitions: RegistryDefinitions) {\n return Object.freeze({\n applyOperation: (state: RegistryState, operation: RegistryOperation) =>\n applyOperationFor(definitions, state, operation),\n createInitialRegistries: () => createInitialRegistriesFor(definitions),\n createResolverCache: () => createResolverCacheFor(definitions),\n hasOperationEffect: (state: RegistryState, operation: RegistryOperation) =>\n hasOperationEffectFor(definitions, state, operation),\n isRegistryType: (type: string) => definitions.get(type) !== undefined,\n isValidRegistryTarget: (type: string, key: unknown) =>\n isValidRegistryTargetFor(definitions, type, key),\n resolveEffectiveOperations: (\n state: RegistryState,\n operations: RegistryOperation[],\n ) => resolveEffectiveOperationsFor(definitions, state, operations),\n resolveEntryValue: (\n type: string,\n entry: MaybeEntry,\n scope: string | null = null,\n ) => resolveEntryValueFor(definitions, type, entry, scope),\n });\n}\n\nexport type RegistryOperations = ReturnType<typeof createRegistryOperations>;\n","\"use client\";\n\nimport type {\n RegistrationHandle,\n RegistryMetadata,\n RegistryTransactionQueue,\n RegistryTransactionRef,\n RegistryTransactionResult,\n} from \"./types\";\n\ninterface QueuedOperation {\n key: string;\n options: RegistryMetadata;\n type: string;\n item?: unknown;\n unregister?: true;\n}\n\ntype TransactionStatus = \"open\" | \"committed\" | \"rolled-back\";\n\nexport interface RegistryTransaction extends RegistryTransactionQueue {\n commit: () => RegistryTransactionResult;\n readonly operations: readonly QueuedOperation[];\n rollback: (reason?: string) => RegistryTransactionRef;\n run: (\n executor: (queue: RegistryTransactionQueue) => void,\n ) => RegistryTransactionResult;\n readonly status: TransactionStatus;\n traceId: string;\n}\n\ninterface TransactionBatchQueue {\n register: (\n type: string,\n key: string,\n value: unknown,\n options?: RegistryMetadata,\n ) => RegistrationHandle;\n unregister: (type: string, key: string, options?: RegistryMetadata) => void;\n}\n\ninterface TransactionStore {\n batch: (executor: (queue: TransactionBatchQueue) => void) => unknown;\n}\n\nexport function createRegistryTransaction(\n store: TransactionStore,\n metadata: RegistryMetadata & { source?: string; traceId?: string } = {},\n): RegistryTransaction {\n const operations: QueuedOperation[] = [];\n let status: TransactionStatus = \"open\";\n const traceId =\n metadata.traceId ||\n `tx-${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 8)}`;\n\n const ensureOpen = () => status === \"open\";\n\n const mergeOptions = (\n options: RegistryMetadata | undefined,\n ): RegistryMetadata => {\n const baseOpts = options && typeof options === \"object\" ? options : {};\n const needsSource = metadata.source && !baseOpts.source;\n const needsScope = metadata.scope && !baseOpts.scope;\n\n if (!needsSource && !needsScope) return baseOpts;\n\n return {\n ...baseOpts,\n ...(needsSource ? { source: metadata.source } : {}),\n ...(needsScope ? { scope: metadata.scope } : {}),\n };\n };\n\n const register: RegistryTransactionQueue[\"register\"] = (\n type,\n key,\n value,\n sourceOrOptions,\n optionsArg,\n ) => {\n if (!ensureOpen()) return { index: -1, status, traceId };\n\n const options =\n typeof sourceOrOptions === \"string\"\n ? mergeOptions({ ...(optionsArg || {}), source: sourceOrOptions })\n : mergeOptions(sourceOrOptions as RegistryMetadata | undefined);\n\n operations.push({ key, item: value, options, type });\n return { index: operations.length - 1, status: \"queued\", traceId };\n };\n\n const unregister: RegistryTransactionQueue[\"unregister\"] = (\n type,\n key,\n sourceOrOptions,\n ) => {\n if (!ensureOpen()) return { index: -1, status, traceId };\n\n const options = mergeOptions(\n typeof sourceOrOptions === \"string\"\n ? { source: sourceOrOptions }\n : (sourceOrOptions as RegistryMetadata | undefined),\n );\n\n operations.push({ key, options, type, unregister: true });\n return { index: operations.length - 1, status: \"queued\", traceId };\n };\n\n const rollback = (_reason = \"manual\"): RegistryTransactionRef => {\n if (!ensureOpen()) return { index: -1, status, traceId };\n\n status = \"rolled-back\";\n operations.length = 0;\n return { index: -1, status, traceId };\n };\n\n const commit = (): RegistryTransactionResult => {\n if (!ensureOpen()) return { status, traceId };\n\n status = \"committed\";\n const result = store.batch((queue) => {\n operations.forEach((op) => {\n if (op.unregister) queue.unregister(op.type, op.key, op.options);\n else queue.register(op.type, op.key, op.item, op.options);\n });\n });\n\n const applied =\n typeof result === \"number\" && Number.isFinite(result) ? result : 0;\n return { applied, queued: operations.length, status, traceId };\n };\n\n const run = (\n executor: (queue: RegistryTransactionQueue) => void,\n ): RegistryTransactionResult => {\n if (typeof executor !== \"function\") {\n rollback(\"invalid-executor\");\n return { status, traceId };\n }\n try {\n executor({ register, unregister });\n return commit();\n } catch (error) {\n rollback(error instanceof Error ? error.message : String(error));\n throw error;\n }\n };\n\n return {\n commit,\n get operations() {\n return operations.slice();\n },\n register,\n rollback,\n run,\n get status() {\n return status;\n },\n traceId,\n unregister,\n };\n}\n","import { isValidElement } from \"react\";\nimport {\n createRecordKey,\n createRegisterOperation,\n createRegistryOperations,\n createUnregisterOperation,\n type RegistryOperations,\n} from \"./operations\";\nimport {\n DEFAULT_SOURCE,\n REGISTRY_SOURCES,\n REGISTRY_VALIDATION_MODES,\n} from \"./constants\";\nimport {\n validateRegistryMetadata,\n validateRegistryValue,\n} from \"./schema\";\nimport { createRegistryTransaction } from \"./runtime\";\nimport type {\n AppRegistryEntry,\n RegisterOperation,\n RegistrationHandle,\n RegistryDefinitions,\n RegistryMetadata,\n RegistryOperation,\n RegistryQueue,\n RegistrySourceOrOptions,\n RegistryState,\n RegistryStore,\n RegistryTransactionQueue,\n} from \"./types\";\nimport { report } from \"@/utils\";\n\nexport type InitialRegistryEntries = readonly AppRegistryEntry[];\n\nconst NO_DEFINITIONS: RegistryDefinitions = new Map();\n\nfunction createNoopHandle(\n status: RegistrationHandle[\"status\"] = \"rejected\",\n reason = \"unknown\",\n): RegistrationHandle {\n const handle: RegistrationHandle = Object.assign(() => false, {\n active: false,\n dispose: () => false,\n instanceId: null,\n key: \"\",\n priority: 0,\n reason,\n source: \"\",\n status,\n type: \"\",\n update: (): RegistrationHandle => handle,\n updatedAt: 0,\n validation: \"warn\",\n });\n return handle;\n}\n\nconst NOOP_HANDLE: RegistrationHandle = createNoopHandle();\n\nfunction isNoopHandle(handle: RegistrationHandle | null | undefined): boolean {\n return (\n handle === NOOP_HANDLE ||\n handle?.status === \"rejected\" ||\n handle?.status === \"ignored\"\n );\n}\n\nfunction cloneRegistryValue<T>(\n value: T,\n seen = new WeakMap<object, unknown>(),\n): T {\n if (value === null || typeof value !== \"object\" || isValidElement(value)) {\n return value;\n }\n\n const prototype = Object.getPrototypeOf(value);\n const isPlainObject =\n !Array.isArray(value) &&\n (prototype === Object.prototype || prototype === null);\n\n if (!Array.isArray(value) && !isPlainObject) return value;\n if (seen.has(value)) return seen.get(value) as T;\n\n const source = value as Record<string, unknown>;\n const clone = (Array.isArray(value) ? [] : {}) as Record<string, unknown>;\n seen.set(value, clone);\n\n for (const key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n clone[key] = cloneRegistryValue(source[key], seen);\n }\n }\n\n return clone as T;\n}\n\nfunction normalizeInitialEntries(entries: unknown): AppRegistryEntry[] {\n return (Array.isArray(entries) ? entries : []).filter(\n (entry): entry is AppRegistryEntry =>\n entry?.type && entry?.items && typeof entry.items === \"object\",\n );\n}\n\nfunction createInitialState(\n ops: RegistryOperations,\n definitions: RegistryDefinitions,\n entries: unknown,\n): RegistryState {\n const normalizedEntries = normalizeInitialEntries(entries);\n if (normalizedEntries.length === 0) return ops.createInitialRegistries();\n\n const timestamp = Date.now();\n let sequence = 0;\n let state = ops.createInitialRegistries();\n\n normalizedEntries.forEach((entry) => {\n const source = entry.source || REGISTRY_SOURCES.STATIC;\n const options: RegistryMetadata = {\n ...(entry.options || {}),\n instanceId:\n entry.instanceId || entry.options?.instanceId || \"registry-initial\",\n };\n\n Object.entries(entry.items).forEach(([key, value]) => {\n const validation = validateRegistration(\n definitions,\n entry.type,\n key,\n value,\n source,\n options,\n );\n if (!validation.valid) return;\n\n const operation = createRegisterOperation(\n entry.type,\n key,\n cloneRegistryValue(value),\n source,\n options,\n timestamp,\n ++sequence,\n );\n if (ops.hasOperationEffect(state, operation)) {\n state = ops.applyOperation(state, operation);\n }\n });\n });\n return state;\n}\n\nfunction notifyListeners(listeners: Set<() => void> | undefined): void {\n if (!listeners) return;\n for (const listener of listeners) {\n try {\n listener();\n } catch (error) {\n report(\"Registry listener\", error);\n }\n }\n}\n\nfunction getOrCreateKeyListeners(\n listenersByType: Map<string, Map<string | null, Set<() => void>>>,\n type: string,\n key: string | null,\n): Set<() => void> {\n let listeners = listenersByType.get(type);\n if (!listeners) {\n listeners = new Map();\n listenersByType.set(type, listeners);\n }\n let keyListeners = listeners.get(key);\n if (!keyListeners) {\n keyListeners = new Set();\n listeners.set(key, keyListeners);\n }\n return keyListeners;\n}\n\nfunction resolveRegistrationOptions(\n sourceOrOptions: RegistrySourceOrOptions | undefined,\n optionsArg?: RegistryMetadata,\n): RegistryMetadata {\n if (sourceOrOptions && typeof sourceOrOptions === \"object\")\n return sourceOrOptions;\n return optionsArg && typeof optionsArg === \"object\" ? optionsArg : {};\n}\n\nfunction validateRegistration(\n definitions: RegistryDefinitions,\n type: string,\n key: string,\n value: unknown,\n sourceOrOptions: RegistrySourceOrOptions | undefined,\n optionsArg?: RegistryMetadata,\n): { issues?: string[]; reason?: string; valid: boolean } {\n const options = resolveRegistrationOptions(sourceOrOptions, optionsArg);\n const metadataValidation = validateRegistryMetadata(options);\n const isStrict = options.validation === REGISTRY_VALIDATION_MODES.STRICT;\n\n if (!metadataValidation.valid && isStrict) {\n return {\n issues: metadataValidation.issues,\n reason: \"invalid-metadata\",\n valid: false,\n };\n }\n\n const validation = validateRegistryValue(type, key, value, definitions);\n if (validation.valid) return { valid: true };\n\n if (!isStrict) {\n report(`Registry ${type} \"${key}\" is invalid`, validation.issues, \"warn\");\n }\n\n return {\n issues: validation.issues,\n reason: \"invalid-value\",\n valid: !isStrict,\n };\n}\n\nfunction createRegistrationHandle(\n store: RegistryStore,\n operation: RegisterOperation,\n): RegistrationHandle {\n let disposed = false;\n const dispose = (reason = \"manual\") => {\n if (disposed) return false;\n disposed = true;\n return store.dispose(operation, reason);\n };\n\n const handle = ((reason?: string) => dispose(reason)) as RegistrationHandle;\n handle.dispose = dispose;\n\n handle.update = (value: unknown, options: RegistryMetadata = {}) => {\n if (disposed || !store.isCurrent(operation)) return NOOP_HANDLE;\n const nextHandle = store.register(\n operation.type,\n operation.key,\n value,\n operation.source,\n {\n ...(typeof options === \"object\" ? options : {}),\n instanceId: operation.instanceId,\n priority: operation.record.priority,\n ...(operation.scope ? { scope: operation.scope } : {}),\n ...(operation.validation ? { validation: operation.validation } : {}),\n },\n );\n if (isNoopHandle(nextHandle)) return handle;\n disposed = true;\n return nextHandle;\n };\n\n Object.defineProperties(handle, {\n active: {\n enumerable: true,\n get: () => !disposed && store.isCurrent(operation),\n },\n instanceId: { enumerable: true, value: operation.instanceId },\n key: { enumerable: true, value: operation.key },\n priority: { enumerable: true, value: operation.record.priority },\n source: { enumerable: true, value: operation.source },\n status: {\n enumerable: true,\n get: () =>\n disposed\n ? \"disposed\"\n : store.isCurrent(operation)\n ? \"active\"\n : \"superseded\",\n },\n type: { enumerable: true, value: operation.type },\n updatedAt: { enumerable: true, value: operation.record.updatedAt },\n validation: { enumerable: true, value: operation.validation || \"warn\" },\n });\n\n return handle as RegistrationHandle;\n}\n\nfunction prepareRegisterOperation(\n ops: RegistryOperations,\n definitions: RegistryDefinitions,\n type: string,\n key: string,\n item: unknown,\n sourceOrOptions: RegistrySourceOrOptions,\n optionsArg: RegistryMetadata,\n timestamp: number,\n sequence: number,\n): { operation: RegisterOperation } | { rejected: RegistrationHandle } {\n if (!ops.isValidRegistryTarget(type, key)) {\n return { rejected: createNoopHandle(\"rejected\", \"invalid-target\") };\n }\n\n const validation = validateRegistration(\n definitions,\n type,\n key,\n item,\n sourceOrOptions,\n optionsArg,\n );\n if (!validation.valid) {\n return { rejected: createNoopHandle(\"rejected\", validation.reason) };\n }\n\n return {\n operation: createRegisterOperation(\n type,\n key,\n cloneRegistryValue(item),\n sourceOrOptions,\n optionsArg,\n timestamp,\n sequence,\n ),\n };\n}\n\nexport function createRegistryStore(\n initialEntries: InitialRegistryEntries = [],\n definitions: RegistryDefinitions = NO_DEFINITIONS,\n): RegistryStore {\n const ops = createRegistryOperations(definitions);\n let registries = createInitialState(ops, definitions, initialEntries);\n let sequence = normalizeInitialEntries(initialEntries).reduce(\n (count, entry) => count + Object.keys(entry.items).length,\n 0,\n );\n\n const listenersByType = new Map<\n string,\n Map<string | null, Set<() => void>>\n >();\n const entrySnapshots = new Map<\n string,\n {\n typeRegistry: RegistryState[string];\n value: Readonly<Record<string, unknown>>;\n }\n >();\n const valueSnapshots = new Map<\n string,\n Map<\n string,\n { entry: RegistryState[string][string] | undefined; value: unknown }\n >\n >();\n const resolveCachedValue = ops.createResolverCache();\n\n const subscribe = (\n type: string,\n key: string | null | undefined,\n listener: () => void,\n ) => {\n const keyListeners = getOrCreateKeyListeners(\n listenersByType,\n type,\n key ?? null,\n );\n keyListeners.add(listener);\n\n return () => {\n keyListeners.delete(listener);\n if (keyListeners.size > 0) return;\n\n const listeners = listenersByType.get(type);\n if (listeners) {\n listeners.delete(key ?? null);\n if (listeners.size === 0) listenersByType.delete(type);\n }\n };\n };\n\n const commit = (\n nextState: RegistryState,\n operations: RegistryOperation[] = [],\n ) => {\n if (registries === nextState) return;\n const previousState = registries;\n registries = nextState;\n\n const changedKeysByType = new Map<string, Set<string>>();\n for (const operation of operations) {\n if (!ops.isValidRegistryTarget(operation?.type, operation?.key)) continue;\n let keys = changedKeysByType.get(operation.type);\n if (!keys) {\n keys = new Set();\n changedKeysByType.set(operation.type, keys);\n }\n keys.add(operation.key);\n }\n\n for (const [type, changedKeys] of changedKeysByType) {\n const previousRegistry = previousState[type] || {};\n const nextRegistry = nextState[type] || {};\n const typeListeners = listenersByType.get(type);\n let typeChanged = false;\n\n if (!typeListeners) continue;\n\n for (const key of changedKeys) {\n if (previousRegistry[key] === nextRegistry[key]) continue;\n typeChanged = true;\n notifyListeners(typeListeners.get(key));\n }\n\n if (typeChanged) {\n notifyListeners(typeListeners.get(null));\n }\n }\n };\n\n const isCurrent = (operation: RegisterOperation) => {\n const entry = registries[operation.type]?.[operation.key];\n const recordKey = createRecordKey(\n operation.source,\n operation.instanceId,\n operation.scope,\n );\n return entry?.[recordKey] === operation.record;\n };\n\n const dispose = (\n operation: RegisterOperation,\n _reason = \"manual\",\n ): boolean => {\n if (!isCurrent(operation)) return false;\n const unregisterOperation = createUnregisterOperation(\n operation.type,\n operation.key,\n {\n source: operation.source,\n instanceId: operation.instanceId,\n scope: operation.scope,\n },\n );\n\n if (!ops.hasOperationEffect(registries, unregisterOperation)) return false;\n commit(ops.applyOperation(registries, unregisterOperation), [\n unregisterOperation,\n ]);\n return true;\n };\n\n const register = (\n type: string,\n key: string,\n item: unknown,\n sourceOrOptions: RegistrySourceOrOptions = DEFAULT_SOURCE,\n optionsArg: RegistryMetadata = {},\n ): RegistrationHandle => {\n const prepared = prepareRegisterOperation(\n ops,\n definitions,\n type,\n key,\n item,\n sourceOrOptions,\n optionsArg,\n Date.now(),\n ++sequence,\n );\n if (\"rejected\" in prepared) return prepared.rejected;\n\n const { operation } = prepared;\n if (!ops.hasOperationEffect(registries, operation)) {\n return createNoopHandle(\"ignored\", \"unchanged\");\n }\n\n commit(ops.applyOperation(registries, operation), [operation]);\n return createRegistrationHandle(store, operation);\n };\n\n const unregister = (\n type: string,\n key: string,\n sourceOrOptions: RegistrySourceOrOptions = DEFAULT_SOURCE,\n ): void => {\n if (!ops.isValidRegistryTarget(type, key)) return;\n const operation = createUnregisterOperation(type, key, sourceOrOptions);\n if (!ops.hasOperationEffect(registries, operation)) return;\n\n commit(ops.applyOperation(registries, operation), [operation]);\n };\n\n const batch = (executor: (queue: RegistryQueue) => void): number => {\n if (typeof executor !== \"function\") return 0;\n const timestamp = Date.now();\n const operations: RegistryOperation[] = [];\n\n const queue: RegistryQueue = {\n register: (\n type: string,\n key: string,\n item: unknown,\n sourceOrOptions: RegistrySourceOrOptions = DEFAULT_SOURCE,\n optionsArg: RegistryMetadata = {},\n ): RegistrationHandle => {\n const prepared = prepareRegisterOperation(\n ops,\n definitions,\n type,\n key,\n item,\n sourceOrOptions,\n optionsArg,\n timestamp,\n ++sequence,\n );\n if (\"rejected\" in prepared) return prepared.rejected;\n\n operations.push(prepared.operation);\n return createRegistrationHandle(store, prepared.operation);\n },\n unregister: (\n type: string,\n key: string,\n sourceOrOptions: RegistrySourceOrOptions = DEFAULT_SOURCE,\n ): void => {\n if (!ops.isValidRegistryTarget(type, key)) return;\n operations.push(createUnregisterOperation(type, key, sourceOrOptions));\n },\n };\n\n executor(queue);\n if (operations.length === 0) return 0;\n\n const { effectiveOperations, nextState } = ops.resolveEffectiveOperations(\n registries,\n operations,\n );\n if (effectiveOperations.length === 0) return 0;\n\n commit(nextState, effectiveOperations);\n return effectiveOperations.length;\n };\n\n const getSnapshot = (\n type: string,\n key: string,\n scope: string | null = null,\n ): unknown => {\n const entry = registries[type]?.[key];\n let snapshots = valueSnapshots.get(type);\n if (!snapshots) {\n snapshots = new Map();\n valueSnapshots.set(type, snapshots);\n }\n\n const cacheKey = scope === null ? key : `${scope}\\u0000${key}`;\n\n if (entry === undefined) {\n snapshots.delete(cacheKey);\n return undefined;\n }\n\n const cached = snapshots.get(cacheKey);\n if (cached && cached.entry === entry) return cached.value;\n\n const value = resolveCachedValue(type, entry, scope);\n snapshots.set(cacheKey, { entry, value });\n return value;\n };\n\n const getEntriesSnapshot = (\n type: string,\n scope: string | null = null,\n ): Readonly<Record<string, unknown>> => {\n const typeRegistry = registries[type] || {};\n\n const cacheKey = `${type}::${scope ?? \"null\"}`;\n const cached = entrySnapshots.get(cacheKey);\n\n if (cached?.typeRegistry === typeRegistry) return cached.value;\n\n const resolved: Record<string, unknown> = {};\n for (const key in typeRegistry) {\n if (Object.prototype.hasOwnProperty.call(typeRegistry, key)) {\n const value = resolveCachedValue(type, typeRegistry[key], scope);\n if (value !== undefined) resolved[key] = value;\n }\n }\n\n const finalValue = Object.freeze(resolved);\n entrySnapshots.set(cacheKey, { typeRegistry, value: finalValue });\n return finalValue;\n };\n\n const store = {\n batch,\n dispose,\n getEntriesSnapshot,\n getSnapshot,\n isCurrent,\n register,\n subscribe,\n transaction: (\n executor: (tx: RegistryTransactionQueue) => void,\n metadata: RegistryMetadata = {},\n ) => createRegistryTransaction(store, metadata).run(executor),\n unregister,\n } as RegistryStore;\n return store;\n}\n","\"use client\";\n\nimport {\n useCallback,\n useMemo,\n useState,\n useSyncExternalStore,\n type ReactNode,\n} from \"react\";\nimport { useRequiredContext } from \"@/hooks\";\nimport { getOrCreateGlobalContext } from \"./context-registry\";\n\nimport type {\n RegistryDefinitions,\n RegistrySchema,\n RegistryStore,\n} from \"./types\";\nimport { createRegistryStore, type InitialRegistryEntries } from \"./store\";\n\ntype RegistryValueOf<K extends string> = K extends keyof RegistrySchema\n ? RegistrySchema[K]\n : unknown;\n\ninterface RegistryContextValue {\n actions: Pick<\n RegistryStore,\n \"batch\" | \"register\" | \"transaction\" | \"unregister\"\n >;\n subscription: Pick<\n RegistryStore,\n \"getEntriesSnapshot\" | \"getSnapshot\" | \"subscribe\"\n >;\n}\n\nconst RegistryContext = getOrCreateGlobalContext<RegistryContextValue | null>(\n\n \"RegistryContext\",\n null,\n);\n\nexport function RegistryProvider({\n children,\n definitions,\n initialEntries = [],\n}: {\n children?: ReactNode;\n definitions?: RegistryDefinitions;\n initialEntries?: InitialRegistryEntries;\n}) {\n const [store] = useState(() =>\n createRegistryStore(initialEntries, definitions),\n );\n\n const contextValue = useMemo(\n () => ({\n actions: {\n batch: store.batch,\n register: store.register,\n transaction: store.transaction,\n unregister: store.unregister,\n },\n subscription: {\n getEntriesSnapshot: store.getEntriesSnapshot,\n getSnapshot: store.getSnapshot,\n subscribe: store.subscribe,\n },\n }),\n [store],\n );\n\n return <RegistryContext value={contextValue}>{children}</RegistryContext>;\n}\n\nexport function useRegistryActions(): RegistryContextValue[\"actions\"] {\n return useRequiredContext(\n RegistryContext,\n \"useRegistryActions\",\n \"RegistryProvider\",\n ).actions;\n}\n\nfunction useRegistrySubscription(): RegistryContextValue[\"subscription\"] {\n return useRequiredContext(\n RegistryContext,\n \"useRegistrySubscription\",\n \"RegistryProvider\",\n ).subscription;\n}\n\nexport function useRegistryValue<\n K extends string = string,\n T = RegistryValueOf<K>,\n>(type: K, key: string): T | undefined {\n const { getSnapshot, subscribe } = useRegistrySubscription();\n\n const subscribeToKey = useCallback(\n (listener: () => void) => subscribe(type, key, listener),\n [key, subscribe, type],\n );\n const getValue = useCallback(\n () => getSnapshot<K, T>(type, key),\n [getSnapshot, key, type],\n );\n\n return useSyncExternalStore(subscribeToKey, getValue, getValue);\n}\n\nexport function useRegistryEntries<\n K extends string = string,\n T = RegistryValueOf<K>,\n>(type: K): Record<string, T> {\n const { getEntriesSnapshot, subscribe } = useRegistrySubscription();\n\n const subscribeToType = useCallback(\n (listener: () => void) => subscribe(type, null, listener),\n [subscribe, type],\n );\n const getEntries = useCallback(\n () => getEntriesSnapshot<K, T>(type),\n [getEntriesSnapshot, type],\n );\n\n return useSyncExternalStore(subscribeToType, getEntries, getEntries);\n}\n","\"use client\";\n\nimport { use, type ComponentType, type ReactNode } from \"react\";\nimport { isObject } from \"@/utils\";\nimport { getOrCreateGlobalContext } from \"./context-registry\";\nimport type {\n AnyCoreModule,\n PageConfig,\n RegistryDefinition,\n RegistryDefinitions,\n RegistryMetadata,\n} from \"./types\";\n\nexport type BoundaryComponent = ComponentType<{\n children?: ReactNode;\n name?: string;\n}>;\n\nexport interface ModuleHostValue {\n Boundary: BoundaryComponent;\n byId: ReadonlyMap<string, AnyCoreModule>;\n definitions: RegistryDefinitions;\n modules: readonly AnyCoreModule[];\n}\n\nexport const EMPTY_MODULES: readonly AnyCoreModule[] = Object.freeze([]);\n\nexport const PassthroughBoundary: BoundaryComponent = ({ children }) =>\n children;\n\nexport const ModuleHostContext =\n getOrCreateGlobalContext<ModuleHostValue | null>(\"ModuleHostContext\", null);\n\n\nexport function selectModuleSlice(\n coreModule: AnyCoreModule,\n config: PageConfig,\n): unknown {\n const slice = coreModule.page?.select\n ? coreModule.page.select(config)\n : (config as Record<string, unknown>)[coreModule.id];\n return slice ?? null;\n}\n\nexport function createModulePayload(\n modules: readonly AnyCoreModule[],\n config: PageConfig,\n metadata: RegistryMetadata = {},\n): PageConfig | null {\n const payload: Record<string, unknown> = {};\n let hasSlices = false;\n for (const coreModule of modules) {\n if (!coreModule.page?.entries) continue;\n const slice = selectModuleSlice(coreModule, config);\n if (slice === null) continue;\n payload[coreModule.id] = slice;\n hasSlices = true;\n }\n if (!hasSlices) return null;\n return {\n ...payload,\n registry: {\n ...metadata,\n ...(isObject(config.registry) ? config.registry : {}),\n },\n } as PageConfig;\n}\n\nconst MODULE_ID_PATTERN = /^[a-z][a-zA-Z0-9]*$/;\n\nexport function sortModules(\n modules: readonly AnyCoreModule[],\n): AnyCoreModule[] {\n const byId = new Map<string, AnyCoreModule>();\n for (const coreModule of modules) {\n if (!MODULE_ID_PATTERN.test(coreModule.id)) {\n throw new Error(\n `[Core] Invalid module id \"${coreModule.id}\": use a camelCase name such as \"contextMenu\".`,\n );\n }\n if (byId.has(coreModule.id)) {\n throw new Error(`[Core] Module \"${coreModule.id}\" is installed twice.`);\n }\n byId.set(coreModule.id, coreModule);\n }\n\n const sorted: AnyCoreModule[] = [];\n const state = new Map<string, \"visiting\" | \"done\">();\n const visit = (coreModule: AnyCoreModule, path: string[]) => {\n const current = state.get(coreModule.id);\n if (current === \"done\") return;\n if (current === \"visiting\") {\n throw new Error(\n `[Core] Module dependency cycle: ${[...path, coreModule.id].join(\" -> \")}`,\n );\n }\n state.set(coreModule.id, \"visiting\");\n for (const id of coreModule.uses ?? []) {\n const dependency = byId.get(id);\n if (dependency) visit(dependency, [...path, coreModule.id]);\n }\n state.set(coreModule.id, \"done\");\n sorted.push(coreModule);\n };\n modules.forEach((coreModule) => visit(coreModule, []));\n return sorted;\n}\n\nexport function createModuleRegistryDefinitions(\n modules: readonly AnyCoreModule[],\n): RegistryDefinitions {\n const definitions = new Map<string, RegistryDefinition>();\n for (const coreModule of modules) {\n if (coreModule.registry)\n definitions.set(coreModule.id, coreModule.registry);\n }\n return definitions;\n}\n\nexport function useInstalledModules(): readonly AnyCoreModule[] {\n return use(ModuleHostContext)?.modules ?? EMPTY_MODULES;\n}\n","import { DEFAULT_SOURCE, REGISTRY_LIFECYCLES } from \"./constants\";\nimport {\n normalizeRegistryMetadata,\n validateRegistryMetadata,\n} from \"./schema\";\nimport { isObject, report } from \"@/utils\";\nimport type {\n AnyCoreModule,\n PageConfig,\n RegistrationEntry,\n RegistryApplyContext,\n RegistryCleanupTimer,\n RegistryMetadata,\n RegistryQueue,\n} from \"./types\";\n\ntype CleanupScope = Map<string, RegistryCleanupTimer>;\n\nfunction isPersistentLifecycle(lifecycle: unknown): boolean {\n return lifecycle === REGISTRY_LIFECYCLES.PERSISTENT;\n}\n\nfunction runRegistrationBatch(\n context: RegistryApplyContext,\n executor: (queue: RegistryQueue) => void,\n): number | void {\n return typeof context.batch === \"function\"\n ? context.batch(executor)\n : executor(context);\n}\n\nfunction createEntryCleanupKey(\n type: string,\n key: string,\n source: string,\n instanceId: string | null,\n scope: string | undefined,\n): string {\n return JSON.stringify([\n \"entry\",\n type,\n key,\n scope ?? null,\n source,\n instanceId,\n ]);\n}\n\nfunction getCleanupScope(\n context: RegistryApplyContext | null | undefined,\n): CleanupScope {\n return context?.cleanupScope || new Map();\n}\n\nfunction clearCleanupTimer(scope: CleanupScope, cleanupKey: string): void {\n const lifecycle = scope.get(cleanupKey);\n if (!lifecycle) return;\n lifecycle.cancelled = true;\n if (lifecycle.timerId !== null) clearTimeout(lifecycle.timerId);\n scope.delete(cleanupKey);\n}\n\nfunction scheduleCleanup(\n scope: CleanupScope,\n cleanupKey: string,\n callback: () => void,\n delayMs: number,\n): void {\n clearCleanupTimer(scope, cleanupKey);\n const lifecycle: RegistryCleanupTimer = {\n cancelled: false,\n timerId: null,\n };\n\n lifecycle.timerId = setTimeout(() => {\n if (lifecycle.cancelled || scope.get(cleanupKey) !== lifecycle) return;\n scope.delete(cleanupKey);\n callback();\n }, delayMs);\n\n scope.set(cleanupKey, lifecycle);\n}\n\ntype ModuleRegistration = RegistrationEntry & {\n cleanupKey: string;\n type: string;\n};\n\nfunction collectModuleRegistrations(\n coreModule: AnyCoreModule,\n slice: unknown,\n pageMetadata: RegistryMetadata,\n context: RegistryApplyContext,\n): ModuleRegistration[] {\n const definition = coreModule.registry;\n const toEntries = coreModule.page?.entries;\n if (!definition || !toEntries || slice == null || slice === false) return [];\n\n const type = coreModule.id;\n const items = Array.isArray(slice) ? slice : [slice];\n const registrations: ModuleRegistration[] = [];\n\n for (const item of items) {\n if (item == null || item === false) continue;\n const itemMetadata =\n isObject(item) && isObject(item.registry) ? item.registry : {};\n const metadata = { ...pageMetadata, ...itemMetadata };\n if (\n metadata.validation === \"strict\" &&\n !validateRegistryMetadata(metadata).valid\n ) {\n continue;\n }\n\n const payload = isObject(item)\n ? Object.fromEntries(\n Object.entries(item).filter(([key]) => key !== \"registry\"),\n )\n : item;\n const { cleanupDelayMs, lifecycle, registerOptions, scope, source } =\n normalizeRegistryMetadata(metadata, {\n defaultCleanupDelayMs: definition.cleanupDelayMs ?? null,\n defaultLifecycle: definition.lifecycle,\n defaultSource: DEFAULT_SOURCE,\n });\n\n for (const { key, value } of toEntries(payload, context) ?? []) {\n const validation = definition.validate?.(value);\n if (validation && !validation.valid) {\n report(`Registry ${type} config is invalid`, validation.issues, \"warn\");\n continue;\n }\n registrations.push({\n cleanupDelayMs,\n cleanupKey: createEntryCleanupKey(\n type,\n key,\n source,\n context.instanceId,\n scope,\n ),\n key,\n lifecycle,\n registerOptions,\n scope,\n source,\n type,\n value,\n });\n }\n }\n return registrations;\n}\n\nconst NO_CLEANUP = () => {};\n\nexport function applyRegistryConfig(\n config: PageConfig | null | undefined,\n context: RegistryApplyContext,\n): () => void {\n const modules = context.modules ?? [];\n if (!config || modules.length === 0) return NO_CLEANUP;\n const pageMetadata = isObject(config.registry) ? config.registry : {};\n const slices = config as Record<string, unknown>;\n\n const registrations = modules.flatMap((coreModule) => {\n try {\n return collectModuleRegistrations(\n coreModule,\n slices[coreModule.id],\n pageMetadata,\n context,\n );\n } catch (error) {\n report(`Registry apply (${coreModule.id})`, error);\n return [];\n }\n });\n if (registrations.length === 0) return NO_CLEANUP;\n\n const cleanupScope = getCleanupScope(context);\n const owner = (registration: ModuleRegistration) => ({\n instanceId: context.instanceId,\n scope: registration.scope,\n source: registration.source,\n });\n\n runRegistrationBatch(context, (queue) => {\n registrations.forEach(\n ({ cleanupKey, key, registerOptions, source, type, value }) => {\n clearCleanupTimer(cleanupScope, cleanupKey);\n queue.register(type, key, value, source, registerOptions);\n },\n );\n });\n\n return () => {\n const immediate: ModuleRegistration[] = [];\n registrations.forEach((registration) => {\n if (isPersistentLifecycle(registration.lifecycle)) return;\n const { cleanupDelayMs, cleanupKey, key, type } = registration;\n if (typeof cleanupDelayMs === \"number\" && cleanupDelayMs > 0) {\n scheduleCleanup(\n cleanupScope,\n cleanupKey,\n () => context.unregister(type, key, owner(registration)),\n cleanupDelayMs,\n );\n } else {\n immediate.push(registration);\n }\n });\n if (immediate.length === 0) return;\n runRegistrationBatch(context, (queue) => {\n immediate.forEach((registration) =>\n queue.unregister(\n registration.type,\n registration.key,\n owner(registration),\n ),\n );\n });\n };\n}\n","\"use client\";\n\nimport { usePathname } from \"next/navigation\";\nimport { useIsomorphicLayoutEffect } from \"@/hooks\";\nimport {\n Children,\n cloneElement,\n isValidElement,\n useId,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { applyRegistryConfig } from \"./handlers\";\nimport { createModulePayload, useInstalledModules } from \"./installed\";\nimport { useRegistryActions } from \"./provider\";\nimport { isObject, shallowEqual } from \"@/utils\";\nimport type {\n PageConfig,\n RegistryCleanupTimer,\n RegistryApplyContext,\n RegistryMetadata,\n RegistryQueue,\n RegistrySourceOrOptions,\n StableFunctionEntry,\n AnyFunction,\n} from \"./types\";\n\nfunction withInstanceId(\n instanceId: string,\n sourceOrOptions: RegistrySourceOrOptions | undefined,\n optionsArg?: RegistryMetadata,\n): {\n optionsArg: RegistryMetadata | undefined;\n sourceOrOptions: RegistrySourceOrOptions;\n} {\n if (typeof sourceOrOptions === \"string\") {\n return {\n optionsArg: { ...(isObject(optionsArg) ? optionsArg : {}), instanceId },\n sourceOrOptions,\n };\n }\n if (isObject(sourceOrOptions)) {\n return {\n optionsArg,\n sourceOrOptions: { ...sourceOrOptions, instanceId },\n };\n }\n return {\n optionsArg: undefined,\n sourceOrOptions: {\n ...(isObject(optionsArg) ? optionsArg : {}),\n instanceId,\n },\n };\n}\n\nfunction withInstanceIdForUnregister(\n instanceId: string,\n sourceOrOptions: RegistrySourceOrOptions | undefined,\n): RegistryMetadata {\n if (typeof sourceOrOptions === \"string\") {\n return { instanceId, source: sourceOrOptions };\n }\n if (isObject(sourceOrOptions)) {\n return { ...sourceOrOptions, instanceId };\n }\n return { instanceId };\n}\n\nfunction resolveRegisterArgsWithInstance(\n instanceId: string,\n sourceOrOptions: RegistrySourceOrOptions | undefined,\n optionsArg?: RegistryMetadata,\n): [RegistrySourceOrOptions, RegistryMetadata | undefined] {\n const input = withInstanceId(instanceId, sourceOrOptions, optionsArg);\n return [input.sourceOrOptions, input.optionsArg];\n}\n\nexport function useShallowStable<T extends object>(value: T): T {\n const ref = useRef(value);\n if (ref.current !== value && !shallowEqual(ref.current, value)) {\n ref.current = value;\n }\n return ref.current;\n}\n\nconst MAX_STABILIZATION_DEPTH = 64;\n\nfunction createStableFunctionEntry(fn: AnyFunction): StableFunctionEntry {\n const entry: StableFunctionEntry = {\n current: fn,\n stable(this: unknown, ...args: unknown[]) {\n return entry.current?.apply(this, args);\n },\n };\n return entry;\n}\n\ninterface StabilizeScope {\n componentSlices: ReadonlySet<string>;\n functionEntries: Map<string, StableFunctionEntry>;\n usedPaths: Set<string>;\n}\n\nfunction isDirectRegistryComponentPath(\n path: string,\n componentSlices: ReadonlySet<string>,\n): boolean {\n const match = /^config\\.([^.[]+)\\.[^.[]+$/.exec(path);\n return Boolean(match && componentSlices.has(match[1]));\n}\n\nfunction isReactNodeLike(value: unknown): boolean {\n return (\n value === null ||\n value === undefined ||\n typeof value === \"boolean\" ||\n typeof value === \"string\" ||\n typeof value === \"number\" ||\n isValidElement(value)\n );\n}\n\nfunction isStabilizableObject(\n value: unknown,\n): value is Record<string, unknown> {\n return (\n typeof value === \"object\" &&\n value !== null &&\n !Array.isArray(value) &&\n !isValidElement(value)\n );\n}\n\nfunction hasSameObjectKeys(\n previousValue: unknown,\n nextValue: unknown,\n): boolean {\n if (\n !isStabilizableObject(previousValue) ||\n !isStabilizableObject(nextValue)\n ) {\n return false;\n }\n const previousKeys = Object.keys(previousValue);\n const nextKeys = Object.keys(nextValue);\n if (previousKeys.length !== nextKeys.length) return false;\n return nextKeys.every((key) =>\n Object.prototype.hasOwnProperty.call(previousValue, key),\n );\n}\n\nfunction stabilizeRegistryValue(\n value: unknown,\n path: string,\n scope: StabilizeScope,\n previousValue?: unknown,\n seen = new WeakSet<object>(),\n depth = 0,\n): unknown {\n if (depth > MAX_STABILIZATION_DEPTH) return value;\n\n if (typeof value === \"function\") {\n const isComponent = value.name && /^[A-Z]/.test(value.name);\n if (\n isComponent ||\n isDirectRegistryComponentPath(path, scope.componentSlices)\n ) {\n return value;\n }\n scope.usedPaths.add(path);\n let entry = scope.functionEntries.get(path);\n if (!entry) {\n entry = createStableFunctionEntry(value as AnyFunction);\n scope.functionEntries.set(path, entry);\n } else {\n entry.current = value as AnyFunction;\n }\n return entry.stable;\n }\n\n if (value && typeof value === \"object\") {\n if (seen.has(value)) return value;\n seen.add(value);\n }\n\n if (isValidElement(value)) {\n const nextProps = stabilizeRegistryValue(\n value.props,\n `${path}.props`,\n scope,\n isValidElement(previousValue) ? previousValue.props : undefined,\n seen,\n depth + 1,\n ) as Record<string, unknown>;\n if (\n isValidElement(previousValue) &&\n previousValue.type === value.type &&\n previousValue.key === value.key &&\n previousValue.props === nextProps\n ) {\n return previousValue;\n }\n return cloneElement(value, nextProps);\n }\n\n if (Array.isArray(value)) {\n const nextValue = value.every(isReactNodeLike)\n ? Children.toArray(value)\n : value;\n const previousArray = Array.isArray(previousValue) ? previousValue : null;\n let hasChanged =\n !previousArray || previousArray.length !== nextValue.length;\n\n const stabilizedValue: unknown[] = nextValue.map((item, index) => {\n const nextItem = stabilizeRegistryValue(\n item,\n `${path}[${index}]`,\n scope,\n previousArray?.[index],\n seen,\n depth + 1,\n );\n if (!previousArray || nextItem !== previousArray[index]) {\n hasChanged = true;\n }\n return nextItem;\n });\n return !hasChanged ? previousArray : stabilizedValue;\n }\n\n if (typeof value !== \"object\" || value === null) {\n return value;\n }\n\n const source = value as Record<string, unknown>;\n const previousRecord = previousValue as Record<string, unknown> | undefined;\n const stabilizedValue: Record<string, unknown> = {};\n const canReusePrevious = hasSameObjectKeys(previousValue, value);\n let hasChanged = !canReusePrevious;\n\n Object.keys(source).forEach((key) => {\n const nextValue = stabilizeRegistryValue(\n source[key],\n `${path}.${key}`,\n scope,\n previousRecord?.[key],\n seen,\n depth + 1,\n );\n stabilizedValue[key] = nextValue;\n if (!canReusePrevious || nextValue !== previousRecord?.[key]) {\n hasChanged = true;\n }\n });\n\n return !hasChanged ? previousValue : stabilizedValue;\n}\n\nfunction useAppliedRegistryConfig(\n payload: PageConfig | null,\n context: RegistryApplyContext,\n componentSlices: ReadonlySet<string>,\n): void {\n const functionEntriesRef = useRef(new Map<string, StableFunctionEntry>());\n const appliedRef = useRef<{\n cleanup: () => void;\n config: unknown;\n context: RegistryApplyContext;\n payload: PageConfig | null;\n } | null>(null);\n\n useIsomorphicLayoutEffect(() => {\n const previous = appliedRef.current;\n if (\n previous &&\n previous.payload === payload &&\n previous.context === context\n ) {\n return;\n }\n const functionEntries = functionEntriesRef.current;\n const usedPaths = new Set<string>();\n const config = stabilizeRegistryValue(\n payload,\n \"config\",\n { componentSlices, functionEntries, usedPaths },\n previous?.config,\n );\n functionEntries.forEach((_entry, path) => {\n if (!usedPaths.has(path)) functionEntries.delete(path);\n });\n\n if (\n previous &&\n previous.config === config &&\n previous.context === context\n ) {\n previous.payload = payload;\n return;\n }\n previous?.cleanup();\n appliedRef.current = {\n cleanup: applyRegistryConfig(config as PageConfig | null, context),\n config,\n context,\n payload,\n };\n });\n\n useIsomorphicLayoutEffect(\n () => () => {\n appliedRef.current?.cleanup();\n appliedRef.current = null;\n },\n [],\n );\n}\n\nexport function createRegistryApplyContext(\n actions: RegistryQueue & Pick<RegistryApplyContext, \"batch\">,\n {\n cleanupScope = new Map<string, RegistryCleanupTimer>(),\n instanceId,\n modules = [],\n pathname,\n }: Pick<RegistryApplyContext, \"instanceId\" | \"modules\" | \"pathname\"> & {\n cleanupScope?: RegistryApplyContext[\"cleanupScope\"];\n },\n): RegistryApplyContext {\n const stamp = (queue: RegistryQueue): RegistryQueue =>\n ({\n register: (\n type: string,\n key: string,\n item: unknown,\n sourceOrOptions?: RegistrySourceOrOptions,\n optionsArg?: RegistryMetadata,\n ) =>\n queue.register(\n type,\n key,\n item,\n ...resolveRegisterArgsWithInstance(\n instanceId,\n sourceOrOptions,\n optionsArg,\n ),\n ),\n unregister: (\n type: string,\n key: string,\n sourceOrOptions?: RegistrySourceOrOptions,\n ) =>\n queue.unregister(\n type,\n key,\n withInstanceIdForUnregister(instanceId, sourceOrOptions),\n ),\n }) as RegistryQueue;\n\n return {\n ...stamp(actions),\n batch: (executor) =>\n typeof executor === \"function\"\n ? actions.batch((queue) => executor(stamp(queue)))\n : 0,\n cleanupScope,\n instanceId,\n modules,\n pathname,\n };\n}\n\nexport function useRegistry(\n config?: PageConfig | null,\n metadata?: RegistryMetadata,\n): void {\n const { batch, register, unregister } = useRegistryActions();\n const pathname = usePathname();\n const modules = useInstalledModules();\n const instanceId = `registry-instance-${useId()}`;\n const [cleanupScope] = useState(\n () => new Map<string, RegistryCleanupTimer>(),\n );\n\n const context = useMemo(\n () =>\n createRegistryApplyContext(\n { batch, register, unregister },\n {\n cleanupScope,\n instanceId,\n modules,\n pathname,\n },\n ),\n [batch, cleanupScope, instanceId, modules, pathname, register, unregister],\n );\n\n const payload = useMemo(\n () => (config ? createModulePayload(modules, config, metadata) : null),\n [config, metadata, modules],\n );\n const componentSlices = useMemo(\n () =>\n new Set(\n modules\n .filter(\n (coreModule) => coreModule.registry?.valueKind === \"component\",\n )\n .map((coreModule) => coreModule.id),\n ),\n [modules],\n );\n useAppliedRegistryConfig(payload, context, componentSlices);\n}\n","\"use client\";\n\nimport {\n use,\n useCallback,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n useSyncExternalStore,\n type ReactNode,\n} from \"react\";\nimport { useIsomorphicLayoutEffect } from \"@/hooks\";\nimport { getOrCreateGlobalContext } from \"./context-registry\";\nimport { useRegistry, useShallowStable } from \"./hooks\";\nimport { selectModuleSlice, useInstalledModules } from \"./installed\";\nimport { pickRegistryMetadata } from \"./schema\";\nimport { mergeModuleConfigs } from \"./utils\";\n\nimport type {\n PageConfig,\n PageController,\n PageControllerStore,\n PageModuleApi,\n PageModules,\n PageOptions,\n} from \"./types\";\nimport { report } from \"@/utils\";\n\nconst EMPTY_OBJECT: PageConfig = Object.freeze({});\n\nfunction createPageControllerStore(): PageControllerStore {\n const listeners = new Set<() => void>();\n let stack: {\n controllerRef: { current: PageController | null };\n id: string;\n }[] = [];\n\n const notify = (): void => {\n listeners.forEach((listener) => {\n try {\n listener();\n } catch (error) {\n report(\"Page controller listener\", error);\n }\n });\n };\n\n return {\n getSnapshot(): PageController | null {\n const top = stack[stack.length - 1];\n return top?.controllerRef?.current || null;\n },\n notify,\n register(\n id: string,\n controllerRef: { current: PageController | null },\n ): void {\n stack = stack.filter((item) => item.id !== id);\n stack.push({ controllerRef, id });\n notify();\n },\n subscribe(listener: () => void): () => void {\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n };\n },\n unregister(id: string): void {\n stack = stack.filter((item) => item.id !== id);\n notify();\n },\n };\n}\n\nfunction createControllerScope(): {\n Provider: PageController[\"Provider\"];\n publish: (controller: PageController) => void;\n} {\n const listeners = new Set<() => void>();\n let current: PageController | null = null;\n\n const subscribe = (listener: () => void) => {\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n };\n };\n const getSnapshot = () => current;\n\n function PageProvider({ children }: { children?: ReactNode }) {\n const controller = useSyncExternalStore(\n subscribe,\n getSnapshot,\n getSnapshot,\n );\n return (\n <PageControllerContext value={controller}>\n {children}\n </PageControllerContext>\n );\n }\n\n return {\n Provider: PageProvider,\n publish(controller) {\n if (current === controller) return;\n current = controller;\n listeners.forEach((listener) => listener());\n },\n };\n}\n\nconst fallbackStandaloneStore = createPageControllerStore();\n\nconst noopHook = () => {};\nconst PassthroughProvider = ({ children }: { children?: ReactNode }) =>\n children;\n\nconst PageControllerContext = getOrCreateGlobalContext<PageController | null>(\n \"PageControllerContext\",\n null,\n);\n\nconst PageControllerStoreContext =\n getOrCreateGlobalContext<PageControllerStore>(\n \"PageControllerStoreContext\",\n fallbackStandaloneStore,\n );\n\nexport function PageControllerProvider({ children }: { children?: ReactNode }) {\n const [store] = useState<PageControllerStore>(() =>\n createPageControllerStore(),\n );\n return (\n <PageControllerStoreContext value={store}>\n {children}\n </PageControllerStoreContext>\n );\n}\n\nconst emptySubscribe = () => () => {};\nconst getNullSnapshot = () => null;\n\nconst FALLBACK_PAGE_CONTROLLER: PageController = Object.freeze({\n Provider: PassthroughProvider,\n config: EMPTY_OBJECT,\n modules: Object.freeze({}),\n reset: noopHook,\n set: noopHook,\n});\n\nexport function usePageController(): PageController {\n const scopedContext = use(PageControllerContext);\n const controllerStore = use(PageControllerStoreContext);\n\n const storeSubscribe = scopedContext\n ? emptySubscribe\n : controllerStore.subscribe;\n const storeSnapshot = scopedContext\n ? getNullSnapshot\n : controllerStore.getSnapshot;\n\n const storeController = useSyncExternalStore(\n storeSubscribe,\n storeSnapshot,\n getNullSnapshot,\n );\n\n return scopedContext ?? storeController ?? FALLBACK_PAGE_CONTROLLER;\n}\n\nexport function usePage(\n pageConfig: PageConfig = EMPTY_OBJECT,\n options?: PageOptions,\n): PageController {\n const instanceId = useId();\n const controllerStore = use(PageControllerStoreContext);\n const modules = useInstalledModules();\n\n const [overrides, setOverrides] = useState<Partial<PageConfig>>(EMPTY_OBJECT);\n\n const set = useCallback((partial: Partial<PageConfig>) => {\n if (!partial || typeof partial !== \"object\") return;\n setOverrides((prev) => mergeModuleConfigs(prev, partial));\n }, []);\n\n const reset = useCallback(() => {\n setOverrides(EMPTY_OBJECT);\n }, []);\n\n const effectiveConfig = useMemo<PageConfig>(() => {\n const base = pageConfig || EMPTY_OBJECT;\n if (Object.keys(overrides).length === 0) return base;\n return mergeModuleConfigs(base, overrides);\n }, [pageConfig, overrides]);\n\n const moduleSlices = useMemo(\n () =>\n modules.map((coreModule) =>\n selectModuleSlice(coreModule, effectiveConfig),\n ),\n [effectiveConfig, modules],\n );\n\n const registryMetadata = useMemo(\n () => pickRegistryMetadata(options),\n [options],\n );\n useRegistry(effectiveConfig, registryMetadata);\n\n const pageApi = useMemo<PageModuleApi>(() => ({ set }), [set]);\n const moduleControllers: Record<string, unknown> = {};\n for (let index = 0; index < modules.length; index += 1) {\n const coreModule = modules[index];\n if (coreModule.page?.use) {\n moduleControllers[coreModule.id] = coreModule.page.use(\n moduleSlices[index],\n pageApi,\n );\n }\n }\n const pageModules = useShallowStable(moduleControllers) as PageModules;\n\n const [scope] = useState(createControllerScope);\n\n const controller = useMemo<PageController>(\n () => ({\n Provider: scope.Provider,\n config: effectiveConfig,\n modules: pageModules,\n reset,\n set,\n }),\n [effectiveConfig, pageModules, reset, scope, set],\n );\n\n const controllerRef = useRef<PageController | null>(controller);\n\n useIsomorphicLayoutEffect(() => {\n controllerRef.current = controller;\n scope.publish(controller);\n controllerStore.notify();\n }, [controller, controllerStore, scope]);\n\n useEffect(() => {\n controllerStore.register(instanceId, controllerRef);\n return () => {\n controllerStore.unregister(instanceId);\n };\n }, [controllerStore, instanceId]);\n\n return controller;\n}\n","\"use client\";\n\nimport { createElement, use, useState, type ReactNode } from \"react\";\nimport { useStore } from \"@/hooks\";\nimport { createStore, type ExternalStore } from \"@/utils\";\nimport {\n EMPTY_MODULES,\n ModuleHostContext,\n PassthroughBoundary,\n createModuleRegistryDefinitions,\n sortModules,\n type BoundaryComponent,\n type ModuleHostValue,\n} from \"./installed\";\nimport { PageControllerProvider } from \"./page-controller\";\nimport { RegistryProvider } from \"./provider\";\nimport type {\n AnyCoreModule,\n AppRegistryEntry,\n CoreModule,\n CoreModules,\n ModuleId,\n ModuleRuntimeOf,\n ModuleStateOf,\n} from \"./types\";\nimport { report } from \"@/utils\";\n\nexport function defineModule<\n TId extends string,\n TRuntime = never,\n TSlice = never,\n TController = never,\n>(\n coreModule: CoreModule<TId, TRuntime, TSlice, TController>,\n): CoreModule<TId, TRuntime, TSlice, TController> {\n return Object.freeze({ ...coreModule });\n}\n\nfunction warnMissingPeers(modules: readonly AnyCoreModule[]): void {\n const installed = new Set(modules.map((coreModule) => coreModule.id));\n for (const { id, uses } of modules) {\n const missing = (uses ?? []).filter((peer) => !installed.has(peer));\n if (missing.length > 0) {\n report(\n `Module \"${id}\" runs without its optional peers`,\n missing.join(\", \"),\n \"warn\",\n );\n }\n }\n}\n\nfunction createModuleHost(\n modules: readonly AnyCoreModule[],\n Boundary: BoundaryComponent,\n): ModuleHostValue {\n const sorted = sortModules(modules);\n if (process.env.NODE_ENV !== \"production\") warnMissingPeers(sorted);\n return {\n Boundary,\n byId: new Map(sorted.map((coreModule) => [coreModule.id, coreModule])),\n definitions: createModuleRegistryDefinitions(sorted),\n modules: Object.freeze(sorted),\n };\n}\n\nexport interface ModuleHostProps {\n boundary?: BoundaryComponent;\n children?: ReactNode;\n modules?: readonly AnyCoreModule[];\n registryEntries?: readonly AppRegistryEntry[];\n}\n\nexport function ModuleHost({\n boundary = PassthroughBoundary,\n children,\n modules = EMPTY_MODULES,\n registryEntries,\n}: ModuleHostProps) {\n const [host] = useState(() => createModuleHost(modules, boundary));\n const { Boundary } = host;\n\n const content = (\n <>\n {host.modules.map(({ Backdrop, id }) =>\n Backdrop ? (\n <Boundary key={id} name={id}>\n <Backdrop />\n </Boundary>\n ) : null,\n )}\n {children}\n {host.modules.map(({ Overlay, id }) =>\n Overlay ? (\n <Boundary key={id} name={id}>\n <Overlay />\n </Boundary>\n ) : null,\n )}\n </>\n );\n\n const tree = host.modules.reduceRight<ReactNode>(\n (inner, { Provider }) => (Provider ? <Provider>{inner}</Provider> : inner),\n content,\n );\n\n return (\n <RegistryProvider\n definitions={host.definitions}\n initialEntries={registryEntries}\n >\n <ModuleHostContext value={host}>\n <PageControllerProvider>{tree}</PageControllerProvider>\n </ModuleHostContext>\n </RegistryProvider>\n );\n}\n\nexport function useModule<K extends ModuleId>(\n id: K,\n): ModuleRuntimeOf<CoreModules[K]> | null {\n const coreModule = use(ModuleHostContext)?.byId.get(id);\n return coreModule?.context ? (use(coreModule.context) ?? null) : null;\n}\n\ntype ModuleActionsOf<K extends ModuleId> =\n ModuleRuntimeOf<CoreModules[K]> extends { actions: infer TActions }\n ? TActions\n : never;\n\nexport interface ModulePeer<K extends ModuleId> {\n useActions(): ModuleActionsOf<K>;\n useRuntime(): ModuleRuntimeOf<CoreModules[K]>;\n useState<T>(\n selector: (state: ModuleStateOf<K>) => T,\n isEqual?: (a: T, b: T) => boolean,\n ): T;\n}\n\nexport function definePeer<K extends ModuleId>(\n id: K,\n inert: ModuleRuntimeOf<CoreModules[K]>,\n): ModulePeer<K> {\n const useRuntime = (): ModuleRuntimeOf<CoreModules[K]> =>\n useModule(id) ?? inert;\n return {\n useRuntime,\n useActions: () => useRuntime().actions as ModuleActionsOf<K>,\n useState: <T,>(\n selector: (state: ModuleStateOf<K>) => T,\n isEqual?: (a: T, b: T) => boolean,\n ) =>\n useStore<ModuleStateOf<K>, T>(\n (useRuntime() as { store: ExternalStore<ModuleStateOf<K>> }).store,\n selector,\n isEqual,\n ),\n };\n}\n\nconst NO_MODULE_STORE: ExternalStore<unknown> = createStore<unknown>(undefined);\n\nexport function useModuleState<K extends ModuleId, T>(\n id: K,\n selector: (state: ModuleStateOf<K>) => T,\n fallback: T,\n isEqual: (a: T, b: T) => boolean = Object.is,\n): T {\n const runtime = useModule(id) as { store: ExternalStore<unknown> } | null;\n return useStore<unknown, T>(\n runtime?.store ?? NO_MODULE_STORE,\n (state) => (runtime ? selector(state as ModuleStateOf<K>) : fallback),\n isEqual,\n );\n}\n\nexport function ModuleBoundary({\n children,\n name,\n}: {\n children?: ReactNode;\n name?: string;\n}) {\n const Boundary = use(ModuleHostContext)?.Boundary ?? PassthroughBoundary;\n return createElement(Boundary, { name }, children);\n}\n\nexport function useIsModuleInstalled(id: ModuleId): boolean {\n return use(ModuleHostContext)?.byId.has(id) ?? false;\n}\n","\"use client\";\n\nimport { pickRegistryMetadata } from \"./schema\";\nimport { useRegistry } from \"./hooks\";\nimport { useInstalledModules } from \"./installed\";\nimport type { ModuleId, PageConfig, RegistryMetadata } from \"./types\";\n\nexport function useModuleRegistration(\n id: ModuleId,\n value: unknown,\n options?: RegistryMetadata & { enabled?: boolean },\n): void {\n const coreModule = useInstalledModules().find(\n (candidate) => candidate.id === id,\n );\n const config =\n coreModule && options?.enabled !== false && value != null\n ? ({ [id]: value } as PageConfig)\n : null;\n useRegistry(config, pickRegistryMetadata(options));\n}\n","import {\n createElement,\n Fragment,\n type ComponentType,\n type JSX,\n type ReactNode,\n} from \"react\";\n\nexport type ProviderComponent<P = any> = ComponentType<\n P & { children?: ReactNode }\n>;\n\nexport type ProviderEntry<P = any> =\n ProviderComponent<P> | readonly [ProviderComponent<P>, P];\n\nexport interface ComposeProps {\n children?: ReactNode;\n providers: readonly ProviderEntry[];\n}\n\nexport function createProviderEntry<P extends object>(\n component: ProviderComponent<P>,\n props: P,\n): readonly [ProviderComponent<P>, P] {\n return [component, props] as const;\n}\n\nexport function Compose({ providers, children }: ComposeProps): JSX.Element {\n return providers.reduceRight<JSX.Element>(\n (acc, entry) => {\n if (Array.isArray(entry)) {\n const [Component, props] = entry;\n return createElement(Component, props, acc);\n }\n const Component = entry as ProviderComponent;\n return createElement(Component, null, acc);\n },\n createElement(Fragment, null, children),\n );\n}\n\nexport function composeProviders(\n providers: readonly ProviderEntry[],\n): (props: { children?: ReactNode }) => JSX.Element {\n function ComposedProviders({\n children,\n }: {\n children?: ReactNode;\n }): JSX.Element {\n return Compose({ providers, children });\n }\n ComposedProviders.displayName = \"ComposedProviders\";\n return ComposedProviders;\n}\n"]}
|