unspaghettit 0.2.0 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +56 -18
- package/build/client/_app/immutable/assets/0.DCOD5ne_.css +1 -0
- package/build/client/_app/immutable/assets/0.DCOD5ne_.css.br +0 -0
- package/build/client/_app/immutable/assets/0.DCOD5ne_.css.gz +0 -0
- package/build/client/_app/immutable/assets/12.nv0I59TU.css.gz +0 -0
- package/build/client/_app/immutable/assets/3.B3akUL9A.css.gz +0 -0
- package/build/client/_app/immutable/assets/BehaviorGraph.Bk0xQRZk.css +1 -0
- package/build/client/_app/immutable/assets/BehaviorGraph.Bk0xQRZk.css.br +0 -0
- package/build/client/_app/immutable/assets/BehaviorGraph.Bk0xQRZk.css.gz +0 -0
- package/build/client/_app/immutable/chunks/B3vnQs252.js +1 -0
- package/build/client/_app/immutable/chunks/B3vnQs252.js.br +0 -0
- package/build/client/_app/immutable/chunks/B3vnQs252.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{CxyLMlpt2.js → BANF9BhQ2.js} +1 -1
- package/build/client/_app/immutable/chunks/BANF9BhQ2.js.br +0 -0
- package/build/client/_app/immutable/chunks/BANF9BhQ2.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BJdTO_n6.js +1 -0
- package/build/client/_app/immutable/chunks/BJdTO_n6.js.br +0 -0
- package/build/client/_app/immutable/chunks/BJdTO_n6.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BPl9BITm.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BQ9GodWX2.js.gz +0 -0
- package/build/client/_app/immutable/chunks/Bcyn5YUg.js +4 -0
- package/build/client/_app/immutable/chunks/Bcyn5YUg.js.br +0 -0
- package/build/client/_app/immutable/chunks/Bcyn5YUg.js.gz +0 -0
- package/build/client/_app/immutable/chunks/Bfc9rQXP.js +1 -0
- package/build/client/_app/immutable/chunks/Bfc9rQXP.js.br +0 -0
- package/build/client/_app/immutable/chunks/Bfc9rQXP.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{BfMYiIUi.js → BjxqhpPG.js} +1 -1
- package/build/client/_app/immutable/chunks/BjxqhpPG.js.br +0 -0
- package/build/client/_app/immutable/chunks/BjxqhpPG.js.gz +0 -0
- package/build/client/_app/immutable/chunks/ByaoVvNB.js +1 -0
- package/build/client/_app/immutable/chunks/ByaoVvNB.js.br +0 -0
- package/build/client/_app/immutable/chunks/ByaoVvNB.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BzLd0mTH.js.gz +0 -0
- package/build/client/_app/immutable/chunks/C8b3IMj8.js +1 -0
- package/build/client/_app/immutable/chunks/C8b3IMj8.js.br +0 -0
- package/build/client/_app/immutable/chunks/C8b3IMj8.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CXvvf4uQ.js +1 -0
- package/build/client/_app/immutable/chunks/CXvvf4uQ.js.br +0 -0
- package/build/client/_app/immutable/chunks/CXvvf4uQ.js.gz +0 -0
- package/build/client/_app/immutable/chunks/Cl7Z3e6-.js.gz +0 -0
- package/build/client/_app/immutable/chunks/ClC4qR7W2.js +2 -0
- package/build/client/_app/immutable/chunks/ClC4qR7W2.js.br +0 -0
- package/build/client/_app/immutable/chunks/ClC4qR7W2.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CuGlh1c2.js +1 -0
- package/build/client/_app/immutable/chunks/CuGlh1c2.js.br +0 -0
- package/build/client/_app/immutable/chunks/CuGlh1c2.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CwzIdrQR.js +1 -0
- package/build/client/_app/immutable/chunks/CwzIdrQR.js.br +0 -0
- package/build/client/_app/immutable/chunks/CwzIdrQR.js.gz +0 -0
- package/build/client/_app/immutable/chunks/D5speDV82.js +908 -0
- package/build/client/_app/immutable/chunks/D5speDV82.js.br +0 -0
- package/build/client/_app/immutable/chunks/D5speDV82.js.gz +0 -0
- package/build/client/_app/immutable/chunks/D64sGJRN.js +1 -0
- package/build/client/_app/immutable/chunks/D64sGJRN.js.br +0 -0
- package/build/client/_app/immutable/chunks/D64sGJRN.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DNaA4QRO2.js +1 -0
- package/build/client/_app/immutable/chunks/DNaA4QRO2.js.br +0 -0
- package/build/client/_app/immutable/chunks/DNaA4QRO2.js.gz +0 -0
- package/build/client/_app/immutable/chunks/Da59TXPe.js +1 -0
- package/build/client/_app/immutable/chunks/Da59TXPe.js.br +2 -0
- package/build/client/_app/immutable/chunks/Da59TXPe.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DhTiE3j02.js +2 -0
- package/build/client/_app/immutable/chunks/DhTiE3j02.js.br +0 -0
- package/build/client/_app/immutable/chunks/DhTiE3j02.js.gz +0 -0
- package/build/client/_app/immutable/chunks/Dhqg7r_2.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DmyaDy4d2.js +1 -0
- package/build/client/_app/immutable/chunks/DmyaDy4d2.js.br +0 -0
- package/build/client/_app/immutable/chunks/DmyaDy4d2.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DryaQyjN2.js +1 -0
- package/build/client/_app/immutable/chunks/DryaQyjN2.js.br +0 -0
- package/build/client/_app/immutable/chunks/DryaQyjN2.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DtK8qK5Q2.js +1 -0
- package/build/client/_app/immutable/chunks/DtK8qK5Q2.js.br +0 -0
- package/build/client/_app/immutable/chunks/DtK8qK5Q2.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DtblIi6X2.js +1 -0
- package/build/client/_app/immutable/chunks/DtblIi6X2.js.br +1 -0
- package/build/client/_app/immutable/chunks/DtblIi6X2.js.gz +0 -0
- package/build/client/_app/immutable/chunks/UkzDDeO42.js +1 -0
- package/build/client/_app/immutable/chunks/UkzDDeO42.js.br +0 -0
- package/build/client/_app/immutable/chunks/UkzDDeO42.js.gz +0 -0
- package/build/client/_app/immutable/chunks/Vu8LzrwP2.js +1 -0
- package/build/client/_app/immutable/chunks/Vu8LzrwP2.js.br +0 -0
- package/build/client/_app/immutable/chunks/Vu8LzrwP2.js.gz +0 -0
- package/build/client/_app/immutable/chunks/_b612aVb.js +1 -0
- package/build/client/_app/immutable/chunks/_b612aVb.js.br +0 -0
- package/build/client/_app/immutable/chunks/_b612aVb.js.gz +0 -0
- package/build/client/_app/immutable/chunks/aNMRV4sP2.js.gz +0 -0
- package/build/client/_app/immutable/chunks/cMamJTsF.js.gz +0 -0
- package/build/client/_app/immutable/chunks/ib21i2T_.js.gz +0 -0
- package/build/client/_app/immutable/chunks/kNaey6uv.js.gz +0 -0
- package/build/client/_app/immutable/chunks/oVMDLirx.js +1 -0
- package/build/client/_app/immutable/chunks/oVMDLirx.js.br +0 -0
- package/build/client/_app/immutable/chunks/oVMDLirx.js.gz +0 -0
- package/build/client/_app/immutable/chunks/olAc024e.js +1 -0
- package/build/client/_app/immutable/chunks/olAc024e.js.br +0 -0
- package/build/client/_app/immutable/chunks/olAc024e.js.gz +0 -0
- package/build/client/_app/immutable/chunks/suTxxv1t.js.gz +0 -0
- package/build/client/_app/immutable/chunks/wXIHzLMQ2.js +1 -0
- package/build/client/_app/immutable/chunks/wXIHzLMQ2.js.br +0 -0
- package/build/client/_app/immutable/chunks/wXIHzLMQ2.js.gz +0 -0
- package/build/client/_app/immutable/chunks/wrqalH0a.js +1 -0
- package/build/client/_app/immutable/chunks/wrqalH0a.js.br +0 -0
- package/build/client/_app/immutable/chunks/wrqalH0a.js.gz +0 -0
- package/build/client/_app/immutable/chunks/x60Tn5kT.js +1 -0
- package/build/client/_app/immutable/chunks/x60Tn5kT.js.br +0 -0
- package/build/client/_app/immutable/chunks/x60Tn5kT.js.gz +0 -0
- package/build/client/_app/immutable/chunks/xihTtKlq.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{BOrLmFwJ.js → yShDxCNj.js} +1 -1
- package/build/client/_app/immutable/chunks/yShDxCNj.js.br +2 -0
- package/build/client/_app/immutable/chunks/yShDxCNj.js.gz +0 -0
- package/build/client/_app/immutable/entry/app.Etd-exTb.js +2 -0
- package/build/client/_app/immutable/entry/app.Etd-exTb.js.br +0 -0
- package/build/client/_app/immutable/entry/app.Etd-exTb.js.gz +0 -0
- package/build/client/_app/immutable/entry/start.DY2B3u4g.js +1 -0
- package/build/client/_app/immutable/entry/start.DY2B3u4g.js.br +0 -0
- package/build/client/_app/immutable/entry/start.DY2B3u4g.js.gz +0 -0
- package/build/client/_app/immutable/nodes/0.tKfYV3__.js +8 -0
- package/build/client/_app/immutable/nodes/0.tKfYV3__.js.br +0 -0
- package/build/client/_app/immutable/nodes/0.tKfYV3__.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{1.KYdA6ppX.js → 1.CER5ICKt.js} +1 -1
- package/build/client/_app/immutable/nodes/1.CER5ICKt.js.br +1 -0
- package/build/client/_app/immutable/nodes/1.CER5ICKt.js.gz +0 -0
- package/build/client/_app/immutable/nodes/10.rT7cD8kX.js +1 -0
- package/build/client/_app/immutable/nodes/10.rT7cD8kX.js.br +0 -0
- package/build/client/_app/immutable/nodes/10.rT7cD8kX.js.gz +0 -0
- package/build/client/_app/immutable/nodes/11.BAnV_Y5Y.js +2 -0
- package/build/client/_app/immutable/nodes/11.BAnV_Y5Y.js.br +0 -0
- package/build/client/_app/immutable/nodes/11.BAnV_Y5Y.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{9.CMW6a2Lg.js → 12.DCTRFMqo.js} +4 -3
- package/build/client/_app/immutable/nodes/12.DCTRFMqo.js.br +0 -0
- package/build/client/_app/immutable/nodes/12.DCTRFMqo.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{2.DBz20KgG.js → 2.CF488WWF.js} +1 -1
- package/build/client/_app/immutable/nodes/2.CF488WWF.js.br +0 -0
- package/build/client/_app/immutable/nodes/2.CF488WWF.js.gz +0 -0
- package/build/client/_app/immutable/nodes/3.CP7CPPVH.js +1 -0
- package/build/client/_app/immutable/nodes/3.CP7CPPVH.js.br +0 -0
- package/build/client/_app/immutable/nodes/3.CP7CPPVH.js.gz +0 -0
- package/build/client/_app/immutable/nodes/4.D1bxCSiM.js +3 -0
- package/build/client/_app/immutable/nodes/4.D1bxCSiM.js.br +0 -0
- package/build/client/_app/immutable/nodes/4.D1bxCSiM.js.gz +0 -0
- package/build/client/_app/immutable/nodes/5.D6jZgh9y.js +48 -0
- package/build/client/_app/immutable/nodes/5.D6jZgh9y.js.br +0 -0
- package/build/client/_app/immutable/nodes/5.D6jZgh9y.js.gz +0 -0
- package/build/client/_app/immutable/nodes/6.BrBFUA0s.js +1 -0
- package/build/client/_app/immutable/nodes/6.BrBFUA0s.js.br +0 -0
- package/build/client/_app/immutable/nodes/6.BrBFUA0s.js.gz +0 -0
- package/build/client/_app/immutable/nodes/7.pajo8MfM.js +3 -0
- package/build/client/_app/immutable/nodes/7.pajo8MfM.js.br +0 -0
- package/build/client/_app/immutable/nodes/7.pajo8MfM.js.gz +0 -0
- package/build/client/_app/immutable/nodes/8.Cc80_Igi.js +5 -0
- package/build/client/_app/immutable/nodes/8.Cc80_Igi.js.br +0 -0
- package/build/client/_app/immutable/nodes/8.Cc80_Igi.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{7.CemgNJfw.js → 9.D72NaL3l.js} +1 -1
- package/build/client/_app/immutable/nodes/9.D72NaL3l.js.br +1 -0
- package/build/client/_app/immutable/nodes/9.D72NaL3l.js.gz +0 -0
- package/build/client/_app/version.json +1 -1
- package/build/client/_app/version.json.br +0 -0
- package/build/client/_app/version.json.gz +0 -0
- package/build/client/lyriks_logo.svg +148 -0
- package/build/client/lyriks_logo.svg.br +0 -0
- package/build/client/lyriks_logo.svg.gz +0 -0
- package/build/server/chunks/0-8YZc572z.js +15 -0
- package/build/server/chunks/0-8YZc572z.js.map +1 -0
- package/build/server/chunks/1-DxkfSJLu.js +9 -0
- package/build/server/chunks/{1-DPpKAKXV.js.map → 1-DxkfSJLu.js.map} +1 -1
- package/build/server/chunks/10-DkObdGtU.js +9 -0
- package/build/server/chunks/10-DkObdGtU.js.map +1 -0
- package/build/server/chunks/11-DL94HxpZ.js +9 -0
- package/build/server/chunks/11-DL94HxpZ.js.map +1 -0
- package/build/server/chunks/12-CI74sCkt.js +9 -0
- package/build/server/chunks/12-CI74sCkt.js.map +1 -0
- package/build/server/chunks/2-qhWwQ4eL.js +9 -0
- package/build/server/chunks/2-qhWwQ4eL.js.map +1 -0
- package/build/server/chunks/3-CzoZtSTp.js +16 -0
- package/build/server/chunks/3-CzoZtSTp.js.map +1 -0
- package/build/server/chunks/4-CDa9DBsh.js +16 -0
- package/build/server/chunks/4-CDa9DBsh.js.map +1 -0
- package/build/server/chunks/5-qD2xxOrq.js +9 -0
- package/build/server/chunks/5-qD2xxOrq.js.map +1 -0
- package/build/server/chunks/6-B4mWzvDn.js +9 -0
- package/build/server/chunks/6-B4mWzvDn.js.map +1 -0
- package/build/server/chunks/7-zExv-fTN.js +9 -0
- package/build/server/chunks/7-zExv-fTN.js.map +1 -0
- package/build/server/chunks/8-BVrGdQg4.js +9 -0
- package/build/server/chunks/{6-QQ7r8Rd5.js.map → 8-BVrGdQg4.js.map} +1 -1
- package/build/server/chunks/9-BnZLRMYA.js +9 -0
- package/build/server/chunks/9-BnZLRMYA.js.map +1 -0
- package/build/server/chunks/BehaviorGraph-C-9z37Sm.js +788 -0
- package/build/server/chunks/BehaviorGraph-C-9z37Sm.js.map +1 -0
- package/build/server/chunks/Clock-BfMWQpmJ.js +5 -0
- package/build/server/chunks/Clock-BfMWQpmJ.js.map +1 -0
- package/build/server/chunks/DeleteDomain-BvHEgAyp.js +24 -0
- package/build/server/chunks/DeleteDomain-BvHEgAyp.js.map +1 -0
- package/build/server/chunks/{FeatureValidator-B8qEjAUW.js → DeleteFeature-DnK8sBJI.js} +142 -77
- package/build/server/chunks/DeleteFeature-DnK8sBJI.js.map +1 -0
- package/build/server/chunks/DeleteProject-BXZcehHZ.js +41 -0
- package/build/server/chunks/DeleteProject-BXZcehHZ.js.map +1 -0
- package/build/server/chunks/Effect-BJtLR-6l.js +46 -0
- package/build/server/chunks/Effect-BJtLR-6l.js.map +1 -0
- package/build/server/chunks/{FeatureCard-BQOY6gJQ.js → FeatureCard-Bb50FEfp.js} +4 -4
- package/build/server/chunks/{FeatureCard-BQOY6gJQ.js.map → FeatureCard-Bb50FEfp.js.map} +1 -1
- package/build/server/chunks/{FeatureJson-Bv-qiOSf.js → FeatureJson-DYvMEAub.js} +2 -2
- package/build/server/chunks/{FeatureJson-Bv-qiOSf.js.map → FeatureJson-DYvMEAub.js.map} +1 -1
- package/build/server/chunks/{FeatureTransforms-UWDHmWEg.js → FeatureTransforms-B0aI_CJD.js} +10 -3
- package/build/server/chunks/FeatureTransforms-B0aI_CJD.js.map +1 -0
- package/build/server/chunks/{ManageTagsDialog-DBxA3tM2.js → ManageTagsDialog-D5xbAVNB.js} +5 -5
- package/build/server/chunks/ManageTagsDialog-D5xbAVNB.js.map +1 -0
- package/build/server/chunks/{ProgressBar-CfhccQ83.js → ProgressBar-CUC2EZqG.js} +3 -3
- package/build/server/chunks/ProgressBar-CUC2EZqG.js.map +1 -0
- package/build/server/chunks/{ProjectsIndex-CoDrvRya.js → ProjectsIndex-FgIu9dBp.js} +135 -14
- package/build/server/chunks/ProjectsIndex-FgIu9dBp.js.map +1 -0
- package/build/server/chunks/{RenameTag-BuWLMl1m.js → RenameTag-DWIIR4Bx.js} +3 -6
- package/build/server/chunks/RenameTag-DWIIR4Bx.js.map +1 -0
- package/build/server/chunks/ScenarioApplier-YPKECfZe.js +55 -0
- package/build/server/chunks/ScenarioApplier-YPKECfZe.js.map +1 -0
- package/build/server/chunks/SimulatorEngine-DM1F9nCO.js +1391 -0
- package/build/server/chunks/SimulatorEngine-DM1F9nCO.js.map +1 -0
- package/build/server/chunks/StateValue-BBjWox8f.js +105 -0
- package/build/server/chunks/StateValue-BBjWox8f.js.map +1 -0
- package/build/server/chunks/{TagDotStrip-B1XQ0m0Y.js → TagDotStrip-0rn-IJVE.js} +4 -4
- package/build/server/chunks/TagDotStrip-0rn-IJVE.js.map +1 -0
- package/build/server/chunks/{TagFilterSelect-DbO0Qduh.js → TagFilterSelect-Dbu-7Dg4.js} +5 -5
- package/build/server/chunks/{TagFilterSelect-DbO0Qduh.js.map → TagFilterSelect-Dbu-7Dg4.js.map} +1 -1
- package/build/server/chunks/{TagPalette-CtMNYCmu.js → TagPalette-CpdTiC_7.js} +101 -9
- package/build/server/chunks/TagPalette-CpdTiC_7.js.map +1 -0
- package/build/server/chunks/TransitionCatalog-CYXUANy6.js +271 -0
- package/build/server/chunks/TransitionCatalog-CYXUANy6.js.map +1 -0
- package/build/server/chunks/_layout.svelte-pSSG85WT.js +1342 -0
- package/build/server/chunks/_layout.svelte-pSSG85WT.js.map +1 -0
- package/build/server/chunks/{_page.svelte-BKTveFAj.js → _page.svelte-BNH3szkk.js} +22 -17
- package/build/server/chunks/{_page.svelte-BKTveFAj.js.map → _page.svelte-BNH3szkk.js.map} +1 -1
- package/build/server/chunks/_page.svelte-BcuGvUt1.js +37 -0
- package/build/server/chunks/{_page.svelte-B7hT3P8E.js.map → _page.svelte-BcuGvUt1.js.map} +1 -1
- package/build/server/chunks/_page.svelte-BoOMG5Y0.js +37 -0
- package/build/server/chunks/{_page.svelte-De508ek8.js.map → _page.svelte-BoOMG5Y0.js.map} +1 -1
- package/build/server/chunks/{_page.svelte-BqSC-1vK.js → _page.svelte-C4PRh_wP.js} +104 -54
- package/build/server/chunks/_page.svelte-C4PRh_wP.js.map +1 -0
- package/build/server/chunks/_page.svelte-Cqn34NXy.js +74 -0
- package/build/server/chunks/_page.svelte-Cqn34NXy.js.map +1 -0
- package/build/server/chunks/{_page.svelte-B1s7jxaQ.js → _page.svelte-DSCeOGv7.js} +15 -10
- package/build/server/chunks/_page.svelte-DSCeOGv7.js.map +1 -0
- package/build/server/chunks/_page.svelte-DqWdGt48.js +182 -0
- package/build/server/chunks/_page.svelte-DqWdGt48.js.map +1 -0
- package/build/server/chunks/_page.svelte-DsQHSEl4.js +49 -0
- package/build/server/chunks/_page.svelte-DsQHSEl4.js.map +1 -0
- package/build/server/chunks/{_page.svelte-BKKCa9H5.js → _page.svelte-Uioz8hsG.js} +18 -11
- package/build/server/chunks/{_page.svelte-BKKCa9H5.js.map → _page.svelte-Uioz8hsG.js.map} +1 -1
- package/build/server/chunks/{_page.svelte-Zf9H4KOP.js → _page.svelte-p38jot9e.js} +81 -478
- package/build/server/chunks/_page.svelte-p38jot9e.js.map +1 -0
- package/build/server/chunks/{_page.svelte-BtI2zZ_Z.js → _page.svelte-yN5kzgJ9.js} +251 -447
- package/build/server/chunks/_page.svelte-yN5kzgJ9.js.map +1 -0
- package/build/server/chunks/{_server.ts-DsbbVoOn.js → _server.ts-1CtrHhte.js} +4 -4
- package/build/server/chunks/{_server.ts-DsbbVoOn.js.map → _server.ts-1CtrHhte.js.map} +1 -1
- package/build/server/chunks/{_server.ts-CWvU15tL.js → _server.ts-71Qx1lQb.js} +4 -4
- package/build/server/chunks/{_server.ts-CWvU15tL.js.map → _server.ts-71Qx1lQb.js.map} +1 -1
- package/build/server/chunks/_server.ts-BAyekGHB.js +961 -0
- package/build/server/chunks/_server.ts-BAyekGHB.js.map +1 -0
- package/build/server/chunks/{_server.ts-BihpbxOW.js → _server.ts-BLWhU22T.js} +4 -4
- package/build/server/chunks/{_server.ts-BihpbxOW.js.map → _server.ts-BLWhU22T.js.map} +1 -1
- package/build/server/chunks/{_server.ts-YnfXkeMJ.js → _server.ts-C7EVZVxv.js} +22 -13
- package/build/server/chunks/_server.ts-C7EVZVxv.js.map +1 -0
- package/build/server/chunks/{_server.ts-vcaqdwxS.js → _server.ts-CGjYuLmo.js} +12 -7
- package/build/server/chunks/_server.ts-CGjYuLmo.js.map +1 -0
- package/build/server/chunks/{_server.ts-Dy5zQHe2.js → _server.ts-CX6H8fSE.js} +8 -31
- package/build/server/chunks/_server.ts-CX6H8fSE.js.map +1 -0
- package/build/server/chunks/{_server.ts-BuoQ02BW.js → _server.ts-CyEdTCLr.js} +4 -4
- package/build/server/chunks/{_server.ts-BuoQ02BW.js.map → _server.ts-CyEdTCLr.js.map} +1 -1
- package/build/server/chunks/_server.ts-DKVTM9Pj.js +77 -0
- package/build/server/chunks/_server.ts-DKVTM9Pj.js.map +1 -0
- package/build/server/chunks/{_server.ts-0uNTZKwF.js → _server.ts-Dip65hLJ.js} +15 -9
- package/build/server/chunks/_server.ts-Dip65hLJ.js.map +1 -0
- package/build/server/chunks/{_server.ts-D4EO0VHu.js → _server.ts-Dm0tCs2i.js} +5 -5
- package/build/server/chunks/{_server.ts-D4EO0VHu.js.map → _server.ts-Dm0tCs2i.js.map} +1 -1
- package/build/server/chunks/{_server.ts-BIBWjQI-.js → _server.ts-DsYwK_uW.js} +4 -4
- package/build/server/chunks/{_server.ts-BIBWjQI-.js.map → _server.ts-DsYwK_uW.js.map} +1 -1
- package/build/server/chunks/{_server.ts-DDa0Nk_S.js → _server.ts-RCEgegYU.js} +4 -4
- package/build/server/chunks/{_server.ts-DDa0Nk_S.js.map → _server.ts-RCEgegYU.js.map} +1 -1
- package/build/server/chunks/_server.ts-XOLAT4dd.js +146 -0
- package/build/server/chunks/_server.ts-XOLAT4dd.js.map +1 -0
- package/build/server/chunks/_server.ts-afh_zLVi.js +69 -0
- package/build/server/chunks/_server.ts-afh_zLVi.js.map +1 -0
- package/build/server/chunks/{browserContainer-CNX7ANld.js → browserContainer-BdldtueJ.js} +71 -1378
- package/build/server/chunks/browserContainer-BdldtueJ.js.map +1 -0
- package/build/server/chunks/buildSearchDocs-Cyfrnw9G.js +337 -0
- package/build/server/chunks/buildSearchDocs-Cyfrnw9G.js.map +1 -0
- package/build/server/chunks/{builderModeStore.svelte-ihupr-3p.js → builderModeStore.svelte-BEZMQEqn.js} +223 -11
- package/build/server/chunks/builderModeStore.svelte-BEZMQEqn.js.map +1 -0
- package/build/server/chunks/client-C9Cat4DK.js +51 -0
- package/build/server/chunks/{client-DfpLcAZ9.js.map → client-C9Cat4DK.js.map} +1 -1
- package/build/server/chunks/{error.svelte-C35KOpru.js → error.svelte-CzVR_A6P.js} +5 -5
- package/build/server/chunks/{error.svelte-C35KOpru.js.map → error.svelte-CzVR_A6P.js.map} +1 -1
- package/build/server/chunks/featureQueueContext-DuXpyTdC.js +32 -0
- package/build/server/chunks/featureQueueContext-DuXpyTdC.js.map +1 -0
- package/build/server/chunks/featureStore.svelte-DHZf88gu.js +162 -0
- package/build/server/chunks/featureStore.svelte-DHZf88gu.js.map +1 -0
- package/build/server/chunks/{projectsStore.svelte-QDz5PchX.js → featuresStore.svelte-bUyQBg1-.js} +95 -3
- package/build/server/chunks/featuresStore.svelte-bUyQBg1-.js.map +1 -0
- package/build/server/chunks/{hooks.server-Rv301GTB.js → hooks.server-y3jdg_sB.js} +6 -2
- package/build/server/chunks/hooks.server-y3jdg_sB.js.map +1 -0
- package/build/server/chunks/humanize-CkCPfeWi.js +53 -0
- package/build/server/chunks/humanize-CkCPfeWi.js.map +1 -0
- package/build/server/chunks/{index-server-7H0jzj0M.js → index-server-DvBux_Gf.js} +47 -2
- package/build/server/chunks/{index-server-7H0jzj0M.js.map → index-server-DvBux_Gf.js.map} +1 -1
- package/build/server/chunks/{internal-BPKrFkK1.js → internal-BFt8yDlf.js} +5 -5
- package/build/server/chunks/{internal-BPKrFkK1.js.map → internal-BFt8yDlf.js.map} +1 -1
- package/build/server/chunks/projectBundleClient-BtvWPh87.js +168 -0
- package/build/server/chunks/projectBundleClient-BtvWPh87.js.map +1 -0
- package/build/server/chunks/projectContextStore.svelte-jRJGJZ42.js +141 -0
- package/build/server/chunks/projectContextStore.svelte-jRJGJZ42.js.map +1 -0
- package/build/server/chunks/projectFeaturesStore.svelte-BwNEtDIL.js +87 -0
- package/build/server/chunks/projectFeaturesStore.svelte-BwNEtDIL.js.map +1 -0
- package/build/server/chunks/projectStore.svelte-BNuLNxk_.js +230 -0
- package/build/server/chunks/projectStore.svelte-BNuLNxk_.js.map +1 -0
- package/build/server/chunks/{reconcile-Dv7jS3C8.js → reconcile-CVG2LSlW.js} +54 -267
- package/build/server/chunks/reconcile-CVG2LSlW.js.map +1 -0
- package/build/server/chunks/registry-DqAn_hVE.js +21 -0
- package/build/server/chunks/registry-DqAn_hVE.js.map +1 -0
- package/build/server/chunks/{snapshotRepository-BPXCjX92.js → snapshotRepository-8f-2wTrb.js} +30 -5
- package/build/server/chunks/snapshotRepository-8f-2wTrb.js.map +1 -0
- package/build/server/chunks/{state-CpLVNZq7.js → state-CZZtjXLE.js} +3 -3
- package/build/server/chunks/{state-CpLVNZq7.js.map → state-CZZtjXLE.js.map} +1 -1
- package/build/server/chunks/{sync-DZ3dn761.js → sync-Bn6eSUhC.js} +3 -3
- package/build/server/chunks/{sync-DZ3dn761.js.map → sync-Bn6eSUhC.js.map} +1 -1
- package/build/server/chunks/{syncBridge-BwXzPdjJ.js → syncAwareRepositories-DvUjq5Q6.js} +27 -3
- package/build/server/chunks/syncAwareRepositories-DvUjq5Q6.js.map +1 -0
- package/build/server/chunks/{tagPaletteStore.svelte-DfZOBvgY.js → tagPaletteStore.svelte-C71bdzDl.js} +4 -4
- package/build/server/chunks/{tagPaletteStore.svelte-DfZOBvgY.js.map → tagPaletteStore.svelte-C71bdzDl.js.map} +1 -1
- package/build/server/index.js +2 -2
- package/build/server/index.js.map +1 -1
- package/build/server/manifest.js +74 -29
- package/build/server/manifest.js.map +1 -1
- package/cli/README.md +70 -2
- package/cli/commands/check.ts +190 -0
- package/cli/commands/ci.ts +71 -0
- package/cli/commands/coverage-ingest.ts +112 -0
- package/cli/commands/dashboard.ts +14 -0
- package/cli/commands/init.ts +26 -0
- package/cli/commands/scenarios-adapter.ts +96 -0
- package/cli/commands/theme.ts +62 -0
- package/cli/scenarios/adapter-scaffold.ts +99 -0
- package/cli/scenarios/codegen.ts +7 -1
- package/cli/scenarios/results.ts +85 -0
- package/cli/skills/unspa-audit/SKILL.md +19 -0
- package/cli/skills/unspa-edit/SKILL.md +20 -3
- package/cli/skills/unspa-implement/SKILL.md +28 -0
- package/cli/unspa.ts +136 -2
- package/cli/util/context-files.ts +18 -2
- package/cli/util/theme.ts +34 -0
- package/mcp-server/bin.ts +104 -104
- package/mcp-server/migrate-defaults.ts +164 -164
- package/mcp-server/repo-link.ts +142 -134
- package/mcp-server/resources/guide.ts +24 -4
- package/mcp-server/resources/operations.ts +3 -0
- package/mcp-server/seed-snapshots.ts +22 -22
- package/mcp-server/server.ts +8 -4
- package/mcp-server/sync-aware-repos.ts +79 -79
- package/mcp-server/sync-notifier.ts +180 -127
- package/mcp-server/tools/_codegen.ts +115 -115
- package/mcp-server/tools/_entity_builders.ts +30 -0
- package/mcp-server/tools/_shared.ts +210 -210
- package/mcp-server/tools/action.ts +210 -210
- package/mcp-server/tools/batch.ts +29 -5
- package/mcp-server/tools/effect.ts +139 -135
- package/mcp-server/tools/entity.ts +132 -132
- package/mcp-server/tools/entityField.ts +132 -132
- package/mcp-server/tools/event.ts +116 -116
- package/mcp-server/tools/feature.ts +264 -264
- package/mcp-server/tools/invariant.ts +275 -275
- package/mcp-server/tools/persona.ts +141 -141
- package/mcp-server/tools/project.ts +500 -391
- package/mcp-server/tools/reachabilityGoal.ts +97 -0
- package/mcp-server/tools/read.ts +526 -483
- package/mcp-server/tools/reorder.ts +114 -114
- package/mcp-server/tools/resource.ts +194 -194
- package/mcp-server/tools/rule.ts +302 -302
- package/mcp-server/tools/scenario.ts +4 -1
- package/mcp-server/tools/specGaps.ts +221 -221
- package/mcp-server/tools/state.ts +10 -2
- package/mcp-server/tools/surface.ts +102 -102
- package/mcp-server/tools/transition.ts +96 -96
- package/mcp-server/tools/verification.ts +131 -0
- package/package.json +15 -2
- package/src/app.css +208 -9
- package/src/app.html +15 -1
- package/src/features/behavior-model/application/ports/FeatureRepository.ts +16 -16
- package/src/features/behavior-model/application/use-cases/CreateFeature.ts +24 -24
- package/src/features/behavior-model/application/use-cases/DeleteFeature.ts +8 -8
- package/src/features/behavior-model/application/use-cases/GetFeature.ts +9 -9
- package/src/features/behavior-model/application/use-cases/ListFeatures.ts +10 -10
- package/src/features/behavior-model/application/use-cases/MutateFeature.ts +90 -90
- package/src/features/behavior-model/application/use-cases/SaveFeature.ts +31 -31
- package/src/features/behavior-model/domain/entities/Entity.ts +45 -45
- package/src/features/behavior-model/domain/entities/EventDefinition.ts +35 -35
- package/src/features/behavior-model/domain/entities/Feature.ts +10 -0
- package/src/features/behavior-model/domain/entities/Persona.ts +33 -33
- package/src/features/behavior-model/domain/entities/ReachabilityGoal.ts +39 -0
- package/src/features/behavior-model/domain/entities/Resource.ts +54 -54
- package/src/features/behavior-model/domain/entities/Scenario.ts +15 -0
- package/src/features/behavior-model/domain/entities/StateDefinition.ts +13 -0
- package/src/features/behavior-model/domain/entities/Surface.ts +75 -75
- package/src/features/behavior-model/domain/entities/index.ts +9 -9
- package/src/features/behavior-model/domain/services/BehaviorGraphModel.ts +556 -0
- package/src/features/behavior-model/domain/services/DerivedState.ts +67 -0
- package/src/features/behavior-model/domain/services/EffectApplier.ts +112 -3
- package/src/features/behavior-model/domain/services/EffectiveEntities.ts +166 -166
- package/src/features/behavior-model/domain/services/EntityDeducer.ts +83 -83
- package/src/features/behavior-model/domain/services/EventCatalog.ts +141 -141
- package/src/features/behavior-model/domain/services/FeatureExpressionNormalizer.ts +43 -5
- package/src/features/behavior-model/domain/services/FeatureSharedStateNormalizer.ts +24 -3
- package/src/features/behavior-model/domain/services/FeatureTransforms.ts +33 -0
- package/src/features/behavior-model/domain/services/FeatureValidator.ts +124 -16
- package/src/features/behavior-model/domain/services/PersonaApplier.ts +39 -39
- package/src/features/behavior-model/domain/services/ResourceDeducer.ts +64 -64
- package/src/features/behavior-model/domain/services/ResourceUsage.ts +79 -79
- package/src/features/behavior-model/domain/services/ScenarioApplier.ts +40 -40
- package/src/features/behavior-model/domain/services/SharedStateDefinitions.ts +32 -32
- package/src/features/behavior-model/domain/services/StatePathReferences.ts +249 -217
- package/src/features/behavior-model/domain/services/TransitionCatalog.ts +173 -173
- package/src/features/behavior-model/domain/value-objects/Effect.ts +100 -3
- package/src/features/behavior-model/domain/value-objects/EntityFieldType.ts +57 -57
- package/src/features/behavior-model/domain/value-objects/Expression.ts +22 -2
- package/src/features/behavior-model/domain/value-objects/ParameterType.ts +57 -57
- package/src/features/behavior-model/domain/value-objects/Resource.ts +210 -210
- package/src/features/behavior-model/domain/value-objects/RuleCategory.ts +57 -57
- package/src/features/behavior-model/domain/value-objects/RuleCondition.ts +52 -1
- package/src/features/behavior-model/domain/value-objects/SimulationClock.ts +35 -0
- package/src/features/behavior-model/domain/value-objects/ids.ts +2 -0
- package/src/features/behavior-model/infrastructure/io/FeatureJson.ts +89 -89
- package/src/features/behavior-model/infrastructure/persistence/HttpFeatureRepository.ts +43 -43
- package/src/features/behavior-model/infrastructure/persistence/JsonFolderFeatureRepository.ts +10 -0
- package/src/features/behavior-model/infrastructure/persistence/snapshot-discovery.ts +76 -76
- package/src/features/behavior-model/infrastructure/seed/seedStorefront.ts +967 -967
- package/src/features/behavior-model/presentation/adapters/VisBehaviorGraphRenderer.ts +501 -0
- package/src/features/behavior-model/presentation/components/ActionEditor.svelte +683 -682
- package/src/features/behavior-model/presentation/components/ActionsEditor.svelte +232 -232
- package/src/features/behavior-model/presentation/components/BehaviorGraph.svelte +568 -0
- package/src/features/behavior-model/presentation/components/EffectEditor.svelte +168 -168
- package/src/features/behavior-model/presentation/components/EntityEditor.svelte +241 -248
- package/src/features/behavior-model/presentation/components/EntityFieldRow.svelte +180 -181
- package/src/features/behavior-model/presentation/components/EntityManager.svelte +252 -251
- package/src/features/behavior-model/presentation/components/EventsManager.svelte +373 -372
- package/src/features/behavior-model/presentation/components/FeatureEditor.svelte +396 -348
- package/src/features/behavior-model/presentation/components/FeatureHeader.svelte +165 -148
- package/src/features/behavior-model/presentation/components/FeatureHealthStrip.svelte +110 -110
- package/src/features/behavior-model/presentation/components/HistoryPanel.svelte +154 -154
- package/src/features/behavior-model/presentation/components/NewFeatureForm.svelte +66 -66
- package/src/features/behavior-model/presentation/components/ParameterNameSelect.svelte +84 -84
- package/src/features/behavior-model/presentation/components/ParametersEditor.svelte +411 -411
- package/src/features/behavior-model/presentation/components/PersonaEditor.svelte +244 -244
- package/src/features/behavior-model/presentation/components/PersonasManager.svelte +130 -130
- package/src/features/behavior-model/presentation/components/ReachabilityGoalEditor.svelte +230 -0
- package/src/features/behavior-model/presentation/components/ReachabilityGoalsEditor.svelte +86 -0
- package/src/features/behavior-model/presentation/components/ResourcesManager.svelte +291 -290
- package/src/features/behavior-model/presentation/components/ScenariosEditor.svelte +496 -496
- package/src/features/behavior-model/presentation/components/StateDefinitionsEditor.svelte +356 -356
- package/src/features/behavior-model/presentation/components/SurfaceEntitiesView.svelte +88 -88
- package/src/features/behavior-model/presentation/components/SurfaceInvariantsEditor.svelte +76 -76
- package/src/features/behavior-model/presentation/components/SurfaceList.svelte +300 -300
- package/src/features/behavior-model/presentation/components/SurfaceMetaEditor.svelte +158 -156
- package/src/features/behavior-model/presentation/components/SurfacePanel.svelte +198 -198
- package/src/features/behavior-model/presentation/components/SurfacePersonasView.svelte +122 -122
- package/src/features/behavior-model/presentation/components/SurfaceResourcesView.svelte +113 -113
- package/src/features/behavior-model/presentation/components/SurfaceRulesEditor.svelte +69 -69
- package/src/features/behavior-model/presentation/components/TransitionsManager.svelte +322 -321
- package/src/features/behavior-model/presentation/context/featureQueueContext.ts +78 -0
- package/src/features/behavior-model/presentation/stores/editorStore.svelte.ts +132 -131
- package/src/features/behavior-model/presentation/stores/featureStore.svelte.ts +177 -177
- package/src/features/behavior-model/presentation/stores/featuresStore.svelte.ts +98 -98
- package/src/features/behavior-model/presentation/view-models/BehaviorGraphTheme.ts +44 -0
- package/src/features/behavior-model/presentation/view-models/factories.ts +181 -132
- package/src/features/builder-mode/domain/BuilderModeDashboard.ts +7 -1
- package/src/features/builder-mode/presentation/components/BuilderModeDashboard.svelte +78 -16
- package/src/features/builder-mode/presentation/components/BuilderTagChips.svelte +25 -0
- package/src/features/builder-mode/presentation/stores/builderModeStore.svelte.ts +247 -3
- package/src/features/domains/infrastructure/persistence/JsonFolderDomainRepository.ts +9 -0
- package/src/features/global-search/application/use-cases/LoadSearchIndex.ts +70 -0
- package/src/features/global-search/domain/SearchDoc.ts +111 -0
- package/src/features/global-search/domain/buildSearchDocs.ts +483 -0
- package/src/features/global-search/domain/searchNav.ts +58 -0
- package/src/features/global-search/domain/searchScoring.ts +81 -0
- package/src/features/global-search/infrastructure/adapters/defaultSearchHost.ts +28 -0
- package/src/features/global-search/presentation/components/GlobalSearch.svelte +262 -0
- package/src/features/global-search/presentation/ports/SearchHostPorts.ts +41 -0
- package/src/features/global-search/presentation/searchKindMeta.ts +108 -0
- package/src/features/global-search/presentation/stores/globalSearchStore.svelte.ts +171 -0
- package/src/features/implementation-queue/presentation/components/FloatingQueueWidget.svelte +264 -0
- package/src/features/implementation-queue/presentation/stores/globalQueueStore.svelte.ts +172 -0
- package/src/features/implementation-status/application/ports/ImplementationStatusRepository.ts +8 -8
- package/src/features/implementation-status/application/use-cases/GetImplementationStatus.ts +8 -8
- package/src/features/implementation-status/domain/ApplyCapturedToSpec.ts +323 -322
- package/src/features/implementation-status/domain/FieldDiff.ts +238 -236
- package/src/features/implementation-status/infrastructure/persistence/InMemoryImplementationStatusRepository.ts +21 -21
- package/src/features/implementation-status/presentation/components/ImplementationStatusPanel.svelte +831 -831
- package/src/features/implementation-status/presentation/stores/implementationStatusStore.svelte.ts +97 -97
- package/src/features/library/application/use-cases/ApplyBlueprintsToFeature.ts +33 -33
- package/src/features/library/domain/services/BlueprintApplier.ts +94 -94
- package/src/features/library/infrastructure/blueprints/auth/ResetPasswordBlueprint.ts +332 -332
- package/src/features/library/infrastructure/blueprints/auth/SignInBlueprint.ts +281 -281
- package/src/features/library/infrastructure/blueprints/auth/SignUpBlueprint.ts +299 -299
- package/src/features/library/infrastructure/blueprints/auth/VerifyEmailBlueprint.ts +288 -288
- package/src/features/library/infrastructure/blueprints/auth/shared.ts +146 -146
- package/src/features/library/infrastructure/blueprints/commerce/CartBlueprint.ts +222 -222
- package/src/features/library/infrastructure/blueprints/commerce/CatalogBlueprint.ts +190 -190
- package/src/features/library/infrastructure/blueprints/commerce/CheckoutBlueprint.ts +322 -322
- package/src/features/library/infrastructure/blueprints/commerce/OrderConfirmationBlueprint.ts +172 -172
- package/src/features/library/infrastructure/blueprints/commerce/ProductDetailsBlueprint.ts +290 -290
- package/src/features/library/infrastructure/blueprints/content/ReviewsBlueprint.ts +392 -392
- package/src/features/library/infrastructure/blueprints/onboarding/OnboardingWizardBlueprint.ts +344 -344
- package/src/features/library/infrastructure/blueprints/utility/CanvasBlueprint.ts +419 -419
- package/src/features/library/infrastructure/blueprints/utility/CookieConsentBlueprint.ts +195 -195
- package/src/features/library/infrastructure/blueprints/utility/NotFoundBlueprint.ts +86 -86
- package/src/features/library/infrastructure/blueprints/utility/SearchPaletteBlueprint.ts +192 -192
- package/src/features/library/infrastructure/blueprints/utility/StoreLocatorBlueprint.ts +221 -221
- package/src/features/library/infrastructure/blueprints/utility/TaskBoardBlueprint.ts +196 -196
- package/src/features/maturity/application/use-cases/ScoreFeature.ts +7 -7
- package/src/features/maturity/domain/MaturityReport.ts +70 -70
- package/src/features/maturity/domain/MaturityScorer.ts +1001 -985
- package/src/features/maturity/presentation/components/MaturityPanel.svelte +376 -372
- package/src/features/mcp-tools/application/tools/dryRunSimulate.ts +24 -24
- package/src/features/mcp-tools/application/tools/findStateReferences.ts +19 -19
- package/src/features/mcp-tools/application/tools/generateTypes.ts +0 -1
- package/src/features/mcp-tools/application/tools/getAction.ts +165 -165
- package/src/features/mcp-tools/application/tools/getFeature.ts +5 -5
- package/src/features/mcp-tools/application/tools/getFeatureIndex.ts +79 -79
- package/src/features/mcp-tools/application/tools/getNeighborhood.ts +319 -319
- package/src/features/mcp-tools/application/tools/getSurface.ts +86 -86
- package/src/features/mcp-tools/application/tools/index.ts +56 -56
- package/src/features/mcp-tools/application/tools/listActions.ts +49 -49
- package/src/features/mcp-tools/application/tools/listFeatures.ts +7 -7
- package/src/features/mcp-tools/application/tools/scoreFeature.ts +153 -153
- package/src/features/projects/application/ports/ProjectRepository.ts +14 -14
- package/src/features/projects/application/use-cases/AddFeatureToProject.ts +23 -23
- package/src/features/projects/application/use-cases/CreateProject.ts +16 -16
- package/src/features/projects/application/use-cases/FindProjectContainingFeature.ts +23 -23
- package/src/features/projects/application/use-cases/GetProjectAggregate.ts +131 -131
- package/src/features/projects/application/use-cases/ImportProjectBundle.ts +45 -0
- package/src/features/projects/application/use-cases/MoveFeatureInProject.ts +36 -36
- package/src/features/projects/application/use-cases/RemoveFeatureFromProject.ts +23 -23
- package/src/features/projects/domain/entities/Project.ts +12 -0
- package/src/features/projects/domain/services/InheritedFromProject.ts +130 -130
- package/src/features/projects/infrastructure/persistence/JsonFolderProjectRepository.ts +9 -0
- package/src/features/projects/presentation/components/ProjectCard.svelte +27 -8
- package/src/features/projects/presentation/components/ProjectEditor.svelte +23 -19
- package/src/features/projects/presentation/components/ProjectFeaturesPanel.svelte +433 -433
- package/src/features/projects/presentation/components/ProjectsIndex.svelte +54 -10
- package/src/features/projects/presentation/stores/projectContextStore.svelte.ts +170 -170
- package/src/features/projects/presentation/stores/projectFeaturesStore.svelte.ts +114 -114
- package/src/features/projects/presentation/stores/projectStore.svelte.ts +265 -266
- package/src/features/projects/presentation/stores/projectsStore.svelte.ts +134 -134
- package/src/features/simulator/application/use-cases/RunScenarios.ts +27 -1
- package/src/features/simulator/application/use-cases/SimulateAction.ts +47 -47
- package/src/features/simulator/domain/SimulationResult.ts +79 -79
- package/src/features/simulator/domain/SimulatorEngine.ts +43 -9
- package/src/features/simulator/domain/StateExplorer.ts +369 -0
- package/src/features/simulator/domain/SurfaceReachability.ts +130 -0
- package/src/features/simulator/presentation/components/ParameterInputs.svelte +277 -277
- package/src/features/simulator/presentation/components/PersonaPicker.svelte +52 -52
- package/src/features/simulator/presentation/components/ScenarioPicker.svelte +42 -45
- package/src/features/simulator/presentation/components/SidePanel.svelte +170 -170
- package/src/features/simulator/presentation/components/SimulationResultView.svelte +394 -394
- package/src/features/simulator/presentation/components/SimulatorPanel.svelte +293 -293
- package/src/features/simulator/presentation/components/StateInspector.svelte +101 -101
- package/src/features/simulator/presentation/stores/simulatorStore.svelte.ts +268 -268
- package/src/features/tutorial/presentation/components/CodeBlock.svelte +5 -1
- package/src/features/verification/application/ports/BehavioralIndexReader.ts +12 -0
- package/src/features/verification/application/use-cases/VerifyFeatures.ts +151 -0
- package/src/features/verification/domain/DriftReport.ts +37 -0
- package/src/features/verification/domain/EventCoherenceReport.ts +27 -0
- package/src/features/verification/domain/IndexedImplementation.ts +27 -0
- package/src/features/verification/domain/VerificationReport.ts +59 -0
- package/src/features/verification/domain/VerificationThresholds.ts +52 -0
- package/src/features/verification/domain/VerificationVerdict.ts +43 -0
- package/src/features/verification/domain/aggregateVerdict.ts +244 -0
- package/src/features/verification/domain/analyzeEventCoherence.ts +43 -0
- package/src/features/verification/domain/detectDrift.ts +166 -0
- package/src/features/verification/domain/verifiedCoverage.ts +37 -0
- package/src/features/verification/infrastructure/persistence/FileBehavioralIndexReader.ts +81 -0
- package/src/features/verification/infrastructure/persistence/StaticBehavioralIndexReader.ts +15 -0
- package/src/features/verification/presentation/components/VerifyPanel.svelte +74 -0
- package/src/features/verification/presentation/stores/verificationStore.svelte.ts +64 -0
- package/src/hooks.server.ts +11 -1
- package/src/lib/server/openLocalDirectory.ts +40 -0
- package/src/lib/server/searchIndex.ts +161 -0
- package/src/lib/server/snapshotRepository.ts +37 -37
- package/src/lib/server/sync/YDocManager.ts +391 -391
- package/src/lib/server/sync/historyStore.ts +276 -276
- package/src/lib/server/sync/wsServer.ts +1 -1
- package/src/lib/sync/protocol.ts +147 -147
- package/src/lib/sync/roomId.ts +33 -33
- package/src/lib/theme/registry.ts +77 -0
- package/src/lib/theme/themeStore.svelte.ts +64 -0
- package/src/routes/+layout.svelte +288 -30
- package/src/routes/api/domains/[id]/+server.ts +7 -3
- package/src/routes/api/projects/[id]/+server.ts +14 -4
- package/src/routes/api/projects/import/+server.ts +16 -38
- package/src/routes/api/search-index/+server.ts +16 -0
- package/src/routes/api/snapshots/[id]/+server.ts +56 -44
- package/src/routes/api/snapshots/[id]/implementation-status/+server.ts +13 -13
- package/src/routes/api/snapshots/[id]/verify/+server.ts +37 -0
- package/src/routes/api/sync/reload/+server.ts +157 -157
- package/src/routes/api/system/hub-directory/+server.ts +24 -0
- package/src/routes/features/+page.svelte +484 -484
- package/src/routes/features/[id]/+page.svelte +55 -49
- package/src/routes/features/[id]/graph/+page.svelte +39 -0
- package/src/routes/features/[id]/verify/+page.svelte +89 -0
- package/src/routes/mcp/+page.svelte +16 -1
- package/src/routes/projects/[id]/+page.svelte +70 -70
- package/src/routes/projects/[id]/graph/+page.svelte +79 -0
- package/src/routes/tutorial/+page.svelte +3 -2
- package/src/shared/infrastructure/browserContainer.ts +61 -61
- package/src/shared/presentation/components/KebabMenu.svelte +95 -0
- package/src/shared/presentation/components/MenuItem.svelte +29 -0
- package/src/shared/presentation/components/ProgressBar.svelte +1 -1
- package/src/shared/presentation/toast/SyncToast.svelte +14 -3
- package/src/shared/presentation/toast/viewLinkResolver.ts +32 -0
- package/static/lyriks_logo.svg +148 -0
- package/vite.config.ts +47 -47
- package/build/client/_app/immutable/assets/0.DFMDYAU9.css +0 -1
- package/build/client/_app/immutable/assets/0.DFMDYAU9.css.br +0 -0
- package/build/client/_app/immutable/assets/0.DFMDYAU9.css.gz +0 -0
- package/build/client/_app/immutable/assets/9.nv0I59TU.css.gz +0 -0
- package/build/client/_app/immutable/chunks/BO66rBOa2.js +0 -1
- package/build/client/_app/immutable/chunks/BO66rBOa2.js.br +0 -0
- package/build/client/_app/immutable/chunks/BO66rBOa2.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BOrLmFwJ.js.br +0 -0
- package/build/client/_app/immutable/chunks/BOrLmFwJ.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BfMYiIUi.js.br +0 -0
- package/build/client/_app/immutable/chunks/BfMYiIUi.js.gz +0 -0
- package/build/client/_app/immutable/chunks/Bp2_Vghh.js +0 -1
- package/build/client/_app/immutable/chunks/Bp2_Vghh.js.br +0 -0
- package/build/client/_app/immutable/chunks/Bp2_Vghh.js.gz +0 -0
- package/build/client/_app/immutable/chunks/Bp8HpEPe2.js +0 -4
- package/build/client/_app/immutable/chunks/Bp8HpEPe2.js.br +0 -0
- package/build/client/_app/immutable/chunks/Bp8HpEPe2.js.gz +0 -0
- package/build/client/_app/immutable/chunks/C8rRKIXT.js +0 -1
- package/build/client/_app/immutable/chunks/C8rRKIXT.js.br +0 -0
- package/build/client/_app/immutable/chunks/C8rRKIXT.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CJjJLwzv2.js +0 -1
- package/build/client/_app/immutable/chunks/CJjJLwzv2.js.br +0 -0
- package/build/client/_app/immutable/chunks/CJjJLwzv2.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CxyLMlpt2.js.br +0 -0
- package/build/client/_app/immutable/chunks/CxyLMlpt2.js.gz +0 -0
- package/build/client/_app/immutable/chunks/D6jhrpTg.js +0 -1
- package/build/client/_app/immutable/chunks/D6jhrpTg.js.br +0 -0
- package/build/client/_app/immutable/chunks/D6jhrpTg.js.gz +0 -0
- package/build/client/_app/immutable/chunks/D8YEa1po.js +0 -1
- package/build/client/_app/immutable/chunks/D8YEa1po.js.br +0 -0
- package/build/client/_app/immutable/chunks/D8YEa1po.js.gz +0 -0
- package/build/client/_app/immutable/chunks/D9dKmajw.js +0 -1
- package/build/client/_app/immutable/chunks/D9dKmajw.js.br +0 -0
- package/build/client/_app/immutable/chunks/D9dKmajw.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DBJWcC6Y.js +0 -1
- package/build/client/_app/immutable/chunks/DBJWcC6Y.js.br +0 -0
- package/build/client/_app/immutable/chunks/DBJWcC6Y.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DHoA038D.js +0 -1
- package/build/client/_app/immutable/chunks/DHoA038D.js.br +0 -2
- package/build/client/_app/immutable/chunks/DHoA038D.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DKgYpi6_.js +0 -1
- package/build/client/_app/immutable/chunks/DKgYpi6_.js.br +0 -0
- package/build/client/_app/immutable/chunks/DKgYpi6_.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DatGSObE.js +0 -1
- package/build/client/_app/immutable/chunks/DatGSObE.js.br +0 -0
- package/build/client/_app/immutable/chunks/DatGSObE.js.gz +0 -0
- package/build/client/_app/immutable/chunks/Dg0acPpT.js +0 -1
- package/build/client/_app/immutable/chunks/Dg0acPpT.js.br +0 -0
- package/build/client/_app/immutable/chunks/Dg0acPpT.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DjWKKtqp.js +0 -1
- package/build/client/_app/immutable/chunks/DjWKKtqp.js.br +0 -1
- package/build/client/_app/immutable/chunks/DjWKKtqp.js.gz +0 -0
- package/build/client/_app/immutable/chunks/Dq0DUAz1.js +0 -1
- package/build/client/_app/immutable/chunks/Dq0DUAz1.js.br +0 -0
- package/build/client/_app/immutable/chunks/Dq0DUAz1.js.gz +0 -0
- package/build/client/_app/immutable/chunks/HKLi1Yz3.js +0 -1
- package/build/client/_app/immutable/chunks/HKLi1Yz3.js.br +0 -0
- package/build/client/_app/immutable/chunks/HKLi1Yz3.js.gz +0 -0
- package/build/client/_app/immutable/chunks/N7PXjlRH.js +0 -1
- package/build/client/_app/immutable/chunks/N7PXjlRH.js.br +0 -0
- package/build/client/_app/immutable/chunks/N7PXjlRH.js.gz +0 -0
- package/build/client/_app/immutable/chunks/hpWJNn0t2.js +0 -2
- package/build/client/_app/immutable/chunks/hpWJNn0t2.js.br +0 -0
- package/build/client/_app/immutable/chunks/hpWJNn0t2.js.gz +0 -0
- package/build/client/_app/immutable/chunks/iQu0D9Ux.js +0 -1
- package/build/client/_app/immutable/chunks/iQu0D9Ux.js.br +0 -0
- package/build/client/_app/immutable/chunks/iQu0D9Ux.js.gz +0 -0
- package/build/client/_app/immutable/entry/app.CLgh6Mx_.js +0 -2
- package/build/client/_app/immutable/entry/app.CLgh6Mx_.js.br +0 -0
- package/build/client/_app/immutable/entry/app.CLgh6Mx_.js.gz +0 -0
- package/build/client/_app/immutable/entry/start.D5GPCQZD.js +0 -1
- package/build/client/_app/immutable/entry/start.D5GPCQZD.js.br +0 -0
- package/build/client/_app/immutable/entry/start.D5GPCQZD.js.gz +0 -0
- package/build/client/_app/immutable/nodes/0.BOoI-hsu.js +0 -4
- package/build/client/_app/immutable/nodes/0.BOoI-hsu.js.br +0 -0
- package/build/client/_app/immutable/nodes/0.BOoI-hsu.js.gz +0 -0
- package/build/client/_app/immutable/nodes/1.KYdA6ppX.js.br +0 -2
- package/build/client/_app/immutable/nodes/1.KYdA6ppX.js.gz +0 -0
- package/build/client/_app/immutable/nodes/2.DBz20KgG.js.br +0 -0
- package/build/client/_app/immutable/nodes/2.DBz20KgG.js.gz +0 -0
- package/build/client/_app/immutable/nodes/3.19DIoFtw.js +0 -1
- package/build/client/_app/immutable/nodes/3.19DIoFtw.js.br +0 -0
- package/build/client/_app/immutable/nodes/3.19DIoFtw.js.gz +0 -0
- package/build/client/_app/immutable/nodes/4.BvMzqBJj.js +0 -3
- package/build/client/_app/immutable/nodes/4.BvMzqBJj.js.br +0 -0
- package/build/client/_app/immutable/nodes/4.BvMzqBJj.js.gz +0 -0
- package/build/client/_app/immutable/nodes/5.Dq6obSGG.js +0 -42
- package/build/client/_app/immutable/nodes/5.Dq6obSGG.js.br +0 -0
- package/build/client/_app/immutable/nodes/5.Dq6obSGG.js.gz +0 -0
- package/build/client/_app/immutable/nodes/6.BOHISqs-.js +0 -5
- package/build/client/_app/immutable/nodes/6.BOHISqs-.js.br +0 -0
- package/build/client/_app/immutable/nodes/6.BOHISqs-.js.gz +0 -0
- package/build/client/_app/immutable/nodes/7.CemgNJfw.js.br +0 -0
- package/build/client/_app/immutable/nodes/7.CemgNJfw.js.gz +0 -0
- package/build/client/_app/immutable/nodes/8.DejSfIYh.js +0 -5
- package/build/client/_app/immutable/nodes/8.DejSfIYh.js.br +0 -0
- package/build/client/_app/immutable/nodes/8.DejSfIYh.js.gz +0 -0
- package/build/client/_app/immutable/nodes/9.CMW6a2Lg.js.br +0 -0
- package/build/client/_app/immutable/nodes/9.CMW6a2Lg.js.gz +0 -0
- package/build/server/chunks/0-C_o0oz-N.js +0 -15
- package/build/server/chunks/0-C_o0oz-N.js.map +0 -1
- package/build/server/chunks/1-DPpKAKXV.js +0 -9
- package/build/server/chunks/2-AlfFqtL1.js +0 -9
- package/build/server/chunks/2-AlfFqtL1.js.map +0 -1
- package/build/server/chunks/3-vbjUt_51.js +0 -16
- package/build/server/chunks/3-vbjUt_51.js.map +0 -1
- package/build/server/chunks/4-BNow4x6D.js +0 -16
- package/build/server/chunks/4-BNow4x6D.js.map +0 -1
- package/build/server/chunks/5-D7OCJpxD.js +0 -9
- package/build/server/chunks/5-D7OCJpxD.js.map +0 -1
- package/build/server/chunks/6-QQ7r8Rd5.js +0 -9
- package/build/server/chunks/7-CbPLGaIG.js +0 -9
- package/build/server/chunks/7-CbPLGaIG.js.map +0 -1
- package/build/server/chunks/8-CVO-E-sf.js +0 -9
- package/build/server/chunks/8-CVO-E-sf.js.map +0 -1
- package/build/server/chunks/9-DxT1baO5.js +0 -9
- package/build/server/chunks/9-DxT1baO5.js.map +0 -1
- package/build/server/chunks/FeatureTransforms-UWDHmWEg.js.map +0 -1
- package/build/server/chunks/FeatureValidator-B8qEjAUW.js.map +0 -1
- package/build/server/chunks/ManageTagsDialog-DBxA3tM2.js.map +0 -1
- package/build/server/chunks/ProgressBar-CfhccQ83.js.map +0 -1
- package/build/server/chunks/ProjectsIndex-CoDrvRya.js.map +0 -1
- package/build/server/chunks/RenameTag-BuWLMl1m.js.map +0 -1
- package/build/server/chunks/TagDotStrip-B1XQ0m0Y.js.map +0 -1
- package/build/server/chunks/TagPalette-CtMNYCmu.js.map +0 -1
- package/build/server/chunks/_layout.svelte-BREws55o.js +0 -616
- package/build/server/chunks/_layout.svelte-BREws55o.js.map +0 -1
- package/build/server/chunks/_page.svelte-B1s7jxaQ.js.map +0 -1
- package/build/server/chunks/_page.svelte-B7hT3P8E.js +0 -29
- package/build/server/chunks/_page.svelte-BqSC-1vK.js.map +0 -1
- package/build/server/chunks/_page.svelte-BtI2zZ_Z.js.map +0 -1
- package/build/server/chunks/_page.svelte-De508ek8.js +0 -29
- package/build/server/chunks/_page.svelte-Zf9H4KOP.js.map +0 -1
- package/build/server/chunks/_server.ts-0uNTZKwF.js.map +0 -1
- package/build/server/chunks/_server.ts-DcZPhyhK.js +0 -59
- package/build/server/chunks/_server.ts-DcZPhyhK.js.map +0 -1
- package/build/server/chunks/_server.ts-Dy5zQHe2.js.map +0 -1
- package/build/server/chunks/_server.ts-YnfXkeMJ.js.map +0 -1
- package/build/server/chunks/_server.ts-vcaqdwxS.js.map +0 -1
- package/build/server/chunks/browserContainer-CNX7ANld.js.map +0 -1
- package/build/server/chunks/builderModeStore.svelte-ihupr-3p.js.map +0 -1
- package/build/server/chunks/client-DfpLcAZ9.js +0 -24
- package/build/server/chunks/featuresStore.svelte-DR1gYZyu.js +0 -98
- package/build/server/chunks/featuresStore.svelte-DR1gYZyu.js.map +0 -1
- package/build/server/chunks/hooks.server-Rv301GTB.js.map +0 -1
- package/build/server/chunks/identityStore.svelte-IIvW2_3b.js +0 -59
- package/build/server/chunks/identityStore.svelte-IIvW2_3b.js.map +0 -1
- package/build/server/chunks/projectsStore.svelte-QDz5PchX.js.map +0 -1
- package/build/server/chunks/reconcile-Dv7jS3C8.js.map +0 -1
- package/build/server/chunks/snapshotRepository-BPXCjX92.js.map +0 -1
- package/build/server/chunks/syncBridge-BwXzPdjJ.js.map +0 -1
- package/src/features/implementation-queue/presentation/components/QueuePanel.svelte +0 -204
- package/src/features/implementation-queue/presentation/stores/queueStore.svelte.ts +0 -143
- /package/build/client/_app/immutable/assets/{9.nv0I59TU.css → 12.nv0I59TU.css} +0 -0
- /package/build/client/_app/immutable/assets/{9.nv0I59TU.css.br → 12.nv0I59TU.css.br} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browserContainer-BdldtueJ.js","sources":["../../../.svelte-kit/adapter-node/chunks/browserContainer.js"],"sourcesContent":["import { it as __exportAll } from \"./index-server.js\";\nimport { X as normalizeTags, _ as asFeatureId, a as isTagColor, c as setTypeColor, d as isEmptyTarget, f as queueItemKey, l as asQueueItemId, n as emptyTagPalette, t as clearTypeColor } from \"./TagPalette.js\";\nimport { t as systemClock } from \"./Clock.js\";\nimport { n as saveDomainUseCase, r as getDomainUseCase, t as deleteDomainUseCase } from \"./DeleteDomain.js\";\nimport { n as saveProjectUseCase, r as getProjectUseCase, t as deleteProjectUseCase } from \"./DeleteProject.js\";\nimport { a as getFeatureUseCase, i as mutateFeatureUseCase, n as saveFeatureUseCase, t as deleteFeatureUseCase } from \"./DeleteFeature.js\";\nimport { s as scoreFeature, t as simulate } from \"./SimulatorEngine.js\";\nimport { t as asProjectId } from \"./ids.js\";\nimport { t as renameTagUseCase } from \"./RenameTag.js\";\n//#region src/shared/presentation/dialogs/dialogStore.svelte.ts\nvar DialogStore = class {\n\tcurrent = null;\n\tconfirm(opts) {\n\t\treturn new Promise((resolve) => {\n\t\t\tthis.current = {\n\t\t\t\tkind: \"confirm\",\n\t\t\t\topts,\n\t\t\t\tresolve\n\t\t\t};\n\t\t});\n\t}\n\talert(opts) {\n\t\treturn new Promise((resolve) => {\n\t\t\tthis.current = {\n\t\t\t\tkind: \"alert\",\n\t\t\t\topts,\n\t\t\t\tresolve\n\t\t\t};\n\t\t});\n\t}\n\tchecklist(opts) {\n\t\treturn new Promise((resolve) => {\n\t\t\tthis.current = {\n\t\t\t\tkind: \"checklist\",\n\t\t\t\topts,\n\t\t\t\tresolve\n\t\t\t};\n\t\t});\n\t}\n\tchoose(opts) {\n\t\treturn new Promise((resolve) => {\n\t\t\tthis.current = {\n\t\t\t\tkind: \"choice\",\n\t\t\t\topts,\n\t\t\t\tresolve\n\t\t\t};\n\t\t});\n\t}\n\tprompt(opts) {\n\t\treturn new Promise((resolve) => {\n\t\t\tthis.current = {\n\t\t\t\tkind: \"prompt\",\n\t\t\t\topts,\n\t\t\t\tresolve\n\t\t\t};\n\t\t});\n\t}\n\tresolveCurrent(value, selectedIds = []) {\n\t\tif (!this.current) return;\n\t\tconst req = this.current;\n\t\tthis.current = null;\n\t\tif (req.kind === \"confirm\") req.resolve(value);\n\t\telse if (req.kind === \"alert\") req.resolve();\n\t\telse if (req.kind === \"checklist\") req.resolve({\n\t\t\tconfirmed: value,\n\t\t\tselectedIds\n\t\t});\n\t\telse req.resolve(null);\n\t}\n\tresolveChoice(id) {\n\t\tif (!this.current || this.current.kind !== \"choice\") return;\n\t\tconst req = this.current;\n\t\tthis.current = null;\n\t\treq.resolve(id);\n\t}\n\tresolvePrompt(value) {\n\t\tif (!this.current || this.current.kind !== \"prompt\") return;\n\t\tconst req = this.current;\n\t\tthis.current = null;\n\t\treq.resolve(value);\n\t}\n};\nvar dialogStore = new DialogStore();\nvar confirmDialog = (opts) => dialogStore.confirm(opts);\nvar alertDialog = (opts) => dialogStore.alert(opts);\nvar checklistDialog = (opts) => dialogStore.checklist(opts);\nvar promptDialog = (opts) => dialogStore.prompt(opts);\n//#endregion\n//#region src/shared/security/authStore.svelte.ts\nvar STORAGE_KEY = \"unspa.auth.token\";\nvar AuthStore = class {\n\t/** Empty string when unset. */\n\ttoken = \"\";\n\tinitialized = false;\n\t/** Hydrate from localStorage. Idempotent. */\n\tinit() {\n\t\tif (this.initialized) return;\n\t\tthis.initialized = true;\n\t\tif (typeof localStorage === \"undefined\") return;\n\t\tconst stored = localStorage.getItem(STORAGE_KEY);\n\t\tif (stored) this.token = stored;\n\t}\n\tsetToken(next) {\n\t\tconst trimmed = next.trim();\n\t\tthis.token = trimmed;\n\t\tif (typeof localStorage === \"undefined\") return;\n\t\tif (trimmed.length > 0) localStorage.setItem(STORAGE_KEY, trimmed);\n\t\telse localStorage.removeItem(STORAGE_KEY);\n\t}\n\tclear() {\n\t\tthis.setToken(\"\");\n\t}\n\tget hasToken() {\n\t\treturn this.token.length > 0;\n\t}\n};\nvar authStore = new AuthStore();\n//#endregion\n//#region src/shared/security/apiFetch.ts\n/**\n* Wrapper around `fetch` that injects the dashboard auth token (when\n* one is stored) and, on a 401, opens a prompt to capture / update it\n* and retries the request once. All HTTP repositories funnel through\n* this so a missing or stale token surfaces as a single in-app dialog\n* instead of cascading 401s scattered across feature/project/status\n* call sites.\n*\n* Behavior summary:\n* - No token in store → call goes out unauthenticated. If the server\n* doesn't require auth (default install), 200. If it does, 401\n* → prompt → retry.\n* - Token in store → header attached. On 401, assume the token is\n* stale (rotated server-side), prompt for a fresh one, retry.\n* - User cancels the prompt → the original 401 surfaces and the\n* caller decides what to do. Most repos already render an error;\n* the user can re-attempt by clicking again after setting a token\n* via the dashboard somehow (e.g. closing/reopening the tab).\n*\n* Single retry max — no infinite loop if the user keeps cancelling.\n*/\nvar buildHeaders = (init, token) => {\n\tconst headers = new Headers(init?.headers);\n\tif (token.length > 0) headers.set(\"Authorization\", `Bearer ${token}`);\n\treturn headers;\n};\nvar promptInFlight = null;\nvar requestTokenOnce = async (reason) => {\n\tif (promptInFlight) return promptInFlight;\n\tpromptInFlight = promptDialog({\n\t\ttitle: \"Dashboard access token required\",\n\t\tmessage: `${reason}\\n\\nAsk the admin who started this dashboard for the value of UNSPA_AUTH_TOKEN.`,\n\t\tinputLabel: \"Access token\",\n\t\tpassword: true,\n\t\tconfirmLabel: \"Sign in\",\n\t\ttone: \"info\"\n\t});\n\ttry {\n\t\treturn await promptInFlight;\n\t} finally {\n\t\tpromptInFlight = null;\n\t}\n};\nvar apiFetch = async (input, init) => {\n\tconst send = (token) => fetch(input, {\n\t\t...init,\n\t\theaders: buildHeaders(init, token)\n\t});\n\tconst initialToken = authStore.token;\n\tconst first = await send(initialToken);\n\tif (first.status !== 401) return first;\n\tconst next = await requestTokenOnce(initialToken.length === 0 ? \"This dashboard is gated by a shared access token.\" : \"The stored access token was rejected. The admin may have rotated it.\");\n\tif (next === null || next.length === 0) return first;\n\tauthStore.setToken(next);\n\treturn send(next);\n};\n//#endregion\n//#region src/features/behavior-model/infrastructure/persistence/InMemoryFeatureRepository.ts\nvar toSummary$2 = (e) => ({\n\tid: e.id,\n\tname: e.name,\n\tdescription: e.description,\n\ttags: normalizeTags(e.tags),\n\tsurfaceCount: e.surfaces.length,\n\tactionCount: e.surfaces.reduce((acc, s) => acc + s.actions.length, 0),\n\tcreatedAt: e.createdAt,\n\tupdatedAt: e.updatedAt\n});\nvar InMemoryFeatureRepository = class {\n\tstore = /* @__PURE__ */ new Map();\n\tasync list() {\n\t\treturn Array.from(this.store.values()).sort((a, b) => (b.updatedAt ?? \"\").localeCompare(a.updatedAt ?? \"\")).map(toSummary$2);\n\t}\n\tasync get(id) {\n\t\treturn this.store.get(id) ?? null;\n\t}\n\tasync save(feature) {\n\t\tthis.store.set(feature.id, feature);\n\t}\n\tasync delete(id) {\n\t\tthis.store.delete(id);\n\t}\n\tclear() {\n\t\tthis.store.clear();\n\t}\n};\n//#endregion\n//#region src/features/behavior-model/infrastructure/seed/seedFeatures.ts\nvar seedFeatures = [];\n//#endregion\n//#region samples/eshop/account-auth.feature.json\nvar account_auth_feature_exports = /* @__PURE__ */ __exportAll({\n\tdefault: () => account_auth_feature_default,\n\tfeature: () => feature$3,\n\tformat: () => format$4,\n\tversion: () => 1\n});\nvar format$4 = \"unspaghettit\";\nvar feature$3 = /* @__PURE__ */ JSON.parse(\"{\\\"id\\\":\\\"941e4158\\\",\\\"name\\\":\\\"Account & auth\\\",\\\"description\\\":\\\"Sign up, sign in, and verify email. Locks out repeated failures, caps verification retries, and sends a welcome email after signup.\\\",\\\"surfaces\\\":[{\\\"id\\\":\\\"86fcdef9\\\",\\\"name\\\":\\\"Sign up\\\",\\\"type\\\":\\\"screen\\\",\\\"description\\\":\\\"Account creation form. Validates the buyer's input, blocks duplicates, and hands off to email verification.\\\",\\\"stateDefinitions\\\":[{\\\"id\\\":\\\"d209fd87\\\",\\\"path\\\":\\\"user.authenticated\\\",\\\"type\\\":\\\"boolean\\\",\\\"defaultValue\\\":false,\\\"description\\\":\\\"Whether the visitor is signed in.\\\",\\\"sharedWith\\\":[\\\"493e1030\\\",\\\"ab24f04f\\\"]},{\\\"id\\\":\\\"2db43325\\\",\\\"path\\\":\\\"user.exists\\\",\\\"type\\\":\\\"boolean\\\",\\\"defaultValue\\\":false,\\\"description\\\":\\\"Whether the email already has an account.\\\",\\\"sharedWith\\\":[\\\"493e1030\\\"]},{\\\"id\\\":\\\"6428c5f0\\\",\\\"path\\\":\\\"user.emailVerified\\\",\\\"type\\\":\\\"boolean\\\",\\\"defaultValue\\\":false,\\\"description\\\":\\\"Whether the user's email has been verified.\\\",\\\"sharedWith\\\":[\\\"ab24f04f\\\"]},{\\\"id\\\":\\\"319bd866\\\",\\\"path\\\":\\\"form.emailValid\\\",\\\"type\\\":\\\"boolean\\\",\\\"defaultValue\\\":true,\\\"description\\\":\\\"Result of the client-side email format check.\\\"},{\\\"id\\\":\\\"9032b8fa\\\",\\\"path\\\":\\\"form.passwordStrong\\\",\\\"type\\\":\\\"boolean\\\",\\\"defaultValue\\\":true,\\\"description\\\":\\\"Whether the proposed password passes the strength meter.\\\"},{\\\"id\\\":\\\"5323156a\\\",\\\"path\\\":\\\"form.termsAccepted\\\",\\\"type\\\":\\\"boolean\\\",\\\"defaultValue\\\":false,\\\"description\\\":\\\"Whether the buyer accepted the Terms of Service.\\\"}],\\\"actions\\\":[{\\\"id\\\":\\\"b336163d\\\",\\\"name\\\":\\\"Create account\\\",\\\"intent\\\":\\\"Create a new account for a first-time visitor.\\\",\\\"parameters\\\":[{\\\"id\\\":\\\"1f033700\\\",\\\"name\\\":\\\"email\\\",\\\"type\\\":\\\"string\\\",\\\"required\\\":true,\\\"description\\\":\\\"Email address for the new account.\\\"},{\\\"id\\\":\\\"14a13b71\\\",\\\"name\\\":\\\"password\\\",\\\"type\\\":\\\"string\\\",\\\"required\\\":true,\\\"description\\\":\\\"Proposed password; the strength meter writes form.passwordStrong.\\\"},{\\\"id\\\":\\\"87abdd09\\\",\\\"name\\\":\\\"acceptTerms\\\",\\\"type\\\":\\\"boolean\\\",\\\"required\\\":true,\\\"description\\\":\\\"Whether the buyer ticked the Terms checkbox. Bound to form.termsAccepted.\\\",\\\"defaultValue\\\":false,\\\"bindToStatePath\\\":\\\"form.termsAccepted\\\"}],\\\"requiredStates\\\":[\\\"form.emailValid\\\",\\\"form.passwordStrong\\\",\\\"form.termsAccepted\\\",\\\"user.exists\\\"],\\\"rules\\\":[{\\\"id\\\":\\\"61136c8a\\\",\\\"category\\\":\\\"validation\\\",\\\"condition\\\":{\\\"kind\\\":\\\"not\\\",\\\"condition\\\":{\\\"kind\\\":\\\"all\\\",\\\"conditions\\\":[{\\\"left\\\":\\\"form.emailValid\\\",\\\"operator\\\":\\\"is_true\\\"},{\\\"left\\\":\\\"form.passwordStrong\\\",\\\"operator\\\":\\\"is_true\\\"},{\\\"left\\\":\\\"form.termsAccepted\\\",\\\"operator\\\":\\\"is_true\\\"}]}},\\\"effect\\\":{\\\"type\\\":\\\"block_action\\\",\\\"reason\\\":\\\"Complete every required field before creating an account.\\\",\\\"id\\\":\\\"9c5798b8\\\",\\\"description\\\":\\\"Effect block_action from a validation rule on action Create account.\\\"},\\\"description\\\":\\\"Composite NOT: block until every form check passes. One rule replaces three flat ones.\\\"},{\\\"id\\\":\\\"ee2466e9\\\",\\\"category\\\":\\\"security\\\",\\\"condition\\\":{\\\"left\\\":\\\"user.exists\\\",\\\"operator\\\":\\\"is_true\\\"},\\\"effect\\\":{\\\"type\\\":\\\"block_action\\\",\\\"reason\\\":\\\"An account with that email exists. Sign in instead.\\\",\\\"id\\\":\\\"a60124df\\\",\\\"description\\\":\\\"Effect block_action from a security rule on action Create account.\\\"},\\\"description\\\":\\\"Security rule on action Create account.\\\"},{\\\"id\\\":\\\"2a4bfa4d\\\",\\\"category\\\":\\\"business\\\",\\\"condition\\\":{\\\"left\\\":\\\"user.authenticated\\\",\\\"operator\\\":\\\"is_true\\\"},\\\"effect\\\":{\\\"type\\\":\\\"block_action\\\",\\\"reason\\\":\\\"You are already signed in.\\\",\\\"id\\\":\\\"c070af8b\\\",\\\"description\\\":\\\"Effect block_action from a business rule on action Create account.\\\"},\\\"description\\\":\\\"Business rule on action Create account.\\\"}],\\\"invariants\\\":[],\\\"effects\\\":[{\\\"type\\\":\\\"set_state\\\",\\\"path\\\":\\\"user.authenticated\\\",\\\"value\\\":true,\\\"id\\\":\\\"43358ff6\\\",\\\"description\\\":\\\"Effect set_state on action Create account.\\\"},{\\\"type\\\":\\\"set_state\\\",\\\"path\\\":\\\"user.exists\\\",\\\"value\\\":true,\\\"id\\\":\\\"5bb8fad9\\\",\\\"description\\\":\\\"Effect set_state on action Create account.\\\"},{\\\"type\\\":\\\"emit_event\\\",\\\"event\\\":\\\"account.signup.completed\\\",\\\"id\\\":\\\"7e87b898\\\",\\\"description\\\":\\\"Effect emit_event on action Create account.\\\"},{\\\"type\\\":\\\"show_message\\\",\\\"message\\\":\\\"Account created. Check your email for the verification code.\\\",\\\"id\\\":\\\"e8645f9e\\\",\\\"description\\\":\\\"Effect show_message on action Create account.\\\"},{\\\"type\\\":\\\"transition_surface\\\",\\\"target\\\":\\\"ab24f04f\\\",\\\"id\\\":\\\"d245def4\\\",\\\"description\\\":\\\"Effect transition_surface on action Create account.\\\"}],\\\"emittedEvents\\\":[\\\"account.signup.requested\\\",\\\"account.signup.completed\\\",\\\"account.signup.blocked\\\"],\\\"transitions\\\":[],\\\"scenarios\\\":[{\\\"id\\\":\\\"1d6ac381\\\",\\\"name\\\":\\\"Happy path: new visitor signs up\\\",\\\"description\\\":\\\"Form valid, no existing account.\\\",\\\"stateOverrides\\\":[{\\\"path\\\":\\\"form.termsAccepted\\\",\\\"value\\\":true},{\\\"path\\\":\\\"user.exists\\\",\\\"value\\\":false},{\\\"path\\\":\\\"user.authenticated\\\",\\\"value\\\":false}],\\\"parameterOverrides\\\":[{\\\"parameterName\\\":\\\"email\\\",\\\"value\\\":\\\"ada@example.com\\\"},{\\\"parameterName\\\":\\\"password\\\",\\\"value\\\":\\\"StrongPass1!\\\"},{\\\"parameterName\\\":\\\"acceptTerms\\\",\\\"value\\\":true}],\\\"expectedStatus\\\":\\\"success\\\",\\\"expectedAssertions\\\":[{\\\"path\\\":\\\"user.authenticated\\\",\\\"operator\\\":\\\"is_true\\\",\\\"description\\\":\\\"Asserts user.authenticated is_true.\\\"},{\\\"path\\\":\\\"user.exists\\\",\\\"operator\\\":\\\"is_true\\\",\\\"description\\\":\\\"Asserts user.exists is_true.\\\"}],\\\"expectedTransition\\\":\\\"ab24f04f\\\"},{\\\"id\\\":\\\"ef8d7c77\\\",\\\"name\\\":\\\"Blocked: terms not accepted\\\",\\\"description\\\":\\\"Composite NOT rule trips when any form check fails.\\\",\\\"stateOverrides\\\":[{\\\"path\\\":\\\"form.termsAccepted\\\",\\\"value\\\":false}],\\\"parameterOverrides\\\":[{\\\"parameterName\\\":\\\"email\\\",\\\"value\\\":\\\"ada@example.com\\\"},{\\\"parameterName\\\":\\\"password\\\",\\\"value\\\":\\\"StrongPass1!\\\"},{\\\"parameterName\\\":\\\"acceptTerms\\\",\\\"value\\\":false}],\\\"expectedStatus\\\":\\\"blocked\\\"}]},{\\\"id\\\":\\\"450141bc\\\",\\\"name\\\":\\\"Go to sign in\\\",\\\"intent\\\":\\\"Navigate to the sign-in surface for an existing account.\\\",\\\"parameters\\\":[],\\\"requiredStates\\\":[],\\\"rules\\\":[{\\\"id\\\":\\\"fad5bb4b\\\",\\\"category\\\":\\\"business\\\",\\\"condition\\\":{\\\"left\\\":\\\"user.authenticated\\\",\\\"operator\\\":\\\"is_true\\\"},\\\"effect\\\":{\\\"type\\\":\\\"block_action\\\",\\\"reason\\\":\\\"You are already signed in.\\\",\\\"id\\\":\\\"b36283a4\\\",\\\"description\\\":\\\"Effect block_action from a business rule on action Go to sign in.\\\"},\\\"description\\\":\\\"Business rule on action Go to sign in.\\\"}],\\\"invariants\\\":[],\\\"effects\\\":[{\\\"type\\\":\\\"emit_event\\\",\\\"event\\\":\\\"ui.signin.opened\\\",\\\"id\\\":\\\"d30adf06\\\",\\\"description\\\":\\\"Effect emit_event on action Go to sign in.\\\"},{\\\"type\\\":\\\"transition_surface\\\",\\\"target\\\":\\\"493e1030\\\",\\\"id\\\":\\\"2fc3f2c1\\\",\\\"description\\\":\\\"Effect transition_surface on action Go to sign in.\\\"}],\\\"emittedEvents\\\":[\\\"ui.signin.opened\\\"],\\\"transitions\\\":[],\\\"scenarios\\\":[{\\\"id\\\":\\\"4bf97a05\\\",\\\"name\\\":\\\"Navigate to sign in\\\",\\\"description\\\":\\\"Pure navigation; no gates.\\\",\\\"stateOverrides\\\":[],\\\"parameterOverrides\\\":[],\\\"expectedStatus\\\":\\\"success\\\",\\\"expectedTransition\\\":\\\"493e1030\\\"}]},{\\\"id\\\":\\\"ee9e011e\\\",\\\"name\\\":\\\"Send welcome email\\\",\\\"intent\\\":\\\"Cascade side-effect: send the welcome email after a successful signup.\\\",\\\"parameters\\\":[],\\\"requiredStates\\\":[],\\\"rules\\\":[{\\\"id\\\":\\\"6fdcb82b\\\",\\\"category\\\":\\\"validation\\\",\\\"condition\\\":{\\\"left\\\":\\\"user.exists\\\",\\\"operator\\\":\\\"is_false\\\"},\\\"effect\\\":{\\\"type\\\":\\\"block_action\\\",\\\"reason\\\":\\\"Cannot send welcome email to a nonexistent user.\\\",\\\"id\\\":\\\"dc14bf7b\\\",\\\"description\\\":\\\"Effect block_action from a validation rule on action Send welcome email.\\\"},\\\"description\\\":\\\"Cascade handler runs only after a real signup. Defensive: don't send welcome to a nonexistent user.\\\"}],\\\"invariants\\\":[],\\\"effects\\\":[{\\\"type\\\":\\\"emit_event\\\",\\\"event\\\":\\\"account.welcome_email.sent\\\",\\\"id\\\":\\\"14f94d65\\\",\\\"description\\\":\\\"Effect emit_event on action Send welcome email.\\\"}],\\\"emittedEvents\\\":[\\\"account.welcome_email.sent\\\"],\\\"transitions\\\":[],\\\"triggeredByEvent\\\":\\\"account.signup.completed\\\"}],\\\"rules\\\":[{\\\"id\\\":\\\"21bb6bee\\\",\\\"category\\\":\\\"permissions\\\",\\\"condition\\\":{\\\"left\\\":\\\"user.authenticated\\\",\\\"operator\\\":\\\"is_true\\\"},\\\"effect\\\":{\\\"type\\\":\\\"block_action\\\",\\\"reason\\\":\\\"You are already signed in.\\\",\\\"id\\\":\\\"e287654b\\\",\\\"description\\\":\\\"Effect block_action from a surface-level permissions rule on Sign up.\\\"},\\\"description\\\":\\\"Cross-cutting: an already-signed-in visitor should not be on the sign-up surface.\\\"}],\\\"invariants\\\":[{\\\"id\\\":\\\"a7cd0f5e\\\",\\\"name\\\":\\\"Sign-up form initialized\\\",\\\"condition\\\":{\\\"left\\\":\\\"form.emailValid\\\",\\\"operator\\\":\\\"exists\\\"},\\\"message\\\":\\\"Sign-up form fields must be initialized before any action runs.\\\",\\\"description\\\":\\\"Surface invariant on Sign up: Sign-up form initialized.\\\"}],\\\"transitions\\\":[{\\\"id\\\":\\\"02a2ffbd\\\",\\\"target\\\":\\\"493e1030\\\",\\\"label\\\":\\\"Already have an account? Sign in\\\",\\\"description\\\":\\\"Header link from sign up to sign in.\\\"},{\\\"id\\\":\\\"bfe9c28f\\\",\\\"target\\\":\\\"ab24f04f\\\",\\\"label\\\":\\\"After signup\\\",\\\"description\\\":\\\"On successful create, hand off to email verification.\\\"}]},{\\\"id\\\":\\\"493e1030\\\",\\\"name\\\":\\\"Sign in\\\",\\\"type\\\":\\\"screen\\\",\\\"description\\\":\\\"Authentication. Tracks failed attempts and locks the account after the fifth failure.\\\",\\\"stateDefinitions\\\":[{\\\"id\\\":\\\"484d1248\\\",\\\"path\\\":\\\"auth.credentialsValid\\\",\\\"type\\\":\\\"boolean\\\",\\\"defaultValue\\\":true,\\\"description\\\":\\\"Whether the email/password combination matches the user record.\\\"},{\\\"id\\\":\\\"cd58dcba\\\",\\\"path\\\":\\\"auth.failedAttempts\\\",\\\"type\\\":\\\"number\\\",\\\"defaultValue\\\":0,\\\"description\\\":\\\"Running count of consecutive failed sign-in attempts.\\\"},{\\\"id\\\":\\\"7a116f8c\\\",\\\"path\\\":\\\"auth.locked\\\",\\\"type\\\":\\\"boolean\\\",\\\"defaultValue\\\":false,\\\"description\\\":\\\"True once the account is locked after repeated failures.\\\"}],\\\"actions\\\":[{\\\"id\\\":\\\"810b4632\\\",\\\"name\\\":\\\"Sign in\\\",\\\"intent\\\":\\\"Authenticate a returning customer.\\\",\\\"parameters\\\":[{\\\"id\\\":\\\"eb2366ce\\\",\\\"name\\\":\\\"email\\\",\\\"type\\\":\\\"string\\\",\\\"required\\\":true,\\\"description\\\":\\\"String parameter email for action Sign in.\\\"},{\\\"id\\\":\\\"5509f24b\\\",\\\"name\\\":\\\"password\\\",\\\"type\\\":\\\"string\\\",\\\"required\\\":true,\\\"description\\\":\\\"String parameter password for action Sign in.\\\"}],\\\"requiredStates\\\":[\\\"auth.credentialsValid\\\",\\\"auth.failedAttempts\\\",\\\"auth.locked\\\"],\\\"rules\\\":[{\\\"id\\\":\\\"0ca01598\\\",\\\"category\\\":\\\"security\\\",\\\"condition\\\":{\\\"kind\\\":\\\"any\\\",\\\"conditions\\\":[{\\\"left\\\":\\\"auth.locked\\\",\\\"operator\\\":\\\"is_true\\\"},{\\\"left\\\":\\\"auth.failedAttempts\\\",\\\"operator\\\":\\\"greater_than\\\",\\\"right\\\":4}]},\\\"effect\\\":{\\\"type\\\":\\\"block_action\\\",\\\"reason\\\":\\\"Account locked. Reset your password to continue.\\\",\\\"id\\\":\\\"07274118\\\",\\\"description\\\":\\\"Effect block_action from a security rule on action Sign in.\\\"},\\\"description\\\":\\\"Composite ANY: locked OR over the attempt ceiling = locked out.\\\"},{\\\"id\\\":\\\"9e0bf599\\\",\\\"category\\\":\\\"validation\\\",\\\"condition\\\":{\\\"left\\\":\\\"auth.credentialsValid\\\",\\\"operator\\\":\\\"is_false\\\"},\\\"effect\\\":{\\\"type\\\":\\\"block_action\\\",\\\"reason\\\":\\\"Email or password is incorrect.\\\",\\\"id\\\":\\\"603b8255\\\",\\\"description\\\":\\\"Effect block_action from a validation rule on action Sign in.\\\"},\\\"description\\\":\\\"Wrong credentials: bump the failed-attempt counter via Expression arithmetic.\\\"},{\\\"id\\\":\\\"160dc1e9\\\",\\\"category\\\":\\\"business\\\",\\\"condition\\\":{\\\"left\\\":\\\"user.authenticated\\\",\\\"operator\\\":\\\"is_true\\\"},\\\"effect\\\":{\\\"type\\\":\\\"block_action\\\",\\\"reason\\\":\\\"You are already signed in.\\\",\\\"id\\\":\\\"16a28782\\\",\\\"description\\\":\\\"Effect block_action from a business rule on action Sign in.\\\"},\\\"description\\\":\\\"Business rule on action Sign in.\\\"}],\\\"invariants\\\":[],\\\"effects\\\":[{\\\"type\\\":\\\"set_state\\\",\\\"path\\\":\\\"user.authenticated\\\",\\\"value\\\":true,\\\"id\\\":\\\"60944aa3\\\",\\\"description\\\":\\\"Effect set_state on action Sign in.\\\"},{\\\"type\\\":\\\"set_state\\\",\\\"path\\\":\\\"auth.failedAttempts\\\",\\\"value\\\":0,\\\"id\\\":\\\"2726ac14\\\",\\\"description\\\":\\\"Effect set_state on action Sign in.\\\"},{\\\"type\\\":\\\"emit_event\\\",\\\"event\\\":\\\"account.signin.succeeded\\\",\\\"id\\\":\\\"ee0420b3\\\",\\\"description\\\":\\\"Effect emit_event on action Sign in.\\\"}],\\\"emittedEvents\\\":[\\\"account.signin.succeeded\\\",\\\"account.signin.failed\\\"],\\\"transitions\\\":[],\\\"scenarios\\\":[{\\\"id\\\":\\\"a4b369a9\\\",\\\"name\\\":\\\"Happy path: valid credentials\\\",\\\"stateOverrides\\\":[{\\\"path\\\":\\\"auth.credentialsValid\\\",\\\"value\\\":true},{\\\"path\\\":\\\"auth.locked\\\",\\\"value\\\":false},{\\\"path\\\":\\\"auth.failedAttempts\\\",\\\"value\\\":0},{\\\"path\\\":\\\"user.authenticated\\\",\\\"value\\\":false},{\\\"path\\\":\\\"user.exists\\\",\\\"value\\\":true}],\\\"parameterOverrides\\\":[{\\\"parameterName\\\":\\\"email\\\",\\\"value\\\":\\\"ada@example.com\\\"},{\\\"parameterName\\\":\\\"password\\\",\\\"value\\\":\\\"StrongPass1!\\\"}],\\\"expectedStatus\\\":\\\"success\\\",\\\"expectedAssertions\\\":[{\\\"path\\\":\\\"user.authenticated\\\",\\\"operator\\\":\\\"is_true\\\",\\\"description\\\":\\\"Asserts user.authenticated is_true.\\\"}],\\\"description\\\":\\\"Scenario Happy path: valid credentials on action Sign in.\\\"},{\\\"id\\\":\\\"c4fb666d\\\",\\\"name\\\":\\\"Blocked: account locked\\\",\\\"description\\\":\\\"Composite ANY rule trips when the user is locked or over the attempt ceiling.\\\",\\\"stateOverrides\\\":[{\\\"path\\\":\\\"auth.failedAttempts\\\",\\\"value\\\":5},{\\\"path\\\":\\\"auth.locked\\\",\\\"value\\\":true}],\\\"parameterOverrides\\\":[{\\\"parameterName\\\":\\\"email\\\",\\\"value\\\":\\\"ada@example.com\\\"},{\\\"parameterName\\\":\\\"password\\\",\\\"value\\\":\\\"wrong\\\"}],\\\"expectedStatus\\\":\\\"blocked\\\"},{\\\"id\\\":\\\"5ff9d6a8\\\",\\\"name\\\":\\\"Blocked: invalid credentials\\\",\\\"stateOverrides\\\":[{\\\"path\\\":\\\"auth.credentialsValid\\\",\\\"value\\\":false},{\\\"path\\\":\\\"auth.locked\\\",\\\"value\\\":false},{\\\"path\\\":\\\"auth.failedAttempts\\\",\\\"value\\\":1}],\\\"parameterOverrides\\\":[{\\\"parameterName\\\":\\\"email\\\",\\\"value\\\":\\\"ada@example.com\\\"},{\\\"parameterName\\\":\\\"password\\\",\\\"value\\\":\\\"wrong\\\"}],\\\"expectedStatus\\\":\\\"blocked\\\",\\\"description\\\":\\\"Scenario Blocked: invalid credentials on action Sign in.\\\"}]},{\\\"id\\\":\\\"de61b2f3\\\",\\\"name\\\":\\\"Go to sign up\\\",\\\"intent\\\":\\\"Navigate to sign up for a new visitor.\\\",\\\"parameters\\\":[],\\\"requiredStates\\\":[],\\\"rules\\\":[{\\\"id\\\":\\\"f7342898\\\",\\\"category\\\":\\\"business\\\",\\\"condition\\\":{\\\"left\\\":\\\"user.authenticated\\\",\\\"operator\\\":\\\"is_true\\\"},\\\"effect\\\":{\\\"type\\\":\\\"block_action\\\",\\\"reason\\\":\\\"You are already signed in.\\\",\\\"id\\\":\\\"b81dedf1\\\",\\\"description\\\":\\\"Effect block_action from a business rule on action Go to sign up.\\\"},\\\"description\\\":\\\"Business rule on action Go to sign up.\\\"}],\\\"invariants\\\":[],\\\"effects\\\":[{\\\"type\\\":\\\"emit_event\\\",\\\"event\\\":\\\"ui.signup.opened\\\",\\\"id\\\":\\\"a04ec02f\\\",\\\"description\\\":\\\"Effect emit_event on action Go to sign up.\\\"},{\\\"type\\\":\\\"transition_surface\\\",\\\"target\\\":\\\"86fcdef9\\\",\\\"id\\\":\\\"a210a2da\\\",\\\"description\\\":\\\"Effect transition_surface on action Go to sign up.\\\"}],\\\"emittedEvents\\\":[\\\"ui.signup.opened\\\"],\\\"transitions\\\":[],\\\"scenarios\\\":[{\\\"id\\\":\\\"3720bc70\\\",\\\"name\\\":\\\"Navigate to sign up\\\",\\\"stateOverrides\\\":[],\\\"parameterOverrides\\\":[],\\\"expectedStatus\\\":\\\"success\\\",\\\"expectedTransition\\\":\\\"86fcdef9\\\",\\\"description\\\":\\\"Scenario Navigate to sign up on action Go to sign up.\\\"}]}],\\\"rules\\\":[{\\\"id\\\":\\\"790ca684\\\",\\\"category\\\":\\\"permissions\\\",\\\"condition\\\":{\\\"left\\\":\\\"user.authenticated\\\",\\\"operator\\\":\\\"is_true\\\"},\\\"effect\\\":{\\\"type\\\":\\\"block_action\\\",\\\"reason\\\":\\\"You are already signed in.\\\",\\\"id\\\":\\\"3a326348\\\",\\\"description\\\":\\\"Effect block_action from a surface-level permissions rule on Sign in.\\\"},\\\"description\\\":\\\"Surface-level permissions rule on Sign in.\\\"}],\\\"invariants\\\":[{\\\"id\\\":\\\"5c73680d\\\",\\\"name\\\":\\\"Failed-attempt counter bounded\\\",\\\"condition\\\":{\\\"left\\\":\\\"auth.failedAttempts\\\",\\\"operator\\\":\\\"lower_than\\\",\\\"right\\\":100},\\\"message\\\":\\\"Failed-attempt counter exceeded a sane upper bound; counter likely corrupted.\\\",\\\"description\\\":\\\"Surface invariant on Sign in: Failed-attempt counter bounded.\\\"}],\\\"transitions\\\":[{\\\"id\\\":\\\"fcb9ecd7\\\",\\\"target\\\":\\\"86fcdef9\\\",\\\"label\\\":\\\"Create an account\\\",\\\"description\\\":\\\"Link from sign in back to sign up.\\\"}]},{\\\"id\\\":\\\"ab24f04f\\\",\\\"name\\\":\\\"Email verification\\\",\\\"type\\\":\\\"screen\\\",\\\"description\\\":\\\"Six-digit code verification. Caps retries to defend against brute-force.\\\",\\\"stateDefinitions\\\":[{\\\"id\\\":\\\"a6eddc32\\\",\\\"path\\\":\\\"verification.codeMatches\\\",\\\"type\\\":\\\"boolean\\\",\\\"defaultValue\\\":true,\\\"description\\\":\\\"Whether the submitted verification code matches the one on file.\\\"},{\\\"id\\\":\\\"a4feec92\\\",\\\"path\\\":\\\"verification.attempts\\\",\\\"type\\\":\\\"number\\\",\\\"defaultValue\\\":0,\\\"description\\\":\\\"Number of verification attempts so far.\\\"}],\\\"actions\\\":[{\\\"id\\\":\\\"fb476114\\\",\\\"name\\\":\\\"Verify email\\\",\\\"intent\\\":\\\"Confirm the buyer's email with the code that was emailed.\\\",\\\"parameters\\\":[{\\\"id\\\":\\\"3f8a4f5c\\\",\\\"name\\\":\\\"code\\\",\\\"type\\\":\\\"string\\\",\\\"required\\\":true,\\\"description\\\":\\\"The six-digit verification code.\\\"}],\\\"requiredStates\\\":[\\\"user.authenticated\\\",\\\"user.emailVerified\\\",\\\"verification.codeMatches\\\",\\\"verification.attempts\\\"],\\\"rules\\\":[{\\\"id\\\":\\\"006225f7\\\",\\\"category\\\":\\\"business\\\",\\\"condition\\\":{\\\"left\\\":\\\"user.emailVerified\\\",\\\"operator\\\":\\\"is_true\\\"},\\\"effect\\\":{\\\"type\\\":\\\"block_action\\\",\\\"reason\\\":\\\"Your email is already verified.\\\",\\\"id\\\":\\\"aa328e4f\\\",\\\"description\\\":\\\"Effect block_action from a business rule on action Verify email.\\\"},\\\"description\\\":\\\"Business rule on action Verify email.\\\"},{\\\"id\\\":\\\"8200c996\\\",\\\"category\\\":\\\"security\\\",\\\"condition\\\":{\\\"left\\\":\\\"verification.attempts\\\",\\\"operator\\\":\\\"greater_than\\\",\\\"right\\\":4},\\\"effect\\\":{\\\"type\\\":\\\"block_action\\\",\\\"reason\\\":\\\"Too many attempts. Request a new code.\\\",\\\"id\\\":\\\"322b1acd\\\",\\\"description\\\":\\\"Effect block_action from a security rule on action Verify email.\\\"},\\\"description\\\":\\\"Verification cap; brute-force defense.\\\"},{\\\"id\\\":\\\"95f19dc5\\\",\\\"category\\\":\\\"validation\\\",\\\"condition\\\":{\\\"left\\\":\\\"verification.codeMatches\\\",\\\"operator\\\":\\\"is_false\\\"},\\\"effect\\\":{\\\"type\\\":\\\"block_action\\\",\\\"reason\\\":\\\"Invalid verification code.\\\",\\\"id\\\":\\\"373ce15c\\\",\\\"description\\\":\\\"Effect block_action from a validation rule on action Verify email.\\\"},\\\"description\\\":\\\"Wrong code: bump the counter via Expression add and block.\\\"}],\\\"invariants\\\":[],\\\"effects\\\":[{\\\"type\\\":\\\"set_state\\\",\\\"path\\\":\\\"user.emailVerified\\\",\\\"value\\\":true,\\\"id\\\":\\\"502e0267\\\",\\\"description\\\":\\\"Effect set_state on action Verify email.\\\"},{\\\"type\\\":\\\"emit_event\\\",\\\"event\\\":\\\"account.email.verified\\\",\\\"id\\\":\\\"fed1dd63\\\",\\\"description\\\":\\\"Effect emit_event on action Verify email.\\\"}],\\\"emittedEvents\\\":[\\\"account.email.verified\\\"],\\\"transitions\\\":[],\\\"scenarios\\\":[{\\\"id\\\":\\\"8b8c386b\\\",\\\"name\\\":\\\"Happy path: code matches\\\",\\\"stateOverrides\\\":[{\\\"path\\\":\\\"user.authenticated\\\",\\\"value\\\":true},{\\\"path\\\":\\\"user.exists\\\",\\\"value\\\":true},{\\\"path\\\":\\\"verification.codeMatches\\\",\\\"value\\\":true},{\\\"path\\\":\\\"verification.attempts\\\",\\\"value\\\":0},{\\\"path\\\":\\\"user.emailVerified\\\",\\\"value\\\":false}],\\\"parameterOverrides\\\":[{\\\"parameterName\\\":\\\"code\\\",\\\"value\\\":\\\"123456\\\"}],\\\"expectedStatus\\\":\\\"success\\\",\\\"expectedAssertions\\\":[{\\\"path\\\":\\\"user.emailVerified\\\",\\\"operator\\\":\\\"is_true\\\",\\\"description\\\":\\\"Asserts user.emailVerified is_true.\\\"}],\\\"description\\\":\\\"Scenario Happy path: code matches on action Verify email.\\\"},{\\\"id\\\":\\\"1a98d863\\\",\\\"name\\\":\\\"Blocked: attempt cap reached\\\",\\\"stateOverrides\\\":[{\\\"path\\\":\\\"user.authenticated\\\",\\\"value\\\":true},{\\\"path\\\":\\\"verification.attempts\\\",\\\"value\\\":5}],\\\"parameterOverrides\\\":[{\\\"parameterName\\\":\\\"code\\\",\\\"value\\\":\\\"000000\\\"}],\\\"expectedStatus\\\":\\\"blocked\\\",\\\"description\\\":\\\"Scenario Blocked: attempt cap reached on action Verify email.\\\"}]},{\\\"id\\\":\\\"fc906d3b\\\",\\\"name\\\":\\\"Resend verification code\\\",\\\"intent\\\":\\\"Regenerate and re-send the verification code; bumps the counter using Expression arithmetic.\\\",\\\"parameters\\\":[],\\\"requiredStates\\\":[\\\"verification.attempts\\\"],\\\"rules\\\":[{\\\"id\\\":\\\"22562373\\\",\\\"category\\\":\\\"security\\\",\\\"condition\\\":{\\\"left\\\":\\\"verification.attempts\\\",\\\"operator\\\":\\\"greater_than\\\",\\\"right\\\":4},\\\"effect\\\":{\\\"type\\\":\\\"block_action\\\",\\\"reason\\\":\\\"Too many resend requests. Try again later.\\\",\\\"id\\\":\\\"1a3a7507\\\",\\\"description\\\":\\\"Effect block_action from a security rule on action Resend verification code.\\\"},\\\"description\\\":\\\"Security rule on action Resend verification code.\\\"}],\\\"invariants\\\":[],\\\"effects\\\":[{\\\"type\\\":\\\"set_state\\\",\\\"path\\\":\\\"verification.attempts\\\",\\\"value\\\":{\\\"kind\\\":\\\"add\\\",\\\"left\\\":{\\\"kind\\\":\\\"state\\\",\\\"path\\\":\\\"verification.attempts\\\"},\\\"right\\\":{\\\"kind\\\":\\\"literal\\\",\\\"value\\\":1}},\\\"id\\\":\\\"b1064561\\\",\\\"description\\\":\\\"Effect set_state on action Resend verification code.\\\"},{\\\"type\\\":\\\"emit_event\\\",\\\"event\\\":\\\"account.email.verification_sent\\\",\\\"id\\\":\\\"699c56b7\\\",\\\"description\\\":\\\"Effect emit_event on action Resend verification code.\\\"}],\\\"emittedEvents\\\":[\\\"account.email.verification_sent\\\"],\\\"transitions\\\":[],\\\"scenarios\\\":[{\\\"id\\\":\\\"46251091\\\",\\\"name\\\":\\\"Happy path: resend bumps counter\\\",\\\"description\\\":\\\"Expression add: verification.attempts <- attempts + 1.\\\",\\\"stateOverrides\\\":[{\\\"path\\\":\\\"user.authenticated\\\",\\\"value\\\":true},{\\\"path\\\":\\\"user.exists\\\",\\\"value\\\":true},{\\\"path\\\":\\\"verification.attempts\\\",\\\"value\\\":2}],\\\"parameterOverrides\\\":[],\\\"expectedStatus\\\":\\\"success\\\",\\\"expectedAssertions\\\":[{\\\"path\\\":\\\"verification.attempts\\\",\\\"operator\\\":\\\"equals\\\",\\\"value\\\":3,\\\"description\\\":\\\"Asserts verification.attempts equals 3.\\\"}]}]}],\\\"rules\\\":[{\\\"id\\\":\\\"9fd50090\\\",\\\"category\\\":\\\"permissions\\\",\\\"condition\\\":{\\\"left\\\":\\\"user.authenticated\\\",\\\"operator\\\":\\\"is_false\\\"},\\\"effect\\\":{\\\"type\\\":\\\"block_action\\\",\\\"reason\\\":\\\"Sign in to verify your email.\\\",\\\"id\\\":\\\"45bf17a5\\\",\\\"description\\\":\\\"Effect block_action from a surface-level permissions rule on Email verification.\\\"},\\\"description\\\":\\\"Surface-level permissions rule on Email verification.\\\"}],\\\"invariants\\\":[{\\\"id\\\":\\\"ca8fab52\\\",\\\"name\\\":\\\"Verification counter bounded\\\",\\\"condition\\\":{\\\"left\\\":\\\"verification.attempts\\\",\\\"operator\\\":\\\"lower_than\\\",\\\"right\\\":100},\\\"message\\\":\\\"Verification-attempt counter exceeded a sane upper bound.\\\",\\\"description\\\":\\\"Surface invariant on Email verification: Verification counter bounded.\\\"}],\\\"transitions\\\":[{\\\"id\\\":\\\"5c00c58d\\\",\\\"target\\\":\\\"86fcdef9\\\",\\\"label\\\":\\\"Cancel and start over\\\",\\\"description\\\":\\\"Back to the sign-up surface.\\\"}]}],\\\"personas\\\":[{\\\"id\\\":\\\"0ec7aa6b\\\",\\\"name\\\":\\\"First-time visitor\\\",\\\"description\\\":\\\"Brand-new visitor; not signed in, no record on file.\\\",\\\"stateOverrides\\\":[{\\\"path\\\":\\\"user.authenticated\\\",\\\"value\\\":false},{\\\"path\\\":\\\"user.exists\\\",\\\"value\\\":false},{\\\"path\\\":\\\"user.emailVerified\\\",\\\"value\\\":false}],\\\"parameterOverrides\\\":[]},{\\\"id\\\":\\\"f5a109a8\\\",\\\"name\\\":\\\"Returning customer\\\",\\\"description\\\":\\\"Account exists, email verified, valid credentials on file.\\\",\\\"stateOverrides\\\":[{\\\"path\\\":\\\"user.exists\\\",\\\"value\\\":true},{\\\"path\\\":\\\"user.emailVerified\\\",\\\"value\\\":true},{\\\"path\\\":\\\"auth.credentialsValid\\\",\\\"value\\\":true}],\\\"parameterOverrides\\\":[]},{\\\"id\\\":\\\"4730bb34\\\",\\\"name\\\":\\\"Locked-out user\\\",\\\"description\\\":\\\"Hit the failed-attempts ceiling.\\\",\\\"stateOverrides\\\":[{\\\"path\\\":\\\"auth.failedAttempts\\\",\\\"value\\\":5},{\\\"path\\\":\\\"auth.locked\\\",\\\"value\\\":true}],\\\"parameterOverrides\\\":[]}],\\\"resources\\\":[{\\\"id\\\":\\\"bf5aef00\\\",\\\"name\\\":\\\"Users database\\\",\\\"description\\\":\\\"Primary store for user accounts and authentication state.\\\",\\\"kind\\\":\\\"database\\\",\\\"provider\\\":\\\"PostgreSQL\\\",\\\"scope\\\":\\\"shared\\\",\\\"sensitivity\\\":\\\"high\\\",\\\"containsPii\\\":true,\\\"complianceTags\\\":[],\\\"accessMode\\\":\\\"read_write\\\"},{\\\"id\\\":\\\"ced6cb3e\\\",\\\"name\\\":\\\"Transactional email service\\\",\\\"description\\\":\\\"Sends verification codes and welcome emails.\\\",\\\"kind\\\":\\\"http_api\\\",\\\"provider\\\":\\\"Postmark\\\",\\\"scope\\\":\\\"external\\\",\\\"sensitivity\\\":\\\"medium\\\",\\\"containsPii\\\":true,\\\"complianceTags\\\":[],\\\"accessMode\\\":\\\"write_only\\\"}],\\\"entities\\\":[{\\\"id\\\":\\\"8f6b148c\\\",\\\"namespace\\\":\\\"user\\\",\\\"description\\\":\\\"Authenticated customer record. PII; mirrored from the Users database.\\\",\\\"fields\\\":[{\\\"id\\\":\\\"99b3783f\\\",\\\"name\\\":\\\"authenticated\\\",\\\"type\\\":\\\"boolean\\\",\\\"path\\\":\\\"user.authenticated\\\",\\\"description\\\":\\\"Boolean field authenticated on entity user.\\\"},{\\\"id\\\":\\\"1b756e10\\\",\\\"name\\\":\\\"exists\\\",\\\"type\\\":\\\"boolean\\\",\\\"path\\\":\\\"user.exists\\\",\\\"description\\\":\\\"Boolean field exists on entity user.\\\"},{\\\"id\\\":\\\"0e57fb6b\\\",\\\"name\\\":\\\"emailVerified\\\",\\\"type\\\":\\\"boolean\\\",\\\"path\\\":\\\"user.emailVerified\\\",\\\"description\\\":\\\"Boolean field emailVerified on entity user.\\\"}],\\\"resourceId\\\":\\\"bf5aef00\\\"}],\\\"events\\\":[{\\\"id\\\":\\\"a38afde5\\\",\\\"name\\\":\\\"account.signup.requested\\\",\\\"description\\\":\\\"Signup form submitted with validation passing.\\\"},{\\\"id\\\":\\\"021215a4\\\",\\\"name\\\":\\\"account.signup.completed\\\",\\\"description\\\":\\\"Account created and the visitor is now signed in.\\\",\\\"payloadSchema\\\":[{\\\"name\\\":\\\"userId\\\",\\\"type\\\":\\\"string\\\",\\\"required\\\":true,\\\"description\\\":\\\"String payload field userId on event account.signup.completed.\\\"},{\\\"name\\\":\\\"email\\\",\\\"type\\\":\\\"string\\\",\\\"required\\\":true,\\\"description\\\":\\\"String payload field email on event account.signup.completed.\\\"}]},{\\\"id\\\":\\\"95e958c1\\\",\\\"name\\\":\\\"account.signup.blocked\\\",\\\"description\\\":\\\"Signup attempt blocked.\\\",\\\"payloadSchema\\\":[{\\\"name\\\":\\\"reason\\\",\\\"type\\\":\\\"string\\\",\\\"required\\\":true,\\\"description\\\":\\\"String payload field reason on event account.signup.blocked.\\\"}]},{\\\"id\\\":\\\"39710215\\\",\\\"name\\\":\\\"account.email.verified\\\",\\\"description\\\":\\\"Email verification succeeded.\\\",\\\"payloadSchema\\\":[{\\\"name\\\":\\\"userId\\\",\\\"type\\\":\\\"string\\\",\\\"required\\\":true,\\\"description\\\":\\\"String payload field userId on event account.email.verified.\\\"}]},{\\\"id\\\":\\\"e43b97b9\\\",\\\"name\\\":\\\"account.email.verification_sent\\\",\\\"description\\\":\\\"Verification code generated and dispatched.\\\",\\\"payloadSchema\\\":[{\\\"name\\\":\\\"userId\\\",\\\"type\\\":\\\"string\\\",\\\"required\\\":true,\\\"description\\\":\\\"String payload field userId on event account.email.verification_sent.\\\"}]},{\\\"id\\\":\\\"971b5ef9\\\",\\\"name\\\":\\\"account.signin.succeeded\\\",\\\"description\\\":\\\"Successful sign-in.\\\",\\\"payloadSchema\\\":[{\\\"name\\\":\\\"userId\\\",\\\"type\\\":\\\"string\\\",\\\"required\\\":true,\\\"description\\\":\\\"String payload field userId on event account.signin.succeeded.\\\"}]},{\\\"id\\\":\\\"2dddaca8\\\",\\\"name\\\":\\\"account.signin.failed\\\",\\\"description\\\":\\\"Failed sign-in attempt.\\\",\\\"payloadSchema\\\":[{\\\"name\\\":\\\"reason\\\",\\\"type\\\":\\\"string\\\",\\\"required\\\":true,\\\"description\\\":\\\"String payload field reason on event account.signin.failed.\\\"}]},{\\\"id\\\":\\\"017ee9e4\\\",\\\"name\\\":\\\"account.welcome_email.sent\\\",\\\"description\\\":\\\"Welcome email dispatched by the cascade handler.\\\",\\\"payloadSchema\\\":[{\\\"name\\\":\\\"userId\\\",\\\"type\\\":\\\"string\\\",\\\"required\\\":true,\\\"description\\\":\\\"String payload field userId on event account.welcome_email.sent.\\\"}]},{\\\"id\\\":\\\"3cf5f42f\\\",\\\"name\\\":\\\"ui.signin.opened\\\",\\\"description\\\":\\\"Buyer navigated to the Sign in surface.\\\"},{\\\"id\\\":\\\"61e75089\\\",\\\"name\\\":\\\"ui.signup.opened\\\",\\\"description\\\":\\\"Buyer navigated to the Sign up surface.\\\"}],\\\"createdAt\\\":\\\"2026-05-18T23:53:41.104Z\\\",\\\"updatedAt\\\":\\\"2026-05-19T00:14:43.583Z\\\",\\\"featureInvariants\\\":[{\\\"id\\\":\\\"8ca8e119\\\",\\\"name\\\":\\\"Authenticated implies known user\\\",\\\"condition\\\":{\\\"kind\\\":\\\"any\\\",\\\"conditions\\\":[{\\\"left\\\":\\\"user.authenticated\\\",\\\"operator\\\":\\\"is_false\\\"},{\\\"left\\\":\\\"user.exists\\\",\\\"operator\\\":\\\"is_true\\\"}]},\\\"message\\\":\\\"Authenticated sessions must correspond to an existing user record.\\\",\\\"description\\\":\\\"A session can only be authenticated for an account that exists. Composite implication: not(authenticated) OR exists.\\\"},{\\\"id\\\":\\\"95d5d961\\\",\\\"name\\\":\\\"Failed attempts never negative\\\",\\\"condition\\\":{\\\"left\\\":\\\"auth.failedAttempts\\\",\\\"operator\\\":\\\"greater_than\\\",\\\"right\\\":-1},\\\"message\\\":\\\"Failed-attempts counter must stay non-negative.\\\"},{\\\"id\\\":\\\"8b3696a7\\\",\\\"name\\\":\\\"Verification attempts never negative\\\",\\\"condition\\\":{\\\"left\\\":\\\"verification.attempts\\\",\\\"operator\\\":\\\"greater_than\\\",\\\"right\\\":-1},\\\"message\\\":\\\"Verification-attempts counter must stay non-negative.\\\"}],\\\"expectedActions\\\":[\\\"Create account\\\",\\\"Sign in\\\",\\\"Verify email\\\",\\\"Resend verification code\\\"],\\\"nonGoals\\\":[\\\"Password reset / forgot-password flow\\\",\\\"Social login (OAuth, SAML)\\\",\\\"Multi-factor authentication\\\",\\\"Session management and refresh tokens\\\",\\\"User profile editing\\\"]}\");\nvar account_auth_feature_default = {\n\tformat: format$4,\n\tversion: 1,\n\tfeature: feature$3\n};\n//#endregion\n//#region samples/eshop/cart-checkout.feature.json\nvar cart_checkout_feature_exports = /* @__PURE__ */ __exportAll({\n\tdefault: () => cart_checkout_feature_default,\n\tfeature: () => feature$2,\n\tformat: () => format$3,\n\tversion: () => 1\n});\nvar format$3 = \"unspaghettit\";\nvar feature$2 = /* @__PURE__ */ JSON.parse(\"{\\\"id\\\":\\\"33fbb26d\\\",\\\"name\\\":\\\"Cart & checkout\\\",\\\"description\\\":\\\"Cart updates, coupons, addresses, payment selection, and place order. Refuses empty carts and unverified accounts, prices the order from line items, and lets admins override the subtotal.\\\",\\\"surfaces\\\":[{\\\"id\\\":\\\"8412e977\\\",\\\"name\\\":\\\"Cart\\\",\\\"type\\\":\\\"screen\\\",\\\"description\\\":\\\"Cart line items, totals, coupon application.\\\",\\\"stateDefinitions\\\":[{\\\"id\\\":\\\"aaf0b580\\\",\\\"path\\\":\\\"cart.lineItems\\\",\\\"type\\\":\\\"array\\\",\\\"defaultValue\\\":[{\\\"productId\\\":\\\"wireless-headphones\\\",\\\"qty\\\":1,\\\"amount\\\":2999},{\\\"productId\\\":\\\"phone-case\\\",\\\"qty\\\":1,\\\"amount\\\":1499}],\\\"description\\\":\\\"Cart line items: each {productId, qty, amount in cents}.\\\",\\\"sharedWith\\\":[\\\"2102bf6e\\\"]},{\\\"id\\\":\\\"227fd9a4\\\",\\\"path\\\":\\\"cart.subtotal\\\",\\\"type\\\":\\\"number\\\",\\\"defaultValue\\\":4498,\\\"description\\\":\\\"Cents. Recomputed via sum_pluck on cart.lineItems[amount].\\\",\\\"sharedWith\\\":[\\\"2102bf6e\\\"]},{\\\"id\\\":\\\"994eb5cf\\\",\\\"path\\\":\\\"cart.shipping\\\",\\\"type\\\":\\\"number\\\",\\\"defaultValue\\\":599,\\\"description\\\":\\\"Shipping cost in cents.\\\",\\\"sharedWith\\\":[\\\"2102bf6e\\\"]},{\\\"id\\\":\\\"56730178\\\",\\\"path\\\":\\\"coupon.code\\\",\\\"type\\\":\\\"string\\\",\\\"defaultValue\\\":\\\"\\\",\\\"description\\\":\\\"Most recently entered coupon code.\\\"},{\\\"id\\\":\\\"bbe228d1\\\",\\\"path\\\":\\\"coupon.applied\\\",\\\"type\\\":\\\"boolean\\\",\\\"defaultValue\\\":false,\\\"description\\\":\\\"Whether a coupon is currently applied.\\\"},{\\\"id\\\":\\\"75344680\\\",\\\"path\\\":\\\"coupon.discount\\\",\\\"type\\\":\\\"number\\\",\\\"defaultValue\\\":0,\\\"description\\\":\\\"Discount in cents.\\\"},{\\\"id\\\":\\\"87b28027\\\",\\\"path\\\":\\\"user.authenticated\\\",\\\"type\\\":\\\"boolean\\\",\\\"defaultValue\\\":false,\\\"description\\\":\\\"Sign-in status (mirrored).\\\",\\\"sharedWith\\\":[\\\"864ef35d\\\",\\\"2102bf6e\\\"]},{\\\"id\\\":\\\"e044d003\\\",\\\"path\\\":\\\"user.emailVerified\\\",\\\"type\\\":\\\"boolean\\\",\\\"defaultValue\\\":false,\\\"description\\\":\\\"Email verification status.\\\",\\\"sharedWith\\\":[\\\"2102bf6e\\\"]}],\\\"actions\\\":[{\\\"id\\\":\\\"8d775a6f\\\",\\\"name\\\":\\\"Update quantity\\\",\\\"intent\\\":\\\"Change the quantity of a cart line item.\\\",\\\"parameters\\\":[{\\\"id\\\":\\\"dde3fd4a\\\",\\\"name\\\":\\\"lineIndex\\\",\\\"type\\\":\\\"number\\\",\\\"required\\\":true,\\\"description\\\":\\\"Number parameter lineIndex for action Update quantity.\\\"},{\\\"id\\\":\\\"d99ffbce\\\",\\\"name\\\":\\\"newQuantity\\\",\\\"type\\\":\\\"number\\\",\\\"required\\\":true,\\\"description\\\":\\\"Number parameter newQuantity for action Update quantity.\\\"}],\\\"requiredStates\\\":[],\\\"rules\\\":[{\\\"id\\\":\\\"e91bd3df\\\",\\\"category\\\":\\\"validation\\\",\\\"condition\\\":{\\\"left\\\":\\\"cart.subtotal\\\",\\\"operator\\\":\\\"lower_than\\\",\\\"right\\\":0},\\\"effect\\\":{\\\"type\\\":\\\"block_action\\\",\\\"reason\\\":\\\"Cart in an invalid state.\\\",\\\"id\\\":\\\"12ef7300\\\",\\\"description\\\":\\\"Effect block_action from a validation rule on action Update quantity.\\\"},\\\"description\\\":\\\"Validation rule on action Update quantity.\\\"}],\\\"invariants\\\":[],\\\"effects\\\":[{\\\"type\\\":\\\"emit_event\\\",\\\"event\\\":\\\"cart.quantity.updated\\\",\\\"id\\\":\\\"408bd4ce\\\",\\\"description\\\":\\\"Effect emit_event on action Update quantity.\\\"}],\\\"emittedEvents\\\":[\\\"cart.quantity.updated\\\"],\\\"transitions\\\":[],\\\"scenarios\\\":[{\\\"id\\\":\\\"f888a546\\\",\\\"name\\\":\\\"Happy path: update quantity\\\",\\\"stateOverrides\\\":[],\\\"parameterOverrides\\\":[{\\\"parameterName\\\":\\\"lineIndex\\\",\\\"value\\\":0},{\\\"parameterName\\\":\\\"newQuantity\\\",\\\"value\\\":3}],\\\"expectedStatus\\\":\\\"success\\\",\\\"description\\\":\\\"Scenario Happy path: update quantity on action Update quantity.\\\"}]},{\\\"id\\\":\\\"bdccba9e\\\",\\\"name\\\":\\\"Remove item\\\",\\\"intent\\\":\\\"Remove a line item from the cart.\\\",\\\"parameters\\\":[{\\\"id\\\":\\\"871f9b58\\\",\\\"name\\\":\\\"lineIndex\\\",\\\"type\\\":\\\"number\\\",\\\"required\\\":true,\\\"description\\\":\\\"Number parameter lineIndex for action Remove item.\\\"}],\\\"requiredStates\\\":[],\\\"rules\\\":[{\\\"id\\\":\\\"1fee7533\\\",\\\"category\\\":\\\"validation\\\",\\\"condition\\\":{\\\"left\\\":\\\"cart.subtotal\\\",\\\"operator\\\":\\\"equals\\\",\\\"right\\\":0},\\\"effect\\\":{\\\"type\\\":\\\"block_action\\\",\\\"reason\\\":\\\"Cart is empty; nothing to remove.\\\",\\\"id\\\":\\\"68a4cf29\\\",\\\"description\\\":\\\"Effect block_action from a validation rule on action Remove item.\\\"},\\\"description\\\":\\\"Validation rule on action Remove item.\\\"}],\\\"invariants\\\":[],\\\"effects\\\":[{\\\"type\\\":\\\"emit_event\\\",\\\"event\\\":\\\"cart.item.removed\\\",\\\"id\\\":\\\"6b4660cd\\\",\\\"description\\\":\\\"Effect emit_event on action Remove item.\\\"}],\\\"emittedEvents\\\":[\\\"cart.item.removed\\\"],\\\"transitions\\\":[],\\\"scenarios\\\":[{\\\"id\\\":\\\"8c397a00\\\",\\\"name\\\":\\\"Happy path: remove item\\\",\\\"stateOverrides\\\":[{\\\"path\\\":\\\"cart.subtotal\\\",\\\"value\\\":4498}],\\\"parameterOverrides\\\":[{\\\"parameterName\\\":\\\"lineIndex\\\",\\\"value\\\":0}],\\\"expectedStatus\\\":\\\"success\\\",\\\"description\\\":\\\"Scenario Happy path: remove item on action Remove item.\\\"}]},{\\\"id\\\":\\\"cd9130fa\\\",\\\"name\\\":\\\"Apply coupon\\\",\\\"intent\\\":\\\"Redeem a coupon code against the cart.\\\",\\\"parameters\\\":[{\\\"id\\\":\\\"3c6923bf\\\",\\\"name\\\":\\\"code\\\",\\\"type\\\":\\\"string\\\",\\\"required\\\":true,\\\"bindToStatePath\\\":\\\"coupon.code\\\",\\\"description\\\":\\\"String parameter code for action Apply coupon.\\\"}],\\\"requiredStates\\\":[],\\\"rules\\\":[{\\\"id\\\":\\\"35481398\\\",\\\"category\\\":\\\"business\\\",\\\"condition\\\":{\\\"left\\\":\\\"coupon.applied\\\",\\\"operator\\\":\\\"is_true\\\"},\\\"effect\\\":{\\\"type\\\":\\\"block_action\\\",\\\"reason\\\":\\\"A coupon is already applied.\\\",\\\"id\\\":\\\"b1052107\\\",\\\"description\\\":\\\"Effect block_action from a business rule on action Apply coupon.\\\"},\\\"description\\\":\\\"Business rule on action Apply coupon.\\\"},{\\\"id\\\":\\\"8b5d3925\\\",\\\"category\\\":\\\"validation\\\",\\\"condition\\\":{\\\"left\\\":\\\"coupon.code\\\",\\\"operator\\\":\\\"equals\\\",\\\"right\\\":\\\"EXPIRED2025\\\"},\\\"effect\\\":{\\\"type\\\":\\\"block_action\\\",\\\"reason\\\":\\\"Coupon expired.\\\",\\\"id\\\":\\\"daa0e5ce\\\",\\\"description\\\":\\\"Effect block_action from a validation rule on action Apply coupon.\\\"},\\\"description\\\":\\\"Reject expired codes.\\\"},{\\\"id\\\":\\\"07798ac9\\\",\\\"category\\\":\\\"permissions\\\",\\\"condition\\\":{\\\"left\\\":\\\"user.authenticated\\\",\\\"operator\\\":\\\"is_false\\\"},\\\"effect\\\":{\\\"type\\\":\\\"block_action\\\",\\\"reason\\\":\\\"Sign in to apply coupons.\\\",\\\"id\\\":\\\"093f70b3\\\",\\\"description\\\":\\\"Effect block_action from a permissions rule on action Apply coupon.\\\"},\\\"description\\\":\\\"Permissions rule on action Apply coupon.\\\"}],\\\"invariants\\\":[],\\\"effects\\\":[{\\\"type\\\":\\\"set_state\\\",\\\"path\\\":\\\"coupon.applied\\\",\\\"value\\\":true,\\\"id\\\":\\\"5266266c\\\",\\\"description\\\":\\\"Effect set_state on action Apply coupon.\\\"},{\\\"type\\\":\\\"set_state\\\",\\\"path\\\":\\\"coupon.discount\\\",\\\"value\\\":500,\\\"id\\\":\\\"631226ec\\\",\\\"description\\\":\\\"Effect set_state on action Apply coupon.\\\"},{\\\"type\\\":\\\"set_state\\\",\\\"path\\\":\\\"cart.subtotal\\\",\\\"value\\\":{\\\"kind\\\":\\\"sub\\\",\\\"left\\\":{\\\"kind\\\":\\\"state\\\",\\\"path\\\":\\\"cart.subtotal\\\"},\\\"right\\\":{\\\"kind\\\":\\\"literal\\\",\\\"value\\\":500}},\\\"id\\\":\\\"5987b360\\\",\\\"description\\\":\\\"Effect set_state on action Apply coupon.\\\"},{\\\"type\\\":\\\"emit_event\\\",\\\"event\\\":\\\"cart.coupon.applied\\\",\\\"id\\\":\\\"3d6d11b8\\\",\\\"description\\\":\\\"Effect emit_event on action Apply coupon.\\\"}],\\\"emittedEvents\\\":[\\\"cart.coupon.applied\\\"],\\\"transitions\\\":[],\\\"scenarios\\\":[{\\\"id\\\":\\\"d1fffba7\\\",\\\"name\\\":\\\"Happy path: apply valid coupon (sub Expression discounts subtotal)\\\",\\\"stateOverrides\\\":[{\\\"path\\\":\\\"user.authenticated\\\",\\\"value\\\":true},{\\\"path\\\":\\\"coupon.applied\\\",\\\"value\\\":false},{\\\"path\\\":\\\"cart.subtotal\\\",\\\"value\\\":4498}],\\\"parameterOverrides\\\":[{\\\"parameterName\\\":\\\"code\\\",\\\"value\\\":\\\"SAVE10\\\"}],\\\"expectedStatus\\\":\\\"success\\\",\\\"expectedAssertions\\\":[{\\\"path\\\":\\\"coupon.applied\\\",\\\"operator\\\":\\\"is_true\\\",\\\"description\\\":\\\"Asserts coupon.applied is_true.\\\"},{\\\"path\\\":\\\"cart.subtotal\\\",\\\"operator\\\":\\\"equals\\\",\\\"value\\\":3998,\\\"description\\\":\\\"Asserts cart.subtotal equals 3998.\\\"}],\\\"description\\\":\\\"Scenario Happy path: apply valid coupon (sub Expression discounts subtotal) on action Apply coupon.\\\"}]},{\\\"id\\\":\\\"524a7937\\\",\\\"name\\\":\\\"Recalculate subtotal\\\",\\\"intent\\\":\\\"Recompute the cart subtotal from line items using a sum_pluck Expression.\\\",\\\"parameters\\\":[],\\\"requiredStates\\\":[],\\\"rules\\\":[{\\\"id\\\":\\\"e9a53085\\\",\\\"category\\\":\\\"validation\\\",\\\"condition\\\":{\\\"left\\\":\\\"cart.subtotal\\\",\\\"operator\\\":\\\"lower_than\\\",\\\"right\\\":0},\\\"effect\\\":{\\\"type\\\":\\\"block_action\\\",\\\"reason\\\":\\\"Cart state is invalid.\\\",\\\"id\\\":\\\"ae4c77e4\\\",\\\"description\\\":\\\"Effect block_action from a validation rule on action Recalculate subtotal.\\\"},\\\"description\\\":\\\"Don't recompute when the cart is empty.\\\"},{\\\"id\\\":\\\"90cccab0\\\",\\\"category\\\":\\\"permissions\\\",\\\"condition\\\":{\\\"left\\\":\\\"user.authenticated\\\",\\\"operator\\\":\\\"is_false\\\"},\\\"effect\\\":{\\\"type\\\":\\\"block_action\\\",\\\"reason\\\":\\\"Sign in to modify your cart.\\\",\\\"id\\\":\\\"11b23665\\\",\\\"description\\\":\\\"Effect block_action from a permissions rule on action Recalculate subtotal.\\\"},\\\"description\\\":\\\"Permissions rule on action Recalculate subtotal.\\\"}],\\\"invariants\\\":[],\\\"effects\\\":[{\\\"type\\\":\\\"set_state\\\",\\\"path\\\":\\\"cart.subtotal\\\",\\\"value\\\":{\\\"kind\\\":\\\"sum_pluck\\\",\\\"operand\\\":{\\\"kind\\\":\\\"state\\\",\\\"path\\\":\\\"cart.lineItems\\\"},\\\"field\\\":\\\"amount\\\"},\\\"id\\\":\\\"123eb629\\\",\\\"description\\\":\\\"Effect set_state on action Recalculate subtotal.\\\"},{\\\"type\\\":\\\"emit_event\\\",\\\"event\\\":\\\"cart.subtotal.recomputed\\\",\\\"id\\\":\\\"af4b13da\\\",\\\"description\\\":\\\"Effect emit_event on action Recalculate subtotal.\\\"}],\\\"emittedEvents\\\":[\\\"cart.subtotal.recomputed\\\"],\\\"transitions\\\":[],\\\"scenarios\\\":[{\\\"id\\\":\\\"edc2e9e8\\\",\\\"name\\\":\\\"sum_pluck: recompute subtotal from line items\\\",\\\"description\\\":\\\"Two line items, 2999 + 1499 = 4498.\\\",\\\"stateOverrides\\\":[{\\\"path\\\":\\\"user.authenticated\\\",\\\"value\\\":true},{\\\"path\\\":\\\"cart.lineItems\\\",\\\"value\\\":[{\\\"productId\\\":\\\"wireless-headphones\\\",\\\"qty\\\":1,\\\"amount\\\":2999},{\\\"productId\\\":\\\"phone-case\\\",\\\"qty\\\":1,\\\"amount\\\":1499}]}],\\\"parameterOverrides\\\":[],\\\"expectedStatus\\\":\\\"success\\\",\\\"expectedAssertions\\\":[{\\\"path\\\":\\\"cart.subtotal\\\",\\\"operator\\\":\\\"equals\\\",\\\"value\\\":4498,\\\"description\\\":\\\"Asserts cart.subtotal equals 4498.\\\"}]}]},{\\\"id\\\":\\\"825ebb2e\\\",\\\"name\\\":\\\"Proceed to checkout\\\",\\\"intent\\\":\\\"Hand off to the checkout flow.\\\",\\\"parameters\\\":[],\\\"requiredStates\\\":[],\\\"rules\\\":[{\\\"id\\\":\\\"49d89bf5\\\",\\\"category\\\":\\\"business\\\",\\\"condition\\\":{\\\"left\\\":\\\"cart.subtotal\\\",\\\"operator\\\":\\\"equals\\\",\\\"right\\\":0},\\\"effect\\\":{\\\"type\\\":\\\"block_action\\\",\\\"reason\\\":\\\"Cart is empty.\\\",\\\"id\\\":\\\"e6b8954c\\\",\\\"description\\\":\\\"Effect block_action from a business rule on action Proceed to checkout.\\\"},\\\"description\\\":\\\"Business rule on action Proceed to checkout.\\\"},{\\\"id\\\":\\\"5a6d8cdd\\\",\\\"category\\\":\\\"permissions\\\",\\\"condition\\\":{\\\"kind\\\":\\\"any\\\",\\\"conditions\\\":[{\\\"left\\\":\\\"user.authenticated\\\",\\\"operator\\\":\\\"is_false\\\"},{\\\"left\\\":\\\"user.emailVerified\\\",\\\"operator\\\":\\\"is_false\\\"}]},\\\"effect\\\":{\\\"type\\\":\\\"block_action\\\",\\\"reason\\\":\\\"Sign in with a verified email to continue to checkout.\\\",\\\"id\\\":\\\"5784edf8\\\",\\\"description\\\":\\\"Effect block_action from a permissions rule on action Proceed to checkout.\\\"},\\\"description\\\":\\\"Composite ANY: any unverified condition blocks checkout.\\\"}],\\\"invariants\\\":[],\\\"effects\\\":[{\\\"type\\\":\\\"emit_event\\\",\\\"event\\\":\\\"checkout.started\\\",\\\"id\\\":\\\"1be6e7ed\\\",\\\"description\\\":\\\"Effect emit_event on action Proceed to checkout.\\\"},{\\\"type\\\":\\\"transition_surface\\\",\\\"target\\\":\\\"2102bf6e\\\",\\\"id\\\":\\\"28cfd4e5\\\",\\\"description\\\":\\\"Effect transition_surface on action Proceed to checkout.\\\"}],\\\"emittedEvents\\\":[\\\"checkout.started\\\",\\\"ui.checkout.opened\\\"],\\\"transitions\\\":[],\\\"scenarios\\\":[{\\\"id\\\":\\\"e64ef0bc\\\",\\\"name\\\":\\\"Happy path: proceed to checkout\\\",\\\"stateOverrides\\\":[{\\\"path\\\":\\\"user.authenticated\\\",\\\"value\\\":true},{\\\"path\\\":\\\"user.emailVerified\\\",\\\"value\\\":true},{\\\"path\\\":\\\"cart.subtotal\\\",\\\"value\\\":4498}],\\\"parameterOverrides\\\":[],\\\"expectedStatus\\\":\\\"success\\\",\\\"expectedTransition\\\":\\\"2102bf6e\\\",\\\"description\\\":\\\"Scenario Happy path: proceed to checkout on action Proceed to checkout.\\\"},{\\\"id\\\":\\\"2e3aa293\\\",\\\"name\\\":\\\"Blocked: composite ANY catches unverified buyer\\\",\\\"stateOverrides\\\":[{\\\"path\\\":\\\"user.authenticated\\\",\\\"value\\\":true},{\\\"path\\\":\\\"user.emailVerified\\\",\\\"value\\\":false},{\\\"path\\\":\\\"cart.subtotal\\\",\\\"value\\\":4498}],\\\"parameterOverrides\\\":[],\\\"expectedStatus\\\":\\\"blocked\\\",\\\"description\\\":\\\"Scenario Blocked: composite ANY catches unverified buyer on action Proceed to checkout.\\\"}]}],\\\"rules\\\":[{\\\"id\\\":\\\"a41974e6\\\",\\\"category\\\":\\\"ux_feedback\\\",\\\"condition\\\":{\\\"kind\\\":\\\"all\\\",\\\"conditions\\\":[{\\\"left\\\":\\\"cart.subtotal\\\",\\\"operator\\\":\\\"greater_than\\\",\\\"right\\\":3499},{\\\"left\\\":\\\"coupon.applied\\\",\\\"operator\\\":\\\"is_false\\\"}]},\\\"effect\\\":{\\\"type\\\":\\\"show_message\\\",\\\"message\\\":\\\"You qualify for free shipping! Apply a coupon for an extra discount.\\\",\\\"id\\\":\\\"cc94cc62\\\",\\\"description\\\":\\\"Effect show_message from a surface-level ux_feedback rule on Cart.\\\"},\\\"description\\\":\\\"Free-shipping nudge: composite ALL fires for any cart action.\\\"}],\\\"invariants\\\":[{\\\"id\\\":\\\"71de2e0f\\\",\\\"name\\\":\\\"Cart subtotal non-negative\\\",\\\"condition\\\":{\\\"left\\\":\\\"cart.subtotal\\\",\\\"operator\\\":\\\"greater_than\\\",\\\"right\\\":-1},\\\"message\\\":\\\"Cart subtotal went negative.\\\",\\\"description\\\":\\\"Surface invariant on Cart: Cart subtotal non-negative.\\\"}],\\\"transitions\\\":[{\\\"id\\\":\\\"f142df3b\\\",\\\"target\\\":\\\"2102bf6e\\\",\\\"label\\\":\\\"Checkout\\\",\\\"description\\\":\\\"From the cart to the checkout flow.\\\"}]},{\\\"id\\\":\\\"864ef35d\\\",\\\"name\\\":\\\"Address book\\\",\\\"type\\\":\\\"screen\\\",\\\"description\\\":\\\"Manage shipping addresses; capped at 5 entries.\\\",\\\"stateDefinitions\\\":[{\\\"id\\\":\\\"1ef22ea6\\\",\\\"path\\\":\\\"addresses.count\\\",\\\"type\\\":\\\"number\\\",\\\"defaultValue\\\":0,\\\"description\\\":\\\"Saved shipping addresses count. Cap at 5.\\\",\\\"sharedWith\\\":[\\\"2102bf6e\\\"]},{\\\"id\\\":\\\"442ddcb7\\\",\\\"path\\\":\\\"address.postalValid\\\",\\\"type\\\":\\\"boolean\\\",\\\"defaultValue\\\":true,\\\"description\\\":\\\"Whether the entered postal code passes the country check.\\\"}],\\\"actions\\\":[{\\\"id\\\":\\\"2fd0ec30\\\",\\\"name\\\":\\\"Add shipping address\\\",\\\"intent\\\":\\\"Save a new shipping address.\\\",\\\"parameters\\\":[{\\\"id\\\":\\\"92c7a84e\\\",\\\"name\\\":\\\"fullName\\\",\\\"type\\\":\\\"string\\\",\\\"required\\\":true,\\\"description\\\":\\\"String parameter fullName for action Add shipping address.\\\"},{\\\"id\\\":\\\"332ff42d\\\",\\\"name\\\":\\\"street\\\",\\\"type\\\":\\\"string\\\",\\\"required\\\":true,\\\"description\\\":\\\"String parameter street for action Add shipping address.\\\"},{\\\"id\\\":\\\"982b5098\\\",\\\"name\\\":\\\"city\\\",\\\"type\\\":\\\"string\\\",\\\"required\\\":true,\\\"description\\\":\\\"String parameter city for action Add shipping address.\\\"},{\\\"id\\\":\\\"f92b9a0e\\\",\\\"name\\\":\\\"postalCode\\\",\\\"type\\\":\\\"string\\\",\\\"required\\\":true,\\\"description\\\":\\\"String parameter postalCode for action Add shipping address.\\\"}],\\\"requiredStates\\\":[],\\\"rules\\\":[{\\\"id\\\":\\\"61efc813\\\",\\\"category\\\":\\\"billing_quota\\\",\\\"condition\\\":{\\\"left\\\":\\\"addresses.count\\\",\\\"operator\\\":\\\"greater_than\\\",\\\"right\\\":4},\\\"effect\\\":{\\\"type\\\":\\\"block_action\\\",\\\"reason\\\":\\\"Maximum of 5 addresses reached. Remove one first.\\\",\\\"id\\\":\\\"56fb74b8\\\",\\\"description\\\":\\\"Effect block_action from a billing_quota rule on action Add shipping address.\\\"},\\\"description\\\":\\\"Cap the address book at 5 entries.\\\"},{\\\"id\\\":\\\"c4548f96\\\",\\\"category\\\":\\\"validation\\\",\\\"condition\\\":{\\\"left\\\":\\\"address.postalValid\\\",\\\"operator\\\":\\\"is_false\\\"},\\\"effect\\\":{\\\"type\\\":\\\"block_action\\\",\\\"reason\\\":\\\"Postal code is invalid for the selected country.\\\",\\\"id\\\":\\\"ed73f7c6\\\",\\\"description\\\":\\\"Effect block_action from a validation rule on action Add shipping address.\\\"},\\\"description\\\":\\\"Validation rule on action Add shipping address.\\\"},{\\\"id\\\":\\\"a5d2ff41\\\",\\\"category\\\":\\\"permissions\\\",\\\"condition\\\":{\\\"left\\\":\\\"user.authenticated\\\",\\\"operator\\\":\\\"is_false\\\"},\\\"effect\\\":{\\\"type\\\":\\\"block_action\\\",\\\"reason\\\":\\\"Sign in to add an address.\\\",\\\"id\\\":\\\"959c6b46\\\",\\\"description\\\":\\\"Effect block_action from a permissions rule on action Add shipping address.\\\"},\\\"description\\\":\\\"Permissions rule on action Add shipping address.\\\"}],\\\"invariants\\\":[],\\\"effects\\\":[{\\\"type\\\":\\\"set_state\\\",\\\"path\\\":\\\"addresses.count\\\",\\\"value\\\":{\\\"kind\\\":\\\"add\\\",\\\"left\\\":{\\\"kind\\\":\\\"state\\\",\\\"path\\\":\\\"addresses.count\\\"},\\\"right\\\":{\\\"kind\\\":\\\"literal\\\",\\\"value\\\":1}},\\\"id\\\":\\\"997776a4\\\",\\\"description\\\":\\\"Effect set_state on action Add shipping address.\\\"},{\\\"type\\\":\\\"emit_event\\\",\\\"event\\\":\\\"address.created\\\",\\\"id\\\":\\\"6a19a96a\\\",\\\"description\\\":\\\"Effect emit_event on action Add shipping address.\\\"}],\\\"emittedEvents\\\":[\\\"address.created\\\"],\\\"transitions\\\":[],\\\"scenarios\\\":[{\\\"id\\\":\\\"e10449e7\\\",\\\"name\\\":\\\"Happy path: first address added\\\",\\\"stateOverrides\\\":[{\\\"path\\\":\\\"user.authenticated\\\",\\\"value\\\":true},{\\\"path\\\":\\\"addresses.count\\\",\\\"value\\\":0},{\\\"path\\\":\\\"address.postalValid\\\",\\\"value\\\":true}],\\\"parameterOverrides\\\":[{\\\"parameterName\\\":\\\"fullName\\\",\\\"value\\\":\\\"Ada Lovelace\\\"},{\\\"parameterName\\\":\\\"street\\\",\\\"value\\\":\\\"1 Babbage Way\\\"},{\\\"parameterName\\\":\\\"city\\\",\\\"value\\\":\\\"London\\\"},{\\\"parameterName\\\":\\\"postalCode\\\",\\\"value\\\":\\\"WC1E 6BT\\\"}],\\\"expectedStatus\\\":\\\"success\\\",\\\"expectedAssertions\\\":[{\\\"path\\\":\\\"addresses.count\\\",\\\"operator\\\":\\\"equals\\\",\\\"value\\\":1,\\\"description\\\":\\\"Asserts addresses.count equals 1.\\\"}],\\\"description\\\":\\\"Scenario Happy path: first address added on action Add shipping address.\\\"},{\\\"id\\\":\\\"0418d579\\\",\\\"name\\\":\\\"Blocked: address book full\\\",\\\"stateOverrides\\\":[{\\\"path\\\":\\\"user.authenticated\\\",\\\"value\\\":true},{\\\"path\\\":\\\"addresses.count\\\",\\\"value\\\":5},{\\\"path\\\":\\\"address.postalValid\\\",\\\"value\\\":true}],\\\"parameterOverrides\\\":[{\\\"parameterName\\\":\\\"fullName\\\",\\\"value\\\":\\\"Ada Lovelace\\\"},{\\\"parameterName\\\":\\\"street\\\",\\\"value\\\":\\\"1 Babbage Way\\\"},{\\\"parameterName\\\":\\\"city\\\",\\\"value\\\":\\\"London\\\"},{\\\"parameterName\\\":\\\"postalCode\\\",\\\"value\\\":\\\"WC1E 6BT\\\"}],\\\"expectedStatus\\\":\\\"blocked\\\",\\\"description\\\":\\\"Scenario Blocked: address book full on action Add shipping address.\\\"}]},{\\\"id\\\":\\\"21a6676c\\\",\\\"name\\\":\\\"Continue to checkout\\\",\\\"intent\\\":\\\"Return to checkout once an address is on file.\\\",\\\"parameters\\\":[],\\\"requiredStates\\\":[],\\\"rules\\\":[{\\\"id\\\":\\\"3e9db1fa\\\",\\\"category\\\":\\\"validation\\\",\\\"condition\\\":{\\\"left\\\":\\\"addresses.count\\\",\\\"operator\\\":\\\"equals\\\",\\\"right\\\":0},\\\"effect\\\":{\\\"type\\\":\\\"block_action\\\",\\\"reason\\\":\\\"Add an address before continuing.\\\",\\\"id\\\":\\\"d890ff42\\\",\\\"description\\\":\\\"Effect block_action from a validation rule on action Continue to checkout.\\\"},\\\"description\\\":\\\"Validation rule on action Continue to checkout.\\\"}],\\\"invariants\\\":[],\\\"effects\\\":[{\\\"type\\\":\\\"transition_surface\\\",\\\"target\\\":\\\"2102bf6e\\\",\\\"id\\\":\\\"c5d58fe1\\\",\\\"description\\\":\\\"Effect transition_surface on action Continue to checkout.\\\"}],\\\"emittedEvents\\\":[\\\"ui.checkout.opened\\\"],\\\"transitions\\\":[],\\\"scenarios\\\":[{\\\"id\\\":\\\"cf547783\\\",\\\"name\\\":\\\"Happy path: continue\\\",\\\"stateOverrides\\\":[{\\\"path\\\":\\\"user.authenticated\\\",\\\"value\\\":true},{\\\"path\\\":\\\"addresses.count\\\",\\\"value\\\":1}],\\\"parameterOverrides\\\":[],\\\"expectedStatus\\\":\\\"success\\\",\\\"expectedTransition\\\":\\\"2102bf6e\\\",\\\"description\\\":\\\"Scenario Happy path: continue on action Continue to checkout.\\\"}]}],\\\"rules\\\":[{\\\"id\\\":\\\"dfccca82\\\",\\\"category\\\":\\\"permissions\\\",\\\"condition\\\":{\\\"left\\\":\\\"user.authenticated\\\",\\\"operator\\\":\\\"is_false\\\"},\\\"effect\\\":{\\\"type\\\":\\\"block_action\\\",\\\"reason\\\":\\\"Sign in to manage your address book.\\\",\\\"id\\\":\\\"bc3dd8cf\\\",\\\"description\\\":\\\"Effect block_action from a surface-level permissions rule on Address book.\\\"},\\\"description\\\":\\\"Surface-level permissions rule on Address book.\\\"}],\\\"invariants\\\":[{\\\"id\\\":\\\"5a73fdb1\\\",\\\"name\\\":\\\"Address count bounded\\\",\\\"condition\\\":{\\\"left\\\":\\\"addresses.count\\\",\\\"operator\\\":\\\"lower_than\\\",\\\"right\\\":6},\\\"message\\\":\\\"Address book exceeded its cap.\\\",\\\"description\\\":\\\"Surface invariant on Address book: Address count bounded.\\\"}],\\\"transitions\\\":[{\\\"id\\\":\\\"95b990e1\\\",\\\"target\\\":\\\"2102bf6e\\\",\\\"label\\\":\\\"Continue to checkout\\\",\\\"description\\\":\\\"Transition from Address book to Continue to checkout.\\\"}]},{\\\"id\\\":\\\"2102bf6e\\\",\\\"name\\\":\\\"Checkout\\\",\\\"type\\\":\\\"workflow\\\",\\\"description\\\":\\\"Multi-step checkout: address → payment → review → place.\\\",\\\"stateDefinitions\\\":[{\\\"id\\\":\\\"b51bc100\\\",\\\"path\\\":\\\"checkout.step\\\",\\\"type\\\":\\\"enum\\\",\\\"defaultValue\\\":\\\"address\\\",\\\"enumValues\\\":[\\\"address\\\",\\\"payment\\\",\\\"review\\\"],\\\"description\\\":\\\"Current step in the checkout wizard.\\\"},{\\\"id\\\":\\\"953ac567\\\",\\\"path\\\":\\\"shipping.addressConfirmed\\\",\\\"type\\\":\\\"boolean\\\",\\\"defaultValue\\\":false,\\\"description\\\":\\\"Whether the buyer confirmed a shipping address.\\\"},{\\\"id\\\":\\\"2c7ce796\\\",\\\"path\\\":\\\"payment.method\\\",\\\"type\\\":\\\"enum\\\",\\\"defaultValue\\\":\\\"none\\\",\\\"enumValues\\\":[\\\"none\\\",\\\"card\\\",\\\"wallet\\\"],\\\"description\\\":\\\"Selected payment method.\\\"},{\\\"id\\\":\\\"ce1709f3\\\",\\\"path\\\":\\\"payment.cardValid\\\",\\\"type\\\":\\\"boolean\\\",\\\"defaultValue\\\":true,\\\"description\\\":\\\"Whether the card details pass validation.\\\"},{\\\"id\\\":\\\"2ad3e033\\\",\\\"path\\\":\\\"order.amount\\\",\\\"type\\\":\\\"number\\\",\\\"defaultValue\\\":5097,\\\"description\\\":\\\"Final order amount in cents. Computed via add Expression: subtotal + shipping - discount.\\\",\\\"sharedWith\\\":[\\\"8412e977\\\"]},{\\\"id\\\":\\\"3e485a8d\\\",\\\"path\\\":\\\"fraud.flagged\\\",\\\"type\\\":\\\"boolean\\\",\\\"defaultValue\\\":false,\\\"description\\\":\\\"Whether the buyer was flagged by fraud detection.\\\"},{\\\"id\\\":\\\"a2170d25\\\",\\\"path\\\":\\\"admin.signedIn\\\",\\\"type\\\":\\\"boolean\\\",\\\"defaultValue\\\":false,\\\"description\\\":\\\"Whether a store admin is signed in (for override actions).\\\"}],\\\"actions\\\":[{\\\"id\\\":\\\"b5108b6e\\\",\\\"name\\\":\\\"Confirm shipping address\\\",\\\"intent\\\":\\\"Confirm the shipping address; advance to the payment step.\\\",\\\"parameters\\\":[{\\\"id\\\":\\\"82b76492\\\",\\\"name\\\":\\\"addressIndex\\\",\\\"type\\\":\\\"number\\\",\\\"required\\\":true,\\\"defaultValue\\\":0,\\\"description\\\":\\\"Number parameter addressIndex for action Confirm shipping address.\\\"}],\\\"requiredStates\\\":[],\\\"rules\\\":[{\\\"id\\\":\\\"567f16d8\\\",\\\"category\\\":\\\"business\\\",\\\"condition\\\":{\\\"left\\\":\\\"checkout.step\\\",\\\"operator\\\":\\\"not_equals\\\",\\\"right\\\":\\\"address\\\"},\\\"effect\\\":{\\\"type\\\":\\\"block_action\\\",\\\"reason\\\":\\\"Wrong step.\\\",\\\"id\\\":\\\"72d952fc\\\",\\\"description\\\":\\\"Effect block_action from a business rule on action Confirm shipping address.\\\"},\\\"description\\\":\\\"Business rule on action Confirm shipping address.\\\"},{\\\"id\\\":\\\"72f9a84a\\\",\\\"category\\\":\\\"validation\\\",\\\"condition\\\":{\\\"left\\\":\\\"addresses.count\\\",\\\"operator\\\":\\\"equals\\\",\\\"right\\\":0},\\\"effect\\\":{\\\"type\\\":\\\"block_action\\\",\\\"reason\\\":\\\"Add an address before confirming.\\\",\\\"id\\\":\\\"dcfbf283\\\",\\\"description\\\":\\\"Effect block_action from a validation rule on action Confirm shipping address.\\\"},\\\"description\\\":\\\"Validation rule on action Confirm shipping address.\\\"},{\\\"id\\\":\\\"8d7ff7ec\\\",\\\"category\\\":\\\"permissions\\\",\\\"condition\\\":{\\\"left\\\":\\\"user.authenticated\\\",\\\"operator\\\":\\\"is_false\\\"},\\\"effect\\\":{\\\"type\\\":\\\"block_action\\\",\\\"reason\\\":\\\"Sign in to confirm a shipping address.\\\",\\\"id\\\":\\\"0af9d7b3\\\",\\\"description\\\":\\\"Effect block_action from a permissions rule on action Confirm shipping address.\\\"},\\\"description\\\":\\\"Permissions rule on action Confirm shipping address.\\\"}],\\\"invariants\\\":[],\\\"effects\\\":[{\\\"type\\\":\\\"set_state\\\",\\\"path\\\":\\\"shipping.addressConfirmed\\\",\\\"value\\\":true,\\\"id\\\":\\\"af421388\\\",\\\"description\\\":\\\"Effect set_state on action Confirm shipping address.\\\"},{\\\"type\\\":\\\"set_state\\\",\\\"path\\\":\\\"checkout.step\\\",\\\"value\\\":\\\"payment\\\",\\\"id\\\":\\\"7bb5f14d\\\",\\\"description\\\":\\\"Effect set_state on action Confirm shipping address.\\\"},{\\\"type\\\":\\\"emit_event\\\",\\\"event\\\":\\\"checkout.address.confirmed\\\",\\\"id\\\":\\\"6552db5b\\\",\\\"description\\\":\\\"Effect emit_event on action Confirm shipping address.\\\"}],\\\"emittedEvents\\\":[\\\"checkout.address.confirmed\\\"],\\\"transitions\\\":[],\\\"scenarios\\\":[{\\\"id\\\":\\\"c4891e30\\\",\\\"name\\\":\\\"Happy path: confirm address\\\",\\\"stateOverrides\\\":[{\\\"path\\\":\\\"user.authenticated\\\",\\\"value\\\":true},{\\\"path\\\":\\\"user.emailVerified\\\",\\\"value\\\":true},{\\\"path\\\":\\\"checkout.step\\\",\\\"value\\\":\\\"address\\\"},{\\\"path\\\":\\\"addresses.count\\\",\\\"value\\\":1}],\\\"parameterOverrides\\\":[{\\\"parameterName\\\":\\\"addressIndex\\\",\\\"value\\\":0}],\\\"expectedStatus\\\":\\\"success\\\",\\\"expectedAssertions\\\":[{\\\"path\\\":\\\"checkout.step\\\",\\\"operator\\\":\\\"equals\\\",\\\"value\\\":\\\"payment\\\",\\\"description\\\":\\\"Asserts checkout.step equals 'payment'.\\\"}],\\\"description\\\":\\\"Scenario Happy path: confirm address on action Confirm shipping address.\\\"}]},{\\\"id\\\":\\\"e177190c\\\",\\\"name\\\":\\\"Select payment method\\\",\\\"intent\\\":\\\"Pick a payment method and advance to review.\\\",\\\"parameters\\\":[{\\\"id\\\":\\\"63e23674\\\",\\\"name\\\":\\\"method\\\",\\\"type\\\":\\\"enum\\\",\\\"required\\\":true,\\\"enumValues\\\":[\\\"card\\\",\\\"wallet\\\"],\\\"bindToStatePath\\\":\\\"payment.method\\\",\\\"description\\\":\\\"Enum parameter method for action Select payment method.\\\"}],\\\"requiredStates\\\":[],\\\"rules\\\":[{\\\"id\\\":\\\"4d3207bb\\\",\\\"category\\\":\\\"business\\\",\\\"condition\\\":{\\\"left\\\":\\\"checkout.step\\\",\\\"operator\\\":\\\"not_equals\\\",\\\"right\\\":\\\"payment\\\"},\\\"effect\\\":{\\\"type\\\":\\\"block_action\\\",\\\"reason\\\":\\\"Wrong step.\\\",\\\"id\\\":\\\"cc589b0f\\\",\\\"description\\\":\\\"Effect block_action from a business rule on action Select payment method.\\\"},\\\"description\\\":\\\"Business rule on action Select payment method.\\\"},{\\\"id\\\":\\\"2dba50cc\\\",\\\"category\\\":\\\"validation\\\",\\\"condition\\\":{\\\"left\\\":\\\"payment.cardValid\\\",\\\"operator\\\":\\\"is_false\\\"},\\\"effect\\\":{\\\"type\\\":\\\"block_action\\\",\\\"reason\\\":\\\"Card details look invalid.\\\",\\\"id\\\":\\\"5bc88ad0\\\",\\\"description\\\":\\\"Effect block_action from a validation rule on action Select payment method.\\\"},\\\"description\\\":\\\"Validation rule on action Select payment method.\\\"},{\\\"id\\\":\\\"dc31c9fe\\\",\\\"category\\\":\\\"permissions\\\",\\\"condition\\\":{\\\"left\\\":\\\"user.authenticated\\\",\\\"operator\\\":\\\"is_false\\\"},\\\"effect\\\":{\\\"type\\\":\\\"block_action\\\",\\\"reason\\\":\\\"Sign in to select a payment method.\\\",\\\"id\\\":\\\"286bd399\\\",\\\"description\\\":\\\"Effect block_action from a permissions rule on action Select payment method.\\\"},\\\"description\\\":\\\"Permissions rule on action Select payment method.\\\"}],\\\"invariants\\\":[],\\\"effects\\\":[{\\\"type\\\":\\\"set_state\\\",\\\"path\\\":\\\"checkout.step\\\",\\\"value\\\":\\\"review\\\",\\\"id\\\":\\\"0e56006e\\\",\\\"description\\\":\\\"Effect set_state on action Select payment method.\\\"},{\\\"type\\\":\\\"emit_event\\\",\\\"event\\\":\\\"checkout.payment.selected\\\",\\\"id\\\":\\\"8e03b860\\\",\\\"description\\\":\\\"Effect emit_event on action Select payment method.\\\"}],\\\"emittedEvents\\\":[\\\"checkout.payment.selected\\\"],\\\"transitions\\\":[],\\\"scenarios\\\":[{\\\"id\\\":\\\"70ffb8ae\\\",\\\"name\\\":\\\"Happy path: pick card\\\",\\\"stateOverrides\\\":[{\\\"path\\\":\\\"user.authenticated\\\",\\\"value\\\":true},{\\\"path\\\":\\\"user.emailVerified\\\",\\\"value\\\":true},{\\\"path\\\":\\\"checkout.step\\\",\\\"value\\\":\\\"payment\\\"},{\\\"path\\\":\\\"payment.cardValid\\\",\\\"value\\\":true}],\\\"parameterOverrides\\\":[{\\\"parameterName\\\":\\\"method\\\",\\\"value\\\":\\\"card\\\"}],\\\"expectedStatus\\\":\\\"success\\\",\\\"description\\\":\\\"Scenario Happy path: pick card on action Select payment method.\\\"}]},{\\\"id\\\":\\\"fd227eae\\\",\\\"name\\\":\\\"Place order\\\",\\\"intent\\\":\\\"Submit the order; computes order.amount via an add Expression and emits order.placed.\\\",\\\"parameters\\\":[],\\\"requiredStates\\\":[],\\\"rules\\\":[{\\\"id\\\":\\\"e155ba56\\\",\\\"category\\\":\\\"business\\\",\\\"condition\\\":{\\\"left\\\":\\\"checkout.step\\\",\\\"operator\\\":\\\"not_equals\\\",\\\"right\\\":\\\"review\\\"},\\\"effect\\\":{\\\"type\\\":\\\"block_action\\\",\\\"reason\\\":\\\"Complete the previous steps first.\\\",\\\"id\\\":\\\"0b6a6d67\\\",\\\"description\\\":\\\"Effect block_action from a business rule on action Place order.\\\"},\\\"description\\\":\\\"Business rule on action Place order.\\\"},{\\\"id\\\":\\\"bb30fdb4\\\",\\\"category\\\":\\\"validation\\\",\\\"condition\\\":{\\\"left\\\":\\\"payment.method\\\",\\\"operator\\\":\\\"equals\\\",\\\"right\\\":\\\"none\\\"},\\\"effect\\\":{\\\"type\\\":\\\"block_action\\\",\\\"reason\\\":\\\"Pick a payment method.\\\",\\\"id\\\":\\\"3f3fab2a\\\",\\\"description\\\":\\\"Effect block_action from a validation rule on action Place order.\\\"},\\\"description\\\":\\\"Validation rule on action Place order.\\\"},{\\\"id\\\":\\\"6a580bb1\\\",\\\"category\\\":\\\"security\\\",\\\"condition\\\":{\\\"left\\\":\\\"fraud.flagged\\\",\\\"operator\\\":\\\"is_true\\\"},\\\"effect\\\":{\\\"type\\\":\\\"block_action\\\",\\\"reason\\\":\\\"Account flagged for fraud review.\\\",\\\"id\\\":\\\"2efc4871\\\",\\\"description\\\":\\\"Effect block_action from a security rule on action Place order.\\\"},\\\"description\\\":\\\"Security rule on action Place order.\\\"}],\\\"invariants\\\":[],\\\"effects\\\":[{\\\"type\\\":\\\"set_state\\\",\\\"path\\\":\\\"order.amount\\\",\\\"value\\\":{\\\"kind\\\":\\\"add\\\",\\\"left\\\":{\\\"kind\\\":\\\"state\\\",\\\"path\\\":\\\"cart.subtotal\\\"},\\\"right\\\":{\\\"kind\\\":\\\"state\\\",\\\"path\\\":\\\"cart.shipping\\\"}},\\\"id\\\":\\\"863dd5df\\\",\\\"description\\\":\\\"Effect set_state on action Place order.\\\"},{\\\"type\\\":\\\"emit_event\\\",\\\"event\\\":\\\"order.placed\\\",\\\"id\\\":\\\"e271f733\\\",\\\"description\\\":\\\"Effect emit_event on action Place order.\\\"},{\\\"type\\\":\\\"show_message\\\",\\\"message\\\":\\\"Order placed!\\\",\\\"id\\\":\\\"52c4c22e\\\",\\\"description\\\":\\\"Effect show_message on action Place order.\\\"}],\\\"emittedEvents\\\":[\\\"order.placed\\\"],\\\"transitions\\\":[],\\\"scenarios\\\":[{\\\"id\\\":\\\"fc64632a\\\",\\\"name\\\":\\\"add Expression: order.amount = subtotal + shipping\\\",\\\"description\\\":\\\"4498 + 599 = 5097.\\\",\\\"stateOverrides\\\":[{\\\"path\\\":\\\"user.authenticated\\\",\\\"value\\\":true},{\\\"path\\\":\\\"user.emailVerified\\\",\\\"value\\\":true},{\\\"path\\\":\\\"checkout.step\\\",\\\"value\\\":\\\"review\\\"},{\\\"path\\\":\\\"payment.method\\\",\\\"value\\\":\\\"card\\\"},{\\\"path\\\":\\\"fraud.flagged\\\",\\\"value\\\":false},{\\\"path\\\":\\\"cart.subtotal\\\",\\\"value\\\":4498},{\\\"path\\\":\\\"cart.shipping\\\",\\\"value\\\":599}],\\\"parameterOverrides\\\":[],\\\"expectedStatus\\\":\\\"success\\\",\\\"expectedAssertions\\\":[{\\\"path\\\":\\\"order.amount\\\",\\\"operator\\\":\\\"equals\\\",\\\"value\\\":5097,\\\"description\\\":\\\"Asserts order.amount equals 5097.\\\"}]}]},{\\\"id\\\":\\\"047ed331\\\",\\\"name\\\":\\\"Override subtotal (admin)\\\",\\\"intent\\\":\\\"Admin-only manual subtotal adjustment. Bypasses the non-negative subtotal invariant so support staff can issue post-hoc adjustments.\\\",\\\"parameters\\\":[{\\\"id\\\":\\\"03e23e7c\\\",\\\"name\\\":\\\"newSubtotal\\\",\\\"type\\\":\\\"number\\\",\\\"required\\\":true,\\\"description\\\":\\\"New cart subtotal in cents (may be negative for credits).\\\"}],\\\"requiredStates\\\":[],\\\"rules\\\":[{\\\"id\\\":\\\"719cca37\\\",\\\"category\\\":\\\"permissions\\\",\\\"condition\\\":{\\\"left\\\":\\\"admin.signedIn\\\",\\\"operator\\\":\\\"is_false\\\"},\\\"effect\\\":{\\\"type\\\":\\\"block_action\\\",\\\"reason\\\":\\\"Admin sign-in required.\\\",\\\"id\\\":\\\"a135b33b\\\",\\\"description\\\":\\\"Effect block_action from a permissions rule on action Override subtotal (admin).\\\"},\\\"description\\\":\\\"Admin-only.\\\"},{\\\"id\\\":\\\"aa323d6c\\\",\\\"category\\\":\\\"audit\\\",\\\"condition\\\":{\\\"left\\\":\\\"cart.subtotal\\\",\\\"operator\\\":\\\"greater_than\\\",\\\"right\\\":1000000},\\\"effect\\\":{\\\"type\\\":\\\"block_action\\\",\\\"reason\\\":\\\"Subtotal beyond audit ceiling.\\\",\\\"id\\\":\\\"cf727dfb\\\",\\\"description\\\":\\\"Effect block_action from a audit rule on action Override subtotal (admin).\\\"},\\\"description\\\":\\\"Sanity ceiling. Even admins can't set subtotal beyond reason.\\\"},{\\\"id\\\":\\\"07b4024f\\\",\\\"category\\\":\\\"validation\\\",\\\"condition\\\":{\\\"left\\\":\\\"cart.subtotal\\\",\\\"operator\\\":\\\"lower_than\\\",\\\"right\\\":-100000},\\\"effect\\\":{\\\"type\\\":\\\"block_action\\\",\\\"reason\\\":\\\"Subtotal below the audit floor.\\\",\\\"id\\\":\\\"33e0fa53\\\",\\\"description\\\":\\\"Effect block_action from a validation rule on action Override subtotal (admin).\\\"},\\\"description\\\":\\\"Sanity floor: refuse adjustments below the audit floor (-100k cents = -$1k).\\\"}],\\\"invariants\\\":[],\\\"effects\\\":[{\\\"type\\\":\\\"set_state\\\",\\\"path\\\":\\\"cart.subtotal\\\",\\\"value\\\":-100,\\\"id\\\":\\\"81829fc0\\\",\\\"description\\\":\\\"Effect set_state on action Override subtotal (admin).\\\"},{\\\"type\\\":\\\"emit_event\\\",\\\"event\\\":\\\"audit.subtotal.override\\\",\\\"id\\\":\\\"76908bf8\\\",\\\"description\\\":\\\"Effect emit_event on action Override subtotal (admin).\\\"}],\\\"emittedEvents\\\":[\\\"audit.subtotal.override\\\"],\\\"transitions\\\":[],\\\"scenarios\\\":[{\\\"id\\\":\\\"8d0a4317\\\",\\\"name\\\":\\\"bypassInvariants: admin sets negative subtotal\\\",\\\"description\\\":\\\"Subtotal goes to -100. The feature invariant \\\\\\\"Cart subtotal non-negative\\\\\\\" would normally block this; the action's bypassInvariants list lets it through.\\\",\\\"stateOverrides\\\":[{\\\"path\\\":\\\"user.authenticated\\\",\\\"value\\\":true},{\\\"path\\\":\\\"user.emailVerified\\\",\\\"value\\\":true},{\\\"path\\\":\\\"admin.signedIn\\\",\\\"value\\\":true},{\\\"path\\\":\\\"cart.subtotal\\\",\\\"value\\\":4498}],\\\"parameterOverrides\\\":[{\\\"parameterName\\\":\\\"newSubtotal\\\",\\\"value\\\":-100}],\\\"expectedStatus\\\":\\\"success\\\",\\\"expectedAssertions\\\":[{\\\"path\\\":\\\"cart.subtotal\\\",\\\"operator\\\":\\\"equals\\\",\\\"value\\\":-100,\\\"description\\\":\\\"Asserts cart.subtotal equals -100.\\\"}]}],\\\"bypassInvariants\\\":true}],\\\"rules\\\":[{\\\"id\\\":\\\"512109db\\\",\\\"category\\\":\\\"permissions\\\",\\\"condition\\\":{\\\"kind\\\":\\\"any\\\",\\\"conditions\\\":[{\\\"left\\\":\\\"user.authenticated\\\",\\\"operator\\\":\\\"is_false\\\"},{\\\"left\\\":\\\"user.emailVerified\\\",\\\"operator\\\":\\\"is_false\\\"}]},\\\"effect\\\":{\\\"type\\\":\\\"block_action\\\",\\\"reason\\\":\\\"Sign in with a verified email to check out.\\\",\\\"id\\\":\\\"1a807122\\\",\\\"description\\\":\\\"Effect block_action from a surface-level permissions rule on Checkout.\\\"},\\\"description\\\":\\\"Cross-cutting: sign-in required for the whole checkout.\\\"}],\\\"invariants\\\":[{\\\"id\\\":\\\"50f2269a\\\",\\\"name\\\":\\\"Order amount non-negative\\\",\\\"condition\\\":{\\\"left\\\":\\\"order.amount\\\",\\\"operator\\\":\\\"greater_than\\\",\\\"right\\\":-1},\\\"message\\\":\\\"Order amount went negative.\\\",\\\"description\\\":\\\"Surface invariant on Checkout: Order amount non-negative.\\\"}],\\\"transitions\\\":[{\\\"id\\\":\\\"695c325f\\\",\\\"target\\\":\\\"864ef35d\\\",\\\"label\\\":\\\"Manage addresses\\\",\\\"description\\\":\\\"Side trip to add or pick an address.\\\"}]}],\\\"personas\\\":[{\\\"id\\\":\\\"a6bdf1b5\\\",\\\"name\\\":\\\"Guest with full cart\\\",\\\"description\\\":\\\"Two items, no coupon, not signed in.\\\",\\\"stateOverrides\\\":[{\\\"path\\\":\\\"cart.lineItems\\\",\\\"value\\\":[{\\\"productId\\\":\\\"wireless-headphones\\\",\\\"qty\\\":1,\\\"amount\\\":2999},{\\\"productId\\\":\\\"phone-case\\\",\\\"qty\\\":1,\\\"amount\\\":1499}]},{\\\"path\\\":\\\"cart.subtotal\\\",\\\"value\\\":4498}],\\\"parameterOverrides\\\":[]},{\\\"id\\\":\\\"137e4026\\\",\\\"name\\\":\\\"Verified buyer at checkout\\\",\\\"description\\\":\\\"Signed in, email verified, address on file.\\\",\\\"stateOverrides\\\":[{\\\"path\\\":\\\"user.authenticated\\\",\\\"value\\\":true},{\\\"path\\\":\\\"user.emailVerified\\\",\\\"value\\\":true},{\\\"path\\\":\\\"addresses.count\\\",\\\"value\\\":1},{\\\"path\\\":\\\"shipping.addressConfirmed\\\",\\\"value\\\":true}],\\\"parameterOverrides\\\":[]},{\\\"id\\\":\\\"a3df9644\\\",\\\"name\\\":\\\"Store admin\\\",\\\"description\\\":\\\"Privileged operator who can manually adjust subtotals.\\\",\\\"stateOverrides\\\":[{\\\"path\\\":\\\"admin.signedIn\\\",\\\"value\\\":true}],\\\"parameterOverrides\\\":[]}],\\\"resources\\\":[{\\\"id\\\":\\\"5411c8d7\\\",\\\"name\\\":\\\"Cart store\\\",\\\"description\\\":\\\"Per-device cart state (anonymous + signed-in).\\\",\\\"kind\\\":\\\"browser_storage\\\",\\\"provider\\\":\\\"localStorage\\\",\\\"scope\\\":\\\"device\\\",\\\"sensitivity\\\":\\\"low\\\",\\\"containsPii\\\":false,\\\"complianceTags\\\":[],\\\"accessMode\\\":\\\"read_write\\\"},{\\\"id\\\":\\\"6262d5ec\\\",\\\"name\\\":\\\"Orders database\\\",\\\"description\\\":\\\"Persisted orders. PII (shipping address, payment method).\\\",\\\"kind\\\":\\\"database\\\",\\\"provider\\\":\\\"PostgreSQL\\\",\\\"scope\\\":\\\"shared\\\",\\\"sensitivity\\\":\\\"high\\\",\\\"containsPii\\\":true,\\\"complianceTags\\\":[],\\\"accessMode\\\":\\\"read_write\\\"}],\\\"entities\\\":[{\\\"id\\\":\\\"8786fba9\\\",\\\"namespace\\\":\\\"cart\\\",\\\"description\\\":\\\"Shopping cart state. Stored on-device.\\\",\\\"fields\\\":[{\\\"id\\\":\\\"3901d6e8\\\",\\\"name\\\":\\\"lineItems\\\",\\\"type\\\":\\\"array\\\",\\\"path\\\":\\\"cart.lineItems\\\",\\\"description\\\":\\\"Array field lineItems on entity cart.\\\"},{\\\"id\\\":\\\"c3f23562\\\",\\\"name\\\":\\\"subtotal\\\",\\\"type\\\":\\\"number\\\",\\\"path\\\":\\\"cart.subtotal\\\",\\\"description\\\":\\\"Number field subtotal on entity cart.\\\"}],\\\"resourceId\\\":\\\"5411c8d7\\\"},{\\\"id\\\":\\\"a2da9cd2\\\",\\\"namespace\\\":\\\"order\\\",\\\"description\\\":\\\"Order summary.\\\",\\\"fields\\\":[{\\\"id\\\":\\\"e0b1c395\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"number\\\",\\\"path\\\":\\\"order.amount\\\",\\\"description\\\":\\\"Number field amount on entity order.\\\"}],\\\"resourceId\\\":\\\"6262d5ec\\\"}],\\\"events\\\":[{\\\"id\\\":\\\"7256bcf8\\\",\\\"name\\\":\\\"cart.item.added\\\",\\\"description\\\":\\\"Item added to cart.\\\",\\\"payloadSchema\\\":[{\\\"name\\\":\\\"productId\\\",\\\"type\\\":\\\"string\\\",\\\"required\\\":true,\\\"description\\\":\\\"String payload field productId on event cart.item.added.\\\"}]},{\\\"id\\\":\\\"138c817e\\\",\\\"name\\\":\\\"cart.item.removed\\\",\\\"description\\\":\\\"Item removed from cart.\\\",\\\"payloadSchema\\\":[{\\\"name\\\":\\\"lineIndex\\\",\\\"type\\\":\\\"number\\\",\\\"required\\\":true,\\\"description\\\":\\\"Number payload field lineIndex on event cart.item.removed.\\\"}]},{\\\"id\\\":\\\"753192d6\\\",\\\"name\\\":\\\"cart.quantity.updated\\\",\\\"description\\\":\\\"Cart line quantity changed.\\\",\\\"payloadSchema\\\":[{\\\"name\\\":\\\"lineIndex\\\",\\\"type\\\":\\\"number\\\",\\\"required\\\":true,\\\"description\\\":\\\"Number payload field lineIndex on event cart.quantity.updated.\\\"},{\\\"name\\\":\\\"quantity\\\",\\\"type\\\":\\\"number\\\",\\\"required\\\":true,\\\"description\\\":\\\"Number payload field quantity on event cart.quantity.updated.\\\"}]},{\\\"id\\\":\\\"ca058af6\\\",\\\"name\\\":\\\"cart.subtotal.recomputed\\\",\\\"description\\\":\\\"Cart subtotal recomputed from line items via sum_pluck.\\\"},{\\\"id\\\":\\\"98f40a67\\\",\\\"name\\\":\\\"cart.coupon.applied\\\",\\\"description\\\":\\\"Coupon redeemed.\\\",\\\"payloadSchema\\\":[{\\\"name\\\":\\\"code\\\",\\\"type\\\":\\\"string\\\",\\\"required\\\":true,\\\"description\\\":\\\"String payload field code on event cart.coupon.applied.\\\"}]},{\\\"id\\\":\\\"500fea79\\\",\\\"name\\\":\\\"address.created\\\",\\\"description\\\":\\\"Shipping address saved.\\\",\\\"payloadSchema\\\":[{\\\"name\\\":\\\"addressIndex\\\",\\\"type\\\":\\\"number\\\",\\\"required\\\":true,\\\"description\\\":\\\"Number payload field addressIndex on event address.created.\\\"}]},{\\\"id\\\":\\\"2fef55d9\\\",\\\"name\\\":\\\"checkout.started\\\",\\\"description\\\":\\\"Buyer entered the checkout flow.\\\"},{\\\"id\\\":\\\"dcc9b300\\\",\\\"name\\\":\\\"checkout.address.confirmed\\\",\\\"description\\\":\\\"Shipping address confirmed.\\\"},{\\\"id\\\":\\\"ed856699\\\",\\\"name\\\":\\\"checkout.payment.selected\\\",\\\"description\\\":\\\"Payment method selected.\\\"},{\\\"id\\\":\\\"94ed41de\\\",\\\"name\\\":\\\"order.placed\\\",\\\"description\\\":\\\"Order successfully placed.\\\",\\\"payloadSchema\\\":[{\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"number\\\",\\\"required\\\":true,\\\"description\\\":\\\"Number payload field amount on event order.placed.\\\"}]},{\\\"id\\\":\\\"eb50d2ea\\\",\\\"name\\\":\\\"audit.subtotal.override\\\",\\\"description\\\":\\\"Admin overrode the cart subtotal; bypassed the subtotal invariant.\\\"},{\\\"id\\\":\\\"7653d828\\\",\\\"name\\\":\\\"ui.checkout.opened\\\",\\\"description\\\":\\\"Buyer navigated to the Checkout surface.\\\"},{\\\"id\\\":\\\"706dad5b\\\",\\\"name\\\":\\\"ui.addresses.opened\\\",\\\"description\\\":\\\"Buyer navigated to the Address book surface.\\\"}],\\\"createdAt\\\":\\\"2026-05-18T23:53:41.168Z\\\",\\\"updatedAt\\\":\\\"2026-05-19T00:18:56.499Z\\\",\\\"featureInvariants\\\":[{\\\"id\\\":\\\"1e29895a\\\",\\\"name\\\":\\\"Cart subtotal non-negative\\\",\\\"condition\\\":{\\\"left\\\":\\\"cart.subtotal\\\",\\\"operator\\\":\\\"greater_than\\\",\\\"right\\\":-1},\\\"message\\\":\\\"Cart subtotal went negative across surfaces.\\\"},{\\\"id\\\":\\\"8b1ce764\\\",\\\"name\\\":\\\"Order amount non-negative\\\",\\\"condition\\\":{\\\"left\\\":\\\"order.amount\\\",\\\"operator\\\":\\\"greater_than\\\",\\\"right\\\":-1},\\\"message\\\":\\\"Order amount went negative.\\\"},{\\\"id\\\":\\\"b44e6a4e\\\",\\\"name\\\":\\\"Address count never exceeds cap\\\",\\\"condition\\\":{\\\"left\\\":\\\"addresses.count\\\",\\\"operator\\\":\\\"lower_than\\\",\\\"right\\\":6},\\\"message\\\":\\\"Address cap violated.\\\"}],\\\"expectedActions\\\":[\\\"Update quantity\\\",\\\"Remove item\\\",\\\"Apply coupon\\\",\\\"Recalculate subtotal\\\",\\\"Proceed to checkout\\\",\\\"Add shipping address\\\",\\\"Continue to checkout\\\",\\\"Confirm shipping address\\\",\\\"Select payment method\\\",\\\"Place order\\\",\\\"Override subtotal (admin)\\\"],\\\"nonGoals\\\":[\\\"Tax calculation by region / VAT\\\",\\\"Multi-currency pricing\\\",\\\"Stored / saved payment methods\\\",\\\"Gift cards, store credit, loyalty redemption\\\",\\\"Real-time fraud-scoring integration (only fraud.flagged is modelled)\\\",\\\"Carrier rate shopping and dynamic shipping options\\\"]}\");\nvar cart_checkout_feature_default = {\n\tformat: format$3,\n\tversion: 1,\n\tfeature: feature$2\n};\n//#endregion\n//#region samples/eshop/catalog-reviews.feature.json\nvar catalog_reviews_feature_exports = /* @__PURE__ */ __exportAll({\n\tdefault: () => catalog_reviews_feature_default,\n\tfeature: () => feature$1,\n\tformat: () => format$2,\n\tversion: () => 1\n});\nvar format$2 = \"unspaghettit\";\nvar feature$1 = /* @__PURE__ */ JSON.parse(\"{\\\"id\\\":\\\"6abcf051\\\",\\\"name\\\":\\\"Catalog & reviews\\\",\\\"description\\\":\\\"Search the catalog, open a product, post and filter reviews. Blocks profanity and link spam, gates age-restricted products to 18+ buyers, and assigns a review badge from the rating.\\\",\\\"surfaces\\\":[{\\\"id\\\":\\\"0f9668ac\\\",\\\"name\\\":\\\"Catalog\\\",\\\"type\\\":\\\"screen\\\",\\\"description\\\":\\\"Browse and search. Stock, prices, age flags surface here.\\\",\\\"stateDefinitions\\\":[{\\\"id\\\":\\\"cf528800\\\",\\\"path\\\":\\\"user.authenticated\\\",\\\"type\\\":\\\"boolean\\\",\\\"defaultValue\\\":false,\\\"description\\\":\\\"Whether the visitor is signed in (mirrored from Account feature).\\\",\\\"sharedWith\\\":[\\\"584d0e24\\\",\\\"ed79f2cb\\\"]},{\\\"id\\\":\\\"6ae3339f\\\",\\\"path\\\":\\\"user.age\\\",\\\"type\\\":\\\"number\\\",\\\"defaultValue\\\":30,\\\"description\\\":\\\"Visitor age. Drives the age-gate on restricted products.\\\",\\\"sharedWith\\\":[\\\"584d0e24\\\"]},{\\\"id\\\":\\\"5d4c1e4b\\\",\\\"path\\\":\\\"search.query\\\",\\\"type\\\":\\\"string\\\",\\\"defaultValue\\\":\\\"\\\",\\\"description\\\":\\\"Most recent search query.\\\"},{\\\"id\\\":\\\"658868bd\\\",\\\"path\\\":\\\"search.resultCount\\\",\\\"type\\\":\\\"number\\\",\\\"defaultValue\\\":0,\\\"description\\\":\\\"Number of results returned by the most recent search.\\\"},{\\\"id\\\":\\\"6e42b820\\\",\\\"path\\\":\\\"product.viewing\\\",\\\"type\\\":\\\"string\\\",\\\"defaultValue\\\":\\\"\\\",\\\"description\\\":\\\"ID of the currently focused product. Bound across surfaces.\\\",\\\"sharedWith\\\":[\\\"584d0e24\\\",\\\"ed79f2cb\\\"]},{\\\"id\\\":\\\"e81afb4e\\\",\\\"path\\\":\\\"product.stock\\\",\\\"type\\\":\\\"number\\\",\\\"defaultValue\\\":12,\\\"description\\\":\\\"Units in stock for the focused product.\\\"}],\\\"actions\\\":[{\\\"id\\\":\\\"b8888760\\\",\\\"name\\\":\\\"Search products\\\",\\\"intent\\\":\\\"Run a catalog search and store the query + result count.\\\",\\\"parameters\\\":[{\\\"id\\\":\\\"fd95766a\\\",\\\"name\\\":\\\"query\\\",\\\"type\\\":\\\"string\\\",\\\"required\\\":true,\\\"description\\\":\\\"Search query text.\\\",\\\"bindToStatePath\\\":\\\"search.query\\\"}],\\\"requiredStates\\\":[],\\\"rules\\\":[{\\\"id\\\":\\\"1fee0314\\\",\\\"category\\\":\\\"validation\\\",\\\"condition\\\":{\\\"left\\\":\\\"search.query\\\",\\\"operator\\\":\\\"equals\\\",\\\"right\\\":\\\"\\\"},\\\"effect\\\":{\\\"type\\\":\\\"block_action\\\",\\\"reason\\\":\\\"Enter at least one character to search.\\\",\\\"id\\\":\\\"0f5c1a81\\\",\\\"description\\\":\\\"Effect block_action from a validation rule on action Search products.\\\"},\\\"description\\\":\\\"Reject empty searches.\\\"}],\\\"invariants\\\":[],\\\"effects\\\":[{\\\"type\\\":\\\"emit_event\\\",\\\"event\\\":\\\"catalog.search.executed\\\",\\\"id\\\":\\\"4fc1435e\\\",\\\"description\\\":\\\"Effect emit_event on action Search products.\\\"}],\\\"emittedEvents\\\":[\\\"catalog.search.executed\\\"],\\\"transitions\\\":[],\\\"scenarios\\\":[{\\\"id\\\":\\\"9413f83b\\\",\\\"name\\\":\\\"Happy path: search runs\\\",\\\"stateOverrides\\\":[],\\\"parameterOverrides\\\":[{\\\"parameterName\\\":\\\"query\\\",\\\"value\\\":\\\"wireless headphones\\\"}],\\\"expectedStatus\\\":\\\"success\\\",\\\"expectedAssertions\\\":[{\\\"path\\\":\\\"search.query\\\",\\\"operator\\\":\\\"equals\\\",\\\"value\\\":\\\"wireless headphones\\\",\\\"description\\\":\\\"Asserts search.query equals 'wireless headphones'.\\\"}],\\\"description\\\":\\\"Scenario Happy path: search runs on action Search products.\\\"},{\\\"id\\\":\\\"01e19621\\\",\\\"name\\\":\\\"Blocked: empty query\\\",\\\"stateOverrides\\\":[],\\\"parameterOverrides\\\":[{\\\"parameterName\\\":\\\"query\\\",\\\"value\\\":\\\"\\\"}],\\\"expectedStatus\\\":\\\"blocked\\\",\\\"description\\\":\\\"Scenario Blocked: empty query on action Search products.\\\"}]},{\\\"id\\\":\\\"8cba27eb\\\",\\\"name\\\":\\\"View product\\\",\\\"intent\\\":\\\"Open the product detail page for a focused product.\\\",\\\"parameters\\\":[{\\\"id\\\":\\\"862fcdb4\\\",\\\"name\\\":\\\"productId\\\",\\\"type\\\":\\\"string\\\",\\\"required\\\":true,\\\"description\\\":\\\"Identifier of the product to focus.\\\",\\\"bindToStatePath\\\":\\\"product.viewing\\\"}],\\\"requiredStates\\\":[],\\\"rules\\\":[{\\\"id\\\":\\\"6fb8638f\\\",\\\"category\\\":\\\"validation\\\",\\\"condition\\\":{\\\"left\\\":\\\"product.viewing\\\",\\\"operator\\\":\\\"equals\\\",\\\"right\\\":\\\"\\\"},\\\"effect\\\":{\\\"type\\\":\\\"block_action\\\",\\\"reason\\\":\\\"Pick a product to view.\\\",\\\"id\\\":\\\"d989cd88\\\",\\\"description\\\":\\\"Effect block_action from a validation rule on action View product.\\\"},\\\"description\\\":\\\"Validation rule on action View product.\\\"}],\\\"invariants\\\":[],\\\"effects\\\":[{\\\"type\\\":\\\"emit_event\\\",\\\"event\\\":\\\"catalog.product.viewed\\\",\\\"id\\\":\\\"ffcac9aa\\\",\\\"description\\\":\\\"Effect emit_event on action View product.\\\"},{\\\"type\\\":\\\"transition_surface\\\",\\\"target\\\":\\\"584d0e24\\\",\\\"id\\\":\\\"a544c757\\\",\\\"description\\\":\\\"Effect transition_surface on action View product.\\\"}],\\\"emittedEvents\\\":[\\\"ui.product.opened\\\",\\\"catalog.product.viewed\\\"],\\\"transitions\\\":[],\\\"scenarios\\\":[{\\\"id\\\":\\\"8ebaba9f\\\",\\\"name\\\":\\\"Happy path: open product\\\",\\\"stateOverrides\\\":[],\\\"parameterOverrides\\\":[{\\\"parameterName\\\":\\\"productId\\\",\\\"value\\\":\\\"wireless-headphones\\\"}],\\\"expectedStatus\\\":\\\"success\\\",\\\"expectedTransition\\\":\\\"584d0e24\\\",\\\"description\\\":\\\"Scenario Happy path: open product on action View product.\\\"}]}],\\\"rules\\\":[{\\\"id\\\":\\\"34197871\\\",\\\"category\\\":\\\"ux_feedback\\\",\\\"condition\\\":{\\\"left\\\":\\\"product.stock\\\",\\\"operator\\\":\\\"lower_than\\\",\\\"right\\\":0},\\\"effect\\\":{\\\"type\\\":\\\"block_action\\\",\\\"reason\\\":\\\"Stock data is missing.\\\",\\\"id\\\":\\\"225068f9\\\",\\\"description\\\":\\\"Effect block_action from a surface-level ux_feedback rule on Catalog.\\\"},\\\"description\\\":\\\"Light gate so the panel shows visible gating.\\\"}],\\\"invariants\\\":[{\\\"id\\\":\\\"8e9d4754\\\",\\\"name\\\":\\\"Stock counter non-negative\\\",\\\"condition\\\":{\\\"left\\\":\\\"product.stock\\\",\\\"operator\\\":\\\"greater_than\\\",\\\"right\\\":-1},\\\"message\\\":\\\"Stock counter went negative; inventory feed is corrupted.\\\",\\\"description\\\":\\\"Surface invariant on Catalog: Stock counter non-negative.\\\"}],\\\"transitions\\\":[{\\\"id\\\":\\\"dffa9ad3\\\",\\\"target\\\":\\\"584d0e24\\\",\\\"label\\\":\\\"Open product\\\",\\\"description\\\":\\\"Tap a search result to focus a product.\\\"}]},{\\\"id\\\":\\\"584d0e24\\\",\\\"name\\\":\\\"Product details\\\",\\\"type\\\":\\\"screen\\\",\\\"description\\\":\\\"Single product. Reviews, recommendations, submit-review form.\\\",\\\"stateDefinitions\\\":[{\\\"id\\\":\\\"93737004\\\",\\\"path\\\":\\\"product.ageRestricted\\\",\\\"type\\\":\\\"boolean\\\",\\\"defaultValue\\\":false,\\\"description\\\":\\\"Whether the focused product requires an 18+ buyer.\\\"},{\\\"id\\\":\\\"0ebce981\\\",\\\"path\\\":\\\"product.reviews\\\",\\\"type\\\":\\\"array\\\",\\\"defaultValue\\\":[],\\\"description\\\":\\\"Reviews array (each: { rating, verified, helpful }). Used by sum_pluck and count_where Expressions.\\\",\\\"sharedWith\\\":[\\\"ed79f2cb\\\"]},{\\\"id\\\":\\\"17b904fa\\\",\\\"path\\\":\\\"review.draft.rating\\\",\\\"type\\\":\\\"number\\\",\\\"defaultValue\\\":5,\\\"description\\\":\\\"Rating from the in-flight review draft (1-5).\\\"},{\\\"id\\\":\\\"581ef07d\\\",\\\"path\\\":\\\"review.draft.text\\\",\\\"type\\\":\\\"string\\\",\\\"defaultValue\\\":\\\"\\\",\\\"description\\\":\\\"Free-text body of the in-flight review draft.\\\"},{\\\"id\\\":\\\"29340300\\\",\\\"path\\\":\\\"review.draft.verifiedPurchase\\\",\\\"type\\\":\\\"boolean\\\",\\\"defaultValue\\\":false,\\\"description\\\":\\\"Whether the reviewer purchased the product.\\\"},{\\\"id\\\":\\\"54579da7\\\",\\\"path\\\":\\\"review.draft.profanityFlagged\\\",\\\"type\\\":\\\"boolean\\\",\\\"defaultValue\\\":false,\\\"description\\\":\\\"Whether the moderation pass flagged profanity.\\\"},{\\\"id\\\":\\\"3e6fbfe5\\\",\\\"path\\\":\\\"review.lastBadge\\\",\\\"type\\\":\\\"string\\\",\\\"defaultValue\\\":\\\"\\\",\\\"description\\\":\\\"Badge label written by the switch Expression after a submit (\\\\\\\"Positive\\\\\\\" | \\\\\\\"Mixed\\\\\\\" | \\\\\\\"Critical\\\\\\\").\\\"}],\\\"actions\\\":[{\\\"id\\\":\\\"7b685cfb\\\",\\\"name\\\":\\\"View product\\\",\\\"intent\\\":\\\"Refocus the product page on a different product.\\\",\\\"parameters\\\":[{\\\"id\\\":\\\"82e680c1\\\",\\\"name\\\":\\\"productId\\\",\\\"type\\\":\\\"string\\\",\\\"required\\\":true,\\\"bindToStatePath\\\":\\\"product.viewing\\\",\\\"description\\\":\\\"String parameter productId for action View product.\\\"}],\\\"requiredStates\\\":[],\\\"rules\\\":[{\\\"id\\\":\\\"c5413b3c\\\",\\\"category\\\":\\\"validation\\\",\\\"condition\\\":{\\\"left\\\":\\\"product.viewing\\\",\\\"operator\\\":\\\"equals\\\",\\\"right\\\":\\\"\\\"},\\\"effect\\\":{\\\"type\\\":\\\"block_action\\\",\\\"reason\\\":\\\"Pick a product first.\\\",\\\"id\\\":\\\"0394e153\\\",\\\"description\\\":\\\"Effect block_action from a validation rule on action View product.\\\"},\\\"description\\\":\\\"Validation rule on action View product.\\\"}],\\\"invariants\\\":[],\\\"effects\\\":[{\\\"type\\\":\\\"emit_event\\\",\\\"event\\\":\\\"catalog.product.viewed\\\",\\\"id\\\":\\\"c455d58f\\\",\\\"description\\\":\\\"Effect emit_event on action View product.\\\"}],\\\"emittedEvents\\\":[\\\"catalog.product.viewed\\\"],\\\"transitions\\\":[],\\\"scenarios\\\":[{\\\"id\\\":\\\"202e7dca\\\",\\\"name\\\":\\\"Happy path: refocus product\\\",\\\"stateOverrides\\\":[],\\\"parameterOverrides\\\":[{\\\"parameterName\\\":\\\"productId\\\",\\\"value\\\":\\\"kindle-paperwhite\\\"}],\\\"expectedStatus\\\":\\\"success\\\",\\\"description\\\":\\\"Scenario Happy path: refocus product on action View product.\\\"}]},{\\\"id\\\":\\\"c2f761d2\\\",\\\"name\\\":\\\"Submit review\\\",\\\"intent\\\":\\\"Submit a new product review; sets review.lastBadge via a switch Expression based on rating.\\\",\\\"parameters\\\":[{\\\"id\\\":\\\"19faee1f\\\",\\\"name\\\":\\\"rating\\\",\\\"type\\\":\\\"number\\\",\\\"required\\\":true,\\\"bindToStatePath\\\":\\\"review.draft.rating\\\",\\\"description\\\":\\\"Number parameter rating for action Submit review.\\\"},{\\\"id\\\":\\\"2b419c21\\\",\\\"name\\\":\\\"reviewText\\\",\\\"type\\\":\\\"string\\\",\\\"required\\\":true,\\\"bindToStatePath\\\":\\\"review.draft.text\\\",\\\"description\\\":\\\"String parameter reviewText for action Submit review.\\\"}],\\\"requiredStates\\\":[],\\\"rules\\\":[{\\\"id\\\":\\\"88b60113\\\",\\\"category\\\":\\\"permissions\\\",\\\"condition\\\":{\\\"left\\\":\\\"user.authenticated\\\",\\\"operator\\\":\\\"is_false\\\"},\\\"effect\\\":{\\\"type\\\":\\\"block_action\\\",\\\"reason\\\":\\\"Sign in to submit a review.\\\",\\\"id\\\":\\\"dd348b1b\\\",\\\"description\\\":\\\"Effect block_action from a permissions rule on action Submit review.\\\"},\\\"description\\\":\\\"Permissions rule on action Submit review.\\\"},{\\\"id\\\":\\\"2de96ce6\\\",\\\"category\\\":\\\"compliance\\\",\\\"condition\\\":{\\\"kind\\\":\\\"any\\\",\\\"conditions\\\":[{\\\"left\\\":\\\"review.draft.profanityFlagged\\\",\\\"operator\\\":\\\"is_true\\\"},{\\\"left\\\":\\\"review.draft.text\\\",\\\"operator\\\":\\\"contains\\\",\\\"right\\\":\\\"http\\\"}]},\\\"effect\\\":{\\\"type\\\":\\\"block_action\\\",\\\"reason\\\":\\\"Review violates the content policy (profanity or external links).\\\",\\\"id\\\":\\\"52c90123\\\",\\\"description\\\":\\\"Effect block_action from a compliance rule on action Submit review.\\\"},\\\"description\\\":\\\"Composite OR: profanity OR external link.\\\"},{\\\"id\\\":\\\"d86b6a19\\\",\\\"category\\\":\\\"validation\\\",\\\"condition\\\":{\\\"left\\\":\\\"review.draft.rating\\\",\\\"operator\\\":\\\"lower_than\\\",\\\"right\\\":1},\\\"effect\\\":{\\\"type\\\":\\\"block_action\\\",\\\"reason\\\":\\\"Rating must be at least 1.\\\",\\\"id\\\":\\\"d1798897\\\",\\\"description\\\":\\\"Effect block_action from a validation rule on action Submit review.\\\"},\\\"description\\\":\\\"Validation rule on action Submit review.\\\"}],\\\"invariants\\\":[],\\\"effects\\\":[{\\\"type\\\":\\\"set_state\\\",\\\"path\\\":\\\"review.lastBadge\\\",\\\"value\\\":{\\\"kind\\\":\\\"switch\\\",\\\"cases\\\":[{\\\"when\\\":{\\\"left\\\":\\\"review.draft.rating\\\",\\\"operator\\\":\\\"greater_than\\\",\\\"right\\\":3},\\\"then\\\":{\\\"kind\\\":\\\"literal\\\",\\\"value\\\":\\\"Positive\\\"}},{\\\"when\\\":{\\\"left\\\":\\\"review.draft.rating\\\",\\\"operator\\\":\\\"greater_than\\\",\\\"right\\\":1},\\\"then\\\":{\\\"kind\\\":\\\"literal\\\",\\\"value\\\":\\\"Mixed\\\"}}],\\\"default\\\":{\\\"kind\\\":\\\"literal\\\",\\\"value\\\":\\\"Critical\\\"}},\\\"id\\\":\\\"e61a7485\\\",\\\"description\\\":\\\"Effect set_state on action Submit review.\\\"},{\\\"type\\\":\\\"emit_event\\\",\\\"event\\\":\\\"review.submitted\\\",\\\"id\\\":\\\"546c5e8a\\\",\\\"description\\\":\\\"Effect emit_event on action Submit review.\\\"},{\\\"type\\\":\\\"show_message\\\",\\\"message\\\":\\\"Thanks for your review!\\\",\\\"id\\\":\\\"2ac282ef\\\",\\\"description\\\":\\\"Effect show_message on action Submit review.\\\"}],\\\"emittedEvents\\\":[\\\"review.submitted\\\"],\\\"transitions\\\":[],\\\"scenarios\\\":[{\\\"id\\\":\\\"7105dc9f\\\",\\\"name\\\":\\\"Happy path: 5-star → Positive badge\\\",\\\"description\\\":\\\"Switch Expression picks the first case (rating > 3).\\\",\\\"stateOverrides\\\":[{\\\"path\\\":\\\"user.authenticated\\\",\\\"value\\\":true},{\\\"path\\\":\\\"review.draft.profanityFlagged\\\",\\\"value\\\":false}],\\\"parameterOverrides\\\":[{\\\"parameterName\\\":\\\"rating\\\",\\\"value\\\":5},{\\\"parameterName\\\":\\\"reviewText\\\",\\\"value\\\":\\\"Loved it.\\\"}],\\\"expectedStatus\\\":\\\"success\\\",\\\"expectedAssertions\\\":[{\\\"path\\\":\\\"review.lastBadge\\\",\\\"operator\\\":\\\"equals\\\",\\\"value\\\":\\\"Positive\\\",\\\"description\\\":\\\"Asserts review.lastBadge equals 'Positive'.\\\"}]},{\\\"id\\\":\\\"649c187b\\\",\\\"name\\\":\\\"Switch: 2-star → Mixed badge\\\",\\\"description\\\":\\\"Switch Expression falls to the second case (rating > 1 but not > 3).\\\",\\\"stateOverrides\\\":[{\\\"path\\\":\\\"user.authenticated\\\",\\\"value\\\":true}],\\\"parameterOverrides\\\":[{\\\"parameterName\\\":\\\"rating\\\",\\\"value\\\":2},{\\\"parameterName\\\":\\\"reviewText\\\",\\\"value\\\":\\\"It was OK.\\\"}],\\\"expectedStatus\\\":\\\"success\\\",\\\"expectedAssertions\\\":[{\\\"path\\\":\\\"review.lastBadge\\\",\\\"operator\\\":\\\"equals\\\",\\\"value\\\":\\\"Mixed\\\",\\\"description\\\":\\\"Asserts review.lastBadge equals 'Mixed'.\\\"}]},{\\\"id\\\":\\\"8840a966\\\",\\\"name\\\":\\\"Switch: 1-star → Critical badge\\\",\\\"description\\\":\\\"Switch Expression falls through to default.\\\",\\\"stateOverrides\\\":[{\\\"path\\\":\\\"user.authenticated\\\",\\\"value\\\":true}],\\\"parameterOverrides\\\":[{\\\"parameterName\\\":\\\"rating\\\",\\\"value\\\":1},{\\\"parameterName\\\":\\\"reviewText\\\",\\\"value\\\":\\\"Not great.\\\"}],\\\"expectedStatus\\\":\\\"success\\\",\\\"expectedAssertions\\\":[{\\\"path\\\":\\\"review.lastBadge\\\",\\\"operator\\\":\\\"equals\\\",\\\"value\\\":\\\"Critical\\\",\\\"description\\\":\\\"Asserts review.lastBadge equals 'Critical'.\\\"}]}]},{\\\"id\\\":\\\"9dc15c7e\\\",\\\"name\\\":\\\"Click recommendation\\\",\\\"intent\\\":\\\"Refocus the page on a recommended product.\\\",\\\"parameters\\\":[{\\\"id\\\":\\\"d184dcd3\\\",\\\"name\\\":\\\"recommendedProductId\\\",\\\"type\\\":\\\"string\\\",\\\"required\\\":true,\\\"bindToStatePath\\\":\\\"product.viewing\\\",\\\"description\\\":\\\"String parameter recommendedProductId for action Click recommendation.\\\"}],\\\"requiredStates\\\":[],\\\"rules\\\":[{\\\"id\\\":\\\"ce82b017\\\",\\\"category\\\":\\\"validation\\\",\\\"condition\\\":{\\\"left\\\":\\\"product.viewing\\\",\\\"operator\\\":\\\"equals\\\",\\\"right\\\":\\\"\\\"},\\\"effect\\\":{\\\"type\\\":\\\"block_action\\\",\\\"reason\\\":\\\"No product to refocus.\\\",\\\"id\\\":\\\"c831dceb\\\",\\\"description\\\":\\\"Effect block_action from a validation rule on action Click recommendation.\\\"},\\\"description\\\":\\\"Validation rule on action Click recommendation.\\\"}],\\\"invariants\\\":[],\\\"effects\\\":[{\\\"type\\\":\\\"emit_event\\\",\\\"event\\\":\\\"recommendation.clicked\\\",\\\"id\\\":\\\"9de80b1d\\\",\\\"description\\\":\\\"Effect emit_event on action Click recommendation.\\\"}],\\\"emittedEvents\\\":[\\\"recommendation.clicked\\\"],\\\"transitions\\\":[],\\\"scenarios\\\":[{\\\"id\\\":\\\"efaf9525\\\",\\\"name\\\":\\\"Happy path: click reco\\\",\\\"stateOverrides\\\":[],\\\"parameterOverrides\\\":[{\\\"parameterName\\\":\\\"recommendedProductId\\\",\\\"value\\\":\\\"phone-case\\\"}],\\\"expectedStatus\\\":\\\"success\\\",\\\"description\\\":\\\"Scenario Happy path: click reco on action Click recommendation.\\\"}]},{\\\"id\\\":\\\"1fecaf55\\\",\\\"name\\\":\\\"Open all reviews\\\",\\\"intent\\\":\\\"Navigate to the dedicated reviews page.\\\",\\\"parameters\\\":[],\\\"requiredStates\\\":[],\\\"rules\\\":[{\\\"id\\\":\\\"3ce0bcab\\\",\\\"category\\\":\\\"validation\\\",\\\"condition\\\":{\\\"left\\\":\\\"product.viewing\\\",\\\"operator\\\":\\\"equals\\\",\\\"right\\\":\\\"\\\"},\\\"effect\\\":{\\\"type\\\":\\\"block_action\\\",\\\"reason\\\":\\\"Focus a product before opening its reviews.\\\",\\\"id\\\":\\\"6a570826\\\",\\\"description\\\":\\\"Effect block_action from a validation rule on action Open all reviews.\\\"},\\\"description\\\":\\\"Validation rule on action Open all reviews.\\\"}],\\\"invariants\\\":[],\\\"effects\\\":[{\\\"type\\\":\\\"emit_event\\\",\\\"event\\\":\\\"ui.allreviews.opened\\\",\\\"id\\\":\\\"a025767b\\\",\\\"description\\\":\\\"Effect emit_event on action Open all reviews.\\\"},{\\\"type\\\":\\\"transition_surface\\\",\\\"target\\\":\\\"ed79f2cb\\\",\\\"id\\\":\\\"7735a99a\\\",\\\"description\\\":\\\"Effect transition_surface on action Open all reviews.\\\"}],\\\"emittedEvents\\\":[\\\"ui.allreviews.opened\\\"],\\\"transitions\\\":[],\\\"scenarios\\\":[{\\\"id\\\":\\\"5db2f15b\\\",\\\"name\\\":\\\"Happy path: open all reviews\\\",\\\"stateOverrides\\\":[{\\\"path\\\":\\\"product.viewing\\\",\\\"value\\\":\\\"wireless-headphones\\\"}],\\\"parameterOverrides\\\":[],\\\"expectedStatus\\\":\\\"success\\\",\\\"expectedTransition\\\":\\\"ed79f2cb\\\",\\\"description\\\":\\\"Scenario Happy path: open all reviews on action Open all reviews.\\\"}]}],\\\"rules\\\":[{\\\"id\\\":\\\"6c457370\\\",\\\"category\\\":\\\"compliance\\\",\\\"condition\\\":{\\\"kind\\\":\\\"all\\\",\\\"conditions\\\":[{\\\"left\\\":\\\"user.age\\\",\\\"operator\\\":\\\"lower_than\\\",\\\"right\\\":18},{\\\"left\\\":\\\"product.ageRestricted\\\",\\\"operator\\\":\\\"is_true\\\"}]},\\\"effect\\\":{\\\"type\\\":\\\"block_action\\\",\\\"reason\\\":\\\"This product is restricted to buyers aged 18 or over.\\\",\\\"id\\\":\\\"87bed071\\\",\\\"description\\\":\\\"Effect block_action from a surface-level compliance rule on Product details.\\\"},\\\"description\\\":\\\"Composite ALL: under-18 buyer AND age-restricted product = block. Demonstrates composite condition that fixes the legacy over-broad gate.\\\"}],\\\"invariants\\\":[{\\\"id\\\":\\\"174c1555\\\",\\\"name\\\":\\\"Review rating range\\\",\\\"condition\\\":{\\\"left\\\":\\\"review.draft.rating\\\",\\\"operator\\\":\\\"lower_than\\\",\\\"right\\\":6},\\\"message\\\":\\\"Review rating must be 1–5.\\\",\\\"description\\\":\\\"Surface invariant on Product details: Review rating range.\\\"}],\\\"transitions\\\":[{\\\"id\\\":\\\"02bf7369\\\",\\\"target\\\":\\\"ed79f2cb\\\",\\\"label\\\":\\\"See all reviews\\\",\\\"description\\\":\\\"From product details to the dedicated reviews list.\\\"},{\\\"id\\\":\\\"dbd4cbfc\\\",\\\"target\\\":\\\"0f9668ac\\\",\\\"label\\\":\\\"Back to catalog\\\",\\\"description\\\":\\\"Header link back to the catalog.\\\"}]},{\\\"id\\\":\\\"ed79f2cb\\\",\\\"name\\\":\\\"All reviews\\\",\\\"type\\\":\\\"screen\\\",\\\"description\\\":\\\"Dedicated reviews list with filter, sort, and helpful counter.\\\",\\\"stateDefinitions\\\":[{\\\"id\\\":\\\"11c1d139\\\",\\\"path\\\":\\\"reviews.filter.minRating\\\",\\\"type\\\":\\\"number\\\",\\\"defaultValue\\\":1,\\\"description\\\":\\\"Minimum rating filter.\\\"},{\\\"id\\\":\\\"2cb0d263\\\",\\\"path\\\":\\\"reviews.filter.verifiedOnly\\\",\\\"type\\\":\\\"boolean\\\",\\\"defaultValue\\\":false,\\\"description\\\":\\\"Whether to only show verified-purchase reviews.\\\"},{\\\"id\\\":\\\"bbacecfd\\\",\\\"path\\\":\\\"reviews.sortBy\\\",\\\"type\\\":\\\"enum\\\",\\\"defaultValue\\\":\\\"helpful\\\",\\\"enumValues\\\":[\\\"helpful\\\",\\\"newest\\\",\\\"highest\\\",\\\"lowest\\\"],\\\"description\\\":\\\"Sort order for the reviews list.\\\"},{\\\"id\\\":\\\"cc811899\\\",\\\"path\\\":\\\"reviews.helpfulCount\\\",\\\"type\\\":\\\"number\\\",\\\"defaultValue\\\":0,\\\"description\\\":\\\"Number of reviews marked helpful so far. Recomputed via count_where Expression.\\\"}],\\\"actions\\\":[{\\\"id\\\":\\\"72990024\\\",\\\"name\\\":\\\"Filter reviews\\\",\\\"intent\\\":\\\"Adjust the reviews list filter.\\\",\\\"parameters\\\":[{\\\"id\\\":\\\"dd48b21c\\\",\\\"name\\\":\\\"minRating\\\",\\\"type\\\":\\\"number\\\",\\\"required\\\":true,\\\"bindToStatePath\\\":\\\"reviews.filter.minRating\\\",\\\"description\\\":\\\"Number parameter minRating for action Filter reviews.\\\"},{\\\"id\\\":\\\"baa4a1c2\\\",\\\"name\\\":\\\"verifiedOnly\\\",\\\"type\\\":\\\"boolean\\\",\\\"required\\\":true,\\\"defaultValue\\\":false,\\\"bindToStatePath\\\":\\\"reviews.filter.verifiedOnly\\\",\\\"description\\\":\\\"Boolean parameter verifiedOnly for action Filter reviews.\\\"}],\\\"requiredStates\\\":[],\\\"rules\\\":[{\\\"id\\\":\\\"1205fc2e\\\",\\\"category\\\":\\\"validation\\\",\\\"condition\\\":{\\\"left\\\":\\\"reviews.filter.minRating\\\",\\\"operator\\\":\\\"greater_than\\\",\\\"right\\\":5},\\\"effect\\\":{\\\"type\\\":\\\"block_action\\\",\\\"reason\\\":\\\"Rating filter must be 1-5.\\\",\\\"id\\\":\\\"0490f009\\\",\\\"description\\\":\\\"Effect block_action from a validation rule on action Filter reviews.\\\"},\\\"description\\\":\\\"Rating filter must be within 1–5.\\\"}],\\\"invariants\\\":[],\\\"effects\\\":[{\\\"type\\\":\\\"emit_event\\\",\\\"event\\\":\\\"reviews.filtered\\\",\\\"id\\\":\\\"ef3132d5\\\",\\\"description\\\":\\\"Effect emit_event on action Filter reviews.\\\"}],\\\"emittedEvents\\\":[\\\"reviews.filtered\\\"],\\\"transitions\\\":[],\\\"scenarios\\\":[{\\\"id\\\":\\\"02569a00\\\",\\\"name\\\":\\\"Filter to verified 5-star\\\",\\\"stateOverrides\\\":[{\\\"path\\\":\\\"product.viewing\\\",\\\"value\\\":\\\"wireless-headphones\\\"}],\\\"parameterOverrides\\\":[{\\\"parameterName\\\":\\\"minRating\\\",\\\"value\\\":5},{\\\"parameterName\\\":\\\"verifiedOnly\\\",\\\"value\\\":true}],\\\"expectedStatus\\\":\\\"success\\\",\\\"expectedAssertions\\\":[{\\\"path\\\":\\\"reviews.filter.minRating\\\",\\\"operator\\\":\\\"equals\\\",\\\"value\\\":5,\\\"description\\\":\\\"Asserts reviews.filter.minRating equals 5.\\\"}],\\\"description\\\":\\\"Scenario Filter to verified 5-star on action Filter reviews.\\\"}]},{\\\"id\\\":\\\"f2542d6b\\\",\\\"name\\\":\\\"Sort reviews\\\",\\\"intent\\\":\\\"Adjust the reviews list sort order.\\\",\\\"parameters\\\":[{\\\"id\\\":\\\"1271ac52\\\",\\\"name\\\":\\\"sortBy\\\",\\\"type\\\":\\\"enum\\\",\\\"required\\\":true,\\\"enumValues\\\":[\\\"helpful\\\",\\\"newest\\\",\\\"highest\\\",\\\"lowest\\\"],\\\"bindToStatePath\\\":\\\"reviews.sortBy\\\",\\\"description\\\":\\\"Enum parameter sortBy for action Sort reviews.\\\"}],\\\"requiredStates\\\":[],\\\"rules\\\":[{\\\"id\\\":\\\"15ef098f\\\",\\\"category\\\":\\\"validation\\\",\\\"condition\\\":{\\\"left\\\":\\\"reviews.sortBy\\\",\\\"operator\\\":\\\"equals\\\",\\\"right\\\":\\\"\\\"},\\\"effect\\\":{\\\"type\\\":\\\"block_action\\\",\\\"reason\\\":\\\"Pick a supported sort order.\\\",\\\"id\\\":\\\"c1520400\\\",\\\"description\\\":\\\"Effect block_action from a validation rule on action Sort reviews.\\\"},\\\"description\\\":\\\"Sort key must be supported.\\\"}],\\\"invariants\\\":[],\\\"effects\\\":[{\\\"type\\\":\\\"emit_event\\\",\\\"event\\\":\\\"reviews.sorted\\\",\\\"id\\\":\\\"6248f179\\\",\\\"description\\\":\\\"Effect emit_event on action Sort reviews.\\\"}],\\\"emittedEvents\\\":[\\\"reviews.sorted\\\"],\\\"transitions\\\":[],\\\"scenarios\\\":[{\\\"id\\\":\\\"5c7d69ac\\\",\\\"name\\\":\\\"Sort by newest\\\",\\\"stateOverrides\\\":[{\\\"path\\\":\\\"product.viewing\\\",\\\"value\\\":\\\"wireless-headphones\\\"}],\\\"parameterOverrides\\\":[{\\\"parameterName\\\":\\\"sortBy\\\",\\\"value\\\":\\\"newest\\\"}],\\\"expectedStatus\\\":\\\"success\\\",\\\"expectedAssertions\\\":[{\\\"path\\\":\\\"reviews.sortBy\\\",\\\"operator\\\":\\\"equals\\\",\\\"value\\\":\\\"newest\\\",\\\"description\\\":\\\"Asserts reviews.sortBy equals 'newest'.\\\"}],\\\"description\\\":\\\"Scenario Sort by newest on action Sort reviews.\\\"}]},{\\\"id\\\":\\\"c201af29\\\",\\\"name\\\":\\\"Mark review helpful\\\",\\\"intent\\\":\\\"Mark a review helpful and recompute the helpful counter via count_where Expression.\\\",\\\"parameters\\\":[{\\\"id\\\":\\\"8e1b084c\\\",\\\"name\\\":\\\"reviewIndex\\\",\\\"type\\\":\\\"number\\\",\\\"required\\\":true,\\\"description\\\":\\\"Position of the review in the array.\\\"}],\\\"requiredStates\\\":[],\\\"rules\\\":[{\\\"id\\\":\\\"4369bdbd\\\",\\\"category\\\":\\\"permissions\\\",\\\"condition\\\":{\\\"left\\\":\\\"user.authenticated\\\",\\\"operator\\\":\\\"is_false\\\"},\\\"effect\\\":{\\\"type\\\":\\\"block_action\\\",\\\"reason\\\":\\\"Sign in to mark reviews helpful.\\\",\\\"id\\\":\\\"5a9027ae\\\",\\\"description\\\":\\\"Effect block_action from a permissions rule on action Mark review helpful.\\\"},\\\"description\\\":\\\"Permissions rule on action Mark review helpful.\\\"},{\\\"id\\\":\\\"21e417e1\\\",\\\"category\\\":\\\"validation\\\",\\\"condition\\\":{\\\"left\\\":\\\"reviews.helpfulCount\\\",\\\"operator\\\":\\\"lower_than\\\",\\\"right\\\":0},\\\"effect\\\":{\\\"type\\\":\\\"block_action\\\",\\\"reason\\\":\\\"Review index out of range.\\\",\\\"id\\\":\\\"a5a76100\\\",\\\"description\\\":\\\"Effect block_action from a validation rule on action Mark review helpful.\\\"},\\\"description\\\":\\\"reviewIndex must point at a real entry.\\\"}],\\\"invariants\\\":[],\\\"effects\\\":[{\\\"type\\\":\\\"set_state\\\",\\\"path\\\":\\\"reviews.helpfulCount\\\",\\\"value\\\":{\\\"kind\\\":\\\"count_where\\\",\\\"operand\\\":{\\\"kind\\\":\\\"state\\\",\\\"path\\\":\\\"product.reviews\\\"},\\\"field\\\":\\\"helpful\\\",\\\"equals\\\":{\\\"kind\\\":\\\"literal\\\",\\\"value\\\":true}},\\\"id\\\":\\\"5d46da1e\\\",\\\"description\\\":\\\"Effect set_state on action Mark review helpful.\\\"},{\\\"type\\\":\\\"emit_event\\\",\\\"event\\\":\\\"review.helpful_clicked\\\",\\\"id\\\":\\\"17132f7d\\\",\\\"description\\\":\\\"Effect emit_event on action Mark review helpful.\\\"}],\\\"emittedEvents\\\":[\\\"review.helpful_clicked\\\"],\\\"transitions\\\":[],\\\"scenarios\\\":[{\\\"id\\\":\\\"f201d9c1\\\",\\\"name\\\":\\\"count_where: recompute helpful counter\\\",\\\"description\\\":\\\"Array has 3 entries with helpful=true. count_where Expression sets the counter to 3.\\\",\\\"stateOverrides\\\":[{\\\"path\\\":\\\"user.authenticated\\\",\\\"value\\\":true},{\\\"path\\\":\\\"product.viewing\\\",\\\"value\\\":\\\"wireless-headphones\\\"},{\\\"path\\\":\\\"product.reviews\\\",\\\"value\\\":[{\\\"rating\\\":5,\\\"verified\\\":true,\\\"helpful\\\":true},{\\\"rating\\\":4,\\\"verified\\\":true,\\\"helpful\\\":false},{\\\"rating\\\":5,\\\"verified\\\":false,\\\"helpful\\\":true},{\\\"rating\\\":3,\\\"verified\\\":true,\\\"helpful\\\":true}]}],\\\"parameterOverrides\\\":[{\\\"parameterName\\\":\\\"reviewIndex\\\",\\\"value\\\":0}],\\\"expectedStatus\\\":\\\"success\\\",\\\"expectedAssertions\\\":[{\\\"path\\\":\\\"reviews.helpfulCount\\\",\\\"operator\\\":\\\"equals\\\",\\\"value\\\":3,\\\"description\\\":\\\"Asserts reviews.helpfulCount equals 3.\\\"}]}]}],\\\"rules\\\":[{\\\"id\\\":\\\"3862c8e6\\\",\\\"category\\\":\\\"permissions\\\",\\\"condition\\\":{\\\"left\\\":\\\"product.viewing\\\",\\\"operator\\\":\\\"equals\\\",\\\"right\\\":\\\"\\\"},\\\"effect\\\":{\\\"type\\\":\\\"block_action\\\",\\\"reason\\\":\\\"Open a product first.\\\",\\\"id\\\":\\\"d8589297\\\",\\\"description\\\":\\\"Effect block_action from a surface-level permissions rule on All reviews.\\\"},\\\"description\\\":\\\"Browsing reviews requires a focused product.\\\"}],\\\"invariants\\\":[{\\\"id\\\":\\\"94f42470\\\",\\\"name\\\":\\\"Helpful counter non-negative\\\",\\\"condition\\\":{\\\"left\\\":\\\"reviews.helpfulCount\\\",\\\"operator\\\":\\\"greater_than\\\",\\\"right\\\":-1},\\\"message\\\":\\\"Helpful counter went negative.\\\",\\\"description\\\":\\\"Surface invariant on All reviews: Helpful counter non-negative.\\\"}],\\\"transitions\\\":[{\\\"id\\\":\\\"806b6d90\\\",\\\"target\\\":\\\"584d0e24\\\",\\\"label\\\":\\\"Back to product\\\",\\\"description\\\":\\\"Return to the product detail page.\\\"}]}],\\\"personas\\\":[{\\\"id\\\":\\\"783f1e9d\\\",\\\"name\\\":\\\"Anonymous browser\\\",\\\"description\\\":\\\"Not signed in. Can browse and search but not review.\\\",\\\"stateOverrides\\\":[{\\\"path\\\":\\\"user.authenticated\\\",\\\"value\\\":false}],\\\"parameterOverrides\\\":[]},{\\\"id\\\":\\\"5d051dee\\\",\\\"name\\\":\\\"Signed-in reviewer\\\",\\\"description\\\":\\\"Authenticated; verified purchase; may submit a review.\\\",\\\"stateOverrides\\\":[{\\\"path\\\":\\\"user.authenticated\\\",\\\"value\\\":true},{\\\"path\\\":\\\"review.draft.verifiedPurchase\\\",\\\"value\\\":true}],\\\"parameterOverrides\\\":[]},{\\\"id\\\":\\\"9623ae70\\\",\\\"name\\\":\\\"Under-18 shopper\\\",\\\"description\\\":\\\"Authenticated minor; age-restricted products are blocked.\\\",\\\"stateOverrides\\\":[{\\\"path\\\":\\\"user.authenticated\\\",\\\"value\\\":true},{\\\"path\\\":\\\"user.age\\\",\\\"value\\\":16}],\\\"parameterOverrides\\\":[]}],\\\"resources\\\":[{\\\"id\\\":\\\"1d5ddcd1\\\",\\\"name\\\":\\\"Catalog database\\\",\\\"description\\\":\\\"Product listings, stock, prices.\\\",\\\"kind\\\":\\\"database\\\",\\\"provider\\\":\\\"PostgreSQL\\\",\\\"scope\\\":\\\"shared\\\",\\\"sensitivity\\\":\\\"low\\\",\\\"containsPii\\\":false,\\\"complianceTags\\\":[],\\\"accessMode\\\":\\\"read_only\\\"},{\\\"id\\\":\\\"27e74da1\\\",\\\"name\\\":\\\"Reviews database\\\",\\\"description\\\":\\\"User-submitted reviews. Reviewer identity is PII.\\\",\\\"kind\\\":\\\"database\\\",\\\"provider\\\":\\\"PostgreSQL\\\",\\\"scope\\\":\\\"shared\\\",\\\"sensitivity\\\":\\\"medium\\\",\\\"containsPii\\\":true,\\\"complianceTags\\\":[],\\\"accessMode\\\":\\\"read_write\\\"}],\\\"entities\\\":[{\\\"id\\\":\\\"2c3d7620\\\",\\\"namespace\\\":\\\"product\\\",\\\"description\\\":\\\"Product catalog entry.\\\",\\\"fields\\\":[{\\\"id\\\":\\\"557d045b\\\",\\\"name\\\":\\\"viewing\\\",\\\"type\\\":\\\"string\\\",\\\"path\\\":\\\"product.viewing\\\",\\\"description\\\":\\\"String field viewing on entity product.\\\"},{\\\"id\\\":\\\"ff59001c\\\",\\\"name\\\":\\\"stock\\\",\\\"type\\\":\\\"number\\\",\\\"path\\\":\\\"product.stock\\\",\\\"description\\\":\\\"Number field stock on entity product.\\\"},{\\\"id\\\":\\\"f033e0a9\\\",\\\"name\\\":\\\"ageRestricted\\\",\\\"type\\\":\\\"boolean\\\",\\\"path\\\":\\\"product.ageRestricted\\\",\\\"description\\\":\\\"Boolean field ageRestricted on entity product.\\\"}],\\\"resourceId\\\":\\\"1d5ddcd1\\\"},{\\\"id\\\":\\\"a7fd9281\\\",\\\"namespace\\\":\\\"review\\\",\\\"description\\\":\\\"Product review with rating and helpful counter.\\\",\\\"fields\\\":[{\\\"id\\\":\\\"ec6c18c0\\\",\\\"name\\\":\\\"rating\\\",\\\"type\\\":\\\"number\\\",\\\"path\\\":\\\"review.draft.rating\\\",\\\"description\\\":\\\"Number field rating on entity review.\\\"},{\\\"id\\\":\\\"4ec7adbc\\\",\\\"name\\\":\\\"text\\\",\\\"type\\\":\\\"string\\\",\\\"path\\\":\\\"review.draft.text\\\",\\\"description\\\":\\\"String field text on entity review.\\\"},{\\\"id\\\":\\\"065b2d57\\\",\\\"name\\\":\\\"verifiedPurchase\\\",\\\"type\\\":\\\"boolean\\\",\\\"path\\\":\\\"review.draft.verifiedPurchase\\\",\\\"description\\\":\\\"Boolean field verifiedPurchase on entity review.\\\"}],\\\"resourceId\\\":\\\"27e74da1\\\"}],\\\"events\\\":[{\\\"id\\\":\\\"87125567\\\",\\\"name\\\":\\\"catalog.search.executed\\\",\\\"description\\\":\\\"Catalog search ran.\\\",\\\"payloadSchema\\\":[{\\\"name\\\":\\\"query\\\",\\\"type\\\":\\\"string\\\",\\\"required\\\":true,\\\"description\\\":\\\"String payload field query on event catalog.search.executed.\\\"},{\\\"name\\\":\\\"resultCount\\\",\\\"type\\\":\\\"number\\\",\\\"required\\\":false,\\\"description\\\":\\\"Number payload field resultCount on event catalog.search.executed.\\\"}]},{\\\"id\\\":\\\"7846cf41\\\",\\\"name\\\":\\\"catalog.product.viewed\\\",\\\"description\\\":\\\"Product detail page opened.\\\",\\\"payloadSchema\\\":[{\\\"name\\\":\\\"productId\\\",\\\"type\\\":\\\"string\\\",\\\"required\\\":true,\\\"description\\\":\\\"String payload field productId on event catalog.product.viewed.\\\"}]},{\\\"id\\\":\\\"f3eafd64\\\",\\\"name\\\":\\\"review.submitted\\\",\\\"description\\\":\\\"A new product review was submitted.\\\",\\\"payloadSchema\\\":[{\\\"name\\\":\\\"productId\\\",\\\"type\\\":\\\"string\\\",\\\"required\\\":true,\\\"description\\\":\\\"String payload field productId on event review.submitted.\\\"},{\\\"name\\\":\\\"rating\\\",\\\"type\\\":\\\"number\\\",\\\"required\\\":true,\\\"description\\\":\\\"Number payload field rating on event review.submitted.\\\"}]},{\\\"id\\\":\\\"6f742e8d\\\",\\\"name\\\":\\\"review.helpful_clicked\\\",\\\"description\\\":\\\"A review was marked helpful.\\\",\\\"payloadSchema\\\":[{\\\"name\\\":\\\"reviewIndex\\\",\\\"type\\\":\\\"number\\\",\\\"required\\\":true,\\\"description\\\":\\\"Number payload field reviewIndex on event review.helpful_clicked.\\\"}]},{\\\"id\\\":\\\"92724e5f\\\",\\\"name\\\":\\\"recommendation.clicked\\\",\\\"description\\\":\\\"\\\\\\\"You may also like\\\\\\\" recommendation clicked.\\\",\\\"payloadSchema\\\":[{\\\"name\\\":\\\"productId\\\",\\\"type\\\":\\\"string\\\",\\\"required\\\":true,\\\"description\\\":\\\"String payload field productId on event recommendation.clicked.\\\"}]},{\\\"id\\\":\\\"b60206d2\\\",\\\"name\\\":\\\"reviews.filtered\\\",\\\"description\\\":\\\"Reviews list filter changed.\\\",\\\"payloadSchema\\\":[{\\\"name\\\":\\\"minRating\\\",\\\"type\\\":\\\"number\\\",\\\"required\\\":true,\\\"description\\\":\\\"Number payload field minRating on event reviews.filtered.\\\"},{\\\"name\\\":\\\"verifiedOnly\\\",\\\"type\\\":\\\"boolean\\\",\\\"required\\\":true,\\\"description\\\":\\\"Boolean payload field verifiedOnly on event reviews.filtered.\\\"}]},{\\\"id\\\":\\\"a7f25598\\\",\\\"name\\\":\\\"reviews.sorted\\\",\\\"description\\\":\\\"Reviews list sort order changed.\\\",\\\"payloadSchema\\\":[{\\\"name\\\":\\\"sortBy\\\",\\\"type\\\":\\\"string\\\",\\\"required\\\":true,\\\"description\\\":\\\"String payload field sortBy on event reviews.sorted.\\\"}]},{\\\"id\\\":\\\"bf8f9645\\\",\\\"name\\\":\\\"ui.allreviews.opened\\\",\\\"description\\\":\\\"Buyer opened the all-reviews page.\\\"},{\\\"id\\\":\\\"71f0d82a\\\",\\\"name\\\":\\\"ui.product.opened\\\",\\\"description\\\":\\\"Buyer opened a product detail page.\\\"}],\\\"createdAt\\\":\\\"2026-05-18T23:53:41.140Z\\\",\\\"updatedAt\\\":\\\"2026-05-19T00:14:49.203Z\\\",\\\"featureInvariants\\\":[{\\\"id\\\":\\\"283d71a1\\\",\\\"name\\\":\\\"Helpful counter non-negative\\\",\\\"condition\\\":{\\\"left\\\":\\\"reviews.helpfulCount\\\",\\\"operator\\\":\\\"greater_than\\\",\\\"right\\\":-1},\\\"message\\\":\\\"Helpful counter went negative across surfaces.\\\"},{\\\"id\\\":\\\"72fb047b\\\",\\\"name\\\":\\\"Product stock never negative\\\",\\\"condition\\\":{\\\"left\\\":\\\"product.stock\\\",\\\"operator\\\":\\\"greater_than\\\",\\\"right\\\":-1},\\\"message\\\":\\\"Product stock went negative.\\\"}],\\\"expectedActions\\\":[\\\"Search products\\\",\\\"View product\\\",\\\"Submit review\\\",\\\"Click recommendation\\\",\\\"Open all reviews\\\",\\\"Filter reviews\\\",\\\"Sort reviews\\\",\\\"Mark review helpful\\\"],\\\"nonGoals\\\":[\\\"Personalised recommendations engine\\\",\\\"Review moderation queue and reviewer reputation\\\",\\\"Product comparison tables\\\",\\\"Saved lists and wishlists\\\",\\\"Catalog ingestion / vendor product onboarding\\\"]}\");\nvar catalog_reviews_feature_default = {\n\tformat: format$2,\n\tversion: 1,\n\tfeature: feature$1\n};\n//#endregion\n//#region samples/eshop/order-fulfillment.feature.json\nvar order_fulfillment_feature_exports = /* @__PURE__ */ __exportAll({\n\tdefault: () => order_fulfillment_feature_default,\n\tfeature: () => feature,\n\tformat: () => format$1,\n\tversion: () => 1\n});\nvar format$1 = \"unspaghettit\";\nvar feature = /* @__PURE__ */ JSON.parse(\"{\\\"id\\\":\\\"5da6bb5c\\\",\\\"name\\\":\\\"Order fulfillment\\\",\\\"description\\\":\\\"Order lifecycle from preparing to delivered. Cancellation is allowed before shipping; signature is required on delivery confirmation. Automatically kicks off when an order is placed.\\\",\\\"surfaces\\\":[{\\\"id\\\":\\\"da9b0526\\\",\\\"name\\\":\\\"Order tracking & delivery\\\",\\\"type\\\":\\\"screen\\\",\\\"description\\\":\\\"Order status state machine. Preparing → shipped → out for delivery → delivered.\\\",\\\"stateDefinitions\\\":[{\\\"id\\\":\\\"05ff3f48\\\",\\\"path\\\":\\\"order.status\\\",\\\"type\\\":\\\"enum\\\",\\\"defaultValue\\\":\\\"preparing\\\",\\\"enumValues\\\":[\\\"preparing\\\",\\\"shipped\\\",\\\"out_for_delivery\\\",\\\"delivered\\\",\\\"cancelled\\\"],\\\"description\\\":\\\"Current order status. Drives the state machine.\\\"},{\\\"id\\\":\\\"549cba7d\\\",\\\"path\\\":\\\"order.id\\\",\\\"type\\\":\\\"string\\\",\\\"defaultValue\\\":\\\"ORD-1042\\\",\\\"description\\\":\\\"Order identifier (server-issued).\\\"},{\\\"id\\\":\\\"b7a31432\\\",\\\"path\\\":\\\"order.statusLabel\\\",\\\"type\\\":\\\"string\\\",\\\"defaultValue\\\":\\\"Preparing your order\\\",\\\"description\\\":\\\"Human-readable label, derived from order.status via a switch Expression on every transition.\\\"},{\\\"id\\\":\\\"041bb67f\\\",\\\"path\\\":\\\"order.trackingInitialized\\\",\\\"type\\\":\\\"boolean\\\",\\\"defaultValue\\\":false,\\\"description\\\":\\\"Whether the tracking record was initialized by the cascade handler.\\\"},{\\\"id\\\":\\\"e4993a5a\\\",\\\"path\\\":\\\"delivery.signatureRequired\\\",\\\"type\\\":\\\"boolean\\\",\\\"defaultValue\\\":true,\\\"description\\\":\\\"Whether a signature is required for confirmation.\\\"},{\\\"id\\\":\\\"8c3e844e\\\",\\\"path\\\":\\\"delivery.signatureCollected\\\",\\\"type\\\":\\\"boolean\\\",\\\"defaultValue\\\":false,\\\"description\\\":\\\"Whether the buyer's signature was captured.\\\"},{\\\"id\\\":\\\"d4bbd9a4\\\",\\\"path\\\":\\\"user.authenticated\\\",\\\"type\\\":\\\"boolean\\\",\\\"defaultValue\\\":false,\\\"description\\\":\\\"Sign-in status (mirrored).\\\"},{\\\"id\\\":\\\"b5a76912\\\",\\\"path\\\":\\\"carrier.signedIn\\\",\\\"type\\\":\\\"boolean\\\",\\\"defaultValue\\\":false,\\\"description\\\":\\\"Whether the carrier system is authenticated.\\\"}],\\\"actions\\\":[{\\\"id\\\":\\\"712a0ef0\\\",\\\"name\\\":\\\"Initialize tracking\\\",\\\"intent\\\":\\\"Cascade handler: when an order is placed, create its tracking record and seed the status label.\\\",\\\"parameters\\\":[],\\\"requiredStates\\\":[],\\\"rules\\\":[{\\\"id\\\":\\\"a4067017\\\",\\\"category\\\":\\\"permissions\\\",\\\"condition\\\":{\\\"left\\\":\\\"order.trackingInitialized\\\",\\\"operator\\\":\\\"is_true\\\"},\\\"effect\\\":{\\\"type\\\":\\\"block_action\\\",\\\"reason\\\":\\\"Tracking already initialized for this order.\\\",\\\"id\\\":\\\"588820a5\\\",\\\"description\\\":\\\"Effect block_action from a permissions rule on action Initialize tracking.\\\"},\\\"description\\\":\\\"System-level cascade; never gated by user auth.\\\"}],\\\"invariants\\\":[],\\\"effects\\\":[{\\\"type\\\":\\\"set_state\\\",\\\"path\\\":\\\"order.trackingInitialized\\\",\\\"value\\\":true,\\\"id\\\":\\\"7b22452f\\\",\\\"description\\\":\\\"Effect set_state on action Initialize tracking.\\\"},{\\\"type\\\":\\\"set_state\\\",\\\"path\\\":\\\"order.status\\\",\\\"value\\\":\\\"preparing\\\",\\\"id\\\":\\\"733310f6\\\",\\\"description\\\":\\\"Effect set_state on action Initialize tracking.\\\"},{\\\"type\\\":\\\"set_state\\\",\\\"path\\\":\\\"order.statusLabel\\\",\\\"value\\\":{\\\"kind\\\":\\\"switch\\\",\\\"cases\\\":[{\\\"when\\\":{\\\"left\\\":\\\"order.status\\\",\\\"operator\\\":\\\"equals\\\",\\\"right\\\":\\\"preparing\\\"},\\\"then\\\":{\\\"kind\\\":\\\"literal\\\",\\\"value\\\":\\\"Preparing your order\\\"}},{\\\"when\\\":{\\\"left\\\":\\\"order.status\\\",\\\"operator\\\":\\\"equals\\\",\\\"right\\\":\\\"shipped\\\"},\\\"then\\\":{\\\"kind\\\":\\\"literal\\\",\\\"value\\\":\\\"On its way\\\"}},{\\\"when\\\":{\\\"left\\\":\\\"order.status\\\",\\\"operator\\\":\\\"equals\\\",\\\"right\\\":\\\"out_for_delivery\\\"},\\\"then\\\":{\\\"kind\\\":\\\"literal\\\",\\\"value\\\":\\\"Out for delivery\\\"}},{\\\"when\\\":{\\\"left\\\":\\\"order.status\\\",\\\"operator\\\":\\\"equals\\\",\\\"right\\\":\\\"delivered\\\"},\\\"then\\\":{\\\"kind\\\":\\\"literal\\\",\\\"value\\\":\\\"Delivered\\\"}}],\\\"default\\\":{\\\"kind\\\":\\\"literal\\\",\\\"value\\\":\\\"Cancelled\\\"}},\\\"id\\\":\\\"0533fe02\\\",\\\"description\\\":\\\"Effect set_state on action Initialize tracking.\\\"},{\\\"type\\\":\\\"emit_event\\\",\\\"event\\\":\\\"order.tracking.initialized\\\",\\\"id\\\":\\\"3409d7f5\\\",\\\"description\\\":\\\"Effect emit_event on action Initialize tracking.\\\"}],\\\"emittedEvents\\\":[\\\"order.tracking.initialized\\\"],\\\"transitions\\\":[],\\\"triggeredByEvent\\\":\\\"order.placed\\\",\\\"scenarios\\\":[{\\\"id\\\":\\\"2fe5b481\\\",\\\"name\\\":\\\"Cascade: initialize tracking on order.placed\\\",\\\"description\\\":\\\"Triggered by the order.placed event in the Cart & checkout feature. Sets the initial status + label via switch Expression.\\\",\\\"stateOverrides\\\":[{\\\"path\\\":\\\"carrier.signedIn\\\",\\\"value\\\":true},{\\\"path\\\":\\\"order.trackingInitialized\\\",\\\"value\\\":false}],\\\"parameterOverrides\\\":[],\\\"expectedStatus\\\":\\\"success\\\",\\\"expectedAssertions\\\":[{\\\"path\\\":\\\"order.trackingInitialized\\\",\\\"operator\\\":\\\"is_true\\\",\\\"description\\\":\\\"Asserts order.trackingInitialized is_true.\\\"},{\\\"path\\\":\\\"order.statusLabel\\\",\\\"operator\\\":\\\"equals\\\",\\\"value\\\":\\\"Preparing your order\\\",\\\"description\\\":\\\"Asserts order.statusLabel equals 'Preparing your order'.\\\"}]}]},{\\\"id\\\":\\\"70046ae1\\\",\\\"name\\\":\\\"Cancel order\\\",\\\"intent\\\":\\\"Buyer cancels their order before it ships.\\\",\\\"parameters\\\":[],\\\"requiredStates\\\":[],\\\"rules\\\":[{\\\"id\\\":\\\"46706576\\\",\\\"category\\\":\\\"permissions\\\",\\\"condition\\\":{\\\"left\\\":\\\"user.authenticated\\\",\\\"operator\\\":\\\"is_false\\\"},\\\"effect\\\":{\\\"type\\\":\\\"block_action\\\",\\\"reason\\\":\\\"Sign in to manage your orders.\\\",\\\"id\\\":\\\"2b504026\\\",\\\"description\\\":\\\"Effect block_action from a permissions rule on action Cancel order.\\\"},\\\"description\\\":\\\"Permissions rule on action Cancel order.\\\"},{\\\"id\\\":\\\"c0d778dc\\\",\\\"category\\\":\\\"business\\\",\\\"condition\\\":{\\\"left\\\":\\\"order.status\\\",\\\"operator\\\":\\\"not_equals\\\",\\\"right\\\":\\\"preparing\\\"},\\\"effect\\\":{\\\"type\\\":\\\"block_action\\\",\\\"reason\\\":\\\"Order has already shipped and cannot be cancelled.\\\",\\\"id\\\":\\\"3317ba4c\\\",\\\"description\\\":\\\"Effect block_action from a business rule on action Cancel order.\\\"},\\\"description\\\":\\\"Only preparing orders can be cancelled.\\\"},{\\\"id\\\":\\\"4ec18c0a\\\",\\\"category\\\":\\\"validation\\\",\\\"condition\\\":{\\\"left\\\":\\\"order.id\\\",\\\"operator\\\":\\\"equals\\\",\\\"right\\\":\\\"\\\"},\\\"effect\\\":{\\\"type\\\":\\\"block_action\\\",\\\"reason\\\":\\\"Missing order id.\\\",\\\"id\\\":\\\"45cbcacc\\\",\\\"description\\\":\\\"Effect block_action from a validation rule on action Cancel order.\\\"},\\\"description\\\":\\\"Validation rule on action Cancel order.\\\"}],\\\"invariants\\\":[{\\\"id\\\":\\\"baf92824\\\",\\\"name\\\":\\\"Cancel leaves order in cancelled state\\\",\\\"condition\\\":{\\\"left\\\":\\\"order.status\\\",\\\"operator\\\":\\\"equals\\\",\\\"right\\\":\\\"cancelled\\\"},\\\"message\\\":\\\"Cancel did not leave the order in the cancelled state.\\\",\\\"description\\\":\\\"Action-level post-condition: after Cancel order runs successfully, status must be \\\\\\\"cancelled\\\\\\\".\\\"}],\\\"effects\\\":[{\\\"type\\\":\\\"set_state\\\",\\\"path\\\":\\\"order.status\\\",\\\"value\\\":\\\"cancelled\\\",\\\"id\\\":\\\"39add89d\\\",\\\"description\\\":\\\"Effect set_state on action Cancel order.\\\"},{\\\"type\\\":\\\"set_state\\\",\\\"path\\\":\\\"order.statusLabel\\\",\\\"value\\\":\\\"Cancelled\\\",\\\"id\\\":\\\"0e185a8c\\\",\\\"description\\\":\\\"Effect set_state on action Cancel order.\\\"},{\\\"type\\\":\\\"emit_event\\\",\\\"event\\\":\\\"order.cancelled\\\",\\\"id\\\":\\\"4b655d10\\\",\\\"description\\\":\\\"Effect emit_event on action Cancel order.\\\"}],\\\"emittedEvents\\\":[\\\"order.cancelled\\\"],\\\"transitions\\\":[],\\\"scenarios\\\":[{\\\"id\\\":\\\"315705e5\\\",\\\"name\\\":\\\"Happy path: cancel preparing order\\\",\\\"stateOverrides\\\":[{\\\"path\\\":\\\"user.authenticated\\\",\\\"value\\\":true},{\\\"path\\\":\\\"order.status\\\",\\\"value\\\":\\\"preparing\\\"}],\\\"parameterOverrides\\\":[],\\\"expectedStatus\\\":\\\"success\\\",\\\"expectedAssertions\\\":[{\\\"path\\\":\\\"order.status\\\",\\\"operator\\\":\\\"equals\\\",\\\"value\\\":\\\"cancelled\\\",\\\"description\\\":\\\"Asserts order.status equals 'cancelled'.\\\"}],\\\"description\\\":\\\"Scenario Happy path: cancel preparing order on action Cancel order.\\\"},{\\\"id\\\":\\\"a18b77eb\\\",\\\"name\\\":\\\"Blocked: cannot cancel after shipping\\\",\\\"stateOverrides\\\":[{\\\"path\\\":\\\"user.authenticated\\\",\\\"value\\\":true},{\\\"path\\\":\\\"order.status\\\",\\\"value\\\":\\\"shipped\\\"}],\\\"parameterOverrides\\\":[],\\\"expectedStatus\\\":\\\"blocked\\\",\\\"description\\\":\\\"Scenario Blocked: cannot cancel after shipping on action Cancel order.\\\"}]},{\\\"id\\\":\\\"b5746e17\\\",\\\"name\\\":\\\"Mark as shipped (system)\\\",\\\"intent\\\":\\\"System action: order has shipped; status moves to \\\\\\\"shipped\\\\\\\".\\\",\\\"parameters\\\":[{\\\"id\\\":\\\"5daa85c0\\\",\\\"name\\\":\\\"trackingNumber\\\",\\\"type\\\":\\\"string\\\",\\\"required\\\":true,\\\"description\\\":\\\"Carrier tracking number.\\\"}],\\\"requiredStates\\\":[],\\\"rules\\\":[{\\\"id\\\":\\\"e55898b9\\\",\\\"category\\\":\\\"permissions\\\",\\\"condition\\\":{\\\"left\\\":\\\"carrier.signedIn\\\",\\\"operator\\\":\\\"is_false\\\"},\\\"effect\\\":{\\\"type\\\":\\\"block_action\\\",\\\"reason\\\":\\\"Carrier authentication required.\\\",\\\"id\\\":\\\"07b09ab5\\\",\\\"description\\\":\\\"Effect block_action from a permissions rule on action Mark as shipped (system).\\\"},\\\"description\\\":\\\"Only the carrier system can mark shipping.\\\"},{\\\"id\\\":\\\"0046ea0a\\\",\\\"category\\\":\\\"business\\\",\\\"condition\\\":{\\\"left\\\":\\\"order.status\\\",\\\"operator\\\":\\\"not_equals\\\",\\\"right\\\":\\\"preparing\\\"},\\\"effect\\\":{\\\"type\\\":\\\"block_action\\\",\\\"reason\\\":\\\"Order cannot be marked shipped from its current state.\\\",\\\"id\\\":\\\"b4e89a6c\\\",\\\"description\\\":\\\"Effect block_action from a business rule on action Mark as shipped (system).\\\"},\\\"description\\\":\\\"State machine: must come from preparing.\\\"},{\\\"id\\\":\\\"5f0bda62\\\",\\\"category\\\":\\\"validation\\\",\\\"condition\\\":{\\\"left\\\":\\\"order.id\\\",\\\"operator\\\":\\\"equals\\\",\\\"right\\\":\\\"\\\"},\\\"effect\\\":{\\\"type\\\":\\\"block_action\\\",\\\"reason\\\":\\\"Missing order id.\\\",\\\"id\\\":\\\"478d5d8b\\\",\\\"description\\\":\\\"Effect block_action from a validation rule on action Mark as shipped (system).\\\"},\\\"description\\\":\\\"Validation rule on action Mark as shipped (system).\\\"}],\\\"invariants\\\":[{\\\"id\\\":\\\"605d7dd1\\\",\\\"name\\\":\\\"Shipped leaves status shipped\\\",\\\"condition\\\":{\\\"left\\\":\\\"order.status\\\",\\\"operator\\\":\\\"equals\\\",\\\"right\\\":\\\"shipped\\\"},\\\"message\\\":\\\"Mark shipped did not advance the status to shipped.\\\",\\\"description\\\":\\\"Action invariant on Mark as shipped (system): Shipped leaves status shipped.\\\"}],\\\"effects\\\":[{\\\"type\\\":\\\"set_state\\\",\\\"path\\\":\\\"order.status\\\",\\\"value\\\":\\\"shipped\\\",\\\"id\\\":\\\"17b81e02\\\",\\\"description\\\":\\\"Effect set_state on action Mark as shipped (system).\\\"},{\\\"type\\\":\\\"set_state\\\",\\\"path\\\":\\\"order.statusLabel\\\",\\\"value\\\":\\\"On its way\\\",\\\"id\\\":\\\"60ba4f99\\\",\\\"description\\\":\\\"Effect set_state on action Mark as shipped (system).\\\"},{\\\"type\\\":\\\"emit_event\\\",\\\"event\\\":\\\"order.shipped\\\",\\\"id\\\":\\\"766518b8\\\",\\\"description\\\":\\\"Effect emit_event on action Mark as shipped (system).\\\"}],\\\"emittedEvents\\\":[\\\"order.shipped\\\"],\\\"transitions\\\":[],\\\"scenarios\\\":[{\\\"id\\\":\\\"685d4281\\\",\\\"name\\\":\\\"Happy path: order shipped\\\",\\\"stateOverrides\\\":[{\\\"path\\\":\\\"carrier.signedIn\\\",\\\"value\\\":true},{\\\"path\\\":\\\"order.status\\\",\\\"value\\\":\\\"preparing\\\"}],\\\"parameterOverrides\\\":[{\\\"parameterName\\\":\\\"trackingNumber\\\",\\\"value\\\":\\\"1Z9999W19999999999\\\"}],\\\"expectedStatus\\\":\\\"success\\\",\\\"expectedAssertions\\\":[{\\\"path\\\":\\\"order.status\\\",\\\"operator\\\":\\\"equals\\\",\\\"value\\\":\\\"shipped\\\",\\\"description\\\":\\\"Asserts order.status equals 'shipped'.\\\"}],\\\"description\\\":\\\"Scenario Happy path: order shipped on action Mark as shipped (system).\\\"}]},{\\\"id\\\":\\\"9fdd0a83\\\",\\\"name\\\":\\\"Mark as out for delivery (carrier)\\\",\\\"intent\\\":\\\"Carrier event: order is on the truck for the last mile.\\\",\\\"parameters\\\":[],\\\"requiredStates\\\":[],\\\"rules\\\":[{\\\"id\\\":\\\"bb366827\\\",\\\"category\\\":\\\"permissions\\\",\\\"condition\\\":{\\\"left\\\":\\\"carrier.signedIn\\\",\\\"operator\\\":\\\"is_false\\\"},\\\"effect\\\":{\\\"type\\\":\\\"block_action\\\",\\\"reason\\\":\\\"Carrier authentication required.\\\",\\\"id\\\":\\\"3e42c8b4\\\",\\\"description\\\":\\\"Effect block_action from a permissions rule on action Mark as out for delivery (carrier).\\\"},\\\"description\\\":\\\"Permissions rule on action Mark as out for delivery (carrier).\\\"},{\\\"id\\\":\\\"365f9e21\\\",\\\"category\\\":\\\"business\\\",\\\"condition\\\":{\\\"left\\\":\\\"order.status\\\",\\\"operator\\\":\\\"not_equals\\\",\\\"right\\\":\\\"shipped\\\"},\\\"effect\\\":{\\\"type\\\":\\\"block_action\\\",\\\"reason\\\":\\\"Order is not yet shipped.\\\",\\\"id\\\":\\\"c5dcf26a\\\",\\\"description\\\":\\\"Effect block_action from a business rule on action Mark as out for delivery (carrier).\\\"},\\\"description\\\":\\\"State machine: must come from shipped.\\\"},{\\\"id\\\":\\\"10f5086d\\\",\\\"category\\\":\\\"validation\\\",\\\"condition\\\":{\\\"left\\\":\\\"order.id\\\",\\\"operator\\\":\\\"equals\\\",\\\"right\\\":\\\"\\\"},\\\"effect\\\":{\\\"type\\\":\\\"block_action\\\",\\\"reason\\\":\\\"Missing order id.\\\",\\\"id\\\":\\\"81a0c5ca\\\",\\\"description\\\":\\\"Effect block_action from a validation rule on action Mark as out for delivery (carrier).\\\"},\\\"description\\\":\\\"Validation rule on action Mark as out for delivery (carrier).\\\"}],\\\"invariants\\\":[{\\\"id\\\":\\\"1f8d3025\\\",\\\"name\\\":\\\"Out-for-delivery leaves status out_for_delivery\\\",\\\"condition\\\":{\\\"left\\\":\\\"order.status\\\",\\\"operator\\\":\\\"equals\\\",\\\"right\\\":\\\"out_for_delivery\\\"},\\\"message\\\":\\\"Mark out-for-delivery did not advance the status.\\\",\\\"description\\\":\\\"Action invariant on Mark as out for delivery (carrier): Out-for-delivery leaves status out_for_delivery.\\\"}],\\\"effects\\\":[{\\\"type\\\":\\\"set_state\\\",\\\"path\\\":\\\"order.status\\\",\\\"value\\\":\\\"out_for_delivery\\\",\\\"id\\\":\\\"e223b29b\\\",\\\"description\\\":\\\"Effect set_state on action Mark as out for delivery (carrier).\\\"},{\\\"type\\\":\\\"set_state\\\",\\\"path\\\":\\\"order.statusLabel\\\",\\\"value\\\":\\\"Out for delivery\\\",\\\"id\\\":\\\"8b310c4a\\\",\\\"description\\\":\\\"Effect set_state on action Mark as out for delivery (carrier).\\\"},{\\\"type\\\":\\\"emit_event\\\",\\\"event\\\":\\\"order.out_for_delivery\\\",\\\"id\\\":\\\"0c724e62\\\",\\\"description\\\":\\\"Effect emit_event on action Mark as out for delivery (carrier).\\\"}],\\\"emittedEvents\\\":[\\\"order.out_for_delivery\\\"],\\\"transitions\\\":[],\\\"scenarios\\\":[{\\\"id\\\":\\\"2bc5885d\\\",\\\"name\\\":\\\"Happy path: shipped → out for delivery\\\",\\\"stateOverrides\\\":[{\\\"path\\\":\\\"carrier.signedIn\\\",\\\"value\\\":true},{\\\"path\\\":\\\"order.status\\\",\\\"value\\\":\\\"shipped\\\"}],\\\"parameterOverrides\\\":[],\\\"expectedStatus\\\":\\\"success\\\",\\\"description\\\":\\\"Scenario Happy path: shipped → out for delivery on action Mark as out for delivery (carrier).\\\"}]},{\\\"id\\\":\\\"b988e8dc\\\",\\\"name\\\":\\\"Confirm delivery\\\",\\\"intent\\\":\\\"Buyer confirms receipt of the package.\\\",\\\"parameters\\\":[],\\\"requiredStates\\\":[],\\\"rules\\\":[{\\\"id\\\":\\\"51541e34\\\",\\\"category\\\":\\\"permissions\\\",\\\"condition\\\":{\\\"left\\\":\\\"user.authenticated\\\",\\\"operator\\\":\\\"is_false\\\"},\\\"effect\\\":{\\\"type\\\":\\\"block_action\\\",\\\"reason\\\":\\\"Sign in to confirm delivery.\\\",\\\"id\\\":\\\"ae1c2db4\\\",\\\"description\\\":\\\"Effect block_action from a permissions rule on action Confirm delivery.\\\"},\\\"description\\\":\\\"Permissions rule on action Confirm delivery.\\\"},{\\\"id\\\":\\\"904e7e6a\\\",\\\"category\\\":\\\"business\\\",\\\"condition\\\":{\\\"left\\\":\\\"order.status\\\",\\\"operator\\\":\\\"not_equals\\\",\\\"right\\\":\\\"out_for_delivery\\\"},\\\"effect\\\":{\\\"type\\\":\\\"block_action\\\",\\\"reason\\\":\\\"Order is not out for delivery.\\\",\\\"id\\\":\\\"48d76dfe\\\",\\\"description\\\":\\\"Effect block_action from a business rule on action Confirm delivery.\\\"},\\\"description\\\":\\\"Business rule on action Confirm delivery.\\\"},{\\\"id\\\":\\\"9b224745\\\",\\\"category\\\":\\\"validation\\\",\\\"condition\\\":{\\\"kind\\\":\\\"all\\\",\\\"conditions\\\":[{\\\"left\\\":\\\"delivery.signatureRequired\\\",\\\"operator\\\":\\\"is_true\\\"},{\\\"left\\\":\\\"delivery.signatureCollected\\\",\\\"operator\\\":\\\"is_false\\\"}]},\\\"effect\\\":{\\\"type\\\":\\\"block_action\\\",\\\"reason\\\":\\\"Signature required but not collected.\\\",\\\"id\\\":\\\"e377e24f\\\",\\\"description\\\":\\\"Effect block_action from a validation rule on action Confirm delivery.\\\"},\\\"description\\\":\\\"Composite ALL: if signature is required, it must be collected.\\\"}],\\\"invariants\\\":[{\\\"id\\\":\\\"fda7f463\\\",\\\"name\\\":\\\"Confirm delivery leaves status delivered\\\",\\\"condition\\\":{\\\"left\\\":\\\"order.status\\\",\\\"operator\\\":\\\"equals\\\",\\\"right\\\":\\\"delivered\\\"},\\\"message\\\":\\\"Confirm delivery did not finalize the order.\\\",\\\"description\\\":\\\"Action invariant on Confirm delivery: Confirm delivery leaves status delivered.\\\"}],\\\"effects\\\":[{\\\"type\\\":\\\"set_state\\\",\\\"path\\\":\\\"order.status\\\",\\\"value\\\":\\\"delivered\\\",\\\"id\\\":\\\"7e68e970\\\",\\\"description\\\":\\\"Effect set_state on action Confirm delivery.\\\"},{\\\"type\\\":\\\"set_state\\\",\\\"path\\\":\\\"order.statusLabel\\\",\\\"value\\\":\\\"Delivered\\\",\\\"id\\\":\\\"219b820d\\\",\\\"description\\\":\\\"Effect set_state on action Confirm delivery.\\\"},{\\\"type\\\":\\\"emit_event\\\",\\\"event\\\":\\\"delivery.confirmed\\\",\\\"id\\\":\\\"5adacc34\\\",\\\"description\\\":\\\"Effect emit_event on action Confirm delivery.\\\"},{\\\"type\\\":\\\"emit_event\\\",\\\"event\\\":\\\"order.delivered\\\",\\\"id\\\":\\\"612d51df\\\",\\\"description\\\":\\\"Effect emit_event on action Confirm delivery.\\\"}],\\\"emittedEvents\\\":[\\\"delivery.confirmed\\\",\\\"order.delivered\\\"],\\\"transitions\\\":[],\\\"scenarios\\\":[{\\\"id\\\":\\\"7a1f2032\\\",\\\"name\\\":\\\"Happy path: confirm delivery with signature\\\",\\\"stateOverrides\\\":[{\\\"path\\\":\\\"user.authenticated\\\",\\\"value\\\":true},{\\\"path\\\":\\\"order.status\\\",\\\"value\\\":\\\"out_for_delivery\\\"},{\\\"path\\\":\\\"delivery.signatureRequired\\\",\\\"value\\\":true},{\\\"path\\\":\\\"delivery.signatureCollected\\\",\\\"value\\\":true}],\\\"parameterOverrides\\\":[],\\\"expectedStatus\\\":\\\"success\\\",\\\"expectedAssertions\\\":[{\\\"path\\\":\\\"order.status\\\",\\\"operator\\\":\\\"equals\\\",\\\"value\\\":\\\"delivered\\\",\\\"description\\\":\\\"Asserts order.status equals 'delivered'.\\\"}],\\\"description\\\":\\\"Scenario Happy path: confirm delivery with signature on action Confirm delivery.\\\"},{\\\"id\\\":\\\"abe17979\\\",\\\"name\\\":\\\"Blocked: signature required but missing\\\",\\\"description\\\":\\\"Composite ALL rule trips.\\\",\\\"stateOverrides\\\":[{\\\"path\\\":\\\"user.authenticated\\\",\\\"value\\\":true},{\\\"path\\\":\\\"order.status\\\",\\\"value\\\":\\\"out_for_delivery\\\"},{\\\"path\\\":\\\"delivery.signatureRequired\\\",\\\"value\\\":true},{\\\"path\\\":\\\"delivery.signatureCollected\\\",\\\"value\\\":false}],\\\"parameterOverrides\\\":[],\\\"expectedStatus\\\":\\\"blocked\\\"}]}],\\\"rules\\\":[{\\\"id\\\":\\\"05037aef\\\",\\\"category\\\":\\\"permissions\\\",\\\"condition\\\":{\\\"kind\\\":\\\"all\\\",\\\"conditions\\\":[{\\\"left\\\":\\\"user.authenticated\\\",\\\"operator\\\":\\\"is_false\\\"},{\\\"left\\\":\\\"carrier.signedIn\\\",\\\"operator\\\":\\\"is_false\\\"}]},\\\"effect\\\":{\\\"type\\\":\\\"block_action\\\",\\\"reason\\\":\\\"Either a buyer or carrier session is required.\\\",\\\"id\\\":\\\"9ba47119\\\",\\\"description\\\":\\\"Effect block_action from a surface-level permissions rule on Order tracking & delivery.\\\"},\\\"description\\\":\\\"Either the buyer or the carrier may interact with this surface.\\\"}],\\\"invariants\\\":[{\\\"id\\\":\\\"12f3ea29\\\",\\\"name\\\":\\\"Order id present\\\",\\\"condition\\\":{\\\"left\\\":\\\"order.id\\\",\\\"operator\\\":\\\"not_equals\\\",\\\"right\\\":\\\"\\\"},\\\"message\\\":\\\"Order id must be set.\\\",\\\"description\\\":\\\"Surface invariant on Order tracking & delivery: Order id present.\\\"}],\\\"transitions\\\":[]}],\\\"personas\\\":[{\\\"id\\\":\\\"7e7ff3a9\\\",\\\"name\\\":\\\"Buyer awaiting delivery\\\",\\\"description\\\":\\\"Order is preparing. Cancellation still possible.\\\",\\\"stateOverrides\\\":[{\\\"path\\\":\\\"order.status\\\",\\\"value\\\":\\\"preparing\\\"},{\\\"path\\\":\\\"user.authenticated\\\",\\\"value\\\":true}],\\\"parameterOverrides\\\":[]},{\\\"id\\\":\\\"068ee6f9\\\",\\\"name\\\":\\\"Carrier system\\\",\\\"description\\\":\\\"Backend system that pushes carrier status updates.\\\",\\\"stateOverrides\\\":[{\\\"path\\\":\\\"carrier.signedIn\\\",\\\"value\\\":true}],\\\"parameterOverrides\\\":[]}],\\\"resources\\\":[{\\\"id\\\":\\\"24e275a2\\\",\\\"name\\\":\\\"Orders database\\\",\\\"description\\\":\\\"Persisted orders + fulfillment state.\\\",\\\"kind\\\":\\\"database\\\",\\\"provider\\\":\\\"PostgreSQL\\\",\\\"scope\\\":\\\"shared\\\",\\\"sensitivity\\\":\\\"high\\\",\\\"containsPii\\\":true,\\\"complianceTags\\\":[],\\\"accessMode\\\":\\\"read_write\\\"},{\\\"id\\\":\\\"ac3ad07c\\\",\\\"name\\\":\\\"Shipping carrier API\\\",\\\"description\\\":\\\"Carrier integration for tracking events.\\\",\\\"kind\\\":\\\"http_api\\\",\\\"provider\\\":\\\"EasyPost\\\",\\\"scope\\\":\\\"external\\\",\\\"sensitivity\\\":\\\"medium\\\",\\\"containsPii\\\":true,\\\"complianceTags\\\":[],\\\"accessMode\\\":\\\"read_write\\\"}],\\\"entities\\\":[{\\\"id\\\":\\\"1dc0be2d\\\",\\\"namespace\\\":\\\"order\\\",\\\"description\\\":\\\"Order fulfillment record.\\\",\\\"fields\\\":[{\\\"id\\\":\\\"0b5ee7ff\\\",\\\"name\\\":\\\"status\\\",\\\"type\\\":\\\"enum\\\",\\\"path\\\":\\\"order.status\\\",\\\"description\\\":\\\"Enum field status on entity order.\\\"},{\\\"id\\\":\\\"5dcafab0\\\",\\\"name\\\":\\\"id\\\",\\\"type\\\":\\\"string\\\",\\\"path\\\":\\\"order.id\\\",\\\"description\\\":\\\"String field id on entity order.\\\"},{\\\"id\\\":\\\"7554575f\\\",\\\"name\\\":\\\"statusLabel\\\",\\\"type\\\":\\\"string\\\",\\\"path\\\":\\\"order.statusLabel\\\",\\\"description\\\":\\\"String field statusLabel on entity order.\\\"}],\\\"resourceId\\\":\\\"24e275a2\\\"}],\\\"events\\\":[{\\\"id\\\":\\\"3d6ef3a8\\\",\\\"name\\\":\\\"order.placed\\\",\\\"description\\\":\\\"Order successfully placed (emitted by the Cart & checkout feature; subscribed here for cascade init).\\\",\\\"payloadSchema\\\":[{\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"number\\\",\\\"required\\\":true,\\\"description\\\":\\\"Number payload field amount on event order.placed.\\\"}]},{\\\"id\\\":\\\"fa6c24a5\\\",\\\"name\\\":\\\"order.tracking.initialized\\\",\\\"description\\\":\\\"Tracking record created for a new order.\\\",\\\"payloadSchema\\\":[{\\\"name\\\":\\\"orderId\\\",\\\"type\\\":\\\"string\\\",\\\"required\\\":true,\\\"description\\\":\\\"String payload field orderId on event order.tracking.initialized.\\\"}]},{\\\"id\\\":\\\"9140be16\\\",\\\"name\\\":\\\"order.shipped\\\",\\\"description\\\":\\\"Order handed off to the carrier.\\\",\\\"payloadSchema\\\":[{\\\"name\\\":\\\"orderId\\\",\\\"type\\\":\\\"string\\\",\\\"required\\\":true,\\\"description\\\":\\\"String payload field orderId on event order.shipped.\\\"},{\\\"name\\\":\\\"trackingNumber\\\",\\\"type\\\":\\\"string\\\",\\\"required\\\":false,\\\"description\\\":\\\"String payload field trackingNumber on event order.shipped.\\\"}]},{\\\"id\\\":\\\"f0db2357\\\",\\\"name\\\":\\\"order.out_for_delivery\\\",\\\"description\\\":\\\"Carrier marked the order out for delivery.\\\",\\\"payloadSchema\\\":[{\\\"name\\\":\\\"orderId\\\",\\\"type\\\":\\\"string\\\",\\\"required\\\":true,\\\"description\\\":\\\"String payload field orderId on event order.out_for_delivery.\\\"}]},{\\\"id\\\":\\\"6a13d4d6\\\",\\\"name\\\":\\\"order.delivered\\\",\\\"description\\\":\\\"Order delivered to the buyer.\\\",\\\"payloadSchema\\\":[{\\\"name\\\":\\\"orderId\\\",\\\"type\\\":\\\"string\\\",\\\"required\\\":true,\\\"description\\\":\\\"String payload field orderId on event order.delivered.\\\"}]},{\\\"id\\\":\\\"084f8e4e\\\",\\\"name\\\":\\\"order.cancelled\\\",\\\"description\\\":\\\"Order cancelled before shipping.\\\",\\\"payloadSchema\\\":[{\\\"name\\\":\\\"orderId\\\",\\\"type\\\":\\\"string\\\",\\\"required\\\":true,\\\"description\\\":\\\"String payload field orderId on event order.cancelled.\\\"}]},{\\\"id\\\":\\\"835f563a\\\",\\\"name\\\":\\\"delivery.confirmed\\\",\\\"description\\\":\\\"Buyer confirmed receipt (with signature if required).\\\"}],\\\"createdAt\\\":\\\"2026-05-18T23:53:41.194Z\\\",\\\"updatedAt\\\":\\\"2026-05-19T00:14:55.404Z\\\",\\\"featureInvariants\\\":[{\\\"id\\\":\\\"f88f4ada\\\",\\\"name\\\":\\\"Status label always set\\\",\\\"condition\\\":{\\\"left\\\":\\\"order.statusLabel\\\",\\\"operator\\\":\\\"not_equals\\\",\\\"right\\\":\\\"\\\"},\\\"message\\\":\\\"Order status label must be populated.\\\"},{\\\"id\\\":\\\"600aef2f\\\",\\\"name\\\":\\\"Status is a known value\\\",\\\"condition\\\":{\\\"kind\\\":\\\"any\\\",\\\"conditions\\\":[{\\\"left\\\":\\\"order.status\\\",\\\"operator\\\":\\\"equals\\\",\\\"right\\\":\\\"preparing\\\"},{\\\"left\\\":\\\"order.status\\\",\\\"operator\\\":\\\"equals\\\",\\\"right\\\":\\\"shipped\\\"},{\\\"left\\\":\\\"order.status\\\",\\\"operator\\\":\\\"equals\\\",\\\"right\\\":\\\"out_for_delivery\\\"},{\\\"left\\\":\\\"order.status\\\",\\\"operator\\\":\\\"equals\\\",\\\"right\\\":\\\"delivered\\\"},{\\\"left\\\":\\\"order.status\\\",\\\"operator\\\":\\\"equals\\\",\\\"right\\\":\\\"cancelled\\\"}]},\\\"message\\\":\\\"Order status drifted to an unknown value.\\\",\\\"description\\\":\\\"Composite ANY: status must match one of the 5 valid states.\\\"}],\\\"expectedActions\\\":[\\\"Initialize tracking\\\",\\\"Cancel order\\\",\\\"Mark as shipped (system)\\\",\\\"Mark as out for delivery (carrier)\\\",\\\"Confirm delivery\\\"],\\\"nonGoals\\\":[\\\"Live carrier tracking polling\\\",\\\"Return label generation\\\",\\\"Address verification at delivery time\\\",\\\"Re-routing in-flight packages\\\",\\\"Photo proof of delivery\\\"]}\");\nvar order_fulfillment_feature_default = {\n\tformat: format$1,\n\tversion: 1,\n\tfeature\n};\n//#endregion\n//#region samples/eshop/eshop.project.json\nvar eshop_project_exports = /* @__PURE__ */ __exportAll({\n\tdefault: () => eshop_project_default,\n\tformat: () => format,\n\tproject: () => project,\n\tversion: () => 1\n});\nvar format = \"unspaghettit-project\";\nvar project = {\n\t\"id\": \"f2e35d76\",\n\t\"name\": \"eShop\",\n\t\"description\": \"End-to-end e-commerce sample modeled as a Project across four LLM-sized Features: Account & auth, Catalog & reviews, Cart & checkout, Order fulfillment. Designed to showcase the full capability surface of Unspaghettit: composite + Expression conditions, feature invariants, event cascade, bypassInvariants, action invariants, scenarios, persona overrides, entity/resource mapping. Every feature scores 100% maturity.\",\n\t\"featureIds\": [\n\t\t\"941e4158\",\n\t\t\"6abcf051\",\n\t\t\"33fbb26d\",\n\t\t\"5da6bb5c\"\n\t],\n\t\"tags\": [{\n\t\t\"type\": \"domain\",\n\t\t\"value\": \"e-commerce\"\n\t}, {\n\t\t\"type\": \"kind\",\n\t\t\"value\": \"sample\"\n\t}],\n\t\"createdAt\": \"2026-05-18T23:53:41.098Z\",\n\t\"updatedAt\": \"2026-05-18T23:53:41.217Z\"\n};\nvar eshop_project_default = {\n\tformat,\n\tversion: 1,\n\tproject\n};\n//#endregion\n//#region src/features/behavior-model/infrastructure/seed/sampleSnapshots.ts\nvar featureModules = /* @__PURE__ */ Object.assign({\n\t\"/samples/eshop/account-auth.feature.json\": account_auth_feature_exports,\n\t\"/samples/eshop/cart-checkout.feature.json\": cart_checkout_feature_exports,\n\t\"/samples/eshop/catalog-reviews.feature.json\": catalog_reviews_feature_exports,\n\t\"/samples/eshop/order-fulfillment.feature.json\": order_fulfillment_feature_exports\n});\nvar projectModules = /* @__PURE__ */ Object.assign({ \"/samples/eshop/eshop.project.json\": eshop_project_exports });\nvar unwrap = (modules, key) => Object.values(modules).map((m) => {\n\tconst mod = m;\n\tconst direct = mod[key];\n\tif (direct) return direct;\n\treturn mod.default?.[key] ?? void 0;\n}).filter((v) => Boolean(v));\nvar sampleFeatureSnapshots = unwrap(featureModules, \"feature\");\nvar sampleProjectSnapshots = unwrap(projectModules, \"project\");\n//#endregion\n//#region src/features/projects/infrastructure/persistence/InMemoryProjectRepository.ts\nvar toSummary$1 = (p) => ({\n\tid: p.id,\n\tname: p.name,\n\tdescription: p.description,\n\ttags: normalizeTags(p.tags, {\n\t\ttype: p.customTagType,\n\t\tvalue: p.customTag\n\t}),\n\tfeatureCount: p.featureIds.length,\n\tcreatedAt: p.createdAt,\n\tupdatedAt: p.updatedAt\n});\nvar InMemoryProjectRepository = class {\n\tstore = /* @__PURE__ */ new Map();\n\tasync list() {\n\t\treturn Array.from(this.store.values()).sort((a, b) => (b.updatedAt ?? \"\").localeCompare(a.updatedAt ?? \"\")).map(toSummary$1);\n\t}\n\tasync get(id) {\n\t\treturn this.store.get(id) ?? null;\n\t}\n\tasync save(project) {\n\t\tthis.store.set(project.id, project);\n\t}\n\tasync delete(id) {\n\t\tthis.store.delete(id);\n\t}\n\tclear() {\n\t\tthis.store.clear();\n\t}\n};\n//#endregion\n//#region src/features/domains/infrastructure/persistence/InMemoryDomainRepository.ts\nvar toSummary = (d) => ({\n\tid: d.id,\n\tname: d.name,\n\tdescription: d.description,\n\tprojectCount: d.projectIds.length,\n\tcreatedAt: d.createdAt,\n\tupdatedAt: d.updatedAt\n});\nvar InMemoryDomainRepository = class {\n\tstore = /* @__PURE__ */ new Map();\n\tasync list() {\n\t\treturn Array.from(this.store.values()).sort((a, b) => (b.updatedAt ?? \"\").localeCompare(a.updatedAt ?? \"\")).map(toSummary);\n\t}\n\tasync get(id) {\n\t\treturn this.store.get(id) ?? null;\n\t}\n\tasync save(domain) {\n\t\tthis.store.set(domain.id, domain);\n\t}\n\tasync delete(id) {\n\t\tthis.store.delete(id);\n\t}\n\tclear() {\n\t\tthis.store.clear();\n\t}\n};\n//#endregion\n//#region src/features/implementation-status/infrastructure/persistence/InMemoryImplementationStatusRepository.ts\nvar InMemoryImplementationStatusRepository = class {\n\tbyId = /* @__PURE__ */ new Map();\n\tasync get(id) {\n\t\treturn this.byId.get(String(id)) ?? null;\n\t}\n\tasync save(status) {\n\t\tthis.byId.set(String(status.featureId), status);\n\t}\n\tasync delete(id) {\n\t\tthis.byId.delete(String(id));\n\t}\n};\n//#endregion\n//#region src/features/tag-palette/infrastructure/persistence/InMemoryTagPaletteRepository.ts\nvar InMemoryTagPaletteRepository = class {\n\tpalette;\n\tconstructor(palette = emptyTagPalette) {\n\t\tthis.palette = palette;\n\t}\n\tasync get() {\n\t\treturn this.palette;\n\t}\n\tasync save(palette) {\n\t\tthis.palette = palette;\n\t}\n};\n//#endregion\n//#region src/features/tag-palette/infrastructure/adapters/UseCaseTagOperations.ts\n/**\n* Wraps the renameTag use case as a TagOperations port. Used by callers\n* (tests, in-memory environments) that already hold the cross-aggregate\n* repositories and don't need an HTTP round trip.\n*/\nvar UseCaseTagOperations = class {\n\trun;\n\tconstructor(deps) {\n\t\tthis.run = renameTagUseCase(deps);\n\t}\n\trenameTag(input) {\n\t\treturn this.run(input);\n\t}\n};\n//#endregion\n//#region src/shared/domain/IdGenerator.ts\n/**\n* 8-char hex IDs. Short enough that tool payloads stay cheap, long enough\n* that collisions across a single feature are vanishingly rare (2^32 = 4B\n* combos; a feature with ~1k entities has ~1e-7 collision odds).\n*\n* Legacy snapshots may still hold 36-char v4 UUIDs minted before this\n* switch. Both shapes coexist, IDs are opaque strings end-to-end, and the\n* input expander resolves short prefixes against the loaded feature so an\n* 8-char prefix matches a 36-char stored ID by prefix.\n*/\nvar cryptoIdGenerator = () => {\n\tif (typeof crypto !== \"undefined\" && typeof crypto.getRandomValues === \"function\") {\n\t\tconst bytes = new Uint8Array(4);\n\t\tcrypto.getRandomValues(bytes);\n\t\treturn Array.from(bytes, (b) => b.toString(16).padStart(2, \"0\")).join(\"\");\n\t}\n\treturn Math.floor(Math.random() * 4294967295).toString(16).padStart(8, \"0\");\n};\n//#endregion\n//#region src/features/behavior-model/application/use-cases/CreateFeature.ts\nvar createFeatureUseCase = (deps) => {\n\treturn async (input) => {\n\t\tconst trimmedName = input.name.trim();\n\t\tif (trimmedName.length === 0) throw new Error(\"Feature name is required\");\n\t\tconst trimmedDescription = input.description?.trim() ?? \"\";\n\t\tif (trimmedDescription.length === 0) throw new Error(\"Feature description is required\");\n\t\tconst now = deps.clock();\n\t\tconst feature = {\n\t\t\tid: asFeatureId(deps.ids()),\n\t\t\tname: trimmedName,\n\t\t\tdescription: trimmedDescription,\n\t\t\t...normalizeTags(input.tags) ? { tags: normalizeTags(input.tags) } : {},\n\t\t\tsurfaces: [],\n\t\t\tpersonas: [],\n\t\t\tresources: [],\n\t\t\tentities: [],\n\t\t\tevents: [],\n\t\t\tcreatedAt: now,\n\t\t\tupdatedAt: now\n\t\t};\n\t\tawait deps.repository.save(feature);\n\t\treturn feature;\n\t};\n};\n//#endregion\n//#region src/features/behavior-model/domain/value-objects/slug.ts\n/**\n* Convert a free-form name into a stable kebab-case slug suitable for use\n* inside source-code tags. Pure, lossy by design: two names that collide on\n* slug should be disambiguated upstream (the audit tool surfaces the raw\n* name + slug so the LLM can pick a uniqueness suffix if needed).\n*\n* Examples:\n* \"Add to cart\" → \"add-to-cart\"\n* \"Sign in / sign up\" → \"sign-in-sign-up\"\n* \" Multi spaces \" → \"multi-spaces\"\n*/\nvar toSlug = (name) => {\n\tconst trimmed = name.trim().toLowerCase();\n\tif (trimmed.length === 0) return \"\";\n\treturn trimmed.replace(/[^a-z0-9]+/g, \"-\").replace(/^-+|-+$/g, \"\").replace(/-+/g, \"-\");\n};\n//#endregion\n//#region src/features/implementation-status/domain/ImplementationBreakdown.ts\nvar pct = (found, expected) => expected === 0 ? 100 : Math.round(found / expected * 100);\n/**\n* Mirror of `auditImplementationTool`'s tag policy. We compute the spec-side\n* expected entities here too so the UI doesn't depend on a sidecar report\n* being present. A fresh, never-audited action still shows the right\n* entity rows, just with no `found` data attached.\n*/\nvar buildExpectedForCapability = (action) => {\n\tconst slug = toSlug(action.name) || String(action.id);\n\tconst out = [{\n\t\tentityType: \"action\",\n\t\tentityId: String(action.id),\n\t\tentityName: action.name,\n\t\ttag: `@unspa:action:${slug}`\n\t}];\n\tfor (const e of action.emittedEvents) {\n\t\tconst name = String(e);\n\t\tout.push({\n\t\t\tentityType: \"event\",\n\t\t\tentityId: name,\n\t\t\tentityName: name,\n\t\t\ttag: `@unspa:${slug}#${name}`\n\t\t});\n\t}\n\tfor (const r of action.rules) out.push({\n\t\tentityType: \"rule\",\n\t\tentityId: String(r.id),\n\t\tentityName: r.description,\n\t\ttag: `@unspa:rule:${String(r.id)}`\n\t});\n\tfor (const inv of action.invariants) {\n\t\tconst invSlug = toSlug(inv.name) || String(inv.id);\n\t\tout.push({\n\t\t\tentityType: \"invariant\",\n\t\t\tentityId: String(inv.id),\n\t\t\tentityName: inv.name,\n\t\t\ttag: `@unspa:invariant:${invSlug}`\n\t\t});\n\t}\n\tfor (const t of action.transitions) out.push({\n\t\tentityType: \"transition\",\n\t\tentityId: String(t.id),\n\t\tentityName: t.label,\n\t\ttag: `@unspa:transition:${String(t.id)}`\n\t});\n\treturn out;\n};\nvar buildExpectedForSurface = (surface) => {\n\tconst out = [];\n\tfor (const sd of surface.stateDefinitions) {\n\t\tconst path = String(sd.path);\n\t\tout.push({\n\t\t\tentityType: \"state\",\n\t\t\tentityId: String(sd.id),\n\t\t\tentityName: path,\n\t\t\ttag: `@unspa:state:${path}`\n\t\t});\n\t}\n\tfor (const r of surface.rules) out.push({\n\t\tentityType: \"surface_rule\",\n\t\tentityId: String(r.id),\n\t\tentityName: r.description,\n\t\ttag: `@unspa:surface_rule:${String(r.id)}`\n\t});\n\tfor (const inv of surface.invariants) {\n\t\tconst slug = toSlug(inv.name) || String(inv.id);\n\t\tout.push({\n\t\t\tentityType: \"surface_invariant\",\n\t\t\tentityId: String(inv.id),\n\t\t\tentityName: inv.name,\n\t\t\ttag: `@unspa:surface_invariant:${slug}`\n\t\t});\n\t}\n\treturn out;\n};\nvar keyOf = (entityType, entityId) => `${entityType}:${entityId}`;\nvar buildCapabilityEntry = (action, status) => {\n\tconst expected = buildExpectedForCapability(action);\n\tconst expectedKeys = new Set(expected.map((e) => keyOf(e.entityType, e.entityId)));\n\tif (!status) return {\n\t\taction,\n\t\tstatus: null,\n\t\texpected,\n\t\tfound: [],\n\t\tmissing: expected.map((e) => ({\n\t\t\tentityType: e.entityType,\n\t\t\tentityId: e.entityId,\n\t\t\tentityName: e.entityName,\n\t\t\ttag: e.tag\n\t\t})),\n\t\texpectedCount: expected.length,\n\t\tfoundCount: 0,\n\t\tmissingCount: expected.length,\n\t\textraCount: 0,\n\t\tpercentage: expected.length === 0 ? 100 : 0,\n\t\treported: false\n\t};\n\tconst foundForExpected = status.foundEntities.filter((f) => expectedKeys.has(keyOf(f.entityType, f.entityId)));\n\tconst foundKeys = new Set(foundForExpected.map((f) => keyOf(f.entityType, f.entityId)));\n\tconst missing = expected.filter((e) => !foundKeys.has(keyOf(e.entityType, e.entityId))).map((e) => ({\n\t\tentityType: e.entityType,\n\t\tentityId: e.entityId,\n\t\tentityName: e.entityName,\n\t\ttag: e.tag\n\t}));\n\treturn {\n\t\taction,\n\t\tstatus,\n\t\texpected,\n\t\tfound: foundForExpected,\n\t\tmissing,\n\t\texpectedCount: expected.length,\n\t\tfoundCount: foundForExpected.length,\n\t\tmissingCount: missing.length,\n\t\textraCount: status.extraTags.length,\n\t\tpercentage: pct(foundForExpected.length, expected.length),\n\t\treported: true\n\t};\n};\nvar buildSurfaceLevelEntry = (surface, status) => {\n\tconst expected = buildExpectedForSurface(surface);\n\tconst expectedKeys = new Set(expected.map((e) => keyOf(e.entityType, e.entityId)));\n\tif (!status) return {\n\t\tstatus: null,\n\t\texpected,\n\t\tfound: [],\n\t\tmissing: expected.map((e) => ({\n\t\t\tentityType: e.entityType,\n\t\t\tentityId: e.entityId,\n\t\t\tentityName: e.entityName,\n\t\t\ttag: e.tag\n\t\t})),\n\t\texpectedCount: expected.length,\n\t\tfoundCount: 0,\n\t\tmissingCount: expected.length,\n\t\textraCount: 0,\n\t\tpercentage: expected.length === 0 ? 100 : 0,\n\t\treported: false\n\t};\n\tconst foundForExpected = status.foundEntities.filter((f) => expectedKeys.has(keyOf(f.entityType, f.entityId)));\n\tconst foundKeys = new Set(foundForExpected.map((f) => keyOf(f.entityType, f.entityId)));\n\tconst missing = expected.filter((e) => !foundKeys.has(keyOf(e.entityType, e.entityId))).map((e) => ({\n\t\tentityType: e.entityType,\n\t\tentityId: e.entityId,\n\t\tentityName: e.entityName,\n\t\ttag: e.tag\n\t}));\n\treturn {\n\t\tstatus,\n\t\texpected,\n\t\tfound: foundForExpected,\n\t\tmissing,\n\t\texpectedCount: expected.length,\n\t\tfoundCount: foundForExpected.length,\n\t\tmissingCount: missing.length,\n\t\textraCount: status.extraTags.length,\n\t\tpercentage: pct(foundForExpected.length, expected.length),\n\t\treported: true\n\t};\n};\nvar computeImplementationBreakdown = (feature, status) => {\n\tconst byAction = /* @__PURE__ */ new Map();\n\tconst bySurface = /* @__PURE__ */ new Map();\n\tif (status) {\n\t\tfor (const cap of status.actions) byAction.set(String(cap.actionId), cap);\n\t\tfor (const s of status.surfaces) bySurface.set(String(s.surfaceId), s);\n\t}\n\tlet totalExpected = 0;\n\tlet totalFound = 0;\n\tlet totalMissing = 0;\n\tlet totalExtra = 0;\n\tlet totalReported = 0;\n\tlet totalWithExpected = 0;\n\tconst perSurface = feature.surfaces.map((surface) => {\n\t\tconst entries = surface.actions.map((action) => buildCapabilityEntry(action, byAction.get(String(action.id)) ?? null));\n\t\tconst surfaceLevel = buildSurfaceLevelEntry(surface, bySurface.get(String(surface.id)) ?? null);\n\t\tlet surfaceExpected = surfaceLevel.expectedCount;\n\t\tlet surfaceFound = surfaceLevel.foundCount;\n\t\tlet surfaceMissing = surfaceLevel.missingCount;\n\t\tlet surfaceExtra = surfaceLevel.extraCount;\n\t\tlet surfaceReported = 0;\n\t\tlet surfaceWithExpected = 0;\n\t\tfor (const entry of entries) {\n\t\t\tsurfaceExpected += entry.expectedCount;\n\t\t\tsurfaceFound += entry.foundCount;\n\t\t\tsurfaceMissing += entry.missingCount;\n\t\t\tsurfaceExtra += entry.extraCount;\n\t\t\tif (entry.expectedCount > 0) surfaceWithExpected += 1;\n\t\t\tif (entry.reported) surfaceReported += 1;\n\t\t}\n\t\ttotalExpected += surfaceExpected;\n\t\ttotalFound += surfaceFound;\n\t\ttotalMissing += surfaceMissing;\n\t\ttotalExtra += surfaceExtra;\n\t\ttotalReported += surfaceReported;\n\t\ttotalWithExpected += surfaceWithExpected;\n\t\treturn {\n\t\t\tsurface,\n\t\t\tsurfaceLevel,\n\t\t\tperAction: entries,\n\t\t\texpectedCount: surfaceExpected,\n\t\t\tfoundCount: surfaceFound,\n\t\t\tmissingCount: surfaceMissing,\n\t\t\textraCount: surfaceExtra,\n\t\t\tpercentage: pct(surfaceFound, surfaceExpected),\n\t\t\treportedCount: surfaceReported,\n\t\t\tcapabilitiesWithExpected: surfaceWithExpected\n\t\t};\n\t});\n\treturn {\n\t\thasReport: status !== null,\n\t\trevision: status?.revision ?? 0,\n\t\tupdatedAt: status?.updatedAt ?? null,\n\t\tperSurface,\n\t\texpectedCount: totalExpected,\n\t\tfoundCount: totalFound,\n\t\tmissingCount: totalMissing,\n\t\textraCount: totalExtra,\n\t\tpercentage: pct(totalFound, totalExpected),\n\t\treportedCount: totalReported,\n\t\tcapabilitiesWithExpected: totalWithExpected\n\t};\n};\n//#endregion\n//#region src/features/behavior-model/application/use-cases/GetFeatureCard.ts\nvar getFeatureCardUseCase = (deps) => {\n\treturn async (id) => {\n\t\tconst [feature, status] = await Promise.all([deps.repository.get(id), deps.statusRepository.get(id)]);\n\t\tif (!feature) return null;\n\t\tconst report = scoreFeature(feature);\n\t\tconst impl = computeImplementationBreakdown(feature, status);\n\t\treturn {\n\t\t\tid: feature.id,\n\t\t\tname: feature.name,\n\t\t\tdescription: feature.description,\n\t\t\ttags: feature.tags,\n\t\t\tsurfaceCount: feature.surfaces.length,\n\t\t\tactionCount: feature.surfaces.reduce((acc, s) => acc + s.actions.length, 0),\n\t\t\tcreatedAt: feature.createdAt,\n\t\t\tupdatedAt: feature.updatedAt,\n\t\t\tmaturityPercentage: report.percentage,\n\t\t\tcriticalIssueCount: report.criticalIssues.length,\n\t\t\trecommendedIssueCount: report.recommendedIssues.length,\n\t\t\timplementationPercentage: impl.expectedCount === 0 ? null : impl.percentage,\n\t\t\timplementationFoundCount: impl.foundCount,\n\t\t\timplementationExpectedCount: impl.expectedCount,\n\t\t\timplementationHasReport: impl.hasReport\n\t\t};\n\t};\n};\n//#endregion\n//#region src/features/behavior-model/application/use-cases/ListFeatures.ts\nvar listFeaturesUseCase = (deps) => {\n\treturn async () => {\n\t\treturn deps.repository.list();\n\t};\n};\n//#endregion\n//#region src/features/behavior-model/application/use-cases/ListFeaturesWithMaturity.ts\nvar listFeaturesWithMaturityUseCase = (deps) => {\n\treturn async () => {\n\t\tconst summaries = await deps.repository.list();\n\t\treturn await Promise.all(summaries.map(async (summary) => {\n\t\t\tconst [full, status] = await Promise.all([deps.repository.get(summary.id), deps.statusRepository.get(summary.id)]);\n\t\t\tif (!full) return {\n\t\t\t\t...summary,\n\t\t\t\tmaturityPercentage: 100,\n\t\t\t\tcriticalIssueCount: 0,\n\t\t\t\trecommendedIssueCount: 0,\n\t\t\t\timplementationPercentage: null,\n\t\t\t\timplementationFoundCount: 0,\n\t\t\t\timplementationExpectedCount: 0,\n\t\t\t\timplementationHasReport: false\n\t\t\t};\n\t\t\tconst report = scoreFeature(full);\n\t\t\tconst impl = computeImplementationBreakdown(full, status);\n\t\t\treturn {\n\t\t\t\t...summary,\n\t\t\t\tmaturityPercentage: report.percentage,\n\t\t\t\tcriticalIssueCount: report.criticalIssues.length,\n\t\t\t\trecommendedIssueCount: report.recommendedIssues.length,\n\t\t\t\timplementationPercentage: impl.expectedCount === 0 ? null : impl.percentage,\n\t\t\t\timplementationFoundCount: impl.foundCount,\n\t\t\t\timplementationExpectedCount: impl.expectedCount,\n\t\t\t\timplementationHasReport: impl.hasReport\n\t\t\t};\n\t\t}));\n\t};\n};\n//#endregion\n//#region src/features/behavior-model/application/use-cases/LoadSamples.ts\nvar loadSamplesUseCase = (deps) => {\n\treturn async () => {\n\t\tconst addedFeatures = [];\n\t\tconst skippedFeatures = [];\n\t\tconst addedProjects = [];\n\t\tconst skippedProjects = [];\n\t\tfor (const sample of deps.samples) {\n\t\t\tif (await deps.repository.get(sample.id)) {\n\t\t\t\tskippedFeatures.push({\n\t\t\t\t\tid: String(sample.id),\n\t\t\t\t\tname: sample.name\n\t\t\t\t});\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tawait deps.repository.save(sample);\n\t\t\taddedFeatures.push({\n\t\t\t\tid: String(sample.id),\n\t\t\t\tname: sample.name\n\t\t\t});\n\t\t}\n\t\tfor (const project of deps.projectSamples) {\n\t\t\tif (await deps.projectRepository.get(project.id)) {\n\t\t\t\tskippedProjects.push({\n\t\t\t\t\tid: String(project.id),\n\t\t\t\t\tname: project.name\n\t\t\t\t});\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tawait deps.projectRepository.save(project);\n\t\t\taddedProjects.push({\n\t\t\t\tid: String(project.id),\n\t\t\t\tname: project.name\n\t\t\t});\n\t\t}\n\t\treturn {\n\t\t\taddedProjects,\n\t\t\taddedFeatures,\n\t\t\tskippedProjects,\n\t\t\tskippedFeatures\n\t\t};\n\t};\n};\n//#endregion\n//#region src/features/simulator/application/use-cases/SimulateAction.ts\nvar simulateActionUseCase = () => {\n\treturn (input) => {\n\t\tconst surface = input.feature.surfaces.find((s) => s.id === input.surfaceId);\n\t\tif (!surface) throw new Error(`Surface ${input.surfaceId} not found`);\n\t\tconst action = surface.actions.find((c) => c.id === input.actionId);\n\t\tif (!action) throw new Error(`Action ${input.actionId} not found`);\n\t\treturn simulate({\n\t\t\tsurface,\n\t\t\taction,\n\t\t\tsnapshot: input.snapshot,\n\t\t\tparameters: input.parameters,\n\t\t\tfeatureInvariants: input.feature.featureInvariants,\n\t\t\tfeature: input.feature,\n\t\t\t...input.projectFeatures ? { projectFeatures: input.projectFeatures } : {}\n\t\t});\n\t};\n};\n//#endregion\n//#region src/features/maturity/application/use-cases/ScoreFeature.ts\nvar scoreFeatureUseCase = () => {\n\treturn (feature) => scoreFeature(feature);\n};\n//#endregion\n//#region src/features/projects/application/use-cases/CreateProject.ts\nvar createProjectUseCase = (deps) => {\n\treturn async (input) => {\n\t\tconst trimmedName = input.name.trim();\n\t\tif (trimmedName.length === 0) throw new Error(\"Project name is required\");\n\t\tconst trimmedDescription = input.description?.trim() ?? \"\";\n\t\tif (trimmedDescription.length === 0) throw new Error(\"Project description is required\");\n\t\tconst now = deps.clock();\n\t\tconst trimmedTagType = input.customTagType?.trim() ?? \"\";\n\t\tconst trimmedTag = input.customTag?.trim() ?? \"\";\n\t\tconst tags = normalizeTags(input.tags, {\n\t\t\ttype: trimmedTagType,\n\t\t\tvalue: trimmedTag\n\t\t});\n\t\tconst project = {\n\t\t\tid: asProjectId(deps.ids()),\n\t\t\tname: trimmedName,\n\t\t\tdescription: trimmedDescription,\n\t\t\t...tags ? { tags } : {},\n\t\t\tfeatureIds: [],\n\t\t\tcreatedAt: now,\n\t\t\tupdatedAt: now\n\t\t};\n\t\tawait deps.repository.save(project);\n\t\treturn project;\n\t};\n};\n//#endregion\n//#region src/features/projects/application/use-cases/ListProjects.ts\nvar listProjectsUseCase = (deps) => {\n\treturn async () => {\n\t\treturn deps.repository.list();\n\t};\n};\n//#endregion\n//#region src/features/projects/application/use-cases/AddFeatureToProject.ts\nvar addFeatureToProjectUseCase = (deps) => {\n\treturn async (projectId, featureId) => {\n\t\tconst project = await deps.repository.get(projectId);\n\t\tif (!project) throw new Error(`Project ${projectId} not found`);\n\t\tif (project.featureIds.includes(featureId)) return project;\n\t\tconst next = {\n\t\t\t...project,\n\t\t\tfeatureIds: [...project.featureIds, featureId],\n\t\t\tupdatedAt: deps.clock()\n\t\t};\n\t\tawait deps.repository.save(next);\n\t\treturn next;\n\t};\n};\n//#endregion\n//#region src/features/projects/application/use-cases/RemoveFeatureFromProject.ts\nvar removeFeatureFromProjectUseCase = (deps) => {\n\treturn async (projectId, featureId) => {\n\t\tconst project = await deps.repository.get(projectId);\n\t\tif (!project) throw new Error(`Project ${projectId} not found`);\n\t\tif (!project.featureIds.includes(featureId)) return project;\n\t\tconst next = {\n\t\t\t...project,\n\t\t\tfeatureIds: project.featureIds.filter((id) => id !== featureId),\n\t\t\tupdatedAt: deps.clock()\n\t\t};\n\t\tawait deps.repository.save(next);\n\t\treturn next;\n\t};\n};\n//#endregion\n//#region src/features/projects/application/use-cases/MoveFeatureInProject.ts\nvar moveFeatureInProjectUseCase = (deps) => {\n\treturn async (projectId, featureId, direction) => {\n\t\tconst project = await deps.repository.get(projectId);\n\t\tif (!project) throw new Error(`Project ${projectId} not found`);\n\t\tconst idx = project.featureIds.indexOf(featureId);\n\t\tif (idx < 0) throw new Error(`Feature ${featureId} is not attached to project ${projectId}`);\n\t\tconst target = direction === \"up\" ? idx - 1 : idx + 1;\n\t\tif (target < 0 || target >= project.featureIds.length) return project;\n\t\tconst next = project.featureIds.slice();\n\t\t[next[idx], next[target]] = [next[target], next[idx]];\n\t\tconst updated = {\n\t\t\t...project,\n\t\t\tfeatureIds: next,\n\t\t\tupdatedAt: deps.clock()\n\t\t};\n\t\tawait deps.repository.save(updated);\n\t\treturn updated;\n\t};\n};\n//#endregion\n//#region src/features/projects/application/use-cases/GetProjectAggregate.ts\nvar getProjectAggregateUseCase = (deps) => {\n\treturn async (projectId) => {\n\t\tconst project = await deps.projects.get(projectId);\n\t\tif (!project) return null;\n\t\tconst loaded = [];\n\t\tconst missingFeatureIds = [];\n\t\tfor (const id of project.featureIds) {\n\t\t\tconst exp = await deps.features.get(id);\n\t\t\tif (exp) loaded.push(exp);\n\t\t\telse missingFeatureIds.push(id);\n\t\t}\n\t\tconst resources = [];\n\t\tconst data = [];\n\t\tconst events = [];\n\t\tconst transitions = [];\n\t\tfor (const exp of loaded) {\n\t\t\tfor (const r of exp.resources) resources.push({\n\t\t\t\tfeatureId: exp.id,\n\t\t\t\tfeatureName: exp.name,\n\t\t\t\tid: String(r.id),\n\t\t\t\tname: r.name,\n\t\t\t\tkind: r.kind,\n\t\t\t\tprovider: r.provider,\n\t\t\t\tsensitivity: r.sensitivity\n\t\t\t});\n\t\t\tfor (const d of exp.entities) data.push({\n\t\t\t\tfeatureId: exp.id,\n\t\t\t\tfeatureName: exp.name,\n\t\t\t\tid: String(d.id),\n\t\t\t\tnamespace: d.namespace,\n\t\t\t\tfieldCount: d.fields.length\n\t\t\t});\n\t\t\tfor (const e of exp.events ?? []) events.push({\n\t\t\t\tfeatureId: exp.id,\n\t\t\t\tfeatureName: exp.name,\n\t\t\t\tid: String(e.id),\n\t\t\t\tname: String(e.name)\n\t\t\t});\n\t\t\tfor (const surface of exp.surfaces) for (const t of surface.transitions) transitions.push({\n\t\t\t\tfeatureId: exp.id,\n\t\t\t\tfeatureName: exp.name,\n\t\t\t\tsurfaceId: String(surface.id),\n\t\t\t\tsurfaceName: surface.name,\n\t\t\t\tid: String(t.id),\n\t\t\t\t...t.label !== void 0 ? { label: t.label } : {},\n\t\t\t\ttarget: String(t.target)\n\t\t\t});\n\t\t}\n\t\treturn {\n\t\t\tprojectId: project.id,\n\t\t\tprojectName: project.name,\n\t\t\tfeatureCount: project.featureIds.length,\n\t\t\tfeatures: loaded.map((e) => ({\n\t\t\t\tid: e.id,\n\t\t\t\tname: e.name\n\t\t\t})),\n\t\t\tmissingFeatureIds,\n\t\t\tresources,\n\t\t\tdata,\n\t\t\tevents,\n\t\t\ttransitions\n\t\t};\n\t};\n};\n//#endregion\n//#region src/features/projects/application/use-cases/FindProjectContainingFeature.ts\n/**\n* Returns the first project that lists this feature id, or null if none.\n* Used by the feature editor so each feature can resolve its\n* project context and surface sibling features' resources/data/events\n* as part of the same logical \"product\".\n*/\nvar findProjectContainingFeatureUseCase = (deps) => {\n\treturn async (featureId) => {\n\t\tconst summaries = await deps.repository.list();\n\t\tfor (const summary of summaries) {\n\t\t\tconst project = await deps.repository.get(summary.id);\n\t\t\tif (!project) continue;\n\t\t\tif (project.featureIds.some((id) => id === featureId)) return project;\n\t\t}\n\t\treturn null;\n\t};\n};\n//#endregion\n//#region src/features/implementation-queue/domain/services/QueueOperations.ts\n/**\n* Pure ordered-list operations on a Project's implementation queue. Every\n* function returns a new array; the input is never mutated. The use cases\n* compose these helpers and persist the result via ProjectRepository.save,\n* so the persistence-vs-domain split stays clean.\n*/\nvar indexById = (queue, id) => queue.findIndex((q) => q.id === id);\nvar indexByKey = (queue, key) => queue.findIndex((q) => queueItemKey(q) === key);\n/**\n* Append `item` to the end of the queue unless an entry with the same\n* (kind, featureId, actionId?) key already exists, in which case the\n* existing entry is returned untouched. Idempotent so \"queue this action\"\n* called twice from a fast double-click doesn't produce two rows.\n*/\nvar enqueue = (queue, item) => {\n\tif (indexByKey(queue, queueItemKey(item)) >= 0) return queue;\n\treturn [...queue, item];\n};\n/** Remove a queue entry by its opaque QueueItemId. No-op when not found. */\nvar dequeue = (queue, id) => {\n\tconst idx = indexById(queue, id);\n\tif (idx < 0) return queue;\n\treturn [...queue.slice(0, idx), ...queue.slice(idx + 1)];\n};\n/**\n* Move an entry to an arbitrary index (drag-and-drop in the UI). The\n* target index is clamped into [0, queue.length-1] so an over-drag at\n* the bottom of the list becomes \"place last\" instead of an error. No-op\n* when the entry is not found.\n*/\nvar moveTo = (queue, id, targetIndex) => {\n\tconst idx = indexById(queue, id);\n\tif (idx < 0) return queue;\n\tconst clamped = Math.max(0, Math.min(queue.length - 1, targetIndex));\n\tif (clamped === idx) return queue;\n\tconst next = queue.slice();\n\tconst [removed] = next.splice(idx, 1);\n\tnext.splice(clamped, 0, removed);\n\treturn next;\n};\n/**\n* Reorder by relative direction. Matches the MoveFeatureInProject and\n* move_action ergonomics so the MCP surface is consistent (\"up\" / \"down\")\n* even though the UI uses absolute drag positions.\n*/\nvar moveBy = (queue, id, direction) => {\n\tconst idx = indexById(queue, id);\n\tif (idx < 0) return queue;\n\treturn moveTo(queue, id, direction === \"up\" ? idx - 1 : idx + 1);\n};\n/** True when the queue already holds an entry for this target. */\nvar isQueued = (queue, key) => indexByKey(queue, key) >= 0;\n/**\n* Attach (or, with `undefined`, clear) an implementation `target` on the entry\n* with `id`. Returns the same array reference when the entry is not found so\n* callers can skip a persist. The discriminant `kind` is preserved.\n*/\nvar setTarget = (queue, id, target) => {\n\tconst idx = indexById(queue, id);\n\tif (idx < 0) return queue;\n\tconst { target: _omit, ...rest } = queue[idx];\n\tconst next = isEmptyTarget(target) ? rest : {\n\t\t...rest,\n\t\ttarget\n\t};\n\treturn [\n\t\t...queue.slice(0, idx),\n\t\tnext,\n\t\t...queue.slice(idx + 1)\n\t];\n};\n//#endregion\n//#region src/features/implementation-queue/application/use-cases/EnqueueQueueItem.ts\nvar ProjectNotFoundForQueueError = class extends Error {\n\tconstructor(projectId) {\n\t\tsuper(`Project ${projectId} not found`);\n\t\tthis.name = \"ProjectNotFoundForQueueError\";\n\t}\n};\nvar FeatureNotInProjectError = class extends Error {\n\tconstructor(featureId, projectId) {\n\t\tsuper(`Feature ${featureId} is not attached to project ${projectId}`);\n\t\tthis.name = \"FeatureNotInProjectError\";\n\t}\n};\nvar ActionNotInFeatureError = class extends Error {\n\tconstructor(actionId, featureId) {\n\t\tsuper(`Action ${actionId} is not part of feature ${featureId}`);\n\t\tthis.name = \"ActionNotInFeatureError\";\n\t}\n};\nvar SurfaceNotInFeatureError = class extends Error {\n\tconstructor(surfaceId, featureId) {\n\t\tsuper(`Surface ${surfaceId} is not part of feature ${featureId}`);\n\t\tthis.name = \"SurfaceNotInFeatureError\";\n\t}\n};\n/**\n* Enqueue validates the target before persisting: a queue entry pointing\n* at a feature not in the project, or an action not in the feature, would\n* be unreachable from the rest of the UI and create silent rot. We fail\n* fast at the boundary instead of silently storing dead pointers.\n*/\nvar enqueueQueueItemUseCase = (deps) => {\n\treturn async (projectId, input) => {\n\t\tconst project = await deps.projects.get(projectId);\n\t\tif (!project) throw new ProjectNotFoundForQueueError(projectId);\n\t\tif (!project.featureIds.includes(input.featureId)) throw new FeatureNotInProjectError(input.featureId, projectId);\n\t\tif (input.kind === \"surface\" || input.kind === \"action\") {\n\t\t\tconst feature = await deps.features.get(input.featureId);\n\t\t\tif (!feature) throw new FeatureNotInProjectError(input.featureId, projectId);\n\t\t\tif (input.kind === \"surface\") {\n\t\t\t\tif (!feature.surfaces.some((s) => s.id === input.surfaceId)) throw new SurfaceNotInFeatureError(input.surfaceId, input.featureId);\n\t\t\t} else if (!feature.surfaces.some((s) => s.actions.some((a) => a.id === input.actionId))) throw new ActionNotInFeatureError(input.actionId, input.featureId);\n\t\t}\n\t\tconst queue = project.implementationQueue ?? [];\n\t\tconst newItem = buildItem(input, deps);\n\t\tconst targetKey = queueItemKey(newItem);\n\t\tif (isQueued(queue, targetKey)) return {\n\t\t\tproject,\n\t\t\titem: queue.find((q) => queueItemKey(q) === targetKey),\n\t\t\talreadyQueued: true\n\t\t};\n\t\tconst next = {\n\t\t\t...project,\n\t\t\timplementationQueue: enqueue(queue, newItem),\n\t\t\tupdatedAt: deps.clock()\n\t\t};\n\t\tawait deps.projects.save(next);\n\t\treturn {\n\t\t\tproject: next,\n\t\t\titem: newItem,\n\t\t\talreadyQueued: false\n\t\t};\n\t};\n};\n/**\n* Discriminated-union → QueueItem constructor. Kept local because it's\n* only meaningful inside enqueue (everywhere else, items already exist).\n*/\nvar buildItem = (input, deps) => {\n\tconst id = asQueueItemId(deps.ids());\n\tconst addedAt = deps.clock();\n\tconst note = input.note ? { note: input.note } : {};\n\tconst target = input.target ? { target: input.target } : {};\n\tswitch (input.kind) {\n\t\tcase \"feature\": return {\n\t\t\tid,\n\t\t\tkind: \"feature\",\n\t\t\tfeatureId: input.featureId,\n\t\t\taddedAt,\n\t\t\t...note,\n\t\t\t...target\n\t\t};\n\t\tcase \"surface\": return {\n\t\t\tid,\n\t\t\tkind: \"surface\",\n\t\t\tfeatureId: input.featureId,\n\t\t\tsurfaceId: input.surfaceId,\n\t\t\taddedAt,\n\t\t\t...note,\n\t\t\t...target\n\t\t};\n\t\tcase \"action\": return {\n\t\t\tid,\n\t\t\tkind: \"action\",\n\t\t\tfeatureId: input.featureId,\n\t\t\tactionId: input.actionId,\n\t\t\taddedAt,\n\t\t\t...note,\n\t\t\t...target\n\t\t};\n\t}\n};\n//#endregion\n//#region src/features/implementation-queue/application/use-cases/DequeueQueueItem.ts\n/**\n* Remove a queue entry by its opaque id. Idempotent: dequeueing an id\n* that no longer exists is a no-op (returns the project unchanged) so\n* a stale \"remove\" from a slow UI doesn't error out.\n*/\nvar dequeueQueueItemUseCase = (deps) => {\n\treturn async (projectId, queueItemId) => {\n\t\tconst project = await deps.projects.get(projectId);\n\t\tif (!project) throw new ProjectNotFoundForQueueError(projectId);\n\t\tconst queue = project.implementationQueue ?? [];\n\t\tconst nextQueue = dequeue(queue, queueItemId);\n\t\tif (nextQueue === queue) return project;\n\t\tconst next = {\n\t\t\t...project,\n\t\t\timplementationQueue: nextQueue,\n\t\t\tupdatedAt: deps.clock()\n\t\t};\n\t\tawait deps.projects.save(next);\n\t\treturn next;\n\t};\n};\n//#endregion\n//#region src/features/implementation-queue/application/use-cases/MoveQueueItem.ts\nvar moveQueueItemUseCase = (deps) => {\n\treturn async (projectId, queueItemId, input) => {\n\t\tconst project = await deps.projects.get(projectId);\n\t\tif (!project) throw new ProjectNotFoundForQueueError(projectId);\n\t\tconst queue = project.implementationQueue ?? [];\n\t\tconst nextQueue = input.kind === \"to\" ? moveTo(queue, queueItemId, input.targetIndex) : moveBy(queue, queueItemId, input.direction);\n\t\tif (nextQueue === queue) return project;\n\t\tconst next = {\n\t\t\t...project,\n\t\t\timplementationQueue: nextQueue,\n\t\t\tupdatedAt: deps.clock()\n\t\t};\n\t\tawait deps.projects.save(next);\n\t\treturn next;\n\t};\n};\n//#endregion\n//#region src/features/implementation-queue/application/use-cases/ListQueue.ts\n/**\n* Returns the project's raw queue order, enriched with labels. The\n* \"is implemented\" predicate is intentionally NOT applied here — the\n* caller (MCP or UI) layers its own done-detection on top via\n* `get_implementation_status` (MCP) or the implementationStatusStore\n* (dashboard), because the two sides see status from different\n* sources of truth and we don't want the queue domain to depend on\n* either one.\n*/\nvar listQueueUseCase = (deps) => {\n\treturn async (projectId) => {\n\t\tconst project = await deps.projects.get(projectId);\n\t\tif (!project) throw new ProjectNotFoundForQueueError(projectId);\n\t\tconst queue = project.implementationQueue ?? [];\n\t\tif (queue.length === 0) return [];\n\t\tconst cache = /* @__PURE__ */ new Map();\n\t\tconst resolveFeature = async (featureId) => {\n\t\t\tconst key = String(featureId);\n\t\t\tif (cache.has(key)) return cache.get(key);\n\t\t\tconst f = await deps.features.get(featureId);\n\t\t\tcache.set(key, f);\n\t\t\treturn f;\n\t\t};\n\t\tconst views = [];\n\t\tfor (const item of queue) {\n\t\t\tconst feature = await resolveFeature(item.featureId);\n\t\t\tif (!feature) {\n\t\t\t\tviews.push({\n\t\t\t\t\titem,\n\t\t\t\t\tfeatureName: `(missing feature ${item.featureId})`,\n\t\t\t\t\torphaned: true\n\t\t\t\t});\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (item.kind === \"feature\") {\n\t\t\t\tviews.push({\n\t\t\t\t\titem,\n\t\t\t\t\tfeatureName: feature.name,\n\t\t\t\t\torphaned: false\n\t\t\t\t});\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (item.kind === \"surface\") {\n\t\t\t\tconst surface = feature.surfaces.find((s) => s.id === item.surfaceId);\n\t\t\t\tif (!surface) {\n\t\t\t\t\tviews.push({\n\t\t\t\t\t\titem,\n\t\t\t\t\t\tfeatureName: feature.name,\n\t\t\t\t\t\tsurfaceName: `(missing surface ${item.surfaceId})`,\n\t\t\t\t\t\torphaned: true\n\t\t\t\t\t});\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tviews.push({\n\t\t\t\t\titem,\n\t\t\t\t\tfeatureName: feature.name,\n\t\t\t\t\tsurfaceName: surface.name,\n\t\t\t\t\torphaned: false\n\t\t\t\t});\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst action = feature.surfaces.flatMap((s) => s.actions).find((a) => a.id === item.actionId);\n\t\t\tif (!action) {\n\t\t\t\tviews.push({\n\t\t\t\t\titem,\n\t\t\t\t\tfeatureName: feature.name,\n\t\t\t\t\tactionName: `(missing action ${item.actionId})`,\n\t\t\t\t\torphaned: true\n\t\t\t\t});\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tviews.push({\n\t\t\t\titem,\n\t\t\t\tfeatureName: feature.name,\n\t\t\t\tactionName: action.name,\n\t\t\t\torphaned: false\n\t\t\t});\n\t\t}\n\t\treturn views;\n\t};\n};\n//#endregion\n//#region src/features/implementation-queue/application/use-cases/SetQueueItemTarget.ts\n/**\n* Set (or clear, with `undefined`) the implementation target on one queue\n* entry. The target is advisory metadata — \"take this to ~50% implementation\",\n* \"to full maturity\" — that the build step (a person or an LLM reading the\n* queue over MCP) uses as its goal. No-op (and no persist) when the entry id\n* isn't in the project's queue.\n*/\nvar setQueueItemTargetUseCase = (deps) => {\n\treturn async (projectId, itemId, target) => {\n\t\tconst project = await deps.projects.get(projectId);\n\t\tif (!project) throw new ProjectNotFoundForQueueError(projectId);\n\t\tconst queue = project.implementationQueue ?? [];\n\t\tconst next = setTarget(queue, itemId, target);\n\t\tif (next === queue) return project;\n\t\tconst updated = {\n\t\t\t...project,\n\t\t\timplementationQueue: next,\n\t\t\tupdatedAt: deps.clock()\n\t\t};\n\t\tawait deps.projects.save(updated);\n\t\treturn updated;\n\t};\n};\n//#endregion\n//#region src/features/domains/domain/value-objects/ids.ts\nvar asDomainId = (v) => v;\n//#endregion\n//#region src/features/domains/application/use-cases/CreateDomain.ts\nvar createDomainUseCase = (deps) => {\n\treturn async (input) => {\n\t\tconst trimmedName = input.name.trim();\n\t\tif (trimmedName.length === 0) throw new Error(\"Domain name is required\");\n\t\tconst now = deps.clock();\n\t\tconst domain = {\n\t\t\tid: asDomainId(deps.ids()),\n\t\t\tname: trimmedName,\n\t\t\tdescription: input.description?.trim() || void 0,\n\t\t\tprojectIds: [],\n\t\t\tcreatedAt: now,\n\t\t\tupdatedAt: now\n\t\t};\n\t\tawait deps.repository.save(domain);\n\t\treturn domain;\n\t};\n};\n//#endregion\n//#region src/features/domains/application/use-cases/ListDomains.ts\nvar listDomainsUseCase = (deps) => {\n\treturn () => deps.repository.list();\n};\n//#endregion\n//#region src/features/domains/application/use-cases/AddProjectToDomain.ts\nvar addProjectToDomainUseCase = (deps) => {\n\treturn async (domainId, projectId) => {\n\t\tconst current = await deps.repository.get(domainId);\n\t\tif (!current) throw new Error(`Domain ${domainId} not found`);\n\t\tif (current.projectIds.includes(projectId)) return current;\n\t\tconst next = {\n\t\t\t...current,\n\t\t\tprojectIds: [...current.projectIds, projectId],\n\t\t\tupdatedAt: deps.clock()\n\t\t};\n\t\tawait deps.repository.save(next);\n\t\treturn next;\n\t};\n};\n//#endregion\n//#region src/features/domains/application/use-cases/RemoveProjectFromDomain.ts\nvar removeProjectFromDomainUseCase = (deps) => {\n\treturn async (domainId, projectId) => {\n\t\tconst current = await deps.repository.get(domainId);\n\t\tif (!current) throw new Error(`Domain ${domainId} not found`);\n\t\tconst next = {\n\t\t\t...current,\n\t\t\tprojectIds: current.projectIds.filter((id) => id !== projectId),\n\t\t\tupdatedAt: deps.clock()\n\t\t};\n\t\tawait deps.repository.save(next);\n\t\treturn next;\n\t};\n};\n//#endregion\n//#region src/features/tag-palette/application/use-cases/GetTagPalette.ts\nvar getTagPaletteUseCase = (deps) => async () => deps.repository.get();\n//#endregion\n//#region src/features/tag-palette/application/use-cases/SetTagTypeColor.ts\nvar setTagTypeColorUseCase = (deps) => async (input) => {\n\tif (input.color !== null && !isTagColor(input.color)) throw new Error(`Invalid tag color \"${String(input.color)}\". Expected a 6-digit hex like \"#3b82f6\".`);\n\tconst current = await deps.repository.get();\n\tconst next = input.color === null ? clearTypeColor(current, input.type) : setTypeColor(current, input.type, input.color);\n\tif (next === current) return current;\n\tawait deps.repository.save(next);\n\treturn next;\n};\n//#endregion\n//#region src/shared/infrastructure/container.ts\nvar createContainer = (deps) => {\n\tconst clock = deps.clock ?? systemClock;\n\tconst ids = deps.ids ?? cryptoIdGenerator;\n\tconst repository = deps.repository;\n\tconst projectRepository = deps.projectRepository;\n\tconst domainRepository = deps.domainRepository;\n\tconst statusRepository = deps.statusRepository;\n\tconst tagPaletteRepository = deps.tagPaletteRepository;\n\tconst tagOperations = deps.tagOperations;\n\treturn {\n\t\trepository,\n\t\tprojectRepository,\n\t\tdomainRepository,\n\t\tstatusRepository,\n\t\ttagPaletteRepository,\n\t\ttagOperations,\n\t\tclock,\n\t\tids,\n\t\tuseCases: {\n\t\t\tcreateFeature: createFeatureUseCase({\n\t\t\t\trepository,\n\t\t\t\tclock,\n\t\t\t\tids\n\t\t\t}),\n\t\t\tsaveFeature: saveFeatureUseCase({\n\t\t\t\trepository,\n\t\t\t\tclock\n\t\t\t}),\n\t\t\tmutateFeature: mutateFeatureUseCase({\n\t\t\t\trepository,\n\t\t\t\tclock\n\t\t\t}),\n\t\t\tdeleteFeature: deleteFeatureUseCase({ repository }),\n\t\t\tlistFeatures: listFeaturesUseCase({ repository }),\n\t\t\tlistFeaturesWithMaturity: listFeaturesWithMaturityUseCase({\n\t\t\t\trepository,\n\t\t\t\tstatusRepository\n\t\t\t}),\n\t\t\tgetFeature: getFeatureUseCase({ repository }),\n\t\t\tgetFeatureCard: getFeatureCardUseCase({\n\t\t\t\trepository,\n\t\t\t\tstatusRepository\n\t\t\t}),\n\t\t\tloadSamples: loadSamplesUseCase({\n\t\t\t\trepository,\n\t\t\t\tprojectRepository,\n\t\t\t\tsamples: deps.samples,\n\t\t\t\tprojectSamples: deps.projectSamples\n\t\t\t}),\n\t\t\tsimulateAction: simulateActionUseCase(),\n\t\t\tscoreFeature: scoreFeatureUseCase(),\n\t\t\tcreateProject: createProjectUseCase({\n\t\t\t\trepository: projectRepository,\n\t\t\t\tclock,\n\t\t\t\tids\n\t\t\t}),\n\t\t\tsaveProject: saveProjectUseCase({\n\t\t\t\trepository: projectRepository,\n\t\t\t\tclock\n\t\t\t}),\n\t\t\tdeleteProject: deleteProjectUseCase({ repository: projectRepository }),\n\t\t\tgetProject: getProjectUseCase({ repository: projectRepository }),\n\t\t\tlistProjects: listProjectsUseCase({ repository: projectRepository }),\n\t\t\taddFeatureToProject: addFeatureToProjectUseCase({\n\t\t\t\trepository: projectRepository,\n\t\t\t\tclock\n\t\t\t}),\n\t\t\tremoveFeatureFromProject: removeFeatureFromProjectUseCase({\n\t\t\t\trepository: projectRepository,\n\t\t\t\tclock\n\t\t\t}),\n\t\t\tmoveFeatureInProject: moveFeatureInProjectUseCase({\n\t\t\t\trepository: projectRepository,\n\t\t\t\tclock\n\t\t\t}),\n\t\t\tgetProjectAggregate: getProjectAggregateUseCase({\n\t\t\t\tprojects: projectRepository,\n\t\t\t\tfeatures: repository\n\t\t\t}),\n\t\t\tfindProjectContainingFeature: findProjectContainingFeatureUseCase({ repository: projectRepository }),\n\t\t\tcreateDomain: createDomainUseCase({\n\t\t\t\trepository: domainRepository,\n\t\t\t\tclock,\n\t\t\t\tids\n\t\t\t}),\n\t\t\tsaveDomain: saveDomainUseCase({\n\t\t\t\trepository: domainRepository,\n\t\t\t\tclock\n\t\t\t}),\n\t\t\tdeleteDomain: deleteDomainUseCase({ repository: domainRepository }),\n\t\t\tgetDomain: getDomainUseCase({ repository: domainRepository }),\n\t\t\tlistDomains: listDomainsUseCase({ repository: domainRepository }),\n\t\t\taddProjectToDomain: addProjectToDomainUseCase({\n\t\t\t\trepository: domainRepository,\n\t\t\t\tclock\n\t\t\t}),\n\t\t\tremoveProjectFromDomain: removeProjectFromDomainUseCase({\n\t\t\t\trepository: domainRepository,\n\t\t\t\tclock\n\t\t\t}),\n\t\t\tenqueueQueueItem: enqueueQueueItemUseCase({\n\t\t\t\tprojects: projectRepository,\n\t\t\t\tfeatures: repository,\n\t\t\t\tclock,\n\t\t\t\tids\n\t\t\t}),\n\t\t\tdequeueQueueItem: dequeueQueueItemUseCase({\n\t\t\t\tprojects: projectRepository,\n\t\t\t\tclock\n\t\t\t}),\n\t\t\tmoveQueueItem: moveQueueItemUseCase({\n\t\t\t\tprojects: projectRepository,\n\t\t\t\tclock\n\t\t\t}),\n\t\t\tlistQueue: listQueueUseCase({\n\t\t\t\tprojects: projectRepository,\n\t\t\t\tfeatures: repository\n\t\t\t}),\n\t\t\tsetQueueItemTarget: setQueueItemTargetUseCase({\n\t\t\t\tprojects: projectRepository,\n\t\t\t\tclock\n\t\t\t}),\n\t\t\tgetTagPalette: getTagPaletteUseCase({ repository: tagPaletteRepository }),\n\t\t\tsetTagTypeColor: setTagTypeColorUseCase({ repository: tagPaletteRepository }),\n\t\t\trenameTag: (input) => tagOperations.renameTag(input)\n\t\t}\n\t};\n};\n//#endregion\n//#region src/shared/infrastructure/browserContainer.ts\nvar cached = null;\nvar getBrowserContainer = async () => {\n\tif (cached) return cached;\n\tconst repository = new InMemoryFeatureRepository();\n\tconst projectRepository = new InMemoryProjectRepository();\n\tconst domainRepository = new InMemoryDomainRepository();\n\tconst statusRepository = new InMemoryImplementationStatusRepository();\n\tconst tagPaletteRepository = new InMemoryTagPaletteRepository();\n\tconst container = createContainer({\n\t\trepository,\n\t\tprojectRepository,\n\t\tdomainRepository,\n\t\tstatusRepository,\n\t\ttagPaletteRepository,\n\t\ttagOperations: new UseCaseTagOperations({\n\t\t\tprojects: projectRepository,\n\t\t\tfeatures: repository,\n\t\t\tpalette: tagPaletteRepository,\n\t\t\tclock: systemClock\n\t\t}),\n\t\tsamples: [...seedFeatures, ...sampleFeatureSnapshots],\n\t\tprojectSamples: sampleProjectSnapshots\n\t});\n\tcached = container;\n\treturn container;\n};\n//#endregion\nexport { cryptoIdGenerator as a, alertDialog as c, dialogStore as d, promptDialog as f, computeImplementationBreakdown as i, checklistDialog as l, scoreFeatureUseCase as n, apiFetch as o, simulateActionUseCase as r, authStore as s, getBrowserContainer as t, confirmDialog as u };\n"],"names":[],"mappings":";;;;;;;;;;AASA;AACA,IAAI,WAAW,GAAG,MAAM;AACxB,CAAC,OAAO,GAAG,IAAI;AACf,CAAC,OAAO,CAAC,IAAI,EAAE;AACf,EAAE,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK;AAClC,GAAG,IAAI,CAAC,OAAO,GAAG;AAClB,IAAI,IAAI,EAAE,SAAS;AACnB,IAAI,IAAI;AACR,IAAI;AACJ,IAAI;AACJ,EAAE,CAAC,CAAC;AACJ,CAAC;AACD,CAAC,KAAK,CAAC,IAAI,EAAE;AACb,EAAE,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK;AAClC,GAAG,IAAI,CAAC,OAAO,GAAG;AAClB,IAAI,IAAI,EAAE,OAAO;AACjB,IAAI,IAAI;AACR,IAAI;AACJ,IAAI;AACJ,EAAE,CAAC,CAAC;AACJ,CAAC;AACD,CAAC,SAAS,CAAC,IAAI,EAAE;AACjB,EAAE,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK;AAClC,GAAG,IAAI,CAAC,OAAO,GAAG;AAClB,IAAI,IAAI,EAAE,WAAW;AACrB,IAAI,IAAI;AACR,IAAI;AACJ,IAAI;AACJ,EAAE,CAAC,CAAC;AACJ,CAAC;AACD,CAAC,MAAM,CAAC,IAAI,EAAE;AACd,EAAE,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK;AAClC,GAAG,IAAI,CAAC,OAAO,GAAG;AAClB,IAAI,IAAI,EAAE,QAAQ;AAClB,IAAI,IAAI;AACR,IAAI;AACJ,IAAI;AACJ,EAAE,CAAC,CAAC;AACJ,CAAC;AACD,CAAC,MAAM,CAAC,IAAI,EAAE;AACd,EAAE,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK;AAClC,GAAG,IAAI,CAAC,OAAO,GAAG;AAClB,IAAI,IAAI,EAAE,QAAQ;AAClB,IAAI,IAAI;AACR,IAAI;AACJ,IAAI;AACJ,EAAE,CAAC,CAAC;AACJ,CAAC;AACD,CAAC,cAAc,CAAC,KAAK,EAAE,WAAW,GAAG,EAAE,EAAE;AACzC,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AACrB,EAAE,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO;AAC1B,EAAE,IAAI,CAAC,OAAO,GAAG,IAAI;AACrB,EAAE,IAAI,GAAG,CAAC,IAAI,KAAK,SAAS,EAAE,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC;AAChD,OAAO,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE;AAC9C,OAAO,IAAI,GAAG,CAAC,IAAI,KAAK,WAAW,EAAE,GAAG,CAAC,OAAO,CAAC;AACjD,GAAG,SAAS,EAAE,KAAK;AACnB,GAAG;AACH,GAAG,CAAC;AACJ,OAAO,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC;AACxB,CAAC;AACD,CAAC,aAAa,CAAC,EAAE,EAAE;AACnB,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,KAAK,QAAQ,EAAE;AACvD,EAAE,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO;AAC1B,EAAE,IAAI,CAAC,OAAO,GAAG,IAAI;AACrB,EAAE,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;AACjB,CAAC;AACD,CAAC,aAAa,CAAC,KAAK,EAAE;AACtB,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,KAAK,QAAQ,EAAE;AACvD,EAAE,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO;AAC1B,EAAE,IAAI,CAAC,OAAO,GAAG,IAAI;AACrB,EAAE,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC;AACpB,CAAC;AACD,CAAC;AACE,IAAC,WAAW,GAAG,IAAI,WAAW;AAC9B,IAAC,aAAa,GAAG,CAAC,IAAI,KAAK,WAAW,CAAC,OAAO,CAAC,IAAI;AACnD,IAAC,WAAW,GAAG,CAAC,IAAI,KAAK,WAAW,CAAC,KAAK,CAAC,IAAI;AAC/C,IAAC,eAAe,GAAG,CAAC,IAAI,KAAK,WAAW,CAAC,SAAS,CAAC,IAAI;AACvD,IAAC,YAAY,GAAG,CAAC,IAAI,KAAK,WAAW,CAAC,MAAM,CAAC,IAAI;AACpD;AACA;AACA,IAAI,WAAW,GAAG,kBAAkB;AACpC,IAAI,SAAS,GAAG,MAAM;AACtB;AACA,CAAC,KAAK,GAAG,EAAE;AACX,CAAC,WAAW,GAAG,KAAK;AACpB;AACA,CAAC,IAAI,GAAG;AACR,EAAE,IAAI,IAAI,CAAC,WAAW,EAAE;AACxB,EAAE,IAAI,CAAC,WAAW,GAAG,IAAI;AACzB,EAAE,IAAI,OAAO,YAAY,KAAK,WAAW,EAAE;AAC3C,EAAE,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC;AAClD,EAAE,IAAI,MAAM,EAAE,IAAI,CAAC,KAAK,GAAG,MAAM;AACjC,CAAC;AACD,CAAC,QAAQ,CAAC,IAAI,EAAE;AAChB,EAAE,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE;AAC7B,EAAE,IAAI,CAAC,KAAK,GAAG,OAAO;AACtB,EAAE,IAAI,OAAO,YAAY,KAAK,WAAW,EAAE;AAC3C,EAAE,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,YAAY,CAAC,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC;AACpE,OAAO,YAAY,CAAC,UAAU,CAAC,WAAW,CAAC;AAC3C,CAAC;AACD,CAAC,KAAK,GAAG;AACT,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;AACnB,CAAC;AACD,CAAC,IAAI,QAAQ,GAAG;AAChB,EAAE,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;AAC9B,CAAC;AACD,CAAC;AACE,IAAC,SAAS,GAAG,IAAI,SAAS;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,YAAY,GAAG,CAAC,IAAI,EAAE,KAAK,KAAK;AACpC,CAAC,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC;AAC3C,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;AACtE,CAAC,OAAO,OAAO;AACf,CAAC;AACD,IAAI,cAAc,GAAG,IAAI;AACzB,IAAI,gBAAgB,GAAG,OAAO,MAAM,KAAK;AACzC,CAAC,IAAI,cAAc,EAAE,OAAO,cAAc;AAC1C,CAAC,cAAc,GAAG,YAAY,CAAC;AAC/B,EAAE,KAAK,EAAE,iCAAiC;AAC1C,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,CAAC,+EAA+E,CAAC;AACrG,EAAE,UAAU,EAAE,cAAc;AAC5B,EAAE,QAAQ,EAAE,IAAI;AAChB,EAAE,YAAY,EAAE,SAAS;AACzB,EAAE,IAAI,EAAE;AACR,EAAE,CAAC;AACH,CAAC,IAAI;AACL,EAAE,OAAO,MAAM,cAAc;AAC7B,CAAC,CAAC,SAAS;AACX,EAAE,cAAc,GAAG,IAAI;AACvB,CAAC;AACD,CAAC;AACE,IAAC,QAAQ,GAAG,OAAO,KAAK,EAAE,IAAI,KAAK;AACtC,CAAC,MAAM,IAAI,GAAG,CAAC,KAAK,KAAK,KAAK,CAAC,KAAK,EAAE;AACtC,EAAE,GAAG,IAAI;AACT,EAAE,OAAO,EAAE,YAAY,CAAC,IAAI,EAAE,KAAK;AACnC,EAAE,CAAC;AACH,CAAC,MAAM,YAAY,GAAG,SAAS,CAAC,KAAK;AACrC,CAAC,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC;AACvC,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,GAAG,EAAE,OAAO,KAAK;AACvC,CAAC,MAAM,IAAI,GAAG,MAAM,gBAAgB,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC,GAAG,mDAAmD,GAAG,sEAAsE,CAAC;AAC9L,CAAC,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,OAAO,KAAK;AACrD,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC;AACzB,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC;AAClB;AACA;AACA;AACA,IAAI,WAAW,GAAG,CAAC,CAAC,MAAM;AAC1B,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE;AACT,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI;AACb,CAAC,WAAW,EAAE,CAAC,CAAC,WAAW;AAC3B,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC;AAC5B,CAAC,YAAY,EAAE,CAAC,CAAC,QAAQ,CAAC,MAAM;AAChC,CAAC,WAAW,EAAE,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;AACtE,CAAC,SAAS,EAAE,CAAC,CAAC,SAAS;AACvB,CAAC,SAAS,EAAE,CAAC,CAAC;AACd,CAAC,CAAC;AACF,IAAI,yBAAyB,GAAG,MAAM;AACtC,CAAC,KAAK,mBAAmB,IAAI,GAAG,EAAE;AAClC,CAAC,MAAM,IAAI,GAAG;AACd,EAAE,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,IAAI,EAAE,EAAE,aAAa,CAAC,CAAC,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC;AAC9H,CAAC;AACD,CAAC,MAAM,GAAG,CAAC,EAAE,EAAE;AACf,EAAE,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,IAAI;AACnC,CAAC;AACD,CAAC,MAAM,IAAI,CAAC,OAAO,EAAE;AACrB,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC;AACrC,CAAC;AACD,CAAC,MAAM,MAAM,CAAC,EAAE,EAAE;AAClB,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;AACvB,CAAC;AACD,CAAC,KAAK,GAAG;AACT,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;AACpB,CAAC;AACD,CAAC;AACD;AACA;AACA,IAAI,YAAY,GAAG,EAAE;AACrB;AACA;AACA,IAAI,4BAA4B,mBAAmB,WAAW,CAAC;AAC/D,CAAC,OAAO,EAAE,MAAM,4BAA4B;AAC5C,CAAC,OAAO,EAAE,MAAM,SAAS;AACzB,CAAC,MAAM,EAAE,MAAM,QAAQ;AACvB,CAAC,OAAO,EAAE,MAAM;AAChB,CAAC,CAAC;AACF,IAAI,QAAQ,GAAG,cAAc;AAC7B,IAAI,SAAS,mBAAmB,IAAI,CAAC,KAAK,CAAC,sz2BAAsz2B,CAAC;AACl22B,IAAI,4BAA4B,GAAG;AACnC,CAAC,MAAM,EAAE,QAAQ;AACjB,CAAC,OAAO,EAAE,CAAC;AACX,CAAC,OAAO,EAAE;AACV,CAAC;AACD;AACA;AACA,IAAI,6BAA6B,mBAAmB,WAAW,CAAC;AAChE,CAAC,OAAO,EAAE,MAAM,6BAA6B;AAC7C,CAAC,OAAO,EAAE,MAAM,SAAS;AACzB,CAAC,MAAM,EAAE,MAAM,QAAQ;AACvB,CAAC,OAAO,EAAE,MAAM;AAChB,CAAC,CAAC;AACF,IAAI,QAAQ,GAAG,cAAc;AAC7B,IAAI,SAAS,mBAAmB,IAAI,CAAC,KAAK,CAAC,80rCAA80rC,CAAC;AAC13rC,IAAI,6BAA6B,GAAG;AACpC,CAAC,MAAM,EAAE,QAAQ;AACjB,CAAC,OAAO,EAAE,CAAC;AACX,CAAC,OAAO,EAAE;AACV,CAAC;AACD;AACA;AACA,IAAI,+BAA+B,mBAAmB,WAAW,CAAC;AAClE,CAAC,OAAO,EAAE,MAAM,+BAA+B;AAC/C,CAAC,OAAO,EAAE,MAAM,SAAS;AACzB,CAAC,MAAM,EAAE,MAAM,QAAQ;AACvB,CAAC,OAAO,EAAE,MAAM;AAChB,CAAC,CAAC;AACF,IAAI,QAAQ,GAAG,cAAc;AAC7B,IAAI,SAAS,mBAAmB,IAAI,CAAC,KAAK,CAAC,2q7BAA2q7B,CAAC;AACvt7B,IAAI,+BAA+B,GAAG;AACtC,CAAC,MAAM,EAAE,QAAQ;AACjB,CAAC,OAAO,EAAE,CAAC;AACX,CAAC,OAAO,EAAE;AACV,CAAC;AACD;AACA;AACA,IAAI,iCAAiC,mBAAmB,WAAW,CAAC;AACpE,CAAC,OAAO,EAAE,MAAM,iCAAiC;AACjD,CAAC,OAAO,EAAE,MAAM,OAAO;AACvB,CAAC,MAAM,EAAE,MAAM,QAAQ;AACvB,CAAC,OAAO,EAAE,MAAM;AAChB,CAAC,CAAC;AACF,IAAI,QAAQ,GAAG,cAAc;AAC7B,IAAI,OAAO,mBAAmB,IAAI,CAAC,KAAK,CAAC,khtBAAkhtB,CAAC;AAC5jtB,IAAI,iCAAiC,GAAG;AACxC,CAAC,MAAM,EAAE,QAAQ;AACjB,CAAC,OAAO,EAAE,CAAC;AACX,CAAC;AACD,CAAC;AACD;AACA;AACA,IAAI,qBAAqB,mBAAmB,WAAW,CAAC;AACxD,CAAC,OAAO,EAAE,MAAM,qBAAqB;AACrC,CAAC,MAAM,EAAE,MAAM,MAAM;AACrB,CAAC,OAAO,EAAE,MAAM,OAAO;AACvB,CAAC,OAAO,EAAE,MAAM;AAChB,CAAC,CAAC;AACF,IAAI,MAAM,GAAG,sBAAsB;AACnC,IAAI,OAAO,GAAG;AACd,CAAC,IAAI,EAAE,UAAU;AACjB,CAAC,MAAM,EAAE,OAAO;AAChB,CAAC,aAAa,EAAE,kaAAka;AAClb,CAAC,YAAY,EAAE;AACf,EAAE,UAAU;AACZ,EAAE,UAAU;AACZ,EAAE,UAAU;AACZ,EAAE;AACF,EAAE;AACF,CAAC,MAAM,EAAE,CAAC;AACV,EAAE,MAAM,EAAE,QAAQ;AAClB,EAAE,OAAO,EAAE;AACX,EAAE,EAAE;AACJ,EAAE,MAAM,EAAE,MAAM;AAChB,EAAE,OAAO,EAAE;AACX,EAAE,CAAC;AACH,CAAC,WAAW,EAAE,0BAA0B;AACxC,CAAC,WAAW,EAAE;AACd,CAAC;AACD,IAAI,qBAAqB,GAAG;AAC5B,CAAC,MAAM;AACP,CAAC,OAAO,EAAE,CAAC;AACX,CAAC;AACD,CAAC;AACD;AACA;AACA,IAAI,cAAc,mBAAmB,MAAM,CAAC,MAAM,CAAC;AACnD,CAAC,0CAA0C,EAAE,4BAA4B;AACzE,CAAC,2CAA2C,EAAE,6BAA6B;AAC3E,CAAC,6CAA6C,EAAE,+BAA+B;AAC/E,CAAC,+CAA+C,EAAE;AAClD,CAAC,CAAC;AACF,IAAI,cAAc,mBAAmB,MAAM,CAAC,MAAM,CAAC,EAAE,mCAAmC,EAAE,qBAAqB,EAAE,CAAC;AAClH,IAAI,MAAM,GAAG,CAAC,OAAO,EAAE,GAAG,KAAK,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK;AACjE,CAAC,MAAM,GAAG,GAAG,CAAC;AACd,CAAC,MAAM,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC;AACxB,CAAC,IAAI,MAAM,EAAE,OAAO,MAAM;AAC1B,CAAC,OAAO,GAAG,CAAC,OAAO,GAAG,GAAG,CAAC,IAAI,MAAM;AACpC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;AAC5B,IAAI,sBAAsB,GAAG,MAAM,CAAC,cAAc,EAAE,SAAS,CAAC;AAC9D,IAAI,sBAAsB,GAAG,MAAM,CAAC,cAAc,EAAE,SAAS,CAAC;AAC9D;AACA;AACA,IAAI,WAAW,GAAG,CAAC,CAAC,MAAM;AAC1B,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE;AACT,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI;AACb,CAAC,WAAW,EAAE,CAAC,CAAC,WAAW;AAC3B,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC,IAAI,EAAE;AAC7B,EAAE,IAAI,EAAE,CAAC,CAAC,aAAa;AACvB,EAAE,KAAK,EAAE,CAAC,CAAC;AACX,EAAE,CAAC;AACH,CAAC,YAAY,EAAE,CAAC,CAAC,UAAU,CAAC,MAAM;AAClC,CAAC,SAAS,EAAE,CAAC,CAAC,SAAS;AACvB,CAAC,SAAS,EAAE,CAAC,CAAC;AACd,CAAC,CAAC;AACF,IAAI,yBAAyB,GAAG,MAAM;AACtC,CAAC,KAAK,mBAAmB,IAAI,GAAG,EAAE;AAClC,CAAC,MAAM,IAAI,GAAG;AACd,EAAE,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,IAAI,EAAE,EAAE,aAAa,CAAC,CAAC,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC;AAC9H,CAAC;AACD,CAAC,MAAM,GAAG,CAAC,EAAE,EAAE;AACf,EAAE,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,IAAI;AACnC,CAAC;AACD,CAAC,MAAM,IAAI,CAAC,OAAO,EAAE;AACrB,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC;AACrC,CAAC;AACD,CAAC,MAAM,MAAM,CAAC,EAAE,EAAE;AAClB,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;AACvB,CAAC;AACD,CAAC,KAAK,GAAG;AACT,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;AACpB,CAAC;AACD,CAAC;AACD;AACA;AACA,IAAI,SAAS,GAAG,CAAC,CAAC,MAAM;AACxB,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE;AACT,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI;AACb,CAAC,WAAW,EAAE,CAAC,CAAC,WAAW;AAC3B,CAAC,YAAY,EAAE,CAAC,CAAC,UAAU,CAAC,MAAM;AAClC,CAAC,SAAS,EAAE,CAAC,CAAC,SAAS;AACvB,CAAC,SAAS,EAAE,CAAC,CAAC;AACd,CAAC,CAAC;AACF,IAAI,wBAAwB,GAAG,MAAM;AACrC,CAAC,KAAK,mBAAmB,IAAI,GAAG,EAAE;AAClC,CAAC,MAAM,IAAI,GAAG;AACd,EAAE,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,IAAI,EAAE,EAAE,aAAa,CAAC,CAAC,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC;AAC5H,CAAC;AACD,CAAC,MAAM,GAAG,CAAC,EAAE,EAAE;AACf,EAAE,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,IAAI;AACnC,CAAC;AACD,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE;AACpB,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC;AACnC,CAAC;AACD,CAAC,MAAM,MAAM,CAAC,EAAE,EAAE;AAClB,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;AACvB,CAAC;AACD,CAAC,KAAK,GAAG;AACT,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;AACpB,CAAC;AACD,CAAC;AACD;AACA;AACA,IAAI,sCAAsC,GAAG,MAAM;AACnD,CAAC,IAAI,mBAAmB,IAAI,GAAG,EAAE;AACjC,CAAC,MAAM,GAAG,CAAC,EAAE,EAAE;AACf,EAAE,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI;AAC1C,CAAC;AACD,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE;AACpB,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;AACjD,CAAC;AACD,CAAC,MAAM,MAAM,CAAC,EAAE,EAAE;AAClB,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AAC9B,CAAC;AACD,CAAC;AACD;AACA;AACA,IAAI,4BAA4B,GAAG,MAAM;AACzC,CAAC,OAAO;AACR,CAAC,WAAW,CAAC,OAAO,GAAG,eAAe,EAAE;AACxC,EAAE,IAAI,CAAC,OAAO,GAAG,OAAO;AACxB,CAAC;AACD,CAAC,MAAM,GAAG,GAAG;AACb,EAAE,OAAO,IAAI,CAAC,OAAO;AACrB,CAAC;AACD,CAAC,MAAM,IAAI,CAAC,OAAO,EAAE;AACrB,EAAE,IAAI,CAAC,OAAO,GAAG,OAAO;AACxB,CAAC;AACD,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,oBAAoB,GAAG,MAAM;AACjC,CAAC,GAAG;AACJ,CAAC,WAAW,CAAC,IAAI,EAAE;AACnB,EAAE,IAAI,CAAC,GAAG,GAAG,gBAAgB,CAAC,IAAI,CAAC;AACnC,CAAC;AACD,CAAC,SAAS,CAAC,KAAK,EAAE;AAClB,EAAE,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;AACxB,CAAC;AACD,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACG,IAAC,iBAAiB,GAAG,MAAM;AAC9B,CAAC,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,OAAO,MAAM,CAAC,eAAe,KAAK,UAAU,EAAE;AACpF,EAAE,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC;AACjC,EAAE,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC;AAC/B,EAAE,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;AAC3E,CAAC;AACD,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,UAAU,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;AAC5E;AACA;AACA;AACA,IAAI,oBAAoB,GAAG,CAAC,IAAI,KAAK;AACrC,CAAC,OAAO,OAAO,KAAK,KAAK;AACzB,EAAE,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE;AACvC,EAAE,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC;AAC3E,EAAE,MAAM,kBAAkB,GAAG,KAAK,CAAC,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE;AAC5D,EAAE,IAAI,kBAAkB,CAAC,MAAM,KAAK,CAAC,EAAE,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC;AACzF,EAAE,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,EAAE;AAC1B,EAAE,MAAM,OAAO,GAAG;AAClB,GAAG,EAAE,EAAE,WAAW,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;AAC9B,GAAG,IAAI,EAAE,WAAW;AACpB,GAAG,WAAW,EAAE,kBAAkB;AAClC,GAAG,GAAG,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE;AAC1E,GAAG,QAAQ,EAAE,EAAE;AACf,GAAG,QAAQ,EAAE,EAAE;AACf,GAAG,SAAS,EAAE,EAAE;AAChB,GAAG,QAAQ,EAAE,EAAE;AACf,GAAG,MAAM,EAAE,EAAE;AACb,GAAG,SAAS,EAAE,GAAG;AACjB,GAAG,SAAS,EAAE;AACd,GAAG;AACH,EAAE,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC;AACrC,EAAE,OAAO,OAAO;AAChB,CAAC,CAAC;AACF,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,MAAM,GAAG,CAAC,IAAI,KAAK;AACvB,CAAC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE;AAC1C,CAAC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,OAAO,EAAE;AACpC,CAAC,OAAO,OAAO,CAAC,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;AACvF,CAAC;AACD;AACA;AACA,IAAI,GAAG,GAAG,CAAC,KAAK,EAAE,QAAQ,KAAK,QAAQ,KAAK,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,QAAQ,GAAG,GAAG,CAAC;AACxF;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,0BAA0B,GAAG,CAAC,MAAM,KAAK;AAC7C,CAAC,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;AACtD,CAAC,MAAM,GAAG,GAAG,CAAC;AACd,EAAE,UAAU,EAAE,QAAQ;AACtB,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;AAC7B,EAAE,UAAU,EAAE,MAAM,CAAC,IAAI;AACzB,EAAE,GAAG,EAAE,CAAC,cAAc,EAAE,IAAI,CAAC;AAC7B,EAAE,CAAC;AACH,CAAC,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,aAAa,EAAE;AACvC,EAAE,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC;AACxB,EAAE,GAAG,CAAC,IAAI,CAAC;AACX,GAAG,UAAU,EAAE,OAAO;AACtB,GAAG,QAAQ,EAAE,IAAI;AACjB,GAAG,UAAU,EAAE,IAAI;AACnB,GAAG,GAAG,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC;AAC/B,GAAG,CAAC;AACJ,CAAC;AACD,CAAC,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC;AACxC,EAAE,UAAU,EAAE,MAAM;AACpB,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;AACxB,EAAE,UAAU,EAAE,CAAC,CAAC,WAAW;AAC3B,EAAE,GAAG,EAAE,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AACnC,EAAE,CAAC;AACH,CAAC,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,UAAU,EAAE;AACtC,EAAE,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;AACpD,EAAE,GAAG,CAAC,IAAI,CAAC;AACX,GAAG,UAAU,EAAE,WAAW;AAC1B,GAAG,QAAQ,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;AAC3B,GAAG,UAAU,EAAE,GAAG,CAAC,IAAI;AACvB,GAAG,GAAG,EAAE,CAAC,iBAAiB,EAAE,OAAO,CAAC;AACpC,GAAG,CAAC;AACJ,CAAC;AACD,CAAC,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,WAAW,EAAE,GAAG,CAAC,IAAI,CAAC;AAC9C,EAAE,UAAU,EAAE,YAAY;AAC1B,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;AACxB,EAAE,UAAU,EAAE,CAAC,CAAC,KAAK;AACrB,EAAE,GAAG,EAAE,CAAC,kBAAkB,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AACzC,EAAE,CAAC;AACH,CAAC,OAAO,GAAG;AACX,CAAC;AACD,IAAI,uBAAuB,GAAG,CAAC,OAAO,KAAK;AAC3C,CAAC,MAAM,GAAG,GAAG,EAAE;AACf,CAAC,KAAK,MAAM,EAAE,IAAI,OAAO,CAAC,gBAAgB,EAAE;AAC5C,EAAE,MAAM,IAAI,GAAG,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC;AAC9B,EAAE,GAAG,CAAC,IAAI,CAAC;AACX,GAAG,UAAU,EAAE,OAAO;AACtB,GAAG,QAAQ,EAAE,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC;AAC1B,GAAG,UAAU,EAAE,IAAI;AACnB,GAAG,GAAG,EAAE,CAAC,aAAa,EAAE,IAAI,CAAC;AAC7B,GAAG,CAAC;AACJ,CAAC;AACD,CAAC,KAAK,MAAM,CAAC,IAAI,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC;AACzC,EAAE,UAAU,EAAE,cAAc;AAC5B,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;AACxB,EAAE,UAAU,EAAE,CAAC,CAAC,WAAW;AAC3B,EAAE,GAAG,EAAE,CAAC,oBAAoB,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AAC3C,EAAE,CAAC;AACH,CAAC,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,UAAU,EAAE;AACvC,EAAE,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;AACjD,EAAE,GAAG,CAAC,IAAI,CAAC;AACX,GAAG,UAAU,EAAE,mBAAmB;AAClC,GAAG,QAAQ,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;AAC3B,GAAG,UAAU,EAAE,GAAG,CAAC,IAAI;AACvB,GAAG,GAAG,EAAE,CAAC,yBAAyB,EAAE,IAAI,CAAC;AACzC,GAAG,CAAC;AACJ,CAAC;AACD,CAAC,OAAO,GAAG;AACX,CAAC;AACD,IAAI,KAAK,GAAG,CAAC,UAAU,EAAE,QAAQ,KAAK,CAAC,EAAE,UAAU,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;AACjE,IAAI,oBAAoB,GAAG,CAAC,MAAM,EAAE,MAAM,KAAK;AAC/C,CAAC,MAAM,QAAQ,GAAG,0BAA0B,CAAC,MAAM,CAAC;AACpD,CAAC,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;AACnF,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO;AACrB,EAAE,MAAM;AACR,EAAE,MAAM,EAAE,IAAI;AACd,EAAE,QAAQ;AACV,EAAE,KAAK,EAAE,EAAE;AACX,EAAE,OAAO,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM;AAChC,GAAG,UAAU,EAAE,CAAC,CAAC,UAAU;AAC3B,GAAG,QAAQ,EAAE,CAAC,CAAC,QAAQ;AACvB,GAAG,UAAU,EAAE,CAAC,CAAC,UAAU;AAC3B,GAAG,GAAG,EAAE,CAAC,CAAC;AACV,GAAG,CAAC,CAAC;AACL,EAAE,aAAa,EAAE,QAAQ,CAAC,MAAM;AAChC,EAAE,UAAU,EAAE,CAAC;AACf,EAAE,YAAY,EAAE,QAAQ,CAAC,MAAM;AAC/B,EAAE,UAAU,EAAE,CAAC;AACf,EAAE,UAAU,EAAE,QAAQ,CAAC,MAAM,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC;AAC7C,EAAE,QAAQ,EAAE;AACZ,EAAE;AACF,CAAC,MAAM,gBAAgB,GAAG,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;AAC/G,CAAC,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;AACxF,CAAC,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM;AACrG,EAAE,UAAU,EAAE,CAAC,CAAC,UAAU;AAC1B,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ;AACtB,EAAE,UAAU,EAAE,CAAC,CAAC,UAAU;AAC1B,EAAE,GAAG,EAAE,CAAC,CAAC;AACT,EAAE,CAAC,CAAC;AACJ,CAAC,OAAO;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,QAAQ;AACV,EAAE,KAAK,EAAE,gBAAgB;AACzB,EAAE,OAAO;AACT,EAAE,aAAa,EAAE,QAAQ,CAAC,MAAM;AAChC,EAAE,UAAU,EAAE,gBAAgB,CAAC,MAAM;AACrC,EAAE,YAAY,EAAE,OAAO,CAAC,MAAM;AAC9B,EAAE,UAAU,EAAE,MAAM,CAAC,SAAS,CAAC,MAAM;AACrC,EAAE,UAAU,EAAE,GAAG,CAAC,gBAAgB,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC;AAC3D,EAAE,QAAQ,EAAE;AACZ,EAAE;AACF,CAAC;AACD,IAAI,sBAAsB,GAAG,CAAC,OAAO,EAAE,MAAM,KAAK;AAClD,CAAC,MAAM,QAAQ,GAAG,uBAAuB,CAAC,OAAO,CAAC;AAClD,CAAC,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;AACnF,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO;AACrB,EAAE,MAAM,EAAE,IAAI;AACd,EAAE,QAAQ;AACV,EAAE,KAAK,EAAE,EAAE;AACX,EAAE,OAAO,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM;AAChC,GAAG,UAAU,EAAE,CAAC,CAAC,UAAU;AAC3B,GAAG,QAAQ,EAAE,CAAC,CAAC,QAAQ;AACvB,GAAG,UAAU,EAAE,CAAC,CAAC,UAAU;AAC3B,GAAG,GAAG,EAAE,CAAC,CAAC;AACV,GAAG,CAAC,CAAC;AACL,EAAE,aAAa,EAAE,QAAQ,CAAC,MAAM;AAChC,EAAE,UAAU,EAAE,CAAC;AACf,EAAE,YAAY,EAAE,QAAQ,CAAC,MAAM;AAC/B,EAAE,UAAU,EAAE,CAAC;AACf,EAAE,UAAU,EAAE,QAAQ,CAAC,MAAM,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC;AAC7C,EAAE,QAAQ,EAAE;AACZ,EAAE;AACF,CAAC,MAAM,gBAAgB,GAAG,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;AAC/G,CAAC,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;AACxF,CAAC,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM;AACrG,EAAE,UAAU,EAAE,CAAC,CAAC,UAAU;AAC1B,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ;AACtB,EAAE,UAAU,EAAE,CAAC,CAAC,UAAU;AAC1B,EAAE,GAAG,EAAE,CAAC,CAAC;AACT,EAAE,CAAC,CAAC;AACJ,CAAC,OAAO;AACR,EAAE,MAAM;AACR,EAAE,QAAQ;AACV,EAAE,KAAK,EAAE,gBAAgB;AACzB,EAAE,OAAO;AACT,EAAE,aAAa,EAAE,QAAQ,CAAC,MAAM;AAChC,EAAE,UAAU,EAAE,gBAAgB,CAAC,MAAM;AACrC,EAAE,YAAY,EAAE,OAAO,CAAC,MAAM;AAC9B,EAAE,UAAU,EAAE,MAAM,CAAC,SAAS,CAAC,MAAM;AACrC,EAAE,UAAU,EAAE,GAAG,CAAC,gBAAgB,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC;AAC3D,EAAE,QAAQ,EAAE;AACZ,EAAE;AACF,CAAC;AACE,IAAC,8BAA8B,GAAG,CAAC,OAAO,EAAE,MAAM,KAAK;AAC1D,CAAC,MAAM,QAAQ,mBAAmB,IAAI,GAAG,EAAE;AAC3C,CAAC,MAAM,SAAS,mBAAmB,IAAI,GAAG,EAAE;AAC5C,CAAC,IAAI,MAAM,EAAE;AACb,EAAE,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAC;AAC3E,EAAE,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,QAAQ,EAAE,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;AACxE,CAAC;AACD,CAAC,IAAI,aAAa,GAAG,CAAC;AACtB,CAAC,IAAI,UAAU,GAAG,CAAC;AACnB,CAAC,IAAI,YAAY,GAAG,CAAC;AACrB,CAAC,IAAI,UAAU,GAAG,CAAC;AACnB,CAAC,IAAI,aAAa,GAAG,CAAC;AACtB,CAAC,IAAI,iBAAiB,GAAG,CAAC;AAC1B,CAAC,MAAM,UAAU,GAAG,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,KAAK;AACtD,EAAE,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,oBAAoB,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC;AACxH,EAAE,MAAM,YAAY,GAAG,sBAAsB,CAAC,OAAO,EAAE,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC;AACjG,EAAE,IAAI,eAAe,GAAG,YAAY,CAAC,aAAa;AAClD,EAAE,IAAI,YAAY,GAAG,YAAY,CAAC,UAAU;AAC5C,EAAE,IAAI,cAAc,GAAG,YAAY,CAAC,YAAY;AAChD,EAAE,IAAI,YAAY,GAAG,YAAY,CAAC,UAAU;AAC5C,EAAE,IAAI,eAAe,GAAG,CAAC;AACzB,EAAE,IAAI,mBAAmB,GAAG,CAAC;AAC7B,EAAE,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE;AAC/B,GAAG,eAAe,IAAI,KAAK,CAAC,aAAa;AACzC,GAAG,YAAY,IAAI,KAAK,CAAC,UAAU;AACnC,GAAG,cAAc,IAAI,KAAK,CAAC,YAAY;AACvC,GAAG,YAAY,IAAI,KAAK,CAAC,UAAU;AACnC,GAAG,IAAI,KAAK,CAAC,aAAa,GAAG,CAAC,EAAE,mBAAmB,IAAI,CAAC;AACxD,GAAG,IAAI,KAAK,CAAC,QAAQ,EAAE,eAAe,IAAI,CAAC;AAC3C,EAAE;AACF,EAAE,aAAa,IAAI,eAAe;AAClC,EAAE,UAAU,IAAI,YAAY;AAC5B,EAAE,YAAY,IAAI,cAAc;AAChC,EAAE,UAAU,IAAI,YAAY;AAC5B,EAAE,aAAa,IAAI,eAAe;AAClC,EAAE,iBAAiB,IAAI,mBAAmB;AAC1C,EAAE,OAAO;AACT,GAAG,OAAO;AACV,GAAG,YAAY;AACf,GAAG,SAAS,EAAE,OAAO;AACrB,GAAG,aAAa,EAAE,eAAe;AACjC,GAAG,UAAU,EAAE,YAAY;AAC3B,GAAG,YAAY,EAAE,cAAc;AAC/B,GAAG,UAAU,EAAE,YAAY;AAC3B,GAAG,UAAU,EAAE,GAAG,CAAC,YAAY,EAAE,eAAe,CAAC;AACjD,GAAG,aAAa,EAAE,eAAe;AACjC,GAAG,wBAAwB,EAAE;AAC7B,GAAG;AACH,CAAC,CAAC,CAAC;AACH,CAAC,OAAO;AACR,EAAE,SAAS,EAAE,MAAM,KAAK,IAAI;AAC5B,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,IAAI,CAAC;AACjC,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,IAAI,IAAI;AACtC,EAAE,UAAU;AACZ,EAAE,aAAa,EAAE,aAAa;AAC9B,EAAE,UAAU,EAAE,UAAU;AACxB,EAAE,YAAY,EAAE,YAAY;AAC5B,EAAE,UAAU,EAAE,UAAU;AACxB,EAAE,UAAU,EAAE,GAAG,CAAC,UAAU,EAAE,aAAa,CAAC;AAC5C,EAAE,aAAa,EAAE,aAAa;AAC9B,EAAE,wBAAwB,EAAE;AAC5B,EAAE;AACF;AACA;AACA;AACA,IAAI,qBAAqB,GAAG,CAAC,IAAI,KAAK;AACtC,CAAC,OAAO,OAAO,EAAE,KAAK;AACtB,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;AACvG,EAAE,IAAI,CAAC,OAAO,EAAE,OAAO,IAAI;AAC3B,EAAE,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC;AACtC,EAAE,MAAM,IAAI,GAAG,8BAA8B,CAAC,OAAO,EAAE,MAAM,CAAC;AAC9D,EAAE,OAAO;AACT,GAAG,EAAE,EAAE,OAAO,CAAC,EAAE;AACjB,GAAG,IAAI,EAAE,OAAO,CAAC,IAAI;AACrB,GAAG,WAAW,EAAE,OAAO,CAAC,WAAW;AACnC,GAAG,IAAI,EAAE,OAAO,CAAC,IAAI;AACrB,GAAG,YAAY,EAAE,OAAO,CAAC,QAAQ,CAAC,MAAM;AACxC,GAAG,WAAW,EAAE,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;AAC9E,GAAG,SAAS,EAAE,OAAO,CAAC,SAAS;AAC/B,GAAG,SAAS,EAAE,OAAO,CAAC,SAAS;AAC/B,GAAG,kBAAkB,EAAE,MAAM,CAAC,UAAU;AACxC,GAAG,kBAAkB,EAAE,MAAM,CAAC,cAAc,CAAC,MAAM;AACnD,GAAG,qBAAqB,EAAE,MAAM,CAAC,iBAAiB,CAAC,MAAM;AACzD,GAAG,wBAAwB,EAAE,IAAI,CAAC,aAAa,KAAK,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC,UAAU;AAC9E,GAAG,wBAAwB,EAAE,IAAI,CAAC,UAAU;AAC5C,GAAG,2BAA2B,EAAE,IAAI,CAAC,aAAa;AAClD,GAAG,uBAAuB,EAAE,IAAI,CAAC;AACjC,GAAG;AACH,CAAC,CAAC;AACF,CAAC;AACD;AACA;AACA,IAAI,mBAAmB,GAAG,CAAC,IAAI,KAAK;AACpC,CAAC,OAAO,YAAY;AACpB,EAAE,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE;AAC/B,CAAC,CAAC;AACF,CAAC;AACD;AACA;AACA,IAAI,+BAA+B,GAAG,CAAC,IAAI,KAAK;AAChD,CAAC,OAAO,YAAY;AACpB,EAAE,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE;AAChD,EAAE,OAAO,MAAM,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,OAAO,KAAK;AAC5D,GAAG,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;AACrH,GAAG,IAAI,CAAC,IAAI,EAAE,OAAO;AACrB,IAAI,GAAG,OAAO;AACd,IAAI,kBAAkB,EAAE,GAAG;AAC3B,IAAI,kBAAkB,EAAE,CAAC;AACzB,IAAI,qBAAqB,EAAE,CAAC;AAC5B,IAAI,wBAAwB,EAAE,IAAI;AAClC,IAAI,wBAAwB,EAAE,CAAC;AAC/B,IAAI,2BAA2B,EAAE,CAAC;AAClC,IAAI,uBAAuB,EAAE;AAC7B,IAAI;AACJ,GAAG,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC;AACpC,GAAG,MAAM,IAAI,GAAG,8BAA8B,CAAC,IAAI,EAAE,MAAM,CAAC;AAC5D,GAAG,OAAO;AACV,IAAI,GAAG,OAAO;AACd,IAAI,kBAAkB,EAAE,MAAM,CAAC,UAAU;AACzC,IAAI,kBAAkB,EAAE,MAAM,CAAC,cAAc,CAAC,MAAM;AACpD,IAAI,qBAAqB,EAAE,MAAM,CAAC,iBAAiB,CAAC,MAAM;AAC1D,IAAI,wBAAwB,EAAE,IAAI,CAAC,aAAa,KAAK,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC,UAAU;AAC/E,IAAI,wBAAwB,EAAE,IAAI,CAAC,UAAU;AAC7C,IAAI,2BAA2B,EAAE,IAAI,CAAC,aAAa;AACnD,IAAI,uBAAuB,EAAE,IAAI,CAAC;AAClC,IAAI;AACJ,EAAE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AACF,CAAC;AACD;AACA;AACA,IAAI,kBAAkB,GAAG,CAAC,IAAI,KAAK;AACnC,CAAC,OAAO,YAAY;AACpB,EAAE,MAAM,aAAa,GAAG,EAAE;AAC1B,EAAE,MAAM,eAAe,GAAG,EAAE;AAC5B,EAAE,MAAM,aAAa,GAAG,EAAE;AAC1B,EAAE,MAAM,eAAe,GAAG,EAAE;AAC5B,EAAE,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE;AACrC,GAAG,IAAI,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE;AAC7C,IAAI,eAAe,CAAC,IAAI,CAAC;AACzB,KAAK,EAAE,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;AAC1B,KAAK,IAAI,EAAE,MAAM,CAAC;AAClB,KAAK,CAAC;AACN,IAAI;AACJ,GAAG;AACH,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC;AACrC,GAAG,aAAa,CAAC,IAAI,CAAC;AACtB,IAAI,EAAE,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;AACzB,IAAI,IAAI,EAAE,MAAM,CAAC;AACjB,IAAI,CAAC;AACL,EAAE;AACF,EAAE,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,cAAc,EAAE;AAC7C,GAAG,IAAI,MAAM,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE;AACrD,IAAI,eAAe,CAAC,IAAI,CAAC;AACzB,KAAK,EAAE,EAAE,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;AAC3B,KAAK,IAAI,EAAE,OAAO,CAAC;AACnB,KAAK,CAAC;AACN,IAAI;AACJ,GAAG;AACH,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC;AAC7C,GAAG,aAAa,CAAC,IAAI,CAAC;AACtB,IAAI,EAAE,EAAE,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;AAC1B,IAAI,IAAI,EAAE,OAAO,CAAC;AAClB,IAAI,CAAC;AACL,EAAE;AACF,EAAE,OAAO;AACT,GAAG,aAAa;AAChB,GAAG,aAAa;AAChB,GAAG,eAAe;AAClB,GAAG;AACH,GAAG;AACH,CAAC,CAAC;AACF,CAAC;AACD;AACA;AACA,IAAI,qBAAqB,GAAG,MAAM;AAClC,CAAC,OAAO,CAAC,KAAK,KAAK;AACnB,EAAE,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC,SAAS,CAAC;AAC9E,EAAE,IAAI,CAAC,OAAO,EAAE,MAAM,IAAI,KAAK,CAAC,CAAC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;AACvE,EAAE,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC,QAAQ,CAAC;AACrE,EAAE,IAAI,CAAC,MAAM,EAAE,MAAM,IAAI,KAAK,CAAC,CAAC,OAAO,EAAE,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;AACpE,EAAE,OAAO,QAAQ,CAAC;AAClB,GAAG,OAAO;AACV,GAAG,MAAM;AACT,GAAG,QAAQ,EAAE,KAAK,CAAC,QAAQ;AAC3B,GAAG,UAAU,EAAE,KAAK,CAAC,UAAU;AAC/B,GAAG,iBAAiB,EAAE,KAAK,CAAC,OAAO,CAAC,iBAAiB;AACrD,GAAG,OAAO,EAAE,KAAK,CAAC,OAAO;AACzB,GAAG,GAAG,KAAK,CAAC,eAAe,GAAG,EAAE,eAAe,EAAE,KAAK,CAAC,eAAe,EAAE,GAAG;AAC3E,GAAG,CAAC;AACJ,CAAC,CAAC;AACF,CAAC;AACD;AACA;AACA,IAAI,mBAAmB,GAAG,MAAM;AAChC,CAAC,OAAO,CAAC,OAAO,KAAK,YAAY,CAAC,OAAO,CAAC;AAC1C,CAAC;AACD;AACA;AACA,IAAI,oBAAoB,GAAG,CAAC,IAAI,KAAK;AACrC,CAAC,OAAO,OAAO,KAAK,KAAK;AACzB,EAAE,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE;AACvC,EAAE,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC;AAC3E,EAAE,MAAM,kBAAkB,GAAG,KAAK,CAAC,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE;AAC5D,EAAE,IAAI,kBAAkB,CAAC,MAAM,KAAK,CAAC,EAAE,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC;AACzF,EAAE,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,EAAE;AAC1B,EAAE,MAAM,cAAc,GAAG,KAAK,CAAC,aAAa,EAAE,IAAI,EAAE,IAAI,EAAE;AAC1D,EAAE,MAAM,UAAU,GAAG,KAAK,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE;AAClD,EAAE,MAAM,IAAI,GAAG,aAAa,CAAC,KAAK,CAAC,IAAI,EAAE;AACzC,GAAG,IAAI,EAAE,cAAc;AACvB,GAAG,KAAK,EAAE;AACV,GAAG,CAAC;AACJ,EAAE,MAAM,OAAO,GAAG;AAClB,GAAG,EAAE,EAAE,WAAW,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;AAC9B,GAAG,IAAI,EAAE,WAAW;AACpB,GAAG,WAAW,EAAE,kBAAkB;AAClC,GAAG,GAAG,IAAI,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE;AAC1B,GAAG,UAAU,EAAE,EAAE;AACjB,GAAG,SAAS,EAAE,GAAG;AACjB,GAAG,SAAS,EAAE;AACd,GAAG;AACH,EAAE,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC;AACrC,EAAE,OAAO,OAAO;AAChB,CAAC,CAAC;AACF,CAAC;AACD;AACA;AACA,IAAI,mBAAmB,GAAG,CAAC,IAAI,KAAK;AACpC,CAAC,OAAO,YAAY;AACpB,EAAE,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE;AAC/B,CAAC,CAAC;AACF,CAAC;AACD;AACA;AACA,IAAI,0BAA0B,GAAG,CAAC,IAAI,KAAK;AAC3C,CAAC,OAAO,OAAO,SAAS,EAAE,SAAS,KAAK;AACxC,EAAE,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC;AACtD,EAAE,IAAI,CAAC,OAAO,EAAE,MAAM,IAAI,KAAK,CAAC,CAAC,QAAQ,EAAE,SAAS,CAAC,UAAU,CAAC,CAAC;AACjE,EAAE,IAAI,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,OAAO;AAC5D,EAAE,MAAM,IAAI,GAAG;AACf,GAAG,GAAG,OAAO;AACb,GAAG,UAAU,EAAE,CAAC,GAAG,OAAO,CAAC,UAAU,EAAE,SAAS,CAAC;AACjD,GAAG,SAAS,EAAE,IAAI,CAAC,KAAK;AACxB,GAAG;AACH,EAAE,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;AAClC,EAAE,OAAO,IAAI;AACb,CAAC,CAAC;AACF,CAAC;AACD;AACA;AACA,IAAI,+BAA+B,GAAG,CAAC,IAAI,KAAK;AAChD,CAAC,OAAO,OAAO,SAAS,EAAE,SAAS,KAAK;AACxC,EAAE,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC;AACtD,EAAE,IAAI,CAAC,OAAO,EAAE,MAAM,IAAI,KAAK,CAAC,CAAC,QAAQ,EAAE,SAAS,CAAC,UAAU,CAAC,CAAC;AACjE,EAAE,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,OAAO;AAC7D,EAAE,MAAM,IAAI,GAAG;AACf,GAAG,GAAG,OAAO;AACb,GAAG,UAAU,EAAE,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,SAAS,CAAC;AAClE,GAAG,SAAS,EAAE,IAAI,CAAC,KAAK;AACxB,GAAG;AACH,EAAE,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;AAClC,EAAE,OAAO,IAAI;AACb,CAAC,CAAC;AACF,CAAC;AACD;AACA;AACA,IAAI,2BAA2B,GAAG,CAAC,IAAI,KAAK;AAC5C,CAAC,OAAO,OAAO,SAAS,EAAE,SAAS,EAAE,SAAS,KAAK;AACnD,EAAE,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC;AACtD,EAAE,IAAI,CAAC,OAAO,EAAE,MAAM,IAAI,KAAK,CAAC,CAAC,QAAQ,EAAE,SAAS,CAAC,UAAU,CAAC,CAAC;AACjE,EAAE,MAAM,GAAG,GAAG,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,SAAS,CAAC;AACnD,EAAE,IAAI,GAAG,GAAG,CAAC,EAAE,MAAM,IAAI,KAAK,CAAC,CAAC,QAAQ,EAAE,SAAS,CAAC,4BAA4B,EAAE,SAAS,CAAC,CAAC,CAAC;AAC9F,EAAE,MAAM,MAAM,GAAG,SAAS,KAAK,IAAI,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC;AACvD,EAAE,IAAI,MAAM,GAAG,CAAC,IAAI,MAAM,IAAI,OAAO,CAAC,UAAU,CAAC,MAAM,EAAE,OAAO,OAAO;AACvE,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,UAAU,CAAC,KAAK,EAAE;AACzC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;AACvD,EAAE,MAAM,OAAO,GAAG;AAClB,GAAG,GAAG,OAAO;AACb,GAAG,UAAU,EAAE,IAAI;AACnB,GAAG,SAAS,EAAE,IAAI,CAAC,KAAK;AACxB,GAAG;AACH,EAAE,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC;AACrC,EAAE,OAAO,OAAO;AAChB,CAAC,CAAC;AACF,CAAC;AACD;AACA;AACA,IAAI,0BAA0B,GAAG,CAAC,IAAI,KAAK;AAC3C,CAAC,OAAO,OAAO,SAAS,KAAK;AAC7B,EAAE,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC;AACpD,EAAE,IAAI,CAAC,OAAO,EAAE,OAAO,IAAI;AAC3B,EAAE,MAAM,MAAM,GAAG,EAAE;AACnB,EAAE,MAAM,iBAAiB,GAAG,EAAE;AAC9B,EAAE,KAAK,MAAM,EAAE,IAAI,OAAO,CAAC,UAAU,EAAE;AACvC,GAAG,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;AAC1C,GAAG,IAAI,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;AAC5B,QAAQ,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC;AAClC,EAAE;AACF,EAAE,MAAM,SAAS,GAAG,EAAE;AACtB,EAAE,MAAM,IAAI,GAAG,EAAE;AACjB,EAAE,MAAM,MAAM,GAAG,EAAE;AACnB,EAAE,MAAM,WAAW,GAAG,EAAE;AACxB,EAAE,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE;AAC5B,GAAG,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,SAAS,EAAE,SAAS,CAAC,IAAI,CAAC;AACjD,IAAI,SAAS,EAAE,GAAG,CAAC,EAAE;AACrB,IAAI,WAAW,EAAE,GAAG,CAAC,IAAI;AACzB,IAAI,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;AACpB,IAAI,IAAI,EAAE,CAAC,CAAC,IAAI;AAChB,IAAI,IAAI,EAAE,CAAC,CAAC,IAAI;AAChB,IAAI,QAAQ,EAAE,CAAC,CAAC,QAAQ;AACxB,IAAI,WAAW,EAAE,CAAC,CAAC;AACnB,IAAI,CAAC;AACL,GAAG,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC;AAC3C,IAAI,SAAS,EAAE,GAAG,CAAC,EAAE;AACrB,IAAI,WAAW,EAAE,GAAG,CAAC,IAAI;AACzB,IAAI,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;AACpB,IAAI,SAAS,EAAE,CAAC,CAAC,SAAS;AAC1B,IAAI,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC;AACzB,IAAI,CAAC;AACL,GAAG,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,MAAM,IAAI,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC;AACjD,IAAI,SAAS,EAAE,GAAG,CAAC,EAAE;AACrB,IAAI,WAAW,EAAE,GAAG,CAAC,IAAI;AACzB,IAAI,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;AACpB,IAAI,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI;AACvB,IAAI,CAAC;AACL,GAAG,KAAK,MAAM,OAAO,IAAI,GAAG,CAAC,QAAQ,EAAE,KAAK,MAAM,CAAC,IAAI,OAAO,CAAC,WAAW,EAAE,WAAW,CAAC,IAAI,CAAC;AAC7F,IAAI,SAAS,EAAE,GAAG,CAAC,EAAE;AACrB,IAAI,WAAW,EAAE,GAAG,CAAC,IAAI;AACzB,IAAI,SAAS,EAAE,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;AACjC,IAAI,WAAW,EAAE,OAAO,CAAC,IAAI;AAC7B,IAAI,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;AACpB,IAAI,GAAG,CAAC,CAAC,KAAK,KAAK,MAAM,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE;AACnD,IAAI,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM;AAC3B,IAAI,CAAC;AACL,EAAE;AACF,EAAE,OAAO;AACT,GAAG,SAAS,EAAE,OAAO,CAAC,EAAE;AACxB,GAAG,WAAW,EAAE,OAAO,CAAC,IAAI;AAC5B,GAAG,YAAY,EAAE,OAAO,CAAC,UAAU,CAAC,MAAM;AAC1C,GAAG,QAAQ,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM;AAChC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE;AACZ,IAAI,IAAI,EAAE,CAAC,CAAC;AACZ,IAAI,CAAC,CAAC;AACN,GAAG,iBAAiB;AACpB,GAAG,SAAS;AACZ,GAAG,IAAI;AACP,GAAG,MAAM;AACT,GAAG;AACH,GAAG;AACH,CAAC,CAAC;AACF,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,mCAAmC,GAAG,CAAC,IAAI,KAAK;AACpD,CAAC,OAAO,OAAO,SAAS,KAAK;AAC7B,EAAE,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE;AAChD,EAAE,KAAK,MAAM,OAAO,IAAI,SAAS,EAAE;AACnC,GAAG,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;AACxD,GAAG,IAAI,CAAC,OAAO,EAAE;AACjB,GAAG,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,SAAS,CAAC,EAAE,OAAO,OAAO;AACxE,EAAE;AACF,EAAE,OAAO,IAAI;AACb,CAAC,CAAC;AACF,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,SAAS,GAAG,CAAC,KAAK,EAAE,EAAE,KAAK,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC;AAClE,IAAI,UAAU,GAAG,CAAC,KAAK,EAAE,GAAG,KAAK,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,YAAY,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC;AAChF;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,OAAO,GAAG,CAAC,KAAK,EAAE,IAAI,KAAK;AAC/B,CAAC,IAAI,UAAU,CAAC,KAAK,EAAE,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,KAAK;AAC7D,CAAC,OAAO,CAAC,GAAG,KAAK,EAAE,IAAI,CAAC;AACxB,CAAC;AACD;AACA,IAAI,OAAO,GAAG,CAAC,KAAK,EAAE,EAAE,KAAK;AAC7B,CAAC,MAAM,GAAG,GAAG,SAAS,CAAC,KAAK,EAAE,EAAE,CAAC;AACjC,CAAC,IAAI,GAAG,GAAG,CAAC,EAAE,OAAO,KAAK;AAC1B,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;AACzD,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,MAAM,GAAG,CAAC,KAAK,EAAE,EAAE,EAAE,WAAW,KAAK;AACzC,CAAC,MAAM,GAAG,GAAG,SAAS,CAAC,KAAK,EAAE,EAAE,CAAC;AACjC,CAAC,IAAI,GAAG,GAAG,CAAC,EAAE,OAAO,KAAK;AAC1B,CAAC,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,WAAW,CAAC,CAAC;AACrE,CAAC,IAAI,OAAO,KAAK,GAAG,EAAE,OAAO,KAAK;AAClC,CAAC,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,EAAE;AAC3B,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;AACtC,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC;AACjC,CAAC,OAAO,IAAI;AACZ,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,IAAI,MAAM,GAAG,CAAC,KAAK,EAAE,EAAE,EAAE,SAAS,KAAK;AACvC,CAAC,MAAM,GAAG,GAAG,SAAS,CAAC,KAAK,EAAE,EAAE,CAAC;AACjC,CAAC,IAAI,GAAG,GAAG,CAAC,EAAE,OAAO,KAAK;AAC1B,CAAC,OAAO,MAAM,CAAC,KAAK,EAAE,EAAE,EAAE,SAAS,KAAK,IAAI,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;AACjE,CAAC;AACD;AACA,IAAI,QAAQ,GAAG,CAAC,KAAK,EAAE,GAAG,KAAK,UAAU,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC;AAC1D;AACA;AACA;AACA;AACA;AACA,IAAI,SAAS,GAAG,CAAC,KAAK,EAAE,EAAE,EAAE,MAAM,KAAK;AACvC,CAAC,MAAM,GAAG,GAAG,SAAS,CAAC,KAAK,EAAE,EAAE,CAAC;AACjC,CAAC,IAAI,GAAG,GAAG,CAAC,EAAE,OAAO,KAAK;AAC1B,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,EAAE,GAAG,KAAK,CAAC,GAAG,CAAC;AAC9C,CAAC,MAAM,IAAI,GAAG,aAAa,CAAC,MAAM,CAAC,GAAG,IAAI,GAAG;AAC7C,EAAE,GAAG,IAAI;AACT,EAAE;AACF,EAAE;AACF,CAAC,OAAO;AACR,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;AACxB,EAAE,IAAI;AACN,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC;AACxB,EAAE;AACF,CAAC;AACD;AACA;AACA,IAAI,4BAA4B,GAAG,cAAc,KAAK,CAAC;AACvD,CAAC,WAAW,CAAC,SAAS,EAAE;AACxB,EAAE,KAAK,CAAC,CAAC,QAAQ,EAAE,SAAS,CAAC,UAAU,CAAC,CAAC;AACzC,EAAE,IAAI,CAAC,IAAI,GAAG,8BAA8B;AAC5C,CAAC;AACD,CAAC;AACD,IAAI,wBAAwB,GAAG,cAAc,KAAK,CAAC;AACnD,CAAC,WAAW,CAAC,SAAS,EAAE,SAAS,EAAE;AACnC,EAAE,KAAK,CAAC,CAAC,QAAQ,EAAE,SAAS,CAAC,4BAA4B,EAAE,SAAS,CAAC,CAAC,CAAC;AACvE,EAAE,IAAI,CAAC,IAAI,GAAG,0BAA0B;AACxC,CAAC;AACD,CAAC;AACD,IAAI,uBAAuB,GAAG,cAAc,KAAK,CAAC;AAClD,CAAC,WAAW,CAAC,QAAQ,EAAE,SAAS,EAAE;AAClC,EAAE,KAAK,CAAC,CAAC,OAAO,EAAE,QAAQ,CAAC,wBAAwB,EAAE,SAAS,CAAC,CAAC,CAAC;AACjE,EAAE,IAAI,CAAC,IAAI,GAAG,yBAAyB;AACvC,CAAC;AACD,CAAC;AACD,IAAI,wBAAwB,GAAG,cAAc,KAAK,CAAC;AACnD,CAAC,WAAW,CAAC,SAAS,EAAE,SAAS,EAAE;AACnC,EAAE,KAAK,CAAC,CAAC,QAAQ,EAAE,SAAS,CAAC,wBAAwB,EAAE,SAAS,CAAC,CAAC,CAAC;AACnE,EAAE,IAAI,CAAC,IAAI,GAAG,0BAA0B;AACxC,CAAC;AACD,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,uBAAuB,GAAG,CAAC,IAAI,KAAK;AACxC,CAAC,OAAO,OAAO,SAAS,EAAE,KAAK,KAAK;AACpC,EAAE,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC;AACpD,EAAE,IAAI,CAAC,OAAO,EAAE,MAAM,IAAI,4BAA4B,CAAC,SAAS,CAAC;AACjE,EAAE,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,MAAM,IAAI,wBAAwB,CAAC,KAAK,CAAC,SAAS,EAAE,SAAS,CAAC;AACnH,EAAE,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE;AAC3D,GAAG,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC;AAC3D,GAAG,IAAI,CAAC,OAAO,EAAE,MAAM,IAAI,wBAAwB,CAAC,KAAK,CAAC,SAAS,EAAE,SAAS,CAAC;AAC/E,GAAG,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE;AACjC,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC,SAAS,CAAC,EAAE,MAAM,IAAI,wBAAwB,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC;AACrI,GAAG,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,IAAI,uBAAuB,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;AAC/J,EAAE;AACF,EAAE,MAAM,KAAK,GAAG,OAAO,CAAC,mBAAmB,IAAI,EAAE;AACjD,EAAE,MAAM,OAAO,GAAG,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC;AACxC,EAAE,MAAM,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC;AACzC,EAAE,IAAI,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC,EAAE,OAAO;AACzC,GAAG,OAAO;AACV,GAAG,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,YAAY,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC;AACzD,GAAG,aAAa,EAAE;AAClB,GAAG;AACH,EAAE,MAAM,IAAI,GAAG;AACf,GAAG,GAAG,OAAO;AACb,GAAG,mBAAmB,EAAE,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC;AAC/C,GAAG,SAAS,EAAE,IAAI,CAAC,KAAK;AACxB,GAAG;AACH,EAAE,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;AAChC,EAAE,OAAO;AACT,GAAG,OAAO,EAAE,IAAI;AAChB,GAAG,IAAI,EAAE,OAAO;AAChB,GAAG,aAAa,EAAE;AAClB,GAAG;AACH,CAAC,CAAC;AACF,CAAC;AACD;AACA;AACA;AACA;AACA,IAAI,SAAS,GAAG,CAAC,KAAK,EAAE,IAAI,KAAK;AACjC,CAAC,MAAM,EAAE,GAAG,aAAa,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;AACrC,CAAC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,EAAE;AAC7B,CAAC,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE;AACpD,CAAC,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,GAAG,EAAE;AAC5D,CAAC,QAAQ,KAAK,CAAC,IAAI;AACnB,EAAE,KAAK,SAAS,EAAE,OAAO;AACzB,GAAG,EAAE;AACL,GAAG,IAAI,EAAE,SAAS;AAClB,GAAG,SAAS,EAAE,KAAK,CAAC,SAAS;AAC7B,GAAG,OAAO;AACV,GAAG,GAAG,IAAI;AACV,GAAG,GAAG;AACN,GAAG;AACH,EAAE,KAAK,SAAS,EAAE,OAAO;AACzB,GAAG,EAAE;AACL,GAAG,IAAI,EAAE,SAAS;AAClB,GAAG,SAAS,EAAE,KAAK,CAAC,SAAS;AAC7B,GAAG,SAAS,EAAE,KAAK,CAAC,SAAS;AAC7B,GAAG,OAAO;AACV,GAAG,GAAG,IAAI;AACV,GAAG,GAAG;AACN,GAAG;AACH,EAAE,KAAK,QAAQ,EAAE,OAAO;AACxB,GAAG,EAAE;AACL,GAAG,IAAI,EAAE,QAAQ;AACjB,GAAG,SAAS,EAAE,KAAK,CAAC,SAAS;AAC7B,GAAG,QAAQ,EAAE,KAAK,CAAC,QAAQ;AAC3B,GAAG,OAAO;AACV,GAAG,GAAG,IAAI;AACV,GAAG,GAAG;AACN,GAAG;AACH;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,uBAAuB,GAAG,CAAC,IAAI,KAAK;AACxC,CAAC,OAAO,OAAO,SAAS,EAAE,WAAW,KAAK;AAC1C,EAAE,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC;AACpD,EAAE,IAAI,CAAC,OAAO,EAAE,MAAM,IAAI,4BAA4B,CAAC,SAAS,CAAC;AACjE,EAAE,MAAM,KAAK,GAAG,OAAO,CAAC,mBAAmB,IAAI,EAAE;AACjD,EAAE,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,EAAE,WAAW,CAAC;AAC/C,EAAE,IAAI,SAAS,KAAK,KAAK,EAAE,OAAO,OAAO;AACzC,EAAE,MAAM,IAAI,GAAG;AACf,GAAG,GAAG,OAAO;AACb,GAAG,mBAAmB,EAAE,SAAS;AACjC,GAAG,SAAS,EAAE,IAAI,CAAC,KAAK;AACxB,GAAG;AACH,EAAE,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;AAChC,EAAE,OAAO,IAAI;AACb,CAAC,CAAC;AACF,CAAC;AACD;AACA;AACA,IAAI,oBAAoB,GAAG,CAAC,IAAI,KAAK;AACrC,CAAC,OAAO,OAAO,SAAS,EAAE,WAAW,EAAE,KAAK,KAAK;AACjD,EAAE,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC;AACpD,EAAE,IAAI,CAAC,OAAO,EAAE,MAAM,IAAI,4BAA4B,CAAC,SAAS,CAAC;AACjE,EAAE,MAAM,KAAK,GAAG,OAAO,CAAC,mBAAmB,IAAI,EAAE;AACjD,EAAE,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,KAAK,IAAI,GAAG,MAAM,CAAC,KAAK,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,CAAC,GAAG,MAAM,CAAC,KAAK,EAAE,WAAW,EAAE,KAAK,CAAC,SAAS,CAAC;AACrI,EAAE,IAAI,SAAS,KAAK,KAAK,EAAE,OAAO,OAAO;AACzC,EAAE,MAAM,IAAI,GAAG;AACf,GAAG,GAAG,OAAO;AACb,GAAG,mBAAmB,EAAE,SAAS;AACjC,GAAG,SAAS,EAAE,IAAI,CAAC,KAAK;AACxB,GAAG;AACH,EAAE,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;AAChC,EAAE,OAAO,IAAI;AACb,CAAC,CAAC;AACF,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,gBAAgB,GAAG,CAAC,IAAI,KAAK;AACjC,CAAC,OAAO,OAAO,SAAS,KAAK;AAC7B,EAAE,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC;AACpD,EAAE,IAAI,CAAC,OAAO,EAAE,MAAM,IAAI,4BAA4B,CAAC,SAAS,CAAC;AACjE,EAAE,MAAM,KAAK,GAAG,OAAO,CAAC,mBAAmB,IAAI,EAAE;AACjD,EAAE,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,OAAO,EAAE;AACnC,EAAE,MAAM,KAAK,mBAAmB,IAAI,GAAG,EAAE;AACzC,EAAE,MAAM,cAAc,GAAG,OAAO,SAAS,KAAK;AAC9C,GAAG,MAAM,GAAG,GAAG,MAAM,CAAC,SAAS,CAAC;AAChC,GAAG,IAAI,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;AAC5C,GAAG,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC;AAC/C,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;AACpB,GAAG,OAAO,CAAC;AACX,EAAE,CAAC;AACH,EAAE,MAAM,KAAK,GAAG,EAAE;AAClB,EAAE,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;AAC5B,GAAG,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC;AACvD,GAAG,IAAI,CAAC,OAAO,EAAE;AACjB,IAAI,KAAK,CAAC,IAAI,CAAC;AACf,KAAK,IAAI;AACT,KAAK,WAAW,EAAE,CAAC,iBAAiB,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;AACvD,KAAK,QAAQ,EAAE;AACf,KAAK,CAAC;AACN,IAAI;AACJ,GAAG;AACH,GAAG,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE;AAChC,IAAI,KAAK,CAAC,IAAI,CAAC;AACf,KAAK,IAAI;AACT,KAAK,WAAW,EAAE,OAAO,CAAC,IAAI;AAC9B,KAAK,QAAQ,EAAE;AACf,KAAK,CAAC;AACN,IAAI;AACJ,GAAG;AACH,GAAG,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE;AAChC,IAAI,MAAM,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,SAAS,CAAC;AACzE,IAAI,IAAI,CAAC,OAAO,EAAE;AAClB,KAAK,KAAK,CAAC,IAAI,CAAC;AAChB,MAAM,IAAI;AACV,MAAM,WAAW,EAAE,OAAO,CAAC,IAAI;AAC/B,MAAM,WAAW,EAAE,CAAC,iBAAiB,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;AACxD,MAAM,QAAQ,EAAE;AAChB,MAAM,CAAC;AACP,KAAK;AACL,IAAI;AACJ,IAAI,KAAK,CAAC,IAAI,CAAC;AACf,KAAK,IAAI;AACT,KAAK,WAAW,EAAE,OAAO,CAAC,IAAI;AAC9B,KAAK,WAAW,EAAE,OAAO,CAAC,IAAI;AAC9B,KAAK,QAAQ,EAAE;AACf,KAAK,CAAC;AACN,IAAI;AACJ,GAAG;AACH,GAAG,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,QAAQ,CAAC;AAChG,GAAG,IAAI,CAAC,MAAM,EAAE;AAChB,IAAI,KAAK,CAAC,IAAI,CAAC;AACf,KAAK,IAAI;AACT,KAAK,WAAW,EAAE,OAAO,CAAC,IAAI;AAC9B,KAAK,UAAU,EAAE,CAAC,gBAAgB,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;AACpD,KAAK,QAAQ,EAAE;AACf,KAAK,CAAC;AACN,IAAI;AACJ,GAAG;AACH,GAAG,KAAK,CAAC,IAAI,CAAC;AACd,IAAI,IAAI;AACR,IAAI,WAAW,EAAE,OAAO,CAAC,IAAI;AAC7B,IAAI,UAAU,EAAE,MAAM,CAAC,IAAI;AAC3B,IAAI,QAAQ,EAAE;AACd,IAAI,CAAC;AACL,EAAE;AACF,EAAE,OAAO,KAAK;AACd,CAAC,CAAC;AACF,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,yBAAyB,GAAG,CAAC,IAAI,KAAK;AAC1C,CAAC,OAAO,OAAO,SAAS,EAAE,MAAM,EAAE,MAAM,KAAK;AAC7C,EAAE,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC;AACpD,EAAE,IAAI,CAAC,OAAO,EAAE,MAAM,IAAI,4BAA4B,CAAC,SAAS,CAAC;AACjE,EAAE,MAAM,KAAK,GAAG,OAAO,CAAC,mBAAmB,IAAI,EAAE;AACjD,EAAE,MAAM,IAAI,GAAG,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC;AAC/C,EAAE,IAAI,IAAI,KAAK,KAAK,EAAE,OAAO,OAAO;AACpC,EAAE,MAAM,OAAO,GAAG;AAClB,GAAG,GAAG,OAAO;AACb,GAAG,mBAAmB,EAAE,IAAI;AAC5B,GAAG,SAAS,EAAE,IAAI,CAAC,KAAK;AACxB,GAAG;AACH,EAAE,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC;AACnC,EAAE,OAAO,OAAO;AAChB,CAAC,CAAC;AACF,CAAC;AACD;AACA;AACA,IAAI,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC;AACzB;AACA;AACA,IAAI,mBAAmB,GAAG,CAAC,IAAI,KAAK;AACpC,CAAC,OAAO,OAAO,KAAK,KAAK;AACzB,EAAE,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE;AACvC,EAAE,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC;AAC1E,EAAE,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,EAAE;AAC1B,EAAE,MAAM,MAAM,GAAG;AACjB,GAAG,EAAE,EAAE,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;AAC7B,GAAG,IAAI,EAAE,WAAW;AACpB,GAAG,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,IAAI,EAAE,IAAI,MAAM;AACnD,GAAG,UAAU,EAAE,EAAE;AACjB,GAAG,SAAS,EAAE,GAAG;AACjB,GAAG,SAAS,EAAE;AACd,GAAG;AACH,EAAE,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC;AACpC,EAAE,OAAO,MAAM;AACf,CAAC,CAAC;AACF,CAAC;AACD;AACA;AACA,IAAI,kBAAkB,GAAG,CAAC,IAAI,KAAK;AACnC,CAAC,OAAO,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE;AACpC,CAAC;AACD;AACA;AACA,IAAI,yBAAyB,GAAG,CAAC,IAAI,KAAK;AAC1C,CAAC,OAAO,OAAO,QAAQ,EAAE,SAAS,KAAK;AACvC,EAAE,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC;AACrD,EAAE,IAAI,CAAC,OAAO,EAAE,MAAM,IAAI,KAAK,CAAC,CAAC,OAAO,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC;AAC/D,EAAE,IAAI,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,OAAO;AAC5D,EAAE,MAAM,IAAI,GAAG;AACf,GAAG,GAAG,OAAO;AACb,GAAG,UAAU,EAAE,CAAC,GAAG,OAAO,CAAC,UAAU,EAAE,SAAS,CAAC;AACjD,GAAG,SAAS,EAAE,IAAI,CAAC,KAAK;AACxB,GAAG;AACH,EAAE,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;AAClC,EAAE,OAAO,IAAI;AACb,CAAC,CAAC;AACF,CAAC;AACD;AACA;AACA,IAAI,8BAA8B,GAAG,CAAC,IAAI,KAAK;AAC/C,CAAC,OAAO,OAAO,QAAQ,EAAE,SAAS,KAAK;AACvC,EAAE,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC;AACrD,EAAE,IAAI,CAAC,OAAO,EAAE,MAAM,IAAI,KAAK,CAAC,CAAC,OAAO,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC;AAC/D,EAAE,MAAM,IAAI,GAAG;AACf,GAAG,GAAG,OAAO;AACb,GAAG,UAAU,EAAE,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,SAAS,CAAC;AAClE,GAAG,SAAS,EAAE,IAAI,CAAC,KAAK;AACxB,GAAG;AACH,EAAE,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;AAClC,EAAE,OAAO,IAAI;AACb,CAAC,CAAC;AACF,CAAC;AACD;AACA;AACA,IAAI,oBAAoB,GAAG,CAAC,IAAI,KAAK,YAAY,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE;AACtE;AACA;AACA,IAAI,sBAAsB,GAAG,CAAC,IAAI,KAAK,OAAO,KAAK,KAAK;AACxD,CAAC,IAAI,KAAK,CAAC,KAAK,KAAK,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,MAAM,IAAI,KAAK,CAAC,CAAC,mBAAmB,EAAE,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,yCAAyC,CAAC,CAAC;AAC5J,CAAC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE;AAC5C,CAAC,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,KAAK,IAAI,GAAG,cAAc,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC;AACzH,CAAC,IAAI,IAAI,KAAK,OAAO,EAAE,OAAO,OAAO;AACrC,CAAC,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;AACjC,CAAC,OAAO,IAAI;AACZ,CAAC;AACD;AACA;AACA,IAAI,eAAe,GAAG,CAAC,IAAI,KAAK;AAChC,CAAC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,WAAW;AACxC,CAAC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,iBAAiB;AAC1C,CAAC,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU;AACnC,CAAC,MAAM,iBAAiB,GAAG,IAAI,CAAC,iBAAiB;AACjD,CAAC,MAAM,gBAAgB,GAAG,IAAI,CAAC,gBAAgB;AAC/C,CAAC,MAAM,gBAAgB,GAAG,IAAI,CAAC,gBAAgB;AAC/C,CAAC,MAAM,oBAAoB,GAAG,IAAI,CAAC,oBAAoB;AACvD,CAAC,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa;AACzC,CAAC,OAAO;AACR,EAAE,UAAU;AACZ,EAAE,iBAAiB;AACnB,EAAE,gBAAgB;AAClB,EAAE,gBAAgB;AAClB,EAAE,oBAAoB;AACtB,EAAE,aAAa;AACf,EAAE,KAAK;AACP,EAAE,GAAG;AACL,EAAE,QAAQ,EAAE;AACZ,GAAG,aAAa,EAAE,oBAAoB,CAAC;AACvC,IAAI,UAAU;AACd,IAAI,KAAK;AACT,IAAI;AACJ,IAAI,CAAC;AACL,GAAG,WAAW,EAAE,kBAAkB,CAAC;AACnC,IAAI,UAAU;AACd,IAAI;AACJ,IAAI,CAAC;AACL,GAAG,aAAa,EAAE,oBAAoB,CAAC;AACvC,IAAI,UAAU;AACd,IAAI;AACJ,IAAI,CAAC;AACL,GAAG,aAAa,EAAE,oBAAoB,CAAC,EAAE,UAAU,EAAE,CAAC;AACtD,GAAG,YAAY,EAAE,mBAAmB,CAAC,EAAE,UAAU,EAAE,CAAC;AACpD,GAAG,wBAAwB,EAAE,+BAA+B,CAAC;AAC7D,IAAI,UAAU;AACd,IAAI;AACJ,IAAI,CAAC;AACL,GAAG,UAAU,EAAE,iBAAiB,CAAC,EAAE,UAAU,EAAE,CAAC;AAChD,GAAG,cAAc,EAAE,qBAAqB,CAAC;AACzC,IAAI,UAAU;AACd,IAAI;AACJ,IAAI,CAAC;AACL,GAAG,WAAW,EAAE,kBAAkB,CAAC;AACnC,IAAI,UAAU;AACd,IAAI,iBAAiB;AACrB,IAAI,OAAO,EAAE,IAAI,CAAC,OAAO;AACzB,IAAI,cAAc,EAAE,IAAI,CAAC;AACzB,IAAI,CAAC;AACL,GAAG,cAAc,EAAE,qBAAqB,EAAE;AAC1C,GAAG,YAAY,EAAE,mBAAmB,EAAE;AACtC,GAAG,aAAa,EAAE,oBAAoB,CAAC;AACvC,IAAI,UAAU,EAAE,iBAAiB;AACjC,IAAI,KAAK;AACT,IAAI;AACJ,IAAI,CAAC;AACL,GAAG,WAAW,EAAE,kBAAkB,CAAC;AACnC,IAAI,UAAU,EAAE,iBAAiB;AACjC,IAAI;AACJ,IAAI,CAAC;AACL,GAAG,aAAa,EAAE,oBAAoB,CAAC,EAAE,UAAU,EAAE,iBAAiB,EAAE,CAAC;AACzE,GAAG,UAAU,EAAE,iBAAiB,CAAC,EAAE,UAAU,EAAE,iBAAiB,EAAE,CAAC;AACnE,GAAG,YAAY,EAAE,mBAAmB,CAAC,EAAE,UAAU,EAAE,iBAAiB,EAAE,CAAC;AACvE,GAAG,mBAAmB,EAAE,0BAA0B,CAAC;AACnD,IAAI,UAAU,EAAE,iBAAiB;AACjC,IAAI;AACJ,IAAI,CAAC;AACL,GAAG,wBAAwB,EAAE,+BAA+B,CAAC;AAC7D,IAAI,UAAU,EAAE,iBAAiB;AACjC,IAAI;AACJ,IAAI,CAAC;AACL,GAAG,oBAAoB,EAAE,2BAA2B,CAAC;AACrD,IAAI,UAAU,EAAE,iBAAiB;AACjC,IAAI;AACJ,IAAI,CAAC;AACL,GAAG,mBAAmB,EAAE,0BAA0B,CAAC;AACnD,IAAI,QAAQ,EAAE,iBAAiB;AAC/B,IAAI,QAAQ,EAAE;AACd,IAAI,CAAC;AACL,GAAG,4BAA4B,EAAE,mCAAmC,CAAC,EAAE,UAAU,EAAE,iBAAiB,EAAE,CAAC;AACvG,GAAG,YAAY,EAAE,mBAAmB,CAAC;AACrC,IAAI,UAAU,EAAE,gBAAgB;AAChC,IAAI,KAAK;AACT,IAAI;AACJ,IAAI,CAAC;AACL,GAAG,UAAU,EAAE,iBAAiB,CAAC;AACjC,IAAI,UAAU,EAAE,gBAAgB;AAChC,IAAI;AACJ,IAAI,CAAC;AACL,GAAG,YAAY,EAAE,mBAAmB,CAAC,EAAE,UAAU,EAAE,gBAAgB,EAAE,CAAC;AACtE,GAAG,SAAS,EAAE,gBAAgB,CAAC,EAAE,UAAU,EAAE,gBAAgB,EAAE,CAAC;AAChE,GAAG,WAAW,EAAE,kBAAkB,CAAC,EAAE,UAAU,EAAE,gBAAgB,EAAE,CAAC;AACpE,GAAG,kBAAkB,EAAE,yBAAyB,CAAC;AACjD,IAAI,UAAU,EAAE,gBAAgB;AAChC,IAAI;AACJ,IAAI,CAAC;AACL,GAAG,uBAAuB,EAAE,8BAA8B,CAAC;AAC3D,IAAI,UAAU,EAAE,gBAAgB;AAChC,IAAI;AACJ,IAAI,CAAC;AACL,GAAG,gBAAgB,EAAE,uBAAuB,CAAC;AAC7C,IAAI,QAAQ,EAAE,iBAAiB;AAC/B,IAAI,QAAQ,EAAE,UAAU;AACxB,IAAI,KAAK;AACT,IAAI;AACJ,IAAI,CAAC;AACL,GAAG,gBAAgB,EAAE,uBAAuB,CAAC;AAC7C,IAAI,QAAQ,EAAE,iBAAiB;AAC/B,IAAI;AACJ,IAAI,CAAC;AACL,GAAG,aAAa,EAAE,oBAAoB,CAAC;AACvC,IAAI,QAAQ,EAAE,iBAAiB;AAC/B,IAAI;AACJ,IAAI,CAAC;AACL,GAAG,SAAS,EAAE,gBAAgB,CAAC;AAC/B,IAAI,QAAQ,EAAE,iBAAiB;AAC/B,IAAI,QAAQ,EAAE;AACd,IAAI,CAAC;AACL,GAAG,kBAAkB,EAAE,yBAAyB,CAAC;AACjD,IAAI,QAAQ,EAAE,iBAAiB;AAC/B,IAAI;AACJ,IAAI,CAAC;AACL,GAAG,aAAa,EAAE,oBAAoB,CAAC,EAAE,UAAU,EAAE,oBAAoB,EAAE,CAAC;AAC5E,GAAG,eAAe,EAAE,sBAAsB,CAAC,EAAE,UAAU,EAAE,oBAAoB,EAAE,CAAC;AAChF,GAAG,SAAS,EAAE,CAAC,KAAK,KAAK,aAAa,CAAC,SAAS,CAAC,KAAK;AACtD;AACA,EAAE;AACF,CAAC;AACD;AACA;AACA,IAAI,MAAM,GAAG,IAAI;AACd,IAAC,mBAAmB,GAAG,YAAY;AACtC,CAAC,IAAI,MAAM,EAAE,OAAO,MAAM;AAC1B,CAAC,MAAM,UAAU,GAAG,IAAI,yBAAyB,EAAE;AACnD,CAAC,MAAM,iBAAiB,GAAG,IAAI,yBAAyB,EAAE;AAC1D,CAAC,MAAM,gBAAgB,GAAG,IAAI,wBAAwB,EAAE;AACxD,CAAC,MAAM,gBAAgB,GAAG,IAAI,sCAAsC,EAAE;AACtE,CAAC,MAAM,oBAAoB,GAAG,IAAI,4BAA4B,EAAE;AAChE,CAAC,MAAM,SAAS,GAAG,eAAe,CAAC;AACnC,EAAE,UAAU;AACZ,EAAE,iBAAiB;AACnB,EAAE,gBAAgB;AAClB,EAAE,gBAAgB;AAClB,EAAE,oBAAoB;AACtB,EAAE,aAAa,EAAE,IAAI,oBAAoB,CAAC;AAC1C,GAAG,QAAQ,EAAE,iBAAiB;AAC9B,GAAG,QAAQ,EAAE,UAAU;AACvB,GAAG,OAAO,EAAE,oBAAoB;AAChC,GAAG,KAAK,EAAE;AACV,GAAG,CAAC;AACJ,EAAE,OAAO,EAAE,CAAC,GAAG,YAAY,EAAE,GAAG,sBAAsB,CAAC;AACvD,EAAE,cAAc,EAAE;AAClB,EAAE,CAAC;AACH,CAAC,MAAM,GAAG,SAAS;AACnB,CAAC,OAAO,SAAS;AACjB;;;;"}
|