framefields 2.3.2 → 2.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 +24 -1
- package/dist/audio/index.d.mts +4 -4
- package/dist/audio/index.mjs +10 -10
- package/dist/{audio-BNnEclHU.d.mts → audio-C6toT7F3.d.mts} +3 -3
- package/dist/{audio-BNnEclHU.d.mts.map → audio-C6toT7F3.d.mts.map} +1 -1
- package/dist/{audio-C7Kn5xBm.mjs → audio-DXwNhi1z.mjs} +3 -3
- package/dist/{audio-C7Kn5xBm.mjs.map → audio-DXwNhi1z.mjs.map} +1 -1
- package/dist/{dist-CPUIfrtw.mjs → dist-Cl0mvShy.mjs} +2 -2
- package/dist/{dist-CPUIfrtw.mjs.map → dist-Cl0mvShy.mjs.map} +1 -1
- package/dist/{dist-CturBK2Z.mjs → dist-DRB6Vg5u.mjs} +1188 -743
- package/dist/dist-DRB6Vg5u.mjs.map +1 -0
- package/dist/effects/index.d.mts +4 -4
- package/dist/effects/index.mjs +34 -34
- package/dist/{effects-CW1VgdI5.mjs → effects-lBqG-vd1.mjs} +2 -2
- package/dist/{effects-CW1VgdI5.mjs.map → effects-lBqG-vd1.mjs.map} +1 -1
- package/dist/fonts/index.mjs +2 -2
- package/dist/{fonts-EgMNL8KE.mjs → fonts-DlRJD6NS.mjs} +2 -2
- package/dist/{fonts-EgMNL8KE.mjs.map → fonts-DlRJD6NS.mjs.map} +1 -1
- package/dist/{gpu-CN14e7Bi.mjs → gpu-DOQX1W2q.mjs} +2 -2
- package/dist/{gpu-CN14e7Bi.mjs.map → gpu-DOQX1W2q.mjs.map} +1 -1
- package/dist/{index-QmkcUL3W.d.mts → index-BHqdtJbN.d.mts} +2 -2
- package/dist/{index-QmkcUL3W.d.mts.map → index-BHqdtJbN.d.mts.map} +1 -1
- package/dist/{index-CeRv1KC0.d.mts → index-BONyHjZX.d.mts} +3 -3
- package/dist/{index-CeRv1KC0.d.mts.map → index-BONyHjZX.d.mts.map} +1 -1
- package/dist/{index-Cg2ptXcs.d.mts → index-CaiZ5p6q.d.mts} +2 -2
- package/dist/{index-Cg2ptXcs.d.mts.map → index-CaiZ5p6q.d.mts.map} +1 -1
- package/dist/{index-BU51pxZO.d.mts → index-Cf1pVxn0.d.mts} +4 -4
- package/dist/{index-BU51pxZO.d.mts.map → index-Cf1pVxn0.d.mts.map} +1 -1
- package/dist/{index-AdrZIWT0.d.mts → index-DEODKaL6.d.mts} +13 -1
- package/dist/index-DEODKaL6.d.mts.map +1 -0
- package/dist/{index-B3BwLHa6.d.mts → index-DN9oXO-X.d.mts} +3 -3
- package/dist/{index-B3BwLHa6.d.mts.map → index-DN9oXO-X.d.mts.map} +1 -1
- package/dist/index.d.mts +177 -9
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +485 -90
- package/dist/index.mjs.map +1 -1
- package/dist/preview/index.d.mts +2 -2
- package/dist/preview/index.mjs +10 -10
- package/dist/{preview-1sjnhHQL.mjs → preview-Ca4tF5Ro.mjs} +2 -2
- package/dist/{preview-1sjnhHQL.mjs.map → preview-Ca4tF5Ro.mjs.map} +1 -1
- package/dist/preview-engine/chunk-7QJUC6YY.mjs +1525 -0
- package/dist/preview-engine/framefields.mjs +32 -25
- package/dist/preview-engine/player.mjs +1 -1
- package/dist/preview-engine/{renderers-WP2LBR5U.mjs → renderers-HQEKSUNR.mjs} +3 -3
- package/dist/{program-DtiNMTxO.mjs → program-CJEg2wMa.mjs} +2 -2
- package/dist/{program-DtiNMTxO.mjs.map → program-CJEg2wMa.mjs.map} +1 -1
- package/dist/renderer/index.d.mts +2 -2
- package/dist/renderer/index.mjs +2 -2
- package/dist/renderer--IHe-yqK.mjs +5 -0
- package/dist/{renderer-CMzd3BrW.mjs → renderer-445i0uxs.mjs} +2 -2
- package/dist/{renderer-CMzd3BrW.mjs.map → renderer-445i0uxs.mjs.map} +1 -1
- package/dist/{renderer-MS70wrQB.mjs → renderer-5tQ7ImPk.mjs} +2 -2
- package/dist/{renderer-MS70wrQB.mjs.map → renderer-5tQ7ImPk.mjs.map} +1 -1
- package/dist/{renderer-Dw1e5phO.mjs → renderer-Ai5nZsof.mjs} +3 -3
- package/dist/{renderer-Dw1e5phO.mjs.map → renderer-Ai5nZsof.mjs.map} +1 -1
- package/dist/renderer-B16iwR0_.mjs +5 -0
- package/dist/renderer-B3EEYpx6.mjs +5 -0
- package/dist/renderer-B3Si5IB4.mjs +5 -0
- package/dist/{renderer-ktpusVT2.mjs → renderer-B4JmNa_T.mjs} +3 -3
- package/dist/{renderer-ktpusVT2.mjs.map → renderer-B4JmNa_T.mjs.map} +1 -1
- package/dist/{renderer-CBG6ewNf.mjs → renderer-B6UqWjtH.mjs} +3 -3
- package/dist/{renderer-CBG6ewNf.mjs.map → renderer-B6UqWjtH.mjs.map} +1 -1
- package/dist/{renderer-BmWH4dK1.mjs → renderer-B8v8iEkB.mjs} +7 -6
- package/dist/{renderer-BmWH4dK1.mjs.map → renderer-B8v8iEkB.mjs.map} +1 -1
- package/dist/{renderer-dJcu7WqI.mjs → renderer-BFWRUTov.mjs} +3 -3
- package/dist/{renderer-dJcu7WqI.mjs.map → renderer-BFWRUTov.mjs.map} +1 -1
- package/dist/renderer-BH8vZKmX.mjs +5 -0
- package/dist/renderer-BHZie6Pa.mjs +5 -0
- package/dist/renderer-BHpJ1e15.mjs +5 -0
- package/dist/{renderer-CRYO5HQw.mjs → renderer-BL36f2IQ.mjs} +2 -2
- package/dist/{renderer-CRYO5HQw.mjs.map → renderer-BL36f2IQ.mjs.map} +1 -1
- package/dist/{renderer-Bq9jXYJ5.mjs → renderer-BOvCstdU.mjs} +3 -3
- package/dist/{renderer-Bq9jXYJ5.mjs.map → renderer-BOvCstdU.mjs.map} +1 -1
- package/dist/renderer-BPJ79b47.mjs +5 -0
- package/dist/renderer-BPbM_6WR.mjs +5 -0
- package/dist/{renderer-DjwF10p2.mjs → renderer-BPsi7Q7Z.mjs} +3 -3
- package/dist/{renderer-DjwF10p2.mjs.map → renderer-BPsi7Q7Z.mjs.map} +1 -1
- package/dist/{renderer-BYj8x8YM.mjs → renderer-BTJyO6ov.mjs} +2 -2
- package/dist/{renderer-BYj8x8YM.mjs.map → renderer-BTJyO6ov.mjs.map} +1 -1
- package/dist/{renderer-DmOewVsB.mjs → renderer-BZCLdb8F.mjs} +3 -3
- package/dist/{renderer-DmOewVsB.mjs.map → renderer-BZCLdb8F.mjs.map} +1 -1
- package/dist/{renderer-CbNW0KHh.mjs → renderer-BZF48o1T.mjs} +3 -3
- package/dist/{renderer-CbNW0KHh.mjs.map → renderer-BZF48o1T.mjs.map} +1 -1
- package/dist/{renderer-_Fh9IBlE.mjs → renderer-BZWiY6Jw.mjs} +3 -3
- package/dist/{renderer-_Fh9IBlE.mjs.map → renderer-BZWiY6Jw.mjs.map} +1 -1
- package/dist/{renderer-Fm2brScz.mjs → renderer-BZvWlGsa.mjs} +3 -3
- package/dist/{renderer-Fm2brScz.mjs.map → renderer-BZvWlGsa.mjs.map} +1 -1
- package/dist/{renderer-DL4oR40b.mjs → renderer-BaBluD-r.mjs} +2 -2
- package/dist/{renderer-DL4oR40b.mjs.map → renderer-BaBluD-r.mjs.map} +1 -1
- package/dist/{renderer-DacnnTjY.mjs → renderer-BaHEN_Kv.mjs} +3 -3
- package/dist/{renderer-DacnnTjY.mjs.map → renderer-BaHEN_Kv.mjs.map} +1 -1
- package/dist/{renderer-Mdyv_W8K.mjs → renderer-BhZutM8K.mjs} +3 -3
- package/dist/{renderer-Mdyv_W8K.mjs.map → renderer-BhZutM8K.mjs.map} +1 -1
- package/dist/renderer-Bn-WnRh9.mjs +5 -0
- package/dist/renderer-BqHvDAUe.mjs +5 -0
- package/dist/{renderer-D8tdGi2P.mjs → renderer-BtJ6XYN7.mjs} +3 -3
- package/dist/{renderer-D8tdGi2P.mjs.map → renderer-BtJ6XYN7.mjs.map} +1 -1
- package/dist/{renderer-F410V727.mjs → renderer-BzgnTEvf.mjs} +3 -3
- package/dist/{renderer-F410V727.mjs.map → renderer-BzgnTEvf.mjs.map} +1 -1
- package/dist/{renderer-D-eTVnDS.mjs → renderer-C-La-IAt.mjs} +2 -2
- package/dist/{renderer-D-eTVnDS.mjs.map → renderer-C-La-IAt.mjs.map} +1 -1
- package/dist/{renderer-BFHgl-0f.mjs → renderer-C2ZIAhdJ.mjs} +2 -2
- package/dist/{renderer-BFHgl-0f.mjs.map → renderer-C2ZIAhdJ.mjs.map} +1 -1
- package/dist/{renderer-BebePsG7.mjs → renderer-C9pl21Zb.mjs} +2 -2
- package/dist/{renderer-BebePsG7.mjs.map → renderer-C9pl21Zb.mjs.map} +1 -1
- package/dist/renderer-CAtXDNsh.mjs +5 -0
- package/dist/{renderer-BkXqFmNO.mjs → renderer-CCCitH4J.mjs} +2 -2
- package/dist/{renderer-BkXqFmNO.mjs.map → renderer-CCCitH4J.mjs.map} +1 -1
- package/dist/{renderer-QMGrRiab.mjs → renderer-CCu1Q8ib.mjs} +2 -2
- package/dist/{renderer-QMGrRiab.mjs.map → renderer-CCu1Q8ib.mjs.map} +1 -1
- package/dist/{renderer-DvoPplvC.mjs → renderer-CG4TmDWH.mjs} +2 -2
- package/dist/{renderer-S6ez0leJ.mjs → renderer-CJmZURPQ.mjs} +2 -2
- package/dist/{renderer-S6ez0leJ.mjs.map → renderer-CJmZURPQ.mjs.map} +1 -1
- package/dist/{renderer-CPNLkir4.mjs → renderer-CN3iCli4.mjs} +2 -2
- package/dist/{renderer-CPNLkir4.mjs.map → renderer-CN3iCli4.mjs.map} +1 -1
- package/dist/{renderer--S2cNYXS.mjs → renderer-CNS8LA2_.mjs} +3 -3
- package/dist/{renderer--S2cNYXS.mjs.map → renderer-CNS8LA2_.mjs.map} +1 -1
- package/dist/renderer-C_5nfVce.mjs +5 -0
- package/dist/{renderer-ButaUWLr.mjs → renderer-CduDa1qf.mjs} +3 -3
- package/dist/{renderer-ButaUWLr.mjs.map → renderer-CduDa1qf.mjs.map} +1 -1
- package/dist/{renderer-Ch1rv1XP.mjs → renderer-CduL1AOK.mjs} +2 -2
- package/dist/{renderer-Ch1rv1XP.mjs.map → renderer-CduL1AOK.mjs.map} +1 -1
- package/dist/{renderer-z3YOOR3k.mjs → renderer-Cfto0m0-.mjs} +3 -3
- package/dist/{renderer-z3YOOR3k.mjs.map → renderer-Cfto0m0-.mjs.map} +1 -1
- package/dist/{renderer-CJwgsecF.mjs → renderer-CgZ1G37H.mjs} +2 -2
- package/dist/{renderer-CJwgsecF.mjs.map → renderer-CgZ1G37H.mjs.map} +1 -1
- package/dist/renderer-Cie7KKeQ.mjs +5 -0
- package/dist/{renderer-BaOC1Pd1.mjs → renderer-CjTxu89O.mjs} +3 -3
- package/dist/{renderer-BaOC1Pd1.mjs.map → renderer-CjTxu89O.mjs.map} +1 -1
- package/dist/{renderer-C2Ff-9u_.mjs → renderer-CoN2JgLO.mjs} +2 -2
- package/dist/{renderer-C2Ff-9u_.mjs.map → renderer-CoN2JgLO.mjs.map} +1 -1
- package/dist/{renderer-DjPC9l3w.mjs → renderer-CoO2j8AC.mjs} +3 -3
- package/dist/{renderer-DjPC9l3w.mjs.map → renderer-CoO2j8AC.mjs.map} +1 -1
- package/dist/{renderer-BRWpn3dT.mjs → renderer-CoX23zo_.mjs} +3 -3
- package/dist/{renderer-BRWpn3dT.mjs.map → renderer-CoX23zo_.mjs.map} +1 -1
- package/dist/renderer-CuoxvPsX.mjs +5 -0
- package/dist/renderer-Cvd3oIJQ.mjs +5 -0
- package/dist/renderer-CxAgpBrJ.mjs +5 -0
- package/dist/{renderer-C4puWDLK.mjs → renderer-CxSH3F_n.mjs} +2 -2
- package/dist/{renderer-C4puWDLK.mjs.map → renderer-CxSH3F_n.mjs.map} +1 -1
- package/dist/{renderer-B6c_Rk_2.mjs → renderer-Cz9fzS11.mjs} +3 -3
- package/dist/{renderer-B6c_Rk_2.mjs.map → renderer-Cz9fzS11.mjs.map} +1 -1
- package/dist/{renderer-BAmGO6Hj.mjs → renderer-D-IcBLT0.mjs} +3 -3
- package/dist/{renderer-BAmGO6Hj.mjs.map → renderer-D-IcBLT0.mjs.map} +1 -1
- package/dist/renderer-D-cWBX0r.mjs +5 -0
- package/dist/{renderer-DqlvbOUt.mjs → renderer-D-e3vDnO.mjs} +3 -3
- package/dist/{renderer-DqlvbOUt.mjs.map → renderer-D-e3vDnO.mjs.map} +1 -1
- package/dist/renderer-D0q2VyJR.mjs +5 -0
- package/dist/{renderer-BqSiWRoD.mjs → renderer-D4E8Yf61.mjs} +2 -2
- package/dist/{renderer-BqSiWRoD.mjs.map → renderer-D4E8Yf61.mjs.map} +1 -1
- package/dist/renderer-D6NXn3Ky.mjs +5 -0
- package/dist/renderer-D9bp2jor.mjs +5 -0
- package/dist/{renderer-GlyeFl5R.mjs → renderer-DA1brg35.mjs} +3 -3
- package/dist/{renderer-GlyeFl5R.mjs.map → renderer-DA1brg35.mjs.map} +1 -1
- package/dist/{renderer-DNhOjz6C.mjs → renderer-DAFi5TC_.mjs} +2 -2
- package/dist/{renderer-DNhOjz6C.mjs.map → renderer-DAFi5TC_.mjs.map} +1 -1
- package/dist/renderer-DEzIOIB7.mjs +5 -0
- package/dist/{renderer-B5Icb0XW.mjs → renderer-DFX2V9Dp.mjs} +2 -2
- package/dist/{renderer-B5Icb0XW.mjs.map → renderer-DFX2V9Dp.mjs.map} +1 -1
- package/dist/{renderer-w8LKBg_5.mjs → renderer-DH0wkQkR.mjs} +2 -2
- package/dist/{renderer-w8LKBg_5.mjs.map → renderer-DH0wkQkR.mjs.map} +1 -1
- package/dist/{renderer-BXCZev4l.mjs → renderer-DOZJeWM4.mjs} +3 -3
- package/dist/{renderer-BXCZev4l.mjs.map → renderer-DOZJeWM4.mjs.map} +1 -1
- package/dist/{renderer-Cz11KJmQ.mjs → renderer-DOkEalxy.mjs} +2 -2
- package/dist/{renderer-Cz11KJmQ.mjs.map → renderer-DOkEalxy.mjs.map} +1 -1
- package/dist/renderer-DSSTVulw.mjs +5 -0
- package/dist/renderer-DUmTURPu.mjs +5 -0
- package/dist/{renderer-BI1nmIqA.mjs → renderer-DVaVVz-D.mjs} +3 -3
- package/dist/{renderer-BI1nmIqA.mjs.map → renderer-DVaVVz-D.mjs.map} +1 -1
- package/dist/renderer-DXCAgI9m.mjs +5 -0
- package/dist/{renderer-BlafvK-L.mjs → renderer-DY8fPeH3.mjs} +2 -2
- package/dist/renderer-DZ9j3fQj.mjs +5 -0
- package/dist/{renderer-6QAlE1Mp.mjs → renderer-DZndEvZN.mjs} +3 -3
- package/dist/{renderer-6QAlE1Mp.mjs.map → renderer-DZndEvZN.mjs.map} +1 -1
- package/dist/{renderer-B3x-uogM.mjs → renderer-DaV95CAd.mjs} +3 -3
- package/dist/{renderer-B3x-uogM.mjs.map → renderer-DaV95CAd.mjs.map} +1 -1
- package/dist/{renderer-YtRSM2cv.mjs → renderer-DautVsW4.mjs} +2 -2
- package/dist/{renderer-YtRSM2cv.mjs.map → renderer-DautVsW4.mjs.map} +1 -1
- package/dist/renderer-Dd1G_VKM.mjs +5 -0
- package/dist/renderer-Dee8079X.mjs +5 -0
- package/dist/{renderer-B48vtpou.mjs → renderer-Dg5yLAM9.mjs} +3 -3
- package/dist/{renderer-B48vtpou.mjs.map → renderer-Dg5yLAM9.mjs.map} +1 -1
- package/dist/renderer-DgWh5noB.mjs +5 -0
- package/dist/{renderer-DlESyfg7.d.mts → renderer-Dim2ZlfK.d.mts} +2 -2
- package/dist/{renderer-DlESyfg7.d.mts.map → renderer-Dim2ZlfK.d.mts.map} +1 -1
- package/dist/{renderer-R0sJId_6.mjs → renderer-Dk0dnuHr.mjs} +2 -2
- package/dist/{renderer-R0sJId_6.mjs.map → renderer-Dk0dnuHr.mjs.map} +1 -1
- package/dist/{renderer-Bf4BdBtb.mjs → renderer-DkM_wN8j.mjs} +2 -2
- package/dist/{renderer-Bf4BdBtb.mjs.map → renderer-DkM_wN8j.mjs.map} +1 -1
- package/dist/{renderer-DS64UaYK.mjs → renderer-DkYiOWPJ.mjs} +3 -3
- package/dist/{renderer-DS64UaYK.mjs.map → renderer-DkYiOWPJ.mjs.map} +1 -1
- package/dist/{renderer-ITtBRR4o.mjs → renderer-DqgduGiO.mjs} +3 -3
- package/dist/{renderer-ITtBRR4o.mjs.map → renderer-DqgduGiO.mjs.map} +1 -1
- package/dist/renderer-DuD9QRix.mjs +5 -0
- package/dist/{renderer--Da6pAJ4.mjs → renderer-Edn9xltT.mjs} +2 -2
- package/dist/renderer-KtG5p44R.mjs +5 -0
- package/dist/{renderer-DDBmBmQN.mjs → renderer-Tf1AS1aO.mjs} +2 -2
- package/dist/{renderer-DDBmBmQN.mjs.map → renderer-Tf1AS1aO.mjs.map} +1 -1
- package/dist/{renderer-_-MCpvGq.mjs → renderer-TyZu7nQ2.mjs} +69 -69
- package/dist/{renderer-_-MCpvGq.mjs.map → renderer-TyZu7nQ2.mjs.map} +1 -1
- package/dist/{renderer-CgEMtLOL.mjs → renderer-eWBBsCv2.mjs} +2 -2
- package/dist/{renderer-CgEMtLOL.mjs.map → renderer-eWBBsCv2.mjs.map} +1 -1
- package/dist/{renderer-ClK7_Yzz.mjs → renderer-fXRwAdO2.mjs} +2 -2
- package/dist/{renderer-ClK7_Yzz.mjs.map → renderer-fXRwAdO2.mjs.map} +1 -1
- package/dist/renderer-fdVdNIhL.mjs +5 -0
- package/dist/renderer-gBKWL0_E.mjs +5 -0
- package/dist/{renderer-D90PpIKG.mjs → renderer-gbBgGPNL.mjs} +2 -2
- package/dist/{renderer-Kj9AhRCc.mjs → renderer-h9sJnoxw.mjs} +3 -3
- package/dist/{renderer-Kj9AhRCc.mjs.map → renderer-h9sJnoxw.mjs.map} +1 -1
- package/dist/renderer-hmWhsR6C.mjs +5 -0
- package/dist/{renderer-Rg1BFv8B.mjs → renderer-i4RJ-_sx.mjs} +2 -2
- package/dist/{renderer-Rg1BFv8B.mjs.map → renderer-i4RJ-_sx.mjs.map} +1 -1
- package/dist/renderer-jkL9FU2W.mjs +6 -0
- package/dist/{renderer-8k-TR_Cy.mjs → renderer-nMnE_T2y.mjs} +3 -3
- package/dist/{renderer-8k-TR_Cy.mjs.map → renderer-nMnE_T2y.mjs.map} +1 -1
- package/dist/{renderer-CczmOPAO.mjs → renderer-q971j1BW.mjs} +3 -3
- package/dist/{renderer-CczmOPAO.mjs.map → renderer-q971j1BW.mjs.map} +1 -1
- package/dist/{renderer-DJWQWN1E.mjs → renderer-wFyrVuuj.mjs} +3 -3
- package/dist/{renderer-DJWQWN1E.mjs.map → renderer-wFyrVuuj.mjs.map} +1 -1
- package/dist/renderer-yAWv-daq.mjs +5 -0
- package/dist/{renderer-DYo_a5-8.mjs → renderer-yGARXwV0.mjs} +2 -2
- package/dist/{renderer-DYo_a5-8.mjs.map → renderer-yGARXwV0.mjs.map} +1 -1
- package/dist/{renderers-CP8CFWDs-DXiR_PLR.mjs → renderers-CP8CFWDs-DoVn7dbW.mjs} +2 -2
- package/dist/{renderers-CP8CFWDs-DXiR_PLR.mjs.map → renderers-CP8CFWDs-DoVn7dbW.mjs.map} +1 -1
- package/dist/signals/index.d.mts +5 -5
- package/dist/signals/index.mjs +4 -4
- package/package.json +57 -56
- package/dist/dist-CturBK2Z.mjs.map +0 -1
- package/dist/index-AdrZIWT0.d.mts.map +0 -1
- package/dist/preview-engine/chunk-U7NIY7UC.mjs +0 -1522
- package/dist/renderer-1hypa-l7.mjs +0 -5
- package/dist/renderer-6D8M4DRu.mjs +0 -5
- package/dist/renderer-APrj6tdP.mjs +0 -5
- package/dist/renderer-BF8wlbN1.mjs +0 -5
- package/dist/renderer-BOUcMCJB.mjs +0 -5
- package/dist/renderer-BSwn6KmG.mjs +0 -5
- package/dist/renderer-BUxvuC5A.mjs +0 -5
- package/dist/renderer-BYOsmJ8F.mjs +0 -5
- package/dist/renderer-Bp7LqSTt.mjs +0 -5
- package/dist/renderer-CD0amH_Q.mjs +0 -5
- package/dist/renderer-CIJGjrt7.mjs +0 -5
- package/dist/renderer-CNFTl94b.mjs +0 -5
- package/dist/renderer-CTJ0gHPS.mjs +0 -5
- package/dist/renderer-Cc3INn7w.mjs +0 -5
- package/dist/renderer-CeHh2lKY.mjs +0 -5
- package/dist/renderer-CfjwkQP4.mjs +0 -5
- package/dist/renderer-CiuOB-Md.mjs +0 -5
- package/dist/renderer-Cor66Y2X.mjs +0 -5
- package/dist/renderer-CtIM0LWe.mjs +0 -5
- package/dist/renderer-CyqgTsnx.mjs +0 -5
- package/dist/renderer-D2QG9yIW.mjs +0 -5
- package/dist/renderer-D2woU27o.mjs +0 -6
- package/dist/renderer-DAhDiQQY.mjs +0 -5
- package/dist/renderer-DIjxOQFi.mjs +0 -5
- package/dist/renderer-DRzalGhU.mjs +0 -5
- package/dist/renderer-DY6S1jWp.mjs +0 -5
- package/dist/renderer-DeW0KNQV.mjs +0 -5
- package/dist/renderer-DsVSVFkl.mjs +0 -5
- package/dist/renderer-DxvcIgEU.mjs +0 -5
- package/dist/renderer-F0MKqmol.mjs +0 -5
- package/dist/renderer-OkbovcAc.mjs +0 -5
- package/dist/renderer-QyBeWMEL.mjs +0 -5
- package/dist/renderer-hSh5IrDp.mjs +0 -5
- package/dist/renderer-puLncHft.mjs +0 -5
- package/dist/renderer-wnFCaw7j.mjs +0 -5
- package/dist/renderer-xjtlyGS1.mjs +0 -5
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dist-DRB6Vg5u.mjs","names":["AudioSignalComputePipeline","module","fs","AdvancedTextAnimatorBuilder","path","process","safeDecode","TextPathBuilder","TextAnimatorBuilder","g","int","Path3D","LocalFontManager","bidiFactory","type","map","string","i","charType","parse","start","end","exports","AudioLatentEngine","resolve$1","WebGPUAudioProcessor","cached","HeadlessDOMMatrix","ObjLoader","time","FbxLoader","transform","StlLoader","PlyLoader","version","GltfLoader","duration","VoxLoader","ThreeDSLoader","OffLoader","SlugGenerator","record","SlugFontCache","SlugGeometry","cached$1","emoji","resolve","base64","config","module","pipe"],"sources":["../../webgpu-renderers/dist/text-animations-CaYMwhsz.mjs","../../webgpu-renderers/dist/math3d/index.mjs","../../client-utils/dist/index.mjs","../../../node_modules/.pnpm/bidi-js@1.0.3/node_modules/bidi-js/dist/bidi.js","../../webgpu-renderers/dist/index.mjs"],"sourcesContent":["//#region src/signals/audio-signal-compute.ts\n/**\n* 1. Biquad IIR Filter Bank Compute Shader\n* Applies resonant bandpass/lowpass/highpass filtering on PCM audio buffer.\n*/\nconst AUDIO_BIQUAD_FILTER_SHADER = `\nstruct BiquadUniforms {\n b0 : f32,\n b1 : f32,\n b2 : f32,\n a1 : f32,\n a2 : f32,\n numSamples : u32,\n pad1 : f32,\n pad2 : f32,\n};\n\n@group(0) @binding(0) var<uniform> u : BiquadUniforms;\n@group(0) @binding(1) var<storage, read> inAudio : array<f32>;\n@group(0) @binding(2) var<storage, read_write> outAudio : array<f32>;\n\n@compute @workgroup_size(1)\nfn main(@builtin(global_invocation_id) gid : vec3<u32>) {\n if (gid.x != 0u) { return; }\n\n var x1 = 0.0f;\n var x2 = 0.0f;\n var y1 = 0.0f;\n var y2 = 0.0f;\n\n let total = u.numSamples;\n for (var i = 0u; i < total; i = i + 1u) {\n let x0 = inAudio[i];\n let y0 = u.b0 * x0 + u.b1 * x1 + u.b2 * x2 - u.a1 * y1 - u.a2 * y2;\n\n x2 = x1;\n x1 = x0;\n y2 = y1;\n y1 = y0;\n\n outAudio[i] = y0;\n }\n}\n`;\n/**\n* 2. Windowed RMS, Peak Envelope & Spectral Flux Extraction Compute Shader\n*/\nconst AUDIO_FEATURE_EXTRACTION_SHADER = `\nstruct FeatureUniforms {\n sampleRate : f32,\n numSamples : u32,\n numFrames : u32,\n hopSize : u32,\n windowSize : u32,\n attackAlpha : f32,\n releaseAlpha : f32,\n sensitivity : f32,\n noiseFloorDb : f32,\n dynamicRangeDb : f32,\n curveType : u32, // 0=linear, 1=exp, 2=log, 3=sqr, 4=smoothstep\n beatThreshold : f32,\n beatDecayAlpha : f32,\n extractionMode : u32, // 0=rms, 1=beat, 2=bass, 3=energy, etc.\n pad0 : f32,\n pad1 : f32,\n};\n\n@group(0) @binding(0) var<uniform> u : FeatureUniforms;\n@group(0) @binding(1) var<storage, read> rawAudio : array<f32>;\n@group(0) @binding(2) var<storage, read> bassAudio : array<f32>;\n@group(0) @binding(3) var<storage, read_write> outPrimary : array<f32>;\n@group(0) @binding(4) var<storage, read_write> outBeat : array<f32>;\n@group(0) @binding(5) var<storage, read_write> outBass : array<f32>;\n@group(0) @binding(6) var<storage, read_write> outEnergy : array<f32>;\n@group(0) @binding(7) var<storage, read_write> outStats : array<f32>;\n\nfn applyCurve(v: f32, curve: u32) -> f32 {\n let cv = clamp(v, 0.0f, 1.0f);\n if (curve == 1u) { // Exponential\n return cv * cv;\n }\n if (curve == 2u) { // Logarithmic\n return log(1.0f + 9.0f * cv) / log(10.0f);\n }\n if (curve == 3u) { // Square\n return cv * cv * cv;\n }\n if (curve == 4u) { // Smoothstep\n return cv * cv * (3.0f - 2.0f * cv);\n }\n return cv; // Linear\n}\n\nfn scaleDbToNormalized(rms: f32) -> f32 {\n let eps = 1e-6f;\n let safeRms = max(rms * u.sensitivity, eps);\n let db = 20.0f * log(safeRms) / log(10.0f);\n let minDb = u.noiseFloorDb;\n let maxDb = u.noiseFloorDb + u.dynamicRangeDb;\n let norm = clamp((db - minDb) / (maxDb - minDb), 0.0f, 1.0f);\n return norm;\n}\n\n@compute @workgroup_size(1)\nfn main(@builtin(global_invocation_id) gid : vec3<u32>) {\n if (gid.x != 0u) { return; }\n\n var envFollower = 0.0f;\n var bassFollower = 0.0f;\n var prevBassEnergy = 0.0f;\n var beatEnvelope = 0.0f;\n\n let numFrames = u.numFrames;\n let numSamples = u.numSamples;\n let halfWin = u.windowSize / 2u;\n\n var minEnergy = 1e6f;\n var maxEnergy = -1e6f;\n var minBass = 1e6f;\n var maxBass = -1e6f;\n var minBeat = 1e6f;\n var maxBeat = -1e6f;\n var minPrimary = 1e6f;\n var maxPrimary = -1e6f;\n\n for (var f = 0u; f < numFrames; f = f + 1u) {\n let centerSample = f * u.hopSize;\n let startSample = select(0u, centerSample - halfWin, centerSample >= halfWin);\n let endSample = min(numSamples, centerSample + halfWin);\n\n var sumSq = 0.0f;\n var sumBassSq = 0.0f;\n var count = 0.0f;\n\n for (var s = startSample; s < endSample; s = s + 1u) {\n let val = rawAudio[s];\n let bVal = bassAudio[s];\n sumSq = sumSq + val * val;\n sumBassSq = sumBassSq + bVal * bVal;\n count = count + 1.0f;\n }\n\n let effectiveCount = max(count, 1.0f);\n let rms = sqrt(sumSq / effectiveCount);\n let bassRms = sqrt(sumBassSq / effectiveCount);\n\n let normRms = scaleDbToNormalized(rms);\n let normBass = scaleDbToNormalized(bassRms);\n\n // Ballistics envelope follower (Attack / Release)\n let alpha = select(u.releaseAlpha, u.attackAlpha, normRms > envFollower);\n envFollower = envFollower + alpha * (normRms - envFollower);\n\n let bassAlpha = select(u.releaseAlpha, u.attackAlpha, normBass > bassFollower);\n bassFollower = bassFollower + bassAlpha * (normBass - bassFollower);\n\n // Spectral flux / Onset detection on bass energy\n let flux = max(0.0f, bassFollower - prevBassEnergy);\n prevBassEnergy = bassFollower;\n\n // Beat pulse triggering and exponential decay\n beatEnvelope = beatEnvelope * u.beatDecayAlpha;\n if (flux > u.beatThreshold) {\n let hit = clamp((flux - u.beatThreshold) / max(0.01f, 0.15f - u.beatThreshold), 0.6f, 1.0f);\n beatEnvelope = max(beatEnvelope, hit);\n }\n\n let finalEnergy = applyCurve(envFollower, u.curveType);\n let finalBass = applyCurve(bassFollower, u.curveType);\n let finalBeat = applyCurve(beatEnvelope, u.curveType);\n\n var finalPrimary = finalEnergy;\n if (u.extractionMode == 1u) { // transient_beat\n finalPrimary = finalBeat;\n } else if (u.extractionMode == 2u || u.extractionMode == 3u) { // sub_bass or bass\n finalPrimary = finalBass;\n }\n\n minEnergy = min(minEnergy, finalEnergy);\n maxEnergy = max(maxEnergy, finalEnergy);\n minBass = min(minBass, finalBass);\n maxBass = max(maxBass, finalBass);\n minBeat = min(minBeat, finalBeat);\n maxBeat = max(maxBeat, finalBeat);\n minPrimary = min(minPrimary, finalPrimary);\n maxPrimary = max(maxPrimary, finalPrimary);\n\n outPrimary[f] = finalPrimary;\n outBeat[f] = finalBeat;\n outBass[f] = finalBass;\n outEnergy[f] = finalEnergy;\n }\n\n if (numFrames > 0u) {\n outStats[0] = minPrimary;\n outStats[1] = select(maxPrimary, minPrimary + 1.0f, maxPrimary <= minPrimary + 1e-5f);\n outStats[2] = minBeat;\n outStats[3] = select(maxBeat, minBeat + 1.0f, maxBeat <= minBeat + 1e-5f);\n outStats[4] = minBass;\n outStats[5] = select(maxBass, minBass + 1.0f, maxBass <= minBass + 1e-5f);\n outStats[6] = minEnergy;\n outStats[7] = select(maxEnergy, minEnergy + 1.0f, maxEnergy <= minEnergy + 1e-5f);\n } else {\n outStats[0] = 0.0f;\n outStats[1] = 1.0f;\n outStats[2] = 0.0f;\n outStats[3] = 1.0f;\n outStats[4] = 0.0f;\n outStats[5] = 1.0f;\n outStats[6] = 0.0f;\n outStats[7] = 1.0f;\n }\n}\n`;\n/**\n* 3. 2D / 1D Texture Pack Shader\n* Copies the 4 extracted signals (Primary, Beat, Bass, Energy) into an RGBA32F texture for UV shader sampling.\n*/\nconst AUDIO_SIGNAL_TO_TEXTURE_SHADER = `\nstruct TexturePackUniforms {\n numFrames : u32,\n texWidth : u32,\n pad1 : f32,\n pad2 : f32,\n};\n\n@group(0) @binding(0) var<uniform> u : TexturePackUniforms;\n@group(0) @binding(1) var<storage, read> inPrimary : array<f32>;\n@group(0) @binding(2) var<storage, read> inBeat : array<f32>;\n@group(0) @binding(3) var<storage, read> inBass : array<f32>;\n@group(0) @binding(4) var<storage, read> inEnergy : array<f32>;\n@group(0) @binding(5) var outTex : texture_storage_2d<rgba16float, write>;\n\n@compute @workgroup_size(64)\nfn main(@builtin(global_invocation_id) gid : vec3<u32>) {\n let x = gid.x;\n if (x >= u.texWidth) { return; }\n\n let progress = f32(x) / f32(u.texWidth - 1u);\n let frameFloat = progress * f32(u.numFrames - 1u);\n let f0 = u32(clamp(floor(frameFloat), 0.0f, f32(u.numFrames - 1u)));\n let f1 = u32(clamp(ceil(frameFloat), 0.0f, f32(u.numFrames - 1u)));\n let weight = fract(frameFloat);\n\n let prim = mix(inPrimary[f0], inPrimary[f1], weight);\n let beat = mix(inBeat[f0], inBeat[f1], weight);\n let bass = mix(inBass[f0], inBass[f1], weight);\n let nrg = mix(inEnergy[f0], inEnergy[f1], weight);\n\n textureStore(outTex, vec2<i32>(i32(x), 0), vec4<f32>(prim, beat, bass, nrg));\n}\n`;\n/**\n* 4. Pace / Speed Ramping Prefix-Sum Time Integral Shader\n* Integrates pace = baseSpeed + gain * signal(t) over time into a monotonic timestamp lookup buffer.\n*/\nconst AUDIO_PACE_INTEGRAL_SHADER = `\nstruct PaceUniforms {\n baseSpeed : f32,\n gain : f32,\n dt : f32,\n numFrames : u32,\n};\n\n@group(0) @binding(0) var<uniform> u : PaceUniforms;\n@group(0) @binding(1) var<storage, read> inSignal : array<f32>;\n@group(0) @binding(2) var<storage, read_write> outSourceTimestamps : array<f32>;\n\n@compute @workgroup_size(1)\nfn main(@builtin(global_invocation_id) gid : vec3<u32>) {\n if (gid.x != 0u) { return; }\n\n var accumulatedTime = 0.0f;\n let total = u.numFrames;\n\n for (var f = 0u; f < total; f = f + 1u) {\n let sig = inSignal[f];\n let instantaneousSpeed = max(0.01f, u.baseSpeed + u.gain * sig);\n accumulatedTime = accumulatedTime + instantaneousSpeed * u.dt;\n outSourceTimestamps[f] = accumulatedTime;\n }\n}\n`;\nfunction calculateBiquadBandpassCoeffs(sampleRate, centerFreq, Q) {\n\tconst w0 = 2 * Math.PI * centerFreq / sampleRate;\n\tconst alpha = Math.sin(w0) / (2 * Q);\n\tconst cosW0 = Math.cos(w0);\n\tconst b0 = alpha;\n\tconst b1 = 0;\n\tconst b2 = -alpha;\n\tconst a0 = 1 + alpha;\n\tconst a1 = -2 * cosW0;\n\tconst a2 = 1 - alpha;\n\treturn {\n\t\tb0: b0 / a0,\n\t\tb1: b1 / a0,\n\t\tb2: b2 / a0,\n\t\ta1: a1 / a0,\n\t\ta2: a2 / a0\n\t};\n}\nconst getCurveTypeCode = (curve) => {\n\tswitch (curve) {\n\t\tcase \"exponential\": return 1;\n\t\tcase \"logarithmic\": return 2;\n\t\tcase \"square\": return 3;\n\t\tcase \"smoothstep\": return 4;\n\t\tcase \"linear\":\n\t\tdefault: return 0;\n\t}\n};\nconst getExtractionModeCode = (mode) => {\n\tswitch (mode) {\n\t\tcase \"transient_beat\": return 1;\n\t\tcase \"sub_bass\": return 2;\n\t\tcase \"bass\": return 3;\n\t\tcase \"mid\": return 4;\n\t\tcase \"high\": return 5;\n\t\tcase \"spectral_flux\": return 6;\n\t\tcase \"rms_envelope\":\n\t\tdefault: return 0;\n\t}\n};\nvar AudioSignalComputePipeline = class AudioSignalComputePipeline {\n\tstatic pipelineCache = /* @__PURE__ */ new WeakMap();\n\tstatic getPipeline(device, label, code) {\n\t\tlet map = AudioSignalComputePipeline.pipelineCache.get(device);\n\t\tif (!map) {\n\t\t\tmap = /* @__PURE__ */ new Map();\n\t\t\tAudioSignalComputePipeline.pipelineCache.set(device, map);\n\t\t}\n\t\tlet pipeline = map.get(label);\n\t\tif (!pipeline) {\n\t\t\tconst module = device.createShaderModule({\n\t\t\t\tlabel: `${label}.wgsl`,\n\t\t\t\tcode\n\t\t\t});\n\t\t\tpipeline = device.createComputePipeline({\n\t\t\t\tlabel,\n\t\t\t\tlayout: \"auto\",\n\t\t\t\tcompute: {\n\t\t\t\t\tmodule,\n\t\t\t\t\tentryPoint: \"main\"\n\t\t\t\t}\n\t\t\t});\n\t\t\tmap.set(label, pipeline);\n\t\t}\n\t\treturn pipeline;\n\t}\n\t/**\n\t* Processes raw PCM audio channels on the GPU and outputs extracted feature buffers and textures.\n\t*/\n\tstatic async extractFeatures(device, audioChannels, sampleRate, fps, config$1 = {}, targetWidth = 512) {\n\t\tconst numChannels = audioChannels.length;\n\t\tif (numChannels === 0 || audioChannels[0].length === 0) throw new Error(\"Empty audio buffer supplied to AudioSignalComputePipeline.\");\n\t\tconst numAudioSamples = audioChannels[0].length;\n\t\tconst durationSec = numAudioSamples / sampleRate;\n\t\tconst numFrames = Math.max(1, Math.ceil(durationSec * fps));\n\t\tconst hopSize = Math.max(1, Math.round(sampleRate / fps));\n\t\tconst windowSize = Math.max(32, Math.round(hopSize * 2));\n\t\tconst monoPcm = new Float32Array(numAudioSamples);\n\t\tfor (let c = 0; c < numChannels; c++) {\n\t\t\tconst ch = audioChannels[c];\n\t\t\tfor (let i = 0; i < numAudioSamples; i++) monoPcm[i] += ch[i] / numChannels;\n\t\t}\n\t\tconst rawAudioBuffer = device.createBuffer({\n\t\t\tsize: numAudioSamples * 4,\n\t\t\tusage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST,\n\t\t\tlabel: \"audio_raw_pcm_buffer\"\n\t\t});\n\t\tdevice.queue.writeBuffer(rawAudioBuffer, 0, monoPcm);\n\t\tconst bassAudioBuffer = device.createBuffer({\n\t\t\tsize: numAudioSamples * 4,\n\t\t\tusage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST,\n\t\t\tlabel: \"audio_bass_filtered_buffer\"\n\t\t});\n\t\tconst primaryBuffer = device.createBuffer({\n\t\t\tsize: numFrames * 4,\n\t\t\tusage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST,\n\t\t\tlabel: \"audio_primary_signal_buffer\"\n\t\t});\n\t\tconst beatBuffer = device.createBuffer({\n\t\t\tsize: numFrames * 4,\n\t\t\tusage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST,\n\t\t\tlabel: \"audio_beat_signal_buffer\"\n\t\t});\n\t\tconst bassBuffer = device.createBuffer({\n\t\t\tsize: numFrames * 4,\n\t\t\tusage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST,\n\t\t\tlabel: \"audio_bass_signal_buffer\"\n\t\t});\n\t\tconst energyBuffer = device.createBuffer({\n\t\t\tsize: numFrames * 4,\n\t\t\tusage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST,\n\t\t\tlabel: \"audio_energy_signal_buffer\"\n\t\t});\n\t\tconst biquadPipeline = AudioSignalComputePipeline.getPipeline(device, \"AudioBiquadFilterPipeline\", AUDIO_BIQUAD_FILTER_SHADER);\n\t\tconst bassCoeffs = calculateBiquadBandpassCoeffs(sampleRate, 120, 1.2);\n\t\tconst biquadUniformsData = new Float32Array([\n\t\t\tbassCoeffs.b0,\n\t\t\tbassCoeffs.b1,\n\t\t\tbassCoeffs.b2,\n\t\t\tbassCoeffs.a1,\n\t\t\tbassCoeffs.a2,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0\n\t\t]);\n\t\tnew Uint32Array(biquadUniformsData.buffer)[5] = numAudioSamples;\n\t\tconst biquadUniformBuffer = device.createBuffer({\n\t\t\tsize: biquadUniformsData.byteLength,\n\t\t\tusage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,\n\t\t\tlabel: \"audio_biquad_uniform_buffer\"\n\t\t});\n\t\tdevice.queue.writeBuffer(biquadUniformBuffer, 0, biquadUniformsData);\n\t\tconst biquadBindGroup = device.createBindGroup({\n\t\t\tlayout: biquadPipeline.getBindGroupLayout(0),\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: { buffer: biquadUniformBuffer }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: { buffer: rawAudioBuffer }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: { buffer: bassAudioBuffer }\n\t\t\t\t}\n\t\t\t]\n\t\t});\n\t\tconst featurePipeline = AudioSignalComputePipeline.getPipeline(device, \"AudioFeatureExtractionPipeline\", AUDIO_FEATURE_EXTRACTION_SHADER);\n\t\tconst attackMs = config$1.attackMs ?? 10;\n\t\tconst releaseMs = config$1.releaseMs ?? 120;\n\t\tconst attackAlpha = 1 - Math.exp(-1 / (attackMs / 1e3 * fps));\n\t\tconst releaseAlpha = 1 - Math.exp(-1 / (releaseMs / 1e3 * fps));\n\t\tconst beatDecayMs = config$1.beatDecayMs ?? 80;\n\t\tconst beatDecayAlpha = Math.exp(-1 / (beatDecayMs / 1e3 * fps));\n\t\tconst noiseFloorDb = config$1.noiseFloorDb ?? -48;\n\t\tconst dynamicRangeDb = config$1.dynamicRangeDb ?? 48;\n\t\tconst featureUniformsBuffer = /* @__PURE__ */ new ArrayBuffer(64);\n\t\tconst featureF32 = new Float32Array(featureUniformsBuffer);\n\t\tconst featureU32 = new Uint32Array(featureUniformsBuffer);\n\t\tfeatureF32[0] = sampleRate;\n\t\tfeatureU32[1] = numAudioSamples;\n\t\tfeatureU32[2] = numFrames;\n\t\tfeatureU32[3] = hopSize;\n\t\tfeatureU32[4] = windowSize;\n\t\tfeatureF32[5] = attackAlpha;\n\t\tfeatureF32[6] = releaseAlpha;\n\t\tfeatureF32[7] = config$1.sensitivity ?? 1;\n\t\tfeatureF32[8] = noiseFloorDb;\n\t\tfeatureF32[9] = dynamicRangeDb;\n\t\tfeatureU32[10] = getCurveTypeCode(config$1.curve);\n\t\tfeatureF32[11] = config$1.beatThreshold ?? .08;\n\t\tfeatureF32[12] = beatDecayAlpha;\n\t\tfeatureU32[13] = getExtractionModeCode(config$1.extractionMode);\n\t\tfeatureF32[14] = 0;\n\t\tfeatureF32[15] = 0;\n\t\tconst featUniformBuffer = device.createBuffer({\n\t\t\tsize: featureUniformsBuffer.byteLength,\n\t\t\tusage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,\n\t\t\tlabel: \"audio_feature_uniform_buffer\"\n\t\t});\n\t\tdevice.queue.writeBuffer(featUniformBuffer, 0, featureUniformsBuffer);\n\t\tconst statsBuffer = device.createBuffer({\n\t\t\tsize: 32,\n\t\t\tusage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST,\n\t\t\tlabel: \"audio_feature_stats_buffer\"\n\t\t});\n\t\tconst statsReadBuffer = device.createBuffer({\n\t\t\tsize: 32,\n\t\t\tusage: GPUBufferUsage.MAP_READ | GPUBufferUsage.COPY_DST,\n\t\t\tlabel: \"audio_feature_stats_read_buffer\"\n\t\t});\n\t\tconst featureBindGroup = device.createBindGroup({\n\t\t\tlayout: featurePipeline.getBindGroupLayout(0),\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: { buffer: featUniformBuffer }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: { buffer: rawAudioBuffer }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: { buffer: bassAudioBuffer }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 3,\n\t\t\t\t\tresource: { buffer: primaryBuffer }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 4,\n\t\t\t\t\tresource: { buffer: beatBuffer }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 5,\n\t\t\t\t\tresource: { buffer: bassBuffer }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 6,\n\t\t\t\t\tresource: { buffer: energyBuffer }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 7,\n\t\t\t\t\tresource: { buffer: statsBuffer }\n\t\t\t\t}\n\t\t\t]\n\t\t});\n\t\tconst textureWidth = Math.max(targetWidth, 128);\n\t\tconst signalTexture = device.createTexture({\n\t\t\tsize: [\n\t\t\t\ttextureWidth,\n\t\t\t\t1,\n\t\t\t\t1\n\t\t\t],\n\t\t\tformat: \"rgba16float\",\n\t\t\tusage: GPUTextureUsage.STORAGE_BINDING | GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST,\n\t\t\tlabel: \"audio_extracted_signal_texture\"\n\t\t});\n\t\tconst packPipeline = AudioSignalComputePipeline.getPipeline(device, \"AudioTexturePackPipeline\", AUDIO_SIGNAL_TO_TEXTURE_SHADER);\n\t\tconst packUniforms = new Uint32Array([\n\t\t\tnumFrames,\n\t\t\ttextureWidth,\n\t\t\t0,\n\t\t\t0\n\t\t]);\n\t\tconst packUniformBuffer = device.createBuffer({\n\t\t\tsize: packUniforms.byteLength,\n\t\t\tusage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,\n\t\t\tlabel: \"audio_pack_uniform_buffer\"\n\t\t});\n\t\tdevice.queue.writeBuffer(packUniformBuffer, 0, packUniforms);\n\t\tconst packBindGroup = device.createBindGroup({\n\t\t\tlayout: packPipeline.getBindGroupLayout(0),\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: { buffer: packUniformBuffer }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: { buffer: primaryBuffer }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: { buffer: beatBuffer }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 3,\n\t\t\t\t\tresource: { buffer: bassBuffer }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 4,\n\t\t\t\t\tresource: { buffer: energyBuffer }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 5,\n\t\t\t\t\tresource: signalTexture.createView()\n\t\t\t\t}\n\t\t\t]\n\t\t});\n\t\tconst encoder = device.createCommandEncoder({ label: \"audio_signal_extractor_encoder\" });\n\t\tconst pass1 = encoder.beginComputePass({ label: \"audio_biquad_pass\" });\n\t\tpass1.setPipeline(biquadPipeline);\n\t\tpass1.setBindGroup(0, biquadBindGroup);\n\t\tpass1.dispatchWorkgroups(1);\n\t\tpass1.end();\n\t\tconst pass2 = encoder.beginComputePass({ label: \"audio_feature_pass\" });\n\t\tpass2.setPipeline(featurePipeline);\n\t\tpass2.setBindGroup(0, featureBindGroup);\n\t\tpass2.dispatchWorkgroups(1);\n\t\tpass2.end();\n\t\tencoder.copyBufferToBuffer(statsBuffer, 0, statsReadBuffer, 0, 32);\n\t\tconst readbackPrimary = device.createBuffer({\n\t\t\tsize: numFrames * 4,\n\t\t\tusage: GPUBufferUsage.MAP_READ | GPUBufferUsage.COPY_DST,\n\t\t\tlabel: \"audio_primary_readback\"\n\t\t});\n\t\tconst readbackBeat = device.createBuffer({\n\t\t\tsize: numFrames * 4,\n\t\t\tusage: GPUBufferUsage.MAP_READ | GPUBufferUsage.COPY_DST,\n\t\t\tlabel: \"audio_beat_readback\"\n\t\t});\n\t\tconst readbackBass = device.createBuffer({\n\t\t\tsize: numFrames * 4,\n\t\t\tusage: GPUBufferUsage.MAP_READ | GPUBufferUsage.COPY_DST,\n\t\t\tlabel: \"audio_bass_readback\"\n\t\t});\n\t\tconst readbackEnergy = device.createBuffer({\n\t\t\tsize: numFrames * 4,\n\t\t\tusage: GPUBufferUsage.MAP_READ | GPUBufferUsage.COPY_DST,\n\t\t\tlabel: \"audio_energy_readback\"\n\t\t});\n\t\tencoder.copyBufferToBuffer(primaryBuffer, 0, readbackPrimary, 0, numFrames * 4);\n\t\tencoder.copyBufferToBuffer(beatBuffer, 0, readbackBeat, 0, numFrames * 4);\n\t\tencoder.copyBufferToBuffer(bassBuffer, 0, readbackBass, 0, numFrames * 4);\n\t\tencoder.copyBufferToBuffer(energyBuffer, 0, readbackEnergy, 0, numFrames * 4);\n\t\tconst pass3 = encoder.beginComputePass({ label: \"audio_pack_pass\" });\n\t\tpass3.setPipeline(packPipeline);\n\t\tpass3.setBindGroup(0, packBindGroup);\n\t\tpass3.dispatchWorkgroups(Math.ceil(textureWidth / 64));\n\t\tpass3.end();\n\t\tdevice.queue.submit([encoder.finish()]);\n\t\tawait Promise.all([\n\t\t\tstatsReadBuffer.mapAsync(GPUMapMode.READ),\n\t\t\treadbackPrimary.mapAsync(GPUMapMode.READ),\n\t\t\treadbackBeat.mapAsync(GPUMapMode.READ),\n\t\t\treadbackBass.mapAsync(GPUMapMode.READ),\n\t\t\treadbackEnergy.mapAsync(GPUMapMode.READ)\n\t\t]);\n\t\tconst statsArray = new Float32Array(statsReadBuffer.getMappedRange().slice(0));\n\t\tconst channelSamples = {\n\t\t\tprimary: new Float32Array(readbackPrimary.getMappedRange().slice(0)),\n\t\t\tbeat: new Float32Array(readbackBeat.getMappedRange().slice(0)),\n\t\t\tbass: new Float32Array(readbackBass.getMappedRange().slice(0)),\n\t\t\tenergy: new Float32Array(readbackEnergy.getMappedRange().slice(0))\n\t\t};\n\t\tstatsReadBuffer.unmap();\n\t\tstatsReadBuffer.destroy();\n\t\tstatsBuffer.destroy();\n\t\treadbackPrimary.unmap();\n\t\treadbackPrimary.destroy();\n\t\treadbackBeat.unmap();\n\t\treadbackBeat.destroy();\n\t\treadbackBass.unmap();\n\t\treadbackBass.destroy();\n\t\treadbackEnergy.unmap();\n\t\treadbackEnergy.destroy();\n\t\tconst stats = {\n\t\t\tprimary: {\n\t\t\t\tmin: statsArray[0],\n\t\t\t\tmax: statsArray[1]\n\t\t\t},\n\t\t\tbeat: {\n\t\t\t\tmin: statsArray[2],\n\t\t\t\tmax: statsArray[3]\n\t\t\t},\n\t\t\tbass: {\n\t\t\t\tmin: statsArray[4],\n\t\t\t\tmax: statsArray[5]\n\t\t\t},\n\t\t\tenergy: {\n\t\t\t\tmin: statsArray[6],\n\t\t\t\tmax: statsArray[7]\n\t\t\t}\n\t\t};\n\t\tbiquadUniformBuffer.destroy();\n\t\tfeatUniformBuffer.destroy();\n\t\tpackUniformBuffer.destroy();\n\t\trawAudioBuffer.destroy();\n\t\tbassAudioBuffer.destroy();\n\t\treturn {\n\t\t\tprimaryBuffer,\n\t\t\tbeatBuffer,\n\t\t\tbassBuffer,\n\t\t\tenergyBuffer,\n\t\t\ttexture: signalTexture,\n\t\t\ttextureView: signalTexture.createView(),\n\t\t\tnumFrames,\n\t\t\tdurationSec,\n\t\t\tstats,\n\t\t\tchannelSamples\n\t\t};\n\t}\n\t/**\n\t* Computes cumulative speed-ramped presentation timestamps for video pace control.\n\t*/\n\tstatic computePaceTimestamps(device, signalBuffer, numFrames, fps, baseSpeed = 1, gain = 1) {\n\t\tconst outBuffer = device.createBuffer({\n\t\t\tsize: numFrames * 4,\n\t\t\tusage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST,\n\t\t\tlabel: \"audio_pace_timestamps_buffer\"\n\t\t});\n\t\tconst pacePipeline = AudioSignalComputePipeline.getPipeline(device, \"AudioPaceIntegralPipeline\", AUDIO_PACE_INTEGRAL_SHADER);\n\t\tconst dt = 1 / fps;\n\t\tconst uniformsData = new Float32Array([\n\t\t\tbaseSpeed,\n\t\t\tgain,\n\t\t\tdt,\n\t\t\t0\n\t\t]);\n\t\tnew Uint32Array(uniformsData.buffer)[3] = numFrames;\n\t\tconst uniformBuffer = device.createBuffer({\n\t\t\tsize: uniformsData.byteLength,\n\t\t\tusage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,\n\t\t\tlabel: \"audio_pace_uniform_buffer\"\n\t\t});\n\t\tdevice.queue.writeBuffer(uniformBuffer, 0, uniformsData);\n\t\tconst bindGroup = device.createBindGroup({\n\t\t\tlayout: pacePipeline.getBindGroupLayout(0),\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: { buffer: uniformBuffer }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: { buffer: signalBuffer }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: { buffer: outBuffer }\n\t\t\t\t}\n\t\t\t]\n\t\t});\n\t\tconst encoder = device.createCommandEncoder({ label: \"audio_pace_integral_encoder\" });\n\t\tconst pass = encoder.beginComputePass({ label: \"audio_pace_pass\" });\n\t\tpass.setPipeline(pacePipeline);\n\t\tpass.setBindGroup(0, bindGroup);\n\t\tpass.dispatchWorkgroups(1);\n\t\tpass.end();\n\t\tdevice.queue.submit([encoder.finish()]);\n\t\tuniformBuffer.destroy();\n\t\treturn outBuffer;\n\t}\n};\n\n//#endregion\n//#region src/signals/float16.ts\n/**\n* IEEE 754 half-precision (float16) bitwise converter and encoder.\n*/\n/**\n* Converts a 32-bit floating point number to a 16-bit half-precision float bit pattern (IEEE 754).\n*/\nfunction float32ToFloat16Bits(val) {\n\tconst f = new Float32Array([val]);\n\tconst u = new Uint32Array(f.buffer)[0];\n\tconst sign = u >>> 16 & 32768;\n\tconst exp = (u >>> 23 & 255) - 127 + 15;\n\tlet mant = u & 8388607;\n\tif (exp <= 0) {\n\t\tif (exp < -10) return sign;\n\t\tmant = (mant | 8388608) >> 1 - exp;\n\t\treturn sign | mant + 4096 >> 13;\n\t} else if (exp >= 31) return sign | 31744;\n\treturn sign | exp << 10 | mant + 4096 >> 13;\n}\n/**\n* Packs a Float32Array (or array of numbers) into a Uint16Array containing IEEE 754 half-precision floats.\n* Uses native Float16Array if supported by the runtime engine, otherwise falls back to bitwise conversion.\n*/\nfunction encodeFloat32ToFloat16(f32Array) {\n\tif (typeof Float16Array !== \"undefined\") return new Uint16Array(new Float16Array(f32Array).buffer);\n\tconst len = f32Array.length;\n\tconst out = new Uint16Array(len);\n\tfor (let i = 0; i < len; i++) out[i] = float32ToFloat16Bits(f32Array[i]);\n\treturn out;\n}\n\n//#endregion\n//#region src/signals/wgsl.ts\nconst WGSL_CONSTANTS = `\\\nconst PI: f32 = ${Math.PI}f;\nconst TAU: f32 = ${Math.PI * 2}f;\nconst E: f32 = ${Math.E}f;`;\n/** Built-in parameter list prepended before user params. */\nconst BASE_PARAMS = [\n\t\"t: f32\",\n\t\"x: f32\",\n\t\"y: f32\",\n\t\"z: f32\",\n\t\"i: u32\",\n\t\"n: u32\",\n\t\"frame: u32\",\n\t\"color: vec4f\",\n\t\"t_elapsed: f32\",\n\t\"duration: f32\"\n];\nfunction buildWGSLSignalFn(config$1, nodeId) {\n\tconst name = sanitizeName(nodeId);\n\tconst outputType = config$1.fnOutputType || \"f32\";\n\tconst params = config$1.fnParams ?? [];\n\tconst customArgs = params.map((p) => `${p.name}: ${p.type}`);\n\tconst signature = `fn ${name}(${[...BASE_PARAMS, ...customArgs].join(\", \")}) -> ${outputType}`;\n\tlet bodyToCompile = config$1.fnBody ?? \"\";\n\tlet resolvedConfig = { ...config$1 };\n\tif (!config$1.baseType || config$1.baseType === \"custom\") {\n\t\tconst parsed = parseStateFromFnBody(config$1.fnBody ?? \"\", config$1);\n\t\tif (parsed.baseType) resolvedConfig = {\n\t\t\t...config$1,\n\t\t\t...parsed\n\t\t};\n\t}\n\tif (resolvedConfig.baseType && resolvedConfig.baseType !== \"custom\") bodyToCompile = generateWGSLFromConfig(resolvedConfig);\n\tconst rawBody = bodyToCompile.split(\"\\n\").map((line) => ` ${line}`).join(\"\\n\");\n\tconst { valid, validationWarning } = heuristicValidate(rawBody, outputType);\n\tlet finalBody = rawBody;\n\tif (!valid && validationWarning === \"Function body has no return statement.\") if (outputType === \"vec2f\") finalBody += \"\\n return vec2<f32>(0.0);\";\n\telse if (outputType === \"vec3f\") finalBody += \"\\n return vec3<f32>(0.0);\";\n\telse if (outputType === \"vec4f\") finalBody += \"\\n return vec4<f32>(0.0);\";\n\telse finalBody += \"\\n return 0.0;\";\n\treturn {\n\t\tname,\n\t\twgsl: [\n\t\t\tWGSL_CONSTANTS,\n\t\t\t\"\",\n\t\t\t`${signature} {`,\n\t\t\tfinalBody,\n\t\t\t`}`\n\t\t].join(\"\\n\"),\n\t\tsignature,\n\t\toutputType,\n\t\tparams,\n\t\tvalid,\n\t\tvalidationWarning\n\t};\n}\nfunction emitBounceOut(xVar, id) {\n\treturn [\n\t\t` let ${id}_n1: f32 = 7.5625;`,\n\t\t` let ${id}_d1: f32 = 2.75;`,\n\t\t` let ${id}_r1: f32 = ${id}_n1 * (${xVar}) * (${xVar});`,\n\t\t` let ${id}_x2: f32 = (${xVar}) - 1.5 / ${id}_d1;`,\n\t\t` let ${id}_r2: f32 = ${id}_n1 * ${id}_x2 * ${id}_x2 + 0.75;`,\n\t\t` let ${id}_x3: f32 = (${xVar}) - 2.25 / ${id}_d1;`,\n\t\t` let ${id}_r3: f32 = ${id}_n1 * ${id}_x3 * ${id}_x3 + 0.9375;`,\n\t\t` let ${id}_x4: f32 = (${xVar}) - 2.625 / ${id}_d1;`,\n\t\t` let ${id}_r4: f32 = ${id}_n1 * ${id}_x4 * ${id}_x4 + 0.984375;`,\n\t\t` let ${id}_s1: f32 = select(${id}_r4, ${id}_r3, (${xVar}) < 2.5 / ${id}_d1);`,\n\t\t` let ${id}_s2: f32 = select(${id}_s1, ${id}_r2, (${xVar}) < 2.0 / ${id}_d1);`,\n\t\t` let ${id}: f32 = select(${id}_s2, ${id}_r1, (${xVar}) < 1.0 / ${id}_d1);`\n\t].join(\"\\n\");\n}\nfunction emitEaseIn(family, x, id) {\n\tswitch (family) {\n\t\tcase \"linear\": return ` let ${id}: f32 = ${x};`;\n\t\tcase \"smoothstep\": return ` let ${id}: f32 = (${x}) * (${x}) * (3.0 - 2.0 * (${x}));`;\n\t\tcase \"smootherstep\": return ` let ${id}: f32 = (${x}) * (${x}) * (${x}) * ((${x}) * ((${x}) * 6.0 - 15.0) + 10.0);`;\n\t\tcase \"sine\": return ` let ${id}: f32 = 1.0 - cos((${x}) * PI * 0.5);`;\n\t\tcase \"quad\": return ` let ${id}: f32 = (${x}) * (${x});`;\n\t\tcase \"cubic\": return ` let ${id}: f32 = (${x}) * (${x}) * (${x});`;\n\t\tcase \"quart\": return ` let ${id}: f32 = pow(${x}, 4.0);`;\n\t\tcase \"quint\": return ` let ${id}: f32 = pow(${x}, 5.0);`;\n\t\tcase \"expo\": return ` let ${id}: f32 = select(pow(2.0, 10.0 * (${x}) - 10.0), 0.0, (${x}) <= 0.0001);`;\n\t\tcase \"circ\": return ` let ${id}: f32 = 1.0 - sqrt(clamp(1.0 - (${x}) * (${x}), 0.0, 1.0));`;\n\t\tcase \"back\": return [\n\t\t\t` let ${id}_c1: f32 = 1.70158;`,\n\t\t\t` let ${id}_c3: f32 = ${id}_c1 + 1.0;`,\n\t\t\t` let ${id}: f32 = ${id}_c3 * (${x}) * (${x}) * (${x}) - ${id}_c1 * (${x}) * (${x});`\n\t\t].join(\"\\n\");\n\t\tcase \"elastic\": return [\n\t\t\t` let ${id}_c4: f32 = (2.0 * PI) / 3.0;`,\n\t\t\t` let ${id}_raw: f32 = -pow(2.0, 10.0 * (${x}) - 10.0) * sin(((${x}) * 10.0 - 10.75) * ${id}_c4);`,\n\t\t\t` let ${id}_lo: f32 = select(${id}_raw, 0.0, (${x}) <= 0.0001);`,\n\t\t\t` let ${id}: f32 = select(${id}_lo, 1.0, (${x}) >= 0.9999);`\n\t\t].join(\"\\n\");\n\t\tcase \"bounce\": {\n\t\t\tconst bx = `${id}_bx`;\n\t\t\tconst bo = `${id}_bo`;\n\t\t\treturn [\n\t\t\t\t` let ${bx}: f32 = 1.0 - (${x});`,\n\t\t\t\temitBounceOut(bx, bo),\n\t\t\t\t` let ${id}: f32 = 1.0 - ${bo};`\n\t\t\t].join(\"\\n\");\n\t\t}\n\t}\n}\nfunction emitEase(family, mode, xExpr, id) {\n\tif (family === \"linear\" || family === \"smoothstep\" || family === \"smootherstep\") return emitEaseIn(family, xExpr, id);\n\tif (mode === \"in\") return emitEaseIn(family, xExpr, id);\n\tif (mode === \"out\") {\n\t\tconst srcId = `${id}_src`;\n\t\treturn [emitEaseIn(family, `1.0 - (${xExpr})`, srcId), ` let ${id}: f32 = 1.0 - ${srcId};`].join(\"\\n\");\n\t}\n\tconst inId = `${id}_in`;\n\tconst outId = `${id}_out`;\n\treturn [\n\t\temitEaseIn(family, `(${xExpr}) * 2.0`, inId),\n\t\temitEaseIn(family, `2.0 - (${xExpr}) * 2.0`, outId),\n\t\t` let ${id}: f32 = select(1.0 - ${outId} * 0.5, ${inId} * 0.5, (${xExpr}) < 0.5);`\n\t].join(\"\\n\");\n}\nfunction generateWGSLFromConfig(config$1) {\n\tconst parts = [];\n\tconst baseEnabled = config$1.baseEnabled ?? true;\n\tconst fmEnabled = config$1.fmEnabled ?? false;\n\tif (baseEnabled && fmEnabled) {\n\t\tconst fmAmp = (config$1.fmAmplitude ?? 1).toFixed(5);\n\t\tconst fmFreq = (config$1.fmFrequency ?? .5).toFixed(5);\n\t\tparts.push(\" // Frequency Modulation\");\n\t\tparts.push(` let modulator = sin(t * ${fmFreq} * TAU) * ${fmAmp};`);\n\t\tparts.push(\" let t_mod = t + modulator;\");\n\t} else parts.push(\" let t_mod = t;\");\n\tparts.push(\" // Base Waveform\");\n\tif (!baseEnabled) parts.push(\" var val: f32 = 0.0;\");\n\telse {\n\t\tconst baseType = config$1.baseType ?? \"sine\";\n\t\tif (baseType === \"noise_smooth\") {\n\t\t\tparts.push(\" let noise_t = t_mod * u.frequency + u.phase;\");\n\t\t\tparts.push(\" let noise_i = floor(noise_t);\");\n\t\t\tparts.push(\" let noise_f = fract(noise_t);\");\n\t\t\tparts.push(\" let noise_u = noise_f * noise_f * (3.0 - 2.0 * noise_f);\");\n\t\t\tparts.push(\" let n0 = fract(sin(noise_i * 12.9898) * 43758.5453);\");\n\t\t\tparts.push(\" let n1 = fract(sin((noise_i + 1.0) * 12.9898) * 43758.5453);\");\n\t\t\tparts.push(\" let noise_val = mix(n0, n1, noise_u) * 2.0 - 1.0;\");\n\t\t} else if (baseType === \"noise_white\") parts.push(\" let noise_val = fract(sin(t_mod * 12.9898 + u.phase) * 43758.5453) * 2.0 - 1.0;\");\n\t\telse if (baseType === \"pulse\") {\n\t\t\tparts.push(\" let pulse_duty = select(clamp(u.phase, 0.01, 0.99), 0.5, u.phase == 0.0);\");\n\t\t\tparts.push(\" let pulse_val = select(-1.0, 1.0, fract(t_mod * u.frequency) < pulse_duty);\");\n\t\t} else if (baseType === \"bounce\") parts.push(\" let bounce_val = abs(sin(t_mod * u.frequency * PI + u.phase));\");\n\t\telse if (baseType === \"staircase\") parts.push(\" let stair_val = floor(fract(t_mod * u.frequency + u.phase / TAU) * 8.0) / 7.0 * 2.0 - 1.0;\");\n\t\tlet baseExpr = \"\";\n\t\tswitch (baseType) {\n\t\t\tcase \"sine\":\n\t\t\t\tbaseExpr = \"u.amplitude * sin(t_mod * u.frequency * TAU + u.phase) + u.offset\";\n\t\t\t\tbreak;\n\t\t\tcase \"triangle\":\n\t\t\t\tbaseExpr = \"u.amplitude * (2.0 * abs(2.0 * fract(t_mod * u.frequency + u.phase / TAU) - 1.0) - 1.0) + u.offset\";\n\t\t\t\tbreak;\n\t\t\tcase \"sawtooth\":\n\t\t\t\tbaseExpr = \"u.amplitude * (2.0 * (t_mod * u.frequency + u.phase / TAU - floor(t_mod * u.frequency + u.phase / TAU + 0.5))) + u.offset\";\n\t\t\t\tbreak;\n\t\t\tcase \"square\":\n\t\t\t\tbaseExpr = \"u.amplitude * sign(sin(t_mod * u.frequency * TAU + u.phase)) + u.offset\";\n\t\t\t\tbreak;\n\t\t\tcase \"constant\":\n\t\t\t\tbaseExpr = \"u.offset\";\n\t\t\t\tbreak;\n\t\t\tcase \"noise_smooth\":\n\t\t\t\tbaseExpr = \"u.amplitude * noise_val + u.offset\";\n\t\t\t\tbreak;\n\t\t\tcase \"noise_white\":\n\t\t\t\tbaseExpr = \"u.amplitude * noise_val + u.offset\";\n\t\t\t\tbreak;\n\t\t\tcase \"pulse\":\n\t\t\t\tbaseExpr = \"u.amplitude * pulse_val + u.offset\";\n\t\t\t\tbreak;\n\t\t\tcase \"bounce\":\n\t\t\t\tbaseExpr = \"u.amplitude * bounce_val + u.offset\";\n\t\t\t\tbreak;\n\t\t\tcase \"staircase\":\n\t\t\t\tbaseExpr = \"u.amplitude * stair_val + u.offset\";\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tbaseExpr = \"u.amplitude * sin(t_mod * u.frequency * TAU + u.phase) + u.offset\";\n\t\t\t\tbreak;\n\t\t}\n\t\tparts.push(` var val: f32 = ${baseExpr};`);\n\t}\n\tconst envelopeEnabled = config$1.envelopeEnabled ?? false;\n\tconst gateEnabled = config$1.gateEnabled ?? false;\n\tif (envelopeEnabled) {\n\t\tparts.push(\" // Time Envelope\");\n\t\tconst gateStartFrame = config$1.gateStartFrame ?? 0;\n\t\tconst gateEndFrame = config$1.gateEndFrame ?? 100;\n\t\tif ((config$1.envelopeUseFrame ?? true) && gateEnabled) parts.push(` let progress = select(0.0, clamp((f32(frame) - ${gateStartFrame.toFixed(1)}) / (${gateEndFrame.toFixed(1)} - ${gateStartFrame.toFixed(1)}), 0.0, 1.0), ${gateEndFrame}u > ${gateStartFrame}u);`);\n\t\telse parts.push(\" let progress = select(0.0, clamp(t_elapsed / duration, 0.0, 1.0), duration > 0.0);\");\n\t\tconst family = config$1.envelopeFamily ?? \"sine\";\n\t\tconst mode = config$1.envelopeMode ?? \"in_out\";\n\t\tconst pattern = config$1.envelopePattern ?? \"ramp_up\";\n\t\tconst cycles = config$1.envelopeCycles ?? 2;\n\t\tif (pattern === \"bell\" || pattern === \"loop\") {\n\t\t\tif (pattern === \"loop\") {\n\t\t\t\tconst loopCount = Math.max(1, cycles).toFixed(1);\n\t\t\t\tparts.push(` let env_loop: f32 = fract(progress * ${loopCount});`);\n\t\t\t\tparts.push(\" let env_folded: f32 = 1.0 - abs(env_loop * 2.0 - 1.0);\");\n\t\t\t} else parts.push(\" let env_folded: f32 = 1.0 - abs(progress * 2.0 - 1.0);\");\n\t\t\tparts.push(emitEase(family, mode, \"env_folded\", \"env_eased\"));\n\t\t\tparts.push(\" let env_factor: f32 = env_eased;\");\n\t\t} else {\n\t\t\tparts.push(emitEase(family, mode, \"progress\", \"env_eased\"));\n\t\t\tparts.push(pattern === \"ramp_up\" ? \" let env_factor: f32 = env_eased;\" : \" let env_factor: f32 = 1.0 - env_eased;\");\n\t\t}\n\t\tparts.push(\" val = mix(u.offset - u.amplitude, val, env_factor);\");\n\t}\n\tif (gateEnabled) {\n\t\tconst gateStartFrame = config$1.gateStartFrame ?? 0;\n\t\tconst gateEndFrame = config$1.gateEndFrame ?? 100;\n\t\tconst gateIdleValue = config$1.gateIdleValue ?? 0;\n\t\tparts.push(\" // Time Gate\");\n\t\tparts.push(` if (frame < ${gateStartFrame}u || frame > ${gateEndFrame}u) {`);\n\t\tparts.push(` val = ${gateIdleValue.toFixed(5)};`);\n\t\tparts.push(\" }\");\n\t}\n\tparts.push(\"\");\n\tparts.push(\" return val;\");\n\treturn parts.join(\"\\n\");\n}\nconst LEGACY_ENVELOPE_MAP = {\n\tfade_in: {\n\t\tfamily: \"linear\",\n\t\tmode: \"in\",\n\t\tpattern: \"ramp_up\"\n\t},\n\tfade_out: {\n\t\tfamily: \"linear\",\n\t\tmode: \"in\",\n\t\tpattern: \"ramp_down\"\n\t},\n\tping_pong: {\n\t\tfamily: \"linear\",\n\t\tmode: \"in\",\n\t\tpattern: \"bell\"\n\t},\n\texpo_decay: {\n\t\tfamily: \"expo\",\n\t\tmode: \"in\",\n\t\tpattern: \"ramp_down\"\n\t},\n\tsmooth_in: {\n\t\tfamily: \"smoothstep\",\n\t\tmode: \"in\",\n\t\tpattern: \"ramp_up\"\n\t},\n\tsmooth_out: {\n\t\tfamily: \"smoothstep\",\n\t\tmode: \"in\",\n\t\tpattern: \"ramp_down\"\n\t},\n\tsine_bell: {\n\t\tfamily: \"sine\",\n\t\tmode: \"in\",\n\t\tpattern: \"bell\"\n\t},\n\tspring: {\n\t\tfamily: \"elastic\",\n\t\tmode: \"out\",\n\t\tpattern: \"ramp_up\"\n\t}\n};\nfunction migrateLegacyEnvelope(legacyType) {\n\tif (legacyType && legacyType in LEGACY_ENVELOPE_MAP) return LEGACY_ENVELOPE_MAP[legacyType];\n\treturn {\n\t\tfamily: \"sine\",\n\t\tmode: \"in_out\",\n\t\tpattern: \"ramp_up\"\n\t};\n}\nfunction parseStateFromFnBody(fnBody, config$1) {\n\tconst match = fnBody.match(/\\/\\* SIGNAL_BUILDER_STATE:\\s*([\\s\\S]*?)\\s*\\*\\//);\n\tif (match) try {\n\t\tconst parsed = JSON.parse(match[1]);\n\t\tconst envIsV2 = !!parsed.envelope?.family;\n\t\tconst migrated = envIsV2 ? {\n\t\t\tfamily: parsed.envelope.family,\n\t\t\tmode: parsed.envelope.mode ?? \"in\",\n\t\t\tpattern: parsed.envelope.pattern ?? \"ramp_up\"\n\t\t} : migrateLegacyEnvelope(parsed.envelope?.type);\n\t\treturn {\n\t\t\tbaseEnabled: parsed.base?.enabled ?? true,\n\t\t\tbaseType: parsed.base?.type ?? \"sine\",\n\t\t\tfmEnabled: parsed.fm?.enabled ?? false,\n\t\t\tfmAmplitude: config$1?.fmAmplitude ?? parsed.fm?.amplitude ?? 1,\n\t\t\tfmFrequency: config$1?.fmFrequency ?? parsed.fm?.frequency ?? .5,\n\t\t\tenvelopeEnabled: parsed.envelope?.enabled ?? false,\n\t\t\tenvelopeFamily: migrated.family,\n\t\t\tenvelopeMode: migrated.mode,\n\t\t\tenvelopePattern: migrated.pattern,\n\t\t\tenvelopeCycles: envIsV2 ? parsed.envelope?.cycles ?? 2 : 2,\n\t\t\tenvelopeUseFrame: config$1?.envelopeUseFrame ?? parsed.envelope?.useFrame ?? true,\n\t\t\tgateEnabled: config$1?.gateEnabled ?? parsed.gate?.enabled ?? false,\n\t\t\tgateStartFrame: config$1?.gateStartFrame ?? parsed.gate?.startFrame ?? 0,\n\t\t\tgateEndFrame: config$1?.gateEndFrame ?? parsed.gate?.endFrame ?? 100,\n\t\t\tgateIdleValue: config$1?.gateIdleValue ?? parsed.gate?.idleValue ?? 0\n\t\t};\n\t} catch (e) {}\n\treturn {};\n}\nfunction buildUniformBufferLayout(fn, group = 0, binding = 0) {\n\tif (fn.params.length === 0) return null;\n\tconst structName = `SignalParams_${fn.name}`;\n\treturn {\n\t\tstructWGSL: `struct ${structName} {\\n${fn.params.map((p) => ` ${p.name}: ${p.type},`).join(\"\\n\")}\\n}`,\n\t\tbindingWGSL: `@group(${group}) @binding(${binding}) var<uniform> signal_params: ${structName};`,\n\t\tbyteSize: fn.params.reduce((acc, p) => {\n\t\t\treturn acc + ({\n\t\t\t\tf32: 4,\n\t\t\t\ti32: 4,\n\t\t\t\tu32: 4,\n\t\t\t\tvec2f: 8,\n\t\t\t\tvec3f: 16,\n\t\t\t\tvec4f: 16\n\t\t\t}[p.type] ?? 4);\n\t\t}, 0)\n\t};\n}\nfunction sanitizeName(nodeId) {\n\treturn `signal_${nodeId.replace(/[^a-zA-Z0-9]/g, \"_\")}`;\n}\nfunction heuristicValidate(body, outputType) {\n\tif (!/\\breturn\\b/.test(body)) return {\n\t\tvalid: false,\n\t\tvalidationWarning: \"Function body has no return statement.\"\n\t};\n\tconst vecReturn = /\\breturn\\s+vec(\\d)f?\\(/.exec(body);\n\tif (vecReturn) {\n\t\tconst dims = parseInt(vecReturn[1], 10);\n\t\tif (outputType === \"f32\") return {\n\t\t\tvalid: false,\n\t\t\tvalidationWarning: `Returning vec${dims}f but output type is f32.`\n\t\t};\n\t}\n\treturn { valid: true };\n}\n\n//#endregion\n//#region src/signals/signal-registry.ts\nfunction isSamplesArray(val) {\n\treturn Array.isArray(val) || ArrayBuffer.isView(val) && !(val instanceof DataView);\n}\nvar SignalRegistry = class {\n\tdeviceCache = /* @__PURE__ */ new WeakMap();\n\tstatsMap = /* @__PURE__ */ new Map();\n\tstatsListeners = /* @__PURE__ */ new Map();\n\tsetStats(nodeId, stats) {\n\t\tthis.statsMap.set(nodeId, stats);\n\t\tconst listeners = this.statsListeners.get(nodeId);\n\t\tif (listeners) for (const listener of listeners) listener(stats);\n\t}\n\tgetStats(nodeId) {\n\t\treturn this.statsMap.get(nodeId);\n\t}\n\tonStats(nodeId, listener) {\n\t\tlet set = this.statsListeners.get(nodeId);\n\t\tif (!set) {\n\t\t\tset = /* @__PURE__ */ new Set();\n\t\t\tthis.statsListeners.set(nodeId, set);\n\t\t}\n\t\tset.add(listener);\n\t\tconst current = this.statsMap.get(nodeId);\n\t\tif (current) listener(current);\n\t\treturn () => {\n\t\t\tset?.delete(listener);\n\t\t\tif (set?.size === 0) this.statsListeners.delete(nodeId);\n\t\t};\n\t}\n\t/**\n\t* Recursively computes a deterministic cache fingerprint for a signal descriptor\n\t* and its upstream dependencies (signalA, signalB, and upstream calculated stats).\n\t*/\n\tcomputeSignalFingerprint(sd, depth = 0, visited = /* @__PURE__ */ new Set()) {\n\t\tif (sd === null || sd === void 0) return \"\";\n\t\tif (typeof sd === \"number\") return `num:${sd}`;\n\t\tif (typeof sd === \"string\") return `str:${sd}`;\n\t\tif (typeof sd === \"boolean\") return `bool:${sd}`;\n\t\tif (typeof sd !== \"object\") return \"\";\n\t\tif (visited.has(sd) || depth > 8) {\n\t\t\tconst sObj = sd;\n\t\t\treturn `ref:${sObj.nodeId || sObj.virtualMedia?.operation?.nodeId || \"seen\"}`;\n\t\t}\n\t\tvisited.add(sd);\n\t\tconst s = sd;\n\t\tconst rawSamples = s.samples ?? s.data?.samples;\n\t\tconst nodeId = (typeof s.nodeId === \"string\" ? s.nodeId : void 0) || (typeof s.virtualMedia?.operation?.nodeId === \"string\" ? s.virtualMedia.operation?.nodeId : void 0);\n\t\tlet upstreamStats;\n\t\tif (depth > 0 && nodeId) upstreamStats = this.getStats(nodeId);\n\t\tconst cfg = s.signalConfig;\n\t\tconst operation = s.operation ?? cfg?.operation ?? s.config?.operation ?? s.data?.operation;\n\t\tconst parts = {\n\t\t\ttype: s.type,\n\t\t\top: s.op,\n\t\t\toperation,\n\t\t\tbValue: s.bValue ?? cfg?.bValue ?? s.config?.bValue ?? s.data?.bValue,\n\t\t\tvalue: s.value,\n\t\t\tinMin: s.inMin ?? cfg?.inMin,\n\t\t\tinMax: s.inMax ?? cfg?.inMax,\n\t\t\toutMin: s.outMin ?? cfg?.outMin,\n\t\t\toutMax: s.outMax ?? cfg?.outMax,\n\t\t\tclampMin: s.clampMin ?? cfg?.clampMin,\n\t\t\tclampMax: s.clampMax ?? cfg?.clampMax,\n\t\t\texponent: s.exponent ?? cfg?.exponent,\n\t\t\tedge0: s.edge0 ?? cfg?.edge0,\n\t\t\tedge1: s.edge1 ?? cfg?.edge1,\n\t\t\tcustomWGSL: s.customWGSL || s.fnBody || s.wgsl || cfg?.customWGSL || cfg?.fnBody,\n\t\t\tamplitude: s.amplitude,\n\t\t\tfrequency: s.frequency,\n\t\t\tphase: s.phase,\n\t\t\toffset: s.offset,\n\t\t\tfnParams: s.fnParams,\n\t\t\tsourceUrl: s.sourceUrl ?? s.url,\n\t\t\textractionMode: s.extractionMode,\n\t\t\tchannel: s.channel,\n\t\t\tnodeId,\n\t\t\tsamplesLen: rawSamples?.length,\n\t\t\tsample0: rawSamples?.[0],\n\t\t\tsampleMid: rawSamples && rawSamples.length > 1 ? rawSamples[Math.floor(rawSamples.length / 2)] : void 0,\n\t\t\tsampleLast: rawSamples && rawSamples.length > 2 ? rawSamples[rawSamples.length - 1] : void 0,\n\t\t\tupstreamStats: upstreamStats ? `${upstreamStats.min}:${upstreamStats.max}` : void 0,\n\t\t\tsigA: s.signalA ? this.computeSignalFingerprint(s.signalA, depth + 1, visited) : void 0,\n\t\t\tsigB: s.signalB ? this.computeSignalFingerprint(s.signalB, depth + 1, visited) : void 0\n\t\t};\n\t\treturn JSON.stringify(parts);\n\t}\n\tgetDeviceResources(device) {\n\t\tlet res = this.deviceCache.get(device);\n\t\tif (!res) {\n\t\t\tres = {\n\t\t\t\tresources: /* @__PURE__ */ new Map(),\n\t\t\t\tmasterAudioTextures: /* @__PURE__ */ new Map(),\n\t\t\t\tdummy1x1TextureView: null,\n\t\t\t\tdummyBuffer: null,\n\t\t\t\tpipelineCache: /* @__PURE__ */ new Map(),\n\t\t\t\tdefaultSampler: null\n\t\t\t};\n\t\t\tthis.deviceCache.set(device, res);\n\t\t}\n\t\treturn res;\n\t}\n\tgetSampler(device) {\n\t\tconst dr = this.getDeviceResources(device);\n\t\tif (dr.defaultSampler) return dr.defaultSampler;\n\t\tdr.defaultSampler = device.createSampler({\n\t\t\tmagFilter: \"linear\",\n\t\t\tminFilter: \"linear\"\n\t\t});\n\t\treturn dr.defaultSampler;\n\t}\n\t/**\n\t* Clears frame resources. Typically called on renderId reset or context destruction.\n\t*/\n\tclear(renderId, device) {\n\t\tif (!device) return;\n\t\tconst dr = this.deviceCache.get(device);\n\t\tif (!dr) return;\n\t\tconst prefix = `${renderId}:`;\n\t\tfor (const [key, resource] of dr.resources.entries()) if (key.startsWith(prefix)) {\n\t\t\tresource.buffer?.destroy();\n\t\t\tresource.texture?.destroy();\n\t\t\tresource.uniformBuffer?.destroy();\n\t\t\tdr.resources.delete(key);\n\t\t}\n\t\tfor (const [key, entry] of dr.masterAudioTextures.entries()) if (key.startsWith(prefix)) {\n\t\t\tentry.texture.destroy();\n\t\t\tdr.masterAudioTextures.delete(key);\n\t\t}\n\t}\n\tgetDummy1x1TextureView(device) {\n\t\tconst dr = this.getDeviceResources(device);\n\t\tif (dr.dummy1x1TextureView) return dr.dummy1x1TextureView;\n\t\tconst texture = device.createTexture({\n\t\t\tsize: [\n\t\t\t\t1,\n\t\t\t\t1,\n\t\t\t\t1\n\t\t\t],\n\t\t\tformat: \"rgba16float\",\n\t\t\tusage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST,\n\t\t\tlabel: \"dummy_1x1_signal_texture\"\n\t\t});\n\t\tdevice.queue.writeTexture({ texture }, new Uint16Array([\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\t15360\n\t\t]), {\n\t\t\tbytesPerRow: 8,\n\t\t\trowsPerImage: 1\n\t\t}, [\n\t\t\t1,\n\t\t\t1,\n\t\t\t1\n\t\t]);\n\t\tdr.dummy1x1TextureView = texture.createView();\n\t\treturn dr.dummy1x1TextureView;\n\t}\n\tgetDummyBuffer(device) {\n\t\tconst dr = this.getDeviceResources(device);\n\t\tif (dr.dummyBuffer) return dr.dummyBuffer;\n\t\tdr.dummyBuffer = device.createBuffer({\n\t\t\tsize: 256,\n\t\t\tusage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST,\n\t\t\tlabel: \"dummy_signal_buffer\"\n\t\t});\n\t\treturn dr.dummyBuffer;\n\t}\n\tregisterBuffer(device, nodeId, buffer, renderId) {\n\t\tconst dr = this.getDeviceResources(device);\n\t\tconst key = `${renderId ?? \"global\"}:${nodeId}`;\n\t\tconst existing = dr.resources.get(key) ?? dr.resources.get(`global:${nodeId}`);\n\t\tconst entry = {\n\t\t\t...existing,\n\t\t\ttype: existing?.texture ? \"combined\" : \"1d-buffer\",\n\t\t\tbuffer,\n\t\t\tlastProcessedFrame: -1,\n\t\t\tisExternal: true\n\t\t};\n\t\tdr.resources.set(key, entry);\n\t\tif (renderId) dr.resources.set(`global:${nodeId}`, entry);\n\t}\n\tregisterTexture(device, nodeId, texture, textureView, renderId, duration$2) {\n\t\tconst dr = this.getDeviceResources(device);\n\t\tconst key = `${renderId ?? \"global\"}:${nodeId}`;\n\t\tconst existing = dr.resources.get(key) ?? dr.resources.get(`global:${nodeId}`);\n\t\tconst entry = {\n\t\t\t...existing,\n\t\t\ttype: existing?.buffer ? \"combined\" : \"2d-texture\",\n\t\t\ttexture,\n\t\t\ttextureView,\n\t\t\tlastProcessedFrame: -1,\n\t\t\tisExternal: true,\n\t\t\tduration: duration$2 !== void 0 ? duration$2 : existing?.duration\n\t\t};\n\t\tdr.resources.set(key, entry);\n\t\tif (renderId) dr.resources.set(`global:${nodeId}`, entry);\n\t}\n\tgetMasterTextureView(device, nodeId, renderId) {\n\t\tconst dr = this.getDeviceResources(device);\n\t\tconst key = `${renderId ?? \"global\"}:${nodeId}`;\n\t\tconst baseId = nodeId.replace(/_(beat|bass|energy)$/, \"\");\n\t\treturn dr.masterAudioTextures.get(key)?.textureView ?? dr.masterAudioTextures.get(`global:${nodeId}`)?.textureView ?? dr.masterAudioTextures.get(`${renderId ?? \"global\"}:${baseId}`)?.textureView ?? dr.masterAudioTextures.get(`global:${baseId}`)?.textureView ?? dr.resources.get(key)?.textureView ?? dr.resources.get(`global:${nodeId}`)?.textureView ?? dr.resources.get(`${renderId ?? \"global\"}:${baseId}`)?.textureView ?? dr.resources.get(`global:${baseId}`)?.textureView;\n\t}\n\tgetMasterTexture(device, nodeId, renderId) {\n\t\tconst dr = this.getDeviceResources(device);\n\t\tconst key = `${renderId ?? \"global\"}:${nodeId}`;\n\t\tconst baseId = nodeId.replace(/_(beat|bass|energy)$/, \"\");\n\t\treturn dr.masterAudioTextures.get(key)?.texture ?? dr.masterAudioTextures.get(`global:${nodeId}`)?.texture ?? dr.masterAudioTextures.get(`${renderId ?? \"global\"}:${baseId}`)?.texture ?? dr.masterAudioTextures.get(`global:${baseId}`)?.texture ?? dr.resources.get(key)?.texture ?? dr.resources.get(`global:${nodeId}`)?.texture ?? dr.resources.get(`${renderId ?? \"global\"}:${baseId}`)?.texture ?? dr.resources.get(`global:${baseId}`)?.texture;\n\t}\n\tchannelSamplesMap = /* @__PURE__ */ new Map();\n\tsetChannelSamples(nodeId, samples, renderId) {\n\t\tconst key = `${renderId ?? \"global\"}:${nodeId}`;\n\t\tconst baseId = nodeId.replace(/_(beat|bass|energy)$/, \"\");\n\t\tthis.channelSamplesMap.set(key, samples);\n\t\tthis.channelSamplesMap.set(`global:${nodeId}`, samples);\n\t\tif (baseId !== nodeId) {\n\t\t\tthis.channelSamplesMap.set(`${renderId ?? \"global\"}:${baseId}`, samples);\n\t\t\tthis.channelSamplesMap.set(`global:${baseId}`, samples);\n\t\t}\n\t}\n\tgetChannelSamples(nodeId, channel = \"primary\", renderId) {\n\t\tconst key = `${renderId ?? \"global\"}:${nodeId}`;\n\t\tconst baseId = nodeId.replace(/_(beat|bass|energy)$/, \"\");\n\t\tconst entry = this.channelSamplesMap.get(key) ?? this.channelSamplesMap.get(`global:${nodeId}`) ?? this.channelSamplesMap.get(`${renderId ?? \"global\"}:${baseId}`) ?? this.channelSamplesMap.get(`global:${baseId}`);\n\t\tif (!entry) return void 0;\n\t\treturn entry[channel] ?? entry.primary;\n\t}\n\tgetDuration(device, nodeId, renderId) {\n\t\tconst dr = this.getDeviceResources(device);\n\t\tconst key = `${renderId ?? \"global\"}:${nodeId}`;\n\t\tconst res = dr.resources.get(key) ?? dr.resources.get(`global:${nodeId}`);\n\t\tif (res?.duration !== void 0) return res.duration;\n\t\tconst baseId = nodeId.replace(/_(beat|bass|energy)$/, \"\");\n\t\treturn (dr.masterAudioTextures.get(key) ?? dr.masterAudioTextures.get(`global:${nodeId}`) ?? dr.masterAudioTextures.get(`${renderId ?? \"global\"}:${baseId}`) ?? dr.masterAudioTextures.get(`global:${baseId}`))?.durationSec;\n\t}\n\textractionPromises = /* @__PURE__ */ new Map();\n\thas(device, nodeId, renderId) {\n\t\tconst dr = this.getDeviceResources(device);\n\t\tconst key = `${renderId ?? \"global\"}:${nodeId}`;\n\t\tconst baseId = nodeId.replace(/_(beat|bass|energy)$/, \"\");\n\t\treturn dr.resources.has(key) || dr.resources.has(`global:${nodeId}`) || dr.masterAudioTextures.has(key) || dr.masterAudioTextures.has(`global:${nodeId}`) || dr.masterAudioTextures.has(`${renderId ?? \"global\"}:${baseId}`) || dr.masterAudioTextures.has(`global:${baseId}`);\n\t}\n\t/**\n\t* Recursively scans a signal descriptor (and upstream signalA/signalB trees)\n\t* for any audio sources and ensures they have been decoded and extracted.\n\t*/\n\tasync ensureAudioSourcesExtracted(device, sd, fps = 24, renderId, visited = /* @__PURE__ */ new Set()) {\n\t\tif (!sd || typeof sd !== \"object\" || visited.has(sd)) return;\n\t\tvisited.add(sd);\n\t\tconst s = sd;\n\t\tif (s.signalA) await this.ensureAudioSourcesExtracted(device, s.signalA, fps, renderId, visited);\n\t\tif (s.signalB && typeof s.signalB === \"object\") await this.ensureAudioSourcesExtracted(device, s.signalB, fps, renderId, visited);\n\t\tif (Boolean(s.extractionMode || s.op === \"AudioSignalExtractor\" || s.virtualMedia?.operation?.op === \"AudioSignalExtractor\")) {\n\t\t\tlet sourceUrl = s.sourceUrl || s.virtualMedia?.operation?.sourceUrl;\n\t\t\tif (!sourceUrl && s.virtualMedia) {\n\t\t\t\tconst vm = s.virtualMedia;\n\t\t\t\tsourceUrl = vm.operation?.sourceUrl || vm.operation?.url || vm.children?.[0]?.operation?.sourceUrl || vm.children?.[0]?.operation?.url;\n\t\t\t}\n\t\t\tconst targetId = s.nodeId || s.virtualMedia?.operation?.nodeId;\n\t\t\tif (sourceUrl && targetId) await this.extractFromAudioSource(device, sourceUrl, s, targetId, fps, renderId);\n\t\t}\n\t}\n\tasync extractFromAudioSource(device, sourceUrl, config$1 = {}, nodeId, fps = 24, renderId) {\n\t\tconst dr = this.getDeviceResources(device);\n\t\tconst key = `${renderId ?? \"global\"}:${nodeId}`;\n\t\tconst configFingerprint = JSON.stringify({\n\t\t\tsourceUrl,\n\t\t\tmode: config$1.extractionMode,\n\t\t\tsens: config$1.sensitivity,\n\t\t\tatt: config$1.attackMs,\n\t\t\trel: config$1.releaseMs,\n\t\t\tsmooth: config$1.smoothing,\n\t\t\tcurve: config$1.curve,\n\t\t\tbeatThresh: config$1.beatThreshold,\n\t\t\tnoiseFloor: config$1.noiseFloorDb,\n\t\t\tdynRange: config$1.dynamicRangeDb,\n\t\t\tbeatDecay: config$1.beatDecayMs,\n\t\t\tfps\n\t\t});\n\t\tif ((dr.masterAudioTextures.get(key) ?? dr.masterAudioTextures.get(`global:${nodeId}`))?.lastFingerprint === configFingerprint) return;\n\t\tif (this.extractionPromises.has(key)) {\n\t\t\tawait this.extractionPromises.get(key);\n\t\t\treturn;\n\t\t}\n\t\tconst promise = (async () => {\n\t\t\ttry {\n\t\t\t\tlet channels = [];\n\t\t\t\tlet sampleRate = 44100;\n\t\t\t\tif (typeof window !== \"undefined\") {\n\t\t\t\t\tconst AudioCtx = window.AudioContext || window.webkitAudioContext;\n\t\t\t\t\tif (AudioCtx) {\n\t\t\t\t\t\tlet fetchUrl = sourceUrl;\n\t\t\t\t\t\tif (fetchUrl.startsWith(\"file://\")) fetchUrl = fetchUrl.replace(/^file:\\/\\//, \"\");\n\t\t\t\t\t\tif (fetchUrl.startsWith(\"/\") && !fetchUrl.startsWith(\"/@fs/\") && !fetchUrl.startsWith(\"/api/\")) fetchUrl = `/@fs${fetchUrl}`;\n\t\t\t\t\t\tconst ctx = new AudioCtx();\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tconst res = await fetch(fetchUrl);\n\t\t\t\t\t\t\tif (!res.ok) throw new Error(`HTTP ${res.status}`);\n\t\t\t\t\t\t\tconst ab = await res.arrayBuffer();\n\t\t\t\t\t\t\tconst decoded = await ctx.decodeAudioData(ab);\n\t\t\t\t\t\t\tsampleRate = decoded.sampleRate;\n\t\t\t\t\t\t\tfor (let c = 0; c < decoded.numberOfChannels; c++) channels.push(new Float32Array(decoded.getChannelData(c)));\n\t\t\t\t\t\t} finally {\n\t\t\t\t\t\t\tctx.close();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else try {\n\t\t\t\t\tconst fs = await import(\"node:fs\");\n\t\t\t\t\tconst cleanPath = sourceUrl.replace(/^file:\\/\\//, \"\");\n\t\t\t\t\tif (fs.existsSync(cleanPath)) {\n\t\t\t\t\t\tconst buf = fs.readFileSync(cleanPath);\n\t\t\t\t\t\tconst numChannels = buf.readUInt16LE(22);\n\t\t\t\t\t\tsampleRate = buf.readUInt32LE(24);\n\t\t\t\t\t\tconst bitsPerSample = buf.readUInt16LE(34);\n\t\t\t\t\t\tlet offset = 12;\n\t\t\t\t\t\twhile (offset < buf.length - 8) {\n\t\t\t\t\t\t\tconst id = buf.toString(\"ascii\", offset, offset + 4);\n\t\t\t\t\t\t\tconst size = buf.readUInt32LE(offset + 4);\n\t\t\t\t\t\t\tif (id === \"data\") {\n\t\t\t\t\t\t\t\toffset += 8;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\toffset += 8 + size;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst bytesPerSample = Math.max(1, Math.floor(bitsPerSample / 8));\n\t\t\t\t\t\tconst totalFrames = Math.floor((buf.length - offset) / (numChannels * bytesPerSample));\n\t\t\t\t\t\tchannels = [];\n\t\t\t\t\t\tfor (let c = 0; c < numChannels; c++) channels.push(new Float32Array(totalFrames));\n\t\t\t\t\t\tif (bitsPerSample === 16) for (let i = 0; i < totalFrames; i++) for (let c = 0; c < numChannels; c++) {\n\t\t\t\t\t\t\tconst sampleOffset = offset + (i * numChannels + c) * 2;\n\t\t\t\t\t\t\tif (sampleOffset + 2 <= buf.length) channels[c][i] = buf.readInt16LE(sampleOffset) / 32768;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (bitsPerSample === 32) for (let i = 0; i < totalFrames; i++) for (let c = 0; c < numChannels; c++) {\n\t\t\t\t\t\t\tconst sampleOffset = offset + (i * numChannels + c) * 4;\n\t\t\t\t\t\t\tif (sampleOffset + 4 <= buf.length) channels[c][i] = buf.readFloatLE(sampleOffset);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} catch (_) {}\n\t\t\t\tif (channels.length === 0 || channels[0].length === 0) return;\n\t\t\t\tconst durationSec = channels[0].length / sampleRate;\n\t\t\t\tconst signals = await AudioSignalComputePipeline.extractFeatures(device, channels, sampleRate, fps, config$1, 512);\n\t\t\t\tconst targetNodeIds = /* @__PURE__ */ new Set();\n\t\t\t\tif (nodeId) targetNodeIds.add(nodeId);\n\t\t\t\tconst cfgNodeId = config$1?.nodeId;\n\t\t\t\tif (cfgNodeId) targetNodeIds.add(cfgNodeId);\n\t\t\t\tfor (const id of targetNodeIds) {\n\t\t\t\t\tconst baseId = id.replace(/_(beat|bass|energy)$/, \"\");\n\t\t\t\t\tconst entry = {\n\t\t\t\t\t\ttexture: signals.texture,\n\t\t\t\t\t\ttextureView: signals.textureView,\n\t\t\t\t\t\tdurationSec,\n\t\t\t\t\t\tstats: signals.stats.primary,\n\t\t\t\t\t\tlastFingerprint: configFingerprint\n\t\t\t\t\t};\n\t\t\t\t\tdr.masterAudioTextures.set(`${renderId ?? \"global\"}:${baseId}`, entry);\n\t\t\t\t\tdr.masterAudioTextures.set(`global:${baseId}`, entry);\n\t\t\t\t\tdr.masterAudioTextures.set(`${renderId ?? \"global\"}:${baseId}_beat`, {\n\t\t\t\t\t\t...entry,\n\t\t\t\t\t\tstats: signals.stats.beat\n\t\t\t\t\t});\n\t\t\t\t\tdr.masterAudioTextures.set(`global:${baseId}_beat`, {\n\t\t\t\t\t\t...entry,\n\t\t\t\t\t\tstats: signals.stats.beat\n\t\t\t\t\t});\n\t\t\t\t\tdr.masterAudioTextures.set(`${renderId ?? \"global\"}:${baseId}_bass`, {\n\t\t\t\t\t\t...entry,\n\t\t\t\t\t\tstats: signals.stats.bass\n\t\t\t\t\t});\n\t\t\t\t\tdr.masterAudioTextures.set(`global:${baseId}_bass`, {\n\t\t\t\t\t\t...entry,\n\t\t\t\t\t\tstats: signals.stats.bass\n\t\t\t\t\t});\n\t\t\t\t\tdr.masterAudioTextures.set(`${renderId ?? \"global\"}:${baseId}_energy`, {\n\t\t\t\t\t\t...entry,\n\t\t\t\t\t\tstats: signals.stats.energy\n\t\t\t\t\t});\n\t\t\t\t\tdr.masterAudioTextures.set(`global:${baseId}_energy`, {\n\t\t\t\t\t\t...entry,\n\t\t\t\t\t\tstats: signals.stats.energy\n\t\t\t\t\t});\n\t\t\t\t\tif (id !== baseId) {\n\t\t\t\t\t\tdr.masterAudioTextures.set(`${renderId ?? \"global\"}:${id}`, entry);\n\t\t\t\t\t\tdr.masterAudioTextures.set(`global:${id}`, entry);\n\t\t\t\t\t}\n\t\t\t\t\tthis.registerBuffer(device, baseId, signals.primaryBuffer, renderId);\n\t\t\t\t\tthis.setStats(baseId, signals.stats.primary);\n\t\t\t\t\tthis.registerBuffer(device, `${baseId}_beat`, signals.beatBuffer, renderId);\n\t\t\t\t\tthis.setStats(`${baseId}_beat`, signals.stats.beat);\n\t\t\t\t\tthis.registerBuffer(device, `${baseId}_bass`, signals.bassBuffer, renderId);\n\t\t\t\t\tthis.setStats(`${baseId}_bass`, signals.stats.bass);\n\t\t\t\t\tthis.registerBuffer(device, `${baseId}_energy`, signals.energyBuffer, renderId);\n\t\t\t\t\tthis.setStats(`${baseId}_energy`, signals.stats.energy);\n\t\t\t\t\tif (signals.channelSamples) this.setChannelSamples(baseId, signals.channelSamples, renderId);\n\t\t\t\t}\n\t\t\t\tconst updatedRes = dr.resources.get(key) ?? dr.resources.get(`global:${nodeId}`);\n\t\t\t\tif (updatedRes) updatedRes.lastFingerprint = configFingerprint;\n\t\t\t} catch (err) {\n\t\t\t\tconsole.warn(`[SignalRegistry] Failed to extract audio signal from ${sourceUrl}:`, err);\n\t\t\t} finally {\n\t\t\t\tthis.extractionPromises.delete(key);\n\t\t\t}\n\t\t})();\n\t\tthis.extractionPromises.set(key, promise);\n\t\tawait promise;\n\t}\n\t/**\n\t* Resolves or creates a 1D GPUBuffer for a time-varying signal.\n\t* If not evaluated yet for the current frame, it dispatches the generator compute pass.\n\t*/\n\tgetOrCreate1DBuffer(device, _encoder, nodeId, elapsedTime, duration$2, sd, numSamples, sampleRate, renderId, frame, fps) {\n\t\tlet normalizedSd = sd;\n\t\tif (sd && !sd.customWGSL && !sd.wgsl && sd.fnBody) {\n\t\t\tconst fnRes = buildWGSLSignalFn(sd, nodeId);\n\t\t\tnormalizedSd = {\n\t\t\t\t...sd,\n\t\t\t\tcustomWGSL: fnRes.wgsl,\n\t\t\t\tsignalFnName: fnRes.name,\n\t\t\t\tfnOutputType: fnRes.outputType,\n\t\t\t\toutputType: fnRes.outputType\n\t\t\t};\n\t\t}\n\t\tconst dr = this.getDeviceResources(device);\n\t\tconst key = `${renderId ?? \"global\"}:${nodeId}`;\n\t\tlet res = dr.resources.get(key) ?? dr.resources.get(`global:${nodeId}`);\n\t\tconst bufferSize = numSamples * 4;\n\t\tif (res?.isExternal && res.buffer && res.buffer.size === bufferSize) return res.buffer;\n\t\tif (!res || !res.buffer || res.buffer.size < bufferSize) {\n\t\t\tif (res?.buffer && !res.isExternal) res.buffer.destroy();\n\t\t\tconst buffer = device.createBuffer({\n\t\t\t\tsize: bufferSize,\n\t\t\t\tusage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST | GPUBufferUsage.COPY_SRC,\n\t\t\t\tlabel: `signal_1d_buffer_${nodeId}`\n\t\t\t});\n\t\t\tres = {\n\t\t\t\t...res,\n\t\t\t\ttype: res?.texture ? \"combined\" : \"1d-buffer\",\n\t\t\t\tbuffer,\n\t\t\t\tlastProcessedFrame: -1\n\t\t\t};\n\t\t\tdr.resources.set(key, res);\n\t\t}\n\t\tconst rawSamples = normalizedSd?.samples ?? normalizedSd?.data?.samples;\n\t\tconst fingerprint = normalizedSd ? this.computeSignalFingerprint(normalizedSd) : \"\";\n\t\tconst cacheFrame = frame !== void 0 ? frame : elapsedTime;\n\t\tif (res.lastProcessedFrame === cacheFrame && res.lastFingerprint === fingerprint) return res.buffer;\n\t\tif (res.lastFingerprint !== fingerprint) res.bindGroup = void 0;\n\t\tres.lastProcessedFrame = cacheFrame;\n\t\tres.lastFingerprint = fingerprint;\n\t\tif (isSamplesArray(rawSamples) && rawSamples.length > 0) {\n\t\t\tconst flat = new Float32Array(numSamples);\n\t\t\tconst total = rawSamples.length;\n\t\t\tconst srcFps = Number(normalizedSd?.fps) || 24;\n\t\t\tfor (let i = 0; i < numSamples; i++) {\n\t\t\t\tconst t = elapsedTime + i / sampleRate;\n\t\t\t\tconst sIdx = Math.min(total - 1, Math.max(0, Math.round(t * srcFps)));\n\t\t\t\tflat[i] = Number(rawSamples[sIdx]) || 0;\n\t\t\t}\n\t\t\tdevice.queue.writeBuffer(res.buffer, 0, flat);\n\t\t} else if (normalizedSd?.type === \"generator\" && (normalizedSd.customWGSL || normalizedSd.fnBody)) {\n\t\t\tconst signalEncoder = device.createCommandEncoder({ label: `signal_1d_encoder_${nodeId}` });\n\t\t\tthis.dispatch1DGenerator(device, signalEncoder, res, elapsedTime, duration$2, normalizedSd, numSamples, sampleRate, frame, fps);\n\t\t\tdevice.queue.submit([signalEncoder.finish()]);\n\t\t} else if (normalizedSd?.type === \"audio_extractor\" || normalizedSd?.extractionMode !== void 0) {\n\t\t\tconst masterTex = this.getMasterTexture(device, nodeId, renderId);\n\t\t\tif (masterTex) {\n\t\t\t\tconst channel = normalizedSd.channel === \"beat\" || nodeId.endsWith(\"_beat\") ? 1 : normalizedSd.channel === \"bass\" || nodeId.endsWith(\"_bass\") ? 2 : normalizedSd.channel === \"energy\" || nodeId.endsWith(\"_energy\") ? 3 : 0;\n\t\t\t\tconst effectiveDuration = this.getDuration(device, nodeId, renderId) ?? (typeof normalizedSd.durationMs === \"number\" ? normalizedSd.durationMs / 1e3 : duration$2);\n\t\t\t\tconst signalEncoder = device.createCommandEncoder({ label: `signal_1d_audio_encoder_${nodeId}` });\n\t\t\t\tthis.dispatch1DAudioSignal(device, signalEncoder, res, masterTex, channel, elapsedTime, effectiveDuration, numSamples, sampleRate);\n\t\t\t\tdevice.queue.submit([signalEncoder.finish()]);\n\t\t\t} else {\n\t\t\t\tconst val = Number(normalizedSd?.offset ?? 0);\n\t\t\t\tconst flat = new Float32Array(numSamples).fill(val);\n\t\t\t\tdevice.queue.writeBuffer(res.buffer, 0, flat);\n\t\t\t}\n\t\t} else if (normalizedSd?.type === \"signal_math\") {\n\t\t\tconst sigAId = normalizedSd.signalA?.nodeId ?? `${nodeId}_a`;\n\t\t\tconst bufA = this.getOrCreate1DBuffer(device, _encoder, sigAId, elapsedTime, duration$2, normalizedSd.signalA, numSamples, sampleRate, renderId, frame, fps);\n\t\t\tconst hasB = normalizedSd.signalB && typeof normalizedSd.signalB === \"object\" && normalizedSd.signalB.type !== void 0;\n\t\t\tconst sigBId = hasB ? normalizedSd.signalB.nodeId ?? `${nodeId}_b` : `${nodeId}_b_dummy`;\n\t\t\tconst bufB = hasB ? this.getOrCreate1DBuffer(device, _encoder, sigBId, elapsedTime, duration$2, normalizedSd.signalB, numSamples, sampleRate, renderId, frame, fps) : this.getDummyBuffer(device);\n\t\t\tconst bVal = resolveSignalBValue(normalizedSd);\n\t\t\tconst signalEncoder = device.createCommandEncoder({ label: `signal_1d_math_encoder_${nodeId}` });\n\t\t\tthis.dispatch1DMathSignal(device, signalEncoder, res, bufA, bufB, Boolean(hasB), bVal, normalizedSd, elapsedTime, duration$2, numSamples, sampleRate, frame, fps);\n\t\t\tdevice.queue.submit([signalEncoder.finish()]);\n\t\t} else if (normalizedSd?.type === \"gate\" || normalizedSd?.op === \"SignalGate\" || (normalizedSd?.signalConfig)?.type === \"gate\" || (normalizedSd?.signalConfig)?.op === \"SignalGate\") {\n\t\t\tconst source = normalizedSd.sourceSignal ?? normalizedSd.signalConfig?.sourceSignal ?? normalizedSd.signal;\n\t\t\tconst sigInId = source?.nodeId ?? `${nodeId}_in`;\n\t\t\tconst bufIn = this.getOrCreate1DBuffer(device, _encoder, sigInId, elapsedTime, duration$2, source, numSamples, sampleRate, renderId, frame, fps);\n\t\t\tconst signalEncoder = device.createCommandEncoder({ label: `signal_1d_gate_encoder_${nodeId}` });\n\t\t\tthis.dispatch1DGateSignal(device, signalEncoder, res, bufIn, normalizedSd, elapsedTime, duration$2, numSamples, sampleRate, frame, fps);\n\t\t\tdevice.queue.submit([signalEncoder.finish()]);\n\t\t} else {\n\t\t\tconst val = Number(normalizedSd?.offset ?? 0);\n\t\t\tconst flat = new Float32Array(numSamples).fill(val);\n\t\t\tdevice.queue.writeBuffer(res.buffer, 0, flat);\n\t\t}\n\t\treturn res.buffer;\n\t}\n\t/**\n\t* Resolves or creates a 2D GPUTextureView for spatial modulation.\n\t* If not evaluated yet for the current frame, it dispatches the generator render pass.\n\t*/\n\tgetOrCreate2DTextureView(device, _encoder, nodeId, elapsedTime, duration$2, sd, width, _height, renderId, frame, fps) {\n\t\tlet normalizedSd = sd;\n\t\tif (sd && !sd.customWGSL && !sd.wgsl && sd.fnBody) {\n\t\t\tconst fnRes = buildWGSLSignalFn(sd, nodeId);\n\t\t\tnormalizedSd = {\n\t\t\t\t...sd,\n\t\t\t\tcustomWGSL: fnRes.wgsl,\n\t\t\t\tsignalFnName: fnRes.name,\n\t\t\t\tfnOutputType: fnRes.outputType,\n\t\t\t\toutputType: fnRes.outputType\n\t\t\t};\n\t\t}\n\t\tconst dr = this.getDeviceResources(device);\n\t\tconst key = `${renderId ?? \"global\"}:${nodeId}`;\n\t\tlet res = dr.resources.get(key) ?? dr.resources.get(`global:${nodeId}`);\n\t\tconst masterAudio = dr.masterAudioTextures.get(key) ?? dr.masterAudioTextures.get(`global:${nodeId}`) ?? dr.masterAudioTextures.get(`${renderId ?? \"global\"}:${nodeId.replace(/_(beat|bass|energy)$/, \"\")}`) ?? dr.masterAudioTextures.get(`global:${nodeId.replace(/_(beat|bass|energy)$/, \"\")}`);\n\t\tif (res?.isExternal && res.textureView && !masterAudio) return res.textureView;\n\t\tconst targetWidth = res?.texture ? res.texture.width : Math.max(16, width > 0 ? width : 256);\n\t\tconst targetHeight = 1;\n\t\tif (!res || !res.texture) {\n\t\t\tconst texture = device.createTexture({\n\t\t\t\tsize: [\n\t\t\t\t\ttargetWidth,\n\t\t\t\t\ttargetHeight,\n\t\t\t\t\t1\n\t\t\t\t],\n\t\t\t\tformat: \"rgba16float\",\n\t\t\t\tusage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.COPY_DST,\n\t\t\t\tlabel: `signal_2d_texture_${nodeId}`\n\t\t\t});\n\t\t\tres = {\n\t\t\t\t...res,\n\t\t\t\ttype: res?.buffer ? \"combined\" : \"2d-texture\",\n\t\t\t\ttexture,\n\t\t\t\ttextureView: texture.createView(),\n\t\t\t\tlastProcessedFrame: -1\n\t\t\t};\n\t\t\tdr.resources.set(key, res);\n\t\t\tif (renderId) dr.resources.set(`global:${nodeId}`, res);\n\t\t}\n\t\tconst rawSamples = normalizedSd?.samples ?? normalizedSd?.data?.samples;\n\t\tconst fingerprint = normalizedSd ? this.computeSignalFingerprint(normalizedSd) : \"\";\n\t\tconst cacheFrame = frame !== void 0 ? frame : elapsedTime;\n\t\tif (res.lastProcessedFrame === cacheFrame && res.lastFingerprint === fingerprint) return res.textureView;\n\t\tif (res.lastFingerprint !== fingerprint) res.bindGroup = void 0;\n\t\tres.lastProcessedFrame = cacheFrame;\n\t\tres.lastFingerprint = fingerprint;\n\t\tif (masterAudio) {\n\t\t\tlet channel = 0;\n\t\t\tif (typeof normalizedSd?.channel === \"number\") channel = normalizedSd.channel;\n\t\t\telse if (nodeId.endsWith(\"_beat\")) channel = 1;\n\t\t\telse if (nodeId.endsWith(\"_bass\")) channel = 2;\n\t\t\telse if (nodeId.endsWith(\"_energy\")) channel = 3;\n\t\t\tconst signalEncoder = device.createCommandEncoder({ label: `audio_signal_2d_encoder_${nodeId}` });\n\t\t\tthis.dispatch2DAudioSignal(device, signalEncoder, res, masterAudio, channel, elapsedTime, duration$2 > 0 ? duration$2 : masterAudio.durationSec, frame, fps);\n\t\t\tdevice.queue.submit([signalEncoder.finish()]);\n\t\t\treturn res.textureView;\n\t\t} else if (isSamplesArray(rawSamples) && rawSamples.length > 0) {\n\t\t\tconst flat = new Float32Array(targetWidth * targetHeight * 4);\n\t\t\tconst total = rawSamples.length;\n\t\t\tconst baseTime = frame !== void 0 && fps !== void 0 && fps > 0 ? frame / fps : elapsedTime;\n\t\t\tfor (let i = 0; i < targetWidth; i++) {\n\t\t\t\tconst t = baseTime + ((targetWidth > 1 ? i / (targetWidth - 1) : .5) - .5) * 2;\n\t\t\t\tconst tNorm = duration$2 > 0 ? Math.min(1, Math.max(0, t / duration$2)) : .5;\n\t\t\t\tconst sIdx = Math.min(total - 1, Math.max(0, Math.round(tNorm * (total - 1))));\n\t\t\t\tconst val = Number(rawSamples[sIdx]) || 0;\n\t\t\t\tfor (let row = 0; row < targetHeight; row++) {\n\t\t\t\t\tconst idx = (row * targetWidth + i) * 4;\n\t\t\t\t\tflat[idx] = val;\n\t\t\t\t\tflat[idx + 1] = val;\n\t\t\t\t\tflat[idx + 2] = val;\n\t\t\t\t\tflat[idx + 3] = val;\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst halfFlat = encodeFloat32ToFloat16(flat);\n\t\t\tdevice.queue.writeTexture({ texture: res.texture }, halfFlat, {\n\t\t\t\tbytesPerRow: targetWidth * 8,\n\t\t\t\trowsPerImage: targetHeight\n\t\t\t}, [\n\t\t\t\ttargetWidth,\n\t\t\t\ttargetHeight,\n\t\t\t\t1\n\t\t\t]);\n\t\t\treturn res.textureView;\n\t\t} else if (normalizedSd && (normalizedSd.type === \"signal_math\" || normalizedSd.op === \"SignalMath\" || Boolean(normalizedSd.operation) || Boolean(normalizedSd.signalConfig?.operation))) {\n\t\t\tconst signalEncoder = device.createCommandEncoder({ label: `signal_math_2d_encoder_${nodeId}` });\n\t\t\tthis.dispatch2DSignalMath(device, signalEncoder, res, nodeId, normalizedSd, elapsedTime, duration$2, targetWidth, frame, fps, renderId);\n\t\t\tdevice.queue.submit([signalEncoder.finish()]);\n\t\t\treturn res.textureView;\n\t\t} else if (normalizedSd && (normalizedSd.type === \"gate\" || normalizedSd.op === \"SignalGate\" || normalizedSd.signalConfig?.type === \"gate\" || normalizedSd.signalConfig?.op === \"SignalGate\")) {\n\t\t\tconst signalEncoder = device.createCommandEncoder({ label: `signal_gate_2d_encoder_${nodeId}` });\n\t\t\tthis.dispatch2DSignalGate(device, signalEncoder, res, nodeId, normalizedSd, elapsedTime, duration$2, targetWidth, frame, fps, renderId);\n\t\t\tdevice.queue.submit([signalEncoder.finish()]);\n\t\t\treturn res.textureView;\n\t\t} else if (normalizedSd && normalizedSd.type === \"generator\" && (normalizedSd.customWGSL || normalizedSd.fnBody)) {\n\t\t\tconst signalEncoder = device.createCommandEncoder({ label: `signal_2d_encoder_${nodeId}` });\n\t\t\tthis.dispatch2DGenerator(device, signalEncoder, res, elapsedTime, duration$2, normalizedSd, targetWidth, targetHeight, frame, fps);\n\t\t\tdevice.queue.submit([signalEncoder.finish()]);\n\t\t} else {\n\t\t\tconst val = Number(normalizedSd?.offset ?? 0);\n\t\t\tconst flat = new Float32Array(targetWidth * targetHeight * 4);\n\t\t\tfor (let i = 0; i < targetWidth * targetHeight; i++) {\n\t\t\t\tflat[i * 4] = val;\n\t\t\t\tflat[i * 4 + 1] = val;\n\t\t\t\tflat[i * 4 + 2] = val;\n\t\t\t\tflat[i * 4 + 3] = 1;\n\t\t\t}\n\t\t\tconst halfFlat = encodeFloat32ToFloat16(flat);\n\t\t\tdevice.queue.writeTexture({ texture: res.texture }, halfFlat, {\n\t\t\t\tbytesPerRow: targetWidth * 8,\n\t\t\t\trowsPerImage: targetHeight\n\t\t\t}, [\n\t\t\t\ttargetWidth,\n\t\t\t\ttargetHeight,\n\t\t\t\t1\n\t\t\t]);\n\t\t}\n\t\treturn res.textureView;\n\t}\n\tdispatch1DGenerator(device, encoder, res, elapsedTime, duration$2, sd, numSamples, sampleRate, frame, fps) {\n\t\tconst customWGSL = sd.customWGSL ?? sd.wgsl ?? \"\";\n\t\tconst signalFnName = sd.signalFnName ?? sd.name ?? \"signal_fn\";\n\t\tconst outputType = sd.fnOutputType ?? sd.outputType ?? \"f32\";\n\t\tconst dr = this.getDeviceResources(device);\n\t\tconst shaderKey = `1d_${sd.nodeId}_${customWGSL}`;\n\t\tlet pipeline = dr.pipelineCache.get(shaderKey);\n\t\tif (!pipeline) {\n\t\t\tconst fnParams = sd.fnParams ?? [];\n\t\t\tconst paramVals = [];\n\t\t\tfor (const p of fnParams) {\n\t\t\t\tconst val = p.defaultValue;\n\t\t\t\tparamVals.push(val % 1 === 0 ? `${val.toFixed(1)}f` : `${val}f`);\n\t\t\t}\n\t\t\tlet callExpr = `${signalFnName}(${[\n\t\t\t\t\"t\",\n\t\t\t\t\"progress\",\n\t\t\t\t\"0.0\",\n\t\t\t\t\"0.0\",\n\t\t\t\t\"idx\",\n\t\t\t\t\"u.numSamples\",\n\t\t\t\t\"u.frame\",\n\t\t\t\t\"vec4<f32>(progress, 0.5, 0.5, 1.0)\",\n\t\t\t\t\"u.t_elapsed\",\n\t\t\t\t\"u.duration\",\n\t\t\t\t...paramVals\n\t\t\t].join(\", \")})`;\n\t\t\tif (outputType === \"vec2f\" || outputType === \"vec3f\" || outputType === \"vec4f\") callExpr = `${callExpr}.x`;\n\t\t\tconst shaderCode = `\nstruct GeneratorUniforms {\n sampleRate : f32,\n baseTime : f32,\n frame : u32,\n numSamples : u32,\n amplitude : f32,\n frequency : f32,\n phase : f32,\n offset : f32,\n t_elapsed : f32,\n duration : f32,\n pad1 : f32,\n pad2 : f32,\n};\n\n@group(0) @binding(0) var<uniform> u : GeneratorUniforms;\n@group(0) @binding(1) var<storage, read_write> outSignal : array<f32>;\n\n${customWGSL}\n\n@compute @workgroup_size(64)\nfn main(@builtin(global_invocation_id) gid : vec3<u32>) {\n let idx = gid.x;\n if (idx >= u.numSamples) { return; }\n\n let progress = f32(idx) / f32(u.numSamples - 1u);\n let t = u.baseTime + f32(idx) / u.sampleRate;\n \n // Evaluate custom signal\n let val = ${callExpr};\n outSignal[idx] = val;\n}\n\t\t\t`;\n\t\t\tconst shaderModule = device.createShaderModule({\n\t\t\t\tlabel: `signal_1d_generator_${sd.nodeId}.wgsl`,\n\t\t\t\tcode: shaderCode\n\t\t\t});\n\t\t\tpipeline = device.createComputePipeline({\n\t\t\t\tlabel: `Signal1DComputePipeline_${sd.nodeId}`,\n\t\t\t\tlayout: \"auto\",\n\t\t\t\tcompute: {\n\t\t\t\t\tmodule: shaderModule,\n\t\t\t\t\tentryPoint: \"main\"\n\t\t\t\t}\n\t\t\t});\n\t\t\tdr.pipelineCache.set(shaderKey, pipeline);\n\t\t}\n\t\tconst baseTime = frame !== void 0 && fps !== void 0 && fps > 0 ? frame / fps : elapsedTime;\n\t\tconst uFrame = frame !== void 0 ? frame : 0;\n\t\tconst uniformBufferData = /* @__PURE__ */ new ArrayBuffer(48);\n\t\tconst f32View = new Float32Array(uniformBufferData);\n\t\tconst u32View = new Uint32Array(uniformBufferData);\n\t\tf32View[0] = sampleRate;\n\t\tf32View[1] = baseTime;\n\t\tu32View[2] = uFrame;\n\t\tu32View[3] = numSamples;\n\t\tf32View[4] = sd.amplitude ?? 1;\n\t\tf32View[5] = sd.frequency ?? 1;\n\t\tf32View[6] = sd.phase ?? 0;\n\t\tf32View[7] = sd.offset ?? 0;\n\t\tf32View[8] = elapsedTime;\n\t\tf32View[9] = duration$2;\n\t\tf32View[10] = 0;\n\t\tf32View[11] = 0;\n\t\tif (!res.uniformBuffer) res.uniformBuffer = device.createBuffer({\n\t\t\tsize: uniformBufferData.byteLength,\n\t\t\tusage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,\n\t\t\tlabel: `signal_1d_uniform_buffer_${sd.nodeId}`\n\t\t});\n\t\tdevice.queue.writeBuffer(res.uniformBuffer, 0, uniformBufferData);\n\t\tif (!res.bindGroup) res.bindGroup = device.createBindGroup({\n\t\t\tlayout: pipeline.getBindGroupLayout(0),\n\t\t\tentries: [{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: { buffer: res.uniformBuffer }\n\t\t\t}, {\n\t\t\t\tbinding: 1,\n\t\t\t\tresource: { buffer: res.buffer }\n\t\t\t}]\n\t\t});\n\t\tconst pass = encoder.beginComputePass({ label: `signal_1d_compute_pass_${sd.nodeId}` });\n\t\tpass.setPipeline(pipeline);\n\t\tpass.setBindGroup(0, res.bindGroup);\n\t\tconst workgroups = Math.ceil(numSamples / 64);\n\t\tpass.dispatchWorkgroups(workgroups);\n\t\tpass.end();\n\t}\n\tdispatch1DAudioSignal(device, encoder, res, masterTex, channel, elapsedTime, duration$2, numSamples, sampleRate) {\n\t\tconst dr = this.getDeviceResources(device);\n\t\tconst shaderKey = \"audio_signal_1d\";\n\t\tlet pipeline = dr.pipelineCache.get(shaderKey);\n\t\tconst sampler = this.getSampler(device);\n\t\tif (!pipeline) {\n\t\t\tconst shaderModule = device.createShaderModule({\n\t\t\t\tcode: `\nstruct Audio1DUniforms {\n sampleRate : f32,\n baseTime : f32,\n duration : f32,\n numSamples : u32,\n channel : u32,\n pad1 : f32,\n pad2 : f32,\n pad3 : f32,\n};\n\n@group(0) @binding(0) var<uniform> u : Audio1DUniforms;\n@group(0) @binding(1) var masterTex : texture_2d<f32>;\n@group(0) @binding(2) var samp : sampler;\n@group(0) @binding(3) var<storage, read_write> outSignal : array<f32>;\n\n@compute @workgroup_size(64)\nfn main(@builtin(global_invocation_id) gid : vec3<u32>) {\n let idx = gid.x;\n if (idx >= u.numSamples) { return; }\n\n let t = u.baseTime + f32(idx) / u.sampleRate;\n var t_norm = 0.5f;\n if (u.duration > 0.0f) {\n t_norm = clamp(t / u.duration, 0.0f, 1.0f);\n }\n\n let s = textureSampleLevel(masterTex, samp, vec2<f32>(t_norm, 0.5f), 0.0f);\n var val = s.r;\n if (u.channel == 1u) {\n val = s.g;\n } else if (u.channel == 2u) {\n val = s.b;\n } else if (u.channel == 3u) {\n val = s.a;\n }\n\n outSignal[idx] = val;\n}\n`,\n\t\t\t\tlabel: \"dispatch1DAudioSignal_module\"\n\t\t\t});\n\t\t\tpipeline = device.createComputePipeline({\n\t\t\t\tlabel: \"dispatch1DAudioSignal_pipeline\",\n\t\t\t\tlayout: \"auto\",\n\t\t\t\tcompute: {\n\t\t\t\t\tmodule: shaderModule,\n\t\t\t\t\tentryPoint: \"main\"\n\t\t\t\t}\n\t\t\t});\n\t\t\tdr.pipelineCache.set(shaderKey, pipeline);\n\t\t}\n\t\tconst uData = /* @__PURE__ */ new ArrayBuffer(32);\n\t\tconst fView = new Float32Array(uData);\n\t\tconst uView = new Uint32Array(uData);\n\t\tfView[0] = sampleRate;\n\t\tfView[1] = elapsedTime;\n\t\tfView[2] = duration$2 > 0 ? duration$2 : 1;\n\t\tuView[3] = numSamples;\n\t\tuView[4] = channel;\n\t\tconst uBuffer = device.createBuffer({\n\t\t\tsize: 32,\n\t\t\tusage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,\n\t\t\tlabel: \"audio_1d_uniform_buffer\"\n\t\t});\n\t\tdevice.queue.writeBuffer(uBuffer, 0, uData);\n\t\tconst bindGroup = device.createBindGroup({\n\t\t\tlayout: pipeline.getBindGroupLayout(0),\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: { buffer: uBuffer }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: masterTex.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: sampler\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 3,\n\t\t\t\t\tresource: { buffer: res.buffer }\n\t\t\t\t}\n\t\t\t]\n\t\t});\n\t\tconst pass = encoder.beginComputePass({ label: \"audio_1d_compute_pass\" });\n\t\tpass.setPipeline(pipeline);\n\t\tpass.setBindGroup(0, bindGroup);\n\t\tpass.dispatchWorkgroups(Math.ceil(numSamples / 64));\n\t\tpass.end();\n\t}\n\tdispatch1DMathSignal(device, encoder, res, bufA, bufB, hasSignalB, bValue, sd, elapsedTime, duration$2, numSamples, sampleRate, frame, _fps) {\n\t\tconst dr = this.getDeviceResources(device);\n\t\tconst operation = sd.operation ?? \"add\";\n\t\tconst customWGSL = sd.customWGSL ?? sd.wgsl ?? \"\";\n\t\tconst shaderKey = `1d_math_${operation}_${hasSignalB}_${customWGSL}`;\n\t\tlet pipeline = dr.pipelineCache.get(shaderKey);\n\t\tif (!pipeline) {\n\t\t\tconst { evalExpr, extraFn } = buildSignalMathExpression(operation, customWGSL);\n\t\t\tconst shaderCode = `\nstruct MathUniforms {\n bValue : f32,\n inMin : f32,\n inMax : f32,\n outMin : f32,\n outMax : f32,\n clampMin : f32,\n clampMax : f32,\n exponent : f32,\n edge0 : f32,\n edge1 : f32,\n a_min : f32,\n a_max : f32,\n baseTime : f32,\n duration : f32,\n sampleRate: f32,\n numSamples: u32,\n hasB : f32,\n frame : u32,\n pad1 : f32,\n pad2 : f32,\n};\n\n@group(0) @binding(0) var<uniform> u : MathUniforms;\n@group(0) @binding(1) var<storage, read> bufA : array<f32>;\n@group(0) @binding(2) var<storage, read> bufB : array<f32>;\n@group(0) @binding(3) var<storage, read_write> outSignal : array<f32>;\n\nconst PI: f32 = ${Math.PI}f;\nconst TAU: f32 = ${Math.PI * 2}f;\nconst E: f32 = ${Math.E}f;\n\n${extraFn}\n\n@compute @workgroup_size(64)\nfn main(@builtin(global_invocation_id) gid : vec3<u32>) {\n let idx = gid.x;\n if (idx >= u.numSamples) { return; }\n\n let a = bufA[idx];\n var b = u.bValue;\n if (u.hasB > 0.5f) {\n b = bufB[idx];\n }\n let a_min = u.a_min;\n let a_max = u.a_max;\n let inMin = u.inMin;\n let inMax = u.inMax;\n let outMin = u.outMin;\n let outMax = u.outMax;\n let clampMin = u.clampMin;\n let clampMax = u.clampMax;\n let exponent = u.exponent;\n let edge0 = u.edge0;\n let edge1 = u.edge1;\n let t = u.baseTime + f32(idx) / u.sampleRate;\n var t_norm = 0.5f;\n if (u.duration > 0.0f) {\n t_norm = clamp(t / u.duration, 0.0f, 1.0f);\n }\n let frame = u.frame;\n\n let val = ${evalExpr};\n outSignal[idx] = val;\n}\n`;\n\t\t\tconst shaderModule = device.createShaderModule({\n\t\t\t\tlabel: `signal_1d_math_${operation}.wgsl`,\n\t\t\t\tcode: shaderCode\n\t\t\t});\n\t\t\tpipeline = device.createComputePipeline({\n\t\t\t\tlabel: `Signal1DMathPipeline_${operation}`,\n\t\t\t\tlayout: \"auto\",\n\t\t\t\tcompute: {\n\t\t\t\t\tmodule: shaderModule,\n\t\t\t\t\tentryPoint: \"main\"\n\t\t\t\t}\n\t\t\t});\n\t\t\tdr.pipelineCache.set(shaderKey, pipeline);\n\t\t}\n\t\tconst uData = new ArrayBuffer(Math.max(80, 256));\n\t\tconst fView = new Float32Array(uData);\n\t\tconst uView = new Uint32Array(uData);\n\t\tfView[0] = bValue;\n\t\tfView[1] = Number(sd.inMin) || 0;\n\t\tfView[2] = Number(sd.inMax) || 1;\n\t\tfView[3] = Number(sd.outMin) || 0;\n\t\tfView[4] = Number(sd.outMax) || 1;\n\t\tfView[5] = Number(sd.clampMin) || 0;\n\t\tfView[6] = Number(sd.clampMax) || 1;\n\t\tfView[7] = Number(sd.exponent) || 2;\n\t\tfView[8] = Number(sd.edge0) || 0;\n\t\tfView[9] = Number(sd.edge1) || 1;\n\t\tfView[10] = Number(sd.aMin ?? sd.inMin) || 0;\n\t\tfView[11] = Number(sd.aMax ?? sd.inMax) || 1;\n\t\tfView[12] = elapsedTime;\n\t\tfView[13] = duration$2 > 0 ? duration$2 : 1;\n\t\tfView[14] = sampleRate;\n\t\tuView[15] = numSamples;\n\t\tfView[16] = hasSignalB ? 1 : 0;\n\t\tuView[17] = frame !== void 0 ? Math.max(0, Math.floor(frame)) : 0;\n\t\tconst uBuffer = device.createBuffer({\n\t\t\tsize: Math.max(80, 256),\n\t\t\tusage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,\n\t\t\tlabel: \"math_1d_uniform_buffer\"\n\t\t});\n\t\tdevice.queue.writeBuffer(uBuffer, 0, uData);\n\t\tconst bindGroup = device.createBindGroup({\n\t\t\tlayout: pipeline.getBindGroupLayout(0),\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: { buffer: uBuffer }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: { buffer: bufA }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: { buffer: bufB }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 3,\n\t\t\t\t\tresource: { buffer: res.buffer }\n\t\t\t\t}\n\t\t\t]\n\t\t});\n\t\tconst pass = encoder.beginComputePass({ label: \"math_1d_compute_pass\" });\n\t\tpass.setPipeline(pipeline);\n\t\tpass.setBindGroup(0, bindGroup);\n\t\tpass.dispatchWorkgroups(Math.ceil(numSamples / 64));\n\t\tpass.end();\n\t}\n\tdispatch2DGenerator(device, encoder, res, elapsedTime, duration$2, sd, _width, _height, frame, fps) {\n\t\tconst customWGSL = sd.customWGSL ?? sd.wgsl ?? \"\";\n\t\tconst signalFnName = sd.signalFnName ?? sd.name ?? \"signal_fn\";\n\t\tconst dr = this.getDeviceResources(device);\n\t\tconst shaderKey = `2d_${sd.nodeId}_${customWGSL}`;\n\t\tlet pipeline = dr.pipelineCache.get(shaderKey);\n\t\tif (!pipeline) {\n\t\t\tconst fnParams = sd.fnParams ?? [];\n\t\t\tconst paramVals = [];\n\t\t\tfor (const p of fnParams) {\n\t\t\t\tconst val = p.defaultValue;\n\t\t\t\tparamVals.push(val % 1 === 0 ? `${val.toFixed(1)}f` : `${val}f`);\n\t\t\t}\n\t\t\tconst shaderCode = `\nstruct VSOut {\n @builtin(position) pos : vec4<f32>,\n @location(0) uv : vec2<f32>,\n};\n\nstruct GeneratorUniforms {\n baseTime : f32,\n frame : u32,\n amplitude : f32,\n frequency : f32,\n phase : f32,\n offset : f32,\n t_elapsed : f32,\n duration : f32,\n};\n\n@group(0) @binding(0) var<uniform> u : GeneratorUniforms;\n\n${customWGSL}\n\n@vertex fn vs(@builtin(vertex_index) vi: u32) -> VSOut {\n var pos = array<vec2<f32>, 4>(\n vec2<f32>(-1.0, 1.0),\n vec2<f32>( 1.0, 1.0),\n vec2<f32>(-1.0, -1.0),\n vec2<f32>( 1.0, -1.0)\n );\n var uv = array<vec2<f32>, 4>(\n vec2<f32>(0.0, 0.0),\n vec2<f32>(1.0, 0.0),\n vec2<f32>(0.0, 1.0),\n vec2<f32>(1.0, 1.0)\n );\n return VSOut(vec4<f32>(pos[vi], 0.0, 1.0), uv[vi]);\n}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n ${`let val = f32(${`${signalFnName}(${[\n\t\t\t\t\"u.baseTime + (in.uv.x - 0.5) * 2.0\",\n\t\t\t\t\"in.uv.x\",\n\t\t\t\t\"1.0 - in.uv.y\",\n\t\t\t\t\"0.0\",\n\t\t\t\t\"0u\",\n\t\t\t\t\"1u\",\n\t\t\t\t\"u.frame\",\n\t\t\t\t\"vec4<f32>(in.uv.x, 1.0 - in.uv.y, 0.5, 1.0)\",\n\t\t\t\t\"u.t_elapsed + (in.uv.x - 0.5) * 2.0\",\n\t\t\t\t\"u.duration\",\n\t\t\t\t...paramVals\n\t\t\t].join(\", \")})`}); return vec4<f32>(val, val, val, val);`}\n}\n\t\t\t`;\n\t\t\tconst shaderModule = device.createShaderModule({\n\t\t\t\tlabel: `signal_2d_generator_${sd.nodeId}.wgsl`,\n\t\t\t\tcode: shaderCode\n\t\t\t});\n\t\t\tpipeline = device.createRenderPipeline({\n\t\t\t\tlabel: `Signal2DPipeline_${sd.nodeId}`,\n\t\t\t\tlayout: \"auto\",\n\t\t\t\tvertex: {\n\t\t\t\t\tmodule: shaderModule,\n\t\t\t\t\tentryPoint: \"vs\"\n\t\t\t\t},\n\t\t\t\tfragment: {\n\t\t\t\t\tmodule: shaderModule,\n\t\t\t\t\tentryPoint: \"fs\",\n\t\t\t\t\ttargets: [{ format: \"rgba16float\" }]\n\t\t\t\t},\n\t\t\t\tprimitive: { topology: \"triangle-strip\" }\n\t\t\t});\n\t\t\tdr.pipelineCache.set(shaderKey, pipeline);\n\t\t}\n\t\tconst baseTime = frame !== void 0 && fps !== void 0 && fps > 0 ? frame / fps : elapsedTime;\n\t\tconst uFrame = frame !== void 0 ? frame : 0;\n\t\tconst uniformBufferData = /* @__PURE__ */ new ArrayBuffer(32);\n\t\tconst f32View = new Float32Array(uniformBufferData);\n\t\tconst u32View = new Uint32Array(uniformBufferData);\n\t\tf32View[0] = baseTime;\n\t\tu32View[1] = uFrame;\n\t\tf32View[2] = sd.amplitude ?? 1;\n\t\tf32View[3] = sd.frequency ?? 1;\n\t\tf32View[4] = sd.phase ?? 0;\n\t\tf32View[5] = sd.offset ?? 0;\n\t\tf32View[6] = elapsedTime;\n\t\tf32View[7] = duration$2;\n\t\tif (!res.uniformBuffer || res.uniformBuffer.size < 256) {\n\t\t\tres.uniformBuffer = device.createBuffer({\n\t\t\t\tsize: 256,\n\t\t\t\tusage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,\n\t\t\t\tlabel: `signal_2d_uniform_buffer_${sd.nodeId}`\n\t\t\t});\n\t\t\tres.bindGroup = void 0;\n\t\t}\n\t\tdevice.queue.writeBuffer(res.uniformBuffer, 0, uniformBufferData);\n\t\tif (!res.bindGroup) res.bindGroup = device.createBindGroup({\n\t\t\tlayout: pipeline.getBindGroupLayout(0),\n\t\t\tentries: [{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: { buffer: res.uniformBuffer }\n\t\t\t}]\n\t\t});\n\t\tconst pass = encoder.beginRenderPass({\n\t\t\tlabel: `signal_2d_render_pass_${sd.nodeId}`,\n\t\t\tcolorAttachments: [{\n\t\t\t\tview: res.textureView,\n\t\t\t\tloadOp: \"clear\",\n\t\t\t\tstoreOp: \"store\",\n\t\t\t\tclearValue: {\n\t\t\t\t\tr: 0,\n\t\t\t\t\tg: 0,\n\t\t\t\t\tb: 0,\n\t\t\t\t\ta: 0\n\t\t\t\t}\n\t\t\t}]\n\t\t});\n\t\tpass.setPipeline(pipeline);\n\t\tpass.setBindGroup(0, res.bindGroup);\n\t\tpass.draw(4);\n\t\tpass.end();\n\t}\n\tdispatch2DAudioSignal(device, encoder, res, masterAudio, channel, elapsedTime, duration$2, frame, fps) {\n\t\tconst dr = this.getDeviceResources(device);\n\t\tconst shaderKey = \"audio_signal_2d\";\n\t\tlet pipeline = dr.pipelineCache.get(shaderKey);\n\t\tconst sampler = this.getSampler(device);\n\t\tif (!pipeline) {\n\t\t\tconst shaderModule = device.createShaderModule({\n\t\t\t\tcode: `\nstruct VSOut {\n @builtin(position) pos : vec4<f32>,\n @location(0) uv : vec2<f32>,\n};\n\nstruct AudioUniforms {\n baseTime : f32,\n duration : f32,\n channel : u32,\n pad : f32,\n};\n\n@group(0) @binding(0) var<uniform> u : AudioUniforms;\n@group(0) @binding(1) var masterTex : texture_2d<f32>;\n@group(0) @binding(2) var samp : sampler;\n\n@vertex fn vs(@builtin(vertex_index) vi: u32) -> VSOut {\n var pos = array<vec2<f32>, 4>(\n vec2<f32>(-1.0, 1.0),\n vec2<f32>( 1.0, 1.0),\n vec2<f32>(-1.0, -1.0),\n vec2<f32>( 1.0, -1.0)\n );\n var uv = array<vec2<f32>, 4>(\n vec2<f32>(0.0, 0.0),\n vec2<f32>(1.0, 0.0),\n vec2<f32>(0.0, 1.0),\n vec2<f32>(1.0, 1.0)\n );\n return VSOut(vec4<f32>(pos[vi], 0.0, 1.0), uv[vi]);\n}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n let t = u.baseTime + (in.uv.x - 0.5) * 2.0;\n var t_norm = 0.5;\n if (u.duration > 0.0) {\n t_norm = clamp(t / u.duration, 0.0, 1.0);\n }\n let s = textureSampleLevel(masterTex, samp, vec2<f32>(t_norm, 0.5), 0.0);\n if (u.channel == 1u) {\n return vec4<f32>(s.g, s.g, s.g, s.g);\n } else if (u.channel == 2u) {\n return vec4<f32>(s.b, s.b, s.b, s.b);\n } else if (u.channel == 3u) {\n return vec4<f32>(s.a, s.a, s.a, s.a);\n }\n return s;\n}\n`,\n\t\t\t\tlabel: \"dispatch2DAudioSignal_module\"\n\t\t\t});\n\t\t\tpipeline = device.createRenderPipeline({\n\t\t\t\tlabel: \"dispatch2DAudioSignal_pipeline\",\n\t\t\t\tlayout: \"auto\",\n\t\t\t\tvertex: {\n\t\t\t\t\tmodule: shaderModule,\n\t\t\t\t\tentryPoint: \"vs\"\n\t\t\t\t},\n\t\t\t\tfragment: {\n\t\t\t\t\tmodule: shaderModule,\n\t\t\t\t\tentryPoint: \"fs\",\n\t\t\t\t\ttargets: [{ format: \"rgba16float\" }]\n\t\t\t\t},\n\t\t\t\tprimitive: { topology: \"triangle-strip\" }\n\t\t\t});\n\t\t\tdr.pipelineCache.set(shaderKey, pipeline);\n\t\t}\n\t\tconst baseTime = frame !== void 0 && fps !== void 0 && fps > 0 ? frame / fps : elapsedTime;\n\t\tconst effectiveDuration = duration$2 > 0 ? duration$2 : masterAudio.durationSec ?? 0;\n\t\tconst uniformBufferData = /* @__PURE__ */ new ArrayBuffer(16);\n\t\tconst f32View = new Float32Array(uniformBufferData);\n\t\tconst u32View = new Uint32Array(uniformBufferData);\n\t\tf32View[0] = baseTime;\n\t\tf32View[1] = effectiveDuration;\n\t\tu32View[2] = channel;\n\t\tf32View[3] = 0;\n\t\tif (!res.uniformBuffer || res.uniformBuffer.size < 256) {\n\t\t\tres.uniformBuffer = device.createBuffer({\n\t\t\t\tsize: 256,\n\t\t\t\tusage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,\n\t\t\t\tlabel: \"audio_signal_2d_uniform_buffer\"\n\t\t\t});\n\t\t\tres.bindGroup = void 0;\n\t\t}\n\t\tdevice.queue.writeBuffer(res.uniformBuffer, 0, uniformBufferData);\n\t\tconst bindGroup = device.createBindGroup({\n\t\t\tlayout: pipeline.getBindGroupLayout(0),\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: { buffer: res.uniformBuffer }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: masterAudio.textureView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: sampler\n\t\t\t\t}\n\t\t\t]\n\t\t});\n\t\tconst pass = encoder.beginRenderPass({\n\t\t\tlabel: \"audio_signal_2d_render_pass\",\n\t\t\tcolorAttachments: [{\n\t\t\t\tview: res.textureView,\n\t\t\t\tloadOp: \"clear\",\n\t\t\t\tstoreOp: \"store\",\n\t\t\t\tclearValue: {\n\t\t\t\t\tr: 0,\n\t\t\t\t\tg: 0,\n\t\t\t\t\tb: 0,\n\t\t\t\t\ta: 0\n\t\t\t\t}\n\t\t\t}]\n\t\t});\n\t\tpass.setPipeline(pipeline);\n\t\tpass.setBindGroup(0, bindGroup);\n\t\tpass.draw(4);\n\t\tpass.end();\n\t}\n\tdispatch2DSignalMath(device, encoder, res, nodeId, sd, elapsedTime, duration$2, width, frame, fps, renderId) {\n\t\tconst cfg = sd.signalConfig;\n\t\tconst operation = sd.operation ?? cfg?.operation ?? \"remap\";\n\t\tconst customWGSL = sd.customWGSL ?? cfg?.customWGSL ?? \"\";\n\t\tconst dr = this.getDeviceResources(device);\n\t\tconst shaderKey = `math_${nodeId}_${operation}_${customWGSL}`;\n\t\tlet pipeline = dr.pipelineCache.get(shaderKey);\n\t\tconst sigANodeId = sd.signalA?.nodeId || sd.signalA?.virtualMedia?.operation?.nodeId;\n\t\tconst sigBNodeId = sd.signalB && typeof sd.signalB === \"object\" ? sd.signalB.nodeId || sd.signalB.virtualMedia?.operation?.nodeId : void 0;\n\t\tconst hasSignalB = Boolean(sigBNodeId);\n\t\tconst viewA = sigANodeId ? this.getOrCreate2DTextureView(device, encoder, sigANodeId, elapsedTime, duration$2, sd.signalA, width, 1, renderId, frame, fps) : this.getDummy1x1TextureView(device);\n\t\tconst viewB = sigBNodeId ? this.getOrCreate2DTextureView(device, encoder, sigBNodeId, elapsedTime, duration$2, sd.signalB, width, 1, renderId, frame, fps) : this.getDummy1x1TextureView(device);\n\t\tconst sampler = this.getSampler(device);\n\t\tif (!pipeline) {\n\t\t\tconst { evalExpr, extraFn } = buildSignalMathExpression(operation, customWGSL);\n\t\t\tconst shaderCode = `\nstruct VSOut {\n @builtin(position) pos : vec4<f32>,\n @location(0) uv : vec2<f32>,\n};\n\nstruct MathUniforms {\n bValue : f32,\n inMin : f32,\n inMax : f32,\n outMin : f32,\n outMax : f32,\n clampMin : f32,\n clampMax : f32,\n exponent : f32,\n edge0 : f32,\n edge1 : f32,\n a_min : f32,\n a_max : f32,\n t : f32,\n t_norm : f32,\n frame : u32,\n hasB : f32,\n};\n\n@group(0) @binding(0) var<uniform> u : MathUniforms;\n@group(0) @binding(1) var texA : texture_2d<f32>;\n@group(0) @binding(2) var texB : texture_2d<f32>;\n@group(0) @binding(3) var samp : sampler;\n\nconst PI: f32 = ${Math.PI}f;\nconst TAU: f32 = ${Math.PI * 2}f;\nconst E: f32 = ${Math.E}f;\n\n${extraFn}\n\n@vertex fn vs(@builtin(vertex_index) vi: u32) -> VSOut {\n var pos = array<vec2<f32>, 4>(\n vec2<f32>(-1.0, 1.0),\n vec2<f32>( 1.0, 1.0),\n vec2<f32>(-1.0, -1.0),\n vec2<f32>( 1.0, -1.0)\n );\n var uv = array<vec2<f32>, 4>(\n vec2<f32>(0.0, 0.0),\n vec2<f32>(1.0, 0.0),\n vec2<f32>(0.0, 1.0),\n vec2<f32>(1.0, 1.0)\n );\n return VSOut(vec4<f32>(pos[vi], 0.0, 1.0), uv[vi]);\n}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n let a = textureSampleLevel(texA, samp, in.uv, 0.0).r;\n var b = u.bValue;\n if (u.hasB > 0.5) {\n b = textureSampleLevel(texB, samp, in.uv, 0.0).r;\n }\n let a_min = u.a_min;\n let a_max = u.a_max;\n let inMin = u.inMin;\n let inMax = u.inMax;\n let outMin = u.outMin;\n let outMax = u.outMax;\n let clampMin = u.clampMin;\n let clampMax = u.clampMax;\n let exponent = u.exponent;\n let edge0 = u.edge0;\n let edge1 = u.edge1;\n let t = u.t;\n let t_norm = u.t_norm;\n let frame = u.frame;\n\n var val: f32 = ${evalExpr};\n return vec4<f32>(val, val, val, val);\n}\n`;\n\t\t\tconst shaderModule = device.createShaderModule({\n\t\t\t\tlabel: `signal_math_${nodeId}.wgsl`,\n\t\t\t\tcode: shaderCode\n\t\t\t});\n\t\t\tpipeline = device.createRenderPipeline({\n\t\t\t\tlabel: `SignalMathPipeline_${nodeId}`,\n\t\t\t\tlayout: \"auto\",\n\t\t\t\tvertex: {\n\t\t\t\t\tmodule: shaderModule,\n\t\t\t\t\tentryPoint: \"vs\"\n\t\t\t\t},\n\t\t\t\tfragment: {\n\t\t\t\t\tmodule: shaderModule,\n\t\t\t\t\tentryPoint: \"fs\",\n\t\t\t\t\ttargets: [{ format: \"rgba16float\" }]\n\t\t\t\t},\n\t\t\t\tprimitive: { topology: \"triangle-strip\" }\n\t\t\t});\n\t\t\tdr.pipelineCache.set(shaderKey, pipeline);\n\t\t}\n\t\tconst statsA = sigANodeId ? this.getStats(sigANodeId) : void 0;\n\t\tconst aMin = statsA?.min ?? 0;\n\t\tconst aMax = statsA?.max ?? 1;\n\t\tconst stats = computeSignalMathStats(operation, aMin, aMax, sd, hasSignalB, sigBNodeId ? this.getStats(sigBNodeId) : void 0);\n\t\tthis.setStats(nodeId, stats);\n\t\tif (sd.nodeId && sd.nodeId !== nodeId) this.setStats(sd.nodeId, stats);\n\t\tconst uData = /* @__PURE__ */ new ArrayBuffer(64);\n\t\tconst fView = new Float32Array(uData);\n\t\tconst uView = new Uint32Array(uData);\n\t\tconst baseTime = frame !== void 0 && fps !== void 0 && fps > 0 ? frame / fps : elapsedTime;\n\t\tfView[0] = resolveSignalBValue(sd);\n\t\tfView[1] = sd.inMin ?? cfg?.inMin ?? 0;\n\t\tfView[2] = sd.inMax ?? cfg?.inMax ?? 1;\n\t\tfView[3] = sd.outMin ?? cfg?.outMin ?? 0;\n\t\tfView[4] = sd.outMax ?? cfg?.outMax ?? 1;\n\t\tfView[5] = sd.clampMin ?? cfg?.clampMin ?? 0;\n\t\tfView[6] = sd.clampMax ?? cfg?.clampMax ?? 1;\n\t\tfView[7] = sd.exponent ?? cfg?.exponent ?? 2;\n\t\tfView[8] = sd.edge0 ?? cfg?.edge0 ?? 0;\n\t\tfView[9] = sd.edge1 ?? cfg?.edge1 ?? 1;\n\t\tfView[10] = aMin;\n\t\tfView[11] = aMax;\n\t\tfView[12] = baseTime;\n\t\tfView[13] = duration$2 > 0 ? baseTime / duration$2 : 0;\n\t\tuView[14] = frame ?? 0;\n\t\tfView[15] = hasSignalB ? 1 : 0;\n\t\tif (!res.uniformBuffer || res.uniformBuffer.size < 256) {\n\t\t\tres.uniformBuffer = device.createBuffer({\n\t\t\t\tsize: 256,\n\t\t\t\tusage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,\n\t\t\t\tlabel: `signal_math_uniform_${nodeId}`\n\t\t\t});\n\t\t\tres.bindGroup = void 0;\n\t\t}\n\t\tdevice.queue.writeBuffer(res.uniformBuffer, 0, uData);\n\t\tconst bindGroup = device.createBindGroup({\n\t\t\tlayout: pipeline.getBindGroupLayout(0),\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: { buffer: res.uniformBuffer }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: viewA\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: viewB\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 3,\n\t\t\t\t\tresource: sampler\n\t\t\t\t}\n\t\t\t]\n\t\t});\n\t\tconst pass = encoder.beginRenderPass({\n\t\t\tlabel: `signal_math_pass_${nodeId}`,\n\t\t\tcolorAttachments: [{\n\t\t\t\tview: res.textureView,\n\t\t\t\tloadOp: \"clear\",\n\t\t\t\tstoreOp: \"store\",\n\t\t\t\tclearValue: {\n\t\t\t\t\tr: 0,\n\t\t\t\t\tg: 0,\n\t\t\t\t\tb: 0,\n\t\t\t\t\ta: 0\n\t\t\t\t}\n\t\t\t}]\n\t\t});\n\t\tpass.setPipeline(pipeline);\n\t\tpass.setBindGroup(0, bindGroup);\n\t\tpass.draw(4);\n\t\tpass.end();\n\t}\n\tdispatch2DSignalGate(device, encoder, res, nodeId, sd, elapsedTime, duration$2, width, frame, fps, renderId) {\n\t\tconst cfg = sd.signalConfig;\n\t\tconst threshold = Number(sd.threshold ?? cfg?.threshold ?? .5);\n\t\tconst mode = sd.mode ?? cfg?.mode ?? \"gate\";\n\t\tconst invert = Boolean(sd.invert ?? cfg?.invert ?? false);\n\t\tconst holdFrames = Math.max(1, Number(sd.holdFrames ?? cfg?.holdFrames ?? 4));\n\t\tconst source = sd.sourceSignal ?? cfg?.sourceSignal ?? sd.signal;\n\t\tconst op = (source?.virtualMedia)?.operation;\n\t\tconst sigInNodeId = source?.nodeId || op?.nodeId;\n\t\tconst viewIn = sigInNodeId ? this.getOrCreate2DTextureView(device, encoder, sigInNodeId, elapsedTime, duration$2, source, width, 1, renderId, frame, fps) : this.getDummy1x1TextureView(device);\n\t\tconst sampler = this.getSampler(device);\n\t\tconst dr = this.getDeviceResources(device);\n\t\tconst shaderKey = `gate_2d_${mode}_${invert}`;\n\t\tlet pipeline = dr.pipelineCache.get(shaderKey);\n\t\tif (!pipeline) {\n\t\t\tconst shaderModule = device.createShaderModule({\n\t\t\t\tlabel: `signal_gate_${nodeId}.wgsl`,\n\t\t\t\tcode: `\nstruct VSOut {\n @builtin(position) pos : vec4<f32>,\n @location(0) uv : vec2<f32>,\n};\n\nstruct GateUniforms {\n threshold : f32,\n mode : u32,\n invert : f32,\n holdFrames : u32,\n dx : f32,\n pad0 : f32,\n pad1 : f32,\n pad2 : f32,\n};\n\n@group(0) @binding(0) var<uniform> u : GateUniforms;\n@group(0) @binding(1) var texIn : texture_2d<f32>;\n@group(0) @binding(2) var samp : sampler;\n\n@vertex fn vs(@builtin(vertex_index) vi: u32) -> VSOut {\n var pos = array<vec2<f32>, 4>(\n vec2<f32>(-1.0, 1.0),\n vec2<f32>( 1.0, 1.0),\n vec2<f32>(-1.0, -1.0),\n vec2<f32>( 1.0, -1.0)\n );\n var uv = array<vec2<f32>, 4>(\n vec2<f32>(0.0, 0.0),\n vec2<f32>(1.0, 0.0),\n vec2<f32>(0.0, 1.0),\n vec2<f32>(1.0, 1.0)\n );\n return VSOut(vec4<f32>(pos[vi], 0.0, 1.0), uv[vi]);\n}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n var high: f32 = 0.0f;\n\n if (u.mode == 0u) {\n let a = textureSampleLevel(texIn, samp, in.uv, 0.0).r;\n high = select(0.0f, 1.0f, a >= u.threshold);\n } else if (u.mode == 1u) {\n let steps = min(u.holdFrames, 32u);\n for (var i = 0u; i < steps; i = i + 1u) {\n let uv_cur = in.uv.x - f32(i) * u.dx;\n if (uv_cur >= 0.0f) {\n let cur = textureSampleLevel(texIn, samp, vec2<f32>(uv_cur, in.uv.y), 0.0).r;\n let prev = textureSampleLevel(texIn, samp, vec2<f32>(max(0.0f, uv_cur - u.dx), in.uv.y), 0.0).r;\n if (cur >= u.threshold && prev < u.threshold) {\n high = 1.0f;\n break;\n }\n }\n }\n } else {\n var count = 0u;\n let max_scan = 128u;\n for (var i = 0u; i < max_scan; i = i + 1u) {\n let uv_cur = in.uv.x - f32(i) * u.dx;\n if (uv_cur < 0.0f) { break; }\n let cur = textureSampleLevel(texIn, samp, vec2<f32>(uv_cur, in.uv.y), 0.0).r;\n let prev = textureSampleLevel(texIn, samp, vec2<f32>(max(0.0f, uv_cur - u.dx), in.uv.y), 0.0).r;\n if (cur >= u.threshold && prev < u.threshold) {\n count = count + 1u;\n }\n }\n high = select(0.0f, 1.0f, (count % 2u) == 1u);\n }\n\n if (u.invert > 0.5f) {\n high = 1.0f - high;\n }\n return vec4<f32>(high, high, high, 1.0f);\n}\n`\n\t\t\t});\n\t\t\tpipeline = device.createRenderPipeline({\n\t\t\t\tlabel: `SignalGatePipeline_${nodeId}`,\n\t\t\t\tlayout: \"auto\",\n\t\t\t\tvertex: {\n\t\t\t\t\tmodule: shaderModule,\n\t\t\t\t\tentryPoint: \"vs\"\n\t\t\t\t},\n\t\t\t\tfragment: {\n\t\t\t\t\tmodule: shaderModule,\n\t\t\t\t\tentryPoint: \"fs\",\n\t\t\t\t\ttargets: [{ format: \"rgba16float\" }]\n\t\t\t\t},\n\t\t\t\tprimitive: { topology: \"triangle-strip\" }\n\t\t\t});\n\t\t\tdr.pipelineCache.set(shaderKey, pipeline);\n\t\t}\n\t\tconst uData = /* @__PURE__ */ new ArrayBuffer(256);\n\t\tconst fView = new Float32Array(uData);\n\t\tconst uView = new Uint32Array(uData);\n\t\tfView[0] = threshold;\n\t\tuView[1] = mode === \"trigger\" ? 1 : mode === \"toggle\" ? 2 : 0;\n\t\tfView[2] = invert ? 1 : 0;\n\t\tuView[3] = holdFrames;\n\t\tfView[4] = 1 / Math.max(1, width);\n\t\tif (!res.uniformBuffer || res.uniformBuffer.size < 256) {\n\t\t\tres.uniformBuffer = device.createBuffer({\n\t\t\t\tsize: 256,\n\t\t\t\tusage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,\n\t\t\t\tlabel: `signal_gate_uniform_${nodeId}`\n\t\t\t});\n\t\t\tres.bindGroup = void 0;\n\t\t}\n\t\tdevice.queue.writeBuffer(res.uniformBuffer, 0, uData);\n\t\tconst bindGroup = device.createBindGroup({\n\t\t\tlayout: pipeline.getBindGroupLayout(0),\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: { buffer: res.uniformBuffer }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: viewIn\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: sampler\n\t\t\t\t}\n\t\t\t]\n\t\t});\n\t\tconst pass = encoder.beginRenderPass({\n\t\t\tlabel: `signal_gate_pass_${nodeId}`,\n\t\t\tcolorAttachments: [{\n\t\t\t\tview: res.textureView,\n\t\t\t\tloadOp: \"clear\",\n\t\t\t\tstoreOp: \"store\",\n\t\t\t\tclearValue: {\n\t\t\t\t\tr: 0,\n\t\t\t\t\tg: 0,\n\t\t\t\t\tb: 0,\n\t\t\t\t\ta: 0\n\t\t\t\t}\n\t\t\t}]\n\t\t});\n\t\tpass.setPipeline(pipeline);\n\t\tpass.setBindGroup(0, bindGroup);\n\t\tpass.draw(4);\n\t\tpass.end();\n\t\tthis.setStats(nodeId, {\n\t\t\tmin: 0,\n\t\t\tmax: 1\n\t\t});\n\t}\n\tdispatch1DGateSignal(device, encoder, res, bufIn, sd, _elapsedTime, _duration, numSamples, sampleRate, _frame, fps) {\n\t\tconst dr = this.getDeviceResources(device);\n\t\tconst cfg = sd.signalConfig;\n\t\tconst threshold = Number(sd.threshold ?? cfg?.threshold ?? .5);\n\t\tconst mode = sd.mode ?? cfg?.mode ?? \"gate\";\n\t\tconst invert = Boolean(sd.invert ?? cfg?.invert ?? false);\n\t\tconst holdFrames = Math.max(1, Number(sd.holdFrames ?? cfg?.holdFrames ?? 4));\n\t\tconst debounceMs = Number(sd.debounceMs ?? cfg?.debounceMs ?? 100);\n\t\tconst debounceSamples = Math.max(1, Math.round(debounceMs / 1e3 * sampleRate));\n\t\tconst effectiveFps = fps ?? 24;\n\t\tconst holdSamples = Math.max(1, Math.round(holdFrames / effectiveFps * sampleRate));\n\t\tconst shaderKey = `1d_gate_${mode}_${threshold}_${invert}`;\n\t\tlet pipeline = dr.pipelineCache.get(shaderKey);\n\t\tif (!pipeline) {\n\t\t\tconst shaderModule = device.createShaderModule({\n\t\t\t\tlabel: `signal_1d_gate.wgsl`,\n\t\t\t\tcode: `\nstruct Gate1DUniforms {\n threshold : f32,\n mode : u32,\n invert : f32,\n holdSamples : u32,\n debounceSamples : u32,\n numSamples : u32,\n pad0 : f32,\n pad1 : f32,\n};\n\n@group(0) @binding(0) var<uniform> u : Gate1DUniforms;\n@group(0) @binding(1) var<storage, read> bufIn : array<f32>;\n@group(0) @binding(2) var<storage, read_write> outSignal : array<f32>;\n\n@compute @workgroup_size(64)\nfn main(@builtin(global_invocation_id) gid : vec3<u32>) {\n let idx = gid.x;\n if (idx >= u.numSamples) { return; }\n\n var high: f32 = 0.0f;\n if (u.mode == 0u) {\n let cur = bufIn[idx];\n high = select(0.0f, 1.0f, cur >= u.threshold);\n } else if (u.mode == 1u) {\n let max_scan = min(idx, u.holdSamples);\n for (var i = 0u; i <= max_scan; i = i + 1u) {\n let cur_idx = idx - i;\n let cur = bufIn[cur_idx];\n var prev = 0.0f;\n if (cur_idx > 0u) {\n prev = bufIn[cur_idx - 1u];\n }\n if (cur >= u.threshold && prev < u.threshold) {\n high = 1.0f;\n break;\n }\n }\n } else {\n var count = 0u;\n var last_trigger = 0u;\n var has_triggered = false;\n for (var i = 0u; i <= idx; i = i + 1u) {\n let cur = bufIn[i];\n var prev = 0.0f;\n if (i > 0u) {\n prev = bufIn[i - 1u];\n }\n if (cur >= u.threshold && prev < u.threshold) {\n if (!has_triggered || (i - last_trigger) >= u.debounceSamples) {\n count = count + 1u;\n last_trigger = i;\n has_triggered = true;\n }\n }\n }\n high = select(0.0f, 1.0f, (count % 2u) == 1u);\n }\n\n if (u.invert > 0.5f) {\n high = 1.0f - high;\n }\n outSignal[idx] = high;\n}\n`\n\t\t\t});\n\t\t\tpipeline = device.createComputePipeline({\n\t\t\t\tlabel: `Signal1DGatePipeline_${mode}`,\n\t\t\t\tlayout: \"auto\",\n\t\t\t\tcompute: {\n\t\t\t\t\tmodule: shaderModule,\n\t\t\t\t\tentryPoint: \"main\"\n\t\t\t\t}\n\t\t\t});\n\t\t\tdr.pipelineCache.set(shaderKey, pipeline);\n\t\t}\n\t\tconst uData = /* @__PURE__ */ new ArrayBuffer(256);\n\t\tconst fView = new Float32Array(uData);\n\t\tconst uView = new Uint32Array(uData);\n\t\tfView[0] = threshold;\n\t\tuView[1] = mode === \"trigger\" ? 1 : mode === \"toggle\" ? 2 : 0;\n\t\tfView[2] = invert ? 1 : 0;\n\t\tuView[3] = holdSamples;\n\t\tuView[4] = debounceSamples;\n\t\tuView[5] = numSamples;\n\t\tconst uniformBuffer = device.createBuffer({\n\t\t\tsize: 256,\n\t\t\tusage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,\n\t\t\tlabel: \"gate_1d_uniform\"\n\t\t});\n\t\tdevice.queue.writeBuffer(uniformBuffer, 0, uData);\n\t\tconst bindGroup = device.createBindGroup({\n\t\t\tlayout: pipeline.getBindGroupLayout(0),\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: { buffer: uniformBuffer }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: { buffer: bufIn }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: { buffer: res.buffer }\n\t\t\t\t}\n\t\t\t]\n\t\t});\n\t\tconst pass = encoder.beginComputePass({ label: \"gate_1d_compute_pass\" });\n\t\tpass.setPipeline(pipeline);\n\t\tpass.setBindGroup(0, bindGroup);\n\t\tpass.dispatchWorkgroups(Math.ceil(numSamples / 64));\n\t\tpass.end();\n\t}\n};\nfunction buildSignalMathExpression(operation, customWGSL) {\n\tswitch (operation) {\n\t\tcase \"remap\": return {\n\t\t\tevalExpr: \"mix(u.outMin, u.outMax, clamp((a - u.inMin) / max(1e-5, u.inMax - u.inMin), 0.0, 1.0))\",\n\t\t\textraFn: \"\"\n\t\t};\n\t\tcase \"normalize\": return {\n\t\t\tevalExpr: \"clamp((a - u.a_min) / max(1e-5, u.a_max - u.a_min), 0.0, 1.0)\",\n\t\t\textraFn: \"\"\n\t\t};\n\t\tcase \"add\": return {\n\t\t\tevalExpr: \"a + b\",\n\t\t\textraFn: \"\"\n\t\t};\n\t\tcase \"subtract\": return {\n\t\t\tevalExpr: \"a - b\",\n\t\t\textraFn: \"\"\n\t\t};\n\t\tcase \"multiply\": return {\n\t\t\tevalExpr: \"a * b\",\n\t\t\textraFn: \"\"\n\t\t};\n\t\tcase \"divide\": return {\n\t\t\tevalExpr: \"a / select(b, 1e-5, abs(b) < 1e-5)\",\n\t\t\textraFn: \"\"\n\t\t};\n\t\tcase \"invert\": return {\n\t\t\tevalExpr: \"1.0 - a\",\n\t\t\textraFn: \"\"\n\t\t};\n\t\tcase \"clamp\": return {\n\t\t\tevalExpr: \"clamp(a, u.clampMin, u.clampMax)\",\n\t\t\textraFn: \"\"\n\t\t};\n\t\tcase \"power\": return {\n\t\t\tevalExpr: \"pow(max(0.0, a), u.exponent)\",\n\t\t\textraFn: \"\"\n\t\t};\n\t\tcase \"smoothstep\": return {\n\t\t\tevalExpr: \"smoothstep(u.edge0, u.edge1, a)\",\n\t\t\textraFn: \"\"\n\t\t};\n\t\tcase \"custom\": return {\n\t\t\textraFn: `\\nfn user_signal_calc(a: f32, b: f32, a_min: f32, a_max: f32, t: f32, t_norm: f32, frame: u32) -> f32 {\\n${customWGSL}\\n}\\n`,\n\t\t\tevalExpr: \"user_signal_calc(a, b, a_min, a_max, t, t_norm, frame)\"\n\t\t};\n\t\tdefault: return {\n\t\t\tevalExpr: \"a\",\n\t\t\textraFn: \"\"\n\t\t};\n\t}\n}\nfunction resolveSignalBValue(sd) {\n\tif (typeof sd.signalB === \"number\" && !Number.isNaN(sd.signalB)) return sd.signalB;\n\tif (sd.signalB && typeof sd.signalB === \"object\" && typeof sd.signalB.value === \"number\" && !Number.isNaN(sd.signalB.value)) return sd.signalB.value;\n\tif (typeof sd.bValue === \"number\" && !Number.isNaN(sd.bValue)) return sd.bValue;\n\tconst cfg = sd.signalConfig;\n\tif (typeof cfg?.bValue === \"number\" && !Number.isNaN(cfg.bValue)) return cfg.bValue;\n\treturn 1;\n}\nfunction computeSignalMathStats(operation, aMin, aMax, sd, hasSignalB, statsB) {\n\tconst cfg = sd.signalConfig;\n\tswitch (operation) {\n\t\tcase \"remap\": {\n\t\t\tconst outMin = Number(sd.outMin ?? cfg?.outMin ?? 0);\n\t\t\tconst outMax = Number(sd.outMax ?? cfg?.outMax ?? 1);\n\t\t\treturn {\n\t\t\t\tmin: Math.min(outMin, outMax),\n\t\t\t\tmax: Math.max(outMin, outMax)\n\t\t\t};\n\t\t}\n\t\tcase \"normalize\": return {\n\t\t\tmin: 0,\n\t\t\tmax: 1\n\t\t};\n\t\tcase \"invert\": return {\n\t\t\tmin: 1 - aMax,\n\t\t\tmax: 1 - aMin\n\t\t};\n\t\tcase \"clamp\": return {\n\t\t\tmin: Number(sd.clampMin ?? cfg?.clampMin ?? 0),\n\t\t\tmax: Number(sd.clampMax ?? cfg?.clampMax ?? 1)\n\t\t};\n\t\tcase \"power\": {\n\t\t\tconst exp = Number(sd.exponent ?? cfg?.exponent ?? 2);\n\t\t\treturn {\n\t\t\t\tmin: Math.max(0, aMin) ** exp,\n\t\t\t\tmax: Math.max(0, aMax) ** exp\n\t\t\t};\n\t\t}\n\t\tcase \"add\": {\n\t\t\tif (hasSignalB && statsB) return {\n\t\t\t\tmin: aMin + statsB.min,\n\t\t\t\tmax: aMax + statsB.max\n\t\t\t};\n\t\t\tconst b = hasSignalB ? 0 : resolveSignalBValue(sd);\n\t\t\treturn {\n\t\t\t\tmin: aMin + b,\n\t\t\t\tmax: aMax + b\n\t\t\t};\n\t\t}\n\t\tcase \"subtract\": {\n\t\t\tif (hasSignalB && statsB) return {\n\t\t\t\tmin: aMin - statsB.max,\n\t\t\t\tmax: aMax - statsB.min\n\t\t\t};\n\t\t\tconst b = hasSignalB ? 0 : resolveSignalBValue(sd);\n\t\t\treturn {\n\t\t\t\tmin: aMin - b,\n\t\t\t\tmax: aMax - b\n\t\t\t};\n\t\t}\n\t\tcase \"multiply\": {\n\t\t\tif (hasSignalB && statsB) {\n\t\t\t\tconst vals = [\n\t\t\t\t\taMin * statsB.min,\n\t\t\t\t\taMin * statsB.max,\n\t\t\t\t\taMax * statsB.min,\n\t\t\t\t\taMax * statsB.max\n\t\t\t\t];\n\t\t\t\treturn {\n\t\t\t\t\tmin: Math.min(...vals),\n\t\t\t\t\tmax: Math.max(...vals)\n\t\t\t\t};\n\t\t\t}\n\t\t\tconst b = hasSignalB ? 1 : resolveSignalBValue(sd);\n\t\t\treturn {\n\t\t\t\tmin: Math.min(aMin * b, aMax * b),\n\t\t\t\tmax: Math.max(aMin * b, aMax * b)\n\t\t\t};\n\t\t}\n\t\tcase \"divide\": {\n\t\t\tif (hasSignalB && statsB) {\n\t\t\t\tconst safeMin = Math.abs(statsB.min) < 1e-5 ? 1e-5 : statsB.min;\n\t\t\t\tconst safeMax = Math.abs(statsB.max) < 1e-5 ? 1e-5 : statsB.max;\n\t\t\t\tconst vals = [\n\t\t\t\t\taMin / safeMin,\n\t\t\t\t\taMin / safeMax,\n\t\t\t\t\taMax / safeMin,\n\t\t\t\t\taMax / safeMax\n\t\t\t\t];\n\t\t\t\treturn {\n\t\t\t\t\tmin: Math.min(...vals),\n\t\t\t\t\tmax: Math.max(...vals)\n\t\t\t\t};\n\t\t\t}\n\t\t\tconst b = hasSignalB ? 1 : resolveSignalBValue(sd);\n\t\t\tconst safeB = Math.abs(b) < 1e-5 ? 1e-5 : b;\n\t\t\treturn {\n\t\t\t\tmin: Math.min(aMin / safeB, aMax / safeB),\n\t\t\t\tmax: Math.max(aMin / safeB, aMax / safeB)\n\t\t\t};\n\t\t}\n\t\tdefault: return {\n\t\t\tmin: 0,\n\t\t\tmax: 1\n\t\t};\n\t}\n}\nconst signalRegistry = new SignalRegistry();\n\n//#endregion\n//#region src/text-animations/path.ts\n/**\n* Evaluates a point on a cubic Bezier curve at parameter t in [0, 1].\n*/\nfunction evaluateCubicBezier(segment, t) {\n\tconst u = 1 - t;\n\tconst tt = t * t;\n\tconst uu = u * u;\n\tconst uuu = uu * u;\n\tconst ttt = tt * t;\n\treturn {\n\t\tx: uuu * segment.p0.x + 3 * uu * t * segment.p1.x + 3 * u * tt * segment.p2.x + ttt * segment.p3.x,\n\t\ty: uuu * segment.p0.y + 3 * uu * t * segment.p1.y + 3 * u * tt * segment.p2.y + ttt * segment.p3.y\n\t};\n}\n/**\n* Evaluates the first derivative (tangent velocity vector) of a cubic Bezier curve at parameter t.\n*/\nfunction evaluateCubicBezierDerivative(segment, t) {\n\tconst u = 1 - t;\n\treturn {\n\t\tx: 3 * u * u * (segment.p1.x - segment.p0.x) + 6 * u * t * (segment.p2.x - segment.p1.x) + 3 * t * t * (segment.p3.x - segment.p2.x),\n\t\ty: 3 * u * u * (segment.p1.y - segment.p0.y) + 6 * u * t * (segment.p2.y - segment.p1.y) + 3 * t * t * (segment.p3.y - segment.p2.y)\n\t};\n}\n/**\n* Generates an arc-length parameterization lookup table (LUT) for a cubic Bezier segment.\n* Ensures glyphs travel with uniform speed and do not bunch up on tight curve bends.\n*/\nfunction generateArcLengthLUT(segment, samples = 100) {\n\tconst lut = [{\n\t\tdistance: 0,\n\t\tt: 0\n\t}];\n\tlet accumulatedDist = 0;\n\tlet prevPoint = segment.p0;\n\tfor (let i = 1; i <= samples; i++) {\n\t\tconst t = i / samples;\n\t\tconst currentPoint = evaluateCubicBezier(segment, t);\n\t\tconst dx = currentPoint.x - prevPoint.x;\n\t\tconst dy = currentPoint.y - prevPoint.y;\n\t\taccumulatedDist += Math.hypot(dx, dy);\n\t\tlut.push({\n\t\t\tdistance: accumulatedDist,\n\t\t\tt\n\t\t});\n\t\tprevPoint = currentPoint;\n\t}\n\treturn {\n\t\tlut,\n\t\ttotalLength: accumulatedDist\n\t};\n}\n/**\n* Maps a distance along the curve (in pixels) to normalized curve parameter t via binary search on the LUT.\n*/\nfunction distanceToCurveParameter(lut, distance, totalLength) {\n\tif (distance <= 0) return 0;\n\tif (distance >= totalLength) return 1;\n\tlet low = 0;\n\tlet high = lut.length - 1;\n\twhile (low <= high) {\n\t\tconst mid = low + high >> 1;\n\t\tif (lut[mid].distance < distance) low = mid + 1;\n\t\telse high = mid - 1;\n\t}\n\tconst index = Math.max(1, Math.min(low, lut.length - 1));\n\tconst prev = lut[index - 1];\n\tconst curr = lut[index];\n\tconst segmentDist = curr.distance - prev.distance;\n\tif (segmentDist <= 1e-6) return prev.t;\n\tconst ratio = (distance - prev.distance) / segmentDist;\n\treturn prev.t + ratio * (curr.t - prev.t);\n}\n/**\n* Samples position and baseline tangent orientation angle along a curve at distance `dist`.\n*/\nfunction sampleCurveGeometry(segment, lut, totalLength, distance) {\n\tconst t = distanceToCurveParameter(lut, distance, totalLength);\n\tconst pos = evaluateCubicBezier(segment, t);\n\tconst deriv = evaluateCubicBezierDerivative(segment, t);\n\tconst length = Math.hypot(deriv.x, deriv.y);\n\tconst nx = length > 1e-6 ? -deriv.y / length : 0;\n\tconst ny = length > 1e-6 ? deriv.x / length : 1;\n\treturn {\n\t\tposition: pos,\n\t\ttangentAngleDeg: Math.atan2(deriv.y, deriv.x) * 180 / Math.PI,\n\t\tnormal: {\n\t\t\tx: nx,\n\t\t\ty: ny\n\t\t}\n\t};\n}\n/**\n* Builds a cumulative Arc-Length LUT across a chain of Cubic Bezier segments.\n*/\nfunction buildPathLUT(segments, samplesPerSegment = 50) {\n\tif (segments.length === 0) return {\n\t\ttotalLength: 0,\n\t\tentries: [{\n\t\t\tdistance: 0,\n\t\t\tsegmentIndex: 0,\n\t\t\tt: 0\n\t\t}],\n\t\tsegments: []\n\t};\n\tconst segLuts = [];\n\tconst entries = [];\n\tlet accumulatedDist = 0;\n\tfor (let segIdx = 0; segIdx < segments.length; segIdx++) {\n\t\tconst seg = segments[segIdx];\n\t\tconst { lut: segLut, totalLength: segLength } = generateArcLengthLUT(seg, samplesPerSegment);\n\t\tsegLuts.push({\n\t\t\tsegmentIndex: segIdx,\n\t\t\tstartDistance: accumulatedDist,\n\t\t\tlength: segLength,\n\t\t\tlut: segLut\n\t\t});\n\t\tfor (let i = 0; i < segLut.length; i++) entries.push({\n\t\t\tdistance: accumulatedDist + segLut[i].distance,\n\t\t\tsegmentIndex: segIdx,\n\t\t\tt: segLut[i].t\n\t\t});\n\t\taccumulatedDist += segLength;\n\t}\n\treturn {\n\t\ttotalLength: accumulatedDist,\n\t\tentries,\n\t\tsegments: segLuts\n\t};\n}\n/**\n* Samples position, tangent angle, and normal across a chain of Cubic Bezier segments.\n*/\nfunction samplePathChainGeometry(segments, chainLUT, distance) {\n\tif (segments.length === 0) return {\n\t\tposition: {\n\t\t\tx: 0,\n\t\t\ty: 0\n\t\t},\n\t\ttangentAngleDeg: 0,\n\t\tnormal: {\n\t\t\tx: 0,\n\t\t\ty: 1\n\t\t}\n\t};\n\tconst totalLength = chainLUT.totalLength;\n\tif (distance <= 0) {\n\t\tconst seg = segments[0];\n\t\tconst deriv$1 = evaluateCubicBezierDerivative(seg, 0);\n\t\tconst length$1 = Math.hypot(deriv$1.x, deriv$1.y);\n\t\tconst ux = length$1 > 1e-6 ? deriv$1.x / length$1 : 1;\n\t\tconst uy = length$1 > 1e-6 ? deriv$1.y / length$1 : 0;\n\t\tconst pos$1 = {\n\t\t\tx: seg.p0.x + ux * distance,\n\t\t\ty: seg.p0.y + uy * distance\n\t\t};\n\t\tconst nx$1 = length$1 > 1e-6 ? -deriv$1.y / length$1 : 0;\n\t\tconst ny$1 = length$1 > 1e-6 ? deriv$1.x / length$1 : 1;\n\t\treturn {\n\t\t\tposition: pos$1,\n\t\t\ttangentAngleDeg: Math.atan2(deriv$1.y, deriv$1.x) * 180 / Math.PI,\n\t\t\tnormal: {\n\t\t\t\tx: nx$1,\n\t\t\t\ty: ny$1\n\t\t\t}\n\t\t};\n\t}\n\tif (distance >= totalLength) {\n\t\tconst lastSeg = segments[segments.length - 1];\n\t\tconst deriv$1 = evaluateCubicBezierDerivative(lastSeg, 1);\n\t\tconst length$1 = Math.hypot(deriv$1.x, deriv$1.y);\n\t\tconst ux = length$1 > 1e-6 ? deriv$1.x / length$1 : 1;\n\t\tconst uy = length$1 > 1e-6 ? deriv$1.y / length$1 : 0;\n\t\tconst overflow = distance - totalLength;\n\t\tconst pos$1 = {\n\t\t\tx: lastSeg.p3.x + ux * overflow,\n\t\t\ty: lastSeg.p3.y + uy * overflow\n\t\t};\n\t\tconst nx$1 = length$1 > 1e-6 ? -deriv$1.y / length$1 : 0;\n\t\tconst ny$1 = length$1 > 1e-6 ? deriv$1.x / length$1 : 1;\n\t\treturn {\n\t\t\tposition: pos$1,\n\t\t\ttangentAngleDeg: Math.atan2(deriv$1.y, deriv$1.x) * 180 / Math.PI,\n\t\t\tnormal: {\n\t\t\t\tx: nx$1,\n\t\t\t\ty: ny$1\n\t\t\t}\n\t\t};\n\t}\n\tlet segIdx = 0;\n\tlet t = 0;\n\tif (chainLUT.segments && chainLUT.segments.length > 0) {\n\t\tlet low = 0;\n\t\tlet high = chainLUT.segments.length - 1;\n\t\twhile (low <= high) {\n\t\t\tconst mid = low + high >> 1;\n\t\t\tconst segLUT$1 = chainLUT.segments[mid];\n\t\t\tif (distance < segLUT$1.startDistance) high = mid - 1;\n\t\t\telse if (distance > segLUT$1.startDistance + segLUT$1.length) low = mid + 1;\n\t\t\telse {\n\t\t\t\tlow = mid;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tconst sIdx = Math.max(0, Math.min(low, chainLUT.segments.length - 1));\n\t\tconst segLUT = chainLUT.segments[sIdx];\n\t\tsegIdx = segLUT.segmentIndex;\n\t\tconst localDist = distance - segLUT.startDistance;\n\t\tt = distanceToCurveParameter(segLUT.lut, localDist, segLUT.length);\n\t} else {\n\t\tlet low = 0;\n\t\tlet high = chainLUT.entries.length - 1;\n\t\twhile (low <= high) {\n\t\t\tconst mid = low + high >> 1;\n\t\t\tif (chainLUT.entries[mid].distance < distance) low = mid + 1;\n\t\t\telse high = mid - 1;\n\t\t}\n\t\tconst index = Math.max(1, Math.min(low, chainLUT.entries.length - 1));\n\t\tconst prev = chainLUT.entries[index - 1];\n\t\tconst curr = chainLUT.entries[index];\n\t\tconst segmentDist = curr.distance - prev.distance;\n\t\tconst ratio = segmentDist > 1e-6 ? (distance - prev.distance) / segmentDist : 0;\n\t\tsegIdx = curr.segmentIndex;\n\t\tt = prev.segmentIndex === curr.segmentIndex ? prev.t + ratio * (curr.t - prev.t) : curr.t;\n\t}\n\tconst segment = segments[segIdx] ?? segments[0];\n\tconst pos = evaluateCubicBezier(segment, t);\n\tconst deriv = evaluateCubicBezierDerivative(segment, t);\n\tconst length = Math.hypot(deriv.x, deriv.y);\n\tconst nx = length > 1e-6 ? -deriv.y / length : 0;\n\tconst ny = length > 1e-6 ? deriv.x / length : 1;\n\treturn {\n\t\tposition: pos,\n\t\ttangentAngleDeg: Math.atan2(deriv.y, deriv.x) * 180 / Math.PI,\n\t\tnormal: {\n\t\t\tx: nx,\n\t\t\ty: ny\n\t\t}\n\t};\n}\n/**\n* Converts an ellipse arc into cubic Bezier segments (up to 90 degrees per segment).\n*/\nfunction ellipseToCubicBeziers(cx, cy, rx, ry, startAngleDeg = 0, endAngleDeg = 360) {\n\tconst startRad = startAngleDeg * Math.PI / 180;\n\tconst totalSweep = endAngleDeg * Math.PI / 180 - startRad;\n\tconst numSegments = Math.max(1, Math.ceil(Math.abs(totalSweep) / (Math.PI / 2)));\n\tconst sweepStep = totalSweep / numSegments;\n\tconst segments = [];\n\tfor (let i = 0; i < numSegments; i++) {\n\t\tconst a0 = startRad + i * sweepStep;\n\t\tconst a1 = a0 + sweepStep;\n\t\tconst halfSweep = sweepStep / 2;\n\t\tconst k = 4 / 3 * Math.tan(halfSweep / 2);\n\t\tconst cos0 = Math.cos(a0);\n\t\tconst sin0 = Math.sin(a0);\n\t\tconst cos1 = Math.cos(a1);\n\t\tconst sin1 = Math.sin(a1);\n\t\tconst p0 = {\n\t\t\tx: cx + rx * cos0,\n\t\t\ty: cy + ry * sin0\n\t\t};\n\t\tconst p1 = {\n\t\t\tx: p0.x - k * rx * sin0,\n\t\t\ty: p0.y + k * ry * cos0\n\t\t};\n\t\tconst p3 = {\n\t\t\tx: cx + rx * cos1,\n\t\t\ty: cy + ry * sin1\n\t\t};\n\t\tconst p2 = {\n\t\t\tx: p3.x + k * rx * sin1,\n\t\t\ty: p3.y - k * ry * cos1\n\t\t};\n\t\tsegments.push({\n\t\t\tp0,\n\t\t\tp1,\n\t\t\tp2,\n\t\t\tp3\n\t\t});\n\t}\n\treturn segments;\n}\n/**\n* Converts a sinusoidal wave into cubic Bezier segments per half-cycle.\n*/\nfunction waveToCubicBeziers(startX, startY, length, amplitude, frequency, phaseDeg = 0) {\n\tconst phaseRad = phaseDeg * Math.PI / 180;\n\tconst totalCycles = frequency < .1 && frequency * length >= .25 ? frequency * length : Math.max(.5, frequency);\n\tconst halfCycles = Math.max(1, Math.round(totalCycles * 2));\n\tconst dx = length / halfCycles;\n\tconst segments = [];\n\tfor (let i = 0; i < halfCycles; i++) {\n\t\tconst t0 = i / halfCycles * (2 * Math.PI * totalCycles) + phaseRad;\n\t\tconst t1 = (i + 1) / halfCycles * (2 * Math.PI * totalCycles) + phaseRad;\n\t\tconst x0 = startX + i * dx;\n\t\tconst x3 = startX + (i + 1) * dx;\n\t\tconst y0 = startY + amplitude * Math.sin(t0);\n\t\tconst y3 = startY + amplitude * Math.sin(t1);\n\t\tconst slope0 = amplitude * Math.cos(t0) * (Math.PI / 3);\n\t\tconst slope1 = amplitude * Math.cos(t1) * (Math.PI / 3);\n\t\tconst p0 = {\n\t\t\tx: x0,\n\t\t\ty: y0\n\t\t};\n\t\tconst p1 = {\n\t\t\tx: x0 + dx / 3,\n\t\t\ty: y0 + slope0\n\t\t};\n\t\tconst p2 = {\n\t\t\tx: x3 - dx / 3,\n\t\t\ty: y3 - slope1\n\t\t};\n\t\tconst p3 = {\n\t\t\tx: x3,\n\t\t\ty: y3\n\t\t};\n\t\tsegments.push({\n\t\t\tp0,\n\t\t\tp1,\n\t\t\tp2,\n\t\t\tp3\n\t\t});\n\t}\n\treturn segments;\n}\n/**\n* An SVG elliptical arc (endpoint form, SVG 1.1 F.6.5) as cubic Bezier\n* segments of at most 90° each.\n*/\nfunction svgArcToCubicBeziers(x1, y1, rxIn, ryIn, rotationDeg, largeArc, sweep, x2, y2) {\n\tif (x1 === x2 && y1 === y2) return [];\n\tlet rx = Math.abs(rxIn);\n\tlet ry = Math.abs(ryIn);\n\tif (rx === 0 || ry === 0) return [{\n\t\tp0: {\n\t\t\tx: x1,\n\t\t\ty: y1\n\t\t},\n\t\tp1: {\n\t\t\tx: x1 + (x2 - x1) / 3,\n\t\t\ty: y1 + (y2 - y1) / 3\n\t\t},\n\t\tp2: {\n\t\t\tx: x1 + 2 * (x2 - x1) / 3,\n\t\t\ty: y1 + 2 * (y2 - y1) / 3\n\t\t},\n\t\tp3: {\n\t\t\tx: x2,\n\t\t\ty: y2\n\t\t}\n\t}];\n\tconst phi = rotationDeg * Math.PI / 180;\n\tconst cosPhi = Math.cos(phi);\n\tconst sinPhi = Math.sin(phi);\n\tconst dx = (x1 - x2) / 2;\n\tconst dy = (y1 - y2) / 2;\n\tconst x1p = cosPhi * dx + sinPhi * dy;\n\tconst y1p = -sinPhi * dx + cosPhi * dy;\n\tconst lambda = x1p * x1p / (rx * rx) + y1p * y1p / (ry * ry);\n\tif (lambda > 1) {\n\t\trx *= Math.sqrt(lambda);\n\t\try *= Math.sqrt(lambda);\n\t}\n\tconst num = rx * rx * ry * ry - rx * rx * y1p * y1p - ry * ry * x1p * x1p;\n\tconst den = rx * rx * y1p * y1p + ry * ry * x1p * x1p;\n\tconst coef = (largeArc !== sweep ? 1 : -1) * Math.sqrt(Math.max(0, num / den));\n\tconst cxp = coef * rx * y1p / ry;\n\tconst cyp = -coef * ry * x1p / rx;\n\tconst cx = cosPhi * cxp - sinPhi * cyp + (x1 + x2) / 2;\n\tconst cy = sinPhi * cxp + cosPhi * cyp + (y1 + y2) / 2;\n\tconst angle = (ux, uy, vx, vy) => Math.atan2(ux * vy - uy * vx, ux * vx + uy * vy);\n\tconst theta1 = angle(1, 0, (x1p - cxp) / rx, (y1p - cyp) / ry);\n\tlet delta = angle((x1p - cxp) / rx, (y1p - cyp) / ry, (-x1p - cxp) / rx, (-y1p - cyp) / ry);\n\tif (!sweep && delta > 0) delta -= 2 * Math.PI;\n\tif (sweep && delta < 0) delta += 2 * Math.PI;\n\tconst n = Math.max(1, Math.ceil(Math.abs(delta) / (Math.PI / 2)));\n\tconst step = delta / n;\n\tconst k = 4 / 3 * Math.tan(step / 4);\n\tconst point = (a) => ({\n\t\tx: cx + rx * Math.cos(a) * cosPhi - ry * Math.sin(a) * sinPhi,\n\t\ty: cy + rx * Math.cos(a) * sinPhi + ry * Math.sin(a) * cosPhi\n\t});\n\tconst tangent = (a) => ({\n\t\tx: -rx * Math.sin(a) * cosPhi - ry * Math.cos(a) * sinPhi,\n\t\ty: -rx * Math.sin(a) * sinPhi + ry * Math.cos(a) * cosPhi\n\t});\n\tconst segments = [];\n\tfor (let s = 0; s < n; s++) {\n\t\tconst a0 = theta1 + s * step;\n\t\tconst a1 = a0 + step;\n\t\tconst p0 = point(a0);\n\t\tconst p3 = point(a1);\n\t\tconst t0 = tangent(a0);\n\t\tconst t1 = tangent(a1);\n\t\tsegments.push({\n\t\t\tp0,\n\t\t\tp1: {\n\t\t\t\tx: p0.x + k * t0.x,\n\t\t\t\ty: p0.y + k * t0.y\n\t\t\t},\n\t\t\tp2: {\n\t\t\t\tx: p3.x - k * t1.x,\n\t\t\t\ty: p3.y - k * t1.y\n\t\t\t},\n\t\t\tp3\n\t\t});\n\t}\n\tsegments[segments.length - 1].p3 = {\n\t\tx: x2,\n\t\ty: y2\n\t};\n\treturn segments;\n}\n/**\n* Converts SVG path data string into a chain of Cubic Bezier segments.\n*/\nfunction parseSvgPathToCubicBeziers(d) {\n\tconst segments = [];\n\tconst tokens = d.match(/[a-df-z]|[-+]?(?:\\d*\\.\\d+|\\d+)(?:[eE][-+]?\\d+)?/gi);\n\tif (!tokens || tokens.length === 0) return segments;\n\tlet currentX = 0;\n\tlet currentY = 0;\n\tlet startX = 0;\n\tlet startY = 0;\n\tlet lastControlX = 0;\n\tlet lastControlY = 0;\n\tlet lastCommand = \"\";\n\tlet i = 0;\n\tconst nextNum = () => {\n\t\tif (i >= tokens.length) return 0;\n\t\treturn Number.parseFloat(tokens[i++]);\n\t};\n\twhile (i < tokens.length) {\n\t\tconst token = tokens[i++];\n\t\tconst isCommand = /^[a-df-z]$/i.test(token);\n\t\tconst cmd = isCommand ? token : lastCommand;\n\t\tif (!isCommand) i--;\n\t\tswitch (cmd) {\n\t\t\tcase \"M\":\n\t\t\t\tcurrentX = nextNum();\n\t\t\t\tcurrentY = nextNum();\n\t\t\t\tstartX = currentX;\n\t\t\t\tstartY = currentY;\n\t\t\t\tlastCommand = \"L\";\n\t\t\t\tbreak;\n\t\t\tcase \"m\":\n\t\t\t\tcurrentX += nextNum();\n\t\t\t\tcurrentY += nextNum();\n\t\t\t\tstartX = currentX;\n\t\t\t\tstartY = currentY;\n\t\t\t\tlastCommand = \"l\";\n\t\t\t\tbreak;\n\t\t\tcase \"L\": {\n\t\t\t\tconst x = nextNum();\n\t\t\t\tconst y = nextNum();\n\t\t\t\tsegments.push({\n\t\t\t\t\tp0: {\n\t\t\t\t\t\tx: currentX,\n\t\t\t\t\t\ty: currentY\n\t\t\t\t\t},\n\t\t\t\t\tp1: {\n\t\t\t\t\t\tx: currentX + (x - currentX) / 3,\n\t\t\t\t\t\ty: currentY + (y - currentY) / 3\n\t\t\t\t\t},\n\t\t\t\t\tp2: {\n\t\t\t\t\t\tx: currentX + 2 * (x - currentX) / 3,\n\t\t\t\t\t\ty: currentY + 2 * (y - currentY) / 3\n\t\t\t\t\t},\n\t\t\t\t\tp3: {\n\t\t\t\t\t\tx,\n\t\t\t\t\t\ty\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tcurrentX = x;\n\t\t\t\tcurrentY = y;\n\t\t\t\tlastCommand = \"L\";\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"l\": {\n\t\t\t\tconst dx = nextNum();\n\t\t\t\tconst dy = nextNum();\n\t\t\t\tconst x = currentX + dx;\n\t\t\t\tconst y = currentY + dy;\n\t\t\t\tsegments.push({\n\t\t\t\t\tp0: {\n\t\t\t\t\t\tx: currentX,\n\t\t\t\t\t\ty: currentY\n\t\t\t\t\t},\n\t\t\t\t\tp1: {\n\t\t\t\t\t\tx: currentX + dx / 3,\n\t\t\t\t\t\ty: currentY + dy / 3\n\t\t\t\t\t},\n\t\t\t\t\tp2: {\n\t\t\t\t\t\tx: currentX + 2 * dx / 3,\n\t\t\t\t\t\ty: currentY + 2 * dy / 3\n\t\t\t\t\t},\n\t\t\t\t\tp3: {\n\t\t\t\t\t\tx,\n\t\t\t\t\t\ty\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tcurrentX = x;\n\t\t\t\tcurrentY = y;\n\t\t\t\tlastCommand = \"l\";\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"H\": {\n\t\t\t\tconst x = nextNum();\n\t\t\t\tsegments.push({\n\t\t\t\t\tp0: {\n\t\t\t\t\t\tx: currentX,\n\t\t\t\t\t\ty: currentY\n\t\t\t\t\t},\n\t\t\t\t\tp1: {\n\t\t\t\t\t\tx: currentX + (x - currentX) / 3,\n\t\t\t\t\t\ty: currentY\n\t\t\t\t\t},\n\t\t\t\t\tp2: {\n\t\t\t\t\t\tx: currentX + 2 * (x - currentX) / 3,\n\t\t\t\t\t\ty: currentY\n\t\t\t\t\t},\n\t\t\t\t\tp3: {\n\t\t\t\t\t\tx,\n\t\t\t\t\t\ty: currentY\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tcurrentX = x;\n\t\t\t\tlastCommand = \"H\";\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"h\": {\n\t\t\t\tconst dx = nextNum();\n\t\t\t\tconst x = currentX + dx;\n\t\t\t\tsegments.push({\n\t\t\t\t\tp0: {\n\t\t\t\t\t\tx: currentX,\n\t\t\t\t\t\ty: currentY\n\t\t\t\t\t},\n\t\t\t\t\tp1: {\n\t\t\t\t\t\tx: currentX + dx / 3,\n\t\t\t\t\t\ty: currentY\n\t\t\t\t\t},\n\t\t\t\t\tp2: {\n\t\t\t\t\t\tx: currentX + 2 * dx / 3,\n\t\t\t\t\t\ty: currentY\n\t\t\t\t\t},\n\t\t\t\t\tp3: {\n\t\t\t\t\t\tx,\n\t\t\t\t\t\ty: currentY\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tcurrentX = x;\n\t\t\t\tlastCommand = \"h\";\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"V\": {\n\t\t\t\tconst y = nextNum();\n\t\t\t\tsegments.push({\n\t\t\t\t\tp0: {\n\t\t\t\t\t\tx: currentX,\n\t\t\t\t\t\ty: currentY\n\t\t\t\t\t},\n\t\t\t\t\tp1: {\n\t\t\t\t\t\tx: currentX,\n\t\t\t\t\t\ty: currentY + (y - currentY) / 3\n\t\t\t\t\t},\n\t\t\t\t\tp2: {\n\t\t\t\t\t\tx: currentX,\n\t\t\t\t\t\ty: currentY + 2 * (y - currentY) / 3\n\t\t\t\t\t},\n\t\t\t\t\tp3: {\n\t\t\t\t\t\tx: currentX,\n\t\t\t\t\t\ty\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tcurrentY = y;\n\t\t\t\tlastCommand = \"V\";\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"v\": {\n\t\t\t\tconst dy = nextNum();\n\t\t\t\tconst y = currentY + dy;\n\t\t\t\tsegments.push({\n\t\t\t\t\tp0: {\n\t\t\t\t\t\tx: currentX,\n\t\t\t\t\t\ty: currentY\n\t\t\t\t\t},\n\t\t\t\t\tp1: {\n\t\t\t\t\t\tx: currentX,\n\t\t\t\t\t\ty: currentY + dy / 3\n\t\t\t\t\t},\n\t\t\t\t\tp2: {\n\t\t\t\t\t\tx: currentX,\n\t\t\t\t\t\ty: currentY + 2 * dy / 3\n\t\t\t\t\t},\n\t\t\t\t\tp3: {\n\t\t\t\t\t\tx: currentX,\n\t\t\t\t\t\ty\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tcurrentY = y;\n\t\t\t\tlastCommand = \"v\";\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"C\": {\n\t\t\t\tconst x1 = nextNum();\n\t\t\t\tconst y1 = nextNum();\n\t\t\t\tconst x2 = nextNum();\n\t\t\t\tconst y2 = nextNum();\n\t\t\t\tconst x = nextNum();\n\t\t\t\tconst y = nextNum();\n\t\t\t\tsegments.push({\n\t\t\t\t\tp0: {\n\t\t\t\t\t\tx: currentX,\n\t\t\t\t\t\ty: currentY\n\t\t\t\t\t},\n\t\t\t\t\tp1: {\n\t\t\t\t\t\tx: x1,\n\t\t\t\t\t\ty: y1\n\t\t\t\t\t},\n\t\t\t\t\tp2: {\n\t\t\t\t\t\tx: x2,\n\t\t\t\t\t\ty: y2\n\t\t\t\t\t},\n\t\t\t\t\tp3: {\n\t\t\t\t\t\tx,\n\t\t\t\t\t\ty\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tlastControlX = x2;\n\t\t\t\tlastControlY = y2;\n\t\t\t\tcurrentX = x;\n\t\t\t\tcurrentY = y;\n\t\t\t\tlastCommand = \"C\";\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"c\": {\n\t\t\t\tconst dx1 = nextNum();\n\t\t\t\tconst dy1 = nextNum();\n\t\t\t\tconst dx2 = nextNum();\n\t\t\t\tconst dy2 = nextNum();\n\t\t\t\tconst dx = nextNum();\n\t\t\t\tconst dy = nextNum();\n\t\t\t\tconst x1 = currentX + dx1;\n\t\t\t\tconst y1 = currentY + dy1;\n\t\t\t\tconst x2 = currentX + dx2;\n\t\t\t\tconst y2 = currentY + dy2;\n\t\t\t\tconst x = currentX + dx;\n\t\t\t\tconst y = currentY + dy;\n\t\t\t\tsegments.push({\n\t\t\t\t\tp0: {\n\t\t\t\t\t\tx: currentX,\n\t\t\t\t\t\ty: currentY\n\t\t\t\t\t},\n\t\t\t\t\tp1: {\n\t\t\t\t\t\tx: x1,\n\t\t\t\t\t\ty: y1\n\t\t\t\t\t},\n\t\t\t\t\tp2: {\n\t\t\t\t\t\tx: x2,\n\t\t\t\t\t\ty: y2\n\t\t\t\t\t},\n\t\t\t\t\tp3: {\n\t\t\t\t\t\tx,\n\t\t\t\t\t\ty\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tlastControlX = x2;\n\t\t\t\tlastControlY = y2;\n\t\t\t\tcurrentX = x;\n\t\t\t\tcurrentY = y;\n\t\t\t\tlastCommand = \"c\";\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"S\":\n\t\t\tcase \"s\": {\n\t\t\t\tconst isRel = cmd === \"s\";\n\t\t\t\tconst dx2 = nextNum();\n\t\t\t\tconst dy2 = nextNum();\n\t\t\t\tconst dx = nextNum();\n\t\t\t\tconst dy = nextNum();\n\t\t\t\tconst x2 = isRel ? currentX + dx2 : dx2;\n\t\t\t\tconst y2 = isRel ? currentY + dy2 : dy2;\n\t\t\t\tconst x = isRel ? currentX + dx : dx;\n\t\t\t\tconst y = isRel ? currentY + dy : dy;\n\t\t\t\tlet x1 = currentX;\n\t\t\t\tlet y1 = currentY;\n\t\t\t\tif (/^[cs]$/i.test(lastCommand)) {\n\t\t\t\t\tx1 = 2 * currentX - lastControlX;\n\t\t\t\t\ty1 = 2 * currentY - lastControlY;\n\t\t\t\t}\n\t\t\t\tsegments.push({\n\t\t\t\t\tp0: {\n\t\t\t\t\t\tx: currentX,\n\t\t\t\t\t\ty: currentY\n\t\t\t\t\t},\n\t\t\t\t\tp1: {\n\t\t\t\t\t\tx: x1,\n\t\t\t\t\t\ty: y1\n\t\t\t\t\t},\n\t\t\t\t\tp2: {\n\t\t\t\t\t\tx: x2,\n\t\t\t\t\t\ty: y2\n\t\t\t\t\t},\n\t\t\t\t\tp3: {\n\t\t\t\t\t\tx,\n\t\t\t\t\t\ty\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tlastControlX = x2;\n\t\t\t\tlastControlY = y2;\n\t\t\t\tcurrentX = x;\n\t\t\t\tcurrentY = y;\n\t\t\t\tlastCommand = cmd;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"Q\":\n\t\t\tcase \"q\": {\n\t\t\t\tconst isRel = cmd === \"q\";\n\t\t\t\tconst qx = nextNum();\n\t\t\t\tconst qy = nextNum();\n\t\t\t\tconst x = nextNum();\n\t\t\t\tconst y = nextNum();\n\t\t\t\tconst cx1 = isRel ? currentX + qx : qx;\n\t\t\t\tconst cy1 = isRel ? currentY + qy : qy;\n\t\t\t\tconst ex = isRel ? currentX + x : x;\n\t\t\t\tconst ey = isRel ? currentY + y : y;\n\t\t\t\tconst p1x = currentX + 2 / 3 * (cx1 - currentX);\n\t\t\t\tconst p1y = currentY + 2 / 3 * (cy1 - currentY);\n\t\t\t\tconst p2x = ex + 2 / 3 * (cx1 - ex);\n\t\t\t\tconst p2y = ey + 2 / 3 * (cy1 - ey);\n\t\t\t\tsegments.push({\n\t\t\t\t\tp0: {\n\t\t\t\t\t\tx: currentX,\n\t\t\t\t\t\ty: currentY\n\t\t\t\t\t},\n\t\t\t\t\tp1: {\n\t\t\t\t\t\tx: p1x,\n\t\t\t\t\t\ty: p1y\n\t\t\t\t\t},\n\t\t\t\t\tp2: {\n\t\t\t\t\t\tx: p2x,\n\t\t\t\t\t\ty: p2y\n\t\t\t\t\t},\n\t\t\t\t\tp3: {\n\t\t\t\t\t\tx: ex,\n\t\t\t\t\t\ty: ey\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tlastControlX = cx1;\n\t\t\t\tlastControlY = cy1;\n\t\t\t\tcurrentX = ex;\n\t\t\t\tcurrentY = ey;\n\t\t\t\tlastCommand = cmd;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"A\":\n\t\t\tcase \"a\": {\n\t\t\t\tconst rx = nextNum();\n\t\t\t\tconst ry = nextNum();\n\t\t\t\tconst rotation = nextNum();\n\t\t\t\tconst largeArc = nextNum() !== 0;\n\t\t\t\tconst sweep = nextNum() !== 0;\n\t\t\t\tlet x = nextNum();\n\t\t\t\tlet y = nextNum();\n\t\t\t\tif (cmd === \"a\") {\n\t\t\t\t\tx += currentX;\n\t\t\t\t\ty += currentY;\n\t\t\t\t}\n\t\t\t\tsegments.push(...svgArcToCubicBeziers(currentX, currentY, rx, ry, rotation, largeArc, sweep, x, y));\n\t\t\t\tcurrentX = x;\n\t\t\t\tcurrentY = y;\n\t\t\t\tlastControlX = x;\n\t\t\t\tlastControlY = y;\n\t\t\t\tlastCommand = cmd;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"Z\":\n\t\t\tcase \"z\":\n\t\t\t\tif (currentX !== startX || currentY !== startY) {\n\t\t\t\t\tsegments.push({\n\t\t\t\t\t\tp0: {\n\t\t\t\t\t\t\tx: currentX,\n\t\t\t\t\t\t\ty: currentY\n\t\t\t\t\t\t},\n\t\t\t\t\t\tp1: {\n\t\t\t\t\t\t\tx: currentX + (startX - currentX) / 3,\n\t\t\t\t\t\t\ty: currentY + (startY - currentY) / 3\n\t\t\t\t\t\t},\n\t\t\t\t\t\tp2: {\n\t\t\t\t\t\t\tx: currentX + 2 * (startX - currentX) / 3,\n\t\t\t\t\t\t\ty: currentY + 2 * (startY - currentY) / 3\n\t\t\t\t\t\t},\n\t\t\t\t\t\tp3: {\n\t\t\t\t\t\t\tx: startX,\n\t\t\t\t\t\t\ty: startY\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\tcurrentX = startX;\n\t\t\t\t\tcurrentY = startY;\n\t\t\t\t}\n\t\t\t\tlastCommand = cmd;\n\t\t\t\tbreak;\n\t\t\tdefault: break;\n\t\t}\n\t}\n\treturn segments;\n}\n/**\n* Universal path source converter to Cubic Bezier segments.\n*/\nfunction generatePathSegments(source) {\n\tswitch (source.type) {\n\t\tcase \"bezier\": return source.segments;\n\t\tcase \"svg\": return parseSvgPathToCubicBeziers(source.d);\n\t\tcase \"ellipse\": return ellipseToCubicBeziers(source.cx, source.cy, source.rx, source.ry, source.startAngleDeg ?? 0, source.endAngleDeg ?? 360);\n\t\tcase \"wave\": return waveToCubicBeziers(source.startX, source.startY, source.length, source.amplitude, source.frequency, source.phaseDeg ?? 0);\n\t}\n}\n\n//#endregion\n//#region src/text-animations/advanced-builder.ts\n/**\n* Fluent Builder for Extended Text Animators.\n*/\nvar AdvancedTextAnimatorBuilder = class AdvancedTextAnimatorBuilder {\n\tname;\n\tprops = {};\n\tselectors = [];\n\tconstructor(name) {\n\t\tthis.name = name;\n\t}\n\tstatic create(name) {\n\t\treturn new AdvancedTextAnimatorBuilder(name);\n\t}\n\t/** Directional Skew */\n\tskew(angleDeg, axisDeg = 0) {\n\t\tthis.props.skew = angleDeg;\n\t\tthis.props.skewAxis = axisDeg;\n\t\treturn this;\n\t}\n\t/** Anchor Point Grouping and Preset Pivot */\n\tanchor(preset, grouping = \"character\", offsetX = 0, offsetY = 0) {\n\t\tthis.props.anchor = {\n\t\t\tgrouping,\n\t\t\tpreset,\n\t\t\tanchorX: .5,\n\t\t\tanchorY: .5,\n\t\t\toffsetX,\n\t\t\toffsetY\n\t\t};\n\t\treturn this;\n\t}\n\t/** Custom Anchor Point Coordinates (0 to 1 normalized) */\n\tanchorNormalized(ax, ay, grouping = \"character\") {\n\t\tthis.props.anchor = {\n\t\t\tgrouping,\n\t\t\tpreset: \"custom\",\n\t\t\tanchorX: ax,\n\t\t\tanchorY: ay,\n\t\t\toffsetX: 0,\n\t\t\toffsetY: 0\n\t\t};\n\t\treturn this;\n\t}\n\t/** 3D Spatial Z-Depth */\n\ttranslateZ(zPixels) {\n\t\tthis.props.translateZ = zPixels;\n\t\treturn this;\n\t}\n\t/** 3D Tilts */\n\ttilt3D(rx = 0, ry = 0, rz = 0) {\n\t\tthis.props.rotationX = rx;\n\t\tthis.props.rotationY = ry;\n\t\tthis.props.rotationZ = rz;\n\t\treturn this;\n\t}\n\t/** 3D Rotation along X axis */\n\trotationX(deg) {\n\t\tthis.props.rotationX = deg;\n\t\treturn this;\n\t}\n\t/** 3D Rotation along Y axis */\n\trotationY(deg) {\n\t\tthis.props.rotationY = deg;\n\t\treturn this;\n\t}\n\t/** 3D Rotation along Z axis */\n\trotationZ(deg) {\n\t\tthis.props.rotationZ = deg;\n\t\treturn this;\n\t}\n\t/** 3D Volumetric Formations */\n\tvolumetricFormation(mode = \"cylinder\", radius = 300, pitch = 120, totalAngle = 360, perspective = 1200, axis = \"y\") {\n\t\tthis.props.formation = {\n\t\t\tmode,\n\t\t\tradius,\n\t\t\tpitch,\n\t\t\ttotalAngle,\n\t\t\tperspective,\n\t\t\taxis\n\t\t};\n\t\treturn this;\n\t}\n\t/** Dynamic Line Spacing (Leading) */\n\tlineSpacing(extraLeadingPixels, lineAnchor = 0) {\n\t\tthis.props.lineSpacing = extraLeadingPixels;\n\t\tthis.props.lineAnchor = lineAnchor;\n\t\treturn this;\n\t}\n\t/** Normalized Line Anchor (0=top, 0.5=center, 1=bottom) */\n\tlineAnchor(anchor) {\n\t\tthis.props.lineAnchor = anchor;\n\t\treturn this;\n\t}\n\t/** Inertial Spring Settling Physics */\n\tspring(stiffness = 180, damping = 12, mass = 1, initialVelocity = 0) {\n\t\tthis.props.spring = {\n\t\t\tstiffness,\n\t\t\tdamping,\n\t\t\tmass,\n\t\t\tinitialVelocity,\n\t\t\tovershootMultiplier: 1\n\t\t};\n\t\treturn this;\n\t}\n\t/** Dynamic Stroke & Wireframe Properties */\n\tstroke(widthPixels, color = \"#ffffff\", fillOpacity = 1) {\n\t\tthis.props.stroke = {\n\t\t\tstrokeWidth: widthPixels,\n\t\t\tstrokeColor: color,\n\t\t\tstrokeAlign: \"center\",\n\t\t\tfillOpacity,\n\t\t\tdashOffset: 0\n\t\t};\n\t\treturn this;\n\t}\n\t/** Variable Font Axes */\n\tvariableFont(axes) {\n\t\tthis.props.variableAxes = axes;\n\t\treturn this;\n\t}\n\t/** Chromatic Aberration / Cyberpunk Glitch */\n\tchromaticGlitch(redShiftX, redShiftY = 0, blueShiftX = -redShiftX, blueShiftY = 0) {\n\t\tthis.props.chromaticGlitch = {\n\t\t\tredShiftX,\n\t\t\tredShiftY,\n\t\t\tblueShiftX,\n\t\t\tblueShiftY,\n\t\t\tsliceProbability: 0,\n\t\t\tsliceAmplitude: 0\n\t\t};\n\t\treturn this;\n\t}\n\t/** Multi-Band Audio Spectrum Equalizer */\n\taudioSpectrum(signalChannel, minFreqHz = 60, maxFreqHz = 16e3, maxScale = 2.5) {\n\t\tthis.props.audioSpectrum = {\n\t\t\tsignalChannel,\n\t\t\tminFreqHz,\n\t\t\tmaxFreqHz,\n\t\t\tscaleAxis: \"scaleY\",\n\t\t\tminScale: .2,\n\t\t\tmaxScale,\n\t\t\tpeakDecay: .8\n\t\t};\n\t\treturn this;\n\t}\n\t/** Long Shadow Extrusion */\n\tlongShadow(angle = 45, length = 40, color = \"#000000\", startOpacity = .8, endOpacity = 0, steps = 16) {\n\t\tthis.props.longShadow = {\n\t\t\tangle,\n\t\t\tlength,\n\t\t\tcolor,\n\t\t\tstartOpacity,\n\t\t\tendOpacity,\n\t\t\tsteps\n\t\t};\n\t\treturn this;\n\t}\n\t/** Particle Dust / Quantum Dissolve */\n\tparticleDissolve(progress = 0, dispersalAngle = 90, maxDisplacement = 120) {\n\t\tthis.props.particleDissolve = {\n\t\t\tprogress,\n\t\t\tdispersalAngle,\n\t\t\tmaxDisplacement,\n\t\t\tturbulence: .5,\n\t\t\tparticleSize: 2\n\t\t};\n\t\treturn this;\n\t}\n\t/** Add Expression Selector */\n\taddExpressionSelector(expression, mode = \"add\") {\n\t\tthis.selectors.push({\n\t\t\ttype: \"expression\",\n\t\t\texpression,\n\t\t\tmode,\n\t\t\tamount: 1\n\t\t});\n\t\treturn this;\n\t}\n\t/** Alias for addExpressionSelector */\n\texpressionSelector(expression, mode = \"add\") {\n\t\treturn this.addExpressionSelector(expression, mode);\n\t}\n\t/** Standard 2D Transforms */\n\tx(v) {\n\t\tthis.props.x = v;\n\t\treturn this;\n\t}\n\ty(v) {\n\t\tthis.props.y = v;\n\t\treturn this;\n\t}\n\tscale(v) {\n\t\tthis.props.scale = v;\n\t\treturn this;\n\t}\n\tscaleX(v) {\n\t\tthis.props.scaleX = v;\n\t\treturn this;\n\t}\n\tscaleY(v) {\n\t\tthis.props.scaleY = v;\n\t\treturn this;\n\t}\n\trotation(deg) {\n\t\tthis.props.rotation = deg;\n\t\treturn this;\n\t}\n\topacity(v) {\n\t\tthis.props.opacity = v;\n\t\treturn this;\n\t}\n\tblur(v) {\n\t\tthis.props.blur = v;\n\t\treturn this;\n\t}\n\tfillColor(hex) {\n\t\tthis.props.fillColor = hex;\n\t\treturn this;\n\t}\n\tbuild() {\n\t\treturn {\n\t\t\tname: this.name,\n\t\t\tselectors: this.selectors,\n\t\t\tprops: this.props\n\t\t};\n\t}\n};\n\n//#endregion\n//#region ../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/core.js\n/** A special constant with type `never` */\nconst NEVER = Object.freeze({ status: \"aborted\" });\nfunction $constructor(name, initializer$2, params) {\n\tfunction init(inst, def) {\n\t\tif (!inst._zod) Object.defineProperty(inst, \"_zod\", {\n\t\t\tvalue: {\n\t\t\t\tdef,\n\t\t\t\tconstr: _,\n\t\t\t\ttraits: /* @__PURE__ */ new Set()\n\t\t\t},\n\t\t\tenumerable: false\n\t\t});\n\t\tif (inst._zod.traits.has(name)) return;\n\t\tinst._zod.traits.add(name);\n\t\tinitializer$2(inst, def);\n\t\tconst proto = _.prototype;\n\t\tconst keys = Object.keys(proto);\n\t\tfor (let i = 0; i < keys.length; i++) {\n\t\t\tconst k = keys[i];\n\t\t\tif (!(k in inst)) inst[k] = proto[k].bind(inst);\n\t\t}\n\t}\n\tconst Parent = params?.Parent ?? Object;\n\tclass Definition extends Parent {}\n\tObject.defineProperty(Definition, \"name\", { value: name });\n\tfunction _(def) {\n\t\tvar _a$1;\n\t\tconst inst = params?.Parent ? new Definition() : this;\n\t\tinit(inst, def);\n\t\t(_a$1 = inst._zod).deferred ?? (_a$1.deferred = []);\n\t\tfor (const fn of inst._zod.deferred) fn();\n\t\treturn inst;\n\t}\n\tObject.defineProperty(_, \"init\", { value: init });\n\tObject.defineProperty(_, Symbol.hasInstance, { value: (inst) => {\n\t\tif (params?.Parent && inst instanceof params.Parent) return true;\n\t\treturn inst?._zod?.traits?.has(name);\n\t} });\n\tObject.defineProperty(_, \"name\", { value: name });\n\treturn _;\n}\nvar $ZodAsyncError = class extends Error {\n\tconstructor() {\n\t\tsuper(`Encountered Promise during synchronous parse. Use .parseAsync() instead.`);\n\t}\n};\nvar $ZodEncodeError = class extends Error {\n\tconstructor(name) {\n\t\tsuper(`Encountered unidirectional transform during encode: ${name}`);\n\t\tthis.name = \"ZodEncodeError\";\n\t}\n};\nconst globalConfig = {};\nfunction config(newConfig) {\n\tif (newConfig) Object.assign(globalConfig, newConfig);\n\treturn globalConfig;\n}\n\n//#endregion\n//#region ../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/util.js\nfunction getEnumValues(entries) {\n\tconst numericValues = Object.values(entries).filter((v) => typeof v === \"number\");\n\treturn Object.entries(entries).filter(([k, _]) => numericValues.indexOf(+k) === -1).map(([_, v]) => v);\n}\nfunction jsonStringifyReplacer(_, value) {\n\tif (typeof value === \"bigint\") return value.toString();\n\treturn value;\n}\nfunction cached(getter) {\n\treturn { get value() {\n\t\t{\n\t\t\tconst value = getter();\n\t\t\tObject.defineProperty(this, \"value\", { value });\n\t\t\treturn value;\n\t\t}\n\t\tthrow new Error(\"cached value already set\");\n\t} };\n}\nfunction nullish(input) {\n\treturn input === null || input === void 0;\n}\nfunction cleanRegex(source) {\n\tconst start = source.startsWith(\"^\") ? 1 : 0;\n\tconst end = source.endsWith(\"$\") ? source.length - 1 : source.length;\n\treturn source.slice(start, end);\n}\nfunction floatSafeRemainder(val, step) {\n\tconst valDecCount = (val.toString().split(\".\")[1] || \"\").length;\n\tconst stepString = step.toString();\n\tlet stepDecCount = (stepString.split(\".\")[1] || \"\").length;\n\tif (stepDecCount === 0 && /\\d?e-\\d?/.test(stepString)) {\n\t\tconst match = stepString.match(/\\d?e-(\\d?)/);\n\t\tif (match?.[1]) stepDecCount = Number.parseInt(match[1]);\n\t}\n\tconst decCount = valDecCount > stepDecCount ? valDecCount : stepDecCount;\n\treturn Number.parseInt(val.toFixed(decCount).replace(\".\", \"\")) % Number.parseInt(step.toFixed(decCount).replace(\".\", \"\")) / 10 ** decCount;\n}\nconst EVALUATING = Symbol(\"evaluating\");\nfunction defineLazy(object$1, key, getter) {\n\tlet value = void 0;\n\tObject.defineProperty(object$1, key, {\n\t\tget() {\n\t\t\tif (value === EVALUATING) return;\n\t\t\tif (value === void 0) {\n\t\t\t\tvalue = EVALUATING;\n\t\t\t\tvalue = getter();\n\t\t\t}\n\t\t\treturn value;\n\t\t},\n\t\tset(v) {\n\t\t\tObject.defineProperty(object$1, key, { value: v });\n\t\t},\n\t\tconfigurable: true\n\t});\n}\nfunction assignProp(target, prop, value) {\n\tObject.defineProperty(target, prop, {\n\t\tvalue,\n\t\twritable: true,\n\t\tenumerable: true,\n\t\tconfigurable: true\n\t});\n}\nfunction mergeDefs(...defs) {\n\tconst mergedDescriptors = {};\n\tfor (const def of defs) {\n\t\tconst descriptors = Object.getOwnPropertyDescriptors(def);\n\t\tObject.assign(mergedDescriptors, descriptors);\n\t}\n\treturn Object.defineProperties({}, mergedDescriptors);\n}\nfunction esc(str) {\n\treturn JSON.stringify(str);\n}\nfunction slugify(input) {\n\treturn input.toLowerCase().trim().replace(/[^\\w\\s-]/g, \"\").replace(/[\\s_-]+/g, \"-\").replace(/^-+|-+$/g, \"\");\n}\nconst captureStackTrace = \"captureStackTrace\" in Error ? Error.captureStackTrace : (..._args) => {};\nfunction isObject(data) {\n\treturn typeof data === \"object\" && data !== null && !Array.isArray(data);\n}\nconst allowsEval = cached(() => {\n\tif (typeof navigator !== \"undefined\" && navigator?.userAgent?.includes(\"Cloudflare\")) return false;\n\ttry {\n\t\tnew Function(\"\");\n\t\treturn true;\n\t} catch (_) {\n\t\treturn false;\n\t}\n});\nfunction isPlainObject(o) {\n\tif (isObject(o) === false) return false;\n\tconst ctor = o.constructor;\n\tif (ctor === void 0) return true;\n\tif (typeof ctor !== \"function\") return true;\n\tconst prot = ctor.prototype;\n\tif (isObject(prot) === false) return false;\n\tif (Object.prototype.hasOwnProperty.call(prot, \"isPrototypeOf\") === false) return false;\n\treturn true;\n}\nfunction shallowClone(o) {\n\tif (isPlainObject(o)) return { ...o };\n\tif (Array.isArray(o)) return [...o];\n\treturn o;\n}\nconst propertyKeyTypes = new Set([\n\t\"string\",\n\t\"number\",\n\t\"symbol\"\n]);\nfunction escapeRegex(str) {\n\treturn str.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\nfunction clone(inst, def, params) {\n\tconst cl = new inst._zod.constr(def ?? inst._zod.def);\n\tif (!def || params?.parent) cl._zod.parent = inst;\n\treturn cl;\n}\nfunction normalizeParams(_params) {\n\tconst params = _params;\n\tif (!params) return {};\n\tif (typeof params === \"string\") return { error: () => params };\n\tif (params?.message !== void 0) {\n\t\tif (params?.error !== void 0) throw new Error(\"Cannot specify both `message` and `error` params\");\n\t\tparams.error = params.message;\n\t}\n\tdelete params.message;\n\tif (typeof params.error === \"string\") return {\n\t\t...params,\n\t\terror: () => params.error\n\t};\n\treturn params;\n}\nfunction optionalKeys(shape) {\n\treturn Object.keys(shape).filter((k) => {\n\t\treturn shape[k]._zod.optin === \"optional\" && shape[k]._zod.optout === \"optional\";\n\t});\n}\nconst NUMBER_FORMAT_RANGES = {\n\tsafeint: [Number.MIN_SAFE_INTEGER, Number.MAX_SAFE_INTEGER],\n\tint32: [-2147483648, 2147483647],\n\tuint32: [0, 4294967295],\n\tfloat32: [-34028234663852886e22, 34028234663852886e22],\n\tfloat64: [-Number.MAX_VALUE, Number.MAX_VALUE]\n};\nfunction pick(schema, mask) {\n\tconst currDef = schema._zod.def;\n\tconst checks = currDef.checks;\n\tif (checks && checks.length > 0) throw new Error(\".pick() cannot be used on object schemas containing refinements\");\n\treturn clone(schema, mergeDefs(schema._zod.def, {\n\t\tget shape() {\n\t\t\tconst newShape = {};\n\t\t\tfor (const key in mask) {\n\t\t\t\tif (!(key in currDef.shape)) throw new Error(`Unrecognized key: \"${key}\"`);\n\t\t\t\tif (!mask[key]) continue;\n\t\t\t\tnewShape[key] = currDef.shape[key];\n\t\t\t}\n\t\t\tassignProp(this, \"shape\", newShape);\n\t\t\treturn newShape;\n\t\t},\n\t\tchecks: []\n\t}));\n}\nfunction omit(schema, mask) {\n\tconst currDef = schema._zod.def;\n\tconst checks = currDef.checks;\n\tif (checks && checks.length > 0) throw new Error(\".omit() cannot be used on object schemas containing refinements\");\n\treturn clone(schema, mergeDefs(schema._zod.def, {\n\t\tget shape() {\n\t\t\tconst newShape = { ...schema._zod.def.shape };\n\t\t\tfor (const key in mask) {\n\t\t\t\tif (!(key in currDef.shape)) throw new Error(`Unrecognized key: \"${key}\"`);\n\t\t\t\tif (!mask[key]) continue;\n\t\t\t\tdelete newShape[key];\n\t\t\t}\n\t\t\tassignProp(this, \"shape\", newShape);\n\t\t\treturn newShape;\n\t\t},\n\t\tchecks: []\n\t}));\n}\nfunction extend(schema, shape) {\n\tif (!isPlainObject(shape)) throw new Error(\"Invalid input to extend: expected a plain object\");\n\tconst checks = schema._zod.def.checks;\n\tif (checks && checks.length > 0) {\n\t\tconst existingShape = schema._zod.def.shape;\n\t\tfor (const key in shape) if (Object.getOwnPropertyDescriptor(existingShape, key) !== void 0) throw new Error(\"Cannot overwrite keys on object schemas containing refinements. Use `.safeExtend()` instead.\");\n\t}\n\treturn clone(schema, mergeDefs(schema._zod.def, { get shape() {\n\t\tconst _shape = {\n\t\t\t...schema._zod.def.shape,\n\t\t\t...shape\n\t\t};\n\t\tassignProp(this, \"shape\", _shape);\n\t\treturn _shape;\n\t} }));\n}\nfunction safeExtend(schema, shape) {\n\tif (!isPlainObject(shape)) throw new Error(\"Invalid input to safeExtend: expected a plain object\");\n\treturn clone(schema, mergeDefs(schema._zod.def, { get shape() {\n\t\tconst _shape = {\n\t\t\t...schema._zod.def.shape,\n\t\t\t...shape\n\t\t};\n\t\tassignProp(this, \"shape\", _shape);\n\t\treturn _shape;\n\t} }));\n}\nfunction merge(a, b) {\n\treturn clone(a, mergeDefs(a._zod.def, {\n\t\tget shape() {\n\t\t\tconst _shape = {\n\t\t\t\t...a._zod.def.shape,\n\t\t\t\t...b._zod.def.shape\n\t\t\t};\n\t\t\tassignProp(this, \"shape\", _shape);\n\t\t\treturn _shape;\n\t\t},\n\t\tget catchall() {\n\t\t\treturn b._zod.def.catchall;\n\t\t},\n\t\tchecks: []\n\t}));\n}\nfunction partial(Class, schema, mask) {\n\tconst checks = schema._zod.def.checks;\n\tif (checks && checks.length > 0) throw new Error(\".partial() cannot be used on object schemas containing refinements\");\n\treturn clone(schema, mergeDefs(schema._zod.def, {\n\t\tget shape() {\n\t\t\tconst oldShape = schema._zod.def.shape;\n\t\t\tconst shape = { ...oldShape };\n\t\t\tif (mask) for (const key in mask) {\n\t\t\t\tif (!(key in oldShape)) throw new Error(`Unrecognized key: \"${key}\"`);\n\t\t\t\tif (!mask[key]) continue;\n\t\t\t\tshape[key] = Class ? new Class({\n\t\t\t\t\ttype: \"optional\",\n\t\t\t\t\tinnerType: oldShape[key]\n\t\t\t\t}) : oldShape[key];\n\t\t\t}\n\t\t\telse for (const key in oldShape) shape[key] = Class ? new Class({\n\t\t\t\ttype: \"optional\",\n\t\t\t\tinnerType: oldShape[key]\n\t\t\t}) : oldShape[key];\n\t\t\tassignProp(this, \"shape\", shape);\n\t\t\treturn shape;\n\t\t},\n\t\tchecks: []\n\t}));\n}\nfunction required(Class, schema, mask) {\n\treturn clone(schema, mergeDefs(schema._zod.def, { get shape() {\n\t\tconst oldShape = schema._zod.def.shape;\n\t\tconst shape = { ...oldShape };\n\t\tif (mask) for (const key in mask) {\n\t\t\tif (!(key in shape)) throw new Error(`Unrecognized key: \"${key}\"`);\n\t\t\tif (!mask[key]) continue;\n\t\t\tshape[key] = new Class({\n\t\t\t\ttype: \"nonoptional\",\n\t\t\t\tinnerType: oldShape[key]\n\t\t\t});\n\t\t}\n\t\telse for (const key in oldShape) shape[key] = new Class({\n\t\t\ttype: \"nonoptional\",\n\t\t\tinnerType: oldShape[key]\n\t\t});\n\t\tassignProp(this, \"shape\", shape);\n\t\treturn shape;\n\t} }));\n}\nfunction aborted(x, startIndex = 0) {\n\tif (x.aborted === true) return true;\n\tfor (let i = startIndex; i < x.issues.length; i++) if (x.issues[i]?.continue !== true) return true;\n\treturn false;\n}\nfunction prefixIssues(path, issues) {\n\treturn issues.map((iss) => {\n\t\tvar _a$1;\n\t\t(_a$1 = iss).path ?? (_a$1.path = []);\n\t\tiss.path.unshift(path);\n\t\treturn iss;\n\t});\n}\nfunction unwrapMessage(message) {\n\treturn typeof message === \"string\" ? message : message?.message;\n}\nfunction finalizeIssue(iss, ctx, config$1) {\n\tconst full = {\n\t\t...iss,\n\t\tpath: iss.path ?? []\n\t};\n\tif (!iss.message) full.message = unwrapMessage(iss.inst?._zod.def?.error?.(iss)) ?? unwrapMessage(ctx?.error?.(iss)) ?? unwrapMessage(config$1.customError?.(iss)) ?? unwrapMessage(config$1.localeError?.(iss)) ?? \"Invalid input\";\n\tdelete full.inst;\n\tdelete full.continue;\n\tif (!ctx?.reportInput) delete full.input;\n\treturn full;\n}\nfunction getLengthableOrigin(input) {\n\tif (Array.isArray(input)) return \"array\";\n\tif (typeof input === \"string\") return \"string\";\n\treturn \"unknown\";\n}\nfunction issue(...args) {\n\tconst [iss, input, inst] = args;\n\tif (typeof iss === \"string\") return {\n\t\tmessage: iss,\n\t\tcode: \"custom\",\n\t\tinput,\n\t\tinst\n\t};\n\treturn { ...iss };\n}\n\n//#endregion\n//#region ../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/errors.js\nconst initializer$1 = (inst, def) => {\n\tinst.name = \"$ZodError\";\n\tObject.defineProperty(inst, \"_zod\", {\n\t\tvalue: inst._zod,\n\t\tenumerable: false\n\t});\n\tObject.defineProperty(inst, \"issues\", {\n\t\tvalue: def,\n\t\tenumerable: false\n\t});\n\tinst.message = JSON.stringify(def, jsonStringifyReplacer, 2);\n\tObject.defineProperty(inst, \"toString\", {\n\t\tvalue: () => inst.message,\n\t\tenumerable: false\n\t});\n};\nconst $ZodError = $constructor(\"$ZodError\", initializer$1);\nconst $ZodRealError = $constructor(\"$ZodError\", initializer$1, { Parent: Error });\nfunction flattenError(error, mapper = (issue$1) => issue$1.message) {\n\tconst fieldErrors = {};\n\tconst formErrors = [];\n\tfor (const sub of error.issues) if (sub.path.length > 0) {\n\t\tfieldErrors[sub.path[0]] = fieldErrors[sub.path[0]] || [];\n\t\tfieldErrors[sub.path[0]].push(mapper(sub));\n\t} else formErrors.push(mapper(sub));\n\treturn {\n\t\tformErrors,\n\t\tfieldErrors\n\t};\n}\nfunction formatError(error, mapper = (issue$1) => issue$1.message) {\n\tconst fieldErrors = { _errors: [] };\n\tconst processError = (error$1) => {\n\t\tfor (const issue$1 of error$1.issues) if (issue$1.code === \"invalid_union\" && issue$1.errors.length) issue$1.errors.map((issues) => processError({ issues }));\n\t\telse if (issue$1.code === \"invalid_key\") processError({ issues: issue$1.issues });\n\t\telse if (issue$1.code === \"invalid_element\") processError({ issues: issue$1.issues });\n\t\telse if (issue$1.path.length === 0) fieldErrors._errors.push(mapper(issue$1));\n\t\telse {\n\t\t\tlet curr = fieldErrors;\n\t\t\tlet i = 0;\n\t\t\twhile (i < issue$1.path.length) {\n\t\t\t\tconst el = issue$1.path[i];\n\t\t\t\tif (!(i === issue$1.path.length - 1)) curr[el] = curr[el] || { _errors: [] };\n\t\t\t\telse {\n\t\t\t\t\tcurr[el] = curr[el] || { _errors: [] };\n\t\t\t\t\tcurr[el]._errors.push(mapper(issue$1));\n\t\t\t\t}\n\t\t\t\tcurr = curr[el];\n\t\t\t\ti++;\n\t\t\t}\n\t\t}\n\t};\n\tprocessError(error);\n\treturn fieldErrors;\n}\n\n//#endregion\n//#region ../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/parse.js\nconst _parse = (_Err) => (schema, value, _ctx, _params) => {\n\tconst ctx = _ctx ? Object.assign(_ctx, { async: false }) : { async: false };\n\tconst result = schema._zod.run({\n\t\tvalue,\n\t\tissues: []\n\t}, ctx);\n\tif (result instanceof Promise) throw new $ZodAsyncError();\n\tif (result.issues.length) {\n\t\tconst e = new (_params?.Err ?? _Err)(result.issues.map((iss) => finalizeIssue(iss, ctx, config())));\n\t\tcaptureStackTrace(e, _params?.callee);\n\t\tthrow e;\n\t}\n\treturn result.value;\n};\nconst parse$1 = /* @__PURE__ */ _parse($ZodRealError);\nconst _parseAsync = (_Err) => async (schema, value, _ctx, params) => {\n\tconst ctx = _ctx ? Object.assign(_ctx, { async: true }) : { async: true };\n\tlet result = schema._zod.run({\n\t\tvalue,\n\t\tissues: []\n\t}, ctx);\n\tif (result instanceof Promise) result = await result;\n\tif (result.issues.length) {\n\t\tconst e = new (params?.Err ?? _Err)(result.issues.map((iss) => finalizeIssue(iss, ctx, config())));\n\t\tcaptureStackTrace(e, params?.callee);\n\t\tthrow e;\n\t}\n\treturn result.value;\n};\nconst parseAsync$1 = /* @__PURE__ */ _parseAsync($ZodRealError);\nconst _safeParse = (_Err) => (schema, value, _ctx) => {\n\tconst ctx = _ctx ? {\n\t\t..._ctx,\n\t\tasync: false\n\t} : { async: false };\n\tconst result = schema._zod.run({\n\t\tvalue,\n\t\tissues: []\n\t}, ctx);\n\tif (result instanceof Promise) throw new $ZodAsyncError();\n\treturn result.issues.length ? {\n\t\tsuccess: false,\n\t\terror: new (_Err ?? $ZodError)(result.issues.map((iss) => finalizeIssue(iss, ctx, config())))\n\t} : {\n\t\tsuccess: true,\n\t\tdata: result.value\n\t};\n};\nconst safeParse$1 = /* @__PURE__ */ _safeParse($ZodRealError);\nconst _safeParseAsync = (_Err) => async (schema, value, _ctx) => {\n\tconst ctx = _ctx ? Object.assign(_ctx, { async: true }) : { async: true };\n\tlet result = schema._zod.run({\n\t\tvalue,\n\t\tissues: []\n\t}, ctx);\n\tif (result instanceof Promise) result = await result;\n\treturn result.issues.length ? {\n\t\tsuccess: false,\n\t\terror: new _Err(result.issues.map((iss) => finalizeIssue(iss, ctx, config())))\n\t} : {\n\t\tsuccess: true,\n\t\tdata: result.value\n\t};\n};\nconst safeParseAsync$1 = /* @__PURE__ */ _safeParseAsync($ZodRealError);\nconst _encode = (_Err) => (schema, value, _ctx) => {\n\tconst ctx = _ctx ? Object.assign(_ctx, { direction: \"backward\" }) : { direction: \"backward\" };\n\treturn _parse(_Err)(schema, value, ctx);\n};\nconst encode$1 = /* @__PURE__ */ _encode($ZodRealError);\nconst _decode = (_Err) => (schema, value, _ctx) => {\n\treturn _parse(_Err)(schema, value, _ctx);\n};\nconst decode$1 = /* @__PURE__ */ _decode($ZodRealError);\nconst _encodeAsync = (_Err) => async (schema, value, _ctx) => {\n\tconst ctx = _ctx ? Object.assign(_ctx, { direction: \"backward\" }) : { direction: \"backward\" };\n\treturn _parseAsync(_Err)(schema, value, ctx);\n};\nconst encodeAsync$1 = /* @__PURE__ */ _encodeAsync($ZodRealError);\nconst _decodeAsync = (_Err) => async (schema, value, _ctx) => {\n\treturn _parseAsync(_Err)(schema, value, _ctx);\n};\nconst decodeAsync$1 = /* @__PURE__ */ _decodeAsync($ZodRealError);\nconst _safeEncode = (_Err) => (schema, value, _ctx) => {\n\tconst ctx = _ctx ? Object.assign(_ctx, { direction: \"backward\" }) : { direction: \"backward\" };\n\treturn _safeParse(_Err)(schema, value, ctx);\n};\nconst safeEncode$1 = /* @__PURE__ */ _safeEncode($ZodRealError);\nconst _safeDecode = (_Err) => (schema, value, _ctx) => {\n\treturn _safeParse(_Err)(schema, value, _ctx);\n};\nconst safeDecode$1 = /* @__PURE__ */ _safeDecode($ZodRealError);\nconst _safeEncodeAsync = (_Err) => async (schema, value, _ctx) => {\n\tconst ctx = _ctx ? Object.assign(_ctx, { direction: \"backward\" }) : { direction: \"backward\" };\n\treturn _safeParseAsync(_Err)(schema, value, ctx);\n};\nconst safeEncodeAsync$1 = /* @__PURE__ */ _safeEncodeAsync($ZodRealError);\nconst _safeDecodeAsync = (_Err) => async (schema, value, _ctx) => {\n\treturn _safeParseAsync(_Err)(schema, value, _ctx);\n};\nconst safeDecodeAsync$1 = /* @__PURE__ */ _safeDecodeAsync($ZodRealError);\n\n//#endregion\n//#region ../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/regexes.js\nconst cuid = /^[cC][^\\s-]{8,}$/;\nconst cuid2 = /^[0-9a-z]+$/;\nconst ulid = /^[0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{26}$/;\nconst xid = /^[0-9a-vA-V]{20}$/;\nconst ksuid = /^[A-Za-z0-9]{27}$/;\nconst nanoid = /^[a-zA-Z0-9_-]{21}$/;\n/** ISO 8601-1 duration regex. Does not support the 8601-2 extensions like negative durations or fractional/negative components. */\nconst duration$1 = /^P(?:(\\d+W)|(?!.*W)(?=\\d|T\\d)(\\d+Y)?(\\d+M)?(\\d+D)?(T(?=\\d)(\\d+H)?(\\d+M)?(\\d+([.,]\\d+)?S)?)?)$/;\n/** A regex for any UUID-like identifier: 8-4-4-4-12 hex pattern */\nconst guid = /^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$/;\n/** Returns a regex for validating an RFC 9562/4122 UUID.\n*\n* @param version Optionally specify a version 1-8. If no version is specified, all versions are supported. */\nconst uuid = (version$1) => {\n\tif (!version$1) return /^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/;\n\treturn /* @__PURE__ */ new RegExp(`^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-${version$1}[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$`);\n};\n/** Practical email validation */\nconst email = /^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$/;\nconst _emoji$1 = `^(\\\\p{Extended_Pictographic}|\\\\p{Emoji_Component})+$`;\nfunction emoji() {\n\treturn new RegExp(_emoji$1, \"u\");\n}\nconst ipv4 = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/;\nconst ipv6 = /^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:))$/;\nconst cidrv4 = /^((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\/([0-9]|[1-2][0-9]|3[0-2])$/;\nconst cidrv6 = /^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|::|([0-9a-fA-F]{1,4})?::([0-9a-fA-F]{1,4}:?){0,6})\\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/;\nconst base64 = /^$|^(?:[0-9a-zA-Z+/]{4})*(?:(?:[0-9a-zA-Z+/]{2}==)|(?:[0-9a-zA-Z+/]{3}=))?$/;\nconst base64url = /^[A-Za-z0-9_-]*$/;\nconst e164 = /^\\+[1-9]\\d{6,14}$/;\nconst dateSource = `(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))`;\nconst date$1 = /* @__PURE__ */ new RegExp(`^${dateSource}$`);\nfunction timeSource(args) {\n\tconst hhmm = `(?:[01]\\\\d|2[0-3]):[0-5]\\\\d`;\n\treturn typeof args.precision === \"number\" ? args.precision === -1 ? `${hhmm}` : args.precision === 0 ? `${hhmm}:[0-5]\\\\d` : `${hhmm}:[0-5]\\\\d\\\\.\\\\d{${args.precision}}` : `${hhmm}(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?`;\n}\nfunction time$1(args) {\n\treturn /* @__PURE__ */ new RegExp(`^${timeSource(args)}$`);\n}\nfunction datetime$1(args) {\n\tconst time$2 = timeSource({ precision: args.precision });\n\tconst opts = [\"Z\"];\n\tif (args.local) opts.push(\"\");\n\tif (args.offset) opts.push(`([+-](?:[01]\\\\d|2[0-3]):[0-5]\\\\d)`);\n\tconst timeRegex = `${time$2}(?:${opts.join(\"|\")})`;\n\treturn /* @__PURE__ */ new RegExp(`^${dateSource}T(?:${timeRegex})$`);\n}\nconst string$1 = (params) => {\n\tconst regex = params ? `[\\\\s\\\\S]{${params?.minimum ?? 0},${params?.maximum ?? \"\"}}` : `[\\\\s\\\\S]*`;\n\treturn /* @__PURE__ */ new RegExp(`^${regex}$`);\n};\nconst integer = /^-?\\d+$/;\nconst number$1 = /^-?\\d+(?:\\.\\d+)?$/;\nconst boolean$1 = /^(?:true|false)$/i;\nconst lowercase = /^[^A-Z]*$/;\nconst uppercase = /^[^a-z]*$/;\n\n//#endregion\n//#region ../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/checks.js\nconst $ZodCheck = /* @__PURE__ */ $constructor(\"$ZodCheck\", (inst, def) => {\n\tvar _a$1;\n\tinst._zod ?? (inst._zod = {});\n\tinst._zod.def = def;\n\t(_a$1 = inst._zod).onattach ?? (_a$1.onattach = []);\n});\nconst numericOriginMap = {\n\tnumber: \"number\",\n\tbigint: \"bigint\",\n\tobject: \"date\"\n};\nconst $ZodCheckLessThan = /* @__PURE__ */ $constructor(\"$ZodCheckLessThan\", (inst, def) => {\n\t$ZodCheck.init(inst, def);\n\tconst origin = numericOriginMap[typeof def.value];\n\tinst._zod.onattach.push((inst$1) => {\n\t\tconst bag = inst$1._zod.bag;\n\t\tconst curr = (def.inclusive ? bag.maximum : bag.exclusiveMaximum) ?? Number.POSITIVE_INFINITY;\n\t\tif (def.value < curr) if (def.inclusive) bag.maximum = def.value;\n\t\telse bag.exclusiveMaximum = def.value;\n\t});\n\tinst._zod.check = (payload) => {\n\t\tif (def.inclusive ? payload.value <= def.value : payload.value < def.value) return;\n\t\tpayload.issues.push({\n\t\t\torigin,\n\t\t\tcode: \"too_big\",\n\t\t\tmaximum: typeof def.value === \"object\" ? def.value.getTime() : def.value,\n\t\t\tinput: payload.value,\n\t\t\tinclusive: def.inclusive,\n\t\t\tinst,\n\t\t\tcontinue: !def.abort\n\t\t});\n\t};\n});\nconst $ZodCheckGreaterThan = /* @__PURE__ */ $constructor(\"$ZodCheckGreaterThan\", (inst, def) => {\n\t$ZodCheck.init(inst, def);\n\tconst origin = numericOriginMap[typeof def.value];\n\tinst._zod.onattach.push((inst$1) => {\n\t\tconst bag = inst$1._zod.bag;\n\t\tconst curr = (def.inclusive ? bag.minimum : bag.exclusiveMinimum) ?? Number.NEGATIVE_INFINITY;\n\t\tif (def.value > curr) if (def.inclusive) bag.minimum = def.value;\n\t\telse bag.exclusiveMinimum = def.value;\n\t});\n\tinst._zod.check = (payload) => {\n\t\tif (def.inclusive ? payload.value >= def.value : payload.value > def.value) return;\n\t\tpayload.issues.push({\n\t\t\torigin,\n\t\t\tcode: \"too_small\",\n\t\t\tminimum: typeof def.value === \"object\" ? def.value.getTime() : def.value,\n\t\t\tinput: payload.value,\n\t\t\tinclusive: def.inclusive,\n\t\t\tinst,\n\t\t\tcontinue: !def.abort\n\t\t});\n\t};\n});\nconst $ZodCheckMultipleOf = /* @__PURE__ */ $constructor(\"$ZodCheckMultipleOf\", (inst, def) => {\n\t$ZodCheck.init(inst, def);\n\tinst._zod.onattach.push((inst$1) => {\n\t\tvar _a$1;\n\t\t(_a$1 = inst$1._zod.bag).multipleOf ?? (_a$1.multipleOf = def.value);\n\t});\n\tinst._zod.check = (payload) => {\n\t\tif (typeof payload.value !== typeof def.value) throw new Error(\"Cannot mix number and bigint in multiple_of check.\");\n\t\tif (typeof payload.value === \"bigint\" ? payload.value % def.value === BigInt(0) : floatSafeRemainder(payload.value, def.value) === 0) return;\n\t\tpayload.issues.push({\n\t\t\torigin: typeof payload.value,\n\t\t\tcode: \"not_multiple_of\",\n\t\t\tdivisor: def.value,\n\t\t\tinput: payload.value,\n\t\t\tinst,\n\t\t\tcontinue: !def.abort\n\t\t});\n\t};\n});\nconst $ZodCheckNumberFormat = /* @__PURE__ */ $constructor(\"$ZodCheckNumberFormat\", (inst, def) => {\n\t$ZodCheck.init(inst, def);\n\tdef.format = def.format || \"float64\";\n\tconst isInt = def.format?.includes(\"int\");\n\tconst origin = isInt ? \"int\" : \"number\";\n\tconst [minimum, maximum] = NUMBER_FORMAT_RANGES[def.format];\n\tinst._zod.onattach.push((inst$1) => {\n\t\tconst bag = inst$1._zod.bag;\n\t\tbag.format = def.format;\n\t\tbag.minimum = minimum;\n\t\tbag.maximum = maximum;\n\t\tif (isInt) bag.pattern = integer;\n\t});\n\tinst._zod.check = (payload) => {\n\t\tconst input = payload.value;\n\t\tif (isInt) {\n\t\t\tif (!Number.isInteger(input)) {\n\t\t\t\tpayload.issues.push({\n\t\t\t\t\texpected: origin,\n\t\t\t\t\tformat: def.format,\n\t\t\t\t\tcode: \"invalid_type\",\n\t\t\t\t\tcontinue: false,\n\t\t\t\t\tinput,\n\t\t\t\t\tinst\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (!Number.isSafeInteger(input)) {\n\t\t\t\tif (input > 0) payload.issues.push({\n\t\t\t\t\tinput,\n\t\t\t\t\tcode: \"too_big\",\n\t\t\t\t\tmaximum: Number.MAX_SAFE_INTEGER,\n\t\t\t\t\tnote: \"Integers must be within the safe integer range.\",\n\t\t\t\t\tinst,\n\t\t\t\t\torigin,\n\t\t\t\t\tinclusive: true,\n\t\t\t\t\tcontinue: !def.abort\n\t\t\t\t});\n\t\t\t\telse payload.issues.push({\n\t\t\t\t\tinput,\n\t\t\t\t\tcode: \"too_small\",\n\t\t\t\t\tminimum: Number.MIN_SAFE_INTEGER,\n\t\t\t\t\tnote: \"Integers must be within the safe integer range.\",\n\t\t\t\t\tinst,\n\t\t\t\t\torigin,\n\t\t\t\t\tinclusive: true,\n\t\t\t\t\tcontinue: !def.abort\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\tif (input < minimum) payload.issues.push({\n\t\t\torigin: \"number\",\n\t\t\tinput,\n\t\t\tcode: \"too_small\",\n\t\t\tminimum,\n\t\t\tinclusive: true,\n\t\t\tinst,\n\t\t\tcontinue: !def.abort\n\t\t});\n\t\tif (input > maximum) payload.issues.push({\n\t\t\torigin: \"number\",\n\t\t\tinput,\n\t\t\tcode: \"too_big\",\n\t\t\tmaximum,\n\t\t\tinclusive: true,\n\t\t\tinst,\n\t\t\tcontinue: !def.abort\n\t\t});\n\t};\n});\nconst $ZodCheckMaxLength = /* @__PURE__ */ $constructor(\"$ZodCheckMaxLength\", (inst, def) => {\n\tvar _a$1;\n\t$ZodCheck.init(inst, def);\n\t(_a$1 = inst._zod.def).when ?? (_a$1.when = (payload) => {\n\t\tconst val = payload.value;\n\t\treturn !nullish(val) && val.length !== void 0;\n\t});\n\tinst._zod.onattach.push((inst$1) => {\n\t\tconst curr = inst$1._zod.bag.maximum ?? Number.POSITIVE_INFINITY;\n\t\tif (def.maximum < curr) inst$1._zod.bag.maximum = def.maximum;\n\t});\n\tinst._zod.check = (payload) => {\n\t\tconst input = payload.value;\n\t\tif (input.length <= def.maximum) return;\n\t\tconst origin = getLengthableOrigin(input);\n\t\tpayload.issues.push({\n\t\t\torigin,\n\t\t\tcode: \"too_big\",\n\t\t\tmaximum: def.maximum,\n\t\t\tinclusive: true,\n\t\t\tinput,\n\t\t\tinst,\n\t\t\tcontinue: !def.abort\n\t\t});\n\t};\n});\nconst $ZodCheckMinLength = /* @__PURE__ */ $constructor(\"$ZodCheckMinLength\", (inst, def) => {\n\tvar _a$1;\n\t$ZodCheck.init(inst, def);\n\t(_a$1 = inst._zod.def).when ?? (_a$1.when = (payload) => {\n\t\tconst val = payload.value;\n\t\treturn !nullish(val) && val.length !== void 0;\n\t});\n\tinst._zod.onattach.push((inst$1) => {\n\t\tconst curr = inst$1._zod.bag.minimum ?? Number.NEGATIVE_INFINITY;\n\t\tif (def.minimum > curr) inst$1._zod.bag.minimum = def.minimum;\n\t});\n\tinst._zod.check = (payload) => {\n\t\tconst input = payload.value;\n\t\tif (input.length >= def.minimum) return;\n\t\tconst origin = getLengthableOrigin(input);\n\t\tpayload.issues.push({\n\t\t\torigin,\n\t\t\tcode: \"too_small\",\n\t\t\tminimum: def.minimum,\n\t\t\tinclusive: true,\n\t\t\tinput,\n\t\t\tinst,\n\t\t\tcontinue: !def.abort\n\t\t});\n\t};\n});\nconst $ZodCheckLengthEquals = /* @__PURE__ */ $constructor(\"$ZodCheckLengthEquals\", (inst, def) => {\n\tvar _a$1;\n\t$ZodCheck.init(inst, def);\n\t(_a$1 = inst._zod.def).when ?? (_a$1.when = (payload) => {\n\t\tconst val = payload.value;\n\t\treturn !nullish(val) && val.length !== void 0;\n\t});\n\tinst._zod.onattach.push((inst$1) => {\n\t\tconst bag = inst$1._zod.bag;\n\t\tbag.minimum = def.length;\n\t\tbag.maximum = def.length;\n\t\tbag.length = def.length;\n\t});\n\tinst._zod.check = (payload) => {\n\t\tconst input = payload.value;\n\t\tconst length = input.length;\n\t\tif (length === def.length) return;\n\t\tconst origin = getLengthableOrigin(input);\n\t\tconst tooBig = length > def.length;\n\t\tpayload.issues.push({\n\t\t\torigin,\n\t\t\t...tooBig ? {\n\t\t\t\tcode: \"too_big\",\n\t\t\t\tmaximum: def.length\n\t\t\t} : {\n\t\t\t\tcode: \"too_small\",\n\t\t\t\tminimum: def.length\n\t\t\t},\n\t\t\tinclusive: true,\n\t\t\texact: true,\n\t\t\tinput: payload.value,\n\t\t\tinst,\n\t\t\tcontinue: !def.abort\n\t\t});\n\t};\n});\nconst $ZodCheckStringFormat = /* @__PURE__ */ $constructor(\"$ZodCheckStringFormat\", (inst, def) => {\n\tvar _a$1, _b;\n\t$ZodCheck.init(inst, def);\n\tinst._zod.onattach.push((inst$1) => {\n\t\tconst bag = inst$1._zod.bag;\n\t\tbag.format = def.format;\n\t\tif (def.pattern) {\n\t\t\tbag.patterns ?? (bag.patterns = /* @__PURE__ */ new Set());\n\t\t\tbag.patterns.add(def.pattern);\n\t\t}\n\t});\n\tif (def.pattern) (_a$1 = inst._zod).check ?? (_a$1.check = (payload) => {\n\t\tdef.pattern.lastIndex = 0;\n\t\tif (def.pattern.test(payload.value)) return;\n\t\tpayload.issues.push({\n\t\t\torigin: \"string\",\n\t\t\tcode: \"invalid_format\",\n\t\t\tformat: def.format,\n\t\t\tinput: payload.value,\n\t\t\t...def.pattern ? { pattern: def.pattern.toString() } : {},\n\t\t\tinst,\n\t\t\tcontinue: !def.abort\n\t\t});\n\t});\n\telse (_b = inst._zod).check ?? (_b.check = () => {});\n});\nconst $ZodCheckRegex = /* @__PURE__ */ $constructor(\"$ZodCheckRegex\", (inst, def) => {\n\t$ZodCheckStringFormat.init(inst, def);\n\tinst._zod.check = (payload) => {\n\t\tdef.pattern.lastIndex = 0;\n\t\tif (def.pattern.test(payload.value)) return;\n\t\tpayload.issues.push({\n\t\t\torigin: \"string\",\n\t\t\tcode: \"invalid_format\",\n\t\t\tformat: \"regex\",\n\t\t\tinput: payload.value,\n\t\t\tpattern: def.pattern.toString(),\n\t\t\tinst,\n\t\t\tcontinue: !def.abort\n\t\t});\n\t};\n});\nconst $ZodCheckLowerCase = /* @__PURE__ */ $constructor(\"$ZodCheckLowerCase\", (inst, def) => {\n\tdef.pattern ?? (def.pattern = lowercase);\n\t$ZodCheckStringFormat.init(inst, def);\n});\nconst $ZodCheckUpperCase = /* @__PURE__ */ $constructor(\"$ZodCheckUpperCase\", (inst, def) => {\n\tdef.pattern ?? (def.pattern = uppercase);\n\t$ZodCheckStringFormat.init(inst, def);\n});\nconst $ZodCheckIncludes = /* @__PURE__ */ $constructor(\"$ZodCheckIncludes\", (inst, def) => {\n\t$ZodCheck.init(inst, def);\n\tconst escapedRegex = escapeRegex(def.includes);\n\tconst pattern = new RegExp(typeof def.position === \"number\" ? `^.{${def.position}}${escapedRegex}` : escapedRegex);\n\tdef.pattern = pattern;\n\tinst._zod.onattach.push((inst$1) => {\n\t\tconst bag = inst$1._zod.bag;\n\t\tbag.patterns ?? (bag.patterns = /* @__PURE__ */ new Set());\n\t\tbag.patterns.add(pattern);\n\t});\n\tinst._zod.check = (payload) => {\n\t\tif (payload.value.includes(def.includes, def.position)) return;\n\t\tpayload.issues.push({\n\t\t\torigin: \"string\",\n\t\t\tcode: \"invalid_format\",\n\t\t\tformat: \"includes\",\n\t\t\tincludes: def.includes,\n\t\t\tinput: payload.value,\n\t\t\tinst,\n\t\t\tcontinue: !def.abort\n\t\t});\n\t};\n});\nconst $ZodCheckStartsWith = /* @__PURE__ */ $constructor(\"$ZodCheckStartsWith\", (inst, def) => {\n\t$ZodCheck.init(inst, def);\n\tconst pattern = /* @__PURE__ */ new RegExp(`^${escapeRegex(def.prefix)}.*`);\n\tdef.pattern ?? (def.pattern = pattern);\n\tinst._zod.onattach.push((inst$1) => {\n\t\tconst bag = inst$1._zod.bag;\n\t\tbag.patterns ?? (bag.patterns = /* @__PURE__ */ new Set());\n\t\tbag.patterns.add(pattern);\n\t});\n\tinst._zod.check = (payload) => {\n\t\tif (payload.value.startsWith(def.prefix)) return;\n\t\tpayload.issues.push({\n\t\t\torigin: \"string\",\n\t\t\tcode: \"invalid_format\",\n\t\t\tformat: \"starts_with\",\n\t\t\tprefix: def.prefix,\n\t\t\tinput: payload.value,\n\t\t\tinst,\n\t\t\tcontinue: !def.abort\n\t\t});\n\t};\n});\nconst $ZodCheckEndsWith = /* @__PURE__ */ $constructor(\"$ZodCheckEndsWith\", (inst, def) => {\n\t$ZodCheck.init(inst, def);\n\tconst pattern = /* @__PURE__ */ new RegExp(`.*${escapeRegex(def.suffix)}$`);\n\tdef.pattern ?? (def.pattern = pattern);\n\tinst._zod.onattach.push((inst$1) => {\n\t\tconst bag = inst$1._zod.bag;\n\t\tbag.patterns ?? (bag.patterns = /* @__PURE__ */ new Set());\n\t\tbag.patterns.add(pattern);\n\t});\n\tinst._zod.check = (payload) => {\n\t\tif (payload.value.endsWith(def.suffix)) return;\n\t\tpayload.issues.push({\n\t\t\torigin: \"string\",\n\t\t\tcode: \"invalid_format\",\n\t\t\tformat: \"ends_with\",\n\t\t\tsuffix: def.suffix,\n\t\t\tinput: payload.value,\n\t\t\tinst,\n\t\t\tcontinue: !def.abort\n\t\t});\n\t};\n});\nconst $ZodCheckOverwrite = /* @__PURE__ */ $constructor(\"$ZodCheckOverwrite\", (inst, def) => {\n\t$ZodCheck.init(inst, def);\n\tinst._zod.check = (payload) => {\n\t\tpayload.value = def.tx(payload.value);\n\t};\n});\n\n//#endregion\n//#region ../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/doc.js\nvar Doc = class {\n\tconstructor(args = []) {\n\t\tthis.content = [];\n\t\tthis.indent = 0;\n\t\tif (this) this.args = args;\n\t}\n\tindented(fn) {\n\t\tthis.indent += 1;\n\t\tfn(this);\n\t\tthis.indent -= 1;\n\t}\n\twrite(arg) {\n\t\tif (typeof arg === \"function\") {\n\t\t\targ(this, { execution: \"sync\" });\n\t\t\targ(this, { execution: \"async\" });\n\t\t\treturn;\n\t\t}\n\t\tconst lines = arg.split(\"\\n\").filter((x) => x);\n\t\tconst minIndent = Math.min(...lines.map((x) => x.length - x.trimStart().length));\n\t\tconst dedented = lines.map((x) => x.slice(minIndent)).map((x) => \" \".repeat(this.indent * 2) + x);\n\t\tfor (const line of dedented) this.content.push(line);\n\t}\n\tcompile() {\n\t\tconst F = Function;\n\t\tconst args = this?.args;\n\t\tconst lines = [...(this?.content ?? [``]).map((x) => ` ${x}`)];\n\t\treturn new F(...args, lines.join(\"\\n\"));\n\t}\n};\n\n//#endregion\n//#region ../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/versions.js\nconst version = {\n\tmajor: 4,\n\tminor: 3,\n\tpatch: 6\n};\n\n//#endregion\n//#region ../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/schemas.js\nconst $ZodType = /* @__PURE__ */ $constructor(\"$ZodType\", (inst, def) => {\n\tvar _a$1;\n\tinst ?? (inst = {});\n\tinst._zod.def = def;\n\tinst._zod.bag = inst._zod.bag || {};\n\tinst._zod.version = version;\n\tconst checks = [...inst._zod.def.checks ?? []];\n\tif (inst._zod.traits.has(\"$ZodCheck\")) checks.unshift(inst);\n\tfor (const ch of checks) for (const fn of ch._zod.onattach) fn(inst);\n\tif (checks.length === 0) {\n\t\t(_a$1 = inst._zod).deferred ?? (_a$1.deferred = []);\n\t\tinst._zod.deferred?.push(() => {\n\t\t\tinst._zod.run = inst._zod.parse;\n\t\t});\n\t} else {\n\t\tconst runChecks = (payload, checks$1, ctx) => {\n\t\t\tlet isAborted = aborted(payload);\n\t\t\tlet asyncResult;\n\t\t\tfor (const ch of checks$1) {\n\t\t\t\tif (ch._zod.def.when) {\n\t\t\t\t\tif (!ch._zod.def.when(payload)) continue;\n\t\t\t\t} else if (isAborted) continue;\n\t\t\t\tconst currLen = payload.issues.length;\n\t\t\t\tconst _ = ch._zod.check(payload);\n\t\t\t\tif (_ instanceof Promise && ctx?.async === false) throw new $ZodAsyncError();\n\t\t\t\tif (asyncResult || _ instanceof Promise) asyncResult = (asyncResult ?? Promise.resolve()).then(async () => {\n\t\t\t\t\tawait _;\n\t\t\t\t\tif (payload.issues.length === currLen) return;\n\t\t\t\t\tif (!isAborted) isAborted = aborted(payload, currLen);\n\t\t\t\t});\n\t\t\t\telse {\n\t\t\t\t\tif (payload.issues.length === currLen) continue;\n\t\t\t\t\tif (!isAborted) isAborted = aborted(payload, currLen);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (asyncResult) return asyncResult.then(() => {\n\t\t\t\treturn payload;\n\t\t\t});\n\t\t\treturn payload;\n\t\t};\n\t\tconst handleCanaryResult = (canary, payload, ctx) => {\n\t\t\tif (aborted(canary)) {\n\t\t\t\tcanary.aborted = true;\n\t\t\t\treturn canary;\n\t\t\t}\n\t\t\tconst checkResult = runChecks(payload, checks, ctx);\n\t\t\tif (checkResult instanceof Promise) {\n\t\t\t\tif (ctx.async === false) throw new $ZodAsyncError();\n\t\t\t\treturn checkResult.then((checkResult$1) => inst._zod.parse(checkResult$1, ctx));\n\t\t\t}\n\t\t\treturn inst._zod.parse(checkResult, ctx);\n\t\t};\n\t\tinst._zod.run = (payload, ctx) => {\n\t\t\tif (ctx.skipChecks) return inst._zod.parse(payload, ctx);\n\t\t\tif (ctx.direction === \"backward\") {\n\t\t\t\tconst canary = inst._zod.parse({\n\t\t\t\t\tvalue: payload.value,\n\t\t\t\t\tissues: []\n\t\t\t\t}, {\n\t\t\t\t\t...ctx,\n\t\t\t\t\tskipChecks: true\n\t\t\t\t});\n\t\t\t\tif (canary instanceof Promise) return canary.then((canary$1) => {\n\t\t\t\t\treturn handleCanaryResult(canary$1, payload, ctx);\n\t\t\t\t});\n\t\t\t\treturn handleCanaryResult(canary, payload, ctx);\n\t\t\t}\n\t\t\tconst result = inst._zod.parse(payload, ctx);\n\t\t\tif (result instanceof Promise) {\n\t\t\t\tif (ctx.async === false) throw new $ZodAsyncError();\n\t\t\t\treturn result.then((result$1) => runChecks(result$1, checks, ctx));\n\t\t\t}\n\t\t\treturn runChecks(result, checks, ctx);\n\t\t};\n\t}\n\tdefineLazy(inst, \"~standard\", () => ({\n\t\tvalidate: (value) => {\n\t\t\ttry {\n\t\t\t\tconst r = safeParse$1(inst, value);\n\t\t\t\treturn r.success ? { value: r.data } : { issues: r.error?.issues };\n\t\t\t} catch (_) {\n\t\t\t\treturn safeParseAsync$1(inst, value).then((r) => r.success ? { value: r.data } : { issues: r.error?.issues });\n\t\t\t}\n\t\t},\n\t\tvendor: \"zod\",\n\t\tversion: 1\n\t}));\n});\nconst $ZodString = /* @__PURE__ */ $constructor(\"$ZodString\", (inst, def) => {\n\t$ZodType.init(inst, def);\n\tinst._zod.pattern = [...inst?._zod.bag?.patterns ?? []].pop() ?? string$1(inst._zod.bag);\n\tinst._zod.parse = (payload, _) => {\n\t\tif (def.coerce) try {\n\t\t\tpayload.value = String(payload.value);\n\t\t} catch (_$1) {}\n\t\tif (typeof payload.value === \"string\") return payload;\n\t\tpayload.issues.push({\n\t\t\texpected: \"string\",\n\t\t\tcode: \"invalid_type\",\n\t\t\tinput: payload.value,\n\t\t\tinst\n\t\t});\n\t\treturn payload;\n\t};\n});\nconst $ZodStringFormat = /* @__PURE__ */ $constructor(\"$ZodStringFormat\", (inst, def) => {\n\t$ZodCheckStringFormat.init(inst, def);\n\t$ZodString.init(inst, def);\n});\nconst $ZodGUID = /* @__PURE__ */ $constructor(\"$ZodGUID\", (inst, def) => {\n\tdef.pattern ?? (def.pattern = guid);\n\t$ZodStringFormat.init(inst, def);\n});\nconst $ZodUUID = /* @__PURE__ */ $constructor(\"$ZodUUID\", (inst, def) => {\n\tif (def.version) {\n\t\tconst v = {\n\t\t\tv1: 1,\n\t\t\tv2: 2,\n\t\t\tv3: 3,\n\t\t\tv4: 4,\n\t\t\tv5: 5,\n\t\t\tv6: 6,\n\t\t\tv7: 7,\n\t\t\tv8: 8\n\t\t}[def.version];\n\t\tif (v === void 0) throw new Error(`Invalid UUID version: \"${def.version}\"`);\n\t\tdef.pattern ?? (def.pattern = uuid(v));\n\t} else def.pattern ?? (def.pattern = uuid());\n\t$ZodStringFormat.init(inst, def);\n});\nconst $ZodEmail = /* @__PURE__ */ $constructor(\"$ZodEmail\", (inst, def) => {\n\tdef.pattern ?? (def.pattern = email);\n\t$ZodStringFormat.init(inst, def);\n});\nconst $ZodURL = /* @__PURE__ */ $constructor(\"$ZodURL\", (inst, def) => {\n\t$ZodStringFormat.init(inst, def);\n\tinst._zod.check = (payload) => {\n\t\ttry {\n\t\t\tconst trimmed = payload.value.trim();\n\t\t\tconst url = new URL(trimmed);\n\t\t\tif (def.hostname) {\n\t\t\t\tdef.hostname.lastIndex = 0;\n\t\t\t\tif (!def.hostname.test(url.hostname)) payload.issues.push({\n\t\t\t\t\tcode: \"invalid_format\",\n\t\t\t\t\tformat: \"url\",\n\t\t\t\t\tnote: \"Invalid hostname\",\n\t\t\t\t\tpattern: def.hostname.source,\n\t\t\t\t\tinput: payload.value,\n\t\t\t\t\tinst,\n\t\t\t\t\tcontinue: !def.abort\n\t\t\t\t});\n\t\t\t}\n\t\t\tif (def.protocol) {\n\t\t\t\tdef.protocol.lastIndex = 0;\n\t\t\t\tif (!def.protocol.test(url.protocol.endsWith(\":\") ? url.protocol.slice(0, -1) : url.protocol)) payload.issues.push({\n\t\t\t\t\tcode: \"invalid_format\",\n\t\t\t\t\tformat: \"url\",\n\t\t\t\t\tnote: \"Invalid protocol\",\n\t\t\t\t\tpattern: def.protocol.source,\n\t\t\t\t\tinput: payload.value,\n\t\t\t\t\tinst,\n\t\t\t\t\tcontinue: !def.abort\n\t\t\t\t});\n\t\t\t}\n\t\t\tif (def.normalize) payload.value = url.href;\n\t\t\telse payload.value = trimmed;\n\t\t\treturn;\n\t\t} catch (_) {\n\t\t\tpayload.issues.push({\n\t\t\t\tcode: \"invalid_format\",\n\t\t\t\tformat: \"url\",\n\t\t\t\tinput: payload.value,\n\t\t\t\tinst,\n\t\t\t\tcontinue: !def.abort\n\t\t\t});\n\t\t}\n\t};\n});\nconst $ZodEmoji = /* @__PURE__ */ $constructor(\"$ZodEmoji\", (inst, def) => {\n\tdef.pattern ?? (def.pattern = emoji());\n\t$ZodStringFormat.init(inst, def);\n});\nconst $ZodNanoID = /* @__PURE__ */ $constructor(\"$ZodNanoID\", (inst, def) => {\n\tdef.pattern ?? (def.pattern = nanoid);\n\t$ZodStringFormat.init(inst, def);\n});\nconst $ZodCUID = /* @__PURE__ */ $constructor(\"$ZodCUID\", (inst, def) => {\n\tdef.pattern ?? (def.pattern = cuid);\n\t$ZodStringFormat.init(inst, def);\n});\nconst $ZodCUID2 = /* @__PURE__ */ $constructor(\"$ZodCUID2\", (inst, def) => {\n\tdef.pattern ?? (def.pattern = cuid2);\n\t$ZodStringFormat.init(inst, def);\n});\nconst $ZodULID = /* @__PURE__ */ $constructor(\"$ZodULID\", (inst, def) => {\n\tdef.pattern ?? (def.pattern = ulid);\n\t$ZodStringFormat.init(inst, def);\n});\nconst $ZodXID = /* @__PURE__ */ $constructor(\"$ZodXID\", (inst, def) => {\n\tdef.pattern ?? (def.pattern = xid);\n\t$ZodStringFormat.init(inst, def);\n});\nconst $ZodKSUID = /* @__PURE__ */ $constructor(\"$ZodKSUID\", (inst, def) => {\n\tdef.pattern ?? (def.pattern = ksuid);\n\t$ZodStringFormat.init(inst, def);\n});\nconst $ZodISODateTime = /* @__PURE__ */ $constructor(\"$ZodISODateTime\", (inst, def) => {\n\tdef.pattern ?? (def.pattern = datetime$1(def));\n\t$ZodStringFormat.init(inst, def);\n});\nconst $ZodISODate = /* @__PURE__ */ $constructor(\"$ZodISODate\", (inst, def) => {\n\tdef.pattern ?? (def.pattern = date$1);\n\t$ZodStringFormat.init(inst, def);\n});\nconst $ZodISOTime = /* @__PURE__ */ $constructor(\"$ZodISOTime\", (inst, def) => {\n\tdef.pattern ?? (def.pattern = time$1(def));\n\t$ZodStringFormat.init(inst, def);\n});\nconst $ZodISODuration = /* @__PURE__ */ $constructor(\"$ZodISODuration\", (inst, def) => {\n\tdef.pattern ?? (def.pattern = duration$1);\n\t$ZodStringFormat.init(inst, def);\n});\nconst $ZodIPv4 = /* @__PURE__ */ $constructor(\"$ZodIPv4\", (inst, def) => {\n\tdef.pattern ?? (def.pattern = ipv4);\n\t$ZodStringFormat.init(inst, def);\n\tinst._zod.bag.format = `ipv4`;\n});\nconst $ZodIPv6 = /* @__PURE__ */ $constructor(\"$ZodIPv6\", (inst, def) => {\n\tdef.pattern ?? (def.pattern = ipv6);\n\t$ZodStringFormat.init(inst, def);\n\tinst._zod.bag.format = `ipv6`;\n\tinst._zod.check = (payload) => {\n\t\ttry {\n\t\t\tnew URL(`http://[${payload.value}]`);\n\t\t} catch {\n\t\t\tpayload.issues.push({\n\t\t\t\tcode: \"invalid_format\",\n\t\t\t\tformat: \"ipv6\",\n\t\t\t\tinput: payload.value,\n\t\t\t\tinst,\n\t\t\t\tcontinue: !def.abort\n\t\t\t});\n\t\t}\n\t};\n});\nconst $ZodCIDRv4 = /* @__PURE__ */ $constructor(\"$ZodCIDRv4\", (inst, def) => {\n\tdef.pattern ?? (def.pattern = cidrv4);\n\t$ZodStringFormat.init(inst, def);\n});\nconst $ZodCIDRv6 = /* @__PURE__ */ $constructor(\"$ZodCIDRv6\", (inst, def) => {\n\tdef.pattern ?? (def.pattern = cidrv6);\n\t$ZodStringFormat.init(inst, def);\n\tinst._zod.check = (payload) => {\n\t\tconst parts = payload.value.split(\"/\");\n\t\ttry {\n\t\t\tif (parts.length !== 2) throw new Error();\n\t\t\tconst [address, prefix] = parts;\n\t\t\tif (!prefix) throw new Error();\n\t\t\tconst prefixNum = Number(prefix);\n\t\t\tif (`${prefixNum}` !== prefix) throw new Error();\n\t\t\tif (prefixNum < 0 || prefixNum > 128) throw new Error();\n\t\t\tnew URL(`http://[${address}]`);\n\t\t} catch {\n\t\t\tpayload.issues.push({\n\t\t\t\tcode: \"invalid_format\",\n\t\t\t\tformat: \"cidrv6\",\n\t\t\t\tinput: payload.value,\n\t\t\t\tinst,\n\t\t\t\tcontinue: !def.abort\n\t\t\t});\n\t\t}\n\t};\n});\nfunction isValidBase64(data) {\n\tif (data === \"\") return true;\n\tif (data.length % 4 !== 0) return false;\n\ttry {\n\t\tatob(data);\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n}\nconst $ZodBase64 = /* @__PURE__ */ $constructor(\"$ZodBase64\", (inst, def) => {\n\tdef.pattern ?? (def.pattern = base64);\n\t$ZodStringFormat.init(inst, def);\n\tinst._zod.bag.contentEncoding = \"base64\";\n\tinst._zod.check = (payload) => {\n\t\tif (isValidBase64(payload.value)) return;\n\t\tpayload.issues.push({\n\t\t\tcode: \"invalid_format\",\n\t\t\tformat: \"base64\",\n\t\t\tinput: payload.value,\n\t\t\tinst,\n\t\t\tcontinue: !def.abort\n\t\t});\n\t};\n});\nfunction isValidBase64URL(data) {\n\tif (!base64url.test(data)) return false;\n\tconst base64$1 = data.replace(/[-_]/g, (c) => c === \"-\" ? \"+\" : \"/\");\n\treturn isValidBase64(base64$1.padEnd(Math.ceil(base64$1.length / 4) * 4, \"=\"));\n}\nconst $ZodBase64URL = /* @__PURE__ */ $constructor(\"$ZodBase64URL\", (inst, def) => {\n\tdef.pattern ?? (def.pattern = base64url);\n\t$ZodStringFormat.init(inst, def);\n\tinst._zod.bag.contentEncoding = \"base64url\";\n\tinst._zod.check = (payload) => {\n\t\tif (isValidBase64URL(payload.value)) return;\n\t\tpayload.issues.push({\n\t\t\tcode: \"invalid_format\",\n\t\t\tformat: \"base64url\",\n\t\t\tinput: payload.value,\n\t\t\tinst,\n\t\t\tcontinue: !def.abort\n\t\t});\n\t};\n});\nconst $ZodE164 = /* @__PURE__ */ $constructor(\"$ZodE164\", (inst, def) => {\n\tdef.pattern ?? (def.pattern = e164);\n\t$ZodStringFormat.init(inst, def);\n});\nfunction isValidJWT(token, algorithm = null) {\n\ttry {\n\t\tconst tokensParts = token.split(\".\");\n\t\tif (tokensParts.length !== 3) return false;\n\t\tconst [header] = tokensParts;\n\t\tif (!header) return false;\n\t\tconst parsedHeader = JSON.parse(atob(header));\n\t\tif (\"typ\" in parsedHeader && parsedHeader?.typ !== \"JWT\") return false;\n\t\tif (!parsedHeader.alg) return false;\n\t\tif (algorithm && (!(\"alg\" in parsedHeader) || parsedHeader.alg !== algorithm)) return false;\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n}\nconst $ZodJWT = /* @__PURE__ */ $constructor(\"$ZodJWT\", (inst, def) => {\n\t$ZodStringFormat.init(inst, def);\n\tinst._zod.check = (payload) => {\n\t\tif (isValidJWT(payload.value, def.alg)) return;\n\t\tpayload.issues.push({\n\t\t\tcode: \"invalid_format\",\n\t\t\tformat: \"jwt\",\n\t\t\tinput: payload.value,\n\t\t\tinst,\n\t\t\tcontinue: !def.abort\n\t\t});\n\t};\n});\nconst $ZodNumber = /* @__PURE__ */ $constructor(\"$ZodNumber\", (inst, def) => {\n\t$ZodType.init(inst, def);\n\tinst._zod.pattern = inst._zod.bag.pattern ?? number$1;\n\tinst._zod.parse = (payload, _ctx) => {\n\t\tif (def.coerce) try {\n\t\t\tpayload.value = Number(payload.value);\n\t\t} catch (_) {}\n\t\tconst input = payload.value;\n\t\tif (typeof input === \"number\" && !Number.isNaN(input) && Number.isFinite(input)) return payload;\n\t\tconst received = typeof input === \"number\" ? Number.isNaN(input) ? \"NaN\" : !Number.isFinite(input) ? \"Infinity\" : void 0 : void 0;\n\t\tpayload.issues.push({\n\t\t\texpected: \"number\",\n\t\t\tcode: \"invalid_type\",\n\t\t\tinput,\n\t\t\tinst,\n\t\t\t...received ? { received } : {}\n\t\t});\n\t\treturn payload;\n\t};\n});\nconst $ZodNumberFormat = /* @__PURE__ */ $constructor(\"$ZodNumberFormat\", (inst, def) => {\n\t$ZodCheckNumberFormat.init(inst, def);\n\t$ZodNumber.init(inst, def);\n});\nconst $ZodBoolean = /* @__PURE__ */ $constructor(\"$ZodBoolean\", (inst, def) => {\n\t$ZodType.init(inst, def);\n\tinst._zod.pattern = boolean$1;\n\tinst._zod.parse = (payload, _ctx) => {\n\t\tif (def.coerce) try {\n\t\t\tpayload.value = Boolean(payload.value);\n\t\t} catch (_) {}\n\t\tconst input = payload.value;\n\t\tif (typeof input === \"boolean\") return payload;\n\t\tpayload.issues.push({\n\t\t\texpected: \"boolean\",\n\t\t\tcode: \"invalid_type\",\n\t\t\tinput,\n\t\t\tinst\n\t\t});\n\t\treturn payload;\n\t};\n});\nconst $ZodUnknown = /* @__PURE__ */ $constructor(\"$ZodUnknown\", (inst, def) => {\n\t$ZodType.init(inst, def);\n\tinst._zod.parse = (payload) => payload;\n});\nconst $ZodNever = /* @__PURE__ */ $constructor(\"$ZodNever\", (inst, def) => {\n\t$ZodType.init(inst, def);\n\tinst._zod.parse = (payload, _ctx) => {\n\t\tpayload.issues.push({\n\t\t\texpected: \"never\",\n\t\t\tcode: \"invalid_type\",\n\t\t\tinput: payload.value,\n\t\t\tinst\n\t\t});\n\t\treturn payload;\n\t};\n});\nfunction handleArrayResult(result, final, index) {\n\tif (result.issues.length) final.issues.push(...prefixIssues(index, result.issues));\n\tfinal.value[index] = result.value;\n}\nconst $ZodArray = /* @__PURE__ */ $constructor(\"$ZodArray\", (inst, def) => {\n\t$ZodType.init(inst, def);\n\tinst._zod.parse = (payload, ctx) => {\n\t\tconst input = payload.value;\n\t\tif (!Array.isArray(input)) {\n\t\t\tpayload.issues.push({\n\t\t\t\texpected: \"array\",\n\t\t\t\tcode: \"invalid_type\",\n\t\t\t\tinput,\n\t\t\t\tinst\n\t\t\t});\n\t\t\treturn payload;\n\t\t}\n\t\tpayload.value = Array(input.length);\n\t\tconst proms = [];\n\t\tfor (let i = 0; i < input.length; i++) {\n\t\t\tconst item = input[i];\n\t\t\tconst result = def.element._zod.run({\n\t\t\t\tvalue: item,\n\t\t\t\tissues: []\n\t\t\t}, ctx);\n\t\t\tif (result instanceof Promise) proms.push(result.then((result$1) => handleArrayResult(result$1, payload, i)));\n\t\t\telse handleArrayResult(result, payload, i);\n\t\t}\n\t\tif (proms.length) return Promise.all(proms).then(() => payload);\n\t\treturn payload;\n\t};\n});\nfunction handlePropertyResult(result, final, key, input, isOptionalOut) {\n\tif (result.issues.length) {\n\t\tif (isOptionalOut && !(key in input)) return;\n\t\tfinal.issues.push(...prefixIssues(key, result.issues));\n\t}\n\tif (result.value === void 0) {\n\t\tif (key in input) final.value[key] = void 0;\n\t} else final.value[key] = result.value;\n}\nfunction normalizeDef(def) {\n\tconst keys = Object.keys(def.shape);\n\tfor (const k of keys) if (!def.shape?.[k]?._zod?.traits?.has(\"$ZodType\")) throw new Error(`Invalid element at key \"${k}\": expected a Zod schema`);\n\tconst okeys = optionalKeys(def.shape);\n\treturn {\n\t\t...def,\n\t\tkeys,\n\t\tkeySet: new Set(keys),\n\t\tnumKeys: keys.length,\n\t\toptionalKeys: new Set(okeys)\n\t};\n}\nfunction handleCatchall(proms, input, payload, ctx, def, inst) {\n\tconst unrecognized = [];\n\tconst keySet = def.keySet;\n\tconst _catchall = def.catchall._zod;\n\tconst t = _catchall.def.type;\n\tconst isOptionalOut = _catchall.optout === \"optional\";\n\tfor (const key in input) {\n\t\tif (keySet.has(key)) continue;\n\t\tif (t === \"never\") {\n\t\t\tunrecognized.push(key);\n\t\t\tcontinue;\n\t\t}\n\t\tconst r = _catchall.run({\n\t\t\tvalue: input[key],\n\t\t\tissues: []\n\t\t}, ctx);\n\t\tif (r instanceof Promise) proms.push(r.then((r$1) => handlePropertyResult(r$1, payload, key, input, isOptionalOut)));\n\t\telse handlePropertyResult(r, payload, key, input, isOptionalOut);\n\t}\n\tif (unrecognized.length) payload.issues.push({\n\t\tcode: \"unrecognized_keys\",\n\t\tkeys: unrecognized,\n\t\tinput,\n\t\tinst\n\t});\n\tif (!proms.length) return payload;\n\treturn Promise.all(proms).then(() => {\n\t\treturn payload;\n\t});\n}\nconst $ZodObject = /* @__PURE__ */ $constructor(\"$ZodObject\", (inst, def) => {\n\t$ZodType.init(inst, def);\n\tif (!Object.getOwnPropertyDescriptor(def, \"shape\")?.get) {\n\t\tconst sh = def.shape;\n\t\tObject.defineProperty(def, \"shape\", { get: () => {\n\t\t\tconst newSh = { ...sh };\n\t\t\tObject.defineProperty(def, \"shape\", { value: newSh });\n\t\t\treturn newSh;\n\t\t} });\n\t}\n\tconst _normalized = cached(() => normalizeDef(def));\n\tdefineLazy(inst._zod, \"propValues\", () => {\n\t\tconst shape = def.shape;\n\t\tconst propValues = {};\n\t\tfor (const key in shape) {\n\t\t\tconst field = shape[key]._zod;\n\t\t\tif (field.values) {\n\t\t\t\tpropValues[key] ?? (propValues[key] = /* @__PURE__ */ new Set());\n\t\t\t\tfor (const v of field.values) propValues[key].add(v);\n\t\t\t}\n\t\t}\n\t\treturn propValues;\n\t});\n\tconst isObject$1 = isObject;\n\tconst catchall = def.catchall;\n\tlet value;\n\tinst._zod.parse = (payload, ctx) => {\n\t\tvalue ?? (value = _normalized.value);\n\t\tconst input = payload.value;\n\t\tif (!isObject$1(input)) {\n\t\t\tpayload.issues.push({\n\t\t\t\texpected: \"object\",\n\t\t\t\tcode: \"invalid_type\",\n\t\t\t\tinput,\n\t\t\t\tinst\n\t\t\t});\n\t\t\treturn payload;\n\t\t}\n\t\tpayload.value = {};\n\t\tconst proms = [];\n\t\tconst shape = value.shape;\n\t\tfor (const key of value.keys) {\n\t\t\tconst el = shape[key];\n\t\t\tconst isOptionalOut = el._zod.optout === \"optional\";\n\t\t\tconst r = el._zod.run({\n\t\t\t\tvalue: input[key],\n\t\t\t\tissues: []\n\t\t\t}, ctx);\n\t\t\tif (r instanceof Promise) proms.push(r.then((r$1) => handlePropertyResult(r$1, payload, key, input, isOptionalOut)));\n\t\t\telse handlePropertyResult(r, payload, key, input, isOptionalOut);\n\t\t}\n\t\tif (!catchall) return proms.length ? Promise.all(proms).then(() => payload) : payload;\n\t\treturn handleCatchall(proms, input, payload, ctx, _normalized.value, inst);\n\t};\n});\nconst $ZodObjectJIT = /* @__PURE__ */ $constructor(\"$ZodObjectJIT\", (inst, def) => {\n\t$ZodObject.init(inst, def);\n\tconst superParse = inst._zod.parse;\n\tconst _normalized = cached(() => normalizeDef(def));\n\tconst generateFastpass = (shape) => {\n\t\tconst doc = new Doc([\n\t\t\t\"shape\",\n\t\t\t\"payload\",\n\t\t\t\"ctx\"\n\t\t]);\n\t\tconst normalized = _normalized.value;\n\t\tconst parseStr = (key) => {\n\t\t\tconst k = esc(key);\n\t\t\treturn `shape[${k}]._zod.run({ value: input[${k}], issues: [] }, ctx)`;\n\t\t};\n\t\tdoc.write(`const input = payload.value;`);\n\t\tconst ids = Object.create(null);\n\t\tlet counter = 0;\n\t\tfor (const key of normalized.keys) ids[key] = `key_${counter++}`;\n\t\tdoc.write(`const newResult = {};`);\n\t\tfor (const key of normalized.keys) {\n\t\t\tconst id = ids[key];\n\t\t\tconst k = esc(key);\n\t\t\tconst isOptionalOut = shape[key]?._zod?.optout === \"optional\";\n\t\t\tdoc.write(`const ${id} = ${parseStr(key)};`);\n\t\t\tif (isOptionalOut) doc.write(`\n if (${id}.issues.length) {\n if (${k} in input) {\n payload.issues = payload.issues.concat(${id}.issues.map(iss => ({\n ...iss,\n path: iss.path ? [${k}, ...iss.path] : [${k}]\n })));\n }\n }\n \n if (${id}.value === undefined) {\n if (${k} in input) {\n newResult[${k}] = undefined;\n }\n } else {\n newResult[${k}] = ${id}.value;\n }\n \n `);\n\t\t\telse doc.write(`\n if (${id}.issues.length) {\n payload.issues = payload.issues.concat(${id}.issues.map(iss => ({\n ...iss,\n path: iss.path ? [${k}, ...iss.path] : [${k}]\n })));\n }\n \n if (${id}.value === undefined) {\n if (${k} in input) {\n newResult[${k}] = undefined;\n }\n } else {\n newResult[${k}] = ${id}.value;\n }\n \n `);\n\t\t}\n\t\tdoc.write(`payload.value = newResult;`);\n\t\tdoc.write(`return payload;`);\n\t\tconst fn = doc.compile();\n\t\treturn (payload, ctx) => fn(shape, payload, ctx);\n\t};\n\tlet fastpass;\n\tconst isObject$1 = isObject;\n\tconst jit = !globalConfig.jitless;\n\tconst allowsEval$1 = allowsEval;\n\tconst fastEnabled = jit && allowsEval$1.value;\n\tconst catchall = def.catchall;\n\tlet value;\n\tinst._zod.parse = (payload, ctx) => {\n\t\tvalue ?? (value = _normalized.value);\n\t\tconst input = payload.value;\n\t\tif (!isObject$1(input)) {\n\t\t\tpayload.issues.push({\n\t\t\t\texpected: \"object\",\n\t\t\t\tcode: \"invalid_type\",\n\t\t\t\tinput,\n\t\t\t\tinst\n\t\t\t});\n\t\t\treturn payload;\n\t\t}\n\t\tif (jit && fastEnabled && ctx?.async === false && ctx.jitless !== true) {\n\t\t\tif (!fastpass) fastpass = generateFastpass(def.shape);\n\t\t\tpayload = fastpass(payload, ctx);\n\t\t\tif (!catchall) return payload;\n\t\t\treturn handleCatchall([], input, payload, ctx, value, inst);\n\t\t}\n\t\treturn superParse(payload, ctx);\n\t};\n});\nfunction handleUnionResults(results, final, inst, ctx) {\n\tfor (const result of results) if (result.issues.length === 0) {\n\t\tfinal.value = result.value;\n\t\treturn final;\n\t}\n\tconst nonaborted = results.filter((r) => !aborted(r));\n\tif (nonaborted.length === 1) {\n\t\tfinal.value = nonaborted[0].value;\n\t\treturn nonaborted[0];\n\t}\n\tfinal.issues.push({\n\t\tcode: \"invalid_union\",\n\t\tinput: final.value,\n\t\tinst,\n\t\terrors: results.map((result) => result.issues.map((iss) => finalizeIssue(iss, ctx, config())))\n\t});\n\treturn final;\n}\nconst $ZodUnion = /* @__PURE__ */ $constructor(\"$ZodUnion\", (inst, def) => {\n\t$ZodType.init(inst, def);\n\tdefineLazy(inst._zod, \"optin\", () => def.options.some((o) => o._zod.optin === \"optional\") ? \"optional\" : void 0);\n\tdefineLazy(inst._zod, \"optout\", () => def.options.some((o) => o._zod.optout === \"optional\") ? \"optional\" : void 0);\n\tdefineLazy(inst._zod, \"values\", () => {\n\t\tif (def.options.every((o) => o._zod.values)) return new Set(def.options.flatMap((option) => Array.from(option._zod.values)));\n\t});\n\tdefineLazy(inst._zod, \"pattern\", () => {\n\t\tif (def.options.every((o) => o._zod.pattern)) {\n\t\t\tconst patterns = def.options.map((o) => o._zod.pattern);\n\t\t\treturn /* @__PURE__ */ new RegExp(`^(${patterns.map((p) => cleanRegex(p.source)).join(\"|\")})$`);\n\t\t}\n\t});\n\tconst single = def.options.length === 1;\n\tconst first = def.options[0]._zod.run;\n\tinst._zod.parse = (payload, ctx) => {\n\t\tif (single) return first(payload, ctx);\n\t\tlet async = false;\n\t\tconst results = [];\n\t\tfor (const option of def.options) {\n\t\t\tconst result = option._zod.run({\n\t\t\t\tvalue: payload.value,\n\t\t\t\tissues: []\n\t\t\t}, ctx);\n\t\t\tif (result instanceof Promise) {\n\t\t\t\tresults.push(result);\n\t\t\t\tasync = true;\n\t\t\t} else {\n\t\t\t\tif (result.issues.length === 0) return result;\n\t\t\t\tresults.push(result);\n\t\t\t}\n\t\t}\n\t\tif (!async) return handleUnionResults(results, payload, inst, ctx);\n\t\treturn Promise.all(results).then((results$1) => {\n\t\t\treturn handleUnionResults(results$1, payload, inst, ctx);\n\t\t});\n\t};\n});\nconst $ZodDiscriminatedUnion = /* @__PURE__ */ $constructor(\"$ZodDiscriminatedUnion\", (inst, def) => {\n\tdef.inclusive = false;\n\t$ZodUnion.init(inst, def);\n\tconst _super = inst._zod.parse;\n\tdefineLazy(inst._zod, \"propValues\", () => {\n\t\tconst propValues = {};\n\t\tfor (const option of def.options) {\n\t\t\tconst pv = option._zod.propValues;\n\t\t\tif (!pv || Object.keys(pv).length === 0) throw new Error(`Invalid discriminated union option at index \"${def.options.indexOf(option)}\"`);\n\t\t\tfor (const [k, v] of Object.entries(pv)) {\n\t\t\t\tif (!propValues[k]) propValues[k] = /* @__PURE__ */ new Set();\n\t\t\t\tfor (const val of v) propValues[k].add(val);\n\t\t\t}\n\t\t}\n\t\treturn propValues;\n\t});\n\tconst disc = cached(() => {\n\t\tconst opts = def.options;\n\t\tconst map = /* @__PURE__ */ new Map();\n\t\tfor (const o of opts) {\n\t\t\tconst values = o._zod.propValues?.[def.discriminator];\n\t\t\tif (!values || values.size === 0) throw new Error(`Invalid discriminated union option at index \"${def.options.indexOf(o)}\"`);\n\t\t\tfor (const v of values) {\n\t\t\t\tif (map.has(v)) throw new Error(`Duplicate discriminator value \"${String(v)}\"`);\n\t\t\t\tmap.set(v, o);\n\t\t\t}\n\t\t}\n\t\treturn map;\n\t});\n\tinst._zod.parse = (payload, ctx) => {\n\t\tconst input = payload.value;\n\t\tif (!isObject(input)) {\n\t\t\tpayload.issues.push({\n\t\t\t\tcode: \"invalid_type\",\n\t\t\t\texpected: \"object\",\n\t\t\t\tinput,\n\t\t\t\tinst\n\t\t\t});\n\t\t\treturn payload;\n\t\t}\n\t\tconst opt = disc.value.get(input?.[def.discriminator]);\n\t\tif (opt) return opt._zod.run(payload, ctx);\n\t\tif (def.unionFallback) return _super(payload, ctx);\n\t\tpayload.issues.push({\n\t\t\tcode: \"invalid_union\",\n\t\t\terrors: [],\n\t\t\tnote: \"No matching discriminator\",\n\t\t\tdiscriminator: def.discriminator,\n\t\t\tinput,\n\t\t\tpath: [def.discriminator],\n\t\t\tinst\n\t\t});\n\t\treturn payload;\n\t};\n});\nconst $ZodIntersection = /* @__PURE__ */ $constructor(\"$ZodIntersection\", (inst, def) => {\n\t$ZodType.init(inst, def);\n\tinst._zod.parse = (payload, ctx) => {\n\t\tconst input = payload.value;\n\t\tconst left = def.left._zod.run({\n\t\t\tvalue: input,\n\t\t\tissues: []\n\t\t}, ctx);\n\t\tconst right = def.right._zod.run({\n\t\t\tvalue: input,\n\t\t\tissues: []\n\t\t}, ctx);\n\t\tif (left instanceof Promise || right instanceof Promise) return Promise.all([left, right]).then(([left$1, right$1]) => {\n\t\t\treturn handleIntersectionResults(payload, left$1, right$1);\n\t\t});\n\t\treturn handleIntersectionResults(payload, left, right);\n\t};\n});\nfunction mergeValues(a, b) {\n\tif (a === b) return {\n\t\tvalid: true,\n\t\tdata: a\n\t};\n\tif (a instanceof Date && b instanceof Date && +a === +b) return {\n\t\tvalid: true,\n\t\tdata: a\n\t};\n\tif (isPlainObject(a) && isPlainObject(b)) {\n\t\tconst bKeys = Object.keys(b);\n\t\tconst sharedKeys = Object.keys(a).filter((key) => bKeys.indexOf(key) !== -1);\n\t\tconst newObj = {\n\t\t\t...a,\n\t\t\t...b\n\t\t};\n\t\tfor (const key of sharedKeys) {\n\t\t\tconst sharedValue = mergeValues(a[key], b[key]);\n\t\t\tif (!sharedValue.valid) return {\n\t\t\t\tvalid: false,\n\t\t\t\tmergeErrorPath: [key, ...sharedValue.mergeErrorPath]\n\t\t\t};\n\t\t\tnewObj[key] = sharedValue.data;\n\t\t}\n\t\treturn {\n\t\t\tvalid: true,\n\t\t\tdata: newObj\n\t\t};\n\t}\n\tif (Array.isArray(a) && Array.isArray(b)) {\n\t\tif (a.length !== b.length) return {\n\t\t\tvalid: false,\n\t\t\tmergeErrorPath: []\n\t\t};\n\t\tconst newArray = [];\n\t\tfor (let index = 0; index < a.length; index++) {\n\t\t\tconst itemA = a[index];\n\t\t\tconst itemB = b[index];\n\t\t\tconst sharedValue = mergeValues(itemA, itemB);\n\t\t\tif (!sharedValue.valid) return {\n\t\t\t\tvalid: false,\n\t\t\t\tmergeErrorPath: [index, ...sharedValue.mergeErrorPath]\n\t\t\t};\n\t\t\tnewArray.push(sharedValue.data);\n\t\t}\n\t\treturn {\n\t\t\tvalid: true,\n\t\t\tdata: newArray\n\t\t};\n\t}\n\treturn {\n\t\tvalid: false,\n\t\tmergeErrorPath: []\n\t};\n}\nfunction handleIntersectionResults(result, left, right) {\n\tconst unrecKeys = /* @__PURE__ */ new Map();\n\tlet unrecIssue;\n\tfor (const iss of left.issues) if (iss.code === \"unrecognized_keys\") {\n\t\tunrecIssue ?? (unrecIssue = iss);\n\t\tfor (const k of iss.keys) {\n\t\t\tif (!unrecKeys.has(k)) unrecKeys.set(k, {});\n\t\t\tunrecKeys.get(k).l = true;\n\t\t}\n\t} else result.issues.push(iss);\n\tfor (const iss of right.issues) if (iss.code === \"unrecognized_keys\") for (const k of iss.keys) {\n\t\tif (!unrecKeys.has(k)) unrecKeys.set(k, {});\n\t\tunrecKeys.get(k).r = true;\n\t}\n\telse result.issues.push(iss);\n\tconst bothKeys = [...unrecKeys].filter(([, f]) => f.l && f.r).map(([k]) => k);\n\tif (bothKeys.length && unrecIssue) result.issues.push({\n\t\t...unrecIssue,\n\t\tkeys: bothKeys\n\t});\n\tif (aborted(result)) return result;\n\tconst merged = mergeValues(left.value, right.value);\n\tif (!merged.valid) throw new Error(`Unmergable intersection. Error path: ${JSON.stringify(merged.mergeErrorPath)}`);\n\tresult.value = merged.data;\n\treturn result;\n}\nconst $ZodTuple = /* @__PURE__ */ $constructor(\"$ZodTuple\", (inst, def) => {\n\t$ZodType.init(inst, def);\n\tconst items = def.items;\n\tinst._zod.parse = (payload, ctx) => {\n\t\tconst input = payload.value;\n\t\tif (!Array.isArray(input)) {\n\t\t\tpayload.issues.push({\n\t\t\t\tinput,\n\t\t\t\tinst,\n\t\t\t\texpected: \"tuple\",\n\t\t\t\tcode: \"invalid_type\"\n\t\t\t});\n\t\t\treturn payload;\n\t\t}\n\t\tpayload.value = [];\n\t\tconst proms = [];\n\t\tconst reversedIndex = [...items].reverse().findIndex((item) => item._zod.optin !== \"optional\");\n\t\tconst optStart = reversedIndex === -1 ? 0 : items.length - reversedIndex;\n\t\tif (!def.rest) {\n\t\t\tconst tooBig = input.length > items.length;\n\t\t\tconst tooSmall = input.length < optStart - 1;\n\t\t\tif (tooBig || tooSmall) {\n\t\t\t\tpayload.issues.push({\n\t\t\t\t\t...tooBig ? {\n\t\t\t\t\t\tcode: \"too_big\",\n\t\t\t\t\t\tmaximum: items.length,\n\t\t\t\t\t\tinclusive: true\n\t\t\t\t\t} : {\n\t\t\t\t\t\tcode: \"too_small\",\n\t\t\t\t\t\tminimum: items.length\n\t\t\t\t\t},\n\t\t\t\t\tinput,\n\t\t\t\t\tinst,\n\t\t\t\t\torigin: \"array\"\n\t\t\t\t});\n\t\t\t\treturn payload;\n\t\t\t}\n\t\t}\n\t\tlet i = -1;\n\t\tfor (const item of items) {\n\t\t\ti++;\n\t\t\tif (i >= input.length) {\n\t\t\t\tif (i >= optStart) continue;\n\t\t\t}\n\t\t\tconst result = item._zod.run({\n\t\t\t\tvalue: input[i],\n\t\t\t\tissues: []\n\t\t\t}, ctx);\n\t\t\tif (result instanceof Promise) proms.push(result.then((result$1) => handleTupleResult(result$1, payload, i)));\n\t\t\telse handleTupleResult(result, payload, i);\n\t\t}\n\t\tif (def.rest) {\n\t\t\tconst rest = input.slice(items.length);\n\t\t\tfor (const el of rest) {\n\t\t\t\ti++;\n\t\t\t\tconst result = def.rest._zod.run({\n\t\t\t\t\tvalue: el,\n\t\t\t\t\tissues: []\n\t\t\t\t}, ctx);\n\t\t\t\tif (result instanceof Promise) proms.push(result.then((result$1) => handleTupleResult(result$1, payload, i)));\n\t\t\t\telse handleTupleResult(result, payload, i);\n\t\t\t}\n\t\t}\n\t\tif (proms.length) return Promise.all(proms).then(() => payload);\n\t\treturn payload;\n\t};\n});\nfunction handleTupleResult(result, final, index) {\n\tif (result.issues.length) final.issues.push(...prefixIssues(index, result.issues));\n\tfinal.value[index] = result.value;\n}\nconst $ZodRecord = /* @__PURE__ */ $constructor(\"$ZodRecord\", (inst, def) => {\n\t$ZodType.init(inst, def);\n\tinst._zod.parse = (payload, ctx) => {\n\t\tconst input = payload.value;\n\t\tif (!isPlainObject(input)) {\n\t\t\tpayload.issues.push({\n\t\t\t\texpected: \"record\",\n\t\t\t\tcode: \"invalid_type\",\n\t\t\t\tinput,\n\t\t\t\tinst\n\t\t\t});\n\t\t\treturn payload;\n\t\t}\n\t\tconst proms = [];\n\t\tconst values = def.keyType._zod.values;\n\t\tif (values) {\n\t\t\tpayload.value = {};\n\t\t\tconst recordKeys = /* @__PURE__ */ new Set();\n\t\t\tfor (const key of values) if (typeof key === \"string\" || typeof key === \"number\" || typeof key === \"symbol\") {\n\t\t\t\trecordKeys.add(typeof key === \"number\" ? key.toString() : key);\n\t\t\t\tconst result = def.valueType._zod.run({\n\t\t\t\t\tvalue: input[key],\n\t\t\t\t\tissues: []\n\t\t\t\t}, ctx);\n\t\t\t\tif (result instanceof Promise) proms.push(result.then((result$1) => {\n\t\t\t\t\tif (result$1.issues.length) payload.issues.push(...prefixIssues(key, result$1.issues));\n\t\t\t\t\tpayload.value[key] = result$1.value;\n\t\t\t\t}));\n\t\t\t\telse {\n\t\t\t\t\tif (result.issues.length) payload.issues.push(...prefixIssues(key, result.issues));\n\t\t\t\t\tpayload.value[key] = result.value;\n\t\t\t\t}\n\t\t\t}\n\t\t\tlet unrecognized;\n\t\t\tfor (const key in input) if (!recordKeys.has(key)) {\n\t\t\t\tunrecognized = unrecognized ?? [];\n\t\t\t\tunrecognized.push(key);\n\t\t\t}\n\t\t\tif (unrecognized && unrecognized.length > 0) payload.issues.push({\n\t\t\t\tcode: \"unrecognized_keys\",\n\t\t\t\tinput,\n\t\t\t\tinst,\n\t\t\t\tkeys: unrecognized\n\t\t\t});\n\t\t} else {\n\t\t\tpayload.value = {};\n\t\t\tfor (const key of Reflect.ownKeys(input)) {\n\t\t\t\tif (key === \"__proto__\") continue;\n\t\t\t\tlet keyResult = def.keyType._zod.run({\n\t\t\t\t\tvalue: key,\n\t\t\t\t\tissues: []\n\t\t\t\t}, ctx);\n\t\t\t\tif (keyResult instanceof Promise) throw new Error(\"Async schemas not supported in object keys currently\");\n\t\t\t\tif (typeof key === \"string\" && number$1.test(key) && keyResult.issues.length) {\n\t\t\t\t\tconst retryResult = def.keyType._zod.run({\n\t\t\t\t\t\tvalue: Number(key),\n\t\t\t\t\t\tissues: []\n\t\t\t\t\t}, ctx);\n\t\t\t\t\tif (retryResult instanceof Promise) throw new Error(\"Async schemas not supported in object keys currently\");\n\t\t\t\t\tif (retryResult.issues.length === 0) keyResult = retryResult;\n\t\t\t\t}\n\t\t\t\tif (keyResult.issues.length) {\n\t\t\t\t\tif (def.mode === \"loose\") payload.value[key] = input[key];\n\t\t\t\t\telse payload.issues.push({\n\t\t\t\t\t\tcode: \"invalid_key\",\n\t\t\t\t\t\torigin: \"record\",\n\t\t\t\t\t\tissues: keyResult.issues.map((iss) => finalizeIssue(iss, ctx, config())),\n\t\t\t\t\t\tinput: key,\n\t\t\t\t\t\tpath: [key],\n\t\t\t\t\t\tinst\n\t\t\t\t\t});\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tconst result = def.valueType._zod.run({\n\t\t\t\t\tvalue: input[key],\n\t\t\t\t\tissues: []\n\t\t\t\t}, ctx);\n\t\t\t\tif (result instanceof Promise) proms.push(result.then((result$1) => {\n\t\t\t\t\tif (result$1.issues.length) payload.issues.push(...prefixIssues(key, result$1.issues));\n\t\t\t\t\tpayload.value[keyResult.value] = result$1.value;\n\t\t\t\t}));\n\t\t\t\telse {\n\t\t\t\t\tif (result.issues.length) payload.issues.push(...prefixIssues(key, result.issues));\n\t\t\t\t\tpayload.value[keyResult.value] = result.value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (proms.length) return Promise.all(proms).then(() => payload);\n\t\treturn payload;\n\t};\n});\nconst $ZodEnum = /* @__PURE__ */ $constructor(\"$ZodEnum\", (inst, def) => {\n\t$ZodType.init(inst, def);\n\tconst values = getEnumValues(def.entries);\n\tconst valuesSet = new Set(values);\n\tinst._zod.values = valuesSet;\n\tinst._zod.pattern = /* @__PURE__ */ new RegExp(`^(${values.filter((k) => propertyKeyTypes.has(typeof k)).map((o) => typeof o === \"string\" ? escapeRegex(o) : o.toString()).join(\"|\")})$`);\n\tinst._zod.parse = (payload, _ctx) => {\n\t\tconst input = payload.value;\n\t\tif (valuesSet.has(input)) return payload;\n\t\tpayload.issues.push({\n\t\t\tcode: \"invalid_value\",\n\t\t\tvalues,\n\t\t\tinput,\n\t\t\tinst\n\t\t});\n\t\treturn payload;\n\t};\n});\nconst $ZodLiteral = /* @__PURE__ */ $constructor(\"$ZodLiteral\", (inst, def) => {\n\t$ZodType.init(inst, def);\n\tif (def.values.length === 0) throw new Error(\"Cannot create literal schema with no valid values\");\n\tconst values = new Set(def.values);\n\tinst._zod.values = values;\n\tinst._zod.pattern = /* @__PURE__ */ new RegExp(`^(${def.values.map((o) => typeof o === \"string\" ? escapeRegex(o) : o ? escapeRegex(o.toString()) : String(o)).join(\"|\")})$`);\n\tinst._zod.parse = (payload, _ctx) => {\n\t\tconst input = payload.value;\n\t\tif (values.has(input)) return payload;\n\t\tpayload.issues.push({\n\t\t\tcode: \"invalid_value\",\n\t\t\tvalues: def.values,\n\t\t\tinput,\n\t\t\tinst\n\t\t});\n\t\treturn payload;\n\t};\n});\nconst $ZodTransform = /* @__PURE__ */ $constructor(\"$ZodTransform\", (inst, def) => {\n\t$ZodType.init(inst, def);\n\tinst._zod.parse = (payload, ctx) => {\n\t\tif (ctx.direction === \"backward\") throw new $ZodEncodeError(inst.constructor.name);\n\t\tconst _out = def.transform(payload.value, payload);\n\t\tif (ctx.async) return (_out instanceof Promise ? _out : Promise.resolve(_out)).then((output) => {\n\t\t\tpayload.value = output;\n\t\t\treturn payload;\n\t\t});\n\t\tif (_out instanceof Promise) throw new $ZodAsyncError();\n\t\tpayload.value = _out;\n\t\treturn payload;\n\t};\n});\nfunction handleOptionalResult(result, input) {\n\tif (result.issues.length && input === void 0) return {\n\t\tissues: [],\n\t\tvalue: void 0\n\t};\n\treturn result;\n}\nconst $ZodOptional = /* @__PURE__ */ $constructor(\"$ZodOptional\", (inst, def) => {\n\t$ZodType.init(inst, def);\n\tinst._zod.optin = \"optional\";\n\tinst._zod.optout = \"optional\";\n\tdefineLazy(inst._zod, \"values\", () => {\n\t\treturn def.innerType._zod.values ? new Set([...def.innerType._zod.values, void 0]) : void 0;\n\t});\n\tdefineLazy(inst._zod, \"pattern\", () => {\n\t\tconst pattern = def.innerType._zod.pattern;\n\t\treturn pattern ? /* @__PURE__ */ new RegExp(`^(${cleanRegex(pattern.source)})?$`) : void 0;\n\t});\n\tinst._zod.parse = (payload, ctx) => {\n\t\tif (def.innerType._zod.optin === \"optional\") {\n\t\t\tconst result = def.innerType._zod.run(payload, ctx);\n\t\t\tif (result instanceof Promise) return result.then((r) => handleOptionalResult(r, payload.value));\n\t\t\treturn handleOptionalResult(result, payload.value);\n\t\t}\n\t\tif (payload.value === void 0) return payload;\n\t\treturn def.innerType._zod.run(payload, ctx);\n\t};\n});\nconst $ZodExactOptional = /* @__PURE__ */ $constructor(\"$ZodExactOptional\", (inst, def) => {\n\t$ZodOptional.init(inst, def);\n\tdefineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n\tdefineLazy(inst._zod, \"pattern\", () => def.innerType._zod.pattern);\n\tinst._zod.parse = (payload, ctx) => {\n\t\treturn def.innerType._zod.run(payload, ctx);\n\t};\n});\nconst $ZodNullable = /* @__PURE__ */ $constructor(\"$ZodNullable\", (inst, def) => {\n\t$ZodType.init(inst, def);\n\tdefineLazy(inst._zod, \"optin\", () => def.innerType._zod.optin);\n\tdefineLazy(inst._zod, \"optout\", () => def.innerType._zod.optout);\n\tdefineLazy(inst._zod, \"pattern\", () => {\n\t\tconst pattern = def.innerType._zod.pattern;\n\t\treturn pattern ? /* @__PURE__ */ new RegExp(`^(${cleanRegex(pattern.source)}|null)$`) : void 0;\n\t});\n\tdefineLazy(inst._zod, \"values\", () => {\n\t\treturn def.innerType._zod.values ? new Set([...def.innerType._zod.values, null]) : void 0;\n\t});\n\tinst._zod.parse = (payload, ctx) => {\n\t\tif (payload.value === null) return payload;\n\t\treturn def.innerType._zod.run(payload, ctx);\n\t};\n});\nconst $ZodDefault = /* @__PURE__ */ $constructor(\"$ZodDefault\", (inst, def) => {\n\t$ZodType.init(inst, def);\n\tinst._zod.optin = \"optional\";\n\tdefineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n\tinst._zod.parse = (payload, ctx) => {\n\t\tif (ctx.direction === \"backward\") return def.innerType._zod.run(payload, ctx);\n\t\tif (payload.value === void 0) {\n\t\t\tpayload.value = def.defaultValue;\n\t\t\t/**\n\t\t\t* $ZodDefault returns the default value immediately in forward direction.\n\t\t\t* It doesn't pass the default value into the validator (\"prefault\"). There's no reason to pass the default value through validation. The validity of the default is enforced by TypeScript statically. Otherwise, it's the responsibility of the user to ensure the default is valid. In the case of pipes with divergent in/out types, you can specify the default on the `in` schema of your ZodPipe to set a \"prefault\" for the pipe. */\n\t\t\treturn payload;\n\t\t}\n\t\tconst result = def.innerType._zod.run(payload, ctx);\n\t\tif (result instanceof Promise) return result.then((result$1) => handleDefaultResult(result$1, def));\n\t\treturn handleDefaultResult(result, def);\n\t};\n});\nfunction handleDefaultResult(payload, def) {\n\tif (payload.value === void 0) payload.value = def.defaultValue;\n\treturn payload;\n}\nconst $ZodPrefault = /* @__PURE__ */ $constructor(\"$ZodPrefault\", (inst, def) => {\n\t$ZodType.init(inst, def);\n\tinst._zod.optin = \"optional\";\n\tdefineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n\tinst._zod.parse = (payload, ctx) => {\n\t\tif (ctx.direction === \"backward\") return def.innerType._zod.run(payload, ctx);\n\t\tif (payload.value === void 0) payload.value = def.defaultValue;\n\t\treturn def.innerType._zod.run(payload, ctx);\n\t};\n});\nconst $ZodNonOptional = /* @__PURE__ */ $constructor(\"$ZodNonOptional\", (inst, def) => {\n\t$ZodType.init(inst, def);\n\tdefineLazy(inst._zod, \"values\", () => {\n\t\tconst v = def.innerType._zod.values;\n\t\treturn v ? new Set([...v].filter((x) => x !== void 0)) : void 0;\n\t});\n\tinst._zod.parse = (payload, ctx) => {\n\t\tconst result = def.innerType._zod.run(payload, ctx);\n\t\tif (result instanceof Promise) return result.then((result$1) => handleNonOptionalResult(result$1, inst));\n\t\treturn handleNonOptionalResult(result, inst);\n\t};\n});\nfunction handleNonOptionalResult(payload, inst) {\n\tif (!payload.issues.length && payload.value === void 0) payload.issues.push({\n\t\tcode: \"invalid_type\",\n\t\texpected: \"nonoptional\",\n\t\tinput: payload.value,\n\t\tinst\n\t});\n\treturn payload;\n}\nconst $ZodCatch = /* @__PURE__ */ $constructor(\"$ZodCatch\", (inst, def) => {\n\t$ZodType.init(inst, def);\n\tdefineLazy(inst._zod, \"optin\", () => def.innerType._zod.optin);\n\tdefineLazy(inst._zod, \"optout\", () => def.innerType._zod.optout);\n\tdefineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n\tinst._zod.parse = (payload, ctx) => {\n\t\tif (ctx.direction === \"backward\") return def.innerType._zod.run(payload, ctx);\n\t\tconst result = def.innerType._zod.run(payload, ctx);\n\t\tif (result instanceof Promise) return result.then((result$1) => {\n\t\t\tpayload.value = result$1.value;\n\t\t\tif (result$1.issues.length) {\n\t\t\t\tpayload.value = def.catchValue({\n\t\t\t\t\t...payload,\n\t\t\t\t\terror: { issues: result$1.issues.map((iss) => finalizeIssue(iss, ctx, config())) },\n\t\t\t\t\tinput: payload.value\n\t\t\t\t});\n\t\t\t\tpayload.issues = [];\n\t\t\t}\n\t\t\treturn payload;\n\t\t});\n\t\tpayload.value = result.value;\n\t\tif (result.issues.length) {\n\t\t\tpayload.value = def.catchValue({\n\t\t\t\t...payload,\n\t\t\t\terror: { issues: result.issues.map((iss) => finalizeIssue(iss, ctx, config())) },\n\t\t\t\tinput: payload.value\n\t\t\t});\n\t\t\tpayload.issues = [];\n\t\t}\n\t\treturn payload;\n\t};\n});\nconst $ZodPipe = /* @__PURE__ */ $constructor(\"$ZodPipe\", (inst, def) => {\n\t$ZodType.init(inst, def);\n\tdefineLazy(inst._zod, \"values\", () => def.in._zod.values);\n\tdefineLazy(inst._zod, \"optin\", () => def.in._zod.optin);\n\tdefineLazy(inst._zod, \"optout\", () => def.out._zod.optout);\n\tdefineLazy(inst._zod, \"propValues\", () => def.in._zod.propValues);\n\tinst._zod.parse = (payload, ctx) => {\n\t\tif (ctx.direction === \"backward\") {\n\t\t\tconst right = def.out._zod.run(payload, ctx);\n\t\t\tif (right instanceof Promise) return right.then((right$1) => handlePipeResult(right$1, def.in, ctx));\n\t\t\treturn handlePipeResult(right, def.in, ctx);\n\t\t}\n\t\tconst left = def.in._zod.run(payload, ctx);\n\t\tif (left instanceof Promise) return left.then((left$1) => handlePipeResult(left$1, def.out, ctx));\n\t\treturn handlePipeResult(left, def.out, ctx);\n\t};\n});\nfunction handlePipeResult(left, next, ctx) {\n\tif (left.issues.length) {\n\t\tleft.aborted = true;\n\t\treturn left;\n\t}\n\treturn next._zod.run({\n\t\tvalue: left.value,\n\t\tissues: left.issues\n\t}, ctx);\n}\nconst $ZodReadonly = /* @__PURE__ */ $constructor(\"$ZodReadonly\", (inst, def) => {\n\t$ZodType.init(inst, def);\n\tdefineLazy(inst._zod, \"propValues\", () => def.innerType._zod.propValues);\n\tdefineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n\tdefineLazy(inst._zod, \"optin\", () => def.innerType?._zod?.optin);\n\tdefineLazy(inst._zod, \"optout\", () => def.innerType?._zod?.optout);\n\tinst._zod.parse = (payload, ctx) => {\n\t\tif (ctx.direction === \"backward\") return def.innerType._zod.run(payload, ctx);\n\t\tconst result = def.innerType._zod.run(payload, ctx);\n\t\tif (result instanceof Promise) return result.then(handleReadonlyResult);\n\t\treturn handleReadonlyResult(result);\n\t};\n});\nfunction handleReadonlyResult(payload) {\n\tpayload.value = Object.freeze(payload.value);\n\treturn payload;\n}\nconst $ZodCustom = /* @__PURE__ */ $constructor(\"$ZodCustom\", (inst, def) => {\n\t$ZodCheck.init(inst, def);\n\t$ZodType.init(inst, def);\n\tinst._zod.parse = (payload, _) => {\n\t\treturn payload;\n\t};\n\tinst._zod.check = (payload) => {\n\t\tconst input = payload.value;\n\t\tconst r = def.fn(input);\n\t\tif (r instanceof Promise) return r.then((r$1) => handleRefineResult(r$1, payload, input, inst));\n\t\thandleRefineResult(r, payload, input, inst);\n\t};\n});\nfunction handleRefineResult(result, payload, input, inst) {\n\tif (!result) {\n\t\tconst _iss = {\n\t\t\tcode: \"custom\",\n\t\t\tinput,\n\t\t\tinst,\n\t\t\tpath: [...inst._zod.def.path ?? []],\n\t\t\tcontinue: !inst._zod.def.abort\n\t\t};\n\t\tif (inst._zod.def.params) _iss.params = inst._zod.def.params;\n\t\tpayload.issues.push(issue(_iss));\n\t}\n}\n\n//#endregion\n//#region ../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/registries.js\nvar _a;\nvar $ZodRegistry = class {\n\tconstructor() {\n\t\tthis._map = /* @__PURE__ */ new WeakMap();\n\t\tthis._idmap = /* @__PURE__ */ new Map();\n\t}\n\tadd(schema, ..._meta) {\n\t\tconst meta$2 = _meta[0];\n\t\tthis._map.set(schema, meta$2);\n\t\tif (meta$2 && typeof meta$2 === \"object\" && \"id\" in meta$2) this._idmap.set(meta$2.id, schema);\n\t\treturn this;\n\t}\n\tclear() {\n\t\tthis._map = /* @__PURE__ */ new WeakMap();\n\t\tthis._idmap = /* @__PURE__ */ new Map();\n\t\treturn this;\n\t}\n\tremove(schema) {\n\t\tconst meta$2 = this._map.get(schema);\n\t\tif (meta$2 && typeof meta$2 === \"object\" && \"id\" in meta$2) this._idmap.delete(meta$2.id);\n\t\tthis._map.delete(schema);\n\t\treturn this;\n\t}\n\tget(schema) {\n\t\tconst p = schema._zod.parent;\n\t\tif (p) {\n\t\t\tconst pm = { ...this.get(p) ?? {} };\n\t\t\tdelete pm.id;\n\t\t\tconst f = {\n\t\t\t\t...pm,\n\t\t\t\t...this._map.get(schema)\n\t\t\t};\n\t\t\treturn Object.keys(f).length ? f : void 0;\n\t\t}\n\t\treturn this._map.get(schema);\n\t}\n\thas(schema) {\n\t\treturn this._map.has(schema);\n\t}\n};\nfunction registry() {\n\treturn new $ZodRegistry();\n}\n(_a = globalThis).__zod_globalRegistry ?? (_a.__zod_globalRegistry = registry());\nconst globalRegistry = globalThis.__zod_globalRegistry;\n\n//#endregion\n//#region ../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/api.js\n/* @__NO_SIDE_EFFECTS__ */\nfunction _string(Class, params) {\n\treturn new Class({\n\t\ttype: \"string\",\n\t\t...normalizeParams(params)\n\t});\n}\n/* @__NO_SIDE_EFFECTS__ */\nfunction _email(Class, params) {\n\treturn new Class({\n\t\ttype: \"string\",\n\t\tformat: \"email\",\n\t\tcheck: \"string_format\",\n\t\tabort: false,\n\t\t...normalizeParams(params)\n\t});\n}\n/* @__NO_SIDE_EFFECTS__ */\nfunction _guid(Class, params) {\n\treturn new Class({\n\t\ttype: \"string\",\n\t\tformat: \"guid\",\n\t\tcheck: \"string_format\",\n\t\tabort: false,\n\t\t...normalizeParams(params)\n\t});\n}\n/* @__NO_SIDE_EFFECTS__ */\nfunction _uuid(Class, params) {\n\treturn new Class({\n\t\ttype: \"string\",\n\t\tformat: \"uuid\",\n\t\tcheck: \"string_format\",\n\t\tabort: false,\n\t\t...normalizeParams(params)\n\t});\n}\n/* @__NO_SIDE_EFFECTS__ */\nfunction _uuidv4(Class, params) {\n\treturn new Class({\n\t\ttype: \"string\",\n\t\tformat: \"uuid\",\n\t\tcheck: \"string_format\",\n\t\tabort: false,\n\t\tversion: \"v4\",\n\t\t...normalizeParams(params)\n\t});\n}\n/* @__NO_SIDE_EFFECTS__ */\nfunction _uuidv6(Class, params) {\n\treturn new Class({\n\t\ttype: \"string\",\n\t\tformat: \"uuid\",\n\t\tcheck: \"string_format\",\n\t\tabort: false,\n\t\tversion: \"v6\",\n\t\t...normalizeParams(params)\n\t});\n}\n/* @__NO_SIDE_EFFECTS__ */\nfunction _uuidv7(Class, params) {\n\treturn new Class({\n\t\ttype: \"string\",\n\t\tformat: \"uuid\",\n\t\tcheck: \"string_format\",\n\t\tabort: false,\n\t\tversion: \"v7\",\n\t\t...normalizeParams(params)\n\t});\n}\n/* @__NO_SIDE_EFFECTS__ */\nfunction _url(Class, params) {\n\treturn new Class({\n\t\ttype: \"string\",\n\t\tformat: \"url\",\n\t\tcheck: \"string_format\",\n\t\tabort: false,\n\t\t...normalizeParams(params)\n\t});\n}\n/* @__NO_SIDE_EFFECTS__ */\nfunction _emoji(Class, params) {\n\treturn new Class({\n\t\ttype: \"string\",\n\t\tformat: \"emoji\",\n\t\tcheck: \"string_format\",\n\t\tabort: false,\n\t\t...normalizeParams(params)\n\t});\n}\n/* @__NO_SIDE_EFFECTS__ */\nfunction _nanoid(Class, params) {\n\treturn new Class({\n\t\ttype: \"string\",\n\t\tformat: \"nanoid\",\n\t\tcheck: \"string_format\",\n\t\tabort: false,\n\t\t...normalizeParams(params)\n\t});\n}\n/* @__NO_SIDE_EFFECTS__ */\nfunction _cuid(Class, params) {\n\treturn new Class({\n\t\ttype: \"string\",\n\t\tformat: \"cuid\",\n\t\tcheck: \"string_format\",\n\t\tabort: false,\n\t\t...normalizeParams(params)\n\t});\n}\n/* @__NO_SIDE_EFFECTS__ */\nfunction _cuid2(Class, params) {\n\treturn new Class({\n\t\ttype: \"string\",\n\t\tformat: \"cuid2\",\n\t\tcheck: \"string_format\",\n\t\tabort: false,\n\t\t...normalizeParams(params)\n\t});\n}\n/* @__NO_SIDE_EFFECTS__ */\nfunction _ulid(Class, params) {\n\treturn new Class({\n\t\ttype: \"string\",\n\t\tformat: \"ulid\",\n\t\tcheck: \"string_format\",\n\t\tabort: false,\n\t\t...normalizeParams(params)\n\t});\n}\n/* @__NO_SIDE_EFFECTS__ */\nfunction _xid(Class, params) {\n\treturn new Class({\n\t\ttype: \"string\",\n\t\tformat: \"xid\",\n\t\tcheck: \"string_format\",\n\t\tabort: false,\n\t\t...normalizeParams(params)\n\t});\n}\n/* @__NO_SIDE_EFFECTS__ */\nfunction _ksuid(Class, params) {\n\treturn new Class({\n\t\ttype: \"string\",\n\t\tformat: \"ksuid\",\n\t\tcheck: \"string_format\",\n\t\tabort: false,\n\t\t...normalizeParams(params)\n\t});\n}\n/* @__NO_SIDE_EFFECTS__ */\nfunction _ipv4(Class, params) {\n\treturn new Class({\n\t\ttype: \"string\",\n\t\tformat: \"ipv4\",\n\t\tcheck: \"string_format\",\n\t\tabort: false,\n\t\t...normalizeParams(params)\n\t});\n}\n/* @__NO_SIDE_EFFECTS__ */\nfunction _ipv6(Class, params) {\n\treturn new Class({\n\t\ttype: \"string\",\n\t\tformat: \"ipv6\",\n\t\tcheck: \"string_format\",\n\t\tabort: false,\n\t\t...normalizeParams(params)\n\t});\n}\n/* @__NO_SIDE_EFFECTS__ */\nfunction _cidrv4(Class, params) {\n\treturn new Class({\n\t\ttype: \"string\",\n\t\tformat: \"cidrv4\",\n\t\tcheck: \"string_format\",\n\t\tabort: false,\n\t\t...normalizeParams(params)\n\t});\n}\n/* @__NO_SIDE_EFFECTS__ */\nfunction _cidrv6(Class, params) {\n\treturn new Class({\n\t\ttype: \"string\",\n\t\tformat: \"cidrv6\",\n\t\tcheck: \"string_format\",\n\t\tabort: false,\n\t\t...normalizeParams(params)\n\t});\n}\n/* @__NO_SIDE_EFFECTS__ */\nfunction _base64(Class, params) {\n\treturn new Class({\n\t\ttype: \"string\",\n\t\tformat: \"base64\",\n\t\tcheck: \"string_format\",\n\t\tabort: false,\n\t\t...normalizeParams(params)\n\t});\n}\n/* @__NO_SIDE_EFFECTS__ */\nfunction _base64url(Class, params) {\n\treturn new Class({\n\t\ttype: \"string\",\n\t\tformat: \"base64url\",\n\t\tcheck: \"string_format\",\n\t\tabort: false,\n\t\t...normalizeParams(params)\n\t});\n}\n/* @__NO_SIDE_EFFECTS__ */\nfunction _e164(Class, params) {\n\treturn new Class({\n\t\ttype: \"string\",\n\t\tformat: \"e164\",\n\t\tcheck: \"string_format\",\n\t\tabort: false,\n\t\t...normalizeParams(params)\n\t});\n}\n/* @__NO_SIDE_EFFECTS__ */\nfunction _jwt(Class, params) {\n\treturn new Class({\n\t\ttype: \"string\",\n\t\tformat: \"jwt\",\n\t\tcheck: \"string_format\",\n\t\tabort: false,\n\t\t...normalizeParams(params)\n\t});\n}\n/* @__NO_SIDE_EFFECTS__ */\nfunction _isoDateTime(Class, params) {\n\treturn new Class({\n\t\ttype: \"string\",\n\t\tformat: \"datetime\",\n\t\tcheck: \"string_format\",\n\t\toffset: false,\n\t\tlocal: false,\n\t\tprecision: null,\n\t\t...normalizeParams(params)\n\t});\n}\n/* @__NO_SIDE_EFFECTS__ */\nfunction _isoDate(Class, params) {\n\treturn new Class({\n\t\ttype: \"string\",\n\t\tformat: \"date\",\n\t\tcheck: \"string_format\",\n\t\t...normalizeParams(params)\n\t});\n}\n/* @__NO_SIDE_EFFECTS__ */\nfunction _isoTime(Class, params) {\n\treturn new Class({\n\t\ttype: \"string\",\n\t\tformat: \"time\",\n\t\tcheck: \"string_format\",\n\t\tprecision: null,\n\t\t...normalizeParams(params)\n\t});\n}\n/* @__NO_SIDE_EFFECTS__ */\nfunction _isoDuration(Class, params) {\n\treturn new Class({\n\t\ttype: \"string\",\n\t\tformat: \"duration\",\n\t\tcheck: \"string_format\",\n\t\t...normalizeParams(params)\n\t});\n}\n/* @__NO_SIDE_EFFECTS__ */\nfunction _number(Class, params) {\n\treturn new Class({\n\t\ttype: \"number\",\n\t\tchecks: [],\n\t\t...normalizeParams(params)\n\t});\n}\n/* @__NO_SIDE_EFFECTS__ */\nfunction _int(Class, params) {\n\treturn new Class({\n\t\ttype: \"number\",\n\t\tcheck: \"number_format\",\n\t\tabort: false,\n\t\tformat: \"safeint\",\n\t\t...normalizeParams(params)\n\t});\n}\n/* @__NO_SIDE_EFFECTS__ */\nfunction _boolean(Class, params) {\n\treturn new Class({\n\t\ttype: \"boolean\",\n\t\t...normalizeParams(params)\n\t});\n}\n/* @__NO_SIDE_EFFECTS__ */\nfunction _unknown(Class) {\n\treturn new Class({ type: \"unknown\" });\n}\n/* @__NO_SIDE_EFFECTS__ */\nfunction _never(Class, params) {\n\treturn new Class({\n\t\ttype: \"never\",\n\t\t...normalizeParams(params)\n\t});\n}\n/* @__NO_SIDE_EFFECTS__ */\nfunction _lt(value, params) {\n\treturn new $ZodCheckLessThan({\n\t\tcheck: \"less_than\",\n\t\t...normalizeParams(params),\n\t\tvalue,\n\t\tinclusive: false\n\t});\n}\n/* @__NO_SIDE_EFFECTS__ */\nfunction _lte(value, params) {\n\treturn new $ZodCheckLessThan({\n\t\tcheck: \"less_than\",\n\t\t...normalizeParams(params),\n\t\tvalue,\n\t\tinclusive: true\n\t});\n}\n/* @__NO_SIDE_EFFECTS__ */\nfunction _gt(value, params) {\n\treturn new $ZodCheckGreaterThan({\n\t\tcheck: \"greater_than\",\n\t\t...normalizeParams(params),\n\t\tvalue,\n\t\tinclusive: false\n\t});\n}\n/* @__NO_SIDE_EFFECTS__ */\nfunction _gte(value, params) {\n\treturn new $ZodCheckGreaterThan({\n\t\tcheck: \"greater_than\",\n\t\t...normalizeParams(params),\n\t\tvalue,\n\t\tinclusive: true\n\t});\n}\n/* @__NO_SIDE_EFFECTS__ */\nfunction _multipleOf(value, params) {\n\treturn new $ZodCheckMultipleOf({\n\t\tcheck: \"multiple_of\",\n\t\t...normalizeParams(params),\n\t\tvalue\n\t});\n}\n/* @__NO_SIDE_EFFECTS__ */\nfunction _maxLength(maximum, params) {\n\treturn new $ZodCheckMaxLength({\n\t\tcheck: \"max_length\",\n\t\t...normalizeParams(params),\n\t\tmaximum\n\t});\n}\n/* @__NO_SIDE_EFFECTS__ */\nfunction _minLength(minimum, params) {\n\treturn new $ZodCheckMinLength({\n\t\tcheck: \"min_length\",\n\t\t...normalizeParams(params),\n\t\tminimum\n\t});\n}\n/* @__NO_SIDE_EFFECTS__ */\nfunction _length(length, params) {\n\treturn new $ZodCheckLengthEquals({\n\t\tcheck: \"length_equals\",\n\t\t...normalizeParams(params),\n\t\tlength\n\t});\n}\n/* @__NO_SIDE_EFFECTS__ */\nfunction _regex(pattern, params) {\n\treturn new $ZodCheckRegex({\n\t\tcheck: \"string_format\",\n\t\tformat: \"regex\",\n\t\t...normalizeParams(params),\n\t\tpattern\n\t});\n}\n/* @__NO_SIDE_EFFECTS__ */\nfunction _lowercase(params) {\n\treturn new $ZodCheckLowerCase({\n\t\tcheck: \"string_format\",\n\t\tformat: \"lowercase\",\n\t\t...normalizeParams(params)\n\t});\n}\n/* @__NO_SIDE_EFFECTS__ */\nfunction _uppercase(params) {\n\treturn new $ZodCheckUpperCase({\n\t\tcheck: \"string_format\",\n\t\tformat: \"uppercase\",\n\t\t...normalizeParams(params)\n\t});\n}\n/* @__NO_SIDE_EFFECTS__ */\nfunction _includes(includes, params) {\n\treturn new $ZodCheckIncludes({\n\t\tcheck: \"string_format\",\n\t\tformat: \"includes\",\n\t\t...normalizeParams(params),\n\t\tincludes\n\t});\n}\n/* @__NO_SIDE_EFFECTS__ */\nfunction _startsWith(prefix, params) {\n\treturn new $ZodCheckStartsWith({\n\t\tcheck: \"string_format\",\n\t\tformat: \"starts_with\",\n\t\t...normalizeParams(params),\n\t\tprefix\n\t});\n}\n/* @__NO_SIDE_EFFECTS__ */\nfunction _endsWith(suffix, params) {\n\treturn new $ZodCheckEndsWith({\n\t\tcheck: \"string_format\",\n\t\tformat: \"ends_with\",\n\t\t...normalizeParams(params),\n\t\tsuffix\n\t});\n}\n/* @__NO_SIDE_EFFECTS__ */\nfunction _overwrite(tx) {\n\treturn new $ZodCheckOverwrite({\n\t\tcheck: \"overwrite\",\n\t\ttx\n\t});\n}\n/* @__NO_SIDE_EFFECTS__ */\nfunction _normalize(form) {\n\treturn /* @__PURE__ */ _overwrite((input) => input.normalize(form));\n}\n/* @__NO_SIDE_EFFECTS__ */\nfunction _trim() {\n\treturn /* @__PURE__ */ _overwrite((input) => input.trim());\n}\n/* @__NO_SIDE_EFFECTS__ */\nfunction _toLowerCase() {\n\treturn /* @__PURE__ */ _overwrite((input) => input.toLowerCase());\n}\n/* @__NO_SIDE_EFFECTS__ */\nfunction _toUpperCase() {\n\treturn /* @__PURE__ */ _overwrite((input) => input.toUpperCase());\n}\n/* @__NO_SIDE_EFFECTS__ */\nfunction _slugify() {\n\treturn /* @__PURE__ */ _overwrite((input) => slugify(input));\n}\n/* @__NO_SIDE_EFFECTS__ */\nfunction _array(Class, element, params) {\n\treturn new Class({\n\t\ttype: \"array\",\n\t\telement,\n\t\t...normalizeParams(params)\n\t});\n}\n/* @__NO_SIDE_EFFECTS__ */\nfunction _refine(Class, fn, _params) {\n\treturn new Class({\n\t\ttype: \"custom\",\n\t\tcheck: \"custom\",\n\t\tfn,\n\t\t...normalizeParams(_params)\n\t});\n}\n/* @__NO_SIDE_EFFECTS__ */\nfunction _superRefine(fn) {\n\tconst ch = /* @__PURE__ */ _check((payload) => {\n\t\tpayload.addIssue = (issue$1) => {\n\t\t\tif (typeof issue$1 === \"string\") payload.issues.push(issue(issue$1, payload.value, ch._zod.def));\n\t\t\telse {\n\t\t\t\tconst _issue = issue$1;\n\t\t\t\tif (_issue.fatal) _issue.continue = false;\n\t\t\t\t_issue.code ?? (_issue.code = \"custom\");\n\t\t\t\t_issue.input ?? (_issue.input = payload.value);\n\t\t\t\t_issue.inst ?? (_issue.inst = ch);\n\t\t\t\t_issue.continue ?? (_issue.continue = !ch._zod.def.abort);\n\t\t\t\tpayload.issues.push(issue(_issue));\n\t\t\t}\n\t\t};\n\t\treturn fn(payload.value, payload);\n\t});\n\treturn ch;\n}\n/* @__NO_SIDE_EFFECTS__ */\nfunction _check(fn, params) {\n\tconst ch = new $ZodCheck({\n\t\tcheck: \"custom\",\n\t\t...normalizeParams(params)\n\t});\n\tch._zod.check = fn;\n\treturn ch;\n}\n/* @__NO_SIDE_EFFECTS__ */\nfunction describe$1(description) {\n\tconst ch = new $ZodCheck({ check: \"describe\" });\n\tch._zod.onattach = [(inst) => {\n\t\tconst existing = globalRegistry.get(inst) ?? {};\n\t\tglobalRegistry.add(inst, {\n\t\t\t...existing,\n\t\t\tdescription\n\t\t});\n\t}];\n\tch._zod.check = () => {};\n\treturn ch;\n}\n/* @__NO_SIDE_EFFECTS__ */\nfunction meta$1(metadata) {\n\tconst ch = new $ZodCheck({ check: \"meta\" });\n\tch._zod.onattach = [(inst) => {\n\t\tconst existing = globalRegistry.get(inst) ?? {};\n\t\tglobalRegistry.add(inst, {\n\t\t\t...existing,\n\t\t\t...metadata\n\t\t});\n\t}];\n\tch._zod.check = () => {};\n\treturn ch;\n}\n\n//#endregion\n//#region ../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/to-json-schema.js\nfunction initializeContext(params) {\n\tlet target = params?.target ?? \"draft-2020-12\";\n\tif (target === \"draft-4\") target = \"draft-04\";\n\tif (target === \"draft-7\") target = \"draft-07\";\n\treturn {\n\t\tprocessors: params.processors ?? {},\n\t\tmetadataRegistry: params?.metadata ?? globalRegistry,\n\t\ttarget,\n\t\tunrepresentable: params?.unrepresentable ?? \"throw\",\n\t\toverride: params?.override ?? (() => {}),\n\t\tio: params?.io ?? \"output\",\n\t\tcounter: 0,\n\t\tseen: /* @__PURE__ */ new Map(),\n\t\tcycles: params?.cycles ?? \"ref\",\n\t\treused: params?.reused ?? \"inline\",\n\t\texternal: params?.external ?? void 0\n\t};\n}\nfunction process(schema, ctx, _params = {\n\tpath: [],\n\tschemaPath: []\n}) {\n\tvar _a$1;\n\tconst def = schema._zod.def;\n\tconst seen = ctx.seen.get(schema);\n\tif (seen) {\n\t\tseen.count++;\n\t\tif (_params.schemaPath.includes(schema)) seen.cycle = _params.path;\n\t\treturn seen.schema;\n\t}\n\tconst result = {\n\t\tschema: {},\n\t\tcount: 1,\n\t\tcycle: void 0,\n\t\tpath: _params.path\n\t};\n\tctx.seen.set(schema, result);\n\tconst overrideSchema = schema._zod.toJSONSchema?.();\n\tif (overrideSchema) result.schema = overrideSchema;\n\telse {\n\t\tconst params = {\n\t\t\t..._params,\n\t\t\tschemaPath: [..._params.schemaPath, schema],\n\t\t\tpath: _params.path\n\t\t};\n\t\tif (schema._zod.processJSONSchema) schema._zod.processJSONSchema(ctx, result.schema, params);\n\t\telse {\n\t\t\tconst _json = result.schema;\n\t\t\tconst processor = ctx.processors[def.type];\n\t\t\tif (!processor) throw new Error(`[toJSONSchema]: Non-representable type encountered: ${def.type}`);\n\t\t\tprocessor(schema, ctx, _json, params);\n\t\t}\n\t\tconst parent = schema._zod.parent;\n\t\tif (parent) {\n\t\t\tif (!result.ref) result.ref = parent;\n\t\t\tprocess(parent, ctx, params);\n\t\t\tctx.seen.get(parent).isParent = true;\n\t\t}\n\t}\n\tconst meta$2 = ctx.metadataRegistry.get(schema);\n\tif (meta$2) Object.assign(result.schema, meta$2);\n\tif (ctx.io === \"input\" && isTransforming(schema)) {\n\t\tdelete result.schema.examples;\n\t\tdelete result.schema.default;\n\t}\n\tif (ctx.io === \"input\" && result.schema._prefault) (_a$1 = result.schema).default ?? (_a$1.default = result.schema._prefault);\n\tdelete result.schema._prefault;\n\treturn ctx.seen.get(schema).schema;\n}\nfunction extractDefs(ctx, schema) {\n\tconst root = ctx.seen.get(schema);\n\tif (!root) throw new Error(\"Unprocessed schema. This is a bug in Zod.\");\n\tconst idToSchema = /* @__PURE__ */ new Map();\n\tfor (const entry of ctx.seen.entries()) {\n\t\tconst id = ctx.metadataRegistry.get(entry[0])?.id;\n\t\tif (id) {\n\t\t\tconst existing = idToSchema.get(id);\n\t\t\tif (existing && existing !== entry[0]) throw new Error(`Duplicate schema id \"${id}\" detected during JSON Schema conversion. Two different schemas cannot share the same id when converted together.`);\n\t\t\tidToSchema.set(id, entry[0]);\n\t\t}\n\t}\n\tconst makeURI = (entry) => {\n\t\tconst defsSegment = ctx.target === \"draft-2020-12\" ? \"$defs\" : \"definitions\";\n\t\tif (ctx.external) {\n\t\t\tconst externalId = ctx.external.registry.get(entry[0])?.id;\n\t\t\tconst uriGenerator = ctx.external.uri ?? ((id$1) => id$1);\n\t\t\tif (externalId) return { ref: uriGenerator(externalId) };\n\t\t\tconst id = entry[1].defId ?? entry[1].schema.id ?? `schema${ctx.counter++}`;\n\t\t\tentry[1].defId = id;\n\t\t\treturn {\n\t\t\t\tdefId: id,\n\t\t\t\tref: `${uriGenerator(\"__shared\")}#/${defsSegment}/${id}`\n\t\t\t};\n\t\t}\n\t\tif (entry[1] === root) return { ref: \"#\" };\n\t\tconst defUriPrefix = `#/${defsSegment}/`;\n\t\tconst defId = entry[1].schema.id ?? `__schema${ctx.counter++}`;\n\t\treturn {\n\t\t\tdefId,\n\t\t\tref: defUriPrefix + defId\n\t\t};\n\t};\n\tconst extractToDef = (entry) => {\n\t\tif (entry[1].schema.$ref) return;\n\t\tconst seen = entry[1];\n\t\tconst { ref, defId } = makeURI(entry);\n\t\tseen.def = { ...seen.schema };\n\t\tif (defId) seen.defId = defId;\n\t\tconst schema$1 = seen.schema;\n\t\tfor (const key in schema$1) delete schema$1[key];\n\t\tschema$1.$ref = ref;\n\t};\n\tif (ctx.cycles === \"throw\") for (const entry of ctx.seen.entries()) {\n\t\tconst seen = entry[1];\n\t\tif (seen.cycle) throw new Error(`Cycle detected: #/${seen.cycle?.join(\"/\")}/<root>\n\nSet the \\`cycles\\` parameter to \\`\"ref\"\\` to resolve cyclical schemas with defs.`);\n\t}\n\tfor (const entry of ctx.seen.entries()) {\n\t\tconst seen = entry[1];\n\t\tif (schema === entry[0]) {\n\t\t\textractToDef(entry);\n\t\t\tcontinue;\n\t\t}\n\t\tif (ctx.external) {\n\t\t\tconst ext = ctx.external.registry.get(entry[0])?.id;\n\t\t\tif (schema !== entry[0] && ext) {\n\t\t\t\textractToDef(entry);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t}\n\t\tif (ctx.metadataRegistry.get(entry[0])?.id) {\n\t\t\textractToDef(entry);\n\t\t\tcontinue;\n\t\t}\n\t\tif (seen.cycle) {\n\t\t\textractToDef(entry);\n\t\t\tcontinue;\n\t\t}\n\t\tif (seen.count > 1) {\n\t\t\tif (ctx.reused === \"ref\") {\n\t\t\t\textractToDef(entry);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t}\n\t}\n}\nfunction finalize(ctx, schema) {\n\tconst root = ctx.seen.get(schema);\n\tif (!root) throw new Error(\"Unprocessed schema. This is a bug in Zod.\");\n\tconst flattenRef = (zodSchema) => {\n\t\tconst seen = ctx.seen.get(zodSchema);\n\t\tif (seen.ref === null) return;\n\t\tconst schema$1 = seen.def ?? seen.schema;\n\t\tconst _cached = { ...schema$1 };\n\t\tconst ref = seen.ref;\n\t\tseen.ref = null;\n\t\tif (ref) {\n\t\t\tflattenRef(ref);\n\t\t\tconst refSeen = ctx.seen.get(ref);\n\t\t\tconst refSchema = refSeen.schema;\n\t\t\tif (refSchema.$ref && (ctx.target === \"draft-07\" || ctx.target === \"draft-04\" || ctx.target === \"openapi-3.0\")) {\n\t\t\t\tschema$1.allOf = schema$1.allOf ?? [];\n\t\t\t\tschema$1.allOf.push(refSchema);\n\t\t\t} else Object.assign(schema$1, refSchema);\n\t\t\tObject.assign(schema$1, _cached);\n\t\t\tif (zodSchema._zod.parent === ref) for (const key in schema$1) {\n\t\t\t\tif (key === \"$ref\" || key === \"allOf\") continue;\n\t\t\t\tif (!(key in _cached)) delete schema$1[key];\n\t\t\t}\n\t\t\tif (refSchema.$ref && refSeen.def) for (const key in schema$1) {\n\t\t\t\tif (key === \"$ref\" || key === \"allOf\") continue;\n\t\t\t\tif (key in refSeen.def && JSON.stringify(schema$1[key]) === JSON.stringify(refSeen.def[key])) delete schema$1[key];\n\t\t\t}\n\t\t}\n\t\tconst parent = zodSchema._zod.parent;\n\t\tif (parent && parent !== ref) {\n\t\t\tflattenRef(parent);\n\t\t\tconst parentSeen = ctx.seen.get(parent);\n\t\t\tif (parentSeen?.schema.$ref) {\n\t\t\t\tschema$1.$ref = parentSeen.schema.$ref;\n\t\t\t\tif (parentSeen.def) for (const key in schema$1) {\n\t\t\t\t\tif (key === \"$ref\" || key === \"allOf\") continue;\n\t\t\t\t\tif (key in parentSeen.def && JSON.stringify(schema$1[key]) === JSON.stringify(parentSeen.def[key])) delete schema$1[key];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tctx.override({\n\t\t\tzodSchema,\n\t\t\tjsonSchema: schema$1,\n\t\t\tpath: seen.path ?? []\n\t\t});\n\t};\n\tfor (const entry of [...ctx.seen.entries()].reverse()) flattenRef(entry[0]);\n\tconst result = {};\n\tif (ctx.target === \"draft-2020-12\") result.$schema = \"https://json-schema.org/draft/2020-12/schema\";\n\telse if (ctx.target === \"draft-07\") result.$schema = \"http://json-schema.org/draft-07/schema#\";\n\telse if (ctx.target === \"draft-04\") result.$schema = \"http://json-schema.org/draft-04/schema#\";\n\telse if (ctx.target === \"openapi-3.0\") {}\n\tif (ctx.external?.uri) {\n\t\tconst id = ctx.external.registry.get(schema)?.id;\n\t\tif (!id) throw new Error(\"Schema is missing an `id` property\");\n\t\tresult.$id = ctx.external.uri(id);\n\t}\n\tObject.assign(result, root.def ?? root.schema);\n\tconst defs = ctx.external?.defs ?? {};\n\tfor (const entry of ctx.seen.entries()) {\n\t\tconst seen = entry[1];\n\t\tif (seen.def && seen.defId) defs[seen.defId] = seen.def;\n\t}\n\tif (ctx.external) {} else if (Object.keys(defs).length > 0) if (ctx.target === \"draft-2020-12\") result.$defs = defs;\n\telse result.definitions = defs;\n\ttry {\n\t\tconst finalized = JSON.parse(JSON.stringify(result));\n\t\tObject.defineProperty(finalized, \"~standard\", {\n\t\t\tvalue: {\n\t\t\t\t...schema[\"~standard\"],\n\t\t\t\tjsonSchema: {\n\t\t\t\t\tinput: createStandardJSONSchemaMethod(schema, \"input\", ctx.processors),\n\t\t\t\t\toutput: createStandardJSONSchemaMethod(schema, \"output\", ctx.processors)\n\t\t\t\t}\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t\twritable: false\n\t\t});\n\t\treturn finalized;\n\t} catch (_err) {\n\t\tthrow new Error(\"Error converting schema to JSON.\");\n\t}\n}\nfunction isTransforming(_schema, _ctx) {\n\tconst ctx = _ctx ?? { seen: /* @__PURE__ */ new Set() };\n\tif (ctx.seen.has(_schema)) return false;\n\tctx.seen.add(_schema);\n\tconst def = _schema._zod.def;\n\tif (def.type === \"transform\") return true;\n\tif (def.type === \"array\") return isTransforming(def.element, ctx);\n\tif (def.type === \"set\") return isTransforming(def.valueType, ctx);\n\tif (def.type === \"lazy\") return isTransforming(def.getter(), ctx);\n\tif (def.type === \"promise\" || def.type === \"optional\" || def.type === \"nonoptional\" || def.type === \"nullable\" || def.type === \"readonly\" || def.type === \"default\" || def.type === \"prefault\") return isTransforming(def.innerType, ctx);\n\tif (def.type === \"intersection\") return isTransforming(def.left, ctx) || isTransforming(def.right, ctx);\n\tif (def.type === \"record\" || def.type === \"map\") return isTransforming(def.keyType, ctx) || isTransforming(def.valueType, ctx);\n\tif (def.type === \"pipe\") return isTransforming(def.in, ctx) || isTransforming(def.out, ctx);\n\tif (def.type === \"object\") {\n\t\tfor (const key in def.shape) if (isTransforming(def.shape[key], ctx)) return true;\n\t\treturn false;\n\t}\n\tif (def.type === \"union\") {\n\t\tfor (const option of def.options) if (isTransforming(option, ctx)) return true;\n\t\treturn false;\n\t}\n\tif (def.type === \"tuple\") {\n\t\tfor (const item of def.items) if (isTransforming(item, ctx)) return true;\n\t\tif (def.rest && isTransforming(def.rest, ctx)) return true;\n\t\treturn false;\n\t}\n\treturn false;\n}\n/**\n* Creates a toJSONSchema method for a schema instance.\n* This encapsulates the logic of initializing context, processing, extracting defs, and finalizing.\n*/\nconst createToJSONSchemaMethod = (schema, processors = {}) => (params) => {\n\tconst ctx = initializeContext({\n\t\t...params,\n\t\tprocessors\n\t});\n\tprocess(schema, ctx);\n\textractDefs(ctx, schema);\n\treturn finalize(ctx, schema);\n};\nconst createStandardJSONSchemaMethod = (schema, io, processors = {}) => (params) => {\n\tconst { libraryOptions, target } = params ?? {};\n\tconst ctx = initializeContext({\n\t\t...libraryOptions ?? {},\n\t\ttarget,\n\t\tio,\n\t\tprocessors\n\t});\n\tprocess(schema, ctx);\n\textractDefs(ctx, schema);\n\treturn finalize(ctx, schema);\n};\n\n//#endregion\n//#region ../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/json-schema-processors.js\nconst formatMap = {\n\tguid: \"uuid\",\n\turl: \"uri\",\n\tdatetime: \"date-time\",\n\tjson_string: \"json-string\",\n\tregex: \"\"\n};\nconst stringProcessor = (schema, ctx, _json, _params) => {\n\tconst json = _json;\n\tjson.type = \"string\";\n\tconst { minimum, maximum, format, patterns, contentEncoding } = schema._zod.bag;\n\tif (typeof minimum === \"number\") json.minLength = minimum;\n\tif (typeof maximum === \"number\") json.maxLength = maximum;\n\tif (format) {\n\t\tjson.format = formatMap[format] ?? format;\n\t\tif (json.format === \"\") delete json.format;\n\t\tif (format === \"time\") delete json.format;\n\t}\n\tif (contentEncoding) json.contentEncoding = contentEncoding;\n\tif (patterns && patterns.size > 0) {\n\t\tconst regexes = [...patterns];\n\t\tif (regexes.length === 1) json.pattern = regexes[0].source;\n\t\telse if (regexes.length > 1) json.allOf = [...regexes.map((regex) => ({\n\t\t\t...ctx.target === \"draft-07\" || ctx.target === \"draft-04\" || ctx.target === \"openapi-3.0\" ? { type: \"string\" } : {},\n\t\t\tpattern: regex.source\n\t\t}))];\n\t}\n};\nconst numberProcessor = (schema, ctx, _json, _params) => {\n\tconst json = _json;\n\tconst { minimum, maximum, format, multipleOf, exclusiveMaximum, exclusiveMinimum } = schema._zod.bag;\n\tif (typeof format === \"string\" && format.includes(\"int\")) json.type = \"integer\";\n\telse json.type = \"number\";\n\tif (typeof exclusiveMinimum === \"number\") if (ctx.target === \"draft-04\" || ctx.target === \"openapi-3.0\") {\n\t\tjson.minimum = exclusiveMinimum;\n\t\tjson.exclusiveMinimum = true;\n\t} else json.exclusiveMinimum = exclusiveMinimum;\n\tif (typeof minimum === \"number\") {\n\t\tjson.minimum = minimum;\n\t\tif (typeof exclusiveMinimum === \"number\" && ctx.target !== \"draft-04\") if (exclusiveMinimum >= minimum) delete json.minimum;\n\t\telse delete json.exclusiveMinimum;\n\t}\n\tif (typeof exclusiveMaximum === \"number\") if (ctx.target === \"draft-04\" || ctx.target === \"openapi-3.0\") {\n\t\tjson.maximum = exclusiveMaximum;\n\t\tjson.exclusiveMaximum = true;\n\t} else json.exclusiveMaximum = exclusiveMaximum;\n\tif (typeof maximum === \"number\") {\n\t\tjson.maximum = maximum;\n\t\tif (typeof exclusiveMaximum === \"number\" && ctx.target !== \"draft-04\") if (exclusiveMaximum <= maximum) delete json.maximum;\n\t\telse delete json.exclusiveMaximum;\n\t}\n\tif (typeof multipleOf === \"number\") json.multipleOf = multipleOf;\n};\nconst booleanProcessor = (_schema, _ctx, json, _params) => {\n\tjson.type = \"boolean\";\n};\nconst neverProcessor = (_schema, _ctx, json, _params) => {\n\tjson.not = {};\n};\nconst unknownProcessor = (_schema, _ctx, _json, _params) => {};\nconst enumProcessor = (schema, _ctx, json, _params) => {\n\tconst def = schema._zod.def;\n\tconst values = getEnumValues(def.entries);\n\tif (values.every((v) => typeof v === \"number\")) json.type = \"number\";\n\tif (values.every((v) => typeof v === \"string\")) json.type = \"string\";\n\tjson.enum = values;\n};\nconst literalProcessor = (schema, ctx, json, _params) => {\n\tconst def = schema._zod.def;\n\tconst vals = [];\n\tfor (const val of def.values) if (val === void 0) {\n\t\tif (ctx.unrepresentable === \"throw\") throw new Error(\"Literal `undefined` cannot be represented in JSON Schema\");\n\t} else if (typeof val === \"bigint\") if (ctx.unrepresentable === \"throw\") throw new Error(\"BigInt literals cannot be represented in JSON Schema\");\n\telse vals.push(Number(val));\n\telse vals.push(val);\n\tif (vals.length === 0) {} else if (vals.length === 1) {\n\t\tconst val = vals[0];\n\t\tjson.type = val === null ? \"null\" : typeof val;\n\t\tif (ctx.target === \"draft-04\" || ctx.target === \"openapi-3.0\") json.enum = [val];\n\t\telse json.const = val;\n\t} else {\n\t\tif (vals.every((v) => typeof v === \"number\")) json.type = \"number\";\n\t\tif (vals.every((v) => typeof v === \"string\")) json.type = \"string\";\n\t\tif (vals.every((v) => typeof v === \"boolean\")) json.type = \"boolean\";\n\t\tif (vals.every((v) => v === null)) json.type = \"null\";\n\t\tjson.enum = vals;\n\t}\n};\nconst customProcessor = (_schema, ctx, _json, _params) => {\n\tif (ctx.unrepresentable === \"throw\") throw new Error(\"Custom types cannot be represented in JSON Schema\");\n};\nconst transformProcessor = (_schema, ctx, _json, _params) => {\n\tif (ctx.unrepresentable === \"throw\") throw new Error(\"Transforms cannot be represented in JSON Schema\");\n};\nconst arrayProcessor = (schema, ctx, _json, params) => {\n\tconst json = _json;\n\tconst def = schema._zod.def;\n\tconst { minimum, maximum } = schema._zod.bag;\n\tif (typeof minimum === \"number\") json.minItems = minimum;\n\tif (typeof maximum === \"number\") json.maxItems = maximum;\n\tjson.type = \"array\";\n\tjson.items = process(def.element, ctx, {\n\t\t...params,\n\t\tpath: [...params.path, \"items\"]\n\t});\n};\nconst objectProcessor = (schema, ctx, _json, params) => {\n\tconst json = _json;\n\tconst def = schema._zod.def;\n\tjson.type = \"object\";\n\tjson.properties = {};\n\tconst shape = def.shape;\n\tfor (const key in shape) json.properties[key] = process(shape[key], ctx, {\n\t\t...params,\n\t\tpath: [\n\t\t\t...params.path,\n\t\t\t\"properties\",\n\t\t\tkey\n\t\t]\n\t});\n\tconst allKeys = new Set(Object.keys(shape));\n\tconst requiredKeys = new Set([...allKeys].filter((key) => {\n\t\tconst v = def.shape[key]._zod;\n\t\tif (ctx.io === \"input\") return v.optin === void 0;\n\t\telse return v.optout === void 0;\n\t}));\n\tif (requiredKeys.size > 0) json.required = Array.from(requiredKeys);\n\tif (def.catchall?._zod.def.type === \"never\") json.additionalProperties = false;\n\telse if (!def.catchall) {\n\t\tif (ctx.io === \"output\") json.additionalProperties = false;\n\t} else if (def.catchall) json.additionalProperties = process(def.catchall, ctx, {\n\t\t...params,\n\t\tpath: [...params.path, \"additionalProperties\"]\n\t});\n};\nconst unionProcessor = (schema, ctx, json, params) => {\n\tconst def = schema._zod.def;\n\tconst isExclusive = def.inclusive === false;\n\tconst options = def.options.map((x, i) => process(x, ctx, {\n\t\t...params,\n\t\tpath: [\n\t\t\t...params.path,\n\t\t\tisExclusive ? \"oneOf\" : \"anyOf\",\n\t\t\ti\n\t\t]\n\t}));\n\tif (isExclusive) json.oneOf = options;\n\telse json.anyOf = options;\n};\nconst intersectionProcessor = (schema, ctx, json, params) => {\n\tconst def = schema._zod.def;\n\tconst a = process(def.left, ctx, {\n\t\t...params,\n\t\tpath: [\n\t\t\t...params.path,\n\t\t\t\"allOf\",\n\t\t\t0\n\t\t]\n\t});\n\tconst b = process(def.right, ctx, {\n\t\t...params,\n\t\tpath: [\n\t\t\t...params.path,\n\t\t\t\"allOf\",\n\t\t\t1\n\t\t]\n\t});\n\tconst isSimpleIntersection = (val) => \"allOf\" in val && Object.keys(val).length === 1;\n\tjson.allOf = [...isSimpleIntersection(a) ? a.allOf : [a], ...isSimpleIntersection(b) ? b.allOf : [b]];\n};\nconst tupleProcessor = (schema, ctx, _json, params) => {\n\tconst json = _json;\n\tconst def = schema._zod.def;\n\tjson.type = \"array\";\n\tconst prefixPath = ctx.target === \"draft-2020-12\" ? \"prefixItems\" : \"items\";\n\tconst restPath = ctx.target === \"draft-2020-12\" ? \"items\" : ctx.target === \"openapi-3.0\" ? \"items\" : \"additionalItems\";\n\tconst prefixItems = def.items.map((x, i) => process(x, ctx, {\n\t\t...params,\n\t\tpath: [\n\t\t\t...params.path,\n\t\t\tprefixPath,\n\t\t\ti\n\t\t]\n\t}));\n\tconst rest = def.rest ? process(def.rest, ctx, {\n\t\t...params,\n\t\tpath: [\n\t\t\t...params.path,\n\t\t\trestPath,\n\t\t\t...ctx.target === \"openapi-3.0\" ? [def.items.length] : []\n\t\t]\n\t}) : null;\n\tif (ctx.target === \"draft-2020-12\") {\n\t\tjson.prefixItems = prefixItems;\n\t\tif (rest) json.items = rest;\n\t} else if (ctx.target === \"openapi-3.0\") {\n\t\tjson.items = { anyOf: prefixItems };\n\t\tif (rest) json.items.anyOf.push(rest);\n\t\tjson.minItems = prefixItems.length;\n\t\tif (!rest) json.maxItems = prefixItems.length;\n\t} else {\n\t\tjson.items = prefixItems;\n\t\tif (rest) json.additionalItems = rest;\n\t}\n\tconst { minimum, maximum } = schema._zod.bag;\n\tif (typeof minimum === \"number\") json.minItems = minimum;\n\tif (typeof maximum === \"number\") json.maxItems = maximum;\n};\nconst recordProcessor = (schema, ctx, _json, params) => {\n\tconst json = _json;\n\tconst def = schema._zod.def;\n\tjson.type = \"object\";\n\tconst keyType = def.keyType;\n\tconst patterns = keyType._zod.bag?.patterns;\n\tif (def.mode === \"loose\" && patterns && patterns.size > 0) {\n\t\tconst valueSchema = process(def.valueType, ctx, {\n\t\t\t...params,\n\t\t\tpath: [\n\t\t\t\t...params.path,\n\t\t\t\t\"patternProperties\",\n\t\t\t\t\"*\"\n\t\t\t]\n\t\t});\n\t\tjson.patternProperties = {};\n\t\tfor (const pattern of patterns) json.patternProperties[pattern.source] = valueSchema;\n\t} else {\n\t\tif (ctx.target === \"draft-07\" || ctx.target === \"draft-2020-12\") json.propertyNames = process(def.keyType, ctx, {\n\t\t\t...params,\n\t\t\tpath: [...params.path, \"propertyNames\"]\n\t\t});\n\t\tjson.additionalProperties = process(def.valueType, ctx, {\n\t\t\t...params,\n\t\t\tpath: [...params.path, \"additionalProperties\"]\n\t\t});\n\t}\n\tconst keyValues = keyType._zod.values;\n\tif (keyValues) {\n\t\tconst validKeyValues = [...keyValues].filter((v) => typeof v === \"string\" || typeof v === \"number\");\n\t\tif (validKeyValues.length > 0) json.required = validKeyValues;\n\t}\n};\nconst nullableProcessor = (schema, ctx, json, params) => {\n\tconst def = schema._zod.def;\n\tconst inner = process(def.innerType, ctx, params);\n\tconst seen = ctx.seen.get(schema);\n\tif (ctx.target === \"openapi-3.0\") {\n\t\tseen.ref = def.innerType;\n\t\tjson.nullable = true;\n\t} else json.anyOf = [inner, { type: \"null\" }];\n};\nconst nonoptionalProcessor = (schema, ctx, _json, params) => {\n\tconst def = schema._zod.def;\n\tprocess(def.innerType, ctx, params);\n\tconst seen = ctx.seen.get(schema);\n\tseen.ref = def.innerType;\n};\nconst defaultProcessor = (schema, ctx, json, params) => {\n\tconst def = schema._zod.def;\n\tprocess(def.innerType, ctx, params);\n\tconst seen = ctx.seen.get(schema);\n\tseen.ref = def.innerType;\n\tjson.default = JSON.parse(JSON.stringify(def.defaultValue));\n};\nconst prefaultProcessor = (schema, ctx, json, params) => {\n\tconst def = schema._zod.def;\n\tprocess(def.innerType, ctx, params);\n\tconst seen = ctx.seen.get(schema);\n\tseen.ref = def.innerType;\n\tif (ctx.io === \"input\") json._prefault = JSON.parse(JSON.stringify(def.defaultValue));\n};\nconst catchProcessor = (schema, ctx, json, params) => {\n\tconst def = schema._zod.def;\n\tprocess(def.innerType, ctx, params);\n\tconst seen = ctx.seen.get(schema);\n\tseen.ref = def.innerType;\n\tlet catchValue;\n\ttry {\n\t\tcatchValue = def.catchValue(void 0);\n\t} catch {\n\t\tthrow new Error(\"Dynamic catch values are not supported in JSON Schema\");\n\t}\n\tjson.default = catchValue;\n};\nconst pipeProcessor = (schema, ctx, _json, params) => {\n\tconst def = schema._zod.def;\n\tconst innerType = ctx.io === \"input\" ? def.in._zod.def.type === \"transform\" ? def.out : def.in : def.out;\n\tprocess(innerType, ctx, params);\n\tconst seen = ctx.seen.get(schema);\n\tseen.ref = innerType;\n};\nconst readonlyProcessor = (schema, ctx, json, params) => {\n\tconst def = schema._zod.def;\n\tprocess(def.innerType, ctx, params);\n\tconst seen = ctx.seen.get(schema);\n\tseen.ref = def.innerType;\n\tjson.readOnly = true;\n};\nconst optionalProcessor = (schema, ctx, _json, params) => {\n\tconst def = schema._zod.def;\n\tprocess(def.innerType, ctx, params);\n\tconst seen = ctx.seen.get(schema);\n\tseen.ref = def.innerType;\n};\n\n//#endregion\n//#region ../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/classic/iso.js\nconst ZodISODateTime = /* @__PURE__ */ $constructor(\"ZodISODateTime\", (inst, def) => {\n\t$ZodISODateTime.init(inst, def);\n\tZodStringFormat.init(inst, def);\n});\nfunction datetime(params) {\n\treturn _isoDateTime(ZodISODateTime, params);\n}\nconst ZodISODate = /* @__PURE__ */ $constructor(\"ZodISODate\", (inst, def) => {\n\t$ZodISODate.init(inst, def);\n\tZodStringFormat.init(inst, def);\n});\nfunction date(params) {\n\treturn _isoDate(ZodISODate, params);\n}\nconst ZodISOTime = /* @__PURE__ */ $constructor(\"ZodISOTime\", (inst, def) => {\n\t$ZodISOTime.init(inst, def);\n\tZodStringFormat.init(inst, def);\n});\nfunction time(params) {\n\treturn _isoTime(ZodISOTime, params);\n}\nconst ZodISODuration = /* @__PURE__ */ $constructor(\"ZodISODuration\", (inst, def) => {\n\t$ZodISODuration.init(inst, def);\n\tZodStringFormat.init(inst, def);\n});\nfunction duration(params) {\n\treturn _isoDuration(ZodISODuration, params);\n}\n\n//#endregion\n//#region ../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/classic/errors.js\nconst initializer = (inst, issues) => {\n\t$ZodError.init(inst, issues);\n\tinst.name = \"ZodError\";\n\tObject.defineProperties(inst, {\n\t\tformat: { value: (mapper) => formatError(inst, mapper) },\n\t\tflatten: { value: (mapper) => flattenError(inst, mapper) },\n\t\taddIssue: { value: (issue$1) => {\n\t\t\tinst.issues.push(issue$1);\n\t\t\tinst.message = JSON.stringify(inst.issues, jsonStringifyReplacer, 2);\n\t\t} },\n\t\taddIssues: { value: (issues$1) => {\n\t\t\tinst.issues.push(...issues$1);\n\t\t\tinst.message = JSON.stringify(inst.issues, jsonStringifyReplacer, 2);\n\t\t} },\n\t\tisEmpty: { get() {\n\t\t\treturn inst.issues.length === 0;\n\t\t} }\n\t});\n};\nconst ZodError = $constructor(\"ZodError\", initializer);\nconst ZodRealError = $constructor(\"ZodError\", initializer, { Parent: Error });\n\n//#endregion\n//#region ../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/classic/parse.js\nconst parse = /* @__PURE__ */ _parse(ZodRealError);\nconst parseAsync = /* @__PURE__ */ _parseAsync(ZodRealError);\nconst safeParse = /* @__PURE__ */ _safeParse(ZodRealError);\nconst safeParseAsync = /* @__PURE__ */ _safeParseAsync(ZodRealError);\nconst encode = /* @__PURE__ */ _encode(ZodRealError);\nconst decode = /* @__PURE__ */ _decode(ZodRealError);\nconst encodeAsync = /* @__PURE__ */ _encodeAsync(ZodRealError);\nconst decodeAsync = /* @__PURE__ */ _decodeAsync(ZodRealError);\nconst safeEncode = /* @__PURE__ */ _safeEncode(ZodRealError);\nconst safeDecode = /* @__PURE__ */ _safeDecode(ZodRealError);\nconst safeEncodeAsync = /* @__PURE__ */ _safeEncodeAsync(ZodRealError);\nconst safeDecodeAsync = /* @__PURE__ */ _safeDecodeAsync(ZodRealError);\n\n//#endregion\n//#region ../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/classic/schemas.js\nconst ZodType = /* @__PURE__ */ $constructor(\"ZodType\", (inst, def) => {\n\t$ZodType.init(inst, def);\n\tObject.assign(inst[\"~standard\"], { jsonSchema: {\n\t\tinput: createStandardJSONSchemaMethod(inst, \"input\"),\n\t\toutput: createStandardJSONSchemaMethod(inst, \"output\")\n\t} });\n\tinst.toJSONSchema = createToJSONSchemaMethod(inst, {});\n\tinst.def = def;\n\tinst.type = def.type;\n\tObject.defineProperty(inst, \"_def\", { value: def });\n\tinst.check = (...checks) => {\n\t\treturn inst.clone(mergeDefs(def, { checks: [...def.checks ?? [], ...checks.map((ch) => typeof ch === \"function\" ? { _zod: {\n\t\t\tcheck: ch,\n\t\t\tdef: { check: \"custom\" },\n\t\t\tonattach: []\n\t\t} } : ch)] }), { parent: true });\n\t};\n\tinst.with = inst.check;\n\tinst.clone = (def$1, params) => clone(inst, def$1, params);\n\tinst.brand = () => inst;\n\tinst.register = ((reg, meta$2) => {\n\t\treg.add(inst, meta$2);\n\t\treturn inst;\n\t});\n\tinst.parse = (data, params) => parse(inst, data, params, { callee: inst.parse });\n\tinst.safeParse = (data, params) => safeParse(inst, data, params);\n\tinst.parseAsync = async (data, params) => parseAsync(inst, data, params, { callee: inst.parseAsync });\n\tinst.safeParseAsync = async (data, params) => safeParseAsync(inst, data, params);\n\tinst.spa = inst.safeParseAsync;\n\tinst.encode = (data, params) => encode(inst, data, params);\n\tinst.decode = (data, params) => decode(inst, data, params);\n\tinst.encodeAsync = async (data, params) => encodeAsync(inst, data, params);\n\tinst.decodeAsync = async (data, params) => decodeAsync(inst, data, params);\n\tinst.safeEncode = (data, params) => safeEncode(inst, data, params);\n\tinst.safeDecode = (data, params) => safeDecode(inst, data, params);\n\tinst.safeEncodeAsync = async (data, params) => safeEncodeAsync(inst, data, params);\n\tinst.safeDecodeAsync = async (data, params) => safeDecodeAsync(inst, data, params);\n\tinst.refine = (check, params) => inst.check(refine(check, params));\n\tinst.superRefine = (refinement) => inst.check(superRefine(refinement));\n\tinst.overwrite = (fn) => inst.check(_overwrite(fn));\n\tinst.optional = () => optional(inst);\n\tinst.exactOptional = () => exactOptional(inst);\n\tinst.nullable = () => nullable(inst);\n\tinst.nullish = () => optional(nullable(inst));\n\tinst.nonoptional = (params) => nonoptional(inst, params);\n\tinst.array = () => array(inst);\n\tinst.or = (arg) => union([inst, arg]);\n\tinst.and = (arg) => intersection(inst, arg);\n\tinst.transform = (tx) => pipe(inst, transform(tx));\n\tinst.default = (def$1) => _default(inst, def$1);\n\tinst.prefault = (def$1) => prefault(inst, def$1);\n\tinst.catch = (params) => _catch(inst, params);\n\tinst.pipe = (target) => pipe(inst, target);\n\tinst.readonly = () => readonly(inst);\n\tinst.describe = (description) => {\n\t\tconst cl = inst.clone();\n\t\tglobalRegistry.add(cl, { description });\n\t\treturn cl;\n\t};\n\tObject.defineProperty(inst, \"description\", {\n\t\tget() {\n\t\t\treturn globalRegistry.get(inst)?.description;\n\t\t},\n\t\tconfigurable: true\n\t});\n\tinst.meta = (...args) => {\n\t\tif (args.length === 0) return globalRegistry.get(inst);\n\t\tconst cl = inst.clone();\n\t\tglobalRegistry.add(cl, args[0]);\n\t\treturn cl;\n\t};\n\tinst.isOptional = () => inst.safeParse(void 0).success;\n\tinst.isNullable = () => inst.safeParse(null).success;\n\tinst.apply = (fn) => fn(inst);\n\treturn inst;\n});\n/** @internal */\nconst _ZodString = /* @__PURE__ */ $constructor(\"_ZodString\", (inst, def) => {\n\t$ZodString.init(inst, def);\n\tZodType.init(inst, def);\n\tinst._zod.processJSONSchema = (ctx, json, params) => stringProcessor(inst, ctx, json, params);\n\tconst bag = inst._zod.bag;\n\tinst.format = bag.format ?? null;\n\tinst.minLength = bag.minimum ?? null;\n\tinst.maxLength = bag.maximum ?? null;\n\tinst.regex = (...args) => inst.check(_regex(...args));\n\tinst.includes = (...args) => inst.check(_includes(...args));\n\tinst.startsWith = (...args) => inst.check(_startsWith(...args));\n\tinst.endsWith = (...args) => inst.check(_endsWith(...args));\n\tinst.min = (...args) => inst.check(_minLength(...args));\n\tinst.max = (...args) => inst.check(_maxLength(...args));\n\tinst.length = (...args) => inst.check(_length(...args));\n\tinst.nonempty = (...args) => inst.check(_minLength(1, ...args));\n\tinst.lowercase = (params) => inst.check(_lowercase(params));\n\tinst.uppercase = (params) => inst.check(_uppercase(params));\n\tinst.trim = () => inst.check(_trim());\n\tinst.normalize = (...args) => inst.check(_normalize(...args));\n\tinst.toLowerCase = () => inst.check(_toLowerCase());\n\tinst.toUpperCase = () => inst.check(_toUpperCase());\n\tinst.slugify = () => inst.check(_slugify());\n});\nconst ZodString = /* @__PURE__ */ $constructor(\"ZodString\", (inst, def) => {\n\t$ZodString.init(inst, def);\n\t_ZodString.init(inst, def);\n\tinst.email = (params) => inst.check(_email(ZodEmail, params));\n\tinst.url = (params) => inst.check(_url(ZodURL, params));\n\tinst.jwt = (params) => inst.check(_jwt(ZodJWT, params));\n\tinst.emoji = (params) => inst.check(_emoji(ZodEmoji, params));\n\tinst.guid = (params) => inst.check(_guid(ZodGUID, params));\n\tinst.uuid = (params) => inst.check(_uuid(ZodUUID, params));\n\tinst.uuidv4 = (params) => inst.check(_uuidv4(ZodUUID, params));\n\tinst.uuidv6 = (params) => inst.check(_uuidv6(ZodUUID, params));\n\tinst.uuidv7 = (params) => inst.check(_uuidv7(ZodUUID, params));\n\tinst.nanoid = (params) => inst.check(_nanoid(ZodNanoID, params));\n\tinst.guid = (params) => inst.check(_guid(ZodGUID, params));\n\tinst.cuid = (params) => inst.check(_cuid(ZodCUID, params));\n\tinst.cuid2 = (params) => inst.check(_cuid2(ZodCUID2, params));\n\tinst.ulid = (params) => inst.check(_ulid(ZodULID, params));\n\tinst.base64 = (params) => inst.check(_base64(ZodBase64, params));\n\tinst.base64url = (params) => inst.check(_base64url(ZodBase64URL, params));\n\tinst.xid = (params) => inst.check(_xid(ZodXID, params));\n\tinst.ksuid = (params) => inst.check(_ksuid(ZodKSUID, params));\n\tinst.ipv4 = (params) => inst.check(_ipv4(ZodIPv4, params));\n\tinst.ipv6 = (params) => inst.check(_ipv6(ZodIPv6, params));\n\tinst.cidrv4 = (params) => inst.check(_cidrv4(ZodCIDRv4, params));\n\tinst.cidrv6 = (params) => inst.check(_cidrv6(ZodCIDRv6, params));\n\tinst.e164 = (params) => inst.check(_e164(ZodE164, params));\n\tinst.datetime = (params) => inst.check(datetime(params));\n\tinst.date = (params) => inst.check(date(params));\n\tinst.time = (params) => inst.check(time(params));\n\tinst.duration = (params) => inst.check(duration(params));\n});\nfunction string(params) {\n\treturn _string(ZodString, params);\n}\nconst ZodStringFormat = /* @__PURE__ */ $constructor(\"ZodStringFormat\", (inst, def) => {\n\t$ZodStringFormat.init(inst, def);\n\t_ZodString.init(inst, def);\n});\nconst ZodEmail = /* @__PURE__ */ $constructor(\"ZodEmail\", (inst, def) => {\n\t$ZodEmail.init(inst, def);\n\tZodStringFormat.init(inst, def);\n});\nconst ZodGUID = /* @__PURE__ */ $constructor(\"ZodGUID\", (inst, def) => {\n\t$ZodGUID.init(inst, def);\n\tZodStringFormat.init(inst, def);\n});\nconst ZodUUID = /* @__PURE__ */ $constructor(\"ZodUUID\", (inst, def) => {\n\t$ZodUUID.init(inst, def);\n\tZodStringFormat.init(inst, def);\n});\nconst ZodURL = /* @__PURE__ */ $constructor(\"ZodURL\", (inst, def) => {\n\t$ZodURL.init(inst, def);\n\tZodStringFormat.init(inst, def);\n});\nconst ZodEmoji = /* @__PURE__ */ $constructor(\"ZodEmoji\", (inst, def) => {\n\t$ZodEmoji.init(inst, def);\n\tZodStringFormat.init(inst, def);\n});\nconst ZodNanoID = /* @__PURE__ */ $constructor(\"ZodNanoID\", (inst, def) => {\n\t$ZodNanoID.init(inst, def);\n\tZodStringFormat.init(inst, def);\n});\nconst ZodCUID = /* @__PURE__ */ $constructor(\"ZodCUID\", (inst, def) => {\n\t$ZodCUID.init(inst, def);\n\tZodStringFormat.init(inst, def);\n});\nconst ZodCUID2 = /* @__PURE__ */ $constructor(\"ZodCUID2\", (inst, def) => {\n\t$ZodCUID2.init(inst, def);\n\tZodStringFormat.init(inst, def);\n});\nconst ZodULID = /* @__PURE__ */ $constructor(\"ZodULID\", (inst, def) => {\n\t$ZodULID.init(inst, def);\n\tZodStringFormat.init(inst, def);\n});\nconst ZodXID = /* @__PURE__ */ $constructor(\"ZodXID\", (inst, def) => {\n\t$ZodXID.init(inst, def);\n\tZodStringFormat.init(inst, def);\n});\nconst ZodKSUID = /* @__PURE__ */ $constructor(\"ZodKSUID\", (inst, def) => {\n\t$ZodKSUID.init(inst, def);\n\tZodStringFormat.init(inst, def);\n});\nconst ZodIPv4 = /* @__PURE__ */ $constructor(\"ZodIPv4\", (inst, def) => {\n\t$ZodIPv4.init(inst, def);\n\tZodStringFormat.init(inst, def);\n});\nconst ZodIPv6 = /* @__PURE__ */ $constructor(\"ZodIPv6\", (inst, def) => {\n\t$ZodIPv6.init(inst, def);\n\tZodStringFormat.init(inst, def);\n});\nconst ZodCIDRv4 = /* @__PURE__ */ $constructor(\"ZodCIDRv4\", (inst, def) => {\n\t$ZodCIDRv4.init(inst, def);\n\tZodStringFormat.init(inst, def);\n});\nconst ZodCIDRv6 = /* @__PURE__ */ $constructor(\"ZodCIDRv6\", (inst, def) => {\n\t$ZodCIDRv6.init(inst, def);\n\tZodStringFormat.init(inst, def);\n});\nconst ZodBase64 = /* @__PURE__ */ $constructor(\"ZodBase64\", (inst, def) => {\n\t$ZodBase64.init(inst, def);\n\tZodStringFormat.init(inst, def);\n});\nconst ZodBase64URL = /* @__PURE__ */ $constructor(\"ZodBase64URL\", (inst, def) => {\n\t$ZodBase64URL.init(inst, def);\n\tZodStringFormat.init(inst, def);\n});\nconst ZodE164 = /* @__PURE__ */ $constructor(\"ZodE164\", (inst, def) => {\n\t$ZodE164.init(inst, def);\n\tZodStringFormat.init(inst, def);\n});\nconst ZodJWT = /* @__PURE__ */ $constructor(\"ZodJWT\", (inst, def) => {\n\t$ZodJWT.init(inst, def);\n\tZodStringFormat.init(inst, def);\n});\nconst ZodNumber = /* @__PURE__ */ $constructor(\"ZodNumber\", (inst, def) => {\n\t$ZodNumber.init(inst, def);\n\tZodType.init(inst, def);\n\tinst._zod.processJSONSchema = (ctx, json, params) => numberProcessor(inst, ctx, json, params);\n\tinst.gt = (value, params) => inst.check(_gt(value, params));\n\tinst.gte = (value, params) => inst.check(_gte(value, params));\n\tinst.min = (value, params) => inst.check(_gte(value, params));\n\tinst.lt = (value, params) => inst.check(_lt(value, params));\n\tinst.lte = (value, params) => inst.check(_lte(value, params));\n\tinst.max = (value, params) => inst.check(_lte(value, params));\n\tinst.int = (params) => inst.check(int(params));\n\tinst.safe = (params) => inst.check(int(params));\n\tinst.positive = (params) => inst.check(_gt(0, params));\n\tinst.nonnegative = (params) => inst.check(_gte(0, params));\n\tinst.negative = (params) => inst.check(_lt(0, params));\n\tinst.nonpositive = (params) => inst.check(_lte(0, params));\n\tinst.multipleOf = (value, params) => inst.check(_multipleOf(value, params));\n\tinst.step = (value, params) => inst.check(_multipleOf(value, params));\n\tinst.finite = () => inst;\n\tconst bag = inst._zod.bag;\n\tinst.minValue = Math.max(bag.minimum ?? Number.NEGATIVE_INFINITY, bag.exclusiveMinimum ?? Number.NEGATIVE_INFINITY) ?? null;\n\tinst.maxValue = Math.min(bag.maximum ?? Number.POSITIVE_INFINITY, bag.exclusiveMaximum ?? Number.POSITIVE_INFINITY) ?? null;\n\tinst.isInt = (bag.format ?? \"\").includes(\"int\") || Number.isSafeInteger(bag.multipleOf ?? .5);\n\tinst.isFinite = true;\n\tinst.format = bag.format ?? null;\n});\nfunction number(params) {\n\treturn _number(ZodNumber, params);\n}\nconst ZodNumberFormat = /* @__PURE__ */ $constructor(\"ZodNumberFormat\", (inst, def) => {\n\t$ZodNumberFormat.init(inst, def);\n\tZodNumber.init(inst, def);\n});\nfunction int(params) {\n\treturn _int(ZodNumberFormat, params);\n}\nconst ZodBoolean = /* @__PURE__ */ $constructor(\"ZodBoolean\", (inst, def) => {\n\t$ZodBoolean.init(inst, def);\n\tZodType.init(inst, def);\n\tinst._zod.processJSONSchema = (ctx, json, params) => booleanProcessor(inst, ctx, json, params);\n});\nfunction boolean(params) {\n\treturn _boolean(ZodBoolean, params);\n}\nconst ZodUnknown = /* @__PURE__ */ $constructor(\"ZodUnknown\", (inst, def) => {\n\t$ZodUnknown.init(inst, def);\n\tZodType.init(inst, def);\n\tinst._zod.processJSONSchema = (ctx, json, params) => unknownProcessor(inst, ctx, json, params);\n});\nfunction unknown() {\n\treturn _unknown(ZodUnknown);\n}\nconst ZodNever = /* @__PURE__ */ $constructor(\"ZodNever\", (inst, def) => {\n\t$ZodNever.init(inst, def);\n\tZodType.init(inst, def);\n\tinst._zod.processJSONSchema = (ctx, json, params) => neverProcessor(inst, ctx, json, params);\n});\nfunction never(params) {\n\treturn _never(ZodNever, params);\n}\nconst ZodArray = /* @__PURE__ */ $constructor(\"ZodArray\", (inst, def) => {\n\t$ZodArray.init(inst, def);\n\tZodType.init(inst, def);\n\tinst._zod.processJSONSchema = (ctx, json, params) => arrayProcessor(inst, ctx, json, params);\n\tinst.element = def.element;\n\tinst.min = (minLength, params) => inst.check(_minLength(minLength, params));\n\tinst.nonempty = (params) => inst.check(_minLength(1, params));\n\tinst.max = (maxLength, params) => inst.check(_maxLength(maxLength, params));\n\tinst.length = (len, params) => inst.check(_length(len, params));\n\tinst.unwrap = () => inst.element;\n});\nfunction array(element, params) {\n\treturn _array(ZodArray, element, params);\n}\nconst ZodObject = /* @__PURE__ */ $constructor(\"ZodObject\", (inst, def) => {\n\t$ZodObjectJIT.init(inst, def);\n\tZodType.init(inst, def);\n\tinst._zod.processJSONSchema = (ctx, json, params) => objectProcessor(inst, ctx, json, params);\n\tdefineLazy(inst, \"shape\", () => {\n\t\treturn def.shape;\n\t});\n\tinst.keyof = () => _enum(Object.keys(inst._zod.def.shape));\n\tinst.catchall = (catchall) => inst.clone({\n\t\t...inst._zod.def,\n\t\tcatchall\n\t});\n\tinst.passthrough = () => inst.clone({\n\t\t...inst._zod.def,\n\t\tcatchall: unknown()\n\t});\n\tinst.loose = () => inst.clone({\n\t\t...inst._zod.def,\n\t\tcatchall: unknown()\n\t});\n\tinst.strict = () => inst.clone({\n\t\t...inst._zod.def,\n\t\tcatchall: never()\n\t});\n\tinst.strip = () => inst.clone({\n\t\t...inst._zod.def,\n\t\tcatchall: void 0\n\t});\n\tinst.extend = (incoming) => {\n\t\treturn extend(inst, incoming);\n\t};\n\tinst.safeExtend = (incoming) => {\n\t\treturn safeExtend(inst, incoming);\n\t};\n\tinst.merge = (other) => merge(inst, other);\n\tinst.pick = (mask) => pick(inst, mask);\n\tinst.omit = (mask) => omit(inst, mask);\n\tinst.partial = (...args) => partial(ZodOptional, inst, args[0]);\n\tinst.required = (...args) => required(ZodNonOptional, inst, args[0]);\n});\nfunction object(shape, params) {\n\treturn new ZodObject({\n\t\ttype: \"object\",\n\t\tshape: shape ?? {},\n\t\t...normalizeParams(params)\n\t});\n}\nconst ZodUnion = /* @__PURE__ */ $constructor(\"ZodUnion\", (inst, def) => {\n\t$ZodUnion.init(inst, def);\n\tZodType.init(inst, def);\n\tinst._zod.processJSONSchema = (ctx, json, params) => unionProcessor(inst, ctx, json, params);\n\tinst.options = def.options;\n});\nfunction union(options, params) {\n\treturn new ZodUnion({\n\t\ttype: \"union\",\n\t\toptions,\n\t\t...normalizeParams(params)\n\t});\n}\nconst ZodDiscriminatedUnion = /* @__PURE__ */ $constructor(\"ZodDiscriminatedUnion\", (inst, def) => {\n\tZodUnion.init(inst, def);\n\t$ZodDiscriminatedUnion.init(inst, def);\n});\nfunction discriminatedUnion(discriminator, options, params) {\n\treturn new ZodDiscriminatedUnion({\n\t\ttype: \"union\",\n\t\toptions,\n\t\tdiscriminator,\n\t\t...normalizeParams(params)\n\t});\n}\nconst ZodIntersection = /* @__PURE__ */ $constructor(\"ZodIntersection\", (inst, def) => {\n\t$ZodIntersection.init(inst, def);\n\tZodType.init(inst, def);\n\tinst._zod.processJSONSchema = (ctx, json, params) => intersectionProcessor(inst, ctx, json, params);\n});\nfunction intersection(left, right) {\n\treturn new ZodIntersection({\n\t\ttype: \"intersection\",\n\t\tleft,\n\t\tright\n\t});\n}\nconst ZodTuple = /* @__PURE__ */ $constructor(\"ZodTuple\", (inst, def) => {\n\t$ZodTuple.init(inst, def);\n\tZodType.init(inst, def);\n\tinst._zod.processJSONSchema = (ctx, json, params) => tupleProcessor(inst, ctx, json, params);\n\tinst.rest = (rest) => inst.clone({\n\t\t...inst._zod.def,\n\t\trest\n\t});\n});\nfunction tuple(items, _paramsOrRest, _params) {\n\tconst hasRest = _paramsOrRest instanceof $ZodType;\n\tconst params = hasRest ? _params : _paramsOrRest;\n\treturn new ZodTuple({\n\t\ttype: \"tuple\",\n\t\titems,\n\t\trest: hasRest ? _paramsOrRest : null,\n\t\t...normalizeParams(params)\n\t});\n}\nconst ZodRecord = /* @__PURE__ */ $constructor(\"ZodRecord\", (inst, def) => {\n\t$ZodRecord.init(inst, def);\n\tZodType.init(inst, def);\n\tinst._zod.processJSONSchema = (ctx, json, params) => recordProcessor(inst, ctx, json, params);\n\tinst.keyType = def.keyType;\n\tinst.valueType = def.valueType;\n});\nfunction record(keyType, valueType, params) {\n\treturn new ZodRecord({\n\t\ttype: \"record\",\n\t\tkeyType,\n\t\tvalueType,\n\t\t...normalizeParams(params)\n\t});\n}\nconst ZodEnum = /* @__PURE__ */ $constructor(\"ZodEnum\", (inst, def) => {\n\t$ZodEnum.init(inst, def);\n\tZodType.init(inst, def);\n\tinst._zod.processJSONSchema = (ctx, json, params) => enumProcessor(inst, ctx, json, params);\n\tinst.enum = def.entries;\n\tinst.options = Object.values(def.entries);\n\tconst keys = new Set(Object.keys(def.entries));\n\tinst.extract = (values, params) => {\n\t\tconst newEntries = {};\n\t\tfor (const value of values) if (keys.has(value)) newEntries[value] = def.entries[value];\n\t\telse throw new Error(`Key ${value} not found in enum`);\n\t\treturn new ZodEnum({\n\t\t\t...def,\n\t\t\tchecks: [],\n\t\t\t...normalizeParams(params),\n\t\t\tentries: newEntries\n\t\t});\n\t};\n\tinst.exclude = (values, params) => {\n\t\tconst newEntries = { ...def.entries };\n\t\tfor (const value of values) if (keys.has(value)) delete newEntries[value];\n\t\telse throw new Error(`Key ${value} not found in enum`);\n\t\treturn new ZodEnum({\n\t\t\t...def,\n\t\t\tchecks: [],\n\t\t\t...normalizeParams(params),\n\t\t\tentries: newEntries\n\t\t});\n\t};\n});\nfunction _enum(values, params) {\n\treturn new ZodEnum({\n\t\ttype: \"enum\",\n\t\tentries: Array.isArray(values) ? Object.fromEntries(values.map((v) => [v, v])) : values,\n\t\t...normalizeParams(params)\n\t});\n}\nconst ZodLiteral = /* @__PURE__ */ $constructor(\"ZodLiteral\", (inst, def) => {\n\t$ZodLiteral.init(inst, def);\n\tZodType.init(inst, def);\n\tinst._zod.processJSONSchema = (ctx, json, params) => literalProcessor(inst, ctx, json, params);\n\tinst.values = new Set(def.values);\n\tObject.defineProperty(inst, \"value\", { get() {\n\t\tif (def.values.length > 1) throw new Error(\"This schema contains multiple valid literal values. Use `.values` instead.\");\n\t\treturn def.values[0];\n\t} });\n});\nfunction literal(value, params) {\n\treturn new ZodLiteral({\n\t\ttype: \"literal\",\n\t\tvalues: Array.isArray(value) ? value : [value],\n\t\t...normalizeParams(params)\n\t});\n}\nconst ZodTransform = /* @__PURE__ */ $constructor(\"ZodTransform\", (inst, def) => {\n\t$ZodTransform.init(inst, def);\n\tZodType.init(inst, def);\n\tinst._zod.processJSONSchema = (ctx, json, params) => transformProcessor(inst, ctx, json, params);\n\tinst._zod.parse = (payload, _ctx) => {\n\t\tif (_ctx.direction === \"backward\") throw new $ZodEncodeError(inst.constructor.name);\n\t\tpayload.addIssue = (issue$1) => {\n\t\t\tif (typeof issue$1 === \"string\") payload.issues.push(issue(issue$1, payload.value, def));\n\t\t\telse {\n\t\t\t\tconst _issue = issue$1;\n\t\t\t\tif (_issue.fatal) _issue.continue = false;\n\t\t\t\t_issue.code ?? (_issue.code = \"custom\");\n\t\t\t\t_issue.input ?? (_issue.input = payload.value);\n\t\t\t\t_issue.inst ?? (_issue.inst = inst);\n\t\t\t\tpayload.issues.push(issue(_issue));\n\t\t\t}\n\t\t};\n\t\tconst output = def.transform(payload.value, payload);\n\t\tif (output instanceof Promise) return output.then((output$1) => {\n\t\t\tpayload.value = output$1;\n\t\t\treturn payload;\n\t\t});\n\t\tpayload.value = output;\n\t\treturn payload;\n\t};\n});\nfunction transform(fn) {\n\treturn new ZodTransform({\n\t\ttype: \"transform\",\n\t\ttransform: fn\n\t});\n}\nconst ZodOptional = /* @__PURE__ */ $constructor(\"ZodOptional\", (inst, def) => {\n\t$ZodOptional.init(inst, def);\n\tZodType.init(inst, def);\n\tinst._zod.processJSONSchema = (ctx, json, params) => optionalProcessor(inst, ctx, json, params);\n\tinst.unwrap = () => inst._zod.def.innerType;\n});\nfunction optional(innerType) {\n\treturn new ZodOptional({\n\t\ttype: \"optional\",\n\t\tinnerType\n\t});\n}\nconst ZodExactOptional = /* @__PURE__ */ $constructor(\"ZodExactOptional\", (inst, def) => {\n\t$ZodExactOptional.init(inst, def);\n\tZodType.init(inst, def);\n\tinst._zod.processJSONSchema = (ctx, json, params) => optionalProcessor(inst, ctx, json, params);\n\tinst.unwrap = () => inst._zod.def.innerType;\n});\nfunction exactOptional(innerType) {\n\treturn new ZodExactOptional({\n\t\ttype: \"optional\",\n\t\tinnerType\n\t});\n}\nconst ZodNullable = /* @__PURE__ */ $constructor(\"ZodNullable\", (inst, def) => {\n\t$ZodNullable.init(inst, def);\n\tZodType.init(inst, def);\n\tinst._zod.processJSONSchema = (ctx, json, params) => nullableProcessor(inst, ctx, json, params);\n\tinst.unwrap = () => inst._zod.def.innerType;\n});\nfunction nullable(innerType) {\n\treturn new ZodNullable({\n\t\ttype: \"nullable\",\n\t\tinnerType\n\t});\n}\nconst ZodDefault = /* @__PURE__ */ $constructor(\"ZodDefault\", (inst, def) => {\n\t$ZodDefault.init(inst, def);\n\tZodType.init(inst, def);\n\tinst._zod.processJSONSchema = (ctx, json, params) => defaultProcessor(inst, ctx, json, params);\n\tinst.unwrap = () => inst._zod.def.innerType;\n\tinst.removeDefault = inst.unwrap;\n});\nfunction _default(innerType, defaultValue) {\n\treturn new ZodDefault({\n\t\ttype: \"default\",\n\t\tinnerType,\n\t\tget defaultValue() {\n\t\t\treturn typeof defaultValue === \"function\" ? defaultValue() : shallowClone(defaultValue);\n\t\t}\n\t});\n}\nconst ZodPrefault = /* @__PURE__ */ $constructor(\"ZodPrefault\", (inst, def) => {\n\t$ZodPrefault.init(inst, def);\n\tZodType.init(inst, def);\n\tinst._zod.processJSONSchema = (ctx, json, params) => prefaultProcessor(inst, ctx, json, params);\n\tinst.unwrap = () => inst._zod.def.innerType;\n});\nfunction prefault(innerType, defaultValue) {\n\treturn new ZodPrefault({\n\t\ttype: \"prefault\",\n\t\tinnerType,\n\t\tget defaultValue() {\n\t\t\treturn typeof defaultValue === \"function\" ? defaultValue() : shallowClone(defaultValue);\n\t\t}\n\t});\n}\nconst ZodNonOptional = /* @__PURE__ */ $constructor(\"ZodNonOptional\", (inst, def) => {\n\t$ZodNonOptional.init(inst, def);\n\tZodType.init(inst, def);\n\tinst._zod.processJSONSchema = (ctx, json, params) => nonoptionalProcessor(inst, ctx, json, params);\n\tinst.unwrap = () => inst._zod.def.innerType;\n});\nfunction nonoptional(innerType, params) {\n\treturn new ZodNonOptional({\n\t\ttype: \"nonoptional\",\n\t\tinnerType,\n\t\t...normalizeParams(params)\n\t});\n}\nconst ZodCatch = /* @__PURE__ */ $constructor(\"ZodCatch\", (inst, def) => {\n\t$ZodCatch.init(inst, def);\n\tZodType.init(inst, def);\n\tinst._zod.processJSONSchema = (ctx, json, params) => catchProcessor(inst, ctx, json, params);\n\tinst.unwrap = () => inst._zod.def.innerType;\n\tinst.removeCatch = inst.unwrap;\n});\nfunction _catch(innerType, catchValue) {\n\treturn new ZodCatch({\n\t\ttype: \"catch\",\n\t\tinnerType,\n\t\tcatchValue: typeof catchValue === \"function\" ? catchValue : () => catchValue\n\t});\n}\nconst ZodPipe = /* @__PURE__ */ $constructor(\"ZodPipe\", (inst, def) => {\n\t$ZodPipe.init(inst, def);\n\tZodType.init(inst, def);\n\tinst._zod.processJSONSchema = (ctx, json, params) => pipeProcessor(inst, ctx, json, params);\n\tinst.in = def.in;\n\tinst.out = def.out;\n});\nfunction pipe(in_, out) {\n\treturn new ZodPipe({\n\t\ttype: \"pipe\",\n\t\tin: in_,\n\t\tout\n\t});\n}\nconst ZodReadonly = /* @__PURE__ */ $constructor(\"ZodReadonly\", (inst, def) => {\n\t$ZodReadonly.init(inst, def);\n\tZodType.init(inst, def);\n\tinst._zod.processJSONSchema = (ctx, json, params) => readonlyProcessor(inst, ctx, json, params);\n\tinst.unwrap = () => inst._zod.def.innerType;\n});\nfunction readonly(innerType) {\n\treturn new ZodReadonly({\n\t\ttype: \"readonly\",\n\t\tinnerType\n\t});\n}\nconst ZodCustom = /* @__PURE__ */ $constructor(\"ZodCustom\", (inst, def) => {\n\t$ZodCustom.init(inst, def);\n\tZodType.init(inst, def);\n\tinst._zod.processJSONSchema = (ctx, json, params) => customProcessor(inst, ctx, json, params);\n});\nfunction refine(fn, _params = {}) {\n\treturn _refine(ZodCustom, fn, _params);\n}\nfunction superRefine(fn) {\n\treturn _superRefine(fn);\n}\nconst describe = describe$1;\nconst meta = meta$1;\n\n//#endregion\n//#region src/text-animations/advanced-types.ts\n/**\n* @file packages/webgpu-renderers/src/text-animations/advanced-types.ts\n* Data contracts and Zod schemas for Advanced Motion Design & After Effects Extended Typography Engine.\n*/\nconst AnchorGroupingSchema = _enum([\n\t\"character\",\n\t\"word\",\n\t\"line\",\n\t\"all\"\n]);\nconst AnchorPresetSchema = _enum([\n\t\"center\",\n\t\"baseline\",\n\t\"bottom_left\",\n\t\"bottom_center\",\n\t\"bottom_right\",\n\t\"top_left\",\n\t\"top_center\",\n\t\"top_right\",\n\t\"custom\"\n]);\nconst TextAnchorConfigSchema = object({\n\tgrouping: AnchorGroupingSchema.default(\"character\"),\n\tpreset: AnchorPresetSchema.default(\"center\"),\n\tanchorX: number().default(.5),\n\tanchorY: number().default(.5),\n\toffsetX: number().default(0),\n\toffsetY: number().default(0)\n});\nconst SkewPropertiesSchema = object({\n\tskew: number().min(-90).max(90),\n\tskewAxis: number().default(0)\n});\nconst LineSpacingDynamicsSchema = object({\n\tlineSpacing: number(),\n\tlineAnchor: number().min(0).max(1).default(0)\n});\nconst VolumetricFormationModeSchema = _enum([\n\t\"planar\",\n\t\"vortex\",\n\t\"cylinder\",\n\t\"helix\"\n]);\nconst VolumetricFormationConfigSchema = object({\n\tmode: VolumetricFormationModeSchema.default(\"planar\"),\n\tradius: number().default(300),\n\tpitch: number().default(120),\n\ttotalAngle: number().default(360),\n\taxis: _enum([\n\t\t\"x\",\n\t\t\"y\",\n\t\t\"z\"\n\t]).default(\"y\"),\n\tperspective: number().positive().default(1200)\n});\nconst Spatial3DPropertiesSchema = object({\n\ttranslateZ: number().optional(),\n\trotationX: number().optional(),\n\trotationY: number().optional(),\n\trotationZ: number().optional(),\n\tformation: VolumetricFormationConfigSchema.optional()\n});\nconst SpringPhysicsSchema = object({\n\tstiffness: number().positive().default(180),\n\tdamping: number().positive().default(12),\n\tmass: number().positive().default(1),\n\tinitialVelocity: number().default(0),\n\tovershootMultiplier: number().min(.5).max(3).default(1)\n});\nconst ExpressionSelectorSchema = object({\n\ttype: literal(\"expression\"),\n\tname: string().optional(),\n\texpression: string(),\n\tmode: _enum([\n\t\t\"add\",\n\t\t\"subtract\",\n\t\t\"intersect\",\n\t\t\"min\",\n\t\t\"max\",\n\t\t\"difference\"\n\t]).default(\"add\"),\n\tamount: number().default(1)\n});\nconst DynamicStrokePropertiesSchema = object({\n\tstrokeWidth: number().min(0).default(0),\n\tstrokeColor: string().default(\"#ffffff\"),\n\tstrokeAlign: _enum([\n\t\t\"center\",\n\t\t\"inside\",\n\t\t\"outside\"\n\t]).default(\"center\"),\n\tfillOpacity: number().min(0).max(1).default(1),\n\tdashArray: tuple([number(), number()]).optional(),\n\tdashOffset: number().default(0)\n});\nconst KineticMarqueeConfigSchema = object({\n\tdirection: _enum([\n\t\t\"left\",\n\t\t\"right\",\n\t\t\"up\",\n\t\t\"down\"\n\t]).default(\"left\"),\n\tvelocity: number().default(120),\n\tloop: boolean().default(true),\n\trepeatGap: number().default(80),\n\tsnap: object({\n\t\tenabled: boolean().default(false),\n\t\tgranularity: _enum([\n\t\t\t\"character\",\n\t\t\t\"word\",\n\t\t\t\"line\"\n\t\t]).default(\"word\"),\n\t\tstopIndex: number().default(0),\n\t\tdecelEase: string().default(\"cubic.out\")\n\t}).optional()\n});\nconst VariableFontAxesSchema = object({\n\tweight: number().min(100).max(1e3).optional(),\n\twidth: number().min(50).max(200).optional(),\n\tslant: number().min(-25).max(25).optional(),\n\titalic: number().min(0).max(1).optional(),\n\topticalSize: number().min(6).max(144).optional()\n});\nconst ChromaticGlitchConfigSchema = object({\n\tredShiftX: number().default(0),\n\tredShiftY: number().default(0),\n\tblueShiftX: number().default(0),\n\tblueShiftY: number().default(0),\n\tsliceProbability: number().min(0).max(1).default(0),\n\tsliceAmplitude: number().default(0)\n});\nconst AudioSpectrumTypographySchema = object({\n\tsignalChannel: string(),\n\tminFreqHz: number().default(60),\n\tmaxFreqHz: number().default(16e3),\n\tscaleAxis: _enum([\n\t\t\"scaleY\",\n\t\t\"scaleX\",\n\t\t\"scale\",\n\t\t\"y\"\n\t]).default(\"scaleY\"),\n\tminScale: number().default(.2),\n\tmaxScale: number().default(2.5),\n\tpeakDecay: number().min(0).max(.99).default(.8)\n});\nconst LongShadowConfigSchema = object({\n\tangle: number().default(45),\n\tlength: number().min(0).default(0),\n\tcolor: string().default(\"#000000\"),\n\tstartOpacity: number().min(0).max(1).default(.8),\n\tendOpacity: number().min(0).max(1).default(0),\n\tsteps: number().int().min(4).max(64).default(16)\n});\nconst ParticleDissolveConfigSchema = object({\n\tprogress: number().min(0).max(1).default(0),\n\tdispersalAngle: number().default(90),\n\tmaxDisplacement: number().default(120),\n\tturbulence: number().default(.5),\n\tparticleSize: number().default(2)\n});\nconst ExtendedGlyphPropertiesSchema = object({\n\tx: number().optional(),\n\ty: number().optional(),\n\ttranslateZ: number().optional(),\n\tscale: number().optional(),\n\tscaleX: number().optional(),\n\tscaleY: number().optional(),\n\trotation: number().optional(),\n\trotationX: number().optional(),\n\trotationY: number().optional(),\n\trotationZ: number().optional(),\n\tformation: VolumetricFormationConfigSchema.optional(),\n\tskew: number().optional(),\n\tskewAxis: number().optional(),\n\ttracking: number().optional(),\n\tlineSpacing: number().optional(),\n\tlineAnchor: number().optional(),\n\tanchor: TextAnchorConfigSchema.optional(),\n\topacity: number().optional(),\n\tblur: number().optional(),\n\tfillColor: string().optional(),\n\tstroke: DynamicStrokePropertiesSchema.optional(),\n\tvariableAxes: VariableFontAxesSchema.optional(),\n\tchromaticGlitch: ChromaticGlitchConfigSchema.optional(),\n\tlongShadow: LongShadowConfigSchema.optional(),\n\tparticleDissolve: ParticleDissolveConfigSchema.optional(),\n\taudioSpectrum: AudioSpectrumTypographySchema.optional(),\n\tspring: SpringPhysicsSchema.optional()\n});\nconst AdvancedTextAnimatorSchema = object({\n\tname: string().default(\"AdvancedAnimator\"),\n\tselectors: array(record(string(), unknown())).default([]),\n\tprops: ExtendedGlyphPropertiesSchema\n});\n\n//#endregion\n//#region src/text-animations/types.ts\n/**\n* @file packages/webgpu-renderers/src/text-animations/types.ts\n* Data contracts and Zod schemas for After Effects Parity Text Animation Engine.\n*/\nconst Vec2Schema = object({\n\tx: number(),\n\ty: number()\n});\nconst CubicBezierSegmentSchema = object({\n\tp0: Vec2Schema,\n\tp1: Vec2Schema,\n\tp2: Vec2Schema,\n\tp3: Vec2Schema\n});\nconst TextPathSourceSchema = discriminatedUnion(\"type\", [\n\tobject({\n\t\ttype: literal(\"svg\"),\n\t\td: string().min(1, \"SVG path string cannot be empty\")\n\t}),\n\tobject({\n\t\ttype: literal(\"bezier\"),\n\t\tsegments: array(CubicBezierSegmentSchema).min(1)\n\t}),\n\tobject({\n\t\ttype: literal(\"ellipse\"),\n\t\tcx: number(),\n\t\tcy: number(),\n\t\trx: number().positive(),\n\t\try: number().positive(),\n\t\tstartAngleDeg: number().default(0),\n\t\tendAngleDeg: number().default(360)\n\t}),\n\tobject({\n\t\ttype: literal(\"wave\"),\n\t\tstartX: number(),\n\t\tstartY: number(),\n\t\tlength: number().positive(),\n\t\tamplitude: number(),\n\t\tfrequency: number().positive(),\n\t\tphaseDeg: number().default(0)\n\t})\n]);\nconst TextPathOptionsSchema = object({\n\tpath: TextPathSourceSchema,\n\tfirstMargin: number().default(0),\n\tlastMargin: number().default(0),\n\treversePath: boolean().default(false),\n\tperpendicularToPath: boolean().default(true),\n\tforceAlignment: boolean().default(false),\n\tloop: boolean().default(false),\n\tbaselineOffset: _enum([\n\t\t\"baseline\",\n\t\t\"center\",\n\t\t\"ascender\",\n\t\t\"descender\"\n\t]).default(\"baseline\"),\n\tbaselineShift: number().default(0)\n});\nconst TextCursorStyleSchema = _enum([\n\t\"bar\",\n\t\"underscore\",\n\t\"block\",\n\t\"custom\"\n]);\nconst TextCursorConfigSchema = object({\n\tenabled: boolean().default(true),\n\tstyle: TextCursorStyleSchema.default(\"bar\"),\n\tcustomChar: string().default(\"|\"),\n\tcolor: string().optional(),\n\tblinkFrequency: number().min(0).default(2),\n\thideOnComplete: boolean().default(false),\n\twidth: number().positive().default(2.5),\n\tspacing: number().default(3)\n});\nconst TypingCadenceSchema = discriminatedUnion(\"mode\", [object({ mode: literal(\"constant\") }), object({\n\tmode: literal(\"human\"),\n\tjitter: number().min(0).max(1).default(.35),\n\tcommaPauseMultiplier: number().min(1).default(3),\n\tsentencePauseMultiplier: number().min(1).default(5.5),\n\tparagraphPauseMultiplier: number().min(1).default(7)\n})]);\nconst TextScrambleConfigSchema = object({\n\tenabled: boolean().default(false),\n\tcharset: _enum([\n\t\t\"ascii\",\n\t\t\"alphanumeric\",\n\t\t\"matrix\",\n\t\t\"binary\",\n\t\t\"hex\",\n\t\t\"custom\"\n\t]).default(\"alphanumeric\"),\n\tcustomCharset: string().optional(),\n\tscrambleFramesPerChar: number().int().min(1).default(8),\n\thighlightProbability: number().min(0).max(1).default(.25),\n\tscrambleColor: string().optional()\n});\nconst TypewriterAnimatorSchema = object({\n\tgranularity: _enum([\n\t\t\"character\",\n\t\t\"word\",\n\t\t\"line\"\n\t]).default(\"character\"),\n\tcursor: TextCursorConfigSchema.default({\n\t\tenabled: true,\n\t\tstyle: \"bar\",\n\t\tcustomChar: \"|\",\n\t\tblinkFrequency: 2,\n\t\thideOnComplete: false,\n\t\twidth: 2.5,\n\t\tspacing: 3\n\t}),\n\tcadence: TypingCadenceSchema.default({\n\t\tmode: \"human\",\n\t\tjitter: .35,\n\t\tcommaPauseMultiplier: 3,\n\t\tsentencePauseMultiplier: 5.5,\n\t\tparagraphPauseMultiplier: 7\n\t}),\n\tscramble: TextScrambleConfigSchema.default({\n\t\tenabled: false,\n\t\tcharset: \"alphanumeric\",\n\t\tscrambleFramesPerChar: 8,\n\t\thighlightProbability: .25\n\t}),\n\tsoundSync: boolean().default(false)\n});\nconst SelectorBasedOnSchema = _enum([\n\t\"characters\",\n\t\"characters_excluding_spaces\",\n\t\"words\",\n\t\"lines\"\n]);\nconst SelectorUnitsSchema = _enum([\"percentage\", \"index\"]);\nconst SelectorShapeSchema = _enum([\n\t\"square\",\n\t\"ramp_up\",\n\t\"ramp_down\",\n\t\"triangle\",\n\t\"round\",\n\t\"smooth\"\n]);\nconst SelectorModeSchema = _enum([\n\t\"add\",\n\t\"subtract\",\n\t\"intersect\",\n\t\"min\",\n\t\"max\",\n\t\"difference\"\n]);\nconst TextRangeSelectorSchema = object({\n\ttype: literal(\"range\"),\n\tstart: number().default(0),\n\tend: number().default(1),\n\toffset: number().default(0),\n\tunits: SelectorUnitsSchema.default(\"percentage\"),\n\tbasedOn: SelectorBasedOnSchema.default(\"characters\"),\n\tshape: SelectorShapeSchema.default(\"square\"),\n\tmode: SelectorModeSchema.default(\"add\"),\n\tamount: number().min(-1).max(1).default(1),\n\teaseHigh: number().min(-1).max(1).default(0),\n\teaseLow: number().min(-1).max(1).default(0),\n\trandomizeOrder: boolean().default(false),\n\trandomSeed: number().int().default(12345)\n});\nconst TextWigglySelectorSchema = object({\n\ttype: literal(\"wiggly\"),\n\twigglesPerSecond: number().positive().default(2),\n\tcorrelation: number().min(0).max(1).default(.5),\n\ttemporalPhaseDeg: number().default(0),\n\tspatialPhaseDeg: number().default(0),\n\tminAmount: number().min(-1).max(1).default(-1),\n\tmaxAmount: number().min(-1).max(1).default(1),\n\trandomSeed: number().int().default(42),\n\tbasedOn: SelectorBasedOnSchema.default(\"characters\"),\n\tmode: SelectorModeSchema.default(\"intersect\")\n});\nconst TextSignalSelectorSchema = object({\n\ttype: literal(\"signal\"),\n\tsignalId: string(),\n\tmultiplier: number().default(1),\n\toffset: number().default(0),\n\tphaseSpread: number().default(0),\n\tbasedOn: SelectorBasedOnSchema.default(\"characters\"),\n\tmode: SelectorModeSchema.default(\"add\")\n});\nconst TextSelectorSchema = discriminatedUnion(\"type\", [\n\tTextRangeSelectorSchema,\n\tTextWigglySelectorSchema,\n\tTextSignalSelectorSchema\n]);\nconst AnimatableGlyphPropsSchema = object({\n\tx: number().optional(),\n\ty: number().optional(),\n\tz: number().optional(),\n\tscale: number().optional(),\n\tscaleX: number().optional(),\n\tscaleY: number().optional(),\n\trotation: number().optional(),\n\trotationX: number().optional(),\n\trotationY: number().optional(),\n\tskew: number().optional(),\n\tskewAxis: number().optional(),\n\ttracking: number().optional(),\n\tlineSpacing: number().optional(),\n\topacity: number().min(0).max(1).optional(),\n\tfillColor: string().optional(),\n\tstrokeColor: string().optional(),\n\tstrokeWidth: number().min(0).optional(),\n\tblur: number().min(0).optional(),\n\tcharacterOffset: number().int().optional()\n});\nconst GlyphAnchorGroupingSchema = _enum([\n\t\"character\",\n\t\"word\",\n\t\"line\",\n\t\"all\"\n]);\nconst GlyphAnchorPointSchema = object({\n\tgrouping: GlyphAnchorGroupingSchema.default(\"character\"),\n\tanchorX: number().default(.5),\n\tanchorY: number().default(.8)\n});\nconst AETextAnimatorSchema = object({\n\tname: string().default(\"Animator\"),\n\tselectors: array(TextSelectorSchema).min(1),\n\tprops: AnimatableGlyphPropsSchema,\n\tanchor: GlyphAnchorPointSchema.default({\n\t\tgrouping: \"character\",\n\t\tanchorX: .5,\n\t\tanchorY: .8\n\t})\n});\nconst EnhancedTextNodeSchema = object({\n\ttext: string(),\n\tfontFamily: string().default(\"Inter\"),\n\tfontSize: number().positive().default(24),\n\tfontWeight: union([number(), string()]).default(400),\n\tfill: string().default(\"#ffffff\"),\n\tletterSpacing: number().default(0),\n\tlineHeight: number().positive().default(1.2),\n\ttextAlign: _enum([\n\t\t\"left\",\n\t\t\"center\",\n\t\t\"right\"\n\t]).default(\"left\"),\n\tpathOptions: TextPathOptionsSchema.optional(),\n\ttypewriter: TypewriterAnimatorSchema.optional(),\n\tanimators: array(AETextAnimatorSchema).default([])\n});\n\n//#endregion\n//#region src/text-animations/builder.ts\n/**\n* @file packages/webgpu-renderers/src/text-animations/builder.ts\n* Fluent builders for Path-Following Text and After Effects Text Animators.\n*/\n/**\n* Fluent builder for creating Path-Following Text configurations.\n*/\nvar TextPathBuilder = class TextPathBuilder {\n\toptions = {\n\t\tfirstMargin: 0,\n\t\tlastMargin: 0,\n\t\treversePath: false,\n\t\tperpendicularToPath: true,\n\t\tforceAlignment: false,\n\t\tloop: false,\n\t\tbaselineOffset: \"baseline\",\n\t\tbaselineShift: 0\n\t};\n\tstatic fromSvg(svgPath) {\n\t\tconst builder = new TextPathBuilder();\n\t\tbuilder.options.path = {\n\t\t\ttype: \"svg\",\n\t\t\td: svgPath\n\t\t};\n\t\treturn builder;\n\t}\n\tstatic fromBezier(segments) {\n\t\tconst builder = new TextPathBuilder();\n\t\tbuilder.options.path = {\n\t\t\ttype: \"bezier\",\n\t\t\tsegments\n\t\t};\n\t\treturn builder;\n\t}\n\tstatic fromCurve(curve) {\n\t\treturn TextPathBuilder.fromBezier([curve]);\n\t}\n\tstatic circularBadge(cx, cy, radius) {\n\t\tconst builder = new TextPathBuilder();\n\t\tbuilder.options.path = {\n\t\t\ttype: \"ellipse\",\n\t\t\tcx,\n\t\t\tcy,\n\t\t\trx: radius,\n\t\t\try: radius,\n\t\t\tstartAngleDeg: 0,\n\t\t\tendAngleDeg: 360\n\t\t};\n\t\tbuilder.options.loop = true;\n\t\treturn builder;\n\t}\n\tstatic ellipse(cx, cy, rx, ry, startAngleDeg = 0, endAngleDeg = 360) {\n\t\tconst builder = new TextPathBuilder();\n\t\tbuilder.options.path = {\n\t\t\ttype: \"ellipse\",\n\t\t\tcx,\n\t\t\tcy,\n\t\t\trx,\n\t\t\try,\n\t\t\tstartAngleDeg,\n\t\t\tendAngleDeg\n\t\t};\n\t\tbuilder.options.loop = Math.abs(endAngleDeg - startAngleDeg) >= 360;\n\t\treturn builder;\n\t}\n\tstatic wave(startX, startY, length, amplitude, frequency, phaseDeg = 0) {\n\t\tconst builder = new TextPathBuilder();\n\t\tbuilder.options.path = {\n\t\t\ttype: \"wave\",\n\t\t\tstartX,\n\t\t\tstartY,\n\t\t\tlength,\n\t\t\tamplitude,\n\t\t\tfrequency,\n\t\t\tphaseDeg\n\t\t};\n\t\treturn builder;\n\t}\n\tfirstMargin(margin) {\n\t\tthis.options.firstMargin = margin;\n\t\treturn this;\n\t}\n\tlastMargin(margin) {\n\t\tthis.options.lastMargin = margin;\n\t\treturn this;\n\t}\n\treversePath(reverse) {\n\t\tthis.options.reversePath = reverse;\n\t\treturn this;\n\t}\n\tperpendicularToPath(perpendicular) {\n\t\tthis.options.perpendicularToPath = perpendicular;\n\t\treturn this;\n\t}\n\tforceAlignment(force) {\n\t\tthis.options.forceAlignment = force;\n\t\treturn this;\n\t}\n\tloop(isLoop) {\n\t\tthis.options.loop = isLoop;\n\t\treturn this;\n\t}\n\tbaselineOffset(offset) {\n\t\tthis.options.baselineOffset = offset;\n\t\treturn this;\n\t}\n\tbaselineShift(shiftPixels) {\n\t\tthis.options.baselineShift = shiftPixels;\n\t\treturn this;\n\t}\n\tbuild() {\n\t\treturn TextPathOptionsSchema.parse(this.options);\n\t}\n};\n/**\n* Fluent builder for After Effects Range, Wiggly, and Signal Animators.\n*/\nvar TextAnimatorBuilder = class TextAnimatorBuilder {\n\tname = \"Animator\";\n\tselectors = [];\n\tprops = {};\n\tanchor = {\n\t\tgrouping: \"character\",\n\t\tanchorX: .5,\n\t\tanchorY: .8\n\t};\n\tstatic create(name) {\n\t\tconst builder = new TextAnimatorBuilder();\n\t\tbuilder.name = name;\n\t\treturn builder;\n\t}\n\t/** Adds an After Effects Range Selector */\n\taddRangeSelector(config$1) {\n\t\tconst rawHigh = config$1.easeHigh ?? 0;\n\t\tconst easeHigh = Math.abs(rawHigh) > 1 ? rawHigh / 100 : rawHigh;\n\t\tconst rawLow = config$1.easeLow ?? 0;\n\t\tconst easeLow = Math.abs(rawLow) > 1 ? rawLow / 100 : rawLow;\n\t\tthis.selectors.push({\n\t\t\ttype: \"range\",\n\t\t\tstart: config$1.start ?? 0,\n\t\t\tend: config$1.end ?? 1,\n\t\t\toffset: config$1.offset ?? 0,\n\t\t\tunits: \"percentage\",\n\t\t\tbasedOn: config$1.basedOn ?? \"characters\",\n\t\t\tshape: config$1.shape ?? \"smooth\",\n\t\t\tmode: config$1.mode ?? \"add\",\n\t\t\tamount: 1,\n\t\t\teaseHigh: Math.max(-1, Math.min(1, easeHigh)),\n\t\t\teaseLow: Math.max(-1, Math.min(1, easeLow)),\n\t\t\trandomizeOrder: config$1.randomizeOrder ?? false,\n\t\t\trandomSeed: config$1.randomSeed ?? 12345\n\t\t});\n\t\treturn this;\n\t}\n\t/** Adds an After Effects Wiggly Selector for procedural organic flutter */\n\taddWigglySelector(config$1) {\n\t\tthis.selectors.push({\n\t\t\ttype: \"wiggly\",\n\t\t\twigglesPerSecond: config$1.wigglesPerSecond ?? 2,\n\t\t\tcorrelation: config$1.correlation ?? .5,\n\t\t\ttemporalPhaseDeg: 0,\n\t\t\tspatialPhaseDeg: 0,\n\t\t\tminAmount: config$1.minAmount ?? -1,\n\t\t\tmaxAmount: config$1.maxAmount ?? 1,\n\t\t\trandomSeed: config$1.randomSeed ?? 42,\n\t\t\tbasedOn: \"characters\",\n\t\t\tmode: config$1.mode ?? \"intersect\"\n\t\t});\n\t\treturn this;\n\t}\n\t/** Adds a reactive signal selector */\n\taddSignalSelector(signalId, multiplier = 1, phaseSpread = 0, offset = 0, mode = \"add\") {\n\t\tthis.selectors.push({\n\t\t\ttype: \"signal\",\n\t\t\tsignalId,\n\t\t\tmultiplier,\n\t\t\toffset,\n\t\t\tphaseSpread,\n\t\t\tbasedOn: \"characters\",\n\t\t\tmode\n\t\t});\n\t\treturn this;\n\t}\n\tx(pixels) {\n\t\tthis.props.x = pixels;\n\t\treturn this;\n\t}\n\ty(pixels) {\n\t\tthis.props.y = pixels;\n\t\treturn this;\n\t}\n\tz(pixels) {\n\t\tthis.props.z = pixels;\n\t\treturn this;\n\t}\n\tscale(scaleValue) {\n\t\tthis.props.scale = scaleValue;\n\t\treturn this;\n\t}\n\tscaleX(scaleValue) {\n\t\tthis.props.scaleX = scaleValue;\n\t\treturn this;\n\t}\n\tscaleY(scaleValue) {\n\t\tthis.props.scaleY = scaleValue;\n\t\treturn this;\n\t}\n\trotation(degrees) {\n\t\tthis.props.rotation = degrees;\n\t\treturn this;\n\t}\n\trotationX(degrees) {\n\t\tthis.props.rotationX = degrees;\n\t\treturn this;\n\t}\n\trotationY(degrees) {\n\t\tthis.props.rotationY = degrees;\n\t\treturn this;\n\t}\n\tskew(degrees) {\n\t\tthis.props.skew = degrees;\n\t\treturn this;\n\t}\n\tskewAxis(degrees) {\n\t\tthis.props.skewAxis = degrees;\n\t\treturn this;\n\t}\n\topacity(value) {\n\t\tthis.props.opacity = value;\n\t\treturn this;\n\t}\n\tblur(pixels) {\n\t\tthis.props.blur = pixels;\n\t\treturn this;\n\t}\n\tfill(colorHex) {\n\t\treturn this.fillColor(colorHex);\n\t}\n\tfillColor(colorHex) {\n\t\tthis.props.fillColor = colorHex;\n\t\treturn this;\n\t}\n\tstrokeColor(colorHex) {\n\t\tthis.props.strokeColor = colorHex;\n\t\treturn this;\n\t}\n\tstrokeWidth(pixels) {\n\t\tthis.props.strokeWidth = pixels;\n\t\treturn this;\n\t}\n\ttracking(spacingPixels) {\n\t\tthis.props.tracking = spacingPixels;\n\t\treturn this;\n\t}\n\tlineSpacing(spacingPixels) {\n\t\tthis.props.lineSpacing = spacingPixels;\n\t\treturn this;\n\t}\n\tcharacterOffset(offset) {\n\t\tthis.props.characterOffset = offset;\n\t\treturn this;\n\t}\n\tanchorGrouping(grouping, anchorX = .5, anchorY = .8) {\n\t\tthis.anchor = {\n\t\t\tgrouping,\n\t\t\tanchorX,\n\t\t\tanchorY\n\t\t};\n\t\treturn this;\n\t}\n\tbuild() {\n\t\treturn AETextAnimatorSchema.parse({\n\t\t\tname: this.name,\n\t\t\tselectors: this.selectors,\n\t\t\tprops: this.props,\n\t\t\tanchor: this.anchor\n\t\t});\n\t}\n};\n\n//#endregion\n//#region src/text-animations/math.ts\n/**\n* @file packages/webgpu-renderers/src/text-animations/math.ts\n* Mathematical formulations, closed-form physics, affine matrices, and evaluation algorithms.\n*/\n/**\n* Evaluates closed-form underdamped harmonic oscillator for spring physics:\n*\n* x(t) = target + (x0 - target) * exp(-zeta * omega_n * t) *\n* [ cos(omega_d * t) + (zeta / sqrt(1 - zeta^2)) * sin(omega_d * t) ]\n*\n* @param t Time in seconds since excitation\n* @param stiffness Spring stiffness (k)\n* @param damping Damping coefficient (c)\n* @param mass Mass of glyph (m)\n* @param initialVelocity Initial velocity (v0)\n* @returns Settled scalar progress in [0, 1] with overshoot\n*/\nfunction evaluateSpringProgress(t, stiffness = 180, damping = 12, mass = 1, initialVelocity = 0) {\n\tif (t <= 0) return 0;\n\tconst omega_n = Math.sqrt(Math.max(1e-4, stiffness) / Math.max(1e-4, mass));\n\tconst zeta = damping / (2 * Math.sqrt(Math.max(1e-4, stiffness * mass)));\n\tif (zeta < 1) {\n\t\tconst omega_d = omega_n * Math.sqrt(1 - zeta * zeta);\n\t\tconst decay = Math.exp(-zeta * omega_n * t);\n\t\tconst c1 = -1;\n\t\tconst c2 = (initialVelocity - zeta * omega_n * -1) / Math.max(1e-6, omega_d);\n\t\tconst displacement = decay * (c1 * Math.cos(omega_d * t) + c2 * Math.sin(omega_d * t));\n\t\treturn Math.min(2, Math.max(-1, 1 + displacement));\n\t} else if (Math.abs(zeta - 1) < 1e-4) {\n\t\tconst decay = Math.exp(-omega_n * t);\n\t\treturn 1 + (-1 + (initialVelocity - omega_n) * t) * decay;\n\t} else {\n\t\tconst s1 = -omega_n * (zeta - Math.sqrt(zeta * zeta - 1));\n\t\tconst s2 = -omega_n * (zeta + Math.sqrt(zeta * zeta - 1));\n\t\tconst c1 = (initialVelocity + s2) / Math.max(1e-6, s1 - s2);\n\t\tconst c2 = -1 - c1;\n\t\treturn 1 + (c1 * Math.exp(s1 * t) + c2 * Math.exp(s2 * t));\n\t}\n}\n/**\n* Evaluates 2D Directional Skew matrix components:\n*\n* S(theta, phi) = R(phi) * [ 1 tan(theta) ] * R(-phi)\n* [ 0 1 ]\n*\n* @param skewDeg Skew angle in degrees\n* @param skewAxisDeg Skew axis in degrees\n* @returns 2x2 affine shear matrix components [m00, m01, m10, m11]\n*/\nfunction evaluateSkewMatrix(skewDeg, skewAxisDeg = 0) {\n\tif (skewDeg === 0) return [\n\t\t1,\n\t\t0,\n\t\t0,\n\t\t1\n\t];\n\tconst theta = skewDeg * Math.PI / 180;\n\tconst phi = skewAxisDeg * Math.PI / 180;\n\tconst cosPhi = Math.cos(phi);\n\tconst sinPhi = Math.sin(phi);\n\tconst tanTheta = Math.tan(theta);\n\treturn [\n\t\t1 - tanTheta * cosPhi * sinPhi,\n\t\ttanTheta * cosPhi * cosPhi,\n\t\t-tanTheta * sinPhi * sinPhi,\n\t\t1 + tanTheta * sinPhi * cosPhi\n\t];\n}\n/**\n* Computes anchor pivot coordinates relative to glyph bounding box:\n*\n* @param bbox Glyph bounding box { width, height, ascender, descender }\n* @param config Text anchor configuration\n* @returns Pivot offset (px, py) relative to glyph quad center\n*/\nfunction computeAnchorPivotOffset(bbox, config$1) {\n\tlet normX = config$1.anchorX;\n\tlet normY = config$1.anchorY;\n\tswitch (config$1.preset) {\n\t\tcase \"center\":\n\t\t\tnormX = .5;\n\t\t\tnormY = .5;\n\t\t\tbreak;\n\t\tcase \"baseline\":\n\t\t\tnormX = .5;\n\t\t\tnormY = bbox.height > 0 ? bbox.ascender / bbox.height : .8;\n\t\t\tbreak;\n\t\tcase \"bottom_left\":\n\t\t\tnormX = 0;\n\t\t\tnormY = 1;\n\t\t\tbreak;\n\t\tcase \"bottom_center\":\n\t\t\tnormX = .5;\n\t\t\tnormY = 1;\n\t\t\tbreak;\n\t\tcase \"bottom_right\":\n\t\t\tnormX = 1;\n\t\t\tnormY = 1;\n\t\t\tbreak;\n\t\tcase \"top_left\":\n\t\t\tnormX = 0;\n\t\t\tnormY = 0;\n\t\t\tbreak;\n\t\tcase \"top_center\":\n\t\t\tnormX = .5;\n\t\t\tnormY = 0;\n\t\t\tbreak;\n\t\tcase \"top_right\":\n\t\t\tnormX = 1;\n\t\t\tnormY = 0;\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tnormX = .5;\n\t\t\tnormY = .5;\n\t\t\tbreak;\n\t}\n\treturn {\n\t\tpx: (normX - .5) * bbox.width + config$1.offsetX,\n\t\tpy: (normY - .5) * bbox.height + config$1.offsetY\n\t};\n}\n/**\n* Computes leading displacement per line based on lineAnchor:\n*\n* @param lineIndex 0-based index of current line\n* @param lineCount Total lines in paragraph\n* @param lineSpacing Additional leading in pixels\n* @param lineAnchor Pivot line anchor in [0, 1]\n* @returns Y displacement in pixels\n*/\nfunction computeLineLeadingDisplacement(lineIndex, lineCount, lineSpacing, lineAnchor = 0) {\n\tif (lineSpacing === 0 || lineCount <= 1) return 0;\n\treturn (lineIndex - lineAnchor * (lineCount - 1)) * lineSpacing;\n}\n/**\n* Evaluates an Expression Selector formula safely in a sandboxed numeric scope.\n*\n* @param expression Formula string (e.g. \"Math.sin(time * 4 + textIndex * 0.2)\")\n* @param ctx Glyph evaluation context\n* @returns Numeric selector weight clamped to [-1, 1]\n*/\nfunction evaluateExpressionSelector(expression, ctx) {\n\ttry {\n\t\tconst scope = {\n\t\t\ttextIndex: ctx.charIndex,\n\t\t\ttextTotal: Math.max(1, ctx.totalChars),\n\t\t\twordIndex: ctx.wordIndex,\n\t\t\twordTotal: Math.max(1, ctx.totalWords),\n\t\t\tlineIndex: ctx.lineIndex,\n\t\t\tlineTotal: Math.max(1, ctx.totalLines),\n\t\t\ttime: ctx.time,\n\t\t\tframe: ctx.frame,\n\t\t\tfps: ctx.fps,\n\t\t\tsin: Math.sin,\n\t\t\tcos: Math.cos,\n\t\t\ttan: Math.tan,\n\t\t\texp: Math.exp,\n\t\t\tlog: Math.log,\n\t\t\tabs: Math.abs,\n\t\t\tmin: Math.min,\n\t\t\tmax: Math.max,\n\t\t\tsqrt: Math.sqrt,\n\t\t\tpow: Math.pow,\n\t\t\tfloor: Math.floor,\n\t\t\tceil: Math.ceil,\n\t\t\tround: Math.round,\n\t\t\tPI: Math.PI,\n\t\t\tclamp: (v, lo, hi) => Math.max(lo, Math.min(hi, v)),\n\t\t\tnoise: (seed) => {\n\t\t\t\tconst n = Math.sin(seed * 12.9898 + ctx.frame * .1) * 43758.5453;\n\t\t\t\treturn (n - Math.floor(n)) * 2 - 1;\n\t\t\t},\n\t\t\tsignals: ctx.signals ?? {}\n\t\t};\n\t\tconst keys = Object.keys(scope);\n\t\tconst values = Object.values(scope);\n\t\tconst fn = new Function(...keys, `return (${expression});`);\n\t\tconst result = Number(fn(...values));\n\t\treturn Number.isFinite(result) ? Math.max(-1, Math.min(1, result)) : 0;\n\t} catch {\n\t\treturn 0;\n\t}\n}\n/**\n* Evaluates 3D Volumetric Formation parametric coordinates.\n*/\nfunction evaluateVolumetricFormation(glyphIndex, totalGlyphs, config$1) {\n\tconst n = Math.max(1, totalGlyphs);\n\tconst norm = n > 1 ? glyphIndex / (n - 1) : 0;\n\tconst totalAngleRad = config$1.totalAngle * Math.PI / 180;\n\tconst phi = norm * totalAngleRad;\n\tlet x = 0;\n\tlet y = 0;\n\tlet z = 0;\n\tlet rotX = 0;\n\tlet rotY = 0;\n\tlet rotZ = 0;\n\tlet depthOpacity = 1;\n\tswitch (config$1.mode) {\n\t\tcase \"cylinder\": {\n\t\t\tconst theta = config$1.totalAngle < 360 ? (norm - .5) * totalAngleRad : phi;\n\t\t\tif (config$1.axis === \"y\") {\n\t\t\t\tx = config$1.radius * Math.sin(theta);\n\t\t\t\tz = config$1.radius * Math.cos(theta) - config$1.radius;\n\t\t\t\trotY = theta * 180 / Math.PI;\n\t\t\t} else if (config$1.axis === \"x\") {\n\t\t\t\ty = config$1.radius * Math.sin(theta);\n\t\t\t\tz = config$1.radius * Math.cos(theta) - config$1.radius;\n\t\t\t\trotX = theta * 180 / Math.PI;\n\t\t\t} else {\n\t\t\t\tx = config$1.radius * Math.sin(theta);\n\t\t\t\ty = config$1.radius * Math.cos(theta);\n\t\t\t\trotZ = theta * 180 / Math.PI;\n\t\t\t}\n\t\t\tconst facing = Math.cos(theta);\n\t\t\tdepthOpacity = Math.max(.25, (facing + 1) * .5);\n\t\t\tbreak;\n\t\t}\n\t\tcase \"vortex\": {\n\t\t\tconst spiralPhi = -Math.PI / 2 + phi;\n\t\t\tconst r = config$1.radius * (1 - norm * .35);\n\t\t\tx = r * Math.cos(spiralPhi);\n\t\t\ty = r * Math.sin(spiralPhi);\n\t\t\tz = -glyphIndex * config$1.pitch || 0;\n\t\t\tconst dr = -.35 * config$1.radius / (totalAngleRad || 1);\n\t\t\tconst dx = dr * Math.cos(spiralPhi) - r * Math.sin(spiralPhi);\n\t\t\tconst dy = dr * Math.sin(spiralPhi) + r * Math.cos(spiralPhi);\n\t\t\trotZ = Math.atan2(dy, dx) * 180 / Math.PI;\n\t\t\tdepthOpacity = Math.max(.65, 1 - norm * .35);\n\t\t\tbreak;\n\t\t}\n\t\tcase \"helix\":\n\t\t\tif (config$1.axis === \"x\") {\n\t\t\t\tconst pitchX = config$1.pitch > 10 ? config$1.pitch : 28;\n\t\t\t\tx = (glyphIndex - (n - 1) / 2) * pitchX;\n\t\t\t\ty = config$1.radius * Math.sin(phi);\n\t\t\t\tz = config$1.radius * Math.cos(phi) - config$1.radius;\n\t\t\t\trotX = Math.sin(phi) * 22;\n\t\t\t\tdepthOpacity = .75 + .25 * ((Math.cos(phi) + 1) * .5);\n\t\t\t} else {\n\t\t\t\tconst theta = (norm - .5) * totalAngleRad;\n\t\t\t\tx = config$1.radius * Math.sin(theta);\n\t\t\t\ty = (glyphIndex - (n - 1) / 2) * config$1.pitch;\n\t\t\t\tz = config$1.radius * Math.cos(theta) - config$1.radius;\n\t\t\t\trotY = theta * 180 / Math.PI;\n\t\t\t\tconst facing = Math.cos(theta);\n\t\t\t\tdepthOpacity = Math.max(.65, (facing + 1) * .5);\n\t\t\t}\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tz = 0;\n\t\t\tbreak;\n\t}\n\tconst perspective = Math.max(100, config$1.perspective ?? 1200);\n\tconst depthDist = perspective - z;\n\tconst scaleMult = depthDist > 1 ? perspective / depthDist : 1;\n\treturn {\n\t\tx: x * scaleMult,\n\t\ty: y * scaleMult,\n\t\tz,\n\t\trotX,\n\t\trotY,\n\t\trotZ,\n\t\tscaleMult: Math.max(.1, scaleMult),\n\t\tdepthOpacity\n\t};\n}\n/**\n* Evaluates infinite kinetic marquee translation and snapping.\n*/\nfunction evaluateMarqueeOffset(baseX, containerWidth, contentWidth, config$1, elapsedSec) {\n\tconst totalSpan = (containerWidth > 0 ? Math.max(containerWidth, contentWidth) : contentWidth) + config$1.repeatGap;\n\tif (totalSpan <= 0) return baseX;\n\tlet travel = config$1.velocity * elapsedSec;\n\tif (config$1.snap?.enabled) {\n\t\tconst targetPos = (config$1.snap.stopIndex ?? 0) * (config$1.snap.granularity === \"character\" ? 40 : 120);\n\t\tconst decelFactor = Math.min(1, elapsedSec * 1.5);\n\t\ttravel = travel * (1 - decelFactor) + targetPos * decelFactor;\n\t}\n\tif (config$1.direction === \"right\" || config$1.direction === \"down\") travel = -travel;\n\tif (config$1.loop) {\n\t\tconst wrapped = (baseX - travel) % totalSpan;\n\t\treturn wrapped < -contentWidth ? wrapped + totalSpan : wrapped;\n\t}\n\treturn baseX - travel;\n}\n/**\n* Samples audio FFT frequency bin and computes scale factor for Audio Spectrum Typography.\n*/\nfunction sampleAudioSpectrumScale(glyphIndex, totalGlyphs, config$1, signals, frame, fps) {\n\tconst n = Math.max(1, totalGlyphs);\n\tconst norm = n > 1 ? glyphIndex / (n - 1) : .5;\n\tconst minFreq = Math.max(20, config$1.minFreqHz);\n\tconst targetFreq = minFreq * (Math.max(minFreq + 100, config$1.maxFreqHz) / minFreq) ** norm;\n\tlet magnitude = 0;\n\tconst regSamples = signalRegistry.getChannelSamples(config$1.signalChannel, \"primary\");\n\tif (regSamples && regSamples.length > 0) {\n\t\tconst compFps = fps > 0 ? fps : 24;\n\t\tconst sampleIdx = Math.max(0, Math.min(regSamples.length - 1, Math.round(frame / compFps * 24)));\n\t\tmagnitude = Number(regSamples[sampleIdx]) || 0;\n\t} else if (signals) {\n\t\tconst sig = signals[config$1.signalChannel];\n\t\tif (typeof sig === \"number\") magnitude = sig;\n\t\telse if (typeof sig === \"function\") magnitude = Number(sig(frame, fps, targetFreq)) || 0;\n\t\telse if (typeof sig === \"object\" && sig !== null) {\n\t\t\tconst sObj = sig;\n\t\t\tif (typeof sObj.get === \"function\") magnitude = Number(sObj.get({\n\t\t\t\tframe,\n\t\t\t\tfps,\n\t\t\t\tfreq: targetFreq\n\t\t\t})) || 0;\n\t\t\telse if (Array.isArray(sObj.samples) || ArrayBuffer.isView(sObj.samples)) {\n\t\t\t\tconst arr = sObj.samples;\n\t\t\t\tconst binIdx = Math.floor(norm * (arr.length - 1));\n\t\t\t\tmagnitude = Number(arr[binIdx]) || 0;\n\t\t\t}\n\t\t}\n\t}\n\tconst clampedMag = Math.max(0, Math.min(1, magnitude));\n\treturn config$1.minScale + clampedMag * (config$1.maxScale - config$1.minScale);\n}\n\n//#endregion\n//#region src/text-animations/selectors.ts\n/**\n* Computes After Effects Range Selector weight for a single glyph index.\n*\n* @param index Normalized position of the glyph in the string (0.0 to 1.0)\n* @param start Start boundary (0.0 to 1.0)\n* @param end End boundary (0.0 to 1.0)\n* @param offset Window shift (-1.0 to 1.0)\n* @param shape Falloff curve\n* @param easeHigh Non-linear easing for high values\n* @param easeLow Non-linear easing for low values\n* @returns Weight in [0.0, 1.0]\n*/\nfunction computeRangeSelectorWeight(index, start, end, offset, shape, easeHigh = 0, easeLow = 0) {\n\tconst effStart = start + offset;\n\tconst effEnd = end + offset;\n\tif (effEnd <= effStart) return 0;\n\tconst relativePos = (index - effStart) / (effEnd - effStart);\n\tlet baseWeight = 0;\n\tswitch (shape) {\n\t\tcase \"square\":\n\t\t\tbaseWeight = relativePos >= 0 && relativePos <= 1 ? 1 : 0;\n\t\t\tbreak;\n\t\tcase \"ramp_up\":\n\t\t\tbaseWeight = Math.max(0, Math.min(1, relativePos));\n\t\t\tbreak;\n\t\tcase \"ramp_down\":\n\t\t\tbaseWeight = 1 - Math.max(0, Math.min(1, relativePos));\n\t\t\tbreak;\n\t\tcase \"triangle\":\n\t\t\tif (relativePos < 0 || relativePos > 1) baseWeight = 0;\n\t\t\telse if (relativePos < .5) baseWeight = relativePos * 2;\n\t\t\telse baseWeight = (1 - relativePos) * 2;\n\t\t\tbreak;\n\t\tcase \"round\":\n\t\t\tif (relativePos < 0 || relativePos > 1) baseWeight = 0;\n\t\t\telse baseWeight = .5 - .5 * Math.cos(relativePos * 2 * Math.PI);\n\t\t\tbreak;\n\t\tcase \"smooth\":\n\t\t\tif (relativePos <= 0) baseWeight = 0;\n\t\t\telse if (relativePos >= 1) baseWeight = 1;\n\t\t\telse baseWeight = relativePos * relativePos * (3 - 2 * relativePos);\n\t\t\tbreak;\n\t}\n\tif (baseWeight > 0 && baseWeight < 1) {\n\t\tif (easeHigh !== 0 && baseWeight > .5) baseWeight = .5 + .5 * ((baseWeight - .5) * 2) ** (easeHigh > 0 ? 1 + easeHigh * 3 : 1 / (1 - easeHigh * 3));\n\t\tif (easeLow !== 0 && baseWeight <= .5) baseWeight = .5 * (baseWeight * 2) ** (easeLow > 0 ? 1 + easeLow * 3 : 1 / (1 - easeLow * 3));\n\t}\n\treturn Math.max(0, Math.min(1, baseWeight));\n}\n/**\n* 1D Gradient deterministic hash noise for Wiggly Selectors.\n*/\nfunction deterministicWigglyNoise(seed, glyphIndex, phase, correlation) {\n\tconst coord = (glyphIndex * (1 - correlation) + correlation) * 12.9898 + phase + seed * 78.233;\n\tconst raw = Math.sin(coord) * 43758.5453;\n\treturn (raw - Math.floor(raw)) * 2 - 1;\n}\n/**\n* Deterministic pseudo-random number generator for seeded order shuffling.\n*/\nfunction getShuffledOrder(count, seed) {\n\tlet s = seed;\n\tconst nextRand = () => {\n\t\ts = (s * 9301 + 49297) % 233280;\n\t\treturn s / 233280;\n\t};\n\tconst arr = Array.from({ length: count }, (_, i) => i);\n\tfor (let i = arr.length - 1; i > 0; i--) {\n\t\tconst j = Math.floor(nextRand() * (i + 1));\n\t\tconst temp = arr[i];\n\t\tarr[i] = arr[j];\n\t\tarr[j] = temp;\n\t}\n\treturn arr;\n}\n/**\n* Combines consecutive selector weights using After Effects Selector Mode logic.\n*/\nfunction evaluateSelectorCombination(prevWeight, currWeight, mode) {\n\tswitch (mode) {\n\t\tcase \"add\": return Math.max(0, Math.min(1, prevWeight + currWeight));\n\t\tcase \"subtract\": return Math.max(0, Math.min(1, prevWeight - currWeight));\n\t\tcase \"intersect\": return prevWeight * currWeight;\n\t\tcase \"min\": return Math.min(prevWeight, currWeight);\n\t\tcase \"max\": return Math.max(prevWeight, currWeight);\n\t\tcase \"difference\": return Math.abs(prevWeight - currWeight);\n\t}\n}\n\n//#endregion\n//#region src/text-animations/typewriter.ts\nconst SCRAMBLE_POOLS = {\n\tascii: \"!@#$%^&*()_+{}[]:;<>,.?\",\n\talphanumeric: \"ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789\",\n\tmatrix: \"010101<>[]{}+=*~#%&!?/\\\\:;|X0123456789\",\n\tbinary: \"01\",\n\thex: \"0123456789ABCDEF\"\n};\nfunction getScramblePool(charset, customCharset) {\n\tif (charset === \"custom\" && customCharset && customCharset.length > 0) return customCharset;\n\treturn SCRAMBLE_POOLS[charset] ?? SCRAMBLE_POOLS.alphanumeric;\n}\n/**\n* Evaluates typewriter visible character count and scramble state for frame `currentFrame`.\n*/\nfunction evaluateTypewriterState(fullText, currentFrame, startFrame, durationFrames, cadence = {\n\tmode: \"human\",\n\tjitter: .35,\n\tcommaPauseMultiplier: 3,\n\tsentencePauseMultiplier: 5.5,\n\tparagraphPauseMultiplier: 7\n}, scramble = {\n\tenabled: false,\n\tcharset: \"alphanumeric\",\n\tscrambleFramesPerChar: 8,\n\thighlightProbability: .25\n}, blinkFrequency = 2, granularity = \"character\", progressOverride) {\n\tif (progressOverride === void 0 && currentFrame < startFrame) return {\n\t\tvisibleChars: 0,\n\t\tcurrentDisplayString: \"\",\n\t\tisCursorVisible: false\n\t};\n\tconst progress = progressOverride !== void 0 ? Math.max(0, Math.min(1, progressOverride)) : Math.min(1, (currentFrame - startFrame) / Math.max(1, durationFrames));\n\tconst elapsed = progressOverride !== void 0 ? progress * durationFrames : currentFrame - startFrame;\n\tconst totalChars = fullText.length;\n\tlet visibleCount = Math.floor(progress * totalChars);\n\tif (granularity === \"word\") {\n\t\tconst tokens = fullText.split(/(\\s+)/);\n\t\tconst wordIndices = [];\n\t\ttokens.forEach((t, i) => {\n\t\t\tif (t.trim().length > 0) wordIndices.push(i);\n\t\t});\n\t\tconst visibleWords = Math.min(wordIndices.length, Math.floor(progress * (wordIndices.length + 1)));\n\t\tif (visibleWords <= 0) visibleCount = 0;\n\t\telse {\n\t\t\tconst lastIdx = wordIndices[Math.min(wordIndices.length - 1, visibleWords - 1)];\n\t\t\tvisibleCount = tokens.slice(0, lastIdx + 1).join(\"\").length;\n\t\t}\n\t} else if (granularity === \"line\") {\n\t\tconst lines = fullText.split(\"\\n\");\n\t\tconst visibleLines = Math.min(lines.length, Math.floor(progress * (lines.length + 1)));\n\t\tvisibleCount = lines.slice(0, visibleLines).join(\"\\n\").length;\n\t} else if (cadence.mode === \"human\" && progress < 1) {\n\t\tlet simulatedCharIndex = 0;\n\t\tlet simulatedElapsed = 0;\n\t\tconst baseFramesPerChar = durationFrames / Math.max(1, totalChars);\n\t\tfor (let i = 0; i < totalChars; i++) {\n\t\t\tconst char = fullText[i];\n\t\t\tlet multiplier = 1;\n\t\t\tconst commaMult = cadence.commaPauseMultiplier ?? 3;\n\t\t\tconst sentenceMult = cadence.sentencePauseMultiplier ?? 5.5;\n\t\t\tconst paraMult = cadence.paragraphPauseMultiplier ?? 7;\n\t\t\tconst jitter = cadence.jitter ?? .35;\n\t\t\tif (char === \",\" || char === \";\") multiplier = commaMult;\n\t\t\telse if (char === \".\" || char === \"!\" || char === \"?\") multiplier = sentenceMult;\n\t\t\telse if (char === \"\\n\") multiplier = paraMult;\n\t\t\tconst jitterVal = 1 + Math.sin(i * 17.3 + 42) * .5 * jitter;\n\t\t\tconst charDuration = baseFramesPerChar * multiplier * jitterVal;\n\t\t\tsimulatedElapsed += charDuration;\n\t\t\tif (simulatedElapsed <= elapsed) simulatedCharIndex = i + 1;\n\t\t\telse break;\n\t\t}\n\t\tvisibleCount = Math.min(totalChars, simulatedCharIndex);\n\t}\n\tlet displayStr = fullText.slice(0, visibleCount);\n\tif (scramble.enabled && visibleCount < totalChars && visibleCount > 0) {\n\t\tconst pool = getScramblePool(scramble.charset, scramble.customCharset);\n\t\tconst trailCount = Math.min(visibleCount, Math.max(1, scramble.scrambleFramesPerChar > 4 ? 3 : 2));\n\t\tlet scrambledTail = \"\";\n\t\tfor (let t = 0; t < trailCount; t++) {\n\t\t\tconst idx = Math.floor(Math.abs(Math.sin(currentFrame * 7 + t * 13)) * pool.length) % pool.length;\n\t\t\tscrambledTail += pool[idx];\n\t\t}\n\t\tdisplayStr = displayStr.slice(0, displayStr.length - trailCount) + scrambledTail;\n\t}\n\tlet isCursorVisible = true;\n\tif (blinkFrequency > 0) {\n\t\tconst halfPeriodFrames = Math.max(1, Math.round(30 / (2 * blinkFrequency)));\n\t\tisCursorVisible = Math.floor(elapsed / halfPeriodFrames) % 2 === 0;\n\t}\n\treturn {\n\t\tvisibleChars: visibleCount,\n\t\tcurrentDisplayString: displayStr,\n\t\tisCursorVisible\n\t};\n}\n\n//#endregion\nexport { SpringPhysicsSchema as $, TextPathSourceSchema as A, AnchorGroupingSchema as B, SelectorBasedOnSchema as C, AUDIO_BIQUAD_FILTER_SHADER as Ct, TextCursorConfigSchema as D, AudioSignalComputePipeline as Dt, SelectorUnitsSchema as E, AUDIO_SIGNAL_TO_TEXTURE_SHADER as Et, TextWigglySelectorSchema as F, ExpressionSelectorSchema as G, AudioSpectrumTypographySchema as H, TypewriterAnimatorSchema as I, LineSpacingDynamicsSchema as J, ExtendedGlyphPropertiesSchema as K, TypingCadenceSchema as L, TextScrambleConfigSchema as M, TextSelectorSchema as N, TextCursorStyleSchema as O, TextSignalSelectorSchema as P, Spatial3DPropertiesSchema as Q, Vec2Schema as R, GlyphAnchorPointSchema as S, parseStateFromFnBody as St, SelectorShapeSchema as T, AUDIO_PACE_INTEGRAL_SHADER as Tt, ChromaticGlitchConfigSchema as U, AnchorPresetSchema as V, DynamicStrokePropertiesSchema as W, ParticleDissolveConfigSchema as X, LongShadowConfigSchema as Y, SkewPropertiesSchema as Z, AETextAnimatorSchema as _, SignalRegistry as _t, evaluateSelectorCombination as a, buildPathLUT as at, EnhancedTextNodeSchema as b, buildWGSLSignalFn as bt, computeLineLeadingDisplacement as c, evaluateCubicBezier as ct, evaluateSkewMatrix as d, generatePathSegments as dt, TextAnchorConfigSchema as et, evaluateSpringProgress as f, parseSvgPathToCubicBeziers as ft, TextPathBuilder as g, waveToCubicBeziers as gt, TextAnimatorBuilder as h, svgArcToCubicBeziers as ht, deterministicWigglyNoise as i, AdvancedTextAnimatorBuilder as it, TextRangeSelectorSchema as j, TextPathOptionsSchema as k, evaluateExpressionSelector as l, evaluateCubicBezierDerivative as lt, sampleAudioSpectrumScale as m, samplePathChainGeometry as mt, getScramblePool as n, VolumetricFormationConfigSchema as nt, getShuffledOrder as o, distanceToCurveParameter as ot, evaluateVolumetricFormation as p, sampleCurveGeometry as pt, KineticMarqueeConfigSchema as q, computeRangeSelectorWeight as r, VolumetricFormationModeSchema as rt, computeAnchorPivotOffset as s, ellipseToCubicBeziers as st, evaluateTypewriterState as t, VariableFontAxesSchema as tt, evaluateMarqueeOffset as u, generateArcLengthLUT as ut, AnimatableGlyphPropsSchema as v, signalRegistry as vt, SelectorModeSchema as w, AUDIO_FEATURE_EXTRACTION_SHADER as wt, GlyphAnchorGroupingSchema as x, generateWGSLFromConfig as xt, CubicBezierSegmentSchema as y, buildUniformBufferLayout as yt, AdvancedTextAnimatorSchema as z };\n//# sourceMappingURL=text-animations-CaYMwhsz.mjs.map","import { parseCssColor } from \"@framefields/core\";\n\n//#region src/math3d/vector3.ts\nconst Vector3Math = {\n\tcreate(x = 0, y = 0, z = 0) {\n\t\treturn [\n\t\t\tx,\n\t\t\ty,\n\t\t\tz\n\t\t];\n\t},\n\tcopy(v) {\n\t\treturn [\n\t\t\tv[0],\n\t\t\tv[1],\n\t\t\tv[2]\n\t\t];\n\t},\n\tset(out, x, y, z) {\n\t\tout[0] = x;\n\t\tout[1] = y;\n\t\tout[2] = z;\n\t\treturn out;\n\t},\n\tadd(a, b) {\n\t\treturn [\n\t\t\ta[0] + b[0],\n\t\t\ta[1] + b[1],\n\t\t\ta[2] + b[2]\n\t\t];\n\t},\n\tsubtract(a, b) {\n\t\treturn [\n\t\t\ta[0] - b[0],\n\t\t\ta[1] - b[1],\n\t\t\ta[2] - b[2]\n\t\t];\n\t},\n\tmultiplyScalar(v, s) {\n\t\treturn [\n\t\t\tv[0] * s,\n\t\t\tv[1] * s,\n\t\t\tv[2] * s\n\t\t];\n\t},\n\tdot(a, b) {\n\t\treturn a[0] * b[0] + a[1] * b[1] + a[2] * b[2];\n\t},\n\tcross(a, b) {\n\t\treturn [\n\t\t\ta[1] * b[2] - a[2] * b[1],\n\t\t\ta[2] * b[0] - a[0] * b[2],\n\t\t\ta[0] * b[1] - a[1] * b[0]\n\t\t];\n\t},\n\tlengthSq(v) {\n\t\treturn v[0] * v[0] + v[1] * v[1] + v[2] * v[2];\n\t},\n\tlength(v) {\n\t\treturn Math.hypot(v[0], v[1], v[2]);\n\t},\n\tdistance(a, b) {\n\t\treturn Math.hypot(a[0] - b[0], a[1] - b[1], a[2] - b[2]);\n\t},\n\tnormalize(v) {\n\t\tconst len = Math.hypot(v[0], v[1], v[2]);\n\t\tif (len === 0) return [\n\t\t\t0,\n\t\t\t0,\n\t\t\t0\n\t\t];\n\t\tconst inv = 1 / len;\n\t\treturn [\n\t\t\tv[0] * inv,\n\t\t\tv[1] * inv,\n\t\t\tv[2] * inv\n\t\t];\n\t},\n\tlerp(a, b, t) {\n\t\treturn [\n\t\t\ta[0] + (b[0] - a[0]) * t,\n\t\t\ta[1] + (b[1] - a[1]) * t,\n\t\t\ta[2] + (b[2] - a[2]) * t\n\t\t];\n\t},\n\tequals(a, b, epsilon = 1e-6) {\n\t\treturn Math.abs(a[0] - b[0]) <= epsilon && Math.abs(a[1] - b[1]) <= epsilon && Math.abs(a[2] - b[2]) <= epsilon;\n\t}\n};\n\n//#endregion\n//#region src/math3d/matrix4.ts\n/**\n* Column-major 4x4 matrix mathematics for WebGPU 3D rendering and camera projections.\n* Memory layout matches WGSL `mat4x4<f32>`:\n* [ 0, 4, 8, 12 ]\n* [ 1, 5, 9, 13 ]\n* [ 2, 6, 10, 14 ]\n* [ 3, 7, 11, 15 ]\n*/\nconst Matrix4Math = {\n\tidentity() {\n\t\treturn [\n\t\t\t1,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\t1,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\t1,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\t1\n\t\t];\n\t},\n\tcopy(m) {\n\t\treturn [...m];\n\t},\n\tmultiply(a, b) {\n\t\tconst out = new Array(16);\n\t\tfor (let row = 0; row < 4; row++) for (let col = 0; col < 4; col++) out[col * 4 + row] = a[0 + row] * b[col * 4 + 0] + a[4 + row] * b[col * 4 + 1] + a[8 + row] * b[col * 4 + 2] + a[12 + row] * b[col * 4 + 3];\n\t\treturn out;\n\t},\n\ttranslate(tx, ty, tz = 0) {\n\t\treturn [\n\t\t\t1,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\t1,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\t1,\n\t\t\t0,\n\t\t\ttx,\n\t\t\tty,\n\t\t\ttz,\n\t\t\t1\n\t\t];\n\t},\n\tscale(sx, sy, sz = 1) {\n\t\treturn [\n\t\t\tsx,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\tsy,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\tsz,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\t1\n\t\t];\n\t},\n\trotateX(rad) {\n\t\tconst c = Math.cos(rad);\n\t\tconst s = Math.sin(rad);\n\t\treturn [\n\t\t\t1,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\tc,\n\t\t\ts,\n\t\t\t0,\n\t\t\t0,\n\t\t\t-s,\n\t\t\tc,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\t1\n\t\t];\n\t},\n\trotateY(rad) {\n\t\tconst c = Math.cos(rad);\n\t\tconst s = Math.sin(rad);\n\t\treturn [\n\t\t\tc,\n\t\t\t0,\n\t\t\t-s,\n\t\t\t0,\n\t\t\t0,\n\t\t\t1,\n\t\t\t0,\n\t\t\t0,\n\t\t\ts,\n\t\t\t0,\n\t\t\tc,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\t1\n\t\t];\n\t},\n\trotateZ(rad) {\n\t\tconst c = Math.cos(rad);\n\t\tconst s = Math.sin(rad);\n\t\treturn [\n\t\t\tc,\n\t\t\ts,\n\t\t\t0,\n\t\t\t0,\n\t\t\t-s,\n\t\t\tc,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\t1,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\t1\n\t\t];\n\t},\n\trotateAxis(axis, rad) {\n\t\tconst norm = Vector3Math.normalize(axis);\n\t\tconst x = norm[0];\n\t\tconst y = norm[1];\n\t\tconst z = norm[2];\n\t\tconst c = Math.cos(rad);\n\t\tconst s = Math.sin(rad);\n\t\tconst t = 1 - c;\n\t\treturn [\n\t\t\tt * x * x + c,\n\t\t\tt * x * y + s * z,\n\t\t\tt * x * z - s * y,\n\t\t\t0,\n\t\t\tt * x * y - s * z,\n\t\t\tt * y * y + c,\n\t\t\tt * y * z + s * x,\n\t\t\t0,\n\t\t\tt * x * z + s * y,\n\t\t\tt * y * z - s * x,\n\t\t\tt * z * z + c,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\t1\n\t\t];\n\t},\n\tlookAt(eye, target, up = [\n\t\t0,\n\t\t-1,\n\t\t0\n\t]) {\n\t\tlet f = Vector3Math.subtract(target, eye);\n\t\tif (Vector3Math.lengthSq(f) === 0) f = [\n\t\t\t0,\n\t\t\t0,\n\t\t\t1\n\t\t];\n\t\telse f = Vector3Math.normalize(f);\n\t\tlet r = Vector3Math.cross(f, up);\n\t\tif (Vector3Math.lengthSq(r) === 0) r = [\n\t\t\t1,\n\t\t\t0,\n\t\t\t0\n\t\t];\n\t\telse r = Vector3Math.normalize(r);\n\t\tconst u = Vector3Math.cross(r, f);\n\t\treturn [\n\t\t\tr[0],\n\t\t\tu[0],\n\t\t\tf[0],\n\t\t\t0,\n\t\t\tr[1],\n\t\t\tu[1],\n\t\t\tf[1],\n\t\t\t0,\n\t\t\tr[2],\n\t\t\tu[2],\n\t\t\tf[2],\n\t\t\t0,\n\t\t\t-Vector3Math.dot(r, eye),\n\t\t\t-Vector3Math.dot(u, eye),\n\t\t\t-Vector3Math.dot(f, eye),\n\t\t\t1\n\t\t];\n\t},\n\tperspective(fovYRad, aspect, near, far) {\n\t\tconst f = 1 / Math.tan(fovYRad / 2);\n\t\tconst rangeInv = 1 / (far - near);\n\t\treturn [\n\t\t\tf / aspect,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\tf,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\tfar * rangeInv,\n\t\t\t1,\n\t\t\t0,\n\t\t\t0,\n\t\t\t-near * far * rangeInv,\n\t\t\t0\n\t\t];\n\t},\n\torthographic(left, right, bottom, top, near, far) {\n\t\tconst lr = 1 / (right - left);\n\t\tconst bt = 1 / (top - bottom);\n\t\tconst nf = 1 / (far - near);\n\t\treturn [\n\t\t\t2 * lr,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\t2 * bt,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\tnf,\n\t\t\t0,\n\t\t\t-(right + left) * lr,\n\t\t\t-(top + bottom) * bt,\n\t\t\t-near * nf,\n\t\t\t1\n\t\t];\n\t},\n\tinvert(m) {\n\t\tconst inv = new Array(16);\n\t\tinv[0] = m[5] * m[10] * m[15] - m[5] * m[11] * m[14] - m[9] * m[6] * m[15] + m[9] * m[7] * m[14] + m[13] * m[6] * m[11] - m[13] * m[7] * m[10];\n\t\tinv[4] = -m[4] * m[10] * m[15] + m[4] * m[11] * m[14] + m[8] * m[6] * m[15] - m[8] * m[7] * m[14] - m[12] * m[6] * m[11] + m[12] * m[7] * m[10];\n\t\tinv[8] = m[4] * m[9] * m[15] - m[4] * m[11] * m[13] - m[8] * m[5] * m[15] + m[8] * m[7] * m[13] + m[12] * m[5] * m[11] - m[12] * m[7] * m[9];\n\t\tinv[12] = -m[4] * m[9] * m[14] + m[4] * m[10] * m[13] + m[8] * m[5] * m[14] - m[8] * m[6] * m[13] - m[12] * m[5] * m[10] + m[12] * m[6] * m[9];\n\t\tinv[1] = -m[1] * m[10] * m[15] + m[1] * m[11] * m[14] + m[9] * m[2] * m[15] - m[9] * m[3] * m[14] - m[13] * m[2] * m[11] + m[13] * m[3] * m[10];\n\t\tinv[5] = m[0] * m[10] * m[15] - m[0] * m[11] * m[14] - m[8] * m[2] * m[15] + m[8] * m[3] * m[14] + m[12] * m[2] * m[11] - m[12] * m[3] * m[10];\n\t\tinv[9] = -m[0] * m[9] * m[15] + m[0] * m[11] * m[13] + m[8] * m[1] * m[15] - m[8] * m[3] * m[13] - m[12] * m[1] * m[11] + m[12] * m[3] * m[9];\n\t\tinv[13] = m[0] * m[9] * m[14] - m[0] * m[10] * m[13] - m[8] * m[1] * m[14] + m[8] * m[2] * m[13] + m[12] * m[1] * m[10] - m[12] * m[2] * m[9];\n\t\tinv[2] = m[1] * m[6] * m[15] - m[1] * m[7] * m[14] - m[5] * m[2] * m[15] + m[5] * m[3] * m[14] + m[13] * m[2] * m[7] - m[13] * m[3] * m[6];\n\t\tinv[6] = -m[0] * m[6] * m[15] + m[0] * m[7] * m[14] + m[4] * m[2] * m[15] - m[4] * m[3] * m[14] - m[12] * m[2] * m[7] + m[12] * m[3] * m[6];\n\t\tinv[10] = m[0] * m[5] * m[15] - m[0] * m[7] * m[13] - m[4] * m[1] * m[15] + m[4] * m[3] * m[13] + m[12] * m[1] * m[7] - m[12] * m[3] * m[5];\n\t\tinv[14] = -m[0] * m[5] * m[14] + m[0] * m[6] * m[13] + m[4] * m[1] * m[14] - m[4] * m[2] * m[13] - m[12] * m[1] * m[6] + m[12] * m[2] * m[5];\n\t\tinv[3] = -m[1] * m[6] * m[11] + m[1] * m[7] * m[10] + m[5] * m[2] * m[11] - m[5] * m[3] * m[10] - m[9] * m[2] * m[7] + m[9] * m[3] * m[6];\n\t\tinv[7] = m[0] * m[6] * m[11] - m[0] * m[7] * m[10] - m[4] * m[2] * m[11] + m[4] * m[3] * m[10] + m[8] * m[2] * m[7] - m[8] * m[3] * m[6];\n\t\tinv[11] = -m[0] * m[5] * m[11] + m[0] * m[7] * m[9] + m[4] * m[1] * m[11] - m[4] * m[3] * m[9] - m[8] * m[1] * m[7] + m[8] * m[3] * m[5];\n\t\tinv[15] = m[0] * m[5] * m[10] - m[0] * m[6] * m[9] - m[4] * m[1] * m[10] + m[4] * m[2] * m[9] + m[8] * m[1] * m[6] - m[8] * m[2] * m[5];\n\t\tlet det = m[0] * inv[0] + m[1] * inv[4] + m[2] * inv[8] + m[3] * inv[12];\n\t\tif (Math.abs(det) < 1e-12) return null;\n\t\tdet = 1 / det;\n\t\tfor (let i = 0; i < 16; i++) inv[i] *= det;\n\t\treturn inv;\n\t},\n\ttranspose(m) {\n\t\treturn [\n\t\t\tm[0],\n\t\t\tm[4],\n\t\t\tm[8],\n\t\t\tm[12],\n\t\t\tm[1],\n\t\t\tm[5],\n\t\t\tm[9],\n\t\t\tm[13],\n\t\t\tm[2],\n\t\t\tm[6],\n\t\t\tm[10],\n\t\t\tm[14],\n\t\t\tm[3],\n\t\t\tm[7],\n\t\t\tm[11],\n\t\t\tm[15]\n\t\t];\n\t},\n\tprojectPoint(m, p) {\n\t\tconst x = p[0];\n\t\tconst y = p[1];\n\t\tconst z = p[2];\n\t\tconst X = m[0] * x + m[4] * y + m[8] * z + m[12];\n\t\tconst Y = m[1] * x + m[5] * y + m[9] * z + m[13];\n\t\tconst Z = m[2] * x + m[6] * y + m[10] * z + m[14];\n\t\tconst W = m[3] * x + m[7] * y + m[11] * z + m[15];\n\t\tconst wInv = Math.abs(W) > 1e-6 ? 1 / W : 1;\n\t\treturn [\n\t\t\tX * wInv,\n\t\t\tY * wInv,\n\t\t\tZ * wInv\n\t\t];\n\t},\n\tprojectRectangle(m, width, height) {\n\t\treturn [\n\t\t\tMatrix4Math.projectPoint(m, [\n\t\t\t\t0,\n\t\t\t\t0,\n\t\t\t\t0\n\t\t\t]),\n\t\t\tMatrix4Math.projectPoint(m, [\n\t\t\t\twidth,\n\t\t\t\t0,\n\t\t\t\t0\n\t\t\t]),\n\t\t\tMatrix4Math.projectPoint(m, [\n\t\t\t\twidth,\n\t\t\t\theight,\n\t\t\t\t0\n\t\t\t]),\n\t\t\tMatrix4Math.projectPoint(m, [\n\t\t\t\t0,\n\t\t\t\theight,\n\t\t\t\t0\n\t\t\t])\n\t\t];\n\t},\n\ttoFloat32Array(m) {\n\t\treturn new Float32Array(m);\n\t}\n};\n\n//#endregion\n//#region src/math3d/camera3d.ts\n/**\n* Camera 3D mathematics, kinematics, and projection solver.\n* Provides unified View-Projection matrices, LookAt target tracking,\n* spherical orbit turntable, multi-octave camera shake, and rack-focus CoC solvers.\n*/\n/** Smooth multi-harmonic procedural continuous noise */\nfunction smoothHarmonicNoise(t, seed, octaves = 3) {\n\tlet total = 0;\n\tlet frequency = 1;\n\tlet amplitude = 1;\n\tlet maxAmp = 0;\n\tfor (let i = 0; i < octaves; i++) {\n\t\tconst s1 = Math.sin(t * frequency * 2 * Math.PI + seed + i * 1.7);\n\t\tconst s2 = Math.cos(t * frequency * 1.414 * Math.PI + seed * 2.1 + i * .9);\n\t\ttotal += (s1 * .6 + s2 * .4) * amplitude;\n\t\tmaxAmp += amplitude;\n\t\tfrequency *= 2;\n\t\tamplitude *= .5;\n\t}\n\treturn maxAmp > 0 ? total / maxAmp : 0;\n}\nconst Camera3D = {\n\tcreateDefaultCamera(width, height, fovDegrees = 50) {\n\t\tconst fovRad = fovDegrees * Math.PI / 180;\n\t\tconst distance = height / 2 / Math.tan(fovRad / 2);\n\t\treturn {\n\t\t\teye: [\n\t\t\t\twidth / 2,\n\t\t\t\theight / 2,\n\t\t\t\t-distance\n\t\t\t],\n\t\t\ttarget: [\n\t\t\t\twidth / 2,\n\t\t\t\theight / 2,\n\t\t\t\t0\n\t\t\t],\n\t\t\tup: [\n\t\t\t\t0,\n\t\t\t\t-1,\n\t\t\t\t0\n\t\t\t],\n\t\t\tfov: fovDegrees,\n\t\t\taspect: Math.max(1e-4, width / height),\n\t\t\tnear: 1,\n\t\t\tfar: 5e4,\n\t\t\tzoom: 1,\n\t\t\tfocusDistance: distance,\n\t\t\tfStop: 2.8,\n\t\t\tmaxBlurRadius: 32\n\t\t};\n\t},\n\tcomputeViewMatrix(camera) {\n\t\treturn Matrix4Math.lookAt(camera.eye, camera.target, camera.up);\n\t},\n\tcomputeProjectionMatrix(camera) {\n\t\tconst fovRad = camera.fov * Math.PI / 180;\n\t\tconst p = Matrix4Math.perspective(fovRad, camera.aspect, camera.near, camera.far);\n\t\tif (camera.zoom !== 1 && camera.zoom > 0) {\n\t\t\tp[0] *= camera.zoom;\n\t\t\tp[5] *= camera.zoom;\n\t\t}\n\t\treturn p;\n\t},\n\tcomputeViewProjectionMatrix(camera) {\n\t\tconst v = Camera3D.computeViewMatrix(camera);\n\t\tconst p = Camera3D.computeProjectionMatrix(camera);\n\t\treturn Matrix4Math.multiply(p, v);\n\t},\n\tdolly(eye, target, deltaDistance) {\n\t\tconst forward = Vector3Math.normalize(Vector3Math.subtract(target, eye));\n\t\tconst move = Vector3Math.multiplyScalar(forward, deltaDistance);\n\t\treturn {\n\t\t\teye: Vector3Math.add(eye, move),\n\t\t\ttarget\n\t\t};\n\t},\n\ttruckPedestal(eye, target, up, deltaX, deltaY) {\n\t\tconst forward = Vector3Math.normalize(Vector3Math.subtract(target, eye));\n\t\tconst right = Vector3Math.normalize(Vector3Math.cross(forward, up));\n\t\tconst trueUp = Vector3Math.cross(right, forward);\n\t\tconst moveX = Vector3Math.multiplyScalar(right, deltaX);\n\t\tconst moveY = Vector3Math.multiplyScalar(trueUp, deltaY);\n\t\tconst totalMove = Vector3Math.add(moveX, moveY);\n\t\treturn {\n\t\t\teye: Vector3Math.add(eye, totalMove),\n\t\t\ttarget: Vector3Math.add(target, totalMove)\n\t\t};\n\t},\n\torbit(target, radius, azimuthDeg, elevationDeg) {\n\t\tconst azRad = azimuthDeg * Math.PI / 180;\n\t\tconst elRad = elevationDeg * Math.PI / 180;\n\t\tconst cosEl = Math.cos(elRad);\n\t\tconst sinEl = Math.sin(elRad);\n\t\tconst cosAz = Math.cos(azRad);\n\t\tconst sinAz = Math.sin(azRad);\n\t\treturn [\n\t\t\ttarget[0] + radius * cosEl * sinAz,\n\t\t\ttarget[1] - radius * sinEl,\n\t\t\ttarget[2] - radius * cosEl * cosAz\n\t\t];\n\t},\n\tapplyOrientation(pose, pitchDeg, yawDeg, rollDeg) {\n\t\tif (pitchDeg === 0 && yawDeg === 0 && rollDeg === 0) return pose;\n\t\tconst forward = Vector3Math.normalize(Vector3Math.subtract(pose.target, pose.eye));\n\t\tconst right = Vector3Math.normalize(Vector3Math.cross(forward, pose.up));\n\t\tconst trueUp = Vector3Math.cross(right, forward);\n\t\tconst dist = Vector3Math.distance(pose.eye, pose.target);\n\t\tlet fwd = forward;\n\t\tlet up = trueUp;\n\t\tif (yawDeg !== 0) {\n\t\t\tconst yawRad = yawDeg * Math.PI / 180;\n\t\t\tconst cosY = Math.cos(yawRad);\n\t\t\tconst sinY = Math.sin(yawRad);\n\t\t\tfwd = Vector3Math.normalize(Vector3Math.subtract(Vector3Math.multiplyScalar(fwd, cosY), Vector3Math.multiplyScalar(right, sinY)));\n\t\t}\n\t\tconst currentRight = Vector3Math.normalize(Vector3Math.cross(fwd, up));\n\t\tif (pitchDeg !== 0) {\n\t\t\tconst pitchRad = pitchDeg * Math.PI / 180;\n\t\t\tconst cosP = Math.cos(pitchRad);\n\t\t\tconst sinP = Math.sin(pitchRad);\n\t\t\tfwd = Vector3Math.normalize(Vector3Math.add(Vector3Math.multiplyScalar(fwd, cosP), Vector3Math.multiplyScalar(up, sinP)));\n\t\t\tup = Vector3Math.normalize(Vector3Math.cross(currentRight, fwd));\n\t\t}\n\t\tif (rollDeg !== 0) {\n\t\t\tconst rollRad = rollDeg * Math.PI / 180;\n\t\t\tconst cosR = Math.cos(rollRad);\n\t\t\tconst sinR = Math.sin(rollRad);\n\t\t\tup = Vector3Math.normalize(Vector3Math.add(Vector3Math.multiplyScalar(up, cosR), Vector3Math.multiplyScalar(currentRight, sinR)));\n\t\t}\n\t\tconst newTarget = Vector3Math.add(pose.eye, Vector3Math.multiplyScalar(fwd, dist));\n\t\treturn {\n\t\t\t...pose,\n\t\t\ttarget: newTarget,\n\t\t\tup\n\t\t};\n\t},\n\tapplyCameraShake(pose, timeSeconds, options) {\n\t\tconst { translationAmplitude, rotationAmplitude, frequency = 2.5, octaves = 3, seed = 42 } = options;\n\t\tif (translationAmplitude <= 0 && rotationAmplitude <= 0) return pose;\n\t\tconst t = timeSeconds * frequency;\n\t\tconst dx = smoothHarmonicNoise(t, seed, octaves) * translationAmplitude;\n\t\tconst dy = smoothHarmonicNoise(t, seed + 101.5, octaves) * translationAmplitude;\n\t\tconst dz = smoothHarmonicNoise(t, seed + 203.7, octaves) * (translationAmplitude * .5);\n\t\tconst rotX = smoothHarmonicNoise(t, seed + 307.1, octaves) * rotationAmplitude;\n\t\tconst rotY = smoothHarmonicNoise(t, seed + 409.3, octaves) * rotationAmplitude;\n\t\tconst forward = Vector3Math.normalize(Vector3Math.subtract(pose.target, pose.eye));\n\t\tconst right = Vector3Math.normalize(Vector3Math.cross(forward, pose.up));\n\t\tconst trueUp = Vector3Math.cross(right, forward);\n\t\tconst disp = Vector3Math.add(Vector3Math.multiplyScalar(right, dx), Vector3Math.add(Vector3Math.multiplyScalar(trueUp, dy), Vector3Math.multiplyScalar(forward, dz)));\n\t\tconst newEye = Vector3Math.add(pose.eye, disp);\n\t\tconst newTarget = Vector3Math.add(pose.target, Vector3Math.add(Vector3Math.multiplyScalar(right, rotY * 10), Vector3Math.multiplyScalar(trueUp, rotX * 10)));\n\t\treturn {\n\t\t\t...pose,\n\t\t\teye: newEye,\n\t\t\ttarget: newTarget\n\t\t};\n\t},\n\tcomputeCircleOfConfusion(depth, focusDistance, focalLengthMm, fStop, maxBlurRadius = 32) {\n\t\tif (focusDistance <= 0 || fStop <= 0 || depth <= 0) return 0;\n\t\tconst delta = Math.abs(depth - focusDistance);\n\t\tconst aperture = focalLengthMm / fStop;\n\t\tconst coc = delta / depth * aperture * .5;\n\t\treturn Math.min(maxBlurRadius, Math.max(0, coc));\n\t},\n\tcomputeCameraFrustumPlanes(vp) {\n\t\tconst normalizePlane = (p) => {\n\t\t\tconst len = Math.hypot(p[0], p[1], p[2]);\n\t\t\tif (len === 0) return p;\n\t\t\treturn [\n\t\t\t\tp[0] / len,\n\t\t\t\tp[1] / len,\n\t\t\t\tp[2] / len,\n\t\t\t\tp[3] / len\n\t\t\t];\n\t\t};\n\t\treturn {\n\t\t\tleft: normalizePlane([\n\t\t\t\tvp[3] + vp[0],\n\t\t\t\tvp[7] + vp[4],\n\t\t\t\tvp[11] + vp[8],\n\t\t\t\tvp[15] + vp[12]\n\t\t\t]),\n\t\t\tright: normalizePlane([\n\t\t\t\tvp[3] - vp[0],\n\t\t\t\tvp[7] - vp[4],\n\t\t\t\tvp[11] - vp[8],\n\t\t\t\tvp[15] - vp[12]\n\t\t\t]),\n\t\t\tbottom: normalizePlane([\n\t\t\t\tvp[3] + vp[1],\n\t\t\t\tvp[7] + vp[5],\n\t\t\t\tvp[11] + vp[9],\n\t\t\t\tvp[15] + vp[13]\n\t\t\t]),\n\t\t\ttop: normalizePlane([\n\t\t\t\tvp[3] - vp[1],\n\t\t\t\tvp[7] - vp[5],\n\t\t\t\tvp[11] - vp[9],\n\t\t\t\tvp[15] - vp[13]\n\t\t\t]),\n\t\t\tnear: normalizePlane([\n\t\t\t\tvp[2],\n\t\t\t\tvp[6],\n\t\t\t\tvp[10],\n\t\t\t\tvp[14]\n\t\t\t]),\n\t\t\tfar: normalizePlane([\n\t\t\t\tvp[3] - vp[2],\n\t\t\t\tvp[7] - vp[6],\n\t\t\t\tvp[11] - vp[10],\n\t\t\t\tvp[15] - vp[14]\n\t\t\t])\n\t\t};\n\t},\n\tisBoxInFrustum(min, max, planes) {\n\t\tconst planeList = [\n\t\t\tplanes.left,\n\t\t\tplanes.right,\n\t\t\tplanes.bottom,\n\t\t\tplanes.top,\n\t\t\tplanes.near,\n\t\t\tplanes.far\n\t\t];\n\t\tfor (const p of planeList) {\n\t\t\tconst px = p[0] > 0 ? max[0] : min[0];\n\t\t\tconst py = p[1] > 0 ? max[1] : min[1];\n\t\t\tconst pz = p[2] > 0 ? max[2] : min[2];\n\t\t\tif (p[0] * px + p[1] * py + p[2] * pz + p[3] < 0) return false;\n\t\t}\n\t\treturn true;\n\t}\n};\n\n//#endregion\n//#region src/math3d/environment3d.ts\n/**\n* Scene-wide \"world\" settings for physically based 3D: a procedural studio\n* environment (image-based light), exposure, tone mapping and fog. A scene\n* with an environment is shaded physically; one without keeps the original\n* Blinn-Phong look.\n*/\nconst ENVIRONMENT_PRESETS = {\n\tstudio: {\n\t\ttop: \"#9da3ad\",\n\t\thorizon: \"#5d626b\",\n\t\tbottom: \"#202226\",\n\t\tsoftboxes: 3.5\n\t},\n\tsoft: {\n\t\ttop: \"#f1efea\",\n\t\thorizon: \"#cfcac1\",\n\t\tbottom: \"#77726a\",\n\t\tsoftboxes: 1.2\n\t},\n\tsunset: {\n\t\ttop: \"#4d63a3\",\n\t\thorizon: \"#ff9a5c\",\n\t\tbottom: \"#3b2a28\",\n\t\tsoftboxes: 1\n\t},\n\tnight: {\n\t\ttop: \"#121a3a\",\n\t\thorizon: \"#1f2950\",\n\t\tbottom: \"#05060b\",\n\t\tsoftboxes: .5\n\t},\n\tneutral: {\n\t\ttop: \"#9a9a9a\",\n\t\thorizon: \"#808080\",\n\t\tbottom: \"#5c5c5c\",\n\t\tsoftboxes: 0\n\t}\n};\nconst TONE_MAPPING_CODE = {\n\tnone: 0,\n\taces: 1,\n\tagx: 2,\n\tneutral: 3\n};\nfunction linearRgb(color) {\n\tconst c = parseCssColor(color) ?? [\n\t\t0,\n\t\t0,\n\t\t0,\n\t\t1\n\t];\n\tconst lin = (v) => v <= .04045 ? v / 12.92 : ((v + .055) / 1.055) ** 2.4;\n\treturn [\n\t\tlin(c[0]),\n\t\tlin(c[1]),\n\t\tlin(c[2])\n\t];\n}\n/** Linear radiance and shader codes for an environment. */\nfunction resolveEnvironment(opts) {\n\tconst preset = ENVIRONMENT_PRESETS[opts.preset ?? \"studio\"];\n\tconst k = opts.intensity ?? 1;\n\tconst scale = (c) => [\n\t\tc[0] * k,\n\t\tc[1] * k,\n\t\tc[2] * k\n\t];\n\treturn {\n\t\ttop: scale(linearRgb(opts.top ?? preset.top)),\n\t\thorizon: scale(linearRgb(opts.horizon ?? preset.horizon)),\n\t\tbottom: scale(linearRgb(opts.bottom ?? preset.bottom)),\n\t\tsoftboxes: (opts.softboxes ?? preset.softboxes) * k,\n\t\trotationRad: (opts.rotation ?? 0) * Math.PI / 180,\n\t\texposureMultiplier: 2 ** (opts.exposure ?? 0),\n\t\ttoneMapping: TONE_MAPPING_CODE[opts.toneMapping ?? \"neutral\"],\n\t\tfog: opts.fog ? {\n\t\t\tcolor: linearRgb(opts.fog.color),\n\t\t\tstart: opts.fog.start,\n\t\t\tend: opts.fog.end,\n\t\t\topacity: Math.max(0, Math.min(1, opts.fog.opacity ?? 1))\n\t\t} : void 0\n\t};\n}\n\n//#endregion\n//#region src/math3d/light3d.ts\n/**\n* WebGPU 3D Lighting & Material Shading engine.\n* Supports Ambient, Directional, Point, and Spot light sources,\n* normal matrix computation for non-uniform surface scaling,\n* and binary uniform buffer packing for WGSL shaders.\n*/\nconst MAX_LIGHTS = 8;\n/**\n* 16 (ambient) + 16 (params) + 8 * 64 (lights), then the physical-shading\n* block appended after them: 8 vec4 (128) + shadow matrix (64).\n*/\nconst LIGHT_UNIFORM_SIZE_BYTES = 736;\n/**\n* Parses CSS / hex / rgb color strings, arrays, or color objects into normalized linear [r, g, b] floats in [0, 1].\n*/\nfunction parseColorToRgb(color) {\n\tif (!color) return [\n\t\t1,\n\t\t1,\n\t\t1\n\t];\n\tif (Array.isArray(color)) {\n\t\tconst r = color[0] ?? 1;\n\t\tconst g = color[1] ?? 1;\n\t\tconst b = color[2] ?? 1;\n\t\treturn [\n\t\t\tr > 1 ? r / 255 : r,\n\t\t\tg > 1 ? g / 255 : g,\n\t\t\tb > 1 ? b / 255 : b\n\t\t];\n\t}\n\tif (typeof color === \"object\" && color !== null) {\n\t\tconst r = color.r ?? 1;\n\t\tconst g = color.g ?? 1;\n\t\tconst b = color.b ?? 1;\n\t\treturn [\n\t\t\tr > 1 ? r / 255 : r,\n\t\t\tg > 1 ? g / 255 : g,\n\t\t\tb > 1 ? b / 255 : b\n\t\t];\n\t}\n\tif (typeof color !== \"string\") return [\n\t\t1,\n\t\t1,\n\t\t1\n\t];\n\tconst str = color.trim().toLowerCase();\n\tif (str.startsWith(\"#\")) {\n\t\tconst hex = str.slice(1);\n\t\tif (hex.length === 3) return [\n\t\t\tNumber.parseInt(hex[0] + hex[0], 16) / 255,\n\t\t\tNumber.parseInt(hex[1] + hex[1], 16) / 255,\n\t\t\tNumber.parseInt(hex[2] + hex[2], 16) / 255\n\t\t];\n\t\tif (hex.length >= 6) return [\n\t\t\tNumber.parseInt(hex.slice(0, 2), 16) / 255,\n\t\t\tNumber.parseInt(hex.slice(2, 4), 16) / 255,\n\t\t\tNumber.parseInt(hex.slice(4, 6), 16) / 255\n\t\t];\n\t}\n\tconst rgbMatch = str.match(/rgba?\\s*\\(\\s*([\\d.]+)\\s*,\\s*([\\d.]+)\\s*,\\s*([\\d.]+)/);\n\tif (rgbMatch) {\n\t\tconst r = Number.parseFloat(rgbMatch[1]) / 255;\n\t\tconst g = Number.parseFloat(rgbMatch[2]) / 255;\n\t\tconst b = Number.parseFloat(rgbMatch[3]) / 255;\n\t\treturn [\n\t\t\tMath.max(0, Math.min(1, r)),\n\t\t\tMath.max(0, Math.min(1, g)),\n\t\t\tMath.max(0, Math.min(1, b))\n\t\t];\n\t}\n\tconst hslMatch = str.match(/hsla?\\s*\\(\\s*([\\d.]+)\\s*,\\s*([\\d.]+)%?\\s*,\\s*([\\d.]+)%?/);\n\tif (hslMatch) return hslToRgb(Number.parseFloat(hslMatch[1]) / 360, Number.parseFloat(hslMatch[2]) / 100, Number.parseFloat(hslMatch[3]) / 100);\n\treturn [\n\t\t1,\n\t\t1,\n\t\t1\n\t];\n}\nfunction hslToRgb(h, s, l) {\n\tif (s === 0) return [\n\t\tl,\n\t\tl,\n\t\tl\n\t];\n\tconst hue2rgb = (p$1, q$1, t) => {\n\t\tlet tt = t;\n\t\tif (tt < 0) tt += 1;\n\t\tif (tt > 1) tt -= 1;\n\t\tif (tt < 1 / 6) return p$1 + (q$1 - p$1) * 6 * tt;\n\t\tif (tt < 1 / 2) return q$1;\n\t\tif (tt < 2 / 3) return p$1 + (q$1 - p$1) * (2 / 3 - tt) * 6;\n\t\treturn p$1;\n\t};\n\tconst q = l < .5 ? l * (1 + s) : l + s - l * s;\n\tconst p = 2 * l - q;\n\treturn [\n\t\thue2rgb(p, q, h + 1 / 3),\n\t\thue2rgb(p, q, h),\n\t\thue2rgb(p, q, h - 1 / 3)\n\t];\n}\nconst Light3D = {\n\tcomputeNormalMatrix(modelMatrix) {\n\t\tconst inv = Matrix4Math.invert(modelMatrix);\n\t\tif (!inv) return Matrix4Math.identity();\n\t\treturn [\n\t\t\tinv[0],\n\t\t\tinv[4],\n\t\t\tinv[8],\n\t\t\t0,\n\t\t\tinv[1],\n\t\t\tinv[5],\n\t\t\tinv[9],\n\t\t\t0,\n\t\t\tinv[2],\n\t\t\tinv[6],\n\t\t\tinv[10],\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\t1\n\t\t];\n\t},\n\tprocessLight(opt) {\n\t\tconst color = parseColorToRgb(opt.color);\n\t\tconst intensity = opt.intensity ?? 1;\n\t\tconst posX = opt.position ? opt.position[0] : opt.x ?? 0;\n\t\tconst posY = opt.position ? opt.position[1] : opt.y ?? 0;\n\t\tconst posZ = opt.position ? opt.position[2] : opt.z ?? 0;\n\t\tconst kind = opt.lightType ?? opt.type ?? \"directional\";\n\t\tlet typeVal = 1;\n\t\tif (kind === \"ambient\") typeVal = 0;\n\t\telse if (kind === \"directional\") typeVal = 1;\n\t\telse if (kind === \"point\") typeVal = 2;\n\t\telse if (kind === \"spot\") typeVal = 3;\n\t\tlet dir = [\n\t\t\t0,\n\t\t\t0,\n\t\t\t-1\n\t\t];\n\t\tif (opt.direction) dir = Vector3Math.normalize(opt.direction);\n\t\telse if (opt.target || opt.targetX !== void 0 || opt.targetY !== void 0 || opt.targetZ !== void 0) {\n\t\t\tconst target = [\n\t\t\t\topt.target ? opt.target[0] : opt.targetX ?? posX,\n\t\t\t\topt.target ? opt.target[1] : opt.targetY ?? posY,\n\t\t\t\topt.target ? opt.target[2] : opt.targetZ ?? posZ\n\t\t\t];\n\t\t\tconst fromLight = Vector3Math.subtract(target, [\n\t\t\t\tposX,\n\t\t\t\tposY,\n\t\t\t\tposZ\n\t\t\t]);\n\t\t\tif (Vector3Math.length(fromLight) > 1e-4) dir = Vector3Math.normalize(fromLight);\n\t\t}\n\t\tconst radius = Math.max(1, opt.radius ?? 1e3);\n\t\tconst decay = opt.decay ?? 2;\n\t\tconst angleDeg = Math.max(.1, Math.min(180, opt.angle ?? 45));\n\t\tconst penumbraFrac = Math.max(0, Math.min(1, opt.penumbra ?? .2));\n\t\tconst outerRad = angleDeg * Math.PI / 180;\n\t\tconst innerRad = outerRad * (1 - penumbraFrac);\n\t\tconst cosOuter = Math.cos(outerRad);\n\t\tconst cosInner = Math.cos(innerRad);\n\t\treturn {\n\t\t\tposType: [\n\t\t\t\tposX,\n\t\t\t\tposY,\n\t\t\t\tposZ,\n\t\t\t\ttypeVal\n\t\t\t],\n\t\t\tdirRadius: [\n\t\t\t\tdir[0],\n\t\t\t\tdir[1],\n\t\t\t\tdir[2],\n\t\t\t\tradius\n\t\t\t],\n\t\t\tcolorIntensity: [\n\t\t\t\tcolor[0],\n\t\t\t\tcolor[1],\n\t\t\t\tcolor[2],\n\t\t\t\tintensity\n\t\t\t],\n\t\t\tspotParams: [\n\t\t\t\tcosOuter,\n\t\t\t\tcosInner,\n\t\t\t\tdecay,\n\t\t\t\t0\n\t\t\t]\n\t\t};\n\t},\n\tpackLightsUniforms(lights, environment, shadow) {\n\t\tconst buffer = new Float32Array(LIGHT_UNIFORM_SIZE_BYTES / 4);\n\t\tLight3D.packPhysicalBlock(buffer, lights ?? [], environment, shadow);\n\t\tif ((!lights || lights.length === 0) && !environment) {\n\t\t\tbuffer[4] = 0;\n\t\t\tbuffer[5] = 0;\n\t\t\treturn buffer;\n\t\t}\n\t\tlet ambientR = 0;\n\t\tlet ambientG = 0;\n\t\tlet ambientB = 0;\n\t\tconst directLights = [];\n\t\tfor (const l of lights) if ((l.lightType ?? l.type) === \"ambient\") {\n\t\t\tconst col = parseColorToRgb(l.color);\n\t\t\tconst int = l.intensity ?? 1;\n\t\t\tambientR += col[0] * int;\n\t\t\tambientG += col[1] * int;\n\t\t\tambientB += col[2] * int;\n\t\t} else if (directLights.length < MAX_LIGHTS) directLights.push(Light3D.processLight(l));\n\t\tbuffer[0] = ambientR;\n\t\tbuffer[1] = ambientG;\n\t\tbuffer[2] = ambientB;\n\t\tbuffer[3] = 1;\n\t\tbuffer[4] = directLights.length;\n\t\tbuffer[5] = 1;\n\t\tlet offset = 8;\n\t\tfor (let i = 0; i < MAX_LIGHTS; i++) {\n\t\t\tif (i < directLights.length) {\n\t\t\t\tconst dl = directLights[i];\n\t\t\t\tbuffer[offset + 0] = dl.posType[0];\n\t\t\t\tbuffer[offset + 1] = dl.posType[1];\n\t\t\t\tbuffer[offset + 2] = dl.posType[2];\n\t\t\t\tbuffer[offset + 3] = dl.posType[3];\n\t\t\t\tbuffer[offset + 4] = dl.dirRadius[0];\n\t\t\t\tbuffer[offset + 5] = dl.dirRadius[1];\n\t\t\t\tbuffer[offset + 6] = dl.dirRadius[2];\n\t\t\t\tbuffer[offset + 7] = dl.dirRadius[3];\n\t\t\t\tbuffer[offset + 8] = dl.colorIntensity[0];\n\t\t\t\tbuffer[offset + 9] = dl.colorIntensity[1];\n\t\t\t\tbuffer[offset + 10] = dl.colorIntensity[2];\n\t\t\t\tbuffer[offset + 11] = dl.colorIntensity[3];\n\t\t\t\tbuffer[offset + 12] = dl.spotParams[0];\n\t\t\t\tbuffer[offset + 13] = dl.spotParams[1];\n\t\t\t\tbuffer[offset + 14] = dl.spotParams[2];\n\t\t\t\tbuffer[offset + 15] = dl.spotParams[3];\n\t\t\t} else for (let j = 0; j < 16; j++) buffer[offset + j] = 0;\n\t\t\toffset += 16;\n\t\t}\n\t\treturn buffer;\n\t},\n\tshadowCasterIndex(lights) {\n\t\tlet index = 0;\n\t\tfor (const l of lights) {\n\t\t\tconst kind = l.lightType ?? l.type;\n\t\t\tif (kind === \"ambient\") continue;\n\t\t\tif (index >= MAX_LIGHTS) break;\n\t\t\tif (l.castShadow && (kind === \"directional\" || kind === \"spot\")) return index;\n\t\t\tindex++;\n\t\t}\n\t\treturn -1;\n\t},\n\tpackPhysicalBlock(buffer, lights, environment, shadow) {\n\t\tconst base = 8 + MAX_LIGHTS * 16;\n\t\tlet ambR = 0;\n\t\tlet ambG = 0;\n\t\tlet ambB = 0;\n\t\tfor (const l of lights) {\n\t\t\tif ((l.lightType ?? l.type) !== \"ambient\") continue;\n\t\t\tconst [r, g, b] = parseColorToRgb(l.color);\n\t\t\tconst k = l.intensity ?? 1;\n\t\t\tconst lin = (v) => v <= .04045 ? v / 12.92 : ((v + .055) / 1.055) ** 2.4;\n\t\t\tambR += lin(r) * k;\n\t\t\tambG += lin(g) * k;\n\t\t\tambB += lin(b) * k;\n\t\t}\n\t\tbuffer[base + 0] = ambR;\n\t\tbuffer[base + 1] = ambG;\n\t\tbuffer[base + 2] = ambB;\n\t\tbuffer[base + 3] = 1;\n\t\tif (environment) {\n\t\t\tconst env = resolveEnvironment(environment);\n\t\t\tbuffer[6] = 1;\n\t\t\tbuffer[7] = env.toneMapping;\n\t\t\tbuffer[base + 3] = env.exposureMultiplier;\n\t\t\tbuffer.set([...env.top, env.rotationRad], base + 4);\n\t\t\tbuffer.set([...env.horizon, env.softboxes], base + 8);\n\t\t\tbuffer.set([...env.bottom, 1], base + 12);\n\t\t\tif (env.fog) {\n\t\t\t\tbuffer.set([...env.fog.color, 1], base + 16);\n\t\t\t\tbuffer.set([\n\t\t\t\t\tenv.fog.start,\n\t\t\t\t\tenv.fog.end,\n\t\t\t\t\tenv.fog.opacity,\n\t\t\t\t\t0\n\t\t\t\t], base + 20);\n\t\t\t}\n\t\t}\n\t\tif (shadow && shadow.lightIndex >= 0) {\n\t\t\tbuffer.set([\n\t\t\t\t1,\n\t\t\t\tshadow.lightIndex,\n\t\t\t\tshadow.softness,\n\t\t\t\tshadow.mapSize\n\t\t\t], base + 24);\n\t\t\tbuffer.set([\n\t\t\t\tshadow.bias,\n\t\t\t\tshadow.normalOffset,\n\t\t\t\tshadow.darkness,\n\t\t\t\t0\n\t\t\t], base + 28);\n\t\t\tfor (let i = 0; i < 16; i++) buffer[base + 32 + i] = shadow.matrix[i] ?? 0;\n\t\t}\n\t}\n};\n\n//#endregion\n//#region src/math3d/path3d.ts\n/**\n* 3D Path Mathematical Curves, Arc-Length Lookup Tables, and Rotation-Minimizing Frames (RMF).\n* Provides uniform-velocity parameterization and smooth tangent/normal kinematics along 3D curves.\n*/\nvar Path3D = class Path3D {\n\tsamples = [];\n\tframes = [];\n\ttotalLength = 0;\n\tconstructor(samples) {\n\t\tif (samples.length < 2) throw new Error(\"Path3D requires at least 2 coordinate samples\");\n\t\tthis.samples = samples;\n\t\tthis.totalLength = samples[samples.length - 1].distance;\n\t\tthis.computeRotationMinimizingFrames();\n\t}\n\t/**\n\t* Computes continuous Rotation-Minimizing Frames (RMF) along the path\n\t* using the Double Reflection Method (Wang et al. 2008), preventing gimbal flips.\n\t*/\n\tcomputeRotationMinimizingFrames() {\n\t\tconst count = this.samples.length;\n\t\tthis.frames = new Array(count);\n\t\tconst t0 = this.samples[0].tangent;\n\t\tlet upRef = [\n\t\t\t0,\n\t\t\t-1,\n\t\t\t0\n\t\t];\n\t\tif (Math.abs(Vector3Math.dot(t0, upRef)) > .95) upRef = [\n\t\t\t0,\n\t\t\t0,\n\t\t\t1\n\t\t];\n\t\tlet n0 = Vector3Math.normalize(Vector3Math.subtract(upRef, Vector3Math.multiplyScalar(t0, Vector3Math.dot(upRef, t0))));\n\t\tif (Vector3Math.lengthSq(n0) < 1e-4) n0 = [\n\t\t\t1,\n\t\t\t0,\n\t\t\t0\n\t\t];\n\t\tlet b0 = Vector3Math.normalize(Vector3Math.cross(t0, n0));\n\t\tthis.frames[0] = {\n\t\t\tnormal: n0,\n\t\t\tbinormal: b0,\n\t\t\trotation: this.eulerFromFrame(t0, n0, b0)\n\t\t};\n\t\tfor (let i = 0; i < count - 1; i++) {\n\t\t\tconst x0 = this.samples[i].position;\n\t\t\tconst x1 = this.samples[i + 1].position;\n\t\t\tconst t_i = this.samples[i].tangent;\n\t\t\tconst t_next = this.samples[i + 1].tangent;\n\t\t\tconst n_i = this.frames[i].normal;\n\t\t\tconst v1 = Vector3Math.subtract(x1, x0);\n\t\t\tconst c1 = Vector3Math.dot(v1, v1);\n\t\t\tlet n_next;\n\t\t\tif (c1 > 1e-8) {\n\t\t\t\tconst t_i_L = Vector3Math.subtract(t_i, Vector3Math.multiplyScalar(v1, 2 * Vector3Math.dot(v1, t_i) / c1));\n\t\t\t\tconst n_i_L = Vector3Math.subtract(n_i, Vector3Math.multiplyScalar(v1, 2 * Vector3Math.dot(v1, n_i) / c1));\n\t\t\t\tconst v2 = Vector3Math.subtract(t_next, t_i_L);\n\t\t\t\tconst c2 = Vector3Math.dot(v2, v2);\n\t\t\t\tif (c2 > 1e-8) n_next = Vector3Math.subtract(n_i_L, Vector3Math.multiplyScalar(v2, 2 * Vector3Math.dot(v2, n_i_L) / c2));\n\t\t\t\telse n_next = n_i_L;\n\t\t\t} else n_next = n_i;\n\t\t\tn_next = Vector3Math.normalize(Vector3Math.subtract(n_next, Vector3Math.multiplyScalar(t_next, Vector3Math.dot(t_next, n_next))));\n\t\t\tconst b_next = Vector3Math.normalize(Vector3Math.cross(t_next, n_next));\n\t\t\tthis.frames[i + 1] = {\n\t\t\t\tnormal: n_next,\n\t\t\t\tbinormal: b_next,\n\t\t\t\trotation: this.eulerFromFrame(t_next, n_next, b_next)\n\t\t\t};\n\t\t}\n\t}\n\t/**\n\t* Extracts pitch, yaw, roll Euler angles in degrees from the orthonormal frame.\n\t*/\n\teulerFromFrame(tangent, normal, _binormal) {\n\t\treturn [\n\t\t\tMath.asin(Math.max(-1, Math.min(1, -tangent[1]))) * (180 / Math.PI),\n\t\t\tMath.atan2(tangent[0], tangent[2]) * (180 / Math.PI),\n\t\t\tMath.atan2(normal[0], normal[1]) * (180 / Math.PI)\n\t\t];\n\t}\n\t/**\n\t* Evaluates point, tangent, normal, binormal, and rotation at normalized progress u in [0, 1].\n\t* Progression moves with constant velocity along the arc length of the path.\n\t*/\n\tgetPointAt(u) {\n\t\tconst targetDist = Math.max(0, Math.min(1, u)) * this.totalLength;\n\t\treturn this.getPointAtDistance(targetDist);\n\t}\n\t/**\n\t* Evaluates point along path by absolute arc-length distance in pixels.\n\t*/\n\tgetPointAtDistance(distance) {\n\t\tconst d = Math.max(0, Math.min(this.totalLength, distance));\n\t\tconst count = this.samples.length;\n\t\tlet low = 0;\n\t\tlet high = count - 1;\n\t\twhile (low < high) {\n\t\t\tconst mid = low + high >> 1;\n\t\t\tif (this.samples[mid].distance < d) low = mid + 1;\n\t\t\telse high = mid;\n\t\t}\n\t\tconst idx1 = Math.max(1, low);\n\t\tconst idx0 = idx1 - 1;\n\t\tconst s0 = this.samples[idx0];\n\t\tconst s1 = this.samples[idx1];\n\t\tconst segLen = s1.distance - s0.distance;\n\t\tconst alpha = segLen > 1e-6 ? (d - s0.distance) / segLen : 0;\n\t\tconst position = Vector3Math.lerp(s0.position, s1.position, alpha);\n\t\tconst tangent = Vector3Math.normalize(Vector3Math.lerp(s0.tangent, s1.tangent, alpha));\n\t\tconst f0 = this.frames[idx0];\n\t\tconst f1 = this.frames[idx1];\n\t\tconst normal = Vector3Math.normalize(Vector3Math.lerp(f0.normal, f1.normal, alpha));\n\t\tconst binormal = Vector3Math.normalize(Vector3Math.cross(tangent, normal));\n\t\tconst rotation = [\n\t\t\tf0.rotation[0] + (f1.rotation[0] - f0.rotation[0]) * alpha,\n\t\t\tf0.rotation[1] + (f1.rotation[1] - f0.rotation[1]) * alpha,\n\t\t\tf0.rotation[2] + (f1.rotation[2] - f0.rotation[2]) * alpha\n\t\t];\n\t\treturn {\n\t\t\tposition,\n\t\t\ttangent,\n\t\t\tnormal,\n\t\t\tbinormal,\n\t\t\tdistance: d,\n\t\t\tt: this.totalLength > 0 ? d / this.totalLength : 0,\n\t\t\trotation\n\t\t};\n\t}\n\t/**\n\t* Creates a smooth Catmull-Rom spline path interpolating through 3D waypoints.\n\t*/\n\tstatic catmullRom(waypoints, options = {}) {\n\t\tif (waypoints.length < 2) throw new Error(\"Catmull-Rom spline requires at least 2 waypoints\");\n\t\tconst closed = Boolean(options.closed);\n\t\tconst samplesPerSegment = options.samplesPerSegment ?? 40;\n\t\tconst pts = [];\n\t\tif (closed) {\n\t\t\tpts.push(waypoints[waypoints.length - 1]);\n\t\t\tpts.push(...waypoints);\n\t\t\tpts.push(waypoints[0]);\n\t\t\tpts.push(waypoints[1]);\n\t\t} else {\n\t\t\tconst pFirst = waypoints[0];\n\t\t\tconst pSecond = waypoints[1];\n\t\t\tconst pLast = waypoints[waypoints.length - 1];\n\t\t\tconst pPrevLast = waypoints[waypoints.length - 2];\n\t\t\tpts.push(Vector3Math.subtract(pFirst, Vector3Math.subtract(pSecond, pFirst)));\n\t\t\tpts.push(...waypoints);\n\t\t\tpts.push(Vector3Math.add(pLast, Vector3Math.subtract(pLast, pPrevLast)));\n\t\t}\n\t\tconst numSegments = closed ? waypoints.length : waypoints.length - 1;\n\t\tconst rawSamples = [];\n\t\tfor (let s = 0; s < numSegments; s++) {\n\t\t\tconst p0 = pts[s];\n\t\t\tconst p1 = pts[s + 1];\n\t\t\tconst p2 = pts[s + 2];\n\t\t\tconst p3 = pts[s + 3];\n\t\t\tconst steps = s === numSegments - 1 ? samplesPerSegment : samplesPerSegment - 1;\n\t\t\tfor (let step = 0; step <= steps; step++) {\n\t\t\t\tconst t = step / samplesPerSegment;\n\t\t\t\tconst t2 = t * t;\n\t\t\t\tconst t3 = t2 * t;\n\t\t\t\tconst a0 = -.5 * t3 + t2 - .5 * t;\n\t\t\t\tconst a1 = 1.5 * t3 - 2.5 * t2 + 1;\n\t\t\t\tconst a2 = -1.5 * t3 + 2 * t2 + .5 * t;\n\t\t\t\tconst a3 = .5 * t3 - .5 * t2;\n\t\t\t\tconst pos = [\n\t\t\t\t\ta0 * p0[0] + a1 * p1[0] + a2 * p2[0] + a3 * p3[0],\n\t\t\t\t\ta0 * p0[1] + a1 * p1[1] + a2 * p2[1] + a3 * p3[1],\n\t\t\t\t\ta0 * p0[2] + a1 * p1[2] + a2 * p2[2] + a3 * p3[2]\n\t\t\t\t];\n\t\t\t\tconst da0 = -1.5 * t2 + 2 * t - .5;\n\t\t\t\tconst da1 = 4.5 * t2 - 5 * t;\n\t\t\t\tconst da2 = -4.5 * t2 + 4 * t + .5;\n\t\t\t\tconst da3 = 1.5 * t2 - 1 * t;\n\t\t\t\tconst tanVel = [\n\t\t\t\t\tda0 * p0[0] + da1 * p1[0] + da2 * p2[0] + da3 * p3[0],\n\t\t\t\t\tda0 * p0[1] + da1 * p1[1] + da2 * p2[1] + da3 * p3[1],\n\t\t\t\t\tda0 * p0[2] + da1 * p1[2] + da2 * p2[2] + da3 * p3[2]\n\t\t\t\t];\n\t\t\t\tconst tangent = Vector3Math.normalize(tanVel);\n\t\t\t\trawSamples.push({\n\t\t\t\t\tposition: pos,\n\t\t\t\t\ttangent\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\treturn Path3D.fromRawSamples(rawSamples);\n\t}\n\t/** Samples annotated with their cumulative arc length along the path. */\n\tstatic fromRawSamples(rawSamples) {\n\t\tlet cumulativeDist = 0;\n\t\tconst samples = rawSamples.map((sample, i) => {\n\t\t\tif (i > 0) cumulativeDist += Vector3Math.distance(sample.position, rawSamples[i - 1].position);\n\t\t\treturn {\n\t\t\t\tposition: sample.position,\n\t\t\t\ttangent: sample.tangent,\n\t\t\t\tdistance: cumulativeDist\n\t\t\t};\n\t\t});\n\t\tif (samples.length === 0) throw new TypeError(\"Path3D needs samples\");\n\t\treturn new Path3D(samples);\n\t}\n\t/**\n\t* Creates a continuous 3D path from a chain of cubic Bezier segments.\n\t*/\n\tstatic bezier(segments, samplesPerSegment = 50) {\n\t\tif (segments.length === 0) throw new Error(\"Bezier path requires at least 1 segment\");\n\t\tconst rawSamples = [];\n\t\tfor (let s = 0; s < segments.length; s++) {\n\t\t\tconst seg = segments[s];\n\t\t\tconst steps = s === segments.length - 1 ? samplesPerSegment : samplesPerSegment - 1;\n\t\t\tfor (let step = 0; step <= steps; step++) {\n\t\t\t\tconst t = step / samplesPerSegment;\n\t\t\t\tconst u = 1 - t;\n\t\t\t\tconst uu = u * u;\n\t\t\t\tconst uuu = uu * u;\n\t\t\t\tconst tt = t * t;\n\t\t\t\tconst ttt = tt * t;\n\t\t\t\tconst pos = [\n\t\t\t\t\tuuu * seg.p0[0] + 3 * uu * t * seg.p1[0] + 3 * u * tt * seg.p2[0] + ttt * seg.p3[0],\n\t\t\t\t\tuuu * seg.p0[1] + 3 * uu * t * seg.p1[1] + 3 * u * tt * seg.p2[1] + ttt * seg.p3[1],\n\t\t\t\t\tuuu * seg.p0[2] + 3 * uu * t * seg.p1[2] + 3 * u * tt * seg.p2[2] + ttt * seg.p3[2]\n\t\t\t\t];\n\t\t\t\tconst tanVel = [\n\t\t\t\t\t3 * uu * (seg.p1[0] - seg.p0[0]) + 6 * u * t * (seg.p2[0] - seg.p1[0]) + 3 * tt * (seg.p3[0] - seg.p2[0]),\n\t\t\t\t\t3 * uu * (seg.p1[1] - seg.p0[1]) + 6 * u * t * (seg.p2[1] - seg.p1[1]) + 3 * tt * (seg.p3[1] - seg.p2[1]),\n\t\t\t\t\t3 * uu * (seg.p1[2] - seg.p0[2]) + 6 * u * t * (seg.p2[2] - seg.p1[2]) + 3 * tt * (seg.p3[2] - seg.p2[2])\n\t\t\t\t];\n\t\t\t\tconst tangent = Vector3Math.normalize(tanVel);\n\t\t\t\trawSamples.push({\n\t\t\t\t\tposition: pos,\n\t\t\t\t\ttangent\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\treturn Path3D.fromRawSamples(rawSamples);\n\t}\n\t/**\n\t* Creates a 3D volumetric helix / spiral path.\n\t*/\n\tstatic helix(options) {\n\t\tconst { center, radius, pitch, turns, axis = \"z\", samplesPerTurn = 60 } = options;\n\t\tconst totalSamples = Math.max(10, Math.round(turns * samplesPerTurn));\n\t\tconst rawSamples = [];\n\t\tfor (let i = 0; i <= totalSamples; i++) {\n\t\t\tconst progress = i / totalSamples;\n\t\t\tconst theta = progress * turns * Math.PI * 2;\n\t\t\tconst axial = (progress - .5) * pitch * turns;\n\t\t\tconst c = Math.cos(theta);\n\t\t\tconst s = Math.sin(theta);\n\t\t\tlet pos;\n\t\t\tlet tanVel;\n\t\t\tif (axis === \"z\") {\n\t\t\t\tpos = [\n\t\t\t\t\tcenter[0] + radius * c,\n\t\t\t\t\tcenter[1] + radius * s,\n\t\t\t\t\tcenter[2] + axial\n\t\t\t\t];\n\t\t\t\ttanVel = [\n\t\t\t\t\t-radius * s,\n\t\t\t\t\tradius * c,\n\t\t\t\t\tpitch * turns / (turns * Math.PI * 2)\n\t\t\t\t];\n\t\t\t} else if (axis === \"y\") {\n\t\t\t\tpos = [\n\t\t\t\t\tcenter[0] + radius * c,\n\t\t\t\t\tcenter[1] + axial,\n\t\t\t\t\tcenter[2] + radius * s\n\t\t\t\t];\n\t\t\t\ttanVel = [\n\t\t\t\t\t-radius * s,\n\t\t\t\t\tpitch * turns / (turns * Math.PI * 2),\n\t\t\t\t\tradius * c\n\t\t\t\t];\n\t\t\t} else {\n\t\t\t\tpos = [\n\t\t\t\t\tcenter[0] + axial,\n\t\t\t\t\tcenter[1] + radius * c,\n\t\t\t\t\tcenter[2] + radius * s\n\t\t\t\t];\n\t\t\t\ttanVel = [\n\t\t\t\t\tpitch * turns / (turns * Math.PI * 2),\n\t\t\t\t\t-radius * s,\n\t\t\t\t\tradius * c\n\t\t\t\t];\n\t\t\t}\n\t\t\trawSamples.push({\n\t\t\t\tposition: pos,\n\t\t\t\ttangent: Vector3Math.normalize(tanVel)\n\t\t\t});\n\t\t}\n\t\treturn Path3D.fromRawSamples(rawSamples);\n\t}\n\t/**\n\t* Creates a 3D circular or arc orbit path.\n\t*/\n\tstatic circle(options) {\n\t\tconst { center, radius, startAngleDeg = 0, endAngleDeg = 360, samples = 128 } = options;\n\t\tconst startRad = startAngleDeg * Math.PI / 180;\n\t\tconst endRad = endAngleDeg * Math.PI / 180;\n\t\tconst rawSamples = [];\n\t\tfor (let i = 0; i <= samples; i++) {\n\t\t\tconst theta = startRad + (endRad - startRad) * (i / samples);\n\t\t\tconst c = Math.cos(theta);\n\t\t\tconst s = Math.sin(theta);\n\t\t\tconst pos = [\n\t\t\t\tcenter[0] + radius * c,\n\t\t\t\tcenter[1],\n\t\t\t\tcenter[2] + radius * s\n\t\t\t];\n\t\t\tconst tanVel = [\n\t\t\t\t-radius * s,\n\t\t\t\t0,\n\t\t\t\tradius * c\n\t\t\t];\n\t\t\trawSamples.push({\n\t\t\t\tposition: pos,\n\t\t\t\ttangent: Vector3Math.normalize(tanVel)\n\t\t\t});\n\t\t}\n\t\treturn Path3D.fromRawSamples(rawSamples);\n\t}\n};\n\n//#endregion\nexport { Camera3D, ENVIRONMENT_PRESETS, LIGHT_UNIFORM_SIZE_BYTES, Light3D, MAX_LIGHTS, Matrix4Math, Path3D, Vector3Math, parseColorToRgb, resolveEnvironment };\n//# sourceMappingURL=index.mjs.map","//#region src/browser/file.ts\nconst isNodeEnv = () => typeof process !== \"undefined\" && Boolean(process.versions?.node) || Boolean(globalThis.__IS_HEADLESS_RENDERER__);\n/**\n* Resolve the actual playable URL from a VirtualMediaData.\n* Walks down the tree to find the 'source' operation.\n*/\nfunction normalizeLocalBrowserUrl(url) {\n\tif (!url || isNodeEnv() || typeof window === \"undefined\") return url;\n\tconst clean = url.replace(/^file:\\/\\//, \"\");\n\tif (clean.startsWith(\"/\") && !clean.startsWith(\"/@fs/\") && !clean.startsWith(\"/api/\")) return `/@fs${clean}`;\n\treturn url;\n}\nfunction resolveMediaSourceUrl(vv) {\n\tif (!vv) return void 0;\n\tif (vv?.sourceUrl && typeof vv.sourceUrl === \"string\") return normalizeLocalBrowserUrl(vv.sourceUrl);\n\tif (vv?.url && typeof vv.url === \"string\") return normalizeLocalBrowserUrl(vv.url);\n\tconst directEntity = vv?.entity;\n\tif (directEntity) {\n\t\tif (typeof directEntity === \"string\") return normalizeLocalBrowserUrl(directEntity);\n\t\tif (directEntity.url && typeof directEntity.url === \"string\") return normalizeLocalBrowserUrl(directEntity.url);\n\t\treturn GetAssetEndpoint(directEntity);\n\t}\n\tif (vv.operation?.op === \"source\") {\n\t\tconst source = vv.operation.source;\n\t\tif (typeof source === \"string\") return normalizeLocalBrowserUrl(source);\n\t\tif (source?.url && typeof source.url === \"string\") return normalizeLocalBrowserUrl(source.url);\n\t\tif (source?.entity) return GetAssetEndpoint(source.entity);\n\t\tif (vv.operation.sourceUrl && typeof vv.operation.sourceUrl === \"string\") return normalizeLocalBrowserUrl(vv.operation.sourceUrl);\n\t\tif (vv.operation.url && typeof vv.operation.url === \"string\") return normalizeLocalBrowserUrl(vv.operation.url);\n\t\tconst srtText = vv.operation.srtText;\n\t\tif (srtText) return `data:text/srt;base64,${typeof Buffer !== \"undefined\" ? Buffer.from(srtText).toString(\"base64\") : btoa(unescape(encodeURIComponent(srtText)))}`;\n\t\tconst svgContent$1 = vv.operation.svgContent;\n\t\tif (svgContent$1) return `data:image/svg+xml;base64,${typeof Buffer !== \"undefined\" ? Buffer.from(svgContent$1).toString(\"base64\") : btoa(unescape(encodeURIComponent(svgContent$1)))}`;\n\t}\n\tconst svgDataUrl = vv.operation?.svgDataUrl;\n\tif (svgDataUrl && typeof svgDataUrl === \"string\") return svgDataUrl;\n\tconst svgContent = vv.operation?.svgContent;\n\tif (svgContent && typeof svgContent === \"string\") return `data:image/svg+xml;base64,${typeof Buffer !== \"undefined\" ? Buffer.from(svgContent).toString(\"base64\") : btoa(unescape(encodeURIComponent(svgContent)))}`;\n\tconst lutUrl = vv.operation?.lutUrl;\n\tif (lutUrl && typeof lutUrl === \"string\") return lutUrl;\n\tif (vv.operation?.op === \"ExtractLUT\") return;\n\tif (Array.isArray(vv.children)) for (const child of vv.children) {\n\t\tconst found = resolveMediaSourceUrl(child);\n\t\tif (found) return found;\n\t}\n\tconst inputs = vv.operation?.inputs;\n\tif (inputs && typeof inputs === \"object\") {\n\t\tfor (const entry of Object.values(inputs)) if (entry?.outputItem?.data && typeof entry.outputItem.data === \"object\") {\n\t\t\tconst found = resolveMediaSourceUrl(entry.outputItem.data);\n\t\t\tif (found) return found;\n\t\t}\n\t}\n}\n/**\n* Appends a file extension hint to the URL.\n*/\nfunction GetAssetEndpoint(fileAsset) {\n\tif (!fileAsset) return \"\";\n\tif (fileAsset.url && typeof fileAsset.url === \"string\") {\n\t\tconst u = fileAsset.url;\n\t\tif (typeof window !== \"undefined\" && !isNodeEnv()) {\n\t\t\tconst cleanPath = u.replace(/^file:\\/\\//, \"\");\n\t\t\tif (cleanPath.startsWith(\"/\") && !cleanPath.startsWith(\"/@fs/\") && !cleanPath.startsWith(\"/api/\")) return `/@fs${cleanPath}`;\n\t\t}\n\t\treturn u;\n\t}\n\tconst { id, key } = fileAsset;\n\tif (key && (key.startsWith(\"file://\") || key.startsWith(\"/\") || key.startsWith(\"http://\") || key.startsWith(\"https://\"))) {\n\t\tif (typeof window !== \"undefined\" && !isNodeEnv()) {\n\t\t\tconst cleanPath = key.replace(/^file:\\/\\//, \"\");\n\t\t\tif (cleanPath.startsWith(\"/\") && !cleanPath.startsWith(\"/@fs/\") && !cleanPath.startsWith(\"/api/\")) return `/@fs${cleanPath}`;\n\t\t}\n\t\treturn key.startsWith(\"/\") ? `file://${key}` : key;\n\t}\n\tconst extension = key.includes(\".\") ? key.split(\".\").pop() : null;\n\treturn `/api/v1/assets/${id}${extension ? `.${extension}` : \"\"}`;\n}\n/** Conventional path of a font that wasn't registered with a file. */\nfunction GetFontAssetUrl(name) {\n\treturn `assets/fonts/${name}.ttf`;\n}\nfunction getDataTypeFromMime(mimeType, filename) {\n\tif (filename) {\n\t\tif (filename.toLowerCase().split(\".\").pop() === \"cube\") return \"LUT\";\n\t}\n\tif (!mimeType) return null;\n\tif (mimeType === \"image/svg+xml\") return \"SVG\";\n\tif (mimeType.startsWith(\"image/\")) return \"Image\";\n\tif (mimeType === \"application/json\") return \"Lottie\";\n\tif (mimeType.startsWith(\"video/\")) return \"Video\";\n\tif (mimeType.startsWith(\"audio/\")) return \"Audio\";\n\tif (mimeType === \"text/srt\" || mimeType === \"application/x-subrip\") return \"Caption\";\n\tif (mimeType === \"text/plain\") return \"Text\";\n\treturn null;\n}\nconst isFileData = (data) => {\n\treturn typeof data === \"object\" && data !== null && \"entity\" in data;\n};\nfunction ResolveFileDataUrl(data) {\n\tif (!data) return null;\n\tif (data.entity) return GetAssetEndpoint(data.entity);\n\treturn null;\n}\n\n//#endregion\n//#region src/browser/local-font-manager.ts\n/**\n* Singleton font loader\n*/\nvar LocalFontManager = class LocalFontManager {\n\tstatic instance = null;\n\tloadedFonts = /* @__PURE__ */ new Set();\n\tconstructor() {}\n\tstatic getInstance() {\n\t\tif (!LocalFontManager.instance) LocalFontManager.instance = new LocalFontManager();\n\t\treturn LocalFontManager.instance;\n\t}\n\tasync loadFont(family, url) {\n\t\tif (this.loadedFonts.has(family)) return;\n\t\tconst fontId = `local-font-${family}`;\n\t\tif (document.getElementById(fontId)) return;\n\t\tconst style = document.createElement(\"style\");\n\t\tstyle.id = fontId;\n\t\tstyle.innerHTML = `\n\t\t\t@font-face {\n \tfont-family: \"${family}\";\n \tsrc: url(\"${url}\");\n\t\t\t}\n `;\n\t\tdocument.head.appendChild(style);\n\t\ttry {\n\t\t\tawait document.fonts.load(`1em \"${family}\"`);\n\t\t\tawait document.fonts.ready;\n\t\t\tthis.loadedFonts.add(family);\n\t\t} catch (e) {\n\t\t\tconsole.warn(`Font load failed for ${family}:`, e);\n\t\t}\n\t}\n\tisFontLoaded(family) {\n\t\treturn this.loadedFonts.has(family);\n\t}\n};\nconst localFontManager = LocalFontManager.getInstance();\nconst registerFont = (family, url) => localFontManager.loadFont(family, url);\nconst isFontLoaded = (family) => localFontManager.isFontLoaded(family);\n\n//#endregion\nexport { GetAssetEndpoint, GetFontAssetUrl, LocalFontManager, ResolveFileDataUrl, getDataTypeFromMime, isFileData, isFontLoaded, localFontManager, registerFont, resolveMediaSourceUrl };\n//# sourceMappingURL=index.mjs.map","(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.bidi_js = factory());\n}(this, (function () { 'use strict';\n\n function bidiFactory() {\n var bidi = (function (exports) {\n\n // Bidi character types data, auto generated\n var DATA = {\n \"R\": \"13k,1a,2,3,3,2+1j,ch+16,a+1,5+2,2+n,5,a,4,6+16,4+3,h+1b,4mo,179q,2+9,2+11,2i9+7y,2+68,4,3+4,5+13,4+3,2+4k,3+29,8+cf,1t+7z,w+17,3+3m,1t+3z,16o1+5r,8+30,8+mc,29+1r,29+4v,75+73\",\n \"EN\": \"1c+9,3d+1,6,187+9,513,4+5,7+9,sf+j,175h+9,qw+q,161f+1d,4xt+a,25i+9\",\n \"ES\": \"17,2,6dp+1,f+1,av,16vr,mx+1,4o,2\",\n \"ET\": \"z+2,3h+3,b+1,ym,3e+1,2o,p4+1,8,6u,7c,g6,1wc,1n9+4,30+1b,2n,6d,qhx+1,h0m,a+1,49+2,63+1,4+1,6bb+3,12jj\",\n \"AN\": \"16o+5,2j+9,2+1,35,ed,1ff2+9,87+u\",\n \"CS\": \"18,2+1,b,2u,12k,55v,l,17v0,2,3,53,2+1,b\",\n \"B\": \"a,3,f+2,2v,690\",\n \"S\": \"9,2,k\",\n \"WS\": \"c,k,4f4,1vk+a,u,1j,335\",\n \"ON\": \"x+1,4+4,h+5,r+5,r+3,z,5+3,2+1,2+1,5,2+2,3+4,o,w,ci+1,8+d,3+d,6+8,2+g,39+1,9,6+1,2,33,b8,3+1,3c+1,7+1,5r,b,7h+3,sa+5,2,3i+6,jg+3,ur+9,2v,ij+1,9g+9,7+a,8m,4+1,49+x,14u,2+2,c+2,e+2,e+2,e+1,i+n,e+e,2+p,u+2,e+2,36+1,2+3,2+1,b,2+2,6+5,2,2,2,h+1,5+4,6+3,3+f,16+2,5+3l,3+81,1y+p,2+40,q+a,m+13,2r+ch,2+9e,75+hf,3+v,2+2w,6e+5,f+6,75+2a,1a+p,2+2g,d+5x,r+b,6+3,4+o,g,6+1,6+2,2k+1,4,2j,5h+z,1m+1,1e+f,t+2,1f+e,d+3,4o+3,2s+1,w,535+1r,h3l+1i,93+2,2s,b+1,3l+x,2v,4g+3,21+3,kz+1,g5v+1,5a,j+9,n+v,2,3,2+8,2+1,3+2,2,3,46+1,4+4,h+5,r+5,r+a,3h+2,4+6,b+4,78,1r+24,4+c,4,1hb,ey+6,103+j,16j+c,1ux+7,5+g,fsh,jdq+1t,4,57+2e,p1,1m,1m,1m,1m,4kt+1,7j+17,5+2r,d+e,3+e,2+e,2+10,m+4,w,1n+5,1q,4z+5,4b+rb,9+c,4+c,4+37,d+2g,8+b,l+b,5+1j,9+9,7+13,9+t,3+1,27+3c,2+29,2+3q,d+d,3+4,4+2,6+6,a+o,8+6,a+2,e+6,16+42,2+1i\",\n \"BN\": \"0+8,6+d,2s+5,2+p,e,4m9,1kt+2,2b+5,5+5,17q9+v,7k,6p+8,6+1,119d+3,440+7,96s+1,1ekf+1,1ekf+1,1ekf+1,1ekf+1,1ekf+1,1ekf+1,1ekf+1,1ekf+1,1ekf+1,1ekf+1,1ekf+1,1ekf+75,6p+2rz,1ben+1,1ekf+1,1ekf+1\",\n \"NSM\": \"lc+33,7o+6,7c+18,2,2+1,2+1,2,21+a,1d+k,h,2u+6,3+5,3+1,2+3,10,v+q,2k+a,1n+8,a,p+3,2+8,2+2,2+4,18+2,3c+e,2+v,1k,2,5+7,5,4+6,b+1,u,1n,5+3,9,l+1,r,3+1,1m,5+1,5+1,3+2,4,v+1,4,c+1,1m,5+4,2+1,5,l+1,n+5,2,1n,3,2+3,9,8+1,c+1,v,1q,d,1f,4,1m+2,6+2,2+3,8+1,c+1,u,1n,g+1,l+1,t+1,1m+1,5+3,9,l+1,u,21,8+2,2,2j,3+6,d+7,2r,3+8,c+5,23+1,s,2,2,1k+d,2+4,2+1,6+a,2+z,a,2v+3,2+5,2+1,3+1,q+1,5+2,h+3,e,3+1,7,g,jk+2,qb+2,u+2,u+1,v+1,1t+1,2+6,9,3+a,a,1a+2,3c+1,z,3b+2,5+1,a,7+2,64+1,3,1n,2+6,2,2,3+7,7+9,3,1d+g,1s+3,1d,2+4,2,6,15+8,d+1,x+3,3+1,2+2,1l,2+1,4,2+2,1n+7,3+1,49+2,2+c,2+6,5,7,4+1,5j+1l,2+4,k1+w,2db+2,3y,2p+v,ff+3,30+1,n9x+3,2+9,x+1,29+1,7l,4,5,q+1,6,48+1,r+h,e,13+7,q+a,1b+2,1d,3+3,3+1,14,1w+5,3+1,3+1,d,9,1c,1g,2+2,3+1,6+1,2,17+1,9,6n,3,5,fn5,ki+f,h+f,r2,6b,46+4,1af+2,2+1,6+3,15+2,5,4m+1,fy+3,as+1,4a+a,4x,1j+e,1l+2,1e+3,3+1,1y+2,11+4,2+7,1r,d+1,1h+8,b+3,3,2o+2,3,2+1,7,4h,4+7,m+1,1m+1,4,12+6,4+4,5g+7,3+2,2,o,2d+5,2,5+1,2+1,6n+3,7+1,2+1,s+1,2e+7,3,2+1,2z,2,3+5,2,2u+2,3+3,2+4,78+8,2+1,75+1,2,5,41+3,3+1,5,x+5,3+1,15+5,3+3,9,a+5,3+2,1b+c,2+1,bb+6,2+5,2d+l,3+6,2+1,2+1,3f+5,4,2+1,2+6,2,21+1,4,2,9o+1,f0c+4,1o+6,t5,1s+3,2a,f5l+1,43t+2,i+7,3+6,v+3,45+2,1j0+1i,5+1d,9,f,n+4,2+e,11t+6,2+g,3+6,2+1,2+4,7a+6,c6+3,15t+6,32+6,gzhy+6n\",\n \"AL\": \"16w,3,2,e+1b,z+2,2+2s,g+1,8+1,b+m,2+t,s+2i,c+e,4h+f,1d+1e,1bwe+dp,3+3z,x+c,2+1,35+3y,2rm+z,5+7,b+5,dt+l,c+u,17nl+27,1t+27,4x+6n,3+d\",\n \"LRO\": \"6ct\",\n \"RLO\": \"6cu\",\n \"LRE\": \"6cq\",\n \"RLE\": \"6cr\",\n \"PDF\": \"6cs\",\n \"LRI\": \"6ee\",\n \"RLI\": \"6ef\",\n \"FSI\": \"6eg\",\n \"PDI\": \"6eh\"\n };\n\n var TYPES = {};\n var TYPES_TO_NAMES = {};\n TYPES.L = 1; //L is the default\n TYPES_TO_NAMES[1] = 'L';\n Object.keys(DATA).forEach(function (type, i) {\n TYPES[type] = 1 << (i + 1);\n TYPES_TO_NAMES[TYPES[type]] = type;\n });\n Object.freeze(TYPES);\n\n var ISOLATE_INIT_TYPES = TYPES.LRI | TYPES.RLI | TYPES.FSI;\n var STRONG_TYPES = TYPES.L | TYPES.R | TYPES.AL;\n var NEUTRAL_ISOLATE_TYPES = TYPES.B | TYPES.S | TYPES.WS | TYPES.ON | TYPES.FSI | TYPES.LRI | TYPES.RLI | TYPES.PDI;\n var BN_LIKE_TYPES = TYPES.BN | TYPES.RLE | TYPES.LRE | TYPES.RLO | TYPES.LRO | TYPES.PDF;\n var TRAILING_TYPES = TYPES.S | TYPES.WS | TYPES.B | ISOLATE_INIT_TYPES | TYPES.PDI | BN_LIKE_TYPES;\n\n var map = null;\n\n function parseData () {\n if (!map) {\n //const start = performance.now()\n map = new Map();\n var loop = function ( type ) {\n if (DATA.hasOwnProperty(type)) {\n var lastCode = 0;\n DATA[type].split(',').forEach(function (range) {\n var ref = range.split('+');\n var skip = ref[0];\n var step = ref[1];\n skip = parseInt(skip, 36);\n step = step ? parseInt(step, 36) : 0;\n map.set(lastCode += skip, TYPES[type]);\n for (var i = 0; i < step; i++) {\n map.set(++lastCode, TYPES[type]);\n }\n });\n }\n };\n\n for (var type in DATA) loop( type );\n //console.log(`char types parsed in ${performance.now() - start}ms`)\n }\n }\n\n /**\n * @param {string} char\n * @return {number}\n */\n function getBidiCharType (char) {\n parseData();\n return map.get(char.codePointAt(0)) || TYPES.L\n }\n\n function getBidiCharTypeName(char) {\n return TYPES_TO_NAMES[getBidiCharType(char)]\n }\n\n // Bidi bracket pairs data, auto generated\n var data$1 = {\n \"pairs\": \"14>1,1e>2,u>2,2wt>1,1>1,1ge>1,1wp>1,1j>1,f>1,hm>1,1>1,u>1,u6>1,1>1,+5,28>1,w>1,1>1,+3,b8>1,1>1,+3,1>3,-1>-1,3>1,1>1,+2,1s>1,1>1,x>1,th>1,1>1,+2,db>1,1>1,+3,3>1,1>1,+2,14qm>1,1>1,+1,4q>1,1e>2,u>2,2>1,+1\",\n \"canonical\": \"6f1>-6dx,6dy>-6dx,6ec>-6ed,6ee>-6ed,6ww>2jj,-2ji>2jj,14r4>-1e7l,1e7m>-1e7l,1e7m>-1e5c,1e5d>-1e5b,1e5c>-14qx,14qy>-14qx,14vn>-1ecg,1ech>-1ecg,1edu>-1ecg,1eci>-1ecg,1eda>-1ecg,1eci>-1ecg,1eci>-168q,168r>-168q,168s>-14ye,14yf>-14ye\"\n };\n\n /**\n * Parses an string that holds encoded codepoint mappings, e.g. for bracket pairs or\n * mirroring characters, as encoded by scripts/generateBidiData.js. Returns an object\n * holding the `map`, and optionally a `reverseMap` if `includeReverse:true`.\n * @param {string} encodedString\n * @param {boolean} includeReverse - true if you want reverseMap in the output\n * @return {{map: Map<number, number>, reverseMap?: Map<number, number>}}\n */\n function parseCharacterMap (encodedString, includeReverse) {\n var radix = 36;\n var lastCode = 0;\n var map = new Map();\n var reverseMap = includeReverse && new Map();\n var prevPair;\n encodedString.split(',').forEach(function visit(entry) {\n if (entry.indexOf('+') !== -1) {\n for (var i = +entry; i--;) {\n visit(prevPair);\n }\n } else {\n prevPair = entry;\n var ref = entry.split('>');\n var a = ref[0];\n var b = ref[1];\n a = String.fromCodePoint(lastCode += parseInt(a, radix));\n b = String.fromCodePoint(lastCode += parseInt(b, radix));\n map.set(a, b);\n includeReverse && reverseMap.set(b, a);\n }\n });\n return { map: map, reverseMap: reverseMap }\n }\n\n var openToClose, closeToOpen, canonical;\n\n function parse$1 () {\n if (!openToClose) {\n //const start = performance.now()\n var ref = parseCharacterMap(data$1.pairs, true);\n var map = ref.map;\n var reverseMap = ref.reverseMap;\n openToClose = map;\n closeToOpen = reverseMap;\n canonical = parseCharacterMap(data$1.canonical, false).map;\n //console.log(`brackets parsed in ${performance.now() - start}ms`)\n }\n }\n\n function openingToClosingBracket (char) {\n parse$1();\n return openToClose.get(char) || null\n }\n\n function closingToOpeningBracket (char) {\n parse$1();\n return closeToOpen.get(char) || null\n }\n\n function getCanonicalBracket (char) {\n parse$1();\n return canonical.get(char) || null\n }\n\n // Local type aliases\n var TYPE_L = TYPES.L;\n var TYPE_R = TYPES.R;\n var TYPE_EN = TYPES.EN;\n var TYPE_ES = TYPES.ES;\n var TYPE_ET = TYPES.ET;\n var TYPE_AN = TYPES.AN;\n var TYPE_CS = TYPES.CS;\n var TYPE_B = TYPES.B;\n var TYPE_S = TYPES.S;\n var TYPE_ON = TYPES.ON;\n var TYPE_BN = TYPES.BN;\n var TYPE_NSM = TYPES.NSM;\n var TYPE_AL = TYPES.AL;\n var TYPE_LRO = TYPES.LRO;\n var TYPE_RLO = TYPES.RLO;\n var TYPE_LRE = TYPES.LRE;\n var TYPE_RLE = TYPES.RLE;\n var TYPE_PDF = TYPES.PDF;\n var TYPE_LRI = TYPES.LRI;\n var TYPE_RLI = TYPES.RLI;\n var TYPE_FSI = TYPES.FSI;\n var TYPE_PDI = TYPES.PDI;\n\n /**\n * @typedef {object} GetEmbeddingLevelsResult\n * @property {{start, end, level}[]} paragraphs\n * @property {Uint8Array} levels\n */\n\n /**\n * This function applies the Bidirectional Algorithm to a string, returning the resolved embedding levels\n * in a single Uint8Array plus a list of objects holding each paragraph's start and end indices and resolved\n * base embedding level.\n *\n * @param {string} string - The input string\n * @param {\"ltr\"|\"rtl\"|\"auto\"} [baseDirection] - Use \"ltr\" or \"rtl\" to force a base paragraph direction,\n * otherwise a direction will be chosen automatically from each paragraph's contents.\n * @return {GetEmbeddingLevelsResult}\n */\n function getEmbeddingLevels (string, baseDirection) {\n var MAX_DEPTH = 125;\n\n // Start by mapping all characters to their unicode type, as a bitmask integer\n var charTypes = new Uint32Array(string.length);\n for (var i = 0; i < string.length; i++) {\n charTypes[i] = getBidiCharType(string[i]);\n }\n\n var charTypeCounts = new Map(); //will be cleared at start of each paragraph\n function changeCharType(i, type) {\n var oldType = charTypes[i];\n charTypes[i] = type;\n charTypeCounts.set(oldType, charTypeCounts.get(oldType) - 1);\n if (oldType & NEUTRAL_ISOLATE_TYPES) {\n charTypeCounts.set(NEUTRAL_ISOLATE_TYPES, charTypeCounts.get(NEUTRAL_ISOLATE_TYPES) - 1);\n }\n charTypeCounts.set(type, (charTypeCounts.get(type) || 0) + 1);\n if (type & NEUTRAL_ISOLATE_TYPES) {\n charTypeCounts.set(NEUTRAL_ISOLATE_TYPES, (charTypeCounts.get(NEUTRAL_ISOLATE_TYPES) || 0) + 1);\n }\n }\n\n var embedLevels = new Uint8Array(string.length);\n var isolationPairs = new Map(); //init->pdi and pdi->init\n\n // === 3.3.1 The Paragraph Level ===\n // 3.3.1 P1: Split the text into paragraphs\n var paragraphs = []; // [{start, end, level}, ...]\n var paragraph = null;\n for (var i$1 = 0; i$1 < string.length; i$1++) {\n if (!paragraph) {\n paragraphs.push(paragraph = {\n start: i$1,\n end: string.length - 1,\n // 3.3.1 P2-P3: Determine the paragraph level\n level: baseDirection === 'rtl' ? 1 : baseDirection === 'ltr' ? 0 : determineAutoEmbedLevel(i$1, false)\n });\n }\n if (charTypes[i$1] & TYPE_B) {\n paragraph.end = i$1;\n paragraph = null;\n }\n }\n\n var FORMATTING_TYPES = TYPE_RLE | TYPE_LRE | TYPE_RLO | TYPE_LRO | ISOLATE_INIT_TYPES | TYPE_PDI | TYPE_PDF | TYPE_B;\n var nextEven = function (n) { return n + ((n & 1) ? 1 : 2); };\n var nextOdd = function (n) { return n + ((n & 1) ? 2 : 1); };\n\n // Everything from here on will operate per paragraph.\n for (var paraIdx = 0; paraIdx < paragraphs.length; paraIdx++) {\n paragraph = paragraphs[paraIdx];\n var statusStack = [{\n _level: paragraph.level,\n _override: 0, //0=neutral, 1=L, 2=R\n _isolate: 0 //bool\n }];\n var stackTop = (void 0);\n var overflowIsolateCount = 0;\n var overflowEmbeddingCount = 0;\n var validIsolateCount = 0;\n charTypeCounts.clear();\n\n // === 3.3.2 Explicit Levels and Directions ===\n for (var i$2 = paragraph.start; i$2 <= paragraph.end; i$2++) {\n var charType = charTypes[i$2];\n stackTop = statusStack[statusStack.length - 1];\n\n // Set initial counts\n charTypeCounts.set(charType, (charTypeCounts.get(charType) || 0) + 1);\n if (charType & NEUTRAL_ISOLATE_TYPES) {\n charTypeCounts.set(NEUTRAL_ISOLATE_TYPES, (charTypeCounts.get(NEUTRAL_ISOLATE_TYPES) || 0) + 1);\n }\n\n // Explicit Embeddings: 3.3.2 X2 - X3\n if (charType & FORMATTING_TYPES) { //prefilter all formatters\n if (charType & (TYPE_RLE | TYPE_LRE)) {\n embedLevels[i$2] = stackTop._level; // 5.2\n var level = (charType === TYPE_RLE ? nextOdd : nextEven)(stackTop._level);\n if (level <= MAX_DEPTH && !overflowIsolateCount && !overflowEmbeddingCount) {\n statusStack.push({\n _level: level,\n _override: 0,\n _isolate: 0\n });\n } else if (!overflowIsolateCount) {\n overflowEmbeddingCount++;\n }\n }\n\n // Explicit Overrides: 3.3.2 X4 - X5\n else if (charType & (TYPE_RLO | TYPE_LRO)) {\n embedLevels[i$2] = stackTop._level; // 5.2\n var level$1 = (charType === TYPE_RLO ? nextOdd : nextEven)(stackTop._level);\n if (level$1 <= MAX_DEPTH && !overflowIsolateCount && !overflowEmbeddingCount) {\n statusStack.push({\n _level: level$1,\n _override: (charType & TYPE_RLO) ? TYPE_R : TYPE_L,\n _isolate: 0\n });\n } else if (!overflowIsolateCount) {\n overflowEmbeddingCount++;\n }\n }\n\n // Isolates: 3.3.2 X5a - X5c\n else if (charType & ISOLATE_INIT_TYPES) {\n // X5c - FSI becomes either RLI or LRI\n if (charType & TYPE_FSI) {\n charType = determineAutoEmbedLevel(i$2 + 1, true) === 1 ? TYPE_RLI : TYPE_LRI;\n }\n\n embedLevels[i$2] = stackTop._level;\n if (stackTop._override) {\n changeCharType(i$2, stackTop._override);\n }\n var level$2 = (charType === TYPE_RLI ? nextOdd : nextEven)(stackTop._level);\n if (level$2 <= MAX_DEPTH && overflowIsolateCount === 0 && overflowEmbeddingCount === 0) {\n validIsolateCount++;\n statusStack.push({\n _level: level$2,\n _override: 0,\n _isolate: 1,\n _isolInitIndex: i$2\n });\n } else {\n overflowIsolateCount++;\n }\n }\n\n // Terminating Isolates: 3.3.2 X6a\n else if (charType & TYPE_PDI) {\n if (overflowIsolateCount > 0) {\n overflowIsolateCount--;\n } else if (validIsolateCount > 0) {\n overflowEmbeddingCount = 0;\n while (!statusStack[statusStack.length - 1]._isolate) {\n statusStack.pop();\n }\n // Add to isolation pairs bidirectional mapping:\n var isolInitIndex = statusStack[statusStack.length - 1]._isolInitIndex;\n if (isolInitIndex != null) {\n isolationPairs.set(isolInitIndex, i$2);\n isolationPairs.set(i$2, isolInitIndex);\n }\n statusStack.pop();\n validIsolateCount--;\n }\n stackTop = statusStack[statusStack.length - 1];\n embedLevels[i$2] = stackTop._level;\n if (stackTop._override) {\n changeCharType(i$2, stackTop._override);\n }\n }\n\n\n // Terminating Embeddings and Overrides: 3.3.2 X7\n else if (charType & TYPE_PDF) {\n if (overflowIsolateCount === 0) {\n if (overflowEmbeddingCount > 0) {\n overflowEmbeddingCount--;\n } else if (!stackTop._isolate && statusStack.length > 1) {\n statusStack.pop();\n stackTop = statusStack[statusStack.length - 1];\n }\n }\n embedLevels[i$2] = stackTop._level; // 5.2\n }\n\n // End of Paragraph: 3.3.2 X8\n else if (charType & TYPE_B) {\n embedLevels[i$2] = paragraph.level;\n }\n }\n\n // Non-formatting characters: 3.3.2 X6\n else {\n embedLevels[i$2] = stackTop._level;\n // NOTE: This exclusion of BN seems to go against what section 5.2 says, but is required for test passage\n if (stackTop._override && charType !== TYPE_BN) {\n changeCharType(i$2, stackTop._override);\n }\n }\n }\n\n // === 3.3.3 Preparations for Implicit Processing ===\n\n // Remove all RLE, LRE, RLO, LRO, PDF, and BN characters: 3.3.3 X9\n // Note: Due to section 5.2, we won't remove them, but we'll use the BN_LIKE_TYPES bitset to\n // easily ignore them all from here on out.\n\n // 3.3.3 X10\n // Compute the set of isolating run sequences as specified by BD13\n var levelRuns = [];\n var currentRun = null;\n for (var i$3 = paragraph.start; i$3 <= paragraph.end; i$3++) {\n var charType$1 = charTypes[i$3];\n if (!(charType$1 & BN_LIKE_TYPES)) {\n var lvl = embedLevels[i$3];\n var isIsolInit = charType$1 & ISOLATE_INIT_TYPES;\n var isPDI = charType$1 === TYPE_PDI;\n if (currentRun && lvl === currentRun._level) {\n currentRun._end = i$3;\n currentRun._endsWithIsolInit = isIsolInit;\n } else {\n levelRuns.push(currentRun = {\n _start: i$3,\n _end: i$3,\n _level: lvl,\n _startsWithPDI: isPDI,\n _endsWithIsolInit: isIsolInit\n });\n }\n }\n }\n var isolatingRunSeqs = []; // [{seqIndices: [], sosType: L|R, eosType: L|R}]\n for (var runIdx = 0; runIdx < levelRuns.length; runIdx++) {\n var run = levelRuns[runIdx];\n if (!run._startsWithPDI || (run._startsWithPDI && !isolationPairs.has(run._start))) {\n var seqRuns = [currentRun = run];\n for (var pdiIndex = (void 0); currentRun && currentRun._endsWithIsolInit && (pdiIndex = isolationPairs.get(currentRun._end)) != null;) {\n for (var i$4 = runIdx + 1; i$4 < levelRuns.length; i$4++) {\n if (levelRuns[i$4]._start === pdiIndex) {\n seqRuns.push(currentRun = levelRuns[i$4]);\n break\n }\n }\n }\n // build flat list of indices across all runs:\n var seqIndices = [];\n for (var i$5 = 0; i$5 < seqRuns.length; i$5++) {\n var run$1 = seqRuns[i$5];\n for (var j = run$1._start; j <= run$1._end; j++) {\n seqIndices.push(j);\n }\n }\n // determine the sos/eos types:\n var firstLevel = embedLevels[seqIndices[0]];\n var prevLevel = paragraph.level;\n for (var i$6 = seqIndices[0] - 1; i$6 >= 0; i$6--) {\n if (!(charTypes[i$6] & BN_LIKE_TYPES)) { //5.2\n prevLevel = embedLevels[i$6];\n break\n }\n }\n var lastIndex = seqIndices[seqIndices.length - 1];\n var lastLevel = embedLevels[lastIndex];\n var nextLevel = paragraph.level;\n if (!(charTypes[lastIndex] & ISOLATE_INIT_TYPES)) {\n for (var i$7 = lastIndex + 1; i$7 <= paragraph.end; i$7++) {\n if (!(charTypes[i$7] & BN_LIKE_TYPES)) { //5.2\n nextLevel = embedLevels[i$7];\n break\n }\n }\n }\n isolatingRunSeqs.push({\n _seqIndices: seqIndices,\n _sosType: Math.max(prevLevel, firstLevel) % 2 ? TYPE_R : TYPE_L,\n _eosType: Math.max(nextLevel, lastLevel) % 2 ? TYPE_R : TYPE_L\n });\n }\n }\n\n // The next steps are done per isolating run sequence\n for (var seqIdx = 0; seqIdx < isolatingRunSeqs.length; seqIdx++) {\n var ref = isolatingRunSeqs[seqIdx];\n var seqIndices$1 = ref._seqIndices;\n var sosType = ref._sosType;\n var eosType = ref._eosType;\n /**\n * All the level runs in an isolating run sequence have the same embedding level.\n * \n * DO NOT change any `embedLevels[i]` within the current scope.\n */\n var embedDirection = ((embedLevels[seqIndices$1[0]]) & 1) ? TYPE_R : TYPE_L;\n\n // === 3.3.4 Resolving Weak Types ===\n\n // W1 + 5.2. Search backward from each NSM to the first character in the isolating run sequence whose\n // bidirectional type is not BN, and set the NSM to ON if it is an isolate initiator or PDI, and to its\n // type otherwise. If the NSM is the first non-BN character, change the NSM to the type of sos.\n if (charTypeCounts.get(TYPE_NSM)) {\n for (var si = 0; si < seqIndices$1.length; si++) {\n var i$8 = seqIndices$1[si];\n if (charTypes[i$8] & TYPE_NSM) {\n var prevType = sosType;\n for (var sj = si - 1; sj >= 0; sj--) {\n if (!(charTypes[seqIndices$1[sj]] & BN_LIKE_TYPES)) { //5.2 scan back to first non-BN\n prevType = charTypes[seqIndices$1[sj]];\n break\n }\n }\n changeCharType(i$8, (prevType & (ISOLATE_INIT_TYPES | TYPE_PDI)) ? TYPE_ON : prevType);\n }\n }\n }\n\n // W2. Search backward from each instance of a European number until the first strong type (R, L, AL, or sos)\n // is found. If an AL is found, change the type of the European number to Arabic number.\n if (charTypeCounts.get(TYPE_EN)) {\n for (var si$1 = 0; si$1 < seqIndices$1.length; si$1++) {\n var i$9 = seqIndices$1[si$1];\n if (charTypes[i$9] & TYPE_EN) {\n for (var sj$1 = si$1 - 1; sj$1 >= -1; sj$1--) {\n var prevCharType = sj$1 === -1 ? sosType : charTypes[seqIndices$1[sj$1]];\n if (prevCharType & STRONG_TYPES) {\n if (prevCharType === TYPE_AL) {\n changeCharType(i$9, TYPE_AN);\n }\n break\n }\n }\n }\n }\n }\n\n // W3. Change all ALs to R\n if (charTypeCounts.get(TYPE_AL)) {\n for (var si$2 = 0; si$2 < seqIndices$1.length; si$2++) {\n var i$10 = seqIndices$1[si$2];\n if (charTypes[i$10] & TYPE_AL) {\n changeCharType(i$10, TYPE_R);\n }\n }\n }\n\n // W4. A single European separator between two European numbers changes to a European number. A single common\n // separator between two numbers of the same type changes to that type.\n if (charTypeCounts.get(TYPE_ES) || charTypeCounts.get(TYPE_CS)) {\n for (var si$3 = 1; si$3 < seqIndices$1.length - 1; si$3++) {\n var i$11 = seqIndices$1[si$3];\n if (charTypes[i$11] & (TYPE_ES | TYPE_CS)) {\n var prevType$1 = 0, nextType = 0;\n for (var sj$2 = si$3 - 1; sj$2 >= 0; sj$2--) {\n prevType$1 = charTypes[seqIndices$1[sj$2]];\n if (!(prevType$1 & BN_LIKE_TYPES)) { //5.2\n break\n }\n }\n for (var sj$3 = si$3 + 1; sj$3 < seqIndices$1.length; sj$3++) {\n nextType = charTypes[seqIndices$1[sj$3]];\n if (!(nextType & BN_LIKE_TYPES)) { //5.2\n break\n }\n }\n if (prevType$1 === nextType && (charTypes[i$11] === TYPE_ES ? prevType$1 === TYPE_EN : (prevType$1 & (TYPE_EN | TYPE_AN)))) {\n changeCharType(i$11, prevType$1);\n }\n }\n }\n }\n\n // W5. A sequence of European terminators adjacent to European numbers changes to all European numbers.\n if (charTypeCounts.get(TYPE_EN)) {\n for (var si$4 = 0; si$4 < seqIndices$1.length; si$4++) {\n var i$12 = seqIndices$1[si$4];\n if (charTypes[i$12] & TYPE_EN) {\n for (var sj$4 = si$4 - 1; sj$4 >= 0 && (charTypes[seqIndices$1[sj$4]] & (TYPE_ET | BN_LIKE_TYPES)); sj$4--) {\n changeCharType(seqIndices$1[sj$4], TYPE_EN);\n }\n for (si$4++; si$4 < seqIndices$1.length && (charTypes[seqIndices$1[si$4]] & (TYPE_ET | BN_LIKE_TYPES | TYPE_EN)); si$4++) {\n if (charTypes[seqIndices$1[si$4]] !== TYPE_EN) {\n changeCharType(seqIndices$1[si$4], TYPE_EN);\n }\n }\n }\n }\n }\n\n // W6. Otherwise, separators and terminators change to Other Neutral.\n if (charTypeCounts.get(TYPE_ET) || charTypeCounts.get(TYPE_ES) || charTypeCounts.get(TYPE_CS)) {\n for (var si$5 = 0; si$5 < seqIndices$1.length; si$5++) {\n var i$13 = seqIndices$1[si$5];\n if (charTypes[i$13] & (TYPE_ET | TYPE_ES | TYPE_CS)) {\n changeCharType(i$13, TYPE_ON);\n // 5.2 transform adjacent BNs too:\n for (var sj$5 = si$5 - 1; sj$5 >= 0 && (charTypes[seqIndices$1[sj$5]] & BN_LIKE_TYPES); sj$5--) {\n changeCharType(seqIndices$1[sj$5], TYPE_ON);\n }\n for (var sj$6 = si$5 + 1; sj$6 < seqIndices$1.length && (charTypes[seqIndices$1[sj$6]] & BN_LIKE_TYPES); sj$6++) {\n changeCharType(seqIndices$1[sj$6], TYPE_ON);\n }\n }\n }\n }\n\n // W7. Search backward from each instance of a European number until the first strong type (R, L, or sos)\n // is found. If an L is found, then change the type of the European number to L.\n // NOTE: implemented in single forward pass for efficiency\n if (charTypeCounts.get(TYPE_EN)) {\n for (var si$6 = 0, prevStrongType = sosType; si$6 < seqIndices$1.length; si$6++) {\n var i$14 = seqIndices$1[si$6];\n var type = charTypes[i$14];\n if (type & TYPE_EN) {\n if (prevStrongType === TYPE_L) {\n changeCharType(i$14, TYPE_L);\n }\n } else if (type & STRONG_TYPES) {\n prevStrongType = type;\n }\n }\n }\n\n // === 3.3.5 Resolving Neutral and Isolate Formatting Types ===\n\n if (charTypeCounts.get(NEUTRAL_ISOLATE_TYPES)) {\n // N0. Process bracket pairs in an isolating run sequence sequentially in the logical order of the text\n // positions of the opening paired brackets using the logic given below. Within this scope, bidirectional\n // types EN and AN are treated as R.\n var R_TYPES_FOR_N_STEPS = (TYPE_R | TYPE_EN | TYPE_AN);\n var STRONG_TYPES_FOR_N_STEPS = R_TYPES_FOR_N_STEPS | TYPE_L;\n\n // * Identify the bracket pairs in the current isolating run sequence according to BD16.\n var bracketPairs = [];\n {\n var openerStack = [];\n for (var si$7 = 0; si$7 < seqIndices$1.length; si$7++) {\n // NOTE: for any potential bracket character we also test that it still carries a NI\n // type, as that may have been changed earlier. This doesn't seem to be explicitly\n // called out in the spec, but is required for passage of certain tests.\n if (charTypes[seqIndices$1[si$7]] & NEUTRAL_ISOLATE_TYPES) {\n var char = string[seqIndices$1[si$7]];\n var oppositeBracket = (void 0);\n // Opening bracket\n if (openingToClosingBracket(char) !== null) {\n if (openerStack.length < 63) {\n openerStack.push({ char: char, seqIndex: si$7 });\n } else {\n break\n }\n }\n // Closing bracket\n else if ((oppositeBracket = closingToOpeningBracket(char)) !== null) {\n for (var stackIdx = openerStack.length - 1; stackIdx >= 0; stackIdx--) {\n var stackChar = openerStack[stackIdx].char;\n if (stackChar === oppositeBracket ||\n stackChar === closingToOpeningBracket(getCanonicalBracket(char)) ||\n openingToClosingBracket(getCanonicalBracket(stackChar)) === char\n ) {\n bracketPairs.push([openerStack[stackIdx].seqIndex, si$7]);\n openerStack.length = stackIdx; //pop the matching bracket and all following\n break\n }\n }\n }\n }\n }\n bracketPairs.sort(function (a, b) { return a[0] - b[0]; });\n }\n // * For each bracket-pair element in the list of pairs of text positions\n for (var pairIdx = 0; pairIdx < bracketPairs.length; pairIdx++) {\n var ref$1 = bracketPairs[pairIdx];\n var openSeqIdx = ref$1[0];\n var closeSeqIdx = ref$1[1];\n // a. Inspect the bidirectional types of the characters enclosed within the bracket pair.\n // b. If any strong type (either L or R) matching the embedding direction is found, set the type for both\n // brackets in the pair to match the embedding direction.\n var foundStrongType = false;\n var useStrongType = 0;\n for (var si$8 = openSeqIdx + 1; si$8 < closeSeqIdx; si$8++) {\n var i$15 = seqIndices$1[si$8];\n if (charTypes[i$15] & STRONG_TYPES_FOR_N_STEPS) {\n foundStrongType = true;\n var lr = (charTypes[i$15] & R_TYPES_FOR_N_STEPS) ? TYPE_R : TYPE_L;\n if (lr === embedDirection) {\n useStrongType = lr;\n break\n }\n }\n }\n // c. Otherwise, if there is a strong type it must be opposite the embedding direction. Therefore, test\n // for an established context with a preceding strong type by checking backwards before the opening paired\n // bracket until the first strong type (L, R, or sos) is found.\n // 1. If the preceding strong type is also opposite the embedding direction, context is established, so\n // set the type for both brackets in the pair to that direction.\n // 2. Otherwise set the type for both brackets in the pair to the embedding direction.\n if (foundStrongType && !useStrongType) {\n useStrongType = sosType;\n for (var si$9 = openSeqIdx - 1; si$9 >= 0; si$9--) {\n var i$16 = seqIndices$1[si$9];\n if (charTypes[i$16] & STRONG_TYPES_FOR_N_STEPS) {\n var lr$1 = (charTypes[i$16] & R_TYPES_FOR_N_STEPS) ? TYPE_R : TYPE_L;\n if (lr$1 !== embedDirection) {\n useStrongType = lr$1;\n } else {\n useStrongType = embedDirection;\n }\n break\n }\n }\n }\n if (useStrongType) {\n charTypes[seqIndices$1[openSeqIdx]] = charTypes[seqIndices$1[closeSeqIdx]] = useStrongType;\n // * Any number of characters that had original bidirectional character type NSM prior to the application\n // of W1 that immediately follow a paired bracket which changed to L or R under N0 should change to match\n // the type of their preceding bracket.\n if (useStrongType !== embedDirection) {\n for (var si$10 = openSeqIdx + 1; si$10 < seqIndices$1.length; si$10++) {\n if (!(charTypes[seqIndices$1[si$10]] & BN_LIKE_TYPES)) {\n if (getBidiCharType(string[seqIndices$1[si$10]]) & TYPE_NSM) {\n charTypes[seqIndices$1[si$10]] = useStrongType;\n }\n break\n }\n }\n }\n if (useStrongType !== embedDirection) {\n for (var si$11 = closeSeqIdx + 1; si$11 < seqIndices$1.length; si$11++) {\n if (!(charTypes[seqIndices$1[si$11]] & BN_LIKE_TYPES)) {\n if (getBidiCharType(string[seqIndices$1[si$11]]) & TYPE_NSM) {\n charTypes[seqIndices$1[si$11]] = useStrongType;\n }\n break\n }\n }\n }\n }\n }\n\n // N1. A sequence of NIs takes the direction of the surrounding strong text if the text on both sides has the\n // same direction.\n // N2. Any remaining NIs take the embedding direction.\n for (var si$12 = 0; si$12 < seqIndices$1.length; si$12++) {\n if (charTypes[seqIndices$1[si$12]] & NEUTRAL_ISOLATE_TYPES) {\n var niRunStart = si$12, niRunEnd = si$12;\n var prevType$2 = sosType; //si === 0 ? sosType : (charTypes[seqIndices[si - 1]] & R_TYPES_FOR_N_STEPS) ? TYPE_R : TYPE_L\n for (var si2 = si$12 - 1; si2 >= 0; si2--) {\n if (charTypes[seqIndices$1[si2]] & BN_LIKE_TYPES) {\n niRunStart = si2; //5.2 treat BNs adjacent to NIs as NIs\n } else {\n prevType$2 = (charTypes[seqIndices$1[si2]] & R_TYPES_FOR_N_STEPS) ? TYPE_R : TYPE_L;\n break\n }\n }\n var nextType$1 = eosType;\n for (var si2$1 = si$12 + 1; si2$1 < seqIndices$1.length; si2$1++) {\n if (charTypes[seqIndices$1[si2$1]] & (NEUTRAL_ISOLATE_TYPES | BN_LIKE_TYPES)) {\n niRunEnd = si2$1;\n } else {\n nextType$1 = (charTypes[seqIndices$1[si2$1]] & R_TYPES_FOR_N_STEPS) ? TYPE_R : TYPE_L;\n break\n }\n }\n for (var sj$7 = niRunStart; sj$7 <= niRunEnd; sj$7++) {\n charTypes[seqIndices$1[sj$7]] = prevType$2 === nextType$1 ? prevType$2 : embedDirection;\n }\n si$12 = niRunEnd;\n }\n }\n }\n }\n\n // === 3.3.6 Resolving Implicit Levels ===\n\n for (var i$17 = paragraph.start; i$17 <= paragraph.end; i$17++) {\n var level$3 = embedLevels[i$17];\n var type$1 = charTypes[i$17];\n // I2. For all characters with an odd (right-to-left) embedding level, those of type L, EN or AN go up one level.\n if (level$3 & 1) {\n if (type$1 & (TYPE_L | TYPE_EN | TYPE_AN)) {\n embedLevels[i$17]++;\n }\n }\n // I1. For all characters with an even (left-to-right) embedding level, those of type R go up one level\n // and those of type AN or EN go up two levels.\n else {\n if (type$1 & TYPE_R) {\n embedLevels[i$17]++;\n } else if (type$1 & (TYPE_AN | TYPE_EN)) {\n embedLevels[i$17] += 2;\n }\n }\n\n // 5.2: Resolve any LRE, RLE, LRO, RLO, PDF, or BN to the level of the preceding character if there is one,\n // and otherwise to the base level.\n if (type$1 & BN_LIKE_TYPES) {\n embedLevels[i$17] = i$17 === 0 ? paragraph.level : embedLevels[i$17 - 1];\n }\n\n // 3.4 L1.1-4: Reset the embedding level of segment/paragraph separators, and any sequence of whitespace or\n // isolate formatting characters preceding them or the end of the paragraph, to the paragraph level.\n // NOTE: this will also need to be applied to each individual line ending after line wrapping occurs.\n if (i$17 === paragraph.end || getBidiCharType(string[i$17]) & (TYPE_S | TYPE_B)) {\n for (var j$1 = i$17; j$1 >= 0 && (getBidiCharType(string[j$1]) & TRAILING_TYPES); j$1--) {\n embedLevels[j$1] = paragraph.level;\n }\n }\n }\n }\n\n // DONE! The resolved levels can then be used, after line wrapping, to flip runs of characters\n // according to section 3.4 Reordering Resolved Levels\n return {\n levels: embedLevels,\n paragraphs: paragraphs\n }\n\n function determineAutoEmbedLevel (start, isFSI) {\n // 3.3.1 P2 - P3\n for (var i = start; i < string.length; i++) {\n var charType = charTypes[i];\n if (charType & (TYPE_R | TYPE_AL)) {\n return 1\n }\n if ((charType & (TYPE_B | TYPE_L)) || (isFSI && charType === TYPE_PDI)) {\n return 0\n }\n if (charType & ISOLATE_INIT_TYPES) {\n var pdi = indexOfMatchingPDI(i);\n i = pdi === -1 ? string.length : pdi;\n }\n }\n return 0\n }\n\n function indexOfMatchingPDI (isolateStart) {\n // 3.1.2 BD9\n var isolationLevel = 1;\n for (var i = isolateStart + 1; i < string.length; i++) {\n var charType = charTypes[i];\n if (charType & TYPE_B) {\n break\n }\n if (charType & TYPE_PDI) {\n if (--isolationLevel === 0) {\n return i\n }\n } else if (charType & ISOLATE_INIT_TYPES) {\n isolationLevel++;\n }\n }\n return -1\n }\n }\n\n // Bidi mirrored chars data, auto generated\n var data = \"14>1,j>2,t>2,u>2,1a>g,2v3>1,1>1,1ge>1,1wd>1,b>1,1j>1,f>1,ai>3,-2>3,+1,8>1k0,-1jq>1y7,-1y6>1hf,-1he>1h6,-1h5>1ha,-1h8>1qi,-1pu>1,6>3u,-3s>7,6>1,1>1,f>1,1>1,+2,3>1,1>1,+13,4>1,1>1,6>1eo,-1ee>1,3>1mg,-1me>1mk,-1mj>1mi,-1mg>1mi,-1md>1,1>1,+2,1>10k,-103>1,1>1,4>1,5>1,1>1,+10,3>1,1>8,-7>8,+1,-6>7,+1,a>1,1>1,u>1,u6>1,1>1,+5,26>1,1>1,2>1,2>2,8>1,7>1,4>1,1>1,+5,b8>1,1>1,+3,1>3,-2>1,2>1,1>1,+2,c>1,3>1,1>1,+2,h>1,3>1,a>1,1>1,2>1,3>1,1>1,d>1,f>1,3>1,1a>1,1>1,6>1,7>1,13>1,k>1,1>1,+19,4>1,1>1,+2,2>1,1>1,+18,m>1,a>1,1>1,lk>1,1>1,4>1,2>1,f>1,3>1,1>1,+3,db>1,1>1,+3,3>1,1>1,+2,14qm>1,1>1,+1,6>1,4j>1,j>2,t>2,u>2,2>1,+1\";\n\n var mirrorMap;\n\n function parse () {\n if (!mirrorMap) {\n //const start = performance.now()\n var ref = parseCharacterMap(data, true);\n var map = ref.map;\n var reverseMap = ref.reverseMap;\n // Combine both maps into one\n reverseMap.forEach(function (value, key) {\n map.set(key, value);\n });\n mirrorMap = map;\n //console.log(`mirrored chars parsed in ${performance.now() - start}ms`)\n }\n }\n\n function getMirroredCharacter (char) {\n parse();\n return mirrorMap.get(char) || null\n }\n\n /**\n * Given a string and its resolved embedding levels, build a map of indices to replacement chars\n * for any characters in right-to-left segments that have defined mirrored characters.\n * @param string\n * @param embeddingLevels\n * @param [start]\n * @param [end]\n * @return {Map<number, string>}\n */\n function getMirroredCharactersMap(string, embeddingLevels, start, end) {\n var strLen = string.length;\n start = Math.max(0, start == null ? 0 : +start);\n end = Math.min(strLen - 1, end == null ? strLen - 1 : +end);\n\n var map = new Map();\n for (var i = start; i <= end; i++) {\n if (embeddingLevels[i] & 1) { //only odd (rtl) levels\n var mirror = getMirroredCharacter(string[i]);\n if (mirror !== null) {\n map.set(i, mirror);\n }\n }\n }\n return map\n }\n\n /**\n * Given a start and end denoting a single line within a string, and a set of precalculated\n * bidi embedding levels, produce a list of segments whose ordering should be flipped, in sequence.\n * @param {string} string - the full input string\n * @param {GetEmbeddingLevelsResult} embeddingLevelsResult - the result object from getEmbeddingLevels\n * @param {number} [start] - first character in a subset of the full string\n * @param {number} [end] - last character in a subset of the full string\n * @return {number[][]} - the list of start/end segments that should be flipped, in order.\n */\n function getReorderSegments(string, embeddingLevelsResult, start, end) {\n var strLen = string.length;\n start = Math.max(0, start == null ? 0 : +start);\n end = Math.min(strLen - 1, end == null ? strLen - 1 : +end);\n\n var segments = [];\n embeddingLevelsResult.paragraphs.forEach(function (paragraph) {\n var lineStart = Math.max(start, paragraph.start);\n var lineEnd = Math.min(end, paragraph.end);\n if (lineStart < lineEnd) {\n // Local slice for mutation\n var lineLevels = embeddingLevelsResult.levels.slice(lineStart, lineEnd + 1);\n\n // 3.4 L1.4: Reset any sequence of whitespace characters and/or isolate formatting characters at the\n // end of the line to the paragraph level.\n for (var i = lineEnd; i >= lineStart && (getBidiCharType(string[i]) & TRAILING_TYPES); i--) {\n lineLevels[i] = paragraph.level;\n }\n\n // L2. From the highest level found in the text to the lowest odd level on each line, including intermediate levels\n // not actually present in the text, reverse any contiguous sequence of characters that are at that level or higher.\n var maxLevel = paragraph.level;\n var minOddLevel = Infinity;\n for (var i$1 = 0; i$1 < lineLevels.length; i$1++) {\n var level = lineLevels[i$1];\n if (level > maxLevel) { maxLevel = level; }\n if (level < minOddLevel) { minOddLevel = level | 1; }\n }\n for (var lvl = maxLevel; lvl >= minOddLevel; lvl--) {\n for (var i$2 = 0; i$2 < lineLevels.length; i$2++) {\n if (lineLevels[i$2] >= lvl) {\n var segStart = i$2;\n while (i$2 + 1 < lineLevels.length && lineLevels[i$2 + 1] >= lvl) {\n i$2++;\n }\n if (i$2 > segStart) {\n segments.push([segStart + lineStart, i$2 + lineStart]);\n }\n }\n }\n }\n }\n });\n return segments\n }\n\n /**\n * @param {string} string\n * @param {GetEmbeddingLevelsResult} embedLevelsResult\n * @param {number} [start]\n * @param {number} [end]\n * @return {string} the new string with bidi segments reordered\n */\n function getReorderedString(string, embedLevelsResult, start, end) {\n var indices = getReorderedIndices(string, embedLevelsResult, start, end);\n var chars = [].concat( string );\n indices.forEach(function (charIndex, i) {\n chars[i] = (\n (embedLevelsResult.levels[charIndex] & 1) ? getMirroredCharacter(string[charIndex]) : null\n ) || string[charIndex];\n });\n return chars.join('')\n }\n\n /**\n * @param {string} string\n * @param {GetEmbeddingLevelsResult} embedLevelsResult\n * @param {number} [start]\n * @param {number} [end]\n * @return {number[]} an array with character indices in their new bidi order\n */\n function getReorderedIndices(string, embedLevelsResult, start, end) {\n var segments = getReorderSegments(string, embedLevelsResult, start, end);\n // Fill an array with indices\n var indices = [];\n for (var i = 0; i < string.length; i++) {\n indices[i] = i;\n }\n // Reverse each segment in order\n segments.forEach(function (ref) {\n var start = ref[0];\n var end = ref[1];\n\n var slice = indices.slice(start, end + 1);\n for (var i = slice.length; i--;) {\n indices[end - i] = slice[i];\n }\n });\n return indices\n }\n\n exports.closingToOpeningBracket = closingToOpeningBracket;\n exports.getBidiCharType = getBidiCharType;\n exports.getBidiCharTypeName = getBidiCharTypeName;\n exports.getCanonicalBracket = getCanonicalBracket;\n exports.getEmbeddingLevels = getEmbeddingLevels;\n exports.getMirroredCharacter = getMirroredCharacter;\n exports.getMirroredCharactersMap = getMirroredCharactersMap;\n exports.getReorderSegments = getReorderSegments;\n exports.getReorderedIndices = getReorderedIndices;\n exports.getReorderedString = getReorderedString;\n exports.openingToClosingBracket = openingToClosingBracket;\n\n Object.defineProperty(exports, '__esModule', { value: true });\n\n return exports;\n\n }({}));\n return bidi}\n\n return bidiFactory;\n\n})));\n","import { $ as SpringPhysicsSchema, A as TextPathSourceSchema, B as AnchorGroupingSchema, C as SelectorBasedOnSchema, Ct as AUDIO_BIQUAD_FILTER_SHADER, D as TextCursorConfigSchema, Dt as AudioSignalComputePipeline, E as SelectorUnitsSchema, Et as AUDIO_SIGNAL_TO_TEXTURE_SHADER, F as TextWigglySelectorSchema, G as ExpressionSelectorSchema, H as AudioSpectrumTypographySchema, I as TypewriterAnimatorSchema, J as LineSpacingDynamicsSchema, K as ExtendedGlyphPropertiesSchema, L as TypingCadenceSchema, M as TextScrambleConfigSchema, N as TextSelectorSchema, O as TextCursorStyleSchema, P as TextSignalSelectorSchema, Q as Spatial3DPropertiesSchema, R as Vec2Schema, S as GlyphAnchorPointSchema, St as parseStateFromFnBody, T as SelectorShapeSchema, Tt as AUDIO_PACE_INTEGRAL_SHADER, U as ChromaticGlitchConfigSchema, V as AnchorPresetSchema, W as DynamicStrokePropertiesSchema, X as ParticleDissolveConfigSchema, Y as LongShadowConfigSchema, Z as SkewPropertiesSchema, _ as AETextAnimatorSchema, _t as SignalRegistry, a as evaluateSelectorCombination, at as buildPathLUT, b as EnhancedTextNodeSchema, bt as buildWGSLSignalFn, c as computeLineLeadingDisplacement, ct as evaluateCubicBezier, d as evaluateSkewMatrix, dt as generatePathSegments, et as TextAnchorConfigSchema, f as evaluateSpringProgress, ft as parseSvgPathToCubicBeziers, g as TextPathBuilder, gt as waveToCubicBeziers, h as TextAnimatorBuilder, ht as svgArcToCubicBeziers, i as deterministicWigglyNoise, it as AdvancedTextAnimatorBuilder, j as TextRangeSelectorSchema, k as TextPathOptionsSchema, l as evaluateExpressionSelector, lt as evaluateCubicBezierDerivative, m as sampleAudioSpectrumScale, mt as samplePathChainGeometry, n as getScramblePool, nt as VolumetricFormationConfigSchema, o as getShuffledOrder, ot as distanceToCurveParameter, p as evaluateVolumetricFormation, pt as sampleCurveGeometry, q as KineticMarqueeConfigSchema, r as computeRangeSelectorWeight, rt as VolumetricFormationModeSchema, s as computeAnchorPivotOffset, st as ellipseToCubicBeziers, t as evaluateTypewriterState, tt as VariableFontAxesSchema, u as evaluateMarqueeOffset, ut as generateArcLengthLUT, v as AnimatableGlyphPropsSchema, vt as signalRegistry, w as SelectorModeSchema, wt as AUDIO_FEATURE_EXTRACTION_SHADER, x as GlyphAnchorGroupingSchema, xt as generateWGSLFromConfig, y as CubicBezierSegmentSchema, yt as buildUniformBufferLayout, z as AdvancedTextAnimatorSchema } from \"./text-animations-CaYMwhsz.mjs\";\nimport { Camera3D, ENVIRONMENT_PRESETS, LIGHT_UNIFORM_SIZE_BYTES, Light3D, MAX_LIGHTS, Matrix4Math, Path3D, Vector3Math, parseColorToRgb, resolveEnvironment } from \"./math3d/index.mjs\";\nimport { gradientStopsToOklab, isSignal, limitGradientStops, parseCssColor, parseCssGradient } from \"@framefields/core\";\nimport { ALL_FORMATS, AudioBufferSink, CanvasSink, FilePathSource, Input, UrlSource, VideoSampleSink } from \"mediabunny\";\nimport fs from \"node:fs\";\nimport path from \"node:path\";\nimport { inflateSync } from \"node:zlib\";\nimport { GetFontAssetUrl, localFontManager } from \"@framefields/client-utils\";\nimport * as fontkit from \"fontkit\";\nimport bidiFactory from \"bidi-js\";\nimport { decompressFrames, parseGIF } from \"gifuct-js\";\nimport { DotLottie } from \"@lottiefiles/dotlottie-web\";\nimport earcut from \"earcut\";\nimport { Path2D } from \"skia-canvas\";\n\n//#region src/audio/audio-latent-engine.ts\nconst FFT_SIZE = 2048;\nconst NUM_BINS = 1024;\nconst AUDIO_LATENT_BUFFER_SIZE = (NUM_BINS + 4) * 4;\nconst HANN_WINDOW = new Float32Array(FFT_SIZE);\nfor (let n = 0; n < FFT_SIZE; n++) HANN_WINDOW[n] = .5 * (1 - Math.cos(2 * Math.PI * n / (FFT_SIZE - 1)));\nconst BIT_REVERSE = new Uint16Array(FFT_SIZE);\nfor (let i = 0; i < FFT_SIZE; i++) {\n\tlet rev = 0;\n\tlet val = i;\n\tfor (let j = 0; j < 11; j++) {\n\t\trev = rev << 1 | val & 1;\n\t\tval >>= 1;\n\t}\n\tBIT_REVERSE[i] = rev;\n}\nconst COS_TABLE = new Float32Array(FFT_SIZE / 2);\nconst SIN_TABLE = new Float32Array(FFT_SIZE / 2);\nfor (let k = 0; k < FFT_SIZE / 2; k++) {\n\tconst angle = -2 * Math.PI * k / FFT_SIZE;\n\tCOS_TABLE[k] = Math.cos(angle);\n\tSIN_TABLE[k] = Math.sin(angle);\n}\n/**\n* Computes in-place 2048-point Radix-2 Cooley-Tukey FFT.\n* Accepts real and imaginary Float32Array buffers of length 2048.\n*/\nfunction computeFFT2048(real, imag) {\n\tfor (let i = 0; i < FFT_SIZE; i++) {\n\t\tconst j = BIT_REVERSE[i] ?? 0;\n\t\tif (j > i) {\n\t\t\tconst tr = real[i] ?? 0;\n\t\t\treal[i] = real[j] ?? 0;\n\t\t\treal[j] = tr;\n\t\t\tconst ti = imag[i] ?? 0;\n\t\t\timag[i] = imag[j] ?? 0;\n\t\t\timag[j] = ti;\n\t\t}\n\t}\n\tfor (let len = 2; len <= FFT_SIZE; len <<= 1) {\n\t\tconst halfLen = len >> 1;\n\t\tconst step = FFT_SIZE / len;\n\t\tfor (let i = 0; i < FFT_SIZE; i += len) for (let k = 0; k < halfLen; k++) {\n\t\t\tconst twiddleIdx = k * step;\n\t\t\tconst cos = COS_TABLE[twiddleIdx] ?? 1;\n\t\t\tconst sin = SIN_TABLE[twiddleIdx] ?? 0;\n\t\t\tconst uReal = real[i + k] ?? 0;\n\t\t\tconst uImag = imag[i + k] ?? 0;\n\t\t\tconst vReal = real[i + k + halfLen] ?? 0;\n\t\t\tconst vImag = imag[i + k + halfLen] ?? 0;\n\t\t\tconst tReal = vReal * cos - vImag * sin;\n\t\t\tconst tImag = vReal * sin + vImag * cos;\n\t\t\treal[i + k] = uReal + tReal;\n\t\t\timag[i + k] = uImag + tImag;\n\t\t\treal[i + k + halfLen] = uReal - tReal;\n\t\t\timag[i + k + halfLen] = uImag - tImag;\n\t\t}\n\t}\n}\n/**\n* Fast Audio Latent and Spectral Vector Processor.\n*/\nvar AudioLatentEngine = class AudioLatentEngine {\n\ttempReal = new Float32Array(FFT_SIZE);\n\ttempImag = new Float32Array(FFT_SIZE);\n\tpreviousBins = new Float32Array(NUM_BINS);\n\t/**\n\t* Extracts 1024-band FFT and audio latent energies at a specific playback time.\n\t*/\n\textractAtTime(channels, sampleRate, timeSec) {\n\t\tconst numChannels = channels.length;\n\t\tconst totalSamples = numChannels > 0 ? channels[0]?.length ?? 0 : 0;\n\t\tconst startSample = Math.round(timeSec * sampleRate) - (FFT_SIZE >> 1);\n\t\tfor (let i = 0; i < FFT_SIZE; i++) {\n\t\t\tconst sampleIdx = startSample + i;\n\t\t\tlet sampleVal = 0;\n\t\t\tif (sampleIdx >= 0 && sampleIdx < totalSamples) {\n\t\t\t\tif (numChannels === 1) sampleVal = channels[0]?.[sampleIdx] ?? 0;\n\t\t\t\telse if (numChannels >= 2) sampleVal = ((channels[0]?.[sampleIdx] ?? 0) + (channels[1]?.[sampleIdx] ?? 0)) * .5;\n\t\t\t}\n\t\t\tthis.tempReal[i] = sampleVal * (HANN_WINDOW[i] ?? 1);\n\t\t\tthis.tempImag[i] = 0;\n\t\t}\n\t\tcomputeFFT2048(this.tempReal, this.tempImag);\n\t\tconst fftBins = new Float32Array(NUM_BINS);\n\t\tconst normFactor = 2 / FFT_SIZE;\n\t\tfor (let k = 0; k < NUM_BINS; k++) {\n\t\t\tconst r = this.tempReal[k] ?? 0;\n\t\t\tconst im = this.tempImag[k] ?? 0;\n\t\t\tfftBins[k] = Math.sqrt(r * r + im * im) * normFactor * 2;\n\t\t}\n\t\tconst hzPerBin = sampleRate / FFT_SIZE;\n\t\tconst bassStartBin = Math.max(1, Math.round(20 / hzPerBin));\n\t\tconst bassEndBin = Math.max(bassStartBin + 1, Math.round(150 / hzPerBin));\n\t\tlet bassSum = 0;\n\t\tfor (let k = bassStartBin; k <= bassEndBin && k < NUM_BINS; k++) bassSum += (fftBins[k] ?? 0) * (fftBins[k] ?? 0);\n\t\tconst bassEnergy = Math.min(1, Math.sqrt(bassSum / (bassEndBin - bassStartBin + 1)) * 4);\n\t\tlet fluxSum = 0;\n\t\tfor (let k = 0; k < NUM_BINS; k++) {\n\t\t\tconst diff = (fftBins[k] ?? 0) - (this.previousBins[k] ?? 0);\n\t\t\tif (diff > 0) fluxSum += diff;\n\t\t\tthis.previousBins[k] = fftBins[k] ?? 0;\n\t\t}\n\t\tconst drumTransient = Math.min(1, fluxSum * .15);\n\t\tconst vocalStartBin = Math.round(300 / hzPerBin);\n\t\tconst vocalEndBin = Math.min(NUM_BINS - 1, Math.round(3400 / hzPerBin));\n\t\tlet vocalSum = 0;\n\t\tfor (let k = vocalStartBin; k <= vocalEndBin; k++) vocalSum += (fftBins[k] ?? 0) * (fftBins[k] ?? 0);\n\t\treturn {\n\t\t\tfftBins,\n\t\t\tbassEnergy,\n\t\t\tdrumTransient,\n\t\t\tvocalEnergy: Math.min(1, Math.sqrt(vocalSum / (vocalEndBin - vocalStartBin + 1)) * 3.5),\n\t\t\ttimeMs: timeSec * 1e3\n\t\t};\n\t}\n\t/**\n\t* Packs AudioLatentData into a Float32Array suitable for WebGPU storage buffer upload.\n\t* Struct layout:\n\t* 0..1023: fftBins (array<f32, 1024>)\n\t* 1024: bassEnergy\n\t* 1025: drumTransient\n\t* 1026: vocalEnergy\n\t* 1027: timeMs\n\t*/\n\tstatic packBufferData(data) {\n\t\tconst bufferData = new Float32Array(NUM_BINS + 4);\n\t\tbufferData.set(data.fftBins, 0);\n\t\tbufferData[1024] = data.bassEnergy;\n\t\tbufferData[1025] = data.drumTransient;\n\t\tbufferData[1026] = data.vocalEnergy;\n\t\tbufferData[1027] = data.timeMs;\n\t\treturn bufferData;\n\t}\n\t/**\n\t* Creates a WebGPU GPUBuffer initialized with AudioLatentData.\n\t*/\n\tstatic createGpuBuffer(device, data) {\n\t\tconst rawFloats = data ? AudioLatentEngine.packBufferData(data) : new Float32Array(NUM_BINS + 4);\n\t\tconst buffer = device.createBuffer({\n\t\t\tlabel: \"AudioLatentBuffer\",\n\t\t\tsize: AUDIO_LATENT_BUFFER_SIZE,\n\t\t\tusage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST,\n\t\t\tmappedAtCreation: true\n\t\t});\n\t\tnew Float32Array(buffer.getMappedRange()).set(rawFloats);\n\t\tbuffer.unmap();\n\t\treturn buffer;\n\t}\n\t/**\n\t* Updates an existing WebGPU AudioLatentBuffer with new frame data.\n\t*/\n\tstatic updateGpuBuffer(device, buffer, data) {\n\t\tconst rawFloats = AudioLatentEngine.packBufferData(data);\n\t\tdevice.queue.writeBuffer(buffer, 0, rawFloats);\n\t}\n};\n/**\n* Cache for a full audio track timeline providing O(1) frame lookup during video rendering.\n*/\nvar AudioLatentTrackCache = class {\n\tframes = [];\n\tgpuBuffers = /* @__PURE__ */ new WeakMap();\n\tconstructor(channels, sampleRate, fps, totalFrames) {\n\t\tthis.channels = channels;\n\t\tthis.sampleRate = sampleRate;\n\t\tthis.fps = fps;\n\t\tthis.totalFrames = totalFrames;\n\t\tconst engine = new AudioLatentEngine();\n\t\tconst sRate = sampleRate || 48e3;\n\t\tconst safeFps = fps || 30;\n\t\tconst channelLength = channels[0]?.length ?? 0;\n\t\tconst fallbackFrames = Math.max(10, Math.ceil(channelLength / sRate * safeFps) + 10);\n\t\tconst safeTotal = typeof totalFrames === \"number\" && Number.isFinite(totalFrames) && totalFrames > 0 ? Math.round(totalFrames) : fallbackFrames;\n\t\tthis.frames = new Array(safeTotal);\n\t\tfor (let f = 0; f < safeTotal; f++) {\n\t\t\tconst timeSec = f / safeFps;\n\t\t\tthis.frames[f] = engine.extractAtTime(channels, sRate, timeSec);\n\t\t}\n\t}\n\tgetFrameData(frame) {\n\t\tconst clampedFrame = Math.max(0, Math.min(this.totalFrames - 1, Math.round(frame)));\n\t\treturn this.frames[clampedFrame] ?? {\n\t\t\tfftBins: new Float32Array(NUM_BINS),\n\t\t\tbassEnergy: 0,\n\t\t\tdrumTransient: 0,\n\t\t\tvocalEnergy: 0,\n\t\t\ttimeMs: clampedFrame / this.fps * 1e3\n\t\t};\n\t}\n\tgetGpuBuffer(device, frame) {\n\t\tlet deviceMap = this.gpuBuffers.get(device);\n\t\tif (!deviceMap) {\n\t\t\tdeviceMap = /* @__PURE__ */ new Map();\n\t\t\tthis.gpuBuffers.set(device, deviceMap);\n\t\t}\n\t\tconst clampedFrame = Math.max(0, Math.min(this.totalFrames - 1, Math.round(frame)));\n\t\tlet buffer = deviceMap.get(clampedFrame);\n\t\tif (!buffer) {\n\t\t\tconst data = this.getFrameData(clampedFrame);\n\t\t\tbuffer = AudioLatentEngine.createGpuBuffer(device, data);\n\t\t\tdeviceMap.set(clampedFrame, buffer);\n\t\t}\n\t\treturn buffer;\n\t}\n};\n\n//#endregion\n//#region src/shader-store.ts\nvar ShaderStore = class {\n\tstore = /* @__PURE__ */ new Map();\n\tgetCacheKey(nodeId, renderId) {\n\t\treturn `${renderId ?? \"global\"}:${nodeId}`;\n\t}\n\tregister(nodeId, shader, renderId) {\n\t\tthis.store.set(this.getCacheKey(nodeId, renderId), shader);\n\t\tif (renderId) this.store.set(this.getCacheKey(nodeId, void 0), shader);\n\t}\n\tget(nodeId, renderId) {\n\t\tconst res = this.store.get(this.getCacheKey(nodeId, renderId));\n\t\tif (!res && renderId) return this.store.get(this.getCacheKey(nodeId, void 0));\n\t\treturn res;\n\t}\n\tdelete(nodeId, renderId) {\n\t\tthis.store.delete(this.getCacheKey(nodeId, renderId));\n\t}\n\tclear(renderId) {\n\t\tconst prefix = `${renderId}:`;\n\t\tfor (const key of this.store.keys()) if (key.startsWith(prefix)) this.store.delete(key);\n\t}\n\tregisterSignalsFromComposition(renderId, virtualMedia) {\n\t\tconst traverse = (node) => {\n\t\t\tif (!node) return;\n\t\t\tconst op = node.operation;\n\t\t\tif (op && op.inputs) {\n\t\t\t\tfor (const inputEntry of Object.values(op.inputs)) if (inputEntry && inputEntry.connectionValid && inputEntry.outputItem && inputEntry.outputItem.type === \"Signal\") {\n\t\t\t\t\tconst sd = inputEntry.outputItem.data;\n\t\t\t\t\tif (sd && sd.nodeId) {\n\t\t\t\t\t\tconst customWGSL = sd.customWGSL || sd.wgsl;\n\t\t\t\t\t\tif (customWGSL) this.register(sd.nodeId, {\n\t\t\t\t\t\t\twgsl: customWGSL,\n\t\t\t\t\t\t\tname: sd.signalFnName || sd.name || `signal_${sd.nodeId.replace(/[^a-zA-Z0-9]/g, \"_\")}`,\n\t\t\t\t\t\t\toutputType: sd.fnOutputType ?? sd.outputType ?? \"f32\",\n\t\t\t\t\t\t\tfnParams: sd.fnParams ?? []\n\t\t\t\t\t\t}, renderId);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (node.children) for (const child of node.children) traverse(child);\n\t\t};\n\t\ttraverse(virtualMedia);\n\t}\n};\nconst shaderStore = new ShaderStore();\n\n//#endregion\n//#region src/audio/webgpu-audio-processor.ts\nconst yieldToMain = () => {\n\tif (typeof window === \"undefined\") return Promise.resolve();\n\tconst sched = globalThis.scheduler;\n\treturn typeof sched?.yield === \"function\" ? sched.yield() : new Promise((resolve$1) => setTimeout(resolve$1, 0));\n};\nvar WebGPUAudioProcessor = class WebGPUAudioProcessor {\n\tstatic devicePipelineCache = /* @__PURE__ */ new WeakMap();\n\tstatic getDeviceCache(device) {\n\t\tlet cache = WebGPUAudioProcessor.devicePipelineCache.get(device);\n\t\tif (!cache) {\n\t\t\tcache = /* @__PURE__ */ new Map();\n\t\t\tWebGPUAudioProcessor.devicePipelineCache.set(device, cache);\n\t\t}\n\t\treturn cache;\n\t}\n\tstatic getCache(device, renderId, nodeId, activeSignalsKey = \"\", stateFloatCount = 1) {\n\t\tconst cacheKey = `${renderId ?? \"global\"}_${nodeId}_${activeSignalsKey}_${stateFloatCount}`;\n\t\treturn WebGPUAudioProcessor.devicePipelineCache.get(device)?.get(cacheKey);\n\t}\n\tstatic clearCache(renderId, device) {\n\t\tif (!device) return;\n\t\tconst cache = WebGPUAudioProcessor.devicePipelineCache.get(device);\n\t\tif (!cache) return;\n\t\tconst prefix = `${renderId}_`;\n\t\tfor (const [key, cached] of cache.entries()) if (key.startsWith(prefix)) {\n\t\t\tcached.stateBuffer.destroy();\n\t\t\tcached.inputBuffer?.destroy();\n\t\t\tcached.outputBuffer?.destroy();\n\t\t\tcached.uniformBuffer?.destroy();\n\t\t\tcache.delete(key);\n\t\t}\n\t}\n\tstatic async process(device, nodeId, channels, _sampleRate, virtualMedia, frame, fps, shaderTemplate, getUniforms, uniformsFloatCount, stateFloatCount = 1, renderId, isStatic = false, elapsedMs, durationMs, initialState, stateUpdate, paramOrder) {\n\t\tconst numChannels = channels.length;\n\t\tif (numChannels === 0) return;\n\t\tconst numSamples = channels[0].length;\n\t\tif (numSamples === 0) return;\n\t\tconst elapsedSeconds = elapsedMs !== void 0 ? elapsedMs / 1e3 : frame / fps;\n\t\tconst durationSeconds = durationMs !== void 0 ? durationMs / 1e3 : 0;\n\t\tconst activeBindings = [];\n\t\tlet makeupGainModulation = \"\";\n\t\tlet customSignalWGSL = \"\";\n\t\tconst signalBuffers = [];\n\t\tconst signalBufferMap = /* @__PURE__ */ new Map();\n\t\tconst op = virtualMedia.operation;\n\t\tif (op?.inputs) {\n\t\t\tfor (const inputEntry of Object.values(op.inputs)) if (inputEntry?.connectionValid && inputEntry.outputItem && inputEntry.outputItem.type === \"Signal\") {\n\t\t\t\tconst sd = inputEntry.outputItem.data;\n\t\t\t\tif (sd) await signalRegistry.ensureAudioSourcesExtracted(device, sd, fps, renderId);\n\t\t\t}\n\t\t\tfor (const [key, val] of Object.entries(op)) if (key.endsWith(\"HandleId\") && val) {\n\t\t\t\tconst handleId = val;\n\t\t\t\tconst inputEntry = op.inputs[handleId];\n\t\t\t\tif (inputEntry?.connectionValid && inputEntry.outputItem && inputEntry.outputItem.type === \"Signal\") {\n\t\t\t\t\tconst sd = inputEntry.outputItem.data;\n\t\t\t\t\tif (sd) {\n\t\t\t\t\t\tconst paramName = key.replace(\"HandleId\", \"\");\n\t\t\t\t\t\tif (isStatic) {\n\t\t\t\t\t\t\tactiveBindings.push({\n\t\t\t\t\t\t\t\tparameterName: paramName,\n\t\t\t\t\t\t\t\tsignalNodeId: sd.nodeId ?? \"sig\",\n\t\t\t\t\t\t\t\tsignalFnName: sd.signalFnName ?? sd.name ?? \"sig_fn\"\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tconst commandEncoder = device.createCommandEncoder();\n\t\t\t\t\t\t\tconst buf = signalRegistry.getOrCreate1DBuffer(device, commandEncoder, sd.nodeId ?? \"sig\", elapsedSeconds, durationSeconds, sd, numSamples, _sampleRate, renderId, frame, fps);\n\t\t\t\t\t\t\tdevice.queue.submit([commandEncoder.finish()]);\n\t\t\t\t\t\t\tsignalBufferMap.set(paramName, buf);\n\t\t\t\t\t\t\tif (!paramOrder) signalBuffers.push(buf);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tconst signalNodeId = sd.nodeId;\n\t\t\t\t\t\t\tif (signalNodeId) {\n\t\t\t\t\t\t\t\tconst registered = shaderStore.get(signalNodeId, renderId);\n\t\t\t\t\t\t\t\tif (registered) {\n\t\t\t\t\t\t\t\t\tactiveBindings.push({\n\t\t\t\t\t\t\t\t\t\tparameterName: paramName,\n\t\t\t\t\t\t\t\t\t\tsignalNodeId,\n\t\t\t\t\t\t\t\t\t\tsignalFnName: registered.name\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\tcustomSignalWGSL += `\\n${registered.wgsl}`;\n\t\t\t\t\t\t\t\t\tconst paramVals = [];\n\t\t\t\t\t\t\t\t\tfor (const p of registered.fnParams) {\n\t\t\t\t\t\t\t\t\t\tconst v = p.defaultValue;\n\t\t\t\t\t\t\t\t\t\tparamVals.push(v % 1 === 0 ? `${v.toFixed(1)}f` : `${v}f`);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tconst args = [\n\t\t\t\t\t\t\t\t\t\t\"t\",\n\t\t\t\t\t\t\t\t\t\t\"0.0\",\n\t\t\t\t\t\t\t\t\t\t\"0.0\",\n\t\t\t\t\t\t\t\t\t\t\"0.0\",\n\t\t\t\t\t\t\t\t\t\t\"index\",\n\t\t\t\t\t\t\t\t\t\t\"numSamples\",\n\t\t\t\t\t\t\t\t\t\t\"frame\",\n\t\t\t\t\t\t\t\t\t\t\"vec4<f32>(0.0)\",\n\t\t\t\t\t\t\t\t\t\t`(${elapsedSeconds.toFixed(6)}f + f32(index) / u.sampleRate)`,\n\t\t\t\t\t\t\t\t\t\t`${durationSeconds.toFixed(6)}f`,\n\t\t\t\t\t\t\t\t\t\t...paramVals\n\t\t\t\t\t\t\t\t\t];\n\t\t\t\t\t\t\t\t\tif (paramName === \"makeupGain\") makeupGainModulation += `\n\t\t\tlet sigVal_${signalNodeId} = ${registered.name}(${args.join(\", \")});\n\t\t\tdynamicMakeupGain = dynamicMakeupGain + sigVal_${signalNodeId};\n\t\t\t\t\t\t\t\t\t\t\t`;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tconst fullShaderCode = shaderTemplate(isStatic ? {\n\t\t\tcustomSignalWGSL: \"\",\n\t\t\tmakeupGainModulation: \"\"\n\t\t} : {\n\t\t\tcustomSignalWGSL,\n\t\t\tmakeupGainModulation\n\t\t});\n\t\tconst hasBinding = (idx) => (/* @__PURE__ */ new RegExp(`@binding\\\\s*\\\\(\\\\s*${idx}\\\\s*\\\\)`)).test(fullShaderCode);\n\t\tconst createdBuffers = [];\n\t\tif (isStatic && paramOrder && paramOrder.length > 0) for (const p of paramOrder) {\n\t\t\tif (signalBufferMap.has(p)) continue;\n\t\t\tconst directVal = op?.[p] ?? (op?.signals)?.[p];\n\t\t\tif (isSignal(directVal)) {\n\t\t\t\tconst signalData = new Float32Array(numSamples);\n\t\t\t\tconst durationSec = durationSeconds > 0 ? durationSeconds : numSamples / _sampleRate;\n\t\t\t\tfor (let s = 0; s < numSamples; s++) {\n\t\t\t\t\tconst t = elapsedSeconds + s / _sampleRate;\n\t\t\t\t\tconst f = t * fps;\n\t\t\t\t\tconst progress = durationSec > 0 ? t / durationSec : 0;\n\t\t\t\t\tsignalData[s] = Number(directVal.get({\n\t\t\t\t\t\tframe: f,\n\t\t\t\t\t\tfps,\n\t\t\t\t\t\ttime: t,\n\t\t\t\t\t\tduration: durationSec * fps,\n\t\t\t\t\t\tdurationMs: durationSec * 1e3,\n\t\t\t\t\t\tprogress,\n\t\t\t\t\t\tdeltaTime: 1 / _sampleRate\n\t\t\t\t\t})) || 0;\n\t\t\t\t}\n\t\t\t\tconst buf = device.createBuffer({\n\t\t\t\t\tsize: Math.max(16, Math.ceil(signalData.byteLength / 16) * 16),\n\t\t\t\t\tusage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST,\n\t\t\t\t\tmappedAtCreation: true,\n\t\t\t\t\tlabel: `audio_direct_signal_${nodeId}_${p}`\n\t\t\t\t});\n\t\t\t\tnew Float32Array(buf.getMappedRange()).set(signalData);\n\t\t\t\tbuf.unmap();\n\t\t\t\tsignalBufferMap.set(p, buf);\n\t\t\t\tcreatedBuffers.push(buf);\n\t\t\t\tactiveBindings.push({\n\t\t\t\t\tparameterName: p,\n\t\t\t\t\tsignalNodeId: `direct_${p}`,\n\t\t\t\t\tsignalFnName: \"direct_sig\"\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\tif (isStatic) {\n\t\t\tif (paramOrder && paramOrder.length > 0) for (let i = 0; i < paramOrder.length; i++) {\n\t\t\t\tconst p = paramOrder[i];\n\t\t\t\tconst buf = signalBufferMap.get(p);\n\t\t\t\tif (buf) signalBuffers.push(buf);\n\t\t\t\telse if (hasBinding(4 + i)) signalBuffers.push(signalRegistry.getDummyBuffer(device));\n\t\t\t}\n\t\t\telse if (signalBuffers.length === 0 && hasBinding(4)) signalBuffers.push(signalRegistry.getDummyBuffer(device));\n\t\t}\n\t\tconst activeSignalsKey = activeBindings.map((b) => `${b.parameterName}:${b.signalNodeId}`).join(\",\");\n\t\tconst cacheKey = `${renderId ?? \"global\"}_${nodeId}_${activeSignalsKey}_${stateFloatCount}`;\n\t\tconst deviceCache = WebGPUAudioProcessor.getDeviceCache(device);\n\t\tlet cached = deviceCache.get(cacheKey);\n\t\tif (!cached) {\n\t\t\tconst shaderModule = device.createShaderModule({\n\t\t\t\tlabel: `audio_shader_${nodeId}.wgsl`,\n\t\t\t\tcode: fullShaderCode\n\t\t\t});\n\t\t\tconst pipeline = device.createComputePipeline({\n\t\t\t\tlabel: `AudioComputePipeline_${nodeId}`,\n\t\t\t\tlayout: \"auto\",\n\t\t\t\tcompute: {\n\t\t\t\t\tmodule: shaderModule,\n\t\t\t\t\tentryPoint: \"main\"\n\t\t\t\t}\n\t\t\t});\n\t\t\tconst stateBuffer = device.createBuffer({\n\t\t\t\tsize: stateFloatCount * 4,\n\t\t\t\tusage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST,\n\t\t\t\tlabel: `audio_state_${nodeId}`\n\t\t\t});\n\t\t\tconst initialData = new Float32Array(stateFloatCount);\n\t\t\tif (initialState) initialData.set(initialState, 0);\n\t\t\tif (stateUpdate) initialData.set(stateUpdate, 0);\n\t\t\tdevice.queue.writeBuffer(stateBuffer, 0, initialData);\n\t\t\tcached = {\n\t\t\t\tpipeline,\n\t\t\t\tstateBuffer,\n\t\t\t\tactiveSignalsKey\n\t\t\t};\n\t\t\tdeviceCache.set(cacheKey, cached);\n\t\t} else if (stateUpdate) device.queue.writeBuffer(cached.stateBuffer, 0, stateUpdate);\n\t\tconst CHUNK_SIZE = 65536;\n\t\ttry {\n\t\t\tfor (let offset = 0; offset < numSamples; offset += CHUNK_SIZE) {\n\t\t\t\tconst chunkSamples = Math.min(CHUNK_SIZE, numSamples - offset);\n\t\t\t\tconst canReuse = cached.inputBuffer && cached.outputBuffer && cached.uniformBuffer && cached.allocatedSamples && cached.allocatedSamples >= chunkSamples && cached.allocatedChannels && cached.allocatedChannels >= numChannels && cached.allocatedUniformsFloatCount && cached.allocatedUniformsFloatCount >= uniformsFloatCount;\n\t\t\t\tlet inputBuffer;\n\t\t\t\tlet outputBuffer;\n\t\t\t\tlet uniformBuffer;\n\t\t\t\tif (canReuse) {\n\t\t\t\t\tinputBuffer = cached.inputBuffer;\n\t\t\t\t\toutputBuffer = cached.outputBuffer;\n\t\t\t\t\tuniformBuffer = cached.uniformBuffer;\n\t\t\t\t} else {\n\t\t\t\t\tconst allocSamples = Math.max(chunkSamples, CHUNK_SIZE);\n\t\t\t\t\tconst allocChannels = numChannels;\n\t\t\t\t\tconst allocUniforms = uniformsFloatCount;\n\t\t\t\t\tconst freshInput = device.createBuffer({\n\t\t\t\t\t\tsize: allocChannels * allocSamples * 4,\n\t\t\t\t\t\tusage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST,\n\t\t\t\t\t\tlabel: `audio_input_temp_${nodeId}_chunk_${offset}`\n\t\t\t\t\t});\n\t\t\t\t\tconst freshOutput = device.createBuffer({\n\t\t\t\t\t\tsize: allocChannels * allocSamples * 4,\n\t\t\t\t\t\tusage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC,\n\t\t\t\t\t\tlabel: `audio_output_temp_${nodeId}_chunk_${offset}`\n\t\t\t\t\t});\n\t\t\t\t\tconst freshUniform = device.createBuffer({\n\t\t\t\t\t\tsize: allocUniforms * 4,\n\t\t\t\t\t\tusage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,\n\t\t\t\t\t\tlabel: `audio_uniforms_temp_${nodeId}_chunk_${offset}`\n\t\t\t\t\t});\n\t\t\t\t\tinputBuffer = freshInput;\n\t\t\t\t\toutputBuffer = freshOutput;\n\t\t\t\t\tuniformBuffer = freshUniform;\n\t\t\t\t\tcached.inputBuffer?.destroy();\n\t\t\t\t\tcached.outputBuffer?.destroy();\n\t\t\t\t\tcached.uniformBuffer?.destroy();\n\t\t\t\t\tcached.inputBuffer = freshInput;\n\t\t\t\t\tcached.outputBuffer = freshOutput;\n\t\t\t\t\tcached.uniformBuffer = freshUniform;\n\t\t\t\t\tcached.allocatedSamples = allocSamples;\n\t\t\t\t\tcached.allocatedChannels = allocChannels;\n\t\t\t\t\tcached.allocatedUniformsFloatCount = allocUniforms;\n\t\t\t\t}\n\t\t\t\tconst stagingBuffer = device.createBuffer({\n\t\t\t\t\tsize: numChannels * chunkSamples * 4,\n\t\t\t\t\tusage: GPUBufferUsage.MAP_READ | GPUBufferUsage.COPY_DST,\n\t\t\t\t\tlabel: `audio_staging_temp_${nodeId}_chunk_${offset}`\n\t\t\t\t});\n\t\t\t\tconst entries = [\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 0,\n\t\t\t\t\t\tresource: { buffer: uniformBuffer }\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 1,\n\t\t\t\t\t\tresource: { buffer: inputBuffer }\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 2,\n\t\t\t\t\t\tresource: { buffer: outputBuffer }\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 3,\n\t\t\t\t\t\tresource: { buffer: cached.stateBuffer }\n\t\t\t\t\t}\n\t\t\t\t];\n\t\t\t\tif (isStatic) for (let i = 0; i < signalBuffers.length; i++) {\n\t\t\t\t\tconst bindingIndex = 4 + i;\n\t\t\t\t\tif (hasBinding(bindingIndex)) {\n\t\t\t\t\t\tconst sigBuf = signalBuffers[i];\n\t\t\t\t\t\tif (sigBuf.size >= (offset + chunkSamples) * 4) entries.push({\n\t\t\t\t\t\t\tbinding: bindingIndex,\n\t\t\t\t\t\t\tresource: {\n\t\t\t\t\t\t\t\tbuffer: sigBuf,\n\t\t\t\t\t\t\t\toffset: offset * 4,\n\t\t\t\t\t\t\t\tsize: chunkSamples * 4\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t\telse entries.push({\n\t\t\t\t\t\t\tbinding: bindingIndex,\n\t\t\t\t\t\t\tresource: {\n\t\t\t\t\t\t\t\tbuffer: sigBuf,\n\t\t\t\t\t\t\t\toffset: 0,\n\t\t\t\t\t\t\t\tsize: sigBuf.size\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tconst bindGroup = device.createBindGroup({\n\t\t\t\t\tlayout: cached.pipeline.getBindGroupLayout(0),\n\t\t\t\t\tentries\n\t\t\t\t});\n\t\t\t\tconst flatInput = new Float32Array(numChannels * chunkSamples);\n\t\t\t\tfor (let c = 0; c < numChannels; c++) flatInput.set(channels[c].subarray(offset, offset + chunkSamples), c * chunkSamples);\n\t\t\t\tdevice.queue.writeBuffer(inputBuffer, 0, flatInput);\n\t\t\t\tconst uniforms = getUniforms(frame / fps + offset / _sampleRate);\n\t\t\t\tlet numSamplesIndex = -1;\n\t\t\t\tfor (let i = uniforms.length - 2; i >= 0; i--) if (uniforms[i] === numSamples && uniforms[i + 1] === numChannels) {\n\t\t\t\t\tnumSamplesIndex = i;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (numSamplesIndex === -1) numSamplesIndex = uniforms.indexOf(numSamples);\n\t\t\t\tif (numSamplesIndex !== -1) uniforms[numSamplesIndex] = chunkSamples;\n\t\t\t\tdevice.queue.writeBuffer(uniformBuffer, 0, new Float32Array(uniforms));\n\t\t\t\tconst commandEncoder = device.createCommandEncoder({ label: `audio_encoder_${nodeId}_chunk_${offset}` });\n\t\t\t\tconst passEncoder = commandEncoder.beginComputePass({ label: `audio_pass_${nodeId}_chunk_${offset}` });\n\t\t\t\tpassEncoder.setPipeline(cached.pipeline);\n\t\t\t\tpassEncoder.setBindGroup(0, bindGroup);\n\t\t\t\tpassEncoder.dispatchWorkgroups(1);\n\t\t\t\tpassEncoder.end();\n\t\t\t\tcommandEncoder.copyBufferToBuffer(outputBuffer, 0, stagingBuffer, 0, numChannels * chunkSamples * 4);\n\t\t\t\tdevice.queue.submit([commandEncoder.finish()]);\n\t\t\t\tawait stagingBuffer.mapAsync(GPUMapMode.READ);\n\t\t\t\tconst mappedRange = new Float32Array(stagingBuffer.getMappedRange());\n\t\t\t\tfor (let c = 0; c < numChannels; c++) channels[c].set(mappedRange.subarray(c * chunkSamples, (c + 1) * chunkSamples), offset);\n\t\t\t\tstagingBuffer.unmap();\n\t\t\t\tawait yieldToMain();\n\t\t\t}\n\t\t} finally {\n\t\t\tfor (const b of createdBuffers) b.destroy();\n\t\t}\n\t}\n};\n\n//#endregion\n//#region src/color.ts\n/**\n* Parse any CSS color string into a normalized {r,g,b,a} Color\n* with channel values in [0,1].\n*\n* Supports:\n* - Hex: #RGB, #RGBA, #RRGGBB, #RRGGBBAA\n* - Functional: rgb()/rgba(), hsl()/hsla(), oklch(), oklab() (comma or space syntax)\n* - Named: black, white, red, green, blue, yellow, transparent, etc.\n* - Color objects pass through unchanged.\n*\n* Returns `{ r: 0, g: 0, b: 0, a: 0 }` (transparent black) for\n* null/undefined/unrecognised input.\n*/\nfunction parseColor(color) {\n\tif (color == null) return {\n\t\tr: 0,\n\t\tg: 0,\n\t\tb: 0,\n\t\ta: 0\n\t};\n\tif (typeof color !== \"string\") return color;\n\tconst trimmed = color.trim();\n\tif (trimmed.length === 0) return {\n\t\tr: 0,\n\t\tg: 0,\n\t\tb: 0,\n\t\ta: 0\n\t};\n\tconst parsed = parseCssColor(trimmed);\n\tif (parsed) return {\n\t\tr: parsed[0],\n\t\tg: parsed[1],\n\t\tb: parsed[2],\n\t\ta: parsed[3]\n\t};\n\treturn {\n\t\tr: 0,\n\t\tg: 0,\n\t\tb: 0,\n\t\ta: 0\n\t};\n}\n/**\n* Premultiplies an un-premultiplied (straight) RGBA Color by its alpha channel.\n*/\nfunction premultiplyColor(color) {\n\treturn {\n\t\tr: color.r * color.a,\n\t\tg: color.g * color.a,\n\t\tb: color.b * color.a,\n\t\ta: color.a\n\t};\n}\n/**\n* Premultiplies straight-alpha RGBA8 pixels in place and returns them.\n*\n* Every 2D pipeline blends with premultiplied \"over\", so straight pixels\n* (decoded PNGs, `getImageData`, WebCodecs RGBA) must pass through here\n* before `writeTexture`. Otherwise RGB under transparent pixels is added\n* onto the destination.\n*/\nfunction premultiplyPixels(pixels) {\n\tfor (let i = 0; i < pixels.length; i += 4) {\n\t\tconst a = pixels[i + 3];\n\t\tif (a === 255) continue;\n\t\tpixels[i] = (pixels[i] * a + 127) / 255 | 0;\n\t\tpixels[i + 1] = (pixels[i + 1] * a + 127) / 255 | 0;\n\t\tpixels[i + 2] = (pixels[i + 2] * a + 127) / 255 | 0;\n\t}\n\treturn pixels;\n}\n\n//#endregion\n//#region src/device.ts\nlet deviceInstance = null;\nlet loadPromise = null;\nlet adapterInfo = null;\nconst SOFTWARE_ADAPTER = /llvmpipe|lavapipe|softpipe|swiftshader|\\bwarp\\b|software/i;\nfunction readAdapterInfo(adapter) {\n\tconst info = adapter.info ?? {};\n\tconst out = {\n\t\tvendor: String(info.vendor ?? \"\"),\n\t\tarchitecture: String(info.architecture ?? \"\"),\n\t\tdevice: String(info.device ?? \"\"),\n\t\tdescription: String(info.description ?? \"\")\n\t};\n\tconst software = info.isFallbackAdapter === true || adapter.isFallbackAdapter === true || SOFTWARE_ADAPTER.test(`${out.vendor} ${out.architecture} ${out.device} ${out.description}`);\n\treturn {\n\t\t...out,\n\t\tsoftware\n\t};\n}\n/** Initialises the rendering device if needed and describes its adapter. */\nasync function describeGpu() {\n\tawait ensureDevice();\n\tif (!adapterInfo) throw new Error(\"WebGPU adapter unknown\");\n\treturn adapterInfo;\n}\nasync function acquireDevice(opts) {\n\tif (typeof process !== \"undefined\" && !!process.versions?.node && !globalThis.navigator?.gpu) {\n\t\tconst { create, globals } = await import(\n\t\t\t/* webpackIgnore: true */\n\t\t\t\"webgpu\"\n);\n\t\tObject.assign(globalThis, globals);\n\t\tconst flags = [];\n\t\tif (typeof globalThis.navigator === \"undefined\") globalThis.navigator = { gpu: create(flags) };\n\t\telse Object.defineProperty(globalThis.navigator, \"gpu\", {\n\t\t\tvalue: create(flags),\n\t\t\tconfigurable: true,\n\t\t\twritable: true\n\t\t});\n\t}\n\tconst gpu = globalThis.navigator.gpu;\n\tconst adapter = await gpu.requestAdapter({\n\t\tpowerPreference: \"high-performance\",\n\t\t...opts\n\t}) ?? (opts?.forceFallbackAdapter ? null : await gpu.requestAdapter({\n\t\t...opts,\n\t\tforceFallbackAdapter: true\n\t}));\n\tif (!adapter) throw new Error(\"WebGPU not available\");\n\tadapterInfo = readAdapterInfo(adapter);\n\tconst requiredFeatures = [];\n\tif (adapter.features.has(\"float32-filterable\")) requiredFeatures.push(\"float32-filterable\");\n\tconst requiredLimits = {};\n\tif (adapter.limits && Number.isInteger(adapter.limits.maxTextureDimension2D)) requiredLimits.maxTextureDimension2D = Math.min(8192, adapter.limits.maxTextureDimension2D);\n\tif (adapter.limits && Number.isInteger(adapter.limits.maxStorageBuffersPerShaderStage)) requiredLimits.maxStorageBuffersPerShaderStage = Math.min(16, adapter.limits.maxStorageBuffersPerShaderStage);\n\tif (adapter.limits && Number.isInteger(adapter.limits.maxStorageBuffersPerPipelineLayout)) requiredLimits.maxStorageBuffersPerPipelineLayout = Math.min(16, adapter.limits.maxStorageBuffersPerPipelineLayout);\n\treturn adapter.requestDevice({\n\t\trequiredFeatures,\n\t\trequiredLimits\n\t});\n}\nfunction resetDeviceInstance() {\n\tdeviceInstance = null;\n\tloadPromise = null;\n}\nconst ensureDevice = async (opts) => {\n\tif (deviceInstance) return deviceInstance;\n\tif (loadPromise) return loadPromise;\n\tloadPromise = (async () => {\n\t\tconst dev = await acquireDevice(opts);\n\t\tdeviceInstance = dev;\n\t\tdev.lost.then((lostInfo) => {\n\t\t\tif (lostInfo.reason !== \"destroyed\") resetDeviceInstance();\n\t\t});\n\t\treturn dev;\n\t})();\n\treturn loadPromise;\n};\nconst getDevice = () => {\n\tif (!deviceInstance) throw new Error(\"Device not loaded. Call ensureDevice() first!\");\n\treturn deviceInstance;\n};\n\n//#endregion\n//#region src/headless/dom-shims.ts\n/**\n* Minimal DOM stand-ins for libraries (lottie) that expect a browser page when\n* running headless: a 1920×1080 placeholder element, canvas element\n* properties, and an inert IntersectionObserver.\n*/\nfunction createHeadlessDOMElement() {\n\treturn {\n\t\tclientWidth: 1920,\n\t\tclientHeight: 1080,\n\t\tgetBoundingClientRect: () => ({\n\t\t\tx: 0,\n\t\t\ty: 0,\n\t\t\tleft: 0,\n\t\t\ttop: 0,\n\t\t\tright: 1920,\n\t\t\tbottom: 1080,\n\t\t\twidth: 1920,\n\t\t\theight: 1080\n\t\t}),\n\t\tstyle: {},\n\t\tappendChild: () => {},\n\t\tremoveChild: () => {},\n\t\taddEventListener: () => {},\n\t\tremoveEventListener: () => {},\n\t\tgetAttribute: () => null\n\t};\n}\n/** Gives a canvas class the element API lottie reads, where it's missing. */\nfunction patchCanvasPrototypeForDOM(proto, parentElement) {\n\tif (typeof proto.getBoundingClientRect === \"undefined\") proto.getBoundingClientRect = function() {\n\t\tconst width = this.width || 512;\n\t\tconst height = this.height || 512;\n\t\treturn {\n\t\t\tx: 0,\n\t\t\ty: 0,\n\t\t\tleft: 0,\n\t\t\ttop: 0,\n\t\t\tright: width,\n\t\t\tbottom: height,\n\t\t\twidth,\n\t\t\theight\n\t\t};\n\t};\n\tif (!(\"style\" in proto)) Object.defineProperty(proto, \"style\", {\n\t\tget() {\n\t\t\tthis._style ??= {};\n\t\t\treturn this._style;\n\t\t},\n\t\tconfigurable: true\n\t});\n\tif (!(\"clientWidth\" in proto)) Object.defineProperty(proto, \"clientWidth\", {\n\t\tget() {\n\t\t\treturn this.width || 512;\n\t\t},\n\t\tconfigurable: true\n\t});\n\tif (!(\"clientHeight\" in proto)) Object.defineProperty(proto, \"clientHeight\", {\n\t\tget() {\n\t\t\treturn this.height || 512;\n\t\t},\n\t\tconfigurable: true\n\t});\n\tif (!(\"parentElement\" in proto)) Object.defineProperty(proto, \"parentElement\", {\n\t\tget() {\n\t\t\treturn parentElement;\n\t\t},\n\t\tconfigurable: true\n\t});\n\tif (typeof proto.addEventListener === \"undefined\") proto.addEventListener = () => {};\n\tif (typeof proto.removeEventListener === \"undefined\") proto.removeEventListener = () => {};\n\tif (typeof proto.getAttribute === \"undefined\") proto.getAttribute = () => null;\n}\nfunction installIntersectionObserverStub() {\n\tif (typeof globalThis.IntersectionObserver === \"undefined\") globalThis.IntersectionObserver = class IntersectionObserver {\n\t\tobserve() {}\n\t\tunobserve() {}\n\t\tdisconnect() {}\n\t};\n}\n\n//#endregion\n//#region src/debug-log.ts\n/** Debug output: shown only with LOG_LEVEL=debug or trace. */\nconst DEBUG_LOGS = typeof process !== \"undefined\" && /^(debug|trace)$/i.test(process.env?.LOG_LEVEL ?? \"\");\nfunction debugLog(...args) {\n\tif (DEBUG_LOGS) console.debug(...args);\n}\n\n//#endregion\n//#region src/headless/dom-matrix.ts\n/**\n* Headless DOMMatrix polyfill (2D subset).\n*\n* Installed onto `globalThis` when the runtime has no native DOMMatrix\n* (Node / headless WebGPU). Must mirror the native constructor surface the\n* renderers rely on — in particular the 2D array form\n* `new DOMMatrix([a, b, c, d, e, f])` that `toDOMMatrix` in the compositor\n* renderer uses to materialize pure `Matrix2D` values.\n*\n* (Regression: the array form was previously ignored, silently producing an\n* identity matrix and dropping every layer transform in headless renders.)\n*/\nvar HeadlessDOMMatrix = class HeadlessDOMMatrix {\n\ta = 1;\n\tb = 0;\n\tc = 0;\n\td = 1;\n\te = 0;\n\tf = 0;\n\tconstructor(init) {\n\t\tthis.a = 1;\n\t\tthis.b = 0;\n\t\tthis.c = 0;\n\t\tthis.d = 1;\n\t\tthis.e = 0;\n\t\tthis.f = 0;\n\t\tif (init instanceof HeadlessDOMMatrix) {\n\t\t\tthis.a = init.a;\n\t\t\tthis.b = init.b;\n\t\t\tthis.c = init.c;\n\t\t\tthis.d = init.d;\n\t\t\tthis.e = init.e;\n\t\t\tthis.f = init.f;\n\t\t} else if (Array.isArray(init)) {\n\t\t\tif (init.length === 6) {\n\t\t\t\tthis.a = init[0];\n\t\t\t\tthis.b = init[1];\n\t\t\t\tthis.c = init[2];\n\t\t\t\tthis.d = init[3];\n\t\t\t\tthis.e = init[4];\n\t\t\t\tthis.f = init[5];\n\t\t\t} else if (init.length === 16) {\n\t\t\t\tthis.a = init[0];\n\t\t\t\tthis.b = init[1];\n\t\t\t\tthis.c = init[4];\n\t\t\t\tthis.d = init[5];\n\t\t\t\tthis.e = init[12];\n\t\t\t\tthis.f = init[13];\n\t\t\t}\n\t\t} else if (init && typeof init === \"object\") {\n\t\t\tthis.a = init.a ?? 1;\n\t\t\tthis.b = init.b ?? 0;\n\t\t\tthis.c = init.c ?? 0;\n\t\t\tthis.d = init.d ?? 1;\n\t\t\tthis.e = init.e ?? 0;\n\t\t\tthis.f = init.f ?? 0;\n\t\t}\n\t}\n\tmultiply(other) {\n\t\tconst m = new HeadlessDOMMatrix();\n\t\tm.a = this.a * other.a + this.c * other.b;\n\t\tm.b = this.b * other.a + this.d * other.b;\n\t\tm.c = this.a * other.c + this.c * other.d;\n\t\tm.d = this.b * other.c + this.d * other.d;\n\t\tm.e = this.a * other.e + this.c * other.f + this.e;\n\t\tm.f = this.b * other.e + this.d * other.f + this.f;\n\t\treturn m;\n\t}\n\tinverse() {\n\t\tconst det = this.a * this.d - this.b * this.c;\n\t\tif (det === 0) throw new Error(\"Matrix is not invertible\");\n\t\tconst m = new HeadlessDOMMatrix();\n\t\tm.a = this.d / det;\n\t\tm.b = -this.b / det;\n\t\tm.c = -this.c / det;\n\t\tm.d = this.a / det;\n\t\tm.e = (this.c * this.f - this.d * this.e) / det;\n\t\tm.f = (this.b * this.e - this.a * this.f) / det;\n\t\treturn m;\n\t}\n\ttransformPoint(point) {\n\t\treturn {\n\t\t\tx: point.x * this.a + point.y * this.c + this.e,\n\t\t\ty: point.x * this.b + point.y * this.d + this.f\n\t\t};\n\t}\n\ttranslate(x, y) {\n\t\tconst m = new HeadlessDOMMatrix();\n\t\tm.e = x;\n\t\tm.f = y;\n\t\treturn this.multiply(m);\n\t}\n\tscale(sx, sy) {\n\t\tconst m = new HeadlessDOMMatrix();\n\t\tm.a = sx;\n\t\tm.d = sy ?? sx;\n\t\treturn this.multiply(m);\n\t}\n\trotate(angle) {\n\t\tconst rad = angle * Math.PI / 180;\n\t\tconst cos = Math.cos(rad);\n\t\tconst sin = Math.sin(rad);\n\t\tconst m = new HeadlessDOMMatrix();\n\t\tm.a = cos;\n\t\tm.b = sin;\n\t\tm.c = -sin;\n\t\tm.d = cos;\n\t\treturn this.multiply(m);\n\t}\n};\n/** Installs DOMMatrix / DOMPoint where the runtime (Node) lacks them. */\nfunction installDOMGeometryGlobals() {\n\tconst domObj = globalThis;\n\tif (typeof domObj.DOMMatrix === \"undefined\") domObj.DOMMatrix = HeadlessDOMMatrix;\n\tif (typeof domObj.DOMPoint === \"undefined\") domObj.DOMPoint = class DOMPoint$1 {\n\t\tconstructor(x = 0, y = 0, z = 0, w = 1) {\n\t\t\tthis.x = x;\n\t\t\tthis.y = y;\n\t\t\tthis.z = z;\n\t\t\tthis.w = w;\n\t\t}\n\t\tstatic fromPoint(other) {\n\t\t\treturn new DOMPoint$1(other.x ?? 0, other.y ?? 0, other.z ?? 0, other.w ?? 1);\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/headless/init.ts\nasync function initHeadlessWebGPU() {\n\tconst { create, globals } = await import(\n\t\t/* webpackIgnore: true */\n\t\t\"webgpu\"\n);\n\tfor (const [key, value] of Object.entries(globals)) {\n\t\tif (key === \"navigator\") continue;\n\t\ttry {\n\t\t\tglobalThis[key] = value;\n\t\t} catch (e) {\n\t\t\tObject.defineProperty(globalThis, key, {\n\t\t\t\tvalue,\n\t\t\t\tconfigurable: true,\n\t\t\t\tenumerable: true,\n\t\t\t\twritable: true\n\t\t\t});\n\t\t}\n\t}\n\tif (!globalThis.navigator?.gpu) {\n\t\tconst gpu = create([]);\n\t\tdebugLog(\"[webgpu] Created headless GPU\");\n\t\tif (!globalThis.navigator) try {\n\t\t\tglobalThis.navigator = { gpu };\n\t\t} catch (e) {\n\t\t\tObject.defineProperty(globalThis, \"navigator\", {\n\t\t\t\tvalue: { gpu },\n\t\t\t\tconfigurable: true,\n\t\t\t\tenumerable: true,\n\t\t\t\twritable: true\n\t\t\t});\n\t\t}\n\t\telse try {\n\t\t\tglobalThis.navigator.gpu = gpu;\n\t\t} catch (e) {\n\t\t\tObject.defineProperty(globalThis.navigator, \"gpu\", {\n\t\t\t\tvalue: gpu,\n\t\t\t\tconfigurable: true,\n\t\t\t\tenumerable: true,\n\t\t\t\twritable: true\n\t\t\t});\n\t\t}\n\t}\n\tinstallDOMGeometryGlobals();\n\tif (typeof globalThis.createImageBitmap === \"undefined\") globalThis.createImageBitmap = async (source) => {\n\t\tconsole.error(\"createImageBitmap called in headless mode. Source:\", source);\n\t\tthrow new Error(\"createImageBitmap is not supported in headless mode. Ensure isHeadless is set to true to use the sharp-based buffer path.\");\n\t};\n}\n\n//#endregion\n//#region src/headless-font-loader.ts\nlet tempDir = null;\nconst fontPathCache = /* @__PURE__ */ new Map();\nconst registeredFonts = /* @__PURE__ */ new Set();\nconst fontPaths = /* @__PURE__ */ new Map();\nconst fontDataCache = /* @__PURE__ */ new Map();\nasync function getLocalFontPath(family, url) {\n\tconst resolvedUrl = url;\n\tif (url.startsWith(\"/\")) {\n\t\tconst fs$2 = await import(\n\t\t\t/* webpackIgnore: true */\n\t\t\t\"fs/promises\"\n);\n\t\ttry {\n\t\t\tawait fs$2.access(url);\n\t\t} catch {\n\t\t\tthrow new Error(`Font file \"${url}\" not found.`);\n\t\t}\n\t}\n\tif (fontPathCache.has(resolvedUrl)) return fontPathCache.get(resolvedUrl);\n\tif (resolvedUrl.startsWith(\"file://\")) try {\n\t\tlet fontPath = new URL(resolvedUrl).pathname;\n\t\tif (process.platform === \"win32\" && fontPath.startsWith(\"/\")) fontPath = fontPath.slice(1);\n\t\tfontPathCache.set(resolvedUrl, fontPath);\n\t\treturn fontPath;\n\t} catch {\n\t\tconst fontPath = resolvedUrl.replace(/^file:\\/\\//, \"\");\n\t\tfontPathCache.set(resolvedUrl, fontPath);\n\t\treturn fontPath;\n\t}\n\tif (!resolvedUrl.startsWith(\"http://\") && !resolvedUrl.startsWith(\"https://\")) return resolvedUrl;\n\tconst fs$1 = await import(\n\t\t/* webpackIgnore: true */\n\t\t\"fs/promises\"\n);\n\tconst path$1 = await import(\n\t\t/* webpackIgnore: true */\n\t\t\"path\"\n);\n\tconst os = await import(\n\t\t/* webpackIgnore: true */\n\t\t\"os\"\n);\n\ttempDir ??= fs$1.mkdtemp(path$1.join(os.tmpdir(), \"gatewai-fonts-\")).catch((err) => {\n\t\ttempDir = null;\n\t\tthrow err;\n\t});\n\tconst dir = await tempDir;\n\tconst safeFamily = family.replace(/[^a-zA-Z0-9_-]/g, \"_\");\n\tconst urlObj = new URL(resolvedUrl);\n\tlet ext = path$1.extname(urlObj.pathname);\n\tif (!ext || ext.length > 5) ext = \".ttf\";\n\tconst destPath = path$1.join(dir, `${safeFamily}-${Date.now()}${ext}`);\n\tconst response = await fetch(resolvedUrl);\n\tif (!response.ok) throw new Error(`Failed to fetch font from ${resolvedUrl}: ${response.statusText}`);\n\tconst buffer = await response.arrayBuffer();\n\tawait fs$1.writeFile(destPath, Buffer.from(buffer));\n\tfontPathCache.set(resolvedUrl, destPath);\n\treturn destPath;\n}\n/**\n* Forgets every registered font and deletes the fonts downloaded from URLs.\n* A long-lived process calls it between jobs (via `resetRenderCaches`): the\n* next job may register the same family from another file, or fetch a URL\n* whose font changed.\n*/\nasync function clearHeadlessFonts() {\n\tfontPathCache.clear();\n\tfontPaths.clear();\n\tfontDataCache.clear();\n\tregisteredFonts.clear();\n\tconst pending = tempDir;\n\ttempDir = null;\n\tif (pending) {\n\t\tconst fs$1 = await import(\n\t\t\t/* webpackIgnore: true */\n\t\t\t\"fs/promises\"\n);\n\t\tconst dir = await pending.catch(() => void 0);\n\t\tif (dir) await fs$1.rm(dir, {\n\t\t\trecursive: true,\n\t\t\tforce: true\n\t\t}).catch(() => {});\n\t}\n}\nasync function registerHeadlessFont(family, url) {\n\tif (fontPaths.has(family)) return fontPaths.get(family);\n\tconst anyGlobal = globalThis;\n\ttry {\n\t\tconst fontPath = await getLocalFontPath(family, url);\n\t\tfontPaths.set(family, fontPath);\n\t\tdebugLog(fontPath === url ? `[registerHeadlessFont] Registered \"${family}\" from ${fontPath}` : `[registerHeadlessFont] Registered \"${family}\" from ${url} (cached at ${fontPath})`);\n\t\ttry {\n\t\t\tif (anyGlobal.OffscreenCanvas && typeof anyGlobal.OffscreenCanvas.registerFont === \"function\") {\n\t\t\t\tanyGlobal.OffscreenCanvas.registerFont(fontPath, { family });\n\t\t\t\tregisteredFonts.add(family);\n\t\t\t}\n\t\t} catch (skiaErr) {\n\t\t\tconsole.warn(`[registerHeadlessFont] SkiaCanvas registration failed for \"${family}\" (non-fatal):`, skiaErr);\n\t\t}\n\t\treturn fontPath;\n\t} catch (e) {\n\t\tconsole.warn(`[registerHeadlessFont] Failed to download font \"${family}\" from ${url}:`, e);\n\t}\n}\n/** Local file path of a font registered via {@link registerHeadlessFont}, if any. */\nfunction getHeadlessFontPath(family) {\n\treturn fontPaths.get(family);\n}\nasync function getHeadlessFontData(family) {\n\tconst cached = fontDataCache.get(family);\n\tif (cached) return cached;\n\tconst path$1 = fontPaths.get(family);\n\tif (path$1) try {\n\t\tconst buf = await (await import(\n\t\t\t/* webpackIgnore: true */\n\t\t\t\"fs/promises\"\n)).readFile(path$1);\n\t\tconst uint8 = new Uint8Array(buf.length);\n\t\tuint8.set(buf);\n\t\tdebugLog(`[getHeadlessFontData] Read local font binary for \"${family}\" from: ${path$1} (${uint8.length} bytes)`);\n\t\tfontDataCache.set(family, uint8);\n\t\treturn uint8;\n\t} catch (e) {\n\t\tconsole.warn(`[getHeadlessFontData] Failed to read font file from ${path$1}:`, e);\n\t}\n}\n\n//#endregion\n//#region src/local-path.ts\nconst isNodeRuntime = () => typeof process !== \"undefined\" && Boolean(process.versions?.node);\n/**\n* A URL scheme of two or more characters (`http:`, `data:`, `blob:`, ...).\n* A single letter followed by a colon is a Windows drive (`D:\\media`), not a scheme.\n*/\nconst URL_SCHEME = /^[a-z][a-z0-9+.-]+:/i;\n/**\n* The filesystem path a media source names under Node, or `null` when it\n* should be fetched. `file://` URLs go through `fileURLToPath` (so\n* `file:///D:/clip.mp4` becomes `D:\\clip.mp4` on Windows), and absolute,\n* Windows and relative paths are resolved against the working directory.\n*/\nasync function toLocalPath(src) {\n\tif (!isNodeRuntime()) return null;\n\tif (src.startsWith(\"file:\")) {\n\t\tconst { fileURLToPath } = await import(\n\t\t\t/* webpackIgnore: true */\n\t\t\t/* @vite-ignore */\n\t\t\t\"node:url\"\n);\n\t\treturn fileURLToPath(src);\n\t}\n\tif (URL_SCHEME.test(src)) return null;\n\tconst { resolve: resolve$1 } = await import(\n\t\t/* webpackIgnore: true */\n\t\t/* @vite-ignore */\n\t\t\"node:path\"\n);\n\treturn resolve$1(src);\n}\n\n//#endregion\n//#region src/input-store.ts\n/** In the browser, local paths are served through the dev server's `/@fs`. */\nfunction resolveInputUrl(url, isNode) {\n\tlet resolvedUrl = url;\n\tif (!isNode && typeof window !== \"undefined\") {\n\t\tif (resolvedUrl.startsWith(\"file://\")) resolvedUrl = resolvedUrl.slice(7);\n\t\tif (resolvedUrl.startsWith(\"/\") && !resolvedUrl.startsWith(\"/@fs/\") && !resolvedUrl.startsWith(\"/api/\")) resolvedUrl = \"/@fs\" + resolvedUrl;\n\t}\n\treturn resolvedUrl;\n}\nfunction safeDecode(path$1) {\n\ttry {\n\t\treturn decodeURIComponent(path$1);\n\t} catch {\n\t\treturn path$1;\n\t}\n}\nasync function assertReadableFile(filePath, url) {\n\tconst { stat } = await import(\n\t\t/* webpackIgnore: true */\n\t\t/* @vite-ignore */\n\t\t\"node:fs/promises\"\n);\n\tlet isFile;\n\ttry {\n\t\tisFile = (await stat(filePath)).isFile();\n\t} catch (err) {\n\t\tthrow new Error(`Cannot open local media file \"${filePath}\" (from \"${url}\"): ${err.message}`, { cause: err });\n\t}\n\tif (!isFile) throw new Error(`Cannot open local media file \"${filePath}\" (from \"${url}\"): not a regular file`);\n}\nvar InputStore = class {\n\tstore = /* @__PURE__ */ new Map();\n\tasync acquire(url) {\n\t\tif (!url) throw new Error(\"Cannot acquire Input for empty URL\");\n\t\tconst resolvedUrl = resolveInputUrl(url, isNodeRuntime());\n\t\tlet shared = this.store.get(resolvedUrl);\n\t\tif (!shared) {\n\t\t\tconst promise = (async () => {\n\t\t\t\tconst filePath = await toLocalPath(resolvedUrl.startsWith(\"file:\") ? resolvedUrl : safeDecode(resolvedUrl));\n\t\t\t\tlet source;\n\t\t\t\tif (filePath !== null) {\n\t\t\t\t\tawait assertReadableFile(filePath, url);\n\t\t\t\t\tsource = new FilePathSource(filePath);\n\t\t\t\t} else source = new UrlSource(resolvedUrl);\n\t\t\t\treturn new Input({\n\t\t\t\t\tsource,\n\t\t\t\t\tformats: ALL_FORMATS\n\t\t\t\t});\n\t\t\t})();\n\t\t\tpromise.catch(() => {\n\t\t\t\tthis.store.delete(resolvedUrl);\n\t\t\t});\n\t\t\tshared = {\n\t\t\t\tpromise,\n\t\t\t\trefCount: 0\n\t\t\t};\n\t\t\tthis.store.set(resolvedUrl, shared);\n\t\t}\n\t\tshared.refCount++;\n\t\treturn shared.promise;\n\t}\n\t/**\n\t* Drops every cached input, including ones a failed render never released.\n\t* Used between jobs, when the same path may now hold a different file.\n\t*/\n\tclear() {\n\t\tconst entries = [...this.store.values()];\n\t\tthis.store.clear();\n\t\tfor (const shared of entries) shared.promise.then((input) => {\n\t\t\ttry {\n\t\t\t\tinput.dispose();\n\t\t\t} catch (_) {}\n\t\t}, () => {});\n\t}\n\trelease(url) {\n\t\tif (!url) return;\n\t\tconst resolvedUrl = resolveInputUrl(url, isNodeRuntime());\n\t\tconst shared = this.store.get(resolvedUrl);\n\t\tif (!shared) return;\n\t\tshared.refCount--;\n\t\tif (shared.refCount <= 0) {\n\t\t\tthis.store.delete(resolvedUrl);\n\t\t\tshared.promise.then((input) => {\n\t\t\t\ttry {\n\t\t\t\t\tinput.dispose();\n\t\t\t\t} catch (_) {}\n\t\t\t}, () => {});\n\t\t}\n\t}\n};\nconst inputStore = new InputStore();\n\n//#endregion\n//#region src/loaders/texture-files.ts\n/** The texture formats the renderer decodes (sharp); others (TGA, BMP, PSD, DDS, …) are skipped. */\nconst MIME_BY_EXT = {\n\t\".png\": \"image/png\",\n\t\".jpg\": \"image/jpeg\",\n\t\".jpeg\": \"image/jpeg\",\n\t\".webp\": \"image/webp\",\n\t\".gif\": \"image/gif\",\n\t\".tif\": \"image/tiff\",\n\t\".tiff\": \"image/tiff\",\n\t\".avif\": \"image/avif\"\n};\n/** MIME type of an image file name, by extension (PNG when unknown). */\nfunction textureMime(name) {\n\treturn MIME_BY_EXT[path.extname(name).toLowerCase()] ?? \"image/png\";\n}\n/** Whether the renderer can decode a texture with this file name (no extension: assume yes). */\nfunction isSupportedTexture(name) {\n\tconst ext = path.extname(name.replace(/\\\\/g, \"/\")).toLowerCase();\n\treturn !ext || ext in MIME_BY_EXT;\n}\n/**\n* Reads a texture a model file refers to. Exporters often write absolute\n* paths from the author's machine (`C:\\Users\\…\\wood.png`), so after the\n* path as written (relative to `basePath`), the file name is also tried in\n* `basePath`, its `textures/` folder and any `*.fbm` folder next to it.\n*/\nfunction readTextureFile(ref, basePath) {\n\tif (!ref || typeof fs === \"undefined\" || !fs.existsSync) return void 0;\n\tif (!isSupportedTexture(ref)) return void 0;\n\tlet cleaned = ref.trim().replace(/^file:\\/\\//, \"\");\n\ttry {\n\t\tcleaned = decodeURIComponent(cleaned);\n\t} catch (_) {}\n\tconst normalized = cleaned.replace(/\\\\/g, \"/\");\n\tconst fileName = normalized.split(\"/\").pop() ?? normalized;\n\tconst candidates = [];\n\tif (path.isAbsolute(normalized)) candidates.push(normalized);\n\tif (basePath) {\n\t\tcandidates.push(path.resolve(basePath, normalized));\n\t\tcandidates.push(path.join(basePath, fileName));\n\t\tcandidates.push(path.join(basePath, \"textures\", fileName));\n\t\ttry {\n\t\t\tfor (const entry of fs.readdirSync(basePath)) if (entry.toLowerCase().endsWith(\".fbm\")) candidates.push(path.join(basePath, entry, fileName));\n\t\t} catch (_) {}\n\t}\n\tfor (const file of candidates) try {\n\t\tif (fs.existsSync(file) && fs.statSync(file).isFile()) return {\n\t\t\tbytes: new Uint8Array(fs.readFileSync(file)),\n\t\t\tmime: textureMime(file)\n\t\t};\n\t} catch (_) {}\n}\n/** Warns that a model's texture is missing or in an unsupported format (the mesh renders untextured). */\nfunction warnMissingTexture(loader, material, ref) {\n\tconst reason = isSupportedTexture(ref) ? \"was not found\" : `is in an unsupported format (use ${Object.keys(MIME_BY_EXT).join(\", \")})`;\n\tconsole.warn(`[${loader}] Texture \"${ref}\" for material \"${material}\" ${reason}; the material renders without it.`);\n}\n\n//#endregion\n//#region src/loaders/obj-loader.ts\nvar ObjLoader = class ObjLoader {\n\t/**\n\t* Parses Wavefront .obj text content (and optional .mtl text) into Model3DData.\n\t*/\n\tstatic parse(objText, mtlTextOrOptions, maybeOptions) {\n\t\tconst options = typeof mtlTextOrOptions === \"object\" && mtlTextOrOptions !== null ? mtlTextOrOptions : maybeOptions ?? {};\n\t\tconst mtlText = typeof mtlTextOrOptions === \"string\" ? mtlTextOrOptions : options.mtlText;\n\t\tconst rawPositions = [];\n\t\tconst rawNormals = [];\n\t\tconst rawUvs = [];\n\t\tconst meshBuilders = [];\n\t\tlet currentBuilder = {\n\t\t\tmaterialName: \"default\",\n\t\t\tfaces: []\n\t\t};\n\t\tmeshBuilders.push(currentBuilder);\n\t\tconst materials = {};\n\t\tif (mtlText) Object.assign(materials, ObjLoader.loadTextures(ObjLoader.parseMtl(mtlText), options.basePath));\n\t\tconst lines = objText.split(/\\r?\\n/);\n\t\tfor (let i = 0; i < lines.length; i++) {\n\t\t\tconst line = lines[i]?.trim();\n\t\t\tif (!line || line.startsWith(\"#\")) continue;\n\t\t\tconst parts = line.split(/\\s+/);\n\t\t\tconst cmd = parts[0]?.toLowerCase();\n\t\t\tif (cmd === \"mtllib\") {\n\t\t\t\tconst mtlFileName = parts.slice(1).join(\" \").trim();\n\t\t\t\tif (options.basePath && typeof fs !== \"undefined\" && fs.existsSync) try {\n\t\t\t\t\tconst resolvedMtlPath = path.resolve(options.basePath, mtlFileName);\n\t\t\t\t\tif (fs.existsSync(resolvedMtlPath)) {\n\t\t\t\t\t\tconst content = fs.readFileSync(resolvedMtlPath, \"utf-8\");\n\t\t\t\t\t\tObject.assign(materials, ObjLoader.loadTextures(ObjLoader.parseMtl(content), path.dirname(resolvedMtlPath)));\n\t\t\t\t\t}\n\t\t\t\t} catch (_) {}\n\t\t\t} else if (cmd === \"v\") {\n\t\t\t\tconst x = Number.parseFloat(parts[1] ?? \"0\");\n\t\t\t\tconst y = Number.parseFloat(parts[2] ?? \"0\");\n\t\t\t\tconst z = Number.parseFloat(parts[3] ?? \"0\");\n\t\t\t\trawPositions.push([\n\t\t\t\t\tx,\n\t\t\t\t\ty,\n\t\t\t\t\tz\n\t\t\t\t]);\n\t\t\t} else if (cmd === \"vn\") {\n\t\t\t\tconst nx = Number.parseFloat(parts[1] ?? \"0\");\n\t\t\t\tconst ny = Number.parseFloat(parts[2] ?? \"0\");\n\t\t\t\tconst nz = Number.parseFloat(parts[3] ?? \"0\");\n\t\t\t\trawNormals.push([\n\t\t\t\t\tnx,\n\t\t\t\t\tny,\n\t\t\t\t\tnz\n\t\t\t\t]);\n\t\t\t} else if (cmd === \"vt\") {\n\t\t\t\tconst u = Number.parseFloat(parts[1] ?? \"0\");\n\t\t\t\tconst v = parts[2] !== void 0 ? Number.parseFloat(parts[2]) : 0;\n\t\t\t\trawUvs.push([u, v]);\n\t\t\t} else if (cmd === \"usemtl\") {\n\t\t\t\tconst matName = parts[1] ?? \"default\";\n\t\t\t\tif (currentBuilder.faces.length > 0) {\n\t\t\t\t\tcurrentBuilder = {\n\t\t\t\t\t\tmaterialName: matName,\n\t\t\t\t\t\tfaces: []\n\t\t\t\t\t};\n\t\t\t\t\tmeshBuilders.push(currentBuilder);\n\t\t\t\t} else currentBuilder.materialName = matName;\n\t\t\t} else if (cmd === \"f\") {\n\t\t\t\tconst faceVertices = [];\n\t\t\t\tfor (let p = 1; p < parts.length; p++) {\n\t\t\t\t\tconst vertDef = parts[p];\n\t\t\t\t\tif (!vertDef) continue;\n\t\t\t\t\tconst indices = vertDef.split(\"/\");\n\t\t\t\t\tlet vIdx = Number.parseInt(indices[0] ?? \"0\", 10);\n\t\t\t\t\tlet vtIdx = indices[1] && indices[1].length > 0 ? Number.parseInt(indices[1], 10) : 0;\n\t\t\t\t\tlet vnIdx = indices[2] && indices[2].length > 0 ? Number.parseInt(indices[2], 10) : 0;\n\t\t\t\t\tif (vIdx < 0) vIdx = rawPositions.length + vIdx + 1;\n\t\t\t\t\tif (vtIdx < 0) vtIdx = rawUvs.length + vtIdx + 1;\n\t\t\t\t\tif (vnIdx < 0) vnIdx = rawNormals.length + vnIdx + 1;\n\t\t\t\t\tfaceVertices.push({\n\t\t\t\t\t\tv: vIdx - 1,\n\t\t\t\t\t\tvt: vtIdx - 1,\n\t\t\t\t\t\tvn: vnIdx - 1\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tif (faceVertices.length >= 3) for (let k = 1; k < faceVertices.length - 1; k++) {\n\t\t\t\t\tconst v0 = faceVertices[0];\n\t\t\t\t\tconst v1 = faceVertices[k];\n\t\t\t\t\tconst v2 = faceVertices[k + 1];\n\t\t\t\t\tif (v0 && v1 && v2) currentBuilder.faces.push([\n\t\t\t\t\t\tv0,\n\t\t\t\t\t\tv1,\n\t\t\t\t\t\tv2\n\t\t\t\t\t]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tlet minX = Infinity;\n\t\tlet minY = Infinity;\n\t\tlet minZ = Infinity;\n\t\tlet maxX = -Infinity;\n\t\tlet maxY = -Infinity;\n\t\tlet maxZ = -Infinity;\n\t\tfor (const pos of rawPositions) {\n\t\t\tconst [px, py, pz] = pos;\n\t\t\tif (px === void 0 || py === void 0 || pz === void 0) continue;\n\t\t\tif (px < minX) minX = px;\n\t\t\tif (py < minY) minY = py;\n\t\t\tif (pz < minZ) minZ = pz;\n\t\t\tif (px > maxX) maxX = px;\n\t\t\tif (py > maxY) maxY = py;\n\t\t\tif (pz > maxZ) maxZ = pz;\n\t\t}\n\t\tif (!Number.isFinite(minX)) {\n\t\t\tminX = -1;\n\t\t\tminY = -1;\n\t\t\tminZ = -1;\n\t\t\tmaxX = 1;\n\t\t\tmaxY = 1;\n\t\t\tmaxZ = 1;\n\t\t}\n\t\tconst centerX = (minX + maxX) * .5;\n\t\tconst centerY = (minY + maxY) * .5;\n\t\tconst centerZ = (minZ + maxZ) * .5;\n\t\tconst sizeX = Math.max(1e-4, maxX - minX);\n\t\tconst sizeY = Math.max(1e-4, maxY - minY);\n\t\tconst sizeZ = Math.max(1e-4, maxZ - minZ);\n\t\tconst maxDim = Math.max(sizeX, sizeY, sizeZ);\n\t\tlet scaleMultiplier = 1;\n\t\tif (options.normalizeSize && options.normalizeSize > 0) scaleMultiplier = options.normalizeSize / maxDim;\n\t\tif (typeof options.scale === \"number\") scaleMultiplier *= options.scale;\n\t\tconst shouldCenter = options.center ?? false;\n\t\tconst offsetX = shouldCenter ? centerX : 0;\n\t\tconst offsetY = shouldCenter ? centerY : 0;\n\t\tconst offsetZ = shouldCenter ? centerZ : 0;\n\t\tconst meshes = [];\n\t\tfor (let bIdx = 0; bIdx < meshBuilders.length; bIdx++) {\n\t\t\tconst builder = meshBuilders[bIdx];\n\t\t\tif (!builder || builder.faces.length === 0) continue;\n\t\t\tconst vertexMap = /* @__PURE__ */ new Map();\n\t\t\tconst positions = [];\n\t\t\tconst normals = [];\n\t\t\tconst uvs = [];\n\t\t\tconst indices = [];\n\t\t\tlet hasParsedNormals = false;\n\t\t\tfor (const tri of builder.faces) for (const vert of tri) {\n\t\t\t\tconst key = `${vert.v}_${vert.vt}_${vert.vn}`;\n\t\t\t\tlet outIndex = vertexMap.get(key);\n\t\t\t\tif (outIndex === void 0) {\n\t\t\t\t\toutIndex = positions.length / 3;\n\t\t\t\t\tvertexMap.set(key, outIndex);\n\t\t\t\t\tconst rawPos = rawPositions[vert.v] ?? [\n\t\t\t\t\t\t0,\n\t\t\t\t\t\t0,\n\t\t\t\t\t\t0\n\t\t\t\t\t];\n\t\t\t\t\tconst px = ((rawPos[0] ?? 0) - offsetX) * scaleMultiplier;\n\t\t\t\t\tconst py = ((rawPos[1] ?? 0) - offsetY) * scaleMultiplier;\n\t\t\t\t\tconst pz = ((rawPos[2] ?? 0) - offsetZ) * scaleMultiplier;\n\t\t\t\t\tpositions.push(px, py, pz);\n\t\t\t\t\tif (vert.vt >= 0 && rawUvs[vert.vt]) {\n\t\t\t\t\t\tconst uv = rawUvs[vert.vt];\n\t\t\t\t\t\tuvs.push(uv[0] ?? 0, 1 - (uv[1] ?? 0));\n\t\t\t\t\t} else uvs.push(0, 0);\n\t\t\t\t\tif (vert.vn >= 0 && rawNormals[vert.vn]) {\n\t\t\t\t\t\thasParsedNormals = true;\n\t\t\t\t\t\tconst norm = rawNormals[vert.vn];\n\t\t\t\t\t\tnormals.push(norm[0] ?? 0, norm[1] ?? 0, norm[2] ?? 0);\n\t\t\t\t\t} else normals.push(0, 0, 0);\n\t\t\t\t}\n\t\t\t\tindices.push(outIndex);\n\t\t\t}\n\t\t\tif (!hasParsedNormals || options.smoothNormals) {\n\t\t\t\tconst computedNormals = new Float32Array(positions.length);\n\t\t\t\tfor (let i = 0; i < indices.length; i += 3) {\n\t\t\t\t\tconst i0 = indices[i];\n\t\t\t\t\tconst i1 = indices[i + 1];\n\t\t\t\t\tconst i2 = indices[i + 2];\n\t\t\t\t\tconst p0 = [\n\t\t\t\t\t\tpositions[i0 * 3],\n\t\t\t\t\t\tpositions[i0 * 3 + 1],\n\t\t\t\t\t\tpositions[i0 * 3 + 2]\n\t\t\t\t\t];\n\t\t\t\t\tconst p1 = [\n\t\t\t\t\t\tpositions[i1 * 3],\n\t\t\t\t\t\tpositions[i1 * 3 + 1],\n\t\t\t\t\t\tpositions[i1 * 3 + 2]\n\t\t\t\t\t];\n\t\t\t\t\tconst p2 = [\n\t\t\t\t\t\tpositions[i2 * 3],\n\t\t\t\t\t\tpositions[i2 * 3 + 1],\n\t\t\t\t\t\tpositions[i2 * 3 + 2]\n\t\t\t\t\t];\n\t\t\t\t\tconst edge1 = Vector3Math.subtract(p1, p0);\n\t\t\t\t\tconst edge2 = Vector3Math.subtract(p2, p0);\n\t\t\t\t\tconst faceNormal = Vector3Math.cross(edge1, edge2);\n\t\t\t\t\tcomputedNormals[i0 * 3] += faceNormal[0];\n\t\t\t\t\tcomputedNormals[i0 * 3 + 1] += faceNormal[1];\n\t\t\t\t\tcomputedNormals[i0 * 3 + 2] += faceNormal[2];\n\t\t\t\t\tcomputedNormals[i1 * 3] += faceNormal[0];\n\t\t\t\t\tcomputedNormals[i1 * 3 + 1] += faceNormal[1];\n\t\t\t\t\tcomputedNormals[i1 * 3 + 2] += faceNormal[2];\n\t\t\t\t\tcomputedNormals[i2 * 3] += faceNormal[0];\n\t\t\t\t\tcomputedNormals[i2 * 3 + 1] += faceNormal[1];\n\t\t\t\t\tcomputedNormals[i2 * 3 + 2] += faceNormal[2];\n\t\t\t\t}\n\t\t\t\tfor (let v = 0; v < positions.length / 3; v++) {\n\t\t\t\t\tconst nx = computedNormals[v * 3];\n\t\t\t\t\tconst ny = computedNormals[v * 3 + 1];\n\t\t\t\t\tconst nz = computedNormals[v * 3 + 2];\n\t\t\t\t\tconst len = Math.hypot(nx, ny, nz) || 1;\n\t\t\t\t\tnormals[v * 3] = nx / len;\n\t\t\t\t\tnormals[v * 3 + 1] = ny / len;\n\t\t\t\t\tnormals[v * 3 + 2] = nz / len;\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst indexArray = positions.length / 3 > 65535 ? new Uint32Array(indices) : new Uint16Array(indices);\n\t\t\tmeshes.push({\n\t\t\t\tid: `mesh_${bIdx}`,\n\t\t\t\tname: builder.materialName,\n\t\t\t\tpositions: new Float32Array(positions),\n\t\t\t\tnormals: new Float32Array(normals),\n\t\t\t\tuvs: new Float32Array(uvs),\n\t\t\t\tindices: indexArray,\n\t\t\t\tmaterialName: builder.materialName\n\t\t\t});\n\t\t}\n\t\tconst finalMinX = (minX - offsetX) * scaleMultiplier;\n\t\tconst finalMinY = (minY - offsetY) * scaleMultiplier;\n\t\tconst finalMinZ = (minZ - offsetZ) * scaleMultiplier;\n\t\tconst finalMaxX = (maxX - offsetX) * scaleMultiplier;\n\t\tconst finalMaxY = (maxY - offsetY) * scaleMultiplier;\n\t\tconst finalMaxZ = (maxZ - offsetZ) * scaleMultiplier;\n\t\tconst finalSizeX = finalMaxX - finalMinX;\n\t\tconst finalSizeY = finalMaxY - finalMinY;\n\t\tconst finalSizeZ = finalMaxZ - finalMinZ;\n\t\tconst finalCenterX = (finalMinX + finalMaxX) * .5;\n\t\tconst finalCenterY = (finalMinY + finalMaxY) * .5;\n\t\tconst finalCenterZ = (finalMinZ + finalMaxZ) * .5;\n\t\tconst sphereRadius = Math.hypot(finalSizeX, finalSizeY, finalSizeZ) * .5;\n\t\treturn {\n\t\t\tmeshes,\n\t\t\tmaterials,\n\t\t\tanimations: [],\n\t\t\tbounds: {\n\t\t\t\tmin: [\n\t\t\t\t\tfinalMinX,\n\t\t\t\t\tfinalMinY,\n\t\t\t\t\tfinalMinZ\n\t\t\t\t],\n\t\t\t\tmax: [\n\t\t\t\t\tfinalMaxX,\n\t\t\t\t\tfinalMaxY,\n\t\t\t\t\tfinalMaxZ\n\t\t\t\t],\n\t\t\t\tcenter: [\n\t\t\t\t\tfinalCenterX,\n\t\t\t\t\tfinalCenterY,\n\t\t\t\t\tfinalCenterZ\n\t\t\t\t],\n\t\t\t\tsize: [\n\t\t\t\t\tfinalSizeX,\n\t\t\t\t\tfinalSizeY,\n\t\t\t\t\tfinalSizeZ\n\t\t\t\t],\n\t\t\t\tboundingSphereRadius: sphereRadius\n\t\t\t}\n\t\t};\n\t}\n\t/**\n\t* Parses Wavefront .mtl material text into Material3D dictionary.\n\t*/\n\tstatic parseMtl(mtlText) {\n\t\tconst materials = {};\n\t\tlet currentMat = null;\n\t\tconst lines = mtlText.split(/\\r?\\n/);\n\t\tfor (const rawLine of lines) {\n\t\t\tconst line = rawLine.trim();\n\t\t\tif (!line || line.startsWith(\"#\")) continue;\n\t\t\tconst parts = line.split(/\\s+/);\n\t\t\tconst cmd = parts[0]?.toLowerCase();\n\t\t\tif (cmd === \"newmtl\") {\n\t\t\t\tconst name = parts[1] ?? \"default\";\n\t\t\t\tcurrentMat = {\n\t\t\t\t\tname,\n\t\t\t\t\tdiffuseColor: [\n\t\t\t\t\t\t1,\n\t\t\t\t\t\t1,\n\t\t\t\t\t\t1,\n\t\t\t\t\t\t1\n\t\t\t\t\t],\n\t\t\t\t\tspecularColor: [\n\t\t\t\t\t\t1,\n\t\t\t\t\t\t1,\n\t\t\t\t\t\t1\n\t\t\t\t\t],\n\t\t\t\t\tambientColor: [\n\t\t\t\t\t\t.2,\n\t\t\t\t\t\t.2,\n\t\t\t\t\t\t.2\n\t\t\t\t\t],\n\t\t\t\t\tshininess: 32,\n\t\t\t\t\topacity: 1\n\t\t\t\t};\n\t\t\t\tmaterials[name] = currentMat;\n\t\t\t} else if (currentMat) {\n\t\t\t\tif (cmd === \"kd\") {\n\t\t\t\t\tconst r = Number.parseFloat(parts[1] ?? \"1\");\n\t\t\t\t\tconst g$1 = Number.parseFloat(parts[2] ?? \"1\");\n\t\t\t\t\tconst b = Number.parseFloat(parts[3] ?? \"1\");\n\t\t\t\t\tcurrentMat.diffuseColor = [\n\t\t\t\t\t\tr,\n\t\t\t\t\t\tg$1,\n\t\t\t\t\t\tb,\n\t\t\t\t\t\tcurrentMat.diffuseColor?.[3] ?? 1\n\t\t\t\t\t];\n\t\t\t\t} else if (cmd === \"ks\") {\n\t\t\t\t\tconst r = Number.parseFloat(parts[1] ?? \"1\");\n\t\t\t\t\tconst g$1 = Number.parseFloat(parts[2] ?? \"1\");\n\t\t\t\t\tconst b = Number.parseFloat(parts[3] ?? \"1\");\n\t\t\t\t\tcurrentMat.specularColor = [\n\t\t\t\t\t\tr,\n\t\t\t\t\t\tg$1,\n\t\t\t\t\t\tb\n\t\t\t\t\t];\n\t\t\t\t\tcurrentMat.specularIntensity = (r + g$1 + b) / 3;\n\t\t\t\t} else if (cmd === \"ka\") {\n\t\t\t\t\tconst r = Number.parseFloat(parts[1] ?? \"0.2\");\n\t\t\t\t\tconst g$1 = Number.parseFloat(parts[2] ?? \"0.2\");\n\t\t\t\t\tconst b = Number.parseFloat(parts[3] ?? \"0.2\");\n\t\t\t\t\tcurrentMat.ambientColor = [\n\t\t\t\t\t\tr,\n\t\t\t\t\t\tg$1,\n\t\t\t\t\t\tb\n\t\t\t\t\t];\n\t\t\t\t} else if (cmd === \"ns\") currentMat.shininess = Number.parseFloat(parts[1] ?? \"32\");\n\t\t\t\telse if (cmd === \"d\" || cmd === \"tr\") {\n\t\t\t\t\tconst val = Number.parseFloat(parts[1] ?? \"1\");\n\t\t\t\t\tcurrentMat.opacity = cmd === \"d\" ? val : 1 - val;\n\t\t\t\t\tif (currentMat.diffuseColor) currentMat.diffuseColor[3] = currentMat.opacity;\n\t\t\t\t} else if (cmd === \"map_kd\") {\n\t\t\t\t\tcurrentMat.diffuseTexture = ObjLoader.mapFileName(parts);\n\t\t\t\t\tconst clamp = parts.findIndex((p) => p.toLowerCase() === \"-clamp\");\n\t\t\t\t\tcurrentMat.textureWrap = clamp > 0 && parts[clamp + 1]?.toLowerCase() === \"on\" ? \"clamp\" : \"repeat\";\n\t\t\t\t} else if (cmd === \"norm\" || cmd === \"map_kn\") currentMat.normalTexture = ObjLoader.mapFileName(parts);\n\t\t\t}\n\t\t}\n\t\treturn materials;\n\t}\n\t/** Option arities of MTL map statements (`-o`, `-s`, `-t` take 1–3 numbers). */\n\tstatic MAP_OPTION_ARGS = {\n\t\t\"-blendu\": 1,\n\t\t\"-blendv\": 1,\n\t\t\"-cc\": 1,\n\t\t\"-clamp\": 1,\n\t\t\"-texres\": 1,\n\t\t\"-bm\": 1,\n\t\t\"-boost\": 1,\n\t\t\"-imfchan\": 1,\n\t\t\"-type\": 1,\n\t\t\"-mm\": 2\n\t};\n\t/** The file name of a map statement (`map_Kd -s 1 1 1 wood grain.png`), past its options. */\n\tstatic mapFileName(parts) {\n\t\tlet i = 1;\n\t\twhile (i < parts.length && parts[i]?.startsWith(\"-\")) {\n\t\t\tconst option = parts[i].toLowerCase();\n\t\t\ti++;\n\t\t\tif (option === \"-o\" || option === \"-s\" || option === \"-t\") for (let n = 0; n < 3 && i < parts.length; n++) {\n\t\t\t\tif (Number.isNaN(Number(parts[i]))) break;\n\t\t\t\ti++;\n\t\t\t}\n\t\t\telse i += ObjLoader.MAP_OPTION_ARGS[option] ?? 0;\n\t\t}\n\t\treturn parts.slice(i).join(\" \");\n\t}\n\t/** Reads the diffuse and normal maps the materials name, relative to `dir`. */\n\tstatic loadTextures(materials, dir) {\n\t\tif (!dir) return materials;\n\t\tfor (const mat of Object.values(materials)) {\n\t\t\tif (mat.diffuseTexture && !mat.diffuseTextureBuffer) {\n\t\t\t\tconst file = readTextureFile(mat.diffuseTexture, dir);\n\t\t\t\tif (file) {\n\t\t\t\t\tmat.diffuseTextureBuffer = file.bytes;\n\t\t\t\t\tmat.diffuseTextureMime = file.mime;\n\t\t\t\t} else warnMissingTexture(\"ObjLoader\", mat.name, mat.diffuseTexture);\n\t\t\t}\n\t\t\tif (mat.normalTexture && !mat.normalTextureBuffer) {\n\t\t\t\tconst file = readTextureFile(mat.normalTexture, dir);\n\t\t\t\tif (file) mat.normalTextureBuffer = file.bytes;\n\t\t\t\telse warnMissingTexture(\"ObjLoader\", mat.name, mat.normalTexture);\n\t\t\t}\n\t\t}\n\t\treturn materials;\n\t}\n};\nfunction parseOBJ(objText, mtlText, options = {}) {\n\treturn ObjLoader.parse(objText, mtlText, options);\n}\nfunction parseMTL(mtlText) {\n\treturn ObjLoader.parseMtl(mtlText);\n}\nfunction loadOBJ(srcOrData, mtlText, options = {}) {\n\tlet text;\n\tif (typeof srcOrData !== \"string\") text = new TextDecoder().decode(srcOrData);\n\telse {\n\t\tconst trimmed = srcOrData.trim();\n\t\tif (!(trimmed.startsWith(\"v \") || trimmed.startsWith(\"#\") || trimmed.includes(\"\\nv \") || trimmed.includes(\"\\rv \")) && typeof fs !== \"undefined\" && fs.existsSync) try {\n\t\t\tlet filePath = srcOrData.startsWith(\"file://\") ? srcOrData.slice(7) : srcOrData;\n\t\t\ttry {\n\t\t\t\tfilePath = decodeURIComponent(filePath);\n\t\t\t} catch (_) {}\n\t\t\tif (fs.existsSync(filePath)) {\n\t\t\t\ttext = fs.readFileSync(filePath, \"utf-8\");\n\t\t\t\toptions = {\n\t\t\t\t\tbasePath: options.basePath ?? path.dirname(filePath),\n\t\t\t\t\t...options\n\t\t\t\t};\n\t\t\t} else text = srcOrData;\n\t\t} catch (_) {\n\t\t\ttext = srcOrData;\n\t\t}\n\t\telse text = srcOrData;\n\t}\n\treturn ObjLoader.parse(text, mtlText, options);\n}\n\n//#endregion\n//#region src/loaders/mesh-utils.ts\n/**\n* Adds each triangle's (area-weighted) face normal to its three vertices, then\n* normalizes every vertex normal in place.\n*/\nfunction accumulateVertexNormals(positions, indices, normals) {\n\tconst vertex = (i) => [\n\t\tpositions[i * 3],\n\t\tpositions[i * 3 + 1],\n\t\tpositions[i * 3 + 2]\n\t];\n\tfor (let i = 0; i < indices.length; i += 3) {\n\t\tconst i0 = indices[i];\n\t\tconst i1 = indices[i + 1];\n\t\tconst i2 = indices[i + 2];\n\t\tconst p0 = vertex(i0);\n\t\tconst fn = Vector3Math.cross(Vector3Math.subtract(vertex(i1), p0), Vector3Math.subtract(vertex(i2), p0));\n\t\tfor (const v of [\n\t\t\ti0,\n\t\t\ti1,\n\t\t\ti2\n\t\t]) {\n\t\t\tnormals[v * 3] += fn[0];\n\t\t\tnormals[v * 3 + 1] += fn[1];\n\t\t\tnormals[v * 3 + 2] += fn[2];\n\t\t}\n\t}\n\tfor (let i = 0; i < normals.length; i += 3) {\n\t\tconst nx = normals[i];\n\t\tconst ny = normals[i + 1];\n\t\tconst nz = normals[i + 2];\n\t\tconst len = Math.hypot(nx, ny, nz) || 1;\n\t\tnormals[i] = nx / len;\n\t\tnormals[i + 1] = ny / len;\n\t\tnormals[i + 2] = nz / len;\n\t}\n}\n/** Axis-aligned bounds of xyz position arrays (all zero when empty). */\nfunction computeBounds(...positionArrays) {\n\tlet minX = Infinity, minY = Infinity, minZ = Infinity;\n\tlet maxX = -Infinity, maxY = -Infinity, maxZ = -Infinity;\n\tfor (const positions of positionArrays) for (let i = 0; i < positions.length; i += 3) {\n\t\tconst x = positions[i];\n\t\tconst y = positions[i + 1];\n\t\tconst z = positions[i + 2];\n\t\tif (x < minX) minX = x;\n\t\tif (x > maxX) maxX = x;\n\t\tif (y < minY) minY = y;\n\t\tif (y > maxY) maxY = y;\n\t\tif (z < minZ) minZ = z;\n\t\tif (z > maxZ) maxZ = z;\n\t}\n\tif (!Number.isFinite(minX)) {\n\t\tminX = minY = minZ = 0;\n\t\tmaxX = maxY = maxZ = 0;\n\t}\n\treturn {\n\t\tmin: [\n\t\t\tminX,\n\t\t\tminY,\n\t\t\tminZ\n\t\t],\n\t\tmax: [\n\t\t\tmaxX,\n\t\t\tmaxY,\n\t\t\tmaxZ\n\t\t],\n\t\tcenter: [\n\t\t\t(minX + maxX) * .5,\n\t\t\t(minY + maxY) * .5,\n\t\t\t(minZ + maxZ) * .5\n\t\t],\n\t\tsize: [\n\t\t\tmaxX - minX,\n\t\t\tmaxY - minY,\n\t\t\tmaxZ - minZ\n\t\t]\n\t};\n}\n/**\n* The placement `LoadModelOptions` asks for: recentring on the bounds\n* (`center`), fitting the largest side to `normalizeSize`, then `scale`.\n*/\nfunction resolveModelTransform(bounds, options) {\n\tconst maxDimension = Math.max(...bounds.size, 1e-4);\n\tlet scaleMultiplier = 1;\n\tif (options.normalizeSize && options.normalizeSize > 0) scaleMultiplier = options.normalizeSize / maxDimension;\n\tconst scale = [\n\t\tscaleMultiplier,\n\t\tscaleMultiplier,\n\t\tscaleMultiplier\n\t];\n\tif (typeof options.scale === \"number\") {\n\t\tscale[0] *= options.scale;\n\t\tscale[1] *= options.scale;\n\t\tscale[2] *= options.scale;\n\t} else if (Array.isArray(options.scale)) {\n\t\tscale[0] *= options.scale[0];\n\t\tscale[1] *= options.scale[1];\n\t\tscale[2] *= options.scale[2];\n\t}\n\treturn {\n\t\toffset: options.center ? bounds.center : [\n\t\t\t0,\n\t\t\t0,\n\t\t\t0\n\t\t],\n\t\tscale\n\t};\n}\n/** `(p - offset) * scale` for every xyz position. */\nfunction transformPositions(positions, { offset, scale }) {\n\tconst out = new Float32Array(positions.length);\n\tfor (let i = 0; i < positions.length; i += 3) {\n\t\tout[i] = (positions[i] - offset[0]) * scale[0];\n\t\tout[i + 1] = (positions[i + 1] - offset[1]) * scale[1];\n\t\tout[i + 2] = (positions[i + 2] - offset[2]) * scale[2];\n\t}\n\treturn out;\n}\n/** Uint16 indices while every vertex fits, Uint32 beyond 65535 vertices. */\nfunction createIndexArray(indices, vertexCount) {\n\treturn vertexCount > 65535 ? new Uint32Array(indices) : new Uint16Array(indices);\n}\n/** The model's bounds after `transform`, as `Model3DData.bounds` reports them. */\nfunction transformModelBounds(bounds, { offset, scale }) {\n\tconst min = [\n\t\t(bounds.min[0] - offset[0]) * scale[0],\n\t\t(bounds.min[1] - offset[1]) * scale[1],\n\t\t(bounds.min[2] - offset[2]) * scale[2]\n\t];\n\tconst max = [\n\t\t(bounds.max[0] - offset[0]) * scale[0],\n\t\t(bounds.max[1] - offset[1]) * scale[1],\n\t\t(bounds.max[2] - offset[2]) * scale[2]\n\t];\n\treturn {\n\t\tmin,\n\t\tmax,\n\t\tcenter: [\n\t\t\t(min[0] + max[0]) * .5,\n\t\t\t(min[1] + max[1]) * .5,\n\t\t\t(min[2] + max[2]) * .5\n\t\t],\n\t\tsize: [\n\t\t\tmax[0] - min[0],\n\t\t\tmax[1] - min[1],\n\t\t\tmax[2] - min[2]\n\t\t],\n\t\tboundingSphereRadius: Math.hypot(max[0] - min[0], max[1] - min[1], max[2] - min[2]) * .5\n\t};\n}\n\n//#endregion\n//#region src/loaders/pose.ts\n/**\n* Poses a model's scene graph (glTF semantics): samples an animation clip's\n* translation / rotation / scale tracks at a time, composes the node\n* hierarchy into model-space matrices, and turns a skin's joints into the\n* joint matrices the mesh shader blends (joint world × inverse bind).\n*/\n/** Joints per skin the mesh shader holds (mesh3d.wgsl jointMatrices). */\nconst MAX_JOINTS = 128;\n/** Column-major translate · rotate(quaternion) · scale. */\nfunction trsMatrix(t, q, s) {\n\tconst [x, y, z, w] = q;\n\tconst xx = x * x;\n\tconst yy = y * y;\n\tconst zz = z * z;\n\tconst xy = x * y;\n\tconst xz = x * z;\n\tconst yz = y * z;\n\tconst wx = w * x;\n\tconst wy = w * y;\n\tconst wz = w * z;\n\treturn [\n\t\t(1 - 2 * (yy + zz)) * s[0],\n\t\t2 * (xy + wz) * s[0],\n\t\t2 * (xz - wy) * s[0],\n\t\t0,\n\t\t2 * (xy - wz) * s[1],\n\t\t(1 - 2 * (xx + zz)) * s[1],\n\t\t2 * (yz + wx) * s[1],\n\t\t0,\n\t\t2 * (xz + wy) * s[2],\n\t\t2 * (yz - wx) * s[2],\n\t\t(1 - 2 * (xx + yy)) * s[2],\n\t\t0,\n\t\tt[0],\n\t\tt[1],\n\t\tt[2],\n\t\t1\n\t];\n}\nfunction normalizeQuat(q) {\n\tconst len = Math.hypot(q[0], q[1], q[2], q[3]) || 1;\n\treturn [\n\t\tq[0] / len,\n\t\tq[1] / len,\n\t\tq[2] / len,\n\t\tq[3] / len\n\t];\n}\nfunction slerp(a, b, t) {\n\tlet cos = a[0] * b[0] + a[1] * b[1] + a[2] * b[2] + a[3] * b[3];\n\tconst sign = cos < 0 ? -1 : 1;\n\tcos *= sign;\n\tif (cos > .9995) return normalizeQuat([\n\t\ta[0] + (sign * b[0] - a[0]) * t,\n\t\ta[1] + (sign * b[1] - a[1]) * t,\n\t\ta[2] + (sign * b[2] - a[2]) * t,\n\t\ta[3] + (sign * b[3] - a[3]) * t\n\t]);\n\tconst theta = Math.acos(cos);\n\tconst sin = Math.sin(theta);\n\tconst wa = Math.sin((1 - t) * theta) / sin;\n\tconst wb = sign * Math.sin(t * theta) / sin;\n\treturn [\n\t\ta[0] * wa + b[0] * wb,\n\t\ta[1] * wa + b[1] * wb,\n\t\ta[2] * wa + b[2] * wb,\n\t\ta[3] * wa + b[3] * wb\n\t];\n}\n/** Index of the last keyframe at or before `time` (binary search). */\nfunction keyBefore(times, time) {\n\tlet lo = 0;\n\tlet hi = times.length - 1;\n\twhile (lo < hi) {\n\t\tconst mid = lo + hi + 1 >> 1;\n\t\tif ((times[mid] ?? 0) <= time) lo = mid;\n\t\telse hi = mid - 1;\n\t}\n\treturn lo;\n}\n/** Element `k` (of `size` components) of a track's values; cubic tracks store [in, value, out] triples. */\nfunction valueAt(values, k, size, cubic, part = 1) {\n\tconst at = cubic ? (k * 3 + part) * size : k * size;\n\treturn Array.from(values.subarray(at, at + size));\n}\nfunction sampleChannel(track, values, size, time) {\n\tconst { times } = track;\n\tconst cubic = track.interpolation === \"cubic\";\n\tconst last = times.length - 1;\n\tif (time <= (times[0] ?? 0)) return valueAt(values, 0, size, cubic);\n\tif (time >= (times[last] ?? 0)) return valueAt(values, last, size, cubic);\n\tconst k = keyBefore(times, time);\n\tif (track.interpolation === \"step\") return valueAt(values, k, size, cubic);\n\tconst t0 = times[k] ?? 0;\n\tconst dt = (times[k + 1] ?? t0) - t0;\n\tconst u = dt > 0 ? (time - t0) / dt : 0;\n\tconst a = valueAt(values, k, size, cubic);\n\tconst b = valueAt(values, k + 1, size, cubic);\n\tif (cubic) {\n\t\tconst outA = valueAt(values, k, size, true, 2);\n\t\tconst inB = valueAt(values, k + 1, size, true, 0);\n\t\tconst u2 = u * u;\n\t\tconst u3 = u2 * u;\n\t\tconst out = a.map((p0, i) => (2 * u3 - 3 * u2 + 1) * p0 + (u3 - 2 * u2 + u) * dt * (outA[i] ?? 0) + (-2 * u3 + 3 * u2) * (b[i] ?? 0) + (u3 - u2) * dt * (inB[i] ?? 0));\n\t\treturn size === 4 ? normalizeQuat(out) : out;\n\t}\n\tif (size === 4) return slerp(a, b, u);\n\treturn a.map((v, i) => v + ((b[i] ?? v) - v) * u);\n}\n/** Each node's local matrix with the clip's tracks applied at `time` (seconds). */\nfunction localMatrices(nodes, clip, time) {\n\tconst t = nodes.map((n) => [...n.translation]);\n\tconst r = nodes.map((n) => [...n.rotation]);\n\tconst s = nodes.map((n) => [...n.scale]);\n\tconst byName = new Map(nodes.map((n, i) => [n.name, i]));\n\tfor (const track of clip?.tracks ?? []) {\n\t\tconst i = track.node ?? byName.get(track.nodeName);\n\t\tif (i === void 0 || !track.times.length) continue;\n\t\tif (track.translations) t[i] = sampleChannel(track, track.translations, 3, time);\n\t\tif (track.rotations) r[i] = sampleChannel(track, track.rotations, 4, time);\n\t\tif (track.scales) s[i] = sampleChannel(track, track.scales, 3, time);\n\t}\n\treturn nodes.map((n, i) => n.matrix ?? trsMatrix(t[i], r[i], s[i]));\n}\n/**\n* Model-space matrix of every node, posed by `clip` at `time` seconds (the\n* rest pose without a clip). Parents may follow their children in the list.\n*/\nfunction poseNodes(model, clip, time) {\n\tconst nodes = model.nodes ?? [];\n\tconst local = localMatrices(nodes, clip, time);\n\tconst world = new Array(nodes.length);\n\tconst resolve$1 = (i) => {\n\t\tconst done = world[i];\n\t\tif (done) return done;\n\t\tconst parent = nodes[i].parent;\n\t\tconst m = parent < 0 ? local[i] : Matrix4Math.multiply(resolve$1(parent), local[i]);\n\t\tworld[i] = m;\n\t\treturn m;\n\t};\n\treturn nodes.map((_, i) => resolve$1(i));\n}\n/** The joint matrices of one skin for a posed scene graph, padded with identity to MAX_JOINTS. */\nfunction jointMatrices(model, skinIndex, world) {\n\tconst skin = model.skins?.[skinIndex];\n\tif (!skin) throw new Error(`model has no skin ${skinIndex}`);\n\tconst out = new Float32Array(MAX_JOINTS * 16);\n\tfor (let j = 0; j < MAX_JOINTS; j++) {\n\t\tconst node = skin.joints[j];\n\t\tif (node === void 0) {\n\t\t\tout.set(Matrix4Math.identity(), j * 16);\n\t\t\tcontinue;\n\t\t}\n\t\tconst ibm = Array.from(skin.inverseBindMatrices.subarray(j * 16, j * 16 + 16));\n\t\tout.set(Matrix4Math.multiply(world[node], ibm), j * 16);\n\t}\n\treturn out;\n}\n\n//#endregion\n//#region src/loaders/fbx-loader.ts\nvar FbxLoader = class FbxLoader {\n\tstatic FBX_KTIME = 46186158e3;\n\t/**\n\t* Parses binary or text FBX buffer/string into Model3DData.\n\t*/\n\tstatic parse(bufferOrString, options = {}) {\n\t\tconst rootNode = typeof bufferOrString === \"string\" ? FbxLoader.parseAscii(bufferOrString) : FbxLoader.isBinary(bufferOrString) ? FbxLoader.parseBinary(bufferOrString) : FbxLoader.parseAscii(new TextDecoder().decode(bufferOrString));\n\t\treturn FbxLoader.buildModelFromTree(rootNode, options);\n\t}\n\tstatic isBinary(buffer) {\n\t\tconst view = buffer instanceof Uint8Array ? buffer : new Uint8Array(buffer);\n\t\tif (view.length < 27) return false;\n\t\tconst header = \"Kaydara FBX Binary \\0\u001a\\0\";\n\t\tfor (let i = 0; i < 23; i++) if (view[i] !== header.charCodeAt(i)) return false;\n\t\treturn true;\n\t}\n\t/**\n\t* Parses Binary FBX 7.x/6.x format.\n\t*/\n\tstatic parseBinary(buffer) {\n\t\tconst u8 = buffer instanceof Uint8Array ? buffer : new Uint8Array(buffer);\n\t\tconst view = new DataView(u8.buffer, u8.byteOffset, u8.byteLength);\n\t\tconst is64Bit = view.getUint32(23, true) >= 7500;\n\t\tlet offset = 27;\n\t\tconst root = {\n\t\t\tname: \"Root\",\n\t\t\tprops: [],\n\t\t\tchildren: []\n\t\t};\n\t\tconst readNode = () => {\n\t\t\tif (offset >= u8.byteLength) return null;\n\t\t\tlet endOffset;\n\t\t\tlet numProperties;\n\t\t\tlet nameLen;\n\t\t\tif (is64Bit) {\n\t\t\t\tif (offset + 25 > u8.byteLength) return null;\n\t\t\t\tendOffset = Number(view.getBigUint64(offset, true));\n\t\t\t\tnumProperties = Number(view.getBigUint64(offset + 8, true));\n\t\t\t\tnameLen = view.getUint8(offset + 24);\n\t\t\t\toffset += 25;\n\t\t\t} else {\n\t\t\t\tif (offset + 13 > u8.byteLength) return null;\n\t\t\t\tendOffset = view.getUint32(offset, true);\n\t\t\t\tnumProperties = view.getUint32(offset + 4, true);\n\t\t\t\tnameLen = view.getUint8(offset + 12);\n\t\t\t\toffset += 13;\n\t\t\t}\n\t\t\tif (endOffset === 0) return null;\n\t\t\tconst name = new TextDecoder().decode(u8.subarray(offset, offset + nameLen));\n\t\t\toffset += nameLen;\n\t\t\tconst props = [];\n\t\t\tfor (let p = 0; p < numProperties; p++) {\n\t\t\t\tconst typeCode = String.fromCharCode(u8[offset]);\n\t\t\t\toffset += 1;\n\t\t\t\tswitch (typeCode) {\n\t\t\t\t\tcase \"Y\":\n\t\t\t\t\t\tprops.push(view.getInt16(offset, true));\n\t\t\t\t\t\toffset += 2;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"C\":\n\t\t\t\t\tcase \"B\":\n\t\t\t\t\t\tprops.push(view.getUint8(offset) !== 0);\n\t\t\t\t\t\toffset += 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"I\":\n\t\t\t\t\t\tprops.push(view.getInt32(offset, true));\n\t\t\t\t\t\toffset += 4;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"F\":\n\t\t\t\t\t\tprops.push(view.getFloat32(offset, true));\n\t\t\t\t\t\toffset += 4;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"D\":\n\t\t\t\t\t\tprops.push(view.getFloat64(offset, true));\n\t\t\t\t\t\toffset += 8;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"L\":\n\t\t\t\t\t\tprops.push(Number(view.getBigInt64(offset, true)));\n\t\t\t\t\t\toffset += 8;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"S\": {\n\t\t\t\t\t\tconst len = view.getUint32(offset, true);\n\t\t\t\t\t\toffset += 4;\n\t\t\t\t\t\tconst str = new TextDecoder().decode(u8.subarray(offset, offset + len));\n\t\t\t\t\t\tprops.push(str);\n\t\t\t\t\t\toffset += len;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase \"R\": {\n\t\t\t\t\t\tconst len = view.getUint32(offset, true);\n\t\t\t\t\t\toffset += 4;\n\t\t\t\t\t\tconst raw = u8.subarray(offset, offset + len);\n\t\t\t\t\t\tprops.push(raw);\n\t\t\t\t\t\toffset += len;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase \"f\":\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\tcase \"i\":\n\t\t\t\t\tcase \"l\":\n\t\t\t\t\tcase \"b\":\n\t\t\t\t\tcase \"c\": {\n\t\t\t\t\t\tconst arrayLen = view.getUint32(offset, true);\n\t\t\t\t\t\tconst encoding = view.getUint32(offset + 4, true);\n\t\t\t\t\t\tconst compressedLen = view.getUint32(offset + 8, true);\n\t\t\t\t\t\toffset += 12;\n\t\t\t\t\t\tlet arrayBuffer;\n\t\t\t\t\t\tif (encoding === 1) {\n\t\t\t\t\t\t\tarrayBuffer = inflateSync(u8.subarray(offset, offset + compressedLen));\n\t\t\t\t\t\t\toffset += compressedLen;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tconst totalBytes = arrayLen * (typeCode === \"d\" || typeCode === \"l\" ? 8 : typeCode === \"f\" || typeCode === \"i\" ? 4 : 1);\n\t\t\t\t\t\t\tarrayBuffer = u8.subarray(offset, offset + totalBytes);\n\t\t\t\t\t\t\toffset += totalBytes;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst arrayView = new DataView(arrayBuffer.buffer, arrayBuffer.byteOffset, arrayBuffer.byteLength);\n\t\t\t\t\t\tif (typeCode === \"f\") {\n\t\t\t\t\t\t\tconst arr = new Float32Array(arrayLen);\n\t\t\t\t\t\t\tfor (let k = 0; k < arrayLen; k++) arr[k] = arrayView.getFloat32(k * 4, true);\n\t\t\t\t\t\t\tprops.push(arr);\n\t\t\t\t\t\t} else if (typeCode === \"d\") {\n\t\t\t\t\t\t\tconst arr = new Float64Array(arrayLen);\n\t\t\t\t\t\t\tfor (let k = 0; k < arrayLen; k++) arr[k] = arrayView.getFloat64(k * 8, true);\n\t\t\t\t\t\t\tprops.push(arr);\n\t\t\t\t\t\t} else if (typeCode === \"i\") {\n\t\t\t\t\t\t\tconst arr = new Int32Array(arrayLen);\n\t\t\t\t\t\t\tfor (let k = 0; k < arrayLen; k++) arr[k] = arrayView.getInt32(k * 4, true);\n\t\t\t\t\t\t\tprops.push(arr);\n\t\t\t\t\t\t} else if (typeCode === \"l\") {\n\t\t\t\t\t\t\tconst arr = new Float64Array(arrayLen);\n\t\t\t\t\t\t\tfor (let k = 0; k < arrayLen; k++) arr[k] = Number(arrayView.getBigInt64(k * 8, true));\n\t\t\t\t\t\t\tprops.push(arr);\n\t\t\t\t\t\t} else if (typeCode === \"b\") {\n\t\t\t\t\t\t\tconst arr = new Uint8Array(arrayLen);\n\t\t\t\t\t\t\tfor (let k = 0; k < arrayLen; k++) arr[k] = arrayView.getUint8(k);\n\t\t\t\t\t\t\tprops.push(arr);\n\t\t\t\t\t\t} else props.push(arrayBuffer);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tdefault: break;\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst children = [];\n\t\t\twhile (offset < endOffset) {\n\t\t\t\tconst child = readNode();\n\t\t\t\tif (child) children.push(child);\n\t\t\t\telse break;\n\t\t\t}\n\t\t\toffset = endOffset;\n\t\t\treturn {\n\t\t\t\tname,\n\t\t\t\tprops,\n\t\t\t\tchildren\n\t\t\t};\n\t\t};\n\t\twhile (offset < u8.byteLength - (is64Bit ? 25 : 13)) {\n\t\t\tconst node = readNode();\n\t\t\tif (node) root.children.push(node);\n\t\t\telse break;\n\t\t}\n\t\treturn root;\n\t}\n\t/**\n\t* Parses ASCII FBX format.\n\t*/\n\tstatic parseAscii(text) {\n\t\tconst root = {\n\t\t\tname: \"Root\",\n\t\t\tprops: [],\n\t\t\tchildren: []\n\t\t};\n\t\tconst stack = [root];\n\t\tconst lines = text.split(/\\r?\\n/);\n\t\tfor (let i = 0; i < lines.length; i++) {\n\t\t\tconst line = lines[i]?.trim();\n\t\t\tif (!line || line.startsWith(\";\")) continue;\n\t\t\tif (line === \"}\") {\n\t\t\t\tif (stack.length > 1) stack.pop();\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst colonIdx = line.indexOf(\":\");\n\t\t\tif (colonIdx === -1) continue;\n\t\t\tconst name = line.substring(0, colonIdx).trim();\n\t\t\tconst rest = line.substring(colonIdx + 1).trim();\n\t\t\tconst hasBrace = rest.endsWith(\"{\");\n\t\t\tconst propStr = hasBrace ? rest.slice(0, -1).trim() : rest;\n\t\t\tconst props = [];\n\t\t\tif (propStr) {\n\t\t\t\tconst rawProps = propStr.split(\",\").map((p) => p.trim());\n\t\t\t\tfor (const p of rawProps) if (p.startsWith(\"\\\"\") && p.endsWith(\"\\\"\")) props.push(p.slice(1, -1));\n\t\t\t\telse if (!Number.isNaN(Number(p))) props.push(Number(p));\n\t\t\t\telse props.push(p);\n\t\t\t}\n\t\t\tconst node = {\n\t\t\t\tname,\n\t\t\t\tprops,\n\t\t\t\tchildren: []\n\t\t\t};\n\t\t\tconst parent = stack[stack.length - 1];\n\t\t\tif (parent) parent.children.push(node);\n\t\t\tif (hasBrace) stack.push(node);\n\t\t}\n\t\treturn root;\n\t}\n\t/** Material properties a texture can feed, by the FBX (or Maya / 3ds Max) property name. */\n\tstatic textureSlot(prop) {\n\t\tconst p = prop.toLowerCase();\n\t\tif (p === \"diffusecolor\" || p === \"diffuse\" || p.endsWith(\"|basecolor\") || p.endsWith(\"|base_color\") || p === \"basecolor\") return \"diffuse\";\n\t\tif (p === \"normalmap\" || p.endsWith(\"|normalcamera\") || p.endsWith(\"|bump_map\")) return \"normal\";\n\t}\n\t/**\n\t* Fills a material's diffuse / normal map from its connected Texture\n\t* objects: the bytes embedded in the Video's `Content`, else the file\n\t* named by `RelativeFilename` / `FileName`, looked up next to the model.\n\t*/\n\tstatic attachTextures(material, materialId, objects, connections, basePath) {\n\t\tconst stringChild = (node, name) => {\n\t\t\tconst value = node?.children.find((c) => c.name === name)?.props[0];\n\t\t\treturn typeof value === \"string\" && value ? value : void 0;\n\t\t};\n\t\tfor (const c of connections) {\n\t\t\tif (c.parentId !== materialId || !c.propName) continue;\n\t\t\tconst slot = FbxLoader.textureSlot(c.propName);\n\t\t\tconst texture = objects.get(c.childId);\n\t\t\tif (!slot || texture?.node.name !== \"Texture\") continue;\n\t\t\tif (slot === \"diffuse\" ? material.diffuseTextureBuffer : material.normalTextureBuffer) continue;\n\t\t\tconst video = connections.filter((v) => v.parentId === c.childId && !v.propName).map((v) => objects.get(v.childId)?.node).find((n) => n?.name === \"Video\");\n\t\t\tconst ref = stringChild(texture.node, \"RelativeFilename\") ?? stringChild(texture.node, \"FileName\") ?? stringChild(video, \"RelativeFilename\") ?? stringChild(video, \"Filename\");\n\t\t\tif (ref && !isSupportedTexture(ref)) {\n\t\t\t\twarnMissingTexture(\"FbxLoader\", material.name, ref);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tlet bytes;\n\t\t\tconst content = video?.children.find((n) => n.name === \"Content\")?.props[0];\n\t\t\tif (content instanceof Uint8Array && content.length > 0) bytes = content;\n\t\t\telse if (ref) bytes = readTextureFile(ref, basePath)?.bytes;\n\t\t\tif (!bytes) {\n\t\t\t\tif (ref) warnMissingTexture(\"FbxLoader\", material.name, ref);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (slot === \"diffuse\") {\n\t\t\t\tmaterial.diffuseTextureBuffer = bytes;\n\t\t\t\tmaterial.diffuseTextureMime = textureMime(ref ?? \"\");\n\t\t\t\tif (ref) material.diffuseTexture = ref;\n\t\t\t\tmaterial.textureWrap = \"repeat\";\n\t\t\t} else {\n\t\t\t\tmaterial.normalTextureBuffer = bytes;\n\t\t\t\tif (ref) material.normalTexture = ref;\n\t\t\t}\n\t\t}\n\t}\n\t/**\n\t* Builds ready-to-render Model3DData from parsed FBX node tree.\n\t*/\n\tstatic buildModelFromTree(root, options = {}) {\n\t\tconst objectsNode = root.children.find((c) => c.name === \"Objects\");\n\t\tconst connectionsNode = root.children.find((c) => c.name === \"Connections\");\n\t\tconst objects = /* @__PURE__ */ new Map();\n\t\tif (objectsNode) for (const child of objectsNode.children) {\n\t\t\tconst id = child.props[0] ?? 0;\n\t\t\tconst parts = String(child.props[1] ?? \"\").split(\"::\");\n\t\t\tconst name = parts.length > 1 ? parts[1] : parts[0];\n\t\t\tconst type = String(child.props[2] ?? child.name);\n\t\t\tobjects.set(id, {\n\t\t\t\tid,\n\t\t\t\tname,\n\t\t\t\ttype,\n\t\t\t\tnode: child\n\t\t\t});\n\t\t}\n\t\tconst connections = [];\n\t\tif (connectionsNode) {\n\t\t\tfor (const connNode of connectionsNode.children) if (connNode.name === \"C\" || connNode.name === \"Connect\") {\n\t\t\t\tconst mode = String(connNode.props[0]);\n\t\t\t\tconst childId = connNode.props[1] ?? 0;\n\t\t\t\tconst parentId = connNode.props[2] ?? 0;\n\t\t\t\tconst propName = mode === \"OP\" ? String(connNode.props[3]) : void 0;\n\t\t\t\tconnections.push({\n\t\t\t\t\tchildId,\n\t\t\t\t\tparentId,\n\t\t\t\t\tpropName\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\tconst materialNameForGeometry = (geometryId) => {\n\t\t\tfor (const c of connections) {\n\t\t\t\tconst mat = c.parentId === geometryId ? objects.get(c.childId) : void 0;\n\t\t\t\tif (mat?.node.name === \"Material\" && !c.propName) return mat.name;\n\t\t\t}\n\t\t\tfor (const g$1 of connections) {\n\t\t\t\tif (g$1.childId !== geometryId || g$1.propName) continue;\n\t\t\t\tfor (const m of connections) {\n\t\t\t\t\tif (m.parentId !== g$1.parentId || m.propName) continue;\n\t\t\t\t\tconst mat = objects.get(m.childId);\n\t\t\t\t\tif (mat?.node.name === \"Material\") return mat.name;\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\tconst meshes = [];\n\t\tconst materials = {};\n\t\tfunction extractArrayProp(node) {\n\t\t\tif (!node) return [];\n\t\t\tif (node.props[0] instanceof Float32Array || node.props[0] instanceof Float64Array || node.props[0] instanceof Int32Array || Array.isArray(node.props[0])) return node.props[0];\n\t\t\tconst aChild = node.children.find((c) => c.name === \"a\");\n\t\t\tif (aChild && aChild.props.length > 0) return aChild.props;\n\t\t\tif (Array.isArray(node.props) && node.props.length > 0 && typeof node.props[0] === \"number\") return node.props;\n\t\t\treturn [];\n\t\t}\n\t\tconst modelIds = [...objects.values()].filter((o) => o.node.name === \"Model\").map((o) => o.id);\n\t\tconst nodeIndexById = new Map(modelIds.map((id, i) => [id, i]));\n\t\tconst nodes = modelIds.map((id) => {\n\t\t\tconst model$1 = objects.get(id);\n\t\t\tconst parentConn = connections.find((c) => c.childId === id && !c.propName && nodeIndexById.has(c.parentId));\n\t\t\treturn {\n\t\t\t\tname: model$1.name,\n\t\t\t\tparent: parentConn ? nodeIndexById.get(parentConn.parentId) : -1,\n\t\t\t\ttranslation: readVec3(model$1.node, \"Lcl Translation\", 0),\n\t\t\t\trotation: modelRotation(model$1.node, fbxEulerToQuat(readVec3(model$1.node, \"Lcl Rotation\", 0), rotationOrder(model$1.node))),\n\t\t\t\tscale: readVec3(model$1.node, \"Lcl Scaling\", 1)\n\t\t\t};\n\t\t});\n\t\tconst modelOfGeometry = (geometryId) => connections.find((c) => c.childId === geometryId && !c.propName && nodeIndexById.has(c.parentId))?.parentId;\n\t\tconst skins = [];\n\t\tfor (const [id, entry] of objects) if (entry.node.name === \"Geometry\" && (entry.type === \"Mesh\" || entry.node.props[2] === \"Mesh\" || entry.type === \"\")) {\n\t\t\tconst geomNode = entry.node;\n\t\t\tconst verticesNode = geomNode.children.find((c) => c.name === \"Vertices\");\n\t\t\tconst indicesNode = geomNode.children.find((c) => c.name === \"PolygonVertexIndex\");\n\t\t\tif (!verticesNode || !indicesNode) continue;\n\t\t\tconst rawVerts = extractArrayProp(verticesNode);\n\t\t\tconst rawPolyIndices = extractArrayProp(indicesNode);\n\t\t\tconst layer = (name, data, index, size) => {\n\t\t\t\tconst node = geomNode.children.find((c) => c.name === name);\n\t\t\t\tif (!node) return void 0;\n\t\t\t\treturn layerElement(node, extractArrayProp(node.children.find((c) => c.name === data)), extractArrayProp(node.children.find((c) => c.name === index)), size);\n\t\t\t};\n\t\t\tconst normalAt = layer(\"LayerElementNormal\", \"Normals\", \"NormalsIndex\", 3);\n\t\t\tconst uvAt = layer(\"LayerElementUV\", \"UV\", \"UVIndex\", 2);\n\t\t\tconst corners = [];\n\t\t\tlet polygon = [];\n\t\t\tlet polyIndex = 0;\n\t\t\tfor (let i = 0; i < rawPolyIndices.length; i++) {\n\t\t\t\tconst idx = rawPolyIndices[i];\n\t\t\t\tpolygon.push({\n\t\t\t\t\tcp: idx < 0 ? -(idx + 1) : idx,\n\t\t\t\t\tpv: i\n\t\t\t\t});\n\t\t\t\tif (idx >= 0) continue;\n\t\t\t\tfor (let k = 1; k < polygon.length - 1; k++) for (const c of [\n\t\t\t\t\tpolygon[0],\n\t\t\t\t\tpolygon[k],\n\t\t\t\t\tpolygon[k + 1]\n\t\t\t\t]) corners.push({\n\t\t\t\t\t...c,\n\t\t\t\t\tpoly: polyIndex\n\t\t\t\t});\n\t\t\t\tpolygon = [];\n\t\t\t\tpolyIndex++;\n\t\t\t}\n\t\t\tconst numVerts = corners.length;\n\t\t\tconst outPositions = new Float32Array(numVerts * 3);\n\t\t\tconst outNormals = new Float32Array(numVerts * 3);\n\t\t\tconst outUvs = new Float32Array(numVerts * 2);\n\t\t\tconst outIndices = new Array(numVerts);\n\t\t\tcorners.forEach(({ cp, pv, poly }, v) => {\n\t\t\t\toutPositions[v * 3] = rawVerts[cp * 3] ?? 0;\n\t\t\t\toutPositions[v * 3 + 1] = rawVerts[cp * 3 + 1] ?? 0;\n\t\t\t\toutPositions[v * 3 + 2] = rawVerts[cp * 3 + 2] ?? 0;\n\t\t\t\tconst n = normalAt?.(cp, pv, poly);\n\t\t\t\toutNormals.set(n ?? [\n\t\t\t\t\t0,\n\t\t\t\t\t0,\n\t\t\t\t\t1\n\t\t\t\t], v * 3);\n\t\t\t\tconst uv = uvAt?.(cp, pv, poly);\n\t\t\t\toutUvs[v * 2] = uv?.[0] ?? 0;\n\t\t\t\toutUvs[v * 2 + 1] = 1 - (uv?.[1] ?? 0);\n\t\t\t\toutIndices[v] = v;\n\t\t\t});\n\t\t\tif (!normalAt || options.smoothNormals) {\n\t\t\t\toutNormals.fill(0);\n\t\t\t\taccumulateVertexNormals(outPositions, outIndices, outNormals);\n\t\t\t}\n\t\t\tconst skinConn = connections.find((c) => c.parentId === id && objects.get(c.childId)?.node.name === \"Deformer\" && objects.get(c.childId)?.node.props[2] === \"Skin\");\n\t\t\tlet jointIndices;\n\t\t\tlet jointWeights;\n\t\t\tlet skinIndex;\n\t\t\tif (skinConn) {\n\t\t\t\tconst joints = [];\n\t\t\t\tconst inverseBinds = [];\n\t\t\t\tconst influences = /* @__PURE__ */ new Map();\n\t\t\t\tfor (const cc of connections) {\n\t\t\t\t\tconst cluster = objects.get(cc.childId);\n\t\t\t\t\tif (cc.parentId !== skinConn.childId || cluster?.node.name !== \"Deformer\" || cluster.node.props[2] !== \"Cluster\") continue;\n\t\t\t\t\tconst boneId = connections.find((b) => b.parentId === cluster.id && nodeIndexById.has(b.childId))?.childId;\n\t\t\t\t\tif (boneId === void 0) continue;\n\t\t\t\t\tconst joint = joints.length;\n\t\t\t\t\tjoints.push(nodeIndexById.get(boneId));\n\t\t\t\t\tconst transform = matrixChild(cluster.node, \"Transform\");\n\t\t\t\t\tconst link = matrixChild(cluster.node, \"TransformLink\");\n\t\t\t\t\tinverseBinds.push(...Matrix4Math.multiply(Matrix4Math.invert(link) ?? Matrix4Math.identity(), transform));\n\t\t\t\t\tconst cpIndexes = extractArrayProp(cluster.node.children.find((c) => c.name === \"Indexes\"));\n\t\t\t\t\tconst cpWeights = extractArrayProp(cluster.node.children.find((c) => c.name === \"Weights\"));\n\t\t\t\t\tfor (let k = 0; k < cpIndexes.length; k++) {\n\t\t\t\t\t\tconst weight = Number(cpWeights[k] ?? 0);\n\t\t\t\t\t\tif (!(weight > 0)) continue;\n\t\t\t\t\t\tconst cp = Number(cpIndexes[k]);\n\t\t\t\t\t\tconst list = influences.get(cp) ?? [];\n\t\t\t\t\t\tlist.push([joint, weight]);\n\t\t\t\t\t\tinfluences.set(cp, list);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (joints.length > MAX_JOINTS) throw new Error(`FBX skin has ${joints.length} bones; the mesh shader holds ${MAX_JOINTS}`);\n\t\t\t\tif (joints.length > 0) {\n\t\t\t\t\tskinIndex = skins.length;\n\t\t\t\t\tskins.push({\n\t\t\t\t\t\tjoints,\n\t\t\t\t\t\tinverseBindMatrices: new Float32Array(inverseBinds)\n\t\t\t\t\t});\n\t\t\t\t\tjointIndices = new Float32Array(numVerts * 4);\n\t\t\t\t\tjointWeights = new Float32Array(numVerts * 4);\n\t\t\t\t\tcorners.forEach(({ cp }, v) => {\n\t\t\t\t\t\tconst top = (influences.get(cp) ?? []).sort((a, b) => b[1] - a[1]).slice(0, 4);\n\t\t\t\t\t\tconst total = top.reduce((sum, [, w]) => sum + w, 0);\n\t\t\t\t\t\ttop.forEach(([joint, weight], slot) => {\n\t\t\t\t\t\t\tjointIndices[v * 4 + slot] = joint;\n\t\t\t\t\t\t\tjointWeights[v * 4 + slot] = total > 0 ? weight / total : 0;\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst modelId = modelOfGeometry(id);\n\t\t\tconst isLarge = numVerts > 65535;\n\t\t\tmeshes.push({\n\t\t\t\tid: `fbx_mesh_${id}`,\n\t\t\t\tname: entry.name,\n\t\t\t\tpositions: outPositions,\n\t\t\t\tnormals: outNormals,\n\t\t\t\tuvs: outUvs,\n\t\t\t\tindices: isLarge ? new Uint32Array(outIndices) : new Uint16Array(outIndices),\n\t\t\t\tjointIndices,\n\t\t\t\tjointWeights,\n\t\t\t\tmaterialName: materialNameForGeometry(id) ?? entry.name,\n\t\t\t\tnode: modelId !== void 0 ? nodeIndexById.get(modelId) : void 0,\n\t\t\t\tskin: skinIndex\n\t\t\t});\n\t\t}\n\t\tfor (const [, entry] of objects) if (entry.node.name === \"Material\") {\n\t\t\tconst props70 = entry.node.children.find((c) => c.name === \"Properties70\");\n\t\t\tlet diffuseColor = [\n\t\t\t\t1,\n\t\t\t\t1,\n\t\t\t\t1,\n\t\t\t\t1\n\t\t\t];\n\t\t\tlet shininess = 32;\n\t\t\tlet opacity = 1;\n\t\t\tif (props70) {\n\t\t\t\tfor (const p of props70.children) if (p.name === \"P\") {\n\t\t\t\t\tconst pName = String(p.props[0]);\n\t\t\t\t\tif (pName === \"DiffuseColor\" || pName === \"Color\") diffuseColor = [\n\t\t\t\t\t\tNumber(p.props[4] ?? 1),\n\t\t\t\t\t\tNumber(p.props[5] ?? 1),\n\t\t\t\t\t\tNumber(p.props[6] ?? 1),\n\t\t\t\t\t\t1\n\t\t\t\t\t];\n\t\t\t\t\telse if (pName === \"Shininess\" || pName === \"ShininessExponent\") shininess = Number(p.props[4] ?? 32);\n\t\t\t\t\telse if (pName === \"Opacity\") {\n\t\t\t\t\t\topacity = Number(p.props[4] ?? 1);\n\t\t\t\t\t\tdiffuseColor[3] = opacity;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst material = {\n\t\t\t\tname: entry.name,\n\t\t\t\tdiffuseColor,\n\t\t\t\tshininess,\n\t\t\t\topacity\n\t\t\t};\n\t\t\tFbxLoader.attachTextures(material, entry.id, objects, connections, options.basePath);\n\t\t\tmaterials[entry.name] = material;\n\t\t}\n\t\tconst animations = [];\n\t\tfor (const [id, entry] of objects) if (entry.node.name === \"AnimationStack\") {\n\t\t\tconst stackName = entry.name || \"Take 001\";\n\t\t\tconst tracks = [];\n\t\t\tconst layerConn = connections.find((c) => c.parentId === id && objects.get(c.childId)?.node.name === \"AnimationLayer\");\n\t\t\tif (layerConn) {\n\t\t\t\tconst curveNodeConns = connections.filter((c) => c.parentId === layerConn.childId && objects.get(c.childId)?.node.name === \"AnimationCurveNode\");\n\t\t\t\tconst groups = /* @__PURE__ */ new Map();\n\t\t\t\tfor (const cnc of curveNodeConns) {\n\t\t\t\t\tconst curveNodeObj = objects.get(cnc.childId);\n\t\t\t\t\tif (!curveNodeObj) continue;\n\t\t\t\t\tconst modelConn = connections.find((c) => c.childId === curveNodeObj.id && objects.get(c.parentId)?.node.name === \"Model\");\n\t\t\t\t\tconst targetModel = modelConn ? objects.get(modelConn.parentId) : void 0;\n\t\t\t\t\tconst kind = transformKindFromProperty(modelConn?.propName) ?? transformKindFromProperty(curveNodeObj.name);\n\t\t\t\t\tif (!kind) continue;\n\t\t\t\t\tconst key = `${targetModel?.id ?? curveNodeObj.id}|${kind}`;\n\t\t\t\t\tlet group = groups.get(key);\n\t\t\t\t\tif (!group) {\n\t\t\t\t\t\tconst model$1 = targetModel?.node;\n\t\t\t\t\t\tgroup = {\n\t\t\t\t\t\t\tnodeName: targetModel?.name ?? curveNodeObj.name,\n\t\t\t\t\t\t\tmodelId: targetModel?.id,\n\t\t\t\t\t\t\tmodel: model$1,\n\t\t\t\t\t\t\tkind,\n\t\t\t\t\t\t\tdefaults: staticTransform(model$1, curveNodeObj.node, kind),\n\t\t\t\t\t\t\tchannels: [\n\t\t\t\t\t\t\t\tvoid 0,\n\t\t\t\t\t\t\t\tvoid 0,\n\t\t\t\t\t\t\t\tvoid 0\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t};\n\t\t\t\t\t\tgroups.set(key, group);\n\t\t\t\t\t}\n\t\t\t\t\tconnections.filter((c) => c.parentId === curveNodeObj.id && objects.get(c.childId)?.node.name === \"AnimationCurve\").forEach((cc, order) => {\n\t\t\t\t\t\tconst axis = axisFromProperty(cc.propName) ?? order;\n\t\t\t\t\t\tif (axis > 2) return;\n\t\t\t\t\t\tconst curveObj = objects.get(cc.childId)?.node;\n\t\t\t\t\t\tconst times = extractArrayProp(curveObj?.children.find((c) => c.name === \"KeyTime\"));\n\t\t\t\t\t\tconst values = extractArrayProp(curveObj?.children.find((c) => c.name === \"KeyValueFloat\"));\n\t\t\t\t\t\tconst n = Math.min(times.length, values.length);\n\t\t\t\t\t\tif (n === 0) return;\n\t\t\t\t\t\tgroup.channels[axis] = {\n\t\t\t\t\t\t\ttimes: Array.from(times.slice(0, n), (t) => Number(t)),\n\t\t\t\t\t\t\tvalues: Array.from(values.slice(0, n), (v) => Number(v))\n\t\t\t\t\t\t};\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tfor (const group of groups.values()) {\n\t\t\t\t\tconst track = buildTransformTrack(group);\n\t\t\t\t\tif (!track) continue;\n\t\t\t\t\tif (group.modelId !== void 0) track.node = nodeIndexById.get(group.modelId);\n\t\t\t\t\tif (track.rotations && group.model) for (let k = 0; k < track.rotations.length; k += 4) {\n\t\t\t\t\t\tconst q = Array.from(track.rotations.subarray(k, k + 4));\n\t\t\t\t\t\ttrack.rotations.set(modelRotation(group.model, q), k);\n\t\t\t\t\t}\n\t\t\t\t\ttracks.push(track);\n\t\t\t\t}\n\t\t\t}\n\t\t\tlet maxDuration = 1;\n\t\t\tfor (const t of tracks) if (t.times.length > 0) {\n\t\t\t\tconst lastT = t.times[t.times.length - 1] ?? 0;\n\t\t\t\tif (lastT > maxDuration) maxDuration = lastT;\n\t\t\t}\n\t\t\tanimations.push({\n\t\t\t\tname: stackName,\n\t\t\t\tduration: maxDuration,\n\t\t\t\tfps: 30,\n\t\t\t\ttracks\n\t\t\t});\n\t\t}\n\t\tconst model = {\n\t\t\tmeshes,\n\t\t\tmaterials,\n\t\t\tanimations,\n\t\t\tnodes,\n\t\t\tskins,\n\t\t\tbounds: {\n\t\t\t\tmin: [\n\t\t\t\t\t0,\n\t\t\t\t\t0,\n\t\t\t\t\t0\n\t\t\t\t],\n\t\t\t\tmax: [\n\t\t\t\t\t0,\n\t\t\t\t\t0,\n\t\t\t\t\t0\n\t\t\t\t],\n\t\t\t\tcenter: [\n\t\t\t\t\t0,\n\t\t\t\t\t0,\n\t\t\t\t\t0\n\t\t\t\t],\n\t\t\t\tsize: [\n\t\t\t\t\t0,\n\t\t\t\t\t0,\n\t\t\t\t\t0\n\t\t\t\t],\n\t\t\t\tboundingSphereRadius: 0\n\t\t\t}\n\t\t};\n\t\tconst rest = poseNodes(model, void 0, 0);\n\t\tconst lo = [\n\t\t\tInfinity,\n\t\t\tInfinity,\n\t\t\tInfinity\n\t\t];\n\t\tconst hi = [\n\t\t\t-Infinity,\n\t\t\t-Infinity,\n\t\t\t-Infinity\n\t\t];\n\t\tfor (const mesh of meshes) {\n\t\t\tconst place = mesh.node !== void 0 ? rest[mesh.node] : void 0;\n\t\t\tfor (let i = 0; i < mesh.positions.length; i += 3) {\n\t\t\t\tconst p = [\n\t\t\t\t\tmesh.positions[i],\n\t\t\t\t\tmesh.positions[i + 1],\n\t\t\t\t\tmesh.positions[i + 2]\n\t\t\t\t];\n\t\t\t\tconst q = place ? Matrix4Math.projectPoint(place, p) : p;\n\t\t\t\tfor (let a = 0; a < 3; a++) {\n\t\t\t\t\tif (q[a] < lo[a]) lo[a] = q[a];\n\t\t\t\t\tif (q[a] > hi[a]) hi[a] = q[a];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (!Number.isFinite(lo[0])) {\n\t\t\tlo.fill(-1);\n\t\t\thi.fill(1);\n\t\t}\n\t\tconst { offset, scale } = resolveModelTransform({\n\t\t\tmin: lo,\n\t\t\tmax: hi,\n\t\t\tcenter: [\n\t\t\t\t(lo[0] + hi[0]) * .5,\n\t\t\t\t(lo[1] + hi[1]) * .5,\n\t\t\t\t(lo[2] + hi[2]) * .5\n\t\t\t],\n\t\t\tsize: [\n\t\t\t\thi[0] - lo[0],\n\t\t\t\thi[1] - lo[1],\n\t\t\t\thi[2] - lo[2]\n\t\t\t]\n\t\t}, options);\n\t\tmodel.rootTransform = Matrix4Math.multiply(Matrix4Math.scale(scale[0], scale[1], scale[2]), Matrix4Math.translate(-offset[0], -offset[1], -offset[2]));\n\t\tconst min = [\n\t\t\t0,\n\t\t\t1,\n\t\t\t2\n\t\t].map((a) => (lo[a] - offset[a]) * scale[a]);\n\t\tconst max = [\n\t\t\t0,\n\t\t\t1,\n\t\t\t2\n\t\t].map((a) => (hi[a] - offset[a]) * scale[a]);\n\t\tmodel.bounds = {\n\t\t\tmin,\n\t\t\tmax,\n\t\t\tcenter: [\n\t\t\t\t(min[0] + max[0]) * .5,\n\t\t\t\t(min[1] + max[1]) * .5,\n\t\t\t\t(min[2] + max[2]) * .5\n\t\t\t],\n\t\t\tsize: [\n\t\t\t\tmax[0] - min[0],\n\t\t\t\tmax[1] - min[1],\n\t\t\t\tmax[2] - min[2]\n\t\t\t],\n\t\t\tboundingSphereRadius: Math.hypot(max[0] - min[0], max[1] - min[1], max[2] - min[2]) * .5\n\t\t};\n\t\treturn model;\n\t}\n};\n/** A Properties70 vector (Lcl Translation / Rotation / Scaling), `fallback` where absent. */\nfunction readVec3(node, name, fallback) {\n\tconst v = readProperty70(node, name);\n\treturn [\n\t\t0,\n\t\t1,\n\t\t2\n\t].map((a) => {\n\t\tconst x = v?.[a];\n\t\treturn x !== void 0 && Number.isFinite(x) ? x : fallback;\n\t});\n}\nfunction multiplyQuat(a, b) {\n\treturn [\n\t\ta[3] * b[0] + a[0] * b[3] + a[1] * b[2] - a[2] * b[1],\n\t\ta[3] * b[1] - a[0] * b[2] + a[1] * b[3] + a[2] * b[0],\n\t\ta[3] * b[2] + a[0] * b[1] - a[1] * b[0] + a[2] * b[3],\n\t\ta[3] * b[3] - a[0] * b[0] - a[1] * b[1] - a[2] * b[2]\n\t];\n}\n/**\n* A Model's full local rotation for an Lcl Rotation `q`:\n* PreRotation · q · PostRotation⁻¹ (FBX always applies pre/post in XYZ order).\n*/\nfunction modelRotation(model, q) {\n\tconst pre = readProperty70(model, \"PreRotation\");\n\tconst post = readProperty70(model, \"PostRotation\");\n\tlet out = q;\n\tif (pre) out = multiplyQuat(fbxEulerToQuat(readVec3(model, \"PreRotation\", 0)), out);\n\tif (post) {\n\t\tconst p = fbxEulerToQuat(readVec3(model, \"PostRotation\", 0));\n\t\tout = multiplyQuat(out, [\n\t\t\t-p[0],\n\t\t\t-p[1],\n\t\t\t-p[2],\n\t\t\tp[3]\n\t\t]);\n\t}\n\treturn out;\n}\n/** A 4×4 matrix child (`Transform: *16 { a: … }`), identity when absent. */\nfunction matrixChild(node, name) {\n\tconst child = node.children.find((c) => c.name === name);\n\tconst raw = child?.children.find((c) => c.name === \"a\")?.props ?? child?.props;\n\tconst values = raw?.[0] instanceof Float64Array || raw?.[0] instanceof Float32Array ? Array.from(raw[0]) : (raw ?? []).map(Number);\n\treturn values.length === 16 ? values : Matrix4Math.identity();\n}\n/**\n* A geometry layer (normals, UVs) as a lookup by corner: its mapping says\n* whether values are per control point, per polygon vertex, per polygon or\n* one for all; IndexToDirect layers go through their index array.\n*/\nfunction layerElement(layer, data, index, size) {\n\tif (data.length === 0) return void 0;\n\tconst text = (name) => String(layer.children.find((c) => c.name === name)?.props[0] ?? \"\");\n\tconst mapping = text(\"MappingInformationType\");\n\tconst indexed = /^Index/.test(text(\"ReferenceInformationType\")) && index.length > 0;\n\treturn (cp, pv, poly) => {\n\t\tlet i = mapping === \"ByPolygonVertex\" ? pv : mapping === \"ByPolygon\" ? poly : mapping === \"AllSame\" ? 0 : cp;\n\t\tif (indexed) i = Number(index[i] ?? i);\n\t\treturn Array.from({ length: size }, (_, c) => Number(data[i * size + c] ?? 0));\n\t};\n}\n/**\n* Classifies a curve node from its OP connection property (\"Lcl Translation\",\n* \"Lcl Rotation\", \"Lcl Scaling\") or, failing that, its short name (\"T\", \"R\", \"S\").\n*/\nfunction transformKindFromProperty(name) {\n\tswitch (name) {\n\t\tcase \"Lcl Translation\":\n\t\tcase \"T\": return \"T\";\n\t\tcase \"Lcl Rotation\":\n\t\tcase \"R\": return \"R\";\n\t\tcase \"Lcl Scaling\":\n\t\tcase \"S\": return \"S\";\n\t\tdefault: return;\n\t}\n}\n/** Channel index of a curve from its curve-node connection property (\"d|X\" → 0). */\nfunction axisFromProperty(name) {\n\tswitch (name) {\n\t\tcase \"d|X\": return 0;\n\t\tcase \"d|Y\": return 1;\n\t\tcase \"d|Z\": return 2;\n\t\tdefault: return;\n\t}\n}\n/** Numeric values of a Properties70 `P` entry (they start at props[4]). */\nfunction readProperty70(node, name) {\n\tconst p = (node?.children.find((c) => c.name === \"Properties70\"))?.children.find((c) => c.name === \"P\" && c.props[0] === name);\n\tif (!p) return void 0;\n\treturn p.props.slice(4).map((v) => Number(v));\n}\n/** A model's rest value for one transform, used where a channel has no curve. */\nfunction staticTransform(model, curveNode, kind) {\n\tconst fallback = kind === \"S\" ? 1 : 0;\n\tconst modelProp = readProperty70(model, kind === \"T\" ? \"Lcl Translation\" : kind === \"R\" ? \"Lcl Rotation\" : \"Lcl Scaling\");\n\tconst out = [\n\t\tfallback,\n\t\tfallback,\n\t\tfallback\n\t];\n\tfor (let axis = 0; axis < 3; axis++) {\n\t\tconst fromModel = modelProp?.[axis];\n\t\tconst fromCurveNode = readProperty70(curveNode, `d|${\"XYZ\"[axis]}`)?.[0];\n\t\tconst value = fromModel ?? fromCurveNode;\n\t\tif (value !== void 0 && Number.isFinite(value)) out[axis] = value;\n\t}\n\treturn out;\n}\n/** FBX EOrder enum (Model \"RotationOrder\"): axes in the order they are applied. */\nconst FBX_ROTATION_ORDERS = [\n\t\"XYZ\",\n\t\"XZY\",\n\t\"YZX\",\n\t\"YXZ\",\n\t\"ZXY\",\n\t\"ZYX\"\n];\nfunction rotationOrder(model) {\n\treturn FBX_ROTATION_ORDERS[readProperty70(model, \"RotationOrder\")?.[0] ?? 0] ?? \"XYZ\";\n}\n/**\n* Euler degrees → [x, y, z, w] quaternion. FBX applies the axes in `order`\n* (XYZ: X first, so R = Rz·Ry·Rx).\n*/\nfunction fbxEulerToQuat(degrees, order = \"XYZ\") {\n\tlet q = [\n\t\t0,\n\t\t0,\n\t\t0,\n\t\t1\n\t];\n\tfor (const axisName of order) {\n\t\tconst axis = \"XYZ\".indexOf(axisName);\n\t\tconst half = (degrees[axis] ?? 0) * Math.PI / 360;\n\t\tconst s = Math.sin(half);\n\t\tconst a = [\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\tMath.cos(half)\n\t\t];\n\t\ta[axis] = s;\n\t\tq = [\n\t\t\ta[3] * q[0] + a[0] * q[3] + a[1] * q[2] - a[2] * q[1],\n\t\t\ta[3] * q[1] - a[0] * q[2] + a[1] * q[3] + a[2] * q[0],\n\t\t\ta[3] * q[2] + a[0] * q[1] - a[1] * q[0] + a[2] * q[3],\n\t\t\ta[3] * q[3] - a[0] * q[0] - a[1] * q[1] - a[2] * q[2]\n\t\t];\n\t}\n\treturn q;\n}\n/** Linear sample of a curve at `t` (KTime ticks), clamped to its ends. */\nfunction sampleCurve(curve, t) {\n\tconst { times, values } = curve;\n\tconst last = times.length - 1;\n\tif (t <= times[0]) return values[0];\n\tif (t >= times[last]) return values[last];\n\tlet k = 0;\n\twhile (k < last - 1 && times[k + 1] <= t) k++;\n\tconst t0 = times[k];\n\tconst t1 = times[k + 1];\n\tconst u = t1 > t0 ? (t - t0) / (t1 - t0) : 0;\n\treturn values[k] + (values[k + 1] - values[k]) * u;\n}\n/**\n* Merges a transform's X/Y/Z curves onto one sorted key set: channels without\n* a key at some time are interpolated, channels without a curve keep the\n* static value. Rotations become quaternions in the model's RotationOrder.\n*/\nfunction buildTransformTrack(group) {\n\tconst keySet = /* @__PURE__ */ new Set();\n\tfor (const channel of group.channels) for (const t of channel?.times ?? []) keySet.add(t);\n\tif (keySet.size === 0) return void 0;\n\tconst keys = [...keySet].sort((a, b) => a - b);\n\tconst times = new Float32Array(keys.length);\n\tconst isRotation = group.kind === \"R\";\n\tconst values = new Float32Array(keys.length * (isRotation ? 4 : 3));\n\tconst order = isRotation ? rotationOrder(group.model) : \"XYZ\";\n\tlet prev;\n\tkeys.forEach((key, k) => {\n\t\ttimes[k] = key / FbxLoader.FBX_KTIME;\n\t\tconst v = [\n\t\t\t0,\n\t\t\t1,\n\t\t\t2\n\t\t].map((axis) => {\n\t\t\tconst channel = group.channels[axis];\n\t\t\treturn channel ? sampleCurve(channel, key) : group.defaults[axis];\n\t\t});\n\t\tif (!isRotation) {\n\t\t\tvalues.set(v, k * 3);\n\t\t\treturn;\n\t\t}\n\t\tconst q = fbxEulerToQuat(v, order);\n\t\tif (prev && prev[0] * q[0] + prev[1] * q[1] + prev[2] * q[2] + prev[3] * q[3] < 0) for (let i = 0; i < 4; i++) q[i] = -q[i];\n\t\tprev = q;\n\t\tvalues.set(q, k * 4);\n\t});\n\treturn {\n\t\tnodeName: group.nodeName,\n\t\ttimes,\n\t\ttranslations: group.kind === \"T\" ? values : void 0,\n\t\trotations: isRotation ? values : void 0,\n\t\tscales: group.kind === \"S\" ? values : void 0\n\t};\n}\nfunction parseFBX(bufferOrText, options = {}) {\n\treturn FbxLoader.parse(bufferOrText, options);\n}\nfunction loadFBX(srcOrData, options = {}) {\n\tlet data = srcOrData;\n\tif (typeof srcOrData === \"string\") {\n\t\tconst trimmed = srcOrData.trim();\n\t\tif (!(trimmed.includes(\"FBXHeaderExtension\") || trimmed.includes(\"Kaydara FBX\")) && typeof fs !== \"undefined\" && fs.existsSync) try {\n\t\t\tlet filePath = srcOrData.startsWith(\"file://\") ? srcOrData.slice(7) : srcOrData;\n\t\t\ttry {\n\t\t\t\tfilePath = decodeURIComponent(filePath);\n\t\t\t} catch (_) {}\n\t\t\tif (fs.existsSync(filePath)) {\n\t\t\t\tconst buf = fs.readFileSync(filePath);\n\t\t\t\tdata = new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength);\n\t\t\t\toptions = {\n\t\t\t\t\tbasePath: path.dirname(filePath),\n\t\t\t\t\t...options\n\t\t\t\t};\n\t\t\t}\n\t\t} catch (_) {}\n\t}\n\treturn FbxLoader.parse(data, options);\n}\n\n//#endregion\n//#region src/loaders/stl-loader.ts\nvar StlLoader = class StlLoader {\n\t/**\n\t* Checks if buffer is Binary STL or ASCII STL.\n\t*/\n\tstatic isBinary(buffer) {\n\t\tconst bytes = buffer instanceof Uint8Array ? buffer : new Uint8Array(buffer);\n\t\tif (bytes.length < 84) return false;\n\t\tconst triangleCount = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength).getUint32(80, true);\n\t\tconst expectedBinarySize = 84 + triangleCount * 50;\n\t\tif (bytes.length === expectedBinarySize) return true;\n\t\tconst checkLength = Math.min(bytes.length, 512);\n\t\tfor (let i = 0; i < checkLength; i++) {\n\t\t\tconst b = bytes[i];\n\t\t\tif (b > 127 || b < 32 && b !== 9 && b !== 10 && b !== 13) return true;\n\t\t}\n\t\tconst headerText = new TextDecoder(\"utf-8\").decode(bytes.subarray(0, 80)).trim();\n\t\tif (headerText.startsWith(\"solid\") && !headerText.includes(\"\\n\")) return bytes.length >= 84 + triangleCount * 50;\n\t\treturn !headerText.startsWith(\"solid\");\n\t}\n\t/**\n\t* Parses STL data (binary Uint8Array/ArrayBuffer or ASCII string) into Model3DData.\n\t*/\n\tstatic parse(data, options = {}) {\n\t\tif (typeof data === \"string\") return StlLoader.parseAscii(data, options);\n\t\tconst bytes = data instanceof Uint8Array ? data : new Uint8Array(data);\n\t\tif (StlLoader.isBinary(bytes)) return StlLoader.parseBinary(bytes, options);\n\t\tconst text = new TextDecoder(\"utf-8\").decode(bytes);\n\t\treturn StlLoader.parseAscii(text, options);\n\t}\n\t/**\n\t* Parses Binary STL.\n\t*/\n\tstatic parseBinary(bytes, options = {}) {\n\t\tconst view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);\n\t\tconst triangleCount = view.getUint32(80, true);\n\t\tconst positions = [];\n\t\tconst normals = [];\n\t\tconst indices = [];\n\t\tlet offset = 84;\n\t\tfor (let i = 0; i < triangleCount; i++) {\n\t\t\tif (offset + 50 > bytes.byteLength) break;\n\t\t\tconst nx = view.getFloat32(offset, true);\n\t\t\tconst ny = view.getFloat32(offset + 4, true);\n\t\t\tconst nz = view.getFloat32(offset + 8, true);\n\t\t\toffset += 12;\n\t\t\tconst v0x = view.getFloat32(offset, true);\n\t\t\tconst v0y = view.getFloat32(offset + 4, true);\n\t\t\tconst v0z = view.getFloat32(offset + 8, true);\n\t\t\toffset += 12;\n\t\t\tconst v1x = view.getFloat32(offset, true);\n\t\t\tconst v1y = view.getFloat32(offset + 4, true);\n\t\t\tconst v1z = view.getFloat32(offset + 8, true);\n\t\t\toffset += 12;\n\t\t\tconst v2x = view.getFloat32(offset, true);\n\t\t\tconst v2y = view.getFloat32(offset + 4, true);\n\t\t\tconst v2z = view.getFloat32(offset + 8, true);\n\t\t\toffset += 12;\n\t\t\toffset += 2;\n\t\t\tlet finalNx = nx;\n\t\t\tlet finalNy = ny;\n\t\t\tlet finalNz = nz;\n\t\t\tif (finalNx === 0 && finalNy === 0 && finalNz === 0) {\n\t\t\t\tconst e1 = Vector3Math.subtract([\n\t\t\t\t\tv1x,\n\t\t\t\t\tv1y,\n\t\t\t\t\tv1z\n\t\t\t\t], [\n\t\t\t\t\tv0x,\n\t\t\t\t\tv0y,\n\t\t\t\t\tv0z\n\t\t\t\t]);\n\t\t\t\tconst e2 = Vector3Math.subtract([\n\t\t\t\t\tv2x,\n\t\t\t\t\tv2y,\n\t\t\t\t\tv2z\n\t\t\t\t], [\n\t\t\t\t\tv0x,\n\t\t\t\t\tv0y,\n\t\t\t\t\tv0z\n\t\t\t\t]);\n\t\t\t\tconst fn = Vector3Math.normalize(Vector3Math.cross(e1, e2));\n\t\t\t\tfinalNx = fn[0];\n\t\t\t\tfinalNy = fn[1];\n\t\t\t\tfinalNz = fn[2];\n\t\t\t}\n\t\t\tconst startIdx = positions.length / 3;\n\t\t\tpositions.push(v0x, v0y, v0z, v1x, v1y, v1z, v2x, v2y, v2z);\n\t\t\tnormals.push(finalNx, finalNy, finalNz, finalNx, finalNy, finalNz, finalNx, finalNy, finalNz);\n\t\t\tindices.push(startIdx, startIdx + 1, startIdx + 2);\n\t\t}\n\t\treturn StlLoader.finalizeModel(positions, normals, indices, options);\n\t}\n\t/**\n\t* Parses ASCII STL text.\n\t*/\n\tstatic parseAscii(text, options = {}) {\n\t\tconst positions = [];\n\t\tconst normals = [];\n\t\tconst indices = [];\n\t\tconst lines = text.split(/\\r?\\n/);\n\t\tlet currentNormal = [\n\t\t\t0,\n\t\t\t0,\n\t\t\t1\n\t\t];\n\t\tlet currentVerts = [];\n\t\tfor (const rawLine of lines) {\n\t\t\tconst line = rawLine.trim();\n\t\t\tif (!line) continue;\n\t\t\tif (line.startsWith(\"facet normal\")) {\n\t\t\t\tconst parts = line.split(/\\s+/);\n\t\t\t\tcurrentNormal = [\n\t\t\t\t\tNumber.parseFloat(parts[2] ?? \"0\") || 0,\n\t\t\t\t\tNumber.parseFloat(parts[3] ?? \"0\") || 0,\n\t\t\t\t\tNumber.parseFloat(parts[4] ?? \"0\") || 0\n\t\t\t\t];\n\t\t\t\tcurrentVerts = [];\n\t\t\t} else if (line.startsWith(\"vertex\")) {\n\t\t\t\tconst parts = line.split(/\\s+/);\n\t\t\t\tconst x = Number.parseFloat(parts[1] ?? \"0\") || 0;\n\t\t\t\tconst y = Number.parseFloat(parts[2] ?? \"0\") || 0;\n\t\t\t\tconst z = Number.parseFloat(parts[3] ?? \"0\") || 0;\n\t\t\t\tcurrentVerts.push([\n\t\t\t\t\tx,\n\t\t\t\t\ty,\n\t\t\t\t\tz\n\t\t\t\t]);\n\t\t\t} else if (line.startsWith(\"endfacet\")) {\n\t\t\t\tif (currentVerts.length >= 3) {\n\t\t\t\t\tconst v0 = currentVerts[0];\n\t\t\t\t\tconst v1 = currentVerts[1];\n\t\t\t\t\tconst v2 = currentVerts[2];\n\t\t\t\t\tlet fn = currentNormal;\n\t\t\t\t\tif (fn[0] === 0 && fn[1] === 0 && fn[2] === 0) {\n\t\t\t\t\t\tconst e1 = Vector3Math.subtract(v1, v0);\n\t\t\t\t\t\tconst e2 = Vector3Math.subtract(v2, v0);\n\t\t\t\t\t\tfn = Vector3Math.normalize(Vector3Math.cross(e1, e2));\n\t\t\t\t\t}\n\t\t\t\t\tfor (let i = 1; i < currentVerts.length - 1; i++) {\n\t\t\t\t\t\tconst vi = currentVerts[i];\n\t\t\t\t\t\tconst viNext = currentVerts[i + 1];\n\t\t\t\t\t\tconst startIdx = positions.length / 3;\n\t\t\t\t\t\tpositions.push(v0[0], v0[1], v0[2], vi[0], vi[1], vi[2], viNext[0], viNext[1], viNext[2]);\n\t\t\t\t\t\tnormals.push(fn[0], fn[1], fn[2], fn[0], fn[1], fn[2], fn[0], fn[1], fn[2]);\n\t\t\t\t\t\tindices.push(startIdx, startIdx + 1, startIdx + 2);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tcurrentVerts = [];\n\t\t\t}\n\t\t}\n\t\treturn StlLoader.finalizeModel(positions, normals, indices, options);\n\t}\n\tstatic finalizeModel(rawPositions, rawNormals, rawIndices, options = {}) {\n\t\tconst bounds = computeBounds(rawPositions);\n\t\tconst transform = resolveModelTransform(bounds, options);\n\t\tconst positions = transformPositions(rawPositions, transform);\n\t\tconst [minX, minY] = bounds.min;\n\t\tconst [sizeX, sizeY] = bounds.size;\n\t\tconst uvs = new Float32Array(rawPositions.length / 3 * 2);\n\t\tfor (let i = 0; i < rawPositions.length; i += 3) {\n\t\t\tconst uvIdx = i / 3 * 2;\n\t\t\tuvs[uvIdx] = sizeX > 0 ? (rawPositions[i] - minX) / sizeX : 0;\n\t\t\tuvs[uvIdx + 1] = sizeY > 0 ? (rawPositions[i + 1] - minY) / sizeY : 0;\n\t\t}\n\t\tconst indexArray = createIndexArray(rawIndices, positions.length / 3);\n\t\tconst defaultMaterial = {\n\t\t\tname: \"stl_default\",\n\t\t\tdiffuseColor: [\n\t\t\t\t.8,\n\t\t\t\t.8,\n\t\t\t\t.85,\n\t\t\t\t1\n\t\t\t],\n\t\t\tshininess: 32,\n\t\t\tspecularIntensity: .5,\n\t\t\t...options.defaultMaterial\n\t\t};\n\t\treturn {\n\t\t\tname: \"STL_Model\",\n\t\t\tmeshes: [{\n\t\t\t\tid: \"stl_mesh_0\",\n\t\t\t\tname: \"stl_geometry\",\n\t\t\t\tpositions,\n\t\t\t\tnormals: new Float32Array(rawNormals),\n\t\t\t\tuvs,\n\t\t\t\tindices: indexArray,\n\t\t\t\tmaterialName: \"stl_default\"\n\t\t\t}],\n\t\t\tmaterials: { stl_default: defaultMaterial },\n\t\t\tanimations: [],\n\t\t\tbounds: transformModelBounds(bounds, transform)\n\t\t};\n\t}\n\t/**\n\t* Loads an STL file synchronously or asynchronously from a path or URL.\n\t*/\n\tstatic load(srcOrData, options = {}) {\n\t\tif (typeof srcOrData !== \"string\") return StlLoader.parse(srcOrData, options);\n\t\tif (srcOrData.startsWith(\"/\") || srcOrData.startsWith(\"./\") || srcOrData.startsWith(\"../\") || srcOrData.startsWith(\"file://\")) {\n\t\t\tconst cleanPath = srcOrData.startsWith(\"file://\") ? srcOrData.replace(\"file://\", \"\") : srcOrData;\n\t\t\tconst buf = fs.readFileSync(cleanPath);\n\t\t\treturn StlLoader.parse(buf, options);\n\t\t}\n\t\treturn StlLoader.parse(srcOrData, options);\n\t}\n};\nfunction parseSTL(data, options = {}) {\n\treturn StlLoader.parse(data, options);\n}\nfunction loadSTL(srcOrData, options = {}) {\n\treturn StlLoader.load(srcOrData, options);\n}\n\n//#endregion\n//#region src/loaders/ply-loader.ts\nvar PlyLoader = class PlyLoader {\n\t/**\n\t* Parses PLY data (ASCII string or binary buffer) into Model3DData.\n\t*/\n\tstatic parse(data, options = {}) {\n\t\tconst bytes = typeof data === \"string\" ? new TextEncoder().encode(data) : data instanceof Uint8Array ? data : new Uint8Array(data);\n\t\tconst headerText = PlyLoader.extractHeader(bytes);\n\t\tconst header = PlyLoader.parseHeader(headerText.text);\n\t\tif (header.format === \"ascii\") {\n\t\t\tconst bodyText = new TextDecoder(\"utf-8\").decode(bytes.subarray(headerText.endOffset));\n\t\t\treturn PlyLoader.parseAsciiBody(header, bodyText, options);\n\t\t}\n\t\tconst isLittleEndian = header.format === \"binary_little_endian\";\n\t\treturn PlyLoader.parseBinaryBody(header, bytes.subarray(headerText.endOffset), isLittleEndian, options);\n\t}\n\tstatic extractHeader(bytes) {\n\t\tconst searchLen = Math.min(bytes.length, 1e4);\n\t\tconst slice = bytes.subarray(0, searchLen);\n\t\tconst str = new TextDecoder(\"utf-8\").decode(slice);\n\t\tconst endIdx = str.indexOf(\"end_header\");\n\t\tif (endIdx === -1) throw new Error(\"Invalid PLY file: 'end_header' marker not found\");\n\t\tlet newlineOffset = str.indexOf(\"\\n\", endIdx);\n\t\tif (newlineOffset === -1) newlineOffset = endIdx + 10;\n\t\telse newlineOffset += 1;\n\t\treturn {\n\t\t\ttext: str.substring(0, newlineOffset),\n\t\t\tendOffset: newlineOffset\n\t\t};\n\t}\n\tstatic parseHeader(headerStr) {\n\t\tconst lines = headerStr.split(/\\r?\\n/);\n\t\tlet format = \"ascii\";\n\t\tlet version = \"1.0\";\n\t\tconst elements = [];\n\t\tlet currentElement = null;\n\t\tfor (const rawLine of lines) {\n\t\t\tconst line = rawLine.trim();\n\t\t\tif (!line || line.startsWith(\"comment\")) continue;\n\t\t\tconst parts = line.split(/\\s+/);\n\t\t\tconst cmd = parts[0]?.toLowerCase();\n\t\t\tif (cmd === \"ply\") continue;\n\t\t\tif (cmd === \"format\") {\n\t\t\t\tconst fmt = parts[1]?.toLowerCase();\n\t\t\t\tif (fmt === \"binary_little_endian\") format = \"binary_little_endian\";\n\t\t\t\telse if (fmt === \"binary_big_endian\") format = \"binary_big_endian\";\n\t\t\t\telse format = \"ascii\";\n\t\t\t\tversion = parts[2] ?? \"1.0\";\n\t\t\t} else if (cmd === \"element\") {\n\t\t\t\tcurrentElement = {\n\t\t\t\t\tname: parts[1] ?? \"\",\n\t\t\t\t\tcount: Number.parseInt(parts[2] ?? \"0\", 10),\n\t\t\t\t\tproperties: []\n\t\t\t\t};\n\t\t\t\telements.push(currentElement);\n\t\t\t} else if (cmd === \"property\" && currentElement) if (parts[1]?.toLowerCase() === \"list\") currentElement.properties.push({\n\t\t\t\tname: parts[4] ?? \"\",\n\t\t\t\ttype: \"list\",\n\t\t\t\tisList: true,\n\t\t\t\tcountType: parts[2] ?? \"uchar\",\n\t\t\t\titemType: parts[3] ?? \"int\"\n\t\t\t});\n\t\t\telse currentElement.properties.push({\n\t\t\t\tname: parts[2] ?? \"\",\n\t\t\t\ttype: parts[1]?.toLowerCase() ?? \"float\"\n\t\t\t});\n\t\t\telse if (cmd === \"end_header\") break;\n\t\t}\n\t\treturn {\n\t\t\tformat,\n\t\t\tversion,\n\t\t\telements\n\t\t};\n\t}\n\tstatic parseAsciiBody(header, bodyText, options) {\n\t\tconst vertexElement = header.elements.find((e) => e.name === \"vertex\");\n\t\tconst faceElement = header.elements.find((e) => e.name === \"face\");\n\t\tconst vertexCount = vertexElement?.count ?? 0;\n\t\tconst faceCount = faceElement?.count ?? 0;\n\t\tconst rawPositions = [];\n\t\tconst rawNormals = [];\n\t\tconst rawUvs = [];\n\t\tconst rawColors = [];\n\t\tconst rawIndices = [];\n\t\tconst vProps = vertexElement?.properties ?? [];\n\t\tconst xIdx = vProps.findIndex((p) => p.name === \"x\");\n\t\tconst yIdx = vProps.findIndex((p) => p.name === \"y\");\n\t\tconst zIdx = vProps.findIndex((p) => p.name === \"z\");\n\t\tconst nxIdx = vProps.findIndex((p) => p.name === \"nx\");\n\t\tconst nyIdx = vProps.findIndex((p) => p.name === \"ny\");\n\t\tconst nzIdx = vProps.findIndex((p) => p.name === \"nz\");\n\t\tconst uIdx = vProps.findIndex((p) => p.name === \"u\" || p.name === \"s\" || p.name === \"texture_u\");\n\t\tconst vCoordIdx = vProps.findIndex((p) => p.name === \"v\" || p.name === \"t\" || p.name === \"texture_v\");\n\t\tconst rIdx = vProps.findIndex((p) => p.name === \"red\" || p.name === \"r\");\n\t\tconst gIdx = vProps.findIndex((p) => p.name === \"green\" || p.name === \"g\");\n\t\tconst bIdx = vProps.findIndex((p) => p.name === \"blue\" || p.name === \"b\");\n\t\tconst aIdx = vProps.findIndex((p) => p.name === \"alpha\" || p.name === \"a\");\n\t\tconst hasNormals = nxIdx !== -1 && nyIdx !== -1 && nzIdx !== -1;\n\t\tconst hasColors = rIdx !== -1 && gIdx !== -1 && bIdx !== -1;\n\t\tconst hasUvs = uIdx !== -1 && vCoordIdx !== -1;\n\t\tconst lines = bodyText.trim().split(/\\r?\\n/);\n\t\tlet lineIdx = 0;\n\t\tfor (let v = 0; v < vertexCount; v++) {\n\t\t\tif (lineIdx >= lines.length) break;\n\t\t\tconst line = lines[lineIdx++]?.trim();\n\t\t\tif (!line) continue;\n\t\t\tconst parts = line.split(/\\s+/);\n\t\t\tconst x = Number.parseFloat(parts[xIdx] ?? \"0\") || 0;\n\t\t\tconst y = Number.parseFloat(parts[yIdx] ?? \"0\") || 0;\n\t\t\tconst z = Number.parseFloat(parts[zIdx] ?? \"0\") || 0;\n\t\t\trawPositions.push(x, y, z);\n\t\t\tif (hasNormals) {\n\t\t\t\tconst nx = Number.parseFloat(parts[nxIdx] ?? \"0\") || 0;\n\t\t\t\tconst ny = Number.parseFloat(parts[nyIdx] ?? \"0\") || 0;\n\t\t\t\tconst nz = Number.parseFloat(parts[nzIdx] ?? \"0\") || 0;\n\t\t\t\trawNormals.push(nx, ny, nz);\n\t\t\t} else rawNormals.push(0, 0, 0);\n\t\t\tif (hasUvs) {\n\t\t\t\tconst u = Number.parseFloat(parts[uIdx] ?? \"0\") || 0;\n\t\t\t\tconst vCoord = Number.parseFloat(parts[vCoordIdx] ?? \"0\") || 0;\n\t\t\t\trawUvs.push(u, 1 - vCoord);\n\t\t\t} else rawUvs.push(0, 0);\n\t\t\tif (hasColors) {\n\t\t\t\tconst r = (Number.parseFloat(parts[rIdx] ?? \"255\") || 0) / 255;\n\t\t\t\tconst g$1 = (Number.parseFloat(parts[gIdx] ?? \"255\") || 0) / 255;\n\t\t\t\tconst b = (Number.parseFloat(parts[bIdx] ?? \"255\") || 0) / 255;\n\t\t\t\tconst a = aIdx !== -1 ? (Number.parseFloat(parts[aIdx] ?? \"255\") || 0) / 255 : 1;\n\t\t\t\trawColors.push(r, g$1, b, a);\n\t\t\t}\n\t\t}\n\t\tfor (let f = 0; f < faceCount; f++) {\n\t\t\tif (lineIdx >= lines.length) break;\n\t\t\tconst line = lines[lineIdx++]?.trim();\n\t\t\tif (!line) continue;\n\t\t\tconst parts = line.split(/\\s+/);\n\t\t\tconst n = Number.parseInt(parts[0] ?? \"0\", 10);\n\t\t\tif (n >= 3) {\n\t\t\t\tconst v0 = Number.parseInt(parts[1] ?? \"0\", 10);\n\t\t\t\tfor (let i = 1; i < n - 1; i++) {\n\t\t\t\t\tconst v1 = Number.parseInt(parts[i + 1] ?? \"0\", 10);\n\t\t\t\t\tconst v2 = Number.parseInt(parts[i + 2] ?? \"0\", 10);\n\t\t\t\t\trawIndices.push(v0, v1, v2);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn PlyLoader.finalizeModel(rawPositions, rawNormals, rawUvs, hasColors ? rawColors : void 0, rawIndices, hasNormals, options);\n\t}\n\tstatic parseBinaryBody(header, bodyBytes, isLittleEndian, options) {\n\t\tconst view = new DataView(bodyBytes.buffer, bodyBytes.byteOffset, bodyBytes.byteLength);\n\t\tlet offset = 0;\n\t\tconst vertexElement = header.elements.find((e) => e.name === \"vertex\");\n\t\tconst faceElement = header.elements.find((e) => e.name === \"face\");\n\t\tconst vertexCount = vertexElement?.count ?? 0;\n\t\tconst faceCount = faceElement?.count ?? 0;\n\t\tconst rawPositions = [];\n\t\tconst rawNormals = [];\n\t\tconst rawUvs = [];\n\t\tconst rawColors = [];\n\t\tconst rawIndices = [];\n\t\tconst vProps = vertexElement?.properties ?? [];\n\t\tconst hasNormals = vProps.some((p) => p.name === \"nx\");\n\t\tconst hasColors = vProps.some((p) => p.name === \"red\" || p.name === \"r\");\n\t\tconst readType = (typeStr) => {\n\t\t\tlet val = 0;\n\t\t\tswitch (typeStr.toLowerCase()) {\n\t\t\t\tcase \"char\":\n\t\t\t\tcase \"int8\":\n\t\t\t\t\tval = view.getInt8(offset);\n\t\t\t\t\toffset += 1;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"uchar\":\n\t\t\t\tcase \"uint8\":\n\t\t\t\t\tval = view.getUint8(offset);\n\t\t\t\t\toffset += 1;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"short\":\n\t\t\t\tcase \"int16\":\n\t\t\t\t\tval = view.getInt16(offset, isLittleEndian);\n\t\t\t\t\toffset += 2;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"ushort\":\n\t\t\t\tcase \"uint16\":\n\t\t\t\t\tval = view.getUint16(offset, isLittleEndian);\n\t\t\t\t\toffset += 2;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"int\":\n\t\t\t\tcase \"int32\":\n\t\t\t\t\tval = view.getInt32(offset, isLittleEndian);\n\t\t\t\t\toffset += 4;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"uint\":\n\t\t\t\tcase \"uint32\":\n\t\t\t\t\tval = view.getUint32(offset, isLittleEndian);\n\t\t\t\t\toffset += 4;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"float\":\n\t\t\t\tcase \"float32\":\n\t\t\t\t\tval = view.getFloat32(offset, isLittleEndian);\n\t\t\t\t\toffset += 4;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"double\":\n\t\t\t\tcase \"float64\":\n\t\t\t\t\tval = view.getFloat64(offset, isLittleEndian);\n\t\t\t\t\toffset += 8;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tval = view.getFloat32(offset, isLittleEndian);\n\t\t\t\t\toffset += 4;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn val;\n\t\t};\n\t\tfor (let v = 0; v < vertexCount; v++) {\n\t\t\tlet x = 0, y = 0, z = 0;\n\t\t\tlet nx = 0, ny = 0, nz = 0;\n\t\t\tlet u = 0, vCoord = 0;\n\t\t\tlet r = 1, g$1 = 1, b = 1, a = 1;\n\t\t\tfor (const prop of vProps) {\n\t\t\t\tconst val = readType(prop.type);\n\t\t\t\tconst pName = prop.name.toLowerCase();\n\t\t\t\tif (pName === \"x\") x = val;\n\t\t\t\telse if (pName === \"y\") y = val;\n\t\t\t\telse if (pName === \"z\") z = val;\n\t\t\t\telse if (pName === \"nx\") nx = val;\n\t\t\t\telse if (pName === \"ny\") ny = val;\n\t\t\t\telse if (pName === \"nz\") nz = val;\n\t\t\t\telse if (pName === \"u\" || pName === \"s\") u = val;\n\t\t\t\telse if (pName === \"v\" || pName === \"t\") vCoord = val;\n\t\t\t\telse if (pName === \"red\" || pName === \"r\") r = prop.type.includes(\"int\") ? val / 255 : val;\n\t\t\t\telse if (pName === \"green\" || pName === \"g\") g$1 = prop.type.includes(\"int\") ? val / 255 : val;\n\t\t\t\telse if (pName === \"blue\" || pName === \"b\") b = prop.type.includes(\"int\") ? val / 255 : val;\n\t\t\t\telse if (pName === \"alpha\" || pName === \"a\") a = prop.type.includes(\"int\") ? val / 255 : val;\n\t\t\t}\n\t\t\trawPositions.push(x, y, z);\n\t\t\trawNormals.push(nx, ny, nz);\n\t\t\trawUvs.push(u, 1 - vCoord);\n\t\t\tif (hasColors) rawColors.push(r, g$1, b, a);\n\t\t}\n\t\tconst listProp = (faceElement?.properties ?? []).find((p) => p.isList);\n\t\tfor (let f = 0; f < faceCount; f++) {\n\t\t\tif (offset >= bodyBytes.byteLength) break;\n\t\t\tif (listProp) {\n\t\t\t\tconst count = readType(listProp.countType ?? \"uchar\");\n\t\t\t\tconst verts = [];\n\t\t\t\tfor (let k = 0; k < count; k++) verts.push(readType(listProp.itemType ?? \"int\"));\n\t\t\t\tif (verts.length >= 3) {\n\t\t\t\t\tconst v0 = verts[0];\n\t\t\t\t\tfor (let i = 1; i < verts.length - 1; i++) rawIndices.push(v0, verts[i], verts[i + 1]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn PlyLoader.finalizeModel(rawPositions, rawNormals, rawUvs, hasColors ? rawColors : void 0, rawIndices, hasNormals, options);\n\t}\n\tstatic finalizeModel(rawPositions, rawNormals, rawUvs, rawColors, rawIndices, hasNormals, options) {\n\t\tif (!hasNormals || options.smoothNormals) accumulateVertexNormals(rawPositions, rawIndices, rawNormals);\n\t\tconst bounds = computeBounds(rawPositions);\n\t\tconst transform = resolveModelTransform(bounds, options);\n\t\tconst positions = transformPositions(rawPositions, transform);\n\t\tconst indexArray = createIndexArray(rawIndices, positions.length / 3);\n\t\tconst defaultMaterial = {\n\t\t\tname: \"ply_default\",\n\t\t\tdiffuseColor: rawColors ? [\n\t\t\t\t1,\n\t\t\t\t1,\n\t\t\t\t1,\n\t\t\t\t1\n\t\t\t] : [\n\t\t\t\t.8,\n\t\t\t\t.8,\n\t\t\t\t.85,\n\t\t\t\t1\n\t\t\t],\n\t\t\tshininess: 32,\n\t\t\tspecularIntensity: .5,\n\t\t\t...options.defaultMaterial\n\t\t};\n\t\treturn {\n\t\t\tname: \"PLY_Model\",\n\t\t\tmeshes: [{\n\t\t\t\tid: \"ply_mesh_0\",\n\t\t\t\tname: \"ply_geometry\",\n\t\t\t\tpositions,\n\t\t\t\tnormals: new Float32Array(rawNormals),\n\t\t\t\tuvs: new Float32Array(rawUvs),\n\t\t\t\tcolors: rawColors ? new Float32Array(rawColors) : void 0,\n\t\t\t\tindices: indexArray,\n\t\t\t\tmaterialName: \"ply_default\"\n\t\t\t}],\n\t\t\tmaterials: { ply_default: defaultMaterial },\n\t\t\tanimations: [],\n\t\t\tbounds: transformModelBounds(bounds, transform)\n\t\t};\n\t}\n\t/**\n\t* Loads a PLY file synchronously or asynchronously from a path or URL.\n\t*/\n\tstatic load(srcOrData, options = {}) {\n\t\tif (typeof srcOrData !== \"string\") return PlyLoader.parse(srcOrData, options);\n\t\tif (srcOrData.startsWith(\"/\") || srcOrData.startsWith(\"./\") || srcOrData.startsWith(\"../\") || srcOrData.startsWith(\"file://\")) {\n\t\t\tconst cleanPath = srcOrData.startsWith(\"file://\") ? srcOrData.replace(\"file://\", \"\") : srcOrData;\n\t\t\tconst buf = fs.readFileSync(cleanPath);\n\t\t\treturn PlyLoader.parse(buf, options);\n\t\t}\n\t\treturn PlyLoader.parse(srcOrData, options);\n\t}\n};\nfunction parsePLY(data, options = {}) {\n\treturn PlyLoader.parse(data, options);\n}\nfunction loadPLY(srcOrData, options = {}) {\n\treturn PlyLoader.load(srcOrData, options);\n}\n\n//#endregion\n//#region src/loaders/gltf-loader.ts\nconst COMPONENTS = {\n\tSCALAR: 1,\n\tVEC2: 2,\n\tVEC3: 3,\n\tVEC4: 4,\n\tMAT2: 4,\n\tMAT3: 9,\n\tMAT4: 16\n};\nconst COMPONENT_BYTES = {\n\t5120: 1,\n\t5121: 1,\n\t5122: 2,\n\t5123: 2,\n\t5125: 4,\n\t5126: 4\n};\n/** Reads one component; normalized integers map to [0, 1] (unsigned) or [-1, 1] (signed). */\nfunction componentReader(componentType, normalized = false) {\n\tswitch (componentType) {\n\t\tcase 5120: return normalized ? (dv, at) => Math.max(dv.getInt8(at) / 127, -1) : (dv, at) => dv.getInt8(at);\n\t\tcase 5121: return normalized ? (dv, at) => dv.getUint8(at) / 255 : (dv, at) => dv.getUint8(at);\n\t\tcase 5122: return normalized ? (dv, at) => Math.max(dv.getInt16(at, true) / 32767, -1) : (dv, at) => dv.getInt16(at, true);\n\t\tcase 5123: return normalized ? (dv, at) => dv.getUint16(at, true) / 65535 : (dv, at) => dv.getUint16(at, true);\n\t\tcase 5125: return (dv, at) => dv.getUint32(at, true);\n\t\tdefault: return (dv, at) => dv.getFloat32(at, true);\n\t}\n}\n/** Mesh compression the loader cannot decode: a file that requires it fails with a clear error. */\nconst UNSUPPORTED_REQUIRED_EXTENSIONS = {\n\tKHR_draco_mesh_compression: \"Draco mesh compression\",\n\tEXT_meshopt_compression: \"meshopt compression\"\n};\nconst GLB_MAGIC = 1179937895;\nconst CHUNK_TYPE_JSON = 1313821514;\nconst CHUNK_TYPE_BIN = 5130562;\nvar GltfLoader = class GltfLoader {\n\t/**\n\t* Checks if the given buffer starts with the GLB binary container magic bytes.\n\t*/\n\tstatic isGlb(buffer) {\n\t\tconst bytes = buffer instanceof Uint8Array ? buffer : new Uint8Array(buffer);\n\t\tif (bytes.length < 12) return false;\n\t\treturn new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength).getUint32(0, true) === GLB_MAGIC;\n\t}\n\t/**\n\t* Parses glTF or GLB data into Model3DData.\n\t*/\n\tstatic parse(data, options = {}, basePath) {\n\t\tlet doc;\n\t\tconst binaryBuffers = [];\n\t\tif (typeof data === \"string\") try {\n\t\t\tdoc = JSON.parse(data);\n\t\t} catch (err) {\n\t\t\tthrow new Error(`Failed to parse glTF JSON: ${String(err)}`);\n\t\t}\n\t\telse {\n\t\t\tconst bytes = data instanceof Uint8Array ? data : new Uint8Array(data);\n\t\t\tif (GltfLoader.isGlb(bytes)) {\n\t\t\t\tconst glb = GltfLoader.unpackGlb(bytes);\n\t\t\t\tdoc = glb.doc;\n\t\t\t\tif (glb.binBuffer) binaryBuffers.push(glb.binBuffer);\n\t\t\t} else {\n\t\t\t\tconst text = new TextDecoder(\"utf-8\").decode(bytes);\n\t\t\t\tdoc = JSON.parse(text);\n\t\t\t}\n\t\t}\n\t\tif (doc.buffers) for (let i = 0; i < doc.buffers.length; i++) {\n\t\t\tif (i === 0 && binaryBuffers.length > 0) continue;\n\t\t\tconst buf = doc.buffers[i];\n\t\t\tif (buf.uri) {\n\t\t\t\tif (buf.uri.startsWith(\"data:\")) {\n\t\t\t\t\tconst base64Index = buf.uri.indexOf(\"base64,\");\n\t\t\t\t\tif (base64Index !== -1) {\n\t\t\t\t\t\tconst b64 = buf.uri.substring(base64Index + 7);\n\t\t\t\t\t\tconst rawBuf = Buffer.from(b64, \"base64\");\n\t\t\t\t\t\tbinaryBuffers[i] = new Uint8Array(rawBuf.buffer, rawBuf.byteOffset, rawBuf.byteLength);\n\t\t\t\t\t}\n\t\t\t\t} else if (basePath) {\n\t\t\t\t\tconst resolved = path.isAbsolute(buf.uri) ? buf.uri : path.join(basePath, buf.uri);\n\t\t\t\t\tif (fs.existsSync(resolved)) {\n\t\t\t\t\t\tconst fileBuf = fs.readFileSync(resolved);\n\t\t\t\t\t\tbinaryBuffers[i] = new Uint8Array(fileBuf.buffer, fileBuf.byteOffset, fileBuf.byteLength);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tfor (const ext of doc.extensionsRequired ?? []) {\n\t\t\tconst what = UNSUPPORTED_REQUIRED_EXTENSIONS[ext];\n\t\t\tif (what) throw new Error(`glTF file requires ${ext} (${what}), which framefields cannot decode. Re-export the model without mesh compression (in Blender's glTF exporter, turn off Compression).`);\n\t\t}\n\t\treturn GltfLoader.buildModel(doc, binaryBuffers, options, basePath);\n\t}\n\tstatic unpackGlb(bytes) {\n\t\tconst view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);\n\t\tconst magic = view.getUint32(0, true);\n\t\tconst totalLength = view.getUint32(8, true);\n\t\tif (magic !== GLB_MAGIC) throw new Error(\"Invalid GLB header: magic mismatch\");\n\t\tlet offset = 12;\n\t\tlet doc = null;\n\t\tlet binBuffer;\n\t\twhile (offset < totalLength && offset < bytes.byteLength) {\n\t\t\tconst chunkLength = view.getUint32(offset, true);\n\t\t\tconst chunkType = view.getUint32(offset + 4, true);\n\t\t\toffset += 8;\n\t\t\tconst chunkData = bytes.subarray(offset, offset + chunkLength);\n\t\t\toffset += chunkLength;\n\t\t\tif (chunkType === CHUNK_TYPE_JSON) {\n\t\t\t\tconst jsonStr = new TextDecoder(\"utf-8\").decode(chunkData);\n\t\t\t\tdoc = JSON.parse(jsonStr);\n\t\t\t} else if (chunkType === CHUNK_TYPE_BIN) binBuffer = chunkData;\n\t\t}\n\t\tif (!doc) throw new Error(\"Invalid GLB: JSON chunk not found\");\n\t\treturn {\n\t\t\tdoc,\n\t\t\tbinBuffer\n\t\t};\n\t}\n\t/**\n\t* Reads an accessor as floats: honours interleaved views (byteStride) and\n\t* normalized integer components. Integer data that is not normalized\n\t* (joint indices) keeps its values.\n\t*/\n\tstatic readFloats(doc, binaryBuffers, accessorIndex) {\n\t\tconst accessor = doc.accessors?.[accessorIndex];\n\t\tif (!accessor) throw new Error(`Accessor ${accessorIndex} not found`);\n\t\tconst itemSize = COMPONENTS[accessor.type] ?? 1;\n\t\tconst out = new Float32Array(accessor.count * itemSize);\n\t\tif (accessor.bufferView === void 0) return {\n\t\t\tdata: out,\n\t\t\titemSize,\n\t\t\tcount: accessor.count\n\t\t};\n\t\tconst view = doc.bufferViews?.[accessor.bufferView];\n\t\tif (!view) throw new Error(`BufferView ${accessor.bufferView} not found`);\n\t\tconst raw = binaryBuffers[view.buffer];\n\t\tif (!raw) throw new Error(`Binary buffer ${view.buffer} not loaded`);\n\t\tconst bytes = COMPONENT_BYTES[accessor.componentType] ?? 4;\n\t\tconst stride = view.byteStride ?? bytes * itemSize;\n\t\tconst dv = new DataView(raw.buffer, raw.byteOffset, raw.byteLength);\n\t\tconst base = (view.byteOffset ?? 0) + (accessor.byteOffset ?? 0);\n\t\tconst read = componentReader(accessor.componentType, accessor.normalized);\n\t\tfor (let i = 0; i < accessor.count; i++) for (let c = 0; c < itemSize; c++) out[i * itemSize + c] = read(dv, base + i * stride + c * bytes);\n\t\treturn {\n\t\t\tdata: out,\n\t\t\titemSize,\n\t\t\tcount: accessor.count\n\t\t};\n\t}\n\tstatic readIndices(doc, binaryBuffers, accessorIndex) {\n\t\tconst { data } = GltfLoader.readFloats(doc, binaryBuffers, accessorIndex);\n\t\treturn data.reduce((m, v) => v > m ? v : m, 0) > 65535 ? Uint32Array.from(data) : Uint16Array.from(data);\n\t}\n\t/** An image's encoded bytes, from the binary chunk, a data URI or a file next to the model. */\n\tstatic imageBytes(doc, binaryBuffers, imageIndex, basePath) {\n\t\tconst image = doc.images?.[imageIndex];\n\t\tif (!image) return void 0;\n\t\tif (image.bufferView !== void 0) {\n\t\t\tconst view = doc.bufferViews?.[image.bufferView];\n\t\t\tconst raw = view ? binaryBuffers[view.buffer] : void 0;\n\t\t\tif (!view || !raw) return void 0;\n\t\t\tconst start = view.byteOffset ?? 0;\n\t\t\treturn {\n\t\t\t\tbytes: raw.subarray(start, start + view.byteLength),\n\t\t\t\tmime: image.mimeType ?? \"image/png\"\n\t\t\t};\n\t\t}\n\t\tif (!image.uri) return void 0;\n\t\tif (image.uri.startsWith(\"data:\")) {\n\t\t\tconst comma = image.uri.indexOf(\",\");\n\t\t\tconst mime = image.uri.slice(5, image.uri.indexOf(\";\"));\n\t\t\treturn {\n\t\t\t\tbytes: new Uint8Array(Buffer.from(image.uri.slice(comma + 1), \"base64\")),\n\t\t\t\tmime\n\t\t\t};\n\t\t}\n\t\tif (!basePath) return void 0;\n\t\tconst file = path.isAbsolute(image.uri) ? image.uri : path.join(basePath, decodeURIComponent(image.uri));\n\t\tif (!fs.existsSync(file)) {\n\t\t\tGltfLoader.warn(`Image \"${image.uri}\" was not found next to the model; textures using it are skipped.`);\n\t\t\treturn;\n\t\t}\n\t\treturn {\n\t\t\tbytes: new Uint8Array(fs.readFileSync(file)),\n\t\t\tmime: image.mimeType ?? textureMime(file)\n\t\t};\n\t}\n\tstatic warn(message) {\n\t\tconsole.warn(`[GltfLoader] ${message}`);\n\t}\n\t/** The UV set of a texture reference (KHR_texture_transform may override it). */\n\tstatic texCoordOf(info) {\n\t\treturn info.extensions?.KHR_texture_transform?.texCoord ?? info.texCoord ?? 0;\n\t}\n\t/** The UV set and transform of the material's base color map (else its first map). */\n\tstatic uvPlan(mat) {\n\t\tconst first = [\n\t\t\tmat?.pbrMetallicRoughness?.baseColorTexture,\n\t\t\tmat?.normalTexture,\n\t\t\tmat?.pbrMetallicRoughness?.metallicRoughnessTexture,\n\t\t\tmat?.occlusionTexture,\n\t\t\tmat?.emissiveTexture\n\t\t].find((t) => t !== void 0);\n\t\treturn first ? {\n\t\t\ttexCoord: GltfLoader.texCoordOf(first),\n\t\t\ttransform: first.extensions?.KHR_texture_transform\n\t\t} : { texCoord: 0 };\n\t}\n\t/**\n\t* A texture's decodable image: EXT_texture_webp's source when present.\n\t* KTX2 / Basis (KHR_texture_basisu) and other formats the renderer\n\t* cannot decode are skipped with a warning.\n\t*/\n\tstatic textureImage(doc, binaryBuffers, textureIndex, basePath, label) {\n\t\tconst texture = doc.textures?.[textureIndex];\n\t\tif (!texture) return void 0;\n\t\tconst source = texture.extensions?.EXT_texture_webp?.source ?? texture.source;\n\t\tif (source === void 0) {\n\t\t\tif (texture.extensions?.KHR_texture_basisu) GltfLoader.warn(`${label} is a KTX2 / Basis texture, which framefields cannot decode; it is skipped (use PNG, JPEG or WebP).`);\n\t\t\treturn;\n\t\t}\n\t\tconst image = GltfLoader.imageBytes(doc, binaryBuffers, source, basePath);\n\t\tif (!image) return void 0;\n\t\tif (!SUPPORTED_IMAGE_MIMES.has(image.mime)) {\n\t\t\tGltfLoader.warn(`${label} is ${image.mime}, which framefields cannot decode; it is skipped (use PNG, JPEG or WebP).`);\n\t\t\treturn;\n\t\t}\n\t\tconst sampler = texture.sampler !== void 0 ? doc.samplers?.[texture.sampler] : void 0;\n\t\treturn {\n\t\t\t...image,\n\t\t\tsampler\n\t\t};\n\t}\n\tstatic buildMaterial(doc, binaryBuffers, mat, name, basePath) {\n\t\tconst pbr = mat.pbrMetallicRoughness;\n\t\tconst baseColor = pbr?.baseColorFactor ?? [\n\t\t\t1,\n\t\t\t1,\n\t\t\t1,\n\t\t\t1\n\t\t];\n\t\tconst material = {\n\t\t\tname,\n\t\t\tdiffuseColor: baseColor,\n\t\t\troughness: pbr?.roughnessFactor ?? .5,\n\t\t\tmetallic: pbr?.metallicFactor ?? 0,\n\t\t\tshininess: 32 * (1 - (pbr?.roughnessFactor ?? .5)),\n\t\t\topacity: baseColor[3] ?? 1,\n\t\t\ttwoSided: mat.doubleSided ?? true,\n\t\t\talphaMode: mat.alphaMode === \"MASK\" ? \"mask\" : mat.alphaMode === \"BLEND\" ? \"blend\" : \"opaque\",\n\t\t\talphaCutoff: mat.alphaMode === \"MASK\" ? mat.alphaCutoff ?? .5 : 0\n\t\t};\n\t\tconst e = mat.emissiveFactor;\n\t\tif (e && (e[0] > 0 || e[1] > 0 || e[2] > 0)) {\n\t\t\tmaterial.emissive = [\n\t\t\t\te[0],\n\t\t\t\te[1],\n\t\t\t\te[2]\n\t\t\t];\n\t\t\tmaterial.emissiveStrength = mat.extensions?.KHR_materials_emissive_strength?.emissiveStrength ?? 1;\n\t\t}\n\t\tconst mtoon = mat.extensions?.VRMC_materials_mtoon;\n\t\tif (mtoon) {\n\t\t\tmaterial.shading = \"toon\";\n\t\t\tmaterial.shadeColor = mtoon.shadeColorFactor ?? [\n\t\t\t\t1,\n\t\t\t\t1,\n\t\t\t\t1\n\t\t\t];\n\t\t} else if (mat.extensions?.KHR_materials_unlit) material.shading = \"unlit\";\n\t\tconst plan = GltfLoader.uvPlan(mat);\n\t\tconst image = (info, slot) => {\n\t\t\tif (!info) return void 0;\n\t\t\tconst label = `The ${slot} map of material \"${name}\"`;\n\t\t\tconst set = GltfLoader.texCoordOf(info);\n\t\t\tif (set !== plan.texCoord) {\n\t\t\t\tGltfLoader.warn(`${label} uses UV set ${set}, but the mesh draws with UV set ${plan.texCoord}; the map is skipped.`);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst t = info.extensions?.KHR_texture_transform;\n\t\t\tif (JSON.stringify(t ?? null) !== JSON.stringify(plan.transform ?? null)) GltfLoader.warn(`${label} has a different KHR_texture_transform than the mesh's first map; it is drawn with that one's.`);\n\t\t\treturn GltfLoader.textureImage(doc, binaryBuffers, info.index, basePath, label);\n\t\t};\n\t\tconst base = image(pbr?.baseColorTexture, \"base color\");\n\t\tif (base) {\n\t\t\tmaterial.diffuseTextureBuffer = base.bytes;\n\t\t\tmaterial.diffuseTextureMime = base.mime;\n\t\t\tconst wrap = base.sampler?.wrapS;\n\t\t\tmaterial.textureWrap = wrap === 33071 ? \"clamp\" : wrap === 33648 ? \"mirror\" : \"repeat\";\n\t\t\tif (base.sampler?.magFilter === 9728) material.textureFilter = \"nearest\";\n\t\t}\n\t\tconst mapBytes = (info, slot) => image(info, slot)?.bytes;\n\t\tconst normal = mapBytes(mat.normalTexture, \"normal\");\n\t\tif (normal) {\n\t\t\tmaterial.normalTextureBuffer = normal;\n\t\t\tmaterial.normalScale = mat.normalTexture?.scale ?? 1;\n\t\t}\n\t\tconst mr = mapBytes(pbr?.metallicRoughnessTexture, \"metallic-roughness\");\n\t\tif (mr) {\n\t\t\tmaterial.metallicRoughnessTextureBuffer = mr;\n\t\t\tmaterial.roughness = pbr?.roughnessFactor ?? 1;\n\t\t\tmaterial.metallic = pbr?.metallicFactor ?? 1;\n\t\t}\n\t\tconst occlusion = mapBytes(mat.occlusionTexture, \"occlusion\");\n\t\tif (occlusion) {\n\t\t\tmaterial.occlusionTextureBuffer = occlusion;\n\t\t\tmaterial.occlusionStrength = mat.occlusionTexture?.strength ?? 1;\n\t\t}\n\t\tconst emissiveMap = material.emissive && mapBytes(mat.emissiveTexture, \"emissive\");\n\t\tif (emissiveMap) material.emissiveTextureBuffer = emissiveMap;\n\t\treturn material;\n\t}\n\tstatic buildNodes(doc) {\n\t\tconst nodes = (doc.nodes ?? []).map((n, i) => ({\n\t\t\tname: n.name ?? `node_${i}`,\n\t\t\tparent: -1,\n\t\t\ttranslation: n.translation ?? [\n\t\t\t\t0,\n\t\t\t\t0,\n\t\t\t\t0\n\t\t\t],\n\t\t\trotation: n.rotation ?? [\n\t\t\t\t0,\n\t\t\t\t0,\n\t\t\t\t0,\n\t\t\t\t1\n\t\t\t],\n\t\t\tscale: n.scale ?? [\n\t\t\t\t1,\n\t\t\t\t1,\n\t\t\t\t1\n\t\t\t],\n\t\t\tmatrix: n.matrix ? n.matrix : void 0\n\t\t}));\n\t\t(doc.nodes ?? []).forEach((n, i) => {\n\t\t\tfor (const c of n.children ?? []) {\n\t\t\t\tconst child = nodes[c];\n\t\t\t\tif (child) child.parent = i;\n\t\t\t}\n\t\t});\n\t\treturn nodes;\n\t}\n\tstatic buildAnimations(doc, binaryBuffers, nodes) {\n\t\treturn (doc.animations ?? []).map((animDef, animIdx) => {\n\t\t\tconst tracks = [];\n\t\t\tlet duration = 0;\n\t\t\tfor (const chan of animDef.channels) {\n\t\t\t\tconst sampler = animDef.samplers[chan.sampler];\n\t\t\t\tconst node = chan.target.node;\n\t\t\t\tif (!sampler || node === void 0 || chan.target.path === \"weights\") continue;\n\t\t\t\tconst times = GltfLoader.readFloats(doc, binaryBuffers, sampler.input).data;\n\t\t\t\tconst values = GltfLoader.readFloats(doc, binaryBuffers, sampler.output).data;\n\t\t\t\tduration = Math.max(duration, times[times.length - 1] ?? 0);\n\t\t\t\tconst track = {\n\t\t\t\t\tnodeName: nodes[node]?.name ?? `node_${node}`,\n\t\t\t\t\tnode,\n\t\t\t\t\ttimes,\n\t\t\t\t\tinterpolation: sampler.interpolation === \"STEP\" ? \"step\" : sampler.interpolation === \"CUBICSPLINE\" ? \"cubic\" : \"linear\"\n\t\t\t\t};\n\t\t\t\tif (chan.target.path === \"translation\") track.translations = values;\n\t\t\t\telse if (chan.target.path === \"rotation\") track.rotations = values;\n\t\t\t\telse track.scales = values;\n\t\t\t\ttracks.push(track);\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tname: animDef.name ?? `Animation_${animIdx}`,\n\t\t\t\tduration: duration > 0 ? duration : 1,\n\t\t\t\tfps: 30,\n\t\t\t\ttracks\n\t\t\t};\n\t\t});\n\t}\n\tstatic buildModel(doc, binaryBuffers, options, basePath) {\n\t\tconst materialKeys = (doc.materials ?? []).map((mat, idx, all) => {\n\t\t\tconst name = mat.name ?? `material_${idx}`;\n\t\t\treturn all.findIndex((m, j) => (m.name ?? `material_${j}`) === name) === idx ? name : `${name}#${idx}`;\n\t\t});\n\t\tconst materials = {};\n\t\t(doc.materials ?? []).forEach((mat, idx) => {\n\t\t\tconst key = materialKeys[idx];\n\t\t\tmaterials[key] = GltfLoader.buildMaterial(doc, binaryBuffers, mat, key, basePath);\n\t\t});\n\t\tconst uvPlans = (doc.materials ?? []).map((mat) => GltfLoader.uvPlan(mat));\n\t\tconst nodes = GltfLoader.buildNodes(doc);\n\t\tconst skins = (doc.skins ?? []).map((skin) => ({\n\t\t\tjoints: skin.joints,\n\t\t\tinverseBindMatrices: skin.inverseBindMatrices !== void 0 ? GltfLoader.readFloats(doc, binaryBuffers, skin.inverseBindMatrices).data : Float32Array.from(skin.joints.flatMap(() => Matrix4Math.identity()))\n\t\t}));\n\t\tconst animations = GltfLoader.buildAnimations(doc, binaryBuffers, nodes);\n\t\tconst placed = (doc.nodes ?? []).flatMap((n, node) => n.mesh !== void 0 ? [{\n\t\t\tmesh: n.mesh,\n\t\t\tnode,\n\t\t\tskin: n.skin\n\t\t}] : []);\n\t\tconst instances = placed.length > 0 ? placed : (doc.meshes ?? []).map((_, mesh) => ({ mesh }));\n\t\tconst model = {\n\t\t\tname: \"glTF_Model\",\n\t\t\tmeshes: [],\n\t\t\tmaterials,\n\t\t\tnodes,\n\t\t\tskins,\n\t\t\tanimations,\n\t\t\tbounds: {\n\t\t\t\tmin: [\n\t\t\t\t\t0,\n\t\t\t\t\t0,\n\t\t\t\t\t0\n\t\t\t\t],\n\t\t\t\tmax: [\n\t\t\t\t\t0,\n\t\t\t\t\t0,\n\t\t\t\t\t0\n\t\t\t\t],\n\t\t\t\tcenter: [\n\t\t\t\t\t0,\n\t\t\t\t\t0,\n\t\t\t\t\t0\n\t\t\t\t],\n\t\t\t\tsize: [\n\t\t\t\t\t0,\n\t\t\t\t\t0,\n\t\t\t\t\t0\n\t\t\t\t],\n\t\t\t\tboundingSphereRadius: 0\n\t\t\t}\n\t\t};\n\t\tconst rest = poseNodes(model, void 0, 0);\n\t\tlet minX = Infinity, minY = Infinity, minZ = Infinity;\n\t\tlet maxX = -Infinity, maxY = -Infinity, maxZ = -Infinity;\n\t\tconst grow = (x, y, z) => {\n\t\t\tif (x < minX) minX = x;\n\t\t\tif (x > maxX) maxX = x;\n\t\t\tif (y < minY) minY = y;\n\t\t\tif (y > maxY) maxY = y;\n\t\t\tif (z < minZ) minZ = z;\n\t\t\tif (z > maxZ) maxZ = z;\n\t\t};\n\t\tfor (const inst of instances) {\n\t\t\tconst meshDef = doc.meshes?.[inst.mesh];\n\t\t\tif (!meshDef) continue;\n\t\t\tmeshDef.primitives.forEach((prim, primIdx) => {\n\t\t\t\tif (prim.attributes.POSITION === void 0) return;\n\t\t\t\tif (prim.mode !== void 0 && prim.mode !== 4) return;\n\t\t\t\tconst read = (acc) => acc === void 0 ? void 0 : GltfLoader.readFloats(doc, binaryBuffers, acc);\n\t\t\t\tconst pos = read(prim.attributes.POSITION);\n\t\t\t\tconst numVerts = pos.count;\n\t\t\t\tconst plan = prim.material !== void 0 ? uvPlans[prim.material] : void 0;\n\t\t\t\tconst attributes = prim.attributes;\n\t\t\t\tconst uvs = read(attributes[`TEXCOORD_${plan?.texCoord ?? 0}`])?.data ?? read(prim.attributes.TEXCOORD_0)?.data ?? new Float32Array(numVerts * 2);\n\t\t\t\tif (plan?.transform) applyTextureTransform(uvs, plan.transform);\n\t\t\t\tconst colors = read(prim.attributes.COLOR_0);\n\t\t\t\tlet rgba;\n\t\t\t\tif (colors) {\n\t\t\t\t\trgba = new Float32Array(numVerts * 4).fill(1);\n\t\t\t\t\tfor (let v = 0; v < numVerts; v++) for (let c = 0; c < colors.itemSize; c++) {\n\t\t\t\t\t\tconst value = colors.data[v * colors.itemSize + c] ?? 1;\n\t\t\t\t\t\trgba[v * 4 + c] = c < 3 ? linearToSrgb(value) : value;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tlet indices;\n\t\t\t\tif (prim.indices !== void 0) indices = GltfLoader.readIndices(doc, binaryBuffers, prim.indices);\n\t\t\t\telse {\n\t\t\t\t\tindices = numVerts > 65535 ? new Uint32Array(numVerts) : new Uint16Array(numVerts);\n\t\t\t\t\tfor (let i = 0; i < numVerts; i++) indices[i] = i;\n\t\t\t\t}\n\t\t\t\tconst skinned = inst.skin !== void 0 && prim.attributes.JOINTS_0 !== void 0;\n\t\t\t\tconst place = !skinned && inst.node !== void 0 ? rest[inst.node] : void 0;\n\t\t\t\tfor (let i = 0; i < numVerts; i++) {\n\t\t\t\t\tconst x = pos.data[i * 3];\n\t\t\t\t\tconst y = pos.data[i * 3 + 1];\n\t\t\t\t\tconst z = pos.data[i * 3 + 2];\n\t\t\t\t\tif (place) {\n\t\t\t\t\t\tconst p = Matrix4Math.projectPoint(place, [\n\t\t\t\t\t\t\tx,\n\t\t\t\t\t\t\ty,\n\t\t\t\t\t\t\tz\n\t\t\t\t\t\t]);\n\t\t\t\t\t\tgrow(p[0], p[1], p[2]);\n\t\t\t\t\t} else grow(x, y, z);\n\t\t\t\t}\n\t\t\t\tmodel.meshes.push({\n\t\t\t\t\tid: `gltf_mesh_${inst.mesh}_${primIdx}${inst.node !== void 0 ? `_n${inst.node}` : \"\"}`,\n\t\t\t\t\tname: meshDef.name ?? `Mesh_${inst.mesh}`,\n\t\t\t\t\tpositions: pos.data,\n\t\t\t\t\tnormals: read(prim.attributes.NORMAL)?.data ?? new Float32Array(numVerts * 3),\n\t\t\t\t\tuvs,\n\t\t\t\t\tcolors: rgba,\n\t\t\t\t\tjointIndices: skinned ? read(prim.attributes.JOINTS_0)?.data : void 0,\n\t\t\t\t\tjointWeights: skinned ? read(prim.attributes.WEIGHTS_0)?.data : void 0,\n\t\t\t\t\tindices,\n\t\t\t\t\tmaterialName: prim.material !== void 0 ? materialKeys[prim.material] : void 0,\n\t\t\t\t\tnode: inst.node,\n\t\t\t\t\tskin: skinned ? inst.skin : void 0\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\t\tfor (const skin of skins) if (skin.joints.length > MAX_JOINTS) throw new Error(`glTF skin has ${skin.joints.length} joints; the mesh shader holds ${MAX_JOINTS}`);\n\t\tif (!Number.isFinite(minX)) {\n\t\t\tminX = minY = minZ = 0;\n\t\t\tmaxX = maxY = maxZ = 0;\n\t\t}\n\t\tconst maxDimension = Math.max(maxX - minX, maxY - minY, maxZ - minZ, 1e-4);\n\t\tconst fit = options.normalizeSize && options.normalizeSize > 0 ? options.normalizeSize / maxDimension : 1;\n\t\tconst extra = typeof options.scale === \"number\" ? [\n\t\t\toptions.scale,\n\t\t\toptions.scale,\n\t\t\toptions.scale\n\t\t] : options.scale ?? [\n\t\t\t1,\n\t\t\t1,\n\t\t\t1\n\t\t];\n\t\tconst scale = [\n\t\t\tfit * extra[0],\n\t\t\tfit * extra[1],\n\t\t\tfit * extra[2]\n\t\t];\n\t\tconst offset = options.center ? [\n\t\t\t(minX + maxX) * .5,\n\t\t\t(minY + maxY) * .5,\n\t\t\t(minZ + maxZ) * .5\n\t\t] : [\n\t\t\t0,\n\t\t\t0,\n\t\t\t0\n\t\t];\n\t\tmodel.rootTransform = Matrix4Math.multiply(Matrix4Math.scale(scale[0], scale[1], scale[2]), Matrix4Math.translate(-offset[0], -offset[1], -offset[2]));\n\t\tconst lo = [\n\t\t\t(minX - offset[0]) * scale[0],\n\t\t\t(minY - offset[1]) * scale[1],\n\t\t\t(minZ - offset[2]) * scale[2]\n\t\t];\n\t\tconst hi = [\n\t\t\t(maxX - offset[0]) * scale[0],\n\t\t\t(maxY - offset[1]) * scale[1],\n\t\t\t(maxZ - offset[2]) * scale[2]\n\t\t];\n\t\tmodel.bounds = {\n\t\t\tmin: lo,\n\t\t\tmax: hi,\n\t\t\tcenter: [\n\t\t\t\t(lo[0] + hi[0]) * .5,\n\t\t\t\t(lo[1] + hi[1]) * .5,\n\t\t\t\t(lo[2] + hi[2]) * .5\n\t\t\t],\n\t\t\tsize: [\n\t\t\t\thi[0] - lo[0],\n\t\t\t\thi[1] - lo[1],\n\t\t\t\thi[2] - lo[2]\n\t\t\t],\n\t\t\tboundingSphereRadius: Math.hypot(hi[0] - lo[0], hi[1] - lo[1], hi[2] - lo[2]) * .5\n\t\t};\n\t\treturn model;\n\t}\n\t/**\n\t* Loads a glTF / GLB file synchronously or asynchronously from a path or URL.\n\t*/\n\tstatic load(srcOrData, options = {}) {\n\t\tif (typeof srcOrData !== \"string\") return GltfLoader.parse(srcOrData, options);\n\t\tconst cleanPath = srcOrData.startsWith(\"file://\") ? srcOrData.replace(\"file://\", \"\") : srcOrData;\n\t\tif (srcOrData.startsWith(\"/\") || srcOrData.startsWith(\"./\") || srcOrData.startsWith(\"../\") || srcOrData.startsWith(\"file://\") || !srcOrData.trimStart().startsWith(\"{\") && fs.existsSync(cleanPath)) {\n\t\t\tconst buf = fs.readFileSync(cleanPath);\n\t\t\tconst basePath = path.dirname(cleanPath);\n\t\t\treturn GltfLoader.parse(buf, options, basePath);\n\t\t}\n\t\treturn GltfLoader.parse(srcOrData, options);\n\t}\n};\nfunction parseGLTF(data, options = {}) {\n\treturn GltfLoader.parse(data, options);\n}\nfunction loadGLTF(srcOrData, options = {}) {\n\treturn GltfLoader.load(srcOrData, options);\n}\nfunction parseGLB(data, options = {}) {\n\treturn GltfLoader.parse(data, options);\n}\nfunction loadGLB(srcOrData, options = {}) {\n\treturn GltfLoader.load(srcOrData, options);\n}\nfunction linearToSrgb(c) {\n\tconst x = Math.min(Math.max(c, 0), 1);\n\treturn x <= .0031308 ? x * 12.92 : 1.055 * x ** (1 / 2.4) - .055;\n}\n/** The image types the renderer decodes (sharp). */\nconst SUPPORTED_IMAGE_MIMES = new Set([\n\t\"image/png\",\n\t\"image/jpeg\",\n\t\"image/webp\",\n\t\"image/gif\",\n\t\"image/tiff\",\n\t\"image/avif\"\n]);\n/**\n* Bakes KHR_texture_transform into UVs in place: uv' = T * R * S * uv\n* (offset, then rotation counter-clockwise in UV space, then scale).\n*/\nfunction applyTextureTransform(uvs, { offset = [0, 0], rotation = 0, scale = [1, 1] }) {\n\tconst c = Math.cos(rotation);\n\tconst s = Math.sin(rotation);\n\tfor (let i = 0; i < uvs.length; i += 2) {\n\t\tconst u = uvs[i] * scale[0];\n\t\tconst v = uvs[i + 1] * scale[1];\n\t\tuvs[i] = c * u + s * v + offset[0];\n\t\tuvs[i + 1] = -s * u + c * v + offset[1];\n\t}\n}\n\n//#endregion\n//#region src/loaders/vox-loader.ts\nconst DEFAULT_PALETTE = [[\n\t0,\n\t0,\n\t0,\n\t0\n], ...Array.from({ length: 255 }, (_, i) => {\n\tconst val = (i + 1) / 256;\n\treturn [\n\t\tval,\n\t\tval,\n\t\tval,\n\t\t1\n\t];\n})];\nvar VoxLoader = class VoxLoader {\n\t/**\n\t* Checks if buffer is MagicaVoxel VOX format.\n\t*/\n\tstatic isVox(buffer) {\n\t\tconst bytes = buffer instanceof Uint8Array ? buffer : new Uint8Array(buffer);\n\t\tif (bytes.length < 8) return false;\n\t\treturn new TextDecoder(\"ascii\").decode(bytes.subarray(0, 4)) === \"VOX \";\n\t}\n\t/**\n\t* Parses MagicaVoxel VOX buffer into Model3DData.\n\t*/\n\tstatic parse(data, options = {}) {\n\t\tconst bytes = data instanceof Uint8Array ? data : new Uint8Array(data);\n\t\tconst view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);\n\t\tif (new TextDecoder(\"ascii\").decode(bytes.subarray(0, 4)) !== \"VOX \") throw new Error(\"Invalid VOX file: magic mismatch\");\n\t\tlet offset = 8;\n\t\tlet sizeX = 16, sizeY = 16, sizeZ = 16;\n\t\tconst voxels = [];\n\t\tconst palette = [...DEFAULT_PALETTE];\n\t\twhile (offset + 12 <= bytes.byteLength) {\n\t\t\tconst chunkId = new TextDecoder(\"ascii\").decode(bytes.subarray(offset, offset + 4));\n\t\t\tconst contentSize = view.getUint32(offset + 4, true);\n\t\t\toffset += 12;\n\t\t\tconst chunkDataOffset = offset;\n\t\t\tif (chunkId === \"SIZE\") {\n\t\t\t\tsizeX = view.getUint32(chunkDataOffset, true);\n\t\t\t\tsizeY = view.getUint32(chunkDataOffset + 4, true);\n\t\t\t\tsizeZ = view.getUint32(chunkDataOffset + 8, true);\n\t\t\t} else if (chunkId === \"XYZI\") {\n\t\t\t\tconst numVoxels = view.getUint32(chunkDataOffset, true);\n\t\t\t\tlet vOffset = chunkDataOffset + 4;\n\t\t\t\tfor (let i = 0; i < numVoxels; i++) {\n\t\t\t\t\tif (vOffset + 4 > bytes.byteLength) break;\n\t\t\t\t\tconst x = view.getUint8(vOffset);\n\t\t\t\t\tconst y = view.getUint8(vOffset + 1);\n\t\t\t\t\tconst z = view.getUint8(vOffset + 2);\n\t\t\t\t\tconst colorIndex = view.getUint8(vOffset + 3);\n\t\t\t\t\tvOffset += 4;\n\t\t\t\t\tvoxels.push({\n\t\t\t\t\t\tx,\n\t\t\t\t\t\ty,\n\t\t\t\t\t\tz,\n\t\t\t\t\t\tcolorIndex\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t} else if (chunkId === \"RGBA\") for (let i = 0; i < 256; i++) {\n\t\t\t\tconst cOffset = chunkDataOffset + i * 4;\n\t\t\t\tif (cOffset + 4 > bytes.byteLength) break;\n\t\t\t\tconst r = view.getUint8(cOffset) / 255;\n\t\t\t\tconst g$1 = view.getUint8(cOffset + 1) / 255;\n\t\t\t\tconst b = view.getUint8(cOffset + 2) / 255;\n\t\t\t\tconst a = view.getUint8(cOffset + 3) / 255;\n\t\t\t\tconst paletteIdx = i === 255 ? 0 : i + 1;\n\t\t\t\tpalette[paletteIdx] = [\n\t\t\t\t\tr,\n\t\t\t\t\tg$1,\n\t\t\t\t\tb,\n\t\t\t\t\ta\n\t\t\t\t];\n\t\t\t}\n\t\t\toffset += contentSize;\n\t\t}\n\t\treturn VoxLoader.buildModel(voxels, palette, sizeX, sizeY, sizeZ, options);\n\t}\n\tstatic buildModel(voxels, palette, _sizeX, _sizeY, _sizeZ, options) {\n\t\tconst voxelSet = /* @__PURE__ */ new Set();\n\t\tvoxels.forEach((v) => voxelSet.add(`${v.x},${v.y},${v.z}`));\n\t\tconst rawPositions = [];\n\t\tconst rawNormals = [];\n\t\tconst rawColors = [];\n\t\tconst rawUvs = [];\n\t\tconst rawIndices = [];\n\t\tconst addQuad = (p0, p1, p2, p3, normal, color) => {\n\t\t\tconst startIdx = rawPositions.length / 3;\n\t\t\trawPositions.push(...p0, ...p1, ...p2, ...p3);\n\t\t\trawNormals.push(...normal, ...normal, ...normal, ...normal);\n\t\t\trawColors.push(...color, ...color, ...color, ...color);\n\t\t\trawUvs.push(0, 0, 1, 0, 1, 1, 0, 1);\n\t\t\trawIndices.push(startIdx, startIdx + 1, startIdx + 2, startIdx, startIdx + 2, startIdx + 3);\n\t\t};\n\t\tfor (const v of voxels) {\n\t\t\tconst { x, y, z, colorIndex } = v;\n\t\t\tconst color = palette[colorIndex] ?? [\n\t\t\t\t.8,\n\t\t\t\t.8,\n\t\t\t\t.8,\n\t\t\t\t1\n\t\t\t];\n\t\t\tconst vx = x;\n\t\t\tconst vy = -z;\n\t\t\tconst vz = y;\n\t\t\tif (!voxelSet.has(`${x + 1},${y},${z}`)) addQuad([\n\t\t\t\tvx + 1,\n\t\t\t\tvy,\n\t\t\t\tvz\n\t\t\t], [\n\t\t\t\tvx + 1,\n\t\t\t\tvy - 1,\n\t\t\t\tvz\n\t\t\t], [\n\t\t\t\tvx + 1,\n\t\t\t\tvy - 1,\n\t\t\t\tvz + 1\n\t\t\t], [\n\t\t\t\tvx + 1,\n\t\t\t\tvy,\n\t\t\t\tvz + 1\n\t\t\t], [\n\t\t\t\t1,\n\t\t\t\t0,\n\t\t\t\t0\n\t\t\t], color);\n\t\t\tif (!voxelSet.has(`${x - 1},${y},${z}`)) addQuad([\n\t\t\t\tvx,\n\t\t\t\tvy,\n\t\t\t\tvz + 1\n\t\t\t], [\n\t\t\t\tvx,\n\t\t\t\tvy - 1,\n\t\t\t\tvz + 1\n\t\t\t], [\n\t\t\t\tvx,\n\t\t\t\tvy - 1,\n\t\t\t\tvz\n\t\t\t], [\n\t\t\t\tvx,\n\t\t\t\tvy,\n\t\t\t\tvz\n\t\t\t], [\n\t\t\t\t-1,\n\t\t\t\t0,\n\t\t\t\t0\n\t\t\t], color);\n\t\t\tif (!voxelSet.has(`${x},${y},${z + 1}`)) addQuad([\n\t\t\t\tvx,\n\t\t\t\tvy - 1,\n\t\t\t\tvz\n\t\t\t], [\n\t\t\t\tvx + 1,\n\t\t\t\tvy - 1,\n\t\t\t\tvz\n\t\t\t], [\n\t\t\t\tvx + 1,\n\t\t\t\tvy - 1,\n\t\t\t\tvz + 1\n\t\t\t], [\n\t\t\t\tvx,\n\t\t\t\tvy - 1,\n\t\t\t\tvz + 1\n\t\t\t], [\n\t\t\t\t0,\n\t\t\t\t-1,\n\t\t\t\t0\n\t\t\t], color);\n\t\t\tif (!voxelSet.has(`${x},${y},${z - 1}`)) addQuad([\n\t\t\t\tvx,\n\t\t\t\tvy,\n\t\t\t\tvz + 1\n\t\t\t], [\n\t\t\t\tvx + 1,\n\t\t\t\tvy,\n\t\t\t\tvz + 1\n\t\t\t], [\n\t\t\t\tvx + 1,\n\t\t\t\tvy,\n\t\t\t\tvz\n\t\t\t], [\n\t\t\t\tvx,\n\t\t\t\tvy,\n\t\t\t\tvz\n\t\t\t], [\n\t\t\t\t0,\n\t\t\t\t1,\n\t\t\t\t0\n\t\t\t], color);\n\t\t\tif (!voxelSet.has(`${x},${y + 1},${z}`)) addQuad([\n\t\t\t\tvx + 1,\n\t\t\t\tvy,\n\t\t\t\tvz + 1\n\t\t\t], [\n\t\t\t\tvx + 1,\n\t\t\t\tvy - 1,\n\t\t\t\tvz + 1\n\t\t\t], [\n\t\t\t\tvx,\n\t\t\t\tvy - 1,\n\t\t\t\tvz + 1\n\t\t\t], [\n\t\t\t\tvx,\n\t\t\t\tvy,\n\t\t\t\tvz + 1\n\t\t\t], [\n\t\t\t\t0,\n\t\t\t\t0,\n\t\t\t\t1\n\t\t\t], color);\n\t\t\tif (!voxelSet.has(`${x},${y - 1},${z}`)) addQuad([\n\t\t\t\tvx,\n\t\t\t\tvy,\n\t\t\t\tvz\n\t\t\t], [\n\t\t\t\tvx,\n\t\t\t\tvy - 1,\n\t\t\t\tvz\n\t\t\t], [\n\t\t\t\tvx + 1,\n\t\t\t\tvy - 1,\n\t\t\t\tvz\n\t\t\t], [\n\t\t\t\tvx + 1,\n\t\t\t\tvy,\n\t\t\t\tvz\n\t\t\t], [\n\t\t\t\t0,\n\t\t\t\t0,\n\t\t\t\t-1\n\t\t\t], color);\n\t\t}\n\t\tconst bounds = computeBounds(rawPositions);\n\t\tconst transform = resolveModelTransform(bounds, options);\n\t\tconst positions = transformPositions(rawPositions, transform);\n\t\tconst indexArray = createIndexArray(rawIndices, positions.length / 3);\n\t\tconst defaultMaterial = {\n\t\t\tname: \"vox_default\",\n\t\t\tdiffuseColor: [\n\t\t\t\t1,\n\t\t\t\t1,\n\t\t\t\t1,\n\t\t\t\t1\n\t\t\t],\n\t\t\tshininess: 32,\n\t\t\tspecularIntensity: .4,\n\t\t\t...options.defaultMaterial\n\t\t};\n\t\treturn {\n\t\t\tname: \"VOX_Model\",\n\t\t\tmeshes: [{\n\t\t\t\tid: \"vox_mesh_0\",\n\t\t\t\tname: \"vox_geometry\",\n\t\t\t\tpositions,\n\t\t\t\tnormals: new Float32Array(rawNormals),\n\t\t\t\tuvs: new Float32Array(rawUvs),\n\t\t\t\tcolors: new Float32Array(rawColors),\n\t\t\t\tindices: indexArray,\n\t\t\t\tmaterialName: \"vox_default\"\n\t\t\t}],\n\t\t\tmaterials: { vox_default: defaultMaterial },\n\t\t\tanimations: [],\n\t\t\tbounds: transformModelBounds(bounds, transform)\n\t\t};\n\t}\n\t/**\n\t* Loads a MagicaVoxel VOX file from a buffer, path, or URL.\n\t*/\n\tstatic load(srcOrData, options = {}) {\n\t\tif (typeof srcOrData !== \"string\") return VoxLoader.parse(srcOrData, options);\n\t\tif (srcOrData.startsWith(\"/\") || srcOrData.startsWith(\"./\") || srcOrData.startsWith(\"../\") || srcOrData.startsWith(\"file://\")) {\n\t\t\tconst cleanPath = srcOrData.startsWith(\"file://\") ? srcOrData.replace(\"file://\", \"\") : srcOrData;\n\t\t\tconst buf = fs.readFileSync(cleanPath);\n\t\t\treturn VoxLoader.parse(buf, options);\n\t\t}\n\t\tthrow new Error(\"VOX files must be binary buffers or local file paths\");\n\t}\n};\nfunction parseVOX(data, options = {}) {\n\treturn VoxLoader.parse(data, options);\n}\nfunction loadVOX(srcOrData, options = {}) {\n\treturn VoxLoader.load(srcOrData, options);\n}\n\n//#endregion\n//#region src/loaders/3ds-loader.ts\nconst CHUNK_MAIN = 19789;\nconst CHUNK_3D_EDITOR = 15677;\nconst CHUNK_OBJECT = 16384;\nconst CHUNK_TRIMESH = 16640;\nconst CHUNK_VERTICES = 16656;\nconst CHUNK_FACES = 16672;\nconst CHUNK_TEXCOORDS = 16704;\nconst CHUNK_MATERIAL = 45055;\nconst CHUNK_MATNAME = 40960;\nconst CHUNK_MATDIFFUSE = 40992;\nconst CHUNK_RGB_FLOAT = 16;\nconst CHUNK_RGB_BYTE = 17;\nvar ThreeDSLoader = class ThreeDSLoader {\n\t/**\n\t* Checks if buffer is 3DS binary format.\n\t*/\n\tstatic is3DS(buffer) {\n\t\tconst bytes = buffer instanceof Uint8Array ? buffer : new Uint8Array(buffer);\n\t\tif (bytes.length < 6) return false;\n\t\treturn new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength).getUint16(0, true) === CHUNK_MAIN;\n\t}\n\t/**\n\t* Parses 3DS binary buffer into Model3DData.\n\t*/\n\tstatic parse(data, options = {}) {\n\t\tconst bytes = data instanceof Uint8Array ? data : new Uint8Array(data);\n\t\tconst view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);\n\t\tif (view.getUint16(0, true) !== CHUNK_MAIN) throw new Error(\"Invalid 3DS file: 0x4D4D magic mismatch\");\n\t\tconst meshes = [];\n\t\tconst materials = {};\n\t\tThreeDSLoader.readChunk(view, 0, bytes.byteLength, meshes, materials);\n\t\treturn ThreeDSLoader.buildModel(meshes, materials, options);\n\t}\n\tstatic readChunk(view, startOffset, endOffset, meshes, materials, currentObjectName = \"Object\") {\n\t\tlet offset = startOffset;\n\t\twhile (offset + 6 <= endOffset && offset + 6 <= view.byteLength) {\n\t\t\tconst chunkId = view.getUint16(offset, true);\n\t\t\tconst chunkLength = view.getUint32(offset + 2, true);\n\t\t\tif (chunkLength < 6) break;\n\t\t\tconst nextChunkOffset = offset + chunkLength;\n\t\t\tconst contentStart = offset + 6;\n\t\t\tconst contentEnd = Math.min(nextChunkOffset, endOffset, view.byteLength);\n\t\t\tswitch (chunkId) {\n\t\t\t\tcase CHUNK_MAIN:\n\t\t\t\tcase CHUNK_3D_EDITOR:\n\t\t\t\t\tThreeDSLoader.readChunk(view, contentStart, contentEnd, meshes, materials, currentObjectName);\n\t\t\t\t\tbreak;\n\t\t\t\tcase CHUNK_OBJECT: {\n\t\t\t\t\tlet nameEnd = contentStart;\n\t\t\t\t\twhile (nameEnd < contentEnd && view.getUint8(nameEnd) !== 0) nameEnd++;\n\t\t\t\t\tconst objBytes = new Uint8Array(view.buffer, view.byteOffset + contentStart, nameEnd - contentStart);\n\t\t\t\t\tconst objName = new TextDecoder(\"ascii\").decode(objBytes) || \"Object\";\n\t\t\t\t\tThreeDSLoader.readChunk(view, nameEnd + 1, contentEnd, meshes, materials, objName);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase CHUNK_TRIMESH: {\n\t\t\t\t\tconst mesh = {\n\t\t\t\t\t\tname: currentObjectName,\n\t\t\t\t\t\tpositions: [],\n\t\t\t\t\t\tindices: [],\n\t\t\t\t\t\tuvs: []\n\t\t\t\t\t};\n\t\t\t\t\tThreeDSLoader.readTriMesh(view, contentStart, contentEnd, mesh, materials);\n\t\t\t\t\tif (mesh.positions.length > 0 && mesh.indices.length > 0) meshes.push(mesh);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase CHUNK_MATERIAL:\n\t\t\t\t\tThreeDSLoader.readMaterial(view, contentStart, contentEnd, materials);\n\t\t\t\t\tbreak;\n\t\t\t\tdefault: break;\n\t\t\t}\n\t\t\toffset = nextChunkOffset;\n\t\t}\n\t}\n\tstatic readTriMesh(view, startOffset, endOffset, mesh, _materials) {\n\t\tlet offset = startOffset;\n\t\twhile (offset + 6 <= endOffset) {\n\t\t\tconst chunkId = view.getUint16(offset, true);\n\t\t\tconst chunkLength = view.getUint32(offset + 2, true);\n\t\t\tif (chunkLength < 6) break;\n\t\t\tconst nextChunkOffset = offset + chunkLength;\n\t\t\tconst contentStart = offset + 6;\n\t\t\tif (chunkId === CHUNK_VERTICES) {\n\t\t\t\tconst numVerts = view.getUint16(contentStart, true);\n\t\t\t\tlet vOffset = contentStart + 2;\n\t\t\t\tfor (let i = 0; i < numVerts; i++) {\n\t\t\t\t\tif (vOffset + 12 > endOffset) break;\n\t\t\t\t\tconst x = view.getFloat32(vOffset, true);\n\t\t\t\t\tconst y = view.getFloat32(vOffset + 4, true);\n\t\t\t\t\tconst z = view.getFloat32(vOffset + 8, true);\n\t\t\t\t\tmesh.positions.push(x, y, z);\n\t\t\t\t\tvOffset += 12;\n\t\t\t\t}\n\t\t\t} else if (chunkId === CHUNK_FACES) {\n\t\t\t\tconst numFaces = view.getUint16(contentStart, true);\n\t\t\t\tlet fOffset = contentStart + 2;\n\t\t\t\tfor (let i = 0; i < numFaces; i++) {\n\t\t\t\t\tif (fOffset + 8 > endOffset) break;\n\t\t\t\t\tconst a = view.getUint16(fOffset, true);\n\t\t\t\t\tconst b = view.getUint16(fOffset + 2, true);\n\t\t\t\t\tconst c = view.getUint16(fOffset + 4, true);\n\t\t\t\t\tmesh.indices.push(a, b, c);\n\t\t\t\t\tfOffset += 8;\n\t\t\t\t}\n\t\t\t} else if (chunkId === CHUNK_TEXCOORDS) {\n\t\t\t\tconst numCoords = view.getUint16(contentStart, true);\n\t\t\t\tlet tOffset = contentStart + 2;\n\t\t\t\tfor (let i = 0; i < numCoords; i++) {\n\t\t\t\t\tif (tOffset + 8 > endOffset) break;\n\t\t\t\t\tconst u = view.getFloat32(tOffset, true);\n\t\t\t\t\tconst v = view.getFloat32(tOffset + 4, true);\n\t\t\t\t\tmesh.uvs.push(u, 1 - v);\n\t\t\t\t\ttOffset += 8;\n\t\t\t\t}\n\t\t\t}\n\t\t\toffset = nextChunkOffset;\n\t\t}\n\t}\n\tstatic readMaterial(view, startOffset, endOffset, materials) {\n\t\tlet offset = startOffset;\n\t\tlet matName = \"Material\";\n\t\tlet diffuseColor = [\n\t\t\t.8,\n\t\t\t.8,\n\t\t\t.8,\n\t\t\t1\n\t\t];\n\t\twhile (offset + 6 <= endOffset) {\n\t\t\tconst chunkId = view.getUint16(offset, true);\n\t\t\tconst chunkLength = view.getUint32(offset + 2, true);\n\t\t\tif (chunkLength < 6) break;\n\t\t\tconst nextChunkOffset = offset + chunkLength;\n\t\t\tconst contentStart = offset + 6;\n\t\t\tif (chunkId === CHUNK_MATNAME) {\n\t\t\t\tlet nameEnd = contentStart;\n\t\t\t\twhile (nameEnd < nextChunkOffset && view.getUint8(nameEnd) !== 0) nameEnd++;\n\t\t\t\tconst nameBytes = new Uint8Array(view.buffer, view.byteOffset + contentStart, nameEnd - contentStart);\n\t\t\t\tmatName = new TextDecoder(\"ascii\").decode(nameBytes) || matName;\n\t\t\t} else if (chunkId === CHUNK_MATDIFFUSE) {\n\t\t\t\tif (contentStart + 6 <= nextChunkOffset) {\n\t\t\t\t\tconst colorSubId = view.getUint16(contentStart, true);\n\t\t\t\t\tif (colorSubId === CHUNK_RGB_FLOAT && contentStart + 18 <= nextChunkOffset) diffuseColor = [\n\t\t\t\t\t\tview.getFloat32(contentStart + 6, true),\n\t\t\t\t\t\tview.getFloat32(contentStart + 10, true),\n\t\t\t\t\t\tview.getFloat32(contentStart + 14, true),\n\t\t\t\t\t\t1\n\t\t\t\t\t];\n\t\t\t\t\telse if (colorSubId === CHUNK_RGB_BYTE && contentStart + 9 <= nextChunkOffset) diffuseColor = [\n\t\t\t\t\t\tview.getUint8(contentStart + 6) / 255,\n\t\t\t\t\t\tview.getUint8(contentStart + 7) / 255,\n\t\t\t\t\t\tview.getUint8(contentStart + 8) / 255,\n\t\t\t\t\t\t1\n\t\t\t\t\t];\n\t\t\t\t}\n\t\t\t}\n\t\t\toffset = nextChunkOffset;\n\t\t}\n\t\tmaterials[matName] = {\n\t\t\tname: matName,\n\t\t\tdiffuseColor,\n\t\t\tshininess: 32,\n\t\t\tspecularIntensity: .5\n\t\t};\n\t}\n\tstatic buildModel(rawMeshes, materials, options) {\n\t\tconst bounds = computeBounds(...rawMeshes.map((m) => m.positions));\n\t\tconst transform = resolveModelTransform(bounds, options);\n\t\treturn {\n\t\t\tname: \"3DS_Model\",\n\t\t\tmeshes: rawMeshes.map((m, idx) => {\n\t\t\t\tconst positions = transformPositions(m.positions, transform);\n\t\t\t\tconst normals = new Float32Array(m.positions.length);\n\t\t\t\taccumulateVertexNormals(positions, m.indices, normals);\n\t\t\t\tconst uvs = m.uvs.length === m.positions.length / 3 * 2 ? new Float32Array(m.uvs) : new Float32Array(m.positions.length / 3 * 2);\n\t\t\t\tconst indexArray = createIndexArray(m.indices, positions.length / 3);\n\t\t\t\treturn {\n\t\t\t\t\tid: `3ds_mesh_${idx}`,\n\t\t\t\t\tname: m.name,\n\t\t\t\t\tpositions,\n\t\t\t\t\tnormals,\n\t\t\t\t\tuvs,\n\t\t\t\t\tindices: indexArray,\n\t\t\t\t\tmaterialName: m.materialName\n\t\t\t\t};\n\t\t\t}),\n\t\t\tmaterials,\n\t\t\tanimations: [],\n\t\t\tbounds: transformModelBounds(bounds, transform)\n\t\t};\n\t}\n\t/**\n\t* Loads a 3DS file from a buffer, path, or URL.\n\t*/\n\tstatic load(srcOrData, options = {}) {\n\t\tif (typeof srcOrData !== \"string\") return ThreeDSLoader.parse(srcOrData, options);\n\t\tif (srcOrData.startsWith(\"/\") || srcOrData.startsWith(\"./\") || srcOrData.startsWith(\"../\") || srcOrData.startsWith(\"file://\")) {\n\t\t\tconst cleanPath = srcOrData.startsWith(\"file://\") ? srcOrData.replace(\"file://\", \"\") : srcOrData;\n\t\t\tconst buf = fs.readFileSync(cleanPath);\n\t\t\treturn ThreeDSLoader.parse(buf, options);\n\t\t}\n\t\tthrow new Error(\"3DS files must be binary buffers or local file paths\");\n\t}\n};\nfunction parse3DS(data, options = {}) {\n\treturn ThreeDSLoader.parse(data, options);\n}\nfunction load3DS(srcOrData, options = {}) {\n\treturn ThreeDSLoader.load(srcOrData, options);\n}\n\n//#endregion\n//#region src/loaders/off-loader.ts\nvar OffLoader = class OffLoader {\n\t/**\n\t* Parses OFF text into Model3DData.\n\t*/\n\tstatic parse(data, options = {}) {\n\t\tconst lines = (typeof data === \"string\" ? data : new TextDecoder(\"utf-8\").decode(data instanceof Uint8Array ? data : new Uint8Array(data))).split(/\\r?\\n/);\n\t\tlet lineIdx = 0;\n\t\twhile (lineIdx < lines.length && (!lines[lineIdx].trim() || lines[lineIdx].trim().startsWith(\"#\"))) lineIdx++;\n\t\tif (lineIdx >= lines.length) throw new Error(\"Empty OFF file\");\n\t\tlet headerLine = lines[lineIdx++].trim();\n\t\tlet hasNormals = false;\n\t\tlet hasColors = false;\n\t\tif (headerLine.startsWith(\"NOFF\") || headerLine.startsWith(\"STOFF\")) hasNormals = true;\n\t\telse if (headerLine.startsWith(\"COFF\")) hasColors = true;\n\t\telse if (!headerLine.startsWith(\"OFF\")) throw new Error(\"Invalid OFF header: missing 'OFF'\");\n\t\theaderLine = headerLine.replace(/^(?:ST|CO|NO|C|N)?OFF\\s*/i, \"\").trim();\n\t\tlet numVertices = 0;\n\t\tlet numFaces = 0;\n\t\tif (headerLine.length > 0) {\n\t\t\tconst parts = headerLine.split(/\\s+/);\n\t\t\tnumVertices = Number.parseInt(parts[0] ?? \"0\", 10);\n\t\t\tnumFaces = Number.parseInt(parts[1] ?? \"0\", 10);\n\t\t} else while (lineIdx < lines.length) {\n\t\t\tconst line = lines[lineIdx++].trim();\n\t\t\tif (!line || line.startsWith(\"#\")) continue;\n\t\t\tconst parts = line.split(/\\s+/);\n\t\t\tnumVertices = Number.parseInt(parts[0] ?? \"0\", 10);\n\t\t\tnumFaces = Number.parseInt(parts[1] ?? \"0\", 10);\n\t\t\tbreak;\n\t\t}\n\t\tconst rawPositions = [];\n\t\tconst rawNormals = [];\n\t\tconst rawColors = [];\n\t\tconst rawUvs = [];\n\t\tconst rawIndices = [];\n\t\tlet readVerts = 0;\n\t\twhile (lineIdx < lines.length && readVerts < numVertices) {\n\t\t\tconst line = lines[lineIdx++].trim();\n\t\t\tif (!line || line.startsWith(\"#\")) continue;\n\t\t\tconst parts = line.split(/\\s+/);\n\t\t\tconst x = Number.parseFloat(parts[0] ?? \"0\") || 0;\n\t\t\tconst y = Number.parseFloat(parts[1] ?? \"0\") || 0;\n\t\t\tconst z = Number.parseFloat(parts[2] ?? \"0\") || 0;\n\t\t\trawPositions.push(x, y, z);\n\t\t\tlet propOffset = 3;\n\t\t\tif (hasNormals) {\n\t\t\t\tconst nx = Number.parseFloat(parts[propOffset] ?? \"0\") || 0;\n\t\t\t\tconst ny = Number.parseFloat(parts[propOffset + 1] ?? \"0\") || 0;\n\t\t\t\tconst nz = Number.parseFloat(parts[propOffset + 2] ?? \"0\") || 0;\n\t\t\t\trawNormals.push(nx, ny, nz);\n\t\t\t\tpropOffset += 3;\n\t\t\t} else rawNormals.push(0, 0, 0);\n\t\t\tif (hasColors && parts.length > propOffset) {\n\t\t\t\tconst r = (Number.parseFloat(parts[propOffset] ?? \"255\") || 0) / (Number.parseFloat(parts[propOffset] ?? \"255\") > 1 ? 255 : 1);\n\t\t\t\tconst g$1 = (Number.parseFloat(parts[propOffset + 1] ?? \"255\") || 0) / (Number.parseFloat(parts[propOffset + 1] ?? \"255\") > 1 ? 255 : 1);\n\t\t\t\tconst b = (Number.parseFloat(parts[propOffset + 2] ?? \"255\") || 0) / (Number.parseFloat(parts[propOffset + 2] ?? \"255\") > 1 ? 255 : 1);\n\t\t\t\tconst a = parts.length > propOffset + 3 ? Number.parseFloat(parts[propOffset + 3] ?? \"1\") || 1 : 1;\n\t\t\t\trawColors.push(r, g$1, b, a);\n\t\t\t}\n\t\t\trawUvs.push(0, 0);\n\t\t\treadVerts++;\n\t\t}\n\t\tlet readFaces = 0;\n\t\twhile (lineIdx < lines.length && readFaces < numFaces) {\n\t\t\tconst line = lines[lineIdx++].trim();\n\t\t\tif (!line || line.startsWith(\"#\")) continue;\n\t\t\tconst parts = line.split(/\\s+/);\n\t\t\tconst n = Number.parseInt(parts[0] ?? \"0\", 10);\n\t\t\tif (n >= 3) {\n\t\t\t\tconst v0 = Number.parseInt(parts[1] ?? \"0\", 10);\n\t\t\t\tfor (let i = 1; i < n - 1; i++) {\n\t\t\t\t\tconst v1 = Number.parseInt(parts[i + 1] ?? \"0\", 10);\n\t\t\t\t\tconst v2 = Number.parseInt(parts[i + 2] ?? \"0\", 10);\n\t\t\t\t\trawIndices.push(v0, v1, v2);\n\t\t\t\t}\n\t\t\t}\n\t\t\treadFaces++;\n\t\t}\n\t\tif (!hasNormals || options.smoothNormals) accumulateVertexNormals(rawPositions, rawIndices, rawNormals);\n\t\tconst bounds = computeBounds(rawPositions);\n\t\tconst transform = resolveModelTransform(bounds, options);\n\t\tconst positions = transformPositions(rawPositions, transform);\n\t\tconst indexArray = createIndexArray(rawIndices, positions.length / 3);\n\t\tconst defaultMaterial = {\n\t\t\tname: \"off_default\",\n\t\t\tdiffuseColor: hasColors ? [\n\t\t\t\t1,\n\t\t\t\t1,\n\t\t\t\t1,\n\t\t\t\t1\n\t\t\t] : [\n\t\t\t\t.8,\n\t\t\t\t.8,\n\t\t\t\t.85,\n\t\t\t\t1\n\t\t\t],\n\t\t\tshininess: 32,\n\t\t\tspecularIntensity: .5,\n\t\t\t...options.defaultMaterial\n\t\t};\n\t\treturn {\n\t\t\tname: \"OFF_Model\",\n\t\t\tmeshes: [{\n\t\t\t\tid: \"off_mesh_0\",\n\t\t\t\tname: \"off_geometry\",\n\t\t\t\tpositions,\n\t\t\t\tnormals: new Float32Array(rawNormals),\n\t\t\t\tuvs: new Float32Array(rawUvs),\n\t\t\t\tcolors: hasColors ? new Float32Array(rawColors) : void 0,\n\t\t\t\tindices: indexArray,\n\t\t\t\tmaterialName: \"off_default\"\n\t\t\t}],\n\t\t\tmaterials: { off_default: defaultMaterial },\n\t\t\tanimations: [],\n\t\t\tbounds: transformModelBounds(bounds, transform)\n\t\t};\n\t}\n\t/**\n\t* Loads an OFF file from a string, buffer, or path.\n\t*/\n\tstatic load(srcOrData, options = {}) {\n\t\tif (typeof srcOrData !== \"string\") return OffLoader.parse(srcOrData, options);\n\t\tif (srcOrData.startsWith(\"/\") || srcOrData.startsWith(\"./\") || srcOrData.startsWith(\"../\") || srcOrData.startsWith(\"file://\")) {\n\t\t\tconst cleanPath = srcOrData.startsWith(\"file://\") ? srcOrData.replace(\"file://\", \"\") : srcOrData;\n\t\t\tconst text = fs.readFileSync(cleanPath, \"utf-8\");\n\t\t\treturn OffLoader.parse(text, options);\n\t\t}\n\t\treturn OffLoader.parse(srcOrData, options);\n\t}\n};\nfunction parseOFF(data, options = {}) {\n\treturn OffLoader.parse(data, options);\n}\nfunction loadOFF(srcOrData, options = {}) {\n\treturn OffLoader.load(srcOrData, options);\n}\n\n//#endregion\n//#region src/lut-store.ts\nvar LutStore = class {\n\tdeviceCaches = /* @__PURE__ */ new WeakMap();\n\tdevicePromises = /* @__PURE__ */ new WeakMap();\n\trawDataCache = /* @__PURE__ */ new Map();\n\trawDataPromises = /* @__PURE__ */ new Map();\n\tlisteners = /* @__PURE__ */ new Set();\n\tonChange(listener) {\n\t\tthis.listeners.add(listener);\n\t\treturn () => {\n\t\t\tthis.listeners.delete(listener);\n\t\t};\n\t}\n\temit(key) {\n\t\tfor (const listener of this.listeners) try {\n\t\t\tlistener(key);\n\t\t} catch {}\n\t}\n\tgetAnyMatching(prefix, device) {\n\t\tconst cache = this.getCache(device);\n\t\tconst keys = Array.from(cache.keys());\n\t\tfor (let i = keys.length - 1; i >= 0; i--) {\n\t\t\tconst key = keys[i];\n\t\t\tif (key.startsWith(prefix)) return cache.get(key);\n\t\t}\n\t}\n\tgetOrCreateRawDataPromise(key) {\n\t\tlet deferred = this.rawDataPromises.get(key);\n\t\tif (!deferred) {\n\t\t\tlet resolve$1;\n\t\t\tlet reject;\n\t\t\tdeferred = {\n\t\t\t\tpromise: new Promise((res, rej) => {\n\t\t\t\t\tresolve$1 = res;\n\t\t\t\t\treject = rej;\n\t\t\t\t}),\n\t\t\t\tresolve: resolve$1,\n\t\t\t\treject\n\t\t\t};\n\t\t\tthis.rawDataPromises.set(key, deferred);\n\t\t}\n\t\treturn deferred;\n\t}\n\trejectRawDataPromise(key, error) {\n\t\tconst deferred = this.rawDataPromises.get(key);\n\t\tif (deferred) {\n\t\t\tdeferred.reject(error);\n\t\t\tthis.rawDataPromises.delete(key);\n\t\t}\n\t\tthis.emit(key);\n\t}\n\tgetCache(device) {\n\t\tlet cache = this.deviceCaches.get(device);\n\t\tif (!cache) {\n\t\t\tcache = /* @__PURE__ */ new Map();\n\t\t\tthis.deviceCaches.set(device, cache);\n\t\t}\n\t\treturn cache;\n\t}\n\tgetPromises(device) {\n\t\tlet promises = this.devicePromises.get(device);\n\t\tif (!promises) {\n\t\t\tpromises = /* @__PURE__ */ new Map();\n\t\t\tthis.devicePromises.set(device, promises);\n\t\t}\n\t\treturn promises;\n\t}\n\tget(key, device) {\n\t\treturn this.getCache(device).get(key);\n\t}\n\tset(key, device, lut) {\n\t\tconst cache = this.getCache(device);\n\t\tconst existing = cache.get(key);\n\t\tif (existing && existing !== lut) {\n\t\t\tif (existing.texture !== lut.texture) {\n\t\t\t\tconst oldTex = existing.texture;\n\t\t\t\tdevice.queue.onSubmittedWorkDone().then(() => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\toldTex.destroy();\n\t\t\t\t\t} catch {}\n\t\t\t\t}).catch(() => {});\n\t\t\t}\n\t\t\tif (existing.vertexBuffer !== lut.vertexBuffer) {\n\t\t\t\tconst oldBuf = existing.vertexBuffer;\n\t\t\t\tdevice.queue.onSubmittedWorkDone().then(() => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\toldBuf.destroy();\n\t\t\t\t\t} catch {}\n\t\t\t\t}).catch(() => {});\n\t\t\t}\n\t\t}\n\t\tcache.set(key, lut);\n\t}\n\t/** Get cached raw (device-independent) data for a key. */\n\tgetRawData(key) {\n\t\treturn this.rawDataCache.get(key);\n\t}\n\t/** Get any available raw LUT data from cache. */\n\tgetAnyRawData() {\n\t\tconst values = Array.from(this.rawDataCache.values());\n\t\treturn values[values.length - 1];\n\t}\n\tcreateOrUpdate(key, device, points, size, type) {\n\t\tconst raw = {\n\t\t\tpoints,\n\t\t\tsize,\n\t\t\ttype\n\t\t};\n\t\tthis.rawDataCache.set(key, raw);\n\t\tconst deferred = this.rawDataPromises.get(key);\n\t\tif (deferred) {\n\t\t\tdeferred.resolve(raw);\n\t\t\tthis.rawDataPromises.delete(key);\n\t\t}\n\t\tconst vertices = [];\n\t\tif (type === \"3D\") {\n\t\t\tlet index = 0;\n\t\t\tfor (let b = 0; b < size; b++) for (let g$1 = 0; g$1 < size; g$1++) for (let r = 0; r < size; r++) {\n\t\t\t\tconst inR = r / (size - 1 || 1);\n\t\t\t\tconst inG = g$1 / (size - 1 || 1);\n\t\t\t\tconst inB = b / (size - 1 || 1);\n\t\t\t\tconst outColor = points[index] || [\n\t\t\t\t\tinR,\n\t\t\t\t\tinG,\n\t\t\t\t\tinB\n\t\t\t\t];\n\t\t\t\tindex++;\n\t\t\t\tvertices.push(inR - .5, inG - .5, inB - .5);\n\t\t\t\tvertices.push(outColor[0], outColor[1], outColor[2]);\n\t\t\t}\n\t\t} else for (let i = 0; i < points.length; i++) {\n\t\t\tconst inVal = i / (points.length - 1 || 1);\n\t\t\tconst outColor = points[i];\n\t\t\tvertices.push(inVal - .5, 0, 0);\n\t\t\tvertices.push(outColor[0], outColor[1], outColor[2]);\n\t\t}\n\t\tconst vertexData = new Float32Array(vertices);\n\t\tconst existing = this.get(key, device);\n\t\tlet texture = existing?.texture;\n\t\tif (!texture || existing?.size !== size || existing?.type !== type) {\n\t\t\tif (existing) {\n\t\t\t\tconst oldTex = existing.texture;\n\t\t\t\tdevice.queue.onSubmittedWorkDone().then(() => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\toldTex.destroy();\n\t\t\t\t\t} catch {}\n\t\t\t\t}).catch(() => {});\n\t\t\t}\n\t\t\tif (type === \"3D\") texture = device.createTexture({\n\t\t\t\tsize: [\n\t\t\t\t\tsize,\n\t\t\t\t\tsize,\n\t\t\t\t\tsize\n\t\t\t\t],\n\t\t\t\tdimension: \"3d\",\n\t\t\t\tformat: \"rgba8unorm\",\n\t\t\t\tusage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST\n\t\t\t});\n\t\t\telse texture = device.createTexture({\n\t\t\t\tsize: [\n\t\t\t\t\tsize,\n\t\t\t\t\t1,\n\t\t\t\t\t1\n\t\t\t\t],\n\t\t\t\tdimension: \"1d\",\n\t\t\t\tformat: \"rgba8unorm\",\n\t\t\t\tusage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST\n\t\t\t});\n\t\t}\n\t\tif (type === \"3D\") {\n\t\t\tconst bytesPerPixel = 4;\n\t\t\tconst bytesPerRowPadded = Math.ceil(size * bytesPerPixel / 256) * 256;\n\t\t\tconst data = new Uint8Array(bytesPerRowPadded * size * size);\n\t\t\tlet index = 0;\n\t\t\tfor (let b = 0; b < size; b++) for (let g$1 = 0; g$1 < size; g$1++) for (let r = 0; r < size; r++) {\n\t\t\t\tconst inR = r / (size - 1 || 1);\n\t\t\t\tconst inG = g$1 / (size - 1 || 1);\n\t\t\t\tconst inB = b / (size - 1 || 1);\n\t\t\t\tconst outColor = points[index] || [\n\t\t\t\t\tinR,\n\t\t\t\t\tinG,\n\t\t\t\t\tinB\n\t\t\t\t];\n\t\t\t\tindex++;\n\t\t\t\tconst dstIdx = r * bytesPerPixel + g$1 * bytesPerRowPadded + b * bytesPerRowPadded * size;\n\t\t\t\tdata[dstIdx] = Math.max(0, Math.min(255, Math.round(outColor[0] * 255)));\n\t\t\t\tdata[dstIdx + 1] = Math.max(0, Math.min(255, Math.round(outColor[1] * 255)));\n\t\t\t\tdata[dstIdx + 2] = Math.max(0, Math.min(255, Math.round(outColor[2] * 255)));\n\t\t\t\tdata[dstIdx + 3] = 255;\n\t\t\t}\n\t\t\tdevice.queue.writeTexture({ texture }, data, {\n\t\t\t\tbytesPerRow: bytesPerRowPadded,\n\t\t\t\trowsPerImage: size\n\t\t\t}, [\n\t\t\t\tsize,\n\t\t\t\tsize,\n\t\t\t\tsize\n\t\t\t]);\n\t\t} else {\n\t\t\tconst bytesPerPixel = 4;\n\t\t\tconst data = new Uint8Array(size * bytesPerPixel);\n\t\t\tfor (let i = 0; i < size; i++) {\n\t\t\t\tconst outColor = points[i] || [\n\t\t\t\t\ti / (size - 1 || 1),\n\t\t\t\t\t0,\n\t\t\t\t\t0\n\t\t\t\t];\n\t\t\t\tconst idx = i * bytesPerPixel;\n\t\t\t\tdata[idx] = Math.max(0, Math.min(255, Math.round(outColor[0] * 255)));\n\t\t\t\tdata[idx + 1] = Math.max(0, Math.min(255, Math.round(outColor[1] * 255)));\n\t\t\t\tdata[idx + 2] = Math.max(0, Math.min(255, Math.round(outColor[2] * 255)));\n\t\t\t\tdata[idx + 3] = 255;\n\t\t\t}\n\t\t\tdevice.queue.writeTexture({ texture }, data, {}, [\n\t\t\t\tsize,\n\t\t\t\t1,\n\t\t\t\t1\n\t\t\t]);\n\t\t}\n\t\tlet vertexBuffer = existing?.vertexBuffer;\n\t\tif (!vertexBuffer || vertexBuffer.size < vertexData.byteLength) {\n\t\t\tif (existing) {\n\t\t\t\tconst oldBuf = existing.vertexBuffer;\n\t\t\t\tdevice.queue.onSubmittedWorkDone().then(() => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\toldBuf.destroy();\n\t\t\t\t\t} catch {}\n\t\t\t\t}).catch(() => {});\n\t\t\t}\n\t\t\tvertexBuffer = device.createBuffer({\n\t\t\t\tsize: vertexData.byteLength,\n\t\t\t\tusage: GPUBufferUsage.VERTEX | GPUBufferUsage.COPY_DST\n\t\t\t});\n\t\t}\n\t\tdevice.queue.writeBuffer(vertexBuffer, 0, vertexData);\n\t\tconst lut = {\n\t\t\ttexture,\n\t\t\ttype,\n\t\t\tsize,\n\t\t\tvertexBuffer,\n\t\t\tvertexCount: points.length\n\t\t};\n\t\tthis.set(key, device, lut);\n\t\tthis.emit(key);\n\t\treturn lut;\n\t}\n\tasync getOrLoad(src, device, signal) {\n\t\tif (signal?.aborted) throw new DOMException(\"The operation was aborted.\", \"AbortError\");\n\t\tconst cached = this.get(src, device);\n\t\tif (cached) return cached;\n\t\tconst raw = this.rawDataCache.get(src);\n\t\tif (raw) return this.createOrUpdate(src, device, raw.points, raw.size, raw.type);\n\t\tconst promises = this.getPromises(device);\n\t\tlet promise = promises.get(src);\n\t\tif (!promise) {\n\t\t\tpromise = (async () => {\n\t\t\t\tif (src.startsWith(\"runtime://\")) {\n\t\t\t\t\tconst deferred = this.getOrCreateRawDataPromise(src);\n\t\t\t\t\tlet timeoutId;\n\t\t\t\t\tconst timeoutPromise = new Promise((_, reject) => {\n\t\t\t\t\t\tconst checkTimeout = () => {\n\t\t\t\t\t\t\ttimeoutId = setTimeout(() => {\n\t\t\t\t\t\t\t\tconst isImgOrVidLoading = () => {\n\t\t\t\t\t\t\t\t\tif (typeof window !== \"undefined\") {\n\t\t\t\t\t\t\t\t\t\tconst rendererHandles = window.renderer_delayRenderHandles;\n\t\t\t\t\t\t\t\t\t\tif (Array.isArray(rendererHandles) && rendererHandles.length > 0) return true;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tif (typeof globalThis !== \"undefined\") {\n\t\t\t\t\t\t\t\t\t\tconst gatewaiDelays = globalThis.__GATEWAI_DELAYS__;\n\t\t\t\t\t\t\t\t\t\tif (gatewaiDelays instanceof Set && gatewaiDelays.size > 0) return true;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\tif (isImgOrVidLoading()) checkTimeout();\n\t\t\t\t\t\t\t\telse reject(/* @__PURE__ */ new Error(`Timeout waiting for runtime LUT \"${src}\" after 5000ms.`));\n\t\t\t\t\t\t\t}, 5e3);\n\t\t\t\t\t\t};\n\t\t\t\t\t\tcheckTimeout();\n\t\t\t\t\t});\n\t\t\t\t\tlet onAbort;\n\t\t\t\t\tlet abortPromise;\n\t\t\t\t\tif (signal) abortPromise = new Promise((_, reject) => {\n\t\t\t\t\t\tonAbort = () => {\n\t\t\t\t\t\t\treject(new DOMException(\"The operation was aborted.\", \"AbortError\"));\n\t\t\t\t\t\t};\n\t\t\t\t\t\tsignal.addEventListener(\"abort\", onAbort);\n\t\t\t\t\t});\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst promisesToRace = [deferred.promise, timeoutPromise];\n\t\t\t\t\t\tif (abortPromise) promisesToRace.push(abortPromise);\n\t\t\t\t\t\tconst result = await Promise.race(promisesToRace);\n\t\t\t\t\t\treturn this.createOrUpdate(src, device, result.points, result.size, result.type);\n\t\t\t\t\t} finally {\n\t\t\t\t\t\tclearTimeout(timeoutId);\n\t\t\t\t\t\tif (onAbort && signal) signal.removeEventListener(\"abort\", onAbort);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tconst lines = (await readLutText(src, signal)).split(/\\r?\\n/);\n\t\t\t\tlet size = 33;\n\t\t\t\tlet type = \"3D\";\n\t\t\t\tconst points = [];\n\t\t\t\tfor (const line of lines) {\n\t\t\t\t\tconst trimmed = line.trim();\n\t\t\t\t\tif (!trimmed || trimmed.startsWith(\"#\")) continue;\n\t\t\t\t\tif (trimmed.startsWith(\"LUT_3D_SIZE\")) {\n\t\t\t\t\t\tconst parts$1 = trimmed.split(/\\s+/);\n\t\t\t\t\t\tsize = parseInt(parts$1[1], 10);\n\t\t\t\t\t\ttype = \"3D\";\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tif (trimmed.startsWith(\"LUT_1D_SIZE\")) {\n\t\t\t\t\t\tconst parts$1 = trimmed.split(/\\s+/);\n\t\t\t\t\t\tsize = parseInt(parts$1[1], 10);\n\t\t\t\t\t\ttype = \"1D\";\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tif (trimmed.match(/^[a-zA-Z]/)) continue;\n\t\t\t\t\tconst parts = trimmed.split(/\\s+/).map(Number);\n\t\t\t\t\tif (parts.length === 3 && parts.every((n) => !isNaN(n))) points.push([\n\t\t\t\t\t\tparts[0],\n\t\t\t\t\t\tparts[1],\n\t\t\t\t\t\tparts[2]\n\t\t\t\t\t]);\n\t\t\t\t}\n\t\t\t\tif (points.length === 0) throw new Error(\"No valid color mappings found in LUT file.\");\n\t\t\t\treturn this.createOrUpdate(src, device, points, size, type);\n\t\t\t})();\n\t\t\tpromises.set(src, promise);\n\t\t\tpromise.catch(() => {\n\t\t\t\tpromises.delete(src);\n\t\t\t});\n\t\t}\n\t\treturn promise;\n\t}\n\tevict(key, device) {\n\t\tconst cache = this.getCache(device);\n\t\tconst cached = cache.get(key);\n\t\tif (cached) {\n\t\t\tconst oldTex = cached.texture;\n\t\t\tconst oldBuf = cached.vertexBuffer;\n\t\t\tdevice.queue.onSubmittedWorkDone().then(() => {\n\t\t\t\ttry {\n\t\t\t\t\toldTex.destroy();\n\t\t\t\t} catch {}\n\t\t\t\ttry {\n\t\t\t\t\toldBuf.destroy();\n\t\t\t\t} catch {}\n\t\t\t}).catch(() => {});\n\t\t\tcache.delete(key);\n\t\t}\n\t\tthis.getPromises(device).delete(key);\n\t}\n\thasPending(device) {\n\t\tconst promises = this.devicePromises.get(device);\n\t\treturn promises !== void 0 && promises.size > 0 || this.rawDataPromises.size > 0;\n\t}\n\tasync awaitAllPending(device) {\n\t\tconst promises = Array.from(this.getPromises(device).values());\n\t\tawait Promise.all(promises);\n\t}\n\tdestroy() {\n\t\tthis.deviceCaches = /* @__PURE__ */ new WeakMap();\n\t\tthis.devicePromises = /* @__PURE__ */ new WeakMap();\n\t\tthis.rawDataCache.clear();\n\t\tthis.rawDataPromises.clear();\n\t}\n};\nconst globalKey = \"__GATEWAI_LUT_STORE__\";\nconst lutStore = (() => {\n\tif (!globalThis[globalKey]) globalThis[globalKey] = new LutStore();\n\treturn globalThis[globalKey];\n})();\n/**\n* A `.cube` file's text. Under Node a local path (absolute, relative or Windows)\n* or `file://` URL is read from disk (fetch cannot open either), the same\n* sources video layers accept; everything else is fetched.\n*/\nasync function readLutText(src, signal) {\n\tconst path$1 = await toLocalPath(src);\n\tif (path$1 !== null) {\n\t\tconst { readFile } = await import(\"node:fs/promises\");\n\t\treturn readFile(path$1, {\n\t\t\tencoding: \"utf8\",\n\t\t\tsignal\n\t\t});\n\t}\n\tconst response = await fetch(src, { signal });\n\tif (!response.ok) throw new Error(`Failed to load LUT file: ${response.statusText}`);\n\treturn response.text();\n}\n\n//#endregion\n//#region src/nodes/audio-signal-extractor.ts\nconst STATIC_AUDIO_SIGNAL_PREVIEW_SHADER = `\nstruct AudioSignalUniforms {\n\tsensitivity : f32,\n\ttime : f32,\n\twidth : f32,\n\theight : f32,\n\tpreviewMode : f32, // 0=envelope, 1=beat_markers, 2=waveform\n\thasBeatSignal : f32,\n\tcalcMin : f32,\n\tcalcMax : f32,\n};\n\n@group(0) @binding(0) var<uniform> u : AudioSignalUniforms;\n@group(1) @binding(0) var signalTex : texture_2d<f32>;\n@group(1) @binding(1) var sigSamp : sampler;\n\nstruct VSOut {\n\t@builtin(position) pos : vec4<f32>,\n\t@location(0) uv : vec2<f32>,\n};\n\n@vertex fn vs(@builtin(vertex_index) vi: u32) -> VSOut {\n\tvar pos = array<vec2<f32>, 4>(\n\t\tvec2<f32>(-1.0, 1.0),\n\t\tvec2<f32>(1.0, 1.0),\n\t\tvec2<f32>(-1.0, -1.0),\n\t\tvec2<f32>(1.0, -1.0)\n\t);\n\tvar uv = array<vec2<f32>, 4>(\n\t\tvec2<f32>(0.0, 0.0),\n\t\tvec2<f32>(1.0, 0.0),\n\t\tvec2<f32>(0.0, 1.0),\n\t\tvec2<f32>(1.0, 1.0)\n\t);\n\treturn VSOut(vec4<f32>(pos[vi], 0.0, 1.0), uv[vi]);\n}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet dummy_use = u.width + u.height + u.previewMode;\n\tlet col_offset = vec3<f32>(dummy_use * 1e-10);\n\n\t// Dark sleek studio background\n\tvar col = vec3<f32>(0.07, 0.07, 0.08) + col_offset;\n\n\tlet y_zero = 0.85;\n\n\t// Grid Lines\n\tlet grid_scroll = u.time * 0.05;\n\tlet uv10 = vec2<f32>(in.uv.x - grid_scroll, in.uv.y) * 10.0;\n\tlet fw10 = fwidth(uv10);\n\tlet fine = 1.0 - clamp(min(abs(fract(uv10.x - 0.5) - 0.5) / fw10.x, abs(fract(uv10.y - 0.5) - 0.5) / fw10.y), 0.0, 1.0);\n\tcol = mix(col, vec3<f32>(0.12, 0.12, 0.14), fine * 0.35);\n\n\t// Baseline Axis\n\tlet axis_d = abs(in.uv.y - y_zero);\n\tlet axis_fw = fwidth(in.uv.y);\n\tlet axis_px = 1.0 - smoothstep(0.0, axis_fw * 1.5, axis_d);\n\tcol = mix(col, vec3<f32>(0.22, 0.22, 0.26), axis_px * 0.6);\n\n\t// Sample 4-channel audio signal texture\n\tlet sigSample = textureSampleLevel(signalTex, sigSamp, vec2<f32>(in.uv.x, 0.5), 0.0);\n\tlet primVal = sigSample.r;\n\tlet beatVal = sigSample.g;\n\tlet bassVal = sigSample.b;\n\tlet nrgVal = sigSample.a;\n\n\tlet range = max(1e-4, u.calcMax - u.calcMin);\n\n\t// Normalize primary curve using calculation min and max\n\tlet norm_prim = clamp((primVal - u.calcMin) / range, 0.0, 1.0);\n\tlet y_prim = 0.85 - norm_prim * 0.70;\n\n\t// Normalize secondary energy background fill\n\tlet norm_nrg = clamp((nrgVal - u.calcMin) / range, 0.0, 1.0);\n\tlet y_nrg = 0.85 - norm_nrg * 0.70;\n\n\t// 1. Soft RMS background fill under energy curve\n\tlet fill_lo = min(y_nrg, y_zero);\n\tlet fill_hi = max(y_nrg, y_zero);\n\tlet in_fill = step(fill_lo, in.uv.y) * step(in.uv.y, fill_hi);\n\tcol = mix(col, vec3<f32>(0.0, 0.45, 0.7), in_fill * 0.08);\n\n\t// 2. Beat transient markers / glow bars\n\tif (u.hasBeatSignal > 0.5 && beatVal > 0.1) {\n\t\tlet beat_height = 0.85 - (beatVal * 0.70);\n\t\tif (in.uv.y >= beat_height && in.uv.y <= y_zero) {\n\t\t\tlet beat_glow = exp(-4.0 * abs(in.uv.y - beat_height));\n\t\t\tcol = mix(col, vec3<f32>(1.0, 0.55, 0.1), beatVal * 0.15 * beat_glow);\n\t\t}\n\t}\n\n\t// 3. Crisp Primary Curve Line\n\tlet dist_prim = abs(in.uv.y - y_prim);\n\tlet core_fw = fwidth(in.uv.y);\n\tlet core = 1.0 - smoothstep(0.5 * core_fw, 2.2 * core_fw, dist_prim);\n\tlet curve_color = select(vec3<f32>(0.0, 0.75, 1.0), vec3<f32>(0.2, 0.85, 0.5), primVal == bassVal);\n\tcol = mix(col, curve_color, core * 0.95);\n\n\t// 4. Playhead cursor line at center (uv.x = 0.5)\n\tlet playhead_d = abs(in.uv.x - 0.5);\n\tlet playhead_fw = fwidth(in.uv.x);\n\tlet glow = exp(-28.0 * playhead_d);\n\tcol = mix(col, vec3<f32>(1.0, 0.3, 0.2), glow * 0.2);\n\tlet playhead_line = 1.0 - smoothstep(0.0, playhead_fw * 1.5, playhead_d);\n\tcol = mix(col, vec3<f32>(1.0, 0.35, 0.25), playhead_line * 0.9);\n\n\treturn vec4<f32>(clamp(col, vec3<f32>(0.0), vec3<f32>(1.0)), 1.0);\n}\n`;\nconst devicePipelineCache$1 = /* @__PURE__ */ new WeakMap();\nconst uniformData$1 = new Float32Array(8);\nfunction getDevicePipelines$1(device) {\n\tlet cache = devicePipelineCache$1.get(device);\n\tif (!cache) {\n\t\tcache = /* @__PURE__ */ new Map();\n\t\tdevicePipelineCache$1.set(device, cache);\n\t}\n\treturn cache;\n}\nasync function drawAudioSignalExtractorNode(ctx, encoder, pass, props) {\n\tconst config = props.signalConfig;\n\tconst nodeId = props.nodeId ?? config?.nodeId ?? \"audio-extractor\";\n\tconst frame = props.frame ?? 0;\n\tconst fps = props.fps ?? 24;\n\tconst width = props.width ?? 512;\n\tconst height = props.height ?? 512;\n\tconst elapsedMs = props.elapsedMs !== void 0 ? props.elapsedMs : frame / fps * 1e3;\n\tconst durationMs = props.durationMs !== void 0 ? props.durationMs : 0;\n\tconst elapsedTimeSec = elapsedMs / 1e3;\n\tconst durationSec = durationMs / 1e3;\n\tconst signalView = signalRegistry.getOrCreate2DTextureView(ctx.device, encoder, nodeId, elapsedTimeSec, durationSec, config ?? props, width, height, props.renderId, frame, fps);\n\tconst pipelines = getDevicePipelines$1(ctx.device);\n\tconst cacheKey = `audio_preview_${ctx.renderer.format}`;\n\tlet pipeline = pipelines.get(cacheKey);\n\tif (!pipeline) {\n\t\tconst shaderModule = ctx.device.createShaderModule({\n\t\t\tlabel: \"audio_signal_preview.wgsl\",\n\t\t\tcode: STATIC_AUDIO_SIGNAL_PREVIEW_SHADER\n\t\t});\n\t\tpipeline = ctx.device.createRenderPipeline({\n\t\t\tlabel: \"AudioSignalPreviewPipeline\",\n\t\t\tlayout: \"auto\",\n\t\t\tvertex: {\n\t\t\t\tmodule: shaderModule,\n\t\t\t\tentryPoint: \"vs\"\n\t\t\t},\n\t\t\tfragment: {\n\t\t\t\tmodule: shaderModule,\n\t\t\t\tentryPoint: \"fs\",\n\t\t\t\ttargets: [{ format: ctx.renderer.format }]\n\t\t\t},\n\t\t\tprimitive: { topology: \"triangle-strip\" }\n\t\t});\n\t\tpipelines.set(cacheKey, pipeline);\n\t}\n\tconst sensitivity = typeof config?.sensitivity === \"number\" ? config.sensitivity : props.sensitivity ?? 1;\n\tconst hasBeat = props.extractionMode === \"transient_beat\" || config?.extractionMode === \"transient_beat\" ? 1 : 0;\n\tconst calculatedStats = signalRegistry.getStats(nodeId) ?? (config?.nodeId ? signalRegistry.getStats(config.nodeId) : void 0);\n\tconst minVal = calculatedStats?.min ?? 0;\n\tconst maxVal = calculatedStats?.max ?? 1;\n\tuniformData$1[0] = sensitivity;\n\tuniformData$1[1] = elapsedTimeSec;\n\tuniformData$1[2] = width;\n\tuniformData$1[3] = height;\n\tuniformData$1[4] = 0;\n\tuniformData$1[5] = hasBeat;\n\tuniformData$1[6] = minVal;\n\tuniformData$1[7] = maxVal;\n\tconst uBuffer = ctx.renderer.getTemporaryBuffer(uniformData$1);\n\tconst sampler = ctx.renderer.samplerCache.getSampler(ctx.device);\n\tconst bindGroup0 = ctx.device.createBindGroup({\n\t\tlayout: pipeline.getBindGroupLayout(0),\n\t\tentries: [{\n\t\t\tbinding: 0,\n\t\t\tresource: { buffer: uBuffer }\n\t\t}]\n\t});\n\tconst bindGroup1 = ctx.device.createBindGroup({\n\t\tlayout: pipeline.getBindGroupLayout(1),\n\t\tentries: [{\n\t\t\tbinding: 0,\n\t\t\tresource: signalView\n\t\t}, {\n\t\t\tbinding: 1,\n\t\t\tresource: sampler\n\t\t}]\n\t});\n\tpass.setPipeline(pipeline);\n\tpass.setBindGroup(0, bindGroup0);\n\tpass.setBindGroup(1, bindGroup1);\n\tpass.draw(4);\n}\n\n//#endregion\n//#region src/slug/slug-loader.ts\nconst SLUGGISH_HEADER_DATA = \"SLUGGISH\";\n/** v2 adds a glyph id to every record, so shaped (unmapped) glyphs round-trip. */\nconst SLUGGISH_HEADER_DATA_V2$1 = \"SLUGGIS2\";\nconst TEXTURE_WIDTH$1 = 4096;\n/** `SlugCodePoint.codePoint` of a glyph that only shaping reaches. */\nconst UNMAPPED_CODE_POINT = -2;\nvar SlugLoader = class {\n\tstatic parse(device, buffer) {\n\t\tconst startTime = performance.now();\n\t\tconst dataView = new DataView(buffer);\n\t\tlet offset = 0;\n\t\tconst headerBytes = new Uint8Array(buffer, offset, 8);\n\t\tlet headerStr = \"\";\n\t\tfor (let i = 0; i < 8; i++) headerStr += String.fromCharCode(headerBytes[i]);\n\t\tconst isV2 = headerStr === SLUGGISH_HEADER_DATA_V2$1;\n\t\tif (headerStr !== SLUGGISH_HEADER_DATA && !isV2) throw new Error(`Invalid header found (${headerStr} instead of ${SLUGGISH_HEADER_DATA_V2$1})`);\n\t\toffset += 8;\n\t\tconst codePointCount = isV2 ? dataView.getUint32(offset, true) : dataView.getUint16(offset, true);\n\t\toffset += isV2 ? 4 : 2;\n\t\tconst codePoints = /* @__PURE__ */ new Map();\n\t\tconst glyphs = /* @__PURE__ */ new Map();\n\t\tfor (let i = 0; i < codePointCount; i++) {\n\t\t\tconst cp = {\n\t\t\t\tcodePoint: isV2 ? dataView.getInt32(offset, true) : dataView.getUint32(offset, true),\n\t\t\t\twidth: dataView.getUint32(offset + 4, true),\n\t\t\t\theight: dataView.getUint32(offset + 8, true),\n\t\t\t\tadvanceWidth: dataView.getUint32(offset + 12, true),\n\t\t\t\tbearingX: dataView.getInt32(offset + 16, true),\n\t\t\t\tbearingY: dataView.getInt32(offset + 20, true),\n\t\t\t\tbandCount: dataView.getUint32(offset + 24, true),\n\t\t\t\tbandDimX: dataView.getUint32(offset + 28, true),\n\t\t\t\tbandDimY: dataView.getUint32(offset + 32, true),\n\t\t\t\tbandsTexCoordX: dataView.getUint16(offset + 36, true),\n\t\t\t\tbandsTexCoordY: dataView.getUint16(offset + 38, true)\n\t\t\t};\n\t\t\tif (isV2) {\n\t\t\t\tcp.glyphId = dataView.getUint32(offset + 40, true);\n\t\t\t\tglyphs.set(cp.glyphId, cp);\n\t\t\t}\n\t\t\tif (cp.codePoint !== UNMAPPED_CODE_POINT) codePoints.set(cp.codePoint, cp);\n\t\t\toffset += isV2 ? 44 : 40;\n\t\t}\n\t\tconst curvesTexWidth = dataView.getUint16(offset, true);\n\t\toffset += 2;\n\t\tconst curvesTexHeight = dataView.getUint16(offset, true);\n\t\toffset += 2;\n\t\tconst curvesTexBytes = dataView.getUint32(offset, true);\n\t\toffset += 4;\n\t\tif (curvesTexWidth === 0 || curvesTexHeight === 0 || curvesTexBytes === 0 || curvesTexWidth !== TEXTURE_WIDTH$1) throw new Error(\"Invalid curves texture dimensions\");\n\t\tconst curvesTexels = curvesTexWidth * curvesTexHeight;\n\t\tconst curvesData = new Float32Array(curvesTexels * 4);\n\t\tconst curvesBuffer = buffer.slice(offset, offset + curvesTexBytes);\n\t\tconst incomingCurvesData = new Float32Array(curvesBuffer);\n\t\tcurvesData.set(incomingCurvesData);\n\t\toffset += curvesTexBytes;\n\t\tconst bandsTexWidth = dataView.getUint16(offset, true);\n\t\toffset += 2;\n\t\tconst bandsTexHeight = dataView.getUint16(offset, true);\n\t\toffset += 2;\n\t\tconst bandsTexBytes = dataView.getUint32(offset, true);\n\t\toffset += 4;\n\t\tif (bandsTexWidth === 0 || bandsTexHeight === 0 || bandsTexBytes === 0 || bandsTexWidth !== TEXTURE_WIDTH$1) throw new Error(\"Invalid bands texture dimensions\");\n\t\tconst bandsTexels = bandsTexWidth * bandsTexHeight;\n\t\tconst bandsData = new Uint32Array(bandsTexels * 2);\n\t\tconst bandsBuffer = buffer.slice(offset, offset + bandsTexBytes);\n\t\tconst incomingBandsData = new Uint32Array(bandsBuffer);\n\t\tbandsData.set(incomingBandsData);\n\t\toffset += bandsTexBytes;\n\t\tlet ascender = 0;\n\t\tlet descender = 0;\n\t\tlet lineGap = 0;\n\t\tlet unitsPerEm = 0;\n\t\tif (offset + 16 <= buffer.byteLength) {\n\t\t\tascender = dataView.getInt32(offset, true);\n\t\t\toffset += 4;\n\t\t\tdescender = dataView.getInt32(offset, true);\n\t\t\toffset += 4;\n\t\t\tlineGap = dataView.getInt32(offset, true);\n\t\t\toffset += 4;\n\t\t\tunitsPerEm = dataView.getInt32(offset, true);\n\t\t\toffset += 4;\n\t\t}\n\t\tconst curvesTex = device.createTexture({\n\t\t\tlabel: \"SlugCurvesTexture\",\n\t\t\tsize: [curvesTexWidth, curvesTexHeight],\n\t\t\tformat: \"rgba32float\",\n\t\t\tusage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST\n\t\t});\n\t\tdevice.queue.writeTexture({ texture: curvesTex }, curvesData, { bytesPerRow: curvesTexWidth * 16 }, [curvesTexWidth, curvesTexHeight]);\n\t\tconst bandsTex = device.createTexture({\n\t\t\tlabel: \"SlugBandsTexture\",\n\t\t\tsize: [bandsTexWidth, bandsTexHeight],\n\t\t\tformat: \"rg32uint\",\n\t\t\tusage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST\n\t\t});\n\t\tdevice.queue.writeTexture({ texture: bandsTex }, bandsData, { bytesPerRow: bandsTexWidth * 8 }, [bandsTexWidth, bandsTexHeight]);\n\t\tconst elapsed = performance.now() - startTime;\n\t\tdebugLog(`[SlugLoader] Parsed slug binary (${codePoints.size} glyphs) in ${elapsed.toFixed(2)}ms`);\n\t\treturn {\n\t\t\tcodePoints,\n\t\t\tglyphs: isV2 ? glyphs : void 0,\n\t\t\tcurvesTex,\n\t\t\tbandsTex,\n\t\t\tascender,\n\t\t\tdescender,\n\t\t\tlineGap,\n\t\t\tunitsPerEm\n\t\t};\n\t}\n};\n\n//#endregion\n//#region src/slug/slug-generator.ts\nconst TEXTURE_WIDTH = 4096;\nconst SLUGGISH_HEADER_DATA_V2 = \"SLUGGIS2\";\nfunction getContours(commands) {\n\tconst contours = [];\n\tlet currentContour = [];\n\tlet cx = 0;\n\tlet cy = 0;\n\tfor (const cmd of commands) {\n\t\tconst type = cmd.command || cmd.type;\n\t\tconst args = cmd.args || [];\n\t\tif (type === \"moveTo\") {\n\t\t\tif (currentContour.length > 0) contours.push(currentContour);\n\t\t\tcx = args.length >= 2 ? args[0] : cmd.x ?? 0;\n\t\t\tcy = args.length >= 2 ? args[1] : cmd.y ?? 0;\n\t\t\tcurrentContour = [{\n\t\t\t\tx: cx,\n\t\t\t\ty: cy\n\t\t\t}];\n\t\t} else if (type === \"lineTo\") {\n\t\t\tconst x = args.length >= 2 ? args[0] : cmd.x ?? 0;\n\t\t\tconst y = args.length >= 2 ? args[1] : cmd.y ?? 0;\n\t\t\tcx = x;\n\t\t\tcy = y;\n\t\t\tcurrentContour.push({\n\t\t\t\tx: cx,\n\t\t\t\ty: cy\n\t\t\t});\n\t\t} else if (type === \"quadraticCurveTo\") {\n\t\t\tconst cpx = args.length >= 4 ? args[0] : cmd.cpx ?? cmd.x1 ?? 0;\n\t\t\tconst cpy = args.length >= 4 ? args[1] : cmd.cpy ?? cmd.y1 ?? 0;\n\t\t\tconst x = args.length >= 4 ? args[2] : cmd.x ?? 0;\n\t\t\tconst y = args.length >= 4 ? args[3] : cmd.y ?? 0;\n\t\t\tconst steps = 4;\n\t\t\tconst p0x = cx;\n\t\t\tconst p0y = cy;\n\t\t\tfor (let i = 1; i <= steps; i++) {\n\t\t\t\tconst t = i / steps;\n\t\t\t\tconst mt = 1 - t;\n\t\t\t\tconst x_t = mt * mt * p0x + 2 * mt * t * cpx + t * t * x;\n\t\t\t\tconst y_t = mt * mt * p0y + 2 * mt * t * cpy + t * t * y;\n\t\t\t\tcurrentContour.push({\n\t\t\t\t\tx: x_t,\n\t\t\t\t\ty: y_t\n\t\t\t\t});\n\t\t\t}\n\t\t\tcx = x;\n\t\t\tcy = y;\n\t\t} else if (type === \"bezierCurveTo\") {\n\t\t\tconst cp1x = args.length >= 6 ? args[0] : cmd.cp1x ?? 0;\n\t\t\tconst cp1y = args.length >= 6 ? args[1] : cmd.cp1y ?? 0;\n\t\t\tconst cp2x = args.length >= 6 ? args[2] : cmd.cp2x ?? 0;\n\t\t\tconst cp2y = args.length >= 6 ? args[3] : cmd.cp2y ?? 0;\n\t\t\tconst x = args.length >= 6 ? args[4] : cmd.x ?? 0;\n\t\t\tconst y = args.length >= 6 ? args[5] : cmd.y ?? 0;\n\t\t\tconst steps = 6;\n\t\t\tconst p0x = cx;\n\t\t\tconst p0y = cy;\n\t\t\tfor (let i = 1; i <= steps; i++) {\n\t\t\t\tconst t = i / steps;\n\t\t\t\tconst mt = 1 - t;\n\t\t\t\tconst mt2 = mt * mt;\n\t\t\t\tconst mt3 = mt2 * mt;\n\t\t\t\tconst t2 = t * t;\n\t\t\t\tconst t3 = t2 * t;\n\t\t\t\tconst x_t = mt3 * p0x + 3 * mt2 * t * cp1x + 3 * mt * t2 * cp2x + t3 * x;\n\t\t\t\tconst y_t = mt3 * p0y + 3 * mt2 * t * cp1y + 3 * mt * t2 * cp2y + t3 * y;\n\t\t\t\tcurrentContour.push({\n\t\t\t\t\tx: x_t,\n\t\t\t\t\ty: y_t\n\t\t\t\t});\n\t\t\t}\n\t\t\tcx = x;\n\t\t\tcy = y;\n\t\t}\n\t}\n\tif (currentContour.length > 0) contours.push(currentContour);\n\treturn contours;\n}\nfunction cleanPolygon(poly) {\n\tif (poly.length < 3) return poly;\n\tconst noDuplicates = [];\n\tfor (const pt of poly) if (noDuplicates.length === 0) noDuplicates.push(pt);\n\telse {\n\t\tconst prev = noDuplicates[noDuplicates.length - 1];\n\t\tif (Math.hypot(pt.x - prev.x, pt.y - prev.y) > .01) noDuplicates.push(pt);\n\t}\n\tif (noDuplicates.length >= 3) {\n\t\tconst first = noDuplicates[0];\n\t\tconst last = noDuplicates[noDuplicates.length - 1];\n\t\tif (Math.hypot(first.x - last.x, first.y - last.y) < .01) noDuplicates.pop();\n\t}\n\tif (noDuplicates.length < 3) return noDuplicates;\n\tconst cleaned = [];\n\tconst n = noDuplicates.length;\n\tfor (let i = 0; i < n; i++) {\n\t\tconst prev = noDuplicates[(i - 1 + n) % n];\n\t\tconst curr = noDuplicates[i];\n\t\tconst next = noDuplicates[(i + 1) % n];\n\t\tconst dx1 = curr.x - prev.x;\n\t\tconst dy1 = curr.y - prev.y;\n\t\tconst len1 = Math.hypot(dx1, dy1);\n\t\tconst dx2 = next.x - curr.x;\n\t\tconst dy2 = next.y - curr.y;\n\t\tconst len2 = Math.hypot(dx2, dy2);\n\t\tif (len1 < 1e-5 || len2 < 1e-5) continue;\n\t\tconst cross = dx1 * dy2 - dy1 * dx2;\n\t\tif (Math.abs(cross) / (len1 * len2) < 1e-4) continue;\n\t\tcleaned.push(curr);\n\t}\n\treturn cleaned;\n}\nfunction getSignedArea(poly) {\n\tlet area = 0;\n\tconst n = poly.length;\n\tif (n < 3) return 0;\n\tfor (let i = 0; i < n; i++) {\n\t\tconst curr = poly[i];\n\t\tconst next = poly[(i + 1) % n];\n\t\tarea += curr.x * next.y - next.x * curr.y;\n\t}\n\treturn area * .5;\n}\nfunction isPointInPolygon(pt, poly) {\n\tlet inside = false;\n\tconst n = poly.length;\n\tfor (let i = 0, j = n - 1; i < n; j = i++) {\n\t\tconst pi = poly[i];\n\t\tconst pj = poly[j];\n\t\tif (pi.y > pt.y !== pj.y > pt.y && pt.x < (pj.x - pi.x) * (pt.y - pi.y) / (pj.y - pi.y) + pi.x) inside = !inside;\n\t}\n\treturn inside;\n}\nfunction offsetPolygon(poly, d) {\n\tconst n = poly.length;\n\tif (n < 3) return poly;\n\tconst offsetPoly = [];\n\tfor (let i = 0; i < n; i++) {\n\t\tconst prev = poly[(i - 1 + n) % n];\n\t\tconst curr = poly[i];\n\t\tconst next = poly[(i + 1) % n];\n\t\tconst v1x = curr.x - prev.x;\n\t\tconst v1y = curr.y - prev.y;\n\t\tconst len1 = Math.sqrt(v1x * v1x + v1y * v1y);\n\t\tconst v2x = next.x - curr.x;\n\t\tconst v2y = next.y - curr.y;\n\t\tconst len2 = Math.sqrt(v2x * v2x + v2y * v2y);\n\t\tif (len1 < 1e-6 || len2 < 1e-6) {\n\t\t\toffsetPoly.push({\n\t\t\t\tx: curr.x,\n\t\t\t\ty: curr.y\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\t\tconst u1x = v1x / len1;\n\t\tconst u1y = v1y / len1;\n\t\tconst u2x = v2x / len2;\n\t\tconst u2y = v2y / len2;\n\t\tconst n1x = -u1y;\n\t\tconst n1y = u1x;\n\t\tconst n2x = -u2y;\n\t\tconst n2y = u2x;\n\t\tconst nx = n1x + n2x;\n\t\tconst ny = n1y + n2y;\n\t\tconst lenN = Math.sqrt(nx * nx + ny * ny);\n\t\tlet unx = n1x;\n\t\tlet uny = n1y;\n\t\tif (lenN > 1e-6) {\n\t\t\tunx = nx / lenN;\n\t\t\tuny = ny / lenN;\n\t\t} else {\n\t\t\tunx = u1x;\n\t\t\tuny = u1y;\n\t\t}\n\t\tconst dotU = u1x * u2x + u1y * u2y;\n\t\tconst cosHalfTheta = Math.sqrt(Math.max(0, (1 + dotU) * .5));\n\t\tlet dist = d;\n\t\tif (cosHalfTheta > .05) dist = d / cosHalfTheta;\n\t\tdist = Math.min(dist, d * 4);\n\t\toffsetPoly.push({\n\t\t\tx: curr.x + unx * dist,\n\t\t\ty: curr.y + uny * dist\n\t\t});\n\t}\n\treturn offsetPoly;\n}\nfunction isBBoxContained(polyA, polyB) {\n\tlet minXA = Infinity, maxXA = -Infinity, minYA = Infinity, maxYA = -Infinity;\n\tfor (const p of polyA) {\n\t\tif (p.x < minXA) minXA = p.x;\n\t\tif (p.x > maxXA) maxXA = p.x;\n\t\tif (p.y < minYA) minYA = p.y;\n\t\tif (p.y > maxYA) maxYA = p.y;\n\t}\n\tlet minXB = Infinity, maxXB = -Infinity, minYB = Infinity, maxYB = -Infinity;\n\tfor (const p of polyB) {\n\t\tif (p.x < minXB) minXB = p.x;\n\t\tif (p.x > maxXB) maxXB = p.x;\n\t\tif (p.y < minYB) minYB = p.y;\n\t\tif (p.y > maxYB) maxYB = p.y;\n\t}\n\treturn minXA >= minXB && maxXA <= maxXB && minYA >= minYB && maxYA <= maxYB;\n}\nfunction offsetGlyphPath(path$1, strokeOffset) {\n\tif (!path$1 || !path$1.commands || path$1.commands.length === 0) return path$1;\n\tconst polygons = getContours(path$1.commands).map(cleanPolygon).filter((p) => p.length >= 3);\n\tconst n = polygons.length;\n\tif (n === 0) return path$1;\n\tconst nestingLevels = new Array(n).fill(0);\n\tfor (let i = 0; i < n; i++) {\n\t\tconst polyA = polygons[i];\n\t\tconst pt = polyA[0];\n\t\tfor (let j = 0; j < n; j++) {\n\t\t\tif (i === j) continue;\n\t\t\tif (isBBoxContained(polyA, polygons[j]) && isPointInPolygon(pt, polygons[j])) nestingLevels[i]++;\n\t\t}\n\t}\n\tfor (let i = 0; i < n; i++) {\n\t\tconst poly = polygons[i];\n\t\tconst area = getSignedArea(poly);\n\t\tconst shouldBeClockwise = nestingLevels[i] % 2 === 0;\n\t\tif (shouldBeClockwise && area > 0) poly.reverse();\n\t\telse if (!shouldBeClockwise && area < 0) poly.reverse();\n\t}\n\tconst offsetPolys = polygons.map((p) => offsetPolygon(p, strokeOffset));\n\tconst commands = [];\n\tfor (const poly of offsetPolys) {\n\t\tif (poly.length === 0) continue;\n\t\tcommands.push({\n\t\t\tcommand: \"moveTo\",\n\t\t\targs: [poly[0].x, poly[0].y]\n\t\t});\n\t\tfor (let i = 1; i < poly.length; i++) commands.push({\n\t\t\tcommand: \"lineTo\",\n\t\t\targs: [poly[i].x, poly[i].y]\n\t\t});\n\t\tcommands.push({\n\t\t\tcommand: \"closePath\",\n\t\t\targs: []\n\t\t});\n\t}\n\treturn { commands };\n}\nconst atlases = /* @__PURE__ */ new WeakMap();\n/** The fontkit font a generated Slug font was built from (null for loaded binaries). */\nfunction getSlugFontSource(font) {\n\treturn atlases.get(font)?.source ?? null;\n}\nfunction rebuildRaw(font, atlas) {\n\tconst headerTexels = Math.floor(atlas.bandOffsets.length / 2);\n\tconst bandOffsets = atlas.bandOffsets.slice();\n\tfor (let k = 1; k < bandOffsets.length; k += 2) bandOffsets[k] += headerTexels;\n\tfont._raw.bandOffsets = bandOffsets;\n\tfont._raw.curvesList = atlas.curves;\n\tfont._raw.curveOffsets = atlas.curveOffsets;\n}\n/**\n* Uploads a generated font's curve and band data to fresh textures. The old\n* textures are left to the garbage collector: draws already encoded this\n* frame may still reference them.\n*/\nfunction uploadSlugTextures(device, font) {\n\tconst raw = font._raw;\n\tif (!raw) return;\n\tconst curvesTexels = Math.ceil(raw.curvesList.length / 4);\n\tconst curvesTexHeight = Math.max(1, Math.ceil(curvesTexels / TEXTURE_WIDTH));\n\tconst curvesFloatArray = new Float32Array(TEXTURE_WIDTH * curvesTexHeight * 4);\n\tcurvesFloatArray.fill(-1);\n\tcurvesFloatArray.set(raw.curvesList);\n\tconst curvesTex = device.createTexture({\n\t\tlabel: \"SlugGeneratedCurvesTexture\",\n\t\tsize: [TEXTURE_WIDTH, curvesTexHeight],\n\t\tformat: \"rgba32float\",\n\t\tusage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST\n\t});\n\tdevice.queue.writeTexture({ texture: curvesTex }, curvesFloatArray, { bytesPerRow: TEXTURE_WIDTH * 16 }, [TEXTURE_WIDTH, curvesTexHeight]);\n\tconst bandsTexels = Math.floor(raw.bandOffsets.length / 2) + Math.floor(raw.curveOffsets.length / 2);\n\tconst bandsTexHeight = Math.max(1, Math.ceil(bandsTexels / TEXTURE_WIDTH));\n\tconst bandsUintArray = new Uint32Array(TEXTURE_WIDTH * bandsTexHeight * 2);\n\tbandsUintArray.set(raw.bandOffsets, 0);\n\tbandsUintArray.set(raw.curveOffsets, raw.bandOffsets.length);\n\tconst bandsTex = device.createTexture({\n\t\tlabel: \"SlugGeneratedBandsTexture\",\n\t\tsize: [TEXTURE_WIDTH, bandsTexHeight],\n\t\tformat: \"rg32uint\",\n\t\tusage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST\n\t});\n\tdevice.queue.writeTexture({ texture: bandsTex }, bandsUintArray, { bytesPerRow: TEXTURE_WIDTH * 8 }, [TEXTURE_WIDTH, bandsTexHeight]);\n\tfont.curvesTex = curvesTex;\n\tfont.bandsTex = bandsTex;\n\tconst atlas = atlases.get(font);\n\tif (atlas) atlas.device = device;\n}\n/** Default code points generated up front; anything else is generated on first use. */\nfunction isDefaultCodePoint(cp) {\n\treturn cp >= 32 && cp <= 126 || cp >= 160 && cp <= 255 || cp >= 256 && cp <= 591 || cp >= 8192 && cp <= 8303 || cp >= 8352 && cp <= 8399 || cp >= 8448 && cp <= 8527 || cp >= 8592 && cp <= 8703 || cp >= 8704 && cp <= 8959 || cp >= 9728 && cp <= 10175;\n}\nvar SlugGenerator = class SlugGenerator {\n\tbandCount = 16;\n\tfullRange = false;\n\twhitelist = null;\n\tstrokeWidth;\n\tconstructor(options = {}) {\n\t\tthis.bandCount = options.bandCount !== void 0 ? options.bandCount : 16;\n\t\tthis.fullRange = options.fullRange !== void 0 ? options.fullRange : false;\n\t\tthis.whitelist = options.whitelist || null;\n\t\tthis.strokeWidth = options.strokeWidth;\n\t}\n\tgenerate(device, font) {\n\t\tif (!font) throw new Error(\"[SlugGenerator] Cannot generate slug font: font is null or undefined\");\n\t\tconst atlas = {\n\t\t\tsource: font,\n\t\t\tstrokeWidth: this.strokeWidth,\n\t\t\tbandCount: this.bandCount,\n\t\t\tcurves: [],\n\t\t\tbandOffsets: [],\n\t\t\tcurveOffsets: [],\n\t\t\tdevice: null\n\t\t};\n\t\tconst charSet = Array.isArray(font.characterSet) ? font.characterSet : Array.from(font.characterSet || []);\n\t\tconst charSetSet = new Set(charSet);\n\t\tconst codePointsToProcess = [-1];\n\t\tif (this.fullRange) {\n\t\t\tfor (const cp of charSet) if (cp !== -1) codePointsToProcess.push(cp);\n\t\t} else if (this.whitelist) {\n\t\t\tfor (const cp of this.whitelist) if (charSetSet.has(cp)) codePointsToProcess.push(cp);\n\t\t} else for (const cp of charSet) if (cp !== -1 && isDefaultCodePoint(cp)) codePointsToProcess.push(cp);\n\t\tconst output = this.buildOutput(font);\n\t\tatlases.set(output, atlas);\n\t\tfor (const cp of codePointsToProcess) SlugGenerator.addCodePoint(output, atlas, cp);\n\t\trebuildRaw(output, atlas);\n\t\tif (device) uploadSlugTextures(device, output);\n\t\treturn output;\n\t}\n\t/**\n\t* Generates any of `glyphIds` the font does not have yet, and re-uploads\n\t* its textures if it already had some. Returns whether anything was added.\n\t* Fonts not built by this generator (e.g. loaded binaries) are left as is.\n\t*/\n\tstatic ensureGlyphs(font, glyphIds) {\n\t\tconst atlas = atlases.get(font);\n\t\tif (!atlas || typeof atlas.source.getGlyph !== \"function\") return false;\n\t\tconst out = font;\n\t\tout.glyphs ??= /* @__PURE__ */ new Map();\n\t\tlet added = false;\n\t\tfor (const id of glyphIds) {\n\t\t\tif (out.glyphs.has(id)) continue;\n\t\t\tlet glyph = null;\n\t\t\ttry {\n\t\t\t\tglyph = atlas.source.getGlyph(id);\n\t\t\t} catch {\n\t\t\t\tglyph = null;\n\t\t\t}\n\t\t\tconst entry = (glyph ? SlugGenerator.buildGlyph(atlas, glyph, UNMAPPED_CODE_POINT, id) : null) ?? SlugGenerator.emptyRecord(UNMAPPED_CODE_POINT, id, 0);\n\t\t\tout.glyphs.set(id, entry);\n\t\t\tout._raw.codePoints.push(entry);\n\t\t\tadded = true;\n\t\t}\n\t\tif (added) SlugGenerator.commit(out, atlas);\n\t\treturn added;\n\t}\n\t/** Like {@link ensureGlyphs}, for code points looked up through the cmap. */\n\tstatic ensureCodePoints(font, codePoints) {\n\t\tconst atlas = atlases.get(font);\n\t\tif (!atlas) return false;\n\t\tconst out = font;\n\t\tlet added = false;\n\t\tfor (const cp of codePoints) {\n\t\t\tif (out.codePoints.has(cp)) continue;\n\t\t\tif (SlugGenerator.addCodePoint(out, atlas, cp)) added = true;\n\t\t}\n\t\tif (added) SlugGenerator.commit(out, atlas);\n\t\treturn added;\n\t}\n\tstatic commit(font, atlas) {\n\t\trebuildRaw(font, atlas);\n\t\tif (font.curvesTex && atlas.device) uploadSlugTextures(atlas.device, font);\n\t}\n\t/** Maps a code point (or -1 for .notdef) to a glyph record, generating it once per glyph id. */\n\tstatic addCodePoint(font, atlas, cp) {\n\t\tconst src = atlas.source;\n\t\tlet glyph = null;\n\t\ttry {\n\t\t\tif (cp === -1) glyph = typeof src.getGlyph === \"function\" ? src.getGlyph(0) : src.glyphForCodePoint?.(0) ?? null;\n\t\t\telse glyph = src.glyphForCodePoint?.(cp) ?? null;\n\t\t} catch {\n\t\t\treturn false;\n\t\t}\n\t\tif (!glyph) return false;\n\t\tif (cp !== -1 && glyph.id === 0) return false;\n\t\tfont.glyphs ??= /* @__PURE__ */ new Map();\n\t\tconst glyphId = typeof glyph.id === \"number\" ? glyph.id : void 0;\n\t\tconst shared = glyphId !== void 0 ? font.glyphs.get(glyphId) : void 0;\n\t\tif (shared) {\n\t\t\tconst alias = {\n\t\t\t\t...shared,\n\t\t\t\tcodePoint: cp\n\t\t\t};\n\t\t\tfont.codePoints.set(cp, alias);\n\t\t\tfont._raw.codePoints.push(alias);\n\t\t\treturn true;\n\t\t}\n\t\tconst record = SlugGenerator.buildGlyph(atlas, glyph, cp, glyphId);\n\t\tif (!record) return false;\n\t\tfont.codePoints.set(cp, record);\n\t\tif (glyphId !== void 0) font.glyphs.set(glyphId, record);\n\t\tfont._raw.codePoints.push(record);\n\t\treturn true;\n\t}\n\tstatic emptyRecord(codePoint, glyphId, advanceWidth) {\n\t\treturn {\n\t\t\tcodePoint,\n\t\t\tglyphId,\n\t\t\twidth: 0,\n\t\t\theight: 0,\n\t\t\tadvanceWidth,\n\t\t\tbearingX: 0,\n\t\t\tbearingY: 0,\n\t\t\tbandCount: 0,\n\t\t\tbandDimX: 0,\n\t\t\tbandDimY: 0,\n\t\t\tbandsTexCoordX: 0,\n\t\t\tbandsTexCoordY: 0\n\t\t};\n\t}\n\t/** Writes one glyph's curves and bands into the atlas and returns its record. */\n\tstatic buildGlyph(a, glyph, codePoint, glyphId) {\n\t\tlet path$1;\n\t\tlet bbox;\n\t\tlet advanceWidth = 0;\n\t\ttry {\n\t\t\tpath$1 = glyph.path;\n\t\t\tbbox = glyph.bbox;\n\t\t\ttry {\n\t\t\t\tadvanceWidth = Math.floor(glyph.advanceWidth || 0);\n\t\t\t} catch {\n\t\t\t\tadvanceWidth = 0;\n\t\t\t}\n\t\t} catch {\n\t\t\treturn null;\n\t\t}\n\t\tif (!bbox || bbox.minX === bbox.maxX || bbox.minY === bbox.maxY || bbox.minX === Infinity || bbox.minY === Infinity || !path$1 || !path$1.commands || path$1.commands.length === 0) return {\n\t\t\tcodePoint,\n\t\t\tglyphId,\n\t\t\twidth: 0,\n\t\t\theight: 0,\n\t\t\tadvanceWidth,\n\t\t\tbearingX: 0,\n\t\t\tbearingY: 0,\n\t\t\tbandCount: 0,\n\t\t\tbandDimX: 0,\n\t\t\tbandDimY: 0,\n\t\t\tbandsTexCoordX: 0,\n\t\t\tbandsTexCoordY: 0\n\t\t};\n\t\tconst strokeOffset = a.strokeWidth ? a.strokeWidth / 2 : 0;\n\t\tconst pathCommands = a.strokeWidth && a.strokeWidth > 0 ? offsetGlyphPath(path$1, strokeOffset) : path$1;\n\t\tconst gx1 = bbox.minX - strokeOffset;\n\t\tconst gy1 = bbox.minY - strokeOffset;\n\t\tconst gx2 = bbox.maxX + strokeOffset;\n\t\tconst gy2 = bbox.maxY + strokeOffset;\n\t\tconst curves = [];\n\t\tlet currentX = 0;\n\t\tlet currentY = 0;\n\t\tlet firstCurve = false;\n\t\tlet startOfShapeX = 0;\n\t\tlet startOfShapeY = 0;\n\t\tfor (let j = 0; j < pathCommands.commands.length; j++) {\n\t\t\tconst cmd = pathCommands.commands[j];\n\t\t\tconst commandType = cmd.command || cmd.type;\n\t\t\tconst args = cmd.args || [];\n\t\t\tif (commandType === \"moveTo\") {\n\t\t\t\tfirstCurve = true;\n\t\t\t\tconst x = args.length >= 2 ? args[0] : cmd.x;\n\t\t\t\tconst y = args.length >= 2 ? args[1] : cmd.y;\n\t\t\t\tcurrentX = x - gx1;\n\t\t\t\tcurrentY = y - gy1;\n\t\t\t\tstartOfShapeX = currentX;\n\t\t\t\tstartOfShapeY = currentY;\n\t\t\t} else if (commandType === \"lineTo\") {\n\t\t\t\tconst x = args.length >= 2 ? args[0] : cmd.x;\n\t\t\t\tconst y = args.length >= 2 ? args[1] : cmd.y;\n\t\t\t\tconst nextX = x - gx1;\n\t\t\t\tconst nextY = y - gy1;\n\t\t\t\tconst c = {\n\t\t\t\t\tfirst: firstCurve,\n\t\t\t\t\tx1: currentX,\n\t\t\t\t\ty1: currentY,\n\t\t\t\t\tx3: nextX,\n\t\t\t\t\ty3: nextY,\n\t\t\t\t\tx2: (currentX + nextX) / 2,\n\t\t\t\t\ty2: (currentY + nextY) / 2\n\t\t\t\t};\n\t\t\t\tcurves.push(c);\n\t\t\t\tfirstCurve = false;\n\t\t\t\tcurrentX = nextX;\n\t\t\t\tcurrentY = nextY;\n\t\t\t} else if (commandType === \"quadraticCurveTo\") {\n\t\t\t\tconst cpx = args.length >= 4 ? args[0] : cmd.cpx ?? cmd.x1;\n\t\t\t\tconst cpy = args.length >= 4 ? args[1] : cmd.cpy ?? cmd.y1;\n\t\t\t\tconst x = args.length >= 4 ? args[2] : cmd.x;\n\t\t\t\tconst y = args.length >= 4 ? args[3] : cmd.y;\n\t\t\t\tconst nextX = x - gx1;\n\t\t\t\tconst nextY = y - gy1;\n\t\t\t\tconst c = {\n\t\t\t\t\tfirst: firstCurve,\n\t\t\t\t\tx1: currentX,\n\t\t\t\t\ty1: currentY,\n\t\t\t\t\tx2: cpx - gx1,\n\t\t\t\t\ty2: cpy - gy1,\n\t\t\t\t\tx3: nextX,\n\t\t\t\t\ty3: nextY\n\t\t\t\t};\n\t\t\t\tcurves.push(c);\n\t\t\t\tfirstCurve = false;\n\t\t\t\tcurrentX = nextX;\n\t\t\t\tcurrentY = nextY;\n\t\t\t} else if (commandType === \"bezierCurveTo\") {\n\t\t\t\tconst cp1x = args.length >= 6 ? args[0] : cmd.cp1x;\n\t\t\t\tconst cp1y = args.length >= 6 ? args[1] : cmd.cp1y;\n\t\t\t\tconst cp2x = args.length >= 6 ? args[2] : cmd.cp2x;\n\t\t\t\tconst cp2y = args.length >= 6 ? args[3] : cmd.cp2y;\n\t\t\t\tconst x = args.length >= 6 ? args[4] : cmd.x;\n\t\t\t\tconst y = args.length >= 6 ? args[5] : cmd.y;\n\t\t\t\tconst nextX = x - gx1;\n\t\t\t\tconst nextY = y - gy1;\n\t\t\t\tconst segments = 4;\n\t\t\t\tlet prevX = currentX;\n\t\t\t\tlet prevY = currentY;\n\t\t\t\tfor (let k = 1; k <= segments; k++) {\n\t\t\t\t\tconst t = k / segments;\n\t\t\t\t\tconst mt = 1 - t;\n\t\t\t\t\tconst mt2 = mt * mt;\n\t\t\t\t\tconst mt3 = mt2 * mt;\n\t\t\t\t\tconst t2 = t * t;\n\t\t\t\t\tconst t3 = t2 * t;\n\t\t\t\t\tconst posX = mt3 * currentX + 3 * mt2 * t * (cp1x - gx1) + 3 * mt * t2 * (cp2x - gx1) + t3 * nextX;\n\t\t\t\t\tconst posY = mt3 * currentY + 3 * mt2 * t * (cp1y - gy1) + 3 * mt * t2 * (cp2y - gy1) + t3 * nextY;\n\t\t\t\t\tconst c = {\n\t\t\t\t\t\tfirst: firstCurve && k === 1,\n\t\t\t\t\t\tx1: prevX,\n\t\t\t\t\t\ty1: prevY,\n\t\t\t\t\t\tx2: (prevX + posX) / 2,\n\t\t\t\t\t\ty2: (prevY + posY) / 2,\n\t\t\t\t\t\tx3: posX,\n\t\t\t\t\t\ty3: posY\n\t\t\t\t\t};\n\t\t\t\t\tcurves.push(c);\n\t\t\t\t\tprevX = posX;\n\t\t\t\t\tprevY = posY;\n\t\t\t\t}\n\t\t\t\tfirstCurve = false;\n\t\t\t\tcurrentX = nextX;\n\t\t\t\tcurrentY = nextY;\n\t\t\t} else if (commandType === \"closePath\") {\n\t\t\t\tif (currentX !== startOfShapeX || currentY !== startOfShapeY) {\n\t\t\t\t\tconst c = {\n\t\t\t\t\t\tfirst: firstCurve,\n\t\t\t\t\t\tx1: currentX,\n\t\t\t\t\t\ty1: currentY,\n\t\t\t\t\t\tx3: startOfShapeX,\n\t\t\t\t\t\ty3: startOfShapeY,\n\t\t\t\t\t\tx2: (currentX + startOfShapeX) / 2,\n\t\t\t\t\t\ty2: (currentY + startOfShapeY) / 2\n\t\t\t\t\t};\n\t\t\t\t\tcurves.push(c);\n\t\t\t\t\tfirstCurve = false;\n\t\t\t\t}\n\t\t\t\tcurrentX = startOfShapeX;\n\t\t\t\tcurrentY = startOfShapeY;\n\t\t\t}\n\t\t}\n\t\tif (!curves || curves.length === 0) return null;\n\t\tfor (const c of curves) if (c.x2 === c.x1 && c.y2 === c.y1 || c.x2 === c.x3 && c.y2 === c.y3) {\n\t\t\tc.x2 = (c.x1 + c.x3) / 2;\n\t\t\tc.y2 = (c.y1 + c.y3) / 2;\n\t\t}\n\t\tconst bandsTexelIndex = Math.floor(a.bandOffsets.length / 2);\n\t\tfor (const c of curves) {\n\t\t\tif (c.first && a.curves.length % 4 !== 0) {\n\t\t\t\tconst toAdd = 4 - a.curves.length % 4;\n\t\t\t\tfor (let k = 0; k < toAdd; k++) a.curves.push(-1);\n\t\t\t}\n\t\t\tconst newRow = Math.floor(a.curves.length / 4) % TEXTURE_WIDTH === TEXTURE_WIDTH - 1;\n\t\t\tif (newRow) {\n\t\t\t\tconst toAdd = 8 - a.curves.length % 4;\n\t\t\t\tfor (let k = 0; k < toAdd; k++) a.curves.push(-1);\n\t\t\t}\n\t\t\tif (c.first || newRow) {\n\t\t\t\tc.texelIndex = Math.floor(a.curves.length / 4);\n\t\t\t\ta.curves.push(c.x1, c.y1);\n\t\t\t} else c.texelIndex = Math.floor((Math.floor(a.curves.length / 2) - 1) / 2);\n\t\t\ta.curves.push(c.x2, c.y2);\n\t\t\ta.curves.push(c.x3, c.y3);\n\t\t}\n\t\tconst sizeX = 1 + (gx2 - gx1);\n\t\tconst sizeY = 1 + (gy2 - gy1);\n\t\tlet bCount = a.bandCount;\n\t\tif (sizeX < bCount || sizeY < bCount) {\n\t\t\tbCount = Math.floor(Math.min(sizeX, sizeY) / 2);\n\t\t\tif (bCount < 1) bCount = 1;\n\t\t}\n\t\tconst bandDimY = Math.ceil(sizeY / bCount);\n\t\tlet bandMinY = 0;\n\t\tlet bandMaxY = bandDimY;\n\t\tcurves.sort((a$1, b) => Math.max(b.x1, b.x2, b.x3) - Math.max(a$1.x1, a$1.x2, a$1.x3));\n\t\tfor (let b = 0; b < bCount; b++) {\n\t\t\tconst bandTexelOffset = Math.floor(a.curveOffsets.length / 2);\n\t\t\tlet curveCount = 0;\n\t\t\tfor (const c of curves) {\n\t\t\t\tif (c.y1 === c.y2 && c.y2 === c.y3) continue;\n\t\t\t\tconst curveMinY = Math.min(c.y1, c.y2, c.y3);\n\t\t\t\tconst curveMaxY = Math.max(c.y1, c.y2, c.y3);\n\t\t\t\tif (curveMinY > bandMaxY || curveMaxY < bandMinY) continue;\n\t\t\t\tconst texelIndex = c.texelIndex ?? 0;\n\t\t\t\tconst curveOffsetX = texelIndex % TEXTURE_WIDTH;\n\t\t\t\tconst curveOffsetY = Math.floor(texelIndex / TEXTURE_WIDTH);\n\t\t\t\ta.curveOffsets.push(curveOffsetX, curveOffsetY);\n\t\t\t\tcurveCount++;\n\t\t\t}\n\t\t\ta.bandOffsets.push(curveCount, bandTexelOffset);\n\t\t\tbandMinY += bandDimY;\n\t\t\tbandMaxY += bandDimY;\n\t\t}\n\t\tconst bandDimX = Math.ceil(sizeX / bCount);\n\t\tlet bandMinX = 0;\n\t\tlet bandMaxX = bandDimX;\n\t\tcurves.sort((a$1, b) => Math.max(b.y1, b.y2, b.y3) - Math.max(a$1.y1, a$1.y2, a$1.y3));\n\t\tfor (let b = 0; b < bCount; b++) {\n\t\t\tconst bandTexelOffset = Math.floor(a.curveOffsets.length / 2);\n\t\t\tlet curveCount = 0;\n\t\t\tfor (const c of curves) {\n\t\t\t\tif (c.x1 === c.x2 && c.x2 === c.x3) continue;\n\t\t\t\tconst curveMinX = Math.min(c.x1, c.x2, c.x3);\n\t\t\t\tconst curveMaxX = Math.max(c.x1, c.x2, c.x3);\n\t\t\t\tif (curveMinX > bandMaxX || curveMaxX < bandMinX) continue;\n\t\t\t\tconst texelIndex = c.texelIndex ?? 0;\n\t\t\t\tconst curveOffsetX = texelIndex % TEXTURE_WIDTH;\n\t\t\t\tconst curveOffsetY = Math.floor(texelIndex / TEXTURE_WIDTH);\n\t\t\t\ta.curveOffsets.push(curveOffsetX, curveOffsetY);\n\t\t\t\tcurveCount++;\n\t\t\t}\n\t\t\ta.bandOffsets.push(curveCount, bandTexelOffset);\n\t\t\tbandMinX += bandDimX;\n\t\t\tbandMaxX += bandDimX;\n\t\t}\n\t\treturn {\n\t\t\tcodePoint,\n\t\t\tglyphId,\n\t\t\twidth: Math.floor(gx2 - gx1),\n\t\t\theight: Math.floor(gy2 - gy1),\n\t\t\tadvanceWidth: Math.floor(glyph.advanceWidth || 0),\n\t\t\tbearingX: Math.floor(gx1),\n\t\t\tbearingY: Math.floor(gy2),\n\t\t\tbandCount: bCount,\n\t\t\tbandDimX,\n\t\t\tbandDimY,\n\t\t\tbandsTexCoordX: bandsTexelIndex % TEXTURE_WIDTH,\n\t\t\tbandsTexCoordY: Math.floor(bandsTexelIndex / TEXTURE_WIDTH)\n\t\t};\n\t}\n\tbuildOutput(font) {\n\t\tconst metrics = {\n\t\t\tascender: font.ascent || 0,\n\t\t\tdescender: font.descent || 0,\n\t\t\tlineGap: font.lineGap || 0,\n\t\t\tunitsPerEm: font.unitsPerEm || 0\n\t\t};\n\t\treturn {\n\t\t\tcodePoints: /* @__PURE__ */ new Map(),\n\t\t\tglyphs: /* @__PURE__ */ new Map(),\n\t\t\tcurvesTex: null,\n\t\t\tbandsTex: null,\n\t\t\t...metrics,\n\t\t\t_raw: {\n\t\t\t\tcodePoints: [],\n\t\t\t\tcurvesList: [],\n\t\t\t\tbandOffsets: [],\n\t\t\t\tcurveOffsets: [],\n\t\t\t\tmetrics\n\t\t\t}\n\t\t};\n\t}\n\texportSluggish(generatedData) {\n\t\tconst { codePoints, curvesList, bandOffsets, curveOffsets } = generatedData._raw;\n\t\tconst curvesTexels = Math.ceil(curvesList.length / 4);\n\t\tconst curvesTexHeight = Math.ceil(curvesTexels / TEXTURE_WIDTH);\n\t\tconst curvesFloatArray = new Float32Array(TEXTURE_WIDTH * curvesTexHeight * 4);\n\t\tcurvesFloatArray.fill(0);\n\t\tcurvesFloatArray.set(curvesList);\n\t\tconst bandsTexels = Math.floor(bandOffsets.length / 2) + Math.floor(curveOffsets.length / 2);\n\t\tconst bandsTexHeight = Math.ceil(bandsTexels / TEXTURE_WIDTH);\n\t\tconst bandsUintArray = new Uint32Array(TEXTURE_WIDTH * bandsTexHeight * 2);\n\t\tbandsUintArray.set(bandOffsets, 0);\n\t\tbandsUintArray.set(curveOffsets, bandOffsets.length);\n\t\tconst curvesBytes = curvesFloatArray.byteLength;\n\t\tconst bandsBytes = bandsUintArray.byteLength;\n\t\tconst metrics = generatedData._raw.metrics;\n\t\tconst totalBytes = 12 + codePoints.length * 44 + 8 + curvesBytes + 8 + bandsBytes + 16;\n\t\tconst buffer = new ArrayBuffer(totalBytes);\n\t\tconst view = new DataView(buffer);\n\t\tlet offset = 0;\n\t\tfor (let i = 0; i < 8; i++) view.setUint8(offset++, SLUGGISH_HEADER_DATA_V2.charCodeAt(i));\n\t\tview.setUint32(offset, codePoints.length, true);\n\t\toffset += 4;\n\t\tfor (const cp of codePoints) {\n\t\t\tview.setInt32(offset, cp.codePoint, true);\n\t\t\toffset += 4;\n\t\t\tview.setUint32(offset, cp.width, true);\n\t\t\toffset += 4;\n\t\t\tview.setUint32(offset, cp.height, true);\n\t\t\toffset += 4;\n\t\t\tview.setUint32(offset, cp.advanceWidth, true);\n\t\t\toffset += 4;\n\t\t\tview.setInt32(offset, cp.bearingX, true);\n\t\t\toffset += 4;\n\t\t\tview.setInt32(offset, cp.bearingY, true);\n\t\t\toffset += 4;\n\t\t\tview.setUint32(offset, cp.bandCount, true);\n\t\t\toffset += 4;\n\t\t\tview.setUint32(offset, cp.bandDimX, true);\n\t\t\toffset += 4;\n\t\t\tview.setUint32(offset, cp.bandDimY, true);\n\t\t\toffset += 4;\n\t\t\tview.setUint16(offset, cp.bandsTexCoordX, true);\n\t\t\toffset += 2;\n\t\t\tview.setUint16(offset, cp.bandsTexCoordY, true);\n\t\t\toffset += 2;\n\t\t\tview.setUint32(offset, cp.glyphId ?? 0, true);\n\t\t\toffset += 4;\n\t\t}\n\t\tview.setUint16(offset, TEXTURE_WIDTH, true);\n\t\toffset += 2;\n\t\tview.setUint16(offset, curvesTexHeight, true);\n\t\toffset += 2;\n\t\tview.setUint32(offset, curvesBytes, true);\n\t\toffset += 4;\n\t\tnew Uint8Array(buffer).set(new Uint8Array(curvesFloatArray.buffer), offset);\n\t\toffset += curvesBytes;\n\t\tview.setUint16(offset, TEXTURE_WIDTH, true);\n\t\toffset += 2;\n\t\tview.setUint16(offset, bandsTexHeight, true);\n\t\toffset += 2;\n\t\tview.setUint32(offset, bandsBytes, true);\n\t\toffset += 4;\n\t\tnew Uint8Array(buffer).set(new Uint8Array(bandsUintArray.buffer), offset);\n\t\toffset += bandsBytes;\n\t\tview.setInt32(offset, metrics.ascender || 0, true);\n\t\toffset += 4;\n\t\tview.setInt32(offset, metrics.descender || 0, true);\n\t\toffset += 4;\n\t\tview.setInt32(offset, metrics.lineGap || 0, true);\n\t\toffset += 4;\n\t\tview.setInt32(offset, metrics.unitsPerEm || 0, true);\n\t\toffset += 4;\n\t\treturn buffer;\n\t}\n};\n\n//#endregion\n//#region src/slug/slug-font-cache.ts\nfunction parseFontWeight(fontWeight) {\n\tif (!fontWeight) return 400;\n\tif (fontWeight === \"bold\") return 700;\n\tif (fontWeight === \"normal\") return 400;\n\tif (typeof fontWeight === \"number\") return fontWeight;\n\tconst parsed = parseInt(fontWeight, 10);\n\treturn isNaN(parsed) ? 400 : parsed;\n}\nfunction getFontCacheKey(fontFamily, fontWeight, strokeWidth, axes) {\n\treturn `${fontFamily}-${parseFontWeight(fontWeight)}${strokeWidth ? `-stroke-${strokeWidth}` : \"\"}${axes && Object.keys(axes).length > 0 ? `-axes-${Object.entries(axes).sort(([a], [b]) => a.localeCompare(b)).map(([k, v]) => `${k}_${v}`).join(\"_\")}` : \"\"}`;\n}\n/**\n* fontkit.create() accepts a Buffer at the type level, but works fine at\n* runtime with a plain Uint8Array (this keeps things portable between\n* Node.js and the browser, where a real `Buffer` may not exist). It can\n* also return a `FontCollection` for multi-font files (e.g. .ttc) instead\n* of a single `Font` — in that case we grab the first font in the\n* collection. Both quirks are isolated here at the fontkit boundary.\n*/\nfunction parseFontBuffer(bytes) {\n\tconst parsed = fontkit.create(bytes);\n\tlet font;\n\tif (parsed && typeof parsed.fonts !== \"undefined\" && Array.isArray(parsed.fonts) && (parsed.fonts.length ?? 0) > 0) font = parsed.fonts[0];\n\telse if (parsed && typeof parsed.getFont === \"function\" && typeof parsed.getGlyph !== \"function\") font = parsed.fonts?.[0] || parsed;\n\telse font = parsed;\n\treturn font;\n}\nfunction recreateTextures(device, slugFont) {\n\tif (slugFont.curvesTex) return;\n\tuploadSlugTextures(device, slugFont);\n}\nconst GLOBAL_CACHE_KEY = Symbol.for(\"gatewai.slugFontCache.cache\");\nconst GLOBAL_PARSED_KEY = Symbol.for(\"gatewai.slugFontCache.parsed\");\nconst GLOBAL_PROMISES_KEY = Symbol.for(\"gatewai.slugFontCache.promises\");\nconst GLOBAL_FAILED_KEY = Symbol.for(\"gatewai.slugFontCache.failed\");\nconst g = globalThis;\ng[GLOBAL_CACHE_KEY] = g[GLOBAL_CACHE_KEY] || /* @__PURE__ */ new Map();\ng[GLOBAL_PARSED_KEY] = g[GLOBAL_PARSED_KEY] || /* @__PURE__ */ new Map();\ng[GLOBAL_PROMISES_KEY] = g[GLOBAL_PROMISES_KEY] || /* @__PURE__ */ new Map();\ng[GLOBAL_FAILED_KEY] = g[GLOBAL_FAILED_KEY] || /* @__PURE__ */ new Map();\nvar SlugFontCache = class SlugFontCache {\n\tstatic get cache() {\n\t\treturn g[GLOBAL_CACHE_KEY];\n\t}\n\tstatic get parsedFontCache() {\n\t\treturn g[GLOBAL_PARSED_KEY];\n\t}\n\t/** Register an already parsed font (e.g. by FontManager) under a family name. */\n\tstatic setParsed(fontFamily, font) {\n\t\tSlugFontCache.parsedFontCache.set(fontFamily, font);\n\t}\n\tstatic getParsed(fontFamily) {\n\t\treturn SlugFontCache.parsedFontCache.get(fontFamily) || null;\n\t}\n\tstatic getAllParsed() {\n\t\treturn Array.from(SlugFontCache.parsedFontCache.values());\n\t}\n\tstatic getFirstParsed() {\n\t\tconst iter = SlugFontCache.parsedFontCache.values().next();\n\t\treturn iter.done ? null : iter.value;\n\t}\n\tstatic hasPending() {\n\t\treturn SlugFontCache.loadingPromises.size > 0;\n\t}\n\tstatic listeners = /* @__PURE__ */ new Set();\n\tstatic get loadingPromises() {\n\t\treturn g[GLOBAL_PROMISES_KEY];\n\t}\n\tstatic get failedFonts() {\n\t\tif (g[GLOBAL_FAILED_KEY] instanceof Set) g[GLOBAL_FAILED_KEY] = /* @__PURE__ */ new Map();\n\t\treturn g[GLOBAL_FAILED_KEY];\n\t}\n\tstatic emojiFontPath = null;\n\tstatic emojiFontUrl = null;\n\tstatic emojiTextureCache = /* @__PURE__ */ new Map();\n\tstatic emojiFontBuffer = null;\n\tstatic emojiFontLoadPromise = null;\n\tstatic emojiFontFaceLoadPromise = null;\n\tstatic cmapOffset = 0;\n\tstatic cblcOffset = 0;\n\tstatic cbdtOffset = 0;\n\t/**\n\t* Sets the color emoji font text draws emoji with: a CBDT/CBLC bitmap font\n\t* such as Noto Color Emoji. framefields ships none, so without one emoji\n\t* draw nothing in exports (the browser preview falls back to the system's).\n\t*/\n\tstatic setEmojiFont(bytes, filePath) {\n\t\tSlugFontCache.parseTableDirectory(bytes);\n\t\tif (!SlugFontCache.cblcOffset || !SlugFontCache.cbdtOffset) {\n\t\t\tSlugFontCache.emojiFontBuffer = null;\n\t\t\tthrow new Error(`Emoji font ${filePath ? `\"${filePath}\" ` : \"\"}has no CBDT/CBLC color bitmaps. Use a bitmap color emoji font such as Noto Color Emoji.`);\n\t\t}\n\t\tSlugFontCache.emojiFontPath = filePath ?? null;\n\t\tSlugFontCache.emojiFontLoadPromise = null;\n\t\tfor (const tex of SlugFontCache.emojiTextureCache.values()) tex.destroy();\n\t\tSlugFontCache.emojiTextureCache.clear();\n\t}\n\t/** True once an emoji font is set or a path / URL to load one from is. */\n\tstatic hasEmojiFont() {\n\t\treturn !!(SlugFontCache.emojiFontBuffer || SlugFontCache.emojiFontPath || SlugFontCache.emojiFontUrl);\n\t}\n\t/**\n\t* Parse the SFNT table directory from a raw font buffer and cache\n\t* the offsets for cmap, CBLC, and CBDT tables.\n\t*/\n\tstatic parseTableDirectory(uint8) {\n\t\tSlugFontCache.emojiFontBuffer = uint8;\n\t\tSlugFontCache.cmapOffset = 0;\n\t\tSlugFontCache.cblcOffset = 0;\n\t\tSlugFontCache.cbdtOffset = 0;\n\t\tconst view = new DataView(uint8.buffer, uint8.byteOffset, uint8.byteLength);\n\t\tconst numTables = view.getUint16(4);\n\t\tlet offset = 12;\n\t\tfor (let i = 0; i < numTables; i++) {\n\t\t\tconst tag = String.fromCharCode(view.getUint8(offset), view.getUint8(offset + 1), view.getUint8(offset + 2), view.getUint8(offset + 3));\n\t\t\tif (tag === \"cmap\") SlugFontCache.cmapOffset = view.getUint32(offset + 8);\n\t\t\telse if (tag === \"CBLC\") SlugFontCache.cblcOffset = view.getUint32(offset + 8);\n\t\t\telse if (tag === \"CBDT\") SlugFontCache.cbdtOffset = view.getUint32(offset + 8);\n\t\t\toffset += 16;\n\t\t}\n\t}\n\t/**\n\t* Load the emoji font binary from a local filesystem path (Node.js only)\n\t* or from an HTTP URL via fetch.\n\t*/\n\tstatic async loadEmojiFontBinary() {\n\t\tif (SlugFontCache.emojiFontBuffer) return;\n\t\tif (SlugFontCache.emojiFontLoadPromise) {\n\t\t\tawait SlugFontCache.emojiFontLoadPromise;\n\t\t\treturn;\n\t\t}\n\t\tSlugFontCache.emojiFontLoadPromise = (async () => {\n\t\t\ttry {\n\t\t\t\tif ((!!globalThis.__IS_HEADLESS_RENDERER__ || typeof window === \"undefined\" || typeof globalThis.document === \"undefined\") && SlugFontCache.emojiFontPath) {\n\t\t\t\t\tconst nodeBuffer = await (await import(\n\t\t\t\t\t\t/* webpackIgnore: true */\n\t\t\t\t\t\t\"fs/promises\"\n)).readFile(SlugFontCache.emojiFontPath);\n\t\t\t\t\tconst uint8 = new Uint8Array(nodeBuffer.buffer, nodeBuffer.byteOffset, nodeBuffer.byteLength);\n\t\t\t\t\tSlugFontCache.parseTableDirectory(uint8);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst url = SlugFontCache.emojiFontUrl;\n\t\t\t\tif (!url) {\n\t\t\t\t\tconsole.warn(\"[SlugFontCache] No emoji font path or URL configured.\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst response = await fetch(url);\n\t\t\t\tif (!response.ok) throw new Error(`Failed to fetch emoji font from ${url}: ${response.statusText}`);\n\t\t\t\tconst arrayBuffer = await response.arrayBuffer();\n\t\t\t\tSlugFontCache.parseTableDirectory(new Uint8Array(arrayBuffer));\n\t\t\t} catch (err) {\n\t\t\t\tconsole.error(\"[SlugFontCache] Failed to load emoji font binary:\", err);\n\t\t\t}\n\t\t})();\n\t\tawait SlugFontCache.emojiFontLoadPromise;\n\t}\n\tstatic async getEmojiPngBuffer(codePoint) {\n\t\tif (!SlugFontCache.emojiFontBuffer) {\n\t\t\tif (SlugFontCache.emojiFontPath || SlugFontCache.emojiFontUrl) await SlugFontCache.loadEmojiFontBinary();\n\t\t}\n\t\tconst uint8 = SlugFontCache.emojiFontBuffer;\n\t\tif (!uint8) return null;\n\t\tconst view = new DataView(uint8.buffer, uint8.byteOffset, uint8.byteLength);\n\t\tconst cmapHead = SlugFontCache.cmapOffset;\n\t\tif (!cmapHead) return null;\n\t\tconst numSubTables = view.getUint16(cmapHead + 2);\n\t\tlet format12Offset = 0;\n\t\tfor (let i = 0; i < numSubTables; i++) {\n\t\t\tconst subTableRecord = cmapHead + 4 + i * 8;\n\t\t\tconst subOffset = view.getUint32(subTableRecord + 4);\n\t\t\tif (view.getUint16(cmapHead + subOffset) === 12) {\n\t\t\t\tformat12Offset = cmapHead + subOffset;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tif (!format12Offset) return null;\n\t\tconst numGroups = view.getUint32(format12Offset + 12);\n\t\tlet glyphID = 0;\n\t\tfor (let g$1 = 0; g$1 < numGroups; g$1++) {\n\t\t\tconst groupOffset = format12Offset + 16 + g$1 * 12;\n\t\t\tconst startCharCode = view.getUint32(groupOffset);\n\t\t\tconst endCharCode = view.getUint32(groupOffset + 4);\n\t\t\tconst startGlyphID = view.getUint32(groupOffset + 8);\n\t\t\tif (codePoint >= startCharCode && codePoint <= endCharCode) {\n\t\t\t\tglyphID = startGlyphID + (codePoint - startCharCode);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tif (!glyphID) return null;\n\t\tconst cblcOffset = SlugFontCache.cblcOffset;\n\t\tconst cbdtOffset = SlugFontCache.cbdtOffset;\n\t\tif (!cblcOffset || !cbdtOffset) return null;\n\t\tconst indexSubTableArrayOffset = view.getUint32(cblcOffset + 8);\n\t\tconst numberOfIndexSubTables = view.getUint32(cblcOffset + 16);\n\t\tconst arrayStart = cblcOffset + indexSubTableArrayOffset;\n\t\tlet foundSubtable = null;\n\t\tfor (let i = 0; i < numberOfIndexSubTables; i++) {\n\t\t\tconst entryOffset = arrayStart + i * 8;\n\t\t\tconst firstGlyph = view.getUint16(entryOffset);\n\t\t\tconst lastGlyph = view.getUint16(entryOffset + 2);\n\t\t\tconst subTableOffset = view.getUint32(entryOffset + 4);\n\t\t\tif (glyphID >= firstGlyph && glyphID <= lastGlyph) {\n\t\t\t\tfoundSubtable = {\n\t\t\t\t\tfirstGlyph,\n\t\t\t\t\tlastGlyph,\n\t\t\t\t\tsubTableOffset: indexSubTableArrayOffset + subTableOffset\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tif (!foundSubtable) return null;\n\t\tconst subTableStart = cblcOffset + foundSubtable.subTableOffset;\n\t\tconst indexFormat = view.getUint16(subTableStart);\n\t\tconst imageFormat = view.getUint16(subTableStart + 2);\n\t\tconst imageDataOffset = view.getUint32(subTableStart + 4);\n\t\tif (indexFormat !== 1 || imageFormat !== 17) return null;\n\t\tconst idx = glyphID - foundSubtable.firstGlyph;\n\t\tconst offsetArrayStart = subTableStart + 8;\n\t\tconst startOffset = view.getUint32(offsetArrayStart + idx * 4);\n\t\tif (view.getUint32(offsetArrayStart + (idx + 1) * 4) - startOffset <= 0) return null;\n\t\tconst absoluteGlyphOffset = cbdtOffset + imageDataOffset + startOffset;\n\t\tconst height = view.getUint8(absoluteGlyphOffset);\n\t\tconst width = view.getUint8(absoluteGlyphOffset + 1);\n\t\tconst dataLen = view.getUint32(absoluteGlyphOffset + 5);\n\t\tconst pngStart = absoluteGlyphOffset + 9;\n\t\treturn {\n\t\t\tbuffer: new Uint8Array(uint8.buffer, uint8.byteOffset + pngStart, dataLen),\n\t\t\twidth,\n\t\t\theight\n\t\t};\n\t}\n\tstatic async preloadEmoji(device, char, fontSize) {\n\t\tconst key = `${char}-${fontSize}`;\n\t\tlet tex = SlugFontCache.emojiTextureCache.get(key);\n\t\tif (tex) return tex;\n\t\tconst isNode = !!globalThis.__IS_HEADLESS_RENDERER__ || typeof window === \"undefined\" || typeof globalThis.document === \"undefined\";\n\t\tconst codePoint = char.codePointAt(0);\n\t\tif (!codePoint) throw new Error(\"No codepoint\");\n\t\tconst resolutionScale = 4;\n\t\tconst targetSize = Math.max(16, Math.ceil(fontSize * 1.5 * resolutionScale));\n\t\tconst pngInfo = SlugFontCache.hasEmojiFont() ? await SlugFontCache.getEmojiPngBuffer(codePoint) : null;\n\t\tif (isNode) {\n\t\t\tif (!pngInfo) throw new Error(SlugFontCache.hasEmojiFont() ? `Emoji glyph not found in font for ${char}` : `No emoji font is set for ${char}; register one with FontManager.registerEmojiFont()`);\n\t\t\tconst sharp = (await import(\n\t\t\t\t/* webpackIgnore: true */\n\t\t\t\t\"sharp\"\n)).default;\n\t\t\tconst { data, info } = await sharp(Buffer.from(pngInfo.buffer)).ensureAlpha().resize(targetSize, targetSize, {\n\t\t\t\tfit: \"contain\",\n\t\t\t\tbackground: {\n\t\t\t\t\tr: 0,\n\t\t\t\t\tg: 0,\n\t\t\t\t\tb: 0,\n\t\t\t\t\talpha: 0\n\t\t\t\t},\n\t\t\t\tkernel: \"lanczos3\"\n\t\t\t}).raw().toBuffer({ resolveWithObject: true });\n\t\t\tconst pixels = premultiplyPixels(new Uint8Array(data));\n\t\t\ttex = device.createTexture({\n\t\t\t\tlabel: `Emoji-${char}`,\n\t\t\t\tsize: [info.width, info.height],\n\t\t\t\tformat: \"rgba8unorm\",\n\t\t\t\tusage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST\n\t\t\t});\n\t\t\tdevice.queue.writeTexture({ texture: tex }, pixels, { bytesPerRow: info.width * 4 }, [info.width, info.height]);\n\t\t} else if (pngInfo) {\n\t\t\tconst bitmap = await createImageBitmap(new Blob([pngInfo.buffer], { type: \"image/png\" }));\n\t\t\tconst canvas = new OffscreenCanvas(targetSize, targetSize);\n\t\t\tconst c2d = canvas.getContext(\"2d\");\n\t\t\tif (c2d) {\n\t\t\t\tconst fit = Math.min(targetSize / bitmap.width, targetSize / bitmap.height);\n\t\t\t\tconst w = bitmap.width * fit;\n\t\t\t\tconst h = bitmap.height * fit;\n\t\t\t\tc2d.imageSmoothingQuality = \"high\";\n\t\t\t\tc2d.drawImage(bitmap, (targetSize - w) / 2, (targetSize - h) / 2, w, h);\n\t\t\t}\n\t\t\tbitmap.close();\n\t\t\ttex = device.createTexture({\n\t\t\t\tlabel: `Emoji-${char}`,\n\t\t\t\tsize: [targetSize, targetSize],\n\t\t\t\tformat: \"rgba8unorm\",\n\t\t\t\tusage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST | GPUTextureUsage.RENDER_ATTACHMENT\n\t\t\t});\n\t\t\tdevice.queue.copyExternalImageToTexture({ source: canvas }, {\n\t\t\t\ttexture: tex,\n\t\t\t\tpremultipliedAlpha: true\n\t\t\t}, [targetSize, targetSize]);\n\t\t} else {\n\t\t\tconst size = Math.ceil(targetSize / 4) * 4;\n\t\t\tconst canvas = new OffscreenCanvas(size, size);\n\t\t\tconst c2d = canvas.getContext(\"2d\");\n\t\t\tif (c2d) {\n\t\t\t\tc2d.font = `${fontSize * resolutionScale}px \"Apple Color Emoji\", \"Segoe UI Emoji\", sans-serif`;\n\t\t\t\tc2d.textBaseline = \"middle\";\n\t\t\t\tc2d.textAlign = \"center\";\n\t\t\t\tc2d.fillText(char, size / 2, size / 2);\n\t\t\t}\n\t\t\ttex = device.createTexture({\n\t\t\t\tlabel: `Emoji-${char}`,\n\t\t\t\tsize: [size, size],\n\t\t\t\tformat: \"rgba8unorm\",\n\t\t\t\tusage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST | GPUTextureUsage.RENDER_ATTACHMENT\n\t\t\t});\n\t\t\tdevice.queue.copyExternalImageToTexture({ source: canvas }, {\n\t\t\t\ttexture: tex,\n\t\t\t\tpremultipliedAlpha: true\n\t\t\t}, [size, size]);\n\t\t}\n\t\tSlugFontCache.emojiTextureCache.set(key, tex);\n\t\treturn tex;\n\t}\n\tstatic getFont(fontFamily, fontWeight, device, strokeWidth, fontSize, variableAxes) {\n\t\tconst effectiveAxes = { ...variableAxes ?? {} };\n\t\tconst rawFont = SlugFontCache.parsedFontCache.get(fontFamily);\n\t\tif (rawFont?.variationAxes && \"opsz\" in rawFont.variationAxes && fontSize !== void 0 && effectiveAxes.opsz === void 0) {\n\t\t\tconst axis = rawFont.variationAxes.opsz;\n\t\t\tconst minOpsz = axis?.min ?? 14;\n\t\t\tconst maxOpsz = axis?.max ?? 32;\n\t\t\teffectiveAxes.opsz = Math.min(maxOpsz, Math.max(minOpsz, fontSize));\n\t\t}\n\t\tconst cacheKey = getFontCacheKey(fontFamily, fontWeight, strokeWidth, effectiveAxes);\n\t\tconst cached = SlugFontCache.cache.get(cacheKey);\n\t\tif (cached) {\n\t\t\tif (device) recreateTextures(device, cached);\n\t\t\treturn cached;\n\t\t}\n\t\tif (rawFont) {\n\t\t\tconst weight = parseFontWeight(fontWeight);\n\t\t\tlet variationFont = rawFont;\n\t\t\tlet hasTrueWeight = false;\n\t\t\tif (rawFont.variationAxes && Object.keys(rawFont.variationAxes).length > 0) try {\n\t\t\t\tif (typeof rawFont.getVariation === \"function\") {\n\t\t\t\t\tconst variationParams = {\n\t\t\t\t\t\twght: weight,\n\t\t\t\t\t\t...effectiveAxes\n\t\t\t\t\t};\n\t\t\t\t\tconst vFont = rawFont.getVariation(variationParams);\n\t\t\t\t\tif (vFont && (typeof vFont.getGlyph === \"function\" || typeof vFont.glyphForCodePoint === \"function\")) {\n\t\t\t\t\t\tvariationFont = vFont;\n\t\t\t\t\t\thasTrueWeight = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\tconsole.warn(`[SlugFontCache] Failed to get variation for ${fontFamily} with weight ${weight}:`, e);\n\t\t\t}\n\t\t\tif (variationFont && (typeof variationFont.getGlyph === \"function\" || typeof variationFont.glyphForCodePoint === \"function\")) try {\n\t\t\t\tconst generated = new SlugGenerator({\n\t\t\t\t\tfullRange: false,\n\t\t\t\t\tstrokeWidth\n\t\t\t\t}).generate(device ?? null, variationFont);\n\t\t\t\tgenerated.hasTrueWeight = hasTrueWeight;\n\t\t\t\tgenerated.weight = weight;\n\t\t\t\tgenerated.fontFamily = fontFamily;\n\t\t\t\tSlugFontCache.cache.set(cacheKey, generated);\n\t\t\t\treturn generated;\n\t\t\t} catch (e) {\n\t\t\t\tconsole.warn(`[SlugFontCache] Failed to generate variation font for ${fontFamily}:`, e);\n\t\t\t}\n\t\t}\n\t\tconst baseFont = SlugFontCache.cache.get(fontFamily);\n\t\tif (baseFont) {\n\t\t\tbaseFont.fontFamily = fontFamily;\n\t\t\tif (device) recreateTextures(device, baseFont);\n\t\t}\n\t\treturn baseFont;\n\t}\n\tstatic registerFont(fontFamily, font) {\n\t\tfont.fontFamily = fontFamily;\n\t\tSlugFontCache.cache.set(fontFamily, font);\n\t}\n\tstatic ensureTextures(device, font) {\n\t\trecreateTextures(device, font);\n\t}\n\tstatic addListener(listener) {\n\t\tSlugFontCache.listeners.add(listener);\n\t\treturn () => {\n\t\t\tSlugFontCache.listeners.delete(listener);\n\t\t};\n\t}\n\tstatic isFailed(fontFamily) {\n\t\tconst failedAt = SlugFontCache.failedFonts.get(fontFamily);\n\t\tif (!failedAt) return false;\n\t\tif (Date.now() - failedAt > 5e3) {\n\t\t\tSlugFontCache.failedFonts.delete(fontFamily);\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t}\n\tstatic clearFailed(fontFamily) {\n\t\tif (fontFamily) SlugFontCache.failedFonts.delete(fontFamily);\n\t\telse SlugFontCache.failedFonts.clear();\n\t}\n\tstatic async preloadSlugFont(device, fontFamily, fontUrl, whitelist, renderId) {\n\t\tif (SlugFontCache.isFailed(fontFamily)) throw new Error(`Font \"${fontFamily}\" recently failed to load.`);\n\t\tlet slugFont;\n\t\tconst cached = SlugFontCache.cache.get(fontFamily);\n\t\tlet delayHandle = null;\n\t\tif (typeof window !== \"undefined\") {\n\t\t\tconst win = window;\n\t\t\twin.renderer_delayRenderHandles = win.renderer_delayRenderHandles || [];\n\t\t\tif (renderId) delayHandle = `${renderId}-font-${Math.random()}`;\n\t\t\telse delayHandle = Math.random();\n\t\t\twin.renderer_delayRenderHandles.push(delayHandle);\n\t\t}\n\t\ttry {\n\t\t\tif (cached) slugFont = cached;\n\t\t\telse {\n\t\t\t\tlet activePromise = SlugFontCache.loadingPromises.get(fontFamily);\n\t\t\t\tif (activePromise) slugFont = await activePromise;\n\t\t\t\telse {\n\t\t\t\t\tactivePromise = (async () => {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tlet buffer;\n\t\t\t\t\t\t\tconst isNode = !!globalThis.__IS_HEADLESS_RENDERER__ || typeof window === \"undefined\" || typeof globalThis.document === \"undefined\";\n\t\t\t\t\t\t\tconst isHttp = fontUrl.startsWith(\"http://\") || fontUrl.startsWith(\"https://\");\n\t\t\t\t\t\t\tif (isNode && !isHttp) {\n\t\t\t\t\t\t\t\tconst fs$1 = await import(\n\t\t\t\t\t\t\t\t\t/* webpackIgnore: true */\n\t\t\t\t\t\t\t\t\t\"node:fs/promises\"\n);\n\t\t\t\t\t\t\t\tconst path$1 = await import(\n\t\t\t\t\t\t\t\t\t/* webpackIgnore: true */\n\t\t\t\t\t\t\t\t\t\"node:path\"\n);\n\t\t\t\t\t\t\t\tconst fontDirs = [];\n\t\t\t\t\t\t\t\tif (process.env.FONTS_DIR) fontDirs.push(path$1.resolve(process.env.FONTS_DIR));\n\t\t\t\t\t\t\t\tif (process.env.FRAMEFIELDS_FONTS_DIR) fontDirs.push(path$1.resolve(process.env.FRAMEFIELDS_FONTS_DIR));\n\t\t\t\t\t\t\t\tlet currentDir = process.cwd();\n\t\t\t\t\t\t\t\tfor (let i = 0; i < 5; i++) {\n\t\t\t\t\t\t\t\t\tfontDirs.push(path$1.resolve(currentDir, \"assets/fonts\"));\n\t\t\t\t\t\t\t\t\tconst parent = path$1.dirname(currentDir);\n\t\t\t\t\t\t\t\t\tif (parent === currentDir) break;\n\t\t\t\t\t\t\t\t\tcurrentDir = parent;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tconst candidates = [];\n\t\t\t\t\t\t\t\tconst addCandidate = (candidatePath) => {\n\t\t\t\t\t\t\t\t\tif (!candidates.includes(candidatePath)) candidates.push(candidatePath);\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\tif (fontUrl && !fontUrl.startsWith(\"//api/\")) {\n\t\t\t\t\t\t\t\t\tlet fontPath = fontUrl;\n\t\t\t\t\t\t\t\t\tif (fontUrl.startsWith(\"file://\")) try {\n\t\t\t\t\t\t\t\t\t\tfontPath = new URL(fontUrl).pathname;\n\t\t\t\t\t\t\t\t\t} catch {\n\t\t\t\t\t\t\t\t\t\tfontPath = fontUrl.replace(/^file:\\/\\//, \"\");\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\taddCandidate(fontPath);\n\t\t\t\t\t\t\t\t\taddCandidate(path$1.resolve(process.cwd(), fontPath));\n\t\t\t\t\t\t\t\t\tfor (const dir of fontDirs) addCandidate(path$1.resolve(dir, path$1.basename(fontPath)));\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tconst cleanFamily = fontFamily.replace(/['\"]/g, \"\").trim();\n\t\t\t\t\t\t\t\tconst variations = [\n\t\t\t\t\t\t\t\t\tcleanFamily,\n\t\t\t\t\t\t\t\t\tcleanFamily.replace(/ /g, \"\"),\n\t\t\t\t\t\t\t\t\tcleanFamily.replace(/ /g, \"_\")\n\t\t\t\t\t\t\t\t];\n\t\t\t\t\t\t\t\tfor (const dir of fontDirs) for (const v of variations) {\n\t\t\t\t\t\t\t\t\taddCandidate(path$1.resolve(dir, `${v}.ttf`));\n\t\t\t\t\t\t\t\t\taddCandidate(path$1.resolve(dir, `${v}.otf`));\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tfor (const dir of fontDirs) {\n\t\t\t\t\t\t\t\t\taddCandidate(path$1.resolve(dir, \"Inter.ttf\"));\n\t\t\t\t\t\t\t\t\taddCandidate(path$1.resolve(dir, \"Inter.otf\"));\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tlet nodeBuffer = null;\n\t\t\t\t\t\t\t\tfor (const c of candidates) try {\n\t\t\t\t\t\t\t\t\tnodeBuffer = await fs$1.readFile(c);\n\t\t\t\t\t\t\t\t\tif (nodeBuffer && nodeBuffer.length > 0) break;\n\t\t\t\t\t\t\t\t} catch {}\n\t\t\t\t\t\t\t\tif (!nodeBuffer) throw new Error(`Could not resolve font file for \"${fontFamily}\" (${fontUrl})`);\n\t\t\t\t\t\t\t\tbuffer = nodeBuffer.buffer.slice(nodeBuffer.byteOffset, nodeBuffer.byteOffset + nodeBuffer.byteLength);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tconst response = await fetch(fontUrl);\n\t\t\t\t\t\t\t\tif (!response.ok) throw new Error(`Failed to fetch font from ${fontUrl}: ${response.statusText}`);\n\t\t\t\t\t\t\t\tbuffer = await response.arrayBuffer();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tconst startTime = performance.now();\n\t\t\t\t\t\t\tconst font = parseFontBuffer(new Uint8Array(buffer));\n\t\t\t\t\t\t\tconst parseTime = performance.now();\n\t\t\t\t\t\t\tSlugFontCache.parsedFontCache.set(fontFamily, font);\n\t\t\t\t\t\t\tconst generated = new SlugGenerator({\n\t\t\t\t\t\t\t\tfullRange: false,\n\t\t\t\t\t\t\t\twhitelist: whitelist || null\n\t\t\t\t\t\t\t}).generate(device, font);\n\t\t\t\t\t\t\tconst generateTime = performance.now();\n\t\t\t\t\t\t\tdebugLog(`[SlugFontCache] Preloaded and parsed font \"${fontFamily}\":\\n - fontkit parse: ${(parseTime - startTime).toFixed(2)}ms\\n - slug generation: ${(generateTime - parseTime).toFixed(2)}ms\\n - total: ${(generateTime - startTime).toFixed(2)}ms`);\n\t\t\t\t\t\t\tgenerated.fontFamily = fontFamily;\n\t\t\t\t\t\t\tSlugFontCache.cache.set(fontFamily, generated);\n\t\t\t\t\t\t\tSlugFontCache.listeners.forEach((l) => {\n\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\tl(fontFamily);\n\t\t\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t\t\tconsole.error(\"[SlugFontCache] Error in listener:\", e);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\treturn generated;\n\t\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\t\tSlugFontCache.failedFonts.set(fontFamily, Date.now());\n\t\t\t\t\t\t\tthrow err;\n\t\t\t\t\t\t} finally {\n\t\t\t\t\t\t\tSlugFontCache.loadingPromises.delete(fontFamily);\n\t\t\t\t\t\t}\n\t\t\t\t\t})();\n\t\t\t\t\tSlugFontCache.loadingPromises.set(fontFamily, activePromise);\n\t\t\t\t\tslugFont = await activePromise;\n\t\t\t\t}\n\t\t\t}\n\t\t} finally {\n\t\t\tif (delayHandle !== null && typeof window !== \"undefined\") {\n\t\t\t\tconst win = window;\n\t\t\t\tif (win.renderer_delayRenderHandles) {\n\t\t\t\t\tconst idx = win.renderer_delayRenderHandles.indexOf(delayHandle);\n\t\t\t\t\tif (idx > -1) win.renderer_delayRenderHandles.splice(idx, 1);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (device) {\n\t\t\tconst hadTex = !!slugFont.curvesTex;\n\t\t\trecreateTextures(device, slugFont);\n\t\t\tif (!hadTex && slugFont.curvesTex) SlugFontCache.listeners.forEach((l) => {\n\t\t\t\ttry {\n\t\t\t\t\tl(fontFamily);\n\t\t\t\t} catch (e) {\n\t\t\t\t\tconsole.error(\"[SlugFontCache] Error in listener:\", e);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\treturn slugFont;\n\t}\n\t/**\n\t* Preloads the emoji font in the browser using the Cache API and registers\n\t* a FontFace so canvas 2D can render emojis natively.\n\t* No-op in Node.js environments.\n\t*/\n\tstatic async preloadEmojiFontFace(url) {\n\t\tif (typeof window === \"undefined\" || typeof caches === \"undefined\" || typeof FontFace === \"undefined\") return;\n\t\tSlugFontCache.emojiFontUrl = url;\n\t\tif (SlugFontCache.emojiFontFaceLoadPromise) {\n\t\t\tawait SlugFontCache.emojiFontFaceLoadPromise;\n\t\t\treturn;\n\t\t}\n\t\tSlugFontCache.emojiFontFaceLoadPromise = (async () => {\n\t\t\ttry {\n\t\t\t\tconst cache = await caches.open(\"gatewai-emoji-font\");\n\t\t\t\tlet response = await cache.match(url);\n\t\t\t\tif (!response) {\n\t\t\t\t\tconst networkResponse = await fetch(url);\n\t\t\t\t\tif (!networkResponse.ok) throw new Error(`Failed to fetch emoji font from ${url}: ${networkResponse.statusText}`);\n\t\t\t\t\tawait cache.put(url, networkResponse.clone());\n\t\t\t\t\tresponse = networkResponse;\n\t\t\t\t}\n\t\t\t\tconst arrayBuffer = await response.arrayBuffer();\n\t\t\t\tSlugFontCache.parseTableDirectory(new Uint8Array(arrayBuffer));\n\t\t\t\tconst loadedFace = await new FontFace(\"FramefieldsEmoji\", arrayBuffer).load();\n\t\t\t\tdocument.fonts.add(loadedFace);\n\t\t\t\tawait document.fonts.ready;\n\t\t\t\tdebugLog(\"[SlugFontCache] Emoji font preloaded and registered via Cache API.\");\n\t\t\t\tSlugFontCache.listeners.forEach((l) => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tl(\"FramefieldsEmoji\");\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tconsole.error(\"[SlugFontCache] Error in listener:\", e);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t} catch (err) {\n\t\t\t\tconsole.warn(\"[SlugFontCache] Failed to preload emoji font face:\", err);\n\t\t\t\tSlugFontCache.emojiFontFaceLoadPromise = null;\n\t\t\t\tthrow err;\n\t\t\t}\n\t\t})();\n\t\tawait SlugFontCache.emojiFontFaceLoadPromise;\n\t}\n\tstatic destroy() {\n\t\tfor (const font of SlugFontCache.cache.values()) {\n\t\t\tfont.curvesTex?.destroy();\n\t\t\tfont.bandsTex?.destroy();\n\t\t}\n\t\tSlugFontCache.cache.clear();\n\t\tSlugFontCache.failedFonts.clear();\n\t\tfor (const tex of SlugFontCache.emojiTextureCache.values()) tex.destroy();\n\t\tSlugFontCache.emojiTextureCache.clear();\n\t\tSlugFontCache.emojiFontBuffer = null;\n\t\tSlugFontCache.emojiFontLoadPromise = null;\n\t\tSlugFontCache.emojiFontFaceLoadPromise = null;\n\t}\n};\n\n//#endregion\n//#region src/slug/text-shaping.ts\n/**\n* Turns styled text into positioned glyph clusters: Unicode bidi levels\n* (bidi-js), OpenType shaping per run (fontkit: GSUB joining forms and\n* ligatures, GPOS kerning and mark placement), then line breaking and the\n* per-line visual reordering of UAX #9 (L1, L2).\n*\n* Clusters stay in logical (reading) order until {@link placeLine}, so line\n* breaking, word/char indices and typewriter prefixes all follow the text.\n*/\nconst EMOJI_REGEX = /(\\p{Extended_Pictographic}|\\p{Emoji_Presentation}|[☀-➿])/u;\n/** Characters that make bidi analysis necessary (RTL letters and explicit RTL controls). */\nconst RTL_REGEX = /[-ࣿיִ-﷿ﹰ-\\u{10800}-\\u{10FFF}\\u{1E800}-\\u{1EFFF}]/u;\n/**\n* Scripts whose letters join; letter spacing would break the joins, so CSS\n* says not to apply it there (Arabic, Syriac, Thaana, N'Ko, Mongolian, …).\n*/\nconst CURSIVE_REGEX = /[-ࣿﭐ-﷿ﹰ-᠀-\\u{10D00}-\\u{10D3F}\\u{10F30}-\\u{10F6F}]/u;\nconst SPACE_REGEX = /^\\s+$/;\nlet bidiInstance = null;\nfunction bidi() {\n\tbidiInstance ??= bidiFactory();\n\treturn bidiInstance;\n}\n/** BMP stand-ins with the same bidi class, for astral characters bidi-js reads per UTF-16 unit. */\nconst BIDI_STAND_INS = {\n\tL: \"a\",\n\tR: \"א\",\n\tAL: \"ا\",\n\tEN: \"0\",\n\tAN: \"٠\",\n\tES: \"+\",\n\tET: \"#\",\n\tCS: \",\",\n\tNSM: \"̀\",\n\tBN: \"\",\n\tWS: \" \",\n\tON: \"!\"\n};\nfunction bidiLevels(text, direction) {\n\tconst b = bidi();\n\tlet analysed = text;\n\tif (/[\\uD800-\\uDBFF]/.test(text)) {\n\t\tlet out = \"\";\n\t\tfor (const ch of text) {\n\t\t\tif (ch.length === 1) {\n\t\t\t\tout += ch;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst stand = BIDI_STAND_INS[b.getBidiCharTypeName(ch)] ?? \"!\";\n\t\t\tout += stand + stand;\n\t\t}\n\t\tanalysed = out;\n\t}\n\tconst result = b.getEmbeddingLevels(analysed, direction === \"auto\" ? void 0 : direction);\n\treturn {\n\t\tlevels: result.levels,\n\t\tbaseLevel: result.paragraphs[0]?.level ?? (direction === \"rtl\" ? 1 : 0)\n\t};\n}\nconst graphemeSegmenter = typeof Intl !== \"undefined\" && typeof Intl.Segmenter === \"function\" ? new Intl.Segmenter(void 0, { granularity: \"grapheme\" }) : null;\nfunction segmentGraphemes(text) {\n\tconst out = [];\n\tif (graphemeSegmenter) {\n\t\tfor (const s of graphemeSegmenter.segment(text)) out.push({\n\t\t\ttext: s.segment,\n\t\t\tstart: s.index\n\t\t});\n\t\treturn out;\n\t}\n\tlet i = 0;\n\tfor (const ch of text) {\n\t\tout.push({\n\t\t\ttext: ch,\n\t\t\tstart: i\n\t\t});\n\t\ti += ch.length;\n\t}\n\treturn out;\n}\nconst objectIds = /* @__PURE__ */ new WeakMap();\nlet nextObjectId = 1;\nfunction objectId(o) {\n\tlet id = objectIds.get(o);\n\tif (id === void 0) {\n\t\tid = nextObjectId++;\n\t\tobjectIds.set(o, id);\n\t}\n\treturn id;\n}\n/** A stable identity for a font, for cache keys (family names are shared by weights). */\nfunction fontIdentity(font) {\n\treturn objectId(font);\n}\nconst SHAPE_CACHE_MAX = 2048;\nconst shapeCache = /* @__PURE__ */ new Map();\nfunction resolveShapingSource(font) {\n\tconst own = getSlugFontSource(font) ?? viewSources.get(font);\n\tif (own) return own;\n\tif (!font.fontFamily) return null;\n\treturn globalThis[Symbol.for(\"gatewai.slugFontCache.parsed\")]?.get(font.fontFamily) ?? null;\n}\nfunction notdef(font) {\n\treturn font.codePoints.get(-1) ?? font.glyphs?.get(0);\n}\n/** Looks a code point up, generating its glyph on first use. */\nfunction glyphForCodePoint(font, codePoint) {\n\tlet cp = font.codePoints.get(codePoint);\n\tif (!cp && SlugGenerator.ensureCodePoints(font, [codePoint])) cp = font.codePoints.get(codePoint);\n\treturn cp ?? notdef(font);\n}\n/** Invisible format characters (joiners, bidi controls, variation selectors). */\nfunction isIgnorable(cp) {\n\treturn cp === 173 || cp >= 8203 && cp <= 8207 || cp >= 8234 && cp <= 8238 || cp >= 8288 && cp <= 8303 || cp >= 65024 && cp <= 65039 || cp === 65279;\n}\nfunction isIgnorableOnly(text) {\n\tfor (const ch of text) if (!isIgnorable(ch.codePointAt(0) ?? 0)) return false;\n\treturn text.length > 0;\n}\n/** One glyph per code point through the cmap: fonts with no shaping source. */\nfunction mapRun(font, text) {\n\tconst out = [];\n\tlet offset = 0;\n\tfor (const ch of text) {\n\t\tconst codePoint = ch.codePointAt(0) ?? 0;\n\t\tif (isIgnorable(codePoint)) {\n\t\t\toffset += ch.length;\n\t\t\tcontinue;\n\t\t}\n\t\tconst cp = glyphForCodePoint(font, codePoint);\n\t\tif (cp) out.push({\n\t\t\tcp,\n\t\t\toffset,\n\t\t\tend: offset + ch.length,\n\t\t\txAdvance: cp.advanceWidth,\n\t\t\txOffset: 0,\n\t\t\tyOffset: 0\n\t\t});\n\t\toffset += ch.length;\n\t}\n\treturn out;\n}\nconst VARIATION_SELECTOR_REGEX = /[\\uFE00-\\uFE0F\\u{E0100}-\\u{E01EF}]/u;\nconst MARK_REGEX = /^\\p{M}$/u;\n/**\n* Runs fontkit's layout and returns glyphs in logical order with the code\n* points each one stands for.\n*\n* fontkit caches glyph objects per glyph id, and a cached glyph keeps the\n* code points of whatever text created it first. The shapers read those code\n* points (Arabic joining types, marks), and so would cluster mapping, so the\n* run is fed fresh glyph copies carrying this text's code points, and the\n* post-substitution code points are read from the engine's own glyph infos.\n*/\nfunction layoutWithCodePoints(source, text, rtl, ligatures) {\n\tconst internals = source;\n\tif (typeof source.layout !== \"function\") return null;\n\tlet input = text;\n\tif (typeof internals.glyphsForString === \"function\") {\n\t\tconst base = internals.glyphsForString(text);\n\t\tconst chars = Array.from(text);\n\t\tconst fresh = [];\n\t\tlet c = 0;\n\t\tfor (const g$1 of base) {\n\t\t\twhile (c < chars.length && VARIATION_SELECTOR_REGEX.test(chars[c])) c++;\n\t\t\tconst cps = [];\n\t\t\tif (c < chars.length) cps.push(chars[c++].codePointAt(0) ?? 0);\n\t\t\twhile (c < chars.length && VARIATION_SELECTOR_REGEX.test(chars[c])) cps.push(chars[c++].codePointAt(0) ?? 0);\n\t\t\tconst copy = Object.assign(Object.create(Object.getPrototypeOf(g$1)), g$1, {\n\t\t\t\tcodePoints: cps,\n\t\t\t\tisMark: cps.length > 0 && cps.every((cp) => MARK_REGEX.test(String.fromCodePoint(cp))),\n\t\t\t\tisLigature: cps.length > 1\n\t\t\t});\n\t\t\tfresh.push(copy);\n\t\t}\n\t\tinput = fresh;\n\t}\n\tconst engine = internals._layoutEngine?.engine;\n\tlet infos = null;\n\tconst originalCleanup = engine?.cleanup;\n\tif (engine && typeof originalCleanup === \"function\") engine.cleanup = function() {\n\t\tinfos = this.glyphInfos ? this.glyphInfos.slice() : null;\n\t\treturn originalCleanup.call(this);\n\t};\n\tlet run;\n\ttry {\n\t\trun = source.layout(input, ligatures ? {} : {\n\t\t\tliga: false,\n\t\t\tclig: false\n\t\t}, void 0, void 0, rtl ? \"rtl\" : \"ltr\");\n\t} catch {\n\t\treturn null;\n\t} finally {\n\t\tif (engine && originalCleanup) {\n\t\t\tdelete engine.cleanup;\n\t\t\tif (engine.cleanup !== originalCleanup) engine.cleanup = originalCleanup;\n\t\t}\n\t}\n\tconst glyphs = run.glyphs.slice();\n\tconst positions = run.positions.slice();\n\tif (rtl) {\n\t\tglyphs.reverse();\n\t\tpositions.reverse();\n\t}\n\tconst captured = infos;\n\treturn {\n\t\tglyphs,\n\t\tcodePoints: captured && captured.length === glyphs.length ? captured.map((info) => info.codePoints ?? []) : glyphs.map((g$1) => g$1.codePoints ?? []),\n\t\tpositions\n\t};\n}\nfunction shapeRun(font, text, rtl, ligatures) {\n\tconst source = resolveShapingSource(font);\n\tif (!source || typeof source.layout !== \"function\") return mapRun(font, text);\n\tconst key = `${objectId(font)}|${rtl ? 1 : 0}|${ligatures ? 1 : 0}|${text}`;\n\tconst hit = shapeCache.get(key);\n\tif (hit) return hit;\n\tconst shaped = layoutWithCodePoints(source, text, rtl, ligatures);\n\tif (!shaped) return mapRun(font, text);\n\tconst { glyphs, codePoints: glyphCps, positions } = shaped;\n\tconst runCps = [];\n\tconst cpOffsets = [];\n\t{\n\t\tlet o = 0;\n\t\tfor (const ch of text) {\n\t\t\trunCps.push(ch.codePointAt(0) ?? 0);\n\t\t\tcpOffsets.push(o);\n\t\t\to += ch.length;\n\t\t}\n\t\tcpOffsets.push(o);\n\t}\n\tconst ids = /* @__PURE__ */ new Set();\n\tfor (const g$1 of glyphs) ids.add(g$1.id);\n\tSlugGenerator.ensureGlyphs(font, ids);\n\tconst out = [];\n\tlet cursor = 0;\n\tlet lastStart = 0;\n\tfor (let i = 0; i < glyphs.length; i++) {\n\t\tconst g$1 = glyphs[i];\n\t\tconst cps = glyphCps[i];\n\t\tconst pos = positions[i];\n\t\tconst n = cps.length;\n\t\tlet start = lastStart;\n\t\tlet count = 0;\n\t\tif (n > 0) {\n\t\t\tstart = Math.min(cursor, runCps.length - 1);\n\t\t\tfor (let k = cursor; k < Math.min(runCps.length, cursor + 8); k++) if (runCps[k] === cps[0]) {\n\t\t\t\tstart = k;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcount = Math.min(n, runCps.length - start);\n\t\t\tcursor = Math.max(cursor, start + count);\n\t\t\tlastStart = start;\n\t\t}\n\t\tconst cp = font.glyphs?.get(g$1.id) ?? (n > 0 ? font.codePoints.get(cps[0]) : void 0) ?? notdef(font);\n\t\tif (!cp) continue;\n\t\tout.push({\n\t\t\tcp,\n\t\t\toffset: cpOffsets[Math.max(0, start)] ?? 0,\n\t\t\tend: cpOffsets[Math.max(0, start) + Math.max(1, count)] ?? text.length,\n\t\t\txAdvance: pos.xAdvance,\n\t\t\txOffset: pos.xOffset,\n\t\t\tyOffset: pos.yOffset\n\t\t});\n\t}\n\tif (shapeCache.size >= SHAPE_CACHE_MAX) {\n\t\tconst first = shapeCache.keys().next().value;\n\t\tif (first !== void 0) shapeCache.delete(first);\n\t}\n\tshapeCache.set(key, out);\n\treturn out;\n}\n/**\n* Shapes one paragraph (no line breaks inside) given as styled segments.\n* Returns its clusters in logical order and its resolved base level.\n*/\nfunction shapeParagraph(segments, options = {}) {\n\tconst direction = options.direction ?? \"auto\";\n\tconst ligatures = options.ligatures ?? true;\n\tlet text = \"\";\n\tconst styleAt = [];\n\tfor (const seg of segments) {\n\t\ttext += seg.text;\n\t\tfor (let i = 0; i < seg.text.length; i++) styleAt.push(seg.style);\n\t}\n\tif (text.length === 0) return {\n\t\tclusters: [],\n\t\tbaseLevel: direction === \"rtl\" ? 1 : 0\n\t};\n\tconst analysis = direction === \"rtl\" || RTL_REGEX.test(text) ? bidiLevels(text, direction) : null;\n\tconst levels = analysis?.levels ?? null;\n\tconst levelAt = (i) => levels ? levels[i] : 0;\n\tconst baseLevel = analysis?.baseLevel ?? 0;\n\tlet shapeText = text;\n\tif (levels) {\n\t\tconst b = bidi();\n\t\tlet mirrored = \"\";\n\t\tfor (let i = 0; i < text.length; i++) {\n\t\t\tconst ch = text[i];\n\t\t\tmirrored += levels[i] & 1 ? b.getMirroredCharacter(ch) ?? ch : ch;\n\t\t}\n\t\tshapeText = mirrored;\n\t}\n\tconst graphemes = segmentGraphemes(text);\n\tconst graphemeAt = new Int32Array(text.length);\n\tfor (let g$1 = 0; g$1 < graphemes.length; g$1++) {\n\t\tconst { start, text: gt } = graphemes[g$1];\n\t\tfor (let k = 0; k < gt.length; k++) graphemeAt[start + k] = g$1;\n\t}\n\tconst isEmojiGrapheme = graphemes.map((g$1) => options.emoji !== false && EMOJI_REGEX.test(g$1.text));\n\tconst glyphsOf = graphemes.map(() => []);\n\tconst mergeTo = new Int32Array(graphemes.length);\n\tfor (let g$1 = 0; g$1 < graphemes.length; g$1++) mergeTo[g$1] = g$1;\n\tlet runStart = 0;\n\tconst flushRun = (end) => {\n\t\tif (end <= runStart) return;\n\t\tconst style = styleAt[runStart];\n\t\tconst runText = shapeText.slice(runStart, end);\n\t\tconst rtl = (levelAt(runStart) & 1) === 1;\n\t\tfor (const rg of shapeRun(style.font, runText, rtl, ligatures)) {\n\t\t\tconst at = runStart + rg.offset;\n\t\t\tconst g0 = graphemeAt[Math.min(at, text.length - 1)];\n\t\t\tconst g1 = graphemeAt[Math.min(runStart + rg.end - 1, text.length - 1)];\n\t\t\tglyphsOf[g0].push(rg);\n\t\t\tfor (let g$1 = g0 + 1; g$1 <= g1; g$1++) mergeTo[g$1] = mergeTo[g0];\n\t\t}\n\t};\n\tfor (let g$1 = 0; g$1 < graphemes.length; g$1++) {\n\t\tconst start = graphemes[g$1].start;\n\t\tif (isEmojiGrapheme[g$1]) {\n\t\t\tflushRun(start);\n\t\t\trunStart = start + graphemes[g$1].text.length;\n\t\t\tcontinue;\n\t\t}\n\t\tif (start > runStart) {\n\t\t\tconst prev = start - 1;\n\t\t\tif (styleAt[start].font !== styleAt[prev].font || styleAt[start].fontSize !== styleAt[prev].fontSize || levelAt(start) !== levelAt(prev)) {\n\t\t\t\tflushRun(start);\n\t\t\t\trunStart = start;\n\t\t\t}\n\t\t}\n\t}\n\tflushRun(text.length);\n\tconst clusters = [];\n\tfor (let g$1 = 0; g$1 < graphemes.length;) {\n\t\tlet end = g$1 + 1;\n\t\twhile (end < graphemes.length && mergeTo[end] === g$1) end++;\n\t\tconst start = graphemes[g$1].start;\n\t\tconst stop = end < graphemes.length ? graphemes[end].start : text.length;\n\t\tconst clusterText = text.slice(start, stop);\n\t\tconst style = styleAt[start];\n\t\tconst level = levelAt(start);\n\t\tconst rtl = (level & 1) === 1;\n\t\tconst scale = style.fontSize / style.font.unitsPerEm;\n\t\tconst isEmoji = isEmojiGrapheme[g$1];\n\t\tconst isSpace = SPACE_REGEX.test(clusterText);\n\t\tif (isIgnorableOnly(clusterText)) {\n\t\t\tg$1 = end;\n\t\t\tcontinue;\n\t\t}\n\t\tconst logical = [];\n\t\tfor (let k = g$1; k < end; k++) logical.push(...glyphsOf[k]);\n\t\tconst visual = rtl ? logical.slice().reverse() : logical;\n\t\tconst spacing = CURSIVE_REGEX.test(clusterText) ? 0 : style.letterSpacing;\n\t\tlet glyphAdvance = 0;\n\t\tconst glyphs = [];\n\t\tif (isEmoji) glyphAdvance = style.fontSize;\n\t\telse {\n\t\t\tconst lead = rtl ? spacing : 0;\n\t\t\tfor (const rg of visual) {\n\t\t\t\tglyphs.push({\n\t\t\t\t\tcp: rg.cp,\n\t\t\t\t\tdx: lead + glyphAdvance + rg.xOffset * scale,\n\t\t\t\t\tdy: -rg.yOffset * scale\n\t\t\t\t});\n\t\t\t\tglyphAdvance += rg.xAdvance * scale;\n\t\t\t}\n\t\t}\n\t\tconst inkStart = rtl ? spacing : 0;\n\t\tclusters.push({\n\t\t\ttext: clusterText,\n\t\t\tstart,\n\t\t\tstyle,\n\t\t\tisSpace,\n\t\t\tisEmoji,\n\t\t\tlevel,\n\t\t\tglyphs,\n\t\t\tadvance: glyphAdvance + spacing,\n\t\t\tspacing,\n\t\t\tinkStart,\n\t\t\tinkEnd: inkStart + glyphAdvance\n\t\t});\n\t\tg$1 = end;\n\t}\n\treturn {\n\t\tclusters,\n\t\tbaseLevel\n\t};\n}\n/** Glyph-only stand-ins for fontkit fonts that are shaped but never drawn by Slug. */\nconst viewSources = /* @__PURE__ */ new WeakMap();\nconst fontViews = /* @__PURE__ */ new WeakMap();\n/** A glyph map that makes a metrics-only record for any glyph id asked for. */\nvar GlyphRecordMap = class extends Map {\n\tconstructor(source) {\n\t\tsuper();\n\t\tthis.source = source;\n\t}\n\tget(id) {\n\t\tlet record = super.get(id);\n\t\tif (!record) {\n\t\t\tlet advanceWidth = 0;\n\t\t\ttry {\n\t\t\t\tadvanceWidth = this.source.getGlyph?.(id)?.advanceWidth ?? 0;\n\t\t\t} catch {\n\t\t\t\tadvanceWidth = 0;\n\t\t\t}\n\t\t\trecord = {\n\t\t\t\tcodePoint: -2,\n\t\t\t\tglyphId: id,\n\t\t\t\twidth: 0,\n\t\t\t\theight: 0,\n\t\t\t\tadvanceWidth,\n\t\t\t\tbearingX: 0,\n\t\t\t\tbearingY: 0,\n\t\t\t\tbandCount: 0,\n\t\t\t\tbandDimX: 0,\n\t\t\t\tbandDimY: 0,\n\t\t\t\tbandsTexCoordX: 0,\n\t\t\t\tbandsTexCoordY: 0\n\t\t\t};\n\t\t\tsuper.set(id, record);\n\t\t}\n\t\treturn record;\n\t}\n\thas(id) {\n\t\treturn this.get(id) !== void 0;\n\t}\n};\nfunction fontView(source) {\n\tlet view = fontViews.get(source);\n\tif (!view) {\n\t\tconst glyphs = new GlyphRecordMap(source);\n\t\tview = {\n\t\t\tcodePoints: new Map([[-1, glyphs.get(0)]]),\n\t\t\tglyphs,\n\t\t\tcurvesTex: null,\n\t\t\tbandsTex: null,\n\t\t\tascender: source.ascent || 0,\n\t\t\tdescender: source.descent || 0,\n\t\t\tlineGap: source.lineGap || 0,\n\t\t\tunitsPerEm: source.unitsPerEm || 1e3\n\t\t};\n\t\tfontViews.set(source, view);\n\t\tviewSources.set(view, source);\n\t}\n\treturn view;\n}\n/**\n* Shapes and orders one line of text set straight from a fontkit font (for\n* geometry built from outlines, such as extruded 3D text). Positions are in\n* font units, left to right; `letterSpacing` is in font units too.\n*/\nfunction shapeLineFromFont(source, text, options = {}) {\n\tconst font = fontView(source);\n\tconst letterSpacing = options.letterSpacing ?? 0;\n\tconst p = shapeParagraph([{\n\t\ttext,\n\t\tstyle: {\n\t\t\tfont,\n\t\t\tfontSize: font.unitsPerEm,\n\t\t\tletterSpacing\n\t\t}\n\t}], {\n\t\tdirection: options.direction,\n\t\tligatures: options.ligatures ?? letterSpacing === 0,\n\t\temoji: false\n\t});\n\tconst line = placeLine(p.clusters, p.baseLevel);\n\tconst glyphs = [];\n\tlet width = 0;\n\tfor (const { cluster, x } of line.clusters) {\n\t\twidth = x + cluster.advance;\n\t\tfor (const g$1 of cluster.glyphs) {\n\t\t\tif (g$1.cp.glyphId === void 0) continue;\n\t\t\tglyphs.push({\n\t\t\t\tglyphId: g$1.cp.glyphId,\n\t\t\t\tx: x + g$1.dx,\n\t\t\t\ty: -g$1.dy\n\t\t\t});\n\t\t}\n\t}\n\treturn {\n\t\tglyphs,\n\t\twidth,\n\t\tbaseLevel: p.baseLevel\n\t};\n}\n/**\n* Greedy word wrap over clusters in logical order: breaks only between\n* whitespace and non-whitespace runs, drops whitespace at the start of each\n* line, and never splits a word.\n*/\nfunction breakLines(clusters, maxWidth) {\n\tconst lines = [];\n\tlet line = [];\n\tlet lineWidth = 0;\n\tlet i = 0;\n\twhile (i < clusters.length) {\n\t\tconst isSpace = clusters[i].isSpace;\n\t\tlet j = i;\n\t\tlet tokenWidth = 0;\n\t\twhile (j < clusters.length && clusters[j].isSpace === isSpace) {\n\t\t\ttokenWidth += clusters[j].advance;\n\t\t\tj++;\n\t\t}\n\t\tconst token = clusters.slice(i, j);\n\t\ti = j;\n\t\tif (isSpace) {\n\t\t\tif (line.length === 0) continue;\n\t\t\tline.push(...token);\n\t\t\tlineWidth += tokenWidth;\n\t\t\tcontinue;\n\t\t}\n\t\tconst trailing = token[token.length - 1].spacing;\n\t\tconst visualWidth = trailing > 0 ? tokenWidth - trailing : tokenWidth;\n\t\tif (lineWidth > 0 && lineWidth + visualWidth > maxWidth) {\n\t\t\tlines.push(line);\n\t\t\tline = [];\n\t\t\tlineWidth = 0;\n\t\t}\n\t\tline.push(...token);\n\t\tlineWidth += tokenWidth;\n\t}\n\tlines.push(line);\n\treturn lines;\n}\n/**\n* Orders one line's clusters for display (UAX #9 L1–L2) and lays them out\n* left to right from x = 0.\n*/\nfunction placeLine(line, baseLevel) {\n\tconst n = line.length;\n\tconst levels = new Array(n);\n\tlet maxLevel = 0;\n\tlet minOdd = Number.POSITIVE_INFINITY;\n\tlet trailing = n;\n\twhile (trailing > 0 && line[trailing - 1].isSpace) trailing--;\n\tfor (let i = 0; i < n; i++) {\n\t\tconst level = i >= trailing ? baseLevel : line[i].level;\n\t\tlevels[i] = level;\n\t\tif (level > maxLevel) maxLevel = level;\n\t\tif (level & 1 && level < minOdd) minOdd = level;\n\t}\n\tconst order = Array.from({ length: n }, (_, i) => i);\n\tfor (let level = maxLevel; level >= minOdd && level > 0; level--) {\n\t\tlet i = 0;\n\t\twhile (i < n) {\n\t\t\tif (levels[order[i]] < level) {\n\t\t\t\ti++;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tlet j = i;\n\t\t\twhile (j < n && levels[order[j]] >= level) j++;\n\t\t\tconst slice = order.slice(i, j).reverse();\n\t\t\tfor (let k = 0; k < slice.length; k++) order[i + k] = slice[k];\n\t\t\ti = j;\n\t\t}\n\t}\n\tconst clusters = [];\n\tlet x = 0;\n\tlet inkLeft = Number.POSITIVE_INFINITY;\n\tlet inkRight = Number.NEGATIVE_INFINITY;\n\tfor (const idx of order) {\n\t\tconst c = line[idx];\n\t\tclusters.push({\n\t\t\tcluster: c,\n\t\t\tx\n\t\t});\n\t\tif (!c.isSpace) {\n\t\t\tinkLeft = Math.min(inkLeft, x + c.inkStart);\n\t\t\tinkRight = Math.max(inkRight, x + c.inkEnd);\n\t\t}\n\t\tx += c.advance;\n\t}\n\tif (inkLeft > inkRight) {\n\t\tinkLeft = 0;\n\t\tinkRight = 0;\n\t}\n\treturn {\n\t\tclusters,\n\t\tinkLeft,\n\t\tinkRight\n\t};\n}\n/** Resolves `start`/`end` against a paragraph's direction. */\nfunction resolveAlign(align, baseLevel) {\n\tconst rtl = (baseLevel & 1) === 1;\n\tif (align === \"start\") return rtl ? \"right\" : \"left\";\n\tif (align === \"end\") return rtl ? \"left\" : \"right\";\n\treturn align;\n}\n/** Offset that aligns a placed line inside `width`. */\nfunction alignOffset(line, align, width) {\n\tif (align === \"center\") return (width - (line.inkRight - line.inkLeft)) / 2 - line.inkLeft;\n\tif (align === \"right\") return width - line.inkRight;\n\treturn -line.inkLeft;\n}\n\n//#endregion\n//#region src/slug/slug-geometry.ts\nconst layoutCache = /* @__PURE__ */ new Map();\nconst MAX_LAYOUT_CACHE = 256;\nfunction cacheResult(key, result) {\n\tif (layoutCache.size >= MAX_LAYOUT_CACHE) {\n\t\tconst firstKey = layoutCache.keys().next().value;\n\t\tif (firstKey) layoutCache.delete(firstKey);\n\t}\n\tlayoutCache.set(key, result);\n\treturn result;\n}\n/** Reads a plain value or an animated `{ get() }` one. */\nfunction resolveValue(v) {\n\tif (v && typeof v === \"object\" && \"get\" in v && typeof v.get === \"function\") return v.get();\n\treturn v;\n}\n/**\n* Animation indices follow reading order, so a right-to-left line reveals\n* from the right. Emoji count as characters but neither start nor end words.\n*/\nfunction assignIndices(lines, applyBy) {\n\tconst indices = /* @__PURE__ */ new Map();\n\tlet wordIndex = 0;\n\tlet charIndex = 0;\n\tfor (let lineIndex = 0; lineIndex < lines.length; lineIndex++) {\n\t\tlet inWord = false;\n\t\tfor (const c of lines[lineIndex]) {\n\t\t\tif (!c.isEmoji) if (c.isSpace) {\n\t\t\t\tif (inWord) {\n\t\t\t\t\twordIndex++;\n\t\t\t\t\tinWord = false;\n\t\t\t\t}\n\t\t\t} else inWord = true;\n\t\t\tconst unitIndex = applyBy === \"line\" ? lineIndex : applyBy === \"word\" ? wordIndex : charIndex;\n\t\t\tindices.set(c, {\n\t\t\t\tcharIndex,\n\t\t\t\twordIndex,\n\t\t\t\tunitIndex\n\t\t\t});\n\t\t\tif (c.isEmoji || c.glyphs.length > 0) charIndex++;\n\t\t}\n\t\tif (inWord) wordIndex++;\n\t}\n\treturn {\n\t\tindices,\n\t\twords: wordIndex,\n\t\tchars: charIndex\n\t};\n}\n/** Optional ligatures stay off when text animates per character or is letter-spaced (as in CSS). */\nfunction useLigatures(applyBy, letterSpacing) {\n\treturn applyBy !== \"char\" && letterSpacing === 0;\n}\nvar SlugGeometry = class SlugGeometry {\n\tstatic layout(text, font, fontSize, letterSpacing, lineHeight, maxWidth, align = \"left\", applyBy = \"word\", alignWidth, pathOptions, spans, direction = \"auto\") {\n\t\tconst fontKey = fontIdentity(font);\n\t\tif (spans && spans.length > 0) {\n\t\t\tconst spansKey = spans.map((s) => `${typeof s.text === \"string\" ? s.text : \"\"}:${s.fontFamily ?? \"\"}:${s.fontWeight ?? \"\"}:${s.fontSize ?? \"\"}:${s.fill ?? \"\"}:${s.baselineShift ?? \"\"}:${s.letterSpacing ?? \"\"}`).join(\";\");\n\t\t\tconst cacheKey$1 = `${text}|${fontKey}|${fontSize}|${letterSpacing}|${lineHeight}|${maxWidth}|${align}|${applyBy}|${alignWidth ?? \"\"}|${direction}|${spansKey}`;\n\t\t\tconst cached$1 = layoutCache.get(cacheKey$1);\n\t\t\tif (cached$1) return cached$1;\n\t\t\treturn cacheResult(cacheKey$1, SlugGeometry.layoutSpans(spans, font, fontSize, letterSpacing, lineHeight, maxWidth, align, applyBy, alignWidth, direction));\n\t\t}\n\t\tif (pathOptions) return SlugGeometry.layoutOnPath(text, font, fontSize, letterSpacing, pathOptions, applyBy, direction);\n\t\tconst cacheKey = `${text}|${fontKey}|${fontSize}|${letterSpacing}|${lineHeight}|${maxWidth}|${align}|${applyBy}|${alignWidth ?? \"\"}|${direction}`;\n\t\tconst cached = layoutCache.get(cacheKey);\n\t\tif (cached) return cached;\n\t\tconst style = {\n\t\t\tfont,\n\t\t\tfontSize,\n\t\t\tletterSpacing\n\t\t};\n\t\tconst ligatures = useLigatures(applyBy, letterSpacing);\n\t\tconst lines = [];\n\t\tlet textOffset = 0;\n\t\tfor (const paragraph of text.split(\"\\n\")) {\n\t\t\tconst shaped = shapeParagraph([{\n\t\t\t\ttext: paragraph,\n\t\t\t\tstyle\n\t\t\t}], {\n\t\t\t\tdirection,\n\t\t\t\tligatures\n\t\t\t});\n\t\t\tfor (const clusters of breakLines(shaped.clusters, maxWidth)) lines.push({\n\t\t\t\tclusters,\n\t\t\t\tbaseLevel: shaped.baseLevel,\n\t\t\t\ttextOffset\n\t\t\t});\n\t\t\ttextOffset += paragraph.length + 1;\n\t\t}\n\t\tconst { indices, words, chars } = assignIndices(lines.map((l) => l.clusters), applyBy);\n\t\tconst glyphs = [];\n\t\tconst emojis = [];\n\t\tlet hasRtl = false;\n\t\tlet currentY = font.ascender * (fontSize / font.unitsPerEm);\n\t\tconst targetAlignWidth = alignWidth ?? maxWidth;\n\t\tfor (let lineIndex = 0; lineIndex < lines.length; lineIndex++) {\n\t\t\tconst { clusters, baseLevel, textOffset: offset } = lines[lineIndex];\n\t\t\tconst placed = placeLine(clusters, baseLevel);\n\t\t\tconst shift = alignOffset(placed, resolveAlign(align, baseLevel), targetAlignWidth);\n\t\t\tconst xOf = /* @__PURE__ */ new Map();\n\t\t\tfor (const p of placed.clusters) xOf.set(p.cluster, p.x + shift);\n\t\t\tif (baseLevel & 1) hasRtl = true;\n\t\t\tfor (const c of clusters) {\n\t\t\t\tconst x = xOf.get(c) ?? 0;\n\t\t\t\tconst idx = indices.get(c);\n\t\t\t\tconst rtl = (c.level & 1) === 1;\n\t\t\t\tif (rtl) hasRtl = true;\n\t\t\t\tif (c.isEmoji) {\n\t\t\t\t\temojis.push({\n\t\t\t\t\t\tchar: c.text,\n\t\t\t\t\t\tx: x + c.inkStart,\n\t\t\t\t\t\ty: currentY - fontSize,\n\t\t\t\t\t\tsize: fontSize,\n\t\t\t\t\t\tlineIndex\n\t\t\t\t\t});\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tfor (const g$1 of c.glyphs) glyphs.push({\n\t\t\t\t\tchar: c.text,\n\t\t\t\t\tcp: g$1.cp,\n\t\t\t\t\tx: x + g$1.dx,\n\t\t\t\t\ty: currentY + g$1.dy,\n\t\t\t\t\tlineIndex,\n\t\t\t\t\twordIndex: idx.wordIndex,\n\t\t\t\t\tcharIndex: idx.charIndex,\n\t\t\t\t\tunitIndex: idx.unitIndex,\n\t\t\t\t\tisSpace: c.isSpace,\n\t\t\t\t\ttextIndex: offset + c.start,\n\t\t\t\t\trtl,\n\t\t\t\t\tclusterAdvance: c.advance - c.spacing,\n\t\t\t\t\tclusterX: x,\n\t\t\t\t\tbaseRtl: (baseLevel & 1) === 1\n\t\t\t\t});\n\t\t\t}\n\t\t\tcurrentY += lineHeight;\n\t\t}\n\t\treturn cacheResult(cacheKey, {\n\t\t\tglyphs,\n\t\t\temojis,\n\t\t\ttotalHeight: currentY - lineHeight + -font.descender * (fontSize / font.unitsPerEm),\n\t\t\tlinesCount: lines.length,\n\t\t\twordsCount: words,\n\t\t\tcharsCount: chars,\n\t\t\thasRtl: hasRtl || void 0\n\t\t});\n\t}\n\tstatic measure(text, font, fontSize, letterSpacing, lineHeight, maxWidth, spans, direction = \"auto\") {\n\t\tconst effectiveMaxWidth = maxWidth ?? Number.MAX_SAFE_INTEGER;\n\t\tconst layout = SlugGeometry.layout(text, font, fontSize, letterSpacing, lineHeight, effectiveMaxWidth, \"left\", \"word\", void 0, void 0, spans, direction);\n\t\tconst fontScale = fontSize / font.unitsPerEm;\n\t\tlet contentWidth = 0;\n\t\tconst lineWidths = /* @__PURE__ */ new Map();\n\t\tfor (const g$1 of layout.glyphs) {\n\t\t\tif (g$1.isSpace) continue;\n\t\t\tconst glyphFontScale = g$1.fontScale ?? fontScale;\n\t\t\tconst glyphRight = g$1.x + g$1.cp.advanceWidth * glyphFontScale;\n\t\t\tif (glyphRight > (lineWidths.get(g$1.lineIndex) ?? 0)) lineWidths.set(g$1.lineIndex, glyphRight);\n\t\t}\n\t\tfor (const emoji of layout.emojis) {\n\t\t\tconst emojiRight = emoji.x + emoji.size;\n\t\t\tif (emojiRight > (lineWidths.get(emoji.lineIndex) ?? 0)) lineWidths.set(emoji.lineIndex, emojiRight);\n\t\t}\n\t\tfor (const w of lineWidths.values()) if (w > contentWidth) contentWidth = w;\n\t\treturn {\n\t\t\twidth: Math.ceil(contentWidth),\n\t\t\theight: Math.ceil(layout.totalHeight),\n\t\t\tlayout\n\t\t};\n\t}\n\tstatic layoutSpans(spans, defaultFont, defaultFontSize, defaultLetterSpacing, defaultLineHeight, maxWidth, align = \"left\", applyBy = \"word\", alignWidth, direction = \"auto\") {\n\t\tconst paragraphs = [[]];\n\t\tlet ligatures = useLigatures(applyBy, defaultLetterSpacing);\n\t\tfor (let sIdx = 0; sIdx < spans.length; sIdx++) {\n\t\t\tconst s = spans[sIdx];\n\t\t\tconst rawText = String(resolveValue(s.text) ?? \"\");\n\t\t\tconst sizeValue = resolveValue(s.fontSize);\n\t\t\tconst spanFontSize = typeof sizeValue === \"number\" ? sizeValue : sizeValue !== void 0 ? Number(sizeValue) : defaultFontSize;\n\t\t\tlet spanFont = defaultFont;\n\t\t\tif (s.fontFamily || s.fontWeight !== void 0) {\n\t\t\t\tconst family = s.fontFamily ?? defaultFont.fontFamily ?? \"Inter\";\n\t\t\t\tconst resolved = SlugFontCache.getFont(family, s.fontWeight, null, void 0, spanFontSize);\n\t\t\t\tif (resolved) spanFont = resolved;\n\t\t\t}\n\t\t\tconst fillValue = resolveValue(s.fill);\n\t\t\tconst opacityValue = resolveValue(s.opacity);\n\t\t\tconst style = {\n\t\t\t\tfont: spanFont,\n\t\t\t\tfontSize: spanFontSize,\n\t\t\t\tfontScale: spanFontSize / spanFont.unitsPerEm,\n\t\t\t\tletterSpacing: s.letterSpacing ?? defaultLetterSpacing,\n\t\t\t\tbaselineShift: s.baselineShift ?? 0,\n\t\t\t\tfill: fillValue !== void 0 ? String(fillValue) : void 0,\n\t\t\t\topacity: opacityValue !== void 0 ? Number(opacityValue) : void 0,\n\t\t\t\tmark: s.mark,\n\t\t\t\tspanIndex: sIdx\n\t\t\t};\n\t\t\tif (style.letterSpacing !== 0) ligatures = false;\n\t\t\tconst parts = rawText.split(\"\\n\");\n\t\t\tfor (let p = 0; p < parts.length; p++) {\n\t\t\t\tif (p > 0) paragraphs.push([]);\n\t\t\t\tif (parts[p]) paragraphs[paragraphs.length - 1].push({\n\t\t\t\t\ttext: parts[p],\n\t\t\t\t\tstyle\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\tconst lines = [];\n\t\tfor (const segments of paragraphs) {\n\t\t\tconst shaped = shapeParagraph(segments, {\n\t\t\t\tdirection,\n\t\t\t\tligatures\n\t\t\t});\n\t\t\tfor (const clusters of breakLines(shaped.clusters, maxWidth)) lines.push({\n\t\t\t\tclusters,\n\t\t\t\tbaseLevel: shaped.baseLevel\n\t\t\t});\n\t\t}\n\t\tconst { indices, chars } = assignIndices(lines.map((l) => l.clusters), applyBy);\n\t\tconst glyphs = [];\n\t\tconst emojis = [];\n\t\tconst marks = [];\n\t\tlet hasRtl = false;\n\t\tlet currentBaselineY = 0;\n\t\tconst targetAlignWidth = alignWidth ?? maxWidth;\n\t\tconst defaultScale = defaultFontSize / defaultFont.unitsPerEm;\n\t\tfor (let lineIndex = 0; lineIndex < lines.length; lineIndex++) {\n\t\t\tconst { clusters, baseLevel } = lines[lineIndex];\n\t\t\tlet maxAscenderPx = (defaultFont.ascender ?? 800) * defaultScale;\n\t\t\tlet maxDescenderPx = -(defaultFont.descender ?? -200) * defaultScale;\n\t\t\tlet maxLineHeightPx = defaultLineHeight;\n\t\t\tfor (const c of clusters) {\n\t\t\t\tconst st = c.style;\n\t\t\t\tconst asc = (st.font.ascender ?? 800) * st.fontScale;\n\t\t\t\tconst desc = -(st.font.descender ?? -200) * st.fontScale;\n\t\t\t\tconst lh = defaultLineHeight * (st.fontSize / defaultFontSize);\n\t\t\t\tif (asc > maxAscenderPx) maxAscenderPx = asc;\n\t\t\t\tif (desc > maxDescenderPx) maxDescenderPx = desc;\n\t\t\t\tif (lh > maxLineHeightPx) maxLineHeightPx = lh;\n\t\t\t}\n\t\t\tif (lineIndex === 0) currentBaselineY = maxAscenderPx;\n\t\t\tconst placed = placeLine(clusters, baseLevel);\n\t\t\tconst shift = alignOffset(placed, resolveAlign(align, baseLevel), targetAlignWidth);\n\t\t\tif (baseLevel & 1) hasRtl = true;\n\t\t\tlet activeMark;\n\t\t\tlet markStartX = 0;\n\t\t\tlet markEndX = 0;\n\t\t\tlet markAsc = maxAscenderPx;\n\t\t\tlet markDesc = maxDescenderPx;\n\t\t\tconst flushMark = () => {\n\t\t\t\tif (activeMark && markEndX > markStartX) {\n\t\t\t\t\tconst padX = activeMark.paddingX ?? 4;\n\t\t\t\t\tconst padY = activeMark.paddingY ?? 2;\n\t\t\t\t\tmarks.push({\n\t\t\t\t\t\tx: markStartX - padX,\n\t\t\t\t\t\ty: currentBaselineY - markAsc - padY,\n\t\t\t\t\t\twidth: markEndX - markStartX + padX * 2,\n\t\t\t\t\t\theight: markAsc + markDesc + padY * 2,\n\t\t\t\t\t\tbackground: String(resolveValue(activeMark.background)),\n\t\t\t\t\t\tborderRadius: activeMark.borderRadius ?? 4,\n\t\t\t\t\t\tlineIndex\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tactiveMark = void 0;\n\t\t\t};\n\t\t\tconst xOf = /* @__PURE__ */ new Map();\n\t\t\tfor (const p of placed.clusters) {\n\t\t\t\tconst c = p.cluster;\n\t\t\t\tconst x = p.x + shift;\n\t\t\t\txOf.set(c, x);\n\t\t\t\tconst st = c.style;\n\t\t\t\tif (st.mark && !c.isSpace) {\n\t\t\t\t\tconst a = (st.font.ascender ?? 800) * st.fontScale;\n\t\t\t\t\tconst d = -(st.font.descender ?? -200) * st.fontScale;\n\t\t\t\t\tif (!activeMark || activeMark !== st.mark) {\n\t\t\t\t\t\tflushMark();\n\t\t\t\t\t\tactiveMark = st.mark;\n\t\t\t\t\t\tmarkStartX = x + c.inkStart;\n\t\t\t\t\t\tmarkEndX = x + c.inkEnd;\n\t\t\t\t\t\tmarkAsc = a;\n\t\t\t\t\t\tmarkDesc = d;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tmarkEndX = x + c.inkEnd;\n\t\t\t\t\t\tif (a > markAsc) markAsc = a;\n\t\t\t\t\t\tif (d > markDesc) markDesc = d;\n\t\t\t\t\t}\n\t\t\t\t} else flushMark();\n\t\t\t}\n\t\t\tflushMark();\n\t\t\tfor (const c of clusters) {\n\t\t\t\tconst x = xOf.get(c) ?? 0;\n\t\t\t\tconst st = c.style;\n\t\t\t\tconst idx = indices.get(c);\n\t\t\t\tconst rtl = (c.level & 1) === 1;\n\t\t\t\tif (rtl) hasRtl = true;\n\t\t\t\tif (c.isEmoji) {\n\t\t\t\t\temojis.push({\n\t\t\t\t\t\tchar: c.text,\n\t\t\t\t\t\tx: x + c.inkStart,\n\t\t\t\t\t\ty: currentBaselineY - st.fontSize,\n\t\t\t\t\t\tsize: st.fontSize,\n\t\t\t\t\t\tlineIndex\n\t\t\t\t\t});\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tfor (const g$1 of c.glyphs) glyphs.push({\n\t\t\t\t\tchar: c.text,\n\t\t\t\t\tcp: g$1.cp,\n\t\t\t\t\tx: x + g$1.dx,\n\t\t\t\t\ty: currentBaselineY + st.baselineShift + g$1.dy,\n\t\t\t\t\tlineIndex,\n\t\t\t\t\twordIndex: idx.wordIndex,\n\t\t\t\t\tcharIndex: idx.charIndex,\n\t\t\t\t\tunitIndex: idx.unitIndex,\n\t\t\t\t\tisSpace: c.isSpace,\n\t\t\t\t\trtl,\n\t\t\t\t\tclusterAdvance: c.advance - c.spacing,\n\t\t\t\t\tclusterX: x,\n\t\t\t\t\tbaseRtl: (baseLevel & 1) === 1,\n\t\t\t\t\tspanIndex: st.spanIndex,\n\t\t\t\t\tfill: st.fill,\n\t\t\t\t\tfontSize: st.fontSize,\n\t\t\t\t\tfontScale: st.fontScale,\n\t\t\t\t\tbaselineShift: st.baselineShift,\n\t\t\t\t\topacity: st.opacity,\n\t\t\t\t\tfontFamily: st.font.fontFamily,\n\t\t\t\t\tfont: st.font,\n\t\t\t\t\tmark: st.mark\n\t\t\t\t});\n\t\t\t}\n\t\t\tif (lineIndex < lines.length - 1) currentBaselineY += Math.max(maxLineHeightPx, maxAscenderPx + maxDescenderPx);\n\t\t}\n\t\tlet maxUnitIndex = 0;\n\t\tfor (const g$1 of glyphs) if (!g$1.isSpace && g$1.unitIndex > maxUnitIndex) maxUnitIndex = g$1.unitIndex;\n\t\tconst totalHeight = lines.length > 0 ? currentBaselineY + defaultScale * -(defaultFont.descender ?? -200) : 0;\n\t\treturn {\n\t\t\tglyphs,\n\t\t\temojis,\n\t\t\tmarks: marks.length > 0 ? marks : void 0,\n\t\t\ttotalHeight,\n\t\t\tlinesCount: lines.length,\n\t\t\twordsCount: Math.max(0, maxUnitIndex + 1),\n\t\t\tcharsCount: chars,\n\t\t\thasRtl: hasRtl || void 0\n\t\t};\n\t}\n\tstatic layoutOnPath(text, font, fontSize, letterSpacing, pathOptions, applyBy = \"word\", direction = \"auto\") {\n\t\tconst fontScale = fontSize / font.unitsPerEm;\n\t\tconst segments = generatePathSegments(pathOptions.path);\n\t\tconst chainLUT = buildPathLUT(segments);\n\t\tconst totalLength = chainLUT.totalLength;\n\t\tconst shaped = shapeParagraph([{\n\t\t\ttext: text.replace(/\\n/g, \" \"),\n\t\t\tstyle: {\n\t\t\t\tfont,\n\t\t\t\tfontSize,\n\t\t\t\tletterSpacing\n\t\t\t}\n\t\t}], {\n\t\t\tdirection,\n\t\t\tligatures: useLigatures(applyBy, letterSpacing)\n\t\t});\n\t\tconst clusters = shaped.clusters;\n\t\tconst { indices, words, chars } = assignIndices([clusters], applyBy);\n\t\tconst visual = placeLine(clusters, shaped.baseLevel).clusters.map((p) => p.cluster);\n\t\tlet baselineOffsetPixels = 0;\n\t\tif (pathOptions.baselineOffset === \"center\") baselineOffsetPixels = (font.ascender + font.descender) * fontScale * .5;\n\t\telse if (pathOptions.baselineOffset === \"ascender\") baselineOffsetPixels = -font.ascender * fontScale;\n\t\telse if (pathOptions.baselineOffset === \"descender\") baselineOffsetPixels = -font.descender * fontScale;\n\t\tconst totalShift = (pathOptions.baselineShift ?? 0) + baselineOffsetPixels;\n\t\tconst glyphs = [];\n\t\tconst emojis = [];\n\t\tconst firstMargin = pathOptions.firstMargin ?? 0;\n\t\tconst lastMargin = pathOptions.lastMargin ?? 0;\n\t\tconst pathSpan = Math.max(firstMargin, totalLength - lastMargin) - firstMargin;\n\t\tlet naturalLength = 0;\n\t\tfor (let i = 0; i < visual.length; i++) {\n\t\t\tconst c = visual[i];\n\t\t\tnaturalLength += i < visual.length - 1 ? c.advance : c.advance - c.spacing;\n\t\t}\n\t\tconst forceAlignExtra = pathOptions.forceAlignment && visual.length > 1 ? (pathSpan - naturalLength) / (visual.length - 1) : 0;\n\t\tconst perpendicular = pathOptions.perpendicularToPath !== false;\n\t\tconst sampleAt = (d) => {\n\t\t\tlet s = pathOptions.reversePath ? totalLength - d : d;\n\t\t\tif (pathOptions.loop && totalLength > 0) s = (s % totalLength + totalLength) % totalLength;\n\t\t\treturn samplePathChainGeometry(segments, chainLUT, s);\n\t\t};\n\t\tlet currentDistance = firstMargin;\n\t\tfor (const c of visual) {\n\t\t\tconst idx = indices.get(c);\n\t\t\tif (c.isEmoji) {\n\t\t\t\tconst sample = sampleAt(currentDistance + c.inkStart);\n\t\t\t\temojis.push({\n\t\t\t\t\tchar: c.text,\n\t\t\t\t\tx: sample.position.x + sample.normal.x * totalShift,\n\t\t\t\t\ty: sample.position.y + sample.normal.y * totalShift - fontSize,\n\t\t\t\t\tsize: fontSize,\n\t\t\t\t\tlineIndex: 0\n\t\t\t\t});\n\t\t\t} else for (const g$1 of c.glyphs) {\n\t\t\t\tconst sample = sampleAt(currentDistance + g$1.dx);\n\t\t\t\tconst shift = totalShift + g$1.dy;\n\t\t\t\tglyphs.push({\n\t\t\t\t\tchar: c.text,\n\t\t\t\t\tcp: g$1.cp,\n\t\t\t\t\tx: sample.position.x + sample.normal.x * shift,\n\t\t\t\t\ty: sample.position.y + sample.normal.y * shift,\n\t\t\t\t\tlineIndex: 0,\n\t\t\t\t\twordIndex: idx.wordIndex,\n\t\t\t\t\tcharIndex: idx.charIndex,\n\t\t\t\t\tunitIndex: applyBy === \"line\" ? 0 : idx.unitIndex,\n\t\t\t\t\tisSpace: c.isSpace,\n\t\t\t\t\ttextIndex: c.start,\n\t\t\t\t\trtl: (c.level & 1) === 1,\n\t\t\t\t\tclusterAdvance: c.advance - c.spacing,\n\t\t\t\t\tpathTangentAngleRad: perpendicular ? sample.tangentAngleDeg * Math.PI / 180 : 0,\n\t\t\t\t\tperpendicularToPath: perpendicular,\n\t\t\t\t\tpathNormalX: sample.normal.x,\n\t\t\t\t\tpathNormalY: sample.normal.y\n\t\t\t\t});\n\t\t\t}\n\t\t\tcurrentDistance += c.advance + forceAlignExtra;\n\t\t}\n\t\treturn {\n\t\t\tglyphs,\n\t\t\temojis,\n\t\t\ttotalHeight: fontSize * 1.5,\n\t\t\tlinesCount: 1,\n\t\t\twordsCount: words,\n\t\t\tcharsCount: chars,\n\t\t\thasRtl: shaped.baseLevel & 1 || clusters.some((c) => c.level & 1) ? true : void 0\n\t\t};\n\t}\n};\n\n//#endregion\n//#region src/nodes/text-spans.ts\nfunction isGettable(v) {\n\treturn typeof v === \"object\" && v !== null && typeof v.get === \"function\";\n}\nfunction resolve(v, ctx) {\n\treturn isGettable(v) ? v.get(ctx) : v;\n}\n/**\n* The spans' animated fields (text, size, fill, opacity, mark background)\n* read for one frame, so the spans can be sliced, compared and cached as\n* plain values.\n*/\nfunction resolveTextSpans(spans, ctx) {\n\treturn spans.map((s) => {\n\t\tconst out = {\n\t\t\t...s,\n\t\t\ttext: String(resolve(s.text, ctx) ?? \"\")\n\t\t};\n\t\tif (s.fontSize !== void 0) out.fontSize = Number(resolve(s.fontSize, ctx));\n\t\tif (s.fill !== void 0) out.fill = String(resolve(s.fill, ctx));\n\t\tif (s.opacity !== void 0) out.opacity = Number(resolve(s.opacity, ctx));\n\t\tif (s.mark) out.mark = {\n\t\t\t...s.mark,\n\t\t\tbackground: String(resolve(s.mark.background, ctx))\n\t\t};\n\t\treturn out;\n\t});\n}\n/** The plain text the spans spell out, in order. */\nfunction spansText(spans) {\n\tlet text = \"\";\n\tfor (const s of spans) text += typeof s.text === \"string\" ? s.text : \"\";\n\treturn text;\n}\n/**\n* Re-cut `text` across resolved spans by position: span i keeps the styling\n* of characters [start_i, end_i) of the spans' own text. A revealed prefix\n* (typewriter, word or line reveal) keeps each visible character in its\n* span's style and drops the spans not reached yet; a same-length rewrite\n* (scramble) restyles in place. Text past the spans' end takes the last\n* span's style.\n*/\nfunction fitSpansToText(spans, text) {\n\tconst out = [];\n\tlet offset = 0;\n\tfor (const [i, s] of spans.entries()) {\n\t\tif (offset >= text.length) break;\n\t\tconst len = typeof s.text === \"string\" ? s.text.length : 0;\n\t\tconst end = i === spans.length - 1 ? text.length : offset + len;\n\t\tif (end > offset) out.push({\n\t\t\t...s,\n\t\t\ttext: text.slice(offset, end)\n\t\t});\n\t\toffset = end;\n\t}\n\treturn out;\n}\n\n//#endregion\n//#region src/nodes/paragraph.ts\nfunction sampleSignalValue(signals, signalId, frame, fps, phaseSpread = 0, glyphIndex = 0) {\n\tconst regSamples = signalRegistry.getChannelSamples(signalId, \"primary\");\n\tif (regSamples && regSamples.length > 0) {\n\t\tconst compFps = fps > 0 ? fps : 24;\n\t\tconst t = frame / compFps;\n\t\tconst phaseOffsetSec = phaseSpread !== 0 ? glyphIndex * phaseSpread / (2 * Math.PI) : 0;\n\t\tconst effT = Math.max(0, t + phaseOffsetSec);\n\t\tconst idx = Math.max(0, Math.min(regSamples.length - 1, Math.round(effT * compFps)));\n\t\treturn Number(regSamples[idx]) || 0;\n\t}\n\tif (!signals) return 0;\n\tconst sig = signals[signalId];\n\tif (sig === void 0 || sig === null) return 0;\n\tif (typeof sig === \"number\") return sig;\n\tif (typeof sig === \"function\") return Number(sig(frame, fps)) || 0;\n\tif (typeof sig === \"object\") {\n\t\tconst sObj = sig;\n\t\tif (typeof sObj.get === \"function\") {\n\t\t\tconst time = fps > 0 ? frame / fps : 0;\n\t\t\tconst phaseOffsetSec = phaseSpread !== 0 ? glyphIndex * phaseSpread / (2 * Math.PI) : 0;\n\t\t\treturn Number(sObj.get({\n\t\t\t\tframe,\n\t\t\t\tfps,\n\t\t\t\ttime: time + phaseOffsetSec\n\t\t\t})) || 0;\n\t\t}\n\t\tif (Array.isArray(sObj.samples) || ArrayBuffer.isView(sObj.samples)) {\n\t\t\tconst arr = sObj.samples;\n\t\t\tconst idx = Math.max(0, Math.min(arr.length - 1, Math.round(frame)));\n\t\t\treturn Number(arr[idx]) || 0;\n\t\t}\n\t}\n\treturn 0;\n}\nfunction easeInOutQuad(t) {\n\treturn t < .5 ? 2 * t * t : 1 - (-2 * t + 2) ** 2 / 2;\n}\nfunction seededRandom(str) {\n\tlet hash = 0;\n\tfor (let i = 0; i < str.length; i++) hash = str.charCodeAt(i) + ((hash << 5) - hash);\n\treturn () => {\n\t\tconst x = Math.sin(hash++) * 1e4;\n\t\treturn x - Math.floor(x);\n\t};\n}\nfunction getShuffleOrder(n, seed) {\n\tconst rand = seededRandom(seed);\n\tconst arr = Array.from({ length: n }, (_, i) => i);\n\tfor (let i = arr.length - 1; i > 0; i--) {\n\t\tconst j = Math.floor(rand() * (i + 1));\n\t\tconst temp = arr[i];\n\t\tarr[i] = arr[j];\n\t\tarr[j] = temp;\n\t}\n\treturn arr;\n}\nfunction getOrCreateEmojiTexture(device, char, fontSize) {\n\tconst key = `${char}-${fontSize}`;\n\tlet tex = SlugFontCache.emojiTextureCache.get(key);\n\tif (tex) return tex;\n\tconst resolutionScale = 4;\n\tconst emojiSize = Math.max(16, Math.ceil(fontSize * 1.5 * resolutionScale));\n\tconst size = Math.ceil(emojiSize / 4) * 4;\n\tif (!!globalThis.__IS_HEADLESS_RENDERER__ || typeof window === \"undefined\" || typeof globalThis.document === \"undefined\") {\n\t\tconsole.warn(`[getOrCreateEmojiTexture] Emoji \"${char}\" not preloaded. Returning fallback dummy texture.`);\n\t\ttex = device.createTexture({\n\t\t\tlabel: `Emoji-Dummy-${char}`,\n\t\t\tsize: [1, 1],\n\t\t\tformat: \"rgba8unorm\",\n\t\t\tusage: GPUTextureUsage.TEXTURE_BINDING\n\t\t});\n\t\tSlugFontCache.emojiTextureCache.set(key, tex);\n\t\treturn tex;\n\t}\n\tconst canvas = new OffscreenCanvas(size, size);\n\tconst c2d = canvas.getContext(\"2d\");\n\tif (c2d) {\n\t\tc2d.font = `${fontSize * resolutionScale}px \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Noto Color Emoji\", sans-serif`;\n\t\tc2d.textBaseline = \"middle\";\n\t\tc2d.textAlign = \"center\";\n\t\tc2d.fillText(char, size / 2, size / 2);\n\t}\n\ttex = device.createTexture({\n\t\tlabel: `Emoji-${char}`,\n\t\tsize: [size, size],\n\t\tformat: \"rgba8unorm\",\n\t\tusage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST | GPUTextureUsage.RENDER_ATTACHMENT\n\t});\n\tdevice.queue.copyExternalImageToTexture({ source: canvas }, {\n\t\ttexture: tex,\n\t\tpremultipliedAlpha: true\n\t}, [size, size]);\n\tSlugFontCache.emojiTextureCache.set(key, tex);\n\treturn tex;\n}\nfunction computeUnitProgress(elapsed, duration, entranceMs, exitMs, idx_i, totalUnits, isVideoMode) {\n\tif (!isVideoMode) return {\n\t\tp_in: 1,\n\t\tp_out: 1\n\t};\n\tlet p_in = 1;\n\tif (entranceMs > 0) {\n\t\tconst D_unit = entranceMs * .5;\n\t\tconst s_i = idx_i * (totalUnits > 1 ? entranceMs * .5 / (totalUnits - 1) : 0);\n\t\tconst e_i = s_i + D_unit;\n\t\tif (elapsed < s_i) p_in = 0;\n\t\telse if (elapsed > e_i) p_in = 1;\n\t\telse p_in = (elapsed - s_i) / (e_i - s_i);\n\t}\n\tlet p_out = 1;\n\tif (exitMs > 0) {\n\t\tconst t_exit_start = duration - exitMs;\n\t\tif (elapsed > t_exit_start) {\n\t\t\tconst D_unit = exitMs * .5;\n\t\t\tconst s_i = t_exit_start + idx_i * (totalUnits > 1 ? exitMs * .5 / (totalUnits - 1) : 0);\n\t\t\tconst e_i = s_i + D_unit;\n\t\t\tif (elapsed < s_i) p_out = 1;\n\t\t\telse if (elapsed > e_i) p_out = 0;\n\t\t\telse p_out = 1 - (elapsed - s_i) / (e_i - s_i);\n\t\t}\n\t}\n\treturn {\n\t\tp_in,\n\t\tp_out\n\t};\n}\nfunction applyAnimationEffects(p_in, p_out, smoothing, transitionIn, transitionOut, kinetic, elapsed, duration, entranceMs, exitMs, idx_i, baseOpacity, isEmoji) {\n\tconst ep_in = smoothing ? easeInOutQuad(p_in) : p_in;\n\tconst ep_out = smoothing ? easeInOutQuad(p_out) : p_out;\n\tconst ep_i = ep_in * ep_out;\n\tif (ep_in <= 0 && transitionIn !== \"blur\" || ep_out <= 0 && transitionOut !== \"blur\") return {\n\t\topacity: 0,\n\t\ttransX: 0,\n\t\ttransY: 0,\n\t\trot: 0,\n\t\tscale: 1,\n\t\tblurAmount: 0,\n\t\tvisible: false\n\t};\n\tlet opacity = baseOpacity;\n\tif (transitionIn === \"fade\" || transitionIn === \"slideUp\" || transitionIn === \"blur\") opacity *= ep_in;\n\telse if (transitionIn === \"appear\") {\n\t\tif (ep_in < .5) opacity = 0;\n\t}\n\tif (transitionOut === \"fade\" || transitionOut === \"slideUp\" || transitionOut === \"blur\") opacity *= ep_out;\n\telse if (transitionOut === \"appear\") {\n\t\tif (ep_out < .5) opacity = 0;\n\t}\n\tif (opacity < .001) return {\n\t\topacity: 0,\n\t\ttransX: 0,\n\t\ttransY: 0,\n\t\trot: 0,\n\t\tscale: 1,\n\t\tblurAmount: 0,\n\t\tvisible: false\n\t};\n\tlet transX = 0;\n\tlet transY = 0;\n\tlet rot = 0;\n\tlet scale = 1;\n\tif (transitionIn === \"slideUp\" && elapsed < entranceMs) transY += (1 - ep_in) * 30;\n\tif (transitionOut === \"slideUp\" && elapsed > duration - exitMs) transY -= (1 - ep_out) * 30;\n\tconst rotScale = isEmoji ? 1 : Math.PI / 180;\n\tif (kinetic === \"stack\") {\n\t\tscale = .8 + .2 * ep_i;\n\t\trot = (1 - ep_i) * 15 * rotScale;\n\t} else if (kinetic === \"wave\") transY += 10 * Math.sin(elapsed * .005 - idx_i * .5);\n\telse if (kinetic === \"wiggle\") {\n\t\ttransX += 5 * Math.sin(elapsed * .008 + idx_i * 1.7);\n\t\ttransY += 5 * Math.cos(elapsed * .006 + idx_i * 1.3);\n\t\trot += 4 * Math.sin(elapsed * .005 + idx_i * 2.1) * rotScale;\n\t} else if (kinetic === \"shuffle\") {\n\t\ttransX += 3 * Math.sin(elapsed * .015 + idx_i * 3.1);\n\t\ttransY += 3 * Math.cos(elapsed * .012 + idx_i * 2.3);\n\t\trot += 8 * Math.sin(elapsed * .02 + idx_i * 1.1) * rotScale;\n\t}\n\tlet blurAmount = 0;\n\tif (transitionIn === \"blur\") blurAmount = Math.max(blurAmount, (1 - ep_in) * 20);\n\tif (transitionOut === \"blur\") blurAmount = Math.max(blurAmount, (1 - ep_out) * 20);\n\treturn {\n\t\topacity,\n\t\ttransX,\n\t\ttransY,\n\t\trot,\n\t\tscale,\n\t\tblurAmount,\n\t\tvisible: true\n\t};\n}\nconst KINETIC_EASING_MAP = {\n\tlinear: (t) => t,\n\tnone: (t) => t,\n\tsmoothstep: (t) => t,\n\t\"power1.out\": (t) => 1 - (1 - t) ** 2,\n\t\"quad.out\": (t) => 1 - (1 - t) ** 2,\n\t\"power1.in\": (t) => t ** 2,\n\t\"quad.in\": (t) => t ** 2,\n\t\"power1.inout\": (t) => t < .5 ? 2 * t * t : 1 - (-2 * t + 2) ** 2 / 2,\n\t\"quad.inout\": (t) => t < .5 ? 2 * t * t : 1 - (-2 * t + 2) ** 2 / 2,\n\t\"power2.out\": (t) => 1 - (1 - t) ** 3,\n\t\"cubic.out\": (t) => 1 - (1 - t) ** 3,\n\t\"power2.in\": (t) => t ** 3,\n\t\"cubic.in\": (t) => t ** 3,\n\t\"power2.inout\": (t) => t < .5 ? 4 * t ** 3 : 1 - (-2 * t + 2) ** 3 / 2,\n\t\"cubic.inout\": (t) => t < .5 ? 4 * t ** 3 : 1 - (-2 * t + 2) ** 3 / 2,\n\t\"power3.out\": (t) => 1 - (1 - t) ** 4,\n\t\"quart.out\": (t) => 1 - (1 - t) ** 4,\n\t\"power3.in\": (t) => t ** 4,\n\t\"quart.in\": (t) => t ** 4,\n\t\"power3.inout\": (t) => t < .5 ? 8 * t ** 4 : 1 - (-2 * t + 2) ** 4 / 2,\n\t\"quart.inout\": (t) => t < .5 ? 8 * t ** 4 : 1 - (-2 * t + 2) ** 4 / 2,\n\t\"power4.out\": (t) => 1 - (1 - t) ** 5,\n\t\"quint.out\": (t) => 1 - (1 - t) ** 5,\n\t\"power4.in\": (t) => t ** 5,\n\t\"quint.in\": (t) => t ** 5,\n\t\"sine.out\": (t) => Math.sin(t * Math.PI / 2),\n\t\"sine.in\": (t) => 1 - Math.cos(t * Math.PI / 2),\n\t\"sine.inout\": (t) => -(Math.cos(Math.PI * t) - 1) / 2,\n\t\"expo.out\": (t) => t === 1 ? 1 : 1 - 2 ** (-10 * t),\n\t\"back.out\": (t) => 1 + 2.70158 * (t - 1) ** 3 + 1.70158 * (t - 1) ** 2\n};\nfunction evaluateEasing(ease, t) {\n\tconst clamped = Math.max(0, Math.min(1, t));\n\tif (!ease) return clamped;\n\tconst fn = KINETIC_EASING_MAP[ease.toLowerCase().trim()];\n\treturn fn ? fn(clamped) : clamped;\n}\nfunction computeAnimatorProgress(animator, unitIdx, totalUnits) {\n\tif (totalUnits <= 0) return 0;\n\tconst p = totalUnits > 1 ? unitIdx / (totalUnits - 1) : .5;\n\tconst offset = animator.offset ?? 0;\n\tconst rStart = (animator.rangeStart ?? 0) + offset;\n\tconst rEnd = (animator.rangeEnd ?? 1) + offset;\n\tlet u = 0;\n\tif (rEnd <= rStart) u = p >= rStart ? 1 : 0;\n\telse u = Math.max(0, Math.min(1, (p - rStart) / (rEnd - rStart)));\n\tconst s = u * u * (3 - 2 * u);\n\treturn evaluateEasing(animator.easing ?? \"power2.out\", s);\n}\nfunction evaluateAEAnimatorWeight(aeAnim, glyph, counts, signals, frame, fps) {\n\tconst charsCount = Math.max(1, counts.charsCount ?? 1);\n\tconst wordsCount = Math.max(1, counts.wordsCount ?? 1);\n\tconst linesCount = Math.max(1, counts.linesCount ?? 1);\n\tconst selectors = aeAnim.selectors ?? [];\n\tif (selectors.length === 0) return 1;\n\tlet combinedWeight = 0;\n\tfor (let sIdx = 0; sIdx < selectors.length; sIdx++) {\n\t\tconst selector = selectors[sIdx];\n\t\tlet currentWeight = 0;\n\t\tif (selector.type === \"range\") {\n\t\t\tlet totalUnits = charsCount;\n\t\t\tlet unitIdx = glyph.charIndex ?? 0;\n\t\t\tif (selector.basedOn === \"words\") {\n\t\t\t\ttotalUnits = wordsCount;\n\t\t\t\tunitIdx = glyph.wordIndex ?? 0;\n\t\t\t} else if (selector.basedOn === \"lines\") {\n\t\t\t\ttotalUnits = linesCount;\n\t\t\t\tunitIdx = glyph.lineIndex ?? 0;\n\t\t\t}\n\t\t\tif (selector.randomizeOrder) unitIdx = getShuffledOrder(totalUnits, selector.randomSeed ?? 12345)[unitIdx % totalUnits] ?? unitIdx;\n\t\t\tcurrentWeight = computeRangeSelectorWeight(selector.units === \"index\" ? unitIdx : totalUnits > 1 ? unitIdx / (totalUnits - 1) : .5, selector.start ?? aeAnim.rangeStart ?? 0, selector.end ?? aeAnim.rangeEnd ?? (selector.units === \"index\" ? totalUnits : 1), selector.offset ?? aeAnim.offset ?? 0, selector.shape ?? \"smooth\", selector.easeHigh ?? 0, selector.easeLow ?? 0) * (selector.amount ?? 1);\n\t\t} else if (selector.type === \"wiggly\") {\n\t\t\tconst tSec = fps > 0 ? frame / fps : 0;\n\t\t\tconst temporalPhase = (selector.temporalPhaseDeg ?? 0) * Math.PI / 180;\n\t\t\tconst spatialPhase = (selector.spatialPhaseDeg ?? 0) * Math.PI / 180;\n\t\t\tconst phase = tSec * (selector.wigglesPerSecond ?? 2) * 2 * Math.PI + temporalPhase + spatialPhase;\n\t\t\tconst noise = deterministicWigglyNoise(selector.randomSeed ?? 42, glyph.charIndex ?? 0, phase, selector.correlation ?? .5);\n\t\t\tconst minAmt = selector.minAmount ?? -1;\n\t\t\tconst maxAmt = selector.maxAmount ?? 1;\n\t\t\tcurrentWeight = minAmt + (noise * .5 + .5) * (maxAmt - minAmt);\n\t\t} else if (selector.type === \"signal\") currentWeight = sampleSignalValue(signals, selector.signalId, frame, fps, selector.phaseSpread ?? 0, glyph.charIndex ?? 0) * (selector.multiplier ?? 1) + (selector.offset ?? 0);\n\t\telse if (selector.type === \"expression\") {\n\t\t\tconst exprSel = selector;\n\t\t\tconst time = fps > 0 ? frame / fps : 0;\n\t\t\tconst ctx = {\n\t\t\t\tcharIndex: glyph.charIndex ?? 0,\n\t\t\t\twordIndex: glyph.wordIndex ?? 0,\n\t\t\t\tlineIndex: glyph.lineIndex ?? 0,\n\t\t\t\ttotalChars: charsCount,\n\t\t\t\ttotalWords: wordsCount,\n\t\t\t\ttotalLines: linesCount,\n\t\t\t\tframe,\n\t\t\t\tfps,\n\t\t\t\ttime,\n\t\t\t\tsignals\n\t\t\t};\n\t\t\tcurrentWeight = evaluateExpressionSelector(exprSel.expression, ctx) * (exprSel.amount ?? 1);\n\t\t}\n\t\tif (sIdx === 0) combinedWeight = currentWeight;\n\t\telse combinedWeight = evaluateSelectorCombination(combinedWeight, currentWeight, selector.mode ?? \"add\");\n\t}\n\treturn combinedWeight;\n}\nfunction applyGlyphAnimators(animators, glyph, counts, base, isEmoji = false, frame = 0, fps = 24, signals) {\n\tif (!animators || animators.length === 0) return base;\n\tlet { transX, transY, rot, scale, scaleX, scaleY, opacity, blurAmount } = base;\n\tlet transZ = base.transZ ?? 0;\n\tlet color = base.color;\n\tlet chromaticShift = base.chromaticShift ?? 0;\n\tlet dissolveProgress = base.dissolveProgress ?? 0;\n\tconst vfxParam = base.vfxParam ?? 0;\n\tlet skewM01 = base.skewM01 ?? 0;\n\tlet skewM10 = base.skewM10 ?? 0;\n\tlet anchorConfig = base.anchorConfig;\n\tlet fillOpacity = base.fillOpacity ?? 1;\n\tlet strokeWidth = base.strokeWidth;\n\tlet strokeColor = base.strokeColor;\n\tlet longShadow = base.longShadow;\n\tlet lineSpacing = base.lineSpacing;\n\tlet lineAnchor = base.lineAnchor;\n\tconst rotScale = isEmoji ? 1 : Math.PI / 180;\n\tconst charsCount = Math.max(1, counts.charsCount ?? 1);\n\tconst wordsCount = Math.max(1, counts.wordsCount ?? 1);\n\tconst linesCount = Math.max(1, counts.linesCount ?? 1);\n\tfor (const animator of animators) if (\"selectors\" in animator && Array.isArray(animator.selectors)) {\n\t\tconst aeAnim = animator;\n\t\tconst p = aeAnim.props ?? {};\n\t\tconst selectorWeight = evaluateAEAnimatorWeight(aeAnim, glyph, {\n\t\t\tcharsCount,\n\t\t\twordsCount,\n\t\t\tlinesCount\n\t\t}, signals, frame, fps);\n\t\tlet combinedWeight = selectorWeight;\n\t\tlet springWeight = 1;\n\t\tlet springProgress = 1;\n\t\tif (p.spring) {\n\t\t\tconst charDelay = (glyph.charIndex ?? 0) * .035;\n\t\t\tspringProgress = evaluateSpringProgress(Math.max(0, (fps > 0 ? frame / fps : 0) - charDelay), p.spring.stiffness, p.spring.damping, p.spring.mass, p.spring.initialVelocity);\n\t\t\tspringWeight = 1 - springProgress;\n\t\t\tcombinedWeight = selectorWeight * springWeight;\n\t\t}\n\t\tif (combinedWeight !== 0 || selectorWeight !== 0) {\n\t\t\tif (p.x !== void 0) transX += p.x * combinedWeight;\n\t\t\tif (p.y !== void 0) transY += p.y * combinedWeight;\n\t\t\tif (p.scale !== void 0) scale *= 1 + (p.scale - 1) * combinedWeight;\n\t\t\tif (p.scaleX !== void 0) scaleX *= 1 + (p.scaleX - 1) * combinedWeight;\n\t\t\tif (p.scaleY !== void 0) scaleY *= 1 + (p.scaleY - 1) * combinedWeight;\n\t\t\tif (p.rotation !== void 0) rot += p.rotation * rotScale * combinedWeight;\n\t\t\tif (p.rotationX !== void 0) {\n\t\t\t\tconst rotXRad = p.rotationX * combinedWeight * Math.PI / 180;\n\t\t\t\tscaleY *= Math.max(.08, Math.abs(Math.cos(rotXRad)));\n\t\t\t}\n\t\t\tif (p.rotationY !== void 0) {\n\t\t\t\tconst rotYRad = p.rotationY * combinedWeight * Math.PI / 180;\n\t\t\t\tscaleX *= Math.max(.08, Math.abs(Math.cos(rotYRad)));\n\t\t\t}\n\t\t\tif (p.rotationZ !== void 0) rot += p.rotationZ * rotScale * combinedWeight;\n\t\t\tif (p.translateZ !== void 0) transZ += p.translateZ * combinedWeight;\n\t\t\tif (p.skew !== void 0) {\n\t\t\t\tconst [, m01, m10] = evaluateSkewMatrix(p.skew * combinedWeight, p.skewAxis ?? 0);\n\t\t\t\tskewM01 += m01;\n\t\t\t\tskewM10 += m10;\n\t\t\t}\n\t\t\tif (p.formation !== void 0) {\n\t\t\t\tconst v3d = evaluateVolumetricFormation(glyph.charIndex ?? 0, charsCount, p.formation);\n\t\t\t\tconst centerX = counts.layoutCenter?.x ?? 0;\n\t\t\t\tconst centerY = counts.layoutCenter?.y ?? 0;\n\t\t\t\tconst glyphFlatX = glyph.x ?? 0;\n\t\t\t\tconst glyphFlatY = glyph.y ?? 0;\n\t\t\t\tconst targetX = centerX + v3d.x;\n\t\t\t\tconst targetY = centerY + v3d.y;\n\t\t\t\ttransX += (targetX - glyphFlatX) * combinedWeight;\n\t\t\t\ttransY += (targetY - glyphFlatY) * combinedWeight;\n\t\t\t\ttransZ += v3d.z * combinedWeight;\n\t\t\t\tif (v3d.rotX) {\n\t\t\t\t\tconst rotXRad = v3d.rotX * combinedWeight * Math.PI / 180;\n\t\t\t\t\tscaleY *= Math.max(.5, Math.abs(Math.cos(rotXRad)));\n\t\t\t\t}\n\t\t\t\tif (v3d.rotY) {\n\t\t\t\t\tconst rotYRad = v3d.rotY * combinedWeight * Math.PI / 180;\n\t\t\t\t\tscaleX *= Math.max(.5, Math.abs(Math.cos(rotYRad)));\n\t\t\t\t}\n\t\t\t\tif (v3d.rotZ) rot += v3d.rotZ * Math.PI / 180 * combinedWeight;\n\t\t\t\tif (v3d.depthOpacity !== void 0) opacity *= 1 + (v3d.depthOpacity - 1) * combinedWeight;\n\t\t\t}\n\t\t\tif (p.anchor !== void 0) anchorConfig = p.anchor;\n\t\t\tif (p.opacity !== void 0) opacity *= 1 + (p.opacity - 1) * combinedWeight;\n\t\t\tif (p.blur !== void 0) blurAmount = Math.max(blurAmount, p.blur * combinedWeight);\n\t\t\tif (p.chromaticGlitch !== void 0) {\n\t\t\t\tlet shift = (p.chromaticGlitch.redShiftX ?? 0) * Math.max(0, combinedWeight);\n\t\t\t\tconst sliceProb = p.chromaticGlitch.sliceProbability ?? .35;\n\t\t\t\tconst n = Math.sin(frame * 17.13 + (glyph.charIndex ?? 0) * 43.17);\n\t\t\t\tconst frac = Math.abs(n - Math.floor(n));\n\t\t\t\tif (frac < sliceProb) shift += (p.chromaticGlitch.sliceAmplitude ?? 12) * (frac * 2 - 1);\n\t\t\t\tchromaticShift += shift;\n\t\t\t}\n\t\t\tif (p.particleDissolve !== void 0) dissolveProgress = Math.max(dissolveProgress, (p.particleDissolve.progress ?? 0) * (p.spring ? springProgress : Math.max(0, combinedWeight)));\n\t\t\tif (p.longShadow !== void 0) longShadow = p.longShadow;\n\t\t\tif (p.audioSpectrum !== void 0) {\n\t\t\t\tconst specScale = sampleAudioSpectrumScale(glyph.charIndex ?? 0, charsCount, p.audioSpectrum, signals, frame, fps);\n\t\t\t\tif (p.audioSpectrum.scaleAxis === \"scaleY\") scaleY *= specScale;\n\t\t\t\telse if (p.audioSpectrum.scaleAxis === \"scaleX\") scaleX *= specScale;\n\t\t\t\telse scale *= specScale;\n\t\t\t}\n\t\t\tif (p.stroke !== void 0) {\n\t\t\t\tif (p.stroke.fillOpacity !== void 0) fillOpacity *= 1 - combinedWeight + p.stroke.fillOpacity * combinedWeight;\n\t\t\t\tif (p.stroke.strokeWidth !== void 0) strokeWidth = (p.stroke.strokeWidth ?? 0) * combinedWeight;\n\t\t\t\tif (p.stroke.strokeColor) strokeColor = p.stroke.strokeColor;\n\t\t\t}\n\t\t\tif (p.lineSpacing !== void 0) {\n\t\t\t\tlineSpacing = p.lineSpacing * (p.spring ? springProgress : combinedWeight);\n\t\t\t\tlineAnchor = p.lineAnchor ?? 0;\n\t\t\t}\n\t\t\tif (p.fillColor) {\n\t\t\t\tconst targetCol = parseColor(p.fillColor);\n\t\t\t\tconst currentColor = color ?? {\n\t\t\t\t\tr: 1,\n\t\t\t\t\tg: 1,\n\t\t\t\t\tb: 1,\n\t\t\t\t\ta: 1\n\t\t\t\t};\n\t\t\t\tconst colorWeight = selectorWeight;\n\t\t\t\tcolor = {\n\t\t\t\t\tr: currentColor.r * (1 - colorWeight) + targetCol.r * colorWeight,\n\t\t\t\t\tg: currentColor.g * (1 - colorWeight) + targetCol.g * colorWeight,\n\t\t\t\t\tb: currentColor.b * (1 - colorWeight) + targetCol.b * colorWeight,\n\t\t\t\t\ta: currentColor.a * (1 - colorWeight) + targetCol.a * colorWeight\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t} else {\n\t\tconst legacyAnim = animator;\n\t\tlet unitIdx = glyph.charIndex ?? glyph.unitIndex ?? 0;\n\t\tlet numUnits = Math.max(1, counts.charsCount ?? 1);\n\t\tif (legacyAnim.unit === \"word\") {\n\t\t\tunitIdx = glyph.wordIndex ?? 0;\n\t\t\tnumUnits = Math.max(1, counts.wordsCount ?? 1);\n\t\t} else if (legacyAnim.unit === \"line\") {\n\t\t\tunitIdx = glyph.lineIndex ?? 0;\n\t\t\tnumUnits = Math.max(1, counts.linesCount ?? 1);\n\t\t}\n\t\tconst tc = computeAnimatorProgress(legacyAnim, unitIdx, numUnits);\n\t\tconst t = legacyAnim.transform;\n\t\tif (!t || tc <= 0) continue;\n\t\tif (t.x !== void 0) transX += t.x * tc;\n\t\tif (t.y !== void 0) transY += t.y * tc;\n\t\tif (t.rotation !== void 0) rot += t.rotation * rotScale * tc;\n\t\tif (t.scale !== void 0) scale *= 1 + (t.scale - 1) * tc;\n\t\tif (t.scaleX !== void 0) scaleX *= 1 + (t.scaleX - 1) * tc;\n\t\tlet scaleYFactor = 1 + ((t.scaleY ?? 1) - 1) * tc;\n\t\tif (t.rotationX) {\n\t\t\tconst rotXRad = t.rotationX * tc * Math.PI / 180;\n\t\t\tscaleYFactor *= Math.cos(rotXRad);\n\t\t}\n\t\tscaleY *= scaleYFactor;\n\t\tif (t.opacity !== void 0) opacity *= 1 + (t.opacity - 1) * tc;\n\t\tif (t.blur !== void 0) blurAmount = Math.max(blurAmount, t.blur * tc);\n\t\tif (t.color) {\n\t\t\tconst targetCol = parseColor(t.color);\n\t\t\tconst currentColor = color ?? {\n\t\t\t\tr: 1,\n\t\t\t\tg: 1,\n\t\t\t\tb: 1,\n\t\t\t\ta: 1\n\t\t\t};\n\t\t\tcolor = {\n\t\t\t\tr: currentColor.r * (1 - tc) + targetCol.r * tc,\n\t\t\t\tg: currentColor.g * (1 - tc) + targetCol.g * tc,\n\t\t\t\tb: currentColor.b * (1 - tc) + targetCol.b * tc,\n\t\t\t\ta: currentColor.a * (1 - tc) + targetCol.a * tc\n\t\t\t};\n\t\t}\n\t}\n\treturn {\n\t\ttransX,\n\t\ttransY,\n\t\ttransZ,\n\t\trot,\n\t\tscale,\n\t\tscaleX,\n\t\tscaleY,\n\t\topacity: Math.max(0, Math.min(1, opacity)),\n\t\tblurAmount,\n\t\tcolor,\n\t\tchromaticShift,\n\t\tdissolveProgress,\n\t\tvfxParam,\n\t\tskewM01,\n\t\tskewM10,\n\t\tanchorConfig,\n\t\tfillOpacity: Math.max(0, Math.min(1, fillOpacity)),\n\t\tstrokeWidth,\n\t\tstrokeColor,\n\t\tlongShadow,\n\t\tlineSpacing,\n\t\tlineAnchor\n\t};\n}\nfunction drawParagraphNode(ctx, pass, props) {\n\tlet fontFamily = props.fontFamily ?? \"Inter\";\n\tif (SlugFontCache.isFailed(fontFamily)) fontFamily = \"Inter\";\n\tif (SlugFontCache.isFailed(fontFamily)) return;\n\tconst fontSize = props.fontSize ?? 48;\n\tconst slugFont = SlugFontCache.getFont(fontFamily, props.fontWeight, ctx.device, void 0, fontSize, props.variableAxes);\n\tconst hasStroke = props.stroke && props.strokeWidth && props.strokeWidth > 0;\n\tlet strokeFont = null;\n\tif (slugFont && hasStroke && ctx.device) {\n\t\tconst alignMultiplier = props.strokeAlign === \"outside\" ? 2 : 1;\n\t\tconst strokeWidthInFontUnits = (props.strokeWidth ?? 0) * alignMultiplier * (slugFont.unitsPerEm / fontSize);\n\t\tstrokeFont = SlugFontCache.getFont(fontFamily, props.fontWeight, ctx.device, strokeWidthInFontUnits, fontSize, props.variableAxes) ?? null;\n\t}\n\tif (!slugFont?.curvesTex || hasStroke && !strokeFont?.curvesTex) {\n\t\tconst fontUrl = GetFontAssetUrl(fontFamily);\n\t\tSlugFontCache.preloadSlugFont(ctx.device, fontFamily, fontUrl, void 0, props.renderId).catch((err) => {\n\t\t\tconsole.warn(`[drawParagraphNode] Failed to load Slug font for ${fontFamily}:`, err);\n\t\t});\n\t\treturn;\n\t}\n\tconst letterSpacing = props.letterSpacing ?? 0;\n\tconst lineHeight = props.lineHeight !== void 0 && props.lineHeight < 10 ? props.lineHeight * fontSize : props.lineHeight ?? fontSize * 1.2;\n\tconst align = props.align ?? \"start\";\n\tconst direction = props.direction ?? \"auto\";\n\tconst padding = props.isCaption ? 0 : props.textBackgroundColor ? props.padding ?? 0 : 0;\n\tlet textToRender = props.text;\n\tlet twState;\n\tif (props.typewriter) {\n\t\tconst compFps = props.fps ?? 24;\n\t\tconst totalDurationFrames = props.durationMs !== void 0 ? Math.round(props.durationMs / 1e3 * compFps) : 60;\n\t\ttwState = evaluateTypewriterState(props.text, props.frame ?? 0, 0, totalDurationFrames, props.typewriter.cadence, props.typewriter.scramble, props.typewriter.cursor?.blinkFrequency ?? 2, props.typewriter.granularity ?? \"character\", props.textProgress);\n\t\ttextToRender = twState.currentDisplayString;\n\t}\n\tconst spans = twState && props.spans?.length ? fitSpansToText(resolveTextSpans(props.spans), textToRender) : props.spans;\n\tconst pathOptions = props.pathOptions ? {\n\t\t...props.pathOptions,\n\t\tfirstMargin: props.firstMargin !== void 0 ? props.firstMargin : props.pathOptions.firstMargin,\n\t\tlastMargin: props.lastMargin !== void 0 ? props.lastMargin : props.pathOptions.lastMargin,\n\t\tbaselineShift: props.baselineShift !== void 0 ? props.baselineShift : props.pathOptions.baselineShift\n\t} : void 0;\n\tlet maxWidth;\n\tlet measured;\n\tif (props.width != null) {\n\t\tmaxWidth = Math.max(0, props.width - padding * 2);\n\t\tmeasured = SlugGeometry.measure(textToRender, slugFont, fontSize, letterSpacing, lineHeight, maxWidth, spans, direction);\n\t} else {\n\t\tmeasured = SlugGeometry.measure(textToRender, slugFont, fontSize, letterSpacing, lineHeight, void 0, spans, direction);\n\t\tmaxWidth = measured.width;\n\t}\n\tconst alignWidth = props.isCaption ? props.dstRect.width : maxWidth;\n\tconst animApplyBy = props.animation?.applyBy ?? \"word\";\n\tconst layout = (align === \"left\" || align === \"start\" && !measured.layout?.hasRtl) && (alignWidth === void 0 || alignWidth === maxWidth) && !pathOptions && animApplyBy === \"word\" && Boolean(measured?.layout) && measured.layout ? measured.layout : SlugGeometry.layout(textToRender, slugFont, fontSize, letterSpacing, lineHeight, maxWidth, align, animApplyBy, alignWidth, pathOptions, spans, direction);\n\tconst vAlign = props.verticalAlign ?? \"top\";\n\tconst slack = props.height != null && !pathOptions && !props.isCaption ? props.height - (measured.height + padding * 2) : 0;\n\tconst textRect = {\n\t\t...props.dstRect,\n\t\ty: props.dstRect.y + (vAlign === \"middle\" ? slack / 2 : vAlign === \"bottom\" ? slack : 0)\n\t};\n\tconst anim = props.animation;\n\tconst isBold = props.fontWeight === \"bold\" || typeof props.fontWeight === \"number\" && props.fontWeight >= 600 || typeof props.fontWeight === \"string\" && parseInt(props.fontWeight, 10) >= 600;\n\tconst hasTrueWeight = \"hasTrueWeight\" in slugFont && Boolean(slugFont.hasTrueWeight);\n\tlet fillFont = slugFont;\n\tif (isBold && !hasTrueWeight && ctx.device) {\n\t\tconst numericWeight = parseFontWeight(props.fontWeight);\n\t\tconst emboldenPx = Math.max(0, (numericWeight - 400) / 500) * .055 * fontSize;\n\t\tif (emboldenPx > 0) {\n\t\t\tconst strokeFontUnits = emboldenPx * (slugFont.unitsPerEm / fontSize);\n\t\t\tconst dilated = SlugFontCache.getFont(fontFamily, 400, ctx.device, strokeFontUnits, fontSize, props.variableAxes);\n\t\t\tif (dilated?.curvesTex) fillFont = dilated;\n\t\t}\n\t}\n\tconst instanceCount = layout.glyphs.length;\n\tconst elapsed = props.elapsedMs !== void 0 ? props.elapsedMs : props.frame !== void 0 && props.fps !== void 0 ? props.frame / props.fps * 1e3 : 0;\n\tconst duration = props.durationMs !== void 0 ? props.durationMs : 3e3;\n\tconst entranceMs = props.isCaption ? anim?.in === \"none\" || !anim?.in ? 0 : duration : anim?.entranceMs ? anim.entranceMs : anim?.in === \"none\" || !anim?.in ? 0 : duration;\n\tconst exitMs = props.isCaption ? 0 : anim?.exitMs ? anim.exitMs : anim?.out === \"none\" || !anim?.out ? 0 : duration;\n\tconst transitionIn = anim?.in || \"none\";\n\tconst transitionOut = anim?.out || \"none\";\n\tconst kinetic = anim?.kinetic || \"none\";\n\tconst smoothing = anim?.smoothing !== false;\n\tlet maxUnitIndex = 0;\n\tfor (const g$1 of layout.glyphs) if (!g$1.isSpace && g$1.unitIndex > maxUnitIndex) maxUnitIndex = g$1.unitIndex;\n\tconst totalUnits = maxUnitIndex + 1;\n\tconst perm = kinetic === \"shuffle\" || transitionIn === \"shuffle\" ? getShuffleOrder(totalUnits, props.text) : Array.from({ length: totalUnits }, (_, i) => i);\n\tif (props.textBackgroundColor) {\n\t\tconst strokeRadius = props.strokeRadius ?? props.borderRadius ?? 8;\n\t\tlet maxParagraphOpacity = 0;\n\t\tconst baseOpacity = props.opacity ?? 1;\n\t\tif (props.isVideoMode === false) maxParagraphOpacity = baseOpacity;\n\t\telse {\n\t\t\tfor (const glyph of layout.glyphs) {\n\t\t\t\tif (glyph.isSpace) continue;\n\t\t\t\tconst unitIdx = glyph.unitIndex;\n\t\t\t\tconst idx_i = perm[unitIdx] ?? unitIdx;\n\t\t\t\tconst { p_in, p_out } = computeUnitProgress(elapsed, duration, entranceMs, exitMs, idx_i, totalUnits, true);\n\t\t\t\tconst effect = applyAnimationEffects(p_in, p_out, smoothing, transitionIn, transitionOut, kinetic, elapsed, duration, entranceMs, exitMs, idx_i, baseOpacity, false);\n\t\t\t\tif (effect.visible && effect.opacity > maxParagraphOpacity) maxParagraphOpacity = effect.opacity;\n\t\t\t}\n\t\t\tfor (const emoji of layout.emojis) {\n\t\t\t\tconst idx_i = perm[(props.animation?.applyBy === \"line\" ? 0 : Math.floor(emoji.x / (fontSize + letterSpacing))) % totalUnits] ?? 0;\n\t\t\t\tconst { p_in, p_out } = computeUnitProgress(elapsed, duration, entranceMs, exitMs, idx_i, totalUnits, true);\n\t\t\t\tconst effect = applyAnimationEffects(p_in, p_out, smoothing, transitionIn, transitionOut, kinetic, elapsed, duration, entranceMs, exitMs, idx_i, baseOpacity, true);\n\t\t\t\tif (effect.visible && effect.opacity > maxParagraphOpacity) maxParagraphOpacity = effect.opacity;\n\t\t\t}\n\t\t}\n\t\tif (maxParagraphOpacity > .001) {\n\t\t\tconst rectWidth = props.width != null ? props.width : measured.width + padding * 2;\n\t\t\tconst rectHeight = props.height != null ? props.height : measured.height + padding * 2;\n\t\t\tctx.renderer.drawRRect(pass, {\n\t\t\t\trect: {\n\t\t\t\t\tx: props.dstRect.x,\n\t\t\t\t\ty: props.dstRect.y,\n\t\t\t\t\twidth: rectWidth,\n\t\t\t\t\theight: rectHeight\n\t\t\t\t},\n\t\t\t\trx: strokeRadius,\n\t\t\t\try: strokeRadius\n\t\t\t}, props.textBackgroundColor, { opacity: maxParagraphOpacity });\n\t\t}\n\t}\n\tif (layout.marks && layout.marks.length > 0) for (const m of layout.marks) {\n\t\tconst rx = m.borderRadius ?? 4;\n\t\tctx.renderer.drawRRect(pass, {\n\t\t\trect: {\n\t\t\t\tx: props.dstRect.x + padding + m.x,\n\t\t\t\ty: textRect.y + padding + m.y,\n\t\t\t\twidth: m.width,\n\t\t\t\theight: m.height\n\t\t\t},\n\t\t\trx,\n\t\t\try: rx\n\t\t}, m.background, { opacity: props.opacity ?? 1 });\n\t}\n\tconst baseColor = parseColor(props.color ?? \"white\");\n\tconst highlightColor = parseColor(props.highlightColor ?? \"yellow\");\n\tconst trackingShifts = new Float32Array(layout.glyphs.length);\n\tlet layoutCenterX = 0;\n\tlet layoutCenterY = 0;\n\tif (layout.glyphs.length > 0) {\n\t\tconst nonSpace = layout.glyphs.filter((g$1) => !g$1.isSpace);\n\t\tif (nonSpace.length > 0) {\n\t\t\tlayoutCenterX = (nonSpace[0].x + nonSpace[nonSpace.length - 1].x) / 2;\n\t\t\tlayoutCenterY = (nonSpace[0].y + nonSpace[nonSpace.length - 1].y) / 2;\n\t\t}\n\t}\n\tconst counts = {\n\t\tcharsCount: layout.charsCount,\n\t\twordsCount: layout.wordsCount,\n\t\tlinesCount: layout.linesCount,\n\t\tlayoutCenter: {\n\t\t\tx: layoutCenterX,\n\t\t\ty: layoutCenterY\n\t\t}\n\t};\n\tif (props.animators && props.animators.length > 0) {\n\t\tfor (const anim$1 of props.animators) if (\"selectors\" in anim$1 && Array.isArray(anim$1.selectors)) {\n\t\t\tconst aeAnim = anim$1;\n\t\t\tif (aeAnim.props?.tracking !== void 0 && aeAnim.props.tracking !== 0) {\n\t\t\t\tconst trackingAmount = aeAnim.props.tracking;\n\t\t\t\tconst lineGlyphIndices = /* @__PURE__ */ new Map();\n\t\t\t\tfor (let gIdx = 0; gIdx < layout.glyphs.length; gIdx++) {\n\t\t\t\t\tconst lIdx = layout.glyphs[gIdx].lineIndex ?? 0;\n\t\t\t\t\tlet list = lineGlyphIndices.get(lIdx);\n\t\t\t\t\tif (!list) {\n\t\t\t\t\t\tlist = [];\n\t\t\t\t\t\tlineGlyphIndices.set(lIdx, list);\n\t\t\t\t\t}\n\t\t\t\t\tlist.push(gIdx);\n\t\t\t\t}\n\t\t\t\tfor (const lineIndices of lineGlyphIndices.values()) {\n\t\t\t\t\tconst clusterMap = /* @__PURE__ */ new Map();\n\t\t\t\t\tfor (const gIdx of lineIndices) {\n\t\t\t\t\t\tconst key = layout.glyphs[gIdx].charIndex;\n\t\t\t\t\t\tconst members = clusterMap.get(key);\n\t\t\t\t\t\tif (members) members.push(gIdx);\n\t\t\t\t\t\telse clusterMap.set(key, [gIdx]);\n\t\t\t\t\t}\n\t\t\t\t\tconst clusters = Array.from(clusterMap.values());\n\t\t\t\t\tconst clusterX = (c) => {\n\t\t\t\t\t\tconst g$1 = layout.glyphs[c[0]];\n\t\t\t\t\t\treturn g$1.clusterX ?? g$1.x;\n\t\t\t\t\t};\n\t\t\t\t\tclusters.sort((a, b) => clusterX(a) - clusterX(b));\n\t\t\t\t\tconst weights = [];\n\t\t\t\t\tfor (const members of clusters) {\n\t\t\t\t\t\tconst g$1 = layout.glyphs[members[0]];\n\t\t\t\t\t\tconst w = evaluateAEAnimatorWeight(aeAnim, g$1, counts, props.signals, props.frame ?? 0, props.fps ?? 24);\n\t\t\t\t\t\tweights.push(w);\n\t\t\t\t\t}\n\t\t\t\t\tlet totalLineShift = 0;\n\t\t\t\t\tfor (let k = 0; k < clusters.length - 1; k++) totalLineShift += trackingAmount * weights[k];\n\t\t\t\t\tconst baseRtl = layout.glyphs[lineIndices[0]]?.baseRtl ?? false;\n\t\t\t\t\tconst lineAlign = align === \"start\" ? baseRtl ? \"right\" : \"left\" : align === \"end\" ? baseRtl ? \"left\" : \"right\" : align;\n\t\t\t\t\tlet cumShift = 0;\n\t\t\t\t\tfor (let k = 0; k < clusters.length; k++) {\n\t\t\t\t\t\tlet shift = cumShift;\n\t\t\t\t\t\tif (lineAlign === \"center\") shift -= totalLineShift * .5;\n\t\t\t\t\t\telse if (lineAlign === \"right\") shift -= totalLineShift;\n\t\t\t\t\t\tfor (const gIdx of clusters[k]) trackingShifts[gIdx] += shift;\n\t\t\t\t\t\tif (k < clusters.length - 1) cumShift += trackingAmount * weights[k];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\tlet scratchData = new Float32Array(Math.max(1024, instanceCount * 24));\n\tconst sharesGlyphIds = (target, glyph) => glyph.cp.glyphId !== void 0 && (glyph.font ?? slugFont).fontFamily === target.fontFamily;\n\tconst preparedFonts = /* @__PURE__ */ new Set();\n\tconst prepareGlyphs = (target) => {\n\t\tif (preparedFonts.has(target)) return;\n\t\tpreparedFonts.add(target);\n\t\tconst missing = [];\n\t\tfor (const g$1 of layout.glyphs) {\n\t\t\tconst id = g$1.cp.glyphId;\n\t\t\tif (id !== void 0 && (g$1.font ?? slugFont) !== target && sharesGlyphIds(target, g$1) && !target.glyphs?.has(id)) missing.push(id);\n\t\t}\n\t\tif (missing.length > 0) SlugGenerator.ensureGlyphs(target, missing);\n\t};\n\tconst glyphInFont = (target, glyph) => {\n\t\tif ((glyph.font ?? slugFont) === target) return glyph.cp;\n\t\tif (sharesGlyphIds(target, glyph)) {\n\t\t\tconst byId = target.glyphs?.get(glyph.cp.glyphId);\n\t\t\tif (byId) return byId;\n\t\t}\n\t\treturn target.codePoints.get(glyph.cp.codePoint) || glyph.cp;\n\t};\n\tconst buildInstanceData = (targetFont, colorOverride, offsetX = 0, offsetY = 0, blurOverride, fontFilter) => {\n\t\tconst requiredLen = instanceCount * 24;\n\t\tif (scratchData.length < requiredLen) scratchData = new Float32Array(requiredLen);\n\t\tconst data = scratchData;\n\t\tlet visibleCount = 0;\n\t\tprepareGlyphs(targetFont);\n\t\tfor (let i = 0; i < layout.glyphs.length; i++) {\n\t\t\tconst glyph = layout.glyphs[i];\n\t\t\tif (glyph.isSpace) continue;\n\t\t\tif (fontFilter && !fontFilter(glyph)) continue;\n\t\t\tconst cp = glyphInFont(targetFont, glyph);\n\t\t\tif (!cp || cp.width === 0 || cp.height === 0) continue;\n\t\t\tconst unitIdx = glyph.unitIndex;\n\t\t\tconst idx_i = perm[unitIdx] ?? unitIdx;\n\t\t\tlet opacity = props.opacity ?? 1;\n\t\t\tlet transX = 0;\n\t\t\tlet transY = 0;\n\t\t\tlet rot = 0;\n\t\t\tlet scale = 1;\n\t\t\tlet blurAmount = blurOverride !== void 0 ? blurOverride : 0;\n\t\t\tif (props.isVideoMode !== false) {\n\t\t\t\tconst { p_in, p_out } = computeUnitProgress(elapsed, duration, entranceMs, exitMs, idx_i, totalUnits, true);\n\t\t\t\tconst effect = applyAnimationEffects(p_in, p_out, smoothing, transitionIn, transitionOut, kinetic, elapsed, duration, entranceMs, exitMs, idx_i, props.opacity ?? 1, false);\n\t\t\t\tif (!effect.visible) continue;\n\t\t\t\topacity = effect.opacity;\n\t\t\t\ttransX = effect.transX;\n\t\t\t\ttransY = effect.transY;\n\t\t\t\trot = effect.rot;\n\t\t\t\tscale = effect.scale;\n\t\t\t\tif (blurOverride === void 0) blurAmount = effect.blurAmount;\n\t\t\t}\n\t\t\tlet customScaleX = 1;\n\t\t\tlet customScaleY = 1;\n\t\t\tlet animatorColor;\n\t\t\tlet transZ = 0;\n\t\t\tlet chromaticShift = 0;\n\t\t\tlet dissolveProgress = 0;\n\t\t\tlet vfxParam = 0;\n\t\t\tlet skewM01 = 0;\n\t\t\tlet skewM10 = 0;\n\t\t\tlet anchorConfig;\n\t\t\tlet fillOpacity = 1;\n\t\t\tif (props.animators && props.animators.length > 0) {\n\t\t\t\tconst kResult = applyGlyphAnimators(props.animators, glyph, counts, {\n\t\t\t\t\ttransX,\n\t\t\t\t\ttransY,\n\t\t\t\t\trot,\n\t\t\t\t\tscale,\n\t\t\t\t\tscaleX: customScaleX,\n\t\t\t\t\tscaleY: customScaleY,\n\t\t\t\t\topacity,\n\t\t\t\t\tblurAmount,\n\t\t\t\t\tcolor: baseColor\n\t\t\t\t}, false, props.frame ?? 0, props.fps ?? 24, props.signals);\n\t\t\t\ttransX = kResult.transX;\n\t\t\t\ttransY = kResult.transY;\n\t\t\t\trot = kResult.rot;\n\t\t\t\tscale = kResult.scale;\n\t\t\t\tcustomScaleX = kResult.scaleX;\n\t\t\t\tcustomScaleY = kResult.scaleY;\n\t\t\t\topacity = kResult.opacity;\n\t\t\t\tif (blurOverride === void 0) blurAmount = kResult.blurAmount;\n\t\t\t\tif (kResult.color) animatorColor = kResult.color;\n\t\t\t\tif (kResult.lineSpacing !== void 0) transY += computeLineLeadingDisplacement(glyph.lineIndex, layout.linesCount, kResult.lineSpacing, kResult.lineAnchor ?? 0);\n\t\t\t\ttransZ = kResult.transZ ?? 0;\n\t\t\t\tchromaticShift = kResult.chromaticShift ?? 0;\n\t\t\t\tdissolveProgress = kResult.dissolveProgress ?? 0;\n\t\t\t\tvfxParam = kResult.vfxParam ?? 0;\n\t\t\t\tskewM01 = kResult.skewM01 ?? 0;\n\t\t\t\tskewM10 = kResult.skewM10 ?? 0;\n\t\t\t\tanchorConfig = kResult.anchorConfig;\n\t\t\t\tfillOpacity = kResult.fillOpacity ?? 1;\n\t\t\t}\n\t\t\ttransX += trackingShifts[i];\n\t\t\tlet glyphX = glyph.x;\n\t\t\tif (props.marquee) {\n\t\t\t\tconst elapsedSec = (props.frame ?? 0) / (props.fps ?? 24);\n\t\t\t\tconst contentWidth = layout.glyphs.length > 0 ? layout.glyphs[layout.glyphs.length - 1].x + fontSize : props.dstRect.width;\n\t\t\t\tglyphX = evaluateMarqueeOffset(glyph.x, props.dstRect.width, contentWidth, props.marquee, elapsedSec);\n\t\t\t}\n\t\t\tconst isHighlighted = props.highlightWordIndex !== void 0 && glyph.wordIndex === props.highlightWordIndex;\n\t\t\tconst spanColor = glyph.fill ? parseColor(glyph.fill) : void 0;\n\t\t\tconst col = animatorColor ?? colorOverride ?? (isHighlighted ? highlightColor : spanColor ?? baseColor);\n\t\t\tconst writeInstance = (boldShift) => {\n\t\t\t\tconst offset = visibleCount * 24;\n\t\t\t\tconst fontScale = glyph.fontScale ?? fontSize / targetFont.unitsPerEm;\n\t\t\t\tlet scaleX = cp.width * fontScale / 2 * customScaleX;\n\t\t\t\tlet scaleY = cp.height * fontScale / 2 * customScaleY;\n\t\t\t\tif (transZ !== 0) {\n\t\t\t\t\tconst perspective = 1200;\n\t\t\t\t\tconst depth = Math.max(100, perspective - transZ);\n\t\t\t\t\tconst pScale = depth > 1 ? perspective / depth : 1;\n\t\t\t\t\tscaleX *= pScale;\n\t\t\t\t\tscaleY *= pScale;\n\t\t\t\t}\n\t\t\t\tconst finalRot = rot + (glyph.pathTangentAngleRad ?? 0);\n\t\t\t\tlet biasX;\n\t\t\t\tlet biasY;\n\t\t\t\tif (glyph.pathTangentAngleRad !== void 0) {\n\t\t\t\t\tconst r0x = cp.bearingX * fontScale + scaleX;\n\t\t\t\t\tconst r0y = -cp.bearingY * fontScale + scaleY;\n\t\t\t\t\tconst cosT = Math.cos(finalRot);\n\t\t\t\t\tconst sinT = Math.sin(finalRot);\n\t\t\t\t\tconst rotatedR0x = r0x * cosT - r0y * sinT;\n\t\t\t\t\tconst rotatedR0y = r0x * sinT + r0y * cosT;\n\t\t\t\t\tbiasX = glyphX + rotatedR0x + props.dstRect.x + padding + offsetX + boldShift;\n\t\t\t\t\tbiasY = glyph.y + rotatedR0y + textRect.y + padding + offsetY;\n\t\t\t\t} else {\n\t\t\t\t\tbiasX = glyphX + cp.bearingX * fontScale + scaleX + props.dstRect.x + padding + offsetX + boldShift;\n\t\t\t\t\tbiasY = glyph.y - cp.bearingY * fontScale + scaleY + textRect.y + padding + offsetY;\n\t\t\t\t}\n\t\t\t\tif (anchorConfig) {\n\t\t\t\t\tconst pivot = computeAnchorPivotOffset({\n\t\t\t\t\t\twidth: cp.width * fontScale,\n\t\t\t\t\t\theight: cp.height * fontScale,\n\t\t\t\t\t\tascender: (targetFont.ascender ?? 800) * fontScale,\n\t\t\t\t\t\tdescender: (targetFont.descender ?? -200) * fontScale\n\t\t\t\t\t}, anchorConfig);\n\t\t\t\t\tconst cosR = Math.cos(finalRot);\n\t\t\t\t\tconst sinR = Math.sin(finalRot);\n\t\t\t\t\tconst pivotShiftX = pivot.px * (1 - cosR * scale) + pivot.py * (sinR * scale);\n\t\t\t\t\tconst pivotShiftY = -pivot.px * (sinR * scale) + pivot.py * (1 - cosR * scale);\n\t\t\t\t\tbiasX += pivotShiftX;\n\t\t\t\t\tbiasY += pivotShiftY;\n\t\t\t\t}\n\t\t\t\tif (skewM01 !== 0 || skewM10 !== 0) {\n\t\t\t\t\tbiasX += scaleY * skewM01;\n\t\t\t\t\tbiasY += scaleX * skewM10;\n\t\t\t\t}\n\t\t\t\tdata[offset + 0] = scaleX;\n\t\t\t\tdata[offset + 1] = scaleY;\n\t\t\t\tdata[offset + 2] = biasX;\n\t\t\t\tdata[offset + 3] = biasY;\n\t\t\t\tdata[offset + 4] = cp.width;\n\t\t\t\tdata[offset + 5] = cp.height;\n\t\t\t\tdata[offset + 6] = cp.width / cp.bandDimX;\n\t\t\t\tdata[offset + 7] = cp.height / cp.bandDimY;\n\t\t\t\tdata[offset + 8] = cp.bandCount - 1;\n\t\t\t\tdata[offset + 9] = cp.bandCount - 1;\n\t\t\t\tdata[offset + 10] = cp.bandsTexCoordX;\n\t\t\t\tdata[offset + 11] = cp.bandsTexCoordY;\n\t\t\t\tdata[offset + 12] = finalRot;\n\t\t\t\tdata[offset + 13] = scale;\n\t\t\t\tdata[offset + 14] = transX;\n\t\t\t\tdata[offset + 15] = transY;\n\t\t\t\tdata[offset + 16] = col.r;\n\t\t\t\tdata[offset + 17] = col.g;\n\t\t\t\tdata[offset + 18] = col.b;\n\t\t\t\tconst spanOpacity = glyph.opacity ?? 1;\n\t\t\t\tdata[offset + 19] = col.a * opacity * fillOpacity * spanOpacity;\n\t\t\t\tdata[offset + 20] = blurAmount;\n\t\t\t\tdata[offset + 21] = chromaticShift;\n\t\t\t\tdata[offset + 22] = dissolveProgress;\n\t\t\t\tdata[offset + 23] = vfxParam;\n\t\t\t\tvisibleCount++;\n\t\t\t};\n\t\t\twriteInstance(0);\n\t\t}\n\t\treturn {\n\t\t\tdata,\n\t\t\tvisibleCount\n\t\t};\n\t};\n\tif (props.shadows && props.shadows.length > 0) for (const shadow of props.shadows) {\n\t\tconst shadowColor = parseColor(shadow.color);\n\t\tconst dx = shadow.offset?.x ?? 0;\n\t\tconst dy = shadow.offset?.y ?? 0;\n\t\tconst blur = shadow.blurRadius ?? 0;\n\t\tconst { data: shadowData, visibleCount: shadowVisibleCount } = buildInstanceData(fillFont, shadowColor, dx, dy, blur);\n\t\tif (shadowVisibleCount > 0) {\n\t\t\tconst drawInstances = shadowData.subarray(0, shadowVisibleCount * 24);\n\t\t\tconst slant$1 = props.fontStyle === \"italic\" ? .21 : 0;\n\t\t\tctx.renderer.slugPipeline.draw(pass, ctx.renderer.getTransformStack(), fillFont, drawInstances, shadowVisibleCount, shadow.color, ctx.renderer.getSurfaceWidth(), ctx.renderer.getSurfaceHeight(), {\n\t\t\t\topacity: props.opacity ?? 1,\n\t\t\t\ttransform: props.matrix,\n\t\t\t\tcustomParam: slant$1\n\t\t\t});\n\t\t}\n\t}\n\tconst longShadowAnim = props.animators?.find((a) => \"props\" in a && a.props?.longShadow && (a.props?.longShadow?.length ?? 0) > 0);\n\tif (longShadowAnim && \"props\" in longShadowAnim) {\n\t\tconst animObj = longShadowAnim;\n\t\tconst ls = animObj.props?.longShadow;\n\t\tif (ls) {\n\t\t\tconst spProp = animObj.props?.spring;\n\t\t\tlet length = ls.length;\n\t\t\tlet angle = ls.angle;\n\t\t\tif (spProp) {\n\t\t\t\tconst sp = evaluateSpringProgress((props.frame ?? 0) / (props.fps ?? 30), spProp.stiffness, spProp.damping, spProp.mass, spProp.initialVelocity);\n\t\t\t\tlength = Math.max(0, ls.length * sp);\n\t\t\t\tangle = ls.angle + (1 - Math.min(1, sp)) * 25;\n\t\t\t} else {\n\t\t\t\tconst easeOut = 1 - (1 - Math.min(1, (props.frame ?? 0) / 36)) ** 3;\n\t\t\t\tlength = ls.length * easeOut;\n\t\t\t}\n\t\t\tconst rad = angle * Math.PI / 180;\n\t\t\tconst totalSteps = Math.max(4, Math.min(64, ls.steps ?? 16));\n\t\t\tconst stepLen = length / totalSteps;\n\t\t\tconst shadowCol = parseColor(ls.color ?? \"#000000\");\n\t\t\tfor (let s = 1; s <= totalSteps; s++) {\n\t\t\t\tconst dist = s * stepLen;\n\t\t\t\tconst sx = dist * Math.cos(rad);\n\t\t\t\tconst sy = dist * Math.sin(rad);\n\t\t\t\tconst t = s / totalSteps;\n\t\t\t\tconst stepOpacity = (ls.startOpacity ?? .8) * (1 - t) + (ls.endOpacity ?? 0) * t;\n\t\t\t\tconst { data: sliceData, visibleCount: sliceCount } = buildInstanceData(slugFont, {\n\t\t\t\t\t...shadowCol,\n\t\t\t\t\ta: shadowCol.a * stepOpacity\n\t\t\t\t}, sx, sy, 0);\n\t\t\t\tif (sliceCount > 0) {\n\t\t\t\t\tconst drawInstances = sliceData.subarray(0, sliceCount * 24);\n\t\t\t\t\tconst slant$1 = props.fontStyle === \"italic\" ? .21 : 0;\n\t\t\t\t\tctx.renderer.slugPipeline.draw(pass, ctx.renderer.getTransformStack(), fillFont, drawInstances, sliceCount, ls.color ?? \"black\", ctx.renderer.getSurfaceWidth(), ctx.renderer.getSurfaceHeight(), {\n\t\t\t\t\t\topacity: (props.opacity ?? 1) * stepOpacity,\n\t\t\t\t\t\ttransform: props.matrix,\n\t\t\t\t\t\tcustomParam: slant$1\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\tif (hasStroke && strokeFont) {\n\t\tconst strokeColor = parseColor(props.stroke);\n\t\tconst { data: strokeData, visibleCount: strokeVisibleCount } = buildInstanceData(strokeFont, strokeColor);\n\t\tif (strokeVisibleCount > 0) {\n\t\t\tconst drawInstances = strokeData.subarray(0, strokeVisibleCount * 24);\n\t\t\tconst slant$1 = props.fontStyle === \"italic\" ? .21 : 0;\n\t\t\tctx.renderer.slugPipeline.draw(pass, ctx.renderer.getTransformStack(), strokeFont, drawInstances, strokeVisibleCount, props.stroke ?? \"#000000\", ctx.renderer.getSurfaceWidth(), ctx.renderer.getSurfaceHeight(), {\n\t\t\t\topacity: props.opacity ?? 1,\n\t\t\t\ttransform: props.matrix,\n\t\t\t\tcustomParam: slant$1\n\t\t\t});\n\t\t}\n\t}\n\tconst uniqueFonts = /* @__PURE__ */ new Set();\n\tlet hasMultiFonts = false;\n\tfor (const g$1 of layout.glyphs) if (g$1.font && g$1.font !== fillFont) {\n\t\tuniqueFonts.add(g$1.font);\n\t\thasMultiFonts = true;\n\t}\n\tconst slant = props.fontStyle === \"italic\" ? .21 : 0;\n\tif (hasMultiFonts) {\n\t\tuniqueFonts.add(fillFont);\n\t\tfor (const currentFont of uniqueFonts) {\n\t\t\tif (ctx.device && !currentFont.curvesTex) SlugFontCache.ensureTextures(ctx.device, currentFont);\n\t\t\tif (!currentFont.curvesTex) continue;\n\t\t\tconst { data: fontData, visibleCount: fontVisibleCount } = buildInstanceData(currentFont, void 0, 0, 0, void 0, (g$1) => (g$1.font ?? fillFont) === currentFont);\n\t\t\tif (fontVisibleCount > 0) {\n\t\t\t\tconst drawInstances = fontData.subarray(0, fontVisibleCount * 24);\n\t\t\t\tctx.renderer.slugPipeline.draw(pass, ctx.renderer.getTransformStack(), currentFont, drawInstances, fontVisibleCount, props.color ?? \"white\", ctx.renderer.getSurfaceWidth(), ctx.renderer.getSurfaceHeight(), {\n\t\t\t\t\topacity: props.opacity ?? 1,\n\t\t\t\t\ttransform: props.matrix,\n\t\t\t\t\tcustomParam: slant\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t} else {\n\t\tconst { data: mainData, visibleCount: mainVisibleCount } = buildInstanceData(fillFont);\n\t\tif (mainVisibleCount > 0) {\n\t\t\tconst drawInstances = mainData.subarray(0, mainVisibleCount * 24);\n\t\t\tctx.renderer.slugPipeline.draw(pass, ctx.renderer.getTransformStack(), fillFont, drawInstances, mainVisibleCount, props.color ?? \"white\", ctx.renderer.getSurfaceWidth(), ctx.renderer.getSurfaceHeight(), {\n\t\t\t\topacity: props.opacity ?? 1,\n\t\t\t\ttransform: props.matrix,\n\t\t\t\tcustomParam: slant\n\t\t\t});\n\t\t}\n\t}\n\tfor (const emoji of layout.emojis) {\n\t\tconst emojiUnitIdx = props.animation?.applyBy === \"line\" ? 0 : Math.floor(emoji.x / (fontSize + letterSpacing));\n\t\tconst idx_i = perm[emojiUnitIdx % totalUnits] ?? 0;\n\t\tlet opacity = props.opacity ?? 1;\n\t\tlet transX = 0;\n\t\tlet transY = 0;\n\t\tlet rot = 0;\n\t\tlet scale = 1;\n\t\tif (props.isVideoMode !== false) {\n\t\t\tconst { p_in, p_out } = computeUnitProgress(elapsed, duration, entranceMs, exitMs, idx_i, totalUnits, true);\n\t\t\tconst effect = applyAnimationEffects(p_in, p_out, smoothing, transitionIn, transitionOut, kinetic, elapsed, duration, entranceMs, exitMs, idx_i, props.opacity ?? 1, true);\n\t\t\tif (!effect.visible) continue;\n\t\t\topacity = effect.opacity;\n\t\t\ttransX = effect.transX;\n\t\t\ttransY = effect.transY;\n\t\t\trot = effect.rot;\n\t\t\tscale = effect.scale;\n\t\t}\n\t\tif (props.animators && props.animators.length > 0) {\n\t\t\tconst kResult = applyGlyphAnimators(props.animators, {\n\t\t\t\tcharIndex: emojiUnitIdx,\n\t\t\t\twordIndex: 0,\n\t\t\t\tlineIndex: emoji.lineIndex\n\t\t\t}, {\n\t\t\t\tcharsCount: layout.charsCount,\n\t\t\t\twordsCount: layout.wordsCount,\n\t\t\t\tlinesCount: layout.linesCount\n\t\t\t}, {\n\t\t\t\ttransX,\n\t\t\t\ttransY,\n\t\t\t\trot,\n\t\t\t\tscale,\n\t\t\t\tscaleX: 1,\n\t\t\t\tscaleY: 1,\n\t\t\t\topacity,\n\t\t\t\tblurAmount: 0\n\t\t\t}, true);\n\t\t\ttransX = kResult.transX;\n\t\t\ttransY = kResult.transY;\n\t\t\trot = kResult.rot;\n\t\t\tscale = kResult.scale;\n\t\t\topacity = kResult.opacity;\n\t\t}\n\t\tconst emojiTex = getOrCreateEmojiTexture(ctx.device, emoji.char, emoji.size);\n\t\tconst localEmojiSize = emoji.size * 1.5;\n\t\tconst offsetAdjustment = (localEmojiSize - emoji.size) / 2;\n\t\tconst emojiDstRect = {\n\t\t\tx: props.dstRect.x + emoji.x + padding - offsetAdjustment,\n\t\t\ty: textRect.y + emoji.y + padding - offsetAdjustment,\n\t\t\twidth: localEmojiSize,\n\t\t\theight: localEmojiSize\n\t\t};\n\t\tlet localM = new DOMMatrix();\n\t\tconst emojiCenterX = emojiDstRect.x + localEmojiSize / 2;\n\t\tconst emojiCenterY = emojiDstRect.y + localEmojiSize / 2;\n\t\tlocalM = localM.translate(emojiCenterX, emojiCenterY);\n\t\tif (transX !== 0 || transY !== 0) localM = localM.translate(transX, transY);\n\t\tif (rot !== 0) localM = localM.rotate(rot);\n\t\tif (scale !== 1) localM = localM.scale(scale);\n\t\tlocalM = localM.translate(-emojiCenterX, -emojiCenterY);\n\t\tconst emojiMatrix = props.matrix ? props.matrix.multiply(localM) : localM;\n\t\tctx.renderer.drawTextureRegion(pass, emojiTex, {\n\t\t\tx: 0,\n\t\t\ty: 0,\n\t\t\twidth: emojiTex.width,\n\t\t\theight: emojiTex.height\n\t\t}, emojiDstRect, {\n\t\t\topacity,\n\t\t\ttransform: emojiMatrix\n\t\t});\n\t}\n\tif (props.typewriter?.cursor?.enabled && twState && twState.isCursorVisible && (!props.typewriter.cursor.hideOnComplete || twState.visibleChars < props.text.length)) {\n\t\tconst cursorCfg = props.typewriter.cursor;\n\t\tconst cursorCol = cursorCfg.color ?? props.color ?? \"white\";\n\t\tconst cursorWidth = cursorCfg.width ?? 2.5;\n\t\tconst cursorSpacing = cursorCfg.spacing ?? 3;\n\t\tlet cursorX = props.dstRect.x + padding;\n\t\tlet cursorY = textRect.y + padding;\n\t\tif (layout.glyphs.length > 0) {\n\t\t\tconst lastG = layout.glyphs[layout.glyphs.length - 1];\n\t\t\tconst fontScale = fontSize / slugFont.unitsPerEm;\n\t\t\tconst adv = lastG.clusterAdvance ?? (lastG.cp?.advanceWidth || 0) * fontScale;\n\t\t\tconst left = lastG.clusterX ?? lastG.x;\n\t\t\tconst barWidth = cursorCfg.style === \"underscore\" || cursorCfg.style === \"block\" ? fontSize * .5 : cursorWidth;\n\t\t\tcursorX = props.dstRect.x + padding + (lastG.rtl ? left - cursorSpacing - barWidth : left + adv + cursorSpacing);\n\t\t\tcursorY = lastG.y + textRect.y + padding;\n\t\t}\n\t\tif (cursorCfg.style === \"underscore\") ctx.renderer.drawRect(pass, {\n\t\t\tx: cursorX,\n\t\t\ty: cursorY,\n\t\t\twidth: fontSize * .5,\n\t\t\theight: cursorWidth\n\t\t}, cursorCol, 0, { opacity: props.opacity ?? 1 });\n\t\telse if (cursorCfg.style === \"block\") ctx.renderer.drawRect(pass, {\n\t\t\tx: cursorX,\n\t\t\ty: cursorY - fontSize * .8,\n\t\t\twidth: fontSize * .5,\n\t\t\theight: fontSize\n\t\t}, cursorCol, 0, { opacity: props.opacity ?? 1 });\n\t\telse ctx.renderer.drawRect(pass, {\n\t\t\tx: cursorX,\n\t\t\ty: cursorY - fontSize * .8,\n\t\t\twidth: cursorWidth,\n\t\t\theight: fontSize\n\t\t}, cursorCol, 0, { opacity: props.opacity ?? 1 });\n\t}\n}\n\n//#endregion\n//#region src/nodes/caption.ts\nfunction toSeconds(time) {\n\tconst parts = time.trim().replace(\",\", \".\").split(\":\");\n\tif (parts.length < 2 || parts.length > 3) throw new Error(`Invalid timestamp: ${time}`);\n\tif (parts.length === 2) {\n\t\tconst [m$1, s$1] = parts;\n\t\treturn parseInt(m$1, 10) * 60 + parseFloat(s$1);\n\t}\n\tconst [h, m, s] = parts;\n\treturn parseInt(h, 10) * 3600 + parseInt(m, 10) * 60 + parseFloat(s);\n}\nfunction parseSrt(input) {\n\tconst inputLines = input.replace(/\\r\\n/g, \"\\n\").split(\"\\n\");\n\tconst captions = [];\n\tfor (let i = 0; i < inputLines.length; i++) {\n\t\tconst line = inputLines[i];\n\t\tconst nextLine = inputLines[i + 1];\n\t\tif (line?.match(/([0-9]+)/) && nextLine?.includes(\" --> \")) {\n\t\t\tconst nextLineSplit = nextLine.split(\" --> \");\n\t\t\tconst start = toSeconds(nextLineSplit[0]);\n\t\t\tconst end = toSeconds(nextLineSplit[1]);\n\t\t\tcaptions.push({\n\t\t\t\ttext: \"\",\n\t\t\t\tstartMs: start * 1e3,\n\t\t\t\tendMs: end * 1e3,\n\t\t\t\tconfidence: 1,\n\t\t\t\ttimestampMs: (start + end) / 2 * 1e3\n\t\t\t});\n\t\t} else if (line?.includes(\" --> \")) {} else if (line?.trim() === \"\") {\n\t\t\tif (captions.length > 0) captions[captions.length - 1].text = captions[captions.length - 1].text.trim();\n\t\t} else if (captions.length > 0) captions[captions.length - 1].text += line + \"\\n\";\n\t}\n\treturn { captions: captions.map((l) => ({\n\t\t...l,\n\t\ttext: l.text.trimEnd()\n\t})) };\n}\nfunction getActiveCaptionCue(captions, currentMs, isVideoMode = true) {\n\tif (!captions || captions.length === 0) return null;\n\tconst cue = captions.find((c) => currentMs >= c.startMs && currentMs < c.endMs);\n\tif (cue) return cue;\n\tif (!isVideoMode && captions.length > 0) return captions[0];\n\treturn null;\n}\nfunction measureMaxCaptionHeight(captions, style, maxWidth) {\n\tif (!captions || captions.length === 0) return 160;\n\tconst fontSize = style.fontSize ?? 48;\n\tconst letterSpacing = style.letterSpacing ?? 0;\n\tconst calculatedLineHeight = style.lineHeight !== void 0 && style.lineHeight < 10 ? style.lineHeight * fontSize : style.lineHeight ?? fontSize * 1.2;\n\tconst padding = style.padding ?? (style.background ? 12 : 0);\n\tconst availableW = maxWidth ? Math.max(10, maxWidth - padding * 2) : void 0;\n\tlet fontFamily = style.fontFamily ?? \"Inter\";\n\tif (SlugFontCache.isFailed(fontFamily)) fontFamily = \"Inter\";\n\tconst slugFont = SlugFontCache.getFont(fontFamily, style.fontWeight, null, void 0, fontSize);\n\tlet maxH = 0;\n\tfor (const cue of captions) {\n\t\tif (!cue.text) continue;\n\t\tlet cueH = 0;\n\t\tif (slugFont && slugFont.codePoints) {\n\t\t\tconst measured = SlugGeometry.measure(cue.text, slugFont, fontSize, letterSpacing, calculatedLineHeight, availableW);\n\t\t\tcueH = Math.ceil(measured.height);\n\t\t} else {\n\t\t\tconst lines = cue.text.split(\"\\n\");\n\t\t\tlet totalWrappedLines = 0;\n\t\t\tfor (const l of lines) if (availableW) {\n\t\t\t\tconst estLineWidth = l.length * fontSize * .55 + letterSpacing * l.length;\n\t\t\t\tconst wrapCount = Math.max(1, Math.ceil(estLineWidth / availableW));\n\t\t\t\ttotalWrappedLines += wrapCount;\n\t\t\t} else totalWrappedLines += 1;\n\t\t\tcueH = Math.ceil(totalWrappedLines * calculatedLineHeight);\n\t\t}\n\t\tconst totalH = cueH + padding * 2;\n\t\tif (totalH > maxH) maxH = totalH;\n\t}\n\treturn Math.max(20, maxH || 160);\n}\nvar SrtLoaderCache = class {\n\tcache = /* @__PURE__ */ new Map();\n\tresolvedCache = /* @__PURE__ */ new Map();\n\tgetCached(src) {\n\t\treturn this.resolvedCache.get(src);\n\t}\n\tsetCached(src, captions) {\n\t\tthis.resolvedCache.set(src, captions);\n\t}\n\tclear() {\n\t\tthis.cache.clear();\n\t\tthis.resolvedCache.clear();\n\t}\n\tasync load(src) {\n\t\tif (!src) return [];\n\t\tconst cached = this.resolvedCache.get(src);\n\t\tif (cached) return cached;\n\t\tlet promise = this.cache.get(src);\n\t\tif (!promise) {\n\t\t\tpromise = (async () => {\n\t\t\t\tlet srtString = \"\";\n\t\t\t\tif (src.startsWith(\"data:\")) {\n\t\t\t\t\tconst commaIndex = src.indexOf(\",\");\n\t\t\t\t\tif (commaIndex !== -1) {\n\t\t\t\t\t\tconst metadata = src.substring(0, commaIndex);\n\t\t\t\t\t\tconst data = src.substring(commaIndex + 1);\n\t\t\t\t\t\tsrtString = metadata.includes(\";base64\") ? typeof Buffer !== \"undefined\" ? Buffer.from(data, \"base64\").toString(\"utf-8\") : new TextDecoder().decode(Uint8Array.from(atob(data), (c) => c.charCodeAt(0))) : decodeURIComponent(data);\n\t\t\t\t\t}\n\t\t\t\t} else if (src.includes(\"-->\")) srtString = src;\n\t\t\t\telse if (src.startsWith(\"http://\") || src.startsWith(\"https://\")) {\n\t\t\t\t\tconst res = await fetch(src);\n\t\t\t\t\tif (!res.ok) throw new Error(`Failed to fetch SRT: ${src}`);\n\t\t\t\t\tsrtString = await res.text();\n\t\t\t\t} else {\n\t\t\t\t\tlet filePath = src;\n\t\t\t\t\tif (filePath.startsWith(\"file://\")) try {\n\t\t\t\t\t\tfilePath = new URL(filePath).pathname;\n\t\t\t\t\t} catch {\n\t\t\t\t\t\tfilePath = filePath.replace(/^file:\\/\\//, \"\");\n\t\t\t\t\t}\n\t\t\t\t\tif (typeof process !== \"undefined\" && process.versions?.node) try {\n\t\t\t\t\t\tsrtString = await (await import(\n\t\t\t\t\t\t\t/* webpackIgnore: true */\n\t\t\t\t\t\t\t\"node:fs/promises\"\n)).readFile(filePath, \"utf-8\");\n\t\t\t\t\t} catch {\n\t\t\t\t\t\tconst res = await fetch(src);\n\t\t\t\t\t\tif (!res.ok) throw new Error(`Failed to fetch SRT: ${src}`);\n\t\t\t\t\t\tsrtString = await res.text();\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tconst res = await fetch(src);\n\t\t\t\t\t\tif (!res.ok) throw new Error(`Failed to fetch SRT: ${src}`);\n\t\t\t\t\t\tsrtString = await res.text();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tconst list = parseSrt(srtString).captions;\n\t\t\t\tthis.resolvedCache.set(src, list);\n\t\t\t\treturn list;\n\t\t\t})();\n\t\t\tthis.cache.set(src, promise);\n\t\t\tpromise.catch(() => {\n\t\t\t\tthis.cache.delete(src);\n\t\t\t\tthis.resolvedCache.delete(src);\n\t\t\t});\n\t\t}\n\t\treturn promise;\n\t}\n};\nconst srtLoader = new SrtLoaderCache();\nasync function drawCaptionNode(ctx, pass, props) {\n\tif (!props.src) return;\n\tconst captions = await srtLoader.load(props.src);\n\tif (!captions || captions.length === 0) return;\n\tconst caption = getActiveCaptionCue(captions, props.frame / props.fps * 1e3, props.isVideoMode !== false);\n\tif (!caption) return;\n\tconst text = caption.text;\n\tconst containerWidth = props.dstRect.width;\n\tconst padding = props.padding ?? (props.textBackgroundColor ? 12 : 0);\n\tconst maxAvailableWidth = Math.max(10, containerWidth - padding * 2);\n\tconst maxWidth = props.maxWidth !== void 0 ? Math.min(props.maxWidth, maxAvailableWidth) : maxAvailableWidth;\n\tconst fontSize = props.fontSize ?? 48;\n\tlet fontFamily = props.fontFamily ?? \"Inter\";\n\tif (SlugFontCache.isFailed(fontFamily)) fontFamily = \"Inter\";\n\tif (SlugFontCache.isFailed(fontFamily)) return;\n\tconst letterSpacing = props.letterSpacing ?? 0;\n\tconst slugFont = SlugFontCache.getFont(fontFamily, props.fontWeight, ctx.device, void 0, fontSize);\n\tif (!slugFont || !slugFont.curvesTex) {\n\t\tconst fontUrl = GetFontAssetUrl(fontFamily);\n\t\tSlugFontCache.preloadSlugFont(ctx.device, fontFamily, fontUrl, void 0, props.renderId).catch((err) => {\n\t\t\tconsole.warn(`[drawCaptionNode] Failed to load Slug font for ${fontFamily}:`, err);\n\t\t});\n\t\treturn;\n\t}\n\tconst calculatedLineHeight = props.lineHeight !== void 0 && props.lineHeight < 10 ? props.lineHeight * fontSize : props.lineHeight ?? fontSize * 1.2;\n\tconst measured = SlugGeometry.measure(text, slugFont, fontSize, letterSpacing, calculatedLineHeight, maxWidth, void 0, props.direction);\n\tconst finalWidth = measured.width;\n\tconst finalHeight = measured.height;\n\tconst rectWidth = finalWidth + padding * 2;\n\tconst rectHeight = finalHeight + padding * 2;\n\tconst align = props.align ?? \"center\";\n\tconst rtl = measured.layout?.glyphs[0]?.baseRtl ?? props.direction === \"rtl\";\n\tconst boxAlign = align === \"start\" ? rtl ? \"right\" : \"left\" : align === \"end\" ? rtl ? \"left\" : \"right\" : align;\n\tlet rectX = 0;\n\tif (boxAlign === \"center\") rectX = Math.max(0, (containerWidth - rectWidth) / 2);\n\telse if (boxAlign === \"right\") rectX = Math.max(0, containerWidth - rectWidth);\n\tconst containerHeight = props.dstRect.height;\n\tconst verticalAlign = props.verticalAlign ?? props.textAlignVertical ?? \"bottom\";\n\tlet rectY = 0;\n\tif (verticalAlign === \"top\") rectY = 0;\n\telse if (verticalAlign === \"middle\") rectY = (containerHeight - rectHeight) / 2;\n\telse rectY = containerHeight - rectHeight;\n\tconst dstRect = {\n\t\tx: props.dstRect.x + rectX,\n\t\ty: props.dstRect.y + rectY,\n\t\twidth: rectWidth,\n\t\theight: rectHeight\n\t};\n\tconst opacity = props.opacity ?? 1;\n\tif (props.textBackgroundColor) {\n\t\tconst radius = props.strokeRadius ?? props.borderRadius ?? 8;\n\t\tctx.renderer.drawRRect(pass, {\n\t\t\trect: dstRect,\n\t\t\trx: radius,\n\t\t\try: radius\n\t\t}, props.textBackgroundColor, { opacity });\n\t}\n\tconst paragraphDstRect = {\n\t\tx: dstRect.x + padding,\n\t\ty: dstRect.y + padding,\n\t\twidth: finalWidth,\n\t\theight: finalHeight\n\t};\n\tdrawParagraphNode(ctx, pass, {\n\t\t...props,\n\t\ttext,\n\t\tdstRect: paragraphDstRect,\n\t\twidth: maxWidth,\n\t\theight: finalHeight,\n\t\talign,\n\t\topacity,\n\t\tisCaption: true,\n\t\tanimation: void 0,\n\t\ttextBackgroundColor: void 0\n\t});\n}\n\n//#endregion\n//#region src/texture-cache.ts\nvar TextureCache = class {\n\ttextures = /* @__PURE__ */ new Map();\n\trefs = /* @__PURE__ */ new Map();\n\tlruMap = /* @__PURE__ */ new Map();\n\tactiveKeys = /* @__PURE__ */ new Set();\n\t/**\n\t* Evicted textures wait here until the frame being recorded has been\n\t* submitted: a command encoder may already reference them, and a frame's\n\t* recording can span awaits (decodes, inference) during which they are\n\t* evicted. `flushRetired` hands them to the GPU queue for destruction.\n\t*/\n\tretired = [];\n\tacquire(key) {\n\t\tconst tex = this.textures.get(key);\n\t\tif (tex) {\n\t\t\tconst count = this.refs.get(key) ?? 0;\n\t\t\tthis.refs.set(key, count + 1);\n\t\t\tthis.updateLru(key);\n\t\t}\n\t\treturn tex;\n\t}\n\thas(key) {\n\t\treturn this.textures.has(key);\n\t}\n\thasPrefix(prefix) {\n\t\tfor (const key of this.textures.keys()) if (key.startsWith(prefix)) return true;\n\t\treturn false;\n\t}\n\tcontains(str) {\n\t\tfor (const key of this.textures.keys()) if (key.includes(str)) return true;\n\t\treturn false;\n\t}\n\tset(key, tex, device) {\n\t\tif (this.textures.has(key)) this.evict(key, device);\n\t\tthis.textures.set(key, tex);\n\t\tthis.refs.set(key, 1);\n\t\tthis.updateLru(key);\n\t}\n\tcreate(key, device, width, height, format = \"rgba8unorm\") {\n\t\tconst tex = device.createTexture({\n\t\t\tsize: [width, height],\n\t\t\tformat,\n\t\t\tusage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST | GPUTextureUsage.RENDER_ATTACHMENT\n\t\t});\n\t\tthis.set(key, tex, device);\n\t\treturn tex;\n\t}\n\trelease(key) {\n\t\tconst count = this.refs.get(key);\n\t\tif (count !== void 0 && count > 0) {\n\t\t\tconst nextCount = count - 1;\n\t\t\tthis.refs.set(key, nextCount);\n\t\t}\n\t}\n\tevict(key, device) {\n\t\tconst tex = this.textures.get(key);\n\t\tif (tex) {\n\t\t\tthis.retire(tex, device);\n\t\t\tthis.textures.delete(key);\n\t\t}\n\t\tthis.refs.delete(key);\n\t\tthis.lruMap.delete(key);\n\t}\n\tprune(device, maxInactive = 30) {\n\t\tlet inactiveCount = 0;\n\t\tfor (const key of this.textures.keys()) if ((this.refs.get(key) ?? 0) === 0 && !this.activeKeys.has(key)) inactiveCount++;\n\t\tfor (const key of Array.from(this.lruMap.keys())) {\n\t\t\tif (inactiveCount <= maxInactive) break;\n\t\t\tif ((this.refs.get(key) ?? 0) === 0 && !this.activeKeys.has(key)) {\n\t\t\t\tconst tex = this.textures.get(key);\n\t\t\t\tif (tex) {\n\t\t\t\t\tthis.retire(tex, device);\n\t\t\t\t\tthis.textures.delete(key);\n\t\t\t\t}\n\t\t\t\tthis.refs.delete(key);\n\t\t\t\tthis.lruMap.delete(key);\n\t\t\t\tinactiveCount--;\n\t\t\t}\n\t\t}\n\t}\n\tretire(tex, device) {\n\t\tif (!device) {\n\t\t\ttry {\n\t\t\t\ttex.destroy();\n\t\t\t} catch (_) {}\n\t\t\treturn;\n\t\t}\n\t\tthis.retired.push(tex);\n\t}\n\t/**\n\t* Destroys textures retired before the last submit, once the GPU is done\n\t* with that work. Call at the start of a frame, after the previous one was\n\t* submitted (`Renderer2D.resetPools` does).\n\t*/\n\tflushRetired(device) {\n\t\tif (this.retired.length === 0) return;\n\t\tconst batch = this.retired;\n\t\tthis.retired = [];\n\t\tdevice.queue.onSubmittedWorkDone().then(() => {\n\t\t\tfor (const tex of batch) try {\n\t\t\t\ttex.destroy();\n\t\t\t} catch (_) {}\n\t\t}).catch(() => {});\n\t}\n\tupdateLru(key) {\n\t\tthis.lruMap.delete(key);\n\t\tthis.lruMap.set(key, true);\n\t}\n\tdestroy() {\n\t\tfor (const tex of this.retired.splice(0)) try {\n\t\t\ttex.destroy();\n\t\t} catch (_) {}\n\t\tfor (const [_, tex] of this.textures) try {\n\t\t\ttex.destroy();\n\t\t} catch (_$1) {}\n\t\tthis.textures.clear();\n\t\tthis.refs.clear();\n\t\tthis.lruMap.clear();\n\t}\n};\nconst textureCache = new TextureCache();\n\n//#endregion\n//#region src/nodes/gif.ts\nvar GifLoader = class {\n\tcache = /* @__PURE__ */ new Map();\n\tasync load(src) {\n\t\tlet promise = this.cache.get(src);\n\t\tif (!promise) {\n\t\t\tpromise = (async () => {\n\t\t\t\tconst res = await fetch(src);\n\t\t\t\tif (!res.ok) throw new Error(`Failed to fetch GIF: ${src}`);\n\t\t\t\tconst rawFrames = decompressFrames(parseGIF(await res.arrayBuffer()), true);\n\t\t\t\tif (rawFrames.length === 0) throw new Error(`GIF has no frames: ${src}`);\n\t\t\t\tconst width = rawFrames[0].dims.width;\n\t\t\t\tconst height = rawFrames[0].dims.height;\n\t\t\t\tconst fullCanvasBuffer = new Uint8ClampedArray(width * height * 4);\n\t\t\t\tconst frames = [];\n\t\t\t\tlet currentMs = 0;\n\t\t\t\tfor (const rf of rawFrames) {\n\t\t\t\t\tconst { dims, patch, delay } = rf;\n\t\t\t\t\tconst delayMs = delay ?? 100;\n\t\t\t\t\tfor (let y = 0; y < dims.height; y++) for (let x = 0; x < dims.width; x++) {\n\t\t\t\t\t\tconst patchIdx = (y * dims.width + x) * 4;\n\t\t\t\t\t\tconst targetIdx = ((y + dims.top) * width + (x + dims.left)) * 4;\n\t\t\t\t\t\tif (patch[patchIdx + 3] > 0) {\n\t\t\t\t\t\t\tfullCanvasBuffer[targetIdx] = patch[patchIdx];\n\t\t\t\t\t\t\tfullCanvasBuffer[targetIdx + 1] = patch[patchIdx + 1];\n\t\t\t\t\t\t\tfullCanvasBuffer[targetIdx + 2] = patch[patchIdx + 2];\n\t\t\t\t\t\t\tfullCanvasBuffer[targetIdx + 3] = patch[patchIdx + 3];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tframes.push({\n\t\t\t\t\t\tbuffer: new Uint8Array(fullCanvasBuffer),\n\t\t\t\t\t\tdelayMs,\n\t\t\t\t\t\tstartMs: currentMs,\n\t\t\t\t\t\tendMs: currentMs + delayMs\n\t\t\t\t\t});\n\t\t\t\t\tcurrentMs += delayMs;\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\twidth,\n\t\t\t\t\theight,\n\t\t\t\t\tframes,\n\t\t\t\t\ttotalMs: currentMs\n\t\t\t\t};\n\t\t\t})();\n\t\t\tthis.cache.set(src, promise);\n\t\t\tpromise.catch(() => this.cache.delete(src));\n\t\t}\n\t\treturn promise;\n\t}\n};\nconst gifLoader = new GifLoader();\nasync function drawGifNode(ctx, pass, props) {\n\tconst table = await gifLoader.load(props.src);\n\tif (table.frames.length === 0) return;\n\tconst elapsedMs = props.frame / props.fps * 1e3;\n\tconst loopedMs = table.totalMs > 0 ? elapsedMs % table.totalMs : 0;\n\tlet targetFrame = table.frames[0];\n\tfor (const f of table.frames) if (loopedMs >= f.startMs && loopedMs < f.endMs) {\n\t\ttargetFrame = f;\n\t\tbreak;\n\t}\n\tconst cacheKey = `${props.src}@@${props.frame}`;\n\tlet tex = textureCache.acquire(cacheKey);\n\tif (!tex) {\n\t\ttex = ctx.device.createTexture({\n\t\t\tsize: [table.width, table.height],\n\t\t\tformat: \"rgba8unorm\",\n\t\t\tusage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST | GPUTextureUsage.RENDER_ATTACHMENT\n\t\t});\n\t\tctx.device.queue.writeTexture({ texture: tex }, targetFrame.buffer, { bytesPerRow: table.width * 4 }, [table.width, table.height]);\n\t\ttextureCache.set(cacheKey, tex, ctx.device);\n\t}\n\tctx.renderer.drawTexture(pass, tex, props.dstRect, {\n\t\topacity: props.opacity ?? 1,\n\t\ttransform: props.matrix\n\t});\n\ttextureCache.release(cacheKey);\n}\n\n//#endregion\n//#region src/nodes/image-texture.ts\n/**\n* A premultiplied-alpha rgba8unorm texture holding `data` (left empty when\n* it has neither form).\n*/\nfunction createImageTexture(device, data) {\n\tconst tex = device.createTexture({\n\t\tsize: [data.width, data.height],\n\t\tformat: \"rgba8unorm\",\n\t\tusage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST | GPUTextureUsage.RENDER_ATTACHMENT\n\t});\n\tif (data.bitmap) device.queue.copyExternalImageToTexture({ source: data.bitmap }, {\n\t\ttexture: tex,\n\t\tpremultipliedAlpha: true\n\t}, [data.width, data.height]);\n\telse if (data.buffer) device.queue.writeTexture({ texture: tex }, data.buffer, { bytesPerRow: data.width * 4 }, [data.width, data.height]);\n\treturn tex;\n}\n\n//#endregion\n//#region src/nodes/image.ts\nvar ImageLoader = class {\n\tpending = /* @__PURE__ */ new Map();\n\tasync load(src, isHeadless) {\n\t\tconst key = `${src}-${isHeadless}`;\n\t\tlet promise = this.pending.get(key);\n\t\tif (!promise) {\n\t\t\tpromise = (async () => {\n\t\t\t\tif (typeof src === \"string\" && (/\\.(json|lottie)(\\?.*)?$/i.test(src) || src.startsWith(\"data:application/json\"))) throw new Error(`Unsupported image format for '${src}'. Lottie vector animations must be rendered with Layer.lottie(), not Layer.image().`);\n\t\t\t\tlet arrayBuffer;\n\t\t\t\tif (src.startsWith(\"http://\") || src.startsWith(\"https://\") || src.startsWith(\"data:\") || !isHeadless) {\n\t\t\t\t\tconst response = await fetch(src);\n\t\t\t\t\tif (!response.ok) throw new Error(`Failed to fetch image: ${src}`);\n\t\t\t\t\tarrayBuffer = await response.arrayBuffer();\n\t\t\t\t} else {\n\t\t\t\t\tconst filePath = await toLocalPath(src) ?? src;\n\t\t\t\t\tconst fileBuf = await (await import(\n\t\t\t\t\t\t/* webpackIgnore: true */\n\t\t\t\t\t\t\"node:fs/promises\"\n)).readFile(filePath);\n\t\t\t\t\tarrayBuffer = fileBuf.buffer.slice(fileBuf.byteOffset, fileBuf.byteOffset + fileBuf.byteLength);\n\t\t\t\t}\n\t\t\t\tif (isHeadless) {\n\t\t\t\t\tconst sharp = (await import(\n\t\t\t\t\t\t/* webpackIgnore: true */\n\t\t\t\t\t\t\"sharp\"\n)).default;\n\t\t\t\t\tconst { data, info } = await sharp(Buffer.from(arrayBuffer)).ensureAlpha().raw().toBuffer({ resolveWithObject: true });\n\t\t\t\t\treturn {\n\t\t\t\t\t\twidth: info.width,\n\t\t\t\t\t\theight: info.height,\n\t\t\t\t\t\tbuffer: premultiplyPixels(new Uint8Array(data))\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tconst blob = new Blob([arrayBuffer]);\n\t\t\t\tconst bitmap = await createImageBitmap(blob);\n\t\t\t\treturn {\n\t\t\t\t\twidth: bitmap.width,\n\t\t\t\t\theight: bitmap.height,\n\t\t\t\t\tbitmap\n\t\t\t\t};\n\t\t\t})();\n\t\t\tthis.pending.set(key, promise);\n\t\t\tpromise.catch((err) => {\n\t\t\t\tthis.pending.delete(key);\n\t\t\t\tconsole.error(`Failed to load image texture from ${src}:`, err);\n\t\t\t});\n\t\t}\n\t\treturn promise;\n\t}\n};\nconst imageLoader = new ImageLoader();\nasync function drawImageNode(ctx, pass, props) {\n\tif (typeof props.src === \"string\" && (/\\.(json|lottie)(\\?.*)?$/i.test(props.src) || props.src.startsWith(\"data:application/json\"))) console.warn(`[ImageRenderer] '${props.src}' is a Lottie vector animation, not a static image. Use Layer.lottie() instead.`);\n\tlet tex = textureCache.acquire(props.src);\n\tconst isHeadless = props.isHeadless ?? (typeof window === \"undefined\" || Boolean(globalThis.__IS_HEADLESS_RENDERER__));\n\tif (!tex) try {\n\t\tconst data = await imageLoader.load(props.src, isHeadless);\n\t\ttex = textureCache.acquire(props.src);\n\t\tif (!tex) {\n\t\t\ttex = createImageTexture(ctx.device, data);\n\t\t\ttextureCache.set(props.src, tex, ctx.device);\n\t\t}\n\t} catch (err) {\n\t\tif (isHeadless) throw err;\n\t\tconsole.error(\"Failed to load image texture:\", err);\n\t\treturn;\n\t}\n\tctx.renderer.drawTexture(pass, tex, props.dstRect, {\n\t\topacity: props.opacity ?? 1,\n\t\ttransform: props.matrix\n\t});\n\ttextureCache.release(props.src);\n}\n\n//#endregion\n//#region src/nodes/lottie.ts\nconst registeredLottieFonts = /* @__PURE__ */ new Set();\nfunction decodeBase64(base64) {\n\tif (typeof Buffer !== \"undefined\") return Buffer.from(base64, \"base64\").toString(\"utf-8\");\n\treturn atob(base64);\n}\nfunction extractFontFamiliesFromLottie(lottieJson) {\n\tconst fonts = /* @__PURE__ */ new Set();\n\tconst fontsList = (lottieJson?.fonts)?.list;\n\tif (Array.isArray(fontsList)) for (const entry of fontsList) {\n\t\tif (entry?.fName && typeof entry.fName === \"string\") fonts.add(entry.fName);\n\t\tif (entry?.fFamily && typeof entry.fFamily === \"string\") fonts.add(entry.fFamily);\n\t}\n\tconst layers = lottieJson?.layers;\n\tif (!Array.isArray(layers)) return [...fonts];\n\tfor (const layer of layers) {\n\t\tconst l = layer;\n\t\tif (l?.ty !== 5) continue;\n\t\tconst k = l?.t?.d?.k ?? l?.t?.k;\n\t\tif (!k) continue;\n\t\tconst kArr = Array.isArray(k) ? k : [k];\n\t\tfor (const kf of kArr) {\n\t\t\tconst kfObj = kf;\n\t\t\tconst possibleDocs = [\n\t\t\t\tkfObj?.s,\n\t\t\t\tkfObj?.e,\n\t\t\t\tkf\n\t\t\t].filter(Boolean);\n\t\t\tfor (const doc of possibleDocs) {\n\t\t\t\tconst docArr = Array.isArray(doc) ? doc : [doc];\n\t\t\t\tfor (const d of docArr) {\n\t\t\t\t\tconst docItem = d;\n\t\t\t\t\tif (docItem?.f && typeof docItem.f === \"string\") fonts.add(docItem.f);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn [...fonts];\n}\nfunction getBaseFontFamily(name) {\n\treturn name.replace(/[- ](Regular|Bold|Italic|Medium|Light|SemiBold|Semi-Bold|ExtraBold|Extra-Bold|Thin|Black|Book|Heavy|Alt|Alternate|RegularItalic|BoldItalic)$/i, \"\").trim();\n}\n/**\n* Make a font usable for DotLottie text layers.\n*\n* 1. Registers the font with the DOM via the shared font manager\n* (@font-face + document.fonts) — keeps canvas-2D fallbacks and\n* measurement working in the browser.\n* 2. Registers the font with the dotlottie WASM (thorvg) engine via\n* `DotLottie.registerFont` — this is what actually renders the text\n* inside the animation. It awaits WASM initialisation internally and\n* accepts a URL, an ArrayBuffer, or a Uint8Array.\n*/\nasync function registerLottieFont(family) {\n\tif (registeredLottieFonts.has(family)) return;\n\tconst baseFamily = getBaseFontFamily(family);\n\tlet fontUrl = GetFontAssetUrl(baseFamily);\n\tdebugLog(`[LottieRenderer] Registering font: \"${family}\" (base: \"${baseFamily}\") from URL: ${fontUrl}`);\n\tif (typeof window !== \"undefined\" && typeof document !== \"undefined\" && typeof document.createElement === \"function\" && typeof document.getElementById === \"function\") {\n\t\ttry {\n\t\t\tawait localFontManager.loadFont(family, fontUrl);\n\t\t} catch (_err) {\n\t\t\tfontUrl = GetFontAssetUrl(family);\n\t\t\ttry {\n\t\t\t\tawait localFontManager.loadFont(family, fontUrl);\n\t\t\t} catch (_) {}\n\t\t}\n\t\ttry {\n\t\t\tif (!await DotLottie.registerFont(family, fontUrl)) {\n\t\t\t\tconsole.warn(`[LottieRenderer] DotLottie.registerFont returned false for \"${family}\" (${fontUrl})`);\n\t\t\t\treturn;\n\t\t\t}\n\t\t} catch (err) {\n\t\t\tconsole.warn(`[LottieRenderer] DotLottie.registerFont failed for \"${family}\" (${fontUrl}):`, err);\n\t\t\treturn;\n\t\t}\n\t\tregisteredLottieFonts.add(family);\n\t\treturn;\n\t}\n\tlet fontPath = await registerHeadlessFont(family, fontUrl);\n\tif (!fontPath) {\n\t\tfontUrl = GetFontAssetUrl(family);\n\t\tfontPath = await registerHeadlessFont(family, fontUrl);\n\t}\n\tlet registered = false;\n\tif (fontPath) {\n\t\tconst fontData = await getHeadlessFontData(family);\n\t\tif (fontData) try {\n\t\t\tregistered = await DotLottie.registerFont(family, fontData);\n\t\t\tif (!registered) console.warn(`[LottieRenderer] DotLottie.registerFont returned false for \"${family}\" (${fontData.length} bytes)`);\n\t\t} catch (err) {\n\t\t\tconsole.warn(`[LottieRenderer] DotLottie.registerFont failed for \"${family}\" with binary data:`, err);\n\t\t}\n\t}\n\tif (!registered) try {\n\t\tregistered = await DotLottie.registerFont(family, fontUrl);\n\t\tif (!registered) console.warn(`[LottieRenderer] DotLottie.registerFont via URL also failed for \"${family}\" (${fontUrl})`);\n\t} catch (err) {\n\t\tconsole.warn(`[LottieRenderer] DotLottie.registerFont via URL threw for \"${family}\":`, err);\n\t}\n\tif (registered) registeredLottieFonts.add(family);\n\telse console.warn(`[LottieRenderer] All font registration attempts failed for \"${family}\". Text using this font will not render.`);\n}\nvar HeadlessLottieCanvas = class {\n\twidth;\n\theight;\n\tstyle = {};\n\tconstructor(width, height) {\n\t\tthis.width = width;\n\t\tthis.height = height;\n\t}\n\taddEventListener() {}\n\tremoveEventListener() {}\n\tgetContext(contextId) {\n\t\tif (contextId === \"2d\") return {\n\t\t\tfillRect() {},\n\t\t\tclearRect() {},\n\t\t\tputImageData() {},\n\t\t\tcreateImageData(width, height) {\n\t\t\t\treturn {\n\t\t\t\t\twidth,\n\t\t\t\t\theight,\n\t\t\t\t\tdata: new Uint8ClampedArray(width * height * 4)\n\t\t\t\t};\n\t\t\t},\n\t\t\tgetImageData(_sx, _sy, sw, sh) {\n\t\t\t\treturn {\n\t\t\t\t\twidth: sw,\n\t\t\t\t\theight: sh,\n\t\t\t\t\tdata: new Uint8ClampedArray(sw * sh * 4)\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t\treturn null;\n\t}\n\tgetBoundingClientRect() {\n\t\treturn {\n\t\t\tleft: 0,\n\t\t\ttop: 0,\n\t\t\twidth: this.width,\n\t\t\theight: this.height\n\t\t};\n\t}\n};\nvar LottieInstance = class {\n\tdotLottie;\n\tcanvas;\n\tloadPromise;\n\t_width;\n\t_height;\n\tuploadBuffer = null;\n\tconstructor(src, width, height, data) {\n\t\tthis._width = width;\n\t\tthis._height = height;\n\t\tthis.canvas = typeof window !== \"undefined\" && typeof document !== \"undefined\" && typeof document.createElement === \"function\" && typeof document.getElementById === \"function\" ? new OffscreenCanvas(width, height) : new HeadlessLottieCanvas(width, height);\n\t\tthis.dotLottie = new DotLottie({\n\t\t\tcanvas: this.canvas,\n\t\t\t...data ? { data } : { src },\n\t\t\tautoplay: false,\n\t\t\tloop: false,\n\t\t\tspeed: 0,\n\t\t\tlayout: {\n\t\t\t\talign: [.5, .5],\n\t\t\t\tfit: \"contain\"\n\t\t\t}\n\t\t});\n\t\tthis.loadPromise = new Promise((resolve$1, reject) => {\n\t\t\tif (this.dotLottie.isLoaded) {\n\t\t\t\tresolve$1();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.dotLottie.addEventListener(\"load\", () => {\n\t\t\t\tresolve$1();\n\t\t\t});\n\t\t\tthis.dotLottie.addEventListener(\"loadError\", (e) => {\n\t\t\t\treject(e instanceof Error ? e : /* @__PURE__ */ new Error(`Failed to load DotLottie animation from '${src}'`));\n\t\t\t});\n\t\t});\n\t}\n\tget width() {\n\t\treturn this._width;\n\t}\n\tget height() {\n\t\treturn this._height;\n\t}\n\tget totalFrames() {\n\t\treturn this.dotLottie.totalFrames ?? 1;\n\t}\n\tget fps() {\n\t\tconst totalFrames = this.totalFrames;\n\t\tconst duration = this.dotLottie.duration;\n\t\tif (duration > 0 && totalFrames > 0) return Math.round(totalFrames / duration);\n\t\treturn 24;\n\t}\n\tasync ready() {\n\t\tawait this.loadPromise;\n\t}\n\trenderPixels(frame, fit) {\n\t\tconst loopedFrame = Math.floor(frame) % Math.max(1, this.totalFrames);\n\t\tthis.dotLottie.setLayout({\n\t\t\talign: [.5, .5],\n\t\t\tfit: fit || \"contain\"\n\t\t});\n\t\tthis.dotLottie.resize();\n\t\tthis.dotLottie.setFrame(loopedFrame);\n\t\ttry {\n\t\t\tthis.dotLottie.render?.();\n\t\t} catch (_) {}\n\t\tconst core = this.dotLottie._dotLottieCore;\n\t\tif (core && typeof core.get_pixel_buffer === \"function\") {\n\t\t\tconst buf = core.get_pixel_buffer();\n\t\t\tconst expectedLength = this._width * this._height * 4;\n\t\t\tif (buf && buf.byteLength === expectedLength) {\n\t\t\t\tif (!this.uploadBuffer || this.uploadBuffer.byteLength !== expectedLength) this.uploadBuffer = new Uint8Array(expectedLength);\n\t\t\t\tthis.uploadBuffer.set(buf);\n\t\t\t\treturn premultiplyPixels(this.uploadBuffer);\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t}\n\trenderFrame(frame, fit) {\n\t\tconst loopedFrame = Math.floor(frame) % Math.max(1, this.totalFrames);\n\t\tthis.dotLottie.setLayout({\n\t\t\talign: [.5, .5],\n\t\t\tfit: fit || \"contain\"\n\t\t});\n\t\tthis.dotLottie.resize();\n\t\tthis.dotLottie.setFrame(loopedFrame);\n\t\ttry {\n\t\t\tthis.dotLottie.render?.();\n\t\t} catch (_) {}\n\t\treturn this.canvas;\n\t}\n\tdestroy() {\n\t\ttry {\n\t\t\tthis.dotLottie.destroy();\n\t\t} catch (_) {}\n\t\tthis.uploadBuffer = null;\n\t}\n};\nlet wasmConfigured = false;\nfunction polyfillHeadlessDOM() {\n\tconst globalObj = globalThis;\n\tconst dummyElement = createHeadlessDOMElement();\n\tinstallIntersectionObserverStub();\n\tif (typeof globalThis.HTMLCanvasElement === \"undefined\") {\n\t\tif (typeof globalThis.OffscreenCanvas !== \"undefined\") globalObj.HTMLCanvasElement = globalThis.OffscreenCanvas;\n\t}\n\tif (!globalThis.document) globalThis.document = {\n\t\tcreateElement: (tag) => {\n\t\t\tif (tag === \"canvas\" && typeof globalThis.OffscreenCanvas === \"function\") return new globalThis.OffscreenCanvas(1, 1);\n\t\t\treturn { ...dummyElement };\n\t\t},\n\t\tgetElementsByTagName: () => [],\n\t\tdocumentElement: dummyElement,\n\t\tbody: dummyElement\n\t};\n\tconst docObj = globalThis.document;\n\tdocObj.documentElement ??= dummyElement;\n\tdocObj.body ??= dummyElement;\n\tconst CanvasCtor = globalThis.HTMLCanvasElement || globalThis.OffscreenCanvas;\n\tif (CanvasCtor && typeof CanvasCtor === \"function\") {\n\t\tconst proto = CanvasCtor.prototype;\n\t\tif (proto) patchCanvasPrototypeForDOM(proto, dummyElement);\n\t}\n}\nasync function ensureWasmConfigured() {\n\tif (wasmConfigured) return;\n\tif (!(typeof window !== \"undefined\" && typeof document !== \"undefined\" && typeof document.createElement === \"function\" && typeof document.getElementById === \"function\")) {\n\t\tif (typeof globalThis.OffscreenCanvas === \"undefined\") globalThis.OffscreenCanvas = HeadlessLottieCanvas;\n\t\tpolyfillHeadlessDOM();\n\t\tif (typeof globalThis.Response === \"function\") try {\n\t\t\tObject.defineProperty(globalThis.Response, Symbol.hasInstance, {\n\t\t\t\tvalue(instance) {\n\t\t\t\t\treturn instance && typeof instance === \"object\" && (instance.constructor?.name === \"Response\" || typeof instance.arrayBuffer === \"function\");\n\t\t\t\t},\n\t\t\t\tconfigurable: true\n\t\t\t});\n\t\t} catch {}\n\t\ttry {\n\t\t\tconst { createRequire } = await import(\n\t\t\t\t/* webpackIgnore: true */\n\t\t\t\t/* @vite-ignore */\n\t\t\t\t\"node:module\"\n);\n\t\t\tconst fs$1 = await import(\n\t\t\t\t/* webpackIgnore: true */\n\t\t\t\t/* @vite-ignore */\n\t\t\t\t\"node:fs/promises\"\n);\n\t\t\tconst nodePath = await import(\n\t\t\t\t/* webpackIgnore: true */\n\t\t\t\t/* @vite-ignore */\n\t\t\t\t\"node:path\"\n);\n\t\t\tconst require = createRequire(import.meta.url);\n\t\t\tlet localWasmPath = null;\n\t\t\ttry {\n\t\t\t\tconst mainPath = require.resolve(\"@lottiefiles/dotlottie-web\");\n\t\t\t\tconst distIndex = mainPath.lastIndexOf(\"/dist/\");\n\t\t\t\tif (distIndex !== -1) localWasmPath = nodePath.join(mainPath.substring(0, distIndex), \"dist/dotlottie-player.wasm\");\n\t\t\t} catch {}\n\t\t\tif (localWasmPath) {\n\t\t\t\tconst wasmBase64 = (await fs$1.readFile(localWasmPath)).toString(\"base64\");\n\t\t\t\tDotLottie.setWasmUrl(`data:application/wasm;base64,${wasmBase64}`);\n\t\t\t}\n\t\t} catch (err) {\n\t\t\tconsole.warn(\"[LottieRenderer] Failed to configure headless WASM path:\", err);\n\t\t}\n\t}\n\twasmConfigured = true;\n}\nvar LottieLoader = class {\n\tcache = /* @__PURE__ */ new Map();\n\tasync load(src, width, height) {\n\t\tawait ensureWasmConfigured();\n\t\tconst resolvedWidth = Math.max(1, Math.ceil(width));\n\t\tconst resolvedHeight = Math.max(1, Math.ceil(height));\n\t\tconst key = `${src}@@${resolvedWidth}x${resolvedHeight}`;\n\t\tlet promise = this.cache.get(key);\n\t\tif (!promise) {\n\t\t\tpromise = (async () => {\n\t\t\t\tconst resolvedSrc = src;\n\t\t\t\tlet lottieData;\n\t\t\t\ttry {\n\t\t\t\t\tlet lottieJson = null;\n\t\t\t\t\tconst isNode = typeof process !== \"undefined\" && Boolean(process.versions?.node);\n\t\t\t\t\tconst isRemote = resolvedSrc.startsWith(\"http://\") || resolvedSrc.startsWith(\"https://\") || resolvedSrc.startsWith(\"data:\");\n\t\t\t\t\tif (resolvedSrc.startsWith(\"data:application/json;base64,\")) {\n\t\t\t\t\t\tconst base64Data = resolvedSrc.split(\",\")[1];\n\t\t\t\t\t\tconst jsonStr = decodeBase64(base64Data);\n\t\t\t\t\t\tlottieJson = JSON.parse(jsonStr);\n\t\t\t\t\t\tlottieData = jsonStr;\n\t\t\t\t\t} else if (resolvedSrc.startsWith(\"data:application/json,\")) {\n\t\t\t\t\t\tconst decodeData = decodeURIComponent(resolvedSrc.split(\",\")[1]);\n\t\t\t\t\t\tlottieJson = JSON.parse(decodeData);\n\t\t\t\t\t\tlottieData = decodeData;\n\t\t\t\t\t} else if (isNode && !isRemote) {\n\t\t\t\t\t\tlet filePath = resolvedSrc;\n\t\t\t\t\t\tif (filePath.startsWith(\"file://\")) try {\n\t\t\t\t\t\t\tfilePath = new URL(filePath).pathname;\n\t\t\t\t\t\t} catch {\n\t\t\t\t\t\t\tfilePath = filePath.replace(/^file:\\/\\//, \"\");\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst pathModule = await import(\n\t\t\t\t\t\t\t/* webpackIgnore: true */\n\t\t\t\t\t\t\t\"node:path\"\n);\n\t\t\t\t\t\tif (!pathModule.isAbsolute(filePath)) filePath = pathModule.resolve(process.cwd(), filePath);\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tconst fs$1 = await import(\n\t\t\t\t\t\t\t\t/* webpackIgnore: true */\n\t\t\t\t\t\t\t\t\"node:fs/promises\"\n);\n\t\t\t\t\t\t\tif (filePath.endsWith(\".json\")) {\n\t\t\t\t\t\t\t\tconst jsonContent = await fs$1.readFile(filePath, \"utf-8\");\n\t\t\t\t\t\t\t\tlottieJson = JSON.parse(jsonContent);\n\t\t\t\t\t\t\t\tlottieData = jsonContent;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tconst fileBuf = await fs$1.readFile(filePath);\n\t\t\t\t\t\t\t\tlottieData = fileBuf.buffer.slice(fileBuf.byteOffset, fileBuf.byteOffset + fileBuf.byteLength);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} catch {}\n\t\t\t\t\t} else if (isRemote && (resolvedSrc.endsWith(\".json\") || resolvedSrc.includes(\"/assets/\"))) {\n\t\t\t\t\t\tconst response = await fetch(resolvedSrc);\n\t\t\t\t\t\tif (response.ok) lottieJson = await response.json();\n\t\t\t\t\t}\n\t\t\t\t\tif (lottieJson) {\n\t\t\t\t\t\tconst fonts = extractFontFamiliesFromLottie(lottieJson);\n\t\t\t\t\t\tif (fonts.length > 0) await Promise.all(fonts.map((family) => registerLottieFont(family)));\n\t\t\t\t\t}\n\t\t\t\t} catch (err) {\n\t\t\t\t\tconsole.warn(`[LottieRenderer] Failed to load/register fonts for Lottie:`, err);\n\t\t\t\t}\n\t\t\t\tconst instance = new LottieInstance(resolvedSrc, resolvedWidth, resolvedHeight, lottieData);\n\t\t\t\tawait instance.ready();\n\t\t\t\treturn instance;\n\t\t\t})();\n\t\t\tthis.cache.set(key, promise);\n\t\t\tpromise.catch(() => this.cache.delete(key));\n\t\t}\n\t\treturn promise;\n\t}\n};\nconst lottieLoader = new LottieLoader();\nasync function drawLottieNode(ctx, pass, props) {\n\tconst baseWidth = Math.max(1, Math.ceil(props.dstRect.width));\n\tconst baseHeight = Math.max(1, Math.ceil(props.dstRect.height));\n\tconst requestedDpr = typeof props.dpr === \"number\" && props.dpr > 0 ? props.dpr : 2;\n\tconst maxDim = Math.max(baseWidth, baseHeight);\n\tconst maxAllowedDpr = Math.max(1, Math.floor(4096 / Math.max(1, maxDim)));\n\tconst effectiveDpr = Math.min(requestedDpr, maxAllowedDpr);\n\tconst resolvedWidth = Math.max(1, Math.round(baseWidth * effectiveDpr));\n\tconst resolvedHeight = Math.max(1, Math.round(baseHeight * effectiveDpr));\n\tconst instance = await lottieLoader.load(props.src, resolvedWidth, resolvedHeight);\n\tconst lottieFps = instance.fps;\n\tconst loopedFrame = Math.floor(props.frame * lottieFps / props.fps) % Math.max(1, instance.totalFrames);\n\tconst fitMode = props.fit || \"contain\";\n\tconst cacheKey = `${props.src}@@${loopedFrame}@@${resolvedWidth}x${resolvedHeight}@@${fitMode}`;\n\tlet tex = textureCache.acquire(cacheKey);\n\tif (!tex) {\n\t\ttex = ctx.device.createTexture({\n\t\t\tsize: [instance.width, instance.height],\n\t\t\tformat: \"rgba8unorm\",\n\t\t\tusage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST | GPUTextureUsage.RENDER_ATTACHMENT\n\t\t});\n\t\tconst pixelBuffer = instance.renderPixels(loopedFrame, fitMode);\n\t\tif (pixelBuffer) ctx.device.queue.writeTexture({ texture: tex }, pixelBuffer, { bytesPerRow: instance.width * 4 }, [instance.width, instance.height]);\n\t\telse {\n\t\t\tconst canvas = instance.renderFrame(loopedFrame, fitMode);\n\t\t\ttry {\n\t\t\t\tctx.device.queue.copyExternalImageToTexture({ source: canvas }, {\n\t\t\t\t\ttexture: tex,\n\t\t\t\t\tpremultipliedAlpha: true\n\t\t\t\t}, [instance.width, instance.height]);\n\t\t\t} catch {\n\t\t\t\tconst c2d = canvas.getContext(\"2d\");\n\t\t\t\tif (c2d) {\n\t\t\t\t\tconst imgData = c2d.getImageData(0, 0, instance.width, instance.height);\n\t\t\t\t\tconst fallbackBuffer = premultiplyPixels(new Uint8Array(imgData.data.buffer, imgData.data.byteOffset, imgData.data.byteLength));\n\t\t\t\t\tctx.device.queue.writeTexture({ texture: tex }, fallbackBuffer, { bytesPerRow: instance.width * 4 }, [instance.width, instance.height]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\ttextureCache.set(cacheKey, tex, ctx.device);\n\t}\n\tctx.renderer.drawTexture(pass, tex, props.dstRect, {\n\t\topacity: props.opacity ?? 1,\n\t\ttransform: props.matrix\n\t});\n\ttextureCache.release(cacheKey);\n}\n\n//#endregion\n//#region src/nodes/media-decoder.ts\n/**\n* Base class for media decoders (Video/Audio) that manages shared Input resources\n* and provides robust, cached iterator access with seek-ahead invalidation.\n*/\nvar BaseMediaDecoder = class {\n\tinput = null;\n\tinitPromise = null;\n\titerator = null;\n\titeratorStartTimestamp = -1;\n\tcurrentFetchId = 0;\n\tfetchLock = Promise.resolve();\n\tdestroyed = false;\n\tconstructor(url, isHeadless) {\n\t\tthis.url = url;\n\t\tthis.isHeadless = isHeadless;\n\t}\n\tasync init() {\n\t\tif (this.input) return;\n\t\tif (this.initPromise) return this.initPromise;\n\t\tthis.destroyed = false;\n\t\tthis.initPromise = (async () => {\n\t\t\ttry {\n\t\t\t\tconst input = await inputStore.acquire(this.url);\n\t\t\t\tif (this.destroyed) inputStore.release(this.url);\n\t\t\t\telse this.input = input;\n\t\t\t} catch (err) {\n\t\t\t\tthis.initPromise = null;\n\t\t\t\tthrow err;\n\t\t\t}\n\t\t})();\n\t\treturn this.initPromise;\n\t}\n\tdestroy() {\n\t\tthis.destroyed = true;\n\t\tthis.iterator?.return();\n\t\tif (this.input) {\n\t\t\tinputStore.release(this.url);\n\t\t\tthis.input = null;\n\t\t}\n\t\tthis.initPromise = null;\n\t\tthis.onDestroy();\n\t}\n};\nvar VideoDecoder = class extends BaseMediaDecoder {\n\tcanvasSink = null;\n\tvideoSampleSink = null;\n\tcurrentFrame = null;\n\tnextFrame = null;\n\tcurrentSample = null;\n\tnextSample = null;\n\theadlessQueue = [];\n\tisDecoding = false;\n\t/**\n\t* Reused RGBA staging array for headless decode. Only one decode is in\n\t* flight per decoder (`isDecoding` serializes them) and callers consume the\n\t* pixels synchronously (uploadFrameToTexture → writeTexture copies before\n\t* the next decode can run), so the array is never read after it is\n\t* overwritten. Avoids a full-frame allocation on every decoded frame.\n\t*/\n\tdecodeBuffer = null;\n\tnextRequest = null;\n\tpushHeadlessQueue(sample) {\n\t\tconst index = this.headlessQueue.findIndex((s) => s.timestamp > sample.timestamp);\n\t\tif (index === -1) this.headlessQueue.push(sample);\n\t\telse this.headlessQueue.splice(index, 0, sample);\n\t}\n\tasync fillHeadlessQueue(fetchId) {\n\t\tif (!this.iterator) return;\n\t\twhile (this.headlessQueue.length < 2) {\n\t\t\tconst result = await this.iterator.next();\n\t\t\tif (this.currentFetchId !== fetchId) {\n\t\t\t\tresult.value?.close?.();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (result.done || !result.value) break;\n\t\t\tthis.pushHeadlessQueue(result.value);\n\t\t}\n\t}\n\tasync closeIterator(iter) {\n\t\tif (!iter) return;\n\t\ttry {\n\t\t\tawait iter.return();\n\t\t} catch (_) {}\n\t}\n\tresetSinks() {\n\t\tconst iter = this.iterator;\n\t\tthis.iterator = null;\n\t\tif (iter) try {\n\t\t\titer.return();\n\t\t} catch (_) {}\n\t\tthis.canvasSink = null;\n\t\tthis.videoSampleSink = null;\n\t\tthis.currentFrame = null;\n\t\tthis.nextFrame = null;\n\t\tthis.currentSample?.close();\n\t\tthis.currentSample = null;\n\t\tthis.nextSample?.close();\n\t\tthis.nextSample = null;\n\t\tfor (const sample of this.headlessQueue) try {\n\t\t\tsample.close();\n\t\t} catch (_) {}\n\t\tthis.headlessQueue = [];\n\t\tthis.decodeBuffer = null;\n\t\tthis.iteratorStartTimestamp = -1;\n\t}\n\tonDestroy() {\n\t\tthis.resetSinks();\n\t}\n\tasync startIterator(timestampSec, fetchId) {\n\t\tif (!this.canvasSink) return;\n\t\tconst safeTimestamp = Math.max(0, Number.isFinite(timestampSec) ? timestampSec : 0);\n\t\tconst prevIterator = this.iterator;\n\t\tthis.iterator = null;\n\t\tawait this.closeIterator(prevIterator);\n\t\tif (this.currentFetchId !== fetchId || this.destroyed) return;\n\t\tthis.iterator = this.canvasSink.canvases(safeTimestamp);\n\t\tconst first = await this.iterator.next();\n\t\tif (this.currentFetchId !== fetchId || this.destroyed) return;\n\t\tthis.currentFrame = first.value ?? null;\n\t\tconst second = await this.iterator.next();\n\t\tif (this.currentFetchId !== fetchId || this.destroyed) return;\n\t\tthis.nextFrame = second.value ?? null;\n\t\tthis.iteratorStartTimestamp = safeTimestamp;\n\t}\n\tasync startIteratorHeadless(timestampSec, fetchId) {\n\t\tif (!this.videoSampleSink) return;\n\t\tconst safeTimestamp = Math.max(0, Number.isFinite(timestampSec) ? timestampSec : 0);\n\t\tconst prevIterator = this.iterator;\n\t\tthis.iterator = null;\n\t\tawait this.closeIterator(prevIterator);\n\t\tif (this.currentFetchId !== fetchId || this.destroyed) return;\n\t\tfor (const sample of this.headlessQueue) sample.close();\n\t\tthis.headlessQueue = [];\n\t\tconst seekTime = Math.max(0, safeTimestamp - .1);\n\t\tthis.iterator = this.videoSampleSink.samples(seekTime);\n\t\tawait this.fillHeadlessQueue(fetchId);\n\t\tif (this.currentFetchId !== fetchId || this.destroyed) return;\n\t\tthis.iteratorStartTimestamp = safeTimestamp;\n\t}\n\tasync getFrame(timestampSec) {\n\t\tawait this.init();\n\t\tif (this.destroyed || !this.input) return null;\n\t\tconst safeTimestamp = Math.max(0, Number.isFinite(timestampSec) ? timestampSec : 0);\n\t\tif (this.isDecoding) {\n\t\t\tif (this.nextRequest) this.nextRequest.resolve(null);\n\t\t\treturn new Promise((resolve$1, reject) => {\n\t\t\t\tthis.nextRequest = {\n\t\t\t\t\ttimestampSec: safeTimestamp,\n\t\t\t\t\tresolve: resolve$1,\n\t\t\t\t\treject\n\t\t\t\t};\n\t\t\t});\n\t\t}\n\t\treturn this.executeDecode(safeTimestamp);\n\t}\n\tasync executeDecode(timestampSec) {\n\t\tthis.isDecoding = true;\n\t\ttry {\n\t\t\treturn await this.performDecode(timestampSec);\n\t\t} finally {\n\t\t\tthis.isDecoding = false;\n\t\t\tif (this.nextRequest) {\n\t\t\t\tconst req = this.nextRequest;\n\t\t\t\tthis.nextRequest = null;\n\t\t\t\tthis.executeDecode(req.timestampSec).then(req.resolve).catch(req.reject);\n\t\t\t}\n\t\t}\n\t}\n\tasync performDecodeHeadless(safeTimestamp, fetchId) {\n\t\tif (!this.videoSampleSink) {\n\t\t\tif (this.destroyed || !this.input) return null;\n\t\t\tconst track = await this.input.getPrimaryVideoTrack();\n\t\t\tif (!track) return null;\n\t\t\tthis.videoSampleSink = new VideoSampleSink(track);\n\t\t}\n\t\tconst eps = 1e-4;\n\t\tif (!this.iterator || safeTimestamp < this.iteratorStartTimestamp - eps || this.headlessQueue.length > 0 && safeTimestamp < this.headlessQueue[0].timestamp - .01 || this.headlessQueue.length > 0 && safeTimestamp - this.headlessQueue[0].timestamp > 1) {\n\t\t\tawait this.startIteratorHeadless(safeTimestamp, fetchId);\n\t\t\tif (this.currentFetchId !== fetchId || this.destroyed || !this.input) return null;\n\t\t}\n\t\twhile (true) {\n\t\t\tawait this.fillHeadlessQueue(fetchId);\n\t\t\tif (this.currentFetchId !== fetchId || this.destroyed || !this.input) return null;\n\t\t\tif (this.headlessQueue.length >= 2) {\n\t\t\t\tif (this.headlessQueue[1].timestamp <= safeTimestamp + eps) {\n\t\t\t\t\tthis.headlessQueue.shift()?.close();\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\tconst currentSample = this.headlessQueue[0];\n\t\tif (!currentSample) return null;\n\t\tconst width = currentSample.displayWidth;\n\t\tconst height = currentSample.displayHeight;\n\t\tconst byteLength = width * height * 4;\n\t\tlet buffer = this.decodeBuffer;\n\t\tif (!buffer || buffer.length !== byteLength) {\n\t\t\tbuffer = new Uint8Array(byteLength);\n\t\t\tthis.decodeBuffer = buffer;\n\t\t}\n\t\tawait currentSample.copyTo(buffer, { format: \"RGBA\" });\n\t\tif (this.currentFetchId !== fetchId || this.destroyed || !this.input) return null;\n\t\tpremultiplyPixels(buffer);\n\t\treturn {\n\t\t\twidth,\n\t\t\theight,\n\t\t\tbuffer\n\t\t};\n\t}\n\tasync performDecodeInternal(safeTimestamp) {\n\t\tthis.currentFetchId++;\n\t\tconst fetchId = this.currentFetchId;\n\t\tif (this.isHeadless) return this.performDecodeHeadless(safeTimestamp, fetchId);\n\t\tif (!this.canvasSink) {\n\t\t\tif (this.destroyed || !this.input) return null;\n\t\t\tconst track = await this.input.getPrimaryVideoTrack();\n\t\t\tif (!track) return null;\n\t\t\tthis.canvasSink = new CanvasSink(track, {\n\t\t\t\tpoolSize: 3,\n\t\t\t\talpha: true\n\t\t\t});\n\t\t}\n\t\tconst eps = 1e-4;\n\t\tif (!this.iterator || safeTimestamp < this.iteratorStartTimestamp - eps || this.currentFrame && safeTimestamp < this.currentFrame.timestamp - .01 || this.currentFrame && safeTimestamp - this.currentFrame.timestamp > 1) {\n\t\t\tawait this.startIterator(safeTimestamp, fetchId);\n\t\t\tif (this.currentFetchId !== fetchId || this.destroyed || !this.input) return null;\n\t\t}\n\t\twhile (this.nextFrame && this.nextFrame.timestamp <= safeTimestamp + eps) {\n\t\t\tthis.currentFrame = this.nextFrame;\n\t\t\tthis.nextFrame = null;\n\t\t\tif (this.iterator) {\n\t\t\t\tconst result = await this.iterator.next();\n\t\t\t\tif (this.currentFetchId !== fetchId || this.destroyed || !this.input) return null;\n\t\t\t\tthis.nextFrame = result.value ?? null;\n\t\t\t}\n\t\t}\n\t\tif (!this.currentFrame) return null;\n\t\tconst canvas = this.currentFrame.canvas;\n\t\treturn {\n\t\t\twidth: canvas.width,\n\t\t\theight: canvas.height,\n\t\t\tcanvas\n\t\t};\n\t}\n\tasync performDecode(timestampSec) {\n\t\tconst safeTimestamp = Math.max(0, Number.isFinite(timestampSec) ? timestampSec : 0);\n\t\ttry {\n\t\t\treturn await this.performDecodeInternal(safeTimestamp);\n\t\t} catch (err) {\n\t\t\tconst errObj = err;\n\t\t\tif (errObj?.name === \"InputDisposedError\" || errObj?.message?.includes(\"disposed\") || this.destroyed || !this.input) return null;\n\t\t\tthis.resetSinks();\n\t\t\ttry {\n\t\t\t\tif (!this.isHeadless && this.input && !this.destroyed) {\n\t\t\t\t\tconst track = await this.input.getPrimaryVideoTrack();\n\t\t\t\t\tif (track && !this.destroyed) {\n\t\t\t\t\t\tthis.canvasSink = new CanvasSink(track, {\n\t\t\t\t\t\t\tpoolSize: 3,\n\t\t\t\t\t\t\talpha: true,\n\t\t\t\t\t\t\tdecoderOptions: { hardwareAcceleration: \"prefer-software\" }\n\t\t\t\t\t\t});\n\t\t\t\t\t\treturn await this.performDecodeInternal(safeTimestamp);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (_) {}\n\t\t\tthrow err;\n\t\t}\n\t}\n};\nvar AudioDecoder = class extends BaseMediaDecoder {\n\taudioSink = null;\n\tonDestroy() {\n\t\tthis.audioSink = null;\n\t}\n\tasync startIterator(timestampSec, _fetchId) {\n\t\tif (!this.audioSink) return;\n\t\tthis.iterator?.return();\n\t\tthis.iterator = this.audioSink.buffers(timestampSec);\n\t\tthis.iteratorStartTimestamp = timestampSec;\n\t}\n\tasync *getBuffers(timestampSec) {\n\t\ttry {\n\t\t\tawait this.init();\n\t\t\tif (this.destroyed || !this.input) return;\n\t\t\tif (!this.audioSink) {\n\t\t\t\tconst track = await this.input.getPrimaryAudioTrack();\n\t\t\t\tif (!track) return;\n\t\t\t\tthis.audioSink = new AudioBufferSink(track);\n\t\t\t}\n\t\t\tif (!this.iterator || Math.abs(timestampSec - this.iteratorStartTimestamp) > .05) {\n\t\t\t\tthis.currentFetchId++;\n\t\t\t\tawait this.startIterator(timestampSec, this.currentFetchId);\n\t\t\t}\n\t\t\tconst fetchId = this.currentFetchId;\n\t\t\tif (!this.iterator) return;\n\t\t\tfor await (const wrapped of this.iterator) {\n\t\t\t\tif (this.currentFetchId !== fetchId || this.destroyed || !this.input) break;\n\t\t\t\tthis.iteratorStartTimestamp = wrapped.timestamp + wrapped.duration;\n\t\t\t\tyield wrapped;\n\t\t\t}\n\t\t} catch (err) {\n\t\t\tconst errObj = err;\n\t\t\tif (errObj?.name === \"InputDisposedError\" || errObj?.message?.includes(\"disposed\") || this.destroyed || !this.input) return;\n\t\t\tthrow err;\n\t\t} finally {\n\t\t\tconst fetchId = this.currentFetchId;\n\t\t\tif (this.currentFetchId === fetchId) this.iterator = null;\n\t\t}\n\t}\n};\nvar MediaDecoderCache = class {\n\tvideoDecoders = /* @__PURE__ */ new Map();\n\taudioDecoders = /* @__PURE__ */ new Map();\n\tlastAccessed = /* @__PURE__ */ new Map();\n\t/** Rendered frames so far (see `tick`), and the frame each decoder was last used on. */\n\tticks = 0;\n\tlastTick = /* @__PURE__ */ new Map();\n\ttouchKey(key) {\n\t\tthis.lastAccessed.set(key, Date.now());\n\t\tthis.lastTick.set(key, this.ticks);\n\t}\n\tdropKey(key) {\n\t\tconst videoDecoder = this.videoDecoders.get(key);\n\t\tif (videoDecoder) {\n\t\t\ttry {\n\t\t\t\tvideoDecoder.destroy();\n\t\t\t} catch (_) {}\n\t\t\tthis.videoDecoders.delete(key);\n\t\t}\n\t\tconst audioDecoder = this.audioDecoders.get(key);\n\t\tif (audioDecoder) {\n\t\t\ttry {\n\t\t\t\taudioDecoder.destroy();\n\t\t\t} catch (_) {}\n\t\t\tthis.audioDecoders.delete(key);\n\t\t}\n\t\tthis.lastAccessed.delete(key);\n\t\tthis.lastTick.delete(key);\n\t}\n\t/**\n\t* Called once per rendered frame by headless renders. A decoder holds a\n\t* full-frame RGBA buffer and native decoder state, so one that no layer has\n\t* drawn for `idleFrames` frames (its clip ended, or a still render used a\n\t* one-off id) is released instead of waiting for the wall-clock prune.\n\t*/\n\ttick(idleFrames = 120) {\n\t\tthis.ticks++;\n\t\tfor (const [key, last] of this.lastTick) if (this.ticks - last > idleFrames) this.dropKey(key);\n\t}\n\tdestroy() {\n\t\tfor (const decoder of this.videoDecoders.values()) try {\n\t\t\tdecoder.destroy();\n\t\t} catch (_) {}\n\t\tthis.videoDecoders.clear();\n\t\tfor (const decoder of this.audioDecoders.values()) try {\n\t\t\tdecoder.destroy();\n\t\t} catch (_) {}\n\t\tthis.audioDecoders.clear();\n\t\tthis.lastAccessed.clear();\n\t\tthis.lastTick.clear();\n\t}\n\t/** Decoders currently open (for tests and diagnostics). */\n\tget size() {\n\t\treturn this.videoDecoders.size + this.audioDecoders.size;\n\t}\n\tprune(maxAgeMs = 3e5) {\n\t\tconst now = Date.now();\n\t\tfor (const [key, lastTime] of this.lastAccessed.entries()) if (now - lastTime > maxAgeMs) this.dropKey(key);\n\t}\n\tgetVideo(url, isHeadless, nodeId) {\n\t\tconst key = `${url}-${isHeadless}-${nodeId ?? \"default\"}`;\n\t\tlet decoder = this.videoDecoders.get(key);\n\t\tif (!decoder) {\n\t\t\tdecoder = new VideoDecoder(url, isHeadless);\n\t\t\tthis.videoDecoders.set(key, decoder);\n\t\t}\n\t\tthis.touchKey(key);\n\t\tthis.prune();\n\t\treturn decoder;\n\t}\n\tgetAudio(url, nodeId) {\n\t\tconst key = `${url}-${nodeId ?? \"default\"}`;\n\t\tlet decoder = this.audioDecoders.get(key);\n\t\tif (!decoder) {\n\t\t\tdecoder = new AudioDecoder(url, false);\n\t\t\tthis.audioDecoders.set(key, decoder);\n\t\t}\n\t\tthis.touchKey(key);\n\t\tthis.prune();\n\t\treturn decoder;\n\t}\n\tclearNode(nodeId) {\n\t\tconst keys = [...this.videoDecoders.keys(), ...this.audioDecoders.keys()];\n\t\tfor (const key of keys) if (key.includes(nodeId)) this.dropKey(key);\n\t}\n};\nconst mediaDecoderCache = new MediaDecoderCache();\n\n//#endregion\n//#region src/nodes/media-size.ts\nconst sizes = /* @__PURE__ */ new Map();\n/**\n* Display size of a video source, read from its container (no decode) and\n* memoized per URL. For nodes that need the source's real aspect when the\n* document never stated it (a layer built from a bare path); null when the\n* source has no video track or cannot be opened.\n*/\nfunction probeVideoSize(url) {\n\tlet size = sizes.get(url);\n\tif (!size) {\n\t\tsize = (async () => {\n\t\t\ttry {\n\t\t\t\tconst input = await inputStore.acquire(url);\n\t\t\t\ttry {\n\t\t\t\t\tconst track = await input.getPrimaryVideoTrack();\n\t\t\t\t\treturn track ? {\n\t\t\t\t\t\twidth: track.displayWidth,\n\t\t\t\t\t\theight: track.displayHeight\n\t\t\t\t\t} : null;\n\t\t\t\t} finally {\n\t\t\t\t\tinputStore.release(url);\n\t\t\t\t}\n\t\t\t} catch {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t})();\n\t\tsizes.set(url, size);\n\t}\n\treturn size;\n}\n\n//#endregion\n//#region src/nodes/signal.ts\nconst STATIC_SIGNAL_PREVIEW_SHADER = `\nstruct SignalUniforms {\n\tamplitude : f32,\n\toffset : f32,\n\tpreviewMode : f32,\n\ttime : f32,\n\twidth : f32,\n\theight : f32,\n\tamplitudeMin : f32,\n\tamplitudeMax : f32,\n\tduration : f32,\n\tpad0 : f32,\n\tpad1 : f32,\n\tpad2 : f32,\n};\n\n@group(0) @binding(0) var<uniform> u : SignalUniforms;\n@group(1) @binding(0) var signalTex : texture_2d<f32>;\n\nstruct VSOut {\n\t@builtin(position) pos : vec4<f32>,\n\t@location(0) uv : vec2<f32>,\n};\n\n@vertex fn vs(@builtin(vertex_index) vi: u32) -> VSOut {\n\tvar pos = array<vec2<f32>, 4>(\n\t\tvec2<f32>(-1.0, 1.0),\n\t\tvec2<f32>(1.0, 1.0),\n\t\tvec2<f32>(-1.0, -1.0),\n\t\tvec2<f32>(1.0, -1.0)\n\t);\n\tvar uv = array<vec2<f32>, 4>(\n\t\tvec2<f32>(0.0, 0.0),\n\t\tvec2<f32>(1.0, 0.0),\n\t\tvec2<f32>(0.0, 1.0),\n\t\tvec2<f32>(1.0, 1.0)\n\t);\n\treturn VSOut(vec4<f32>(pos[vi], 0.0, 1.0), uv[vi]);\n}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\t// Prevent compiler optimization/stripping of uniforms by reading all variables\n\tlet dummy_use = u.previewMode + u.width + u.height + u.duration;\n\tlet col_offset = vec3<f32>(dummy_use * 1e-10);\n\n\t// Dark background\n\tvar col = vec3<f32>(0.07, 0.07, 0.08) + col_offset;\n\n\tlet range = max(1e-4, u.amplitudeMax - u.amplitudeMin);\n\tlet zero_norm = clamp(select((0.0 - u.amplitudeMin) / range, 0.5, range <= 1e-4), 0.0, 1.0);\n\tlet y_zero = 0.5 - (zero_norm - 0.5) * 0.76;\n\n\t// Grid Lines\n\tlet grid_scroll = u.time * 0.1;\n\tlet uv10 = vec2<f32>(in.uv.x - grid_scroll, in.uv.y) * 10.0;\n\tlet fw10 = fwidth(uv10);\n\tlet gf = abs(fract(uv10 - 0.5) - 0.5) / fw10;\n\tlet fine = 1.0 - clamp(min(gf.x, gf.y), 0.0, 1.0);\n\tcol = mix(col, vec3<f32>(0.12, 0.12, 0.14), fine * 0.4);\n\n\tlet uv5 = vec2<f32>(in.uv.x - grid_scroll, in.uv.y) * 5.0;\n\tlet fw5 = fwidth(uv5);\n\tlet gc = abs(fract(uv5 - 0.5) - 0.5) / fw5;\n\tlet coarse = 1.0 - clamp(min(gc.x, gc.y), 0.0, 1.0);\n\tcol = mix(col, vec3<f32>(0.16, 0.16, 0.19), coarse * 0.5);\n\n\t// Zero axis\n\tlet axis_d = abs(in.uv.y - y_zero);\n\tlet axis_fw = fwidth(in.uv.y);\n\tlet axis_px = 1.0 - smoothstep(0.0, axis_fw * 1.5, axis_d);\n\n\t// Playhead position fixed at center 0.5 (where t == current frame time)\n\tlet playhead_x = 0.5;\n\n\t// Dimmer zero axis in the future (x > playhead_x)\n\tlet axis_strength = select(0.3, 0.65, in.uv.x <= playhead_x);\n\tcol = mix(col, vec3<f32>(0.24, 0.24, 0.28), axis_px * axis_strength);\n\n\t// Direct fetch without sampler: works unconditionally on all devices and rgba32float textures\n\tlet tex_dim = textureDimensions(signalTex);\n\tlet x_coord = clamp(u32(clamp(in.uv.x, 0.0, 1.0) * f32(tex_dim.x)), 0u, max(tex_dim.x, 1u) - 1u);\n\tlet raw_sample = textureLoad(signalTex, vec2<u32>(x_coord, 0u), 0);\n\tvar signal_val = raw_sample.r;\n\tif (u.previewMode == 1.0) {\n\t\tsignal_val = raw_sample.g; // beat channel\n\t} else if (u.previewMode == 2.0) {\n\t\tsignal_val = raw_sample.b; // bass channel\n\t} else if (u.previewMode == 3.0) {\n\t\tsignal_val = raw_sample.a; // energy channel\n\t}\n\n\t// Normalize the mapped signal value back to [0, 1] using min/max bounds\n\tlet norm_val = select((signal_val - u.amplitudeMin) / range, 0.5, range == 0.0);\n\n\t// Scale and offset waveform plot to fit viewport\n\tlet y_plot = 0.5 - (norm_val - 0.5) * 0.76;\n\tlet dist = abs(in.uv.y - y_plot);\n\n\t// Semi-transparent fill under the curve (more prominent in the past, very faint in the future)\n\tlet fill_lo = min(y_plot, y_zero);\n\tlet fill_hi = max(y_plot, y_zero);\n\tlet in_fill = step(fill_lo, in.uv.y) * step(in.uv.y, fill_hi);\n\tlet fill_alpha = select(0.04, 0.12, in.uv.x <= playhead_x);\n\tcol = mix(col, vec3<f32>(0.0, 0.72, 1.0), in_fill * fill_alpha);\n\n\t// Crisp Curve Line\n\tlet core_fw = fwidth(in.uv.y);\n\tlet core = 1.0 - smoothstep(0.5 * core_fw, 2.0 * core_fw, dist);\n\tlet curve_color = mix(vec3<f32>(0.3, 0.5, 0.6), vec3<f32>(0.0, 0.72, 1.0), select(0.5, 1.0, in.uv.x <= playhead_x));\n\tcol = mix(col, curve_color, core * 0.95);\n\n\t// Playhead line at playhead_x\n\tlet playhead_d = abs(in.uv.x - playhead_x);\n\tlet playhead_fw = fwidth(in.uv.x);\n\t\n\t// Soft glow around playhead\n\tlet glow = exp(-30.0 * playhead_d);\n\tcol = mix(col, vec3<f32>(1.0, 0.3, 0.2), glow * 0.2);\n\t\n\t// Sharp playhead line\n\tlet playhead_line = 1.0 - smoothstep(0.0, playhead_fw * 1.5, playhead_d);\n\tcol = mix(col, vec3<f32>(1.0, 0.35, 0.25), playhead_line * 0.95);\n\n\treturn vec4<f32>(clamp(col, vec3<f32>(0.0), vec3<f32>(1.0)), 1.0);\n}\n`;\nconst devicePipelineCache = /* @__PURE__ */ new WeakMap();\nconst uniformData = new Float32Array(12);\nfunction getDevicePipelines(device) {\n\tlet cache = devicePipelineCache.get(device);\n\tif (!cache) {\n\t\tcache = /* @__PURE__ */ new Map();\n\t\tdevicePipelineCache.set(device, cache);\n\t}\n\treturn cache;\n}\nasync function drawSignalNode(ctx, encoder, pass, props) {\n\tconst config = props.signalConfig;\n\tif (!config) return;\n\tconst cfgRecord = config;\n\tconst nodeId = typeof props.nodeId === \"string\" && props.nodeId || typeof cfgRecord.nodeId === \"string\" && cfgRecord.nodeId || \"preview\";\n\tconst frame = props.frame ?? 0;\n\tconst fps = props.fps ?? 24;\n\tconst width = props.width ?? 512;\n\tconst height = props.height ?? 512;\n\tconst elapsedMs = props.elapsedMs !== void 0 ? props.elapsedMs : frame / fps * 1e3;\n\tlet durationMs = props.durationMs !== void 0 ? props.durationMs : 0;\n\tconst cfgDuration = typeof config?.durationMs === \"number\" ? config.durationMs : 0;\n\tif (!durationMs && cfgDuration) durationMs = cfgDuration;\n\tlet durationSec = durationMs / 1e3;\n\tconst isMathNode = config.type === \"signal_math\" || Boolean(cfgRecord.operation) || cfgRecord.op === \"SignalMath\";\n\tconst isGateNode = config.type === \"gate\" || cfgRecord.op === \"SignalGate\";\n\tif (durationSec <= 0) {\n\t\tconst mathSigA = cfgRecord.signalA;\n\t\tconst gateSrcSig = cfgRecord.sourceSignal;\n\t\tconst regDuration = signalRegistry.getDuration?.(ctx.device, nodeId, props.renderId) || (isMathNode && mathSigA?.nodeId ? signalRegistry.getDuration?.(ctx.device, mathSigA.nodeId, props.renderId) : void 0) || (isGateNode && gateSrcSig?.nodeId ? signalRegistry.getDuration?.(ctx.device, gateSrcSig.nodeId, props.renderId) : void 0);\n\t\tif (regDuration && regDuration > 0) durationSec = regDuration;\n\t}\n\tconst elapsedTimeSec = elapsedMs / 1e3;\n\tawait signalRegistry.ensureAudioSourcesExtracted(ctx.device, config, fps, props.renderId);\n\tconst signalView = signalRegistry.getOrCreate2DTextureView(ctx.device, encoder, nodeId, elapsedTimeSec, durationSec, config, width, height, props.renderId, frame, fps);\n\tconst pipelines = getDevicePipelines(ctx.device);\n\tconst cacheKey = `preview_${ctx.renderer.format}`;\n\tlet pipeline = pipelines.get(cacheKey);\n\tif (!pipeline) {\n\t\tconst shaderModule = ctx.device.createShaderModule({\n\t\t\tlabel: `signal_preview_static.wgsl`,\n\t\t\tcode: STATIC_SIGNAL_PREVIEW_SHADER\n\t\t});\n\t\tpipeline = ctx.device.createRenderPipeline({\n\t\t\tlabel: `SignalPreviewPipeline_static`,\n\t\t\tlayout: \"auto\",\n\t\t\tvertex: {\n\t\t\t\tmodule: shaderModule,\n\t\t\t\tentryPoint: \"vs\"\n\t\t\t},\n\t\t\tfragment: {\n\t\t\t\tmodule: shaderModule,\n\t\t\t\tentryPoint: \"fs\",\n\t\t\t\ttargets: [{ format: ctx.renderer.format }]\n\t\t\t},\n\t\t\tprimitive: { topology: \"triangle-strip\" }\n\t\t});\n\t\tpipelines.set(cacheKey, pipeline);\n\t}\n\tlet previewModeInt = 0;\n\tif (!isMathNode && !isGateNode) {\n\t\tconst cfgObj = config;\n\t\tif (typeof cfgObj.channelIndex === \"number\") previewModeInt = cfgObj.channelIndex;\n\t\telse if (cfgObj.channel === \"beat\" || cfgObj.extractionMode === \"transient_beat\" || nodeId.endsWith(\"_beat\")) previewModeInt = 1;\n\t\telse if (cfgObj.channel === \"bass\" || cfgObj.extractionMode === \"bass\" || cfgObj.extractionMode === \"sub_bass\" || nodeId.endsWith(\"_bass\")) previewModeInt = 2;\n\t\telse if (cfgObj.channel === \"energy\" || cfgObj.extractionMode === \"rms_envelope\" || nodeId.endsWith(\"_energy\")) previewModeInt = 3;\n\t}\n\tconst calculatedStats = signalRegistry.getStats?.(nodeId) ?? (typeof cfgRecord.nodeId === \"string\" ? signalRegistry.getStats?.(cfgRecord.nodeId) : void 0);\n\tconst minVal = typeof calculatedStats?.min === \"number\" ? calculatedStats.min : typeof cfgRecord.amplitudeMin === \"number\" ? cfgRecord.amplitudeMin : (props.offset ?? 0) - (props.amplitude ?? 1);\n\tconst maxVal = typeof calculatedStats?.max === \"number\" ? calculatedStats.max : typeof cfgRecord.amplitudeMax === \"number\" ? cfgRecord.amplitudeMax : (props.offset ?? 0) + (props.amplitude ?? 1);\n\tuniformData[0] = props.amplitude ?? 1;\n\tuniformData[1] = props.offset ?? 0;\n\tuniformData[2] = previewModeInt;\n\tuniformData[3] = elapsedTimeSec;\n\tuniformData[4] = width;\n\tuniformData[5] = height;\n\tuniformData[6] = minVal;\n\tuniformData[7] = maxVal;\n\tuniformData[8] = durationSec;\n\tuniformData[9] = 0;\n\tuniformData[10] = 0;\n\tuniformData[11] = 0;\n\tconst uBuffer = ctx.renderer.getTemporaryBuffer(uniformData);\n\tconst bindGroup0 = ctx.device.createBindGroup({\n\t\tlayout: pipeline.getBindGroupLayout(0),\n\t\tentries: [{\n\t\t\tbinding: 0,\n\t\t\tresource: { buffer: uBuffer }\n\t\t}]\n\t});\n\tconst bindGroup1 = ctx.device.createBindGroup({\n\t\tlayout: pipeline.getBindGroupLayout(1),\n\t\tentries: [{\n\t\t\tbinding: 0,\n\t\t\tresource: signalView\n\t\t}]\n\t});\n\tpass.setPipeline(pipeline);\n\tpass.setBindGroup(0, bindGroup0);\n\tpass.setBindGroup(1, bindGroup1);\n\tpass.draw(4);\n}\n\n//#endregion\n//#region src/nodes/svg.ts\nvar SvgLoader = class {\n\tcache = /* @__PURE__ */ new Map();\n\tasync load(src, width, height, isHeadless) {\n\t\tconst resolvedWidth = Math.max(1, Math.ceil(width));\n\t\tconst resolvedHeight = Math.max(1, Math.ceil(height));\n\t\tconst key = `${src}-${resolvedWidth}-${resolvedHeight}-${isHeadless}`;\n\t\tlet promise = this.cache.get(key);\n\t\tif (!promise) {\n\t\t\tpromise = (async () => {\n\t\t\t\tlet text;\n\t\t\t\tif (src.startsWith(\"http://\") || src.startsWith(\"https://\") || src.startsWith(\"data:\") || !isHeadless) {\n\t\t\t\t\tconst res = await fetch(src);\n\t\t\t\t\tif (!res.ok) throw new Error(`Failed to fetch SVG: ${src}`);\n\t\t\t\t\ttext = await res.text();\n\t\t\t\t} else {\n\t\t\t\t\tlet filePath = src;\n\t\t\t\t\tif (filePath.startsWith(\"file://\")) try {\n\t\t\t\t\t\tfilePath = new URL(filePath).pathname;\n\t\t\t\t\t} catch {\n\t\t\t\t\t\tfilePath = filePath.replace(/^file:\\/\\//, \"\");\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\ttext = await (await import(\n\t\t\t\t\t\t\t/* webpackIgnore: true */\n\t\t\t\t\t\t\t\"fs/promises\"\n)).readFile(filePath, \"utf-8\");\n\t\t\t\t\t} catch {\n\t\t\t\t\t\tconst res = await fetch(src);\n\t\t\t\t\t\tif (!res.ok) throw new Error(`Failed to fetch SVG: ${src}`);\n\t\t\t\t\t\ttext = await res.text();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (isHeadless) {\n\t\t\t\t\tconst { renderAsync } = await import(\n\t\t\t\t\t\t/* webpackIgnore: true */\n\t\t\t\t\t\t\"@resvg/resvg-js\"\n);\n\t\t\t\t\tconst rendered = await renderAsync(text, { fitTo: {\n\t\t\t\t\t\tmode: \"width\",\n\t\t\t\t\t\tvalue: resolvedWidth\n\t\t\t\t\t} });\n\t\t\t\t\treturn {\n\t\t\t\t\t\twidth: rendered.width,\n\t\t\t\t\t\theight: rendered.height,\n\t\t\t\t\t\tbuffer: new Uint8Array(rendered.pixels)\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tconst blob = new Blob([text], { type: \"image/svg+xml\" });\n\t\t\t\tconst url = URL.createObjectURL(blob);\n\t\t\t\tconst img = new Image();\n\t\t\t\tawait new Promise((resolve$1, reject) => {\n\t\t\t\t\timg.onload = () => resolve$1();\n\t\t\t\t\timg.onerror = () => reject(/* @__PURE__ */ new Error(`Failed to load SVG image: ${src}`));\n\t\t\t\t\timg.src = url;\n\t\t\t\t});\n\t\t\t\tconst canvas = new OffscreenCanvas(resolvedWidth, resolvedHeight);\n\t\t\t\tcanvas.getContext(\"2d\").drawImage(img, 0, 0, resolvedWidth, resolvedHeight);\n\t\t\t\tURL.revokeObjectURL(url);\n\t\t\t\treturn {\n\t\t\t\t\twidth: resolvedWidth,\n\t\t\t\t\theight: resolvedHeight,\n\t\t\t\t\tbitmap: await createImageBitmap(canvas)\n\t\t\t\t};\n\t\t\t})();\n\t\t\tthis.cache.set(key, promise);\n\t\t\tpromise.catch(() => this.cache.delete(key));\n\t\t}\n\t\treturn promise;\n\t}\n};\nconst svgLoader = new SvgLoader();\nasync function drawSvgNode(ctx, pass, props) {\n\tconst resolvedWidth = Math.max(1, Math.ceil(props.dstRect.width));\n\tconst resolvedHeight = Math.max(1, Math.ceil(props.dstRect.height));\n\tconst cacheKey = `${props.src}-${resolvedWidth}-${resolvedHeight}`;\n\tlet tex = textureCache.acquire(cacheKey);\n\tif (!tex) try {\n\t\tconst data = await svgLoader.load(props.src, resolvedWidth, resolvedHeight, props.isHeadless ?? false);\n\t\ttex = textureCache.acquire(cacheKey);\n\t\tif (!tex) {\n\t\t\ttex = createImageTexture(ctx.device, data);\n\t\t\ttextureCache.set(cacheKey, tex, ctx.device);\n\t\t}\n\t} catch (err) {\n\t\tconsole.error(\"Failed to load SVG texture:\", err);\n\t\treturn;\n\t}\n\tctx.renderer.drawTexture(pass, tex, props.dstRect, {\n\t\topacity: props.opacity ?? 1,\n\t\ttransform: props.matrix\n\t});\n\ttextureCache.release(cacheKey);\n}\n\n//#endregion\n//#region src/nodes/video.ts\n/**\n* Tracks the most recently successfully uploaded texture key per node.\n* This is the key to YouTube-like behaviour: while the next frame is being\n* decoded we keep showing the last good frame instead of going blank.\n*/\nconst lastGoodFrameKey = /* @__PURE__ */ new Map();\n/**\n* Tracks the active source URL per node so we can invalidate and clear\n* lastGoodFrameKey when the input video changes.\n*/\nconst lastSourceUrl = /* @__PURE__ */ new Map();\n/**\n* Tracks in-flight decode promises per node so we never kick off a second\n* decode for the same timestamp while one is already running.\n*/\nconst pendingDecodes = /* @__PURE__ */ new Map();\n/**\n* Uploads a decoded frame into the GPU texture cache.\n* Returns the newly created GPUTexture, or null on failure.\n*/\nfunction uploadFrameToTexture(ctx, frameKey, frame, isHeadless) {\n\tif (isHeadless) {\n\t\tif (!frame.buffer) return null;\n\t\tconst tex = textureCache.create(frameKey, ctx.device, frame.width, frame.height);\n\t\tctx.device.queue.writeTexture({ texture: tex }, frame.buffer, { bytesPerRow: frame.width * 4 }, [frame.width, frame.height]);\n\t\treturn tex;\n\t} else {\n\t\tif (!frame.canvas) return null;\n\t\tconst tex = textureCache.create(frameKey, ctx.device, frame.width, frame.height);\n\t\tctx.device.queue.copyExternalImageToTexture({\n\t\t\tsource: frame.canvas,\n\t\t\tflipY: false\n\t\t}, {\n\t\t\ttexture: tex,\n\t\t\tpremultipliedAlpha: true\n\t\t}, [frame.width, frame.height]);\n\t\treturn tex;\n\t}\n}\n/**\n* Updates lastGoodFrameKey for a given node and immediately evicts the previous\n* frame texture from textureCache to prevent VRAM accumulation during export.\n*/\nfunction updateLastGoodFrame(nodeId, newKey, device) {\n\tconst prevKey = lastGoodFrameKey.get(nodeId);\n\tif (prevKey && prevKey !== newKey) {\n\t\ttextureCache.evict(prevKey, device);\n\t\ttextureCache.activeKeys.delete(prevKey);\n\t}\n\tlastGoodFrameKey.set(nodeId, newKey);\n\ttextureCache.activeKeys.add(newKey);\n}\nconst drawVideoNode = async (ctx, pass, props) => {\n\tconst isHeadless = props.isHeadless ?? (typeof window === \"undefined\" || Boolean(globalThis.__IS_HEADLESS_RENDERER__));\n\ttry {\n\t\tconst nodeId = props.nodeId ?? \"default\";\n\t\tconst currentSourceUrl = props.sourceUrl;\n\t\tif (lastSourceUrl.get(nodeId) !== currentSourceUrl) {\n\t\t\tlastSourceUrl.set(nodeId, currentSourceUrl);\n\t\t\tconst prevKey = lastGoodFrameKey.get(nodeId);\n\t\t\tif (prevKey) {\n\t\t\t\ttextureCache.evict(prevKey, ctx.device);\n\t\t\t\tlastGoodFrameKey.delete(nodeId);\n\t\t\t}\n\t\t}\n\t\tconst decoder = mediaDecoderCache.getVideo(props.sourceUrl, isHeadless, nodeId);\n\t\tconst exactKey = props.frameKey;\n\t\tlet exactTex = textureCache.acquire(exactKey);\n\t\tconst isPlaying = props.isPlaying ?? true;\n\t\tconst shouldWait = isHeadless || props.forceWait || !isPlaying;\n\t\tconst isFirstFrame = !lastGoodFrameKey.has(nodeId);\n\t\tif (!exactTex) {\n\t\t\tif (!pendingDecodes.has(exactKey)) {\n\t\t\t\tconst delayHandle = `${nodeId}-${Math.random()}`;\n\t\t\t\tconst delays = globalThis.__GATEWAI_DELAYS__ || /* @__PURE__ */ new Set();\n\t\t\t\tglobalThis.__GATEWAI_DELAYS__ = delays;\n\t\t\t\tdelays.add(delayHandle);\n\t\t\t\tconst safeTimestampSec = Math.max(0, Number.isFinite(props.timestampSec) ? props.timestampSec : 0);\n\t\t\t\tconst decodePromise = (async () => {\n\t\t\t\t\tconst frame = await decoder.getFrame(safeTimestampSec);\n\t\t\t\t\tif (!frame) return;\n\t\t\t\t\tif (textureCache.acquire(exactKey)) {\n\t\t\t\t\t\ttextureCache.release(exactKey);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tif (uploadFrameToTexture(ctx, exactKey, frame, isHeadless)) updateLastGoodFrame(nodeId, exactKey, ctx.device);\n\t\t\t\t})().finally(() => {\n\t\t\t\t\tpendingDecodes.delete(exactKey);\n\t\t\t\t\tdelays.delete(delayHandle);\n\t\t\t\t});\n\t\t\t\tdecodePromise.catch((err) => {\n\t\t\t\t\tif (!shouldWait && !isFirstFrame) console.error(\"[VideoNode] decode error:\", err);\n\t\t\t\t});\n\t\t\t\tpendingDecodes.set(exactKey, decodePromise);\n\t\t\t\tif (isFirstFrame || shouldWait) {\n\t\t\t\t\tawait decodePromise;\n\t\t\t\t\texactTex = textureCache.acquire(exactKey);\n\t\t\t\t}\n\t\t\t} else if (isFirstFrame || shouldWait) {\n\t\t\t\tawait pendingDecodes.get(exactKey);\n\t\t\t\texactTex = textureCache.acquire(exactKey);\n\t\t\t}\n\t\t} else updateLastGoodFrame(nodeId, exactKey, ctx.device);\n\t\tlet activeKey = null;\n\t\tlet texToDraw = null;\n\t\tif (exactTex) {\n\t\t\ttexToDraw = exactTex;\n\t\t\tactiveKey = exactKey;\n\t\t} else if (lastGoodFrameKey.has(nodeId)) {\n\t\t\tconst fallbackKey = lastGoodFrameKey.get(nodeId);\n\t\t\tconst fallbackTex = textureCache.acquire(fallbackKey);\n\t\t\tif (fallbackTex) {\n\t\t\t\ttexToDraw = fallbackTex;\n\t\t\t\tactiveKey = fallbackKey;\n\t\t\t}\n\t\t}\n\t\tif (texToDraw) ctx.renderer.drawTexture(pass, texToDraw, props.dstRect, {\n\t\t\topacity: props.opacity,\n\t\t\ttransform: props.matrix\n\t\t});\n\t\tif (activeKey) textureCache.release(activeKey);\n\t} catch (err) {\n\t\tif (isHeadless) throw err;\n\t\tconsole.error(\"[VideoNode] drawVideoNode error:\", err);\n\t}\n};\n/**\n* Call this when a video node is removed from the scene so we don't leak\n* stale entries in the fallback map.\n*/\nconst clearVideoNodeState = (nodeId, device) => {\n\tconst keysToDelete = [];\n\tfor (const key of lastGoodFrameKey.keys()) if (key === nodeId || key.startsWith(`${nodeId}-`)) keysToDelete.push(key);\n\tfor (const key of keysToDelete) {\n\t\tconst prevKey = lastGoodFrameKey.get(key);\n\t\tif (prevKey) {\n\t\t\ttextureCache.evict(prevKey, device);\n\t\t\ttextureCache.activeKeys.delete(prevKey);\n\t\t}\n\t\tlastGoodFrameKey.delete(key);\n\t\tlastSourceUrl.delete(key);\n\t}\n};\nconst clearAllVideoCache = (device) => {\n\tfor (const key of lastGoodFrameKey.values()) {\n\t\ttextureCache.evict(key, device);\n\t\ttextureCache.activeKeys.delete(key);\n\t}\n\tlastGoodFrameKey.clear();\n\tlastSourceUrl.clear();\n\tpendingDecodes.clear();\n};\n\n//#endregion\n//#region src/renderer2d/buffer-pool.ts\nvar BufferPool = class {\n\tbuffers = [];\n\tindex = 0;\n\tsize;\n\tusage;\n\tconstructor(size, usage) {\n\t\tthis.size = size;\n\t\tthis.usage = usage;\n\t}\n\tgetBuffer(device, data) {\n\t\tconst requiredSize = Math.max(this.size, data.byteLength);\n\t\tif (this.index >= this.buffers.length) {\n\t\t\tconst buf$1 = device.createBuffer({\n\t\t\t\tsize: requiredSize,\n\t\t\t\tusage: this.usage\n\t\t\t});\n\t\t\tthis.buffers.push(buf$1);\n\t\t}\n\t\tlet buf = this.buffers[this.index];\n\t\tif (buf.size < requiredSize) {\n\t\t\tconst oldBuf = buf;\n\t\t\tdevice.queue.onSubmittedWorkDone().then(() => {\n\t\t\t\ttry {\n\t\t\t\t\toldBuf.destroy();\n\t\t\t\t} catch {}\n\t\t\t});\n\t\t\tbuf = device.createBuffer({\n\t\t\t\tsize: requiredSize,\n\t\t\t\tusage: this.usage\n\t\t\t});\n\t\t\tthis.buffers[this.index] = buf;\n\t\t}\n\t\tthis.index++;\n\t\tdevice.queue.writeBuffer(buf, 0, data);\n\t\treturn buf;\n\t}\n\treset() {\n\t\tthis.index = 0;\n\t}\n\tdestroy() {\n\t\tfor (const buf of this.buffers) buf.destroy();\n\t\tthis.buffers = [];\n\t}\n};\n\n//#endregion\n//#region src/shaders/composite.ts\nconst compositeWgsl = `\nstruct CompositeUniforms {\n\tblendMode : u32,\n\tpadding1 : u32,\n\tpadding2 : u32,\n\tpadding3 : u32,\n};\n\n@group(0) @binding(0) var<uniform> u : CompositeUniforms;\n@group(1) @binding(0) var baseTex : texture_2d<f32>;\n@group(1) @binding(1) var overlayTex : texture_2d<f32>;\n@group(1) @binding(2) var samp : sampler;\n\nstruct VSOut {\n\t@builtin(position) pos : vec4<f32>,\n\t@location(0) uv : vec2<f32>,\n};\n\n@vertex fn vs(@builtin(vertex_index) vi: u32) -> VSOut {\n\tvar pos = array<vec2<f32>, 4>(\n\t\tvec2<f32>(-1.0, 1.0),\n\t\tvec2<f32>(1.0, 1.0),\n\t\tvec2<f32>(-1.0, -1.0),\n\t\tvec2<f32>(1.0, -1.0)\n\t);\n\tvar uv = array<vec2<f32>, 4>(\n\t\tvec2<f32>(0.0, 0.0),\n\t\tvec2<f32>(1.0, 0.0),\n\t\tvec2<f32>(0.0, 1.0),\n\t\tvec2<f32>(1.0, 1.0)\n\t);\n\treturn VSOut(vec4<f32>(pos[vi], 0.0, 1.0), uv[vi]);\n}\n\nfn lum(c: vec3<f32>) -> f32 {\n\treturn 0.3 * c.r + 0.59 * c.g + 0.11 * c.b;\n}\n\nfn clip_color(c: vec3<f32>) -> vec3<f32> {\n\tlet l = lum(c);\n\tlet n = min(min(c.r, c.g), c.b);\n\tlet x = max(max(c.r, c.g), c.b);\n\tvar res = c;\n\tif (n < 0.0) {\n\t\tres = l + (((res - l) * l) / (l - n));\n\t}\n\tif (x > 1.0) {\n\t\tres = l + (((res - l) * (1.0 - l)) / (x - l));\n\t}\n\treturn res;\n}\n\nfn set_lum(c: vec3<f32>, l: f32) -> vec3<f32> {\n\tlet diff = l - lum(c);\n\treturn clip_color(c + vec3<f32>(diff));\n}\n\nfn sat(c: vec3<f32>) -> f32 {\n\treturn max(max(c.r, c.g), c.b) - min(min(c.r, c.g), c.b);\n}\n\nfn set_sat(c: vec3<f32>, s: f32) -> vec3<f32> {\n\tlet c_min = min(min(c.r, c.g), c.b);\n\tlet c_max = max(max(c.r, c.g), c.b);\n\tif (c_max <= c_min) {\n\t\treturn vec3<f32>(0.0);\n\t}\n\treturn (c - vec3<f32>(c_min)) * s / (c_max - c_min);\n}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet d = textureSample(baseTex, samp, in.uv);\n\tlet s = textureSample(overlayTex, samp, in.uv);\n\tlet sa = s.a;\n\tlet da = d.a;\n\t\n\tswitch (u.blendMode) {\n\t\tcase 16u: { return d * sa; } // mask-in / destination-in\n\t\tcase 17u: { return d * (1.0 - sa); } // mask-out / destination-out\n\t\tcase 18u: { return s * da; } // source-in\n\t\tcase 19u: { return s * (1.0 - da); } // source-out\n\t\tcase 20u: { return s * da + d * (1.0 - sa); } // source-atop\n\t\tcase 21u: { return d + s * (1.0 - da); } // destination-over\n\t\tcase 22u: { return d * sa + s * (1.0 - da); } // destination-atop\n\t\tcase 23u: { return s + d; } // lighter\n\t\tcase 24u: { return s; } // copy\n\t\tcase 25u: { return s * (1.0 - da) + d * (1.0 - sa); } // xor\n\t\t// Luma mattes: the overlay's brightness (premultiplied, so transparent = black) masks the base.\n\t\tcase 26u: { return d * clamp(dot(s.rgb, vec3<f32>(0.2126, 0.7152, 0.0722)), 0.0, 1.0); } // luma-in\n\t\tcase 27u: { return d * (1.0 - clamp(dot(s.rgb, vec3<f32>(0.2126, 0.7152, 0.0722)), 0.0, 1.0)); } // luma-out\n\t\tdefault: {\n\t\t\tif (sa <= 0.0) { return d; }\n\t\t\tif (da <= 0.0) { return s; }\n\t\t}\n\t}\n\n\tlet s_rgb = select(s.rgb / sa, vec3<f32>(0.0), sa < 0.001);\n\tlet d_rgb = select(d.rgb / da, vec3<f32>(0.0), da < 0.001);\n\n\tvar b_rgb = s_rgb;\n\n\tswitch (u.blendMode) {\n\t\tcase 1u: { b_rgb = s_rgb * d_rgb; } // multiply\n\t\tcase 2u: { b_rgb = s_rgb + d_rgb - s_rgb * d_rgb; } // screen\n\t\tcase 3u: { // overlay\n\t\t\tb_rgb = select(1.0 - 2.0 * (1.0 - s_rgb) * (1.0 - d_rgb), 2.0 * s_rgb * d_rgb, d_rgb < vec3<f32>(0.5));\n\t\t}\n\t\tcase 4u: { b_rgb = min(s_rgb, d_rgb); } // darken\n\t\tcase 5u: { b_rgb = max(s_rgb, d_rgb); } // lighten\n\t\tcase 6u: { // color-dodge\n\t\t\tb_rgb = select(min(d_rgb / (1.0 - s_rgb), vec3<f32>(1.0)), vec3<f32>(0.0), s_rgb == vec3<f32>(1.0));\n\t\t}\n\t\tcase 7u: { // color-burn\n\t\t\tb_rgb = select(1.0 - min((1.0 - d_rgb) / s_rgb, vec3<f32>(1.0)), vec3<f32>(1.0), s_rgb == vec3<f32>(0.0));\n\t\t}\n\t\tcase 8u: { // hard-light\n\t\t\tb_rgb = select(1.0 - 2.0 * (1.0 - s_rgb) * (1.0 - d_rgb), 2.0 * s_rgb * d_rgb, s_rgb < vec3<f32>(0.5));\n\t\t}\n\t\tcase 9u: { // soft-light\n\t\t\tb_rgb = select(\n\t\t\t\td_rgb + (2.0 * s_rgb - 1.0) * (sqrt(d_rgb) - d_rgb),\n\t\t\t\td_rgb - (1.0 - 2.0 * s_rgb) * d_rgb * (1.0 - d_rgb),\n\t\t\t\ts_rgb <= vec3<f32>(0.5)\n\t\t\t);\n\t\t}\n\t\tcase 10u: { b_rgb = abs(d_rgb - s_rgb); } // difference\n\t\tcase 11u: { b_rgb = s_rgb + d_rgb - 2.0 * s_rgb * d_rgb; } // exclusion\n\t\tcase 12u: { b_rgb = set_lum(set_sat(s_rgb, sat(d_rgb)), lum(d_rgb)); } // hue\n\t\tcase 13u: { b_rgb = set_lum(set_sat(d_rgb, sat(s_rgb)), lum(d_rgb)); } // saturation\n\t\tcase 14u: { b_rgb = set_lum(s_rgb, lum(d_rgb)); } // color\n\t\tcase 15u: { b_rgb = set_lum(d_rgb, lum(s_rgb)); } // luminosity\n\t\tcase 16u: { return d * s.a; } // mask-in\n\t\tcase 17u: { return d * (1.0 - s.a); } // mask-out\n\t\tdefault: { b_rgb = s_rgb; } // normal\n\t}\n\n\tlet out_a = sa + da * (1.0 - sa);\n\tlet out_rgb = (1.0 - da) * s.rgb + (1.0 - sa) * d.rgb + sa * da * b_rgb;\n\n\treturn vec4<f32>(out_rgb, out_a);\n}\n`;\n\n//#endregion\n//#region src/renderer2d/uniform-bind-group-cache.ts\n/**\n* Caches GPUBindGroups for uniform buffers, keyed by GPUBuffer identity.\n*\n* BufferPool reuses the same GPUBuffer objects across frames (via reset()),\n* so bind groups remain valid. Uses WeakMap so entries are garbage-collected\n* when buffers are destroyed.\n*/\nvar UniformBindGroupCache = class {\n\tcache = /* @__PURE__ */ new WeakMap();\n\tgetBindGroup(device, layout, buffer) {\n\t\tlet bg = this.cache.get(buffer);\n\t\tif (!bg) {\n\t\t\tbg = device.createBindGroup({\n\t\t\t\tlayout,\n\t\t\t\tentries: [{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: { buffer }\n\t\t\t\t}]\n\t\t\t});\n\t\t\tthis.cache.set(buffer, bg);\n\t\t}\n\t\treturn bg;\n\t}\n\tdestroy() {\n\t\tthis.cache = /* @__PURE__ */ new WeakMap();\n\t}\n};\n\n//#endregion\n//#region src/renderer2d/effect-pipeline.ts\nconst motionBlur2DWgsl = `\nstruct MotionBlur2DUniforms {\n vel: vec2<f32>,\n _pad: vec2<f32>,\n shutterFraction: f32,\n samples: f32,\n viewportWidth: f32,\n viewportHeight: f32,\n};\n\n@group(0) @binding(0) var<uniform> u: MotionBlur2DUniforms;\n@group(1) @binding(0) var sourceTexture: texture_2d<f32>;\n@group(1) @binding(1) var colorSampler: sampler;\n\n@vertex\nfn vs(@builtin(vertex_index) vertexIndex: u32) -> @builtin(position) vec4<f32> {\n var pos = array<vec2<f32>, 3>(\n vec2<f32>(-1.0, -3.0),\n vec2<f32>( 3.0, 1.0),\n vec2<f32>(-1.0, 1.0)\n );\n return vec4<f32>(pos[vertexIndex], 0.0, 1.0);\n}\n\n@fragment\nfn fs(@builtin(position) pos: vec4<f32>) -> @location(0) vec4<f32> {\n let uv = pos.xy / vec2<f32>(u.viewportWidth, u.viewportHeight);\n let sampleCount = u32(max(u.samples, 1.0));\n let velUV = u.vel * u.shutterFraction;\n let halfSamples = f32(sampleCount) * 0.5;\n \n var accum = vec4<f32>(0.0);\n var totalWeight = 0.0;\n \n for (var i = 0u; i < sampleCount; i = i + 1u) {\n let t = (f32(i) - halfSamples) / max(halfSamples, 1.0);\n let sampleUV = clamp(uv + velUV * t, vec2<f32>(0.0), vec2<f32>(1.0));\n let w = exp(-2.5 * t * t);\n accum += textureSampleLevel(sourceTexture, colorSampler, sampleUV, 0.0) * w;\n totalWeight += w;\n }\n \n return accum / max(totalWeight, 0.0001);\n}\n`;\nvar TexturePool = class {\n\ttextures = [];\n\ttexturesByKey = /* @__PURE__ */ new Map();\n\tindex = 0;\n\tgetTexture(device, width, height, format, exclude) {\n\t\tconst excludeSet = new Set(Array.isArray(exclude) ? exclude : exclude ? [exclude] : []);\n\t\tconst key = `${width}x${height}:${format}`;\n\t\tconst pool = this.texturesByKey.get(key);\n\t\tif (pool) for (let i = 0; i < pool.length; i++) {\n\t\t\tconst tex$1 = pool[i];\n\t\t\tif (!excludeSet.has(tex$1)) {\n\t\t\t\tpool.splice(i, 1);\n\t\t\t\tpool.unshift(tex$1);\n\t\t\t\tconst mainIdx = this.textures.indexOf(tex$1);\n\t\t\t\tif (mainIdx >= this.index) {\n\t\t\t\t\tthis.textures.splice(mainIdx, 1);\n\t\t\t\t\tthis.textures.splice(this.index, 0, tex$1);\n\t\t\t\t\tthis.index++;\n\t\t\t\t}\n\t\t\t\treturn tex$1;\n\t\t\t}\n\t\t}\n\t\tconst tex = device.createTexture({\n\t\t\tsize: [width, height],\n\t\t\tformat,\n\t\t\tusage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_SRC\n\t\t});\n\t\tif (!this.texturesByKey.has(key)) this.texturesByKey.set(key, []);\n\t\tthis.texturesByKey.get(key).unshift(tex);\n\t\tthis.textures.splice(this.index, 0, tex);\n\t\tthis.index++;\n\t\treturn tex;\n\t}\n\treset() {\n\t\tthis.index = 0;\n\t}\n\tdestroy() {\n\t\tfor (const tex of this.textures) tex.destroy();\n\t\tthis.textures = [];\n\t\tthis.texturesByKey.clear();\n\t\tthis.index = 0;\n\t}\n};\nconst BLEND_MODE_MAP = {\n\tnormal: 0,\n\t\"source-over\": 0,\n\tmultiply: 1,\n\tscreen: 2,\n\toverlay: 3,\n\tdarken: 4,\n\tlighten: 5,\n\t\"color-dodge\": 6,\n\t\"color-burn\": 7,\n\t\"hard-light\": 8,\n\t\"soft-light\": 9,\n\tdifference: 10,\n\texclusion: 11,\n\thue: 12,\n\tsaturation: 13,\n\tcolor: 14,\n\tluminosity: 15,\n\t\"mask-in\": 16,\n\t\"destination-in\": 16,\n\t\"mask-out\": 17,\n\t\"destination-out\": 17,\n\t\"source-in\": 18,\n\t\"source-out\": 19,\n\t\"source-atop\": 20,\n\t\"destination-over\": 21,\n\t\"destination-atop\": 22,\n\tlighter: 23,\n\tcopy: 24,\n\txor: 25,\n\t\"luma-in\": 26,\n\t\"luma-out\": 27\n};\nvar EffectPipeline = class {\n\tdevice;\n\tcompositeUniformLayout;\n\tdualTextureLayout;\n\tmotionBlurUniformLayout;\n\tsingleTextureLayout;\n\tcompositePipeline;\n\tmotionBlurPipeline;\n\tcompositePool;\n\tmotionBlurPool;\n\ttexturePool;\n\tcompositeUniformBindGroupCache = new UniformBindGroupCache();\n\tmotionBlurUniformBindGroupCache = new UniformBindGroupCache();\n\tcompositeData = new Uint32Array(4);\n\tmotionBlurData = new Float32Array(8);\n\tconstructor(device, format) {\n\t\tthis.device = device;\n\t\tthis.compositePool = new BufferPool(1024, GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST);\n\t\tthis.motionBlurPool = new BufferPool(1024, GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST);\n\t\tthis.texturePool = new TexturePool();\n\t\tthis.compositeUniformLayout = device.createBindGroupLayout({ entries: [{\n\t\t\tbinding: 0,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\tbuffer: { type: \"uniform\" }\n\t\t}] });\n\t\tthis.dualTextureLayout = device.createBindGroupLayout({ entries: [\n\t\t\t{\n\t\t\t\tbinding: 0,\n\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\ttexture: { sampleType: \"float\" }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 1,\n\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\ttexture: { sampleType: \"float\" }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 2,\n\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\tsampler: { type: \"filtering\" }\n\t\t\t}\n\t\t] });\n\t\tthis.motionBlurUniformLayout = device.createBindGroupLayout({ entries: [{\n\t\t\tbinding: 0,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\tbuffer: { type: \"uniform\" }\n\t\t}] });\n\t\tthis.singleTextureLayout = device.createBindGroupLayout({ entries: [{\n\t\t\tbinding: 0,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\ttexture: { sampleType: \"float\" }\n\t\t}, {\n\t\t\tbinding: 1,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\tsampler: { type: \"filtering\" }\n\t\t}] });\n\t\tconst compositePipelineLayout = device.createPipelineLayout({ bindGroupLayouts: [this.compositeUniformLayout, this.dualTextureLayout] });\n\t\tconst compositeModule = device.createShaderModule({\n\t\t\tlabel: \"composite.wgsl\",\n\t\t\tcode: compositeWgsl\n\t\t});\n\t\tthis.compositePipeline = device.createRenderPipeline({\n\t\t\tlabel: \"CompositePipeline\",\n\t\t\tlayout: compositePipelineLayout,\n\t\t\tvertex: {\n\t\t\t\tmodule: compositeModule,\n\t\t\t\tentryPoint: \"vs\"\n\t\t\t},\n\t\t\tfragment: {\n\t\t\t\tmodule: compositeModule,\n\t\t\t\tentryPoint: \"fs\",\n\t\t\t\ttargets: [{ format }]\n\t\t\t},\n\t\t\tprimitive: { topology: \"triangle-strip\" }\n\t\t});\n\t\tconst motionBlurPipelineLayout = device.createPipelineLayout({ bindGroupLayouts: [this.motionBlurUniformLayout, this.singleTextureLayout] });\n\t\tconst motionBlurModule = device.createShaderModule({\n\t\t\tlabel: \"motion-blur-2d.wgsl\",\n\t\t\tcode: motionBlur2DWgsl\n\t\t});\n\t\tthis.motionBlurPipeline = device.createRenderPipeline({\n\t\t\tlabel: \"MotionBlurPipeline\",\n\t\t\tlayout: motionBlurPipelineLayout,\n\t\t\tvertex: {\n\t\t\t\tmodule: motionBlurModule,\n\t\t\t\tentryPoint: \"vs\"\n\t\t\t},\n\t\t\tfragment: {\n\t\t\t\tmodule: motionBlurModule,\n\t\t\t\tentryPoint: \"fs\",\n\t\t\t\ttargets: [{ format }]\n\t\t\t},\n\t\t\tprimitive: { topology: \"triangle-list\" }\n\t\t});\n\t}\n\tresetPools() {\n\t\tthis.compositePool.reset();\n\t\tthis.motionBlurPool.reset();\n\t\tthis.texturePool.reset();\n\t}\n\tgetTexture(device, width, height, format, exclude) {\n\t\treturn this.texturePool.getTexture(device, width, height, format, exclude);\n\t}\n\tgetBuffer(device, data) {\n\t\treturn this.compositePool.getBuffer(device, data);\n\t}\n\tcomposite(encoder, bindGroupCache, samplerCache, baseTex, overlayTex, mode, format, exclude) {\n\t\tconst sampler = samplerCache.getSampler(this.device);\n\t\tconst combinedExclude = [baseTex, overlayTex];\n\t\tif (exclude) if (Array.isArray(exclude)) combinedExclude.push(...exclude);\n\t\telse combinedExclude.push(exclude);\n\t\tconst outTex = this.texturePool.getTexture(this.device, baseTex.width, baseTex.height, format, combinedExclude);\n\t\tthis.compositeData[0] = BLEND_MODE_MAP[mode] ?? 0;\n\t\tconst buffer = this.compositePool.getBuffer(this.device, this.compositeData);\n\t\tconst pass = encoder.beginRenderPass({ colorAttachments: [{\n\t\t\tview: outTex.createView(),\n\t\t\tloadOp: \"clear\",\n\t\t\tstoreOp: \"store\",\n\t\t\tclearValue: {\n\t\t\t\tr: 0,\n\t\t\t\tg: 0,\n\t\t\t\tb: 0,\n\t\t\t\ta: 0\n\t\t\t}\n\t\t}] });\n\t\tpass.setPipeline(this.compositePipeline);\n\t\tconst uniformBindGroup = this.compositeUniformBindGroupCache.getBindGroup(this.device, this.compositeUniformLayout, buffer);\n\t\tpass.setBindGroup(0, uniformBindGroup);\n\t\tconst textureBindGroup = bindGroupCache.getCompositeBindGroup(this.device, this.dualTextureLayout, baseTex, overlayTex, sampler);\n\t\tpass.setBindGroup(1, textureBindGroup);\n\t\tpass.draw(4);\n\t\tpass.end();\n\t\treturn outTex;\n\t}\n\tapplyMotionBlur(encoder, bindGroupCache, samplerCache, sourceTex, vx, vy, shutterAngle = 180, samples = 16, format, exclude) {\n\t\tif (Math.abs(vx) < .1 && Math.abs(vy) < .1 || shutterAngle <= 0) return sourceTex;\n\t\tconst sampler = samplerCache.getSampler(this.device);\n\t\tconst combinedExclude = [sourceTex];\n\t\tif (exclude) if (Array.isArray(exclude)) combinedExclude.push(...exclude);\n\t\telse combinedExclude.push(exclude);\n\t\tconst outTex = this.texturePool.getTexture(this.device, sourceTex.width, sourceTex.height, format, combinedExclude);\n\t\tthis.motionBlurData[0] = vx / sourceTex.width;\n\t\tthis.motionBlurData[1] = vy / sourceTex.height;\n\t\tthis.motionBlurData[2] = 0;\n\t\tthis.motionBlurData[3] = 0;\n\t\tthis.motionBlurData[4] = shutterAngle / 360;\n\t\tthis.motionBlurData[5] = samples;\n\t\tthis.motionBlurData[6] = sourceTex.width;\n\t\tthis.motionBlurData[7] = sourceTex.height;\n\t\tconst buffer = this.motionBlurPool.getBuffer(this.device, this.motionBlurData);\n\t\tconst pass = encoder.beginRenderPass({ colorAttachments: [{\n\t\t\tview: outTex.createView(),\n\t\t\tloadOp: \"clear\",\n\t\t\tstoreOp: \"store\",\n\t\t\tclearValue: {\n\t\t\t\tr: 0,\n\t\t\t\tg: 0,\n\t\t\t\tb: 0,\n\t\t\t\ta: 0\n\t\t\t}\n\t\t}] });\n\t\tpass.setPipeline(this.motionBlurPipeline);\n\t\tconst uniformBindGroup = this.motionBlurUniformBindGroupCache.getBindGroup(this.device, this.motionBlurUniformLayout, buffer);\n\t\tpass.setBindGroup(0, uniformBindGroup);\n\t\tpass.setBindGroup(1, bindGroupCache.getBindGroup(this.device, this.singleTextureLayout, sourceTex, sampler));\n\t\tpass.draw(3);\n\t\tpass.end();\n\t\treturn outTex;\n\t}\n\tdestroy() {\n\t\tthis.compositePool.destroy();\n\t\tthis.motionBlurPool.destroy();\n\t\tthis.texturePool.destroy();\n\t\tthis.compositeUniformBindGroupCache.destroy();\n\t\tthis.motionBlurUniformBindGroupCache.destroy();\n\t}\n};\n\n//#endregion\n//#region src/shaders/slug.ts\n/**\n* Slug glyph coverage (Lengyel, \"GPU-Centered Font Rendering Directly from\n* Glyph Outlines\", 2017), shared by the 2D and 3D text shaders. Coverage is\n* computed per screen pixel from the outline itself, so it stays crisp at any\n* scale or projection as long as the caller supplies the pixel footprint.\n*\n* The including shader declares `curvesTex : texture_2d<f32>` and\n* `bandsTex : texture_2d<u32>`.\n*/\nconst slugCoverageWgsl = `\nstruct SlugGlyph {\n\tglyphScale : vec2<f32>,\n\tbandScale : vec2<f32>,\n\tbandMax : vec2<u32>,\n\tbandsTexCoords : vec2<u32>,\n};\n\nconst epsilon : f32 = 0.0001;\n\n// One quadratic curve against the ray from the sample toward +x. Returns the\n// signed coverage (x) and the ray's weight (y): how close a crossing passes the\n// sample, in pixels. A ray running along an edge never crosses it near the\n// sample, weighs nothing, and so cannot impose its hard 0/1 answer.\nfn TraceRayCurveH(p1: vec2<f32>, p2: vec2<f32>, p3: vec2<f32>, pixelsPerEm: f32) -> vec2<f32> {\n\tif (max(max(p1.x, p2.x), p3.x) * pixelsPerEm < -0.5) {\n\t\treturn vec2<f32>(0.0);\n\t}\n\n\tvar cond1: u32 = 0u;\n\tif (p1.y > 0.0) { cond1 = 2u; }\n\tvar cond2: u32 = 0u;\n\tif (p2.y > 0.0) { cond2 = 4u; }\n\tvar cond3: u32 = 0u;\n\tif (p3.y > 0.0) { cond3 = 8u; }\n\n\tlet shift = cond1 + cond2 + cond3;\n\tlet code = (0x2E74u >> shift) & 3u;\n\tif (code == 0u) {\n\t\treturn vec2<f32>(0.0);\n\t}\n\n\tlet a = p1 - p2 * 2.0 + p3;\n\tlet b = p1 - p2;\n\tlet c = p1.y;\n\tlet ayr = 1.0 / a.y;\n\tlet d = sqrt(max(b.y * b.y - a.y * c, 0.0));\n\tvar t1 = (b.y - d) * ayr;\n\tvar t2 = (b.y + d) * ayr;\n\n\tif (abs(a.y) < epsilon) {\n\t\tlet val = c / (2.0 * b.y);\n\t\tt1 = val;\n\t\tt2 = val;\n\t}\n\n\tvar result = vec2<f32>(0.0);\n\n\tif ((code & 1u) != 0u) {\n\t\tlet x1 = ((a.x * t1 - b.x * 2.0) * t1 + p1.x) * pixelsPerEm;\n\t\tresult.x = result.x + clamp(x1 + 0.5, 0.0, 1.0);\n\t\tresult.y = max(result.y, clamp(1.0 - abs(x1) * 2.0, 0.0, 1.0));\n\t}\n\n\tif (code > 1u) {\n\t\tlet x2 = ((a.x * t2 - b.x * 2.0) * t2 + p1.x) * pixelsPerEm;\n\t\tresult.x = result.x - clamp(x2 + 0.5, 0.0, 1.0);\n\t\tresult.y = max(result.y, clamp(1.0 - abs(x2) * 2.0, 0.0, 1.0));\n\t}\n\n\treturn result;\n}\n\nfn TraceRayBandH(bandData: vec2<u32>, pixelsPerEm: f32, glyphScale: vec2<f32>, uv: vec2<f32>) -> vec2<f32> {\n\tvar coverage = vec2<f32>(0.0);\n\tfor (var curve: u32 = 0u; curve < bandData.x; curve = curve + 1u) {\n\t\tlet curveOffset = bandData.y + curve;\n\t\tlet coord = vec2<i32>(i32(curveOffset & 0xFFFu), i32(curveOffset >> 12u));\n\t\tlet curveLoc = vec2<i32>(textureLoad(bandsTex, coord, 0).xy);\n\n\t\tlet p12 = textureLoad(curvesTex, curveLoc, 0) / vec4<f32>(glyphScale, glyphScale) - vec4<f32>(uv, uv);\n\t\tlet p3 = textureLoad(curvesTex, vec2<i32>(curveLoc.x + 1, curveLoc.y), 0).xy / glyphScale - uv;\n\n\t\tlet max_x = max(max(p12.x, p12.z), p3.x);\n\t\tif (max_x * pixelsPerEm < -0.5) {\n\t\t\tbreak;\n\t\t}\n\n\t\tlet hit = TraceRayCurveH(p12.xy, p12.zw, p3.xy, pixelsPerEm);\n\t\tcoverage = vec2<f32>(coverage.x + hit.x, max(coverage.y, hit.y));\n\t}\n\treturn coverage;\n}\n\nfn TraceRayBandV(bandData: vec2<u32>, pixelsPerEm: f32, glyphScale: vec2<f32>, uv: vec2<f32>) -> vec2<f32> {\n\tvar coverage = vec2<f32>(0.0);\n\tfor (var curve: u32 = 0u; curve < bandData.x; curve = curve + 1u) {\n\t\tlet curveOffset = bandData.y + curve;\n\t\tlet coord = vec2<i32>(i32(curveOffset & 0xFFFu), i32(curveOffset >> 12u));\n\t\tlet curveLoc = vec2<i32>(textureLoad(bandsTex, coord, 0).xy);\n\n\t\tlet p12 = textureLoad(curvesTex, curveLoc, 0) / vec4<f32>(glyphScale, glyphScale) - vec4<f32>(uv, uv);\n\t\tlet p3 = textureLoad(curvesTex, vec2<i32>(curveLoc.x + 1, curveLoc.y), 0).xy / glyphScale - uv;\n\n\t\tlet max_y = max(max(p12.y, p12.w), p3.y);\n\t\tif (max_y * pixelsPerEm < -0.5) {\n\t\t\tbreak;\n\t\t}\n\n\t\tlet hit = TraceRayCurveH(p12.yx, p12.wz, p3.yx, pixelsPerEm);\n\t\tcoverage = vec2<f32>(coverage.x + hit.x, max(coverage.y, hit.y));\n\t}\n\treturn coverage;\n}\n\nfn sampleSlugCoverage(sampleUV: vec2<f32>, g: SlugGlyph, pixelsPerEm: vec2<f32>) -> f32 {\n\tlet bandIndex = vec2<u32>(clamp(vec2<u32>(sampleUV * g.bandScale), vec2<u32>(0u), g.bandMax));\n\tlet hBandOffset = g.bandsTexCoords.y * 4096u + g.bandsTexCoords.x + bandIndex.y;\n\tlet hCoord = vec2<i32>(i32(hBandOffset & 0xFFFu), i32(hBandOffset >> 12u));\n\tlet hBandData = textureLoad(bandsTex, hCoord, 0).xy;\n\n\tlet vBandOffset = g.bandsTexCoords.y * 4096u + g.bandsTexCoords.x + g.bandMax.y + 1u + bandIndex.x;\n\tlet vCoord = vec2<i32>(i32(vBandOffset & 0xFFFu), i32(vBandOffset >> 12u));\n\tlet vBandData = textureLoad(bandsTex, vCoord, 0).xy;\n\n\tlet x = TraceRayBandH(hBandData, pixelsPerEm.x, g.glyphScale, sampleUV);\n\tlet y = TraceRayBandV(vBandData, pixelsPerEm.y, g.glyphScale, sampleUV);\n\n\t// Each ray's coverage counts by how near it crosses an edge; where neither\n\t// does (deep inside or outside), the smaller answer is the safe one.\n\tlet covX = min(abs(x.x), 1.0);\n\tlet covY = min(abs(y.x), 1.0);\n\tlet weighted = (covX * x.y + covY * y.y) / max(x.y + y.y, 1.0 / 65536.0);\n\treturn clamp(max(weighted, min(covX, covY)), 0.0, 1.0);\n}\n\n// The glyph's premultiplied colour at uv; alpha 0 means discard. fw is the\n// pixel footprint in glyph uv, |d/dx| + |d/dy| (fwidth): the caller takes it in\n// uniform control flow. On a turned or foreshortened glyph it is wider than one\n// pixel along an axis, so that axis gets the soft ramp a box filter gives.\nfn shadeSlugGlyph(\n\tuv: vec2<f32>,\n\tfw: vec2<f32>,\n\tfragXY: vec2<f32>,\n\tg: SlugGlyph,\n\tcolor: vec4<f32>,\n\topacity: f32,\n\tblurAmount: f32,\n\tchromaticShift: f32,\n\tdissolveProgress: f32,\n) -> vec4<f32> {\n\tif (dissolveProgress > 0.001) {\n\t\tlet pCoord = uv * 320.0 + fragXY * 2.3;\n\t\tlet pNoise = fract(sin(dot(pCoord, vec2<f32>(12.9898, 78.233))) * 43758.5453);\n\t\tif (pNoise < dissolveProgress) {\n\t\t\treturn vec4<f32>(0.0);\n\t\t}\n\t}\n\n\tlet pixelsPerEm = max(vec2<f32>(1.0) / fw, vec2<f32>(1.0));\n\tlet ppem = min(pixelsPerEm.x, pixelsPerEm.y);\n\tlet gain = mix(1.0, 1.25, clamp((48.0 - ppem) / 36.0, 0.0, 1.0));\n\n\tif (abs(chromaticShift) > 0.001) {\n\t\tlet shiftUV = vec2<f32>(chromaticShift * 0.002, 0.0);\n\t\tlet rCov = sampleSlugCoverage(uv + shiftUV, g, pixelsPerEm);\n\t\tlet gCov = sampleSlugCoverage(uv, g, pixelsPerEm);\n\t\tlet bCov = sampleSlugCoverage(uv - shiftUV, g, pixelsPerEm);\n\n\t\tlet maxCov = max(max(rCov, gCov), bCov);\n\t\tlet cov = pow(clamp(maxCov, 0.0, 1.0), 1.0 / gain);\n\t\tlet alpha = color.a * opacity * cov;\n\t\tlet finalR = color.r * pow(clamp(rCov, 0.0, 1.0), 1.0 / gain);\n\t\tlet finalG = color.g * pow(clamp(gCov, 0.0, 1.0), 1.0 / gain);\n\t\tlet finalB = color.b * pow(clamp(bCov, 0.0, 1.0), 1.0 / gain);\n\t\treturn vec4<f32>(vec3<f32>(finalR, finalG, finalB) * (opacity * color.a), alpha);\n\t}\n\n\tvar slugAlpha = 0.0;\n\tif (blurAmount > 0.01) {\n\t\tlet step = fw * blurAmount * 0.3;\n\t\tfor (var y_offset = -1.0; y_offset <= 1.0; y_offset = y_offset + 1.0) {\n\t\t\tfor (var x_offset = -1.0; x_offset <= 1.0; x_offset = x_offset + 1.0) {\n\t\t\t\tlet offset = vec2<f32>(x_offset, y_offset) * step;\n\t\t\t\tslugAlpha = slugAlpha + sampleSlugCoverage(uv + offset, g, pixelsPerEm);\n\t\t\t}\n\t\t}\n\t\tslugAlpha = slugAlpha / 9.0;\n\t} else {\n\t\tslugAlpha = sampleSlugCoverage(uv, g, pixelsPerEm);\n\t}\n\n\tlet cov = pow(clamp(slugAlpha, 0.0, 1.0), 1.0 / gain);\n\tlet alpha = color.a * opacity * cov;\n\treturn vec4<f32>(color.rgb * alpha, alpha);\n}\n`;\nconst slugWgsl = `\nstruct Uniforms {\n\ttransformCol0 : vec4<f32>,\n\ttransformCol1 : vec4<f32>,\n\ttransformCol2 : vec4<f32>,\n\tparams : vec4<f32>, // x = opacity, y = surfaceWidth, z = surfaceHeight, w = slant\n};\n\n@group(0) @binding(0) var<uniform> u : Uniforms;\n@group(1) @binding(0) var curvesTex : texture_2d<f32>;\n@group(1) @binding(1) var bandsTex : texture_2d<u32>;\n\n${slugCoverageWgsl}\n\nstruct VSOut {\n\t@builtin(position) pos : vec4<f32>,\n\t@location(0) uv : vec2<f32>,\n\t@location(1) @interpolate(flat) glyphScale : vec2<f32>,\n\t@location(2) @interpolate(flat) bandScale : vec2<f32>,\n\t@location(3) @interpolate(flat) bandMax : vec2<u32>,\n\t@location(4) @interpolate(flat) bandsTexCoords : vec2<u32>,\n\t@location(5) color : vec4<f32>,\n\t@location(6) @interpolate(flat) blurAmount : f32,\n\t@location(7) @interpolate(flat) chromaticShift : f32,\n\t@location(8) @interpolate(flat) dissolveProgress : f32,\n\t@location(9) @interpolate(flat) vfxParam : f32,\n};\n\nvar<private> pos : array<vec2<f32>, 6> = array<vec2<f32>, 6>(\n\tvec2<f32>(-1.0, -1.0),\n\tvec2<f32>(1.0, 1.0),\n\tvec2<f32>(-1.0, 1.0),\n\tvec2<f32>(-1.0, -1.0),\n\tvec2<f32>(1.0, -1.0),\n\tvec2<f32>(1.0, 1.0)\n);\n\n@vertex fn vs(\n\t@builtin(vertex_index) vertex_index : u32,\n\t@location(0) aScaleBias : vec4<f32>,\n\t@location(1) aGlyphBandScale : vec4<f32>,\n\t@location(2) aBandMaxTexCoords : vec4<f32>,\n\t@location(3) aAnim : vec4<f32>, // x = rotation, y = scale_mult, zw = translation\n\t@location(4) aColor : vec4<f32>,\n\t@location(5) aExtraParams : vec4<f32>,\n) -> VSOut {\n\tlet quad_pos = pos[vertex_index];\n\n\tlet angle = aAnim.x;\n\tlet scale_mult = aAnim.y;\n\tlet translation = aAnim.zw;\n\n\t// Dilate the glyph's quad by one screen pixel each side (Slug's dynamic\n\t// dilation): coverage ramps half a pixel past the outline, and pixels whose\n\t// centres fall just outside the bounding box must still be shaded, or a\n\t// turned glyph's edges are cut into a staircase.\n\tlet transform2 = mat2x2<f32>(u.transformCol0.xy, u.transformCol1.xy);\n\tlet pixelsPerUnit = sqrt(max(abs(determinant(transform2)), 1e-8));\n\tlet halfSize = max(abs(aScaleBias.xy * scale_mult), vec2<f32>(1e-4));\n\tlet grow = vec2<f32>(1.0) + (1.0 / pixelsPerUnit) / halfSize;\n\tlet uv = vec2<f32>(\n\t\tquad_pos.x * grow.x * 0.5 + 0.5,\n\t\t1.0 - (quad_pos.y * grow.y * 0.5 + 0.5),\n\t);\n\n\tlet local_pos = quad_pos * aScaleBias.xy * scale_mult * grow;\n\tlet slant = u.params.w;\n\tlet slanted_pos = vec2<f32>(\n\t\tlocal_pos.x - local_pos.y * slant,\n\t\tlocal_pos.y\n\t);\n\tlet rotated = vec2<f32>(\n\t\tslanted_pos.x * cos(angle) - slanted_pos.y * sin(angle),\n\t\tslanted_pos.x * sin(angle) + slanted_pos.y * cos(angle)\n\t);\n\n\tlet transformed = rotated + aScaleBias.zw + translation;\n\n\tlet transform = mat3x3<f32>(u.transformCol0.xyz, u.transformCol1.xyz, u.transformCol2.xyz);\n\tlet p = transform * vec3<f32>(transformed, 1.0);\n\n\tlet surfaceSize = u.params.yz;\n\tlet clipX = (p.x / surfaceSize.x) * 2.0 - 1.0;\n\tlet clipY = 1.0 - (p.y / surfaceSize.y) * 2.0;\n\n\tvar out : VSOut;\n\tout.pos = vec4<f32>(clipX, clipY, 0.0, 1.0);\n\tout.uv = uv;\n\tout.glyphScale = aGlyphBandScale.xy;\n\tout.bandScale = aGlyphBandScale.zw;\n\tout.bandMax = vec2<u32>(aBandMaxTexCoords.xy);\n\tout.bandsTexCoords = vec2<u32>(aBandMaxTexCoords.zw);\n\tout.color = aColor;\n\tout.blurAmount = aExtraParams.x;\n\tout.chromaticShift = aExtraParams.y;\n\tout.dissolveProgress = aExtraParams.z;\n\tout.vfxParam = aExtraParams.w;\n\n\treturn out;\n}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet fw = max(abs(dpdx(in.uv)) + abs(dpdy(in.uv)), vec2<f32>(0.000001));\n\tlet glyph = SlugGlyph(in.glyphScale, in.bandScale, in.bandMax, in.bandsTexCoords);\n\tlet shaded = shadeSlugGlyph(\n\t\tin.uv,\n\t\tfw,\n\t\tin.pos.xy,\n\t\tglyph,\n\t\tin.color,\n\t\tu.params.x,\n\t\tin.blurAmount,\n\t\tin.chromaticShift,\n\t\tin.dissolveProgress,\n\t);\n\tif (shaded.a < 0.0001) {\n\t\tdiscard;\n\t}\n\treturn shaded;\n}\n`;\n\n//#endregion\n//#region src/slug/slug-pipeline.ts\nvar SlugPipeline = class {\n\tdevice;\n\tpipeline;\n\tuniformLayout;\n\ttextureLayout;\n\tuniformPool;\n\tinstancePool;\n\tuniformBindGroupCache = new UniformBindGroupCache();\n\tuniformData = new Float32Array(16);\n\tcaptured = null;\n\tconstructor(device, format) {\n\t\tthis.device = device;\n\t\tthis.uniformPool = new BufferPool(1024, GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST);\n\t\tthis.instancePool = new BufferPool(131072, GPUBufferUsage.VERTEX | GPUBufferUsage.COPY_DST);\n\t\tconst module = device.createShaderModule({\n\t\t\tlabel: \"slug.wgsl\",\n\t\t\tcode: slugWgsl\n\t\t});\n\t\tthis.uniformLayout = device.createBindGroupLayout({\n\t\t\tlabel: \"SlugUniformLayout\",\n\t\t\tentries: [{\n\t\t\t\tbinding: 0,\n\t\t\t\tvisibility: GPUShaderStage.VERTEX | GPUShaderStage.FRAGMENT,\n\t\t\t\tbuffer: { type: \"uniform\" }\n\t\t\t}]\n\t\t});\n\t\tthis.textureLayout = device.createBindGroupLayout({\n\t\t\tlabel: \"SlugTextureLayout\",\n\t\t\tentries: [{\n\t\t\t\tbinding: 0,\n\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\ttexture: { sampleType: \"unfilterable-float\" }\n\t\t\t}, {\n\t\t\t\tbinding: 1,\n\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\ttexture: { sampleType: \"uint\" }\n\t\t\t}]\n\t\t});\n\t\tthis.pipeline = device.createRenderPipeline({\n\t\t\tlabel: \"SlugPipeline\",\n\t\t\tlayout: device.createPipelineLayout({ bindGroupLayouts: [this.uniformLayout, this.textureLayout] }),\n\t\t\tvertex: {\n\t\t\t\tmodule,\n\t\t\t\tentryPoint: \"vs\",\n\t\t\t\tbuffers: [{\n\t\t\t\t\tarrayStride: 96,\n\t\t\t\t\tstepMode: \"instance\",\n\t\t\t\t\tattributes: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tshaderLocation: 0,\n\t\t\t\t\t\t\toffset: 0,\n\t\t\t\t\t\t\tformat: \"float32x4\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tshaderLocation: 1,\n\t\t\t\t\t\t\toffset: 16,\n\t\t\t\t\t\t\tformat: \"float32x4\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tshaderLocation: 2,\n\t\t\t\t\t\t\toffset: 32,\n\t\t\t\t\t\t\tformat: \"float32x4\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tshaderLocation: 3,\n\t\t\t\t\t\t\toffset: 48,\n\t\t\t\t\t\t\tformat: \"float32x4\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tshaderLocation: 4,\n\t\t\t\t\t\t\toffset: 64,\n\t\t\t\t\t\t\tformat: \"float32x4\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tshaderLocation: 5,\n\t\t\t\t\t\t\toffset: 80,\n\t\t\t\t\t\t\tformat: \"float32x4\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}]\n\t\t\t},\n\t\t\tfragment: {\n\t\t\t\tmodule,\n\t\t\t\tentryPoint: \"fs\",\n\t\t\t\ttargets: [{\n\t\t\t\t\tformat,\n\t\t\t\t\tblend: {\n\t\t\t\t\t\tcolor: {\n\t\t\t\t\t\t\tsrcFactor: \"one\",\n\t\t\t\t\t\t\tdstFactor: \"one-minus-src-alpha\",\n\t\t\t\t\t\t\toperation: \"add\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\talpha: {\n\t\t\t\t\t\t\tsrcFactor: \"one\",\n\t\t\t\t\t\t\tdstFactor: \"one-minus-src-alpha\",\n\t\t\t\t\t\t\toperation: \"add\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}]\n\t\t\t},\n\t\t\tprimitive: { topology: \"triangle-list\" }\n\t\t});\n\t}\n\tresetPools() {\n\t\tthis.uniformPool.reset();\n\t\tthis.instancePool.reset();\n\t}\n\t/**\n\t* Record glyph draws instead of issuing them, until endCapture: a 3D text\n\t* layer hands its glyphs to the 3D pass rather than rasterizing them.\n\t*/\n\tbeginCapture() {\n\t\tthis.captured = [];\n\t}\n\tendCapture() {\n\t\tconst batches = this.captured ?? [];\n\t\tthis.captured = null;\n\t\treturn batches;\n\t}\n\tdraw(pass, transformStack, font, instanceData, instanceCount, _color, surfaceWidth, surfaceHeight, opts) {\n\t\tif (instanceCount === 0) return;\n\t\tif (!font.curvesTex || !font.bandsTex) return;\n\t\tconst opacity = opts?.opacity ?? 1;\n\t\tif (this.captured) {\n\t\t\tlet m = transformStack.getCurrent();\n\t\t\tif (opts?.transform) m = m.multiply(opts.transform);\n\t\t\tthis.captured.push({\n\t\t\t\tfont,\n\t\t\t\tinstances: instanceData.slice(0, instanceCount * 24),\n\t\t\t\tinstanceCount,\n\t\t\t\topacity,\n\t\t\t\tslant: opts?.customParam ?? 0,\n\t\t\t\ttransform: [\n\t\t\t\t\tm.a,\n\t\t\t\t\tm.b,\n\t\t\t\t\tm.c,\n\t\t\t\t\tm.d,\n\t\t\t\t\tm.e,\n\t\t\t\t\tm.f\n\t\t\t\t]\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t\ttransformStack.packIntoBuffer(this.uniformData, opacity, surfaceWidth, surfaceHeight, opts?.transform, opts?.customParam);\n\t\tthis.encode(pass, font, instanceData, instanceCount);\n\t}\n\t/** Draw captured batches into a 2D pass, with the transforms they were captured under. */\n\tdrawBatches(pass, batches, surfaceWidth, surfaceHeight) {\n\t\tfor (const batch of batches) {\n\t\t\tconst [a, b, c, d, e, f] = batch.transform;\n\t\t\tthis.uniformData.set([\n\t\t\t\ta,\n\t\t\t\tb,\n\t\t\t\t0,\n\t\t\t\t0,\n\t\t\t\tc,\n\t\t\t\td,\n\t\t\t\t0,\n\t\t\t\t0,\n\t\t\t\te,\n\t\t\t\tf,\n\t\t\t\t1,\n\t\t\t\t0,\n\t\t\t\tbatch.opacity,\n\t\t\t\tsurfaceWidth,\n\t\t\t\tsurfaceHeight,\n\t\t\t\tbatch.slant\n\t\t\t]);\n\t\t\tthis.encode(pass, batch.font, batch.instances, batch.instanceCount);\n\t\t}\n\t}\n\tencode(pass, font, instanceData, instanceCount) {\n\t\tif (!font.curvesTex || !font.bandsTex) return;\n\t\tconst uniformBuffer = this.uniformPool.getBuffer(this.device, this.uniformData);\n\t\tconst instanceBuffer = this.instancePool.getBuffer(this.device, instanceData);\n\t\tconst textureBindGroup = this.device.createBindGroup({\n\t\t\tlayout: this.textureLayout,\n\t\t\tentries: [{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: font.curvesTex.createView()\n\t\t\t}, {\n\t\t\t\tbinding: 1,\n\t\t\t\tresource: font.bandsTex.createView()\n\t\t\t}]\n\t\t});\n\t\tpass.setPipeline(this.pipeline);\n\t\tconst uniformBindGroup = this.uniformBindGroupCache.getBindGroup(this.device, this.uniformLayout, uniformBuffer);\n\t\tpass.setBindGroup(0, uniformBindGroup);\n\t\tpass.setBindGroup(1, textureBindGroup);\n\t\tpass.setVertexBuffer(0, instanceBuffer);\n\t\tpass.draw(6, instanceCount);\n\t}\n\tdestroy() {\n\t\tthis.uniformPool.destroy();\n\t\tthis.instancePool.destroy();\n\t\tthis.uniformBindGroupCache.destroy();\n\t}\n};\n\n//#endregion\n//#region src/renderer2d/bind-group-cache.ts\nvar BindGroupCache = class {\n\tcache = /* @__PURE__ */ new WeakMap();\n\tdualCache = /* @__PURE__ */ new WeakMap();\n\tgetBindGroup(device, layout, texture, sampler) {\n\t\tlet layoutMap = this.cache.get(texture);\n\t\tif (!layoutMap) {\n\t\t\tlayoutMap = /* @__PURE__ */ new Map();\n\t\t\tthis.cache.set(texture, layoutMap);\n\t\t}\n\t\tlet bg = layoutMap.get(layout);\n\t\tif (!bg) {\n\t\t\tbg = device.createBindGroup({\n\t\t\t\tlayout,\n\t\t\t\tentries: [{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: texture.createView()\n\t\t\t\t}, {\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: sampler\n\t\t\t\t}]\n\t\t\t});\n\t\t\tlayoutMap.set(layout, bg);\n\t\t}\n\t\treturn bg;\n\t}\n\tgetCompositeBindGroup(device, layout, baseTexture, overlayTexture, sampler) {\n\t\tlet overlayWeakMap = this.dualCache.get(baseTexture);\n\t\tif (!overlayWeakMap) {\n\t\t\toverlayWeakMap = /* @__PURE__ */ new WeakMap();\n\t\t\tthis.dualCache.set(baseTexture, overlayWeakMap);\n\t\t}\n\t\tlet layoutMap = overlayWeakMap.get(overlayTexture);\n\t\tif (!layoutMap) {\n\t\t\tlayoutMap = /* @__PURE__ */ new Map();\n\t\t\toverlayWeakMap.set(overlayTexture, layoutMap);\n\t\t}\n\t\tlet bg = layoutMap.get(layout);\n\t\tif (!bg) {\n\t\t\tbg = device.createBindGroup({\n\t\t\t\tlayout,\n\t\t\t\tentries: [\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 0,\n\t\t\t\t\t\tresource: baseTexture.createView()\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 1,\n\t\t\t\t\t\tresource: overlayTexture.createView()\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 2,\n\t\t\t\t\t\tresource: sampler\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t});\n\t\t\tlayoutMap.set(layout, bg);\n\t\t}\n\t\treturn bg;\n\t}\n\tdestroy() {\n\t\tthis.cache = /* @__PURE__ */ new WeakMap();\n\t\tthis.dualCache = /* @__PURE__ */ new WeakMap();\n\t}\n};\n\n//#endregion\n//#region src/renderer2d/clip-stack.ts\nvar ClipStack = class {\n\tscissorStack = [];\n\tstencilStack = [];\n\tpushScissor(rect, surfaceWidth, surfaceHeight) {\n\t\tthis.scissorStack.push({\n\t\t\trect,\n\t\t\tsurfaceWidth,\n\t\t\tsurfaceHeight\n\t\t});\n\t}\n\tpopScissor() {\n\t\tif (this.scissorStack.length > 0) this.scissorStack.pop();\n\t}\n\tsaveScissors() {\n\t\treturn [...this.scissorStack];\n\t}\n\trestoreScissors(entries) {\n\t\tthis.scissorStack = [...entries];\n\t}\n\tclearScissors() {\n\t\tthis.scissorStack = [];\n\t}\n\tgetCurrentScissor(surfaceWidth, surfaceHeight) {\n\t\tconst entry = this.scissorStack[this.scissorStack.length - 1];\n\t\tif (!entry) return void 0;\n\t\tif (surfaceWidth !== void 0 && surfaceHeight !== void 0 && entry.surfaceWidth !== void 0 && entry.surfaceHeight !== void 0 && entry.surfaceWidth !== 0 && entry.surfaceHeight !== 0 && (entry.surfaceWidth !== surfaceWidth || entry.surfaceHeight !== surfaceHeight)) return;\n\t\treturn entry.rect;\n\t}\n\tpushStencilClip(path$1) {\n\t\tthis.stencilStack.push(path$1);\n\t}\n\tpopStencilClip() {\n\t\tif (this.stencilStack.length > 0) this.stencilStack.pop();\n\t}\n\tgetCurrentStencil() {\n\t\treturn this.stencilStack[this.stencilStack.length - 1];\n\t}\n\tapplyScissorToPass(pass, surfaceWidth, surfaceHeight) {\n\t\tconst current = this.getCurrentScissor(surfaceWidth, surfaceHeight);\n\t\tif (!current) {\n\t\t\tpass.setScissorRect(0, 0, Math.max(1, Math.floor(surfaceWidth)), Math.max(1, Math.floor(surfaceHeight)));\n\t\t\treturn;\n\t\t}\n\t\tconst x = Math.max(0, Math.floor(current.x));\n\t\tconst y = Math.max(0, Math.floor(current.y));\n\t\tconst right = Math.min(surfaceWidth, Math.ceil(current.x + current.width));\n\t\tconst bottom = Math.min(surfaceHeight, Math.ceil(current.y + current.height));\n\t\tconst width = Math.max(0, right - x);\n\t\tconst height = Math.max(0, bottom - y);\n\t\tif (!Number.isFinite(x) || !Number.isFinite(y) || !Number.isFinite(width) || !Number.isFinite(height) || width <= 0 || height <= 0) pass.setScissorRect(0, 0, 1, 1);\n\t\telse {\n\t\t\tconst clampedWidth = Math.min(width, Math.max(0, surfaceWidth - x));\n\t\t\tconst clampedHeight = Math.min(height, Math.max(0, surfaceHeight - y));\n\t\t\tif (clampedWidth <= 0 || clampedHeight <= 0) pass.setScissorRect(0, 0, 1, 1);\n\t\t\telse pass.setScissorRect(Math.floor(x), Math.floor(y), Math.floor(clampedWidth), Math.floor(clampedHeight));\n\t\t}\n\t}\n\tdestroy() {\n\t\tthis.scissorStack = [];\n\t\tthis.stencilStack = [];\n\t}\n};\n\n//#endregion\n//#region src/renderer2d/path-geometry.ts\n/**\n* Sample a cubic bezier curve into linear segments.\n*/\nfunction sampleCubicBezier(p0, p1, p2, p3, steps = 24) {\n\tconst segments = [];\n\tlet prev = p0;\n\tfor (let i = 1; i <= steps; i++) {\n\t\tconst t = i / steps;\n\t\tconst mt = 1 - t;\n\t\tconst mt2 = mt * mt;\n\t\tconst mt3 = mt2 * mt;\n\t\tconst t2 = t * t;\n\t\tconst t3 = t2 * t;\n\t\tconst curr = {\n\t\t\tx: mt3 * p0.x + 3 * mt2 * t * p1.x + 3 * mt * t2 * p2.x + t3 * p3.x,\n\t\t\ty: mt3 * p0.y + 3 * mt2 * t * p1.y + 3 * mt * t2 * p2.y + t3 * p3.y\n\t\t};\n\t\tsegments.push({\n\t\t\tp0: prev,\n\t\t\tp1: curr\n\t\t});\n\t\tprev = curr;\n\t}\n\treturn segments;\n}\n/**\n* Sample a quadratic bezier curve into linear segments.\n*/\nfunction sampleQuadraticBezier(p0, p1, p2, steps = 16) {\n\tconst segments = [];\n\tlet prev = p0;\n\tfor (let i = 1; i <= steps; i++) {\n\t\tconst t = i / steps;\n\t\tconst mt = 1 - t;\n\t\tconst mt2 = mt * mt;\n\t\tconst t2 = t * t;\n\t\tconst curr = {\n\t\t\tx: mt2 * p0.x + 2 * mt * t * p1.x + t2 * p2.x,\n\t\t\ty: mt2 * p0.y + 2 * mt * t * p1.y + t2 * p2.y\n\t\t};\n\t\tsegments.push({\n\t\t\tp0: prev,\n\t\t\tp1: curr\n\t\t});\n\t\tprev = curr;\n\t}\n\treturn segments;\n}\n/**\n* Sample an SVG elliptical arc (endpoint parameterization) into line segments.\n* Converts to centre parameterization per SVG 1.1 F.6.5, scaling the radii up\n* when they are too small to span the endpoints (F.6.6).\n*/\nfunction sampleSvgArc(p0, rxIn, ryIn, rotationDeg, largeArc, sweep, p1) {\n\tlet rx = Math.abs(rxIn);\n\tlet ry = Math.abs(ryIn);\n\tif (rx < 1e-9 || ry < 1e-9) return [{\n\t\tp0,\n\t\tp1\n\t}];\n\tif (Math.hypot(p1.x - p0.x, p1.y - p0.y) < 1e-9) return [];\n\tconst phi = rotationDeg * Math.PI / 180;\n\tconst cos = Math.cos(phi);\n\tconst sin = Math.sin(phi);\n\tconst dx = (p0.x - p1.x) / 2;\n\tconst dy = (p0.y - p1.y) / 2;\n\tconst x1 = cos * dx + sin * dy;\n\tconst y1 = -sin * dx + cos * dy;\n\tconst lambda = x1 * x1 / (rx * rx) + y1 * y1 / (ry * ry);\n\tif (lambda > 1) {\n\t\trx *= Math.sqrt(lambda);\n\t\try *= Math.sqrt(lambda);\n\t}\n\tconst num = rx * rx * ry * ry - rx * rx * y1 * y1 - ry * ry * x1 * x1;\n\tconst den = rx * rx * y1 * y1 + ry * ry * x1 * x1;\n\tconst coef = (largeArc === sweep ? -1 : 1) * Math.sqrt(Math.max(0, num / den));\n\tconst cxp = coef * rx * y1 / ry;\n\tconst cyp = -coef * ry * x1 / rx;\n\tconst cx = cos * cxp - sin * cyp + (p0.x + p1.x) / 2;\n\tconst cy = sin * cxp + cos * cyp + (p0.y + p1.y) / 2;\n\tconst angle = (ux, uy, vx, vy) => Math.atan2(ux * vy - uy * vx, ux * vx + uy * vy);\n\tconst theta1 = angle(1, 0, (x1 - cxp) / rx, (y1 - cyp) / ry);\n\tlet delta = angle((x1 - cxp) / rx, (y1 - cyp) / ry, (-x1 - cxp) / rx, (-y1 - cyp) / ry);\n\tif (!sweep && delta > 0) delta -= 2 * Math.PI;\n\tif (sweep && delta < 0) delta += 2 * Math.PI;\n\tconst steps = Math.max(4, Math.ceil(Math.abs(delta) / (2 * Math.PI) * 64));\n\tconst segments = [];\n\tlet prev = p0;\n\tfor (let i = 1; i <= steps; i++) {\n\t\tconst t = theta1 + delta * i / steps;\n\t\tconst ex = rx * Math.cos(t);\n\t\tconst ey = ry * Math.sin(t);\n\t\tconst curr = i === steps ? p1 : {\n\t\t\tx: cos * ex - sin * ey + cx,\n\t\t\ty: sin * ex + cos * ey + cy\n\t\t};\n\t\tsegments.push({\n\t\t\tp0: prev,\n\t\t\tp1: curr\n\t\t});\n\t\tprev = curr;\n\t}\n\treturn segments;\n}\n/**\n* Parse an SVG path string (M, L, H, V, C, S, Q, T, A, Z) into line segments.\n*/\nfunction parseSvgPathToSegments(d) {\n\tconst segments = [];\n\tif (!d || typeof d !== \"string\") return segments;\n\tconst tokens = [];\n\tconst regex = /([a-df-z])|([-+]?(?:\\d*\\.\\d+|\\d+)(?:[eE][-+]?\\d+)?)/gi;\n\tlet match;\n\twhile ((match = regex.exec(d)) !== null) if (match[1]) tokens.push(match[1]);\n\telse if (match[2]) tokens.push(parseFloat(match[2]));\n\tlet cursor = 0;\n\tlet current = {\n\t\tx: 0,\n\t\ty: 0\n\t};\n\tlet subpathStart = {\n\t\tx: 0,\n\t\ty: 0\n\t};\n\tlet lastCubicControl = null;\n\tlet lastQuadControl = null;\n\twhile (cursor < tokens.length) {\n\t\tconst cmdToken = tokens[cursor++];\n\t\tif (typeof cmdToken !== \"string\") continue;\n\t\tconst cmd = cmdToken;\n\t\tconst isRelative = cmd === cmd.toLowerCase();\n\t\tconst upper = cmd.toUpperCase();\n\t\tconst getNum = () => {\n\t\t\tif (cursor < tokens.length && typeof tokens[cursor] === \"number\") return tokens[cursor++];\n\t\t\treturn 0;\n\t\t};\n\t\tswitch (upper) {\n\t\t\tcase \"M\": {\n\t\t\t\tlet first = true;\n\t\t\t\twhile (cursor < tokens.length && typeof tokens[cursor] === \"number\") {\n\t\t\t\t\tlet x = getNum();\n\t\t\t\t\tlet y = getNum();\n\t\t\t\t\tif (isRelative) {\n\t\t\t\t\t\tx += current.x;\n\t\t\t\t\t\ty += current.y;\n\t\t\t\t\t}\n\t\t\t\t\tif (first) {\n\t\t\t\t\t\tcurrent = {\n\t\t\t\t\t\t\tx,\n\t\t\t\t\t\t\ty\n\t\t\t\t\t\t};\n\t\t\t\t\t\tsubpathStart = {\n\t\t\t\t\t\t\tx,\n\t\t\t\t\t\t\ty\n\t\t\t\t\t\t};\n\t\t\t\t\t\tfirst = false;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tsegments.push({\n\t\t\t\t\t\t\tp0: current,\n\t\t\t\t\t\t\tp1: {\n\t\t\t\t\t\t\t\tx,\n\t\t\t\t\t\t\t\ty\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t\tcurrent = {\n\t\t\t\t\t\t\tx,\n\t\t\t\t\t\t\ty\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tlastCubicControl = null;\n\t\t\t\tlastQuadControl = null;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"L\":\n\t\t\t\twhile (cursor < tokens.length && typeof tokens[cursor] === \"number\") {\n\t\t\t\t\tlet x = getNum();\n\t\t\t\t\tlet y = getNum();\n\t\t\t\t\tif (isRelative) {\n\t\t\t\t\t\tx += current.x;\n\t\t\t\t\t\ty += current.y;\n\t\t\t\t\t}\n\t\t\t\t\tsegments.push({\n\t\t\t\t\t\tp0: current,\n\t\t\t\t\t\tp1: {\n\t\t\t\t\t\t\tx,\n\t\t\t\t\t\t\ty\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\tcurrent = {\n\t\t\t\t\t\tx,\n\t\t\t\t\t\ty\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tlastCubicControl = null;\n\t\t\t\tlastQuadControl = null;\n\t\t\t\tbreak;\n\t\t\tcase \"H\":\n\t\t\t\twhile (cursor < tokens.length && typeof tokens[cursor] === \"number\") {\n\t\t\t\t\tlet x = getNum();\n\t\t\t\t\tif (isRelative) x += current.x;\n\t\t\t\t\tconst next = {\n\t\t\t\t\t\tx,\n\t\t\t\t\t\ty: current.y\n\t\t\t\t\t};\n\t\t\t\t\tsegments.push({\n\t\t\t\t\t\tp0: current,\n\t\t\t\t\t\tp1: next\n\t\t\t\t\t});\n\t\t\t\t\tcurrent = next;\n\t\t\t\t}\n\t\t\t\tlastCubicControl = null;\n\t\t\t\tlastQuadControl = null;\n\t\t\t\tbreak;\n\t\t\tcase \"V\":\n\t\t\t\twhile (cursor < tokens.length && typeof tokens[cursor] === \"number\") {\n\t\t\t\t\tlet y = getNum();\n\t\t\t\t\tif (isRelative) y += current.y;\n\t\t\t\t\tconst next = {\n\t\t\t\t\t\tx: current.x,\n\t\t\t\t\t\ty\n\t\t\t\t\t};\n\t\t\t\t\tsegments.push({\n\t\t\t\t\t\tp0: current,\n\t\t\t\t\t\tp1: next\n\t\t\t\t\t});\n\t\t\t\t\tcurrent = next;\n\t\t\t\t}\n\t\t\t\tlastCubicControl = null;\n\t\t\t\tlastQuadControl = null;\n\t\t\t\tbreak;\n\t\t\tcase \"C\":\n\t\t\t\twhile (cursor < tokens.length && typeof tokens[cursor] === \"number\") {\n\t\t\t\t\tlet x1 = getNum();\n\t\t\t\t\tlet y1 = getNum();\n\t\t\t\t\tlet x2 = getNum();\n\t\t\t\t\tlet y2 = getNum();\n\t\t\t\t\tlet x = getNum();\n\t\t\t\t\tlet y = getNum();\n\t\t\t\t\tif (isRelative) {\n\t\t\t\t\t\tx1 += current.x;\n\t\t\t\t\t\ty1 += current.y;\n\t\t\t\t\t\tx2 += current.x;\n\t\t\t\t\t\ty2 += current.y;\n\t\t\t\t\t\tx += current.x;\n\t\t\t\t\t\ty += current.y;\n\t\t\t\t\t}\n\t\t\t\t\tconst p1 = {\n\t\t\t\t\t\tx: x1,\n\t\t\t\t\t\ty: y1\n\t\t\t\t\t};\n\t\t\t\t\tconst p2 = {\n\t\t\t\t\t\tx: x2,\n\t\t\t\t\t\ty: y2\n\t\t\t\t\t};\n\t\t\t\t\tconst end = {\n\t\t\t\t\t\tx,\n\t\t\t\t\t\ty\n\t\t\t\t\t};\n\t\t\t\t\tsegments.push(...sampleCubicBezier(current, p1, p2, end));\n\t\t\t\t\tcurrent = end;\n\t\t\t\t\tlastCubicControl = p2;\n\t\t\t\t}\n\t\t\t\tlastQuadControl = null;\n\t\t\t\tbreak;\n\t\t\tcase \"S\":\n\t\t\t\twhile (cursor < tokens.length && typeof tokens[cursor] === \"number\") {\n\t\t\t\t\tlet x2 = getNum();\n\t\t\t\t\tlet y2 = getNum();\n\t\t\t\t\tlet x = getNum();\n\t\t\t\t\tlet y = getNum();\n\t\t\t\t\tif (isRelative) {\n\t\t\t\t\t\tx2 += current.x;\n\t\t\t\t\t\ty2 += current.y;\n\t\t\t\t\t\tx += current.x;\n\t\t\t\t\t\ty += current.y;\n\t\t\t\t\t}\n\t\t\t\t\tlet p1;\n\t\t\t\t\tif (lastCubicControl) p1 = {\n\t\t\t\t\t\tx: 2 * current.x - lastCubicControl.x,\n\t\t\t\t\t\ty: 2 * current.y - lastCubicControl.y\n\t\t\t\t\t};\n\t\t\t\t\telse p1 = {\n\t\t\t\t\t\tx: current.x,\n\t\t\t\t\t\ty: current.y\n\t\t\t\t\t};\n\t\t\t\t\tconst p2 = {\n\t\t\t\t\t\tx: x2,\n\t\t\t\t\t\ty: y2\n\t\t\t\t\t};\n\t\t\t\t\tconst end = {\n\t\t\t\t\t\tx,\n\t\t\t\t\t\ty\n\t\t\t\t\t};\n\t\t\t\t\tsegments.push(...sampleCubicBezier(current, p1, p2, end));\n\t\t\t\t\tcurrent = end;\n\t\t\t\t\tlastCubicControl = p2;\n\t\t\t\t}\n\t\t\t\tlastQuadControl = null;\n\t\t\t\tbreak;\n\t\t\tcase \"Q\":\n\t\t\t\twhile (cursor < tokens.length && typeof tokens[cursor] === \"number\") {\n\t\t\t\t\tlet x1 = getNum();\n\t\t\t\t\tlet y1 = getNum();\n\t\t\t\t\tlet x = getNum();\n\t\t\t\t\tlet y = getNum();\n\t\t\t\t\tif (isRelative) {\n\t\t\t\t\t\tx1 += current.x;\n\t\t\t\t\t\ty1 += current.y;\n\t\t\t\t\t\tx += current.x;\n\t\t\t\t\t\ty += current.y;\n\t\t\t\t\t}\n\t\t\t\t\tconst p1 = {\n\t\t\t\t\t\tx: x1,\n\t\t\t\t\t\ty: y1\n\t\t\t\t\t};\n\t\t\t\t\tconst end = {\n\t\t\t\t\t\tx,\n\t\t\t\t\t\ty\n\t\t\t\t\t};\n\t\t\t\t\tsegments.push(...sampleQuadraticBezier(current, p1, end));\n\t\t\t\t\tcurrent = end;\n\t\t\t\t\tlastQuadControl = p1;\n\t\t\t\t}\n\t\t\t\tlastCubicControl = null;\n\t\t\t\tbreak;\n\t\t\tcase \"T\":\n\t\t\t\twhile (cursor < tokens.length && typeof tokens[cursor] === \"number\") {\n\t\t\t\t\tlet x = getNum();\n\t\t\t\t\tlet y = getNum();\n\t\t\t\t\tif (isRelative) {\n\t\t\t\t\t\tx += current.x;\n\t\t\t\t\t\ty += current.y;\n\t\t\t\t\t}\n\t\t\t\t\tlet p1;\n\t\t\t\t\tif (lastQuadControl) p1 = {\n\t\t\t\t\t\tx: 2 * current.x - lastQuadControl.x,\n\t\t\t\t\t\ty: 2 * current.y - lastQuadControl.y\n\t\t\t\t\t};\n\t\t\t\t\telse p1 = {\n\t\t\t\t\t\tx: current.x,\n\t\t\t\t\t\ty: current.y\n\t\t\t\t\t};\n\t\t\t\t\tconst end = {\n\t\t\t\t\t\tx,\n\t\t\t\t\t\ty\n\t\t\t\t\t};\n\t\t\t\t\tsegments.push(...sampleQuadraticBezier(current, p1, end));\n\t\t\t\t\tcurrent = end;\n\t\t\t\t\tlastQuadControl = p1;\n\t\t\t\t}\n\t\t\t\tlastCubicControl = null;\n\t\t\t\tbreak;\n\t\t\tcase \"A\":\n\t\t\t\twhile (cursor < tokens.length && typeof tokens[cursor] === \"number\") {\n\t\t\t\t\tconst rx = getNum();\n\t\t\t\t\tconst ry = getNum();\n\t\t\t\t\tconst rotation = getNum();\n\t\t\t\t\tconst largeArc = getNum() !== 0;\n\t\t\t\t\tconst sweep = getNum() !== 0;\n\t\t\t\t\tlet x = getNum();\n\t\t\t\t\tlet y = getNum();\n\t\t\t\t\tif (isRelative) {\n\t\t\t\t\t\tx += current.x;\n\t\t\t\t\t\ty += current.y;\n\t\t\t\t\t}\n\t\t\t\t\tconst end = {\n\t\t\t\t\t\tx,\n\t\t\t\t\t\ty\n\t\t\t\t\t};\n\t\t\t\t\tsegments.push(...sampleSvgArc(current, rx, ry, rotation, largeArc, sweep, end));\n\t\t\t\t\tcurrent = end;\n\t\t\t\t}\n\t\t\t\tlastCubicControl = null;\n\t\t\t\tlastQuadControl = null;\n\t\t\t\tbreak;\n\t\t\tcase \"Z\":\n\t\t\t\tif (Math.hypot(current.x - subpathStart.x, current.y - subpathStart.y) > 1e-5) segments.push({\n\t\t\t\t\tp0: current,\n\t\t\t\t\tp1: subpathStart\n\t\t\t\t});\n\t\t\t\tcurrent = subpathStart;\n\t\t\t\tlastCubicControl = null;\n\t\t\t\tlastQuadControl = null;\n\t\t\t\tbreak;\n\t\t\tdefault: break;\n\t\t}\n\t}\n\treturn segments;\n}\n/**\n* Trim linear path segments using arc-length parameterization.\n* Supports [trimStart, trimEnd] normalized in [0, 1] with trimOffset (in degrees 0..360 or normalized 0..1).\n*/\nfunction trimPathSegments(segments, trimStart, trimEnd, trimOffset = 0) {\n\tif (segments.length === 0) return [];\n\tconst lengths = [];\n\tlet totalLength = 0;\n\tfor (const seg of segments) {\n\t\tconst len = Math.hypot(seg.p1.x - seg.p0.x, seg.p1.y - seg.p0.y);\n\t\tlengths.push(len);\n\t\ttotalLength += len;\n\t}\n\tif (totalLength < 1e-6) return [];\n\tconst normalizedOffset = Math.abs(trimOffset) > 1 ? trimOffset % 360 / 360 : trimOffset;\n\tlet s = (trimStart + normalizedOffset) % 1;\n\tlet e = (trimEnd + normalizedOffset) % 1;\n\tif (s < 0) s += 1;\n\tif (e < 0) e += 1;\n\tconst extractRange = (startDist, endDist) => {\n\t\tif (startDist >= endDist) return [];\n\t\tconst result = [];\n\t\tlet accumulated = 0;\n\t\tfor (let i = 0; i < segments.length; i++) {\n\t\t\tconst seg = segments[i];\n\t\t\tconst segLen = lengths[i];\n\t\t\tconst segStart = accumulated;\n\t\t\tconst segEnd = accumulated + segLen;\n\t\t\taccumulated = segEnd;\n\t\t\tif (segEnd <= startDist || segStart >= endDist || segLen < 1e-6) continue;\n\t\t\tconst t0 = Math.max(0, (startDist - segStart) / segLen);\n\t\t\tconst t1 = Math.min(1, (endDist - segStart) / segLen);\n\t\t\tif (t1 > t0) {\n\t\t\t\tconst p0 = {\n\t\t\t\t\tx: seg.p0.x + (seg.p1.x - seg.p0.x) * t0,\n\t\t\t\t\ty: seg.p0.y + (seg.p1.y - seg.p0.y) * t0\n\t\t\t\t};\n\t\t\t\tconst p1 = {\n\t\t\t\t\tx: seg.p0.x + (seg.p1.x - seg.p0.x) * t1,\n\t\t\t\t\ty: seg.p0.y + (seg.p1.y - seg.p0.y) * t1\n\t\t\t\t};\n\t\t\t\tresult.push({\n\t\t\t\t\tp0,\n\t\t\t\t\tp1\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\tif (trimStart === 0 && trimEnd === 1 && trimOffset === 0) return [...segments];\n\tif (Math.abs(s - e) < 1e-5) return [];\n\tif (s <= e) return extractRange(s * totalLength, e * totalLength);\n\telse {\n\t\tconst part1 = extractRange(s * totalLength, totalLength);\n\t\tconst part2 = extractRange(0, e * totalLength);\n\t\treturn [...part1, ...part2];\n\t}\n}\n/**\n* Apply dash patterns along linear path segments.\n*/\nfunction dashPathSegments(segments, dashArray, dashOffset = 0) {\n\tif (segments.length === 0 || dashArray.length === 0) return segments;\n\tlet patternLength = 0;\n\tfor (const d of dashArray) patternLength += d;\n\tif (patternLength < 1e-5) return segments;\n\tlet totalLength = 0;\n\tconst lengths = [];\n\tfor (const seg of segments) {\n\t\tconst len = Math.hypot(seg.p1.x - seg.p0.x, seg.p1.y - seg.p0.y);\n\t\tlengths.push(len);\n\t\ttotalLength += len;\n\t}\n\tconst result = [];\n\tconst currentDist = (dashOffset % patternLength + patternLength) % patternLength;\n\tlet dashIdx = 0;\n\tlet isDraw = true;\n\tlet distInPattern = currentDist;\n\twhile (distInPattern > dashArray[dashIdx]) {\n\t\tdistInPattern -= dashArray[dashIdx];\n\t\tdashIdx = (dashIdx + 1) % dashArray.length;\n\t\tisDraw = !isDraw;\n\t}\n\tlet remainingInDash = dashArray[dashIdx] - distInPattern;\n\tlet distOnPath = 0;\n\twhile (distOnPath < totalLength) {\n\t\tconst runLen = Math.min(remainingInDash, totalLength - distOnPath);\n\t\tif (isDraw && runLen > 1e-4) {\n\t\t\tconst sub = trimPathSegments(segments, distOnPath / totalLength, (distOnPath + runLen) / totalLength);\n\t\t\tresult.push(...sub);\n\t\t}\n\t\tdistOnPath += runLen;\n\t\tdashIdx = (dashIdx + 1) % dashArray.length;\n\t\tisDraw = !isDraw;\n\t\tremainingInDash = dashArray[dashIdx];\n\t}\n\treturn result;\n}\nfunction buildRectPath(w, h, rTL = 0, rTR = 0, rBR = 0, rBL = 0) {\n\tconst maxR = Math.min(w / 2, h / 2);\n\tconst tl = Math.min(rTL, maxR);\n\tconst tr = Math.min(rTR, maxR);\n\tconst br = Math.min(rBR, maxR);\n\tconst bl = Math.min(rBL, maxR);\n\tif (tl === 0 && tr === 0 && br === 0 && bl === 0) return `M 0 0 L ${w} 0 L ${w} ${h} L 0 ${h} Z`;\n\treturn [\n\t\t`M ${tl} 0`,\n\t\t`L ${w - tr} 0`,\n\t\ttr > 0 ? `Q ${w} 0 ${w} ${tr}` : `L ${w} 0`,\n\t\t`L ${w} ${h - br}`,\n\t\tbr > 0 ? `Q ${w} ${h} ${w - br} ${h}` : `L ${w} ${h}`,\n\t\t`L ${bl} ${h}`,\n\t\tbl > 0 ? `Q 0 ${h} 0 ${h - bl}` : `L 0 ${h}`,\n\t\t`L 0 ${tl}`,\n\t\ttl > 0 ? `Q 0 0 ${tl} 0` : `L 0 0`,\n\t\t\"Z\"\n\t].join(\" \");\n}\nfunction buildCirclePath(w, h) {\n\tconst r = Math.min(w, h) / 2;\n\tconst cx = w / 2;\n\tconst cy = h / 2;\n\tconst k = r * .5522847498;\n\treturn [\n\t\t`M ${cx} ${cy - r}`,\n\t\t`C ${cx + k} ${cy - r} ${cx + r} ${cy - k} ${cx + r} ${cy}`,\n\t\t`C ${cx + r} ${cy + k} ${cx + k} ${cy + r} ${cx} ${cy + r}`,\n\t\t`C ${cx - k} ${cy + r} ${cx - r} ${cy + k} ${cx - r} ${cy}`,\n\t\t`C ${cx - r} ${cy - k} ${cx - k} ${cy - r} ${cx} ${cy - r}`,\n\t\t\"Z\"\n\t].join(\" \");\n}\nfunction buildEllipsePath(w, h) {\n\tconst rx = w / 2;\n\tconst ry = h / 2;\n\tconst cx = rx;\n\tconst cy = ry;\n\tconst kx = rx * .5522847498;\n\tconst ky = ry * .5522847498;\n\treturn [\n\t\t`M ${cx} ${cy - ry}`,\n\t\t`C ${cx + kx} ${cy - ry} ${cx + rx} ${cy - ky} ${cx + rx} ${cy}`,\n\t\t`C ${cx + rx} ${cy + ky} ${cx + kx} ${cy + ry} ${cx} ${cy + ry}`,\n\t\t`C ${cx - kx} ${cy + ry} ${cx - rx} ${cy + ky} ${cx - rx} ${cy}`,\n\t\t`C ${cx - rx} ${cy - ky} ${cx - kx} ${cy - ry} ${cx} ${cy - ry}`,\n\t\t\"Z\"\n\t].join(\" \");\n}\nfunction buildPolygonPath(w, h, sides = 5) {\n\tconst n = Math.max(3, sides);\n\tconst r = Math.min(w, h) / 2;\n\tconst cx = w / 2;\n\tconst cy = h / 2;\n\tconst points = [];\n\tfor (let i = 0; i < n; i++) {\n\t\tconst angle = -Math.PI / 2 + i * 2 * Math.PI / n;\n\t\tpoints.push({\n\t\t\tx: cx + r * Math.cos(angle),\n\t\t\ty: cy + r * Math.sin(angle)\n\t\t});\n\t}\n\treturn points.map((p, i) => `${i === 0 ? \"M\" : \"L\"} ${p.x} ${p.y}`).join(\" \") + \" Z\";\n}\nfunction buildStarPath(w, h, points = 5, innerRatio = .5) {\n\tconst n = Math.max(3, points);\n\tconst rOuter = Math.min(w, h) / 2;\n\tconst rInner = rOuter * Math.max(.01, Math.min(.99, innerRatio));\n\tconst cx = w / 2;\n\tconst cy = h / 2;\n\tconst coords = [];\n\tfor (let i = 0; i < n * 2; i++) {\n\t\tconst angle = -Math.PI / 2 + i * Math.PI / n;\n\t\tconst r = i % 2 === 0 ? rOuter : rInner;\n\t\tcoords.push({\n\t\t\tx: cx + r * Math.cos(angle),\n\t\t\ty: cy + r * Math.sin(angle)\n\t\t});\n\t}\n\treturn coords.map((p, i) => `${i === 0 ? \"M\" : \"L\"} ${p.x} ${p.y}`).join(\" \") + \" Z\";\n}\nfunction buildArrowPath(w, h, headWidth = 40, headLength = 40, shaftWidth = 20) {\n\tconst hw = Math.min(headWidth, h);\n\tconst hl = Math.min(headLength, w);\n\tconst sw = Math.min(shaftWidth, hw);\n\tconst cy = h / 2;\n\treturn [\n\t\t`M 0 ${cy - sw / 2}`,\n\t\t`L ${w - hl} ${cy - sw / 2}`,\n\t\t`L ${w - hl} ${cy - hw / 2}`,\n\t\t`L ${w} ${cy}`,\n\t\t`L ${w - hl} ${cy + hw / 2}`,\n\t\t`L ${w - hl} ${cy + sw / 2}`,\n\t\t`L 0 ${cy + sw / 2}`,\n\t\t\"Z\"\n\t].join(\" \");\n}\nfunction buildShapeSvgPath(config) {\n\tconst { shapeType, width, height } = config;\n\tswitch (shapeType) {\n\t\tcase \"rect\": return buildRectPath(width, height, config.cornerRadius ?? 0, config.cornerRadius ?? 0, config.cornerRadius ?? 0, config.cornerRadius ?? 0);\n\t\tcase \"circle\": return buildCirclePath(width, height);\n\t\tcase \"ellipse\": return buildEllipsePath(width, height);\n\t\tcase \"polygon\": return buildPolygonPath(width, height, config.polygonSides ?? 5);\n\t\tcase \"star\": return buildStarPath(width, height, config.starPoints ?? 5, config.starInnerRadiusRatio ?? .5);\n\t\tcase \"arrow\": return buildArrowPath(width, height, config.arrowHeadWidth ?? 40, config.arrowHeadLength ?? 40, config.arrowShaftWidth ?? 20);\n\t\tcase \"path\": return config.path ?? \"\";\n\t\tdefault: return \"\";\n\t}\n}\n/**\n* Triangulate a simple 2D polygon contour into an array of triangle vertices using ear clipping.\n*/\nfunction triangulatePolygon(contour) {\n\tif (contour.length < 3) return [];\n\tif (contour.length === 3) return [\n\t\tcontour[0],\n\t\tcontour[1],\n\t\tcontour[2]\n\t];\n\tconst points = [...contour];\n\tconst last = points[points.length - 1];\n\tconst first = points[0];\n\tif (Math.hypot(last.x - first.x, last.y - first.y) < 1e-5) points.pop();\n\tif (points.length < 3) return [];\n\tlet area = 0;\n\tfor (let i = 0; i < points.length; i++) {\n\t\tconst j = (i + 1) % points.length;\n\t\tarea += points[i].x * points[j].y - points[j].x * points[i].y;\n\t}\n\tif (area < 0) points.reverse();\n\tconst isPointInTriangle = (p, a, b, c) => {\n\t\tconst crossA = (b.x - a.x) * (p.y - a.y) - (b.y - a.y) * (p.x - a.x);\n\t\tconst crossB = (c.x - b.x) * (p.y - b.y) - (c.y - b.y) * (p.x - b.x);\n\t\tconst crossC = (a.x - c.x) * (p.y - c.y) - (a.y - c.y) * (p.x - c.x);\n\t\treturn crossA >= -1e-6 && crossB >= -1e-6 && crossC >= -1e-6;\n\t};\n\tconst isEar = (prev, curr, next, rem$1) => {\n\t\tif ((curr.x - prev.x) * (next.y - prev.y) - (curr.y - prev.y) * (next.x - prev.x) <= 1e-7) return false;\n\t\tfor (const p of rem$1) {\n\t\t\tif (p === prev || p === curr || p === next) continue;\n\t\t\tif (isPointInTriangle(p, prev, curr, next)) return false;\n\t\t}\n\t\treturn true;\n\t};\n\tconst triangles = [];\n\tconst rem = [...points];\n\tlet attempts = 0;\n\tconst maxAttempts = rem.length * rem.length * 2;\n\twhile (rem.length > 3 && attempts < maxAttempts) {\n\t\tattempts++;\n\t\tlet earFound = false;\n\t\tfor (let i = 0; i < rem.length; i++) {\n\t\t\tconst prev = rem[(i - 1 + rem.length) % rem.length];\n\t\t\tconst curr = rem[i];\n\t\t\tconst next = rem[(i + 1) % rem.length];\n\t\t\tif (isEar(prev, curr, next, rem)) {\n\t\t\t\ttriangles.push(prev, curr, next);\n\t\t\t\trem.splice(i, 1);\n\t\t\t\tearFound = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tif (!earFound) {\n\t\t\ttriangles.push(rem[0], rem[1], rem[2]);\n\t\t\trem.splice(1, 1);\n\t\t}\n\t}\n\tif (rem.length === 3) triangles.push(rem[0], rem[1], rem[2]);\n\treturn triangles;\n}\n/**\n* Triangulate a shape geometry into a flat Float32Array of 2D vertex pairs [x, y, x, y, ...].\n*/\nfunction triangulateShape(config) {\n\tconst { shapeType, width: w, height: h } = config;\n\tif (shapeType === \"rect\") {\n\t\tconst cr = config.cornerRadius ?? 0;\n\t\tif (cr <= 0) return new Float32Array([\n\t\t\t0,\n\t\t\t0,\n\t\t\tw,\n\t\t\t0,\n\t\t\tw,\n\t\t\th,\n\t\t\t0,\n\t\t\t0,\n\t\t\tw,\n\t\t\th,\n\t\t\t0,\n\t\t\th\n\t\t]);\n\t\tconst tris = triangulatePolygon(parseSvgPathToSegments(buildRectPath(w, h, cr, cr, cr, cr)).map((s) => s.p0));\n\t\tconst out = new Float32Array(tris.length * 2);\n\t\tfor (let i = 0; i < tris.length; i++) {\n\t\t\tout[i * 2] = tris[i].x;\n\t\t\tout[i * 2 + 1] = tris[i].y;\n\t\t}\n\t\treturn out;\n\t}\n\tif (shapeType === \"circle\" || shapeType === \"ellipse\") {\n\t\tconst cx = w / 2;\n\t\tconst cy = h / 2;\n\t\tconst rx = shapeType === \"circle\" ? Math.min(w, h) / 2 : w / 2;\n\t\tconst ry = shapeType === \"circle\" ? rx : h / 2;\n\t\tconst steps = 48;\n\t\tconst out = new Float32Array(steps * 3 * 2);\n\t\tlet ptr = 0;\n\t\tfor (let i = 0; i < steps; i++) {\n\t\t\tconst a0 = i * 2 * Math.PI / steps;\n\t\t\tconst a1 = (i + 1) * 2 * Math.PI / steps;\n\t\t\tout[ptr++] = cx;\n\t\t\tout[ptr++] = cy;\n\t\t\tout[ptr++] = cx + rx * Math.cos(a0);\n\t\t\tout[ptr++] = cy + ry * Math.sin(a0);\n\t\t\tout[ptr++] = cx + rx * Math.cos(a1);\n\t\t\tout[ptr++] = cy + ry * Math.sin(a1);\n\t\t}\n\t\treturn out;\n\t}\n\tif (shapeType === \"polygon\") {\n\t\tconst n = Math.max(3, config.polygonSides ?? 5);\n\t\tconst r = Math.min(w, h) / 2;\n\t\tconst cx = w / 2;\n\t\tconst cy = h / 2;\n\t\tconst out = new Float32Array(n * 3 * 2);\n\t\tlet ptr = 0;\n\t\tfor (let i = 0; i < n; i++) {\n\t\t\tconst a0 = -Math.PI / 2 + i * 2 * Math.PI / n;\n\t\t\tconst a1 = -Math.PI / 2 + (i + 1) * 2 * Math.PI / n;\n\t\t\tout[ptr++] = cx;\n\t\t\tout[ptr++] = cy;\n\t\t\tout[ptr++] = cx + r * Math.cos(a0);\n\t\t\tout[ptr++] = cy + r * Math.sin(a0);\n\t\t\tout[ptr++] = cx + r * Math.cos(a1);\n\t\t\tout[ptr++] = cy + r * Math.sin(a1);\n\t\t}\n\t\treturn out;\n\t}\n\tif (shapeType === \"star\") {\n\t\tconst n = Math.max(3, config.starPoints ?? 5);\n\t\tconst rOuter = Math.min(w, h) / 2;\n\t\tconst rInner = rOuter * Math.max(.01, Math.min(.99, config.starInnerRadiusRatio ?? .5));\n\t\tconst cx = w / 2;\n\t\tconst cy = h / 2;\n\t\tconst totalVerts = n * 2;\n\t\tconst out = new Float32Array(totalVerts * 3 * 2);\n\t\tlet ptr = 0;\n\t\tfor (let i = 0; i < totalVerts; i++) {\n\t\t\tconst a0 = -Math.PI / 2 + i * Math.PI / n;\n\t\t\tconst a1 = -Math.PI / 2 + (i + 1) * Math.PI / n;\n\t\t\tconst r0 = i % 2 === 0 ? rOuter : rInner;\n\t\t\tconst r1 = (i + 1) % 2 === 0 ? rOuter : rInner;\n\t\t\tout[ptr++] = cx;\n\t\t\tout[ptr++] = cy;\n\t\t\tout[ptr++] = cx + r0 * Math.cos(a0);\n\t\t\tout[ptr++] = cy + r0 * Math.sin(a0);\n\t\t\tout[ptr++] = cx + r1 * Math.cos(a1);\n\t\t\tout[ptr++] = cy + r1 * Math.sin(a1);\n\t\t}\n\t\treturn out;\n\t}\n\tif (shapeType === \"arrow\") {\n\t\tconst hw = Math.min(config.arrowHeadWidth ?? 40, h);\n\t\tconst hl = Math.min(config.arrowHeadLength ?? 40, w);\n\t\tconst sw = Math.min(config.arrowShaftWidth ?? 20, hw);\n\t\tconst cy = h / 2;\n\t\tconst x0 = 0;\n\t\tconst x1 = w - hl;\n\t\tconst x2 = w;\n\t\tconst yTopShaft = cy - sw / 2;\n\t\tconst yBotShaft = cy + sw / 2;\n\t\tconst yTopHead = cy - hw / 2;\n\t\tconst yBotHead = cy + hw / 2;\n\t\treturn new Float32Array([\n\t\t\tx0,\n\t\t\tyTopShaft,\n\t\t\tx1,\n\t\t\tyTopShaft,\n\t\t\tx1,\n\t\t\tyBotShaft,\n\t\t\tx0,\n\t\t\tyTopShaft,\n\t\t\tx1,\n\t\t\tyBotShaft,\n\t\t\tx0,\n\t\t\tyBotShaft,\n\t\t\tx1,\n\t\t\tyTopHead,\n\t\t\tx2,\n\t\t\tcy,\n\t\t\tx1,\n\t\t\tyBotHead\n\t\t]);\n\t}\n\tif (shapeType === \"path\" && config.path) {\n\t\tconst segments = parseSvgPathToSegments(config.path);\n\t\tif (segments.length === 0) return new Float32Array(0);\n\t\tconst tris = triangulatePolygon(segments.map((s) => s.p0));\n\t\tconst out = new Float32Array(tris.length * 2);\n\t\tfor (let i = 0; i < tris.length; i++) {\n\t\t\tout[i * 2] = tris[i].x;\n\t\t\tout[i * 2 + 1] = tris[i].y;\n\t\t}\n\t\treturn out;\n\t}\n\treturn new Float32Array(0);\n}\n\n//#endregion\n//#region src/shaders/path.ts\nconst pathWgsl = `\nstruct Uniforms {\n transformCol0 : vec4<f32>,\n transformCol1 : vec4<f32>,\n transformCol2 : vec4<f32>,\n params : vec4<f32>, // x = opacity, y = surfaceWidth, z = surfaceHeight, w = strokeWidth\n color : vec4<f32>,\n style : vec4<f32>, // x = capType (0 = round, 1 = butt, 2 = square)\n p0 : vec2<f32>,\n p1 : vec2<f32>,\n};\n\n@group(0) @binding(0) var<uniform> u : Uniforms;\n\nstruct VSOut {\n @builtin(position) pos : vec4<f32>,\n @location(0) localPos : vec2<f32>,\n};\n\n@vertex fn vs(@location(0) xy : vec2<f32>) -> VSOut {\n let transform = mat3x3<f32>(u.transformCol0.xyz, u.transformCol1.xyz, u.transformCol2.xyz);\n let p = transform * vec3<f32>(xy, 1.0);\n \n let surfaceSize = u.params.yz;\n let clipX = (p.x / surfaceSize.x) * 2.0 - 1.0;\n let clipY = 1.0 - (p.y / surfaceSize.y) * 2.0;\n\n return VSOut(vec4<f32>(clipX, clipY, 0.0, 1.0), xy);\n}\n\nfn sdSegmentWithCap(p: vec2<f32>, a: vec2<f32>, b: vec2<f32>, radius: f32, capType: f32) -> f32 {\n let ba = b - a;\n let len = length(ba);\n if (len < 1e-6) {\n return length(p - a) - radius;\n }\n let dir = ba / len;\n let normal = vec2<f32>(-dir.y, dir.x);\n let pa = p - a;\n \n let proj = dot(pa, dir);\n let perp = abs(dot(pa, normal));\n \n if (capType > 0.5 && capType < 1.5) {\n // Butt cap: terminates strictly at endpoints a and b\n let dx = max(-proj, proj - len);\n let dy = perp - radius;\n let outside = length(max(vec2<f32>(dx, dy), vec2<f32>(0.0, 0.0)));\n let inside = min(max(dx, dy), 0.0);\n return outside + inside;\n } else if (capType >= 1.5) {\n // Square cap: extends past endpoints a and b by radius\n let dx = max(-proj - radius, proj - (len + radius));\n let dy = perp - radius;\n let outside = length(max(vec2<f32>(dx, dy), vec2<f32>(0.0, 0.0)));\n let inside = min(max(dx, dy), 0.0);\n return outside + inside;\n } else {\n // Round cap (default)\n let h = clamp(proj / len, 0.0, 1.0);\n return length(pa - ba * h) - radius;\n }\n}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n let radius = u.params.w * 0.5;\n let d = sdSegmentWithCap(in.localPos, u.p0, u.p1, radius, u.style.x);\n \n let fw = max(fwidth(d), 1e-5);\n let edgeAlpha = clamp(0.5 - d / fw, 0.0, 1.0);\n let alpha = u.color.a * u.params.x * edgeAlpha;\n if (alpha <= 0.0) {\n discard;\n }\n \n return vec4<f32>(u.color.rgb * alpha, alpha);\n}\n`;\n\n//#endregion\n//#region src/renderer2d/pipeline-utils.ts\n/** Premultiplied-alpha \"over\". */\nconst PREMULTIPLIED_OVER = {\n\tcolor: {\n\t\tsrcFactor: \"one\",\n\t\tdstFactor: \"one-minus-src-alpha\",\n\t\toperation: \"add\"\n\t},\n\talpha: {\n\t\tsrcFactor: \"one\",\n\t\tdstFactor: \"one-minus-src-alpha\",\n\t\toperation: \"add\"\n\t}\n};\n/** One uniform buffer at binding 0, visible to both shader stages. */\nfunction createUniformLayout(device) {\n\treturn device.createBindGroupLayout({ entries: [{\n\t\tbinding: 0,\n\t\tvisibility: GPUShaderStage.VERTEX | GPUShaderStage.FRAGMENT,\n\t\tbuffer: { type: \"uniform\" }\n\t}] });\n}\n/**\n* A pipeline drawing float32x2 vertices (`vs`/`fs`) with one uniform bind\n* group into a single `format` target.\n*/\nfunction createVec2Pipeline(device, options) {\n\tconst { module } = options;\n\treturn device.createRenderPipeline({\n\t\tlabel: options.label,\n\t\tlayout: device.createPipelineLayout({ bindGroupLayouts: [options.uniformLayout] }),\n\t\tvertex: {\n\t\t\tmodule,\n\t\t\tentryPoint: \"vs\",\n\t\t\tbuffers: [{\n\t\t\t\tarrayStride: 8,\n\t\t\t\tattributes: [{\n\t\t\t\t\tshaderLocation: 0,\n\t\t\t\t\toffset: 0,\n\t\t\t\t\tformat: \"float32x2\"\n\t\t\t\t}]\n\t\t\t}]\n\t\t},\n\t\tfragment: {\n\t\t\tmodule,\n\t\t\tentryPoint: \"fs\",\n\t\t\ttargets: [{\n\t\t\t\tformat: options.format,\n\t\t\t\tblend: options.blend ?? PREMULTIPLIED_OVER\n\t\t\t}]\n\t\t},\n\t\tprimitive: { topology: options.topology }\n\t});\n}\n\n//#endregion\n//#region src/renderer2d/path-pipeline.ts\nvar PathPipeline = class {\n\tdevice;\n\tpipeline;\n\tmaxPipeline;\n\tuniformLayout;\n\tuniformPool;\n\tvertexPool;\n\tuniformBindGroupCache = new UniformBindGroupCache();\n\tscratchData = new Float32Array(28);\n\tconstructor(device, format) {\n\t\tthis.device = device;\n\t\tthis.uniformPool = new BufferPool(4096, GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST);\n\t\tthis.vertexPool = new BufferPool(4096, GPUBufferUsage.VERTEX | GPUBufferUsage.COPY_DST);\n\t\tconst module = device.createShaderModule({\n\t\t\tlabel: \"path.wgsl\",\n\t\t\tcode: pathWgsl\n\t\t});\n\t\tthis.uniformLayout = createUniformLayout(device);\n\t\tthis.pipeline = createVec2Pipeline(device, {\n\t\t\tlabel: \"PathPipeline\",\n\t\t\tmodule,\n\t\t\tuniformLayout: this.uniformLayout,\n\t\t\tformat,\n\t\t\ttopology: \"triangle-strip\"\n\t\t});\n\t\tthis.maxPipeline = createVec2Pipeline(device, {\n\t\t\tlabel: \"PathPipeline.max\",\n\t\t\tmodule,\n\t\t\tuniformLayout: this.uniformLayout,\n\t\t\tformat,\n\t\t\ttopology: \"triangle-strip\",\n\t\t\tblend: {\n\t\t\t\tcolor: {\n\t\t\t\t\tsrcFactor: \"one\",\n\t\t\t\t\tdstFactor: \"one\",\n\t\t\t\t\toperation: \"max\"\n\t\t\t\t},\n\t\t\t\talpha: {\n\t\t\t\t\tsrcFactor: \"one\",\n\t\t\t\t\tdstFactor: \"one\",\n\t\t\t\t\toperation: \"max\"\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\tresetPools() {\n\t\tthis.uniformPool.reset();\n\t\tthis.vertexPool.reset();\n\t}\n\tdrawPath(pass, transformStack, pathStr, color, strokeWidth, surfaceWidth, surfaceHeight, opts) {\n\t\tlet segments = parseSvgPathToSegments(pathStr);\n\t\tif (segments.length === 0) return;\n\t\tif (opts?.trimStart !== void 0 || opts?.trimEnd !== void 0 || opts?.trimOffset !== void 0) segments = trimPathSegments(segments, opts.trimStart ?? 0, opts.trimEnd ?? 1, opts.trimOffset ?? 0);\n\t\tif (opts?.strokeDashArray && opts.strokeDashArray.length > 0) segments = dashPathSegments(segments, opts.strokeDashArray, opts.strokeDashOffset ?? 0);\n\t\tif (segments.length === 0) return;\n\t\tconst c = parseColor(color);\n\t\tconst opacity = opts?.opacity ?? 1;\n\t\tlet capType = 0;\n\t\tif (opts?.strokeLineCap === \"butt\") capType = 1;\n\t\telse if (opts?.strokeLineCap === \"square\") capType = 2;\n\t\tfor (const segment of segments) this.drawSegment(pass, transformStack, segment.p0, segment.p1, c, strokeWidth, capType, surfaceWidth, surfaceHeight, opacity, opts);\n\t}\n\tdrawSegments(pass, transformStack, segments, color, strokeWidth, surfaceWidth, surfaceHeight, opts) {\n\t\tlet activeSegments = segments;\n\t\tif (opts?.trimStart !== void 0 || opts?.trimEnd !== void 0 || opts?.trimOffset !== void 0) activeSegments = trimPathSegments(activeSegments, opts.trimStart ?? 0, opts.trimEnd ?? 1, opts.trimOffset ?? 0);\n\t\tif (opts?.strokeDashArray && opts.strokeDashArray.length > 0) activeSegments = dashPathSegments(activeSegments, opts.strokeDashArray, opts.strokeDashOffset ?? 0);\n\t\tif (activeSegments.length === 0) return;\n\t\tconst c = parseColor(color);\n\t\tconst opacity = opts?.opacity ?? 1;\n\t\tlet capType = 0;\n\t\tif (opts?.strokeLineCap === \"butt\") capType = 1;\n\t\telse if (opts?.strokeLineCap === \"square\") capType = 2;\n\t\tfor (const segment of activeSegments) this.drawSegment(pass, transformStack, segment.p0, segment.p1, c, strokeWidth, capType, surfaceWidth, surfaceHeight, opacity, opts);\n\t}\n\tdrawSegment(pass, transformStack, p0, p1, color, strokeWidth, capType, surfaceWidth, surfaceHeight, opacity, opts) {\n\t\tconst data = this.scratchData;\n\t\ttransformStack.packIntoBuffer(data, opacity, surfaceWidth, surfaceHeight, opts?.transform);\n\t\tdata[15] = strokeWidth;\n\t\tdata[16] = color.r;\n\t\tdata[17] = color.g;\n\t\tdata[18] = color.b;\n\t\tdata[19] = color.a;\n\t\tdata[20] = capType;\n\t\tdata[21] = 0;\n\t\tdata[22] = 0;\n\t\tdata[23] = 0;\n\t\tdata[24] = p0.x;\n\t\tdata[25] = p0.y;\n\t\tdata[26] = p1.x;\n\t\tdata[27] = p1.y;\n\t\tconst uniformBuffer = this.uniformPool.getBuffer(this.device, data);\n\t\tconst dx = p1.x - p0.x;\n\t\tconst dy = p1.y - p0.y;\n\t\tconst len = Math.sqrt(dx * dx + dy * dy);\n\t\tif (len < 1e-6) return;\n\t\tconst padding = strokeWidth * .5 + 2;\n\t\tconst nx = dx / len * padding;\n\t\tconst ny = dy / len * padding;\n\t\tconst px = -ny;\n\t\tconst py = nx;\n\t\tconst vertexData = new Float32Array([\n\t\t\tp0.x - nx - px,\n\t\t\tp0.y - ny - py,\n\t\t\tp0.x - nx + px,\n\t\t\tp0.y - ny + py,\n\t\t\tp1.x + nx - px,\n\t\t\tp1.y + ny - py,\n\t\t\tp1.x + nx + px,\n\t\t\tp1.y + ny + py\n\t\t]);\n\t\tconst vertexBuffer = this.vertexPool.getBuffer(this.device, vertexData);\n\t\tconst pipeline = opts?.blendMode === \"max\" ? this.maxPipeline : this.pipeline;\n\t\tpass.setPipeline(pipeline);\n\t\tconst uniformBindGroup = this.uniformBindGroupCache.getBindGroup(this.device, this.uniformLayout, uniformBuffer);\n\t\tpass.setBindGroup(0, uniformBindGroup);\n\t\tpass.setVertexBuffer(0, vertexBuffer);\n\t\tpass.draw(4);\n\t}\n\tdestroy() {\n\t\tthis.uniformPool.destroy();\n\t\tthis.vertexPool.destroy();\n\t\tthis.uniformBindGroupCache.destroy();\n\t}\n};\n\n//#endregion\n//#region src/shaders/quad.ts\nconst quadWgsl = `\nstruct Uniforms {\n\ttransformCol0 : vec4<f32>,\n\ttransformCol1 : vec4<f32>,\n\ttransformCol2 : vec4<f32>,\n\tparams : vec4<f32>, // x = opacity, y = surfaceWidth, z = surfaceHeight, w = blurAmount\n};\n\n@group(0) @binding(0) var<uniform> u : Uniforms;\n@group(1) @binding(0) var tex : texture_2d<f32>;\n@group(1) @binding(1) var samp : sampler;\n\nstruct VSOut {\n\t@builtin(position) pos : vec4<f32>,\n\t@location(0) uv : vec2<f32>,\n};\n\n@vertex fn vs(@location(0) xy : vec2<f32>, @location(1) uv : vec2<f32>) -> VSOut {\n\tlet transform = mat3x3<f32>(u.transformCol0.xyz, u.transformCol1.xyz, u.transformCol2.xyz);\n\tlet p = transform * vec3<f32>(xy, 1.0);\n\t\n\tlet surfaceSize = u.params.yz;\n\tlet clipX = (p.x / surfaceSize.x) * 2.0 - 1.0;\n\tlet clipY = 1.0 - (p.y / surfaceSize.y) * 2.0;\n\n\treturn VSOut(vec4<f32>(clipX, clipY, 0.0, 1.0), uv);\n}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet opacity = u.params.x;\n\tlet blurAmount = u.params.w;\n\n\tif (blurAmount > 0.01) {\n\t\tlet fdx = dpdx(in.uv);\n\t\tlet fdy = dpdy(in.uv);\n\t\tlet fw = max(max(abs(fdx), abs(fdy)), vec2<f32>(0.000001));\n\t\tlet step = fw * blurAmount * 0.3;\n\n\t\tvar color = vec4<f32>(0.0);\n\t\tvar totalWeight = 0.0;\n\t\tfor (var y_offset = -1.0; y_offset <= 1.0; y_offset = y_offset + 1.0) {\n\t\t\tfor (var x_offset = -1.0; x_offset <= 1.0; x_offset = x_offset + 1.0) {\n\t\t\t\tlet offset = vec2<f32>(x_offset, y_offset) * step;\n\t\t\t\tlet sampleColor = textureSample(tex, samp, in.uv + offset);\n\t\t\t\tcolor = color + sampleColor;\n\t\t\t\ttotalWeight = totalWeight + 1.0;\n\t\t\t}\n\t\t}\n\t\treturn (color / totalWeight) * opacity;\n\t} else {\n\t\tlet color = textureSample(tex, samp, in.uv);\n\t\treturn color * opacity;\n\t}\n}\n`;\n\n//#endregion\n//#region src/renderer2d/quad-pipeline.ts\nvar BufferPool$1 = class {\n\tbuffers = [];\n\tindex = 0;\n\tsize;\n\tusage;\n\tconstructor(size, usage) {\n\t\tthis.size = size;\n\t\tthis.usage = usage;\n\t}\n\tgetBuffer(device, data) {\n\t\tif (this.index >= this.buffers.length) {\n\t\t\tconst buf$1 = device.createBuffer({\n\t\t\t\tsize: this.size,\n\t\t\t\tusage: this.usage\n\t\t\t});\n\t\t\tthis.buffers.push(buf$1);\n\t\t}\n\t\tconst buf = this.buffers[this.index++];\n\t\tdevice.queue.writeBuffer(buf, 0, data);\n\t\treturn buf;\n\t}\n\treset() {\n\t\tthis.index = 0;\n\t}\n\tdestroy() {\n\t\tfor (const buf of this.buffers) buf.destroy();\n\t\tthis.buffers = [];\n\t}\n};\nvar QuadPipeline = class {\n\tdevice;\n\tpipeline;\n\tuniformLayout;\n\ttextureLayout;\n\tuniformPool;\n\tvertexPool;\n\tuniformBindGroupCache = new UniformBindGroupCache();\n\tuniformData = new Float32Array(16);\n\tvertexData = new Float32Array(16);\n\tconstructor(device, format) {\n\t\tthis.device = device;\n\t\tthis.uniformPool = new BufferPool$1(64, GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST);\n\t\tthis.vertexPool = new BufferPool$1(64, GPUBufferUsage.VERTEX | GPUBufferUsage.COPY_DST);\n\t\tconst module = device.createShaderModule({\n\t\t\tlabel: \"quad.wgsl\",\n\t\t\tcode: quadWgsl\n\t\t});\n\t\tthis.uniformLayout = createUniformLayout(device);\n\t\tthis.textureLayout = device.createBindGroupLayout({ entries: [{\n\t\t\tbinding: 0,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\ttexture: { sampleType: \"float\" }\n\t\t}, {\n\t\t\tbinding: 1,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\tsampler: { type: \"filtering\" }\n\t\t}] });\n\t\tconst pipelineLayout = device.createPipelineLayout({ bindGroupLayouts: [this.uniformLayout, this.textureLayout] });\n\t\tthis.pipeline = device.createRenderPipeline({\n\t\t\tlabel: \"QuadPipeline\",\n\t\t\tlayout: pipelineLayout,\n\t\t\tvertex: {\n\t\t\t\tmodule,\n\t\t\t\tentryPoint: \"vs\",\n\t\t\t\tbuffers: [{\n\t\t\t\t\tarrayStride: 16,\n\t\t\t\t\tattributes: [{\n\t\t\t\t\t\tshaderLocation: 0,\n\t\t\t\t\t\toffset: 0,\n\t\t\t\t\t\tformat: \"float32x2\"\n\t\t\t\t\t}, {\n\t\t\t\t\t\tshaderLocation: 1,\n\t\t\t\t\t\toffset: 8,\n\t\t\t\t\t\tformat: \"float32x2\"\n\t\t\t\t\t}]\n\t\t\t\t}]\n\t\t\t},\n\t\t\tfragment: {\n\t\t\t\tmodule,\n\t\t\t\tentryPoint: \"fs\",\n\t\t\t\ttargets: [{\n\t\t\t\t\tformat,\n\t\t\t\t\tblend: PREMULTIPLIED_OVER\n\t\t\t\t}]\n\t\t\t},\n\t\t\tprimitive: { topology: \"triangle-strip\" }\n\t\t});\n\t}\n\tresetPools() {\n\t\tthis.uniformPool.reset();\n\t\tthis.vertexPool.reset();\n\t}\n\tdraw(pass, bindGroupCache, transformStack, texture, sampler, src, dst, surfaceWidth, surfaceHeight, opts) {\n\t\tconst opacity = opts?.opacity ?? 1;\n\t\ttransformStack.packIntoBuffer(this.uniformData, opacity, surfaceWidth, surfaceHeight, opts?.transform);\n\t\tconst uniformBuffer = this.uniformPool.getBuffer(this.device, this.uniformData);\n\t\tconst u0 = src.x / texture.width;\n\t\tconst v0 = src.y / texture.height;\n\t\tconst u1 = (src.x + src.width) / texture.width;\n\t\tconst v1 = (src.y + src.height) / texture.height;\n\t\tthis.vertexData[0] = dst.x;\n\t\tthis.vertexData[1] = dst.y;\n\t\tthis.vertexData[2] = u0;\n\t\tthis.vertexData[3] = v0;\n\t\tthis.vertexData[4] = dst.x + dst.width;\n\t\tthis.vertexData[5] = dst.y;\n\t\tthis.vertexData[6] = u1;\n\t\tthis.vertexData[7] = v0;\n\t\tthis.vertexData[8] = dst.x;\n\t\tthis.vertexData[9] = dst.y + dst.height;\n\t\tthis.vertexData[10] = u0;\n\t\tthis.vertexData[11] = v1;\n\t\tthis.vertexData[12] = dst.x + dst.width;\n\t\tthis.vertexData[13] = dst.y + dst.height;\n\t\tthis.vertexData[14] = u1;\n\t\tthis.vertexData[15] = v1;\n\t\tconst vertexBuffer = this.vertexPool.getBuffer(this.device, this.vertexData);\n\t\tconst uniformBindGroup = this.uniformBindGroupCache.getBindGroup(this.device, this.uniformLayout, uniformBuffer);\n\t\tconst textureBindGroup = bindGroupCache.getBindGroup(this.device, this.textureLayout, texture, sampler);\n\t\tpass.setPipeline(this.pipeline);\n\t\tpass.setBindGroup(0, uniformBindGroup);\n\t\tpass.setBindGroup(1, textureBindGroup);\n\t\tpass.setVertexBuffer(0, vertexBuffer);\n\t\tpass.draw(4);\n\t}\n\tdestroy() {\n\t\tthis.uniformPool.destroy();\n\t\tthis.vertexPool.destroy();\n\t\tthis.uniformBindGroupCache.destroy();\n\t}\n};\n\n//#endregion\n//#region src/renderer2d/sampler-cache.ts\nvar SamplerCache = class {\n\tsamplers = /* @__PURE__ */ new Map();\n\tlru = [];\n\tmaxCapacity;\n\tconstructor(maxCapacity = 32) {\n\t\tthis.maxCapacity = maxCapacity;\n\t}\n\tgetSampler(device, desc = {}) {\n\t\tconst maxAnisotropy = Math.max(1, Math.min(16, desc.maxAnisotropy ?? 4));\n\t\tconst key = `${desc.magFilter ?? \"linear\"}:${desc.minFilter ?? \"linear\"}:${desc.mipmapFilter ?? \"linear\"}:${desc.addressModeU ?? \"clamp-to-edge\"}:${desc.addressModeV ?? \"clamp-to-edge\"}:${maxAnisotropy}`;\n\t\tlet sampler = this.samplers.get(key);\n\t\tif (!sampler) {\n\t\t\tsampler = device.createSampler({\n\t\t\t\tmagFilter: desc.magFilter ?? \"linear\",\n\t\t\t\tminFilter: desc.minFilter ?? \"linear\",\n\t\t\t\tmipmapFilter: desc.mipmapFilter ?? \"linear\",\n\t\t\t\taddressModeU: desc.addressModeU ?? \"clamp-to-edge\",\n\t\t\t\taddressModeV: desc.addressModeV ?? \"clamp-to-edge\",\n\t\t\t\tmaxAnisotropy\n\t\t\t});\n\t\t\tif (this.samplers.size >= this.maxCapacity) {\n\t\t\t\tconst evictKey = this.lru.pop();\n\t\t\t\tif (evictKey) this.samplers.delete(evictKey);\n\t\t\t}\n\t\t\tthis.samplers.set(key, sampler);\n\t\t} else this.lru = this.lru.filter((k) => k !== key);\n\t\tthis.lru.unshift(key);\n\t\treturn sampler;\n\t}\n\tdestroy() {\n\t\tthis.samplers.clear();\n\t\tthis.lru = [];\n\t}\n};\n\n//#endregion\n//#region src/shaders/gradient.ts\n/**\n* Multi-stop linear / radial / conic gradients, blended in OKLab, shared by\n* the solid (rounded rect backgrounds) and shape-fill pipelines. The including\n* shader embeds a `GradientUniforms` in its uniform block.\n*/\nconst gradientWgsl = `\nstruct GradientUniforms {\n info : vec4<f32>, // x = type (0 none, 1 linear, 2 radial, 3 conic), y = stop count\n geom : vec4<f32>, // linear: cx, cy, dir.x / len, dir.y / len; radial: cx, cy, rx, ry; conic: cx, cy, from (rad)\n offsets : array<vec4<f32>, 2>,\n stops : array<vec4<f32>, 8>, // OKLab + alpha\n};\n\nfn gradientOklabToSrgb(lab: vec3<f32>) -> vec3<f32> {\n let l = pow(lab.x + 0.3963377774 * lab.y + 0.2158037573 * lab.z, 3.0);\n let m = pow(lab.x - 0.1055613458 * lab.y - 0.0638541728 * lab.z, 3.0);\n let s = pow(lab.x - 0.0894841775 * lab.y - 1.291485548 * lab.z, 3.0);\n let lin = clamp(vec3<f32>(\n 4.0767416621 * l - 3.3077115913 * m + 0.2309699292 * s,\n -1.2684380046 * l + 2.6097574011 * m - 0.3413193965 * s,\n -0.0041960863 * l - 0.7034186147 * m + 1.707614701 * s,\n ), vec3<f32>(0.0), vec3<f32>(1.0));\n let lo = lin * 12.92;\n let hi = 1.055 * pow(lin, vec3<f32>(1.0 / 2.4)) - 0.055;\n return select(hi, lo, lin <= vec3<f32>(0.0031308));\n}\n\n/// Position along the gradient (0..1, unclamped for linear/radial) at local point p.\nfn gradientT(g: GradientUniforms, p: vec2<f32>) -> f32 {\n let d = p - g.geom.xy;\n let kind = g.info.x;\n if (kind < 1.5) {\n return dot(d, g.geom.zw) + 0.5;\n }\n if (kind < 2.5) {\n return length(d / max(g.geom.zw, vec2<f32>(1e-4)));\n }\n let a = atan2(d.x, -d.y) - g.geom.z;\n return fract(a / 6.28318530718);\n}\n\n/// Straight sRGB color + alpha of the gradient at local point p.\nfn evalGradient(g: GradientUniforms, p: vec2<f32>) -> vec4<f32> {\n var offs = g.offsets;\n var stops = g.stops;\n let n = i32(g.info.y);\n let t = gradientT(g, p);\n var lab = stops[0];\n if (t > offs[0].x) {\n lab = stops[n - 1];\n for (var i = 1; i < 8; i++) {\n if (i >= n) {\n break;\n }\n let b = offs[i / 4][i % 4];\n if (t <= b) {\n let a = offs[(i - 1) / 4][(i - 1) % 4];\n let f = select(1.0, (t - a) / (b - a), b - a > 1e-5);\n lab = mix(stops[i - 1], stops[i], clamp(f, 0.0, 1.0));\n break;\n }\n }\n }\n return vec4<f32>(gradientOklabToSrgb(lab.xyz), lab.w);\n}\n`;\n/** Floats a `GradientUniforms` block takes. */\nconst GRADIENT_UNIFORM_FLOATS = 48;\n\n//#endregion\n//#region src/shaders/shape-fill.ts\nconst shapeFillWgsl = `\n${gradientWgsl}\n\nstruct Uniforms {\n transformCol0 : vec4<f32>,\n transformCol1 : vec4<f32>,\n transformCol2 : vec4<f32>,\n params : vec4<f32>, // x = opacity, y = surfaceWidth, z = surfaceHeight, w = unused\n color : vec4<f32>, // solid color (gradient.info.x = 0)\n gradient : GradientUniforms,\n};\n\n@group(0) @binding(0) var<uniform> u : Uniforms;\n\nstruct VSOut {\n @builtin(position) pos : vec4<f32>,\n @location(0) localPos : vec2<f32>,\n};\n\n@vertex fn vs(@location(0) xy : vec2<f32>) -> VSOut {\n let transform = mat3x3<f32>(u.transformCol0.xyz, u.transformCol1.xyz, u.transformCol2.xyz);\n let p = transform * vec3<f32>(xy, 1.0);\n \n let surfaceSize = u.params.yz;\n let clipX = (p.x / surfaceSize.x) * 2.0 - 1.0;\n let clipY = 1.0 - (p.y / surfaceSize.y) * 2.0;\n\n return VSOut(vec4<f32>(clipX, clipY, 0.0, 1.0), xy);\n}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n var outColor = u.color;\n if (u.gradient.info.x > 0.5) {\n outColor = evalGradient(u.gradient, in.localPos);\n }\n \n let alpha = outColor.a * u.params.x;\n if (alpha <= 0.0) {\n discard;\n }\n \n return vec4<f32>(outColor.rgb * alpha, alpha);\n}\n`;\n\n//#endregion\n//#region src/renderer2d/gradient-uniforms.ts\nconst GRADIENT_TYPE_CODE = {\n\tlinear: 1,\n\tradial: 2,\n\tconic: 3\n};\n/** The parsed gradient when `value` is a CSS gradient string. */\nfunction asGradient(value) {\n\treturn typeof value === \"string\" && value.includes(\"gradient(\") ? parseCssGradient(value) : null;\n}\n/**\n* Packs a gradient laid over `box` (local px) into `out` at `offset`\n* (`GRADIENT_UNIFORM_FLOATS` floats). Pass `null` to clear (solid fill).\n*/\nfunction packGradientUniforms(gradient, box, out, offset) {\n\tout.fill(0, offset, offset + GRADIENT_UNIFORM_FLOATS);\n\tif (!gradient) return;\n\tconst stops = limitGradientStops(gradient.stops);\n\tconst w = Math.max(box.width, .001);\n\tconst h = Math.max(box.height, .001);\n\tconst cx = box.x + gradient.center[0] * w;\n\tconst cy = box.y + gradient.center[1] * h;\n\tout[offset] = GRADIENT_TYPE_CODE[gradient.type];\n\tout[offset + 1] = stops.length;\n\tout[offset + 4] = gradient.type === \"linear\" ? box.x + w / 2 : cx;\n\tout[offset + 5] = gradient.type === \"linear\" ? box.y + h / 2 : cy;\n\tif (gradient.type === \"linear\") {\n\t\tconst r = gradient.angle * Math.PI / 180;\n\t\tconst dx = Math.sin(r);\n\t\tconst dy = -Math.cos(r);\n\t\tconst len = Math.abs(w * dx) + Math.abs(h * dy);\n\t\tout[offset + 6] = dx / len;\n\t\tout[offset + 7] = dy / len;\n\t} else if (gradient.type === \"radial\") {\n\t\tlet rx;\n\t\tlet ry;\n\t\tif (gradient.radius) [rx, ry] = gradient.radius;\n\t\telse {\n\t\t\tconst fx = Math.max(cx - box.x, box.x + w - cx);\n\t\t\tconst fy = Math.max(cy - box.y, box.y + h - cy);\n\t\t\tif (gradient.shape === \"circle\") rx = ry = Math.hypot(fx, fy);\n\t\t\telse {\n\t\t\t\trx = fx * Math.SQRT2;\n\t\t\t\try = fy * Math.SQRT2;\n\t\t\t}\n\t\t}\n\t\tout[offset + 6] = rx;\n\t\tout[offset + 7] = ry;\n\t} else out[offset + 6] = gradient.from * Math.PI / 180;\n\tstops.forEach((s, i) => {\n\t\tout[offset + 8 + i] = s.offset;\n\t});\n\tgradientStopsToOklab(stops).forEach((lab, i) => {\n\t\tout.set(lab, offset + 16 + i * 4);\n\t});\n}\n\n//#endregion\n//#region src/renderer2d/shape-fill-pipeline.ts\nvar ShapeFillPipeline = class {\n\tdevice;\n\tpipeline;\n\tuniformLayout;\n\tuniformPool;\n\tvertexPool;\n\tuniformData = new Float32Array(20 + GRADIENT_UNIFORM_FLOATS);\n\tconstructor(device, format) {\n\t\tthis.device = device;\n\t\tthis.uniformPool = new BufferPool(2048, GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST);\n\t\tthis.vertexPool = new BufferPool(8192, GPUBufferUsage.VERTEX | GPUBufferUsage.COPY_DST);\n\t\tconst module = device.createShaderModule({\n\t\t\tlabel: \"shape-fill.wgsl\",\n\t\t\tcode: shapeFillWgsl\n\t\t});\n\t\tthis.uniformLayout = createUniformLayout(device);\n\t\tthis.pipeline = createVec2Pipeline(device, {\n\t\t\tlabel: \"ShapeFillPipeline\",\n\t\t\tmodule,\n\t\t\tuniformLayout: this.uniformLayout,\n\t\t\tformat,\n\t\t\ttopology: \"triangle-list\"\n\t\t});\n\t}\n\tresetPools() {\n\t\tthis.uniformPool.reset();\n\t\tthis.vertexPool.reset();\n\t}\n\tdraw(pass, transformStack, vertices, fill, bounds, surfaceWidth, surfaceHeight, opts) {\n\t\tif (vertices.length < 6 || fill.type === \"none\") return;\n\t\tconst opacity = opts?.opacity ?? 1;\n\t\ttransformStack.packIntoBuffer(this.uniformData, opacity, surfaceWidth, surfaceHeight, opts?.transform);\n\t\tthis.uniformData[15] = 0;\n\t\tconst css = asGradient(fill.color);\n\t\tif (css) {\n\t\t\tthis.uniformData.fill(0, 16, 20);\n\t\t\tpackGradientUniforms(css, bounds, this.uniformData, 20);\n\t\t} else {\n\t\t\tconst c1 = parseColor(fill.color ?? \"#ffffff\");\n\t\t\tthis.uniformData[16] = c1.r;\n\t\t\tthis.uniformData[17] = c1.g;\n\t\t\tthis.uniformData[18] = c1.b;\n\t\t\tthis.uniformData[19] = c1.a;\n\t\t\tthis.packTwoColorGradient(fill, bounds, c1);\n\t\t}\n\t\tconst uniformBuffer = this.uniformPool.getBuffer(this.device, this.uniformData);\n\t\tconst vertexBuffer = this.vertexPool.getBuffer(this.device, vertices);\n\t\tpass.setPipeline(this.pipeline);\n\t\tpass.setBindGroup(0, this.device.createBindGroup({\n\t\t\tlayout: this.uniformLayout,\n\t\t\tentries: [{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: { buffer: uniformBuffer }\n\t\t\t}]\n\t\t}));\n\t\tpass.setVertexBuffer(0, vertexBuffer);\n\t\tpass.draw(vertices.length / 2);\n\t}\n\t/** The `type: \"linear\" | \"radial\"` two-color fill (color → color2). */\n\tpackTwoColorGradient(fill, bounds, c1) {\n\t\tconst o = 20;\n\t\tthis.uniformData.fill(0, o, o + GRADIENT_UNIFORM_FLOATS);\n\t\tif (fill.type !== \"linear\" && fill.type !== \"radial\") return;\n\t\tconst c2 = parseColor(fill.color2 ?? fill.color ?? \"#ffffff\");\n\t\tconst d = this.uniformData;\n\t\tif (fill.type === \"linear\") {\n\t\t\tconst x0 = fill.startX ?? bounds.x;\n\t\t\tconst y0 = fill.startY ?? bounds.y;\n\t\t\tconst x1 = fill.endX ?? bounds.x + bounds.width;\n\t\t\tconst y1 = fill.endY ?? bounds.y + bounds.height;\n\t\t\tconst dx = x1 - x0;\n\t\t\tconst dy = y1 - y0;\n\t\t\tconst lenSq = Math.max(dx * dx + dy * dy, 1e-6);\n\t\t\td.set([\n\t\t\t\t1,\n\t\t\t\t2,\n\t\t\t\t0,\n\t\t\t\t0,\n\t\t\t\t(x0 + x1) / 2,\n\t\t\t\t(y0 + y1) / 2,\n\t\t\t\tdx / lenSq,\n\t\t\t\tdy / lenSq\n\t\t\t], o);\n\t\t} else {\n\t\t\tconst r = fill.radius ?? Math.max(bounds.width, bounds.height) / 2;\n\t\t\td.set([\n\t\t\t\t2,\n\t\t\t\t2,\n\t\t\t\t0,\n\t\t\t\t0,\n\t\t\t\tfill.cx ?? bounds.x + bounds.width / 2,\n\t\t\t\tfill.cy ?? bounds.y + bounds.height / 2,\n\t\t\t\tr,\n\t\t\t\tr\n\t\t\t], o);\n\t\t}\n\t\td[o + 8] = 0;\n\t\td[o + 9] = 1;\n\t\tconst lab = gradientStopsToOklab([{\n\t\t\toffset: 0,\n\t\t\tcolor: [\n\t\t\t\tc1.r,\n\t\t\t\tc1.g,\n\t\t\t\tc1.b,\n\t\t\t\tc1.a\n\t\t\t]\n\t\t}, {\n\t\t\toffset: 1,\n\t\t\tcolor: [\n\t\t\t\tc2.r,\n\t\t\t\tc2.g,\n\t\t\t\tc2.b,\n\t\t\t\tc2.a\n\t\t\t]\n\t\t}]);\n\t\td.set(lab[0], o + 16);\n\t\td.set(lab[1], o + 20);\n\t}\n\tdestroy() {\n\t\tthis.uniformPool.destroy();\n\t\tthis.vertexPool.destroy();\n\t}\n};\n\n//#endregion\n//#region src/shaders/solid.ts\nconst solidWgsl = `\n${gradientWgsl}\n\nstruct Uniforms {\n transformCol0 : vec4<f32>,\n transformCol1 : vec4<f32>,\n transformCol2 : vec4<f32>,\n params : vec4<f32>, // x = opacity, y = surfaceWidth, z = surfaceHeight, w = cornerRadius\n color : vec4<f32>,\n rect : vec4<f32>, // x, y, width, height\n gradient : GradientUniforms, // info.x = 0: solid \\`color\\`\n};\n\n@group(0) @binding(0) var<uniform> u : Uniforms;\n\nstruct VSOut {\n @builtin(position) pos : vec4<f32>,\n @location(0) localPos : vec2<f32>,\n};\n\n@vertex fn vs(@location(0) xy : vec2<f32>) -> VSOut {\n let transform = mat3x3<f32>(u.transformCol0.xyz, u.transformCol1.xyz, u.transformCol2.xyz);\n let p = transform * vec3<f32>(xy, 1.0);\n \n let surfaceSize = u.params.yz;\n let clipX = (p.x / surfaceSize.x) * 2.0 - 1.0;\n let clipY = 1.0 - (p.y / surfaceSize.y) * 2.0;\n\n return VSOut(vec4<f32>(clipX, clipY, 0.0, 1.0), xy);\n}\n\nfn sdRoundedRect(p: vec2<f32>, b: vec2<f32>, r: f32) -> f32 {\n let q = abs(p) - b + r;\n return min(max(q.x, q.y), 0.0) + length(max(q, vec2<f32>(0.0))) - r;\n}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n let center = u.rect.xy + u.rect.zw * 0.5;\n let halfSize = u.rect.zw * 0.5;\n let radius = u.params.w;\n \n let d = sdRoundedRect(in.localPos - center, halfSize, radius);\n let edgeAlpha = 1.0 - smoothstep(0.0, 1.0, d);\n var fill = u.color;\n if (u.gradient.info.x > 0.5) {\n fill = evalGradient(u.gradient, in.localPos);\n }\n let alpha = fill.a * u.params.x * edgeAlpha;\n if (alpha <= 0.0) {\n discard;\n }\n \n return vec4<f32>(fill.rgb * alpha, alpha);\n}\n`;\n\n//#endregion\n//#region src/renderer2d/solid-pipeline.ts\nvar SolidPipeline = class {\n\tdevice;\n\tpipeline;\n\tuniformLayout;\n\tuniformPool;\n\tvertexPool;\n\tuniformBindGroupCache = new UniformBindGroupCache();\n\tuniformData = new Float32Array(24 + GRADIENT_UNIFORM_FLOATS);\n\tvertexData = new Float32Array(8);\n\tconstructor(device, format) {\n\t\tthis.device = device;\n\t\tthis.uniformPool = new BufferPool(1024, GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST);\n\t\tthis.vertexPool = new BufferPool(256, GPUBufferUsage.VERTEX | GPUBufferUsage.COPY_DST);\n\t\tconst module = device.createShaderModule({\n\t\t\tlabel: \"solid.wgsl\",\n\t\t\tcode: solidWgsl\n\t\t});\n\t\tthis.uniformLayout = createUniformLayout(device);\n\t\tthis.pipeline = createVec2Pipeline(device, {\n\t\t\tlabel: \"SolidPipeline\",\n\t\t\tmodule,\n\t\t\tuniformLayout: this.uniformLayout,\n\t\t\tformat,\n\t\t\ttopology: \"triangle-strip\"\n\t\t});\n\t}\n\tresetPools() {\n\t\tthis.uniformPool.reset();\n\t\tthis.vertexPool.reset();\n\t}\n\tdraw(pass, transformStack, rect, color, surfaceWidth, surfaceHeight, cornerRadius = 0, opts) {\n\t\tconst gradient = asGradient(color);\n\t\tconst c = gradient ? {\n\t\t\tr: 0,\n\t\t\tg: 0,\n\t\t\tb: 0,\n\t\t\ta: 1\n\t\t} : parseColor(color);\n\t\tconst opacity = opts?.opacity ?? 1;\n\t\ttransformStack.packIntoBuffer(this.uniformData, opacity, surfaceWidth, surfaceHeight, opts?.transform);\n\t\tthis.uniformData[15] = cornerRadius;\n\t\tthis.uniformData[16] = c.r;\n\t\tthis.uniformData[17] = c.g;\n\t\tthis.uniformData[18] = c.b;\n\t\tthis.uniformData[19] = c.a;\n\t\tthis.uniformData[20] = rect.x;\n\t\tthis.uniformData[21] = rect.y;\n\t\tthis.uniformData[22] = rect.width;\n\t\tthis.uniformData[23] = rect.height;\n\t\tpackGradientUniforms(gradient, rect, this.uniformData, 24);\n\t\tconst uniformBuffer = this.uniformPool.getBuffer(this.device, this.uniformData);\n\t\tthis.vertexData[0] = rect.x;\n\t\tthis.vertexData[1] = rect.y;\n\t\tthis.vertexData[2] = rect.x + rect.width;\n\t\tthis.vertexData[3] = rect.y;\n\t\tthis.vertexData[4] = rect.x;\n\t\tthis.vertexData[5] = rect.y + rect.height;\n\t\tthis.vertexData[6] = rect.x + rect.width;\n\t\tthis.vertexData[7] = rect.y + rect.height;\n\t\tconst vertexBuffer = this.vertexPool.getBuffer(this.device, this.vertexData);\n\t\tpass.setPipeline(this.pipeline);\n\t\tconst uniformBindGroup = this.uniformBindGroupCache.getBindGroup(this.device, this.uniformLayout, uniformBuffer);\n\t\tpass.setBindGroup(0, uniformBindGroup);\n\t\tpass.setVertexBuffer(0, vertexBuffer);\n\t\tpass.draw(4);\n\t}\n\tdestroy() {\n\t\tthis.uniformPool.destroy();\n\t\tthis.vertexPool.destroy();\n\t\tthis.uniformBindGroupCache.destroy();\n\t}\n};\n\n//#endregion\n//#region src/renderer2d/transform-stack.ts\nvar TransformStack = class {\n\tstack = [new DOMMatrix()];\n\tpush(matrix) {\n\t\tconst next = this.stack[this.stack.length - 1].multiply(matrix);\n\t\tthis.stack.push(next);\n\t}\n\tpop() {\n\t\tif (this.stack.length > 1) this.stack.pop();\n\t}\n\tgetCurrent() {\n\t\treturn this.stack[this.stack.length - 1];\n\t}\n\tpackIntoBuffer(bufferData, opacity, surfaceWidth, surfaceHeight, localOverride, customParam) {\n\t\tlet m = this.getCurrent();\n\t\tif (localOverride) m = m.multiply(localOverride);\n\t\tbufferData[0] = m.a;\n\t\tbufferData[1] = m.b;\n\t\tbufferData[2] = 0;\n\t\tbufferData[3] = 0;\n\t\tbufferData[4] = m.c;\n\t\tbufferData[5] = m.d;\n\t\tbufferData[6] = 0;\n\t\tbufferData[7] = 0;\n\t\tbufferData[8] = m.e;\n\t\tbufferData[9] = m.f;\n\t\tbufferData[10] = 1;\n\t\tbufferData[11] = 0;\n\t\tbufferData[12] = opacity;\n\t\tbufferData[13] = surfaceWidth;\n\t\tbufferData[14] = surfaceHeight;\n\t\tbufferData[15] = customParam ?? 0;\n\t}\n\tdestroy() {\n\t\tthis.stack = [new DOMMatrix()];\n\t}\n};\n\n//#endregion\n//#region src/renderer2d/index.ts\nfunction premultiplyClearColor(color) {\n\tif (Array.isArray(color)) {\n\t\tconst a$1 = color[3] ?? 1;\n\t\treturn [\n\t\t\tcolor[0] * a$1,\n\t\t\tcolor[1] * a$1,\n\t\t\tcolor[2] * a$1,\n\t\t\ta$1\n\t\t];\n\t}\n\tif (\"r\" in color) {\n\t\tconst a$1 = color.a ?? 1;\n\t\treturn {\n\t\t\tr: color.r * a$1,\n\t\t\tg: color.g * a$1,\n\t\t\tb: color.b * a$1,\n\t\t\ta: a$1\n\t\t};\n\t}\n\tconst arr = Array.from(color);\n\tconst a = arr[3] ?? 1;\n\treturn [\n\t\tarr[0] * a,\n\t\tarr[1] * a,\n\t\tarr[2] * a,\n\t\ta\n\t];\n}\nconst deviceRenderer2DCache = /* @__PURE__ */ new WeakMap();\nfunction getRenderer2D(device, format) {\n\tlet r2d = deviceRenderer2DCache.get(device);\n\tif (!r2d || r2d.format !== format || r2d.isDestroyed) {\n\t\tr2d = new Renderer2D(device, format);\n\t\tdeviceRenderer2DCache.set(device, r2d);\n\t}\n\tr2d.resetPools();\n\treturn r2d;\n}\nvar Renderer2D = class {\n\tdevice;\n\ttransformStack = new TransformStack();\n\tclipStack = new ClipStack();\n\tquadPipeline;\n\tsolidPipeline;\n\tshapeFillPipeline;\n\tpathPipeline;\n\teffectPipeline;\n\tslugPipeline;\n\tbindGroupCache = new BindGroupCache();\n\tsamplerCache = new SamplerCache();\n\tformat;\n\tisDestroyed = false;\n\t/**\n\t* Non-glyph draws issued so far. A 3D text layer compares it across its\n\t* content to learn whether anything besides captured glyphs (a backdrop,\n\t* an emoji) landed in its texture.\n\t*/\n\trasterDrawCount = 0;\n\tsurfaceWidth = 0;\n\tsurfaceHeight = 0;\n\tlastEncoder = null;\n\tconstructor(device, format) {\n\t\tthis.device = device;\n\t\tthis.format = format;\n\t\tthis.quadPipeline = new QuadPipeline(device, format);\n\t\tthis.solidPipeline = new SolidPipeline(device, format);\n\t\tthis.shapeFillPipeline = new ShapeFillPipeline(device, format);\n\t\tthis.pathPipeline = new PathPipeline(device, format);\n\t\tthis.effectPipeline = new EffectPipeline(device, format);\n\t\tthis.slugPipeline = new SlugPipeline(device, format);\n\t}\n\tbeginFrame(encoder, targetView, clearColor = {\n\t\tr: 0,\n\t\tg: 0,\n\t\tb: 0,\n\t\ta: 0\n\t}, surfaceWidth, surfaceHeight, loadOp = \"clear\") {\n\t\tthis.surfaceWidth = surfaceWidth;\n\t\tthis.surfaceHeight = surfaceHeight;\n\t\tif (encoder !== this.lastEncoder) {\n\t\t\tthis.lastEncoder = encoder;\n\t\t\tthis.resetPools();\n\t\t}\n\t\tconst pass = encoder.beginRenderPass({ colorAttachments: [{\n\t\t\tview: targetView,\n\t\t\tclearValue: premultiplyClearColor(clearColor),\n\t\t\tloadOp,\n\t\t\tstoreOp: \"store\"\n\t\t}] });\n\t\tthis.clipStack.applyScissorToPass(pass, surfaceWidth, surfaceHeight);\n\t\treturn pass;\n\t}\n\tendFrame(_encoder) {}\n\tresetPools() {\n\t\tthis.quadPipeline.resetPools();\n\t\tthis.solidPipeline.resetPools();\n\t\tthis.shapeFillPipeline.resetPools();\n\t\tthis.pathPipeline.resetPools();\n\t\tif (this.effectPipeline) this.effectPipeline.resetPools();\n\t\tthis.slugPipeline.resetPools();\n\t\ttextureCache.flushRetired(this.device);\n\t\ttextureCache.prune(this.device);\n\t}\n\tdrawTexture(pass, tex, dst, opts) {\n\t\tconst sampler = this.samplerCache.getSampler(this.device);\n\t\tconst src = {\n\t\t\tx: 0,\n\t\t\ty: 0,\n\t\t\twidth: tex.width,\n\t\t\theight: tex.height\n\t\t};\n\t\tthis.rasterDrawCount++;\n\t\tthis.quadPipeline.draw(pass, this.bindGroupCache, this.transformStack, tex, sampler, src, dst, this.surfaceWidth, this.surfaceHeight, opts);\n\t}\n\tdrawTextureRegion(pass, tex, src, dst, opts) {\n\t\tconst sampler = this.samplerCache.getSampler(this.device);\n\t\tthis.rasterDrawCount++;\n\t\tthis.quadPipeline.draw(pass, this.bindGroupCache, this.transformStack, tex, sampler, src, dst, this.surfaceWidth, this.surfaceHeight, opts);\n\t}\n\tdrawRect(pass, rect, color, cornerRadius = 0, opts) {\n\t\tlet cr = 0;\n\t\tlet effectiveOpts = opts;\n\t\tif (typeof cornerRadius === \"object\" && cornerRadius !== null) {\n\t\t\teffectiveOpts = cornerRadius;\n\t\t\tcr = 0;\n\t\t} else if (typeof cornerRadius === \"number\") cr = cornerRadius;\n\t\tthis.rasterDrawCount++;\n\t\tthis.solidPipeline.draw(pass, this.transformStack, rect, color, this.surfaceWidth, this.surfaceHeight, cr, effectiveOpts);\n\t}\n\tdrawPath(pass, pathStr, color, strokeWidth, opts) {\n\t\tthis.rasterDrawCount++;\n\t\tthis.pathPipeline.drawPath(pass, this.transformStack, pathStr, color, strokeWidth, this.surfaceWidth, this.surfaceHeight, opts);\n\t}\n\tdrawShapeFill(pass, vertices, fill, bounds, opts) {\n\t\tthis.rasterDrawCount++;\n\t\tthis.shapeFillPipeline.draw(pass, this.transformStack, vertices, fill, bounds, this.surfaceWidth, this.surfaceHeight, opts);\n\t}\n\tdrawShape(pass, config, fill, stroke, opts) {\n\t\tconst bounds = {\n\t\t\tx: 0,\n\t\t\ty: 0,\n\t\t\twidth: config.width,\n\t\t\theight: config.height\n\t\t};\n\t\tif (fill && fill.type !== \"none\") {\n\t\t\tconst tris = triangulateShape(config);\n\t\t\tif (tris.length > 0) {\n\t\t\t\tthis.drawShapeFill(pass, tris, fill, bounds, opts);\n\t\t\t\tif ((!stroke || !stroke.width || stroke.width <= 0) && (fill.type ?? \"solid\") === \"solid\" && fill.color) {\n\t\t\t\t\tconst svgPath = buildShapeSvgPath(config);\n\t\t\t\t\tif (svgPath) this.drawPath(pass, svgPath, fill.color, 1, {\n\t\t\t\t\t\t...opts,\n\t\t\t\t\t\tstrokeLineCap: \"round\"\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (stroke && stroke.width && stroke.width > 0 && stroke.color) {\n\t\t\tconst svgPath = buildShapeSvgPath(config);\n\t\t\tif (svgPath) this.drawPath(pass, svgPath, stroke.color, stroke.width, {\n\t\t\t\t...opts,\n\t\t\t\tstrokeLineCap: stroke.cap,\n\t\t\t\ttrimStart: stroke.trimStart,\n\t\t\t\ttrimEnd: stroke.trimEnd,\n\t\t\t\ttrimOffset: stroke.trimOffset,\n\t\t\t\tstrokeDashArray: stroke.dashArray,\n\t\t\t\tstrokeDashOffset: stroke.dashOffset\n\t\t\t});\n\t\t}\n\t}\n\tdrawRRect(pass, rrect, color, opts) {\n\t\tthis.drawRect(pass, rrect.rect, color, rrect.rx, opts);\n\t}\n\tgetTemporaryTexture(width, height, exclude) {\n\t\treturn this.effectPipeline.getTexture(this.device, width, height, this.format, exclude);\n\t}\n\tgetTemporaryBuffer(data) {\n\t\treturn this.effectPipeline.getBuffer(this.device, data);\n\t}\n\tcomposite(encoder, base, overlay, mode, exclude) {\n\t\treturn this.effectPipeline.composite(encoder, this.bindGroupCache, this.samplerCache, base, overlay, mode, this.format, exclude);\n\t}\n\tapplyMotionBlur(encoder, sourceTex, vx, vy, shutterAngle = 180, samples = 16, exclude) {\n\t\treturn this.effectPipeline.applyMotionBlur(encoder, this.bindGroupCache, this.samplerCache, sourceTex, vx, vy, shutterAngle, samples, this.format, exclude);\n\t}\n\tgetCurrentTransform() {\n\t\treturn this.transformStack.getCurrent();\n\t}\n\tgetTransformStack() {\n\t\treturn this.transformStack;\n\t}\n\tgetSurfaceWidth() {\n\t\treturn this.surfaceWidth;\n\t}\n\tgetSurfaceHeight() {\n\t\treturn this.surfaceHeight;\n\t}\n\tpushIdentity() {\n\t\tconst current = this.transformStack.getCurrent();\n\t\tthis.pushTransform(current.inverse());\n\t}\n\tpushTransform(matrix) {\n\t\tthis.transformStack.push(matrix);\n\t}\n\tpopTransform() {\n\t\tthis.transformStack.pop();\n\t}\n\tpushScissor(rect) {\n\t\tthis.clipStack.pushScissor(rect, this.surfaceWidth, this.surfaceHeight);\n\t}\n\tpushScissorLocal(rect) {\n\t\tconst m = this.transformStack.getCurrent();\n\t\tconst points = [\n\t\t\tm.transformPoint(new DOMPoint(rect.x, rect.y)),\n\t\t\tm.transformPoint(new DOMPoint(rect.x + rect.width, rect.y)),\n\t\t\tm.transformPoint(new DOMPoint(rect.x, rect.y + rect.height)),\n\t\t\tm.transformPoint(new DOMPoint(rect.x + rect.width, rect.y + rect.height))\n\t\t];\n\t\tconst xs = points.map((p) => p.x);\n\t\tconst ys = points.map((p) => p.y);\n\t\tlet x = Math.min(...xs);\n\t\tlet y = Math.min(...ys);\n\t\tlet width = Math.max(...xs) - x;\n\t\tlet height = Math.max(...ys) - y;\n\t\tconst current = this.clipStack.getCurrentScissor(this.surfaceWidth, this.surfaceHeight);\n\t\tif (current) {\n\t\t\tconst x1 = Math.max(x, current.x);\n\t\t\tconst y1 = Math.max(y, current.y);\n\t\t\tconst x2 = Math.min(x + width, current.x + current.width);\n\t\t\tconst y2 = Math.min(y + height, current.y + current.height);\n\t\t\tx = x1;\n\t\t\ty = y1;\n\t\t\twidth = Math.max(0, x2 - x1);\n\t\t\theight = Math.max(0, y2 - y1);\n\t\t}\n\t\tthis.clipStack.pushScissor({\n\t\t\tx,\n\t\t\ty,\n\t\t\twidth,\n\t\t\theight\n\t\t}, this.surfaceWidth, this.surfaceHeight);\n\t}\n\tpopScissor() {\n\t\tthis.clipStack.popScissor();\n\t}\n\tsuspendScissors() {\n\t\tconst saved = this.clipStack.saveScissors();\n\t\tthis.clipStack.clearScissors();\n\t\treturn saved;\n\t}\n\tresumeScissors(saved) {\n\t\tthis.clipStack.restoreScissors(saved);\n\t}\n\tpushStencilClip(path$1) {\n\t\tthis.clipStack.pushStencilClip(path$1);\n\t}\n\tpopStencilClip() {\n\t\tthis.clipStack.popStencilClip();\n\t}\n\tdestroy() {\n\t\tthis.isDestroyed = true;\n\t\tthis.transformStack.destroy();\n\t\tthis.clipStack.destroy();\n\t\tthis.bindGroupCache.destroy();\n\t\tthis.samplerCache.destroy();\n\t\tthis.quadPipeline.destroy();\n\t\tthis.solidPipeline.destroy();\n\t\tthis.shapeFillPipeline.destroy();\n\t\tthis.pathPipeline.destroy();\n\t\tthis.effectPipeline.destroy();\n\t\tthis.slugPipeline.destroy();\n\t\tthis.lastEncoder = null;\n\t}\n};\n\n//#endregion\n//#region src/shaders/screen-space-relight.ts\n/**\n* @file shaders/screen-space-relight.ts\n* Screen-Space Normal Map 3D Relighting WGSL Shader\n* Casts dynamic multi-light Blinn-Phong illumination (Ambient, Directional, Point, Spot)\n* across 2D generative video and media layers using reconstructed surface normals.\n*/\nconst screenSpaceRelightWgsl = `\nstruct RelightMaterialUniforms {\n // vec4 0\n roughness : f32,\n specularStrength : f32,\n metallic : f32,\n ambientIntensity : f32,\n\n // vec4 1\n depthScale : f32,\n depthInvert : f32,\n hasNormalMap : f32,\n volumetricDensity: f32,\n\n // vec4 2\n viewportWidth : f32,\n viewportHeight : f32,\n shininess : f32,\n opacity : f32,\n\n // vec4 3\n layerX : f32,\n layerY : f32,\n _pad0 : f32,\n _pad1 : f32,\n};\n\nstruct GPULight {\n posType : vec4<f32>, // xyz = position, w = type (0=ambient, 1=directional, 2=point, 3=spot)\n dirRadius : vec4<f32>, // xyz = normalized direction, w = radius\n colorIntensity : vec4<f32>, // rgb = linear color, w = intensity\n spotParams : vec4<f32>, // x = cos(outer), y = cos(inner), z = decay, w = 0\n};\n\nstruct LightsUniforms {\n ambientColor : vec4<f32>,\n params : vec4<f32>, // x = lightCount, y = hasLights (1=lit, 0=unlit)\n lights : array<GPULight, 8>,\n};\n\n@group(0) @binding(0) var<uniform> mat : RelightMaterialUniforms;\n@group(1) @binding(0) var<uniform> lights : LightsUniforms;\n\n@group(2) @binding(0) var albedoTex : texture_2d<f32>;\n@group(2) @binding(1) var albedoSamp : sampler;\n@group(2) @binding(2) var normalTex : texture_2d<f32>;\n@group(2) @binding(3) var normalSamp : sampler;\n\nstruct VSOut {\n @builtin(position) pos : vec4<f32>,\n @location(0) uv : vec2<f32>,\n};\n\n@vertex fn vs(@builtin(vertex_index) vi: u32) -> VSOut {\n var pos = array<vec2<f32>, 4>(\n vec2<f32>(-1.0, 1.0),\n vec2<f32>( 1.0, 1.0),\n vec2<f32>(-1.0, -1.0),\n vec2<f32>( 1.0, -1.0)\n );\n var uv = array<vec2<f32>, 4>(\n vec2<f32>(0.0, 0.0),\n vec2<f32>(1.0, 0.0),\n vec2<f32>(0.0, 1.0),\n vec2<f32>(1.0, 1.0)\n );\n return VSOut(vec4<f32>(pos[vi], 0.0, 1.0), uv[vi]);\n}\n\n@fragment fn fs(in: VSOut) -> @location(0) vec4<f32> {\n let albedo = textureSampleLevel(albedoTex, albedoSamp, in.uv, 0.0);\n if (albedo.a <= 0.001) {\n return vec4<f32>(0.0);\n }\n\n // Normal unpacking: [0, 1] -> [-1, 1]\n var N = vec3<f32>(0.0, 0.0, 1.0);\n if (mat.hasNormalMap > 0.5) {\n let rawNormal = textureSampleLevel(normalTex, normalSamp, in.uv, 0.0).xyz;\n let unpacked = rawNormal * 2.0 - 1.0;\n N = normalize(vec3<f32>(unpacked.x, unpacked.y, max(unpacked.z, 0.05)));\n }\n\n let V = vec3<f32>(0.0, 0.0, 1.0);\n let pSurface = vec3<f32>(\n mat.layerX + in.uv.x * mat.viewportWidth,\n mat.layerY + in.uv.y * mat.viewportHeight,\n 0.0\n );\n\n // If scene lights are not declared, output base albedo unmodified\n if (lights.params.y < 0.5) {\n return vec4<f32>(albedo.rgb * mat.opacity, albedo.a * mat.opacity);\n }\n\n let numLights = u32(min(lights.params.x, 8.0));\n var ambientAccum = lights.ambientColor.rgb * mat.ambientIntensity;\n var directDiffuseAccum = vec3<f32>(0.0);\n var directSpecularAccum = vec3<f32>(0.0);\n\n let roughness = clamp(mat.roughness, 0.02, 1.0);\n let specPower = max(2.0, 2.0 / (roughness * roughness) - 2.0);\n\n for (var i = 0u; i < 8u; i = i + 1u) {\n if (i >= numLights) {\n break;\n }\n\n let light = lights.lights[i];\n let lightType = light.posType.w;\n let lightColor = light.colorIntensity.rgb;\n let intensity = light.colorIntensity.w;\n\n var L = vec3<f32>(0.0, 0.0, 1.0);\n var attenuation: f32 = 1.0;\n\n if (lightType > 0.5 && lightType < 1.5) {\n // Directional Light\n L = normalize(-light.dirRadius.xyz);\n } else if (lightType >= 1.5) {\n // Point or Spot Light\n let lightPosCanvas = light.posType.xyz;\n let toLight = lightPosCanvas - pSurface;\n let dist = length(toLight);\n let radius = max(10.0, light.dirRadius.w);\n\n if (dist > radius * 2.0) {\n continue;\n }\n\n L = normalize(toLight);\n let dNorm = clamp(dist / radius, 0.0, 1.0);\n let decay = max(0.5, light.spotParams.z);\n attenuation = pow(clamp(1.0 - dNorm, 0.0, 1.0), decay) / (1.0 + dNorm * dNorm);\n\n if (lightType > 2.5) {\n // Spot Light\n let spotDir = normalize(light.dirRadius.xyz);\n let cosAngle = dot(-L, spotDir);\n let cosOuter = light.spotParams.x;\n let cosInner = light.spotParams.y;\n\n if (cosAngle < cosOuter) {\n continue;\n }\n let spotFalloff = smoothstep(cosOuter, cosInner, cosAngle);\n attenuation *= spotFalloff;\n }\n } else {\n // Ambient light in array\n ambientAccum += lightColor * (intensity * mat.ambientIntensity);\n continue;\n }\n\n let NdotL = max(dot(N, L), 0.0);\n let diffuse = lightColor * (NdotL * intensity * attenuation);\n directDiffuseAccum += diffuse;\n\n let H = normalize(L + V);\n let NdotH = max(dot(N, H), 0.0);\n let specularFactor = pow(NdotH, specPower) * mat.specularStrength * intensity * attenuation;\n let specColor = mix(lightColor, lightColor * albedo.rgb, mat.metallic);\n directSpecularAccum += specColor * specularFactor;\n }\n\n let finalColor = albedo.rgb * (ambientAccum + directDiffuseAccum) + directSpecularAccum;\n let outOpacity = albedo.a * mat.opacity;\n\n // Premultiplied alpha return\n return vec4<f32>(finalColor * outOpacity, outOpacity);\n}\n`;\n\n//#endregion\n//#region src/renderer2d/screen-space-relight-pipeline.ts\n/**\n* @file renderer2d/screen-space-relight-pipeline.ts\n* WebGPU Render Pipeline for Screen-Space Normal 3D Relighting\n* Evaluates dynamic scene lights (Ambient, Directional, Point, Spot) against 2D albedo\n* and surface normal maps in real-time.\n*/\nvar ScreenSpaceRelightPipeline = class {\n\tdevice;\n\tformat;\n\tmaterialLayout;\n\tlightsLayout;\n\ttexturesLayout;\n\tpipeline;\n\tmaterialPool;\n\tlinearSampler;\n\tdefaultFlatNormalTex;\n\tconstructor(device, format = \"rgba8unorm\") {\n\t\tthis.device = device;\n\t\tthis.format = format;\n\t\tthis.materialPool = new BufferPool(64, GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST);\n\t\tthis.linearSampler = device.createSampler({\n\t\t\tlabel: \"relight_linear_sampler\",\n\t\t\tmagFilter: \"linear\",\n\t\t\tminFilter: \"linear\",\n\t\t\taddressModeU: \"clamp-to-edge\",\n\t\t\taddressModeV: \"clamp-to-edge\"\n\t\t});\n\t\tthis.materialLayout = device.createBindGroupLayout({\n\t\t\tlabel: \"relight_material_layout\",\n\t\t\tentries: [{\n\t\t\t\tbinding: 0,\n\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\tbuffer: { type: \"uniform\" }\n\t\t\t}]\n\t\t});\n\t\tthis.lightsLayout = device.createBindGroupLayout({\n\t\t\tlabel: \"relight_lights_layout\",\n\t\t\tentries: [{\n\t\t\t\tbinding: 0,\n\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\tbuffer: { type: \"uniform\" }\n\t\t\t}]\n\t\t});\n\t\tthis.texturesLayout = device.createBindGroupLayout({\n\t\t\tlabel: \"relight_textures_layout\",\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\t\ttexture: { sampleType: \"float\" }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\t\tsampler: { type: \"filtering\" }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\t\ttexture: { sampleType: \"float\" }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 3,\n\t\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\t\tsampler: { type: \"filtering\" }\n\t\t\t\t}\n\t\t\t]\n\t\t});\n\t\tconst shaderModule = device.createShaderModule({\n\t\t\tlabel: \"screen_space_relight.wgsl\",\n\t\t\tcode: screenSpaceRelightWgsl\n\t\t});\n\t\tconst pipelineLayout = device.createPipelineLayout({\n\t\t\tlabel: \"screen_space_relight_pipeline_layout\",\n\t\t\tbindGroupLayouts: [\n\t\t\t\tthis.materialLayout,\n\t\t\t\tthis.lightsLayout,\n\t\t\t\tthis.texturesLayout\n\t\t\t]\n\t\t});\n\t\tthis.pipeline = device.createRenderPipeline({\n\t\t\tlabel: \"ScreenSpaceRelightPipeline\",\n\t\t\tlayout: pipelineLayout,\n\t\t\tvertex: {\n\t\t\t\tmodule: shaderModule,\n\t\t\t\tentryPoint: \"vs\"\n\t\t\t},\n\t\t\tfragment: {\n\t\t\t\tmodule: shaderModule,\n\t\t\t\tentryPoint: \"fs\",\n\t\t\t\ttargets: [{\n\t\t\t\t\tformat,\n\t\t\t\t\tblend: PREMULTIPLIED_OVER\n\t\t\t\t}]\n\t\t\t},\n\t\t\tprimitive: { topology: \"triangle-strip\" }\n\t\t});\n\t}\n\tgetOrCreateDefaultFlatNormalTexture() {\n\t\tif (!this.defaultFlatNormalTex) {\n\t\t\tthis.defaultFlatNormalTex = this.device.createTexture({\n\t\t\t\tlabel: \"default_flat_normal\",\n\t\t\t\tsize: [2, 2],\n\t\t\t\tformat: \"rgba8unorm\",\n\t\t\t\tusage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST\n\t\t\t});\n\t\t\tconst flatNormals = new Uint8Array([\n\t\t\t\t128,\n\t\t\t\t128,\n\t\t\t\t255,\n\t\t\t\t255,\n\t\t\t\t128,\n\t\t\t\t128,\n\t\t\t\t255,\n\t\t\t\t255,\n\t\t\t\t128,\n\t\t\t\t128,\n\t\t\t\t255,\n\t\t\t\t255,\n\t\t\t\t128,\n\t\t\t\t128,\n\t\t\t\t255,\n\t\t\t\t255\n\t\t\t]);\n\t\t\tthis.device.queue.writeTexture({ texture: this.defaultFlatNormalTex }, flatNormals, {\n\t\t\t\tbytesPerRow: 8,\n\t\t\t\trowsPerImage: 2\n\t\t\t}, [2, 2]);\n\t\t}\n\t\treturn this.defaultFlatNormalTex;\n\t}\n\tresetPools() {\n\t\tthis.materialPool.reset();\n\t}\n\texecute(encoder, targetView, albedoTexture, normalTexture, lightsBuffer, options, loadOp = \"clear\") {\n\t\tconst matData = new Float32Array(16);\n\t\tmatData[0] = options.roughness ?? .35;\n\t\tmatData[1] = options.specularStrength ?? .7;\n\t\tmatData[2] = options.metallic ?? 0;\n\t\tmatData[3] = options.ambientIntensity ?? .5;\n\t\tmatData[4] = options.depthScale ?? 1;\n\t\tmatData[5] = 0;\n\t\tmatData[6] = normalTexture ? 1 : 0;\n\t\tmatData[7] = 0;\n\t\tmatData[8] = options.viewportWidth;\n\t\tmatData[9] = options.viewportHeight;\n\t\tmatData[10] = 32;\n\t\tmatData[11] = options.opacity ?? 1;\n\t\tmatData[12] = options.layerX ?? 0;\n\t\tmatData[13] = options.layerY ?? 0;\n\t\tmatData[14] = 0;\n\t\tmatData[15] = 0;\n\t\tconst matBuffer = this.materialPool.getBuffer(this.device, matData);\n\t\tconst matBindGroup = this.device.createBindGroup({\n\t\t\tlayout: this.materialLayout,\n\t\t\tentries: [{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: { buffer: matBuffer }\n\t\t\t}]\n\t\t});\n\t\tconst lightsBindGroup = this.device.createBindGroup({\n\t\t\tlayout: this.lightsLayout,\n\t\t\tentries: [{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: { buffer: lightsBuffer }\n\t\t\t}]\n\t\t});\n\t\tconst actualNormalTex = normalTexture ?? this.getOrCreateDefaultFlatNormalTexture();\n\t\tconst texturesBindGroup = this.device.createBindGroup({\n\t\t\tlayout: this.texturesLayout,\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: albedoTexture.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: this.linearSampler\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: actualNormalTex.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 3,\n\t\t\t\t\tresource: this.linearSampler\n\t\t\t\t}\n\t\t\t]\n\t\t});\n\t\tconst pass = encoder.beginRenderPass({\n\t\t\tlabel: \"screen_space_relight_render_pass\",\n\t\t\tcolorAttachments: [{\n\t\t\t\tview: targetView,\n\t\t\t\tloadOp,\n\t\t\t\tstoreOp: \"store\",\n\t\t\t\tclearValue: {\n\t\t\t\t\tr: 0,\n\t\t\t\t\tg: 0,\n\t\t\t\t\tb: 0,\n\t\t\t\t\ta: 0\n\t\t\t\t}\n\t\t\t}]\n\t\t});\n\t\tpass.setPipeline(this.pipeline);\n\t\tpass.setBindGroup(0, matBindGroup);\n\t\tpass.setBindGroup(1, lightsBindGroup);\n\t\tpass.setBindGroup(2, texturesBindGroup);\n\t\tpass.draw(4, 1, 0, 0);\n\t\tpass.end();\n\t}\n\tdestroy() {\n\t\tthis.materialPool.destroy();\n\t\tthis.defaultFlatNormalTex?.destroy();\n\t}\n};\n\n//#endregion\n//#region src/renderer2d/text-atlas.ts\nvar TextAtlas = class {\n\tdevice;\n\ttexture;\n\tcache = /* @__PURE__ */ new Map();\n\tcurrentX = 0;\n\tcurrentY = 0;\n\trowHeight = 0;\n\tatlasSize = 8192;\n\tconstructor(device) {\n\t\tthis.device = device;\n\t\tthis.texture = device.createTexture({\n\t\t\tsize: [this.atlasSize, this.atlasSize],\n\t\t\tformat: \"rgba8unorm\",\n\t\t\tusage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST | GPUTextureUsage.RENDER_ATTACHMENT\n\t\t});\n\t}\n\tget size() {\n\t\treturn this.atlasSize;\n\t}\n\tget(key) {\n\t\treturn this.cache.get(key);\n\t}\n\tgetTexture() {\n\t\treturn this.texture;\n\t}\n\tupload(key, canvas) {\n\t\tconst width = canvas.width;\n\t\tconst height = canvas.height;\n\t\tif (width > this.atlasSize || height > this.atlasSize) throw new Error(\"Text dimensions exceed atlas size\");\n\t\tif (this.currentX + width > this.atlasSize) {\n\t\t\tthis.currentX = 0;\n\t\t\tthis.currentY += this.rowHeight;\n\t\t\tthis.rowHeight = 0;\n\t\t}\n\t\tif (this.currentY + height > this.atlasSize) {\n\t\t\tthis.currentX = 0;\n\t\t\tthis.currentY = 0;\n\t\t\tthis.rowHeight = 0;\n\t\t\tthis.cache.clear();\n\t\t}\n\t\tthis.rowHeight = Math.max(this.rowHeight, height);\n\t\tconst region = {\n\t\t\tx: this.currentX,\n\t\t\ty: this.currentY,\n\t\t\twidth,\n\t\t\theight\n\t\t};\n\t\tthis.currentX += width;\n\t\ttry {\n\t\t\tthis.device.queue.copyExternalImageToTexture({ source: canvas }, {\n\t\t\t\ttexture: this.texture,\n\t\t\t\torigin: [\n\t\t\t\t\tregion.x,\n\t\t\t\t\tregion.y,\n\t\t\t\t\t0\n\t\t\t\t],\n\t\t\t\tpremultipliedAlpha: true\n\t\t\t}, [width, height]);\n\t\t} catch {\n\t\t\tconst imgData = canvas.getContext(\"2d\").getImageData(0, 0, width, height);\n\t\t\tthis.device.queue.writeTexture({\n\t\t\t\ttexture: this.texture,\n\t\t\t\torigin: [\n\t\t\t\t\tregion.x,\n\t\t\t\t\tregion.y,\n\t\t\t\t\t0\n\t\t\t\t]\n\t\t\t}, premultiplyPixels(imgData.data), { bytesPerRow: width * 4 }, [width, height]);\n\t\t}\n\t\tconst atlasRegion = { src: region };\n\t\tthis.cache.set(key, atlasRegion);\n\t\treturn atlasRegion;\n\t}\n\tdestroy() {\n\t\tthis.texture.destroy();\n\t\tthis.cache.clear();\n\t\tthis.currentX = 0;\n\t\tthis.currentY = 0;\n\t\tthis.rowHeight = 0;\n\t}\n};\n\n//#endregion\n//#region src/shaders/audio-mesh-displace.ts\n/**\n* @file audio-mesh-displace.ts\n* WGSL compute shader for audio FFT & latent vector 3D mesh vertex displacement.\n* Processes 16-float (64-byte) vertex streams in parallel at 256 threads per workgroup.\n*/\nconst audioMeshDisplaceWgsl = `\nstruct AudioLatentBuffer {\n fftBins : array<f32, 1024>,\n bassEnergy : f32,\n drumTransient : f32,\n vocalEnergy : f32,\n timeMs : f32,\n};\n\nstruct DeformParams {\n mode : u32, // 0 = normal_extrusion, 1 = radial_pulse, 2 = harmonic_wave, 3 = twist, 4 = ripple\n freqMinBin : u32,\n freqMaxBin : u32,\n vertexCount : u32,\n amplitudeMultiplier : f32,\n damping : f32,\n timeMs : f32,\n pad : f32,\n};\n\nstruct VertexData {\n // 16 floats = 64 bytes per vertex\n f : array<f32, 16>,\n};\n\n@group(0) @binding(0) var<storage, read> audio : AudioLatentBuffer;\n@group(0) @binding(1) var<uniform> params : DeformParams;\n@group(0) @binding(2) var<storage, read> srcVertices : array<VertexData>;\n@group(0) @binding(3) var<storage, read_write> dstVertices : array<VertexData>;\n\n@compute @workgroup_size(256)\nfn cs_displace(@builtin(global_invocation_id) gid : vec3<u32>) {\n let idx = gid.x;\n if (idx >= params.vertexCount) {\n return;\n }\n\n let src = srcVertices[idx];\n var outV = src;\n\n // Extract attributes\n let pos = vec3<f32>(src.f[0], src.f[1], src.f[2]);\n let uv = vec2<f32>(src.f[3], src.f[4]);\n var norm = vec3<f32>(src.f[5], src.f[6], src.f[7]);\n\n let normLen = length(norm);\n if (normLen > 0.0001) {\n norm = norm / normLen;\n } else {\n norm = vec3<f32>(0.0, 1.0, 0.0);\n }\n\n // Determine frequency bin\n let minBin = max(0u, params.freqMinBin);\n let maxBin = min(1023u, max(minBin, params.freqMaxBin));\n let freqNorm = clamp(uv.x, 0.0, 1.0);\n let binIdx = u32(clamp(f32(minBin) + freqNorm * f32(maxBin - minBin), 0.0, 1023.0));\n let freqAmplitude = audio.fftBins[binIdx];\n\n var displacedPos = pos;\n var displacedNorm = norm;\n\n if (params.mode == 0u) {\n // Mode 0: normal_extrusion\n let bassOsc = sin(params.timeMs * 0.01 + pos.y * 0.5);\n let displacementMag = (freqAmplitude * 45.0 + audio.bassEnergy * 20.0 * bassOsc) * params.amplitudeMultiplier;\n displacedPos = pos + norm * displacementMag;\n\n // Dynamic normal perturbation based on spatial gradient\n let tangentDelta = cos(params.timeMs * 0.01 + pos.y * 0.5) * 0.5 * audio.bassEnergy * params.amplitudeMultiplier;\n var perturbed = norm + vec3<f32>(0.0, -tangentDelta * 0.05, 0.0);\n let pLen = length(perturbed);\n if (pLen > 0.0001) {\n displacedNorm = perturbed / pLen;\n }\n } else if (params.mode == 1u) {\n // Mode 1: radial_pulse\n let rLen = length(pos);\n var dir = norm;\n if (rLen > 0.0001) {\n dir = pos / rLen;\n }\n let pulse = (audio.bassEnergy * 35.0 + audio.drumTransient * 45.0) * params.amplitudeMultiplier;\n let dampingFactor = exp(-max(0.0, params.damping) * rLen * 0.01);\n displacedPos = pos + dir * (pulse * dampingFactor);\n displacedNorm = norm;\n } else if (params.mode == 3u) {\n // Mode 3: twist. Each slice turns about Y by its height times the\n // twist rate; a resting twist plus the bass, so it winds on the drop.\n let rate = (0.35 + audio.bassEnergy) * 0.004 * params.amplitudeMultiplier;\n let a = pos.y * rate;\n let c = cos(a);\n let s = sin(a);\n displacedPos = vec3<f32>(c * pos.x - s * pos.z, pos.y, s * pos.x + c * pos.z);\n displacedNorm = vec3<f32>(c * norm.x - s * norm.z, norm.y, s * norm.x + c * norm.z);\n } else if (params.mode == 4u) {\n // Mode 4: ripple. Concentric waves travel out across XY from the\n // origin, struck harder by the drums and fading with distance.\n let r = length(pos.xy);\n let phase = r * 0.05 - params.timeMs * 0.015;\n let height = (6.0 + audio.drumTransient * 28.0 + audio.bassEnergy * 10.0) * params.amplitudeMultiplier;\n let fade = exp(-max(0.0, params.damping) * r * 0.002);\n displacedPos = pos + norm * (sin(phase) * height * fade);\n // The wave's slope tilts the normal toward the travel direction.\n var radial = vec3<f32>(0.0, 0.0, 0.0);\n if (r > 0.0001) {\n radial = vec3<f32>(pos.x / r, pos.y / r, 0.0);\n }\n let slope = cos(phase) * 0.05 * height * fade;\n var perturbed = norm - radial * slope;\n let pLen = length(perturbed);\n if (pLen > 0.0001) {\n displacedNorm = perturbed / pLen;\n }\n } else {\n // Mode 2: harmonic_wave\n let wavePhase = params.timeMs * 0.005 + pos.y * 0.2;\n let wave = (sin(wavePhase) * audio.bassEnergy * 25.0 + cos(wavePhase * 2.0 + pos.x * 0.1) * freqAmplitude * 20.0) * params.amplitudeMultiplier;\n displacedPos = pos + norm * wave;\n\n let dWaveDy = cos(wavePhase) * 0.2 * audio.bassEnergy * 25.0 * params.amplitudeMultiplier;\n var perturbed = norm - vec3<f32>(0.0, dWaveDy * 0.03, 0.0);\n let pLen = length(perturbed);\n if (pLen > 0.0001) {\n displacedNorm = perturbed / pLen;\n }\n }\n\n // Write deformed position and normal\n outV.f[0] = displacedPos.x;\n outV.f[1] = displacedPos.y;\n outV.f[2] = displacedPos.z;\n\n outV.f[5] = displacedNorm.x;\n outV.f[6] = displacedNorm.y;\n outV.f[7] = displacedNorm.z;\n\n dstVertices[idx] = outV;\n}\n`;\n\n//#endregion\n//#region src/renderer3d/audio-mesh-deform-pipeline.ts\n/** Shader mode ids (audio-mesh-displace.wgsl). */\nconst DEFORM_MODES = {\n\tnormal_extrusion: 0,\n\tradial_pulse: 1,\n\tharmonic_wave: 2,\n\ttwist: 3,\n\tripple: 4\n};\nvar AudioMeshDeformPipeline = class {\n\tdevice;\n\tpipeline;\n\tbindGroupLayout;\n\tuniformPool;\n\tdeformedBuffers = /* @__PURE__ */ new WeakMap();\n\tuniformData = /* @__PURE__ */ new ArrayBuffer(32);\n\tuniformUint32 = new Uint32Array(this.uniformData);\n\tuniformFloat32 = new Float32Array(this.uniformData);\n\tconstructor(device) {\n\t\tthis.device = device;\n\t\tthis.uniformPool = new BufferPool(32, GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST);\n\t\tthis.bindGroupLayout = device.createBindGroupLayout({\n\t\t\tlabel: \"AudioMeshDeformBindGroupLayout\",\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tvisibility: GPUShaderStage.COMPUTE,\n\t\t\t\t\tbuffer: { type: \"read-only-storage\" }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tvisibility: GPUShaderStage.COMPUTE,\n\t\t\t\t\tbuffer: { type: \"uniform\" }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tvisibility: GPUShaderStage.COMPUTE,\n\t\t\t\t\tbuffer: { type: \"read-only-storage\" }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 3,\n\t\t\t\t\tvisibility: GPUShaderStage.COMPUTE,\n\t\t\t\t\tbuffer: { type: \"storage\" }\n\t\t\t\t}\n\t\t\t]\n\t\t});\n\t\tconst shaderModule = device.createShaderModule({\n\t\t\tlabel: \"audioMeshDisplace.wgsl\",\n\t\t\tcode: audioMeshDisplaceWgsl\n\t\t});\n\t\tconst pipelineLayout = device.createPipelineLayout({\n\t\t\tlabel: \"AudioMeshDeformPipelineLayout\",\n\t\t\tbindGroupLayouts: [this.bindGroupLayout]\n\t\t});\n\t\tthis.pipeline = device.createComputePipeline({\n\t\t\tlabel: \"AudioMeshDeformComputePipeline\",\n\t\t\tlayout: pipelineLayout,\n\t\t\tcompute: {\n\t\t\t\tmodule: shaderModule,\n\t\t\t\tentryPoint: \"cs_displace\"\n\t\t\t}\n\t\t});\n\t}\n\tgetOrCreateDeformedBuffer(srcBuffer, byteLength) {\n\t\tlet dst = this.deformedBuffers.get(srcBuffer);\n\t\tif (!dst || dst.size < byteLength) {\n\t\t\tdst?.destroy();\n\t\t\tdst = this.device.createBuffer({\n\t\t\t\tlabel: \"DeformedMeshVertexBuffer\",\n\t\t\t\tsize: Math.max(64, Math.ceil(byteLength / 4) * 4),\n\t\t\t\tusage: GPUBufferUsage.VERTEX | GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST | GPUBufferUsage.COPY_SRC\n\t\t\t});\n\t\t\tthis.deformedBuffers.set(srcBuffer, dst);\n\t\t}\n\t\treturn dst;\n\t}\n\texecute(encoder, srcVertexBuffer, options) {\n\t\tconst { config, audioLatentBuffer, vertexCount, timeMs = 0, sampleRate = 48e3 } = options;\n\t\tconst byteLength = vertexCount * 64;\n\t\tconst dstVertexBuffer = this.getOrCreateDeformedBuffer(srcVertexBuffer, byteLength);\n\t\tconst modeInt = DEFORM_MODES[config.mode] ?? 0;\n\t\tconst hzPerBin = sampleRate / 2048;\n\t\tconst minHz = config.frequencyRange ? config.frequencyRange[0] : 20;\n\t\tconst maxHz = config.frequencyRange ? config.frequencyRange[1] : 120;\n\t\tconst minBin = Math.max(0, Math.min(1023, Math.round(minHz / hzPerBin)));\n\t\tconst maxBin = Math.max(minBin, Math.min(1023, Math.round(maxHz / hzPerBin)));\n\t\tconst amp = typeof config.amplitudeMultiplier === \"number\" ? config.amplitudeMultiplier : typeof config.amplitudeMultiplier?.value === \"number\" ? config.amplitudeMultiplier.value : 1;\n\t\tconst damping = config.damping ?? 0;\n\t\tthis.uniformUint32[0] = modeInt;\n\t\tthis.uniformUint32[1] = minBin;\n\t\tthis.uniformUint32[2] = maxBin;\n\t\tthis.uniformUint32[3] = vertexCount;\n\t\tthis.uniformFloat32[4] = amp;\n\t\tthis.uniformFloat32[5] = damping;\n\t\tthis.uniformFloat32[6] = timeMs;\n\t\tthis.uniformFloat32[7] = 0;\n\t\tconst uniformBuffer = this.uniformPool.getBuffer(this.device, new Uint8Array(this.uniformData));\n\t\tconst bindGroup = this.device.createBindGroup({\n\t\t\tlayout: this.bindGroupLayout,\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: { buffer: audioLatentBuffer }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: { buffer: uniformBuffer }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: { buffer: srcVertexBuffer }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 3,\n\t\t\t\t\tresource: { buffer: dstVertexBuffer }\n\t\t\t\t}\n\t\t\t]\n\t\t});\n\t\tconst computePass = encoder.beginComputePass({ label: \"AudioMeshDeformComputePass\" });\n\t\tcomputePass.setPipeline(this.pipeline);\n\t\tcomputePass.setBindGroup(0, bindGroup);\n\t\tconst workgroups = Math.ceil(vertexCount / 256);\n\t\tcomputePass.dispatchWorkgroups(workgroups);\n\t\tcomputePass.end();\n\t\treturn dstVertexBuffer;\n\t}\n\tresetPools() {\n\t\tthis.uniformPool.reset();\n\t}\n\tdestroy() {\n\t\tthis.uniformPool.destroy();\n\t}\n};\n\n//#endregion\n//#region src/renderer3d/bloom-pipeline.ts\nconst bloomWgsl = `\nstruct BloomUniforms {\n texel : vec2<f32>, // 1 / source size\n threshold : f32,\n knee : f32,\n intensity : f32,\n mode : f32,\n _pad : vec2<f32>,\n tint : vec4<f32>,\n};\n\n@group(0) @binding(0) var<uniform> u : BloomUniforms;\n@group(0) @binding(1) var samp : sampler;\n@group(0) @binding(2) var src : texture_2d<f32>;\n@group(0) @binding(3) var base : texture_2d<f32>;\n\nstruct VsOut {\n @builtin(position) pos : vec4<f32>,\n @location(0) uv : vec2<f32>,\n};\n\n@vertex\nfn vs(@builtin(vertex_index) i : u32) -> VsOut {\n let p = vec2<f32>(f32((i << 1u) & 2u), f32(i & 2u));\n var o : VsOut;\n o.pos = vec4<f32>(p * 2.0 - 1.0, 0.0, 1.0);\n o.uv = vec2<f32>(p.x, 1.0 - p.y);\n return o;\n}\n\nfn s(uv : vec2<f32>) -> vec3<f32> {\n return textureSampleLevel(src, samp, uv, 0.0).rgb;\n}\n\n// Jimenez's 13-tap downsample (Call of Duty: AW): stable, no fireflies.\nfn down13(uv : vec2<f32>) -> vec3<f32> {\n let t = u.texel;\n let a = s(uv + t * vec2<f32>(-2.0, -2.0));\n let b = s(uv + t * vec2<f32>(0.0, -2.0));\n let c = s(uv + t * vec2<f32>(2.0, -2.0));\n let d = s(uv + t * vec2<f32>(-2.0, 0.0));\n let e = s(uv);\n let f = s(uv + t * vec2<f32>(2.0, 0.0));\n let g = s(uv + t * vec2<f32>(-2.0, 2.0));\n let h = s(uv + t * vec2<f32>(0.0, 2.0));\n let i = s(uv + t * vec2<f32>(2.0, 2.0));\n let j = s(uv + t * vec2<f32>(-1.0, -1.0));\n let k = s(uv + t * vec2<f32>(1.0, -1.0));\n let l = s(uv + t * vec2<f32>(-1.0, 1.0));\n let m = s(uv + t * vec2<f32>(1.0, 1.0));\n return e * 0.125 + (a + c + g + i) * 0.03125 + (b + d + f + h) * 0.0625 + (j + k + l + m) * 0.125;\n}\n\n// Soft-knee threshold (keeps hue, fades in below the threshold).\nfn prefilter(c : vec3<f32>) -> vec3<f32> {\n let br = max(c.r, max(c.g, c.b));\n let kneeW = u.threshold * u.knee + 1e-4;\n var soft = clamp(br - u.threshold + kneeW, 0.0, 2.0 * kneeW);\n soft = soft * soft / (4.0 * kneeW);\n let w = max(soft, br - u.threshold) / max(br, 1e-4);\n return c * max(w, 0.0);\n}\n\nfn srgbToLinear(c : vec3<f32>) -> vec3<f32> {\n let lo = c / 12.92;\n let hi = pow((max(c, vec3<f32>(0.0)) + 0.055) / 1.055, vec3<f32>(2.4));\n return select(hi, lo, c <= vec3<f32>(0.04045));\n}\n\nfn linearToSrgb(c : vec3<f32>) -> vec3<f32> {\n let x = clamp(c, vec3<f32>(0.0), vec3<f32>(1.0));\n let lo = x * 12.92;\n let hi = 1.055 * pow(x, vec3<f32>(1.0 / 2.4)) - 0.055;\n return select(hi, lo, x <= vec3<f32>(0.0031308));\n}\n\n// mode 0: the source is linear scene radiance; mode 1: display-encoded color.\n@fragment\nfn fs_prefilter(in : VsOut) -> @location(0) vec4<f32> {\n var c = down13(in.uv);\n if (u.mode > 0.5) {\n c = srgbToLinear(c);\n }\n return vec4<f32>(prefilter(c), 1.0);\n}\n\n@fragment\nfn fs_down(in : VsOut) -> @location(0) vec4<f32> {\n return vec4<f32>(down13(in.uv), 1.0);\n}\n\n// 3x3 tent upsample; added onto the next-larger level by the blend state.\n@fragment\nfn fs_up(in : VsOut) -> @location(0) vec4<f32> {\n let t = u.texel;\n var c = s(in.uv) * 4.0;\n c += (s(in.uv + vec2<f32>(-t.x, 0.0)) + s(in.uv + vec2<f32>(t.x, 0.0)) + s(in.uv + vec2<f32>(0.0, -t.y)) + s(in.uv + vec2<f32>(0.0, t.y))) * 2.0;\n c += s(in.uv + vec2<f32>(-t.x, -t.y)) + s(in.uv + vec2<f32>(t.x, -t.y)) + s(in.uv + vec2<f32>(-t.x, t.y)) + s(in.uv + vec2<f32>(t.x, t.y));\n return vec4<f32>(c / 16.0, 1.0);\n}\n\n// Adds the glow in linear light over the premultiplied display image.\n@fragment\nfn fs_composite(in : VsOut) -> @location(0) vec4<f32> {\n let orig = textureSampleLevel(base, samp, in.uv, 0.0);\n let glow = max(textureSampleLevel(src, samp, in.uv, 0.0).rgb * u.intensity * u.tint.rgb, vec3<f32>(0.0));\n var lin = vec3<f32>(0.0);\n if (orig.a > 0.0001) {\n lin = srgbToLinear(orig.rgb / orig.a) * orig.a;\n }\n let sum = lin + glow;\n let a = clamp(max(orig.a, max(glow.r, max(glow.g, glow.b))), 0.0, 1.0);\n if (a <= 0.0001) {\n return vec4<f32>(0.0);\n }\n return vec4<f32>(linearToSrgb(sum / a) * a, a);\n}\n`;\nconst MIP_FORMAT = \"rgba16float\";\nvar BloomPipeline = class {\n\tdevice;\n\tlayout;\n\tprefilterPipe;\n\tdownPipe;\n\tupPipe;\n\tcompositePipes = /* @__PURE__ */ new Map();\n\tmodule;\n\tpipelineLayout;\n\tsampler;\n\tmips = [];\n\tmipKey = \"\";\n\tplaceholder;\n\tuniformPool = new BufferPool(48, GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST);\n\tconstructor(device) {\n\t\tthis.device = device;\n\t\tthis.module = device.createShaderModule({\n\t\t\tlabel: \"bloom.wgsl\",\n\t\t\tcode: bloomWgsl\n\t\t});\n\t\tthis.layout = device.createBindGroupLayout({\n\t\t\tlabel: \"BloomLayout\",\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\t\tbuffer: { type: \"uniform\" }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\t\tsampler: { type: \"filtering\" }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\t\ttexture: { sampleType: \"float\" }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 3,\n\t\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\t\ttexture: { sampleType: \"float\" }\n\t\t\t\t}\n\t\t\t]\n\t\t});\n\t\tthis.pipelineLayout = device.createPipelineLayout({ bindGroupLayouts: [this.layout] });\n\t\tconst make = (entryPoint, additive) => device.createRenderPipeline({\n\t\t\tlabel: `Bloom:${entryPoint}`,\n\t\t\tlayout: this.pipelineLayout,\n\t\t\tvertex: {\n\t\t\t\tmodule: this.module,\n\t\t\t\tentryPoint: \"vs\"\n\t\t\t},\n\t\t\tfragment: {\n\t\t\t\tmodule: this.module,\n\t\t\t\tentryPoint,\n\t\t\t\ttargets: [{\n\t\t\t\t\tformat: MIP_FORMAT,\n\t\t\t\t\t...additive && { blend: {\n\t\t\t\t\t\tcolor: {\n\t\t\t\t\t\t\tsrcFactor: \"one\",\n\t\t\t\t\t\t\tdstFactor: \"one\",\n\t\t\t\t\t\t\toperation: \"add\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\talpha: {\n\t\t\t\t\t\t\tsrcFactor: \"one\",\n\t\t\t\t\t\t\tdstFactor: \"one\",\n\t\t\t\t\t\t\toperation: \"add\"\n\t\t\t\t\t\t}\n\t\t\t\t\t} }\n\t\t\t\t}]\n\t\t\t},\n\t\t\tprimitive: { topology: \"triangle-list\" }\n\t\t});\n\t\tthis.prefilterPipe = make(\"fs_prefilter\", false);\n\t\tthis.downPipe = make(\"fs_down\", false);\n\t\tthis.upPipe = make(\"fs_up\", true);\n\t\tthis.sampler = device.createSampler({\n\t\t\tlabel: \"BloomSampler\",\n\t\t\tmagFilter: \"linear\",\n\t\t\tminFilter: \"linear\",\n\t\t\taddressModeU: \"clamp-to-edge\",\n\t\t\taddressModeV: \"clamp-to-edge\"\n\t\t});\n\t\tthis.placeholder = device.createTexture({\n\t\t\tsize: {\n\t\t\t\twidth: 1,\n\t\t\t\theight: 1\n\t\t\t},\n\t\t\tformat: MIP_FORMAT,\n\t\t\tusage: GPUTextureUsage.TEXTURE_BINDING\n\t\t});\n\t}\n\tcompositePipe(format) {\n\t\tlet pipe = this.compositePipes.get(format);\n\t\tif (!pipe) {\n\t\t\tpipe = this.device.createRenderPipeline({\n\t\t\t\tlabel: \"Bloom:composite\",\n\t\t\t\tlayout: this.pipelineLayout,\n\t\t\t\tvertex: {\n\t\t\t\t\tmodule: this.module,\n\t\t\t\t\tentryPoint: \"vs\"\n\t\t\t\t},\n\t\t\t\tfragment: {\n\t\t\t\t\tmodule: this.module,\n\t\t\t\t\tentryPoint: \"fs_composite\",\n\t\t\t\t\ttargets: [{ format }]\n\t\t\t\t},\n\t\t\t\tprimitive: { topology: \"triangle-list\" }\n\t\t\t});\n\t\t\tthis.compositePipes.set(format, pipe);\n\t\t}\n\t\treturn pipe;\n\t}\n\tensureMips(width, height, levels) {\n\t\tconst key = `${width}x${height}x${levels}`;\n\t\tif (key === this.mipKey) return;\n\t\tfor (const t of this.mips) t.destroy();\n\t\tthis.mips = [];\n\t\tlet w = width;\n\t\tlet h = height;\n\t\tfor (let i = 0; i < levels; i++) {\n\t\t\tw = Math.max(1, Math.floor(w / 2));\n\t\t\th = Math.max(1, Math.floor(h / 2));\n\t\t\tthis.mips.push(this.device.createTexture({\n\t\t\t\tlabel: `BloomMip${i}`,\n\t\t\t\tsize: {\n\t\t\t\t\twidth: w,\n\t\t\t\t\theight: h\n\t\t\t\t},\n\t\t\t\tformat: MIP_FORMAT,\n\t\t\t\tusage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.TEXTURE_BINDING\n\t\t\t}));\n\t\t\tif (w === 1 && h === 1) break;\n\t\t}\n\t\tthis.mipKey = key;\n\t}\n\tuniforms(texelW, texelH, opts) {\n\t\tconst data = new Float32Array([\n\t\t\ttexelW,\n\t\t\ttexelH,\n\t\t\topts.threshold,\n\t\t\topts.knee,\n\t\t\topts.intensity,\n\t\t\topts.mode,\n\t\t\t0,\n\t\t\t0,\n\t\t\topts.tint[0],\n\t\t\topts.tint[1],\n\t\t\topts.tint[2],\n\t\t\t1\n\t\t]);\n\t\treturn this.uniformPool.getBuffer(this.device, data);\n\t}\n\tpass(encoder, pipe, target, src, base, uniform, load) {\n\t\tconst bindGroup = this.device.createBindGroup({\n\t\t\tlayout: this.layout,\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: { buffer: uniform }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: this.sampler\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: src.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 3,\n\t\t\t\t\tresource: base.createView()\n\t\t\t\t}\n\t\t\t]\n\t\t});\n\t\tconst pass = encoder.beginRenderPass({ colorAttachments: [{\n\t\t\tview: target,\n\t\t\tloadOp: load,\n\t\t\tstoreOp: \"store\",\n\t\t\tclearValue: {\n\t\t\t\tr: 0,\n\t\t\t\tg: 0,\n\t\t\t\tb: 0,\n\t\t\t\ta: 0\n\t\t\t}\n\t\t}] });\n\t\tpass.setPipeline(pipe);\n\t\tpass.setBindGroup(0, bindGroup);\n\t\tpass.draw(3);\n\t\tpass.end();\n\t}\n\t/**\n\t* Writes `source` (premultiplied, display-encoded) plus its bloom into\n\t* `dest` (same size). `hdrSource`, when given, is linear scene radiance\n\t* of the same image: glow is taken from it instead of from `source`.\n\t*/\n\tapply(encoder, source, dest, options = {}, hdrSource) {\n\t\tconst display = !hdrSource;\n\t\tconst toLinear = (v) => v <= .04045 ? v / 12.92 : ((v + .055) / 1.055) ** 2.4;\n\t\tconst threshold = options.threshold ?? (display ? .85 : 2.5);\n\t\tconst opts = {\n\t\t\tintensity: options.intensity ?? .2,\n\t\t\tthreshold: display ? toLinear(threshold) : threshold,\n\t\t\tknee: options.knee ?? .4,\n\t\t\ttint: options.tint ?? [\n\t\t\t\t1,\n\t\t\t\t1,\n\t\t\t\t1\n\t\t\t],\n\t\t\tmode: display ? 1 : 0\n\t\t};\n\t\tconst levels = Math.max(1, Math.min(8, Math.round(options.radius ?? 6)));\n\t\tthis.ensureMips(source.width, source.height, levels);\n\t\tconst mips = this.mips;\n\t\tconst u = (w, h) => this.uniforms(1 / w, 1 / h, opts);\n\t\tconst glowSource = hdrSource ?? source;\n\t\tthis.pass(encoder, this.prefilterPipe, mips[0].createView(), glowSource, this.placeholder, u(glowSource.width, glowSource.height), \"clear\");\n\t\tfor (let i = 1; i < mips.length; i++) {\n\t\t\tconst prev = mips[i - 1];\n\t\t\tthis.pass(encoder, this.downPipe, mips[i].createView(), prev, this.placeholder, u(prev.width, prev.height), \"clear\");\n\t\t}\n\t\tfor (let i = mips.length - 1; i > 0; i--) {\n\t\t\tconst small = mips[i];\n\t\t\tthis.pass(encoder, this.upPipe, mips[i - 1].createView(), small, this.placeholder, u(small.width, small.height), \"load\");\n\t\t}\n\t\tthis.pass(encoder, this.compositePipe(dest.format), dest.createView(), mips[0], source, u(mips[0].width, mips[0].height), \"clear\");\n\t}\n\t/** Call once per frame before `apply`: recycles the per-pass uniforms. */\n\tresetPools() {\n\t\tthis.uniformPool.reset();\n\t}\n\tdestroy() {\n\t\tfor (const t of this.mips) t.destroy();\n\t\tthis.placeholder.destroy();\n\t\tthis.uniformPool.destroy();\n\t}\n};\n\n//#endregion\n//#region src/shaders/pbr-glass.ts\n/**\n* @file shaders/pbr-glass.ts\n* @module @framefields/webgpu-renderers/shaders/pbr-glass\n*\n* WebGPU PBR Glass, Acrylic & Frosted Glass Refraction WGSL Shader.\n* Features Schlick Fresnel grazing rim reflectance, Snell's law refraction,\n* chromatic dispersion ray splitting (RGB), and roughness-based MIP blurring.\n*/\nconst pbrGlassWgsl = `\nstruct CameraUniforms {\n viewMatrix: mat4x4<f32>,\n projMatrix: mat4x4<f32>,\n viewProjMatrix: mat4x4<f32>,\n invViewProjMatrix: mat4x4<f32>,\n cameraPos: vec3<f32>,\n near: f32,\n cameraDir: vec3<f32>,\n far: f32,\n dofParams: vec4<f32>,\n screenParams: vec4<f32>,\n};\n\nstruct ModelUniforms {\n modelMatrix: mat4x4<f32>,\n normalMatrix: mat4x4<f32>,\n colorTint: vec4<f32>,\n params: vec4<f32>, // opacity, borderRadius, twoSided, unused\n};\n\nstruct GlassUniforms {\n // 0..15: ior, roughness, f0, transmission\n ior: f32,\n roughness: f32,\n f0: f32,\n transmission: f32,\n // 16..31: dispersion, envIntensity, fresnelPower, unused\n dispersion: f32,\n envIntensity: f32,\n fresnelPower: f32,\n _pad0: f32,\n // 32..47: viewportWidth, viewportHeight, unused, unused\n viewportWidth: f32,\n viewportHeight: f32,\n _pad1: f32,\n _pad2: f32,\n // 48..63: tint (r, g, b, a)\n tintColor: vec4<f32>,\n};\n\n@group(0) @binding(0) var<uniform> camera: CameraUniforms;\n@group(1) @binding(0) var<uniform> model: ModelUniforms;\n@group(2) @binding(0) var<uniform> glass: GlassUniforms;\n@group(3) @binding(0) var backdropSampler: sampler;\n@group(3) @binding(1) var backdropTexture: texture_2d<f32>;\n\nstruct VertexInput {\n @location(0) position: vec3<f32>,\n @location(1) uv: vec2<f32>,\n @location(2) normal: vec3<f32>,\n};\n\nstruct VertexOutput {\n @builtin(position) clipPos: vec4<f32>,\n @location(0) worldPos: vec3<f32>,\n @location(1) worldNormal: vec3<f32>,\n @location(2) uv: vec2<f32>,\n};\n\n@vertex\nfn vs_main(in: VertexInput) -> VertexOutput {\n var out: VertexOutput;\n let worldPos4 = model.modelMatrix * vec4<f32>(in.position, 1.0);\n out.worldPos = worldPos4.xyz;\n let normal4 = model.normalMatrix * vec4<f32>(in.normal, 0.0);\n out.worldNormal = normalize(normal4.xyz);\n out.uv = in.uv;\n out.clipPos = camera.viewProjMatrix * worldPos4;\n return out;\n}\n\n@fragment\nfn fs_main(in: VertexOutput) -> @location(0) vec4<f32> {\n let V = normalize(camera.cameraPos - in.worldPos);\n var N = normalize(in.worldNormal);\n \n // Dynamic normal flip for two-sided surfaces viewed from behind\n if (dot(N, V) < 0.0) {\n N = -N;\n }\n \n let NdotV = max(dot(N, V), 0.0001);\n \n // 1. Schlick Fresnel Reflectance\n let F = glass.f0 + (1.0 - glass.f0) * pow(1.0 - NdotV, max(1.0, glass.fresnelPower));\n \n // 2. Refraction Ray Direction with Chromatic Dispersion\n let ior = max(1.0, glass.ior);\n let disp = max(0.0, glass.dispersion);\n let eta_g = 1.0 / ior;\n let eta_r = 1.0 / max(1.0, ior - disp);\n let eta_b = 1.0 / (ior + disp);\n \n let R_refl = reflect(-V, N);\n let R_refr_r = refract(-V, N, eta_r);\n let R_refr_g = refract(-V, N, eta_g);\n let R_refr_b = refract(-V, N, eta_b);\n \n let screenUv = in.clipPos.xy / vec2<f32>(glass.viewportWidth, glass.viewportHeight);\n \n // 3. Screen-Space Refraction Lookup with Chromatic Aberration Offset\n let refractOffsetScale = 0.035 * (1.0 - glass.roughness * 0.4);\n let uv_r = clamp(screenUv + R_refr_r.xy * refractOffsetScale, vec2<f32>(0.001), vec2<f32>(0.999));\n let uv_g = clamp(screenUv + R_refr_g.xy * refractOffsetScale, vec2<f32>(0.001), vec2<f32>(0.999));\n let uv_b = clamp(screenUv + R_refr_b.xy * refractOffsetScale, vec2<f32>(0.001), vec2<f32>(0.999));\n \n // Roughness mip/jitter level\n let mipLevel = glass.roughness * 5.0;\n let sampleR = textureSampleLevel(backdropTexture, backdropSampler, uv_r, mipLevel).r;\n let sampleG = textureSampleLevel(backdropTexture, backdropSampler, uv_g, mipLevel).g;\n let sampleB = textureSampleLevel(backdropTexture, backdropSampler, uv_b, mipLevel).b;\n \n let transmittedColor = vec3<f32>(sampleR, sampleG, sampleB) * glass.tintColor.rgb * model.colorTint.rgb;\n \n // 4. Procedural Studio HDRI Environment Reflection (Warm key + cool rim highlights)\n let envAngle = atan2(R_refl.z, R_refl.x);\n let envElevation = R_refl.y;\n let studioKey = pow(max(0.0, dot(R_refl, normalize(vec3<f32>(0.6, 0.8, -0.5)))), 32.0) * 1.5;\n let studioRim = pow(max(0.0, dot(R_refl, normalize(vec3<f32>(-0.7, 0.3, 0.6)))), 16.0) * 0.8;\n let ambientSky = mix(vec3<f32>(0.92, 0.94, 0.98), vec3<f32>(0.98, 0.96, 0.92), envElevation * 0.5 + 0.5);\n let envColor = (ambientSky * 0.6 + vec3<f32>(1.0, 0.98, 0.95) * studioKey + vec3<f32>(0.85, 0.92, 1.0) * studioRim) * glass.envIntensity;\n \n // 5. Energy-Conserving Blend with Premultiplied Alpha\n let blendedRGB = mix(transmittedColor, envColor, F);\n let alpha = clamp((F + (1.0 - glass.transmission) * 0.6) * model.params.x, 0.0, 1.0);\n \n return vec4<f32>(blendedRGB * alpha, alpha);\n}\n`;\n\n//#endregion\n//#region src/renderer3d/pipeline-variants.ts\n/**\n* The 3D pipelines draw into one of four target sets: color; color + linear\n* depth (DoF); and either of those plus an HDR radiance target (bloom). The\n* bloom variants are built on first use from the same descriptor parts.\n*/\n/** Linear-depth MRT target (DoF) and HDR radiance target (bloom). */\nconst LINEAR_DEPTH_FORMAT = \"rgba16float\";\nconst HDR_FORMAT = \"rgba16float\";\n/** The color pipeline and the color + linear depth (DoF) pipeline of `base`. */\nfunction createBasePipelines(device, b) {\n\tconst create = (useMrt) => device.createRenderPipeline({\n\t\tlabel: `${b.label}${useMrt ? \"Mrt\" : \"Single\"}`,\n\t\tlayout: b.layout,\n\t\tvertex: b.vertex,\n\t\tfragment: {\n\t\t\tmodule: b.module,\n\t\t\tentryPoint: useMrt ? \"fs_mrt\" : \"fs_single\",\n\t\t\ttargets: [{\n\t\t\t\tformat: b.format,\n\t\t\t\tblend: PREMULTIPLIED_OVER\n\t\t\t}, ...useMrt ? [{ format: LINEAR_DEPTH_FORMAT }] : []]\n\t\t},\n\t\tdepthStencil: b.depthStencil,\n\t\tprimitive: b.primitive,\n\t\tmultisample: b.multisample\n\t});\n\treturn {\n\t\tsingle: create(false),\n\t\tmrt: create(true)\n\t};\n}\nvar BloomPipelineVariants = class {\n\tcache = /* @__PURE__ */ new Map();\n\tconstructor(device, base) {\n\t\tthis.device = device;\n\t\tthis.base = base;\n\t}\n\t/** The pipeline writing color (+ linear depth when `useMrt`) + HDR radiance. */\n\tget(useMrt) {\n\t\tlet pipe = this.cache.get(useMrt);\n\t\tif (!pipe) {\n\t\t\tconst b = this.base;\n\t\t\tpipe = this.device.createRenderPipeline({\n\t\t\t\tlabel: `${b.label}${useMrt ? \"MrtBloom\" : \"Bloom\"}`,\n\t\t\t\tlayout: b.layout,\n\t\t\t\tvertex: b.vertex,\n\t\t\t\tfragment: {\n\t\t\t\t\tmodule: b.module,\n\t\t\t\t\tentryPoint: useMrt ? \"fs_mrt_bloom\" : \"fs_single_bloom\",\n\t\t\t\t\ttargets: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tformat: b.format,\n\t\t\t\t\t\t\tblend: PREMULTIPLIED_OVER\n\t\t\t\t\t\t},\n\t\t\t\t\t\t...useMrt ? [{ format: LINEAR_DEPTH_FORMAT }] : [],\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tformat: HDR_FORMAT,\n\t\t\t\t\t\t\tblend: PREMULTIPLIED_OVER\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tdepthStencil: b.depthStencil,\n\t\t\t\tprimitive: b.primitive,\n\t\t\t\tmultisample: b.multisample\n\t\t\t});\n\t\t\tthis.cache.set(useMrt, pipe);\n\t\t}\n\t\treturn pipe;\n\t}\n};\n/**\n* Writes the shared head of a model uniform block: model matrix [0..15],\n* normal matrix [16..31] (the model matrix when absent), color tint [32..35].\n*/\nfunction writeModelTransform(out, modelMatrix, normalMatrix, colorTint) {\n\tconst norm = normalMatrix ?? modelMatrix;\n\tconst tint = colorTint ?? [\n\t\t1,\n\t\t1,\n\t\t1,\n\t\t1\n\t];\n\tfor (let i = 0; i < 16; i++) {\n\t\tout[i] = modelMatrix[i] ?? 0;\n\t\tout[16 + i] = norm[i] ?? 0;\n\t}\n\tout[32] = tint[0];\n\tout[33] = tint[1];\n\tout[34] = tint[2];\n\tout[35] = tint[3];\n}\n\n//#endregion\n//#region src/renderer3d/glass-pipeline.ts\n/**\n* @file renderer3d/glass-pipeline.ts\n* @module @framefields/webgpu-renderers/renderer3d/glass-pipeline\n*\n* WebGPU Pipeline for PBR Glass, Acrylic, Frosted & Metallic Refraction rendering.\n*/\nvar GlassPipeline = class {\n\tdevice;\n\tpipeline;\n\tcameraLayout;\n\tmodelLayout;\n\tglassLayout;\n\tbackdropLayout;\n\tmodelPool;\n\tglassPool;\n\tvertexBuffer;\n\tindexBuffer;\n\tmodelData = new Float32Array(40);\n\tglassData = new Float32Array(16);\n\tconstructor(device, format, depthFormat = \"depth24plus\", cameraLayout) {\n\t\tthis.device = device;\n\t\tthis.modelPool = new BufferPool(160, GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST);\n\t\tthis.glassPool = new BufferPool(64, GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST);\n\t\tconst module = device.createShaderModule({\n\t\t\tlabel: \"pbr-glass.wgsl\",\n\t\t\tcode: pbrGlassWgsl\n\t\t});\n\t\tthis.cameraLayout = cameraLayout ?? device.createBindGroupLayout({\n\t\t\tlabel: \"GlassCameraLayout\",\n\t\t\tentries: [{\n\t\t\t\tbinding: 0,\n\t\t\t\tvisibility: GPUShaderStage.VERTEX | GPUShaderStage.FRAGMENT,\n\t\t\t\tbuffer: { type: \"uniform\" }\n\t\t\t}]\n\t\t});\n\t\tthis.modelLayout = device.createBindGroupLayout({\n\t\t\tlabel: \"GlassModelLayout\",\n\t\t\tentries: [{\n\t\t\t\tbinding: 0,\n\t\t\t\tvisibility: GPUShaderStage.VERTEX | GPUShaderStage.FRAGMENT,\n\t\t\t\tbuffer: { type: \"uniform\" }\n\t\t\t}]\n\t\t});\n\t\tthis.glassLayout = device.createBindGroupLayout({\n\t\t\tlabel: \"GlassUniformLayout\",\n\t\t\tentries: [{\n\t\t\t\tbinding: 0,\n\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\tbuffer: { type: \"uniform\" }\n\t\t\t}]\n\t\t});\n\t\tthis.backdropLayout = device.createBindGroupLayout({\n\t\t\tlabel: \"GlassBackdropLayout\",\n\t\t\tentries: [{\n\t\t\t\tbinding: 0,\n\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\tsampler: { type: \"filtering\" }\n\t\t\t}, {\n\t\t\t\tbinding: 1,\n\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\ttexture: { sampleType: \"float\" }\n\t\t\t}]\n\t\t});\n\t\tconst pipelineLayout = device.createPipelineLayout({ bindGroupLayouts: [\n\t\t\tthis.cameraLayout,\n\t\t\tthis.modelLayout,\n\t\t\tthis.glassLayout,\n\t\t\tthis.backdropLayout\n\t\t] });\n\t\tthis.pipeline = device.createRenderPipeline({\n\t\t\tlabel: \"PBRGlassPipeline\",\n\t\t\tlayout: pipelineLayout,\n\t\t\tvertex: {\n\t\t\t\tmodule,\n\t\t\t\tentryPoint: \"vs_main\",\n\t\t\t\tbuffers: [{\n\t\t\t\t\tarrayStride: 32,\n\t\t\t\t\tattributes: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tshaderLocation: 0,\n\t\t\t\t\t\t\toffset: 0,\n\t\t\t\t\t\t\tformat: \"float32x3\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tshaderLocation: 1,\n\t\t\t\t\t\t\toffset: 12,\n\t\t\t\t\t\t\tformat: \"float32x2\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tshaderLocation: 2,\n\t\t\t\t\t\t\toffset: 20,\n\t\t\t\t\t\t\tformat: \"float32x3\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}]\n\t\t\t},\n\t\t\tfragment: {\n\t\t\t\tmodule,\n\t\t\t\tentryPoint: \"fs_main\",\n\t\t\t\ttargets: [{\n\t\t\t\t\tformat,\n\t\t\t\t\tblend: PREMULTIPLIED_OVER\n\t\t\t\t}]\n\t\t\t},\n\t\t\tdepthStencil: {\n\t\t\t\tformat: depthFormat,\n\t\t\t\tdepthWriteEnabled: true,\n\t\t\t\tdepthCompare: \"less-equal\"\n\t\t\t},\n\t\t\tprimitive: {\n\t\t\t\ttopology: \"triangle-list\",\n\t\t\t\tcullMode: \"none\"\n\t\t\t}\n\t\t});\n\t\tconst vertices = new Float32Array([\n\t\t\t-.5,\n\t\t\t-.5,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\t-1,\n\t\t\t.5,\n\t\t\t-.5,\n\t\t\t0,\n\t\t\t1,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\t-1,\n\t\t\t.5,\n\t\t\t.5,\n\t\t\t0,\n\t\t\t1,\n\t\t\t1,\n\t\t\t0,\n\t\t\t0,\n\t\t\t-1,\n\t\t\t-.5,\n\t\t\t.5,\n\t\t\t0,\n\t\t\t0,\n\t\t\t1,\n\t\t\t0,\n\t\t\t0,\n\t\t\t-1\n\t\t]);\n\t\tconst indices = new Uint16Array([\n\t\t\t0,\n\t\t\t1,\n\t\t\t2,\n\t\t\t0,\n\t\t\t2,\n\t\t\t3\n\t\t]);\n\t\tthis.vertexBuffer = device.createBuffer({\n\t\t\tsize: vertices.byteLength,\n\t\t\tusage: GPUBufferUsage.VERTEX | GPUBufferUsage.COPY_DST,\n\t\t\tmappedAtCreation: true\n\t\t});\n\t\tnew Float32Array(this.vertexBuffer.getMappedRange()).set(vertices);\n\t\tthis.vertexBuffer.unmap();\n\t\tthis.indexBuffer = device.createBuffer({\n\t\t\tsize: indices.byteLength,\n\t\t\tusage: GPUBufferUsage.INDEX | GPUBufferUsage.COPY_DST,\n\t\t\tmappedAtCreation: true\n\t\t});\n\t\tnew Uint16Array(this.indexBuffer.getMappedRange()).set(indices);\n\t\tthis.indexBuffer.unmap();\n\t}\n\tresetPools() {\n\t\tthis.modelPool.reset();\n\t\tthis.glassPool.reset();\n\t}\n\tdraw(pass, cameraBindGroup, backdropTexture, sampler, data) {\n\t\twriteModelTransform(this.modelData, data.modelMatrix, data.normalMatrix, data.colorTint);\n\t\tthis.modelData[36] = data.opacity ?? 1;\n\t\tthis.modelData[37] = 0;\n\t\tthis.modelData[38] = 1;\n\t\tthis.modelData[39] = 0;\n\t\tconst modelBuffer = this.modelPool.getBuffer(this.device, this.modelData);\n\t\tthis.glassData[0] = data.ior ?? 1.49;\n\t\tthis.glassData[1] = data.roughness ?? .15;\n\t\tthis.glassData[2] = data.f0 ?? .04;\n\t\tthis.glassData[3] = data.transmission ?? .92;\n\t\tthis.glassData[4] = data.dispersion ?? .015;\n\t\tthis.glassData[5] = data.envIntensity ?? .65;\n\t\tthis.glassData[6] = data.fresnelPower ?? 5;\n\t\tthis.glassData[7] = 0;\n\t\tthis.glassData[8] = data.viewportWidth;\n\t\tthis.glassData[9] = data.viewportHeight;\n\t\tthis.glassData[10] = 0;\n\t\tthis.glassData[11] = 0;\n\t\tconst glassTint = data.tintColor ?? [\n\t\t\t1,\n\t\t\t1,\n\t\t\t1,\n\t\t\t1\n\t\t];\n\t\tthis.glassData[12] = glassTint[0];\n\t\tthis.glassData[13] = glassTint[1];\n\t\tthis.glassData[14] = glassTint[2];\n\t\tthis.glassData[15] = glassTint[3];\n\t\tconst glassBuffer = this.glassPool.getBuffer(this.device, this.glassData);\n\t\tconst modelBindGroup = this.device.createBindGroup({\n\t\t\tlayout: this.modelLayout,\n\t\t\tentries: [{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: { buffer: modelBuffer }\n\t\t\t}]\n\t\t});\n\t\tconst glassBindGroup = this.device.createBindGroup({\n\t\t\tlayout: this.glassLayout,\n\t\t\tentries: [{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: { buffer: glassBuffer }\n\t\t\t}]\n\t\t});\n\t\tconst backdropBindGroup = this.device.createBindGroup({\n\t\t\tlayout: this.backdropLayout,\n\t\t\tentries: [{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: sampler\n\t\t\t}, {\n\t\t\t\tbinding: 1,\n\t\t\t\tresource: backdropTexture.createView()\n\t\t\t}]\n\t\t});\n\t\tpass.setPipeline(this.pipeline);\n\t\tpass.setBindGroup(0, cameraBindGroup);\n\t\tpass.setBindGroup(1, modelBindGroup);\n\t\tpass.setBindGroup(2, glassBindGroup);\n\t\tpass.setBindGroup(3, backdropBindGroup);\n\t\tpass.setVertexBuffer(0, this.vertexBuffer);\n\t\tpass.setIndexBuffer(this.indexBuffer, \"uint16\");\n\t\tpass.drawIndexed(6);\n\t}\n\tdestroy() {\n\t\tthis.modelPool.destroy();\n\t\tthis.glassPool.destroy();\n\t\tthis.vertexBuffer.destroy();\n\t\tthis.indexBuffer.destroy();\n\t}\n};\n\n//#endregion\n//#region src/shaders/lighting3d.ts\n/**\n* Camera and light uniforms plus the surface shading shared by the 3D quad,\n* 3D text and mesh shaders, so every surface in a scene is lit the same way.\n* The including shader declares `cam : CameraUniforms` and binds\n* `lightsBindingsWgsl` (lights, shadow map, shadow sampler) at group 3.\n*\n* Two shading modes, picked per scene by `lights.params.z`:\n* - legacy (no `Layer.environment`): Blinn-Phong in display space, exactly\n* as before, plus shadows and emissive when a scene asks for them;\n* - physical (`Layer.environment(...)` present): linear-light GGX PBR with a\n* procedural studio environment (image-based light), emissive, exposure,\n* AgX / ACES tone mapping and display-space fog.\n*/\nconst lighting3dWgsl = `\nstruct CameraUniforms {\n viewMatrix : mat4x4<f32>,\n projMatrix : mat4x4<f32>,\n viewProjMatrix : mat4x4<f32>,\n invViewProjMatrix : mat4x4<f32>,\n cameraPos : vec4<f32>, // xyz = eye, w = near\n cameraDir : vec4<f32>, // xyz = forward, w = far\n dofParams : vec4<f32>, // x = focusDistance, y = fStop, z = maxBlurRadius, w = dofEnabled\n screenParams : vec4<f32>, // x = surfaceWidth, y = surfaceHeight, z = time, w = unused\n};\n\nstruct GPULight {\n posType : vec4<f32>, // xyz = position, w = type (0=ambient, 1=directional, 2=point, 3=spot)\n dirRadius : vec4<f32>, // xyz = normalized direction, w = radius / range\n colorIntensity : vec4<f32>, // rgb = sRGB color, w = intensity\n spotParams : vec4<f32>, // x = cos(outer), y = cos(inner), z = decay, w = unused\n};\n\nstruct LightsUniforms {\n ambientColor : vec4<f32>, // rgb = ambient color * intensity (sRGB), w = unused\n params : vec4<f32>, // x = numLights, y = hasLights, z = physical (1), w = tone mapping (0 none, 1 ACES, 2 AgX, 3 PBR Neutral)\n lights : array<GPULight, 8>,\n // Appended after the original layout so older readers of the prefix still line up.\n ambientLinear : vec4<f32>, // rgb = ambient irradiance (linear), w = exposure multiplier\n envTop : vec4<f32>, // rgb = sky radiance (linear), w = environment rotation (rad)\n envHorizon : vec4<f32>, // rgb = horizon radiance, w = softbox strength\n envBottom : vec4<f32>, // rgb = ground radiance, w = environment enabled\n fog : vec4<f32>, // rgb = fog color (display linear), w = enabled\n fogRange : vec4<f32>, // x = start distance, y = full distance, z = max opacity, w = unused\n shadowParams : vec4<f32>, // x = enabled, y = shadowed light index, z = softness (texels), w = map size\n shadowBias : vec4<f32>, // x = depth bias, y = normal offset (world px), z = darkness 0..1, w = unused\n shadowMatrix : mat4x4<f32>,\n};\n\nconst PI = 3.14159265359;\n\nfn srgbToLinear(c: vec3<f32>) -> vec3<f32> {\n let lo = c / 12.92;\n let hi = pow((max(c, vec3<f32>(0.0)) + 0.055) / 1.055, vec3<f32>(2.4));\n return select(hi, lo, c <= vec3<f32>(0.04045));\n}\n\nfn linearToSrgb(c: vec3<f32>) -> vec3<f32> {\n let x = clamp(c, vec3<f32>(0.0), vec3<f32>(1.0));\n let lo = x * 12.92;\n let hi = 1.055 * pow(x, vec3<f32>(1.0 / 2.4)) - 0.055;\n return select(hi, lo, x <= vec3<f32>(0.0031308));\n}\n\n// ── Tone mapping (linear scene → linear display, 0..1) ─────────────────\n\nfn rrtAndOdtFit(v: vec3<f32>) -> vec3<f32> {\n let a = v * (v + 0.0245786) - 0.000090537;\n let b = v * (0.983729 * v + 0.4329510) + 0.238081;\n return a / b;\n}\n\n// Stephen Hill's fitted ACES (RRT + sRGB ODT).\nfn toneMapAces(c: vec3<f32>) -> vec3<f32> {\n let x = c / 0.6;\n var v = vec3<f32>(\n dot(vec3<f32>(0.59719, 0.35458, 0.04823), x),\n dot(vec3<f32>(0.07600, 0.90834, 0.01566), x),\n dot(vec3<f32>(0.02840, 0.13383, 0.83777), x),\n );\n v = rrtAndOdtFit(v);\n v = vec3<f32>(\n dot(vec3<f32>(1.60475, -0.53108, -0.07367), v),\n dot(vec3<f32>(-0.10208, 1.10813, -0.00605), v),\n dot(vec3<f32>(-0.00327, -0.07276, 1.07602), v),\n );\n return clamp(v, vec3<f32>(0.0), vec3<f32>(1.0));\n}\n\nfn agxContrast(x: vec3<f32>) -> vec3<f32> {\n let x2 = x * x;\n let x4 = x2 * x2;\n return 15.5 * x4 * x2 - 40.14 * x4 * x + 31.96 * x4 - 6.868 * x2 * x\n + 0.4298 * x2 + 0.1191 * x - 0.00232;\n}\n\n// AgX (Troy Sobotka), base look: graceful highlight roll-off that keeps\n// saturated emissives from clipping to flat primaries.\nfn toneMapAgx(c: vec3<f32>) -> vec3<f32> {\n let inset = mat3x3<f32>(\n 0.842479062253094, 0.0423282422610123, 0.0423756549057051,\n 0.0784335999999992, 0.878468636469772, 0.0784336,\n 0.0792237451477643, 0.0791661274605434, 0.879142973793104,\n );\n let outset = mat3x3<f32>(\n 1.19687900512017, -0.0528968517574562, -0.0529716355144438,\n -0.0980208811401368, 1.15190312990417, -0.0980434501171241,\n -0.0990297440797205, -0.0989611768448433, 1.15107367264116,\n );\n let minEv = -12.47393;\n let maxEv = 4.026069;\n var v = inset * max(c, vec3<f32>(0.0));\n v = clamp(log2(max(v, vec3<f32>(1e-10))), vec3<f32>(minEv), vec3<f32>(maxEv));\n v = (v - minEv) / (maxEv - minEv);\n v = agxContrast(v);\n v = outset * v;\n return clamp(pow(max(v, vec3<f32>(0.0)), vec3<f32>(2.2)), vec3<f32>(0.0), vec3<f32>(1.0));\n}\n\n// Khronos PBR Neutral: base colors come out as authored (hue and\n// saturation kept) up to near-white; only highlights are compressed.\nfn toneMapNeutral(cIn: vec3<f32>) -> vec3<f32> {\n let startCompression = 0.8 - 0.04;\n let desaturation = 0.15;\n var c = max(cIn, vec3<f32>(0.0));\n let x = min(c.r, min(c.g, c.b));\n let offset = select(0.04, x - 6.25 * x * x, x < 0.08);\n c = c - offset;\n let peak = max(c.r, max(c.g, c.b));\n if (peak < startCompression) {\n return c;\n }\n let d = 1.0 - startCompression;\n let newPeak = 1.0 - d * d / (peak + d - startCompression);\n c = c * (newPeak / peak);\n let g = 1.0 - 1.0 / (desaturation * (peak - newPeak) + 1.0);\n return mix(c, vec3<f32>(newPeak), g);\n}\n\nfn toneMap(c: vec3<f32>) -> vec3<f32> {\n let exposed = c * lights.ambientLinear.w;\n let mode = lights.params.w;\n if (mode > 2.5) {\n return toneMapNeutral(exposed);\n }\n if (mode > 1.5) {\n return toneMapAgx(exposed);\n }\n if (mode > 0.5) {\n return toneMapAces(exposed);\n }\n return clamp(exposed, vec3<f32>(0.0), vec3<f32>(1.0));\n}\n\n// ── Procedural studio environment (image-based light) ─────────────────\n\n// A rectangular-ish softbox seen from the scene: bright inside its angular\n// radius, blurring out with roughness while keeping roughly the same energy.\nfn softbox(d: vec3<f32>, axis: vec3<f32>, radius: f32, rough: f32) -> f32 {\n let cosA = dot(d, axis);\n let edge = cos(radius + rough * 0.9);\n let width = 0.004 + rough * rough * 0.5;\n let lobe = smoothstep(edge - width, edge + width * 0.25, cosA);\n return lobe / (1.0 + rough * rough * 6.0);\n}\n\n/// Radiance arriving from direction d (world space; y points down), as a\n/// surface of the given roughness sees it.\nfn envRadiance(dirIn: vec3<f32>, rough: f32) -> vec3<f32> {\n if (lights.envBottom.w < 0.5) {\n return vec3<f32>(0.0);\n }\n let rot = lights.envTop.w;\n let c = cos(rot);\n let s = sin(rot);\n let d = normalize(vec3<f32>(c * dirIn.x + s * dirIn.z, dirIn.y, -s * dirIn.x + c * dirIn.z));\n let up = -d.y;\n let spread = 0.35 + rough * 0.9;\n let tUp = smoothstep(-0.05, spread, up);\n let tDown = smoothstep(-0.05, spread, -up);\n var col = mix(lights.envHorizon.rgb, lights.envTop.rgb, tUp);\n col = mix(col, lights.envBottom.rgb, tDown);\n let k = lights.envHorizon.w;\n if (k > 0.0) {\n // Key softbox overhead-front-left, a rim strip behind-right, a fill strip left.\n let key = softbox(d, normalize(vec3<f32>(-0.35, -0.85, -0.4)), 0.32, rough);\n let rim = softbox(d, normalize(vec3<f32>(0.75, -0.35, 0.55)), 0.2, rough);\n let fill = softbox(d, normalize(vec3<f32>(-0.92, -0.15, -0.2)), 0.16, rough);\n col += vec3<f32>(k * (key * 1.0 + rim * 0.7 + fill * 0.35));\n }\n return col;\n}\n\n// Karis' analytic approximation of the split-sum environment BRDF.\nfn envBrdfApprox(f0: vec3<f32>, rough: f32, nDotV: f32) -> vec3<f32> {\n let c0 = vec4<f32>(-1.0, -0.0275, -0.572, 0.022);\n let c1 = vec4<f32>(1.0, 0.0425, 1.04, -0.04);\n let r = rough * c0 + c1;\n let a004 = min(r.x * r.x, exp2(-9.28 * nDotV)) * r.x + r.y;\n let ab = vec2<f32>(-1.04, 1.04) * a004 + r.zw;\n return f0 * ab.x + ab.y;\n}\n\n// ── Shadows ───────────────────────────────────────────────────────────\n\nvar<private> POISSON : array<vec2<f32>, 12> = array<vec2<f32>, 12>(\n vec2<f32>(-0.326, -0.406), vec2<f32>(-0.840, -0.074), vec2<f32>(-0.696, 0.457),\n vec2<f32>(-0.203, 0.621), vec2<f32>(0.962, -0.195), vec2<f32>(0.473, -0.480),\n vec2<f32>(0.519, 0.767), vec2<f32>(0.185, -0.893), vec2<f32>(0.507, 0.064),\n vec2<f32>(0.896, 0.412), vec2<f32>(-0.322, -0.933), vec2<f32>(-0.792, -0.598),\n);\n\n/// 1 = fully lit, 0 = fully shadowed, for light index i.\nfn shadowFactor(worldPos: vec3<f32>, N: vec3<f32>, i: i32) -> f32 {\n if (lights.shadowParams.x < 0.5 || i32(lights.shadowParams.y) != i) {\n return 1.0;\n }\n let p = worldPos + N * lights.shadowBias.y;\n let lp = lights.shadowMatrix * vec4<f32>(p, 1.0);\n let ndc = lp.xyz / lp.w;\n let uv = vec2<f32>(ndc.x * 0.5 + 0.5, 0.5 - ndc.y * 0.5);\n if (lp.w <= 0.0 || uv.x < 0.0 || uv.x > 1.0 || uv.y < 0.0 || uv.y > 1.0 || ndc.z > 1.0) {\n return 1.0;\n }\n let texel = 1.0 / max(lights.shadowParams.w, 1.0);\n let radius = lights.shadowParams.z * texel;\n let depthRef = ndc.z - lights.shadowBias.x;\n var lit = 0.0;\n for (var k = 0; k < 12; k++) {\n lit += textureSampleCompareLevel(shadowMap, shadowSampler, uv + POISSON[k] * radius, depthRef);\n }\n lit = lit / 12.0;\n return mix(1.0, lit, lights.shadowBias.z);\n}\n\n// ── Lights ────────────────────────────────────────────────────────────\n\nstruct LightSample {\n L : vec3<f32>,\n attenuation : f32,\n valid : bool,\n};\n\nfn sampleLight(i: i32, worldPos: vec3<f32>) -> LightSample {\n var out = LightSample(vec3<f32>(0.0, 0.0, 1.0), 1.0, false);\n let light = lights.lights[i];\n let lightType = light.posType.w;\n if (lightType > 0.5 && lightType < 1.5) {\n out.L = normalize(-light.dirRadius.xyz);\n out.valid = true;\n return out;\n }\n if (lightType < 1.5) {\n return out;\n }\n let toLight = light.posType.xyz - worldPos;\n let dist = length(toLight);\n let radius = max(1.0, light.dirRadius.w);\n if (dist > radius) {\n return out;\n }\n out.L = normalize(toLight);\n let dNorm = clamp(dist / radius, 0.0, 1.0);\n let decay = max(0.5, light.spotParams.z);\n out.attenuation = pow(clamp(1.0 - dNorm, 0.0, 1.0), decay);\n if (lightType > 2.5) {\n let spotDir = normalize(light.dirRadius.xyz);\n let cosAngle = dot(-out.L, spotDir);\n if (cosAngle < light.spotParams.x) {\n return out;\n }\n out.attenuation *= smoothstep(light.spotParams.x, light.spotParams.y, cosAngle);\n }\n out.valid = true;\n return out;\n}\n\n// Blinn-Phong in display space: the original look, plus shadows when a\n// light casts them.\nfn applyLighting3D(worldPos: vec3<f32>, worldNormal: vec3<f32>, baseColor: vec3<f32>, material: vec4<f32>) -> vec3<f32> {\n if (lights.params.y < 0.5 || material.w < 0.5) {\n return baseColor;\n }\n var N = normalize(worldNormal);\n let V = normalize(cam.cameraPos.xyz - worldPos);\n if (dot(N, V) < 0.0) {\n N = -N;\n }\n let shininess = max(1.0, material.x);\n let specularInt = material.y;\n let ambientInt = material.z;\n\n var totalIllumination = baseColor * (lights.ambientColor.rgb * ambientInt);\n let numLights = i32(lights.params.x);\n for (var i = 0; i < 8; i++) {\n if (i >= numLights) {\n break;\n }\n let ls = sampleLight(i, worldPos);\n if (!ls.valid) {\n continue;\n }\n let light = lights.lights[i];\n let lightColor = light.colorIntensity.rgb;\n let intensity = light.colorIntensity.w;\n let NdotL = max(dot(N, ls.L), 0.0);\n let diffuse = baseColor * lightColor * (NdotL * intensity * ls.attenuation);\n var specular = vec3<f32>(0.0);\n if (NdotL > 0.0 && specularInt > 0.001) {\n let H = normalize(ls.L + V);\n let NdotH = max(dot(N, H), 0.0);\n specular = lightColor * (pow(NdotH, shininess) * specularInt * intensity * ls.attenuation);\n }\n totalIllumination += (diffuse + specular) * shadowFactor(worldPos, N, i);\n }\n return totalIllumination;\n}\n\n// GGX / Smith-correlated / Schlick, image-based light from envRadiance.\n// Returns linear scene radiance (unbounded).\nfn shadePhysical(worldPos: vec3<f32>, worldNormal: vec3<f32>, albedo: vec3<f32>, rough: f32, metal: f32, ambientInt: f32) -> vec3<f32> {\n var N = normalize(worldNormal);\n let V = normalize(cam.cameraPos.xyz - worldPos);\n if (dot(N, V) < 0.0) {\n N = -N;\n }\n let nDotV = max(dot(N, V), 1e-4);\n let r = clamp(rough, 0.03, 1.0);\n let a = r * r;\n let a2 = a * a;\n let f0 = mix(vec3<f32>(0.04), albedo, metal);\n let diffuseColor = albedo * (1.0 - metal);\n\n var lo = vec3<f32>(0.0);\n let numLights = i32(lights.params.x);\n for (var i = 0; i < 8; i++) {\n if (i >= numLights) {\n break;\n }\n let ls = sampleLight(i, worldPos);\n if (!ls.valid) {\n continue;\n }\n let light = lights.lights[i];\n let nDotL = max(dot(N, ls.L), 0.0);\n if (nDotL <= 0.0) {\n continue;\n }\n let H = normalize(ls.L + V);\n let nDotH = max(dot(N, H), 0.0);\n let vDotH = max(dot(V, H), 0.0);\n let dDen = nDotH * nDotH * (a2 - 1.0) + 1.0;\n let D = a2 / (PI * dDen * dDen);\n let gv = nDotL * sqrt(nDotV * nDotV * (1.0 - a2) + a2);\n let gl = nDotV * sqrt(nDotL * nDotL * (1.0 - a2) + a2);\n let Vis = 0.5 / max(gv + gl, 1e-5);\n let F = f0 + (vec3<f32>(1.0) - f0) * pow(1.0 - vDotH, 5.0);\n let spec = D * Vis * F;\n let diff = (vec3<f32>(1.0) - F) * diffuseColor / PI;\n // x PI so a white light of intensity 1 lights a white wall about as\n // brightly as the legacy shading does.\n let radiance = srgbToLinear(light.colorIntensity.rgb) * light.colorIntensity.w * ls.attenuation * PI;\n lo += (diff + spec) * radiance * nDotL * shadowFactor(worldPos, N, i);\n }\n\n let R = reflect(-V, N);\n let irradiance = envRadiance(N, 1.0) + lights.ambientLinear.rgb;\n let specEnv = envRadiance(R, r) * envBrdfApprox(f0, r, nDotV);\n lo += (diffuseColor * irradiance + specEnv) * ambientInt;\n return lo;\n}\n\nstruct Shaded {\n /** Display-encoded (sRGB) color for the color target. */\n display : vec3<f32>,\n /** Unclamped scene-referred linear radiance, for the bloom target. */\n hdr : vec3<f32>,\n};\n\n/// Shades a surface for the scene's mode.\n/// material: x shininess, y specularIntensity, z ambientIntensity, w mode (0 unlit).\n/// pbr: x roughness (<0 = default), y metallic, z/w unused.\n/// emissive: rgb sRGB color, w strength.\nfn shadeSurfaceFull(worldPos: vec3<f32>, worldNormal: vec3<f32>, baseColor: vec3<f32>, material: vec4<f32>, pbr: vec4<f32>, emissive: vec4<f32>) -> Shaded {\n var out: Shaded;\n if (lights.params.z < 0.5) {\n var c = baseColor;\n if (material.w >= 0.5) {\n c = applyLighting3D(worldPos, worldNormal, baseColor, material);\n }\n c += emissive.rgb * emissive.w;\n out.display = c;\n out.hdr = srgbToLinear(clamp(c, vec3<f32>(0.0), vec3<f32>(1.0))) * max(max(c.r, max(c.g, c.b)), 1.0);\n return out;\n }\n var radiance: vec3<f32>;\n if (material.w < 0.5) {\n radiance = srgbToLinear(baseColor);\n } else {\n let rough = select(pbr.x, 0.5, pbr.x < 0.0);\n radiance = shadePhysical(worldPos, worldNormal, srgbToLinear(baseColor), rough, clamp(pbr.y, 0.0, 1.0), material.z);\n }\n radiance += srgbToLinear(emissive.rgb) * emissive.w;\n var display: vec3<f32>;\n if (material.w < 0.5) {\n // Unlit layers keep their exact authored colors.\n display = clamp(radiance, vec3<f32>(0.0), vec3<f32>(1.0));\n } else {\n display = toneMap(radiance);\n }\n var hdr = radiance * lights.ambientLinear.w;\n if (lights.fog.w > 0.5) {\n let dist = distance(worldPos, cam.cameraPos.xyz);\n let f = smoothstep(lights.fogRange.x, max(lights.fogRange.y, lights.fogRange.x + 1.0), dist) * lights.fogRange.z;\n display = mix(display, lights.fog.rgb, f);\n hdr = hdr * (1.0 - f);\n }\n out.display = linearToSrgb(display);\n out.hdr = hdr;\n return out;\n}\n\nfn shadeSurface(worldPos: vec3<f32>, worldNormal: vec3<f32>, baseColor: vec3<f32>, material: vec4<f32>, pbr: vec4<f32>, emissive: vec4<f32>) -> vec3<f32> {\n return shadeSurfaceFull(worldPos, worldNormal, baseColor, material, pbr, emissive).display;\n}\n`;\n/** Group-3 bindings every lit 3D shader declares. */\nconst lightsBindingsWgsl = `\n@group(3) @binding(0) var<uniform> lights : LightsUniforms;\n@group(3) @binding(1) var shadowMap : texture_depth_2d;\n@group(3) @binding(2) var shadowSampler : sampler_comparison;\n`;\n\n//#endregion\n//#region src/shaders/matte3d.ts\n/**\n* Screen-space track matte for 3D draws. The compositor resolves a matte of\n* any mode into a coverage texture (alpha = how much of the layer shows);\n* the draw scales its alpha by it at each pixel and discards where nothing\n* shows, so a matted layer keeps its place in the depth buffer. Unmatted\n* draws bind a 1×1 white texture (full coverage).\n*\n* The including shader declares `cam : CameraUniforms`.\n*/\nfunction matte3dWgsl(group, binding) {\n\treturn `\n@group(${group}) @binding(${binding}) var matteTex : texture_2d<f32>;\n\nfn matteCoverage(fragPos : vec2<f32>) -> f32 {\n let dims = vec2<f32>(textureDimensions(matteTex));\n let p = floor(fragPos * dims / max(cam.screenParams.xy, vec2<f32>(1.0)));\n return textureLoad(matteTex, vec2<i32>(clamp(p, vec2<f32>(0.0), dims - 1.0)), 0).a;\n}\n`;\n}\n\n//#endregion\n//#region src/shaders/mesh3d.ts\n/**\n* WebGPU WGSL shaders for 3D static and skinned meshes.\n* Supports GPU Linear Blend Skinning (up to 128 bones),\n* the shared 3D surface shading (Blinn-Phong, or physical GGX + image-based light\n* in scenes with an environment) or toon shading, shadow maps, emissive,\n* alpha-cutoff (glTF MASK) materials,\n* Material parameters, normal transformations, and linear depth MRT output for Bokeh DoF.\n*/\nconst mesh3dWgsl = `\n${lighting3dWgsl}\n\nstruct ModelUniforms {\n modelMatrix : mat4x4<f32>,\n normalMatrix : mat4x4<f32>,\n colorTint : vec4<f32>,\n params : vec4<f32>, // x = opacity, y = twoSided (1.0 = yes), z = isSkinned (1.0 = yes), w = wireframe\n materialParams : vec4<f32>, // x = shininess, y = specularIntensity, z = ambientIntensity, w = materialMode (0=unlit, 1=lit, 2=toon)\n shade : vec4<f32>, // rgb = toon shadow-side color multiplier, a = alpha cutoff (0 = none)\n pbr : vec4<f32>, // x = roughness (<0 = default), y = metallic\n emissive : vec4<f32>, // rgb = sRGB emissive color, w = strength\n maps : vec4<f32>, // x = normal scale (0 = no map), y = occlusion strength, z = has metallic-roughness map, w = has emissive map\n};\n\nstruct SkinningUniforms {\n jointMatrices : array<mat4x4<f32>, 128>,\n};\n\n@group(0) @binding(0) var<uniform> cam : CameraUniforms;\n@group(1) @binding(0) var<uniform> model : ModelUniforms;\n@group(1) @binding(1) var<uniform> skinning : SkinningUniforms;\n${matte3dWgsl(1, 2)}@group(1) @binding(3) var backdropTex : texture_2d<f32>;\n@group(2) @binding(0) var texSampler : sampler;\n@group(2) @binding(1) var mainTex : texture_2d<f32>;\n@group(2) @binding(2) var normalTex : texture_2d<f32>;\n@group(2) @binding(3) var metalRoughTex : texture_2d<f32>;\n@group(2) @binding(4) var occlusionTex : texture_2d<f32>;\n@group(2) @binding(5) var emissiveTex : texture_2d<f32>;\n${lightsBindingsWgsl}\n\nstruct VertexInput {\n @location(0) position : vec3<f32>,\n @location(1) uv : vec2<f32>,\n @location(2) normal : vec3<f32>,\n @location(3) joints : vec4<f32>,\n @location(4) weights : vec4<f32>,\n @location(5) color : vec4<f32>, // vertex color (display / sRGB), white when absent\n};\n\nstruct VertexOutput {\n @builtin(position) clipPos : vec4<f32>,\n @location(0) uv : vec2<f32>,\n @location(1) worldPos : vec3<f32>,\n @location(2) worldNormal : vec3<f32>,\n @location(3) linearDepth : f32,\n @location(4) color : vec4<f32>,\n};\n\n@vertex\nfn vs_main(in: VertexInput) -> VertexOutput {\n var out: VertexOutput;\n\n var localPos = in.position;\n var localNorm = in.normal;\n\n // Linear Blend Skinning (LBS) on GPU\n if (model.params.z > 0.5) {\n let j0 = i32(in.joints.x);\n let j1 = i32(in.joints.y);\n let j2 = i32(in.joints.z);\n let j3 = i32(in.joints.w);\n\n let w0 = in.weights.x;\n let w1 = in.weights.y;\n let w2 = in.weights.z;\n let w3 = in.weights.w;\n\n let totalWeight = w0 + w1 + w2 + w3;\n if (totalWeight > 0.001) {\n let skinMat = skinning.jointMatrices[j0] * w0 +\n skinning.jointMatrices[j1] * w1 +\n skinning.jointMatrices[j2] * w2 +\n skinning.jointMatrices[j3] * w3;\n\n let pos4 = skinMat * vec4<f32>(in.position, 1.0);\n localPos = pos4.xyz;\n\n let norm4 = skinMat * vec4<f32>(in.normal, 0.0);\n localNorm = normalize(norm4.xyz);\n }\n }\n\n let worldPos4 = model.modelMatrix * vec4<f32>(localPos, 1.0);\n out.worldPos = worldPos4.xyz;\n\n let norm4 = model.normalMatrix * vec4<f32>(localNorm, 0.0);\n out.worldNormal = normalize(norm4.xyz);\n\n out.clipPos = cam.viewProjMatrix * worldPos4;\n out.uv = in.uv;\n out.color = in.color;\n\n out.linearDepth = dot(worldPos4.xyz - cam.cameraPos.xyz, cam.cameraDir.xyz);\n return out;\n}\n\n// Toon (MToon-style): the base color as authored where the light reaches,\n// the shade color past a soft terminator. Highlights stay out: the texture\n// already paints them.\nfn toonLighting(in: VertexOutput, baseColor: vec3<f32>) -> vec3<f32> {\n var N = normalize(in.worldNormal);\n let V = normalize(cam.cameraPos.xyz - in.worldPos);\n if (dot(N, V) < 0.0) {\n N = -N;\n }\n var lit = 0.0;\n let numLights = i32(lights.params.x);\n for (var i = 0; i < 8; i++) {\n if (i >= numLights) {\n break;\n }\n let light = lights.lights[i];\n let lightType = light.posType.w;\n var L = vec3<f32>(0.0, 0.0, 1.0);\n if (lightType > 0.5 && lightType < 1.5) {\n L = normalize(-light.dirRadius.xyz);\n } else if (lightType >= 1.5) {\n L = normalize(light.posType.xyz - in.worldPos);\n } else {\n continue;\n }\n let terminator = smoothstep(-0.05, 0.2, dot(N, L));\n lit = max(lit, terminator * min(light.colorIntensity.w, 1.0));\n }\n return baseColor * mix(model.shade.rgb, vec3<f32>(1.0), lit);\n}\n\nstruct MeshFragment {\n color : vec4<f32>, // premultiplied display color\n hdr : vec4<f32>, // premultiplied scene radiance (bloom source)\n};\n\n// Normal mapping without tangents: a cotangent frame from screen-space\n// derivatives (Schüler, \"Followup: Normal Mapping Without Precomputed Tangents\").\nfn perturbNormal(N: vec3<f32>, p: vec3<f32>, uv: vec2<f32>, tn: vec3<f32>, dp1: vec3<f32>, dp2: vec3<f32>, duv1: vec2<f32>, duv2: vec2<f32>) -> vec3<f32> {\n let dp2perp = cross(dp2, N);\n let dp1perp = cross(N, dp1);\n // The derivation assumes cross(dp1, dp2) points along N; with this\n // engine's y-down view basis it can point away, mirroring the frame.\n let handed = select(1.0, -1.0, dot(cross(dp1, dp2), N) < 0.0);\n let T = (dp2perp * duv1.x + dp1perp * duv2.x) * handed;\n let B = (dp2perp * duv1.y + dp1perp * duv2.y) * handed;\n let invmax = inverseSqrt(max(max(dot(T, T), dot(B, B)), 1e-20));\n // glTF maps are +Y up while v grows down the image: green points along -B.\n return normalize(T * (tn.x * invmax) - B * (tn.y * invmax) + N * tn.z);\n}\n\n// Glass: what is behind the 3D batch on screen (backdrop), bent by\n// refraction along the surface normal with a red/blue split, frosted by a\n// disc blur, tinted by the color, under Fresnel-weighted reflections.\n// shade.rgb = (dispersion, thickness px, frost), pbr.w = ior.\nfn backdropAt(uv: vec2<f32>) -> vec3<f32> {\n return textureSampleLevel(backdropTex, texSampler, clamp(uv, vec2<f32>(0.001), vec2<f32>(0.999)), 0.0).rgb;\n}\n\n// rimWidth: how much 1 - N·V changes across this pixel (fwidth, taken in\n// uniform control flow by the caller). Rim effects narrower than a pixel are\n// faded out, or per-pixel shading turns them into stair-stepped lines that\n// MSAA (coverage only) cannot smooth.\nfn shadeGlass(in: VertexOutput, Nin: vec3<f32>, tint: vec3<f32>, alpha: f32, rimWidth: f32) -> MeshFragment {\n let V = normalize(cam.cameraPos.xyz - in.worldPos);\n var N = Nin;\n if (dot(N, V) < 0.0) { N = -N; }\n let NdotV = clamp(dot(N, V), 0.0, 1.0);\n // Also fade toward edge-on: a face seen at a grazing angle is a sliver\n // under a pixel tall (a slab's bottom), which would alias the same way.\n let rimAA = clamp(1.0 - rimWidth * 2.5, 0.0, 1.0) * smoothstep(0.03, 0.22, NdotV);\n let rim = (1.0 - NdotV) * rimAA;\n let ior = max(model.pbr.w, 1.0001);\n let screen = max(cam.screenParams.xy, vec2<f32>(1.0));\n let uv = in.clipPos.xy / screen;\n // Screen-space bend: the normal's in-plane part, stronger toward the rim.\n let bend = N.xy * model.shade.g * (1.0 - 1.0 / ior) * (0.6 + rim) * rimAA / screen;\n let disp = model.shade.r;\n let frost = model.shade.b * 22.0 / screen;\n var col = vec3<f32>(0.0);\n let taps = select(1, 8, model.shade.b > 0.001);\n for (var i = 0; i < taps; i++) {\n let a = f32(i) * 2.399963;\n let r = sqrt((f32(i) + 0.5) / f32(taps));\n let o = select(vec2<f32>(0.0), vec2<f32>(cos(a), sin(a)) * r * frost, taps > 1);\n col += vec3<f32>(\n backdropAt(uv - bend * (1.0 + disp * 6.0) + o).r,\n backdropAt(uv - bend + o).g,\n backdropAt(uv - bend * (1.0 - disp * 6.0) + o).b,\n );\n }\n col /= f32(taps);\n // Light travels further through the glass toward the rim: the tint\n // deepens and the body darkens there, which is what outlines glass.\n let depthTint = mix(vec3<f32>(1.0), tint, 0.55 + 0.45 * rim);\n let transmitted = col * depthTint * (1.0 - 0.45 * rim * rim);\n let f0 = pow((ior - 1.0) / (ior + 1.0), 2.0);\n let F = f0 + (1.0 - f0) * pow(rim, 5.0);\n let lit = shadeSurfaceFull(in.worldPos, N, vec3<f32>(0.0), model.materialParams, vec4<f32>(model.pbr.x, 0.0, 0.0, 0.0), vec4<f32>(0.0));\n // Grazing faces mirror the room; keep that faint so dark scenes stay dark\n // and the studio highlights below carry the shape.\n let sheen = vec3<f32>(0.9, 0.94, 1.0) * F * 0.22 + tint * 0.05 * (0.4 + rim);\n // A studio in the reflection: a sharp key and two strip softboxes, which\n // is most of what makes glass read as glass.\n let R = reflect(-V, N);\n // Tight: a flat face only flashes as it turns through the light.\n let key = pow(max(dot(R, normalize(vec3<f32>(-0.45, -0.75, -0.5))), 0.0), 600.0) * 1.8;\n // Two tall softboxes: narrow bands in the reflection, brightest above.\n let strips = (1.0 - smoothstep(0.03, 0.07, abs(R.x + 0.45))) * smoothstep(0.3, -0.5, R.y) * 1.1\n + (1.0 - smoothstep(0.02, 0.05, abs(R.x - 0.6))) * smoothstep(0.4, -0.3, R.y) * 0.7;\n let studio = vec3<f32>(1.0, 0.98, 0.95) * (key + strips * (0.25 + F));\n // A thin bright line where the surface turns away: glass silhouettes.\n let edge = vec3<f32>(1.0, 0.99, 0.97) * smoothstep(0.8, 0.97, rim) * 0.55;\n let rgb = transmitted * (1.0 - F) + lit.display + sheen + studio + edge;\n var out: MeshFragment;\n out.color = vec4<f32>(rgb * alpha, alpha);\n out.hdr = vec4<f32>(srgbToLinear(transmitted * (1.0 - F)) * alpha + lit.hdr * alpha + srgbToLinear(sheen + studio + edge) * alpha, alpha);\n return out;\n}\n\nfn shadeMesh(in: VertexOutput, isFront: bool) -> MeshFragment {\n // Every sample and derivative up front, in uniform control flow.\n var texColor = textureSample(mainTex, texSampler, in.uv);\n let normalSample = textureSample(normalTex, texSampler, in.uv).xyz;\n let mrSample = textureSample(metalRoughTex, texSampler, in.uv);\n let aoSample = textureSample(occlusionTex, texSampler, in.uv).r;\n let emissiveSample = textureSample(emissiveTex, texSampler, in.uv).rgb;\n let dp1 = dpdx(in.worldPos);\n let dp2 = dpdy(in.worldPos);\n let duv1 = dpdx(in.uv);\n let duv2 = dpdy(in.uv);\n let rimWidth = fwidth(1.0 - abs(dot(normalize(in.worldNormal), normalize(cam.cameraPos.xyz - in.worldPos))));\n\n if (!isFront && model.params.y < 0.5) {\n discard;\n }\n if (texColor.a < model.shade.a) {\n discard;\n }\n let alpha = texColor.a * in.color.a * model.params.x * model.colorTint.a * matteCoverage(in.clipPos.xy);\n if (alpha <= 0.001) {\n discard;\n }\n\n let baseRgb = texColor.rgb * in.color.rgb * model.colorTint.rgb;\n var out: MeshFragment;\n if (model.materialParams.w > 1.5) {\n var toon = baseRgb;\n if (lights.params.y >= 0.5) {\n toon = toonLighting(in, baseRgb);\n }\n out.color = vec4<f32>(toon * alpha, alpha);\n out.hdr = vec4<f32>(srgbToLinear(toon) * alpha, alpha);\n return out;\n }\n\n var N = normalize(in.worldNormal);\n if (model.maps.x > 0.0) {\n var tn = normalSample * 2.0 - 1.0;\n tn = vec3<f32>(tn.xy * model.maps.x, tn.z);\n // The frame follows the surface side the camera sees.\n var Nf = N;\n if (dot(Nf, cam.cameraPos.xyz - in.worldPos) < 0.0) {\n Nf = -Nf;\n }\n N = perturbNormal(Nf, in.worldPos, in.uv, tn, dp1, dp2, duv1, duv2);\n }\n var pbr = model.pbr;\n if (model.maps.z > 0.5) {\n pbr.x = select(pbr.x, 1.0, pbr.x < 0.0) * mrSample.g;\n pbr.y = pbr.y * mrSample.b;\n }\n if (model.pbr.z > 0.5) {\n return shadeGlass(in, N, baseRgb, alpha, rimWidth);\n }\n var material = model.materialParams;\n material.z = material.z * mix(1.0, aoSample, clamp(model.maps.y, 0.0, 1.0));\n var emissive = model.emissive;\n if (model.maps.w > 0.5) {\n // Linear multiply in display space is close enough for an 8-bit map.\n emissive = vec4<f32>(emissive.rgb * emissiveSample, emissive.w);\n }\n let shaded = shadeSurfaceFull(in.worldPos, N, baseRgb, material, pbr, emissive);\n out.color = vec4<f32>(shaded.display * alpha, alpha);\n out.hdr = vec4<f32>(shaded.hdr * alpha, alpha);\n return out;\n}\n\nstruct MrtOutput {\n @location(0) color : vec4<f32>,\n @location(1) depth : vec4<f32>,\n};\n\nstruct BloomOutput {\n @location(0) color : vec4<f32>,\n @location(1) hdr : vec4<f32>,\n};\n\nstruct MrtBloomOutput {\n @location(0) color : vec4<f32>,\n @location(1) depth : vec4<f32>,\n @location(2) hdr : vec4<f32>,\n};\n\n@fragment\nfn fs_single(in: VertexOutput, @builtin(front_facing) isFront: bool) -> @location(0) vec4<f32> {\n return shadeMesh(in, isFront).color;\n}\n\n@fragment\nfn fs_mrt(in: VertexOutput, @builtin(front_facing) isFront: bool) -> MrtOutput {\n var out: MrtOutput;\n out.color = shadeMesh(in, isFront).color;\n out.depth = vec4<f32>(in.linearDepth, 0.0, 0.0, 1.0);\n return out;\n}\n\n@fragment\nfn fs_single_bloom(in: VertexOutput, @builtin(front_facing) isFront: bool) -> BloomOutput {\n let f = shadeMesh(in, isFront);\n var out: BloomOutput;\n out.color = f.color;\n out.hdr = f.hdr;\n return out;\n}\n\n@fragment\nfn fs_mrt_bloom(in: VertexOutput, @builtin(front_facing) isFront: bool) -> MrtBloomOutput {\n let f = shadeMesh(in, isFront);\n var out: MrtBloomOutput;\n out.color = f.color;\n out.depth = vec4<f32>(in.linearDepth, 0.0, 0.0, 1.0);\n out.hdr = f.hdr;\n return out;\n}\n`;\n\n//#endregion\n//#region src/renderer3d/matte3d.ts\n/** The per-draw matte binding of the 3D pipelines (see `shaders/matte3d.ts`). */\nfunction matteLayoutEntry(binding) {\n\treturn {\n\t\tbinding,\n\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\ttexture: { sampleType: \"float\" }\n\t};\n}\nconst fullCoverage = /* @__PURE__ */ new WeakMap();\n/** A 1×1 opaque white view: full coverage, for draws without a matte. */\nfunction fullCoverageView(device) {\n\tlet view = fullCoverage.get(device);\n\tif (!view) {\n\t\tconst tex = device.createTexture({\n\t\t\tlabel: \"Matte3DFullCoverage\",\n\t\t\tsize: [1, 1],\n\t\t\tformat: \"rgba8unorm\",\n\t\t\tusage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST\n\t\t});\n\t\tdevice.queue.writeTexture({ texture: tex }, new Uint8Array([\n\t\t\t255,\n\t\t\t255,\n\t\t\t255,\n\t\t\t255\n\t\t]), { bytesPerRow: 4 }, [1, 1]);\n\t\tview = tex.createView();\n\t\tfullCoverage.set(device, view);\n\t}\n\treturn view;\n}\n\n//#endregion\n//#region src/shaders/quad3d.ts\n/**\n* WebGPU WGSL shaders for 3D textured quads transformed by Camera View-Projection matrices.\n* Supports Ambient, Directional, Point, and Spot lights with Blinn-Phong specular shading,\n* normal matrix transformations for non-uniform scaling, and linear depth MRT output.\n*/\nconst quad3dWgsl = `\n${lighting3dWgsl}\nstruct ModelUniforms {\n modelMatrix : mat4x4<f32>,\n normalMatrix : mat4x4<f32>,\n colorTint : vec4<f32>,\n borderColor : vec4<f32>,\n params : vec4<f32>, // x = opacity, y = borderRadius, z = twoSided (1.0 = yes), w = borderWidth\n dimensions : vec4<f32>, // x = width, y = height, zw = texture extent the layer covers (0 = whole texture)\n materialParams : vec4<f32>, // x = shininess, y = specularIntensity, z = ambientIntensity, w = materialMode (0=unlit, 1=lit)\n pbr : vec4<f32>, // x = roughness (<0 = default), y = metallic\n emissive : vec4<f32>, // rgb = sRGB emissive color, w = strength\n};\n\n@group(0) @binding(0) var<uniform> cam : CameraUniforms;\n@group(1) @binding(0) var<uniform> model : ModelUniforms;\n${matte3dWgsl(1, 1)}@group(2) @binding(0) var texSampler : sampler;\n@group(2) @binding(1) var mainTex : texture_2d<f32>;\n${lightsBindingsWgsl}\n\nstruct VertexInput {\n @location(0) position : vec3<f32>,\n @location(1) uv : vec2<f32>,\n @location(2) normal : vec3<f32>,\n};\n\nstruct VertexOutput {\n @builtin(position) clipPos : vec4<f32>,\n @location(0) uv : vec2<f32>,\n @location(1) worldPos : vec3<f32>,\n @location(2) worldNormal : vec3<f32>,\n @location(3) linearDepth : f32,\n @location(4) localPos : vec2<f32>,\n};\n\n@vertex\nfn vs_main(in: VertexInput) -> VertexOutput {\n var out: VertexOutput;\n \n let hasDimensions = model.dimensions.x > 0.0 && model.dimensions.y > 0.0;\n var pad = 0.0;\n if (hasDimensions) {\n let viewPos = cam.viewMatrix * model.modelMatrix * vec4<f32>(0.0, 0.0, 0.0, 1.0);\n let viewDepth = max(abs(viewPos.z), 0.1);\n let projScale = max(cam.projMatrix[1][1], 0.001);\n let worldPx = (2.0 * viewDepth) / max(cam.screenParams.y * projScale, 0.001);\n pad = max(4.0 * worldPx, 4.0);\n }\n let scalePad = select(vec2<f32>(1.0), 1.0 + vec2<f32>(2.0 * pad) / model.dimensions.xy, hasDimensions);\n \n let paddedPos = vec3<f32>(in.position.xy * scalePad, in.position.z);\n let worldPos4 = model.modelMatrix * vec4<f32>(paddedPos, 1.0);\n out.worldPos = worldPos4.xyz;\n \n // Normal transformed by 3x3 normal matrix\n let norm4 = model.normalMatrix * vec4<f32>(in.normal, 0.0);\n out.worldNormal = normalize(norm4.xyz);\n \n out.clipPos = cam.viewProjMatrix * worldPos4;\n \n out.localPos = in.position.xy * (model.dimensions.xy + vec2<f32>(2.0 * pad));\n // A layer of fractional size renders into a texture rounded up to whole\n // pixels: map the quad onto the part it covers, not the whole texture,\n // or the content is stretched by up to a pixel and resampled off-grid.\n let uvExtent = select(model.dimensions.zw, vec2<f32>(1.0), model.dimensions.zw <= vec2<f32>(0.0));\n out.uv = select(in.uv, (out.localPos / model.dimensions.xy + vec2<f32>(0.5)) * uvExtent, hasDimensions);\n \n // Linear camera depth along optical viewing axis\n out.linearDepth = dot(worldPos4.xyz - cam.cameraPos.xyz, cam.cameraDir.xyz);\n return out;\n}\n\nfn sdRoundedRectWithNormal(p: vec2<f32>, b: vec2<f32>, r: f32) -> vec3<f32> {\n let q = abs(p) - b + vec2<f32>(r);\n let sx = select(1.0, -1.0, p.x < 0.0);\n let sy = select(1.0, -1.0, p.y < 0.0);\n let s = vec2<f32>(sx, sy);\n \n // Outside corner arc region\n if (q.x > 0.0 && q.y > 0.0) {\n let l = length(q);\n let n = select(vec2<f32>(0.0, 1.0), q / l, l > 0.0001);\n return vec3<f32>(l - r, s * n);\n }\n \n // Straight edges or interior\n if (q.x > q.y) {\n let dist = q.x - r;\n return vec3<f32>(dist, s.x, 0.0);\n } else {\n let dist = q.y - r;\n return vec3<f32>(dist, 0.0, s.y);\n }\n}\n\nstruct QuadFragment {\n color : vec4<f32>, // premultiplied display color\n hdr : vec4<f32>, // premultiplied scene radiance (bloom source)\n};\n\nfn shadeQuad(in: VertexOutput, isFront: bool) -> QuadFragment {\n // One-sided quads cull against their declared normal, not the hardware\n // winding: the Y-down view basis mirrors winding, so front_facing reads\n // camera-facing quads as back faces.\n if (model.params.z < 0.5 && dot(in.worldNormal, cam.cameraPos.xyz - in.worldPos) < 0.0) {\n discard;\n }\n \n var outerAlpha = 1.0;\n var borderFactor = 0.0;\n let br = model.params.y;\n let borderWidth = model.params.w;\n let hasDimensions = model.dimensions.x > 0.0 && model.dimensions.y > 0.0;\n \n if (hasDimensions) {\n let halfSize = model.dimensions.xy * 0.5;\n let normData = sdRoundedRectWithNormal(in.localPos, halfSize, br);\n \n let uvDx = dpdx(in.localPos);\n let uvDy = dpdy(in.localPos);\n \n let dPdx = normData.y * uvDx.x + normData.z * uvDx.y;\n let dPdy = normData.y * uvDy.x + normData.z * uvDy.y;\n let gradLen = max(sqrt(dPdx * dPdx + dPdy * dPdy), 0.001);\n \n let distPixel = normData.x / gradLen;\n outerAlpha = clamp(0.5 - distPixel, 0.0, 1.0);\n if (outerAlpha <= 0.001) {\n discard;\n }\n \n if (borderWidth > 0.0 && model.borderColor.a > 0.0) {\n let borderWidthPixel = max(borderWidth / gradLen, 0.0);\n let innerAlpha = clamp(0.5 - (distPixel + borderWidthPixel), 0.0, 1.0);\n borderFactor = clamp(outerAlpha - innerAlpha, 0.0, 1.0) * model.borderColor.a;\n }\n }\n \n let clampedUv = clamp(in.uv, vec2<f32>(0.0), vec2<f32>(1.0));\n let dxUV = dpdx(in.uv);\n let dyUV = dpdy(in.uv);\n var texColor = textureSampleGrad(mainTex, texSampler, clampedUv, dxUV, dyUV);\n let texAlpha = texColor.a;\n \n let unmultipliedRgb = select(texColor.rgb / texAlpha, texColor.rgb, texAlpha < 0.001);\n let baseRgb = mix(unmultipliedRgb * model.colorTint.rgb, model.borderColor.rgb, borderFactor);\n let alpha = mix(texAlpha, 1.0, borderFactor) * model.params.x * model.colorTint.a * outerAlpha * matteCoverage(in.clipPos.xy);\n if (alpha <= 0.001) {\n discard;\n }\n \n let shaded = shadeSurfaceFull(in.worldPos, in.worldNormal, baseRgb, model.materialParams, model.pbr, model.emissive);\n var out: QuadFragment;\n out.color = vec4<f32>(shaded.display * alpha, alpha);\n out.hdr = vec4<f32>(shaded.hdr * alpha, alpha);\n return out;\n}\n\nstruct MrtOutput {\n @location(0) color : vec4<f32>,\n @location(1) depth : vec4<f32>,\n};\n\nstruct BloomOutput {\n @location(0) color : vec4<f32>,\n @location(1) hdr : vec4<f32>,\n};\n\nstruct MrtBloomOutput {\n @location(0) color : vec4<f32>,\n @location(1) depth : vec4<f32>,\n @location(2) hdr : vec4<f32>,\n};\n\n@fragment\nfn fs_single(in: VertexOutput, @builtin(front_facing) isFront: bool) -> @location(0) vec4<f32> {\n return shadeQuad(in, isFront).color;\n}\n\n@fragment\nfn fs_mrt(in: VertexOutput, @builtin(front_facing) isFront: bool) -> MrtOutput {\n var out: MrtOutput;\n out.color = shadeQuad(in, isFront).color;\n out.depth = vec4<f32>(in.linearDepth, 0.0, 0.0, 1.0);\n return out;\n}\n\n@fragment\nfn fs_single_bloom(in: VertexOutput, @builtin(front_facing) isFront: bool) -> BloomOutput {\n let f = shadeQuad(in, isFront);\n var out: BloomOutput;\n out.color = f.color;\n out.hdr = f.hdr;\n return out;\n}\n\n@fragment\nfn fs_mrt_bloom(in: VertexOutput, @builtin(front_facing) isFront: bool) -> MrtBloomOutput {\n let f = shadeQuad(in, isFront);\n var out: MrtBloomOutput;\n out.color = f.color;\n out.depth = vec4<f32>(in.linearDepth, 0.0, 0.0, 1.0);\n out.hdr = f.hdr;\n return out;\n}\n\n// Shadow-map pass: depth only, alpha-tested so a cut-out casts its shape.\n@fragment\nfn fs_shadow(in: VertexOutput) {\n let clampedUv = clamp(in.uv, vec2<f32>(0.0), vec2<f32>(1.0));\n let a = textureSampleLevel(mainTex, texSampler, clampedUv, 0.0).a * model.params.x * model.colorTint.a;\n if (a < 0.5) {\n discard;\n }\n}\n`;\n\n//#endregion\n//#region src/renderer3d/shadow-depth.ts\n/** Shadow maps: a depth32float target rendered from a light's point of view. */\nconst SHADOW_DEPTH_FORMAT = \"depth32float\";\n/** Depth state for shadow-map passes: slope-scaled bias fights acne on steep faces. */\nconst SHADOW_DEPTH_STENCIL = {\n\tformat: SHADOW_DEPTH_FORMAT,\n\tdepthWriteEnabled: true,\n\tdepthCompare: \"less-equal\",\n\tdepthBias: 2,\n\tdepthBiasSlopeScale: 2.5,\n\tdepthBiasClamp: .01\n};\n\n//#endregion\n//#region src/renderer3d/surface-params.ts\n/** Floats appended to each 3D model uniform block: pbr vec4 + emissive vec4. */\nconst SURFACE_PARAMS_FLOATS = 8;\nfunction packSurfaceParams(data, out, offset) {\n\tout[offset] = data.roughness ?? -1;\n\tout[offset + 1] = data.metallic ?? 0;\n\tout[offset + 2] = 0;\n\tout[offset + 3] = 0;\n\tconst e = data.emissive;\n\tif (e === void 0 || e === null) {\n\t\tout.fill(0, offset + 4, offset + 8);\n\t\treturn;\n\t}\n\tlet rgb;\n\tif (Array.isArray(e)) rgb = [\n\t\te[0],\n\t\te[1],\n\t\te[2]\n\t];\n\telse {\n\t\tconst c = parseColor(e);\n\t\trgb = [\n\t\t\tc.r * c.a,\n\t\t\tc.g * c.a,\n\t\t\tc.b * c.a\n\t\t];\n\t}\n\tout[offset + 4] = rgb[0];\n\tout[offset + 5] = rgb[1];\n\tout[offset + 6] = rgb[2];\n\tout[offset + 7] = data.emissiveIntensity ?? 1;\n}\n\n//#endregion\n//#region src/renderer3d/quad3d-pipeline.ts\n/**\n* Group 3 of every lit 3D shader: the lights uniform, then the shadow map and\n* its comparison sampler (a 1×1 cleared map when no light casts shadows).\n*/\nfunction createLightsLayout(device, label = \"Lights3DLayout\") {\n\treturn device.createBindGroupLayout({\n\t\tlabel,\n\t\tentries: [\n\t\t\t{\n\t\t\t\tbinding: 0,\n\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\tbuffer: { type: \"uniform\" }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 1,\n\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\ttexture: { sampleType: \"depth\" }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 2,\n\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\tsampler: { type: \"comparison\" }\n\t\t\t}\n\t\t]\n\t});\n}\n/** [shininess, specularIntensity, ambientIntensity, materialMode] as the 3D shaders' lighting reads them. */\nfunction packMaterialParams(data) {\n\treturn [\n\t\tdata.roughness !== void 0 ? Math.max(1, (1 - data.roughness) * 128) : data.shininess ?? 32,\n\t\tdata.metallic !== void 0 ? data.metallic : data.specularIntensity ?? .5,\n\t\tdata.ambientIntensity ?? 1,\n\t\tdata.material === \"unlit\" ? 0 : 1\n\t];\n}\nvar Quad3DPipeline = class {\n\tdevice;\n\tpipelineSingle;\n\tpipelineMrt;\n\tbloomVariants;\n\t/** Depth-only, alpha-tested: draws a caster into a shadow map. */\n\tpipelineShadow;\n\tcameraLayout;\n\tmodelLayout;\n\ttextureLayout;\n\tlightsLayout;\n\tmodelPool;\n\tvertexBuffer;\n\tindexBuffer;\n\tmodelData = new Float32Array(52 + SURFACE_PARAMS_FLOATS);\n\tconstructor(device, format, depthFormat = \"depth24plus\", sampleCount = 1) {\n\t\tthis.device = device;\n\t\tthis.modelPool = new BufferPool((52 + SURFACE_PARAMS_FLOATS) * 4, GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST);\n\t\tconst module = device.createShaderModule({\n\t\t\tlabel: \"quad3d.wgsl\",\n\t\t\tcode: quad3dWgsl\n\t\t});\n\t\tthis.cameraLayout = device.createBindGroupLayout({\n\t\t\tlabel: \"Quad3DCameraLayout\",\n\t\t\tentries: [{\n\t\t\t\tbinding: 0,\n\t\t\t\tvisibility: GPUShaderStage.VERTEX | GPUShaderStage.FRAGMENT,\n\t\t\t\tbuffer: { type: \"uniform\" }\n\t\t\t}]\n\t\t});\n\t\tthis.modelLayout = device.createBindGroupLayout({\n\t\t\tlabel: \"Quad3DModelLayout\",\n\t\t\tentries: [{\n\t\t\t\tbinding: 0,\n\t\t\t\tvisibility: GPUShaderStage.VERTEX | GPUShaderStage.FRAGMENT,\n\t\t\t\tbuffer: { type: \"uniform\" }\n\t\t\t}, matteLayoutEntry(1)]\n\t\t});\n\t\tthis.textureLayout = device.createBindGroupLayout({\n\t\t\tlabel: \"Quad3DTextureLayout\",\n\t\t\tentries: [{\n\t\t\t\tbinding: 0,\n\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\tsampler: { type: \"filtering\" }\n\t\t\t}, {\n\t\t\t\tbinding: 1,\n\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\ttexture: { sampleType: \"float\" }\n\t\t\t}]\n\t\t});\n\t\tthis.lightsLayout = createLightsLayout(device, \"Quad3DLightsLayout\");\n\t\tconst pipelineLayout = device.createPipelineLayout({ bindGroupLayouts: [\n\t\t\tthis.cameraLayout,\n\t\t\tthis.modelLayout,\n\t\t\tthis.textureLayout,\n\t\t\tthis.lightsLayout\n\t\t] });\n\t\tconst vertexState = {\n\t\t\tmodule,\n\t\t\tentryPoint: \"vs_main\",\n\t\t\tbuffers: [{\n\t\t\t\tarrayStride: 32,\n\t\t\t\tattributes: [\n\t\t\t\t\t{\n\t\t\t\t\t\tshaderLocation: 0,\n\t\t\t\t\t\toffset: 0,\n\t\t\t\t\t\tformat: \"float32x3\"\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tshaderLocation: 1,\n\t\t\t\t\t\toffset: 12,\n\t\t\t\t\t\tformat: \"float32x2\"\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tshaderLocation: 2,\n\t\t\t\t\t\toffset: 20,\n\t\t\t\t\t\tformat: \"float32x3\"\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t}]\n\t\t};\n\t\tconst base = {\n\t\t\tlabel: \"Quad3DPipeline\",\n\t\t\tlayout: pipelineLayout,\n\t\t\tvertex: vertexState,\n\t\t\tmodule,\n\t\t\tformat,\n\t\t\tdepthStencil: {\n\t\t\t\tformat: depthFormat,\n\t\t\t\tdepthWriteEnabled: true,\n\t\t\t\tdepthCompare: \"less-equal\"\n\t\t\t},\n\t\t\tprimitive: {\n\t\t\t\ttopology: \"triangle-list\",\n\t\t\t\tcullMode: \"none\"\n\t\t\t},\n\t\t\tmultisample: { count: sampleCount }\n\t\t};\n\t\tconst { single, mrt } = createBasePipelines(device, base);\n\t\tthis.pipelineSingle = single;\n\t\tthis.pipelineMrt = mrt;\n\t\tthis.bloomVariants = new BloomPipelineVariants(device, base);\n\t\tthis.pipelineShadow = device.createRenderPipeline({\n\t\t\tlabel: \"Quad3DPipelineShadow\",\n\t\t\tlayout: device.createPipelineLayout({ bindGroupLayouts: [\n\t\t\t\tthis.cameraLayout,\n\t\t\t\tthis.modelLayout,\n\t\t\t\tthis.textureLayout\n\t\t\t] }),\n\t\t\tvertex: vertexState,\n\t\t\tfragment: {\n\t\t\t\tmodule,\n\t\t\t\tentryPoint: \"fs_shadow\",\n\t\t\t\ttargets: []\n\t\t\t},\n\t\t\tdepthStencil: SHADOW_DEPTH_STENCIL,\n\t\t\tprimitive: {\n\t\t\t\ttopology: \"triangle-list\",\n\t\t\t\tcullMode: \"none\"\n\t\t\t}\n\t\t});\n\t\tconst vertices = new Float32Array([\n\t\t\t-.5,\n\t\t\t-.5,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\t-1,\n\t\t\t.5,\n\t\t\t-.5,\n\t\t\t0,\n\t\t\t1,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\t-1,\n\t\t\t.5,\n\t\t\t.5,\n\t\t\t0,\n\t\t\t1,\n\t\t\t1,\n\t\t\t0,\n\t\t\t0,\n\t\t\t-1,\n\t\t\t-.5,\n\t\t\t.5,\n\t\t\t0,\n\t\t\t0,\n\t\t\t1,\n\t\t\t0,\n\t\t\t0,\n\t\t\t-1\n\t\t]);\n\t\tconst indices = new Uint16Array([\n\t\t\t0,\n\t\t\t1,\n\t\t\t2,\n\t\t\t0,\n\t\t\t2,\n\t\t\t3\n\t\t]);\n\t\tthis.vertexBuffer = device.createBuffer({\n\t\t\tsize: vertices.byteLength,\n\t\t\tusage: GPUBufferUsage.VERTEX | GPUBufferUsage.COPY_DST,\n\t\t\tmappedAtCreation: true\n\t\t});\n\t\tnew Float32Array(this.vertexBuffer.getMappedRange()).set(vertices);\n\t\tthis.vertexBuffer.unmap();\n\t\tthis.indexBuffer = device.createBuffer({\n\t\t\tsize: indices.byteLength,\n\t\t\tusage: GPUBufferUsage.INDEX | GPUBufferUsage.COPY_DST,\n\t\t\tmappedAtCreation: true\n\t\t});\n\t\tnew Uint16Array(this.indexBuffer.getMappedRange()).set(indices);\n\t\tthis.indexBuffer.unmap();\n\t}\n\tresetPools() {\n\t\tthis.modelPool.reset();\n\t}\n\tpackModel(data) {\n\t\twriteModelTransform(this.modelData, data.modelMatrix, data.normalMatrix, data.colorTint);\n\t\tconst bColor = data.borderColor ?? [\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0\n\t\t];\n\t\tthis.modelData[36] = bColor[0];\n\t\tthis.modelData[37] = bColor[1];\n\t\tthis.modelData[38] = bColor[2];\n\t\tthis.modelData[39] = bColor[3];\n\t\tthis.modelData[40] = data.opacity ?? 1;\n\t\tthis.modelData[41] = data.borderRadius ?? 0;\n\t\tthis.modelData[42] = data.twoSided ? 1 : 0;\n\t\tthis.modelData[43] = data.borderWidth ?? 0;\n\t\tthis.modelData[44] = data.width ?? 0;\n\t\tthis.modelData[45] = data.height ?? 0;\n\t\tthis.modelData[46] = data.textureExtent?.[0] ?? 0;\n\t\tthis.modelData[47] = data.textureExtent?.[1] ?? 0;\n\t\tthis.modelData.set(packMaterialParams(data), 48);\n\t\tpackSurfaceParams(data, this.modelData, 52);\n\t\tconst modelBuffer = this.modelPool.getBuffer(this.device, this.modelData);\n\t\treturn this.device.createBindGroup({\n\t\t\tlayout: this.modelLayout,\n\t\t\tentries: [{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: { buffer: modelBuffer }\n\t\t\t}, {\n\t\t\t\tbinding: 1,\n\t\t\t\tresource: data.matte?.createView() ?? fullCoverageView(this.device)\n\t\t\t}]\n\t\t});\n\t}\n\ttextureBindGroup(texture, sampler) {\n\t\treturn this.device.createBindGroup({\n\t\t\tlayout: this.textureLayout,\n\t\t\tentries: [{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: sampler\n\t\t\t}, {\n\t\t\t\tbinding: 1,\n\t\t\t\tresource: texture.createView()\n\t\t\t}]\n\t\t});\n\t}\n\tdraw(pass, cameraBindGroup, lightsBindGroup, texture, sampler, data, useMrt = false, useBloom = false) {\n\t\tconst modelBindGroup = this.packModel(data);\n\t\tconst textureBindGroup = this.textureBindGroup(texture, sampler);\n\t\tpass.setPipeline(useBloom ? this.bloomVariants.get(useMrt) : useMrt ? this.pipelineMrt : this.pipelineSingle);\n\t\tpass.setBindGroup(0, cameraBindGroup);\n\t\tpass.setBindGroup(1, modelBindGroup);\n\t\tpass.setBindGroup(2, textureBindGroup);\n\t\tpass.setBindGroup(3, lightsBindGroup);\n\t\tpass.setVertexBuffer(0, this.vertexBuffer);\n\t\tpass.setIndexBuffer(this.indexBuffer, \"uint16\");\n\t\tpass.drawIndexed(6);\n\t}\n\t/** Draws the quad into a shadow map (`lightCameraBindGroup` holds the light's view-projection). */\n\tdrawShadow(pass, lightCameraBindGroup, texture, sampler, data) {\n\t\tpass.setPipeline(this.pipelineShadow);\n\t\tpass.setBindGroup(0, lightCameraBindGroup);\n\t\tpass.setBindGroup(1, this.packModel(data));\n\t\tpass.setBindGroup(2, this.textureBindGroup(texture, sampler));\n\t\tpass.setVertexBuffer(0, this.vertexBuffer);\n\t\tpass.setIndexBuffer(this.indexBuffer, \"uint16\");\n\t\tpass.drawIndexed(6);\n\t}\n\tdestroy() {\n\t\tthis.modelPool.destroy();\n\t\tthis.vertexBuffer.destroy();\n\t\tthis.indexBuffer.destroy();\n\t}\n};\n\n//#endregion\n//#region src/renderer3d/mesh3d-pipeline.ts\nvar Mesh3DPipeline = class {\n\tdevice;\n\tpipelineSingle;\n\tpipelineMrt;\n\tbloomVariants;\n\t/** Depth only (skinning included): draws a caster into a shadow map. */\n\tpipelineShadow;\n\tcameraLayout;\n\tmodelLayout;\n\ttextureLayout;\n\tlightsLayout;\n\tmodelPool;\n\tskinningPool;\n\tdefaultWhiteTexture;\n\t/** (0.5, 0.5, 1): an unperturbed tangent-space normal. */\n\tflatNormalTexture;\n\tdefaultSkinningBuffer;\n\t/** White vertex colors for meshes without any, grown to the largest mesh. */\n\twhiteColorBuffer = null;\n\twhiteColorCapacity = 0;\n\t/** Outgrown white buffers: earlier draws this frame may still read them. */\n\tretiredColorBuffers = [];\n\tmodelData = new Float32Array(52 + SURFACE_PARAMS_FLOATS);\n\tconstructor(device, format, depthFormat = \"depth24plus\", cameraLayout, lightsLayout, sampleCount = 1) {\n\t\tthis.device = device;\n\t\tthis.modelPool = new BufferPool((52 + SURFACE_PARAMS_FLOATS) * 4, GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST);\n\t\tthis.skinningPool = new BufferPool(8192, GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST);\n\t\tconst module = device.createShaderModule({\n\t\t\tlabel: \"mesh3d.wgsl\",\n\t\t\tcode: mesh3dWgsl\n\t\t});\n\t\tthis.cameraLayout = cameraLayout ?? device.createBindGroupLayout({\n\t\t\tlabel: \"Mesh3DCameraLayout\",\n\t\t\tentries: [{\n\t\t\t\tbinding: 0,\n\t\t\t\tvisibility: GPUShaderStage.VERTEX | GPUShaderStage.FRAGMENT,\n\t\t\t\tbuffer: { type: \"uniform\" }\n\t\t\t}]\n\t\t});\n\t\tthis.modelLayout = device.createBindGroupLayout({\n\t\t\tlabel: \"Mesh3DModelLayout\",\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tvisibility: GPUShaderStage.VERTEX | GPUShaderStage.FRAGMENT,\n\t\t\t\t\tbuffer: { type: \"uniform\" }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tvisibility: GPUShaderStage.VERTEX,\n\t\t\t\t\tbuffer: { type: \"uniform\" }\n\t\t\t\t},\n\t\t\t\tmatteLayoutEntry(2),\n\t\t\t\tmatteLayoutEntry(3)\n\t\t\t]\n\t\t});\n\t\tthis.textureLayout = device.createBindGroupLayout({\n\t\t\tlabel: \"Mesh3DTextureLayout\",\n\t\t\tentries: [{\n\t\t\t\tbinding: 0,\n\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\tsampler: { type: \"filtering\" }\n\t\t\t}, ...[\n\t\t\t\t1,\n\t\t\t\t2,\n\t\t\t\t3,\n\t\t\t\t4,\n\t\t\t\t5\n\t\t\t].map((binding) => ({\n\t\t\t\tbinding,\n\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\ttexture: { sampleType: \"float\" }\n\t\t\t}))]\n\t\t});\n\t\tthis.lightsLayout = lightsLayout ?? createLightsLayout(device, \"Mesh3DLightsLayout\");\n\t\tconst pipelineLayout = device.createPipelineLayout({ bindGroupLayouts: [\n\t\t\tthis.cameraLayout,\n\t\t\tthis.modelLayout,\n\t\t\tthis.textureLayout,\n\t\t\tthis.lightsLayout\n\t\t] });\n\t\tconst vertexState = {\n\t\t\tmodule,\n\t\t\tentryPoint: \"vs_main\",\n\t\t\tbuffers: [{\n\t\t\t\tarrayStride: 64,\n\t\t\t\tattributes: [\n\t\t\t\t\t{\n\t\t\t\t\t\tshaderLocation: 0,\n\t\t\t\t\t\toffset: 0,\n\t\t\t\t\t\tformat: \"float32x3\"\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tshaderLocation: 1,\n\t\t\t\t\t\toffset: 12,\n\t\t\t\t\t\tformat: \"float32x2\"\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tshaderLocation: 2,\n\t\t\t\t\t\toffset: 20,\n\t\t\t\t\t\tformat: \"float32x3\"\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tshaderLocation: 3,\n\t\t\t\t\t\toffset: 32,\n\t\t\t\t\t\tformat: \"float32x4\"\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tshaderLocation: 4,\n\t\t\t\t\t\toffset: 48,\n\t\t\t\t\t\tformat: \"float32x4\"\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t}, {\n\t\t\t\tarrayStride: 16,\n\t\t\t\tattributes: [{\n\t\t\t\t\tshaderLocation: 5,\n\t\t\t\t\toffset: 0,\n\t\t\t\t\tformat: \"float32x4\"\n\t\t\t\t}]\n\t\t\t}]\n\t\t};\n\t\tconst base = {\n\t\t\tlabel: \"Mesh3DPipeline\",\n\t\t\tlayout: pipelineLayout,\n\t\t\tvertex: vertexState,\n\t\t\tmodule,\n\t\t\tformat,\n\t\t\tdepthStencil: {\n\t\t\t\tformat: depthFormat,\n\t\t\t\tdepthWriteEnabled: true,\n\t\t\t\tdepthCompare: \"less-equal\"\n\t\t\t},\n\t\t\tprimitive: {\n\t\t\t\ttopology: \"triangle-list\",\n\t\t\t\tcullMode: \"none\"\n\t\t\t},\n\t\t\tmultisample: { count: sampleCount }\n\t\t};\n\t\tconst { single, mrt } = createBasePipelines(device, base);\n\t\tthis.pipelineSingle = single;\n\t\tthis.pipelineMrt = mrt;\n\t\tthis.bloomVariants = new BloomPipelineVariants(device, base);\n\t\tthis.pipelineShadow = device.createRenderPipeline({\n\t\t\tlabel: \"Mesh3DPipelineShadow\",\n\t\t\tlayout: device.createPipelineLayout({ bindGroupLayouts: [this.cameraLayout, this.modelLayout] }),\n\t\t\tvertex: vertexState,\n\t\t\tdepthStencil: SHADOW_DEPTH_STENCIL,\n\t\t\tprimitive: {\n\t\t\t\ttopology: \"triangle-list\",\n\t\t\t\tcullMode: \"none\"\n\t\t\t}\n\t\t});\n\t\tthis.defaultWhiteTexture = device.createTexture({\n\t\t\tlabel: \"Mesh3DDefaultWhiteTexture\",\n\t\t\tsize: {\n\t\t\t\twidth: 1,\n\t\t\t\theight: 1\n\t\t\t},\n\t\t\tformat: \"rgba8unorm\",\n\t\t\tusage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST\n\t\t});\n\t\tdevice.queue.writeTexture({ texture: this.defaultWhiteTexture }, new Uint8Array([\n\t\t\t255,\n\t\t\t255,\n\t\t\t255,\n\t\t\t255\n\t\t]), {\n\t\t\tbytesPerRow: 4,\n\t\t\trowsPerImage: 1\n\t\t}, {\n\t\t\twidth: 1,\n\t\t\theight: 1\n\t\t});\n\t\tthis.flatNormalTexture = device.createTexture({\n\t\t\tlabel: \"Mesh3DFlatNormalTexture\",\n\t\t\tsize: {\n\t\t\t\twidth: 1,\n\t\t\t\theight: 1\n\t\t\t},\n\t\t\tformat: \"rgba8unorm\",\n\t\t\tusage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST\n\t\t});\n\t\tdevice.queue.writeTexture({ texture: this.flatNormalTexture }, new Uint8Array([\n\t\t\t128,\n\t\t\t128,\n\t\t\t255,\n\t\t\t255\n\t\t]), {\n\t\t\tbytesPerRow: 4,\n\t\t\trowsPerImage: 1\n\t\t}, {\n\t\t\twidth: 1,\n\t\t\theight: 1\n\t\t});\n\t\tconst idMatrices = new Float32Array(2048);\n\t\tfor (let b = 0; b < 128; b++) {\n\t\t\tidMatrices[b * 16] = 1;\n\t\t\tidMatrices[b * 16 + 5] = 1;\n\t\t\tidMatrices[b * 16 + 10] = 1;\n\t\t\tidMatrices[b * 16 + 15] = 1;\n\t\t}\n\t\tthis.defaultSkinningBuffer = device.createBuffer({\n\t\t\tsize: 8192,\n\t\t\tusage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,\n\t\t\tmappedAtCreation: true\n\t\t});\n\t\tnew Float32Array(this.defaultSkinningBuffer.getMappedRange()).set(idMatrices);\n\t\tthis.defaultSkinningBuffer.unmap();\n\t}\n\tresetPools() {\n\t\tthis.modelPool.reset();\n\t\tthis.skinningPool.reset();\n\t}\n\tpackModel(data) {\n\t\twriteModelTransform(this.modelData, data.modelMatrix, data.normalMatrix, data.colorTint);\n\t\tthis.modelData[36] = data.opacity ?? 1;\n\t\tthis.modelData[37] = data.twoSided ? 1 : 0;\n\t\tthis.modelData[38] = data.isSkinned ? 1 : 0;\n\t\tthis.modelData[39] = data.wireframe ? 1 : 0;\n\t\tconst shininess = data.roughness !== void 0 ? Math.max(1, (1 - data.roughness) * 128) : data.shininess ?? 32;\n\t\tconst specInt = data.metallic !== void 0 ? data.metallic : data.specularIntensity ?? .5;\n\t\tconst ambientInt = data.ambientIntensity ?? 1;\n\t\tconst materialMode = data.material === \"unlit\" ? 0 : data.material === \"toon\" ? 2 : 1;\n\t\tthis.modelData[40] = shininess;\n\t\tthis.modelData[41] = specInt;\n\t\tthis.modelData[42] = ambientInt;\n\t\tthis.modelData[43] = materialMode;\n\t\tconst shade = data.shadeColor ?? [\n\t\t\t1,\n\t\t\t1,\n\t\t\t1\n\t\t];\n\t\tthis.modelData[44] = shade[0];\n\t\tthis.modelData[45] = shade[1];\n\t\tthis.modelData[46] = shade[2];\n\t\tthis.modelData[47] = data.alphaCutoff ?? 0;\n\t\tpackSurfaceParams(data, this.modelData, 48);\n\t\tconst maps = data.maps;\n\t\tthis.modelData[56] = maps?.normal ? maps.normalScale ?? 1 : 0;\n\t\tthis.modelData[57] = maps?.occlusion ? maps.occlusionStrength ?? 1 : 0;\n\t\tthis.modelData[58] = maps?.metallicRoughness ? 1 : 0;\n\t\tthis.modelData[59] = maps?.emissive ? 1 : 0;\n\t\tconst glass = data.glass;\n\t\tif (glass) {\n\t\t\tthis.modelData[44] = glass.dispersion;\n\t\t\tthis.modelData[45] = glass.thickness;\n\t\t\tthis.modelData[46] = glass.frost;\n\t\t\tthis.modelData[50] = 1;\n\t\t\tthis.modelData[51] = glass.ior;\n\t\t}\n\t\tconst modelBuffer = this.modelPool.getBuffer(this.device, this.modelData);\n\t\tconst skinningBuffer = data.isSkinned && data.skinningMatrices ? this.skinningPool.getBuffer(this.device, data.skinningMatrices) : this.defaultSkinningBuffer;\n\t\treturn this.device.createBindGroup({\n\t\t\tlayout: this.modelLayout,\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: { buffer: modelBuffer }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: { buffer: skinningBuffer }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: data.matte?.createView() ?? fullCoverageView(this.device)\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 3,\n\t\t\t\t\tresource: data.glass && data.backdrop?.createView() || fullCoverageView(this.device)\n\t\t\t\t}\n\t\t\t]\n\t\t});\n\t}\n\tdraw(pass, cameraBindGroup, lightsBindGroup, meshBuffers, texture, sampler, data, useMrt = false, useBloom = false) {\n\t\tconst modelBindGroup = this.packModel(data);\n\t\tconst white = this.defaultWhiteTexture;\n\t\tconst maps = data.maps;\n\t\tconst textureBindGroup = this.device.createBindGroup({\n\t\t\tlayout: this.textureLayout,\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: sampler\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: (texture ?? white).createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: (maps?.normal ?? this.flatNormalTexture).createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 3,\n\t\t\t\t\tresource: (maps?.metallicRoughness ?? white).createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 4,\n\t\t\t\t\tresource: (maps?.occlusion ?? white).createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 5,\n\t\t\t\t\tresource: (maps?.emissive ?? white).createView()\n\t\t\t\t}\n\t\t\t]\n\t\t});\n\t\tpass.setPipeline(useBloom ? this.bloomVariants.get(useMrt) : useMrt ? this.pipelineMrt : this.pipelineSingle);\n\t\tpass.setBindGroup(0, cameraBindGroup);\n\t\tpass.setBindGroup(1, modelBindGroup);\n\t\tpass.setBindGroup(2, textureBindGroup);\n\t\tpass.setBindGroup(3, lightsBindGroup);\n\t\tpass.setVertexBuffer(0, meshBuffers.vertexBuffer);\n\t\tpass.setVertexBuffer(1, this.colorsFor(meshBuffers));\n\t\tpass.setIndexBuffer(meshBuffers.indexBuffer, meshBuffers.indexFormat);\n\t\tpass.drawIndexed(meshBuffers.indexCount);\n\t}\n\t/** Draws the mesh into a shadow map (`lightCameraBindGroup` holds the light's view-projection). */\n\tdrawShadow(pass, lightCameraBindGroup, meshBuffers, data) {\n\t\tpass.setPipeline(this.pipelineShadow);\n\t\tpass.setBindGroup(0, lightCameraBindGroup);\n\t\tpass.setBindGroup(1, this.packModel(data));\n\t\tpass.setVertexBuffer(0, meshBuffers.vertexBuffer);\n\t\tpass.setVertexBuffer(1, this.colorsFor(meshBuffers));\n\t\tpass.setIndexBuffer(meshBuffers.indexBuffer, meshBuffers.indexFormat);\n\t\tpass.drawIndexed(meshBuffers.indexCount);\n\t}\n\tcolorsFor(meshBuffers) {\n\t\tif (meshBuffers.colorBuffer) return meshBuffers.colorBuffer;\n\t\tconst needed = Math.max(1, Math.ceil(meshBuffers.vertexBuffer.size / 64));\n\t\tif (!this.whiteColorBuffer || this.whiteColorCapacity < needed) {\n\t\t\tif (this.whiteColorBuffer) this.retiredColorBuffers.push(this.whiteColorBuffer);\n\t\t\tconst capacity = 2 ** Math.ceil(Math.log2(needed));\n\t\t\tthis.whiteColorBuffer = this.device.createBuffer({\n\t\t\t\tlabel: \"Mesh3DWhiteVertexColors\",\n\t\t\t\tsize: capacity * 16,\n\t\t\t\tusage: GPUBufferUsage.VERTEX,\n\t\t\t\tmappedAtCreation: true\n\t\t\t});\n\t\t\tnew Float32Array(this.whiteColorBuffer.getMappedRange()).fill(1);\n\t\t\tthis.whiteColorBuffer.unmap();\n\t\t\tthis.whiteColorCapacity = capacity;\n\t\t}\n\t\treturn this.whiteColorBuffer;\n\t}\n\tdestroy() {\n\t\tthis.whiteColorBuffer?.destroy();\n\t\tfor (const buffer of this.retiredColorBuffers) buffer.destroy();\n\t\tthis.modelPool.destroy();\n\t\tthis.skinningPool.destroy();\n\t\tthis.defaultWhiteTexture.destroy();\n\t\tthis.flatNormalTexture.destroy();\n\t\tthis.defaultSkinningBuffer.destroy();\n\t}\n};\n\n//#endregion\n//#region src/shaders/motion-blur.ts\n/**\n* @file packages/webgpu-renderers/src/shaders/motion-blur.ts\n* WGSL Shader Module for Velocity-Directed Line Integral Camera Motion Blur.\n*/\nconst motionBlurWgsl = `\nstruct MotionBlurUniforms {\n shutterFraction: f32, // shutterAngle / 360.0\n sampleCount: u32, // e.g. 16\n maxVelocity: f32, // in pixels\n tileDilation: u32,\n viewportWidth: f32,\n viewportHeight: f32,\n depthThreshold: f32,\n curveType: u32, // 0: box, 1: gaussian, 2: triangle\n};\n\n@group(0) @binding(0) var colorTexture: texture_2d<f32>;\n@group(0) @binding(1) var velocityTexture: texture_2d<f32>;\n@group(0) @binding(2) var depthTexture: texture_depth_2d;\n@group(0) @binding(3) var colorSampler: sampler;\n@group(0) @binding(4) var<uniform> u: MotionBlurUniforms;\n\nfn computeVertexPos(vertexIndex: u32) -> vec4<f32> {\n var pos = array<vec2<f32>, 4>(\n vec2<f32>(-1.0, -1.0),\n vec2<f32>( 1.0, -1.0),\n vec2<f32>(-1.0, 1.0),\n vec2<f32>( 1.0, 1.0)\n );\n return vec4<f32>(pos[vertexIndex], 0.0, 1.0);\n}\n\n@vertex\nfn vs(@builtin(vertex_index) vertexIndex: u32) -> @builtin(position) vec4<f32> {\n return computeVertexPos(vertexIndex);\n}\n\n@vertex\nfn vs_main(@builtin(vertex_index) vertexIndex: u32) -> @builtin(position) vec4<f32> {\n return computeVertexPos(vertexIndex);\n}\n\nfn executeMotionBlur(pos: vec4<f32>) -> vec4<f32> {\n let uv = pos.xy / vec2<f32>(u.viewportWidth, u.viewportHeight);\n let centerDepth = textureLoad(depthTexture, vec2<i32>(pos.xy), 0);\n let rawVel = textureSampleLevel(velocityTexture, colorSampler, uv, 0.0).xy;\n \n // Scale velocity by shutter exposure fraction\n var vel = rawVel * u.shutterFraction;\n let speed = length(vel);\n \n if (speed < 0.5) {\n return textureSampleLevel(colorTexture, colorSampler, uv, 0.0);\n }\n \n // Clamp to configured max velocity limit\n if (speed > u.maxVelocity) {\n vel = (vel / speed) * u.maxVelocity;\n }\n \n let velUV = vel / vec2<f32>(u.viewportWidth, u.viewportHeight);\n let halfSamples = f32(u.sampleCount) * 0.5;\n \n var accumColor = vec4<f32>(0.0);\n var totalWeight = 0.0;\n \n for (var i = 0u; i < u.sampleCount; i = i + 1u) {\n let t = (f32(i) - halfSamples) / halfSamples;\n let sampleUV = uv + velUV * t;\n \n if (sampleUV.x < 0.0 || sampleUV.x > 1.0 || sampleUV.y < 0.0 || sampleUV.y > 1.0) {\n continue;\n }\n \n let sampleDepth = textureSampleLevel(depthTexture, colorSampler, sampleUV, 0);\n let depthDelta = abs(sampleDepth - centerDepth);\n let depthWeight = clamp(1.0 - depthDelta / max(u.depthThreshold, 0.0001), 0.05, 1.0);\n \n var curveW = 1.0;\n if (u.curveType == 1u) {\n curveW = exp(-2.5 * t * t);\n } else if (u.curveType == 2u) {\n curveW = 1.0 - abs(t);\n }\n \n let w = curveW * depthWeight;\n let sampleCol = textureSampleLevel(colorTexture, colorSampler, sampleUV, 0.0);\n \n accumColor += sampleCol * w;\n totalWeight += w;\n }\n \n if (totalWeight <= 0.0) {\n return textureSampleLevel(colorTexture, colorSampler, uv, 0.0);\n }\n \n return accumColor / totalWeight;\n}\n\n@fragment\nfn fs(@builtin(position) pos: vec4<f32>) -> @location(0) vec4<f32> {\n return executeMotionBlur(pos);\n}\n\n@fragment\nfn fs_motion_blur(@builtin(position) pos: vec4<f32>) -> @location(0) vec4<f32> {\n return executeMotionBlur(pos);\n}\n`;\n\n//#endregion\n//#region src/renderer3d/motion-blur-pipeline.ts\n/**\n* @file packages/webgpu-renderers/src/renderer3d/motion-blur-pipeline.ts\n* WebGPU render pipeline for camera shutter motion blur using screen-space velocity buffers.\n*/\nvar MotionBlurPipeline = class {\n\tdevice;\n\tpipeline;\n\tbindGroupLayout;\n\tuniformBuffer;\n\tsampler;\n\tconstructor(device) {\n\t\tthis.device = device;\n\t\tconst shaderModule = device.createShaderModule({\n\t\t\tlabel: \"motion-blur-shader\",\n\t\t\tcode: motionBlurWgsl\n\t\t});\n\t\tthis.bindGroupLayout = device.createBindGroupLayout({\n\t\t\tlabel: \"motion-blur-bgl\",\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\t\ttexture: { sampleType: \"float\" }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\t\ttexture: { sampleType: \"float\" }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\t\ttexture: { sampleType: \"depth\" }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 3,\n\t\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\t\tsampler: { type: \"filtering\" }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 4,\n\t\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\t\tbuffer: { type: \"uniform\" }\n\t\t\t\t}\n\t\t\t]\n\t\t});\n\t\tconst pipelineLayout = device.createPipelineLayout({\n\t\t\tlabel: \"motion-blur-layout\",\n\t\t\tbindGroupLayouts: [this.bindGroupLayout]\n\t\t});\n\t\tthis.pipeline = device.createRenderPipeline({\n\t\t\tlabel: \"motion-blur-pipeline\",\n\t\t\tlayout: pipelineLayout,\n\t\t\tvertex: {\n\t\t\t\tmodule: shaderModule,\n\t\t\t\tentryPoint: \"vs_main\"\n\t\t\t},\n\t\t\tfragment: {\n\t\t\t\tmodule: shaderModule,\n\t\t\t\tentryPoint: \"fs_motion_blur\",\n\t\t\t\ttargets: [{\n\t\t\t\t\tformat: \"rgba8unorm\",\n\t\t\t\t\tblend: {\n\t\t\t\t\t\tcolor: {\n\t\t\t\t\t\t\tsrcFactor: \"one\",\n\t\t\t\t\t\t\tdstFactor: \"one-minus-src-alpha\",\n\t\t\t\t\t\t\toperation: \"add\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\talpha: {\n\t\t\t\t\t\t\tsrcFactor: \"one\",\n\t\t\t\t\t\t\tdstFactor: \"one-minus-src-alpha\",\n\t\t\t\t\t\t\toperation: \"add\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}]\n\t\t\t},\n\t\t\tprimitive: { topology: \"triangle-strip\" }\n\t\t});\n\t\tthis.uniformBuffer = device.createBuffer({\n\t\t\tlabel: \"motion-blur-uniforms\",\n\t\t\tsize: 32,\n\t\t\tusage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST\n\t\t});\n\t\tthis.sampler = device.createSampler({\n\t\t\tlabel: \"motion-blur-sampler\",\n\t\t\tmagFilter: \"linear\",\n\t\t\tminFilter: \"linear\"\n\t\t});\n\t}\n\trender(commandEncoder, colorView, velocityView, depthView, targetView, options) {\n\t\tconst shutterFraction = (options.shutterAngle ?? 180) / 360;\n\t\tconst sampleCount = options.sampleCount ?? 16;\n\t\tconst maxVelocity = options.maxVelocity ?? 64;\n\t\tconst depthThreshold = options.depthThreshold ?? .05;\n\t\tconst curveType = options.curveType === \"box\" ? 0 : options.curveType === \"triangle\" ? 2 : 1;\n\t\tconst uniformData$2 = /* @__PURE__ */ new ArrayBuffer(32);\n\t\tconst f32View = new Float32Array(uniformData$2);\n\t\tconst u32View = new Uint32Array(uniformData$2);\n\t\tf32View[0] = shutterFraction;\n\t\tu32View[1] = sampleCount;\n\t\tf32View[2] = maxVelocity;\n\t\tu32View[3] = 16;\n\t\tf32View[4] = options.width;\n\t\tf32View[5] = options.height;\n\t\tf32View[6] = depthThreshold;\n\t\tu32View[7] = curveType;\n\t\tthis.device.queue.writeBuffer(this.uniformBuffer, 0, uniformData$2);\n\t\tconst bindGroup = this.device.createBindGroup({\n\t\t\tlabel: \"motion-blur-bg\",\n\t\t\tlayout: this.bindGroupLayout,\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: colorView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: velocityView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: depthView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 3,\n\t\t\t\t\tresource: this.sampler\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 4,\n\t\t\t\t\tresource: { buffer: this.uniformBuffer }\n\t\t\t\t}\n\t\t\t]\n\t\t});\n\t\tconst pass = commandEncoder.beginRenderPass({\n\t\t\tlabel: \"motion-blur-pass\",\n\t\t\tcolorAttachments: [{\n\t\t\t\tview: targetView,\n\t\t\t\tloadOp: \"clear\",\n\t\t\t\tstoreOp: \"store\",\n\t\t\t\tclearValue: {\n\t\t\t\t\tr: 0,\n\t\t\t\t\tg: 0,\n\t\t\t\t\tb: 0,\n\t\t\t\t\ta: 0\n\t\t\t\t}\n\t\t\t}]\n\t\t});\n\t\tpass.setPipeline(this.pipeline);\n\t\tpass.setBindGroup(0, bindGroup);\n\t\tpass.draw(4);\n\t\tpass.end();\n\t}\n\tdestroy() {\n\t\tthis.uniformBuffer.destroy();\n\t}\n};\n\n//#endregion\n//#region src/renderer3d/text-extruder.ts\nfunction parseHexOrRgbColor(colorStr) {\n\tconst c = colorStr.trim();\n\tif (c.startsWith(\"#\")) {\n\t\tconst hex = c.slice(1);\n\t\tif (hex.length === 3) return [\n\t\t\tNumber.parseInt(hex[0] + hex[0], 16) / 255,\n\t\t\tNumber.parseInt(hex[1] + hex[1], 16) / 255,\n\t\t\tNumber.parseInt(hex[2] + hex[2], 16) / 255,\n\t\t\t1\n\t\t];\n\t\tif (hex.length === 6) return [\n\t\t\tNumber.parseInt(hex.slice(0, 2), 16) / 255,\n\t\t\tNumber.parseInt(hex.slice(2, 4), 16) / 255,\n\t\t\tNumber.parseInt(hex.slice(4, 6), 16) / 255,\n\t\t\t1\n\t\t];\n\t\tif (hex.length === 8) return [\n\t\t\tNumber.parseInt(hex.slice(0, 2), 16) / 255,\n\t\t\tNumber.parseInt(hex.slice(2, 4), 16) / 255,\n\t\t\tNumber.parseInt(hex.slice(4, 6), 16) / 255,\n\t\t\tNumber.parseInt(hex.slice(6, 8), 16) / 255\n\t\t];\n\t}\n\tif (c.startsWith(\"rgb\")) {\n\t\tconst parts = c.replace(/rgba?\\(/, \"\").replace(/\\)/, \"\").split(\",\").map((p) => Number.parseFloat(p.trim()));\n\t\treturn [\n\t\t\t(parts[0] ?? 0) / 255,\n\t\t\t(parts[1] ?? 0) / 255,\n\t\t\t(parts[2] ?? 0) / 255,\n\t\t\tparts[3] !== void 0 ? parts[3] : 1\n\t\t];\n\t}\n\treturn [\n\t\t1,\n\t\t1,\n\t\t1,\n\t\t1\n\t];\n}\nfunction computeContourSignedArea(contour) {\n\tlet area = 0;\n\tconst len = contour.length;\n\tfor (let i = 0; i < len; i++) {\n\t\tconst j = (i + 1) % len;\n\t\tarea += contour[i].x * contour[j].y - contour[j].x * contour[i].y;\n\t}\n\treturn area / 2;\n}\nfunction isPointInsidePolygon(p, poly) {\n\tlet inside = false;\n\tconst len = poly.length;\n\tfor (let i = 0, j = len - 1; i < len; j = i++) {\n\t\tconst xi = poly[i].x;\n\t\tconst yi = poly[i].y;\n\t\tconst xj = poly[j].x;\n\t\tconst yj = poly[j].y;\n\t\tif (yi > p.y !== yj > p.y && p.x < (xj - xi) * (p.y - yi) / (yj - yi) + xi) inside = !inside;\n\t}\n\treturn inside;\n}\nconst DEFAULT_CURVE_TOLERANCE = .1;\nconst MAX_CURVE_SEGMENTS = 64;\n/**\n* Segments needed for a polyline through n uniform steps of a curve to stay\n* within `tolerance`: the chord error is at most max|B''| / (8 n^2).\n*/\nfunction curveSegmentCount(maxSecondDerivative, flattening) {\n\tif (flattening.segments !== void 0) return flattening.segments;\n\tconst n = Math.ceil(Math.sqrt(maxSecondDerivative / (8 * flattening.tolerance)));\n\treturn Math.min(MAX_CURVE_SEGMENTS, Math.max(1, n));\n}\nfunction processCurveQuadratic(p0, cp, end, flattening, out) {\n\tconst segments = curveSegmentCount(2 * Math.hypot(p0.x - 2 * cp.x + end.x, p0.y - 2 * cp.y + end.y), flattening);\n\tfor (let s = 1; s <= segments; s++) {\n\t\tconst t = s / segments;\n\t\tconst mt = 1 - t;\n\t\tout.push({\n\t\t\tx: mt * mt * p0.x + 2 * mt * t * cp.x + t * t * end.x,\n\t\t\ty: mt * mt * p0.y + 2 * mt * t * cp.y + t * t * end.y\n\t\t});\n\t}\n}\nfunction processCurveCubic(p0, cp1, cp2, end, flattening, out) {\n\tconst segments = curveSegmentCount(6 * Math.max(Math.hypot(p0.x - 2 * cp1.x + cp2.x, p0.y - 2 * cp1.y + cp2.y), Math.hypot(cp1.x - 2 * cp2.x + end.x, cp1.y - 2 * cp2.y + end.y)), flattening);\n\tfor (let s = 1; s <= segments; s++) {\n\t\tconst t = s / segments;\n\t\tconst mt = 1 - t;\n\t\tout.push({\n\t\t\tx: mt * mt * mt * p0.x + 3 * mt * mt * t * cp1.x + 3 * mt * t * t * cp2.x + t * t * t * end.x,\n\t\t\ty: mt * mt * mt * p0.y + 3 * mt * mt * t * cp1.y + 3 * mt * t * t * cp2.y + t * t * t * end.y\n\t\t});\n\t}\n}\n/**\n* The glyph outline with overlaps merged (skia's `simplify`), or null where\n* skia isn't available, as in the browser.\n*/\nfunction simplifiedEdges(svg) {\n\ttry {\n\t\tconst edges = new Path2D(svg).simplify().edges;\n\t\treturn Array.isArray(edges) ? edges : null;\n\t} catch {\n\t\treturn null;\n\t}\n}\nfunction extractGlyphContours(glyph, glyphX, glyphY, scale, flattening) {\n\tconst svg = glyph.path?.toSVG();\n\tif (!svg) return {\n\t\tcontours: [],\n\t\tsimplified: true\n\t};\n\tlet edges = simplifiedEdges(svg);\n\tconst simplified = edges !== null;\n\tedges ??= (glyph.path?.commands ?? []).map((c) => [c.command, ...c.args]);\n\tconst contours = [];\n\tlet curr = {\n\t\tx: 0,\n\t\ty: 0\n\t};\n\tlet current = [];\n\tconst finishCurrent = () => {\n\t\tif (current.length >= 3) {\n\t\t\tconst first = current[0];\n\t\t\tconst last = current[current.length - 1];\n\t\t\tif (Math.hypot(last.x - first.x, last.y - first.y) < 1e-4) current.pop();\n\t\t\tif (current.length >= 3) contours.push(current);\n\t\t}\n\t\tcurrent = [];\n\t};\n\tfor (const edge of edges) {\n\t\tconst name = edge[0];\n\t\tconst args = edge.slice(1);\n\t\tif (name === \"moveTo\") {\n\t\t\tfinishCurrent();\n\t\t\tcurr = {\n\t\t\t\tx: (glyphX + args[0]) * scale,\n\t\t\t\ty: -(glyphY + args[1]) * scale\n\t\t\t};\n\t\t\tcurrent = [curr];\n\t\t} else if (name === \"lineTo\") {\n\t\t\tcurr = {\n\t\t\t\tx: (glyphX + args[0]) * scale,\n\t\t\t\ty: -(glyphY + args[1]) * scale\n\t\t\t};\n\t\t\tcurrent.push(curr);\n\t\t} else if (name === \"quadraticCurveTo\") {\n\t\t\tconst cp = {\n\t\t\t\tx: (glyphX + args[0]) * scale,\n\t\t\t\ty: -(glyphY + args[1]) * scale\n\t\t\t};\n\t\t\tconst end = {\n\t\t\t\tx: (glyphX + args[2]) * scale,\n\t\t\t\ty: -(glyphY + args[3]) * scale\n\t\t\t};\n\t\t\tprocessCurveQuadratic(curr, cp, end, flattening, current);\n\t\t\tcurr = end;\n\t\t} else if (name === \"bezierCurveTo\") {\n\t\t\tconst cp1 = {\n\t\t\t\tx: (glyphX + args[0]) * scale,\n\t\t\t\ty: -(glyphY + args[1]) * scale\n\t\t\t};\n\t\t\tconst cp2 = {\n\t\t\t\tx: (glyphX + args[2]) * scale,\n\t\t\t\ty: -(glyphY + args[3]) * scale\n\t\t\t};\n\t\t\tconst end = {\n\t\t\t\tx: (glyphX + args[4]) * scale,\n\t\t\t\ty: -(glyphY + args[5]) * scale\n\t\t\t};\n\t\t\tprocessCurveCubic(curr, cp1, cp2, end, flattening, current);\n\t\t\tcurr = end;\n\t\t} else if (name === \"closePath\") finishCurrent();\n\t}\n\tfinishCurrent();\n\treturn {\n\t\tcontours,\n\t\tsimplified\n\t};\n}\n/** Side-wall segments meeting at more than this angle (30°) keep a hard edge. */\nconst SIDE_CREASE_COS = Math.cos(30 * Math.PI / 180);\n/**\n* Group a glyph's contours into filled outlines and their holes by nesting\n* depth: a contour inside an even number of others is an outline (the ring\n* of \"O\", or the \"R\" sitting in the counter of \"®\"), one inside an odd number\n* is a hole of the smallest outline around it.\n*/\nfunction organizeGlyphPolygons({ contours: glyphContours, simplified }) {\n\tif (!simplified) return organizeByWinding(glyphContours);\n\tconst contours = glyphContours.map((contour) => ({\n\t\tcontour,\n\t\tarea: Math.abs(computeContourSignedArea(contour))\n\t}));\n\tcontours.sort((a, b) => b.area - a.area);\n\tconst containers = contours.map(() => []);\n\tfor (let i = 0; i < contours.length; i++) {\n\t\tconst inner = contours[i].contour;\n\t\tconst mid = inner[Math.floor(inner.length / 2)];\n\t\tfor (let j = 0; j < i; j++) {\n\t\t\tif (contours[j].area <= contours[i].area) continue;\n\t\t\tconst outer = contours[j].contour;\n\t\t\tif (isPointInsidePolygon(inner[0], outer) || isPointInsidePolygon(mid, outer)) containers[i].push(j);\n\t\t}\n\t}\n\tconst polygons = [];\n\tconst polygonOf = /* @__PURE__ */ new Map();\n\tfor (let i = 0; i < contours.length; i++) {\n\t\tconst around = containers[i];\n\t\tif (around.length % 2 === 0) {\n\t\t\tconst poly = {\n\t\t\t\touter: contours[i].contour,\n\t\t\t\tholes: []\n\t\t\t};\n\t\t\tpolygons.push(poly);\n\t\t\tpolygonOf.set(i, poly);\n\t\t} else polygonOf.get(around[around.length - 1])?.holes.push(contours[i].contour);\n\t}\n\treturn polygons;\n}\n/** Where segments ab and cd cross strictly inside both, or null. */\nfunction segmentCrossing(a, b, c, d) {\n\tconst rx = b.x - a.x;\n\tconst ry = b.y - a.y;\n\tconst sx = d.x - c.x;\n\tconst sy = d.y - c.y;\n\tconst den = rx * sy - ry * sx;\n\tif (Math.abs(den) < 1e-12) return null;\n\tconst t = ((c.x - a.x) * sy - (c.y - a.y) * sx) / den;\n\tconst u = ((c.x - a.x) * ry - (c.y - a.y) * rx) / den;\n\tconst eps = 1e-9;\n\tif (t <= eps || t >= 1 - eps || u <= eps || u >= 1 - eps) return null;\n\treturn {\n\t\tx: a.x + rx * t,\n\t\ty: a.y + ry * t\n\t};\n}\n/**\n* Splits a contour that crosses itself into simple loops: at each crossing\n* the contour is cut into the part between the two crossing edges and the\n* rest. Font outlines meant to be filled with the nonzero rule (variable\n* fonts, overlapping strokes) often cross themselves, and a triangulator\n* given such a contour fills the wrong areas (a \"V\" with its notch filled).\n*/\nfunction untangleContour(contour, depth = 0) {\n\tconst n = contour.length;\n\tif (n < 3) return [];\n\tif (depth > 64) return [contour];\n\tfor (let i = 0; i < n; i++) {\n\t\tconst a = contour[i];\n\t\tconst b = contour[(i + 1) % n];\n\t\tfor (let j = i + 2; j < n; j++) {\n\t\t\tif (i === 0 && j === n - 1) continue;\n\t\t\tconst x = segmentCrossing(a, b, contour[j], contour[(j + 1) % n]);\n\t\t\tif (!x) continue;\n\t\t\tconst inner = [x, ...contour.slice(i + 1, j + 1)];\n\t\t\tconst outer = [\n\t\t\t\tx,\n\t\t\t\t...contour.slice(j + 1),\n\t\t\t\t...contour.slice(0, i + 1)\n\t\t\t];\n\t\t\treturn [...untangleContour(inner, depth + 1), ...untangleContour(outer, depth + 1)];\n\t\t}\n\t}\n\treturn Math.abs(computeContourSignedArea(contour)) > 1e-9 ? [contour] : [];\n}\n/** Nonzero winding number of a set of contours around a point. */\nfunction windingNumber(p, contours) {\n\tlet w = 0;\n\tfor (const c of contours) for (let i = 0; i < c.length; i++) {\n\t\tconst a = c[i];\n\t\tconst b = c[(i + 1) % c.length];\n\t\tconst side = (b.x - a.x) * (p.y - a.y) - (p.x - a.x) * (b.y - a.y);\n\t\tif (a.y <= p.y) {\n\t\t\tif (b.y > p.y && side > 0) w++;\n\t\t} else if (b.y <= p.y && side < 0) w--;\n\t}\n\treturn w;\n}\n/** A point just inside a simple loop, next to its longest edge. */\nfunction pointJustInside(loop) {\n\tlet best = 0;\n\tlet bestLen = -1;\n\tfor (let i = 0; i < loop.length; i++) {\n\t\tconst a$1 = loop[i];\n\t\tconst b$1 = loop[(i + 1) % loop.length];\n\t\tconst len = Math.hypot(b$1.x - a$1.x, b$1.y - a$1.y);\n\t\tif (len > bestLen) {\n\t\t\tbestLen = len;\n\t\t\tbest = i;\n\t\t}\n\t}\n\tconst a = loop[best];\n\tconst b = loop[(best + 1) % loop.length];\n\tconst mx = (a.x + b.x) / 2;\n\tconst my = (a.y + b.y) / 2;\n\tconst eps = Math.max(1e-4, Math.min(.01, bestLen * .001));\n\tconst nx = -(b.y - a.y) / bestLen * eps;\n\tconst ny = (b.x - a.x) / bestLen * eps;\n\tconst p = {\n\t\tx: mx + nx,\n\t\ty: my + ny\n\t};\n\treturn isPointInsidePolygon(p, loop) ? p : {\n\t\tx: mx - nx,\n\t\ty: my - ny\n\t};\n}\n/**\n* For outlines that were not simplified (no skia, as in the browser):\n* contours may cross themselves and each other, and are meant to be filled\n* with the nonzero rule. Self-crossings are split into simple loops; a loop\n* whose inside is filled under the nonzero rule becomes an outline, and one\n* that is empty (a counter) becomes a hole of the smallest outline around it.\n* Overlapping outlines become separate solids, which look the same once\n* extruded.\n*/\nfunction organizeByWinding(glyphContours) {\n\tconst loops = glyphContours.flatMap((c) => untangleContour(c));\n\tconst polygons = [];\n\tconst holes = [];\n\tfor (const loop of loops) if (windingNumber(pointJustInside(loop), glyphContours) !== 0) polygons.push({\n\t\touter: loop,\n\t\tholes: []\n\t});\n\telse holes.push(loop);\n\tfor (const hole of holes) {\n\t\tconst area = Math.abs(computeContourSignedArea(hole));\n\t\tconst probe = pointJustInside(hole);\n\t\tlet home;\n\t\tlet homeArea = Number.POSITIVE_INFINITY;\n\t\tfor (const poly of polygons) {\n\t\t\tconst outerArea = Math.abs(computeContourSignedArea(poly.outer));\n\t\t\tif (outerArea > area && outerArea < homeArea && isPointInsidePolygon(probe, poly.outer)) {\n\t\t\t\thome = poly;\n\t\t\t\thomeArea = outerArea;\n\t\t\t}\n\t\t}\n\t\thome?.holes.push(hole);\n\t}\n\treturn polygons;\n}\n/**\n* A glyph's outlines are flattened and sorted into outlines and holes once per\n* font, size and flattening, at the glyph origin; each use gets a translated\n* copy (callers reorder and move the points they are given).\n*/\nconst glyphOutlineCache = /* @__PURE__ */ new WeakMap();\nfunction glyphPolygonsAt(font, glyph, glyphX, glyphY, scale, flattening) {\n\tlet byGlyph = glyphOutlineCache.get(font);\n\tif (!byGlyph) {\n\t\tbyGlyph = /* @__PURE__ */ new Map();\n\t\tglyphOutlineCache.set(font, byGlyph);\n\t}\n\tconst key = `${glyph.id}|${scale}|${flattening.segments ?? \"\"}|${flattening.tolerance}`;\n\tlet atOrigin = byGlyph.get(key);\n\tif (!atOrigin) {\n\t\tatOrigin = organizeGlyphPolygons(extractGlyphContours(glyph, 0, 0, scale, flattening));\n\t\tbyGlyph.set(key, atOrigin);\n\t}\n\tconst dx = glyphX * scale;\n\tconst dy = -glyphY * scale;\n\tconst moved = (c) => c.map((p) => ({\n\t\tx: p.x + dx,\n\t\ty: p.y + dy\n\t}));\n\treturn atOrigin.map((poly) => ({\n\t\touter: moved(poly.outer),\n\t\tholes: poly.holes.map(moved)\n\t}));\n}\nfunction generateExtrudedTextGeometry(options) {\n\tconst font = options.font;\n\tconst fontSize = options.fontSize ?? 48;\n\tconst depth = options.depth ?? 20;\n\tconst halfDepth = depth / 2;\n\tconst flattening = {\n\t\tsegments: options.curveSegments !== void 0 ? Math.max(2, options.curveSegments) : void 0,\n\t\ttolerance: Math.max(.001, options.curveTolerance ?? DEFAULT_CURVE_TOLERANCE)\n\t};\n\tconst scale = fontSize / (font.unitsPerEm || 1e3);\n\tconst line = shapeLineFromFont(font, options.text.replace(/\\n/g, \" \"), {\n\t\tdirection: options.direction,\n\t\tletterSpacing: options.letterSpacing ? options.letterSpacing / scale : 0\n\t});\n\tconst polygons = [];\n\tfor (const placed of line.glyphs) {\n\t\tconst glyphPolys = glyphPolygonsAt(font, font.getGlyph(placed.glyphId), placed.x, placed.y, scale, flattening);\n\t\tfor (const gp of glyphPolys) polygons.push(gp);\n\t}\n\tlet minX = Number.POSITIVE_INFINITY;\n\tlet maxX = Number.NEGATIVE_INFINITY;\n\tlet minY = Number.POSITIVE_INFINITY;\n\tlet maxY = Number.NEGATIVE_INFINITY;\n\tfor (const poly of polygons) {\n\t\tfor (const p of poly.outer) {\n\t\t\tif (p.x < minX) minX = p.x;\n\t\t\tif (p.x > maxX) maxX = p.x;\n\t\t\tif (p.y < minY) minY = p.y;\n\t\t\tif (p.y > maxY) maxY = p.y;\n\t\t}\n\t\tfor (const hole of poly.holes) for (const p of hole) {\n\t\t\tif (p.x < minX) minX = p.x;\n\t\t\tif (p.x > maxX) maxX = p.x;\n\t\t\tif (p.y < minY) minY = p.y;\n\t\t\tif (p.y > maxY) maxY = p.y;\n\t\t}\n\t}\n\tif (!Number.isFinite(minX)) {\n\t\tminX = 0;\n\t\tmaxX = 0;\n\t\tminY = 0;\n\t\tmaxY = 0;\n\t}\n\tconst w = maxX - minX;\n\tconst h = maxY - minY;\n\tconst rtl = (line.baseLevel & 1) === 1;\n\tconst align = options.align === \"start\" ? rtl ? \"right\" : \"left\" : options.align === \"end\" ? rtl ? \"left\" : \"right\" : options.align;\n\tlet alignOffsetX = (minX + maxX) / 2;\n\tif (align === \"left\") alignOffsetX = minX;\n\tif (align === \"right\") alignOffsetX = maxX;\n\tlet alignOffsetY = (minY + maxY) / 2;\n\tif (options.verticalAlign === \"top\") alignOffsetY = minY;\n\tif (options.verticalAlign === \"bottom\") alignOffsetY = maxY;\n\tfor (const poly of polygons) {\n\t\tfor (const p of poly.outer) {\n\t\t\tp.x -= alignOffsetX;\n\t\t\tp.y -= alignOffsetY;\n\t\t}\n\t\tfor (const hole of poly.holes) for (const p of hole) {\n\t\t\tp.x -= alignOffsetX;\n\t\t\tp.y -= alignOffsetY;\n\t\t}\n\t}\n\tminX -= alignOffsetX;\n\tmaxX -= alignOffsetX;\n\tminY -= alignOffsetY;\n\tmaxY -= alignOffsetY;\n\tconst frontPositions = [];\n\tconst frontNormals = [];\n\tconst frontUvs = [];\n\tconst frontIndices = [];\n\tconst sidePositions = [];\n\tconst sideNormals = [];\n\tconst sideUvs = [];\n\tconst sideIndices = [];\n\tconst addColumn = (p, n, u) => {\n\t\tconst index = sidePositions.length / 3;\n\t\tsidePositions.push(p.x, p.y, halfDepth, p.x, p.y, -halfDepth);\n\t\tsideNormals.push(n.x, n.y, 0, n.x, n.y, 0);\n\t\tsideUvs.push(u, 0, u, 1);\n\t\treturn index;\n\t};\n\tconst addSideWall = (contour) => {\n\t\tconst pts = contour.filter((p, k) => {\n\t\t\tconst next = contour[(k + 1) % contour.length];\n\t\t\treturn Math.hypot(next.x - p.x, next.y - p.y) >= 1e-6;\n\t\t});\n\t\tconst count = pts.length;\n\t\tif (count < 2) return;\n\t\tconst edgeLengths = [];\n\t\tconst faceNormals = pts.map((p, k) => {\n\t\t\tconst next = pts[(k + 1) % count];\n\t\t\tconst len = Math.hypot(next.x - p.x, next.y - p.y);\n\t\t\tedgeLengths.push(len);\n\t\t\treturn {\n\t\t\t\tx: (next.y - p.y) / len,\n\t\t\t\ty: -(next.x - p.x) / len\n\t\t\t};\n\t\t});\n\t\tconst perimeter = edgeLengths.reduce((a, b) => a + b, 0);\n\t\tconst startColumn = [];\n\t\tconst endColumn = [];\n\t\tlet along = 0;\n\t\tfor (let k = 0; k < count; k++) {\n\t\t\tconst incoming = faceNormals[(k - 1 + count) % count];\n\t\t\tconst outgoing = faceNormals[k];\n\t\t\tconst u = along / perimeter;\n\t\t\tconst sx = incoming.x + outgoing.x;\n\t\t\tconst sy = incoming.y + outgoing.y;\n\t\t\tconst averaged = incoming.x * outgoing.x + incoming.y * outgoing.y >= SIDE_CREASE_COS ? {\n\t\t\t\tx: sx / Math.hypot(sx, sy),\n\t\t\t\ty: sy / Math.hypot(sx, sy)\n\t\t\t} : null;\n\t\t\tif (averaged && k > 0) startColumn[k] = endColumn[k] = addColumn(pts[k], averaged, u);\n\t\t\telse {\n\t\t\t\tendColumn[k] = addColumn(pts[k], averaged ?? incoming, k === 0 ? 1 : u);\n\t\t\t\tstartColumn[k] = addColumn(pts[k], averaged ?? outgoing, u);\n\t\t\t}\n\t\t\talong += edgeLengths[k];\n\t\t}\n\t\tfor (let k = 0; k < count; k++) {\n\t\t\tconst a = startColumn[k];\n\t\t\tconst b = endColumn[(k + 1) % count];\n\t\t\tsideIndices.push(a, b + 1, b);\n\t\t\tsideIndices.push(a, a + 1, b + 1);\n\t\t}\n\t};\n\tfor (const poly of polygons) {\n\t\tconst outer = poly.outer;\n\t\tif (computeContourSignedArea(outer) < 0) outer.reverse();\n\t\tfor (const hole of poly.holes) if (computeContourSignedArea(hole) > 0) hole.reverse();\n\t\tconst earcutCoords = [];\n\t\tconst holeIndices = [];\n\t\tfor (const p of outer) earcutCoords.push(p.x, p.y);\n\t\tfor (const hole of poly.holes) {\n\t\t\tholeIndices.push(earcutCoords.length / 2);\n\t\t\tfor (const p of hole) earcutCoords.push(p.x, p.y);\n\t\t}\n\t\tconst triangles = earcut(earcutCoords, holeIndices, 2);\n\t\tconst vertCount = earcutCoords.length / 2;\n\t\tconst frontBaseIdx = frontPositions.length / 3;\n\t\tfor (let v = 0; v < vertCount; v++) {\n\t\t\tconst vx = earcutCoords[v * 2];\n\t\t\tconst vy = earcutCoords[v * 2 + 1];\n\t\t\tfrontPositions.push(vx, vy, -halfDepth);\n\t\t\tfrontNormals.push(0, 0, -1);\n\t\t\tfrontUvs.push((vx - minX) / (w || 1), (vy - minY) / (h || 1));\n\t\t}\n\t\tfor (let t = 0; t < triangles.length; t += 3) frontIndices.push(frontBaseIdx + triangles[t], frontBaseIdx + triangles[t + 2], frontBaseIdx + triangles[t + 1]);\n\t\tconst backBaseIdx = frontPositions.length / 3;\n\t\tfor (let v = 0; v < vertCount; v++) {\n\t\t\tconst vx = earcutCoords[v * 2];\n\t\t\tconst vy = earcutCoords[v * 2 + 1];\n\t\t\tfrontPositions.push(vx, vy, halfDepth);\n\t\t\tfrontNormals.push(0, 0, 1);\n\t\t\tfrontUvs.push((vx - minX) / (w || 1), (vy - minY) / (h || 1));\n\t\t}\n\t\tfor (let t = 0; t < triangles.length; t += 3) frontIndices.push(backBaseIdx + triangles[t], backBaseIdx + triangles[t + 1], backBaseIdx + triangles[t + 2]);\n\t\taddSideWall(outer);\n\t\tfor (const hole of poly.holes) addSideWall(hole);\n\t}\n\tconst frontColor = parseHexOrRgbColor(options.fill ?? \"#ffffff\");\n\tconst sideColor = parseHexOrRgbColor(options.bevelColor ?? options.fill ?? \"#ffffff\");\n\tconst frontMaterial = {\n\t\tname: \"front-material\",\n\t\tdiffuseColor: frontColor,\n\t\tshading: options.material ?? \"lit\",\n\t\tshininess: options.shininess ?? 32,\n\t\troughness: options.roughness,\n\t\tmetallic: options.metallic,\n\t\ttwoSided: true\n\t};\n\tconst sideMaterial = {\n\t\tname: \"side-material\",\n\t\tdiffuseColor: sideColor,\n\t\tshading: options.material ?? \"lit\",\n\t\tshininess: options.shininess ?? 32,\n\t\troughness: options.roughness,\n\t\tmetallic: options.metallic,\n\t\ttwoSided: true\n\t};\n\tconst meshes = [];\n\tif (frontIndices.length > 0) meshes.push({\n\t\tid: \"text-front-mesh\",\n\t\tname: \"front\",\n\t\tpositions: new Float32Array(frontPositions),\n\t\tnormals: new Float32Array(frontNormals),\n\t\tuvs: new Float32Array(frontUvs),\n\t\tindices: frontPositions.length / 3 > 65535 ? new Uint32Array(frontIndices) : new Uint16Array(frontIndices),\n\t\tmaterialName: \"front-material\"\n\t});\n\tif (sideIndices.length > 0) meshes.push({\n\t\tid: \"text-side-mesh\",\n\t\tname: \"side\",\n\t\tpositions: new Float32Array(sidePositions),\n\t\tnormals: new Float32Array(sideNormals),\n\t\tuvs: new Float32Array(sideUvs),\n\t\tindices: sidePositions.length / 3 > 65535 ? new Uint32Array(sideIndices) : new Uint16Array(sideIndices),\n\t\tmaterialName: \"side-material\"\n\t});\n\treturn {\n\t\tmodelData: {\n\t\t\tname: `extruded-text-${options.text}`,\n\t\t\tmeshes,\n\t\t\tmaterials: {\n\t\t\t\t\"front-material\": frontMaterial,\n\t\t\t\t\"side-material\": sideMaterial\n\t\t\t},\n\t\t\tanimations: [],\n\t\t\tbounds: {\n\t\t\t\tmin: [\n\t\t\t\t\tminX,\n\t\t\t\t\tminY,\n\t\t\t\t\t-halfDepth\n\t\t\t\t],\n\t\t\t\tmax: [\n\t\t\t\t\tmaxX,\n\t\t\t\t\tmaxY,\n\t\t\t\t\thalfDepth\n\t\t\t\t],\n\t\t\t\tcenter: [\n\t\t\t\t\t(minX + maxX) / 2,\n\t\t\t\t\t(minY + maxY) / 2,\n\t\t\t\t\t0\n\t\t\t\t],\n\t\t\t\tsize: [\n\t\t\t\t\tw,\n\t\t\t\t\th,\n\t\t\t\t\tdepth\n\t\t\t\t],\n\t\t\t\tboundingSphereRadius: Math.hypot(w, h, depth) / 2\n\t\t\t}\n\t\t},\n\t\tbounds: {\n\t\t\tminX,\n\t\t\tmaxX,\n\t\t\tminY,\n\t\t\tmaxY,\n\t\t\twidth: w,\n\t\t\theight: h,\n\t\t\tdepth\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/renderer3d/primitive-geometry.ts\nvar MeshBuilder = class {\n\tpositions = [];\n\tnormals = [];\n\tuvs = [];\n\tindices = [];\n\tvertex(p, n, uv) {\n\t\tthis.positions.push(p[0], p[1], p[2]);\n\t\tthis.normals.push(n[0], n[1], n[2]);\n\t\tthis.uvs.push(uv[0], uv[1]);\n\t\treturn this.positions.length / 3 - 1;\n\t}\n\t/**\n\t* Joins a (cols+1) x (rows+1) vertex grid that starts at `base` into\n\t* quads. Front faces wind so that cross(row step, column step) points\n\t* out; `flip` reverses that for grids laid out the other way round.\n\t*/\n\tgrid(base, cols, rows, flip = false) {\n\t\tfor (let j = 0; j < rows; j++) for (let i = 0; i < cols; i++) {\n\t\t\tconst a = base + j * (cols + 1) + i;\n\t\t\tconst b = a + 1;\n\t\t\tconst c = a + cols + 1;\n\t\t\tconst d = c + 1;\n\t\t\tif (flip) this.indices.push(a, b, c, b, d, c);\n\t\t\telse this.indices.push(a, c, b, b, c, d);\n\t\t}\n\t}\n\tbuild(name) {\n\t\tconst count = this.positions.length / 3;\n\t\treturn {\n\t\t\tid: `${name}-mesh`,\n\t\t\tname,\n\t\t\tpositions: new Float32Array(this.positions),\n\t\t\tnormals: new Float32Array(this.normals),\n\t\t\tuvs: new Float32Array(this.uvs),\n\t\t\tindices: count > 65535 ? new Uint32Array(this.indices) : new Uint16Array(this.indices),\n\t\t\tmaterialName: `${name}-material`\n\t\t};\n\t}\n};\nfunction normalize(v) {\n\tconst len = Math.hypot(v[0], v[1], v[2]);\n\treturn len > 1e-12 ? [\n\t\tv[0] / len,\n\t\tv[1] / len,\n\t\tv[2] / len\n\t] : [\n\t\t0,\n\t\t0,\n\t\t0\n\t];\n}\n/**\n* 1D samples across a side of half-extent `e` whose ends round off with\n* radius `r`: arc-spaced through each rounded zone, nothing in between, so\n* the flat middle of a face is a single quad.\n*/\nfunction edgeSamples(e, r, segments) {\n\tif (r <= 0) return [-e, e];\n\tconst inner = e - r;\n\tconst out = [];\n\tfor (let i = 0; i <= segments; i++) out.push(-inner - r * Math.cos(i / segments * Math.PI / 2));\n\tfor (let i = inner > 1e-9 ? 0 : 1; i <= segments; i++) out.push(inner + r * Math.sin(i / segments * Math.PI / 2));\n\treturn out;\n}\nfunction roundedBox(o, mb) {\n\tconst hx = o.width / 2;\n\tconst hy = o.height / 2;\n\tconst hz = o.depth / 2;\n\tconst r = Math.max(0, Math.min(o.radius ?? 0, hx, hy, hz));\n\tconst seg = Math.max(1, Math.round(o.segments ?? 4));\n\tconst taper = o.taper ?? 1;\n\tconst ix = hx - r;\n\tconst iy = hy - r;\n\tconst iz = hz - r;\n\tconst sx = edgeSamples(hx, r, seg);\n\tconst sy = edgeSamples(hy, r, seg);\n\tconst sz = edgeSamples(hz, r, seg);\n\tconst slope = o.height > 0 ? (1 - taper) / o.height : 0;\n\tconst scaleAt = (y) => taper + slope * (y + hy);\n\tconst place = (surface, faceNormal) => {\n\t\tconst inner = [\n\t\t\tMath.max(-ix, Math.min(ix, surface[0])),\n\t\t\tMath.max(-iy, Math.min(iy, surface[1])),\n\t\t\tMath.max(-iz, Math.min(iz, surface[2]))\n\t\t];\n\t\tlet n = r > 0 ? normalize([\n\t\t\tsurface[0] - inner[0],\n\t\t\tsurface[1] - inner[1],\n\t\t\tsurface[2] - inner[2]\n\t\t]) : faceNormal;\n\t\tif (n[0] === 0 && n[1] === 0 && n[2] === 0) n = faceNormal;\n\t\tconst p = [\n\t\t\tinner[0] + n[0] * r,\n\t\t\tinner[1] + n[1] * r,\n\t\t\tinner[2] + n[2] * r\n\t\t];\n\t\tif (taper === 1) return {\n\t\t\tp,\n\t\t\tn\n\t\t};\n\t\tconst s = scaleAt(p[1]);\n\t\treturn {\n\t\t\tp: [\n\t\t\t\tp[0] * s,\n\t\t\t\tp[1],\n\t\t\t\tp[2] * s\n\t\t\t],\n\t\t\tn: normalize([\n\t\t\t\tn[0] / s,\n\t\t\t\tn[1] - p[0] * slope * n[0] / s - p[2] * slope * n[2] / s,\n\t\t\t\tn[2] / s\n\t\t\t])\n\t\t};\n\t};\n\tconst faces = [\n\t\t{\n\t\t\taxis: 2,\n\t\t\tsign: -1,\n\t\t\tu: 0,\n\t\t\tv: 1\n\t\t},\n\t\t{\n\t\t\taxis: 2,\n\t\t\tsign: 1,\n\t\t\tu: 0,\n\t\t\tv: 1\n\t\t},\n\t\t{\n\t\t\taxis: 0,\n\t\t\tsign: -1,\n\t\t\tu: 2,\n\t\t\tv: 1\n\t\t},\n\t\t{\n\t\t\taxis: 0,\n\t\t\tsign: 1,\n\t\t\tu: 2,\n\t\t\tv: 1\n\t\t},\n\t\t{\n\t\t\taxis: 1,\n\t\t\tsign: -1,\n\t\t\tu: 0,\n\t\t\tv: 2\n\t\t},\n\t\t{\n\t\t\taxis: 1,\n\t\t\tsign: 1,\n\t\t\tu: 0,\n\t\t\tv: 2\n\t\t}\n\t];\n\tconst half = [\n\t\thx,\n\t\thy,\n\t\thz\n\t];\n\tconst samples = [\n\t\tsx,\n\t\tsy,\n\t\tsz\n\t];\n\tfor (const f of faces) {\n\t\tconst us = samples[f.u];\n\t\tconst vs = samples[f.v];\n\t\tconst faceNormal = [\n\t\t\t0,\n\t\t\t0,\n\t\t\t0\n\t\t];\n\t\tfaceNormal[f.axis] = f.sign;\n\t\tconst base = mb.positions.length / 3;\n\t\tfor (let j = 0; j < vs.length; j++) for (let i = 0; i < us.length; i++) {\n\t\t\tconst surface = [\n\t\t\t\t0,\n\t\t\t\t0,\n\t\t\t\t0\n\t\t\t];\n\t\t\tsurface[f.axis] = f.sign * half[f.axis];\n\t\t\tsurface[f.u] = us[i];\n\t\t\tsurface[f.v] = vs[j];\n\t\t\tconst { p, n } = place(surface, faceNormal);\n\t\t\tmb.vertex(p, n, [(us[i] / half[f.u] + 1) / 2, (vs[j] / half[f.v] + 1) / 2]);\n\t\t}\n\t\tconst cyclic = (f.v + 1) % 3 === f.u;\n\t\tmb.grid(base, us.length - 1, vs.length - 1, (cyclic ? 1 : -1) !== f.sign);\n\t}\n}\nfunction sphere(o, mb) {\n\tconst seg = Math.max(3, Math.round(o.segments ?? 32));\n\tconst rings = Math.max(2, Math.round(seg / 2));\n\tfor (let j = 0; j <= rings; j++) {\n\t\tconst phi = j / rings * Math.PI;\n\t\tfor (let i = 0; i <= seg; i++) {\n\t\t\tconst theta = i / seg * Math.PI * 2;\n\t\t\tconst n = [\n\t\t\t\tMath.sin(phi) * Math.cos(theta),\n\t\t\t\t-Math.cos(phi),\n\t\t\t\tMath.sin(phi) * Math.sin(theta)\n\t\t\t];\n\t\t\tmb.vertex([\n\t\t\t\tn[0] * o.radius,\n\t\t\t\tn[1] * o.radius,\n\t\t\t\tn[2] * o.radius\n\t\t\t], n, [i / seg, j / rings]);\n\t\t}\n\t}\n\tmb.grid(0, seg, rings);\n}\nfunction cylinder(o, mb) {\n\tconst seg = Math.max(3, Math.round(o.segments ?? 32));\n\tconst rTop = o.radiusTop ?? o.radius ?? 50;\n\tconst rBottom = o.radiusBottom ?? o.radius ?? 50;\n\tconst hy = o.height / 2;\n\tconst lean = o.height > 0 ? (rBottom - rTop) / o.height : 0;\n\tfor (let j = 0; j <= 1; j++) {\n\t\tconst rr = j === 0 ? rTop : rBottom;\n\t\tconst y = j === 0 ? -hy : hy;\n\t\tfor (let i = 0; i <= seg; i++) {\n\t\t\tconst theta = i / seg * Math.PI * 2;\n\t\t\tconst c = Math.cos(theta);\n\t\t\tconst s = Math.sin(theta);\n\t\t\tmb.vertex([\n\t\t\t\tc * rr,\n\t\t\t\ty,\n\t\t\t\ts * rr\n\t\t\t], normalize([\n\t\t\t\tc,\n\t\t\t\t-lean,\n\t\t\t\ts\n\t\t\t]), [i / seg, j]);\n\t\t}\n\t}\n\tmb.grid(0, seg, 1);\n\tif (o.openEnded) return;\n\tfor (const [y, rr, ny] of [[\n\t\t-hy,\n\t\trTop,\n\t\t-1\n\t], [\n\t\thy,\n\t\trBottom,\n\t\t1\n\t]]) {\n\t\tif (rr <= 0) continue;\n\t\tconst center = mb.vertex([\n\t\t\t0,\n\t\t\ty,\n\t\t\t0\n\t\t], [\n\t\t\t0,\n\t\t\tny,\n\t\t\t0\n\t\t], [.5, .5]);\n\t\tconst ring = mb.positions.length / 3;\n\t\tfor (let i = 0; i <= seg; i++) {\n\t\t\tconst theta = i / seg * Math.PI * 2;\n\t\t\tconst c = Math.cos(theta);\n\t\t\tconst s = Math.sin(theta);\n\t\t\tmb.vertex([\n\t\t\t\tc * rr,\n\t\t\t\ty,\n\t\t\t\ts * rr\n\t\t\t], [\n\t\t\t\t0,\n\t\t\t\tny,\n\t\t\t\t0\n\t\t\t], [(c + 1) / 2, (s + 1) / 2]);\n\t\t}\n\t\tfor (let i = 0; i < seg; i++) if (ny < 0) mb.indices.push(center, ring + i, ring + i + 1);\n\t\telse mb.indices.push(center, ring + i + 1, ring + i);\n\t}\n}\n/** Builds a procedural solid as a single-mesh Model3DData. */\nfunction generatePrimitiveGeometry(options) {\n\tconst mb = new MeshBuilder();\n\tif (options.type === \"roundedBox\") roundedBox(options, mb);\n\telse if (options.type === \"sphere\") sphere(options, mb);\n\telse if (options.type === \"cylinder\") cylinder(options, mb);\n\telse throw new Error(`Unknown 3D primitive: ${options.type}`);\n\tconst name = options.type;\n\tconst mesh = mb.build(name);\n\tconst material = {\n\t\tname: `${name}-material`,\n\t\tdiffuseColor: parseHexOrRgbColor(options.color ?? \"#ffffff\"),\n\t\tshading: options.material ?? \"lit\",\n\t\tshininess: options.shininess ?? 32,\n\t\troughness: options.roughness,\n\t\tmetallic: options.metallic\n\t};\n\tconst min = [\n\t\tNumber.POSITIVE_INFINITY,\n\t\tNumber.POSITIVE_INFINITY,\n\t\tNumber.POSITIVE_INFINITY\n\t];\n\tconst max = [\n\t\tNumber.NEGATIVE_INFINITY,\n\t\tNumber.NEGATIVE_INFINITY,\n\t\tNumber.NEGATIVE_INFINITY\n\t];\n\tconst pos = mesh.positions;\n\tfor (let i = 0; i < pos.length; i += 3) for (let k = 0; k < 3; k++) {\n\t\tconst v = pos[i + k];\n\t\tif (v < min[k]) min[k] = v;\n\t\tif (v > max[k]) max[k] = v;\n\t}\n\tconst size = [\n\t\tmax[0] - min[0],\n\t\tmax[1] - min[1],\n\t\tmax[2] - min[2]\n\t];\n\treturn {\n\t\tname: `primitive-${name}`,\n\t\tmeshes: [mesh],\n\t\tmaterials: { [material.name]: material },\n\t\tanimations: [],\n\t\tbounds: {\n\t\t\tmin,\n\t\t\tmax,\n\t\t\tcenter: [\n\t\t\t\t(min[0] + max[0]) / 2,\n\t\t\t\t(min[1] + max[1]) / 2,\n\t\t\t\t(min[2] + max[2]) / 2\n\t\t\t],\n\t\t\tsize,\n\t\t\tboundingSphereRadius: Math.hypot(...size) / 2\n\t\t}\n\t};\n}\nconst primitiveCache = /* @__PURE__ */ new Map();\n/**\n* Like generatePrimitiveGeometry, but identical options return the same\n* Model3DData, so a hundred equal keycaps upload one vertex buffer.\n*/\nfunction getPrimitiveGeometry(options) {\n\tconst key = JSON.stringify(options);\n\tlet model = primitiveCache.get(key);\n\tif (!model) {\n\t\tmodel = generatePrimitiveGeometry(options);\n\t\tif (primitiveCache.size > 512) primitiveCache.clear();\n\t\tprimitiveCache.set(key, model);\n\t}\n\treturn model;\n}\n\n//#endregion\n//#region src/shaders/dof-bokeh.ts\n/**\n* WebGPU WGSL shader for bilateral Poisson-disc bokeh Depth-of-Field post-processing.\n* Reads color and linear depth targets to produce photorealistic optical lens blur.\n*/\nconst dofBokehWgsl = `\nstruct CameraUniforms {\n viewMatrix : mat4x4<f32>,\n projMatrix : mat4x4<f32>,\n viewProjMatrix : mat4x4<f32>,\n invViewProjMatrix : mat4x4<f32>,\n cameraPos : vec4<f32>, // xyz = eye, w = near\n cameraDir : vec4<f32>, // xyz = forward, w = far\n dofParams : vec4<f32>, // x = focusDistance, y = fStop, z = maxBlurRadius, w = dofEnabled\n screenParams : vec4<f32>, // x = surfaceWidth, y = surfaceHeight, z = time, w = unused\n};\n\n@group(0) @binding(0) var<uniform> cam : CameraUniforms;\n@group(0) @binding(1) var samp : sampler;\n@group(0) @binding(2) var colorTex : texture_2d<f32>;\n@group(0) @binding(3) var depthTex : texture_2d<f32>;\n\nstruct VSOut {\n @builtin(position) pos : vec4<f32>,\n @location(0) uv : vec2<f32>,\n};\n\n@vertex\nfn vs_fullscreen(@builtin(vertex_index) vid : u32) -> VSOut {\n var out: VSOut;\n // Fullscreen triangle covering [-1, 1] NDC\n var coord = vec2<f32>(-1.0, -1.0);\n if (vid == 1u) {\n coord = vec2<f32>(3.0, -1.0);\n } else if (vid == 2u) {\n coord = vec2<f32>(-1.0, 3.0);\n }\n out.pos = vec4<f32>(coord, 0.0, 1.0);\n out.uv = coord * 0.5 + 0.5;\n out.uv.y = 1.0 - out.uv.y; // Flip Y for texture coordinates\n return out;\n}\n\nfn computeCoC(depth: f32) -> f32 {\n let focusDist = cam.dofParams.x;\n let maxBlur = cam.dofParams.z;\n if (focusDist <= 0.0 || maxBlur <= 0.0) {\n return 0.0;\n }\n let delta = abs(depth - focusDist);\n // Smooth non-linear ramp around focus plane\n return clamp((delta / (focusDist * 0.5 + 1.0)) * maxBlur, 0.0, maxBlur);\n}\n\n@fragment\nfn fs_dof(in: VSOut) -> @location(0) vec4<f32> {\n let centerColor = textureSampleLevel(colorTex, samp, in.uv, 0.0);\n let centerDepth = textureSampleLevel(depthTex, samp, in.uv, 0.0).r;\n let coc = computeCoC(centerDepth);\n \n // Skip if DoF is disabled or blur is negligible\n if (cam.dofParams.w < 0.5 || coc < 0.5) {\n return centerColor;\n }\n \n var accumColor = centerColor;\n var totalWeight = 1.0;\n \n let NUM_SAMPLES = 24;\n let GOLDEN_ANGLE = 2.39996323;\n let texelSize = 1.0 / cam.screenParams.xy;\n \n for (var i = 1; i <= NUM_SAMPLES; i = i + 1) {\n let theta = f32(i) * GOLDEN_ANGLE;\n let r = sqrt(f32(i) / f32(NUM_SAMPLES)) * coc;\n let offset = vec2<f32>(cos(theta), sin(theta)) * r * texelSize;\n \n let sampleUV = in.uv + offset;\n let sampleColor = textureSampleLevel(colorTex, samp, sampleUV, 0.0);\n let sampleDepth = textureSampleLevel(depthTex, samp, sampleUV, 0.0).r;\n let sampleCoC = computeCoC(sampleDepth);\n \n // Depth-aware bilateral rejection: prevent background bleed onto sharp foreground\n let depthDiff = sampleDepth - centerDepth;\n let weight = select(\n smoothstep(-10.0, 0.0, depthDiff) * clamp(sampleCoC / coc, 0.2, 1.0),\n 1.0,\n depthDiff >= 0.0\n );\n \n accumColor = accumColor + sampleColor * weight;\n totalWeight = totalWeight + weight;\n }\n \n return accumColor / totalWeight;\n}\n`;\n\n//#endregion\n//#region src/renderer3d/shadow-frustum.ts\n/**\n* Fits a shadow-casting light's view-projection around the scene: tight on\n* the casters (so the map's texels go where shadows are), deep enough to\n* cover every receiver (a floor far bigger than the casters still darkens).\n*/\nfunction aabbCorners(box) {\n\tconst { min, max } = box;\n\treturn [\n\t\t[\n\t\t\tmin[0],\n\t\t\tmin[1],\n\t\t\tmin[2]\n\t\t],\n\t\t[\n\t\t\tmax[0],\n\t\t\tmin[1],\n\t\t\tmin[2]\n\t\t],\n\t\t[\n\t\t\tmin[0],\n\t\t\tmax[1],\n\t\t\tmin[2]\n\t\t],\n\t\t[\n\t\t\tmax[0],\n\t\t\tmax[1],\n\t\t\tmin[2]\n\t\t],\n\t\t[\n\t\t\tmin[0],\n\t\t\tmin[1],\n\t\t\tmax[2]\n\t\t],\n\t\t[\n\t\t\tmax[0],\n\t\t\tmin[1],\n\t\t\tmax[2]\n\t\t],\n\t\t[\n\t\t\tmin[0],\n\t\t\tmax[1],\n\t\t\tmax[2]\n\t\t],\n\t\t[\n\t\t\tmax[0],\n\t\t\tmax[1],\n\t\t\tmax[2]\n\t\t]\n\t];\n}\n/** World-space bounds of a local box under a column-major model matrix. */\nfunction transformAabb(box, m) {\n\tconst min = [\n\t\tInfinity,\n\t\tInfinity,\n\t\tInfinity\n\t];\n\tconst max = [\n\t\t-Infinity,\n\t\t-Infinity,\n\t\t-Infinity\n\t];\n\tfor (const [x, y, z] of aabbCorners(box)) {\n\t\tconst w = [\n\t\t\tm[0] * x + m[4] * y + m[8] * z + m[12],\n\t\t\tm[1] * x + m[5] * y + m[9] * z + m[13],\n\t\t\tm[2] * x + m[6] * y + m[10] * z + m[14]\n\t\t];\n\t\tfor (let i = 0; i < 3; i++) {\n\t\t\tif (w[i] < min[i]) min[i] = w[i];\n\t\t\tif (w[i] > max[i]) max[i] = w[i];\n\t\t}\n\t}\n\treturn {\n\t\tmin,\n\t\tmax\n\t};\n}\nfunction transformPoint(m, p) {\n\treturn [\n\t\tm[0] * p[0] + m[4] * p[1] + m[8] * p[2] + m[12],\n\t\tm[1] * p[0] + m[5] * p[1] + m[9] * p[2] + m[13],\n\t\tm[2] * p[0] + m[6] * p[1] + m[10] * p[2] + m[14]\n\t];\n}\n/** An up vector not parallel to `dir` (world y points down). */\nfunction upFor(dir) {\n\treturn Math.abs(dir[1]) > .98 ? [\n\t\t0,\n\t\t0,\n\t\t1\n\t] : [\n\t\t0,\n\t\t-1,\n\t\t0\n\t];\n}\nfunction fitShadowFrustum(light, casters, receivers, mapSize) {\n\tif (casters.length === 0) return null;\n\tconst dir = Vector3Math.normalize(light.direction);\n\tconst casterPts = casters.flatMap(aabbCorners);\n\tconst allPts = [...casterPts, ...receivers.flatMap(aabbCorners)];\n\tif (light.type === \"directional\") {\n\t\tconst center = [\n\t\t\t0,\n\t\t\t0,\n\t\t\t0\n\t\t];\n\t\tfor (const p of casterPts) {\n\t\t\tcenter[0] += p[0] / casterPts.length;\n\t\t\tcenter[1] += p[1] / casterPts.length;\n\t\t\tcenter[2] += p[2] / casterPts.length;\n\t\t}\n\t\tconst eye$1 = Vector3Math.subtract(center, Vector3Math.multiplyScalar(dir, 1));\n\t\tconst view$1 = Matrix4Math.lookAt(eye$1, center, upFor(dir));\n\t\tlet minX = Infinity;\n\t\tlet maxX = -Infinity;\n\t\tlet minY = Infinity;\n\t\tlet maxY = -Infinity;\n\t\tfor (const p of casterPts) {\n\t\t\tconst v = transformPoint(view$1, p);\n\t\t\tminX = Math.min(minX, v[0]);\n\t\t\tmaxX = Math.max(maxX, v[0]);\n\t\t\tminY = Math.min(minY, v[1]);\n\t\t\tmaxY = Math.max(maxY, v[1]);\n\t\t}\n\t\tlet minZ = Infinity;\n\t\tlet maxZ = -Infinity;\n\t\tfor (const p of allPts) {\n\t\t\tconst z = transformPoint(view$1, p)[2];\n\t\t\tminZ = Math.min(minZ, z);\n\t\t\tmaxZ = Math.max(maxZ, z);\n\t\t}\n\t\tconst half = Math.max(maxX - minX, maxY - minY) * .5 * 1.08 + 4;\n\t\tconst cx = (minX + maxX) / 2;\n\t\tconst cy = (minY + maxY) / 2;\n\t\tconst depthPad = Math.max(10, (maxZ - minZ) * .02);\n\t\tconst proj$1 = Matrix4Math.orthographic(cx - half, cx + half, cy - half, cy + half, minZ - depthPad, maxZ + depthPad);\n\t\treturn {\n\t\t\tviewProj: Matrix4Math.multiply(proj$1, view$1),\n\t\t\ttexelWorldSize: 2 * half / mapSize\n\t\t};\n\t}\n\tconst eye = light.position;\n\tconst view = Matrix4Math.lookAt(eye, Vector3Math.add(eye, dir), upFor(dir));\n\tlet near = Infinity;\n\tlet far = 0;\n\tlet casterDist = 0;\n\tfor (const p of allPts) {\n\t\tconst z = transformPoint(view, p)[2];\n\t\tif (z > 0) {\n\t\t\tnear = Math.min(near, z);\n\t\t\tfar = Math.max(far, z);\n\t\t}\n\t}\n\tfor (const p of casterPts) casterDist = Math.max(casterDist, transformPoint(view, p)[2]);\n\tif (!Number.isFinite(near) || far <= 0) return null;\n\tnear = Math.max(1, near * .9);\n\tfar = far * 1.05 + 1;\n\tconst fovRad = Math.min(170, 2 * (light.angle ?? 45) + 4) * Math.PI / 180;\n\tconst proj = Matrix4Math.perspective(fovRad, 1, near, far);\n\treturn {\n\t\tviewProj: Matrix4Math.multiply(proj, view),\n\t\ttexelWorldSize: 2 * Math.tan(fovRad / 2) * Math.max(casterDist, near) / mapSize\n\t};\n}\n\n//#endregion\n//#region src/shaders/slug3d.ts\n/**\n* Slug glyphs drawn straight into the 3D scene: each glyph quad is placed on\n* its layer's plane by the camera's view-projection, and coverage is solved\n* per screen pixel from the outline. Text stays sharp at any distance or\n* angle, with no intermediate texture to magnify or minify.\n*/\nconst slug3dWgsl = `\n${lighting3dWgsl}\n\nstruct TextModelUniforms {\n\tmodelMatrix : mat4x4<f32>, // paragraph px -> world\n\tnormalMatrix : mat4x4<f32>,\n\tparams : vec4<f32>, // x = opacity, y = slant, z = twoSided (1.0 = yes), w = pull toward the eye\n\tmaterialParams : vec4<f32>, // x = shininess, y = specularIntensity, z = ambientIntensity, w = materialMode (0=unlit, 1=lit)\n\tpbr : vec4<f32>, // x = roughness (<0 = default), y = metallic\n\temissive : vec4<f32>, // rgb = sRGB emissive color, w = strength\n};\n\n@group(0) @binding(0) var<uniform> cam : CameraUniforms;\n@group(1) @binding(0) var<uniform> model : TextModelUniforms;\n${matte3dWgsl(1, 1)}@group(2) @binding(0) var curvesTex : texture_2d<f32>;\n@group(2) @binding(1) var bandsTex : texture_2d<u32>;\n${lightsBindingsWgsl}\n\n${slugCoverageWgsl}\n\nstruct VSOut {\n\t@builtin(position) pos : vec4<f32>,\n\t@location(0) uv : vec2<f32>,\n\t@location(1) @interpolate(flat) glyphScale : vec2<f32>,\n\t@location(2) @interpolate(flat) bandScale : vec2<f32>,\n\t@location(3) @interpolate(flat) bandMax : vec2<u32>,\n\t@location(4) @interpolate(flat) bandsTexCoords : vec2<u32>,\n\t@location(5) color : vec4<f32>,\n\t@location(6) @interpolate(flat) fx : vec4<f32>, // x = blur, y = chromatic shift, z = dissolve, w = vfx\n\t@location(7) worldPos : vec3<f32>,\n\t@location(8) @interpolate(flat) worldNormal : vec3<f32>,\n\t@location(9) linearDepth : f32,\n};\n\nvar<private> pos : array<vec2<f32>, 6> = array<vec2<f32>, 6>(\n\tvec2<f32>(-1.0, -1.0),\n\tvec2<f32>(1.0, 1.0),\n\tvec2<f32>(-1.0, 1.0),\n\tvec2<f32>(-1.0, -1.0),\n\tvec2<f32>(1.0, -1.0),\n\tvec2<f32>(1.0, 1.0)\n);\n\n// Screen pixels moved per paragraph unit along the axis whose clip-space step\n// is dc, at clip position c: the derivative of the perspective divide.\nfn pixelsPerUnitAlong(c: vec4<f32>, dc: vec4<f32>) -> vec2<f32> {\n\tlet w = max(c.w, 1e-4);\n\treturn (dc.xy * w - c.xy * dc.w) / (w * w) * 0.5 * cam.screenParams.xy;\n}\n\n@vertex fn vs(\n\t@builtin(vertex_index) vertex_index : u32,\n\t@location(0) aScaleBias : vec4<f32>,\n\t@location(1) aGlyphBandScale : vec4<f32>,\n\t@location(2) aBandMaxTexCoords : vec4<f32>,\n\t@location(3) aAnim : vec4<f32>, // x = rotation, y = scale_mult, zw = translation\n\t@location(4) aColor : vec4<f32>,\n\t@location(5) aExtraParams : vec4<f32>,\n) -> VSOut {\n\tlet quad_pos = pos[vertex_index];\n\tlet angle = aAnim.x;\n\tlet scale_mult = aAnim.y;\n\tlet origin = aScaleBias.zw + aAnim.zw;\n\tlet slant = model.params.y;\n\tlet rot = mat2x2<f32>(cos(angle), sin(angle), -sin(angle), cos(angle));\n\tlet shear = mat2x2<f32>(1.0, 0.0, -slant, 1.0);\n\tlet glyphToParagraph = rot * shear;\n\n\tlet clipFromParagraph = cam.viewProjMatrix * model.modelMatrix;\n\n\t// Slug's dynamic dilation, under perspective: grow the quad by one screen\n\t// pixel so edge pixels whose centres fall just outside the outline's box\n\t// are still shaded. The pixel is measured at this corner through the\n\t// projection's Jacobian, along the paragraph direction that gets the fewest\n\t// pixels (its smallest singular value), so foreshortened sides are covered.\n\tlet corner = origin + glyphToParagraph * (quad_pos * aScaleBias.xy * scale_mult);\n\tlet cornerClip = clipFromParagraph * vec4<f32>(corner, 0.0, 1.0);\n\tlet jx = pixelsPerUnitAlong(cornerClip, clipFromParagraph[0]);\n\tlet jy = pixelsPerUnitAlong(cornerClip, clipFromParagraph[1]);\n\tlet e = dot(jx, jx) + dot(jy, jy);\n\tlet det = jx.x * jy.y - jx.y * jy.x;\n\tlet minPixelsPerUnit = sqrt(max(0.5 * (e - sqrt(max(e * e - 4.0 * det * det, 0.0))), 0.0));\n\tlet halfSize = max(abs(aScaleBias.xy * scale_mult), vec2<f32>(1e-4));\n\t// Bounded at three times the glyph: seen nearly edge-on a pixel spans\n\t// most of the paragraph, and the glyph is a sliver either way.\n\tlet dilation = min(vec2<f32>(1.0 / max(minPixelsPerUnit, 1e-6)), halfSize * 2.0);\n\tlet grow = vec2<f32>(1.0) + dilation / halfSize;\n\n\tlet paragraphPos = origin + glyphToParagraph * (quad_pos * aScaleBias.xy * scale_mult * grow);\n\tlet world4 = model.modelMatrix * vec4<f32>(paragraphPos, 0.0, 1.0);\n\t// Slide toward the eye along the view ray: the same pixel, a nearer depth.\n\t// Passes stacked on one plane (shadow, stroke, fill, a backdrop) resolve\n\t// by draw order instead of z-fighting.\n\tlet world = world4.xyz + (cam.cameraPos.xyz - world4.xyz) * model.params.w;\n\n\tvar out : VSOut;\n\tout.pos = cam.viewProjMatrix * vec4<f32>(world, 1.0);\n\tout.uv = vec2<f32>(\n\t\tquad_pos.x * grow.x * 0.5 + 0.5,\n\t\t1.0 - (quad_pos.y * grow.y * 0.5 + 0.5),\n\t);\n\tout.glyphScale = aGlyphBandScale.xy;\n\tout.bandScale = aGlyphBandScale.zw;\n\tout.bandMax = vec2<u32>(aBandMaxTexCoords.xy);\n\tout.bandsTexCoords = vec2<u32>(aBandMaxTexCoords.zw);\n\tout.color = aColor;\n\tout.fx = aExtraParams;\n\tout.worldPos = world4.xyz;\n\tout.worldNormal = normalize((model.normalMatrix * vec4<f32>(0.0, 0.0, -1.0, 0.0)).xyz);\n\tout.linearDepth = dot(world4.xyz - cam.cameraPos.xyz, cam.cameraDir.xyz);\n\treturn out;\n}\n\nstruct TextFragment {\n\tcolor : vec4<f32>, // premultiplied display color; alpha 0 = discard\n\thdr : vec4<f32>, // premultiplied scene radiance (bloom source)\n};\n\nfn shadeText(in : VSOut, fw : vec2<f32>) -> TextFragment {\n\tvar out : TextFragment;\n\tout.color = vec4<f32>(0.0);\n\tout.hdr = vec4<f32>(0.0);\n\t// One-sided text culls against its plane's normal, as one-sided quads do.\n\tif (model.params.z < 0.5 && dot(in.worldNormal, cam.cameraPos.xyz - in.worldPos) < 0.0) {\n\t\treturn out;\n\t}\n\tlet glyph = SlugGlyph(in.glyphScale, in.bandScale, in.bandMax, in.bandsTexCoords);\n\tlet shaded = shadeSlugGlyph(\n\t\tin.uv,\n\t\tfw,\n\t\tin.pos.xy,\n\t\tglyph,\n\t\tin.color,\n\t\tmodel.params.x,\n\t\tin.fx.x,\n\t\tin.fx.y,\n\t\tin.fx.z,\n\t);\n\tif (shaded.a < 0.0001) {\n\t\treturn out;\n\t}\n\tlet lit = shadeSurfaceFull(in.worldPos, in.worldNormal, shaded.rgb / shaded.a, model.materialParams, model.pbr, model.emissive);\n\tout.color = vec4<f32>(lit.display * shaded.a, shaded.a);\n\tout.hdr = vec4<f32>(lit.hdr * shaded.a, shaded.a);\n\treturn out;\n}\n\nfn textFragment(in : VSOut) -> TextFragment {\n\tlet fw = max(abs(dpdx(in.uv)) + abs(dpdy(in.uv)), vec2<f32>(0.000001));\n\tlet m = matteCoverage(in.pos.xy);\n\tvar f = shadeText(in, fw);\n\tf.color *= m;\n\tf.hdr *= m;\n\tif (f.color.a < 0.0001) {\n\t\tdiscard;\n\t}\n\treturn f;\n}\n\n@fragment fn fs_single(in : VSOut) -> @location(0) vec4<f32> {\n\treturn textFragment(in).color;\n}\n\nstruct MrtOutput {\n\t@location(0) color : vec4<f32>,\n\t@location(1) depth : vec4<f32>,\n};\n\nstruct BloomOutput {\n\t@location(0) color : vec4<f32>,\n\t@location(1) hdr : vec4<f32>,\n};\n\nstruct MrtBloomOutput {\n\t@location(0) color : vec4<f32>,\n\t@location(1) depth : vec4<f32>,\n\t@location(2) hdr : vec4<f32>,\n};\n\n@fragment fn fs_mrt(in : VSOut) -> MrtOutput {\n\tvar out : MrtOutput;\n\tout.color = textFragment(in).color;\n\tout.depth = vec4<f32>(in.linearDepth, 0.0, 0.0, 1.0);\n\treturn out;\n}\n\n@fragment fn fs_single_bloom(in : VSOut) -> BloomOutput {\n\tlet f = textFragment(in);\n\tvar out : BloomOutput;\n\tout.color = f.color;\n\tout.hdr = f.hdr;\n\treturn out;\n}\n\n@fragment fn fs_mrt_bloom(in : VSOut) -> MrtBloomOutput {\n\tlet f = textFragment(in);\n\tvar out : MrtBloomOutput;\n\tout.color = f.color;\n\tout.depth = vec4<f32>(in.linearDepth, 0.0, 0.0, 1.0);\n\tout.hdr = f.hdr;\n\treturn out;\n}\n`;\n\n//#endregion\n//#region src/renderer3d/slug3d-pipeline.ts\nconst INSTANCE_FLOATS = 24;\n/** Slug glyphs in the 3D pass: depth-tested, lit and resolution independent. */\nvar Slug3DPipeline = class {\n\tdevice;\n\tpipelineSingle;\n\tpipelineMrt;\n\tbloomVariants;\n\tmodelLayout;\n\tfontLayout;\n\tmodelPool;\n\tinstancePool;\n\tfontBindGroups = /* @__PURE__ */ new WeakMap();\n\tmodelData = new Float32Array(40 + SURFACE_PARAMS_FLOATS);\n\tconstructor(device, format, depthFormat, cameraLayout, lightsLayout, sampleCount = 1) {\n\t\tthis.device = device;\n\t\tthis.modelPool = new BufferPool((40 + SURFACE_PARAMS_FLOATS) * 4, GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST);\n\t\tthis.instancePool = new BufferPool(65536, GPUBufferUsage.VERTEX | GPUBufferUsage.COPY_DST);\n\t\tconst module = device.createShaderModule({\n\t\t\tlabel: \"slug3d.wgsl\",\n\t\t\tcode: slug3dWgsl\n\t\t});\n\t\tthis.modelLayout = device.createBindGroupLayout({\n\t\t\tlabel: \"Slug3DModelLayout\",\n\t\t\tentries: [{\n\t\t\t\tbinding: 0,\n\t\t\t\tvisibility: GPUShaderStage.VERTEX | GPUShaderStage.FRAGMENT,\n\t\t\t\tbuffer: { type: \"uniform\" }\n\t\t\t}, matteLayoutEntry(1)]\n\t\t});\n\t\tthis.fontLayout = device.createBindGroupLayout({\n\t\t\tlabel: \"Slug3DFontLayout\",\n\t\t\tentries: [{\n\t\t\t\tbinding: 0,\n\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\ttexture: { sampleType: \"unfilterable-float\" }\n\t\t\t}, {\n\t\t\t\tbinding: 1,\n\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\ttexture: { sampleType: \"uint\" }\n\t\t\t}]\n\t\t});\n\t\tconst base = {\n\t\t\tlabel: \"Slug3DPipeline\",\n\t\t\tlayout: device.createPipelineLayout({ bindGroupLayouts: [\n\t\t\t\tcameraLayout,\n\t\t\t\tthis.modelLayout,\n\t\t\t\tthis.fontLayout,\n\t\t\t\tlightsLayout\n\t\t\t] }),\n\t\t\tvertex: {\n\t\t\t\tmodule,\n\t\t\t\tentryPoint: \"vs\",\n\t\t\t\tbuffers: [{\n\t\t\t\t\tarrayStride: INSTANCE_FLOATS * 4,\n\t\t\t\t\tstepMode: \"instance\",\n\t\t\t\t\tattributes: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tshaderLocation: 0,\n\t\t\t\t\t\t\toffset: 0,\n\t\t\t\t\t\t\tformat: \"float32x4\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tshaderLocation: 1,\n\t\t\t\t\t\t\toffset: 16,\n\t\t\t\t\t\t\tformat: \"float32x4\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tshaderLocation: 2,\n\t\t\t\t\t\t\toffset: 32,\n\t\t\t\t\t\t\tformat: \"float32x4\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tshaderLocation: 3,\n\t\t\t\t\t\t\toffset: 48,\n\t\t\t\t\t\t\tformat: \"float32x4\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tshaderLocation: 4,\n\t\t\t\t\t\t\toffset: 64,\n\t\t\t\t\t\t\tformat: \"float32x4\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tshaderLocation: 5,\n\t\t\t\t\t\t\toffset: 80,\n\t\t\t\t\t\t\tformat: \"float32x4\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}]\n\t\t\t},\n\t\t\tmodule,\n\t\t\tformat,\n\t\t\tdepthStencil: {\n\t\t\t\tformat: depthFormat,\n\t\t\t\tdepthWriteEnabled: true,\n\t\t\t\tdepthCompare: \"less-equal\"\n\t\t\t},\n\t\t\tprimitive: {\n\t\t\t\ttopology: \"triangle-list\",\n\t\t\t\tcullMode: \"none\"\n\t\t\t},\n\t\t\tmultisample: { count: sampleCount }\n\t\t};\n\t\tconst { single, mrt } = createBasePipelines(device, base);\n\t\tthis.pipelineSingle = single;\n\t\tthis.pipelineMrt = mrt;\n\t\tthis.bloomVariants = new BloomPipelineVariants(device, base);\n\t}\n\tresetPools() {\n\t\tthis.modelPool.reset();\n\t\tthis.instancePool.reset();\n\t}\n\tdraw(pass, cameraBindGroup, lightsBindGroup, font, instances, instanceCount, data, useMrt = false, useBloom = false) {\n\t\tif (instanceCount === 0 || !font.curvesTex || !font.bandsTex) return;\n\t\tthis.modelData.set(data.modelMatrix, 0);\n\t\tthis.modelData.set(data.normalMatrix, 16);\n\t\tthis.modelData[32] = data.opacity;\n\t\tthis.modelData[33] = data.slant;\n\t\tthis.modelData[34] = data.twoSided ? 1 : 0;\n\t\tthis.modelData[35] = data.depthPull;\n\t\tthis.modelData.set(packMaterialParams(data), 36);\n\t\tpackSurfaceParams(data, this.modelData, 40);\n\t\tconst modelBuffer = this.modelPool.getBuffer(this.device, this.modelData);\n\t\tconst modelBindGroup = this.device.createBindGroup({\n\t\t\tlayout: this.modelLayout,\n\t\t\tentries: [{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: { buffer: modelBuffer }\n\t\t\t}, {\n\t\t\t\tbinding: 1,\n\t\t\t\tresource: data.matte?.createView() ?? fullCoverageView(this.device)\n\t\t\t}]\n\t\t});\n\t\tconst instanceBuffer = this.instancePool.getBuffer(this.device, instances.subarray(0, instanceCount * INSTANCE_FLOATS));\n\t\tpass.setPipeline(useBloom ? this.bloomVariants.get(useMrt) : useMrt ? this.pipelineMrt : this.pipelineSingle);\n\t\tpass.setBindGroup(0, cameraBindGroup);\n\t\tpass.setBindGroup(1, modelBindGroup);\n\t\tpass.setBindGroup(2, this.fontBindGroup(font.curvesTex, font.bandsTex));\n\t\tpass.setBindGroup(3, lightsBindGroup);\n\t\tpass.setVertexBuffer(0, instanceBuffer);\n\t\tpass.draw(6, instanceCount);\n\t}\n\t/** A font's textures live as long as the font: bind them once, not per draw. */\n\tfontBindGroup(curves, bands) {\n\t\tlet bindGroup = this.fontBindGroups.get(curves);\n\t\tif (!bindGroup) {\n\t\t\tbindGroup = this.device.createBindGroup({\n\t\t\t\tlayout: this.fontLayout,\n\t\t\t\tentries: [{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: curves.createView()\n\t\t\t\t}, {\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: bands.createView()\n\t\t\t\t}]\n\t\t\t});\n\t\t\tthis.fontBindGroups.set(curves, bindGroup);\n\t\t}\n\t\treturn bindGroup;\n\t}\n\tdestroy() {\n\t\tthis.modelPool.destroy();\n\t\tthis.instancePool.destroy();\n\t}\n};\n\n//#endregion\n//#region src/renderer3d/renderer3d.ts\nconst ADDRESS_MODES = {\n\trepeat: \"repeat\",\n\tclamp: \"clamp-to-edge\",\n\tmirror: \"mirror-repeat\"\n};\n/**\n* How far, as a fraction of the distance to the eye, each pass stacked on a\n* text plane slides toward it. Large enough for depth24 to separate passes\n* out to a few thousand px from the camera, small enough to never be seen.\n*/\nconst TEXT_STACK_PULL = 5e-4;\nvar Renderer3D = class {\n\tdevice;\n\tformat;\n\tquad3dPipeline;\n\tslug3dPipeline;\n\tmesh3dPipeline;\n\taudioMeshDeformPipeline;\n\tdofPipeline;\n\tdofBindGroupLayout;\n\tcameraPool;\n\tlightsPool;\n\tcameraUniformBindGroupCache = new UniformBindGroupCache();\n\tsamplerCache = new SamplerCache();\n\tdepthTexture = null;\n\tlinearDepthTexture = null;\n\tmsaaColorTexture = null;\n\tmsaaLinearDepthTexture = null;\n\tmsaaHdrTexture = null;\n\thdrTexture = null;\n\t/** Whether the current pass also writes HDR radiance (bloom). */\n\tpassWritesHdr = false;\n\tcameraUniformData = new Float32Array(80);\n\tmeshBuffersCache = /* @__PURE__ */ new WeakMap();\n\tmaterialTextures = /* @__PURE__ */ new WeakMap();\n\tmaterialMapCache = /* @__PURE__ */ new WeakMap();\n\t/** Parsed models by source and load options: a model file is read once, not every frame. */\n\tmodelCache = /* @__PURE__ */ new Map();\n\tlastCameraPose = null;\n\tshadowTexture = null;\n\tplaceholderShadowTexture = null;\n\tshadowSampler = null;\n\tmeshBounds = /* @__PURE__ */ new WeakMap();\n\tbloomPipeline = null;\n\tlastCameraBuffer = null;\n\t/**\n\t* Samples per pixel in the 3D pass. Mesh silhouettes (extruded text,\n\t* models) are rasterized triangles: without MSAA every edge is a hard\n\t* stair-step. 4 is the count every WebGPU device supports; 1 turns it off.\n\t*/\n\tsampleCount;\n\tconstructor(device, format, sampleCount = 4) {\n\t\tthis.device = device;\n\t\tthis.format = format;\n\t\tthis.sampleCount = sampleCount;\n\t\tthis.quad3dPipeline = new Quad3DPipeline(device, format, \"depth24plus\", sampleCount);\n\t\tthis.slug3dPipeline = new Slug3DPipeline(device, format, \"depth24plus\", this.quad3dPipeline.cameraLayout, this.quad3dPipeline.lightsLayout, sampleCount);\n\t\tthis.mesh3dPipeline = new Mesh3DPipeline(device, format, \"depth24plus\", this.quad3dPipeline.cameraLayout, this.quad3dPipeline.lightsLayout, sampleCount);\n\t\tthis.audioMeshDeformPipeline = new AudioMeshDeformPipeline(device);\n\t\tthis.cameraPool = new BufferPool(320, GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST);\n\t\tthis.lightsPool = new BufferPool(LIGHT_UNIFORM_SIZE_BYTES, GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST);\n\t\tconst dofModule = device.createShaderModule({\n\t\t\tlabel: \"dof-bokeh.wgsl\",\n\t\t\tcode: dofBokehWgsl\n\t\t});\n\t\tthis.dofBindGroupLayout = device.createBindGroupLayout({\n\t\t\tlabel: \"DoFBindGroupLayout\",\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tvisibility: GPUShaderStage.VERTEX | GPUShaderStage.FRAGMENT,\n\t\t\t\t\tbuffer: { type: \"uniform\" }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\t\tsampler: { type: \"filtering\" }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\t\ttexture: { sampleType: \"float\" }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 3,\n\t\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\t\ttexture: { sampleType: \"float\" }\n\t\t\t\t}\n\t\t\t]\n\t\t});\n\t\tthis.dofPipeline = device.createRenderPipeline({\n\t\t\tlabel: \"DoFBokehPipeline\",\n\t\t\tlayout: device.createPipelineLayout({ bindGroupLayouts: [this.dofBindGroupLayout] }),\n\t\t\tvertex: {\n\t\t\t\tmodule: dofModule,\n\t\t\t\tentryPoint: \"vs_fullscreen\"\n\t\t\t},\n\t\t\tfragment: {\n\t\t\t\tmodule: dofModule,\n\t\t\t\tentryPoint: \"fs_dof\",\n\t\t\t\ttargets: [{ format }]\n\t\t\t},\n\t\t\tprimitive: { topology: \"triangle-list\" }\n\t\t});\n\t}\n\tresetPools() {\n\t\tthis.bloomPipeline?.resetPools();\n\t\tthis.cameraPool.reset();\n\t\tthis.lastCameraPose = null;\n\t\tthis.lastCameraBuffer = null;\n\t\tthis.lightsPool.reset();\n\t\tthis.quad3dPipeline.resetPools();\n\t\tthis.slug3dPipeline.resetPools();\n\t\tthis.mesh3dPipeline.resetPools();\n\t\tthis.audioMeshDeformPipeline.resetPools();\n\t}\n\tgetOrCreateDepthTexture(width, height) {\n\t\tif (!this.depthTexture || this.depthTexture.width !== width || this.depthTexture.height !== height) {\n\t\t\tthis.depthTexture?.destroy();\n\t\t\tthis.depthTexture = this.device.createTexture({\n\t\t\t\tlabel: \"Renderer3DDepthTexture\",\n\t\t\t\tsize: {\n\t\t\t\t\twidth,\n\t\t\t\t\theight\n\t\t\t\t},\n\t\t\t\tformat: \"depth24plus\",\n\t\t\t\tsampleCount: this.sampleCount,\n\t\t\t\tusage: GPUTextureUsage.RENDER_ATTACHMENT\n\t\t\t});\n\t\t}\n\t\treturn this.depthTexture;\n\t}\n\tgetOrCreateMsaaTexture(current, label, format, width, height) {\n\t\tif (current && current.width === width && current.height === height) return current;\n\t\tcurrent?.destroy();\n\t\treturn this.device.createTexture({\n\t\t\tlabel,\n\t\t\tsize: {\n\t\t\t\twidth,\n\t\t\t\theight\n\t\t\t},\n\t\t\tformat,\n\t\t\tsampleCount: this.sampleCount,\n\t\t\tusage: GPUTextureUsage.RENDER_ATTACHMENT\n\t\t});\n\t}\n\t/** The HDR radiance target the last `beginPass(…, writeHdr)` drew into. */\n\thdrSource() {\n\t\treturn this.hdrTexture;\n\t}\n\tgetOrCreateHdrTexture(width, height) {\n\t\tif (!this.hdrTexture || this.hdrTexture.width !== width || this.hdrTexture.height !== height) {\n\t\t\tthis.hdrTexture?.destroy();\n\t\t\tthis.hdrTexture = this.device.createTexture({\n\t\t\t\tlabel: \"Renderer3DHdrRadiance\",\n\t\t\t\tsize: {\n\t\t\t\t\twidth,\n\t\t\t\t\theight\n\t\t\t\t},\n\t\t\t\tformat: \"rgba16float\",\n\t\t\t\tusage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.TEXTURE_BINDING\n\t\t\t});\n\t\t}\n\t\treturn this.hdrTexture;\n\t}\n\tgetOrCreateLinearDepthTexture(width, height) {\n\t\tif (!this.linearDepthTexture || this.linearDepthTexture.width !== width || this.linearDepthTexture.height !== height) {\n\t\t\tthis.linearDepthTexture?.destroy();\n\t\t\tthis.linearDepthTexture = this.device.createTexture({\n\t\t\t\tlabel: \"Renderer3DLinearDepthTexture\",\n\t\t\t\tsize: {\n\t\t\t\t\twidth,\n\t\t\t\t\theight\n\t\t\t\t},\n\t\t\t\tformat: \"rgba16float\",\n\t\t\t\tusage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.TEXTURE_BINDING\n\t\t\t});\n\t\t}\n\t\treturn this.linearDepthTexture;\n\t}\n\tpackCameraUniforms(camera, surfaceWidth, surfaceHeight, time = 0) {\n\t\tif (this.lastCameraPose && this.lastCameraBuffer && this.lastCameraPose.eye[0] === camera.eye[0] && this.lastCameraPose.eye[1] === camera.eye[1] && this.lastCameraPose.eye[2] === camera.eye[2] && this.lastCameraPose.target[0] === camera.target[0] && this.lastCameraPose.target[1] === camera.target[1] && this.lastCameraPose.target[2] === camera.target[2] && this.lastCameraPose.up[0] === camera.up[0] && this.lastCameraPose.up[1] === camera.up[1] && this.lastCameraPose.up[2] === camera.up[2] && this.lastCameraPose.fov === camera.fov && this.lastCameraPose.near === camera.near && this.lastCameraPose.far === camera.far) return this.lastCameraBuffer;\n\t\tconst view = Camera3D.computeViewMatrix(camera);\n\t\tconst proj = Camera3D.computeProjectionMatrix(camera);\n\t\tconst viewProj = Camera3D.computeViewProjectionMatrix(camera);\n\t\tconst invViewProj = Matrix4Math.invert(viewProj) ?? Matrix4Math.identity();\n\t\tthis.cameraUniformData.set(view, 0);\n\t\tthis.cameraUniformData.set(proj, 16);\n\t\tthis.cameraUniformData.set(viewProj, 32);\n\t\tthis.cameraUniformData.set(invViewProj, 48);\n\t\tthis.cameraUniformData[64] = camera.eye[0];\n\t\tthis.cameraUniformData[65] = camera.eye[1];\n\t\tthis.cameraUniformData[66] = camera.eye[2];\n\t\tthis.cameraUniformData[67] = camera.near;\n\t\tconst fwd = Vector3Math.normalize(Vector3Math.subtract(camera.target, camera.eye));\n\t\tthis.cameraUniformData[68] = fwd[0];\n\t\tthis.cameraUniformData[69] = fwd[1];\n\t\tthis.cameraUniformData[70] = fwd[2];\n\t\tthis.cameraUniformData[71] = camera.far;\n\t\tthis.cameraUniformData[72] = camera.focusDistance ?? 1e3;\n\t\tthis.cameraUniformData[73] = camera.fStop ?? 2.8;\n\t\tthis.cameraUniformData[74] = camera.maxBlurRadius ?? 32;\n\t\tthis.cameraUniformData[75] = camera.focusDistance !== void 0 ? 1 : 0;\n\t\tthis.cameraUniformData[76] = surfaceWidth;\n\t\tthis.cameraUniformData[77] = surfaceHeight;\n\t\tthis.cameraUniformData[78] = time;\n\t\tthis.cameraUniformData[79] = 0;\n\t\tconst buffer = this.cameraPool.getBuffer(this.device, this.cameraUniformData);\n\t\tthis.lastCameraPose = camera;\n\t\tthis.lastCameraBuffer = buffer;\n\t\treturn buffer;\n\t}\n\tcreateCameraBindGroup(cameraBuffer) {\n\t\treturn this.cameraUniformBindGroupCache.getBindGroup(this.device, this.quad3dPipeline.cameraLayout, cameraBuffer);\n\t}\n\tgetOrCreateLightsBuffer(lights, world) {\n\t\tconst lightsData = Light3D.packLightsUniforms(lights ?? [], world?.environment, world?.shadow);\n\t\treturn this.lightsPool.getBuffer(this.device, lightsData);\n\t}\n\t/** Lights uniform + shadow map + comparison sampler (group 3 of every lit shader). */\n\tcreateLightsBindGroup(lightsBuffer, withShadow) {\n\t\tthis.shadowSampler ??= this.device.createSampler({\n\t\t\tlabel: \"ShadowComparisonSampler\",\n\t\t\tcompare: \"less-equal\",\n\t\t\tmagFilter: \"linear\",\n\t\t\tminFilter: \"linear\",\n\t\t\taddressModeU: \"clamp-to-edge\",\n\t\t\taddressModeV: \"clamp-to-edge\"\n\t\t});\n\t\tthis.placeholderShadowTexture ??= this.device.createTexture({\n\t\t\tlabel: \"ShadowMapPlaceholder\",\n\t\t\tsize: {\n\t\t\t\twidth: 1,\n\t\t\t\theight: 1\n\t\t\t},\n\t\t\tformat: SHADOW_DEPTH_FORMAT,\n\t\t\tusage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.RENDER_ATTACHMENT\n\t\t});\n\t\tconst map = withShadow && this.shadowTexture ? this.shadowTexture : this.placeholderShadowTexture;\n\t\treturn this.device.createBindGroup({\n\t\t\tlabel: \"Lights3DBindGroup\",\n\t\t\tlayout: this.quad3dPipeline.lightsLayout,\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: { buffer: lightsBuffer }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: map.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: this.shadowSampler\n\t\t\t\t}\n\t\t\t]\n\t\t});\n\t}\n\t/** Local bounds of a mesh, computed once. */\n\tmeshAabb(mesh) {\n\t\tlet box = this.meshBounds.get(mesh);\n\t\tif (!box) {\n\t\t\tconst min = [\n\t\t\t\tInfinity,\n\t\t\t\tInfinity,\n\t\t\t\tInfinity\n\t\t\t];\n\t\t\tconst max = [\n\t\t\t\t-Infinity,\n\t\t\t\t-Infinity,\n\t\t\t\t-Infinity\n\t\t\t];\n\t\t\tconst p = mesh.positions;\n\t\t\tfor (let i = 0; i + 2 < p.length; i += 3) for (let k = 0; k < 3; k++) {\n\t\t\t\tconst v = p[i + k];\n\t\t\t\tif (v < min[k]) min[k] = v;\n\t\t\t\tif (v > max[k]) max[k] = v;\n\t\t\t}\n\t\t\tbox = Number.isFinite(min[0]) ? {\n\t\t\t\tmin,\n\t\t\t\tmax\n\t\t\t} : {\n\t\t\t\tmin: [\n\t\t\t\t\t0,\n\t\t\t\t\t0,\n\t\t\t\t\t0\n\t\t\t\t],\n\t\t\t\tmax: [\n\t\t\t\t\t0,\n\t\t\t\t\t0,\n\t\t\t\t\t0\n\t\t\t\t]\n\t\t\t};\n\t\t\tthis.meshBounds.set(mesh, box);\n\t\t}\n\t\treturn box;\n\t}\n\t/** World bounds of a mesh or quad draw, for fitting shadow frusta. */\n\tworldBounds(item) {\n\t\tif (item.kind === \"mesh\") return transformAabb(this.meshAabb(item.mesh), this.meshModelMatrix(item.opts));\n\t\treturn transformAabb({\n\t\t\tmin: [\n\t\t\t\t-.5,\n\t\t\t\t-.5,\n\t\t\t\t0\n\t\t\t],\n\t\t\tmax: [\n\t\t\t\t.5,\n\t\t\t\t.5,\n\t\t\t\t0\n\t\t\t]\n\t\t}, this.quadModelMatrix(item.opts));\n\t}\n\t/**\n\t* Renders the shadow map for `light` (a directional or spot light with\n\t* `castShadow`) from `casters`, fitting its frustum around them and deep\n\t* enough for `receivers`. Pass the result to `beginPass` as `world.shadow`.\n\t*/\n\trenderShadowMap(encoder, light, lightIndex, casters, receivers, options = {}) {\n\t\tconst kind = light.lightType ?? light.type;\n\t\tif (kind !== \"directional\" && kind !== \"spot\") return null;\n\t\tconst processed = Light3D.processLight(light);\n\t\tconst position = [\n\t\t\tprocessed.posType[0],\n\t\t\tprocessed.posType[1],\n\t\t\tprocessed.posType[2]\n\t\t];\n\t\tconst direction = [\n\t\t\tprocessed.dirRadius[0],\n\t\t\tprocessed.dirRadius[1],\n\t\t\tprocessed.dirRadius[2]\n\t\t];\n\t\tconst mapSize = options.mapSize ?? 2048;\n\t\tconst casterBounds = casters.map((c) => this.worldBounds(c));\n\t\tconst frustum = fitShadowFrustum({\n\t\t\ttype: kind,\n\t\t\tposition,\n\t\t\tdirection,\n\t\t\tangle: light.angle\n\t\t}, casterBounds, receivers, mapSize);\n\t\tif (!frustum) return null;\n\t\tif (!this.shadowTexture || this.shadowTexture.width !== mapSize) {\n\t\t\tthis.shadowTexture?.destroy();\n\t\t\tthis.shadowTexture = this.device.createTexture({\n\t\t\t\tlabel: \"ShadowMap\",\n\t\t\t\tsize: {\n\t\t\t\t\twidth: mapSize,\n\t\t\t\t\theight: mapSize\n\t\t\t\t},\n\t\t\t\tformat: SHADOW_DEPTH_FORMAT,\n\t\t\t\tusage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.TEXTURE_BINDING\n\t\t\t});\n\t\t}\n\t\tconst lightCam = new Float32Array(80);\n\t\tlightCam.set(frustum.viewProj, 32);\n\t\tlightCam.set(frustum.viewProj, 0);\n\t\tlightCam[5] = 1;\n\t\tlightCam.set(frustum.viewProj, 16);\n\t\tlightCam[64] = position[0];\n\t\tlightCam[65] = position[1];\n\t\tlightCam[66] = position[2];\n\t\tlightCam[68] = direction[0];\n\t\tlightCam[69] = direction[1];\n\t\tlightCam[70] = direction[2];\n\t\tlightCam[76] = mapSize;\n\t\tlightCam[77] = mapSize;\n\t\tconst lightCamBindGroup = this.createCameraBindGroup(this.cameraPool.getBuffer(this.device, lightCam));\n\t\tconst pass = encoder.beginRenderPass({\n\t\t\tlabel: \"ShadowMapPass\",\n\t\t\tcolorAttachments: [],\n\t\t\tdepthStencilAttachment: {\n\t\t\t\tview: this.shadowTexture.createView(),\n\t\t\t\tdepthClearValue: 1,\n\t\t\t\tdepthLoadOp: \"clear\",\n\t\t\t\tdepthStoreOp: \"store\"\n\t\t\t}\n\t\t});\n\t\tconst sampler = this.samplerCache.getSampler(this.device);\n\t\tfor (const c of casters) if (c.kind === \"mesh\") {\n\t\t\tconst m = this.meshModelMatrix(c.opts);\n\t\t\tthis.mesh3dPipeline.drawShadow(pass, lightCamBindGroup, c.buffers ?? this.getOrCreateMeshBuffers(c.mesh), {\n\t\t\t\tmodelMatrix: m,\n\t\t\t\tnormalMatrix: c.opts.normalMatrix ?? Light3D.computeNormalMatrix(m),\n\t\t\t\tisSkinned: c.opts.isSkinned,\n\t\t\t\tskinningMatrices: c.opts.skinningMatrices\n\t\t\t});\n\t\t} else {\n\t\t\tconst m = this.quadModelMatrix(c.opts);\n\t\t\tthis.quad3dPipeline.drawShadow(pass, lightCamBindGroup, c.texture, sampler, {\n\t\t\t\tmodelMatrix: m,\n\t\t\t\tnormalMatrix: m,\n\t\t\t\twidth: c.opts.width,\n\t\t\t\theight: c.opts.height,\n\t\t\t\ttextureExtent: c.opts.textureExtent,\n\t\t\t\topacity: c.opts.opacity,\n\t\t\t\tcolorTint: c.opts.colorTint\n\t\t\t});\n\t\t}\n\t\tpass.end();\n\t\treturn {\n\t\t\tmatrix: frustum.viewProj,\n\t\t\tlightIndex,\n\t\t\tmapSize,\n\t\t\tsoftness: options.softness ?? light.shadowSoftness ?? 2.5,\n\t\t\tbias: kind === \"directional\" ? 6e-4 : 8e-5,\n\t\t\tnormalOffset: frustum.texelWorldSize * 1.5,\n\t\t\tdarkness: options.darkness ?? light.shadowDarkness ?? 1\n\t\t};\n\t}\n\tbeginPass(encoder, colorTargetView, surfaceWidth, surfaceHeight, camera, loadOp = \"clear\", clearColor = {\n\t\tr: 0,\n\t\tg: 0,\n\t\tb: 0,\n\t\ta: 0\n\t}, linearDepthTargetView, lights, world, writeHdr = false) {\n\t\tconst depthTex = this.getOrCreateDepthTexture(surfaceWidth, surfaceHeight);\n\t\tconst cameraBuffer = this.packCameraUniforms(camera, surfaceWidth, surfaceHeight);\n\t\tconst cameraBindGroup = this.createCameraBindGroup(cameraBuffer);\n\t\tconst lightsBuffer = this.getOrCreateLightsBuffer(lights, world);\n\t\tconst lightsBindGroup = this.createLightsBindGroup(lightsBuffer, Boolean(world?.shadow));\n\t\tconst msaa = this.sampleCount > 1;\n\t\tif (msaa && loadOp === \"load\") throw new Error(\"Renderer3D.beginPass: loadOp 'load' needs a Renderer3D built with sampleCount 1\");\n\t\tconst attach = (view, msaaTex, clearValue, attachmentLoadOp) => msaaTex ? {\n\t\t\tview: msaaTex.createView(),\n\t\t\tresolveTarget: view,\n\t\t\tloadOp: \"clear\",\n\t\t\tstoreOp: \"discard\",\n\t\t\tclearValue\n\t\t} : {\n\t\t\tview,\n\t\t\tloadOp: attachmentLoadOp,\n\t\t\tstoreOp: \"store\",\n\t\t\tclearValue\n\t\t};\n\t\tif (msaa) this.msaaColorTexture = this.getOrCreateMsaaTexture(this.msaaColorTexture, \"Renderer3DMsaaColor\", this.format, surfaceWidth, surfaceHeight);\n\t\tconst colorAttachments = [attach(colorTargetView, msaa ? this.msaaColorTexture : null, clearColor, loadOp)];\n\t\tif (linearDepthTargetView) {\n\t\t\tif (msaa) this.msaaLinearDepthTexture = this.getOrCreateMsaaTexture(this.msaaLinearDepthTexture, \"Renderer3DMsaaLinearDepth\", \"rgba16float\", surfaceWidth, surfaceHeight);\n\t\t\tcolorAttachments.push(attach(linearDepthTargetView, msaa ? this.msaaLinearDepthTexture : null, {\n\t\t\t\tr: camera.far,\n\t\t\t\tg: 0,\n\t\t\t\tb: 0,\n\t\t\t\ta: 1\n\t\t\t}, \"clear\"));\n\t\t}\n\t\tthis.passWritesHdr = writeHdr;\n\t\tif (writeHdr) {\n\t\t\tthis.hdrTexture = this.getOrCreateHdrTexture(surfaceWidth, surfaceHeight);\n\t\t\tif (msaa) this.msaaHdrTexture = this.getOrCreateMsaaTexture(this.msaaHdrTexture, \"Renderer3DMsaaHdr\", \"rgba16float\", surfaceWidth, surfaceHeight);\n\t\t\tcolorAttachments.push(attach(this.hdrTexture.createView(), msaa ? this.msaaHdrTexture : null, {\n\t\t\t\tr: 0,\n\t\t\t\tg: 0,\n\t\t\t\tb: 0,\n\t\t\t\ta: 0\n\t\t\t}, \"clear\"));\n\t\t}\n\t\treturn {\n\t\t\tpass: encoder.beginRenderPass({\n\t\t\t\tcolorAttachments,\n\t\t\t\tdepthStencilAttachment: {\n\t\t\t\t\tview: depthTex.createView(),\n\t\t\t\t\tdepthClearValue: 1,\n\t\t\t\t\tdepthLoadOp: \"clear\",\n\t\t\t\t\tdepthStoreOp: msaa ? \"discard\" : \"store\"\n\t\t\t\t}\n\t\t\t}),\n\t\t\tcameraBindGroup,\n\t\t\tcameraBuffer,\n\t\t\tlightsBindGroup\n\t\t};\n\t}\n\t/**\n\t* A layer's unit quad ([-0.5, 0.5] square) in world space:\n\t* T(pos) * Rz * Ry * Rx * S(w * sx, h * sy, sz) * T(0.5 - ax, 0.5 - ay, 0).\n\t*/\n\tquadModelMatrix(opts) {\n\t\tif (opts.modelMatrix) return opts.modelMatrix;\n\t\tconst { position, width, height, rotation = [\n\t\t\t0,\n\t\t\t0,\n\t\t\t0\n\t\t], scale = [\n\t\t\t1,\n\t\t\t1,\n\t\t\t1\n\t\t], anchor = [.5, .5] } = opts;\n\t\tlet m = Matrix4Math.identity();\n\t\tm = Matrix4Math.multiply(m, Matrix4Math.translate(position[0], position[1], position[2]));\n\t\tconst rxRad = rotation[0] * Math.PI / 180;\n\t\tconst ryRad = rotation[1] * Math.PI / 180;\n\t\tconst rzRad = rotation[2] * Math.PI / 180;\n\t\tif (rzRad !== 0) m = Matrix4Math.multiply(m, Matrix4Math.rotateZ(rzRad));\n\t\tif (ryRad !== 0) m = Matrix4Math.multiply(m, Matrix4Math.rotateY(ryRad));\n\t\tif (rxRad !== 0) m = Matrix4Math.multiply(m, Matrix4Math.rotateX(rxRad));\n\t\tconst sx = width * scale[0];\n\t\tconst sy = height * scale[1];\n\t\tconst sz = scale[2];\n\t\tm = Matrix4Math.multiply(m, Matrix4Math.scale(sx, sy, sz));\n\t\tconst pivotX = .5 - anchor[0];\n\t\tconst pivotY = .5 - anchor[1];\n\t\tif (pivotX !== 0 || pivotY !== 0) m = Matrix4Math.multiply(m, Matrix4Math.translate(pivotX, pivotY, 0));\n\t\treturn m;\n\t}\n\t/**\n\t* Draw a text layer's captured Slug glyphs on the plane its texture quad\n\t* would cover. Glyph coverage is solved per screen pixel, so the text is\n\t* as sharp at a glancing angle or up close as it is flat on screen.\n\t* `stackBase` is how many passes already sit on this plane (a backdrop\n\t* quad): each batch draws just in front of the one before.\n\t*/\n\tdrawSlugText(pass, cameraBindGroup, lightsBindGroup, batches, opts, stackBase = 0, useMrt = false) {\n\t\tconst { width, height } = opts;\n\t\tif (!(width > 0 && height > 0)) return;\n\t\tconst quad = this.quadModelMatrix(opts);\n\t\tconst normalMatrix = opts.normalMatrix ?? Light3D.computeNormalMatrix(quad);\n\t\tconst layerToWorld = Matrix4Math.multiply(quad, Matrix4Math.multiply(Matrix4Math.translate(-.5, -.5, 0), Matrix4Math.scale(1 / width, 1 / height, 1)));\n\t\tfor (let i = 0; i < batches.length; i++) {\n\t\t\tconst batch = batches[i];\n\t\t\tconst [a, b, c, d, e, f] = batch.transform;\n\t\t\tconst paragraphToLayer = [\n\t\t\t\ta,\n\t\t\t\tb,\n\t\t\t\t0,\n\t\t\t\t0,\n\t\t\t\tc,\n\t\t\t\td,\n\t\t\t\t0,\n\t\t\t\t0,\n\t\t\t\t0,\n\t\t\t\t0,\n\t\t\t\t1,\n\t\t\t\t0,\n\t\t\t\te,\n\t\t\t\tf,\n\t\t\t\t0,\n\t\t\t\t1\n\t\t\t];\n\t\t\tthis.slug3dPipeline.draw(pass, cameraBindGroup, lightsBindGroup, batch.font, batch.instances, batch.instanceCount, {\n\t\t\t\tmodelMatrix: Matrix4Math.multiply(layerToWorld, paragraphToLayer),\n\t\t\t\tnormalMatrix,\n\t\t\t\topacity: batch.opacity * (opts.opacity ?? 1),\n\t\t\t\tslant: batch.slant,\n\t\t\t\ttwoSided: opts.twoSided ?? true,\n\t\t\t\tdepthPull: TEXT_STACK_PULL * (stackBase + i + 1),\n\t\t\t\tmaterial: opts.material,\n\t\t\t\tshininess: opts.shininess ?? 32,\n\t\t\t\troughness: opts.roughness,\n\t\t\t\tspecularIntensity: opts.specularIntensity ?? .5,\n\t\t\t\tambientIntensity: opts.ambientIntensity ?? 1,\n\t\t\t\tmetallic: opts.metallic,\n\t\t\t\temissive: opts.emissive,\n\t\t\t\temissiveIntensity: opts.emissiveIntensity,\n\t\t\t\tmatte: opts.matte\n\t\t\t}, useMrt, this.passWritesHdr);\n\t\t}\n\t}\n\tdrawTextureQuad(pass, cameraBindGroup, lightsBindGroup, texture, opts, useMrt = false) {\n\t\tconst { width, height, opacity = 1, colorTint = [\n\t\t\t1,\n\t\t\t1,\n\t\t\t1,\n\t\t\t1\n\t\t], borderColor, borderWidth = 0, borderRadius = 0, twoSided = true, material = \"lit\", shininess = 32, roughness, specularIntensity = .5, ambientIntensity = 1, metallic } = opts;\n\t\tconst m = this.quadModelMatrix(opts);\n\t\tconst normalMatrix = opts.normalMatrix ?? Light3D.computeNormalMatrix(m);\n\t\tconst sampler = this.samplerCache.getSampler(this.device);\n\t\tlet parsedBorderColor;\n\t\tif (borderColor) if (Array.isArray(borderColor)) parsedBorderColor = borderColor;\n\t\telse {\n\t\t\tconst c = parseColor(borderColor);\n\t\t\tparsedBorderColor = [\n\t\t\t\tc.r,\n\t\t\t\tc.g,\n\t\t\t\tc.b,\n\t\t\t\tc.a\n\t\t\t];\n\t\t}\n\t\tthis.quad3dPipeline.draw(pass, cameraBindGroup, lightsBindGroup, texture, sampler, {\n\t\t\tmodelMatrix: m,\n\t\t\tnormalMatrix,\n\t\t\tcolorTint,\n\t\t\tborderColor: parsedBorderColor,\n\t\t\tborderWidth,\n\t\t\topacity,\n\t\t\tborderRadius,\n\t\t\ttwoSided,\n\t\t\twidth,\n\t\t\theight,\n\t\t\ttextureExtent: opts.textureExtent,\n\t\t\tmaterial,\n\t\t\tshininess,\n\t\t\troughness,\n\t\t\tspecularIntensity,\n\t\t\tambientIntensity,\n\t\t\tmetallic,\n\t\t\temissive: opts.emissive,\n\t\t\temissiveIntensity: opts.emissiveIntensity,\n\t\t\tmatte: opts.matte\n\t\t}, useMrt, this.passWritesHdr);\n\t}\n\t/** T(pos) * Rz * Ry * Rx * S, or the draw's precomputed model matrix. */\n\tmeshModelMatrix(opts) {\n\t\tif (opts.modelMatrix) return opts.modelMatrix;\n\t\tconst { position = [\n\t\t\t0,\n\t\t\t0,\n\t\t\t0\n\t\t], rotation = [\n\t\t\t0,\n\t\t\t0,\n\t\t\t0\n\t\t], scale = [\n\t\t\t1,\n\t\t\t1,\n\t\t\t1\n\t\t] } = opts;\n\t\tlet m = Matrix4Math.translate(position[0], position[1], position[2]);\n\t\tconst rxRad = rotation[0] * Math.PI / 180;\n\t\tconst ryRad = rotation[1] * Math.PI / 180;\n\t\tconst rzRad = rotation[2] * Math.PI / 180;\n\t\tif (rzRad !== 0) m = Matrix4Math.multiply(m, Matrix4Math.rotateZ(rzRad));\n\t\tif (ryRad !== 0) m = Matrix4Math.multiply(m, Matrix4Math.rotateY(ryRad));\n\t\tif (rxRad !== 0) m = Matrix4Math.multiply(m, Matrix4Math.rotateX(rxRad));\n\t\treturn Matrix4Math.multiply(m, Matrix4Math.scale(scale[0], scale[1], scale[2]));\n\t}\n\tgetOrCreateMeshBuffers(mesh) {\n\t\tlet cached = this.meshBuffersCache.get(mesh);\n\t\tif (cached) return cached;\n\t\tconst numVerts = mesh.positions.length / 3;\n\t\tconst vertexData = new Float32Array(numVerts * 16);\n\t\tfor (let i = 0; i < numVerts; i++) {\n\t\t\tconst offset = i * 16;\n\t\t\tvertexData[offset] = mesh.positions[i * 3] ?? 0;\n\t\t\tvertexData[offset + 1] = mesh.positions[i * 3 + 1] ?? 0;\n\t\t\tvertexData[offset + 2] = mesh.positions[i * 3 + 2] ?? 0;\n\t\t\tvertexData[offset + 3] = mesh.uvs[i * 2] ?? 0;\n\t\t\tvertexData[offset + 4] = mesh.uvs[i * 2 + 1] ?? 0;\n\t\t\tvertexData[offset + 5] = mesh.normals[i * 3] ?? 0;\n\t\t\tvertexData[offset + 6] = mesh.normals[i * 3 + 1] ?? 0;\n\t\t\tvertexData[offset + 7] = mesh.normals[i * 3 + 2] ?? 1;\n\t\t\tif (mesh.jointIndices) {\n\t\t\t\tvertexData[offset + 8] = mesh.jointIndices[i * 4] ?? 0;\n\t\t\t\tvertexData[offset + 9] = mesh.jointIndices[i * 4 + 1] ?? 0;\n\t\t\t\tvertexData[offset + 10] = mesh.jointIndices[i * 4 + 2] ?? 0;\n\t\t\t\tvertexData[offset + 11] = mesh.jointIndices[i * 4 + 3] ?? 0;\n\t\t\t} else {\n\t\t\t\tvertexData[offset + 8] = 0;\n\t\t\t\tvertexData[offset + 9] = 0;\n\t\t\t\tvertexData[offset + 10] = 0;\n\t\t\t\tvertexData[offset + 11] = 0;\n\t\t\t}\n\t\t\tif (mesh.jointWeights) {\n\t\t\t\tvertexData[offset + 12] = mesh.jointWeights[i * 4] ?? 0;\n\t\t\t\tvertexData[offset + 13] = mesh.jointWeights[i * 4 + 1] ?? 0;\n\t\t\t\tvertexData[offset + 14] = mesh.jointWeights[i * 4 + 2] ?? 0;\n\t\t\t\tvertexData[offset + 15] = mesh.jointWeights[i * 4 + 3] ?? 0;\n\t\t\t} else {\n\t\t\t\tvertexData[offset + 12] = 0;\n\t\t\t\tvertexData[offset + 13] = 0;\n\t\t\t\tvertexData[offset + 14] = 0;\n\t\t\t\tvertexData[offset + 15] = 0;\n\t\t\t}\n\t\t}\n\t\tconst alignedVertexByteLength = Math.ceil(vertexData.byteLength / 4) * 4;\n\t\tconst vertexBuffer = this.device.createBuffer({\n\t\t\tsize: Math.max(4, alignedVertexByteLength),\n\t\t\tusage: GPUBufferUsage.VERTEX | GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST | GPUBufferUsage.COPY_SRC,\n\t\t\tmappedAtCreation: true\n\t\t});\n\t\tnew Float32Array(vertexBuffer.getMappedRange()).set(vertexData);\n\t\tvertexBuffer.unmap();\n\t\tconst is32Bit = mesh.indices instanceof Uint32Array;\n\t\tconst alignedIndexByteLength = Math.ceil(mesh.indices.byteLength / 4) * 4;\n\t\tconst indexBuffer = this.device.createBuffer({\n\t\t\tsize: Math.max(4, alignedIndexByteLength),\n\t\t\tusage: GPUBufferUsage.INDEX | GPUBufferUsage.COPY_DST,\n\t\t\tmappedAtCreation: true\n\t\t});\n\t\tif (is32Bit) new Uint32Array(indexBuffer.getMappedRange()).set(mesh.indices);\n\t\telse new Uint16Array(indexBuffer.getMappedRange()).set(mesh.indices);\n\t\tindexBuffer.unmap();\n\t\tlet colorBuffer;\n\t\tif (mesh.colors && mesh.colors.length >= numVerts * 4) {\n\t\t\tcolorBuffer = this.device.createBuffer({\n\t\t\t\tlabel: \"Mesh3DVertexColors\",\n\t\t\t\tsize: Math.max(16, numVerts * 16),\n\t\t\t\tusage: GPUBufferUsage.VERTEX,\n\t\t\t\tmappedAtCreation: true\n\t\t\t});\n\t\t\tnew Float32Array(colorBuffer.getMappedRange()).set(mesh.colors.subarray(0, numVerts * 4));\n\t\t\tcolorBuffer.unmap();\n\t\t}\n\t\tcached = {\n\t\t\tvertexBuffer,\n\t\t\tindexBuffer,\n\t\t\tindexCount: mesh.indices.length,\n\t\t\tindexFormat: is32Bit ? \"uint32\" : \"uint16\",\n\t\t\tcolorBuffer\n\t\t};\n\t\tthis.meshBuffersCache.set(mesh, cached);\n\t\treturn cached;\n\t}\n\tdeformMesh(encoder, mesh, audioDeform) {\n\t\tconst meshBuffers = this.getOrCreateMeshBuffers(mesh);\n\t\tconst numVerts = mesh.positions.length / 3;\n\t\treturn {\n\t\t\tvertexBuffer: this.audioMeshDeformPipeline.execute(encoder, meshBuffers.vertexBuffer, {\n\t\t\t\tconfig: audioDeform.config,\n\t\t\t\taudioLatentBuffer: audioDeform.latentBuffer,\n\t\t\t\tvertexCount: numVerts,\n\t\t\t\ttimeMs: audioDeform.timeMs,\n\t\t\t\tsampleRate: audioDeform.sampleRate\n\t\t\t}),\n\t\t\tindexBuffer: meshBuffers.indexBuffer,\n\t\t\tindexCount: meshBuffers.indexCount,\n\t\t\tindexFormat: meshBuffers.indexFormat,\n\t\t\tcolorBuffer: meshBuffers.colorBuffer\n\t\t};\n\t}\n\tdrawMesh3D(pass, cameraBindGroup, lightsBindGroup, meshOrBuffers, texture, opts = {}, useMrt = false) {\n\t\tconst meshBuffers = \"vertexBuffer\" in meshOrBuffers ? meshOrBuffers : this.getOrCreateMeshBuffers(meshOrBuffers);\n\t\tconst { opacity = 1, colorTint = [\n\t\t\t1,\n\t\t\t1,\n\t\t\t1,\n\t\t\t1\n\t\t], twoSided = true, wireframe = false, isSkinned = false, skinningMatrices, material = \"lit\", shadeColor, alphaCutoff, textureWrap = \"clamp\", textureFilter = \"linear\", shininess = 32, roughness, specularIntensity = .5, ambientIntensity = 1, metallic } = opts;\n\t\tconst m = this.meshModelMatrix(opts);\n\t\tconst normalMatrix = opts.normalMatrix ?? Light3D.computeNormalMatrix(m);\n\t\tconst address = ADDRESS_MODES[textureWrap];\n\t\tconst sampler = this.samplerCache.getSampler(this.device, {\n\t\t\taddressModeU: address,\n\t\t\taddressModeV: address,\n\t\t\tmagFilter: textureFilter,\n\t\t\t...textureFilter === \"nearest\" && { maxAnisotropy: 1 }\n\t\t});\n\t\tconst glassy = material === \"glass\" || material === \"acrylic\" || material === \"frosted\";\n\t\tconst glass = glassy ? {\n\t\t\tior: opts.ior ?? (material === \"acrylic\" ? 1.49 : 1.5),\n\t\t\tdispersion: opts.dispersion ?? (material === \"glass\" ? .04 : .015),\n\t\t\tthickness: opts.thickness ?? 80,\n\t\t\tfrost: material === \"frosted\" ? roughness ?? .5 : 0\n\t\t} : void 0;\n\t\tthis.mesh3dPipeline.draw(pass, cameraBindGroup, lightsBindGroup, meshBuffers, texture, sampler, {\n\t\t\tglass,\n\t\t\tbackdrop: opts.backdrop,\n\t\t\tmodelMatrix: m,\n\t\t\tnormalMatrix,\n\t\t\tcolorTint,\n\t\t\topacity,\n\t\t\ttwoSided,\n\t\t\twireframe,\n\t\t\tisSkinned,\n\t\t\tskinningMatrices,\n\t\t\tmaterial: material === \"unlit\" || material === \"toon\" ? material : \"lit\",\n\t\t\tshadeColor,\n\t\t\talphaCutoff,\n\t\t\tshininess,\n\t\t\troughness: glassy ? Math.min(roughness ?? .05, .3) : roughness,\n\t\t\tspecularIntensity,\n\t\t\tambientIntensity,\n\t\t\tmetallic,\n\t\t\temissive: opts.emissive,\n\t\t\temissiveIntensity: opts.emissiveIntensity,\n\t\t\tmatte: opts.matte,\n\t\t\tmaps: opts.maps\n\t\t}, useMrt, this.passWritesHdr);\n\t}\n\tloadModel(srcOrData, format = \"auto\", options = {}) {\n\t\tif (typeof srcOrData !== \"string\") return loadModel3D(srcOrData, format, options);\n\t\tconst key = `${format}|${JSON.stringify(options)}|${srcOrData}`;\n\t\tlet model = this.modelCache.get(key);\n\t\tif (!model) {\n\t\t\tmodel = loadModel3D(srcOrData, format, options);\n\t\t\tthis.modelCache.set(key, model);\n\t\t}\n\t\treturn model;\n\t}\n\t/**\n\t* The material's diffuse texture on the GPU, decoded once with a full mip\n\t* chain (a character's 2K maps are drawn a few hundred pixels tall).\n\t*/\n\tmaterialTexture(material) {\n\t\tlet pending = this.materialTextures.get(material);\n\t\tif (!pending) {\n\t\t\tpending = this.uploadMaterialTexture(material);\n\t\t\tthis.materialTextures.set(material, pending);\n\t\t}\n\t\treturn pending;\n\t}\n\t/**\n\t* The material's normal, metallic-roughness, occlusion and emissive maps\n\t* on the GPU (each decoded once); absent maps are left out.\n\t*/\n\tmaterialMaps(material) {\n\t\tlet pending = this.materialMapCache.get(material);\n\t\tif (!pending) {\n\t\t\tpending = (async () => {\n\t\t\t\tconst label = material.name;\n\t\t\t\tconst [normal, metallicRoughness, occlusion, emissive] = await Promise.all([\n\t\t\t\t\tthis.uploadImage(material.normalTextureBuffer, `${label}:normal`),\n\t\t\t\t\tthis.uploadImage(material.metallicRoughnessTextureBuffer, `${label}:metallicRoughness`),\n\t\t\t\t\tthis.uploadImage(material.occlusionTextureBuffer, `${label}:occlusion`),\n\t\t\t\t\tthis.uploadImage(material.emissiveTextureBuffer, `${label}:emissive`)\n\t\t\t\t]);\n\t\t\t\treturn {\n\t\t\t\t\t...normal && {\n\t\t\t\t\t\tnormal,\n\t\t\t\t\t\tnormalScale: material.normalScale ?? 1\n\t\t\t\t\t},\n\t\t\t\t\t...metallicRoughness && { metallicRoughness },\n\t\t\t\t\t...occlusion && {\n\t\t\t\t\t\tocclusion,\n\t\t\t\t\t\tocclusionStrength: material.occlusionStrength ?? 1\n\t\t\t\t\t},\n\t\t\t\t\t...emissive && { emissive }\n\t\t\t\t};\n\t\t\t})();\n\t\t\tthis.materialMapCache.set(material, pending);\n\t\t}\n\t\treturn pending;\n\t}\n\tuploadMaterialTexture(material) {\n\t\treturn this.uploadImage(material.diffuseTextureBuffer, `Material:${material.name}`);\n\t}\n\t/** Decodes an encoded image into a texture with a full mip chain. */\n\tasync uploadImage(encoded, label) {\n\t\tif (!encoded) return void 0;\n\t\tconst sharp = (await import(\n\t\t\t/* webpackIgnore: true */\n\t\t\t\"sharp\"\n)).default;\n\t\tconst source = Buffer.from(encoded instanceof Uint8Array ? encoded : new Uint8Array(encoded));\n\t\tlet width;\n\t\tlet height;\n\t\ttry {\n\t\t\t({width, height} = await sharp(source).metadata());\n\t\t} catch (err) {\n\t\t\tconsole.warn(`[Renderer3D] Could not decode texture \"${label}\"; drawing without it:`, err instanceof Error ? err.message : err);\n\t\t\treturn;\n\t\t}\n\t\tif (!width || !height) return void 0;\n\t\tconst mipLevelCount = Math.floor(Math.log2(Math.max(width, height))) + 1;\n\t\tconst texture = this.device.createTexture({\n\t\t\tlabel,\n\t\t\tsize: {\n\t\t\t\twidth,\n\t\t\t\theight\n\t\t\t},\n\t\t\tmipLevelCount,\n\t\t\tformat: \"rgba8unorm\",\n\t\t\tusage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST\n\t\t});\n\t\tfor (let level = 0; level < mipLevelCount; level++) {\n\t\t\tconst w = Math.max(1, width >> level);\n\t\t\tconst h = Math.max(1, height >> level);\n\t\t\tconst data = await sharp(source).ensureAlpha().resize(w, h, { fit: \"fill\" }).raw().toBuffer();\n\t\t\tthis.device.queue.writeTexture({\n\t\t\t\ttexture,\n\t\t\t\tmipLevel: level\n\t\t\t}, data, {\n\t\t\t\tbytesPerRow: w * 4,\n\t\t\t\trowsPerImage: h\n\t\t\t}, {\n\t\t\t\twidth: w,\n\t\t\t\theight: h\n\t\t\t});\n\t\t}\n\t\treturn texture;\n\t}\n\t/** Writes `source` with bloom into `dest` (see `BloomOptions`). */\n\tapplyBloom(encoder, source, dest, options = {}, hdrSource) {\n\t\tthis.bloomPipeline ??= new BloomPipeline(this.device);\n\t\tthis.bloomPipeline.apply(encoder, source, dest, options, hdrSource ?? void 0);\n\t}\n\tapplyDepthOfField(encoder, sourceColorTex, depthTex, destView, cameraBuffer) {\n\t\tconst sampler = this.samplerCache.getSampler(this.device);\n\t\tconst bindGroup = this.device.createBindGroup({\n\t\t\tlayout: this.dofBindGroupLayout,\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: { buffer: cameraBuffer }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: sampler\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: sourceColorTex.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 3,\n\t\t\t\t\tresource: depthTex.createView()\n\t\t\t\t}\n\t\t\t]\n\t\t});\n\t\tconst pass = encoder.beginRenderPass({ colorAttachments: [{\n\t\t\tview: destView,\n\t\t\tloadOp: \"clear\",\n\t\t\tstoreOp: \"store\",\n\t\t\tclearValue: {\n\t\t\t\tr: 0,\n\t\t\t\tg: 0,\n\t\t\t\tb: 0,\n\t\t\t\ta: 0\n\t\t\t}\n\t\t}] });\n\t\tpass.setPipeline(this.dofPipeline);\n\t\tpass.setBindGroup(0, bindGroup);\n\t\tpass.draw(3);\n\t\tpass.end();\n\t}\n\tdestroy() {\n\t\tthis.bloomPipeline?.destroy();\n\t\tthis.depthTexture?.destroy();\n\t\tthis.shadowTexture?.destroy();\n\t\tthis.placeholderShadowTexture?.destroy();\n\t\tthis.linearDepthTexture?.destroy();\n\t\tthis.msaaColorTexture?.destroy();\n\t\tthis.msaaLinearDepthTexture?.destroy();\n\t\tthis.msaaHdrTexture?.destroy();\n\t\tthis.hdrTexture?.destroy();\n\t\tthis.quad3dPipeline.destroy();\n\t\tthis.slug3dPipeline.destroy();\n\t\tthis.mesh3dPipeline.destroy();\n\t\tthis.cameraPool.destroy();\n\t\tthis.lightsPool.destroy();\n\t\tthis.cameraUniformBindGroupCache.destroy();\n\t}\n};\nfunction loadModel3D(srcOrData, format = \"auto\", options = {}) {\n\tif (format === \"gltf\" || format === \"glb\") return loadGLTF(srcOrData, options);\n\tif (format === \"stl\") return loadSTL(srcOrData, options);\n\tif (format === \"ply\") return loadPLY(srcOrData, options);\n\tif (format === \"vox\") return loadVOX(srcOrData, options);\n\tif (format === \"3ds\") return load3DS(srcOrData, options);\n\tif (format === \"off\") return loadOFF(srcOrData, options);\n\tif (format === \"fbx\") return loadFBX(srcOrData, options);\n\tif (format === \"obj\") return loadOBJ(srcOrData, void 0, options);\n\tconst isBinary = typeof srcOrData !== \"string\";\n\tconst srcStr = typeof srcOrData === \"string\" ? srcOrData.trim() : \"\";\n\tconst lowerSrc = srcStr.toLowerCase();\n\tif (lowerSrc.endsWith(\".glb\") || lowerSrc.endsWith(\".gltf\")) return loadGLTF(srcOrData, options);\n\tif (lowerSrc.endsWith(\".stl\")) return loadSTL(srcOrData, options);\n\tif (lowerSrc.endsWith(\".ply\")) return loadPLY(srcOrData, options);\n\tif (lowerSrc.endsWith(\".vox\")) return loadVOX(srcOrData, options);\n\tif (lowerSrc.endsWith(\".3ds\")) return load3DS(srcOrData, options);\n\tif (lowerSrc.endsWith(\".off\")) return loadOFF(srcOrData, options);\n\tif (lowerSrc.endsWith(\".fbx\")) return loadFBX(srcOrData, options);\n\tif (lowerSrc.endsWith(\".obj\")) return loadOBJ(srcOrData, void 0, options);\n\tif (isBinary) {\n\t\tconst bytes = srcOrData instanceof Uint8Array ? srcOrData : new Uint8Array(srcOrData);\n\t\tif (GltfLoader.isGlb(bytes)) return loadGLB(bytes, options);\n\t\tif (FbxLoader.isBinary(bytes)) return loadFBX(bytes, options);\n\t\tif (VoxLoader.isVox(bytes)) return loadVOX(bytes, options);\n\t\tif (ThreeDSLoader.is3DS(bytes)) return load3DS(bytes, options);\n\t\tif (bytes.length >= 3 && bytes[0] === 112 && bytes[1] === 108 && bytes[2] === 121) return loadPLY(bytes, options);\n\t\tif (StlLoader.isBinary(bytes)) return loadSTL(bytes, options);\n\t\treturn loadOBJ(bytes, void 0, options);\n\t}\n\tif (srcStr.startsWith(\"{\") && (srcStr.includes(\"\\\"asset\\\"\") || srcStr.includes(\"\\\"meshes\\\"\"))) return loadGLTF(srcStr, options);\n\tif (srcStr.startsWith(\"ply\") || srcStr.startsWith(\"PLY\")) return loadPLY(srcStr, options);\n\tif (srcStr.startsWith(\"OFF\") || srcStr.startsWith(\"NOFF\") || srcStr.startsWith(\"COFF\")) return loadOFF(srcStr, options);\n\tif (srcStr.includes(\"FBXHeaderExtension\") || srcStr.includes(\"Kaydara FBX\")) return loadFBX(srcStr, options);\n\tif (srcStr.startsWith(\"solid\") && srcStr.includes(\"facet\")) return loadSTL(srcStr, options);\n\treturn loadOBJ(srcOrData, void 0, options);\n}\n\n//#endregion\n//#region src/renderer3d/shadow-pipeline.ts\n/**\n* @file packages/webgpu-renderers/src/renderer3d/shadow-pipeline.ts\n* Directional and Point Light Shadow Map Generator with Percentage Closer Filtering (PCF).\n*/\n/**\n* @deprecated A texture holder only; nothing renders into it. Shadows are\n* drawn by `Renderer3D.renderShadowMap` (a `castShadow` directional or spot\n* light in the scene).\n*/\nvar ShadowPipeline = class {\n\tshadowDepthTexture;\n\tshadowDepthView;\n\tshadowComparisonSampler;\n\tlightViewProjMatrix;\n\tconstructor(device, resolution = 2048) {\n\t\tthis.lightViewProjMatrix = Matrix4Math.identity();\n\t\tthis.shadowDepthTexture = device.createTexture({\n\t\t\tlabel: \"shadow-depth-map\",\n\t\t\tsize: [\n\t\t\t\tresolution,\n\t\t\t\tresolution,\n\t\t\t\t1\n\t\t\t],\n\t\t\tformat: \"depth32float\",\n\t\t\tusage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.TEXTURE_BINDING\n\t\t});\n\t\tthis.shadowDepthView = this.shadowDepthTexture.createView({ label: \"shadow-depth-view\" });\n\t\tthis.shadowComparisonSampler = device.createSampler({\n\t\t\tlabel: \"shadow-pcf-sampler\",\n\t\t\tcompare: \"less-equal\",\n\t\t\tmagFilter: \"linear\",\n\t\t\tminFilter: \"linear\"\n\t\t});\n\t}\n\tcomputeDirectionalLightMatrix(lightPos, targetPos, orthoSize = 2e3, near = 10, far = 4e3) {\n\t\tconst viewMatrix = Matrix4Math.lookAt(lightPos, targetPos, [\n\t\t\t0,\n\t\t\t1,\n\t\t\t0\n\t\t]);\n\t\tconst half = orthoSize * .5;\n\t\tconst projMatrix = Matrix4Math.orthographic(-half, half, -half, half, near, far);\n\t\tthis.lightViewProjMatrix = Matrix4Math.multiply(projMatrix, viewMatrix);\n\t\treturn this.lightViewProjMatrix;\n\t}\n\tdestroy() {\n\t\tthis.shadowDepthTexture.destroy();\n\t}\n};\n\n//#endregion\n//#region src/shaders/ssao.ts\n/**\n* @file packages/webgpu-renderers/src/shaders/ssao.ts\n* WGSL Shader Module for Screen-Space Ambient Occlusion (SSAO) & Bilateral Cross-Blur.\n*/\nconst ssaoWgsl = `\nstruct SSAOUniforms {\n projMatrix: mat4x4<f32>,\n invProjMatrix: mat4x4<f32>,\n viewMatrix: mat4x4<f32>,\n radius: f32,\n bias: f32,\n intensity: f32,\n sampleCount: u32,\n viewportWidth: f32,\n viewportHeight: f32,\n};\n\n@group(0) @binding(0) var depthTexture: texture_depth_2d;\n@group(0) @binding(1) var normalTexture: texture_2d<f32>;\n@group(0) @binding(2) var noiseTexture: texture_2d<f32>;\n@group(0) @binding(3) var colorSampler: sampler;\n@group(0) @binding(4) var<storage, read> kernelSamples: array<vec4<f32>>;\n@group(0) @binding(5) var<uniform> u: SSAOUniforms;\n\n@vertex\nfn vs_main(@builtin(vertex_index) vertexIndex: u32) -> @builtin(position) vec4<f32> {\n var pos = array<vec2<f32>, 4>(\n vec2<f32>(-1.0, -1.0),\n vec2<f32>( 1.0, -1.0),\n vec2<f32>(-1.0, 1.0),\n vec2<f32>( 1.0, 1.0)\n );\n return vec4<f32>(pos[vertexIndex], 0.0, 1.0);\n}\n\nfn reconstructViewPos(uv: vec2<f32>, depth: f32) -> vec3<f32> {\n let clipPos = vec4<f32>(uv.x * 2.0 - 1.0, (1.0 - uv.y) * 2.0 - 1.0, depth, 1.0);\n let viewPos = u.invProjMatrix * clipPos;\n return viewPos.xyz / viewPos.w;\n}\n\n@fragment\nfn fs_ssao(@builtin(position) pos: vec4<f32>) -> @location(0) f32 {\n let uv = pos.xy / vec2<f32>(u.viewportWidth, u.viewportHeight);\n let depth = textureSampleLevel(depthTexture, colorSampler, uv, 0);\n \n if (depth >= 1.0) {\n return 1.0;\n }\n \n let rawNormal = textureSampleLevel(normalTexture, colorSampler, uv, 0.0).xyz;\n let normal = normalize(rawNormal * 2.0 - 1.0);\n let viewPos = reconstructViewPos(uv, depth);\n \n let noiseUV = pos.xy / 4.0;\n let randomVec = normalize(textureSampleLevel(noiseTexture, colorSampler, noiseUV, 0.0).xyz * 2.0 - 1.0);\n \n let tangent = normalize(randomVec - normal * dot(randomVec, normal));\n let bitangent = cross(normal, tangent);\n let TBN = mat3x3<f32>(tangent, bitangent, normal);\n \n var occlusion = 0.0;\n let count = min(u.sampleCount, arrayLength(&kernelSamples));\n \n for (var i = 0u; i < count; i = i + 1u) {\n let sampleDir = TBN * kernelSamples[i].xyz;\n let samplePos = viewPos + sampleDir * u.radius;\n \n let offset = u.projMatrix * vec4<f32>(samplePos, 1.0);\n var sampleUV = vec2<f32>(\n (offset.x / offset.w) * 0.5 + 0.5,\n (1.0 - (offset.y / offset.w)) * 0.5\n );\n \n if (sampleUV.x < 0.0 || sampleUV.x > 1.0 || sampleUV.y < 0.0 || sampleUV.y > 1.0) {\n continue;\n }\n \n let sampleDepthVal = textureSampleLevel(depthTexture, colorSampler, sampleUV, 0);\n let sampleViewZ = reconstructViewPos(sampleUV, sampleDepthVal).z;\n \n let rangeCheck = smoothstep(0.0, 1.0, u.radius / max(abs(viewPos.z - sampleViewZ), 0.001));\n if (sampleViewZ >= samplePos.z + u.bias) {\n occlusion += rangeCheck;\n }\n }\n \n let ao = 1.0 - (occlusion / f32(max(count, 1u))) * u.intensity;\n return clamp(ao, 0.0, 1.0);\n}\n`;\nconst ssaoBlurWgsl = `\nstruct BlurUniforms {\n viewportWidth: f32,\n viewportHeight: f32,\n blurRadius: i32,\n depthThreshold: f32,\n};\n\n@group(0) @binding(0) var ssaoTexture: texture_2d<f32>;\n@group(0) @binding(1) var depthTexture: texture_depth_2d;\n@group(0) @binding(2) var colorSampler: sampler;\n@group(0) @binding(3) var<uniform> u: BlurUniforms;\n\n@vertex\nfn vs_main(@builtin(vertex_index) vertexIndex: u32) -> @builtin(position) vec4<f32> {\n var pos = array<vec2<f32>, 4>(\n vec2<f32>(-1.0, -1.0),\n vec2<f32>( 1.0, -1.0),\n vec2<f32>(-1.0, 1.0),\n vec2<f32>( 1.0, 1.0)\n );\n return vec4<f32>(pos[vertexIndex], 0.0, 1.0);\n}\n\n@fragment\nfn fs_blur(@builtin(position) pos: vec4<f32>) -> @location(0) f32 {\n let uv = pos.xy / vec2<f32>(u.viewportWidth, u.viewportHeight);\n let centerDepth = textureSampleLevel(depthTexture, colorSampler, uv, 0);\n let centerAO = textureSampleLevel(ssaoTexture, colorSampler, uv, 0.0).r;\n \n if (centerDepth >= 1.0) {\n return 1.0;\n }\n \n var result = 0.0;\n var totalWeight = 0.0;\n let texelSize = 1.0 / vec2<f32>(u.viewportWidth, u.viewportHeight);\n let r = u.blurRadius;\n \n for (var x = -r; x <= r; x = x + 1) {\n for (var y = -r; y <= r; y = y + 1) {\n let offsetUV = uv + vec2<f32>(f32(x), f32(y)) * texelSize;\n let sampleDepth = textureSampleLevel(depthTexture, colorSampler, offsetUV, 0);\n let depthDelta = abs(sampleDepth - centerDepth);\n \n let spatialW = exp(-f32(x * x + y * y) / f32(2 * r * r));\n let depthW = clamp(1.0 - depthDelta / max(u.depthThreshold, 0.0001), 0.0, 1.0);\n let w = spatialW * depthW;\n \n let sampleAO = textureSampleLevel(ssaoTexture, colorSampler, offsetUV, 0.0).r;\n result += sampleAO * w;\n totalWeight += w;\n }\n }\n \n if (totalWeight <= 0.0) {\n return centerAO;\n }\n return result / totalWeight;\n}\n`;\n\n//#endregion\n//#region src/renderer3d/ssao-pipeline.ts\n/**\n* @file packages/webgpu-renderers/src/renderer3d/ssao-pipeline.ts\n* WebGPU render pipeline for Screen-Space Ambient Occlusion (SSAO) and Bilateral Cross-Blur.\n*/\nvar SSAOPipeline = class {\n\tdevice;\n\tssaoPipeline;\n\tblurPipeline;\n\tssaoBindGroupLayout;\n\tblurBindGroupLayout;\n\tssaoUniformBuffer;\n\tblurUniformBuffer;\n\tkernelBuffer;\n\tnoiseTexture;\n\tsampler;\n\tconstructor(device) {\n\t\tthis.device = device;\n\t\tthis.noiseTexture = device.createTexture({\n\t\t\tlabel: \"ssao-noise-tex\",\n\t\t\tsize: [\n\t\t\t\t4,\n\t\t\t\t4,\n\t\t\t\t1\n\t\t\t],\n\t\t\tformat: \"rgba8unorm\",\n\t\t\tusage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST\n\t\t});\n\t\tconst noiseData = new Uint8Array(64);\n\t\tfor (let i = 0; i < 16; i++) {\n\t\t\tnoiseData[i * 4 + 0] = Math.floor(Math.random() * 255);\n\t\t\tnoiseData[i * 4 + 1] = Math.floor(Math.random() * 255);\n\t\t\tnoiseData[i * 4 + 2] = 128;\n\t\t\tnoiseData[i * 4 + 3] = 255;\n\t\t}\n\t\tdevice.queue.writeTexture({ texture: this.noiseTexture }, noiseData, { bytesPerRow: 16 }, [\n\t\t\t4,\n\t\t\t4,\n\t\t\t1\n\t\t]);\n\t\tconst kernelFloats = new Float32Array(128);\n\t\tfor (let i = 0; i < 32; i++) {\n\t\t\tconst u1 = Math.random();\n\t\t\tconst u2 = Math.random();\n\t\t\tconst theta = Math.acos(Math.sqrt(1 - u1));\n\t\t\tconst phi = 2 * Math.PI * u2;\n\t\t\tlet scale = (i + 1) / 32;\n\t\t\tscale = .1 + .9 * (scale * scale);\n\t\t\tkernelFloats[i * 4 + 0] = Math.sin(theta) * Math.cos(phi) * scale;\n\t\t\tkernelFloats[i * 4 + 1] = Math.sin(theta) * Math.sin(phi) * scale;\n\t\t\tkernelFloats[i * 4 + 2] = Math.cos(theta) * scale;\n\t\t\tkernelFloats[i * 4 + 3] = 0;\n\t\t}\n\t\tthis.kernelBuffer = device.createBuffer({\n\t\t\tlabel: \"ssao-kernel-buffer\",\n\t\t\tsize: kernelFloats.byteLength,\n\t\t\tusage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST\n\t\t});\n\t\tdevice.queue.writeBuffer(this.kernelBuffer, 0, kernelFloats);\n\t\tconst ssaoShader = device.createShaderModule({\n\t\t\tlabel: \"ssao-shader\",\n\t\t\tcode: ssaoWgsl\n\t\t});\n\t\tthis.ssaoBindGroupLayout = device.createBindGroupLayout({\n\t\t\tlabel: \"ssao-bgl\",\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\t\ttexture: { sampleType: \"depth\" }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\t\ttexture: { sampleType: \"float\" }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\t\ttexture: { sampleType: \"float\" }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 3,\n\t\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\t\tsampler: { type: \"filtering\" }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 4,\n\t\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\t\tbuffer: { type: \"read-only-storage\" }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 5,\n\t\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\t\tbuffer: { type: \"uniform\" }\n\t\t\t\t}\n\t\t\t]\n\t\t});\n\t\tthis.ssaoPipeline = device.createRenderPipeline({\n\t\t\tlabel: \"ssao-eval-pipeline\",\n\t\t\tlayout: device.createPipelineLayout({ bindGroupLayouts: [this.ssaoBindGroupLayout] }),\n\t\t\tvertex: {\n\t\t\t\tmodule: ssaoShader,\n\t\t\t\tentryPoint: \"vs_main\"\n\t\t\t},\n\t\t\tfragment: {\n\t\t\t\tmodule: ssaoShader,\n\t\t\t\tentryPoint: \"fs_ssao\",\n\t\t\t\ttargets: [{ format: \"r8unorm\" }]\n\t\t\t},\n\t\t\tprimitive: { topology: \"triangle-strip\" }\n\t\t});\n\t\tthis.ssaoUniformBuffer = device.createBuffer({\n\t\t\tlabel: \"ssao-uniforms\",\n\t\t\tsize: 256,\n\t\t\tusage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST\n\t\t});\n\t\tconst blurShader = device.createShaderModule({\n\t\t\tlabel: \"ssao-blur-shader\",\n\t\t\tcode: ssaoBlurWgsl\n\t\t});\n\t\tthis.blurBindGroupLayout = device.createBindGroupLayout({\n\t\t\tlabel: \"ssao-blur-bgl\",\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\t\ttexture: { sampleType: \"float\" }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\t\ttexture: { sampleType: \"depth\" }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\t\tsampler: { type: \"filtering\" }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 3,\n\t\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\t\tbuffer: { type: \"uniform\" }\n\t\t\t\t}\n\t\t\t]\n\t\t});\n\t\tthis.blurPipeline = device.createRenderPipeline({\n\t\t\tlabel: \"ssao-blur-pipeline\",\n\t\t\tlayout: device.createPipelineLayout({ bindGroupLayouts: [this.blurBindGroupLayout] }),\n\t\t\tvertex: {\n\t\t\t\tmodule: blurShader,\n\t\t\t\tentryPoint: \"vs_main\"\n\t\t\t},\n\t\t\tfragment: {\n\t\t\t\tmodule: blurShader,\n\t\t\t\tentryPoint: \"fs_blur\",\n\t\t\t\ttargets: [{ format: \"r8unorm\" }]\n\t\t\t},\n\t\t\tprimitive: { topology: \"triangle-strip\" }\n\t\t});\n\t\tthis.blurUniformBuffer = device.createBuffer({\n\t\t\tlabel: \"ssao-blur-uniforms\",\n\t\t\tsize: 32,\n\t\t\tusage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST\n\t\t});\n\t\tthis.sampler = device.createSampler({\n\t\t\tlabel: \"ssao-sampler\",\n\t\t\tmagFilter: \"linear\",\n\t\t\tminFilter: \"linear\",\n\t\t\taddressModeU: \"repeat\",\n\t\t\taddressModeV: \"repeat\"\n\t\t});\n\t}\n\trender(commandEncoder, depthView, normalView, rawAOView, finalAOView, options) {\n\t\tconst invProj = options.invProjMatrix ?? Matrix4Math.invert(options.projMatrix) ?? Matrix4Math.identity();\n\t\tconst uBuf = new Float32Array(64);\n\t\tuBuf.set(options.projMatrix, 0);\n\t\tuBuf.set(invProj, 16);\n\t\tuBuf.set(options.viewMatrix, 32);\n\t\tuBuf[48] = options.radius ?? 45;\n\t\tuBuf[49] = options.bias ?? .025;\n\t\tuBuf[50] = options.intensity ?? 1.5;\n\t\tnew Uint32Array(uBuf.buffer)[51] = options.kernelSamples ?? 16;\n\t\tuBuf[52] = options.width;\n\t\tuBuf[53] = options.height;\n\t\tthis.device.queue.writeBuffer(this.ssaoUniformBuffer, 0, uBuf);\n\t\tconst ssaoBG = this.device.createBindGroup({\n\t\t\tlabel: \"ssao-eval-bg\",\n\t\t\tlayout: this.ssaoBindGroupLayout,\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: depthView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: normalView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: this.noiseTexture.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 3,\n\t\t\t\t\tresource: this.sampler\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 4,\n\t\t\t\t\tresource: { buffer: this.kernelBuffer }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 5,\n\t\t\t\t\tresource: { buffer: this.ssaoUniformBuffer }\n\t\t\t\t}\n\t\t\t]\n\t\t});\n\t\tconst pass1 = commandEncoder.beginRenderPass({\n\t\t\tlabel: \"ssao-eval-pass\",\n\t\t\tcolorAttachments: [{\n\t\t\t\tview: rawAOView,\n\t\t\t\tloadOp: \"clear\",\n\t\t\t\tstoreOp: \"store\",\n\t\t\t\tclearValue: {\n\t\t\t\t\tr: 1,\n\t\t\t\t\tg: 1,\n\t\t\t\t\tb: 1,\n\t\t\t\t\ta: 1\n\t\t\t\t}\n\t\t\t}]\n\t\t});\n\t\tpass1.setPipeline(this.ssaoPipeline);\n\t\tpass1.setBindGroup(0, ssaoBG);\n\t\tpass1.draw(4);\n\t\tpass1.end();\n\t\tconst bBuf = /* @__PURE__ */ new ArrayBuffer(32);\n\t\tconst bf32 = new Float32Array(bBuf);\n\t\tconst bi32 = new Int32Array(bBuf);\n\t\tbf32[0] = options.width;\n\t\tbf32[1] = options.height;\n\t\tbi32[2] = options.blurRadius ?? 4;\n\t\tbf32[3] = options.depthThreshold ?? .05;\n\t\tthis.device.queue.writeBuffer(this.blurUniformBuffer, 0, bBuf);\n\t\tconst blurBG = this.device.createBindGroup({\n\t\t\tlabel: \"ssao-blur-bg\",\n\t\t\tlayout: this.blurBindGroupLayout,\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: rawAOView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: depthView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: this.sampler\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 3,\n\t\t\t\t\tresource: { buffer: this.blurUniformBuffer }\n\t\t\t\t}\n\t\t\t]\n\t\t});\n\t\tconst pass2 = commandEncoder.beginRenderPass({\n\t\t\tlabel: \"ssao-blur-pass\",\n\t\t\tcolorAttachments: [{\n\t\t\t\tview: finalAOView,\n\t\t\t\tloadOp: \"clear\",\n\t\t\t\tstoreOp: \"store\",\n\t\t\t\tclearValue: {\n\t\t\t\t\tr: 1,\n\t\t\t\t\tg: 1,\n\t\t\t\t\tb: 1,\n\t\t\t\t\ta: 1\n\t\t\t\t}\n\t\t\t}]\n\t\t});\n\t\tpass2.setPipeline(this.blurPipeline);\n\t\tpass2.setBindGroup(0, blurBG);\n\t\tpass2.draw(4);\n\t\tpass2.end();\n\t}\n\tdestroy() {\n\t\tthis.ssaoUniformBuffer.destroy();\n\t\tthis.blurUniformBuffer.destroy();\n\t\tthis.noiseTexture.destroy();\n\t}\n};\n\n//#endregion\n//#region src/shaders/color-matrix.ts\nconst colorMatrixWgsl = `\nstruct ColorMatrixUniforms {\n\trow0 : vec4<f32>,\n\trow1 : vec4<f32>,\n\trow2 : vec4<f32>,\n\trow3 : vec4<f32>,\n\ttrans : vec4<f32>,\n};\n\n@group(0) @binding(0) var<uniform> u : ColorMatrixUniforms;\n@group(1) @binding(0) var tex : texture_2d<f32>;\n@group(1) @binding(1) var samp : sampler;\n\nstruct VSOut {\n\t@builtin(position) pos : vec4<f32>,\n\t@location(0) uv : vec2<f32>,\n};\n\n@vertex fn vs(@builtin(vertex_index) vi: u32) -> VSOut {\n\tvar pos = array<vec2<f32>, 4>(\n\t\tvec2<f32>(-1.0, 1.0),\n\t\tvec2<f32>(1.0, 1.0),\n\t\tvec2<f32>(-1.0, -1.0),\n\t\tvec2<f32>(1.0, -1.0)\n\t);\n\tvar uv = array<vec2<f32>, 4>(\n\t\tvec2<f32>(0.0, 0.0),\n\t\tvec2<f32>(1.0, 0.0),\n\t\tvec2<f32>(0.0, 1.0),\n\t\tvec2<f32>(1.0, 1.0)\n\t);\n\treturn VSOut(vec4<f32>(pos[vi], 0.0, 1.0), uv[vi]);\n}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet c = textureSample(tex, samp, in.uv);\n\tvar rgba = vec4<f32>(c.rgb, c.a);\n\tif (c.a > 0.0) {\n\t\trgba = vec4<f32>(c.rgb / c.a, c.a);\n\t}\n\n\tlet r = dot(u.row0, rgba) + u.trans.x;\n\tlet g = dot(u.row1, rgba) + u.trans.y;\n\tlet b = dot(u.row2, rgba) + u.trans.z;\n\tlet a = dot(u.row3, rgba) + u.trans.w;\n\n\tlet outAlpha = clamp(a, 0.0, 1.0);\n\tlet outRgb = clamp(vec3<f32>(r, g, b), vec3<f32>(0.0), vec3<f32>(1.0)) * outAlpha;\n\n\treturn vec4<f32>(outRgb, outAlpha);\n}\n`;\n\n//#endregion\n//#region src/shaders/lut-viewer.ts\nconst lutViewerWgsl = `\nstruct Uniforms {\n\trotation: vec2f,\n\tzoom: f32,\n\taspect: f32,\n}\n\n@group(0) @binding(0) var<uniform> uniforms: Uniforms;\n\nstruct VertexInput {\n\t@location(0) pos: vec3f,\n\t@location(1) color: vec3f,\n}\n\nstruct VertexOutput {\n\t@builtin(position) clip_position: vec4f,\n\t@location(0) color: vec3f,\n\t@location(1) uv: vec2f,\n}\n\nfn rotateY(pos: vec3f, angle: f32) -> vec3f {\n\tlet s = sin(angle);\n\tlet c = cos(angle);\n\treturn vec3f(pos.x * c - pos.z * s, pos.y, pos.x * s + pos.z * c);\n}\n\nfn rotateX(pos: vec3f, angle: f32) -> vec3f {\n\tlet s = sin(angle);\n\tlet c = cos(angle);\n\treturn vec3f(pos.x, pos.y * c - pos.z * s, pos.y * s + pos.z * c);\n}\n\n@vertex\nfn vs_main(\n\tinput: VertexInput,\n\t@builtin(vertex_index) vertex_index: u32,\n) -> VertexOutput {\n\tvar out: VertexOutput;\n\n\tvar quad_pos = array<vec2f, 6>(\n\t\tvec2f(-0.5, -0.5),\n\t\tvec2f( 0.5, -0.5),\n\t\tvec2f(-0.5, 0.5),\n\t\tvec2f(-0.5, 0.5),\n\t\tvec2f( 0.5, -0.5),\n\t\tvec2f( 0.5, 0.5)\n\t);\n\tlet offset = quad_pos[vertex_index];\n\n\tvar rotated = rotateY(input.pos, uniforms.rotation.x);\n\trotated = rotateX(rotated, uniforms.rotation.y);\n\n\tlet camera_pos = vec3f(0.0, 0.0, uniforms.zoom);\n\tlet view_pos = rotated - camera_pos;\n\n\tlet point_size = 0.02;\n\tlet billboard_pos = view_pos + vec3f(offset * point_size, 0.0);\n\n\tlet f = 2.414;\n\tlet near = 0.1;\n\tlet far = 10.0;\n\n\tout.clip_position = vec4f(\n\t\t(billboard_pos.x * f) / uniforms.aspect,\n\t\tbillboard_pos.y * f,\n\t\tbillboard_pos.z * (far / (near - far)) + (far * near / (near - far)),\n\t\t-billboard_pos.z\n\t);\n\tout.color = input.color;\n\tout.uv = offset;\n\treturn out;\n}\n\n@fragment\nfn fs_main(input: VertexOutput) -> @location(0) vec4f {\n\tlet dist = dot(input.uv, input.uv);\n\tif (dist > 0.25) {\n\t\tdiscard;\n\t}\n\tlet alpha = smoothstep(0.25, 0.22, dist);\n\treturn vec4f(input.color, alpha);\n}\n\nvar<private> cube_vertices: array<vec3f, 24> = array<vec3f, 24>(\n\tvec3f(-0.5, -0.5, -0.5), vec3f( 0.5, -0.5, -0.5),\n\tvec3f( 0.5, -0.5, -0.5), vec3f( 0.5, 0.5, -0.5),\n\tvec3f( 0.5, 0.5, -0.5), vec3f(-0.5, 0.5, -0.5),\n\tvec3f(-0.5, 0.5, -0.5), vec3f(-0.5, -0.5, -0.5),\n\n\tvec3f(-0.5, -0.5, 0.5), vec3f( 0.5, -0.5, 0.5),\n\tvec3f( 0.5, -0.5, 0.5), vec3f( 0.5, 0.5, 0.5),\n\tvec3f( 0.5, 0.5, 0.5), vec3f(-0.5, 0.5, 0.5),\n\tvec3f(-0.5, 0.5, 0.5), vec3f(-0.5, -0.5, 0.5),\n\n\tvec3f(-0.5, -0.5, -0.5), vec3f(-0.5, -0.5, 0.5),\n\tvec3f( 0.5, -0.5, -0.5), vec3f( 0.5, -0.5, 0.5),\n\tvec3f( 0.5, 0.5, -0.5), vec3f( 0.5, 0.5, 0.5),\n\tvec3f(-0.5, 0.5, -0.5), vec3f(-0.5, 0.5, 0.5)\n);\n\n@vertex\nfn vs_wireframe(\n\t@builtin(vertex_index) vertex_index: u32,\n) -> @builtin(position) vec4f {\n\tlet pos = cube_vertices[vertex_index];\n\tvar rotated = rotateY(pos, uniforms.rotation.x);\n\trotated = rotateX(rotated, uniforms.rotation.y);\n\tlet view_pos = rotated - vec3f(0.0, 0.0, uniforms.zoom);\n\n\tlet f = 2.414;\n\tlet near = 0.1;\n\tlet far = 10.0;\n\n\treturn vec4f(\n\t\t(view_pos.x * f) / uniforms.aspect,\n\t\tview_pos.y * f,\n\t\tview_pos.z * (far / (near - far)) + (far * near / (near - far)),\n\t\t-view_pos.z\n\t);\n}\n\n@fragment\nfn fs_wireframe() -> @location(0) vec4f {\n\treturn vec4f(1.0, 1.0, 1.0, 0.25);\n}\n`;\n\n//#endregion\n//#region src/signals/video-resolver.ts\nconst GLOBAL_WEBGPU_REGISTRY_KEY = Symbol.for(\"gatewai.webgpuRegistry\");\nconst GLOBAL_ANALYSIS_STORE_KEY = Symbol.for(\"gatewai.videoAnalysisStore\");\nasync function resolveVideoSignalValue(_device, ctx, encoder, sd, frame, fps, drawChild) {\n\tif (!sd || sd.type !== \"generator\" || !sd.nodeType) return 0;\n\tconst g$1 = globalThis;\n\tconst webgpuRegistry = g$1[GLOBAL_WEBGPU_REGISTRY_KEY];\n\tif (!webgpuRegistry) return 0;\n\tconst renderer = webgpuRegistry.get(sd.nodeType);\n\tif (!renderer) return 0;\n\tconst key = `${sd.nodeId}-${frame}`;\n\tconst analysisStore = g$1[GLOBAL_ANALYSIS_STORE_KEY];\n\tif (!analysisStore || !analysisStore.has(key)) {\n\t\tconst virtualMedia = {\n\t\t\ttype: \"layer\",\n\t\t\toperation: {\n\t\t\t\tid: sd.nodeId,\n\t\t\t\top: sd.nodeType,\n\t\t\t\tsmoothing: sd.smoothing,\n\t\t\t\tgain: sd.gain,\n\t\t\t\toffset: sd.offset,\n\t\t\t\tinputs: {}\n\t\t\t},\n\t\t\tchildren: sd.input ? [sd.input] : []\n\t\t};\n\t\tawait renderer({\n\t\t\tctx,\n\t\t\tencoder,\n\t\t\tpass: { end: () => {} },\n\t\t\ttargetView: null,\n\t\t\ttargetTexture: null,\n\t\t\ttargetWidth: 256,\n\t\t\ttargetHeight: 256,\n\t\t\tprops: {\n\t\t\t\trenderId: sd.nodeId,\n\t\t\t\tvirtualMedia,\n\t\t\t\tframe,\n\t\t\t\tfps,\n\t\t\t\tcontainerWidth: 256,\n\t\t\t\tcontainerHeight: 256\n\t\t\t},\n\t\t\tdrawChild\n\t\t});\n\t}\n\tif (!analysisStore) return 0;\n\tconst cached = analysisStore.get(key);\n\tif (!cached) return 0;\n\treturn (cached[sd.channel] ?? 0) * sd.gain + sd.offset;\n}\n\n//#endregion\n//#region src/surface-provider.ts\nvar BrowserSurfaceProvider = class {\n\tcolorFormat;\n\tcontext;\n\tdevice;\n\tcanvas;\n\trenderTarget;\n\tstagingBuffer = null;\n\tstagingBufferSize = 0;\n\tconstructor(device, canvas) {\n\t\tthis.device = device;\n\t\tthis.canvas = canvas;\n\t\tthis.colorFormat = typeof navigator !== \"undefined\" && \"gpu\" in navigator && navigator.gpu && typeof navigator.gpu.getPreferredCanvasFormat === \"function\" ? navigator.gpu.getPreferredCanvasFormat() : \"rgba8unorm\";\n\t\tthis.context = canvas.getContext(\"webgpu\");\n\t\tthis.context.configure({\n\t\t\tdevice,\n\t\t\tformat: this.colorFormat,\n\t\t\tusage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.COPY_SRC | GPUTextureUsage.COPY_DST,\n\t\t\talphaMode: \"premultiplied\"\n\t\t});\n\t\tthis.checkRenderTarget();\n\t}\n\tcheckRenderTarget() {\n\t\tif (!this.renderTarget || this.renderTarget.width !== this.canvas.width || this.renderTarget.height !== this.canvas.height) {\n\t\t\tif (this.renderTarget) {\n\t\t\t\tconst toDestroy = this.renderTarget;\n\t\t\t\tthis.device.queue.onSubmittedWorkDone().then(() => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\ttoDestroy.destroy();\n\t\t\t\t\t} catch (_) {}\n\t\t\t\t}).catch(() => {});\n\t\t\t}\n\t\t\tthis.renderTarget = this.device.createTexture({\n\t\t\t\tsize: [this.canvas.width, this.canvas.height],\n\t\t\t\tformat: this.colorFormat,\n\t\t\t\tusage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.COPY_SRC | GPUTextureUsage.COPY_DST\n\t\t\t});\n\t\t\tif (this.stagingBuffer) {\n\t\t\t\ttry {\n\t\t\t\t\tthis.stagingBuffer.destroy();\n\t\t\t\t} catch (_) {}\n\t\t\t\tthis.stagingBuffer = null;\n\t\t\t\tthis.stagingBufferSize = 0;\n\t\t\t}\n\t\t}\n\t}\n\tget width() {\n\t\treturn this.canvas.width;\n\t}\n\tget height() {\n\t\treturn this.canvas.height;\n\t}\n\tgetCurrentTextureView() {\n\t\tthis.checkRenderTarget();\n\t\treturn this.renderTarget.createView();\n\t}\n\tgetCurrentTexture() {\n\t\tthis.checkRenderTarget();\n\t\treturn this.renderTarget;\n\t}\n\tpresent() {\n\t\tthis.checkRenderTarget();\n\t\ttry {\n\t\t\tconst canvasTexture = this.context.getCurrentTexture();\n\t\t\tconst encoder = this.device.createCommandEncoder();\n\t\t\tencoder.copyTextureToTexture({ texture: this.renderTarget }, { texture: canvasTexture }, [this.width, this.height]);\n\t\t\tthis.device.queue.submit([encoder.finish()]);\n\t\t} catch (err) {\n\t\t\tconsole.warn(\"Failed to copy render target to canvas context on present:\", err);\n\t\t}\n\t}\n\tasync readPixels() {\n\t\tthis.checkRenderTarget();\n\t\tconst unpaddedBytesPerRow = this.width * 4;\n\t\tconst align = 256;\n\t\tconst bytesPerRow = Math.ceil(unpaddedBytesPerRow / align) * align;\n\t\tconst bufferSize = bytesPerRow * this.height;\n\t\tif (!this.stagingBuffer || this.stagingBufferSize !== bufferSize) {\n\t\t\tif (this.stagingBuffer) try {\n\t\t\t\tthis.stagingBuffer.destroy();\n\t\t\t} catch (_) {}\n\t\t\tthis.stagingBuffer = this.device.createBuffer({\n\t\t\t\tsize: bufferSize,\n\t\t\t\tusage: GPUBufferUsage.MAP_READ | GPUBufferUsage.COPY_DST\n\t\t\t});\n\t\t\tthis.stagingBufferSize = bufferSize;\n\t\t}\n\t\tconst encoder = this.device.createCommandEncoder();\n\t\tencoder.copyTextureToBuffer({ texture: this.renderTarget }, {\n\t\t\tbuffer: this.stagingBuffer,\n\t\t\tbytesPerRow\n\t\t}, [this.width, this.height]);\n\t\tthis.device.queue.submit([encoder.finish()]);\n\t\tawait this.stagingBuffer.mapAsync(GPUMapMode.READ);\n\t\tconst mappedRange = this.stagingBuffer.getMappedRange();\n\t\tconst data = new Uint8ClampedArray(unpaddedBytesPerRow * this.height);\n\t\tconst sourceView = new Uint8Array(mappedRange);\n\t\tif (bytesPerRow === unpaddedBytesPerRow) data.set(sourceView);\n\t\telse for (let y = 0; y < this.height; y++) {\n\t\t\tconst srcOffset = y * bytesPerRow;\n\t\t\tconst dstOffset = y * unpaddedBytesPerRow;\n\t\t\tdata.set(sourceView.subarray(srcOffset, srcOffset + unpaddedBytesPerRow), dstOffset);\n\t\t}\n\t\tthis.stagingBuffer.unmap();\n\t\tif (this.colorFormat === \"bgra8unorm\") for (let i = 0; i < data.length; i += 4) {\n\t\t\tconst r = data[i];\n\t\t\tdata[i] = data[i + 2];\n\t\t\tdata[i + 2] = r;\n\t\t}\n\t\treturn data;\n\t}\n\tdestroy() {\n\t\tif (this.renderTarget) try {\n\t\t\tthis.renderTarget.destroy();\n\t\t} catch (_) {}\n\t\tthis.stagingBuffer = null;\n\t\tthis.stagingBufferSize = 0;\n\t}\n};\nvar NodeSurfaceProvider = class {\n\twidth;\n\theight;\n\tcolorFormat = \"rgba8unorm\";\n\tdevice;\n\trenderTarget;\n\tstagingBuffer;\n\tbytesPerRow;\n\tunpaddedBytesPerRow;\n\tconstructor(device, width, height) {\n\t\tthis.device = device;\n\t\tthis.width = width;\n\t\tthis.height = height;\n\t\tthis.renderTarget = device.createTexture({\n\t\t\tsize: [width, height],\n\t\t\tformat: this.colorFormat,\n\t\t\tusage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.COPY_SRC\n\t\t});\n\t\tthis.unpaddedBytesPerRow = width * 4;\n\t\tconst align = 256;\n\t\tthis.bytesPerRow = Math.ceil(this.unpaddedBytesPerRow / align) * align;\n\t\tconst bufferSize = this.bytesPerRow * height;\n\t\tthis.stagingBuffer = device.createBuffer({\n\t\t\tsize: bufferSize,\n\t\t\tusage: GPUBufferUsage.MAP_READ | GPUBufferUsage.COPY_DST\n\t\t});\n\t}\n\tgetCurrentTextureView() {\n\t\treturn this.renderTarget.createView();\n\t}\n\tgetCurrentTexture() {\n\t\treturn this.renderTarget;\n\t}\n\tpresent() {}\n\tasync readPixels() {\n\t\tconst encoder = this.device.createCommandEncoder();\n\t\tencoder.copyTextureToBuffer({ texture: this.renderTarget }, {\n\t\t\tbuffer: this.stagingBuffer,\n\t\t\tbytesPerRow: this.bytesPerRow\n\t\t}, [this.width, this.height]);\n\t\tthis.device.queue.submit([encoder.finish()]);\n\t\tawait this.device.queue.onSubmittedWorkDone();\n\t\tawait this.stagingBuffer.mapAsync(GPUMapMode.READ);\n\t\tconst mappedRange = this.stagingBuffer.getMappedRange();\n\t\tconst data = new Uint8ClampedArray(this.unpaddedBytesPerRow * this.height);\n\t\tconst sourceView = new Uint8Array(mappedRange);\n\t\tif (this.bytesPerRow === this.unpaddedBytesPerRow) data.set(sourceView);\n\t\telse for (let y = 0; y < this.height; y++) {\n\t\t\tconst srcOffset = y * this.bytesPerRow;\n\t\t\tconst dstOffset = y * this.unpaddedBytesPerRow;\n\t\t\tdata.set(sourceView.subarray(srcOffset, srcOffset + this.unpaddedBytesPerRow), dstOffset);\n\t\t}\n\t\tthis.stagingBuffer.unmap();\n\t\treturn data;\n\t}\n\tdestroy() {\n\t\tif (this.renderTarget) try {\n\t\t\tthis.renderTarget.destroy();\n\t\t} catch (_) {}\n\t\tthis.stagingBuffer = null;\n\t}\n};\n\n//#endregion\n//#region src/utils.ts\nif (typeof globalThis !== \"undefined\") globalThis.__GATEWAI_DELAYS__ = globalThis.__GATEWAI_DELAYS__ || /* @__PURE__ */ new Set();\nfunction withTempTexture(device, desc, fn) {\n\tconst tex = device.createTexture(desc);\n\ttry {\n\t\treturn fn(tex);\n\t} finally {\n\t\ttex.destroy();\n\t}\n}\n\n//#endregion\nexport { AETextAnimatorSchema, AUDIO_BIQUAD_FILTER_SHADER, AUDIO_FEATURE_EXTRACTION_SHADER, AUDIO_LATENT_BUFFER_SIZE, AUDIO_PACE_INTEGRAL_SHADER, AUDIO_SIGNAL_TO_TEXTURE_SHADER, AdvancedTextAnimatorBuilder, AdvancedTextAnimatorSchema, AnchorGroupingSchema, AnchorPresetSchema, AnimatableGlyphPropsSchema, AudioDecoder, AudioLatentEngine, AudioLatentTrackCache, AudioMeshDeformPipeline, AudioSignalComputePipeline, AudioSpectrumTypographySchema, BloomPipeline, BrowserSurfaceProvider, BufferPool, Camera3D, ChromaticGlitchConfigSchema, CubicBezierSegmentSchema, DynamicStrokePropertiesSchema, ENVIRONMENT_PRESETS, EffectPipeline, EnhancedTextNodeSchema, ExpressionSelectorSchema, ExtendedGlyphPropertiesSchema, FFT_SIZE, FbxLoader, GlassPipeline, GltfLoader, GlyphAnchorGroupingSchema, GlyphAnchorPointSchema, KineticMarqueeConfigSchema, LIGHT_UNIFORM_SIZE_BYTES, Light3D, LineSpacingDynamicsSchema, LongShadowConfigSchema, LottieInstance, LutStore, MAX_JOINTS, MAX_LIGHTS, Matrix4Math, Mesh3DPipeline, MotionBlurPipeline, NUM_BINS, NodeSurfaceProvider, ObjLoader, OffLoader, ParticleDissolveConfigSchema, Path3D, PlyLoader, Quad3DPipeline, Renderer2D, Renderer3D, SHADOW_DEPTH_FORMAT, SHADOW_DEPTH_STENCIL, SSAOPipeline, STATIC_AUDIO_SIGNAL_PREVIEW_SHADER, STATIC_SIGNAL_PREVIEW_SHADER, SURFACE_PARAMS_FLOATS, ScreenSpaceRelightPipeline, SelectorBasedOnSchema, SelectorModeSchema, SelectorShapeSchema, SelectorUnitsSchema, ShadowPipeline, ShapeFillPipeline, SignalRegistry, SkewPropertiesSchema, SlugFontCache, SlugGenerator, SlugGeometry, SlugLoader, SlugPipeline, Spatial3DPropertiesSchema, SpringPhysicsSchema, StlLoader, TextAnchorConfigSchema, TextAnimatorBuilder, TextAtlas, TextCursorConfigSchema, TextCursorStyleSchema, TextPathBuilder, TextPathOptionsSchema, TextPathSourceSchema, TextRangeSelectorSchema, TextScrambleConfigSchema, TextSelectorSchema, TextSignalSelectorSchema, TextWigglySelectorSchema, TextureCache, ThreeDSLoader, TypewriterAnimatorSchema, TypingCadenceSchema, VariableFontAxesSchema, Vec2Schema, Vector3Math, VideoDecoder, VolumetricFormationConfigSchema, VolumetricFormationModeSchema, VoxLoader, WebGPUAudioProcessor, aabbCorners, acquireDevice, applyGlyphAnimators, audioMeshDisplaceWgsl, buildArrowPath, buildCirclePath, buildEllipsePath, buildPathLUT, buildPolygonPath, buildRectPath, buildShapeSvgPath, buildStarPath, buildUniformBufferLayout, buildWGSLSignalFn, clearAllVideoCache, clearHeadlessFonts, clearVideoNodeState, colorMatrixWgsl, compositeWgsl, computeAnchorPivotOffset, computeAnimatorProgress, computeContourSignedArea, computeFFT2048, computeLineLeadingDisplacement, computeRangeSelectorWeight, createHeadlessDOMElement, createLightsLayout, dashPathSegments, describeGpu, deterministicWigglyNoise, distanceToCurveParameter, drawAudioSignalExtractorNode, drawCaptionNode, drawGifNode, drawImageNode, drawLottieNode, drawParagraphNode, drawSignalNode, drawSvgNode, drawVideoNode, ellipseToCubicBeziers, ensureDevice, evaluateAEAnimatorWeight, evaluateCubicBezier, evaluateCubicBezierDerivative, evaluateEasing, evaluateExpressionSelector, evaluateMarqueeOffset, evaluateSelectorCombination, evaluateSkewMatrix, evaluateSpringProgress, evaluateTypewriterState, evaluateVolumetricFormation, fbxEulerToQuat, fitShadowFrustum, fitSpansToText, fullCoverageView, generateArcLengthLUT, generateExtrudedTextGeometry, generatePathSegments, generatePrimitiveGeometry, generateWGSLFromConfig, getActiveCaptionCue, getDevice, getHeadlessFontData, getHeadlessFontPath, getPrimitiveGeometry, getRenderer2D, getScramblePool, getShuffledOrder, gifLoader, imageLoader, initHeadlessWebGPU, inputStore, installIntersectionObserverStub, isPointInsidePolygon, jointMatrices, load3DS, loadFBX, loadGLB, loadGLTF, loadModel3D, loadOBJ, loadOFF, loadPLY, loadSTL, loadVOX, lottieLoader, lutStore, lutViewerWgsl, matteLayoutEntry, measureMaxCaptionHeight, mediaDecoderCache, motionBlurWgsl, organizeGlyphPolygons, packMaterialParams, packSurfaceParams, parse3DS, parseColor, parseColorToRgb, parseFBX, parseGLB, parseGLTF, parseHexOrRgbColor, parseMTL, parseOBJ, parseOFF, parsePLY, parseSTL, parseSrt, parseStateFromFnBody, parseSvgPathToCubicBeziers, parseSvgPathToSegments, parseVOX, patchCanvasPrototypeForDOM, pathWgsl, pbrGlassWgsl, poseNodes, premultiplyColor, premultiplyPixels, probeVideoSize, registerHeadlessFont, resetDeviceInstance, resolveEnvironment, resolveTextSpans, resolveVideoSignalValue, sampleAudioSpectrumScale, sampleCubicBezier, sampleCurveGeometry, samplePathChainGeometry, sampleQuadraticBezier, sampleSvgArc, screenSpaceRelightWgsl, shaderStore, shapeFillWgsl, signalRegistry, slerp, solidWgsl, spansText, srtLoader, ssaoBlurWgsl, ssaoWgsl, svgArcToCubicBeziers, svgLoader, textureCache, transformAabb, triangulatePolygon, triangulateShape, trimPathSegments, trsMatrix, untangleContour, waveToCubicBeziers, withTempTexture };\n//# sourceMappingURL=index.mjs.map"],"x_google_ignoreList":[3],"mappings":"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AK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE;AAC1I,MAAI,MAAM,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE;AAC5I,MAAI,KAAK,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE;AAC5I,MAAI,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE;AAC3I,MAAI,KAAK,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE;AAC3I,MAAI,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE;AAC3I,MAAI,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE;AACxI,MAAI,KAAK,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE;AACzI,MAAI,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE;AACzI,MAAI,MAAM,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE;AAC1I,MAAI,KAAK,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE;AACvI,MAAI,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE;AACtI,MAAI,MAAM,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE;AACtI,MAAI,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE;EACrI,IAAI,MAAM,EAAE,KAAK,IAAI,KAAK,EAAE,KAAK,IAAI,KAAK,EAAE,KAAK,IAAI,KAAK,EAAE,KAAK,IAAI;AACrE,MAAI,KAAK,IAAI,IAAI,GAAG,MAAO,QAAO;AAClC,QAAM,IAAI;AACV,OAAK,IAAI,IAAI,GAAG,IAAI,IAAI,IAAK,KAAI,MAAM;AACvC,SAAO;;CAER,UAAU,GAAG;AACZ,SAAO;GACN,EAAE;GACF,EAAE;GACF,EAAE;GACF,EAAE;GACF,EAAE;GACF,EAAE;GACF,EAAE;GACF,EAAE;GACF,EAAE;GACF,EAAE;GACF,EAAE;GACF,EAAE;GACF,EAAE;GACF,EAAE;GACF,EAAE;GACF,EAAE;GACF;;CAEF,aAAa,GAAG,GAAG;EAClB,MAAM,IAAI,EAAE;EACZ,MAAM,IAAI,EAAE;EACZ,MAAM,IAAI,EAAE;EACZ,MAAM,IAAI,EAAE,KAAK,IAAI,EAAE,KAAK,IAAI,EAAE,KAAK,IAAI,EAAE;EAC7C,MAAM,IAAI,EAAE,KAAK,IAAI,EAAE,KAAK,IAAI,EAAE,KAAK,IAAI,EAAE;EAC7C,MAAM,IAAI,EAAE,KAAK,IAAI,EAAE,KAAK,IAAI,EAAE,MAAM,IAAI,EAAE;EAC9C,MAAM,IAAI,EAAE,KAAK,IAAI,EAAE,KAAK,IAAI,EAAE,MAAM,IAAI,EAAE;EAC9C,MAAM,OAAO,KAAK,IAAI,EAAE,GAAG,OAAO,IAAI,IAAI;AAC1C,SAAO;GACN,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ;;CAEF,iBAAiB,GAAG,OAAO,QAAQ;AAClC,SAAO;GACN,YAAY,aAAa,GAAG;IAC3B;IACA;IACA;IACA,CAAC;GACF,YAAY,aAAa,GAAG;IAC3B;IACA;IACA;IACA,CAAC;GACF,YAAY,aAAa,GAAG;IAC3B;IACA;IACA;IACA,CAAC;GACF,YAAY,aAAa,GAAG;IAC3B;IACA;IACA;IACA,CAAC;GACF;;CAEF,eAAe,GAAG;AACjB,SAAO,IAAI,aAAa,EAAE;;CAE3B;;;;;;;AAUD,SAAS,oBAAoB,GAAG,MAAM,UAAU,GAAG;CAClD,IAAI,QAAQ;CACZ,IAAI,YAAY;CAChB,IAAI,YAAY;CAChB,IAAI,SAAS;AACb,MAAK,IAAI,IAAI,GAAG,IAAI,SAAS,KAAK;EACjC,MAAM,KAAK,KAAK,IAAI,IAAI,YAAY,IAAI,KAAK,KAAK,OAAO,IAAI,IAAI;EACjE,MAAM,KAAK,KAAK,IAAI,IAAI,YAAY,QAAQ,KAAK,KAAK,OAAO,MAAM,IAAI,GAAG;AAC1E,YAAU,KAAK,KAAK,KAAK,MAAM;AAC/B,YAAU;AACV,eAAa;AACb,eAAa;;AAEd,QAAO,SAAS,IAAI,QAAQ,SAAS;;AAEtC,MAAM,WAAW;CAChB,oBAAoB,OAAO,QAAQ,aAAa,IAAI;EACnD,MAAM,SAAS,aAAa,KAAK,KAAK;EACtC,MAAM,WAAW,SAAS,IAAI,KAAK,IAAI,SAAS,EAAE;AAClD,SAAO;GACN,KAAK;IACJ,QAAQ;IACR,SAAS;IACT,CAAC;IACD;GACD,QAAQ;IACP,QAAQ;IACR,SAAS;IACT;IACA;GACD,IAAI;IACH;IACA;IACA;IACA;GACD,KAAK;GACL,QAAQ,KAAK,IAAI,MAAM,QAAQ,OAAO;GACtC,MAAM;GACN,KAAK;GACL,MAAM;GACN,eAAe;GACf,OAAO;GACP,eAAe;GACf;;CAEF,kBAAkB,QAAQ;AACzB,SAAO,YAAY,OAAO,OAAO,KAAK,OAAO,QAAQ,OAAO,GAAG;;CAEhE,wBAAwB,QAAQ;EAC/B,MAAM,SAAS,OAAO,MAAM,KAAK,KAAK;EACtC,MAAM,IAAI,YAAY,YAAY,QAAQ,OAAO,QAAQ,OAAO,MAAM,OAAO,IAAI;AACjF,MAAI,OAAO,SAAS,KAAK,OAAO,OAAO,GAAG;AACzC,KAAE,MAAM,OAAO;AACf,KAAE,MAAM,OAAO;;AAEhB,SAAO;;CAER,4BAA4B,QAAQ;EACnC,MAAM,IAAI,SAAS,kBAAkB,OAAO;EAC5C,MAAM,IAAI,SAAS,wBAAwB,OAAO;AAClD,SAAO,YAAY,SAAS,GAAG,EAAE;;CAElC,MAAM,KAAK,QAAQ,eAAe;EACjC,MAAM,UAAU,YAAY,UAAU,YAAY,SAAS,QAAQ,IAAI,CAAC;EACxE,MAAM,OAAO,YAAY,eAAe,SAAS,cAAc;AAC/D,SAAO;GACN,KAAK,YAAY,IAAI,KAAK,KAAK;GAC/B;GACA;;CAEF,cAAc,KAAK,QAAQ,IAAI,QAAQ,QAAQ;EAC9C,MAAM,UAAU,YAAY,UAAU,YAAY,SAAS,QAAQ,IAAI,CAAC;EACxE,MAAM,QAAQ,YAAY,UAAU,YAAY,MAAM,SAAS,GAAG,CAAC;EACnE,MAAM,SAAS,YAAY,MAAM,OAAO,QAAQ;EAChD,MAAM,QAAQ,YAAY,eAAe,OAAO,OAAO;EACvD,MAAM,QAAQ,YAAY,eAAe,QAAQ,OAAO;EACxD,MAAM,YAAY,YAAY,IAAI,OAAO,MAAM;AAC/C,SAAO;GACN,KAAK,YAAY,IAAI,KAAK,UAAU;GACpC,QAAQ,YAAY,IAAI,QAAQ,UAAU;GAC1C;;CAEF,MAAM,QAAQ,QAAQ,YAAY,cAAc;EAC/C,MAAM,QAAQ,aAAa,KAAK,KAAK;EACrC,MAAM,QAAQ,eAAe,KAAK,KAAK;EACvC,MAAM,QAAQ,KAAK,IAAI,MAAM;EAC7B,MAAM,QAAQ,KAAK,IAAI,MAAM;EAC7B,MAAM,QAAQ,KAAK,IAAI,MAAM;EAC7B,MAAM,QAAQ,KAAK,IAAI,MAAM;AAC7B,SAAO;GACN,OAAO,KAAK,SAAS,QAAQ;GAC7B,OAAO,KAAK,SAAS;GACrB,OAAO,KAAK,SAAS,QAAQ;GAC7B;;CAEF,iBAAiB,MAAM,UAAU,QAAQ,SAAS;AACjD,MAAI,aAAa,KAAK,WAAW,KAAK,YAAY,EAAG,QAAO;EAC5D,MAAM,UAAU,YAAY,UAAU,YAAY,SAAS,KAAK,QAAQ,KAAK,IAAI,CAAC;EAClF,MAAM,QAAQ,YAAY,UAAU,YAAY,MAAM,SAAS,KAAK,GAAG,CAAC;EACxE,MAAM,SAAS,YAAY,MAAM,OAAO,QAAQ;EAChD,MAAM,OAAO,YAAY,SAAS,KAAK,KAAK,KAAK,OAAO;EACxD,IAAI,MAAM;EACV,IAAI,KAAK;AACT,MAAI,WAAW,GAAG;GACjB,MAAM,SAAS,SAAS,KAAK,KAAK;GAClC,MAAM,OAAO,KAAK,IAAI,OAAO;GAC7B,MAAM,OAAO,KAAK,IAAI,OAAO;AAC7B,SAAM,YAAY,UAAU,YAAY,SAAS,YAAY,eAAe,KAAK,KAAK,EAAE,YAAY,eAAe,OAAO,KAAK,CAAC,CAAC;;EAElI,MAAM,eAAe,YAAY,UAAU,YAAY,MAAM,KAAK,GAAG,CAAC;AACtE,MAAI,aAAa,GAAG;GACnB,MAAM,WAAW,WAAW,KAAK,KAAK;GACtC,MAAM,OAAO,KAAK,IAAI,SAAS;GAC/B,MAAM,OAAO,KAAK,IAAI,SAAS;AAC/B,SAAM,YAAY,UAAU,YAAY,IAAI,YAAY,eAAe,KAAK,KAAK,EAAE,YAAY,eAAe,IAAI,KAAK,CAAC,CAAC;AACzH,QAAK,YAAY,UAAU,YAAY,MAAM,cAAc,IAAI,CAAC;;AAEjE,MAAI,YAAY,GAAG;GAClB,MAAM,UAAU,UAAU,KAAK,KAAK;GACpC,MAAM,OAAO,KAAK,IAAI,QAAQ;GAC9B,MAAM,OAAO,KAAK,IAAI,QAAQ;AAC9B,QAAK,YAAY,UAAU,YAAY,IAAI,YAAY,eAAe,IAAI,KAAK,EAAE,YAAY,eAAe,cAAc,KAAK,CAAC,CAAC;;EAElI,MAAM,YAAY,YAAY,IAAI,KAAK,KAAK,YAAY,eAAe,KAAK,KAAK,CAAC;AAClF,SAAO;GACN,GAAG;GACH,QAAQ;GACR;GACA;;CAEF,iBAAiB,MAAM,aAAa,SAAS;EAC5C,MAAM,EAAE,sBAAsB,mBAAmB,YAAY,KAAK,UAAU,GAAG,OAAO,OAAO;AAC7F,MAAI,wBAAwB,KAAK,qBAAqB,EAAG,QAAO;EAChE,MAAM,IAAI,cAAc;EACxB,MAAM,KAAK,oBAAoB,GAAG,MAAM,QAAQ,GAAG;EACnD,MAAM,KAAK,oBAAoB,GAAG,OAAO,OAAO,QAAQ,GAAG;EAC3D,MAAM,KAAK,oBAAoB,GAAG,OAAO,OAAO,QAAQ,IAAI,uBAAuB;EACnF,MAAM,OAAO,oBAAoB,GAAG,OAAO,OAAO,QAAQ,GAAG;EAC7D,MAAM,OAAO,oBAAoB,GAAG,OAAO,OAAO,QAAQ,GAAG;EAC7D,MAAM,UAAU,YAAY,UAAU,YAAY,SAAS,KAAK,QAAQ,KAAK,IAAI,CAAC;EAClF,MAAM,QAAQ,YAAY,UAAU,YAAY,MAAM,SAAS,KAAK,GAAG,CAAC;EACxE,MAAM,SAAS,YAAY,MAAM,OAAO,QAAQ;EAChD,MAAM,OAAO,YAAY,IAAI,YAAY,eAAe,OAAO,GAAG,EAAE,YAAY,IAAI,YAAY,eAAe,QAAQ,GAAG,EAAE,YAAY,eAAe,SAAS,GAAG,CAAC,CAAC;EACrK,MAAM,SAAS,YAAY,IAAI,KAAK,KAAK,KAAK;EAC9C,MAAM,YAAY,YAAY,IAAI,KAAK,QAAQ,YAAY,IAAI,YAAY,eAAe,OAAO,OAAO,GAAG,EAAE,YAAY,eAAe,QAAQ,OAAO,GAAG,CAAC,CAAC;AAC5J,SAAO;GACN,GAAG;GACH,KAAK;GACL,QAAQ;GACR;;CAEF,yBAAyB,OAAO,eAAe,eAAe,OAAO,gBAAgB,IAAI;AACxF,MAAI,iBAAiB,KAAK,SAAS,KAAK,SAAS,EAAG,QAAO;EAC3D,MAAM,QAAQ,KAAK,IAAI,QAAQ,cAAc;EAC7C,MAAM,WAAW,gBAAgB;EACjC,MAAM,MAAM,QAAQ,QAAQ,WAAW;AACvC,SAAO,KAAK,IAAI,eAAe,KAAK,IAAI,GAAG,IAAI,CAAC;;CAEjD,2BAA2B,IAAI;EAC9B,MAAM,kBAAkB,MAAM;GAC7B,MAAM,MAAM,KAAK,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG;AACxC,OAAI,QAAQ,EAAG,QAAO;AACtB,UAAO;IACN,EAAE,KAAK;IACP,EAAE,KAAK;IACP,EAAE,KAAK;IACP,EAAE,KAAK;IACP;;AAEF,SAAO;GACN,MAAM,eAAe;IACpB,GAAG,KAAK,GAAG;IACX,GAAG,KAAK,GAAG;IACX,GAAG,MAAM,GAAG;IACZ,GAAG,MAAM,GAAG;IACZ,CAAC;GACF,OAAO,eAAe;IACrB,GAAG,KAAK,GAAG;IACX,GAAG,KAAK,GAAG;IACX,GAAG,MAAM,GAAG;IACZ,GAAG,MAAM,GAAG;IACZ,CAAC;GACF,QAAQ,eAAe;IACtB,GAAG,KAAK,GAAG;IACX,GAAG,KAAK,GAAG;IACX,GAAG,MAAM,GAAG;IACZ,GAAG,MAAM,GAAG;IACZ,CAAC;GACF,KAAK,eAAe;IACnB,GAAG,KAAK,GAAG;IACX,GAAG,KAAK,GAAG;IACX,GAAG,MAAM,GAAG;IACZ,GAAG,MAAM,GAAG;IACZ,CAAC;GACF,MAAM,eAAe;IACpB,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,CAAC;GACF,KAAK,eAAe;IACnB,GAAG,KAAK,GAAG;IACX,GAAG,KAAK,GAAG;IACX,GAAG,MAAM,GAAG;IACZ,GAAG,MAAM,GAAG;IACZ,CAAC;GACF;;CAEF,eAAe,KAAK,KAAK,QAAQ;EAChC,MAAM,YAAY;GACjB,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP;AACD,OAAK,MAAM,KAAK,WAAW;GAC1B,MAAM,KAAK,EAAE,KAAK,IAAI,IAAI,KAAK,IAAI;GACnC,MAAM,KAAK,EAAE,KAAK,IAAI,IAAI,KAAK,IAAI;GACnC,MAAM,KAAK,EAAE,KAAK,IAAI,IAAI,KAAK,IAAI;AACnC,OAAI,EAAE,KAAK,KAAK,EAAE,KAAK,KAAK,EAAE,KAAK,KAAK,EAAE,KAAK,EAAG,QAAO;;AAE1D,SAAO;;CAER;;;;;;;AAUD,MAAM,sBAAsB;CAC3B,QAAQ;EACP,KAAK;EACL,SAAS;EACT,QAAQ;EACR,WAAW;EACX;CACD,MAAM;EACL,KAAK;EACL,SAAS;EACT,QAAQ;EACR,WAAW;EACX;CACD,QAAQ;EACP,KAAK;EACL,SAAS;EACT,QAAQ;EACR,WAAW;EACX;CACD,OAAO;EACN,KAAK;EACL,SAAS;EACT,QAAQ;EACR,WAAW;EACX;CACD,SAAS;EACR,KAAK;EACL,SAAS;EACT,QAAQ;EACR,WAAW;EACX;CACD;AACD,MAAM,oBAAoB;CACzB,MAAM;CACN,MAAM;CACN,KAAK;CACL,SAAS;CACT;AACD,SAAS,UAAU,OAAO;CACzB,MAAM,IAAI,cAAc,MAAM,IAAI;EACjC;EACA;EACA;EACA;EACA;CACD,MAAM,OAAO,MAAM,KAAK,SAAS,IAAI,UAAU,IAAI,QAAQ,UAAU;AACrE,QAAO;EACN,IAAI,EAAE,GAAG;EACT,IAAI,EAAE,GAAG;EACT,IAAI,EAAE,GAAG;EACT;;;AAGF,SAAS,mBAAmB,MAAM;CACjC,MAAM,SAAS,oBAAoB,KAAK,UAAU;CAClD,MAAM,IAAI,KAAK,aAAa;CAC5B,MAAM,SAAS,MAAM;EACpB,EAAE,KAAK;EACP,EAAE,KAAK;EACP,EAAE,KAAK;EACP;AACD,QAAO;EACN,KAAK,MAAM,UAAU,KAAK,OAAO,OAAO,IAAI,CAAC;EAC7C,SAAS,MAAM,UAAU,KAAK,WAAW,OAAO,QAAQ,CAAC;EACzD,QAAQ,MAAM,UAAU,KAAK,UAAU,OAAO,OAAO,CAAC;EACtD,YAAY,KAAK,aAAa,OAAO,aAAa;EAClD,cAAc,KAAK,YAAY,KAAK,KAAK,KAAK;EAC9C,oBAAoB,MAAM,KAAK,YAAY;EAC3C,aAAa,kBAAkB,KAAK,eAAe;EACnD,KAAK,KAAK,MAAM;GACf,OAAO,UAAU,KAAK,IAAI,MAAM;GAChC,OAAO,KAAK,IAAI;GAChB,KAAK,KAAK,IAAI;GACd,SAAS,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,KAAK,IAAI,WAAW,EAAE,CAAC;GACxD,GAAG,KAAK;EACT;;;;;;;;AAWF,MAAM,aAAa;;;;;AAKnB,MAAM,2BAA2B;;;;AAIjC,SAAS,gBAAgB,OAAO;AAC/B,KAAI,CAAC,MAAO,QAAO;EAClB;EACA;EACA;EACA;AACD,KAAI,MAAM,QAAQ,MAAM,EAAE;EACzB,MAAM,IAAI,MAAM,MAAM;EACtB,MAAMC,MAAI,MAAM,MAAM;EACtB,MAAM,IAAI,MAAM,MAAM;AACtB,SAAO;GACN,IAAI,IAAI,IAAI,MAAM;GAClBA,MAAI,IAAIA,MAAI,MAAMA;GAClB,IAAI,IAAI,IAAI,MAAM;GAClB;;AAEF,KAAI,OAAO,UAAU,YAAY,UAAU,MAAM;EAChD,MAAM,IAAI,MAAM,KAAK;EACrB,MAAMA,MAAI,MAAM,KAAK;EACrB,MAAM,IAAI,MAAM,KAAK;AACrB,SAAO;GACN,IAAI,IAAI,IAAI,MAAM;GAClBA,MAAI,IAAIA,MAAI,MAAMA;GAClB,IAAI,IAAI,IAAI,MAAM;GAClB;;AAEF,KAAI,OAAO,UAAU,SAAU,QAAO;EACrC;EACA;EACA;EACA;CACD,MAAM,MAAM,MAAM,MAAM,CAAC,aAAa;AACtC,KAAI,IAAI,WAAW,IAAI,EAAE;EACxB,MAAM,MAAM,IAAI,MAAM,EAAE;AACxB,MAAI,IAAI,WAAW,EAAG,QAAO;GAC5B,OAAO,SAAS,IAAI,KAAK,IAAI,IAAI,GAAG,GAAG;GACvC,OAAO,SAAS,IAAI,KAAK,IAAI,IAAI,GAAG,GAAG;GACvC,OAAO,SAAS,IAAI,KAAK,IAAI,IAAI,GAAG,GAAG;GACvC;AACD,MAAI,IAAI,UAAU,EAAG,QAAO;GAC3B,OAAO,SAAS,IAAI,MAAM,GAAG,EAAE,EAAE,GAAG,GAAG;GACvC,OAAO,SAAS,IAAI,MAAM,GAAG,EAAE,EAAE,GAAG,GAAG;GACvC,OAAO,SAAS,IAAI,MAAM,GAAG,EAAE,EAAE,GAAG,GAAG;GACvC;;CAEF,MAAM,WAAW,IAAI,MAAM,sDAAsD;AACjF,KAAI,UAAU;EACb,MAAM,IAAI,OAAO,WAAW,SAAS,GAAG,GAAG;EAC3C,MAAMA,MAAI,OAAO,WAAW,SAAS,GAAG,GAAG;EAC3C,MAAM,IAAI,OAAO,WAAW,SAAS,GAAG,GAAG;AAC3C,SAAO;GACN,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,EAAE,CAAC;GAC3B,KAAK,IAAI,GAAG,KAAK,IAAI,GAAGA,IAAE,CAAC;GAC3B,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,EAAE,CAAC;GAC3B;;CAEF,MAAM,WAAW,IAAI,MAAM,0DAA0D;AACrF,KAAI,SAAU,QAAO,SAAS,OAAO,WAAW,SAAS,GAAG,GAAG,KAAK,OAAO,WAAW,SAAS,GAAG,GAAG,KAAK,OAAO,WAAW,SAAS,GAAG,GAAG,IAAI;AAC/I,QAAO;EACN;EACA;EACA;EACA;;AAEF,SAAS,SAAS,GAAG,GAAG,GAAG;AAC1B,KAAI,MAAM,EAAG,QAAO;EACnB;EACA;EACA;EACA;CACD,MAAM,WAAW,KAAK,KAAK,MAAM;EAChC,IAAI,KAAK;AACT,MAAI,KAAK,EAAG,OAAM;AAClB,MAAI,KAAK,EAAG,OAAM;AAClB,MAAI,KAAK,IAAI,EAAG,QAAO,OAAO,MAAM,OAAO,IAAI;AAC/C,MAAI,KAAK,IAAI,EAAG,QAAO;AACvB,MAAI,KAAK,IAAI,EAAG,QAAO,OAAO,MAAM,QAAQ,IAAI,IAAI,MAAM;AAC1D,SAAO;;CAER,MAAM,IAAI,IAAI,KAAK,KAAK,IAAI,KAAK,IAAI,IAAI,IAAI;CAC7C,MAAM,IAAI,IAAI,IAAI;AAClB,QAAO;EACN,QAAQ,GAAG,GAAG,IAAI,IAAI,EAAE;EACxB,QAAQ,GAAG,GAAG,EAAE;EAChB,QAAQ,GAAG,GAAG,IAAI,IAAI,EAAE;EACxB;;AAEF,MAAM,UAAU;CACf,oBAAoB,aAAa;EAChC,MAAM,MAAM,YAAY,OAAO,YAAY;AAC3C,MAAI,CAAC,IAAK,QAAO,YAAY,UAAU;AACvC,SAAO;GACN,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ;GACA,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ;GACA,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ;GACA;GACA;GACA;GACA;GACA;;CAEF,aAAa,KAAK;EACjB,MAAM,QAAQ,gBAAgB,IAAI,MAAM;EACxC,MAAM,YAAY,IAAI,aAAa;EACnC,MAAM,OAAO,IAAI,WAAW,IAAI,SAAS,KAAK,IAAI,KAAK;EACvD,MAAM,OAAO,IAAI,WAAW,IAAI,SAAS,KAAK,IAAI,KAAK;EACvD,MAAM,OAAO,IAAI,WAAW,IAAI,SAAS,KAAK,IAAI,KAAK;EACvD,MAAM,OAAO,IAAI,aAAa,IAAI,QAAQ;EAC1C,IAAI,UAAU;AACd,MAAI,SAAS,UAAW,WAAU;WACzB,SAAS,cAAe,WAAU;WAClC,SAAS,QAAS,WAAU;WAC5B,SAAS,OAAQ,WAAU;EACpC,IAAI,MAAM;GACT;GACA;GACA;GACA;AACD,MAAI,IAAI,UAAW,OAAM,YAAY,UAAU,IAAI,UAAU;WACpD,IAAI,UAAU,IAAI,YAAY,KAAK,KAAK,IAAI,YAAY,KAAK,KAAK,IAAI,YAAY,KAAK,GAAG;GAClG,MAAM,SAAS;IACd,IAAI,SAAS,IAAI,OAAO,KAAK,IAAI,WAAW;IAC5C,IAAI,SAAS,IAAI,OAAO,KAAK,IAAI,WAAW;IAC5C,IAAI,SAAS,IAAI,OAAO,KAAK,IAAI,WAAW;IAC5C;GACD,MAAM,YAAY,YAAY,SAAS,QAAQ;IAC9C;IACA;IACA;IACA,CAAC;AACF,OAAI,YAAY,OAAO,UAAU,GAAG,KAAM,OAAM,YAAY,UAAU,UAAU;;EAEjF,MAAM,SAAS,KAAK,IAAI,GAAG,IAAI,UAAU,IAAI;EAC7C,MAAM,QAAQ,IAAI,SAAS;EAC3B,MAAM,WAAW,KAAK,IAAI,IAAI,KAAK,IAAI,KAAK,IAAI,SAAS,GAAG,CAAC;EAC7D,MAAM,eAAe,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,IAAI,YAAY,GAAG,CAAC;EACjE,MAAM,WAAW,WAAW,KAAK,KAAK;EACtC,MAAM,WAAW,YAAY,IAAI;EACjC,MAAM,WAAW,KAAK,IAAI,SAAS;EACnC,MAAM,WAAW,KAAK,IAAI,SAAS;AACnC,SAAO;GACN,SAAS;IACR;IACA;IACA;IACA;IACA;GACD,WAAW;IACV,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ;IACA;GACD,gBAAgB;IACf,MAAM;IACN,MAAM;IACN,MAAM;IACN;IACA;GACD,YAAY;IACX;IACA;IACA;IACA;IACA;GACD;;CAEF,mBAAmB,QAAQ,aAAa,QAAQ;EAC/C,MAAM,SAAS,IAAI,aAAa,2BAA2B,EAAE;AAC7D,UAAQ,kBAAkB,QAAQ,UAAU,EAAE,EAAE,aAAa,OAAO;AACpE,OAAK,CAAC,UAAU,OAAO,WAAW,MAAM,CAAC,aAAa;AACrD,UAAO,KAAK;AACZ,UAAO,KAAK;AACZ,UAAO;;EAER,IAAI,WAAW;EACf,IAAI,WAAW;EACf,IAAI,WAAW;EACf,MAAM,eAAe,EAAE;AACvB,OAAK,MAAM,KAAK,OAAQ,MAAK,EAAE,aAAa,EAAE,UAAU,WAAW;GAClE,MAAM,MAAM,gBAAgB,EAAE,MAAM;GACpC,MAAMC,QAAM,EAAE,aAAa;AAC3B,eAAY,IAAI,KAAKA;AACrB,eAAY,IAAI,KAAKA;AACrB,eAAY,IAAI,KAAKA;aACX,aAAa,SAAS,WAAY,cAAa,KAAK,QAAQ,aAAa,EAAE,CAAC;AACvF,SAAO,KAAK;AACZ,SAAO,KAAK;AACZ,SAAO,KAAK;AACZ,SAAO,KAAK;AACZ,SAAO,KAAK,aAAa;AACzB,SAAO,KAAK;EACZ,IAAI,SAAS;AACb,OAAK,IAAI,IAAI,GAAG,IAAI,YAAY,KAAK;AACpC,OAAI,IAAI,aAAa,QAAQ;IAC5B,MAAM,KAAK,aAAa;AACxB,WAAO,SAAS,KAAK,GAAG,QAAQ;AAChC,WAAO,SAAS,KAAK,GAAG,QAAQ;AAChC,WAAO,SAAS,KAAK,GAAG,QAAQ;AAChC,WAAO,SAAS,KAAK,GAAG,QAAQ;AAChC,WAAO,SAAS,KAAK,GAAG,UAAU;AAClC,WAAO,SAAS,KAAK,GAAG,UAAU;AAClC,WAAO,SAAS,KAAK,GAAG,UAAU;AAClC,WAAO,SAAS,KAAK,GAAG,UAAU;AAClC,WAAO,SAAS,KAAK,GAAG,eAAe;AACvC,WAAO,SAAS,KAAK,GAAG,eAAe;AACvC,WAAO,SAAS,MAAM,GAAG,eAAe;AACxC,WAAO,SAAS,MAAM,GAAG,eAAe;AACxC,WAAO,SAAS,MAAM,GAAG,WAAW;AACpC,WAAO,SAAS,MAAM,GAAG,WAAW;AACpC,WAAO,SAAS,MAAM,GAAG,WAAW;AACpC,WAAO,SAAS,MAAM,GAAG,WAAW;SAC9B,MAAK,IAAI,IAAI,GAAG,IAAI,IAAI,IAAK,QAAO,SAAS,KAAK;AACzD,aAAU;;AAEX,SAAO;;CAER,kBAAkB,QAAQ;EACzB,IAAI,QAAQ;AACZ,OAAK,MAAM,KAAK,QAAQ;GACvB,MAAM,OAAO,EAAE,aAAa,EAAE;AAC9B,OAAI,SAAS,UAAW;AACxB,OAAI,SAAS,WAAY;AACzB,OAAI,EAAE,eAAe,SAAS,iBAAiB,SAAS,QAAS,QAAO;AACxE;;AAED,SAAO;;CAER,kBAAkB,QAAQ,QAAQ,aAAa,QAAQ;EACtD,MAAM,OAAO,IAAI,aAAa;EAC9B,IAAI,OAAO;EACX,IAAI,OAAO;EACX,IAAI,OAAO;AACX,OAAK,MAAM,KAAK,QAAQ;AACvB,QAAK,EAAE,aAAa,EAAE,UAAU,UAAW;GAC3C,MAAM,CAAC,GAAGD,KAAG,KAAK,gBAAgB,EAAE,MAAM;GAC1C,MAAM,IAAI,EAAE,aAAa;GACzB,MAAM,OAAO,MAAM,KAAK,SAAS,IAAI,UAAU,IAAI,QAAQ,UAAU;AACrE,WAAQ,IAAI,EAAE,GAAG;AACjB,WAAQ,IAAIA,IAAE,GAAG;AACjB,WAAQ,IAAI,EAAE,GAAG;;AAElB,SAAO,OAAO,KAAK;AACnB,SAAO,OAAO,KAAK;AACnB,SAAO,OAAO,KAAK;AACnB,SAAO,OAAO,KAAK;AACnB,MAAI,aAAa;GAChB,MAAM,MAAM,mBAAmB,YAAY;AAC3C,UAAO,KAAK;AACZ,UAAO,KAAK,IAAI;AAChB,UAAO,OAAO,KAAK,IAAI;AACvB,UAAO,IAAI,CAAC,GAAG,IAAI,KAAK,IAAI,YAAY,EAAE,OAAO,EAAE;AACnD,UAAO,IAAI,CAAC,GAAG,IAAI,SAAS,IAAI,UAAU,EAAE,OAAO,EAAE;AACrD,UAAO,IAAI,CAAC,GAAG,IAAI,QAAQ,EAAE,EAAE,OAAO,GAAG;AACzC,OAAI,IAAI,KAAK;AACZ,WAAO,IAAI,CAAC,GAAG,IAAI,IAAI,OAAO,EAAE,EAAE,OAAO,GAAG;AAC5C,WAAO,IAAI;KACV,IAAI,IAAI;KACR,IAAI,IAAI;KACR,IAAI,IAAI;KACR;KACA,EAAE,OAAO,GAAG;;;AAGf,MAAI,UAAU,OAAO,cAAc,GAAG;AACrC,UAAO,IAAI;IACV;IACA,OAAO;IACP,OAAO;IACP,OAAO;IACP,EAAE,OAAO,GAAG;AACb,UAAO,IAAI;IACV,OAAO;IACP,OAAO;IACP,OAAO;IACP;IACA,EAAE,OAAO,GAAG;AACb,QAAK,IAAI,IAAI,GAAG,IAAI,IAAI,IAAK,QAAO,OAAO,KAAK,KAAK,OAAO,OAAO,MAAM;;;CAG3E;;;;;AAQD,IAAI,SAAS,MAAME,SAAO;CACzB,UAAU,EAAE;CACZ,SAAS,EAAE;CACX,cAAc;CACd,YAAY,SAAS;AACpB,MAAI,QAAQ,SAAS,EAAG,OAAM,IAAI,MAAM,gDAAgD;AACxF,OAAK,UAAU;AACf,OAAK,cAAc,QAAQ,QAAQ,SAAS,GAAG;AAC/C,OAAK,iCAAiC;;;;;;CAMvC,kCAAkC;EACjC,MAAM,QAAQ,KAAK,QAAQ;AAC3B,OAAK,SAAS,IAAI,MAAM,MAAM;EAC9B,MAAM,KAAK,KAAK,QAAQ,GAAG;EAC3B,IAAI,QAAQ;GACX;GACA;GACA;GACA;AACD,MAAI,KAAK,IAAI,YAAY,IAAI,IAAI,MAAM,CAAC,GAAG,IAAK,SAAQ;GACvD;GACA;GACA;GACA;EACD,IAAI,KAAK,YAAY,UAAU,YAAY,SAAS,OAAO,YAAY,eAAe,IAAI,YAAY,IAAI,OAAO,GAAG,CAAC,CAAC,CAAC;AACvH,MAAI,YAAY,SAAS,GAAG,GAAG,KAAM,MAAK;GACzC;GACA;GACA;GACA;EACD,IAAI,KAAK,YAAY,UAAU,YAAY,MAAM,IAAI,GAAG,CAAC;AACzD,OAAK,OAAO,KAAK;GAChB,QAAQ;GACR,UAAU;GACV,UAAU,KAAK,eAAe,IAAI,IAAI,GAAG;GACzC;AACD,OAAK,IAAI,IAAI,GAAG,IAAI,QAAQ,GAAG,KAAK;GACnC,MAAM,KAAK,KAAK,QAAQ,GAAG;GAC3B,MAAM,KAAK,KAAK,QAAQ,IAAI,GAAG;GAC/B,MAAM,MAAM,KAAK,QAAQ,GAAG;GAC5B,MAAM,SAAS,KAAK,QAAQ,IAAI,GAAG;GACnC,MAAM,MAAM,KAAK,OAAO,GAAG;GAC3B,MAAM,KAAK,YAAY,SAAS,IAAI,GAAG;GACvC,MAAM,KAAK,YAAY,IAAI,IAAI,GAAG;GAClC,IAAI;AACJ,OAAI,KAAK,MAAM;IACd,MAAM,QAAQ,YAAY,SAAS,KAAK,YAAY,eAAe,IAAI,IAAI,YAAY,IAAI,IAAI,IAAI,GAAG,GAAG,CAAC;IAC1G,MAAM,QAAQ,YAAY,SAAS,KAAK,YAAY,eAAe,IAAI,IAAI,YAAY,IAAI,IAAI,IAAI,GAAG,GAAG,CAAC;IAC1G,MAAM,KAAK,YAAY,SAAS,QAAQ,MAAM;IAC9C,MAAM,KAAK,YAAY,IAAI,IAAI,GAAG;AAClC,QAAI,KAAK,KAAM,UAAS,YAAY,SAAS,OAAO,YAAY,eAAe,IAAI,IAAI,YAAY,IAAI,IAAI,MAAM,GAAG,GAAG,CAAC;QACnH,UAAS;SACR,UAAS;AAChB,YAAS,YAAY,UAAU,YAAY,SAAS,QAAQ,YAAY,eAAe,QAAQ,YAAY,IAAI,QAAQ,OAAO,CAAC,CAAC,CAAC;GACjI,MAAM,SAAS,YAAY,UAAU,YAAY,MAAM,QAAQ,OAAO,CAAC;AACvE,QAAK,OAAO,IAAI,KAAK;IACpB,QAAQ;IACR,UAAU;IACV,UAAU,KAAK,eAAe,QAAQ,QAAQ,OAAO;IACrD;;;;;;CAMH,eAAe,SAAS,QAAQ,WAAW;AAC1C,SAAO;GACN,KAAK,KAAK,KAAK,IAAI,IAAI,KAAK,IAAI,GAAG,CAAC,QAAQ,GAAG,CAAC,CAAC,IAAI,MAAM,KAAK;GAChE,KAAK,MAAM,QAAQ,IAAI,QAAQ,GAAG,IAAI,MAAM,KAAK;GACjD,KAAK,MAAM,OAAO,IAAI,OAAO,GAAG,IAAI,MAAM,KAAK;GAC/C;;;;;;CAMF,WAAW,GAAG;EACb,MAAM,aAAa,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,EAAE,CAAC,GAAG,KAAK;AACtD,SAAO,KAAK,mBAAmB,WAAW;;;;;CAK3C,mBAAmB,UAAU;EAC5B,MAAM,IAAI,KAAK,IAAI,GAAG,KAAK,IAAI,KAAK,aAAa,SAAS,CAAC;EAC3D,MAAM,QAAQ,KAAK,QAAQ;EAC3B,IAAI,MAAM;EACV,IAAI,OAAO,QAAQ;AACnB,SAAO,MAAM,MAAM;GAClB,MAAM,MAAM,MAAM,QAAQ;AAC1B,OAAI,KAAK,QAAQ,KAAK,WAAW,EAAG,OAAM,MAAM;OAC3C,QAAO;;EAEb,MAAM,OAAO,KAAK,IAAI,GAAG,IAAI;EAC7B,MAAM,OAAO,OAAO;EACpB,MAAM,KAAK,KAAK,QAAQ;EACxB,MAAM,KAAK,KAAK,QAAQ;EACxB,MAAM,SAAS,GAAG,WAAW,GAAG;EAChC,MAAM,QAAQ,SAAS,QAAQ,IAAI,GAAG,YAAY,SAAS;EAC3D,MAAM,WAAW,YAAY,KAAK,GAAG,UAAU,GAAG,UAAU,MAAM;EAClE,MAAM,UAAU,YAAY,UAAU,YAAY,KAAK,GAAG,SAAS,GAAG,SAAS,MAAM,CAAC;EACtF,MAAM,KAAK,KAAK,OAAO;EACvB,MAAM,KAAK,KAAK,OAAO;EACvB,MAAM,SAAS,YAAY,UAAU,YAAY,KAAK,GAAG,QAAQ,GAAG,QAAQ,MAAM,CAAC;EACnF,MAAM,WAAW,YAAY,UAAU,YAAY,MAAM,SAAS,OAAO,CAAC;EAC1E,MAAM,WAAW;GAChB,GAAG,SAAS,MAAM,GAAG,SAAS,KAAK,GAAG,SAAS,MAAM;GACrD,GAAG,SAAS,MAAM,GAAG,SAAS,KAAK,GAAG,SAAS,MAAM;GACrD,GAAG,SAAS,MAAM,GAAG,SAAS,KAAK,GAAG,SAAS,MAAM;GACrD;AACD,SAAO;GACN;GACA;GACA;GACA;GACA,UAAU;GACV,GAAG,KAAK,cAAc,IAAI,IAAI,KAAK,cAAc;GACjD;GACA;;;;;CAKF,OAAO,WAAW,WAAW,UAAU,EAAE,EAAE;AAC1C,MAAI,UAAU,SAAS,EAAG,OAAM,IAAI,MAAM,mDAAmD;EAC7F,MAAM,SAAS,QAAQ,QAAQ,OAAO;EACtC,MAAM,oBAAoB,QAAQ,qBAAqB;EACvD,MAAM,MAAM,EAAE;AACd,MAAI,QAAQ;AACX,OAAI,KAAK,UAAU,UAAU,SAAS,GAAG;AACzC,OAAI,KAAK,GAAG,UAAU;AACtB,OAAI,KAAK,UAAU,GAAG;AACtB,OAAI,KAAK,UAAU,GAAG;SAChB;GACN,MAAM,SAAS,UAAU;GACzB,MAAM,UAAU,UAAU;GAC1B,MAAM,QAAQ,UAAU,UAAU,SAAS;GAC3C,MAAM,YAAY,UAAU,UAAU,SAAS;AAC/C,OAAI,KAAK,YAAY,SAAS,QAAQ,YAAY,SAAS,SAAS,OAAO,CAAC,CAAC;AAC7E,OAAI,KAAK,GAAG,UAAU;AACtB,OAAI,KAAK,YAAY,IAAI,OAAO,YAAY,SAAS,OAAO,UAAU,CAAC,CAAC;;EAEzE,MAAM,cAAc,SAAS,UAAU,SAAS,UAAU,SAAS;EACnE,MAAM,aAAa,EAAE;AACrB,OAAK,IAAI,IAAI,GAAG,IAAI,aAAa,KAAK;GACrC,MAAM,KAAK,IAAI;GACf,MAAM,KAAK,IAAI,IAAI;GACnB,MAAM,KAAK,IAAI,IAAI;GACnB,MAAM,KAAK,IAAI,IAAI;GACnB,MAAM,QAAQ,MAAM,cAAc,IAAI,oBAAoB,oBAAoB;AAC9E,QAAK,IAAI,OAAO,GAAG,QAAQ,OAAO,QAAQ;IACzC,MAAM,IAAI,OAAO;IACjB,MAAM,KAAK,IAAI;IACf,MAAM,KAAK,KAAK;IAChB,MAAM,KAAK,MAAM,KAAK,KAAK,KAAK;IAChC,MAAM,KAAK,MAAM,KAAK,MAAM,KAAK;IACjC,MAAM,KAAK,OAAO,KAAK,IAAI,KAAK,KAAK;IACrC,MAAM,KAAK,KAAK,KAAK,KAAK;IAC1B,MAAM,MAAM;KACX,KAAK,GAAG,KAAK,KAAK,GAAG,KAAK,KAAK,GAAG,KAAK,KAAK,GAAG;KAC/C,KAAK,GAAG,KAAK,KAAK,GAAG,KAAK,KAAK,GAAG,KAAK,KAAK,GAAG;KAC/C,KAAK,GAAG,KAAK,KAAK,GAAG,KAAK,KAAK,GAAG,KAAK,KAAK,GAAG;KAC/C;IACD,MAAM,MAAM,OAAO,KAAK,IAAI,IAAI;IAChC,MAAM,MAAM,MAAM,KAAK,IAAI;IAC3B,MAAM,MAAM,OAAO,KAAK,IAAI,IAAI;IAChC,MAAM,MAAM,MAAM,KAAK,IAAI;IAC3B,MAAM,SAAS;KACd,MAAM,GAAG,KAAK,MAAM,GAAG,KAAK,MAAM,GAAG,KAAK,MAAM,GAAG;KACnD,MAAM,GAAG,KAAK,MAAM,GAAG,KAAK,MAAM,GAAG,KAAK,MAAM,GAAG;KACnD,MAAM,GAAG,KAAK,MAAM,GAAG,KAAK,MAAM,GAAG,KAAK,MAAM,GAAG;KACnD;IACD,MAAM,UAAU,YAAY,UAAU,OAAO;AAC7C,eAAW,KAAK;KACf,UAAU;KACV;KACA,CAAC;;;AAGJ,SAAOA,SAAO,eAAe,WAAW;;;CAGzC,OAAO,eAAe,YAAY;EACjC,IAAI,iBAAiB;EACrB,MAAM,UAAU,WAAW,KAAK,QAAQ,MAAM;AAC7C,OAAI,IAAI,EAAG,mBAAkB,YAAY,SAAS,OAAO,UAAU,WAAW,IAAI,GAAG,SAAS;AAC9F,UAAO;IACN,UAAU,OAAO;IACjB,SAAS,OAAO;IAChB,UAAU;IACV;IACA;AACF,MAAI,QAAQ,WAAW,EAAG,OAAM,IAAI,UAAU,uBAAuB;AACrE,SAAO,IAAIA,SAAO,QAAQ;;;;;CAK3B,OAAO,OAAO,UAAU,oBAAoB,IAAI;AAC/C,MAAI,SAAS,WAAW,EAAG,OAAM,IAAI,MAAM,0CAA0C;EACrF,MAAM,aAAa,EAAE;AACrB,OAAK,IAAI,IAAI,GAAG,IAAI,SAAS,QAAQ,KAAK;GACzC,MAAM,MAAM,SAAS;GACrB,MAAM,QAAQ,MAAM,SAAS,SAAS,IAAI,oBAAoB,oBAAoB;AAClF,QAAK,IAAI,OAAO,GAAG,QAAQ,OAAO,QAAQ;IACzC,MAAM,IAAI,OAAO;IACjB,MAAM,IAAI,IAAI;IACd,MAAM,KAAK,IAAI;IACf,MAAM,MAAM,KAAK;IACjB,MAAM,KAAK,IAAI;IACf,MAAM,MAAM,KAAK;IACjB,MAAM,MAAM;KACX,MAAM,IAAI,GAAG,KAAK,IAAI,KAAK,IAAI,IAAI,GAAG,KAAK,IAAI,IAAI,KAAK,IAAI,GAAG,KAAK,MAAM,IAAI,GAAG;KACjF,MAAM,IAAI,GAAG,KAAK,IAAI,KAAK,IAAI,IAAI,GAAG,KAAK,IAAI,IAAI,KAAK,IAAI,GAAG,KAAK,MAAM,IAAI,GAAG;KACjF,MAAM,IAAI,GAAG,KAAK,IAAI,KAAK,IAAI,IAAI,GAAG,KAAK,IAAI,IAAI,KAAK,IAAI,GAAG,KAAK,MAAM,IAAI,GAAG;KACjF;IACD,MAAM,SAAS;KACd,IAAI,MAAM,IAAI,GAAG,KAAK,IAAI,GAAG,MAAM,IAAI,IAAI,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,MAAM,IAAI,MAAM,IAAI,GAAG,KAAK,IAAI,GAAG;KACtG,IAAI,MAAM,IAAI,GAAG,KAAK,IAAI,GAAG,MAAM,IAAI,IAAI,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,MAAM,IAAI,MAAM,IAAI,GAAG,KAAK,IAAI,GAAG;KACtG,IAAI,MAAM,IAAI,GAAG,KAAK,IAAI,GAAG,MAAM,IAAI,IAAI,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,MAAM,IAAI,MAAM,IAAI,GAAG,KAAK,IAAI,GAAG;KACtG;IACD,MAAM,UAAU,YAAY,UAAU,OAAO;AAC7C,eAAW,KAAK;KACf,UAAU;KACV;KACA,CAAC;;;AAGJ,SAAOA,SAAO,eAAe,WAAW;;;;;CAKzC,OAAO,MAAM,SAAS;EACrB,MAAM,EAAE,QAAQ,QAAQ,OAAO,OAAO,OAAO,KAAK,iBAAiB,OAAO;EAC1E,MAAM,eAAe,KAAK,IAAI,IAAI,KAAK,MAAM,QAAQ,eAAe,CAAC;EACrE,MAAM,aAAa,EAAE;AACrB,OAAK,IAAI,IAAI,GAAG,KAAK,cAAc,KAAK;GACvC,MAAM,WAAW,IAAI;GACrB,MAAM,QAAQ,WAAW,QAAQ,KAAK,KAAK;GAC3C,MAAM,SAAS,WAAW,MAAM,QAAQ;GACxC,MAAM,IAAI,KAAK,IAAI,MAAM;GACzB,MAAM,IAAI,KAAK,IAAI,MAAM;GACzB,IAAI;GACJ,IAAI;AACJ,OAAI,SAAS,KAAK;AACjB,UAAM;KACL,OAAO,KAAK,SAAS;KACrB,OAAO,KAAK,SAAS;KACrB,OAAO,KAAK;KACZ;AACD,aAAS;KACR,CAAC,SAAS;KACV,SAAS;KACT,QAAQ,SAAS,QAAQ,KAAK,KAAK;KACnC;cACS,SAAS,KAAK;AACxB,UAAM;KACL,OAAO,KAAK,SAAS;KACrB,OAAO,KAAK;KACZ,OAAO,KAAK,SAAS;KACrB;AACD,aAAS;KACR,CAAC,SAAS;KACV,QAAQ,SAAS,QAAQ,KAAK,KAAK;KACnC,SAAS;KACT;UACK;AACN,UAAM;KACL,OAAO,KAAK;KACZ,OAAO,KAAK,SAAS;KACrB,OAAO,KAAK,SAAS;KACrB;AACD,aAAS;KACR,QAAQ,SAAS,QAAQ,KAAK,KAAK;KACnC,CAAC,SAAS;KACV,SAAS;KACT;;AAEF,cAAW,KAAK;IACf,UAAU;IACV,SAAS,YAAY,UAAU,OAAO;IACtC,CAAC;;AAEH,SAAOA,SAAO,eAAe,WAAW;;;;;CAKzC,OAAO,OAAO,SAAS;EACtB,MAAM,EAAE,QAAQ,QAAQ,gBAAgB,GAAG,cAAc,KAAK,UAAU,QAAQ;EAChF,MAAM,WAAW,gBAAgB,KAAK,KAAK;EAC3C,MAAM,SAAS,cAAc,KAAK,KAAK;EACvC,MAAM,aAAa,EAAE;AACrB,OAAK,IAAI,IAAI,GAAG,KAAK,SAAS,KAAK;GAClC,MAAM,QAAQ,YAAY,SAAS,aAAa,IAAI;GACpD,MAAM,IAAI,KAAK,IAAI,MAAM;GACzB,MAAM,IAAI,KAAK,IAAI,MAAM;GACzB,MAAM,MAAM;IACX,OAAO,KAAK,SAAS;IACrB,OAAO;IACP,OAAO,KAAK,SAAS;IACrB;GACD,MAAM,SAAS;IACd,CAAC,SAAS;IACV;IACA,SAAS;IACT;AACD,cAAW,KAAK;IACf,UAAU;IACV,SAAS,YAAY,UAAU,OAAO;IACtC,CAAC;;AAEH,SAAOA,SAAO,eAAe,WAAW;;;;;;ACz2C1C,MAAM,kBAAkB,OAAO,YAAY,eAAe,QAAQ,QAAQ,UAAU,KAAK,IAAI,QAAQ,WAAW,yBAAyB;;;;;AAKzI,SAAS,yBAAyB,KAAK;AACtC,KAAI,CAAC,OAAO,WAAW,IAAI,OAAO,WAAW,YAAa,QAAO;CACjE,MAAM,QAAQ,IAAI,QAAQ,cAAc,GAAG;AAC3C,KAAI,MAAM,WAAW,IAAI,IAAI,CAAC,MAAM,WAAW,QAAQ,IAAI,CAAC,MAAM,WAAW,QAAQ,CAAE,QAAO,OAAO;AACrG,QAAO;;AAER,SAAS,sBAAsB,IAAI;AAClC,KAAI,CAAC,GAAI,QAAO,KAAK;AACrB,KAAI,IAAI,aAAa,OAAO,GAAG,cAAc,SAAU,QAAO,yBAAyB,GAAG,UAAU;AACpG,KAAI,IAAI,OAAO,OAAO,GAAG,QAAQ,SAAU,QAAO,yBAAyB,GAAG,IAAI;CAClF,MAAM,eAAe,IAAI;AACzB,KAAI,cAAc;AACjB,MAAI,OAAO,iBAAiB,SAAU,QAAO,yBAAyB,aAAa;AACnF,MAAI,aAAa,OAAO,OAAO,aAAa,QAAQ,SAAU,QAAO,yBAAyB,aAAa,IAAI;AAC/G,SAAO,iBAAiB,aAAa;;AAEtC,KAAI,GAAG,WAAW,OAAO,UAAU;EAClC,MAAM,SAAS,GAAG,UAAU;AAC5B,MAAI,OAAO,WAAW,SAAU,QAAO,yBAAyB,OAAO;AACvE,MAAI,QAAQ,OAAO,OAAO,OAAO,QAAQ,SAAU,QAAO,yBAAyB,OAAO,IAAI;AAC9F,MAAI,QAAQ,OAAQ,QAAO,iBAAiB,OAAO,OAAO;AAC1D,MAAI,GAAG,UAAU,aAAa,OAAO,GAAG,UAAU,cAAc,SAAU,QAAO,yBAAyB,GAAG,UAAU,UAAU;AACjI,MAAI,GAAG,UAAU,OAAO,OAAO,GAAG,UAAU,QAAQ,SAAU,QAAO,yBAAyB,GAAG,UAAU,IAAI;EAC/G,MAAM,UAAU,GAAG,UAAU;AAC7B,MAAI,QAAS,QAAO,wBAAwB,OAAO,WAAW,cAAc,OAAO,KAAK,QAAQ,CAAC,SAAS,SAAS,GAAG,KAAK,SAAS,mBAAmB,QAAQ,CAAC,CAAC;EACjK,MAAM,eAAe,GAAG,UAAU;AAClC,MAAI,aAAc,QAAO,6BAA6B,OAAO,WAAW,cAAc,OAAO,KAAK,aAAa,CAAC,SAAS,SAAS,GAAG,KAAK,SAAS,mBAAmB,aAAa,CAAC,CAAC;;CAEtL,MAAM,aAAa,GAAG,WAAW;AACjC,KAAI,cAAc,OAAO,eAAe,SAAU,QAAO;CACzD,MAAM,aAAa,GAAG,WAAW;AACjC,KAAI,cAAc,OAAO,eAAe,SAAU,QAAO,6BAA6B,OAAO,WAAW,cAAc,OAAO,KAAK,WAAW,CAAC,SAAS,SAAS,GAAG,KAAK,SAAS,mBAAmB,WAAW,CAAC,CAAC;CACjN,MAAM,SAAS,GAAG,WAAW;AAC7B,KAAI,UAAU,OAAO,WAAW,SAAU,QAAO;AACjD,KAAI,GAAG,WAAW,OAAO,aAAc;AACvC,KAAI,MAAM,QAAQ,GAAG,SAAS,CAAE,MAAK,MAAM,SAAS,GAAG,UAAU;EAChE,MAAM,QAAQ,sBAAsB,MAAM;AAC1C,MAAI,MAAO,QAAO;;CAEnB,MAAM,SAAS,GAAG,WAAW;AAC7B,KAAI,UAAU,OAAO,WAAW,UAC/B;OAAK,MAAM,SAAS,OAAO,OAAO,OAAO,CAAE,KAAI,OAAO,YAAY,QAAQ,OAAO,MAAM,WAAW,SAAS,UAAU;GACpH,MAAM,QAAQ,sBAAsB,MAAM,WAAW,KAAK;AAC1D,OAAI,MAAO,QAAO;;;;;;;AAOrB,SAAS,iBAAiB,WAAW;AACpC,KAAI,CAAC,UAAW,QAAO;AACvB,KAAI,UAAU,OAAO,OAAO,UAAU,QAAQ,UAAU;EACvD,MAAM,IAAI,UAAU;AACpB,MAAI,OAAO,WAAW,eAAe,CAAC,WAAW,EAAE;GAClD,MAAM,YAAY,EAAE,QAAQ,cAAc,GAAG;AAC7C,OAAI,UAAU,WAAW,IAAI,IAAI,CAAC,UAAU,WAAW,QAAQ,IAAI,CAAC,UAAU,WAAW,QAAQ,CAAE,QAAO,OAAO;;AAElH,SAAO;;CAER,MAAM,EAAE,IAAI,QAAQ;AACpB,KAAI,QAAQ,IAAI,WAAW,UAAU,IAAI,IAAI,WAAW,IAAI,IAAI,IAAI,WAAW,UAAU,IAAI,IAAI,WAAW,WAAW,GAAG;AACzH,MAAI,OAAO,WAAW,eAAe,CAAC,WAAW,EAAE;GAClD,MAAM,YAAY,IAAI,QAAQ,cAAc,GAAG;AAC/C,OAAI,UAAU,WAAW,IAAI,IAAI,CAAC,UAAU,WAAW,QAAQ,IAAI,CAAC,UAAU,WAAW,QAAQ,CAAE,QAAO,OAAO;;AAElH,SAAO,IAAI,WAAW,IAAI,GAAG,UAAU,QAAQ;;CAEhD,MAAM,YAAY,IAAI,SAAS,IAAI,GAAG,IAAI,MAAM,IAAI,CAAC,KAAK,GAAG;AAC7D,QAAO,kBAAkB,KAAK,YAAY,IAAI,cAAc;;;AAG7D,SAAS,gBAAgB,MAAM;AAC9B,QAAO,gBAAgB,KAAK;;;;;AA8B7B,IAAI,mBAAmB,MAAMC,mBAAiB;CAC7C,OAAO,WAAW;CAClB,8BAA8B,IAAI,KAAK;CACvC,cAAc;CACd,OAAO,cAAc;AACpB,MAAI,CAACA,mBAAiB,SAAU,oBAAiB,WAAW,IAAIA,oBAAkB;AAClF,SAAOA,mBAAiB;;CAEzB,MAAM,SAAS,QAAQ,KAAK;AAC3B,MAAI,KAAK,YAAY,IAAI,OAAO,CAAE;EAClC,MAAM,SAAS,cAAc;AAC7B,MAAI,SAAS,eAAe,OAAO,CAAE;EACrC,MAAM,QAAQ,SAAS,cAAc,QAAQ;AAC7C,QAAM,KAAK;AACX,QAAM,YAAY;;6BAES,OAAO;yBACX,IAAI;;;AAG3B,WAAS,KAAK,YAAY,MAAM;AAChC,MAAI;AACH,SAAM,SAAS,MAAM,KAAK,QAAQ,OAAO,GAAG;AAC5C,SAAM,SAAS,MAAM;AACrB,QAAK,YAAY,IAAI,OAAO;WACpB,GAAG;AACX,WAAQ,KAAK,wBAAwB,OAAO,IAAI,EAAE;;;CAGpD,aAAa,QAAQ;AACpB,SAAO,KAAK,YAAY,IAAI,OAAO;;;AAGrC,MAAM,mBAAmB,iBAAiB,aAAa;;;;;AC9IvD,EAAC,SAAU,QAAQ,SAAS;AAC1B,SAAO,YAAY,YAAY,OAAO,WAAW,cAAc,OAAO,UAAU,SAAS,GACzF,OAAO,WAAW,cAAc,OAAO,MAAM,OAAO,QAAQ,IAC3D,SAAS,OAAO,eAAe,cAAc,aAAa,UAAU,MAAM,OAAO,UAAU,SAAS;cAC9F,WAAY;AAAE;EAErB,SAASC,gBAAc;AAu+BvB,UAt+BY,SAAU,WAAS;IAG7B,IAAI,OAAO;KACT,KAAK;KACL,MAAM;KACN,MAAM;KACN,MAAM;KACN,MAAM;KACN,MAAM;KACN,KAAK;KACL,KAAK;KACL,MAAM;KACN,MAAM;KACN,MAAM;KACN,OAAO;KACP,MAAM;KACN,OAAO;KACP,OAAO;KACP,OAAO;KACP,OAAO;KACP,OAAO;KACP,OAAO;KACP,OAAO;KACP,OAAO;KACP,OAAO;KACR;IAED,IAAI,QAAQ,EAAE;IACd,IAAI,iBAAiB,EAAE;AACvB,UAAM,IAAI;AACV,mBAAe,KAAK;AACpB,WAAO,KAAK,KAAK,CAAC,QAAQ,SAAU,MAAM,GAAG;AAC3C,WAAM,QAAQ,KAAM,IAAI;AACxB,oBAAe,MAAM,SAAS;MAC9B;AACF,WAAO,OAAO,MAAM;IAEpB,IAAI,qBAAqB,MAAM,MAAM,MAAM,MAAM,MAAM;IACvD,IAAI,eAAe,MAAM,IAAI,MAAM,IAAI,MAAM;IAC7C,IAAI,wBAAwB,MAAM,IAAI,MAAM,IAAI,MAAM,KAAK,MAAM,KAAK,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM;IAChH,IAAI,gBAAgB,MAAM,KAAK,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM;IACrF,IAAI,iBAAiB,MAAM,IAAI,MAAM,KAAK,MAAM,IAAI,qBAAqB,MAAM,MAAM;IAErF,IAAI,MAAM;IAEV,SAAS,YAAa;AACpB,SAAI,CAAC,KAAK;AAER,4BAAM,IAAI,KAAK;MACf,IAAI,OAAO,SAAW,QAAO;AAC3B,WAAI,KAAK,eAAeC,OAAK,EAAE;QAC7B,IAAI,WAAW;AACf,aAAKA,QAAM,MAAM,IAAI,CAAC,QAAQ,SAAU,OAAO;SAC7C,IAAI,MAAM,MAAM,MAAM,IAAI;SAC1B,IAAI,OAAO,IAAI;SACf,IAAI,OAAO,IAAI;AACf,gBAAO,SAAS,MAAM,GAAG;AACzB,gBAAO,OAAO,SAAS,MAAM,GAAG,GAAG;AACnC,aAAI,IAAI,YAAY,MAAM,MAAMA,QAAM;AACtC,cAAK,IAAI,IAAI,GAAG,IAAI,MAAM,IACxB,KAAI,IAAI,EAAE,UAAU,MAAMA,QAAM;UAElC;;;AAIN,WAAK,IAAI,QAAQ,KAAM,MAAM,KAAM;;;;;;;IASvC,SAAS,gBAAiB,MAAM;AAC9B,gBAAW;AACX,YAAO,IAAI,IAAI,KAAK,YAAY,EAAE,CAAC,IAAI,MAAM;;IAG/C,SAAS,oBAAoB,MAAM;AACjC,YAAO,eAAe,gBAAgB,KAAK;;IAI7C,IAAI,SAAS;KACX,SAAS;KACT,aAAa;KACd;;;;;;;;;IAUD,SAAS,kBAAmB,eAAe,gBAAgB;KACzD,IAAI,QAAQ;KACZ,IAAI,WAAW;KACf,IAAIC,wBAAM,IAAI,KAAK;KACnB,IAAI,aAAa,kCAAkB,IAAI,KAAK;KAC5C,IAAI;AACJ,mBAAc,MAAM,IAAI,CAAC,QAAQ,SAAS,MAAM,OAAO;AACrD,UAAI,MAAM,QAAQ,IAAI,KAAK,GACzB,MAAK,IAAI,IAAI,CAAC,OAAO,KACnB,OAAM,SAAS;WAEZ;AACL,kBAAW;OACX,IAAI,MAAM,MAAM,MAAM,IAAI;OAC1B,IAAI,IAAI,IAAI;OACZ,IAAI,IAAI,IAAI;AACZ,WAAI,OAAO,cAAc,YAAY,SAAS,GAAG,MAAM,CAAC;AACxD,WAAI,OAAO,cAAc,YAAY,SAAS,GAAG,MAAM,CAAC;AACxD,aAAI,IAAI,GAAG,EAAE;AACb,yBAAkB,WAAW,IAAI,GAAG,EAAE;;OAExC;AACF,YAAO;MAAE,KAAKA;MAAiB;MAAY;;IAG7C,IAAI,aAAa,aAAa;IAE9B,SAAS,UAAW;AAClB,SAAI,CAAC,aAAa;MAEhB,IAAI,MAAM,kBAAkB,OAAO,OAAO,KAAK;MAC/C,IAAIA,QAAM,IAAI;MACd,IAAI,aAAa,IAAI;AACrB,oBAAcA;AACd,oBAAc;AACd,kBAAY,kBAAkB,OAAO,WAAW,MAAM,CAAC;;;IAK3D,SAAS,wBAAyB,MAAM;AACtC,cAAS;AACT,YAAO,YAAY,IAAI,KAAK,IAAI;;IAGlC,SAAS,wBAAyB,MAAM;AACtC,cAAS;AACT,YAAO,YAAY,IAAI,KAAK,IAAI;;IAGlC,SAAS,oBAAqB,MAAM;AAClC,cAAS;AACT,YAAO,UAAU,IAAI,KAAK,IAAI;;IAIhC,IAAI,SAAS,MAAM;IACnB,IAAI,SAAS,MAAM;IACnB,IAAI,UAAU,MAAM;IACpB,IAAI,UAAU,MAAM;IACpB,IAAI,UAAU,MAAM;IACpB,IAAI,UAAU,MAAM;IACpB,IAAI,UAAU,MAAM;IACpB,IAAI,SAAS,MAAM;IACnB,IAAI,SAAS,MAAM;IACnB,IAAI,UAAU,MAAM;IACpB,IAAI,UAAU,MAAM;IACpB,IAAI,WAAW,MAAM;IACrB,IAAI,UAAU,MAAM;IACpB,IAAI,WAAW,MAAM;IACrB,IAAI,WAAW,MAAM;IACrB,IAAI,WAAW,MAAM;IACrB,IAAI,WAAW,MAAM;IACrB,IAAI,WAAW,MAAM;IACrB,IAAI,WAAW,MAAM;IACrB,IAAI,WAAW,MAAM;IACrB,IAAI,WAAW,MAAM;IACrB,IAAI,WAAW,MAAM;;;;;;;;;;;;;;;;IAkBrB,SAAS,mBAAoB,UAAQ,eAAe;KAClD,IAAI,YAAY;KAGhB,IAAI,YAAY,IAAI,YAAYC,SAAO,OAAO;AAC9C,UAAK,IAAI,IAAI,GAAG,IAAIA,SAAO,QAAQ,IACjC,WAAU,KAAK,gBAAgBA,SAAO,GAAG;KAG3C,IAAI,iCAAiB,IAAI,KAAK;KAC9B,SAAS,eAAe,MAAG,QAAM;MAC/B,IAAI,UAAU,UAAUC;AACxB,gBAAUA,QAAKH;AACf,qBAAe,IAAI,SAAS,eAAe,IAAI,QAAQ,GAAG,EAAE;AAC5D,UAAI,UAAU,sBACZ,gBAAe,IAAI,uBAAuB,eAAe,IAAI,sBAAsB,GAAG,EAAE;AAE1F,qBAAe,IAAIA,SAAO,eAAe,IAAIA,OAAK,IAAI,KAAK,EAAE;AAC7D,UAAIA,SAAO,sBACT,gBAAe,IAAI,wBAAwB,eAAe,IAAI,sBAAsB,IAAI,KAAK,EAAE;;KAInG,IAAI,cAAc,IAAI,WAAWE,SAAO,OAAO;KAC/C,IAAI,iCAAiB,IAAI,KAAK;KAI9B,IAAI,aAAa,EAAE;KACnB,IAAI,YAAY;AAChB,UAAK,IAAI,MAAM,GAAG,MAAMA,SAAO,QAAQ,OAAO;AAC5C,UAAI,CAAC,UACH,YAAW,KAAK,YAAY;OAC1B,OAAO;OACP,KAAKA,SAAO,SAAS;OAErB,OAAO,kBAAkB,QAAQ,IAAI,kBAAkB,QAAQ,IAAI,wBAAwB,KAAK,MAAM;OACvG,CAAC;AAEJ,UAAI,UAAU,OAAO,QAAQ;AAC3B,iBAAU,MAAM;AAChB,mBAAY;;;KAIhB,IAAI,mBAAmB,WAAW,WAAW,WAAW,WAAW,qBAAqB,WAAW,WAAW;KAC9G,IAAI,WAAW,SAAU,GAAG;AAAE,aAAO,KAAM,IAAI,IAAK,IAAI;;KACxD,IAAI,UAAU,SAAU,GAAG;AAAE,aAAO,KAAM,IAAI,IAAK,IAAI;;AAGvD,UAAK,IAAI,UAAU,GAAG,UAAU,WAAW,QAAQ,WAAW;AAC5D,kBAAY,WAAW;MACvB,IAAI,cAAc,CAAC;OACjB,QAAQ,UAAU;OAClB,WAAW;OACX,UAAU;OACX,CAAC;MACF,IAAI,WAAY,KAAK;MACrB,IAAI,uBAAuB;MAC3B,IAAI,yBAAyB;MAC7B,IAAI,oBAAoB;AACxB,qBAAe,OAAO;AAGtB,WAAK,IAAI,MAAM,UAAU,OAAO,OAAO,UAAU,KAAK,OAAO;OAC3D,IAAI,WAAW,UAAU;AACzB,kBAAW,YAAY,YAAY,SAAS;AAG5C,sBAAe,IAAI,WAAW,eAAe,IAAI,SAAS,IAAI,KAAK,EAAE;AACrE,WAAI,WAAW,sBACb,gBAAe,IAAI,wBAAwB,eAAe,IAAI,sBAAsB,IAAI,KAAK,EAAE;AAIjG,WAAI,WAAW,kBACb;YAAI,YAAY,WAAW,WAAW;AACpC,qBAAY,OAAO,SAAS;SAC5B,IAAI,SAAS,aAAa,WAAW,UAAU,UAAU,SAAS,OAAO;AACzE,aAAI,SAAS,aAAa,CAAC,wBAAwB,CAAC,uBAClD,aAAY,KAAK;UACf,QAAQ;UACR,WAAW;UACX,UAAU;UACX,CAAC;kBACO,CAAC,qBACV;mBAKK,YAAY,WAAW,WAAW;AACzC,qBAAY,OAAO,SAAS;SAC5B,IAAI,WAAW,aAAa,WAAW,UAAU,UAAU,SAAS,OAAO;AAC3E,aAAI,WAAW,aAAa,CAAC,wBAAwB,CAAC,uBACpD,aAAY,KAAK;UACf,QAAQ;UACR,WAAY,WAAW,WAAY,SAAS;UAC5C,UAAU;UACX,CAAC;kBACO,CAAC,qBACV;mBAKK,WAAW,oBAAoB;AAEtC,aAAI,WAAW,SACb,YAAW,wBAAwB,MAAM,GAAG,KAAK,KAAK,IAAI,WAAW;AAGvE,qBAAY,OAAO,SAAS;AAC5B,aAAI,SAAS,UACX,gBAAe,KAAK,SAAS,UAAU;SAEzC,IAAI,WAAW,aAAa,WAAW,UAAU,UAAU,SAAS,OAAO;AAC3E,aAAI,WAAW,aAAa,yBAAyB,KAAK,2BAA2B,GAAG;AACtF;AACA,sBAAY,KAAK;WACf,QAAQ;WACR,WAAW;WACX,UAAU;WACV,gBAAgB;WACjB,CAAC;eAEF;mBAKK,WAAW,UAAU;AAC5B,aAAI,uBAAuB,EACzB;kBACS,oBAAoB,GAAG;AAChC,mCAAyB;AACzB,iBAAO,CAAC,YAAY,YAAY,SAAS,GAAG,SAC1C,aAAY,KAAK;UAGnB,IAAI,gBAAgB,YAAY,YAAY,SAAS,GAAG;AACxD,cAAI,iBAAiB,MAAM;AACzB,0BAAe,IAAI,eAAe,IAAI;AACtC,0BAAe,IAAI,KAAK,cAAc;;AAExC,sBAAY,KAAK;AACjB;;AAEF,oBAAW,YAAY,YAAY,SAAS;AAC5C,qBAAY,OAAO,SAAS;AAC5B,aAAI,SAAS,UACX,gBAAe,KAAK,SAAS,UAAU;mBAMlC,WAAW,UAAU;AAC5B,aAAI,yBAAyB,GAC3B;cAAI,yBAAyB,EAC3B;mBACS,CAAC,SAAS,YAAY,YAAY,SAAS,GAAG;AACvD,uBAAY,KAAK;AACjB,sBAAW,YAAY,YAAY,SAAS;;;AAGhD,qBAAY,OAAO,SAAS;mBAIrB,WAAW,OAClB,aAAY,OAAO,UAAU;cAK5B;AACH,oBAAY,OAAO,SAAS;AAE5B,YAAI,SAAS,aAAa,aAAa,QACrC,gBAAe,KAAK,SAAS,UAAU;;;MAa7C,IAAI,YAAY,EAAE;MAClB,IAAI,aAAa;AACjB,WAAK,IAAI,MAAM,UAAU,OAAO,OAAO,UAAU,KAAK,OAAO;OAC3D,IAAI,aAAa,UAAU;AAC3B,WAAI,EAAE,aAAa,gBAAgB;QACjC,IAAI,MAAM,YAAY;QACtB,IAAI,aAAa,aAAa;QAC9B,IAAI,QAAQ,eAAe;AAC3B,YAAI,cAAc,QAAQ,WAAW,QAAQ;AAC3C,oBAAW,OAAO;AAClB,oBAAW,oBAAoB;cAE/B,WAAU,KAAK,aAAa;SAC1B,QAAQ;SACR,MAAM;SACN,QAAQ;SACR,gBAAgB;SAChB,mBAAmB;SACpB,CAAC;;;MAIR,IAAI,mBAAmB,EAAE;AACzB,WAAK,IAAI,SAAS,GAAG,SAAS,UAAU,QAAQ,UAAU;OACxD,IAAI,MAAM,UAAU;AACpB,WAAI,CAAC,IAAI,kBAAmB,IAAI,kBAAkB,CAAC,eAAe,IAAI,IAAI,OAAO,EAAG;QAClF,IAAI,UAAU,CAAC,aAAa,IAAI;AAChC,aAAK,IAAI,WAAY,KAAK,GAAI,cAAc,WAAW,sBAAsB,WAAW,eAAe,IAAI,WAAW,KAAK,KAAK,MAC9H,MAAK,IAAI,MAAM,SAAS,GAAG,MAAM,UAAU,QAAQ,MACjD,KAAI,UAAU,KAAK,WAAW,UAAU;AACtC,iBAAQ,KAAK,aAAa,UAAU,KAAK;AACzC;;QAKN,IAAI,aAAa,EAAE;AACnB,aAAK,IAAI,MAAM,GAAG,MAAM,QAAQ,QAAQ,OAAO;SAC7C,IAAI,QAAQ,QAAQ;AACpB,cAAK,IAAI,IAAI,MAAM,QAAQ,KAAK,MAAM,MAAM,IAC1C,YAAW,KAAK,EAAE;;QAItB,IAAI,aAAa,YAAY,WAAW;QACxC,IAAI,YAAY,UAAU;AAC1B,aAAK,IAAI,MAAM,WAAW,KAAK,GAAG,OAAO,GAAG,MAC1C,KAAI,EAAE,UAAU,OAAO,gBAAgB;AACrC,qBAAY,YAAY;AACxB;;QAGJ,IAAI,YAAY,WAAW,WAAW,SAAS;QAC/C,IAAI,YAAY,YAAY;QAC5B,IAAI,YAAY,UAAU;AAC1B,YAAI,EAAE,UAAU,aAAa,qBAC3B;cAAK,IAAI,MAAM,YAAY,GAAG,OAAO,UAAU,KAAK,MAClD,KAAI,EAAE,UAAU,OAAO,gBAAgB;AACrC,sBAAY,YAAY;AACxB;;;AAIN,yBAAiB,KAAK;SACpB,aAAa;SACb,UAAU,KAAK,IAAI,WAAW,WAAW,GAAG,IAAI,SAAS;SACzD,UAAU,KAAK,IAAI,WAAW,UAAU,GAAG,IAAI,SAAS;SACzD,CAAC;;;AAKN,WAAK,IAAI,SAAS,GAAG,SAAS,iBAAiB,QAAQ,UAAU;OAC/D,IAAI,MAAM,iBAAiB;OAC3B,IAAI,eAAe,IAAI;OACvB,IAAI,UAAU,IAAI;OAClB,IAAI,UAAU,IAAI;;;;;;OAMlB,IAAI,iBAAmB,YAAY,aAAa,MAAO,IAAK,SAAS;AAOrE,WAAI,eAAe,IAAI,SAAS,CAC9B,MAAK,IAAI,KAAK,GAAG,KAAK,aAAa,QAAQ,MAAM;QAC/C,IAAI,MAAM,aAAa;AACvB,YAAI,UAAU,OAAO,UAAU;SAC7B,IAAI,WAAW;AACf,cAAK,IAAI,KAAK,KAAK,GAAG,MAAM,GAAG,KAC7B,KAAI,EAAE,UAAU,aAAa,OAAO,gBAAgB;AAClD,qBAAW,UAAU,aAAa;AAClC;;AAGJ,wBAAe,KAAM,YAAY,qBAAqB,YAAa,UAAU,SAAS;;;AAO5F,WAAI,eAAe,IAAI,QAAQ,CAC7B,MAAK,IAAI,OAAO,GAAG,OAAO,aAAa,QAAQ,QAAQ;QACrD,IAAI,MAAM,aAAa;AACvB,YAAI,UAAU,OAAO,QACnB,MAAK,IAAI,OAAO,OAAO,GAAG,QAAQ,IAAI,QAAQ;SAC5C,IAAI,eAAe,SAAS,KAAK,UAAU,UAAU,aAAa;AAClE,aAAI,eAAe,cAAc;AAC/B,cAAI,iBAAiB,QACnB,gBAAe,KAAK,QAAQ;AAE9B;;;;AAQV,WAAI,eAAe,IAAI,QAAQ,CAC7B,MAAK,IAAI,OAAO,GAAG,OAAO,aAAa,QAAQ,QAAQ;QACrD,IAAI,OAAO,aAAa;AACxB,YAAI,UAAU,QAAQ,QACpB,gBAAe,MAAM,OAAO;;AAOlC,WAAI,eAAe,IAAI,QAAQ,IAAI,eAAe,IAAI,QAAQ,CAC5D,MAAK,IAAI,OAAO,GAAG,OAAO,aAAa,SAAS,GAAG,QAAQ;QACzD,IAAI,OAAO,aAAa;AACxB,YAAI,UAAU,SAAS,UAAU,UAAU;SACzC,IAAI,aAAa,GAAG,WAAW;AAC/B,cAAK,IAAI,OAAO,OAAO,GAAG,QAAQ,GAAG,QAAQ;AAC3C,uBAAa,UAAU,aAAa;AACpC,cAAI,EAAE,aAAa,eACjB;;AAGJ,cAAK,IAAI,OAAO,OAAO,GAAG,OAAO,aAAa,QAAQ,QAAQ;AAC5D,qBAAW,UAAU,aAAa;AAClC,cAAI,EAAE,WAAW,eACf;;AAGJ,aAAI,eAAe,aAAa,UAAU,UAAU,UAAU,eAAe,UAAW,cAAc,UAAU,UAC9G,gBAAe,MAAM,WAAW;;;AAOxC,WAAI,eAAe,IAAI,QAAQ,EAC7B;aAAK,IAAI,OAAO,GAAG,OAAO,aAAa,QAAQ,OAE7C,KAAI,UADO,aAAa,SACF,SAAS;AAC7B,cAAK,IAAI,OAAO,OAAO,GAAG,QAAQ,KAAM,UAAU,aAAa,UAAU,UAAU,gBAAiB,OAClG,gBAAe,aAAa,OAAO,QAAQ;AAE7C,cAAK,QAAQ,OAAO,aAAa,UAAW,UAAU,aAAa,UAAU,UAAU,gBAAgB,UAAW,OAChH,KAAI,UAAU,aAAa,WAAW,QACpC,gBAAe,aAAa,OAAO,QAAQ;;;AAQrD,WAAI,eAAe,IAAI,QAAQ,IAAI,eAAe,IAAI,QAAQ,IAAI,eAAe,IAAI,QAAQ,CAC3F,MAAK,IAAI,OAAO,GAAG,OAAO,aAAa,QAAQ,QAAQ;QACrD,IAAI,OAAO,aAAa;AACxB,YAAI,UAAU,SAAS,UAAU,UAAU,UAAU;AACnD,wBAAe,MAAM,QAAQ;AAE7B,cAAK,IAAI,OAAO,OAAO,GAAG,QAAQ,KAAM,UAAU,aAAa,SAAS,eAAgB,OACtF,gBAAe,aAAa,OAAO,QAAQ;AAE7C,cAAK,IAAI,OAAO,OAAO,GAAG,OAAO,aAAa,UAAW,UAAU,aAAa,SAAS,eAAgB,OACvG,gBAAe,aAAa,OAAO,QAAQ;;;AASnD,WAAI,eAAe,IAAI,QAAQ,CAC7B,MAAK,IAAI,OAAO,GAAG,iBAAiB,SAAS,OAAO,aAAa,QAAQ,QAAQ;QAC/E,IAAI,OAAO,aAAa;QACxB,IAAI,OAAO,UAAU;AACrB,YAAI,OAAO,SACT;aAAI,mBAAmB,OACrB,gBAAe,MAAM,OAAO;mBAErB,OAAO,aAChB,kBAAiB;;AAOvB,WAAI,eAAe,IAAI,sBAAsB,EAAE;QAI7C,IAAI,sBAAuB,SAAS,UAAU;QAC9C,IAAI,2BAA2B,sBAAsB;QAGrD,IAAI,eAAe,EAAE;QAEnB,IAAI,cAAc,EAAE;AACpB,aAAK,IAAI,OAAO,GAAG,OAAO,aAAa,QAAQ,OAI7C,KAAI,UAAU,aAAa,SAAS,uBAAuB;SACzD,IAAI,OAAOA,SAAO,aAAa;SAC/B,IAAI,kBAAmB,KAAK;AAE5B,aAAI,wBAAwB,KAAK,KAAK,KACpC,KAAI,YAAY,SAAS,GACvB,aAAY,KAAK;UAAQ;UAAM,UAAU;UAAM,CAAC;aAEhD;mBAIM,kBAAkB,wBAAwB,KAAK,MAAM,KAC7D,MAAK,IAAI,WAAW,YAAY,SAAS,GAAG,YAAY,GAAG,YAAY;UACrE,IAAI,YAAY,YAAY,UAAU;AACtC,cAAI,cAAc,mBAChB,cAAc,wBAAwB,oBAAoB,KAAK,CAAC,IAChE,wBAAwB,oBAAoB,UAAU,CAAC,KAAK,MAC5D;AACA,wBAAa,KAAK,CAAC,YAAY,UAAU,UAAU,KAAK,CAAC;AACzD,uBAAY,SAAS;AACrB;;;;AAMV,qBAAa,KAAK,SAAU,GAAG,GAAG;AAAE,gBAAO,EAAE,KAAK,EAAE;UAAM;AAG5D,aAAK,IAAI,UAAU,GAAG,UAAU,aAAa,QAAQ,WAAW;SAC9D,IAAI,QAAQ,aAAa;SACzB,IAAI,aAAa,MAAM;SACvB,IAAI,cAAc,MAAM;SAIxB,IAAI,kBAAkB;SACtB,IAAI,gBAAgB;AACpB,cAAK,IAAI,OAAO,aAAa,GAAG,OAAO,aAAa,QAAQ;UAC1D,IAAI,OAAO,aAAa;AACxB,cAAI,UAAU,QAAQ,0BAA0B;AAC9C,6BAAkB;WAClB,IAAI,KAAM,UAAU,QAAQ,sBAAuB,SAAS;AAC5D,eAAI,OAAO,gBAAgB;AACzB,4BAAgB;AAChB;;;;AAUN,aAAI,mBAAmB,CAAC,eAAe;AACrC,0BAAgB;AAChB,eAAK,IAAI,OAAO,aAAa,GAAG,QAAQ,GAAG,QAAQ;WACjD,IAAI,OAAO,aAAa;AACxB,eAAI,UAAU,QAAQ,0BAA0B;YAC9C,IAAI,OAAQ,UAAU,QAAQ,sBAAuB,SAAS;AAC9D,gBAAI,SAAS,eACX,iBAAgB;gBAEhB,iBAAgB;AAElB;;;;AAIN,aAAI,eAAe;AACjB,oBAAU,aAAa,eAAe,UAAU,aAAa,gBAAgB;AAI7E,cAAI,kBAAkB,gBACpB;gBAAK,IAAI,QAAQ,aAAa,GAAG,QAAQ,aAAa,QAAQ,QAC5D,KAAI,EAAE,UAAU,aAAa,UAAU,gBAAgB;AACrD,gBAAI,gBAAgBA,SAAO,aAAa,QAAQ,GAAG,SACjD,WAAU,aAAa,UAAU;AAEnC;;;AAIN,cAAI,kBAAkB,gBACpB;gBAAK,IAAI,QAAQ,cAAc,GAAG,QAAQ,aAAa,QAAQ,QAC7D,KAAI,EAAE,UAAU,aAAa,UAAU,gBAAgB;AACrD,gBAAI,gBAAgBA,SAAO,aAAa,QAAQ,GAAG,SACjD,WAAU,aAAa,UAAU;AAEnC;;;;;AAUV,aAAK,IAAI,QAAQ,GAAG,QAAQ,aAAa,QAAQ,QAC/C,KAAI,UAAU,aAAa,UAAU,uBAAuB;SAC1D,IAAI,aAAa,OAAO,WAAW;SACnC,IAAI,aAAa;AACjB,cAAK,IAAI,MAAM,QAAQ,GAAG,OAAO,GAAG,MAClC,KAAI,UAAU,aAAa,QAAQ,cACjC,cAAa;cACR;AACL,uBAAc,UAAU,aAAa,QAAQ,sBAAuB,SAAS;AAC7E;;SAGJ,IAAI,aAAa;AACjB,cAAK,IAAI,QAAQ,QAAQ,GAAG,QAAQ,aAAa,QAAQ,QACvD,KAAI,UAAU,aAAa,WAAW,wBAAwB,eAC5D,YAAW;cACN;AACL,uBAAc,UAAU,aAAa,UAAU,sBAAuB,SAAS;AAC/E;;AAGJ,cAAK,IAAI,OAAO,YAAY,QAAQ,UAAU,OAC5C,WAAU,aAAa,SAAS,eAAe,aAAa,aAAa;AAE3E,iBAAQ;;;;AAQhB,WAAK,IAAI,OAAO,UAAU,OAAO,QAAQ,UAAU,KAAK,QAAQ;OAC9D,IAAI,UAAU,YAAY;OAC1B,IAAI,SAAS,UAAU;AAEvB,WAAI,UAAU,GACZ;YAAI,UAAU,SAAS,UAAU,SAC/B,aAAY;kBAMV,SAAS,OACX,aAAY;gBACH,UAAU,UAAU,SAC7B,aAAY,SAAS;AAMzB,WAAI,SAAS,cACX,aAAY,QAAQ,SAAS,IAAI,UAAU,QAAQ,YAAY,OAAO;AAMxE,WAAI,SAAS,UAAU,OAAO,gBAAgBA,SAAO,MAAM,IAAI,SAAS,QACtE,MAAK,IAAI,MAAM,MAAM,OAAO,KAAM,gBAAgBA,SAAO,KAAK,GAAG,gBAAiB,MAChF,aAAY,OAAO,UAAU;;;AAQrC,YAAO;MACL,QAAQ;MACI;MACb;KAED,SAAS,wBAAyB,OAAO,OAAO;AAE9C,WAAK,IAAIC,OAAI,OAAOA,OAAID,SAAO,QAAQ,QAAK;OAC1C,IAAIE,aAAW,UAAUD;AACzB,WAAIC,cAAY,SAAS,SACvB,QAAO;AAET,WAAKA,cAAY,SAAS,WAAa,SAASA,eAAa,SAC3D,QAAO;AAET,WAAIA,aAAW,oBAAoB;QACjC,IAAI,MAAM,mBAAmBD,KAAE;AAC/B,eAAI,QAAQ,KAAKD,SAAO,SAAS;;;AAGrC,aAAO;;KAGT,SAAS,mBAAoB,cAAc;MAEzC,IAAI,iBAAiB;AACrB,WAAK,IAAIC,OAAI,eAAe,GAAGA,OAAID,SAAO,QAAQ,QAAK;OACrD,IAAIE,aAAW,UAAUD;AACzB,WAAIC,aAAW,OACb;AAEF,WAAIA,aAAW,UACb;YAAI,EAAE,mBAAmB,EACvB,QAAOD;kBAEAC,aAAW,mBACpB;;AAGJ,aAAO;;;IAKX,IAAI,OAAO;IAEX,IAAI;IAEJ,SAASC,UAAS;AAChB,SAAI,CAAC,WAAW;MAEd,IAAI,MAAM,kBAAkB,MAAM,KAAK;MACvC,IAAIJ,QAAM,IAAI;AAGd,MAFiB,IAAI,WAEV,QAAQ,SAAU,OAAO,KAAK;AACvC,aAAI,IAAI,KAAK,MAAM;QACnB;AACF,kBAAYA;;;IAKhB,SAAS,qBAAsB,MAAM;AACnC,cAAO;AACP,YAAO,UAAU,IAAI,KAAK,IAAI;;;;;;;;;;;IAYhC,SAAS,yBAAyB,UAAQ,iBAAiB,OAAO,KAAK;KACrE,IAAI,SAASC,SAAO;AACpB,aAAQ,KAAK,IAAI,GAAG,SAAS,OAAO,IAAI,CAAC,MAAM;AAC/C,WAAM,KAAK,IAAI,SAAS,GAAG,OAAO,OAAO,SAAS,IAAI,CAAC,IAAI;KAE3D,IAAID,wBAAM,IAAI,KAAK;AACnB,UAAK,IAAI,IAAI,OAAO,KAAK,KAAK,IAC5B,KAAI,gBAAgB,KAAK,GAAG;MAC1B,IAAI,SAAS,qBAAqBC,SAAO,GAAG;AAC5C,UAAI,WAAW,KACb,OAAI,IAAI,GAAG,OAAO;;AAIxB,YAAOD;;;;;;;;;;;IAYT,SAAS,mBAAmB,UAAQ,uBAAuB,OAAO,KAAK;KACrE,IAAI,SAASC,SAAO;AACpB,aAAQ,KAAK,IAAI,GAAG,SAAS,OAAO,IAAI,CAAC,MAAM;AAC/C,WAAM,KAAK,IAAI,SAAS,GAAG,OAAO,OAAO,SAAS,IAAI,CAAC,IAAI;KAE3D,IAAI,WAAW,EAAE;AACjB,2BAAsB,WAAW,QAAQ,SAAU,WAAW;MAC5D,IAAI,YAAY,KAAK,IAAI,OAAO,UAAU,MAAM;MAChD,IAAI,UAAU,KAAK,IAAI,KAAK,UAAU,IAAI;AAC1C,UAAI,YAAY,SAAS;OAEvB,IAAI,aAAa,sBAAsB,OAAO,MAAM,WAAW,UAAU,EAAE;AAI3E,YAAK,IAAI,IAAI,SAAS,KAAK,aAAc,gBAAgBA,SAAO,GAAG,GAAG,gBAAiB,IACrF,YAAW,KAAK,UAAU;OAK5B,IAAI,WAAW,UAAU;OACzB,IAAI,cAAc;AAClB,YAAK,IAAI,MAAM,GAAG,MAAM,WAAW,QAAQ,OAAO;QAChD,IAAI,QAAQ,WAAW;AACvB,YAAI,QAAQ,SAAY,YAAW;AACnC,YAAI,QAAQ,YAAe,eAAc,QAAQ;;AAEnD,YAAK,IAAI,MAAM,UAAU,OAAO,aAAa,MAC3C,MAAK,IAAI,MAAM,GAAG,MAAM,WAAW,QAAQ,MACzC,KAAI,WAAW,QAAQ,KAAK;QAC1B,IAAI,WAAW;AACf,eAAO,MAAM,IAAI,WAAW,UAAU,WAAW,MAAM,MAAM,IAC3D;AAEF,YAAI,MAAM,SACR,UAAS,KAAK,CAAC,WAAW,WAAW,MAAM,UAAU,CAAC;;;OAMhE;AACF,YAAO;;;;;;;;;IAUT,SAAS,mBAAmB,UAAQ,mBAAmB,OAAO,KAAK;KACjE,IAAI,UAAU,oBAAoBA,UAAQ,mBAAmB,OAAO,IAAI;KACxE,IAAI,QAAQ,EAAE,CAAC,OAAQA,SAAQ;AAC/B,aAAQ,QAAQ,SAAU,WAAW,GAAG;AACtC,YAAM,MACH,kBAAkB,OAAO,aAAa,IAAK,qBAAqBA,SAAO,WAAW,GAAG,SACnFA,SAAO;OACZ;AACF,YAAO,MAAM,KAAK,GAAG;;;;;;;;;IAUvB,SAAS,oBAAoB,UAAQ,mBAAmB,OAAO,KAAK;KAClE,IAAI,WAAW,mBAAmBA,UAAQ,mBAAmB,OAAO,IAAI;KAExE,IAAI,UAAU,EAAE;AAChB,UAAK,IAAI,IAAI,GAAG,IAAIA,SAAO,QAAQ,IACjC,SAAQ,KAAK;AAGf,cAAS,QAAQ,SAAU,KAAK;MAC9B,IAAII,UAAQ,IAAI;MAChB,IAAIC,QAAM,IAAI;MAEd,IAAI,QAAQ,QAAQ,MAAMD,SAAOC,QAAM,EAAE;AACzC,WAAK,IAAIJ,MAAI,MAAM,QAAQ,OACzB,SAAQI,QAAMJ,OAAK,MAAMA;OAE3B;AACF,YAAO;;AAGT,cAAQ,0BAA0B;AAClC,cAAQ,kBAAkB;AAC1B,cAAQ,sBAAsB;AAC9B,cAAQ,sBAAsB;AAC9B,cAAQ,qBAAqB;AAC7B,cAAQ,uBAAuB;AAC/B,cAAQ,2BAA2B;AACnC,cAAQ,qBAAqB;AAC7B,cAAQ,sBAAsB;AAC9B,cAAQ,qBAAqB;AAC7B,cAAQ,0BAA0B;AAElC,WAAO,eAAeK,WAAS,cAAc,EAAE,OAAO,MAAM,CAAC;AAE7D,WAAOA;KAEP,EAAE,CAAC;;AAGL,SAAOT;IAEN;;;;;;ACj+BH,MAAM,WAAW;AACjB,MAAM,WAAW;AACjB,MAAM,4BAA4B,WAAW,KAAK;AAClD,MAAM,cAAc,IAAI,aAAa,SAAS;AAC9C,KAAK,IAAI,IAAI,GAAG,IAAI,UAAU,IAAK,aAAY,KAAK,MAAM,IAAI,KAAK,IAAI,IAAI,KAAK,KAAK,KAAK,WAAW,GAAG;AACxG,MAAM,cAAc,IAAI,YAAY,SAAS;AAC7C,KAAK,IAAI,IAAI,GAAG,IAAI,UAAU,KAAK;CAClC,IAAI,MAAM;CACV,IAAI,MAAM;AACV,MAAK,IAAI,IAAI,GAAG,IAAI,IAAI,KAAK;AAC5B,QAAM,OAAO,IAAI,MAAM;AACvB,UAAQ;;AAET,aAAY,KAAK;;AAElB,MAAM,YAAY,IAAI,aAAa,WAAW,EAAE;AAChD,MAAM,YAAY,IAAI,aAAa,WAAW,EAAE;AAChD,KAAK,IAAI,IAAI,GAAG,IAAI,WAAW,GAAG,KAAK;CACtC,MAAM,QAAQ,KAAK,KAAK,KAAK,IAAI;AACjC,WAAU,KAAK,KAAK,IAAI,MAAM;AAC9B,WAAU,KAAK,KAAK,IAAI,MAAM;;;;;;AAM/B,SAAS,eAAe,MAAM,MAAM;AACnC,MAAK,IAAI,IAAI,GAAG,IAAI,UAAU,KAAK;EAClC,MAAM,IAAI,YAAY,MAAM;AAC5B,MAAI,IAAI,GAAG;GACV,MAAM,KAAK,KAAK,MAAM;AACtB,QAAK,KAAK,KAAK,MAAM;AACrB,QAAK,KAAK;GACV,MAAM,KAAK,KAAK,MAAM;AACtB,QAAK,KAAK,KAAK,MAAM;AACrB,QAAK,KAAK;;;AAGZ,MAAK,IAAI,MAAM,GAAG,OAAO,UAAU,QAAQ,GAAG;EAC7C,MAAM,UAAU,OAAO;EACvB,MAAM,OAAO,WAAW;AACxB,OAAK,IAAI,IAAI,GAAG,IAAI,UAAU,KAAK,IAAK,MAAK,IAAI,IAAI,GAAG,IAAI,SAAS,KAAK;GACzE,MAAM,aAAa,IAAI;GACvB,MAAM,MAAM,UAAU,eAAe;GACrC,MAAM,MAAM,UAAU,eAAe;GACrC,MAAM,QAAQ,KAAK,IAAI,MAAM;GAC7B,MAAM,QAAQ,KAAK,IAAI,MAAM;GAC7B,MAAM,QAAQ,KAAK,IAAI,IAAI,YAAY;GACvC,MAAM,QAAQ,KAAK,IAAI,IAAI,YAAY;GACvC,MAAM,QAAQ,QAAQ,MAAM,QAAQ;GACpC,MAAM,QAAQ,QAAQ,MAAM,QAAQ;AACpC,QAAK,IAAI,KAAK,QAAQ;AACtB,QAAK,IAAI,KAAK,QAAQ;AACtB,QAAK,IAAI,IAAI,WAAW,QAAQ;AAChC,QAAK,IAAI,IAAI,WAAW,QAAQ;;;;;;;AAOnC,IAAI,oBAAoB,MAAMU,oBAAkB;CAC/C,WAAW,IAAI,aAAa,SAAS;CACrC,WAAW,IAAI,aAAa,SAAS;CACrC,eAAe,IAAI,aAAa,SAAS;;;;CAIzC,cAAc,UAAU,YAAY,SAAS;EAC5C,MAAM,cAAc,SAAS;EAC7B,MAAM,eAAe,cAAc,IAAI,SAAS,IAAI,UAAU,IAAI;EAClE,MAAM,cAAc,KAAK,MAAM,UAAU,WAAW,IAAI,YAAY;AACpE,OAAK,IAAI,IAAI,GAAG,IAAI,UAAU,KAAK;GAClC,MAAM,YAAY,cAAc;GAChC,IAAI,YAAY;AAChB,OAAI,aAAa,KAAK,YAAY,cACjC;QAAI,gBAAgB,EAAG,aAAY,SAAS,KAAK,cAAc;aACtD,eAAe,EAAG,eAAc,SAAS,KAAK,cAAc,MAAM,SAAS,KAAK,cAAc,MAAM;;AAE9G,QAAK,SAAS,KAAK,aAAa,YAAY,MAAM;AAClD,QAAK,SAAS,KAAK;;AAEpB,iBAAe,KAAK,UAAU,KAAK,SAAS;EAC5C,MAAM,UAAU,IAAI,aAAa,SAAS;EAC1C,MAAM,aAAa,IAAI;AACvB,OAAK,IAAI,IAAI,GAAG,IAAI,UAAU,KAAK;GAClC,MAAM,IAAI,KAAK,SAAS,MAAM;GAC9B,MAAM,KAAK,KAAK,SAAS,MAAM;AAC/B,WAAQ,KAAK,KAAK,KAAK,IAAI,IAAI,KAAK,GAAG,GAAG,aAAa;;EAExD,MAAM,WAAW,aAAa;EAC9B,MAAM,eAAe,KAAK,IAAI,GAAG,KAAK,MAAM,KAAK,SAAS,CAAC;EAC3D,MAAM,aAAa,KAAK,IAAI,eAAe,GAAG,KAAK,MAAM,MAAM,SAAS,CAAC;EACzE,IAAI,UAAU;AACd,OAAK,IAAI,IAAI,cAAc,KAAK,cAAc,IAAI,UAAU,IAAK,aAAY,QAAQ,MAAM,MAAM,QAAQ,MAAM;EAC/G,MAAM,aAAa,KAAK,IAAI,GAAG,KAAK,KAAK,WAAW,aAAa,eAAe,GAAG,GAAG,EAAE;EACxF,IAAI,UAAU;AACd,OAAK,IAAI,IAAI,GAAG,IAAI,UAAU,KAAK;GAClC,MAAM,QAAQ,QAAQ,MAAM,MAAM,KAAK,aAAa,MAAM;AAC1D,OAAI,OAAO,EAAG,YAAW;AACzB,QAAK,aAAa,KAAK,QAAQ,MAAM;;EAEtC,MAAM,gBAAgB,KAAK,IAAI,GAAG,UAAU,IAAI;EAChD,MAAM,gBAAgB,KAAK,MAAM,MAAM,SAAS;EAChD,MAAM,cAAc,KAAK,IAAI,WAAW,GAAG,KAAK,MAAM,OAAO,SAAS,CAAC;EACvE,IAAI,WAAW;AACf,OAAK,IAAI,IAAI,eAAe,KAAK,aAAa,IAAK,cAAa,QAAQ,MAAM,MAAM,QAAQ,MAAM;AAClG,SAAO;GACN;GACA;GACA;GACA,aAAa,KAAK,IAAI,GAAG,KAAK,KAAK,YAAY,cAAc,gBAAgB,GAAG,GAAG,IAAI;GACvF,QAAQ,UAAU;GAClB;;;;;;;;;;;CAWF,OAAO,eAAe,MAAM;EAC3B,MAAM,aAAa,IAAI,aAAa,WAAW,EAAE;AACjD,aAAW,IAAI,KAAK,SAAS,EAAE;AAC/B,aAAW,QAAQ,KAAK;AACxB,aAAW,QAAQ,KAAK;AACxB,aAAW,QAAQ,KAAK;AACxB,aAAW,QAAQ,KAAK;AACxB,SAAO;;;;;CAKR,OAAO,gBAAgB,QAAQ,MAAM;EACpC,MAAM,YAAY,OAAOA,oBAAkB,eAAe,KAAK,GAAG,IAAI,aAAa,WAAW,EAAE;EAChG,MAAM,SAAS,OAAO,aAAa;GAClC,OAAO;GACP,MAAM;GACN,OAAO,eAAe,UAAU,eAAe;GAC/C,kBAAkB;GAClB,CAAC;AACF,MAAI,aAAa,OAAO,gBAAgB,CAAC,CAAC,IAAI,UAAU;AACxD,SAAO,OAAO;AACd,SAAO;;;;;CAKR,OAAO,gBAAgB,QAAQ,QAAQ,MAAM;EAC5C,MAAM,YAAYA,oBAAkB,eAAe,KAAK;AACxD,SAAO,MAAM,YAAY,QAAQ,GAAG,UAAU;;;;;;AAMhD,IAAI,wBAAwB,MAAM;CACjC,SAAS,EAAE;CACX,6BAA6B,IAAI,SAAS;CAC1C,YAAY,UAAU,YAAY,KAAK,aAAa;AACnD,OAAK,WAAW;AAChB,OAAK,aAAa;AAClB,OAAK,MAAM;AACX,OAAK,cAAc;EACnB,MAAM,SAAS,IAAI,mBAAmB;EACtC,MAAM,QAAQ,cAAc;EAC5B,MAAM,UAAU,OAAO;EACvB,MAAM,gBAAgB,SAAS,IAAI,UAAU;EAC7C,MAAM,iBAAiB,KAAK,IAAI,IAAI,KAAK,KAAK,gBAAgB,QAAQ,QAAQ,GAAG,GAAG;EACpF,MAAM,YAAY,OAAO,gBAAgB,YAAY,OAAO,SAAS,YAAY,IAAI,cAAc,IAAI,KAAK,MAAM,YAAY,GAAG;AACjI,OAAK,SAAS,IAAI,MAAM,UAAU;AAClC,OAAK,IAAI,IAAI,GAAG,IAAI,WAAW,KAAK;GACnC,MAAM,UAAU,IAAI;AACpB,QAAK,OAAO,KAAK,OAAO,cAAc,UAAU,OAAO,QAAQ;;;CAGjE,aAAa,OAAO;EACnB,MAAM,eAAe,KAAK,IAAI,GAAG,KAAK,IAAI,KAAK,cAAc,GAAG,KAAK,MAAM,MAAM,CAAC,CAAC;AACnF,SAAO,KAAK,OAAO,iBAAiB;GACnC,SAAS,IAAI,aAAa,SAAS;GACnC,YAAY;GACZ,eAAe;GACf,aAAa;GACb,QAAQ,eAAe,KAAK,MAAM;GAClC;;CAEF,aAAa,QAAQ,OAAO;EAC3B,IAAI,YAAY,KAAK,WAAW,IAAI,OAAO;AAC3C,MAAI,CAAC,WAAW;AACf,+BAA4B,IAAI,KAAK;AACrC,QAAK,WAAW,IAAI,QAAQ,UAAU;;EAEvC,MAAM,eAAe,KAAK,IAAI,GAAG,KAAK,IAAI,KAAK,cAAc,GAAG,KAAK,MAAM,MAAM,CAAC,CAAC;EACnF,IAAI,SAAS,UAAU,IAAI,aAAa;AACxC,MAAI,CAAC,QAAQ;GACZ,MAAM,OAAO,KAAK,aAAa,aAAa;AAC5C,YAAS,kBAAkB,gBAAgB,QAAQ,KAAK;AACxD,aAAU,IAAI,cAAc,OAAO;;AAEpC,SAAO;;;AAMT,IAAI,cAAc,MAAM;CACvB,wBAAwB,IAAI,KAAK;CACjC,YAAY,QAAQ,UAAU;AAC7B,SAAO,GAAG,YAAY,SAAS,GAAG;;CAEnC,SAAS,QAAQ,QAAQ,UAAU;AAClC,OAAK,MAAM,IAAI,KAAK,YAAY,QAAQ,SAAS,EAAE,OAAO;AAC1D,MAAI,SAAU,MAAK,MAAM,IAAI,KAAK,YAAY,QAAQ,KAAK,EAAE,EAAE,OAAO;;CAEvE,IAAI,QAAQ,UAAU;EACrB,MAAM,MAAM,KAAK,MAAM,IAAI,KAAK,YAAY,QAAQ,SAAS,CAAC;AAC9D,MAAI,CAAC,OAAO,SAAU,QAAO,KAAK,MAAM,IAAI,KAAK,YAAY,QAAQ,KAAK,EAAE,CAAC;AAC7E,SAAO;;CAER,OAAO,QAAQ,UAAU;AACxB,OAAK,MAAM,OAAO,KAAK,YAAY,QAAQ,SAAS,CAAC;;CAEtD,MAAM,UAAU;EACf,MAAM,SAAS,GAAG,SAAS;AAC3B,OAAK,MAAM,OAAO,KAAK,MAAM,MAAM,CAAE,KAAI,IAAI,WAAW,OAAO,CAAE,MAAK,MAAM,OAAO,IAAI;;CAExF,+BAA+B,UAAU,cAAc;EACtD,MAAM,YAAY,SAAS;AAC1B,OAAI,CAAC,KAAM;GACX,MAAM,KAAK,KAAK;AAChB,OAAI,MAAM,GAAG,QACZ;SAAK,MAAM,cAAc,OAAO,OAAO,GAAG,OAAO,CAAE,KAAI,cAAc,WAAW,mBAAmB,WAAW,cAAc,WAAW,WAAW,SAAS,UAAU;KACpK,MAAM,KAAK,WAAW,WAAW;AACjC,SAAI,MAAM,GAAG,QAAQ;MACpB,MAAM,aAAa,GAAG,cAAc,GAAG;AACvC,UAAI,WAAY,MAAK,SAAS,GAAG,QAAQ;OACxC,MAAM;OACN,MAAM,GAAG,gBAAgB,GAAG,QAAQ,UAAU,GAAG,OAAO,QAAQ,iBAAiB,IAAI;OACrF,YAAY,GAAG,gBAAgB,GAAG,cAAc;OAChD,UAAU,GAAG,YAAY,EAAE;OAC3B,EAAE,SAAS;;;;AAIf,OAAI,KAAK,SAAU,MAAK,MAAM,SAAS,KAAK,SAAU,UAAS,MAAM;;AAEtE,WAAS,aAAa;;;AAGxB,MAAM,cAAc,IAAI,aAAa;AAIrC,MAAM,oBAAoB;AACzB,KAAI,OAAO,WAAW,YAAa,QAAO,QAAQ,SAAS;CAC3D,MAAM,QAAQ,WAAW;AACzB,QAAO,OAAO,OAAO,UAAU,aAAa,MAAM,OAAO,GAAG,IAAI,SAAS,gBAAc,WAAWC,aAAW,EAAE,CAAC;;AAEjH,IAAI,uBAAuB,MAAMC,uBAAqB;CACrD,OAAO,sCAAsC,IAAI,SAAS;CAC1D,OAAO,eAAe,QAAQ;EAC7B,IAAI,QAAQA,uBAAqB,oBAAoB,IAAI,OAAO;AAChE,MAAI,CAAC,OAAO;AACX,2BAAwB,IAAI,KAAK;AACjC,0BAAqB,oBAAoB,IAAI,QAAQ,MAAM;;AAE5D,SAAO;;CAER,OAAO,SAAS,QAAQ,UAAU,QAAQ,mBAAmB,IAAI,kBAAkB,GAAG;EACrF,MAAM,WAAW,GAAG,YAAY,SAAS,GAAG,OAAO,GAAG,iBAAiB,GAAG;AAC1E,SAAOA,uBAAqB,oBAAoB,IAAI,OAAO,EAAE,IAAI,SAAS;;CAE3E,OAAO,WAAW,UAAU,QAAQ;AACnC,MAAI,CAAC,OAAQ;EACb,MAAM,QAAQA,uBAAqB,oBAAoB,IAAI,OAAO;AAClE,MAAI,CAAC,MAAO;EACZ,MAAM,SAAS,GAAG,SAAS;AAC3B,OAAK,MAAM,CAAC,KAAKC,aAAW,MAAM,SAAS,CAAE,KAAI,IAAI,WAAW,OAAO,EAAE;AACxE,YAAO,YAAY,SAAS;AAC5B,YAAO,aAAa,SAAS;AAC7B,YAAO,cAAc,SAAS;AAC9B,YAAO,eAAe,SAAS;AAC/B,SAAM,OAAO,IAAI;;;CAGnB,aAAa,QAAQ,QAAQ,QAAQ,UAAU,aAAa,cAAc,OAAO,KAAK,gBAAgB,aAAa,oBAAoB,kBAAkB,GAAG,UAAU,WAAW,OAAO,WAAW,YAAY,cAAc,aAAa,YAAY;EACrP,MAAM,cAAc,SAAS;AAC7B,MAAI,gBAAgB,EAAG;EACvB,MAAM,aAAa,SAAS,GAAG;AAC/B,MAAI,eAAe,EAAG;EACtB,MAAM,iBAAiB,cAAc,KAAK,IAAI,YAAY,MAAM,QAAQ;EACxE,MAAM,kBAAkB,eAAe,KAAK,IAAI,aAAa,MAAM;EACnE,MAAM,iBAAiB,EAAE;EACzB,IAAI,uBAAuB;EAC3B,IAAI,mBAAmB;EACvB,MAAM,gBAAgB,EAAE;EACxB,MAAM,kCAAkC,IAAI,KAAK;EACjD,MAAM,KAAK,aAAa;AACxB,MAAI,IAAI,QAAQ;AACf,QAAK,MAAM,cAAc,OAAO,OAAO,GAAG,OAAO,CAAE,KAAI,YAAY,mBAAmB,WAAW,cAAc,WAAW,WAAW,SAAS,UAAU;IACvJ,MAAM,KAAK,WAAW,WAAW;AACjC,QAAI,GAAI,OAAM,eAAe,4BAA4B,QAAQ,IAAI,KAAK,SAAS;;AAEpF,QAAK,MAAM,CAAC,KAAK,QAAQ,OAAO,QAAQ,GAAG,CAAE,KAAI,IAAI,SAAS,WAAW,IAAI,KAAK;IACjF,MAAM,WAAW;IACjB,MAAM,aAAa,GAAG,OAAO;AAC7B,QAAI,YAAY,mBAAmB,WAAW,cAAc,WAAW,WAAW,SAAS,UAAU;KACpG,MAAM,KAAK,WAAW,WAAW;AACjC,SAAI,IAAI;MACP,MAAM,YAAY,IAAI,QAAQ,YAAY,GAAG;AAC7C,UAAI,UAAU;AACb,sBAAe,KAAK;QACnB,eAAe;QACf,cAAc,GAAG,UAAU;QAC3B,cAAc,GAAG,gBAAgB,GAAG,QAAQ;QAC5C,CAAC;OACF,MAAM,iBAAiB,OAAO,sBAAsB;OACpD,MAAM,MAAM,eAAe,oBAAoB,QAAQ,gBAAgB,GAAG,UAAU,OAAO,gBAAgB,iBAAiB,IAAI,YAAY,aAAa,UAAU,OAAO,IAAI;AAC9K,cAAO,MAAM,OAAO,CAAC,eAAe,QAAQ,CAAC,CAAC;AAC9C,uBAAgB,IAAI,WAAW,IAAI;AACnC,WAAI,CAAC,WAAY,eAAc,KAAK,IAAI;aAClC;OACN,MAAM,eAAe,GAAG;AACxB,WAAI,cAAc;QACjB,MAAM,aAAa,YAAY,IAAI,cAAc,SAAS;AAC1D,YAAI,YAAY;AACf,wBAAe,KAAK;UACnB,eAAe;UACf;UACA,cAAc,WAAW;UACzB,CAAC;AACF,6BAAoB,KAAK,WAAW;SACpC,MAAM,YAAY,EAAE;AACpB,cAAK,MAAM,KAAK,WAAW,UAAU;UACpC,MAAM,IAAI,EAAE;AACZ,oBAAU,KAAK,IAAI,MAAM,IAAI,GAAG,EAAE,QAAQ,EAAE,CAAC,KAAK,GAAG,EAAE,GAAG;;SAE3D,MAAM,OAAO;UACZ;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA,IAAI,eAAe,QAAQ,EAAE,CAAC;UAC9B,GAAG,gBAAgB,QAAQ,EAAE,CAAC;UAC9B,GAAG;UACH;AACD,aAAI,cAAc,aAAc,yBAAwB;gBACjD,aAAa,KAAK,WAAW,KAAK,GAAG,KAAK,KAAK,KAAK,CAAC;oDACjB,aAAa;;;;;;;;;EAS/D,MAAM,iBAAiB,eAAe,WAAW;GAChD,kBAAkB;GAClB,sBAAsB;GACtB,GAAG;GACH;GACA;GACA,CAAC;EACF,MAAM,cAAc,yBAAyB,IAAI,OAAO,sBAAsB,IAAI,SAAS,EAAE,KAAK,eAAe;EACjH,MAAM,iBAAiB,EAAE;AACzB,MAAI,YAAY,cAAc,WAAW,SAAS,EAAG,MAAK,MAAM,KAAK,YAAY;AAChF,OAAI,gBAAgB,IAAI,EAAE,CAAE;GAC5B,MAAM,YAAY,KAAK,OAAO,IAAI,WAAW;AAC7C,OAAI,SAAS,UAAU,EAAE;IACxB,MAAM,aAAa,IAAI,aAAa,WAAW;IAC/C,MAAM,cAAc,kBAAkB,IAAI,kBAAkB,aAAa;AACzE,SAAK,IAAI,IAAI,GAAG,IAAI,YAAY,KAAK;KACpC,MAAM,IAAI,iBAAiB,IAAI;KAC/B,MAAM,IAAI,IAAI;KACd,MAAM,WAAW,cAAc,IAAI,IAAI,cAAc;AACrD,gBAAW,KAAK,OAAO,UAAU,IAAI;MACpC,OAAO;MACP;MACA,MAAM;MACN,UAAU,cAAc;MACxB,YAAY,cAAc;MAC1B;MACA,WAAW,IAAI;MACf,CAAC,CAAC,IAAI;;IAER,MAAM,MAAM,OAAO,aAAa;KAC/B,MAAM,KAAK,IAAI,IAAI,KAAK,KAAK,WAAW,aAAa,GAAG,GAAG,GAAG;KAC9D,OAAO,eAAe,UAAU,eAAe;KAC/C,kBAAkB;KAClB,OAAO,uBAAuB,OAAO,GAAG;KACxC,CAAC;AACF,QAAI,aAAa,IAAI,gBAAgB,CAAC,CAAC,IAAI,WAAW;AACtD,QAAI,OAAO;AACX,oBAAgB,IAAI,GAAG,IAAI;AAC3B,mBAAe,KAAK,IAAI;AACxB,mBAAe,KAAK;KACnB,eAAe;KACf,cAAc,UAAU;KACxB,cAAc;KACd,CAAC;;;AAGJ,MAAI,UACH;OAAI,cAAc,WAAW,SAAS,EAAG,MAAK,IAAI,IAAI,GAAG,IAAI,WAAW,QAAQ,KAAK;IACpF,MAAM,IAAI,WAAW;IACrB,MAAM,MAAM,gBAAgB,IAAI,EAAE;AAClC,QAAI,IAAK,eAAc,KAAK,IAAI;aACvB,WAAW,IAAI,EAAE,CAAE,eAAc,KAAK,eAAe,eAAe,OAAO,CAAC;;YAE7E,cAAc,WAAW,KAAK,WAAW,EAAE,CAAE,eAAc,KAAK,eAAe,eAAe,OAAO,CAAC;;EAEhH,MAAM,mBAAmB,eAAe,KAAK,MAAM,GAAG,EAAE,cAAc,GAAG,EAAE,eAAe,CAAC,KAAK,IAAI;EACpG,MAAM,WAAW,GAAG,YAAY,SAAS,GAAG,OAAO,GAAG,iBAAiB,GAAG;EAC1E,MAAM,cAAcD,uBAAqB,eAAe,OAAO;EAC/D,IAAIC,WAAS,YAAY,IAAI,SAAS;AACtC,MAAI,CAACA,UAAQ;GACZ,MAAM,eAAe,OAAO,mBAAmB;IAC9C,OAAO,gBAAgB,OAAO;IAC9B,MAAM;IACN,CAAC;GACF,MAAM,WAAW,OAAO,sBAAsB;IAC7C,OAAO,wBAAwB;IAC/B,QAAQ;IACR,SAAS;KACR,QAAQ;KACR,YAAY;KACZ;IACD,CAAC;GACF,MAAM,cAAc,OAAO,aAAa;IACvC,MAAM,kBAAkB;IACxB,OAAO,eAAe,UAAU,eAAe;IAC/C,OAAO,eAAe;IACtB,CAAC;GACF,MAAM,cAAc,IAAI,aAAa,gBAAgB;AACrD,OAAI,aAAc,aAAY,IAAI,cAAc,EAAE;AAClD,OAAI,YAAa,aAAY,IAAI,aAAa,EAAE;AAChD,UAAO,MAAM,YAAY,aAAa,GAAG,YAAY;AACrD,cAAS;IACR;IACA;IACA;IACA;AACD,eAAY,IAAI,UAAUA,SAAO;aACvB,YAAa,QAAO,MAAM,YAAYA,SAAO,aAAa,GAAG,YAAY;EACpF,MAAM,aAAa;AACnB,MAAI;AACH,QAAK,IAAI,SAAS,GAAG,SAAS,YAAY,UAAU,YAAY;IAC/D,MAAM,eAAe,KAAK,IAAI,YAAY,aAAa,OAAO;IAC9D,MAAM,WAAWA,SAAO,eAAeA,SAAO,gBAAgBA,SAAO,iBAAiBA,SAAO,oBAAoBA,SAAO,oBAAoB,gBAAgBA,SAAO,qBAAqBA,SAAO,qBAAqB,eAAeA,SAAO,+BAA+BA,SAAO,+BAA+B;IAC/S,IAAI;IACJ,IAAI;IACJ,IAAI;AACJ,QAAI,UAAU;AACb,mBAAcA,SAAO;AACrB,oBAAeA,SAAO;AACtB,qBAAgBA,SAAO;WACjB;KACN,MAAM,eAAe,KAAK,IAAI,cAAc,WAAW;KACvD,MAAM,gBAAgB;KACtB,MAAM,gBAAgB;KACtB,MAAM,aAAa,OAAO,aAAa;MACtC,MAAM,gBAAgB,eAAe;MACrC,OAAO,eAAe,UAAU,eAAe;MAC/C,OAAO,oBAAoB,OAAO,SAAS;MAC3C,CAAC;KACF,MAAM,cAAc,OAAO,aAAa;MACvC,MAAM,gBAAgB,eAAe;MACrC,OAAO,eAAe,UAAU,eAAe;MAC/C,OAAO,qBAAqB,OAAO,SAAS;MAC5C,CAAC;KACF,MAAM,eAAe,OAAO,aAAa;MACxC,MAAM,gBAAgB;MACtB,OAAO,eAAe,UAAU,eAAe;MAC/C,OAAO,uBAAuB,OAAO,SAAS;MAC9C,CAAC;AACF,mBAAc;AACd,oBAAe;AACf,qBAAgB;AAChB,cAAO,aAAa,SAAS;AAC7B,cAAO,cAAc,SAAS;AAC9B,cAAO,eAAe,SAAS;AAC/B,cAAO,cAAc;AACrB,cAAO,eAAe;AACtB,cAAO,gBAAgB;AACvB,cAAO,mBAAmB;AAC1B,cAAO,oBAAoB;AAC3B,cAAO,8BAA8B;;IAEtC,MAAM,gBAAgB,OAAO,aAAa;KACzC,MAAM,cAAc,eAAe;KACnC,OAAO,eAAe,WAAW,eAAe;KAChD,OAAO,sBAAsB,OAAO,SAAS;KAC7C,CAAC;IACF,MAAM,UAAU;KACf;MACC,SAAS;MACT,UAAU,EAAE,QAAQ,eAAe;MACnC;KACD;MACC,SAAS;MACT,UAAU,EAAE,QAAQ,aAAa;MACjC;KACD;MACC,SAAS;MACT,UAAU,EAAE,QAAQ,cAAc;MAClC;KACD;MACC,SAAS;MACT,UAAU,EAAE,QAAQA,SAAO,aAAa;MACxC;KACD;AACD,QAAI,SAAU,MAAK,IAAI,IAAI,GAAG,IAAI,cAAc,QAAQ,KAAK;KAC5D,MAAM,eAAe,IAAI;AACzB,SAAI,WAAW,aAAa,EAAE;MAC7B,MAAM,SAAS,cAAc;AAC7B,UAAI,OAAO,SAAS,SAAS,gBAAgB,EAAG,SAAQ,KAAK;OAC5D,SAAS;OACT,UAAU;QACT,QAAQ;QACR,QAAQ,SAAS;QACjB,MAAM,eAAe;QACrB;OACD,CAAC;UACG,SAAQ,KAAK;OACjB,SAAS;OACT,UAAU;QACT,QAAQ;QACR,QAAQ;QACR,MAAM,OAAO;QACb;OACD,CAAC;;;IAGJ,MAAM,YAAY,OAAO,gBAAgB;KACxC,QAAQA,SAAO,SAAS,mBAAmB,EAAE;KAC7C;KACA,CAAC;IACF,MAAM,YAAY,IAAI,aAAa,cAAc,aAAa;AAC9D,SAAK,IAAI,IAAI,GAAG,IAAI,aAAa,IAAK,WAAU,IAAI,SAAS,GAAG,SAAS,QAAQ,SAAS,aAAa,EAAE,IAAI,aAAa;AAC1H,WAAO,MAAM,YAAY,aAAa,GAAG,UAAU;IACnD,MAAM,WAAW,YAAY,QAAQ,MAAM,SAAS,YAAY;IAChE,IAAI,kBAAkB;AACtB,SAAK,IAAI,IAAI,SAAS,SAAS,GAAG,KAAK,GAAG,IAAK,KAAI,SAAS,OAAO,cAAc,SAAS,IAAI,OAAO,aAAa;AACjH,uBAAkB;AAClB;;AAED,QAAI,oBAAoB,GAAI,mBAAkB,SAAS,QAAQ,WAAW;AAC1E,QAAI,oBAAoB,GAAI,UAAS,mBAAmB;AACxD,WAAO,MAAM,YAAY,eAAe,GAAG,IAAI,aAAa,SAAS,CAAC;IACtE,MAAM,iBAAiB,OAAO,qBAAqB,EAAE,OAAO,iBAAiB,OAAO,SAAS,UAAU,CAAC;IACxG,MAAM,cAAc,eAAe,iBAAiB,EAAE,OAAO,cAAc,OAAO,SAAS,UAAU,CAAC;AACtG,gBAAY,YAAYA,SAAO,SAAS;AACxC,gBAAY,aAAa,GAAG,UAAU;AACtC,gBAAY,mBAAmB,EAAE;AACjC,gBAAY,KAAK;AACjB,mBAAe,mBAAmB,cAAc,GAAG,eAAe,GAAG,cAAc,eAAe,EAAE;AACpG,WAAO,MAAM,OAAO,CAAC,eAAe,QAAQ,CAAC,CAAC;AAC9C,UAAM,cAAc,SAAS,WAAW,KAAK;IAC7C,MAAM,cAAc,IAAI,aAAa,cAAc,gBAAgB,CAAC;AACpE,SAAK,IAAI,IAAI,GAAG,IAAI,aAAa,IAAK,UAAS,GAAG,IAAI,YAAY,SAAS,IAAI,eAAe,IAAI,KAAK,aAAa,EAAE,OAAO;AAC7H,kBAAc,OAAO;AACrB,UAAM,aAAa;;YAEX;AACT,QAAK,MAAM,KAAK,eAAgB,GAAE,SAAS;;;;;;;;;;;;;;;;;AAoB9C,SAAS,WAAW,OAAO;AAC1B,KAAI,SAAS,KAAM,QAAO;EACzB,GAAG;EACH,GAAG;EACH,GAAG;EACH,GAAG;EACH;AACD,KAAI,OAAO,UAAU,SAAU,QAAO;CACtC,MAAM,UAAU,MAAM,MAAM;AAC5B,KAAI,QAAQ,WAAW,EAAG,QAAO;EAChC,GAAG;EACH,GAAG;EACH,GAAG;EACH,GAAG;EACH;CACD,MAAM,SAAS,cAAc,QAAQ;AACrC,KAAI,OAAQ,QAAO;EAClB,GAAG,OAAO;EACV,GAAG,OAAO;EACV,GAAG,OAAO;EACV,GAAG,OAAO;EACV;AACD,QAAO;EACN,GAAG;EACH,GAAG;EACH,GAAG;EACH,GAAG;EACH;;;;;;;;;;AAqBF,SAAS,kBAAkB,QAAQ;AAClC,MAAK,IAAI,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK,GAAG;EAC1C,MAAM,IAAI,OAAO,IAAI;AACrB,MAAI,MAAM,IAAK;AACf,SAAO,MAAM,OAAO,KAAK,IAAI,OAAO,MAAM;AAC1C,SAAO,IAAI,MAAM,OAAO,IAAI,KAAK,IAAI,OAAO,MAAM;AAClD,SAAO,IAAI,MAAM,OAAO,IAAI,KAAK,IAAI,OAAO,MAAM;;AAEnD,QAAO;;AAKR,IAAI,iBAAiB;AACrB,IAAI,cAAc;AAClB,IAAI,cAAc;AAClB,MAAM,mBAAmB;AACzB,SAAS,gBAAgB,SAAS;CACjC,MAAM,OAAO,QAAQ,QAAQ,EAAE;CAC/B,MAAM,MAAM;EACX,QAAQ,OAAO,KAAK,UAAU,GAAG;EACjC,cAAc,OAAO,KAAK,gBAAgB,GAAG;EAC7C,QAAQ,OAAO,KAAK,UAAU,GAAG;EACjC,aAAa,OAAO,KAAK,eAAe,GAAG;EAC3C;CACD,MAAM,WAAW,KAAK,sBAAsB,QAAQ,QAAQ,sBAAsB,QAAQ,iBAAiB,KAAK,GAAG,IAAI,OAAO,GAAG,IAAI,aAAa,GAAG,IAAI,OAAO,GAAG,IAAI,cAAc;AACrL,QAAO;EACN,GAAG;EACH;EACA;;;AAGF,eAAe,cAAc;AAC5B,OAAM,cAAc;AACpB,KAAI,CAAC,YAAa,OAAM,IAAI,MAAM,yBAAyB;AAC3D,QAAO;;AAER,eAAe,cAAc,MAAM;AAClC,KAAI,OAAO,YAAY,eAAe,CAAC,CAAC,QAAQ,UAAU,QAAQ,CAAC,WAAW,WAAW,KAAK;EAC7F,MAAM,EAAE,QAAQ,YAAY,MAAM;;GAEjC;;AAED,SAAO,OAAO,YAAY,QAAQ;EAClC,MAAM,QAAQ,EAAE;AAChB,MAAI,OAAO,WAAW,cAAc,YAAa,YAAW,YAAY,EAAE,KAAK,OAAO,MAAM,EAAE;MACzF,QAAO,eAAe,WAAW,WAAW,OAAO;GACvD,OAAO,OAAO,MAAM;GACpB,cAAc;GACd,UAAU;GACV,CAAC;;CAEH,MAAM,MAAM,WAAW,UAAU;CACjC,MAAM,UAAU,MAAM,IAAI,eAAe;EACxC,iBAAiB;EACjB,GAAG;EACH,CAAC,KAAK,MAAM,uBAAuB,OAAO,MAAM,IAAI,eAAe;EACnE,GAAG;EACH,sBAAsB;EACtB,CAAC;AACF,KAAI,CAAC,QAAS,OAAM,IAAI,MAAM,uBAAuB;AACrD,eAAc,gBAAgB,QAAQ;CACtC,MAAM,mBAAmB,EAAE;AAC3B,KAAI,QAAQ,SAAS,IAAI,qBAAqB,CAAE,kBAAiB,KAAK,qBAAqB;CAC3F,MAAM,iBAAiB,EAAE;AACzB,KAAI,QAAQ,UAAU,OAAO,UAAU,QAAQ,OAAO,sBAAsB,CAAE,gBAAe,wBAAwB,KAAK,IAAI,MAAM,QAAQ,OAAO,sBAAsB;AACzK,KAAI,QAAQ,UAAU,OAAO,UAAU,QAAQ,OAAO,gCAAgC,CAAE,gBAAe,kCAAkC,KAAK,IAAI,IAAI,QAAQ,OAAO,gCAAgC;AACrM,KAAI,QAAQ,UAAU,OAAO,UAAU,QAAQ,OAAO,mCAAmC,CAAE,gBAAe,qCAAqC,KAAK,IAAI,IAAI,QAAQ,OAAO,mCAAmC;AAC9M,QAAO,QAAQ,cAAc;EAC5B;EACA;EACA,CAAC;;AAEH,SAAS,sBAAsB;AAC9B,kBAAiB;AACjB,eAAc;;AAEf,MAAM,eAAe,OAAO,SAAS;AACpC,KAAI,eAAgB,QAAO;AAC3B,KAAI,YAAa,QAAO;AACxB,gBAAe,YAAY;EAC1B,MAAM,MAAM,MAAM,cAAc,KAAK;AACrC,mBAAiB;AACjB,MAAI,KAAK,MAAM,aAAa;AAC3B,OAAI,SAAS,WAAW,YAAa,sBAAqB;IACzD;AACF,SAAO;KACJ;AACJ,QAAO;;;;;;;AAcR,SAAS,2BAA2B;AACnC,QAAO;EACN,aAAa;EACb,cAAc;EACd,8BAA8B;GAC7B,GAAG;GACH,GAAG;GACH,MAAM;GACN,KAAK;GACL,OAAO;GACP,QAAQ;GACR,OAAO;GACP,QAAQ;GACR;EACD,OAAO,EAAE;EACT,mBAAmB;EACnB,mBAAmB;EACnB,wBAAwB;EACxB,2BAA2B;EAC3B,oBAAoB;EACpB;;;AAGF,SAAS,2BAA2B,OAAO,eAAe;AACzD,KAAI,OAAO,MAAM,0BAA0B,YAAa,OAAM,wBAAwB,WAAW;EAChG,MAAM,QAAQ,KAAK,SAAS;EAC5B,MAAM,SAAS,KAAK,UAAU;AAC9B,SAAO;GACN,GAAG;GACH,GAAG;GACH,MAAM;GACN,KAAK;GACL,OAAO;GACP,QAAQ;GACR;GACA;GACA;;AAEF,KAAI,EAAE,WAAW,OAAQ,QAAO,eAAe,OAAO,SAAS;EAC9D,MAAM;AACL,QAAK,WAAW,EAAE;AAClB,UAAO,KAAK;;EAEb,cAAc;EACd,CAAC;AACF,KAAI,EAAE,iBAAiB,OAAQ,QAAO,eAAe,OAAO,eAAe;EAC1E,MAAM;AACL,UAAO,KAAK,SAAS;;EAEtB,cAAc;EACd,CAAC;AACF,KAAI,EAAE,kBAAkB,OAAQ,QAAO,eAAe,OAAO,gBAAgB;EAC5E,MAAM;AACL,UAAO,KAAK,UAAU;;EAEvB,cAAc;EACd,CAAC;AACF,KAAI,EAAE,mBAAmB,OAAQ,QAAO,eAAe,OAAO,iBAAiB;EAC9E,MAAM;AACL,UAAO;;EAER,cAAc;EACd,CAAC;AACF,KAAI,OAAO,MAAM,qBAAqB,YAAa,OAAM,yBAAyB;AAClF,KAAI,OAAO,MAAM,wBAAwB,YAAa,OAAM,4BAA4B;AACxF,KAAI,OAAO,MAAM,iBAAiB,YAAa,OAAM,qBAAqB;;AAE3E,SAAS,kCAAkC;AAC1C,KAAI,OAAO,WAAW,yBAAyB,YAAa,YAAW,uBAAuB,MAAM,qBAAqB;EACxH,UAAU;EACV,YAAY;EACZ,aAAa;;;;AAOf,MAAM,aAAa,OAAO,YAAY,eAAe,mBAAmB,KAAK,QAAQ,KAAK,aAAa,GAAG;AAC1G,SAAS,SAAS,GAAG,MAAM;AAC1B,KAAI,WAAY,SAAQ,MAAM,GAAG,KAAK;;;;;;;;;;;;;;AAiBvC,IAAI,oBAAoB,MAAMC,oBAAkB;CAC/C,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,YAAY,MAAM;AACjB,OAAK,IAAI;AACT,OAAK,IAAI;AACT,OAAK,IAAI;AACT,OAAK,IAAI;AACT,OAAK,IAAI;AACT,OAAK,IAAI;AACT,MAAI,gBAAgBA,qBAAmB;AACtC,QAAK,IAAI,KAAK;AACd,QAAK,IAAI,KAAK;AACd,QAAK,IAAI,KAAK;AACd,QAAK,IAAI,KAAK;AACd,QAAK,IAAI,KAAK;AACd,QAAK,IAAI,KAAK;aACJ,MAAM,QAAQ,KAAK,EAC7B;OAAI,KAAK,WAAW,GAAG;AACtB,SAAK,IAAI,KAAK;AACd,SAAK,IAAI,KAAK;AACd,SAAK,IAAI,KAAK;AACd,SAAK,IAAI,KAAK;AACd,SAAK,IAAI,KAAK;AACd,SAAK,IAAI,KAAK;cACJ,KAAK,WAAW,IAAI;AAC9B,SAAK,IAAI,KAAK;AACd,SAAK,IAAI,KAAK;AACd,SAAK,IAAI,KAAK;AACd,SAAK,IAAI,KAAK;AACd,SAAK,IAAI,KAAK;AACd,SAAK,IAAI,KAAK;;aAEL,QAAQ,OAAO,SAAS,UAAU;AAC5C,QAAK,IAAI,KAAK,KAAK;AACnB,QAAK,IAAI,KAAK,KAAK;AACnB,QAAK,IAAI,KAAK,KAAK;AACnB,QAAK,IAAI,KAAK,KAAK;AACnB,QAAK,IAAI,KAAK,KAAK;AACnB,QAAK,IAAI,KAAK,KAAK;;;CAGrB,SAAS,OAAO;EACf,MAAM,IAAI,IAAIA,qBAAmB;AACjC,IAAE,IAAI,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,MAAM;AACxC,IAAE,IAAI,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,MAAM;AACxC,IAAE,IAAI,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,MAAM;AACxC,IAAE,IAAI,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,MAAM;AACxC,IAAE,IAAI,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,MAAM,IAAI,KAAK;AACjD,IAAE,IAAI,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,MAAM,IAAI,KAAK;AACjD,SAAO;;CAER,UAAU;EACT,MAAM,MAAM,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK;AAC5C,MAAI,QAAQ,EAAG,OAAM,IAAI,MAAM,2BAA2B;EAC1D,MAAM,IAAI,IAAIA,qBAAmB;AACjC,IAAE,IAAI,KAAK,IAAI;AACf,IAAE,IAAI,CAAC,KAAK,IAAI;AAChB,IAAE,IAAI,CAAC,KAAK,IAAI;AAChB,IAAE,IAAI,KAAK,IAAI;AACf,IAAE,KAAK,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,KAAK;AAC5C,IAAE,KAAK,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,KAAK;AAC5C,SAAO;;CAER,eAAe,OAAO;AACrB,SAAO;GACN,GAAG,MAAM,IAAI,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,KAAK;GAC9C,GAAG,MAAM,IAAI,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,KAAK;GAC9C;;CAEF,UAAU,GAAG,GAAG;EACf,MAAM,IAAI,IAAIA,qBAAmB;AACjC,IAAE,IAAI;AACN,IAAE,IAAI;AACN,SAAO,KAAK,SAAS,EAAE;;CAExB,MAAM,IAAI,IAAI;EACb,MAAM,IAAI,IAAIA,qBAAmB;AACjC,IAAE,IAAI;AACN,IAAE,IAAI,MAAM;AACZ,SAAO,KAAK,SAAS,EAAE;;CAExB,OAAO,OAAO;EACb,MAAM,MAAM,QAAQ,KAAK,KAAK;EAC9B,MAAM,MAAM,KAAK,IAAI,IAAI;EACzB,MAAM,MAAM,KAAK,IAAI,IAAI;EACzB,MAAM,IAAI,IAAIA,qBAAmB;AACjC,IAAE,IAAI;AACN,IAAE,IAAI;AACN,IAAE,IAAI,CAAC;AACP,IAAE,IAAI;AACN,SAAO,KAAK,SAAS,EAAE;;;;AAIzB,SAAS,4BAA4B;CACpC,MAAM,SAAS;AACf,KAAI,OAAO,OAAO,cAAc,YAAa,QAAO,YAAY;AAChE,KAAI,OAAO,OAAO,aAAa,YAAa,QAAO,WAAW,MAAM,WAAW;EAC9E,YAAY,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG;AACvC,QAAK,IAAI;AACT,QAAK,IAAI;AACT,QAAK,IAAI;AACT,QAAK,IAAI;;EAEV,OAAO,UAAU,OAAO;AACvB,UAAO,IAAI,WAAW,MAAM,KAAK,GAAG,MAAM,KAAK,GAAG,MAAM,KAAK,GAAG,MAAM,KAAK,EAAE;;;;AAOhF,eAAe,qBAAqB;CACnC,MAAM,EAAE,QAAQ,YAAY,MAAM;;EAEjC;;AAED,MAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,QAAQ,EAAE;AACnD,MAAI,QAAQ,YAAa;AACzB,MAAI;AACH,cAAW,OAAO;WACV,GAAG;AACX,UAAO,eAAe,YAAY,KAAK;IACtC;IACA,cAAc;IACd,YAAY;IACZ,UAAU;IACV,CAAC;;;AAGJ,KAAI,CAAC,WAAW,WAAW,KAAK;EAC/B,MAAM,MAAM,OAAO,EAAE,CAAC;AACtB,WAAS,gCAAgC;AACzC,MAAI,CAAC,WAAW,UAAW,KAAI;AAC9B,cAAW,YAAY,EAAE,KAAK;WACtB,GAAG;AACX,UAAO,eAAe,YAAY,aAAa;IAC9C,OAAO,EAAE,KAAK;IACd,cAAc;IACd,YAAY;IACZ,UAAU;IACV,CAAC;;MAEE,KAAI;AACR,cAAW,UAAU,MAAM;WACnB,GAAG;AACX,UAAO,eAAe,WAAW,WAAW,OAAO;IAClD,OAAO;IACP,cAAc;IACd,YAAY;IACZ,UAAU;IACV,CAAC;;;AAGJ,4BAA2B;AAC3B,KAAI,OAAO,WAAW,sBAAsB,YAAa,YAAW,oBAAoB,OAAO,WAAW;AACzG,UAAQ,MAAM,sDAAsD,OAAO;AAC3E,QAAM,IAAI,MAAM,4HAA4H;;;AAM9I,IAAI,UAAU;AACd,MAAM,gCAAgC,IAAI,KAAK;AAC/C,MAAM,kCAAkC,IAAI,KAAK;AACjD,MAAM,4BAA4B,IAAI,KAAK;AAC3C,MAAM,gCAAgC,IAAI,KAAK;AAC/C,eAAe,iBAAiB,QAAQ,KAAK;CAC5C,MAAM,cAAc;AACpB,KAAI,IAAI,WAAW,IAAI,EAAE;EACxB,MAAM,OAAO,MAAM;;GAElB;;AAED,MAAI;AACH,SAAM,KAAK,OAAO,IAAI;UACf;AACP,SAAM,IAAI,MAAM,cAAc,IAAI,cAAc;;;AAGlD,KAAI,cAAc,IAAI,YAAY,CAAE,QAAO,cAAc,IAAI,YAAY;AACzE,KAAI,YAAY,WAAW,UAAU,CAAE,KAAI;EAC1C,IAAI,WAAW,IAAI,IAAI,YAAY,CAAC;AACpC,MAAI,QAAQ,aAAa,WAAW,SAAS,WAAW,IAAI,CAAE,YAAW,SAAS,MAAM,EAAE;AAC1F,gBAAc,IAAI,aAAa,SAAS;AACxC,SAAO;SACA;EACP,MAAM,WAAW,YAAY,QAAQ,cAAc,GAAG;AACtD,gBAAc,IAAI,aAAa,SAAS;AACxC,SAAO;;AAER,KAAI,CAAC,YAAY,WAAW,UAAU,IAAI,CAAC,YAAY,WAAW,WAAW,CAAE,QAAO;CACtF,MAAM,OAAO,MAAM;;EAElB;;CAED,MAAM,SAAS,MAAM;;EAEpB;;CAED,MAAM,KAAK,MAAM;;EAEhB;;AAED,aAAY,KAAK,QAAQ,OAAO,KAAK,GAAG,QAAQ,EAAE,iBAAiB,CAAC,CAAC,OAAO,QAAQ;AACnF,YAAU;AACV,QAAM;GACL;CACF,MAAM,MAAM,MAAM;CAClB,MAAM,aAAa,OAAO,QAAQ,mBAAmB,IAAI;CACzD,MAAM,SAAS,IAAI,IAAI,YAAY;CACnC,IAAI,MAAM,OAAO,QAAQ,OAAO,SAAS;AACzC,KAAI,CAAC,OAAO,IAAI,SAAS,EAAG,OAAM;CAClC,MAAM,WAAW,OAAO,KAAK,KAAK,GAAG,WAAW,GAAG,KAAK,KAAK,GAAG,MAAM;CACtE,MAAM,WAAW,MAAM,MAAM,YAAY;AACzC,KAAI,CAAC,SAAS,GAAI,OAAM,IAAI,MAAM,6BAA6B,YAAY,IAAI,SAAS,aAAa;CACrG,MAAM,SAAS,MAAM,SAAS,aAAa;AAC3C,OAAM,KAAK,UAAU,UAAU,OAAO,KAAK,OAAO,CAAC;AACnD,eAAc,IAAI,aAAa,SAAS;AACxC,QAAO;;;;;;;;AAQR,eAAe,qBAAqB;AACnC,eAAc,OAAO;AACrB,WAAU,OAAO;AACjB,eAAc,OAAO;AACrB,iBAAgB,OAAO;CACvB,MAAM,UAAU;AAChB,WAAU;AACV,KAAI,SAAS;EACZ,MAAM,OAAO,MAAM;;GAElB;;EAED,MAAM,MAAM,MAAM,QAAQ,YAAY,KAAK,EAAE;AAC7C,MAAI,IAAK,OAAM,KAAK,GAAG,KAAK;GAC3B,WAAW;GACX,OAAO;GACP,CAAC,CAAC,YAAY,GAAG;;;AAGpB,eAAe,qBAAqB,QAAQ,KAAK;AAChD,KAAI,UAAU,IAAI,OAAO,CAAE,QAAO,UAAU,IAAI,OAAO;CACvD,MAAM,YAAY;AAClB,KAAI;EACH,MAAM,WAAW,MAAM,iBAAiB,QAAQ,IAAI;AACpD,YAAU,IAAI,QAAQ,SAAS;AAC/B,WAAS,aAAa,MAAM,sCAAsC,OAAO,SAAS,aAAa,sCAAsC,OAAO,SAAS,IAAI,cAAc,SAAS,GAAG;AACnL,MAAI;AACH,OAAI,UAAU,mBAAmB,OAAO,UAAU,gBAAgB,iBAAiB,YAAY;AAC9F,cAAU,gBAAgB,aAAa,UAAU,EAAE,QAAQ,CAAC;AAC5D,oBAAgB,IAAI,OAAO;;WAEpB,SAAS;AACjB,WAAQ,KAAK,8DAA8D,OAAO,iBAAiB,QAAQ;;AAE5G,SAAO;UACC,GAAG;AACX,UAAQ,KAAK,mDAAmD,OAAO,SAAS,IAAI,IAAI,EAAE;;;;AAI5F,SAAS,oBAAoB,QAAQ;AACpC,QAAO,UAAU,IAAI,OAAO;;AAE7B,eAAe,oBAAoB,QAAQ;CAC1C,MAAMD,WAAS,cAAc,IAAI,OAAO;AACxC,KAAIA,SAAQ,QAAOA;CACnB,MAAM,SAAS,UAAU,IAAI,OAAO;AACpC,KAAI,OAAQ,KAAI;EACf,MAAM,MAAM,OAAO,MAAM;;GAExB;GACA,SAAS,OAAO;EACjB,MAAM,QAAQ,IAAI,WAAW,IAAI,OAAO;AACxC,QAAM,IAAI,IAAI;AACd,WAAS,qDAAqD,OAAO,UAAU,OAAO,IAAI,MAAM,OAAO,SAAS;AAChH,gBAAc,IAAI,QAAQ,MAAM;AAChC,SAAO;UACC,GAAG;AACX,UAAQ,KAAK,uDAAuD,OAAO,IAAI,EAAE;;;AAMnF,MAAM,sBAAsB,OAAO,YAAY,eAAe,QAAQ,QAAQ,UAAU,KAAK;;;;;AAK7F,MAAM,aAAa;;;;;;;AAOnB,eAAe,YAAY,KAAK;AAC/B,KAAI,CAAC,eAAe,CAAE,QAAO;AAC7B,KAAI,IAAI,WAAW,QAAQ,EAAE;EAC5B,MAAM,EAAE,kBAAkB,MAAM;;;GAG/B;;AAED,SAAO,cAAc,IAAI;;AAE1B,KAAI,WAAW,KAAK,IAAI,CAAE,QAAO;CACjC,MAAM,EAAE,SAASF,gBAAc,MAAM;;;EAGpC;;AAED,QAAOA,YAAU,IAAI;;;AAMtB,SAAS,gBAAgB,KAAK,QAAQ;CACrC,IAAI,cAAc;AAClB,KAAI,CAAC,UAAU,OAAO,WAAW,aAAa;AAC7C,MAAI,YAAY,WAAW,UAAU,CAAE,eAAc,YAAY,MAAM,EAAE;AACzE,MAAI,YAAY,WAAW,IAAI,IAAI,CAAC,YAAY,WAAW,QAAQ,IAAI,CAAC,YAAY,WAAW,QAAQ,CAAE,eAAc,SAAS;;AAEjI,QAAO;;AAER,SAAS,WAAW,QAAQ;AAC3B,KAAI;AACH,SAAO,mBAAmB,OAAO;SAC1B;AACP,SAAO;;;AAGT,eAAe,mBAAmB,UAAU,KAAK;CAChD,MAAM,EAAE,SAAS,MAAM;;;EAGtB;;CAED,IAAI;AACJ,KAAI;AACH,YAAU,MAAM,KAAK,SAAS,EAAE,QAAQ;UAChC,KAAK;AACb,QAAM,IAAI,MAAM,iCAAiC,SAAS,WAAW,IAAI,MAAM,IAAI,WAAW,EAAE,OAAO,KAAK,CAAC;;AAE9G,KAAI,CAAC,OAAQ,OAAM,IAAI,MAAM,iCAAiC,SAAS,WAAW,IAAI,wBAAwB;;AAE/G,IAAI,aAAa,MAAM;CACtB,wBAAwB,IAAI,KAAK;CACjC,MAAM,QAAQ,KAAK;AAClB,MAAI,CAAC,IAAK,OAAM,IAAI,MAAM,qCAAqC;EAC/D,MAAM,cAAc,gBAAgB,KAAK,eAAe,CAAC;EACzD,IAAI,SAAS,KAAK,MAAM,IAAI,YAAY;AACxC,MAAI,CAAC,QAAQ;GACZ,MAAM,WAAW,YAAY;IAC5B,MAAM,WAAW,MAAM,YAAY,YAAY,WAAW,QAAQ,GAAG,cAAc,WAAW,YAAY,CAAC;IAC3G,IAAI;AACJ,QAAI,aAAa,MAAM;AACtB,WAAM,mBAAmB,UAAU,IAAI;AACvC,cAAS,IAAI,eAAe,SAAS;UAC/B,UAAS,IAAI,UAAU,YAAY;AAC1C,WAAO,IAAI,MAAM;KAChB;KACA,SAAS;KACT,CAAC;OACC;AACJ,WAAQ,YAAY;AACnB,SAAK,MAAM,OAAO,YAAY;KAC7B;AACF,YAAS;IACR;IACA,UAAU;IACV;AACD,QAAK,MAAM,IAAI,aAAa,OAAO;;AAEpC,SAAO;AACP,SAAO,OAAO;;;;;;CAMf,QAAQ;EACP,MAAM,UAAU,CAAC,GAAG,KAAK,MAAM,QAAQ,CAAC;AACxC,OAAK,MAAM,OAAO;AAClB,OAAK,MAAM,UAAU,QAAS,QAAO,QAAQ,MAAM,UAAU;AAC5D,OAAI;AACH,UAAM,SAAS;YACP,GAAG;WACJ,GAAG;;CAEb,QAAQ,KAAK;AACZ,MAAI,CAAC,IAAK;EACV,MAAM,cAAc,gBAAgB,KAAK,eAAe,CAAC;EACzD,MAAM,SAAS,KAAK,MAAM,IAAI,YAAY;AAC1C,MAAI,CAAC,OAAQ;AACb,SAAO;AACP,MAAI,OAAO,YAAY,GAAG;AACzB,QAAK,MAAM,OAAO,YAAY;AAC9B,UAAO,QAAQ,MAAM,UAAU;AAC9B,QAAI;AACH,WAAM,SAAS;aACP,GAAG;YACJ,GAAG;;;;AAIf,MAAM,aAAa,IAAI,YAAY;;AAKnC,MAAM,cAAc;CACnB,QAAQ;CACR,QAAQ;CACR,SAAS;CACT,SAAS;CACT,QAAQ;CACR,QAAQ;CACR,SAAS;CACT,SAAS;CACT;;AAED,SAAS,YAAY,MAAM;AAC1B,QAAO,YAAY,KAAK,QAAQ,KAAK,CAAC,aAAa,KAAK;;;AAGzD,SAAS,mBAAmB,MAAM;CACjC,MAAM,MAAM,KAAK,QAAQ,KAAK,QAAQ,OAAO,IAAI,CAAC,CAAC,aAAa;AAChE,QAAO,CAAC,OAAO,OAAO;;;;;;;;AAQvB,SAAS,gBAAgB,KAAK,UAAU;AACvC,KAAI,CAAC,OAAO,OAAO,OAAO,eAAe,CAAC,GAAG,WAAY,QAAO,KAAK;AACrE,KAAI,CAAC,mBAAmB,IAAI,CAAE,QAAO,KAAK;CAC1C,IAAI,UAAU,IAAI,MAAM,CAAC,QAAQ,cAAc,GAAG;AAClD,KAAI;AACH,YAAU,mBAAmB,QAAQ;UAC7B,GAAG;CACZ,MAAM,aAAa,QAAQ,QAAQ,OAAO,IAAI;CAC9C,MAAM,WAAW,WAAW,MAAM,IAAI,CAAC,KAAK,IAAI;CAChD,MAAM,aAAa,EAAE;AACrB,KAAI,KAAK,WAAW,WAAW,CAAE,YAAW,KAAK,WAAW;AAC5D,KAAI,UAAU;AACb,aAAW,KAAK,KAAK,QAAQ,UAAU,WAAW,CAAC;AACnD,aAAW,KAAK,KAAK,KAAK,UAAU,SAAS,CAAC;AAC9C,aAAW,KAAK,KAAK,KAAK,UAAU,YAAY,SAAS,CAAC;AAC1D,MAAI;AACH,QAAK,MAAM,SAAS,GAAG,YAAY,SAAS,CAAE,KAAI,MAAM,aAAa,CAAC,SAAS,OAAO,CAAE,YAAW,KAAK,KAAK,KAAK,UAAU,OAAO,SAAS,CAAC;WACrI,GAAG;;AAEb,MAAK,MAAM,QAAQ,WAAY,KAAI;AAClC,MAAI,GAAG,WAAW,KAAK,IAAI,GAAG,SAAS,KAAK,CAAC,QAAQ,CAAE,QAAO;GAC7D,OAAO,IAAI,WAAW,GAAG,aAAa,KAAK,CAAC;GAC5C,MAAM,YAAY,KAAK;GACvB;UACO,GAAG;;;AAGb,SAAS,mBAAmB,QAAQ,UAAU,KAAK;CAClD,MAAM,SAAS,mBAAmB,IAAI,GAAG,kBAAkB,oCAAoC,OAAO,KAAK,YAAY,CAAC,KAAK,KAAK,CAAC;AACnI,SAAQ,KAAK,IAAI,OAAO,aAAa,IAAI,kBAAkB,SAAS,IAAI,OAAO,oCAAoC;;AAKpH,IAAI,YAAY,MAAMI,YAAU;;;;CAI/B,OAAO,MAAM,SAAS,kBAAkB,cAAc;EACrD,MAAM,UAAU,OAAO,qBAAqB,YAAY,qBAAqB,OAAO,mBAAmB,gBAAgB,EAAE;EACzH,MAAM,UAAU,OAAO,qBAAqB,WAAW,mBAAmB,QAAQ;EAClF,MAAM,eAAe,EAAE;EACvB,MAAM,aAAa,EAAE;EACrB,MAAM,SAAS,EAAE;EACjB,MAAM,eAAe,EAAE;EACvB,IAAI,iBAAiB;GACpB,cAAc;GACd,OAAO,EAAE;GACT;AACD,eAAa,KAAK,eAAe;EACjC,MAAM,YAAY,EAAE;AACpB,MAAI,QAAS,QAAO,OAAO,WAAWA,YAAU,aAAaA,YAAU,SAAS,QAAQ,EAAE,QAAQ,SAAS,CAAC;EAC5G,MAAM,QAAQ,QAAQ,MAAM,QAAQ;AACpC,OAAK,IAAI,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;GACtC,MAAM,OAAO,MAAM,IAAI,MAAM;AAC7B,OAAI,CAAC,QAAQ,KAAK,WAAW,IAAI,CAAE;GACnC,MAAM,QAAQ,KAAK,MAAM,MAAM;GAC/B,MAAM,MAAM,MAAM,IAAI,aAAa;AACnC,OAAI,QAAQ,UAAU;IACrB,MAAM,cAAc,MAAM,MAAM,EAAE,CAAC,KAAK,IAAI,CAAC,MAAM;AACnD,QAAI,QAAQ,YAAY,OAAO,OAAO,eAAe,GAAG,WAAY,KAAI;KACvE,MAAM,kBAAkB,KAAK,QAAQ,QAAQ,UAAU,YAAY;AACnE,SAAI,GAAG,WAAW,gBAAgB,EAAE;MACnC,MAAM,UAAU,GAAG,aAAa,iBAAiB,QAAQ;AACzD,aAAO,OAAO,WAAWA,YAAU,aAAaA,YAAU,SAAS,QAAQ,EAAE,KAAK,QAAQ,gBAAgB,CAAC,CAAC;;aAErG,GAAG;cACF,QAAQ,KAAK;IACvB,MAAM,IAAI,OAAO,WAAW,MAAM,MAAM,IAAI;IAC5C,MAAM,IAAI,OAAO,WAAW,MAAM,MAAM,IAAI;IAC5C,MAAM,IAAI,OAAO,WAAW,MAAM,MAAM,IAAI;AAC5C,iBAAa,KAAK;KACjB;KACA;KACA;KACA,CAAC;cACQ,QAAQ,MAAM;IACxB,MAAM,KAAK,OAAO,WAAW,MAAM,MAAM,IAAI;IAC7C,MAAM,KAAK,OAAO,WAAW,MAAM,MAAM,IAAI;IAC7C,MAAM,KAAK,OAAO,WAAW,MAAM,MAAM,IAAI;AAC7C,eAAW,KAAK;KACf;KACA;KACA;KACA,CAAC;cACQ,QAAQ,MAAM;IACxB,MAAM,IAAI,OAAO,WAAW,MAAM,MAAM,IAAI;IAC5C,MAAM,IAAI,MAAM,OAAO,KAAK,IAAI,OAAO,WAAW,MAAM,GAAG,GAAG;AAC9D,WAAO,KAAK,CAAC,GAAG,EAAE,CAAC;cACT,QAAQ,UAAU;IAC5B,MAAM,UAAU,MAAM,MAAM;AAC5B,QAAI,eAAe,MAAM,SAAS,GAAG;AACpC,sBAAiB;MAChB,cAAc;MACd,OAAO,EAAE;MACT;AACD,kBAAa,KAAK,eAAe;UAC3B,gBAAe,eAAe;cAC3B,QAAQ,KAAK;IACvB,MAAM,eAAe,EAAE;AACvB,SAAK,IAAI,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;KACtC,MAAM,UAAU,MAAM;AACtB,SAAI,CAAC,QAAS;KACd,MAAM,UAAU,QAAQ,MAAM,IAAI;KAClC,IAAI,OAAO,OAAO,SAAS,QAAQ,MAAM,KAAK,GAAG;KACjD,IAAI,QAAQ,QAAQ,MAAM,QAAQ,GAAG,SAAS,IAAI,OAAO,SAAS,QAAQ,IAAI,GAAG,GAAG;KACpF,IAAI,QAAQ,QAAQ,MAAM,QAAQ,GAAG,SAAS,IAAI,OAAO,SAAS,QAAQ,IAAI,GAAG,GAAG;AACpF,SAAI,OAAO,EAAG,QAAO,aAAa,SAAS,OAAO;AAClD,SAAI,QAAQ,EAAG,SAAQ,OAAO,SAAS,QAAQ;AAC/C,SAAI,QAAQ,EAAG,SAAQ,WAAW,SAAS,QAAQ;AACnD,kBAAa,KAAK;MACjB,GAAG,OAAO;MACV,IAAI,QAAQ;MACZ,IAAI,QAAQ;MACZ,CAAC;;AAEH,QAAI,aAAa,UAAU,EAAG,MAAK,IAAI,IAAI,GAAG,IAAI,aAAa,SAAS,GAAG,KAAK;KAC/E,MAAM,KAAK,aAAa;KACxB,MAAM,KAAK,aAAa;KACxB,MAAM,KAAK,aAAa,IAAI;AAC5B,SAAI,MAAM,MAAM,GAAI,gBAAe,MAAM,KAAK;MAC7C;MACA;MACA;MACA,CAAC;;;;EAIL,IAAI,OAAO;EACX,IAAI,OAAO;EACX,IAAI,OAAO;EACX,IAAI,OAAO;EACX,IAAI,OAAO;EACX,IAAI,OAAO;AACX,OAAK,MAAM,OAAO,cAAc;GAC/B,MAAM,CAAC,IAAI,IAAI,MAAM;AACrB,OAAI,OAAO,KAAK,KAAK,OAAO,KAAK,KAAK,OAAO,KAAK,EAAG;AACrD,OAAI,KAAK,KAAM,QAAO;AACtB,OAAI,KAAK,KAAM,QAAO;AACtB,OAAI,KAAK,KAAM,QAAO;AACtB,OAAI,KAAK,KAAM,QAAO;AACtB,OAAI,KAAK,KAAM,QAAO;AACtB,OAAI,KAAK,KAAM,QAAO;;AAEvB,MAAI,CAAC,OAAO,SAAS,KAAK,EAAE;AAC3B,UAAO;AACP,UAAO;AACP,UAAO;AACP,UAAO;AACP,UAAO;AACP,UAAO;;EAER,MAAM,WAAW,OAAO,QAAQ;EAChC,MAAM,WAAW,OAAO,QAAQ;EAChC,MAAM,WAAW,OAAO,QAAQ;EAChC,MAAM,QAAQ,KAAK,IAAI,MAAM,OAAO,KAAK;EACzC,MAAM,QAAQ,KAAK,IAAI,MAAM,OAAO,KAAK;EACzC,MAAM,QAAQ,KAAK,IAAI,MAAM,OAAO,KAAK;EACzC,MAAM,SAAS,KAAK,IAAI,OAAO,OAAO,MAAM;EAC5C,IAAI,kBAAkB;AACtB,MAAI,QAAQ,iBAAiB,QAAQ,gBAAgB,EAAG,mBAAkB,QAAQ,gBAAgB;AAClG,MAAI,OAAO,QAAQ,UAAU,SAAU,oBAAmB,QAAQ;EAClE,MAAM,eAAe,QAAQ,UAAU;EACvC,MAAM,UAAU,eAAe,UAAU;EACzC,MAAM,UAAU,eAAe,UAAU;EACzC,MAAM,UAAU,eAAe,UAAU;EACzC,MAAM,SAAS,EAAE;AACjB,OAAK,IAAI,OAAO,GAAG,OAAO,aAAa,QAAQ,QAAQ;GACtD,MAAM,UAAU,aAAa;AAC7B,OAAI,CAAC,WAAW,QAAQ,MAAM,WAAW,EAAG;GAC5C,MAAM,4BAA4B,IAAI,KAAK;GAC3C,MAAM,YAAY,EAAE;GACpB,MAAM,UAAU,EAAE;GAClB,MAAM,MAAM,EAAE;GACd,MAAM,UAAU,EAAE;GAClB,IAAI,mBAAmB;AACvB,QAAK,MAAM,OAAO,QAAQ,MAAO,MAAK,MAAM,QAAQ,KAAK;IACxD,MAAM,MAAM,GAAG,KAAK,EAAE,GAAG,KAAK,GAAG,GAAG,KAAK;IACzC,IAAI,WAAW,UAAU,IAAI,IAAI;AACjC,QAAI,aAAa,KAAK,GAAG;AACxB,gBAAW,UAAU,SAAS;AAC9B,eAAU,IAAI,KAAK,SAAS;KAC5B,MAAM,SAAS,aAAa,KAAK,MAAM;MACtC;MACA;MACA;MACA;KACD,MAAM,OAAO,OAAO,MAAM,KAAK,WAAW;KAC1C,MAAM,OAAO,OAAO,MAAM,KAAK,WAAW;KAC1C,MAAM,OAAO,OAAO,MAAM,KAAK,WAAW;AAC1C,eAAU,KAAK,IAAI,IAAI,GAAG;AAC1B,SAAI,KAAK,MAAM,KAAK,OAAO,KAAK,KAAK;MACpC,MAAM,KAAK,OAAO,KAAK;AACvB,UAAI,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG;WAChC,KAAI,KAAK,GAAG,EAAE;AACrB,SAAI,KAAK,MAAM,KAAK,WAAW,KAAK,KAAK;AACxC,yBAAmB;MACnB,MAAM,OAAO,WAAW,KAAK;AAC7B,cAAQ,KAAK,KAAK,MAAM,GAAG,KAAK,MAAM,GAAG,KAAK,MAAM,EAAE;WAChD,SAAQ,KAAK,GAAG,GAAG,EAAE;;AAE7B,YAAQ,KAAK,SAAS;;AAEvB,OAAI,CAAC,oBAAoB,QAAQ,eAAe;IAC/C,MAAM,kBAAkB,IAAI,aAAa,UAAU,OAAO;AAC1D,SAAK,IAAI,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK,GAAG;KAC3C,MAAM,KAAK,QAAQ;KACnB,MAAM,KAAK,QAAQ,IAAI;KACvB,MAAM,KAAK,QAAQ,IAAI;KACvB,MAAM,KAAK;MACV,UAAU,KAAK;MACf,UAAU,KAAK,IAAI;MACnB,UAAU,KAAK,IAAI;MACnB;KACD,MAAM,KAAK;MACV,UAAU,KAAK;MACf,UAAU,KAAK,IAAI;MACnB,UAAU,KAAK,IAAI;MACnB;KACD,MAAM,KAAK;MACV,UAAU,KAAK;MACf,UAAU,KAAK,IAAI;MACnB,UAAU,KAAK,IAAI;MACnB;KACD,MAAM,QAAQ,YAAY,SAAS,IAAI,GAAG;KAC1C,MAAM,QAAQ,YAAY,SAAS,IAAI,GAAG;KAC1C,MAAM,aAAa,YAAY,MAAM,OAAO,MAAM;AAClD,qBAAgB,KAAK,MAAM,WAAW;AACtC,qBAAgB,KAAK,IAAI,MAAM,WAAW;AAC1C,qBAAgB,KAAK,IAAI,MAAM,WAAW;AAC1C,qBAAgB,KAAK,MAAM,WAAW;AACtC,qBAAgB,KAAK,IAAI,MAAM,WAAW;AAC1C,qBAAgB,KAAK,IAAI,MAAM,WAAW;AAC1C,qBAAgB,KAAK,MAAM,WAAW;AACtC,qBAAgB,KAAK,IAAI,MAAM,WAAW;AAC1C,qBAAgB,KAAK,IAAI,MAAM,WAAW;;AAE3C,SAAK,IAAI,IAAI,GAAG,IAAI,UAAU,SAAS,GAAG,KAAK;KAC9C,MAAM,KAAK,gBAAgB,IAAI;KAC/B,MAAM,KAAK,gBAAgB,IAAI,IAAI;KACnC,MAAM,KAAK,gBAAgB,IAAI,IAAI;KACnC,MAAM,MAAM,KAAK,MAAM,IAAI,IAAI,GAAG,IAAI;AACtC,aAAQ,IAAI,KAAK,KAAK;AACtB,aAAQ,IAAI,IAAI,KAAK,KAAK;AAC1B,aAAQ,IAAI,IAAI,KAAK,KAAK;;;GAG5B,MAAM,aAAa,UAAU,SAAS,IAAI,QAAQ,IAAI,YAAY,QAAQ,GAAG,IAAI,YAAY,QAAQ;AACrG,UAAO,KAAK;IACX,IAAI,QAAQ;IACZ,MAAM,QAAQ;IACd,WAAW,IAAI,aAAa,UAAU;IACtC,SAAS,IAAI,aAAa,QAAQ;IAClC,KAAK,IAAI,aAAa,IAAI;IAC1B,SAAS;IACT,cAAc,QAAQ;IACtB,CAAC;;EAEH,MAAM,aAAa,OAAO,WAAW;EACrC,MAAM,aAAa,OAAO,WAAW;EACrC,MAAM,aAAa,OAAO,WAAW;EACrC,MAAM,aAAa,OAAO,WAAW;EACrC,MAAM,aAAa,OAAO,WAAW;EACrC,MAAM,aAAa,OAAO,WAAW;EACrC,MAAM,aAAa,YAAY;EAC/B,MAAM,aAAa,YAAY;EAC/B,MAAM,aAAa,YAAY;EAC/B,MAAM,gBAAgB,YAAY,aAAa;EAC/C,MAAM,gBAAgB,YAAY,aAAa;EAC/C,MAAM,gBAAgB,YAAY,aAAa;EAC/C,MAAM,eAAe,KAAK,MAAM,YAAY,YAAY,WAAW,GAAG;AACtE,SAAO;GACN;GACA;GACA,YAAY,EAAE;GACd,QAAQ;IACP,KAAK;KACJ;KACA;KACA;KACA;IACD,KAAK;KACJ;KACA;KACA;KACA;IACD,QAAQ;KACP;KACA;KACA;KACA;IACD,MAAM;KACL;KACA;KACA;KACA;IACD,sBAAsB;IACtB;GACD;;;;;CAKF,OAAO,SAAS,SAAS;EACxB,MAAM,YAAY,EAAE;EACpB,IAAI,aAAa;EACjB,MAAM,QAAQ,QAAQ,MAAM,QAAQ;AACpC,OAAK,MAAM,WAAW,OAAO;GAC5B,MAAM,OAAO,QAAQ,MAAM;AAC3B,OAAI,CAAC,QAAQ,KAAK,WAAW,IAAI,CAAE;GACnC,MAAM,QAAQ,KAAK,MAAM,MAAM;GAC/B,MAAM,MAAM,MAAM,IAAI,aAAa;AACnC,OAAI,QAAQ,UAAU;IACrB,MAAM,OAAO,MAAM,MAAM;AACzB,iBAAa;KACZ;KACA,cAAc;MACb;MACA;MACA;MACA;MACA;KACD,eAAe;MACd;MACA;MACA;MACA;KACD,cAAc;MACb;MACA;MACA;MACA;KACD,WAAW;KACX,SAAS;KACT;AACD,cAAU,QAAQ;cACR,YACV;QAAI,QAAQ,MAAM;KACjB,MAAM,IAAI,OAAO,WAAW,MAAM,MAAM,IAAI;KAC5C,MAAM,MAAM,OAAO,WAAW,MAAM,MAAM,IAAI;KAC9C,MAAM,IAAI,OAAO,WAAW,MAAM,MAAM,IAAI;AAC5C,gBAAW,eAAe;MACzB;MACA;MACA;MACA,WAAW,eAAe,MAAM;MAChC;eACS,QAAQ,MAAM;KACxB,MAAM,IAAI,OAAO,WAAW,MAAM,MAAM,IAAI;KAC5C,MAAM,MAAM,OAAO,WAAW,MAAM,MAAM,IAAI;KAC9C,MAAM,IAAI,OAAO,WAAW,MAAM,MAAM,IAAI;AAC5C,gBAAW,gBAAgB;MAC1B;MACA;MACA;MACA;AACD,gBAAW,qBAAqB,IAAI,MAAM,KAAK;eACrC,QAAQ,MAAM;KACxB,MAAM,IAAI,OAAO,WAAW,MAAM,MAAM,MAAM;KAC9C,MAAM,MAAM,OAAO,WAAW,MAAM,MAAM,MAAM;KAChD,MAAM,IAAI,OAAO,WAAW,MAAM,MAAM,MAAM;AAC9C,gBAAW,eAAe;MACzB;MACA;MACA;MACA;eACS,QAAQ,KAAM,YAAW,YAAY,OAAO,WAAW,MAAM,MAAM,KAAK;aAC1E,QAAQ,OAAO,QAAQ,MAAM;KACrC,MAAM,MAAM,OAAO,WAAW,MAAM,MAAM,IAAI;AAC9C,gBAAW,UAAU,QAAQ,MAAM,MAAM,IAAI;AAC7C,SAAI,WAAW,aAAc,YAAW,aAAa,KAAK,WAAW;eAC3D,QAAQ,UAAU;AAC5B,gBAAW,iBAAiBA,YAAU,YAAY,MAAM;KACxD,MAAM,QAAQ,MAAM,WAAW,MAAM,EAAE,aAAa,KAAK,SAAS;AAClE,gBAAW,cAAc,QAAQ,KAAK,MAAM,QAAQ,IAAI,aAAa,KAAK,OAAO,UAAU;eACjF,QAAQ,UAAU,QAAQ,SAAU,YAAW,gBAAgBA,YAAU,YAAY,MAAM;;;AAGxG,SAAO;;;CAGR,OAAO,kBAAkB;EACxB,WAAW;EACX,WAAW;EACX,OAAO;EACP,UAAU;EACV,WAAW;EACX,OAAO;EACP,UAAU;EACV,YAAY;EACZ,SAAS;EACT,OAAO;EACP;;CAED,OAAO,YAAY,OAAO;EACzB,IAAI,IAAI;AACR,SAAO,IAAI,MAAM,UAAU,MAAM,IAAI,WAAW,IAAI,EAAE;GACrD,MAAM,SAAS,MAAM,GAAG,aAAa;AACrC;AACA,OAAI,WAAW,QAAQ,WAAW,QAAQ,WAAW,KAAM,MAAK,IAAI,IAAI,GAAG,IAAI,KAAK,IAAI,MAAM,QAAQ,KAAK;AAC1G,QAAI,OAAO,MAAM,OAAO,MAAM,GAAG,CAAC,CAAE;AACpC;;OAEI,MAAKA,YAAU,gBAAgB,WAAW;;AAEhD,SAAO,MAAM,MAAM,EAAE,CAAC,KAAK,IAAI;;;CAGhC,OAAO,aAAa,WAAW,KAAK;AACnC,MAAI,CAAC,IAAK,QAAO;AACjB,OAAK,MAAM,OAAO,OAAO,OAAO,UAAU,EAAE;AAC3C,OAAI,IAAI,kBAAkB,CAAC,IAAI,sBAAsB;IACpD,MAAM,OAAO,gBAAgB,IAAI,gBAAgB,IAAI;AACrD,QAAI,MAAM;AACT,SAAI,uBAAuB,KAAK;AAChC,SAAI,qBAAqB,KAAK;UACxB,oBAAmB,aAAa,IAAI,MAAM,IAAI,eAAe;;AAErE,OAAI,IAAI,iBAAiB,CAAC,IAAI,qBAAqB;IAClD,MAAM,OAAO,gBAAgB,IAAI,eAAe,IAAI;AACpD,QAAI,KAAM,KAAI,sBAAsB,KAAK;QACpC,oBAAmB,aAAa,IAAI,MAAM,IAAI,cAAc;;;AAGnE,SAAO;;;AAGT,SAAS,SAAS,SAAS,SAAS,UAAU,EAAE,EAAE;AACjD,QAAO,UAAU,MAAM,SAAS,SAAS,QAAQ;;AAElD,SAAS,SAAS,SAAS;AAC1B,QAAO,UAAU,SAAS,QAAQ;;AAEnC,SAAS,QAAQ,WAAW,SAAS,UAAU,EAAE,EAAE;CAClD,IAAI;AACJ,KAAI,OAAO,cAAc,SAAU,QAAO,IAAI,aAAa,CAAC,OAAO,UAAU;MACxE;EACJ,MAAM,UAAU,UAAU,MAAM;AAChC,MAAI,EAAE,QAAQ,WAAW,KAAK,IAAI,QAAQ,WAAW,IAAI,IAAI,QAAQ,SAAS,OAAO,IAAI,QAAQ,SAAS,OAAO,KAAK,OAAO,OAAO,eAAe,GAAG,WAAY,KAAI;GACrK,IAAI,WAAW,UAAU,WAAW,UAAU,GAAG,UAAU,MAAM,EAAE,GAAG;AACtE,OAAI;AACH,eAAW,mBAAmB,SAAS;YAC/B,GAAG;AACZ,OAAI,GAAG,WAAW,SAAS,EAAE;AAC5B,WAAO,GAAG,aAAa,UAAU,QAAQ;AACzC,cAAU;KACT,UAAU,QAAQ,YAAY,KAAK,QAAQ,SAAS;KACpD,GAAG;KACH;SACK,QAAO;WACN,GAAG;AACX,UAAO;;MAEH,QAAO;;AAEb,QAAO,UAAU,MAAM,MAAM,SAAS,QAAQ;;;;;;AAS/C,SAAS,wBAAwB,WAAW,SAAS,SAAS;CAC7D,MAAM,UAAU,MAAM;EACrB,UAAU,IAAI;EACd,UAAU,IAAI,IAAI;EAClB,UAAU,IAAI,IAAI;EAClB;AACD,MAAK,IAAI,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK,GAAG;EAC3C,MAAM,KAAK,QAAQ;EACnB,MAAM,KAAK,QAAQ,IAAI;EACvB,MAAM,KAAK,QAAQ,IAAI;EACvB,MAAM,KAAK,OAAO,GAAG;EACrB,MAAM,KAAK,YAAY,MAAM,YAAY,SAAS,OAAO,GAAG,EAAE,GAAG,EAAE,YAAY,SAAS,OAAO,GAAG,EAAE,GAAG,CAAC;AACxG,OAAK,MAAM,KAAK;GACf;GACA;GACA;GACA,EAAE;AACF,WAAQ,IAAI,MAAM,GAAG;AACrB,WAAQ,IAAI,IAAI,MAAM,GAAG;AACzB,WAAQ,IAAI,IAAI,MAAM,GAAG;;;AAG3B,MAAK,IAAI,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK,GAAG;EAC3C,MAAM,KAAK,QAAQ;EACnB,MAAM,KAAK,QAAQ,IAAI;EACvB,MAAM,KAAK,QAAQ,IAAI;EACvB,MAAM,MAAM,KAAK,MAAM,IAAI,IAAI,GAAG,IAAI;AACtC,UAAQ,KAAK,KAAK;AAClB,UAAQ,IAAI,KAAK,KAAK;AACtB,UAAQ,IAAI,KAAK,KAAK;;;;AAIxB,SAAS,cAAc,GAAG,gBAAgB;CACzC,IAAI,OAAO,UAAU,OAAO,UAAU,OAAO;CAC7C,IAAI,OAAO,WAAW,OAAO,WAAW,OAAO;AAC/C,MAAK,MAAM,aAAa,eAAgB,MAAK,IAAI,IAAI,GAAG,IAAI,UAAU,QAAQ,KAAK,GAAG;EACrF,MAAM,IAAI,UAAU;EACpB,MAAM,IAAI,UAAU,IAAI;EACxB,MAAM,IAAI,UAAU,IAAI;AACxB,MAAI,IAAI,KAAM,QAAO;AACrB,MAAI,IAAI,KAAM,QAAO;AACrB,MAAI,IAAI,KAAM,QAAO;AACrB,MAAI,IAAI,KAAM,QAAO;AACrB,MAAI,IAAI,KAAM,QAAO;AACrB,MAAI,IAAI,KAAM,QAAO;;AAEtB,KAAI,CAAC,OAAO,SAAS,KAAK,EAAE;AAC3B,SAAO,OAAO,OAAO;AACrB,SAAO,OAAO,OAAO;;AAEtB,QAAO;EACN,KAAK;GACJ;GACA;GACA;GACA;EACD,KAAK;GACJ;GACA;GACA;GACA;EACD,QAAQ;IACN,OAAO,QAAQ;IACf,OAAO,QAAQ;IACf,OAAO,QAAQ;GAChB;EACD,MAAM;GACL,OAAO;GACP,OAAO;GACP,OAAO;GACP;EACD;;;;;;AAMF,SAAS,sBAAsB,QAAQ,SAAS;CAC/C,MAAM,eAAe,KAAK,IAAI,GAAG,OAAO,MAAM,KAAK;CACnD,IAAI,kBAAkB;AACtB,KAAI,QAAQ,iBAAiB,QAAQ,gBAAgB,EAAG,mBAAkB,QAAQ,gBAAgB;CAClG,MAAM,QAAQ;EACb;EACA;EACA;EACA;AACD,KAAI,OAAO,QAAQ,UAAU,UAAU;AACtC,QAAM,MAAM,QAAQ;AACpB,QAAM,MAAM,QAAQ;AACpB,QAAM,MAAM,QAAQ;YACV,MAAM,QAAQ,QAAQ,MAAM,EAAE;AACxC,QAAM,MAAM,QAAQ,MAAM;AAC1B,QAAM,MAAM,QAAQ,MAAM;AAC1B,QAAM,MAAM,QAAQ,MAAM;;AAE3B,QAAO;EACN,QAAQ,QAAQ,SAAS,OAAO,SAAS;GACxC;GACA;GACA;GACA;EACD;EACA;;;AAGF,SAAS,mBAAmB,WAAW,EAAE,QAAQ,SAAS;CACzD,MAAM,MAAM,IAAI,aAAa,UAAU,OAAO;AAC9C,MAAK,IAAI,IAAI,GAAG,IAAI,UAAU,QAAQ,KAAK,GAAG;AAC7C,MAAI,MAAM,UAAU,KAAK,OAAO,MAAM,MAAM;AAC5C,MAAI,IAAI,MAAM,UAAU,IAAI,KAAK,OAAO,MAAM,MAAM;AACpD,MAAI,IAAI,MAAM,UAAU,IAAI,KAAK,OAAO,MAAM,MAAM;;AAErD,QAAO;;;AAGR,SAAS,iBAAiB,SAAS,aAAa;AAC/C,QAAO,cAAc,QAAQ,IAAI,YAAY,QAAQ,GAAG,IAAI,YAAY,QAAQ;;;AAGjF,SAAS,qBAAqB,QAAQ,EAAE,QAAQ,SAAS;CACxD,MAAM,MAAM;GACV,OAAO,IAAI,KAAK,OAAO,MAAM,MAAM;GACnC,OAAO,IAAI,KAAK,OAAO,MAAM,MAAM;GACnC,OAAO,IAAI,KAAK,OAAO,MAAM,MAAM;EACpC;CACD,MAAM,MAAM;GACV,OAAO,IAAI,KAAK,OAAO,MAAM,MAAM;GACnC,OAAO,IAAI,KAAK,OAAO,MAAM,MAAM;GACnC,OAAO,IAAI,KAAK,OAAO,MAAM,MAAM;EACpC;AACD,QAAO;EACN;EACA;EACA,QAAQ;IACN,IAAI,KAAK,IAAI,MAAM;IACnB,IAAI,KAAK,IAAI,MAAM;IACnB,IAAI,KAAK,IAAI,MAAM;GACpB;EACD,MAAM;GACL,IAAI,KAAK,IAAI;GACb,IAAI,KAAK,IAAI;GACb,IAAI,KAAK,IAAI;GACb;EACD,sBAAsB,KAAK,MAAM,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI,GAAG,GAAG;EACtF;;;;;;;;;AAYF,MAAM,aAAa;;AAEnB,SAAS,UAAU,GAAG,GAAG,GAAG;CAC3B,MAAM,CAAC,GAAG,GAAG,GAAG,KAAK;CACrB,MAAM,KAAK,IAAI;CACf,MAAM,KAAK,IAAI;CACf,MAAM,KAAK,IAAI;CACf,MAAM,KAAK,IAAI;CACf,MAAM,KAAK,IAAI;CACf,MAAM,KAAK,IAAI;CACf,MAAM,KAAK,IAAI;CACf,MAAM,KAAK,IAAI;CACf,MAAM,KAAK,IAAI;AACf,QAAO;GACL,IAAI,KAAK,KAAK,OAAO,EAAE;EACxB,KAAK,KAAK,MAAM,EAAE;EAClB,KAAK,KAAK,MAAM,EAAE;EAClB;EACA,KAAK,KAAK,MAAM,EAAE;GACjB,IAAI,KAAK,KAAK,OAAO,EAAE;EACxB,KAAK,KAAK,MAAM,EAAE;EAClB;EACA,KAAK,KAAK,MAAM,EAAE;EAClB,KAAK,KAAK,MAAM,EAAE;GACjB,IAAI,KAAK,KAAK,OAAO,EAAE;EACxB;EACA,EAAE;EACF,EAAE;EACF,EAAE;EACF;EACA;;AAEF,SAAS,cAAc,GAAG;CACzB,MAAM,MAAM,KAAK,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI;AAClD,QAAO;EACN,EAAE,KAAK;EACP,EAAE,KAAK;EACP,EAAE,KAAK;EACP,EAAE,KAAK;EACP;;AAEF,SAAS,MAAM,GAAG,GAAG,GAAG;CACvB,IAAI,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE;CAC7D,MAAM,OAAO,MAAM,IAAI,KAAK;AAC5B,QAAO;AACP,KAAI,MAAM,MAAO,QAAO,cAAc;EACrC,EAAE,MAAM,OAAO,EAAE,KAAK,EAAE,MAAM;EAC9B,EAAE,MAAM,OAAO,EAAE,KAAK,EAAE,MAAM;EAC9B,EAAE,MAAM,OAAO,EAAE,KAAK,EAAE,MAAM;EAC9B,EAAE,MAAM,OAAO,EAAE,KAAK,EAAE,MAAM;EAC9B,CAAC;CACF,MAAM,QAAQ,KAAK,KAAK,IAAI;CAC5B,MAAM,MAAM,KAAK,IAAI,MAAM;CAC3B,MAAM,KAAK,KAAK,KAAK,IAAI,KAAK,MAAM,GAAG;CACvC,MAAM,KAAK,OAAO,KAAK,IAAI,IAAI,MAAM,GAAG;AACxC,QAAO;EACN,EAAE,KAAK,KAAK,EAAE,KAAK;EACnB,EAAE,KAAK,KAAK,EAAE,KAAK;EACnB,EAAE,KAAK,KAAK,EAAE,KAAK;EACnB,EAAE,KAAK,KAAK,EAAE,KAAK;EACnB;;;AAGF,SAAS,UAAU,OAAO,QAAM;CAC/B,IAAI,KAAK;CACT,IAAI,KAAK,MAAM,SAAS;AACxB,QAAO,KAAK,IAAI;EACf,MAAM,MAAM,KAAK,KAAK,KAAK;AAC3B,OAAK,MAAM,QAAQ,MAAMC,OAAM,MAAK;MAC/B,MAAK,MAAM;;AAEjB,QAAO;;;AAGR,SAAS,QAAQ,QAAQ,GAAG,MAAM,OAAO,OAAO,GAAG;CAClD,MAAM,KAAK,SAAS,IAAI,IAAI,QAAQ,OAAO,IAAI;AAC/C,QAAO,MAAM,KAAK,OAAO,SAAS,IAAI,KAAK,KAAK,CAAC;;AAElD,SAAS,cAAc,OAAO,QAAQ,MAAM,QAAM;CACjD,MAAM,EAAE,UAAU;CAClB,MAAM,QAAQ,MAAM,kBAAkB;CACtC,MAAM,OAAO,MAAM,SAAS;AAC5B,KAAIA,WAAS,MAAM,MAAM,GAAI,QAAO,QAAQ,QAAQ,GAAG,MAAM,MAAM;AACnE,KAAIA,WAAS,MAAM,SAAS,GAAI,QAAO,QAAQ,QAAQ,MAAM,MAAM,MAAM;CACzE,MAAM,IAAI,UAAU,OAAOA,OAAK;AAChC,KAAI,MAAM,kBAAkB,OAAQ,QAAO,QAAQ,QAAQ,GAAG,MAAM,MAAM;CAC1E,MAAM,KAAK,MAAM,MAAM;CACvB,MAAM,MAAM,MAAM,IAAI,MAAM,MAAM;CAClC,MAAM,IAAI,KAAK,KAAKA,SAAO,MAAM,KAAK;CACtC,MAAM,IAAI,QAAQ,QAAQ,GAAG,MAAM,MAAM;CACzC,MAAM,IAAI,QAAQ,QAAQ,IAAI,GAAG,MAAM,MAAM;AAC7C,KAAI,OAAO;EACV,MAAM,OAAO,QAAQ,QAAQ,GAAG,MAAM,MAAM,EAAE;EAC9C,MAAM,MAAM,QAAQ,QAAQ,IAAI,GAAG,MAAM,MAAM,EAAE;EACjD,MAAM,KAAK,IAAI;EACf,MAAM,KAAK,KAAK;EAChB,MAAM,MAAM,EAAE,KAAK,IAAI,OAAO,IAAI,KAAK,IAAI,KAAK,KAAK,MAAM,KAAK,IAAI,KAAK,KAAK,MAAM,KAAK,MAAM,MAAM,KAAK,KAAK,IAAI,OAAO,EAAE,MAAM,MAAM,KAAK,MAAM,MAAM,IAAI,MAAM,GAAG;AACtK,SAAO,SAAS,IAAI,cAAc,IAAI,GAAG;;AAE1C,KAAI,SAAS,EAAG,QAAO,MAAM,GAAG,GAAG,EAAE;AACrC,QAAO,EAAE,KAAK,GAAG,MAAM,MAAM,EAAE,MAAM,KAAK,KAAK,EAAE;;;AAGlD,SAAS,cAAc,OAAO,MAAM,QAAM;CACzC,MAAM,IAAI,MAAM,KAAK,MAAM,CAAC,GAAG,EAAE,YAAY,CAAC;CAC9C,MAAM,IAAI,MAAM,KAAK,MAAM,CAAC,GAAG,EAAE,SAAS,CAAC;CAC3C,MAAM,IAAI,MAAM,KAAK,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC;CACxC,MAAM,SAAS,IAAI,IAAI,MAAM,KAAK,GAAG,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;AACxD,MAAK,MAAM,SAAS,MAAM,UAAU,EAAE,EAAE;EACvC,MAAM,IAAI,MAAM,QAAQ,OAAO,IAAI,MAAM,SAAS;AAClD,MAAI,MAAM,KAAK,KAAK,CAAC,MAAM,MAAM,OAAQ;AACzC,MAAI,MAAM,aAAc,GAAE,KAAK,cAAc,OAAO,MAAM,cAAc,GAAGA,OAAK;AAChF,MAAI,MAAM,UAAW,GAAE,KAAK,cAAc,OAAO,MAAM,WAAW,GAAGA,OAAK;AAC1E,MAAI,MAAM,OAAQ,GAAE,KAAK,cAAc,OAAO,MAAM,QAAQ,GAAGA,OAAK;;AAErE,QAAO,MAAM,KAAK,GAAG,MAAM,EAAE,UAAU,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC;;;;;;AAMpE,SAAS,UAAU,OAAO,MAAM,QAAM;CACrC,MAAM,QAAQ,MAAM,SAAS,EAAE;CAC/B,MAAM,QAAQ,cAAc,OAAO,MAAMA,OAAK;CAC9C,MAAM,QAAQ,IAAI,MAAM,MAAM,OAAO;CACrC,MAAML,eAAa,MAAM;EACxB,MAAM,OAAO,MAAM;AACnB,MAAI,KAAM,QAAO;EACjB,MAAM,SAAS,MAAM,GAAG;EACxB,MAAM,IAAI,SAAS,IAAI,MAAM,KAAK,YAAY,SAASA,YAAU,OAAO,EAAE,MAAM,GAAG;AACnF,QAAM,KAAK;AACX,SAAO;;AAER,QAAO,MAAM,KAAK,GAAG,MAAMA,YAAU,EAAE,CAAC;;;AAGzC,SAAS,cAAc,OAAO,WAAW,OAAO;CAC/C,MAAM,OAAO,MAAM,QAAQ;AAC3B,KAAI,CAAC,KAAM,OAAM,IAAI,MAAM,qBAAqB,YAAY;CAC5D,MAAM,MAAM,IAAI,aAAa,aAAa,GAAG;AAC7C,MAAK,IAAI,IAAI,GAAG,IAAI,YAAY,KAAK;EACpC,MAAM,OAAO,KAAK,OAAO;AACzB,MAAI,SAAS,KAAK,GAAG;AACpB,OAAI,IAAI,YAAY,UAAU,EAAE,IAAI,GAAG;AACvC;;EAED,MAAM,MAAM,MAAM,KAAK,KAAK,oBAAoB,SAAS,IAAI,IAAI,IAAI,KAAK,GAAG,CAAC;AAC9E,MAAI,IAAI,YAAY,SAAS,MAAM,OAAO,IAAI,EAAE,IAAI,GAAG;;AAExD,QAAO;;AAKR,IAAI,YAAY,MAAMM,YAAU;CAC/B,OAAO,YAAY;;;;CAInB,OAAO,MAAM,gBAAgB,UAAU,EAAE,EAAE;EAC1C,MAAM,WAAW,OAAO,mBAAmB,WAAWA,YAAU,WAAW,eAAe,GAAGA,YAAU,SAAS,eAAe,GAAGA,YAAU,YAAY,eAAe,GAAGA,YAAU,WAAW,IAAI,aAAa,CAAC,OAAO,eAAe,CAAC;AACxO,SAAOA,YAAU,mBAAmB,UAAU,QAAQ;;CAEvD,OAAO,SAAS,QAAQ;EACvB,MAAM,OAAO,kBAAkB,aAAa,SAAS,IAAI,WAAW,OAAO;AAC3E,MAAI,KAAK,SAAS,GAAI,QAAO;EAC7B,MAAM,SAAS;AACf,OAAK,IAAI,IAAI,GAAG,IAAI,IAAI,IAAK,KAAI,KAAK,OAAO,OAAO,WAAW,EAAE,CAAE,QAAO;AAC1E,SAAO;;;;;CAKR,OAAO,YAAY,QAAQ;EAC1B,MAAM,KAAK,kBAAkB,aAAa,SAAS,IAAI,WAAW,OAAO;EACzE,MAAM,OAAO,IAAI,SAAS,GAAG,QAAQ,GAAG,YAAY,GAAG,WAAW;EAClE,MAAM,UAAU,KAAK,UAAU,IAAI,KAAK,IAAI;EAC5C,IAAI,SAAS;EACb,MAAM,OAAO;GACZ,MAAM;GACN,OAAO,EAAE;GACT,UAAU,EAAE;GACZ;EACD,MAAM,iBAAiB;AACtB,OAAI,UAAU,GAAG,WAAY,QAAO;GACpC,IAAI;GACJ,IAAI;GACJ,IAAI;AACJ,OAAI,SAAS;AACZ,QAAI,SAAS,KAAK,GAAG,WAAY,QAAO;AACxC,gBAAY,OAAO,KAAK,aAAa,QAAQ,KAAK,CAAC;AACnD,oBAAgB,OAAO,KAAK,aAAa,SAAS,GAAG,KAAK,CAAC;AAC3D,cAAU,KAAK,SAAS,SAAS,GAAG;AACpC,cAAU;UACJ;AACN,QAAI,SAAS,KAAK,GAAG,WAAY,QAAO;AACxC,gBAAY,KAAK,UAAU,QAAQ,KAAK;AACxC,oBAAgB,KAAK,UAAU,SAAS,GAAG,KAAK;AAChD,cAAU,KAAK,SAAS,SAAS,GAAG;AACpC,cAAU;;AAEX,OAAI,cAAc,EAAG,QAAO;GAC5B,MAAM,OAAO,IAAI,aAAa,CAAC,OAAO,GAAG,SAAS,QAAQ,SAAS,QAAQ,CAAC;AAC5E,aAAU;GACV,MAAM,QAAQ,EAAE;AAChB,QAAK,IAAI,IAAI,GAAG,IAAI,eAAe,KAAK;IACvC,MAAM,WAAW,OAAO,aAAa,GAAG,QAAQ;AAChD,cAAU;AACV,YAAQ,UAAR;KACC,KAAK;AACJ,YAAM,KAAK,KAAK,SAAS,QAAQ,KAAK,CAAC;AACvC,gBAAU;AACV;KACD,KAAK;KACL,KAAK;AACJ,YAAM,KAAK,KAAK,SAAS,OAAO,KAAK,EAAE;AACvC,gBAAU;AACV;KACD,KAAK;AACJ,YAAM,KAAK,KAAK,SAAS,QAAQ,KAAK,CAAC;AACvC,gBAAU;AACV;KACD,KAAK;AACJ,YAAM,KAAK,KAAK,WAAW,QAAQ,KAAK,CAAC;AACzC,gBAAU;AACV;KACD,KAAK;AACJ,YAAM,KAAK,KAAK,WAAW,QAAQ,KAAK,CAAC;AACzC,gBAAU;AACV;KACD,KAAK;AACJ,YAAM,KAAK,OAAO,KAAK,YAAY,QAAQ,KAAK,CAAC,CAAC;AAClD,gBAAU;AACV;KACD,KAAK,KAAK;MACT,MAAM,MAAM,KAAK,UAAU,QAAQ,KAAK;AACxC,gBAAU;MACV,MAAM,MAAM,IAAI,aAAa,CAAC,OAAO,GAAG,SAAS,QAAQ,SAAS,IAAI,CAAC;AACvE,YAAM,KAAK,IAAI;AACf,gBAAU;AACV;;KAED,KAAK,KAAK;MACT,MAAM,MAAM,KAAK,UAAU,QAAQ,KAAK;AACxC,gBAAU;MACV,MAAM,MAAM,GAAG,SAAS,QAAQ,SAAS,IAAI;AAC7C,YAAM,KAAK,IAAI;AACf,gBAAU;AACV;;KAED,KAAK;KACL,KAAK;KACL,KAAK;KACL,KAAK;KACL,KAAK;KACL,KAAK,KAAK;MACT,MAAM,WAAW,KAAK,UAAU,QAAQ,KAAK;MAC7C,MAAM,WAAW,KAAK,UAAU,SAAS,GAAG,KAAK;MACjD,MAAM,gBAAgB,KAAK,UAAU,SAAS,GAAG,KAAK;AACtD,gBAAU;MACV,IAAI;AACJ,UAAI,aAAa,GAAG;AACnB,qBAAc,YAAY,GAAG,SAAS,QAAQ,SAAS,cAAc,CAAC;AACtE,iBAAU;aACJ;OACN,MAAM,aAAa,YAAY,aAAa,OAAO,aAAa,MAAM,IAAI,aAAa,OAAO,aAAa,MAAM,IAAI;AACrH,qBAAc,GAAG,SAAS,QAAQ,SAAS,WAAW;AACtD,iBAAU;;MAEX,MAAM,YAAY,IAAI,SAAS,YAAY,QAAQ,YAAY,YAAY,YAAY,WAAW;AAClG,UAAI,aAAa,KAAK;OACrB,MAAM,MAAM,IAAI,aAAa,SAAS;AACtC,YAAK,IAAI,IAAI,GAAG,IAAI,UAAU,IAAK,KAAI,KAAK,UAAU,WAAW,IAAI,GAAG,KAAK;AAC7E,aAAM,KAAK,IAAI;iBACL,aAAa,KAAK;OAC5B,MAAM,MAAM,IAAI,aAAa,SAAS;AACtC,YAAK,IAAI,IAAI,GAAG,IAAI,UAAU,IAAK,KAAI,KAAK,UAAU,WAAW,IAAI,GAAG,KAAK;AAC7E,aAAM,KAAK,IAAI;iBACL,aAAa,KAAK;OAC5B,MAAM,MAAM,IAAI,WAAW,SAAS;AACpC,YAAK,IAAI,IAAI,GAAG,IAAI,UAAU,IAAK,KAAI,KAAK,UAAU,SAAS,IAAI,GAAG,KAAK;AAC3E,aAAM,KAAK,IAAI;iBACL,aAAa,KAAK;OAC5B,MAAM,MAAM,IAAI,aAAa,SAAS;AACtC,YAAK,IAAI,IAAI,GAAG,IAAI,UAAU,IAAK,KAAI,KAAK,OAAO,UAAU,YAAY,IAAI,GAAG,KAAK,CAAC;AACtF,aAAM,KAAK,IAAI;iBACL,aAAa,KAAK;OAC5B,MAAM,MAAM,IAAI,WAAW,SAAS;AACpC,YAAK,IAAI,IAAI,GAAG,IAAI,UAAU,IAAK,KAAI,KAAK,UAAU,SAAS,EAAE;AACjE,aAAM,KAAK,IAAI;YACT,OAAM,KAAK,YAAY;AAC9B;;KAED,QAAS;;;GAGX,MAAM,WAAW,EAAE;AACnB,UAAO,SAAS,WAAW;IAC1B,MAAM,QAAQ,UAAU;AACxB,QAAI,MAAO,UAAS,KAAK,MAAM;QAC1B;;AAEN,YAAS;AACT,UAAO;IACN;IACA;IACA;IACA;;AAEF,SAAO,SAAS,GAAG,cAAc,UAAU,KAAK,KAAK;GACpD,MAAM,OAAO,UAAU;AACvB,OAAI,KAAM,MAAK,SAAS,KAAK,KAAK;OAC7B;;AAEN,SAAO;;;;;CAKR,OAAO,WAAW,MAAM;EACvB,MAAM,OAAO;GACZ,MAAM;GACN,OAAO,EAAE;GACT,UAAU,EAAE;GACZ;EACD,MAAM,QAAQ,CAAC,KAAK;EACpB,MAAM,QAAQ,KAAK,MAAM,QAAQ;AACjC,OAAK,IAAI,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;GACtC,MAAM,OAAO,MAAM,IAAI,MAAM;AAC7B,OAAI,CAAC,QAAQ,KAAK,WAAW,IAAI,CAAE;AACnC,OAAI,SAAS,KAAK;AACjB,QAAI,MAAM,SAAS,EAAG,OAAM,KAAK;AACjC;;GAED,MAAM,WAAW,KAAK,QAAQ,IAAI;AAClC,OAAI,aAAa,GAAI;GACrB,MAAM,OAAO,KAAK,UAAU,GAAG,SAAS,CAAC,MAAM;GAC/C,MAAM,OAAO,KAAK,UAAU,WAAW,EAAE,CAAC,MAAM;GAChD,MAAM,WAAW,KAAK,SAAS,IAAI;GACnC,MAAM,UAAU,WAAW,KAAK,MAAM,GAAG,GAAG,CAAC,MAAM,GAAG;GACtD,MAAM,QAAQ,EAAE;AAChB,OAAI,SAAS;IACZ,MAAM,WAAW,QAAQ,MAAM,IAAI,CAAC,KAAK,MAAM,EAAE,MAAM,CAAC;AACxD,SAAK,MAAM,KAAK,SAAU,KAAI,EAAE,WAAW,KAAK,IAAI,EAAE,SAAS,KAAK,CAAE,OAAM,KAAK,EAAE,MAAM,GAAG,GAAG,CAAC;aACvF,CAAC,OAAO,MAAM,OAAO,EAAE,CAAC,CAAE,OAAM,KAAK,OAAO,EAAE,CAAC;QACnD,OAAM,KAAK,EAAE;;GAEnB,MAAM,OAAO;IACZ;IACA;IACA,UAAU,EAAE;IACZ;GACD,MAAM,SAAS,MAAM,MAAM,SAAS;AACpC,OAAI,OAAQ,QAAO,SAAS,KAAK,KAAK;AACtC,OAAI,SAAU,OAAM,KAAK,KAAK;;AAE/B,SAAO;;;CAGR,OAAO,YAAY,MAAM;EACxB,MAAM,IAAI,KAAK,aAAa;AAC5B,MAAI,MAAM,kBAAkB,MAAM,aAAa,EAAE,SAAS,aAAa,IAAI,EAAE,SAAS,cAAc,IAAI,MAAM,YAAa,QAAO;AAClI,MAAI,MAAM,eAAe,EAAE,SAAS,gBAAgB,IAAI,EAAE,SAAS,YAAY,CAAE,QAAO;;;;;;;CAOzF,OAAO,eAAe,UAAU,YAAY,SAAS,aAAa,UAAU;EAC3E,MAAM,eAAe,MAAM,SAAS;GACnC,MAAM,QAAQ,MAAM,SAAS,MAAM,MAAM,EAAE,SAAS,KAAK,EAAE,MAAM;AACjE,UAAO,OAAO,UAAU,YAAY,QAAQ,QAAQ,KAAK;;AAE1D,OAAK,MAAM,KAAK,aAAa;AAC5B,OAAI,EAAE,aAAa,cAAc,CAAC,EAAE,SAAU;GAC9C,MAAM,OAAOA,YAAU,YAAY,EAAE,SAAS;GAC9C,MAAM,UAAU,QAAQ,IAAI,EAAE,QAAQ;AACtC,OAAI,CAAC,QAAQ,SAAS,KAAK,SAAS,UAAW;AAC/C,OAAI,SAAS,YAAY,SAAS,uBAAuB,SAAS,oBAAqB;GACvF,MAAM,QAAQ,YAAY,QAAQ,MAAM,EAAE,aAAa,EAAE,WAAW,CAAC,EAAE,SAAS,CAAC,KAAK,MAAM,QAAQ,IAAI,EAAE,QAAQ,EAAE,KAAK,CAAC,MAAM,MAAM,GAAG,SAAS,QAAQ;GAC1J,MAAM,MAAM,YAAY,QAAQ,MAAM,mBAAmB,IAAI,YAAY,QAAQ,MAAM,WAAW,IAAI,YAAY,OAAO,mBAAmB,IAAI,YAAY,OAAO,WAAW;AAC9K,OAAI,OAAO,CAAC,mBAAmB,IAAI,EAAE;AACpC,uBAAmB,aAAa,SAAS,MAAM,IAAI;AACnD;;GAED,IAAI;GACJ,MAAM,UAAU,OAAO,SAAS,MAAM,MAAM,EAAE,SAAS,UAAU,EAAE,MAAM;AACzE,OAAI,mBAAmB,cAAc,QAAQ,SAAS,EAAG,SAAQ;YACxD,IAAK,SAAQ,gBAAgB,KAAK,SAAS,EAAE;AACtD,OAAI,CAAC,OAAO;AACX,QAAI,IAAK,oBAAmB,aAAa,SAAS,MAAM,IAAI;AAC5D;;AAED,OAAI,SAAS,WAAW;AACvB,aAAS,uBAAuB;AAChC,aAAS,qBAAqB,YAAY,OAAO,GAAG;AACpD,QAAI,IAAK,UAAS,iBAAiB;AACnC,aAAS,cAAc;UACjB;AACN,aAAS,sBAAsB;AAC/B,QAAI,IAAK,UAAS,gBAAgB;;;;;;;CAOrC,OAAO,mBAAmB,MAAM,UAAU,EAAE,EAAE;EAC7C,MAAM,cAAc,KAAK,SAAS,MAAM,MAAM,EAAE,SAAS,UAAU;EACnE,MAAM,kBAAkB,KAAK,SAAS,MAAM,MAAM,EAAE,SAAS,cAAc;EAC3E,MAAM,0BAA0B,IAAI,KAAK;AACzC,MAAI,YAAa,MAAK,MAAM,SAAS,YAAY,UAAU;GAC1D,MAAM,KAAK,MAAM,MAAM,MAAM;GAC7B,MAAM,QAAQ,OAAO,MAAM,MAAM,MAAM,GAAG,CAAC,MAAM,KAAK;GACtD,MAAM,OAAO,MAAM,SAAS,IAAI,MAAM,KAAK,MAAM;GACjD,MAAM,OAAO,OAAO,MAAM,MAAM,MAAM,MAAM,KAAK;AACjD,WAAQ,IAAI,IAAI;IACf;IACA;IACA;IACA,MAAM;IACN,CAAC;;EAEH,MAAM,cAAc,EAAE;AACtB,MAAI,iBACH;QAAK,MAAM,YAAY,gBAAgB,SAAU,KAAI,SAAS,SAAS,OAAO,SAAS,SAAS,WAAW;IAC1G,MAAM,OAAO,OAAO,SAAS,MAAM,GAAG;IACtC,MAAM,UAAU,SAAS,MAAM,MAAM;IACrC,MAAM,WAAW,SAAS,MAAM,MAAM;IACtC,MAAM,WAAW,SAAS,OAAO,OAAO,SAAS,MAAM,GAAG,GAAG,KAAK;AAClE,gBAAY,KAAK;KAChB;KACA;KACA;KACA,CAAC;;;EAGJ,MAAM,2BAA2B,eAAe;AAC/C,QAAK,MAAM,KAAK,aAAa;IAC5B,MAAM,MAAM,EAAE,aAAa,aAAa,QAAQ,IAAI,EAAE,QAAQ,GAAG,KAAK;AACtE,QAAI,KAAK,KAAK,SAAS,cAAc,CAAC,EAAE,SAAU,QAAO,IAAI;;AAE9D,QAAK,MAAM,OAAO,aAAa;AAC9B,QAAI,IAAI,YAAY,cAAc,IAAI,SAAU;AAChD,SAAK,MAAM,KAAK,aAAa;AAC5B,SAAI,EAAE,aAAa,IAAI,YAAY,EAAE,SAAU;KAC/C,MAAM,MAAM,QAAQ,IAAI,EAAE,QAAQ;AAClC,SAAI,KAAK,KAAK,SAAS,WAAY,QAAO,IAAI;;;;EAIjD,MAAM,SAAS,EAAE;EACjB,MAAM,YAAY,EAAE;EACpB,SAAS,iBAAiB,MAAM;AAC/B,OAAI,CAAC,KAAM,QAAO,EAAE;AACpB,OAAI,KAAK,MAAM,cAAc,gBAAgB,KAAK,MAAM,cAAc,gBAAgB,KAAK,MAAM,cAAc,cAAc,MAAM,QAAQ,KAAK,MAAM,GAAG,CAAE,QAAO,KAAK,MAAM;GAC7K,MAAM,SAAS,KAAK,SAAS,MAAM,MAAM,EAAE,SAAS,IAAI;AACxD,OAAI,UAAU,OAAO,MAAM,SAAS,EAAG,QAAO,OAAO;AACrD,OAAI,MAAM,QAAQ,KAAK,MAAM,IAAI,KAAK,MAAM,SAAS,KAAK,OAAO,KAAK,MAAM,OAAO,SAAU,QAAO,KAAK;AACzG,UAAO,EAAE;;EAEV,MAAM,WAAW,CAAC,GAAG,QAAQ,QAAQ,CAAC,CAAC,QAAQ,MAAM,EAAE,KAAK,SAAS,QAAQ,CAAC,KAAK,MAAM,EAAE,GAAG;EAC9F,MAAM,gBAAgB,IAAI,IAAI,SAAS,KAAK,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;EAC/D,MAAM,QAAQ,SAAS,KAAK,OAAO;GAClC,MAAM,UAAU,QAAQ,IAAI,GAAG;GAC/B,MAAM,aAAa,YAAY,MAAM,MAAM,EAAE,YAAY,MAAM,CAAC,EAAE,YAAY,cAAc,IAAI,EAAE,SAAS,CAAC;AAC5G,UAAO;IACN,MAAM,QAAQ;IACd,QAAQ,aAAa,cAAc,IAAI,WAAW,SAAS,GAAG;IAC9D,aAAa,SAAS,QAAQ,MAAM,mBAAmB,EAAE;IACzD,UAAU,cAAc,QAAQ,MAAM,eAAe,SAAS,QAAQ,MAAM,gBAAgB,EAAE,EAAE,cAAc,QAAQ,KAAK,CAAC,CAAC;IAC7H,OAAO,SAAS,QAAQ,MAAM,eAAe,EAAE;IAC/C;IACA;EACF,MAAM,mBAAmB,eAAe,YAAY,MAAM,MAAM,EAAE,YAAY,cAAc,CAAC,EAAE,YAAY,cAAc,IAAI,EAAE,SAAS,CAAC,EAAE;EAC3I,MAAM,QAAQ,EAAE;AAChB,OAAK,MAAM,CAAC,IAAI,UAAU,QAAS,KAAI,MAAM,KAAK,SAAS,eAAe,MAAM,SAAS,UAAU,MAAM,KAAK,MAAM,OAAO,UAAU,MAAM,SAAS,KAAK;GACxJ,MAAM,WAAW,MAAM;GACvB,MAAM,eAAe,SAAS,SAAS,MAAM,MAAM,EAAE,SAAS,WAAW;GACzE,MAAM,cAAc,SAAS,SAAS,MAAM,MAAM,EAAE,SAAS,qBAAqB;AAClF,OAAI,CAAC,gBAAgB,CAAC,YAAa;GACnC,MAAM,WAAW,iBAAiB,aAAa;GAC/C,MAAM,iBAAiB,iBAAiB,YAAY;GACpD,MAAM,SAAS,MAAM,MAAM,OAAO,SAAS;IAC1C,MAAM,OAAO,SAAS,SAAS,MAAM,MAAM,EAAE,SAAS,KAAK;AAC3D,QAAI,CAAC,KAAM,QAAO,KAAK;AACvB,WAAO,aAAa,MAAM,iBAAiB,KAAK,SAAS,MAAM,MAAM,EAAE,SAAS,KAAK,CAAC,EAAE,iBAAiB,KAAK,SAAS,MAAM,MAAM,EAAE,SAAS,MAAM,CAAC,EAAE,KAAK;;GAE7J,MAAM,WAAW,MAAM,sBAAsB,WAAW,gBAAgB,EAAE;GAC1E,MAAM,OAAO,MAAM,kBAAkB,MAAM,WAAW,EAAE;GACxD,MAAM,UAAU,EAAE;GAClB,IAAI,UAAU,EAAE;GAChB,IAAI,YAAY;AAChB,QAAK,IAAI,IAAI,GAAG,IAAI,eAAe,QAAQ,KAAK;IAC/C,MAAM,MAAM,eAAe;AAC3B,YAAQ,KAAK;KACZ,IAAI,MAAM,IAAI,EAAE,MAAM,KAAK;KAC3B,IAAI;KACJ,CAAC;AACF,QAAI,OAAO,EAAG;AACd,SAAK,IAAI,IAAI,GAAG,IAAI,QAAQ,SAAS,GAAG,IAAK,MAAK,MAAM,KAAK;KAC5D,QAAQ;KACR,QAAQ;KACR,QAAQ,IAAI;KACZ,CAAE,SAAQ,KAAK;KACf,GAAG;KACH,MAAM;KACN,CAAC;AACF,cAAU,EAAE;AACZ;;GAED,MAAM,WAAW,QAAQ;GACzB,MAAM,eAAe,IAAI,aAAa,WAAW,EAAE;GACnD,MAAM,aAAa,IAAI,aAAa,WAAW,EAAE;GACjD,MAAM,SAAS,IAAI,aAAa,WAAW,EAAE;GAC7C,MAAM,aAAa,IAAI,MAAM,SAAS;AACtC,WAAQ,SAAS,EAAE,IAAI,IAAI,QAAQ,MAAM;AACxC,iBAAa,IAAI,KAAK,SAAS,KAAK,MAAM;AAC1C,iBAAa,IAAI,IAAI,KAAK,SAAS,KAAK,IAAI,MAAM;AAClD,iBAAa,IAAI,IAAI,KAAK,SAAS,KAAK,IAAI,MAAM;IAClD,MAAM,IAAI,WAAW,IAAI,IAAI,KAAK;AAClC,eAAW,IAAI,KAAK;KACnB;KACA;KACA;KACA,EAAE,IAAI,EAAE;IACT,MAAM,KAAK,OAAO,IAAI,IAAI,KAAK;AAC/B,WAAO,IAAI,KAAK,KAAK,MAAM;AAC3B,WAAO,IAAI,IAAI,KAAK,KAAK,KAAK,MAAM;AACpC,eAAW,KAAK;KACf;AACF,OAAI,CAAC,YAAY,QAAQ,eAAe;AACvC,eAAW,KAAK,EAAE;AAClB,4BAAwB,cAAc,YAAY,WAAW;;GAE9D,MAAM,WAAW,YAAY,MAAM,MAAM,EAAE,aAAa,MAAM,QAAQ,IAAI,EAAE,QAAQ,EAAE,KAAK,SAAS,cAAc,QAAQ,IAAI,EAAE,QAAQ,EAAE,KAAK,MAAM,OAAO,OAAO;GACnK,IAAI;GACJ,IAAI;GACJ,IAAI;AACJ,OAAI,UAAU;IACb,MAAM,SAAS,EAAE;IACjB,MAAM,eAAe,EAAE;IACvB,MAAM,6BAA6B,IAAI,KAAK;AAC5C,SAAK,MAAM,MAAM,aAAa;KAC7B,MAAM,UAAU,QAAQ,IAAI,GAAG,QAAQ;AACvC,SAAI,GAAG,aAAa,SAAS,WAAW,SAAS,KAAK,SAAS,cAAc,QAAQ,KAAK,MAAM,OAAO,UAAW;KAClH,MAAM,SAAS,YAAY,MAAM,MAAM,EAAE,aAAa,QAAQ,MAAM,cAAc,IAAI,EAAE,QAAQ,CAAC,EAAE;AACnG,SAAI,WAAW,KAAK,EAAG;KACvB,MAAM,QAAQ,OAAO;AACrB,YAAO,KAAK,cAAc,IAAI,OAAO,CAAC;KACtC,MAAMC,cAAY,YAAY,QAAQ,MAAM,YAAY;KACxD,MAAM,OAAO,YAAY,QAAQ,MAAM,gBAAgB;AACvD,kBAAa,KAAK,GAAG,YAAY,SAAS,YAAY,OAAO,KAAK,IAAI,YAAY,UAAU,EAAEA,YAAU,CAAC;KACzG,MAAM,YAAY,iBAAiB,QAAQ,KAAK,SAAS,MAAM,MAAM,EAAE,SAAS,UAAU,CAAC;KAC3F,MAAM,YAAY,iBAAiB,QAAQ,KAAK,SAAS,MAAM,MAAM,EAAE,SAAS,UAAU,CAAC;AAC3F,UAAK,IAAI,IAAI,GAAG,IAAI,UAAU,QAAQ,KAAK;MAC1C,MAAM,SAAS,OAAO,UAAU,MAAM,EAAE;AACxC,UAAI,EAAE,SAAS,GAAI;MACnB,MAAM,KAAK,OAAO,UAAU,GAAG;MAC/B,MAAM,OAAO,WAAW,IAAI,GAAG,IAAI,EAAE;AACrC,WAAK,KAAK,CAAC,OAAO,OAAO,CAAC;AAC1B,iBAAW,IAAI,IAAI,KAAK;;;AAG1B,QAAI,OAAO,SAAS,WAAY,OAAM,IAAI,MAAM,gBAAgB,OAAO,OAAO,gCAAgC,aAAa;AAC3H,QAAI,OAAO,SAAS,GAAG;AACtB,iBAAY,MAAM;AAClB,WAAM,KAAK;MACV;MACA,qBAAqB,IAAI,aAAa,aAAa;MACnD,CAAC;AACF,oBAAe,IAAI,aAAa,WAAW,EAAE;AAC7C,oBAAe,IAAI,aAAa,WAAW,EAAE;AAC7C,aAAQ,SAAS,EAAE,MAAM,MAAM;MAC9B,MAAM,OAAO,WAAW,IAAI,GAAG,IAAI,EAAE,EAAE,MAAM,GAAG,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC,MAAM,GAAG,EAAE;MAC9E,MAAM,QAAQ,IAAI,QAAQ,KAAK,GAAG,OAAO,MAAM,GAAG,EAAE;AACpD,UAAI,SAAS,CAAC,OAAO,SAAS,SAAS;AACtC,oBAAa,IAAI,IAAI,QAAQ;AAC7B,oBAAa,IAAI,IAAI,QAAQ,QAAQ,IAAI,SAAS,QAAQ;QACzD;OACD;;;GAGJ,MAAM,UAAU,gBAAgB,GAAG;GACnC,MAAM,UAAU,WAAW;AAC3B,UAAO,KAAK;IACX,IAAI,YAAY;IAChB,MAAM,MAAM;IACZ,WAAW;IACX,SAAS;IACT,KAAK;IACL,SAAS,UAAU,IAAI,YAAY,WAAW,GAAG,IAAI,YAAY,WAAW;IAC5E;IACA;IACA,cAAc,wBAAwB,GAAG,IAAI,MAAM;IACnD,MAAM,YAAY,KAAK,IAAI,cAAc,IAAI,QAAQ,GAAG,KAAK;IAC7D,MAAM;IACN,CAAC;;AAEH,OAAK,MAAM,GAAG,UAAU,QAAS,KAAI,MAAM,KAAK,SAAS,YAAY;GACpE,MAAM,UAAU,MAAM,KAAK,SAAS,MAAM,MAAM,EAAE,SAAS,eAAe;GAC1E,IAAI,eAAe;IAClB;IACA;IACA;IACA;IACA;GACD,IAAI,YAAY;GAChB,IAAI,UAAU;AACd,OAAI,SACH;SAAK,MAAM,KAAK,QAAQ,SAAU,KAAI,EAAE,SAAS,KAAK;KACrD,MAAM,QAAQ,OAAO,EAAE,MAAM,GAAG;AAChC,SAAI,UAAU,kBAAkB,UAAU,QAAS,gBAAe;MACjE,OAAO,EAAE,MAAM,MAAM,EAAE;MACvB,OAAO,EAAE,MAAM,MAAM,EAAE;MACvB,OAAO,EAAE,MAAM,MAAM,EAAE;MACvB;MACA;cACQ,UAAU,eAAe,UAAU,oBAAqB,aAAY,OAAO,EAAE,MAAM,MAAM,GAAG;cAC5F,UAAU,WAAW;AAC7B,gBAAU,OAAO,EAAE,MAAM,MAAM,EAAE;AACjC,mBAAa,KAAK;;;;GAIrB,MAAM,WAAW;IAChB,MAAM,MAAM;IACZ;IACA;IACA;IACA;AACD,eAAU,eAAe,UAAU,MAAM,IAAI,SAAS,aAAa,QAAQ,SAAS;AACpF,aAAU,MAAM,QAAQ;;EAEzB,MAAM,aAAa,EAAE;AACrB,OAAK,MAAM,CAAC,IAAI,UAAU,QAAS,KAAI,MAAM,KAAK,SAAS,kBAAkB;GAC5E,MAAM,YAAY,MAAM,QAAQ;GAChC,MAAM,SAAS,EAAE;GACjB,MAAM,YAAY,YAAY,MAAM,MAAM,EAAE,aAAa,MAAM,QAAQ,IAAI,EAAE,QAAQ,EAAE,KAAK,SAAS,iBAAiB;AACtH,OAAI,WAAW;IACd,MAAM,iBAAiB,YAAY,QAAQ,MAAM,EAAE,aAAa,UAAU,WAAW,QAAQ,IAAI,EAAE,QAAQ,EAAE,KAAK,SAAS,qBAAqB;IAChJ,MAAM,yBAAyB,IAAI,KAAK;AACxC,SAAK,MAAM,OAAO,gBAAgB;KACjC,MAAM,eAAe,QAAQ,IAAI,IAAI,QAAQ;AAC7C,SAAI,CAAC,aAAc;KACnB,MAAM,YAAY,YAAY,MAAM,MAAM,EAAE,YAAY,aAAa,MAAM,QAAQ,IAAI,EAAE,SAAS,EAAE,KAAK,SAAS,QAAQ;KAC1H,MAAM,cAAc,YAAY,QAAQ,IAAI,UAAU,SAAS,GAAG,KAAK;KACvE,MAAM,OAAO,0BAA0B,WAAW,SAAS,IAAI,0BAA0B,aAAa,KAAK;AAC3G,SAAI,CAAC,KAAM;KACX,MAAM,MAAM,GAAG,aAAa,MAAM,aAAa,GAAG,GAAG;KACrD,IAAI,QAAQ,OAAO,IAAI,IAAI;AAC3B,SAAI,CAAC,OAAO;MACX,MAAM,UAAU,aAAa;AAC7B,cAAQ;OACP,UAAU,aAAa,QAAQ,aAAa;OAC5C,SAAS,aAAa;OACtB,OAAO;OACP;OACA,UAAU,gBAAgB,SAAS,aAAa,MAAM,KAAK;OAC3D,UAAU;QACT,KAAK;QACL,KAAK;QACL,KAAK;QACL;OACD;AACD,aAAO,IAAI,KAAK,MAAM;;AAEvB,iBAAY,QAAQ,MAAM,EAAE,aAAa,aAAa,MAAM,QAAQ,IAAI,EAAE,QAAQ,EAAE,KAAK,SAAS,iBAAiB,CAAC,SAAS,IAAI,UAAU;MAC1I,MAAM,OAAO,iBAAiB,GAAG,SAAS,IAAI;AAC9C,UAAI,OAAO,EAAG;MACd,MAAM,WAAW,QAAQ,IAAI,GAAG,QAAQ,EAAE;MAC1C,MAAM,QAAQ,iBAAiB,UAAU,SAAS,MAAM,MAAM,EAAE,SAAS,UAAU,CAAC;MACpF,MAAM,SAAS,iBAAiB,UAAU,SAAS,MAAM,MAAM,EAAE,SAAS,gBAAgB,CAAC;MAC3F,MAAM,IAAI,KAAK,IAAI,MAAM,QAAQ,OAAO,OAAO;AAC/C,UAAI,MAAM,EAAG;AACb,YAAM,SAAS,QAAQ;OACtB,OAAO,MAAM,KAAK,MAAM,MAAM,GAAG,EAAE,GAAG,MAAM,OAAO,EAAE,CAAC;OACtD,QAAQ,MAAM,KAAK,OAAO,MAAM,GAAG,EAAE,GAAG,MAAM,OAAO,EAAE,CAAC;OACxD;OACA;;AAEH,SAAK,MAAM,SAAS,OAAO,QAAQ,EAAE;KACpC,MAAM,QAAQ,oBAAoB,MAAM;AACxC,SAAI,CAAC,MAAO;AACZ,SAAI,MAAM,YAAY,KAAK,EAAG,OAAM,OAAO,cAAc,IAAI,MAAM,QAAQ;AAC3E,SAAI,MAAM,aAAa,MAAM,MAAO,MAAK,IAAI,IAAI,GAAG,IAAI,MAAM,UAAU,QAAQ,KAAK,GAAG;MACvF,MAAM,IAAI,MAAM,KAAK,MAAM,UAAU,SAAS,GAAG,IAAI,EAAE,CAAC;AACxD,YAAM,UAAU,IAAI,cAAc,MAAM,OAAO,EAAE,EAAE,EAAE;;AAEtD,YAAO,KAAK,MAAM;;;GAGpB,IAAI,cAAc;AAClB,QAAK,MAAM,KAAK,OAAQ,KAAI,EAAE,MAAM,SAAS,GAAG;IAC/C,MAAM,QAAQ,EAAE,MAAM,EAAE,MAAM,SAAS,MAAM;AAC7C,QAAI,QAAQ,YAAa,eAAc;;AAExC,cAAW,KAAK;IACf,MAAM;IACN,UAAU;IACV,KAAK;IACL;IACA,CAAC;;EAEH,MAAM,QAAQ;GACb;GACA;GACA;GACA;GACA;GACA,QAAQ;IACP,KAAK;KACJ;KACA;KACA;KACA;IACD,KAAK;KACJ;KACA;KACA;KACA;IACD,QAAQ;KACP;KACA;KACA;KACA;IACD,MAAM;KACL;KACA;KACA;KACA;IACD,sBAAsB;IACtB;GACD;EACD,MAAM,OAAO,UAAU,OAAO,KAAK,GAAG,EAAE;EACxC,MAAM,KAAK;GACV;GACA;GACA;GACA;EACD,MAAM,KAAK;GACV;GACA;GACA;GACA;AACD,OAAK,MAAM,QAAQ,QAAQ;GAC1B,MAAM,QAAQ,KAAK,SAAS,KAAK,IAAI,KAAK,KAAK,QAAQ,KAAK;AAC5D,QAAK,IAAI,IAAI,GAAG,IAAI,KAAK,UAAU,QAAQ,KAAK,GAAG;IAClD,MAAM,IAAI;KACT,KAAK,UAAU;KACf,KAAK,UAAU,IAAI;KACnB,KAAK,UAAU,IAAI;KACnB;IACD,MAAM,IAAI,QAAQ,YAAY,aAAa,OAAO,EAAE,GAAG;AACvD,SAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK;AAC3B,SAAI,EAAE,KAAK,GAAG,GAAI,IAAG,KAAK,EAAE;AAC5B,SAAI,EAAE,KAAK,GAAG,GAAI,IAAG,KAAK,EAAE;;;;AAI/B,MAAI,CAAC,OAAO,SAAS,GAAG,GAAG,EAAE;AAC5B,MAAG,KAAK,GAAG;AACX,MAAG,KAAK,EAAE;;EAEX,MAAM,EAAE,QAAQ,UAAU,sBAAsB;GAC/C,KAAK;GACL,KAAK;GACL,QAAQ;KACN,GAAG,KAAK,GAAG,MAAM;KACjB,GAAG,KAAK,GAAG,MAAM;KACjB,GAAG,KAAK,GAAG,MAAM;IAClB;GACD,MAAM;IACL,GAAG,KAAK,GAAG;IACX,GAAG,KAAK,GAAG;IACX,GAAG,KAAK,GAAG;IACX;GACD,EAAE,QAAQ;AACX,QAAM,gBAAgB,YAAY,SAAS,YAAY,MAAM,MAAM,IAAI,MAAM,IAAI,MAAM,GAAG,EAAE,YAAY,UAAU,CAAC,OAAO,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,GAAG,CAAC;EACtJ,MAAM,MAAM;GACX;GACA;GACA;GACA,CAAC,KAAK,OAAO,GAAG,KAAK,OAAO,MAAM,MAAM,GAAG;EAC5C,MAAM,MAAM;GACX;GACA;GACA;GACA,CAAC,KAAK,OAAO,GAAG,KAAK,OAAO,MAAM,MAAM,GAAG;AAC5C,QAAM,SAAS;GACd;GACA;GACA,QAAQ;KACN,IAAI,KAAK,IAAI,MAAM;KACnB,IAAI,KAAK,IAAI,MAAM;KACnB,IAAI,KAAK,IAAI,MAAM;IACpB;GACD,MAAM;IACL,IAAI,KAAK,IAAI;IACb,IAAI,KAAK,IAAI;IACb,IAAI,KAAK,IAAI;IACb;GACD,sBAAsB,KAAK,MAAM,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI,GAAG,GAAG;GACtF;AACD,SAAO;;;;AAIT,SAAS,SAAS,MAAM,MAAM,UAAU;CACvC,MAAM,IAAI,eAAe,MAAM,KAAK;AACpC,QAAO;EACN;EACA;EACA;EACA,CAAC,KAAK,MAAM;EACZ,MAAM,IAAI,IAAI;AACd,SAAO,MAAM,KAAK,KAAK,OAAO,SAAS,EAAE,GAAG,IAAI;GAC/C;;AAEH,SAAS,aAAa,GAAG,GAAG;AAC3B,QAAO;EACN,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE;EACnD,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE;EACnD,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE;EACnD,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE;EACnD;;;;;;AAMF,SAAS,cAAc,OAAO,GAAG;CAChC,MAAM,MAAM,eAAe,OAAO,cAAc;CAChD,MAAM,OAAO,eAAe,OAAO,eAAe;CAClD,IAAI,MAAM;AACV,KAAI,IAAK,OAAM,aAAa,eAAe,SAAS,OAAO,eAAe,EAAE,CAAC,EAAE,IAAI;AACnF,KAAI,MAAM;EACT,MAAM,IAAI,eAAe,SAAS,OAAO,gBAAgB,EAAE,CAAC;AAC5D,QAAM,aAAa,KAAK;GACvB,CAAC,EAAE;GACH,CAAC,EAAE;GACH,CAAC,EAAE;GACH,EAAE;GACF,CAAC;;AAEH,QAAO;;;AAGR,SAAS,YAAY,MAAM,MAAM;CAChC,MAAM,QAAQ,KAAK,SAAS,MAAM,MAAM,EAAE,SAAS,KAAK;CACxD,MAAM,MAAM,OAAO,SAAS,MAAM,MAAM,EAAE,SAAS,IAAI,EAAE,SAAS,OAAO;CACzE,MAAM,SAAS,MAAM,cAAc,gBAAgB,MAAM,cAAc,eAAe,MAAM,KAAK,IAAI,GAAG,IAAI,OAAO,EAAE,EAAE,IAAI,OAAO;AAClI,QAAO,OAAO,WAAW,KAAK,SAAS,YAAY,UAAU;;;;;;;AAO9D,SAAS,aAAa,OAAO,MAAM,OAAO,MAAM;AAC/C,KAAI,KAAK,WAAW,EAAG,QAAO,KAAK;CACnC,MAAM,QAAQ,SAAS,OAAO,MAAM,SAAS,MAAM,MAAM,EAAE,SAAS,KAAK,EAAE,MAAM,MAAM,GAAG;CAC1F,MAAM,UAAU,KAAK,yBAAyB;CAC9C,MAAM,UAAU,SAAS,KAAK,KAAK,2BAA2B,CAAC,IAAI,MAAM,SAAS;AAClF,SAAQ,IAAI,IAAI,SAAS;EACxB,IAAI,IAAI,YAAY,oBAAoB,KAAK,YAAY,cAAc,OAAO,YAAY,YAAY,IAAI;AAC1G,MAAI,QAAS,KAAI,OAAO,MAAM,MAAM,EAAE;AACtC,SAAO,MAAM,KAAK,EAAE,QAAQ,MAAM,GAAG,GAAG,MAAM,OAAO,KAAK,IAAI,OAAO,MAAM,EAAE,CAAC;;;;;;;AAOhF,SAAS,0BAA0B,MAAM;AACxC,SAAQ,MAAR;EACC,KAAK;EACL,KAAK,IAAK,QAAO;EACjB,KAAK;EACL,KAAK,IAAK,QAAO;EACjB,KAAK;EACL,KAAK,IAAK,QAAO;EACjB,QAAS;;;;AAIX,SAAS,iBAAiB,MAAM;AAC/B,SAAQ,MAAR;EACC,KAAK,MAAO,QAAO;EACnB,KAAK,MAAO,QAAO;EACnB,KAAK,MAAO,QAAO;EACnB,QAAS;;;;AAIX,SAAS,eAAe,MAAM,MAAM;CACnC,MAAM,KAAK,MAAM,SAAS,MAAM,MAAM,EAAE,SAAS,eAAe,GAAG,SAAS,MAAM,MAAM,EAAE,SAAS,OAAO,EAAE,MAAM,OAAO,KAAK;AAC9H,KAAI,CAAC,EAAG,QAAO,KAAK;AACpB,QAAO,EAAE,MAAM,MAAM,EAAE,CAAC,KAAK,MAAM,OAAO,EAAE,CAAC;;;AAG9C,SAAS,gBAAgB,OAAO,WAAW,MAAM;CAChD,MAAM,WAAW,SAAS,MAAM,IAAI;CACpC,MAAM,YAAY,eAAe,OAAO,SAAS,MAAM,oBAAoB,SAAS,MAAM,iBAAiB,cAAc;CACzH,MAAM,MAAM;EACX;EACA;EACA;EACA;AACD,MAAK,IAAI,OAAO,GAAG,OAAO,GAAG,QAAQ;EACpC,MAAM,YAAY,YAAY;EAC9B,MAAM,gBAAgB,eAAe,WAAW,KAAK,MAAM,QAAQ,GAAG;EACtE,MAAM,QAAQ,aAAa;AAC3B,MAAI,UAAU,KAAK,KAAK,OAAO,SAAS,MAAM,CAAE,KAAI,QAAQ;;AAE7D,QAAO;;;AAGR,MAAM,sBAAsB;CAC3B;CACA;CACA;CACA;CACA;CACA;CACA;AACD,SAAS,cAAc,OAAO;AAC7B,QAAO,oBAAoB,eAAe,OAAO,gBAAgB,GAAG,MAAM,MAAM;;;;;;AAMjF,SAAS,eAAe,SAAS,QAAQ,OAAO;CAC/C,IAAI,IAAI;EACP;EACA;EACA;EACA;EACA;AACD,MAAK,MAAM,YAAY,OAAO;EAC7B,MAAM,OAAO,MAAM,QAAQ,SAAS;EACpC,MAAM,QAAQ,QAAQ,SAAS,KAAK,KAAK,KAAK;EAC9C,MAAM,IAAI,KAAK,IAAI,KAAK;EACxB,MAAM,IAAI;GACT;GACA;GACA;GACA,KAAK,IAAI,KAAK;GACd;AACD,IAAE,QAAQ;AACV,MAAI;GACH,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE;GACnD,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE;GACnD,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE;GACnD,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE;GACnD;;AAEF,QAAO;;;AAGR,SAAS,YAAY,OAAO,GAAG;CAC9B,MAAM,EAAE,OAAO,WAAW;CAC1B,MAAM,OAAO,MAAM,SAAS;AAC5B,KAAI,KAAK,MAAM,GAAI,QAAO,OAAO;AACjC,KAAI,KAAK,MAAM,MAAO,QAAO,OAAO;CACpC,IAAI,IAAI;AACR,QAAO,IAAI,OAAO,KAAK,MAAM,IAAI,MAAM,EAAG;CAC1C,MAAM,KAAK,MAAM;CACjB,MAAM,KAAK,MAAM,IAAI;CACrB,MAAM,IAAI,KAAK,MAAM,IAAI,OAAO,KAAK,MAAM;AAC3C,QAAO,OAAO,MAAM,OAAO,IAAI,KAAK,OAAO,MAAM;;;;;;;AAOlD,SAAS,oBAAoB,OAAO;CACnC,MAAM,yBAAyB,IAAI,KAAK;AACxC,MAAK,MAAM,WAAW,MAAM,SAAU,MAAK,MAAM,KAAK,SAAS,SAAS,EAAE,CAAE,QAAO,IAAI,EAAE;AACzF,KAAI,OAAO,SAAS,EAAG,QAAO,KAAK;CACnC,MAAM,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,MAAM,IAAI,EAAE;CAC9C,MAAM,QAAQ,IAAI,aAAa,KAAK,OAAO;CAC3C,MAAM,aAAa,MAAM,SAAS;CAClC,MAAM,SAAS,IAAI,aAAa,KAAK,UAAU,aAAa,IAAI,GAAG;CACnE,MAAM,QAAQ,aAAa,cAAc,MAAM,MAAM,GAAG;CACxD,IAAI;AACJ,MAAK,SAAS,KAAK,MAAM;AACxB,QAAM,KAAK,MAAM,UAAU;EAC3B,MAAM,IAAI;GACT;GACA;GACA;GACA,CAAC,KAAK,SAAS;GACf,MAAM,UAAU,MAAM,SAAS;AAC/B,UAAO,UAAU,YAAY,SAAS,IAAI,GAAG,MAAM,SAAS;IAC3D;AACF,MAAI,CAAC,YAAY;AAChB,UAAO,IAAI,GAAG,IAAI,EAAE;AACpB;;EAED,MAAM,IAAI,eAAe,GAAG,MAAM;AAClC,MAAI,QAAQ,KAAK,KAAK,EAAE,KAAK,KAAK,KAAK,EAAE,KAAK,KAAK,KAAK,EAAE,KAAK,KAAK,KAAK,EAAE,KAAK,EAAG,MAAK,IAAI,IAAI,GAAG,IAAI,GAAG,IAAK,GAAE,KAAK,CAAC,EAAE;AACzH,SAAO;AACP,SAAO,IAAI,GAAG,IAAI,EAAE;GACnB;AACF,QAAO;EACN,UAAU,MAAM;EAChB;EACA,cAAc,MAAM,SAAS,MAAM,SAAS,KAAK;EACjD,WAAW,aAAa,SAAS,KAAK;EACtC,QAAQ,MAAM,SAAS,MAAM,SAAS,KAAK;EAC3C;;AAEF,SAAS,SAAS,cAAc,UAAU,EAAE,EAAE;AAC7C,QAAO,UAAU,MAAM,cAAc,QAAQ;;AAE9C,SAAS,QAAQ,WAAW,UAAU,EAAE,EAAE;CACzC,IAAI,OAAO;AACX,KAAI,OAAO,cAAc,UAAU;EAClC,MAAM,UAAU,UAAU,MAAM;AAChC,MAAI,EAAE,QAAQ,SAAS,qBAAqB,IAAI,QAAQ,SAAS,cAAc,KAAK,OAAO,OAAO,eAAe,GAAG,WAAY,KAAI;GACnI,IAAI,WAAW,UAAU,WAAW,UAAU,GAAG,UAAU,MAAM,EAAE,GAAG;AACtE,OAAI;AACH,eAAW,mBAAmB,SAAS;YAC/B,GAAG;AACZ,OAAI,GAAG,WAAW,SAAS,EAAE;IAC5B,MAAM,MAAM,GAAG,aAAa,SAAS;AACrC,WAAO,IAAI,WAAW,IAAI,QAAQ,IAAI,YAAY,IAAI,WAAW;AACjE,cAAU;KACT,UAAU,KAAK,QAAQ,SAAS;KAChC,GAAG;KACH;;WAEM,GAAG;;AAEb,QAAO,UAAU,MAAM,MAAM,QAAQ;;AAKtC,IAAI,YAAY,MAAMC,YAAU;;;;CAI/B,OAAO,SAAS,QAAQ;EACvB,MAAM,QAAQ,kBAAkB,aAAa,SAAS,IAAI,WAAW,OAAO;AAC5E,MAAI,MAAM,SAAS,GAAI,QAAO;EAC9B,MAAM,gBAAgB,IAAI,SAAS,MAAM,QAAQ,MAAM,YAAY,MAAM,WAAW,CAAC,UAAU,IAAI,KAAK;EACxG,MAAM,qBAAqB,KAAK,gBAAgB;AAChD,MAAI,MAAM,WAAW,mBAAoB,QAAO;EAChD,MAAM,cAAc,KAAK,IAAI,MAAM,QAAQ,IAAI;AAC/C,OAAK,IAAI,IAAI,GAAG,IAAI,aAAa,KAAK;GACrC,MAAM,IAAI,MAAM;AAChB,OAAI,IAAI,OAAO,IAAI,MAAM,MAAM,KAAK,MAAM,MAAM,MAAM,GAAI,QAAO;;EAElE,MAAM,aAAa,IAAI,YAAY,QAAQ,CAAC,OAAO,MAAM,SAAS,GAAG,GAAG,CAAC,CAAC,MAAM;AAChF,MAAI,WAAW,WAAW,QAAQ,IAAI,CAAC,WAAW,SAAS,KAAK,CAAE,QAAO,MAAM,UAAU,KAAK,gBAAgB;AAC9G,SAAO,CAAC,WAAW,WAAW,QAAQ;;;;;CAKvC,OAAO,MAAM,MAAM,UAAU,EAAE,EAAE;AAChC,MAAI,OAAO,SAAS,SAAU,QAAOA,YAAU,WAAW,MAAM,QAAQ;EACxE,MAAM,QAAQ,gBAAgB,aAAa,OAAO,IAAI,WAAW,KAAK;AACtE,MAAIA,YAAU,SAAS,MAAM,CAAE,QAAOA,YAAU,YAAY,OAAO,QAAQ;EAC3E,MAAM,OAAO,IAAI,YAAY,QAAQ,CAAC,OAAO,MAAM;AACnD,SAAOA,YAAU,WAAW,MAAM,QAAQ;;;;;CAK3C,OAAO,YAAY,OAAO,UAAU,EAAE,EAAE;EACvC,MAAM,OAAO,IAAI,SAAS,MAAM,QAAQ,MAAM,YAAY,MAAM,WAAW;EAC3E,MAAM,gBAAgB,KAAK,UAAU,IAAI,KAAK;EAC9C,MAAM,YAAY,EAAE;EACpB,MAAM,UAAU,EAAE;EAClB,MAAM,UAAU,EAAE;EAClB,IAAI,SAAS;AACb,OAAK,IAAI,IAAI,GAAG,IAAI,eAAe,KAAK;AACvC,OAAI,SAAS,KAAK,MAAM,WAAY;GACpC,MAAM,KAAK,KAAK,WAAW,QAAQ,KAAK;GACxC,MAAM,KAAK,KAAK,WAAW,SAAS,GAAG,KAAK;GAC5C,MAAM,KAAK,KAAK,WAAW,SAAS,GAAG,KAAK;AAC5C,aAAU;GACV,MAAM,MAAM,KAAK,WAAW,QAAQ,KAAK;GACzC,MAAM,MAAM,KAAK,WAAW,SAAS,GAAG,KAAK;GAC7C,MAAM,MAAM,KAAK,WAAW,SAAS,GAAG,KAAK;AAC7C,aAAU;GACV,MAAM,MAAM,KAAK,WAAW,QAAQ,KAAK;GACzC,MAAM,MAAM,KAAK,WAAW,SAAS,GAAG,KAAK;GAC7C,MAAM,MAAM,KAAK,WAAW,SAAS,GAAG,KAAK;AAC7C,aAAU;GACV,MAAM,MAAM,KAAK,WAAW,QAAQ,KAAK;GACzC,MAAM,MAAM,KAAK,WAAW,SAAS,GAAG,KAAK;GAC7C,MAAM,MAAM,KAAK,WAAW,SAAS,GAAG,KAAK;AAC7C,aAAU;AACV,aAAU;GACV,IAAI,UAAU;GACd,IAAI,UAAU;GACd,IAAI,UAAU;AACd,OAAI,YAAY,KAAK,YAAY,KAAK,YAAY,GAAG;IACpD,MAAM,KAAK,YAAY,SAAS;KAC/B;KACA;KACA;KACA,EAAE;KACF;KACA;KACA;KACA,CAAC;IACF,MAAM,KAAK,YAAY,SAAS;KAC/B;KACA;KACA;KACA,EAAE;KACF;KACA;KACA;KACA,CAAC;IACF,MAAM,KAAK,YAAY,UAAU,YAAY,MAAM,IAAI,GAAG,CAAC;AAC3D,cAAU,GAAG;AACb,cAAU,GAAG;AACb,cAAU,GAAG;;GAEd,MAAM,WAAW,UAAU,SAAS;AACpC,aAAU,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,IAAI;AAC3D,WAAQ,KAAK,SAAS,SAAS,SAAS,SAAS,SAAS,SAAS,SAAS,SAAS,QAAQ;AAC7F,WAAQ,KAAK,UAAU,WAAW,GAAG,WAAW,EAAE;;AAEnD,SAAOA,YAAU,cAAc,WAAW,SAAS,SAAS,QAAQ;;;;;CAKrE,OAAO,WAAW,MAAM,UAAU,EAAE,EAAE;EACrC,MAAM,YAAY,EAAE;EACpB,MAAM,UAAU,EAAE;EAClB,MAAM,UAAU,EAAE;EAClB,MAAM,QAAQ,KAAK,MAAM,QAAQ;EACjC,IAAI,gBAAgB;GACnB;GACA;GACA;GACA;EACD,IAAI,eAAe,EAAE;AACrB,OAAK,MAAM,WAAW,OAAO;GAC5B,MAAM,OAAO,QAAQ,MAAM;AAC3B,OAAI,CAAC,KAAM;AACX,OAAI,KAAK,WAAW,eAAe,EAAE;IACpC,MAAM,QAAQ,KAAK,MAAM,MAAM;AAC/B,oBAAgB;KACf,OAAO,WAAW,MAAM,MAAM,IAAI,IAAI;KACtC,OAAO,WAAW,MAAM,MAAM,IAAI,IAAI;KACtC,OAAO,WAAW,MAAM,MAAM,IAAI,IAAI;KACtC;AACD,mBAAe,EAAE;cACP,KAAK,WAAW,SAAS,EAAE;IACrC,MAAM,QAAQ,KAAK,MAAM,MAAM;IAC/B,MAAM,IAAI,OAAO,WAAW,MAAM,MAAM,IAAI,IAAI;IAChD,MAAM,IAAI,OAAO,WAAW,MAAM,MAAM,IAAI,IAAI;IAChD,MAAM,IAAI,OAAO,WAAW,MAAM,MAAM,IAAI,IAAI;AAChD,iBAAa,KAAK;KACjB;KACA;KACA;KACA,CAAC;cACQ,KAAK,WAAW,WAAW,EAAE;AACvC,QAAI,aAAa,UAAU,GAAG;KAC7B,MAAM,KAAK,aAAa;KACxB,MAAM,KAAK,aAAa;KACxB,MAAM,KAAK,aAAa;KACxB,IAAI,KAAK;AACT,SAAI,GAAG,OAAO,KAAK,GAAG,OAAO,KAAK,GAAG,OAAO,GAAG;MAC9C,MAAM,KAAK,YAAY,SAAS,IAAI,GAAG;MACvC,MAAM,KAAK,YAAY,SAAS,IAAI,GAAG;AACvC,WAAK,YAAY,UAAU,YAAY,MAAM,IAAI,GAAG,CAAC;;AAEtD,UAAK,IAAI,IAAI,GAAG,IAAI,aAAa,SAAS,GAAG,KAAK;MACjD,MAAM,KAAK,aAAa;MACxB,MAAM,SAAS,aAAa,IAAI;MAChC,MAAM,WAAW,UAAU,SAAS;AACpC,gBAAU,KAAK,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,OAAO,IAAI,OAAO,IAAI,OAAO,GAAG;AACzF,cAAQ,KAAK,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG;AAC3E,cAAQ,KAAK,UAAU,WAAW,GAAG,WAAW,EAAE;;;AAGpD,mBAAe,EAAE;;;AAGnB,SAAOA,YAAU,cAAc,WAAW,SAAS,SAAS,QAAQ;;CAErE,OAAO,cAAc,cAAc,YAAY,YAAY,UAAU,EAAE,EAAE;EACxE,MAAM,SAAS,cAAc,aAAa;EAC1C,MAAMD,cAAY,sBAAsB,QAAQ,QAAQ;EACxD,MAAM,YAAY,mBAAmB,cAAcA,YAAU;EAC7D,MAAM,CAAC,MAAM,QAAQ,OAAO;EAC5B,MAAM,CAAC,OAAO,SAAS,OAAO;EAC9B,MAAM,MAAM,IAAI,aAAa,aAAa,SAAS,IAAI,EAAE;AACzD,OAAK,IAAI,IAAI,GAAG,IAAI,aAAa,QAAQ,KAAK,GAAG;GAChD,MAAM,QAAQ,IAAI,IAAI;AACtB,OAAI,SAAS,QAAQ,KAAK,aAAa,KAAK,QAAQ,QAAQ;AAC5D,OAAI,QAAQ,KAAK,QAAQ,KAAK,aAAa,IAAI,KAAK,QAAQ,QAAQ;;EAErE,MAAM,aAAa,iBAAiB,YAAY,UAAU,SAAS,EAAE;EACrE,MAAM,kBAAkB;GACvB,MAAM;GACN,cAAc;IACb;IACA;IACA;IACA;IACA;GACD,WAAW;GACX,mBAAmB;GACnB,GAAG,QAAQ;GACX;AACD,SAAO;GACN,MAAM;GACN,QAAQ,CAAC;IACR,IAAI;IACJ,MAAM;IACN;IACA,SAAS,IAAI,aAAa,WAAW;IACrC;IACA,SAAS;IACT,cAAc;IACd,CAAC;GACF,WAAW,EAAE,aAAa,iBAAiB;GAC3C,YAAY,EAAE;GACd,QAAQ,qBAAqB,QAAQA,YAAU;GAC/C;;;;;CAKF,OAAO,KAAK,WAAW,UAAU,EAAE,EAAE;AACpC,MAAI,OAAO,cAAc,SAAU,QAAOC,YAAU,MAAM,WAAW,QAAQ;AAC7E,MAAI,UAAU,WAAW,IAAI,IAAI,UAAU,WAAW,KAAK,IAAI,UAAU,WAAW,MAAM,IAAI,UAAU,WAAW,UAAU,EAAE;GAC9H,MAAM,YAAY,UAAU,WAAW,UAAU,GAAG,UAAU,QAAQ,WAAW,GAAG,GAAG;GACvF,MAAM,MAAM,GAAG,aAAa,UAAU;AACtC,UAAOA,YAAU,MAAM,KAAK,QAAQ;;AAErC,SAAOA,YAAU,MAAM,WAAW,QAAQ;;;AAM5C,SAAS,QAAQ,WAAW,UAAU,EAAE,EAAE;AACzC,QAAO,UAAU,KAAK,WAAW,QAAQ;;AAK1C,IAAI,YAAY,MAAMC,YAAU;;;;CAI/B,OAAO,MAAM,MAAM,UAAU,EAAE,EAAE;EAChC,MAAM,QAAQ,OAAO,SAAS,WAAW,IAAI,aAAa,CAAC,OAAO,KAAK,GAAG,gBAAgB,aAAa,OAAO,IAAI,WAAW,KAAK;EAClI,MAAM,aAAaA,YAAU,cAAc,MAAM;EACjD,MAAM,SAASA,YAAU,YAAY,WAAW,KAAK;AACrD,MAAI,OAAO,WAAW,SAAS;GAC9B,MAAM,WAAW,IAAI,YAAY,QAAQ,CAAC,OAAO,MAAM,SAAS,WAAW,UAAU,CAAC;AACtF,UAAOA,YAAU,eAAe,QAAQ,UAAU,QAAQ;;EAE3D,MAAM,iBAAiB,OAAO,WAAW;AACzC,SAAOA,YAAU,gBAAgB,QAAQ,MAAM,SAAS,WAAW,UAAU,EAAE,gBAAgB,QAAQ;;CAExG,OAAO,cAAc,OAAO;EAC3B,MAAM,YAAY,KAAK,IAAI,MAAM,QAAQ,IAAI;EAC7C,MAAM,QAAQ,MAAM,SAAS,GAAG,UAAU;EAC1C,MAAM,MAAM,IAAI,YAAY,QAAQ,CAAC,OAAO,MAAM;EAClD,MAAM,SAAS,IAAI,QAAQ,aAAa;AACxC,MAAI,WAAW,GAAI,OAAM,IAAI,MAAM,kDAAkD;EACrF,IAAI,gBAAgB,IAAI,QAAQ,MAAM,OAAO;AAC7C,MAAI,kBAAkB,GAAI,iBAAgB,SAAS;MAC9C,kBAAiB;AACtB,SAAO;GACN,MAAM,IAAI,UAAU,GAAG,cAAc;GACrC,WAAW;GACX;;CAEF,OAAO,YAAY,WAAW;EAC7B,MAAM,QAAQ,UAAU,MAAM,QAAQ;EACtC,IAAI,SAAS;EACb,IAAIC,YAAU;EACd,MAAM,WAAW,EAAE;EACnB,IAAI,iBAAiB;AACrB,OAAK,MAAM,WAAW,OAAO;GAC5B,MAAM,OAAO,QAAQ,MAAM;AAC3B,OAAI,CAAC,QAAQ,KAAK,WAAW,UAAU,CAAE;GACzC,MAAM,QAAQ,KAAK,MAAM,MAAM;GAC/B,MAAM,MAAM,MAAM,IAAI,aAAa;AACnC,OAAI,QAAQ,MAAO;AACnB,OAAI,QAAQ,UAAU;IACrB,MAAM,MAAM,MAAM,IAAI,aAAa;AACnC,QAAI,QAAQ,uBAAwB,UAAS;aACpC,QAAQ,oBAAqB,UAAS;QAC1C,UAAS;AACd,gBAAU,MAAM,MAAM;cACZ,QAAQ,WAAW;AAC7B,qBAAiB;KAChB,MAAM,MAAM,MAAM;KAClB,OAAO,OAAO,SAAS,MAAM,MAAM,KAAK,GAAG;KAC3C,YAAY,EAAE;KACd;AACD,aAAS,KAAK,eAAe;cACnB,QAAQ,cAAc,eAAgB,KAAI,MAAM,IAAI,aAAa,KAAK,OAAQ,gBAAe,WAAW,KAAK;IACvH,MAAM,MAAM,MAAM;IAClB,MAAM;IACN,QAAQ;IACR,WAAW,MAAM,MAAM;IACvB,UAAU,MAAM,MAAM;IACtB,CAAC;OACG,gBAAe,WAAW,KAAK;IACnC,MAAM,MAAM,MAAM;IAClB,MAAM,MAAM,IAAI,aAAa,IAAI;IACjC,CAAC;YACO,QAAQ,aAAc;;AAEhC,SAAO;GACN;GACA;GACA;GACA;;CAEF,OAAO,eAAe,QAAQ,UAAU,SAAS;EAChD,MAAM,gBAAgB,OAAO,SAAS,MAAM,MAAM,EAAE,SAAS,SAAS;EACtE,MAAM,cAAc,OAAO,SAAS,MAAM,MAAM,EAAE,SAAS,OAAO;EAClE,MAAM,cAAc,eAAe,SAAS;EAC5C,MAAM,YAAY,aAAa,SAAS;EACxC,MAAM,eAAe,EAAE;EACvB,MAAM,aAAa,EAAE;EACrB,MAAM,SAAS,EAAE;EACjB,MAAM,YAAY,EAAE;EACpB,MAAM,aAAa,EAAE;EACrB,MAAM,SAAS,eAAe,cAAc,EAAE;EAC9C,MAAM,OAAO,OAAO,WAAW,MAAM,EAAE,SAAS,IAAI;EACpD,MAAM,OAAO,OAAO,WAAW,MAAM,EAAE,SAAS,IAAI;EACpD,MAAM,OAAO,OAAO,WAAW,MAAM,EAAE,SAAS,IAAI;EACpD,MAAM,QAAQ,OAAO,WAAW,MAAM,EAAE,SAAS,KAAK;EACtD,MAAM,QAAQ,OAAO,WAAW,MAAM,EAAE,SAAS,KAAK;EACtD,MAAM,QAAQ,OAAO,WAAW,MAAM,EAAE,SAAS,KAAK;EACtD,MAAM,OAAO,OAAO,WAAW,MAAM,EAAE,SAAS,OAAO,EAAE,SAAS,OAAO,EAAE,SAAS,YAAY;EAChG,MAAM,YAAY,OAAO,WAAW,MAAM,EAAE,SAAS,OAAO,EAAE,SAAS,OAAO,EAAE,SAAS,YAAY;EACrG,MAAM,OAAO,OAAO,WAAW,MAAM,EAAE,SAAS,SAAS,EAAE,SAAS,IAAI;EACxE,MAAM,OAAO,OAAO,WAAW,MAAM,EAAE,SAAS,WAAW,EAAE,SAAS,IAAI;EAC1E,MAAM,OAAO,OAAO,WAAW,MAAM,EAAE,SAAS,UAAU,EAAE,SAAS,IAAI;EACzE,MAAM,OAAO,OAAO,WAAW,MAAM,EAAE,SAAS,WAAW,EAAE,SAAS,IAAI;EAC1E,MAAM,aAAa,UAAU,MAAM,UAAU,MAAM,UAAU;EAC7D,MAAM,YAAY,SAAS,MAAM,SAAS,MAAM,SAAS;EACzD,MAAM,SAAS,SAAS,MAAM,cAAc;EAC5C,MAAM,QAAQ,SAAS,MAAM,CAAC,MAAM,QAAQ;EAC5C,IAAI,UAAU;AACd,OAAK,IAAI,IAAI,GAAG,IAAI,aAAa,KAAK;AACrC,OAAI,WAAW,MAAM,OAAQ;GAC7B,MAAM,OAAO,MAAM,YAAY,MAAM;AACrC,OAAI,CAAC,KAAM;GACX,MAAM,QAAQ,KAAK,MAAM,MAAM;GAC/B,MAAM,IAAI,OAAO,WAAW,MAAM,SAAS,IAAI,IAAI;GACnD,MAAM,IAAI,OAAO,WAAW,MAAM,SAAS,IAAI,IAAI;GACnD,MAAM,IAAI,OAAO,WAAW,MAAM,SAAS,IAAI,IAAI;AACnD,gBAAa,KAAK,GAAG,GAAG,EAAE;AAC1B,OAAI,YAAY;IACf,MAAM,KAAK,OAAO,WAAW,MAAM,UAAU,IAAI,IAAI;IACrD,MAAM,KAAK,OAAO,WAAW,MAAM,UAAU,IAAI,IAAI;IACrD,MAAM,KAAK,OAAO,WAAW,MAAM,UAAU,IAAI,IAAI;AACrD,eAAW,KAAK,IAAI,IAAI,GAAG;SACrB,YAAW,KAAK,GAAG,GAAG,EAAE;AAC/B,OAAI,QAAQ;IACX,MAAM,IAAI,OAAO,WAAW,MAAM,SAAS,IAAI,IAAI;IACnD,MAAM,SAAS,OAAO,WAAW,MAAM,cAAc,IAAI,IAAI;AAC7D,WAAO,KAAK,GAAG,IAAI,OAAO;SACpB,QAAO,KAAK,GAAG,EAAE;AACxB,OAAI,WAAW;IACd,MAAM,KAAK,OAAO,WAAW,MAAM,SAAS,MAAM,IAAI,KAAK;IAC3D,MAAM,OAAO,OAAO,WAAW,MAAM,SAAS,MAAM,IAAI,KAAK;IAC7D,MAAM,KAAK,OAAO,WAAW,MAAM,SAAS,MAAM,IAAI,KAAK;IAC3D,MAAM,IAAI,SAAS,MAAM,OAAO,WAAW,MAAM,SAAS,MAAM,IAAI,KAAK,MAAM;AAC/E,cAAU,KAAK,GAAG,KAAK,GAAG,EAAE;;;AAG9B,OAAK,IAAI,IAAI,GAAG,IAAI,WAAW,KAAK;AACnC,OAAI,WAAW,MAAM,OAAQ;GAC7B,MAAM,OAAO,MAAM,YAAY,MAAM;AACrC,OAAI,CAAC,KAAM;GACX,MAAM,QAAQ,KAAK,MAAM,MAAM;GAC/B,MAAM,IAAI,OAAO,SAAS,MAAM,MAAM,KAAK,GAAG;AAC9C,OAAI,KAAK,GAAG;IACX,MAAM,KAAK,OAAO,SAAS,MAAM,MAAM,KAAK,GAAG;AAC/C,SAAK,IAAI,IAAI,GAAG,IAAI,IAAI,GAAG,KAAK;KAC/B,MAAM,KAAK,OAAO,SAAS,MAAM,IAAI,MAAM,KAAK,GAAG;KACnD,MAAM,KAAK,OAAO,SAAS,MAAM,IAAI,MAAM,KAAK,GAAG;AACnD,gBAAW,KAAK,IAAI,IAAI,GAAG;;;;AAI9B,SAAOD,YAAU,cAAc,cAAc,YAAY,QAAQ,YAAY,YAAY,KAAK,GAAG,YAAY,YAAY,QAAQ;;CAElI,OAAO,gBAAgB,QAAQ,WAAW,gBAAgB,SAAS;EAClE,MAAM,OAAO,IAAI,SAAS,UAAU,QAAQ,UAAU,YAAY,UAAU,WAAW;EACvF,IAAI,SAAS;EACb,MAAM,gBAAgB,OAAO,SAAS,MAAM,MAAM,EAAE,SAAS,SAAS;EACtE,MAAM,cAAc,OAAO,SAAS,MAAM,MAAM,EAAE,SAAS,OAAO;EAClE,MAAM,cAAc,eAAe,SAAS;EAC5C,MAAM,YAAY,aAAa,SAAS;EACxC,MAAM,eAAe,EAAE;EACvB,MAAM,aAAa,EAAE;EACrB,MAAM,SAAS,EAAE;EACjB,MAAM,YAAY,EAAE;EACpB,MAAM,aAAa,EAAE;EACrB,MAAM,SAAS,eAAe,cAAc,EAAE;EAC9C,MAAM,aAAa,OAAO,MAAM,MAAM,EAAE,SAAS,KAAK;EACtD,MAAM,YAAY,OAAO,MAAM,MAAM,EAAE,SAAS,SAAS,EAAE,SAAS,IAAI;EACxE,MAAM,YAAY,YAAY;GAC7B,IAAI,MAAM;AACV,WAAQ,QAAQ,aAAa,EAA7B;IACC,KAAK;IACL,KAAK;AACJ,WAAM,KAAK,QAAQ,OAAO;AAC1B,eAAU;AACV;IACD,KAAK;IACL,KAAK;AACJ,WAAM,KAAK,SAAS,OAAO;AAC3B,eAAU;AACV;IACD,KAAK;IACL,KAAK;AACJ,WAAM,KAAK,SAAS,QAAQ,eAAe;AAC3C,eAAU;AACV;IACD,KAAK;IACL,KAAK;AACJ,WAAM,KAAK,UAAU,QAAQ,eAAe;AAC5C,eAAU;AACV;IACD,KAAK;IACL,KAAK;AACJ,WAAM,KAAK,SAAS,QAAQ,eAAe;AAC3C,eAAU;AACV;IACD,KAAK;IACL,KAAK;AACJ,WAAM,KAAK,UAAU,QAAQ,eAAe;AAC5C,eAAU;AACV;IACD,KAAK;IACL,KAAK;AACJ,WAAM,KAAK,WAAW,QAAQ,eAAe;AAC7C,eAAU;AACV;IACD,KAAK;IACL,KAAK;AACJ,WAAM,KAAK,WAAW,QAAQ,eAAe;AAC7C,eAAU;AACV;IACD;AACC,WAAM,KAAK,WAAW,QAAQ,eAAe;AAC7C,eAAU;AACV;;AAEF,UAAO;;AAER,OAAK,IAAI,IAAI,GAAG,IAAI,aAAa,KAAK;GACrC,IAAI,IAAI,GAAG,IAAI,GAAG,IAAI;GACtB,IAAI,KAAK,GAAG,KAAK,GAAG,KAAK;GACzB,IAAI,IAAI,GAAG,SAAS;GACpB,IAAI,IAAI,GAAG,MAAM,GAAG,IAAI,GAAG,IAAI;AAC/B,QAAK,MAAM,QAAQ,QAAQ;IAC1B,MAAM,MAAM,SAAS,KAAK,KAAK;IAC/B,MAAM,QAAQ,KAAK,KAAK,aAAa;AACrC,QAAI,UAAU,IAAK,KAAI;aACd,UAAU,IAAK,KAAI;aACnB,UAAU,IAAK,KAAI;aACnB,UAAU,KAAM,MAAK;aACrB,UAAU,KAAM,MAAK;aACrB,UAAU,KAAM,MAAK;aACrB,UAAU,OAAO,UAAU,IAAK,KAAI;aACpC,UAAU,OAAO,UAAU,IAAK,UAAS;aACzC,UAAU,SAAS,UAAU,IAAK,KAAI,KAAK,KAAK,SAAS,MAAM,GAAG,MAAM,MAAM;aAC9E,UAAU,WAAW,UAAU,IAAK,OAAM,KAAK,KAAK,SAAS,MAAM,GAAG,MAAM,MAAM;aAClF,UAAU,UAAU,UAAU,IAAK,KAAI,KAAK,KAAK,SAAS,MAAM,GAAG,MAAM,MAAM;aAC/E,UAAU,WAAW,UAAU,IAAK,KAAI,KAAK,KAAK,SAAS,MAAM,GAAG,MAAM,MAAM;;AAE1F,gBAAa,KAAK,GAAG,GAAG,EAAE;AAC1B,cAAW,KAAK,IAAI,IAAI,GAAG;AAC3B,UAAO,KAAK,GAAG,IAAI,OAAO;AAC1B,OAAI,UAAW,WAAU,KAAK,GAAG,KAAK,GAAG,EAAE;;EAE5C,MAAM,YAAY,aAAa,cAAc,EAAE,EAAE,MAAM,MAAM,EAAE,OAAO;AACtE,OAAK,IAAI,IAAI,GAAG,IAAI,WAAW,KAAK;AACnC,OAAI,UAAU,UAAU,WAAY;AACpC,OAAI,UAAU;IACb,MAAM,QAAQ,SAAS,SAAS,aAAa,QAAQ;IACrD,MAAM,QAAQ,EAAE;AAChB,SAAK,IAAI,IAAI,GAAG,IAAI,OAAO,IAAK,OAAM,KAAK,SAAS,SAAS,YAAY,MAAM,CAAC;AAChF,QAAI,MAAM,UAAU,GAAG;KACtB,MAAM,KAAK,MAAM;AACjB,UAAK,IAAI,IAAI,GAAG,IAAI,MAAM,SAAS,GAAG,IAAK,YAAW,KAAK,IAAI,MAAM,IAAI,MAAM,IAAI,GAAG;;;;AAIzF,SAAOA,YAAU,cAAc,cAAc,YAAY,QAAQ,YAAY,YAAY,KAAK,GAAG,YAAY,YAAY,QAAQ;;CAElI,OAAO,cAAc,cAAc,YAAY,QAAQ,WAAW,YAAY,YAAY,SAAS;AAClG,MAAI,CAAC,cAAc,QAAQ,cAAe,yBAAwB,cAAc,YAAY,WAAW;EACvG,MAAM,SAAS,cAAc,aAAa;EAC1C,MAAMF,cAAY,sBAAsB,QAAQ,QAAQ;EACxD,MAAM,YAAY,mBAAmB,cAAcA,YAAU;EAC7D,MAAM,aAAa,iBAAiB,YAAY,UAAU,SAAS,EAAE;EACrE,MAAM,kBAAkB;GACvB,MAAM;GACN,cAAc,YAAY;IACzB;IACA;IACA;IACA;IACA,GAAG;IACH;IACA;IACA;IACA;IACA;GACD,WAAW;GACX,mBAAmB;GACnB,GAAG,QAAQ;GACX;AACD,SAAO;GACN,MAAM;GACN,QAAQ,CAAC;IACR,IAAI;IACJ,MAAM;IACN;IACA,SAAS,IAAI,aAAa,WAAW;IACrC,KAAK,IAAI,aAAa,OAAO;IAC7B,QAAQ,YAAY,IAAI,aAAa,UAAU,GAAG,KAAK;IACvD,SAAS;IACT,cAAc;IACd,CAAC;GACF,WAAW,EAAE,aAAa,iBAAiB;GAC3C,YAAY,EAAE;GACd,QAAQ,qBAAqB,QAAQA,YAAU;GAC/C;;;;;CAKF,OAAO,KAAK,WAAW,UAAU,EAAE,EAAE;AACpC,MAAI,OAAO,cAAc,SAAU,QAAOE,YAAU,MAAM,WAAW,QAAQ;AAC7E,MAAI,UAAU,WAAW,IAAI,IAAI,UAAU,WAAW,KAAK,IAAI,UAAU,WAAW,MAAM,IAAI,UAAU,WAAW,UAAU,EAAE;GAC9H,MAAM,YAAY,UAAU,WAAW,UAAU,GAAG,UAAU,QAAQ,WAAW,GAAG,GAAG;GACvF,MAAM,MAAM,GAAG,aAAa,UAAU;AACtC,UAAOA,YAAU,MAAM,KAAK,QAAQ;;AAErC,SAAOA,YAAU,MAAM,WAAW,QAAQ;;;AAM5C,SAAS,QAAQ,WAAW,UAAU,EAAE,EAAE;AACzC,QAAO,UAAU,KAAK,WAAW,QAAQ;;AAK1C,MAAM,aAAa;CAClB,QAAQ;CACR,MAAM;CACN,MAAM;CACN,MAAM;CACN,MAAM;CACN,MAAM;CACN,MAAM;CACN;AACD,MAAM,kBAAkB;CACvB,MAAM;CACN,MAAM;CACN,MAAM;CACN,MAAM;CACN,MAAM;CACN,MAAM;CACN;;AAED,SAAS,gBAAgB,eAAe,aAAa,OAAO;AAC3D,SAAQ,eAAR;EACC,KAAK,KAAM,QAAO,cAAc,IAAI,OAAO,KAAK,IAAI,GAAG,QAAQ,GAAG,GAAG,KAAK,GAAG,IAAI,IAAI,OAAO,GAAG,QAAQ,GAAG;EAC1G,KAAK,KAAM,QAAO,cAAc,IAAI,OAAO,GAAG,SAAS,GAAG,GAAG,OAAO,IAAI,OAAO,GAAG,SAAS,GAAG;EAC9F,KAAK,KAAM,QAAO,cAAc,IAAI,OAAO,KAAK,IAAI,GAAG,SAAS,IAAI,KAAK,GAAG,OAAO,GAAG,IAAI,IAAI,OAAO,GAAG,SAAS,IAAI,KAAK;EAC1H,KAAK,KAAM,QAAO,cAAc,IAAI,OAAO,GAAG,UAAU,IAAI,KAAK,GAAG,SAAS,IAAI,OAAO,GAAG,UAAU,IAAI,KAAK;EAC9G,KAAK,KAAM,SAAQ,IAAI,OAAO,GAAG,UAAU,IAAI,KAAK;EACpD,QAAS,SAAQ,IAAI,OAAO,GAAG,WAAW,IAAI,KAAK;;;;AAIrD,MAAM,kCAAkC;CACvC,4BAA4B;CAC5B,yBAAyB;CACzB;AACD,MAAM,YAAY;AAClB,MAAM,kBAAkB;AACxB,MAAM,iBAAiB;AACvB,IAAI,aAAa,MAAME,aAAW;;;;CAIjC,OAAO,MAAM,QAAQ;EACpB,MAAM,QAAQ,kBAAkB,aAAa,SAAS,IAAI,WAAW,OAAO;AAC5E,MAAI,MAAM,SAAS,GAAI,QAAO;AAC9B,SAAO,IAAI,SAAS,MAAM,QAAQ,MAAM,YAAY,MAAM,WAAW,CAAC,UAAU,GAAG,KAAK,KAAK;;;;;CAK9F,OAAO,MAAM,MAAM,UAAU,EAAE,EAAE,UAAU;EAC1C,IAAI;EACJ,MAAM,gBAAgB,EAAE;AACxB,MAAI,OAAO,SAAS,SAAU,KAAI;AACjC,SAAM,KAAK,MAAM,KAAK;WACd,KAAK;AACb,SAAM,IAAI,MAAM,8BAA8B,OAAO,IAAI,GAAG;;OAExD;GACJ,MAAM,QAAQ,gBAAgB,aAAa,OAAO,IAAI,WAAW,KAAK;AACtE,OAAIA,aAAW,MAAM,MAAM,EAAE;IAC5B,MAAM,MAAMA,aAAW,UAAU,MAAM;AACvC,UAAM,IAAI;AACV,QAAI,IAAI,UAAW,eAAc,KAAK,IAAI,UAAU;UAC9C;IACN,MAAM,OAAO,IAAI,YAAY,QAAQ,CAAC,OAAO,MAAM;AACnD,UAAM,KAAK,MAAM,KAAK;;;AAGxB,MAAI,IAAI,QAAS,MAAK,IAAI,IAAI,GAAG,IAAI,IAAI,QAAQ,QAAQ,KAAK;AAC7D,OAAI,MAAM,KAAK,cAAc,SAAS,EAAG;GACzC,MAAM,MAAM,IAAI,QAAQ;AACxB,OAAI,IAAI,KACP;QAAI,IAAI,IAAI,WAAW,QAAQ,EAAE;KAChC,MAAM,cAAc,IAAI,IAAI,QAAQ,UAAU;AAC9C,SAAI,gBAAgB,IAAI;MACvB,MAAM,MAAM,IAAI,IAAI,UAAU,cAAc,EAAE;MAC9C,MAAM,SAAS,OAAO,KAAK,KAAK,SAAS;AACzC,oBAAc,KAAK,IAAI,WAAW,OAAO,QAAQ,OAAO,YAAY,OAAO,WAAW;;eAE7E,UAAU;KACpB,MAAM,WAAW,KAAK,WAAW,IAAI,IAAI,GAAG,IAAI,MAAM,KAAK,KAAK,UAAU,IAAI,IAAI;AAClF,SAAI,GAAG,WAAW,SAAS,EAAE;MAC5B,MAAM,UAAU,GAAG,aAAa,SAAS;AACzC,oBAAc,KAAK,IAAI,WAAW,QAAQ,QAAQ,QAAQ,YAAY,QAAQ,WAAW;;;;;AAK7F,OAAK,MAAM,OAAO,IAAI,sBAAsB,EAAE,EAAE;GAC/C,MAAM,OAAO,gCAAgC;AAC7C,OAAI,KAAM,OAAM,IAAI,MAAM,sBAAsB,IAAI,IAAI,KAAK,sIAAsI;;AAEpM,SAAOA,aAAW,WAAW,KAAK,eAAe,SAAS,SAAS;;CAEpE,OAAO,UAAU,OAAO;EACvB,MAAM,OAAO,IAAI,SAAS,MAAM,QAAQ,MAAM,YAAY,MAAM,WAAW;EAC3E,MAAM,QAAQ,KAAK,UAAU,GAAG,KAAK;EACrC,MAAM,cAAc,KAAK,UAAU,GAAG,KAAK;AAC3C,MAAI,UAAU,UAAW,OAAM,IAAI,MAAM,qCAAqC;EAC9E,IAAI,SAAS;EACb,IAAI,MAAM;EACV,IAAI;AACJ,SAAO,SAAS,eAAe,SAAS,MAAM,YAAY;GACzD,MAAM,cAAc,KAAK,UAAU,QAAQ,KAAK;GAChD,MAAM,YAAY,KAAK,UAAU,SAAS,GAAG,KAAK;AAClD,aAAU;GACV,MAAM,YAAY,MAAM,SAAS,QAAQ,SAAS,YAAY;AAC9D,aAAU;AACV,OAAI,cAAc,iBAAiB;IAClC,MAAM,UAAU,IAAI,YAAY,QAAQ,CAAC,OAAO,UAAU;AAC1D,UAAM,KAAK,MAAM,QAAQ;cACf,cAAc,eAAgB,aAAY;;AAEtD,MAAI,CAAC,IAAK,OAAM,IAAI,MAAM,oCAAoC;AAC9D,SAAO;GACN;GACA;GACA;;;;;;;CAOF,OAAO,WAAW,KAAK,eAAe,eAAe;EACpD,MAAM,WAAW,IAAI,YAAY;AACjC,MAAI,CAAC,SAAU,OAAM,IAAI,MAAM,YAAY,cAAc,YAAY;EACrE,MAAM,WAAW,WAAW,SAAS,SAAS;EAC9C,MAAM,MAAM,IAAI,aAAa,SAAS,QAAQ,SAAS;AACvD,MAAI,SAAS,eAAe,KAAK,EAAG,QAAO;GAC1C,MAAM;GACN;GACA,OAAO,SAAS;GAChB;EACD,MAAM,OAAO,IAAI,cAAc,SAAS;AACxC,MAAI,CAAC,KAAM,OAAM,IAAI,MAAM,cAAc,SAAS,WAAW,YAAY;EACzE,MAAM,MAAM,cAAc,KAAK;AAC/B,MAAI,CAAC,IAAK,OAAM,IAAI,MAAM,iBAAiB,KAAK,OAAO,aAAa;EACpE,MAAM,QAAQ,gBAAgB,SAAS,kBAAkB;EACzD,MAAM,SAAS,KAAK,cAAc,QAAQ;EAC1C,MAAM,KAAK,IAAI,SAAS,IAAI,QAAQ,IAAI,YAAY,IAAI,WAAW;EACnE,MAAM,QAAQ,KAAK,cAAc,MAAM,SAAS,cAAc;EAC9D,MAAM,OAAO,gBAAgB,SAAS,eAAe,SAAS,WAAW;AACzE,OAAK,IAAI,IAAI,GAAG,IAAI,SAAS,OAAO,IAAK,MAAK,IAAI,IAAI,GAAG,IAAI,UAAU,IAAK,KAAI,IAAI,WAAW,KAAK,KAAK,IAAI,OAAO,IAAI,SAAS,IAAI,MAAM;AAC3I,SAAO;GACN,MAAM;GACN;GACA,OAAO,SAAS;GAChB;;CAEF,OAAO,YAAY,KAAK,eAAe,eAAe;EACrD,MAAM,EAAE,SAASA,aAAW,WAAW,KAAK,eAAe,cAAc;AACzE,SAAO,KAAK,QAAQ,GAAG,MAAM,IAAI,IAAI,IAAI,GAAG,EAAE,GAAG,QAAQ,YAAY,KAAK,KAAK,GAAG,YAAY,KAAK,KAAK;;;CAGzG,OAAO,WAAW,KAAK,eAAe,YAAY,UAAU;EAC3D,MAAM,QAAQ,IAAI,SAAS;AAC3B,MAAI,CAAC,MAAO,QAAO,KAAK;AACxB,MAAI,MAAM,eAAe,KAAK,GAAG;GAChC,MAAM,OAAO,IAAI,cAAc,MAAM;GACrC,MAAM,MAAM,OAAO,cAAc,KAAK,UAAU,KAAK;AACrD,OAAI,CAAC,QAAQ,CAAC,IAAK,QAAO,KAAK;GAC/B,MAAM,QAAQ,KAAK,cAAc;AACjC,UAAO;IACN,OAAO,IAAI,SAAS,OAAO,QAAQ,KAAK,WAAW;IACnD,MAAM,MAAM,YAAY;IACxB;;AAEF,MAAI,CAAC,MAAM,IAAK,QAAO,KAAK;AAC5B,MAAI,MAAM,IAAI,WAAW,QAAQ,EAAE;GAClC,MAAM,QAAQ,MAAM,IAAI,QAAQ,IAAI;GACpC,MAAM,OAAO,MAAM,IAAI,MAAM,GAAG,MAAM,IAAI,QAAQ,IAAI,CAAC;AACvD,UAAO;IACN,OAAO,IAAI,WAAW,OAAO,KAAK,MAAM,IAAI,MAAM,QAAQ,EAAE,EAAE,SAAS,CAAC;IACxE;IACA;;AAEF,MAAI,CAAC,SAAU,QAAO,KAAK;EAC3B,MAAM,OAAO,KAAK,WAAW,MAAM,IAAI,GAAG,MAAM,MAAM,KAAK,KAAK,UAAU,mBAAmB,MAAM,IAAI,CAAC;AACxG,MAAI,CAAC,GAAG,WAAW,KAAK,EAAE;AACzB,gBAAW,KAAK,UAAU,MAAM,IAAI,mEAAmE;AACvG;;AAED,SAAO;GACN,OAAO,IAAI,WAAW,GAAG,aAAa,KAAK,CAAC;GAC5C,MAAM,MAAM,YAAY,YAAY,KAAK;GACzC;;CAEF,OAAO,KAAK,SAAS;AACpB,UAAQ,KAAK,gBAAgB,UAAU;;;CAGxC,OAAO,WAAW,MAAM;AACvB,SAAO,KAAK,YAAY,uBAAuB,YAAY,KAAK,YAAY;;;CAG7E,OAAO,OAAO,KAAK;EAClB,MAAM,QAAQ;GACb,KAAK,sBAAsB;GAC3B,KAAK;GACL,KAAK,sBAAsB;GAC3B,KAAK;GACL,KAAK;GACL,CAAC,MAAM,MAAM,MAAM,KAAK,EAAE;AAC3B,SAAO,QAAQ;GACd,UAAUA,aAAW,WAAW,MAAM;GACtC,WAAW,MAAM,YAAY;GAC7B,GAAG,EAAE,UAAU,GAAG;;;;;;;CAOpB,OAAO,aAAa,KAAK,eAAe,cAAc,UAAU,OAAO;EACtE,MAAM,UAAU,IAAI,WAAW;AAC/B,MAAI,CAAC,QAAS,QAAO,KAAK;EAC1B,MAAM,SAAS,QAAQ,YAAY,kBAAkB,UAAU,QAAQ;AACvE,MAAI,WAAW,KAAK,GAAG;AACtB,OAAI,QAAQ,YAAY,mBAAoB,cAAW,KAAK,GAAG,MAAM,qGAAqG;AAC1K;;EAED,MAAM,QAAQA,aAAW,WAAW,KAAK,eAAe,QAAQ,SAAS;AACzE,MAAI,CAAC,MAAO,QAAO,KAAK;AACxB,MAAI,CAAC,sBAAsB,IAAI,MAAM,KAAK,EAAE;AAC3C,gBAAW,KAAK,GAAG,MAAM,MAAM,MAAM,KAAK,2EAA2E;AACrH;;EAED,MAAM,UAAU,QAAQ,YAAY,KAAK,IAAI,IAAI,WAAW,QAAQ,WAAW,KAAK;AACpF,SAAO;GACN,GAAG;GACH;GACA;;CAEF,OAAO,cAAc,KAAK,eAAe,KAAK,MAAM,UAAU;EAC7D,MAAM,MAAM,IAAI;EAChB,MAAM,YAAY,KAAK,mBAAmB;GACzC;GACA;GACA;GACA;GACA;EACD,MAAM,WAAW;GAChB;GACA,cAAc;GACd,WAAW,KAAK,mBAAmB;GACnC,UAAU,KAAK,kBAAkB;GACjC,WAAW,MAAM,KAAK,KAAK,mBAAmB;GAC9C,SAAS,UAAU,MAAM;GACzB,UAAU,IAAI,eAAe;GAC7B,WAAW,IAAI,cAAc,SAAS,SAAS,IAAI,cAAc,UAAU,UAAU;GACrF,aAAa,IAAI,cAAc,SAAS,IAAI,eAAe,KAAK;GAChE;EACD,MAAM,IAAI,IAAI;AACd,MAAI,MAAM,EAAE,KAAK,KAAK,EAAE,KAAK,KAAK,EAAE,KAAK,IAAI;AAC5C,YAAS,WAAW;IACnB,EAAE;IACF,EAAE;IACF,EAAE;IACF;AACD,YAAS,mBAAmB,IAAI,YAAY,iCAAiC,oBAAoB;;EAElG,MAAM,QAAQ,IAAI,YAAY;AAC9B,MAAI,OAAO;AACV,YAAS,UAAU;AACnB,YAAS,aAAa,MAAM,oBAAoB;IAC/C;IACA;IACA;IACA;aACS,IAAI,YAAY,oBAAqB,UAAS,UAAU;EACnE,MAAM,OAAOA,aAAW,OAAO,IAAI;EACnC,MAAM,SAAS,MAAM,SAAS;AAC7B,OAAI,CAAC,KAAM,QAAO,KAAK;GACvB,MAAM,QAAQ,OAAO,KAAK,oBAAoB,KAAK;GACnD,MAAM,MAAMA,aAAW,WAAW,KAAK;AACvC,OAAI,QAAQ,KAAK,UAAU;AAC1B,iBAAW,KAAK,GAAG,MAAM,eAAe,IAAI,mCAAmC,KAAK,SAAS,uBAAuB;AACpH;;GAED,MAAM,IAAI,KAAK,YAAY;AAC3B,OAAI,KAAK,UAAU,KAAK,KAAK,KAAK,KAAK,UAAU,KAAK,aAAa,KAAK,CAAE,cAAW,KAAK,GAAG,MAAM,gGAAgG;AACnM,UAAOA,aAAW,aAAa,KAAK,eAAe,KAAK,OAAO,UAAU,MAAM;;EAEhF,MAAM,OAAO,MAAM,KAAK,kBAAkB,aAAa;AACvD,MAAI,MAAM;AACT,YAAS,uBAAuB,KAAK;AACrC,YAAS,qBAAqB,KAAK;GACnC,MAAM,OAAO,KAAK,SAAS;AAC3B,YAAS,cAAc,SAAS,QAAQ,UAAU,SAAS,QAAQ,WAAW;AAC9E,OAAI,KAAK,SAAS,cAAc,KAAM,UAAS,gBAAgB;;EAEhE,MAAM,YAAY,MAAM,SAAS,MAAM,MAAM,KAAK,EAAE;EACpD,MAAM,SAAS,SAAS,IAAI,eAAe,SAAS;AACpD,MAAI,QAAQ;AACX,YAAS,sBAAsB;AAC/B,YAAS,cAAc,IAAI,eAAe,SAAS;;EAEpD,MAAM,KAAK,SAAS,KAAK,0BAA0B,qBAAqB;AACxE,MAAI,IAAI;AACP,YAAS,iCAAiC;AAC1C,YAAS,YAAY,KAAK,mBAAmB;AAC7C,YAAS,WAAW,KAAK,kBAAkB;;EAE5C,MAAM,YAAY,SAAS,IAAI,kBAAkB,YAAY;AAC7D,MAAI,WAAW;AACd,YAAS,yBAAyB;AAClC,YAAS,oBAAoB,IAAI,kBAAkB,YAAY;;EAEhE,MAAM,cAAc,SAAS,YAAY,SAAS,IAAI,iBAAiB,WAAW;AAClF,MAAI,YAAa,UAAS,wBAAwB;AAClD,SAAO;;CAER,OAAO,WAAW,KAAK;EACtB,MAAM,SAAS,IAAI,SAAS,EAAE,EAAE,KAAK,GAAG,OAAO;GAC9C,MAAM,EAAE,QAAQ,QAAQ;GACxB,QAAQ;GACR,aAAa,EAAE,eAAe;IAC7B;IACA;IACA;IACA;GACD,UAAU,EAAE,YAAY;IACvB;IACA;IACA;IACA;IACA;GACD,OAAO,EAAE,SAAS;IACjB;IACA;IACA;IACA;GACD,QAAQ,EAAE,SAAS,EAAE,SAAS,KAAK;GACnC,EAAE;AACH,GAAC,IAAI,SAAS,EAAE,EAAE,SAAS,GAAG,MAAM;AACnC,QAAK,MAAM,KAAK,EAAE,YAAY,EAAE,EAAE;IACjC,MAAM,QAAQ,MAAM;AACpB,QAAI,MAAO,OAAM,SAAS;;IAE1B;AACF,SAAO;;CAER,OAAO,gBAAgB,KAAK,eAAe,OAAO;AACjD,UAAQ,IAAI,cAAc,EAAE,EAAE,KAAK,SAAS,YAAY;GACvD,MAAM,SAAS,EAAE;GACjB,IAAIC,aAAW;AACf,QAAK,MAAM,QAAQ,QAAQ,UAAU;IACpC,MAAM,UAAU,QAAQ,SAAS,KAAK;IACtC,MAAM,OAAO,KAAK,OAAO;AACzB,QAAI,CAAC,WAAW,SAAS,KAAK,KAAK,KAAK,OAAO,SAAS,UAAW;IACnE,MAAM,QAAQD,aAAW,WAAW,KAAK,eAAe,QAAQ,MAAM,CAAC;IACvE,MAAM,SAASA,aAAW,WAAW,KAAK,eAAe,QAAQ,OAAO,CAAC;AACzE,iBAAW,KAAK,IAAIC,YAAU,MAAM,MAAM,SAAS,MAAM,EAAE;IAC3D,MAAM,QAAQ;KACb,UAAU,MAAM,OAAO,QAAQ,QAAQ;KACvC;KACA;KACA,eAAe,QAAQ,kBAAkB,SAAS,SAAS,QAAQ,kBAAkB,gBAAgB,UAAU;KAC/G;AACD,QAAI,KAAK,OAAO,SAAS,cAAe,OAAM,eAAe;aACpD,KAAK,OAAO,SAAS,WAAY,OAAM,YAAY;QACvD,OAAM,SAAS;AACpB,WAAO,KAAK,MAAM;;AAEnB,UAAO;IACN,MAAM,QAAQ,QAAQ,aAAa;IACnC,UAAUA,aAAW,IAAIA,aAAW;IACpC,KAAK;IACL;IACA;IACA;;CAEH,OAAO,WAAW,KAAK,eAAe,SAAS,UAAU;EACxD,MAAM,gBAAgB,IAAI,aAAa,EAAE,EAAE,KAAK,KAAK,KAAK,QAAQ;GACjE,MAAM,OAAO,IAAI,QAAQ,YAAY;AACrC,UAAO,IAAI,WAAW,GAAG,OAAO,EAAE,QAAQ,YAAY,SAAS,KAAK,KAAK,MAAM,OAAO,GAAG,KAAK,GAAG;IAChG;EACF,MAAM,YAAY,EAAE;AACpB,GAAC,IAAI,aAAa,EAAE,EAAE,SAAS,KAAK,QAAQ;GAC3C,MAAM,MAAM,aAAa;AACzB,aAAU,OAAOD,aAAW,cAAc,KAAK,eAAe,KAAK,KAAK,SAAS;IAChF;EACF,MAAM,WAAW,IAAI,aAAa,EAAE,EAAE,KAAK,QAAQA,aAAW,OAAO,IAAI,CAAC;EAC1E,MAAM,QAAQA,aAAW,WAAW,IAAI;EACxC,MAAM,SAAS,IAAI,SAAS,EAAE,EAAE,KAAK,UAAU;GAC9C,QAAQ,KAAK;GACb,qBAAqB,KAAK,wBAAwB,KAAK,IAAIA,aAAW,WAAW,KAAK,eAAe,KAAK,oBAAoB,CAAC,OAAO,aAAa,KAAK,KAAK,OAAO,cAAc,YAAY,UAAU,CAAC,CAAC;GAC1M,EAAE;EACH,MAAM,aAAaA,aAAW,gBAAgB,KAAK,eAAe,MAAM;EACxE,MAAM,UAAU,IAAI,SAAS,EAAE,EAAE,SAAS,GAAG,SAAS,EAAE,SAAS,KAAK,IAAI,CAAC;GAC1E,MAAM,EAAE;GACR;GACA,MAAM,EAAE;GACR,CAAC,GAAG,EAAE,CAAC;EACR,MAAM,YAAY,OAAO,SAAS,IAAI,UAAU,IAAI,UAAU,EAAE,EAAE,KAAK,GAAG,UAAU,EAAE,MAAM,EAAE;EAC9F,MAAM,QAAQ;GACb,MAAM;GACN,QAAQ,EAAE;GACV;GACA;GACA;GACA;GACA,QAAQ;IACP,KAAK;KACJ;KACA;KACA;KACA;IACD,KAAK;KACJ;KACA;KACA;KACA;IACD,QAAQ;KACP;KACA;KACA;KACA;IACD,MAAM;KACL;KACA;KACA;KACA;IACD,sBAAsB;IACtB;GACD;EACD,MAAM,OAAO,UAAU,OAAO,KAAK,GAAG,EAAE;EACxC,IAAI,OAAO,UAAU,OAAO,UAAU,OAAO;EAC7C,IAAI,OAAO,WAAW,OAAO,WAAW,OAAO;EAC/C,MAAM,QAAQ,GAAG,GAAG,MAAM;AACzB,OAAI,IAAI,KAAM,QAAO;AACrB,OAAI,IAAI,KAAM,QAAO;AACrB,OAAI,IAAI,KAAM,QAAO;AACrB,OAAI,IAAI,KAAM,QAAO;AACrB,OAAI,IAAI,KAAM,QAAO;AACrB,OAAI,IAAI,KAAM,QAAO;;AAEtB,OAAK,MAAM,QAAQ,WAAW;GAC7B,MAAM,UAAU,IAAI,SAAS,KAAK;AAClC,OAAI,CAAC,QAAS;AACd,WAAQ,WAAW,SAAS,MAAM,YAAY;AAC7C,QAAI,KAAK,WAAW,aAAa,KAAK,EAAG;AACzC,QAAI,KAAK,SAAS,KAAK,KAAK,KAAK,SAAS,EAAG;IAC7C,MAAM,QAAQ,QAAQ,QAAQ,KAAK,IAAI,KAAK,IAAIA,aAAW,WAAW,KAAK,eAAe,IAAI;IAC9F,MAAM,MAAM,KAAK,KAAK,WAAW,SAAS;IAC1C,MAAM,WAAW,IAAI;IACrB,MAAM,OAAO,KAAK,aAAa,KAAK,IAAI,QAAQ,KAAK,YAAY,KAAK;IACtE,MAAM,aAAa,KAAK;IACxB,MAAM,MAAM,KAAK,WAAW,YAAY,MAAM,YAAY,KAAK,EAAE,QAAQ,KAAK,KAAK,WAAW,WAAW,EAAE,QAAQ,IAAI,aAAa,WAAW,EAAE;AACjJ,QAAI,MAAM,UAAW,uBAAsB,KAAK,KAAK,UAAU;IAC/D,MAAM,SAAS,KAAK,KAAK,WAAW,QAAQ;IAC5C,IAAI;AACJ,QAAI,QAAQ;AACX,YAAO,IAAI,aAAa,WAAW,EAAE,CAAC,KAAK,EAAE;AAC7C,UAAK,IAAI,IAAI,GAAG,IAAI,UAAU,IAAK,MAAK,IAAI,IAAI,GAAG,IAAI,OAAO,UAAU,KAAK;MAC5E,MAAM,QAAQ,OAAO,KAAK,IAAI,OAAO,WAAW,MAAM;AACtD,WAAK,IAAI,IAAI,KAAK,IAAI,IAAI,aAAa,MAAM,GAAG;;;IAGlD,IAAI;AACJ,QAAI,KAAK,YAAY,KAAK,EAAG,WAAUA,aAAW,YAAY,KAAK,eAAe,KAAK,QAAQ;SAC1F;AACJ,eAAU,WAAW,QAAQ,IAAI,YAAY,SAAS,GAAG,IAAI,YAAY,SAAS;AAClF,UAAK,IAAI,IAAI,GAAG,IAAI,UAAU,IAAK,SAAQ,KAAK;;IAEjD,MAAM,UAAU,KAAK,SAAS,KAAK,KAAK,KAAK,WAAW,aAAa,KAAK;IAC1E,MAAM,QAAQ,CAAC,WAAW,KAAK,SAAS,KAAK,IAAI,KAAK,KAAK,QAAQ,KAAK;AACxE,SAAK,IAAI,IAAI,GAAG,IAAI,UAAU,KAAK;KAClC,MAAM,IAAI,IAAI,KAAK,IAAI;KACvB,MAAM,IAAI,IAAI,KAAK,IAAI,IAAI;KAC3B,MAAM,IAAI,IAAI,KAAK,IAAI,IAAI;AAC3B,SAAI,OAAO;MACV,MAAM,IAAI,YAAY,aAAa,OAAO;OACzC;OACA;OACA;OACA,CAAC;AACF,WAAK,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG;WAChB,MAAK,GAAG,GAAG,EAAE;;AAErB,UAAM,OAAO,KAAK;KACjB,IAAI,aAAa,KAAK,KAAK,GAAG,UAAU,KAAK,SAAS,KAAK,IAAI,KAAK,KAAK,SAAS;KAClF,MAAM,QAAQ,QAAQ,QAAQ,KAAK;KACnC,WAAW,IAAI;KACf,SAAS,KAAK,KAAK,WAAW,OAAO,EAAE,QAAQ,IAAI,aAAa,WAAW,EAAE;KAC7E;KACA,QAAQ;KACR,cAAc,UAAU,KAAK,KAAK,WAAW,SAAS,EAAE,OAAO,KAAK;KACpE,cAAc,UAAU,KAAK,KAAK,WAAW,UAAU,EAAE,OAAO,KAAK;KACrE;KACA,cAAc,KAAK,aAAa,KAAK,IAAI,aAAa,KAAK,YAAY,KAAK;KAC5E,MAAM,KAAK;KACX,MAAM,UAAU,KAAK,OAAO,KAAK;KACjC,CAAC;KACD;;AAEH,OAAK,MAAM,QAAQ,MAAO,KAAI,KAAK,OAAO,SAAS,WAAY,OAAM,IAAI,MAAM,iBAAiB,KAAK,OAAO,OAAO,iCAAiC,aAAa;AACjK,MAAI,CAAC,OAAO,SAAS,KAAK,EAAE;AAC3B,UAAO,OAAO,OAAO;AACrB,UAAO,OAAO,OAAO;;EAEtB,MAAM,eAAe,KAAK,IAAI,OAAO,MAAM,OAAO,MAAM,OAAO,MAAM,KAAK;EAC1E,MAAM,MAAM,QAAQ,iBAAiB,QAAQ,gBAAgB,IAAI,QAAQ,gBAAgB,eAAe;EACxG,MAAM,QAAQ,OAAO,QAAQ,UAAU,WAAW;GACjD,QAAQ;GACR,QAAQ;GACR,QAAQ;GACR,GAAG,QAAQ,SAAS;GACpB;GACA;GACA;GACA;EACD,MAAM,QAAQ;GACb,MAAM,MAAM;GACZ,MAAM,MAAM;GACZ,MAAM,MAAM;GACZ;EACD,MAAM,SAAS,QAAQ,SAAS;IAC9B,OAAO,QAAQ;IACf,OAAO,QAAQ;IACf,OAAO,QAAQ;GAChB,GAAG;GACH;GACA;GACA;GACA;AACD,QAAM,gBAAgB,YAAY,SAAS,YAAY,MAAM,MAAM,IAAI,MAAM,IAAI,MAAM,GAAG,EAAE,YAAY,UAAU,CAAC,OAAO,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,GAAG,CAAC;EACtJ,MAAM,KAAK;IACT,OAAO,OAAO,MAAM,MAAM;IAC1B,OAAO,OAAO,MAAM,MAAM;IAC1B,OAAO,OAAO,MAAM,MAAM;GAC3B;EACD,MAAM,KAAK;IACT,OAAO,OAAO,MAAM,MAAM;IAC1B,OAAO,OAAO,MAAM,MAAM;IAC1B,OAAO,OAAO,MAAM,MAAM;GAC3B;AACD,QAAM,SAAS;GACd,KAAK;GACL,KAAK;GACL,QAAQ;KACN,GAAG,KAAK,GAAG,MAAM;KACjB,GAAG,KAAK,GAAG,MAAM;KACjB,GAAG,KAAK,GAAG,MAAM;IAClB;GACD,MAAM;IACL,GAAG,KAAK,GAAG;IACX,GAAG,KAAK,GAAG;IACX,GAAG,KAAK,GAAG;IACX;GACD,sBAAsB,KAAK,MAAM,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,GAAG,GAAG,GAAG;GAChF;AACD,SAAO;;;;;CAKR,OAAO,KAAK,WAAW,UAAU,EAAE,EAAE;AACpC,MAAI,OAAO,cAAc,SAAU,QAAOA,aAAW,MAAM,WAAW,QAAQ;EAC9E,MAAM,YAAY,UAAU,WAAW,UAAU,GAAG,UAAU,QAAQ,WAAW,GAAG,GAAG;AACvF,MAAI,UAAU,WAAW,IAAI,IAAI,UAAU,WAAW,KAAK,IAAI,UAAU,WAAW,MAAM,IAAI,UAAU,WAAW,UAAU,IAAI,CAAC,UAAU,WAAW,CAAC,WAAW,IAAI,IAAI,GAAG,WAAW,UAAU,EAAE;GACpM,MAAM,MAAM,GAAG,aAAa,UAAU;GACtC,MAAM,WAAW,KAAK,QAAQ,UAAU;AACxC,UAAOA,aAAW,MAAM,KAAK,SAAS,SAAS;;AAEhD,SAAOA,aAAW,MAAM,WAAW,QAAQ;;;AAM7C,SAAS,SAAS,WAAW,UAAU,EAAE,EAAE;AAC1C,QAAO,WAAW,KAAK,WAAW,QAAQ;;AAK3C,SAAS,QAAQ,WAAW,UAAU,EAAE,EAAE;AACzC,QAAO,WAAW,KAAK,WAAW,QAAQ;;AAE3C,SAAS,aAAa,GAAG;CACxB,MAAM,IAAI,KAAK,IAAI,KAAK,IAAI,GAAG,EAAE,EAAE,EAAE;AACrC,QAAO,KAAK,WAAW,IAAI,QAAQ,QAAQ,MAAM,IAAI,OAAO;;;AAG7D,MAAM,wBAAwB,IAAI,IAAI;CACrC;CACA;CACA;CACA;CACA;CACA;CACA,CAAC;;;;;AAKF,SAAS,sBAAsB,KAAK,EAAE,SAAS,CAAC,GAAG,EAAE,EAAE,WAAW,GAAG,QAAQ,CAAC,GAAG,EAAE,IAAI;CACtF,MAAM,IAAI,KAAK,IAAI,SAAS;CAC5B,MAAM,IAAI,KAAK,IAAI,SAAS;AAC5B,MAAK,IAAI,IAAI,GAAG,IAAI,IAAI,QAAQ,KAAK,GAAG;EACvC,MAAM,IAAI,IAAI,KAAK,MAAM;EACzB,MAAM,IAAI,IAAI,IAAI,KAAK,MAAM;AAC7B,MAAI,KAAK,IAAI,IAAI,IAAI,IAAI,OAAO;AAChC,MAAI,IAAI,KAAK,CAAC,IAAI,IAAI,IAAI,IAAI,OAAO;;;AAMvC,MAAM,kBAAkB,CAAC;CACxB;CACA;CACA;CACA;CACA,EAAE,GAAG,MAAM,KAAK,EAAE,QAAQ,KAAK,GAAG,GAAG,MAAM;CAC3C,MAAM,OAAO,IAAI,KAAK;AACtB,QAAO;EACN;EACA;EACA;EACA;EACA;EACA,CAAC;AACH,IAAI,YAAY,MAAME,YAAU;;;;CAI/B,OAAO,MAAM,QAAQ;EACpB,MAAM,QAAQ,kBAAkB,aAAa,SAAS,IAAI,WAAW,OAAO;AAC5E,MAAI,MAAM,SAAS,EAAG,QAAO;AAC7B,SAAO,IAAI,YAAY,QAAQ,CAAC,OAAO,MAAM,SAAS,GAAG,EAAE,CAAC,KAAK;;;;;CAKlE,OAAO,MAAM,MAAM,UAAU,EAAE,EAAE;EAChC,MAAM,QAAQ,gBAAgB,aAAa,OAAO,IAAI,WAAW,KAAK;EACtE,MAAM,OAAO,IAAI,SAAS,MAAM,QAAQ,MAAM,YAAY,MAAM,WAAW;AAC3E,MAAI,IAAI,YAAY,QAAQ,CAAC,OAAO,MAAM,SAAS,GAAG,EAAE,CAAC,KAAK,OAAQ,OAAM,IAAI,MAAM,mCAAmC;EACzH,IAAI,SAAS;EACb,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ;EACpC,MAAM,SAAS,EAAE;EACjB,MAAM,UAAU,CAAC,GAAG,gBAAgB;AACpC,SAAO,SAAS,MAAM,MAAM,YAAY;GACvC,MAAM,UAAU,IAAI,YAAY,QAAQ,CAAC,OAAO,MAAM,SAAS,QAAQ,SAAS,EAAE,CAAC;GACnF,MAAM,cAAc,KAAK,UAAU,SAAS,GAAG,KAAK;AACpD,aAAU;GACV,MAAM,kBAAkB;AACxB,OAAI,YAAY,QAAQ;AACvB,YAAQ,KAAK,UAAU,iBAAiB,KAAK;AAC7C,YAAQ,KAAK,UAAU,kBAAkB,GAAG,KAAK;AACjD,YAAQ,KAAK,UAAU,kBAAkB,GAAG,KAAK;cACvC,YAAY,QAAQ;IAC9B,MAAM,YAAY,KAAK,UAAU,iBAAiB,KAAK;IACvD,IAAI,UAAU,kBAAkB;AAChC,SAAK,IAAI,IAAI,GAAG,IAAI,WAAW,KAAK;AACnC,SAAI,UAAU,IAAI,MAAM,WAAY;KACpC,MAAM,IAAI,KAAK,SAAS,QAAQ;KAChC,MAAM,IAAI,KAAK,SAAS,UAAU,EAAE;KACpC,MAAM,IAAI,KAAK,SAAS,UAAU,EAAE;KACpC,MAAM,aAAa,KAAK,SAAS,UAAU,EAAE;AAC7C,gBAAW;AACX,YAAO,KAAK;MACX;MACA;MACA;MACA;MACA,CAAC;;cAEO,YAAY,OAAQ,MAAK,IAAI,IAAI,GAAG,IAAI,KAAK,KAAK;IAC5D,MAAM,UAAU,kBAAkB,IAAI;AACtC,QAAI,UAAU,IAAI,MAAM,WAAY;IACpC,MAAM,IAAI,KAAK,SAAS,QAAQ,GAAG;IACnC,MAAM,MAAM,KAAK,SAAS,UAAU,EAAE,GAAG;IACzC,MAAM,IAAI,KAAK,SAAS,UAAU,EAAE,GAAG;IACvC,MAAM,IAAI,KAAK,SAAS,UAAU,EAAE,GAAG;IACvC,MAAM,aAAa,MAAM,MAAM,IAAI,IAAI;AACvC,YAAQ,cAAc;KACrB;KACA;KACA;KACA;KACA;;AAEF,aAAU;;AAEX,SAAOA,YAAU,WAAW,QAAQ,SAAS,OAAO,OAAO,OAAO,QAAQ;;CAE3E,OAAO,WAAW,QAAQ,SAAS,QAAQ,QAAQ,QAAQ,SAAS;EACnE,MAAM,2BAA2B,IAAI,KAAK;AAC1C,SAAO,SAAS,MAAM,SAAS,IAAI,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC;EAC3D,MAAM,eAAe,EAAE;EACvB,MAAM,aAAa,EAAE;EACrB,MAAM,YAAY,EAAE;EACpB,MAAM,SAAS,EAAE;EACjB,MAAM,aAAa,EAAE;EACrB,MAAM,WAAW,IAAI,IAAI,IAAI,IAAI,QAAQ,UAAU;GAClD,MAAM,WAAW,aAAa,SAAS;AACvC,gBAAa,KAAK,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG;AAC7C,cAAW,KAAK,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,OAAO;AAC3D,aAAU,KAAK,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,MAAM;AACtD,UAAO,KAAK,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE;AACnC,cAAW,KAAK,UAAU,WAAW,GAAG,WAAW,GAAG,UAAU,WAAW,GAAG,WAAW,EAAE;;AAE5F,OAAK,MAAM,KAAK,QAAQ;GACvB,MAAM,EAAE,GAAG,GAAG,GAAG,eAAe;GAChC,MAAM,QAAQ,QAAQ,eAAe;IACpC;IACA;IACA;IACA;IACA;GACD,MAAM,KAAK;GACX,MAAM,KAAK,CAAC;GACZ,MAAM,KAAK;AACX,OAAI,CAAC,SAAS,IAAI,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,CAAE,SAAQ;IAChD,KAAK;IACL;IACA;IACA,EAAE;IACF,KAAK;IACL,KAAK;IACL;IACA,EAAE;IACF,KAAK;IACL,KAAK;IACL,KAAK;IACL,EAAE;IACF,KAAK;IACL;IACA,KAAK;IACL,EAAE;IACF;IACA;IACA;IACA,EAAE,MAAM;AACT,OAAI,CAAC,SAAS,IAAI,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,CAAE,SAAQ;IAChD;IACA;IACA,KAAK;IACL,EAAE;IACF;IACA,KAAK;IACL,KAAK;IACL,EAAE;IACF;IACA,KAAK;IACL;IACA,EAAE;IACF;IACA;IACA;IACA,EAAE;IACF;IACA;IACA;IACA,EAAE,MAAM;AACT,OAAI,CAAC,SAAS,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,IAAI,CAAE,SAAQ;IAChD;IACA,KAAK;IACL;IACA,EAAE;IACF,KAAK;IACL,KAAK;IACL;IACA,EAAE;IACF,KAAK;IACL,KAAK;IACL,KAAK;IACL,EAAE;IACF;IACA,KAAK;IACL,KAAK;IACL,EAAE;IACF;IACA;IACA;IACA,EAAE,MAAM;AACT,OAAI,CAAC,SAAS,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,IAAI,CAAE,SAAQ;IAChD;IACA;IACA,KAAK;IACL,EAAE;IACF,KAAK;IACL;IACA,KAAK;IACL,EAAE;IACF,KAAK;IACL;IACA;IACA,EAAE;IACF;IACA;IACA;IACA,EAAE;IACF;IACA;IACA;IACA,EAAE,MAAM;AACT,OAAI,CAAC,SAAS,IAAI,GAAG,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,CAAE,SAAQ;IAChD,KAAK;IACL;IACA,KAAK;IACL,EAAE;IACF,KAAK;IACL,KAAK;IACL,KAAK;IACL,EAAE;IACF;IACA,KAAK;IACL,KAAK;IACL,EAAE;IACF;IACA;IACA,KAAK;IACL,EAAE;IACF;IACA;IACA;IACA,EAAE,MAAM;AACT,OAAI,CAAC,SAAS,IAAI,GAAG,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,CAAE,SAAQ;IAChD;IACA;IACA;IACA,EAAE;IACF;IACA,KAAK;IACL;IACA,EAAE;IACF,KAAK;IACL,KAAK;IACL;IACA,EAAE;IACF,KAAK;IACL;IACA;IACA,EAAE;IACF;IACA;IACA;IACA,EAAE,MAAM;;EAEV,MAAM,SAAS,cAAc,aAAa;EAC1C,MAAMN,cAAY,sBAAsB,QAAQ,QAAQ;EACxD,MAAM,YAAY,mBAAmB,cAAcA,YAAU;EAC7D,MAAM,aAAa,iBAAiB,YAAY,UAAU,SAAS,EAAE;EACrE,MAAM,kBAAkB;GACvB,MAAM;GACN,cAAc;IACb;IACA;IACA;IACA;IACA;GACD,WAAW;GACX,mBAAmB;GACnB,GAAG,QAAQ;GACX;AACD,SAAO;GACN,MAAM;GACN,QAAQ,CAAC;IACR,IAAI;IACJ,MAAM;IACN;IACA,SAAS,IAAI,aAAa,WAAW;IACrC,KAAK,IAAI,aAAa,OAAO;IAC7B,QAAQ,IAAI,aAAa,UAAU;IACnC,SAAS;IACT,cAAc;IACd,CAAC;GACF,WAAW,EAAE,aAAa,iBAAiB;GAC3C,YAAY,EAAE;GACd,QAAQ,qBAAqB,QAAQA,YAAU;GAC/C;;;;;CAKF,OAAO,KAAK,WAAW,UAAU,EAAE,EAAE;AACpC,MAAI,OAAO,cAAc,SAAU,QAAOM,YAAU,MAAM,WAAW,QAAQ;AAC7E,MAAI,UAAU,WAAW,IAAI,IAAI,UAAU,WAAW,KAAK,IAAI,UAAU,WAAW,MAAM,IAAI,UAAU,WAAW,UAAU,EAAE;GAC9H,MAAM,YAAY,UAAU,WAAW,UAAU,GAAG,UAAU,QAAQ,WAAW,GAAG,GAAG;GACvF,MAAM,MAAM,GAAG,aAAa,UAAU;AACtC,UAAOA,YAAU,MAAM,KAAK,QAAQ;;AAErC,QAAM,IAAI,MAAM,uDAAuD;;;AAMzE,SAAS,QAAQ,WAAW,UAAU,EAAE,EAAE;AACzC,QAAO,UAAU,KAAK,WAAW,QAAQ;;AAK1C,MAAM,aAAa;AACnB,MAAM,kBAAkB;AACxB,MAAM,eAAe;AACrB,MAAM,gBAAgB;AACtB,MAAM,iBAAiB;AACvB,MAAM,cAAc;AACpB,MAAM,kBAAkB;AACxB,MAAM,iBAAiB;AACvB,MAAM,gBAAgB;AACtB,MAAM,mBAAmB;AACzB,MAAM,kBAAkB;AACxB,MAAM,iBAAiB;AACvB,IAAI,gBAAgB,MAAMC,gBAAc;;;;CAIvC,OAAO,MAAM,QAAQ;EACpB,MAAM,QAAQ,kBAAkB,aAAa,SAAS,IAAI,WAAW,OAAO;AAC5E,MAAI,MAAM,SAAS,EAAG,QAAO;AAC7B,SAAO,IAAI,SAAS,MAAM,QAAQ,MAAM,YAAY,MAAM,WAAW,CAAC,UAAU,GAAG,KAAK,KAAK;;;;;CAK9F,OAAO,MAAM,MAAM,UAAU,EAAE,EAAE;EAChC,MAAM,QAAQ,gBAAgB,aAAa,OAAO,IAAI,WAAW,KAAK;EACtE,MAAM,OAAO,IAAI,SAAS,MAAM,QAAQ,MAAM,YAAY,MAAM,WAAW;AAC3E,MAAI,KAAK,UAAU,GAAG,KAAK,KAAK,WAAY,OAAM,IAAI,MAAM,0CAA0C;EACtG,MAAM,SAAS,EAAE;EACjB,MAAM,YAAY,EAAE;AACpB,kBAAc,UAAU,MAAM,GAAG,MAAM,YAAY,QAAQ,UAAU;AACrE,SAAOA,gBAAc,WAAW,QAAQ,WAAW,QAAQ;;CAE5D,OAAO,UAAU,MAAM,aAAa,WAAW,QAAQ,WAAW,oBAAoB,UAAU;EAC/F,IAAI,SAAS;AACb,SAAO,SAAS,KAAK,aAAa,SAAS,KAAK,KAAK,YAAY;GAChE,MAAM,UAAU,KAAK,UAAU,QAAQ,KAAK;GAC5C,MAAM,cAAc,KAAK,UAAU,SAAS,GAAG,KAAK;AACpD,OAAI,cAAc,EAAG;GACrB,MAAM,kBAAkB,SAAS;GACjC,MAAM,eAAe,SAAS;GAC9B,MAAM,aAAa,KAAK,IAAI,iBAAiB,WAAW,KAAK,WAAW;AACxE,WAAQ,SAAR;IACC,KAAK;IACL,KAAK;AACJ,qBAAc,UAAU,MAAM,cAAc,YAAY,QAAQ,WAAW,kBAAkB;AAC7F;IACD,KAAK,cAAc;KAClB,IAAI,UAAU;AACd,YAAO,UAAU,cAAc,KAAK,SAAS,QAAQ,KAAK,EAAG;KAC7D,MAAM,WAAW,IAAI,WAAW,KAAK,QAAQ,KAAK,aAAa,cAAc,UAAU,aAAa;KACpG,MAAM,UAAU,IAAI,YAAY,QAAQ,CAAC,OAAO,SAAS,IAAI;AAC7D,qBAAc,UAAU,MAAM,UAAU,GAAG,YAAY,QAAQ,WAAW,QAAQ;AAClF;;IAED,KAAK,eAAe;KACnB,MAAM,OAAO;MACZ,MAAM;MACN,WAAW,EAAE;MACb,SAAS,EAAE;MACX,KAAK,EAAE;MACP;AACD,qBAAc,YAAY,MAAM,cAAc,YAAY,MAAM,UAAU;AAC1E,SAAI,KAAK,UAAU,SAAS,KAAK,KAAK,QAAQ,SAAS,EAAG,QAAO,KAAK,KAAK;AAC3E;;IAED,KAAK;AACJ,qBAAc,aAAa,MAAM,cAAc,YAAY,UAAU;AACrE;IACD,QAAS;;AAEV,YAAS;;;CAGX,OAAO,YAAY,MAAM,aAAa,WAAW,MAAM,YAAY;EAClE,IAAI,SAAS;AACb,SAAO,SAAS,KAAK,WAAW;GAC/B,MAAM,UAAU,KAAK,UAAU,QAAQ,KAAK;GAC5C,MAAM,cAAc,KAAK,UAAU,SAAS,GAAG,KAAK;AACpD,OAAI,cAAc,EAAG;GACrB,MAAM,kBAAkB,SAAS;GACjC,MAAM,eAAe,SAAS;AAC9B,OAAI,YAAY,gBAAgB;IAC/B,MAAM,WAAW,KAAK,UAAU,cAAc,KAAK;IACnD,IAAI,UAAU,eAAe;AAC7B,SAAK,IAAI,IAAI,GAAG,IAAI,UAAU,KAAK;AAClC,SAAI,UAAU,KAAK,UAAW;KAC9B,MAAM,IAAI,KAAK,WAAW,SAAS,KAAK;KACxC,MAAM,IAAI,KAAK,WAAW,UAAU,GAAG,KAAK;KAC5C,MAAM,IAAI,KAAK,WAAW,UAAU,GAAG,KAAK;AAC5C,UAAK,UAAU,KAAK,GAAG,GAAG,EAAE;AAC5B,gBAAW;;cAEF,YAAY,aAAa;IACnC,MAAM,WAAW,KAAK,UAAU,cAAc,KAAK;IACnD,IAAI,UAAU,eAAe;AAC7B,SAAK,IAAI,IAAI,GAAG,IAAI,UAAU,KAAK;AAClC,SAAI,UAAU,IAAI,UAAW;KAC7B,MAAM,IAAI,KAAK,UAAU,SAAS,KAAK;KACvC,MAAM,IAAI,KAAK,UAAU,UAAU,GAAG,KAAK;KAC3C,MAAM,IAAI,KAAK,UAAU,UAAU,GAAG,KAAK;AAC3C,UAAK,QAAQ,KAAK,GAAG,GAAG,EAAE;AAC1B,gBAAW;;cAEF,YAAY,iBAAiB;IACvC,MAAM,YAAY,KAAK,UAAU,cAAc,KAAK;IACpD,IAAI,UAAU,eAAe;AAC7B,SAAK,IAAI,IAAI,GAAG,IAAI,WAAW,KAAK;AACnC,SAAI,UAAU,IAAI,UAAW;KAC7B,MAAM,IAAI,KAAK,WAAW,SAAS,KAAK;KACxC,MAAM,IAAI,KAAK,WAAW,UAAU,GAAG,KAAK;AAC5C,UAAK,IAAI,KAAK,GAAG,IAAI,EAAE;AACvB,gBAAW;;;AAGb,YAAS;;;CAGX,OAAO,aAAa,MAAM,aAAa,WAAW,WAAW;EAC5D,IAAI,SAAS;EACb,IAAI,UAAU;EACd,IAAI,eAAe;GAClB;GACA;GACA;GACA;GACA;AACD,SAAO,SAAS,KAAK,WAAW;GAC/B,MAAM,UAAU,KAAK,UAAU,QAAQ,KAAK;GAC5C,MAAM,cAAc,KAAK,UAAU,SAAS,GAAG,KAAK;AACpD,OAAI,cAAc,EAAG;GACrB,MAAM,kBAAkB,SAAS;GACjC,MAAM,eAAe,SAAS;AAC9B,OAAI,YAAY,eAAe;IAC9B,IAAI,UAAU;AACd,WAAO,UAAU,mBAAmB,KAAK,SAAS,QAAQ,KAAK,EAAG;IAClE,MAAM,YAAY,IAAI,WAAW,KAAK,QAAQ,KAAK,aAAa,cAAc,UAAU,aAAa;AACrG,cAAU,IAAI,YAAY,QAAQ,CAAC,OAAO,UAAU,IAAI;cAC9C,YAAY,kBACtB;QAAI,eAAe,KAAK,iBAAiB;KACxC,MAAM,aAAa,KAAK,UAAU,cAAc,KAAK;AACrD,SAAI,eAAe,mBAAmB,eAAe,MAAM,gBAAiB,gBAAe;MAC1F,KAAK,WAAW,eAAe,GAAG,KAAK;MACvC,KAAK,WAAW,eAAe,IAAI,KAAK;MACxC,KAAK,WAAW,eAAe,IAAI,KAAK;MACxC;MACA;cACQ,eAAe,kBAAkB,eAAe,KAAK,gBAAiB,gBAAe;MAC7F,KAAK,SAAS,eAAe,EAAE,GAAG;MAClC,KAAK,SAAS,eAAe,EAAE,GAAG;MAClC,KAAK,SAAS,eAAe,EAAE,GAAG;MAClC;MACA;;;AAGH,YAAS;;AAEV,YAAU,WAAW;GACpB,MAAM;GACN;GACA,WAAW;GACX,mBAAmB;GACnB;;CAEF,OAAO,WAAW,WAAW,WAAW,SAAS;EAChD,MAAM,SAAS,cAAc,GAAG,UAAU,KAAK,MAAM,EAAE,UAAU,CAAC;EAClE,MAAMP,cAAY,sBAAsB,QAAQ,QAAQ;AACxD,SAAO;GACN,MAAM;GACN,QAAQ,UAAU,KAAK,GAAG,QAAQ;IACjC,MAAM,YAAY,mBAAmB,EAAE,WAAWA,YAAU;IAC5D,MAAM,UAAU,IAAI,aAAa,EAAE,UAAU,OAAO;AACpD,4BAAwB,WAAW,EAAE,SAAS,QAAQ;IACtD,MAAM,MAAM,EAAE,IAAI,WAAW,EAAE,UAAU,SAAS,IAAI,IAAI,IAAI,aAAa,EAAE,IAAI,GAAG,IAAI,aAAa,EAAE,UAAU,SAAS,IAAI,EAAE;IAChI,MAAM,aAAa,iBAAiB,EAAE,SAAS,UAAU,SAAS,EAAE;AACpE,WAAO;KACN,IAAI,YAAY;KAChB,MAAM,EAAE;KACR;KACA;KACA;KACA,SAAS;KACT,cAAc,EAAE;KAChB;KACA;GACF;GACA,YAAY,EAAE;GACd,QAAQ,qBAAqB,QAAQA,YAAU;GAC/C;;;;;CAKF,OAAO,KAAK,WAAW,UAAU,EAAE,EAAE;AACpC,MAAI,OAAO,cAAc,SAAU,QAAOO,gBAAc,MAAM,WAAW,QAAQ;AACjF,MAAI,UAAU,WAAW,IAAI,IAAI,UAAU,WAAW,KAAK,IAAI,UAAU,WAAW,MAAM,IAAI,UAAU,WAAW,UAAU,EAAE;GAC9H,MAAM,YAAY,UAAU,WAAW,UAAU,GAAG,UAAU,QAAQ,WAAW,GAAG,GAAG;GACvF,MAAM,MAAM,GAAG,aAAa,UAAU;AACtC,UAAOA,gBAAc,MAAM,KAAK,QAAQ;;AAEzC,QAAM,IAAI,MAAM,uDAAuD;;;AAMzE,SAAS,QAAQ,WAAW,UAAU,EAAE,EAAE;AACzC,QAAO,cAAc,KAAK,WAAW,QAAQ;;AAK9C,IAAI,YAAY,MAAMC,YAAU;;;;CAI/B,OAAO,MAAM,MAAM,UAAU,EAAE,EAAE;EAChC,MAAM,SAAS,OAAO,SAAS,WAAW,OAAO,IAAI,YAAY,QAAQ,CAAC,OAAO,gBAAgB,aAAa,OAAO,IAAI,WAAW,KAAK,CAAC,EAAE,MAAM,QAAQ;EAC1J,IAAI,UAAU;AACd,SAAO,UAAU,MAAM,WAAW,CAAC,MAAM,SAAS,MAAM,IAAI,MAAM,SAAS,MAAM,CAAC,WAAW,IAAI,EAAG;AACpG,MAAI,WAAW,MAAM,OAAQ,OAAM,IAAI,MAAM,iBAAiB;EAC9D,IAAI,aAAa,MAAM,WAAW,MAAM;EACxC,IAAI,aAAa;EACjB,IAAI,YAAY;AAChB,MAAI,WAAW,WAAW,OAAO,IAAI,WAAW,WAAW,QAAQ,CAAE,cAAa;WACzE,WAAW,WAAW,OAAO,CAAE,aAAY;WAC3C,CAAC,WAAW,WAAW,MAAM,CAAE,OAAM,IAAI,MAAM,oCAAoC;AAC5F,eAAa,WAAW,QAAQ,6BAA6B,GAAG,CAAC,MAAM;EACvE,IAAI,cAAc;EAClB,IAAI,WAAW;AACf,MAAI,WAAW,SAAS,GAAG;GAC1B,MAAM,QAAQ,WAAW,MAAM,MAAM;AACrC,iBAAc,OAAO,SAAS,MAAM,MAAM,KAAK,GAAG;AAClD,cAAW,OAAO,SAAS,MAAM,MAAM,KAAK,GAAG;QACzC,QAAO,UAAU,MAAM,QAAQ;GACrC,MAAM,OAAO,MAAM,WAAW,MAAM;AACpC,OAAI,CAAC,QAAQ,KAAK,WAAW,IAAI,CAAE;GACnC,MAAM,QAAQ,KAAK,MAAM,MAAM;AAC/B,iBAAc,OAAO,SAAS,MAAM,MAAM,KAAK,GAAG;AAClD,cAAW,OAAO,SAAS,MAAM,MAAM,KAAK,GAAG;AAC/C;;EAED,MAAM,eAAe,EAAE;EACvB,MAAM,aAAa,EAAE;EACrB,MAAM,YAAY,EAAE;EACpB,MAAM,SAAS,EAAE;EACjB,MAAM,aAAa,EAAE;EACrB,IAAI,YAAY;AAChB,SAAO,UAAU,MAAM,UAAU,YAAY,aAAa;GACzD,MAAM,OAAO,MAAM,WAAW,MAAM;AACpC,OAAI,CAAC,QAAQ,KAAK,WAAW,IAAI,CAAE;GACnC,MAAM,QAAQ,KAAK,MAAM,MAAM;GAC/B,MAAM,IAAI,OAAO,WAAW,MAAM,MAAM,IAAI,IAAI;GAChD,MAAM,IAAI,OAAO,WAAW,MAAM,MAAM,IAAI,IAAI;GAChD,MAAM,IAAI,OAAO,WAAW,MAAM,MAAM,IAAI,IAAI;AAChD,gBAAa,KAAK,GAAG,GAAG,EAAE;GAC1B,IAAI,aAAa;AACjB,OAAI,YAAY;IACf,MAAM,KAAK,OAAO,WAAW,MAAM,eAAe,IAAI,IAAI;IAC1D,MAAM,KAAK,OAAO,WAAW,MAAM,aAAa,MAAM,IAAI,IAAI;IAC9D,MAAM,KAAK,OAAO,WAAW,MAAM,aAAa,MAAM,IAAI,IAAI;AAC9D,eAAW,KAAK,IAAI,IAAI,GAAG;AAC3B,kBAAc;SACR,YAAW,KAAK,GAAG,GAAG,EAAE;AAC/B,OAAI,aAAa,MAAM,SAAS,YAAY;IAC3C,MAAM,KAAK,OAAO,WAAW,MAAM,eAAe,MAAM,IAAI,MAAM,OAAO,WAAW,MAAM,eAAe,MAAM,GAAG,IAAI,MAAM;IAC5H,MAAM,OAAO,OAAO,WAAW,MAAM,aAAa,MAAM,MAAM,IAAI,MAAM,OAAO,WAAW,MAAM,aAAa,MAAM,MAAM,GAAG,IAAI,MAAM;IACtI,MAAM,KAAK,OAAO,WAAW,MAAM,aAAa,MAAM,MAAM,IAAI,MAAM,OAAO,WAAW,MAAM,aAAa,MAAM,MAAM,GAAG,IAAI,MAAM;IACpI,MAAM,IAAI,MAAM,SAAS,aAAa,IAAI,OAAO,WAAW,MAAM,aAAa,MAAM,IAAI,IAAI,IAAI;AACjG,cAAU,KAAK,GAAG,KAAK,GAAG,EAAE;;AAE7B,UAAO,KAAK,GAAG,EAAE;AACjB;;EAED,IAAI,YAAY;AAChB,SAAO,UAAU,MAAM,UAAU,YAAY,UAAU;GACtD,MAAM,OAAO,MAAM,WAAW,MAAM;AACpC,OAAI,CAAC,QAAQ,KAAK,WAAW,IAAI,CAAE;GACnC,MAAM,QAAQ,KAAK,MAAM,MAAM;GAC/B,MAAM,IAAI,OAAO,SAAS,MAAM,MAAM,KAAK,GAAG;AAC9C,OAAI,KAAK,GAAG;IACX,MAAM,KAAK,OAAO,SAAS,MAAM,MAAM,KAAK,GAAG;AAC/C,SAAK,IAAI,IAAI,GAAG,IAAI,IAAI,GAAG,KAAK;KAC/B,MAAM,KAAK,OAAO,SAAS,MAAM,IAAI,MAAM,KAAK,GAAG;KACnD,MAAM,KAAK,OAAO,SAAS,MAAM,IAAI,MAAM,KAAK,GAAG;AACnD,gBAAW,KAAK,IAAI,IAAI,GAAG;;;AAG7B;;AAED,MAAI,CAAC,cAAc,QAAQ,cAAe,yBAAwB,cAAc,YAAY,WAAW;EACvG,MAAM,SAAS,cAAc,aAAa;EAC1C,MAAMR,cAAY,sBAAsB,QAAQ,QAAQ;EACxD,MAAM,YAAY,mBAAmB,cAAcA,YAAU;EAC7D,MAAM,aAAa,iBAAiB,YAAY,UAAU,SAAS,EAAE;EACrE,MAAM,kBAAkB;GACvB,MAAM;GACN,cAAc,YAAY;IACzB;IACA;IACA;IACA;IACA,GAAG;IACH;IACA;IACA;IACA;IACA;GACD,WAAW;GACX,mBAAmB;GACnB,GAAG,QAAQ;GACX;AACD,SAAO;GACN,MAAM;GACN,QAAQ,CAAC;IACR,IAAI;IACJ,MAAM;IACN;IACA,SAAS,IAAI,aAAa,WAAW;IACrC,KAAK,IAAI,aAAa,OAAO;IAC7B,QAAQ,YAAY,IAAI,aAAa,UAAU,GAAG,KAAK;IACvD,SAAS;IACT,cAAc;IACd,CAAC;GACF,WAAW,EAAE,aAAa,iBAAiB;GAC3C,YAAY,EAAE;GACd,QAAQ,qBAAqB,QAAQA,YAAU;GAC/C;;;;;CAKF,OAAO,KAAK,WAAW,UAAU,EAAE,EAAE;AACpC,MAAI,OAAO,cAAc,SAAU,QAAOQ,YAAU,MAAM,WAAW,QAAQ;AAC7E,MAAI,UAAU,WAAW,IAAI,IAAI,UAAU,WAAW,KAAK,IAAI,UAAU,WAAW,MAAM,IAAI,UAAU,WAAW,UAAU,EAAE;GAC9H,MAAM,YAAY,UAAU,WAAW,UAAU,GAAG,UAAU,QAAQ,WAAW,GAAG,GAAG;GACvF,MAAM,OAAO,GAAG,aAAa,WAAW,QAAQ;AAChD,UAAOA,YAAU,MAAM,MAAM,QAAQ;;AAEtC,SAAOA,YAAU,MAAM,WAAW,QAAQ;;;AAM5C,SAAS,QAAQ,WAAW,UAAU,EAAE,EAAE;AACzC,QAAO,UAAU,KAAK,WAAW,QAAQ;;AAK1C,IAAI,WAAW,MAAM;CACpB,+BAA+B,IAAI,SAAS;CAC5C,iCAAiC,IAAI,SAAS;CAC9C,+BAA+B,IAAI,KAAK;CACxC,kCAAkC,IAAI,KAAK;CAC3C,4BAA4B,IAAI,KAAK;CACrC,SAAS,UAAU;AAClB,OAAK,UAAU,IAAI,SAAS;AAC5B,eAAa;AACZ,QAAK,UAAU,OAAO,SAAS;;;CAGjC,KAAK,KAAK;AACT,OAAK,MAAM,YAAY,KAAK,UAAW,KAAI;AAC1C,YAAS,IAAI;UACN;;CAET,eAAe,QAAQ,QAAQ;EAC9B,MAAM,QAAQ,KAAK,SAAS,OAAO;EACnC,MAAM,OAAO,MAAM,KAAK,MAAM,MAAM,CAAC;AACrC,OAAK,IAAI,IAAI,KAAK,SAAS,GAAG,KAAK,GAAG,KAAK;GAC1C,MAAM,MAAM,KAAK;AACjB,OAAI,IAAI,WAAW,OAAO,CAAE,QAAO,MAAM,IAAI,IAAI;;;CAGnD,0BAA0B,KAAK;EAC9B,IAAI,WAAW,KAAK,gBAAgB,IAAI,IAAI;AAC5C,MAAI,CAAC,UAAU;GACd,IAAIf;GACJ,IAAI;AACJ,cAAW;IACV,SAAS,IAAI,SAAS,KAAK,QAAQ;AAClC,mBAAY;AACZ,cAAS;MACR;IACF,SAASA;IACT;IACA;AACD,QAAK,gBAAgB,IAAI,KAAK,SAAS;;AAExC,SAAO;;CAER,qBAAqB,KAAK,OAAO;EAChC,MAAM,WAAW,KAAK,gBAAgB,IAAI,IAAI;AAC9C,MAAI,UAAU;AACb,YAAS,OAAO,MAAM;AACtB,QAAK,gBAAgB,OAAO,IAAI;;AAEjC,OAAK,KAAK,IAAI;;CAEf,SAAS,QAAQ;EAChB,IAAI,QAAQ,KAAK,aAAa,IAAI,OAAO;AACzC,MAAI,CAAC,OAAO;AACX,2BAAwB,IAAI,KAAK;AACjC,QAAK,aAAa,IAAI,QAAQ,MAAM;;AAErC,SAAO;;CAER,YAAY,QAAQ;EACnB,IAAI,WAAW,KAAK,eAAe,IAAI,OAAO;AAC9C,MAAI,CAAC,UAAU;AACd,8BAA2B,IAAI,KAAK;AACpC,QAAK,eAAe,IAAI,QAAQ,SAAS;;AAE1C,SAAO;;CAER,IAAI,KAAK,QAAQ;AAChB,SAAO,KAAK,SAAS,OAAO,CAAC,IAAI,IAAI;;CAEtC,IAAI,KAAK,QAAQ,KAAK;EACrB,MAAM,QAAQ,KAAK,SAAS,OAAO;EACnC,MAAM,WAAW,MAAM,IAAI,IAAI;AAC/B,MAAI,YAAY,aAAa,KAAK;AACjC,OAAI,SAAS,YAAY,IAAI,SAAS;IACrC,MAAM,SAAS,SAAS;AACxB,WAAO,MAAM,qBAAqB,CAAC,WAAW;AAC7C,SAAI;AACH,aAAO,SAAS;aACT;MACP,CAAC,YAAY,GAAG;;AAEnB,OAAI,SAAS,iBAAiB,IAAI,cAAc;IAC/C,MAAM,SAAS,SAAS;AACxB,WAAO,MAAM,qBAAqB,CAAC,WAAW;AAC7C,SAAI;AACH,aAAO,SAAS;aACT;MACP,CAAC,YAAY,GAAG;;;AAGpB,QAAM,IAAI,KAAK,IAAI;;;CAGpB,WAAW,KAAK;AACf,SAAO,KAAK,aAAa,IAAI,IAAI;;;CAGlC,gBAAgB;EACf,MAAM,SAAS,MAAM,KAAK,KAAK,aAAa,QAAQ,CAAC;AACrD,SAAO,OAAO,OAAO,SAAS;;CAE/B,eAAe,KAAK,QAAQ,QAAQ,MAAM,MAAM;EAC/C,MAAM,MAAM;GACX;GACA;GACA;GACA;AACD,OAAK,aAAa,IAAI,KAAK,IAAI;EAC/B,MAAM,WAAW,KAAK,gBAAgB,IAAI,IAAI;AAC9C,MAAI,UAAU;AACb,YAAS,QAAQ,IAAI;AACrB,QAAK,gBAAgB,OAAO,IAAI;;EAEjC,MAAM,WAAW,EAAE;AACnB,MAAI,SAAS,MAAM;GAClB,IAAI,QAAQ;AACZ,QAAK,IAAI,IAAI,GAAG,IAAI,MAAM,IAAK,MAAK,IAAI,MAAM,GAAG,MAAM,MAAM,MAAO,MAAK,IAAI,IAAI,GAAG,IAAI,MAAM,KAAK;IAClG,MAAM,MAAM,KAAK,OAAO,KAAK;IAC7B,MAAM,MAAM,OAAO,OAAO,KAAK;IAC/B,MAAM,MAAM,KAAK,OAAO,KAAK;IAC7B,MAAM,WAAW,OAAO,UAAU;KACjC;KACA;KACA;KACA;AACD;AACA,aAAS,KAAK,MAAM,IAAI,MAAM,IAAI,MAAM,GAAG;AAC3C,aAAS,KAAK,SAAS,IAAI,SAAS,IAAI,SAAS,GAAG;;QAE/C,MAAK,IAAI,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;GAC9C,MAAM,QAAQ,KAAK,OAAO,SAAS,KAAK;GACxC,MAAM,WAAW,OAAO;AACxB,YAAS,KAAK,QAAQ,IAAI,GAAG,EAAE;AAC/B,YAAS,KAAK,SAAS,IAAI,SAAS,IAAI,SAAS,GAAG;;EAErD,MAAM,aAAa,IAAI,aAAa,SAAS;EAC7C,MAAM,WAAW,KAAK,IAAI,KAAK,OAAO;EACtC,IAAI,UAAU,UAAU;AACxB,MAAI,CAAC,WAAW,UAAU,SAAS,QAAQ,UAAU,SAAS,MAAM;AACnE,OAAI,UAAU;IACb,MAAM,SAAS,SAAS;AACxB,WAAO,MAAM,qBAAqB,CAAC,WAAW;AAC7C,SAAI;AACH,aAAO,SAAS;aACT;MACP,CAAC,YAAY,GAAG;;AAEnB,OAAI,SAAS,KAAM,WAAU,OAAO,cAAc;IACjD,MAAM;KACL;KACA;KACA;KACA;IACD,WAAW;IACX,QAAQ;IACR,OAAO,gBAAgB,kBAAkB,gBAAgB;IACzD,CAAC;OACG,WAAU,OAAO,cAAc;IACnC,MAAM;KACL;KACA;KACA;KACA;IACD,WAAW;IACX,QAAQ;IACR,OAAO,gBAAgB,kBAAkB,gBAAgB;IACzD,CAAC;;AAEH,MAAI,SAAS,MAAM;GAClB,MAAM,gBAAgB;GACtB,MAAM,oBAAoB,KAAK,KAAK,OAAO,gBAAgB,IAAI,GAAG;GAClE,MAAM,OAAO,IAAI,WAAW,oBAAoB,OAAO,KAAK;GAC5D,IAAI,QAAQ;AACZ,QAAK,IAAI,IAAI,GAAG,IAAI,MAAM,IAAK,MAAK,IAAI,MAAM,GAAG,MAAM,MAAM,MAAO,MAAK,IAAI,IAAI,GAAG,IAAI,MAAM,KAAK;IAClG,MAAM,MAAM,KAAK,OAAO,KAAK;IAC7B,MAAM,MAAM,OAAO,OAAO,KAAK;IAC/B,MAAM,MAAM,KAAK,OAAO,KAAK;IAC7B,MAAM,WAAW,OAAO,UAAU;KACjC;KACA;KACA;KACA;AACD;IACA,MAAM,SAAS,IAAI,gBAAgB,MAAM,oBAAoB,IAAI,oBAAoB;AACrF,SAAK,UAAU,KAAK,IAAI,GAAG,KAAK,IAAI,KAAK,KAAK,MAAM,SAAS,KAAK,IAAI,CAAC,CAAC;AACxE,SAAK,SAAS,KAAK,KAAK,IAAI,GAAG,KAAK,IAAI,KAAK,KAAK,MAAM,SAAS,KAAK,IAAI,CAAC,CAAC;AAC5E,SAAK,SAAS,KAAK,KAAK,IAAI,GAAG,KAAK,IAAI,KAAK,KAAK,MAAM,SAAS,KAAK,IAAI,CAAC,CAAC;AAC5E,SAAK,SAAS,KAAK;;AAEpB,UAAO,MAAM,aAAa,EAAE,SAAS,EAAE,MAAM;IAC5C,aAAa;IACb,cAAc;IACd,EAAE;IACF;IACA;IACA;IACA,CAAC;SACI;GACN,MAAM,gBAAgB;GACtB,MAAM,OAAO,IAAI,WAAW,OAAO,cAAc;AACjD,QAAK,IAAI,IAAI,GAAG,IAAI,MAAM,KAAK;IAC9B,MAAM,WAAW,OAAO,MAAM;KAC7B,KAAK,OAAO,KAAK;KACjB;KACA;KACA;IACD,MAAM,MAAM,IAAI;AAChB,SAAK,OAAO,KAAK,IAAI,GAAG,KAAK,IAAI,KAAK,KAAK,MAAM,SAAS,KAAK,IAAI,CAAC,CAAC;AACrE,SAAK,MAAM,KAAK,KAAK,IAAI,GAAG,KAAK,IAAI,KAAK,KAAK,MAAM,SAAS,KAAK,IAAI,CAAC,CAAC;AACzE,SAAK,MAAM,KAAK,KAAK,IAAI,GAAG,KAAK,IAAI,KAAK,KAAK,MAAM,SAAS,KAAK,IAAI,CAAC,CAAC;AACzE,SAAK,MAAM,KAAK;;AAEjB,UAAO,MAAM,aAAa,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE;IAChD;IACA;IACA;IACA,CAAC;;EAEH,IAAI,eAAe,UAAU;AAC7B,MAAI,CAAC,gBAAgB,aAAa,OAAO,WAAW,YAAY;AAC/D,OAAI,UAAU;IACb,MAAM,SAAS,SAAS;AACxB,WAAO,MAAM,qBAAqB,CAAC,WAAW;AAC7C,SAAI;AACH,aAAO,SAAS;aACT;MACP,CAAC,YAAY,GAAG;;AAEnB,kBAAe,OAAO,aAAa;IAClC,MAAM,WAAW;IACjB,OAAO,eAAe,SAAS,eAAe;IAC9C,CAAC;;AAEH,SAAO,MAAM,YAAY,cAAc,GAAG,WAAW;EACrD,MAAM,MAAM;GACX;GACA;GACA;GACA;GACA,aAAa,OAAO;GACpB;AACD,OAAK,IAAI,KAAK,QAAQ,IAAI;AAC1B,OAAK,KAAK,IAAI;AACd,SAAO;;CAER,MAAM,UAAU,KAAK,QAAQ,QAAQ;AACpC,MAAI,QAAQ,QAAS,OAAM,IAAI,aAAa,8BAA8B,aAAa;EACvF,MAAME,WAAS,KAAK,IAAI,KAAK,OAAO;AACpC,MAAIA,SAAQ,QAAOA;EACnB,MAAM,MAAM,KAAK,aAAa,IAAI,IAAI;AACtC,MAAI,IAAK,QAAO,KAAK,eAAe,KAAK,QAAQ,IAAI,QAAQ,IAAI,MAAM,IAAI,KAAK;EAChF,MAAM,WAAW,KAAK,YAAY,OAAO;EACzC,IAAI,UAAU,SAAS,IAAI,IAAI;AAC/B,MAAI,CAAC,SAAS;AACb,cAAW,YAAY;AACtB,QAAI,IAAI,WAAW,aAAa,EAAE;KACjC,MAAM,WAAW,KAAK,0BAA0B,IAAI;KACpD,IAAI;KACJ,MAAM,iBAAiB,IAAI,SAAS,GAAG,WAAW;MACjD,MAAM,qBAAqB;AAC1B,mBAAY,iBAAiB;QAC5B,MAAM,0BAA0B;AAC/B,aAAI,OAAO,WAAW,aAAa;UAClC,MAAM,kBAAkB,OAAO;AAC/B,cAAI,MAAM,QAAQ,gBAAgB,IAAI,gBAAgB,SAAS,EAAG,QAAO;;AAE1E,aAAI,OAAO,eAAe,aAAa;UACtC,MAAM,gBAAgB,WAAW;AACjC,cAAI,yBAAyB,OAAO,cAAc,OAAO,EAAG,QAAO;;AAEpE,gBAAO;;AAER,YAAI,mBAAmB,CAAE,eAAc;YAClC,wBAAuB,IAAI,MAAM,oCAAoC,IAAI,iBAAiB,CAAC;UAC9F,IAAI;;AAER,oBAAc;OACb;KACF,IAAI;KACJ,IAAI;AACJ,SAAI,OAAQ,gBAAe,IAAI,SAAS,GAAG,WAAW;AACrD,sBAAgB;AACf,cAAO,IAAI,aAAa,8BAA8B,aAAa,CAAC;;AAErE,aAAO,iBAAiB,SAAS,QAAQ;OACxC;AACF,SAAI;MACH,MAAM,iBAAiB,CAAC,SAAS,SAAS,eAAe;AACzD,UAAI,aAAc,gBAAe,KAAK,aAAa;MACnD,MAAM,SAAS,MAAM,QAAQ,KAAK,eAAe;AACjD,aAAO,KAAK,eAAe,KAAK,QAAQ,OAAO,QAAQ,OAAO,MAAM,OAAO,KAAK;eACvE;AACT,mBAAa,UAAU;AACvB,UAAI,WAAW,OAAQ,QAAO,oBAAoB,SAAS,QAAQ;;;IAGrE,MAAM,SAAS,MAAM,YAAY,KAAK,OAAO,EAAE,MAAM,QAAQ;IAC7D,IAAI,OAAO;IACX,IAAI,OAAO;IACX,MAAM,SAAS,EAAE;AACjB,SAAK,MAAM,QAAQ,OAAO;KACzB,MAAM,UAAU,KAAK,MAAM;AAC3B,SAAI,CAAC,WAAW,QAAQ,WAAW,IAAI,CAAE;AACzC,SAAI,QAAQ,WAAW,cAAc,EAAE;MACtC,MAAM,UAAU,QAAQ,MAAM,MAAM;AACpC,aAAO,SAAS,QAAQ,IAAI,GAAG;AAC/B,aAAO;AACP;;AAED,SAAI,QAAQ,WAAW,cAAc,EAAE;MACtC,MAAM,UAAU,QAAQ,MAAM,MAAM;AACpC,aAAO,SAAS,QAAQ,IAAI,GAAG;AAC/B,aAAO;AACP;;AAED,SAAI,QAAQ,MAAM,YAAY,CAAE;KAChC,MAAM,QAAQ,QAAQ,MAAM,MAAM,CAAC,IAAI,OAAO;AAC9C,SAAI,MAAM,WAAW,KAAK,MAAM,OAAO,MAAM,CAAC,MAAM,EAAE,CAAC,CAAE,QAAO,KAAK;MACpE,MAAM;MACN,MAAM;MACN,MAAM;MACN,CAAC;;AAEH,QAAI,OAAO,WAAW,EAAG,OAAM,IAAI,MAAM,6CAA6C;AACtF,WAAO,KAAK,eAAe,KAAK,QAAQ,QAAQ,MAAM,KAAK;OACxD;AACJ,YAAS,IAAI,KAAK,QAAQ;AAC1B,WAAQ,YAAY;AACnB,aAAS,OAAO,IAAI;KACnB;;AAEH,SAAO;;CAER,MAAM,KAAK,QAAQ;EAClB,MAAM,QAAQ,KAAK,SAAS,OAAO;EACnC,MAAMA,WAAS,MAAM,IAAI,IAAI;AAC7B,MAAIA,UAAQ;GACX,MAAM,SAASA,SAAO;GACtB,MAAM,SAASA,SAAO;AACtB,UAAO,MAAM,qBAAqB,CAAC,WAAW;AAC7C,QAAI;AACH,YAAO,SAAS;YACT;AACR,QAAI;AACH,YAAO,SAAS;YACT;KACP,CAAC,YAAY,GAAG;AAClB,SAAM,OAAO,IAAI;;AAElB,OAAK,YAAY,OAAO,CAAC,OAAO,IAAI;;CAErC,WAAW,QAAQ;EAClB,MAAM,WAAW,KAAK,eAAe,IAAI,OAAO;AAChD,SAAO,aAAa,KAAK,KAAK,SAAS,OAAO,KAAK,KAAK,gBAAgB,OAAO;;CAEhF,MAAM,gBAAgB,QAAQ;EAC7B,MAAM,WAAW,MAAM,KAAK,KAAK,YAAY,OAAO,CAAC,QAAQ,CAAC;AAC9D,QAAM,QAAQ,IAAI,SAAS;;CAE5B,UAAU;AACT,OAAK,+BAA+B,IAAI,SAAS;AACjD,OAAK,iCAAiC,IAAI,SAAS;AACnD,OAAK,aAAa,OAAO;AACzB,OAAK,gBAAgB,OAAO;;;AAG9B,MAAM,YAAY;AAClB,MAAM,kBAAkB;AACvB,KAAI,CAAC,WAAW,WAAY,YAAW,aAAa,IAAI,UAAU;AAClE,QAAO,WAAW;IACf;;;;;;AAMJ,eAAe,YAAY,KAAK,QAAQ;CACvC,MAAM,SAAS,MAAM,YAAY,IAAI;AACrC,KAAI,WAAW,MAAM;EACpB,MAAM,EAAE,aAAa,MAAM,OAAO;AAClC,SAAO,SAAS,QAAQ;GACvB,UAAU;GACV;GACA,CAAC;;CAEH,MAAM,WAAW,MAAM,MAAM,KAAK,EAAE,QAAQ,CAAC;AAC7C,KAAI,CAAC,SAAS,GAAI,OAAM,IAAI,MAAM,4BAA4B,SAAS,aAAa;AACpF,QAAO,SAAS,MAAM;;AAmHvB,MAAM,gBAAgB,IAAI,aAAa,EAAE;;AA0FzC,MAAM,sBAAsB;AA4G5B,MAAM,gBAAgB;AACtB,MAAM,0BAA0B;AAChC,SAAS,YAAY,UAAU;CAC9B,MAAM,WAAW,EAAE;CACnB,IAAI,iBAAiB,EAAE;CACvB,IAAI,KAAK;CACT,IAAI,KAAK;AACT,MAAK,MAAM,OAAO,UAAU;EAC3B,MAAM,OAAO,IAAI,WAAW,IAAI;EAChC,MAAM,OAAO,IAAI,QAAQ,EAAE;AAC3B,MAAI,SAAS,UAAU;AACtB,OAAI,eAAe,SAAS,EAAG,UAAS,KAAK,eAAe;AAC5D,QAAK,KAAK,UAAU,IAAI,KAAK,KAAK,IAAI,KAAK;AAC3C,QAAK,KAAK,UAAU,IAAI,KAAK,KAAK,IAAI,KAAK;AAC3C,oBAAiB,CAAC;IACjB,GAAG;IACH,GAAG;IACH,CAAC;aACQ,SAAS,UAAU;GAC7B,MAAM,IAAI,KAAK,UAAU,IAAI,KAAK,KAAK,IAAI,KAAK;GAChD,MAAM,IAAI,KAAK,UAAU,IAAI,KAAK,KAAK,IAAI,KAAK;AAChD,QAAK;AACL,QAAK;AACL,kBAAe,KAAK;IACnB,GAAG;IACH,GAAG;IACH,CAAC;aACQ,SAAS,oBAAoB;GACvC,MAAM,MAAM,KAAK,UAAU,IAAI,KAAK,KAAK,IAAI,OAAO,IAAI,MAAM;GAC9D,MAAM,MAAM,KAAK,UAAU,IAAI,KAAK,KAAK,IAAI,OAAO,IAAI,MAAM;GAC9D,MAAM,IAAI,KAAK,UAAU,IAAI,KAAK,KAAK,IAAI,KAAK;GAChD,MAAM,IAAI,KAAK,UAAU,IAAI,KAAK,KAAK,IAAI,KAAK;GAChD,MAAM,QAAQ;GACd,MAAM,MAAM;GACZ,MAAM,MAAM;AACZ,QAAK,IAAI,IAAI,GAAG,KAAK,OAAO,KAAK;IAChC,MAAM,IAAI,IAAI;IACd,MAAM,KAAK,IAAI;IACf,MAAM,MAAM,KAAK,KAAK,MAAM,IAAI,KAAK,IAAI,MAAM,IAAI,IAAI;IACvD,MAAM,MAAM,KAAK,KAAK,MAAM,IAAI,KAAK,IAAI,MAAM,IAAI,IAAI;AACvD,mBAAe,KAAK;KACnB,GAAG;KACH,GAAG;KACH,CAAC;;AAEH,QAAK;AACL,QAAK;aACK,SAAS,iBAAiB;GACpC,MAAM,OAAO,KAAK,UAAU,IAAI,KAAK,KAAK,IAAI,QAAQ;GACtD,MAAM,OAAO,KAAK,UAAU,IAAI,KAAK,KAAK,IAAI,QAAQ;GACtD,MAAM,OAAO,KAAK,UAAU,IAAI,KAAK,KAAK,IAAI,QAAQ;GACtD,MAAM,OAAO,KAAK,UAAU,IAAI,KAAK,KAAK,IAAI,QAAQ;GACtD,MAAM,IAAI,KAAK,UAAU,IAAI,KAAK,KAAK,IAAI,KAAK;GAChD,MAAM,IAAI,KAAK,UAAU,IAAI,KAAK,KAAK,IAAI,KAAK;GAChD,MAAM,QAAQ;GACd,MAAM,MAAM;GACZ,MAAM,MAAM;AACZ,QAAK,IAAI,IAAI,GAAG,KAAK,OAAO,KAAK;IAChC,MAAM,IAAI,IAAI;IACd,MAAM,KAAK,IAAI;IACf,MAAM,MAAM,KAAK;IACjB,MAAM,MAAM,MAAM;IAClB,MAAM,KAAK,IAAI;IACf,MAAM,KAAK,KAAK;IAChB,MAAM,MAAM,MAAM,MAAM,IAAI,MAAM,IAAI,OAAO,IAAI,KAAK,KAAK,OAAO,KAAK;IACvE,MAAM,MAAM,MAAM,MAAM,IAAI,MAAM,IAAI,OAAO,IAAI,KAAK,KAAK,OAAO,KAAK;AACvE,mBAAe,KAAK;KACnB,GAAG;KACH,GAAG;KACH,CAAC;;AAEH,QAAK;AACL,QAAK;;;AAGP,KAAI,eAAe,SAAS,EAAG,UAAS,KAAK,eAAe;AAC5D,QAAO;;AAER,SAAS,aAAa,MAAM;AAC3B,KAAI,KAAK,SAAS,EAAG,QAAO;CAC5B,MAAM,eAAe,EAAE;AACvB,MAAK,MAAM,MAAM,KAAM,KAAI,aAAa,WAAW,EAAG,cAAa,KAAK,GAAG;MACtE;EACJ,MAAM,OAAO,aAAa,aAAa,SAAS;AAChD,MAAI,KAAK,MAAM,GAAG,IAAI,KAAK,GAAG,GAAG,IAAI,KAAK,EAAE,GAAG,IAAK,cAAa,KAAK,GAAG;;AAE1E,KAAI,aAAa,UAAU,GAAG;EAC7B,MAAM,QAAQ,aAAa;EAC3B,MAAM,OAAO,aAAa,aAAa,SAAS;AAChD,MAAI,KAAK,MAAM,MAAM,IAAI,KAAK,GAAG,MAAM,IAAI,KAAK,EAAE,GAAG,IAAK,cAAa,KAAK;;AAE7E,KAAI,aAAa,SAAS,EAAG,QAAO;CACpC,MAAM,UAAU,EAAE;CAClB,MAAM,IAAI,aAAa;AACvB,MAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK;EAC3B,MAAM,OAAO,cAAc,IAAI,IAAI,KAAK;EACxC,MAAM,OAAO,aAAa;EAC1B,MAAM,OAAO,cAAc,IAAI,KAAK;EACpC,MAAM,MAAM,KAAK,IAAI,KAAK;EAC1B,MAAM,MAAM,KAAK,IAAI,KAAK;EAC1B,MAAM,OAAO,KAAK,MAAM,KAAK,IAAI;EACjC,MAAM,MAAM,KAAK,IAAI,KAAK;EAC1B,MAAM,MAAM,KAAK,IAAI,KAAK;EAC1B,MAAM,OAAO,KAAK,MAAM,KAAK,IAAI;AACjC,MAAI,OAAO,QAAQ,OAAO,KAAM;EAChC,MAAM,QAAQ,MAAM,MAAM,MAAM;AAChC,MAAI,KAAK,IAAI,MAAM,IAAI,OAAO,QAAQ,KAAM;AAC5C,UAAQ,KAAK,KAAK;;AAEnB,QAAO;;AAER,SAAS,cAAc,MAAM;CAC5B,IAAI,OAAO;CACX,MAAM,IAAI,KAAK;AACf,KAAI,IAAI,EAAG,QAAO;AAClB,MAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK;EAC3B,MAAM,OAAO,KAAK;EAClB,MAAM,OAAO,MAAM,IAAI,KAAK;AAC5B,UAAQ,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK;;AAEzC,QAAO,OAAO;;AAEf,SAAS,iBAAiB,IAAI,MAAM;CACnC,IAAI,SAAS;CACb,MAAM,IAAI,KAAK;AACf,MAAK,IAAI,IAAI,GAAG,IAAI,IAAI,GAAG,IAAI,GAAG,IAAI,KAAK;EAC1C,MAAM,KAAK,KAAK;EAChB,MAAM,KAAK,KAAK;AAChB,MAAI,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,GAAG,KAAK,GAAG,KAAK,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,GAAG,KAAK,GAAG,EAAG,UAAS,CAAC;;AAE3G,QAAO;;AAER,SAAS,cAAc,MAAM,GAAG;CAC/B,MAAM,IAAI,KAAK;AACf,KAAI,IAAI,EAAG,QAAO;CAClB,MAAM,aAAa,EAAE;AACrB,MAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK;EAC3B,MAAM,OAAO,MAAM,IAAI,IAAI,KAAK;EAChC,MAAM,OAAO,KAAK;EAClB,MAAM,OAAO,MAAM,IAAI,KAAK;EAC5B,MAAM,MAAM,KAAK,IAAI,KAAK;EAC1B,MAAM,MAAM,KAAK,IAAI,KAAK;EAC1B,MAAM,OAAO,KAAK,KAAK,MAAM,MAAM,MAAM,IAAI;EAC7C,MAAM,MAAM,KAAK,IAAI,KAAK;EAC1B,MAAM,MAAM,KAAK,IAAI,KAAK;EAC1B,MAAM,OAAO,KAAK,KAAK,MAAM,MAAM,MAAM,IAAI;AAC7C,MAAI,OAAO,QAAQ,OAAO,MAAM;AAC/B,cAAW,KAAK;IACf,GAAG,KAAK;IACR,GAAG,KAAK;IACR,CAAC;AACF;;EAED,MAAM,MAAM,MAAM;EAClB,MAAM,MAAM,MAAM;EAClB,MAAM,MAAM,MAAM;EAClB,MAAM,MAAM,MAAM;EAClB,MAAM,MAAM,CAAC;EACb,MAAM,MAAM;EACZ,MAAM,MAAM,CAAC;EACb,MAAM,MAAM;EACZ,MAAM,KAAK,MAAM;EACjB,MAAM,KAAK,MAAM;EACjB,MAAM,OAAO,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG;EACzC,IAAI,MAAM;EACV,IAAI,MAAM;AACV,MAAI,OAAO,MAAM;AAChB,SAAM,KAAK;AACX,SAAM,KAAK;SACL;AACN,SAAM;AACN,SAAM;;EAEP,MAAM,OAAO,MAAM,MAAM,MAAM;EAC/B,MAAM,eAAe,KAAK,KAAK,KAAK,IAAI,IAAI,IAAI,QAAQ,GAAG,CAAC;EAC5D,IAAI,OAAO;AACX,MAAI,eAAe,IAAK,QAAO,IAAI;AACnC,SAAO,KAAK,IAAI,MAAM,IAAI,EAAE;AAC5B,aAAW,KAAK;GACf,GAAG,KAAK,IAAI,MAAM;GAClB,GAAG,KAAK,IAAI,MAAM;GAClB,CAAC;;AAEH,QAAO;;AAER,SAAS,gBAAgB,OAAO,OAAO;CACtC,IAAI,QAAQ,UAAU,QAAQ,WAAW,QAAQ,UAAU,QAAQ;AACnE,MAAK,MAAM,KAAK,OAAO;AACtB,MAAI,EAAE,IAAI,MAAO,SAAQ,EAAE;AAC3B,MAAI,EAAE,IAAI,MAAO,SAAQ,EAAE;AAC3B,MAAI,EAAE,IAAI,MAAO,SAAQ,EAAE;AAC3B,MAAI,EAAE,IAAI,MAAO,SAAQ,EAAE;;CAE5B,IAAI,QAAQ,UAAU,QAAQ,WAAW,QAAQ,UAAU,QAAQ;AACnE,MAAK,MAAM,KAAK,OAAO;AACtB,MAAI,EAAE,IAAI,MAAO,SAAQ,EAAE;AAC3B,MAAI,EAAE,IAAI,MAAO,SAAQ,EAAE;AAC3B,MAAI,EAAE,IAAI,MAAO,SAAQ,EAAE;AAC3B,MAAI,EAAE,IAAI,MAAO,SAAQ,EAAE;;AAE5B,QAAO,SAAS,SAAS,SAAS,SAAS,SAAS,SAAS,SAAS;;AAEvE,SAAS,gBAAgB,QAAQ,cAAc;AAC9C,KAAI,CAAC,UAAU,CAAC,OAAO,YAAY,OAAO,SAAS,WAAW,EAAG,QAAO;CACxE,MAAM,WAAW,YAAY,OAAO,SAAS,CAAC,IAAI,aAAa,CAAC,QAAQ,MAAM,EAAE,UAAU,EAAE;CAC5F,MAAM,IAAI,SAAS;AACnB,KAAI,MAAM,EAAG,QAAO;CACpB,MAAM,gBAAgB,IAAI,MAAM,EAAE,CAAC,KAAK,EAAE;AAC1C,MAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK;EAC3B,MAAM,QAAQ,SAAS;EACvB,MAAM,KAAK,MAAM;AACjB,OAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK;AAC3B,OAAI,MAAM,EAAG;AACb,OAAI,gBAAgB,OAAO,SAAS,GAAG,IAAI,iBAAiB,IAAI,SAAS,GAAG,CAAE,eAAc;;;AAG9F,MAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK;EAC3B,MAAM,OAAO,SAAS;EACtB,MAAM,OAAO,cAAc,KAAK;EAChC,MAAM,oBAAoB,cAAc,KAAK,MAAM;AACnD,MAAI,qBAAqB,OAAO,EAAG,MAAK,SAAS;WACxC,CAAC,qBAAqB,OAAO,EAAG,MAAK,SAAS;;CAExD,MAAM,cAAc,SAAS,KAAK,MAAM,cAAc,GAAG,aAAa,CAAC;CACvE,MAAM,WAAW,EAAE;AACnB,MAAK,MAAM,QAAQ,aAAa;AAC/B,MAAI,KAAK,WAAW,EAAG;AACvB,WAAS,KAAK;GACb,SAAS;GACT,MAAM,CAAC,KAAK,GAAG,GAAG,KAAK,GAAG,EAAE;GAC5B,CAAC;AACF,OAAK,IAAI,IAAI,GAAG,IAAI,KAAK,QAAQ,IAAK,UAAS,KAAK;GACnD,SAAS;GACT,MAAM,CAAC,KAAK,GAAG,GAAG,KAAK,GAAG,EAAE;GAC5B,CAAC;AACF,WAAS,KAAK;GACb,SAAS;GACT,MAAM,EAAE;GACR,CAAC;;AAEH,QAAO,EAAE,UAAU;;AAEpB,MAAM,0BAA0B,IAAI,SAAS;;AAE7C,SAAS,kBAAkB,MAAM;AAChC,QAAO,QAAQ,IAAI,KAAK,EAAE,UAAU;;AAErC,SAAS,WAAW,MAAM,OAAO;CAChC,MAAM,eAAe,KAAK,MAAM,MAAM,YAAY,SAAS,EAAE;CAC7D,MAAM,cAAc,MAAM,YAAY,OAAO;AAC7C,MAAK,IAAI,IAAI,GAAG,IAAI,YAAY,QAAQ,KAAK,EAAG,aAAY,MAAM;AAClE,MAAK,KAAK,cAAc;AACxB,MAAK,KAAK,aAAa,MAAM;AAC7B,MAAK,KAAK,eAAe,MAAM;;;;;;;AAOhC,SAAS,mBAAmB,QAAQ,MAAM;CACzC,MAAM,MAAM,KAAK;AACjB,KAAI,CAAC,IAAK;CACV,MAAM,eAAe,KAAK,KAAK,IAAI,WAAW,SAAS,EAAE;CACzD,MAAM,kBAAkB,KAAK,IAAI,GAAG,KAAK,KAAK,eAAe,cAAc,CAAC;CAC5E,MAAM,mBAAmB,IAAI,aAAa,gBAAgB,kBAAkB,EAAE;AAC9E,kBAAiB,KAAK,GAAG;AACzB,kBAAiB,IAAI,IAAI,WAAW;CACpC,MAAM,YAAY,OAAO,cAAc;EACtC,OAAO;EACP,MAAM,CAAC,eAAe,gBAAgB;EACtC,QAAQ;EACR,OAAO,gBAAgB,kBAAkB,gBAAgB;EACzD,CAAC;AACF,QAAO,MAAM,aAAa,EAAE,SAAS,WAAW,EAAE,kBAAkB,EAAE,aAAa,gBAAgB,IAAI,EAAE,CAAC,eAAe,gBAAgB,CAAC;CAC1I,MAAM,cAAc,KAAK,MAAM,IAAI,YAAY,SAAS,EAAE,GAAG,KAAK,MAAM,IAAI,aAAa,SAAS,EAAE;CACpG,MAAM,iBAAiB,KAAK,IAAI,GAAG,KAAK,KAAK,cAAc,cAAc,CAAC;CAC1E,MAAM,iBAAiB,IAAI,YAAY,gBAAgB,iBAAiB,EAAE;AAC1E,gBAAe,IAAI,IAAI,aAAa,EAAE;AACtC,gBAAe,IAAI,IAAI,cAAc,IAAI,YAAY,OAAO;CAC5D,MAAM,WAAW,OAAO,cAAc;EACrC,OAAO;EACP,MAAM,CAAC,eAAe,eAAe;EACrC,QAAQ;EACR,OAAO,gBAAgB,kBAAkB,gBAAgB;EACzD,CAAC;AACF,QAAO,MAAM,aAAa,EAAE,SAAS,UAAU,EAAE,gBAAgB,EAAE,aAAa,gBAAgB,GAAG,EAAE,CAAC,eAAe,eAAe,CAAC;AACrI,MAAK,YAAY;AACjB,MAAK,WAAW;CAChB,MAAM,QAAQ,QAAQ,IAAI,KAAK;AAC/B,KAAI,MAAO,OAAM,SAAS;;;AAG3B,SAAS,mBAAmB,IAAI;AAC/B,QAAO,MAAM,MAAM,MAAM,OAAO,MAAM,OAAO,MAAM,OAAO,MAAM,OAAO,MAAM,OAAO,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM;;AAErP,IAAI,gBAAgB,MAAMc,gBAAc;CACvC,YAAY;CACZ,YAAY;CACZ,YAAY;CACZ;CACA,YAAY,UAAU,EAAE,EAAE;AACzB,OAAK,YAAY,QAAQ,cAAc,KAAK,IAAI,QAAQ,YAAY;AACpE,OAAK,YAAY,QAAQ,cAAc,KAAK,IAAI,QAAQ,YAAY;AACpE,OAAK,YAAY,QAAQ,aAAa;AACtC,OAAK,cAAc,QAAQ;;CAE5B,SAAS,QAAQ,MAAM;AACtB,MAAI,CAAC,KAAM,OAAM,IAAI,MAAM,uEAAuE;EAClG,MAAM,QAAQ;GACb,QAAQ;GACR,aAAa,KAAK;GAClB,WAAW,KAAK;GAChB,QAAQ,EAAE;GACV,aAAa,EAAE;GACf,cAAc,EAAE;GAChB,QAAQ;GACR;EACD,MAAM,UAAU,MAAM,QAAQ,KAAK,aAAa,GAAG,KAAK,eAAe,MAAM,KAAK,KAAK,gBAAgB,EAAE,CAAC;EAC1G,MAAM,aAAa,IAAI,IAAI,QAAQ;EACnC,MAAM,sBAAsB,CAAC,GAAG;AAChC,MAAI,KAAK,WACR;QAAK,MAAM,MAAM,QAAS,KAAI,OAAO,GAAI,qBAAoB,KAAK,GAAG;aAC3D,KAAK,WACf;QAAK,MAAM,MAAM,KAAK,UAAW,KAAI,WAAW,IAAI,GAAG,CAAE,qBAAoB,KAAK,GAAG;QAC/E,MAAK,MAAM,MAAM,QAAS,KAAI,OAAO,MAAM,mBAAmB,GAAG,CAAE,qBAAoB,KAAK,GAAG;EACtG,MAAM,SAAS,KAAK,YAAY,KAAK;AACrC,UAAQ,IAAI,QAAQ,MAAM;AAC1B,OAAK,MAAM,MAAM,oBAAqB,iBAAc,aAAa,QAAQ,OAAO,GAAG;AACnF,aAAW,QAAQ,MAAM;AACzB,MAAI,OAAQ,oBAAmB,QAAQ,OAAO;AAC9C,SAAO;;;;;;;CAOR,OAAO,aAAa,MAAM,UAAU;EACnC,MAAM,QAAQ,QAAQ,IAAI,KAAK;AAC/B,MAAI,CAAC,SAAS,OAAO,MAAM,OAAO,aAAa,WAAY,QAAO;EAClE,MAAM,MAAM;AACZ,MAAI,2BAA2B,IAAI,KAAK;EACxC,IAAI,QAAQ;AACZ,OAAK,MAAM,MAAM,UAAU;AAC1B,OAAI,IAAI,OAAO,IAAI,GAAG,CAAE;GACxB,IAAI,QAAQ;AACZ,OAAI;AACH,YAAQ,MAAM,OAAO,SAAS,GAAG;WAC1B;AACP,YAAQ;;GAET,MAAM,SAAS,QAAQA,gBAAc,WAAW,OAAO,OAAO,qBAAqB,GAAG,GAAG,SAASA,gBAAc,YAAY,qBAAqB,IAAI,EAAE;AACvJ,OAAI,OAAO,IAAI,IAAI,MAAM;AACzB,OAAI,KAAK,WAAW,KAAK,MAAM;AAC/B,WAAQ;;AAET,MAAI,MAAO,iBAAc,OAAO,KAAK,MAAM;AAC3C,SAAO;;;CAGR,OAAO,iBAAiB,MAAM,YAAY;EACzC,MAAM,QAAQ,QAAQ,IAAI,KAAK;AAC/B,MAAI,CAAC,MAAO,QAAO;EACnB,MAAM,MAAM;EACZ,IAAI,QAAQ;AACZ,OAAK,MAAM,MAAM,YAAY;AAC5B,OAAI,IAAI,WAAW,IAAI,GAAG,CAAE;AAC5B,OAAIA,gBAAc,aAAa,KAAK,OAAO,GAAG,CAAE,SAAQ;;AAEzD,MAAI,MAAO,iBAAc,OAAO,KAAK,MAAM;AAC3C,SAAO;;CAER,OAAO,OAAO,MAAM,OAAO;AAC1B,aAAW,MAAM,MAAM;AACvB,MAAI,KAAK,aAAa,MAAM,OAAQ,oBAAmB,MAAM,QAAQ,KAAK;;;CAG3E,OAAO,aAAa,MAAM,OAAO,IAAI;EACpC,MAAM,MAAM,MAAM;EAClB,IAAI,QAAQ;AACZ,MAAI;AACH,OAAI,OAAO,GAAI,SAAQ,OAAO,IAAI,aAAa,aAAa,IAAI,SAAS,EAAE,GAAG,IAAI,oBAAoB,EAAE,IAAI;OACvG,SAAQ,IAAI,oBAAoB,GAAG,IAAI;UACrC;AACP,UAAO;;AAER,MAAI,CAAC,MAAO,QAAO;AACnB,MAAI,OAAO,MAAM,MAAM,OAAO,EAAG,QAAO;AACxC,OAAK,2BAA2B,IAAI,KAAK;EACzC,MAAM,UAAU,OAAO,MAAM,OAAO,WAAW,MAAM,KAAK,KAAK;EAC/D,MAAM,SAAS,YAAY,KAAK,IAAI,KAAK,OAAO,IAAI,QAAQ,GAAG,KAAK;AACpE,MAAI,QAAQ;GACX,MAAM,QAAQ;IACb,GAAG;IACH,WAAW;IACX;AACD,QAAK,WAAW,IAAI,IAAI,MAAM;AAC9B,QAAK,KAAK,WAAW,KAAK,MAAM;AAChC,UAAO;;EAER,MAAMC,WAASD,gBAAc,WAAW,OAAO,OAAO,IAAI,QAAQ;AAClE,MAAI,CAACC,SAAQ,QAAO;AACpB,OAAK,WAAW,IAAI,IAAIA,SAAO;AAC/B,MAAI,YAAY,KAAK,EAAG,MAAK,OAAO,IAAI,SAASA,SAAO;AACxD,OAAK,KAAK,WAAW,KAAKA,SAAO;AACjC,SAAO;;CAER,OAAO,YAAY,WAAW,SAAS,cAAc;AACpD,SAAO;GACN;GACA;GACA,OAAO;GACP,QAAQ;GACR;GACA,UAAU;GACV,UAAU;GACV,WAAW;GACX,UAAU;GACV,UAAU;GACV,gBAAgB;GAChB,gBAAgB;GAChB;;;CAGF,OAAO,WAAW,GAAG,OAAO,WAAW,SAAS;EAC/C,IAAI;EACJ,IAAI;EACJ,IAAI,eAAe;AACnB,MAAI;AACH,YAAS,MAAM;AACf,UAAO,MAAM;AACb,OAAI;AACH,mBAAe,KAAK,MAAM,MAAM,gBAAgB,EAAE;WAC3C;AACP,mBAAe;;UAET;AACP,UAAO;;AAER,MAAI,CAAC,QAAQ,KAAK,SAAS,KAAK,QAAQ,KAAK,SAAS,KAAK,QAAQ,KAAK,SAAS,YAAY,KAAK,SAAS,YAAY,CAAC,UAAU,CAAC,OAAO,YAAY,OAAO,SAAS,WAAW,EAAG,QAAO;GAC1L;GACA;GACA,OAAO;GACP,QAAQ;GACR;GACA,UAAU;GACV,UAAU;GACV,WAAW;GACX,UAAU;GACV,UAAU;GACV,gBAAgB;GAChB,gBAAgB;GAChB;EACD,MAAM,eAAe,EAAE,cAAc,EAAE,cAAc,IAAI;EACzD,MAAM,eAAe,EAAE,eAAe,EAAE,cAAc,IAAI,gBAAgB,QAAQ,aAAa,GAAG;EAClG,MAAM,MAAM,KAAK,OAAO;EACxB,MAAM,MAAM,KAAK,OAAO;EACxB,MAAM,MAAM,KAAK,OAAO;EACxB,MAAM,MAAM,KAAK,OAAO;EACxB,MAAM,SAAS,EAAE;EACjB,IAAI,WAAW;EACf,IAAI,WAAW;EACf,IAAI,aAAa;EACjB,IAAI,gBAAgB;EACpB,IAAI,gBAAgB;AACpB,OAAK,IAAI,IAAI,GAAG,IAAI,aAAa,SAAS,QAAQ,KAAK;GACtD,MAAM,MAAM,aAAa,SAAS;GAClC,MAAM,cAAc,IAAI,WAAW,IAAI;GACvC,MAAM,OAAO,IAAI,QAAQ,EAAE;AAC3B,OAAI,gBAAgB,UAAU;AAC7B,iBAAa;IACb,MAAM,IAAI,KAAK,UAAU,IAAI,KAAK,KAAK,IAAI;IAC3C,MAAM,IAAI,KAAK,UAAU,IAAI,KAAK,KAAK,IAAI;AAC3C,eAAW,IAAI;AACf,eAAW,IAAI;AACf,oBAAgB;AAChB,oBAAgB;cACN,gBAAgB,UAAU;IACpC,MAAM,IAAI,KAAK,UAAU,IAAI,KAAK,KAAK,IAAI;IAC3C,MAAM,IAAI,KAAK,UAAU,IAAI,KAAK,KAAK,IAAI;IAC3C,MAAM,QAAQ,IAAI;IAClB,MAAM,QAAQ,IAAI;IAClB,MAAM,IAAI;KACT,OAAO;KACP,IAAI;KACJ,IAAI;KACJ,IAAI;KACJ,IAAI;KACJ,KAAK,WAAW,SAAS;KACzB,KAAK,WAAW,SAAS;KACzB;AACD,WAAO,KAAK,EAAE;AACd,iBAAa;AACb,eAAW;AACX,eAAW;cACD,gBAAgB,oBAAoB;IAC9C,MAAM,MAAM,KAAK,UAAU,IAAI,KAAK,KAAK,IAAI,OAAO,IAAI;IACxD,MAAM,MAAM,KAAK,UAAU,IAAI,KAAK,KAAK,IAAI,OAAO,IAAI;IACxD,MAAM,IAAI,KAAK,UAAU,IAAI,KAAK,KAAK,IAAI;IAC3C,MAAM,IAAI,KAAK,UAAU,IAAI,KAAK,KAAK,IAAI;IAC3C,MAAM,QAAQ,IAAI;IAClB,MAAM,QAAQ,IAAI;IAClB,MAAM,IAAI;KACT,OAAO;KACP,IAAI;KACJ,IAAI;KACJ,IAAI,MAAM;KACV,IAAI,MAAM;KACV,IAAI;KACJ,IAAI;KACJ;AACD,WAAO,KAAK,EAAE;AACd,iBAAa;AACb,eAAW;AACX,eAAW;cACD,gBAAgB,iBAAiB;IAC3C,MAAM,OAAO,KAAK,UAAU,IAAI,KAAK,KAAK,IAAI;IAC9C,MAAM,OAAO,KAAK,UAAU,IAAI,KAAK,KAAK,IAAI;IAC9C,MAAM,OAAO,KAAK,UAAU,IAAI,KAAK,KAAK,IAAI;IAC9C,MAAM,OAAO,KAAK,UAAU,IAAI,KAAK,KAAK,IAAI;IAC9C,MAAM,IAAI,KAAK,UAAU,IAAI,KAAK,KAAK,IAAI;IAC3C,MAAM,IAAI,KAAK,UAAU,IAAI,KAAK,KAAK,IAAI;IAC3C,MAAM,QAAQ,IAAI;IAClB,MAAM,QAAQ,IAAI;IAClB,MAAM,WAAW;IACjB,IAAI,QAAQ;IACZ,IAAI,QAAQ;AACZ,SAAK,IAAI,IAAI,GAAG,KAAK,UAAU,KAAK;KACnC,MAAM,IAAI,IAAI;KACd,MAAM,KAAK,IAAI;KACf,MAAM,MAAM,KAAK;KACjB,MAAM,MAAM,MAAM;KAClB,MAAM,KAAK,IAAI;KACf,MAAM,KAAK,KAAK;KAChB,MAAM,OAAO,MAAM,WAAW,IAAI,MAAM,KAAK,OAAO,OAAO,IAAI,KAAK,MAAM,OAAO,OAAO,KAAK;KAC7F,MAAM,OAAO,MAAM,WAAW,IAAI,MAAM,KAAK,OAAO,OAAO,IAAI,KAAK,MAAM,OAAO,OAAO,KAAK;KAC7F,MAAM,IAAI;MACT,OAAO,cAAc,MAAM;MAC3B,IAAI;MACJ,IAAI;MACJ,KAAK,QAAQ,QAAQ;MACrB,KAAK,QAAQ,QAAQ;MACrB,IAAI;MACJ,IAAI;MACJ;AACD,YAAO,KAAK,EAAE;AACd,aAAQ;AACR,aAAQ;;AAET,iBAAa;AACb,eAAW;AACX,eAAW;cACD,gBAAgB,aAAa;AACvC,QAAI,aAAa,iBAAiB,aAAa,eAAe;KAC7D,MAAM,IAAI;MACT,OAAO;MACP,IAAI;MACJ,IAAI;MACJ,IAAI;MACJ,IAAI;MACJ,KAAK,WAAW,iBAAiB;MACjC,KAAK,WAAW,iBAAiB;MACjC;AACD,YAAO,KAAK,EAAE;AACd,kBAAa;;AAEd,eAAW;AACX,eAAW;;;AAGb,MAAI,CAAC,UAAU,OAAO,WAAW,EAAG,QAAO;AAC3C,OAAK,MAAM,KAAK,OAAQ,KAAI,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI;AAC7F,KAAE,MAAM,EAAE,KAAK,EAAE,MAAM;AACvB,KAAE,MAAM,EAAE,KAAK,EAAE,MAAM;;EAExB,MAAM,kBAAkB,KAAK,MAAM,EAAE,YAAY,SAAS,EAAE;AAC5D,OAAK,MAAM,KAAK,QAAQ;AACvB,OAAI,EAAE,SAAS,EAAE,OAAO,SAAS,MAAM,GAAG;IACzC,MAAM,QAAQ,IAAI,EAAE,OAAO,SAAS;AACpC,SAAK,IAAI,IAAI,GAAG,IAAI,OAAO,IAAK,GAAE,OAAO,KAAK,GAAG;;GAElD,MAAM,SAAS,KAAK,MAAM,EAAE,OAAO,SAAS,EAAE,GAAG,kBAAkB,gBAAgB;AACnF,OAAI,QAAQ;IACX,MAAM,QAAQ,IAAI,EAAE,OAAO,SAAS;AACpC,SAAK,IAAI,IAAI,GAAG,IAAI,OAAO,IAAK,GAAE,OAAO,KAAK,GAAG;;AAElD,OAAI,EAAE,SAAS,QAAQ;AACtB,MAAE,aAAa,KAAK,MAAM,EAAE,OAAO,SAAS,EAAE;AAC9C,MAAE,OAAO,KAAK,EAAE,IAAI,EAAE,GAAG;SACnB,GAAE,aAAa,KAAK,OAAO,KAAK,MAAM,EAAE,OAAO,SAAS,EAAE,GAAG,KAAK,EAAE;AAC3E,KAAE,OAAO,KAAK,EAAE,IAAI,EAAE,GAAG;AACzB,KAAE,OAAO,KAAK,EAAE,IAAI,EAAE,GAAG;;EAE1B,MAAM,QAAQ,KAAK,MAAM;EACzB,MAAM,QAAQ,KAAK,MAAM;EACzB,IAAI,SAAS,EAAE;AACf,MAAI,QAAQ,UAAU,QAAQ,QAAQ;AACrC,YAAS,KAAK,MAAM,KAAK,IAAI,OAAO,MAAM,GAAG,EAAE;AAC/C,OAAI,SAAS,EAAG,UAAS;;EAE1B,MAAM,WAAW,KAAK,KAAK,QAAQ,OAAO;EAC1C,IAAI,WAAW;EACf,IAAI,WAAW;AACf,SAAO,MAAM,KAAK,MAAM,KAAK,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,GAAG,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,CAAC;AACtF,OAAK,IAAI,IAAI,GAAG,IAAI,QAAQ,KAAK;GAChC,MAAM,kBAAkB,KAAK,MAAM,EAAE,aAAa,SAAS,EAAE;GAC7D,IAAI,aAAa;AACjB,QAAK,MAAM,KAAK,QAAQ;AACvB,QAAI,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,GAAI;IACpC,MAAM,YAAY,KAAK,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG;IAC5C,MAAM,YAAY,KAAK,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG;AAC5C,QAAI,YAAY,YAAY,YAAY,SAAU;IAClD,MAAM,aAAa,EAAE,cAAc;IACnC,MAAM,eAAe,aAAa;IAClC,MAAM,eAAe,KAAK,MAAM,aAAa,cAAc;AAC3D,MAAE,aAAa,KAAK,cAAc,aAAa;AAC/C;;AAED,KAAE,YAAY,KAAK,YAAY,gBAAgB;AAC/C,eAAY;AACZ,eAAY;;EAEb,MAAM,WAAW,KAAK,KAAK,QAAQ,OAAO;EAC1C,IAAI,WAAW;EACf,IAAI,WAAW;AACf,SAAO,MAAM,KAAK,MAAM,KAAK,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,GAAG,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,CAAC;AACtF,OAAK,IAAI,IAAI,GAAG,IAAI,QAAQ,KAAK;GAChC,MAAM,kBAAkB,KAAK,MAAM,EAAE,aAAa,SAAS,EAAE;GAC7D,IAAI,aAAa;AACjB,QAAK,MAAM,KAAK,QAAQ;AACvB,QAAI,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,GAAI;IACpC,MAAM,YAAY,KAAK,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG;IAC5C,MAAM,YAAY,KAAK,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG;AAC5C,QAAI,YAAY,YAAY,YAAY,SAAU;IAClD,MAAM,aAAa,EAAE,cAAc;IACnC,MAAM,eAAe,aAAa;IAClC,MAAM,eAAe,KAAK,MAAM,aAAa,cAAc;AAC3D,MAAE,aAAa,KAAK,cAAc,aAAa;AAC/C;;AAED,KAAE,YAAY,KAAK,YAAY,gBAAgB;AAC/C,eAAY;AACZ,eAAY;;AAEb,SAAO;GACN;GACA;GACA,OAAO,KAAK,MAAM,MAAM,IAAI;GAC5B,QAAQ,KAAK,MAAM,MAAM,IAAI;GAC7B,cAAc,KAAK,MAAM,MAAM,gBAAgB,EAAE;GACjD,UAAU,KAAK,MAAM,IAAI;GACzB,UAAU,KAAK,MAAM,IAAI;GACzB,WAAW;GACX;GACA;GACA,gBAAgB,kBAAkB;GAClC,gBAAgB,KAAK,MAAM,kBAAkB,cAAc;GAC3D;;CAEF,YAAY,MAAM;EACjB,MAAM,UAAU;GACf,UAAU,KAAK,UAAU;GACzB,WAAW,KAAK,WAAW;GAC3B,SAAS,KAAK,WAAW;GACzB,YAAY,KAAK,cAAc;GAC/B;AACD,SAAO;GACN,4BAA4B,IAAI,KAAK;GACrC,wBAAwB,IAAI,KAAK;GACjC,WAAW;GACX,UAAU;GACV,GAAG;GACH,MAAM;IACL,YAAY,EAAE;IACd,YAAY,EAAE;IACd,aAAa,EAAE;IACf,cAAc,EAAE;IAChB;IACA;GACD;;CAEF,eAAe,eAAe;EAC7B,MAAM,EAAE,YAAY,YAAY,aAAa,iBAAiB,cAAc;EAC5E,MAAM,eAAe,KAAK,KAAK,WAAW,SAAS,EAAE;EACrD,MAAM,kBAAkB,KAAK,KAAK,eAAe,cAAc;EAC/D,MAAM,mBAAmB,IAAI,aAAa,gBAAgB,kBAAkB,EAAE;AAC9E,mBAAiB,KAAK,EAAE;AACxB,mBAAiB,IAAI,WAAW;EAChC,MAAM,cAAc,KAAK,MAAM,YAAY,SAAS,EAAE,GAAG,KAAK,MAAM,aAAa,SAAS,EAAE;EAC5F,MAAM,iBAAiB,KAAK,KAAK,cAAc,cAAc;EAC7D,MAAM,iBAAiB,IAAI,YAAY,gBAAgB,iBAAiB,EAAE;AAC1E,iBAAe,IAAI,aAAa,EAAE;AAClC,iBAAe,IAAI,cAAc,YAAY,OAAO;EACpD,MAAM,cAAc,iBAAiB;EACrC,MAAM,aAAa,eAAe;EAClC,MAAM,UAAU,cAAc,KAAK;EACnC,MAAM,aAAa,KAAK,WAAW,SAAS,KAAK,IAAI,cAAc,IAAI,aAAa;EACpF,MAAM,SAAS,IAAI,YAAY,WAAW;EAC1C,MAAM,OAAO,IAAI,SAAS,OAAO;EACjC,IAAI,SAAS;AACb,OAAK,IAAI,IAAI,GAAG,IAAI,GAAG,IAAK,MAAK,SAAS,UAAU,wBAAwB,WAAW,EAAE,CAAC;AAC1F,OAAK,UAAU,QAAQ,WAAW,QAAQ,KAAK;AAC/C,YAAU;AACV,OAAK,MAAM,MAAM,YAAY;AAC5B,QAAK,SAAS,QAAQ,GAAG,WAAW,KAAK;AACzC,aAAU;AACV,QAAK,UAAU,QAAQ,GAAG,OAAO,KAAK;AACtC,aAAU;AACV,QAAK,UAAU,QAAQ,GAAG,QAAQ,KAAK;AACvC,aAAU;AACV,QAAK,UAAU,QAAQ,GAAG,cAAc,KAAK;AAC7C,aAAU;AACV,QAAK,SAAS,QAAQ,GAAG,UAAU,KAAK;AACxC,aAAU;AACV,QAAK,SAAS,QAAQ,GAAG,UAAU,KAAK;AACxC,aAAU;AACV,QAAK,UAAU,QAAQ,GAAG,WAAW,KAAK;AAC1C,aAAU;AACV,QAAK,UAAU,QAAQ,GAAG,UAAU,KAAK;AACzC,aAAU;AACV,QAAK,UAAU,QAAQ,GAAG,UAAU,KAAK;AACzC,aAAU;AACV,QAAK,UAAU,QAAQ,GAAG,gBAAgB,KAAK;AAC/C,aAAU;AACV,QAAK,UAAU,QAAQ,GAAG,gBAAgB,KAAK;AAC/C,aAAU;AACV,QAAK,UAAU,QAAQ,GAAG,WAAW,GAAG,KAAK;AAC7C,aAAU;;AAEX,OAAK,UAAU,QAAQ,eAAe,KAAK;AAC3C,YAAU;AACV,OAAK,UAAU,QAAQ,iBAAiB,KAAK;AAC7C,YAAU;AACV,OAAK,UAAU,QAAQ,aAAa,KAAK;AACzC,YAAU;AACV,MAAI,WAAW,OAAO,CAAC,IAAI,IAAI,WAAW,iBAAiB,OAAO,EAAE,OAAO;AAC3E,YAAU;AACV,OAAK,UAAU,QAAQ,eAAe,KAAK;AAC3C,YAAU;AACV,OAAK,UAAU,QAAQ,gBAAgB,KAAK;AAC5C,YAAU;AACV,OAAK,UAAU,QAAQ,YAAY,KAAK;AACxC,YAAU;AACV,MAAI,WAAW,OAAO,CAAC,IAAI,IAAI,WAAW,eAAe,OAAO,EAAE,OAAO;AACzE,YAAU;AACV,OAAK,SAAS,QAAQ,QAAQ,YAAY,GAAG,KAAK;AAClD,YAAU;AACV,OAAK,SAAS,QAAQ,QAAQ,aAAa,GAAG,KAAK;AACnD,YAAU;AACV,OAAK,SAAS,QAAQ,QAAQ,WAAW,GAAG,KAAK;AACjD,YAAU;AACV,OAAK,SAAS,QAAQ,QAAQ,cAAc,GAAG,KAAK;AACpD,YAAU;AACV,SAAO;;;AAMT,SAAS,gBAAgB,YAAY;AACpC,KAAI,CAAC,WAAY,QAAO;AACxB,KAAI,eAAe,OAAQ,QAAO;AAClC,KAAI,eAAe,SAAU,QAAO;AACpC,KAAI,OAAO,eAAe,SAAU,QAAO;CAC3C,MAAM,SAAS,SAAS,YAAY,GAAG;AACvC,QAAO,MAAM,OAAO,GAAG,MAAM;;AAE9B,SAAS,gBAAgB,YAAY,YAAY,aAAa,MAAM;AACnE,QAAO,GAAG,WAAW,GAAG,gBAAgB,WAAW,GAAG,cAAc,WAAW,gBAAgB,KAAK,QAAQ,OAAO,KAAK,KAAK,CAAC,SAAS,IAAI,SAAS,OAAO,QAAQ,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,OAAO,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,IAAI,KAAK;;;;;;;;;;AAU5P,SAAS,gBAAgB,OAAO;CAC/B,MAAM,SAAS,QAAQ,OAAO,MAAM;CACpC,IAAI;AACJ,KAAI,UAAU,OAAO,OAAO,UAAU,eAAe,MAAM,QAAQ,OAAO,MAAM,KAAK,OAAO,MAAM,UAAU,KAAK,EAAG,QAAO,OAAO,MAAM;UAC/H,UAAU,OAAO,OAAO,YAAY,cAAc,OAAO,OAAO,aAAa,WAAY,QAAO,OAAO,QAAQ,MAAM;KACzH,QAAO;AACZ,QAAO;;AAER,SAAS,iBAAiB,QAAQ,UAAU;AAC3C,KAAI,SAAS,UAAW;AACxB,oBAAmB,QAAQ,SAAS;;AAErC,MAAM,mBAAmB,OAAO,IAAI,8BAA8B;AAClE,MAAM,oBAAoB,OAAO,IAAI,+BAA+B;AACpE,MAAM,sBAAsB,OAAO,IAAI,iCAAiC;AACxE,MAAM,oBAAoB,OAAO,IAAI,+BAA+B;AACpE,MAAM,IAAI;AACV,EAAE,oBAAoB,EAAE,qCAAqC,IAAI,KAAK;AACtE,EAAE,qBAAqB,EAAE,sCAAsC,IAAI,KAAK;AACxE,EAAE,uBAAuB,EAAE,wCAAwC,IAAI,KAAK;AAC5E,EAAE,qBAAqB,EAAE,sCAAsC,IAAI,KAAK;AACxE,IAAI,gBAAgB,MAAMC,gBAAc;CACvC,WAAW,QAAQ;AAClB,SAAO,EAAE;;CAEV,WAAW,kBAAkB;AAC5B,SAAO,EAAE;;;CAGV,OAAO,UAAU,YAAY,MAAM;AAClC,kBAAc,gBAAgB,IAAI,YAAY,KAAK;;CAEpD,OAAO,UAAU,YAAY;AAC5B,SAAOA,gBAAc,gBAAgB,IAAI,WAAW,IAAI;;CAEzD,OAAO,eAAe;AACrB,SAAO,MAAM,KAAKA,gBAAc,gBAAgB,QAAQ,CAAC;;CAE1D,OAAO,iBAAiB;EACvB,MAAM,OAAOA,gBAAc,gBAAgB,QAAQ,CAAC,MAAM;AAC1D,SAAO,KAAK,OAAO,OAAO,KAAK;;CAEhC,OAAO,aAAa;AACnB,SAAOA,gBAAc,gBAAgB,OAAO;;CAE7C,OAAO,4BAA4B,IAAI,KAAK;CAC5C,WAAW,kBAAkB;AAC5B,SAAO,EAAE;;CAEV,WAAW,cAAc;AACxB,MAAI,EAAE,8BAA8B,IAAK,GAAE,qCAAqC,IAAI,KAAK;AACzF,SAAO,EAAE;;CAEV,OAAO,gBAAgB;CACvB,OAAO,eAAe;CACtB,OAAO,oCAAoC,IAAI,KAAK;CACpD,OAAO,kBAAkB;CACzB,OAAO,uBAAuB;CAC9B,OAAO,2BAA2B;CAClC,OAAO,aAAa;CACpB,OAAO,aAAa;CACpB,OAAO,aAAa;;;;;;CAMpB,OAAO,aAAa,OAAO,UAAU;AACpC,kBAAc,oBAAoB,MAAM;AACxC,MAAI,CAACA,gBAAc,cAAc,CAACA,gBAAc,YAAY;AAC3D,mBAAc,kBAAkB;AAChC,SAAM,IAAI,MAAM,cAAc,WAAW,IAAI,SAAS,MAAM,GAAG,yFAAyF;;AAEzJ,kBAAc,gBAAgB,YAAY;AAC1C,kBAAc,uBAAuB;AACrC,OAAK,MAAM,OAAOA,gBAAc,kBAAkB,QAAQ,CAAE,KAAI,SAAS;AACzE,kBAAc,kBAAkB,OAAO;;;CAGxC,OAAO,eAAe;AACrB,SAAO,CAAC,EAAEA,gBAAc,mBAAmBA,gBAAc,iBAAiBA,gBAAc;;;;;;CAMzF,OAAO,oBAAoB,OAAO;AACjC,kBAAc,kBAAkB;AAChC,kBAAc,aAAa;AAC3B,kBAAc,aAAa;AAC3B,kBAAc,aAAa;EAC3B,MAAM,OAAO,IAAI,SAAS,MAAM,QAAQ,MAAM,YAAY,MAAM,WAAW;EAC3E,MAAM,YAAY,KAAK,UAAU,EAAE;EACnC,IAAI,SAAS;AACb,OAAK,IAAI,IAAI,GAAG,IAAI,WAAW,KAAK;GACnC,MAAM,MAAM,OAAO,aAAa,KAAK,SAAS,OAAO,EAAE,KAAK,SAAS,SAAS,EAAE,EAAE,KAAK,SAAS,SAAS,EAAE,EAAE,KAAK,SAAS,SAAS,EAAE,CAAC;AACvI,OAAI,QAAQ,OAAQ,iBAAc,aAAa,KAAK,UAAU,SAAS,EAAE;YAChE,QAAQ,OAAQ,iBAAc,aAAa,KAAK,UAAU,SAAS,EAAE;YACrE,QAAQ,OAAQ,iBAAc,aAAa,KAAK,UAAU,SAAS,EAAE;AAC9E,aAAU;;;;;;;CAOZ,aAAa,sBAAsB;AAClC,MAAIA,gBAAc,gBAAiB;AACnC,MAAIA,gBAAc,sBAAsB;AACvC,SAAMA,gBAAc;AACpB;;AAED,kBAAc,wBAAwB,YAAY;AACjD,OAAI;AACH,SAAK,CAAC,CAAC,WAAW,4BAA4B,OAAO,WAAW,eAAe,OAAO,WAAW,aAAa,gBAAgBA,gBAAc,eAAe;KAC1J,MAAM,aAAa,OAAO,MAAM;;MAE/B;GACH,SAASA,gBAAc,cAAc;KACnC,MAAM,QAAQ,IAAI,WAAW,WAAW,QAAQ,WAAW,YAAY,WAAW,WAAW;AAC7F,qBAAc,oBAAoB,MAAM;AACxC;;IAED,MAAM,MAAMA,gBAAc;AAC1B,QAAI,CAAC,KAAK;AACT,aAAQ,KAAK,wDAAwD;AACrE;;IAED,MAAM,WAAW,MAAM,MAAM,IAAI;AACjC,QAAI,CAAC,SAAS,GAAI,OAAM,IAAI,MAAM,mCAAmC,IAAI,IAAI,SAAS,aAAa;IACnG,MAAM,cAAc,MAAM,SAAS,aAAa;AAChD,oBAAc,oBAAoB,IAAI,WAAW,YAAY,CAAC;YACtD,KAAK;AACb,YAAQ,MAAM,qDAAqD,IAAI;;MAErE;AACJ,QAAMA,gBAAc;;CAErB,aAAa,kBAAkB,WAAW;AACzC,MAAI,CAACA,gBAAc,iBAClB;OAAIA,gBAAc,iBAAiBA,gBAAc,aAAc,OAAMA,gBAAc,qBAAqB;;EAEzG,MAAM,QAAQA,gBAAc;AAC5B,MAAI,CAAC,MAAO,QAAO;EACnB,MAAM,OAAO,IAAI,SAAS,MAAM,QAAQ,MAAM,YAAY,MAAM,WAAW;EAC3E,MAAM,WAAWA,gBAAc;AAC/B,MAAI,CAAC,SAAU,QAAO;EACtB,MAAM,eAAe,KAAK,UAAU,WAAW,EAAE;EACjD,IAAI,iBAAiB;AACrB,OAAK,IAAI,IAAI,GAAG,IAAI,cAAc,KAAK;GACtC,MAAM,iBAAiB,WAAW,IAAI,IAAI;GAC1C,MAAM,YAAY,KAAK,UAAU,iBAAiB,EAAE;AACpD,OAAI,KAAK,UAAU,WAAW,UAAU,KAAK,IAAI;AAChD,qBAAiB,WAAW;AAC5B;;;AAGF,MAAI,CAAC,eAAgB,QAAO;EAC5B,MAAM,YAAY,KAAK,UAAU,iBAAiB,GAAG;EACrD,IAAI,UAAU;AACd,OAAK,IAAI,MAAM,GAAG,MAAM,WAAW,OAAO;GACzC,MAAM,cAAc,iBAAiB,KAAK,MAAM;GAChD,MAAM,gBAAgB,KAAK,UAAU,YAAY;GACjD,MAAM,cAAc,KAAK,UAAU,cAAc,EAAE;GACnD,MAAM,eAAe,KAAK,UAAU,cAAc,EAAE;AACpD,OAAI,aAAa,iBAAiB,aAAa,aAAa;AAC3D,cAAU,gBAAgB,YAAY;AACtC;;;AAGF,MAAI,CAAC,QAAS,QAAO;EACrB,MAAM,aAAaA,gBAAc;EACjC,MAAM,aAAaA,gBAAc;AACjC,MAAI,CAAC,cAAc,CAAC,WAAY,QAAO;EACvC,MAAM,2BAA2B,KAAK,UAAU,aAAa,EAAE;EAC/D,MAAM,yBAAyB,KAAK,UAAU,aAAa,GAAG;EAC9D,MAAM,aAAa,aAAa;EAChC,IAAI,gBAAgB;AACpB,OAAK,IAAI,IAAI,GAAG,IAAI,wBAAwB,KAAK;GAChD,MAAM,cAAc,aAAa,IAAI;GACrC,MAAM,aAAa,KAAK,UAAU,YAAY;GAC9C,MAAM,YAAY,KAAK,UAAU,cAAc,EAAE;GACjD,MAAM,iBAAiB,KAAK,UAAU,cAAc,EAAE;AACtD,OAAI,WAAW,cAAc,WAAW,WAAW;AAClD,oBAAgB;KACf;KACA;KACA,gBAAgB,2BAA2B;KAC3C;AACD;;;AAGF,MAAI,CAAC,cAAe,QAAO;EAC3B,MAAM,gBAAgB,aAAa,cAAc;EACjD,MAAM,cAAc,KAAK,UAAU,cAAc;EACjD,MAAM,cAAc,KAAK,UAAU,gBAAgB,EAAE;EACrD,MAAM,kBAAkB,KAAK,UAAU,gBAAgB,EAAE;AACzD,MAAI,gBAAgB,KAAK,gBAAgB,GAAI,QAAO;EACpD,MAAM,MAAM,UAAU,cAAc;EACpC,MAAM,mBAAmB,gBAAgB;EACzC,MAAM,cAAc,KAAK,UAAU,mBAAmB,MAAM,EAAE;AAC9D,MAAI,KAAK,UAAU,oBAAoB,MAAM,KAAK,EAAE,GAAG,eAAe,EAAG,QAAO;EAChF,MAAM,sBAAsB,aAAa,kBAAkB;EAC3D,MAAM,SAAS,KAAK,SAAS,oBAAoB;EACjD,MAAM,QAAQ,KAAK,SAAS,sBAAsB,EAAE;EACpD,MAAM,UAAU,KAAK,UAAU,sBAAsB,EAAE;EACvD,MAAM,WAAW,sBAAsB;AACvC,SAAO;GACN,QAAQ,IAAI,WAAW,MAAM,QAAQ,MAAM,aAAa,UAAU,QAAQ;GAC1E;GACA;GACA;;CAEF,aAAa,aAAa,QAAQ,MAAM,UAAU;EACjD,MAAM,MAAM,GAAG,KAAK,GAAG;EACvB,IAAI,MAAMA,gBAAc,kBAAkB,IAAI,IAAI;AAClD,MAAI,IAAK,QAAO;EAChB,MAAM,SAAS,CAAC,CAAC,WAAW,4BAA4B,OAAO,WAAW,eAAe,OAAO,WAAW,aAAa;EACxH,MAAM,YAAY,KAAK,YAAY,EAAE;AACrC,MAAI,CAAC,UAAW,OAAM,IAAI,MAAM,eAAe;EAC/C,MAAM,kBAAkB;EACxB,MAAM,aAAa,KAAK,IAAI,IAAI,KAAK,KAAK,WAAW,MAAM,gBAAgB,CAAC;EAC5E,MAAM,UAAUA,gBAAc,cAAc,GAAG,MAAMA,gBAAc,kBAAkB,UAAU,GAAG;AAClG,MAAI,QAAQ;AACX,OAAI,CAAC,QAAS,OAAM,IAAI,MAAMA,gBAAc,cAAc,GAAG,qCAAqC,SAAS,4BAA4B,KAAK,qDAAqD;GACjM,MAAM,SAAS,MAAM;;IAEpB;GACD;GACA,MAAM,EAAE,MAAM,SAAS,MAAM,MAAM,OAAO,KAAK,QAAQ,OAAO,CAAC,CAAC,aAAa,CAAC,OAAO,YAAY,YAAY;IAC5G,KAAK;IACL,YAAY;KACX,GAAG;KACH,GAAG;KACH,GAAG;KACH,OAAO;KACP;IACD,QAAQ;IACR,CAAC,CAAC,KAAK,CAAC,SAAS,EAAE,mBAAmB,MAAM,CAAC;GAC9C,MAAM,SAAS,kBAAkB,IAAI,WAAW,KAAK,CAAC;AACtD,SAAM,OAAO,cAAc;IAC1B,OAAO,SAAS;IAChB,MAAM,CAAC,KAAK,OAAO,KAAK,OAAO;IAC/B,QAAQ;IACR,OAAO,gBAAgB,kBAAkB,gBAAgB;IACzD,CAAC;AACF,UAAO,MAAM,aAAa,EAAE,SAAS,KAAK,EAAE,QAAQ,EAAE,aAAa,KAAK,QAAQ,GAAG,EAAE,CAAC,KAAK,OAAO,KAAK,OAAO,CAAC;aACrG,SAAS;GACnB,MAAM,SAAS,MAAM,kBAAkB,IAAI,KAAK,CAAC,QAAQ,OAAO,EAAE,EAAE,MAAM,aAAa,CAAC,CAAC;GACzF,MAAM,SAAS,IAAI,gBAAgB,YAAY,WAAW;GAC1D,MAAM,MAAM,OAAO,WAAW,KAAK;AACnC,OAAI,KAAK;IACR,MAAM,MAAM,KAAK,IAAI,aAAa,OAAO,OAAO,aAAa,OAAO,OAAO;IAC3E,MAAM,IAAI,OAAO,QAAQ;IACzB,MAAM,IAAI,OAAO,SAAS;AAC1B,QAAI,wBAAwB;AAC5B,QAAI,UAAU,SAAS,aAAa,KAAK,IAAI,aAAa,KAAK,GAAG,GAAG,EAAE;;AAExE,UAAO,OAAO;AACd,SAAM,OAAO,cAAc;IAC1B,OAAO,SAAS;IAChB,MAAM,CAAC,YAAY,WAAW;IAC9B,QAAQ;IACR,OAAO,gBAAgB,kBAAkB,gBAAgB,WAAW,gBAAgB;IACpF,CAAC;AACF,UAAO,MAAM,2BAA2B,EAAE,QAAQ,QAAQ,EAAE;IAC3D,SAAS;IACT,oBAAoB;IACpB,EAAE,CAAC,YAAY,WAAW,CAAC;SACtB;GACN,MAAM,OAAO,KAAK,KAAK,aAAa,EAAE,GAAG;GACzC,MAAM,SAAS,IAAI,gBAAgB,MAAM,KAAK;GAC9C,MAAM,MAAM,OAAO,WAAW,KAAK;AACnC,OAAI,KAAK;AACR,QAAI,OAAO,GAAG,WAAW,gBAAgB;AACzC,QAAI,eAAe;AACnB,QAAI,YAAY;AAChB,QAAI,SAAS,MAAM,OAAO,GAAG,OAAO,EAAE;;AAEvC,SAAM,OAAO,cAAc;IAC1B,OAAO,SAAS;IAChB,MAAM,CAAC,MAAM,KAAK;IAClB,QAAQ;IACR,OAAO,gBAAgB,kBAAkB,gBAAgB,WAAW,gBAAgB;IACpF,CAAC;AACF,UAAO,MAAM,2BAA2B,EAAE,QAAQ,QAAQ,EAAE;IAC3D,SAAS;IACT,oBAAoB;IACpB,EAAE,CAAC,MAAM,KAAK,CAAC;;AAEjB,kBAAc,kBAAkB,IAAI,KAAK,IAAI;AAC7C,SAAO;;CAER,OAAO,QAAQ,YAAY,YAAY,QAAQ,aAAa,UAAU,cAAc;EACnF,MAAM,gBAAgB,EAAE,GAAG,gBAAgB,EAAE,EAAE;EAC/C,MAAM,UAAUA,gBAAc,gBAAgB,IAAI,WAAW;AAC7D,MAAI,SAAS,iBAAiB,UAAU,QAAQ,iBAAiB,aAAa,KAAK,KAAK,cAAc,SAAS,KAAK,GAAG;GACtH,MAAM,OAAO,QAAQ,cAAc;GACnC,MAAM,UAAU,MAAM,OAAO;GAC7B,MAAM,UAAU,MAAM,OAAO;AAC7B,iBAAc,OAAO,KAAK,IAAI,SAAS,KAAK,IAAI,SAAS,SAAS,CAAC;;EAEpE,MAAM,WAAW,gBAAgB,YAAY,YAAY,aAAa,cAAc;EACpF,MAAMhB,WAASgB,gBAAc,MAAM,IAAI,SAAS;AAChD,MAAIhB,UAAQ;AACX,OAAI,OAAQ,kBAAiB,QAAQA,SAAO;AAC5C,UAAOA;;AAER,MAAI,SAAS;GACZ,MAAM,SAAS,gBAAgB,WAAW;GAC1C,IAAI,gBAAgB;GACpB,IAAI,gBAAgB;AACpB,OAAI,QAAQ,iBAAiB,OAAO,KAAK,QAAQ,cAAc,CAAC,SAAS,EAAG,KAAI;AAC/E,QAAI,OAAO,QAAQ,iBAAiB,YAAY;KAC/C,MAAM,kBAAkB;MACvB,MAAM;MACN,GAAG;MACH;KACD,MAAM,QAAQ,QAAQ,aAAa,gBAAgB;AACnD,SAAI,UAAU,OAAO,MAAM,aAAa,cAAc,OAAO,MAAM,sBAAsB,aAAa;AACrG,sBAAgB;AAChB,sBAAgB;;;YAGV,GAAG;AACX,YAAQ,KAAK,+CAA+C,WAAW,eAAe,OAAO,IAAI,EAAE;;AAEpG,OAAI,kBAAkB,OAAO,cAAc,aAAa,cAAc,OAAO,cAAc,sBAAsB,YAAa,KAAI;IACjI,MAAM,YAAY,IAAI,cAAc;KACnC,WAAW;KACX;KACA,CAAC,CAAC,SAAS,UAAU,MAAM,cAAc;AAC1C,cAAU,gBAAgB;AAC1B,cAAU,SAAS;AACnB,cAAU,aAAa;AACvB,oBAAc,MAAM,IAAI,UAAU,UAAU;AAC5C,WAAO;YACC,GAAG;AACX,YAAQ,KAAK,yDAAyD,WAAW,IAAI,EAAE;;;EAGzF,MAAM,WAAWgB,gBAAc,MAAM,IAAI,WAAW;AACpD,MAAI,UAAU;AACb,YAAS,aAAa;AACtB,OAAI,OAAQ,kBAAiB,QAAQ,SAAS;;AAE/C,SAAO;;CAER,OAAO,aAAa,YAAY,MAAM;AACrC,OAAK,aAAa;AAClB,kBAAc,MAAM,IAAI,YAAY,KAAK;;CAE1C,OAAO,eAAe,QAAQ,MAAM;AACnC,mBAAiB,QAAQ,KAAK;;CAE/B,OAAO,YAAY,UAAU;AAC5B,kBAAc,UAAU,IAAI,SAAS;AACrC,eAAa;AACZ,mBAAc,UAAU,OAAO,SAAS;;;CAG1C,OAAO,SAAS,YAAY;EAC3B,MAAM,WAAWA,gBAAc,YAAY,IAAI,WAAW;AAC1D,MAAI,CAAC,SAAU,QAAO;AACtB,MAAI,KAAK,KAAK,GAAG,WAAW,KAAK;AAChC,mBAAc,YAAY,OAAO,WAAW;AAC5C,UAAO;;AAER,SAAO;;CAER,OAAO,YAAY,YAAY;AAC9B,MAAI,WAAY,iBAAc,YAAY,OAAO,WAAW;MACvD,iBAAc,YAAY,OAAO;;CAEvC,aAAa,gBAAgB,QAAQ,YAAY,SAAS,WAAW,UAAU;AAC9E,MAAIA,gBAAc,SAAS,WAAW,CAAE,OAAM,IAAI,MAAM,SAAS,WAAW,4BAA4B;EACxG,IAAI;EACJ,MAAMhB,WAASgB,gBAAc,MAAM,IAAI,WAAW;EAClD,IAAI,cAAc;AAClB,MAAI,OAAO,WAAW,aAAa;GAClC,MAAM,MAAM;AACZ,OAAI,8BAA8B,IAAI,+BAA+B,EAAE;AACvE,OAAI,SAAU,eAAc,GAAG,SAAS,QAAQ,KAAK,QAAQ;OACxD,eAAc,KAAK,QAAQ;AAChC,OAAI,4BAA4B,KAAK,YAAY;;AAElD,MAAI;AACH,OAAIhB,SAAQ,YAAWA;QAClB;IACJ,IAAI,gBAAgBgB,gBAAc,gBAAgB,IAAI,WAAW;AACjE,QAAI,cAAe,YAAW,MAAM;SAC/B;AACJ,sBAAiB,YAAY;AAC5B,UAAI;OACH,IAAI;OACJ,MAAM,SAAS,CAAC,CAAC,WAAW,4BAA4B,OAAO,WAAW,eAAe,OAAO,WAAW,aAAa;OACxH,MAAM,SAAS,QAAQ,WAAW,UAAU,IAAI,QAAQ,WAAW,WAAW;AAC9E,WAAI,UAAU,CAAC,QAAQ;QACtB,MAAM,OAAO,MAAM;;SAElB;;QAED,MAAM,SAAS,MAAM;;SAEpB;;QAED,MAAM,WAAW,EAAE;AACnB,YAAI,QAAQ,IAAI,UAAW,UAAS,KAAK,OAAO,QAAQ,QAAQ,IAAI,UAAU,CAAC;AAC/E,YAAI,QAAQ,IAAI,sBAAuB,UAAS,KAAK,OAAO,QAAQ,QAAQ,IAAI,sBAAsB,CAAC;QACvG,IAAI,aAAa,QAAQ,KAAK;AAC9B,aAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK;AAC3B,kBAAS,KAAK,OAAO,QAAQ,YAAY,eAAe,CAAC;SACzD,MAAM,SAAS,OAAO,QAAQ,WAAW;AACzC,aAAI,WAAW,WAAY;AAC3B,sBAAa;;QAEd,MAAM,aAAa,EAAE;QACrB,MAAM,gBAAgB,kBAAkB;AACvC,aAAI,CAAC,WAAW,SAAS,cAAc,CAAE,YAAW,KAAK,cAAc;;AAExE,YAAI,WAAW,CAAC,QAAQ,WAAW,SAAS,EAAE;SAC7C,IAAI,WAAW;AACf,aAAI,QAAQ,WAAW,UAAU,CAAE,KAAI;AACtC,qBAAW,IAAI,IAAI,QAAQ,CAAC;iBACrB;AACP,qBAAW,QAAQ,QAAQ,cAAc,GAAG;;AAE7C,sBAAa,SAAS;AACtB,sBAAa,OAAO,QAAQ,QAAQ,KAAK,EAAE,SAAS,CAAC;AACrD,cAAK,MAAM,OAAO,SAAU,cAAa,OAAO,QAAQ,KAAK,OAAO,SAAS,SAAS,CAAC,CAAC;;QAEzF,MAAM,cAAc,WAAW,QAAQ,SAAS,GAAG,CAAC,MAAM;QAC1D,MAAM,aAAa;SAClB;SACA,YAAY,QAAQ,MAAM,GAAG;SAC7B,YAAY,QAAQ,MAAM,IAAI;SAC9B;AACD,aAAK,MAAM,OAAO,SAAU,MAAK,MAAM,KAAK,YAAY;AACvD,sBAAa,OAAO,QAAQ,KAAK,GAAG,EAAE,MAAM,CAAC;AAC7C,sBAAa,OAAO,QAAQ,KAAK,GAAG,EAAE,MAAM,CAAC;;AAE9C,aAAK,MAAM,OAAO,UAAU;AAC3B,sBAAa,OAAO,QAAQ,KAAK,YAAY,CAAC;AAC9C,sBAAa,OAAO,QAAQ,KAAK,YAAY,CAAC;;QAE/C,IAAI,aAAa;AACjB,aAAK,MAAM,KAAK,WAAY,KAAI;AAC/B,sBAAa,MAAM,KAAK,SAAS,EAAE;AACnC,aAAI,cAAc,WAAW,SAAS,EAAG;gBAClC;AACR,YAAI,CAAC,WAAY,OAAM,IAAI,MAAM,oCAAoC,WAAW,KAAK,QAAQ,GAAG;AAChG,iBAAS,WAAW,OAAO,MAAM,WAAW,YAAY,WAAW,aAAa,WAAW,WAAW;cAChG;QACN,MAAM,WAAW,MAAM,MAAM,QAAQ;AACrC,YAAI,CAAC,SAAS,GAAI,OAAM,IAAI,MAAM,6BAA6B,QAAQ,IAAI,SAAS,aAAa;AACjG,iBAAS,MAAM,SAAS,aAAa;;OAEtC,MAAM,YAAY,YAAY,KAAK;OACnC,MAAM,OAAO,gBAAgB,IAAI,WAAW,OAAO,CAAC;OACpD,MAAM,YAAY,YAAY,KAAK;AACnC,uBAAc,gBAAgB,IAAI,YAAY,KAAK;OACnD,MAAM,YAAY,IAAI,cAAc;QACnC,WAAW;QACX,WAAW,aAAa;QACxB,CAAC,CAAC,SAAS,QAAQ,KAAK;OACzB,MAAM,eAAe,YAAY,KAAK;AACtC,gBAAS,8CAA8C,WAAW,0BAA0B,YAAY,WAAW,QAAQ,EAAE,CAAC,4BAA4B,eAAe,WAAW,QAAQ,EAAE,CAAC,kBAAkB,eAAe,WAAW,QAAQ,EAAE,CAAC,IAAI;AAC1P,iBAAU,aAAa;AACvB,uBAAc,MAAM,IAAI,YAAY,UAAU;AAC9C,uBAAc,UAAU,SAAS,MAAM;AACtC,YAAI;AACH,WAAE,WAAW;iBACL,GAAG;AACX,iBAAQ,MAAM,sCAAsC,EAAE;;SAEtD;AACF,cAAO;eACC,KAAK;AACb,uBAAc,YAAY,IAAI,YAAY,KAAK,KAAK,CAAC;AACrD,aAAM;gBACG;AACT,uBAAc,gBAAgB,OAAO,WAAW;;SAE9C;AACJ,qBAAc,gBAAgB,IAAI,YAAY,cAAc;AAC5D,gBAAW,MAAM;;;YAGV;AACT,OAAI,gBAAgB,QAAQ,OAAO,WAAW,aAAa;IAC1D,MAAM,MAAM;AACZ,QAAI,IAAI,6BAA6B;KACpC,MAAM,MAAM,IAAI,4BAA4B,QAAQ,YAAY;AAChE,SAAI,MAAM,GAAI,KAAI,4BAA4B,OAAO,KAAK,EAAE;;;;AAI/D,MAAI,QAAQ;GACX,MAAM,SAAS,CAAC,CAAC,SAAS;AAC1B,oBAAiB,QAAQ,SAAS;AAClC,OAAI,CAAC,UAAU,SAAS,UAAW,iBAAc,UAAU,SAAS,MAAM;AACzE,QAAI;AACH,OAAE,WAAW;aACL,GAAG;AACX,aAAQ,MAAM,sCAAsC,EAAE;;KAEtD;;AAEH,SAAO;;;;;;;CAOR,aAAa,qBAAqB,KAAK;AACtC,MAAI,OAAO,WAAW,eAAe,OAAO,WAAW,eAAe,OAAO,aAAa,YAAa;AACvG,kBAAc,eAAe;AAC7B,MAAIA,gBAAc,0BAA0B;AAC3C,SAAMA,gBAAc;AACpB;;AAED,kBAAc,4BAA4B,YAAY;AACrD,OAAI;IACH,MAAM,QAAQ,MAAM,OAAO,KAAK,qBAAqB;IACrD,IAAI,WAAW,MAAM,MAAM,MAAM,IAAI;AACrC,QAAI,CAAC,UAAU;KACd,MAAM,kBAAkB,MAAM,MAAM,IAAI;AACxC,SAAI,CAAC,gBAAgB,GAAI,OAAM,IAAI,MAAM,mCAAmC,IAAI,IAAI,gBAAgB,aAAa;AACjH,WAAM,MAAM,IAAI,KAAK,gBAAgB,OAAO,CAAC;AAC7C,gBAAW;;IAEZ,MAAM,cAAc,MAAM,SAAS,aAAa;AAChD,oBAAc,oBAAoB,IAAI,WAAW,YAAY,CAAC;IAC9D,MAAM,aAAa,MAAM,IAAI,SAAS,oBAAoB,YAAY,CAAC,MAAM;AAC7E,aAAS,MAAM,IAAI,WAAW;AAC9B,UAAM,SAAS,MAAM;AACrB,aAAS,qEAAqE;AAC9E,oBAAc,UAAU,SAAS,MAAM;AACtC,SAAI;AACH,QAAE,mBAAmB;cACb,GAAG;AACX,cAAQ,MAAM,sCAAsC,EAAE;;MAEtD;YACM,KAAK;AACb,YAAQ,KAAK,sDAAsD,IAAI;AACvE,oBAAc,2BAA2B;AACzC,UAAM;;MAEJ;AACJ,QAAMA,gBAAc;;CAErB,OAAO,UAAU;AAChB,OAAK,MAAM,QAAQA,gBAAc,MAAM,QAAQ,EAAE;AAChD,QAAK,WAAW,SAAS;AACzB,QAAK,UAAU,SAAS;;AAEzB,kBAAc,MAAM,OAAO;AAC3B,kBAAc,YAAY,OAAO;AACjC,OAAK,MAAM,OAAOA,gBAAc,kBAAkB,QAAQ,CAAE,KAAI,SAAS;AACzE,kBAAc,kBAAkB,OAAO;AACvC,kBAAc,kBAAkB;AAChC,kBAAc,uBAAuB;AACrC,kBAAc,2BAA2B;;;;;;;;;;;;AAe3C,MAAM,cAAc;;AAEpB,MAAM,YAAY;;;;;AAKlB,MAAM,gBAAgB;AACtB,MAAM,cAAc;AACpB,IAAI,eAAe;AACnB,SAAS,OAAO;AACf,4CAA8B;AAC9B,QAAO;;;AAGR,MAAM,iBAAiB;CACtB,GAAG;CACH,GAAG;CACH,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,KAAK;CACL,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ;AACD,SAAS,WAAW,MAAM,WAAW;CACpC,MAAM,IAAI,MAAM;CAChB,IAAI,WAAW;AACf,KAAI,kBAAkB,KAAK,KAAK,EAAE;EACjC,IAAI,MAAM;AACV,OAAK,MAAM,MAAM,MAAM;AACtB,OAAI,GAAG,WAAW,GAAG;AACpB,WAAO;AACP;;GAED,MAAM,QAAQ,eAAe,EAAE,oBAAoB,GAAG,KAAK;AAC3D,UAAO,QAAQ;;AAEhB,aAAW;;CAEZ,MAAM,SAAS,EAAE,mBAAmB,UAAU,cAAc,SAAS,KAAK,IAAI,UAAU;AACxF,QAAO;EACN,QAAQ,OAAO;EACf,WAAW,OAAO,WAAW,IAAI,UAAU,cAAc,QAAQ,IAAI;EACrE;;AAEF,MAAM,oBAAoB,OAAO,SAAS,eAAe,OAAO,KAAK,cAAc,aAAa,IAAI,KAAK,UAAU,KAAK,GAAG,EAAE,aAAa,YAAY,CAAC,GAAG;AAC1J,SAAS,iBAAiB,MAAM;CAC/B,MAAM,MAAM,EAAE;AACd,KAAI,mBAAmB;AACtB,OAAK,MAAM,KAAK,kBAAkB,QAAQ,KAAK,CAAE,KAAI,KAAK;GACzD,MAAM,EAAE;GACR,OAAO,EAAE;GACT,CAAC;AACF,SAAO;;CAER,IAAI,IAAI;AACR,MAAK,MAAM,MAAM,MAAM;AACtB,MAAI,KAAK;GACR,MAAM;GACN,OAAO;GACP,CAAC;AACF,OAAK,GAAG;;AAET,QAAO;;AAER,MAAM,4BAA4B,IAAI,SAAS;AAC/C,IAAI,eAAe;AACnB,SAAS,SAAS,GAAG;CACpB,IAAI,KAAK,UAAU,IAAI,EAAE;AACzB,KAAI,OAAO,KAAK,GAAG;AAClB,OAAK;AACL,YAAU,IAAI,GAAG,GAAG;;AAErB,QAAO;;;AAGR,SAAS,aAAa,MAAM;AAC3B,QAAO,SAAS,KAAK;;AAEtB,MAAM,kBAAkB;AACxB,MAAM,6BAA6B,IAAI,KAAK;AAC5C,SAAS,qBAAqB,MAAM;CACnC,MAAM,MAAM,kBAAkB,KAAK,IAAI,YAAY,IAAI,KAAK;AAC5D,KAAI,IAAK,QAAO;AAChB,KAAI,CAAC,KAAK,WAAY,QAAO;AAC7B,QAAO,WAAW,OAAO,IAAI,+BAA+B,GAAG,IAAI,KAAK,WAAW,IAAI;;AAExF,SAAS,OAAO,MAAM;AACrB,QAAO,KAAK,WAAW,IAAI,GAAG,IAAI,KAAK,QAAQ,IAAI,EAAE;;;AAGtD,SAAS,kBAAkB,MAAM,WAAW;CAC3C,IAAI,KAAK,KAAK,WAAW,IAAI,UAAU;AACvC,KAAI,CAAC,MAAM,cAAc,iBAAiB,MAAM,CAAC,UAAU,CAAC,CAAE,MAAK,KAAK,WAAW,IAAI,UAAU;AACjG,QAAO,MAAM,OAAO,KAAK;;;AAG1B,SAAS,YAAY,IAAI;AACxB,QAAO,OAAO,OAAO,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,SAAS,MAAM,SAAS,OAAO;;AAE/I,SAAS,gBAAgB,MAAM;AAC9B,MAAK,MAAM,MAAM,KAAM,KAAI,CAAC,YAAY,GAAG,YAAY,EAAE,IAAI,EAAE,CAAE,QAAO;AACxE,QAAO,KAAK,SAAS;;;AAGtB,SAAS,OAAO,MAAM,MAAM;CAC3B,MAAM,MAAM,EAAE;CACd,IAAI,SAAS;AACb,MAAK,MAAM,MAAM,MAAM;EACtB,MAAM,YAAY,GAAG,YAAY,EAAE,IAAI;AACvC,MAAI,YAAY,UAAU,EAAE;AAC3B,aAAU,GAAG;AACb;;EAED,MAAM,KAAK,kBAAkB,MAAM,UAAU;AAC7C,MAAI,GAAI,KAAI,KAAK;GAChB;GACA;GACA,KAAK,SAAS,GAAG;GACjB,UAAU,GAAG;GACb,SAAS;GACT,SAAS;GACT,CAAC;AACF,YAAU,GAAG;;AAEd,QAAO;;AAER,MAAM,2BAA2B;AACjC,MAAM,aAAa;;;;;;;;;;;AAWnB,SAAS,qBAAqB,QAAQ,MAAM,KAAK,WAAW;CAC3D,MAAM,YAAY;AAClB,KAAI,OAAO,OAAO,WAAW,WAAY,QAAO;CAChD,IAAI,QAAQ;AACZ,KAAI,OAAO,UAAU,oBAAoB,YAAY;EACpD,MAAM,OAAO,UAAU,gBAAgB,KAAK;EAC5C,MAAM,QAAQ,MAAM,KAAK,KAAK;EAC9B,MAAM,QAAQ,EAAE;EAChB,IAAI,IAAI;AACR,OAAK,MAAM,OAAO,MAAM;AACvB,UAAO,IAAI,MAAM,UAAU,yBAAyB,KAAK,MAAM,GAAG,CAAE;GACpE,MAAM,MAAM,EAAE;AACd,OAAI,IAAI,MAAM,OAAQ,KAAI,KAAK,MAAM,KAAK,YAAY,EAAE,IAAI,EAAE;AAC9D,UAAO,IAAI,MAAM,UAAU,yBAAyB,KAAK,MAAM,GAAG,CAAE,KAAI,KAAK,MAAM,KAAK,YAAY,EAAE,IAAI,EAAE;GAC5G,MAAM,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,eAAe,IAAI,CAAC,EAAE,KAAK;IAC1E,YAAY;IACZ,QAAQ,IAAI,SAAS,KAAK,IAAI,OAAO,OAAO,WAAW,KAAK,OAAO,cAAc,GAAG,CAAC,CAAC;IACtF,YAAY,IAAI,SAAS;IACzB,CAAC;AACF,SAAM,KAAK,KAAK;;AAEjB,UAAQ;;CAET,MAAM,SAAS,UAAU,eAAe;CACxC,IAAI,QAAQ;CACZ,MAAM,kBAAkB,QAAQ;AAChC,KAAI,UAAU,OAAO,oBAAoB,WAAY,QAAO,UAAU,WAAW;AAChF,UAAQ,KAAK,aAAa,KAAK,WAAW,OAAO,GAAG;AACpD,SAAO,gBAAgB,KAAK,KAAK;;CAElC,IAAI;AACJ,KAAI;AACH,QAAM,OAAO,OAAO,OAAO,YAAY,EAAE,GAAG;GAC3C,MAAM;GACN,MAAM;GACN,EAAE,KAAK,GAAG,KAAK,GAAG,MAAM,QAAQ,MAAM;SAChC;AACP,SAAO;WACE;AACT,MAAI,UAAU,iBAAiB;AAC9B,UAAO,OAAO;AACd,OAAI,OAAO,YAAY,gBAAiB,QAAO,UAAU;;;CAG3D,MAAM,SAAS,IAAI,OAAO,OAAO;CACjC,MAAM,YAAY,IAAI,UAAU,OAAO;AACvC,KAAI,KAAK;AACR,SAAO,SAAS;AAChB,YAAU,SAAS;;CAEpB,MAAM,WAAW;AACjB,QAAO;EACN;EACA,YAAY,YAAY,SAAS,WAAW,OAAO,SAAS,SAAS,KAAK,SAAS,KAAK,cAAc,EAAE,CAAC,GAAG,OAAO,KAAK,QAAQ,IAAI,cAAc,EAAE,CAAC;EACrJ;EACA;;AAEF,SAAS,SAAS,MAAM,MAAM,KAAK,WAAW;CAC7C,MAAM,SAAS,qBAAqB,KAAK;AACzC,KAAI,CAAC,UAAU,OAAO,OAAO,WAAW,WAAY,QAAO,OAAO,MAAM,KAAK;CAC7E,MAAM,MAAM,GAAG,SAAS,KAAK,CAAC,GAAG,MAAM,IAAI,EAAE,GAAG,YAAY,IAAI,EAAE,GAAG;CACrE,MAAM,MAAM,WAAW,IAAI,IAAI;AAC/B,KAAI,IAAK,QAAO;CAChB,MAAM,SAAS,qBAAqB,QAAQ,MAAM,KAAK,UAAU;AACjE,KAAI,CAAC,OAAQ,QAAO,OAAO,MAAM,KAAK;CACtC,MAAM,EAAE,QAAQ,YAAY,UAAU,cAAc;CACpD,MAAM,SAAS,EAAE;CACjB,MAAM,YAAY,EAAE;CACpB;EACC,IAAI,IAAI;AACR,OAAK,MAAM,MAAM,MAAM;AACtB,UAAO,KAAK,GAAG,YAAY,EAAE,IAAI,EAAE;AACnC,aAAU,KAAK,EAAE;AACjB,QAAK,GAAG;;AAET,YAAU,KAAK,EAAE;;CAElB,MAAM,sBAAsB,IAAI,KAAK;AACrC,MAAK,MAAM,OAAO,OAAQ,KAAI,IAAI,IAAI,GAAG;AACzC,eAAc,aAAa,MAAM,IAAI;CACrC,MAAM,MAAM,EAAE;CACd,IAAI,SAAS;CACb,IAAI,YAAY;AAChB,MAAK,IAAI,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;EACvC,MAAM,MAAM,OAAO;EACnB,MAAM,MAAM,SAAS;EACrB,MAAM,MAAM,UAAU;EACtB,MAAM,IAAI,IAAI;EACd,IAAI,QAAQ;EACZ,IAAI,QAAQ;AACZ,MAAI,IAAI,GAAG;AACV,WAAQ,KAAK,IAAI,QAAQ,OAAO,SAAS,EAAE;AAC3C,QAAK,IAAI,IAAI,QAAQ,IAAI,KAAK,IAAI,OAAO,QAAQ,SAAS,EAAE,EAAE,IAAK,KAAI,OAAO,OAAO,IAAI,IAAI;AAC5F,YAAQ;AACR;;AAED,WAAQ,KAAK,IAAI,GAAG,OAAO,SAAS,MAAM;AAC1C,YAAS,KAAK,IAAI,QAAQ,QAAQ,MAAM;AACxC,eAAY;;EAEb,MAAM,KAAK,KAAK,QAAQ,IAAI,IAAI,GAAG,KAAK,IAAI,IAAI,KAAK,WAAW,IAAI,IAAI,GAAG,GAAG,KAAK,MAAM,OAAO,KAAK;AACrG,MAAI,CAAC,GAAI;AACT,MAAI,KAAK;GACR;GACA,QAAQ,UAAU,KAAK,IAAI,GAAG,MAAM,KAAK;GACzC,KAAK,UAAU,KAAK,IAAI,GAAG,MAAM,GAAG,KAAK,IAAI,GAAG,MAAM,KAAK,KAAK;GAChE,UAAU,IAAI;GACd,SAAS,IAAI;GACb,SAAS,IAAI;GACb,CAAC;;AAEH,KAAI,WAAW,QAAQ,iBAAiB;EACvC,MAAM,QAAQ,WAAW,MAAM,CAAC,MAAM,CAAC;AACvC,MAAI,UAAU,KAAK,EAAG,YAAW,OAAO,MAAM;;AAE/C,YAAW,IAAI,KAAK,IAAI;AACxB,QAAO;;;;;;AAMR,SAAS,eAAe,UAAU,UAAU,EAAE,EAAE;CAC/C,MAAM,YAAY,QAAQ,aAAa;CACvC,MAAM,YAAY,QAAQ,aAAa;CACvC,IAAI,OAAO;CACX,MAAM,UAAU,EAAE;AAClB,MAAK,MAAM,OAAO,UAAU;AAC3B,UAAQ,IAAI;AACZ,OAAK,IAAI,IAAI,GAAG,IAAI,IAAI,KAAK,QAAQ,IAAK,SAAQ,KAAK,IAAI,MAAM;;AAElE,KAAI,KAAK,WAAW,EAAG,QAAO;EAC7B,UAAU,EAAE;EACZ,WAAW,cAAc,QAAQ,IAAI;EACrC;CACD,MAAM,WAAW,cAAc,SAAS,UAAU,KAAK,KAAK,GAAG,WAAW,MAAM,UAAU,GAAG;CAC7F,MAAM,SAAS,UAAU,UAAU;CACnC,MAAM,WAAW,MAAM,SAAS,OAAO,KAAK;CAC5C,MAAM,YAAY,UAAU,aAAa;CACzC,IAAI,YAAY;AAChB,KAAI,QAAQ;EACX,MAAM,IAAI,MAAM;EAChB,IAAI,WAAW;AACf,OAAK,IAAI,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;GACrC,MAAM,KAAK,KAAK;AAChB,eAAY,OAAO,KAAK,IAAI,EAAE,qBAAqB,GAAG,IAAI,KAAK;;AAEhE,cAAY;;CAEb,MAAM,YAAY,iBAAiB,KAAK;CACxC,MAAM,aAAa,IAAI,WAAW,KAAK,OAAO;AAC9C,MAAK,IAAI,MAAM,GAAG,MAAM,UAAU,QAAQ,OAAO;EAChD,MAAM,EAAE,OAAO,MAAM,OAAO,UAAU;AACtC,OAAK,IAAI,IAAI,GAAG,IAAI,GAAG,QAAQ,IAAK,YAAW,QAAQ,KAAK;;CAE7D,MAAM,kBAAkB,UAAU,KAAK,QAAQ,QAAQ,UAAU,SAAS,YAAY,KAAK,IAAI,KAAK,CAAC;CACrG,MAAM,WAAW,UAAU,UAAU,EAAE,CAAC;CACxC,MAAM,UAAU,IAAI,WAAW,UAAU,OAAO;AAChD,MAAK,IAAI,MAAM,GAAG,MAAM,UAAU,QAAQ,MAAO,SAAQ,OAAO;CAChE,IAAI,WAAW;CACf,MAAM,YAAY,QAAQ;AACzB,MAAI,OAAO,SAAU;EACrB,MAAM,QAAQ,QAAQ;EACtB,MAAM,UAAU,UAAU,MAAM,UAAU,IAAI;EAC9C,MAAM,OAAO,QAAQ,SAAS,GAAG,OAAO;AACxC,OAAK,MAAM,MAAM,SAAS,MAAM,MAAM,SAAS,KAAK,UAAU,EAAE;GAC/D,MAAM,KAAK,WAAW,GAAG;GACzB,MAAM,KAAK,WAAW,KAAK,IAAI,IAAI,KAAK,SAAS,EAAE;GACnD,MAAM,KAAK,WAAW,KAAK,IAAI,WAAW,GAAG,MAAM,GAAG,KAAK,SAAS,EAAE;AACtE,YAAS,IAAI,KAAK,GAAG;AACrB,QAAK,IAAI,MAAM,KAAK,GAAG,OAAO,IAAI,MAAO,SAAQ,OAAO,QAAQ;;;AAGlE,MAAK,IAAI,MAAM,GAAG,MAAM,UAAU,QAAQ,OAAO;EAChD,MAAM,QAAQ,UAAU,KAAK;AAC7B,MAAI,gBAAgB,MAAM;AACzB,YAAS,MAAM;AACf,cAAW,QAAQ,UAAU,KAAK,KAAK;AACvC;;AAED,MAAI,QAAQ,UAAU;GACrB,MAAM,OAAO,QAAQ;AACrB,OAAI,QAAQ,OAAO,SAAS,QAAQ,MAAM,QAAQ,QAAQ,OAAO,aAAa,QAAQ,MAAM,YAAY,QAAQ,MAAM,KAAK,QAAQ,KAAK,EAAE;AACzI,aAAS,MAAM;AACf,eAAW;;;;AAId,UAAS,KAAK,OAAO;CACrB,MAAM,WAAW,EAAE;AACnB,MAAK,IAAI,MAAM,GAAG,MAAM,UAAU,SAAS;EAC1C,IAAI,MAAM,MAAM;AAChB,SAAO,MAAM,UAAU,UAAU,QAAQ,SAAS,IAAK;EACvD,MAAM,QAAQ,UAAU,KAAK;EAC7B,MAAM,OAAO,MAAM,UAAU,SAAS,UAAU,KAAK,QAAQ,KAAK;EAClE,MAAM,cAAc,KAAK,MAAM,OAAO,KAAK;EAC3C,MAAM,QAAQ,QAAQ;EACtB,MAAM,QAAQ,QAAQ,MAAM;EAC5B,MAAM,OAAO,QAAQ,OAAO;EAC5B,MAAM,QAAQ,MAAM,WAAW,MAAM,KAAK;EAC1C,MAAM,UAAU,gBAAgB;EAChC,MAAM,UAAU,YAAY,KAAK,YAAY;AAC7C,MAAI,gBAAgB,YAAY,EAAE;AACjC,SAAM;AACN;;EAED,MAAM,UAAU,EAAE;AAClB,OAAK,IAAI,IAAI,KAAK,IAAI,KAAK,IAAK,SAAQ,KAAK,GAAG,SAAS,GAAG;EAC5D,MAAM,SAAS,MAAM,QAAQ,OAAO,CAAC,SAAS,GAAG;EACjD,MAAM,UAAU,cAAc,KAAK,YAAY,GAAG,IAAI,MAAM;EAC5D,IAAI,eAAe;EACnB,MAAM,SAAS,EAAE;AACjB,MAAI,QAAS,gBAAe,MAAM;OAC7B;GACJ,MAAM,OAAO,MAAM,UAAU;AAC7B,QAAK,MAAM,MAAM,QAAQ;AACxB,WAAO,KAAK;KACX,IAAI,GAAG;KACP,IAAI,OAAO,eAAe,GAAG,UAAU;KACvC,IAAI,CAAC,GAAG,UAAU;KAClB,CAAC;AACF,oBAAgB,GAAG,WAAW;;;EAGhC,MAAM,WAAW,MAAM,UAAU;AACjC,WAAS,KAAK;GACb,MAAM;GACN;GACA;GACA;GACA;GACA;GACA;GACA,SAAS,eAAe;GACxB;GACA;GACA,QAAQ,WAAW;GACnB,CAAC;AACF,QAAM;;AAEP,QAAO;EACN;EACA;EACA;;;AAGF,MAAM,8BAA8B,IAAI,SAAS;AACjD,MAAM,4BAA4B,IAAI,SAAS;;AAE/C,IAAI,iBAAiB,cAAc,IAAI;CACtC,YAAY,QAAQ;AACnB,SAAO;AACP,OAAK,SAAS;;CAEf,IAAI,IAAI;EACP,IAAID,WAAS,MAAM,IAAI,GAAG;AAC1B,MAAI,CAACA,UAAQ;GACZ,IAAI,eAAe;AACnB,OAAI;AACH,mBAAe,KAAK,OAAO,WAAW,GAAG,EAAE,gBAAgB;WACpD;AACP,mBAAe;;AAEhB,cAAS;IACR,WAAW;IACX,SAAS;IACT,OAAO;IACP,QAAQ;IACR;IACA,UAAU;IACV,UAAU;IACV,WAAW;IACX,UAAU;IACV,UAAU;IACV,gBAAgB;IAChB,gBAAgB;IAChB;AACD,SAAM,IAAI,IAAIA,SAAO;;AAEtB,SAAOA;;CAER,IAAI,IAAI;AACP,SAAO,KAAK,IAAI,GAAG,KAAK,KAAK;;;AAG/B,SAAS,SAAS,QAAQ;CACzB,IAAI,OAAO,UAAU,IAAI,OAAO;AAChC,KAAI,CAAC,MAAM;EACV,MAAM,SAAS,IAAI,eAAe,OAAO;AACzC,SAAO;GACN,YAAY,IAAI,IAAI,CAAC,CAAC,IAAI,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC;GAC1C;GACA,WAAW;GACX,UAAU;GACV,UAAU,OAAO,UAAU;GAC3B,WAAW,OAAO,WAAW;GAC7B,SAAS,OAAO,WAAW;GAC3B,YAAY,OAAO,cAAc;GACjC;AACD,YAAU,IAAI,QAAQ,KAAK;AAC3B,cAAY,IAAI,MAAM,OAAO;;AAE9B,QAAO;;;;;;;AAOR,SAAS,kBAAkB,QAAQ,MAAM,UAAU,EAAE,EAAE;CACtD,MAAM,OAAO,SAAS,OAAO;CAC7B,MAAM,gBAAgB,QAAQ,iBAAiB;CAC/C,MAAM,IAAI,eAAe,CAAC;EACzB;EACA,OAAO;GACN;GACA,UAAU,KAAK;GACf;GACA;EACD,CAAC,EAAE;EACH,WAAW,QAAQ;EACnB,WAAW,QAAQ,aAAa,kBAAkB;EAClD,OAAO;EACP,CAAC;CACF,MAAM,OAAO,UAAU,EAAE,UAAU,EAAE,UAAU;CAC/C,MAAM,SAAS,EAAE;CACjB,IAAI,QAAQ;AACZ,MAAK,MAAM,EAAE,SAAS,OAAO,KAAK,UAAU;AAC3C,UAAQ,IAAI,QAAQ;AACpB,OAAK,MAAM,OAAO,QAAQ,QAAQ;AACjC,OAAI,IAAI,GAAG,YAAY,KAAK,EAAG;AAC/B,UAAO,KAAK;IACX,SAAS,IAAI,GAAG;IAChB,GAAG,IAAI,IAAI;IACX,GAAG,CAAC,IAAI;IACR,CAAC;;;AAGJ,QAAO;EACN;EACA;EACA,WAAW,EAAE;EACb;;;;;;;AAOF,SAAS,WAAW,UAAU,UAAU;CACvC,MAAM,QAAQ,EAAE;CAChB,IAAI,OAAO,EAAE;CACb,IAAI,YAAY;CAChB,IAAI,IAAI;AACR,QAAO,IAAI,SAAS,QAAQ;EAC3B,MAAM,UAAU,SAAS,GAAG;EAC5B,IAAI,IAAI;EACR,IAAI,aAAa;AACjB,SAAO,IAAI,SAAS,UAAU,SAAS,GAAG,YAAY,SAAS;AAC9D,iBAAc,SAAS,GAAG;AAC1B;;EAED,MAAM,QAAQ,SAAS,MAAM,GAAG,EAAE;AAClC,MAAI;AACJ,MAAI,SAAS;AACZ,OAAI,KAAK,WAAW,EAAG;AACvB,QAAK,KAAK,GAAG,MAAM;AACnB,gBAAa;AACb;;EAED,MAAM,WAAW,MAAM,MAAM,SAAS,GAAG;EACzC,MAAM,cAAc,WAAW,IAAI,aAAa,WAAW;AAC3D,MAAI,YAAY,KAAK,YAAY,cAAc,UAAU;AACxD,SAAM,KAAK,KAAK;AAChB,UAAO,EAAE;AACT,eAAY;;AAEb,OAAK,KAAK,GAAG,MAAM;AACnB,eAAa;;AAEd,OAAM,KAAK,KAAK;AAChB,QAAO;;;;;;AAMR,SAAS,UAAU,MAAM,WAAW;CACnC,MAAM,IAAI,KAAK;CACf,MAAM,SAAS,IAAI,MAAM,EAAE;CAC3B,IAAI,WAAW;CACf,IAAI,SAAS,OAAO;CACpB,IAAI,WAAW;AACf,QAAO,WAAW,KAAK,KAAK,WAAW,GAAG,QAAS;AACnD,MAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK;EAC3B,MAAM,QAAQ,KAAK,WAAW,YAAY,KAAK,GAAG;AAClD,SAAO,KAAK;AACZ,MAAI,QAAQ,SAAU,YAAW;AACjC,MAAI,QAAQ,KAAK,QAAQ,OAAQ,UAAS;;CAE3C,MAAM,QAAQ,MAAM,KAAK,EAAE,QAAQ,GAAG,GAAG,GAAG,MAAM,EAAE;AACpD,MAAK,IAAI,QAAQ,UAAU,SAAS,UAAU,QAAQ,GAAG,SAAS;EACjE,IAAI,IAAI;AACR,SAAO,IAAI,GAAG;AACb,OAAI,OAAO,MAAM,MAAM,OAAO;AAC7B;AACA;;GAED,IAAI,IAAI;AACR,UAAO,IAAI,KAAK,OAAO,MAAM,OAAO,MAAO;GAC3C,MAAM,QAAQ,MAAM,MAAM,GAAG,EAAE,CAAC,SAAS;AACzC,QAAK,IAAI,IAAI,GAAG,IAAI,MAAM,QAAQ,IAAK,OAAM,IAAI,KAAK,MAAM;AAC5D,OAAI;;;CAGN,MAAM,WAAW,EAAE;CACnB,IAAI,IAAI;CACR,IAAI,UAAU,OAAO;CACrB,IAAI,WAAW,OAAO;AACtB,MAAK,MAAM,OAAO,OAAO;EACxB,MAAM,IAAI,KAAK;AACf,WAAS,KAAK;GACb,SAAS;GACT;GACA,CAAC;AACF,MAAI,CAAC,EAAE,SAAS;AACf,aAAU,KAAK,IAAI,SAAS,IAAI,EAAE,SAAS;AAC3C,cAAW,KAAK,IAAI,UAAU,IAAI,EAAE,OAAO;;AAE5C,OAAK,EAAE;;AAER,KAAI,UAAU,UAAU;AACvB,YAAU;AACV,aAAW;;AAEZ,QAAO;EACN;EACA;EACA;EACA;;;AAGF,SAAS,aAAa,OAAO,WAAW;CACvC,MAAM,OAAO,YAAY,OAAO;AAChC,KAAI,UAAU,QAAS,QAAO,MAAM,UAAU;AAC9C,KAAI,UAAU,MAAO,QAAO,MAAM,SAAS;AAC3C,QAAO;;;AAGR,SAAS,YAAY,MAAM,OAAO,OAAO;AACxC,KAAI,UAAU,SAAU,SAAQ,SAAS,KAAK,WAAW,KAAK,YAAY,IAAI,KAAK;AACnF,KAAI,UAAU,QAAS,QAAO,QAAQ,KAAK;AAC3C,QAAO,CAAC,KAAK;;AAKd,MAAM,8BAA8B,IAAI,KAAK;AAC7C,MAAM,mBAAmB;AACzB,SAAS,YAAY,KAAK,QAAQ;AACjC,KAAI,YAAY,QAAQ,kBAAkB;EACzC,MAAM,WAAW,YAAY,MAAM,CAAC,MAAM,CAAC;AAC3C,MAAI,SAAU,aAAY,OAAO,SAAS;;AAE3C,aAAY,IAAI,KAAK,OAAO;AAC5B,QAAO;;;AAGR,SAAS,aAAa,GAAG;AACxB,KAAI,KAAK,OAAO,MAAM,YAAY,SAAS,KAAK,OAAO,EAAE,QAAQ,WAAY,QAAO,EAAE,KAAK;AAC3F,QAAO;;;;;;AAMR,SAAS,cAAc,OAAO,SAAS;CACtC,MAAM,0BAA0B,IAAI,KAAK;CACzC,IAAI,YAAY;CAChB,IAAI,YAAY;AAChB,MAAK,IAAI,YAAY,GAAG,YAAY,MAAM,QAAQ,aAAa;EAC9D,IAAI,SAAS;AACb,OAAK,MAAM,KAAK,MAAM,YAAY;AACjC,OAAI,CAAC,EAAE,QAAS,KAAI,EAAE,SACrB;QAAI,QAAQ;AACX;AACA,cAAS;;SAEJ,UAAS;GAChB,MAAM,YAAY,YAAY,SAAS,YAAY,YAAY,SAAS,YAAY;AACpF,WAAQ,IAAI,GAAG;IACd;IACA;IACA;IACA,CAAC;AACF,OAAI,EAAE,WAAW,EAAE,OAAO,SAAS,EAAG;;AAEvC,MAAI,OAAQ;;AAEb,QAAO;EACN;EACA,OAAO;EACP,OAAO;EACP;;;AAGF,SAAS,aAAa,SAAS,eAAe;AAC7C,QAAO,YAAY,UAAU,kBAAkB;;AAEhD,IAAI,eAAe,MAAME,eAAa;CACrC,OAAO,OAAO,MAAM,MAAM,UAAU,eAAe,YAAY,UAAU,QAAQ,QAAQ,UAAU,QAAQ,YAAY,aAAa,OAAO,YAAY,QAAQ;EAC9J,MAAM,UAAU,aAAa,KAAK;AAClC,MAAI,SAAS,MAAM,SAAS,GAAG;GAC9B,MAAM,WAAW,MAAM,KAAK,MAAM,GAAG,OAAO,EAAE,SAAS,WAAW,EAAE,OAAO,GAAG,GAAG,EAAE,cAAc,GAAG,GAAG,EAAE,cAAc,GAAG,GAAG,EAAE,YAAY,GAAG,GAAG,EAAE,QAAQ,GAAG,GAAG,EAAE,iBAAiB,GAAG,GAAG,EAAE,iBAAiB,KAAK,CAAC,KAAK,IAAI;GAC5N,MAAM,aAAa,GAAG,KAAK,GAAG,QAAQ,GAAG,SAAS,GAAG,cAAc,GAAG,WAAW,GAAG,SAAS,GAAG,MAAM,GAAG,QAAQ,GAAG,cAAc,GAAG,GAAG,UAAU,GAAG;GACrJ,MAAMC,aAAW,YAAY,IAAI,WAAW;AAC5C,OAAIA,WAAU,QAAOA;AACrB,UAAO,YAAY,YAAYD,eAAa,YAAY,OAAO,MAAM,UAAU,eAAe,YAAY,UAAU,OAAO,SAAS,YAAY,UAAU,CAAC;;AAE5J,MAAI,YAAa,QAAOA,eAAa,aAAa,MAAM,MAAM,UAAU,eAAe,aAAa,SAAS,UAAU;EACvH,MAAM,WAAW,GAAG,KAAK,GAAG,QAAQ,GAAG,SAAS,GAAG,cAAc,GAAG,WAAW,GAAG,SAAS,GAAG,MAAM,GAAG,QAAQ,GAAG,cAAc,GAAG,GAAG;EACtI,MAAMjB,WAAS,YAAY,IAAI,SAAS;AACxC,MAAIA,SAAQ,QAAOA;EACnB,MAAM,QAAQ;GACb;GACA;GACA;GACA;EACD,MAAM,YAAY,aAAa,SAAS,cAAc;EACtD,MAAM,QAAQ,EAAE;EAChB,IAAI,aAAa;AACjB,OAAK,MAAM,aAAa,KAAK,MAAM,KAAK,EAAE;GACzC,MAAM,SAAS,eAAe,CAAC;IAC9B,MAAM;IACN;IACA,CAAC,EAAE;IACH;IACA;IACA,CAAC;AACF,QAAK,MAAM,YAAY,WAAW,OAAO,UAAU,SAAS,CAAE,OAAM,KAAK;IACxE;IACA,WAAW,OAAO;IAClB;IACA,CAAC;AACF,iBAAc,UAAU,SAAS;;EAElC,MAAM,EAAE,SAAS,OAAO,UAAU,cAAc,MAAM,KAAK,MAAM,EAAE,SAAS,EAAE,QAAQ;EACtF,MAAM,SAAS,EAAE;EACjB,MAAM,SAAS,EAAE;EACjB,IAAI,SAAS;EACb,IAAI,WAAW,KAAK,YAAY,WAAW,KAAK;EAChD,MAAM,mBAAmB,cAAc;AACvC,OAAK,IAAI,YAAY,GAAG,YAAY,MAAM,QAAQ,aAAa;GAC9D,MAAM,EAAE,UAAU,WAAW,YAAY,WAAW,MAAM;GAC1D,MAAM,SAAS,UAAU,UAAU,UAAU;GAC7C,MAAM,QAAQ,YAAY,QAAQ,aAAa,OAAO,UAAU,EAAE,iBAAiB;GACnF,MAAM,sBAAsB,IAAI,KAAK;AACrC,QAAK,MAAM,KAAK,OAAO,SAAU,KAAI,IAAI,EAAE,SAAS,EAAE,IAAI,MAAM;AAChE,OAAI,YAAY,EAAG,UAAS;AAC5B,QAAK,MAAM,KAAK,UAAU;IACzB,MAAM,IAAI,IAAI,IAAI,EAAE,IAAI;IACxB,MAAM,MAAM,QAAQ,IAAI,EAAE;IAC1B,MAAM,OAAO,EAAE,QAAQ,OAAO;AAC9B,QAAI,IAAK,UAAS;AAClB,QAAI,EAAE,SAAS;AACd,YAAO,KAAK;MACX,MAAM,EAAE;MACR,GAAG,IAAI,EAAE;MACT,GAAG,WAAW;MACd,MAAM;MACN;MACA,CAAC;AACF;;AAED,SAAK,MAAM,OAAO,EAAE,OAAQ,QAAO,KAAK;KACvC,MAAM,EAAE;KACR,IAAI,IAAI;KACR,GAAG,IAAI,IAAI;KACX,GAAG,WAAW,IAAI;KAClB;KACA,WAAW,IAAI;KACf,WAAW,IAAI;KACf,WAAW,IAAI;KACf,SAAS,EAAE;KACX,WAAW,SAAS,EAAE;KACtB;KACA,gBAAgB,EAAE,UAAU,EAAE;KAC9B,UAAU;KACV,UAAU,YAAY,OAAO;KAC7B,CAAC;;AAEH,eAAY;;AAEb,SAAO,YAAY,UAAU;GAC5B;GACA;GACA,aAAa,WAAW,aAAa,CAAC,KAAK,aAAa,WAAW,KAAK;GACxE,YAAY,MAAM;GAClB,YAAY;GACZ,YAAY;GACZ,QAAQ,UAAU,KAAK;GACvB,CAAC;;CAEH,OAAO,QAAQ,MAAM,MAAM,UAAU,eAAe,YAAY,UAAU,OAAO,YAAY,QAAQ;EACpG,MAAM,oBAAoB,YAAY,OAAO;EAC7C,MAAM,SAASiB,eAAa,OAAO,MAAM,MAAM,UAAU,eAAe,YAAY,mBAAmB,QAAQ,QAAQ,KAAK,GAAG,KAAK,GAAG,OAAO,UAAU;EACxJ,MAAM,YAAY,WAAW,KAAK;EAClC,IAAI,eAAe;EACnB,MAAM,6BAA6B,IAAI,KAAK;AAC5C,OAAK,MAAM,OAAO,OAAO,QAAQ;AAChC,OAAI,IAAI,QAAS;GACjB,MAAM,iBAAiB,IAAI,aAAa;GACxC,MAAM,aAAa,IAAI,IAAI,IAAI,GAAG,eAAe;AACjD,OAAI,cAAc,WAAW,IAAI,IAAI,UAAU,IAAI,GAAI,YAAW,IAAI,IAAI,WAAW,WAAW;;AAEjG,OAAK,MAAME,WAAS,OAAO,QAAQ;GAClC,MAAM,aAAaA,QAAM,IAAIA,QAAM;AACnC,OAAI,cAAc,WAAW,IAAIA,QAAM,UAAU,IAAI,GAAI,YAAW,IAAIA,QAAM,WAAW,WAAW;;AAErG,OAAK,MAAM,KAAK,WAAW,QAAQ,CAAE,KAAI,IAAI,aAAc,gBAAe;AAC1E,SAAO;GACN,OAAO,KAAK,KAAK,aAAa;GAC9B,QAAQ,KAAK,KAAK,OAAO,YAAY;GACrC;GACA;;CAEF,OAAO,YAAY,OAAO,aAAa,iBAAiB,sBAAsB,mBAAmB,UAAU,QAAQ,QAAQ,UAAU,QAAQ,YAAY,YAAY,QAAQ;EAC5K,MAAM,aAAa,CAAC,EAAE,CAAC;EACvB,IAAI,YAAY,aAAa,SAAS,qBAAqB;AAC3D,OAAK,IAAI,OAAO,GAAG,OAAO,MAAM,QAAQ,QAAQ;GAC/C,MAAM,IAAI,MAAM;GAChB,MAAM,UAAU,OAAO,aAAa,EAAE,KAAK,IAAI,GAAG;GAClD,MAAM,YAAY,aAAa,EAAE,SAAS;GAC1C,MAAM,eAAe,OAAO,cAAc,WAAW,YAAY,cAAc,KAAK,IAAI,OAAO,UAAU,GAAG;GAC5G,IAAI,WAAW;AACf,OAAI,EAAE,cAAc,EAAE,eAAe,KAAK,GAAG;IAC5C,MAAM,SAAS,EAAE,cAAc,YAAY,cAAc;IACzD,MAAM,WAAW,cAAc,QAAQ,QAAQ,EAAE,YAAY,MAAM,KAAK,GAAG,aAAa;AACxF,QAAI,SAAU,YAAW;;GAE1B,MAAM,YAAY,aAAa,EAAE,KAAK;GACtC,MAAM,eAAe,aAAa,EAAE,QAAQ;GAC5C,MAAM,QAAQ;IACb,MAAM;IACN,UAAU;IACV,WAAW,eAAe,SAAS;IACnC,eAAe,EAAE,iBAAiB;IAClC,eAAe,EAAE,iBAAiB;IAClC,MAAM,cAAc,KAAK,IAAI,OAAO,UAAU,GAAG,KAAK;IACtD,SAAS,iBAAiB,KAAK,IAAI,OAAO,aAAa,GAAG,KAAK;IAC/D,MAAM,EAAE;IACR,WAAW;IACX;AACD,OAAI,MAAM,kBAAkB,EAAG,aAAY;GAC3C,MAAM,QAAQ,QAAQ,MAAM,KAAK;AACjC,QAAK,IAAI,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACtC,QAAI,IAAI,EAAG,YAAW,KAAK,EAAE,CAAC;AAC9B,QAAI,MAAM,GAAI,YAAW,WAAW,SAAS,GAAG,KAAK;KACpD,MAAM,MAAM;KACZ;KACA,CAAC;;;EAGJ,MAAM,QAAQ,EAAE;AAChB,OAAK,MAAM,YAAY,YAAY;GAClC,MAAM,SAAS,eAAe,UAAU;IACvC;IACA;IACA,CAAC;AACF,QAAK,MAAM,YAAY,WAAW,OAAO,UAAU,SAAS,CAAE,OAAM,KAAK;IACxE;IACA,WAAW,OAAO;IAClB,CAAC;;EAEH,MAAM,EAAE,SAAS,UAAU,cAAc,MAAM,KAAK,MAAM,EAAE,SAAS,EAAE,QAAQ;EAC/E,MAAM,SAAS,EAAE;EACjB,MAAM,SAAS,EAAE;EACjB,MAAM,QAAQ,EAAE;EAChB,IAAI,SAAS;EACb,IAAI,mBAAmB;EACvB,MAAM,mBAAmB,cAAc;EACvC,MAAM,eAAe,kBAAkB,YAAY;AACnD,OAAK,IAAI,YAAY,GAAG,YAAY,MAAM,QAAQ,aAAa;GAC9D,MAAM,EAAE,UAAU,cAAc,MAAM;GACtC,IAAI,iBAAiB,YAAY,YAAY,OAAO;GACpD,IAAI,iBAAiB,EAAE,YAAY,aAAa,QAAQ;GACxD,IAAI,kBAAkB;AACtB,QAAK,MAAM,KAAK,UAAU;IACzB,MAAM,KAAK,EAAE;IACb,MAAM,OAAO,GAAG,KAAK,YAAY,OAAO,GAAG;IAC3C,MAAM,OAAO,EAAE,GAAG,KAAK,aAAa,QAAQ,GAAG;IAC/C,MAAM,KAAK,qBAAqB,GAAG,WAAW;AAC9C,QAAI,MAAM,cAAe,iBAAgB;AACzC,QAAI,OAAO,eAAgB,kBAAiB;AAC5C,QAAI,KAAK,gBAAiB,mBAAkB;;AAE7C,OAAI,cAAc,EAAG,oBAAmB;GACxC,MAAM,SAAS,UAAU,UAAU,UAAU;GAC7C,MAAM,QAAQ,YAAY,QAAQ,aAAa,OAAO,UAAU,EAAE,iBAAiB;AACnF,OAAI,YAAY,EAAG,UAAS;GAC5B,IAAI;GACJ,IAAI,aAAa;GACjB,IAAI,WAAW;GACf,IAAI,UAAU;GACd,IAAI,WAAW;GACf,MAAM,kBAAkB;AACvB,QAAI,cAAc,WAAW,YAAY;KACxC,MAAM,OAAO,WAAW,YAAY;KACpC,MAAM,OAAO,WAAW,YAAY;AACpC,WAAM,KAAK;MACV,GAAG,aAAa;MAChB,GAAG,mBAAmB,UAAU;MAChC,OAAO,WAAW,aAAa,OAAO;MACtC,QAAQ,UAAU,WAAW,OAAO;MACpC,YAAY,OAAO,aAAa,WAAW,WAAW,CAAC;MACvD,cAAc,WAAW,gBAAgB;MACzC;MACA,CAAC;;AAEH,iBAAa,KAAK;;GAEnB,MAAM,sBAAsB,IAAI,KAAK;AACrC,QAAK,MAAM,KAAK,OAAO,UAAU;IAChC,MAAM,IAAI,EAAE;IACZ,MAAM,IAAI,EAAE,IAAI;AAChB,QAAI,IAAI,GAAG,EAAE;IACb,MAAM,KAAK,EAAE;AACb,QAAI,GAAG,QAAQ,CAAC,EAAE,SAAS;KAC1B,MAAM,KAAK,GAAG,KAAK,YAAY,OAAO,GAAG;KACzC,MAAM,IAAI,EAAE,GAAG,KAAK,aAAa,QAAQ,GAAG;AAC5C,SAAI,CAAC,cAAc,eAAe,GAAG,MAAM;AAC1C,iBAAW;AACX,mBAAa,GAAG;AAChB,mBAAa,IAAI,EAAE;AACnB,iBAAW,IAAI,EAAE;AACjB,gBAAU;AACV,iBAAW;YACL;AACN,iBAAW,IAAI,EAAE;AACjB,UAAI,IAAI,QAAS,WAAU;AAC3B,UAAI,IAAI,SAAU,YAAW;;UAExB,YAAW;;AAEnB,cAAW;AACX,QAAK,MAAM,KAAK,UAAU;IACzB,MAAM,IAAI,IAAI,IAAI,EAAE,IAAI;IACxB,MAAM,KAAK,EAAE;IACb,MAAM,MAAM,QAAQ,IAAI,EAAE;IAC1B,MAAM,OAAO,EAAE,QAAQ,OAAO;AAC9B,QAAI,IAAK,UAAS;AAClB,QAAI,EAAE,SAAS;AACd,YAAO,KAAK;MACX,MAAM,EAAE;MACR,GAAG,IAAI,EAAE;MACT,GAAG,mBAAmB,GAAG;MACzB,MAAM,GAAG;MACT;MACA,CAAC;AACF;;AAED,SAAK,MAAM,OAAO,EAAE,OAAQ,QAAO,KAAK;KACvC,MAAM,EAAE;KACR,IAAI,IAAI;KACR,GAAG,IAAI,IAAI;KACX,GAAG,mBAAmB,GAAG,gBAAgB,IAAI;KAC7C;KACA,WAAW,IAAI;KACf,WAAW,IAAI;KACf,WAAW,IAAI;KACf,SAAS,EAAE;KACX;KACA,gBAAgB,EAAE,UAAU,EAAE;KAC9B,UAAU;KACV,UAAU,YAAY,OAAO;KAC7B,WAAW,GAAG;KACd,MAAM,GAAG;KACT,UAAU,GAAG;KACb,WAAW,GAAG;KACd,eAAe,GAAG;KAClB,SAAS,GAAG;KACZ,YAAY,GAAG,KAAK;KACpB,MAAM,GAAG;KACT,MAAM,GAAG;KACT,CAAC;;AAEH,OAAI,YAAY,MAAM,SAAS,EAAG,qBAAoB,KAAK,IAAI,iBAAiB,gBAAgB,eAAe;;EAEhH,IAAI,eAAe;AACnB,OAAK,MAAM,OAAO,OAAQ,KAAI,CAAC,IAAI,WAAW,IAAI,YAAY,aAAc,gBAAe,IAAI;EAC/F,MAAM,cAAc,MAAM,SAAS,IAAI,mBAAmB,eAAe,EAAE,YAAY,aAAa,QAAQ;AAC5G,SAAO;GACN;GACA;GACA,OAAO,MAAM,SAAS,IAAI,QAAQ,KAAK;GACvC;GACA,YAAY,MAAM;GAClB,YAAY,KAAK,IAAI,GAAG,eAAe,EAAE;GACzC,YAAY;GACZ,QAAQ,UAAU,KAAK;GACvB;;CAEF,OAAO,aAAa,MAAM,MAAM,UAAU,eAAe,aAAa,UAAU,QAAQ,YAAY,QAAQ;EAC3G,MAAM,YAAY,WAAW,KAAK;EAClC,MAAM,WAAW,qBAAqB,YAAY,KAAK;EACvD,MAAM,WAAW,aAAa,SAAS;EACvC,MAAM,cAAc,SAAS;EAC7B,MAAM,SAAS,eAAe,CAAC;GAC9B,MAAM,KAAK,QAAQ,OAAO,IAAI;GAC9B,OAAO;IACN;IACA;IACA;IACA;GACD,CAAC,EAAE;GACH;GACA,WAAW,aAAa,SAAS,cAAc;GAC/C,CAAC;EACF,MAAM,WAAW,OAAO;EACxB,MAAM,EAAE,SAAS,OAAO,UAAU,cAAc,CAAC,SAAS,EAAE,QAAQ;EACpE,MAAM,SAAS,UAAU,UAAU,OAAO,UAAU,CAAC,SAAS,KAAK,MAAM,EAAE,QAAQ;EACnF,IAAI,uBAAuB;AAC3B,MAAI,YAAY,mBAAmB,SAAU,yBAAwB,KAAK,WAAW,KAAK,aAAa,YAAY;WAC1G,YAAY,mBAAmB,WAAY,wBAAuB,CAAC,KAAK,WAAW;WACnF,YAAY,mBAAmB,YAAa,wBAAuB,CAAC,KAAK,YAAY;EAC9F,MAAM,cAAc,YAAY,iBAAiB,KAAK;EACtD,MAAM,SAAS,EAAE;EACjB,MAAM,SAAS,EAAE;EACjB,MAAM,cAAc,YAAY,eAAe;EAC/C,MAAM,aAAa,YAAY,cAAc;EAC7C,MAAM,WAAW,KAAK,IAAI,aAAa,cAAc,WAAW,GAAG;EACnE,IAAI,gBAAgB;AACpB,OAAK,IAAI,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;GACvC,MAAM,IAAI,OAAO;AACjB,oBAAiB,IAAI,OAAO,SAAS,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE;;EAEpE,MAAM,kBAAkB,YAAY,kBAAkB,OAAO,SAAS,KAAK,WAAW,kBAAkB,OAAO,SAAS,KAAK;EAC7H,MAAM,gBAAgB,YAAY,wBAAwB;EAC1D,MAAM,YAAY,MAAM;GACvB,IAAI,IAAI,YAAY,cAAc,cAAc,IAAI;AACpD,OAAI,YAAY,QAAQ,cAAc,EAAG,MAAK,IAAI,cAAc,eAAe;AAC/E,UAAO,wBAAwB,UAAU,UAAU,EAAE;;EAEtD,IAAI,kBAAkB;AACtB,OAAK,MAAM,KAAK,QAAQ;GACvB,MAAM,MAAM,QAAQ,IAAI,EAAE;AAC1B,OAAI,EAAE,SAAS;IACd,MAAM,SAAS,SAAS,kBAAkB,EAAE,SAAS;AACrD,WAAO,KAAK;KACX,MAAM,EAAE;KACR,GAAG,OAAO,SAAS,IAAI,OAAO,OAAO,IAAI;KACzC,GAAG,OAAO,SAAS,IAAI,OAAO,OAAO,IAAI,aAAa;KACtD,MAAM;KACN,WAAW;KACX,CAAC;SACI,MAAK,MAAM,OAAO,EAAE,QAAQ;IAClC,MAAM,SAAS,SAAS,kBAAkB,IAAI,GAAG;IACjD,MAAM,QAAQ,aAAa,IAAI;AAC/B,WAAO,KAAK;KACX,MAAM,EAAE;KACR,IAAI,IAAI;KACR,GAAG,OAAO,SAAS,IAAI,OAAO,OAAO,IAAI;KACzC,GAAG,OAAO,SAAS,IAAI,OAAO,OAAO,IAAI;KACzC,WAAW;KACX,WAAW,IAAI;KACf,WAAW,IAAI;KACf,WAAW,YAAY,SAAS,IAAI,IAAI;KACxC,SAAS,EAAE;KACX,WAAW,EAAE;KACb,MAAM,EAAE,QAAQ,OAAO;KACvB,gBAAgB,EAAE,UAAU,EAAE;KAC9B,qBAAqB,gBAAgB,OAAO,kBAAkB,KAAK,KAAK,MAAM;KAC9E,qBAAqB;KACrB,aAAa,OAAO,OAAO;KAC3B,aAAa,OAAO,OAAO;KAC3B,CAAC;;AAEH,sBAAmB,EAAE,UAAU;;AAEhC,SAAO;GACN;GACA;GACA,aAAa,WAAW;GACxB,YAAY;GACZ,YAAY;GACZ,YAAY;GACZ,QAAQ,OAAO,YAAY,KAAK,SAAS,MAAM,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,KAAK;GAChF;;;AAMH,SAAS,WAAW,GAAG;AACtB,QAAO,OAAO,MAAM,YAAY,MAAM,QAAQ,OAAO,EAAE,QAAQ;;AAEhE,SAASC,UAAQ,GAAG,KAAK;AACxB,QAAO,WAAW,EAAE,GAAG,EAAE,IAAI,IAAI,GAAG;;;;;;;AAOrC,SAAS,iBAAiB,OAAO,KAAK;AACrC,QAAO,MAAM,KAAK,MAAM;EACvB,MAAM,MAAM;GACX,GAAG;GACH,MAAM,OAAOA,UAAQ,EAAE,MAAM,IAAI,IAAI,GAAG;GACxC;AACD,MAAI,EAAE,aAAa,KAAK,EAAG,KAAI,WAAW,OAAOA,UAAQ,EAAE,UAAU,IAAI,CAAC;AAC1E,MAAI,EAAE,SAAS,KAAK,EAAG,KAAI,OAAO,OAAOA,UAAQ,EAAE,MAAM,IAAI,CAAC;AAC9D,MAAI,EAAE,YAAY,KAAK,EAAG,KAAI,UAAU,OAAOA,UAAQ,EAAE,SAAS,IAAI,CAAC;AACvE,MAAI,EAAE,KAAM,KAAI,OAAO;GACtB,GAAG,EAAE;GACL,YAAY,OAAOA,UAAQ,EAAE,KAAK,YAAY,IAAI,CAAC;GACnD;AACD,SAAO;GACN;;;AAGH,SAAS,UAAU,OAAO;CACzB,IAAI,OAAO;AACX,MAAK,MAAM,KAAK,MAAO,SAAQ,OAAO,EAAE,SAAS,WAAW,EAAE,OAAO;AACrE,QAAO;;;;;;;;;;AAUR,SAAS,eAAe,OAAO,MAAM;CACpC,MAAM,MAAM,EAAE;CACd,IAAI,SAAS;AACb,MAAK,MAAM,CAAC,GAAG,MAAM,MAAM,SAAS,EAAE;AACrC,MAAI,UAAU,KAAK,OAAQ;EAC3B,MAAM,MAAM,OAAO,EAAE,SAAS,WAAW,EAAE,KAAK,SAAS;EACzD,MAAM,MAAM,MAAM,MAAM,SAAS,IAAI,KAAK,SAAS,SAAS;AAC5D,MAAI,MAAM,OAAQ,KAAI,KAAK;GAC1B,GAAG;GACH,MAAM,KAAK,MAAM,QAAQ,IAAI;GAC7B,CAAC;AACF,WAAS;;AAEV,QAAO;;AAKR,SAAS,kBAAkB,SAAS,UAAU,OAAO,KAAK,cAAc,GAAG,aAAa,GAAG;CAC1F,MAAM,aAAa,eAAe,kBAAkB,UAAU,UAAU;AACxE,KAAI,cAAc,WAAW,SAAS,GAAG;EACxC,MAAM,UAAU,MAAM,IAAI,MAAM;EAChC,MAAM,IAAI,QAAQ;EAClB,MAAM,iBAAiB,gBAAgB,IAAI,aAAa,eAAe,IAAI,KAAK,MAAM;EACtF,MAAM,OAAO,KAAK,IAAI,GAAG,IAAI,eAAe;EAC5C,MAAM,MAAM,KAAK,IAAI,GAAG,KAAK,IAAI,WAAW,SAAS,GAAG,KAAK,MAAM,OAAO,QAAQ,CAAC,CAAC;AACpF,SAAO,OAAO,WAAW,KAAK,IAAI;;AAEnC,KAAI,CAAC,QAAS,QAAO;CACrB,MAAM,MAAM,QAAQ;AACpB,KAAI,QAAQ,KAAK,KAAK,QAAQ,KAAM,QAAO;AAC3C,KAAI,OAAO,QAAQ,SAAU,QAAO;AACpC,KAAI,OAAO,QAAQ,WAAY,QAAO,OAAO,IAAI,OAAO,IAAI,CAAC,IAAI;AACjE,KAAI,OAAO,QAAQ,UAAU;EAC5B,MAAM,OAAO;AACb,MAAI,OAAO,KAAK,QAAQ,YAAY;GACnC,MAAMjB,SAAO,MAAM,IAAI,QAAQ,MAAM;GACrC,MAAM,iBAAiB,gBAAgB,IAAI,aAAa,eAAe,IAAI,KAAK,MAAM;AACtF,UAAO,OAAO,KAAK,IAAI;IACtB;IACA;IACA,MAAMA,SAAO;IACb,CAAC,CAAC,IAAI;;AAER,MAAI,MAAM,QAAQ,KAAK,QAAQ,IAAI,YAAY,OAAO,KAAK,QAAQ,EAAE;GACpE,MAAM,MAAM,KAAK;GACjB,MAAM,MAAM,KAAK,IAAI,GAAG,KAAK,IAAI,IAAI,SAAS,GAAG,KAAK,MAAM,MAAM,CAAC,CAAC;AACpE,UAAO,OAAO,IAAI,KAAK,IAAI;;;AAG7B,QAAO;;AAER,SAAS,cAAc,GAAG;AACzB,QAAO,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,KAAK,IAAI,MAAM,IAAI;;AAErD,SAAS,aAAa,KAAK;CAC1B,IAAI,OAAO;AACX,MAAK,IAAI,IAAI,GAAG,IAAI,IAAI,QAAQ,IAAK,QAAO,IAAI,WAAW,EAAE,KAAK,QAAQ,KAAK;AAC/E,cAAa;EACZ,MAAM,IAAI,KAAK,IAAI,OAAO,GAAG;AAC7B,SAAO,IAAI,KAAK,MAAM,EAAE;;;AAG1B,SAAS,gBAAgB,GAAG,MAAM;CACjC,MAAM,OAAO,aAAa,KAAK;CAC/B,MAAM,MAAM,MAAM,KAAK,EAAE,QAAQ,GAAG,GAAG,GAAG,MAAM,EAAE;AAClD,MAAK,IAAI,IAAI,IAAI,SAAS,GAAG,IAAI,GAAG,KAAK;EACxC,MAAM,IAAI,KAAK,MAAM,MAAM,IAAI,IAAI,GAAG;EACtC,MAAM,OAAO,IAAI;AACjB,MAAI,KAAK,IAAI;AACb,MAAI,KAAK;;AAEV,QAAO;;AAER,SAAS,wBAAwB,QAAQ,MAAM,UAAU;CACxD,MAAM,MAAM,GAAG,KAAK,GAAG;CACvB,IAAI,MAAM,cAAc,kBAAkB,IAAI,IAAI;AAClD,KAAI,IAAK,QAAO;CAChB,MAAM,kBAAkB;CACxB,MAAM,YAAY,KAAK,IAAI,IAAI,KAAK,KAAK,WAAW,MAAM,gBAAgB,CAAC;CAC3E,MAAM,OAAO,KAAK,KAAK,YAAY,EAAE,GAAG;AACxC,KAAI,CAAC,CAAC,WAAW,4BAA4B,OAAO,WAAW,eAAe,OAAO,WAAW,aAAa,aAAa;AACzH,UAAQ,KAAK,oCAAoC,KAAK,oDAAoD;AAC1G,QAAM,OAAO,cAAc;GAC1B,OAAO,eAAe;GACtB,MAAM,CAAC,GAAG,EAAE;GACZ,QAAQ;GACR,OAAO,gBAAgB;GACvB,CAAC;AACF,gBAAc,kBAAkB,IAAI,KAAK,IAAI;AAC7C,SAAO;;CAER,MAAM,SAAS,IAAI,gBAAgB,MAAM,KAAK;CAC9C,MAAM,MAAM,OAAO,WAAW,KAAK;AACnC,KAAI,KAAK;AACR,MAAI,OAAO,GAAG,WAAW,gBAAgB;AACzC,MAAI,eAAe;AACnB,MAAI,YAAY;AAChB,MAAI,SAAS,MAAM,OAAO,GAAG,OAAO,EAAE;;AAEvC,OAAM,OAAO,cAAc;EAC1B,OAAO,SAAS;EAChB,MAAM,CAAC,MAAM,KAAK;EAClB,QAAQ;EACR,OAAO,gBAAgB,kBAAkB,gBAAgB,WAAW,gBAAgB;EACpF,CAAC;AACF,QAAO,MAAM,2BAA2B,EAAE,QAAQ,QAAQ,EAAE;EAC3D,SAAS;EACT,oBAAoB;EACpB,EAAE,CAAC,MAAM,KAAK,CAAC;AAChB,eAAc,kBAAkB,IAAI,KAAK,IAAI;AAC7C,QAAO;;AAER,SAAS,oBAAoB,SAAS,YAAU,YAAY,QAAQ,OAAO,YAAY,aAAa;AACnG,KAAI,CAAC,YAAa,QAAO;EACxB,MAAM;EACN,OAAO;EACP;CACD,IAAI,OAAO;AACX,KAAI,aAAa,GAAG;EACnB,MAAM,SAAS,aAAa;EAC5B,MAAM,MAAM,SAAS,aAAa,IAAI,aAAa,MAAM,aAAa,KAAK;EAC3E,MAAM,MAAM,MAAM;AAClB,MAAI,UAAU,IAAK,QAAO;WACjB,UAAU,IAAK,QAAO;MAC1B,SAAQ,UAAU,QAAQ,MAAM;;CAEtC,IAAI,QAAQ;AACZ,KAAI,SAAS,GAAG;EACf,MAAM,eAAeO,aAAW;AAChC,MAAI,UAAU,cAAc;GAC3B,MAAM,SAAS,SAAS;GACxB,MAAM,MAAM,eAAe,SAAS,aAAa,IAAI,SAAS,MAAM,aAAa,KAAK;GACtF,MAAM,MAAM,MAAM;AAClB,OAAI,UAAU,IAAK,SAAQ;YAClB,UAAU,IAAK,SAAQ;OAC3B,SAAQ,KAAK,UAAU,QAAQ,MAAM;;;AAG5C,QAAO;EACN;EACA;EACA;;AAEF,SAAS,sBAAsB,MAAM,OAAO,WAAW,cAAc,eAAe,SAAS,SAAS,YAAU,YAAY,QAAQ,OAAO,aAAa,SAAS;CAChK,MAAM,QAAQ,YAAY,cAAc,KAAK,GAAG;CAChD,MAAM,SAAS,YAAY,cAAc,MAAM,GAAG;CAClD,MAAM,OAAO,QAAQ;AACrB,KAAI,SAAS,KAAK,iBAAiB,UAAU,UAAU,KAAK,kBAAkB,OAAQ,QAAO;EAC5F,SAAS;EACT,QAAQ;EACR,QAAQ;EACR,KAAK;EACL,OAAO;EACP,YAAY;EACZ,SAAS;EACT;CACD,IAAI,UAAU;AACd,KAAI,iBAAiB,UAAU,iBAAiB,aAAa,iBAAiB,OAAQ,YAAW;UACxF,iBAAiB,UACzB;MAAI,QAAQ,GAAI,WAAU;;AAE3B,KAAI,kBAAkB,UAAU,kBAAkB,aAAa,kBAAkB,OAAQ,YAAW;UAC3F,kBAAkB,UAC1B;MAAI,SAAS,GAAI,WAAU;;AAE5B,KAAI,UAAU,KAAM,QAAO;EAC1B,SAAS;EACT,QAAQ;EACR,QAAQ;EACR,KAAK;EACL,OAAO;EACP,YAAY;EACZ,SAAS;EACT;CACD,IAAI,SAAS;CACb,IAAI,SAAS;CACb,IAAI,MAAM;CACV,IAAI,QAAQ;AACZ,KAAI,iBAAiB,aAAa,UAAU,WAAY,YAAW,IAAI,SAAS;AAChF,KAAI,kBAAkB,aAAa,UAAUA,aAAW,OAAQ,YAAW,IAAI,UAAU;CACzF,MAAM,WAAW,UAAU,IAAI,KAAK,KAAK;AACzC,KAAI,YAAY,SAAS;AACxB,UAAQ,KAAK,KAAK;AAClB,SAAO,IAAI,QAAQ,KAAK;YACd,YAAY,OAAQ,WAAU,KAAK,KAAK,IAAI,UAAU,OAAO,QAAQ,GAAG;UAC1E,YAAY,UAAU;AAC9B,YAAU,IAAI,KAAK,IAAI,UAAU,OAAO,QAAQ,IAAI;AACpD,YAAU,IAAI,KAAK,IAAI,UAAU,OAAO,QAAQ,IAAI;AACpD,SAAO,IAAI,KAAK,IAAI,UAAU,OAAO,QAAQ,IAAI,GAAG;YAC1C,YAAY,WAAW;AACjC,YAAU,IAAI,KAAK,IAAI,UAAU,OAAO,QAAQ,IAAI;AACpD,YAAU,IAAI,KAAK,IAAI,UAAU,OAAO,QAAQ,IAAI;AACpD,SAAO,IAAI,KAAK,IAAI,UAAU,MAAM,QAAQ,IAAI,GAAG;;CAEpD,IAAI,aAAa;AACjB,KAAI,iBAAiB,OAAQ,cAAa,KAAK,IAAI,aAAa,IAAI,SAAS,GAAG;AAChF,KAAI,kBAAkB,OAAQ,cAAa,KAAK,IAAI,aAAa,IAAI,UAAU,GAAG;AAClF,QAAO;EACN;EACA;EACA;EACA;EACA;EACA;EACA,SAAS;EACT;;AAEF,MAAM,qBAAqB;CAC1B,SAAS,MAAM;CACf,OAAO,MAAM;CACb,aAAa,MAAM;CACnB,eAAe,MAAM,KAAK,IAAI,MAAM;CACpC,aAAa,MAAM,KAAK,IAAI,MAAM;CAClC,cAAc,MAAM,KAAK;CACzB,YAAY,MAAM,KAAK;CACvB,iBAAiB,MAAM,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,KAAK,IAAI,MAAM,IAAI;CACpE,eAAe,MAAM,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,KAAK,IAAI,MAAM,IAAI;CAClE,eAAe,MAAM,KAAK,IAAI,MAAM;CACpC,cAAc,MAAM,KAAK,IAAI,MAAM;CACnC,cAAc,MAAM,KAAK;CACzB,aAAa,MAAM,KAAK;CACxB,iBAAiB,MAAM,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,KAAK,IAAI,MAAM,IAAI;CACrE,gBAAgB,MAAM,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,KAAK,IAAI,MAAM,IAAI;CACpE,eAAe,MAAM,KAAK,IAAI,MAAM;CACpC,cAAc,MAAM,KAAK,IAAI,MAAM;CACnC,cAAc,MAAM,KAAK;CACzB,aAAa,MAAM,KAAK;CACxB,iBAAiB,MAAM,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,KAAK,IAAI,MAAM,IAAI;CACrE,gBAAgB,MAAM,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,KAAK,IAAI,MAAM,IAAI;CACpE,eAAe,MAAM,KAAK,IAAI,MAAM;CACpC,cAAc,MAAM,KAAK,IAAI,MAAM;CACnC,cAAc,MAAM,KAAK;CACzB,aAAa,MAAM,KAAK;CACxB,aAAa,MAAM,KAAK,IAAI,IAAI,KAAK,KAAK,EAAE;CAC5C,YAAY,MAAM,IAAI,KAAK,IAAI,IAAI,KAAK,KAAK,EAAE;CAC/C,eAAe,MAAM,EAAE,KAAK,IAAI,KAAK,KAAK,EAAE,GAAG,KAAK;CACpD,aAAa,MAAM,MAAM,IAAI,IAAI,IAAI,MAAM,MAAM;CACjD,aAAa,MAAM,IAAI,WAAW,IAAI,MAAM,IAAI,WAAW,IAAI,MAAM;CACrE;AACD,SAAS,eAAe,MAAM,GAAG;CAChC,MAAM,UAAU,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,EAAE,CAAC;AAC3C,KAAI,CAAC,KAAM,QAAO;CAClB,MAAM,KAAK,mBAAmB,KAAK,aAAa,CAAC,MAAM;AACvD,QAAO,KAAK,GAAG,QAAQ,GAAG;;AAE3B,SAAS,wBAAwB,UAAU,SAAS,YAAY;AAC/D,KAAI,cAAc,EAAG,QAAO;CAC5B,MAAM,IAAI,aAAa,IAAI,WAAW,aAAa,KAAK;CACxD,MAAM,SAAS,SAAS,UAAU;CAClC,MAAM,UAAU,SAAS,cAAc,KAAK;CAC5C,MAAM,QAAQ,SAAS,YAAY,KAAK;CACxC,IAAI,IAAI;AACR,KAAI,QAAQ,OAAQ,KAAI,KAAK,SAAS,IAAI;KACrC,KAAI,KAAK,IAAI,GAAG,KAAK,IAAI,IAAI,IAAI,WAAW,OAAO,QAAQ,CAAC;CACjE,MAAM,IAAI,IAAI,KAAK,IAAI,IAAI;AAC3B,QAAO,eAAe,SAAS,UAAU,cAAc,EAAE;;AAE1D,SAAS,yBAAyB,QAAQ,OAAO,QAAQ,SAAS,OAAO,KAAK;CAC7E,MAAM,aAAa,KAAK,IAAI,GAAG,OAAO,cAAc,EAAE;CACtD,MAAM,aAAa,KAAK,IAAI,GAAG,OAAO,cAAc,EAAE;CACtD,MAAM,aAAa,KAAK,IAAI,GAAG,OAAO,cAAc,EAAE;CACtD,MAAM,YAAY,OAAO,aAAa,EAAE;AACxC,KAAI,UAAU,WAAW,EAAG,QAAO;CACnC,IAAI,iBAAiB;AACrB,MAAK,IAAI,OAAO,GAAG,OAAO,UAAU,QAAQ,QAAQ;EACnD,MAAM,WAAW,UAAU;EAC3B,IAAI,gBAAgB;AACpB,MAAI,SAAS,SAAS,SAAS;GAC9B,IAAI,aAAa;GACjB,IAAI,UAAU,MAAM,aAAa;AACjC,OAAI,SAAS,YAAY,SAAS;AACjC,iBAAa;AACb,cAAU,MAAM,aAAa;cACnB,SAAS,YAAY,SAAS;AACxC,iBAAa;AACb,cAAU,MAAM,aAAa;;AAE9B,OAAI,SAAS,eAAgB,WAAU,iBAAiB,YAAY,SAAS,cAAc,MAAM,CAAC,UAAU,eAAe;AAC3H,mBAAgB,2BAA2B,SAAS,UAAU,UAAU,UAAU,aAAa,IAAI,WAAW,aAAa,KAAK,IAAI,SAAS,SAAS,OAAO,cAAc,GAAG,SAAS,OAAO,OAAO,aAAa,SAAS,UAAU,UAAU,aAAa,IAAI,SAAS,UAAU,OAAO,UAAU,GAAG,SAAS,SAAS,UAAU,SAAS,YAAY,GAAG,SAAS,WAAW,EAAE,IAAI,SAAS,UAAU;aAC9X,SAAS,SAAS,UAAU;GACtC,MAAM,OAAO,MAAM,IAAI,QAAQ,MAAM;GACrC,MAAM,iBAAiB,SAAS,oBAAoB,KAAK,KAAK,KAAK;GACnE,MAAM,gBAAgB,SAAS,mBAAmB,KAAK,KAAK,KAAK;GACjE,MAAM,QAAQ,QAAQ,SAAS,oBAAoB,KAAK,IAAI,KAAK,KAAK,gBAAgB;GACtF,MAAM,QAAQ,yBAAyB,SAAS,cAAc,IAAI,MAAM,aAAa,GAAG,OAAO,SAAS,eAAe,GAAG;GAC1H,MAAM,SAAS,SAAS,aAAa;GACrC,MAAM,SAAS,SAAS,aAAa;AACrC,mBAAgB,UAAU,QAAQ,KAAK,OAAO,SAAS;aAC7C,SAAS,SAAS,SAAU,iBAAgB,kBAAkB,SAAS,SAAS,UAAU,OAAO,KAAK,SAAS,eAAe,GAAG,MAAM,aAAa,EAAE,IAAI,SAAS,cAAc,MAAM,SAAS,UAAU;WAC5M,SAAS,SAAS,cAAc;GACxC,MAAM,UAAU;GAChB,MAAMP,SAAO,MAAM,IAAI,QAAQ,MAAM;GACrC,MAAM,MAAM;IACX,WAAW,MAAM,aAAa;IAC9B,WAAW,MAAM,aAAa;IAC9B,WAAW,MAAM,aAAa;IAC9B,YAAY;IACZ,YAAY;IACZ,YAAY;IACZ;IACA;IACA;IACA;IACA;AACD,mBAAgB,2BAA2B,QAAQ,YAAY,IAAI,IAAI,QAAQ,UAAU;;AAE1F,MAAI,SAAS,EAAG,kBAAiB;MAC5B,kBAAiB,4BAA4B,gBAAgB,eAAe,SAAS,QAAQ,MAAM;;AAEzG,QAAO;;AAER,SAAS,oBAAoB,WAAW,OAAO,QAAQ,MAAM,UAAU,OAAO,QAAQ,GAAG,MAAM,IAAI,SAAS;AAC3G,KAAI,CAAC,aAAa,UAAU,WAAW,EAAG,QAAO;CACjD,IAAI,EAAE,QAAQ,QAAQ,KAAK,OAAO,QAAQ,QAAQ,SAAS,eAAe;CAC1E,IAAI,SAAS,KAAK,UAAU;CAC5B,IAAI,QAAQ,KAAK;CACjB,IAAI,iBAAiB,KAAK,kBAAkB;CAC5C,IAAI,mBAAmB,KAAK,oBAAoB;CAChD,MAAM,WAAW,KAAK,YAAY;CAClC,IAAI,UAAU,KAAK,WAAW;CAC9B,IAAI,UAAU,KAAK,WAAW;CAC9B,IAAI,eAAe,KAAK;CACxB,IAAI,cAAc,KAAK,eAAe;CACtC,IAAI,cAAc,KAAK;CACvB,IAAI,cAAc,KAAK;CACvB,IAAI,aAAa,KAAK;CACtB,IAAI,cAAc,KAAK;CACvB,IAAI,aAAa,KAAK;CACtB,MAAM,WAAW,UAAU,IAAI,KAAK,KAAK;CACzC,MAAM,aAAa,KAAK,IAAI,GAAG,OAAO,cAAc,EAAE;CACtD,MAAM,aAAa,KAAK,IAAI,GAAG,OAAO,cAAc,EAAE;CACtD,MAAM,aAAa,KAAK,IAAI,GAAG,OAAO,cAAc,EAAE;AACtD,MAAK,MAAM,YAAY,UAAW,KAAI,eAAe,YAAY,MAAM,QAAQ,SAAS,UAAU,EAAE;EACnG,MAAM,SAAS;EACf,MAAM,IAAI,OAAO,SAAS,EAAE;EAC5B,MAAM,iBAAiB,yBAAyB,QAAQ,OAAO;GAC9D;GACA;GACA;GACA,EAAE,SAAS,OAAO,IAAI;EACvB,IAAI,iBAAiB;EACrB,IAAI,eAAe;EACnB,IAAI,iBAAiB;AACrB,MAAI,EAAE,QAAQ;GACb,MAAM,aAAa,MAAM,aAAa,KAAK;AAC3C,oBAAiB,uBAAuB,KAAK,IAAI,IAAI,MAAM,IAAI,QAAQ,MAAM,KAAK,UAAU,EAAE,EAAE,OAAO,WAAW,EAAE,OAAO,SAAS,EAAE,OAAO,MAAM,EAAE,OAAO,gBAAgB;AAC5K,kBAAe,IAAI;AACnB,oBAAiB,iBAAiB;;AAEnC,MAAI,mBAAmB,KAAK,mBAAmB,GAAG;AACjD,OAAI,EAAE,MAAM,KAAK,EAAG,WAAU,EAAE,IAAI;AACpC,OAAI,EAAE,MAAM,KAAK,EAAG,WAAU,EAAE,IAAI;AACpC,OAAI,EAAE,UAAU,KAAK,EAAG,UAAS,KAAK,EAAE,QAAQ,KAAK;AACrD,OAAI,EAAE,WAAW,KAAK,EAAG,WAAU,KAAK,EAAE,SAAS,KAAK;AACxD,OAAI,EAAE,WAAW,KAAK,EAAG,WAAU,KAAK,EAAE,SAAS,KAAK;AACxD,OAAI,EAAE,aAAa,KAAK,EAAG,QAAO,EAAE,WAAW,WAAW;AAC1D,OAAI,EAAE,cAAc,KAAK,GAAG;IAC3B,MAAM,UAAU,EAAE,YAAY,iBAAiB,KAAK,KAAK;AACzD,cAAU,KAAK,IAAI,KAAK,KAAK,IAAI,KAAK,IAAI,QAAQ,CAAC,CAAC;;AAErD,OAAI,EAAE,cAAc,KAAK,GAAG;IAC3B,MAAM,UAAU,EAAE,YAAY,iBAAiB,KAAK,KAAK;AACzD,cAAU,KAAK,IAAI,KAAK,KAAK,IAAI,KAAK,IAAI,QAAQ,CAAC,CAAC;;AAErD,OAAI,EAAE,cAAc,KAAK,EAAG,QAAO,EAAE,YAAY,WAAW;AAC5D,OAAI,EAAE,eAAe,KAAK,EAAG,WAAU,EAAE,aAAa;AACtD,OAAI,EAAE,SAAS,KAAK,GAAG;IACtB,MAAM,GAAG,KAAK,OAAO,mBAAmB,EAAE,OAAO,gBAAgB,EAAE,YAAY,EAAE;AACjF,eAAW;AACX,eAAW;;AAEZ,OAAI,EAAE,cAAc,KAAK,GAAG;IAC3B,MAAM,MAAM,4BAA4B,MAAM,aAAa,GAAG,YAAY,EAAE,UAAU;IACtF,MAAM,UAAU,OAAO,cAAc,KAAK;IAC1C,MAAM,UAAU,OAAO,cAAc,KAAK;IAC1C,MAAM,aAAa,MAAM,KAAK;IAC9B,MAAM,aAAa,MAAM,KAAK;IAC9B,MAAM,UAAU,UAAU,IAAI;IAC9B,MAAM,UAAU,UAAU,IAAI;AAC9B,eAAW,UAAU,cAAc;AACnC,eAAW,UAAU,cAAc;AACnC,cAAU,IAAI,IAAI;AAClB,QAAI,IAAI,MAAM;KACb,MAAM,UAAU,IAAI,OAAO,iBAAiB,KAAK,KAAK;AACtD,eAAU,KAAK,IAAI,IAAI,KAAK,IAAI,KAAK,IAAI,QAAQ,CAAC,CAAC;;AAEpD,QAAI,IAAI,MAAM;KACb,MAAM,UAAU,IAAI,OAAO,iBAAiB,KAAK,KAAK;AACtD,eAAU,KAAK,IAAI,IAAI,KAAK,IAAI,KAAK,IAAI,QAAQ,CAAC,CAAC;;AAEpD,QAAI,IAAI,KAAM,QAAO,IAAI,OAAO,KAAK,KAAK,MAAM;AAChD,QAAI,IAAI,iBAAiB,KAAK,EAAG,YAAW,KAAK,IAAI,eAAe,KAAK;;AAE1E,OAAI,EAAE,WAAW,KAAK,EAAG,gBAAe,EAAE;AAC1C,OAAI,EAAE,YAAY,KAAK,EAAG,YAAW,KAAK,EAAE,UAAU,KAAK;AAC3D,OAAI,EAAE,SAAS,KAAK,EAAG,cAAa,KAAK,IAAI,YAAY,EAAE,OAAO,eAAe;AACjF,OAAI,EAAE,oBAAoB,KAAK,GAAG;IACjC,IAAI,SAAS,EAAE,gBAAgB,aAAa,KAAK,KAAK,IAAI,GAAG,eAAe;IAC5E,MAAM,YAAY,EAAE,gBAAgB,oBAAoB;IACxD,MAAM,IAAI,KAAK,IAAI,QAAQ,SAAS,MAAM,aAAa,KAAK,MAAM;IAClE,MAAM,OAAO,KAAK,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;AACxC,QAAI,OAAO,UAAW,WAAU,EAAE,gBAAgB,kBAAkB,OAAO,OAAO,IAAI;AACtF,sBAAkB;;AAEnB,OAAI,EAAE,qBAAqB,KAAK,EAAG,oBAAmB,KAAK,IAAI,mBAAmB,EAAE,iBAAiB,YAAY,MAAM,EAAE,SAAS,iBAAiB,KAAK,IAAI,GAAG,eAAe,EAAE;AAChL,OAAI,EAAE,eAAe,KAAK,EAAG,cAAa,EAAE;AAC5C,OAAI,EAAE,kBAAkB,KAAK,GAAG;IAC/B,MAAM,YAAY,yBAAyB,MAAM,aAAa,GAAG,YAAY,EAAE,eAAe,SAAS,OAAO,IAAI;AAClH,QAAI,EAAE,cAAc,cAAc,SAAU,WAAU;aAC7C,EAAE,cAAc,cAAc,SAAU,WAAU;QACtD,UAAS;;AAEf,OAAI,EAAE,WAAW,KAAK,GAAG;AACxB,QAAI,EAAE,OAAO,gBAAgB,KAAK,EAAG,gBAAe,IAAI,iBAAiB,EAAE,OAAO,cAAc;AAChG,QAAI,EAAE,OAAO,gBAAgB,KAAK,EAAG,gBAAe,EAAE,OAAO,eAAe,KAAK;AACjF,QAAI,EAAE,OAAO,YAAa,eAAc,EAAE,OAAO;;AAElD,OAAI,EAAE,gBAAgB,KAAK,GAAG;AAC7B,kBAAc,EAAE,eAAe,EAAE,SAAS,iBAAiB;AAC3D,iBAAa,EAAE,cAAc;;AAE9B,OAAI,EAAE,WAAW;IAChB,MAAM,YAAY,WAAW,EAAE,UAAU;IACzC,MAAM,eAAe,SAAS;KAC7B,GAAG;KACH,GAAG;KACH,GAAG;KACH,GAAG;KACH;IACD,MAAM,cAAc;AACpB,YAAQ;KACP,GAAG,aAAa,KAAK,IAAI,eAAe,UAAU,IAAI;KACtD,GAAG,aAAa,KAAK,IAAI,eAAe,UAAU,IAAI;KACtD,GAAG,aAAa,KAAK,IAAI,eAAe,UAAU,IAAI;KACtD,GAAG,aAAa,KAAK,IAAI,eAAe,UAAU,IAAI;KACtD;;;QAGG;EACN,MAAM,aAAa;EACnB,IAAI,UAAU,MAAM,aAAa,MAAM,aAAa;EACpD,IAAI,WAAW,KAAK,IAAI,GAAG,OAAO,cAAc,EAAE;AAClD,MAAI,WAAW,SAAS,QAAQ;AAC/B,aAAU,MAAM,aAAa;AAC7B,cAAW,KAAK,IAAI,GAAG,OAAO,cAAc,EAAE;aACpC,WAAW,SAAS,QAAQ;AACtC,aAAU,MAAM,aAAa;AAC7B,cAAW,KAAK,IAAI,GAAG,OAAO,cAAc,EAAE;;EAE/C,MAAM,KAAK,wBAAwB,YAAY,SAAS,SAAS;EACjE,MAAM,IAAI,WAAW;AACrB,MAAI,CAAC,KAAK,MAAM,EAAG;AACnB,MAAI,EAAE,MAAM,KAAK,EAAG,WAAU,EAAE,IAAI;AACpC,MAAI,EAAE,MAAM,KAAK,EAAG,WAAU,EAAE,IAAI;AACpC,MAAI,EAAE,aAAa,KAAK,EAAG,QAAO,EAAE,WAAW,WAAW;AAC1D,MAAI,EAAE,UAAU,KAAK,EAAG,UAAS,KAAK,EAAE,QAAQ,KAAK;AACrD,MAAI,EAAE,WAAW,KAAK,EAAG,WAAU,KAAK,EAAE,SAAS,KAAK;EACxD,IAAI,eAAe,MAAM,EAAE,UAAU,KAAK,KAAK;AAC/C,MAAI,EAAE,WAAW;GAChB,MAAM,UAAU,EAAE,YAAY,KAAK,KAAK,KAAK;AAC7C,mBAAgB,KAAK,IAAI,QAAQ;;AAElC,YAAU;AACV,MAAI,EAAE,YAAY,KAAK,EAAG,YAAW,KAAK,EAAE,UAAU,KAAK;AAC3D,MAAI,EAAE,SAAS,KAAK,EAAG,cAAa,KAAK,IAAI,YAAY,EAAE,OAAO,GAAG;AACrE,MAAI,EAAE,OAAO;GACZ,MAAM,YAAY,WAAW,EAAE,MAAM;GACrC,MAAM,eAAe,SAAS;IAC7B,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH;AACD,WAAQ;IACP,GAAG,aAAa,KAAK,IAAI,MAAM,UAAU,IAAI;IAC7C,GAAG,aAAa,KAAK,IAAI,MAAM,UAAU,IAAI;IAC7C,GAAG,aAAa,KAAK,IAAI,MAAM,UAAU,IAAI;IAC7C,GAAG,aAAa,KAAK,IAAI,MAAM,UAAU,IAAI;IAC7C;;;AAGH,QAAO;EACN;EACA;EACA;EACA;EACA;EACA;EACA;EACA,SAAS,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,QAAQ,CAAC;EAC1C;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,aAAa,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,YAAY,CAAC;EAClD;EACA;EACA;EACA;EACA;EACA;;AAEF,SAAS,kBAAkB,KAAK,MAAM,OAAO;CAC5C,IAAI,aAAa,MAAM,cAAc;AACrC,KAAI,cAAc,SAAS,WAAW,CAAE,cAAa;AACrD,KAAI,cAAc,SAAS,WAAW,CAAE;CACxC,MAAM,WAAW,MAAM,YAAY;CACnC,MAAM,WAAW,cAAc,QAAQ,YAAY,MAAM,YAAY,IAAI,QAAQ,KAAK,GAAG,UAAU,MAAM,aAAa;CACtH,MAAM,YAAY,MAAM,UAAU,MAAM,eAAe,MAAM,cAAc;CAC3E,IAAI,aAAa;AACjB,KAAI,YAAY,aAAa,IAAI,QAAQ;EACxC,MAAM,kBAAkB,MAAM,gBAAgB,YAAY,IAAI;EAC9D,MAAM,0BAA0B,MAAM,eAAe,KAAK,mBAAmB,SAAS,aAAa;AACnG,eAAa,cAAc,QAAQ,YAAY,MAAM,YAAY,IAAI,QAAQ,wBAAwB,UAAU,MAAM,aAAa,IAAI;;AAEvI,KAAI,CAAC,UAAU,aAAa,aAAa,CAAC,YAAY,WAAW;EAChE,MAAM,UAAU,gBAAgB,WAAW;AAC3C,gBAAc,gBAAgB,IAAI,QAAQ,YAAY,SAAS,KAAK,GAAG,MAAM,SAAS,CAAC,OAAO,QAAQ;AACrG,WAAQ,KAAK,oDAAoD,WAAW,IAAI,IAAI;IACnF;AACF;;CAED,MAAM,gBAAgB,MAAM,iBAAiB;CAC7C,MAAM,aAAa,MAAM,eAAe,KAAK,KAAK,MAAM,aAAa,KAAK,MAAM,aAAa,WAAW,MAAM,cAAc,WAAW;CACvI,MAAM,QAAQ,MAAM,SAAS;CAC7B,MAAM,YAAY,MAAM,aAAa;CACrC,MAAM,UAAU,MAAM,YAAY,IAAI,MAAM,sBAAsB,MAAM,WAAW,IAAI;CACvF,IAAI,eAAe,MAAM;CACzB,IAAI;AACJ,KAAI,MAAM,YAAY;EACrB,MAAM,UAAU,MAAM,OAAO;EAC7B,MAAM,sBAAsB,MAAM,eAAe,KAAK,IAAI,KAAK,MAAM,MAAM,aAAa,MAAM,QAAQ,GAAG;AACzG,YAAU,wBAAwB,MAAM,MAAM,MAAM,SAAS,GAAG,GAAG,qBAAqB,MAAM,WAAW,SAAS,MAAM,WAAW,UAAU,MAAM,WAAW,QAAQ,kBAAkB,GAAG,MAAM,WAAW,eAAe,aAAa,MAAM,aAAa;AAC3P,iBAAe,QAAQ;;CAExB,MAAM,QAAQ,WAAW,MAAM,OAAO,SAAS,eAAe,iBAAiB,MAAM,MAAM,EAAE,aAAa,GAAG,MAAM;CACnH,MAAM,cAAc,MAAM,cAAc;EACvC,GAAG,MAAM;EACT,aAAa,MAAM,gBAAgB,KAAK,IAAI,MAAM,cAAc,MAAM,YAAY;EAClF,YAAY,MAAM,eAAe,KAAK,IAAI,MAAM,aAAa,MAAM,YAAY;EAC/E,eAAe,MAAM,kBAAkB,KAAK,IAAI,MAAM,gBAAgB,MAAM,YAAY;EACxF,GAAG,KAAK;CACT,IAAI;CACJ,IAAI;AACJ,KAAI,MAAM,SAAS,MAAM;AACxB,aAAW,KAAK,IAAI,GAAG,MAAM,QAAQ,UAAU,EAAE;AACjD,aAAW,aAAa,QAAQ,cAAc,UAAU,UAAU,eAAe,YAAY,UAAU,OAAO,UAAU;QAClH;AACN,aAAW,aAAa,QAAQ,cAAc,UAAU,UAAU,eAAe,YAAY,KAAK,GAAG,OAAO,UAAU;AACtH,aAAW,SAAS;;CAErB,MAAM,aAAa,MAAM,YAAY,MAAM,QAAQ,QAAQ;CAC3D,MAAM,cAAc,MAAM,WAAW,WAAW;CAChD,MAAM,UAAU,UAAU,UAAU,UAAU,WAAW,CAAC,SAAS,QAAQ,YAAY,eAAe,KAAK,KAAK,eAAe,aAAa,CAAC,eAAe,gBAAgB,UAAU,QAAQ,UAAU,OAAO,IAAI,SAAS,SAAS,SAAS,SAAS,aAAa,OAAO,cAAc,UAAU,UAAU,eAAe,YAAY,UAAU,OAAO,aAAa,YAAY,aAAa,OAAO,UAAU;CAChZ,MAAM,SAAS,MAAM,iBAAiB;CACtC,MAAM,QAAQ,MAAM,UAAU,QAAQ,CAAC,eAAe,CAAC,MAAM,YAAY,MAAM,UAAU,SAAS,SAAS,UAAU,KAAK;CAC1H,MAAM,WAAW;EAChB,GAAG,MAAM;EACT,GAAG,MAAM,QAAQ,KAAK,WAAW,WAAW,QAAQ,IAAI,WAAW,WAAW,QAAQ;EACtF;CACD,MAAM,OAAO,MAAM;CACnB,MAAM,SAAS,MAAM,eAAe,UAAU,OAAO,MAAM,eAAe,YAAY,MAAM,cAAc,OAAO,OAAO,MAAM,eAAe,YAAY,SAAS,MAAM,YAAY,GAAG,IAAI;CAC3L,MAAM,gBAAgB,mBAAmB,YAAY,QAAQ,SAAS,cAAc;CACpF,IAAI,WAAW;AACf,KAAI,UAAU,CAAC,iBAAiB,IAAI,QAAQ;EAC3C,MAAM,gBAAgB,gBAAgB,MAAM,WAAW;EACvD,MAAM,aAAa,KAAK,IAAI,IAAI,gBAAgB,OAAO,IAAI,GAAG,OAAO;AACrE,MAAI,aAAa,GAAG;GACnB,MAAM,kBAAkB,cAAc,SAAS,aAAa;GAC5D,MAAM,UAAU,cAAc,QAAQ,YAAY,KAAK,IAAI,QAAQ,iBAAiB,UAAU,MAAM,aAAa;AACjH,OAAI,SAAS,UAAW,YAAW;;;CAGrC,MAAM,gBAAgB,OAAO,OAAO;CACpC,MAAM,UAAU,MAAM,cAAc,KAAK,IAAI,MAAM,YAAY,MAAM,UAAU,KAAK,KAAK,MAAM,QAAQ,KAAK,IAAI,MAAM,QAAQ,MAAM,MAAM,MAAM;CAChJ,MAAMO,aAAW,MAAM,eAAe,KAAK,IAAI,MAAM,aAAa;CAClE,MAAM,aAAa,MAAM,YAAY,MAAM,OAAO,UAAU,CAAC,MAAM,KAAK,IAAIA,aAAW,MAAM,aAAa,KAAK,aAAa,MAAM,OAAO,UAAU,CAAC,MAAM,KAAK,IAAIA;CACnK,MAAM,SAAS,MAAM,YAAY,IAAI,MAAM,SAAS,KAAK,SAAS,MAAM,QAAQ,UAAU,CAAC,MAAM,MAAM,IAAIA;CAC3G,MAAM,eAAe,MAAM,MAAM;CACjC,MAAM,gBAAgB,MAAM,OAAO;CACnC,MAAM,UAAU,MAAM,WAAW;CACjC,MAAM,YAAY,MAAM,cAAc;CACtC,IAAI,eAAe;AACnB,MAAK,MAAM,OAAO,OAAO,OAAQ,KAAI,CAAC,IAAI,WAAW,IAAI,YAAY,aAAc,gBAAe,IAAI;CACtG,MAAM,aAAa,eAAe;CAClC,MAAM,OAAO,YAAY,aAAa,iBAAiB,YAAY,gBAAgB,YAAY,MAAM,KAAK,GAAG,MAAM,KAAK,EAAE,QAAQ,YAAY,GAAG,GAAG,MAAM,EAAE;AAC5J,KAAI,MAAM,qBAAqB;EAC9B,MAAM,eAAe,MAAM,gBAAgB,MAAM,gBAAgB;EACjE,IAAI,sBAAsB;EAC1B,MAAM,cAAc,MAAM,WAAW;AACrC,MAAI,MAAM,gBAAgB,MAAO,uBAAsB;OAClD;AACJ,QAAK,MAAM,SAAS,OAAO,QAAQ;AAClC,QAAI,MAAM,QAAS;IACnB,MAAM,UAAU,MAAM;IACtB,MAAM,QAAQ,KAAK,YAAY;IAC/B,MAAM,EAAE,MAAM,UAAU,oBAAoB,SAASA,YAAU,YAAY,QAAQ,OAAO,YAAY,KAAK;IAC3G,MAAM,SAAS,sBAAsB,MAAM,OAAO,WAAW,cAAc,eAAe,SAAS,SAASA,YAAU,YAAY,QAAQ,OAAO,aAAa,MAAM;AACpK,QAAI,OAAO,WAAW,OAAO,UAAU,oBAAqB,uBAAsB,OAAO;;AAE1F,QAAK,MAAMS,WAAS,OAAO,QAAQ;IAClC,MAAM,QAAQ,MAAM,MAAM,WAAW,YAAY,SAAS,IAAI,KAAK,MAAMA,QAAM,KAAK,WAAW,eAAe,IAAI,eAAe;IACjI,MAAM,EAAE,MAAM,UAAU,oBAAoB,SAAST,YAAU,YAAY,QAAQ,OAAO,YAAY,KAAK;IAC3G,MAAM,SAAS,sBAAsB,MAAM,OAAO,WAAW,cAAc,eAAe,SAAS,SAASA,YAAU,YAAY,QAAQ,OAAO,aAAa,KAAK;AACnK,QAAI,OAAO,WAAW,OAAO,UAAU,oBAAqB,uBAAsB,OAAO;;;AAG3F,MAAI,sBAAsB,MAAM;GAC/B,MAAM,YAAY,MAAM,SAAS,OAAO,MAAM,QAAQ,SAAS,QAAQ,UAAU;GACjF,MAAM,aAAa,MAAM,UAAU,OAAO,MAAM,SAAS,SAAS,SAAS,UAAU;AACrF,OAAI,SAAS,UAAU,MAAM;IAC5B,MAAM;KACL,GAAG,MAAM,QAAQ;KACjB,GAAG,MAAM,QAAQ;KACjB,OAAO;KACP,QAAQ;KACR;IACD,IAAI;IACJ,IAAI;IACJ,EAAE,MAAM,qBAAqB,EAAE,SAAS,qBAAqB,CAAC;;;AAGjE,KAAI,OAAO,SAAS,OAAO,MAAM,SAAS,EAAG,MAAK,MAAM,KAAK,OAAO,OAAO;EAC1E,MAAM,KAAK,EAAE,gBAAgB;AAC7B,MAAI,SAAS,UAAU,MAAM;GAC5B,MAAM;IACL,GAAG,MAAM,QAAQ,IAAI,UAAU,EAAE;IACjC,GAAG,SAAS,IAAI,UAAU,EAAE;IAC5B,OAAO,EAAE;IACT,QAAQ,EAAE;IACV;GACD;GACA,IAAI;GACJ,EAAE,EAAE,YAAY,EAAE,SAAS,MAAM,WAAW,GAAG,CAAC;;CAElD,MAAM,YAAY,WAAW,MAAM,SAAS,QAAQ;CACpD,MAAM,iBAAiB,WAAW,MAAM,kBAAkB,SAAS;CACnE,MAAM,iBAAiB,IAAI,aAAa,OAAO,OAAO,OAAO;CAC7D,IAAI,gBAAgB;CACpB,IAAI,gBAAgB;AACpB,KAAI,OAAO,OAAO,SAAS,GAAG;EAC7B,MAAM,WAAW,OAAO,OAAO,QAAQ,QAAQ,CAAC,IAAI,QAAQ;AAC5D,MAAI,SAAS,SAAS,GAAG;AACxB,oBAAiB,SAAS,GAAG,IAAI,SAAS,SAAS,SAAS,GAAG,KAAK;AACpE,oBAAiB,SAAS,GAAG,IAAI,SAAS,SAAS,SAAS,GAAG,KAAK;;;CAGtE,MAAM,SAAS;EACd,YAAY,OAAO;EACnB,YAAY,OAAO;EACnB,YAAY,OAAO;EACnB,cAAc;GACb,GAAG;GACH,GAAG;GACH;EACD;AACD,KAAI,MAAM,aAAa,MAAM,UAAU,SAAS,GAC/C;OAAK,MAAM,UAAU,MAAM,UAAW,KAAI,eAAe,UAAU,MAAM,QAAQ,OAAO,UAAU,EAAE;GACnG,MAAM,SAAS;AACf,OAAI,OAAO,OAAO,aAAa,KAAK,KAAK,OAAO,MAAM,aAAa,GAAG;IACrE,MAAM,iBAAiB,OAAO,MAAM;IACpC,MAAM,mCAAmC,IAAI,KAAK;AAClD,SAAK,IAAI,OAAO,GAAG,OAAO,OAAO,OAAO,QAAQ,QAAQ;KACvD,MAAM,OAAO,OAAO,OAAO,MAAM,aAAa;KAC9C,IAAI,OAAO,iBAAiB,IAAI,KAAK;AACrC,SAAI,CAAC,MAAM;AACV,aAAO,EAAE;AACT,uBAAiB,IAAI,MAAM,KAAK;;AAEjC,UAAK,KAAK,KAAK;;AAEhB,SAAK,MAAM,eAAe,iBAAiB,QAAQ,EAAE;KACpD,MAAM,6BAA6B,IAAI,KAAK;AAC5C,UAAK,MAAM,QAAQ,aAAa;MAC/B,MAAM,MAAM,OAAO,OAAO,MAAM;MAChC,MAAM,UAAU,WAAW,IAAI,IAAI;AACnC,UAAI,QAAS,SAAQ,KAAK,KAAK;UAC1B,YAAW,IAAI,KAAK,CAAC,KAAK,CAAC;;KAEjC,MAAM,WAAW,MAAM,KAAK,WAAW,QAAQ,CAAC;KAChD,MAAM,YAAY,MAAM;MACvB,MAAM,MAAM,OAAO,OAAO,EAAE;AAC5B,aAAO,IAAI,YAAY,IAAI;;AAE5B,cAAS,MAAM,GAAG,MAAM,SAAS,EAAE,GAAG,SAAS,EAAE,CAAC;KAClD,MAAM,UAAU,EAAE;AAClB,UAAK,MAAM,WAAW,UAAU;MAC/B,MAAM,MAAM,OAAO,OAAO,QAAQ;MAClC,MAAM,IAAI,yBAAyB,QAAQ,KAAK,QAAQ,MAAM,SAAS,MAAM,SAAS,GAAG,MAAM,OAAO,GAAG;AACzG,cAAQ,KAAK,EAAE;;KAEhB,IAAI,iBAAiB;AACrB,UAAK,IAAI,IAAI,GAAG,IAAI,SAAS,SAAS,GAAG,IAAK,mBAAkB,iBAAiB,QAAQ;KACzF,MAAM,UAAU,OAAO,OAAO,YAAY,KAAK,WAAW;KAC1D,MAAM,YAAY,UAAU,UAAU,UAAU,UAAU,SAAS,UAAU,QAAQ,UAAU,SAAS,UAAU;KAClH,IAAI,WAAW;AACf,UAAK,IAAI,IAAI,GAAG,IAAI,SAAS,QAAQ,KAAK;MACzC,IAAI,QAAQ;AACZ,UAAI,cAAc,SAAU,UAAS,iBAAiB;eAC7C,cAAc,QAAS,UAAS;AACzC,WAAK,MAAM,QAAQ,SAAS,GAAI,gBAAe,SAAS;AACxD,UAAI,IAAI,SAAS,SAAS,EAAG,aAAY,iBAAiB,QAAQ;;;;;;CAMvE,IAAI,cAAc,IAAI,aAAa,KAAK,IAAI,MAAM,gBAAgB,GAAG,CAAC;CACtE,MAAM,kBAAkB,QAAQ,UAAU,MAAM,GAAG,YAAY,KAAK,MAAM,MAAM,QAAQ,UAAU,eAAe,OAAO;CACxH,MAAM,gCAAgC,IAAI,KAAK;CAC/C,MAAM,iBAAiB,WAAW;AACjC,MAAI,cAAc,IAAI,OAAO,CAAE;AAC/B,gBAAc,IAAI,OAAO;EACzB,MAAM,UAAU,EAAE;AAClB,OAAK,MAAM,OAAO,OAAO,QAAQ;GAChC,MAAM,KAAK,IAAI,GAAG;AAClB,OAAI,OAAO,KAAK,MAAM,IAAI,QAAQ,cAAc,UAAU,eAAe,QAAQ,IAAI,IAAI,CAAC,OAAO,QAAQ,IAAI,GAAG,CAAE,SAAQ,KAAK,GAAG;;AAEnI,MAAI,QAAQ,SAAS,EAAG,eAAc,aAAa,QAAQ,QAAQ;;CAEpE,MAAM,eAAe,QAAQ,UAAU;AACtC,OAAK,MAAM,QAAQ,cAAc,OAAQ,QAAO,MAAM;AACtD,MAAI,eAAe,QAAQ,MAAM,EAAE;GAClC,MAAM,OAAO,OAAO,QAAQ,IAAI,MAAM,GAAG,QAAQ;AACjD,OAAI,KAAM,QAAO;;AAElB,SAAO,OAAO,WAAW,IAAI,MAAM,GAAG,UAAU,IAAI,MAAM;;CAE3D,MAAM,qBAAqB,YAAY,eAAe,UAAU,GAAG,UAAU,GAAG,cAAc,eAAe;EAC5G,MAAM,cAAc,gBAAgB;AACpC,MAAI,YAAY,SAAS,YAAa,eAAc,IAAI,aAAa,YAAY;EACjF,MAAM,OAAO;EACb,IAAI,eAAe;AACnB,gBAAc,WAAW;AACzB,OAAK,IAAI,IAAI,GAAG,IAAI,OAAO,OAAO,QAAQ,KAAK;GAC9C,MAAM,QAAQ,OAAO,OAAO;AAC5B,OAAI,MAAM,QAAS;AACnB,OAAI,cAAc,CAAC,WAAW,MAAM,CAAE;GACtC,MAAM,KAAK,YAAY,YAAY,MAAM;AACzC,OAAI,CAAC,MAAM,GAAG,UAAU,KAAK,GAAG,WAAW,EAAG;GAC9C,MAAM,UAAU,MAAM;GACtB,MAAM,QAAQ,KAAK,YAAY;GAC/B,IAAI,UAAU,MAAM,WAAW;GAC/B,IAAI,SAAS;GACb,IAAI,SAAS;GACb,IAAI,MAAM;GACV,IAAI,QAAQ;GACZ,IAAI,aAAa,iBAAiB,KAAK,IAAI,eAAe;AAC1D,OAAI,MAAM,gBAAgB,OAAO;IAChC,MAAM,EAAE,MAAM,UAAU,oBAAoB,SAASA,YAAU,YAAY,QAAQ,OAAO,YAAY,KAAK;IAC3G,MAAM,SAAS,sBAAsB,MAAM,OAAO,WAAW,cAAc,eAAe,SAAS,SAASA,YAAU,YAAY,QAAQ,OAAO,MAAM,WAAW,GAAG,MAAM;AAC3K,QAAI,CAAC,OAAO,QAAS;AACrB,cAAU,OAAO;AACjB,aAAS,OAAO;AAChB,aAAS,OAAO;AAChB,UAAM,OAAO;AACb,YAAQ,OAAO;AACf,QAAI,iBAAiB,KAAK,EAAG,cAAa,OAAO;;GAElD,IAAI,eAAe;GACnB,IAAI,eAAe;GACnB,IAAI;GACJ,IAAI,SAAS;GACb,IAAI,iBAAiB;GACrB,IAAI,mBAAmB;GACvB,IAAI,WAAW;GACf,IAAI,UAAU;GACd,IAAI,UAAU;GACd,IAAI;GACJ,IAAI,cAAc;AAClB,OAAI,MAAM,aAAa,MAAM,UAAU,SAAS,GAAG;IAClD,MAAM,UAAU,oBAAoB,MAAM,WAAW,OAAO,QAAQ;KACnE;KACA;KACA;KACA;KACA,QAAQ;KACR,QAAQ;KACR;KACA;KACA,OAAO;KACP,EAAE,OAAO,MAAM,SAAS,GAAG,MAAM,OAAO,IAAI,MAAM,QAAQ;AAC3D,aAAS,QAAQ;AACjB,aAAS,QAAQ;AACjB,UAAM,QAAQ;AACd,YAAQ,QAAQ;AAChB,mBAAe,QAAQ;AACvB,mBAAe,QAAQ;AACvB,cAAU,QAAQ;AAClB,QAAI,iBAAiB,KAAK,EAAG,cAAa,QAAQ;AAClD,QAAI,QAAQ,MAAO,iBAAgB,QAAQ;AAC3C,QAAI,QAAQ,gBAAgB,KAAK,EAAG,WAAU,+BAA+B,MAAM,WAAW,OAAO,YAAY,QAAQ,aAAa,QAAQ,cAAc,EAAE;AAC9J,aAAS,QAAQ,UAAU;AAC3B,qBAAiB,QAAQ,kBAAkB;AAC3C,uBAAmB,QAAQ,oBAAoB;AAC/C,eAAW,QAAQ,YAAY;AAC/B,cAAU,QAAQ,WAAW;AAC7B,cAAU,QAAQ,WAAW;AAC7B,mBAAe,QAAQ;AACvB,kBAAc,QAAQ,eAAe;;AAEtC,aAAU,eAAe;GACzB,IAAI,SAAS,MAAM;AACnB,OAAI,MAAM,SAAS;IAClB,MAAM,cAAc,MAAM,SAAS,MAAM,MAAM,OAAO;IACtD,MAAM,eAAe,OAAO,OAAO,SAAS,IAAI,OAAO,OAAO,OAAO,OAAO,SAAS,GAAG,IAAI,WAAW,MAAM,QAAQ;AACrH,aAAS,sBAAsB,MAAM,GAAG,MAAM,QAAQ,OAAO,cAAc,MAAM,SAAS,WAAW;;GAEtG,MAAM,gBAAgB,MAAM,uBAAuB,KAAK,KAAK,MAAM,cAAc,MAAM;GACvF,MAAM,YAAY,MAAM,OAAO,WAAW,MAAM,KAAK,GAAG,KAAK;GAC7D,MAAM,MAAM,iBAAiB,kBAAkB,gBAAgB,iBAAiB,aAAa;GAC7F,MAAM,iBAAiB,cAAc;IACpC,MAAM,SAAS,eAAe;IAC9B,MAAM,YAAY,MAAM,aAAa,WAAW,WAAW;IAC3D,IAAI,SAAS,GAAG,QAAQ,YAAY,IAAI;IACxC,IAAI,SAAS,GAAG,SAAS,YAAY,IAAI;AACzC,QAAI,WAAW,GAAG;KACjB,MAAM,cAAc;KACpB,MAAM,QAAQ,KAAK,IAAI,KAAK,cAAc,OAAO;KACjD,MAAM,SAAS,QAAQ,IAAI,cAAc,QAAQ;AACjD,eAAU;AACV,eAAU;;IAEX,MAAM,WAAW,OAAO,MAAM,uBAAuB;IACrD,IAAI;IACJ,IAAI;AACJ,QAAI,MAAM,wBAAwB,KAAK,GAAG;KACzC,MAAM,MAAM,GAAG,WAAW,YAAY;KACtC,MAAM,MAAM,CAAC,GAAG,WAAW,YAAY;KACvC,MAAM,OAAO,KAAK,IAAI,SAAS;KAC/B,MAAM,OAAO,KAAK,IAAI,SAAS;KAC/B,MAAM,aAAa,MAAM,OAAO,MAAM;KACtC,MAAM,aAAa,MAAM,OAAO,MAAM;AACtC,aAAQ,SAAS,aAAa,MAAM,QAAQ,IAAI,UAAU,UAAU;AACpE,aAAQ,MAAM,IAAI,aAAa,SAAS,IAAI,UAAU;WAChD;AACN,aAAQ,SAAS,GAAG,WAAW,YAAY,SAAS,MAAM,QAAQ,IAAI,UAAU,UAAU;AAC1F,aAAQ,MAAM,IAAI,GAAG,WAAW,YAAY,SAAS,SAAS,IAAI,UAAU;;AAE7E,QAAI,cAAc;KACjB,MAAM,QAAQ,yBAAyB;MACtC,OAAO,GAAG,QAAQ;MAClB,QAAQ,GAAG,SAAS;MACpB,WAAW,WAAW,YAAY,OAAO;MACzC,YAAY,WAAW,aAAa,QAAQ;MAC5C,EAAE,aAAa;KAChB,MAAM,OAAO,KAAK,IAAI,SAAS;KAC/B,MAAM,OAAO,KAAK,IAAI,SAAS;KAC/B,MAAM,cAAc,MAAM,MAAM,IAAI,OAAO,SAAS,MAAM,MAAM,OAAO;KACvE,MAAM,cAAc,CAAC,MAAM,MAAM,OAAO,SAAS,MAAM,MAAM,IAAI,OAAO;AACxE,cAAS;AACT,cAAS;;AAEV,QAAI,YAAY,KAAK,YAAY,GAAG;AACnC,cAAS,SAAS;AAClB,cAAS,SAAS;;AAEnB,SAAK,SAAS,KAAK;AACnB,SAAK,SAAS,KAAK;AACnB,SAAK,SAAS,KAAK;AACnB,SAAK,SAAS,KAAK;AACnB,SAAK,SAAS,KAAK,GAAG;AACtB,SAAK,SAAS,KAAK,GAAG;AACtB,SAAK,SAAS,KAAK,GAAG,QAAQ,GAAG;AACjC,SAAK,SAAS,KAAK,GAAG,SAAS,GAAG;AAClC,SAAK,SAAS,KAAK,GAAG,YAAY;AAClC,SAAK,SAAS,KAAK,GAAG,YAAY;AAClC,SAAK,SAAS,MAAM,GAAG;AACvB,SAAK,SAAS,MAAM,GAAG;AACvB,SAAK,SAAS,MAAM;AACpB,SAAK,SAAS,MAAM;AACpB,SAAK,SAAS,MAAM;AACpB,SAAK,SAAS,MAAM;AACpB,SAAK,SAAS,MAAM,IAAI;AACxB,SAAK,SAAS,MAAM,IAAI;AACxB,SAAK,SAAS,MAAM,IAAI;IACxB,MAAM,cAAc,MAAM,WAAW;AACrC,SAAK,SAAS,MAAM,IAAI,IAAI,UAAU,cAAc;AACpD,SAAK,SAAS,MAAM;AACpB,SAAK,SAAS,MAAM;AACpB,SAAK,SAAS,MAAM;AACpB,SAAK,SAAS,MAAM;AACpB;;AAED,iBAAc,EAAE;;AAEjB,SAAO;GACN;GACA;GACA;;AAEF,KAAI,MAAM,WAAW,MAAM,QAAQ,SAAS,EAAG,MAAK,MAAM,UAAU,MAAM,SAAS;EAClF,MAAM,cAAc,WAAW,OAAO,MAAM;EAC5C,MAAM,KAAK,OAAO,QAAQ,KAAK;EAC/B,MAAM,KAAK,OAAO,QAAQ,KAAK;EAC/B,MAAM,OAAO,OAAO,cAAc;EAClC,MAAM,EAAE,MAAM,YAAY,cAAc,uBAAuB,kBAAkB,UAAU,aAAa,IAAI,IAAI,KAAK;AACrH,MAAI,qBAAqB,GAAG;GAC3B,MAAM,gBAAgB,WAAW,SAAS,GAAG,qBAAqB,GAAG;GACrE,MAAM,UAAU,MAAM,cAAc,WAAW,MAAM;AACrD,OAAI,SAAS,aAAa,KAAK,MAAM,IAAI,SAAS,mBAAmB,EAAE,UAAU,eAAe,oBAAoB,OAAO,OAAO,IAAI,SAAS,iBAAiB,EAAE,IAAI,SAAS,kBAAkB,EAAE;IAClM,SAAS,MAAM,WAAW;IAC1B,WAAW,MAAM;IACjB,aAAa;IACb,CAAC;;;CAGJ,MAAM,iBAAiB,MAAM,WAAW,MAAM,MAAM,WAAW,KAAK,EAAE,OAAO,eAAe,EAAE,OAAO,YAAY,UAAU,KAAK,EAAE;AAClI,KAAI,kBAAkB,WAAW,gBAAgB;EAChD,MAAM,UAAU;EAChB,MAAM,KAAK,QAAQ,OAAO;AAC1B,MAAI,IAAI;GACP,MAAM,SAAS,QAAQ,OAAO;GAC9B,IAAI,SAAS,GAAG;GAChB,IAAI,QAAQ,GAAG;AACf,OAAI,QAAQ;IACX,MAAM,KAAK,wBAAwB,MAAM,SAAS,MAAM,MAAM,OAAO,KAAK,OAAO,WAAW,OAAO,SAAS,OAAO,MAAM,OAAO,gBAAgB;AAChJ,aAAS,KAAK,IAAI,GAAG,GAAG,SAAS,GAAG;AACpC,YAAQ,GAAG,SAAS,IAAI,KAAK,IAAI,GAAG,GAAG,IAAI;UACrC;IACN,MAAM,UAAU,KAAK,IAAI,KAAK,IAAI,IAAI,MAAM,SAAS,KAAK,GAAG,KAAK;AAClE,aAAS,GAAG,SAAS;;GAEtB,MAAM,MAAM,QAAQ,KAAK,KAAK;GAC9B,MAAM,aAAa,KAAK,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,SAAS,GAAG,CAAC;GAC5D,MAAM,UAAU,SAAS;GACzB,MAAM,YAAY,WAAW,GAAG,SAAS,UAAU;AACnD,QAAK,IAAI,IAAI,GAAG,KAAK,YAAY,KAAK;IACrC,MAAM,OAAO,IAAI;IACjB,MAAM,KAAK,OAAO,KAAK,IAAI,IAAI;IAC/B,MAAM,KAAK,OAAO,KAAK,IAAI,IAAI;IAC/B,MAAM,IAAI,IAAI;IACd,MAAM,eAAe,GAAG,gBAAgB,OAAO,IAAI,MAAM,GAAG,cAAc,KAAK;IAC/E,MAAM,EAAE,MAAM,WAAW,cAAc,eAAe,kBAAkB,UAAU;KACjF,GAAG;KACH,GAAG,UAAU,IAAI;KACjB,EAAE,IAAI,IAAI,EAAE;AACb,QAAI,aAAa,GAAG;KACnB,MAAM,gBAAgB,UAAU,SAAS,GAAG,aAAa,GAAG;KAC5D,MAAM,UAAU,MAAM,cAAc,WAAW,MAAM;AACrD,SAAI,SAAS,aAAa,KAAK,MAAM,IAAI,SAAS,mBAAmB,EAAE,UAAU,eAAe,YAAY,GAAG,SAAS,SAAS,IAAI,SAAS,iBAAiB,EAAE,IAAI,SAAS,kBAAkB,EAAE;MACjM,UAAU,MAAM,WAAW,KAAK;MAChC,WAAW,MAAM;MACjB,aAAa;MACb,CAAC;;;;;AAKN,KAAI,aAAa,YAAY;EAC5B,MAAM,cAAc,WAAW,MAAM,OAAO;EAC5C,MAAM,EAAE,MAAM,YAAY,cAAc,uBAAuB,kBAAkB,YAAY,YAAY;AACzG,MAAI,qBAAqB,GAAG;GAC3B,MAAM,gBAAgB,WAAW,SAAS,GAAG,qBAAqB,GAAG;GACrE,MAAM,UAAU,MAAM,cAAc,WAAW,MAAM;AACrD,OAAI,SAAS,aAAa,KAAK,MAAM,IAAI,SAAS,mBAAmB,EAAE,YAAY,eAAe,oBAAoB,MAAM,UAAU,WAAW,IAAI,SAAS,iBAAiB,EAAE,IAAI,SAAS,kBAAkB,EAAE;IACjN,SAAS,MAAM,WAAW;IAC1B,WAAW,MAAM;IACjB,aAAa;IACb,CAAC;;;CAGJ,MAAM,8BAA8B,IAAI,KAAK;CAC7C,IAAI,gBAAgB;AACpB,MAAK,MAAM,OAAO,OAAO,OAAQ,KAAI,IAAI,QAAQ,IAAI,SAAS,UAAU;AACvE,cAAY,IAAI,IAAI,KAAK;AACzB,kBAAgB;;CAEjB,MAAM,QAAQ,MAAM,cAAc,WAAW,MAAM;AACnD,KAAI,eAAe;AAClB,cAAY,IAAI,SAAS;AACzB,OAAK,MAAM,eAAe,aAAa;AACtC,OAAI,IAAI,UAAU,CAAC,YAAY,UAAW,eAAc,eAAe,IAAI,QAAQ,YAAY;AAC/F,OAAI,CAAC,YAAY,UAAW;GAC5B,MAAM,EAAE,MAAM,UAAU,cAAc,qBAAqB,kBAAkB,aAAa,KAAK,GAAG,GAAG,GAAG,KAAK,IAAI,SAAS,IAAI,QAAQ,cAAc,YAAY;AAChK,OAAI,mBAAmB,GAAG;IACzB,MAAM,gBAAgB,SAAS,SAAS,GAAG,mBAAmB,GAAG;AACjE,QAAI,SAAS,aAAa,KAAK,MAAM,IAAI,SAAS,mBAAmB,EAAE,aAAa,eAAe,kBAAkB,MAAM,SAAS,SAAS,IAAI,SAAS,iBAAiB,EAAE,IAAI,SAAS,kBAAkB,EAAE;KAC7M,SAAS,MAAM,WAAW;KAC1B,WAAW,MAAM;KACjB,aAAa;KACb,CAAC;;;QAGE;EACN,MAAM,EAAE,MAAM,UAAU,cAAc,qBAAqB,kBAAkB,SAAS;AACtF,MAAI,mBAAmB,GAAG;GACzB,MAAM,gBAAgB,SAAS,SAAS,GAAG,mBAAmB,GAAG;AACjE,OAAI,SAAS,aAAa,KAAK,MAAM,IAAI,SAAS,mBAAmB,EAAE,UAAU,eAAe,kBAAkB,MAAM,SAAS,SAAS,IAAI,SAAS,iBAAiB,EAAE,IAAI,SAAS,kBAAkB,EAAE;IAC1M,SAAS,MAAM,WAAW;IAC1B,WAAW,MAAM;IACjB,aAAa;IACb,CAAC;;;AAGJ,MAAK,MAAMS,WAAS,OAAO,QAAQ;EAClC,MAAM,eAAe,MAAM,WAAW,YAAY,SAAS,IAAI,KAAK,MAAMA,QAAM,KAAK,WAAW,eAAe;EAC/G,MAAM,QAAQ,KAAK,eAAe,eAAe;EACjD,IAAI,UAAU,MAAM,WAAW;EAC/B,IAAI,SAAS;EACb,IAAI,SAAS;EACb,IAAI,MAAM;EACV,IAAI,QAAQ;AACZ,MAAI,MAAM,gBAAgB,OAAO;GAChC,MAAM,EAAE,MAAM,UAAU,oBAAoB,SAAST,YAAU,YAAY,QAAQ,OAAO,YAAY,KAAK;GAC3G,MAAM,SAAS,sBAAsB,MAAM,OAAO,WAAW,cAAc,eAAe,SAAS,SAASA,YAAU,YAAY,QAAQ,OAAO,MAAM,WAAW,GAAG,KAAK;AAC1K,OAAI,CAAC,OAAO,QAAS;AACrB,aAAU,OAAO;AACjB,YAAS,OAAO;AAChB,YAAS,OAAO;AAChB,SAAM,OAAO;AACb,WAAQ,OAAO;;AAEhB,MAAI,MAAM,aAAa,MAAM,UAAU,SAAS,GAAG;GAClD,MAAM,UAAU,oBAAoB,MAAM,WAAW;IACpD,WAAW;IACX,WAAW;IACX,WAAWS,QAAM;IACjB,EAAE;IACF,YAAY,OAAO;IACnB,YAAY,OAAO;IACnB,YAAY,OAAO;IACnB,EAAE;IACF;IACA;IACA;IACA;IACA,QAAQ;IACR,QAAQ;IACR;IACA,YAAY;IACZ,EAAE,KAAK;AACR,YAAS,QAAQ;AACjB,YAAS,QAAQ;AACjB,SAAM,QAAQ;AACd,WAAQ,QAAQ;AAChB,aAAU,QAAQ;;EAEnB,MAAM,WAAW,wBAAwB,IAAI,QAAQA,QAAM,MAAMA,QAAM,KAAK;EAC5E,MAAM,iBAAiBA,QAAM,OAAO;EACpC,MAAM,oBAAoB,iBAAiBA,QAAM,QAAQ;EACzD,MAAM,eAAe;GACpB,GAAG,MAAM,QAAQ,IAAIA,QAAM,IAAI,UAAU;GACzC,GAAG,SAAS,IAAIA,QAAM,IAAI,UAAU;GACpC,OAAO;GACP,QAAQ;GACR;EACD,IAAI,SAAS,IAAI,WAAW;EAC5B,MAAM,eAAe,aAAa,IAAI,iBAAiB;EACvD,MAAM,eAAe,aAAa,IAAI,iBAAiB;AACvD,WAAS,OAAO,UAAU,cAAc,aAAa;AACrD,MAAI,WAAW,KAAK,WAAW,EAAG,UAAS,OAAO,UAAU,QAAQ,OAAO;AAC3E,MAAI,QAAQ,EAAG,UAAS,OAAO,OAAO,IAAI;AAC1C,MAAI,UAAU,EAAG,UAAS,OAAO,MAAM,MAAM;AAC7C,WAAS,OAAO,UAAU,CAAC,cAAc,CAAC,aAAa;EACvD,MAAM,cAAc,MAAM,SAAS,MAAM,OAAO,SAAS,OAAO,GAAG;AACnE,MAAI,SAAS,kBAAkB,MAAM,UAAU;GAC9C,GAAG;GACH,GAAG;GACH,OAAO,SAAS;GAChB,QAAQ,SAAS;GACjB,EAAE,cAAc;GAChB;GACA,WAAW;GACX,CAAC;;AAEH,KAAI,MAAM,YAAY,QAAQ,WAAW,WAAW,QAAQ,oBAAoB,CAAC,MAAM,WAAW,OAAO,kBAAkB,QAAQ,eAAe,MAAM,KAAK,SAAS;EACrK,MAAM,YAAY,MAAM,WAAW;EACnC,MAAM,YAAY,UAAU,SAAS,MAAM,SAAS;EACpD,MAAM,cAAc,UAAU,SAAS;EACvC,MAAM,gBAAgB,UAAU,WAAW;EAC3C,IAAI,UAAU,MAAM,QAAQ,IAAI;EAChC,IAAI,UAAU,SAAS,IAAI;AAC3B,MAAI,OAAO,OAAO,SAAS,GAAG;GAC7B,MAAM,QAAQ,OAAO,OAAO,OAAO,OAAO,SAAS;GACnD,MAAM,YAAY,WAAW,SAAS;GACtC,MAAM,MAAM,MAAM,mBAAmB,MAAM,IAAI,gBAAgB,KAAK;GACpE,MAAM,OAAO,MAAM,YAAY,MAAM;GACrC,MAAM,WAAW,UAAU,UAAU,gBAAgB,UAAU,UAAU,UAAU,WAAW,KAAK;AACnG,aAAU,MAAM,QAAQ,IAAI,WAAW,MAAM,MAAM,OAAO,gBAAgB,WAAW,OAAO,MAAM;AAClG,aAAU,MAAM,IAAI,SAAS,IAAI;;AAElC,MAAI,UAAU,UAAU,aAAc,KAAI,SAAS,SAAS,MAAM;GACjE,GAAG;GACH,GAAG;GACH,OAAO,WAAW;GAClB,QAAQ;GACR,EAAE,WAAW,GAAG,EAAE,SAAS,MAAM,WAAW,GAAG,CAAC;WACxC,UAAU,UAAU,QAAS,KAAI,SAAS,SAAS,MAAM;GACjE,GAAG;GACH,GAAG,UAAU,WAAW;GACxB,OAAO,WAAW;GAClB,QAAQ;GACR,EAAE,WAAW,GAAG,EAAE,SAAS,MAAM,WAAW,GAAG,CAAC;MAC5C,KAAI,SAAS,SAAS,MAAM;GAChC,GAAG;GACH,GAAG,UAAU,WAAW;GACxB,OAAO;GACP,QAAQ;GACR,EAAE,WAAW,GAAG,EAAE,SAAS,MAAM,WAAW,GAAG,CAAC;;;AAMnD,SAAS,UAAU,QAAM;CACxB,MAAM,QAAQhB,OAAK,MAAM,CAAC,QAAQ,KAAK,IAAI,CAAC,MAAM,IAAI;AACtD,KAAI,MAAM,SAAS,KAAK,MAAM,SAAS,EAAG,OAAM,IAAI,MAAM,sBAAsBA,SAAO;AACvF,KAAI,MAAM,WAAW,GAAG;EACvB,MAAM,CAAC,KAAK,OAAO;AACnB,SAAO,SAAS,KAAK,GAAG,GAAG,KAAK,WAAW,IAAI;;CAEhD,MAAM,CAAC,GAAG,GAAG,KAAK;AAClB,QAAO,SAAS,GAAG,GAAG,GAAG,OAAO,SAAS,GAAG,GAAG,GAAG,KAAK,WAAW,EAAE;;AAErE,SAAS,SAAS,OAAO;CACxB,MAAM,aAAa,MAAM,QAAQ,SAAS,KAAK,CAAC,MAAM,KAAK;CAC3D,MAAM,WAAW,EAAE;AACnB,MAAK,IAAI,IAAI,GAAG,IAAI,WAAW,QAAQ,KAAK;EAC3C,MAAM,OAAO,WAAW;EACxB,MAAM,WAAW,WAAW,IAAI;AAChC,MAAI,MAAM,MAAM,WAAW,IAAI,UAAU,SAAS,QAAQ,EAAE;GAC3D,MAAM,gBAAgB,SAAS,MAAM,QAAQ;GAC7C,MAAM,QAAQ,UAAU,cAAc,GAAG;GACzC,MAAM,MAAM,UAAU,cAAc,GAAG;AACvC,YAAS,KAAK;IACb,MAAM;IACN,SAAS,QAAQ;IACjB,OAAO,MAAM;IACb,YAAY;IACZ,cAAc,QAAQ,OAAO,IAAI;IACjC,CAAC;aACQ,MAAM,SAAS,QAAQ,EAAE,YAAY,MAAM,MAAM,KAAK,IAChE;OAAI,SAAS,SAAS,EAAG,UAAS,SAAS,SAAS,GAAG,OAAO,SAAS,SAAS,SAAS,GAAG,KAAK,MAAM;aAC7F,SAAS,SAAS,EAAG,UAAS,SAAS,SAAS,GAAG,QAAQ,OAAO;;AAE9E,QAAO,EAAE,UAAU,SAAS,KAAK,OAAO;EACvC,GAAG;EACH,MAAM,EAAE,KAAK,SAAS;EACtB,EAAE,EAAE;;AAEN,SAAS,oBAAoB,UAAU,WAAW,cAAc,MAAM;AACrE,KAAI,CAAC,YAAY,SAAS,WAAW,EAAG,QAAO;CAC/C,MAAM,MAAM,SAAS,MAAM,MAAM,aAAa,EAAE,WAAW,YAAY,EAAE,MAAM;AAC/E,KAAI,IAAK,QAAO;AAChB,KAAI,CAAC,eAAe,SAAS,SAAS,EAAG,QAAO,SAAS;AACzD,QAAO;;AAER,SAAS,wBAAwB,UAAU,OAAO,UAAU;AAC3D,KAAI,CAAC,YAAY,SAAS,WAAW,EAAG,QAAO;CAC/C,MAAM,WAAW,MAAM,YAAY;CACnC,MAAM,gBAAgB,MAAM,iBAAiB;CAC7C,MAAM,uBAAuB,MAAM,eAAe,KAAK,KAAK,MAAM,aAAa,KAAK,MAAM,aAAa,WAAW,MAAM,cAAc,WAAW;CACjJ,MAAM,UAAU,MAAM,YAAY,MAAM,aAAa,KAAK;CAC1D,MAAM,aAAa,WAAW,KAAK,IAAI,IAAI,WAAW,UAAU,EAAE,GAAG,KAAK;CAC1E,IAAI,aAAa,MAAM,cAAc;AACrC,KAAI,cAAc,SAAS,WAAW,CAAE,cAAa;CACrD,MAAM,WAAW,cAAc,QAAQ,YAAY,MAAM,YAAY,MAAM,KAAK,GAAG,SAAS;CAC5F,IAAI,OAAO;AACX,MAAK,MAAM,OAAO,UAAU;AAC3B,MAAI,CAAC,IAAI,KAAM;EACf,IAAI,OAAO;AACX,MAAI,YAAY,SAAS,YAAY;GACpC,MAAM,WAAW,aAAa,QAAQ,IAAI,MAAM,UAAU,UAAU,eAAe,sBAAsB,WAAW;AACpH,UAAO,KAAK,KAAK,SAAS,OAAO;SAC3B;GACN,MAAM,QAAQ,IAAI,KAAK,MAAM,KAAK;GAClC,IAAI,oBAAoB;AACxB,QAAK,MAAM,KAAK,MAAO,KAAI,YAAY;IACtC,MAAM,eAAe,EAAE,SAAS,WAAW,MAAM,gBAAgB,EAAE;IACnE,MAAM,YAAY,KAAK,IAAI,GAAG,KAAK,KAAK,eAAe,WAAW,CAAC;AACnE,yBAAqB;SACf,sBAAqB;AAC5B,UAAO,KAAK,KAAK,oBAAoB,qBAAqB;;EAE3D,MAAM,SAAS,OAAO,UAAU;AAChC,MAAI,SAAS,KAAM,QAAO;;AAE3B,QAAO,KAAK,IAAI,IAAI,QAAQ,IAAI;;AAEjC,IAAI,iBAAiB,MAAM;CAC1B,wBAAwB,IAAI,KAAK;CACjC,gCAAgC,IAAI,KAAK;CACzC,UAAU,KAAK;AACd,SAAO,KAAK,cAAc,IAAI,IAAI;;CAEnC,UAAU,KAAK,UAAU;AACxB,OAAK,cAAc,IAAI,KAAK,SAAS;;CAEtC,QAAQ;AACP,OAAK,MAAM,OAAO;AAClB,OAAK,cAAc,OAAO;;CAE3B,MAAM,KAAK,KAAK;AACf,MAAI,CAAC,IAAK,QAAO,EAAE;EACnB,MAAMH,WAAS,KAAK,cAAc,IAAI,IAAI;AAC1C,MAAIA,SAAQ,QAAOA;EACnB,IAAI,UAAU,KAAK,MAAM,IAAI,IAAI;AACjC,MAAI,CAAC,SAAS;AACb,cAAW,YAAY;IACtB,IAAI,YAAY;AAChB,QAAI,IAAI,WAAW,QAAQ,EAAE;KAC5B,MAAM,aAAa,IAAI,QAAQ,IAAI;AACnC,SAAI,eAAe,IAAI;MACtB,MAAM,WAAW,IAAI,UAAU,GAAG,WAAW;MAC7C,MAAM,OAAO,IAAI,UAAU,aAAa,EAAE;AAC1C,kBAAY,SAAS,SAAS,UAAU,GAAG,OAAO,WAAW,cAAc,OAAO,KAAK,MAAM,SAAS,CAAC,SAAS,QAAQ,GAAG,IAAI,aAAa,CAAC,OAAO,WAAW,KAAK,KAAK,KAAK,GAAG,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC,GAAG,mBAAmB,KAAK;;eAE1N,IAAI,SAAS,MAAM,CAAE,aAAY;aACnC,IAAI,WAAW,UAAU,IAAI,IAAI,WAAW,WAAW,EAAE;KACjE,MAAM,MAAM,MAAM,MAAM,IAAI;AAC5B,SAAI,CAAC,IAAI,GAAI,OAAM,IAAI,MAAM,wBAAwB,MAAM;AAC3D,iBAAY,MAAM,IAAI,MAAM;WACtB;KACN,IAAI,WAAW;AACf,SAAI,SAAS,WAAW,UAAU,CAAE,KAAI;AACvC,iBAAW,IAAI,IAAI,SAAS,CAAC;aACtB;AACP,iBAAW,SAAS,QAAQ,cAAc,GAAG;;AAE9C,SAAI,OAAO,YAAY,eAAe,QAAQ,UAAU,KAAM,KAAI;AACjE,kBAAY,OAAO,MAAM;;OAExB;GACJ,SAAS,UAAU,QAAQ;aACjB;MACP,MAAM,MAAM,MAAM,MAAM,IAAI;AAC5B,UAAI,CAAC,IAAI,GAAI,OAAM,IAAI,MAAM,wBAAwB,MAAM;AAC3D,kBAAY,MAAM,IAAI,MAAM;;UAExB;MACJ,MAAM,MAAM,MAAM,MAAM,IAAI;AAC5B,UAAI,CAAC,IAAI,GAAI,OAAM,IAAI,MAAM,wBAAwB,MAAM;AAC3D,kBAAY,MAAM,IAAI,MAAM;;;IAG9B,MAAM,OAAO,SAAS,UAAU,CAAC;AACjC,SAAK,cAAc,IAAI,KAAK,KAAK;AACjC,WAAO;OACJ;AACJ,QAAK,MAAM,IAAI,KAAK,QAAQ;AAC5B,WAAQ,YAAY;AACnB,SAAK,MAAM,OAAO,IAAI;AACtB,SAAK,cAAc,OAAO,IAAI;KAC7B;;AAEH,SAAO;;;AAGT,MAAM,YAAY,IAAI,gBAAgB;AACtC,eAAe,gBAAgB,KAAK,MAAM,OAAO;AAChD,KAAI,CAAC,MAAM,IAAK;CAChB,MAAM,WAAW,MAAM,UAAU,KAAK,MAAM,IAAI;AAChD,KAAI,CAAC,YAAY,SAAS,WAAW,EAAG;CACxC,MAAM,UAAU,oBAAoB,UAAU,MAAM,QAAQ,MAAM,MAAM,KAAK,MAAM,gBAAgB,MAAM;AACzG,KAAI,CAAC,QAAS;CACd,MAAM,OAAO,QAAQ;CACrB,MAAM,iBAAiB,MAAM,QAAQ;CACrC,MAAM,UAAU,MAAM,YAAY,MAAM,sBAAsB,KAAK;CACnE,MAAM,oBAAoB,KAAK,IAAI,IAAI,iBAAiB,UAAU,EAAE;CACpE,MAAM,WAAW,MAAM,aAAa,KAAK,IAAI,KAAK,IAAI,MAAM,UAAU,kBAAkB,GAAG;CAC3F,MAAM,WAAW,MAAM,YAAY;CACnC,IAAI,aAAa,MAAM,cAAc;AACrC,KAAI,cAAc,SAAS,WAAW,CAAE,cAAa;AACrD,KAAI,cAAc,SAAS,WAAW,CAAE;CACxC,MAAM,gBAAgB,MAAM,iBAAiB;CAC7C,MAAM,WAAW,cAAc,QAAQ,YAAY,MAAM,YAAY,IAAI,QAAQ,KAAK,GAAG,SAAS;AAClG,KAAI,CAAC,YAAY,CAAC,SAAS,WAAW;EACrC,MAAM,UAAU,gBAAgB,WAAW;AAC3C,gBAAc,gBAAgB,IAAI,QAAQ,YAAY,SAAS,KAAK,GAAG,MAAM,SAAS,CAAC,OAAO,QAAQ;AACrG,WAAQ,KAAK,kDAAkD,WAAW,IAAI,IAAI;IACjF;AACF;;CAED,MAAM,uBAAuB,MAAM,eAAe,KAAK,KAAK,MAAM,aAAa,KAAK,MAAM,aAAa,WAAW,MAAM,cAAc,WAAW;CACjJ,MAAM,WAAW,aAAa,QAAQ,MAAM,UAAU,UAAU,eAAe,sBAAsB,UAAU,KAAK,GAAG,MAAM,UAAU;CACvI,MAAM,aAAa,SAAS;CAC5B,MAAM,cAAc,SAAS;CAC7B,MAAM,YAAY,aAAa,UAAU;CACzC,MAAM,aAAa,cAAc,UAAU;CAC3C,MAAM,QAAQ,MAAM,SAAS;CAC7B,MAAM,MAAM,SAAS,QAAQ,OAAO,IAAI,WAAW,MAAM,cAAc;CACvE,MAAM,WAAW,UAAU,UAAU,MAAM,UAAU,SAAS,UAAU,QAAQ,MAAM,SAAS,UAAU;CACzG,IAAI,QAAQ;AACZ,KAAI,aAAa,SAAU,SAAQ,KAAK,IAAI,IAAI,iBAAiB,aAAa,EAAE;UACvE,aAAa,QAAS,SAAQ,KAAK,IAAI,GAAG,iBAAiB,UAAU;CAC9E,MAAM,kBAAkB,MAAM,QAAQ;CACtC,MAAM,gBAAgB,MAAM,iBAAiB,MAAM,qBAAqB;CACxE,IAAI,QAAQ;AACZ,KAAI,kBAAkB,MAAO,SAAQ;UAC5B,kBAAkB,SAAU,UAAS,kBAAkB,cAAc;KACzE,SAAQ,kBAAkB;CAC/B,MAAM,UAAU;EACf,GAAG,MAAM,QAAQ,IAAI;EACrB,GAAG,MAAM,QAAQ,IAAI;EACrB,OAAO;EACP,QAAQ;EACR;CACD,MAAM,UAAU,MAAM,WAAW;AACjC,KAAI,MAAM,qBAAqB;EAC9B,MAAM,SAAS,MAAM,gBAAgB,MAAM,gBAAgB;AAC3D,MAAI,SAAS,UAAU,MAAM;GAC5B,MAAM;GACN,IAAI;GACJ,IAAI;GACJ,EAAE,MAAM,qBAAqB,EAAE,SAAS,CAAC;;CAE3C,MAAM,mBAAmB;EACxB,GAAG,QAAQ,IAAI;EACf,GAAG,QAAQ,IAAI;EACf,OAAO;EACP,QAAQ;EACR;AACD,mBAAkB,KAAK,MAAM;EAC5B,GAAG;EACH;EACA,SAAS;EACT,OAAO;EACP,QAAQ;EACR;EACA;EACA,WAAW;EACX,WAAW,KAAK;EAChB,qBAAqB,KAAK;EAC1B,CAAC;;AAKH,IAAI,eAAe,MAAM;CACxB,2BAA2B,IAAI,KAAK;CACpC,uBAAuB,IAAI,KAAK;CAChC,yBAAyB,IAAI,KAAK;CAClC,6BAA6B,IAAI,KAAK;;;;;;;CAOtC,UAAU,EAAE;CACZ,QAAQ,KAAK;EACZ,MAAM,MAAM,KAAK,SAAS,IAAI,IAAI;AAClC,MAAI,KAAK;GACR,MAAM,QAAQ,KAAK,KAAK,IAAI,IAAI,IAAI;AACpC,QAAK,KAAK,IAAI,KAAK,QAAQ,EAAE;AAC7B,QAAK,UAAU,IAAI;;AAEpB,SAAO;;CAER,IAAI,KAAK;AACR,SAAO,KAAK,SAAS,IAAI,IAAI;;CAE9B,UAAU,QAAQ;AACjB,OAAK,MAAM,OAAO,KAAK,SAAS,MAAM,CAAE,KAAI,IAAI,WAAW,OAAO,CAAE,QAAO;AAC3E,SAAO;;CAER,SAAS,KAAK;AACb,OAAK,MAAM,OAAO,KAAK,SAAS,MAAM,CAAE,KAAI,IAAI,SAAS,IAAI,CAAE,QAAO;AACtE,SAAO;;CAER,IAAI,KAAK,KAAK,QAAQ;AACrB,MAAI,KAAK,SAAS,IAAI,IAAI,CAAE,MAAK,MAAM,KAAK,OAAO;AACnD,OAAK,SAAS,IAAI,KAAK,IAAI;AAC3B,OAAK,KAAK,IAAI,KAAK,EAAE;AACrB,OAAK,UAAU,IAAI;;CAEpB,OAAO,KAAK,QAAQ,OAAO,QAAQ,SAAS,cAAc;EACzD,MAAM,MAAM,OAAO,cAAc;GAChC,MAAM,CAAC,OAAO,OAAO;GACrB;GACA,OAAO,gBAAgB,kBAAkB,gBAAgB,WAAW,gBAAgB;GACpF,CAAC;AACF,OAAK,IAAI,KAAK,KAAK,OAAO;AAC1B,SAAO;;CAER,QAAQ,KAAK;EACZ,MAAM,QAAQ,KAAK,KAAK,IAAI,IAAI;AAChC,MAAI,UAAU,KAAK,KAAK,QAAQ,GAAG;GAClC,MAAM,YAAY,QAAQ;AAC1B,QAAK,KAAK,IAAI,KAAK,UAAU;;;CAG/B,MAAM,KAAK,QAAQ;EAClB,MAAM,MAAM,KAAK,SAAS,IAAI,IAAI;AAClC,MAAI,KAAK;AACR,QAAK,OAAO,KAAK,OAAO;AACxB,QAAK,SAAS,OAAO,IAAI;;AAE1B,OAAK,KAAK,OAAO,IAAI;AACrB,OAAK,OAAO,OAAO,IAAI;;CAExB,MAAM,QAAQ,cAAc,IAAI;EAC/B,IAAI,gBAAgB;AACpB,OAAK,MAAM,OAAO,KAAK,SAAS,MAAM,CAAE,MAAK,KAAK,KAAK,IAAI,IAAI,IAAI,OAAO,KAAK,CAAC,KAAK,WAAW,IAAI,IAAI,CAAE;AAC1G,OAAK,MAAM,OAAO,MAAM,KAAK,KAAK,OAAO,MAAM,CAAC,EAAE;AACjD,OAAI,iBAAiB,YAAa;AAClC,QAAK,KAAK,KAAK,IAAI,IAAI,IAAI,OAAO,KAAK,CAAC,KAAK,WAAW,IAAI,IAAI,EAAE;IACjE,MAAM,MAAM,KAAK,SAAS,IAAI,IAAI;AAClC,QAAI,KAAK;AACR,UAAK,OAAO,KAAK,OAAO;AACxB,UAAK,SAAS,OAAO,IAAI;;AAE1B,SAAK,KAAK,OAAO,IAAI;AACrB,SAAK,OAAO,OAAO,IAAI;AACvB;;;;CAIH,OAAO,KAAK,QAAQ;AACnB,MAAI,CAAC,QAAQ;AACZ,OAAI;AACH,QAAI,SAAS;YACL,GAAG;AACZ;;AAED,OAAK,QAAQ,KAAK,IAAI;;;;;;;CAOvB,aAAa,QAAQ;AACpB,MAAI,KAAK,QAAQ,WAAW,EAAG;EAC/B,MAAM,QAAQ,KAAK;AACnB,OAAK,UAAU,EAAE;AACjB,SAAO,MAAM,qBAAqB,CAAC,WAAW;AAC7C,QAAK,MAAM,OAAO,MAAO,KAAI;AAC5B,QAAI,SAAS;YACL,GAAG;IACX,CAAC,YAAY,GAAG;;CAEnB,UAAU,KAAK;AACd,OAAK,OAAO,OAAO,IAAI;AACvB,OAAK,OAAO,IAAI,KAAK,KAAK;;CAE3B,UAAU;AACT,OAAK,MAAM,OAAO,KAAK,QAAQ,OAAO,EAAE,CAAE,KAAI;AAC7C,OAAI,SAAS;WACL,GAAG;AACZ,OAAK,MAAM,CAAC,GAAG,QAAQ,KAAK,SAAU,KAAI;AACzC,OAAI,SAAS;WACL,KAAK;AACd,OAAK,SAAS,OAAO;AACrB,OAAK,KAAK,OAAO;AACjB,OAAK,OAAO,OAAO;;;AAGrB,MAAM,eAAe,IAAI,cAAc;AAIvC,IAAI,YAAY,MAAM;CACrB,wBAAwB,IAAI,KAAK;CACjC,MAAM,KAAK,KAAK;EACf,IAAI,UAAU,KAAK,MAAM,IAAI,IAAI;AACjC,MAAI,CAAC,SAAS;AACb,cAAW,YAAY;IACtB,MAAM,MAAM,MAAM,MAAM,IAAI;AAC5B,QAAI,CAAC,IAAI,GAAI,OAAM,IAAI,MAAM,wBAAwB,MAAM;IAC3D,MAAM,YAAY,iBAAiB,SAAS,MAAM,IAAI,aAAa,CAAC,EAAE,KAAK;AAC3E,QAAI,UAAU,WAAW,EAAG,OAAM,IAAI,MAAM,sBAAsB,MAAM;IACxE,MAAM,QAAQ,UAAU,GAAG,KAAK;IAChC,MAAM,SAAS,UAAU,GAAG,KAAK;IACjC,MAAM,mBAAmB,IAAI,kBAAkB,QAAQ,SAAS,EAAE;IAClE,MAAM,SAAS,EAAE;IACjB,IAAI,YAAY;AAChB,SAAK,MAAM,MAAM,WAAW;KAC3B,MAAM,EAAE,MAAM,OAAO,UAAU;KAC/B,MAAM,UAAU,SAAS;AACzB,UAAK,IAAI,IAAI,GAAG,IAAI,KAAK,QAAQ,IAAK,MAAK,IAAI,IAAI,GAAG,IAAI,KAAK,OAAO,KAAK;MAC1E,MAAM,YAAY,IAAI,KAAK,QAAQ,KAAK;MACxC,MAAM,cAAc,IAAI,KAAK,OAAO,SAAS,IAAI,KAAK,SAAS;AAC/D,UAAI,MAAM,WAAW,KAAK,GAAG;AAC5B,wBAAiB,aAAa,MAAM;AACpC,wBAAiB,YAAY,KAAK,MAAM,WAAW;AACnD,wBAAiB,YAAY,KAAK,MAAM,WAAW;AACnD,wBAAiB,YAAY,KAAK,MAAM,WAAW;;;AAGrD,YAAO,KAAK;MACX,QAAQ,IAAI,WAAW,iBAAiB;MACxC;MACA,SAAS;MACT,OAAO,YAAY;MACnB,CAAC;AACF,kBAAa;;AAEd,WAAO;KACN;KACA;KACA;KACA,SAAS;KACT;OACE;AACJ,QAAK,MAAM,IAAI,KAAK,QAAQ;AAC5B,WAAQ,YAAY,KAAK,MAAM,OAAO,IAAI,CAAC;;AAE5C,SAAO;;;AAGT,MAAM,YAAY,IAAI,WAAW;AACjC,eAAe,YAAY,KAAK,MAAM,OAAO;CAC5C,MAAM,QAAQ,MAAM,UAAU,KAAK,MAAM,IAAI;AAC7C,KAAI,MAAM,OAAO,WAAW,EAAG;CAC/B,MAAM,YAAY,MAAM,QAAQ,MAAM,MAAM;CAC5C,MAAM,WAAW,MAAM,UAAU,IAAI,YAAY,MAAM,UAAU;CACjE,IAAI,cAAc,MAAM,OAAO;AAC/B,MAAK,MAAM,KAAK,MAAM,OAAQ,KAAI,YAAY,EAAE,WAAW,WAAW,EAAE,OAAO;AAC9E,gBAAc;AACd;;CAED,MAAM,WAAW,GAAG,MAAM,IAAI,IAAI,MAAM;CACxC,IAAI,MAAM,aAAa,QAAQ,SAAS;AACxC,KAAI,CAAC,KAAK;AACT,QAAM,IAAI,OAAO,cAAc;GAC9B,MAAM,CAAC,MAAM,OAAO,MAAM,OAAO;GACjC,QAAQ;GACR,OAAO,gBAAgB,kBAAkB,gBAAgB,WAAW,gBAAgB;GACpF,CAAC;AACF,MAAI,OAAO,MAAM,aAAa,EAAE,SAAS,KAAK,EAAE,YAAY,QAAQ,EAAE,aAAa,MAAM,QAAQ,GAAG,EAAE,CAAC,MAAM,OAAO,MAAM,OAAO,CAAC;AAClI,eAAa,IAAI,UAAU,KAAK,IAAI,OAAO;;AAE5C,KAAI,SAAS,YAAY,MAAM,KAAK,MAAM,SAAS;EAClD,SAAS,MAAM,WAAW;EAC1B,WAAW,MAAM;EACjB,CAAC;AACF,cAAa,QAAQ,SAAS;;;;;;AAS/B,SAAS,mBAAmB,QAAQ,MAAM;CACzC,MAAM,MAAM,OAAO,cAAc;EAChC,MAAM,CAAC,KAAK,OAAO,KAAK,OAAO;EAC/B,QAAQ;EACR,OAAO,gBAAgB,kBAAkB,gBAAgB,WAAW,gBAAgB;EACpF,CAAC;AACF,KAAI,KAAK,OAAQ,QAAO,MAAM,2BAA2B,EAAE,QAAQ,KAAK,QAAQ,EAAE;EACjF,SAAS;EACT,oBAAoB;EACpB,EAAE,CAAC,KAAK,OAAO,KAAK,OAAO,CAAC;UACpB,KAAK,OAAQ,QAAO,MAAM,aAAa,EAAE,SAAS,KAAK,EAAE,KAAK,QAAQ,EAAE,aAAa,KAAK,QAAQ,GAAG,EAAE,CAAC,KAAK,OAAO,KAAK,OAAO,CAAC;AAC1I,QAAO;;AAKR,IAAI,cAAc,MAAM;CACvB,0BAA0B,IAAI,KAAK;CACnC,MAAM,KAAK,KAAK,YAAY;EAC3B,MAAM,MAAM,GAAG,IAAI,GAAG;EACtB,IAAI,UAAU,KAAK,QAAQ,IAAI,IAAI;AACnC,MAAI,CAAC,SAAS;AACb,cAAW,YAAY;AACtB,QAAI,OAAO,QAAQ,aAAa,2BAA2B,KAAK,IAAI,IAAI,IAAI,WAAW,wBAAwB,EAAG,OAAM,IAAI,MAAM,iCAAiC,IAAI,sFAAsF;IAC7P,IAAI;AACJ,QAAI,IAAI,WAAW,UAAU,IAAI,IAAI,WAAW,WAAW,IAAI,IAAI,WAAW,QAAQ,IAAI,CAAC,YAAY;KACtG,MAAM,WAAW,MAAM,MAAM,IAAI;AACjC,SAAI,CAAC,SAAS,GAAI,OAAM,IAAI,MAAM,0BAA0B,MAAM;AAClE,mBAAc,MAAM,SAAS,aAAa;WACpC;KACN,MAAM,WAAW,MAAM,YAAY,IAAI,IAAI;KAC3C,MAAM,UAAU,OAAO,MAAM;;MAE5B;GACH,SAAS,SAAS;AAChB,mBAAc,QAAQ,OAAO,MAAM,QAAQ,YAAY,QAAQ,aAAa,QAAQ,WAAW;;AAEhG,QAAI,YAAY;KACf,MAAM,SAAS,MAAM;;MAEpB;GACH;KACE,MAAM,EAAE,MAAM,SAAS,MAAM,MAAM,OAAO,KAAK,YAAY,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,SAAS,EAAE,mBAAmB,MAAM,CAAC;AACtH,YAAO;MACN,OAAO,KAAK;MACZ,QAAQ,KAAK;MACb,QAAQ,kBAAkB,IAAI,WAAW,KAAK,CAAC;MAC/C;;IAEF,MAAM,OAAO,IAAI,KAAK,CAAC,YAAY,CAAC;IACpC,MAAM,SAAS,MAAM,kBAAkB,KAAK;AAC5C,WAAO;KACN,OAAO,OAAO;KACd,QAAQ,OAAO;KACf;KACA;OACE;AACJ,QAAK,QAAQ,IAAI,KAAK,QAAQ;AAC9B,WAAQ,OAAO,QAAQ;AACtB,SAAK,QAAQ,OAAO,IAAI;AACxB,YAAQ,MAAM,qCAAqC,IAAI,IAAI,IAAI;KAC9D;;AAEH,SAAO;;;AAGT,MAAM,cAAc,IAAI,aAAa;AACrC,eAAe,cAAc,KAAK,MAAM,OAAO;AAC9C,KAAI,OAAO,MAAM,QAAQ,aAAa,2BAA2B,KAAK,MAAM,IAAI,IAAI,MAAM,IAAI,WAAW,wBAAwB,EAAG,SAAQ,KAAK,oBAAoB,MAAM,IAAI,iFAAiF;CAChQ,IAAI,MAAM,aAAa,QAAQ,MAAM,IAAI;CACzC,MAAM,aAAa,MAAM,eAAe,OAAO,WAAW,eAAe,QAAQ,WAAW,yBAAyB;AACrH,KAAI,CAAC,IAAK,KAAI;EACb,MAAM,OAAO,MAAM,YAAY,KAAK,MAAM,KAAK,WAAW;AAC1D,QAAM,aAAa,QAAQ,MAAM,IAAI;AACrC,MAAI,CAAC,KAAK;AACT,SAAM,mBAAmB,IAAI,QAAQ,KAAK;AAC1C,gBAAa,IAAI,MAAM,KAAK,KAAK,IAAI,OAAO;;UAErC,KAAK;AACb,MAAI,WAAY,OAAM;AACtB,UAAQ,MAAM,iCAAiC,IAAI;AACnD;;AAED,KAAI,SAAS,YAAY,MAAM,KAAK,MAAM,SAAS;EAClD,SAAS,MAAM,WAAW;EAC1B,WAAW,MAAM;EACjB,CAAC;AACF,cAAa,QAAQ,MAAM,IAAI;;AAKhC,MAAM,wCAAwC,IAAI,KAAK;AACvD,SAAS,aAAa,UAAQ;AAC7B,KAAI,OAAO,WAAW,YAAa,QAAO,OAAO,KAAKqB,UAAQ,SAAS,CAAC,SAAS,QAAQ;AACzF,QAAO,KAAKA,SAAO;;AAEpB,SAAS,8BAA8B,YAAY;CAClD,MAAM,wBAAwB,IAAI,KAAK;CACvC,MAAM,aAAa,YAAY,QAAQ;AACvC,KAAI,MAAM,QAAQ,UAAU,CAAE,MAAK,MAAM,SAAS,WAAW;AAC5D,MAAI,OAAO,SAAS,OAAO,MAAM,UAAU,SAAU,OAAM,IAAI,MAAM,MAAM;AAC3E,MAAI,OAAO,WAAW,OAAO,MAAM,YAAY,SAAU,OAAM,IAAI,MAAM,QAAQ;;CAElF,MAAM,SAAS,YAAY;AAC3B,KAAI,CAAC,MAAM,QAAQ,OAAO,CAAE,QAAO,CAAC,GAAG,MAAM;AAC7C,MAAK,MAAM,SAAS,QAAQ;EAC3B,MAAM,IAAI;AACV,MAAI,GAAG,OAAO,EAAG;EACjB,MAAM,IAAI,GAAG,GAAG,GAAG,KAAK,GAAG,GAAG;AAC9B,MAAI,CAAC,EAAG;EACR,MAAM,OAAO,MAAM,QAAQ,EAAE,GAAG,IAAI,CAAC,EAAE;AACvC,OAAK,MAAM,MAAM,MAAM;GACtB,MAAM,QAAQ;GACd,MAAM,eAAe;IACpB,OAAO;IACP,OAAO;IACP;IACA,CAAC,OAAO,QAAQ;AACjB,QAAK,MAAM,OAAO,cAAc;IAC/B,MAAM,SAAS,MAAM,QAAQ,IAAI,GAAG,MAAM,CAAC,IAAI;AAC/C,SAAK,MAAM,KAAK,QAAQ;KACvB,MAAM,UAAU;AAChB,SAAI,SAAS,KAAK,OAAO,QAAQ,MAAM,SAAU,OAAM,IAAI,QAAQ,EAAE;;;;;AAKzE,QAAO,CAAC,GAAG,MAAM;;AAElB,SAAS,kBAAkB,MAAM;AAChC,QAAO,KAAK,QAAQ,iJAAiJ,GAAG,CAAC,MAAM;;;;;;;;;;;;;AAahL,eAAe,mBAAmB,QAAQ;AACzC,KAAI,sBAAsB,IAAI,OAAO,CAAE;CACvC,MAAM,aAAa,kBAAkB,OAAO;CAC5C,IAAI,UAAU,gBAAgB,WAAW;AACzC,UAAS,uCAAuC,OAAO,YAAY,WAAW,eAAe,UAAU;AACvG,KAAI,OAAO,WAAW,eAAe,OAAO,aAAa,eAAe,OAAO,SAAS,kBAAkB,cAAc,OAAO,SAAS,mBAAmB,YAAY;AACtK,MAAI;AACH,SAAM,iBAAiB,SAAS,QAAQ,QAAQ;WACxC,MAAM;AACd,aAAU,gBAAgB,OAAO;AACjC,OAAI;AACH,UAAM,iBAAiB,SAAS,QAAQ,QAAQ;YACxC,GAAG;;AAEb,MAAI;AACH,OAAI,CAAC,MAAM,UAAU,aAAa,QAAQ,QAAQ,EAAE;AACnD,YAAQ,KAAK,+DAA+D,OAAO,KAAK,QAAQ,GAAG;AACnG;;WAEO,KAAK;AACb,WAAQ,KAAK,uDAAuD,OAAO,KAAK,QAAQ,KAAK,IAAI;AACjG;;AAED,wBAAsB,IAAI,OAAO;AACjC;;CAED,IAAI,WAAW,MAAM,qBAAqB,QAAQ,QAAQ;AAC1D,KAAI,CAAC,UAAU;AACd,YAAU,gBAAgB,OAAO;AACjC,aAAW,MAAM,qBAAqB,QAAQ,QAAQ;;CAEvD,IAAI,aAAa;AACjB,KAAI,UAAU;EACb,MAAM,WAAW,MAAM,oBAAoB,OAAO;AAClD,MAAI,SAAU,KAAI;AACjB,gBAAa,MAAM,UAAU,aAAa,QAAQ,SAAS;AAC3D,OAAI,CAAC,WAAY,SAAQ,KAAK,+DAA+D,OAAO,KAAK,SAAS,OAAO,SAAS;WAC1H,KAAK;AACb,WAAQ,KAAK,uDAAuD,OAAO,sBAAsB,IAAI;;;AAGvG,KAAI,CAAC,WAAY,KAAI;AACpB,eAAa,MAAM,UAAU,aAAa,QAAQ,QAAQ;AAC1D,MAAI,CAAC,WAAY,SAAQ,KAAK,oEAAoE,OAAO,KAAK,QAAQ,GAAG;UACjH,KAAK;AACb,UAAQ,KAAK,8DAA8D,OAAO,KAAK,IAAI;;AAE5F,KAAI,WAAY,uBAAsB,IAAI,OAAO;KAC5C,SAAQ,KAAK,+DAA+D,OAAO,0CAA0C;;AAEnI,IAAI,uBAAuB,MAAM;CAChC;CACA;CACA,QAAQ,EAAE;CACV,YAAY,OAAO,QAAQ;AAC1B,OAAK,QAAQ;AACb,OAAK,SAAS;;CAEf,mBAAmB;CACnB,sBAAsB;CACtB,WAAW,WAAW;AACrB,MAAI,cAAc,KAAM,QAAO;GAC9B,WAAW;GACX,YAAY;GACZ,eAAe;GACf,gBAAgB,OAAO,QAAQ;AAC9B,WAAO;KACN;KACA;KACA,MAAM,IAAI,kBAAkB,QAAQ,SAAS,EAAE;KAC/C;;GAEF,aAAa,KAAK,KAAK,IAAI,IAAI;AAC9B,WAAO;KACN,OAAO;KACP,QAAQ;KACR,MAAM,IAAI,kBAAkB,KAAK,KAAK,EAAE;KACxC;;GAEF;AACD,SAAO;;CAER,wBAAwB;AACvB,SAAO;GACN,MAAM;GACN,KAAK;GACL,OAAO,KAAK;GACZ,QAAQ,KAAK;GACb;;;AAGH,IAAI,iBAAiB,MAAM;CAC1B;CACA;CACA;CACA;CACA;CACA,eAAe;CACf,YAAY,KAAK,OAAO,QAAQ,MAAM;AACrC,OAAK,SAAS;AACd,OAAK,UAAU;AACf,OAAK,SAAS,OAAO,WAAW,eAAe,OAAO,aAAa,eAAe,OAAO,SAAS,kBAAkB,cAAc,OAAO,SAAS,mBAAmB,aAAa,IAAI,gBAAgB,OAAO,OAAO,GAAG,IAAI,qBAAqB,OAAO,OAAO;AAC9P,OAAK,YAAY,IAAI,UAAU;GAC9B,QAAQ,KAAK;GACb,GAAG,OAAO,EAAE,MAAM,GAAG,EAAE,KAAK;GAC5B,UAAU;GACV,MAAM;GACN,OAAO;GACP,QAAQ;IACP,OAAO,CAAC,IAAI,GAAG;IACf,KAAK;IACL;GACD,CAAC;AACF,OAAK,cAAc,IAAI,SAAS,aAAW,WAAW;AACrD,OAAI,KAAK,UAAU,UAAU;AAC5B,iBAAW;AACX;;AAED,QAAK,UAAU,iBAAiB,cAAc;AAC7C,iBAAW;KACV;AACF,QAAK,UAAU,iBAAiB,cAAc,MAAM;AACnD,WAAO,aAAa,QAAQ,oBAAoB,IAAI,MAAM,4CAA4C,IAAI,GAAG,CAAC;KAC7G;IACD;;CAEH,IAAI,QAAQ;AACX,SAAO,KAAK;;CAEb,IAAI,SAAS;AACZ,SAAO,KAAK;;CAEb,IAAI,cAAc;AACjB,SAAO,KAAK,UAAU,eAAe;;CAEtC,IAAI,MAAM;EACT,MAAM,cAAc,KAAK;EACzB,MAAMX,aAAW,KAAK,UAAU;AAChC,MAAIA,aAAW,KAAK,cAAc,EAAG,QAAO,KAAK,MAAM,cAAcA,WAAS;AAC9E,SAAO;;CAER,MAAM,QAAQ;AACb,QAAM,KAAK;;CAEZ,aAAa,OAAO,KAAK;EACxB,MAAM,cAAc,KAAK,MAAM,MAAM,GAAG,KAAK,IAAI,GAAG,KAAK,YAAY;AACrE,OAAK,UAAU,UAAU;GACxB,OAAO,CAAC,IAAI,GAAG;GACf,KAAK,OAAO;GACZ,CAAC;AACF,OAAK,UAAU,QAAQ;AACvB,OAAK,UAAU,SAAS,YAAY;AACpC,MAAI;AACH,QAAK,UAAU,UAAU;WACjB,GAAG;EACZ,MAAM,OAAO,KAAK,UAAU;AAC5B,MAAI,QAAQ,OAAO,KAAK,qBAAqB,YAAY;GACxD,MAAM,MAAM,KAAK,kBAAkB;GACnC,MAAM,iBAAiB,KAAK,SAAS,KAAK,UAAU;AACpD,OAAI,OAAO,IAAI,eAAe,gBAAgB;AAC7C,QAAI,CAAC,KAAK,gBAAgB,KAAK,aAAa,eAAe,eAAgB,MAAK,eAAe,IAAI,WAAW,eAAe;AAC7H,SAAK,aAAa,IAAI,IAAI;AAC1B,WAAO,kBAAkB,KAAK,aAAa;;;AAG7C,SAAO;;CAER,YAAY,OAAO,KAAK;EACvB,MAAM,cAAc,KAAK,MAAM,MAAM,GAAG,KAAK,IAAI,GAAG,KAAK,YAAY;AACrE,OAAK,UAAU,UAAU;GACxB,OAAO,CAAC,IAAI,GAAG;GACf,KAAK,OAAO;GACZ,CAAC;AACF,OAAK,UAAU,QAAQ;AACvB,OAAK,UAAU,SAAS,YAAY;AACpC,MAAI;AACH,QAAK,UAAU,UAAU;WACjB,GAAG;AACZ,SAAO,KAAK;;CAEb,UAAU;AACT,MAAI;AACH,QAAK,UAAU,SAAS;WAChB,GAAG;AACZ,OAAK,eAAe;;;AAGtB,IAAI,iBAAiB;AACrB,SAAS,sBAAsB;CAC9B,MAAM,YAAY;CAClB,MAAM,eAAe,0BAA0B;AAC/C,kCAAiC;AACjC,KAAI,OAAO,WAAW,sBAAsB,aAC3C;MAAI,OAAO,WAAW,oBAAoB,YAAa,WAAU,oBAAoB,WAAW;;AAEjG,KAAI,CAAC,WAAW,SAAU,YAAW,WAAW;EAC/C,gBAAgB,QAAQ;AACvB,OAAI,QAAQ,YAAY,OAAO,WAAW,oBAAoB,WAAY,QAAO,IAAI,WAAW,gBAAgB,GAAG,EAAE;AACrH,UAAO,EAAE,GAAG,cAAc;;EAE3B,4BAA4B,EAAE;EAC9B,iBAAiB;EACjB,MAAM;EACN;CACD,MAAM,SAAS,WAAW;AAC1B,QAAO,oBAAoB;AAC3B,QAAO,SAAS;CAChB,MAAM,aAAa,WAAW,qBAAqB,WAAW;AAC9D,KAAI,cAAc,OAAO,eAAe,YAAY;EACnD,MAAM,QAAQ,WAAW;AACzB,MAAI,MAAO,4BAA2B,OAAO,aAAa;;;AAG5D,eAAe,uBAAuB;AACrC,KAAI,eAAgB;AACpB,KAAI,EAAE,OAAO,WAAW,eAAe,OAAO,aAAa,eAAe,OAAO,SAAS,kBAAkB,cAAc,OAAO,SAAS,mBAAmB,aAAa;AACzK,MAAI,OAAO,WAAW,oBAAoB,YAAa,YAAW,kBAAkB;AACpF,uBAAqB;AACrB,MAAI,OAAO,WAAW,aAAa,WAAY,KAAI;AAClD,UAAO,eAAe,WAAW,UAAU,OAAO,aAAa;IAC9D,MAAM,UAAU;AACf,YAAO,YAAY,OAAO,aAAa,aAAa,SAAS,aAAa,SAAS,cAAc,OAAO,SAAS,gBAAgB;;IAElI,cAAc;IACd,CAAC;UACK;AACR,MAAI;GACH,MAAM,EAAE,kBAAkB,MAAM;;;IAG/B;;GAED,MAAM,OAAO,MAAM;;;IAGlB;;GAED,MAAM,WAAW,MAAM;;;IAGtB;;GAED,MAAM,UAAU,cAAc,OAAO,KAAK,IAAI;GAC9C,IAAI,gBAAgB;AACpB,OAAI;IACH,MAAM,WAAW,QAAQ,QAAQ,6BAA6B;IAC9D,MAAM,YAAY,SAAS,YAAY,SAAS;AAChD,QAAI,cAAc,GAAI,iBAAgB,SAAS,KAAK,SAAS,UAAU,GAAG,UAAU,EAAE,6BAA6B;WAC5G;AACR,OAAI,eAAe;IAClB,MAAM,cAAc,MAAM,KAAK,SAAS,cAAc,EAAE,SAAS,SAAS;AAC1E,cAAU,WAAW,gCAAgC,aAAa;;WAE3D,KAAK;AACb,WAAQ,KAAK,4DAA4D,IAAI;;;AAG/E,kBAAiB;;AAElB,IAAI,eAAe,MAAM;CACxB,wBAAwB,IAAI,KAAK;CACjC,MAAM,KAAK,KAAK,OAAO,QAAQ;AAC9B,QAAM,sBAAsB;EAC5B,MAAM,gBAAgB,KAAK,IAAI,GAAG,KAAK,KAAK,MAAM,CAAC;EACnD,MAAM,iBAAiB,KAAK,IAAI,GAAG,KAAK,KAAK,OAAO,CAAC;EACrD,MAAM,MAAM,GAAG,IAAI,IAAI,cAAc,GAAG;EACxC,IAAI,UAAU,KAAK,MAAM,IAAI,IAAI;AACjC,MAAI,CAAC,SAAS;AACb,cAAW,YAAY;IACtB,MAAM,cAAc;IACpB,IAAI;AACJ,QAAI;KACH,IAAI,aAAa;KACjB,MAAM,SAAS,OAAO,YAAY,eAAe,QAAQ,QAAQ,UAAU,KAAK;KAChF,MAAM,WAAW,YAAY,WAAW,UAAU,IAAI,YAAY,WAAW,WAAW,IAAI,YAAY,WAAW,QAAQ;AAC3H,SAAI,YAAY,WAAW,gCAAgC,EAAE;MAC5D,MAAM,aAAa,YAAY,MAAM,IAAI,CAAC;MAC1C,MAAM,UAAU,aAAa,WAAW;AACxC,mBAAa,KAAK,MAAM,QAAQ;AAChC,mBAAa;gBACH,YAAY,WAAW,yBAAyB,EAAE;MAC5D,MAAM,aAAa,mBAAmB,YAAY,MAAM,IAAI,CAAC,GAAG;AAChE,mBAAa,KAAK,MAAM,WAAW;AACnC,mBAAa;gBACH,UAAU,CAAC,UAAU;MAC/B,IAAI,WAAW;AACf,UAAI,SAAS,WAAW,UAAU,CAAE,KAAI;AACvC,kBAAW,IAAI,IAAI,SAAS,CAAC;cACtB;AACP,kBAAW,SAAS,QAAQ,cAAc,GAAG;;MAE9C,MAAM,aAAa,MAAM;;OAExB;;AAED,UAAI,CAAC,WAAW,WAAW,SAAS,CAAE,YAAW,WAAW,QAAQ,QAAQ,KAAK,EAAE,SAAS;AAC5F,UAAI;OACH,MAAM,OAAO,MAAM;;QAElB;;AAED,WAAI,SAAS,SAAS,QAAQ,EAAE;QAC/B,MAAM,cAAc,MAAM,KAAK,SAAS,UAAU,QAAQ;AAC1D,qBAAa,KAAK,MAAM,YAAY;AACpC,qBAAa;cACP;QACN,MAAM,UAAU,MAAM,KAAK,SAAS,SAAS;AAC7C,qBAAa,QAAQ,OAAO,MAAM,QAAQ,YAAY,QAAQ,aAAa,QAAQ,WAAW;;cAExF;gBACE,aAAa,YAAY,SAAS,QAAQ,IAAI,YAAY,SAAS,WAAW,GAAG;MAC3F,MAAM,WAAW,MAAM,MAAM,YAAY;AACzC,UAAI,SAAS,GAAI,cAAa,MAAM,SAAS,MAAM;;AAEpD,SAAI,YAAY;MACf,MAAM,QAAQ,8BAA8B,WAAW;AACvD,UAAI,MAAM,SAAS,EAAG,OAAM,QAAQ,IAAI,MAAM,KAAK,WAAW,mBAAmB,OAAO,CAAC,CAAC;;aAEnF,KAAK;AACb,aAAQ,KAAK,8DAA8D,IAAI;;IAEhF,MAAM,WAAW,IAAI,eAAe,aAAa,eAAe,gBAAgB,WAAW;AAC3F,UAAM,SAAS,OAAO;AACtB,WAAO;OACJ;AACJ,QAAK,MAAM,IAAI,KAAK,QAAQ;AAC5B,WAAQ,YAAY,KAAK,MAAM,OAAO,IAAI,CAAC;;AAE5C,SAAO;;;AAGT,MAAM,eAAe,IAAI,cAAc;AACvC,eAAe,eAAe,KAAK,MAAM,OAAO;CAC/C,MAAM,YAAY,KAAK,IAAI,GAAG,KAAK,KAAK,MAAM,QAAQ,MAAM,CAAC;CAC7D,MAAM,aAAa,KAAK,IAAI,GAAG,KAAK,KAAK,MAAM,QAAQ,OAAO,CAAC;CAC/D,MAAM,eAAe,OAAO,MAAM,QAAQ,YAAY,MAAM,MAAM,IAAI,MAAM,MAAM;CAClF,MAAM,SAAS,KAAK,IAAI,WAAW,WAAW;CAC9C,MAAM,gBAAgB,KAAK,IAAI,GAAG,KAAK,MAAM,OAAO,KAAK,IAAI,GAAG,OAAO,CAAC,CAAC;CACzE,MAAM,eAAe,KAAK,IAAI,cAAc,cAAc;CAC1D,MAAM,gBAAgB,KAAK,IAAI,GAAG,KAAK,MAAM,YAAY,aAAa,CAAC;CACvE,MAAM,iBAAiB,KAAK,IAAI,GAAG,KAAK,MAAM,aAAa,aAAa,CAAC;CACzE,MAAM,WAAW,MAAM,aAAa,KAAK,MAAM,KAAK,eAAe,eAAe;CAClF,MAAM,YAAY,SAAS;CAC3B,MAAM,cAAc,KAAK,MAAM,MAAM,QAAQ,YAAY,MAAM,IAAI,GAAG,KAAK,IAAI,GAAG,SAAS,YAAY;CACvG,MAAM,UAAU,MAAM,OAAO;CAC7B,MAAM,WAAW,GAAG,MAAM,IAAI,IAAI,YAAY,IAAI,cAAc,GAAG,eAAe,IAAI;CACtF,IAAI,MAAM,aAAa,QAAQ,SAAS;AACxC,KAAI,CAAC,KAAK;AACT,QAAM,IAAI,OAAO,cAAc;GAC9B,MAAM,CAAC,SAAS,OAAO,SAAS,OAAO;GACvC,QAAQ;GACR,OAAO,gBAAgB,kBAAkB,gBAAgB,WAAW,gBAAgB;GACpF,CAAC;EACF,MAAM,cAAc,SAAS,aAAa,aAAa,QAAQ;AAC/D,MAAI,YAAa,KAAI,OAAO,MAAM,aAAa,EAAE,SAAS,KAAK,EAAE,aAAa,EAAE,aAAa,SAAS,QAAQ,GAAG,EAAE,CAAC,SAAS,OAAO,SAAS,OAAO,CAAC;OAChJ;GACJ,MAAM,SAAS,SAAS,YAAY,aAAa,QAAQ;AACzD,OAAI;AACH,QAAI,OAAO,MAAM,2BAA2B,EAAE,QAAQ,QAAQ,EAAE;KAC/D,SAAS;KACT,oBAAoB;KACpB,EAAE,CAAC,SAAS,OAAO,SAAS,OAAO,CAAC;WAC9B;IACP,MAAM,MAAM,OAAO,WAAW,KAAK;AACnC,QAAI,KAAK;KACR,MAAM,UAAU,IAAI,aAAa,GAAG,GAAG,SAAS,OAAO,SAAS,OAAO;KACvE,MAAM,iBAAiB,kBAAkB,IAAI,WAAW,QAAQ,KAAK,QAAQ,QAAQ,KAAK,YAAY,QAAQ,KAAK,WAAW,CAAC;AAC/H,SAAI,OAAO,MAAM,aAAa,EAAE,SAAS,KAAK,EAAE,gBAAgB,EAAE,aAAa,SAAS,QAAQ,GAAG,EAAE,CAAC,SAAS,OAAO,SAAS,OAAO,CAAC;;;;AAI1I,eAAa,IAAI,UAAU,KAAK,IAAI,OAAO;;AAE5C,KAAI,SAAS,YAAY,MAAM,KAAK,MAAM,SAAS;EAClD,SAAS,MAAM,WAAW;EAC1B,WAAW,MAAM;EACjB,CAAC;AACF,cAAa,QAAQ,SAAS;;;;;;AAS/B,IAAI,mBAAmB,MAAM;CAC5B,QAAQ;CACR,cAAc;CACd,WAAW;CACX,yBAAyB;CACzB,iBAAiB;CACjB,YAAY,QAAQ,SAAS;CAC7B,YAAY;CACZ,YAAY,KAAK,YAAY;AAC5B,OAAK,MAAM;AACX,OAAK,aAAa;;CAEnB,MAAM,OAAO;AACZ,MAAI,KAAK,MAAO;AAChB,MAAI,KAAK,YAAa,QAAO,KAAK;AAClC,OAAK,YAAY;AACjB,OAAK,eAAe,YAAY;AAC/B,OAAI;IACH,MAAM,QAAQ,MAAM,WAAW,QAAQ,KAAK,IAAI;AAChD,QAAI,KAAK,UAAW,YAAW,QAAQ,KAAK,IAAI;QAC3C,MAAK,QAAQ;YACV,KAAK;AACb,SAAK,cAAc;AACnB,UAAM;;MAEJ;AACJ,SAAO,KAAK;;CAEb,UAAU;AACT,OAAK,YAAY;AACjB,OAAK,UAAU,QAAQ;AACvB,MAAI,KAAK,OAAO;AACf,cAAW,QAAQ,KAAK,IAAI;AAC5B,QAAK,QAAQ;;AAEd,OAAK,cAAc;AACnB,OAAK,WAAW;;;AAGlB,IAAI,eAAe,cAAc,iBAAiB;CACjD,aAAa;CACb,kBAAkB;CAClB,eAAe;CACf,YAAY;CACZ,gBAAgB;CAChB,aAAa;CACb,gBAAgB,EAAE;CAClB,aAAa;;;;;;;;CAQb,eAAe;CACf,cAAc;CACd,kBAAkB,QAAQ;EACzB,MAAM,QAAQ,KAAK,cAAc,WAAW,MAAM,EAAE,YAAY,OAAO,UAAU;AACjF,MAAI,UAAU,GAAI,MAAK,cAAc,KAAK,OAAO;MAC5C,MAAK,cAAc,OAAO,OAAO,GAAG,OAAO;;CAEjD,MAAM,kBAAkB,SAAS;AAChC,MAAI,CAAC,KAAK,SAAU;AACpB,SAAO,KAAK,cAAc,SAAS,GAAG;GACrC,MAAM,SAAS,MAAM,KAAK,SAAS,MAAM;AACzC,OAAI,KAAK,mBAAmB,SAAS;AACpC,WAAO,OAAO,SAAS;AACvB;;AAED,OAAI,OAAO,QAAQ,CAAC,OAAO,MAAO;AAClC,QAAK,kBAAkB,OAAO,MAAM;;;CAGtC,MAAM,cAAc,MAAM;AACzB,MAAI,CAAC,KAAM;AACX,MAAI;AACH,SAAM,KAAK,QAAQ;WACX,GAAG;;CAEb,aAAa;EACZ,MAAM,OAAO,KAAK;AAClB,OAAK,WAAW;AAChB,MAAI,KAAM,KAAI;AACb,QAAK,QAAQ;WACL,GAAG;AACZ,OAAK,aAAa;AAClB,OAAK,kBAAkB;AACvB,OAAK,eAAe;AACpB,OAAK,YAAY;AACjB,OAAK,eAAe,OAAO;AAC3B,OAAK,gBAAgB;AACrB,OAAK,YAAY,OAAO;AACxB,OAAK,aAAa;AAClB,OAAK,MAAM,UAAU,KAAK,cAAe,KAAI;AAC5C,UAAO,OAAO;WACN,GAAG;AACZ,OAAK,gBAAgB,EAAE;AACvB,OAAK,eAAe;AACpB,OAAK,yBAAyB;;CAE/B,YAAY;AACX,OAAK,YAAY;;CAElB,MAAM,cAAc,cAAc,SAAS;AAC1C,MAAI,CAAC,KAAK,WAAY;EACtB,MAAM,gBAAgB,KAAK,IAAI,GAAG,OAAO,SAAS,aAAa,GAAG,eAAe,EAAE;EACnF,MAAM,eAAe,KAAK;AAC1B,OAAK,WAAW;AAChB,QAAM,KAAK,cAAc,aAAa;AACtC,MAAI,KAAK,mBAAmB,WAAW,KAAK,UAAW;AACvD,OAAK,WAAW,KAAK,WAAW,SAAS,cAAc;EACvD,MAAM,QAAQ,MAAM,KAAK,SAAS,MAAM;AACxC,MAAI,KAAK,mBAAmB,WAAW,KAAK,UAAW;AACvD,OAAK,eAAe,MAAM,SAAS;EACnC,MAAM,SAAS,MAAM,KAAK,SAAS,MAAM;AACzC,MAAI,KAAK,mBAAmB,WAAW,KAAK,UAAW;AACvD,OAAK,YAAY,OAAO,SAAS;AACjC,OAAK,yBAAyB;;CAE/B,MAAM,sBAAsB,cAAc,SAAS;AAClD,MAAI,CAAC,KAAK,gBAAiB;EAC3B,MAAM,gBAAgB,KAAK,IAAI,GAAG,OAAO,SAAS,aAAa,GAAG,eAAe,EAAE;EACnF,MAAM,eAAe,KAAK;AAC1B,OAAK,WAAW;AAChB,QAAM,KAAK,cAAc,aAAa;AACtC,MAAI,KAAK,mBAAmB,WAAW,KAAK,UAAW;AACvD,OAAK,MAAM,UAAU,KAAK,cAAe,QAAO,OAAO;AACvD,OAAK,gBAAgB,EAAE;EACvB,MAAM,WAAW,KAAK,IAAI,GAAG,gBAAgB,GAAG;AAChD,OAAK,WAAW,KAAK,gBAAgB,QAAQ,SAAS;AACtD,QAAM,KAAK,kBAAkB,QAAQ;AACrC,MAAI,KAAK,mBAAmB,WAAW,KAAK,UAAW;AACvD,OAAK,yBAAyB;;CAE/B,MAAM,SAAS,cAAc;AAC5B,QAAM,KAAK,MAAM;AACjB,MAAI,KAAK,aAAa,CAAC,KAAK,MAAO,QAAO;EAC1C,MAAM,gBAAgB,KAAK,IAAI,GAAG,OAAO,SAAS,aAAa,GAAG,eAAe,EAAE;AACnF,MAAI,KAAK,YAAY;AACpB,OAAI,KAAK,YAAa,MAAK,YAAY,QAAQ,KAAK;AACpD,UAAO,IAAI,SAAS,aAAW,WAAW;AACzC,SAAK,cAAc;KAClB,cAAc;KACd,SAASZ;KACT;KACA;KACA;;AAEH,SAAO,KAAK,cAAc,cAAc;;CAEzC,MAAM,cAAc,cAAc;AACjC,OAAK,aAAa;AAClB,MAAI;AACH,UAAO,MAAM,KAAK,cAAc,aAAa;YACpC;AACT,QAAK,aAAa;AAClB,OAAI,KAAK,aAAa;IACrB,MAAM,MAAM,KAAK;AACjB,SAAK,cAAc;AACnB,SAAK,cAAc,IAAI,aAAa,CAAC,KAAK,IAAI,QAAQ,CAAC,MAAM,IAAI,OAAO;;;;CAI3E,MAAM,sBAAsB,eAAe,SAAS;AACnD,MAAI,CAAC,KAAK,iBAAiB;AAC1B,OAAI,KAAK,aAAa,CAAC,KAAK,MAAO,QAAO;GAC1C,MAAM,QAAQ,MAAM,KAAK,MAAM,sBAAsB;AACrD,OAAI,CAAC,MAAO,QAAO;AACnB,QAAK,kBAAkB,IAAI,gBAAgB,MAAM;;EAElD,MAAM,MAAM;AACZ,MAAI,CAAC,KAAK,YAAY,gBAAgB,KAAK,yBAAyB,OAAO,KAAK,cAAc,SAAS,KAAK,gBAAgB,KAAK,cAAc,GAAG,YAAY,OAAO,KAAK,cAAc,SAAS,KAAK,gBAAgB,KAAK,cAAc,GAAG,YAAY,GAAG;AAC1P,SAAM,KAAK,sBAAsB,eAAe,QAAQ;AACxD,OAAI,KAAK,mBAAmB,WAAW,KAAK,aAAa,CAAC,KAAK,MAAO,QAAO;;AAE9E,SAAO,MAAM;AACZ,SAAM,KAAK,kBAAkB,QAAQ;AACrC,OAAI,KAAK,mBAAmB,WAAW,KAAK,aAAa,CAAC,KAAK,MAAO,QAAO;AAC7E,OAAI,KAAK,cAAc,UAAU,GAChC;QAAI,KAAK,cAAc,GAAG,aAAa,gBAAgB,KAAK;AAC3D,UAAK,cAAc,OAAO,EAAE,OAAO;AACnC;;;AAGF;;EAED,MAAM,gBAAgB,KAAK,cAAc;AACzC,MAAI,CAAC,cAAe,QAAO;EAC3B,MAAM,QAAQ,cAAc;EAC5B,MAAM,SAAS,cAAc;EAC7B,MAAM,aAAa,QAAQ,SAAS;EACpC,IAAI,SAAS,KAAK;AAClB,MAAI,CAAC,UAAU,OAAO,WAAW,YAAY;AAC5C,YAAS,IAAI,WAAW,WAAW;AACnC,QAAK,eAAe;;AAErB,QAAM,cAAc,OAAO,QAAQ,EAAE,QAAQ,QAAQ,CAAC;AACtD,MAAI,KAAK,mBAAmB,WAAW,KAAK,aAAa,CAAC,KAAK,MAAO,QAAO;AAC7E,oBAAkB,OAAO;AACzB,SAAO;GACN;GACA;GACA;GACA;;CAEF,MAAM,sBAAsB,eAAe;AAC1C,OAAK;EACL,MAAM,UAAU,KAAK;AACrB,MAAI,KAAK,WAAY,QAAO,KAAK,sBAAsB,eAAe,QAAQ;AAC9E,MAAI,CAAC,KAAK,YAAY;AACrB,OAAI,KAAK,aAAa,CAAC,KAAK,MAAO,QAAO;GAC1C,MAAM,QAAQ,MAAM,KAAK,MAAM,sBAAsB;AACrD,OAAI,CAAC,MAAO,QAAO;AACnB,QAAK,aAAa,IAAI,WAAW,OAAO;IACvC,UAAU;IACV,OAAO;IACP,CAAC;;EAEH,MAAM,MAAM;AACZ,MAAI,CAAC,KAAK,YAAY,gBAAgB,KAAK,yBAAyB,OAAO,KAAK,gBAAgB,gBAAgB,KAAK,aAAa,YAAY,OAAO,KAAK,gBAAgB,gBAAgB,KAAK,aAAa,YAAY,GAAG;AAC1N,SAAM,KAAK,cAAc,eAAe,QAAQ;AAChD,OAAI,KAAK,mBAAmB,WAAW,KAAK,aAAa,CAAC,KAAK,MAAO,QAAO;;AAE9E,SAAO,KAAK,aAAa,KAAK,UAAU,aAAa,gBAAgB,KAAK;AACzE,QAAK,eAAe,KAAK;AACzB,QAAK,YAAY;AACjB,OAAI,KAAK,UAAU;IAClB,MAAM,SAAS,MAAM,KAAK,SAAS,MAAM;AACzC,QAAI,KAAK,mBAAmB,WAAW,KAAK,aAAa,CAAC,KAAK,MAAO,QAAO;AAC7E,SAAK,YAAY,OAAO,SAAS;;;AAGnC,MAAI,CAAC,KAAK,aAAc,QAAO;EAC/B,MAAM,SAAS,KAAK,aAAa;AACjC,SAAO;GACN,OAAO,OAAO;GACd,QAAQ,OAAO;GACf;GACA;;CAEF,MAAM,cAAc,cAAc;EACjC,MAAM,gBAAgB,KAAK,IAAI,GAAG,OAAO,SAAS,aAAa,GAAG,eAAe,EAAE;AACnF,MAAI;AACH,UAAO,MAAM,KAAK,sBAAsB,cAAc;WAC9C,KAAK;GACb,MAAM,SAAS;AACf,OAAI,QAAQ,SAAS,wBAAwB,QAAQ,SAAS,SAAS,WAAW,IAAI,KAAK,aAAa,CAAC,KAAK,MAAO,QAAO;AAC5H,QAAK,YAAY;AACjB,OAAI;AACH,QAAI,CAAC,KAAK,cAAc,KAAK,SAAS,CAAC,KAAK,WAAW;KACtD,MAAM,QAAQ,MAAM,KAAK,MAAM,sBAAsB;AACrD,SAAI,SAAS,CAAC,KAAK,WAAW;AAC7B,WAAK,aAAa,IAAI,WAAW,OAAO;OACvC,UAAU;OACV,OAAO;OACP,gBAAgB,EAAE,sBAAsB,mBAAmB;OAC3D,CAAC;AACF,aAAO,MAAM,KAAK,sBAAsB,cAAc;;;YAGhD,GAAG;AACZ,SAAM;;;;AAIT,IAAI,eAAe,cAAc,iBAAiB;CACjD,YAAY;CACZ,YAAY;AACX,OAAK,YAAY;;CAElB,MAAM,cAAc,cAAc,UAAU;AAC3C,MAAI,CAAC,KAAK,UAAW;AACrB,OAAK,UAAU,QAAQ;AACvB,OAAK,WAAW,KAAK,UAAU,QAAQ,aAAa;AACpD,OAAK,yBAAyB;;CAE/B,OAAO,WAAW,cAAc;AAC/B,MAAI;AACH,SAAM,KAAK,MAAM;AACjB,OAAI,KAAK,aAAa,CAAC,KAAK,MAAO;AACnC,OAAI,CAAC,KAAK,WAAW;IACpB,MAAM,QAAQ,MAAM,KAAK,MAAM,sBAAsB;AACrD,QAAI,CAAC,MAAO;AACZ,SAAK,YAAY,IAAI,gBAAgB,MAAM;;AAE5C,OAAI,CAAC,KAAK,YAAY,KAAK,IAAI,eAAe,KAAK,uBAAuB,GAAG,KAAK;AACjF,SAAK;AACL,UAAM,KAAK,cAAc,cAAc,KAAK,eAAe;;GAE5D,MAAM,UAAU,KAAK;AACrB,OAAI,CAAC,KAAK,SAAU;AACpB,cAAW,MAAM,WAAW,KAAK,UAAU;AAC1C,QAAI,KAAK,mBAAmB,WAAW,KAAK,aAAa,CAAC,KAAK,MAAO;AACtE,SAAK,yBAAyB,QAAQ,YAAY,QAAQ;AAC1D,UAAM;;WAEC,KAAK;GACb,MAAM,SAAS;AACf,OAAI,QAAQ,SAAS,wBAAwB,QAAQ,SAAS,SAAS,WAAW,IAAI,KAAK,aAAa,CAAC,KAAK,MAAO;AACrH,SAAM;YACG;GACT,MAAM,UAAU,KAAK;AACrB,OAAI,KAAK,mBAAmB,QAAS,MAAK,WAAW;;;;AAIxD,IAAI,oBAAoB,MAAM;CAC7B,gCAAgC,IAAI,KAAK;CACzC,gCAAgC,IAAI,KAAK;CACzC,+BAA+B,IAAI,KAAK;;CAExC,QAAQ;CACR,2BAA2B,IAAI,KAAK;CACpC,SAAS,KAAK;AACb,OAAK,aAAa,IAAI,KAAK,KAAK,KAAK,CAAC;AACtC,OAAK,SAAS,IAAI,KAAK,KAAK,MAAM;;CAEnC,QAAQ,KAAK;EACZ,MAAM,eAAe,KAAK,cAAc,IAAI,IAAI;AAChD,MAAI,cAAc;AACjB,OAAI;AACH,iBAAa,SAAS;YACd,GAAG;AACZ,QAAK,cAAc,OAAO,IAAI;;EAE/B,MAAM,eAAe,KAAK,cAAc,IAAI,IAAI;AAChD,MAAI,cAAc;AACjB,OAAI;AACH,iBAAa,SAAS;YACd,GAAG;AACZ,QAAK,cAAc,OAAO,IAAI;;AAE/B,OAAK,aAAa,OAAO,IAAI;AAC7B,OAAK,SAAS,OAAO,IAAI;;;;;;;;CAQ1B,KAAK,aAAa,KAAK;AACtB,OAAK;AACL,OAAK,MAAM,CAAC,KAAK,SAAS,KAAK,SAAU,KAAI,KAAK,QAAQ,OAAO,WAAY,MAAK,QAAQ,IAAI;;CAE/F,UAAU;AACT,OAAK,MAAM,WAAW,KAAK,cAAc,QAAQ,CAAE,KAAI;AACtD,WAAQ,SAAS;WACT,GAAG;AACZ,OAAK,cAAc,OAAO;AAC1B,OAAK,MAAM,WAAW,KAAK,cAAc,QAAQ,CAAE,KAAI;AACtD,WAAQ,SAAS;WACT,GAAG;AACZ,OAAK,cAAc,OAAO;AAC1B,OAAK,aAAa,OAAO;AACzB,OAAK,SAAS,OAAO;;;CAGtB,IAAI,OAAO;AACV,SAAO,KAAK,cAAc,OAAO,KAAK,cAAc;;CAErD,MAAM,WAAW,KAAK;EACrB,MAAM,MAAM,KAAK,KAAK;AACtB,OAAK,MAAM,CAAC,KAAK,aAAa,KAAK,aAAa,SAAS,CAAE,KAAI,MAAM,WAAW,SAAU,MAAK,QAAQ,IAAI;;CAE5G,SAAS,KAAK,YAAY,QAAQ;EACjC,MAAM,MAAM,GAAG,IAAI,GAAG,WAAW,GAAG,UAAU;EAC9C,IAAI,UAAU,KAAK,cAAc,IAAI,IAAI;AACzC,MAAI,CAAC,SAAS;AACb,aAAU,IAAI,aAAa,KAAK,WAAW;AAC3C,QAAK,cAAc,IAAI,KAAK,QAAQ;;AAErC,OAAK,SAAS,IAAI;AAClB,OAAK,OAAO;AACZ,SAAO;;CAER,SAAS,KAAK,QAAQ;EACrB,MAAM,MAAM,GAAG,IAAI,GAAG,UAAU;EAChC,IAAI,UAAU,KAAK,cAAc,IAAI,IAAI;AACzC,MAAI,CAAC,SAAS;AACb,aAAU,IAAI,aAAa,KAAK,MAAM;AACtC,QAAK,cAAc,IAAI,KAAK,QAAQ;;AAErC,OAAK,SAAS,IAAI;AAClB,OAAK,OAAO;AACZ,SAAO;;CAER,UAAU,QAAQ;EACjB,MAAM,OAAO,CAAC,GAAG,KAAK,cAAc,MAAM,EAAE,GAAG,KAAK,cAAc,MAAM,CAAC;AACzE,OAAK,MAAM,OAAO,KAAM,KAAI,IAAI,SAAS,OAAO,CAAE,MAAK,QAAQ,IAAI;;;AAGrE,MAAM,oBAAoB,IAAI,mBAAmB;AAIjD,MAAM,wBAAwB,IAAI,KAAK;;;;;;;AAOvC,SAAS,eAAe,KAAK;CAC5B,IAAI,OAAO,MAAM,IAAI,IAAI;AACzB,KAAI,CAAC,MAAM;AACV,UAAQ,YAAY;AACnB,OAAI;IACH,MAAM,QAAQ,MAAM,WAAW,QAAQ,IAAI;AAC3C,QAAI;KACH,MAAM,QAAQ,MAAM,MAAM,sBAAsB;AAChD,YAAO,QAAQ;MACd,OAAO,MAAM;MACb,QAAQ,MAAM;MACd,GAAG;cACK;AACT,gBAAW,QAAQ,IAAI;;WAEjB;AACP,WAAO;;MAEL;AACJ,QAAM,IAAI,KAAK,KAAK;;AAErB,QAAO;;AAKR,MAAM,+BAA+B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8HrC,MAAM,sCAAsC,IAAI,SAAS;AACzD,MAAM,cAAc,IAAI,aAAa,GAAG;AACxC,SAAS,mBAAmB,QAAQ;CACnC,IAAI,QAAQ,oBAAoB,IAAI,OAAO;AAC3C,KAAI,CAAC,OAAO;AACX,0BAAwB,IAAI,KAAK;AACjC,sBAAoB,IAAI,QAAQ,MAAM;;AAEvC,QAAO;;AAER,eAAe,eAAe,KAAK,SAAS,MAAM,OAAO;CACxD,MAAMwB,WAAS,MAAM;AACrB,KAAI,CAACA,SAAQ;CACb,MAAM,YAAYA;CAClB,MAAM,SAAS,OAAO,MAAM,WAAW,YAAY,MAAM,UAAU,OAAO,UAAU,WAAW,YAAY,UAAU,UAAU;CAC/H,MAAM,QAAQ,MAAM,SAAS;CAC7B,MAAM,MAAM,MAAM,OAAO;CACzB,MAAM,QAAQ,MAAM,SAAS;CAC7B,MAAM,SAAS,MAAM,UAAU;CAC/B,MAAM,YAAY,MAAM,cAAc,KAAK,IAAI,MAAM,YAAY,QAAQ,MAAM;CAC/E,IAAI,aAAa,MAAM,eAAe,KAAK,IAAI,MAAM,aAAa;CAClE,MAAM,cAAc,OAAOA,UAAQ,eAAe,WAAWA,SAAO,aAAa;AACjF,KAAI,CAAC,cAAc,YAAa,cAAa;CAC7C,IAAI,cAAc,aAAa;CAC/B,MAAM,aAAaA,SAAO,SAAS,iBAAiB,QAAQ,UAAU,UAAU,IAAI,UAAU,OAAO;CACrG,MAAM,aAAaA,SAAO,SAAS,UAAU,UAAU,OAAO;AAC9D,KAAI,eAAe,GAAG;EACrB,MAAM,WAAW,UAAU;EAC3B,MAAM,aAAa,UAAU;EAC7B,MAAM,cAAc,eAAe,cAAc,IAAI,QAAQ,QAAQ,MAAM,SAAS,KAAK,cAAc,UAAU,SAAS,eAAe,cAAc,IAAI,QAAQ,SAAS,QAAQ,MAAM,SAAS,GAAG,KAAK,OAAO,cAAc,YAAY,SAAS,eAAe,cAAc,IAAI,QAAQ,WAAW,QAAQ,MAAM,SAAS,GAAG,KAAK;AACxU,MAAI,eAAe,cAAc,EAAG,eAAc;;CAEnD,MAAM,iBAAiB,YAAY;AACnC,OAAM,eAAe,4BAA4B,IAAI,QAAQA,UAAQ,KAAK,MAAM,SAAS;CACzF,MAAM,aAAa,eAAe,yBAAyB,IAAI,QAAQ,SAAS,QAAQ,gBAAgB,aAAaA,UAAQ,OAAO,QAAQ,MAAM,UAAU,OAAO,IAAI;CACvK,MAAM,YAAY,mBAAmB,IAAI,OAAO;CAChD,MAAM,WAAW,WAAW,IAAI,SAAS;CACzC,IAAI,WAAW,UAAU,IAAI,SAAS;AACtC,KAAI,CAAC,UAAU;EACd,MAAM,eAAe,IAAI,OAAO,mBAAmB;GAClD,OAAO;GACP,MAAM;GACN,CAAC;AACF,aAAW,IAAI,OAAO,qBAAqB;GAC1C,OAAO;GACP,QAAQ;GACR,QAAQ;IACP,QAAQ;IACR,YAAY;IACZ;GACD,UAAU;IACT,QAAQ;IACR,YAAY;IACZ,SAAS,CAAC,EAAE,QAAQ,IAAI,SAAS,QAAQ,CAAC;IAC1C;GACD,WAAW,EAAE,UAAU,kBAAkB;GACzC,CAAC;AACF,YAAU,IAAI,UAAU,SAAS;;CAElC,IAAI,iBAAiB;AACrB,KAAI,CAAC,cAAc,CAAC,YAAY;EAC/B,MAAM,SAASA;AACf,MAAI,OAAO,OAAO,iBAAiB,SAAU,kBAAiB,OAAO;WAC5D,OAAO,YAAY,UAAU,OAAO,mBAAmB,oBAAoB,OAAO,SAAS,QAAQ,CAAE,kBAAiB;WACtH,OAAO,YAAY,UAAU,OAAO,mBAAmB,UAAU,OAAO,mBAAmB,cAAc,OAAO,SAAS,QAAQ,CAAE,kBAAiB;WACpJ,OAAO,YAAY,YAAY,OAAO,mBAAmB,kBAAkB,OAAO,SAAS,UAAU,CAAE,kBAAiB;;CAElI,MAAM,kBAAkB,eAAe,WAAW,OAAO,KAAK,OAAO,UAAU,WAAW,WAAW,eAAe,WAAW,UAAU,OAAO,GAAG,KAAK;CACxJ,MAAM,SAAS,OAAO,iBAAiB,QAAQ,WAAW,gBAAgB,MAAM,OAAO,UAAU,iBAAiB,WAAW,UAAU,gBAAgB,MAAM,UAAU,MAAM,MAAM,aAAa;CAChM,MAAM,SAAS,OAAO,iBAAiB,QAAQ,WAAW,gBAAgB,MAAM,OAAO,UAAU,iBAAiB,WAAW,UAAU,gBAAgB,MAAM,UAAU,MAAM,MAAM,aAAa;AAChM,aAAY,KAAK,MAAM,aAAa;AACpC,aAAY,KAAK,MAAM,UAAU;AACjC,aAAY,KAAK;AACjB,aAAY,KAAK;AACjB,aAAY,KAAK;AACjB,aAAY,KAAK;AACjB,aAAY,KAAK;AACjB,aAAY,KAAK;AACjB,aAAY,KAAK;AACjB,aAAY,KAAK;AACjB,aAAY,MAAM;AAClB,aAAY,MAAM;CAClB,MAAM,UAAU,IAAI,SAAS,mBAAmB,YAAY;CAC5D,MAAM,aAAa,IAAI,OAAO,gBAAgB;EAC7C,QAAQ,SAAS,mBAAmB,EAAE;EACtC,SAAS,CAAC;GACT,SAAS;GACT,UAAU,EAAE,QAAQ,SAAS;GAC7B,CAAC;EACF,CAAC;CACF,MAAM,aAAa,IAAI,OAAO,gBAAgB;EAC7C,QAAQ,SAAS,mBAAmB,EAAE;EACtC,SAAS,CAAC;GACT,SAAS;GACT,UAAU;GACV,CAAC;EACF,CAAC;AACF,MAAK,YAAY,SAAS;AAC1B,MAAK,aAAa,GAAG,WAAW;AAChC,MAAK,aAAa,GAAG,WAAW;AAChC,MAAK,KAAK,EAAE;;AAKb,IAAI,YAAY,MAAM;CACrB,wBAAwB,IAAI,KAAK;CACjC,MAAM,KAAK,KAAK,OAAO,QAAQ,YAAY;EAC1C,MAAM,gBAAgB,KAAK,IAAI,GAAG,KAAK,KAAK,MAAM,CAAC;EACnD,MAAM,iBAAiB,KAAK,IAAI,GAAG,KAAK,KAAK,OAAO,CAAC;EACrD,MAAM,MAAM,GAAG,IAAI,GAAG,cAAc,GAAG,eAAe,GAAG;EACzD,IAAI,UAAU,KAAK,MAAM,IAAI,IAAI;AACjC,MAAI,CAAC,SAAS;AACb,cAAW,YAAY;IACtB,IAAI;AACJ,QAAI,IAAI,WAAW,UAAU,IAAI,IAAI,WAAW,WAAW,IAAI,IAAI,WAAW,QAAQ,IAAI,CAAC,YAAY;KACtG,MAAM,MAAM,MAAM,MAAM,IAAI;AAC5B,SAAI,CAAC,IAAI,GAAI,OAAM,IAAI,MAAM,wBAAwB,MAAM;AAC3D,YAAO,MAAM,IAAI,MAAM;WACjB;KACN,IAAI,WAAW;AACf,SAAI,SAAS,WAAW,UAAU,CAAE,KAAI;AACvC,iBAAW,IAAI,IAAI,SAAS,CAAC;aACtB;AACP,iBAAW,SAAS,QAAQ,cAAc,GAAG;;AAE9C,SAAI;AACH,aAAO,OAAO,MAAM;;OAEnB;GACJ,SAAS,UAAU,QAAQ;aACjB;MACP,MAAM,MAAM,MAAM,MAAM,IAAI;AAC5B,UAAI,CAAC,IAAI,GAAI,OAAM,IAAI,MAAM,wBAAwB,MAAM;AAC3D,aAAO,MAAM,IAAI,MAAM;;;AAGzB,QAAI,YAAY;KACf,MAAM,EAAE,gBAAgB,MAAM;;MAE7B;;KAED,MAAM,WAAW,MAAM,YAAY,MAAM,EAAE,OAAO;MACjD,MAAM;MACN,OAAO;MACP,EAAE,CAAC;AACJ,YAAO;MACN,OAAO,SAAS;MAChB,QAAQ,SAAS;MACjB,QAAQ,IAAI,WAAW,SAAS,OAAO;MACvC;;IAEF,MAAM,OAAO,IAAI,KAAK,CAAC,KAAK,EAAE,EAAE,MAAM,iBAAiB,CAAC;IACxD,MAAM,MAAM,IAAI,gBAAgB,KAAK;IACrC,MAAM,MAAM,IAAI,OAAO;AACvB,UAAM,IAAI,SAAS,aAAW,WAAW;AACxC,SAAI,eAAexB,aAAW;AAC9B,SAAI,gBAAgB,uBAAuB,IAAI,MAAM,6BAA6B,MAAM,CAAC;AACzF,SAAI,MAAM;MACT;IACF,MAAM,SAAS,IAAI,gBAAgB,eAAe,eAAe;AACjE,WAAO,WAAW,KAAK,CAAC,UAAU,KAAK,GAAG,GAAG,eAAe,eAAe;AAC3E,QAAI,gBAAgB,IAAI;AACxB,WAAO;KACN,OAAO;KACP,QAAQ;KACR,QAAQ,MAAM,kBAAkB,OAAO;KACvC;OACE;AACJ,QAAK,MAAM,IAAI,KAAK,QAAQ;AAC5B,WAAQ,YAAY,KAAK,MAAM,OAAO,IAAI,CAAC;;AAE5C,SAAO;;;AAGT,MAAM,YAAY,IAAI,WAAW;AACjC,eAAe,YAAY,KAAK,MAAM,OAAO;CAC5C,MAAM,gBAAgB,KAAK,IAAI,GAAG,KAAK,KAAK,MAAM,QAAQ,MAAM,CAAC;CACjE,MAAM,iBAAiB,KAAK,IAAI,GAAG,KAAK,KAAK,MAAM,QAAQ,OAAO,CAAC;CACnE,MAAM,WAAW,GAAG,MAAM,IAAI,GAAG,cAAc,GAAG;CAClD,IAAI,MAAM,aAAa,QAAQ,SAAS;AACxC,KAAI,CAAC,IAAK,KAAI;EACb,MAAM,OAAO,MAAM,UAAU,KAAK,MAAM,KAAK,eAAe,gBAAgB,MAAM,cAAc,MAAM;AACtG,QAAM,aAAa,QAAQ,SAAS;AACpC,MAAI,CAAC,KAAK;AACT,SAAM,mBAAmB,IAAI,QAAQ,KAAK;AAC1C,gBAAa,IAAI,UAAU,KAAK,IAAI,OAAO;;UAEpC,KAAK;AACb,UAAQ,MAAM,+BAA+B,IAAI;AACjD;;AAED,KAAI,SAAS,YAAY,MAAM,KAAK,MAAM,SAAS;EAClD,SAAS,MAAM,WAAW;EAC1B,WAAW,MAAM;EACjB,CAAC;AACF,cAAa,QAAQ,SAAS;;;;;;;AAU/B,MAAM,mCAAmC,IAAI,KAAK;;;;;AAKlD,MAAM,gCAAgC,IAAI,KAAK;;;;;AAK/C,MAAM,iCAAiC,IAAI,KAAK;;;;;AAKhD,SAAS,qBAAqB,KAAK,UAAU,OAAO,YAAY;AAC/D,KAAI,YAAY;AACf,MAAI,CAAC,MAAM,OAAQ,QAAO;EAC1B,MAAM,MAAM,aAAa,OAAO,UAAU,IAAI,QAAQ,MAAM,OAAO,MAAM,OAAO;AAChF,MAAI,OAAO,MAAM,aAAa,EAAE,SAAS,KAAK,EAAE,MAAM,QAAQ,EAAE,aAAa,MAAM,QAAQ,GAAG,EAAE,CAAC,MAAM,OAAO,MAAM,OAAO,CAAC;AAC5H,SAAO;QACD;AACN,MAAI,CAAC,MAAM,OAAQ,QAAO;EAC1B,MAAM,MAAM,aAAa,OAAO,UAAU,IAAI,QAAQ,MAAM,OAAO,MAAM,OAAO;AAChF,MAAI,OAAO,MAAM,2BAA2B;GAC3C,QAAQ,MAAM;GACd,OAAO;GACP,EAAE;GACF,SAAS;GACT,oBAAoB;GACpB,EAAE,CAAC,MAAM,OAAO,MAAM,OAAO,CAAC;AAC/B,SAAO;;;;;;;AAOT,SAAS,oBAAoB,QAAQ,QAAQ,QAAQ;CACpD,MAAM,UAAU,iBAAiB,IAAI,OAAO;AAC5C,KAAI,WAAW,YAAY,QAAQ;AAClC,eAAa,MAAM,SAAS,OAAO;AACnC,eAAa,WAAW,OAAO,QAAQ;;AAExC,kBAAiB,IAAI,QAAQ,OAAO;AACpC,cAAa,WAAW,IAAI,OAAO;;AAEpC,MAAM,gBAAgB,OAAO,KAAK,MAAM,UAAU;CACjD,MAAM,aAAa,MAAM,eAAe,OAAO,WAAW,eAAe,QAAQ,WAAW,yBAAyB;AACrH,KAAI;EACH,MAAM,SAAS,MAAM,UAAU;EAC/B,MAAM,mBAAmB,MAAM;AAC/B,MAAI,cAAc,IAAI,OAAO,KAAK,kBAAkB;AACnD,iBAAc,IAAI,QAAQ,iBAAiB;GAC3C,MAAM,UAAU,iBAAiB,IAAI,OAAO;AAC5C,OAAI,SAAS;AACZ,iBAAa,MAAM,SAAS,IAAI,OAAO;AACvC,qBAAiB,OAAO,OAAO;;;EAGjC,MAAM,UAAU,kBAAkB,SAAS,MAAM,WAAW,YAAY,OAAO;EAC/E,MAAM,WAAW,MAAM;EACvB,IAAI,WAAW,aAAa,QAAQ,SAAS;EAC7C,MAAM,YAAY,MAAM,aAAa;EACrC,MAAM,aAAa,cAAc,MAAM,aAAa,CAAC;EACrD,MAAM,eAAe,CAAC,iBAAiB,IAAI,OAAO;AAClD,MAAI,CAAC,UACJ;OAAI,CAAC,eAAe,IAAI,SAAS,EAAE;IAClC,MAAM,cAAc,GAAG,OAAO,GAAG,KAAK,QAAQ;IAC9C,MAAM,SAAS,WAAW,sCAAsC,IAAI,KAAK;AACzE,eAAW,qBAAqB;AAChC,WAAO,IAAI,YAAY;IACvB,MAAM,mBAAmB,KAAK,IAAI,GAAG,OAAO,SAAS,MAAM,aAAa,GAAG,MAAM,eAAe,EAAE;IAClG,MAAM,iBAAiB,YAAY;KAClC,MAAM,QAAQ,MAAM,QAAQ,SAAS,iBAAiB;AACtD,SAAI,CAAC,MAAO;AACZ,SAAI,aAAa,QAAQ,SAAS,EAAE;AACnC,mBAAa,QAAQ,SAAS;AAC9B;;AAED,SAAI,qBAAqB,KAAK,UAAU,OAAO,WAAW,CAAE,qBAAoB,QAAQ,UAAU,IAAI,OAAO;QAC1G,CAAC,cAAc;AAClB,oBAAe,OAAO,SAAS;AAC/B,YAAO,OAAO,YAAY;MACzB;AACF,kBAAc,OAAO,QAAQ;AAC5B,SAAI,CAAC,cAAc,CAAC,aAAc,SAAQ,MAAM,6BAA6B,IAAI;MAChF;AACF,mBAAe,IAAI,UAAU,cAAc;AAC3C,QAAI,gBAAgB,YAAY;AAC/B,WAAM;AACN,gBAAW,aAAa,QAAQ,SAAS;;cAEhC,gBAAgB,YAAY;AACtC,UAAM,eAAe,IAAI,SAAS;AAClC,eAAW,aAAa,QAAQ,SAAS;;QAEpC,qBAAoB,QAAQ,UAAU,IAAI,OAAO;EACxD,IAAI,YAAY;EAChB,IAAI,YAAY;AAChB,MAAI,UAAU;AACb,eAAY;AACZ,eAAY;aACF,iBAAiB,IAAI,OAAO,EAAE;GACxC,MAAM,cAAc,iBAAiB,IAAI,OAAO;GAChD,MAAM,cAAc,aAAa,QAAQ,YAAY;AACrD,OAAI,aAAa;AAChB,gBAAY;AACZ,gBAAY;;;AAGd,MAAI,UAAW,KAAI,SAAS,YAAY,MAAM,WAAW,MAAM,SAAS;GACvE,SAAS,MAAM;GACf,WAAW,MAAM;GACjB,CAAC;AACF,MAAI,UAAW,cAAa,QAAQ,UAAU;UACtC,KAAK;AACb,MAAI,WAAY,OAAM;AACtB,UAAQ,MAAM,oCAAoC,IAAI;;;AAoBxD,MAAM,sBAAsB,WAAW;AACtC,MAAK,MAAM,OAAO,iBAAiB,QAAQ,EAAE;AAC5C,eAAa,MAAM,KAAK,OAAO;AAC/B,eAAa,WAAW,OAAO,IAAI;;AAEpC,kBAAiB,OAAO;AACxB,eAAc,OAAO;AACrB,gBAAe,OAAO;;AAKvB,IAAI,aAAa,MAAM;CACtB,UAAU,EAAE;CACZ,QAAQ;CACR;CACA;CACA,YAAY,MAAM,OAAO;AACxB,OAAK,OAAO;AACZ,OAAK,QAAQ;;CAEd,UAAU,QAAQ,MAAM;EACvB,MAAM,eAAe,KAAK,IAAI,KAAK,MAAM,KAAK,WAAW;AACzD,MAAI,KAAK,SAAS,KAAK,QAAQ,QAAQ;GACtC,MAAM,QAAQ,OAAO,aAAa;IACjC,MAAM;IACN,OAAO,KAAK;IACZ,CAAC;AACF,QAAK,QAAQ,KAAK,MAAM;;EAEzB,IAAI,MAAM,KAAK,QAAQ,KAAK;AAC5B,MAAI,IAAI,OAAO,cAAc;GAC5B,MAAM,SAAS;AACf,UAAO,MAAM,qBAAqB,CAAC,WAAW;AAC7C,QAAI;AACH,YAAO,SAAS;YACT;KACP;AACF,SAAM,OAAO,aAAa;IACzB,MAAM;IACN,OAAO,KAAK;IACZ,CAAC;AACF,QAAK,QAAQ,KAAK,SAAS;;AAE5B,OAAK;AACL,SAAO,MAAM,YAAY,KAAK,GAAG,KAAK;AACtC,SAAO;;CAER,QAAQ;AACP,OAAK,QAAQ;;CAEd,UAAU;AACT,OAAK,MAAM,OAAO,KAAK,QAAS,KAAI,SAAS;AAC7C,OAAK,UAAU,EAAE;;;AAMnB,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwJtB,IAAI,wBAAwB,MAAM;CACjC,wBAAwB,IAAI,SAAS;CACrC,aAAa,QAAQ,QAAQ,QAAQ;EACpC,IAAI,KAAK,KAAK,MAAM,IAAI,OAAO;AAC/B,MAAI,CAAC,IAAI;AACR,QAAK,OAAO,gBAAgB;IAC3B;IACA,SAAS,CAAC;KACT,SAAS;KACT,UAAU,EAAE,QAAQ;KACpB,CAAC;IACF,CAAC;AACF,QAAK,MAAM,IAAI,QAAQ,GAAG;;AAE3B,SAAO;;CAER,UAAU;AACT,OAAK,wBAAwB,IAAI,SAAS;;;AAM5C,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6CzB,IAAI,cAAc,MAAM;CACvB,WAAW,EAAE;CACb,gCAAgC,IAAI,KAAK;CACzC,QAAQ;CACR,WAAW,QAAQ,OAAO,QAAQ,QAAQ,SAAS;EAClD,MAAM,aAAa,IAAI,IAAI,MAAM,QAAQ,QAAQ,GAAG,UAAU,UAAU,CAAC,QAAQ,GAAG,EAAE,CAAC;EACvF,MAAM,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG;EAClC,MAAM,OAAO,KAAK,cAAc,IAAI,IAAI;AACxC,MAAI,KAAM,MAAK,IAAI,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;GAC/C,MAAM,QAAQ,KAAK;AACnB,OAAI,CAAC,WAAW,IAAI,MAAM,EAAE;AAC3B,SAAK,OAAO,GAAG,EAAE;AACjB,SAAK,QAAQ,MAAM;IACnB,MAAM,UAAU,KAAK,SAAS,QAAQ,MAAM;AAC5C,QAAI,WAAW,KAAK,OAAO;AAC1B,UAAK,SAAS,OAAO,SAAS,EAAE;AAChC,UAAK,SAAS,OAAO,KAAK,OAAO,GAAG,MAAM;AAC1C,UAAK;;AAEN,WAAO;;;EAGT,MAAM,MAAM,OAAO,cAAc;GAChC,MAAM,CAAC,OAAO,OAAO;GACrB;GACA,OAAO,gBAAgB,oBAAoB,gBAAgB,kBAAkB,gBAAgB;GAC7F,CAAC;AACF,MAAI,CAAC,KAAK,cAAc,IAAI,IAAI,CAAE,MAAK,cAAc,IAAI,KAAK,EAAE,CAAC;AACjE,OAAK,cAAc,IAAI,IAAI,CAAC,QAAQ,IAAI;AACxC,OAAK,SAAS,OAAO,KAAK,OAAO,GAAG,IAAI;AACxC,OAAK;AACL,SAAO;;CAER,QAAQ;AACP,OAAK,QAAQ;;CAEd,UAAU;AACT,OAAK,MAAM,OAAO,KAAK,SAAU,KAAI,SAAS;AAC9C,OAAK,WAAW,EAAE;AAClB,OAAK,cAAc,OAAO;AAC1B,OAAK,QAAQ;;;AAGf,MAAM,iBAAiB;CACtB,QAAQ;CACR,eAAe;CACf,UAAU;CACV,QAAQ;CACR,SAAS;CACT,QAAQ;CACR,SAAS;CACT,eAAe;CACf,cAAc;CACd,cAAc;CACd,cAAc;CACd,YAAY;CACZ,WAAW;CACX,KAAK;CACL,YAAY;CACZ,OAAO;CACP,YAAY;CACZ,WAAW;CACX,kBAAkB;CAClB,YAAY;CACZ,mBAAmB;CACnB,aAAa;CACb,cAAc;CACd,eAAe;CACf,oBAAoB;CACpB,oBAAoB;CACpB,SAAS;CACT,MAAM;CACN,KAAK;CACL,WAAW;CACX,YAAY;CACZ;AACD,IAAI,iBAAiB,MAAM;CAC1B;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA,iCAAiC,IAAI,uBAAuB;CAC5D,kCAAkC,IAAI,uBAAuB;CAC7D,gBAAgB,IAAI,YAAY,EAAE;CAClC,iBAAiB,IAAI,aAAa,EAAE;CACpC,YAAY,QAAQ,QAAQ;AAC3B,OAAK,SAAS;AACd,OAAK,gBAAgB,IAAI,WAAW,MAAM,eAAe,UAAU,eAAe,SAAS;AAC3F,OAAK,iBAAiB,IAAI,WAAW,MAAM,eAAe,UAAU,eAAe,SAAS;AAC5F,OAAK,cAAc,IAAI,aAAa;AACpC,OAAK,yBAAyB,OAAO,sBAAsB,EAAE,SAAS,CAAC;GACtE,SAAS;GACT,YAAY,eAAe;GAC3B,QAAQ,EAAE,MAAM,WAAW;GAC3B,CAAC,EAAE,CAAC;AACL,OAAK,oBAAoB,OAAO,sBAAsB,EAAE,SAAS;GAChE;IACC,SAAS;IACT,YAAY,eAAe;IAC3B,SAAS,EAAE,YAAY,SAAS;IAChC;GACD;IACC,SAAS;IACT,YAAY,eAAe;IAC3B,SAAS,EAAE,YAAY,SAAS;IAChC;GACD;IACC,SAAS;IACT,YAAY,eAAe;IAC3B,SAAS,EAAE,MAAM,aAAa;IAC9B;GACD,EAAE,CAAC;AACJ,OAAK,0BAA0B,OAAO,sBAAsB,EAAE,SAAS,CAAC;GACvE,SAAS;GACT,YAAY,eAAe;GAC3B,QAAQ,EAAE,MAAM,WAAW;GAC3B,CAAC,EAAE,CAAC;AACL,OAAK,sBAAsB,OAAO,sBAAsB,EAAE,SAAS,CAAC;GACnE,SAAS;GACT,YAAY,eAAe;GAC3B,SAAS,EAAE,YAAY,SAAS;GAChC,EAAE;GACF,SAAS;GACT,YAAY,eAAe;GAC3B,SAAS,EAAE,MAAM,aAAa;GAC9B,CAAC,EAAE,CAAC;EACL,MAAM,0BAA0B,OAAO,qBAAqB,EAAE,kBAAkB,CAAC,KAAK,wBAAwB,KAAK,kBAAkB,EAAE,CAAC;EACxI,MAAM,kBAAkB,OAAO,mBAAmB;GACjD,OAAO;GACP,MAAM;GACN,CAAC;AACF,OAAK,oBAAoB,OAAO,qBAAqB;GACpD,OAAO;GACP,QAAQ;GACR,QAAQ;IACP,QAAQ;IACR,YAAY;IACZ;GACD,UAAU;IACT,QAAQ;IACR,YAAY;IACZ,SAAS,CAAC,EAAE,QAAQ,CAAC;IACrB;GACD,WAAW,EAAE,UAAU,kBAAkB;GACzC,CAAC;EACF,MAAM,2BAA2B,OAAO,qBAAqB,EAAE,kBAAkB,CAAC,KAAK,yBAAyB,KAAK,oBAAoB,EAAE,CAAC;EAC5I,MAAM,mBAAmB,OAAO,mBAAmB;GAClD,OAAO;GACP,MAAM;GACN,CAAC;AACF,OAAK,qBAAqB,OAAO,qBAAqB;GACrD,OAAO;GACP,QAAQ;GACR,QAAQ;IACP,QAAQ;IACR,YAAY;IACZ;GACD,UAAU;IACT,QAAQ;IACR,YAAY;IACZ,SAAS,CAAC,EAAE,QAAQ,CAAC;IACrB;GACD,WAAW,EAAE,UAAU,iBAAiB;GACxC,CAAC;;CAEH,aAAa;AACZ,OAAK,cAAc,OAAO;AAC1B,OAAK,eAAe,OAAO;AAC3B,OAAK,YAAY,OAAO;;CAEzB,WAAW,QAAQ,OAAO,QAAQ,QAAQ,SAAS;AAClD,SAAO,KAAK,YAAY,WAAW,QAAQ,OAAO,QAAQ,QAAQ,QAAQ;;CAE3E,UAAU,QAAQ,MAAM;AACvB,SAAO,KAAK,cAAc,UAAU,QAAQ,KAAK;;CAElD,UAAU,SAAS,gBAAgB,cAAc,SAAS,YAAY,MAAM,QAAQ,SAAS;EAC5F,MAAM,UAAU,aAAa,WAAW,KAAK,OAAO;EACpD,MAAM,kBAAkB,CAAC,SAAS,WAAW;AAC7C,MAAI,QAAS,KAAI,MAAM,QAAQ,QAAQ,CAAE,iBAAgB,KAAK,GAAG,QAAQ;MACpE,iBAAgB,KAAK,QAAQ;EAClC,MAAM,SAAS,KAAK,YAAY,WAAW,KAAK,QAAQ,QAAQ,OAAO,QAAQ,QAAQ,QAAQ,gBAAgB;AAC/G,OAAK,cAAc,KAAK,eAAe,SAAS;EAChD,MAAM,SAAS,KAAK,cAAc,UAAU,KAAK,QAAQ,KAAK,cAAc;EAC5E,MAAM,OAAO,QAAQ,gBAAgB,EAAE,kBAAkB,CAAC;GACzD,MAAM,OAAO,YAAY;GACzB,QAAQ;GACR,SAAS;GACT,YAAY;IACX,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH;GACD,CAAC,EAAE,CAAC;AACL,OAAK,YAAY,KAAK,kBAAkB;EACxC,MAAM,mBAAmB,KAAK,+BAA+B,aAAa,KAAK,QAAQ,KAAK,wBAAwB,OAAO;AAC3H,OAAK,aAAa,GAAG,iBAAiB;EACtC,MAAM,mBAAmB,eAAe,sBAAsB,KAAK,QAAQ,KAAK,mBAAmB,SAAS,YAAY,QAAQ;AAChI,OAAK,aAAa,GAAG,iBAAiB;AACtC,OAAK,KAAK,EAAE;AACZ,OAAK,KAAK;AACV,SAAO;;CAER,gBAAgB,SAAS,gBAAgB,cAAc,WAAW,IAAI,IAAI,eAAe,KAAK,UAAU,IAAI,QAAQ,SAAS;AAC5H,MAAI,KAAK,IAAI,GAAG,GAAG,MAAM,KAAK,IAAI,GAAG,GAAG,MAAM,gBAAgB,EAAG,QAAO;EACxE,MAAM,UAAU,aAAa,WAAW,KAAK,OAAO;EACpD,MAAM,kBAAkB,CAAC,UAAU;AACnC,MAAI,QAAS,KAAI,MAAM,QAAQ,QAAQ,CAAE,iBAAgB,KAAK,GAAG,QAAQ;MACpE,iBAAgB,KAAK,QAAQ;EAClC,MAAM,SAAS,KAAK,YAAY,WAAW,KAAK,QAAQ,UAAU,OAAO,UAAU,QAAQ,QAAQ,gBAAgB;AACnH,OAAK,eAAe,KAAK,KAAK,UAAU;AACxC,OAAK,eAAe,KAAK,KAAK,UAAU;AACxC,OAAK,eAAe,KAAK;AACzB,OAAK,eAAe,KAAK;AACzB,OAAK,eAAe,KAAK,eAAe;AACxC,OAAK,eAAe,KAAK;AACzB,OAAK,eAAe,KAAK,UAAU;AACnC,OAAK,eAAe,KAAK,UAAU;EACnC,MAAM,SAAS,KAAK,eAAe,UAAU,KAAK,QAAQ,KAAK,eAAe;EAC9E,MAAM,OAAO,QAAQ,gBAAgB,EAAE,kBAAkB,CAAC;GACzD,MAAM,OAAO,YAAY;GACzB,QAAQ;GACR,SAAS;GACT,YAAY;IACX,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH;GACD,CAAC,EAAE,CAAC;AACL,OAAK,YAAY,KAAK,mBAAmB;EACzC,MAAM,mBAAmB,KAAK,gCAAgC,aAAa,KAAK,QAAQ,KAAK,yBAAyB,OAAO;AAC7H,OAAK,aAAa,GAAG,iBAAiB;AACtC,OAAK,aAAa,GAAG,eAAe,aAAa,KAAK,QAAQ,KAAK,qBAAqB,WAAW,QAAQ,CAAC;AAC5G,OAAK,KAAK,EAAE;AACZ,OAAK,KAAK;AACV,SAAO;;CAER,UAAU;AACT,OAAK,cAAc,SAAS;AAC5B,OAAK,eAAe,SAAS;AAC7B,OAAK,YAAY,SAAS;AAC1B,OAAK,+BAA+B,SAAS;AAC7C,OAAK,gCAAgC,SAAS;;;;;;;;;;;;AAehD,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2LzB,MAAM,WAAW;;;;;;;;;;;;EAYf,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgHnB,IAAI,eAAe,MAAM;CACxB;CACA;CACA;CACA;CACA;CACA;CACA,wBAAwB,IAAI,uBAAuB;CACnD,cAAc,IAAI,aAAa,GAAG;CAClC,WAAW;CACX,YAAY,QAAQ,QAAQ;AAC3B,OAAK,SAAS;AACd,OAAK,cAAc,IAAI,WAAW,MAAM,eAAe,UAAU,eAAe,SAAS;AACzF,OAAK,eAAe,IAAI,WAAW,QAAQ,eAAe,SAAS,eAAe,SAAS;EAC3F,MAAMyB,WAAS,OAAO,mBAAmB;GACxC,OAAO;GACP,MAAM;GACN,CAAC;AACF,OAAK,gBAAgB,OAAO,sBAAsB;GACjD,OAAO;GACP,SAAS,CAAC;IACT,SAAS;IACT,YAAY,eAAe,SAAS,eAAe;IACnD,QAAQ,EAAE,MAAM,WAAW;IAC3B,CAAC;GACF,CAAC;AACF,OAAK,gBAAgB,OAAO,sBAAsB;GACjD,OAAO;GACP,SAAS,CAAC;IACT,SAAS;IACT,YAAY,eAAe;IAC3B,SAAS,EAAE,YAAY,sBAAsB;IAC7C,EAAE;IACF,SAAS;IACT,YAAY,eAAe;IAC3B,SAAS,EAAE,YAAY,QAAQ;IAC/B,CAAC;GACF,CAAC;AACF,OAAK,WAAW,OAAO,qBAAqB;GAC3C,OAAO;GACP,QAAQ,OAAO,qBAAqB,EAAE,kBAAkB,CAAC,KAAK,eAAe,KAAK,cAAc,EAAE,CAAC;GACnG,QAAQ;IACP;IACA,YAAY;IACZ,SAAS,CAAC;KACT,aAAa;KACb,UAAU;KACV,YAAY;MACX;OACC,gBAAgB;OAChB,QAAQ;OACR,QAAQ;OACR;MACD;OACC,gBAAgB;OAChB,QAAQ;OACR,QAAQ;OACR;MACD;OACC,gBAAgB;OAChB,QAAQ;OACR,QAAQ;OACR;MACD;OACC,gBAAgB;OAChB,QAAQ;OACR,QAAQ;OACR;MACD;OACC,gBAAgB;OAChB,QAAQ;OACR,QAAQ;OACR;MACD;OACC,gBAAgB;OAChB,QAAQ;OACR,QAAQ;OACR;MACD;KACD,CAAC;IACF;GACD,UAAU;IACT;IACA,YAAY;IACZ,SAAS,CAAC;KACT;KACA,OAAO;MACN,OAAO;OACN,WAAW;OACX,WAAW;OACX,WAAW;OACX;MACD,OAAO;OACN,WAAW;OACX,WAAW;OACX,WAAW;OACX;MACD;KACD,CAAC;IACF;GACD,WAAW,EAAE,UAAU,iBAAiB;GACxC,CAAC;;CAEH,aAAa;AACZ,OAAK,YAAY,OAAO;AACxB,OAAK,aAAa,OAAO;;;;;;CAM1B,eAAe;AACd,OAAK,WAAW,EAAE;;CAEnB,aAAa;EACZ,MAAM,UAAU,KAAK,YAAY,EAAE;AACnC,OAAK,WAAW;AAChB,SAAO;;CAER,KAAK,MAAM,gBAAgB,MAAM,cAAc,eAAe,QAAQ,cAAc,eAAe,MAAM;AACxG,MAAI,kBAAkB,EAAG;AACzB,MAAI,CAAC,KAAK,aAAa,CAAC,KAAK,SAAU;EACvC,MAAM,UAAU,MAAM,WAAW;AACjC,MAAI,KAAK,UAAU;GAClB,IAAI,IAAI,eAAe,YAAY;AACnC,OAAI,MAAM,UAAW,KAAI,EAAE,SAAS,KAAK,UAAU;AACnD,QAAK,SAAS,KAAK;IAClB;IACA,WAAW,aAAa,MAAM,GAAG,gBAAgB,GAAG;IACpD;IACA;IACA,OAAO,MAAM,eAAe;IAC5B,WAAW;KACV,EAAE;KACF,EAAE;KACF,EAAE;KACF,EAAE;KACF,EAAE;KACF,EAAE;KACF;IACD,CAAC;AACF;;AAED,iBAAe,eAAe,KAAK,aAAa,SAAS,cAAc,eAAe,MAAM,WAAW,MAAM,YAAY;AACzH,OAAK,OAAO,MAAM,MAAM,cAAc,cAAc;;;CAGrD,YAAY,MAAM,SAAS,cAAc,eAAe;AACvD,OAAK,MAAM,SAAS,SAAS;GAC5B,MAAM,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,KAAK,MAAM;AACjC,QAAK,YAAY,IAAI;IACpB;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,MAAM;IACN;IACA;IACA,MAAM;IACN,CAAC;AACF,QAAK,OAAO,MAAM,MAAM,MAAM,MAAM,WAAW,MAAM,cAAc;;;CAGrE,OAAO,MAAM,MAAM,cAAc,eAAe;AAC/C,MAAI,CAAC,KAAK,aAAa,CAAC,KAAK,SAAU;EACvC,MAAM,gBAAgB,KAAK,YAAY,UAAU,KAAK,QAAQ,KAAK,YAAY;EAC/E,MAAM,iBAAiB,KAAK,aAAa,UAAU,KAAK,QAAQ,aAAa;EAC7E,MAAM,mBAAmB,KAAK,OAAO,gBAAgB;GACpD,QAAQ,KAAK;GACb,SAAS,CAAC;IACT,SAAS;IACT,UAAU,KAAK,UAAU,YAAY;IACrC,EAAE;IACF,SAAS;IACT,UAAU,KAAK,SAAS,YAAY;IACpC,CAAC;GACF,CAAC;AACF,OAAK,YAAY,KAAK,SAAS;EAC/B,MAAM,mBAAmB,KAAK,sBAAsB,aAAa,KAAK,QAAQ,KAAK,eAAe,cAAc;AAChH,OAAK,aAAa,GAAG,iBAAiB;AACtC,OAAK,aAAa,GAAG,iBAAiB;AACtC,OAAK,gBAAgB,GAAG,eAAe;AACvC,OAAK,KAAK,GAAG,cAAc;;CAE5B,UAAU;AACT,OAAK,YAAY,SAAS;AAC1B,OAAK,aAAa,SAAS;AAC3B,OAAK,sBAAsB,SAAS;;;AAMtC,IAAI,iBAAiB,MAAM;CAC1B,wBAAwB,IAAI,SAAS;CACrC,4BAA4B,IAAI,SAAS;CACzC,aAAa,QAAQ,QAAQ,SAAS,SAAS;EAC9C,IAAI,YAAY,KAAK,MAAM,IAAI,QAAQ;AACvC,MAAI,CAAC,WAAW;AACf,+BAA4B,IAAI,KAAK;AACrC,QAAK,MAAM,IAAI,SAAS,UAAU;;EAEnC,IAAI,KAAK,UAAU,IAAI,OAAO;AAC9B,MAAI,CAAC,IAAI;AACR,QAAK,OAAO,gBAAgB;IAC3B;IACA,SAAS,CAAC;KACT,SAAS;KACT,UAAU,QAAQ,YAAY;KAC9B,EAAE;KACF,SAAS;KACT,UAAU;KACV,CAAC;IACF,CAAC;AACF,aAAU,IAAI,QAAQ,GAAG;;AAE1B,SAAO;;CAER,sBAAsB,QAAQ,QAAQ,aAAa,gBAAgB,SAAS;EAC3E,IAAI,iBAAiB,KAAK,UAAU,IAAI,YAAY;AACpD,MAAI,CAAC,gBAAgB;AACpB,oCAAiC,IAAI,SAAS;AAC9C,QAAK,UAAU,IAAI,aAAa,eAAe;;EAEhD,IAAI,YAAY,eAAe,IAAI,eAAe;AAClD,MAAI,CAAC,WAAW;AACf,+BAA4B,IAAI,KAAK;AACrC,kBAAe,IAAI,gBAAgB,UAAU;;EAE9C,IAAI,KAAK,UAAU,IAAI,OAAO;AAC9B,MAAI,CAAC,IAAI;AACR,QAAK,OAAO,gBAAgB;IAC3B;IACA,SAAS;KACR;MACC,SAAS;MACT,UAAU,YAAY,YAAY;MAClC;KACD;MACC,SAAS;MACT,UAAU,eAAe,YAAY;MACrC;KACD;MACC,SAAS;MACT,UAAU;MACV;KACD;IACD,CAAC;AACF,aAAU,IAAI,QAAQ,GAAG;;AAE1B,SAAO;;CAER,UAAU;AACT,OAAK,wBAAwB,IAAI,SAAS;AAC1C,OAAK,4BAA4B,IAAI,SAAS;;;AAMhD,IAAI,YAAY,MAAM;CACrB,eAAe,EAAE;CACjB,eAAe,EAAE;CACjB,YAAY,MAAM,cAAc,eAAe;AAC9C,OAAK,aAAa,KAAK;GACtB;GACA;GACA;GACA,CAAC;;CAEH,aAAa;AACZ,MAAI,KAAK,aAAa,SAAS,EAAG,MAAK,aAAa,KAAK;;CAE1D,eAAe;AACd,SAAO,CAAC,GAAG,KAAK,aAAa;;CAE9B,gBAAgB,SAAS;AACxB,OAAK,eAAe,CAAC,GAAG,QAAQ;;CAEjC,gBAAgB;AACf,OAAK,eAAe,EAAE;;CAEvB,kBAAkB,cAAc,eAAe;EAC9C,MAAM,QAAQ,KAAK,aAAa,KAAK,aAAa,SAAS;AAC3D,MAAI,CAAC,MAAO,QAAO,KAAK;AACxB,MAAI,iBAAiB,KAAK,KAAK,kBAAkB,KAAK,KAAK,MAAM,iBAAiB,KAAK,KAAK,MAAM,kBAAkB,KAAK,KAAK,MAAM,iBAAiB,KAAK,MAAM,kBAAkB,MAAM,MAAM,iBAAiB,gBAAgB,MAAM,kBAAkB,eAAgB;AACvQ,SAAO,MAAM;;CAEd,gBAAgB,QAAQ;AACvB,OAAK,aAAa,KAAK,OAAO;;CAE/B,iBAAiB;AAChB,MAAI,KAAK,aAAa,SAAS,EAAG,MAAK,aAAa,KAAK;;CAE1D,oBAAoB;AACnB,SAAO,KAAK,aAAa,KAAK,aAAa,SAAS;;CAErD,mBAAmB,MAAM,cAAc,eAAe;EACrD,MAAM,UAAU,KAAK,kBAAkB,cAAc,cAAc;AACnE,MAAI,CAAC,SAAS;AACb,QAAK,eAAe,GAAG,GAAG,KAAK,IAAI,GAAG,KAAK,MAAM,aAAa,CAAC,EAAE,KAAK,IAAI,GAAG,KAAK,MAAM,cAAc,CAAC,CAAC;AACxG;;EAED,MAAM,IAAI,KAAK,IAAI,GAAG,KAAK,MAAM,QAAQ,EAAE,CAAC;EAC5C,MAAM,IAAI,KAAK,IAAI,GAAG,KAAK,MAAM,QAAQ,EAAE,CAAC;EAC5C,MAAM,QAAQ,KAAK,IAAI,cAAc,KAAK,KAAK,QAAQ,IAAI,QAAQ,MAAM,CAAC;EAC1E,MAAM,SAAS,KAAK,IAAI,eAAe,KAAK,KAAK,QAAQ,IAAI,QAAQ,OAAO,CAAC;EAC7E,MAAM,QAAQ,KAAK,IAAI,GAAG,QAAQ,EAAE;EACpC,MAAM,SAAS,KAAK,IAAI,GAAG,SAAS,EAAE;AACtC,MAAI,CAAC,OAAO,SAAS,EAAE,IAAI,CAAC,OAAO,SAAS,EAAE,IAAI,CAAC,OAAO,SAAS,MAAM,IAAI,CAAC,OAAO,SAAS,OAAO,IAAI,SAAS,KAAK,UAAU,EAAG,MAAK,eAAe,GAAG,GAAG,GAAG,EAAE;OAC9J;GACJ,MAAM,eAAe,KAAK,IAAI,OAAO,KAAK,IAAI,GAAG,eAAe,EAAE,CAAC;GACnE,MAAM,gBAAgB,KAAK,IAAI,QAAQ,KAAK,IAAI,GAAG,gBAAgB,EAAE,CAAC;AACtE,OAAI,gBAAgB,KAAK,iBAAiB,EAAG,MAAK,eAAe,GAAG,GAAG,GAAG,EAAE;OACvE,MAAK,eAAe,KAAK,MAAM,EAAE,EAAE,KAAK,MAAM,EAAE,EAAE,KAAK,MAAM,aAAa,EAAE,KAAK,MAAM,cAAc,CAAC;;;CAG7G,UAAU;AACT,OAAK,eAAe,EAAE;AACtB,OAAK,eAAe,EAAE;;;;;;AASxB,SAAS,kBAAkB,IAAI,IAAI,IAAI,IAAI,QAAQ,IAAI;CACtD,MAAM,WAAW,EAAE;CACnB,IAAI,OAAO;AACX,MAAK,IAAI,IAAI,GAAG,KAAK,OAAO,KAAK;EAChC,MAAM,IAAI,IAAI;EACd,MAAM,KAAK,IAAI;EACf,MAAM,MAAM,KAAK;EACjB,MAAM,MAAM,MAAM;EAClB,MAAM,KAAK,IAAI;EACf,MAAM,KAAK,KAAK;EAChB,MAAM,OAAO;GACZ,GAAG,MAAM,GAAG,IAAI,IAAI,MAAM,IAAI,GAAG,IAAI,IAAI,KAAK,KAAK,GAAG,IAAI,KAAK,GAAG;GAClE,GAAG,MAAM,GAAG,IAAI,IAAI,MAAM,IAAI,GAAG,IAAI,IAAI,KAAK,KAAK,GAAG,IAAI,KAAK,GAAG;GAClE;AACD,WAAS,KAAK;GACb,IAAI;GACJ,IAAI;GACJ,CAAC;AACF,SAAO;;AAER,QAAO;;;;;AAKR,SAAS,sBAAsB,IAAI,IAAI,IAAI,QAAQ,IAAI;CACtD,MAAM,WAAW,EAAE;CACnB,IAAI,OAAO;AACX,MAAK,IAAI,IAAI,GAAG,KAAK,OAAO,KAAK;EAChC,MAAM,IAAI,IAAI;EACd,MAAM,KAAK,IAAI;EACf,MAAM,MAAM,KAAK;EACjB,MAAM,KAAK,IAAI;EACf,MAAM,OAAO;GACZ,GAAG,MAAM,GAAG,IAAI,IAAI,KAAK,IAAI,GAAG,IAAI,KAAK,GAAG;GAC5C,GAAG,MAAM,GAAG,IAAI,IAAI,KAAK,IAAI,GAAG,IAAI,KAAK,GAAG;GAC5C;AACD,WAAS,KAAK;GACb,IAAI;GACJ,IAAI;GACJ,CAAC;AACF,SAAO;;AAER,QAAO;;;;;;;AAOR,SAAS,aAAa,IAAI,MAAM,MAAM,aAAa,UAAU,OAAO,IAAI;CACvE,IAAI,KAAK,KAAK,IAAI,KAAK;CACvB,IAAI,KAAK,KAAK,IAAI,KAAK;AACvB,KAAI,KAAK,QAAQ,KAAK,KAAM,QAAO,CAAC;EACnC;EACA;EACA,CAAC;AACF,KAAI,KAAK,MAAM,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,EAAE,GAAG,KAAM,QAAO,EAAE;CAC1D,MAAM,MAAM,cAAc,KAAK,KAAK;CACpC,MAAM,MAAM,KAAK,IAAI,IAAI;CACzB,MAAM,MAAM,KAAK,IAAI,IAAI;CACzB,MAAM,MAAM,GAAG,IAAI,GAAG,KAAK;CAC3B,MAAM,MAAM,GAAG,IAAI,GAAG,KAAK;CAC3B,MAAM,KAAK,MAAM,KAAK,MAAM;CAC5B,MAAM,KAAK,CAAC,MAAM,KAAK,MAAM;CAC7B,MAAM,SAAS,KAAK,MAAM,KAAK,MAAM,KAAK,MAAM,KAAK;AACrD,KAAI,SAAS,GAAG;AACf,QAAM,KAAK,KAAK,OAAO;AACvB,QAAM,KAAK,KAAK,OAAO;;CAExB,MAAM,MAAM,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK;CACnE,MAAM,MAAM,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK;CAC/C,MAAM,QAAQ,aAAa,QAAQ,KAAK,KAAK,KAAK,KAAK,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;CAC9E,MAAM,MAAM,OAAO,KAAK,KAAK;CAC7B,MAAM,MAAM,CAAC,OAAO,KAAK,KAAK;CAC9B,MAAM,KAAK,MAAM,MAAM,MAAM,OAAO,GAAG,IAAI,GAAG,KAAK;CACnD,MAAM,KAAK,MAAM,MAAM,MAAM,OAAO,GAAG,IAAI,GAAG,KAAK;CACnD,MAAM,SAAS,IAAI,IAAI,IAAI,OAAO,KAAK,MAAM,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,KAAK,GAAG;CAClF,MAAM,SAAS,MAAM,GAAG,IAAI,KAAK,OAAO,KAAK,KAAK,OAAO,GAAG;CAC5D,IAAI,QAAQ,OAAO,KAAK,OAAO,KAAK,KAAK,OAAO,KAAK,CAAC,KAAK,OAAO,KAAK,CAAC,KAAK,OAAO,GAAG;AACvF,KAAI,CAAC,SAAS,QAAQ,EAAG,UAAS,IAAI,KAAK;AAC3C,KAAI,SAAS,QAAQ,EAAG,UAAS,IAAI,KAAK;CAC1C,MAAM,QAAQ,KAAK,IAAI,GAAG,KAAK,KAAK,KAAK,IAAI,MAAM,IAAI,IAAI,KAAK,MAAM,GAAG,CAAC;CAC1E,MAAM,WAAW,EAAE;CACnB,IAAI,OAAO;AACX,MAAK,IAAI,IAAI,GAAG,KAAK,OAAO,KAAK;EAChC,MAAM,IAAI,SAAS,QAAQ,IAAI;EAC/B,MAAM,KAAK,KAAK,KAAK,IAAI,EAAE;EAC3B,MAAM,KAAK,KAAK,KAAK,IAAI,EAAE;EAC3B,MAAM,OAAO,MAAM,QAAQ,KAAK;GAC/B,GAAG,MAAM,KAAK,MAAM,KAAK;GACzB,GAAG,MAAM,KAAK,MAAM,KAAK;GACzB;AACD,WAAS,KAAK;GACb,IAAI;GACJ,IAAI;GACJ,CAAC;AACF,SAAO;;AAER,QAAO;;;;;AAKR,SAAS,uBAAuB,GAAG;CAClC,MAAM,WAAW,EAAE;AACnB,KAAI,CAAC,KAAK,OAAO,MAAM,SAAU,QAAO;CACxC,MAAM,SAAS,EAAE;CACjB,MAAM,QAAQ;CACd,IAAI;AACJ,SAAQ,QAAQ,MAAM,KAAK,EAAE,MAAM,KAAM,KAAI,MAAM,GAAI,QAAO,KAAK,MAAM,GAAG;UACnE,MAAM,GAAI,QAAO,KAAK,WAAW,MAAM,GAAG,CAAC;CACpD,IAAI,SAAS;CACb,IAAI,UAAU;EACb,GAAG;EACH,GAAG;EACH;CACD,IAAI,eAAe;EAClB,GAAG;EACH,GAAG;EACH;CACD,IAAI,mBAAmB;CACvB,IAAI,kBAAkB;AACtB,QAAO,SAAS,OAAO,QAAQ;EAC9B,MAAM,WAAW,OAAO;AACxB,MAAI,OAAO,aAAa,SAAU;EAClC,MAAM,MAAM;EACZ,MAAM,aAAa,QAAQ,IAAI,aAAa;EAC5C,MAAM,QAAQ,IAAI,aAAa;EAC/B,MAAM,eAAe;AACpB,OAAI,SAAS,OAAO,UAAU,OAAO,OAAO,YAAY,SAAU,QAAO,OAAO;AAChF,UAAO;;AAER,UAAQ,OAAR;GACC,KAAK,KAAK;IACT,IAAI,QAAQ;AACZ,WAAO,SAAS,OAAO,UAAU,OAAO,OAAO,YAAY,UAAU;KACpE,IAAI,IAAI,QAAQ;KAChB,IAAI,IAAI,QAAQ;AAChB,SAAI,YAAY;AACf,WAAK,QAAQ;AACb,WAAK,QAAQ;;AAEd,SAAI,OAAO;AACV,gBAAU;OACT;OACA;OACA;AACD,qBAAe;OACd;OACA;OACA;AACD,cAAQ;YACF;AACN,eAAS,KAAK;OACb,IAAI;OACJ,IAAI;QACH;QACA;QACA;OACD,CAAC;AACF,gBAAU;OACT;OACA;OACA;;;AAGH,uBAAmB;AACnB,sBAAkB;AAClB;;GAED,KAAK;AACJ,WAAO,SAAS,OAAO,UAAU,OAAO,OAAO,YAAY,UAAU;KACpE,IAAI,IAAI,QAAQ;KAChB,IAAI,IAAI,QAAQ;AAChB,SAAI,YAAY;AACf,WAAK,QAAQ;AACb,WAAK,QAAQ;;AAEd,cAAS,KAAK;MACb,IAAI;MACJ,IAAI;OACH;OACA;OACA;MACD,CAAC;AACF,eAAU;MACT;MACA;MACA;;AAEF,uBAAmB;AACnB,sBAAkB;AAClB;GACD,KAAK;AACJ,WAAO,SAAS,OAAO,UAAU,OAAO,OAAO,YAAY,UAAU;KACpE,IAAI,IAAI,QAAQ;AAChB,SAAI,WAAY,MAAK,QAAQ;KAC7B,MAAM,OAAO;MACZ;MACA,GAAG,QAAQ;MACX;AACD,cAAS,KAAK;MACb,IAAI;MACJ,IAAI;MACJ,CAAC;AACF,eAAU;;AAEX,uBAAmB;AACnB,sBAAkB;AAClB;GACD,KAAK;AACJ,WAAO,SAAS,OAAO,UAAU,OAAO,OAAO,YAAY,UAAU;KACpE,IAAI,IAAI,QAAQ;AAChB,SAAI,WAAY,MAAK,QAAQ;KAC7B,MAAM,OAAO;MACZ,GAAG,QAAQ;MACX;MACA;AACD,cAAS,KAAK;MACb,IAAI;MACJ,IAAI;MACJ,CAAC;AACF,eAAU;;AAEX,uBAAmB;AACnB,sBAAkB;AAClB;GACD,KAAK;AACJ,WAAO,SAAS,OAAO,UAAU,OAAO,OAAO,YAAY,UAAU;KACpE,IAAI,KAAK,QAAQ;KACjB,IAAI,KAAK,QAAQ;KACjB,IAAI,KAAK,QAAQ;KACjB,IAAI,KAAK,QAAQ;KACjB,IAAI,IAAI,QAAQ;KAChB,IAAI,IAAI,QAAQ;AAChB,SAAI,YAAY;AACf,YAAM,QAAQ;AACd,YAAM,QAAQ;AACd,YAAM,QAAQ;AACd,YAAM,QAAQ;AACd,WAAK,QAAQ;AACb,WAAK,QAAQ;;KAEd,MAAM,KAAK;MACV,GAAG;MACH,GAAG;MACH;KACD,MAAM,KAAK;MACV,GAAG;MACH,GAAG;MACH;KACD,MAAM,MAAM;MACX;MACA;MACA;AACD,cAAS,KAAK,GAAG,kBAAkB,SAAS,IAAI,IAAI,IAAI,CAAC;AACzD,eAAU;AACV,wBAAmB;;AAEpB,sBAAkB;AAClB;GACD,KAAK;AACJ,WAAO,SAAS,OAAO,UAAU,OAAO,OAAO,YAAY,UAAU;KACpE,IAAI,KAAK,QAAQ;KACjB,IAAI,KAAK,QAAQ;KACjB,IAAI,IAAI,QAAQ;KAChB,IAAI,IAAI,QAAQ;AAChB,SAAI,YAAY;AACf,YAAM,QAAQ;AACd,YAAM,QAAQ;AACd,WAAK,QAAQ;AACb,WAAK,QAAQ;;KAEd,IAAI;AACJ,SAAI,iBAAkB,MAAK;MAC1B,GAAG,IAAI,QAAQ,IAAI,iBAAiB;MACpC,GAAG,IAAI,QAAQ,IAAI,iBAAiB;MACpC;SACI,MAAK;MACT,GAAG,QAAQ;MACX,GAAG,QAAQ;MACX;KACD,MAAM,KAAK;MACV,GAAG;MACH,GAAG;MACH;KACD,MAAM,MAAM;MACX;MACA;MACA;AACD,cAAS,KAAK,GAAG,kBAAkB,SAAS,IAAI,IAAI,IAAI,CAAC;AACzD,eAAU;AACV,wBAAmB;;AAEpB,sBAAkB;AAClB;GACD,KAAK;AACJ,WAAO,SAAS,OAAO,UAAU,OAAO,OAAO,YAAY,UAAU;KACpE,IAAI,KAAK,QAAQ;KACjB,IAAI,KAAK,QAAQ;KACjB,IAAI,IAAI,QAAQ;KAChB,IAAI,IAAI,QAAQ;AAChB,SAAI,YAAY;AACf,YAAM,QAAQ;AACd,YAAM,QAAQ;AACd,WAAK,QAAQ;AACb,WAAK,QAAQ;;KAEd,MAAM,KAAK;MACV,GAAG;MACH,GAAG;MACH;KACD,MAAM,MAAM;MACX;MACA;MACA;AACD,cAAS,KAAK,GAAG,sBAAsB,SAAS,IAAI,IAAI,CAAC;AACzD,eAAU;AACV,uBAAkB;;AAEnB,uBAAmB;AACnB;GACD,KAAK;AACJ,WAAO,SAAS,OAAO,UAAU,OAAO,OAAO,YAAY,UAAU;KACpE,IAAI,IAAI,QAAQ;KAChB,IAAI,IAAI,QAAQ;AAChB,SAAI,YAAY;AACf,WAAK,QAAQ;AACb,WAAK,QAAQ;;KAEd,IAAI;AACJ,SAAI,gBAAiB,MAAK;MACzB,GAAG,IAAI,QAAQ,IAAI,gBAAgB;MACnC,GAAG,IAAI,QAAQ,IAAI,gBAAgB;MACnC;SACI,MAAK;MACT,GAAG,QAAQ;MACX,GAAG,QAAQ;MACX;KACD,MAAM,MAAM;MACX;MACA;MACA;AACD,cAAS,KAAK,GAAG,sBAAsB,SAAS,IAAI,IAAI,CAAC;AACzD,eAAU;AACV,uBAAkB;;AAEnB,uBAAmB;AACnB;GACD,KAAK;AACJ,WAAO,SAAS,OAAO,UAAU,OAAO,OAAO,YAAY,UAAU;KACpE,MAAM,KAAK,QAAQ;KACnB,MAAM,KAAK,QAAQ;KACnB,MAAM,WAAW,QAAQ;KACzB,MAAM,WAAW,QAAQ,KAAK;KAC9B,MAAM,QAAQ,QAAQ,KAAK;KAC3B,IAAI,IAAI,QAAQ;KAChB,IAAI,IAAI,QAAQ;AAChB,SAAI,YAAY;AACf,WAAK,QAAQ;AACb,WAAK,QAAQ;;KAEd,MAAM,MAAM;MACX;MACA;MACA;AACD,cAAS,KAAK,GAAG,aAAa,SAAS,IAAI,IAAI,UAAU,UAAU,OAAO,IAAI,CAAC;AAC/E,eAAU;;AAEX,uBAAmB;AACnB,sBAAkB;AAClB;GACD,KAAK;AACJ,QAAI,KAAK,MAAM,QAAQ,IAAI,aAAa,GAAG,QAAQ,IAAI,aAAa,EAAE,GAAG,KAAM,UAAS,KAAK;KAC5F,IAAI;KACJ,IAAI;KACJ,CAAC;AACF,cAAU;AACV,uBAAmB;AACnB,sBAAkB;AAClB;GACD,QAAS;;;AAGX,QAAO;;;;;;AAMR,SAAS,iBAAiB,UAAU,WAAW,SAAS,aAAa,GAAG;AACvE,KAAI,SAAS,WAAW,EAAG,QAAO,EAAE;CACpC,MAAM,UAAU,EAAE;CAClB,IAAI,cAAc;AAClB,MAAK,MAAM,OAAO,UAAU;EAC3B,MAAM,MAAM,KAAK,MAAM,IAAI,GAAG,IAAI,IAAI,GAAG,GAAG,IAAI,GAAG,IAAI,IAAI,GAAG,EAAE;AAChE,UAAQ,KAAK,IAAI;AACjB,iBAAe;;AAEhB,KAAI,cAAc,KAAM,QAAO,EAAE;CACjC,MAAM,mBAAmB,KAAK,IAAI,WAAW,GAAG,IAAI,aAAa,MAAM,MAAM;CAC7E,IAAI,KAAK,YAAY,oBAAoB;CACzC,IAAI,KAAK,UAAU,oBAAoB;AACvC,KAAI,IAAI,EAAG,MAAK;AAChB,KAAI,IAAI,EAAG,MAAK;CAChB,MAAM,gBAAgB,WAAW,YAAY;AAC5C,MAAI,aAAa,QAAS,QAAO,EAAE;EACnC,MAAM,SAAS,EAAE;EACjB,IAAI,cAAc;AAClB,OAAK,IAAI,IAAI,GAAG,IAAI,SAAS,QAAQ,KAAK;GACzC,MAAM,MAAM,SAAS;GACrB,MAAM,SAAS,QAAQ;GACvB,MAAM,WAAW;GACjB,MAAM,SAAS,cAAc;AAC7B,iBAAc;AACd,OAAI,UAAU,aAAa,YAAY,WAAW,SAAS,KAAM;GACjE,MAAM,KAAK,KAAK,IAAI,IAAI,YAAY,YAAY,OAAO;GACvD,MAAM,KAAK,KAAK,IAAI,IAAI,UAAU,YAAY,OAAO;AACrD,OAAI,KAAK,IAAI;IACZ,MAAM,KAAK;KACV,GAAG,IAAI,GAAG,KAAK,IAAI,GAAG,IAAI,IAAI,GAAG,KAAK;KACtC,GAAG,IAAI,GAAG,KAAK,IAAI,GAAG,IAAI,IAAI,GAAG,KAAK;KACtC;IACD,MAAM,KAAK;KACV,GAAG,IAAI,GAAG,KAAK,IAAI,GAAG,IAAI,IAAI,GAAG,KAAK;KACtC,GAAG,IAAI,GAAG,KAAK,IAAI,GAAG,IAAI,IAAI,GAAG,KAAK;KACtC;AACD,WAAO,KAAK;KACX;KACA;KACA,CAAC;;;AAGJ,SAAO;;AAER,KAAI,cAAc,KAAK,YAAY,KAAK,eAAe,EAAG,QAAO,CAAC,GAAG,SAAS;AAC9E,KAAI,KAAK,IAAI,IAAI,EAAE,GAAG,KAAM,QAAO,EAAE;AACrC,KAAI,KAAK,EAAG,QAAO,aAAa,IAAI,aAAa,IAAI,YAAY;MAC5D;EACJ,MAAM,QAAQ,aAAa,IAAI,aAAa,YAAY;EACxD,MAAM,QAAQ,aAAa,GAAG,IAAI,YAAY;AAC9C,SAAO,CAAC,GAAG,OAAO,GAAG,MAAM;;;;;;AAM7B,SAAS,iBAAiB,UAAU,WAAW,aAAa,GAAG;AAC9D,KAAI,SAAS,WAAW,KAAK,UAAU,WAAW,EAAG,QAAO;CAC5D,IAAI,gBAAgB;AACpB,MAAK,MAAM,KAAK,UAAW,kBAAiB;AAC5C,KAAI,gBAAgB,KAAM,QAAO;CACjC,IAAI,cAAc;CAClB,MAAM,UAAU,EAAE;AAClB,MAAK,MAAM,OAAO,UAAU;EAC3B,MAAM,MAAM,KAAK,MAAM,IAAI,GAAG,IAAI,IAAI,GAAG,GAAG,IAAI,GAAG,IAAI,IAAI,GAAG,EAAE;AAChE,UAAQ,KAAK,IAAI;AACjB,iBAAe;;CAEhB,MAAM,SAAS,EAAE;CACjB,MAAM,eAAe,aAAa,gBAAgB,iBAAiB;CACnE,IAAI,UAAU;CACd,IAAI,SAAS;CACb,IAAI,gBAAgB;AACpB,QAAO,gBAAgB,UAAU,UAAU;AAC1C,mBAAiB,UAAU;AAC3B,aAAW,UAAU,KAAK,UAAU;AACpC,WAAS,CAAC;;CAEX,IAAI,kBAAkB,UAAU,WAAW;CAC3C,IAAI,aAAa;AACjB,QAAO,aAAa,aAAa;EAChC,MAAM,SAAS,KAAK,IAAI,iBAAiB,cAAc,WAAW;AAClE,MAAI,UAAU,SAAS,MAAM;GAC5B,MAAM,MAAM,iBAAiB,UAAU,aAAa,cAAc,aAAa,UAAU,YAAY;AACrG,UAAO,KAAK,GAAG,IAAI;;AAEpB,gBAAc;AACd,aAAW,UAAU,KAAK,UAAU;AACpC,WAAS,CAAC;AACV,oBAAkB,UAAU;;AAE7B,QAAO;;AAER,SAAS,cAAc,GAAG,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG;CAChE,MAAM,OAAO,KAAK,IAAI,IAAI,GAAG,IAAI,EAAE;CACnC,MAAM,KAAK,KAAK,IAAI,KAAK,KAAK;CAC9B,MAAM,KAAK,KAAK,IAAI,KAAK,KAAK;CAC9B,MAAM,KAAK,KAAK,IAAI,KAAK,KAAK;CAC9B,MAAM,KAAK,KAAK,IAAI,KAAK,KAAK;AAC9B,KAAI,OAAO,KAAK,OAAO,KAAK,OAAO,KAAK,OAAO,EAAG,QAAO,WAAW,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE;AAC7F,QAAO;EACN,KAAK,GAAG;EACR,KAAK,IAAI,GAAG;EACZ,KAAK,IAAI,KAAK,EAAE,KAAK,EAAE,GAAG,OAAO,KAAK,EAAE;EACxC,KAAK,EAAE,GAAG,IAAI;EACd,KAAK,IAAI,KAAK,EAAE,GAAG,EAAE,GAAG,IAAI,GAAG,GAAG,MAAM,KAAK,EAAE,GAAG;EAClD,KAAK,GAAG,GAAG;EACX,KAAK,IAAI,OAAO,EAAE,KAAK,IAAI,OAAO,OAAO;EACzC,OAAO;EACP,KAAK,IAAI,SAAS,GAAG,MAAM;EAC3B;EACA,CAAC,KAAK,IAAI;;AAEZ,SAAS,gBAAgB,GAAG,GAAG;CAC9B,MAAM,IAAI,KAAK,IAAI,GAAG,EAAE,GAAG;CAC3B,MAAM,KAAK,IAAI;CACf,MAAM,KAAK,IAAI;CACf,MAAM,IAAI,IAAI;AACd,QAAO;EACN,KAAK,GAAG,GAAG,KAAK;EAChB,KAAK,KAAK,EAAE,GAAG,KAAK,EAAE,GAAG,KAAK,EAAE,GAAG,KAAK,EAAE,GAAG,KAAK,EAAE,GAAG;EACvD,KAAK,KAAK,EAAE,GAAG,KAAK,EAAE,GAAG,KAAK,EAAE,GAAG,KAAK,EAAE,GAAG,GAAG,GAAG,KAAK;EACxD,KAAK,KAAK,EAAE,GAAG,KAAK,EAAE,GAAG,KAAK,EAAE,GAAG,KAAK,EAAE,GAAG,KAAK,EAAE,GAAG;EACvD,KAAK,KAAK,EAAE,GAAG,KAAK,EAAE,GAAG,KAAK,EAAE,GAAG,KAAK,EAAE,GAAG,GAAG,GAAG,KAAK;EACxD;EACA,CAAC,KAAK,IAAI;;AAEZ,SAAS,iBAAiB,GAAG,GAAG;CAC/B,MAAM,KAAK,IAAI;CACf,MAAM,KAAK,IAAI;CACf,MAAM,KAAK;CACX,MAAM,KAAK;CACX,MAAM,KAAK,KAAK;CAChB,MAAM,KAAK,KAAK;AAChB,QAAO;EACN,KAAK,GAAG,GAAG,KAAK;EAChB,KAAK,KAAK,GAAG,GAAG,KAAK,GAAG,GAAG,KAAK,GAAG,GAAG,KAAK,GAAG,GAAG,KAAK,GAAG,GAAG;EAC5D,KAAK,KAAK,GAAG,GAAG,KAAK,GAAG,GAAG,KAAK,GAAG,GAAG,KAAK,GAAG,GAAG,GAAG,GAAG,KAAK;EAC5D,KAAK,KAAK,GAAG,GAAG,KAAK,GAAG,GAAG,KAAK,GAAG,GAAG,KAAK,GAAG,GAAG,KAAK,GAAG,GAAG;EAC5D,KAAK,KAAK,GAAG,GAAG,KAAK,GAAG,GAAG,KAAK,GAAG,GAAG,KAAK,GAAG,GAAG,GAAG,GAAG,KAAK;EAC5D;EACA,CAAC,KAAK,IAAI;;AAEZ,SAAS,iBAAiB,GAAG,GAAG,QAAQ,GAAG;CAC1C,MAAM,IAAI,KAAK,IAAI,GAAG,MAAM;CAC5B,MAAM,IAAI,KAAK,IAAI,GAAG,EAAE,GAAG;CAC3B,MAAM,KAAK,IAAI;CACf,MAAM,KAAK,IAAI;CACf,MAAM,SAAS,EAAE;AACjB,MAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK;EAC3B,MAAM,QAAQ,CAAC,KAAK,KAAK,IAAI,IAAI,IAAI,KAAK,KAAK;AAC/C,SAAO,KAAK;GACX,GAAG,KAAK,IAAI,KAAK,IAAI,MAAM;GAC3B,GAAG,KAAK,IAAI,KAAK,IAAI,MAAM;GAC3B,CAAC;;AAEH,QAAO,OAAO,KAAK,GAAG,MAAM,GAAG,MAAM,IAAI,MAAM,IAAI,GAAG,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,KAAK,IAAI,GAAG;;AAEjF,SAAS,cAAc,GAAG,GAAG,SAAS,GAAG,aAAa,IAAI;CACzD,MAAM,IAAI,KAAK,IAAI,GAAG,OAAO;CAC7B,MAAM,SAAS,KAAK,IAAI,GAAG,EAAE,GAAG;CAChC,MAAM,SAAS,SAAS,KAAK,IAAI,KAAK,KAAK,IAAI,KAAK,WAAW,CAAC;CAChE,MAAM,KAAK,IAAI;CACf,MAAM,KAAK,IAAI;CACf,MAAM,SAAS,EAAE;AACjB,MAAK,IAAI,IAAI,GAAG,IAAI,IAAI,GAAG,KAAK;EAC/B,MAAM,QAAQ,CAAC,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK;EAC3C,MAAM,IAAI,IAAI,MAAM,IAAI,SAAS;AACjC,SAAO,KAAK;GACX,GAAG,KAAK,IAAI,KAAK,IAAI,MAAM;GAC3B,GAAG,KAAK,IAAI,KAAK,IAAI,MAAM;GAC3B,CAAC;;AAEH,QAAO,OAAO,KAAK,GAAG,MAAM,GAAG,MAAM,IAAI,MAAM,IAAI,GAAG,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,KAAK,IAAI,GAAG;;AAEjF,SAAS,eAAe,GAAG,GAAG,YAAY,IAAI,aAAa,IAAI,aAAa,IAAI;CAC/E,MAAM,KAAK,KAAK,IAAI,WAAW,EAAE;CACjC,MAAM,KAAK,KAAK,IAAI,YAAY,EAAE;CAClC,MAAM,KAAK,KAAK,IAAI,YAAY,GAAG;CACnC,MAAM,KAAK,IAAI;AACf,QAAO;EACN,OAAO,KAAK,KAAK;EACjB,KAAK,IAAI,GAAG,GAAG,KAAK,KAAK;EACzB,KAAK,IAAI,GAAG,GAAG,KAAK,KAAK;EACzB,KAAK,EAAE,GAAG;EACV,KAAK,IAAI,GAAG,GAAG,KAAK,KAAK;EACzB,KAAK,IAAI,GAAG,GAAG,KAAK,KAAK;EACzB,OAAO,KAAK,KAAK;EACjB;EACA,CAAC,KAAK,IAAI;;AAEZ,SAAS,kBAAkB,UAAQ;CAClC,MAAM,EAAE,WAAW,OAAO,WAAWD;AACrC,SAAQ,WAAR;EACC,KAAK,OAAQ,QAAO,cAAc,OAAO,QAAQA,SAAO,gBAAgB,GAAGA,SAAO,gBAAgB,GAAGA,SAAO,gBAAgB,GAAGA,SAAO,gBAAgB,EAAE;EACxJ,KAAK,SAAU,QAAO,gBAAgB,OAAO,OAAO;EACpD,KAAK,UAAW,QAAO,iBAAiB,OAAO,OAAO;EACtD,KAAK,UAAW,QAAO,iBAAiB,OAAO,QAAQA,SAAO,gBAAgB,EAAE;EAChF,KAAK,OAAQ,QAAO,cAAc,OAAO,QAAQA,SAAO,cAAc,GAAGA,SAAO,wBAAwB,GAAG;EAC3G,KAAK,QAAS,QAAO,eAAe,OAAO,QAAQA,SAAO,kBAAkB,IAAIA,SAAO,mBAAmB,IAAIA,SAAO,mBAAmB,GAAG;EAC3I,KAAK,OAAQ,QAAOA,SAAO,QAAQ;EACnC,QAAS,QAAO;;;;;;AAMlB,SAAS,mBAAmB,SAAS;AACpC,KAAI,QAAQ,SAAS,EAAG,QAAO,EAAE;AACjC,KAAI,QAAQ,WAAW,EAAG,QAAO;EAChC,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR;CACD,MAAM,SAAS,CAAC,GAAG,QAAQ;CAC3B,MAAM,OAAO,OAAO,OAAO,SAAS;CACpC,MAAM,QAAQ,OAAO;AACrB,KAAI,KAAK,MAAM,KAAK,IAAI,MAAM,GAAG,KAAK,IAAI,MAAM,EAAE,GAAG,KAAM,QAAO,KAAK;AACvE,KAAI,OAAO,SAAS,EAAG,QAAO,EAAE;CAChC,IAAI,OAAO;AACX,MAAK,IAAI,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;EACvC,MAAM,KAAK,IAAI,KAAK,OAAO;AAC3B,UAAQ,OAAO,GAAG,IAAI,OAAO,GAAG,IAAI,OAAO,GAAG,IAAI,OAAO,GAAG;;AAE7D,KAAI,OAAO,EAAG,QAAO,SAAS;CAC9B,MAAM,qBAAqB,GAAG,GAAG,GAAG,MAAM;EACzC,MAAM,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE;EAClE,MAAM,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE;EAClE,MAAM,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE;AAClE,SAAO,UAAU,SAAS,UAAU,SAAS,UAAU;;CAExD,MAAM,SAAS,MAAM,MAAM,MAAM,UAAU;AAC1C,OAAK,KAAK,IAAI,KAAK,MAAM,KAAK,IAAI,KAAK,MAAM,KAAK,IAAI,KAAK,MAAM,KAAK,IAAI,KAAK,MAAM,KAAM,QAAO;AAClG,OAAK,MAAM,KAAK,OAAO;AACtB,OAAI,MAAM,QAAQ,MAAM,QAAQ,MAAM,KAAM;AAC5C,OAAI,kBAAkB,GAAG,MAAM,MAAM,KAAK,CAAE,QAAO;;AAEpD,SAAO;;CAER,MAAM,YAAY,EAAE;CACpB,MAAM,MAAM,CAAC,GAAG,OAAO;CACvB,IAAI,WAAW;CACf,MAAM,cAAc,IAAI,SAAS,IAAI,SAAS;AAC9C,QAAO,IAAI,SAAS,KAAK,WAAW,aAAa;AAChD;EACA,IAAI,WAAW;AACf,OAAK,IAAI,IAAI,GAAG,IAAI,IAAI,QAAQ,KAAK;GACpC,MAAM,OAAO,KAAK,IAAI,IAAI,IAAI,UAAU,IAAI;GAC5C,MAAM,OAAO,IAAI;GACjB,MAAM,OAAO,KAAK,IAAI,KAAK,IAAI;AAC/B,OAAI,MAAM,MAAM,MAAM,MAAM,IAAI,EAAE;AACjC,cAAU,KAAK,MAAM,MAAM,KAAK;AAChC,QAAI,OAAO,GAAG,EAAE;AAChB,eAAW;AACX;;;AAGF,MAAI,CAAC,UAAU;AACd,aAAU,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG;AACtC,OAAI,OAAO,GAAG,EAAE;;;AAGlB,KAAI,IAAI,WAAW,EAAG,WAAU,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG;AAC5D,QAAO;;;;;AAKR,SAAS,iBAAiB,UAAQ;CACjC,MAAM,EAAE,WAAW,OAAO,GAAG,QAAQ,MAAMA;AAC3C,KAAI,cAAc,QAAQ;EACzB,MAAM,KAAKA,SAAO,gBAAgB;AAClC,MAAI,MAAM,EAAG,QAAO,IAAI,aAAa;GACpC;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA,CAAC;EACF,MAAM,OAAO,mBAAmB,uBAAuB,cAAc,GAAG,GAAG,IAAI,IAAI,IAAI,GAAG,CAAC,CAAC,KAAK,MAAM,EAAE,GAAG,CAAC;EAC7G,MAAM,MAAM,IAAI,aAAa,KAAK,SAAS,EAAE;AAC7C,OAAK,IAAI,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;AACrC,OAAI,IAAI,KAAK,KAAK,GAAG;AACrB,OAAI,IAAI,IAAI,KAAK,KAAK,GAAG;;AAE1B,SAAO;;AAER,KAAI,cAAc,YAAY,cAAc,WAAW;EACtD,MAAM,KAAK,IAAI;EACf,MAAM,KAAK,IAAI;EACf,MAAM,KAAK,cAAc,WAAW,KAAK,IAAI,GAAG,EAAE,GAAG,IAAI,IAAI;EAC7D,MAAM,KAAK,cAAc,WAAW,KAAK,IAAI;EAC7C,MAAM,QAAQ;EACd,MAAM,MAAM,IAAI,aAAa,QAAQ,IAAI,EAAE;EAC3C,IAAI,MAAM;AACV,OAAK,IAAI,IAAI,GAAG,IAAI,OAAO,KAAK;GAC/B,MAAM,KAAK,IAAI,IAAI,KAAK,KAAK;GAC7B,MAAM,MAAM,IAAI,KAAK,IAAI,KAAK,KAAK;AACnC,OAAI,SAAS;AACb,OAAI,SAAS;AACb,OAAI,SAAS,KAAK,KAAK,KAAK,IAAI,GAAG;AACnC,OAAI,SAAS,KAAK,KAAK,KAAK,IAAI,GAAG;AACnC,OAAI,SAAS,KAAK,KAAK,KAAK,IAAI,GAAG;AACnC,OAAI,SAAS,KAAK,KAAK,KAAK,IAAI,GAAG;;AAEpC,SAAO;;AAER,KAAI,cAAc,WAAW;EAC5B,MAAM,IAAI,KAAK,IAAI,GAAGA,SAAO,gBAAgB,EAAE;EAC/C,MAAM,IAAI,KAAK,IAAI,GAAG,EAAE,GAAG;EAC3B,MAAM,KAAK,IAAI;EACf,MAAM,KAAK,IAAI;EACf,MAAM,MAAM,IAAI,aAAa,IAAI,IAAI,EAAE;EACvC,IAAI,MAAM;AACV,OAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK;GAC3B,MAAM,KAAK,CAAC,KAAK,KAAK,IAAI,IAAI,IAAI,KAAK,KAAK;GAC5C,MAAM,KAAK,CAAC,KAAK,KAAK,KAAK,IAAI,KAAK,IAAI,KAAK,KAAK;AAClD,OAAI,SAAS;AACb,OAAI,SAAS;AACb,OAAI,SAAS,KAAK,IAAI,KAAK,IAAI,GAAG;AAClC,OAAI,SAAS,KAAK,IAAI,KAAK,IAAI,GAAG;AAClC,OAAI,SAAS,KAAK,IAAI,KAAK,IAAI,GAAG;AAClC,OAAI,SAAS,KAAK,IAAI,KAAK,IAAI,GAAG;;AAEnC,SAAO;;AAER,KAAI,cAAc,QAAQ;EACzB,MAAM,IAAI,KAAK,IAAI,GAAGA,SAAO,cAAc,EAAE;EAC7C,MAAM,SAAS,KAAK,IAAI,GAAG,EAAE,GAAG;EAChC,MAAM,SAAS,SAAS,KAAK,IAAI,KAAK,KAAK,IAAI,KAAKA,SAAO,wBAAwB,GAAG,CAAC;EACvF,MAAM,KAAK,IAAI;EACf,MAAM,KAAK,IAAI;EACf,MAAM,aAAa,IAAI;EACvB,MAAM,MAAM,IAAI,aAAa,aAAa,IAAI,EAAE;EAChD,IAAI,MAAM;AACV,OAAK,IAAI,IAAI,GAAG,IAAI,YAAY,KAAK;GACpC,MAAM,KAAK,CAAC,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK;GACxC,MAAM,KAAK,CAAC,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,KAAK;GAC9C,MAAM,KAAK,IAAI,MAAM,IAAI,SAAS;GAClC,MAAM,MAAM,IAAI,KAAK,MAAM,IAAI,SAAS;AACxC,OAAI,SAAS;AACb,OAAI,SAAS;AACb,OAAI,SAAS,KAAK,KAAK,KAAK,IAAI,GAAG;AACnC,OAAI,SAAS,KAAK,KAAK,KAAK,IAAI,GAAG;AACnC,OAAI,SAAS,KAAK,KAAK,KAAK,IAAI,GAAG;AACnC,OAAI,SAAS,KAAK,KAAK,KAAK,IAAI,GAAG;;AAEpC,SAAO;;AAER,KAAI,cAAc,SAAS;EAC1B,MAAM,KAAK,KAAK,IAAIA,SAAO,kBAAkB,IAAI,EAAE;EACnD,MAAM,KAAK,KAAK,IAAIA,SAAO,mBAAmB,IAAI,EAAE;EACpD,MAAM,KAAK,KAAK,IAAIA,SAAO,mBAAmB,IAAI,GAAG;EACrD,MAAM,KAAK,IAAI;EACf,MAAM,KAAK;EACX,MAAM,KAAK,IAAI;EACf,MAAM,KAAK;EACX,MAAM,YAAY,KAAK,KAAK;EAC5B,MAAM,YAAY,KAAK,KAAK;EAC5B,MAAM,WAAW,KAAK,KAAK;EAC3B,MAAM,WAAW,KAAK,KAAK;AAC3B,SAAO,IAAI,aAAa;GACvB;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA,CAAC;;AAEH,KAAI,cAAc,UAAUA,SAAO,MAAM;EACxC,MAAM,WAAW,uBAAuBA,SAAO,KAAK;AACpD,MAAI,SAAS,WAAW,EAAG,QAAO,IAAI,aAAa,EAAE;EACrD,MAAM,OAAO,mBAAmB,SAAS,KAAK,MAAM,EAAE,GAAG,CAAC;EAC1D,MAAM,MAAM,IAAI,aAAa,KAAK,SAAS,EAAE;AAC7C,OAAK,IAAI,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;AACrC,OAAI,IAAI,KAAK,KAAK,GAAG;AACrB,OAAI,IAAI,IAAI,KAAK,KAAK,GAAG;;AAE1B,SAAO;;AAER,QAAO,IAAI,aAAa,EAAE;;AAK3B,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkFjB,MAAM,qBAAqB;CAC1B,OAAO;EACN,WAAW;EACX,WAAW;EACX,WAAW;EACX;CACD,OAAO;EACN,WAAW;EACX,WAAW;EACX,WAAW;EACX;CACD;;AAED,SAAS,oBAAoB,QAAQ;AACpC,QAAO,OAAO,sBAAsB,EAAE,SAAS,CAAC;EAC/C,SAAS;EACT,YAAY,eAAe,SAAS,eAAe;EACnD,QAAQ,EAAE,MAAM,WAAW;EAC3B,CAAC,EAAE,CAAC;;;;;;AAMN,SAAS,mBAAmB,QAAQ,SAAS;CAC5C,MAAM,EAAE,qBAAW;AACnB,QAAO,OAAO,qBAAqB;EAClC,OAAO,QAAQ;EACf,QAAQ,OAAO,qBAAqB,EAAE,kBAAkB,CAAC,QAAQ,cAAc,EAAE,CAAC;EAClF,QAAQ;GACP;GACA,YAAY;GACZ,SAAS,CAAC;IACT,aAAa;IACb,YAAY,CAAC;KACZ,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACR,CAAC;IACF,CAAC;GACF;EACD,UAAU;GACT;GACA,YAAY;GACZ,SAAS,CAAC;IACT,QAAQ,QAAQ;IAChB,OAAO,QAAQ,SAAS;IACxB,CAAC;GACF;EACD,WAAW,EAAE,UAAU,QAAQ,UAAU;EACzC,CAAC;;AAKH,IAAI,eAAe,MAAM;CACxB;CACA;CACA;CACA;CACA;CACA;CACA,wBAAwB,IAAI,uBAAuB;CACnD,cAAc,IAAI,aAAa,GAAG;CAClC,YAAY,QAAQ,QAAQ;AAC3B,OAAK,SAAS;AACd,OAAK,cAAc,IAAI,WAAW,MAAM,eAAe,UAAU,eAAe,SAAS;AACzF,OAAK,aAAa,IAAI,WAAW,MAAM,eAAe,SAAS,eAAe,SAAS;EACvF,MAAMC,WAAS,OAAO,mBAAmB;GACxC,OAAO;GACP,MAAM;GACN,CAAC;AACF,OAAK,gBAAgB,oBAAoB,OAAO;AAChD,OAAK,WAAW,mBAAmB,QAAQ;GAC1C,OAAO;GACP;GACA,eAAe,KAAK;GACpB;GACA,UAAU;GACV,CAAC;AACF,OAAK,cAAc,mBAAmB,QAAQ;GAC7C,OAAO;GACP;GACA,eAAe,KAAK;GACpB;GACA,UAAU;GACV,OAAO;IACN,OAAO;KACN,WAAW;KACX,WAAW;KACX,WAAW;KACX;IACD,OAAO;KACN,WAAW;KACX,WAAW;KACX,WAAW;KACX;IACD;GACD,CAAC;;CAEH,aAAa;AACZ,OAAK,YAAY,OAAO;AACxB,OAAK,WAAW,OAAO;;CAExB,SAAS,MAAM,gBAAgB,SAAS,OAAO,aAAa,cAAc,eAAe,MAAM;EAC9F,IAAI,WAAW,uBAAuB,QAAQ;AAC9C,MAAI,SAAS,WAAW,EAAG;AAC3B,MAAI,MAAM,cAAc,KAAK,KAAK,MAAM,YAAY,KAAK,KAAK,MAAM,eAAe,KAAK,EAAG,YAAW,iBAAiB,UAAU,KAAK,aAAa,GAAG,KAAK,WAAW,GAAG,KAAK,cAAc,EAAE;AAC9L,MAAI,MAAM,mBAAmB,KAAK,gBAAgB,SAAS,EAAG,YAAW,iBAAiB,UAAU,KAAK,iBAAiB,KAAK,oBAAoB,EAAE;AACrJ,MAAI,SAAS,WAAW,EAAG;EAC3B,MAAM,IAAI,WAAW,MAAM;EAC3B,MAAM,UAAU,MAAM,WAAW;EACjC,IAAI,UAAU;AACd,MAAI,MAAM,kBAAkB,OAAQ,WAAU;WACrC,MAAM,kBAAkB,SAAU,WAAU;AACrD,OAAK,MAAM,WAAW,SAAU,MAAK,YAAY,MAAM,gBAAgB,QAAQ,IAAI,QAAQ,IAAI,GAAG,aAAa,SAAS,cAAc,eAAe,SAAS,KAAK;;CAEpK,aAAa,MAAM,gBAAgB,UAAU,OAAO,aAAa,cAAc,eAAe,MAAM;EACnG,IAAI,iBAAiB;AACrB,MAAI,MAAM,cAAc,KAAK,KAAK,MAAM,YAAY,KAAK,KAAK,MAAM,eAAe,KAAK,EAAG,kBAAiB,iBAAiB,gBAAgB,KAAK,aAAa,GAAG,KAAK,WAAW,GAAG,KAAK,cAAc,EAAE;AAC1M,MAAI,MAAM,mBAAmB,KAAK,gBAAgB,SAAS,EAAG,kBAAiB,iBAAiB,gBAAgB,KAAK,iBAAiB,KAAK,oBAAoB,EAAE;AACjK,MAAI,eAAe,WAAW,EAAG;EACjC,MAAM,IAAI,WAAW,MAAM;EAC3B,MAAM,UAAU,MAAM,WAAW;EACjC,IAAI,UAAU;AACd,MAAI,MAAM,kBAAkB,OAAQ,WAAU;WACrC,MAAM,kBAAkB,SAAU,WAAU;AACrD,OAAK,MAAM,WAAW,eAAgB,MAAK,YAAY,MAAM,gBAAgB,QAAQ,IAAI,QAAQ,IAAI,GAAG,aAAa,SAAS,cAAc,eAAe,SAAS,KAAK;;CAE1K,YAAY,MAAM,gBAAgB,IAAI,IAAI,OAAO,aAAa,SAAS,cAAc,eAAe,SAAS,MAAM;EAClH,MAAM,OAAO,KAAK;AAClB,iBAAe,eAAe,MAAM,SAAS,cAAc,eAAe,MAAM,UAAU;AAC1F,OAAK,MAAM;AACX,OAAK,MAAM,MAAM;AACjB,OAAK,MAAM,MAAM;AACjB,OAAK,MAAM,MAAM;AACjB,OAAK,MAAM,MAAM;AACjB,OAAK,MAAM;AACX,OAAK,MAAM;AACX,OAAK,MAAM;AACX,OAAK,MAAM;AACX,OAAK,MAAM,GAAG;AACd,OAAK,MAAM,GAAG;AACd,OAAK,MAAM,GAAG;AACd,OAAK,MAAM,GAAG;EACd,MAAM,gBAAgB,KAAK,YAAY,UAAU,KAAK,QAAQ,KAAK;EACnE,MAAM,KAAK,GAAG,IAAI,GAAG;EACrB,MAAM,KAAK,GAAG,IAAI,GAAG;EACrB,MAAM,MAAM,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG;AACxC,MAAI,MAAM,KAAM;EAChB,MAAM,UAAU,cAAc,KAAK;EACnC,MAAM,KAAK,KAAK,MAAM;EACtB,MAAM,KAAK,KAAK,MAAM;EACtB,MAAM,KAAK,CAAC;EACZ,MAAM,KAAK;EACX,MAAM,aAAa,IAAI,aAAa;GACnC,GAAG,IAAI,KAAK;GACZ,GAAG,IAAI,KAAK;GACZ,GAAG,IAAI,KAAK;GACZ,GAAG,IAAI,KAAK;GACZ,GAAG,IAAI,KAAK;GACZ,GAAG,IAAI,KAAK;GACZ,GAAG,IAAI,KAAK;GACZ,GAAG,IAAI,KAAK;GACZ,CAAC;EACF,MAAM,eAAe,KAAK,WAAW,UAAU,KAAK,QAAQ,WAAW;EACvE,MAAM,WAAW,MAAM,cAAc,QAAQ,KAAK,cAAc,KAAK;AACrE,OAAK,YAAY,SAAS;EAC1B,MAAM,mBAAmB,KAAK,sBAAsB,aAAa,KAAK,QAAQ,KAAK,eAAe,cAAc;AAChH,OAAK,aAAa,GAAG,iBAAiB;AACtC,OAAK,gBAAgB,GAAG,aAAa;AACrC,OAAK,KAAK,EAAE;;CAEb,UAAU;AACT,OAAK,YAAY,SAAS;AAC1B,OAAK,WAAW,SAAS;AACzB,OAAK,sBAAsB,SAAS;;;AAMtC,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0DjB,IAAI,eAAe,MAAM;CACxB,UAAU,EAAE;CACZ,QAAQ;CACR;CACA;CACA,YAAY,MAAM,OAAO;AACxB,OAAK,OAAO;AACZ,OAAK,QAAQ;;CAEd,UAAU,QAAQ,MAAM;AACvB,MAAI,KAAK,SAAS,KAAK,QAAQ,QAAQ;GACtC,MAAM,QAAQ,OAAO,aAAa;IACjC,MAAM,KAAK;IACX,OAAO,KAAK;IACZ,CAAC;AACF,QAAK,QAAQ,KAAK,MAAM;;EAEzB,MAAM,MAAM,KAAK,QAAQ,KAAK;AAC9B,SAAO,MAAM,YAAY,KAAK,GAAG,KAAK;AACtC,SAAO;;CAER,QAAQ;AACP,OAAK,QAAQ;;CAEd,UAAU;AACT,OAAK,MAAM,OAAO,KAAK,QAAS,KAAI,SAAS;AAC7C,OAAK,UAAU,EAAE;;;AAGnB,IAAI,eAAe,MAAM;CACxB;CACA;CACA;CACA;CACA;CACA;CACA,wBAAwB,IAAI,uBAAuB;CACnD,cAAc,IAAI,aAAa,GAAG;CAClC,aAAa,IAAI,aAAa,GAAG;CACjC,YAAY,QAAQ,QAAQ;AAC3B,OAAK,SAAS;AACd,OAAK,cAAc,IAAI,aAAa,IAAI,eAAe,UAAU,eAAe,SAAS;AACzF,OAAK,aAAa,IAAI,aAAa,IAAI,eAAe,SAAS,eAAe,SAAS;EACvF,MAAMA,WAAS,OAAO,mBAAmB;GACxC,OAAO;GACP,MAAM;GACN,CAAC;AACF,OAAK,gBAAgB,oBAAoB,OAAO;AAChD,OAAK,gBAAgB,OAAO,sBAAsB,EAAE,SAAS,CAAC;GAC7D,SAAS;GACT,YAAY,eAAe;GAC3B,SAAS,EAAE,YAAY,SAAS;GAChC,EAAE;GACF,SAAS;GACT,YAAY,eAAe;GAC3B,SAAS,EAAE,MAAM,aAAa;GAC9B,CAAC,EAAE,CAAC;EACL,MAAM,iBAAiB,OAAO,qBAAqB,EAAE,kBAAkB,CAAC,KAAK,eAAe,KAAK,cAAc,EAAE,CAAC;AAClH,OAAK,WAAW,OAAO,qBAAqB;GAC3C,OAAO;GACP,QAAQ;GACR,QAAQ;IACP;IACA,YAAY;IACZ,SAAS,CAAC;KACT,aAAa;KACb,YAAY,CAAC;MACZ,gBAAgB;MAChB,QAAQ;MACR,QAAQ;MACR,EAAE;MACF,gBAAgB;MAChB,QAAQ;MACR,QAAQ;MACR,CAAC;KACF,CAAC;IACF;GACD,UAAU;IACT;IACA,YAAY;IACZ,SAAS,CAAC;KACT;KACA,OAAO;KACP,CAAC;IACF;GACD,WAAW,EAAE,UAAU,kBAAkB;GACzC,CAAC;;CAEH,aAAa;AACZ,OAAK,YAAY,OAAO;AACxB,OAAK,WAAW,OAAO;;CAExB,KAAK,MAAM,gBAAgB,gBAAgB,SAAS,SAAS,KAAK,KAAK,cAAc,eAAe,MAAM;EACzG,MAAM,UAAU,MAAM,WAAW;AACjC,iBAAe,eAAe,KAAK,aAAa,SAAS,cAAc,eAAe,MAAM,UAAU;EACtG,MAAM,gBAAgB,KAAK,YAAY,UAAU,KAAK,QAAQ,KAAK,YAAY;EAC/E,MAAM,KAAK,IAAI,IAAI,QAAQ;EAC3B,MAAM,KAAK,IAAI,IAAI,QAAQ;EAC3B,MAAM,MAAM,IAAI,IAAI,IAAI,SAAS,QAAQ;EACzC,MAAM,MAAM,IAAI,IAAI,IAAI,UAAU,QAAQ;AAC1C,OAAK,WAAW,KAAK,IAAI;AACzB,OAAK,WAAW,KAAK,IAAI;AACzB,OAAK,WAAW,KAAK;AACrB,OAAK,WAAW,KAAK;AACrB,OAAK,WAAW,KAAK,IAAI,IAAI,IAAI;AACjC,OAAK,WAAW,KAAK,IAAI;AACzB,OAAK,WAAW,KAAK;AACrB,OAAK,WAAW,KAAK;AACrB,OAAK,WAAW,KAAK,IAAI;AACzB,OAAK,WAAW,KAAK,IAAI,IAAI,IAAI;AACjC,OAAK,WAAW,MAAM;AACtB,OAAK,WAAW,MAAM;AACtB,OAAK,WAAW,MAAM,IAAI,IAAI,IAAI;AAClC,OAAK,WAAW,MAAM,IAAI,IAAI,IAAI;AAClC,OAAK,WAAW,MAAM;AACtB,OAAK,WAAW,MAAM;EACtB,MAAM,eAAe,KAAK,WAAW,UAAU,KAAK,QAAQ,KAAK,WAAW;EAC5E,MAAM,mBAAmB,KAAK,sBAAsB,aAAa,KAAK,QAAQ,KAAK,eAAe,cAAc;EAChH,MAAM,mBAAmB,eAAe,aAAa,KAAK,QAAQ,KAAK,eAAe,SAAS,QAAQ;AACvG,OAAK,YAAY,KAAK,SAAS;AAC/B,OAAK,aAAa,GAAG,iBAAiB;AACtC,OAAK,aAAa,GAAG,iBAAiB;AACtC,OAAK,gBAAgB,GAAG,aAAa;AACrC,OAAK,KAAK,EAAE;;CAEb,UAAU;AACT,OAAK,YAAY,SAAS;AAC1B,OAAK,WAAW,SAAS;AACzB,OAAK,sBAAsB,SAAS;;;AAMtC,IAAI,eAAe,MAAM;CACxB,2BAA2B,IAAI,KAAK;CACpC,MAAM,EAAE;CACR;CACA,YAAY,cAAc,IAAI;AAC7B,OAAK,cAAc;;CAEpB,WAAW,QAAQ,OAAO,EAAE,EAAE;EAC7B,MAAM,gBAAgB,KAAK,IAAI,GAAG,KAAK,IAAI,IAAI,KAAK,iBAAiB,EAAE,CAAC;EACxE,MAAM,MAAM,GAAG,KAAK,aAAa,SAAS,GAAG,KAAK,aAAa,SAAS,GAAG,KAAK,gBAAgB,SAAS,GAAG,KAAK,gBAAgB,gBAAgB,GAAG,KAAK,gBAAgB,gBAAgB,GAAG;EAC5L,IAAI,UAAU,KAAK,SAAS,IAAI,IAAI;AACpC,MAAI,CAAC,SAAS;AACb,aAAU,OAAO,cAAc;IAC9B,WAAW,KAAK,aAAa;IAC7B,WAAW,KAAK,aAAa;IAC7B,cAAc,KAAK,gBAAgB;IACnC,cAAc,KAAK,gBAAgB;IACnC,cAAc,KAAK,gBAAgB;IACnC;IACA,CAAC;AACF,OAAI,KAAK,SAAS,QAAQ,KAAK,aAAa;IAC3C,MAAM,WAAW,KAAK,IAAI,KAAK;AAC/B,QAAI,SAAU,MAAK,SAAS,OAAO,SAAS;;AAE7C,QAAK,SAAS,IAAI,KAAK,QAAQ;QACzB,MAAK,MAAM,KAAK,IAAI,QAAQ,MAAM,MAAM,IAAI;AACnD,OAAK,IAAI,QAAQ,IAAI;AACrB,SAAO;;CAER,UAAU;AACT,OAAK,SAAS,OAAO;AACrB,OAAK,MAAM,EAAE;;;;;;;;AAWf,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8DrB,MAAM,0BAA0B;AAIhC,MAAM,gBAAgB;EACpB,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8Cf,MAAM,qBAAqB;CAC1B,QAAQ;CACR,QAAQ;CACR,OAAO;CACP;;AAED,SAAS,WAAW,OAAO;AAC1B,QAAO,OAAO,UAAU,YAAY,MAAM,SAAS,YAAY,GAAG,iBAAiB,MAAM,GAAG;;;;;;AAM7F,SAAS,qBAAqB,UAAU,KAAK,KAAK,QAAQ;AACzD,KAAI,KAAK,GAAG,QAAQ,SAAS,wBAAwB;AACrD,KAAI,CAAC,SAAU;CACf,MAAM,QAAQ,mBAAmB,SAAS,MAAM;CAChD,MAAM,IAAI,KAAK,IAAI,IAAI,OAAO,KAAK;CACnC,MAAM,IAAI,KAAK,IAAI,IAAI,QAAQ,KAAK;CACpC,MAAM,KAAK,IAAI,IAAI,SAAS,OAAO,KAAK;CACxC,MAAM,KAAK,IAAI,IAAI,SAAS,OAAO,KAAK;AACxC,KAAI,UAAU,mBAAmB,SAAS;AAC1C,KAAI,SAAS,KAAK,MAAM;AACxB,KAAI,SAAS,KAAK,SAAS,SAAS,WAAW,IAAI,IAAI,IAAI,IAAI;AAC/D,KAAI,SAAS,KAAK,SAAS,SAAS,WAAW,IAAI,IAAI,IAAI,IAAI;AAC/D,KAAI,SAAS,SAAS,UAAU;EAC/B,MAAM,IAAI,SAAS,QAAQ,KAAK,KAAK;EACrC,MAAM,KAAK,KAAK,IAAI,EAAE;EACtB,MAAM,KAAK,CAAC,KAAK,IAAI,EAAE;EACvB,MAAM,MAAM,KAAK,IAAI,IAAI,GAAG,GAAG,KAAK,IAAI,IAAI,GAAG;AAC/C,MAAI,SAAS,KAAK,KAAK;AACvB,MAAI,SAAS,KAAK,KAAK;YACb,SAAS,SAAS,UAAU;EACtC,IAAI;EACJ,IAAI;AACJ,MAAI,SAAS,OAAQ,EAAC,IAAI,MAAM,SAAS;OACpC;GACJ,MAAM,KAAK,KAAK,IAAI,KAAK,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG;GAC/C,MAAM,KAAK,KAAK,IAAI,KAAK,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG;AAC/C,OAAI,SAAS,UAAU,SAAU,MAAK,KAAK,KAAK,MAAM,IAAI,GAAG;QACxD;AACJ,SAAK,KAAK,KAAK;AACf,SAAK,KAAK,KAAK;;;AAGjB,MAAI,SAAS,KAAK;AAClB,MAAI,SAAS,KAAK;OACZ,KAAI,SAAS,KAAK,SAAS,OAAO,KAAK,KAAK;AACnD,OAAM,SAAS,GAAG,MAAM;AACvB,MAAI,SAAS,IAAI,KAAK,EAAE;GACvB;AACF,sBAAqB,MAAM,CAAC,SAAS,KAAK,MAAM;AAC/C,MAAI,IAAI,KAAK,SAAS,KAAK,IAAI,EAAE;GAChC;;AAKH,IAAI,oBAAoB,MAAM;CAC7B;CACA;CACA;CACA;CACA;CACA,cAAc,IAAI,aAAa,KAAK,wBAAwB;CAC5D,YAAY,QAAQ,QAAQ;AAC3B,OAAK,SAAS;AACd,OAAK,cAAc,IAAI,WAAW,MAAM,eAAe,UAAU,eAAe,SAAS;AACzF,OAAK,aAAa,IAAI,WAAW,MAAM,eAAe,SAAS,eAAe,SAAS;EACvF,MAAMA,WAAS,OAAO,mBAAmB;GACxC,OAAO;GACP,MAAM;GACN,CAAC;AACF,OAAK,gBAAgB,oBAAoB,OAAO;AAChD,OAAK,WAAW,mBAAmB,QAAQ;GAC1C,OAAO;GACP;GACA,eAAe,KAAK;GACpB;GACA,UAAU;GACV,CAAC;;CAEH,aAAa;AACZ,OAAK,YAAY,OAAO;AACxB,OAAK,WAAW,OAAO;;CAExB,KAAK,MAAM,gBAAgB,UAAU,MAAM,QAAQ,cAAc,eAAe,MAAM;AACrF,MAAI,SAAS,SAAS,KAAK,KAAK,SAAS,OAAQ;EACjD,MAAM,UAAU,MAAM,WAAW;AACjC,iBAAe,eAAe,KAAK,aAAa,SAAS,cAAc,eAAe,MAAM,UAAU;AACtG,OAAK,YAAY,MAAM;EACvB,MAAM,MAAM,WAAW,KAAK,MAAM;AAClC,MAAI,KAAK;AACR,QAAK,YAAY,KAAK,GAAG,IAAI,GAAG;AAChC,wBAAqB,KAAK,QAAQ,KAAK,aAAa,GAAG;SACjD;GACN,MAAM,KAAK,WAAW,KAAK,SAAS,UAAU;AAC9C,QAAK,YAAY,MAAM,GAAG;AAC1B,QAAK,YAAY,MAAM,GAAG;AAC1B,QAAK,YAAY,MAAM,GAAG;AAC1B,QAAK,YAAY,MAAM,GAAG;AAC1B,QAAK,qBAAqB,MAAM,QAAQ,GAAG;;EAE5C,MAAM,gBAAgB,KAAK,YAAY,UAAU,KAAK,QAAQ,KAAK,YAAY;EAC/E,MAAM,eAAe,KAAK,WAAW,UAAU,KAAK,QAAQ,SAAS;AACrE,OAAK,YAAY,KAAK,SAAS;AAC/B,OAAK,aAAa,GAAG,KAAK,OAAO,gBAAgB;GAChD,QAAQ,KAAK;GACb,SAAS,CAAC;IACT,SAAS;IACT,UAAU,EAAE,QAAQ,eAAe;IACnC,CAAC;GACF,CAAC,CAAC;AACH,OAAK,gBAAgB,GAAG,aAAa;AACrC,OAAK,KAAK,SAAS,SAAS,EAAE;;;CAG/B,qBAAqB,MAAM,QAAQ,IAAI;EACtC,MAAM,IAAI;AACV,OAAK,YAAY,KAAK,GAAG,GAAG,IAAI,wBAAwB;AACxD,MAAI,KAAK,SAAS,YAAY,KAAK,SAAS,SAAU;EACtD,MAAM,KAAK,WAAW,KAAK,UAAU,KAAK,SAAS,UAAU;EAC7D,MAAM,IAAI,KAAK;AACf,MAAI,KAAK,SAAS,UAAU;GAC3B,MAAM,KAAK,KAAK,UAAU,OAAO;GACjC,MAAM,KAAK,KAAK,UAAU,OAAO;GACjC,MAAM,KAAK,KAAK,QAAQ,OAAO,IAAI,OAAO;GAC1C,MAAM,KAAK,KAAK,QAAQ,OAAO,IAAI,OAAO;GAC1C,MAAM,KAAK,KAAK;GAChB,MAAM,KAAK,KAAK;GAChB,MAAM,QAAQ,KAAK,IAAI,KAAK,KAAK,KAAK,IAAI,KAAK;AAC/C,KAAE,IAAI;IACL;IACA;IACA;IACA;KACC,KAAK,MAAM;KACX,KAAK,MAAM;IACZ,KAAK;IACL,KAAK;IACL,EAAE,EAAE;SACC;GACN,MAAM,IAAI,KAAK,UAAU,KAAK,IAAI,OAAO,OAAO,OAAO,OAAO,GAAG;AACjE,KAAE,IAAI;IACL;IACA;IACA;IACA;IACA,KAAK,MAAM,OAAO,IAAI,OAAO,QAAQ;IACrC,KAAK,MAAM,OAAO,IAAI,OAAO,SAAS;IACtC;IACA;IACA,EAAE,EAAE;;AAEN,IAAE,IAAI,KAAK;AACX,IAAE,IAAI,KAAK;EACX,MAAM,MAAM,qBAAqB,CAAC;GACjC,QAAQ;GACR,OAAO;IACN,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH;GACD,EAAE;GACF,QAAQ;GACR,OAAO;IACN,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH;GACD,CAAC,CAAC;AACH,IAAE,IAAI,IAAI,IAAI,IAAI,GAAG;AACrB,IAAE,IAAI,IAAI,IAAI,IAAI,GAAG;;CAEtB,UAAU;AACT,OAAK,YAAY,SAAS;AAC1B,OAAK,WAAW,SAAS;;;AAM3B,MAAM,YAAY;EAChB,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyDf,IAAI,gBAAgB,MAAM;CACzB;CACA;CACA;CACA;CACA;CACA,wBAAwB,IAAI,uBAAuB;CACnD,cAAc,IAAI,aAAa,KAAK,wBAAwB;CAC5D,aAAa,IAAI,aAAa,EAAE;CAChC,YAAY,QAAQ,QAAQ;AAC3B,OAAK,SAAS;AACd,OAAK,cAAc,IAAI,WAAW,MAAM,eAAe,UAAU,eAAe,SAAS;AACzF,OAAK,aAAa,IAAI,WAAW,KAAK,eAAe,SAAS,eAAe,SAAS;EACtF,MAAMA,WAAS,OAAO,mBAAmB;GACxC,OAAO;GACP,MAAM;GACN,CAAC;AACF,OAAK,gBAAgB,oBAAoB,OAAO;AAChD,OAAK,WAAW,mBAAmB,QAAQ;GAC1C,OAAO;GACP;GACA,eAAe,KAAK;GACpB;GACA,UAAU;GACV,CAAC;;CAEH,aAAa;AACZ,OAAK,YAAY,OAAO;AACxB,OAAK,WAAW,OAAO;;CAExB,KAAK,MAAM,gBAAgB,MAAM,OAAO,cAAc,eAAe,eAAe,GAAG,MAAM;EAC5F,MAAM,WAAW,WAAW,MAAM;EAClC,MAAM,IAAI,WAAW;GACpB,GAAG;GACH,GAAG;GACH,GAAG;GACH,GAAG;GACH,GAAG,WAAW,MAAM;EACrB,MAAM,UAAU,MAAM,WAAW;AACjC,iBAAe,eAAe,KAAK,aAAa,SAAS,cAAc,eAAe,MAAM,UAAU;AACtG,OAAK,YAAY,MAAM;AACvB,OAAK,YAAY,MAAM,EAAE;AACzB,OAAK,YAAY,MAAM,EAAE;AACzB,OAAK,YAAY,MAAM,EAAE;AACzB,OAAK,YAAY,MAAM,EAAE;AACzB,OAAK,YAAY,MAAM,KAAK;AAC5B,OAAK,YAAY,MAAM,KAAK;AAC5B,OAAK,YAAY,MAAM,KAAK;AAC5B,OAAK,YAAY,MAAM,KAAK;AAC5B,uBAAqB,UAAU,MAAM,KAAK,aAAa,GAAG;EAC1D,MAAM,gBAAgB,KAAK,YAAY,UAAU,KAAK,QAAQ,KAAK,YAAY;AAC/E,OAAK,WAAW,KAAK,KAAK;AAC1B,OAAK,WAAW,KAAK,KAAK;AAC1B,OAAK,WAAW,KAAK,KAAK,IAAI,KAAK;AACnC,OAAK,WAAW,KAAK,KAAK;AAC1B,OAAK,WAAW,KAAK,KAAK;AAC1B,OAAK,WAAW,KAAK,KAAK,IAAI,KAAK;AACnC,OAAK,WAAW,KAAK,KAAK,IAAI,KAAK;AACnC,OAAK,WAAW,KAAK,KAAK,IAAI,KAAK;EACnC,MAAM,eAAe,KAAK,WAAW,UAAU,KAAK,QAAQ,KAAK,WAAW;AAC5E,OAAK,YAAY,KAAK,SAAS;EAC/B,MAAM,mBAAmB,KAAK,sBAAsB,aAAa,KAAK,QAAQ,KAAK,eAAe,cAAc;AAChH,OAAK,aAAa,GAAG,iBAAiB;AACtC,OAAK,gBAAgB,GAAG,aAAa;AACrC,OAAK,KAAK,EAAE;;CAEb,UAAU;AACT,OAAK,YAAY,SAAS;AAC1B,OAAK,WAAW,SAAS;AACzB,OAAK,sBAAsB,SAAS;;;AAMtC,IAAI,iBAAiB,MAAM;CAC1B,QAAQ,CAAC,IAAI,WAAW,CAAC;CACzB,KAAK,QAAQ;EACZ,MAAM,OAAO,KAAK,MAAM,KAAK,MAAM,SAAS,GAAG,SAAS,OAAO;AAC/D,OAAK,MAAM,KAAK,KAAK;;CAEtB,MAAM;AACL,MAAI,KAAK,MAAM,SAAS,EAAG,MAAK,MAAM,KAAK;;CAE5C,aAAa;AACZ,SAAO,KAAK,MAAM,KAAK,MAAM,SAAS;;CAEvC,eAAe,YAAY,SAAS,cAAc,eAAe,eAAe,aAAa;EAC5F,IAAI,IAAI,KAAK,YAAY;AACzB,MAAI,cAAe,KAAI,EAAE,SAAS,cAAc;AAChD,aAAW,KAAK,EAAE;AAClB,aAAW,KAAK,EAAE;AAClB,aAAW,KAAK;AAChB,aAAW,KAAK;AAChB,aAAW,KAAK,EAAE;AAClB,aAAW,KAAK,EAAE;AAClB,aAAW,KAAK;AAChB,aAAW,KAAK;AAChB,aAAW,KAAK,EAAE;AAClB,aAAW,KAAK,EAAE;AAClB,aAAW,MAAM;AACjB,aAAW,MAAM;AACjB,aAAW,MAAM;AACjB,aAAW,MAAM;AACjB,aAAW,MAAM;AACjB,aAAW,MAAM,eAAe;;CAEjC,UAAU;AACT,OAAK,QAAQ,CAAC,IAAI,WAAW,CAAC;;;AAMhC,SAAS,sBAAsB,OAAO;AACrC,KAAI,MAAM,QAAQ,MAAM,EAAE;EACzB,MAAM,MAAM,MAAM,MAAM;AACxB,SAAO;GACN,MAAM,KAAK;GACX,MAAM,KAAK;GACX,MAAM,KAAK;GACX;GACA;;AAEF,KAAI,OAAO,OAAO;EACjB,MAAM,MAAM,MAAM,KAAK;AACvB,SAAO;GACN,GAAG,MAAM,IAAI;GACb,GAAG,MAAM,IAAI;GACb,GAAG,MAAM,IAAI;GACb,GAAG;GACH;;CAEF,MAAM,MAAM,MAAM,KAAK,MAAM;CAC7B,MAAM,IAAI,IAAI,MAAM;AACpB,QAAO;EACN,IAAI,KAAK;EACT,IAAI,KAAK;EACT,IAAI,KAAK;EACT;EACA;;AAEF,MAAM,wCAAwC,IAAI,SAAS;AAC3D,SAAS,cAAc,QAAQ,QAAQ;CACtC,IAAI,MAAM,sBAAsB,IAAI,OAAO;AAC3C,KAAI,CAAC,OAAO,IAAI,WAAW,UAAU,IAAI,aAAa;AACrD,QAAM,IAAI,WAAW,QAAQ,OAAO;AACpC,wBAAsB,IAAI,QAAQ,IAAI;;AAEvC,KAAI,YAAY;AAChB,QAAO;;AAER,IAAI,aAAa,MAAM;CACtB;CACA,iBAAiB,IAAI,gBAAgB;CACrC,YAAY,IAAI,WAAW;CAC3B;CACA;CACA;CACA;CACA;CACA;CACA,iBAAiB,IAAI,gBAAgB;CACrC,eAAe,IAAI,cAAc;CACjC;CACA,cAAc;;;;;;CAMd,kBAAkB;CAClB,eAAe;CACf,gBAAgB;CAChB,cAAc;CACd,YAAY,QAAQ,QAAQ;AAC3B,OAAK,SAAS;AACd,OAAK,SAAS;AACd,OAAK,eAAe,IAAI,aAAa,QAAQ,OAAO;AACpD,OAAK,gBAAgB,IAAI,cAAc,QAAQ,OAAO;AACtD,OAAK,oBAAoB,IAAI,kBAAkB,QAAQ,OAAO;AAC9D,OAAK,eAAe,IAAI,aAAa,QAAQ,OAAO;AACpD,OAAK,iBAAiB,IAAI,eAAe,QAAQ,OAAO;AACxD,OAAK,eAAe,IAAI,aAAa,QAAQ,OAAO;;CAErD,WAAW,SAAS,YAAY,aAAa;EAC5C,GAAG;EACH,GAAG;EACH,GAAG;EACH,GAAG;EACH,EAAE,cAAc,eAAe,SAAS,SAAS;AACjD,OAAK,eAAe;AACpB,OAAK,gBAAgB;AACrB,MAAI,YAAY,KAAK,aAAa;AACjC,QAAK,cAAc;AACnB,QAAK,YAAY;;EAElB,MAAM,OAAO,QAAQ,gBAAgB,EAAE,kBAAkB,CAAC;GACzD,MAAM;GACN,YAAY,sBAAsB,WAAW;GAC7C;GACA,SAAS;GACT,CAAC,EAAE,CAAC;AACL,OAAK,UAAU,mBAAmB,MAAM,cAAc,cAAc;AACpE,SAAO;;CAER,SAAS,UAAU;CACnB,aAAa;AACZ,OAAK,aAAa,YAAY;AAC9B,OAAK,cAAc,YAAY;AAC/B,OAAK,kBAAkB,YAAY;AACnC,OAAK,aAAa,YAAY;AAC9B,MAAI,KAAK,eAAgB,MAAK,eAAe,YAAY;AACzD,OAAK,aAAa,YAAY;AAC9B,eAAa,aAAa,KAAK,OAAO;AACtC,eAAa,MAAM,KAAK,OAAO;;CAEhC,YAAY,MAAM,KAAK,KAAK,MAAM;EACjC,MAAM,UAAU,KAAK,aAAa,WAAW,KAAK,OAAO;EACzD,MAAM,MAAM;GACX,GAAG;GACH,GAAG;GACH,OAAO,IAAI;GACX,QAAQ,IAAI;GACZ;AACD,OAAK;AACL,OAAK,aAAa,KAAK,MAAM,KAAK,gBAAgB,KAAK,gBAAgB,KAAK,SAAS,KAAK,KAAK,KAAK,cAAc,KAAK,eAAe,KAAK;;CAE5I,kBAAkB,MAAM,KAAK,KAAK,KAAK,MAAM;EAC5C,MAAM,UAAU,KAAK,aAAa,WAAW,KAAK,OAAO;AACzD,OAAK;AACL,OAAK,aAAa,KAAK,MAAM,KAAK,gBAAgB,KAAK,gBAAgB,KAAK,SAAS,KAAK,KAAK,KAAK,cAAc,KAAK,eAAe,KAAK;;CAE5I,SAAS,MAAM,MAAM,OAAO,eAAe,GAAG,MAAM;EACnD,IAAI,KAAK;EACT,IAAI,gBAAgB;AACpB,MAAI,OAAO,iBAAiB,YAAY,iBAAiB,MAAM;AAC9D,mBAAgB;AAChB,QAAK;aACK,OAAO,iBAAiB,SAAU,MAAK;AAClD,OAAK;AACL,OAAK,cAAc,KAAK,MAAM,KAAK,gBAAgB,MAAM,OAAO,KAAK,cAAc,KAAK,eAAe,IAAI,cAAc;;CAE1H,SAAS,MAAM,SAAS,OAAO,aAAa,MAAM;AACjD,OAAK;AACL,OAAK,aAAa,SAAS,MAAM,KAAK,gBAAgB,SAAS,OAAO,aAAa,KAAK,cAAc,KAAK,eAAe,KAAK;;CAEhI,cAAc,MAAM,UAAU,MAAM,QAAQ,MAAM;AACjD,OAAK;AACL,OAAK,kBAAkB,KAAK,MAAM,KAAK,gBAAgB,UAAU,MAAM,QAAQ,KAAK,cAAc,KAAK,eAAe,KAAK;;CAE5H,UAAU,MAAM,UAAQ,MAAM,QAAQ,MAAM;EAC3C,MAAM,SAAS;GACd,GAAG;GACH,GAAG;GACH,OAAOD,SAAO;GACd,QAAQA,SAAO;GACf;AACD,MAAI,QAAQ,KAAK,SAAS,QAAQ;GACjC,MAAM,OAAO,iBAAiBA,SAAO;AACrC,OAAI,KAAK,SAAS,GAAG;AACpB,SAAK,cAAc,MAAM,MAAM,MAAM,QAAQ,KAAK;AAClD,SAAK,CAAC,UAAU,CAAC,OAAO,SAAS,OAAO,SAAS,OAAO,KAAK,QAAQ,aAAa,WAAW,KAAK,OAAO;KACxG,MAAM,UAAU,kBAAkBA,SAAO;AACzC,SAAI,QAAS,MAAK,SAAS,MAAM,SAAS,KAAK,OAAO,GAAG;MACxD,GAAG;MACH,eAAe;MACf,CAAC;;;;AAIL,MAAI,UAAU,OAAO,SAAS,OAAO,QAAQ,KAAK,OAAO,OAAO;GAC/D,MAAM,UAAU,kBAAkBA,SAAO;AACzC,OAAI,QAAS,MAAK,SAAS,MAAM,SAAS,OAAO,OAAO,OAAO,OAAO;IACrE,GAAG;IACH,eAAe,OAAO;IACtB,WAAW,OAAO;IAClB,SAAS,OAAO;IAChB,YAAY,OAAO;IACnB,iBAAiB,OAAO;IACxB,kBAAkB,OAAO;IACzB,CAAC;;;CAGJ,UAAU,MAAM,OAAO,OAAO,MAAM;AACnC,OAAK,SAAS,MAAM,MAAM,MAAM,OAAO,MAAM,IAAI,KAAK;;CAEvD,oBAAoB,OAAO,QAAQ,SAAS;AAC3C,SAAO,KAAK,eAAe,WAAW,KAAK,QAAQ,OAAO,QAAQ,KAAK,QAAQ,QAAQ;;CAExF,mBAAmB,MAAM;AACxB,SAAO,KAAK,eAAe,UAAU,KAAK,QAAQ,KAAK;;CAExD,UAAU,SAAS,MAAM,SAAS,MAAM,SAAS;AAChD,SAAO,KAAK,eAAe,UAAU,SAAS,KAAK,gBAAgB,KAAK,cAAc,MAAM,SAAS,MAAM,KAAK,QAAQ,QAAQ;;CAEjI,gBAAgB,SAAS,WAAW,IAAI,IAAI,eAAe,KAAK,UAAU,IAAI,SAAS;AACtF,SAAO,KAAK,eAAe,gBAAgB,SAAS,KAAK,gBAAgB,KAAK,cAAc,WAAW,IAAI,IAAI,cAAc,SAAS,KAAK,QAAQ,QAAQ;;CAE5J,sBAAsB;AACrB,SAAO,KAAK,eAAe,YAAY;;CAExC,oBAAoB;AACnB,SAAO,KAAK;;CAEb,kBAAkB;AACjB,SAAO,KAAK;;CAEb,mBAAmB;AAClB,SAAO,KAAK;;CAEb,eAAe;EACd,MAAM,UAAU,KAAK,eAAe,YAAY;AAChD,OAAK,cAAc,QAAQ,SAAS,CAAC;;CAEtC,cAAc,QAAQ;AACrB,OAAK,eAAe,KAAK,OAAO;;CAEjC,eAAe;AACd,OAAK,eAAe,KAAK;;CAE1B,YAAY,MAAM;AACjB,OAAK,UAAU,YAAY,MAAM,KAAK,cAAc,KAAK,cAAc;;CAExE,iBAAiB,MAAM;EACtB,MAAM,IAAI,KAAK,eAAe,YAAY;EAC1C,MAAM,SAAS;GACd,EAAE,eAAe,IAAI,SAAS,KAAK,GAAG,KAAK,EAAE,CAAC;GAC9C,EAAE,eAAe,IAAI,SAAS,KAAK,IAAI,KAAK,OAAO,KAAK,EAAE,CAAC;GAC3D,EAAE,eAAe,IAAI,SAAS,KAAK,GAAG,KAAK,IAAI,KAAK,OAAO,CAAC;GAC5D,EAAE,eAAe,IAAI,SAAS,KAAK,IAAI,KAAK,OAAO,KAAK,IAAI,KAAK,OAAO,CAAC;GACzE;EACD,MAAM,KAAK,OAAO,KAAK,MAAM,EAAE,EAAE;EACjC,MAAM,KAAK,OAAO,KAAK,MAAM,EAAE,EAAE;EACjC,IAAI,IAAI,KAAK,IAAI,GAAG,GAAG;EACvB,IAAI,IAAI,KAAK,IAAI,GAAG,GAAG;EACvB,IAAI,QAAQ,KAAK,IAAI,GAAG,GAAG,GAAG;EAC9B,IAAI,SAAS,KAAK,IAAI,GAAG,GAAG,GAAG;EAC/B,MAAM,UAAU,KAAK,UAAU,kBAAkB,KAAK,cAAc,KAAK,cAAc;AACvF,MAAI,SAAS;GACZ,MAAM,KAAK,KAAK,IAAI,GAAG,QAAQ,EAAE;GACjC,MAAM,KAAK,KAAK,IAAI,GAAG,QAAQ,EAAE;GACjC,MAAM,KAAK,KAAK,IAAI,IAAI,OAAO,QAAQ,IAAI,QAAQ,MAAM;GACzD,MAAM,KAAK,KAAK,IAAI,IAAI,QAAQ,QAAQ,IAAI,QAAQ,OAAO;AAC3D,OAAI;AACJ,OAAI;AACJ,WAAQ,KAAK,IAAI,GAAG,KAAK,GAAG;AAC5B,YAAS,KAAK,IAAI,GAAG,KAAK,GAAG;;AAE9B,OAAK,UAAU,YAAY;GAC1B;GACA;GACA;GACA;GACA,EAAE,KAAK,cAAc,KAAK,cAAc;;CAE1C,aAAa;AACZ,OAAK,UAAU,YAAY;;CAE5B,kBAAkB;EACjB,MAAM,QAAQ,KAAK,UAAU,cAAc;AAC3C,OAAK,UAAU,eAAe;AAC9B,SAAO;;CAER,eAAe,OAAO;AACrB,OAAK,UAAU,gBAAgB,MAAM;;CAEtC,gBAAgB,QAAQ;AACvB,OAAK,UAAU,gBAAgB,OAAO;;CAEvC,iBAAiB;AAChB,OAAK,UAAU,gBAAgB;;CAEhC,UAAU;AACT,OAAK,cAAc;AACnB,OAAK,eAAe,SAAS;AAC7B,OAAK,UAAU,SAAS;AACxB,OAAK,eAAe,SAAS;AAC7B,OAAK,aAAa,SAAS;AAC3B,OAAK,aAAa,SAAS;AAC3B,OAAK,cAAc,SAAS;AAC5B,OAAK,kBAAkB,SAAS;AAChC,OAAK,aAAa,SAAS;AAC3B,OAAK,eAAe,SAAS;AAC7B,OAAK,aAAa,SAAS;AAC3B,OAAK,cAAc;;;;;;;;;AAYrB,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqL/B,IAAI,6BAA6B,MAAM;CACtC;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA,YAAY,QAAQ,SAAS,cAAc;AAC1C,OAAK,SAAS;AACd,OAAK,SAAS;AACd,OAAK,eAAe,IAAI,WAAW,IAAI,eAAe,UAAU,eAAe,SAAS;AACxF,OAAK,gBAAgB,OAAO,cAAc;GACzC,OAAO;GACP,WAAW;GACX,WAAW;GACX,cAAc;GACd,cAAc;GACd,CAAC;AACF,OAAK,iBAAiB,OAAO,sBAAsB;GAClD,OAAO;GACP,SAAS,CAAC;IACT,SAAS;IACT,YAAY,eAAe;IAC3B,QAAQ,EAAE,MAAM,WAAW;IAC3B,CAAC;GACF,CAAC;AACF,OAAK,eAAe,OAAO,sBAAsB;GAChD,OAAO;GACP,SAAS,CAAC;IACT,SAAS;IACT,YAAY,eAAe;IAC3B,QAAQ,EAAE,MAAM,WAAW;IAC3B,CAAC;GACF,CAAC;AACF,OAAK,iBAAiB,OAAO,sBAAsB;GAClD,OAAO;GACP,SAAS;IACR;KACC,SAAS;KACT,YAAY,eAAe;KAC3B,SAAS,EAAE,YAAY,SAAS;KAChC;IACD;KACC,SAAS;KACT,YAAY,eAAe;KAC3B,SAAS,EAAE,MAAM,aAAa;KAC9B;IACD;KACC,SAAS;KACT,YAAY,eAAe;KAC3B,SAAS,EAAE,YAAY,SAAS;KAChC;IACD;KACC,SAAS;KACT,YAAY,eAAe;KAC3B,SAAS,EAAE,MAAM,aAAa;KAC9B;IACD;GACD,CAAC;EACF,MAAM,eAAe,OAAO,mBAAmB;GAC9C,OAAO;GACP,MAAM;GACN,CAAC;EACF,MAAM,iBAAiB,OAAO,qBAAqB;GAClD,OAAO;GACP,kBAAkB;IACjB,KAAK;IACL,KAAK;IACL,KAAK;IACL;GACD,CAAC;AACF,OAAK,WAAW,OAAO,qBAAqB;GAC3C,OAAO;GACP,QAAQ;GACR,QAAQ;IACP,QAAQ;IACR,YAAY;IACZ;GACD,UAAU;IACT,QAAQ;IACR,YAAY;IACZ,SAAS,CAAC;KACT;KACA,OAAO;KACP,CAAC;IACF;GACD,WAAW,EAAE,UAAU,kBAAkB;GACzC,CAAC;;CAEH,sCAAsC;AACrC,MAAI,CAAC,KAAK,sBAAsB;AAC/B,QAAK,uBAAuB,KAAK,OAAO,cAAc;IACrD,OAAO;IACP,MAAM,CAAC,GAAG,EAAE;IACZ,QAAQ;IACR,OAAO,gBAAgB,kBAAkB,gBAAgB;IACzD,CAAC;GACF,MAAM,cAAc,IAAI,WAAW;IAClC;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,CAAC;AACF,QAAK,OAAO,MAAM,aAAa,EAAE,SAAS,KAAK,sBAAsB,EAAE,aAAa;IACnF,aAAa;IACb,cAAc;IACd,EAAE,CAAC,GAAG,EAAE,CAAC;;AAEX,SAAO,KAAK;;CAEb,aAAa;AACZ,OAAK,aAAa,OAAO;;CAE1B,QAAQ,SAAS,YAAY,eAAe,eAAe,cAAc,SAAS,SAAS,SAAS;EACnG,MAAM,UAAU,IAAI,aAAa,GAAG;AACpC,UAAQ,KAAK,QAAQ,aAAa;AAClC,UAAQ,KAAK,QAAQ,oBAAoB;AACzC,UAAQ,KAAK,QAAQ,YAAY;AACjC,UAAQ,KAAK,QAAQ,oBAAoB;AACzC,UAAQ,KAAK,QAAQ,cAAc;AACnC,UAAQ,KAAK;AACb,UAAQ,KAAK,gBAAgB,IAAI;AACjC,UAAQ,KAAK;AACb,UAAQ,KAAK,QAAQ;AACrB,UAAQ,KAAK,QAAQ;AACrB,UAAQ,MAAM;AACd,UAAQ,MAAM,QAAQ,WAAW;AACjC,UAAQ,MAAM,QAAQ,UAAU;AAChC,UAAQ,MAAM,QAAQ,UAAU;AAChC,UAAQ,MAAM;AACd,UAAQ,MAAM;EACd,MAAM,YAAY,KAAK,aAAa,UAAU,KAAK,QAAQ,QAAQ;EACnE,MAAM,eAAe,KAAK,OAAO,gBAAgB;GAChD,QAAQ,KAAK;GACb,SAAS,CAAC;IACT,SAAS;IACT,UAAU,EAAE,QAAQ,WAAW;IAC/B,CAAC;GACF,CAAC;EACF,MAAM,kBAAkB,KAAK,OAAO,gBAAgB;GACnD,QAAQ,KAAK;GACb,SAAS,CAAC;IACT,SAAS;IACT,UAAU,EAAE,QAAQ,cAAc;IAClC,CAAC;GACF,CAAC;EACF,MAAM,kBAAkB,iBAAiB,KAAK,qCAAqC;EACnF,MAAM,oBAAoB,KAAK,OAAO,gBAAgB;GACrD,QAAQ,KAAK;GACb,SAAS;IACR;KACC,SAAS;KACT,UAAU,cAAc,YAAY;KACpC;IACD;KACC,SAAS;KACT,UAAU,KAAK;KACf;IACD;KACC,SAAS;KACT,UAAU,gBAAgB,YAAY;KACtC;IACD;KACC,SAAS;KACT,UAAU,KAAK;KACf;IACD;GACD,CAAC;EACF,MAAM,OAAO,QAAQ,gBAAgB;GACpC,OAAO;GACP,kBAAkB,CAAC;IAClB,MAAM;IACN;IACA,SAAS;IACT,YAAY;KACX,GAAG;KACH,GAAG;KACH,GAAG;KACH,GAAG;KACH;IACD,CAAC;GACF,CAAC;AACF,OAAK,YAAY,KAAK,SAAS;AAC/B,OAAK,aAAa,GAAG,aAAa;AAClC,OAAK,aAAa,GAAG,gBAAgB;AACrC,OAAK,aAAa,GAAG,kBAAkB;AACvC,OAAK,KAAK,GAAG,GAAG,GAAG,EAAE;AACrB,OAAK,KAAK;;CAEX,UAAU;AACT,OAAK,aAAa,SAAS;AAC3B,OAAK,sBAAsB,SAAS;;;;;;;;AA+FtC,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgJ9B,MAAM,eAAe;CACpB,kBAAkB;CAClB,cAAc;CACd,eAAe;CACf,OAAO;CACP,QAAQ;CACR;AACD,IAAI,0BAA0B,MAAM;CACnC;CACA;CACA;CACA;CACA,kCAAkC,IAAI,SAAS;CAC/C,8BAA8B,IAAI,YAAY,GAAG;CACjD,gBAAgB,IAAI,YAAY,KAAK,YAAY;CACjD,iBAAiB,IAAI,aAAa,KAAK,YAAY;CACnD,YAAY,QAAQ;AACnB,OAAK,SAAS;AACd,OAAK,cAAc,IAAI,WAAW,IAAI,eAAe,UAAU,eAAe,SAAS;AACvF,OAAK,kBAAkB,OAAO,sBAAsB;GACnD,OAAO;GACP,SAAS;IACR;KACC,SAAS;KACT,YAAY,eAAe;KAC3B,QAAQ,EAAE,MAAM,qBAAqB;KACrC;IACD;KACC,SAAS;KACT,YAAY,eAAe;KAC3B,QAAQ,EAAE,MAAM,WAAW;KAC3B;IACD;KACC,SAAS;KACT,YAAY,eAAe;KAC3B,QAAQ,EAAE,MAAM,qBAAqB;KACrC;IACD;KACC,SAAS;KACT,YAAY,eAAe;KAC3B,QAAQ,EAAE,MAAM,WAAW;KAC3B;IACD;GACD,CAAC;EACF,MAAM,eAAe,OAAO,mBAAmB;GAC9C,OAAO;GACP,MAAM;GACN,CAAC;EACF,MAAM,iBAAiB,OAAO,qBAAqB;GAClD,OAAO;GACP,kBAAkB,CAAC,KAAK,gBAAgB;GACxC,CAAC;AACF,OAAK,WAAW,OAAO,sBAAsB;GAC5C,OAAO;GACP,QAAQ;GACR,SAAS;IACR,QAAQ;IACR,YAAY;IACZ;GACD,CAAC;;CAEH,0BAA0B,WAAW,YAAY;EAChD,IAAI,MAAM,KAAK,gBAAgB,IAAI,UAAU;AAC7C,MAAI,CAAC,OAAO,IAAI,OAAO,YAAY;AAClC,QAAK,SAAS;AACd,SAAM,KAAK,OAAO,aAAa;IAC9B,OAAO;IACP,MAAM,KAAK,IAAI,IAAI,KAAK,KAAK,aAAa,EAAE,GAAG,EAAE;IACjD,OAAO,eAAe,SAAS,eAAe,UAAU,eAAe,WAAW,eAAe;IACjG,CAAC;AACF,QAAK,gBAAgB,IAAI,WAAW,IAAI;;AAEzC,SAAO;;CAER,QAAQ,SAAS,iBAAiB,SAAS;EAC1C,MAAM,EAAE,kBAAQ,mBAAmB,aAAa,SAAS,GAAG,aAAa,SAAS;EAClF,MAAM,aAAa,cAAc;EACjC,MAAM,kBAAkB,KAAK,0BAA0B,iBAAiB,WAAW;EACnF,MAAM,UAAU,aAAaA,SAAO,SAAS;EAC7C,MAAM,WAAW,aAAa;EAC9B,MAAM,QAAQA,SAAO,iBAAiBA,SAAO,eAAe,KAAK;EACjE,MAAM,QAAQA,SAAO,iBAAiBA,SAAO,eAAe,KAAK;EACjE,MAAM,SAAS,KAAK,IAAI,GAAG,KAAK,IAAI,MAAM,KAAK,MAAM,QAAQ,SAAS,CAAC,CAAC;EACxE,MAAM,SAAS,KAAK,IAAI,QAAQ,KAAK,IAAI,MAAM,KAAK,MAAM,QAAQ,SAAS,CAAC,CAAC;EAC7E,MAAM,MAAM,OAAOA,SAAO,wBAAwB,WAAWA,SAAO,sBAAsB,OAAOA,SAAO,qBAAqB,UAAU,WAAWA,SAAO,oBAAoB,QAAQ;EACrL,MAAM,UAAUA,SAAO,WAAW;AAClC,OAAK,cAAc,KAAK;AACxB,OAAK,cAAc,KAAK;AACxB,OAAK,cAAc,KAAK;AACxB,OAAK,cAAc,KAAK;AACxB,OAAK,eAAe,KAAK;AACzB,OAAK,eAAe,KAAK;AACzB,OAAK,eAAe,KAAK;AACzB,OAAK,eAAe,KAAK;EACzB,MAAM,gBAAgB,KAAK,YAAY,UAAU,KAAK,QAAQ,IAAI,WAAW,KAAK,YAAY,CAAC;EAC/F,MAAM,YAAY,KAAK,OAAO,gBAAgB;GAC7C,QAAQ,KAAK;GACb,SAAS;IACR;KACC,SAAS;KACT,UAAU,EAAE,QAAQ,mBAAmB;KACvC;IACD;KACC,SAAS;KACT,UAAU,EAAE,QAAQ,eAAe;KACnC;IACD;KACC,SAAS;KACT,UAAU,EAAE,QAAQ,iBAAiB;KACrC;IACD;KACC,SAAS;KACT,UAAU,EAAE,QAAQ,iBAAiB;KACrC;IACD;GACD,CAAC;EACF,MAAM,cAAc,QAAQ,iBAAiB,EAAE,OAAO,8BAA8B,CAAC;AACrF,cAAY,YAAY,KAAK,SAAS;AACtC,cAAY,aAAa,GAAG,UAAU;EACtC,MAAM,aAAa,KAAK,KAAK,cAAc,IAAI;AAC/C,cAAY,mBAAmB,WAAW;AAC1C,cAAY,KAAK;AACjB,SAAO;;CAER,aAAa;AACZ,OAAK,YAAY,OAAO;;CAEzB,UAAU;AACT,OAAK,YAAY,SAAS;;;AAM5B,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsHlB,MAAM,aAAa;AACnB,IAAI,gBAAgB,MAAM;CACzB;CACA;CACA;CACA;CACA;CACA,iCAAiC,IAAI,KAAK;CAC1C;CACA;CACA;CACA,OAAO,EAAE;CACT,SAAS;CACT;CACA,cAAc,IAAI,WAAW,IAAI,eAAe,UAAU,eAAe,SAAS;CAClF,YAAY,QAAQ;AACnB,OAAK,SAAS;AACd,OAAK,SAAS,OAAO,mBAAmB;GACvC,OAAO;GACP,MAAM;GACN,CAAC;AACF,OAAK,SAAS,OAAO,sBAAsB;GAC1C,OAAO;GACP,SAAS;IACR;KACC,SAAS;KACT,YAAY,eAAe;KAC3B,QAAQ,EAAE,MAAM,WAAW;KAC3B;IACD;KACC,SAAS;KACT,YAAY,eAAe;KAC3B,SAAS,EAAE,MAAM,aAAa;KAC9B;IACD;KACC,SAAS;KACT,YAAY,eAAe;KAC3B,SAAS,EAAE,YAAY,SAAS;KAChC;IACD;KACC,SAAS;KACT,YAAY,eAAe;KAC3B,SAAS,EAAE,YAAY,SAAS;KAChC;IACD;GACD,CAAC;AACF,OAAK,iBAAiB,OAAO,qBAAqB,EAAE,kBAAkB,CAAC,KAAK,OAAO,EAAE,CAAC;EACtF,MAAM,QAAQ,YAAY,aAAa,OAAO,qBAAqB;GAClE,OAAO,SAAS;GAChB,QAAQ,KAAK;GACb,QAAQ;IACP,QAAQ,KAAK;IACb,YAAY;IACZ;GACD,UAAU;IACT,QAAQ,KAAK;IACb;IACA,SAAS,CAAC;KACT,QAAQ;KACR,GAAG,YAAY,EAAE,OAAO;MACvB,OAAO;OACN,WAAW;OACX,WAAW;OACX,WAAW;OACX;MACD,OAAO;OACN,WAAW;OACX,WAAW;OACX,WAAW;OACX;MACD,EAAE;KACH,CAAC;IACF;GACD,WAAW,EAAE,UAAU,iBAAiB;GACxC,CAAC;AACF,OAAK,gBAAgB,KAAK,gBAAgB,MAAM;AAChD,OAAK,WAAW,KAAK,WAAW,MAAM;AACtC,OAAK,SAAS,KAAK,SAAS,KAAK;AACjC,OAAK,UAAU,OAAO,cAAc;GACnC,OAAO;GACP,WAAW;GACX,WAAW;GACX,cAAc;GACd,cAAc;GACd,CAAC;AACF,OAAK,cAAc,OAAO,cAAc;GACvC,MAAM;IACL,OAAO;IACP,QAAQ;IACR;GACD,QAAQ;GACR,OAAO,gBAAgB;GACvB,CAAC;;CAEH,cAAc,QAAQ;EACrB,IAAIE,SAAO,KAAK,eAAe,IAAI,OAAO;AAC1C,MAAI,CAACA,QAAM;AACV,YAAO,KAAK,OAAO,qBAAqB;IACvC,OAAO;IACP,QAAQ,KAAK;IACb,QAAQ;KACP,QAAQ,KAAK;KACb,YAAY;KACZ;IACD,UAAU;KACT,QAAQ,KAAK;KACb,YAAY;KACZ,SAAS,CAAC,EAAE,QAAQ,CAAC;KACrB;IACD,WAAW,EAAE,UAAU,iBAAiB;IACxC,CAAC;AACF,QAAK,eAAe,IAAI,QAAQA,OAAK;;AAEtC,SAAOA;;CAER,WAAW,OAAO,QAAQ,QAAQ;EACjC,MAAM,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG;AAClC,MAAI,QAAQ,KAAK,OAAQ;AACzB,OAAK,MAAM,KAAK,KAAK,KAAM,GAAE,SAAS;AACtC,OAAK,OAAO,EAAE;EACd,IAAI,IAAI;EACR,IAAI,IAAI;AACR,OAAK,IAAI,IAAI,GAAG,IAAI,QAAQ,KAAK;AAChC,OAAI,KAAK,IAAI,GAAG,KAAK,MAAM,IAAI,EAAE,CAAC;AAClC,OAAI,KAAK,IAAI,GAAG,KAAK,MAAM,IAAI,EAAE,CAAC;AAClC,QAAK,KAAK,KAAK,KAAK,OAAO,cAAc;IACxC,OAAO,WAAW;IAClB,MAAM;KACL,OAAO;KACP,QAAQ;KACR;IACD,QAAQ;IACR,OAAO,gBAAgB,oBAAoB,gBAAgB;IAC3D,CAAC,CAAC;AACH,OAAI,MAAM,KAAK,MAAM,EAAG;;AAEzB,OAAK,SAAS;;CAEf,SAAS,QAAQ,QAAQ,MAAM;EAC9B,MAAM,OAAO,IAAI,aAAa;GAC7B;GACA;GACA,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL;GACA;GACA,KAAK,KAAK;GACV,KAAK,KAAK;GACV,KAAK,KAAK;GACV;GACA,CAAC;AACF,SAAO,KAAK,YAAY,UAAU,KAAK,QAAQ,KAAK;;CAErD,KAAK,SAAS,QAAM,QAAQ,KAAK,MAAM,SAAS,MAAM;EACrD,MAAM,YAAY,KAAK,OAAO,gBAAgB;GAC7C,QAAQ,KAAK;GACb,SAAS;IACR;KACC,SAAS;KACT,UAAU,EAAE,QAAQ,SAAS;KAC7B;IACD;KACC,SAAS;KACT,UAAU,KAAK;KACf;IACD;KACC,SAAS;KACT,UAAU,IAAI,YAAY;KAC1B;IACD;KACC,SAAS;KACT,UAAU,KAAK,YAAY;KAC3B;IACD;GACD,CAAC;EACF,MAAM,OAAO,QAAQ,gBAAgB,EAAE,kBAAkB,CAAC;GACzD,MAAM;GACN,QAAQ;GACR,SAAS;GACT,YAAY;IACX,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH;GACD,CAAC,EAAE,CAAC;AACL,OAAK,YAAYA,OAAK;AACtB,OAAK,aAAa,GAAG,UAAU;AAC/B,OAAK,KAAK,EAAE;AACZ,OAAK,KAAK;;;;;;;CAOX,MAAM,SAAS,QAAQ,MAAM,UAAU,EAAE,EAAE,WAAW;EACrD,MAAM,UAAU,CAAC;EACjB,MAAM,YAAY,MAAM,KAAK,SAAS,IAAI,UAAU,IAAI,QAAQ,UAAU;EAC1E,MAAM,YAAY,QAAQ,cAAc,UAAU,MAAM;EACxD,MAAM,OAAO;GACZ,WAAW,QAAQ,aAAa;GAChC,WAAW,UAAU,SAAS,UAAU,GAAG;GAC3C,MAAM,QAAQ,QAAQ;GACtB,MAAM,QAAQ,QAAQ;IACrB;IACA;IACA;IACA;GACD,MAAM,UAAU,IAAI;GACpB;EACD,MAAM,SAAS,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,KAAK,MAAM,QAAQ,UAAU,EAAE,CAAC,CAAC;AACxE,OAAK,WAAW,OAAO,OAAO,OAAO,QAAQ,OAAO;EACpD,MAAM,OAAO,KAAK;EAClB,MAAM,KAAK,GAAG,MAAM,KAAK,SAAS,IAAI,GAAG,IAAI,GAAG,KAAK;EACrD,MAAM,aAAa,aAAa;AAChC,OAAK,KAAK,SAAS,KAAK,eAAe,KAAK,GAAG,YAAY,EAAE,YAAY,KAAK,aAAa,EAAE,WAAW,OAAO,WAAW,OAAO,EAAE,QAAQ;AAC3I,OAAK,IAAI,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;GACrC,MAAM,OAAO,KAAK,IAAI;AACtB,QAAK,KAAK,SAAS,KAAK,UAAU,KAAK,GAAG,YAAY,EAAE,MAAM,KAAK,aAAa,EAAE,KAAK,OAAO,KAAK,OAAO,EAAE,QAAQ;;AAErH,OAAK,IAAI,IAAI,KAAK,SAAS,GAAG,IAAI,GAAG,KAAK;GACzC,MAAM,QAAQ,KAAK;AACnB,QAAK,KAAK,SAAS,KAAK,QAAQ,KAAK,IAAI,GAAG,YAAY,EAAE,OAAO,KAAK,aAAa,EAAE,MAAM,OAAO,MAAM,OAAO,EAAE,OAAO;;AAEzH,OAAK,KAAK,SAAS,KAAK,cAAc,KAAK,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,IAAI,QAAQ,EAAE,KAAK,GAAG,OAAO,KAAK,GAAG,OAAO,EAAE,QAAQ;;;CAGnI,aAAa;AACZ,OAAK,YAAY,OAAO;;CAEzB,UAAU;AACT,OAAK,MAAM,KAAK,KAAK,KAAM,GAAE,SAAS;AACtC,OAAK,YAAY,SAAS;AAC1B,OAAK,YAAY,SAAS;;;;;;;;;;;AAc5B,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2IrB,MAAM,sBAAsB;AAC5B,MAAM,aAAa;;AAEnB,SAAS,oBAAoB,QAAQ,GAAG;CACvC,MAAM,UAAU,WAAW,OAAO,qBAAqB;EACtD,OAAO,GAAG,EAAE,QAAQ,SAAS,QAAQ;EACrC,QAAQ,EAAE;EACV,QAAQ,EAAE;EACV,UAAU;GACT,QAAQ,EAAE;GACV,YAAY,SAAS,WAAW;GAChC,SAAS,CAAC;IACT,QAAQ,EAAE;IACV,OAAO;IACP,EAAE,GAAG,SAAS,CAAC,EAAE,QAAQ,qBAAqB,CAAC,GAAG,EAAE,CAAC;GACtD;EACD,cAAc,EAAE;EAChB,WAAW,EAAE;EACb,aAAa,EAAE;EACf,CAAC;AACF,QAAO;EACN,QAAQ,OAAO,MAAM;EACrB,KAAK,OAAO,KAAK;EACjB;;AAEF,IAAI,wBAAwB,MAAM;CACjC,wBAAwB,IAAI,KAAK;CACjC,YAAY,QAAQ,MAAM;AACzB,OAAK,SAAS;AACd,OAAK,OAAO;;;CAGb,IAAI,QAAQ;EACX,IAAIA,SAAO,KAAK,MAAM,IAAI,OAAO;AACjC,MAAI,CAACA,QAAM;GACV,MAAM,IAAI,KAAK;AACf,YAAO,KAAK,OAAO,qBAAqB;IACvC,OAAO,GAAG,EAAE,QAAQ,SAAS,aAAa;IAC1C,QAAQ,EAAE;IACV,QAAQ,EAAE;IACV,UAAU;KACT,QAAQ,EAAE;KACV,YAAY,SAAS,iBAAiB;KACtC,SAAS;MACR;OACC,QAAQ,EAAE;OACV,OAAO;OACP;MACD,GAAG,SAAS,CAAC,EAAE,QAAQ,qBAAqB,CAAC,GAAG,EAAE;MAClD;OACC,QAAQ;OACR,OAAO;OACP;MACD;KACD;IACD,cAAc,EAAE;IAChB,WAAW,EAAE;IACb,aAAa,EAAE;IACf,CAAC;AACF,QAAK,MAAM,IAAI,QAAQA,OAAK;;AAE7B,SAAOA;;;;;;;AAOT,SAAS,oBAAoB,KAAK,aAAa,cAAc,WAAW;CACvE,MAAM,OAAO,gBAAgB;CAC7B,MAAM,OAAO,aAAa;EACzB;EACA;EACA;EACA;EACA;AACD,MAAK,IAAI,IAAI,GAAG,IAAI,IAAI,KAAK;AAC5B,MAAI,KAAK,YAAY,MAAM;AAC3B,MAAI,KAAK,KAAK,KAAK,MAAM;;AAE1B,KAAI,MAAM,KAAK;AACf,KAAI,MAAM,KAAK;AACf,KAAI,MAAM,KAAK;AACf,KAAI,MAAM,KAAK;;;;;;;;AAWhB,IAAI,gBAAgB,MAAM;CACzB;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA,YAAY,IAAI,aAAa,GAAG;CAChC,YAAY,IAAI,aAAa,GAAG;CAChC,YAAY,QAAQ,QAAQ,cAAc,eAAe,cAAc;AACtE,OAAK,SAAS;AACd,OAAK,YAAY,IAAI,WAAW,KAAK,eAAe,UAAU,eAAe,SAAS;AACtF,OAAK,YAAY,IAAI,WAAW,IAAI,eAAe,UAAU,eAAe,SAAS;EACrF,MAAMD,WAAS,OAAO,mBAAmB;GACxC,OAAO;GACP,MAAM;GACN,CAAC;AACF,OAAK,eAAe,gBAAgB,OAAO,sBAAsB;GAChE,OAAO;GACP,SAAS,CAAC;IACT,SAAS;IACT,YAAY,eAAe,SAAS,eAAe;IACnD,QAAQ,EAAE,MAAM,WAAW;IAC3B,CAAC;GACF,CAAC;AACF,OAAK,cAAc,OAAO,sBAAsB;GAC/C,OAAO;GACP,SAAS,CAAC;IACT,SAAS;IACT,YAAY,eAAe,SAAS,eAAe;IACnD,QAAQ,EAAE,MAAM,WAAW;IAC3B,CAAC;GACF,CAAC;AACF,OAAK,cAAc,OAAO,sBAAsB;GAC/C,OAAO;GACP,SAAS,CAAC;IACT,SAAS;IACT,YAAY,eAAe;IAC3B,QAAQ,EAAE,MAAM,WAAW;IAC3B,CAAC;GACF,CAAC;AACF,OAAK,iBAAiB,OAAO,sBAAsB;GAClD,OAAO;GACP,SAAS,CAAC;IACT,SAAS;IACT,YAAY,eAAe;IAC3B,SAAS,EAAE,MAAM,aAAa;IAC9B,EAAE;IACF,SAAS;IACT,YAAY,eAAe;IAC3B,SAAS,EAAE,YAAY,SAAS;IAChC,CAAC;GACF,CAAC;EACF,MAAM,iBAAiB,OAAO,qBAAqB,EAAE,kBAAkB;GACtE,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,EAAE,CAAC;AACJ,OAAK,WAAW,OAAO,qBAAqB;GAC3C,OAAO;GACP,QAAQ;GACR,QAAQ;IACP;IACA,YAAY;IACZ,SAAS,CAAC;KACT,aAAa;KACb,YAAY;MACX;OACC,gBAAgB;OAChB,QAAQ;OACR,QAAQ;OACR;MACD;OACC,gBAAgB;OAChB,QAAQ;OACR,QAAQ;OACR;MACD;OACC,gBAAgB;OAChB,QAAQ;OACR,QAAQ;OACR;MACD;KACD,CAAC;IACF;GACD,UAAU;IACT;IACA,YAAY;IACZ,SAAS,CAAC;KACT;KACA,OAAO;KACP,CAAC;IACF;GACD,cAAc;IACb,QAAQ;IACR,mBAAmB;IACnB,cAAc;IACd;GACD,WAAW;IACV,UAAU;IACV,UAAU;IACV;GACD,CAAC;EACF,MAAM,WAAW,IAAI,aAAa;GACjC;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA,CAAC;EACF,MAAM,UAAU,IAAI,YAAY;GAC/B;GACA;GACA;GACA;GACA;GACA;GACA,CAAC;AACF,OAAK,eAAe,OAAO,aAAa;GACvC,MAAM,SAAS;GACf,OAAO,eAAe,SAAS,eAAe;GAC9C,kBAAkB;GAClB,CAAC;AACF,MAAI,aAAa,KAAK,aAAa,gBAAgB,CAAC,CAAC,IAAI,SAAS;AAClE,OAAK,aAAa,OAAO;AACzB,OAAK,cAAc,OAAO,aAAa;GACtC,MAAM,QAAQ;GACd,OAAO,eAAe,QAAQ,eAAe;GAC7C,kBAAkB;GAClB,CAAC;AACF,MAAI,YAAY,KAAK,YAAY,gBAAgB,CAAC,CAAC,IAAI,QAAQ;AAC/D,OAAK,YAAY,OAAO;;CAEzB,aAAa;AACZ,OAAK,UAAU,OAAO;AACtB,OAAK,UAAU,OAAO;;CAEvB,KAAK,MAAM,iBAAiB,iBAAiB,SAAS,MAAM;AAC3D,sBAAoB,KAAK,WAAW,KAAK,aAAa,KAAK,cAAc,KAAK,UAAU;AACxF,OAAK,UAAU,MAAM,KAAK,WAAW;AACrC,OAAK,UAAU,MAAM;AACrB,OAAK,UAAU,MAAM;AACrB,OAAK,UAAU,MAAM;EACrB,MAAM,cAAc,KAAK,UAAU,UAAU,KAAK,QAAQ,KAAK,UAAU;AACzE,OAAK,UAAU,KAAK,KAAK,OAAO;AAChC,OAAK,UAAU,KAAK,KAAK,aAAa;AACtC,OAAK,UAAU,KAAK,KAAK,MAAM;AAC/B,OAAK,UAAU,KAAK,KAAK,gBAAgB;AACzC,OAAK,UAAU,KAAK,KAAK,cAAc;AACvC,OAAK,UAAU,KAAK,KAAK,gBAAgB;AACzC,OAAK,UAAU,KAAK,KAAK,gBAAgB;AACzC,OAAK,UAAU,KAAK;AACpB,OAAK,UAAU,KAAK,KAAK;AACzB,OAAK,UAAU,KAAK,KAAK;AACzB,OAAK,UAAU,MAAM;AACrB,OAAK,UAAU,MAAM;EACrB,MAAM,YAAY,KAAK,aAAa;GACnC;GACA;GACA;GACA;GACA;AACD,OAAK,UAAU,MAAM,UAAU;AAC/B,OAAK,UAAU,MAAM,UAAU;AAC/B,OAAK,UAAU,MAAM,UAAU;AAC/B,OAAK,UAAU,MAAM,UAAU;EAC/B,MAAM,cAAc,KAAK,UAAU,UAAU,KAAK,QAAQ,KAAK,UAAU;EACzE,MAAM,iBAAiB,KAAK,OAAO,gBAAgB;GAClD,QAAQ,KAAK;GACb,SAAS,CAAC;IACT,SAAS;IACT,UAAU,EAAE,QAAQ,aAAa;IACjC,CAAC;GACF,CAAC;EACF,MAAM,iBAAiB,KAAK,OAAO,gBAAgB;GAClD,QAAQ,KAAK;GACb,SAAS,CAAC;IACT,SAAS;IACT,UAAU,EAAE,QAAQ,aAAa;IACjC,CAAC;GACF,CAAC;EACF,MAAM,oBAAoB,KAAK,OAAO,gBAAgB;GACrD,QAAQ,KAAK;GACb,SAAS,CAAC;IACT,SAAS;IACT,UAAU;IACV,EAAE;IACF,SAAS;IACT,UAAU,gBAAgB,YAAY;IACtC,CAAC;GACF,CAAC;AACF,OAAK,YAAY,KAAK,SAAS;AAC/B,OAAK,aAAa,GAAG,gBAAgB;AACrC,OAAK,aAAa,GAAG,eAAe;AACpC,OAAK,aAAa,GAAG,eAAe;AACpC,OAAK,aAAa,GAAG,kBAAkB;AACvC,OAAK,gBAAgB,GAAG,KAAK,aAAa;AAC1C,OAAK,eAAe,KAAK,aAAa,SAAS;AAC/C,OAAK,YAAY,EAAE;;CAEpB,UAAU;AACT,OAAK,UAAU,SAAS;AACxB,OAAK,UAAU,SAAS;AACxB,OAAK,aAAa,SAAS;AAC3B,OAAK,YAAY,SAAS;;;;;;;;;;;;;;;;AAmB5B,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6ZvB,MAAM,qBAAqB;;;;;;;;;;;;;;AAiB3B,SAAS,YAAY,OAAO,SAAS;AACpC,QAAO;SACC,MAAM,aAAa,QAAQ;;;;;;;;;;;;;;;;;AAoBpC,MAAM,aAAa;EACjB,eAAe;;;;;;;;;;;;;;;;;;;;;EAqBf,YAAY,GAAG,EAAE,CAAC;;;;;;;EAOlB,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoTrB,SAAS,iBAAiB,SAAS;AAClC,QAAO;EACN;EACA,YAAY,eAAe;EAC3B,SAAS,EAAE,YAAY,SAAS;EAChC;;AAEF,MAAM,+BAA+B,IAAI,SAAS;;AAElD,SAAS,iBAAiB,QAAQ;CACjC,IAAI,OAAO,aAAa,IAAI,OAAO;AACnC,KAAI,CAAC,MAAM;EACV,MAAM,MAAM,OAAO,cAAc;GAChC,OAAO;GACP,MAAM,CAAC,GAAG,EAAE;GACZ,QAAQ;GACR,OAAO,gBAAgB,kBAAkB,gBAAgB;GACzD,CAAC;AACF,SAAO,MAAM,aAAa,EAAE,SAAS,KAAK,EAAE,IAAI,WAAW;GAC1D;GACA;GACA;GACA;GACA,CAAC,EAAE,EAAE,aAAa,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC;AAC/B,SAAO,IAAI,YAAY;AACvB,eAAa,IAAI,QAAQ,KAAK;;AAE/B,QAAO;;;;;;;AAUR,MAAM,aAAa;EACjB,eAAe;;;;;;;;;;;;;;;EAef,YAAY,GAAG,EAAE,CAAC;;EAElB,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0MrB,MAAM,sBAAsB;;AAE5B,MAAM,uBAAuB;CAC5B,QAAQ;CACR,mBAAmB;CACnB,cAAc;CACd,WAAW;CACX,qBAAqB;CACrB,gBAAgB;CAChB;;AAKD,MAAM,wBAAwB;AAC9B,SAAS,kBAAkB,MAAM,KAAK,QAAQ;AAC7C,KAAI,UAAU,KAAK,aAAa;AAChC,KAAI,SAAS,KAAK,KAAK,YAAY;AACnC,KAAI,SAAS,KAAK;AAClB,KAAI,SAAS,KAAK;CAClB,MAAM,IAAI,KAAK;AACf,KAAI,MAAM,KAAK,KAAK,MAAM,MAAM;AAC/B,MAAI,KAAK,GAAG,SAAS,GAAG,SAAS,EAAE;AACnC;;CAED,IAAI;AACJ,KAAI,MAAM,QAAQ,EAAE,CAAE,OAAM;EAC3B,EAAE;EACF,EAAE;EACF,EAAE;EACF;MACI;EACJ,MAAM,IAAI,WAAW,EAAE;AACvB,QAAM;GACL,EAAE,IAAI,EAAE;GACR,EAAE,IAAI,EAAE;GACR,EAAE,IAAI,EAAE;GACR;;AAEF,KAAI,SAAS,KAAK,IAAI;AACtB,KAAI,SAAS,KAAK,IAAI;AACtB,KAAI,SAAS,KAAK,IAAI;AACtB,KAAI,SAAS,KAAK,KAAK,qBAAqB;;;;;;AAS7C,SAAS,mBAAmB,QAAQ,QAAQ,kBAAkB;AAC7D,QAAO,OAAO,sBAAsB;EACnC;EACA,SAAS;GACR;IACC,SAAS;IACT,YAAY,eAAe;IAC3B,QAAQ,EAAE,MAAM,WAAW;IAC3B;GACD;IACC,SAAS;IACT,YAAY,eAAe;IAC3B,SAAS,EAAE,YAAY,SAAS;IAChC;GACD;IACC,SAAS;IACT,YAAY,eAAe;IAC3B,SAAS,EAAE,MAAM,cAAc;IAC/B;GACD;EACD,CAAC;;;AAGH,SAAS,mBAAmB,MAAM;AACjC,QAAO;EACN,KAAK,cAAc,KAAK,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,aAAa,IAAI,GAAG,KAAK,aAAa;EACxF,KAAK,aAAa,KAAK,IAAI,KAAK,WAAW,KAAK,qBAAqB;EACrE,KAAK,oBAAoB;EACzB,KAAK,aAAa,UAAU,IAAI;EAChC;;AAEF,IAAI,iBAAiB,MAAM;CAC1B;CACA;CACA;CACA;;CAEA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA,YAAY,IAAI,aAAa,KAAK,sBAAsB;CACxD,YAAY,QAAQ,QAAQ,cAAc,eAAe,cAAc,GAAG;AACzE,OAAK,SAAS;AACd,OAAK,YAAY,IAAI,YAAY,KAAK,yBAAyB,GAAG,eAAe,UAAU,eAAe,SAAS;EACnH,MAAMA,WAAS,OAAO,mBAAmB;GACxC,OAAO;GACP,MAAM;GACN,CAAC;AACF,OAAK,eAAe,OAAO,sBAAsB;GAChD,OAAO;GACP,SAAS,CAAC;IACT,SAAS;IACT,YAAY,eAAe,SAAS,eAAe;IACnD,QAAQ,EAAE,MAAM,WAAW;IAC3B,CAAC;GACF,CAAC;AACF,OAAK,cAAc,OAAO,sBAAsB;GAC/C,OAAO;GACP,SAAS,CAAC;IACT,SAAS;IACT,YAAY,eAAe,SAAS,eAAe;IACnD,QAAQ,EAAE,MAAM,WAAW;IAC3B,EAAE,iBAAiB,EAAE,CAAC;GACvB,CAAC;AACF,OAAK,gBAAgB,OAAO,sBAAsB;GACjD,OAAO;GACP,SAAS,CAAC;IACT,SAAS;IACT,YAAY,eAAe;IAC3B,SAAS,EAAE,MAAM,aAAa;IAC9B,EAAE;IACF,SAAS;IACT,YAAY,eAAe;IAC3B,SAAS,EAAE,YAAY,SAAS;IAChC,CAAC;GACF,CAAC;AACF,OAAK,eAAe,mBAAmB,QAAQ,qBAAqB;EACpE,MAAM,iBAAiB,OAAO,qBAAqB,EAAE,kBAAkB;GACtE,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,EAAE,CAAC;EACJ,MAAM,cAAc;GACnB;GACA,YAAY;GACZ,SAAS,CAAC;IACT,aAAa;IACb,YAAY;KACX;MACC,gBAAgB;MAChB,QAAQ;MACR,QAAQ;MACR;KACD;MACC,gBAAgB;MAChB,QAAQ;MACR,QAAQ;MACR;KACD;MACC,gBAAgB;MAChB,QAAQ;MACR,QAAQ;MACR;KACD;IACD,CAAC;GACF;EACD,MAAM,OAAO;GACZ,OAAO;GACP,QAAQ;GACR,QAAQ;GACR;GACA;GACA,cAAc;IACb,QAAQ;IACR,mBAAmB;IACnB,cAAc;IACd;GACD,WAAW;IACV,UAAU;IACV,UAAU;IACV;GACD,aAAa,EAAE,OAAO,aAAa;GACnC;EACD,MAAM,EAAE,QAAQ,QAAQ,oBAAoB,QAAQ,KAAK;AACzD,OAAK,iBAAiB;AACtB,OAAK,cAAc;AACnB,OAAK,gBAAgB,IAAI,sBAAsB,QAAQ,KAAK;AAC5D,OAAK,iBAAiB,OAAO,qBAAqB;GACjD,OAAO;GACP,QAAQ,OAAO,qBAAqB,EAAE,kBAAkB;IACvD,KAAK;IACL,KAAK;IACL,KAAK;IACL,EAAE,CAAC;GACJ,QAAQ;GACR,UAAU;IACT;IACA,YAAY;IACZ,SAAS,EAAE;IACX;GACD,cAAc;GACd,WAAW;IACV,UAAU;IACV,UAAU;IACV;GACD,CAAC;EACF,MAAM,WAAW,IAAI,aAAa;GACjC;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA,CAAC;EACF,MAAM,UAAU,IAAI,YAAY;GAC/B;GACA;GACA;GACA;GACA;GACA;GACA,CAAC;AACF,OAAK,eAAe,OAAO,aAAa;GACvC,MAAM,SAAS;GACf,OAAO,eAAe,SAAS,eAAe;GAC9C,kBAAkB;GAClB,CAAC;AACF,MAAI,aAAa,KAAK,aAAa,gBAAgB,CAAC,CAAC,IAAI,SAAS;AAClE,OAAK,aAAa,OAAO;AACzB,OAAK,cAAc,OAAO,aAAa;GACtC,MAAM,QAAQ;GACd,OAAO,eAAe,QAAQ,eAAe;GAC7C,kBAAkB;GAClB,CAAC;AACF,MAAI,YAAY,KAAK,YAAY,gBAAgB,CAAC,CAAC,IAAI,QAAQ;AAC/D,OAAK,YAAY,OAAO;;CAEzB,aAAa;AACZ,OAAK,UAAU,OAAO;;CAEvB,UAAU,MAAM;AACf,sBAAoB,KAAK,WAAW,KAAK,aAAa,KAAK,cAAc,KAAK,UAAU;EACxF,MAAM,SAAS,KAAK,eAAe;GAClC;GACA;GACA;GACA;GACA;AACD,OAAK,UAAU,MAAM,OAAO;AAC5B,OAAK,UAAU,MAAM,OAAO;AAC5B,OAAK,UAAU,MAAM,OAAO;AAC5B,OAAK,UAAU,MAAM,OAAO;AAC5B,OAAK,UAAU,MAAM,KAAK,WAAW;AACrC,OAAK,UAAU,MAAM,KAAK,gBAAgB;AAC1C,OAAK,UAAU,MAAM,KAAK,WAAW,IAAI;AACzC,OAAK,UAAU,MAAM,KAAK,eAAe;AACzC,OAAK,UAAU,MAAM,KAAK,SAAS;AACnC,OAAK,UAAU,MAAM,KAAK,UAAU;AACpC,OAAK,UAAU,MAAM,KAAK,gBAAgB,MAAM;AAChD,OAAK,UAAU,MAAM,KAAK,gBAAgB,MAAM;AAChD,OAAK,UAAU,IAAI,mBAAmB,KAAK,EAAE,GAAG;AAChD,oBAAkB,MAAM,KAAK,WAAW,GAAG;EAC3C,MAAM,cAAc,KAAK,UAAU,UAAU,KAAK,QAAQ,KAAK,UAAU;AACzE,SAAO,KAAK,OAAO,gBAAgB;GAClC,QAAQ,KAAK;GACb,SAAS,CAAC;IACT,SAAS;IACT,UAAU,EAAE,QAAQ,aAAa;IACjC,EAAE;IACF,SAAS;IACT,UAAU,KAAK,OAAO,YAAY,IAAI,iBAAiB,KAAK,OAAO;IACnE,CAAC;GACF,CAAC;;CAEH,iBAAiB,SAAS,SAAS;AAClC,SAAO,KAAK,OAAO,gBAAgB;GAClC,QAAQ,KAAK;GACb,SAAS,CAAC;IACT,SAAS;IACT,UAAU;IACV,EAAE;IACF,SAAS;IACT,UAAU,QAAQ,YAAY;IAC9B,CAAC;GACF,CAAC;;CAEH,KAAK,MAAM,iBAAiB,iBAAiB,SAAS,SAAS,MAAM,SAAS,OAAO,WAAW,OAAO;EACtG,MAAM,iBAAiB,KAAK,UAAU,KAAK;EAC3C,MAAM,mBAAmB,KAAK,iBAAiB,SAAS,QAAQ;AAChE,OAAK,YAAY,WAAW,KAAK,cAAc,IAAI,OAAO,GAAG,SAAS,KAAK,cAAc,KAAK,eAAe;AAC7G,OAAK,aAAa,GAAG,gBAAgB;AACrC,OAAK,aAAa,GAAG,eAAe;AACpC,OAAK,aAAa,GAAG,iBAAiB;AACtC,OAAK,aAAa,GAAG,gBAAgB;AACrC,OAAK,gBAAgB,GAAG,KAAK,aAAa;AAC1C,OAAK,eAAe,KAAK,aAAa,SAAS;AAC/C,OAAK,YAAY,EAAE;;;CAGpB,WAAW,MAAM,sBAAsB,SAAS,SAAS,MAAM;AAC9D,OAAK,YAAY,KAAK,eAAe;AACrC,OAAK,aAAa,GAAG,qBAAqB;AAC1C,OAAK,aAAa,GAAG,KAAK,UAAU,KAAK,CAAC;AAC1C,OAAK,aAAa,GAAG,KAAK,iBAAiB,SAAS,QAAQ,CAAC;AAC7D,OAAK,gBAAgB,GAAG,KAAK,aAAa;AAC1C,OAAK,eAAe,KAAK,aAAa,SAAS;AAC/C,OAAK,YAAY,EAAE;;CAEpB,UAAU;AACT,OAAK,UAAU,SAAS;AACxB,OAAK,aAAa,SAAS;AAC3B,OAAK,YAAY,SAAS;;;AAM5B,IAAI,iBAAiB,MAAM;CAC1B;CACA;CACA;CACA;;CAEA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;;CAEA;CACA;;CAEA,mBAAmB;CACnB,qBAAqB;;CAErB,sBAAsB,EAAE;CACxB,YAAY,IAAI,aAAa,KAAK,sBAAsB;CACxD,YAAY,QAAQ,QAAQ,cAAc,eAAe,cAAc,cAAc,cAAc,GAAG;AACrG,OAAK,SAAS;AACd,OAAK,YAAY,IAAI,YAAY,KAAK,yBAAyB,GAAG,eAAe,UAAU,eAAe,SAAS;AACnH,OAAK,eAAe,IAAI,WAAW,MAAM,eAAe,UAAU,eAAe,SAAS;EAC1F,MAAMA,WAAS,OAAO,mBAAmB;GACxC,OAAO;GACP,MAAM;GACN,CAAC;AACF,OAAK,eAAe,gBAAgB,OAAO,sBAAsB;GAChE,OAAO;GACP,SAAS,CAAC;IACT,SAAS;IACT,YAAY,eAAe,SAAS,eAAe;IACnD,QAAQ,EAAE,MAAM,WAAW;IAC3B,CAAC;GACF,CAAC;AACF,OAAK,cAAc,OAAO,sBAAsB;GAC/C,OAAO;GACP,SAAS;IACR;KACC,SAAS;KACT,YAAY,eAAe,SAAS,eAAe;KACnD,QAAQ,EAAE,MAAM,WAAW;KAC3B;IACD;KACC,SAAS;KACT,YAAY,eAAe;KAC3B,QAAQ,EAAE,MAAM,WAAW;KAC3B;IACD,iBAAiB,EAAE;IACnB,iBAAiB,EAAE;IACnB;GACD,CAAC;AACF,OAAK,gBAAgB,OAAO,sBAAsB;GACjD,OAAO;GACP,SAAS,CAAC;IACT,SAAS;IACT,YAAY,eAAe;IAC3B,SAAS,EAAE,MAAM,aAAa;IAC9B,EAAE,GAAG;IACL;IACA;IACA;IACA;IACA;IACA,CAAC,KAAK,aAAa;IACnB;IACA,YAAY,eAAe;IAC3B,SAAS,EAAE,YAAY,SAAS;IAChC,EAAE,CAAC;GACJ,CAAC;AACF,OAAK,eAAe,gBAAgB,mBAAmB,QAAQ,qBAAqB;EACpF,MAAM,iBAAiB,OAAO,qBAAqB,EAAE,kBAAkB;GACtE,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,EAAE,CAAC;EACJ,MAAM,cAAc;GACnB;GACA,YAAY;GACZ,SAAS,CAAC;IACT,aAAa;IACb,YAAY;KACX;MACC,gBAAgB;MAChB,QAAQ;MACR,QAAQ;MACR;KACD;MACC,gBAAgB;MAChB,QAAQ;MACR,QAAQ;MACR;KACD;MACC,gBAAgB;MAChB,QAAQ;MACR,QAAQ;MACR;KACD;MACC,gBAAgB;MAChB,QAAQ;MACR,QAAQ;MACR;KACD;MACC,gBAAgB;MAChB,QAAQ;MACR,QAAQ;MACR;KACD;IACD,EAAE;IACF,aAAa;IACb,YAAY,CAAC;KACZ,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACR,CAAC;IACF,CAAC;GACF;EACD,MAAM,OAAO;GACZ,OAAO;GACP,QAAQ;GACR,QAAQ;GACR;GACA;GACA,cAAc;IACb,QAAQ;IACR,mBAAmB;IACnB,cAAc;IACd;GACD,WAAW;IACV,UAAU;IACV,UAAU;IACV;GACD,aAAa,EAAE,OAAO,aAAa;GACnC;EACD,MAAM,EAAE,QAAQ,QAAQ,oBAAoB,QAAQ,KAAK;AACzD,OAAK,iBAAiB;AACtB,OAAK,cAAc;AACnB,OAAK,gBAAgB,IAAI,sBAAsB,QAAQ,KAAK;AAC5D,OAAK,iBAAiB,OAAO,qBAAqB;GACjD,OAAO;GACP,QAAQ,OAAO,qBAAqB,EAAE,kBAAkB,CAAC,KAAK,cAAc,KAAK,YAAY,EAAE,CAAC;GAChG,QAAQ;GACR,cAAc;GACd,WAAW;IACV,UAAU;IACV,UAAU;IACV;GACD,CAAC;AACF,OAAK,sBAAsB,OAAO,cAAc;GAC/C,OAAO;GACP,MAAM;IACL,OAAO;IACP,QAAQ;IACR;GACD,QAAQ;GACR,OAAO,gBAAgB,kBAAkB,gBAAgB;GACzD,CAAC;AACF,SAAO,MAAM,aAAa,EAAE,SAAS,KAAK,qBAAqB,EAAE,IAAI,WAAW;GAC/E;GACA;GACA;GACA;GACA,CAAC,EAAE;GACH,aAAa;GACb,cAAc;GACd,EAAE;GACF,OAAO;GACP,QAAQ;GACR,CAAC;AACF,OAAK,oBAAoB,OAAO,cAAc;GAC7C,OAAO;GACP,MAAM;IACL,OAAO;IACP,QAAQ;IACR;GACD,QAAQ;GACR,OAAO,gBAAgB,kBAAkB,gBAAgB;GACzD,CAAC;AACF,SAAO,MAAM,aAAa,EAAE,SAAS,KAAK,mBAAmB,EAAE,IAAI,WAAW;GAC7E;GACA;GACA;GACA;GACA,CAAC,EAAE;GACH,aAAa;GACb,cAAc;GACd,EAAE;GACF,OAAO;GACP,QAAQ;GACR,CAAC;EACF,MAAM,aAAa,IAAI,aAAa,KAAK;AACzC,OAAK,IAAI,IAAI,GAAG,IAAI,KAAK,KAAK;AAC7B,cAAW,IAAI,MAAM;AACrB,cAAW,IAAI,KAAK,KAAK;AACzB,cAAW,IAAI,KAAK,MAAM;AAC1B,cAAW,IAAI,KAAK,MAAM;;AAE3B,OAAK,wBAAwB,OAAO,aAAa;GAChD,MAAM;GACN,OAAO,eAAe,UAAU,eAAe;GAC/C,kBAAkB;GAClB,CAAC;AACF,MAAI,aAAa,KAAK,sBAAsB,gBAAgB,CAAC,CAAC,IAAI,WAAW;AAC7E,OAAK,sBAAsB,OAAO;;CAEnC,aAAa;AACZ,OAAK,UAAU,OAAO;AACtB,OAAK,aAAa,OAAO;;CAE1B,UAAU,MAAM;AACf,sBAAoB,KAAK,WAAW,KAAK,aAAa,KAAK,cAAc,KAAK,UAAU;AACxF,OAAK,UAAU,MAAM,KAAK,WAAW;AACrC,OAAK,UAAU,MAAM,KAAK,WAAW,IAAI;AACzC,OAAK,UAAU,MAAM,KAAK,YAAY,IAAI;AAC1C,OAAK,UAAU,MAAM,KAAK,YAAY,IAAI;EAC1C,MAAM,YAAY,KAAK,cAAc,KAAK,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,aAAa,IAAI,GAAG,KAAK,aAAa;EAC1G,MAAM,UAAU,KAAK,aAAa,KAAK,IAAI,KAAK,WAAW,KAAK,qBAAqB;EACrF,MAAM,aAAa,KAAK,oBAAoB;EAC5C,MAAM,eAAe,KAAK,aAAa,UAAU,IAAI,KAAK,aAAa,SAAS,IAAI;AACpF,OAAK,UAAU,MAAM;AACrB,OAAK,UAAU,MAAM;AACrB,OAAK,UAAU,MAAM;AACrB,OAAK,UAAU,MAAM;EACrB,MAAM,QAAQ,KAAK,cAAc;GAChC;GACA;GACA;GACA;AACD,OAAK,UAAU,MAAM,MAAM;AAC3B,OAAK,UAAU,MAAM,MAAM;AAC3B,OAAK,UAAU,MAAM,MAAM;AAC3B,OAAK,UAAU,MAAM,KAAK,eAAe;AACzC,oBAAkB,MAAM,KAAK,WAAW,GAAG;EAC3C,MAAM,OAAO,KAAK;AAClB,OAAK,UAAU,MAAM,MAAM,SAAS,KAAK,eAAe,IAAI;AAC5D,OAAK,UAAU,MAAM,MAAM,YAAY,KAAK,qBAAqB,IAAI;AACrE,OAAK,UAAU,MAAM,MAAM,oBAAoB,IAAI;AACnD,OAAK,UAAU,MAAM,MAAM,WAAW,IAAI;EAC1C,MAAM,QAAQ,KAAK;AACnB,MAAI,OAAO;AACV,QAAK,UAAU,MAAM,MAAM;AAC3B,QAAK,UAAU,MAAM,MAAM;AAC3B,QAAK,UAAU,MAAM,MAAM;AAC3B,QAAK,UAAU,MAAM;AACrB,QAAK,UAAU,MAAM,MAAM;;EAE5B,MAAM,cAAc,KAAK,UAAU,UAAU,KAAK,QAAQ,KAAK,UAAU;EACzE,MAAM,iBAAiB,KAAK,aAAa,KAAK,mBAAmB,KAAK,aAAa,UAAU,KAAK,QAAQ,KAAK,iBAAiB,GAAG,KAAK;AACxI,SAAO,KAAK,OAAO,gBAAgB;GAClC,QAAQ,KAAK;GACb,SAAS;IACR;KACC,SAAS;KACT,UAAU,EAAE,QAAQ,aAAa;KACjC;IACD;KACC,SAAS;KACT,UAAU,EAAE,QAAQ,gBAAgB;KACpC;IACD;KACC,SAAS;KACT,UAAU,KAAK,OAAO,YAAY,IAAI,iBAAiB,KAAK,OAAO;KACnE;IACD;KACC,SAAS;KACT,UAAU,KAAK,SAAS,KAAK,UAAU,YAAY,IAAI,iBAAiB,KAAK,OAAO;KACpF;IACD;GACD,CAAC;;CAEH,KAAK,MAAM,iBAAiB,iBAAiB,aAAa,SAAS,SAAS,MAAM,SAAS,OAAO,WAAW,OAAO;EACnH,MAAM,iBAAiB,KAAK,UAAU,KAAK;EAC3C,MAAM,QAAQ,KAAK;EACnB,MAAM,OAAO,KAAK;EAClB,MAAM,mBAAmB,KAAK,OAAO,gBAAgB;GACpD,QAAQ,KAAK;GACb,SAAS;IACR;KACC,SAAS;KACT,UAAU;KACV;IACD;KACC,SAAS;KACT,WAAW,WAAW,OAAO,YAAY;KACzC;IACD;KACC,SAAS;KACT,WAAW,MAAM,UAAU,KAAK,mBAAmB,YAAY;KAC/D;IACD;KACC,SAAS;KACT,WAAW,MAAM,qBAAqB,OAAO,YAAY;KACzD;IACD;KACC,SAAS;KACT,WAAW,MAAM,aAAa,OAAO,YAAY;KACjD;IACD;KACC,SAAS;KACT,WAAW,MAAM,YAAY,OAAO,YAAY;KAChD;IACD;GACD,CAAC;AACF,OAAK,YAAY,WAAW,KAAK,cAAc,IAAI,OAAO,GAAG,SAAS,KAAK,cAAc,KAAK,eAAe;AAC7G,OAAK,aAAa,GAAG,gBAAgB;AACrC,OAAK,aAAa,GAAG,eAAe;AACpC,OAAK,aAAa,GAAG,iBAAiB;AACtC,OAAK,aAAa,GAAG,gBAAgB;AACrC,OAAK,gBAAgB,GAAG,YAAY,aAAa;AACjD,OAAK,gBAAgB,GAAG,KAAK,UAAU,YAAY,CAAC;AACpD,OAAK,eAAe,YAAY,aAAa,YAAY,YAAY;AACrE,OAAK,YAAY,YAAY,WAAW;;;CAGzC,WAAW,MAAM,sBAAsB,aAAa,MAAM;AACzD,OAAK,YAAY,KAAK,eAAe;AACrC,OAAK,aAAa,GAAG,qBAAqB;AAC1C,OAAK,aAAa,GAAG,KAAK,UAAU,KAAK,CAAC;AAC1C,OAAK,gBAAgB,GAAG,YAAY,aAAa;AACjD,OAAK,gBAAgB,GAAG,KAAK,UAAU,YAAY,CAAC;AACpD,OAAK,eAAe,YAAY,aAAa,YAAY,YAAY;AACrE,OAAK,YAAY,YAAY,WAAW;;CAEzC,UAAU,aAAa;AACtB,MAAI,YAAY,YAAa,QAAO,YAAY;EAChD,MAAM,SAAS,KAAK,IAAI,GAAG,KAAK,KAAK,YAAY,aAAa,OAAO,GAAG,CAAC;AACzE,MAAI,CAAC,KAAK,oBAAoB,KAAK,qBAAqB,QAAQ;AAC/D,OAAI,KAAK,iBAAkB,MAAK,oBAAoB,KAAK,KAAK,iBAAiB;GAC/E,MAAM,WAAW,KAAK,KAAK,KAAK,KAAK,KAAK,OAAO,CAAC;AAClD,QAAK,mBAAmB,KAAK,OAAO,aAAa;IAChD,OAAO;IACP,MAAM,WAAW;IACjB,OAAO,eAAe;IACtB,kBAAkB;IAClB,CAAC;AACF,OAAI,aAAa,KAAK,iBAAiB,gBAAgB,CAAC,CAAC,KAAK,EAAE;AAChE,QAAK,iBAAiB,OAAO;AAC7B,QAAK,qBAAqB;;AAE3B,SAAO,KAAK;;CAEb,UAAU;AACT,OAAK,kBAAkB,SAAS;AAChC,OAAK,MAAM,UAAU,KAAK,oBAAqB,QAAO,SAAS;AAC/D,OAAK,UAAU,SAAS;AACxB,OAAK,aAAa,SAAS;AAC3B,OAAK,oBAAoB,SAAS;AAClC,OAAK,kBAAkB,SAAS;AAChC,OAAK,sBAAsB,SAAS;;;;;;;AAUtC,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgHvB,IAAI,qBAAqB,MAAM;CAC9B;CACA;CACA;CACA;CACA;CACA,YAAY,QAAQ;AACnB,OAAK,SAAS;EACd,MAAM,eAAe,OAAO,mBAAmB;GAC9C,OAAO;GACP,MAAM;GACN,CAAC;AACF,OAAK,kBAAkB,OAAO,sBAAsB;GACnD,OAAO;GACP,SAAS;IACR;KACC,SAAS;KACT,YAAY,eAAe;KAC3B,SAAS,EAAE,YAAY,SAAS;KAChC;IACD;KACC,SAAS;KACT,YAAY,eAAe;KAC3B,SAAS,EAAE,YAAY,SAAS;KAChC;IACD;KACC,SAAS;KACT,YAAY,eAAe;KAC3B,SAAS,EAAE,YAAY,SAAS;KAChC;IACD;KACC,SAAS;KACT,YAAY,eAAe;KAC3B,SAAS,EAAE,MAAM,aAAa;KAC9B;IACD;KACC,SAAS;KACT,YAAY,eAAe;KAC3B,QAAQ,EAAE,MAAM,WAAW;KAC3B;IACD;GACD,CAAC;EACF,MAAM,iBAAiB,OAAO,qBAAqB;GAClD,OAAO;GACP,kBAAkB,CAAC,KAAK,gBAAgB;GACxC,CAAC;AACF,OAAK,WAAW,OAAO,qBAAqB;GAC3C,OAAO;GACP,QAAQ;GACR,QAAQ;IACP,QAAQ;IACR,YAAY;IACZ;GACD,UAAU;IACT,QAAQ;IACR,YAAY;IACZ,SAAS,CAAC;KACT,QAAQ;KACR,OAAO;MACN,OAAO;OACN,WAAW;OACX,WAAW;OACX,WAAW;OACX;MACD,OAAO;OACN,WAAW;OACX,WAAW;OACX,WAAW;OACX;MACD;KACD,CAAC;IACF;GACD,WAAW,EAAE,UAAU,kBAAkB;GACzC,CAAC;AACF,OAAK,gBAAgB,OAAO,aAAa;GACxC,OAAO;GACP,MAAM;GACN,OAAO,eAAe,UAAU,eAAe;GAC/C,CAAC;AACF,OAAK,UAAU,OAAO,cAAc;GACnC,OAAO;GACP,WAAW;GACX,WAAW;GACX,CAAC;;CAEH,OAAO,gBAAgB,WAAW,cAAc,WAAW,YAAY,SAAS;EAC/E,MAAM,mBAAmB,QAAQ,gBAAgB,OAAO;EACxD,MAAM,cAAc,QAAQ,eAAe;EAC3C,MAAM,cAAc,QAAQ,eAAe;EAC3C,MAAM,iBAAiB,QAAQ,kBAAkB;EACjD,MAAM,YAAY,QAAQ,cAAc,QAAQ,IAAI,QAAQ,cAAc,aAAa,IAAI;EAC3F,MAAM,gCAAgC,IAAI,YAAY,GAAG;EACzD,MAAM,UAAU,IAAI,aAAa,cAAc;EAC/C,MAAM,UAAU,IAAI,YAAY,cAAc;AAC9C,UAAQ,KAAK;AACb,UAAQ,KAAK;AACb,UAAQ,KAAK;AACb,UAAQ,KAAK;AACb,UAAQ,KAAK,QAAQ;AACrB,UAAQ,KAAK,QAAQ;AACrB,UAAQ,KAAK;AACb,UAAQ,KAAK;AACb,OAAK,OAAO,MAAM,YAAY,KAAK,eAAe,GAAG,cAAc;EACnE,MAAM,YAAY,KAAK,OAAO,gBAAgB;GAC7C,OAAO;GACP,QAAQ,KAAK;GACb,SAAS;IACR;KACC,SAAS;KACT,UAAU;KACV;IACD;KACC,SAAS;KACT,UAAU;KACV;IACD;KACC,SAAS;KACT,UAAU;KACV;IACD;KACC,SAAS;KACT,UAAU,KAAK;KACf;IACD;KACC,SAAS;KACT,UAAU,EAAE,QAAQ,KAAK,eAAe;KACxC;IACD;GACD,CAAC;EACF,MAAM,OAAO,eAAe,gBAAgB;GAC3C,OAAO;GACP,kBAAkB,CAAC;IAClB,MAAM;IACN,QAAQ;IACR,SAAS;IACT,YAAY;KACX,GAAG;KACH,GAAG;KACH,GAAG;KACH,GAAG;KACH;IACD,CAAC;GACF,CAAC;AACF,OAAK,YAAY,KAAK,SAAS;AAC/B,OAAK,aAAa,GAAG,UAAU;AAC/B,OAAK,KAAK,EAAE;AACZ,OAAK,KAAK;;CAEX,UAAU;AACT,OAAK,cAAc,SAAS;;;AAM9B,SAAS,mBAAmB,UAAU;CACrC,MAAM,IAAI,SAAS,MAAM;AACzB,KAAI,EAAE,WAAW,IAAI,EAAE;EACtB,MAAM,MAAM,EAAE,MAAM,EAAE;AACtB,MAAI,IAAI,WAAW,EAAG,QAAO;GAC5B,OAAO,SAAS,IAAI,KAAK,IAAI,IAAI,GAAG,GAAG;GACvC,OAAO,SAAS,IAAI,KAAK,IAAI,IAAI,GAAG,GAAG;GACvC,OAAO,SAAS,IAAI,KAAK,IAAI,IAAI,GAAG,GAAG;GACvC;GACA;AACD,MAAI,IAAI,WAAW,EAAG,QAAO;GAC5B,OAAO,SAAS,IAAI,MAAM,GAAG,EAAE,EAAE,GAAG,GAAG;GACvC,OAAO,SAAS,IAAI,MAAM,GAAG,EAAE,EAAE,GAAG,GAAG;GACvC,OAAO,SAAS,IAAI,MAAM,GAAG,EAAE,EAAE,GAAG,GAAG;GACvC;GACA;AACD,MAAI,IAAI,WAAW,EAAG,QAAO;GAC5B,OAAO,SAAS,IAAI,MAAM,GAAG,EAAE,EAAE,GAAG,GAAG;GACvC,OAAO,SAAS,IAAI,MAAM,GAAG,EAAE,EAAE,GAAG,GAAG;GACvC,OAAO,SAAS,IAAI,MAAM,GAAG,EAAE,EAAE,GAAG,GAAG;GACvC,OAAO,SAAS,IAAI,MAAM,GAAG,EAAE,EAAE,GAAG,GAAG;GACvC;;AAEF,KAAI,EAAE,WAAW,MAAM,EAAE;EACxB,MAAM,QAAQ,EAAE,QAAQ,WAAW,GAAG,CAAC,QAAQ,MAAM,GAAG,CAAC,MAAM,IAAI,CAAC,KAAK,MAAM,OAAO,WAAW,EAAE,MAAM,CAAC,CAAC;AAC3G,SAAO;IACL,MAAM,MAAM,KAAK;IACjB,MAAM,MAAM,KAAK;IACjB,MAAM,MAAM,KAAK;GAClB,MAAM,OAAO,KAAK,IAAI,MAAM,KAAK;GACjC;;AAEF,QAAO;EACN;EACA;EACA;EACA;EACA;;AAEF,SAAS,yBAAyB,SAAS;CAC1C,IAAI,OAAO;CACX,MAAM,MAAM,QAAQ;AACpB,MAAK,IAAI,IAAI,GAAG,IAAI,KAAK,KAAK;EAC7B,MAAM,KAAK,IAAI,KAAK;AACpB,UAAQ,QAAQ,GAAG,IAAI,QAAQ,GAAG,IAAI,QAAQ,GAAG,IAAI,QAAQ,GAAG;;AAEjE,QAAO,OAAO;;AAEf,SAAS,qBAAqB,GAAG,MAAM;CACtC,IAAI,SAAS;CACb,MAAM,MAAM,KAAK;AACjB,MAAK,IAAI,IAAI,GAAG,IAAI,MAAM,GAAG,IAAI,KAAK,IAAI,KAAK;EAC9C,MAAM,KAAK,KAAK,GAAG;EACnB,MAAM,KAAK,KAAK,GAAG;EACnB,MAAM,KAAK,KAAK,GAAG;EACnB,MAAM,KAAK,KAAK,GAAG;AACnB,MAAI,KAAK,EAAE,MAAM,KAAK,EAAE,KAAK,EAAE,KAAK,KAAK,OAAO,EAAE,IAAI,OAAO,KAAK,MAAM,GAAI,UAAS,CAAC;;AAEvF,QAAO;;AAER,MAAM,0BAA0B;AAChC,MAAM,qBAAqB;;;;;AAK3B,SAAS,kBAAkB,qBAAqB,YAAY;AAC3D,KAAI,WAAW,aAAa,KAAK,EAAG,QAAO,WAAW;CACtD,MAAM,IAAI,KAAK,KAAK,KAAK,KAAK,uBAAuB,IAAI,WAAW,WAAW,CAAC;AAChF,QAAO,KAAK,IAAI,oBAAoB,KAAK,IAAI,GAAG,EAAE,CAAC;;AAEpD,SAAS,sBAAsB,IAAI,IAAI,KAAK,YAAY,KAAK;CAC5D,MAAM,WAAW,kBAAkB,IAAI,KAAK,MAAM,GAAG,IAAI,IAAI,GAAG,IAAI,IAAI,GAAG,GAAG,IAAI,IAAI,GAAG,IAAI,IAAI,EAAE,EAAE,WAAW;AAChH,MAAK,IAAI,IAAI,GAAG,KAAK,UAAU,KAAK;EACnC,MAAM,IAAI,IAAI;EACd,MAAM,KAAK,IAAI;AACf,MAAI,KAAK;GACR,GAAG,KAAK,KAAK,GAAG,IAAI,IAAI,KAAK,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI;GACpD,GAAG,KAAK,KAAK,GAAG,IAAI,IAAI,KAAK,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI;GACpD,CAAC;;;AAGJ,SAAS,kBAAkB,IAAI,KAAK,KAAK,KAAK,YAAY,KAAK;CAC9D,MAAM,WAAW,kBAAkB,IAAI,KAAK,IAAI,KAAK,MAAM,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE,EAAE,KAAK,MAAM,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC,EAAE,WAAW;AAC9L,MAAK,IAAI,IAAI,GAAG,KAAK,UAAU,KAAK;EACnC,MAAM,IAAI,IAAI;EACd,MAAM,KAAK,IAAI;AACf,MAAI,KAAK;GACR,GAAG,KAAK,KAAK,KAAK,GAAG,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI;GAC5F,GAAG,KAAK,KAAK,KAAK,GAAG,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI;GAC5F,CAAC;;;;;;;AAOJ,SAAS,gBAAgB,KAAK;AAC7B,KAAI;EACH,MAAM,QAAQ,IAAI,OAAO,IAAI,CAAC,UAAU,CAAC;AACzC,SAAO,MAAM,QAAQ,MAAM,GAAG,QAAQ;SAC/B;AACP,SAAO;;;AAGT,SAAS,qBAAqB,OAAO,QAAQ,QAAQ,OAAO,YAAY;CACvE,MAAM,MAAM,MAAM,MAAM,OAAO;AAC/B,KAAI,CAAC,IAAK,QAAO;EAChB,UAAU,EAAE;EACZ,YAAY;EACZ;CACD,IAAI,QAAQ,gBAAgB,IAAI;CAChC,MAAM,aAAa,UAAU;AAC7B,YAAW,MAAM,MAAM,YAAY,EAAE,EAAE,KAAK,MAAM,CAAC,EAAE,SAAS,GAAG,EAAE,KAAK,CAAC;CACzE,MAAM,WAAW,EAAE;CACnB,IAAI,OAAO;EACV,GAAG;EACH,GAAG;EACH;CACD,IAAI,UAAU,EAAE;CAChB,MAAM,sBAAsB;AAC3B,MAAI,QAAQ,UAAU,GAAG;GACxB,MAAM,QAAQ,QAAQ;GACtB,MAAM,OAAO,QAAQ,QAAQ,SAAS;AACtC,OAAI,KAAK,MAAM,KAAK,IAAI,MAAM,GAAG,KAAK,IAAI,MAAM,EAAE,GAAG,KAAM,SAAQ,KAAK;AACxE,OAAI,QAAQ,UAAU,EAAG,UAAS,KAAK,QAAQ;;AAEhD,YAAU,EAAE;;AAEb,MAAK,MAAM,QAAQ,OAAO;EACzB,MAAM,OAAO,KAAK;EAClB,MAAM,OAAO,KAAK,MAAM,EAAE;AAC1B,MAAI,SAAS,UAAU;AACtB,kBAAe;AACf,UAAO;IACN,IAAI,SAAS,KAAK,MAAM;IACxB,GAAG,EAAE,SAAS,KAAK,MAAM;IACzB;AACD,aAAU,CAAC,KAAK;aACN,SAAS,UAAU;AAC7B,UAAO;IACN,IAAI,SAAS,KAAK,MAAM;IACxB,GAAG,EAAE,SAAS,KAAK,MAAM;IACzB;AACD,WAAQ,KAAK,KAAK;aACR,SAAS,oBAAoB;GACvC,MAAM,KAAK;IACV,IAAI,SAAS,KAAK,MAAM;IACxB,GAAG,EAAE,SAAS,KAAK,MAAM;IACzB;GACD,MAAM,MAAM;IACX,IAAI,SAAS,KAAK,MAAM;IACxB,GAAG,EAAE,SAAS,KAAK,MAAM;IACzB;AACD,yBAAsB,MAAM,IAAI,KAAK,YAAY,QAAQ;AACzD,UAAO;aACG,SAAS,iBAAiB;GACpC,MAAM,MAAM;IACX,IAAI,SAAS,KAAK,MAAM;IACxB,GAAG,EAAE,SAAS,KAAK,MAAM;IACzB;GACD,MAAM,MAAM;IACX,IAAI,SAAS,KAAK,MAAM;IACxB,GAAG,EAAE,SAAS,KAAK,MAAM;IACzB;GACD,MAAM,MAAM;IACX,IAAI,SAAS,KAAK,MAAM;IACxB,GAAG,EAAE,SAAS,KAAK,MAAM;IACzB;AACD,qBAAkB,MAAM,KAAK,KAAK,KAAK,YAAY,QAAQ;AAC3D,UAAO;aACG,SAAS,YAAa,gBAAe;;AAEjD,gBAAe;AACf,QAAO;EACN;EACA;EACA;;;AAGF,MAAM,kBAAkB,KAAK,IAAI,KAAK,KAAK,KAAK,IAAI;;;;;;;AAOpD,SAAS,sBAAsB,EAAE,UAAU,eAAe,cAAc;AACvE,KAAI,CAAC,WAAY,QAAO,kBAAkB,cAAc;CACxD,MAAM,WAAW,cAAc,KAAK,aAAa;EAChD;EACA,MAAM,KAAK,IAAI,yBAAyB,QAAQ,CAAC;EACjD,EAAE;AACH,UAAS,MAAM,GAAG,MAAM,EAAE,OAAO,EAAE,KAAK;CACxC,MAAM,aAAa,SAAS,UAAU,EAAE,CAAC;AACzC,MAAK,IAAI,IAAI,GAAG,IAAI,SAAS,QAAQ,KAAK;EACzC,MAAM,QAAQ,SAAS,GAAG;EAC1B,MAAM,MAAM,MAAM,KAAK,MAAM,MAAM,SAAS,EAAE;AAC9C,OAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK;AAC3B,OAAI,SAAS,GAAG,QAAQ,SAAS,GAAG,KAAM;GAC1C,MAAM,QAAQ,SAAS,GAAG;AAC1B,OAAI,qBAAqB,MAAM,IAAI,MAAM,IAAI,qBAAqB,KAAK,MAAM,CAAE,YAAW,GAAG,KAAK,EAAE;;;CAGtG,MAAM,WAAW,EAAE;CACnB,MAAM,4BAA4B,IAAI,KAAK;AAC3C,MAAK,IAAI,IAAI,GAAG,IAAI,SAAS,QAAQ,KAAK;EACzC,MAAM,SAAS,WAAW;AAC1B,MAAI,OAAO,SAAS,MAAM,GAAG;GAC5B,MAAM,OAAO;IACZ,OAAO,SAAS,GAAG;IACnB,OAAO,EAAE;IACT;AACD,YAAS,KAAK,KAAK;AACnB,aAAU,IAAI,GAAG,KAAK;QAChB,WAAU,IAAI,OAAO,OAAO,SAAS,GAAG,EAAE,MAAM,KAAK,SAAS,GAAG,QAAQ;;AAEjF,QAAO;;;AAGR,SAAS,gBAAgB,GAAG,GAAG,GAAG,GAAG;CACpC,MAAM,KAAK,EAAE,IAAI,EAAE;CACnB,MAAM,KAAK,EAAE,IAAI,EAAE;CACnB,MAAM,KAAK,EAAE,IAAI,EAAE;CACnB,MAAM,KAAK,EAAE,IAAI,EAAE;CACnB,MAAM,MAAM,KAAK,KAAK,KAAK;AAC3B,KAAI,KAAK,IAAI,IAAI,GAAG,MAAO,QAAO;CAClC,MAAM,MAAM,EAAE,IAAI,EAAE,KAAK,MAAM,EAAE,IAAI,EAAE,KAAK,MAAM;CAClD,MAAM,MAAM,EAAE,IAAI,EAAE,KAAK,MAAM,EAAE,IAAI,EAAE,KAAK,MAAM;CAClD,MAAM,MAAM;AACZ,KAAI,KAAK,OAAO,KAAK,IAAI,OAAO,KAAK,OAAO,KAAK,IAAI,IAAK,QAAO;AACjE,QAAO;EACN,GAAG,EAAE,IAAI,KAAK;EACd,GAAG,EAAE,IAAI,KAAK;EACd;;;;;;;;;AASF,SAAS,gBAAgB,SAAS,QAAQ,GAAG;CAC5C,MAAM,IAAI,QAAQ;AAClB,KAAI,IAAI,EAAG,QAAO,EAAE;AACpB,KAAI,QAAQ,GAAI,QAAO,CAAC,QAAQ;AAChC,MAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK;EAC3B,MAAM,IAAI,QAAQ;EAClB,MAAM,IAAI,SAAS,IAAI,KAAK;AAC5B,OAAK,IAAI,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK;AAC/B,OAAI,MAAM,KAAK,MAAM,IAAI,EAAG;GAC5B,MAAM,IAAI,gBAAgB,GAAG,GAAG,QAAQ,IAAI,SAAS,IAAI,KAAK,GAAG;AACjE,OAAI,CAAC,EAAG;GACR,MAAM,QAAQ,CAAC,GAAG,GAAG,QAAQ,MAAM,IAAI,GAAG,IAAI,EAAE,CAAC;GACjD,MAAM,QAAQ;IACb;IACA,GAAG,QAAQ,MAAM,IAAI,EAAE;IACvB,GAAG,QAAQ,MAAM,GAAG,IAAI,EAAE;IAC1B;AACD,UAAO,CAAC,GAAG,gBAAgB,OAAO,QAAQ,EAAE,EAAE,GAAG,gBAAgB,OAAO,QAAQ,EAAE,CAAC;;;AAGrF,QAAO,KAAK,IAAI,yBAAyB,QAAQ,CAAC,GAAG,OAAO,CAAC,QAAQ,GAAG,EAAE;;;AAG3E,SAAS,cAAc,GAAG,UAAU;CACnC,IAAI,IAAI;AACR,MAAK,MAAM,KAAK,SAAU,MAAK,IAAI,IAAI,GAAG,IAAI,EAAE,QAAQ,KAAK;EAC5D,MAAM,IAAI,EAAE;EACZ,MAAM,IAAI,GAAG,IAAI,KAAK,EAAE;EACxB,MAAM,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE;AAChE,MAAI,EAAE,KAAK,EAAE,GACZ;OAAI,EAAE,IAAI,EAAE,KAAK,OAAO,EAAG;aACjB,EAAE,KAAK,EAAE,KAAK,OAAO,EAAG;;AAEpC,QAAO;;;AAGR,SAAS,gBAAgB,MAAM;CAC9B,IAAI,OAAO;CACX,IAAI,UAAU;AACd,MAAK,IAAI,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;EACrC,MAAM,MAAM,KAAK;EACjB,MAAM,MAAM,MAAM,IAAI,KAAK,KAAK;EAChC,MAAM,MAAM,KAAK,MAAM,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,EAAE;AACpD,MAAI,MAAM,SAAS;AAClB,aAAU;AACV,UAAO;;;CAGT,MAAM,IAAI,KAAK;CACf,MAAM,IAAI,MAAM,OAAO,KAAK,KAAK;CACjC,MAAM,MAAM,EAAE,IAAI,EAAE,KAAK;CACzB,MAAM,MAAM,EAAE,IAAI,EAAE,KAAK;CACzB,MAAM,MAAM,KAAK,IAAI,MAAM,KAAK,IAAI,KAAK,UAAU,KAAK,CAAC;CACzD,MAAM,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,UAAU;CACpC,MAAM,MAAM,EAAE,IAAI,EAAE,KAAK,UAAU;CACnC,MAAM,IAAI;EACT,GAAG,KAAK;EACR,GAAG,KAAK;EACR;AACD,QAAO,qBAAqB,GAAG,KAAK,GAAG,IAAI;EAC1C,GAAG,KAAK;EACR,GAAG,KAAK;EACR;;;;;;;;;;;AAWF,SAAS,kBAAkB,eAAe;CACzC,MAAM,QAAQ,cAAc,SAAS,MAAM,gBAAgB,EAAE,CAAC;CAC9D,MAAM,WAAW,EAAE;CACnB,MAAM,QAAQ,EAAE;AAChB,MAAK,MAAM,QAAQ,MAAO,KAAI,cAAc,gBAAgB,KAAK,EAAE,cAAc,KAAK,EAAG,UAAS,KAAK;EACtG,OAAO;EACP,OAAO,EAAE;EACT,CAAC;KACG,OAAM,KAAK,KAAK;AACrB,MAAK,MAAM,QAAQ,OAAO;EACzB,MAAM,OAAO,KAAK,IAAI,yBAAyB,KAAK,CAAC;EACrD,MAAM,QAAQ,gBAAgB,KAAK;EACnC,IAAI;EACJ,IAAI,WAAW,OAAO;AACtB,OAAK,MAAM,QAAQ,UAAU;GAC5B,MAAM,YAAY,KAAK,IAAI,yBAAyB,KAAK,MAAM,CAAC;AAChE,OAAI,YAAY,QAAQ,YAAY,YAAY,qBAAqB,OAAO,KAAK,MAAM,EAAE;AACxF,WAAO;AACP,eAAW;;;AAGb,QAAM,MAAM,KAAK,KAAK;;AAEvB,QAAO;;;;;;;AAOR,MAAM,oCAAoC,IAAI,SAAS;AACvD,SAAS,gBAAgB,MAAM,OAAO,QAAQ,QAAQ,OAAO,YAAY;CACxE,IAAI,UAAU,kBAAkB,IAAI,KAAK;AACzC,KAAI,CAAC,SAAS;AACb,4BAA0B,IAAI,KAAK;AACnC,oBAAkB,IAAI,MAAM,QAAQ;;CAErC,MAAM,MAAM,GAAG,MAAM,GAAG,GAAG,MAAM,GAAG,WAAW,YAAY,GAAG,GAAG,WAAW;CAC5E,IAAI,WAAW,QAAQ,IAAI,IAAI;AAC/B,KAAI,CAAC,UAAU;AACd,aAAW,sBAAsB,qBAAqB,OAAO,GAAG,GAAG,OAAO,WAAW,CAAC;AACtF,UAAQ,IAAI,KAAK,SAAS;;CAE3B,MAAM,KAAK,SAAS;CACpB,MAAM,KAAK,CAAC,SAAS;CACrB,MAAM,SAAS,MAAM,EAAE,KAAK,OAAO;EAClC,GAAG,EAAE,IAAI;EACT,GAAG,EAAE,IAAI;EACT,EAAE;AACH,QAAO,SAAS,KAAK,UAAU;EAC9B,OAAO,MAAM,KAAK,MAAM;EACxB,OAAO,KAAK,MAAM,IAAI,MAAM;EAC5B,EAAE;;AAEJ,SAAS,6BAA6B,SAAS;CAC9C,MAAM,OAAO,QAAQ;CACrB,MAAM,WAAW,QAAQ,YAAY;CACrC,MAAM,QAAQ,QAAQ,SAAS;CAC/B,MAAM,YAAY,QAAQ;CAC1B,MAAM,aAAa;EAClB,UAAU,QAAQ,kBAAkB,KAAK,IAAI,KAAK,IAAI,GAAG,QAAQ,cAAc,GAAG,KAAK;EACvF,WAAW,KAAK,IAAI,MAAM,QAAQ,kBAAkB,wBAAwB;EAC5E;CACD,MAAM,QAAQ,YAAY,KAAK,cAAc;CAC7C,MAAM,OAAO,kBAAkB,MAAM,QAAQ,KAAK,QAAQ,OAAO,IAAI,EAAE;EACtE,WAAW,QAAQ;EACnB,eAAe,QAAQ,gBAAgB,QAAQ,gBAAgB,QAAQ;EACvE,CAAC;CACF,MAAM,WAAW,EAAE;AACnB,MAAK,MAAM,UAAU,KAAK,QAAQ;EACjC,MAAM,aAAa,gBAAgB,MAAM,KAAK,SAAS,OAAO,QAAQ,EAAE,OAAO,GAAG,OAAO,GAAG,OAAO,WAAW;AAC9G,OAAK,MAAM,MAAM,WAAY,UAAS,KAAK,GAAG;;CAE/C,IAAI,OAAO,OAAO;CAClB,IAAI,OAAO,OAAO;CAClB,IAAI,OAAO,OAAO;CAClB,IAAI,OAAO,OAAO;AAClB,MAAK,MAAM,QAAQ,UAAU;AAC5B,OAAK,MAAM,KAAK,KAAK,OAAO;AAC3B,OAAI,EAAE,IAAI,KAAM,QAAO,EAAE;AACzB,OAAI,EAAE,IAAI,KAAM,QAAO,EAAE;AACzB,OAAI,EAAE,IAAI,KAAM,QAAO,EAAE;AACzB,OAAI,EAAE,IAAI,KAAM,QAAO,EAAE;;AAE1B,OAAK,MAAM,QAAQ,KAAK,MAAO,MAAK,MAAM,KAAK,MAAM;AACpD,OAAI,EAAE,IAAI,KAAM,QAAO,EAAE;AACzB,OAAI,EAAE,IAAI,KAAM,QAAO,EAAE;AACzB,OAAI,EAAE,IAAI,KAAM,QAAO,EAAE;AACzB,OAAI,EAAE,IAAI,KAAM,QAAO,EAAE;;;AAG3B,KAAI,CAAC,OAAO,SAAS,KAAK,EAAE;AAC3B,SAAO;AACP,SAAO;AACP,SAAO;AACP,SAAO;;CAER,MAAM,IAAI,OAAO;CACjB,MAAM,IAAI,OAAO;CACjB,MAAM,OAAO,KAAK,YAAY,OAAO;CACrC,MAAM,QAAQ,QAAQ,UAAU,UAAU,MAAM,UAAU,SAAS,QAAQ,UAAU,QAAQ,MAAM,SAAS,UAAU,QAAQ;CAC9H,IAAI,gBAAgB,OAAO,QAAQ;AACnC,KAAI,UAAU,OAAQ,gBAAe;AACrC,KAAI,UAAU,QAAS,gBAAe;CACtC,IAAI,gBAAgB,OAAO,QAAQ;AACnC,KAAI,QAAQ,kBAAkB,MAAO,gBAAe;AACpD,KAAI,QAAQ,kBAAkB,SAAU,gBAAe;AACvD,MAAK,MAAM,QAAQ,UAAU;AAC5B,OAAK,MAAM,KAAK,KAAK,OAAO;AAC3B,KAAE,KAAK;AACP,KAAE,KAAK;;AAER,OAAK,MAAM,QAAQ,KAAK,MAAO,MAAK,MAAM,KAAK,MAAM;AACpD,KAAE,KAAK;AACP,KAAE,KAAK;;;AAGT,SAAQ;AACR,SAAQ;AACR,SAAQ;AACR,SAAQ;CACR,MAAM,iBAAiB,EAAE;CACzB,MAAM,eAAe,EAAE;CACvB,MAAM,WAAW,EAAE;CACnB,MAAM,eAAe,EAAE;CACvB,MAAM,gBAAgB,EAAE;CACxB,MAAM,cAAc,EAAE;CACtB,MAAM,UAAU,EAAE;CAClB,MAAM,cAAc,EAAE;CACtB,MAAM,aAAa,GAAG,GAAG,MAAM;EAC9B,MAAM,QAAQ,cAAc,SAAS;AACrC,gBAAc,KAAK,EAAE,GAAG,EAAE,GAAG,WAAW,EAAE,GAAG,EAAE,GAAG,CAAC,UAAU;AAC7D,cAAY,KAAK,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;AAC1C,UAAQ,KAAK,GAAG,GAAG,GAAG,EAAE;AACxB,SAAO;;CAER,MAAM,eAAe,YAAY;EAChC,MAAM,MAAM,QAAQ,QAAQ,GAAG,MAAM;GACpC,MAAM,OAAO,SAAS,IAAI,KAAK,QAAQ;AACvC,UAAO,KAAK,MAAM,KAAK,IAAI,EAAE,GAAG,KAAK,IAAI,EAAE,EAAE,IAAI;IAChD;EACF,MAAM,QAAQ,IAAI;AAClB,MAAI,QAAQ,EAAG;EACf,MAAM,cAAc,EAAE;EACtB,MAAM,cAAc,IAAI,KAAK,GAAG,MAAM;GACrC,MAAM,OAAO,KAAK,IAAI,KAAK;GAC3B,MAAM,MAAM,KAAK,MAAM,KAAK,IAAI,EAAE,GAAG,KAAK,IAAI,EAAE,EAAE;AAClD,eAAY,KAAK,IAAI;AACrB,UAAO;IACN,IAAI,KAAK,IAAI,EAAE,KAAK;IACpB,GAAG,EAAE,KAAK,IAAI,EAAE,KAAK;IACrB;IACA;EACF,MAAM,YAAY,YAAY,QAAQ,GAAG,MAAM,IAAI,GAAG,EAAE;EACxD,MAAM,cAAc,EAAE;EACtB,MAAM,YAAY,EAAE;EACpB,IAAI,QAAQ;AACZ,OAAK,IAAI,IAAI,GAAG,IAAI,OAAO,KAAK;GAC/B,MAAM,WAAW,aAAa,IAAI,IAAI,SAAS;GAC/C,MAAM,WAAW,YAAY;GAC7B,MAAM,IAAI,QAAQ;GAClB,MAAM,KAAK,SAAS,IAAI,SAAS;GACjC,MAAM,KAAK,SAAS,IAAI,SAAS;GACjC,MAAM,WAAW,SAAS,IAAI,SAAS,IAAI,SAAS,IAAI,SAAS,KAAK,kBAAkB;IACvF,GAAG,KAAK,KAAK,MAAM,IAAI,GAAG;IAC1B,GAAG,KAAK,KAAK,MAAM,IAAI,GAAG;IAC1B,GAAG;AACJ,OAAI,YAAY,IAAI,EAAG,aAAY,KAAK,UAAU,KAAK,UAAU,IAAI,IAAI,UAAU,EAAE;QAChF;AACJ,cAAU,KAAK,UAAU,IAAI,IAAI,YAAY,UAAU,MAAM,IAAI,IAAI,EAAE;AACvE,gBAAY,KAAK,UAAU,IAAI,IAAI,YAAY,UAAU,EAAE;;AAE5D,YAAS,YAAY;;AAEtB,OAAK,IAAI,IAAI,GAAG,IAAI,OAAO,KAAK;GAC/B,MAAM,IAAI,YAAY;GACtB,MAAM,IAAI,WAAW,IAAI,KAAK;AAC9B,eAAY,KAAK,GAAG,IAAI,GAAG,EAAE;AAC7B,eAAY,KAAK,GAAG,IAAI,GAAG,IAAI,EAAE;;;AAGnC,MAAK,MAAM,QAAQ,UAAU;EAC5B,MAAM,QAAQ,KAAK;AACnB,MAAI,yBAAyB,MAAM,GAAG,EAAG,OAAM,SAAS;AACxD,OAAK,MAAM,QAAQ,KAAK,MAAO,KAAI,yBAAyB,KAAK,GAAG,EAAG,MAAK,SAAS;EACrF,MAAM,eAAe,EAAE;EACvB,MAAM,cAAc,EAAE;AACtB,OAAK,MAAM,KAAK,MAAO,cAAa,KAAK,EAAE,GAAG,EAAE,EAAE;AAClD,OAAK,MAAM,QAAQ,KAAK,OAAO;AAC9B,eAAY,KAAK,aAAa,SAAS,EAAE;AACzC,QAAK,MAAM,KAAK,KAAM,cAAa,KAAK,EAAE,GAAG,EAAE,EAAE;;EAElD,MAAM,YAAY,OAAO,cAAc,aAAa,EAAE;EACtD,MAAM,YAAY,aAAa,SAAS;EACxC,MAAM,eAAe,eAAe,SAAS;AAC7C,OAAK,IAAI,IAAI,GAAG,IAAI,WAAW,KAAK;GACnC,MAAM,KAAK,aAAa,IAAI;GAC5B,MAAM,KAAK,aAAa,IAAI,IAAI;AAChC,kBAAe,KAAK,IAAI,IAAI,CAAC,UAAU;AACvC,gBAAa,KAAK,GAAG,GAAG,GAAG;AAC3B,YAAS,MAAM,KAAK,SAAS,KAAK,KAAK,KAAK,SAAS,KAAK,GAAG;;AAE9D,OAAK,IAAI,IAAI,GAAG,IAAI,UAAU,QAAQ,KAAK,EAAG,cAAa,KAAK,eAAe,UAAU,IAAI,eAAe,UAAU,IAAI,IAAI,eAAe,UAAU,IAAI,GAAG;EAC9J,MAAM,cAAc,eAAe,SAAS;AAC5C,OAAK,IAAI,IAAI,GAAG,IAAI,WAAW,KAAK;GACnC,MAAM,KAAK,aAAa,IAAI;GAC5B,MAAM,KAAK,aAAa,IAAI,IAAI;AAChC,kBAAe,KAAK,IAAI,IAAI,UAAU;AACtC,gBAAa,KAAK,GAAG,GAAG,EAAE;AAC1B,YAAS,MAAM,KAAK,SAAS,KAAK,KAAK,KAAK,SAAS,KAAK,GAAG;;AAE9D,OAAK,IAAI,IAAI,GAAG,IAAI,UAAU,QAAQ,KAAK,EAAG,cAAa,KAAK,cAAc,UAAU,IAAI,cAAc,UAAU,IAAI,IAAI,cAAc,UAAU,IAAI,GAAG;AAC3J,cAAY,MAAM;AAClB,OAAK,MAAM,QAAQ,KAAK,MAAO,aAAY,KAAK;;CAEjD,MAAM,aAAa,mBAAmB,QAAQ,QAAQ,UAAU;CAChE,MAAM,YAAY,mBAAmB,QAAQ,cAAc,QAAQ,QAAQ,UAAU;CACrF,MAAM,gBAAgB;EACrB,MAAM;EACN,cAAc;EACd,SAAS,QAAQ,YAAY;EAC7B,WAAW,QAAQ,aAAa;EAChC,WAAW,QAAQ;EACnB,UAAU,QAAQ;EAClB,UAAU;EACV;CACD,MAAM,eAAe;EACpB,MAAM;EACN,cAAc;EACd,SAAS,QAAQ,YAAY;EAC7B,WAAW,QAAQ,aAAa;EAChC,WAAW,QAAQ;EACnB,UAAU,QAAQ;EAClB,UAAU;EACV;CACD,MAAM,SAAS,EAAE;AACjB,KAAI,aAAa,SAAS,EAAG,QAAO,KAAK;EACxC,IAAI;EACJ,MAAM;EACN,WAAW,IAAI,aAAa,eAAe;EAC3C,SAAS,IAAI,aAAa,aAAa;EACvC,KAAK,IAAI,aAAa,SAAS;EAC/B,SAAS,eAAe,SAAS,IAAI,QAAQ,IAAI,YAAY,aAAa,GAAG,IAAI,YAAY,aAAa;EAC1G,cAAc;EACd,CAAC;AACF,KAAI,YAAY,SAAS,EAAG,QAAO,KAAK;EACvC,IAAI;EACJ,MAAM;EACN,WAAW,IAAI,aAAa,cAAc;EAC1C,SAAS,IAAI,aAAa,YAAY;EACtC,KAAK,IAAI,aAAa,QAAQ;EAC9B,SAAS,cAAc,SAAS,IAAI,QAAQ,IAAI,YAAY,YAAY,GAAG,IAAI,YAAY,YAAY;EACvG,cAAc;EACd,CAAC;AACF,QAAO;EACN,WAAW;GACV,MAAM,iBAAiB,QAAQ;GAC/B;GACA,WAAW;IACV,kBAAkB;IAClB,iBAAiB;IACjB;GACD,YAAY,EAAE;GACd,QAAQ;IACP,KAAK;KACJ;KACA;KACA,CAAC;KACD;IACD,KAAK;KACJ;KACA;KACA;KACA;IACD,QAAQ;MACN,OAAO,QAAQ;MACf,OAAO,QAAQ;KAChB;KACA;IACD,MAAM;KACL;KACA;KACA;KACA;IACD,sBAAsB,KAAK,MAAM,GAAG,GAAG,MAAM,GAAG;IAChD;GACD;EACD,QAAQ;GACP;GACA;GACA;GACA;GACA,OAAO;GACP,QAAQ;GACR;GACA;EACD;;AAKF,IAAI,cAAc,MAAM;CACvB,YAAY,EAAE;CACd,UAAU,EAAE;CACZ,MAAM,EAAE;CACR,UAAU,EAAE;CACZ,OAAO,GAAG,GAAG,IAAI;AAChB,OAAK,UAAU,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG;AACrC,OAAK,QAAQ,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG;AACnC,OAAK,IAAI,KAAK,GAAG,IAAI,GAAG,GAAG;AAC3B,SAAO,KAAK,UAAU,SAAS,IAAI;;;;;;;CAOpC,KAAK,MAAM,MAAM,MAAM,OAAO,OAAO;AACpC,OAAK,IAAI,IAAI,GAAG,IAAI,MAAM,IAAK,MAAK,IAAI,IAAI,GAAG,IAAI,MAAM,KAAK;GAC7D,MAAM,IAAI,OAAO,KAAK,OAAO,KAAK;GAClC,MAAM,IAAI,IAAI;GACd,MAAM,IAAI,IAAI,OAAO;GACrB,MAAM,IAAI,IAAI;AACd,OAAI,KAAM,MAAK,QAAQ,KAAK,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE;OACxC,MAAK,QAAQ,KAAK,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE;;;CAG1C,MAAM,MAAM;EACX,MAAM,QAAQ,KAAK,UAAU,SAAS;AACtC,SAAO;GACN,IAAI,GAAG,KAAK;GACZ;GACA,WAAW,IAAI,aAAa,KAAK,UAAU;GAC3C,SAAS,IAAI,aAAa,KAAK,QAAQ;GACvC,KAAK,IAAI,aAAa,KAAK,IAAI;GAC/B,SAAS,QAAQ,QAAQ,IAAI,YAAY,KAAK,QAAQ,GAAG,IAAI,YAAY,KAAK,QAAQ;GACtF,cAAc,GAAG,KAAK;GACtB;;;AAGH,SAAS,UAAU,GAAG;CACrB,MAAM,MAAM,KAAK,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG;AACxC,QAAO,MAAM,QAAQ;EACpB,EAAE,KAAK;EACP,EAAE,KAAK;EACP,EAAE,KAAK;EACP,GAAG;EACH;EACA;EACA;EACA;;;;;;;AAOF,SAAS,YAAY,GAAG,GAAG,UAAU;AACpC,KAAI,KAAK,EAAG,QAAO,CAAC,CAAC,GAAG,EAAE;CAC1B,MAAM,QAAQ,IAAI;CAClB,MAAM,MAAM,EAAE;AACd,MAAK,IAAI,IAAI,GAAG,KAAK,UAAU,IAAK,KAAI,KAAK,CAAC,QAAQ,IAAI,KAAK,IAAI,IAAI,WAAW,KAAK,KAAK,EAAE,CAAC;AAC/F,MAAK,IAAI,IAAI,QAAQ,OAAO,IAAI,GAAG,KAAK,UAAU,IAAK,KAAI,KAAK,QAAQ,IAAI,KAAK,IAAI,IAAI,WAAW,KAAK,KAAK,EAAE,CAAC;AACjH,QAAO;;AAER,SAAS,WAAW,GAAG,IAAI;CAC1B,MAAM,KAAK,EAAE,QAAQ;CACrB,MAAM,KAAK,EAAE,SAAS;CACtB,MAAM,KAAK,EAAE,QAAQ;CACrB,MAAM,IAAI,KAAK,IAAI,GAAG,KAAK,IAAI,EAAE,UAAU,GAAG,IAAI,IAAI,GAAG,CAAC;CAC1D,MAAM,MAAM,KAAK,IAAI,GAAG,KAAK,MAAM,EAAE,YAAY,EAAE,CAAC;CACpD,MAAM,QAAQ,EAAE,SAAS;CACzB,MAAM,KAAK,KAAK;CAChB,MAAM,KAAK,KAAK;CAChB,MAAM,KAAK,KAAK;CAChB,MAAM,KAAK,YAAY,IAAI,GAAG,IAAI;CAClC,MAAM,KAAK,YAAY,IAAI,GAAG,IAAI;CAClC,MAAM,KAAK,YAAY,IAAI,GAAG,IAAI;CAClC,MAAM,QAAQ,EAAE,SAAS,KAAK,IAAI,SAAS,EAAE,SAAS;CACtD,MAAM,WAAW,MAAM,QAAQ,SAAS,IAAI;CAC5C,MAAM,SAAS,SAAS,eAAe;EACtC,MAAM,QAAQ;GACb,KAAK,IAAI,CAAC,IAAI,KAAK,IAAI,IAAI,QAAQ,GAAG,CAAC;GACvC,KAAK,IAAI,CAAC,IAAI,KAAK,IAAI,IAAI,QAAQ,GAAG,CAAC;GACvC,KAAK,IAAI,CAAC,IAAI,KAAK,IAAI,IAAI,QAAQ,GAAG,CAAC;GACvC;EACD,IAAI,IAAI,IAAI,IAAI,UAAU;GACzB,QAAQ,KAAK,MAAM;GACnB,QAAQ,KAAK,MAAM;GACnB,QAAQ,KAAK,MAAM;GACnB,CAAC,GAAG;AACL,MAAI,EAAE,OAAO,KAAK,EAAE,OAAO,KAAK,EAAE,OAAO,EAAG,KAAI;EAChD,MAAM,IAAI;GACT,MAAM,KAAK,EAAE,KAAK;GAClB,MAAM,KAAK,EAAE,KAAK;GAClB,MAAM,KAAK,EAAE,KAAK;GAClB;AACD,MAAI,UAAU,EAAG,QAAO;GACvB;GACA;GACA;EACD,MAAM,IAAI,QAAQ,EAAE,GAAG;AACvB,SAAO;GACN,GAAG;IACF,EAAE,KAAK;IACP,EAAE;IACF,EAAE,KAAK;IACP;GACD,GAAG,UAAU;IACZ,EAAE,KAAK;IACP,EAAE,KAAK,EAAE,KAAK,QAAQ,EAAE,KAAK,IAAI,EAAE,KAAK,QAAQ,EAAE,KAAK;IACvD,EAAE,KAAK;IACP,CAAC;GACF;;CAEF,MAAM,QAAQ;EACb;GACC,MAAM;GACN,MAAM;GACN,GAAG;GACH,GAAG;GACH;EACD;GACC,MAAM;GACN,MAAM;GACN,GAAG;GACH,GAAG;GACH;EACD;GACC,MAAM;GACN,MAAM;GACN,GAAG;GACH,GAAG;GACH;EACD;GACC,MAAM;GACN,MAAM;GACN,GAAG;GACH,GAAG;GACH;EACD;GACC,MAAM;GACN,MAAM;GACN,GAAG;GACH,GAAG;GACH;EACD;GACC,MAAM;GACN,MAAM;GACN,GAAG;GACH,GAAG;GACH;EACD;CACD,MAAM,OAAO;EACZ;EACA;EACA;EACA;CACD,MAAM,UAAU;EACf;EACA;EACA;EACA;AACD,MAAK,MAAM,KAAK,OAAO;EACtB,MAAM,KAAK,QAAQ,EAAE;EACrB,MAAM,KAAK,QAAQ,EAAE;EACrB,MAAM,aAAa;GAClB;GACA;GACA;GACA;AACD,aAAW,EAAE,QAAQ,EAAE;EACvB,MAAM,OAAO,GAAG,UAAU,SAAS;AACnC,OAAK,IAAI,IAAI,GAAG,IAAI,GAAG,QAAQ,IAAK,MAAK,IAAI,IAAI,GAAG,IAAI,GAAG,QAAQ,KAAK;GACvE,MAAM,UAAU;IACf;IACA;IACA;IACA;AACD,WAAQ,EAAE,QAAQ,EAAE,OAAO,KAAK,EAAE;AAClC,WAAQ,EAAE,KAAK,GAAG;AAClB,WAAQ,EAAE,KAAK,GAAG;GAClB,MAAM,EAAE,GAAG,MAAM,MAAM,SAAS,WAAW;AAC3C,MAAG,OAAO,GAAG,GAAG,EAAE,GAAG,KAAK,KAAK,EAAE,KAAK,KAAK,IAAI,GAAG,KAAK,KAAK,EAAE,KAAK,KAAK,EAAE,CAAC;;EAE5E,MAAM,UAAU,EAAE,IAAI,KAAK,MAAM,EAAE;AACnC,KAAG,KAAK,MAAM,GAAG,SAAS,GAAG,GAAG,SAAS,IAAI,SAAS,IAAI,QAAQ,EAAE,KAAK;;;AAG3E,SAAS,OAAO,GAAG,IAAI;CACtB,MAAM,MAAM,KAAK,IAAI,GAAG,KAAK,MAAM,EAAE,YAAY,GAAG,CAAC;CACrD,MAAM,QAAQ,KAAK,IAAI,GAAG,KAAK,MAAM,MAAM,EAAE,CAAC;AAC9C,MAAK,IAAI,IAAI,GAAG,KAAK,OAAO,KAAK;EAChC,MAAM,MAAM,IAAI,QAAQ,KAAK;AAC7B,OAAK,IAAI,IAAI,GAAG,KAAK,KAAK,KAAK;GAC9B,MAAM,QAAQ,IAAI,MAAM,KAAK,KAAK;GAClC,MAAM,IAAI;IACT,KAAK,IAAI,IAAI,GAAG,KAAK,IAAI,MAAM;IAC/B,CAAC,KAAK,IAAI,IAAI;IACd,KAAK,IAAI,IAAI,GAAG,KAAK,IAAI,MAAM;IAC/B;AACD,MAAG,OAAO;IACT,EAAE,KAAK,EAAE;IACT,EAAE,KAAK,EAAE;IACT,EAAE,KAAK,EAAE;IACT,EAAE,GAAG,CAAC,IAAI,KAAK,IAAI,MAAM,CAAC;;;AAG7B,IAAG,KAAK,GAAG,KAAK,MAAM;;AAEvB,SAAS,SAAS,GAAG,IAAI;CACxB,MAAM,MAAM,KAAK,IAAI,GAAG,KAAK,MAAM,EAAE,YAAY,GAAG,CAAC;CACrD,MAAM,OAAO,EAAE,aAAa,EAAE,UAAU;CACxC,MAAM,UAAU,EAAE,gBAAgB,EAAE,UAAU;CAC9C,MAAM,KAAK,EAAE,SAAS;CACtB,MAAM,OAAO,EAAE,SAAS,KAAK,UAAU,QAAQ,EAAE,SAAS;AAC1D,MAAK,IAAI,IAAI,GAAG,KAAK,GAAG,KAAK;EAC5B,MAAM,KAAK,MAAM,IAAI,OAAO;EAC5B,MAAM,IAAI,MAAM,IAAI,CAAC,KAAK;AAC1B,OAAK,IAAI,IAAI,GAAG,KAAK,KAAK,KAAK;GAC9B,MAAM,QAAQ,IAAI,MAAM,KAAK,KAAK;GAClC,MAAM,IAAI,KAAK,IAAI,MAAM;GACzB,MAAM,IAAI,KAAK,IAAI,MAAM;AACzB,MAAG,OAAO;IACT,IAAI;IACJ;IACA,IAAI;IACJ,EAAE,UAAU;IACZ;IACA,CAAC;IACD;IACA,CAAC,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC;;;AAGnB,IAAG,KAAK,GAAG,KAAK,EAAE;AAClB,KAAI,EAAE,UAAW;AACjB,MAAK,MAAM,CAAC,GAAG,IAAI,OAAO,CAAC;EAC1B,CAAC;EACD;EACA;EACA,EAAE;EACF;EACA;EACA;EACA,CAAC,EAAE;AACH,MAAI,MAAM,EAAG;EACb,MAAM,SAAS,GAAG,OAAO;GACxB;GACA;GACA;GACA,EAAE;GACF;GACA;GACA;GACA,EAAE,CAAC,IAAI,GAAG,CAAC;EACZ,MAAM,OAAO,GAAG,UAAU,SAAS;AACnC,OAAK,IAAI,IAAI,GAAG,KAAK,KAAK,KAAK;GAC9B,MAAM,QAAQ,IAAI,MAAM,KAAK,KAAK;GAClC,MAAM,IAAI,KAAK,IAAI,MAAM;GACzB,MAAM,IAAI,KAAK,IAAI,MAAM;AACzB,MAAG,OAAO;IACT,IAAI;IACJ;IACA,IAAI;IACJ,EAAE;IACF;IACA;IACA;IACA,EAAE,EAAE,IAAI,KAAK,IAAI,IAAI,KAAK,EAAE,CAAC;;AAE/B,OAAK,IAAI,IAAI,GAAG,IAAI,KAAK,IAAK,KAAI,KAAK,EAAG,IAAG,QAAQ,KAAK,QAAQ,OAAO,GAAG,OAAO,IAAI,EAAE;MACpF,IAAG,QAAQ,KAAK,QAAQ,OAAO,IAAI,GAAG,OAAO,EAAE;;;;AAItD,SAAS,0BAA0B,SAAS;CAC3C,MAAM,KAAK,IAAI,aAAa;AAC5B,KAAI,QAAQ,SAAS,aAAc,YAAW,SAAS,GAAG;UACjD,QAAQ,SAAS,SAAU,QAAO,SAAS,GAAG;UAC9C,QAAQ,SAAS,WAAY,UAAS,SAAS,GAAG;KACtD,OAAM,IAAI,MAAM,yBAAyB,QAAQ,OAAO;CAC7D,MAAM,OAAO,QAAQ;CACrB,MAAM,OAAO,GAAG,MAAM,KAAK;CAC3B,MAAM,WAAW;EAChB,MAAM,GAAG,KAAK;EACd,cAAc,mBAAmB,QAAQ,SAAS,UAAU;EAC5D,SAAS,QAAQ,YAAY;EAC7B,WAAW,QAAQ,aAAa;EAChC,WAAW,QAAQ;EACnB,UAAU,QAAQ;EAClB;CACD,MAAM,MAAM;EACX,OAAO;EACP,OAAO;EACP,OAAO;EACP;CACD,MAAM,MAAM;EACX,OAAO;EACP,OAAO;EACP,OAAO;EACP;CACD,MAAM,MAAM,KAAK;AACjB,MAAK,IAAI,IAAI,GAAG,IAAI,IAAI,QAAQ,KAAK,EAAG,MAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK;EACnE,MAAM,IAAI,IAAI,IAAI;AAClB,MAAI,IAAI,IAAI,GAAI,KAAI,KAAK;AACzB,MAAI,IAAI,IAAI,GAAI,KAAI,KAAK;;CAE1B,MAAM,OAAO;EACZ,IAAI,KAAK,IAAI;EACb,IAAI,KAAK,IAAI;EACb,IAAI,KAAK,IAAI;EACb;AACD,QAAO;EACN,MAAM,aAAa;EACnB,QAAQ,CAAC,KAAK;EACd,WAAW,GAAG,SAAS,OAAO,UAAU;EACxC,YAAY,EAAE;EACd,QAAQ;GACP;GACA;GACA,QAAQ;KACN,IAAI,KAAK,IAAI,MAAM;KACnB,IAAI,KAAK,IAAI,MAAM;KACnB,IAAI,KAAK,IAAI,MAAM;IACpB;GACD;GACA,sBAAsB,KAAK,MAAM,GAAG,KAAK,GAAG;GAC5C;EACD;;AAEF,MAAM,iCAAiC,IAAI,KAAK;;;;;AAKhD,SAAS,qBAAqB,SAAS;CACtC,MAAM,MAAM,KAAK,UAAU,QAAQ;CACnC,IAAI,QAAQ,eAAe,IAAI,IAAI;AACnC,KAAI,CAAC,OAAO;AACX,UAAQ,0BAA0B,QAAQ;AAC1C,MAAI,eAAe,OAAO,IAAK,gBAAe,OAAO;AACrD,iBAAe,IAAI,KAAK,MAAM;;AAE/B,QAAO;;;;;;AASR,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoGrB,SAAS,YAAY,KAAK;CACzB,MAAM,EAAE,KAAK,QAAQ;AACrB,QAAO;EACN;GACC,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ;EACD;GACC,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ;EACD;GACC,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ;EACD;GACC,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ;EACD;GACC,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ;EACD;GACC,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ;EACD;GACC,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ;EACD;GACC,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ;EACD;;;AAGF,SAAS,cAAc,KAAK,GAAG;CAC9B,MAAM,MAAM;EACX;EACA;EACA;EACA;CACD,MAAM,MAAM;EACX;EACA;EACA;EACA;AACD,MAAK,MAAM,CAAC,GAAG,GAAG,MAAM,YAAY,IAAI,EAAE;EACzC,MAAM,IAAI;GACT,EAAE,KAAK,IAAI,EAAE,KAAK,IAAI,EAAE,KAAK,IAAI,EAAE;GACnC,EAAE,KAAK,IAAI,EAAE,KAAK,IAAI,EAAE,KAAK,IAAI,EAAE;GACnC,EAAE,KAAK,IAAI,EAAE,KAAK,IAAI,EAAE,MAAM,IAAI,EAAE;GACpC;AACD,OAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK;AAC3B,OAAI,EAAE,KAAK,IAAI,GAAI,KAAI,KAAK,EAAE;AAC9B,OAAI,EAAE,KAAK,IAAI,GAAI,KAAI,KAAK,EAAE;;;AAGhC,QAAO;EACN;EACA;EACA;;AAEF,SAAS,eAAe,GAAG,GAAG;AAC7B,QAAO;EACN,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE;EAC5C,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE;EAC5C,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE;EAC7C;;;AAGF,SAAS,MAAM,KAAK;AACnB,QAAO,KAAK,IAAI,IAAI,GAAG,GAAG,MAAM;EAC/B;EACA;EACA;EACA,GAAG;EACH;EACA;EACA;EACA;;AAEF,SAAS,iBAAiB,OAAO,SAAS,WAAW,SAAS;AAC7D,KAAI,QAAQ,WAAW,EAAG,QAAO;CACjC,MAAM,MAAM,YAAY,UAAU,MAAM,UAAU;CAClD,MAAM,YAAY,QAAQ,QAAQ,YAAY;CAC9C,MAAM,SAAS,CAAC,GAAG,WAAW,GAAG,UAAU,QAAQ,YAAY,CAAC;AAChE,KAAI,MAAM,SAAS,eAAe;EACjC,MAAM,SAAS;GACd;GACA;GACA;GACA;AACD,OAAK,MAAM,KAAK,WAAW;AAC1B,UAAO,MAAM,EAAE,KAAK,UAAU;AAC9B,UAAO,MAAM,EAAE,KAAK,UAAU;AAC9B,UAAO,MAAM,EAAE,KAAK,UAAU;;EAE/B,MAAM,QAAQ,YAAY,SAAS,QAAQ,YAAY,eAAe,KAAK,EAAE,CAAC;EAC9E,MAAM,SAAS,YAAY,OAAO,OAAO,QAAQ,MAAM,IAAI,CAAC;EAC5D,IAAI,OAAO;EACX,IAAI,OAAO;EACX,IAAI,OAAO;EACX,IAAI,OAAO;AACX,OAAK,MAAM,KAAK,WAAW;GAC1B,MAAM,IAAI,eAAe,QAAQ,EAAE;AACnC,UAAO,KAAK,IAAI,MAAM,EAAE,GAAG;AAC3B,UAAO,KAAK,IAAI,MAAM,EAAE,GAAG;AAC3B,UAAO,KAAK,IAAI,MAAM,EAAE,GAAG;AAC3B,UAAO,KAAK,IAAI,MAAM,EAAE,GAAG;;EAE5B,IAAI,OAAO;EACX,IAAI,OAAO;AACX,OAAK,MAAM,KAAK,QAAQ;GACvB,MAAM,IAAI,eAAe,QAAQ,EAAE,CAAC;AACpC,UAAO,KAAK,IAAI,MAAM,EAAE;AACxB,UAAO,KAAK,IAAI,MAAM,EAAE;;EAEzB,MAAM,OAAO,KAAK,IAAI,OAAO,MAAM,OAAO,KAAK,GAAG,KAAK,OAAO;EAC9D,MAAM,MAAM,OAAO,QAAQ;EAC3B,MAAM,MAAM,OAAO,QAAQ;EAC3B,MAAM,WAAW,KAAK,IAAI,KAAK,OAAO,QAAQ,IAAI;EAClD,MAAM,SAAS,YAAY,aAAa,KAAK,MAAM,KAAK,MAAM,KAAK,MAAM,KAAK,MAAM,OAAO,UAAU,OAAO,SAAS;AACrH,SAAO;GACN,UAAU,YAAY,SAAS,QAAQ,OAAO;GAC9C,gBAAgB,IAAI,OAAO;GAC3B;;CAEF,MAAM,MAAM,MAAM;CAClB,MAAM,OAAO,YAAY,OAAO,KAAK,YAAY,IAAI,KAAK,IAAI,EAAE,MAAM,IAAI,CAAC;CAC3E,IAAI,OAAO;CACX,IAAI,MAAM;CACV,IAAI,aAAa;AACjB,MAAK,MAAM,KAAK,QAAQ;EACvB,MAAM,IAAI,eAAe,MAAM,EAAE,CAAC;AAClC,MAAI,IAAI,GAAG;AACV,UAAO,KAAK,IAAI,MAAM,EAAE;AACxB,SAAM,KAAK,IAAI,KAAK,EAAE;;;AAGxB,MAAK,MAAM,KAAK,UAAW,cAAa,KAAK,IAAI,YAAY,eAAe,MAAM,EAAE,CAAC,GAAG;AACxF,KAAI,CAAC,OAAO,SAAS,KAAK,IAAI,OAAO,EAAG,QAAO;AAC/C,QAAO,KAAK,IAAI,GAAG,OAAO,GAAG;AAC7B,OAAM,MAAM,OAAO;CACnB,MAAM,SAAS,KAAK,IAAI,KAAK,KAAK,MAAM,SAAS,MAAM,EAAE,GAAG,KAAK,KAAK;CACtE,MAAM,OAAO,YAAY,YAAY,QAAQ,GAAG,MAAM,IAAI;AAC1D,QAAO;EACN,UAAU,YAAY,SAAS,MAAM,KAAK;EAC1C,gBAAgB,IAAI,KAAK,IAAI,SAAS,EAAE,GAAG,KAAK,IAAI,YAAY,KAAK,GAAG;EACxE;;;;;;;;AAWF,MAAM,aAAa;EACjB,eAAe;;;;;;;;;;;;;EAaf,YAAY,GAAG,EAAE,CAAC;;EAElB,mBAAmB;;EAEnB,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4LnB,MAAM,kBAAkB;;AAExB,IAAI,iBAAiB,MAAM;CAC1B;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA,iCAAiC,IAAI,SAAS;CAC9C,YAAY,IAAI,aAAa,KAAK,sBAAsB;CACxD,YAAY,QAAQ,QAAQ,aAAa,cAAc,cAAc,cAAc,GAAG;AACrF,OAAK,SAAS;AACd,OAAK,YAAY,IAAI,YAAY,KAAK,yBAAyB,GAAG,eAAe,UAAU,eAAe,SAAS;AACnH,OAAK,eAAe,IAAI,WAAW,OAAO,eAAe,SAAS,eAAe,SAAS;EAC1F,MAAMA,WAAS,OAAO,mBAAmB;GACxC,OAAO;GACP,MAAM;GACN,CAAC;AACF,OAAK,cAAc,OAAO,sBAAsB;GAC/C,OAAO;GACP,SAAS,CAAC;IACT,SAAS;IACT,YAAY,eAAe,SAAS,eAAe;IACnD,QAAQ,EAAE,MAAM,WAAW;IAC3B,EAAE,iBAAiB,EAAE,CAAC;GACvB,CAAC;AACF,OAAK,aAAa,OAAO,sBAAsB;GAC9C,OAAO;GACP,SAAS,CAAC;IACT,SAAS;IACT,YAAY,eAAe;IAC3B,SAAS,EAAE,YAAY,sBAAsB;IAC7C,EAAE;IACF,SAAS;IACT,YAAY,eAAe;IAC3B,SAAS,EAAE,YAAY,QAAQ;IAC/B,CAAC;GACF,CAAC;EACF,MAAM,OAAO;GACZ,OAAO;GACP,QAAQ,OAAO,qBAAqB,EAAE,kBAAkB;IACvD;IACA,KAAK;IACL,KAAK;IACL;IACA,EAAE,CAAC;GACJ,QAAQ;IACP;IACA,YAAY;IACZ,SAAS,CAAC;KACT,aAAa,kBAAkB;KAC/B,UAAU;KACV,YAAY;MACX;OACC,gBAAgB;OAChB,QAAQ;OACR,QAAQ;OACR;MACD;OACC,gBAAgB;OAChB,QAAQ;OACR,QAAQ;OACR;MACD;OACC,gBAAgB;OAChB,QAAQ;OACR,QAAQ;OACR;MACD;OACC,gBAAgB;OAChB,QAAQ;OACR,QAAQ;OACR;MACD;OACC,gBAAgB;OAChB,QAAQ;OACR,QAAQ;OACR;MACD;OACC,gBAAgB;OAChB,QAAQ;OACR,QAAQ;OACR;MACD;KACD,CAAC;IACF;GACD;GACA;GACA,cAAc;IACb,QAAQ;IACR,mBAAmB;IACnB,cAAc;IACd;GACD,WAAW;IACV,UAAU;IACV,UAAU;IACV;GACD,aAAa,EAAE,OAAO,aAAa;GACnC;EACD,MAAM,EAAE,QAAQ,QAAQ,oBAAoB,QAAQ,KAAK;AACzD,OAAK,iBAAiB;AACtB,OAAK,cAAc;AACnB,OAAK,gBAAgB,IAAI,sBAAsB,QAAQ,KAAK;;CAE7D,aAAa;AACZ,OAAK,UAAU,OAAO;AACtB,OAAK,aAAa,OAAO;;CAE1B,KAAK,MAAM,iBAAiB,iBAAiB,MAAM,WAAW,eAAe,MAAM,SAAS,OAAO,WAAW,OAAO;AACpH,MAAI,kBAAkB,KAAK,CAAC,KAAK,aAAa,CAAC,KAAK,SAAU;AAC9D,OAAK,UAAU,IAAI,KAAK,aAAa,EAAE;AACvC,OAAK,UAAU,IAAI,KAAK,cAAc,GAAG;AACzC,OAAK,UAAU,MAAM,KAAK;AAC1B,OAAK,UAAU,MAAM,KAAK;AAC1B,OAAK,UAAU,MAAM,KAAK,WAAW,IAAI;AACzC,OAAK,UAAU,MAAM,KAAK;AAC1B,OAAK,UAAU,IAAI,mBAAmB,KAAK,EAAE,GAAG;AAChD,oBAAkB,MAAM,KAAK,WAAW,GAAG;EAC3C,MAAM,cAAc,KAAK,UAAU,UAAU,KAAK,QAAQ,KAAK,UAAU;EACzE,MAAM,iBAAiB,KAAK,OAAO,gBAAgB;GAClD,QAAQ,KAAK;GACb,SAAS,CAAC;IACT,SAAS;IACT,UAAU,EAAE,QAAQ,aAAa;IACjC,EAAE;IACF,SAAS;IACT,UAAU,KAAK,OAAO,YAAY,IAAI,iBAAiB,KAAK,OAAO;IACnE,CAAC;GACF,CAAC;EACF,MAAM,iBAAiB,KAAK,aAAa,UAAU,KAAK,QAAQ,UAAU,SAAS,GAAG,gBAAgB,gBAAgB,CAAC;AACvH,OAAK,YAAY,WAAW,KAAK,cAAc,IAAI,OAAO,GAAG,SAAS,KAAK,cAAc,KAAK,eAAe;AAC7G,OAAK,aAAa,GAAG,gBAAgB;AACrC,OAAK,aAAa,GAAG,eAAe;AACpC,OAAK,aAAa,GAAG,KAAK,cAAc,KAAK,WAAW,KAAK,SAAS,CAAC;AACvE,OAAK,aAAa,GAAG,gBAAgB;AACrC,OAAK,gBAAgB,GAAG,eAAe;AACvC,OAAK,KAAK,GAAG,cAAc;;;CAG5B,cAAc,QAAQ,OAAO;EAC5B,IAAI,YAAY,KAAK,eAAe,IAAI,OAAO;AAC/C,MAAI,CAAC,WAAW;AACf,eAAY,KAAK,OAAO,gBAAgB;IACvC,QAAQ,KAAK;IACb,SAAS,CAAC;KACT,SAAS;KACT,UAAU,OAAO,YAAY;KAC7B,EAAE;KACF,SAAS;KACT,UAAU,MAAM,YAAY;KAC5B,CAAC;IACF,CAAC;AACF,QAAK,eAAe,IAAI,QAAQ,UAAU;;AAE3C,SAAO;;CAER,UAAU;AACT,OAAK,UAAU,SAAS;AACxB,OAAK,aAAa,SAAS;;;AAM7B,MAAM,gBAAgB;CACrB,QAAQ;CACR,OAAO;CACP,QAAQ;CACR;;;;;;AAMD,MAAM,kBAAkB;AACxB,IAAI,aAAa,MAAM;CACtB;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA,8BAA8B,IAAI,uBAAuB;CACzD,eAAe,IAAI,cAAc;CACjC,eAAe;CACf,qBAAqB;CACrB,mBAAmB;CACnB,yBAAyB;CACzB,iBAAiB;CACjB,aAAa;;CAEb,gBAAgB;CAChB,oBAAoB,IAAI,aAAa,GAAG;CACxC,mCAAmC,IAAI,SAAS;CAChD,mCAAmC,IAAI,SAAS;CAChD,mCAAmC,IAAI,SAAS;;CAEhD,6BAA6B,IAAI,KAAK;CACtC,iBAAiB;CACjB,gBAAgB;CAChB,2BAA2B;CAC3B,gBAAgB;CAChB,6BAA6B,IAAI,SAAS;CAC1C,gBAAgB;CAChB,mBAAmB;;;;;;CAMnB;CACA,YAAY,QAAQ,QAAQ,cAAc,GAAG;AAC5C,OAAK,SAAS;AACd,OAAK,SAAS;AACd,OAAK,cAAc;AACnB,OAAK,iBAAiB,IAAI,eAAe,QAAQ,QAAQ,eAAe,YAAY;AACpF,OAAK,iBAAiB,IAAI,eAAe,QAAQ,QAAQ,eAAe,KAAK,eAAe,cAAc,KAAK,eAAe,cAAc,YAAY;AACxJ,OAAK,iBAAiB,IAAI,eAAe,QAAQ,QAAQ,eAAe,KAAK,eAAe,cAAc,KAAK,eAAe,cAAc,YAAY;AACxJ,OAAK,0BAA0B,IAAI,wBAAwB,OAAO;AAClE,OAAK,aAAa,IAAI,WAAW,KAAK,eAAe,UAAU,eAAe,SAAS;AACvF,OAAK,aAAa,IAAI,WAAW,0BAA0B,eAAe,UAAU,eAAe,SAAS;EAC5G,MAAM,YAAY,OAAO,mBAAmB;GAC3C,OAAO;GACP,MAAM;GACN,CAAC;AACF,OAAK,qBAAqB,OAAO,sBAAsB;GACtD,OAAO;GACP,SAAS;IACR;KACC,SAAS;KACT,YAAY,eAAe,SAAS,eAAe;KACnD,QAAQ,EAAE,MAAM,WAAW;KAC3B;IACD;KACC,SAAS;KACT,YAAY,eAAe;KAC3B,SAAS,EAAE,MAAM,aAAa;KAC9B;IACD;KACC,SAAS;KACT,YAAY,eAAe;KAC3B,SAAS,EAAE,YAAY,SAAS;KAChC;IACD;KACC,SAAS;KACT,YAAY,eAAe;KAC3B,SAAS,EAAE,YAAY,SAAS;KAChC;IACD;GACD,CAAC;AACF,OAAK,cAAc,OAAO,qBAAqB;GAC9C,OAAO;GACP,QAAQ,OAAO,qBAAqB,EAAE,kBAAkB,CAAC,KAAK,mBAAmB,EAAE,CAAC;GACpF,QAAQ;IACP,QAAQ;IACR,YAAY;IACZ;GACD,UAAU;IACT,QAAQ;IACR,YAAY;IACZ,SAAS,CAAC,EAAE,QAAQ,CAAC;IACrB;GACD,WAAW,EAAE,UAAU,iBAAiB;GACxC,CAAC;;CAEH,aAAa;AACZ,OAAK,eAAe,YAAY;AAChC,OAAK,WAAW,OAAO;AACvB,OAAK,iBAAiB;AACtB,OAAK,mBAAmB;AACxB,OAAK,WAAW,OAAO;AACvB,OAAK,eAAe,YAAY;AAChC,OAAK,eAAe,YAAY;AAChC,OAAK,eAAe,YAAY;AAChC,OAAK,wBAAwB,YAAY;;CAE1C,wBAAwB,OAAO,QAAQ;AACtC,MAAI,CAAC,KAAK,gBAAgB,KAAK,aAAa,UAAU,SAAS,KAAK,aAAa,WAAW,QAAQ;AACnG,QAAK,cAAc,SAAS;AAC5B,QAAK,eAAe,KAAK,OAAO,cAAc;IAC7C,OAAO;IACP,MAAM;KACL;KACA;KACA;IACD,QAAQ;IACR,aAAa,KAAK;IAClB,OAAO,gBAAgB;IACvB,CAAC;;AAEH,SAAO,KAAK;;CAEb,uBAAuB,SAAS,OAAO,QAAQ,OAAO,QAAQ;AAC7D,MAAI,WAAW,QAAQ,UAAU,SAAS,QAAQ,WAAW,OAAQ,QAAO;AAC5E,WAAS,SAAS;AAClB,SAAO,KAAK,OAAO,cAAc;GAChC;GACA,MAAM;IACL;IACA;IACA;GACD;GACA,aAAa,KAAK;GAClB,OAAO,gBAAgB;GACvB,CAAC;;;CAGH,YAAY;AACX,SAAO,KAAK;;CAEb,sBAAsB,OAAO,QAAQ;AACpC,MAAI,CAAC,KAAK,cAAc,KAAK,WAAW,UAAU,SAAS,KAAK,WAAW,WAAW,QAAQ;AAC7F,QAAK,YAAY,SAAS;AAC1B,QAAK,aAAa,KAAK,OAAO,cAAc;IAC3C,OAAO;IACP,MAAM;KACL;KACA;KACA;IACD,QAAQ;IACR,OAAO,gBAAgB,oBAAoB,gBAAgB;IAC3D,CAAC;;AAEH,SAAO,KAAK;;CAEb,8BAA8B,OAAO,QAAQ;AAC5C,MAAI,CAAC,KAAK,sBAAsB,KAAK,mBAAmB,UAAU,SAAS,KAAK,mBAAmB,WAAW,QAAQ;AACrH,QAAK,oBAAoB,SAAS;AAClC,QAAK,qBAAqB,KAAK,OAAO,cAAc;IACnD,OAAO;IACP,MAAM;KACL;KACA;KACA;IACD,QAAQ;IACR,OAAO,gBAAgB,oBAAoB,gBAAgB;IAC3D,CAAC;;AAEH,SAAO,KAAK;;CAEb,mBAAmB,QAAQ,cAAc,eAAe,SAAO,GAAG;AACjE,MAAI,KAAK,kBAAkB,KAAK,oBAAoB,KAAK,eAAe,IAAI,OAAO,OAAO,IAAI,MAAM,KAAK,eAAe,IAAI,OAAO,OAAO,IAAI,MAAM,KAAK,eAAe,IAAI,OAAO,OAAO,IAAI,MAAM,KAAK,eAAe,OAAO,OAAO,OAAO,OAAO,MAAM,KAAK,eAAe,OAAO,OAAO,OAAO,OAAO,MAAM,KAAK,eAAe,OAAO,OAAO,OAAO,OAAO,MAAM,KAAK,eAAe,GAAG,OAAO,OAAO,GAAG,MAAM,KAAK,eAAe,GAAG,OAAO,OAAO,GAAG,MAAM,KAAK,eAAe,GAAG,OAAO,OAAO,GAAG,MAAM,KAAK,eAAe,QAAQ,OAAO,OAAO,KAAK,eAAe,SAAS,OAAO,QAAQ,KAAK,eAAe,QAAQ,OAAO,IAAK,QAAO,KAAK;EAC1nB,MAAM,OAAO,SAAS,kBAAkB,OAAO;EAC/C,MAAM,OAAO,SAAS,wBAAwB,OAAO;EACrD,MAAM,WAAW,SAAS,4BAA4B,OAAO;EAC7D,MAAM,cAAc,YAAY,OAAO,SAAS,IAAI,YAAY,UAAU;AAC1E,OAAK,kBAAkB,IAAI,MAAM,EAAE;AACnC,OAAK,kBAAkB,IAAI,MAAM,GAAG;AACpC,OAAK,kBAAkB,IAAI,UAAU,GAAG;AACxC,OAAK,kBAAkB,IAAI,aAAa,GAAG;AAC3C,OAAK,kBAAkB,MAAM,OAAO,IAAI;AACxC,OAAK,kBAAkB,MAAM,OAAO,IAAI;AACxC,OAAK,kBAAkB,MAAM,OAAO,IAAI;AACxC,OAAK,kBAAkB,MAAM,OAAO;EACpC,MAAM,MAAM,YAAY,UAAU,YAAY,SAAS,OAAO,QAAQ,OAAO,IAAI,CAAC;AAClF,OAAK,kBAAkB,MAAM,IAAI;AACjC,OAAK,kBAAkB,MAAM,IAAI;AACjC,OAAK,kBAAkB,MAAM,IAAI;AACjC,OAAK,kBAAkB,MAAM,OAAO;AACpC,OAAK,kBAAkB,MAAM,OAAO,iBAAiB;AACrD,OAAK,kBAAkB,MAAM,OAAO,SAAS;AAC7C,OAAK,kBAAkB,MAAM,OAAO,iBAAiB;AACrD,OAAK,kBAAkB,MAAM,OAAO,kBAAkB,KAAK,IAAI,IAAI;AACnE,OAAK,kBAAkB,MAAM;AAC7B,OAAK,kBAAkB,MAAM;AAC7B,OAAK,kBAAkB,MAAMpB;AAC7B,OAAK,kBAAkB,MAAM;EAC7B,MAAM,SAAS,KAAK,WAAW,UAAU,KAAK,QAAQ,KAAK,kBAAkB;AAC7E,OAAK,iBAAiB;AACtB,OAAK,mBAAmB;AACxB,SAAO;;CAER,sBAAsB,cAAc;AACnC,SAAO,KAAK,4BAA4B,aAAa,KAAK,QAAQ,KAAK,eAAe,cAAc,aAAa;;CAElH,wBAAwB,QAAQ,OAAO;EACtC,MAAM,aAAa,QAAQ,mBAAmB,UAAU,EAAE,EAAE,OAAO,aAAa,OAAO,OAAO;AAC9F,SAAO,KAAK,WAAW,UAAU,KAAK,QAAQ,WAAW;;;CAG1D,sBAAsB,cAAc,YAAY;AAC/C,OAAK,kBAAkB,KAAK,OAAO,cAAc;GAChD,OAAO;GACP,SAAS;GACT,WAAW;GACX,WAAW;GACX,cAAc;GACd,cAAc;GACd,CAAC;AACF,OAAK,6BAA6B,KAAK,OAAO,cAAc;GAC3D,OAAO;GACP,MAAM;IACL,OAAO;IACP,QAAQ;IACR;GACD,QAAQ;GACR,OAAO,gBAAgB,kBAAkB,gBAAgB;GACzD,CAAC;EACF,MAAM,MAAM,cAAc,KAAK,gBAAgB,KAAK,gBAAgB,KAAK;AACzE,SAAO,KAAK,OAAO,gBAAgB;GAClC,OAAO;GACP,QAAQ,KAAK,eAAe;GAC5B,SAAS;IACR;KACC,SAAS;KACT,UAAU,EAAE,QAAQ,cAAc;KAClC;IACD;KACC,SAAS;KACT,UAAU,IAAI,YAAY;KAC1B;IACD;KACC,SAAS;KACT,UAAU,KAAK;KACf;IACD;GACD,CAAC;;;CAGH,SAAS,MAAM;EACd,IAAI,MAAM,KAAK,WAAW,IAAI,KAAK;AACnC,MAAI,CAAC,KAAK;GACT,MAAM,MAAM;IACX;IACA;IACA;IACA;GACD,MAAM,MAAM;IACX;IACA;IACA;IACA;GACD,MAAM,IAAI,KAAK;AACf,QAAK,IAAI,IAAI,GAAG,IAAI,IAAI,EAAE,QAAQ,KAAK,EAAG,MAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK;IACrE,MAAM,IAAI,EAAE,IAAI;AAChB,QAAI,IAAI,IAAI,GAAI,KAAI,KAAK;AACzB,QAAI,IAAI,IAAI,GAAI,KAAI,KAAK;;AAE1B,SAAM,OAAO,SAAS,IAAI,GAAG,GAAG;IAC/B;IACA;IACA,GAAG;IACH,KAAK;KACJ;KACA;KACA;KACA;IACD,KAAK;KACJ;KACA;KACA;KACA;IACD;AACD,QAAK,WAAW,IAAI,MAAM,IAAI;;AAE/B,SAAO;;;CAGR,YAAY,MAAM;AACjB,MAAI,KAAK,SAAS,OAAQ,QAAO,cAAc,KAAK,SAAS,KAAK,KAAK,EAAE,KAAK,gBAAgB,KAAK,KAAK,CAAC;AACzG,SAAO,cAAc;GACpB,KAAK;IACJ;IACA;IACA;IACA;GACD,KAAK;IACJ;IACA;IACA;IACA;GACD,EAAE,KAAK,gBAAgB,KAAK,KAAK,CAAC;;;;;;;CAOpC,gBAAgB,SAAS,OAAO,YAAY,SAAS,WAAW,UAAU,EAAE,EAAE;EAC7E,MAAM,OAAO,MAAM,aAAa,MAAM;AACtC,MAAI,SAAS,iBAAiB,SAAS,OAAQ,QAAO;EACtD,MAAM,YAAY,QAAQ,aAAa,MAAM;EAC7C,MAAM,WAAW;GAChB,UAAU,QAAQ;GAClB,UAAU,QAAQ;GAClB,UAAU,QAAQ;GAClB;EACD,MAAM,YAAY;GACjB,UAAU,UAAU;GACpB,UAAU,UAAU;GACpB,UAAU,UAAU;GACpB;EACD,MAAM,UAAU,QAAQ,WAAW;EACnC,MAAM,eAAe,QAAQ,KAAK,MAAM,KAAK,YAAY,EAAE,CAAC;EAC5D,MAAM,UAAU,iBAAiB;GAChC,MAAM;GACN;GACA;GACA,OAAO,MAAM;GACb,EAAE,cAAc,WAAW,QAAQ;AACpC,MAAI,CAAC,QAAS,QAAO;AACrB,MAAI,CAAC,KAAK,iBAAiB,KAAK,cAAc,UAAU,SAAS;AAChE,QAAK,eAAe,SAAS;AAC7B,QAAK,gBAAgB,KAAK,OAAO,cAAc;IAC9C,OAAO;IACP,MAAM;KACL,OAAO;KACP,QAAQ;KACR;IACD,QAAQ;IACR,OAAO,gBAAgB,oBAAoB,gBAAgB;IAC3D,CAAC;;EAEH,MAAM,WAAW,IAAI,aAAa,GAAG;AACrC,WAAS,IAAI,QAAQ,UAAU,GAAG;AAClC,WAAS,IAAI,QAAQ,UAAU,EAAE;AACjC,WAAS,KAAK;AACd,WAAS,IAAI,QAAQ,UAAU,GAAG;AAClC,WAAS,MAAM,SAAS;AACxB,WAAS,MAAM,SAAS;AACxB,WAAS,MAAM,SAAS;AACxB,WAAS,MAAM,UAAU;AACzB,WAAS,MAAM,UAAU;AACzB,WAAS,MAAM,UAAU;AACzB,WAAS,MAAM;AACf,WAAS,MAAM;EACf,MAAM,oBAAoB,KAAK,sBAAsB,KAAK,WAAW,UAAU,KAAK,QAAQ,SAAS,CAAC;EACtG,MAAM,OAAO,QAAQ,gBAAgB;GACpC,OAAO;GACP,kBAAkB,EAAE;GACpB,wBAAwB;IACvB,MAAM,KAAK,cAAc,YAAY;IACrC,iBAAiB;IACjB,aAAa;IACb,cAAc;IACd;GACD,CAAC;EACF,MAAM,UAAU,KAAK,aAAa,WAAW,KAAK,OAAO;AACzD,OAAK,MAAM,KAAK,QAAS,KAAI,EAAE,SAAS,QAAQ;GAC/C,MAAM,IAAI,KAAK,gBAAgB,EAAE,KAAK;AACtC,QAAK,eAAe,WAAW,MAAM,mBAAmB,EAAE,WAAW,KAAK,uBAAuB,EAAE,KAAK,EAAE;IACzG,aAAa;IACb,cAAc,EAAE,KAAK,gBAAgB,QAAQ,oBAAoB,EAAE;IACnE,WAAW,EAAE,KAAK;IAClB,kBAAkB,EAAE,KAAK;IACzB,CAAC;SACI;GACN,MAAM,IAAI,KAAK,gBAAgB,EAAE,KAAK;AACtC,QAAK,eAAe,WAAW,MAAM,mBAAmB,EAAE,SAAS,SAAS;IAC3E,aAAa;IACb,cAAc;IACd,OAAO,EAAE,KAAK;IACd,QAAQ,EAAE,KAAK;IACf,eAAe,EAAE,KAAK;IACtB,SAAS,EAAE,KAAK;IAChB,WAAW,EAAE,KAAK;IAClB,CAAC;;AAEH,OAAK,KAAK;AACV,SAAO;GACN,QAAQ,QAAQ;GAChB;GACA;GACA,UAAU,QAAQ,YAAY,MAAM,kBAAkB;GACtD,MAAM,SAAS,gBAAgB,OAAO;GACtC,cAAc,QAAQ,iBAAiB;GACvC,UAAU,QAAQ,YAAY,MAAM,kBAAkB;GACtD;;CAEF,UAAU,SAAS,iBAAiB,cAAc,eAAe,QAAQ,SAAS,SAAS,aAAa;EACvG,GAAG;EACH,GAAG;EACH,GAAG;EACH,GAAG;EACH,EAAE,uBAAuB,QAAQ,OAAO,WAAW,OAAO;EAC1D,MAAM,WAAW,KAAK,wBAAwB,cAAc,cAAc;EAC1E,MAAM,eAAe,KAAK,mBAAmB,QAAQ,cAAc,cAAc;EACjF,MAAM,kBAAkB,KAAK,sBAAsB,aAAa;EAChE,MAAM,eAAe,KAAK,wBAAwB,QAAQ,MAAM;EAChE,MAAM,kBAAkB,KAAK,sBAAsB,cAAc,QAAQ,OAAO,OAAO,CAAC;EACxF,MAAM,OAAO,KAAK,cAAc;AAChC,MAAI,QAAQ,WAAW,OAAQ,OAAM,IAAI,MAAM,kFAAkF;EACjI,MAAM,UAAU,MAAM,SAAS,YAAY,qBAAqB,UAAU;GACzE,MAAM,QAAQ,YAAY;GAC1B,eAAe;GACf,QAAQ;GACR,SAAS;GACT;GACA,GAAG;GACH;GACA,QAAQ;GACR,SAAS;GACT;GACA;AACD,MAAI,KAAM,MAAK,mBAAmB,KAAK,uBAAuB,KAAK,kBAAkB,uBAAuB,KAAK,QAAQ,cAAc,cAAc;EACrJ,MAAM,mBAAmB,CAAC,OAAO,iBAAiB,OAAO,KAAK,mBAAmB,MAAM,YAAY,OAAO,CAAC;AAC3G,MAAI,uBAAuB;AAC1B,OAAI,KAAM,MAAK,yBAAyB,KAAK,uBAAuB,KAAK,wBAAwB,6BAA6B,eAAe,cAAc,cAAc;AACzK,oBAAiB,KAAK,OAAO,uBAAuB,OAAO,KAAK,yBAAyB,MAAM;IAC9F,GAAG,OAAO;IACV,GAAG;IACH,GAAG;IACH,GAAG;IACH,EAAE,QAAQ,CAAC;;AAEb,OAAK,gBAAgB;AACrB,MAAI,UAAU;AACb,QAAK,aAAa,KAAK,sBAAsB,cAAc,cAAc;AACzE,OAAI,KAAM,MAAK,iBAAiB,KAAK,uBAAuB,KAAK,gBAAgB,qBAAqB,eAAe,cAAc,cAAc;AACjJ,oBAAiB,KAAK,OAAO,KAAK,WAAW,YAAY,EAAE,OAAO,KAAK,iBAAiB,MAAM;IAC7F,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,EAAE,QAAQ,CAAC;;AAEb,SAAO;GACN,MAAM,QAAQ,gBAAgB;IAC7B;IACA,wBAAwB;KACvB,MAAM,SAAS,YAAY;KAC3B,iBAAiB;KACjB,aAAa;KACb,cAAc,OAAO,YAAY;KACjC;IACD,CAAC;GACF;GACA;GACA;GACA;;;;;;CAMF,gBAAgB,MAAM;AACrB,MAAI,KAAK,YAAa,QAAO,KAAK;EAClC,MAAM,EAAE,UAAU,OAAO,QAAQ,WAAW;GAC3C;GACA;GACA;GACA,EAAE,QAAQ;GACV;GACA;GACA;GACA,EAAE,SAAS,CAAC,IAAI,GAAG,KAAK;EACzB,IAAI,IAAI,YAAY,UAAU;AAC9B,MAAI,YAAY,SAAS,GAAG,YAAY,UAAU,SAAS,IAAI,SAAS,IAAI,SAAS,GAAG,CAAC;EACzF,MAAM,QAAQ,SAAS,KAAK,KAAK,KAAK;EACtC,MAAM,QAAQ,SAAS,KAAK,KAAK,KAAK;EACtC,MAAM,QAAQ,SAAS,KAAK,KAAK,KAAK;AACtC,MAAI,UAAU,EAAG,KAAI,YAAY,SAAS,GAAG,YAAY,QAAQ,MAAM,CAAC;AACxE,MAAI,UAAU,EAAG,KAAI,YAAY,SAAS,GAAG,YAAY,QAAQ,MAAM,CAAC;AACxE,MAAI,UAAU,EAAG,KAAI,YAAY,SAAS,GAAG,YAAY,QAAQ,MAAM,CAAC;EACxE,MAAM,KAAK,QAAQ,MAAM;EACzB,MAAM,KAAK,SAAS,MAAM;EAC1B,MAAM,KAAK,MAAM;AACjB,MAAI,YAAY,SAAS,GAAG,YAAY,MAAM,IAAI,IAAI,GAAG,CAAC;EAC1D,MAAM,SAAS,KAAK,OAAO;EAC3B,MAAM,SAAS,KAAK,OAAO;AAC3B,MAAI,WAAW,KAAK,WAAW,EAAG,KAAI,YAAY,SAAS,GAAG,YAAY,UAAU,QAAQ,QAAQ,EAAE,CAAC;AACvG,SAAO;;;;;;;;;CASR,aAAa,MAAM,iBAAiB,iBAAiB,SAAS,MAAM,YAAY,GAAG,SAAS,OAAO;EAClG,MAAM,EAAE,OAAO,WAAW;AAC1B,MAAI,EAAE,QAAQ,KAAK,SAAS,GAAI;EAChC,MAAM,OAAO,KAAK,gBAAgB,KAAK;EACvC,MAAM,eAAe,KAAK,gBAAgB,QAAQ,oBAAoB,KAAK;EAC3E,MAAM,eAAe,YAAY,SAAS,MAAM,YAAY,SAAS,YAAY,UAAU,KAAK,KAAK,EAAE,EAAE,YAAY,MAAM,IAAI,OAAO,IAAI,QAAQ,EAAE,CAAC,CAAC;AACtJ,OAAK,IAAI,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;GACxC,MAAM,QAAQ,QAAQ;GACtB,MAAM,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,KAAK,MAAM;GACjC,MAAM,mBAAmB;IACxB;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;AACD,QAAK,eAAe,KAAK,MAAM,iBAAiB,iBAAiB,MAAM,MAAM,MAAM,WAAW,MAAM,eAAe;IAClH,aAAa,YAAY,SAAS,cAAc,iBAAiB;IACjE;IACA,SAAS,MAAM,WAAW,KAAK,WAAW;IAC1C,OAAO,MAAM;IACb,UAAU,KAAK,YAAY;IAC3B,WAAW,mBAAmB,YAAY,IAAI;IAC9C,UAAU,KAAK;IACf,WAAW,KAAK,aAAa;IAC7B,WAAW,KAAK;IAChB,mBAAmB,KAAK,qBAAqB;IAC7C,kBAAkB,KAAK,oBAAoB;IAC3C,UAAU,KAAK;IACf,UAAU,KAAK;IACf,mBAAmB,KAAK;IACxB,OAAO,KAAK;IACZ,EAAE,QAAQ,KAAK,cAAc;;;CAGhC,gBAAgB,MAAM,iBAAiB,iBAAiB,SAAS,MAAM,SAAS,OAAO;EACtF,MAAM,EAAE,OAAO,QAAQ,UAAU,GAAG,YAAY;GAC/C;GACA;GACA;GACA;GACA,EAAE,aAAa,cAAc,GAAG,eAAe,GAAG,WAAW,MAAM,WAAW,OAAO,YAAY,IAAI,WAAW,oBAAoB,IAAI,mBAAmB,GAAG,aAAa;EAC5K,MAAM,IAAI,KAAK,gBAAgB,KAAK;EACpC,MAAM,eAAe,KAAK,gBAAgB,QAAQ,oBAAoB,EAAE;EACxE,MAAM,UAAU,KAAK,aAAa,WAAW,KAAK,OAAO;EACzD,IAAI;AACJ,MAAI,YAAa,KAAI,MAAM,QAAQ,YAAY,CAAE,qBAAoB;OAChE;GACJ,MAAM,IAAI,WAAW,YAAY;AACjC,uBAAoB;IACnB,EAAE;IACF,EAAE;IACF,EAAE;IACF,EAAE;IACF;;AAEF,OAAK,eAAe,KAAK,MAAM,iBAAiB,iBAAiB,SAAS,SAAS;GAClF,aAAa;GACb;GACA;GACA,aAAa;GACb;GACA;GACA;GACA;GACA;GACA;GACA,eAAe,KAAK;GACpB;GACA;GACA;GACA;GACA;GACA;GACA,UAAU,KAAK;GACf,mBAAmB,KAAK;GACxB,OAAO,KAAK;GACZ,EAAE,QAAQ,KAAK,cAAc;;;CAG/B,gBAAgB,MAAM;AACrB,MAAI,KAAK,YAAa,QAAO,KAAK;EAClC,MAAM,EAAE,WAAW;GAClB;GACA;GACA;GACA,EAAE,WAAW;GACb;GACA;GACA;GACA,EAAE,QAAQ;GACV;GACA;GACA;GACA,KAAK;EACN,IAAI,IAAI,YAAY,UAAU,SAAS,IAAI,SAAS,IAAI,SAAS,GAAG;EACpE,MAAM,QAAQ,SAAS,KAAK,KAAK,KAAK;EACtC,MAAM,QAAQ,SAAS,KAAK,KAAK,KAAK;EACtC,MAAM,QAAQ,SAAS,KAAK,KAAK,KAAK;AACtC,MAAI,UAAU,EAAG,KAAI,YAAY,SAAS,GAAG,YAAY,QAAQ,MAAM,CAAC;AACxE,MAAI,UAAU,EAAG,KAAI,YAAY,SAAS,GAAG,YAAY,QAAQ,MAAM,CAAC;AACxE,MAAI,UAAU,EAAG,KAAI,YAAY,SAAS,GAAG,YAAY,QAAQ,MAAM,CAAC;AACxE,SAAO,YAAY,SAAS,GAAG,YAAY,MAAM,MAAM,IAAI,MAAM,IAAI,MAAM,GAAG,CAAC;;CAEhF,uBAAuB,MAAM;EAC5B,IAAIH,WAAS,KAAK,iBAAiB,IAAI,KAAK;AAC5C,MAAIA,SAAQ,QAAOA;EACnB,MAAM,WAAW,KAAK,UAAU,SAAS;EACzC,MAAM,aAAa,IAAI,aAAa,WAAW,GAAG;AAClD,OAAK,IAAI,IAAI,GAAG,IAAI,UAAU,KAAK;GAClC,MAAM,SAAS,IAAI;AACnB,cAAW,UAAU,KAAK,UAAU,IAAI,MAAM;AAC9C,cAAW,SAAS,KAAK,KAAK,UAAU,IAAI,IAAI,MAAM;AACtD,cAAW,SAAS,KAAK,KAAK,UAAU,IAAI,IAAI,MAAM;AACtD,cAAW,SAAS,KAAK,KAAK,IAAI,IAAI,MAAM;AAC5C,cAAW,SAAS,KAAK,KAAK,IAAI,IAAI,IAAI,MAAM;AAChD,cAAW,SAAS,KAAK,KAAK,QAAQ,IAAI,MAAM;AAChD,cAAW,SAAS,KAAK,KAAK,QAAQ,IAAI,IAAI,MAAM;AACpD,cAAW,SAAS,KAAK,KAAK,QAAQ,IAAI,IAAI,MAAM;AACpD,OAAI,KAAK,cAAc;AACtB,eAAW,SAAS,KAAK,KAAK,aAAa,IAAI,MAAM;AACrD,eAAW,SAAS,KAAK,KAAK,aAAa,IAAI,IAAI,MAAM;AACzD,eAAW,SAAS,MAAM,KAAK,aAAa,IAAI,IAAI,MAAM;AAC1D,eAAW,SAAS,MAAM,KAAK,aAAa,IAAI,IAAI,MAAM;UACpD;AACN,eAAW,SAAS,KAAK;AACzB,eAAW,SAAS,KAAK;AACzB,eAAW,SAAS,MAAM;AAC1B,eAAW,SAAS,MAAM;;AAE3B,OAAI,KAAK,cAAc;AACtB,eAAW,SAAS,MAAM,KAAK,aAAa,IAAI,MAAM;AACtD,eAAW,SAAS,MAAM,KAAK,aAAa,IAAI,IAAI,MAAM;AAC1D,eAAW,SAAS,MAAM,KAAK,aAAa,IAAI,IAAI,MAAM;AAC1D,eAAW,SAAS,MAAM,KAAK,aAAa,IAAI,IAAI,MAAM;UACpD;AACN,eAAW,SAAS,MAAM;AAC1B,eAAW,SAAS,MAAM;AAC1B,eAAW,SAAS,MAAM;AAC1B,eAAW,SAAS,MAAM;;;EAG5B,MAAM,0BAA0B,KAAK,KAAK,WAAW,aAAa,EAAE,GAAG;EACvE,MAAM,eAAe,KAAK,OAAO,aAAa;GAC7C,MAAM,KAAK,IAAI,GAAG,wBAAwB;GAC1C,OAAO,eAAe,SAAS,eAAe,UAAU,eAAe,WAAW,eAAe;GACjG,kBAAkB;GAClB,CAAC;AACF,MAAI,aAAa,aAAa,gBAAgB,CAAC,CAAC,IAAI,WAAW;AAC/D,eAAa,OAAO;EACpB,MAAM,UAAU,KAAK,mBAAmB;EACxC,MAAM,yBAAyB,KAAK,KAAK,KAAK,QAAQ,aAAa,EAAE,GAAG;EACxE,MAAM,cAAc,KAAK,OAAO,aAAa;GAC5C,MAAM,KAAK,IAAI,GAAG,uBAAuB;GACzC,OAAO,eAAe,QAAQ,eAAe;GAC7C,kBAAkB;GAClB,CAAC;AACF,MAAI,QAAS,KAAI,YAAY,YAAY,gBAAgB,CAAC,CAAC,IAAI,KAAK,QAAQ;MACvE,KAAI,YAAY,YAAY,gBAAgB,CAAC,CAAC,IAAI,KAAK,QAAQ;AACpE,cAAY,OAAO;EACnB,IAAI;AACJ,MAAI,KAAK,UAAU,KAAK,OAAO,UAAU,WAAW,GAAG;AACtD,iBAAc,KAAK,OAAO,aAAa;IACtC,OAAO;IACP,MAAM,KAAK,IAAI,IAAI,WAAW,GAAG;IACjC,OAAO,eAAe;IACtB,kBAAkB;IAClB,CAAC;AACF,OAAI,aAAa,YAAY,gBAAgB,CAAC,CAAC,IAAI,KAAK,OAAO,SAAS,GAAG,WAAW,EAAE,CAAC;AACzF,eAAY,OAAO;;AAEpB,aAAS;GACR;GACA;GACA,YAAY,KAAK,QAAQ;GACzB,aAAa,UAAU,WAAW;GAClC;GACA;AACD,OAAK,iBAAiB,IAAI,MAAMA,SAAO;AACvC,SAAOA;;CAER,WAAW,SAAS,MAAM,aAAa;EACtC,MAAM,cAAc,KAAK,uBAAuB,KAAK;EACrD,MAAM,WAAW,KAAK,UAAU,SAAS;AACzC,SAAO;GACN,cAAc,KAAK,wBAAwB,QAAQ,SAAS,YAAY,cAAc;IACrF,QAAQ,YAAY;IACpB,mBAAmB,YAAY;IAC/B,aAAa;IACb,QAAQ,YAAY;IACpB,YAAY,YAAY;IACxB,CAAC;GACF,aAAa,YAAY;GACzB,YAAY,YAAY;GACxB,aAAa,YAAY;GACzB,aAAa,YAAY;GACzB;;CAEF,WAAW,MAAM,iBAAiB,iBAAiB,eAAe,SAAS,OAAO,EAAE,EAAE,SAAS,OAAO;EACrG,MAAM,cAAc,kBAAkB,gBAAgB,gBAAgB,KAAK,uBAAuB,cAAc;EAChH,MAAM,EAAE,UAAU,GAAG,YAAY;GAChC;GACA;GACA;GACA;GACA,EAAE,WAAW,MAAM,YAAY,OAAO,YAAY,OAAO,kBAAkB,WAAW,OAAO,YAAY,aAAa,cAAc,SAAS,gBAAgB,UAAU,YAAY,IAAI,WAAW,oBAAoB,IAAI,mBAAmB,GAAG,aAAa;EAC9P,MAAM,IAAI,KAAK,gBAAgB,KAAK;EACpC,MAAM,eAAe,KAAK,gBAAgB,QAAQ,oBAAoB,EAAE;EACxE,MAAM,UAAU,cAAc;EAC9B,MAAM,UAAU,KAAK,aAAa,WAAW,KAAK,QAAQ;GACzD,cAAc;GACd,cAAc;GACd,WAAW;GACX,GAAG,kBAAkB,aAAa,EAAE,eAAe,GAAG;GACtD,CAAC;EACF,MAAM,SAAS,aAAa,WAAW,aAAa,aAAa,aAAa;EAC9E,MAAM,QAAQ,SAAS;GACtB,KAAK,KAAK,QAAQ,aAAa,YAAY,OAAO;GAClD,YAAY,KAAK,eAAe,aAAa,UAAU,MAAM;GAC7D,WAAW,KAAK,aAAa;GAC7B,OAAO,aAAa,YAAY,aAAa,KAAK;GAClD,GAAG,KAAK;AACT,OAAK,eAAe,KAAK,MAAM,iBAAiB,iBAAiB,aAAa,SAAS,SAAS;GAC/F;GACA,UAAU,KAAK;GACf,aAAa;GACb;GACA;GACA;GACA;GACA;GACA;GACA;GACA,UAAU,aAAa,WAAW,aAAa,SAAS,WAAW;GACnE;GACA;GACA;GACA,WAAW,SAAS,KAAK,IAAI,aAAa,KAAK,GAAG,GAAG;GACrD;GACA;GACA;GACA,UAAU,KAAK;GACf,mBAAmB,KAAK;GACxB,OAAO,KAAK;GACZ,MAAM,KAAK;GACX,EAAE,QAAQ,KAAK,cAAc;;CAE/B,UAAU,WAAW,SAAS,QAAQ,UAAU,EAAE,EAAE;AACnD,MAAI,OAAO,cAAc,SAAU,QAAO,YAAY,WAAW,QAAQ,QAAQ;EACjF,MAAM,MAAM,GAAG,OAAO,GAAG,KAAK,UAAU,QAAQ,CAAC,GAAG;EACpD,IAAI,QAAQ,KAAK,WAAW,IAAI,IAAI;AACpC,MAAI,CAAC,OAAO;AACX,WAAQ,YAAY,WAAW,QAAQ,QAAQ;AAC/C,QAAK,WAAW,IAAI,KAAK,MAAM;;AAEhC,SAAO;;;;;;CAMR,gBAAgB,UAAU;EACzB,IAAI,UAAU,KAAK,iBAAiB,IAAI,SAAS;AACjD,MAAI,CAAC,SAAS;AACb,aAAU,KAAK,sBAAsB,SAAS;AAC9C,QAAK,iBAAiB,IAAI,UAAU,QAAQ;;AAE7C,SAAO;;;;;;CAMR,aAAa,UAAU;EACtB,IAAI,UAAU,KAAK,iBAAiB,IAAI,SAAS;AACjD,MAAI,CAAC,SAAS;AACb,cAAW,YAAY;IACtB,MAAM,QAAQ,SAAS;IACvB,MAAM,CAAC,QAAQ,mBAAmB,WAAW,YAAY,MAAM,QAAQ,IAAI;KAC1E,KAAK,YAAY,SAAS,qBAAqB,GAAG,MAAM,SAAS;KACjE,KAAK,YAAY,SAAS,gCAAgC,GAAG,MAAM,oBAAoB;KACvF,KAAK,YAAY,SAAS,wBAAwB,GAAG,MAAM,YAAY;KACvE,KAAK,YAAY,SAAS,uBAAuB,GAAG,MAAM,WAAW;KACrE,CAAC;AACF,WAAO;KACN,GAAG,UAAU;MACZ;MACA,aAAa,SAAS,eAAe;MACrC;KACD,GAAG,qBAAqB,EAAE,mBAAmB;KAC7C,GAAG,aAAa;MACf;MACA,mBAAmB,SAAS,qBAAqB;MACjD;KACD,GAAG,YAAY,EAAE,UAAU;KAC3B;OACE;AACJ,QAAK,iBAAiB,IAAI,UAAU,QAAQ;;AAE7C,SAAO;;CAER,sBAAsB,UAAU;AAC/B,SAAO,KAAK,YAAY,SAAS,sBAAsB,YAAY,SAAS,OAAO;;;CAGpF,MAAM,YAAY,SAAS,OAAO;AACjC,MAAI,CAAC,QAAS,QAAO,KAAK;EAC1B,MAAM,SAAS,MAAM;;GAEpB;GACA;EACD,MAAM,SAAS,OAAO,KAAK,mBAAmB,aAAa,UAAU,IAAI,WAAW,QAAQ,CAAC;EAC7F,IAAI;EACJ,IAAI;AACJ,MAAI;AACH,IAAC,CAAC,OAAO,UAAU,MAAM,MAAM,OAAO,CAAC,UAAU;WACzC,KAAK;AACb,WAAQ,KAAK,0CAA0C,MAAM,yBAAyB,eAAe,QAAQ,IAAI,UAAU,IAAI;AAC/H;;AAED,MAAI,CAAC,SAAS,CAAC,OAAQ,QAAO,KAAK;EACnC,MAAM,gBAAgB,KAAK,MAAM,KAAK,KAAK,KAAK,IAAI,OAAO,OAAO,CAAC,CAAC,GAAG;EACvE,MAAM,UAAU,KAAK,OAAO,cAAc;GACzC;GACA,MAAM;IACL;IACA;IACA;GACD;GACA,QAAQ;GACR,OAAO,gBAAgB,kBAAkB,gBAAgB;GACzD,CAAC;AACF,OAAK,IAAI,QAAQ,GAAG,QAAQ,eAAe,SAAS;GACnD,MAAM,IAAI,KAAK,IAAI,GAAG,SAAS,MAAM;GACrC,MAAM,IAAI,KAAK,IAAI,GAAG,UAAU,MAAM;GACtC,MAAM,OAAO,MAAM,MAAM,OAAO,CAAC,aAAa,CAAC,OAAO,GAAG,GAAG,EAAE,KAAK,QAAQ,CAAC,CAAC,KAAK,CAAC,UAAU;AAC7F,QAAK,OAAO,MAAM,aAAa;IAC9B;IACA,UAAU;IACV,EAAE,MAAM;IACR,aAAa,IAAI;IACjB,cAAc;IACd,EAAE;IACF,OAAO;IACP,QAAQ;IACR,CAAC;;AAEH,SAAO;;;CAGR,WAAW,SAAS,QAAQ,MAAM,UAAU,EAAE,EAAE,WAAW;AAC1D,OAAK,kBAAkB,IAAI,cAAc,KAAK,OAAO;AACrD,OAAK,cAAc,MAAM,SAAS,QAAQ,MAAM,SAAS,aAAa,KAAK,EAAE;;CAE9E,kBAAkB,SAAS,gBAAgB,UAAU,UAAU,cAAc;EAC5E,MAAM,UAAU,KAAK,aAAa,WAAW,KAAK,OAAO;EACzD,MAAM,YAAY,KAAK,OAAO,gBAAgB;GAC7C,QAAQ,KAAK;GACb,SAAS;IACR;KACC,SAAS;KACT,UAAU,EAAE,QAAQ,cAAc;KAClC;IACD;KACC,SAAS;KACT,UAAU;KACV;IACD;KACC,SAAS;KACT,UAAU,eAAe,YAAY;KACrC;IACD;KACC,SAAS;KACT,UAAU,SAAS,YAAY;KAC/B;IACD;GACD,CAAC;EACF,MAAM,OAAO,QAAQ,gBAAgB,EAAE,kBAAkB,CAAC;GACzD,MAAM;GACN,QAAQ;GACR,SAAS;GACT,YAAY;IACX,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH;GACD,CAAC,EAAE,CAAC;AACL,OAAK,YAAY,KAAK,YAAY;AAClC,OAAK,aAAa,GAAG,UAAU;AAC/B,OAAK,KAAK,EAAE;AACZ,OAAK,KAAK;;CAEX,UAAU;AACT,OAAK,eAAe,SAAS;AAC7B,OAAK,cAAc,SAAS;AAC5B,OAAK,eAAe,SAAS;AAC7B,OAAK,0BAA0B,SAAS;AACxC,OAAK,oBAAoB,SAAS;AAClC,OAAK,kBAAkB,SAAS;AAChC,OAAK,wBAAwB,SAAS;AACtC,OAAK,gBAAgB,SAAS;AAC9B,OAAK,YAAY,SAAS;AAC1B,OAAK,eAAe,SAAS;AAC7B,OAAK,eAAe,SAAS;AAC7B,OAAK,eAAe,SAAS;AAC7B,OAAK,WAAW,SAAS;AACzB,OAAK,WAAW,SAAS;AACzB,OAAK,4BAA4B,SAAS;;;AAG5C,SAAS,YAAY,WAAW,SAAS,QAAQ,UAAU,EAAE,EAAE;AAC9D,KAAI,WAAW,UAAU,WAAW,MAAO,QAAO,SAAS,WAAW,QAAQ;AAC9E,KAAI,WAAW,MAAO,QAAO,QAAQ,WAAW,QAAQ;AACxD,KAAI,WAAW,MAAO,QAAO,QAAQ,WAAW,QAAQ;AACxD,KAAI,WAAW,MAAO,QAAO,QAAQ,WAAW,QAAQ;AACxD,KAAI,WAAW,MAAO,QAAO,QAAQ,WAAW,QAAQ;AACxD,KAAI,WAAW,MAAO,QAAO,QAAQ,WAAW,QAAQ;AACxD,KAAI,WAAW,MAAO,QAAO,QAAQ,WAAW,QAAQ;AACxD,KAAI,WAAW,MAAO,QAAO,QAAQ,WAAW,KAAK,GAAG,QAAQ;CAChE,MAAM,WAAW,OAAO,cAAc;CACtC,MAAM,SAAS,OAAO,cAAc,WAAW,UAAU,MAAM,GAAG;CAClE,MAAM,WAAW,OAAO,aAAa;AACrC,KAAI,SAAS,SAAS,OAAO,IAAI,SAAS,SAAS,QAAQ,CAAE,QAAO,SAAS,WAAW,QAAQ;AAChG,KAAI,SAAS,SAAS,OAAO,CAAE,QAAO,QAAQ,WAAW,QAAQ;AACjE,KAAI,SAAS,SAAS,OAAO,CAAE,QAAO,QAAQ,WAAW,QAAQ;AACjE,KAAI,SAAS,SAAS,OAAO,CAAE,QAAO,QAAQ,WAAW,QAAQ;AACjE,KAAI,SAAS,SAAS,OAAO,CAAE,QAAO,QAAQ,WAAW,QAAQ;AACjE,KAAI,SAAS,SAAS,OAAO,CAAE,QAAO,QAAQ,WAAW,QAAQ;AACjE,KAAI,SAAS,SAAS,OAAO,CAAE,QAAO,QAAQ,WAAW,QAAQ;AACjE,KAAI,SAAS,SAAS,OAAO,CAAE,QAAO,QAAQ,WAAW,KAAK,GAAG,QAAQ;AACzE,KAAI,UAAU;EACb,MAAM,QAAQ,qBAAqB,aAAa,YAAY,IAAI,WAAW,UAAU;AACrF,MAAI,WAAW,MAAM,MAAM,CAAE,QAAO,QAAQ,OAAO,QAAQ;AAC3D,MAAI,UAAU,SAAS,MAAM,CAAE,QAAO,QAAQ,OAAO,QAAQ;AAC7D,MAAI,UAAU,MAAM,MAAM,CAAE,QAAO,QAAQ,OAAO,QAAQ;AAC1D,MAAI,cAAc,MAAM,MAAM,CAAE,QAAO,QAAQ,OAAO,QAAQ;AAC9D,MAAI,MAAM,UAAU,KAAK,MAAM,OAAO,OAAO,MAAM,OAAO,OAAO,MAAM,OAAO,IAAK,QAAO,QAAQ,OAAO,QAAQ;AACjH,MAAI,UAAU,SAAS,MAAM,CAAE,QAAO,QAAQ,OAAO,QAAQ;AAC7D,SAAO,QAAQ,OAAO,KAAK,GAAG,QAAQ;;AAEvC,KAAI,OAAO,WAAW,IAAI,KAAK,OAAO,SAAS,YAAY,IAAI,OAAO,SAAS,aAAa,EAAG,QAAO,SAAS,QAAQ,QAAQ;AAC/H,KAAI,OAAO,WAAW,MAAM,IAAI,OAAO,WAAW,MAAM,CAAE,QAAO,QAAQ,QAAQ,QAAQ;AACzF,KAAI,OAAO,WAAW,MAAM,IAAI,OAAO,WAAW,OAAO,IAAI,OAAO,WAAW,OAAO,CAAE,QAAO,QAAQ,QAAQ,QAAQ;AACvH,KAAI,OAAO,SAAS,qBAAqB,IAAI,OAAO,SAAS,cAAc,CAAE,QAAO,QAAQ,QAAQ,QAAQ;AAC5G,KAAI,OAAO,WAAW,QAAQ,IAAI,OAAO,SAAS,QAAQ,CAAE,QAAO,QAAQ,QAAQ,QAAQ;AAC3F,QAAO,QAAQ,WAAW,KAAK,GAAG,QAAQ;;;;;;;;;;;AAc3C,IAAI,iBAAiB,MAAM;CAC1B;CACA;CACA;CACA;CACA,YAAY,QAAQ,aAAa,MAAM;AACtC,OAAK,sBAAsB,YAAY,UAAU;AACjD,OAAK,qBAAqB,OAAO,cAAc;GAC9C,OAAO;GACP,MAAM;IACL;IACA;IACA;IACA;GACD,QAAQ;GACR,OAAO,gBAAgB,oBAAoB,gBAAgB;GAC3D,CAAC;AACF,OAAK,kBAAkB,KAAK,mBAAmB,WAAW,EAAE,OAAO,qBAAqB,CAAC;AACzF,OAAK,0BAA0B,OAAO,cAAc;GACnD,OAAO;GACP,SAAS;GACT,WAAW;GACX,WAAW;GACX,CAAC;;CAEH,8BAA8B,UAAU,WAAW,YAAY,KAAK,OAAO,IAAI,MAAM,KAAK;EACzF,MAAM,aAAa,YAAY,OAAO,UAAU,WAAW;GAC1D;GACA;GACA;GACA,CAAC;EACF,MAAM,OAAO,YAAY;EACzB,MAAM,aAAa,YAAY,aAAa,CAAC,MAAM,MAAM,CAAC,MAAM,MAAM,MAAM,IAAI;AAChF,OAAK,sBAAsB,YAAY,SAAS,YAAY,WAAW;AACvE,SAAO,KAAK;;CAEb,UAAU;AACT,OAAK,mBAAmB,SAAS;;;;;;;AAUnC,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuFjB,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoErB,IAAI,eAAe,MAAM;CACxB;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA,YAAY,QAAQ;AACnB,OAAK,SAAS;AACd,OAAK,eAAe,OAAO,cAAc;GACxC,OAAO;GACP,MAAM;IACL;IACA;IACA;IACA;GACD,QAAQ;GACR,OAAO,gBAAgB,kBAAkB,gBAAgB;GACzD,CAAC;EACF,MAAM,YAAY,IAAI,WAAW,GAAG;AACpC,OAAK,IAAI,IAAI,GAAG,IAAI,IAAI,KAAK;AAC5B,aAAU,IAAI,IAAI,KAAK,KAAK,MAAM,KAAK,QAAQ,GAAG,IAAI;AACtD,aAAU,IAAI,IAAI,KAAK,KAAK,MAAM,KAAK,QAAQ,GAAG,IAAI;AACtD,aAAU,IAAI,IAAI,KAAK;AACvB,aAAU,IAAI,IAAI,KAAK;;AAExB,SAAO,MAAM,aAAa,EAAE,SAAS,KAAK,cAAc,EAAE,WAAW,EAAE,aAAa,IAAI,EAAE;GACzF;GACA;GACA;GACA,CAAC;EACF,MAAM,eAAe,IAAI,aAAa,IAAI;AAC1C,OAAK,IAAI,IAAI,GAAG,IAAI,IAAI,KAAK;GAC5B,MAAM,KAAK,KAAK,QAAQ;GACxB,MAAM,KAAK,KAAK,QAAQ;GACxB,MAAM,QAAQ,KAAK,KAAK,KAAK,KAAK,IAAI,GAAG,CAAC;GAC1C,MAAM,MAAM,IAAI,KAAK,KAAK;GAC1B,IAAI,SAAS,IAAI,KAAK;AACtB,WAAQ,KAAK,MAAM,QAAQ;AAC3B,gBAAa,IAAI,IAAI,KAAK,KAAK,IAAI,MAAM,GAAG,KAAK,IAAI,IAAI,GAAG;AAC5D,gBAAa,IAAI,IAAI,KAAK,KAAK,IAAI,MAAM,GAAG,KAAK,IAAI,IAAI,GAAG;AAC5D,gBAAa,IAAI,IAAI,KAAK,KAAK,IAAI,MAAM,GAAG;AAC5C,gBAAa,IAAI,IAAI,KAAK;;AAE3B,OAAK,eAAe,OAAO,aAAa;GACvC,OAAO;GACP,MAAM,aAAa;GACnB,OAAO,eAAe,UAAU,eAAe;GAC/C,CAAC;AACF,SAAO,MAAM,YAAY,KAAK,cAAc,GAAG,aAAa;EAC5D,MAAM,aAAa,OAAO,mBAAmB;GAC5C,OAAO;GACP,MAAM;GACN,CAAC;AACF,OAAK,sBAAsB,OAAO,sBAAsB;GACvD,OAAO;GACP,SAAS;IACR;KACC,SAAS;KACT,YAAY,eAAe;KAC3B,SAAS,EAAE,YAAY,SAAS;KAChC;IACD;KACC,SAAS;KACT,YAAY,eAAe;KAC3B,SAAS,EAAE,YAAY,SAAS;KAChC;IACD;KACC,SAAS;KACT,YAAY,eAAe;KAC3B,SAAS,EAAE,YAAY,SAAS;KAChC;IACD;KACC,SAAS;KACT,YAAY,eAAe;KAC3B,SAAS,EAAE,MAAM,aAAa;KAC9B;IACD;KACC,SAAS;KACT,YAAY,eAAe;KAC3B,QAAQ,EAAE,MAAM,qBAAqB;KACrC;IACD;KACC,SAAS;KACT,YAAY,eAAe;KAC3B,QAAQ,EAAE,MAAM,WAAW;KAC3B;IACD;GACD,CAAC;AACF,OAAK,eAAe,OAAO,qBAAqB;GAC/C,OAAO;GACP,QAAQ,OAAO,qBAAqB,EAAE,kBAAkB,CAAC,KAAK,oBAAoB,EAAE,CAAC;GACrF,QAAQ;IACP,QAAQ;IACR,YAAY;IACZ;GACD,UAAU;IACT,QAAQ;IACR,YAAY;IACZ,SAAS,CAAC,EAAE,QAAQ,WAAW,CAAC;IAChC;GACD,WAAW,EAAE,UAAU,kBAAkB;GACzC,CAAC;AACF,OAAK,oBAAoB,OAAO,aAAa;GAC5C,OAAO;GACP,MAAM;GACN,OAAO,eAAe,UAAU,eAAe;GAC/C,CAAC;EACF,MAAM,aAAa,OAAO,mBAAmB;GAC5C,OAAO;GACP,MAAM;GACN,CAAC;AACF,OAAK,sBAAsB,OAAO,sBAAsB;GACvD,OAAO;GACP,SAAS;IACR;KACC,SAAS;KACT,YAAY,eAAe;KAC3B,SAAS,EAAE,YAAY,SAAS;KAChC;IACD;KACC,SAAS;KACT,YAAY,eAAe;KAC3B,SAAS,EAAE,YAAY,SAAS;KAChC;IACD;KACC,SAAS;KACT,YAAY,eAAe;KAC3B,SAAS,EAAE,MAAM,aAAa;KAC9B;IACD;KACC,SAAS;KACT,YAAY,eAAe;KAC3B,QAAQ,EAAE,MAAM,WAAW;KAC3B;IACD;GACD,CAAC;AACF,OAAK,eAAe,OAAO,qBAAqB;GAC/C,OAAO;GACP,QAAQ,OAAO,qBAAqB,EAAE,kBAAkB,CAAC,KAAK,oBAAoB,EAAE,CAAC;GACrF,QAAQ;IACP,QAAQ;IACR,YAAY;IACZ;GACD,UAAU;IACT,QAAQ;IACR,YAAY;IACZ,SAAS,CAAC,EAAE,QAAQ,WAAW,CAAC;IAChC;GACD,WAAW,EAAE,UAAU,kBAAkB;GACzC,CAAC;AACF,OAAK,oBAAoB,OAAO,aAAa;GAC5C,OAAO;GACP,MAAM;GACN,OAAO,eAAe,UAAU,eAAe;GAC/C,CAAC;AACF,OAAK,UAAU,OAAO,cAAc;GACnC,OAAO;GACP,WAAW;GACX,WAAW;GACX,cAAc;GACd,cAAc;GACd,CAAC;;CAEH,OAAO,gBAAgB,WAAW,YAAY,WAAW,aAAa,SAAS;EAC9E,MAAM,UAAU,QAAQ,iBAAiB,YAAY,OAAO,QAAQ,WAAW,IAAI,YAAY,UAAU;EACzG,MAAM,OAAO,IAAI,aAAa,GAAG;AACjC,OAAK,IAAI,QAAQ,YAAY,EAAE;AAC/B,OAAK,IAAI,SAAS,GAAG;AACrB,OAAK,IAAI,QAAQ,YAAY,GAAG;AAChC,OAAK,MAAM,QAAQ,UAAU;AAC7B,OAAK,MAAM,QAAQ,QAAQ;AAC3B,OAAK,MAAM,QAAQ,aAAa;AAChC,MAAI,YAAY,KAAK,OAAO,CAAC,MAAM,QAAQ,iBAAiB;AAC5D,OAAK,MAAM,QAAQ;AACnB,OAAK,MAAM,QAAQ;AACnB,OAAK,OAAO,MAAM,YAAY,KAAK,mBAAmB,GAAG,KAAK;EAC9D,MAAM,SAAS,KAAK,OAAO,gBAAgB;GAC1C,OAAO;GACP,QAAQ,KAAK;GACb,SAAS;IACR;KACC,SAAS;KACT,UAAU;KACV;IACD;KACC,SAAS;KACT,UAAU;KACV;IACD;KACC,SAAS;KACT,UAAU,KAAK,aAAa,YAAY;KACxC;IACD;KACC,SAAS;KACT,UAAU,KAAK;KACf;IACD;KACC,SAAS;KACT,UAAU,EAAE,QAAQ,KAAK,cAAc;KACvC;IACD;KACC,SAAS;KACT,UAAU,EAAE,QAAQ,KAAK,mBAAmB;KAC5C;IACD;GACD,CAAC;EACF,MAAM,QAAQ,eAAe,gBAAgB;GAC5C,OAAO;GACP,kBAAkB,CAAC;IAClB,MAAM;IACN,QAAQ;IACR,SAAS;IACT,YAAY;KACX,GAAG;KACH,GAAG;KACH,GAAG;KACH,GAAG;KACH;IACD,CAAC;GACF,CAAC;AACF,QAAM,YAAY,KAAK,aAAa;AACpC,QAAM,aAAa,GAAG,OAAO;AAC7B,QAAM,KAAK,EAAE;AACb,QAAM,KAAK;EACX,MAAM,uBAAuB,IAAI,YAAY,GAAG;EAChD,MAAM,OAAO,IAAI,aAAa,KAAK;EACnC,MAAM,OAAO,IAAI,WAAW,KAAK;AACjC,OAAK,KAAK,QAAQ;AAClB,OAAK,KAAK,QAAQ;AAClB,OAAK,KAAK,QAAQ,cAAc;AAChC,OAAK,KAAK,QAAQ,kBAAkB;AACpC,OAAK,OAAO,MAAM,YAAY,KAAK,mBAAmB,GAAG,KAAK;EAC9D,MAAM,SAAS,KAAK,OAAO,gBAAgB;GAC1C,OAAO;GACP,QAAQ,KAAK;GACb,SAAS;IACR;KACC,SAAS;KACT,UAAU;KACV;IACD;KACC,SAAS;KACT,UAAU;KACV;IACD;KACC,SAAS;KACT,UAAU,KAAK;KACf;IACD;KACC,SAAS;KACT,UAAU,EAAE,QAAQ,KAAK,mBAAmB;KAC5C;IACD;GACD,CAAC;EACF,MAAM,QAAQ,eAAe,gBAAgB;GAC5C,OAAO;GACP,kBAAkB,CAAC;IAClB,MAAM;IACN,QAAQ;IACR,SAAS;IACT,YAAY;KACX,GAAG;KACH,GAAG;KACH,GAAG;KACH,GAAG;KACH;IACD,CAAC;GACF,CAAC;AACF,QAAM,YAAY,KAAK,aAAa;AACpC,QAAM,aAAa,GAAG,OAAO;AAC7B,QAAM,KAAK,EAAE;AACb,QAAM,KAAK;;CAEZ,UAAU;AACT,OAAK,kBAAkB,SAAS;AAChC,OAAK,kBAAkB,SAAS;AAChC,OAAK,aAAa,SAAS;;;AAM7B,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwLxB,MAAM,6BAA6B,OAAO,IAAI,yBAAyB;AACvE,MAAM,4BAA4B,OAAO,IAAI,6BAA6B;AAwK1E,IAAI,sBAAsB,MAAM;CAC/B;CACA;CACA,cAAc;CACd;CACA;CACA;CACA;CACA;CACA,YAAY,QAAQ,OAAO,QAAQ;AAClC,OAAK,SAAS;AACd,OAAK,QAAQ;AACb,OAAK,SAAS;AACd,OAAK,eAAe,OAAO,cAAc;GACxC,MAAM,CAAC,OAAO,OAAO;GACrB,QAAQ,KAAK;GACb,OAAO,gBAAgB,oBAAoB,gBAAgB;GAC3D,CAAC;AACF,OAAK,sBAAsB,QAAQ;EACnC,MAAM,QAAQ;AACd,OAAK,cAAc,KAAK,KAAK,KAAK,sBAAsB,MAAM,GAAG;EACjE,MAAM,aAAa,KAAK,cAAc;AACtC,OAAK,gBAAgB,OAAO,aAAa;GACxC,MAAM;GACN,OAAO,eAAe,WAAW,eAAe;GAChD,CAAC;;CAEH,wBAAwB;AACvB,SAAO,KAAK,aAAa,YAAY;;CAEtC,oBAAoB;AACnB,SAAO,KAAK;;CAEb,UAAU;CACV,MAAM,aAAa;EAClB,MAAM,UAAU,KAAK,OAAO,sBAAsB;AAClD,UAAQ,oBAAoB,EAAE,SAAS,KAAK,cAAc,EAAE;GAC3D,QAAQ,KAAK;GACb,aAAa,KAAK;GAClB,EAAE,CAAC,KAAK,OAAO,KAAK,OAAO,CAAC;AAC7B,OAAK,OAAO,MAAM,OAAO,CAAC,QAAQ,QAAQ,CAAC,CAAC;AAC5C,QAAM,KAAK,OAAO,MAAM,qBAAqB;AAC7C,QAAM,KAAK,cAAc,SAAS,WAAW,KAAK;EAClD,MAAM,cAAc,KAAK,cAAc,gBAAgB;EACvD,MAAM,OAAO,IAAI,kBAAkB,KAAK,sBAAsB,KAAK,OAAO;EAC1E,MAAM,aAAa,IAAI,WAAW,YAAY;AAC9C,MAAI,KAAK,gBAAgB,KAAK,oBAAqB,MAAK,IAAI,WAAW;MAClE,MAAK,IAAI,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;GAC1C,MAAM,YAAY,IAAI,KAAK;GAC3B,MAAM,YAAY,IAAI,KAAK;AAC3B,QAAK,IAAI,WAAW,SAAS,WAAW,YAAY,KAAK,oBAAoB,EAAE,UAAU;;AAE1F,OAAK,cAAc,OAAO;AAC1B,SAAO;;CAER,UAAU;AACT,MAAI,KAAK,aAAc,KAAI;AAC1B,QAAK,aAAa,SAAS;WACnB,GAAG;AACZ,OAAK,gBAAgB;;;AAMvB,IAAI,OAAO,eAAe,YAAa,YAAW,qBAAqB,WAAW,sCAAsC,IAAI,KAAK"}
|