{"version":3,"mappings":"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AC/E,MAAAS,EAAYlO,EAAK,OAAO,UAAU,EAClCmO,EAAYD,IAAc,WAAa,OAASlO,EAAK,OAAO,SAAS,EAE3EiJ,EAAM,KAAK,CACP,MAAOkF,EACP,MAAOD,CAAA,CACV,EAGE,OAAAjF,CACX,EAEamF,GAAY,CACrB,iBACA,aACA,aACA,gBACA,eACA,mBACA,mBACA,4BACA,oBACA,oBACA,qBACA,mBACA,mBACA,oBACA,iCACA,4BACA,0BACA,0BACA,4BACA,8BACA,6BACA,6BACA,4BACA,6BACA,iCACA,4BACA,oBACA,gBACA,sBACA,uBACA,mBACA,mBACA,sBACA,mBACA,wBACA,qBACA,qBACA,qBACA,mBACA,kBACA,kBACA,YACA,mBACA,aACA,kBACA,eACA,mBACA,cACA,iBACA,kBACA,gBACA,oBACA,iBACA,oBACA,iBACA,gBACA,oBACA,uBACA,iBACA,mBACA,sBACA,oBACA,iBACA,mBACA,qBACA,iBACA,eACA,eACA,iBACA,mBACA,kBACA,oBACA,kBACA,oBACA,uBACA,kBACA,kBACA,sBACA,kBACA,sBACA,mBACA,mBACA,sBACA,mBACA,uBACA,iBACA,wBACA,mBACA,wBACA,sBACA,iBACA,kBACA,uBACA,sBACA,oBACA,qBACA,iBACA,eACA,gBACA,iBACA,oBACA,mBACA,uBACA,iBACA,gBACA,cACA,iBACA,qBACA,iBACA,sBACA,kBACA,mBACA,eACA,iBACA,gBACA,gBACA,oBACA,wBACA,iBACA,oBACA,oBACA,iBACA,eACA,kBACA,gBACA,eACA,kBACA,kBACA,eACA,mBACA,gBACA,kBACA,iBACA,iBACA,eACA,gBACA,eACA,kBACA,eACA,mBACA,kBACA,uBACA,uBACA,gBACA,gBACA,yBACA,oBACA,eACA,gBACA,iBACA,iBACA,sBACA,yBACA,kBACA,eACA,iBACA,gBACA,gBACA,gBACA,iBACA,eACA,gBACA,eACA,cACA,qBACA,cACA,kBACA,aACA,aACA,iBACA,eACA,iBACA,oBACA,qBACA,iBACA,aACA,cACA,iBACA,gBACA,cACA,aACA,cACA,YACA,cACA,eACA,kBACA,iBACA,oBACA,cACA,iBACA,oBACA,gBACA,kBACA,iBACA,oBACA,cACA,mBACA,YACA,kBACA,aACA,qBACA,eACA,mBACA,kBACA,sBACA,iBACA,iBACA,oBACA,oBACA,mBACA,oBACA,kBACA,qBACA,kBACA,yBACA,oBACA,eACA,gBACA,kBACA,iBACA,kBACA,eACA,kBACA,mBACA,cACA,iBACA,gBACA,eACA,mBACA,kBACA,iBACA,eACA,iBACA,oBACA,kBACA,uBACA,uBACA,cACA,eACA,gBACA,mBACA,mBACA,sBACA,YACA,cACA,gBACA,mBACA,kBACA,gBACA,mBACA,aACA,iBACA,mBACA,kBACA,qBACA,gBACA,oBACA,eACA,mBACA,mBACA,iBACA,mBACA,gBACA,qBACA,YACA,mBACA,eACA,aACA,oBACA,mBACA,eACA,aACA,eACA,gBACA,mBACA,gBACA,eACA,gBACA,qBACA,iBACA,cACA,cACA,sBACA,cACA,kBACA,mBACA,iBACA,qBACA,cACA,kBACA,sBACA,gBACA,qBACA,kBACA,mBACA,eACA,gBACA,kBACA,YACA,gBACA,eACA,oBACA,kBACA,wBACA,mBACA,cACA,cACA,kBACA,oBACA,eACA,mBACA,kBACA,8BACA,8BACA,+BACA,4BACA,0BACA,0BACA,6BACA,wBACA,kBACA,4BACA,uBACA,oBACA,8BACA,iCACA,8BACA,iBACA,gBACA,kBACA,sBACA,oBACA,iBACA,gBACA,qBACA,kBACA,eACA,eACA,mBACA,qBACA,iBACA,gBACA,kBACA,mBACA,gBACA,iBACA,eACA,qBACJ,0sBCjSA1O,GAAM,OAAO2O,EAAG,EAChB3O,GAAM,OAAO4O,EAAQ,EAGrB,MAAMlD,EAASC,GAAU,EACnBf,EAAQC,GAAS,EACjBgE,EAAkBhD,EAAI,EAAK,EAE3BiD,EAAiBlE,EAAM,QAAQ,oBAAoB,EACnDmE,EAAanE,EAAM,QAAQ,iBAAiB,EAE5CO,EAAY,MAAO3J,IAAgD,CACjE,MAAAoJ,EAAM,SAAS,iBAAkBpJ,EAAK,CAC9C,EAEMwN,EAAmB,SAAY,CAC7B,MAAApE,EAAM,SAAS,sBAAuB,EAAE,CAChD,EAEMqE,EAAYH,EAAe,OAAO,CAAC7P,GAAeiQ,KAClDjQ,GAAAiQ,EAAQ,IAAI,EAAIA,EAAQ,KACrBjQ,IACN,EAAE,EAGC2M,EAAOC,EAAI,IAAInP,GAAK,CACxB,MAAO,GACP,UAAW,KACX,WAAY,GACZ,UAAW,GACX,UAAW,EACX,YAAa,GACb,SAAU,GACV,QAAS,KACT,SAAU,MACV,YAAa,aACb,YAAa,UACd,CAAC,EAEIyS,EAAmBtD,EAAI,CAC3B,QAAS,GACT,SAAU,GACV,KAAM,GACP,EAEKuD,EAAavD,EAAI,EAAK,EACtBwD,EAAYxD,EAAI,CACpB,eAAgB,KAChB,mBAAoB,CAAC,KAAM,IAAI,EAChC,EACKyD,EAASzD,EAAI,IAAI,EACjB0D,EAAoB1D,EAAI,CAAC,aAAc,aAAc,YAAY,CAAC,EAClE2D,EAAoB3D,EAAI,CAC5B,CACE,MAAO,gBACP,MAAO,SACT,EACA,CACE,MAAO,gBACP,MAAO,UACT,CACD,EACK4D,EAAO5D,EAAI,KAAK,eAAe,EAAE,iBAAiB,EAElD6D,EAAoB3E,EAAS,IAAM,CACjC,MAAA4E,OAAkB,IAClBC,EAAc,CAAC,MAAO,KAAK,EAE3BC,EAAWf,EACd,IAAKI,IAA2BA,GAAQ,QAAQ,EAChD,OAAQjK,IACHA,IAAQ,CAAC0K,GAAY,IAAI1K,EAAI,GAC/B0K,GAAY,IAAI1K,EAAI,EACb,IAEF,EACR,EAEI,OAAC,GAAG,IAAI,IAAI,CAAC,GAAG2K,EAAa,GAAGC,CAAQ,CAAC,CAAC,EAClD,EAEKC,EAAmB/E,EAAS,IACzB+D,EAAe,IAAKI,KAA4B,CACrD,MAAOA,GAAQ,KACf,MAAOA,GAAQ,MACf,CACH,EAGKa,EAAiBhF,EAAS,IACvBkE,EAAUrD,EAAK,MAAM,OAAO,CACpC,EAEKoE,EAAkBjF,EAAS,IACxBa,EAAK,MAAM,QACnB,EAEKqE,EAAoBlF,EAAS,IAC1Ba,EAAK,MAAM,YAAY,YAAY,CAC3C,EAEKsE,GAAoBnF,EAAS,IAC1Ba,EAAK,MAAM,WACnB,EAEKuE,EAAqBpF,EAAS,IAC3BqF,EAAaxE,EAAK,MAAM,OAAO,CACvC,EAEKyE,GAAmBtF,EAAS,IAAM,QACtC,OAAOa,EAAK,MAAM,MAAM,QACnBA,EAAK,MAAM,WAAa,GACxBA,EAAK,MAAM,WAAW,QACtBA,EAAK,MAAM,UAAU,UACrBjN,GAAAiN,EAAK,MAAM,YAAX,YAAAjN,GAAsB,OAC5B,EAGKyR,EAAgBE,IAAwB,CAC9BA,MAAY,MAAM,EAAG,CAAC,EACpC,MAAMC,EAAaD,GAChB,YAAY,EACZ,MAAM,EAAE,EACR,IAAYE,GAAA,OAASA,EAAK,WAAW,CAAC,CAAC,EACnC,cAAO,cAAc,GAAGD,CAAU,CAC3C,EAEME,GAAgBnL,IAAe,CACnCsG,EAAK,MAAM,UAAYtG,EACzB,EAEMoL,GAAmB,SAAY,CACnC,MAAM3T,GAAW,MAAM6O,EAAK,MAAM,IAAI,gBAAgBmD,CAAU,WAAW,EAE3E,GAAIhS,GAAS,QAAU,KAAOA,GAAS,OAAS,IAAK,CAEnD,KAAM,CAAC,KAAAJ,CAAI,EAAI,MAAMiP,EAAK,MAAM,KAAK,gBAAgB,EAGrD,MAAMT,EAAU,CACd,MAAOxO,EAAK,aACZ,SAAU,GACX,EAGD,MAAMqS,EAAiB,EAEjB,MAAApE,EAAM,SAAS,gBAAgB,EAGrCc,EAAO,KAAK,CAAC,KAAM,WAAY,GAAE,MAAM,IAAM,EAC5C,EAEL,EAGA,OAAAwB,GAAU,SAAY,SAChB,IACI,MAAAnQ,GAAW,MAAM,MAAM,4EAA4E,EAErG,IAACA,GAAS,GAAI,CACR,aAAK,yBAA0BA,GAAS,UAAU,EAC1D,OAGI,MAAA4T,EAAO,MAAM5T,GAAS,KAAK,EAC7B,MAAC4B,EAAAgS,GAAA,YAAAA,EAAM,UAAN,MAAAhS,EAAe,UAAU,CACpB,aAAK,wCAAyCgS,CAAI,EAC1D,OAGFrB,EAAO,MAAQqB,EAEfxB,EAAiB,MAAM,QAAUF,EAAU0B,EAAK,QAAQ,QAAQ,GAAK,gBACrExB,EAAiB,MAAM,KAAOiB,EAAaO,EAAK,QAAQ,QAAQ,EAC3D/E,EAAA,MAAM,WAAWlN,EAAAiS,EAAK,QAAQ,WAAb,YAAAjS,EAAuB,MAAM,KAAK,KAAM,MAC9DkN,EAAK,MAAM,QAAU+E,EAAK,QAAQ,UAAY,WACvClT,GAAO,CACN,cAAM,0BAA2BA,EAAK,GAG5C,CAACmT,QAAM7B,CAAU,GAAK8B,EAAA,QAAQ9B,CAAU,KAC1CK,EAAW,MAAQ,IAGrBxD,EAAK,MAAM,YAAcmD,EACRI,EAAA,MAAM,SAAWM,EAAK,MAAM,SACxC7D,EAAA,MAAM,SAAW6D,EAAK,MAAM,SAEjC,MAAMP,GAAUO,EAAK,MAAM,OAAO,MAAM,EAAE,EAAE,YAAY,EACxDN,EAAiB,MAAM,QAAUF,EAAUC,EAAO,GAAK,gBACxD,EAEDxC,GAAM,IAAM4C,EAAO,MAAQ3S,IAAS,UAC9BgC,EAAAhC,IAAA,YAAAA,GAAM,UAAN,MAAAgC,EAAe,WACjBwQ,EAAiB,MAAM,QAAUF,EAAUtS,GAAK,QAAQ,QAAQ,GAAK,gBACrEwS,EAAiB,MAAM,KAAOiB,EAAazT,GAAK,QAAQ,QAAQ,EAC3DiP,EAAA,MAAM,WAAWlN,EAAA/B,GAAK,QAAQ,WAAb,YAAA+B,EAAuB,MAAM,KAAK,KAAM,MACzDkN,EAAA,MAAM,QAAUjP,GAAK,QAAQ,SACpC,CACD,g0GCvVD,SAAwBmU,GAAe7U,EAA+D,CAGlG,OAF0B2O,GAAM,QAAQ,qBAAqB,EAEjD3O,CAAK,CACrB,CAGgB,SAAA8U,GAAoB9U,EAAe+U,EAAyB,GAAgB,CAClF,MAAAC,EAAoBrG,GAAM,QAAQ,qBAAqB,EAE7D,OAAIqG,EAAKhV,CAAK,IAAM,QAAagV,EAAKhV,CAAK,IAAM,KACtC+U,EAGJ,EAAQC,EAAKhV,CAAK,CAC7B,CCbO,SAASiV,IAAa,CACzB,MAAMtG,EAAQC,GAAS,EAGjBsG,EAAepG,EAAS,IAAMH,EAAM,QAAQ,YAAY,CAAC,EACzDxC,EAAU2C,EAA2B,IAAMH,EAAM,QAAQ,iBAAiB,CAAC,EAC3EwG,EAAoCrG,EAAS,IAAMH,EAAM,QAAQ,kBAAkB,CAAC,EACpFyG,EAAwCtG,EAAS,IAAMH,EAAM,QAAQ,qBAAqB,CAAC,EAC3F0G,EAAcvG,EAAsB,IAAMH,EAAM,QAAQ,cAAc,CAAC,EACvE2G,EAA4CxG,EAAS,IAAMH,EAAM,QAAQ,wBAAwB,CAAC,EAClG4G,EAAczG,EAAS,IAAMH,EAAM,QAAQ,qBAAqB,CAAC,EACjE6G,EAAkB1G,EAAS,IAAMH,EAAM,QAAQ,yBAAyB,CAAC,EACzE8G,EAAgB3G,EAAS,IAAMH,EAAM,QAAQ,gBAAgB,CAAC,EAC9D0B,EAAoBvB,EAAS,IAAMH,EAAM,QAAQ,2BAA2B,CAAC,EAC7E+G,EAAiB5G,EAAS,IAAMH,EAAM,QAAQ,wBAAwB,CAAC,EAEvEgH,EAAkB7G,EAAS,IAAMH,EAAM,QAAQ,yBAAyB,CAAC,EAEzEiH,EAAmB9G,EAAS,IAAMH,EAAM,QAAQ,mBAAmB,CAAC,EAGpEkH,EAAuB1H,GAClBQ,EAAM,SAAS,8BAA+BR,CAAO,EAG1D2H,EAA2BhH,EAAwB,IAAM+F,GAAe,yBAAyB,CAAkB,EACnHkB,EAAmBjH,EAAwB,IAAM+F,GAAe,wBAAwB,CAAkB,EAC1GmB,EAAyBlH,EAAwB,IAAM+F,GAAe,gCAAgC,CAAkB,EACxHoB,EAA2BnH,EAAwB,IAAM+F,GAAe,8BAA8B,CAAkB,EAE9H,SAASqB,EAAexV,EAAiD,CACjE,IACO,OAAAiO,EAAM,SAAS,yBAA0BjO,CAAI,QAC/CuE,GAAG,CACR,cAAQ,MAAMA,EAAC,EACTA,EAAA,CACV,CAGJ,SAASkR,GAAmB,CACjB,OAAAxH,EAAM,SAAS,wBAAwB,EAGlD,SAASyH,GAAkB,CAChB,OAAAzH,EAAM,SAAS,yBAAyB,EAInD,MAAM0H,GAAkB,SACb,MAAM1H,EAAM,SAAS,yBAAyB,EAGzD,SAAS2H,EAAenI,EAA8C,CAC3D,OAAAQ,EAAM,SAAS,yBAA0BR,CAAO,EAGrD,MAAAoI,GAAqBzH,EAAS,IAAM,UAC9B,SAAApM,EAAAyS,EAAgB,QAAhB,YAAAzS,EAAwB,mDAAoD,KAC7E,IAAED,GAAA0S,EAAgB,QAAhB,YAAA1S,GAAwB,mCAAoC,IACxE,EAEK+T,EAA4B1H,EAAS,IAChC+F,GAAe,6BAA6B,GAAK,OAC3D,EAEK4B,GAAkC3H,EAAS,IACzC0H,EAA0B,QAAU,aAC7B,CACH,MAAO,YACP,aAAc,aACd,UAAW,IACf,EAEG,CACH,MAAO,OACP,aAAc,QACd,UAAW,IACf,CACH,EAEKE,GAAoB,IAAM,CACxB,IAACX,EAAiB,MAClB,OAOJ,GAAI,CAHyB,SAAS,eAAe,oBAAoB,EAG9C,CACjB,MAAAY,GAAyB,SAAS,cAAc,OAAO,EACtCA,GAAA,aAAa,KAAM,oBAAoB,EACvCA,GAAA,aAAa,OAAQ,UAAU,EACtD,MAAMC,EAAeb,EAAiB,MAElC,IACAY,GAAuB,YAAY,SAAS,eAAeC,CAAY,CAAC,EAC/D,cAAK,YAAYD,EAAsB,OACxC,CACJ,IACAA,GAAuB,YAAcC,EAC5B,cAAK,YAAYD,EAAsB,QAC3C1R,GAAG,CACR,QAAQ,MAAMA,EAAC,EACnB,CACJ,CAER,EAEM4R,GAAqB,IAAM,CAC7B,GAAIf,EAAyB,OACrB,CAAC,SAAS,eAAe,qBAAqB,EAAG,CAC3C,MAAAgB,EAA0B,SAAS,cAAc,QAAQ,EACvCA,EAAA,aAAa,KAAM,qBAAqB,EAC1D,MAAAC,GAAgBC,EAAalB,EAAyB,KAAK,EAE7D,IACAgB,EAAwB,YAAY,SAAS,eAAeC,EAAa,CAAC,EACjE,cAAK,YAAYD,CAAuB,OACzC,CACJ,IACAA,EAAwB,KAAOC,GACtB,cAAK,YAAYD,CAAuB,QAC5C7R,EAAG,CACR,QAAQ,MAAMA,CAAC,EACnB,CACJ,CAGZ,EAEM+R,EAAgBC,GAAc,UAChC,GAAIA,EAAG,CAEH,MAAMC,EAAgB,4DAClBD,IAAE,QAAQC,EAAe,EAAE,EAEzB,MAAAC,GAAM,SAAS,cAAc,KAAK,EACxCA,GAAI,UAAYF,EAEV,MAAAG,GAAUD,GAAI,qBAAqB,QAAQ,EACjD,IAAIE,GAAc;;AAAA,EAElB,QAASrJ,GAAIoJ,GAAQ,OAAS,EAAGpJ,IAAK,EAAGA,KAAK,CACtC,GAAAoJ,GAAQpJ,EAAC,EAAE,UAAW,CAChB,MAAAsJ,EAAgBF,GAAQpJ,EAAC,EAAE,UACjCqJ,IAAe,GAAGC,CAAa;;AAAA,GAEnC5U,GAAA0U,GAAQpJ,EAAC,EAAE,aAAX,MAAAtL,GAAuB,YAAY0U,GAAQpJ,EAAC,EAAC,CAGlC,OAAAqJ,MAAA5U,EAAA0U,GAAI,cAAJ,YAAA1U,EAAiB,SAAU,GAEnC4U,EAAA,CAEJ,QACX,EAGO,OACH,QAAAlL,EACA,aAAA+I,EACA,iBAAAU,EACA,uBAAAI,EACA,yBAAAC,EACA,gBAAAT,EACA,gBAAAL,EACA,eAAAG,EACA,YAAAF,EACA,YAAAC,EACA,mBAAAkB,GACA,YAAAhB,EACA,0BAAAiB,EACA,gCAAAC,GACA,kBAAApG,EACA,cAAAoF,EACA,gBAAAE,EACA,eAAAD,EACA,kBAAAgB,GACA,mBAAAG,GACA,eAAAP,EACA,gBAAAF,EACA,gBAAAC,GACA,eAAAH,EACA,iBAAAC,EACA,oBAAAN,CACJ,CACJ,urBC9FM,MAAC,eAAAP,CAAc,EAAIL,GAAW,EAC9B1F,EAAQC,GAAS,EACjBC,EAASC,GAAU,EACnBf,EAAQC,GAAS,EAEjBe,EAAOC,EAAI,IAAInP,GAAK,CACxB,MAAO,GACP,WAAY,GACZ,UAAW,GACX,SAAU,GACV,MAAO,GACP,aAAc,GACf,CAAC,EAEI8W,EAAWzI,EAAS,IAAMH,EAAM,QAAQ,kBAAkB,CAAC,EAC3D0B,EAAoBvB,EAAS,IAAMH,EAAM,QAAQ,2BAA2B,CAAC,EAE7E6I,EAA6B,MAAOC,GAAyB,CAC3D,MAAA9I,EAAM,SAAS,qCAAsC8I,CAAY,CACzE,EAEMvI,EAAY,MAAOxO,GAAS,CAC1B,MAAAiO,EAAM,SAAS,iBAAkBjO,CAAI,CAC7C,EAEMwQ,EAAiB,MAAOxQ,GAAS,CAC/B,MAAAiO,EAAM,SAAS,sBAAuBjO,CAAI,CAClD,EAEMmP,EAAeD,EAAI,EAAK,EAExBO,EAAcrB,EAAS,IAC3B,CAAC,aAAc,YAAa,WAAY,eAAgB,OAAO,EAAE,MAAO5O,GAAU,cAAAwC,EAAAiN,EAAK,MAAMzP,CAAK,IAAhB,YAAAwC,EAAmB,OAAM,GAAKiN,EAAK,MAAM,KAC7H,EAEMS,EAAmBtB,EAAS,IAAMa,EAAK,MAAM,MAAQ,CAACQ,EAAY,KAAK,EAG7EI,GAAc,IAAM,CACbZ,EAAA,MAAM,aAAeJ,EAAM,OAAO,aACvCiI,EAA2B7H,EAAK,MAAM,YAAY,EAAE,KAAK,IAAM,CACxDA,EAAA,MAAM,WAAa4H,EAAS,MAAM,WAClC5H,EAAA,MAAM,UAAY4H,EAAS,MAAM,UAClCA,EAAS,MAAM,QACZ5H,EAAA,MAAM,MAAQ4H,EAAS,MAAM,MACpC,CACD,EACF,EAED,MAAMG,EAAiB,SAAY,CAC7B,IACI,MAAC,KAAAhX,CAAI,EAAI,MAAMiP,EAAK,MAAM,IAAI,cAAcA,EAAK,MAAM,YAAY,WAAW,EAIpF,GAFA,QAAQ,MAAMjP,CAAI,EAEdA,EAAK,QAAS,CAEV,MAAC,KAAAA,CAAI,EAAI,MAAMiP,EAAK,MAAM,KAAK,gBAAgB,EAGrD,MAAMT,EAAU,CACd,MAAOxO,EAAK,aACZ,SAAU,GACX,EAGD,MAAMwQ,EAAe,EAAE,EAEjB,MAAAvC,EAAM,SAAS,gBAAgB,EAGrCc,EAAO,KAAK,CAAC,KAAM,WAAY,GAAE,MAAM,IAAM,EAC5C,SAEIxK,EAAG,CACV,QAAQ,IAAIA,CAAC,EAEjB,g8HCrHM,MAAC,QAAA0S,CAAO,EAAI/I,GAAS,EACrBW,EAAQC,GAAS,EAERI,EAAY,EAAE,EACvB,MAAAD,EAAOC,EAAI,IAAInP,GAAK,CACxB,MAAO,GACR,CAAC,EAEImX,EAAehI,EAAI,EAAE,EAErBiI,EAAuB/I,EAAS,IAC7B,CAACa,EAAK,MAAM,KACpB,EAEKmI,EAAO,SAAY,SACnB,IAACnI,EAAK,MAAM,MAAO,CACrBiI,EAAa,MAAQ,mCACrB,OAGE,IACF,KAAM,CAAC,KAAAlX,CAAI,EAAI,MAAMiP,EAAK,MAAM,KAAK,oBAAoB,EAErDjP,EAAK,UACP,QAAQ,IAAIA,CAAI,EAChBiP,EAAK,MAAM,MAAM,SAEZ1K,EAAG,CACV,QAAQ,IAAIA,CAAC,EACb2S,EAAa,QAAQnV,GAAAC,EAAAuC,EAAE,WAAF,YAAAvC,EAAY,OAAZ,YAAAD,EAAkB,UAAW,uCAEtD,EAEA,OAAA8N,GAAc,IAAM,CACdhB,EAAM,MAAM,QACN,YAAIA,EAAM,MAAM,KAAK,EACxBI,EAAA,MAAM,MAAQJ,EAAM,MAAM,OAE7BA,EAAM,OAAO,QACP,YAAIA,EAAM,OAAO,KAAK,EACzBI,EAAA,MAAM,MAAQJ,EAAM,OAAO,MAClC,CACD,inECvCD,MAAMA,EAAQC,GAAS,EACjBC,EAASC,GAAU,EACnBmI,EAAuBjI,EAAI,EAAK,EAChCgI,EAAehI,EAAI,EAAE,EACrBmI,EAAQnI,EAAI,EAAK,EACjB,CAAC,SAAAoI,EAAU,QAAAL,CAAO,EAAI/I,GAAS,EAC/BqJ,EAAoBrI,EAAI,EAAK,EAE7BS,EAAoBvB,EAAS,IAAM6I,EAAQ,2BAA2B,CAAC,EAEvEhI,EAAOC,EAAI,IAAInP,GAAK,CACxB,MAAO,GACP,MAAO,GACP,SAAU,GACV,sBAAuB,GACxB,CAAC,EAEIyO,EAAY,MAAOf,GAAY,CAC7B,MAAA6J,EAAS,iBAAkB7J,CAAO,CAC1C,EAGM+J,EAAQ,SAAY,CACpB,IAACvI,EAAK,MAAM,SAAU,CACxBiI,EAAa,MAAQ,8BACrB,OAQE,IACGjI,EAAA,MAAM,sBAAwBA,EAAK,MAAM,SAE9C,KAAM,CAAC,KAAAjP,CAAI,EAAI,MAAMiP,EAAK,MAAM,KAAK,oBAAoB,EAEzDsI,EAAkB,MAAQ,GAG1B,MAAM/I,EAAU,CACd,MAAOxO,EAAK,MACZ,SAAU,GACX,EAGD,MAAMsX,EAAS,gBAAgB,EAG/BvI,EAAO,KAAK,CAAC,KAAM,WAAY,GAAE,MAAM,IAAM,EAC5C,QACMxK,EAAG,CACV,QAAQ,IAAIA,CAAC,EAEjB,EAGA,OAAAsL,GAAc,IAAM,CACbZ,EAAA,MAAM,MAAQJ,EAAM,MAAM,MAC1BI,EAAA,MAAM,MAAQJ,EAAM,OAAO,MACjC,EAED4I,GAAgB,IAAM,CACpBxI,EAAK,MAAM,MAAM,EAClB,22DChGKyI,GAAKtV,GAAU,OAAO,KAAKA,CAAM,EAAE,IAAIhD,GAAO,GAAGA,CAAG,IAAIgD,EAAOhD,CAAG,CAAC,EAAE,EAAE,KAAK,GAAG,EAEhFuY,GAAU,CACb,KAAM,cAEN,OAAQ,QAER,WAAY,QAEZ,UAAW,CACT,MAAO,CAAE,MAAO,KAAK,GAAG,cAAc,CAAG,CAC1C,EAED,MAAM,iBAAiBC,EAAIC,EAAMC,EAAM,CACrC,GAAI,CACF,KAAM,CAAE,KAAA9X,CAAK,EAAI,MAAM8B,EAAM,KAAK,wBAAwB8V,EAAG,OAAO,EAAE,IAAIF,GAAGE,EAAG,KAAK,CAAC,EAAE,EAExFE,EAAMC,GAAO,CACXA,EAAG,QAAU/X,EAAK,MACpB,CAAC,CACH,OAASuE,EAAG,CACVuT,EAAMC,GAAO,CACXA,EAAG,MAAQxT,EAAE,SAAS,KAAK,MAC7B,CAAC,CACH,CACD,EAED,KAAM,KAAO,CACX,MAAO,GACP,QAAS,EACX,EACF,EA3DSyT,GAAA,OAAM,QAAS,MAGT,MAAM,sBAAsB,KAAK,aASjC,MAAM,qBAAqB,KAAK,oFAb7CC,EAuBM,YAtBJC,EAqBM,MArBNF,GAqBM,CApBJG,EAmBOC,EAAA,CAnBA,MAAOC,EAAE,qBAHtB,QAAAC,EAIQ,IAQW,CARKD,EAAO,SAAvBE,EAAA,EAAAN,EAQWO,IAZnB,QAKUN,EAEM,MAFNO,GAEMC,EADDL,EAAO,YAGZF,EAEcQ,EAAA,CAFA,GAAI,CAAiB,cAAE,MAAM,oBATrD,QAAAL,EAUY,IAAiB,CAV7BM,EAAAF,EAUeL,EAAE,kBAVjB,aAaQE,EAAA,EAAAN,EAQWO,IArBnB,QAcUN,EAEM,MAFNW,GACKH,EAAAL,EAAA,OAASA,EAAE,iCAGhBF,EAEcQ,EAAA,CAFA,GAAI,CAA+B,4BAAE,MAAM,sBAlBnE,QAAAL,EAmBY,IAAoC,CAnBhDM,EAAAF,EAmBeL,EAAE,qCAnBjB,oECiCKV,GAAU,CACb,KAAM,kBAEN,OAAQ,QAER,WAAY,QAEZ,UAAW,CACT,MAAO,CAAE,MAAO,KAAK,GAAG,cAAc,CAAG,CAC1C,EAED,KAAM,KAAO,CACX,OAAQ,GACR,KAAM,IAAI5X,GAAK,CACb,MAAO,EACT,CAAC,CACH,GAEA,SAAU,CACJ,KAAK,OAAO,MAAM,QACpB,KAAK,KAAK,MAAQ,KAAK,OAAO,MAAM,MAEvC,EAED,QAAS,CACP,MAAM,MAAO,CACX,KAAM,CAAE,KAAAC,CAAK,EAAI,MAAM,KAAK,KAAK,KAAK,sBAAsB,EAE5D,KAAK,OAASA,EAAK,OAEnB,KAAK,KAAK,MAAO,CAClB,CACF,CACH,EAjEOgY,GAAA,OAAM,EAAE,EACNS,GAAA,OAAM,QAAS,EAMTI,GAAA,OAAM,gBAAgB,EAClBC,GAAA,OAAM,8BAA8B,EACtCC,GAAA,OAAM,EAAE,EAOVC,GAAA,OAAM,gBAAgB,EACpBC,GAAA,OAAM,YAAa,uGAjBlC,OAAAV,EAAA,EAAAN,EA0BM,MA1BND,GA0BM,CAzBJE,EAwBM,MAxBNO,GAwBM,CAvBJN,EAsBOC,EAAA,CAtBA,MAAOC,EAAE,qBAHtB,QAAAC,EAIQ,IAoBO,CApBPJ,EAoBO,QApBA,UAASgB,EAAA,KAAAA,EAAA,GAAAC,GAAAd,EAAA,KAAK,UAAUc,CAAM,GAAI,SAAMD,EAAA,KAAAA,EAAA,GAJvDE,WAIiEC,EAAI,MAAAA,EAAA,QAAAta,CAAA,kBAC3DoZ,EAA+CmB,EAAA,CAA/B,KAAMjB,EAAI,KAAG,QAASA,EAAM,mCAG5CH,EAMM,MANNW,GAMM,CALJX,EAAqE,QAArEY,GAAqEJ,EAAtBL,EAAE,gBACjDH,EAGM,MAHNa,GAGM,IAFJb,EAA+H,SAX7I,sBAW8BgB,EAAA,KAAAA,EAAA,GAAAC,GAAAd,EAAA,KAAK,MAAKc,GAAG,MAX3CI,kBAWkElB,EAAI,KAAC,OAAO,cAAsB,cAAc,GAAC,KAAK,QAAQ,KAAK,kBAAvG,CAAAmB,GAAAnB,EAAA,KAAK,KAAK,IAC1BF,EAAuCsB,EAAA,CAA3B,KAAMpB,EAAI,KAAE,MAAM,8BAKlCH,EAMM,MANNc,GAMM,CALJd,EAIM,MAJNe,GAIM,CAHJd,EAEWuB,EAAA,CAFA,QAASrB,EAAI,KAAC,KAAM,SAAM,WAnBnD,QAAAC,EAoBgB,IAAkC,CApBlDM,EAAAF,EAoBmBL,EAAE,mCApBrB,qFCA8B,eAAAsB,GAAM,CAAC,MAAA1L,GAAQ,CACjC,YAAI,8BAA+B,mEAAmE,EAE1G,IAEM,MAAApJ,EAAQoJ,EAAM,QAAQ,YAAY,EAClC2L,EAAkB3L,EAAM,QAAQ,YAAY,EAMlD,OAJQ,YAAI,oBAAqB,kCAAmCpJ,CAAK,EACjE,YAAI,0BAA2B,kCAAmC+U,CAAe,EAGrF/U,GACQ,aAAK,6DAA8D,mCAAmC,EACvG,KAGH,YAAI,+CAAgD,iCAAiC,EACtF,UACF/D,EAAO,CACJ,qBAAM,+BAAgC,iCAAkCA,CAAK,EAC9E,GAEf,CCTA,MAAM+Y,GAA6B,CAC/B,KAAM,IACN,UAAWC,GACX,KAAM,CACF,MAAO,OACP,KAAM,YACN,QAAS,GACT,OAAQ,GACR,OAAQ,UACR,aAAc,GACd,WAAY,CAACH,EAAK,CACtB,EACA,SAAU,CACN,CACI,KAAM,QACN,KAAM,QACN,UAAWI,GACX,KAAM,CACF,aAAc,GACd,WAAY,CAACJ,EAAK,EAE1B,EACA,CACI,KAAM,WACN,KAAM,WACN,UAAWK,EACf,EACA,CACI,KAAM,WACN,KAAM,oBACN,UAAWC,EACf,EACA,CACI,KAAM,qDACN,KAAM,0BACN,UAAWC,EACf,EACA,CACI,KAAM,kBACN,KAAM,mBACN,UAAWC,EACf,EACA,CACI,KAAM,yBACN,KAAM,iBACN,UAAWC,EACf,EACA,CACI,KAAM,oBACN,KAAM,sBACN,UAAWC,EACf,EACA,CACI,KAAM,gBACN,KAAM,sBACN,UAAWC,EAAA,CACf,CAER,ECrEMC,GAAgB,IAAMC,EAAA,WAAO,6BAAqC,kHAGlEC,GAAmC,CACrC,CACI,KAAM,YACN,UAAWF,GACX,SAAU,oBACV,KAAM,CACF,MAAO,WACP,QAAS,GACT,WAAY,GACZ,KAAM,kBACN,YAAa,CAAC,eAAe,EAC7B,WAAY,CAAC,MAAO,EACpB,OAAQ,WACZ,EACA,SAAU,CACN,CACI,KAAM,UACN,KAAM,mBACN,WAAY,CACR,QAAS,IAAMC,EAAA,YAA+C,mBAAAE,EAAA,SAClE,EACA,KAAM,CAAC,MAAO,UAAW,KAAM,UAAW,QAAS,EAAK,CAC5D,EACA,CACI,KAAM,YACN,KAAM,4BACN,WAAY,CACR,QAAS,IAAMF,EAAA,WAAO,iCAA+D,2FACzF,EACA,KAAM,CAAC,MAAO,YAAa,KAAM,UAAW,QAAS,EAAK,CAC9D,EACA,CACI,KAAM,eACN,KAAM,gCACN,WAAY,CACR,QAAS,IAAMA,EAAA,WAAO,oCAAkE,2FAC5F,EACA,KAAM,CAAC,MAAO,eAAgB,KAAM,UAAW,QAAS,EAAK,CACjE,EACA,CACI,KAAM,iBACN,KAAM,iCACN,WAAY,CACR,QAAS,IAAMA,EAAA,WAAO,qCAAmE,iGAC7F,EACA,KAAM,CAAC,MAAO,gBAAiB,KAAM,UAAW,QAAS,EAAK,CAClE,EACA,CACI,KAAM,gBACN,KAAM,yBACN,WAAY,CACR,QAAS,IAAMA,EAAA,WAAO,4BAA0D,8FACpF,EACA,KAAM,CAAC,MAAO,gBAAiB,KAAM,UAAW,QAAS,EAAK,CAClE,EACA,CACI,KAAM,eACN,KAAM,gCACN,WAAY,CACR,QAAS,IAAMA,EAAA,WAAO,4BAA0D,wFACpF,EACA,KAAM,CAAC,MAAO,eAAgB,KAAM,UAAW,QAAS,EAAK,CACjE,EACA,CACI,KAAM,UACN,KAAM,mBACN,WAAY,CACR,QAAS,IAAMA,EAAA,YAAuD,mBAAAG,EAAA,SAC1E,EACA,KAAM,CAAC,MAAO,UAAW,KAAM,UAAW,QAAS,EAAK,CAC5D,EACA,CACI,KAAM,UACN,KAAM,2BACN,WAAY,CACR,QAAS,IAAMH,EAAA,YAAuD,mBAAAI,EAAA,SAC1E,EACA,KAAM,CAAC,MAAO,UAAW,KAAM,UAAW,QAAS,EAAK,CAC5D,EACA,CACI,KAAM,mBACN,KAAM,4BACN,WAAY,CACR,QAAS,IAAMJ,EAAA,YAA+D,mBAAAK,EAAA,SAClF,EACA,KAAM,CAAC,MAAO,mBAAoB,KAAM,UAAW,QAAS,EAAK,CACrE,EACA,CACI,KAAM,oBACN,KAAM,4BACN,WAAY,CACR,QAAS,IAAML,EAAA,YAAgF,mBAAAM,EAAA,SACnG,EACA,KAAM,CAAC,MAAO,mBAAoB,KAAM,UAAW,QAAS,EAAK,EACjE,SAAU,EACd,EACA,CACI,KAAM,wBACN,KAAM,gCACN,WAAY,CACR,QAAS,IAAMN,EAAA,YAAmF,mBAAAO,EAAA,SACtG,EACA,KAAM,CAAC,MAAO,MAAO,KAAM,UAAW,QAAS,EAAK,CACxD,EACA,CACI,KAAM,+BACN,KAAM,iCACN,WAAY,CACR,QAAS,IAAMP,EAAA,YAAoF,mBAAAQ,EAAA,SACvG,EACA,KAAM,CAAC,MAAO,OAAQ,KAAM,UAAW,QAAS,EAAK,CACzD,EACA,CACI,KAAM,8BACN,KAAM,iCACN,WAAY,CACR,QAAS,IAAMR,EAAA,YAAmE,mBAAAS,EAAA,SACtF,EACA,KAAM,CAAC,MAAO,mBAAoB,KAAM,UAAW,QAAS,EAAK,CACrE,EACA,CACI,KAAM,QACN,KAAM,iBACN,WAAY,CACR,QAAS,IAAMT,EAAA,YAA6C,mBAAAU,EAAA,SAChE,EACA,KAAM,CAAC,MAAO,QAAS,KAAM,UAAW,QAAS,EAAK,CAC1D,EACA,CACI,KAAM,oBACN,KAAM,4BACN,WAAY,CACR,QAAS,IAAMV,EAAA,WAAO,gCAA8D,2FACxF,EACA,KAAM,CAAC,MAAO,oBAAqB,KAAM,UAAW,QAAS,EAAK,CACtE,EACA,CACI,KAAM,WACN,KAAM,oBACN,WAAY,CACR,QAAS,IAAMA,EAAA,YAAgD,mBAAAW,EAAA,SACnE,EACA,KAAM,CAAC,MAAO,WAAY,KAAM,UAAW,QAAS,EAAK,CAC7D,EACA,CACI,KAAM,sBACN,KAAM,+BACN,WAAY,CACR,QAAS,IAAMX,EAAA,YAAgD,mBAAAY,EAAA,SACnE,EACA,KAAM,CAAC,MAAO,WAAY,KAAM,UAAW,QAAS,EAAK,CAC7D,EACA,CACI,KAAM,wBACN,KAAM,iCACN,WAAY,CACR,QAAS,IAAMZ,EAAA,YAAmD,mBAAAa,EAAA,SACtE,EACA,KAAM,CAAC,MAAO,WAAY,KAAM,UAAW,QAAS,EAAK,CAC7D,EACA,CACI,KAAM,UACN,KAAM,mBACN,UAAW,IAAMb,EAAA,YAAyD,mBAAAc,EAAA,UAC1E,KAAM,CAAC,MAAO,UAAW,KAAM,UAAW,QAAS,EAAK,EACxD,SAAU,6BACV,SAAU,CACN,CACI,KAAM,WACN,KAAM,4BACN,UAAW,IAAMd,EAAA,WAAO,2BAAyD,4FACjF,KAAM,CAAC,MAAO,UAAU,CAC5B,EACA,CACI,KAAM,WACN,KAAM,4BACN,UAAW,IAAMA,EAAA,WAAO,2BAAyD,yFACjF,KAAM,CAAC,MAAO,UAAU,CAC5B,EACA,CACI,KAAM,UACN,KAAM,2BACN,UAAW,IAAMA,EAAA,WAAO,iCAA+D,yFACvF,KAAM,CAAC,MAAO,iBAAiB,EACnC,CAER,EACA,CACI,KAAM,OACN,KAAM,wBACN,WAAY,CACR,QAAS,IAAMA,EAAA,YAA4C,mBAAAe,EAAA,SAC/D,EACA,KAAM,CAAC,MAAO,UAAW,KAAM,UAAW,QAAS,EAAK,CAC5D,EACA,CACI,KAAM,gBACN,KAAM,iCACN,WAAY,CACR,QAAS,IAAMf,EAAA,YAA4D,mBAAAgB,EAAA,SAC/E,EACA,KAAM,CAAC,MAAO,gBAAiB,KAAM,UAAW,QAAS,EAAK,CAClE,EACA,CACI,KAAM,QACN,KAAM,yBACN,WAAY,CACR,QAAS,IAAMhB,EAAA,YAAoD,mBAAAiB,EAAA,SACvE,EACA,KAAM,CAAC,MAAO,QAAS,KAAM,UAAW,QAAS,EAAK,CAC1D,EACA,CACI,KAAM,uBACN,KAAM,+CACN,WAAY,CACR,QAAS,IAAMjB,EAAA,YAAkE,mBAAAkB,EAAA,SACrF,EACA,KAAM,CAAC,MAAO,QAAS,KAAM,UAAW,QAAS,EAAK,CAC1D,EACA,CACI,KAAM,wBACN,KAAM,iCACN,WAAY,CACR,QAAS,IAAMlB,EAAA,YAAyF,mBAAAmB,EAAA,SAC5G,EACA,KAAM,CAAC,MAAO,QAAS,KAAM,UAAW,QAAS,EAAK,CAC1D,EACA,CACI,KAAM,YACN,KAAM,qBACN,WAAY,CACR,QAAS,IAAMnB,EAAA,YAAiD,mBAAAoB,EAAA,SACpE,EACA,KAAM,CAAC,MAAO,YAAa,KAAM,UAAW,QAAS,EAAK,CAC9D,EACA,CACI,KAAM,oBACN,KAAM,uCACN,WAAY,CACR,QAAS,IAAMpB,EAAA,YAAwD,mBAAAqB,EAAA,SAC3E,EACA,KAAM,CAAC,MAAO,oBAAqB,KAAM,UAAW,QAAS,EAAK,CACtE,EACA,CACI,KAAM,0BACN,KAAM,mCACN,WAAY,CACR,QAAS,IAAMrB,EAAA,YAA8E,mBAAAsB,EAAA,SACjG,EACA,KAAM,CAAC,MAAO,mBAAoB,KAAM,UAAW,QAAS,EAAK,CACrE,EACA,CACI,KAAM,gCACN,KAAM,yCACN,WAAY,CACR,QAAS,IAAMtB,EAAA,YAA0D,mBAAAuB,EAAA,SAC7E,EACA,KAAM,CAAC,MAAO,sBAAuB,KAAM,UAAW,QAAS,EAAK,CACxE,EACA,CACI,KAAM,qBACN,KAAM,8BACN,WAAY,CACR,QAAS,IAAMvB,EAAA,YAAyD,mBAAAwB,EAAA,SAC5E,EACA,KAAM,CAAC,MAAO,WAAY,KAAM,UAAW,QAAS,EAAK,CAC7D,EACA,CACI,KAAM,4BACN,KAAM,qCACN,WAAY,CACR,QAAS,IAAMxB,EAAA,YAAuD,mBAAAyB,EAAA,SAC1E,EACA,KAAM,CAAC,MAAO,iBAAkB,KAAM,UAAW,QAAS,EAAK,CACnE,EACA,CACI,KAAM,2BACN,KAAM,qCACN,WAAY,CACR,QAAS,IAAMzB,EAAA,YAA8D,mBAAA0B,EAAA,SACjF,EACA,KAAM,CAAC,MAAO,eAAgB,KAAM,UAAW,QAAS,EAAK,CACjE,EACA,CACI,KAAM,WACN,KAAM,oBACN,WAAY,CACR,QAAS,IAAM1B,EAAA,YAAgD,mBAAA2B,EAAA,SACnE,EACA,KAAM,CAAC,MAAO,WAAY,KAAM,UAAW,QAAS,EAAK,CAC7D,EACA,CACI,KAAM,sBACN,KAAM,wCACN,WAAY,CACR,QAAS,IAAM3B,EAAA,YAA0D,mBAAA4B,EAAA,SAC7E,EACA,KAAM,CAAC,MAAO,WAAY,KAAM,UAAW,QAAS,EAAK,CAC7D,EACA,CACI,KAAM,wBACN,KAAM,iCACN,WAAY,CACR,QAAS,IAAM5B,EAAA,YAAoD,mBAAA6B,EAAA,SACvE,EACA,KAAM,CAAC,MAAO,qBAAsB,KAAM,UAAW,QAAS,EAAK,CACvE,EACA,CACI,KAAM,0BACN,KAAM,6BACN,WAAY,CACR,QAAS,IAAM7B,EAAA,YAAiD,mBAAA8B,EAAA,SACpE,EACA,KAAM,CAAC,MAAO,UAAW,KAAM,UAAW,QAAS,EAAK,CAC5D,EACA,CACI,KAAM,QACN,KAAM,iBACN,WAAY,CACR,QAAS,IAAM9B,EAAA,YAAuD,mBAAA+B,EAAA,SAC1E,EACA,KAAM,CAAC,MAAO,UAAW,KAAM,UAAW,QAAS,EAAK,EACxD,SAAU,CACN,CACI,KAAM,WACN,KAAM,0BACN,WAAY,CACR,QAAS,UAAM,QAA2D,mBAAAC,EAAA,SAC9E,EACA,KAAM,CAAC,MAAO,WAAY,KAAM,UAAW,QAAS,EAAK,CAC7D,EACA,CACI,KAAM,eACN,KAAM,8BACN,WAAY,CACR,QAAS,UAAM,QAA8D,mBAAAC,EAAA,SACjF,EACA,KAAM,CAAC,MAAO,WAAY,KAAM,UAAW,QAAS,EAAK,CAC7D,EACA,CACI,KAAM,iBACN,KAAM,iCACN,WAAY,CACR,QAAS,UAAM,QAAiE,mBAAAC,EAAA,SACpF,EACA,KAAM,CAAC,MAAO,WAAY,KAAM,UAAW,QAAS,EAAK,CAC7D,EACA,CACI,KAAM,kBACN,KAAM,yBACN,WAAY,CACR,QAAS,UAAM,QAAwD,mBAAAC,EAAA,SAC3E,EACA,KAAM,CAAC,MAAO,kBAAmB,KAAM,UAAW,QAAS,EAAK,CACpE,EACA,CACI,KAAM,sBACN,KAAM,6BACN,WAAY,CACR,QAAS,UAAM,QAA2D,mBAAAC,EAAA,SAC9E,EACA,KAAM,CAAC,MAAO,qBAAsB,KAAM,UAAW,QAAS,EAAK,CACvE,EACA,CACI,KAAM,wBACN,KAAM,gCACN,WAAY,CACR,QAAS,UAAM,QAA8D,mBAAAC,EAAA,SACjF,EACA,KAAM,CAAC,MAAO,gBAAiB,KAAM,UAAW,QAAS,EAAK,CAClE,EACA,CACI,KAAM,eACN,KAAM,wBACN,WAAY,CACR,QAAS,IAAMrC,EAAA,YAAqE,mBAAAsC,EAAA,SACxF,EACA,KAAM,CAAC,MAAO,eAAgB,KAAM,UAAW,QAAS,EAAK,CACjE,EACA,CACI,KAAM,mBACN,KAAM,2BACN,WAAY,CACR,QAAS,IAAMtC,EAAA,YAAuE,mBAAAuC,EAAA,SAC1F,EACA,KAAM,CAAC,MAAO,kBAAmB,KAAM,UAAW,QAAS,EAAK,CACpE,EAAG,CACC,KAAM,qBACN,KAAM,+BACN,WAAY,CACR,QAAS,IAAMvC,EAAA,YAA0E,mBAAAwC,EAAA,SAC7F,EACA,KAAM,CAAC,MAAO,cAAe,KAAM,UAAW,QAAS,EAAK,CAChE,EACA,CACI,KAAM,mBACN,KAAM,0BACN,WAAY,CACR,QAAS,UAAM,QAA2D,mBAAAC,EAAA,SAC9E,EACA,KAAM,CAAC,MAAO,mBAAoB,KAAM,UAAW,QAAS,EAAK,EACrE,CAER,EACA,CACI,KAAM,YACN,WAAY,CACR,QAAS,IAAMzC,EAAA,YAAuD,mBAAA+B,EAAA,SAC1E,EACA,KAAM,CAAC,MAAO,YAAa,KAAM,UAAW,QAAS,EAAK,EAC1D,SAAU,CACN,CACI,KAAM,GACN,KAAM,mCACN,WAAY,CACR,QAAS,UAAM,QAAgE,mBAAAW,EAAA,SACnF,EACA,KAAM,CAAC,MAAO,YAAa,KAAM,UAAW,QAAS,EAAK,CAC9D,EACA,CACI,KAAM,SACN,KAAM,4BACN,WAAY,CACR,QAAS,UAAM,QAAiE,mBAAAC,EAAA,SACpF,EACA,KAAM,CAAC,MAAO,YAAa,KAAM,UAAW,QAAS,EAAK,CAC9D,EACA,CACI,KAAM,UACN,KAAM,6BACN,WAAY,CACR,QAAS,UAAM,QAAkE,mBAAAC,EAAA,SACrF,EACA,KAAM,CAAC,MAAO,YAAa,KAAM,UAAW,QAAS,EAAK,EAC9D,CAER,EACA,CACI,KAAM,YACN,WAAY,CACR,QAAS,IAAM5C,EAAA,YAAuD,mBAAA+B,EAAA,SAC1E,EACA,KAAM,CAAC,MAAO,YAAa,KAAM,UAAW,QAAS,EAAK,EAC1D,SAAU,CACN,CACI,KAAM,GACN,KAAM,2BACN,WAAY,CACR,QAAS,UAAM,QAAuD,mBAAAc,EAAA,SAC1E,EACA,KAAM,CAAC,MAAO,YAAa,KAAM,UAAW,QAAS,EAAK,EAC9D,CACJ,CACJ,CACJ,CAER,EC3cM9C,GAAgB,IAAMC,EAAA,WAAO,6BAAqC,kHAElE9F,GAA+B,CACjC,KAAM,gBACN,QAAS,EACb,EAEM4I,GAA+B,CAAC,CAClC,KAAM,cACN,UAAW/C,GACX,KAAM,CACF,GAAG7F,GACH,MAAO,aACP,WAAY,GACZ,WAAY,CAAC,MAAM,EACnB,OAAQ,WACZ,EACA,SAAU,CACN,CACI,KAAM,GACN,WAAY,CACR,QAAS,IAAM8F,EAAA,WAAO,0BAA6C,wFACvE,EACA,KAAM,aACN,KAAM,CAAC,GAAG9F,GAAa,MAAO,EAAE,CACpC,EACA,CACI,KAAM,WACN,WAAY,CACR,QAAS,IAAM8F,EAAA,YAA0D,mBAAAuB,EAAA,SAC7E,EACA,KAAM,sBACN,KAAM,CAAC,GAAGrH,GAAa,MAAO,UAAU,CAC5C,EACA,CACI,KAAM,yBACN,WAAY,CACR,QAAS,IAAM8F,EAAA,WAAO,uCAA0D,wFACpF,EACA,KAAM,4BACN,KAAM,CAAC,GAAG9F,GAAa,MAAO,UAAU,EAC5C,CAER,CAAC,ECDIiD,GAAU,CACb,KAAM,wBAEN,MAAO,CACL,MAAO,CACL,WAAY,KAAK,OAAO,OAAO,WAC/B,aAAc,KACd,cAAe,EAChB,CACF,EAED,SAAU,CACR7Y,EAAS,IAAI,yBAA0B,IAAM,CAC3C,KAAK,0BAA2B,CAClC,CAAC,EACDA,EAAS,IAAI,yBAA2Ba,GAAY,CAClD,KAAK,aAAeA,CACtB,CAAC,CACF,EAED,SAAU,CACL,KAAK,OAAO,OAAO,YACpB,KAAK,eAAe,KAAK,OAAO,OAAO,UAAU,CAEpD,EAED,SAAU,CACR,GAAG4d,GAAW,CACZ,QAAS,kBACT,iBAAkB,mBACpB,CAAC,CACF,EAED,QAAS,CACP,GAAGC,GAAW,CACZ,eAAgB,gBAClB,CAAC,EACD,2BAA4B,CAC1B,KAAK,cAAgB,GAGrB,WAAW,IAAM,CACf,KAAK,QAAQ,KAAK,CAAE,KAAM,gBAAiB,EAAE,MAAM,IAAM,EAAE,CAC5D,EAAE,GAAI,CACR,CACF,CACH,EA1FKxF,GAAA,OAAM,gDAAgD,EAElDS,GAAA,OAAM,aAAa,2BAF5B,OAAAF,EAAA,EAAAN,EAoCM,MApCND,GAoCM,CAnCJE,EAiBM,YAhBJA,EAeM,MAfNO,GAeM,CAdJS,EAAA,KAAAA,EAAA,GAAAhB,EAA0C,MAArC,OAAM,IAAI,EAAC,uBAAoB,KAJ1CU,EAIgD,IACvCF,EAAAL,EAAA,QAAQ,IAAI,EAAG,IAAC,eAAAH,EAAI,oBAL7BU,EAK6B,IACvBF,EAAG+E,EAAU,YAAG,IAAC,eAAAvF,EAAI,oBAGXG,EAAA,iBAAiB,UAD3BqF,EAKuBC,GAAA,CAb7B,MAUW,KAAM,GACP,MAAM,UACN,oBAZVC,EAAA,OAeoCH,EAAY,kBAA1CC,EAEUG,GAAA,CAjBhB,MAee,KAAK,YAfpB,QAAAvF,EAgBQ,IAAgB,CAhBxBM,EAAAF,EAgBU+E,EAAY,mBAhBtB,OAAAG,EAAA,WAqBEzF,EAeW2F,GAAA,CApCb,WAsBeL,EAAa,cAtB5B,sBAAAvE,EAAA,KAAAA,EAAA,GAAAC,GAsBesE,EAAa,cAAAtE,GACtB,cACA,MAAM,QAxBZ,QAAAb,EA0BI,IASS,CATTH,EASS4F,GAAA,CATD,MAAM,UAAU,UA1B5B,QAAAzF,EA2BM,IAOc,CAPdH,EAOc6F,GAAA,MAlCpB,QAAA1F,EA2BmB,IAEX,CA7BRY,EAAA,KAAAA,EAAA,GAAAN,EA2BmB,yBAEX,GAAAT,EAIqB8F,GAAA,CAHjB,iBACA,MAAM,QACN,MAAM,WAhClB,yECIM1D,GAAgB,IAAMC,EAAA,WAAO,6BAAqC,kHAGlE0D,GAAuC,CACzC,KAAM,aACN,UAAW3D,GACX,KAAM,CACF,MAAO,YACP,KAAM,sBACN,QAAS,GACT,OAAQ,GACR,YAAa,CAAC,eAAe,CACjC,EACA,SAAU,CACN,CACI,KAAM,cACN,WAAY,CACR,QAAS4D,EACb,EACA,KAAM,0BACN,KAAM,CAAC,MAAO,iBAAkB,KAAM,sBAAuB,QAAS,GAAO,SAAU,MAAM,EACjG,CAER,ECVKxG,GAAU,CACb,KAAM,0BAEN,OAAQ,YAER,WAAY,OAEZ,MAAO,CACL,MAAO,CACL,OAAQ,KACR,YAAa,iBACb,OAAQ,CACN,CAAC,aAAc,oBAAoB,EACnC,CAAC,WAAY,SAAS,CACvB,EACD,MAAO,CACL,CAAC,SAAU,SAAS,EACpB,CAAC,OAAQ,uBAAuB,EAChC,CAAC,SAAU,YAAY,EACvB,CAAC,SAAU,YAAY,CACxB,EACD,QAAS,CACP,CACE,KAAM,OACN,MAAO,QACP,MAAO,MACR,EACD,CAAE,KAAM,UAAW,MAAO,YAAc,EACxC,CAAE,KAAM,UAAW,MAAO,UAAW,SAAU,EAAO,CACvD,CACF,CACF,EACD,MAAO,CACL,QAAS,CACH,KAAK,SAAW,UAAY,KAAK,kBAAkB,kBACrD,KAAK,yBAA0B,CAElC,CACF,EAED,SAAU,CACR,GAAG4F,GAAW,CACZ,QAAS,cACT,OAAQ,aACR,kBAAmB,uBACrB,CAAC,EAED,UAAW,CACT,MAAO,CACL,iBAAkB,CAAC,KAAK,QAAQ,OAChC,iBAAkB,KAAK,QAAQ,OAC/B,iBAAkB,KAAK,QAAQ,iBAC/B,OAAQ,KAAK,SAAW,SACxB,6BAA8B,KAAK,kBAAkB,gBACtD,CACF,CACF,EACD,QAAS,CACP,GAAGC,GAAW,CACZ,yBAA0B,8BAC5B,CAAC,CACF,CAEH,EA9ESxF,GAAA,OAAM,2BAA2B,gEADxC0F,EAUQU,GAAA,CAVD,MAAM,oBAAkB,CADjC,QAAA9F,EAEI,IAQM,CARNJ,EAQM,MARNF,GAQM,CAPJG,EAMakG,GAAA,CAND,KAAK,iBAAiB,KAAK,WAH7C,QAAA/F,EAIQ,IAIa,MAJboF,EAIaY,GAAA,MAHXC,GAEOlG,sBAFP,IAEO,CADLF,EAAeqG,CAAA,cAN3B,gDCAMC,GAA2C,CAC7C,MAAO,WACP,OAAQ,SACR,MAAO,UACP,OAAQ,WACR,KAAM,SACN,MAAO,UACP,MAAO,OACP,MAAO,QACP,KAAM,OACN,MAAO,QACP,MAAO,QACP,IAAK,MACL,OAAQ,QACR,MAAO,MACX,EAGgB,SAAAC,GAAU/a,EAAegb,EAAwB,CAC7D,GAAI,OAAOA,GAAU,UAAY,CAACA,EAAM,OAC7B,SAGL,MAAAC,EAAeD,EAAM,KAAK,EAC1BE,EAAiBD,EAAa,YAAY,EAGhD,IAFc,OAAOjb,CAAI,GAAK,KAEhB,EACH,OAAAib,EAIX,IAAIE,EAASL,GAAiBI,CAAc,GAAK,GAAGD,CAAY,IAG5D,OAAAA,IAAiBA,EAAa,cAE9BE,EAASA,EAAO,YAAY,EACrBF,EAAa,CAAC,IAAMA,EAAa,CAAC,EAAE,gBAE3CE,EAASA,EAAO,CAAC,EAAE,cAAgBA,EAAO,MAAM,CAAC,GAG9CA,CACX,CAGO,SAASC,GAAWzf,EAAwB,CAC3C,UAAOA,GAAU,SAAU,CACrB,MAAA0f,EAAU1f,EAAM,KAAK,EACpB,OAAA0f,EAAQ,OAASA,EAAQ,OAAO,CAAC,EAAE,cAAgBA,EAAQ,MAAM,CAAC,EAAI,GAGjF,OAAI,OAAO1f,GAAU,UAAY,OAAOA,GAAU,UACvC,OAAOA,CAAK,EAAE,OAAO,CAAC,EAAE,YAAY,EAAI,OAAOA,CAAK,EAAE,MAAM,CAAC,EAGjE,EACX,CAEO,SAAS2f,GAAU3f,EAAwB,CAC1C,cAAOA,GAAU,SAAiB,GAE/BA,EAAM,KACR,UAAQ,kBAAmB,OAAO,EAClC,QAAQ,kBAAmB,OAAO,EAClC,QAAQ,OAAQ,GAAG,EACnB,YAAY,CACrB,CAEgB,SAAA4f,GAAS5f,EAAgB6N,EAAwB,CACzD,UAAO7N,GAAU,SAAiB,SAEhC,MAAA6f,EAAe7f,EAAM,KAAK,EAC5B,OAAA6f,EAAa,QAAUhS,EAAegS,EAEnCA,EAAa,MAAM,EAAGhS,CAAM,EAAI,KAC3C,CCxEO,SAASiS,IAAc,CAC1B,MAAMnR,EAAQC,GAAS,EAGjBmR,EAAoBjR,EAAyB,IAAMH,EAAM,QAAQ,oBAAoB,CAAC,EACtFqR,EAAmBlR,EAAS,IAAMH,EAAM,QAAQ,kBAAkB,CAAC,EACnEsR,EAAkBnR,EAA2B,IAAMH,EAAM,QAAQ,0BAA0B,CAAC,EAC5FuR,EAAWpR,EAA8B,IAAMH,EAAM,QAAQ,mBAAmB,CAAC,EACjFwR,EAAWrR,EAAsB,IAAMH,EAAM,QAAQ,mBAAmB,CAAC,EACzEyR,EAAqBtR,EAAS,IAAMH,EAAM,QAAQ,6BAA6B,CAAC,EAChF0R,EAAoBvR,EAAS,IAAMH,EAAM,QAAQ,4BAA4B,CAAC,EAC9E2R,EAAcxR,EAAS,IAAMH,EAAM,QAAQ,sBAAsB,CAAC,EAClE4R,EAAmBzR,EAAS,IAAM,cAAApM,EAAAwd,EAAS,QAAT,YAAAxd,EAAgB,UAAS,EAC3D8d,EAAiB1R,EAAS,IAAMH,EAAM,QAAQ,yBAAyB,CAAC,EACxE8R,EAAuB3R,EAAS,IAAMH,EAAM,QAAQ,+BAA+B,CAAC,EACpF+R,EAAc5R,EAAS,IAAMH,EAAM,QAAQ,sBAAsB,CAAC,EAElEgS,EAAmB7R,EAAS,IAAM,OAC7B,QAAApM,EAAAwd,EAAS,QAAT,YAAAxd,EAAgB,UAAU,OAAQ,GAC5C,EAEKke,EAAoB9R,EAA6B,IAAM,OAClD,QAAApM,EAAA6d,EAAiB,QAAjB,YAAA7d,EAAwB,OAAQ,CAAC,EAC3C,EAEKme,EAAyB/R,EAAS,IAAM,OACnC,QAAApM,EAAA6d,EAAiB,QAAjB,YAAA7d,EAAwB,kBAAmB,CAAC,EACtD,EACKoe,EAA6BhS,EAAS,IAAM,CAG1C,GAFJ,QAAQ,IAAI,4BAA4B,EAEpC,CAACmR,EAAgB,MACjB,MAAO,CAAC,EAAG,EAAG,EAAG,CAAC,EAGhB,MAAA/W,EAAI+W,EAAgB,MAAM,GAAK,EAC/Bc,GAAId,EAAgB,MAAM,GAAK,EAE9B,OAAC,EAAA/W,EAAG,EAAA6X,EAAC,EACf,EAEKC,EAAgBlS,EAAS,CAC3B,IAAK,IAAMH,EAAM,QAAQ,wBAAwB,EACjD,IAAMsS,GAAWtS,EAAM,OAAO,oCAAqCsS,CAAM,EAC5E,EAEKC,EAAiB,SACZ,MAAMvS,EAAM,SAAS,yBAAyB,EAGnDwS,EAAqBC,GAAWzS,EAAM,OAAO,+BAAgCyS,CAAM,EACnFC,EAAWC,GAAqB3S,EAAM,OAAO,oCAAqC2S,CAAQ,EAC1FC,EAAmBpT,GAGnBQ,EAAM,OAAO,yCAA0CR,CAAO,EAC9DqT,GAAqB,IAAM7S,EAAM,OAAO,4BAA4B,EACpE8S,EAAkBtT,GAA8BQ,EAAM,OAAO,yCAA0CR,CAAO,EAC9GuT,GAAqBxB,GAA2BvR,EAAM,OAAO,4BAA6BuR,CAAQ,EAClGyB,EAA2B,IAAMhT,EAAM,SAAS,mCAAmC,EACnFiT,GAAuB1hB,GAA4ByO,EAAM,OAAO,iCAAkCzO,CAAK,EACvG2hB,GAAkBC,GAAsBnT,EAAM,OAAO,4BAA6BmT,CAAQ,EAE1FC,GAAqB,IAAM,CACvBpT,EAAA,OAAO,iCAAkC,IAAI,EAC7CA,EAAA,OAAO,uCAAwC,CAAC,CAC1D,EAGMqT,EAAc,CAACnU,EAAS,IAAc,CACxC,MAAMoU,GAAa,mCACnB,OAAO,MAAM,KAAK,CAAC,OAAApU,CAAM,EAAG,IACxBoU,GAAW,OAAO,KAAK,MAAM,KAAK,OAAO,EAAIA,GAAW,MAAM,CAAC,GACjE,KAAK,EAAE,CACb,EAEMC,EAAiCpT,EAAgD,IAAM,CACzF,MAAMpO,EAA2BkgB,EAAkB,MAC7CuB,GAAiD,CAAC,EAEnD,OAAAzhB,EAAA,QAAS0hB,IAAS,CACnB,MAAMC,GAAOD,GAAK,KACbD,GAAQE,EAAI,IACLF,GAAAE,EAAI,EAAI,CAAC,GAEbF,GAAAE,EAAI,EAAE,KAAKD,EAAI,EAC1B,EACMD,EAAA,CACV,EAiBM,OACH,kBAAAvB,EACA,SAAAT,EACA,SAAAD,EACA,iBAAAF,EACA,kBAAAD,EACA,gBAAAE,EACA,kBAAAI,EACA,mBAAAD,EACA,2BAAAU,EACA,uBAAAD,EACA,eAAAL,EACA,YAAAF,EACA,cAAAU,EACA,iBAAAL,EACA,qBAAAF,EACA,YAAAC,EACA,+BAAAwB,EACA,YAjCiBhiB,GAA4B,CACvCyO,EAAA,OAAO,wBAAyBzO,CAAK,CAC/C,EAgCI,cA/BmBA,GAA4B,CACzC,MAAAoiB,GAAiB,SAAS,cAAc,4BAA4B,EACtEA,IACAA,GAAe,SAAS,CACpB,IAAKpiB,EAAM,UACX,KAAM,EACN,SAAU,SACb,CAET,EAuBI,kBAAAwhB,GACA,eAAAD,EACA,kBAAAN,EACA,gBAAAI,EACA,oBAAAK,GACA,mBAAAG,GACA,yBAAAJ,EACA,QAAAN,EACA,eAAAH,EACA,YAAAc,EACA,mBAAAR,GACA,eAAAK,EACJ,CACJ,CCxIwB,SAAAU,GAAgBviB,EAAiBwiB,EAAcC,GAAuB,OACtF,IAACziB,GAAS,CAAC,MAAM,QAAQA,CAAK,GAAKA,EAAM,SAAW,EACpD,eAAQ,MAAM,oFAAwF,EAC/F,GAGL,MAAA2H,GAAcjF,EAAA8f,GAAA,YAAAA,EAAa,UAAb,YAAA9f,EAAuB,oBAE3C,OAAKiF,EAKEA,EAAY,KAAK+a,GAAc1iB,EAAM,SAAS0iB,CAAU,CAAC,GAJ5D,QAAQ,KAAK,wDAAwD,EAC9D,GAIf,CCdO,SAASC,IAAiB,CAC7B,MAAMpT,EAAuCC,GAAS,EAChDC,EAASC,GAAU,EACnBf,EAAQC,GAAS,EAGjBgU,EAAQ9T,EAAS,IAAMH,EAAM,QAAQ,YAAY,CAAC,EAClDhH,EAAcmH,EAAS,IAAMH,EAAM,QAAQ,kBAAkB,CAAC,EAC9DkU,EAAa/T,EAAS,IAAMH,EAAM,QAAQ,gBAAgB,CAAC,EAC3DmU,EAAkBhU,EAAsB,IAAMH,EAAM,QAAQ,qBAAqB,CAAC,EAClFoU,EAAoBjU,EAAS,IAAMH,EAAM,QAAQ,kBAAkB,CAAC,EACpEqU,EAAkBlU,EAAS,IAAMH,EAAM,QAAQ,sBAAsB,CAAC,EACtEsU,EAAsBnU,EAAS,IAAMS,EAAM,IAAI,EAC/C2T,EAAkBpU,EAAS,IAAMH,EAAM,QAAQ,qBAAqB,CAAC,EACrEwU,EAAUrU,EAAS,IAAMH,EAAM,QAAQ,aAAa,CAAC,EACrDlH,EAASqH,EAAS,IAAMH,EAAM,QAAQ,YAAY,CAAC,EACnDyU,EAAUtU,EAAS,IAAMH,EAAM,QAAQ,aAAa,CAAC,EAErD0U,EAAoBvU,EAAS,IAAMH,EAAM,QAAQ,uBAAuB,CAAC,EAGzE2U,EAAS,CAACC,GAAyB,IAAM,CACpC9T,EAAA,GAAG,CAAC8T,EAAc,CAC7B,EAEMC,EAAe,CAACC,GAAmBC,GAA2B,IAAM,KAElE,OAAOnU,EAAM,MAAS,SACfA,EAAM,KAAK,WAAWkU,EAAS,GAAKC,GAAU,EAElD,GAGX,SAASC,EAAkBC,GAAkB,CAOzC,MAAMF,EAN+C,CACjD,UAAa,IAAM,OAAOnU,EAAM,MAAS,UAAY,CAACA,EAAM,KAAK,SAAS,kBAAkB,GAAK,CAACA,EAAM,KAAK,SAAS,kBAAkB,EACxI,OAAU,IAAM,OAAOA,EAAM,MAAS,UAAYA,EAAM,KAAK,WAAW,cAAc,EACtF,UAAa,IAAM,OAAOA,EAAM,MAAS,UAAYA,EAAM,KAAK,WAAW,iBAAiB,CAChG,EAE6BqU,EAAQ,IAAM,IAAM,IAE1C,OACH,qBAAsBJ,EAAaI,GAAUF,CAAS,CAC1D,EAGJ,SAASG,EAAYC,GAAuB,CACjC,OAAAlB,EAAM,MAAM,SAASkB,EAAI,EAGpC,MAAMC,EAAmB,SACd,MAAMpV,EAAM,SAAS,sBAAsB,EAGhDqV,EAAgB,IAAM,CACxBrV,EAAM,SAAS,mBAAmB,CACtC,EAEA,SAASsV,EAAkBtc,GAAgC,CACvD,OAAO4a,GAAgB5a,EAAW,EAGhC,MAAAuc,GAAiB,MAAOC,IACnB,MAAMxV,EAAM,SAAS,0BAA2BwV,EAAQ,EAG7DC,EAAgB,MAAOzb,IAClB,MAAMgG,EAAM,SAAS,oBAAqBhG,EAAQ,EAGvD0b,GAAc,SACT,MAAM1V,EAAM,SAAS,sBAAsB,EAGtD,SAAS2V,GAAoB,CACzB3V,EAAM,SAAS,uBAAuB,EAcnC,OACH,WAAAkU,EACA,gBAAAK,EACA,cAdiC,CACjC,CAAC,KAAM,yBAA0B,KAAM,MAAO,OAAQ,GAAG,EACzD,CAAC,KAAM,kBAAmB,KAAM,MAAO,OAAQ,GAAG,EAClD,CAAC,KAAM,OAAQ,KAAM,MAAO,OAAQ,GAAG,EACvC,CAAC,KAAM,eAAgB,KAAM,MAAO,OAAQ,GAAG,EAC/C,CAAC,KAAM,eAAgB,KAAM,MAAO,OAAQ,GAAG,EAC/C,CAAC,KAAM,mBAAoB,KAAM,MAAO,OAAQ,GAAG,EACnD,CAAC,KAAM,eAAgB,KAAM,MAAO,OAAQ,GAAG,EAC/C,CAAC,KAAM,YAAa,KAAM,MAAO,OAAQ,GAAG,CAChD,EAMI,gBAAAJ,EACA,MAAAF,EACA,YAAAjb,EACA,oBAAAsb,EACA,kBAAAF,EACA,gBAAAC,EACA,QAAAG,EACA,OAAA1b,EACA,QAAA2b,EACA,kBAAAC,EACA,OAAAC,EACA,iBAAAS,EACA,eAAAG,GACA,YAAAG,GACA,YAAAR,EACA,kBAAAI,EACA,kBAAAN,EACA,kBAAAW,EACA,cAAAF,EACA,cAAAJ,CACJ,CACJ,CCmQA,MAAMO,GAAeC,GAAqB,IAAMtJ,EAAA,WAAO,4BAAuC,2FAAC,EAEhFuJ,GAAA,CACb,KAAM,0BACN,WAAY,CAACF,eAAY,EAEzB,MAAO,CAAC,0BAA0B,EAElC,OAAQ,CACA,MACJ,SAAApE,EACA,gBAAAF,EACA,kBAAAW,EACA,mBAAAmB,EACA,QAAAV,EACA,yBAAAM,GACE7B,GAAY,EACV,CAAC,gBAAAoD,CAAe,EAAIP,GAAe,EACnC+B,EAAc9U,EAAI,EAAE,EACpB+U,EAAW/U,EAAI,EAAE,EACjBgV,EAAyBhV,EAAI,EAAK,EAClCiV,EAAmBjV,EAAI,CAC3B,KAAM,MACN,MAAO,CACL,CACE,MAAO,GACP,SAAU,GACV,MAAO,GACT,CACF,CACD,EACKkV,EAAgBlV,EAAI,CACxB,CACE,KAAM,uBACN,MAAO,KACT,EACA,CACE,KAAM,uBACN,MAAO,KACT,EACA,CACE,KAAM,wBACN,MAAO,OACT,CACD,EAEKmV,EAAgBnV,EAAI,CACxB,MAAO,CACL,CACE,MAAO,SACP,KAAM,aACR,EACA,CACE,MAAO,aACP,KAAM,kBAEV,EACA,SAAU,CACR,CACE,MAAO,SACP,KAAM,YACR,EACA,CACE,MAAO,aACP,KAAM,eACR,CACF,CACD,EAEKoV,EAAwBlW,EAAS,IAC9B+V,EAAiB,MAAM,KAC/B,EAEKpU,GAAAiU,EAAcO,GAAS,CAC3B,GAAIA,EAAM,CACF,MAAA3D,EAAWnB,EAAS,MAAM,KAAM+E,IAAMA,GAAE,QAAUR,EAAY,KAAK,EACzE,QAAQ,IAAI,UAAU,EACtB,QAAQ,IAAIpD,CAAQ,EAChBA,GACFD,EAAQC,CAAQ,CAClB,CACF,CACD,EAEK7Q,GAAAwP,EAAkB/f,GAAU,CAC5BA,IACEA,EAAM,kBACR2kB,EAAiB,MAAQ3kB,EAAM,kBAE/B2kB,EAAiB,MAAQ,CACvB,KAAM,MACN,MAAO,CACL,CACE,MAAO,GACP,SAAU,GACV,MAAO,GACT,CAEJ,EAEJ,CACD,EAGKpU,GAAAuU,EAAwB1Y,GAAU,CAClCA,EAAM,QAAU,IAClBuY,EAAiB,MAAM,KAAO,MAChC,CACD,EAED,MAAMM,EAAoBrW,EAAS,IAAM,cAAApM,EAAAud,GAAA,YAAAA,EAAiB,QAAjB,YAAAvd,EAAwB,KAAI,EAC/D0iB,EAAqBtW,EAAS,IAAM,cAAApM,EAAAud,GAAA,YAAAA,EAAiB,QAAjB,YAAAvd,EAAwB,MAAK,EAGjE2iB,EAAqBvW,EAAS,IAC3B8R,EAAkB,MAAM,OAAQ1gB,aAA4B,QAAAuC,IAAAC,EAAAxC,GAAA,YAAAA,EAAO,oBAAP,YAAAwC,EAA0B,QAA1B,YAAAD,GAAiC,QAAS,EAAC,CAC/G,EAEK6iB,EAAkBxW,EAAS,IAAM,CACrC,MAAMyW,EAAW,CAAC,EACC,OAAAF,EAAA,MAAM,QAASnlB,GAAU,CAC1CA,EAAM,kBAAkB,MAAM,QAASslB,IAAS,CAC1CA,GAAK,OAAS,CAACD,EAAS,SAASC,GAAK,KAAK,GACpCD,EAAA,KAAKC,GAAK,KAAK,CAC1B,CACD,EACF,EACMD,CAAA,CACR,EAEKE,EAAwB,IAAM,UAC9B/iB,EAAAud,EAAgB,QAAhB,MAAAvd,EAAuB,YACzBkiB,EAAuB,MAAQ,IAE/BniB,EAAOwd,EAAgB,QAAvB,aAAAxd,EAA8B,iBAElC,EAEMijB,EAAkBF,GAAS,CACzB,MAAAtlB,EAAQ0gB,EAAkB,MAAM,KAAM1gB,IAAUA,GAAM,KAAOslB,EAAK,KAAK,EACzE,OAACtlB,EAEE6kB,EAAc,MAAM7kB,EAAM,IAAI,GAAK,CAAC,EAFxB,CAAC,CAGtB,EAEMylB,EAAsB,IAAM,CAChCf,EAAuB,MAAQ,GACf3E,EAAA,MAAM,kBAAoB4E,EAAiB,KAC7D,EAEMe,EAAwB,IAAM,CAClC,QAAQ,IAAI,uBAAuB,EAClBf,EAAA,MAAM,MAAM,KAAK,CAChC,MAAO,GACP,SAAU,GACV,MAAO,GACR,CACH,EAEMgB,GAAoB3lB,GACjBolB,EAAgB,OAASA,EAAgB,MAAM,SAASplB,GAAA,YAAAA,EAAO,EAAE,EAGpE4lB,EAAmBb,GAAS,CAC1B,MAAAc,EAAW5F,EAAS,MAAM,KAAM+E,IAAMA,GAAE,MAAOD,GAAA,YAAAA,EAAM,OAAM,EACjE,OAAOc,GAAA,YAAAA,EAAU,WACnB,EAEMC,GAAmBlX,EAAS,IACjB8R,EAAkB,MAAM,IAAK1gB,IAAW,CACrD,KAAMA,EAAM,MACZ,MAAOA,EAAM,GACb,KAAMA,EAAM,KACZ,UAAWA,EAAM,UACjB,QAAS,CAAC,CAACA,EAAM,iBACjB,UAAW,CAAC,CAACA,EAAM,oBACnB,EAEY,KAAK,CAACI,EAAGC,KACjBD,EAAE,SAAW,CAACC,GAAE,QACX,GAEL,CAACD,EAAE,SAAWC,GAAE,QACX,EAELD,EAAE,WAAa,CAACC,GAAE,UACb,GAEL,CAACD,EAAE,WAAaC,GAAE,UACb,EAELD,EAAE,KAAOC,GAAE,KACN,GAELD,EAAE,KAAOC,GAAE,KACN,EAEF,CACR,CACF,EAEK0lB,EAAkBnX,EAAS,IAAM,OACrC,OAAOpM,EAAAsjB,GAAiB,QAAjB,YAAAtjB,EAAwB,OAAQxC,GACjC+f,EAAgB,MACX/f,EAAM,QAAU+f,EAAgB,MAAM,GAExC,GACR,CACF,EAEKiG,GAAiBpX,EAAS,IAAM,cACpC,QAAOpM,EAAAud,EAAgB,QAAhB,YAAAvd,EAAuB,UAAW,qBACpCD,EAAAwd,EAAgB,QAAhB,YAAAxd,EAAuB,UAAW,6BAClC+N,GAAAyP,EAAgB,QAAhB,YAAAzP,GAAuB,UAAW,+BAClC2V,EAAAlG,EAAgB,QAAhB,YAAAkG,EAAuB,aAC7B,EAEKC,GAAyCtX,EAAS,CACtD,KAAM,OACG,QAAApM,EAAAud,EAAgB,QAAhB,YAAAvd,EAAuB,WAAY,EAC5C,EACA,IAAI1C,EAAO,CACD,YAAIigB,EAAgB,KAAK,EACjCA,EAAgB,MAAM,SAAWjgB,CAAA,CACnC,CACD,EAEKqmB,GAAyCvX,EAAS,CACtD,KAAM,OACG,QAAApM,EAAAud,EAAgB,QAAhB,YAAAvd,EAAuB,WAAY,EAC5C,EACA,IAAI1C,EAAO,CACT,QAAQ,IAAI,WAAW,EACvBigB,EAAgB,MAAM,SAAWjgB,CAAA,CACnC,CACD,EAGM,OACL,WAAAyf,GACA,yBAAAkC,EACA,sBAAA8D,EACA,eAAAC,EACA,oBAAAC,EACA,sBAAAC,EACA,iBAAAC,GACA,gBAAAC,EACA,mBAAA/D,EACA,eAAAmE,GACA,uCAAAE,GACA,uCAAAC,GACA,iBAAAL,GACA,gBAAAV,EACA,gBAAAW,EACA,mBAAAb,EACA,kBAAAD,EACA,mBAAAE,EACA,kBAAAzE,EACA,gBAAAX,EACA,gBAAAiD,EACA,SAAA/C,EACA,YAAAuE,EACA,SAAAC,EACA,uBAAAC,EACA,iBAAAC,EACA,cAAAC,EACA,cAAAC,CACF,EAGJ,EAloBSrM,GAAA,OAAM,8BAAwB,EATvCS,GAAA,yEAAAI,GAAA,iCAAAC,GAAA,QAAAC,GAAA,QAAAC,GAAA,QAAAC,GAAA,QAAA2M,GAAA,QAAAC,GAAA,mBAAAC,GAAA,QA4C8DC,GAAW,oBAITC,GAAW,oBAIhBC,GAAM,CAAoB,IAA0B,0DAIjCC,GAAW,oBAMlEC,GAAM,CAAmB,cAACC,GAAA,2BACxB,uBA/DzBC,GAAA,oBA6E6CC,GAAM,CAAoB,IAAqB,4BACnE,8CAgBAC,GAAM,CAAmB,OAACC,GAAA,2BACxB,8CA/F3BC,GAAA,gBAuH4CC,GAAY,2BAuHXC,GAAM,iDAO9BC,GAAA,OAAM,MAAM,EAGZC,GAAA,OAAM,MAAM,oBAxPjCC,GAAA,eA6PwCC,GAAe,wBA6C5BC,GAAA,OAAM,yBAAM,EACVC,GAAA,OAAM,WAAW,oBA3S9CC,GAAA,oBA6SsDC,GAAa,sBAQxCC,GAAA,KAAK,CAAC,EACJC,GAAA,KAAK,CAAC,oBAtTnCC,GAAA,oBAwTsDC,GAAa,sBAoB9CC,GAAA,KAAK,CAAC,aA5U3BC,GAAA,eA8VgBC,GAAM,4CA9VtBC,GAAA,QAqWiBC,GAAA,KAAK,CAAC,oFApWrBC,EAAAC,GAkXM,OAlXN,eAEI,MAAK9P,GAAA,CAGGE,EAAA,MAAAO,GAAA,CAAAS,EAFI,EAAC,IAAkBA,EAAA,IAAAhB,EAAA,oCAAAC,EAAM4P,EAAS,CAAC,MAAM,mBAAQ,4BAJnE,QAK6D7O,EAAA,KAAAA,EAAA,GAAAC,GAAA,CAAA6O,EAAA,iCAAxC1P,EAAQ,KAAAH,EAAM8P,EAAO,eAL1C,4CAAArP,EAAA,2BASI,OAII,MAoPMC,GAAA,CAAAX,EAnPJ,MAkPM,MArBKA,EAAA,YAAAA,EA5NK,MAAiB,MAAKC,EAAA4F,GAAA,yBAfhD,kBAAAzF,EAoBsB,KAAAH,EAHK+P,GAAiB,MAA5B,QAAA5P,EAAA,KACE0P,EAAA,oBAA6C,UAAT,EAAA/P,EAAA,MAAAa,GAAA,CAAAX,EAlBtD8P,EAkBuC,CAAe,uBAAA3P,EAAA,IAAAY,EAAA,MAAAA,EAAA,KAlBtDN,EAAA,4BAAAM,EAAA,MAAAA,EAAA,IAAAN,EAAA,WAqBgB,GAAAgF,EAAA,OACEoK,EAAA,oBAAyD,cAAT,EAAA/P,EAAA,MAAAc,GAAA,CAAAZ,EAtBlE8P,EAsBuC,CAA2B,uBAAA3P,EAAA,IAAAY,EAAA,MAAAA,EAAA,KAtBlEN,EAAA,wCAAAM,EAAA,MAAAA,EAAA,IAAAN,EAAA,eAyBgB,GAAAgF,EAAA,OACEoK,EAAA,oBAA2C,eAAT,EAAA/P,EAAA,MAAAe,GAAA,CAAAb,EA1BpD8P,EA0BuC,CAAa,uBAAA3P,EAAA,IAAAY,EAAA,MAAAA,EAAA,KA1BpDN,EAAA,0BAAAM,EAAA,MAAAA,EAAA,IAAAN,EAAA,gBA6BgB,GAAAgF,EAAA,OACEoK,EAAA,oBAA4C,gBAAT,EAAA/P,EAAA,MAAAgB,GAAA,CAAAd,EA9BrD8P,EA8BuC,CAAc,uBAAA3P,EAAA,IAAAY,EAAA,MAAAA,EAAA,KA9BrDN,EAAA,2BAAAM,EAAA,MAAAA,EAAA,IAAAN,EAAA,iBAiCgB,GAAAgF,EAAA,OACEoK,EAAA,qBAA6C,UAAT,EAAA/P,EAAA,MAAA2N,GAAA,CAAAzN,EAlCtD8P,EAkCuC,CAAe,uBAAA3P,EAAA,IAAAY,EAAA,MAAAA,EAAA,KAlCtDN,EAAA,4BAAAM,EAAA,MAAAA,EAAA,IAAAN,EAAA,WAqCgB,GAAAgF,EAAA,OACcoK,EAAA,oBAAgB,SAA5BzP,EAAA,EAAAN,EAAA,MAAsG4N,GAtCxH,CAsC2DmC,EAAA,gBAA0C,eAAT,EAAA/P,EAAA,OAAAkQ,GAAA,CAAAhQ,EAtC5F8P,EAsCgF,CAAY,uBAAA3P,EAAA,IAAAY,EAAA,MAAAA,EAAA,KAtC5FN,EAAA,iCAuCkBM,EAvClB,IAAAN,EAAA,gBAuCgE,KAAAL,EAAA,EAAAN,EAAA,OAAA6N,GAAA,CAAA3N,EAvChE8P,EAuCoD,CAAY,uBAAA3P,EAAA,IAAAY,EAAA,MAAAA,EAAA,KAvChEN,EAAA,0DAAAgF,EAAA,SA0Cc,IACA,EAAAzF,EA3CdiQ,EA+CsB,EAAAjQ,EAHK6F,GAAiB,MAA5B,QAAA1F,EAAA,uBACEtW,EAAAgmB,EAAA,wBAAAhmB,EAAgF,oBAAvD,EAAAiW,EAAA,MAAA8N,GAAA,CAAA5N,EAAQ8P,EAAM,CAAC,MAAK,uBA7C/D,4CAAArP,EAAA,+BAAAM,EAAA,MAAAA,EAAA,IAAAN,EAAA,qBAgDgB,GAAAgF,EAAA,QACE7b,EAAAimB,EAAA,wBAAAjmB,EAA+E,sBAAvD,EAAAkW,EAAA,MAAA+N,GAAA,CAAA7N,EAAQ8P,EAAM,CAAC,MAAK,sBAjD9D,4CAAArP,EAAA,+BAAAM,EAAA,MAAAA,EAAA,IAAAN,EAAA,uBAoDgB,GAAAgF,EAAA,OACEoK,EAAA,gBAAAA,EAAA,kBAAAzP,MACA,IAAG0N,GAAA,CAAA/M,EAAA,MAAAA,EAAA,IAAAhB,EAAA,kDAtDrBU,EAAA,IAAAF,EAAAsP,EAAA,gBAAAA,EAAA,qBAwDgB,GAAApK,EAAA,SACE9N,EAAAkY,EAAA,8BAAAlY,EAAuD,uCAATmI,EAAA,IAAAiO,GAAA,CAAA/N,EAzDhE8P,EAyDyC,CAAuB,yBAAA3P,EAAA,IAAAY,EAAA,MAAAA,EAAA,KAzDhEN,EAAA,oCAAAM,EAAA,MAAAA,EAAA,IAAAN,EAAA,+HA6DgB,GACEgF,EAcM,GAdN,IAAA1F,EACE,MAKMiO,GALN,CA/DpBjO,EAAA,MAAAkO,GAAA,CAiEsBlO,EAAA,MAAAmO,GAAA,CAAAnN,EAAqB,EAAC,IAAMA,EAAA,IAAAN,EAAA,qBAASyP,IAAA9P,EAAA,EAAAmF,EAAAuK,EAAA,CAAiE,MAAK,gFAjEjI,8CAAArP,EAAA,2CAqEoB,KAEaV,EAAA,YAvEjCC,EAAAmQ,GAAA,CAwEwB,WAAQN,EAAS,uCACjB,sBAAY9O,EAAA,KAAAA,EAAA,GAAAC,GAAA6O,EAAA,uCAAA7O,GAAA,2DAIP,KACT6O,EAAA,gBAAAzP,EAAA,EAAAN,EA9EpB,MA8E2CqO,GAAA,CAErBpO,EAAA,MAAAqQ,GAAA,CAAArP,EAAqB,EAAC,IAAMA,EAAA,IAAAN,EAAA,gBAAAyP,IAAS9P,EAAmD,EAAAmF,EAAAuK,EAAA,CAAC,MAAK,mEAhFpH,8CAAArP,EAAA,2CAoFoB,KAEaV,EAAA,YAtFjCC,EAAAmQ,GAAA,CAuFwB,WAAQN,EAAS,uCACjB,sBAAY9O,EAAA,KAAAA,EAAA,GAAAC,GAAA6O,EAAA,uCAAA7O,GAAA,2DAxFpC,GA6FkB,GAAAyE,EAAA,OACEoK,EAAA,oBAcM,cARE,EAAA/P,EAAA,MAAAsO,GAAA,CApG5BrO,EAAA,MAAAsO,GAAA,CAiGwBtO,EAAA,MAAAsQ,GAAA,CAAAtP,EAAqB,EAAC,IAAMA,EAAA,IAAAN,EAAA,wBAAAyP,IAAS9P,EAAuC,EAAAmF,EAAAuK,EAAA,CAAC,MAAK,uDAjG1G,8CAAArP,EAAA,2CAqGsB,OAEa,MAAgB6N,GAAA,CAvGnDtO,EAAAmQ,GAAA,CAwG0B,WAAQN,EAAS,sBACjB,sBAAY9O,EAAA,KAAAA,EAAA,GAAAC,GAAA6O,EAAA,sBAAA7O,GAAA,2DAIlB,KA7GpBhB,EAAAsQ,GAAA,CA+GsB,WAAQT,EAAS,0BACjB,sBAAoB9O,EAAA,KAAAA,EAAA,GAAAC,GAAA6O,EAAA,0BAAA7O,GACpB,QAAQ,UACR,MAAO,6CAlH7B,4BAuH2ByE,EAAe,SACxBoK,EAAA,iBAAAzP,EAAA,EAAoBN,EAAQ,MAAAyO,GAAA,CAAAvO,EAASuQ,GAAW,aAxHlE,sBAyHoB,QAAApQ,EAAA,KAzHpB0P,EAAA,oBA0HiF,YAAAtK,EAAAiL,GAAA,iBA1HjFrQ,EA0HuD,KAAAH,EA1HvDyQ,GA0HuD,cAAAtQ,EAAA,IAAAY,EAAA,MAAAA,EAAA,KA1HvDN,EAAA,eA2HsB,QACEiQ,GAIgB,cAhIxCvQ,EA6HmC,KA7HnCH,EAAAsQ,GAAA,CA8H0B,WAAMT,EAAM,qBACZ,sBAAkB9O,EAAA,KAAAA,EAAA,GAAAC,GAAA6O,EAAA,qBAAA7O,GAAA,+BA/H5C,0CAAAyE,EAoIiF,OAAAzF,EAA3DwQ,GAA2D,cApIjFrQ,EAoIuD,KAAAH,EApIvDyQ,GAoIuD,cAAAtQ,EAAA,IAAAY,EAAA,MAAAA,EAAA,KApIvDN,EAAA,eAqIsB,QACEiQ,GAKgB,cA3IxCvQ,EAuImC,KAvInCH,EAAAsQ,GAAA,CAwI0B,WAAST,EAAA,kBACT,sBAAa9O,EAAA,KAAAA,EAAA,GAAAC,GAAA6O,EAAA,kBAAA7O,GACb,MAAO,kBAET,oBA5IxB,KA6ImC,kBA7InChB,EAAAsQ,GAAA,CA8I0B,WAAST,EAAA,kBACT,sBAAa9O,EAAA,KAAAA,EAAA,GAAAC,GAAA6O,EAAA,kBAAA7O,GACb,MAAO,oCAhJjC,mCAoJ6C,MApJ7C6O,EAAA,oBAqJmF,gBAAAtK,EAAAiL,GAAA,iBArJnFrQ,EAqJyD,KAAAH,EArJzDyQ,GAqJyD,cAAAtQ,EAAA,IAAAY,EAAA,MAAAA,EAAA,KArJzDN,EAAA,iBAsJsB,QACEiQ,GAKgB,cA5JxCvQ,EAwJmC,KAxJnCH,EAAAsQ,GAAA,CAyJ0B,WAAMT,EAAW,yBACjB,sBAAa9O,EAAA,KAAAA,EAAA,GAAAC,GAAA6O,EAAA,yBAAA7O,GACb,MAAO,0BAGT,oBA9JxB,KA8J+C,kBA9J/ChB,EAAA2Q,GAAA,YAAAd,EAAA,gDAiKkC9O,EAAA,KAAAA,EAAA,GAAAC,GAAA6O,EAAA,0BAAA7O,EAAA,WAFGb,EAAQ,KAAAH,EAAO4P,EAAM,cA/J1D,uBAAAzP,EAgKsE,KAAAH,EAhKtE8P,EAgKiD,CAAqB,uBAAA3P,EAAA,IAAAY,EAAA,MAAAA,EAAA,KAhKtEN,EAAA,oCAkK0B,QAA0BmP,EAAQ,cAlK5D,yBAAAzP,EAmKwE,KAAAH,EAnKxE8P,EAmKiD,CAAuB,uBAAA3P,EAAA,IAAAY,EAAA,MAAAA,EAAA,KAnKxEN,EAAA,sCAqK0B,QAA0BmP,EAAO,cArK3D,wBAAAzP,EAsKuE,KAAAH,EAtKvE8P,EAsKiD,CAAsB,uBAAA3P,EAAA,IAAAY,EAAA,MAAAA,EAAA,KAtKvEN,EAAA,qFAAAgF,EA4KgF,OAAAzF,EAA1DwQ,GAA0D,cA5KhFrQ,EA4KsD,KAAAH,EA5KtDyQ,GA4KsD,cAAAtQ,EAAA,IAAAY,EAAA,MAAAA,EAAA,KA5KtDN,EAAA,cA6KsB,QACEiQ,GAIgB,cAlLxCvQ,EA+KmC,KA/KnCH,EAAAsQ,GAAA,CAgL0B,WAAMT,EAAU,wBAChB,sBAAkB9O,EAAA,MAAAA,EAAA,IAAAC,GAAA6O,EAAA,wBAAA7O,GAAA,mCAjL5C,iDAmNgC,GAAhByE,EAAA,OAnNhBA,EAAA,UAoOc,QACEmL,GAAW,cACXzQ,EAGE,KAAAH,EAFW6Q,EAAE,EAAA7Q,EACZ8Q,EAAgB,YAAAjB,EAAA,iBAAAA,EAAA,0FAxOnC,mCA6OY,QACahK,GAAkB,MAA7B,QAAA1F,EAAA,2BAAAtW,EAAAgmB,EACE,kBADF,MAAAhmB,WAEI,MAAqC2kB,GAAA,CAACzO,EAAA,MAAA0O,GAAA,CAAA1N,EAAA,MAAAA,EAAA,IAAAhB,EAAA,yCAExCU,EAEM,IAAAF,GAAA3W,EAAAimB,EAAA,8BAAAjmB,EAAA,UADiC,MAAC8kB,GAAA,CAAA3N,EAAA,MAAAA,EAAA,IAAAhB,EAAA,yCAExCU,EAEM,IAAAF,GAAA5I,EAAAkY,EAAA,8BAAAlY,EAAA,UADiC,MAACoZ,GAAA,CAAAhQ,EAAA,MAAAA,EAAA,IAAAhB,EAAA,yCAExCU,EAEM,IAAAF,GAAA+M,EAAAuC,EAAA,8BAAAvC,EAAA,UADoC,MAACqB,GAAA,CAAA5N,EAAA,MAAAA,EAAA,IAAAhB,EAAA,+FAzP3D,MAAA0F,EAAA,UA6PuB,MA7PvBoK,EAAA,iBAAAzP,EAAA,EAAAN,EAAA,MAAA8O,GAAA,iBAAArO,EAAAsP,EAAA;AAAA,kBAAApK,EAAA,UAqQI,KArQJzF,EAAA2F,GAAA,CAqQ+C,WAAWkK,EAAA,6CAAA9O,EAAA,MAAAA,EAAA,IAAAC,GAAA6O,EAAA,uBAAA7O,GArQ1D,sBAAAb,EAyQuB,KAAAH,EAFf4F,GAEe,cAzQvBzF,EAwQoB,KAAAH,EAxQpB+P,GAwQoB,cAAA5P,EAAA,KAxQpBM,EAAA,cAAAF,EAAAsP,EAAA,yBA2QQ,MACE7P,EAAA6F,GAAA,cACA1F,EAWM,KAAAY,EAVJ,EASW,IAAAA,EAAA,IAAAhB,EAAA,4CARAA,EAAA,YA/QvBC,EAAAgR,GAAA,CAgRe,WAAUnB,EAAiB,sBAC3B,sBAAO9O,EAAa,MAAAA,EAAA,IAAAC,GAAA6O,EAAA,sBAAA7O,GACrB,SAAQ6O,EAAS,iCACjB,MAAWA,EAAA,cACX,kBACA,aAAQ,8CAqFN,8CAhFJ9P,EAAA,aAAAK,EAA2D,EAAK,EAAAN,EAAAO,GAAA,KAAA4Q,GAAApB,EAAA,wBAAAlD,EAAAhd,KAAOyQ,EAAO,EAAAN,EAAA,WAAAnQ,EAC5E,eAmCeoQ,EAAA,MAAA8O,GAAA,CAAA9O,EAhCI,MAAM+O,GAAA,CA9RvC9O,EAAAgR,GAAA,CA+RqB,WAAOrE,EAAA,MACR,sBAAY3L,GAAA2L,EAAA,MAAA3L,EACZ,MAAO6O,EAAC,gBACR,aACA,kBACA,eAAW,GACX,aAAa,OACb,aAAQ,sBAES,QAAS,aACR,UAAA1P,EAAK,CAAK,MAAAoJ,KAAA,CAAAvJ,EAAQ8P,EAAM,CAAC,MAAKvG,EAAA,mBAzSpE,4CAAA9I,EAAA,yBA0SsB,KACE,gBAAAV,EA3SxB,MA4S6BmR,GAAA,CACuBnR,EAAA,MAAAgP,GAAA,CAAAtO,EAAAF,EAA1BgJ,EAAuE,IAAvE,SAAAA,EA7S1B,sDA+SwC9D,EAAO,SA/S/C8D,EAAA,SAgTuCnJ,EAAf,EAAAN,EAAA,MAAAmP,GAAA,YAAAxJ,EAAA,OAhTxB8D,EAAA,WAAAnJ,EAAA,EAAAN,EAAA,MAAAoP,GAAA,cAAAzJ,EAAA,MAmTqC,KACN,KAAAtF,EAAW,CAAC,CAAK,KAAAoJ,KAAA,CAAAvJ,EAAQ8P,EAAM,CAAC,MAAKvG,EAAA,mBApTpE,4CAAA9I,EAAA,yBAqTsB,KACE,gBAAAV,EAtTxB,MAuT6BoR,GAAA,CACuBpR,EAAA,MAAAoP,GAAA,CAAA1O,EAAAF,EAA1BgJ,EAAuE,IAAvE,SAAAA,EAxT1B,sDA0TwC9D,EAAO,SA1T/C8D,EAAA,SA2TuCnJ,EAAf,EAAAN,EAAA,MAAAuP,GAAA,YAAA5J,EAAA,OA3TxB8D,EAAA,WAAAnJ,EAAA,EAAAN,EAAA,MAAAsR,GAAA,cAAA3L,EAAA,WA+TkB,KA/TlB,KAgUuC,8CAhUvCzF,EAAAgR,GAAA,CAiUqB,WAAOrE,EAAA,MACR,sBAAY3L,GAAA2L,EAAA,MAAA3L,EACZ,MAAO6O,EAAC,eAASlD,CAAA,EACjB,aACA,kBACA,eAAW,GACX,aAAM,OACN,aAAQ,yCAkBN,iEAbJ2C,GAQQ,CAAA3f,IArV1B,OA+U2B4V,EAAAqK,EAAA,CACP,IAAI,EACJ,QAAQ,GACP,8BAlVrB,QAoV8D5O,GAAA6O,EAAA,8BAAAlgB,EAAA,aApV9DwQ,EAoVqD,KAAAH,EApVrD8P,EAoV2C,CAAU,yBAAA3P,EAAA,IAAAY,EAAA,MAAAA,EAAA,KApVrDN,EAAA,8BAuVkB,KAEE,CADC,aAAAgF,EAAgB,GAAE,IAAAzF,EAAA8Q,EAAA,yFAKjB,OAGM,iBAAiB,aAAI,GAAjCjB,EAAA,gCAAAlgB,EAAA,GAAAyQ,EAAA,EAAAN,EAAA,MAAsDyP,GAhWtE,CAAAM,EAAA,+BAiW4BzP,MAAqB,OAAjCoP,GAAA,OAAA/J,EAAA,OAjWhBoK,EAAA,+BAkW4BzP,MAAqB,OAAjCqP,GAAA,QAAAhK,EAAA,OAlWhBoK,EAAA,gCAAAzP,EAAA,EAAAN,EAAA,OAAAuR,GAAA,YAAA5L,EAAA,UAAAA,EAAA,MAqWY,GACE,QAAY1F,EAAA,MAAAuR,GAAA,CAAAtR,EAAM4P,EAAO,CAAC,MAAO,GAAS,4BAtWxD,QAAA7O,EAAA,EAuWgB,IAAyBA,EAAA,IAAAC,GAAA6O,EAAA,mCAvWzC1P,EAuWgC,KAAAH,EAvWhC8P,EAuWgC,cAAA3P,EAAA,IAAAY,EAAA,MAAAA,EAAA,KAvWhCN,EAAA,mCA6WQ,QACEmQ,GAAW,cACXzQ,EAAkD,KAArCH,EAAA6Q,EAAA,EAAA7Q,EAAA4P,EAAA,CA/WvB,QAAA7O,EAAA,EA+WgD,IAAIA,EAAA,IAAAC,GAAA6O,EAAA,sDA/WpDpP,EAAA,usBCuHM,MAAC,QAAAnN,CAAO,EAAI8I,GAAW,EACvB,CACJ,cAAA+L,EACA,SAAAb,EACA,gBAAAF,EACA,YAAAS,EACA,kBAAAE,EACA,+BAAAsB,EACA,YAAAkI,EACA,cAAAC,GACEvK,GAAY,EAEVwK,EAAkB1a,EAAI,EAAK,EAC3B2a,EAAkB3a,EAAI,CAAC,EACvB4a,EAAa5a,EAAI,EAAE,EAEnB6a,EAAqB3b,EAAS,IAAM,CAClC,MAAA4b,EAAQvK,EAAS,MAAM,OAAQ+E,GAAiB,CAACA,EAAE,QAAQ,EAE7D,OAAAlE,EAAc,QAAU,UACnB0J,EAAM,OAAQxF,GAAMA,EAAE,SAAW,CAACA,EAAE,SAAS,EAE/CwF,EAAM,OAAQxF,GAAMA,EAAE,WAAa,CAACA,EAAE,OAAO,EACrD,EAEKyF,EAAgB7b,EAAS,IAAM,OACnC,IAAI4b,EAAQD,EAAmB,MAI/B,MAAMG,KAF2BloB,EAAAyJ,EAAQ,QAAR,YAAAzJ,EAAe,qBAAsB,CAAC,GAEpB,IAAKmoB,IAAO,CAC7D,MAAMzd,EAASyd,GAAG,KAAK,OAAS,EAAK,GAC/B5J,GAASD,EAAc,QAAU,UAAY,UAAY,YACzDtgB,EAAO,CACX,GAAI,gBAAgBmqB,GAAG,IAAI,GAC3B,KAAMA,GAAG,KACT,KAAM,QACN,SAAU,gBACV,KAAM,6BACN,YAAa,GACb,EAAGzd,EACH,EAAG,EACL,EACK,OAAA1M,EAAA,GAAGugB,EAAM,WAAW,EAAI,GACtBvgB,CAAA,CACR,EAED,OAAAgqB,EAAQA,EAAM,OAAQxF,IAAMA,GAAE,KAAK,YAAY,EAAE,SAASsF,EAAW,MAAM,YAAa,EAAC,EAEjFE,IAAM,OAAOE,CAAiB,EAC/BF,CAAA,CACR,EAGKI,EAAmBhc,EAAS,IACzB6b,EAAc,MAAM,OAAO,CAAC3nB,EAAKiiB,IAAS,CACzC,MAAA8F,EAAW9F,EAAK,UAAY,gBAC9B,OAACjiB,EAAI+nB,CAAQ,IACX/nB,EAAA+nB,CAAQ,EAAI,CAAC,GAEf/nB,EAAA+nB,CAAQ,EAAE,KAAK9F,CAAI,EAChBjiB,CACT,EAAG,EAAE,CACN,EAEKgoB,EAAqBpqB,GAClBgf,GAAShf,EAAM,EAAE,EAGpBqqB,EAAiC/qB,GAA4B,OAC3D,MAAAgrB,EAAWhrB,EAAM,EAAI,GAAKA,EAAM,EAAI,GAAKA,EAAM,EAAI,GAAKA,EAAM,EAAI,EACjE,OACL,iBAAiBA,GAAA,YAAAA,EAAO,QAAOwC,EAAAud,EAAgB,QAAhB,YAAAvd,EAAuB,IACtD,cAAewoB,CACjB,CACF,o9IC3JA,MAAM3b,EAAQC,GAAS,EAEjB2b,EAAOC,EAEP,CAAC,QAAAjf,CAAO,EAAI8I,GAAW,EAEvBoW,EAAgBzb,EAAI,CAAC,EAErB0b,EAAkBxc,EAAS,IAAMH,GAAM,QAAQ,kBAAkB,CAAC,EAClE4c,EAAWzc,EAAS,IAAMwc,EAAgB,MAAM,MAAM,EAGtDE,EAAc1c,EAAS,KAAO,CAClC,KAAM,4BACN,OAAQ,CACN,YAAaS,EAAM,OAAO,KAC1B,aAAcpD,EAAQ,MAAM,KAC9B,EACA,EACIsf,EAAY3c,EAAS,KAAO,CAAC,KAAM,iBAAmB,IAEtD4c,EAAa,IAAM,CACvBP,EAAK,cAAc,CACrB,EAEA,OAAAla,GAAU,IAAM,CACR,MAAA0a,EAAU,SAAS,eAAe,cAAc,EACtDN,EAAc,MAAQM,EAAQ,aACzBR,EAAA,gBAAiBE,EAAc,KAAK,EAC1C,2oDCtDcO,GAAA,CACb,KAAM,mBAEN,MAAO,CACL,UAAW,CACT,KAAM,QACN,QAAS,EACX,EACA,QAAS,CACP,KAAM,OACR,CAEJ,EA1BAlT,GAAA,cAAAS,GAAA,mBAAAI,GAAA,4CACER,EAQIa,EAAAiS,EAAAnD,EAAAvK,EAAApE,EAAA,CATN,OAAA8R,EAAA,WAAA5S,EAAA,EACyBN,EAAA,KAAmB,2BACxC,UAA0M,mBAAAkT,EAAA,iBAAAA,EAAA,oBAA9K,OAAa,CAAC,iBAA8B,mBAAY,MAAM,0BAAC,QAAM,IAAC,GAAE,IAAK,GAAE,IAAM,OAAwB,OAAwB,QAAY,QAAC,KAFlL,OAAAA,EAAA,gDAGY,OAAM,EAAC1S,EAAS,EAAAS,EAAK,CAAC,IAAOA,EAAA,GAAAhB,EAAA,UAAC,iBAA6B,aAAY,MAAM,uBAAC,QAAM,IAAC,GAAE,IAAqB,8BACpH,qCAAQ,KAAM,EAAC,GAAsBA,EAAA,UAAC,iBAA6B,aAAa,MAAI,CAAS,sBAAE,QAAM,IAAC,GAAEiT,EAAA,UAAqB,8BAC7H,qCAAQ,KAAG,EAAAtS,EAAA,EAAuCX,EAAA,UAAC,gCAAiB,WAAK,GAAQ,iBAA6B,aAAa,MAAI,CAAS,sBAAG,QAAI,IAAW,GAAEiT,EAAA,UAAqB,GAAaA,EAAA,iCAC9L,qCAAQ,KAAM,EAACrS,EAAS,EAAaZ,EAAA,UAAC,iBAA6B,aAAY,MAAM,uBAAE,QAAI,IAAW,GAAE,IAAqB,GAAaiT,EAAA,oEAClI,SAAApS,EAAA,EAAgDG,EAAA,CAAM,IAACA,EAAS,GAAAhB,EAAA,UAAC,MAAK,CAAO,4CAAC,OAAO,UAAK,KAAG,QAAI,QAAM,IAAC,GAAE,IAAqB,iEAC/H,YAAgDgB,EAAA,CAAM,IAACA,EAAS,GAAAhB,EAAA,UAAC,MAAK,CAAO,4CAAC,OAAO,UAAK,KAAG,QAAI,QAAM,IAAC,GAAE,IAAqB,8BAR3I,kDAAAF,EAAA,GAAA4F,EAAA,uCCEAva,GAAM,OAAO+nB,EAAS,EAET,MAAAC,GAAsB,MAAOC,GAAuB,CAE3D,aAAU,WAAa,OAAO,gBAC5B,IACI,gBAAU,UAAU,UAAUA,CAAU,EAC9C,QAAQ,IAAI,oDAAoD,QACzDxqB,EAAO,CACN,cAAM,iDAAkDA,CAAK,MAElE,CAYL,MAAMyqB,GAXgB,IAAM,CACpB,MAAAC,EAAS,SAAS,iBAAiB,uCAAuC,EAChF,UAAWD,KAASC,EACdD,KAAM,MAAM,UAAY,OACnBA,SAGJ,QACT,GAG4B,EAEtBE,EAAW,SAAS,cAAc,UAAU,EAalD,GAVAA,EAAS,MAAQH,EAGjBG,EAAS,MAAM,SAAW,WAC1BA,EAAS,MAAM,KAAO,UACtBA,EAAS,MAAM,IAAM,IACrBA,EAAS,MAAM,QAAU,IAChBA,EAAA,UAAU,IAAI,eAAe,EAGlCF,EAAO,CACH,MAAAG,EAASH,EAAM,cAAc,qBAAqB,EACpDG,EACFA,EAAO,YAAYD,CAAQ,EAElB,cAAK,QAAQA,CAAQ,CAChC,MAES,cAAK,QAAQA,CAAQ,EAGhCA,EAAS,MAAM,EACfA,EAAS,OAAO,EAEZ,IACiB,SAAS,YAAY,MAAM,EAE5C,QAAQ,IAAI,qDAAqD,EAEjE,QAAQ,MAAM,gDAAgD,QAEzD3qB,EAAO,CACN,cAAM,kDAAmDA,CAAK,SACtE,CACA2qB,EAAS,OAAO,EAClB,CAEJ,EAGaE,GAAQ,CAACrsB,EAAessB,EAAmB,IAC/C,WAAYtsB,EAAM,QAAQssB,CAAQ,CAAE,EAGhCrjB,GAA0BC,GACjCA,IAAM,MAAQ,MAAM,OAAOA,CAAC,CAAC,EACxB,IAEFA,EAAE,WAAW,QAAQ,wBAAyB,GAAG,EAgH7CqjB,GAAe7f,GAAyB,CACnD,IAAI8f,EAAO,EACPC,EAAO,EACPC,EAAO,EACPC,EAAO,EACP,SAAS,eAAe,GAAGjgB,EAAQ,EAAE,QAAQ,EAE/C,SAAS,eAAe,GAAGA,EAAQ,EAAE,QAAQ,EAAE,YAAckgB,EAG7DlgB,EAAQ,YAAckgB,EAGxB,SAASA,EAAc3nB,EAAG,CACxBA,EAAIA,GAAK,OAAO,MAChBA,EAAE,eAAe,EAEjBynB,EAAOznB,EAAE,QACT0nB,EAAO1nB,EAAE,QACT,SAAS,UAAY4nB,EAErB,SAAS,YAAcC,CAAA,CAGzB,SAASA,EAAY7nB,EAAG,CACtBA,EAAIA,GAAK,OAAO,MAChBA,EAAE,eAAe,EAEjBunB,EAAOE,EAAOznB,EAAE,QAChBwnB,EAAOE,EAAO1nB,EAAE,QAChBynB,EAAOznB,EAAE,QACT0nB,EAAO1nB,EAAE,QAETyH,EAAQ,MAAM,IAAM,GAAGA,EAAQ,UAAY+f,CAAI,KAC/C/f,EAAQ,MAAM,KAAO,GAAGA,EAAQ,WAAa8f,CAAI,KAGnD,SAASK,GAAmB,CAE1B,SAAS,UAAY,KACrB,SAAS,YAAc,KAE3B,ECnOO,SAASE,IAAW,CACvB,MAAMpe,EAAQC,GAAS,EAEjBsR,EAAWpR,EAAS,IAAMH,EAAM,QAAQ,mBAAmB,CAAC,EAE5Dqe,EAAWle,EAA4B,IAAMH,EAAM,QAAQ,mBAAmB,CAAC,EAE/Ese,EAAsBne,EAAwC,IAAM,cAAApM,EAAAsqB,EAAS,QAAT,YAAAtqB,EAAgB,YAAW,EAGrG,SAASwqB,EAAYhf,EAAc,CACzBS,EAAA,SAAS,uBAAwBT,CAAI,EAG/C,SAASif,EAAezsB,EAA0C,CACvD,OAAAiO,EAAM,SAAS,0BAA2BjO,CAAI,EAOlD,OACH,SAAAwf,EACA,SAAA8M,EACA,oBAAAC,EACA,iBARqB,MAAOvsB,GACrB,MAAMiO,EAAM,SAAS,4BAA6BjO,CAAI,EAQ7D,eAAAysB,EACA,YAAAD,CACJ,CACJ,ikDC+MME,GAAc,gDAhCpB,MAAM7d,EAAQC,GAAS,EACjB,CAAC,QAAArD,CAAO,EAAI8I,GAAW,EACvB,CAAC,YAAAiY,EAAa,eAAAC,CAAc,EAAIJ,GAAS,EACzC,CAAC,kBAAAzI,EAAmB,gBAAApB,CAAe,EAAIP,GAAe,EACtD,CACJ,iBAAA3C,EACA,gBAAAC,EACA,SAAAE,EACA,SAAAD,EACA,2BAAAY,EACA,oBAAAc,EACA,kBAAAhB,EACA,gBAAAW,EACA,uBAAAV,EACA,eAAAL,EACA,kBAAAW,EACA,eAAAM,EACA,YAAAO,EACA,mBAAAR,EACA,kBAAAE,EACA,eAAAG,GACA,cAAAb,EACA,iBAAAL,IACEb,GAAY,EAGVuN,EAAeC,GAAe,cAAc,EAC5CC,GAAaD,GAAe,YAAY,EAExCE,GAAeje,EAAM,OAAO,KAC5Bke,GAAc7d,EAAI,IAAI,EACtB8d,EAAoB9d,EAAI,IAAI,EAE5B+d,EAAmB/d,EAAI,GAAG,EAC1Bge,GAAoBhe,EAAI,GAAG,EAC3Bie,EAA0Bje,EAAI,GAAG,EACjCke,EAA+Ble,EAAI,GAAG,EACtCme,GAAYne,EAAI,CAAC,EACjBoe,GAA2Bpe,EAAI,GAAG,EAClCqe,GAA4Bre,EAAI,GAAG,EACnCse,GAAsBte,EAA+B,EAAE,EACvDue,EAA4Bve,EAAI,IAAI,EACpCwe,GAAiBxe,EAAI,CAAC,EACtBye,GAAiBze,EAAI,CAAC,EACtB0e,GAAgB1e,EAAI,EAAK,EAGzB2e,GAAiB3e,EAAI,CACzB,EAAG,EACH,EAAG,EACH,KAAM,EACN,OAAQ,KACR,OAAQ,EACR,OAAQ,EACR,YAAa,EACb,aAAc,GACf,EAEK4e,GAAwB5e,EAAI,EAAK,EACjC6e,GAAa7e,EAAI,EAAE,EACnB4a,GAAa5a,EAAI,EAAE,EACnB8e,GAAwB9e,EAAI,IAAI,EAChC+e,GAAuB/e,EAAI,EAAE,EAE7Bgf,GAAgB7tB,GAAsB,CAC1C,MAAM8tB,EAAS9tB,EAAM,OACrBgtB,GAAU,MAAQc,EAAO,SAC3B,EAGMC,GAAkBhgB,EAAS,IAAM,CACjC,IAAC4e,EAAkB,MACd,OACL,IAAK,EAAG,KAAM,EAAG,MAAO,EAAG,OAAQ,EAAG,OAAQ,CAChD,EAIF,MAAMqB,EAAMrB,EAAkB,MAAM,IAAMK,GAAU,MAAQ,GACtDiB,EAAOtB,EAAkB,MAAM,KAAO,OAAO,QAC7CuB,GAAQvB,EAAkB,MAAM,MAChCwB,GAASxB,EAAkB,MAAM,OACjCyB,GAASzB,EAAkB,MAAM,OAEhC,OACL,KAAM,OAFK,CAEM,EACjB,IAAK,OAAOqB,EAAI,QAAQ,CAAC,CAAC,EAC1B,KAAM,OAAOC,EAAK,QAAQ,CAAC,CAAC,EAC5B,MAAO,OAAOC,GAAM,QAAQ,CAAC,CAAC,EAC9B,OAAQ,OAAOC,GAAO,QAAQ,CAAC,CAAC,EAChC,OAAQ,OAAOC,GAAO,QAAQ,CAAC,CAAC,CAClC,EACD,EAEKC,GAAsBC,GAAgC,CACpD,MAAAC,EAAMD,EAAcP,GAAgB,MAAM,IAEhD,GAAIQ,GAAOC,GAAS,MAAM,OAAe,OAAAlD,GAAMiD,EAAK,CAAC,EAC/C,MAAAE,GAAa3O,EAAuB,MAAM,OAEhD,IAAI4O,GAAY,EAChB,QAASzhB,GAAI,EAAGA,IAAKwhB,GAAYxhB,KAAK,CAC9B,MAAA0hB,GAAeH,GAAS,MAAM,OAASvhB,GACvC2hB,GAAWC,GAAiB5hB,EAAC,EAC/BshB,GAAOI,GAAcH,GAAS,MAAM,QAAUD,GAAOI,KACvDD,GAAYH,EAAOC,GAAS,MAAM,QAAUvhB,GAAI,GAAM2hB,GACxD,CAEK,OAAAtD,GAAMoD,GAAW,CAAC,CAC3B,EAGMI,GAAmB/gB,EAAS,IAAM,OACtC,OAAOpM,EAAAud,EAAgB,QAAhB,YAAAvd,EAAuB,GAC/B,EAEKotB,GAA6BhhB,EAAS,KAClC6e,EAAiB,MAAQoC,GAAkB,OAAS,CAC7D,EAEKC,GAAclhB,EAAS,KACnBihB,GAAkB,MAAQ/B,GAAyB,OAASA,GAAyB,KAC9F,EAEKiC,GAA4BnhB,EAAS,IAClCghB,GAA2B,MAAQhC,EAA6B,KACxE,EAEKoC,GAAwBC,GAA2B,CACjD,MAAAC,EAAYb,GAAS,MAAM,OAC3Bc,GAAcpC,GAA0B,MACxCqC,GAAYH,EAASC,EACpB,OAAA/D,GAAMiE,GAAYD,GAAa,CAAC,CACzC,EAEME,GAAuBJ,GAA2B,CAChD,MAAAK,EAAWjB,GAAS,MAAM,MAC1BkB,GAAazC,GAAyB,MACtCsC,GAAYH,EAASK,EACpB,OAAAnE,GAAMiE,GAAYG,GAAY,CAAC,CACxC,EAEMb,GAAoBvN,GACf+K,IAAe/K,EAAO,GAAM,IAAU,IAG3CqO,GAAqB,IAAM,CACd/C,EAAA,MAAQN,EAAa,MAAM,YAC5CO,GAAkB,MAAQD,EAAiB,MAAQ4B,GAAS,MAAM,MAAQrB,GAAoB,MAAM,MACtG,EAGMyC,GAAsB,IACnB,MAAM,KAAK,SAAS,iBAAiB,iBAAiB,CAAC,EAI1DC,GAAyB,IAAM,CAClBD,GAAoB,EAE5B,QAASE,GAAM,CACpBA,EAAA,aAAa,SAAU,QAAQ,EAC/BA,EAAA,aAAa,eAAgB,GAAG,EAChCA,EAAA,UAAU,OAAO,gBAAgB,EACpC,EAEDvC,GAAc,MAAQ,EACxB,EAEMwC,GAAeC,GAAuB,CAC1CA,EAAI,eAAe,EACnB,MAAMlC,EAASkC,EAAI,OACbjxB,GAAMixB,EAAI,IAAI,YAAY,EAGhC,GAFuB,EAAC,QAAS,UAAU,EAAE,SAASlC,EAAO,SAAS,EAItE,OAAQ/uB,GAAK,CAEX,IAAK,YACL,IAAK,SACiBkxB,GAAA,EACpB,MAEF,IAAK,KACCD,EAAI,SAAWA,EAAI,WACrBA,EAAI,eAAe,EACCE,GAAA,GAEtB,MAGF,IAAK,SACoBL,GAAA,EACvBzC,EAA0B,MAAQ,KAClCvM,EAAoB,IAAI,EACxB,MAGN,EAEMoP,GAAsB,IAAM,CAChC,MAAME,EAAYP,GAAoB,EAGlC,GAFJrC,GAAc,MAAQ,GAElB4C,EAAU,OAAS,EAAG,CAClB,MAAAC,EAAqBD,EAAU,IAAKE,IAAA,QAAM,OAAA1uB,GAAA0uB,GAAE,gBAAF,YAAA1uB,GAAiB,GAAE,EAAE,OAAO,OAAO,EAEnFwuB,EAAU,QAASE,IAAMA,GAAE,aAAa,QAAS,eAAe,CAAC,EAGjExQ,EAAkB,MAAM,QAAQ,CAAClgB,GAAM8H,KAAU,CAC3C2oB,EAAmB,SAASzwB,GAAK,EAAE,GACrC6gB,EAAgB,CAAC,KAAM,KAAM,MAAA/Y,EAAA,CAAM,CACrC,CACD,EAEsBooB,GAAA,EACvBzC,EAA0B,MAAQ,KAClCvM,EAAoB,IAAI,EAExBjf,EAAK,QAAQ,CACX,QAAS,gBACV,EAGH2rB,GAAc,MAAQ,EACxB,EAEM+C,GAAsB,CAACvxB,EAAaixB,IAAuB,QAC/DA,EAAI,eAAe,EACnB,MAAMO,GAAWX,GAAoB,EAE/BY,GAAWR,EAAI,SAAW,GAAK,EAGjC,GAAAO,GAAS,OAAS,EAAG,CACvB,MAAME,IAAY9uB,GAAA4uB,GAAS,CAAC,EAAE,gBAAZ,YAAA5uB,GAA2B,GACvC+uB,GAAY7Q,EAAkB,MAAM,UAAWwQ,IAAMA,GAAE,KAAOI,EAAS,EAE7E,GAAIC,KAAc,GAAI,CACd,MAAA/wB,GAAOkgB,EAAkB,MAAM6Q,EAAS,EAC9C,IAAIC,GAAOhxB,GAAK,EACZixB,GAAOjxB,GAAK,EAEhB,OAAQZ,EAAK,CACX,IAAK,UACK6xB,IAAAJ,GACR,MACF,IAAK,YACKI,IAAAJ,GACR,MACF,IAAK,YACKG,IAAAH,GACR,MACF,IAAK,aACKG,IAAAH,GACR,MAGI,YAAI,SAASG,EAAI,EAAE,EAC3BA,GAAOE,GAAqBF,EAAI,EAChCC,GAAOE,GAAqBF,EAAI,EAChBpQ,EAAA,CACd,KAAM,CAAC,GAAG7gB,GAAM,EAAGgxB,GAAM,EAAGC,EAAI,EAAG,MAAOF,EAAA,CAC3C,EAEDtD,EAA0B,MAAQ,CAAC,GAAGztB,GAAM,EAAGgxB,GAAM,EAAGC,EAAI,EAC9D,CAEJ,EAEMG,GAAkBhjB,EAAS,IACxB8R,EAAkB,MAAM,CAAC,CACjC,EAEKmR,GAA4BjjB,EAAS,IAAM,SAC/C,OAAOrM,GAAAC,EAAAyJ,EAAQ,QAAR,YAAAzJ,EAAe,qBAAf,YAAAD,EAAmC,OAAQouB,IAAM,CAAC,WAAY,OAAO,EAAE,SAASA,GAAE,UAAU,EAAC,CACrG,EAEKlG,GAAgB7b,EAAS,IAAmB,CAEhD,MAAM4b,EAAQvK,EAAS,MAAM,OAAQ+E,IAAiB,CAACA,GAAE,UAAYA,GAAE,KAAK,cAAc,SAASsF,GAAW,MAAM,aAAa,CAAC,EAG5HI,EAAoBmH,GAA0B,MAAM,IAAKlH,KAAQ,CACrE,GAAI,gBAAgBA,GAAG,IAAI,GAC3B,KAAMA,GAAG,KACT,KAAM,QACN,SAAU,gBACV,KAAM,6BACN,YAAa,GACb,EAAIA,GAAG,KAAK,OAAS,EAAK,GAC1B,EAAG,IACH,EAEF,MAAO,CAAC,GAAGH,EAAO,GAAGE,CAAiB,EACvC,EAQKoH,GAAqB5kB,GAA0B,CAGnD,MAAM6kB,GADoB,CAAC1C,GAAS,MAAM,MACE,IACtCS,GAAciC,KAAoB,EACpC,EACAA,GAAkB,IAEtB,OAAO5F,GAAOjf,EAASA,EAAQ4iB,GAAe,CAAC,CACjD,EAQMkC,GAAqB,CAAC9kB,EAAe+hB,IAClC9C,GAAM2F,GAAkB5kB,CAAK,GAAK+hB,EAAS/hB,GAAQ,CAAC,EAGvD+kB,GAAoB/kB,GAA0BglB,GAAYhlB,EAAO4gB,GAAyB,MAAO,OAAO,EAExGqE,GAAqBlD,GAA2BiD,GAAYjD,EAAQlB,GAA0B,MAAO,QAAQ,EAE7GmE,GAAc,CAACpyB,EAAesyB,EAAmBjT,KAA0B,CACzE,MAAAkT,GAAe,OAAOvyB,CAAK,EAE7B,aAAMuyB,EAAY,GACpB,QAAQ,MAAM,WAAWlT,EAAK,UAAWrf,CAAK,EACvC,GAGF,KAAK,IAAI,YAAYuyB,GAAeD,GAAW,QAAQ,CAAC,CAAC,CAAC,CACnE,EAEM7hB,GAAAyP,EAAWsS,GAAgB,gBAC/BxE,GAAyB,QAAQvrB,IAAAC,EAAA8vB,GAAA,YAAAA,EAAa,YAAb,YAAA9vB,EAAwB,aAAxB,YAAAD,GAAoC,QAAS,IAC9EwrB,GAA0B,QAAQ9H,IAAA3V,GAAAgiB,GAAA,YAAAA,EAAa,YAAb,YAAAhiB,GAAwB,aAAxB,YAAA2V,GAAoC,SAAU,KAC/E,CAAC,KAAM,GAAK,EAGf,MAAMsM,GAAgC,IAAM,CAC1C,MAAMC,EAAY3C,GAAkB,MAAQR,GAAS,MAAM,MACnD,YAAI,gBAAgBmD,CAAS,EAAE,EAC/B,YAAIlS,EAAe,KAAK,EAEhC0N,GAAoB,MAAQ,CAAC,GAAG1N,EAAe,KAAK,EAEpD0N,GAAoB,MAAM,QAAQ,CAACyE,EAAGnqB,KAAU,CAG1CA,KAAU,IACd0lB,GAAoB,MAAM1lB,EAAK,EAAE,SAAYA,GAAQkqB,EAActF,GAAc5kB,GAAA,CAClF,EAEgBoqB,GAAA,CACnB,EAGMniB,GAAAoQ,EAAyBO,GAAW,CACxC,MAAMsR,EAAYrG,GAAM0D,GAAkB,MAAQR,GAAS,MAAM,MAAO,CAAC,EACjE,YAAI,eAAemD,CAAS,EAAE,EACtC,QAAQ,IAAItR,CAAM,EAElBD,EAAkBC,EAAO,IAAI,CAACpT,GAAGxF,MAAW,CAC1C,KAAMwF,GACN,SAAWxF,GAAQkqB,EAActF,GAAc5kB,IAC/C,CAAC,EAEC4Y,EAAO,OAAS,IACDuM,EAAA,MAAQN,EAAa,MAAM,YAC5C,QAAQ,IAAI,qBAAqBM,EAAiB,KAAK,EAAE,EACzDC,GAAkB,MAAQ2B,GAAS,MAAM,OAASA,GAAS,MAAM,MACjE3B,GAAkB,MAAQD,EAAiB,MAAQ4B,GAAS,MAAM,MAAQnO,EAAO,OAEjFyM,EAAwB,MAAQ,SAAS,eAAe,sBAAsB,EAAE,YAGlD4E,GAAA,EAChC,CACD,EAEK,MAAAI,GAAgBC,GAAsB,CAC1C,QAAQ,IAAI,gBAAgB,EAC5B,QAAQ,IAAIA,CAAS,EAErB,MAAMC,EAAe7E,GAAoB,MAAM4E,CAAS,EAAE,SAC1DzF,EAAa,MAAM,SAAS,CAC1B,IAAK0F,EACL,KAAM,EACN,SAAU,SACX,CACH,EAEA9hB,GAAU,IAAM,CACdic,EAAYM,EAAY,EAEjB,wBAAiB,SAAUkD,GAAoB,EAAK,EAClD,0BAAiB,QAASI,GAAa,EAAK,EAC5C,0BAAiB,UAAWkC,GAAe,EAAK,EAG7CvF,GAAA,MAAQ,SAAS,eAAe,oBAAoB,EAG1D,MAAAwF,EAAc,SAAS,eAAe,2BAA2B,EAG1CnF,EAAA,MAAQmF,EAAY,sBAAwB,OAKnE,MAAAC,EAAwBzF,GAAY,MAAM,sBAAsB,EAEtEC,EAAkB,MAAQ,CACxB,IAAKwF,EAAsB,IAC3B,KAAMA,EAAsB,KAC5B,MAAOA,EAAsB,MAC7B,OAAQA,EAAsB,OAC9B,OAAQA,EAAsB,OAC9B,MAAOA,EAAsB,MAC7B,EAAGA,EAAsB,EACzB,EAAGA,EAAsB,CAC3B,EAEuB,MAAM,KAAK,SAAS,uBAAuB,iBAAiB,CAAC,EACrE,QAASvpB,IAAO,CAC7B4iB,GAAY5iB,EAAE,EACf,EACF,EAGK,MAAAomB,GAAoBjhB,EAAS,IAC1B6e,EAAiB,MAAQ,EACjC,EAEKwF,GAA6BrkB,EAAS,IAAM,SACzC,QAAArM,GAAAC,EAAAwd,EAAS,QAAT,YAAAxd,EAAgB,YAAhB,YAAAD,EAA2B,aAAc,CAC9C,MAAO,IACP,OAAQ,GACV,EACD,EAEK2wB,GAAiCtkB,EAAS,IAAM,CAC9C,MAAAukB,EAAIF,GAA2B,MAAM,OACrCG,EAAIH,GAA2B,MAAM,MACpC,OAAA9G,GAAMiH,EAAID,EAAG,CAAC,EACtB,EAEK9D,GAAWzgB,EAAS,IAAM,CAC9B,MAAM1B,EAAQ2iB,GAAkB,MAC1BZ,EAAS/hB,EAAQgmB,GAA+B,MAChDG,GAAQnmB,EAAQ+hB,EACf,OACL,MAAA/hB,EACA,OAAA+hB,EACA,MAAAoE,EACF,EACD,EAGKX,GAAmB,IAAM,CAC7BhS,EAAkB,MAAM,QAAQ,CAAClgB,EAAwB+wB,IAAsB,CAC7E,MAAM+B,GAAS5D,GAAiBlvB,EAAK,MAAQ,CAAC,EAEzCA,EAAA,OAASyxB,GAAiBzxB,EAAK,SAAS,EACxCA,EAAA,OAAS2xB,GAAkB3xB,EAAK,SAAS,EAE9CA,EAAK,EAAK6uB,GAAS,MAAM,MAAQ7uB,EAAK,OAAU,EAAI,EAAI2rB,GAAMkD,GAAS,MAAM,MAAQ7uB,EAAK,OAAQ,CAAC,EAC9FA,EAAA,EAAI,KAAK,OAAQ6uB,GAAS,MAAM,OAAS7uB,EAAK,OAAU8yB,IAAU,GAAM,EAAI,IAC5E9yB,EAAA,EAAI2rB,GAAMkD,GAAS,MAAM,MAAQ4C,GAAiBzxB,EAAK,aAAa,EAAG,CAAC,EACxEA,EAAA,EAAI2rB,GAAMkD,GAAS,MAAM,OAAS8C,GAAkB3xB,EAAK,cAAc,EAAG,CAAC,EAC3EA,EAAA,KAAO+yB,GAAoB/yB,EAAK,CAAC,EAEtB6gB,EAAA,CACd,KAAA7gB,EACA,MAAO+wB,CAAA,CACR,EACF,CACH,EAEMG,GAAwB1oB,GAAc,CAElC,YAAI,0BAA4BA,CAAC,EACjC,YAAI,0BAA4BklB,GAAe,KAAK,EAEpD,YAAI,qCAAuC6B,GAA0B,KAAK,EAClF,MAAMvjB,EAAUyhB,EAA0B,MACpCuF,GAAgBnE,GAAS,MAAM,MAGrC,OAAIrmB,EAAI,GACE,YAAI,qCAAsC,sBAAsB,EACjE,GAILA,EAAIwD,EAAQ,EAAIgnB,IACV,YAAI,sCAAuC,sBAAsB,EAClEA,GAAgBhnB,EAAQ,IAIzB,YAAI,yBAA0B,sBAAsB,EACrDxD,EAET,EAEM2oB,GAAwB8B,GAAmB,CAG3C,GAFI,YAAI,yBAA2BA,CAAM,EAEzCA,EAAS,EAAU,SAEvB,MAAMjnB,EAAUyhB,EAA0B,MACpCyF,GAAiBrE,GAAS,MAAM,OAChCC,GAAatB,GAAoB,MAAM,OACvC2F,GAAcJ,GAAoBE,CAAM,EAExCG,IAAcD,GAAc,IAAMD,GAAiBxG,IACnD2G,GAAWD,GAAaF,GACxBI,GAAgBL,EAASjnB,EAAQ,EAGvC,GAAKinB,EAASjnB,EAAQ,GAAMqnB,IAAYJ,EAASI,GAAW3G,GAClD,mBAAI,uCAAwC,uCAAuC,EACpF2G,GAAWrnB,EAAQ,EAI5B,MAAMunB,GAAkBL,GAAiBpE,IAAgBA,GAAa,GAAKpC,GAGvE,OAAAyG,KAAgBrE,IAAcwE,GAAgBC,IACxC,YAAI,2CAA4C,sBAAsB,EACvEA,GAAiBvnB,EAAQ,GAI9BinB,EAASG,IAAcE,GAAgBD,GAAWrnB,EAAQ,GACpD,YAAI,qCAAsC,sBAAsB,EACjEonB,KAID,YAAI,yBAA0B,sBAAsB,EACrDH,EACT,EAGMO,GAAgBjvB,GAAkB,OACtC,QAAQ,IAAI,MAAM,EAClBA,EAAE,eAAe,EAKT,YAAI,mBAAoB,sBAAsB,EAEtD,QAAQ,IAAI,qCAAuCkpB,EAA0B,MAAM,CAAC,EACpF,QAAQ,IAAI,6BAA+BW,GAAgB,MAAM,GAAG,EAChE,IACF,MAAMqF,GAAiB/E,GAAmBjB,EAA0B,MAAM,EAAIW,GAAgB,MAAM,GAAG,EAE/F,YAAI,mBAAqBqF,EAAc,EAC/ChG,EAA0B,MAAM,UAAYgG,GAClBhG,EAAA,MAAM,UAAY9B,GAAMkE,GAAoBzP,EAA2B,MAAM,CAAC,EAAG,CAAC,EAClFqN,EAAA,MAAM,UAAY+B,GAAqBpP,EAA2B,MAAM,EAAI8O,KAAiBltB,EAAAud,EAAgB,QAAhB,YAAAvd,EAAuB,OAAQ,CAAC,CAAC,EAC9HyrB,EAAA,MAAM,kBAAoB+B,GAAqBiE,EAAc,QAChFlvB,GAAG,CACV,QAAQ,MAAMA,EAAC,EAGjBmpB,GAAe,MAAQ,EACvBC,GAAe,MAAQ,CACzB,EAGM+F,GAAuB,IAAM,CACjCxT,EAAkB,MAAM,QAAQ,CAAClgB,EAAwB+wB,IAAsB,CAC7E,MAAM+B,GAAS5D,IAAiBlvB,GAAA,YAAAA,EAAM,OAAQ,CAAC,EAE7BkgB,EAAA,MAAM6Q,CAAS,EAAE,UAAYlB,GAAoB3P,EAAkB,MAAM6Q,CAAS,EAAE,CAAC,EACrF7Q,EAAA,MAAM6Q,CAAS,EAAE,UAAYvB,GAAqBtP,EAAkB,MAAM6Q,CAAS,EAAE,EAAI+B,EAAM,EAUlH,CACH,EAEMa,GAAe,IAAM,CACzB,QAAQ,IAAI,0BAA0B,EACjBD,GAAA,EAErB,MAAM9xB,EAAU,KAAK,UAAUse,EAAkB,KAAK,EAEvCuM,EAAA,CACb,QAAS,KAAK,UAAU7qB,CAAO,CAAC,EAChC,SAAU4d,EAAS,MACpB,CACH,EAGM8S,GAAiBjC,GAAuB,CACtC,MAAAjxB,EAAMixB,EAAI,IAAI,YAAY,EAM5BA,EAAI,SAAWjxB,IAAQ,MACzB,QAAQ,IAAI,MAAM,EAClBixB,EAAI,eAAe,EACf/Q,EAAiB,MAAM,SAAW,IACvBqU,GAAA,GAMbtD,EAAI,SAAWjxB,IAAQ,MACzBixB,EAAI,eAAe,EACCE,GAAA,IAIlBnxB,IAAQ,WAAaA,IAAQ,aAAeA,IAAQ,aAAeA,IAAQ,eAC7EuxB,GAAoBvxB,EAAKixB,CAAG,CAGhC,EAEM0C,GAAuBpE,GAAgC,CAC3D,MAAMC,EAAM,KAAK,IAAI,EAAGD,CAAW,EAC7BiF,GAAsB/E,GAAS,MAAM,OACrCC,GAAa3O,EAAuB,MAAM,OAE5C,GAAAyO,GAAOgF,GAAsBlH,GAAoB,SAGrD,QAASpf,GAAI,EAAGA,IAAKwhB,GAAYxhB,KAAK,CAC9B,MAAAumB,GAAUD,IAAuBtmB,GAAI,GACrCwmB,GAAcF,GAAsBtmB,GAAKof,GAG3C,GAAAkC,GAAOiF,IAAWjF,GAAOkF,GACnB,mBAAI,SAASxmB,EAAC,EAAE,EACjBA,EACT,CAEK,OAAAwhB,EACT,EAEMyB,GAAsB,IAAM,CAChC,MAAMwD,EAAkB9D,GAAoB,EAExC,GAAA8D,EAAgB,OAAS,EAAG,CAC9B,MAAMC,EAAsB9T,EAAkB,MAAM,KAAMwQ,IAAwBA,GAAE,KAAOqD,EAAgB,CAAC,EAAE,cAAc,EAAE,EAE9H,GAAIC,EAAqB,CACvB,MAAMC,GAAa,KAAK,MAAM,KAAK,UAAUD,CAAmB,CAAC,EACjEC,GAAW,GAAK,GAAGA,GAAW,IAAI,IAAI3S,GAAa,GACxC2S,GAAA,EAAID,EAAoB,EAAI,GAC5BC,GAAA,EAAID,EAAoB,EAAI,GAChB9D,GAAA,EACAA,GAAA,EACLhQ,EAAA,MAAM,KAAK+T,EAAU,EAEvChyB,EAAK,QAAQ,CACX,QAAS,SACV,EACH,CAEJ,EAEMiyB,GAAe3vB,GAAkB,CACrCqpB,GAAc,MAAQ,CAAC,CAAErpB,EAAE,OAAuB,aAAa,WAAW,CAC5E,EAGM4vB,GAAcngB,GAAc,CAChC,IAAIogB,EAAO,+CACX,GAAIpgB,EAEF,UAAW5U,MAAO4U,EAEZA,EAAK,eAAe5U,EAAG,IACzBg1B,GAAQ,uDAAuDh1B,EAAG,wCAAwC4U,EAAK5U,EAAG,CAAC,iBAIjH,OAAAg1B,GAAA,6CACDA,CACT,EAGMC,GAAgBr0B,GAChBA,GAAA,MAAAA,EAAM,iBACJA,EAAK,OAAS,YACT,sBAEF,aAAaA,EAAK,IAAI,GAG3BA,GAAA,MAAAA,EAAM,mBACJA,EAAK,OAAS,YACT,wBAEF,eAAeA,EAAK,IAAI,GAE1BA,EAAK,KAGRs0B,GAAoBt0B,GAEjBA,EAAK,OAAS,YAAc,UAAY,UAG3Cu0B,GAAsBv0B,IACnB,CACL,0BAA2BA,EAAK,kBAAoB,GACpD,oCAAqCA,EAAK,oBAAsB,EAClE,GAGIw0B,GAAwBx0B,GACxB,CAAC,YAAa,YAAY,EAAE,SAASA,EAAK,IAAI,EACzCA,EAAK,SAAYsvB,GAAY,MAAQ,EAEtCA,GAAY,MAAQ,GAGxBmF,GAA4Bz0B,GACzB,CAAC,YAAa,YAAY,EAAE,SAASA,EAAK,IAAI,EAAKsvB,GAAY,MAAQtvB,EAAK,SAAasvB,GAAY,MAAQtvB,EAAK,SAAY,GAGjI00B,GAAkB,IAAM,CAC5B,IAAIC,EAAQ,EACM,OAAAzU,EAAA,MAAM,QAASlgB,GAA2B,CACtDA,EAAK,OAAS,YAChB20B,GACF,CACD,EACMA,CACT,EAEMC,GAAkB,IAAM,CAC5BhH,GAAc,MAAQ,GACCsC,GAAA,EACJpP,EAAA,EACnBI,EAAoB,IAAI,EACxB4M,GAAsB,MAAQ,GAE9B7rB,EAAK,QAAQ,CACX,QAAS,oDACV,CACH,EAEM4yB,GAAwB70B,GAA2B,CACvDytB,EAA0B,MAAQztB,EAClCkhB,EAAoBlhB,CAAI,CAC1B,EAEM80B,GAAiBvwB,GAAa,CAClC,QAAQ,IAAI,sBAAsB,EAClC,QAAQ,IAAIA,CAAC,CACf,EAEMwwB,EAAatnB,GAAmB,CAEpC,QAAQ,IAAI,WAAW,EACvB,QAAQ,IAAIA,CAAO,CACrB,EAEMunB,EAAgClE,GAAsB,CAC1D,QAAQ,IAAI,8BAA8B,EACpC,MAAAmE,EAAiB,SAAS,eAAenE,CAAS,EAClDyB,GAAc,SAAS,cAAc,eAAe,EAEtD0C,GACaA,EAAA,oBAAoB,YAAaC,EAAiB,EAE/D3C,IACUA,GAAA,oBAAoB,WAAY4C,EAAgB,CAEhE,EAEMD,GAAqB3wB,GAAiB,CAC1C,MAAM0wB,EAAiB,SAAS,eAAejH,GAAsB,KAAK,EAClE,YAAIA,GAAsB,KAAK,EACvC,QAAQ,IAAIiH,CAAc,EAC1B,QAAQ,IAAI,WAAW,EACrB1wB,EAAA,aAAa,QAAQ,aAAc,UAAU,EAEzC,MAAA6wB,GAAeH,EAAe,sBAAsB,EAC3CvH,GAAA,MAAQnpB,EAAE,QAAU6wB,GAAa,KACjCzH,GAAA,MAAQppB,EAAE,QAAU6wB,GAAa,GAClD,EAEMD,GAAoB5wB,GAAkB,CAC1C,QAAQ,IAAI,kBAAkB,EAEJkpB,EAAA,MAAM,EAAIyD,GAAqB3sB,EAAE,QAAUmpB,GAAe,MAAQ6B,GAA0B,KAAK,EACjG9B,EAAA,MAAM,EAAI0D,GAAqB5sB,EAAE,QAAUopB,GAAe,MAAQS,GAAgB,MAAM,GAAG,EACrHX,EAA0B,MAAM,KAAOsF,GAAoBtF,EAA0B,MAAM,CAAC,EAE5FlpB,EAAE,eAAe,CACnB,EAEM8wB,GAAc9wB,GAAkB,CAC5B,YAAI,gBAAiB,kCAAkC,EAC/D,MAAM4pB,EAAS5pB,EAAE,OAKjB,GAHQ,YAAI4pB,EAAO,cAAc,EAAE,EACxBtB,GAAA,MAAM,MAAM,QAAU,OAE7BoB,GAAqB,OAASA,GAAqB,QAAUE,EAAO,GAAI,CAClE,YAAI,yCAA0C,kCAAkC,EAClF,MAAAmH,GAAQ,IAAIrH,GAAqB,KAAK,GACtCsH,GAAY,SAAS,cAAcD,EAAK,EAC1CC,IACQA,GAAA,UAAU,OAAO,gBAAgB,CAC7C,CAEmBtH,GAAA,MAAQE,EAAO,cAAc,GAEhC,SAAS,iBAAiB,uCAAuC,EAErE,OAAS,IACb,YAAI,yCAA0C,kCAAkC,EACtEjO,EAAA,MAAM,QAASiQ,IAAwB,CACvDA,GAAE,OAAS,UACZ,EAEsBD,GAAA,EACvBzC,EAA0B,MAAQ,CAAC,GAGjC,CAACU,EAAO,UAAU,SAAS,yBAAyB,GAAKA,EAAO,KAAO,+BACjE,YAAI,yCAA0C,kCAAkC,EACjFA,EAAA,UAAU,OAAO,gBAAgB,EAExC6G,EAA6BhH,GAAsB,KAAK,GAGrDG,EAAO,aAAa,YAAY,IACnC,QAAQ,IAAI,wBAAwB,EACb+B,GAAA,EACvBzC,EAA0B,MAAQ,CAAC,EACnCvM,EAAoB,IAAI,GAGnBiN,EAAA,UAAU,IAAI,SAAS,EACbqH,GAAA,CACnB,EAGMA,GAAmB,IAAM,CACvB,MAAAjD,EAAc,SAAS,cAAc,eAAe,EACpD0C,EAAiB,SAAS,eAAejH,GAAsB,KAAK,EAEtEiH,IACaA,EAAA,iBAAiB,YAAaC,EAAiB,EAElD3C,EAAA,iBAAiB,WAAY4C,EAAgB,EAEhD,cAAK,iBAAiB,OAAQ3B,EAAY,EAEvD,EAGMzjB,GAAA,IAAMkd,EAAiB,MAAO,IAAM,CAC7BJ,GAAA,MAAM,MAAM,QAAU,OAChBqF,GAAA,EACaH,GAAA,EAC/B,EAEK,MAAA0D,GAAgB,CAAClxB,EAAevE,IAA2B,CAG/D,MAAMmuB,GAAS5pB,EAAE,OAEM2rB,GAAA,EACTtC,GAAA,MAAQO,GAAO,aAAa,WAAW,EAC/BH,GAAA,MAAQG,GAAO,cAAc,GACnDkH,GAAW9wB,CAAC,EACR4pB,GAAO,aAAa,YAAY,IAClC,QAAQ,IAAI,qBAAqB,EAC1BA,GAAA,UAAU,IAAI,gBAAgB,EACrCV,EAA0B,MAAQztB,EAClC60B,GAAqB70B,CAAI,EAE7B,EAEM01B,GAAsB11B,GAA2B,CAC7C,YAAI,wBAAyB,kCAAkC,EACvE,MAAMoN,EAAOpN,EAAK,KAClB,GAAI,CAACoN,EAAa,OAAC,EAAE,EAEf,MAAAuoB,GAAQvoB,EAAK,MAAM,GAAG,EAE5B,GAAIuoB,GAAM,SAAW,EAAG,MAAO,CAAC,EAAE,EAClC,GAAIA,GAAM,SAAW,EAAU,OAAC31B,EAAK,IAAI,EAEnC,MAAAiJ,GAAK,SAAS,cAAc,KAAK,EAC9B,cAAK,YAAYA,EAAE,EAE5BA,GAAG,MAAM,SAAW,WACpBA,GAAG,MAAM,QAAU,SACnBA,GAAG,MAAM,SAAW,GAAGwrB,GAAyBz0B,CAAI,CAAC,KAElDiJ,GAAA,MAAM,aAAa,EAAI,SAE1B,IAAI2sB,GAAO,CAAC,EACRC,GAAY,EAEhB,QAASvoB,GAAI,EAAGA,GAAIqoB,GAAM,OAAQroB,KAAK,CAC/B,MAAAwoB,GAAOH,GAAMroB,EAAC,EACpBrE,GAAG,WAAa6sB,GACZ7sB,GAAG,YAAcjJ,EAAK,eACnB41B,GAAA,KAAK3sB,GAAG,SAAS,EACV4sB,GAAAvoB,GACZrE,GAAG,UAAY,IAEfA,GAAG,WAAa,GAClB,CAII,OAAA0sB,GAAA,OAAO,EAAGE,EAAS,EACzBD,GAAOA,GAAK,OAAOD,GAAM,KAAK,GAAG,CAAC,EAEzB,cAAK,YAAY1sB,EAAE,EAErB2sB,EACT,EAEMG,GAAkBxxB,GAAkB,CAExC,MAAMyxB,GADSzxB,EAAE,OACW,WAexB,GAbJspB,GAAe,MAAQ,CACrB,GAAGA,GAAe,MAClB,OAAQmI,GAAa,GACrB,QAASzxB,EAAE,QACX,QAASA,EAAE,OACb,EAEIyxB,GAAa,GAAG,WAAW,MAAM,GACnCC,GAA4BD,GAAczxB,CAAC,EAG3B,SAAS,iBAAiB,uCAAuC,EAErE,OAAS,EAAG,CACxB4c,GAAe,EAAK,EAEd,MAAA+U,GAAc,SAAS,cAAc,eAAe,EACpD7H,GAAM9pB,EAAE,MAAQ2xB,GAAY,UAAY,EAE9CzI,EAA0B,MAAM,EAAIlpB,EAAE,MAAQgrB,GAA0B,MACxE9B,EAA0B,MAAM,EAAIY,GAChC,GACAR,GAAe,MAAM,aACzBJ,EAA0B,MAAM,KAAOsF,GAAoBtF,EAA0B,MAAM,CAAC,EAC5FA,EAA0B,MAAM,UAAYiB,GAAmBjB,EAA0B,MAAM,CAAC,EAEhG,MAAMgG,GAAiB/E,GAAmBjB,EAA0B,MAAM,EAAIW,GAAgB,MAAM,GAAG,EAC7EX,EAAA,MAAM,kBAAoB+B,GAAqBiE,EAAc,EAE3F,EAGMwC,GAA8B,CAACD,EAA2BzxB,IAAkB,CAChF,MAAM4xB,GAAa,CAACH,EAAa,GAAG,QAAQ,OAAQ,EAAE,EACvCnI,GAAA,MAAM,KAAOsI,GAAa,EAEnC,MAAAC,GAAOJ,EAAa,sBAAsB,EAE1CK,GADqB,SAAS,cAAc,eAAe,EACzB,aAExCxI,GAAe,MAAM,QAAUuI,GAAK,IAAMC,GAAa,UAEvDxI,GAAe,MAAM,EAAItpB,EAAE,QAAU6xB,GAAK,KAC1CvI,GAAe,MAAM,EAAIlC,GACvBpnB,EAAE,QAAUspB,GAAe,MAAM,aAAeA,GAAe,MAAM,QAAU,CACjF,CACF,EAEMyI,GAAqB,CAAClpB,EAAcmpB,IAEjC,KAAK,KAAKnpB,EAAK,OAASmpB,EAAW,EAAe,EAIrDC,GAAW,CAACC,EAAS,OAAS,CAC1B,YAAI,mBAAoB,iDAAiD,EAEjFhJ,EAA0B,MAAQ,CAAC,EAE7B,MAAAiJ,EAAezM,GAAc,MAAM,KAAMzF,IAAMA,GAAE,KAAOiS,CAAM,EACpE,GAAI,CAACC,EAAc,OAEnB,MAAMC,GAAU,GAAGD,EAAa,IAAI,IAAIpV,GAAa,GAC/CiV,GAAWG,EAAa,UAAY,GACpCtpB,GAAOspB,EAAa,OAAS,QAAUA,EAAa,KAAO,GAG3DE,GAAY,KAAK,IAAIxpB,GAAOkpB,GAAmBlpB,GAAMmpB,EAAQ,EAAIG,EAAa,GAAK,GAAI,EAAE,EACzFG,GAAgBvF,GAAkBsF,EAAS,EAC3CE,GAAiBtF,GAAmBoF,GAAWF,EAAa,GAAK,EAAE,EAEzE,QAAQ,IAAI,SAAStpB,EAAI,YAAYypB,EAAa,aAAaC,EAAc,EAAE,EAG/E,MAAMC,GAAY,GACZC,GAAY,IAAM3J,GAAU,MAC5B4J,GAAqB,CACzB,MAAOpH,GAAoBgH,EAAa,EACxC,OAAQrH,GAAqBsH,EAAc,EAC3C,EAAGjH,GAAoBkH,EAAS,EAChC,EAAGlH,GAAoBmH,EAAS,EAChC,UAAWnH,GAAoBmH,EAAS,CAC1C,EAGME,GAA8B,CAClC,GAAIP,GACJ,KAAM5D,GAAoBiE,EAAS,EACnC,EAAGD,GACH,EAAGC,GACH,UAAWA,GACX,EAAGH,GACH,EAAGC,GACH,cAAeG,GAAmB,MAClC,eAAgBA,GAAmB,OACnC,UAAWA,GAAmB,EAC9B,UAAWA,GAAmB,EAC9B,kBAAmBA,GAAmB,UACtC,OAAQ,KACR,KAAA7pB,GACA,MAAOspB,EAAa,MAAQ,GAC5B,SAAAH,GACA,UAAWG,EAAa,WAAa,GACrC,UAAW,GACX,OAAQ,YACR,SAAUA,EAAa,UAAY,GACnC,SAAUA,EAAa,UAAY,GACnC,OAAAD,EACA,KAAMC,EAAa,KACnB,YAAaA,EAAa,aAAe,GACzC,QAASA,EAAa,SAAW,CACnC,EAGAS,GAAgCD,GAAWR,CAAY,EAGvD3V,EAAemW,EAAS,EACxBhW,EAAoBgW,EAAS,EAE7BzJ,EAA0B,MAAQyJ,GAClClJ,GAAsB,MAAQ2I,GAETjD,GAAA,EACJxB,GAAA,CACnB,EAEMiF,GAAkC,CAACD,EAA6B3S,IAAoB,CACpFA,EAAK,OAAS,aAChB2S,EAAU,MAAQ,GACRA,EAAA,UAAY,WAAWxC,GAAiB,KAEhDnQ,EAAK,cACP2S,EAAU,GAAG5W,EAAc,KAAK,WAAW,EAAI,IAE7CiE,EAAK,UAAS2S,EAAU,iBAAmB,IAC3C3S,EAAK,YAAW2S,EAAU,mBAAqB,GACrD,EAGA,OAAAzf,GAAgB,IAAM,CACpB,QAAQ,IAAI,gBAAgB,EACrB,2BAAoB,SAAUuY,GAAoB,EAAK,EACrD,6BAAoB,QAASI,GAAa,EAAK,EAC/C,6BAAoB,UAAWkC,GAAe,EAAK,EAErCpC,GAAA,EACvBzC,EAA0B,MAAQ,KAGlCvM,EAAoB,IAAI,EACxBF,EAAkB,IAAI,EACvB,08bC7xCcoW,GAAA,CAEX,MAAO,CACI,OACH,qBAAsB,GACtB,qBAAsB,CAClB,MAAO,CACH,MAAO,EACP,SAAU,EACV,QAAS,EACb,EACA,SAAU,CACN,MAAO,EACP,SAAU,GACV,QAAS,GACb,EACA,UAAW,CACP,MAAO,EACP,SAAU,EACV,QAAS,CACb,EACA,sBAAuB,CACnB,MAAO,EACP,SAAU,EACV,QAAS,EACb,EACA,oBAAqB,CACjB,MAAO,EACP,SAAU,EACV,QAAS,EACb,EACA,OAAQ,CACJ,MAAO,EACP,SAAU,GACV,QAAS,GAEjB,EAEA,aAAc,CACV,QAAS,CACL,IAAK,GACL,IAAK,GACL,QAAS,GACT,mBAAoB,GACpB,cAAe,GACf,WAAY,GACZ,gBAAiB,GACjB,gBAAiB,GACjB,MAAO,GACP,SAAU,GACV,SAAU,GACV,uBAAwB,EAC5B,EACA,SAAU,CACN,IAAK,GACL,QAAS,GACT,WAAY,GACZ,gBAAiB,GACjB,gBAAiB,GACjB,MAAO,GACP,SAAU,GACV,uBAAwB,EAC5B,EACA,MAAO,EAEP,CAER,CACJ,EAEA,MAAO,CACH,YAAa,CACJ,YAAO,OAAO,wCAAyC,CACxD,KAAMC,YAAU,KAAK,gBAAgB,EACrC,cAAeA,YAAU,KAAK,oBAAoB,EACrD,EAET,EAEA,SAAU,CACN,GAAG9Z,GAAW,CACV,KAAM,YACN,oBAAqB,oCACrB,qBAAsB,wBACtB,MAAO,sBACP,aAAc,6BACd,sBAAuB,sCACvB,iBAAkB,iCAClB,qBAAsB,qCACtB,oBAAqB,oCACrB,QAAS,kBACT,YAAa,sBACb,iBAAkB,2BAClB,iBAAkB,iCAClB,wBAAyB,wCACzB,yBAA0B,kCAC7B,EACD,4CAA4D,OAClD,MAAAxa,GAAOf,EAAA,KAAK,2BAAL,YAAAA,EAA+B,mBAExC,OAACe,EAEEM,GAAMN,EAAO,GAAI,EAAE,OAAO,cAAc,EAF7B,IAGtB,EACA,2CAAoD,SAC1C,MAAAoH,GAASpI,GAAAC,EAAA,KAAK,2BAAL,YAAAA,EAA+B,OAA/B,YAAAD,EAAqC,OAEhD,OAACoI,EAEDA,EAAS,MAAQ,EACV,KAAKA,EAAS,KAAM,QAAQ,CAAC,CAAC,GAGlC,KAAKA,EAAS,KAAM,QAAQ,CAAC,CAAC,GANjB,IAOxB,EAEA,6CAA6D,SAClD,OAAApI,GAAAC,EAAA,KAAK,2BAAL,YAAAA,EAA+B,OAA/B,YAAAD,EAAqC,QAChD,EACA,oBAAqB,CACV,OAAAu1B,EAAA,KAAK,KAAK,MAAQrF,GAAMA,EAAE,OAAS,KAAK,gBAAgB,CACnE,EACA,oBAAqB,CACV,OAAA7nB,MAAI,KAAK,mBAAoB,qBAAqB,CAC7D,EACA,YAAa,CACT,OAAO,KAAK,qBAAqB,YACrC,EACA,MAAO,CACI,OAAAitB,EAAA,UAAU,KAAK,gBAAgB,CAC1C,EACA,SAAmB,CAGf,GAFkB,CAAC,CAACjtB,MAAI,KAAK,KAAM,UAAU,EAEvB,SAEtB,MAAMmtB,EAAkBntB,EAAA,IAAI,KAAK,aAAc,eAAe,EAE9D,OAAImtB,EACOl0B,GAAMk0B,CAAe,EAAE,KAAKl0B,GAAA,CAAO,EAAI,EAG3C,EACX,EACA,oBAAqB,OACjB,OAAOrB,EAAA,KAAK,eAAL,YAAAA,EAAmB,aAC9B,EACA,eAAyB,CACrB,MAAM+K,EAAU3C,EAAA,IAAI,KAAK,aAAc,SAAS,EAGzC,QAFQ,KAAK,qBAEA,YAAc/G,GAAM0J,CAAO,EAAE,KAAK1J,IAAO,GAAK,EACtE,EACA,cAAe,CACX,MAAMm0B,EAA4B,KAAK,MAEjCC,EAAYC,YAAUF,EAAQvF,UAAM,QAAAjwB,EAAA,KAAK,kBAAL,YAAAA,EAAsB,QAASiwB,EAAE,KAAI,EAE3E,OADAwF,IAAc,IACd1sB,EAAA,YAAY0sB,CAAS,EAAU,EAC5B,KAAK,MAAMA,CAAS,EAAE,QAAQ,KAAK,gBAAgB,aAAa,EAAE,KAC7E,EACA,gBAAiB,OACb,MAAME,IAAS31B,EAAA,KAAK,kBAAL,YAAAA,EAAsB,iBAAkB,SAAW,GAAK,EACjE41B,EAAc,KAAK,aAAeD,EACxC,OAAOpvB,GAAuBqvB,CAAW,CAC7C,EACA,qBAAsB,CAGlB,GAFI,CAAC,KAAK,qBAEN,KAAK,SAAW,CAAC,KAAK,sBACf,SAGP,IAAC,KAAK,sBACC,SAEX,MAAMC,EAAQ,KAAK,qBAAqB,SAAS,KAAK,IAAI,EACpD,KAAK,wBAEX,OAAQA,IAAU,IACX,KAAK,YAAY,QAAUA,CACtC,EACA,4BAA6B,CACzB,OAAIC,SAAO,KAAK,gBAAgB,EAAU,gDACnC,0CAA0C,KAAK,qBAAqB,SAAS,KAAK,IAAI,CAAC,qBAClG,EAEA,mBAAoB,CAGhB,MAFI,CAAC,KAAK,qBAEN,KAAK,SAAW,CAAC,KAAK,sBACf,GAGN,KAAK,sBAIH1tB,MAAI,KAAK,aAAc,GAAG,KAAK,IAAI,QAAQ,EAHvC,EAIf,EAEA,iBAAkB,CAGd,MAFI,CAAC,KAAK,qBAEN,KAAK,SAAW,CAAC,KAAK,sBACf,GAGN,KAAK,sBAIHA,MAAI,KAAK,aAAc,GAAG,KAAK,IAAI,MAAM,EAHrC,EAIf,EAEA,iCAAkC,CAG9B,GAFI,CAAC,KAAK,qBAEN,KAAK,SAAW,CAAC,KAAK,sBACf,SAGP,IAAC,KAAK,sBACC,SAGX,IAAI2tB,EAAc,EAClBC,cAAK5tB,MAAI,KAAK,QAAS,kBAAkB,EAAG,IAAM,CAC9C2tB,GAAA,CACH,EACDC,OAAK5tB,MAAI,KAAK,QAAS,uBAAuB,EAAG,IAAM,CACnD2tB,GAAA,CACH,EACDC,OAAK5tB,MAAI,KAAK,QAAS,kBAAkB,EAAG,IAAM,CAC9C2tB,GAAA,CACH,EAEO,KAAK,qBAAqB,SAAS,KAAK,IAAI,IAAM,IACnDA,GAAe,KAAK,qBAAqB,sBAAsB,KAAK,IAAI,CACnF,EACA,iCAAkC,CAG9B,GAFI,CAAC,KAAK,qBAEN,KAAK,SAAW,CAAC,KAAK,sBAA8B,SAEpD,IAAC,KAAK,sBAA8B,SAExC,IAAIA,EAAc,EAClBC,cAAK5tB,MAAI,KAAK,QAAS,mBAAmB,EAAG,IAAM,CAC/C2tB,GAAA,CACH,EACDC,OAAK5tB,MAAI,KAAK,QAAS,qBAAqB,EAAG,IAAM,CACjD2tB,GAAA,CACH,EAEO,KAAK,qBAAqB,oBAAoB,KAAK,IAAI,IAAM,IAC9DA,GAAe,KAAK,qBAAqB,oBAAoB,KAAK,IAAI,CACjF,EACA,wCAAyC,CACrC,OAAID,SAAO,KAAK,gBAAgB,EAAU,oDACnC,wDAAwD,KAAK,qBAAqB,sBAAsB,KAAK,IAAI,CAAC,qBAC7H,EACA,yBAA0B,CACtB,OAAIA,SAAO,KAAK,gBAAgB,EAAU,6CACnC,uCAAuC,KAAK,qBAAqB,MAAM,KAAK,IAAI,CAAC,sBAEhG,EAEA,QAAS,CACL,uBAAuBG,EAAO,CAGtB,MAFA,CAAC,KAAK,qBAEN,KAAK,QAAgB,GAErB,CAAC,KAAK,uBAENltB,cAAY,KAAK,aAAa,KAAK,IAAI,CAAC,GACxCA,EAAA,YAAY,KAAK,aAAa,KAAK,IAAI,EAAEktB,CAAK,CAAC,EAAU,GACtD,KAAK,aAAa,KAAK,IAAI,EAAEA,CAAK,EAC7C,CAER,EC5RO,SAASC,IAAmB,CAOxB,OACH,iBANqB,CAACn1B,EAA8BQ,EAAiB,yBAAmC,CAClG,MAAA40B,EAAa90B,GAAMN,CAAI,EAC7B,OAAOo1B,EAAW,QAAQ,EAAIA,EAAW,OAAO50B,CAAM,EAAI,cAC9D,CAIA,CACJ,CCFO,SAAS60B,IAAoB,CAChC,MAAMnqB,EAAQC,GAAS,EAEjBzC,EAAyC2C,EAAS,IAAMH,EAAM,QAAQ,iBAAiB,CAAC,EAExFoqB,EAA0B,SAC1BC,EAA4B,OAC5BC,EAAqC,CACvC,QAAS,IACT,OAAQ,OACR,KAAM,MACN,UAAW,EACX,OAAQ,IACR,SAAU,GACd,EAKMC,EAAaruB,GACR,SAASA,GAAU,GAAK,KAAM,QAAQ,CAAC,CAAC,EAM7CsuB,EAAWtuB,GACT,MAAMA,CAAM,EACL,GAGX,QAAQ,IAAI,SAAS,EACrB,QAAQ,IAAIA,CAAM,EACX,KAAK,MAAMA,EAAS,GAAG,GAG5B5B,EAA0BC,GACxBA,IAAM,MAAQ,MAAM,OAAOA,CAAC,CAAC,EACtB,IAEJA,EAAE,WAAW,QAAQ,wBAAyB,GAAG,EAOtDkwB,EAAe,CAACvuB,EAAgBwuB,EAAiB,KAAiB,CAEpE,MAAMC,GAAmBzuB,GADNwuB,EAAiB,IAAO,IACG,QAAQ,CAAC,EACvD,OAAOpwB,EAAuBqwB,CAAe,CACjD,EAEMC,EAAuB,CAAC1uB,EAAgBwuB,EAA0B,KAAS,CAC7E,MAAM1wB,EAAW6wB,EAAmB,EAC9B,CAAC,OAAAv1B,EAAQ,SAAAw1B,EAAQ,EAAIC,EAAiC,EAC5D,OAAOC,EAAoBP,EAAavuB,EAAQwuB,CAAc,EAAG1wB,EAAU8wB,GAAUx1B,CAAM,CAC/F,EAKM01B,EAAsB,CACxB35B,EACA2I,EACA8wB,EAA6B,OAC7Bx1B,EAAqC,WAC5B,CACT,MAAM21B,GAAe31B,IAAW,SAAW0E,EAAS,OAASA,EAAS,KAC/D,OAAA8wB,IAAa,OAAS,GAAGG,EAAY,GAAG55B,CAAK,GAAK,GAAGA,CAAK,GAAG45B,EAAY,EACpF,EAKMJ,EAAqB,IAAwB,OACxC,QAAA92B,EAAAyJ,EAAQ,QAAR,YAAAzJ,EAAe,WAAYu2B,CACtC,EAKMS,EAAmC,KAC9B,CACH,OAAQ7kB,GAAe,kCAAkC,GAAekkB,EACxE,SAAUlkB,GAAe,oCAAoC,GAAyBmkB,CAC1F,GAOEa,EAAwB,IAAcL,EAAA,EAAqB,OAG3DM,EAAgChrB,EAAiC,IAAM,CACzE,MAAMnG,EAAW6wB,EAAmB,EAC9B,CAAC,OAAAv1B,EAAQ,SAAAw1B,CAAQ,EAAIC,EAAiC,EACtDttB,EAASnI,IAAW,SAAW0E,EAAS,OAASA,EAAS,KAEzD,OACH,OAAQ8wB,IAAa,OAASrtB,EAAS,GACvC,OAAQqtB,IAAa,QAAUrtB,EAAS,EAC5C,EACH,EAKK2tB,EAAc,CAAClvB,EAAgBwuB,EAAiB,KAC3CxuB,EAASuuB,EAAavuB,EAAQwuB,CAAc,EAAI,IAgBpD,OACH,8BAAAS,EACA,eALmB,IAAcN,EAAA,EAAqB,OAMtD,YAAAO,EACA,aAAAX,EACA,qBAAAG,EACA,oBAAAI,EACA,sBAAAE,EACA,sBAlB0B,CAAChvB,EAAgBwuB,EAAiB,KACrD,IAAIU,EAAYlvB,EAAQwuB,CAAc,CAAC,GAkB9C,uBAAApwB,EACA,UAAAiwB,EACA,QAAAC,CACJ,CACJ,CC3HO,SAASa,IAAc,CAC1B,MAAMrrB,EAAQC,GAAS,EAEjBoe,EAAWle,EAA4B,IAAMH,EAAM,QAAQ,mBAAmB,CAAC,EAC/EsrB,EAAYnrB,EAAS,IAAMH,EAAM,QAAQ,oBAAoB,CAAC,EAE9DurB,EAAkBprB,EAAuB,IAAMH,EAAM,QAAQ,kBAAkB,CAAC,EAChFwrB,EAAkBrrB,EAAS,IAAMH,EAAM,QAAQ,0BAA0B,CAAC,EAC1EyrB,EAAetrB,EAAS,IAAMH,EAAM,QAAQ,uBAAuB,CAAC,EACpE0rB,EAAiBvrB,EAAS,IAAMH,EAAM,QAAQ,yBAAyB,CAAC,EACxE2rB,EAAsBxrB,EAAS,IAAMH,EAAM,QAAQ,8BAA8B,CAAC,EAClF4rB,EAAuBzrB,EAAiB,IAAMH,EAAM,QAAQ,+BAA+B,CAAC,EAC5F6rB,EAAkB1rB,EAAkB,IAAMH,EAAM,QAAQ,0BAA0B,CAAC,EAEnF8rB,EAAkB3rB,EAA6B,IAAMH,EAAM,QAAQ,0BAA0B,CAAC,EAC9F+rB,EAAmB5rB,EAAS,IAAMH,EAAM,QAAQ,2BAA2B,CAAC,EAC5EgsB,EAAwB7rB,EAAyB,IAAMH,EAAM,QAAQ,gCAAgC,CAAC,EAEtGisB,EAAmB9rB,EAAS,IAAMH,EAAM,QAAQ,2BAA2B,CAAC,EAC5EksB,EAAuB/rB,EAAS,YAAM,QAAApM,GAAAk4B,EAAiB,QAAjB,YAAAl4B,GAAwB,OAAQ,GAAE,EAExEo4B,EAAmBhsB,EAAuB,IAAM,eAAApM,GAAAsqB,EAAS,QAAT,YAAAtqB,GAAgB,SAAQ,EACxEq4B,EAA4BjsB,EAAuB,IAAM,eAAApM,GAAAo4B,EAAiB,QAAjB,YAAAp4B,GAAwB,UAAS,EAC1Fs4B,EAAyBlsB,EAAS,YAAM,QAAApM,GAAAq4B,EAA0B,QAA1B,YAAAr4B,GAAiC,kBAAmB,GAAE,EAE9Fu4B,EAA6BnsB,EAAS,IAAM,gBAAApM,GAAAq4B,EAA0B,QAA1B,YAAAr4B,GAAiC,aAAc,CAC7F,MAAO,IACP,OAAQ,KACX,EACKw4B,EAAiCpsB,EAAS,IAAM,CAC5C,MAAAukB,GAAI4H,EAA2B,MAAM,OACrC3H,GAAI2H,EAA2B,MAAM,MAE3C,OAAO,KAAK,MAAO3H,GAAID,GAAK,GAAM,EAAI,IACzC,EAEK8H,EAAoBrsB,EAAS,IAAM,eAAApM,GAAAsqB,EAAS,QAAT,YAAAtqB,GAAgB,aAAY,EAC/D04B,EAA4BtsB,EAAS,IAAM,eAAApM,GAAAk4B,EAAiB,QAAjB,YAAAl4B,GAAwB,aAAY,EAE/E24B,GAAuBvsB,EAAiB,eAAM,QAAApM,GAAAsqB,EAAS,QAAT,YAAAtqB,GAAgB,cAAaD,GAAAuqB,EAAS,QAAT,YAAAvqB,GAAgB,UAAW,GAAE,EAExG64B,EAAiBxsB,EAAS,YAAM,QAAApM,GAAAsqB,EAAS,QAAT,YAAAtqB,GAAgB,SAAU,UAAS,EAEnE64B,GAAezsB,EAAwC,IAAM,CACzD,MAAA1O,GAAS,MAAM,QAAQq6B,EAAgB,KAAK,EAAI,CAAC,GAAGA,EAAgB,KAAK,EAAE,KAAK,CAACn6B,GAAGC,KAAMD,GAAE,KAAOC,GAAE,IAAI,EAAI,CAAC,EAEpH,eAAQ,IAAI,cAAc,EAC1B,QAAQ,IAAIH,EAAM,GACJ46B,EAAuB,OAAS,CAAC,GAElC,IAAI,CAACrI,GAAGnqB,KAAU,CAC3B,MAAMquB,GAAaruB,GAAQ,EACvB,IAAAgzB,GAAWp7B,GAAO,OAAQywB,IAAMA,GAAE,OAASgG,EAAU,GAAK,CAAC,EAEpD,OAAA2E,MAAS,IAAKpK,IAAM,CAC3B,MAAM1wB,GAAO0wB,GACPqK,GAAU/6B,GAAK,QACf6K,GAAQ7K,GAAK,MAEf,GAAAA,GAAK,OAAS,QAAS,CACjB,MAAAg7B,GAASh7B,GAAK,QAAU,GACvB,OACH,GAAGA,GACH,OAAAg7B,GACA,KAAMA,GAASh7B,GAAK,KAAO,GAC3B,YAAaA,GAAK,KAClB,QAASA,GAAK,KACd,MAAO6K,IAAS7K,GAAK,IACzB,EAEA,OAAAA,GAAK,OAAS,OACP,CACH,GAAGA,GACH,OAAQA,GAAK,QAAU,GACvB,YAAaA,GAAK,KAClB,KAAMA,GAAK,UAAY+6B,GAAU/6B,GAAK,KAAO,GAC7C,MAAO6K,IAAS7K,GAAK,IACzB,EAEAA,GAAK,OAAS,aACP,CACH,GAAGA,GACH,SAAUA,GAAK,UAAY,GAC3B,OAAQA,GAAK,QAAU,GACvB,IAAKA,GAAK,KAAO,IACrB,EAEAA,GAAK,OAAS,WACP,CACH,GAAGA,GACH,QAASA,GAAK,SAClB,EAGG,CACH,GAAG0wB,GACH,OAAQ,GACR,OAAQ,GACR,IAAK,GACL,QAAS,WACb,EAEH,EACM,CACH,KAAMyF,GACN,KAAMlE,GACN,SAAA6I,EACJ,EACH,EACJ,EAEKG,EAAyB7sB,EAAS,IAC7BysB,GAAa,MACf,QAAat2B,OAAE,QAAQ,EACvB,OAAO,CAACowB,GAAOjE,KAAMiE,IAASjE,GAAE,SAAW,EAAI,GAAI,CAAC,CAC5D,EAEKwK,GAAqB9sB,EAAS,IAAM,CACtC,MAAMpO,GAAOi6B,EAAsB,MAAM,QAAS11B,IAAMA,GAAE,QAAQ,EAClE,IAAI42B,GAAiB,EAChB,OAAAn7B,GAAA,QAAS0wB,IAAM,CACZA,GAAE,OAAS,aAAayK,IAAA,CAC/B,EACMA,EAAA,CACV,EAEKC,GAA0BhtB,EAAS,IAAM,CAC3C,MAAMpO,GAAOi6B,EAAsB,MAAM,QAAS11B,IAAMA,GAAE,QAAQ,EAClE,eAAQ,IAAI,yBAAyB,EAC7B,YAAIvE,GAAK,MAAM,EACvB,QAAQ,IAAIA,EAAI,EAETA,GAAK,OAAQR,IAAU,QACtB,IAACA,GAAM,SAAiB,SAE5B,OAAQA,GAAM,KAAM,CAChB,IAAK,YACD,MAAO,CAACA,GAAM,OAClB,IAAK,QACL,IAAK,OACD,MAAO,CAACA,GAAM,UAAWwC,GAAAxC,GAAM,OAAN,YAAAwC,GAAY,OAAO,UAAW,EAC3D,IAAK,WACD,MAAO,CAACxC,GAAM,MAClB,IAAK,aACD,MAAO,CAACA,GAAM,OAClB,QACW,SACf,CACH,EACJ,EAGD,SAAS67B,GAAqBr7B,GAAsD,CAC1EiO,EAAA,SAAS,wBAAyBjO,EAAI,EAG1C,MAAAs7B,EAAgB,MAAOt7B,IAClB,MAAMiO,EAAM,SAAS,yBAA0BjO,EAAI,EAGxDu7B,EAAwB,MAAOv7B,IAC1B,MAAMiO,EAAM,SAAS,2BAA4BjO,EAAI,EAGhE,SAASw7B,GAAkBx7B,GAAuC,CACxDiO,EAAA,OAAO,+BAAgCjO,EAAI,EAGrD,SAASy7B,EAAoBz7B,GAAwB,CAC3CiO,EAAA,OAAO,iCAAkCjO,EAAI,EA0DhD,OACH,SAAAssB,EACA,gBAAAkN,EACA,gBAAAC,EACA,UAAAF,EACA,aAAAG,EACA,eAAAC,EACA,oBAAAC,EACA,qBAAAC,EACA,gBAAAC,EACA,gBAAAC,EACA,uBAAAO,EACA,aAAAO,GACA,+BAAAL,EACA,2BAAAD,EACA,eAAAK,EACA,qBAAAD,GACA,uBAAAM,EACA,iBAAAf,EACA,qBAAAC,EACA,iBAAAH,EACA,sBAAAC,EACA,wBAAAmB,GACA,kBAAAX,EACA,0BAAAC,EACA,mBAAAQ,GACA,oBAAAO,EACA,sBAAAF,EACA,oBAnFwB,MAAOv7B,IACxBiO,EAAM,OAAO,kCAAmCjO,EAAI,EAmF3D,cAtEkB,MAAOyN,IAMlB,MAAMQ,EAAM,SAAS,yBAA0BR,EAAO,EAiE7D,oBAlCyBnJ,IAA4D,CAC/E2J,EAAA,OAAO,8BAA+B3J,EAAK,CACrD,EAiCI,kBAAAk3B,GACA,eAhEmB,MAAOx7B,IACnB,MAAMiO,EAAM,SAAS,0BAA2BjO,EAAI,EAgE3D,cAAAs7B,EACA,qBAAAD,GACA,aA3DiB,SACV,MAAMptB,EAAM,SAAS,uBAAuB,EA2DnD,aAhEiB,MAAOqe,IACjB,MAAMre,EAAM,SAAS,wBAAyBqe,EAAQ,EAgE7D,cAzDkB,MAAOA,IAClB,MAAMre,EAAM,SAAS,yBAA0Bqe,EAAQ,EAyD9D,iBAtDqB,MAAOA,IACrB,MAAMre,EAAM,SAAS,4BAA6Bqe,EAAQ,EAsDjE,eAnDmB,MAAO7e,IACnB,MAAMQ,EAAM,SAAS,0BAA2BR,EAAO,EAmD9D,kBAhDsB,MAAOD,IACtB,MAAMS,EAAM,SAAS,6BAA8BT,EAAI,EAgD9D,iBA3FqB,MAAOxN,IACrB,MAAMiO,EAAM,SAAS,4BAA6BjO,EAAI,EA2F7D,aAxFiB,MAAOA,IACjB,MAAMiO,EAAM,SAAS,wBAAyBjO,EAAI,CAwF7D,CACJ,ocCHA,MAAMiO,EAAQC,GAAS,EACjB,CACJ,aAAAwrB,EACA,gBAAAF,EACA,UAAAD,EAEA,oBAAAK,EACA,qBAAAyB,EACA,aAAAK,EACA,aAAAC,EACA,oBAAAC,GACEtC,GAAY,EACV,CAAC,iBAAAuC,CAAgB,EAAI3D,GAAiB,EAEtC5Y,EAAmBlR,EAAS,IAAMH,EAAM,QAAQ,kBAAkB,CAAC,EAEnE6tB,EAAiB1tB,EAAS,IAAMwrB,EAAoB,MAAM,KAAK,EAE/DmC,EAAyB7sB,EAAuB,IAAI,EACpD8sB,EAAoB9sB,EAAI,EAAK,EAC7B+sB,EAAqB/sB,EAAI,EAAK,EAC9BgtB,EAAiBhtB,EAAI,EAAK,EAE1BitB,EAAmC/tB,EAAS,IACzC2tB,EAAuB,MAAM,UACrC,EAEKK,EAAmBltB,EAAI,CAC3B,KAAM,EACN,aAAc,GACd,OAAQ,CAAC,YAAY,EACrB,SAAU,CAAC,EAAI,EACf,OAAQ,MACT,EACKmtB,EAAkB/P,GACfA,EAAS,SAAW,SAGvBgQ,EAAoBluB,EAAS,IAC1BmuB,EAAa,MAAM,WAAW,SAAW,GAAKA,EAAa,MAAM,WAAW,MAAMC,GAAK,CAACA,EAAE,IAAI,CACtG,EAEKC,EAAsB,CAC1B,CAAC,MAAO,GAAI,MAAO,IAAI,EACvB,CAAC,MAAO,GAAI,MAAO,IAAI,EACvB,CAAC,MAAO,GAAI,MAAO,IAAI,EACvB,CAAC,MAAO,IAAK,MAAO,KAAK,EACzB,CAAC,MAAO,GAAI,MAAO,qCAAqC,CAC1D,EAEMC,GAAmBxtB,EAAI,CAC3B,CAAC,MAAO,YAAa,IAAK,SAAU,SAAU,EAAK,EACnD,CAAC,MAAO,SAAU,IAAK,SAAU,SAAU,EAAK,EAIhD,CAAC,MAAO,QAAS,IAAK,UAAW,SAAU,EAAK,EAChD,CAAC,MAAO,cAAe,IAAK,cAAe,MAAO,IAAK,SAAU,EAAK,EACtE,CAAC,MAAO,UAAW,IAAK,aAAc,MAAO,GAAG,EAChD,CAAC,MAAO,GAAI,SAAU,GAAO,IAAK,MAAM,EACzC,EAEKqtB,EAAertB,EAAI,CACvB,WAAY,EAAC,CACd,EAEDa,GAAM,IAAMqsB,EAAiB,MAAM,KAAOO,GAAY,CACpDf,EAAoB,CAAC,IAAK,OAAQ,MAAOe,EAAQ,EACpChB,EAAA,EACd,EAED5rB,GAAM,IAAMqsB,EAAiB,MAAM,aAAeQ,GAAoB,CACpEhB,EAAoB,CAAC,IAAK,eAAgB,MAAOgB,EAAgB,EACpDjB,EAAA,EACd,EAED5rB,GAAM,IAAMqsB,EAAiB,MAAM,OAASS,GAAY,WAClCjB,EAAA,CAAC,IAAK,SAAU,MAAO,EAAC55B,GAAA66B,GAAA,YAAAA,EAAU,KAAV,YAAA76B,GAAe,GAAM,EAAE,EACnE45B,EAAoB,CAAC,IAAK,WAAY,MAAO,GAAC75B,GAAA86B,GAAA,YAAAA,EAAU,KAAV,YAAA96B,GAAe,SAAa,MAAM,EAAE,EACrE45B,EAAA,EACd,EAEK5rB,GAAAqsB,EAAmBU,GAAQ,CAE1BA,EAAI,SACPV,EAAiB,MAAM,OAAS,MAClC,CACD,EAEK,MAAAW,GAAczQ,GAAgC,WAE9C,OAACtqB,GAAAsqB,EAAS,aAAT,MAAAtqB,GAAqB,OAQnBsqB,EAAS,WAAW,IAAkB0Q,IAAA,eAC3C,KAAMC,EAAeD,GAAU,MAAM,EACrC,MAAMh7B,GAAAg7B,GAAU,SAAV,YAAAh7B,GAAkB,MACxB,EAVO,CAAC,CACN,KAAMi7B,EAAe3Q,EAAS,MAAM,EACpC,MAAMvqB,GAAAuqB,EAAS,SAAT,YAAAvqB,GAAiB,KACxB,CAQL,EAEMk7B,EAAkBC,GAA4B,CAClD,MAAMh9B,GAAOg9B,GAAA,YAAAA,EAAQ,UACrB,OAAIh9B,IAGG,GAAGg9B,GAAA,YAAAA,EAAQ,UAAU,IAAIA,GAAA,YAAAA,EAAQ,SAAS,GAAG,KAAK,CAC3D,EAEMC,GAAYD,GACTA,EAAO,KAIVE,GAAsB9Q,GAAgC,QACtD,OAAAA,EAAS,SAAW,OAAe,CAAC,KAAM,OAAQ,MAAO,QAAQ,EACjEA,EAAS,SAAW,SAAiB,CAAC,KAAM,SAAU,MAAO,KAAK,EAClEA,EAAS,SAAW,cAAsB,CAAC,KAAM,cAAe,MAAO,OAAQ,UAAW,OAAO,EACjGA,EAAS,SAAW,UAAkB,CAAC,KAAM,UAAW,MAAO,KAAK,EACpEA,EAAS,SAAW,UAAkB,CAAC,KAAM,UAAW,MAAO,MAAM,GACrEtqB,GAAAsqB,EAAS,aAAT,MAAAtqB,GAAqB,KAAKw6B,IAAK,CAACA,GAAE,cAAsB,CAAC,KAAM,oBAAqB,MAAO,QAAQ,EACnGlQ,EAAS,aAAqB,CAAC,KAAM,YAAa,MAAO,OAAO,EAC7D,CAAC,KAAMA,EAAS,OAAQ,MAAO,MAAM,CAC9C,EAEM+Q,GAA+B/Q,GAAgC,cAE/D,OAACtqB,GAAAsqB,EAAS,aAAT,MAAAtqB,GAAqB,OASnBsqB,EAAS,WAAW,IAAkB0Q,IAAA,eAC3C,UAAWA,GAAU,UACrB,UAAWA,GAAU,UACrB,OAAMh7B,GAAAg7B,GAAU,SAAV,YAAAh7B,GAAkB,YAAa,kBACrC,EAZO,CAAC,CACN,UAAWsqB,EAAS,UACpB,YAAWvqB,GAAAuqB,EAAS,SAAT,YAAAvqB,GAAiB,YAAa,iBACzC,OAAM+N,GAAAwc,EAAS,SAAT,YAAAxc,GAAiB,YAAa,iBACrC,CASL,EAEMwtB,EAAmBC,GAAe,QAC/B,OAAAv7B,GAAAu7B,GAAA,YAAAA,EAAY,kBAAZ,YAAAv7B,GAA8B,EACvC,EAEMw7B,EAAgBlxB,GAAQ,CACrB,YAAKA,EAAK,SAAU,YAAY,CACzC,EAEMmxB,GAAqBnR,GAClBoR,EAAepR,CAAQ,EAAE,OAAS,EAGrCoR,EAAkBpR,GACfA,EAAS,WAAW,OAAQkQ,IAAM,CAACA,GAAE,YAAY,EAEpDmB,EAAyBrR,GAAgC,CAC7DyP,EAAuB,MAAQzP,EAC/B0P,EAAkB,MAAQ,EAC5B,EAEM4B,GAA0BtR,GAAgC,CAC9DyP,EAAuB,MAAQzP,EAC/B2P,EAAmB,MAAQ,EAC7B,EAGM4B,GAAsBvR,GAAgC,CAC1DyP,EAAuB,MAAQzP,EAEzB,MAAAwR,GAAqBJ,EAAepR,CAAQ,EAE9C,GAAAwR,GAAmB,SAAW,EAChC,OAAO,MAAM,uCAAuC,EAGtDvB,EAAa,MAAM,WAAauB,GAAmB,IAAevd,IAAA,eAChE,MAAOA,GAAO,UACd,MAAO,KAAGve,GAAAue,GAAO,SAAP,YAAAve,GAAe,YAAa,cAAc,KAAKue,GAAO,SAAS,IACzE,KAAM,IACN,EAEF2b,EAAe,MAAQ,EACzB,EAEM6B,GAAqB,MAAOzR,GAAgC,CAChE,MAAMoP,EAAapP,CAAQ,EAC3B2P,EAAmB,MAAQ,GAC3BF,EAAuB,MAAQ,KAGpB,eAAMJ,EAAa,EAAG,GAAG,CACtC,EAEMqC,GAAmB,IAAM,CAC7BzB,EAAa,MAAM,WAAW,QAASC,GAAM,CACvCA,EAAE,MACiBnB,EAAA,CACnB,SAAUU,EAAuB,MACjC,MAAOS,EAAE,MACV,CACH,CACD,CACH,unRCnfAn5B,GAAM,OAAO46B,EAAc,EAGpB,SAASC,IAAkB,CAC9B,MAAMjwB,EAAQC,GAAS,EAGjBiwB,EAAsB/vB,EAAS,IAAMH,EAAM,QAAQ,mCAAmC,CAAC,EACvFmwB,EAAmBhwB,EAAS,IAAMH,EAAM,QAAQ,wBAAwB,CAAC,EAEzEowB,EAAwBjwB,EAAS,IAAMH,EAAM,QAAQ,qCAAqC,CAAC,EAC3FqwB,EAAoBlwB,EAAS,IAAMH,EAAM,QAAQ,qBAAqB,CAAC,EACvEswB,EAAmBnwB,EAAS,IAAMH,EAAM,QAAQ,gCAAgC,CAAC,EACjFuwB,EAAepwB,EAAS,IAAMH,EAAM,QAAQ,4BAA4B,CAAC,EACzEM,EAAOH,EAAS,IAAMH,EAAM,QAAQ,WAAW,CAAC,EAChDxC,EAAU2C,EAAS,IAAMH,EAAM,QAAQ,iBAAiB,CAAC,EACzDwwB,EAA2BrwB,EAAS,IAAMH,EAAM,QAAQ,iCAAiC,CAAC,EAC1FywB,EAAuBtwB,EAAS,IAAMH,EAAM,QAAQ,uBAAuB,CAAC,EAC5E0wB,EAAsBvwB,EAAS,IAAMH,EAAM,QAAQ,mCAAmC,CAAC,EACvF2wB,EAAyBxwB,EAAS,IAAMH,EAAM,QAAQ,sCAAsC,CAAC,EAC7F4wB,EAAwBzwB,EAAS,IAAMH,EAAM,QAAQ,qCAAqC,CAAC,EAE3FspB,EAAkBnpB,EAAS,IAAM,eAAApM,GAAAw8B,EAAa,QAAb,YAAAx8B,GAAoB,cAAa,EAElE88B,EAAuB,CACzB,MAAO,CACH,MAAO,EACP,SAAU,EACV,QAAS,EACb,EACA,SAAU,CACN,MAAO,EACP,SAAU,GACV,QAAS,GACb,EACA,UAAW,CACP,MAAO,EACP,SAAU,EACV,QAAS,CACb,EACA,sBAAuB,CACnB,MAAO,EACP,SAAU,EACV,QAAS,EACb,EACA,oBAAqB,CACjB,MAAO,EACP,SAAU,EACV,QAAS,EACb,EACA,OAAQ,CACJ,MAAO,EACP,SAAU,GACV,QAAS,GAEjB,EAEMC,EAAqB3wB,EAAS,IAAM,WAChC,MAAA4wB,IAAeh9B,GAAAw8B,EAAa,QAAb,YAAAx8B,GAAoB,cAEzC,OAAIg9B,MAEAj9B,GAAAwM,EAAK,QAAL,MAAAxM,GAAY,SAAiB,WAE1B,YACV,EAEKk9B,EAAkB7wB,EAAS,IAAM,QAC5B,QAAApM,GAAAyJ,EAAQ,QAAR,YAAAzJ,GAAe,gBAAiBu1B,EAAgB,MAC1D,EAEK2H,EAAe,CACjB,QAAS,CACL,IAAK,GACL,IAAK,GACL,QAAS,GACT,mBAAoB,GACpB,cAAe,GACf,WAAY,GACZ,gBAAiB,GACjB,gBAAiB,GACjB,MAAO,GACP,SAAU,GACV,SAAU,GACV,uBAAwB,EAC5B,EACA,SAAU,CACN,IAAK,GACL,QAAS,GACT,WAAY,GACZ,gBAAiB,GACjB,gBAAiB,GACjB,MAAO,GACP,SAAU,GACV,uBAAwB,EAC5B,EACA,MAAO,EAGX,EAGMC,EAAqB,SAChBlxB,EAAM,SAAS,kCAAkC,EAGtDmxB,EAAiC,SAC5BnxB,EAAM,SAAS,iDAAiD,EAGrEoxB,EAAW,SACNpxB,EAAM,SAAS,wBAAwB,EAG5CqxB,GAAa,MAAOC,IACftxB,EAAM,SAAS,2BAA4BsxB,EAAI,EAGpDC,EAAqB,SAChBvxB,EAAM,SAAS,kCAAkC,EAGtDwxB,GAAuB,MAAOC,IACzBzxB,EAAM,SAAS,yBAA0ByxB,EAAK,EAEnDC,EAA0B,MAAOD,IAC5BzxB,EAAM,SAAS,4BAA6ByxB,EAAK,EAGtDE,GAAmBxxB,EAAS,IAAM,CACpC,MAAMyxB,GAAUZ,EAAgB,MAG5B,IAACY,IAAW,CAACx8B,GAAMw8B,EAAO,EAAE,WAAad,EAAmB,QAAU,SAC/D,wBAGL,MAAAe,GAAYz8B,GAAMw8B,EAAO,EACzBE,GAAeD,GAAU,OAAO,cAAc,EAK7C,eAFQA,GAAU,eAAez8B,GAAO,GAAI,QAAU,MAEvC,IAAI08B,EAAY,GACzC,EAEKC,GAAgB5xB,EAAS,IAAM,QAC3B,MAAA6xB,IAAUj+B,GAAAw8B,EAAa,QAAb,YAAAx8B,GAAoB,QACpC,GAAKi+B,GACL,OAAO58B,GAAM48B,EAAO,EAAE,OAAO,cAAc,EAC9C,EAEKC,GAAgB9xB,EAAS,IAAM,QAC3B,MAAArB,IAAU/K,GAAAw8B,EAAa,QAAb,YAAAx8B,GAAoB,QAC9Bm+B,GAASpB,EAAmB,MAE9B,OAAChyB,GAEE,EAAEozB,KAAW,YAAc98B,GAAM0J,EAAO,EAAE,KAAK1J,IAAO,GAAK,GAF7C,EAE6C,CACrE,EAGK+8B,EAAUhyB,EAAS,IAAe,QAKhC,QAJcpM,GAAAuM,GAAA,YAAAA,EAAM,QAAN,YAAAvM,GAAa,WAI3B+8B,EAAmB,QAAU,WAAmB,GAChDA,EAAmB,QAAU,SAAiB,GAE9CxH,EAAgB,MACTl0B,GAAMk0B,EAAgB,KAAK,EAAE,KAAKl0B,GAAO,GAAI,EAGjD,GACV,EAEKg9B,EAAajyB,EAAS,IACjB2wB,EAAmB,QAAU,UACvC,EAEKuB,GAAelyB,EAAS,IAErB6wB,EAAgB,MAId57B,GAAM47B,EAAgB,KAAK,EAAE,OAAO,cAAc,EAH9C,KAId,EAGKsB,EAA6CnyB,EAAS,IAAM,WACxD,MAAArL,IAAOf,GAAAy8B,EAAyB,QAAzB,YAAAz8B,GAAgC,mBACvCm+B,IAASp+B,GAAA08B,EAAyB,QAAzB,YAAA18B,GAAgC,OAG3C,MADA,CAACgB,IACDo9B,KAAW,WAAmB,KAE3B98B,GAAMN,GAAO,GAAI,EAAE,OAAO,cAAc,EAClD,EAEKy9B,EAA4CpyB,EAAS,IAAM,WACvD,MAAAjE,IAASpI,IAAAC,GAAAy8B,EAAyB,QAAzB,YAAAz8B,GAAgC,OAAhC,YAAAD,GAAsC,OAEjD,OAACoI,GAEDA,GAAS,MAAQ,EACV,KAAKA,GAAS,KAAM,QAAQ,CAAC,CAAC,GAGlC,KAAKA,GAAS,KAAM,QAAQ,CAAC,CAAC,GANjB,IAMiB,CACxC,EAEKs2B,GAA8CryB,EAAS,IAAM,WACxD,QAAArM,IAAAC,GAAAy8B,EAAyB,QAAzB,YAAAz8B,GAAgC,OAAhC,YAAAD,GAAsC,WAAY,QAC5D,EAEK2+B,GAA0BzI,IAA2B,QACvD,GAAI,CAACkG,EAAoB,OAASiC,EAAQ,MAAc,SACpD,IAAC/B,EAAsB,MAAc,SAGzC,MAAMkB,KAAOv9B,GAAAu8B,EAAiB,QAAjB,YAAAv8B,GAAwB,gBAAiB,GAGhD2+B,GAAezB,EAAaK,EAAI,GAAK,KACvC,OAACoB,GAGEA,GAAa1I,EAAK,GAAK,GAHJ,EAI9B,EAGM2I,GAAkBxyB,EAAS,IAAM,QAGnC,MAFI,CAAC+vB,EAAoB,OAErBiC,EAAQ,OAAS,CAAC/B,EAAsB,MACjC,GAGNA,EAAsB,QAIpBr8B,GAAAk9B,GAAA,YAAAA,EAAeX,EAAiB,SAAhC,YAAAv8B,GAAwC,MAAO,GAH3C,EAG2C,CACzD,EAGK6+B,GAAgBzyB,EAAS,IAAc,CAErC,IAAC6wB,EAAgB,MACV,SAGL,MAAA6B,GAAWz9B,GAAM47B,EAAgB,KAAK,EAAE,KAAK57B,GAAA,EAAS,OAAQ,EAAI,EACxE,OAAOy9B,GAAW,EAAI,KAAK,KAAKA,EAAQ,EAAI,EAC/C,EAEKC,EAAuB3yB,EAAS,IAC3ByyB,GAAc,QAAU,EAAI,EAAI,KAAK,MAAOA,GAAc,MAAQ,GAAM,GAAG,CACrF,EAEKG,GAAuB5yB,EAAS,IAC9BiwB,EAAsB,MAIf,eAHME,EAAiB,MACxB,GAAGA,EAAiB,MAAM,OAAO,CAAC,EAAE,aAAa,GAAGA,EAAiB,MAAM,MAAM,CAAC,CAAC,GACnF,SACoB,QAE1BsC,GAAc,OAAS,EAChB,uBAEJ,YAAYA,GAAc,KAAK,IAAIniB,GAAUmiB,GAAc,MAAO,KAAK,CAAC,sBAClF,EAEKI,GAAiB7yB,EAAS,KAAO,CACnC,cAAeyyB,GAAc,QAAU,EACvC,eAAgBA,GAAc,MAAQ,GACxC,EAEIK,GAAqB9yB,EAAS,IACzBkwB,EAAkB,MAAM,KAAMrM,IAAMA,GAAE,OAASsM,EAAiB,KAAK,CAC/E,EAEK4C,GAAqB/yB,EAAS,IAAM,QAC/B,OAAApM,GAAAk/B,GAAmB,QAAnB,YAAAl/B,GAA0B,YAAY,QAChD,EAEKo/B,GAAmBhzB,EAAS,IAAM,cAGpC,MAFI,CAAC+vB,EAAoB,OAErBiC,EAAQ,OAAS,CAAC/B,EAAsB,MACjC,GAGNA,EAAsB,QAInBr8B,GAAAk/B,GAAmB,QAAnB,YAAAl/B,GAA0B,SAAU,MACrCD,GAAA0J,EAAQ,QAAR,YAAA1J,GAAe,eAAc+N,GAAAoxB,GAAmB,QAAnB,YAAApxB,GAA0B,OAJnD,EAImD,CACjE,EAEKuxB,GAA0BjzB,EAAS,IAAM,QACvC,OAAC+vB,EAAoB,MAClB,wCAAuCn8B,GAAAk/B,GAAmB,QAAnB,YAAAl/B,GAA0B,KAAK,sBADtC,4CACsC,CAChF,EAGKs/B,GAA6BlzB,EAAS,IAAM,QAC1C,OAAC+vB,EAAoB,MAClB,2CAA0Cn8B,GAAAk/B,GAAmB,QAAnB,YAAAl/B,GAA0B,QAAQ,sBAD5C,+CAC4C,CACtF,EAEKu/B,GAAsBnzB,EAAS,IAAM,cAGvC,MAFI,CAAC+vB,EAAoB,OAErBiC,EAAQ,OAAS,CAAC/B,EAAsB,MACjC,GAGNA,EAAsB,QAInBr8B,GAAAk/B,GAAmB,QAAnB,YAAAl/B,GAA0B,YAAa,MACxCD,GAAA0J,EAAQ,QAAR,YAAA1J,GAAe,aAAY+N,GAAAoxB,GAAmB,QAAnB,YAAApxB,GAA0B,UAJjD,EAIiD,CAC/D,EAEK0xB,GAA6BpzB,EAAS,IAAM,CAC9C,MAAMmxB,GAAOhB,EAAiB,MAEvB,OACH,SAAUO,EAAqB,SAASS,EAAI,EAC5C,UAAWT,EAAqB,UAAUS,EAAI,EAC9C,sBAAuBT,EAAqB,sBAAsBS,EAAI,EACtE,oBAAqBT,EAAqB,oBAAoBS,EAAI,EAClE,OAAQT,EAAqB,OAAOS,EAAI,EACxC,MAAOT,EAAqB,MAAMS,EAAI,CAC1C,EACH,EAEM,OACH,aAAAf,EACA,iBAAA4C,GACA,wBAAAC,GACA,oBAAA1C,EACA,mBAAAwC,GACA,qBAAAzC,EACA,sBAAAL,EACA,sBAAAQ,EACA,mBAAAE,EACA,iBAAAR,EACA,kBAAAD,EACA,oBAAAH,EACA,iBAAAC,EACA,QAAAgC,EACA,WAAAC,EACA,gBAAAO,GACA,aAAAN,GACA,2CAAAC,EACA,0CAAAC,EACA,4CAAAC,GACA,cAAAT,GACA,cAAAE,GACA,qBAAAc,GACA,cAAAH,GACA,qBAAAE,EACA,eAAAE,GACA,iBAAArB,GACA,2BAAA0B,GACA,oBAAAC,GACA,uBAAA3C,EACA,2BAAA4C,GACA,mBAAAN,GACA,qBAAAzB,GACA,wBAAAE,EACA,mBAAAH,EACA,SAAAH,EACA,WAAAC,GACA,mBAAAH,EACA,+BAAAC,EACA,uBAAAsB,EACJ,CACJ,CChKA,MAAMe,GAAqB3d,GAAqB,IAAMtJ,EAAA,WAAO,kCAAyD,wFAAC,EAGxGknB,GAAA,CACb,KAAM,4BAEN,OAAQ,CACN,MAAMzzB,EAAQC,GAAS,EACjB,CAAC,qBAAA2qB,EAAsB,YAAAQ,CAAW,EAAIjB,GAAkB,EACxD,CAAC,iBAAAyD,CAAgB,EAAI3D,GAAiB,EACtC,CAAC,qBAAAmD,EAAsB,aAAAK,EAAc,aAAAC,CAAA,EAAgBrC,GAAY,EACjE,CAAC,uBAAAoH,CAAsB,EAAIxC,GAAgB,EAC3C,CAAC,eAAA1d,CAAc,EAAIpB,GAAY,EAE/B,CAAC,YAAA+D,CAAW,EAAIlB,GAAe,EAG/B0f,EAAezyB,EAAI,CAAC,EACpB0yB,EAAkB1yB,EAAI,EAAK,EAC3B8sB,EAAoB9sB,EAAI,EAAK,EAC7B+sB,EAAqB/sB,EAAI,EAAK,EAC9B2yB,EAAwB3yB,EAAI,KAAK,EAGjC4yB,EAAwB,CAC5B,CAAC,MAAO,QAAS,SAAU,GAAO,IAAK,OAAO,EAC9C,CAAC,MAAO,UAAW,IAAK,OAAO,EAC/B,CAAC,MAAO,WAAY,IAAK,UAAU,EACnC,CAAC,MAAO,SAAU,IAAK,QAAQ,EAC/B,CAAC,MAAO,OAAQ,IAAK,MAAM,EAC3B,CAAC,MAAO,cAAe,IAAK,+BAA+B,EAC3D,CAAC,MAAO,OAAQ,IAAK,eAAe,EACpC,CAAC,MAAO,YAAa,IAAK,WAAW,CACvC,EAGMvF,EAAertB,EAAI,CACvB,WAAY,EAAC,CACd,EAEKa,GAAA4xB,EAAe7E,GAAQ,CAC3B,QAAQ,IAAIA,CAAG,EACXA,IAAQ,GACV7uB,EAAM,SAAS,4BAA4B,CAC7C,CACD,EAGD,MAAM8zB,EAAkB7yB,EAAI,CAC1B,SAAU,MACX,EAEK8yB,EAAmB9yB,EAAI,EAAE,EAGzBgtB,EAAiBhtB,EAAI,EAAK,EAE1B6sB,EAAyB7sB,EAAI,EAAE,EAE/BD,EAAOC,EAAI,IAAInP,EAAM,EAOpB,OACL,gBAAA6hC,EACA,kBAAA5F,EACA,mBAAAC,EACA,sBAAA6F,EACA,sBAAAD,EACA,aAAAF,EACA,gBAAAI,EACA,iBAAAC,EACA,aAAAzF,EACA,eAAAL,EACA,uBAAAH,EACA,KAAA9sB,EACA,eAAAuR,EACA,uBAAAkgB,EACA,eAnBsBpU,GACfA,EAAS,SAAW,SAmB3B,YAAAnJ,EACA,qBAAAkY,EACA,aAAAK,EACA,aAAAC,EACA,YAAAtC,EACA,qBAAAR,EACA,iBAAAgD,CACF,CACF,EAEA,WAAY,gBACVoG,GACA,mBAAAR,EACF,EAEA,OAAQ,CACNrK,EACF,EAEA,MAAO,CACL,QAAS,CACH,KAAK,SAAW,UAAY,KAAK,kBAAkB,kBACrD,KAAK,yBAAyB,CAChC,CAEJ,EAEA,SAAU,CACJ,KAAK,mBACP,KAAK,eAAe,EAEbt4B,EAAA,IAAI,0BAA4B0gB,GAAa,CAChDA,EAAS,MACX,KAAK,QAAQ,KAAK,CAAC,KAAM,oBAAqB,OAAQ,CAAC,KAAMA,EAAS,IAAI,EAAE,EAAE,MAAapP,GAAA,EAC1F,CACH,CACD,EACQtR,EAAA,IAAI,4BAA6B,IAAM,CAC9C,KAAK,eAAiB,GACtB,KAAK,aAAe,CAClB,WAAY,EACd,EACD,CACH,EAEA,SAAU,CACR,GAAGye,GAAW,CACZ,OAAQ,aACR,kBAAmB,wBACnB,UAAW,qBACX,UAAW,qBACX,iBAAkB,mBAClB,UAAW,qBACX,eAAgB,kBACjB,EACD,gBAAiB,CAEf,OAAO,KAAK,UAAU,OAAOiC,GAAYA,EAAS,SAAS,CAC7D,EACA,2BAA4B,CAE1B,OAAO,KAAK,UAAU,OAAmBA,KAAS,YAAc,IAAI,CACtE,EACA,8BAA+B,CAC7B,OAAO,KAAK,eAAe,OAAQkR,GAAMA,EAAE,OAAS,iBAAiB,CACvE,EACA,gCAAiC,CAC/B,OAAO,KAAK,eAAe,OAAQA,GAAMA,EAAE,OAAS,mBAAmB,CACzE,EACA,mBAAoB,CAQX,OANc,KAAK,+BAA+B,OAAkBwR,GAAA,OACnE,MAAAC,GAAgBngC,EAAAkgC,EAAQ,SAAR,YAAAlgC,EAAgB,cAC/B,OAAAmgC,IAAkB,QAAUA,IAAkB,WACtD,EAGmB,OAAO,CAACC,EAAOF,IAAYE,GAASF,EAAQ,eAAiB,GAAI,CAAC,CACxF,EACA,oBAAqB,CAEZ,YAAK,+BAA+B,OAAO,CAACE,EAAOF,IAAYE,GAASF,EAAQ,+BAAiC,GAAI,CAAC,EAEjI,EAEA,QAAS,CACP,GAAG1kB,GAAW,CACZ,yBAA0B,+BAC1B,eAAgB,0BACjB,EACD,UAAUkE,EAAM,OACd,OAAO1f,EAAA0f,GAAA,YAAAA,EAAM,QAAN,YAAA1f,EAAa,IACtB,EACA,eAAek7B,EAAyB,CACtC,MAAMh9B,EAAOg9B,GAAA,YAAAA,EAAQ,UACrB,OAAIh9B,GAGG,GAAGg9B,GAAA,YAAAA,EAAQ,UAAU,IAAIA,GAAA,YAAAA,EAAQ,SAAS,GAAG,KAAK,CAC3D,EACA,WAAW5Q,EAAU,SAEf,OAACtqB,EAAAsqB,EAAS,aAAT,MAAAtqB,EAAqB,OAQnBsqB,EAAS,WAAW,IAAkB0Q,GAAA,cAC3C,KAAM,KAAK,eAAeA,EAAU,MAAM,EAC1C,MAAMh7B,EAAAg7B,EAAU,SAAV,YAAAh7B,EAAkB,MACxB,EAVO,CAAC,CACN,KAAM,KAAK,eAAesqB,EAAS,MAAM,EACzC,MAAMvqB,EAAAuqB,EAAS,SAAT,YAAAvqB,EAAiB,KACxB,CAQL,EAEA,WAAW2f,EAAuB,CAChC,OAAOA,EAAK,SACd,EACA,SAASwb,EAAyB,CAChC,OAAOA,EAAO,IAChB,EACA,oBAAqB,CACnB,MAAMmF,EAAmB,KAAK,0BAE1B,GAAAA,EAAiB,SAAW,EAAG,CACjC,KAAK,eAAe,EACpB,OAGI,MAAAC,EAAgBD,EAAiB,CAAC,EAExC,KAAK,QAAQ,KAAK,CAAC,KAAM,oBAAqB,OAAQ,CAAC,KAAMC,EAAc,KAAM,GAAE,MAAM,EAAE,EAE/F,EAEA,eAAgB,CACT,YAAO,OAAO,6BAA8B,CAC/C,KAAM,EAAC,CACR,EACD,KAAK,OAAO,OAAO,4BAA6B,EAAE,EAEtD,EAnbyBtqB,GAAA,OAAM,WAAO,EAnBtCS,GAAA,iCAuCyBI,GAAA,OAAM,OAAM,EA0BtBC,GAAA,KAAK,CAAC,oBAjErBE,GAAA,4CAiGkEC,GAAM,yDAyBhD,sBAAuB,YAOvB,sBAAuB,EAK5BkP,GAAA,OAAM,sBAAsB,EAK5BrC,GAAA,OAAM,sBAAsB,EAK5BC,GAAA,OAAM,sBAAsB,EAK5BC,GAAA,OAAM,sBAAsB,oCArJ/CE,GAAA,+BA8JkDC,GAAM,8LA9JxD,OAAA5N,EAEiC,EAAAN,EAAA,YAFjCE,EAAAoqB,GAAA,YAAAva,EAAA,mCAG8B9O,EAAA,KAAAA,EAAA,GAAAC,GAAA6O,EAAA,aAAA7O,EAAA,WAH9Bb,EAGsB,KAAAH,EAHtBqqB,GAGa,KAAS,SAAAlqB,EAAA,IAAAY,EAAA,KAAAA,EAAA,IAHtBN,EAAA,gBAIM,QAJN4pB,GAIqB,cAAAlqB,EAAA,IAAAY,EAAA,KAAAA,EAAA,IAJrBN,EAAA,eAKmB,QALnB,YAKuD,kBAAAL,EAAA,IAANiqB,GAAM,iBAAAlqB,EAAA,IAAAY,EAAA,KAAAA,EAAA,IALvDN,EAAA,oBAAAgF,EAAA,SAQI,KARJ,EAQuB,gBARvBzF,EAAAsqB,GAAA,YAAAza,EAAA,mCA8DsB9O,EAAA,KAAAA,EAAA,GAAAC,GAAA6O,EAAA,aAAA7O,EAAA,WA9DtBb,EA0Dc,KAAAH,EAhDNuqB,GAgDM,cA/CJpqB,EA8CqB,KAAAJ,EAzD/B,MAwDgCF,GAAA,CAAAG,EA5CpBuQ,GA4CoB,uCAxDhCpQ,EA6BwC,KAAAH,EAhB1BwQ,GAgB0B,cAfPrQ,EAAO,IAYhB,CAAAH,EAXNyQ,GAWM,MAVJ,QAAAtQ,EAAA,WAAAqqB,KAAA,CAAAzqB,EAGA,MAMMO,GAAA,CALJS,EAAA,KAAAA,EAIoB,WAJD,CAAa,kCAAAhB,EApBtD,MAuB8BW,GAAA,CAAAV,EAFMyqB,GAAQ,sBAApB,QAAAtqB,EAAA,KArBxBqqB,EAAA/kB,EAAA,QAAArF,IAAAN,EAAA,MAAAa,GAAA,KAAAJ,EAAAW,EAAA,2BAAAX,EAAAL,EAAA,6CA8Bc,QACEwQ,GAuBS,cAvBAvQ,EAASgH,OAA8BvB,GAAM,SAAA1F,EAAA,qBA/BtE,iBAiCkC,QAAAC,EAAA,KAGNH,EAAA0qB,EAAA,gFAAA7a,EApC5B,gCAAApK,EAiD0B,UAhBwD,EAAAF,EAAAG,GAAA,CAAC,IAAK,EAAmB,OAAO,SAAW,MAAK,oCAjClI,yBAmCoBvF,EAA0F,KAAAY,EAA9E,EAA0B,IAAAA,EAAA,IAAAN,EAAA,yDAAAT,EAAQ4P,EAAa,CAAC,GAAI,MAAC,kBAAS,sBAnC9F,8CAAAnP,EAAA,6BAiD0BT,EAVN+P,GAUM,cAAA5P,EAAA,KANIJ,EAAA,MAAAa,GAAA,CAAAG,EAFG,EAAC,IAAOA,EAAA,IAAAN,EAAA,yBAAAT,EAAS4P,EAAM,CAAE,4BAzC1D,QA0CqE7O,EAAA,KAAAA,EAAA,GAAAC,GAAA,CAAA6O,EAAA,+BA1CrE1P,EA0C4D,KAAAH,EA1C5D8P,EA0C6C,CAAe,uBAAA3P,EAAA,IAAAY,EAAA,MAAAA,EAAA,KA1C5DN,EAAA,8BA4CsB,IACA,EAAmBkqB,QAAyB/a,EAAM,CAAC,SAAK,CAAO1P,EAAA,kBAAE,MAAK,oBA7C5F,QA8C2Ea,EAAA,KAAAA,EAAA,GAAAC,GAAAE,EAAA,gCAAtCf,EAAO,KAAAH,EAAM8P,EAAO,cA9CzD,4CAAArP,EAAA,qBAAAA,EAAA,IAAAF,EAAAL,EAAA,8CAmDkB,QACE2F,GAA4C,cAAA1F,EAAA,KApDhEH,EAAA4qB,EAAA,WAAA1qB,EAAA,oFA6DQ,KA7DRF,EAAA6qB,CAAA,IA+DM,QACEN,GA0FS,cA1JjBpqB,EAgGgB,KA/BNH,EAAA4F,GAAA,cACEzF,EASM,KADKJ,EAAA,MAAAc,GAAA,CAAAd,EA1EvB,MAsE+B,MAAAC,EAFf4F,GAEe,cAtE/BzF,EAsEgB,KAAAH,EAtEhB+P,GAoE8B,KAEd,SAAA5P,EAAA,IAAAY,EAAA,MAAAA,EAAA,KAtEhBN,EAAA,2BAuEgB,QAvEhBoF,GAwEqB,cAAA1F,EAAA,KAxErBM,EAAAF,EAAAW,EAAA,uDA4EY,OA5EZ,MAgF+B,MAAAlB,EAFf4F,GAEe,cAhF/BzF,EAgFgB,KAAAH,EAhFhB+P,GAgFgB,cAAA5P,EAAA,IAAAY,EAAA,MAAAA,EAAA,KAhFhBN,EAAA,oBAiFgB,QAjFhBoF,GAkFqB,cAAA1F,EAAA,KAlFrBM,EAAAF,EAAAsP,EAAA,qBAAA3O,EAAA,oCAsFY,OAtFZ,MA0F+B,MAAAlB,EAFf4F,GAEe,cA1F/BzF,EA0FgB,KAAAH,EA1FhB+P,GA0FgB,cAAA5P,EAAA,IAAAY,EAAA,MAAAA,EAAA,KA1FhBN,EAAA,iBA2FgB,QA3FhBoF,GA4FqB,cAAA1F,EAAA,KA5FrBM,EAAAF,EAAAsP,EAAA,qBAAA3O,EAAA,uCAiGqB,KAwDIA,EAAA,2CAAAd,4CAnDkBmF,EAAAulB,GAAA,CAC9B,IAAK,EACL,QAAcjb,EAAA,sBACd,MAAA3O,EAAA,mDAEgB,oBAAU,iBAEvBf,EAEc,OAAAoJ,KAAA,CAFExJ,EAAA,MAAA0N,GAAA,CAAAzN,EAAAQ,EAAA,CA7GhC,GA8GkC,oCAAA+I,EAAA,wBA9GlC9I,EAAAF,EAAAgJ,EAAA,6BAkH6B,kBAEYpJ,EAAW,OAAAoJ,KAAA,gBAAAxJ,EAAA,MAApC2N,GAEc,EAAA7jB,EAAA0f,GAAA,YAAAA,EAtH9B,QAsH8B,MAAA1f,YAF4E0b,EAAA/E,EAAA,OApH1G,GAqHyC,oCAAA5W,EAAA2f,GAAA,YAAAA,EAAA,oBAAA3f,EAAA,qCArHzC6W,EAAAF,GAAA1W,EAAA0f,GAAA,YAAAA,EAAA,oBAAA1f,EAAA,+BAAA4b,EAAA,MAyH6B,MAEiB,gBAAAtF,EAAA,QAAAhZ,KAAA,CAAA4Y,EAAA,MAA9BiQ,GAEc,CAAA7oB,GAAA,MAAAA,EA7H9B,UA2HgGoe,EAAA/E,EAAA,OA3HhG,GA4HkC,sCAAArZ,EAAA,wBA5HlCsZ,EAAAF,EAAApZ,EAAA,8BAAAse,EAAA,MAgI6B,yCAKA1F,EAAA,MAAA4N,GAAkCpN,EAAQsP,EAAA,qBAAAtG,EAAA,yEAK1CxJ,EAAW,MAAI6N,GAAKrN,EAAAsP,EAAA,qBAAAtG,EAAA,mEAKpBxJ,EACf,MAD4B8N,GAAKtN,EAAApZ,CAAA,mCAKlB4Y,EAAc,MAGvB+N,GAHgCvN,EAAApZ,CAAA,wCApJpD4Y,EAAA,MAAAgO,GAAAxN,EAAApZ,CAAA,8CA4JM,QACEojC,GA4BS,cAzLjBpqB,EAgKgB,KAAAH,EAFK+qB,GAAqB,MAAhC,QAAA5qB,EAAA,KAGAD,EAAA,wBAuBe,GAxLzBE,EAAA,EAAAN,EAAA,MAAAkO,GAAA,0BAAA5N,EAAA,EAmK2CmF,EAAAulB,GAAA,CAC9B,IAAK,EACL,QAAcjb,EAAA,sBACd,MAAA3O,EAAA,iDAEgB,oBAAU,IACT,aAAAf,EAAA,OAAAoJ,KAAA,CAAAvJ,EAAAQ,EAAA,CAzK9B,GA0KgC,oCAAA+I,EAAA,wBA1KhC9I,EAAAF,EAAAgJ,EAAA,iBA6K0C,eACZ,gBAAApJ,EAAA,OAAAoJ,KAAA,CAAAvJ,EAAAQ,EAAA,CA9K9B,GA+K+C,sCAAAU,EAAA,SAAAqI,EAAA,6BA/K/C9I,EAAAF,EAAAW,EAAA,WAAAqI,EAAA,mBAkL6B,4DAGA9I,EAAA,KAAAF,EAAkCsP,EAAI,YAAItG,EAAA,gFArLvE9I,EAAA,KAAAF,EAAAsP,EAAA,YAAAtG,EAAA,oFA6LI,KA7LJ,EA6LuB,gBA7LvBvJ,EAAA2F,GAAA,CA6LwC,WAASkK,EAAM,sCAAA9O,EAAA,KAAAA,EAAA,GAAAC,GAAA6O,EAAA,gBAAA7O,GA7LvD,4BAAAb,EA+LiF,KAAAH,EAAzE4F,GAAyE,cA/LjFzF,EA+LkE,KAAAH,EA/LlE+P,GA+LsC,CAA4B,0BAAA5P,EAAA,IAAAY,EAAA,MAAAA,EAAA,KA/LlEN,EAAA,mCAgMQ,QACEoF,GAAK,cAAA1F,EAAA,IAAAY,EAAA,MAAAA,EAAA,KAjMfhB,EAAA,ycAyMQ,MACEC,EAAA4Q,GAA2F,KAA3E,SAChBzQ,EAAW,KACXH,EAEQgrB,EAAA,gFAFKhrB,EAAA6Q,EAAA,EAAA7Q,EAAA4P,EAAA,CA5MvB,QA6M4B7O,EAAA,KAAAA,EAAA,GAAAC,GAAA,CAAA6O,EAAA,sCA7M5BpP,EAAAF,EAAAL,EAAA,2SC8DA,MAAMxJ,EAAQC,GAAS,EACTZ,GAAS,EACH,QAAQ,YAAY,EACX,GAAAW,EAAM,OAAO,OACpC,MAAAu0B,EAAqBl0B,EAAI,EAAE,EAC3Bm0B,EAAan0B,EAAI,EAAE,EACHA,EAAI,CAAE,GACtB,MAAAo0B,EAAep0B,EAAI,EAAE,EACJA,EAAI,EAAE,EACVA,EAAI,EAAK,EACtB,MAAAq0B,EAA2Br0B,EAAI,EAAK,EACpCs0B,EAAkBt0B,EAAI,EAAE,EACxBu0B,EAAav0B,EAAI,EAAE,EAEnB4d,EAAeje,EAAM,OAAO,KAG5B60B,EAAe,MAAOC,EAAY7W,IAAyB,CAE/D,MAAM8W,GAAYD,EAAK,KAAK,MAAM,GAAG,EAAE,OAAS,MAG1Cl2B,EAA8B,CAClC,cAAeqf,EACf,MAAO,OACP,UAAA8W,GACA,KAAMD,EAAK,MAAQ,0BACrB,EAEI,IACI,MAAAvjC,GAAW,MAAM,MAAM,2FAA4F,CACvH,OAAQ,OACR,QAAS,CAAC,eAAgB,kBAAkB,EAC5C,KAAM,KAAK,UAAUqN,CAAO,EAC7B,EAEG,IAACrN,GAAS,GACZ,eAAQ,MAAM,uCAAuCA,GAAS,MAAM,MAAMA,GAAS,UAAU,EAAE,EACxF,KAGT,KAAM,CAAC,UAAAyjC,CAAA,EAAgC,MAAMzjC,GAAS,KAAK,EACpD,OAAAyjC,QACA/iC,GAAO,CACN,qBAAM,2BAA4BA,EAAK,EACxC,KAEX,EAEMgjC,EAAe,SAAY,CAC/BV,EAAmB,MAAQ,CAAC,EAC5BK,EAAW,MAAQ,MAAM,QAAQ,IAAIJ,EAAW,MAAM,IAAIM,GAAQD,EAAaC,EAAM7W,CAAY,CAAC,CAAC,EAEnG,QAAQ,IAAI,eAAe,EACnB,YAAI2W,EAAW,KAAK,EACtB,MAAAM,EAAgBV,EAAW,MAAM,OAAO,CAACW,EAAGl8B,KAAU27B,EAAW,MAAM37B,EAAK,CAAC,EAC7E,MAAAm8B,EAASR,EAAW,MAAOM,CAAa,CAChD,EAEMG,EAAyB,IACtBpiC,EAAM,OAAO,CAClB,iBAAkB,CAAC9B,EAAMmkC,IAAY,QAC/B,OAAAniC,GAAAmiC,GAAA,YAAAA,EAAS,SAAT,MAAAniC,GAAiB,eACnB,OAAOmiC,EAAQ,OAAO,cAEjBnkC,CAAA,CACT,CACD,EAGGikC,EAAW,MAAOG,EAAsBL,IAA0B,CACtE,MAAMM,GAAWH,EAAuB,EACxC,QAAQ,IAAI,UAAU,EACtB,QAAQ,IAAIE,CAAU,EACtB,QAAQ,IAAIL,CAAa,EACzB,MAAM,QAAQ,IAAIA,EAAc,IAAI,CAACJ,EAAMr2B,KAAMg3B,EAAeD,GAAUD,EAAW92B,EAAC,EAAGq2B,EAAMr2B,EAAC,CAAC,CAAC,CACpG,EAEMg3B,EAAiB,MAAOD,EAAUE,EAAkBZ,GAAYr2B,IAAc,CAC1E,YAAI,uBAAwBA,CAAC,EAGjC,IACF,QAAQ,IAAIi3B,CAAQ,EACpB,QAAQ,IAAIZ,EAAI,EACV,MAAAU,EAAS,IAAIE,EAAUZ,GAAM,CACjC,iBAA2BtjC,IAAA,CACzB,QAAQ,IAAIA,EAAK,CACnB,EACA,QAAS,CAAC,eAAgBsjC,GAAK,IAAI,EACpC,QACM7iC,GAAO,CACN,cAAM,uBAAwBA,EAAK,SAC3C,CACA,QAAQ,IAAI,SAAS,EAEzB,EAGS,SAAA0jC,EAAOC,EAAuBC,EAAmC,CACxElB,EAAgB,MAAQ,CAAC,EACjB,YAAI,gBAAiBiB,CAAa,EAClC,YAAI,gBAAiBC,CAAa,EAEtCA,EAAc,OAAS,GACzBA,EAAc,QAAkBC,IAAA,CACzBnB,EAAgB,MAAM,SAASmB,GAAO,OAAO,CAAC,EAAE,OAAO,GAC1DnB,EAAgB,MAAM,KAAKmB,GAAO,OAAO,CAAC,EAAE,OAAO,CACrD,CACD,EAGHtB,EAAW,MAAQoB,EACNX,EAAA,EAAE,KAAK,IAAM,CACTc,EAAA,EAChB,EAGH,MAAMA,EAAiB,SAAY,CAC7B,GAAAnB,EAAW,MAAM,OAAS,EAAG,CAE/B,MAAMoB,EAAkBpB,EAAW,MAAM,IAAIn3B,IACpCA,GAAI,MAAM,GAAG,EAAE,CAAC,CACxB,EAEKw4B,EAAW,IAAI,SACrBA,EAAS,OAAO,YAAaD,EAAgB,CAAC,CAAC,EAC/CC,EAAS,OAAO,gBAAiBzB,EAAW,MAAM,CAAC,EAAE,IAAI,EACrD,IACF,MAAMjjC,GAAW,MAAM0B,EAAM,KAAK,iBAAiBgrB,CAAY,sBAAuBgY,CAAQ,EAC9F,QAAQ,IAAI1kC,EAAQ,EACpBmjC,EAAyB,MAAQ,GACpBD,EAAA,MAAQljC,GAAS,KAAK,mBAC5BU,GAAO,CACd,QAAQ,IAAIA,EAAK,EACnB,CAEJ,EAGM,CAAC,aAAAikC,EAAc,cAAAC,EAAe,aAAAC,CAAA,EAAiBC,GAAY,CAC/D,OAAAV,EACA,QAAS,IACT,SAAU,EACV,OAAQ,kBACT,6tCCzMM,SAASW,IAAY,CACxB,MAAMl3B,EAAQC,GAAS,EAGjBk3B,EAAeh3B,EAAkC,IAAMH,EAAM,QAAQ,eAAe,CAAC,EACrFo3B,EAAcj3B,EAAS,IAAMH,EAAM,QAAQ,aAAa,CAAC,EACzDq3B,EAAel3B,EAAS,IAAMH,EAAM,QAAQ,oBAAoB,CAAC,EACjEs3B,EAAgBn3B,EAA4B,IAAMH,EAAM,QAAQ,gBAAgB,CAAC,EACjFu3B,EAAuCp3B,EAAS,IAAMH,EAAM,QAAQ,4CAA4C,CAAC,EAGjHw3B,EAAoBr3B,EAAS,IAAMH,EAAM,QAAQ,oBAAoB,CAAC,EAEtEy3B,EAAkB,MAAO1lC,GACpB,MAAMiO,EAAM,SAAS,mBAAoBjO,CAAI,EAGlD2lC,EAAsB,MAAO7Y,GACxB,MAAM7e,EAAM,SAAS,4BAA6B6e,CAAY,EAGnE8Y,EAAmB,MAAO5lC,GACrBiO,EAAM,OAAO,2BAA4BjO,CAAI,EAGlD6lC,EAAyB,MAAOC,GAC3B,MAAM73B,EAAM,SAAS,qBAAsB63B,CAAS,EAGzDC,EAAoB,MAAO/lC,GACtB,MAAMiO,EAAM,SAAS,0BAA2BjO,CAAI,EAGzDgmC,EAAoB,MAAOF,GACtB,MAAM73B,EAAM,SAAS,0BAA2B63B,CAAS,EAG9DG,EAAmB,MAAOnZ,GACrB,MAAM7e,EAAM,SAAS,yBAA0B6e,CAAY,EAGhEoZ,EAAsB,MAAOlmC,GACxB,MAAMiO,EAAM,SAAS,4BAA6BjO,CAAI,EAG3DmmC,EAAc,SACT,MAAMl4B,EAAM,SAAS,gBAAgB,EAG1Cm4B,EAAe,MAAOpmC,GACjB,MAAMiO,EAAM,SAAS,gBAAiBjO,CAAI,EAM/CqmC,EAAY5/B,GAAewH,EAAM,SAAS,iBAAkBxH,CAAE,EAE9D6/B,EAAiB,MAAOtmC,GACnB,MAAMiO,EAAM,SAAS,eAAgBjO,CAAI,EAG9CumC,EAAW,MAAOvmC,IACpB,QAAQ,IAAIA,CAAI,EACTiO,EAAM,OAAO,kBAAmBjO,CAAI,GAMzCwmC,EAAmBC,GACdx4B,EAAM,SAAS,mBAAoBw4B,CAAM,EAM9CC,EAAat4B,EAAsB,WAAM,QAAApM,EAAAqjC,EAAY,QAAZ,YAAArjC,EAAmB,QAAS,GAAE,EAStE,OACH,aAAAojC,EACA,YAAAC,EACA,WAAAqB,EACA,aAAApB,EACA,qCAAAE,EACA,kBAAAC,EACA,cAAAF,EACA,iBAAAK,EACA,uBAAAC,EACA,YAAAM,EACA,aAAAC,EACA,wBAnB4B,CAACO,EAAgB,GAAOC,MACpD,QAAQ,IAAI,yBAAyB,EACrC,QAAQ,IAAIA,EAAQ,EACpB,QAAQ,IAAI,OAAO,EACZ34B,EAAM,OAAO,uCAAwC,CAAC,KAAA04B,EAAM,SAAAC,GAAS,GAgB5E,gBAAAlB,EACA,SAAAW,EACA,SAAAE,EACA,eAAAD,EACA,gBAAAE,EACA,kBAAAR,EACA,iBAAAC,EACA,oBAAAC,EACA,kBAAAH,EACA,oBAAAJ,CACJ,CACJ,6lECoPA,MAAM92B,EAAQC,GAAS,EACjB,CAAC,qBAAA+pB,CAAoB,EAAIT,GAAkB,EAC3C,CAAC,iBAAAyD,CAAgB,EAAI3D,GAAiB,EACtC,CAAC,QAAAzsB,CAAO,EAAI8I,GAAW,EACvB,CAAC,aAAA6wB,EAAc,cAAAG,EAAe,iBAAAU,EAAkB,oBAAAC,EAAqB,iBAAAN,GAAoBT,GAAU,EAEnGrY,EAAeje,EAAM,OAAO,KAE5Bg4B,EAAe33B,EAAI,IAAI,EACZA,EAAI,CAAE,GACPA,EAAI,CAAE,GAChB,MAAA43B,EAAgB53B,EAAI,EAAK,EACzB63B,EAAiB73B,EAAI,EAAK,EAC1B83B,EAAqB93B,EAAI,EAAK,EAC9B+3B,EAAW/3B,EAAI,EAAK,EACpBg4B,EAAgBh4B,EAAI,EAAK,EACzB+U,EAAW/U,EAAI,CACnB,WAAY,KACZ,UAAW,KACX,MAAO,KACP,MAAO,KACR,EAEKi4B,EAAWj4B,EAAqB,IAAI,EACpCk4B,EAASl4B,EAAI,CAAC,OAAQ,KAAK,EAC3Bm4B,EAAmBn4B,EAAI,IAAI,EAE3Bo4B,EAAkBl5B,EAAS,CAC/B,IAAK,YAAM,OAAApM,GAAAujC,EAAc,QAAd,YAAAvjC,GAAqB,SAChC,IAAM1C,IAAkB,CAClBimC,EAAc,QAChBA,EAAc,MAAM,QAAUjmC,GAChC,CACF,CACD,EAEKioC,GAAiBn5B,EAAS,CAC9B,IAAK,YAAM,OAAApM,GAAAujC,EAAc,QAAd,YAAAvjC,GAAqB,WAChC,IAAM1C,IAAkB,CAClBimC,EAAc,QAChBA,EAAc,MAAM,UAAYjmC,GAClC,CACF,CACD,EAEKkoC,EAAiBp5B,EAAS,CAC9B,IAAK,YAAM,OAAApM,GAAAujC,EAAc,QAAd,YAAAvjC,GAAqB,QAChC,IAAM1C,IAAkB,CAClBimC,EAAc,QAChBA,EAAc,MAAM,OAASjmC,GAC/B,CACF,CACD,EAEKmoC,GAAe,SAAY,CAC3B,GAACN,EAAS,MAEV,IACF,MAAMO,GAAa,MAAMP,EAAS,MAAM,KAAK,EACrC,YAAI,qBAAsBO,EAAU,EAC5CN,EAAO,MAAM,OAASM,GAEtB,MAAMxB,EAAoB,CACxB,aAAApZ,EACA,WAAY,CAAC,OAAQsa,EAAO,MAAM,MAAM,EACzC,EACDN,EAAc,MAAQ,GAEtBK,EAAS,MAAM,QAAQ,EACvBA,EAAS,MAAQ,WACVrmC,GAAO,CACN,cAAM,sBAAuBA,EAAK,EAE9C,EAEM6mC,EAAgBv5B,EAAS,IAAM,eAAApM,GAAAujC,EAAc,QAAd,YAAAvjC,GAAqB,MAAK,EACzD4lC,GAAoBx5B,EAAS,cAAM,OAAArM,GAAAC,GAAAujC,EAAc,QAAd,YAAAvjC,GAAqB,QAArB,YAAAD,EAA4B,KAAI,EACnE8lC,GAAiBz5B,EAAS,IAAM,eAAApM,GAAAujC,EAAc,QAAd,YAAAvjC,GAAqB,OAAM,EAC3D8lC,GAAe15B,EAAS,YAC5B,OAAC,WAAY,MAAM,EAAE,WAASpM,GAAA6lC,GAAe,QAAf,YAAA7lC,GAAsB,gBAAiB,EAAE,EACzE,EACM+lC,EAAe35B,EAAS,IAC5B,gBAAApM,GAAAujC,EAAc,QAAd,YAAAvjC,GAAqB,KAAK,MAAM,MAAM,KAAM,QAC9C,EACMgmC,EAAiB55B,EAAS,IAAM,eAAApM,GAAAyJ,EAAQ,QAAR,YAAAzJ,GAAe,QAAO,EAEtD+N,GAAA+2B,EAAgBmB,IAAa,CAC7BA,KAEEd,EAAS,QACXA,EAAS,MAAM,QAAQ,EACvBA,EAAS,MAAQ,MAIVA,EAAA,MAAQ,IAAIe,GAAS,CAC5B,UAAW,GACX,OAAQ,WACR,MAAO,CACL,OAAQC,EACV,EACA,KAAMf,EAAO,MAAM,QAAU,OAC7B,QAAS,IAAM,CACb,QAAQ,IAAI,kCAAmCA,EAAO,MAAM,MAAM,EACpE,CACD,EACH,CACD,EAGKr3B,GAAAw1B,EAAgB6C,IAAa,gBAC7BA,KACFf,EAAiB,MAAQ,KAAK,MAAM,KAAK,UAAUe,EAAQ,CAAC,EAC5DnkB,EAAS,MAAQ,CACf,YAAYjiB,EAAAomC,GAAS,WAAT,YAAApmC,EAAmB,WAC/B,WAAWD,GAAAqmC,GAAS,WAAT,YAAArmC,GAAmB,UAC9B,OAAO+N,GAAAs4B,GAAS,WAAT,YAAAt4B,GAAmB,MAC1B,OAAO2V,GAAA2iB,GAAS,WAAT,YAAA3iB,GAAmB,KAC5B,EACI2iB,GAAS,SACJhB,EAAA,MAAM,OAASgB,GAAS,QAEnC,EACC,CAAC,UAAW,GAAK,EAEpBv4B,GAAc,IAAM,CAClBo2B,EAAiBnZ,CAAY,EAC9B,EAGK,MAAAub,GAAuBroC,IAAc,CACrC,KAACA,IAAA,MAAAA,GAAM,QAAe,SAE1B,IAAIo0B,EAAO,GACN,OAAAp0B,GAAA,OAAO,QAASsoC,IAAe,WAC5B,MAAAhpC,IAAQ0C,GAAAsmC,GAAM,OAAN,YAAAtmC,GAAY,KACtB,GAAAsmC,GAAM,OAAS,YACjBlU,GAAQ,MAAM90B,EAAK,eACVgpC,GAAM,OAAS,SAAU,CAC5B,MAAA3V,IAAI5wB,GAAAumC,GAAM,OAAN,YAAAvmC,GAAY,MACtBqyB,GAAQ,KAAKzB,EAAC,IAAIrzB,EAAK,MAAMqzB,EAAC,IAChC,CACD,EACMyB,CACT,EAEMmU,EAA4BC,IAAoB,OACpD,OAAOxmC,EAAAwmC,IAAA,YAAAA,GAAM,eAAN,YAAAxmC,EAAoB,IAC7B,EAEMymC,EAAwB,IAAM,CACdvC,EAAA,CAClB,aAAApZ,EACA,WAAY,CAAC,QAASwa,EAAgB,KAAK,EAC5C,CACH,EAEMoB,GAA0B,IAAM,CAChBxC,EAAA,CAClB,aAAApZ,EACA,WAAY,CACV,KAAMzpB,GAAMwjC,EAAa,KAAK,EAAE,OAAO,YAAY,EACrD,CACD,EAAE,KAAK,IAAM,CACZE,EAAe,MAAQ,GACxB,CACH,EAEM4B,GAA4B,IAAM,CAClBzC,EAAA,CAClB,aAAApZ,EACA,WAAY,CAAC,OAAQ0a,EAAe,KAAK,EAC1C,CACH,EAEMoB,GAAuB,IAAM,CACb1C,EAAA,CAClB,aAAApZ,EACA,WAAY,CAAC,UAAWya,GAAe,KAAK,EAC7C,CACH,EAEA,OAAA9vB,GAAgB,IAAM,CAChB0vB,EAAS,QACXA,EAAS,MAAM,QAAQ,EACvBA,EAAS,MAAQ,MAInBvB,EAAiB,IAAI,EACrB9mC,EAAS,KAAK,6BAA6B,EAC5C,EAGQA,EAAA,IAAI,8BAA+B,IAAM,QACjC0oC,EAAA,OAAQxlC,GAAAqlC,EAAiB,QAAjB,YAAArlC,GAAwB,OAChD,ihTC1gBI2V,GAAU,CACb,KAAM,mCAEN,MAAO,CACL,MAAO,CACL,oBAAqB,GACrB,gCAAiC,IAClC,CACF,EAED,SAAU,CACR7Y,EAAS,IAAI,sCAAwC+pC,GAAkB,CACrE,KAAK,oBAAsB,GAC3B,KAAK,gCAAkCA,EAEvC,KAAK,sBAAsBA,CAAa,CAC1C,CAAC,EACD/pC,EAAS,IAAI,wCAA0CqhC,GAAW,CAC7D,CAAC,UAAW,QAAQ,EAAE,SAAS/1B,MAAI+1B,EAAQ,eAAe,CAAC,GAC5D,WAAW,IAAM,CACf,KAAK,sBAAsB,KAAK,+BAA+B,CACjE,EAAG,EAAI,GAAI,CAEf,CAAC,CACF,EAED,MAAO,CACL,SAAU,CACR,QAAQA,EAAQ,CACXA,GACD,OAAO,KAAK,KAAK,QAAS,QAAQ,EAAE,MAAO,CAE9C,CACF,EACD,WAAY,CACV,QAAQA,EAAQ,CACd,QAAQ,IAAIA,CAAM,CACnB,CACF,CACF,EAED,SAAU,CACR,GAAG5iB,GAAW,CACZ,YAAa,cACb,UAAW,kBACX,eAAgB,sBAClB,CAAC,EACD,SAAU,CACR,OAAOnT,MAAI,KAAK,eAAgB,KAAK,CACtC,EACD,UAAW,CACT,OAAOA,MAAI,KAAK,eAAgB,MAAM,CACvC,EACD,YAAa,CACX,OAAOA,MAAI,KAAK,eAAgB,eAAe,CAChD,CACF,EAED,QAAS,CACP,GAAGoT,GAAW,CACZ,sBAAuB,6BACzB,CAAC,CACF,EAED,eAAgB,CACd1e,EAAS,KAAK,qCAAqC,EACnDA,EAAS,KAAK,uCAAuC,CACtD,CACH,MAtGA,OAWa2Z,GAAA,OAAM,kBAAkB,MAXrC,2CACEiF,EAyBWI,GAAA,CA1Bb,WACqBL,EAAmB,oBADxC,sBAAAvE,EAAA,KAAAA,EAAA,GAAAC,GACqBsE,EAAmB,oBAAAtE,GAAE,MAAM,QADhD,QAAAb,EAEI,IAuBS,CAvBTH,EAuBS4F,GAAA,MAzBb,QAAAzF,EAGM,IAMe,CANfH,EAMe+P,GAAA,MATrB,QAAA5P,EAGoB,IAEZ,CALRY,EAAA,KAAAA,EAAA,GAAAN,EAGoB,eAEZ,GAAAT,EAAY6Q,EAAA,EACA3P,EAAQ,UAApBd,IAAAN,EAEO,OARfD,GAAA,CAOUG,EAA0D8P,EAAA,CAAlD,MAAM,YAAY,MAAM,UAP1C,QAAA3P,EAOkD,IAASY,EAAA,KAAAA,EAAA,IAP3DN,EAOkD,WAAS,KAP3D,MAAAM,EAAA,KAAAA,EAAA,GAAAN,EAOoE,QAC5D,MARRgF,EAAA,eAUMzF,EAcc6F,GAAA,MAxBpB,QAAA1F,EAWQ,IAYM,CAZNJ,EAYM,MAZNO,GAYM,CAVOY,EAAQ,UAInBd,IAAAN,EAKM,MAtBhBY,GAAA,CAkBWV,EAGS4P,EAAA,CAHF,QAAQ,OAAO,KAAK,QAAS,KAAM1O,EAAO,QAAE,OAAO,WAlBrE,QAAAf,EAkB8E,IAEhE,CApBdY,EAAA,KAAAA,EAAA,GAAAN,EAkB8E,0CAEhE,GAAAT,EAA4D8P,EAAA,CAApD,KAAK,UAAU,MAAM,SApB3C,QAAA3P,EAoBkD,IAAeY,EAAA,KAAAA,EAAA,IApBjEN,EAoBkD,iBAAe,KApBjE,iCAYU8E,EAIuBC,GAAA,CAhBjC,MAcc,iBACA,MAAM,iBAfpB,oJCuIA,MAAM9O,EAAQC,GAAS,EACjBC,EAASC,GAAU,EACnB,CAAC,cAAAu2B,EAAe,aAAAH,EAAc,oBAAAc,EAAqB,oBAAAP,CAAA,EAAuBR,GAAU,EACpF,CAAC,OAAAp+B,CAAM,EAAIkb,GAAe,EAG1B6mB,EAAmC55B,EAAI,EAAK,EAG5C65B,EAAiB36B,EAAiB,aAAM,OAAArM,GAAAC,EAAAujC,EAAc,QAAd,YAAAvjC,EAAqB,QAArB,YAAAD,EAA4B,KAAI,EACxEgmC,EAAe35B,EAAoC,IAAM,cAAApM,EAAAujC,EAAc,QAAd,YAAAvjC,EAAqB,KAAI,EAClFgnC,EAAyB56B,EAAS,WACtC,OAAA25B,EAAa,QAAU,qBAAuB,GAAC/lC,EAAAujC,EAAc,QAAd,MAAAvjC,EAAqB,WACtE,EAGMinC,EAAuB,IAAM,OACb/C,EAAA,CAClB,cAAclkC,EAAAujC,EAAc,QAAd,YAAAvjC,EAAqB,KACnC,WAAY,CACV,SAAU,GACZ,CACD,CACH,EAEMknC,EAA0B,IAAM,CACpCJ,EAAiC,MAAQ,EAC3C,EAEMK,EAA4B,MAAO37B,GAAiB,CACxD,QAAQ,IAAI,2BAA2B,EACnC,IACF,MAAMm4B,EAAoBn4B,CAAI,EAC9BuB,EAAO,KAAK,YAAY,QACjBjO,EAAO,CACN,cAAM,6BAA8BA,CAAK,EAErD,EAEMsoC,EAAY,IAAM,CACtB,OAAO,MAAM,CACf,EAEMC,EAA4B,IAAM,CACtC,QAAQ,IAAI,2BAA2B,EACvCvqC,EAAS,MAAM,sCAAuC+P,EAAM,OAAO,IAAI,CACzE,g7GC1KM0L,GAAgB,IAAMC,EAAA,WAAO,6BAAqC,kHAElE8uB,GAAmC,CACrC,CACI,KAAM,aACN,UAAW/uB,GACX,KAAM,CACF,MAAO,YACP,KAAM,4BACN,QAAS,GACT,WAAY,GACZ,WAAY,CAAC,MAAM,EACnB,OAAQ,WACZ,EACA,SAAU,CACN,CACI,KAAM,GACN,UAAWgvB,GACX,KAAM,kBACN,KAAM,CAAC,MAAO,YAAa,KAAM,4BAA6B,QAAS,EAAK,CAChF,EACA,CACI,KAAM,QACN,WAAY,CACR,QAASC,GACTC,kBACJ,EACA,KAAM,iBACN,KAAM,CAAC,MAAO,GAAI,KAAM,4BAA6B,QAAS,EAAK,CACvE,EACA,CACI,KAAM,gBACN,UAAWC,GACX,KAAM,oBACN,KAAM,CAAC,MAAO,gBAAiB,KAAM,4BAA6B,QAAS,EAAK,CACpF,EACA,CACI,KAAM,MACN,UAAWA,GACX,KAAM,gBACN,KAAM,CAAC,MAAO,eAAgB,KAAM,4BAA6B,QAAS,EAAK,EACnF,CAER,EACA,CACI,KAAM,gBACN,UAAWC,GACX,KAAM,CAAC,OAAQ,GAAM,WAAY,CAAC,MAAM,EAAG,OAAQ,YAAa,QAAS,EAAK,EAC9E,SAAU,CACN,CACI,KAAM,GACN,UAAWJ,GACX,KAAM,oBACN,KAAM,CAAC,MAAO,GAAI,KAAM,4BAA6B,QAAS,EAAK,CACvE,EACA,CACI,KAAM,2BACN,UAAWK,GACX,KAAM,qBACN,KAAM,CAAC,MAAO,sBAAuB,KAAM,4BAA6B,QAAS,EAAK,EAC1F,CACJ,CAER,ECtEMC,GAAoB,IAAMrvB,EAAA,WAAO,6BAAqC,kHACtEsvB,GAAgB,IAAMtvB,EAAA,WAAO,yBAAuC,+BAIpEuvB,GAAgC,CAClC,CACI,KAAM,SACN,UAAWF,GACX,KAAM,CACF,MAAO,QACP,KAAM,oBACN,QAAS,GACT,OAAQ,GACR,WAAY,CAAC,MAAM,EACnB,OAAQ,WACZ,EACA,SAAU,CACN,CACI,KAAM,GACN,UAAWC,GACX,KAAM,cACN,KAAM,CACF,MAAO,QACP,KAAM,sBACN,QAAS,GACT,OAAQ,GACZ,CACJ,CACJ,CAER,EChCMvvB,GAAgB,IAAMC,EAAA,WAAO,6BAAqC,kHAElEwvB,GAAkC,CACpC,CACI,KAAM,iBACN,UAAWzvB,GACX,KAAM,CACF,MAAO,gBACP,KAAM,yCACN,QAAS,GACT,WAAY,CAAC,MAAM,EACnB,OAAQ,WACZ,EACA,SAAU,CACN,CACI,KAAM,GACN,WAAY,CACR,QAAS,IAAMC,EAAA,WAAO,iCAAuD,wFACjF,EACA,KAAM,sBACN,KAAM,CAAC,MAAO,gBAAiB,KAAM,sBAAuB,QAAS,EAAK,EAC9E,CACJ,CAER,ECxBMyvB,GAAkB,IAAMzvB,EAAA,WAAO,6BAAqC,kHAGpE0vB,GAAe,IAAM1vB,EAAA,WAAO,4BAA6C,8GACzE2vB,GAAc,IAAM3vB,EAAA,WAAO,mBAAoC,+FAC/D4vB,GAAgB,IAAM5vB,EAAA,WAAO,6BAA8C,iHAC3E6vB,GAAkB,IAAM7vB,EAAA,WAAO,6BAA8C,yFAC7E8vB,GAAmB,IAAM9vB,EAAA,WAAO,6BAA+C,4FAG/E+vB,GAAyB,IAAM/vB,EAAA,WAAO,6BAAqD,yFAC3FgwB,GAAuB,IAAMhwB,EAAA,WAAO,kCAA0D,yFAC9FiwB,GAA0B,IAAMjwB,EAAA,WAAO,8BAAsD,yFAa7FkwB,GAAkC,CACpC,CACI,KAAM,YACN,UAAWT,GACX,SAAiBU,IACN,CAAC,KAAM,eAAe,GAEjC,KAAM,CACF,MAAO,WACP,KAAM,sBACN,QAAS,GACT,OAAQ,GACR,YAAa,CAAC,eAAe,EAC7B,WAAY,GACZ,WAAY,CAAC,MAAM,EACnB,OAAQ,WACZ,EACA,SAAU,CACN,CACI,KAAM,MACN,WAAY,CACR,QAAST,GACT,gBAAiBK,EACrB,EACA,KAAM,gBACN,KAAM,CAAC,MAAO,WAAY,KAAM,sBAAuB,QAAS,EAAK,CACzE,EACA,CACI,KAAM,MACN,WAAY,CACR,QAASJ,GACT,gBAAiBM,EACrB,EACA,KAAM,cACN,KAAM,CAAC,MAAO,cAAe,KAAM,sBAAuB,QAAS,EAAK,CAC5E,EACA,CACI,KAAM,WACN,WAAY,CACR,QAASJ,EACb,EACA,KAAM,mBACN,KAAM,CACF,MAAO,iBACP,KAAM,sBACN,QAAS,GACT,SAAU,OAElB,EACA,CACI,KAAM,QACN,WAAY,CACR,QAASD,GACT,gBAAiBI,EACrB,EACA,KAAM,iBACN,KAAM,CACF,MAAO,iBACP,KAAM,sBACN,QAAS,GACT,SAAU,OACV,OAAQ,GAEhB,EACA,CACI,KAAM,kBACN,WAAY,CACR,QAASF,EACb,EACA,KAAM,2BACN,KAAM,CACF,MAAO,oBACP,KAAM,sBACN,QAAS,GACT,SAAU,OACd,CACJ,CACJ,CAER,ECxGM/vB,GAAgB,IAAMC,EAAA,WAAO,6BAAqC,kHAGlEowB,GAAsC,CACxC,CACI,KAAM,eACN,UAAWrwB,GACX,KAAM,CACF,MAAO,cACP,KAAM,gBACN,QAAS,GACT,WAAY,CAAC,MAAM,EACnB,OAAQ,YACR,WAAY,EAChB,EACA,SAAU,CACN,CACI,KAAM,GACN,WAAY,CACR,QAAS,UAAM,OAA6C,uBAA+B,yFAC/F,EACA,KAAM,cACN,KAAM,CAAC,MAAO,cAAe,KAAM,gBAAiB,QAAS,EAAI,CACrE,EACA,CACI,KAAM,OACN,WAAY,CACR,QAAS,UAAM,OAAsC,sBAAmC,sFAC5F,EACA,KAAM,CAAC,MAAO,OAAQ,KAAM,gBAAiB,QAAS,EAAK,EAC3D,SAAU,CACN,CACI,KAAM,GACN,WAAY,CACR,QAAS,IAAMC,EAAA,WAAsC,0BAAuC,qGAChG,EACA,KAAM,mBACV,CAER,EACA,CACI,KAAM,OACN,WAAY,CACR,QAAS,UAAM,OAAsC,sBAAmC,sFAC5F,EACA,KAAM,CAAC,MAAO,OAAQ,KAAM,gBAAiB,QAAS,EAAK,EAC3D,SAAU,CACN,CACI,KAAM,GACN,WAAY,CACR,QAAS,IAAMA,EAAA,WAAsC,0BAAuC,kGAChG,EACA,KAAM,kBACV,EACA,CACI,KAAM,eACN,WAAY,CACR,QAAS,IAAMA,EAAA,WAAsC,0BAAuC,sFAChG,EACA,KAAM,4BACN,KAAM,CAAC,MAAO,UAAU,CAC5B,EACA,CACI,KAAM,4BACN,WAAY,CACR,QAAS,IAAMA,EAAA,WAAsC,+BAA4C,2FACrG,EACA,KAAM,mCACN,KAAM,CAAC,MAAO,gBAAgB,CAClC,EACA,CACI,KAAM,eACN,WAAY,CACR,QAAS,IAAMA,EAAA,WAAsC,0BAAuC,yFAChG,EACA,KAAM,4BACN,KAAM,CAAC,MAAO,UAAU,CAC5B,EACA,CACI,KAAM,eACN,WAAY,CACR,QAAS,IAAMA,EAAA,WAAsC,0BAAuC,sFAChG,EACA,KAAM,4BACN,KAAM,CAAC,MAAO,UAAU,CAC5B,EACA,CACI,KAAM,gBACN,WAAY,CACR,QAAS,IAAMA,EAAA,WAAsC,8BAA2C,sFACpG,EACA,KAAM,6BACN,KAAM,CAAC,MAAO,UAAU,CAC5B,EACA,CACI,KAAM,aACN,WAAY,CACR,QAAS,IAAMA,EAAA,WAAsC,wBAAqC,sFAC9F,EACA,KAAM,0BACN,KAAM,CAAC,MAAO,QAAQ,CAC1B,EACA,CACI,KAAM,eACN,WAAY,CACR,QAAS,IAAMA,EAAA,WAAsC,0BAAuC,sFAChG,EACA,KAAM,4BACN,KAAM,CACF,MAAO,WACP,YAAa,CAAC,mBAAmB,EAEzC,EACA,CACI,KAAM,qBACN,WAAY,CACR,QAAS,IAAMA,EAAA,WAAsC,gCAA6C,sFACtG,EACA,KAAM,kCACN,KAAM,CACF,MAAO,WACP,YAAa,CAAC,mBAAmB,EAEzC,EACA,CACI,KAAM,iBACN,WAAY,CACR,QAAS,IAAMA,EAAA,WAAsC,uCAAoD,2FAC7G,EACA,KAAM,iCACN,KAAM,CAAC,MAAO,gBAAgB,CAClC,EACA,CACI,KAAM,WACN,WAAY,CACR,QAAS,IAAMA,EAAA,WAAsC,0BAAuC,2FAChG,EACA,KAAM,4BACN,KAAM,CAAC,MAAO,UAAU,CAC5B,EACA,CACI,KAAM,aACN,WAAY,CACR,QAAS,IAAMA,EAAA,WAAsC,4BAAyC,gGAClG,EACA,KAAM,0BACN,KAAM,CAAC,MAAO,WAAW,CAC7B,EACA,CACI,KAAM,sBACN,WAAY,CACR,QAAS,IAAMA,EAAA,WAAsC,oCAAiD,2FAC1G,EACA,KAAM,mCACN,KAAM,CAAC,MAAO,eAAe,CACjC,EACA,CACI,KAAM,sBACN,WAAY,CACR,QAAS,IAAMA,EAAA,WAAsC,0BAAuC,2FAChG,EACA,KAAM,mCACN,KAAM,CAAC,MAAO,eAAe,EACjC,CAER,EACA,CACI,KAAM,YACN,WAAY,CACR,QAAS,UAAM,OAA2C,2BAA6C,uCAC3G,EACA,SAAU,CACN,CACI,KAAM,GACN,WAAY,CACR,QAAS,IAAMA,EAAA,WAA2C,+BAAiD,uCAC/G,EACA,KAAM,uBACV,EACA,CACI,KAAM,kBACN,WAAY,CACR,QAAS,IAAMA,EAAA,WAA2C,iCAAmD,uFACjH,EACA,KAAM,8BACV,EACA,CACI,KAAM,2BACN,WAAY,CACR,QAAS,IAAMA,EAAA,WAA2C,yCAA2D,uFACzH,EACA,KAAM,uCACV,EACA,CACI,KAAM,2BACN,WAAY,CACR,QAAS,IAAMA,EAAA,WAA2C,yCAA2D,uFACzH,EACA,KAAM,uCACV,EACA,CACI,KAAM,2CACN,WAAY,CACR,QAAS,IAAMA,EAAA,WAA2C,+CAAiE,8FAC/H,EACA,KAAM,sCACV,EACA,CACI,KAAM,WACN,WAAY,CACR,QAAS,IAAMA,EAAA,WAA2C,0BAA4C,uFAC1G,EACA,KAAM,iCACN,KAAM,CAAC,MAAO,UAAU,EAC5B,CAER,EACA,CACI,KAAM,QACN,WAAY,CACR,QAAS,UAAM,OAAuC,uBAAqC,mGAC/F,EACA,KAAM,CAAC,MAAO,QAAS,KAAM,gBAAiB,QAAS,EAAI,EAC3D,SAAU,CACN,CACI,KAAM,GACN,WAAY,CACR,QAAS,IAAMA,EAAA,WAAuC,2BAAyC,mGACnG,EACA,KAAM,mBACV,EACA,CACI,KAAM,WACN,WAAY,CACR,QAAS,IAAMA,EAAA,WAAuC,0BAAwC,uFAClG,EACA,KAAM,4BACV,EACA,CACI,KAAM,WACN,WAAY,CACR,QAAS,IAAMA,EAAA,WAAuC,0BAAwC,uFAClG,EACA,KAAM,4BACV,EACA,CACI,KAAM,cACN,WAAY,CACR,QAAS,IAAMA,EAAA,WAAuC,6BAA2C,+FACrG,EACA,KAAM,0BACV,EACA,CACI,KAAM,uBACN,WAAY,CACR,QAAS,IAAMA,EAAA,WAAuC,+BAA6C,2FACvG,EACA,KAAM,oCACV,CAER,EACA,CACI,KAAM,YACN,WAAY,CACR,QAAS,UAAM,OAA2C,2BAA6C,+FAC3G,EACA,KAAM,CAAC,MAAO,YAAa,KAAM,gBAAiB,QAAS,EAAI,EAC/D,SAAU,CACN,CACI,KAAM,GACN,WAAY,CACR,QAAS,IAAMA,EAAA,WAA2C,+BAAiD,+FAC/G,EACA,KAAM,uBACV,EACA,CACI,KAAM,iBACN,WAAY,CACR,QAAS,IAAMA,EAAA,WAA2C,iCAAmD,+FACjH,EACA,KAAM,8BACV,EACA,CACI,KAAM,0BACN,WAAY,CACR,QAAS,IAAMA,EAAA,WAA2C,yCAA2D,uFACzH,EACA,KAAM,wCACN,KAAM,CAAC,MAAO,oBAAoB,CACtC,EACA,CACI,KAAM,0BACN,WAAY,CACR,QAAS,IAAMA,EAAA,WAA2C,yCAA2D,uFACzH,EACA,KAAM,wCACN,KAAM,CAAC,MAAO,oBAAoB,CACtC,EACA,CACI,KAAM,WACN,WAAY,CACR,QAAS,IAAMA,EAAA,WAA2C,0BAAwC,uFACtG,EACA,KAAM,gCACV,EACA,CACI,KAAM,WACN,WAAY,CACR,QAAS,IAAMA,EAAA,WAA2C,0BAAwC,uFACtG,EACA,KAAM,iCACV,CAER,EACA,CACI,KAAM,aACN,WAAY,CACR,QAAS,UAAM,OAA4C,2BAA8C,+FAC7G,EACA,KAAM,CAAC,MAAO,aAAc,KAAM,gBAAiB,QAAS,EAAI,EAChE,SAAU,CACN,CACI,KAAM,GACN,WAAY,CACR,QAAS,IAAMA,EAAA,WAA4C,+BAAkD,+FACjH,EACA,KAAM,wBACV,EACA,CACI,KAAM,iBACN,WAAY,CACR,QAAS,IAAMA,EAAA,WAA4C,iCAAoD,+FACnH,EACA,KAAM,+BACV,EACA,CACI,KAAM,0BACN,WAAY,CACR,QAAS,IAAMA,EAAA,WAA4C,yCAA4D,uFAC3H,EACA,KAAM,yCACN,KAAM,CAAC,MAAO,qBAAqB,CACvC,EACA,CACI,KAAM,0BACN,WAAY,CACR,QAAS,IAAMA,EAAA,WAA4C,yCAA4D,uFAC3H,EACA,KAAM,yCACN,KAAM,CAAC,MAAO,qBAAqB,CACvC,EACA,CACI,KAAM,0BACN,WAAY,CACR,QAAS,IAAMA,EAAA,WAA4C,yCAA4D,uFAC3H,EACA,KAAM,yCACN,KAAM,CAAC,MAAO,qBAAqB,EACvC,CAER,EACA,CACI,KAAM,UACN,WAAY,CACR,QAAS,UAAM,OAAyC,yBAAyC,+FACrG,EACA,KAAM,CAAC,MAAO,UAAW,KAAM,gBAAiB,QAAS,EAAI,EAC7D,SAAU,CACN,CACI,KAAM,GACN,WAAY,CACR,QAAS,IAAMA,EAAA,WAAyC,6BAA6C,+FACzG,EACA,KAAM,qBACV,EACA,CACI,KAAM,WACN,WAAY,CACR,QAAS,IAAMA,EAAA,WAAyC,0BAA0C,uFACtG,EACA,KAAM,8BACV,EACA,CACI,KAAM,yBACN,WAAY,CACR,QAAS,IAAMA,EAAA,WAAyC,+BAA+C,2FAC3G,EACA,KAAM,sCACV,CAER,EACA,CACI,KAAM,SACN,WAAY,CACR,QAAS,IAAMA,EAAA,WAAO,sBAAuC,yFACjE,EACA,KAAM,CAAC,MAAO,SAAU,KAAM,gBAAiB,QAAS,EAAI,EAC5D,SAAU,CACN,CACI,KAAM,GACN,WAAY,CACR,QAAS,IAAMA,EAAA,WAAO,0BAA2C,yFACrE,EACA,KAAM,qBACN,KAAM,CAAC,MAAO,SAAU,KAAM,gBAAiB,QAAS,EAAI,CAChE,EACA,CACI,KAAM,aACN,WAAY,CACR,QAAS,IAAMA,EAAA,WAAO,gCAAiD,yFAC3E,EACA,KAAM,gCACV,CAER,EACA,CACI,KAAM,OACN,WAAY,CACR,QAAS,IAAMA,EAAA,WAAO,oBAAmC,yFAC7D,EACA,KAAM,CAAC,MAAO,OAAQ,KAAM,gBAAiB,QAAS,EAAI,EAC1D,SAAU,CACN,CACI,KAAM,GACN,WAAY,CACR,QAAS,IAAMA,EAAA,WAAO,wBAAuC,yCACjE,EACA,KAAM,mBACN,KAAM,CAAC,MAAO,OAAQ,KAAM,gBAAiB,QAAS,EAAI,CAC9D,EACA,CACI,KAAM,aACN,WAAY,CACR,QAAS,IAAMA,EAAA,WAAsC,mCAAgD,uFACzG,EACA,KAAM,2BACN,KAAM,CAAC,MAAO,MAAM,CACxB,EACA,CACI,KAAM,sBACN,WAAY,CACR,QAAS,IAAMA,EAAA,WAAsC,8BAA2C,uFACpG,EACA,KAAM,4BACN,KAAM,CAAC,MAAO,eAAe,EACjC,CAER,EACA,CACI,KAAM,QACN,WAAY,CACR,QAAS,UAAM,OAAuC,uBAAqC,uFAC/F,EACA,KAAM,CAAC,MAAO,QAAS,KAAM,gBAAiB,QAAS,EAAI,EAC3D,SAAU,CACN,CACI,KAAM,GACN,WAAY,CACR,QAAS,IAAMA,EAAA,WAAuC,2BAAyC,+FACnG,EACA,KAAM,mBACV,EACA,CACI,KAAM,eACN,WAAY,CACR,QAAS,IAAMA,EAAA,WAAuC,mCAAiD,uFAC3G,EACA,KAAM,iCACV,CACJ,CACJ,CACJ,CAER,ECxdMD,GAAgB,IAAMC,EAAA,WAAO,6BAAqC,kHAClEqwB,GAAa,IAAMrwB,EAAA,WAAO,0BAAyC,oHACnEswB,GAAa,IAAMtwB,EAAA,WAAO,0BAAyC,uIACnEuwB,GAAgB,IAAMvwB,EAAA,WAAO,6BAA4C,yJACzEwwB,GAAkB,IAAMxwB,EAAA,WAAO,+BAA4C,qGAC3EywB,GAAc,IAAMzwB,EAAA,WAAO,2BAAmD,6FAC9E0wB,GAAkB,IAAM1wB,EAAA,WAAO,+BAAuD,0FACtF2wB,GAAqB,IAAM3wB,EAAA,WAAO,kCAA0D,iHAG5F4wB,GAAiC,CACnC,CACI,KAAM,UACN,WAAY,CACR,QAAS7wB,EACb,EACA,KAAM,CACF,MAAO,SACP,KAAM,yCACN,QAAS,GACT,OAAQ,GACR,YAAa,CAAC,aAAa,EAC3B,WAAY,GACZ,WAAY,CAAC,MAAM,EACnB,OAAQ,WACZ,EACA,SAAU,CACN,CACI,KAAM,GACN,WAAY,CACR,QAASswB,GACT,gBAAiBI,EACrB,EACA,KAAM,eACN,KAAM,CAAC,MAAO,SAAU,KAAM,sBAAuB,QAAS,GAAO,OAAQ,EAAI,CACrF,EACA,CACI,KAAM,WACN,WAAY,CACR,QAASJ,GACT,gBAAiBI,EACrB,EACA,KAAM,wBACN,KAAM,CAAC,MAAO,kBAAmB,KAAM,sBAAuB,QAAS,GAAO,OAAQ,EAAI,CAC9F,EACA,CACI,KAAM,UACN,WAAY,CACR,QAASJ,GACT,gBAAiBI,EACrB,EACA,KAAM,uBACN,KAAM,CAAC,MAAO,iBAAkB,KAAM,sBAAuB,QAAS,GAAO,OAAQ,EAAI,CAC7F,EACA,CACI,KAAM,MACN,WAAY,CACR,QAASH,GACT,gBAAiBI,EACrB,EACA,KAAM,aACN,KAAM,CAAC,MAAO,MAAO,KAAM,sBAAuB,QAAS,GAAO,gBAAiB,EAAK,CAC5F,EACA,CACI,KAAM,YACN,WAAY,CACR,QAASJ,GACT,aAAcE,GACd,gBAAiBE,EACrB,EACA,KAAM,eACN,KAAM,CAAC,MAAO,MAAO,KAAM,sBAAuB,QAAS,GAAO,gBAAiB,EAAI,CAC3F,EACA,CACI,KAAM,QACN,WAAY,CACR,QAASH,GACT,aAAcC,GACd,gBAAiBG,EACrB,EACA,KAAM,gBACN,KAAM,CACF,MAAO,QACP,KAAM,sBACN,QAAS,GACT,gBAAiB,GACjB,SAAU,OACV,OAAQ,GAEhB,EACA,CACI,KAAM,WACN,WAAY,CACR,QAASJ,GACT,aAAcC,GACd,gBAAiBG,EACrB,EACA,KAAM,kBACN,KAAM,CAAC,MAAO,QAAS,KAAM,sBAAuB,QAAS,GAAO,gBAAiB,EAAI,EAC7F,CACJ,CAER,ECvGM5wB,GAAgB,IAAMC,EAAA,WAAO,6BAAqC,kHAClE6wB,GAAgB,IAAM7wB,EAAA,WAAO,6BAA+C,yGAC5E8wB,GAAiB,IAAM9wB,EAAA,WAAO,8BAAgD,+GAC9E+wB,GAAuB,IAAM/wB,EAAA,WAAO,oCAA+D,gGACnGgxB,GAAc,IAAMhxB,EAAA,WAAO,mBAAqC,4FAChEixB,GAAkB,IAAMjxB,EAAA,WAAO,+BAAiD,8FAChFkxB,GAAiB,IAAMlxB,EAAA,WAAO,8BAAsD,gGAEpFmxB,GAAmC,CACrC,CACI,KAAM,aACN,WAAY,CACR,QAASpxB,EACb,EACA,KAAM,CACF,MAAO,YACP,KAAM,sBACN,QAAS,GACT,OAAQ,GACR,YAAa,CAAC,gBAAgB,EAC9B,WAAY,GACZ,WAAY,CAAC,MAAM,EACnB,OAAQ,WACZ,EACA,SAAU,CACN,CACI,KAAM,GACN,WAAY,CACR,QAAS8wB,GACT,gBAAiBK,EACrB,EACA,KAAM,kBACN,KAAM,CAAC,MAAO,YAAa,KAAM,sBAAuB,QAAS,GAAO,OAAQ,EAAI,CACxF,EACA,CACI,KAAM,SACN,UAAWD,GACX,KAAM,mBACN,KAAM,CAAC,MAAO,SAAU,KAAM,sBAAuB,QAAS,EAAK,CACvE,EACA,CACI,KAAM,MACN,UAAWD,GACX,KAAM,gBACN,KAAM,CAAC,MAAO,MAAO,KAAM,sBAAuB,QAAS,EAAK,CACpE,EACA,CACI,KAAM,QACN,WAAY,CACR,QAASF,GACT,aAAcC,EAClB,EACA,KAAM,mBACN,KAAM,CACF,MAAO,WACP,KAAM,sBACN,QAAS,GACT,SAAU,OACV,gBAAiB,GACjB,OAAQ,GACZ,CACJ,CACJ,CAER,EChEMhxB,GAAgB,IAAMC,EAAA,WAAO,6BAAqC,kHAElEkwB,GAAkC,CACpC,CACI,KAAM,eACN,UAAWnwB,GACX,KAAM,CACF,MAAO,cACP,KAAM,sBACN,QAAS,GACT,OAAQ,GACR,YAAa,CAAC,eAAe,EAC7B,WAAY,CAAC,MAAM,EACnB,OAAQ,WACZ,EACA,SAAU,CACN,CACI,KAAM,GACN,WAAY,CACR,QAAS,IAAMC,EAAA,WAAO,8BAA0D,mGAChF,gBAAiB,IAAMA,EAAA,WAAO,+BAAuD,4CACzF,EACA,KAAM,mBACN,KAAM,CAAC,MAAO,cAAe,KAAM,sBAAuB,QAAS,GAAO,OAAQ,EAAI,CAC1F,EACA,CACI,KAAM,MACN,WAAY,CACR,QAAS,IAAMA,EAAA,WAAO,4BAAwD,0FAC9E,gBAAiB,IAAMA,EAAA,WAAO,+BAAuD,yFACzF,EACA,KAAM,YACN,KAAM,CAAC,MAAO,YAAa,KAAM,sBAAuB,QAAS,EAAK,EAC1E,CACJ,CAER,QCrCSxC,GAAA,OAAM,sBAAsB,EAC1BS,GAAA,OAAM,sBAAqB,EAa3BI,GAAA,OAAM,qBAAuB,EAEzBC,GAAA,OAAM,uBAAe,EAMzBC,GAAA,OAAM,eAAqB,oDAtBlC,OAAAR,EAAA,EAgCMN,EAAA,MAAAD,GAAA,CA/BJE,EAAA,SAYM,GATI,MAAAW,GAAA,CAFDV,EAAY4P,EAAA,CAAC,+BAJ5B,WAKyCzP,EAAA,KALzCH,EAAA8P,EAKgC,MALhC,QAAA3P,EAAA,IAKgCY,EAAA,KAAAA,EAAA,yBALhC,cAUgB,EAHDf,EAAY4P,EAAA,CAAC,+BAP5B,WAQ8EzP,EAAA,KAA5DH,EAAY8P,EAAA,CAAC,MAAY,mBAR3C,WAAA3P,EAAA,IAQqEY,EAAA,KAAAA,EAAA,oCARrE,4CAcgB,EAHDf,EAAY4P,EAAA,CAAC,+BAX5B,WAY8DzP,EAAA,KAA5CH,EAAY8P,EAAA,CAAC,MAAY,mBAZ3C,WAAA3P,EAAA,IAYqDY,EAAA,KAAAA,EAAA,oBAZrD,kDAgBM,KAMU,MAAAJ,GALM,CAjBtBX,EAAA4P,EAqBgB,sBAHN,QAAAzP,EAAA,OACuD,MAAAS,GAAA,CAA7CZ,EAAY8P,EAAA,CAAC,MAAY,mBAnB7C,WAAA3P,EAAA,IAmBwDY,EAAA,KAAAA,EAAA,qBAnBxD,kDAwBM,KAIU,MAAAF,GAAA,CAHDb,EAAY4P,EAAA,CAAC,+BAzB5B,WA0B8DzP,EAAA,KAA5CH,EAAY8P,EAAA,CAAC,MAAY,mBA1B3C,WAAA3P,EAAA,IA0BqDY,EAAA,KAAAA,EAAA,oBA1BrD,0CAgCgB,EAHDf,EAAY4P,EAAA,CAAC,+BA7B5B,WA8B8DzP,EAAA,KAA5CH,EAAY8P,EAAA,CAAC,MAAY,mBA9B3C,WAAA3P,EAAA,IA8BqDY,EAAA,KAAAA,EAAA,oBA9BrD,oFCyIe0yB,GAAA,CACb,KAAM,cAEN,MAAO,CACE,OACL,WAAY,IACd,CACF,EAEA,SAAU,CACH,sBAAiB,KAAK,IAAM,CAC/B,KAAK,WAAaxhC,MAAI,KAAK,YAAa,CAAC,EACzC,KAAK,YAAY,EAClB,CACH,EAEA,SAAU,CACR,GAAGmT,GAAW,CACZ,YAAa,oBACd,EACD,WAAY,CACV,OAAOnT,EAAI,SAAK,YAAa,SAAU,SAAS,CAClD,EACA,eAAgB,CACd,OAAOA,EAAI,SAAK,YAAa,wBAAyB,EAAE,CAC1D,EACA,oBAAqB,CACnB,OAAOA,EAAI,SAAK,YAAa,qBAAsB,EAAE,CACvD,EACA,sBAAuB,CACrB,MAAMyhC,EAAQ,KAAK,mBACbC,EAAW,KAAK,cAChBC,EAAkB,CAAC,EACnB,OAAAF,EAAA,QAASzsC,GAAQ,CACL2sC,EAAA3sC,CAAG,EAAI0sC,EAAS1sC,CAAG,EACpC,EACM2sC,CAAA,CAEX,EAEA,QAAS,CACP,GAAGvuB,GAAW,CACZ,iBAAkB,4BAClB,eAAgB,uBAChB,iBAAkB,yBACnB,EACD,aAAc,CACZ,QAAQ,IAAI,aAAa,EACzB,QAAQ,IAAI,SAAS,eAAe,gBAAgB,CAAC,EACvCwuB,GAAQ,CAAC,SAAS,eAAe,gBAAgB,CAAC,EAAG,CACjE,MAAO,CAAC/iC,EAAIgjC,EAAQC,KAClB,QAAQ,IAAI,OAAO,EACnB,QAAQ,IAAIjjC,CAAE,EACd,QAAQ,IAAIijC,CAAM,EACV,YAAIjjC,EAAG,SAAS,EACxB,QAAQ,IAAIijC,EAAO,UAAU,SAAS,MAAM,CAAC,EACtCA,EAAO,UAAU,SAAS,MAAM,EACzC,CACD,EAEK,GAAG,OAASjjC,GAAO,CAEpBA,EAAA,UAAU,IAAI,WAAW,CAC7B,GAME,GAAG,UAAYA,GAAO,CAElBA,EAAA,UAAU,OAAO,WAAW,EAG/B,OAAO,WAAW,IAAM,CACnBA,EAAA,UAAU,IAAI,UAAU,EAC3B,OAAO,WAAW,IAAM,CACnBA,EAAA,UAAU,OAAO,UAAU,GAC7B,GAAG,GACL,GAAG,EACP,CACL,EACA,mBAAmBkjC,EAAWC,EAASC,EAAS,CAC9C,QAAQ,IAAI,cAAc,EAC1B,QAAQ,IAAIF,CAAS,EACrB,QAAQ,IAAIC,CAAO,EACb,MAAAE,EAAUliC,MAAI,KAAK,WAAY,uBAAuB+hC,CAAS,GAAI,EAAE,EAG3E,GAFA,QAAQ,IAAIG,CAAO,EAEfA,EAAS,CACX,MAAMC,EAASniC,EAAA,IAAIkiC,EAAS,SAAU,EAAE,EACjCC,EAAAH,CAAO,EAAE,SAAWC,EACtB,sBAAiB,KAAK,UAAU,EAEzC,EAKA,cAAcC,EAAS,CACrB,OAAOA,EAAQ,QAAQ,aAAa,IAAM,GACrCA,EAAQ,QAAQ,UAAU,IAAM,GAChCA,EAAQ,QAAQ,QAAQ,IAAM,CACrC,EACA,uBAAuBhE,EAAO,CACrB,OACL,OAAQA,EAAM,SACd,OAAQ,CAACA,EAAM,QACjB,CACF,EACA,YAAYgE,EAAS,CACZ,OAAAA,EAAQ,QAAQ,aAAa,IAAM,GAErCA,EAAQ,QAAQ,QAAQ,IAAM,CACrC,EACA,eAAeA,EAAShE,EAAQ,KAAM7hC,EAAK,KAAM,CAC/C3H,EAAS,MAAM,6BAA8B,CAAC,QAAAwtC,EAAS,MAAAhE,EAAO,GAAA7hC,EAAG,CACnE,EACA,oBAAoB6lC,EAAShE,EAAQ,KAAM7hC,EAAK,KAAM,CACpD3H,EAAS,MAAM,8BAA+B,CAAC,QAAAwtC,EAAS,MAAAhE,EAAO,GAAA7hC,EAAG,CACpE,EACA,qBAAqB6lC,EAAS,CAC5B,MAAME,EAAapiC,EAAA,IAAIkiC,EAAS,cAAe,EAAE,EAC3CC,EAASniC,EAAA,IAAIkiC,EAAS,SAAU,EAAE,EAClCG,EAAgB,CAAC,EACZ,OAAAD,EAAA,QAASptC,GAAQ,CACZqtC,EAAArtC,CAAG,EAAImtC,EAAOntC,CAAG,EAChC,EACMqtC,CACT,EACA,aAAaH,EAAS,CAEpB,OAAIA,EAAQ,QAAQ,cAAc,IAAM,EAC/B,eAELA,EAAQ,QAAQ,aAAa,IAAM,EAC9B,cAELA,EAAQ,QAAQ,UAAU,IAAM,EAC3B,WAELA,EAAQ,QAAQ,QAAQ,IAAM,EACzB,SAELA,EAAQ,QAAQ,SAAS,IAAM,EAC1B,UAGFA,CACT,EACA,WAAWhE,EAAO,CACZ,GAAAA,EAAM,OAAS,UACV,gBAEL,GAAAA,EAAM,OAAS,OACV,aAEL,GAAAA,EAAM,OAAS,SACV,eAEL,GAAAA,EAAM,OAAS,SACV,cAEX,EACA,aAAaA,EAAO,CACd,GAAAA,EAAM,OAAS,UACV,OAAAl+B,MAAIk+B,EAAO,gBAAiB,IAAI,EAErC,GAAAA,EAAM,OAAS,OACV,OAAAl+B,MAAIk+B,EAAO,gBAAiB,IAAI,EAErC,GAAAA,EAAM,OAAS,SACV,OAAAl+B,MAAIk+B,EAAO,gBAAiB,IAAI,EAErC,GAAAA,EAAM,OAAS,SACV,OAAAl+B,MAAIk+B,EAAO,iBAAkB,IAAI,CAC1C,CACF,CAEJ,EA3TqCtwB,GAAS,CAAU,MAAK,wBAAG,WAAM,oFAGzDa,GAAc,CAAO,gCAACC,GAAM,gDAExBC,GAAM,CAA+B,+BAACC,GAAS,yEAYnD,MAAM,8BACC,qBAAC,YACC,wBAAwB,uCAa/B8M,GAAM,CAAoB,+BAACC,GAAS,mDAjCnDC,GAAA,gCAoC6CC,GAAM,6CAGLC,GAAM,gEAKnB,aAAqB,2CAkBhCG,GAAgB,8BAACC,GAAM,CAAqB,oBAA+B,yFAEpE,QAAyB,6CAMzB,MAAM,6DACFE,GAAM,CAAqB,qCAACgC,GAAgB,+CAvE7E/B,GAAA,qCA4F4CC,GAAc,CAAQ,IAAK,iDAE9CgmB,GAAM,CAAyB,+BAAC/lB,GAAS,yGAMvCE,GAAM,CAA8B,sCAACqC,GAAe,sDAiB3CpC,GAAM,0FAGtBE,GAAM,CAAkD,uCAACC,GAAa,yGArHpF1O,EA2HM,EAAAN,EAAA,MAAAD,GAAA,CAAAE,EA1HJ,MAaMO,GAbN,CAAAP,EACE,MAWMW,GAXN,CAAAX,EACE,MASMY,GATN,CAAAZ,EACE,MAOMa,GAPN,CAC4Cb,EAAA,MAAAc,GAAA,CAAAd,EAR1D,MAQiDe,GAAA,CAAAd,EARjD8P,EAQwB,cAAA3P,EAAA,IAAAY,EAAA,KAAAA,EAAA,IARxBN,EAAA,mCAUgB,GACAM,EAAA,KAAAA,EAAA,GAAAhB,EAAoD,MAA/C,OAAM,iCAAkC,YAAAA,EAAA,MAC7C0N,KAAGvM,EAAM,cACTH,EAAiC,KAAAA,EAAA,GAAAhB,EAAA,0DAAAgB,EAbjD,CAawC,IAAAA,EAAA,GAAAhB,EAAA,qFAAAC,EAbxC8P,EAawB,cAAA3P,EAAA,IAAAY,EAAA,KAAAA,EAAA,IAbxBN,EAAA,gCAkBQ,KAEIV,EAAA,MAUM2N,GAVN,CACE3N,EAAA,MAAAiQ,GAAA,CAAAjQ,EACE,MAAkE4N,GAAzD,CAAA5M,EAAA,KAAAA,EAAA,GAAAhB,EAAA,8CAEXA,EAKM,iEALD,OAAgDA,EAAA,OAAwB,kDAAAgB,EAAA,KAAAA,EAAA,OAAAna,IAAAsa,EAAA,qBAAAA,EAAA,uBAAAta,CAAA,GAC3E,YAC0Ema,EAAA,KAAAA,EADhE,GAAC,IAA6Bna,IAAAsa,EAAA,gBAAAA,EAAA,kBAAAta,CAAA,IAAAma,EACtC,CAAkE,IAAAA,EAAA,IAAAhB,EAArD,MAAqB,uCAAiBA,EAAA,SAAC,4CACtD,WACA,MAAAA,EAAA,gJAKN,GACEgB,EAAA,MAAAA,EAAA,IAAAhB,EA6EM,YA/GlB,kBAkCuC,YAA3BA,EAAA,MAAA6N,GAAA,EAAwDxN,EAAA,IAAAN,EAAAO,GAAA,KAAA4Q,GAAA/P,EAAA,sBAAAizB,EAAAh/B,KAAOiL,EAAA,EAA0BN,EAAA,WAAA3K,EACvF,kCACE4K,EAAA,MAAA8N,GAAA,CACE3M,EAAA,cAAkG/L,QAAT2K,EAAA,MAAAgO,GAAA,CAAA9N,EArC3G8P,EAqC6F,CAAc,6EAAA3P,EAAA,IAAAY,EAAA,KAAAA,EAAA,IArC3GN,EAAA,2BAuCgB,GAAAgF,EAAA,OAAAvE,EACE,cAAkE/L,CAAA,EAE/DsQ,EAAM,QAFyDrF,EAAA,EAAAN,EAAA,MAAAiO,GAAAhN,EAAA,MAAAA,EAAA,KAxCpFhB,EAAA,8EA0C2BA,EAA0C,MAAE,CAAyB,kDAAAiB,GAAAE,EAAA,oBAAA/L,CAAA,EAC9E,YAAA6L,GAIME,EAJN,eAIM/L,CAAA,gBACN4K,EAAA,QAAAmO,GAAA3N,EAAKW,EAAM,aAAkC/L,CAAA,OAAAoL,EAAA4zB,EAAA,aAC/B,EAAApzB,EAAA,MAAAA,EAAd,EAES,EAAAhB,EAAA,0DAAAo0B,EAnD3B,UAiDwD/zB,IAAAmF,EAAAuK,EAAA,CAAsD,IAAI,8DAjDlH,4CAAArP,EAAA,iCAoDkB,GAES,IAAA0zB,EAtD3B,SAwDkB1uB,EAES,QAN8BrF,EAAA,EAAAmF,EAAAuK,EAAA,CAAsD,IAAI,8DApDnH,4CAAArP,EAAA,+BA0D2BM,EAFI,EAAC,IAA2DA,EAAA,IAAAhB,EAAA,0DAAAC,EAAM8P,EAAO,mEAxDxG,4CAAArP,EAAA,oCA6GoB,KAAAuN,EAAA,IA9CJjO,EAAA,MAAAoO,GAAA,EAAA/N,EAA6D,IAAYN,EAAWO,GAAA,KAAA4Q,GAAA/P,EAAA,qBAAAizB,CAAA,GAAAhE,EAAAqE,KAASp0B,EAAA,EAAYN,EAAA,qBAAA3K,CAAA,SAAAq/B,CAAA,GACvG,sBAhElB,MAiEiCpkB,GAAA,CAAArQ,EAAA,OACX,MAAAqB,GAAA,CAAAF,EAAA,uBAEMivB,CAFD,EAAM,mFAGXpwB,EAmBM,iEAnBD,OAAAA,EAAgD,MAAE,CAAmC,kDAAAiB,GAAAE,EAAA,oBAAA/L,EAAAg7B,EAAAqE,CAAA,EACxF,YAAAxzB,GAOME,EAPN,eAOM/L,EAAAg7B,EAAAqE,CAAA,MA7E9B,MAwE+BnmB,GAAA,CAAAtO,EACH,QAEMsQ,GAAA,CAAA5P,EAAAF,EAAAW,EAAA,WAAAivB,CAAA,4CAGK,OA9EvC,SAiFoD1qB,EAA5B,GAES,KAL4BrF,EAAA,EAAAmF,EAAAuK,EAAA,CAAsD,IAAI,EAAU,MAAK,mEA9EtI,QAgFwB9O,GAAAE,EAAA,mBAAA/L,EAAAq/B,EAAA,mCAhFxB/zB,EAAA,6BAiF4C,KAAQ,cAEnB0vB,EAnFjC,UAiF4D/vB,IAAAmF,EAAAuK,EAAA,CAA4D,IAAI,EAAU,MAAK,yEAjF3I,QAmFwB9O,GAAAE,EAAA,mBAAA/L,EAAAq/B,EAAA,mCAnFxB/zB,EAAA,oDAqFwBgF,EAES,OAAA1E,EAFI,EAAC,IAA2DA,EAAA,IAAAhB,EAAA,0DAAAC,EAAM8P,EAAO,mEArF9G,4CAAArP,EAAA,kDA4F4B,WACVS,EAAA,YAAA/L,CAAA,GAAAiL,EAAA,EAaQN,EAAA,OAAAyO,GAAA,CAAAxO,EAXJ,MAUMw0B,GAVN,CACEx0B,EAAA,MAAAyO,GAAA,CAAAzO,EACE,MAAkE0O,GAAzD,CAAA1N,EAAA,MAAAA,EAAA,IAAAhB,EAAA,8CAEXA,EAKI,IALJ,CAKI,4DAJJ,OAC0JA,EAAA,MAAA2O,GAAA,CAA1I3O,EAAA,IAAAgR,GAAA,CAAA/Q,EAAyE8P,EAAmB,CAAC,MAAK,6FArG1I,4CAAArP,EAAA,uHAAAgF,EAAA,oBAqHQ,GAAA1E,EACE,EAMM,IAAAA,EAAA,IAAAhB,EAAA,0DAAAA,EALJ,OAIM4O,GAJN,CAAA5O,EACE,MAEO6O,GAFP,CACqD7O,EAAA,MAAA8O,GAAA,CAAvC9O,EAAA,OAAA+O,GAAA,CAAA9O,EAAS4P,EAAU,UAzH/C,kDAAAnP,EAAA,sECaeg0B,GAAA,CACb,KAAM,gBAEN,SAAU,CACC9tC,EAAA,IAAI,6BAAsCkB,GAAA,CAC3C,MAAA6sC,EAAW,KAAK,iBAAiB7sC,CAAI,EAEtC,2BAAsB6sC,EAAU,KAAK,EAC3C,EACQ/tC,EAAA,IAAI,8BAAuCkB,GAAA,CAC5C,MAAA6sC,EAAW,KAAK,iBAAiB7sC,CAAI,EACtC,2BAAsB6sC,EAAU,QAAQ,EAC9C,EACQ/tC,EAAA,IAAI,gCAAiC,IAAM,CAClD,QAAQ,IAAI,+BAA+B,EAC3C,SAAS,eAAe,SAAS,EAAE,cAAc,SAAS,OAAO,EAClE,CACH,EAEA,QAAS,CACP,GAAG0e,GAAW,CACZ,iBAAkB,4BACnB,EACD,sBAAsBqvB,EAAUC,EAAQ,CAChC,MAAAC,EAAS,SAAS,eAAe,SAAS,EAI1C/gC,GAHiB+gC,EAAO,iBAAmBA,EAAO,cAAc,UAEjC,gBACP,cAAcF,CAAQ,EAGpD,GAAI7gC,IAAY,KAAM,CACpB,QAAQ,MAAM,mBAAmB,EACjC,OAGE8gC,IAAW,MACL9gC,EAAA,aAAa,aAAc,MAAM,EAEzCA,EAAQ,gBAAgB,YAAY,CAExC,EACA,iBAAiBhM,EAAM,CACf,MAAAssC,EAAUliC,MAAIpK,EAAM,SAAS,EAC7ByG,EAAK2D,MAAIpK,EAAM,IAAI,EAEzB,IAAI6sC,EAAW,GACf,OAAIP,EAAQ,QAAQ,cAAc,IAAM,EAClC7lC,IAAO,KACF,iBAAiB6lC,CAAO,GAE1B,iBAAiBA,CAAO,KAAK7lC,CAAE,GAEpC6lC,EAAQ,QAAQ,SAAS,IAAM,EAC7B7lC,IAAO,KACF,YAAY6lC,CAAO,GAErB,YAAYA,CAAO,KAAK7lC,CAAE,IAE/B6lC,EAAQ,QAAQ,QAAQ,IAAM,IAChCO,EAAW,YAAYP,CAAO,WAGzBO,EAAA,CACT,CAEJ,yDA7EIG,GAEM30B,EAAAa,EAAAiS,EAAAnD,EAAAvK,EAAApE,EAAA,CAFD,OAAAd,EAAA,EAA6BN,EAAA,MAAAD,GAAAkB,EAAA,KAAAA,EAAA,IAAehB,EAAA,qCAC/C,mBAA2B,SAAqB,CAAC,GAAG,6JCWrDP,GAAU,CACb,KAAM,aACN,WAAY,CACV,YAAAs1B,GACA,YAAAC,GACA,cAAAC,EACD,EAED,WAAY,CAAE,EAEd,OAAQ,SAER,SAAU,CACR,aAAc,CACZ,OAAO,KAAK,OAAO,MAAM,SAAS,WACnC,EACD,KAAM,CACJ,OAAO,KAAK,OAAO,QACpB,CACF,CACH,EAjCOn1B,GAAA,OAAM,cAAc,+FAAzB,OAAAO,EAAA,EAAAN,EAIM,MAJND,GAIM,CAHJG,EAAei1B,CAAA,EACfj1B,EAAek1B,CAAA,EACfl1B,EAAiBm1B,CAAA,oCCCfC,GAAgC,CAAC,CACnC,KAAM,UACN,UAAWC,GACX,KAAM,CACF,MAAO,SACP,KAAM,gBACN,QAAS,GACT,OAAQ,EACZ,EACA,SAAU,CACN,CACI,KAAM,GACN,WAAY,CACR,QAAS,IAAMhzB,EAAA,WAAO,8BAAmC,yFAC7D,EACA,KAAM,eACN,KAAM,CAAC,MAAO,cAAe,KAAM,sBAAuB,QAAS,GAAO,OAAQ,EAAI,EAC1F,CAER,CAAC,ECdcizB,GAAA,CACb,KAAM,iCAEN,WAAY,CAAC,SAAS,EAEtB,OAAQ,gBAER,SAAU,CACR,aAAc,CACL,YAAK,OAAO,MAAM,SAAS,WACpC,EACA,KAAM,CACJ,OAAO,KAAK,OAAO,SACrB,CAEJ,mCAxBEC,GAIa,sBAJkBn1B,EAAgB,EAAAmF,EAAAW,GAAA,eADjD,wBAGM,QAAA/F,EAAA,MAAAC,EAAA,EAAAmF,EAAAY,GAAA,SAAAjF,EAAA,oCAHN,6DCKMs0B,GAAU,IAAMnzB,EAAA,WAAO,8BAAoC,sGAC3DozB,GAAuB,IAAMpzB,EAAA,WAAO,oCAA+C,4GACnFqzB,GAAmB,IAAMrzB,EAAA,WAAO,+BAA0C,0FAEnEszB,GAAkC,CAC3C,CACI,KAAM,UACN,UAAWD,GACX,KAAM,CACF,WAAY,CAAC,cAAc,EAC3B,OAAQ,eACR,QAAS,EACb,EACA,SAAU,CACN,CACI,KAAM,GACN,UAAWF,GACX,KAAM,UACN,KAAM,CAAC,MAAO,oBAAqB,KAAM,SAAU,QAAS,GAAM,WAAY,GAAM,WAAY,EAAI,CACxG,EACA,CACI,KAAM,eACN,WAAY,CACR,QAASC,GACT,WAAY,IAAMpzB,EAAA,WAAO,wBAAoD,6FACjF,EACA,KAAM,qBACN,KAAM,CAAC,MAAO,qBAAsB,KAAM,SAAU,QAAS,EAAI,CACrE,EACA,CACI,KAAM,wBACN,UAAW,UAAM,OAA0C,0BAA8B,4FACzF,KAAM,wBACN,KAAM,CAAC,MAAO,WAAY,KAAM,SAAU,QAAS,EAAI,CAC3D,EACA,CACI,KAAM,wBACN,UAAW,IAAMA,EAAA,WAAO,wBAA8B,4GACtD,KAAM,wBACN,KAAM,CAAC,MAAO,SAAU,KAAM,SAAU,QAAS,EAAI,CACzD,EACA,CACI,KAAM,iCACN,UAAW,IAAMA,EAAA,WAAO,2CAAiD,wGACzE,KAAM,2BACN,KAAM,CAAC,MAAO,SAAU,KAAM,SAAU,QAAS,EAAI,CACzD,EACA,CACI,KAAM,gCACN,UAAW,UAAM,OAAyC,8BAAgC,4FAC1F,KAAM,0BACN,KAAM,CAAC,MAAO,UAAW,KAAM,SAAU,QAAS,EAAI,CAC1D,EACA,CACI,KAAM,uBACN,UAAW,UAAM,OAAyC,yBAA6B,2FACvF,KAAM,uBACN,KAAM,CAAC,MAAO,UAAW,KAAM,SAAU,QAAS,EAAI,EAC1D,CACJ,CAER,EAGauzB,GAAmC,CAC5C,CACI,KAAM,UACN,UAAWC,GACX,KAAM,CACF,OAAQ,sBACR,QAAS,GACT,OAAQ,EACZ,EACA,SAAU,CACN,CACI,KAAM,IACN,UAAW,IAAMxzB,EAAA,WAAO,8BAAoC,sGAC5D,KAAM,iBACN,KAAM,CAAC,MAAO,oBAAqB,KAAM,SAAU,QAAS,GAAM,WAAY,GAAM,WAAY,EAAI,CACxG,EACA,CACI,KAAM,eACN,WAAY,CACR,QAASozB,GACT,WAAY,UAAM,OAA0C,0BAAoD,2FACpH,EACA,KAAM,8BACN,KAAM,CAAC,MAAO,qBAAsB,KAAM,SAAU,QAAS,EAAI,CACrE,EACA,CACI,KAAM,wBACN,UAAW,UAAM,OAA0C,0BAA8B,4FACzF,KAAM,+BACN,KAAM,CAAC,MAAO,WAAY,KAAM,SAAU,QAAS,EAAI,CAC3D,EACA,CACI,KAAM,wBACN,UAAW,UAAM,OAAmD,0BAA8B,0GAClG,KAAM,+BACN,KAAM,CAAC,MAAO,SAAU,KAAM,SAAU,QAAS,EAAI,CACzD,EACA,CACI,KAAM,iCACN,UAAW,UAAM,OAAmD,6CAAiD,sGACrH,KAAM,kCACN,KAAM,CAAC,MAAO,SAAU,KAAM,SAAU,QAAS,EAAI,CACzD,EACA,CACI,KAAM,gCACN,UAAW,UAAM,OAAyC,8BAAgC,4FAC1F,KAAM,iCACN,KAAM,CAAC,MAAO,UAAW,KAAM,SAAU,QAAS,EAAI,CAC1D,EACA,CACI,KAAM,uBACN,UAAW,UAAM,OAAyC,yBAA6B,2FACvF,KAAM,8BACN,KAAM,CAAC,MAAO,UAAW,KAAM,SAAU,QAAS,EAAI,EAC1D,CACJ,CAER,EC3HMK,GAAiB,IAAMzzB,EAAA,WAAO,2BAAiC,0GAC/D0zB,GAAc,IAAM1zB,EAAA,WAAO,qBAAgC,0FAEpD2zB,GAAkC,CAC3C,CACI,KAAM,WACN,UAAWD,GACX,KAAM,CACF,OAAQ,OACZ,EACA,SAAU,CACN,CACI,KAAM,gCACN,UAAWD,GACX,KAAM,qBACN,KAAM,CAAC,MAAO,kBAAmB,KAAM,SAAU,QAAS,GAAM,WAAY,GAAM,OAAQ,OAAQ,CACtG,EACA,CACI,KAAM,uCACN,UAAW,IAAMzzB,EAAA,WAAO,2BAAiC,0GACzD,KAAM,4BACN,KAAM,CAAC,MAAO,kBAAmB,KAAM,SAAU,QAAS,GAAM,WAAY,EAAI,EACpF,CACJ,CAER,EAEa4zB,GAAwC,CACjD,KAAM,WACN,UAAWF,GACX,SAAU,CACN,CACI,KAAM,sCACN,UAAW,IAAM1zB,EAAA,WAAO,iCAAuC,0FAC/D,KAAM,2BACN,KAAM,CAAC,MAAO,2BAA4B,KAAM,SAAU,QAAS,EAAI,EAE/E,EACA,KAAM,CAAC,OAAQ,GAAM,QAAS,EAAK,CACvC,ECvCMD,GAAgB,IAAMC,EAAA,WAAO,6BAAqC,kHAElE6zB,GAAmC,CACrC,KAAM,eACN,UAAW9zB,GACX,KAAM,CACF,MAAO,cACP,KAAM,YACN,QAAS,GACT,WAAY,GACZ,OAAQ,GACR,WAAY,CAAC,MAAM,EACnB,OAAQ,YACR,MAAO,CAAC,aAAa,CACzB,EACA,SAAU,CACN,CACI,KAAM,GACN,KAAM,sBACN,UAAW,IAAMC,EAAA,WAAO,uBAA0C,yFACtE,EACA,CACI,KAAM,QACN,UAAW,IAAMA,EAAA,WAAO,yBAA6D,0FACrF,SAAU,CACN,CACI,KAAM,GACN,KAAM,oBACN,UAAW,IAAMA,EAAA,WAAO,qBAAyD,yFACrF,EACA,CACI,KAAM,MACN,KAAM,wBACN,UAAW,IAAMA,EAAA,WAAO,wBAA4D,yFACxF,EACA,CACI,KAAM,WACN,KAAM,yBACN,UAAW,IAAMA,EAAA,WAAO,yBAA6D,0FACzF,CAER,EACA,CACI,KAAM,cACN,UAAW,IAAMA,EAAA,WAAO,+BAAmE,0FAC3F,SAAU,CACN,CACI,KAAM,GACN,KAAM,0BACN,UAAW,IAAMA,EAAA,WAAO,2BAA+D,yFAC3F,EACA,CACI,KAAM,MACN,KAAM,8BACN,UAAW,IAAMA,EAAA,WAAO,8BAAkE,yFAC9F,EACA,CACI,KAAM,iBACN,KAAM,+BACN,UAAW,IAAMA,EAAA,WAAO,+BAAmE,0FAC/F,CAER,EACA,CACI,KAAM,QACN,KAAM,oBACN,UAAW,IAAMA,EAAA,WAAO,qBAA8C,iGAC1E,EACA,CACI,KAAM,eACN,KAAM,2BACN,UAAW,IAAMA,EAAA,WAAO,6BAAsD,yFAClF,EACA,CACI,KAAM,QACN,UAAW,IAAMA,EAAA,WAAO,yBAAkD,0FAC1E,SAAU,CACN,CACI,KAAM,GACN,KAAM,oBACN,UAAW,IAAMA,EAAA,WAAO,qBAA8C,yFAC1E,EACA,CACI,KAAM,WACN,KAAM,yBACN,UAAW,IAAMA,EAAA,WAAO,yBAAkD,0FAC9E,CAER,EACA,CACI,KAAM,aACN,KAAM,+BACN,UAAW,IAAMA,EAAA,WAAO,8BAAuD,6FACnF,EACA,CACI,KAAM,YACN,UAAW,IAAMA,EAAA,WAAO,6BAA0D,0FAClF,SAAU,CACN,CACI,KAAM,GACN,KAAM,wBACN,UAAW,IAAMA,EAAA,WAAO,yBAAsD,yFAClF,EACA,CACI,KAAM,cACN,KAAM,2BACN,UAAW,IAAMA,EAAA,WAAO,2BAAwD,0FACpF,CAER,EACA,CACI,KAAM,QACN,UAAW,IAAMA,EAAA,WAAO,yBAAkD,0FAC1E,SAAU,CACN,CACI,KAAM,GACN,KAAM,oBACN,UAAW,IAAMA,EAAA,WAAO,qBAA8C,yFAC1E,EACA,CACI,KAAM,QACN,KAAM,0BACN,UAAW,IAAMA,EAAA,WAAO,yBAAkD,yFAC9E,EACA,CACI,KAAM,cACN,KAAM,gCACN,UAAW,IAAMA,EAAA,WAAO,+BAAwD,0FACpF,CAER,EACA,CACI,KAAM,cACN,UAAW,IAAMA,EAAA,WAAO,+BAA8D,0FACtF,SAAU,CACN,CACI,KAAM,GACN,KAAM,0BACN,UAAW,IAAMA,EAAA,WAAO,2BAA0D,yFACtF,EACA,CACI,KAAM,gBACN,KAAM,+BACN,UAAW,IAAMA,EAAA,WAAO,+BAA8D,0FAC1F,CAER,EACA,CACI,KAAM,YACN,UAAW,IAAMA,EAAA,WAAO,yBAAkD,0FAC1E,SAAU,CACN,CACI,KAAM,GACN,KAAM,wBACN,UAAW,IAAMA,EAAA,WAAO,wBAAqD,qDACjF,CAER,EACA,CACI,KAAM,SACN,UAAW,IAAMA,EAAA,WAAO,0BAAoD,0FAC5E,SAAU,CACN,CACI,KAAM,GACN,KAAM,qBACN,UAAW,IAAMA,EAAA,WAAO,wBAAqD,qDACjF,CAER,EACA,CACI,KAAM,QACN,UAAW,IAAMA,EAAA,WAAO,6BAA0D,0FAClF,SAAU,CACN,CACI,KAAM,GACN,KAAM,oBACN,UAAW,IAAMA,EAAA,WAAO,yBAAkD,0FAC9E,CAER,EACA,CACI,KAAM,qBACN,UAAW,IAAMA,EAAA,WAAO,6BAA0D,0FAClF,SAAU,CACN,CACI,KAAM,GACN,KAAM,iCACN,UAAW,IAAMA,EAAA,WAAO,iCAA8D,0CAC1F,CAER,EACA,CACI,KAAM,WACN,UAAW,IAAMA,EAAA,WAAO,6BAA0D,0FAClF,SAAU,CACN,CACI,KAAM,GACN,KAAM,uBACN,UAAW,IAAMA,EAAA,WAAO,wBAAqD,kGACjF,CAER,EACA,CACI,KAAM,YACN,UAAW,IAAMA,EAAA,WAAO,6BAA0D,0FAClF,SAAU,CACN,CACI,KAAM,GACN,KAAM,wBACN,UAAW,IAAMA,EAAA,WAAO,yBAAsD,8CAClF,CAER,EACA,CACI,KAAM,QACN,UAAW,IAAMA,EAAA,WAAO,6BAA0D,0FAClF,SAAU,CACN,CACI,KAAM,GACN,KAAM,oBACN,UAAW,IAAMA,EAAA,WAAO,qBAAkD,0FAC9E,CAER,EACA,CACI,KAAM,kBACN,UAAW,IAAMA,EAAA,WAAO,6BAA0D,0FAClF,SAAU,CACN,CACI,KAAM,GACN,KAAM,8BACN,UAAW,IAAMA,EAAA,WAAO,+BAA4D,kGACxF,CACJ,CACJ,CAER,EC5OM8zB,GAAa,IAAM9zB,EAAA,WAAO,0BAAkC,0FAC5DD,GAAgB,IAAMC,EAAA,WAAO,6BAAqC,kHAClE+zB,GAAgB,IAAM/zB,EAAA,WAAO,oBAA4B,iHAUzDg0B,GAAiD,CACnD,CACI,KAAM,GACN,UAAWD,GACX,KAAM,YACN,KAAM,CAAC,MAAO,GAAI,KAAM,qBAAsB,QAAS,EAAK,CAChE,EACA,CACI,KAAM,aACN,UAAWD,GACX,KAAM,aACN,KAAM,CAAC,MAAO,aAAc,KAAM,cAAe,QAAS,EAAK,CACnE,EACA,CACI,KAAM,UACN,UAAWC,GACX,KAAM,KACN,KAAM,CAAC,MAAO,KAAM,KAAM,cAAe,QAAS,EAAK,CAC3D,EACA,CACI,KAAM,QACN,UAAWD,GACX,KAAM,cACN,KAAM,CAAC,MAAO,QAAS,KAAM,cAAe,QAAS,EAAK,EAElE,EAEMG,GAAkC,CACpC,KAAM,aACN,UAAWl0B,GACX,KAAM,CACF,MAAO,YACP,KAAM,qBACN,QAAS,GACT,OAAQ,YACR,aAAc,GACd,WAAY,CAAC,MAAO,EACpB,WAAY,EAChB,EACA,SAAUi0B,EACd,ECpDME,GAAgB,IAAMl0B,EAAA,WAAO,6BAA+C,4FAC5ED,GAAgB,IAAMC,EAAA,WAAO,6BAAqC,kHAClEm0B,GAAsB,IAAMn0B,EAAA,WAAO,mCAAgE,6FACnGo0B,GAAmB,IAAMp0B,EAAA,WAAO,gCAA0D,oGAE1Fq0B,GAAkC,CACpC,KAAM,aACN,UAAWt0B,GACX,KAAM,CACF,MAAO,YACP,KAAM,WACN,QAAS,GACT,OAAQ,GACR,YAAa,CAAC,eAAe,EAC7B,OAAQ,EACZ,EACA,SAAU,CACN,CACI,KAAM,GACN,UAAWm0B,GACX,KAAM,kBACN,KAAM,CAAC,MAAO,YAAa,KAAM,WAAY,QAAS,GAAO,OAAQ,EAAI,CAC7E,EACA,CACI,KAAM,aACN,UAAWC,GACX,KAAM,uBACN,KAAM,CAAC,MAAO,uBAAwB,KAAM,WAAY,QAAS,GAAO,OAAQ,EAAI,CACxF,EACA,CACI,KAAM,UACN,UAAWC,GACX,KAAM,oBACN,KAAM,CAAC,MAAO,oBAAqB,KAAM,WAAY,QAAS,GAAO,OAAQ,EAAI,EACrF,CAER,EC3BKj3B,GAAU,CACb,KAAM,gBAEN,WAAY,CAAC,SAAS,EAEtB,OAAQ,UAER,SAAU,CACR,aAAc,CACZ,OAAO,KAAK,OAAO,MAAM,SAAS,WACnC,EACD,KAAM,CACJ,OAAO,KAAK,OAAO,QACpB,CACF,CACH,EA1BWK,GAAA,OAAM,EAAE,qDAAjB,OAAAO,EAAA,EAAAN,EAMU,UANVD,GAMU,CAJRuG,GAEOlG,sBAFP,IAEO,CADLF,EAAeqG,CAAA,sCCAfswB,GAAU,IAAMt0B,EAAA,WAAO,qBAAuB,8FAE9Cu0B,GAA8B,CAChC,CACI,KAAM,OACN,UAAWC,GACX,KAAM,CACF,OAAQ,GACR,QAAS,GACT,aAAc,GACd,WAAY,CAAC,cAAc,EAC3B,OAAQ,SACZ,EACA,SAAU,CACN,CACI,KAAM,QACN,UAAWF,GACX,KAAM,MACN,KAAM,CAAC,MAAO,iBAAkB,KAAM,sBAAuB,QAAS,EAAK,EAC/E,CACJ,CAER,ECFMG,GAAiB,IAAMz0B,EAAA,WAAO,8BAAiC,0FAC/D00B,GAAoB,IAAM10B,EAAA,WAAO,iCAAoC,0CACrE20B,GAAiB,IAAM30B,EAAA,WAAO,8BAAiC,0FAG/D40B,GAAwC,CAC1C,CACI,KAAM,mBACN,KAAM,kBACN,UAAWH,GACX,KAAM,CAAC,OAAQ,GAAM,WAAY,CAAC,MAAM,EAAG,OAAQ,WAAW,CAClE,EACA,CACI,KAAM,sBACN,KAAM,qBACN,UAAWC,GACX,KAAM,CAAC,OAAQ,GAAM,WAAY,CAAC,MAAM,EAAG,OAAQ,WAAW,CAClE,EACA,CACI,KAAM,mBACN,KAAM,kBACN,UAAWC,GACX,KAAM,CAAC,OAAQ,GAAM,WAAY,CAAC,MAAM,EAAG,OAAQ,WAAW,EAEtE,EAEME,GAAsC,CAoBxCZ,GACA50B,GACAy1B,GACA,GAAGxB,GACH,GAAGC,GACH,GAAGrD,GACH,GAAG6E,GACH,GAAGnE,GACH,GAAGO,GACH,GAAGf,GACH,GAAGnwB,GACH,GAAGsvB,GACH,GAAGyF,GACH,GAAGjC,GACH,GAAGkC,GACH,GAAGV,GACH,GAAGzF,GACH,GAAG6E,GACHE,GACAD,GACAS,EACJ,EAGMa,GAAwC,CAC1C,GAAGN,GACH,GAAGC,EACP,EAEMM,GAAqC,CAAC,ECnGd,eAAAC,GAAa,CAAC,MAAA3hC,GAAQ,OACxC,YAAI,sCAAuC,mEAAmE,EAElH,IAKA,IAAIxC,EAHc,IAAI,gBAAgB,OAAO,SAAS,MAAM,EAC/B,IAAI,SAAS,KAEdzJ,EAAA,OAAO,SAAP,YAAAA,EAAe,UAAW,OAAO,SAAS,KAStE,GANIyJ,EAAQ,SAAS,eAAe,IACtBA,IAAQ,QAAQ,gBAAiB,EAAE,GAGzC,YAAI,0BAA2B,qDAAsDA,CAAO,EAEhG,CAACA,EAAS,CACF,aAAK,qCAAsC,mCAAmC,EACtF,OAIE,MAAAwC,EAAM,SAAS,uBAAwBxC,CAAO,QAC/C3K,EAAO,CACJ,cAAM,uCAAwC,iCAAkCA,CAAK,EAErG;;;;;;y4GCba+uC,GAAqC,CAAC,QAAS,KAAM,OAAO,EAKnEC,GAAkC,QAKlCC,GAAS7gC,EAAqB4gC,EAAc,EAK5CE,GAAOC,GAAW,CACpB,OAAQ,GACR,OAAQF,GAAO,MACf,eAAgBD,GAChB,SAAU,CACN,QAASI,GACT,GAAMC,GACN,QAASC,EACb,EACA,sBAAuB,GACvB,gBAAiB,GACjB,UAAW,CACP,UAAYC,GAAgBA,EAAI,MAAM,GAAG,EAAE,KAAK,GAAG,EAE3D,CAAC,EAMD,eAAsBC,GAAaP,EAAwC,CACnE,IACA,MAAMtwC,EAAWuwC,GAAK,OAAO,iBAAiBD,CAAM,EACpD,GAAI,OAAO,KAAKtwC,CAAQ,EAAE,SAAW,EAAG,CACpC,MAAM8wC,EAAmB,YAAM,OAAyB,UAAUR,CAAM,aACxEC,GAAK,OAAO,iBAAiBD,EAAQQ,EAAiB,OAAO,EAG7DP,GAAK,OAAO,OAAO,QAAUD,IACxBC,GAAA,OAAO,OAAO,MAAQD,SAE1BjvC,EAAO,CACZ,cAAQ,MAAM,sCAAsCivC,CAAM,IAAKjvC,CAAK,EAC9DA,CAAA,CAEd,CAGAwvC,GAAaR,EAAc,EAAE,MAAehvC,GAAA,CAChC,cAAM,iDAAkDA,CAAK,CACzE,CAAC,EClDD,MAAM0vC,GAAQ,CAKV,MAAM,eAAeC,EAA2C,CACxD,IACM,MAAAD,GAAM,mBAAmBC,CAAS,EACxCD,GAAM,cAAgBC,EACb,yBAAgB,aAAa,OAAQA,CAAS,EAC1C,qBAAQ,cAAeA,CAAS,QACxC3vC,EAAO,CACJ,oBAAM,6BAA8BA,CAAK,EAC3CA,CAAA,CAEd,EAMA,MAAM,mBAAmBivC,EAAwC,CAC7D,GAAI,CAACC,GAAK,OAAO,iBAAiB,SAASD,CAAM,EACzC,IACA,MAAMtwC,EAAW,YAAM,OAA0B,UAAUswC,CAAM,aACjEC,GAAK,OAAO,iBAAiBD,EAAQtwC,EAAS,OAAO,QAChDqB,EAAO,CACZ,cAAQ,MAAM,sCAAsCivC,CAAM,IAAKjvC,CAAK,EAC9DA,CAAA,CAGd,MAAM4vC,GAAS,CACnB,EAKA,IAAI,cAAcD,EAA4B,CACrCT,GAAA,OAAO,OAAO,MAAQS,CAC/B,EAKA,IAAI,kBAAsC,CAC/B,OAAAZ,EACX,EAKA,IAAI,eAAiC,CAC1B,aACX,EAMA,kBAAkBE,EAAyB,CAChC,OAAAS,GAAM,iBAAiB,SAAST,CAAyB,CACpE,EAKA,eAA4B,CACxB,MAAMA,EAAU,OAAO,UAAU,UAC5B,OAAO,UAAkB,cAC1BS,GAAM,cAEH,OACH,OAAAT,EACA,eAAgBA,EAAO,MAAM,GAAG,EAAE,CAAC,CACvC,CACJ,EAKA,oBAA6C,CACnC,MAAAY,EAAkB,aAAa,QAAQ,aAAa,EAC1D,OAAOH,GAAM,kBAAkBG,CAAe,EAAIA,EAAkB,IACxE,EAKA,oBAAsC,CAC5B,MAAAC,EAAsBJ,GAAM,mBAAmB,EACrD,GAAII,EACO,OAAAA,EAGL,MAAAC,EAAsBL,GAAM,cAAc,EAChD,OAAIA,GAAM,kBAAkBK,EAAoB,MAAM,EAC3CA,EAAoB,OAG3BL,GAAM,kBAAkBK,EAAoB,cAAc,EACnDA,EAAoB,eAGxBL,GAAM,cAErB,EC1HAT,GAAe,SAAY,CACf,YAAI,+BAAgC,mEAAmE,EAE3G,IACA,MAAMe,EAAgBC,GAAG,mBAAmB,GAAKA,GAAG,cAC5C,YAAI,0BAA2B,kCAAmCD,CAAa,EAEjF,MAAAC,GAAG,eAAeD,CAAa,QAChChwC,EAAO,CACJ,cAAM,gCAAiC,iCAAkCA,CAAK,EAE9F,ECPAkwC,GAAe,MAAO,CAAC,MAAA/iC,CAAA,IAA0D,CACrE,YAAI,mCAAoC,kEAAkE,EAG5G,MAAAgjC,EAAahjC,EAAM,QAAQ,iBAAiB,EAC5CpJ,EAAQoJ,EAAM,QAAQ,YAAY,EAClCM,EAAON,EAAM,QAAQ,WAAW,EAsBtC,GApBA,QAAQ,IAAI,YAAY,EACxB,QAAQ,IAAIgjC,CAAU,EAGV,YAAI,oBAAqB,4CAA4C,EAC7E,QAAQ,IAAIhjC,CAAK,EACT,YAAI,eAAegjC,CAAU,EAAE,EAC/B,YAAI,UAAUpsC,CAAK,EAAE,EAC7B,QAAQ,IAAI0J,CAAI,EACR,YAAIA,EAAK,KAAK,EAEtB,QAAQ,MAAM,CACV,WAAA0iC,EACA,MAAOpsC,GAAS,WAChB,KAAM0J,EAAOA,EAAK,OAAS,qBAAuB,UACrD,EACO,YAAI,oBAAqB,4CAA4C,EAI7E,CAAC0iC,EACG,IACQ,YAAI,2BAA4B,mCAAmC,EACrE,MAAAhjC,EAAM,SAAS,gBAAgB,EAC7B,YAAI,uCAAwC,iCAAiC,QAChFnN,EAAO,CACJ,cAAM,4BAA6B,iCAAkCA,CAAK,EAInF,QACX,EC1C8B,eAAAowC,GAAK,CAAC,MAAAjjC,GAAqC,CAC7D,YAAI,6BAA8B,kEAAkE,EAExG,IAEI,OAACkjC,GAAWljC,CAAK,GAKb,YAAI,sDAAuD,iCAAiC,EAEpG,MAAMmjC,GAAiBnjC,CAAK,EAErB,KARK,aAAK,+CAAgD,mCAAmC,EACzF,UAQNnN,EAAO,CACJ,qBAAM,8BAA+B,iCAAkCA,CAAK,EAC7E,GAEf,CAKA,SAASqwC,GAAWljC,EAAkC,CAC5C,MAAApJ,EAAQoJ,EAAM,QAAQ,YAAY,EAChC,mBAAI,oBAAqB,kCAAmCpJ,CAAK,EAClE,CAAC,CAACA,CACb,CAKA,eAAeusC,GAAiBnjC,EAAyB,CACjD,IACM,MAAAiU,EAAQjU,EAAM,QAAQ,YAAY,EAClChH,EAAcgH,EAAM,QAAQ,kBAAkB,EAE5C,YAAI,qCAAsC,sCAAsC,EAChF,cAAM,CAAC,MAAAiU,EAAM,EACb,cAAM,CAAC,YAAAjb,EAAY,EAE3B,MAAMgH,EAAM,SAAS,4BAA6B,CAAC,MAAAiU,EAAO,YAAAjb,EAAY,EAE9D,YAAI,0CAA2C,iCAAiC,QACnFnG,EAAO,CACJ,cAAM,oCAAqC,iCAAkCA,CAAK,EAElG,CCvCA,MAAMuwC,GAA6C,CAAC,EAE9CtiC,GAASuiC,GAAa,CACxB,QAASC,GAAiB,EAC1B,OAAQ7B,EACZ,CAAC,EAGD3gC,GAAO,WAAW,MAAO6I,EAA6BC,IAAkC,CAC5E,YAAI,+CAAgD,0EAA0E,EACtI,QAAQ,IAAID,CAAE,EAEV3J,GAAM,MAAM,IAAI,kBAChB,OAAO,SAAS,OAAO,EAG3B,MAAMujC,EAAmG,CAGrG,MAAAvjC,EACJ,EAIA,MAAM+iC,GAAUQ,CAAO,EAAE,KAAK,IAAM,CACxB,YAAI,2BAA4B,eAAe,EAC1D,EAGK,MAAAC,EAAaC,GAAc95B,EAAG,OAAO,EAGvC,IAAC65B,EAAW,OAAQ,CACZ,YAAI,qBAAsB,aAAa,EAC/C,OAIJ,MAAME,EAAkBF,EAAW,IAAKA,GAC7B,OAAOA,GAAe,WAAaA,EAAW,KAAOA,CAC/D,EAiBG,GAfI,YAAI,wBAAyB,+EAA+E,EACpH,QAAQ,MAAME,CAAe,EAG7B,MAAM5B,GAAO,EAGT4B,EAAgB,SAAS,cAAc,GAEvC,MAAM/B,GAAa4B,CAAO,EAM1BG,EAAgB,SAAS,OAAO,GAE5B,CAAE,MAAMh4B,GAAM63B,CAAO,EACb,mBAAI,sBAAuB,+EAA+E,EAC3G,CAAC,KAAM,WAAW,EAK7B,GAAAG,EAAgB,SAAS,MAAM,IAC/B,QAAQ,IAAI,kCAAoC,EAK5C,CAHW,MAAMT,GAAKM,CAAO,GAK7B55B,EAAG,OAAS,SAGL,OAAC,KAAM,QAAS,MAAO,CAAC,SAAUA,EAAG,SAAS,EAIrD,YAAI,6CAA8C,4EAA4E,CAC1I,CAAC,EASD,SAAS85B,GAAcE,EAA6E,CAC1F,MAAAH,EAAuC,CAAC,GAAGJ,EAAgB,EAEnD,OAAAO,EAAA,QAAS/iC,GAAU,QACzB7M,EAAA6M,EAAM,OAAN,MAAA7M,EAAY,aACR,MAAM,QAAQ6M,EAAM,KAAK,UAAU,EACnC4iC,EAAW,KAAK,GAAG5iC,EAAM,KAAK,UAAsC,EAEzD4iC,EAAA,KAAK5iC,EAAM,KAAK,UAA+B,EAElE,CACH,EAGM,CAAC,GAAG,IAAI,IAAI4iC,CAAU,CAAC,CAClC,CCnEA,MAAM1wC,GAAmB,CACrB,QAAS,CACL,eAAgB,GAChB,aAAc,GACd,YAAa,GACb,eAAgB,GAChB,eAAgB,GAChB,eAAgB,EACpB,EACA,SAAU,IAAIhB,GACd,KAAM,CACF,OAAQ,GACR,MAAO,CAAC,EACR,YAAa,CAAC,EACd,WAAY,CACR,MAAO,CAAC,EACR,KAAM,EACV,EACA,UAAW,EACf,EACA,MAAO4E,GAAS,EAChB,WAAYM,GAAc,EAC1B,cAAe,CAAC,EAEhB,MAAO,CAAC,EACR,YAAa,CAAC,EACd,UAAW,EACf,EAEA,SAAS4sC,GAAyBrxC,EAAQiL,EAA2B,CAC7C,CAAC,YAAa,OAAQ,QAAS,UAAW,YAAa,WAAW,EAC1E,QAAsBqmC,GAAA,OAC9B,MAAMrkC,IAAUzL,EAAAyJ,GAAA,YAAAA,EAAS,cAAT,YAAAzJ,EAAuB8vC,KAAe,CAAC,EAEhDtxC,EAAA,GAAGsxC,CAAU,QAAQA,EAAW,aAAa,eAAgBrkC,EAAS,CAAC,KAAM,GAAK,EAC5F,CACL,CAEA,MAAMskC,GAA2C,CAC7C,WAAY,SAEZhxC,GAEA,QAAS,CACL,KAAOA,GAAqBA,EAAM,KAClC,MAAQA,GAAqBA,EAAM,MACnC,WAAaA,GAAqBA,EAAM,WACxC,MAAQA,GAAqBA,EAAM,KAAK,SAAW,GACnD,WAAaA,GAAqBA,EAAM,KAAK,OAC7C,MAAQA,GAAqBA,EAAM,MACnC,YAAcA,GAAqBA,EAAM,YACzC,cAAgBA,GAAqBA,EAAM,cAC3C,QAAUA,GAAqBA,EAAM,QACrC,UAAYA,GAAqBA,EAAM,UACvC,SAAWA,GAAqBA,EAAM,QAC1C,EAEA,QAAS,CACL,UAAU,CAAC,OAAAP,CAAM,EAAGiN,EAAS,CAClBjN,EAAAwxC,GAAkBvkC,CAAO,CACpC,EACA,eAAe,CAAC,OAAAjN,CAAM,EAAGiG,EAAY,CAC1BjG,EAAAyxC,GAAwBxrC,CAAE,CACrC,EAEA,MAAM,mBAAmB,CAAC,OAAAjG,GAASR,EAAiD,CAC1E,MAAAW,EAAkBH,EAAQ,mBAAoB,iBAAkB,IAAMsB,EAAM,KAAK,sBAAuB9B,CAAI,CAAC,CACvH,EAKA,MAAM,eAAe,CAAC,OAAAQ,GAASR,EAA0C,SACjE,IACO,aAAMW,EAAkBH,EAAQ,mBAAoB,iBAAkB,IAAMsB,EAAM,KAAK,gBAAiB9B,CAAI,CAAC,QAC/Gc,EAAO,CACZ,MAAAhC,EAAS,MAAM,gBAAiB,CAC5B,KAAM,QACN,UAASiD,GAAAC,EAAAlB,GAAA,YAAAA,EAAO,WAAP,YAAAkB,EAAiB,OAAjB,YAAAD,EAAuB,UAAW,qBAC9C,EACKjB,CAAA,CAEd,EAKA,MAAM,eAAe,CAAC,OAAAN,EAAQ,MAAAO,GAAQf,EAAM,aACxCQ,EAAO,mBAAoB,CAAC,QAAS,iBAAkB,QAAS,GAAK,EAEjE,IACAO,EAAM,SAAS,OAAO,MAAM,EACtB,MAAAJ,EAAkBH,EAAQ,mBAAoB,iBAAkB,IAAMsB,EAAM,KAAK,gBAAiB9B,CAAI,CAAC,EAC7GlB,EAAS,MAAM,gBAAiB,CAC5B,KAAM,UACN,QAAS,WAAWkB,EAAK,QAAU,WAAa,SAAS,GAC5D,QACIc,EAAO,CACZC,EAAM,SAAS,OAAO,MAAIgB,GAAAC,EAAAlB,GAAA,YAAAA,EAAO,WAAP,YAAAkB,EAAiB,OAAjB,YAAAD,EAAuB,SAAU,EAAE,EAC7DjD,EAAS,MAAM,gBAAiB,CAC5B,KAAM,QACN,UAAS2mB,GAAA3V,EAAAhP,GAAA,YAAAA,EAAO,WAAP,YAAAgP,EAAiB,OAAjB,YAAA2V,EAAuB,UAAW,qBAC9C,EAET,EAEA,MAAM,aAAa,CAAC,OAAAjlB,EAAQ,SAAA8W,GAAW,CAC5B9W,EAAA,yCAA0C,CAAC,QAAS,eAAgB,QAAS,IAAO,CAAC,KAAM,GAAK,EAChGA,EAAA,8BAA+B,CAAC,QAAS,WAAY,QAAS,IAAO,CAAC,KAAM,GAAK,EACjFA,EAAA,8BAA+B,CAAC,QAAS,UAAW,QAAS,IAAO,CAAC,KAAM,GAAK,EAEnF,IACA,MAAMJ,EAAW,MAAM0B,EAAM,IAAI,aAAa,EAExC,CACF,aAAA08B,EACA,mBAAA0T,EACA,mBAAAC,EACA,eAAAC,EACA,oBAAAjU,EACA,kBAAAkU,EACA,MAAA9qC,EACA,KAAA+M,EACA,SAAArM,EACA,SAAAwb,EACA,OAAA6uB,EACA,SAAA1qC,GACAxH,EAAS,KAEPqL,EAA4BrL,EAAS,KAAK,QAEhDI,EAAO,iCAAkCg+B,EAAc,CAAC,KAAM,GAAK,EACnEh+B,EAAO,wCAAyC0xC,EAAoB,CAAC,KAAM,GAAK,EAChF1xC,EAAO,yCAA0C29B,EAAqB,CAAC,KAAM,GAAK,EAClF39B,EAAO,yCAA0C2xC,EAAoB,CAAC,KAAM,GAAK,EACjF3xC,EAAO,kCAAmCiL,EAAQ,gBAAiB,CAAC,KAAM,GAAK,EAC/EjL,EAAO,sBAAuBiL,EAAS,CAAC,KAAM,GAAK,EACnDjL,EAAO,mCAAoC8T,EAAM,CAAC,KAAM,GAAK,EAC7D9T,EAAO,+BAAgCyH,EAAU,CAAC,KAAM,GAAK,EAC7DzH,EAAO,+BAAgCijB,EAAU,CAAC,KAAM,GAAK,EAC7DjjB,EAAO,qBAAsB8xC,EAAQ,CAAC,KAAM,GAAK,EAE7C,MAAM,QAAQ7mC,GAAA,YAAAA,EAAS,QAAQ,GAC/BjL,EAAO,2BAA4BiL,EAAQ,SAAU,CAAC,KAAM,GAAK,EAGrEjL,EAAO,mCAAoC4xC,EAAgB,CAAC,KAAM,GAAK,EACvE5xC,EAAO,wBAAyB6xC,EAAmB,CAAC,KAAM,GAAK,EAC/D7xC,EAAO,0BAA2B+G,EAAO,CAAC,KAAM,GAAK,EACrD/G,EAAO,uBAAwBoH,EAAU,CAAC,KAAM,GAAK,EAEjD6D,EAAQ,wBAA0B,KAClC6L,EAAS,qCAAsC,KAAM,CAAC,KAAM,GAAK,EAEjE9W,EAAO,qCAAsCiL,EAAQ,sBAAuB,CAAC,KAAM,GAAK,EAG5FomC,GAAyBrxC,EAAQiL,CAAO,QACnC3K,EAAO,CACJ,cAAM,+BAAgCA,CAAK,SACrD,CACEN,EAAO,yCAA0C,CAC7C,QAAS,eACT,QAAS,IACV,CAAC,KAAM,GAAK,EACRA,EAAA,8BAA+B,CAAC,QAAS,WAAY,QAAS,IAAQ,CAAC,KAAM,GAAK,EAClFA,EAAA,8BAA+B,CAAC,QAAS,UAAW,QAAS,IAAQ,CAAC,KAAM,GAAK,EACxFA,EAAO,sBAAuB,GAAO,CAAC,KAAM,GAAK,EAEzD,EAEA,MAAM,eAAe,CAAC,OAAAA,GAAS,CACvB,IACM,MAAAqB,EAAe,MAAMlB,EAAkBH,EAAQ,mBAAoB,cAAe,IAAMsB,EAAM,IAAI,qBAAqB,CAAC,EACvHtB,EAAA,sBAAuBqB,EAAa,MAAM,OACrC,EAEpB,EAEA,MAAM,iBAAiB,CAAC,OAAArB,GAAS,CACzB,IACM,MAAAqB,EAAe,MAAMlB,EAAkBH,EAAQ,mBAAoB,iBAAkB,IAAMsB,EAAM,KAAK,qBAAqB,CAAC,EAC3H,OAAAtB,EAAA,sBAAuBqB,EAAa,MAAM,EAC1CA,EAAa,WACR,EAEpB,EAEA,MAAM,eAAe,CAAC,OAAArB,GAASqE,EAAiB,CACxC,IACA,MAAMhD,EAAe,MAAMlB,EAAkBH,EAAQ,mBAAoB,iBAAkB,IAAMsB,EAAM,OAAO,uBAAuB+C,EAAM,EAAE,EAAE,CAAC,EACzIrE,EAAA,sBAAuBqB,EAAa,MAAM,OACrC,EAEpB,EAGA,MAAM,YAAY,CAAC,OAAArB,EAAQ,YAAA+xC,GAAc,CACrC,MAAM1wC,EAAe,MAAMlB,EAAkBH,EAAQ,mBAAoB,eAAgB,IAAMsB,EAAM,IAAI,eAAeywC,EAAY,iBAAiB,EAAE,IAAI,SAAS,CAAC,EACrK,GAAI1wC,GAAA,MAAAA,EAAc,QACd,OAAA/C,EAAS,MAAM,sBAAsB,EACrC0B,EAAO,sBAAuBqB,EAAa,QAAS,CAAC,KAAM,GAAK,EAChErB,EAAOgyC,GAAwB,CAAC,QAAS,eAAgB,QAAS,GAAM,EAEjE3wC,EAAa,OAE5B,EAGA,MAAM,iBAAiB,CAAC,MAAAd,EAAO,OAAAP,CAAA,EAAS8H,EAAc,CAC9C,IACM,MAAA3H,EAAkBH,EAAQ,mBAAoB,eAAgB,IAAMsB,EAAM,KAAK,sBAAsBwG,CAAI,EAAE,CAAC,EAClHxJ,EAAS,MAAM,sBAAsB,QAChCgC,EAAO,CACN,MAAAA,CAAA,CAEd,EAEA,MAAM,UAAU,CAAC,OAAAN,GAAS,CACtB,MAAM6E,EAAaH,GAAgB,EAE/BG,IACA7E,EAAO,4BAA6B6E,EAAY,CAAC,KAAM,GAAK,EACnDT,GAAAS,EAAW,KAAK,KAAK,GAG9B,IACA,KAAM,CAAC,KAAArF,CAAI,EAAI,MAAM8B,EAAM,KAAK,eAAe,EAEzC,CAAC,MAAAogB,EAAO,YAAAjb,EAAa,MAAAwrC,EAAO,MAAA9pC,EAAO,KAAAzI,GAAQF,EAG7CyyC,GACAC,GAAe,CAAC,MAAAD,EAAO,MAAA9pC,EAAO,KAAAzI,EAAK,EASvCM,EAAO,WAAYR,CAAI,EACvBQ,EAAO,YAAa0hB,CAAK,EACzB1hB,EAAO,kBAAmByG,CAAW,QAChC1C,EAAG,CACA,cAAM,kBAAmBA,CAAC,EAClC/D,EAAOmyC,EAAwB,EAEvC,EAEA,mBAAmB,CAAC,MAAA5xC,GAAQ,CAClBe,EAAA,KAAK,aAAaf,EAAM,KAAK,IAAI,uBAAuB,EACzD,KAAK,IAAM,CACRjC,EAAS,MAAM,qBAAqB,EACvC,EAAE,MAAM,IAAM,EAClB,EAAE,QAAQ,IAAM,EAChB,CACL,EAEA,WAAW,CAAC,OAAA0B,CAAM,EAAGiN,EAAS,CACnBjN,EAAAoyC,GAAmBnlC,EAAQ,IAAI,CAC1C,EAEA,MAAM,OAAO,CAAC,OAAAjN,GAAS,CACf,IACM,MAAAsB,EAAM,KAAK,iBAAiB,OAC1B,EAGAkD,GAAA,EACZxE,EAAOqyC,EAAY,EACnB9jC,GAAO,KAAK,CAAC,KAAM,QAAQ,EAGnC,EAEA,UAAW,CACP,CAACyjC,EAAsB,EAAEzxC,EAAOG,EAAgD,CAC5EH,EAAM,QAAQG,EAAQ,OAAO,EAAIA,EAAQ,OAC7C,EACA,CAAC4xC,EAAe,EAAE/xC,EAAO,CAAC,MAAA8D,EAAO,SAAAC,GAAW,CACxC/D,EAAM,MAAQ8D,EACdD,GAASC,EAAOC,CAAQ,CAC5B,EACA,CAACktC,EAAgB,EAAEjxC,EAAO,CAAC,MAAA8D,EAAO,SAAAC,GAAW,CACzC/D,EAAM,MAAQ8D,EACdD,GAASC,EAAOC,CAAQ,CAC5B,EACA,CAACmtC,EAAsB,EAAElxC,EAAkB0F,EAAY,CACnD1F,EAAM,WAAa0F,EACnBhB,GAAiBgB,CAAE,CACvB,EACA,CAACssC,EAAc,EAAEhyC,EAAOwN,EAAM,CAC1BA,EAAK,OAAS,GACdxN,EAAM,KAAOwN,CACjB,EACA,CAACykC,EAAe,EAAEjyC,EAAOmhB,EAAO,CAC5BnhB,EAAM,MAAQmhB,EACVA,EAAM,SAAS,aAAa,GACf,qBAAQ,cAAe,MAAM,CAElD,EACA,CAAC+wB,EAAqB,EAAElyC,EAAOkG,EAAa,CACxClG,EAAM,YAAckG,CACxB,EAEA,CAAC0rC,EAAwB,EAAE5xC,EAAO,CAC9BA,EAAM,MAAQ,KACFiE,GAAA,CAChB,EAEA,CAAC6tC,EAAY,EAAE9xC,EAAO,CAClBA,EAAM,KAAO,CACT,OAAQ,GACR,MAAO,CAAC,EACR,YAAa,CAAC,EACd,WAAY,EAChB,EAEAA,EAAM,MAAQ,KAGdA,EAAM,MAAQ,CAAC,EAEM2E,GAAA,EAErB,aAAa,WAAW,cAAc,EACtC,aAAa,WAAW,SAAS,EACjC,aAAa,WAAW,eAAe,EACvC,aAAa,WAAW,mBAAmB,EAC3C,aAAa,WAAW,aAAa,EACrC,aAAa,WAAW,eAAe,EACvC,aAAa,WAAW,qBAAqB,EAC7C,aAAa,WAAW,UAAU,EAClCuH,GAAY,eAAe,CAC/B,EAEA,CAAC2lC,EAAiB,EAAE7xC,EAAO,CAAC,KAAAwN,GAAO,CAC/BxN,EAAM,KAAOwN,CACjB,EACA,CAAC2kC,EAA4B,EAAEnyC,EAAOipC,EAAe,CACjDjpC,EAAM,cAAgBipC,CAC1B,EACA,CAACmJ,EAAyB,EAAEpyC,EAAOqyC,EAAQ,CACvCryC,EAAM,UAAYqyC,CAAA,CACtB,CAER,EC9YMC,GAAmB,eAGnBC,GAAiB,CAEnB,gBAAgB9lC,EAAoB,CACnB,qBAAQ6lC,GAAkB7lC,CAAI,CAC/C,EAEA,gBAAiB,CACN,oBAAa,QAAQ6lC,EAAgB,CAChD,EAEA,mBAAoB,CAChB,aAAa,WAAWA,EAAgB,CAC5C,EAGA,iBAAiBnzC,EAAc,CACd,qBAAQ,YAAYA,CAAI,GAAI,IAAI,KAAO,UAAU,YAAU,CAC5E,EAEA,gBAAgBA,EAA6B,CACzC,OAAO,aAAa,QAAQ,YAAYA,CAAI,EAAE,EAEtD,ECFMa,GAA0B,CAC5B,QAAS,CACL,gBAAiB,GACjB,UAAW,GACX,SAAU,GACV,MAAO,GACP,OAAQ,GACR,OAAQ,GACR,KAAM,GACN,QAAS,GACT,kBAAmB,GACnB,iBAAkB,EACtB,EACA,KAAM,IAAIhB,GACV,gBAAiB,CACb,CACI,KAAM,UACN,KAAM,SACV,EACA,CACI,KAAM,QACN,KAAM,OACV,EACA,CACI,KAAM,OACN,KAAM,MACV,EACA,CACI,KAAM,QACN,KAAM,QAEd,EACA,WAAY,CACR,CACI,MAAO,uBACP,MAAO,cACP,SAAU,GACV,WAAY,EAChB,EACA,CACI,MAAO,kBACP,MAAO,iBACX,EACA,CACI,MAAO,cACP,MAAO,aACX,EACA,CACI,MAAO,gBACP,MAAO,eACX,EACA,CACI,MAAO,gBACP,MAAO,SACX,EACA,CACI,MAAO,YACP,MAAO,KACX,EACA,CACI,MAAO,cACP,MAAO,aACX,EACA,CACI,MAAO,cACP,MAAO,cAEf,EACA,aAAc,CAAC,EACf,qBAAsB,CAAC,EACvB,iBAAkB,CAAC,EACnB,OAAQ,CAAC,EACT,kBAAmB,CACf,SAAU,CAAC,EACX,UAAW,CAAC,EACZ,MAAO,EACX,EACA,WAAY,CACR,aAAc,CAClB,EACA,UAAW,CACP,SAAU,CACN,aAAc,EACd,SAAU,GACd,EACA,UAAW,CACP,aAAc,EACd,SAAU,GACd,EACA,MAAO,CACH,aAAc,EACd,SAAU,IAElB,EACA,UAAW,EACf,EAEMkX,GAAU,CACZ,QAASlW,GAASA,EAAM,QACxB,WAAYA,GAASA,EAAM,WAC3B,iBAAkBA,GAASA,EAAM,iBACjC,aAAcA,GAASA,EAAM,aAC7B,qBAAsBA,GAASA,EAAM,qBACrC,gBAAiBA,GAASA,EAAM,gBAChC,eAAgBA,GAASA,EAAM,KAC/B,OAAQA,GAASA,EAAM,OACvB,kBAAmBA,GAASA,EAAM,kBAClC,WAAYA,GAASA,EAAM,WAC3B,UAAWA,GAASA,EAAM,UAC1B,UAAWA,GAASA,EAAM,SAC9B,EAEMC,GAAY,CACd,CAACuyC,EAA4B,EAAExyC,EAAOG,EAAS,CAC3CH,EAAM,QAAQG,EAAQ,OAAO,EAAIA,EAAQ,OAC7C,EACA,CAACsyC,EAA2B,EAAEzyC,EAAO0yC,EAAkB,CACnD1yC,EAAM,iBAAmB0yC,CAC7B,EACA,CAACC,EAAkC,EAAE3yC,EAAOV,EAAO,CAC/CU,EAAM,qBAAuB4yC,EAAA,UAAUtzC,CAAK,EAC5CU,EAAM,aAAeV,CACzB,EACA,CAACuzC,EAA2B,EAAE7yC,EAAO8yC,EAAQ,CACzC9yC,EAAM,kBAAkB8yC,EAAO,IAAI,EAAIA,EAAO,KAAK,KACnD9yC,EAAM,OAAS+yC,SAAO,CAAC,GAAG/yC,EAAM,OAAQ,GAAG8yC,EAAO,KAAK,IAAI,EAAGjhB,GAAKA,EAAE,IAAI,EAEzE,OAAOihB,EAAO,KAAK,KACnB,OAAOA,EAAO,KAAK,MACnB9yC,EAAM,UAAU8yC,EAAO,IAAI,EAAIA,EAAO,IAC1C,EACA,CAACE,EAA4B,EAAEhzC,EAAOizC,EAAM,CACxCjzC,EAAM,UAAYizC,CAAA,CAE1B,EAEMpyC,GAAU,CAQZ,iBAAiB,CAAC,OAAApB,GAAS,CACvBsB,EAAM,IAAI,iBAAiB,EACtB,KAAM1B,GAAa,CAChBI,EAAO,wBAAyB4J,EAAI,IAAAhK,EAAU,mBAAoB,CAAE,EAAC,EACxE,EAAE,MAAM,IAAM,EAClB,EAAE,QAAQ,IAAM,EAChB,CACL,EASA,uBAAuB,CAAC,OAAAI,CAAM,EAAGR,EAAM,CACnCQ,EAAO,yBAA0B,CAAC,QAAS,WAAY,QAAS,GAAK,EAErE,MAAMmhB,EAAOvX,EAAA,IAAIpK,EAAM,OAAQ,CAAC,EAC1Bi0C,EAAU7pC,EAAA,IAAIpK,EAAM,UAAW,GAAG,EAElC8B,EAAA,IAAI,6CAA6C6f,CAAI,YAAYsyB,CAAO,EAAE,EAC3E,KAAM7zC,GAAa,CAChB,MAAMJ,EAAO,CACT,KAAMoK,EAAA,IAAIhK,EAAU,cAAe,EAAE,EACrC,KAAM,UACV,EACAI,EAAO,wBAAyBR,CAAI,EACvC,EAAE,MAAM,IAAM,EAClB,EAAE,QAAQ,IAAM,CACbQ,EAAO,yBAA0B,CAAC,QAAS,WAAY,QAAS,GAAM,EACzE,CACL,EASA,gCAAgC,CAAC,OAAAA,CAAM,EAAGR,EAAM,CAC5CQ,EAAO,yBAA0B,CAAC,QAAS,YAAa,QAAS,GAAK,EAEtE,MAAMmhB,EAAOvX,EAAA,IAAIpK,EAAM,OAAQ,CAAC,EAC1Bi0C,EAAU7pC,EAAA,IAAIpK,EAAM,UAAW,GAAG,EAElC8B,EAAA,IAAI,8CAA8C6f,CAAI,YAAYsyB,CAAO,EAAE,EAC5E,KAAM7zC,GAAa,CAChB,MAAMJ,EAAO,CACT,KAAMoK,EAAA,IAAIhK,EAAU,cAAe,EAAE,EACrC,KAAM,WACV,EACAI,EAAO,wBAAyBR,CAAI,EACvC,EAAE,MAAM,IAAM,EAClB,EAAE,QAAQ,IAAM,CACbQ,EAAO,yBAA0B,CAAC,QAAS,YAAa,QAAS,GAAM,EAC1E,CACL,EAQA,4BAA4B,CAAC,OAAAA,CAAM,EAAGR,EAAM,CACxCQ,EAAO,yBAA0B,CAAC,QAAS,QAAS,QAAS,GAAK,EAElE,MAAMmhB,EAAOvX,EAAA,IAAIpK,EAAM,OAAQ,CAAC,EAC1Bi0C,EAAU7pC,EAAA,IAAIpK,EAAM,UAAW,GAAG,EAElC8B,EAAA,IAAI,0CAA0C6f,CAAI,YAAYsyB,CAAO,EAAE,EACxE,KAAM7zC,GAAa,CAChB,MAAMJ,EAAO,CACT,KAAMoK,EAAA,IAAIhK,EAAU,cAAe,EAAE,EACrC,KAAM,OACV,EACAI,EAAO,wBAAyBR,CAAI,EACvC,EAAE,MAAM,IAAM,EAClB,EAAE,QAAQ,IAAM,CACbQ,EAAO,yBAA0B,CAAC,QAAS,QAAS,QAAS,GAAM,EACtE,CACL,EASA,sBAAsB,CAAC,OAAAA,CAAM,EAAGH,EAAO,CACnCG,EAAO,yBAA0B,CAAC,QAAS,SAAU,QAAS,GAAK,EAEnEsB,EAAM,IAAI,eAAewxC,GAAe,gBAAgB,uBAAuBjzC,EAAM,IAAI,GAAIA,CAAK,EAC7F,KAAMD,GAAa,CAChBtB,EAAS,MAAM,kCAAmCsL,EAAI,IAAAhK,EAAU,YAAY,CAAC,EAChF,EAAE,MAAM,IAAM,EAClB,EAAE,QAAQ,IAAM,CACbI,EAAO,yBAA0B,CAAC,QAAS,SAAU,QAAS,GAAM,EACvE,CACL,EASA,uBAAuB,CAAC,OAAAA,CAAM,EAAGH,EAAO,CACpCG,EAAO,yBAA0B,CAAC,QAAS,UAAW,QAAS,GAAK,EAE9DsB,EAAA,KAAK,0BAA0BzB,EAAM,IAAI,OAAO,EACjD,KAAMD,GAAa,CAChBtB,EAAS,MAAM,oCAAqCsL,EAAI,IAAAhK,EAAU,YAAY,CAAC,EAClF,EAAE,MAAOmE,GAAM,CAChBzF,EAAS,MAAM,oCAAqCsL,MAAI7F,EAAG,wBAAyB,qBAAqB,CAAC,EAC7G,EAAE,QAAQ,IAAM,CACb/D,EAAO,yBAA0B,CAAC,QAAS,UAAW,QAAS,GAAM,EACxE,CACL,EAQA,sBAAsB,CAAC,OAAAA,CAAM,EAAGH,EAAO,CACnCG,EAAO,yBAA0B,CAAC,QAAS,SAAU,QAAS,GAAK,EAEnEsB,EAAM,OAAO,eAAewxC,GAAe,eAAgB,wBAAuBjzC,EAAM,IAAI,EAAE,EACzF,KAAMD,GAAa,CAChBtB,EAAS,MAAM,kCAAmCsL,EAAI,IAAAhK,EAAU,YAAY,CAAC,EAChF,EAAE,MAAM,IAAM,EAClB,EAAE,QAAQ,IAAM,CACbI,EAAO,yBAA0B,CAAC,QAAS,SAAU,QAAS,GAAM,EACvE,CACL,EASA,uBAAuB,CAAC,OAAAA,CAAM,EAAGH,EAAO,CACpCG,EAAO,yBAA0B,CAAC,QAAS,OAAQ,QAAS,GAAK,EAEjEsB,EAAM,IAAI,eAAewxC,GAAe,gBAAgB,uBAAuBjzC,EAAM,IAAI,gBAAgB,EACpG,KAAMD,GAAa,CAChBI,EAAO,yBAA0B4J,MAAIhK,EAAU,WAAW,CAAC,EAC3DtB,EAAS,MAAM,mCAAmC,EACrD,EAAE,MAAM,IAAM,EAClB,EAAE,QAAQ,IAAM,CACb0B,EAAO,yBAA0B,CAAC,QAAS,OAAQ,QAAS,GAAM,EACrE,CACL,EAUA,oBAAoB,CAAC,MAAAO,EAAO,OAAAP,CAAA,EAASgf,EAAU,CAC3Cze,EAAM,KAAK,OAAO,MAAM,EACxBA,EAAM,KAAK,KAAO,GAElBe,EAAM,KAAK,kBAAmB0d,CAAQ,EACjC,KAAMpf,GAAa,CAChBtB,EAAS,MAAM,8BAA8B,EAC7C0B,EAAO,wBAAyB4J,EAAI,IAAAhK,EAAU,mBAAoB,CAAE,EAAC,EACrEI,EAAO,wBAAyB4J,EAAI,IAAAhK,EAAU,cAAe,CAAE,EAAC,EACnE,EAAE,MAAOmE,GAAM,CAChBxD,EAAM,KAAK,OAAO,IAAIqJ,MAAI7F,EAAG,sBAAsB,CAAC,EACvD,EAAE,QAAQ,IAAM,CACbxD,EAAM,KAAK,KAAO,GACrB,CACL,EAWA,qBAAqB,CAAC,MAAAA,EAAO,OAAAP,CAAA,EAASgf,EAAU,CAC5Cze,EAAM,KAAK,OAAO,MAAM,EACxBA,EAAM,KAAK,KAAO,GAEZe,EAAA,IAAI,mBAAmB0d,EAAS,IAAI,GAAIA,CAAQ,EACjD,KAAMpf,GAAa,CAChBtB,EAAS,MAAM,+BAA+B,EAC9C0B,EAAO,wBAAyB4J,EAAI,IAAAhK,EAAU,mBAAoB,CAAE,EAAC,EACrEI,EAAO,wBAAyB4J,EAAI,IAAAhK,EAAU,cAAe,CAAE,EAAC,EACnE,EAAE,MAAOmE,GAAM,CAChBxD,EAAM,KAAK,OAAO,IAAIqJ,MAAI7F,EAAG,sBAAsB,CAAC,EACvD,EAAE,QAAQ,IAAM,CACbxD,EAAM,KAAK,KAAO,GACrB,CACL,EASA,uBAAuB,CAAC,OAAAP,CAAM,EAAG0zC,EAAO,CACpC1zC,EAAO,yBAA0B,CAAC,QAAS,oBAAqB,QAAS,GAAK,EAExEsB,EAAA,KAAK,yBAA0B,CAAC,MAAAoyC,CAAA,CAAM,EACvC,KAAM9zC,GAAa,CAChBtB,EAAS,MAAM,iCAAiC,EAChD0B,EAAO,wBAAyB4J,EAAI,IAAAhK,EAAU,mBAAoB,CAAE,EAAC,EACrEI,EAAO,wBAAyB4J,EAAI,IAAAhK,EAAU,cAAe,CAAE,EAAC,EACnE,EAAE,MAAM,IAAM,EAClB,EAAE,QAAQ,IAAM,CACbI,EAAO,yBAA0B,CAAC,QAAS,oBAAqB,QAAS,GAAM,EAClF,CACL,EAQA,sBAAsB,CAAC,OAAAA,CAAM,EAAGR,EAAM,CAClCQ,EAAO,yBAA0B,CAAC,QAAS,mBAAoB,QAAS,GAAK,EAE7EsB,EAAM,KAAK,wBAAyB9B,CAAI,EACnC,KAAMI,GAAa,CAChBtB,EAAS,MAAM,gCAAgC,EAC/C0B,EAAO,wBAAyB4J,EAAI,IAAAhK,EAAU,mBAAoB,CAAE,EAAC,EACrEI,EAAO,wBAAyB4J,EAAI,IAAAhK,EAAU,cAAe,CAAE,EAAC,EACnE,EAAE,MAAM,IAAM,EAClB,EAAE,QAAQ,IAAM,CACbI,EAAO,yBAA0B,CAAC,QAAS,mBAAoB,QAAS,GAAM,EACjF,EAET,EAEe2zC,GAAA,CACX,WAAY,SACZpzC,GAAA,UACAC,GAAA,QACAY,GACAqV,UACJ,ECrYMlW,GAAmB,CACrB,QAAS,CACL,SAAU,GACV,gBAAiB,GACjB,eAAgB,GAChB,gBAAiB,GACjB,iBAAkB,GAClB,SAAU,EACd,EACA,YAAa,KACb,UAAW,CAAC,EACZ,iBAAkB,IACtB,EAEMkW,GAAU,CACZ,QAAUlW,GAAqBA,EAAM,QACrC,YAAcA,GAAqBA,EAAM,YACzC,UAAYA,GAAqBA,EAAM,UACvC,iBAAmBA,GAAqBA,EAAM,gBAClD,EAEMC,GAAY,CACd,CAACozC,EAAsB,EAAErzC,EAAkBG,EAAgD,CACvFH,EAAM,QAAQG,EAAQ,OAAO,EAAIA,EAAQ,OAC7C,EAEA,CAACmzC,EAAc,EAAEtzC,EAAkBuzC,EAAmB,CAClDvzC,EAAM,YAAcuzC,CACxB,EACA,CAACC,EAAwB,EAAExzC,EAAkByzC,EAA2B,CACpEzzC,EAAM,UAAYyzC,CACtB,EACA,CAACC,EAAgC,EAAE1zC,EAAkB0M,EAAiB,CAClE1M,EAAM,iBAAmB0M,CAC7B,EACA,CAACinC,EAAyB,EAAE3zC,EAAkB4zC,EAAwB,CAC5D,MAAA7sC,EAAQ/G,EAAM,UAAU,UAAWuM,GAAMA,EAAE,OAASqnC,EAAS,IAAI,EAEnE7sC,IAAU,KACV/G,EAAM,UAAU+G,CAAK,EAAI6sC,EAC7B,CAER,EAEM/yC,GAAU,CAKZ,MAAM,QAAQ,CAAC,OAAApB,GAAS,CACd,MAAAqB,EAAe,MAAMlB,EAAkBH,EAAQ,mBAAoB,WAAY,IAAMsB,EAAM,IAAI,UAAU,CAAC,EACzGtB,EAAA6zC,GAAgBxyC,EAAa,IAAI,CAC5C,EAMA,MAAM,gBAAgB,CAAC,OAAArB,GAASR,EAA2B,CAChD,aAAMW,EAAkBH,EAAQ,mBAAoB,kBAAmB,IAAMsB,EAAM,KAAK,yBAA0B9B,CAAI,CAAC,CAClI,EAEA,MAAM,iBAAiB,CAAC,OAAAQ,GAAS,CACtB,aAAMG,EAAkBH,EAAQ,mBAAoB,mBAAoB,IAAMsB,EAAM,KAAK,yBAAyB,CAAC,CAC9H,EAEA,MAAM,iBAAiB,CAAC,OAAAtB,GAAS,CACtB,aAAMG,EAAkBH,EAAQ,mBAAoB,mBAAoB,IAAMsB,EAAM,KAAK,6BAA6B,CAAC,CAClI,EAKA,MAAM,uBAAuB,CAAC,OAAAtB,GAASR,EAAwC,SACvE,IACM,MAAA6B,EAAe,MAAMlB,EAAkBH,EAAQ,mBAAoB,iBAAkB,IAAMsB,EAAM,KAAK,0BAA2B9B,CAAI,CAAC,EACrIQ,EAAA+zC,GAA0B1yC,EAAa,SAAS,QAClDf,EAAO,CACZmB,EAAK,MAAM,CACP,UAASF,GAAAC,EAAAlB,GAAA,YAAAA,EAAO,WAAP,YAAAkB,EAAiB,OAAjB,YAAAD,EAAuB,UAAW,qDAC9C,EAET,EAKA,MAAM,6BAA6B,CAAC,OAAAvB,GAASR,EAAwB,SAC7D,IAEA,OADqB,MAAMW,EAAkBH,EAAQ,mBAAoB,iBAAkB,IAAMsB,EAAM,KAAK,gCAAiC9B,CAAI,CAAC,GAC9H,UACfc,EAAO,CACZmB,EAAK,MAAM,CACP,UAASF,GAAAC,EAAAlB,GAAA,YAAAA,EAAO,WAAP,YAAAkB,EAAiB,OAAjB,YAAAD,EAAuB,UAAW,qBAC9C,EAET,EAMA,MAAM,iBAAiB,CAAC,OAAAvB,GAASR,EAAO,GAAI,SACpC,IACM,MAAAsE,EAAQnC,GAAqBnC,CAAI,EACjC6B,EAAe,MAAMlB,EAAkBH,EAAQ,mBAAoB,WAAY,IAAMsB,EAAM,IAAI,qBAAqBwC,CAAK,EAAE,CAAC,EAC3H9D,EAAA+zC,GAA0B1yC,EAAa,SAAS,QAClDf,EAAO,CACZmB,EAAK,MAAM,CACP,UAASF,GAAAC,EAAAlB,GAAA,YAAAA,EAAO,WAAP,YAAAkB,EAAiB,OAAjB,YAAAD,EAAuB,UAAW,qBAC9C,EAET,EAKA,MAAM,gBAAgB,CAAC,OAAAvB,GAASR,EAAoB,SAC5C,IACA,MAAM6B,EAAe,MAAMlB,EAAkBH,EAAQ,mBAAoB,kBAAmB,IAAMsB,EAAM,KAAK,sBAAsB9B,EAAK,IAAI,UAAU,CAAC,EAChJ,OAAAQ,EAAAk0C,GAA2B7yC,EAAa,QAAQ,EAChDA,QACFf,EAAO,CACZmB,EAAK,MAAM,CACP,UAASF,GAAAC,EAAAlB,GAAA,YAAAA,EAAO,WAAP,YAAAkB,EAAiB,OAAjB,YAAAD,EAAuB,UAAW,qBAC9C,EACL,CAER,EAEeuyC,GAAA,CACX,WAAY,SACZvzC,GAAA,UACAC,GAAA,QACAY,GACAqV,UACJ,ECrJMlW,GAAsB,CACxB,QAAS,CACL,UAAW,GACX,OAAQ,GACR,OAAQ,EACZ,EACA,QAAS,IACb,EAEMkW,GAAU,CACZ,QAAUlW,GAAwBA,EAAM,QACxC,QAAUA,GAAwBA,EAAM,OAC5C,EAEMC,GAAY,CACd,CAAC4zC,EAAyB,EAAE7zC,EAAqBG,EAAgD,CAC7FH,EAAM,QAAQG,EAAQ,OAAO,EAAIA,EAAQ,OAC7C,EACA,CAAC2zC,EAAiB,EAAE9zC,EAAqB+zC,EAAkB,CACvD/zC,EAAM,QAAU+zC,CAAA,CAExB,EAEMlzC,GAAU,CAEZ,MAAM,YAAY,CAAC,OAAApB,GAASiN,EAAiC,CACnD,MAAA9K,EAAcR,GAAqBsL,CAAO,EAEzC,OAAA3L,EAAM,IAAI,eAAea,CAAW,EAAE,EACxC,KAAMvC,GAAa,CAChBI,EAAOq0C,GAAmBz0C,EAAS,KAAK,OAAO,EAC/CtB,EAAS,MAAM,sBAAuBsB,EAAS,KAAK,OAAO,EAC9D,EAAE,MAAM,IAAM,EACd,EAAE,QAAQ,IAAM,EAChB,CACT,EAMA,cAAc,CAAC,OAAAI,CAAM,EAAGs0C,EAAkB,CAChChzC,EAAA,IAAI,gBAAgBgzC,EAAQ,IAAI,GAAIA,CAAO,EAC5C,KAAM10C,GAAa,CAChBI,EAAOq0C,GAAmBz0C,EAAS,KAAK,OAAO,EAC/CtB,EAAS,MAAM,yBAA0BsB,EAAS,KAAK,OAAO,EACjE,EAAE,MAAM,IAAM,EAClB,EAAE,QAAQ,IAAM,EAChB,CACL,EAMA,MAAM,cAAc,CAAC,OAAAI,GAASR,EAAe,CACrC,IACM,MAAA6B,EAAe,MAAMlB,EAAkBH,EAAQ,sBAAuB,SAAU,IAAMsB,EAAM,KAAK,eAAgB9B,CAAI,CAAC,EACrHQ,EAAAq0C,GAAmBhzC,EAAa,OAAO,EACrC/C,EAAA,MAAM,yBAA0B+C,EAAa,OAAO,QACxDf,EAAO,CACHhC,EAAA,MAAM,mBAAoBgC,EAAM,QAAQ,EAC7CA,EAAM,SAAS,SAAW,MAC1BmM,GAAY,eAAe,EAC3B,OAAO,SAAS,OAAO,EAC3B,CAER,EAKA,MAAM,cAAc,CAAC,OAAAzM,GAASs0C,EAAkB,CACxC,IACM,MAAAn0C,EAAkBH,EAAQ,sBAAuB,SAAU,IAAMsB,EAAM,OAAO,gBAAgBgzC,EAAQ,IAAI,EAAE,CAAC,EAC5Gt0C,EAAAq0C,GAAmB,IAAI,OAClB,EAChB,CAER,EAEeC,GAAA,CACX,WAAY,SACZ/zC,GAAA,UACAC,GAAA,QACAY,GACAqV,UACJ,EClGA5T,GAAM,OAAO0xC,EAAQ,EA4BrB,SAASC,GAAmBjwC,EAA+B,GAAI,SACrD,MACF,KAAA4c,EAAO,EACP,SAAAszB,EAAW,CAAC,EACZ,aAAAC,EAAe,GACf,iBAAAC,EAAmB,GACnB,cAAAC,EAAgB,GAChB,oBAAAC,EACA,qBAAAC,EACA,WAAAC,EACA,YAAAC,EACA,UAAAC,EACA,UAAAC,EAAY,CAAC,EACb,SAAAC,EAAW,CAAC,EACZ,OAAAC,EACA,OAAAC,CAAA,EACA9wC,EAEE/E,EAgBF,CACA,KAAA2hB,EACA,SAAU,MAAM,QAAQszB,CAAQ,GAAKA,EAAS,SAAW,EAAIA,EAAS,CAAC,EAAI,CAAC,CAACA,EAC7E,aAAAC,EACA,iBAAAC,EACA,cAAAC,EACA,oBAAAC,EACA,qBAAAC,EACA,WAAAC,EACA,YAAAC,EACA,UAAAC,EACA,UAAAC,CACJ,EAEI,OAAAC,EAAS,OAAS,IACb31C,EAAA,SAAW21C,EAAS,KAAK,GAAG,GAGjCD,EAAU,OAAS,IACd11C,EAAA,SAAW01C,EAAU,KAAK,GAAG,GAGjCP,GACD,OAAOn1C,EAAK,iBAGXo1C,GACD,OAAOp1C,EAAK,cAGZ41C,IACA51C,EAAK,OAAS41C,EACT51C,EAAA,YAAc,OAAO,QAAQ41C,CAAM,EACnC,OAAO,CAAC,CAAC5R,EAAG1kC,CAAK,IAAMA,CAAK,EAC5B,IAAI,CAAC,CAACF,EAAKE,CAAK,IAAM,UAAUF,CAAG,KAAKE,CAAK,EAAE,EAC/C,KAAK,GAAG,GAGbu2C,IACK71C,EAAA,QAASgC,EAAA6zC,GAAA,YAAAA,EAAS,KAAT,YAAA7zC,EAAa,IAC3BhC,EAAK,WAAW+B,EAAA8zC,GAAA,YAAAA,EAAS,KAAT,YAAA9zC,EAAa,SAAU,QAGpC/B,CACX,CAwJA,MAAMe,GAAsB,CACxB,KAAM,GACN,SAAU,GAEV,QAAS,CACL,0BAA2B,EAC/B,EAEA,QAAS,CACL,QAAS,GACT,aAAc,GACd,SAAU,GACV,KAAM,GACN,kBAAmB,GACnB,gBAAiB,GACjB,eAAgB,GAChB,4BAA6B,GAC7B,cAAe,GACf,cAAe,GACf,gBAAiB,GACjB,cAAe,GACf,gBAAiB,GACjB,cAAe,GACf,aAAc,GACd,wBAAyB,GACzB,6BAA8B,GAC9B,wBAAyB,GACzB,oBAAqB,GACrB,4BAA6B,GAC7B,sBAAuB,GACvB,iBAAkB,EACtB,EAEA,YAAa,IAAIhB,GAEjB,QAAS,KAET,gBAAiB,CAAC,EAElB,cAAe,EACf,iBAAkB,CAAC,EACnB,SAAU,CAAC,EACX,mBAAoB,CAAC,EAErB,QAAS,CACL,KAAM,GACN,SAAU,EACV,WAAY,GACZ,KAAM,EACN,eAAgB,EAChB,SAAU,EACV,aAAc,EACd,oBAAqB,KACrB,aAAc,KACd,eAAgB,GAChB,cAAe,EACf,KAAM,GACN,OAAQ,KACR,uBAAwB,EACxB,OAAQ,GACR,OAAQ,GACR,MAAO,EACP,SAAU,GACV,MAAO,EACP,SAAU,GACV,YAAa,GACb,WAAY,GACZ,cAAe,GACf,UAAW,KACX,WAAY,GACZ,OAAQ,GACR,YAAa,EACb,eAAgB,EAEhB,KAAM,KACN,KAAM,KACN,OAAQ,KAER,KAAM,KAEN,YAAa,CAAC,EAEd,SAAU,CACN,UAAW,GACX,SAAU,GACV,MAAO,GACP,MAAO,GACP,IAAK,GACL,IAAK,GACL,aAAc,GACd,aAAc,GACd,aAAc,GACd,oBAAqB,GACrB,SAAU,EACd,EAEA,SAAU,CACN,SAAU,GACV,gBAAiB,EACjB,eAAgB,CACZ,eAAgB,EAChB,YAAa,EACb,qBAAsB,EAC1B,EAEA,aAAc,EACd,YAAa,EACjB,EAEA,QAAS,CACL,UAAW,GACX,MAAO,EACP,MAAO,GACP,MAAO,GACP,KAAM,GACN,MAAO,GACP,OAAQ,CAAC,EACT,SAAU,GACV,eAAgB,GAChB,IAAK,GACL,KAAM,EACV,EAEA,QAAS,KAET,QAAS,CACL,eAAgB,EAChB,MAAO,EACP,WAAY,GACZ,aAAc,GAEd,UAAW,CACP,QAAS,GACT,QAAS,GACT,WAAY,GACZ,KAAM,GACN,SAAU,GACV,cAAe,EACf,SAAU,EACV,KAAM,GACN,OAAQ,EACZ,EAEA,SAAU,EACV,OAAQ,EACR,eAAgB,EAChB,cAAe,EACf,SAAU,EACV,WAAY,EACZ,eAAgB,GAChB,iBAAkB,CACtB,EAEA,sBAAuB,CAAC,EAExB,cAAe,CACX,mBAAoB,GACpB,kBAAmB,GACnB,wBAAyB,GACzB,0BAA2B,GAE3B,aAAc,CACV,oBAAqB,GACrB,mBAAoB,GACpB,mBAAoB,GAE5B,EAEA,eAAgB,CACZ,eAAgB,GAChB,YAAa,GACb,qBAAsB,EAC1B,EAEA,SAAU,CACN,OAAQ,EACR,MAAO,EACP,KAAM,EACN,MAAO,EACP,QAAS,EACT,MAAO,CACX,EAEA,SAAU,CACN,KAAM,GACN,MAAO,GACP,SAAU,GACV,aAAc,GACd,aAAc,GACd,MAAO,EACP,KAAM,GACN,UAAW,GACX,MAAO,KAAK,MAAM,aAAa,QAAQ,OAAO,CAAC,CACnD,EAEA,UAAW,CAAC,EAEZ,SAAU,EACd,EAEA,KAAM,KACN,gBAAiB,CAAC,EAElB,gBAAiB,CACb,KAAM,EACV,EAEA,aAAc,CAAC,EAEf,iBAAkB,CAAC,EACnB,mBAAoB,CAChB,CACI,IAAK,QACL,UAAW,CACP,MAAO,SACP,SAAU,OACd,EACA,UAAW,KACX,QAAS,CACL,MAAO,QACX,CAER,EAEA,aAAc,CAAC,EAEf,mBAAoB,CAAC,EACrB,KAAM,KACN,iBAAkB,CAAC,EACnB,eAAgB,CAAC,EACjB,kBAAmB,CAAC,EACpB,oBAAqB,KACrB,iBAAkB,CAAC,EACnB,yBAA0B,CAAC,EAC3B,cAAe,CAAC,EAChB,eAAgB,EACpB,EAEMkX,GAA0B,CAC5B,KAAOlW,GAAwBA,EAAM,KACrC,SAAWA,GAAwBA,EAAM,SACzC,kBAAoBA,GAAwBA,EAAM,kBAClD,oBAAsBA,GAAwBA,EAAM,oBACpD,iBAAmBA,GAAwBA,EAAM,iBACjD,yBAA2BA,GAAwBA,EAAM,yBACzD,eAAiBA,GAAwBA,EAAM,eAC/C,cAAgBA,GAAwBA,EAAM,cAC9C,QAAUA,GAAwBA,EAAM,QACxC,iBAAmBA,GAAwBA,EAAM,iBACjD,SAAWA,GAAwBA,EAAM,SACzC,KAAOA,GAAwBA,EAAM,KACrC,eAAiBA,GAAwBA,EAAM,eAC/C,kBAAoBA,GAAwBA,EAAM,mBAClD,cAAgBA,GAAwBA,EAAM,cAC9C,gBAAkBA,GAAwBA,EAAM,gBAChD,eAAiBA,GAAwBA,EAAM,QAC/C,mBAAqBA,GAAwBA,EAAM,mBACnD,iBAAmBA,GAAwBA,EAAM,iBACjD,gBAAkBA,GAAwBA,EAAM,QAAQ,SACxD,eAAiBA,GAAwBA,EAAM,QAAQ,QACvD,gBAAkBA,GAAwBA,EAAM,gBAChD,aAAeA,GAAwBA,EAAM,aAC7C,aAAeA,GAAwBA,EAAM,aAC7C,mBAAqBA,GAAwBA,EAAM,mBACnD,KAAOA,GAAwBA,EAAM,KACrC,YAAcA,GAAwBA,EAAM,YAC5C,gBAAkBA,GAAwBA,EAAM,gBAChD,iBAAmBA,GAAwBA,EAAM,iBACjD,eAAiBA,GAAwBA,EAAM,OACnD,EAEMC,GAAY,CACd,CAAC80C,EAAyB,EAAE/0C,EAAqBG,EAAgD,CAC7FH,EAAM,QAAQG,EAAQ,OAAO,EAAIA,EAAQ,OAC7C,EAEA,CAAC60C,EAAwB,EAAEh1C,EAAqB2qB,EAA6C,CACzF3qB,EAAM,QAAQ2qB,EAAO,OAAO,EAAIA,EAAO,KAC3C,EACA,CAACsqB,EAA+B,EAAEj1C,EAAqBk1C,EAAY,CAC3DA,GAAe,KACfl1C,EAAM,YAAY,OAAO,MAAM,EAE/BA,EAAM,YAAY,OAAO,MAAMk1C,CAAU,CAEjD,EACA,CAACC,EAA4B,EAAEn1C,EAAqBD,EAAO,CACvDC,EAAM,YAAY,OAAO,IAAID,EAAM,MAAOA,EAAM,OAAO,CAC3D,EACA,CAACq1C,EAAoB,EAAEp1C,EAAqBq1C,EAAc,CACtDr1C,EAAM,QAAQ,KAAOq1C,CACzB,EACA,CAACC,EAA6B,EAAEt1C,EAAqB40C,EAAU,CAC3D50C,EAAM,oBAAsB,KAC5BA,EAAM,kBAAoB40C,CAC9B,EACA,CAACW,EAAsC,EAAEv1C,EAAqB,CAC1DA,EAAM,kBAAoB,CAAC,UAAU,EACrCA,EAAM,oBAAsBsC,KAAQ,OAAO,qBAAqB,CACpE,EACA,CAACkzC,EAAkC,EAAEx1C,EAAqB60C,EAAQ,CAC9D70C,EAAM,iBAAmB60C,CAC7B,EACA,CAACY,EAA+B,EAAEz1C,EAAqB01C,EAAU,CAC7D11C,EAAM,eAAiB01C,CAC3B,EACA,CAACC,EAA6B,EAAE31C,EAAqB41C,EAAS,CAC1D51C,EAAM,cAAgB41C,CAC1B,EACA,CAACC,EAAqC,EAAE71C,EAAqB40C,EAAU,CACnE50C,EAAM,yBAA2B40C,CACrC,EACA,CAACkB,EAAyB,EAAE91C,EAAqB+1C,EAAgB,CAC7D/1C,EAAM,QAAQ,OAAS+1C,CAC3B,EACA,CAACC,EAAiC,EAAEh2C,EAAqBi2C,EAA2B,CAChFj2C,EAAM,QAAUi2C,EAChBj2C,EAAM,KAAO,EACjB,EACA,CAACk2C,EAAwC,EAAEl2C,EAAqBo/B,EAAgB,CACxEp/B,QAAM,QAAS,SAAUo/B,CAAM,CACvC,EACA,CAAC+W,EAA2C,EAAEn2C,EAAqBf,EAAM,CACjEe,QAAM,QAASf,EAAK,UAAWoK,MAAIpK,EAAK,QAASA,EAAK,SAAS,CAAC,CACxE,EACA,CAACm3C,EAA2B,EAAEp2C,EAAqBzB,EAAO,CACtDyB,EAAM,SAAWzB,CACrB,EACA,CAAC83C,EAAkB,EAAEr2C,EAAqBs2C,EAA8B,CACpEt2C,EAAM,SAAWs2C,EACjBt2C,EAAM,KAAO,EACjB,EACA,CAACu2C,EAAuB,EAAEv2C,EAAqBuT,EAAM,CACjDvT,EAAM,KAAOuT,CACjB,EACA,CAACijC,EAA4B,EAAEx2C,EAAqBs2C,EAA8B,CAC9Et2C,EAAM,mBAAqBs2C,CAC/B,EACA,CAACG,EAA2B,EAAEz2C,EAAqBs2C,EAA8B,CAC7Et2C,EAAM,iBAAmBs2C,CAC7B,EACA,CAACI,EAAyB,EAAE12C,EAAqBs2C,EAA8B,CAC3Et2C,EAAM,eAAiBs2C,CAC3B,EACA,CAACK,EAAmC,EAAE32C,EAAqB8yC,EAAQ,CAC/D9yC,EAAM,iBAAmB8yC,CAC7B,EACA,CAAC8D,EAAwB,EAAE52C,EAAqB4zB,EAAO,CACnD5zB,EAAM,cAAgB4zB,CAC1B,EACA,CAACijB,EAA0B,EAAE72C,EAAqB82C,EAAU,CACxD92C,EAAM,gBAAkB82C,CAC5B,EACA,CAACC,EAA6B,EAAE/2C,EAAqBynC,EAAM,CACvDznC,EAAM,QAAQ,YAAY,KAAKynC,CAAI,CACvC,EACA,CAACuP,EAA8B,EAAEh3C,EAAqBynC,EAAM,CAClD,MAAAwP,EAAYtgB,YAAU32B,EAAM,QAAQ,YAAkBk3C,KAAE,OAASzP,EAAK,IAAI,EAC5EwP,GAAa,IACbj3C,EAAM,QAAQ,YAAY,OAAOi3C,EAAW,CAAC,EAC7Cj3C,EAAM,QAAQ,YAAY,KAAKynC,CAAI,EAE3C,EACA,CAAC0P,EAA8B,EAAEn3C,EAAqBynC,EAAM,CACxDznC,EAAM,QAAQ,YAAco3C,SAAOp3C,EAAM,QAAQ,YAAak3C,GAAKA,EAAE,OAASzP,CAAI,CACtF,EACA,CAAC4P,EAAwB,EAAEr3C,EAAqBs3C,EAAM,CAClDt3C,EAAM,aAAes3C,CACzB,EACA,CAACC,EAA6B,EAAEv3C,EAAqBgI,EAAiC,CAClFhI,EAAM,mBAAqBgI,CAC/B,EACA,CAACwvC,EAA8B,EAAEx3C,EAAqBy3C,EAA8B,CAChFz3C,EAAM,mBAAmB,KAAKy3C,CAAS,CAC3C,EACA,CAACC,EAA6B,EAAE13C,EAAqB,CACjDA,EAAM,mBAAqB,CACvB,CACI,IAAK,QACL,UAAW,CACP,MAAO,SACP,SAAU,OACd,EACA,UAAW,KACX,QAAS,CACL,MAAO,QACX,CAER,CACJ,EACA,CAAC23C,EAA2B,EAAE33C,EAAqB8P,EAK9C,CACD9P,EAAM,iBAAmB8P,EAEzB9P,EAAM,mBAAqB,CAAC,CACxB,IAAK,QACL,UAAW,CACP,MAAO,SACP,SAAU,OACd,EACA,UAAW,KACX,QAAS,CACL,MAAO,QACX,CACF,EAEF,MAAM43C,EAA0B,CAACC,EAAkB71C,EAAsB4b,KAAsC,CAC3G,IAAK,eAAiB5b,EACtB,UAAW,KACX,IAAK61C,EACL,MAAO,CAACv1C,GAAMN,CAAI,EAAE,QAAQ,EAC5B,QAAS,CAAC,MAAA4b,CAAK,IAGnB9N,EAAM,QAAgB9N,GAAA,CAClB,MAAM81C,EAAOx1C,GAAM,SAASA,GAAMN,EAAK,QAAQ,EAAE,KAAKM,GAAMN,EAAK,UAAU,CAAC,CAAC,EAAE,OAAO,EAChF+1C,EAAkBz1C,GAAMN,EAAK,iBAAiB,EAAE,OAAO,QAAQ,EAC/Dg2C,EAAgB11C,GAAMN,EAAK,eAAe,EAAE,OAAO,QAAQ,EAEjE,GAAI81C,IAAS,EACT93C,EAAM,mBAAmB,KACrB43C,EAAwB,QAAS51C,EAAK,WAAY,0BAA0B+1C,CAAe,EAAE,EAC7FH,EAAwB,MAAO51C,EAAK,WAAY,qBAAqB+1C,CAAe,EAAE,EACtFH,EAAwB,MAAO51C,EAAK,SAAU,qBAAqB+1C,CAAe,EAAE,EACpFH,EAAwB,QAAS51C,EAAK,SAAU,2BAA2Bg2C,CAAa,EAAE,CAC9F,MACG,CACH,MAAMC,EAAY,CAAC,EACnB,QAAS1rC,EAAI,EAAGA,EAAIurC,EAAMvrC,IACtB0rC,EAAU,KAAKL,EAAwB,MAAOt1C,GAAMN,EAAK,UAAU,EAAE,IAAIuK,EAAG,MAAM,EAAG,aAAa,CAAC,EAGvGvM,EAAM,mBAAmB,KACrB43C,EAAwB,QAAS51C,EAAK,WAAY,0BAA0B+1C,CAAe,EAAE,EAC7FH,EAAwB,MAAO51C,EAAK,WAAY,qBAAqB+1C,CAAe,EAAE,EACtF,GAAGE,EACHL,EAAwB,MAAO51C,EAAK,SAAU,2BAA2Bg2C,CAAa,EAAE,EACxFJ,EAAwB,QAAS51C,EAAK,SAAU,2BAA2Bg2C,CAAa,EAAE,CAC9F,EACJ,CACH,CACL,EAEA,CAACE,EAAyB,EAAEl4C,EAAqBf,EAAM,CACnDe,EAAM,QAAUf,EAChBe,EAAM,QAAQ,KAAO,GACrB,MAAMm4C,EAAal5C,EAAK,QACxBe,EAAM,QAAQ,QAAU,CAAC,GAAGA,EAAM,QAAQ,QAAS,GAAGm4C,CAAU,EAEhEn4C,EAAM,QAAQ,QAAQ,iBAAmBqJ,EAAA,IAAIpK,EAAM,iBAAiB,CACxE,EAEA,CAACm5C,EAA8B,EAAEp4C,EAAqBs2C,EAAU,CAC5Dt2C,EAAM,aAAes2C,CACzB,EACA,CAAC+B,EAA0B,EAAEr4C,EAAqBi2C,EAAS,CACvDj2C,EAAM,gBAAkBi2C,CAC5B,EACA,CAACqC,EAA2B,EAAEt4C,EAAqBkjB,EAAU,CACzD,MAAMjkB,EAAO,CACT,MAAOoK,MAAI6Z,EAAU,OAAO,EAC5B,UAAW7Z,MAAI6Z,EAAU,WAAW,EACpC,MAAO,IACX,EAEI7Z,EAAA,IAAI6Z,EAAU,OAAO,IAChBjkB,EAAA,MAAQoK,MAAI6Z,EAAU,OAAO,GAEtCljB,EAAM,mBAAqBkjB,EAC3B,aAAa,QAAQ,WAAY,KAAK,UAAUjkB,CAAI,CAAC,CACzD,EACA,CAACs5C,EAAmB,EAAEv4C,EAAqB,CACvCA,EAAM,QAAU,CACZ,eAAgB,EAChB,iBAAkB,EAClB,QAAS,OACT,aAAc,EACd,eAAgB,EAChB,KAAM,GACN,aAAc,OACd,SAAU,EACV,WAAY,GACZ,KAAM,EACN,eAAgB,EAChB,SAAU,EACV,aAAc,EACd,oBAAqB,GACrB,OAAQ,GACR,YAAa,EACb,eAAgB,EAChB,eAAgB,GAChB,cAAe,EACf,KAAM,GACN,OAAQ,OACR,uBAAwB,EACxB,OAAQ,GACR,OAAQ,GACR,MAAO,EACP,SAAU,GACV,MAAO,EACP,SAAU,GACV,YAAa,GACb,WAAY,GACZ,cAAe,GACf,UAAW,KACX,WAAY,GACZ,KAAM,GACN,KAAM,KACN,OAAQ,KACR,KAAM,KACN,YAAa,CAAC,EACd,SAAU,CACN,UAAW,GACX,SAAU,GACV,MAAO,GACP,MAAO,GACP,IAAK,GACL,IAAK,GACL,aAAc,GACd,aAAc,GACd,aAAc,GACd,oBAAqB,GACrB,SAAU,EACd,EACA,SAAU,CACN,SAAU,GACV,gBAAiB,EACjB,eAAgB,CACZ,eAAgB,EAChB,YAAa,EACb,qBAAsB,EAC1B,EAEA,aAAc,EACd,YAAa,EACjB,EAEA,QAAS,CACL,UAAW,GACX,MAAO,EACP,MAAO,GACP,MAAO,GACP,KAAM,GACN,MAAO,GACP,OAAQ,CAAC,EACT,SAAU,GACV,eAAgB,GAChB,IAAK,GACL,KAAM,EACV,EAEA,QAAS,CACL,eAAgB,EAChB,MAAO,EACP,WAAY,GACZ,aAAc,GAEd,UAAW,CACP,QAAS,GACT,QAAS,GACT,WAAY,GACZ,KAAM,GACN,SAAU,GACV,cAAe,EACf,SAAU,EACV,KAAM,GACN,OAAQ,EACZ,EAEA,SAAU,EACV,OAAQ,EACR,eAAgB,EAChB,cAAe,EACf,SAAU,EACV,WAAY,EACZ,eAAgB,GAChB,iBAAkB,CACtB,EAEA,sBAAuB,CAAC,EAExB,cAAe,CACX,mBAAoB,GACpB,kBAAmB,GACnB,wBAAyB,GACzB,0BAA2B,GAE3B,aAAc,CACV,oBAAqB,GACrB,mBAAoB,GACpB,mBAAoB,GAE5B,EAEA,eAAgB,CACZ,eAAgB,GAChB,YAAa,GACb,qBAAsB,EAC1B,EAEA,SAAU,CACN,OAAQ,EACR,MAAO,EACP,KAAM,EACN,MAAO,EACP,QAAS,EACT,MAAO,CACX,EAEA,SAAU,CACN,KAAM,GACN,MAAO,GACP,SAAU,GACV,aAAc,GACd,aAAc,GACd,MAAO,EACP,KAAM,GACN,UAAW,GACX,MAAO,KAAK,MAAM,aAAa,QAAQ,OAAO,CAAC,CACnD,EAEA,UAAW,CAAC,EAEZ,SAAU,EACd,EAER,EAEMa,GAAU,CAEZ,MAAM,mBAAmB,CAAC,OAAApB,GAAS+4C,EAAc,SACtC/4C,EAAA22C,GAA6B,EAAK,EAErC,IACA,MAAMt1C,EAAe,MAAMlB,EAAkBH,EAAQ,sBAAuB,UAAW,IAAMsB,EAAM,IAAI,gBAAgBy3C,CAAI,EAAE,CAAC,EAGxHrc,IAASl7B,EAAAH,GAAA,YAAAA,EAAc,UAAd,YAAAG,EAAuB,SAAU,CAAC,EAC3C6pC,IAAQ9pC,EAAAF,GAAA,YAAAA,EAAc,UAAd,YAAAE,EAAuB,QAAS,CAAC,EAExCvB,EAAA,8BAA+BqB,EAAa,OAAO,EAC1DrB,EAAO,qBAAsB08B,EAAQ,CAAC,KAAM,GAAK,EACjD18B,EAAO,kBAAmBqrC,EAAO,CAAC,KAAM,GAAK,EACpC/sC,EAAA,MAAM,+BAAgC+C,EAAa,OAAO,QAC9Df,EAAO,CACRA,EAAM,SAAS,SAAW,KACnBN,EAAA22C,GAA6B,EAAI,CAC5C,CAER,EAEA,uBAAuB,CAAC,OAAA32C,CAAM,EAAG+4C,EAAc,CAC3C/4C,EAAO,sBAAuB,CAAC,QAAS,eAAgB,QAAS,GAAK,EAEtEsB,EAAM,IAAI,gBAAgBy3C,CAAI,gBAAgB,EACzC,KAAiBn5C,GAAA,CACdtB,EAAS,MAAM,qCAAsCsL,EAAI,IAAAhK,EAAU,eAAe,CAAC,EACtF,EAAE,MAAM,IAAM,EAClB,EAAE,QAAQ,IAAM,CACbI,EAAO,sBAAuB,CAAC,QAAS,eAAgB,QAAS,GAAM,EAC1E,CACL,EAEA,MAAM,sBAAsB,CAAC,OAAAA,GAAS,CAC5B,MAAAqB,EAAe,MAAMlB,EAAkBH,EAAQ,sBAAuB,oBAAqB,IAAMsB,EAAM,IAAI,uBAAuB,CAAC,EAClItB,EAAAg3C,GAA6B31C,EAAa,QAAQ,CAC7D,EAKA,oBAAoB,CAAC,OAAArB,CAAM,EAAGuE,EAAS,CACnCvE,EAAO,sBAAuB,CAAC,QAAS,kBAAmB,QAAS,GAAK,EAEzE,IAAIg5C,EAAU,IACVpvC,EAAA,IAAIrF,EAAS,WAAW,IACxBy0C,GAAW,aAAapvC,MAAIrF,EAAS,WAAW,CAAC,IAEjDqF,EAAA,IAAIrF,EAAS,SAAS,IACtBy0C,GAAW,YAAYpvC,MAAIrF,EAAS,SAAS,CAAC,IAGlDjD,EAAM,IAAI,sBAAsB03C,CAAO,EAAE,EACpC,KAAiBp5C,GAAA,CACdI,EAAO,sBAAuB4J,MAAIhK,EAAU,eAAe,CAAC,EAC/D,EAAE,MAAM,IAAM,EAClB,EAAE,QAAQ,IAAM,CACbI,EAAO,sBAAuB,CAAC,QAAS,kBAAmB,QAAS,GAAM,EAC7E,CACL,EAEA,6BAA6B,CAAC,OAAAA,CAAM,EAAGuE,EAAS,CAC5CvE,EAAO,sBAAuB,CAAC,QAAS,kBAAmB,QAAS,GAAK,EAEzE,IAAIg5C,EAAU,IACVpvC,EAAA,IAAIrF,EAAS,WAAW,IACxBy0C,GAAW,aAAapvC,MAAIrF,EAAS,WAAW,CAAC,IAEjDqF,EAAA,IAAIrF,EAAS,SAAS,IACtBy0C,GAAW,YAAYpvC,MAAIrF,EAAS,SAAS,CAAC,IAG5CjD,EAAA,IAAI,kBAAkBiD,EAAQ,YAAY,mBAAmBy0C,CAAO,EAAE,EACvE,KAAiBp5C,GAAA,CACdI,EAAO,sBAAuB4J,MAAIhK,EAAU,eAAe,CAAC,EAC/D,EAAE,MAAM,IAAM,EAClB,EAAE,QAAQ,IAAM,CACbI,EAAO,sBAAuB,CAAC,QAAS,kBAAmB,QAAS,GAAM,EAC7E,CACL,EAKA,MAAM,cAAc,CAAC,OAAAA,GAASuE,EAA+B,GAAI,SACzD,IACM,MAAA/E,EAAOg1C,GAAmBjwC,CAAO,EAEjCT,EAAQ1B,GAA0B5C,EAAM,EAAI,EAE5C6B,EAAe,MAAMlB,EAAkBH,EAAQ,sBAAuB,WAAY,IAAMsB,EAAM,IAAI,eAAewC,CAAK,EAAE,CAAC,EAE3HS,GAAA,MAAAA,EAAS,cACFvE,EAAA+2C,GAA8B11C,EAAa,IAAI,GAE/CrB,EAAA42C,GAAoBv1C,EAAa,IAAI,EACrCrB,EAAA82C,GAAyBz1C,EAAa,IAAI,EACjDrB,EAAOm3C,GAA0B91C,EAAa,KAAK,KAAK,SAEvDf,EAAO,CACZN,EAAO,2BAA0BuB,GAAAC,EAAAlB,EAAM,WAAN,YAAAkB,EAAgB,OAAhB,YAAAD,EAAsB,UAAW,oBAAoB,EACtF,QAAQ,MAAMjB,CAAK,EAE3B,EAEA,MAAM,oBAAoB,CAAC,OAAAN,GAAS+4C,EAAc,OAC1C,IACA,MAAM13C,EAAe,MAAMlB,EAAkBH,EAAQ,sBAAuB,UAAW,IAAMsB,EAAM,IAAI,eAAewxC,GAAe,eAAe,CAAC,YAAYiG,CAAI,EAAE,CAAC,EAExK/4C,EAAO44C,IAA4Bv3C,GAAA,YAAAA,EAAc,UAAW,EAAE,EACrD/C,EAAA,MAAM,6BAA8B+C,GAAA,YAAAA,EAAc,IAAI,EAC/D,MAAM03B,IAAYv3B,EAAAH,GAAA,YAAAA,EAAc,UAAd,YAAAG,EAAuB,WAAY,CAAC,EACtD,IAAIy3C,EAAe,CAAC,EAChBlgB,EAAU,OAAS,IACJkgB,EAAAlgB,EAAUA,EAAU,OAAS,CAAC,GAEjD/4B,EAAO,wBAAyBi5C,EAAc,CAAC,KAAM,GAAK,EAC1D36C,EAAS,MAAM,uBAAuB,QACjCgC,EAAO,CACRA,EAAM,SAAS,SAAW,KACnBN,EAAA22C,GAA6B,EAAI,CAC5C,CAER,EAKA,MAAM,kBAAkB,CAAC,OAAA32C,GAASR,EAA8D,CAC5F,OAAO,MAAMW,EAAkBH,EAAQ,sBAAuB,OAAQ,IAAMsB,EAAM,KAAK,gBAAgB9B,EAAK,QAAQ,IAAI,QAAS,CAC7H,IAAKA,EAAK,IACV,MAAOA,EAAK,MACf,CAAC,CACN,EAEA,wBAAwB,CAAC,OAAAQ,GAAS,CAC9BsB,EAAM,IAAI,mBAAmB,EACxB,KAAiB1B,GAAA,CACdI,EAAO,2BAA4B4J,EAAI,IAAAhK,EAAU,gBAAiB,CAAE,EAAC,EACxE,EAAE,MAAM,IAAM,EAClB,EAAE,QAAQ,IAAM,CACbI,EAAO,sBAAuB,CAAC,QAAS,8BAA+B,QAAS,GAAM,EACzF,CACL,EAEA,gBAAgB,CAAC,OAAAA,CAAM,EAAG41C,EAAM,CACrB51C,EAAA21C,GAAsBC,CAAI,CACrC,EAEA,MAAM,yBAAyB,CAAC,OAAA51C,GAAS41C,EAAc,CACnD,MAAMv0C,EAAe,MAAMlB,EAAkBH,EAAQ,sBAAuB,8BAA+B,IAAMsB,EAAM,IAAI,eAAewxC,GAAe,eAAgB,cAAa8C,CAAI,eAAe,CAAC,EACnM51C,EAAA,wBAAyBqB,EAAa,WAAW,CAC5D,EASA,SAAU,CACN,KAAM,GACN,QAAQ,CAAC,OAAArB,EAAQ,MAAAO,GAAQ0F,EAAI,CACzB3E,EAAM,KAAK,eAAewxC,GAAe,gBAAgB,mBAAoB,CACzE,GAAA7sC,CAAA,CACH,EAAE,KAAiBrG,GAAA,CACV,MAAAs5C,EAAkBtvC,MAAIhK,EAAU,sBAAsB,EAC5DW,EAAM,KAAOqJ,MAAIhK,EAAU,YAAY,EAMvCI,EAAO,wBAAyB,CAC5B,MAAOk5C,EAAgB,SAAS,MAChC,UAAWA,EAAgB,SAAS,GACpC,MAAOA,EAAgB,aAAa,eAAe,KAAK,MAC3D,EACJ,EAAE,MAAM,IAAM,EACd,EAET,EAKA,MAAM,cAAc,CAAC,OAAAl5C,EAAQ,MAAAO,GAAQf,EAAM,eACnC,IACAQ,EAAO,2BAA2B,EAClC,MAAMqB,EAAe,MAAMlB,EAAkBH,EAAQ,sBAAuB,gBAAiB,IAAMsB,EAAM,IAAI,gBAAgB9B,EAAK,IAAI,GAAIA,CAAI,CAAC,EAExIQ,EAAA,8BAA+BqB,EAAa,OAAO,EACnDrB,EAAA,uBAAsBwB,EAAAH,GAAA,YAAAA,EAAc,UAAd,YAAAG,EAAuB,SAAU,GAAI,CAAC,KAAM,GAAK,EAC9EC,EAAK,QAAQ,CACT,QAAS,+BACZ,QACInB,EAAO,CACZmB,EAAK,MAAM,CACP,UAAS6N,GAAA/N,EAAAjB,GAAA,YAAAA,EAAO,WAAP,YAAAiB,EAAiB,OAAjB,YAAA+N,EAAuB,UAAW,qBAC9C,EACD/O,EAAM,YAAY,OAAO,MAAI44C,GAAAl0B,EAAA3kB,GAAA,YAAAA,EAAO,WAAP,YAAA2kB,EAAiB,OAAjB,YAAAk0B,EAAuB,SAAU,EAAE,EAExE,EAQA,0BAA0B,CAAC,OAAAn5C,CAAM,EAAGR,EAAM,CACtCQ,EAAO,sBAAuB,CAAC,QAAS,8BAA+B,QAAS,GAAK,EAErFsB,EAAM,IAAI,gBAAgB9B,EAAK,IAAI,iBAAkB,CAAC,WAAYA,EAAK,UAAU,CAAC,EAC7E,KAAK,IAAM,CACRlB,EAAS,MAAM,6BAA6B,EAC/C,EACA,MAAegC,GAAA,SACZmB,EAAK,MAAM,CACP,UAASF,GAAAC,EAAAlB,GAAA,YAAAA,EAAO,WAAP,YAAAkB,EAAiB,OAAjB,YAAAD,EAAuB,UAAW,qBAC9C,EACJ,EAAE,QAAQ,IAAM,CACjBvB,EAAO,sBAAuB,CAAC,QAAS,8BAA+B,QAAS,GAAM,EACzF,CACL,EAKA,MAAM,cAAc,CAAC,OAAAA,GAASR,EAAM,CAChC,MAAM6B,EAAe,MAAMlB,EAAkBH,EAAQ,sBAAuB,gBAAiB,IAAMsB,EAAM,KAAK,gBAAgB9B,EAAK,IAAI,UAAWA,CAAI,CAAC,EAChJ,OAAAQ,EAAAu2C,GAAmCl1C,EAAa,OAAO,EACvDA,CACX,EAKA,MAAM,gBAAgB,CAAC,OAAArB,GAASo5C,EAAwB,CACpD,MAAM/3C,EAAe,MAAMlB,EAAkBH,EAAQ,sBAAuB,kBAAmB,IAAMsB,EAAM,OAAO,kBAAkB83C,CAAc,EAAE,CAAC,EAErJp5C,EAAO,wCAAyC,CAC5C,QAASqB,EAAa,QACtB,UAAW,aACd,EACQ/C,EAAA,MAAM,4BAA6B+C,EAAa,OAAO,CACpE,EAEA,wBAAwB,CAAC,OAAArB,CAAM,EAAGR,EAAM,CACpCQ,EAAO,sBAAuB,CAAC,QAAS,0BAA2B,QAAS,GAAK,EACjFA,EAAO,2BAA2B,EAE5BsB,EAAA,IAAI,gBAAgB9B,EAAK,IAAI,8BAA8BA,EAAK,YAAY,GAAIA,CAAI,EAAE,KAAiBI,GAAA,CACzGI,EAAO,8BAA+B4J,MAAIhK,EAAU,cAAc,CAAC,EACnEtB,EAAS,MAAM,oCAAoC,EACtD,EAAE,MAAegC,GAAA,SACdmB,EAAK,MAAM,CACP,UAASF,GAAAC,EAAAlB,GAAA,YAAAA,EAAO,WAAP,YAAAkB,EAAiB,OAAjB,YAAAD,EAAuB,UAAW,qBAC9C,EACJ,EAAE,QAAQ,IAAM,CACbvB,EAAO,sBAAuB,CAAC,QAAS,0BAA2B,QAAS,GAAM,EACrF,CACL,EAEA,mCAAmC,CAAC,OAAAA,CAAM,EAAGR,EAAM,CAC/CQ,EAAO,sBAAuB,CAAC,QAAS,0BAA2B,QAAS,GAAK,EACjFA,EAAO,2BAA2B,EAE5BsB,EAAA,OAAO,gBAAgB9B,EAAK,IAAI,eAAeA,EAAK,YAAY,GAAIA,CAAI,EACzE,KAAiBI,GAAA,CACdI,EAAO,8BAA+B4J,MAAIhK,EAAU,cAAc,CAAC,EACnEtB,EAAS,MAAM,oCAAoC,EACtD,EAAE,MAAegC,GAAA,SAClBmB,EAAK,MAAM,CACP,UAASF,GAAAC,EAAAlB,GAAA,YAAAA,EAAO,WAAP,YAAAkB,EAAiB,OAAjB,YAAAD,EAAuB,UAAW,qBAC9C,EACJ,EAAE,QAAQ,IAAM,CACbvB,EAAO,sBAAuB,CAAC,QAAS,0BAA2B,QAAS,GAAM,EACrF,CACL,EAEA,cAAc,CAAC,OAAAA,EAAQ,MAAAO,GAAQf,EAA4B,CACvDQ,EAAO,sBAAuB,CAAC,QAAS,gBAAiB,QAAS,GAAK,EACvEA,EAAO,2BAA2B,EAE5BsB,EAAA,KAAK,gBAAgB9B,EAAK,IAAI,UAAWA,CAAI,EAC9C,KAAiBI,GAAA,CACVgK,EAAA,IAAIhK,EAAU,cAAc,GAC5B6B,EAAK,QAAQ,CACT,QAAS,gCACZ,EACGmI,EAAA,IAAIhK,EAAU,cAAc,GAC5BI,EAAO,8BAA+B4J,MAAIhK,EAAU,cAAc,CAAC,GAGvEW,EAAM,YAAY,OAAO,IAAI,CAAC,oBAAoB,CAAC,CACvD,CACH,EAAE,MAAeD,GAAA,SAClBmB,EAAK,MAAM,CACP,UAASF,GAAAC,EAAAlB,GAAA,YAAAA,EAAO,WAAP,YAAAkB,EAAiB,OAAjB,YAAAD,EAAuB,UAAW,qBAC9C,EACJ,EAAE,QAAQ,IAAM,CACbvB,EAAO,sBAAuB,CAAC,QAAS,gBAAiB,QAAS,GAAM,EAC3E,CACL,EAGA,qBAAqB,CAAC,OAAAA,CAAM,EAAGR,EAAM,CACjCQ,EAAO,sBAAuB,CAAC,QAAS,gBAAiB,QAAS,GAAK,EAEvEsB,EAAM,KAAK,2BAA4B9B,CAAI,EACtC,KAAiBI,GAAA,CACdtB,EAAS,MAAM,iCAAkCsL,EAAI,IAAAhK,EAAU,cAAc,CAAC,EACjF,EAAE,MAAeU,GAAA,SAClBmB,EAAK,MAAM,CACP,UAASF,GAAAC,EAAAlB,GAAA,YAAAA,EAAO,WAAP,YAAAkB,EAAiB,OAAjB,YAAAD,EAAuB,UAAW,qBAC9C,EACJ,EAAE,QAAQ,IAAM,CACbvB,EAAO,sBAAuB,CAAC,QAAS,gBAAiB,QAAS,GAAM,EAC3E,CACL,EAEA,aAAa,CAAC,OAAAA,CAAM,EAAGgoC,EAAM,CACzBhoC,EAAO,sBAAuB,CAAC,QAAS,eAAgB,QAAS,GAAK,EACtEA,EAAO,2BAA2B,EAElCsB,EAAM,KAAK,eAAewxC,GAAe,eAAgB,cAAa9K,EAAK,IAAI,UAAW,CAAC,KAAAA,CAAK,GAAE,KAAiBpoC,GAAA,CAC3GgK,EAAA,IAAIhK,EAAU,cAAc,IAC5BI,EAAO,0BAA2B4J,EAAI,IAAAhK,EAAU,WAAW,EAAG,EAAE,EAChEtB,EAAS,MAAM,wBAAwB,EAC3C,CACH,EAAE,MAAegC,GAAA,SACdmB,EAAK,MAAM,CACP,UAASF,GAAAC,EAAAlB,GAAA,YAAAA,EAAO,WAAP,YAAAkB,EAAiB,OAAjB,YAAAD,EAAuB,UAAW,qBAC9C,EACJ,EAAE,QAAQ,IAAM,CACbvB,EAAO,sBAAuB,CAAC,QAAS,eAAgB,QAAS,GAAM,EAC1E,CACL,EACA,cAAc,CAAC,OAAAA,CAAM,EAAGgoC,EAAiB,CACrChoC,EAAO,sBAAuB,CAAC,QAAS,iBAAkB,QAAS,GAAK,EAExEsB,EAAM,IAAI,eAAewxC,GAAe,gBAAgB,UAAU9K,EAAK,IAAI,GAAIA,CAAI,EAAE,KAAiBpoC,GAAA,CAC9FgK,EAAA,IAAIhK,EAAU,cAAc,GAC5BI,EAAO,2BAA4B4J,EAAI,IAAAhK,EAAU,WAAW,EAAG,EAAE,CACrE,CACH,EAAE,MAAeU,GAAA,SACdmB,EAAK,MAAM,CACP,UAASF,GAAAC,EAAAlB,GAAA,YAAAA,EAAO,WAAP,YAAAkB,EAAiB,OAAjB,YAAAD,EAAuB,UAAW,qBAC9C,EACJ,EAAE,QAAQ,IAAM,CACbvB,EAAO,sBAAuB,CAAC,QAAS,iBAAkB,QAAS,GAAM,EAC5E,CACL,EACA,oBAAoB,CAAC,OAAAA,CAAM,EAAGgoC,EAAc,CACxChoC,EAAO,sBAAuB,CAAC,QAAS,kBAAmB,QAAS,GAAK,EACzEA,EAAO,2BAA2B,EAE5BsB,EAAA,OAAO,eAAewxC,GAAe,eAAe,CAAC,UAAU9K,CAAI,EAAE,EAAE,KAAiBpoC,GAAA,CACtFgK,EAAA,IAAIhK,EAAU,cAAc,IAC5BtB,EAAS,MAAM,2BAA2B,EAC1C0B,EAAO,2BAA4BgoC,CAAI,EAC3C,CACH,EAAE,MAAe1nC,GAAA,SACdmB,EAAK,MAAM,CACP,UAASF,GAAAC,EAAAlB,GAAA,YAAAA,EAAO,WAAP,YAAAkB,EAAiB,OAAjB,YAAAD,EAAuB,UAAW,qBAC9C,EACJ,EAAE,QAAQ,IAAM,CACbvB,EAAO,sBAAuB,CAAC,QAAS,kBAAmB,QAAS,GAAM,EAC7E,CACL,EAEA,qBAAqB,CAAC,OAAAA,CAAM,EAAG+4C,EAAc,CACzC/4C,EAAO,sBAAuB,CAAC,QAAS,kBAAmB,QAAS,GAAK,EACzEA,EAAO,2BAA2B,EAE5BsB,EAAA,IAAI,eAAgB,CAAC,OAAQ,CAAC,KAAAy3C,GAAM,EACrC,KAAiBn5C,GAAA,CACdI,EAAO,uBAAwB4J,EAAI,IAAAhK,EAAU,eAAe,EAAG,EAAE,EACpE,EAAE,MAAeU,GAAA,SAClBmB,EAAK,MAAM,CACP,UAASF,GAAAC,EAAAlB,GAAA,YAAAA,EAAO,WAAP,YAAAkB,EAAiB,OAAjB,YAAAD,EAAuB,UAAW,qBAC9C,EACJ,EAAE,QAAQ,IAAM,CACbvB,EAAO,sBAAuB,CAAC,QAAS,kBAAmB,QAAS,GAAM,EAC7E,CACL,EAEA,oBAAoB,CAAC,OAAAA,CAAM,EAAGR,EAAM,CAChCQ,EAAO,sBAAuB,CAAC,QAAS,gBAAiB,QAAS,GAAK,EACvEA,EAAO,2BAA2B,EAE5BsB,EAAA,IAAI,gBAAgB9B,EAAK,IAAI,UAAWA,CAAI,EAC7C,KAAiBI,GAAA,CACdI,EAAO,qCAAsC4J,MAAIhK,EAAU,qBAAqB,CAAC,EACjFtB,EAAS,MAAM,gCAAiCsL,EAAI,IAAAhK,EAAU,cAAc,CAAC,EAC7E6B,EAAK,QAAQ,CACT,QAAS,sCACZ,EACJ,EAAE,MAAenB,GAAA,SAClBmB,EAAK,MAAM,CACP,UAASF,GAAAC,EAAAlB,GAAA,YAAAA,EAAO,WAAP,YAAAkB,EAAiB,OAAjB,YAAAD,EAAuB,UAAW,qBAC9C,EACJ,EAAE,QAAQ,IAAM,CACbvB,EAAO,sBAAuB,CAAC,QAAS,gBAAiB,QAAS,GAAM,EAC3E,CACL,EASA,2BAA2B,CAAC,OAAAA,EAAQ,MAAAO,GAAQf,EAAM,CAC9CQ,EAAO,sBAAuB,CAAC,QAAS,gBAAiB,QAAS,GAAK,EACvEA,EAAO,2BAA2B,EAE5BsB,EAAA,IAAI,gBAAgB9B,EAAK,IAAI,kBAAmBA,CAAI,EAAE,KAAiBI,GAAA,CACzEI,EAAO,8BAA+B4J,EAAI,IAAAhK,EAAU,cAAc,EAAG,EAAE,EACvEtB,EAAS,MAAM,wCAAyCsL,EAAI,IAAAhK,EAAU,cAAc,CAAC,EACrF6B,EAAK,QAAQ,CACT,QAAS,kDACZ,EACJ,EAAE,MAAenB,GAAA,aACdmB,EAAK,MAAM,CACP,UAASF,GAAAC,EAAAlB,GAAA,YAAAA,EAAO,WAAP,YAAAkB,EAAiB,OAAjB,YAAAD,EAAuB,UAAW,qBAC9C,EACDhB,EAAM,YAAY,OAAO,MAAI0kB,GAAA3V,EAAAhP,GAAA,YAAAA,EAAO,WAAP,YAAAgP,EAAiB,OAAjB,YAAA2V,EAAuB,SAAU,EAAE,EACnE,EAAE,QAAQ,IAAM,CACbjlB,EAAO,sBAAuB,CAAC,QAAS,gBAAiB,QAAS,GAAM,EAC3E,CACL,EAQA,gBAAgB,CAAC,OAAAA,CAAM,EAAGgN,EAAc,CACpChN,EAAO,sBAAuB,CAAC,QAAS,gBAAiB,QAAS,GAAK,EAEvEsB,EAAM,OAAO,kBAAkB0L,CAAI,EAAE,EAChC,KAAK,IAAM,CACR1O,EAAS,MAAM,2BAA2B,EAC7C,EAAE,MAAM,IAAM,EAClB,EAAE,QAAQ,IAAM,CACb0B,EAAO,sBAAuB,CAAC,QAAS,gBAAiB,QAAS,GAAM,EAC3E,CACL,EAEA,iBAAiB,CAAC,OAAAA,CAAM,EAAG0zC,EAAiB,CACxC1zC,EAAO,sBAAuB,CAAC,QAAS,mBAAoB,QAAS,GAAK,EAE1EsB,EAAM,KAAK,yBAA0BoyC,CAAK,EACrC,KAAK,IAAM,CACRp1C,EAAS,MAAM,4BAA4B,EAC9C,EAAE,MAAM,IAAM,EAClB,EAAE,QAAQ,IAAM,CACb0B,EAAO,sBAAuB,CAAC,QAAS,mBAAoB,QAAS,GAAM,EAC9E,CACL,EASA,gBAAgB,CAAC,OAAAA,CAAM,EAAGmjC,EAAM,CAC5BnjC,EAAO,sBAAuB,CAAC,QAAS,kBAAmB,QAAS,GAAK,EAEnEsB,EAAA,IAAI,kBAAkB6hC,EAAK,IAAI,GAAIA,CAAI,EACxC,KAAiBvjC,GAAA,CACdtB,EAAS,MAAM,4BAA6BsL,EAAI,IAAAhK,EAAU,YAAY,CAAC,EAC1E,EAAE,MAAM,IAAM,EAClB,EAAE,QAAQ,IAAM,CACbI,EAAO,sBAAuB,CAAC,QAAS,kBAAmB,QAAS,GAAM,EAC7E,CACL,EAEA,MAAM,wBAAwB,CAAC,OAAAA,GAASR,EAA8B,SAClEQ,EAAO,2BAA2B,EAE9B,IACA,MAAMqB,EAAe,MAAMlB,EAAkBH,EAAQ,sBAAuB,0BAA2B,IAAMsB,EAAM,KAAK,gBAAgB9B,EAAK,IAAI,gBAAiBA,CAAI,CAAC,EACvKlB,EAAS,MAAM,6BAA6B,EACrC0B,EAAA,8BAA+BqB,EAAa,OAAO,QACrDf,EAAO,CACZN,EAAO,2BAA0BuB,GAAAC,EAAAlB,EAAM,WAAN,YAAAkB,EAAgB,OAAhB,YAAAD,EAAsB,UAAW,oBAAoB,EACtF,QAAQ,MAAMjB,CAAK,EAE3B,EAEA,6BAA6B,CAAC,OAAAN,EAAQ,MAAAO,GAAQf,EAAM,CAChDQ,EAAO,sBAAuB,CAAC,QAAS,+BAAgC,QAAS,GAAK,EACtFA,EAAO,2BAA2B,EAE5BsB,EAAA,KAAK,gBAAgB9B,EAAK,QAAQ,IAAI,uBAAwBA,CAAI,EAAE,KAAiBI,GAAA,OACvFtB,EAAS,MAAM,6BAA6B,EAC5C0B,EAAOu2C,IAAmC/0C,EAAA5B,GAAA,YAAAA,EAAU,OAAV,YAAA4B,EAAgB,OAAO,EACpE,EAAE,MAAWuC,GAAA,CACVxD,EAAM,YAAY,OAAO,IAAIqJ,MAAI7F,EAAG,uBAAwB,EAAE,CAAC,EAClE,EAAE,QAAQ,IAAM,CACb/D,EAAO,sBAAuB,CAAC,QAAS,+BAAgC,QAAS,GAAM,EAC1F,CACL,EAEA,wBAAwB,CAAC,OAAAA,CAAM,EAAG+4C,EAAc,CAC5C/4C,EAAO,sBAAuB,CAAC,QAAS,kBAAmB,QAAS,GAAK,EAEzEsB,EAAM,KAAK,gBAAgBy3C,CAAI,4BAA4B,EACtD,KAAK,IAAM,CACRt3C,EAAK,QAAQ,CACT,QAAS,qCACZ,EACJ,EAAE,MAAWsC,GAAA,CACd,IAAI5E,EAAUyK,EAAA,IAAI7F,EAAG,wBAAyB,oBAAoB,EAE9D6F,EAAA,IAAI7F,EAAG,8BAA8B,IACrC5E,EAAU,GAAGA,CAAO,cAAcyK,EAAI,IAAA7F,EAAG,8BAA8B,CAAC,YAG5EtC,EAAK,MAAM,CACP,QAAAtC,CAAA,CACH,EACJ,EAAE,QAAQ,IAAM,CACba,EAAO,sBAAuB,CAAC,QAAS,kBAAmB,QAAS,GAAM,EAC7E,CACL,EAQA,6BAA6B,CAAC,OAAAA,CAAM,EAAG+4C,EAAc,CACjD/4C,EAAO,sBAAuB,CAAC,QAAS,sBAAuB,QAAS,GAAK,EAE7EsB,EAAM,IAAI,gBAAgBy3C,CAAI,oBAAoB,EAC7C,KAAiBn5C,GAAA,CACdI,EAAO,gCAAiC4J,EAAI,IAAAhK,EAAU,cAAe,CAAE,EAAC,EAC3E,EAAE,MAAM,IAAM,EAClB,EAAE,QAAQ,IAAM,CACbI,EAAO,sBAAuB,CAAC,QAAS,sBAAuB,QAAS,GAAM,EACjF,CACL,EAQA,mCAAmC,CAAC,OAAAA,CAAM,EAAG+4C,EAAc,CACvD/4C,EAAO,sBAAuB,CAAC,QAAS,wBAAyB,QAAS,GAAK,EAE/EsB,EAAM,OAAO,gBAAgBy3C,CAAI,gBAAgB,EAC5C,KAAK,IAAM,CACRz6C,EAAS,MAAM,0CAA0C,EAC5D,EAAE,MAAM,IAAM,EAClB,EAAE,QAAQ,IAAM,CACb0B,EAAO,sBAAuB,CAAC,QAAS,wBAAyB,QAAS,GAAM,EACnF,EAET,EAEew2C,GAAA,CACX,WAAY,SACZj2C,GAAA,QACAkW,GAAA,QACArV,GACAZ,YACJ,EC17CMD,GAAsB,CACxB,KAAM,GAEN,QAAS,CACL,MAAO,GACP,OAAQ,GACR,OAAQ,GACR,aAAc,GACd,iBAAkB,EACtB,EAEA,YAAa,CACT,MAAO,GACP,SAAU,EACd,EAEA,YAAa,CAAC,EACd,SAAU,EACd,EAEMkW,GAAU,CACZ,KAAOlW,GAAwBA,EAAM,KACrC,QAAUA,GAAwBA,EAAM,QACxC,YAAcA,GAAwBA,EAAM,YAC5C,YAAcA,GAAwBA,EAAM,YAC5C,SAAWA,GAAwBA,EAAM,QAC7C,EAEMC,GAAY,CACd,CAAC64C,EAAsB,EAAE94C,EAAqB+4C,EAAe,CACzD/4C,EAAM,KAAO+4C,CACjB,EACA,CAACC,EAAyB,EAAEh5C,EAAqBG,EAAgD,CAC7FH,EAAM,QAAQG,EAAQ,OAAO,EAAIA,EAAQ,OAC7C,EACA,CAAC84C,EAA6B,EAAEj5C,EAAqBg3B,EAA2B,CAC5Eh3B,EAAM,YAAcg3B,CAAA,CAE5B,EAEMn2B,GAAU,CAMZ,MAAM,cAAc,CAAC,OAAApB,GAASy5C,EAAqB,CAC3C,IACA,MAAMp4C,EAAe,MAAMlB,EAAkBH,EAAQ,sBAAuB,WAAY,IAAMsB,EAAM,IAAI,2BAA2Bm4C,EAAQ,IAAI,WAAW,CAAC,EAElJn7C,EAAA,MAAM,iCAAkC+C,CAAY,EAC7DrB,EAAO,0BAA2B,CAACqB,EAAa,OAAO,CAAC,QACnDf,EAAO,CACZ,QAAQ,MAAMA,CAAK,EAE3B,EAMA,MAAM,YAAY,CAAC,OAAAN,GAASy5C,EAAqB,CACzC,IACM,MAAAt5C,EAAkBH,EAAQ,sBAAuB,WAAY,IAAMsB,EAAM,IAAI,2BAA2Bm4C,EAAQ,IAAI,WAAW,CAAC,QACjIn5C,EAAO,CACZ,QAAQ,MAAMA,CAAK,EAE3B,EAMA,MAAM,gBAAgB,CAAC,OAAAN,GAAS05C,EAAS,CACjC,IACA,MAAMr4C,EAAe,MAAMlB,EAAkBH,EAAQ,sBAAuB,eAAgB,IAAMsB,EAAM,IAAI,2BAA2Bo4C,EAAQ,YAAY,aAAaA,EAAQ,IAAI,EAAE,CAAC,EAE9Kp7C,EAAA,MAAM,+BAAgC+C,EAAa,KAAK,QAC5Df,EAAO,CACZ,QAAQ,MAAMA,CAAK,EAE3B,EAEA,MAAM,gBAAgB,CAAC,OAAAN,GAASR,EAAM,CAC9B,IACA,MAAM6B,EAAe,MAAMlB,EAAkBH,EAAQ,sBAAuB,eAAgB,IAAMsB,EAAM,IAAI,2BAA2B9B,EAAK,QAAQ,YAAY,UAAUA,EAAK,QAAQ,IAAI,EAAE,CAAC,EACrLlB,EAAA,MAAM,wBAAyB+C,EAAa,KAAK,QACrDf,EAAO,CACZ,QAAQ,MAAMA,CAAK,EAE3B,EAMA,MAAM,aAAa,CAAC,OAAAN,GAASy5C,EAAqB,SAC1C,IACM,MAAAE,EAAYp5C,GAAM,YAAY,UAAWq5C,GAAMH,EAAQ,OAASG,EAAE,IAAI,EAEtEr5C,GAAA,YAAYo5C,CAAS,EAAE,QAAU,GAEvC,MAAMt4C,EAAe,MAAMlB,EAAkBH,EAAQ,sBAAuB,eAAgB,IAAMsB,EAAM,IAAI,2BAA2Bm4C,EAAQ,IAAI,SAAS,CAAC,EACvJl5C,GAAA,YAAYo5C,CAAS,EAAE,UAAY,GACzCr7C,EAAS,MAAM,wBAAwB,EACvC0B,EAAO,4BAA2BuB,GAAAC,EAAAH,GAAA,YAAAA,EAAc,UAAd,YAAAG,EAAuB,cAAvB,YAAAD,EAAoC,UAAW,EAAE,EAE7EhB,GAAA,YAAYo5C,CAAS,EAAE,QAAU,SAClCr5C,EAAO,CACZ,QAAQ,MAAMA,CAAK,EAE3B,EAMA,MAAM,iBAAiB,CAAC,OAAAN,GAASy5C,EAAqB,SAClD,MAAMp4C,EAAe,MAAMlB,EAAkBH,EAAQ,sBAAuB,mBAAoB,IAAMsB,EAAM,OAAO,2BAA2Bm4C,EAAQ,IAAI,EAAE,CAAC,EAC7Jn7C,EAAS,MAAM,gBAAiB,CAC5B,KAAM,UACN,QAAS,0CACZ,EACD0B,EAAOw5C,KAA+Bj4C,GAAAC,EAAAH,GAAA,YAAAA,EAAc,UAAd,YAAAG,EAAuB,cAAvB,YAAAD,EAAoC,UAAW,EAAE,EAG/F,EAGek4C,GAAA,CACX,WAAY,SACZl5C,GAAA,UACAC,GAAA,QACAY,GACAqV,UACJ,EChJMlW,GAAwB,CAC1B,QAAS,CACL,UAAW,GACX,UAAW,GAEnB,EAEMkW,GAAU,CACZ,QAAUlW,GAA0BA,EAAM,OAC9C,EAEMC,GAAY,CACd,CAACq5C,EAA2B,EAAEt5C,EAAuBG,EAAgD,CACjGH,EAAM,QAAQG,EAAQ,OAAO,EAAIA,EAAQ,QAEjD,EAEMU,GAAU,CAEZ,qBAAqB,CAAE,OAAApB,GAAU,CAC7BA,EAAO,wBAAyB,CAAC,QAAS,YAAa,QAAS,GAAK,EAErEsB,EAAM,IAAI,mBAAmB,EACxB,KAAM1B,GAAa,CACPtB,EAAA,MAAM,qCAAsCsB,EAAS,IAAI,EACrE,EAAE,MAAOmE,GAAM,CACPzF,EAAA,MAAM,mCAAoCyF,EAAE,QAAQ,EAChE,EAAE,QAAQ,IAAM,CACb/D,EAAO,wBAAyB,CAAC,QAAS,YAAa,QAAS,GAAM,EACzE,CACL,EAEA,kBAAkB,CAAE,OAAAA,CAAO,EAAGR,EAAM,CAChCQ,EAAO,wBAAyB,CAAC,QAAS,YAAa,QAAS,GAAK,EAErEsB,EAAM,KAAK,yBAA0B9B,CAAI,EACxC,KAAMI,GAAa,CACPtB,EAAA,MAAM,qCAAsCsB,EAAS,IAAI,EACrE,EAAE,MAAOmE,GAAM,CACHzF,EAAA,MAAM,mCAAoCyF,EAAE,QAAQ,EAChE,EAAE,QAAQ,IAAM,CACb/D,EAAO,wBAAyB,CAAC,QAAS,YAAa,QAAS,GAAM,EACzE,CACL,EAEA,sBAAuB,CACnBsB,EAAM,IAAI,gBAAgB,EACzB,KAAM1B,GAAa,CACPtB,EAAA,MAAM,0BAA2BsB,EAAS,IAAI,EAC1D,EAAE,MAAM,IAAM,EACd,EAAE,QAAQ,IAAM,EAChB,CACL,EACA,aAAc,CACV0B,EAAM,KAAK,2BAA2B,EACrC,KAAM1B,GAAa,CACPtB,EAAA,MAAM,iCAAkCsB,EAAS,IAAI,EACjE,EAAE,MAAM,IAAM,EACd,EAAE,QAAQ,IAAM,EAChB,EAET,EAEek6C,GAAA,CACX,WAAY,SACZv5C,GAAA,UACAC,GAAA,QACAY,GACAqV,UACJ,EC5EMsjC,GAAuB,UAEvBC,GAA2B,CAK/B,gBAAgBhtC,EAAoB,CACrB,qBAAQ+sC,GAAc/sC,CAAI,CACzC,EAKA,gBAAgC,CACvB,oBAAa,QAAQ+sC,EAAY,CAC1C,EAKA,uBAAuB1rC,EAA4C,CAC/D,MAAMvK,EAAQ,CAAC,GAAGuK,EAAM,KAAK,EAC/B,OAAOvK,EAAM,GACNyK,GAAA,QAAQ,CAAE,MAAAzK,EAAO,CAC1B,EAKA,mBAA0B,CACxB,aAAa,WAAWi2C,EAAY,EAExC,ECrBMx5C,GAAmB,CACrB,QAAS,CACL,KAAM,GACN,UAAW,EACf,EACA,KAAM,CACF,OAAQ,GACR,KAAMkM,GAAY,YAAY,EAC9B,KAAM,KACN,WAAY,KACZ,SAAU,KACV,KAAM,KACN,aAAc,KACd,sBAAuB,KACvB,aAAc,GACd,SAAU,EACV,gBAAiB,KACjB,UAAW,KACX,WAAY,GACZ,QAAS,KACT,YAAa,KACb,MAAO,KACP,IAAK,KACL,UAAW,KACX,WAAY,GACZ,YAAa,KAErB,EAEMgK,GAAU,CACZ,QAAUlW,GAAqBA,EAAM,QACrC,KAAOA,GAAqBA,EAAM,IACtC,EAEMC,GAAY,CACd,CAACy5C,EAAsB,EAAE15C,EAAkBG,EAAgD,CACvFH,EAAM,QAAQG,EAAQ,OAAO,EAAIA,EAAQ,OAC7C,EACA,CAACw5C,EAAmB,EAAE35C,EAAkBq1C,EAAc,CAClDr1C,EAAM,KAAK,KAAOq1C,CACtB,EACA,CAACuE,EAAc,EAAE55C,EAAkB65C,EAAY,CACnC,YAAI,WAAYA,CAAI,EAChB3tC,GAAA,aAAa2tC,EAAK,IAAI,EAClC75C,EAAM,KAAO65C,EACb75C,EAAM,KAAK,OAAS,GAE5B,EAEMa,GAAU,CAKZ,MAAM,WAAW,CAAC,OAAApB,GAASiN,EAAe,GAAI,CACpC,MAAArL,EAAS,IAAI,gBAIby4C,EAAcL,GAAyB,eAAe,EAM5D,GALIK,IACAptC,EAAQ,GAAKotC,GAIb,CAACz4C,EAAO,IAAI,cAAc,EAOtB,GANJ,QAAQ,IAAI,iBAAiB,EAGZ,OAAO,SAAS,SAGpB,SAAS,cAAc,EAAG,CACnC,MAAM04C,EAAY,OAAO,SAAS,SAAS,MAAM,GAAG,EAAE,CAAC,EACvD,QAAQ,IAAIA,CAAS,EACd14C,EAAA,OAAO,eAAgB04C,CAAS,OAGvC14C,EAAO,OAAO,wBAAyB,OAAO,SAAS,QAAQ,EAInE,IACA,MAAMP,EAAe,MAAMlB,EAAkBH,EAAQ,mBAAoB,aAAc,IAAMsB,EAAM,KAAK,YAAYM,EAAO,WAAa,IAAIA,CAAM,GAAK,EAAE,GAAIqL,CAAO,CAAC,EAC9J,OAAAjN,EAAA,WAAYqB,EAAa,IAAI,EAE7BA,OACC,EAEhB,EAMA,MAAM,UAAU,CAAC,OAAArB,GAASs2C,EAAgB,OAClC,IACA,MAAMj1C,EAAe,MAAMlB,EAAkBH,EAAQ,mBAAoB,YAAa,IAAMsB,EAAM,IAAI,aAAag1C,CAAM,EAAE,CAAC,EACrH,OAAAt2C,EAAAm6C,GAAgB94C,EAAa,IAAI,EACjCA,EAAa,WACf0C,EAAG,GACJvC,EAAAuC,GAAA,YAAAA,EAAG,WAAH,YAAAvC,EAAa,UAAW,MACxBiL,GAAY,eAAe,EAC3B,OAAO,SAAS,OAAO,EAC3B,CAER,EAKA,MAAM,WAAW,CAAC,MAAAlM,EAAO,OAAAP,GAAS,OACxB,MAAAs2C,GAAS/1C,IAAM,OAANA,cAAY,KAEvB,UAAO+1C,GAAW,SACd,IACA,MAAMj1C,EAAe,MAAMlB,EAAkBH,EAAQ,mBAAoB,aAAc,IAAMsB,EAAM,IAAI,aAAag1C,CAAM,GAAI/1C,EAAM,IAAI,CAAC,EAClIP,EAAA,WAAYqB,EAAa,IAAI,QAC/B0C,EAAG,CACJA,EAAE,SAAS,SAAW,MACtB0I,GAAY,eAAe,EAC3B,OAAO,SAAS,OAAO,EAC3B,CAGZ,EAMA,MAAM,UAAU,CAAC,MAAAlM,EAAO,OAAAP,CAAA,EAASqQ,EAAuC,OAC9D,MAAAimC,GAAS/1C,IAAM,OAANA,cAAY,KAMvB,GAJJ,QAAQ,IAAI,WAAW,EACvB,QAAQ,IAAI+1C,CAAM,EAClB,QAAQ,IAAIjmC,CAAK,EAEb,OAAOimC,GAAW,SAAU,CAC5B,MAAMtlC,EAAQnO,GAAMwN,EAAM,KAAK,EAAE,OAAO,qBAAqB,EACvDY,EAAMpO,GAAMwN,EAAM,GAAG,EAAE,OAAO,qBAAqB,EAErD,IACM,MAAAhP,EAAe,MAAMlB,EAAkBH,EAAQ,mBAAoB,YAAa,IAAMsB,EAAM,KAAK,aAAag1C,CAAM,cAAe,CACrI,MAAAtlC,EACA,IAAAC,CAAA,CACH,CAAC,EACK,OAAAjR,EAAAm6C,GAAgB94C,EAAa,IAAI,EAEjCA,EAAa,WACf0C,EAAG,CACJ,MAAAA,EAAE,SAAS,SAAW,MACtB0I,GAAY,eAAe,EAC3B,OAAO,SAAS,OAAO,GAErB1I,CAAA,CACV,CAER,EAKA,MAAM,OAAO,CAAC,OAAA/D,GAASR,EAAO,GAAI,CAC1B,IACM,MAAAW,EAAkBH,EAAQ,mBAAoB,SAAU,IAAMsB,EAAM,KAAK,aAAc9B,CAAI,CAAC,OAC1F,EACZ,CAER,EAEe46C,GAAA,CACX,WAAY,SACZ75C,GAAA,UACAC,GAAA,QACAY,GACAqV,UACJ,ECjKMlW,GAAuB,CACzB,QAAS,CACL,SAAU,GACV,kBAAmB,GACnB,cAAe,GACf,qBAAsB,EAC1B,EACA,KAAM,CACF,KAAMkM,GAAY,YAAY,EAC9B,KAAM,KACN,WAAY,KACZ,SAAU,IACd,EAEA,OAAQ,KAER,aAAc,IAAIlN,GAClB,gCAAiC,KACjC,cAAe,CACX,KAAM,GACN,MAAO,CACH,MAAO,KACP,IAAK,IACT,EACA,MAAO,CACH,QAAS,EACT,OAAQ,EACR,eAAgB,EAChB,SAAU,EACV,MAAO,EACP,SAAU,EACV,SAAU,EACV,WAAY,EACZ,SAAU,EACV,sBAAuB,EACvB,qBAAsB,CAC1B,EACA,UAAW,CACP,WAAY,GACZ,OAAQ,EACR,MAAO,EACP,KAAM,KACN,OAAQ,KACR,KAAM,KACN,uBAAwB,KACxB,uBAAwB,KACxB,sBAAuB,IAC3B,EACA,SAAU,CACN,QAAS,EACT,MAAO,EACP,KAAM,EACN,MAAO,EACP,OAAQ,EACR,MAAO,EACP,MAAO,CACX,EACA,UAAW,CACP,CACI,UAAW,GACX,UAAW,GACX,SAAU,GACV,MAAO,GACP,MAAO,GACP,IAAK,GACL,IAAK,GACL,aAAc,GACd,aAAc,GACd,aAAc,GACd,oBAAqB,GACrB,SAAU,GAElB,EACA,OAAQ,CAAC,EACT,SAAU,CAAC,EACX,eAAgB,CAAC,EACjB,iBAAkB,CAAC,EACnB,SAAU,CAAC,EACX,iBAAkB,KAClB,aAAc,CAAC,EACf,OAAQkN,GAAY,YAAY,CACpC,EAGA,YAAa,GACb,aAAc,CACV,UAAW,GACX,QAAS,GACT,QAAS,GACT,QAAS,GACT,QAAS,GACT,qBAAsB,GACtB,uBAAwB,GACxB,KAAM,GACN,UAAW,GACX,UAAW,EACf,EACA,OAAQ,CACJ,KAAM,GACN,OAAQ,EACR,OAAQ,GACR,KAAM,GACN,MAAO,EAEf,EAEMgK,GAAU,CACZ,QAAUlW,GAAyBA,EAAM,QACzC,OAASA,GAAyBA,EAAM,OACxC,aAAeA,GAAyBA,EAAM,aAC9C,aAAeA,GAAyBA,EAAM,aAC9C,gCAAkCA,GAAyBA,EAAM,gCACjE,oBAAsBA,GAAyBA,EAAM,YACrD,cAAgBA,GAAyBA,EAAM,aACnD,EAEMC,GAAY,CACd,CAAC+5C,EAA0B,EAAEh6C,EAAsBG,EAAgD,CAC/FH,EAAM,QAAQG,EAAQ,OAAO,EAAIA,EAAQ,OAC7C,EACA,CAAC85C,EAAgC,EAAEj6C,EAAsBk1C,EAAuC,CACxFA,GAAe,KACfl1C,EAAM,aAAa,OAAO,MAAM,EAEhCA,EAAM,aAAa,OAAO,MAAMk1C,CAAU,CAElD,EACA,CAACgF,EAA2B,EAAEl6C,EAAsBm6C,EAAQ,CACxDn6C,EAAM,OAASm6C,EAYfn6C,EAAM,cAAc,UAAY,CAC5B,WAAY,GACZ,KAAMqJ,MAAI8wC,EAAQ,MAAM,EACxB,OAAQ9wC,MAAI8wC,EAAQ,QAAQ,EAC5B,OAAQ9wC,MAAI8wC,EAAQ,QAAQ,EAC5B,KAAM9wC,MAAI8wC,EAAQ,MAAM,EACxB,uBAAwB,KACxB,uBAAwB,KACxB,sBAAuB,IAC3B,CACJ,EACA,CAACC,EAA6B,EAAEp6C,EAAsB,CAClDA,EAAM,aAAa,OAAO,MAAM,QAAQ,EACxCA,EAAM,cAAc,UAAY,CAC5B,WAAY,GACZ,KAAM,GACN,OAAQ,EACR,OAAQ,GACR,KAAM,GACN,MAAO,EACP,uBAAwB,KACxB,uBAAwB,KACxB,sBAAuB,IAC3B,CACJ,EACA,CAACq6C,EAAwB,EAAEr6C,EAAsBs6C,EAAU,CACvDt6C,EAAM,cAAc,SAAWs6C,CACnC,EACA,CAACC,EAA8B,EAAEv6C,EAAsBw6C,EAAsB,CACzE,QAAQ,IAAI,0BAA0B,EACtCx6C,EAAM,YAAcw6C,CACxB,EACA,CAACC,EAAyB,EAAEz6C,EAAsB06C,EAAQ,CACtD16C,EAAM,OAAS06C,CACnB,EACA,CAACC,EAA+B,EAAE36C,EAAsB46C,EAAc,CAClE56C,EAAM,aAAe46C,CACzB,EACA,CAACC,EAAwC,EAAE76C,EAAsBq1C,EAAM,CACnE,QAAQ,IAAI,oCAAoC,EAChDr1C,EAAM,cAAc,KAAOq1C,CAC/B,EACA,CAACyF,EAAmC,EAAE96C,EAAsB8P,EAAO,CACvD,YAAI,mCAAoC,8CAA8C,EAE9F,QAAQ,IAAIA,CAAK,EACb9P,QAAM,cAAe,QAAS8P,CAAK,CAC3C,EACA,CAACirC,EAAuC,EAAE/6C,EAAsBg0C,EAAU,CACtEh0C,EAAM,cAAc,SAAWg0C,CACnC,EACA,CAACgH,EAAoC,EAAEh7C,EAAsBi7C,EAAQ,CACjEj7C,EAAM,cAAc,OAASi7C,CACjC,EACA,CAACC,EAAuC,EAAEl7C,EAAsBi7C,EAAQ,CACpE,QAAQ,IAAI,mCAAmC,EAC/Cj7C,EAAM,cAAc,SAAWi7C,CACnC,EACA,CAACE,EAAgD,EAAEn7C,EAAsBi7C,EAAQ,CAC7Ej7C,EAAM,cAAc,iBAAmBi7C,CAC3C,EACA,CAACG,EAAyD,EAAEp7C,EAAsBf,EAAM,CACpFo8C,EAAA,IAAIr7C,EAAM,cAAc,iBAAkBf,EAAK,MAAOA,EAAK,KAAK,CACpE,EAIA,CAACq8C,EAAqC,EAAEt7C,EAAsBf,EAAM,CAC1D,MAAAs8C,EAAW,OAAO,KAAKt8C,CAAI,EAC3Bu8C,EAAW,OAAO,KAAKx7C,EAAM,cAAc,KAAK,EAE7Cu7C,EAAA,QAASl9C,GAAQ,CAClBm9C,EAAS,SAASn9C,CAAG,IACrB2B,EAAM,cAAc,MAAM3B,CAAG,EAAIY,EAAKZ,CAAG,EAC7C,CACH,CACL,EACA,CAACo9C,EAA8B,EAAEz7C,EAAsB8P,EAAO,CAC1D9P,EAAM,cAAc,MAAQ8P,CAChC,EACA,CAAC4rC,EAAiC,EAAE17C,EAAsB27C,EAAW,CAC7D37C,QAAM,cAAe,YAAa27C,CAAS,CAEnD,EACA,CAACC,EAA0C,EAAE57C,EAAsBf,EAAM,CACrEo8C,EAAA,IAAIr7C,EAAM,cAAc,UAAWf,EAAK,MAAOA,EAAK,QAAQ,CAChE,EACA,CAAC48C,EAA2C,EAAE77C,EAAsBf,EAAM,CACtEe,EAAM,cAAc,UAAUf,EAAK,KAAK,EAAE,SAAWA,EAAK,QAC9D,EACA,CAAC68C,EAAsC,EAAE97C,EAAsBrB,EAAQ,CACnEqB,EAAM,cAAc,aAAerB,CACvC,EACA,CAACo9C,EAAyC,EAAE/7C,EAAsBg8C,EAAS,CACvEh8C,EAAM,cAAc,iBAAmBg8C,CAC3C,EACA,CAACC,EAAuC,EAAEj8C,EAAsBf,EAAM,CAClE,QAAQ,IAAI,mCAAmC,EAC/C,QAAQ,IAAIA,CAAI,EAChBe,EAAM,gCAAkCf,CAC5C,EACA,CAACi9C,EAAwC,EAAEl8C,EAAsBf,EAAM,CAC/DA,EAAK,iBACLe,EAAM,cAAc,eAAiBm8C,MAAIl9C,EAAK,eAAqBuE,KAAE,OAAO,CAAC,CAAC,GAG9EvE,EAAK,mBACLe,EAAM,cAAc,iBAAmBm8C,MAAIl9C,EAAK,iBAAuBuE,IAE5D,CACH,WAFeA,EAAE,KAGjB,OAAQA,EAAE,QAAQ,CAAC,CACvB,EACH,EACL,CAER,EAEM3C,GAAU,CAEZ,SAAS,CAAC,MAAAb,EAAO,OAAAP,EAAQ,YAAA+xC,GAAc,CACnC/xC,EAAO,uBAAwB,CAAC,QAAS,WAAY,QAAS,GAAK,EAC7D,MAAA28C,EAAkBhpC,GAAe,2BAA2B,EAC5DipC,EAAkBhzC,EAAA,IAAImoC,EAAY,iBAAiB,EAAG,0BAA0B,EAChF8K,EAAaD,IAAoB,SACjCE,EAAaF,IAAoB,SACjCG,EAAanzC,MAAIrJ,EAAM,cAAe,mBAAoB,CAAC,GAAK,EAEtEA,EAAM,aAAa,gBAAgB,EAEnCe,EAAM,KAAK,eAAgBf,EAAM,aAAa,EACzC,KAAMX,GAAa,CAKhB,GAJIk9C,IACA,OAAO,SAAS,KAAOlzC,MAAIhK,EAAU,eAAe,GAGnD,CAACk9C,GAAc,CAACD,GAAevlB,SAAOqlB,CAAe,GAAKI,EAClDz+C,EAAA,MAAM,sBAAuBsB,EAAS,IAAI,UAC5CgK,EAAA,IAAIhK,EAAU,eAAe,EACpC,OAAO,SAAS,KAAOgK,MAAIhK,EAAU,eAAe,MACjD,CACegK,EAAI,IAAAhK,EAAU,uBAAuB,EACjD,MAAA6jB,EAAW7Z,MAAIhK,EAAU,eAAe,EAE9CI,EAAO,gCAAiC,CACpC,MAAO4J,MAAI6Z,EAAU,OAAO,EAC5B,UAAW7Z,MAAI6Z,EAAU,WAAW,GACrC,CAAC,KAAM,GAAK,EAIXnlB,EAAS,MAAM,iBAAkBsL,EAAI,IAAAhK,EAAU,WAAW,CAAC,EAC3DtB,EAAS,MAAM,iBAAkBsL,EAAI,IAAAhK,EAAU,WAAW,CAAC,EAC3DtB,EAAS,MAAM,+BAAgCsL,EAAI,IAAAhK,EAAU,0BAA0B,CAAC,CAS5F,CAEJW,EAAM,aAAa,iBAAiB,EAAI,EAC3C,EACA,MAAOwD,GAAM,CACV,QAAQ,IAAIA,CAAC,EACbxD,EAAM,aAAa,OAAO,IAAIqJ,MAAI7F,EAAE,SAAU,cAAe,EAAE,CAAC,EAE5D6F,MAAI7F,EAAE,SAAU,aAAa,EAC7BzF,EAAS,MAAM,mBAAoB,CAC/B,KAAM,QACN,QAAS,qBACZ,EAEDA,EAAS,MAAM,mBAAoB,CAC/B,KAAM,QACN,QAAS,qCACZ,EAELiC,EAAM,aAAa,iBAAiB,EAAK,EAC5C,EAAE,QAAQ,IAAM,CACjBP,EAAO,uBAAwB,CAAC,QAAS,WAAY,QAAS,GAAM,EACvE,CACL,EAKA,MAAM,0BAA0B,CAAC,OAAAA,GAASR,EAAyB,CAC3D,IACM,MAAA6B,EAAe,MAAMlB,EAAkBH,EAAQ,uBAAwB,oBAAqB,IAAMsB,EAAM,KAAK,2CAA4C9B,CAAI,CAAC,EAC3JlB,EAAA,MAAM,qCAAsC+C,CAAY,EAEjE/C,EAAS,MAAM,uBAAwB,CACnC,QAAS,qBACT,MAAO+C,EAAa,MACpB,aAAcA,EAAa,aAC9B,OACW,EAEpB,EAKA,MAAM,6BAA6B,CAAC,OAAArB,GAASR,EAAM,CAC3C,IACM,MAAA6B,EAAe,MAAMlB,EAAkBH,EAAQ,uBAAwB,oBAAqB,IAAMsB,EAAM,KAAK,8CAA+C9B,CAAI,CAAC,EAChKQ,EAAAw8C,GAAyCn7C,EAAa,MAAM,OAEvD,CACZ/C,EAAS,MAAM,sCAAsC,EAE7D,EAMA,cAAc,CAAC,OAAA0B,EAAQ,YAAA+xC,CAAA,EAAciL,EAAiB,CAClDh9C,EAAO,uBAAwB,CAAC,QAAS,oBAAqB,QAAS,GAAK,EACtEsB,EAAA,IAAI,eAAeywC,EAAY,iBAAiB,EAAE,IAAI,0BAA0BiL,CAAe,EAAE,EAClG,KAAK,IAAM,CACR1+C,EAAS,MAAM,yBAAyB,EAC3C,EAAE,MAAM,IAAM,EAClB,EAAE,QAAQ,IAAM,CACb0B,EAAO,uBAAwB,CAAC,QAAS,oBAAqB,QAAS,GAAM,EAChF,CACL,EAMA,MAAM,0BAA0B,CAAC,OAAAA,EAAQ,YAAA+xC,CAAA,EAAcvyC,EAAmC,OAChF,MAAAoC,EAAS,IAAI,gBAAgB,CAC/B,MAAOpC,EAAK,MAAM,MAClB,IAAKA,EAAK,MAAM,IACnB,EAEGA,EAAK,MAAMoC,EAAO,OAAO,OAAQpC,EAAK,IAAI,EAC1CA,EAAK,mBAA0BoC,EAAA,OAAO,oBAAqB,MAAM,EAGjE,IACQ,YAAIA,EAAO,UAAU,EAG7B,MAAMkK,EAAM,gBAFQtK,EAAAuwC,EAAY,iBAAiB,IAA7B,YAAAvwC,EAAgC,IAEd,0BAA0BI,EAAO,UAAU,GAE3EP,EAAe,MAAMlB,EACvBH,EACA,uBACA,oBACA,IAAMsB,EAAM,IAAIwK,CAAG,CACvB,EAEO9L,EAAA,4BAA4BqB,GAAA,YAAAA,EAAc,WAAY,GAAI,CAAC,KAAM,GAAK,QACxEf,EAAO,CACJ,cAAM,wCAAyCA,CAAK,EAEpE,EAEA,6BAA6B,CAAC,OAAAN,EAAQ,MAAAO,EAAO,YAAAwxC,GAAc,CAAC,KAAA6D,EAAM,MAAAvlC,GAAQ,CACtErQ,EAAO,uBAAwB,CAAC,QAAS,oBAAqB,QAAS,GAAK,EAE5EsB,EAAM,IAAI,eAAeywC,EAAY,iBAAiB,EAAE,IAAI,aAAa6D,CAAI,uBAAuBvlC,EAAM,KAAK,QAAQA,EAAM,GAAG,EAAE,EAC7H,KAAMzQ,GAAa,CACTI,EAAA,2BAA4B4J,MAAIhK,EAAS,KAAM,WAAY,EAAE,EAAG,CAAC,KAAM,GAAK,EACtF,EAAE,MAAM,IAAM,EAClB,EAAE,QAAQ,IAAM,CACbI,EAAO,uBAAwB,CAAC,QAAS,oBAAqB,QAAS,GAAM,EAChF,EAET,EAEei9C,GAAA,CACX,WAAY,SACZ18C,GAAA,UACAC,GAAA,QACAY,GACAqV,UACJ,ECraMlW,GAAiC,CACnC,QAAS,CACL,IAAK,GACL,OAAQ,GACR,OAAQ,GACR,OAAQ,GACR,OAAQ,GACR,YAAa,EACjB,EACA,WAAY,IAAIhB,GAChB,mBAAoB,CAAC,EACrB,kBAAmB,KACnB,YAAa,EACjB,EAEMiB,GAAY,CACd,CAAC08C,EAAoC,EAAE38C,EAAgCG,EAGpE,CACCH,EAAM,QAAQG,EAAQ,OAAO,EAAIA,EAAQ,OAC7C,EACA,CAACy8C,EAA6B,EAAE58C,EAAgC68C,EAA+B,CAC3F78C,EAAM,mBAAqB68C,CAC/B,EACA,CAACC,EAA4B,EAAE98C,EAAgC+8C,EAA4B,CACvF/8C,EAAM,kBAAoB+8C,CAC9B,EACA,CAACC,EAAqB,EAAEh9C,EAAgCi9C,EAAa,CACjEj9C,EAAM,YAAci9C,CACxB,EAEA,CAACC,EAAiD,EAAEl9C,EAAgC,CAChFA,EAAM,WAAW,OAAO,MAAM,EAEtC,EAEMa,GAAU,CAKZ,sBAAsB,CAAC,OAAApB,GAAS,CAC5BA,EAAO,iCAAkC,CAAC,QAAS,MAAO,QAAS,GAAK,EAExEA,EAAOy9C,EAAiD,EAExDn8C,EAAM,IAAI,yBAAyB,EAC9B,KAAM1B,GAAa,CAChBtB,EAAS,MAAM,kCAAmCsB,EAAS,KAAK,QAAQ,EACxEI,EAAOm9C,GAA+Bv9C,EAAS,KAAK,QAAQ,EAC/D,EAAE,MAAM,IAAM,EAClB,EAAE,QAAQ,IAAM,CACbI,EAAO,iCAAkC,CAAC,QAAS,MAAO,QAAS,GAAM,EAC5E,CACL,EAMA,qBAAqB,CAAC,OAAAA,CAAM,EAAG09C,EAAsB,CACjD19C,EAAO,iCAAkC,CAAC,QAAS,MAAO,QAAS,GAAK,EACxEA,EAAO,6CAA6C,EAEpDsB,EAAM,IAAI,2BAA2Bo8C,CAAY,EAAE,EAC9C,KAAM99C,GAAa,CAChBtB,EAAS,MAAM,kCAAmCsB,EAAS,KAAK,OAAO,EAChEI,EAAA,yBAA0BJ,EAAS,KAAK,OAAO,EACzD,EAAE,MAAM,IAAM,EAClB,EAAE,QAAQ,IAAM,CACbI,EAAO,iCAAkC,CAAC,QAAS,MAAO,QAAS,GAAM,EAC5E,CACL,EAKA,MAAM,wBAAwB,CAAC,OAAAA,GAASs9C,EAA4B,SAC5D,IACM,MAAAj8C,EAAe,MAAMlB,EAAkBH,EAAQ,iCAAkC,SAAU,IAAMsB,EAAM,KAAK,0BAA2Bg8C,CAAO,CAAC,EAC5Ih/C,EAAA,MAAM,oCAAqC+C,EAAa,OAAO,QACnE0C,EAAG,CACRtC,EAAK,MAAM,CACP,UAASF,GAAAC,EAAAuC,GAAA,YAAAA,EAAG,WAAH,YAAAvC,EAAa,OAAb,YAAAD,EAAmB,UAAW,qBAC1C,EAET,EAKA,MAAM,wBAAwB,CAAC,OAAAvB,GAASs9C,EAA4B,SAC5D,IACA,MAAMn9C,EAAkBH,EAAQ,iCAAkC,SAAU,IAAMsB,EAAM,IAAI,2BAA2Bg8C,EAAQ,IAAI,GAAIA,CAAO,CAAC,QAC1Iv5C,EAAG,CACRtC,EAAK,MAAM,CACP,UAASF,GAAAC,EAAAuC,GAAA,YAAAA,EAAG,WAAH,YAAAvC,EAAa,OAAb,YAAAD,EAAmB,UAAW,qBAC1C,EAET,EAKA,MAAM,wBAAwB,CAAC,OAAAvB,GAASs9C,EAA4B,SAC5D,IACM,MAAAn9C,EAAkBH,EAAQ,iCAAkC,SAAU,IAAMsB,EAAM,OAAO,2BAA2Bg8C,EAAQ,IAAI,EAAE,CAAC,QACpIv5C,EAAG,CACRtC,EAAK,MAAM,CACP,UAASF,GAAAC,EAAAuC,GAAA,YAAAA,EAAG,WAAH,YAAAvC,EAAa,OAAb,YAAAD,EAAmB,UAAW,qBAC1C,EAET,EAEA,MAAM,qBAAqB,CAAC,OAAAvB,GAASlB,EAAgB,SAC7C,IACM,MAAAqB,EAAkBH,EAAQ,iCAAkC,SAAU,IAAMsB,EAAM,KAAK,2CAA4C,CAAC,MAAAxC,CAAK,CAAC,CAAC,QAC5IiF,EAAG,CACRtC,EAAK,MAAM,CACP,UAASF,GAAAC,EAAAuC,GAAA,YAAAA,EAAG,WAAH,YAAAvC,EAAa,OAAb,YAAAD,EAAmB,UAAW,qBAC1C,EAET,EAKA,eAAe,CAAC,OAAAvB,GAAS,CACrBA,EAAO,iCAAkC,CAAC,QAAS,cAAe,QAAS,GAAK,EAEhFsB,EAAM,IAAI,iBAAiB,EACtB,KAAM1B,GAAa,CAChBtB,EAAS,MAAM,yBAAyB,EACjC0B,EAAA,kBAAmBJ,EAAS,KAAK,WAAW,EACtD,EAAE,MAAM,IAAM,EAClB,EAAE,QAAQ,IAAM,CACbI,EAAO,iCAAkC,CAAC,QAAS,cAAe,QAAS,GAAM,EACpF,EAGT,EAEM29C,GAAsE,CACxE,WAAY,SACZp9C,GAAA,UACAC,GAAA,QACAY,GACA,QAAS,CACL,QAASb,GAASA,EAAM,QACxB,YAAaA,GAASA,EAAM,YAC5B,mBAAoBA,GAASA,EAAM,mBACnC,kBAAmBA,GAASA,EAAM,kBAE1C,EChKMq9C,GAAiC,CACnC,oBAAqB,GACrB,cAAe,EACnB,EAEMr9C,GAAsB,CACxB,OAAQ,GAER,QAAS,CACL,QAAS,GACT,aAAc,GACd,SAAU,GACV,QAAS,GACT,SAAU,GACV,SAAU,GACV,OAAQ,GACR,cAAe,GACf,iBAAkB,GAClB,kBAAmB,GACnB,oBAAqB,GACrB,oBAAqB,GACrB,cAAe,GACf,eAAgB,GAChB,uBAAwB,GACxB,aAAc,GACd,aAAc,GACd,eAAgB,GAChB,eAAgB,EACpB,EAEA,YAAa,IAAIhB,GACjB,gBAAiB,IAAIA,GAErB,gBAAiB,CAAC,EAClB,QAAS,CACL,OAAQ,GACR,QAAS,CACL,UAAW,GACX,UAAW,GACX,KAAM,GACN,MAAO,GACP,YAAa,EACjB,EACA,SAAU,CAAC,EACX,SAAU,KACV,mBAAoB,CAAC,EACrB,MAAO,KACP,YAAa,GACb,MAAO,GACP,KAAM,GACN,SAAU,CAAC,EACX,KAAM,GACN,kBAAmB,KACnB,KAAM,CAAC,GAAGq+C,EAAiB,EAC3B,KAAM,KACN,MAAO,GACP,UAAW,GACX,KAAM,GACN,SAAU,GACV,KAAM,EACV,EAEA,UAAW,CAAC,EAEZ,SAAU,CACN,KAAM,GACN,MAAO,GACP,KAAM,GACN,WAAY,GACZ,UAAW,GACX,UAAW,GACX,KAAM,GACN,MAAO,GACP,MAAO,GACP,UAAW,GACX,YAAa,CAAC,EACd,MAAO,CAAC,EACR,qBAAsB,IAC1B,EAEA,YAAa,CAAC,EAEd,oBAAqB,CACjB,kBACA,kBACA,6BACA,gBACA,gBACA,eACJ,EAEA,kBAAmB,CACf,SAAW9+C,GAAU,CAAC,CAACA,GAAS,WAChC,IAAMqO,GAAMA,EAAE,QAAU,GAAK,sBAC7B,MAAO,CACFA,GAAM,CAAC,CAACA,GAAK,qBACbA,GAAM,YAAY,KAAKA,CAAC,GAAK,+BAClC,EACA,KAAM,CACDA,GAAM,CAAC,CAACA,GAAK,uBACbA,GAAMA,EAAE,QAAU,GAAK,yBAEhC,EAEA,cAAe,CAAC,EAChB,mBAAoB,EACpB,kBAAmB,EACnB,kBAAmB,EACnB,gBAAiB,CAAC,EAClB,iBAAkB,CAAC,EACnB,UAAW,GACX,SAAU,CACN,yBAA0B,GAC1B,wBAAyB,GACzB,sBAAuB,EAC3B,EACA,OAAQ,IACZ,EAEMsJ,GAAU,CACZ,OAASlW,GAAwBA,EAAM,OACvC,UAAYA,GAAwBA,EAAM,UAC1C,eAAiBA,GAAwBA,EAAM,QAC/C,oBAAsBA,GAAwBA,EAAM,oBACpD,MAAQA,GAAwBA,EAAM,QAAQ,MAC9C,QAAUA,GAAwBA,EAAM,QACxC,SAAWA,GAAwBA,EAAM,SACzC,gBAAkBA,GAAwBA,EAAM,gBAChD,KAAOA,GAAwBA,EAAM,QAAQ,KAC7C,eAAiBA,GAAwBA,EAAM,QAAQ,gBACvD,SAAWA,GAAwBA,EAAM,QAAQ,SACjD,SAAWA,GAAwBA,EAAM,QAAQ,SACjD,UAAYA,GAAwBA,EAAM,UAC1C,SAAWA,GAAwBA,EAAM,SACzC,kBAAoBA,GAAwBA,EAAM,kBAClD,cAAgBA,GAAwBA,EAAM,cAC9C,mBAAqBA,GAAwBA,EAAM,mBACnD,iBAAmBA,GAAwBqJ,MAAIrJ,EAAM,QAAS,YAAa,CAAE,GAAE,OAC/E,YAAcA,GAAwBA,EAAM,YAC5C,gBAAkBA,GAAwBA,EAAM,gBAChD,eAAiBA,GAAwBA,EAAM,gBAC/C,gBAAkBA,GAAwBA,EAAM,iBAChD,YAAcA,GAAwBA,EAAM,YAC5C,kBAAoBA,GAAwBA,EAAM,kBAClD,kBAAoBA,GAAwBA,EAAM,kBAClD,OAASA,GAAwBA,EAAM,MAC3C,EAEMC,GAAY,CACd,CAACq9C,EAAyB,EAAEt9C,EAAqBG,EAAgD,CAC7FH,EAAM,QAAQG,EAAQ,OAAO,EAAIA,EAAQ,OAC7C,EACA,CAACo9C,EAAiB,EAAEv9C,EAAqB0K,EAA2B,CAChE1K,EAAM,UAAY0K,GAAA,MAAAA,EAAS,cAAgBpI,GAAMoI,EAAQ,aAAa,EAAIpI,GAAA,EAAU,GAEpFtC,EAAM,QAAU,CACZ,GAAGA,EAAM,QAAS,GAAG0K,EAAS,MAAO,GAAM,KAAM,EACrD,EAEIrB,EAAA,IAAIqB,EAAS,aAAa,IAC1B1K,EAAM,YAAc0K,EAAQ,aAG3BA,EAAQ,OACT1K,EAAM,QAAQ,KAAO,CACjB,oBAAqB,GACrB,cAAe,EACnB,GAEJA,EAAM,OAAS,GAEX0K,GAAA,MAAAA,EAAS,kBACT1K,EAAM,gBAAkB0K,EAAQ,iBAGpC1K,EAAM,gBAAkB,KAAK,MAAM,KAAK,UAAU0K,CAAO,CAAC,EAE1D6nC,GAAe,gBAAgBlpC,EAAA,IAAIrJ,EAAM,QAAS,MAAM,CAAC,CAC7D,EACA,CAACw9C,EAAuB,EAAEx9C,EAAqB4H,EAAe,CAC1D5H,EAAM,QAAQ,MAAQ4H,CAC1B,EACA,CAAC61C,EAAsB,EAAEz9C,EAAqBuT,EAAmB,CACrD,YAAI,OAAQA,CAAI,EACxBvT,EAAM,QAAQ,KAAOuT,CACzB,EACA,CAACmqC,EAA0B,EAAE19C,EAAqB0iB,EAA2B,CAEzE1iB,EAAM,SAAW,CAAC,GAAGA,EAAM,SAAU,GAAG0iB,CAAQ,CACpD,EACA,CAACi7B,EAAgB,EAAE39C,EAAqBuxC,EAAgC,CACpEvxC,EAAM,OAASuxC,CACnB,EACA,CAACqM,EAA0B,EAAE59C,EAAqBkH,EAA4B,CAC1ElH,EAAM,QAAQ,SAAWkH,CAC7B,EACA,CAAC22C,EAA8B,EAAE79C,EAAqBuT,EAAmB,CACrEvT,EAAM,YAAcuT,CACxB,EACA,CAACuqC,EAA8B,EAAE99C,EAAqBihB,EAA2B,CAC7EjhB,EAAM,oBAAsBihB,CAChC,EACA,CAAC88B,EAA0B,EAAE/9C,EAAqBs2C,EAA8B,CAC5Et2C,EAAM,QAAQ,SAAWs2C,CAC7B,EACA,CAAC0H,EAA2B,EAAEh+C,EAAqBi+C,EAAuB,CACtEj+C,EAAM,UAAYi+C,CACtB,EACA,CAACC,EAA4B,EAAEl+C,EAAqBm+C,EAA+B,CAC/En+C,EAAM,QAAQ,mBAAqBm+C,CACvC,EACA,CAACC,EAAoB,EAAEp+C,EAAqB,CACxCA,EAAM,SAAW,CACb,UAAW,GACX,KAAM,GACN,MAAO,GACP,KAAM,GACN,WAAY,GACZ,UAAW,GACX,KAAM,GACN,MAAO,GACP,MAAO,GACP,UAAW,GACX,YAAa,CAAC,EACd,MAAO,CAAC,EACR,qBAAsB,IAC1B,CACJ,EACA,CAACq+C,EAA+B,EAAEr+C,EAAqBipC,EAAuC,CACpF,MAAAhqC,GAAOgqC,GAAA,YAAAA,EAAe,OAAQ,CAAC,EAC/BqV,EAAY,IAAI,IAAI,CAAC,GAAGt+C,EAAM,cAAe,GAAGf,CAAI,EAAE,IAAS4yB,KAAE,EAAE,CAAC,EAC1E7xB,EAAM,cAAgB,MAAM,KAAKs+C,CAAS,EAAE,IACxC54C,GAAA,CAAC,GAAG1F,EAAM,cAAe,GAAGf,CAAI,EAAE,KAAK4yB,GAAKA,EAAE,KAAOnsB,CAAE,CAC3D,EACA1F,EAAM,kBAAoBipC,GAAA,MAAAA,EAAe,aAAeA,EAAc,aAAe,EAAI,EACzFjpC,EAAM,mBAAoBipC,GAAA,YAAAA,EAAe,YAAa,EACtDjpC,EAAM,oBAAqBipC,GAAA,YAAAA,EAAe,QAAS,CACvD,EACA,CAACsV,EAA8B,EAAEv+C,EAAqBkG,EAAiC,CACnFlG,EAAM,SAAS,YAAckG,CACjC,EACA,CAACs4C,EAAwB,EAAEx+C,EAAqBmhB,EAAiB,CAC7DnhB,EAAM,SAAS,MAAQmhB,CAC3B,EACA,CAACs9B,EAA0B,EAAEz+C,EAAqB8V,EAAoB,CAClE9V,EAAM,SAAW,CACb,GAAGA,EAAM,SAAU,GAAG8V,EAAU,MAAO,GAAM,KAAM,EACvD,CACJ,EACA,CAAC4oC,EAAyB,EAAE1+C,EAAqB6K,EAAwB,CACrE7K,EAAM,gBAAkB6K,CAC5B,EACA,CAAC8zC,EAA0B,EAAE3+C,EAAqB4+C,EAAgB,CAC9D5+C,EAAM,iBAAmB4+C,CAC7B,EACA,CAACC,EAA4B,EAAE7+C,EAAqBD,EAA0C,CAC1FC,EAAM,YAAY,OAAO,IAAID,CAAK,CACtC,EACA,CAAC++C,EAAiC,EAAE9+C,EAAqBD,EAA0C,CAC/FC,EAAM,gBAAgB,OAAO,IAAID,CAAK,CAC1C,EACA,CAACg/C,EAAoC,EAAE/+C,EAAqBk1C,EAA4B,KAAM,CACtFA,GAAe,KACfl1C,EAAM,gBAAgB,OAAO,MAAM,EAEnCA,EAAM,gBAAgB,OAAO,MAAMk1C,CAAU,CACjD,CAER,EAEMr0C,GAAU,CAEZ,MAAM,aAAa,CAAC,OAAApB,GAASu/C,EAAqB,WAC1C,IACA,MAAMl+C,EAAe,MAAMlB,EAAkBH,EAAQ,sBAAuB,UAAW,IAAMsB,EAAM,IAAI,eAAei+C,CAAW,EAAE,CAAC,EAC7Hv/C,EAAA89C,GAAmBz8C,GAAA,YAAAA,EAAc,OAAO,EAC3C,MAAM,SAAQG,EAAAH,GAAA,YAAAA,EAAc,UAAd,YAAAG,EAAuB,QAAQ,GAC7CxB,EAAO,2BAA4BqB,EAAa,QAAQ,SAAU,CAAC,KAAM,GAAK,EAGlFd,GAAM,QAAQ,KAAO,SAChBD,EAAO,CACZmB,EAAK,MAAM,CACP,UAAS6N,GAAA/N,EAAAjB,GAAA,YAAAA,EAAO,WAAP,YAAAiB,EAAiB,OAAjB,YAAA+N,EAAuB,UAAW,qBAC9C,EAET,EAKA,MAAM,gBAAgB,CAAC,MAAA/O,EAAO,OAAAP,GAAS,CAC/B,IACA,MAAMqB,EAAe,MAAMlB,EAAkBH,EAAQ,sBAAuB,UAAW,IAAMsB,EAAM,IAAI,cAAef,EAAM,OAAO,CAAC,EAC7HP,EAAA89C,GAAmBz8C,EAAa,OAAO,EAE9CI,EAAK,QAAQ,CACT,QAAS,6BACZ,QACInB,EAAO,CACZmB,EAAK,MAAM,CACP,QAAS,0CACZ,EAED,QAAQ,IAAI,OAAO,EACnB,QAAQ,IAAInB,CAAK,EACjBN,EAAOq/C,GAAmC/+C,EAAM,SAAS,KAAK,MAAM,EAE5E,EAEA,MAAM,oBAAoB,CAAC,OAAAN,GAASR,EAAqD,SACjF,IACM,MAAAW,EAAkBH,EAAQ,sBAAuB,UAAW,IAAMsB,EAAM,IAAI,uBAAwB9B,CAAI,CAAC,EAC/GiC,EAAK,QAAQ,CACT,QAAS,8BACZ,QACInB,EAAO,CACZmB,EAAK,MAAM,CACP,UAASF,GAAAC,EAAAlB,GAAA,YAAAA,EAAO,WAAP,YAAAkB,EAAiB,OAAjB,YAAAD,EAAuB,UAAW,qBAC9C,EAET,EAEA,MAAM,gBAAgB,CAAC,MAAAhB,EAAO,OAAAP,GAAS,CAC/B,IACAA,EAAOs/C,EAAoC,EAC3C,MAAMj+C,EAAe,MAAMlB,EAAkBH,EAAQ,sBAAuB,eAAgB,IAAMsB,EAAM,IAAI,WAAYf,EAAM,QAAQ,IAAI,CAAC,EACpIP,EAAAg+C,GAAwB38C,EAAa,IAAI,EAChD/C,EAAS,MAAM,gBAAiB,CAC5B,KAAM,UACN,QAAS,yCACZ,QACIgC,EAAO,CACZ,MAAAN,EAAOq/C,GAAmC/+C,EAAM,SAAS,KAAK,MAAM,EAC9DA,CAAA,CAEd,EAEA,MAAM,yBAAyB,CAAC,OAAAN,EAAQ,SAAA8W,CAAA,EAAW0oC,EAAsB,CACjE,IACM,MAAAr/C,EAAkBH,EAAQ,sBAAuB,UAAW,IAAMsB,EAAM,IAAI,kCAAmC,CAAC,aAAAk+C,CAAY,CAAC,CAAC,EAC3H1oC,EAAA,eAAgBvW,GAAM,QAAQ,IAAI,EAC3CjC,EAAS,MAAM,gBAAiB,CAC5B,KAAM,UACN,QAAS,yCACZ,QACIgC,EAAO,CACZN,EAAO,8BAA+BM,EAAM,SAAS,KAAK,MAAM,EAExE,EAEA,MAAM,qBAAqB,CAAC,OAAAN,EAAQ,SAAA8W,CAAA,EAAW2oC,EAAe,CACtD,IACM,MAAAt/C,EAAkBH,EAAQ,sBAAuB,UAAW,IAAMsB,EAAM,IAAI,+BAAgC,CAAC,MAAAm+C,CAAK,CAAC,CAAC,EACjH3oC,EAAA,eAAgBvW,GAAM,QAAQ,IAAI,EAE3CjC,EAAS,MAAM,gBAAiB,CAC5B,KAAM,UACN,QAAS,sCACZ,QACIgC,EAAO,CACZN,EAAO,8BAA+BM,EAAM,SAAS,KAAK,MAAM,EAExE,EAEA,MAAM,kBAAkB,CAAC,OAAAN,GAAS,CAC1B,IACM,MAAAqB,EAAe,MAAMlB,EAAkBH,EAAQ,sBAAuB,UAAW,IAAMsB,EAAM,OAAO,kBAAkB,CAAC,EACtHtB,EAAA89C,GAAmBz8C,EAAa,OAAO,EAC9C/C,EAAS,MAAM,gBAAiB,CAC5B,KAAM,UACN,QAAS,sCACZ,QACIgC,EAAO,CACZN,EAAO,8BAA+BM,EAAM,SAAS,KAAK,MAAM,EAExE,EAEA,0BAA0B,CAAC,OAAAN,GAAS,CAChCA,EAAO,sBAAuB,CAAC,QAAS,gBAAiB,QAAS,GAAK,EAEjEsB,EAAA,IAAI,0BAA0Bf,GAAM,iBAAiB,EAAE,EACxD,KAAMX,GAAa,CACTI,EAAA,4BAA6BJ,EAAS,KAAK,aAAa,EAClE,EAAE,MAAOmE,GAAM,CAChB,QAAQ,IAAIA,CAAC,EAChB,EAAE,QAAQ,IAAM,CACb/D,EAAO,sBAAuB,CAAC,QAAS,gBAAiB,QAAS,GAAM,EAC3E,CACL,EAEA,MAAM,6BAA6B,CAAC,OAAAA,GAASiG,EAAY,CACjD,IACM,MAAA9F,EAAkBH,EAAQ,sBAAuB,gBAAiB,IAAMsB,EAAM,IAAI,qBAAqB2E,CAAE,EAAE,CAAC,QAC7G3F,EAAO,CACZN,EAAO,8BAA+BM,EAAM,SAAS,KAAK,MAAM,EAExE,EAKA,MAAM,2BAA2B,CAAC,OAAAN,GAAS0/C,EAAqB,CACxD,IACA,MAAMC,EAAa,MAAMx/C,EAAkBH,EAAQ,sBAAuB,SAAU,IAAMsB,EAAM,IAAI,uBAAuBo+C,CAAW,EAAE,CAAC,EAClI,OAAA1/C,EAAA,uBAAwB2/C,EAAW,QAAQ,EAC3CA,QACFr/C,EAAO,CACZN,EAAO,8BAA+BM,EAAM,SAAS,KAAK,MAAM,EAExE,EAEA,iCAAiC,CAAC,OAAAN,CAAM,EAAG41C,EAAc,CACrD51C,EAAO,sBAAuB,CAAC,QAAS,WAAY,QAAS,GAAK,EAElEsB,EAAM,IAAI,gBAAgBs0C,CAAI,WAAW,EACpC,KAAMh2C,GAAa,CAChBI,EAAO,uCAAwCJ,EAAS,KAAK,SAAU,CAAC,KAAM,GAAK,EACtF,EAAE,MAAM,IAAM,EAClB,EAAE,QAAQ,IAAM,CACbI,EAAO,sBAAuB,CAAC,QAAS,WAAY,QAAS,GAAM,EACtE,CACL,EAKA,MAAM,cAAc,CAAC,OAAAA,GAASpB,EAAa,CACnC,IACA,MAAMyC,EAAe,MAAMlB,EAAkBH,EAAQ,sBAAuB,gBAAiB,IAAMsB,EAAM,KAAK,iBAAkB,CAAC,IAAA1C,CAAI,EAAC,EAC/H,OAAAoB,EAAA89C,GAAmBz8C,EAAa,OAAO,EAC9C/C,EAAS,MAAM,gBAAiB,CAC5B,KAAM,UACN,QAAS,0BACZ,EACDA,EAAS,MAAM,gCAAgC,EAExC+C,QACFf,EAAO,CACZN,EAAOq/C,GAAmC/+C,EAAM,SAAS,KAAK,MAAM,EAE5E,EAEA,MAAM,eAAe,CAAC,OAAAN,GAAS,CACrB,MAAAqB,EAAe,MAAMlB,EAAkBH,EAAQ,sBAAuB,iBAAkB,IAAMsB,EAAM,OAAO,gBAAgB,CAAC,EAC3H,OAAAtB,EAAA89C,GAAmBz8C,EAAa,OAAO,EAC9C/C,EAAS,MAAM,gBAAiB,CAC5B,KAAM,UACN,QAAS,4BACZ,EACM+C,CACX,EAEA,wBAAwB,CAAC,OAAArB,GAAS,CAC9BA,EAAO,sBAAuB,CAAC,QAAS,uBAAwB,QAAS,GAAK,EAE9EsB,EAAM,IAAI,4BAA4B,EACjC,KAAM1B,GAAa,CAChBI,EAAO,sCAAuCJ,EAAS,KAAK,KAAM,CAAC,KAAM,GAAK,EACjF,EAAE,MAAOmE,GAAM,CAChB,QAAQ,IAAIA,CAAC,EAChB,EAAE,QAAQ,IAAM,CACb/D,EAAO,sBAAuB,CAAC,QAAS,uBAAwB,QAAS,GAAM,EAClF,CACL,EAEA,MAAM,wBAAwB,CAAC,OAAAA,GAASN,EAAc,CAClD,MAAM2B,EAAe,MAAMlB,EAAkBH,EAAQ,sBAAuB,uBAAwB,IAAMsB,EAAM,KAAK,6BAA8B,CAAC,KAAA5B,CAAK,EAAC,EAC1JM,EAAO,sCAAuCqB,EAAa,KAAM,CAAC,KAAM,GAAK,CACjF,EAEA,MAAM,eAAe,CAAC,OAAArB,GAAS,CACvB,IACM,MAAAqB,EAAe,MAAMlB,EAAkBH,EAAQ,sBAAuB,iBAAkB,IAAMsB,EAAM,IAAI,kBAAkB,CAAC,EAC1HtB,EAAAo+C,GAAgC/8C,EAAa,IAAI,OAC5C,EAEpB,EAEA,MAAM,eAAe,CAAC,OAAArB,GAASR,EAE5B,CACK,IACM,MAAAW,EAAkBH,EAAQ,sBAAuB,iBAAkB,IAAMsB,EAAM,KAAK,mBAAoB9B,CAAI,CAAC,EACnHiC,EAAK,QAAQ,CACT,QAAS,8BACZ,QACInB,EAAO,CACZmB,QAAK,MAAM,CACP,QAAS,qCACZ,EACDzB,EAAOq/C,GAAmC/+C,EAAM,SAAS,KAAK,MAAM,EAC9DA,CAAA,CAEd,EAEA,MAAM,uBAAuB,CAAC,OAAAN,GAAS,SAC/B,IACAA,EAAO,gCAAgC,EACjC,MAAAqB,EAAe,MAAMlB,EAAkBH,EAAQ,sBAAuB,mBAAoB,IAAMsB,EAAM,IAAI,wBAAwB,CAAC,EACzI,OAAAhD,EAAS,MAAM,iCAAiC,EACzC0B,EAAAy+C,GAA8Bp9C,EAAa,SAAS,EAEpDA,QACFf,EAAO,CACZN,EAAO,8BAA+BM,EAAM,SAAS,KAAK,MAAM,EAChEmB,EAAK,MAAM,CACP,UAASF,GAAAC,EAAAlB,GAAA,YAAAA,EAAO,WAAP,YAAAkB,EAAiB,OAAjB,YAAAD,EAAuB,UAAW,qBAC9C,EAET,EAEA,MAAM,uBAAuB,CAAC,OAAAvB,EAAQ,SAAA8W,CAAA,EAAW8oC,EAAoC,SAC7E,IACA5/C,EAAO,gCAAgC,EACjC,MAAAqB,EAAe,MAAMlB,EAAkBH,EAAQ,sBAAuB,mBAAoB,IAAMsB,EAAM,KAAK,yBAA0Bs+C,CAAgB,CAAC,EAC5J,OAAA9oC,EAAS,wBAAwB,EACjCxY,EAAS,MAAM,gBAAiB,CAC5B,KAAM,UACN,QAAS,4BACZ,EACM+C,QACFf,EAAO,CACZN,EAAO,8BAA+BM,EAAM,SAAS,KAAK,MAAM,EAChEmB,EAAK,MAAM,CACP,UAASF,GAAAC,EAAAlB,GAAA,YAAAA,EAAO,WAAP,YAAAkB,EAAiB,OAAjB,YAAAD,EAAuB,UAAW,qBAC9C,EAET,EAEA,MAAM,uBAAuB,CAAC,OAAAvB,EAAQ,SAAA8W,CAAA,EAAW9J,EAAc,SACvD,IACAhN,EAAO,gCAAgC,EACjC,MAAAG,EAAkBH,EAAQ,sBAAuB,mBAAoB,IAAMsB,EAAM,OAAO,0BAA0B0L,CAAI,EAAE,CAAC,EAC/H8J,EAAS,wBAAwB,EACjCxY,EAAS,MAAM,gBAAiB,CAC5B,KAAM,UACN,QAAS,4BACZ,QACIgC,EAAO,CACZN,EAAO,8BAA+BM,EAAM,SAAS,KAAK,MAAM,EAChEmB,EAAK,MAAM,CACP,UAASF,GAAAC,EAAAlB,GAAA,YAAAA,EAAO,WAAP,YAAAkB,EAAiB,OAAjB,YAAAD,EAAuB,UAAW,qBAC9C,EAET,EAEA,MAAM,uBAAuB,CAAC,OAAAvB,EAAQ,SAAA8W,CAAA,EAAW9J,EAAc,SACvD,IACAhN,EAAO,gCAAgC,EACjC,MAAAG,EAAkBH,EAAQ,sBAAuB,mBAAoB,IAAMsB,EAAM,KAAK,0BAA0B0L,CAAI,SAAS,CAAC,EACpI8J,EAAS,wBAAwB,EAEjCrV,EAAK,QAAQ,CACT,QAAS,4BACZ,QACInB,EAAO,CACZN,EAAO,8BAA+BM,EAAM,SAAS,KAAK,MAAM,EAChEmB,EAAK,MAAM,CACP,UAASF,GAAAC,EAAAlB,GAAA,YAAAA,EAAO,WAAP,YAAAkB,EAAiB,OAAjB,YAAAD,EAAuB,UAAW,qBAC9C,EAET,EAEA,MAAM,uBAAuB,CAAC,OAAAvB,EAAQ,SAAA8W,CAAA,EAAW+jC,EAA4B,SACrE,IACA76C,EAAOs/C,EAAoC,EAC3C,MAAMn/C,EAAkBH,EAAQ,sBAAuB,mBAAoB,IAAMsB,EAAM,IAAI,0BAA0Bu5C,EAAS,IAAI,IAAKA,CAAQ,CAAC,EAChJ/jC,EAAS,wBAAwB,EACjCrV,EAAK,QAAQ,CACT,QAAS,4BACZ,QACInB,EAAO,CACZN,EAAO,8BAA+BM,EAAM,SAAS,KAAK,MAAM,EAChEmB,EAAK,MAAM,CACP,UAASF,GAAAC,EAAAlB,GAAA,YAAAA,EAAO,WAAP,YAAAkB,EAAiB,OAAjB,YAAAD,EAAuB,UAAW,qBAC9C,EAET,EAEA,MAAM,kBAAkB,CAAC,OAAAvB,GAAS,SAC1B,IACAA,EAAO,gCAAgC,EACjC,MAAAqB,EAAe,MAAMlB,EAAkBH,EAAQ,sBAAuB,oBAAqB,IAAMsB,EAAM,IAAI,qBAAqB,CAAC,EAChItB,EAAA,sBAAuBqB,EAAa,cAAc,QACpDf,EAAO,CACZN,EAAO,8BAA+BM,EAAM,SAAS,KAAK,MAAM,EAChEmB,EAAK,MAAM,CACP,UAASF,GAAAC,EAAAlB,GAAA,YAAAA,EAAO,WAAP,YAAAkB,EAAiB,OAAjB,YAAAD,EAAuB,UAAW,qBAC9C,EAET,EAEA,MAAM,kBAAkB,CAAC,OAAAvB,EAAQ,SAAA8W,CAAA,EAAWtX,EAAmC,SACvE,IACAQ,EAAO,gCAAgC,EACjC,MAAAG,EAAkBH,EAAQ,sBAAuB,sBAAuB,IAAMsB,EAAM,KAAK,sBAAuB9B,CAAI,CAAC,EAC3HsX,EAAS,mBAAmB,EACnBxY,EAAA,MAAM,8BAA+BkB,CAAI,QAC7Cc,EAAO,CACZN,EAAO,8BAA+BM,EAAM,SAAS,KAAK,MAAM,EAChEmB,EAAK,MAAM,CACP,UAASF,GAAAC,EAAAlB,GAAA,YAAAA,EAAO,WAAP,YAAAkB,EAAiB,OAAjB,YAAAD,EAAuB,UAAW,qBAC9C,EAET,EAKA,MAAM,oBAAoB,CAAC,OAAAvB,EAAQ,SAAA8W,CAAA,EAAWwN,EAAqB,SAC3D,IACAtkB,EAAO,gCAAgC,EACjC,MAAAG,EAAkBH,EAAQ,sBAAuB,sBAAuB,IAAMsB,EAAM,OAAO,uBAAuBgjB,EAAK,IAAI,EAAE,CAAC,EACpIxN,EAAS,mBAAmB,EACnBxY,EAAA,MAAM,gCAAiCgmB,CAAI,QAC/ChkB,EAAO,CACZN,EAAO,8BAA+BM,EAAM,SAAS,KAAK,MAAM,EAChEmB,EAAK,MAAM,CACP,UAASF,GAAAC,EAAAlB,GAAA,YAAAA,EAAO,WAAP,YAAAkB,EAAiB,OAAjB,YAAAD,EAAuB,UAAW,qBAC9C,EAET,EAEA,MAAM,eAAe,CAAC,OAAAvB,GAASR,EAAwB,CAC/C,IACA,MAAMsE,EAAQnC,GAAqB,CAC/B,KAAMnC,EAAK,MAAQ,EACtB,EAID,OAFqB,MAAMW,EAAkBH,EAAQ,sBAAuB,eAAgB,IAAMsB,EAAM,IAAI,mBAAmBwC,CAAK,EAAE,CAAC,GAEnH,eACfxD,EAAO,CACJ,cAAM,8BAA+BA,CAAK,EAE1D,EAEA,mBAAmB,CAAC,OAAAN,GAAS,CACzBsB,EAAM,IAAI,sBAAsB,EAC3B,KAAM1B,GAAa,CAChBI,EAAO,uBAAwB4J,MAAIhK,EAAU,eAAe,CAAC,EAChE,EAAE,MAAM,IAAM,EAClB,EAAE,QAAQ,IAAM,EAChB,CACL,EAEA,mBAAmB,CAAC,OAAAI,CAAM,EAAG6/C,EAA6C,CACtEv+C,EAAM,KAAK,uBAAwBu+C,CAAM,EACpC,KAAMjgD,GAAa,CAChBI,EAAO,uBAAwB4J,MAAIhK,EAAU,eAAe,CAAC,EAC7DtB,EAAS,MAAM,8BAA8B,EAC7CA,EAAS,MAAM,gBAAiB,CAC5B,KAAM,UACN,QAAS,qCACZ,EACJ,EAAE,MAAM,IAAM,EAClB,EAAE,QAAQ,IAAM,EAChB,CACL,EAEA,qBAAqB,CAAC,OAAA0B,CAAM,EAAG6/C,EAAQ,CAC7Bv+C,EAAA,OAAO,wBAAwBu+C,EAAO,IAAI,GAAIA,CAAM,EACrD,KAAMjgD,GAAa,CAChBI,EAAOk/C,GAA4Bt1C,MAAIhK,EAAU,eAAe,CAAC,EACjEtB,EAAS,MAAM,gCAAgC,EAC/CA,EAAS,MAAM,gBAAiB,CAC5B,KAAM,UACN,QAAS,qCACZ,EACJ,EAAE,MAAOyF,GAAM,CAChB,QAAQ,IAAIA,CAAC,EAChB,EAAE,QAAQ,IAAM,EAChB,CACL,EAKA,uBAAuB,CAAC,OAAA/D,CAAM,EAAGR,EAA4C,CACzEQ,EAAO,sBAAuB,CAAC,QAAS,yBAA0B,QAAS,GAAK,EAChFsB,EAAM,KAAK,gCAAiC9B,CAAI,EAC3C,KAAK,IAAM,CACRlB,EAAS,MAAM,mCAAmC,EACrD,EAAE,MAAOgC,GAAU,SACpBmB,EAAK,MAAM,CACP,UAASF,GAAAC,EAAAlB,GAAA,YAAAA,EAAO,WAAP,YAAAkB,EAAiB,OAAjB,YAAAD,EAAuB,UAAW,qBAC9C,EACJ,EAAE,QAAQ,IAAM,CACbvB,EAAO,sBAAuB,CAAC,QAAS,yBAA0B,QAAS,GAAM,EACpF,CACL,EAMA,mBAAmB,CAAC,OAAAA,EAAQ,MAAAO,GAAQ,CAChCP,EAAO,sBAAuB,CAAC,QAAS,cAAe,QAAS,GAAK,EAE/DsB,EAAA,KAAK,eAAef,EAAM,QAAQ,IAAI,eAAe,EACtD,KAAMX,GAAa,CACTI,EAAA,cAAeJ,EAAS,KAAK,OAAO,EAC3CtB,EAAS,MAAM,gBAAiB,CAC5B,KAAM,UACN,QAAS,iBACZ,EACDA,EAAS,MAAM,sBAAsB,EACxC,EAAE,MAAOgC,GAAU,SACpBmB,EAAK,MAAM,CACP,UAASF,GAAAC,EAAAlB,GAAA,YAAAA,EAAO,WAAP,YAAAkB,EAAiB,OAAjB,YAAAD,EAAuB,UAAW,qBAC9C,EACJ,EAAE,QAAQ,IAAM,CACbvB,EAAO,sBAAuB,CAAC,QAAS,cAAe,QAAS,GAAM,EACzE,CACL,EAEA,MAAM,aAAa,CAAC,OAAAA,GAAS,CACrB,IACM,MAAAqB,EAAe,MAAMlB,EAAkBH,EAAQ,sBAAuB,WAAY,IAAMsB,EAAM,IAAI,eAAe,CAAC,EACjHtB,EAAA,wBAAyBqB,EAAa,SAAS,EACtD/C,EAAS,MAAM,sBAAsB,QAChCgC,EAAO,CACZN,EAAO,8BAA+BM,EAAM,SAAS,KAAK,MAAM,EAExE,EAEA,MAAM,aAAa,CAAC,OAAAN,GAASR,EAA+C,SACpE,IACA,MAAMW,EAAkBH,EAAQ,sBAAuB,WAAY,IAAMsB,EAAM,IAAI,iBAAiB9B,EAAK,aAAa,GAAIA,EAAK,IAAI,CAAC,EACpIlB,EAAS,MAAM,0BAA0B,QACpCgC,EAAO,CACZmB,EAAK,MAAM,CACP,UAASF,GAAAC,EAAAlB,GAAA,YAAAA,EAAO,WAAP,YAAAkB,EAAiB,OAAjB,YAAAD,EAAuB,UAAW,qBAC9C,EAET,EAEA,MAAM,mCAAmC,CAAC,OAAAvB,GAASR,EAA0C,SACrF,IACA,MAAMW,EAAkBH,EAAQ,sBAAuB,WAAY,IAAMsB,EAAM,IAAI,iBAAiB9B,EAAK,IAAI,yBAA0BA,CAAI,CAAC,EAC5IlB,EAAS,MAAM,0BAA0B,EACzCA,EAAS,MAAM,gBAAiB,CAC5B,KAAM,UACN,QAAS,iCACZ,QACIgC,EAAO,CACZmB,EAAK,MAAM,CACP,UAASF,GAAAC,EAAAlB,GAAA,YAAAA,EAAO,WAAP,YAAAkB,EAAiB,OAAjB,YAAAD,EAAuB,UAAW,qBAC9C,EAET,EAGA,MAAM,sCAAsC,CAAC,OAAAvB,GAAS,CAC9C,IACM,MAAAG,EAAkBH,EAAQ,sBAAuB,eAAgB,IAAMsB,EAAM,KAAK,2CAA2C,CAAC,EACpIhD,EAAS,MAAM,6CAA6C,EAC5DA,EAAS,MAAM,gBAAiB,CAC5B,KAAM,UACN,QAAS,wCACZ,QACIgC,EAAO,CACJ,cAAM,8BAA+BA,CAAK,EACtD,CAER,EAEMw/C,GAAiD,CACnD,WAAY,SACZv/C,GAAA,UACAC,GAAA,QACAY,GACAqV,UACJ,ECjxBMlW,GAAqB,CACvB,QAAS,CACL,YAAa,GACb,cAAe,GACf,aAAc,GACd,cAAe,GACf,YAAa,EACjB,EACA,WAAY,IAAIhB,GAChB,QAAS,CAAC,EACV,YAAa,EACjB,EAGMiB,GAAY,CACd,CAACu/C,EAAwB,EAAEx/C,EAAoBG,EAAgD,CAC3FH,EAAM,QAAQG,EAAQ,OAAO,EAAIA,EAAQ,OAC7C,EACA,CAACs/C,EAAiB,EAAEz/C,EAAoB0/C,EAAmB,CACvD1/C,EAAM,QAAU0/C,CACpB,EACA,CAACC,EAA4B,EAAE3/C,EAAoB4/C,EAAiC,CAChF5/C,EAAM,YAAc4/C,CACxB,EACA,CAACC,EAAmB,EAAE7/C,EAAoBm6C,EAAgB,CAChD,MAAApzC,EAAQ/G,EAAM,QAAQ,aAAeq5C,EAAE,OAASc,EAAO,IAAI,EAEjE,GAAIpzC,GAAS,EAAG,CACZ,MAAM+4C,EAAiB,CAAC,GAAG9/C,EAAM,OAAO,EAExC8/C,EAAe/4C,CAAK,EAAIozC,EAExBn6C,EAAM,QAAU8/C,CAAA,CAExB,EACA,CAACC,EAA8B,EAAE//C,EAAoBk1C,EAA4B,KAAM,CAC/EA,GAAe,KACfl1C,EAAM,WAAW,OAAO,MAAM,EAE9BA,EAAM,WAAW,OAAO,MAAMk1C,CAAU,CAEhD,EACA,CAAC8K,EAA2B,EAAEhgD,EAAoBD,EAA0C,CACxFC,EAAM,WAAW,OAAO,IAAID,CAAK,CACrC,EACA,CAACkgD,EAA0B,EAAEjgD,EAAoBkgD,EAAe,CAC5DlgD,EAAM,WAAW,KAAOkgD,CAAA,CAGhC,EAEMr/C,GAAU,CAKZ,MAAM,YAAY,CAAC,OAAApB,EAAQ,YAAA+xC,CAAA,EAAc,CAAC,OAAA2I,EAAQ,KAAA9E,EAAM,MAAA3D,GAAQ,OAC5DjyC,EAAOsgD,EAA8B,EAEjC,IAAAn+C,EAAc,WAAWu4C,CAAM,GAC/B9E,IACAzzC,GAAe,SAASyzC,CAAI,IAE5B3D,IACAA,EAAQ,mBAAmBA,CAAK,EAChC9vC,GAAe,UAAU8vC,CAAK,IAG9B,IACAjyC,EAAO,uBAAwB,EAAI,EAEnC,MAAMqB,EAAe,MAAMlB,EAAkBH,EAAQ,qBAAsB,eAAgB,IAAMsB,EAAM,IAAI,eAAeywC,EAAY,iBAAiB,EAAE,IAAI,iBAAiB5vC,CAAW,EAAE,CAAC,EAC5LnC,EAAO,8CAA+CqB,GAAA,YAAAA,EAAc,OAAQ,CAAC,KAAM,GAAK,QACnFf,EAAO,CACZN,EAAO,0BAAyBwB,EAAAlB,EAAM,SAAS,OAAf,YAAAkB,EAAqB,SAAU,oBAAoB,EACnFxB,EAAO,mCAAoC,KAAM,CAAC,KAAM,GAAK,SAC/D,CACSA,EAAAwgD,GAA4B,EAAK,EAEhD,EAEA,MAAM,aAAa,CAAC,OAAAxgD,GAAS,CACrB,IACM,MAAAqB,EAAe,MAAMlB,EAAkBH,EAAQ,qBAAsB,eAAgB,IAAMsB,EAAM,IAAI,aAAa,CAAC,EAClHtB,EAAAggD,GAAmB3+C,EAAa,OAAO,OAClC,EAEpB,EAEA,MAAM,aAAa,CAAC,OAAArB,GAAS06C,EAAgB,OACzC16C,EAAOsgD,EAA8B,EACjC,IACM,MAAAj/C,EAAe,MAAMlB,EAAkBH,EAAQ,qBAAsB,cAAe,IAAMsB,EAAM,KAAK,cAAeo5C,CAAM,CAAC,EAC1H16C,EAAAggD,GAAmB3+C,EAAa,OAAO,EAE9CI,EAAK,QAAQ,CACT,QAAS,8BACZ,QACInB,EAAO,CACZN,EAAOugD,KAA6B/+C,EAAAlB,EAAM,SAAS,OAAf,YAAAkB,EAAqB,SAAU,oBAAoB,EAE/F,EAEA,MAAM,mBAAmB,CAAC,OAAAxB,GAAS0gD,EAAoB,CAC/C,IACA,MAAMr/C,EAAe,MAAMlB,EAAkBH,EAAQ,qBAAsB,cAAe,IAAMsB,EAAM,IAAI,eAAeo/C,CAAU,SAAS,CAAC,EACtI1gD,EAAAggD,GAAmB3+C,EAAa,OAAO,EAE9CI,EAAK,QAAQ,CACT,QAAS,qCACZ,OACW,EAEpB,EAEA,MAAM,kBAAkB,CAAC,OAAAzB,GAASigD,EAAuC,CACjE,IACM,MAAA5+C,EAAe,MAAMlB,EAAkBH,EAAQ,qBAAsB,cAAe,IAAMsB,EAAM,IAAI,eAAgB2+C,CAAO,CAAC,EAC3HjgD,EAAAggD,GAAmB3+C,EAAa,OAAO,OAClC,EAEpB,EAEA,MAAM,kBAAkB,CAAC,OAAArB,GAASigD,EAAuC,CACjE,IACM,MAAA5+C,EAAe,MAAMlB,EAAkBH,EAAQ,qBAAsB,cAAe,IAAMsB,EAAM,KAAK,qBAAsB2+C,CAAO,CAAC,EAClIjgD,EAAAggD,GAAmB3+C,EAAa,OAAO,OAClC,EAEpB,EAKA,MAAM,aAAa,CAAC,OAAArB,GAAS06C,EAAgB,OACrC,IACA,MAAMr5C,EAAe,MAAMlB,EAAkBH,EAAQ,qBAAsB,gBAAiB,IAAMsB,EAAM,IAAI,eAAeo5C,EAAO,IAAI,GAAIA,CAAM,CAAC,EAC1I16C,EAAAogD,GAAqB/+C,GAAA,YAAAA,EAAc,MAAM,EAEhDI,EAAK,QAAQ,CACT,QAAS,8BACZ,QACInB,EAAO,CACZ,MAAAN,EAAOugD,KAA6B/+C,EAAAlB,EAAM,SAAS,OAAf,YAAAkB,EAAqB,SAAU,oBAAoB,EACjFlB,CAAA,CAEd,EAEA,MAAM,aAAa,CAAC,OAAAN,GAAS0gD,EAAoB,OACzC,IACA,MAAMr/C,EAAe,MAAMlB,EAAkBH,EAAQ,qBAAsB,gBAAiB,IAAMsB,EAAM,OAAO,eAAeo/C,CAAU,EAAE,CAAC,EACpI1gD,EAAAggD,GAAmB3+C,EAAa,OAAO,EAE9CI,EAAK,QAAQ,CACT,QAAS,8BACZ,QACInB,EAAO,CACZN,EAAOugD,KAA6B/+C,EAAAlB,EAAM,SAAS,OAAf,YAAAkB,EAAqB,SAAU,oBAAoB,EAE/F,EAKA,MAAM,YAAY,CAAC,OAAAxB,GAAS06C,EAAgB,OACpC,IACA,MAAMr5C,EAAe,MAAMlB,EAAkBH,EAAQ,qBAAsB,cAAe,IAAMsB,EAAM,IAAI,eAAeo5C,CAAM,cAAc,CAAC,EACvI16C,EAAAkgD,GAA8B7+C,EAAa,MAAM,QACnDf,EAAO,CACZN,EAAOugD,KAA6B/+C,EAAAlB,EAAM,SAAS,OAAf,YAAAkB,EAAqB,SAAU,oBAAoB,EAC3F,CAER,EAEMm/C,GAA+C,CACjD,WAAY,SAEZpgD,GAEA,QAAS,CACL,QAAUA,GAAuBA,EAAM,QACvC,QAAUA,GAAuBA,EAAM,QACvC,KAAOA,GAAuBA,EAAM,WACpC,YAAcA,GAAuBA,EAAM,WAC/C,YAEAC,GAEAY,UACJ,EC3LMb,GAAwB,CAC1B,KAAM,GACN,QAAS,CACL,OAAQ,GACR,OAAQ,GACR,OAAQ,GACR,KAAM,EACV,EACA,KAAM,IAAIhB,GACV,UAAW,KACX,OAAQ,KACR,WAAY,CAAC,EACb,SAAU,CAAC,EACX,SAAU,EACd,EAEMkX,GAAU,CACZ,KAAOlW,GAA0BA,EAAM,KACvC,QAAUA,GAA0BA,EAAM,QAC1C,KAAOA,GAA0BA,EAAM,KACvC,UAAYA,GAA0BA,EAAM,UAC5C,WAAaA,GAA0BA,EAAM,WAC7C,OAASA,GAA0BA,EAAM,OACzC,SAAWA,GAA0BA,EAAM,SAC3C,SAAWA,GAA0BA,EAAM,QAC/C,EAEMC,GAAY,CACd,CAACogD,EAA2B,EAAErgD,EAAuBG,EAAgD,CACjGH,EAAM,QAAQG,EAAQ,OAAO,EAAIA,EAAQ,OAC7C,EACA,CAACmgD,EAAoB,EAAEtgD,EAAuBugD,EAAY,CACtDvgD,EAAM,WAAaugD,CACvB,EACA,CAACC,EAA0B,EAAExgD,EAAuBygD,EAAQ,CACxDzgD,EAAM,OAASygD,CACnB,EACA,CAACC,EAA4B,EAAE1gD,EAAuB0J,EAAU,CAC5D1J,EAAM,SAAW0J,CACrB,EACA,CAACi3C,EAA4B,EAAE3gD,EAAuBs2C,EAAU,CAC5Dt2C,EAAM,SAAWs2C,CAAA,CAEzB,EAEMz1C,GAAU,CAMZ,KAAK,CAAC,OAAApB,CAAM,EAAGmhD,EAAsB,CACjCnhD,EAAO4gD,GAA6B,CAAC,QAAS,OAAQ,QAAS,GAAK,EAEpEt/C,EAAM,IAAI,wBAAwB6/C,CAAY,EAAE,EAC3C,KAAK,IAAM,CACR7iD,EAAS,MAAM,wBAAwB,EAC1C,EAAE,MAAOyF,GAAM,SAChBzF,EAAS,MAAM,yBAA0BsL,MAAI7F,EAAG,wBAAyB,oBAAoB,CAAC,EAC9FtC,EAAK,MAAM,CACP,UAASF,GAAAC,EAAAuC,GAAA,YAAAA,EAAG,WAAH,YAAAvC,EAAa,OAAb,YAAAD,EAAmB,UAAW,qBAC1C,EACJ,EAAE,QAAQ,IAAM,CACbvB,EAAO,wBAAyB,CAAC,QAAS,OAAQ,QAAS,GAAM,EACpE,CACL,EAMA,aAAa,CAAC,OAAAA,CAAM,EAAGR,EAAM,CACzBQ,EAAO,wBAAyB,CAAC,QAAS,SAAU,QAAS,GAAK,EAElEsB,EAAM,KAAK,uBAAwB9B,CAAI,EAClC,KAAMI,GAAa,CAChBI,EAAO,uBAAwB4J,EAAI,IAAAhK,EAAU,cAAe,CAAE,EAAC,EAC/DtB,EAAS,MAAM,2BAA4BsL,EAAI,IAAAhK,EAAU,aAAa,CAAC,EAC1E,EAAE,MAAOmE,GAAM,SAChBzF,EAAS,MAAM,kCAAmCsL,MAAI7F,EAAG,wBAAyB,oBAAoB,CAAC,EACvGtC,EAAK,MAAM,CACP,UAASF,GAAAC,EAAAuC,GAAA,YAAAA,EAAG,WAAH,YAAAvC,EAAa,OAAb,YAAAD,EAAmB,UAAW,qBAC1C,EACJ,EAAE,QAAQ,IAAM,CACbvB,EAAO,wBAAyB,CAAC,QAAS,SAAU,QAAS,GAAM,EACtE,CACL,EAKA,gBAAgB,CAAC,OAAAA,CAAM,EAAGR,EAAM,CAC5BQ,EAAO,wBAAyB,CAAC,QAAS,SAAU,QAAS,GAAK,EAE5DsB,EAAA,IAAI,kBAAkB9B,EAAK,UAAU,IAAI,GAAIA,CAAI,EAClD,KAAMI,GAAa,CAChBI,EAAO,uBAAwB4J,EAAI,IAAAhK,EAAU,cAAe,CAAE,EAAC,EAC/DtB,EAAS,MAAM,2BAA4BsL,EAAI,IAAAhK,EAAU,aAAa,CAAC,EAC1E,EAAE,MAAOmE,GAAM,SAChBzF,EAAS,MAAM,kCAAmCsL,MAAI7F,EAAG,wBAAyB,oBAAoB,CAAC,EACvGtC,EAAK,MAAM,CACP,UAASF,GAAAC,EAAAuC,GAAA,YAAAA,EAAG,WAAH,YAAAvC,EAAa,OAAb,YAAAD,EAAmB,UAAW,qBAC1C,EACJ,EAAE,QAAQ,IAAM,CACbvB,EAAO,wBAAyB,CAAC,QAAS,SAAU,QAAS,GAAM,EACtE,CACL,EAKA,cAAc,CAAC,OAAAA,GAAS,CACpBA,EAAO,wBAAyB,CAAC,QAAS,iBAAkB,QAAS,GAAK,EAE1EsB,EAAM,IAAI,gBAAgB,EACrB,KAAM1B,GAAa,CAChBI,EAAO,iBAAkB4J,EAAI,IAAAhK,EAAU,kBAAmB,CAAE,EAAC,EAChE,EAAE,MAAM,IAAM,EAClB,EAAE,QAAQ,IAAM,CACbI,EAAO,wBAAyB,CAAC,QAAS,iBAAkB,QAAS,GAAM,EAC9E,CACL,EAKA,qBAAqB,CAAC,OAAAA,CAAM,EAAG8uC,EAAW,CACtC9uC,EAAO,wBAAyB,CAAC,QAAS,iBAAkB,QAAS,GAAK,EAEpEsB,EAAA,IAAI,kBAAkBwtC,EAAU,IAAI,WAAW,EAChD,KAAMlvC,GAAa,CAChBI,EAAO,yBAA0B4J,EAAI,IAAAhK,EAAU,gBAAiB,CAAE,EAAC,EACnEtB,EAAS,MAAM,iCAAkCsL,MAAIhK,EAAU,gBAAiB,EAAE,CAAC,EACtF,EAAE,MAAM,IAAM,EAClB,EAAE,QAAQ,IAAM,CACbI,EAAO,wBAAyB,CAAC,QAAS,iBAAkB,QAAS,GAAM,EAC9E,CACL,EAEA,qBAAqB,CAAC,OAAAA,CAAM,EAAGuE,EAAS,CACpCvE,EAAO,wBAAyB,CAAC,QAAS,iBAAkB,QAAS,GAAK,EAE1E,IAAIg5C,EAAU,IACVpvC,EAAA,IAAIrF,EAAS,WAAW,IACxBy0C,GAAW,aAAapvC,MAAIrF,EAAS,WAAW,CAAC,IAEjDqF,EAAA,IAAIrF,EAAS,SAAS,IACtBy0C,GAAW,YAAYpvC,MAAIrF,EAAS,SAAS,CAAC,IAI9Cy0C,IAAY,MACFA,EAAA,IAGR13C,EAAA,IAAI,kBAAkBiD,EAAQ,cAAc,YAAYy0C,CAAO,EAAE,EAClE,KAAMp5C,GAAa,CAChBI,EAAO,yBAA0B4J,EAAI,IAAAhK,EAAU,gBAAiB,CAAE,EAAC,EACnEtB,EAAS,MAAM,iCAAkCsL,MAAIhK,EAAU,gBAAiB,EAAE,CAAC,EACtF,EAAE,MAAM,IAAM,EAClB,EAAE,QAAQ,IAAM,CACbI,EAAO,wBAAyB,CAAC,QAAS,iBAAkB,QAAS,GAAM,EAC9E,CACL,EAKA,iBAAiB,CAAC,OAAAA,CAAM,EAAGohD,EAAgB,CACvCphD,EAAO,wBAAyB,CAAC,QAAS,SAAU,QAAS,GAAK,EAElEsB,EAAM,OAAO,kBAAkB8/C,CAAc,EAAE,EAC1C,KAAMxhD,GAAa,CAChBtB,EAAS,MAAM,2BAA4BsL,EAAI,IAAAhK,EAAU,aAAa,CAAC,EAC1E,EAAE,MAAOmE,GAAM,SAChBzF,EAAS,MAAM,kCAAmCsL,MAAI7F,EAAG,wBAAyB,oBAAoB,CAAC,EACvGtC,EAAK,MAAM,CACP,UAASF,GAAAC,EAAAuC,GAAA,YAAAA,EAAG,WAAH,YAAAvC,EAAa,OAAb,YAAAD,EAAmB,UAAW,qBAC1C,EACJ,EAAE,QAAQ,IAAM,CACbvB,EAAO,wBAAyB,CAAC,QAAS,SAAU,QAAS,GAAM,EACtE,CACL,EAKA,oBAAoB,CAAC,OAAAA,CAAM,EAAGR,EAAM,CAChCQ,EAAO,wBAAyB,CAAC,QAAS,uBAAwB,QAAS,GAAK,EAE1EsB,EAAA,KAAK,kBAAkB9B,EAAK,cAAc,qBAAsBA,CAAI,EACrE,KAAMI,GAAa,CAChBtB,EAAS,MAAM,2BAA4BsL,EAAI,IAAAhK,EAAU,aAAa,CAAC,EAC1E,EAAE,MAAOmE,GAAM,SAChBzF,EAAS,MAAM,kCAAmCsL,MAAI7F,EAAG,wBAAyB,oBAAoB,CAAC,EACvGtC,EAAK,MAAM,CACP,UAASF,GAAAC,EAAAuC,GAAA,YAAAA,EAAG,WAAH,YAAAvC,EAAa,OAAb,YAAAD,EAAmB,UAAW,qBAC1C,EACJ,EAAE,QAAQ,IAAM,CACbvB,EAAO,wBAAyB,CAAC,QAAS,uBAAwB,QAAS,GAAM,EACpF,EAET,EAEe8uC,GAAA,CACX,WAAY,SACZvuC,GAAA,UACAC,GAAA,QACAY,GACAqV,UACJ,ECvNMlW,GAA2B,CAC7B,QAAS,CACL,aAAc,GACd,mBAAoB,EACxB,EACA,aAAc,CAAC,EACf,KAAM,IAAIhB,EACd,EAEMkX,GAAU,CACZ,QAAUlW,GAA6BA,EAAM,QAC7C,KAAOA,GAA6BA,EAAM,KAC1C,aAAeA,GAA6BA,EAAM,YACtD,EAEMC,GAAY,CACd,CAAC6gD,EAA+B,EAAE9gD,EAA0BG,EAAgD,CACxGH,EAAM,QAAQG,EAAQ,OAAO,EAAIA,EAAQ,OAC7C,EACA,CAAC4gD,EAAuB,EAAE/gD,EAA0BrB,EAAQ,CACxDqB,EAAM,aAAerB,CACzB,EACA,CAACqiD,EAAiC,EAAEhhD,EAA0BkgD,EAAM,CAChElgD,EAAM,KAAK,KAAOkgD,CAAA,CAE1B,EAEMr/C,GAAU,CAEZ,kBAAkB,CAAC,OAAApB,GAAS,CACxBA,EAAO,4BAA6B,CAAC,QAAS,eAAgB,QAAS,GAAK,EAC5EA,EAAO,8BAA+B,EAAI,EAE1CsB,EAAM,IAAI,mBAAmB,EACxB,KAAM1B,GAAa,CAChBI,EAAO,oBAAqB4J,MAAIhK,EAAU,mBAAmB,CAAC,EACjE,EAAE,MAAM,IAAM,EAClB,EAAE,QAAQ,IAAM,CACbI,EAAO,8BAA+B,EAAK,EAE3CA,EAAO,4BAA6B,CAAC,QAAS,eAAgB,QAAS,GAAM,EAChF,CACL,EAEA,mBAAmB,CAAC,OAAAA,EAAQ,MAAAO,GAAQvB,EAAO,CACvCgB,EAAO,4BAA6B,CAAC,QAAS,qBAAsB,QAAS,GAAK,EAClFA,EAAO,8BAA+B,EAAI,EAE1CsB,EAAM,KAAK,oBAAqBtC,CAAK,EAChC,KAAMY,GAAa,CAChBtB,EAAS,MAAM,+BAAgCsL,MAAIhK,EAAU,mBAAoB,EAAE,CAAC,EACpF6B,EAAK,QAAQ,CACT,QAAS,qCACZ,EACJ,EAAE,MAAOsC,GAAM,CAChBxD,EAAM,KAAK,OAAO,IAAIqJ,MAAI7F,EAAG,sBAAsB,CAAC,EACvD,EAAE,QAAQ,IAAM,CACb/D,EAAO,8BAA+B,EAAK,EAC3CA,EAAO,4BAA6B,CAAC,QAAS,qBAAsB,QAAS,GAAM,EACtF,CACL,EAEA,mBAAmB,CAAC,OAAAA,CAAM,EAAGhB,EAAO,CAChCgB,EAAO,4BAA6B,CAAC,QAAS,qBAAsB,QAAS,GAAK,EAClFA,EAAO,8BAA+B,EAAI,EAEpCsB,EAAA,IAAI,qBAAqBtC,EAAM,IAAI,GAAIA,CAAK,EAC7C,KAAMY,GAAa,CAChBtB,EAAS,MAAM,+BAAgCsL,MAAIhK,EAAU,mBAAoB,EAAE,CAAC,EACpF6B,EAAK,QAAQ,CACT,QAAS,qCACZ,EACJ,EAAE,MAAOsC,GAAM,CACPzF,EAAA,MAAM,6BAA8B,CAAC,MAAAU,EAAO,MAAO4K,EAAI,IAAA7F,EAAG,uBAAwB,CAAE,GAAE,EAClG,EAAE,QAAQ,IAAM,CACb/D,EAAO,8BAA+B,EAAK,EAC3CA,EAAO,4BAA6B,CAAC,QAAS,qBAAsB,QAAS,GAAM,EACtF,CACL,EAEA,4BAA4B,CAAC,OAAAA,CAAM,EAAGd,EAAQ,CAC1Cc,EAAO,4BAA6B,CAAC,QAAS,qBAAsB,QAAS,GAAK,EAClFA,EAAO,8BAA+B,EAAI,EAEpCsB,EAAA,IAAI,8BAA+B,CAAC,OAAApC,CAAA,CAAO,EAC5C,KAAMU,GAAa,CAChBtB,EAAS,MAAM,yCAA0CsL,MAAIhK,EAAU,oBAAqB,EAAE,CAAC,EAClG,EAAE,MAAM,IAAM,EAClB,EAAE,QAAQ,IAAM,CACbI,EAAO,8BAA+B,EAAK,EAC3CA,EAAO,4BAA6B,CAAC,QAAS,qBAAsB,QAAS,GAAM,EACtF,CACL,EAEA,kBAAkB,CAAC,OAAAA,CAAM,EAAGhB,EAAO,CAC/BgB,EAAO,4BAA6B,CAAC,QAAS,qBAAsB,QAAS,GAAK,EAClFA,EAAO,8BAA+B,EAAI,EAEpCsB,EAAA,OAAO,qBAAqBtC,EAAM,IAAI,EAAE,EACzC,KAAMY,GAAa,CAChBI,EAAO,oBAAqB4J,MAAIhK,EAAU,mBAAmB,CAAC,EAC9D6B,EAAK,QAAQ,CACT,QAAS,qCACZ,EACJ,EAAE,MAAOsC,GAAM,CAChBzF,EAAS,MAAM,8BAA+BsL,MAAI7F,EAAG,wBAAyB,EAAE,CAAC,EACpF,EAAE,QAAQ,IAAM,CACb/D,EAAO,8BAA+B,EAAK,EAC3CA,EAAO,4BAA6B,CAAC,QAAS,qBAAsB,QAAS,GAAM,EACtF,EAET,EAEewhD,GAAA,CACX,WAAY,SACZjhD,GAAA,UACAC,GAAA,QACAY,GACAqV,UACJ,ECzGMlW,GAAgC,CAClC,QAAS,CACL,uBAAwB,GACxB,kBAAmB,GACnB,mBAAoB,GACpB,mBAAoB,GACpB,mBAAoB,EACxB,EACA,kBAAmB,CAAC,EACpB,KAAM,IAAIhB,EACd,EAEMkX,GAAU,CACZ,QAAUlW,GAAkCA,EAAM,QAClD,KAAOA,GAAkCA,EAAM,KAC/C,kBAAoBA,GAAkCA,EAAM,iBAChE,EAEMC,GAAY,CACd,CAAC6gD,EAA+B,EAAE9gD,EAA+BG,EAAgD,CAC7GH,EAAM,QAAQG,EAAQ,OAAO,EAAIA,EAAQ,OAC7C,EACA,CAAC+gD,EAA4B,EAAElhD,EAA+BmhD,EAAoC,CAC9FnhD,EAAM,kBAAoBmhD,CAC9B,EACA,CAACC,EAAmC,EAAEphD,EAA+B,CACjEA,EAAM,KAAK,OAAO,MAAM,CAC5B,EACA,CAACqhD,EAAsC,EAAErhD,EAA+BkgD,EAAO,GAAM,CACjFlgD,EAAM,KAAK,KAAOkgD,CACtB,EACA,CAACoB,EAAwC,EAAEthD,EAA+BjB,EAA2C,CACjHiB,EAAM,KAAK,OAAO,IAAIjB,CAAM,EAEpC,EAEM8B,GAAU,CACZ,MAAM,uBAAuB,CAAC,OAAApB,GAAS,SACnCA,EAAO2hD,EAAmC,EAC1C3hD,EAAO4hD,EAAsC,EAEzC,IACM,MAAAvgD,EAAe,MAAMlB,EAAkBH,EAAQ,4BAA6B,yBAA0B,IAAMsB,EAAM,IAAI,wBAAwB,CAAC,EAE9ItB,EAAAyhD,GAA8BpgD,EAAa,iBAAiB,EAC5DrB,EAAA4hD,GAAwC,EAAK,QAC/CthD,EAAO,CACZmB,EAAK,MAAM,CACP,UAASF,GAAAC,EAAAlB,GAAA,YAAAA,EAAO,WAAP,YAAAkB,EAAiB,OAAjB,YAAAD,EAAuB,UAAW,kDAC9C,EAET,EAEA,MAAM,wBAAwB,CAAC,OAAAvB,GAAS0hD,EAAkC,SACtE1hD,EAAO2hD,EAAmC,EAC1C3hD,EAAO4hD,EAAsC,EAEzC,IACM,MAAAvgD,EAAe,MAAMlB,EAAkBH,EAAQ,4BAA6B,qBAAsB,IAAMsB,EAAM,KAAK,yBAA0BogD,CAAe,CAAC,EAE5J1hD,EAAAyhD,GAA8BpgD,EAAa,iBAAiB,EAEnEI,EAAK,QAAQ,CACT,QAAS,qCACZ,QACInB,EAAO,CACZN,EAAO6hD,IAA0CtgD,GAAAC,EAAAlB,GAAA,YAAAA,EAAO,WAAP,YAAAkB,EAAiB,OAAjB,YAAAD,EAAuB,MAAM,EAG3EvB,EAAA4hD,GAAwC,EAAK,CACxD,EAEA,MAAM,wBAAwB,CAAC,OAAA5hD,GAAS0hD,EAAkC,aACtE1hD,EAAO2hD,EAAmC,EAC1C3hD,EAAO4hD,EAAsC,EAEzC,IACA,MAAMzhD,EAAkBH,EAAQ,4BAA6B,qBAAsB,IAAMsB,EAAM,IAAI,0BAA0BogD,EAAgB,IAAI,GAAIA,CAAe,CAAC,EAErKjgD,EAAK,QAAQ,CACT,QAAS,qCACZ,QACInB,EAAO,CACZmB,EAAK,MAAM,CACP,UAASF,GAAAC,EAAAlB,GAAA,YAAAA,EAAO,WAAP,YAAAkB,EAAiB,OAAjB,YAAAD,EAAuB,UAAW,mDAC9C,EACDvB,EAAO6hD,KAA0C58B,GAAA3V,EAAAhP,GAAA,YAAAA,EAAO,WAAP,YAAAgP,EAAiB,OAAjB,YAAA2V,EAAuB,UAAW,gDAAiD,EAGjIjlB,EAAA4hD,GAAwC,EAAK,CACxD,EAEA,MAAM,iCAAiC,CAAC,OAAA5hD,GAASd,EAA2B,aACxEc,EAAO2hD,EAAmC,EAC1C3hD,EAAO4hD,EAAsC,EAEzC,IACM,MAAAzhD,EAAkBH,EAAQ,4BAA6B,qBAAsB,IAAMsB,EAAM,IAAI,mCAAoC,CAAC,OAAApC,CAAM,CAAC,CAAC,EAEhJuC,EAAK,QAAQ,CACT,QAAS,+CACZ,QACInB,EAAO,CACZmB,EAAK,MAAM,CACP,UAASF,GAAAC,EAAAlB,GAAA,YAAAA,EAAO,WAAP,YAAAkB,EAAiB,OAAjB,YAAAD,EAAuB,UAAW,mDAC9C,EACDvB,EAAO6hD,KAA0C58B,GAAA3V,EAAAhP,GAAA,YAAAA,EAAO,WAAP,YAAAgP,EAAiB,OAAjB,YAAA2V,EAAuB,UAAW,gDAAiD,EAGjIjlB,EAAA4hD,GAAwC,EAAK,CACxD,EAEA,MAAM,wBAAwB,CAAC,OAAA5hD,GAAS0hD,EAAkC,aAClE,IACA1hD,EAAO2hD,EAAmC,EAC1C3hD,EAAO4hD,EAAsC,EAE7C,MAAMvgD,EAAe,MAAMlB,EAAkBH,EAAQ,4BAA6B,qBAAsB,IAAMsB,EAAM,OAAO,0BAA0BogD,EAAgB,IAAI,EAAE,CAAC,EAErK1hD,EAAAyhD,GAA8BpgD,EAAa,iBAAiB,EAEnEI,EAAK,QAAQ,CACT,QAAS,qCACZ,QACInB,EAAO,CACL,MAAAN,EAAA4hD,GAAwC,EAAK,EACpDngD,EAAK,MAAM,CACP,UAASF,GAAAC,EAAAlB,GAAA,YAAAA,EAAO,WAAP,YAAAkB,EAAiB,OAAjB,YAAAD,EAAuB,UAAW,qDAC9C,EAEDvB,EAAO6hD,KAA0C58B,GAAA3V,EAAAhP,GAAA,YAAAA,EAAO,WAAP,YAAAgP,EAAiB,OAAjB,YAAA2V,EAAuB,SAAU,gDAAiD,EAE7H3kB,CAAA,CAGHN,EAAA4hD,GAAwC,EAAK,EAE5D,EAEel4B,GAAA,CACX,WAAY,SACZnpB,GAAA,UACAC,GAAA,QACAY,GACAqV,UACJ,EC9HMlW,GAAuB,CACzB,KAAM,GACN,QAAS,CACL,IAAK,GACL,SAAU,GACV,OAAQ,EACZ,EACA,MAAO,CAAC,EACR,UAAW,CAAC,EACZ,SAAU,KACV,UAAW,CAAC,EACZ,SAAU,IACd,EAEMkW,GAAU,CACZ,KAAOlW,GAAyBA,EAAM,KACtC,QAAUA,GAAyBA,EAAM,QACzC,SAAWA,GAAyBA,EAAM,SAC1C,UAAYA,GAAyBA,EAAM,UAC3C,UAAYA,GAAyBA,EAAM,UAC3C,SAAWA,GAAyBA,EAAM,QAC9C,EAEMC,GAAY,CACd,CAACshD,EAA2B,EAAEvhD,EAAsBG,EAAgD,CAChGH,EAAM,QAAQG,EAAQ,OAAO,EAAIA,EAAQ,OAC7C,EACA,CAACqhD,EAAsB,EAAExhD,EAAsBqnC,EAAwB,CACnErnC,EAAM,SAAWqnC,CACrB,EACA,CAACoa,EAAuB,EAAEzhD,EAAsB0hD,EAA2B,CACvE1hD,EAAM,UAAY0hD,CACtB,EACA,CAACC,EAAoB,EAAE3hD,EAAsB,CACzCA,EAAM,SAAW,KACjBA,EAAM,KAAO,EACjB,EACA,CAAC4hD,EAAsB,EAAE5hD,EAAsBye,EAAwB,CACnEze,EAAM,SAAWye,EACjBze,EAAM,KAAO,EACjB,EACA,CAAC6hD,EAAuB,EAAE7hD,EAAsB8hD,EAA2B,CACvE9hD,EAAM,UAAY8hD,CAAA,CAE1B,EAEMjhD,GAAU,CAKZ,MAAM,eAAe,CAAC,OAAApB,GAAS,CACvB,IACM,MAAAqB,EAAe,MAAMlB,EAAkBH,EAAQ,wBAAyB,MAAO,IAAMsB,EAAM,IAAI,eAAe,CAAC,EAC9GtB,EAAAoiD,GAAyB/gD,EAAa,SAAS,OAC1C,EAEpB,EAOA,gBAAiB,CACbC,EAAM,KAAK,eAAe,EACrB,KAAM1B,GAAa,OAChBtB,EAAS,MAAM,2BAA2BkD,EAAA5B,GAAA,YAAAA,EAAU,OAAV,YAAA4B,EAAgB,QAAQ,EACrE,EAAE,MAAOuC,GAAM,SAChBtC,EAAK,MAAM,CACP,UAASF,GAAAC,EAAAuC,GAAA,YAAAA,EAAG,WAAH,YAAAvC,EAAa,OAAb,YAAAD,EAAmB,UAAW,qBAC1C,EACJ,EAAE,QAAQ,IAAM,EAChB,CACL,EAMA,iBAAiB,CAAC,OAAAvB,CAAM,EAAGgN,EAAc,CACrChN,EAAO,wBAAyB,CAAC,QAAS,WAAY,QAAS,GAAK,EACpEsB,EAAM,IAAI,iBAAiB0L,CAAI,EAAE,EAC5B,KAAMpN,GAAa,SAChBtB,EAAS,MAAM,wBAAwBkD,EAAA5B,GAAA,YAAAA,EAAU,OAAV,YAAA4B,EAAgB,QAAQ,EAC/DxB,EAAOmiD,IAAwB5gD,EAAA3B,GAAA,YAAAA,EAAU,OAAV,YAAA2B,EAAgB,QAAQ,EAC1D,EAAE,MAAM,IAAM,EAClB,EAAE,QAAQ,IAAM,CACbvB,EAAO,wBAAyB,CAAC,QAAS,WAAY,QAAS,GAAM,EACxE,CACL,EAMA,MAAM,eAAe,CAAC,OAAAA,GAASR,EAAgD,CACvE,IACA,MAAMW,EAAkBH,EAAQ,wBAAyB,SAAU,IAAMsB,EAAM,IAAI,iBAAiB9B,EAAK,SAAS,UAAU,IAAI,GAAI,CAAC,QAASA,EAAK,QAAQ,CAAC,EAE5JiC,EAAK,QAAQ,CACT,QAAS,iCACZ,OACW,EAEpB,EAMA,YAAY,CAAC,MAAAlB,EAAO,OAAAP,EAAQ,YAAA+xC,GAAc,CACtCzwC,EAAM,IAAI,eAAeywC,EAAY,iBAAiB,EAAE,IAAI,cAAcxxC,EAAM,SAAS,IAAI,EAAE,EAC1F,KAAMX,GAAa,OAChBI,EAAO+hD,IAAwBvgD,EAAA5B,GAAA,YAAAA,EAAU,OAAV,YAAA4B,EAAgB,QAAQ,EAC1D,EAAE,MAAM,IAAM,EAClB,EAAE,QAAQ,IAAM,EAChB,CACL,EAMA,aAAa,CAAC,MAAAjB,EAAO,OAAAP,EAAQ,YAAA+xC,GAAcvyC,EAAc,CACrDQ,EAAO,wBAAyB,CAAC,QAAS,SAAU,QAAS,GAAK,EAC5DsB,EAAA,IAAI,eAAeywC,EAAY,iBAAiB,EAAE,IAAI,cAAcxxC,EAAM,SAAS,IAAI,GAAI,CAC7F,KAAAf,EACA,SAAUe,EAAM,SACnB,EACI,KAAK,IAAM,CACRkB,EAAK,QAAQ,CACT,QAAS,+BACZ,EACJ,EAAE,MAAM,IAAM,EAClB,EAAE,QAAQ,IAAM,CACbzB,EAAO,wBAAyB,CAAC,QAAS,SAAU,QAAS,GAAM,EACtE,CACL,EAMA,MAAM,mBAAmB,CAAC,OAAAA,GAASN,EAAc,CACzC,IACA,MAAM2B,EAAe,MAAMlB,EAAkBH,EAAQ,wBAAyB,SAAU,IAAMsB,EAAM,IAAI,iBAAiBf,GAAM,SAAS,IAAI,QAAS,CAAC,KAAAb,CAAA,CAAK,CAAC,EAErJM,EAAAoiD,GAAyB/gD,EAAa,SAAS,EAEtDI,EAAK,QAAQ,CACT,QAAS,sCACZ,OACW,EAEpB,EAMA,eAAe,CAAC,MAAAlB,EAAO,OAAAP,GAAS,CAC5BsB,EAAM,OAAO,eAAewxC,GAAe,gBAAgB,cAAcvyC,EAAM,SAAS,IAAI,EAAE,EACzF,KAAMX,GAAa,OAChBI,EAAOgiD,KAAyBxgD,EAAA5B,GAAA,YAAAA,EAAU,OAAV,YAAA4B,EAAgB,YAAa,EAAE,EAE/DC,EAAK,QAAQ,CACT,QAAS,iCACZ,EACJ,EAAE,MAAM,IAAM,EAClB,EAAE,QAAQ,IAAM,EAChB,CACL,EAMA,MAAM,eAAe,CAAC,OAAAzB,GAASgf,EAAwB,CAC/C,IACA,MAAM3d,EAAe,MAAMlB,EAAkBH,EAAQ,wBAAyB,WAAY,IAAMsB,EAAM,OAAO,iBAAiB0d,EAAS,IAAI,EAAE,CAAC,EAEvIhf,EAAAoiD,GAAyB/gD,EAAa,SAAS,EAEtDI,EAAK,QAAQ,CACT,QAAS,iCACZ,OACW,EAChB,CAER,EAEe6gD,GAAA,CACX,WAAY,SACZ/hD,GAAA,UACAC,GAAA,QACAY,GACAqV,UACJ,ECpLMlW,GAAoB,CACtB,QAAS,CACL,OAAQ,GACR,YAAa,GACb,UAAW,GACX,QAAS,GACT,gBAAiB,EACrB,EACA,UAAW,IAAIhB,GACf,QAAS,CAAC,EACV,OAAQ,CAAC,EACT,eAAgB,CAAC,EACjB,cAAe,KACf,MAAO,IACX,EAEMkX,GAAU,CACZ,QAAUlW,GAAsBA,EAAM,QACtC,UAAYA,GAAsBA,EAAM,UACxC,OAASA,GAAsBA,EAAM,OACrC,MAAQA,GAAsBA,EAAM,MACpC,QAAUA,GAAsBA,EAAM,QACtC,eAAiBA,GAAsBA,EAAM,eAC7C,cAAgBA,GAAsBA,EAAM,aAChD,EAEMC,GAAY,CACd,CAAC+hD,EAAwB,EAAEhiD,EAAmBG,EAAgD,CAC1FH,EAAM,QAAQG,EAAQ,OAAO,EAAIA,EAAQ,OAC7C,EACA,CAAC8hD,EAAgB,EAAEjiD,EAAmBkiD,EAAoB,CACtDliD,EAAM,OAASkiD,CACnB,EACA,CAACC,EAAuB,EAAEniD,EAAmBkiD,EAAwB,CACjEliD,EAAM,QAAUkiD,CACpB,EACA,CAACE,EAAyB,EAAEpiD,EAAmB8hD,EAA4B,CACvE9hD,EAAM,eAAiB8hD,CAC3B,EACA,CAACO,EAAwB,EAAEriD,EAAmBye,EAAyB,CACnEze,EAAM,cAAgBye,CAC1B,EACA,CAAC6jC,EAA0B,EAAEtiD,EAAmBD,EAA0C,CACtFC,EAAM,UAAU,OAAO,IAAID,CAAK,CACpC,EACA,CAACwiD,EAA6B,EAAEviD,EAAmBk1C,EAA4B,KAAM,CAC7EA,GAAe,KACfl1C,EAAM,UAAU,OAAO,MAAM,EAE7BA,EAAM,UAAU,OAAO,MAAMk1C,CAAU,CAC3C,CAER,EAEMr0C,GAAU,CAKZ,MAAM,UAAU,CAAC,OAAApB,GAASiyC,EAAc,iBACpCjyC,EAAO8iD,EAA6B,EAEhC,IACM,MAAAzhD,EAAe,MAAMlB,EAAkBH,EAAQ,qBAAsB,YAAa,IAAMsB,EAAM,KAAK,kBAAmB2wC,CAAK,CAAC,EACzH3zC,EAAA,MAAM,qBAAsB+C,EAAa,KAAK,QAClD0C,EAAG,CACF,MAAA5E,IAAUmQ,GAAA/N,GAAAC,EAAAuC,GAAA,YAAAA,EAAG,WAAH,YAAAvC,EAAa,OAAb,YAAAD,EAAmB,SAAnB,YAAA+N,EAA4B,OAAM6pC,GAAAl0B,EAAAlhB,GAAA,YAAAA,EAAG,WAAH,YAAAkhB,EAAa,OAAb,YAAAk0B,EAAmB,UAAW,qBACvE76C,EAAA,MAAM,mBAAoBa,CAAO,EAC1Ca,EAAO6iD,KAA4BE,EAAAh/C,EAAE,SAAS,OAAX,YAAAg/C,EAAiB,SAAU,oBAAoB,EAE1F,EAKA,MAAM,QAAQ,CAAC,OAAA/iD,GAASR,EAAoC,CACxD,MAAMoC,EAAS,IAAI,gBAAgBpC,CAAI,EAAE,SAAS,EAE9C,IACA,MAAM6B,EAAe,MAAMlB,EAAkBH,EAAQ,qBAAsB,UAAW,IAAMsB,EAAM,IAAI,sBAAsBM,CAAM,EAAE,CAAC,EACrI5B,EAAO0iD,GAAyBrhD,EAAa,QAAU,EAAE,OACjD,EAEhB,EAKA,MAAM,kBAAkB,CAAC,OAAArB,GAASR,EAA6B,OAAW,CACtE,MAAMw5C,EAAUx5C,GAAA,MAAAA,EAAM,QAAU,YAAYA,EAAK,OAAO,GAAK,GAEzD,IACA,MAAM6B,EAAe,MAAMlB,EAAkBH,EAAQ,qBAAsB,kBAAmB,IAAMsB,EAAM,IAAI,sBAAsB03C,CAAO,EAAE,CAAC,EAC9Ih5C,EAAO,sBAAuBqB,EAAa,gBAAkB,EAAE,OACnD,EAEpB,EAKA,MAAM,iBAAiB,CAAC,OAAArB,GAASgN,EAAc,CAC3C,MAAM3L,EAAe,MAAMlB,EAAkBH,EAAQ,qBAAsB,kBAAmB,IAAMsB,EAAM,IAAI,uBAAuB0L,CAAI,EAAE,CAAC,EAC5IhN,EAAO4iD,GAA0BvhD,EAAa,eAAiB,EAAE,CACrE,EAKA,MAAM,oBAAoB,CAAC,OAAArB,GAASgjD,EAA8B,CAC1D,IACA,MAAM3hD,EAAe,MAAMlB,EAAkBH,EAAQ,qBAAsB,kBAAmB,IAAMsB,EAAM,IAAI,uBAAuB0hD,EAAc,IAAI,GAAIA,CAAa,CAAC,EACzK,OAAAhjD,EAAO4iD,GAA0BvhD,EAAa,eAAiB,EAAE,EAC1DA,EAAa,mBACR,EAEpB,EAKA,MAAM,mBAAmB,CAAC,OAAArB,GAASgjD,EAA8B,CAC7D,MAAM3hD,EAAe,MAAMlB,EAAkBH,EAAQ,qBAAsB,kBAAmB,IAAMsB,EAAM,KAAK,uBAAuB0hD,EAAc,IAAI,QAAQ,CAAC,EACjK,OAAAhjD,EAAO4iD,GAA0BvhD,EAAa,eAAiB,EAAE,EAC1DA,EAAa,aACxB,EAKA,MAAM,sBAAsB,CAAC,OAAArB,GAASgjD,EAA8B,CAC5D,IACM,MAAA7iD,EAAkBH,EAAQ,qBAAsB,kBAAmB,IAAMsB,EAAM,KAAK,uBAAuB0hD,EAAc,IAAI,YAAY,CAAC,OACpI,EAChB,CAER,EAEe/Q,GAAA,CACX,WAAY,SACZ1xC,GAAA,UACAC,GAAA,QACAY,GACAqV,UACJ,EC9KMlW,GAAkC,CACpC,QAAS,CACL,oBAAqB,GACrB,oBAAqB,GACrB,yBAA0B,GAC1B,iBAAkB,EACtB,EACA,oBAAqB,EACzB,EAEMkW,GAAU,CACZ,QAAUlW,GAAoCA,EAAM,QACpD,oBAAsBA,GAAoCA,EAAM,mBACpE,EAEMC,GAAY,CACd,CAACq9C,EAAyB,EAAEt9C,EAAiCG,EAAgD,CACzGH,EAAM,QAAQG,EAAQ,OAAO,EAAIA,EAAQ,OAC7C,EACA,CAACuiD,EAA+B,EAAE1iD,EAAiC2iD,EAAgC,CAC/F3iD,EAAM,oBAAsB2iD,CAAA,CAEpC,EAEM9hD,GAAU,CAKZ,MAAM,iBAAiB,CAAC,OAAApB,GAAS,CACzB,IACM,MAAAqB,EAAe,MAAMlB,EAAkBH,EAAQ,sBAAuB,UAAW,IAAMsB,EAAM,IAAI,2BAA2B,CAAC,EAC5HtB,EAAA,4BAA6BqB,EAAa,OAAO,OAC5C,EAEpB,EAKA,MAAM,kBAAkB,CAAC,OAAArB,GAASmjD,EAAgB,SAC1C,IACA,MAAM9hD,EAAe,MAAMlB,EAAkBH,EAAQ,sBAAuB,sBAAuB,IAAMsB,EAAM,KAAK,4BAA6B,CAAC,OAAA6hD,CAAO,EAAC,EACnJnjD,EAAA,4BAA6BqB,EAAa,OAAO,EACxD/C,EAAS,MAAM,6BAA6B,EAC5CA,EAAS,MAAM,gBAAiB,CAC5B,KAAM,UACN,QAAS,qBACZ,QACIgC,EAAO,CACZhC,EAAS,MAAM,8BAA6BiD,GAAAC,EAAAlB,GAAA,YAAAA,EAAO,WAAP,YAAAkB,EAAiB,OAAjB,YAAAD,EAAuB,UAAW,oBAAoB,EAE1G,EAEA,MAAM,kBAAkB,CAAC,OAAAvB,GAASmjD,EAA6B,SACvD,IACA,MAAM9hD,EAAe,MAAMlB,EAAkBH,EAAQ,sBAAuB,sBAAuB,IAAMsB,EAAM,OAAO,6BAA6B6hD,EAAO,IAAI,EAAE,CAAC,EAC1JnjD,EAAA,4BAA6BqB,EAAa,OAAO,EACxD/C,EAAS,MAAM,6BAA6B,EAC5CA,EAAS,MAAM,gBAAiB,CAC5B,KAAM,UACN,QAAS,uBACZ,QACIgC,EAAO,CACZhC,EAAS,MAAM,8BAA6BiD,GAAAC,EAAAlB,GAAA,YAAAA,EAAO,WAAP,YAAAkB,EAAiB,OAAjB,YAAAD,EAAuB,UAAW,oBAAoB,EAE1G,EAEA,MAAM,qBAAqB,CAAC,OAAAvB,GAASmjD,EAA6B,CAC1D,IACA,MAAM9hD,EAAe,MAAMlB,EAAkBH,EAAQ,sBAAuB,sBAAuB,IAAMsB,EAAM,IAAI,6BAA6B6hD,EAAO,IAAI,aAAa,CAAC,EAClKnjD,EAAA,4BAA6BqB,EAAa,OAAO,OAC5C,EAEpB,EAEA,MAAM,iCAAiC,CAAC,OAAArB,GAASmjD,EAA6B,CACtE,IACA,MAAM9hD,EAAe,MAAMlB,EAAkBH,EAAQ,sBAAuB,2BAA4B,IAAMsB,EAAM,IAAI,6BAA6B6hD,EAAO,IAAI,2BAA2B,CAAC,EACrLnjD,EAAA,4BAA6BqB,EAAa,OAAO,OAC5C,EAEpB,EAEA,MAAM,0BAA0B,CAAC,OAAArB,GAASmjD,EAA6B,SAC/D,IACA,MAAM9hD,EAAe,MAAMlB,EAAkBH,EAAQ,sBAAuB,2BAA4B,IAAMsB,EAAM,IAAI,6BAA6B6hD,EAAO,IAAI,GAAI,CAAC,MAAOA,EAAO,MAAM,CAAC,EACnLnjD,EAAA,4BAA6BqB,EAAa,OAAO,EACxD/C,EAAS,MAAM,gBAAiB,CAC5B,KAAM,UACN,QAAS,yBACZ,QACIgC,EAAO,CACZmB,EAAK,MAAM,CACP,UAASF,GAAAC,EAAAlB,GAAA,YAAAA,EAAO,WAAP,YAAAkB,EAAiB,OAAjB,YAAAD,EAAuB,UAAW,qBAC9C,EAET,EAEA,MAAM,0BAA0B,CAAC,OAAAvB,GAASmjD,EAA6B,SACnE,GAAIA,EAAO,KACH,IACA,MAAM9hD,EAAe,MAAMlB,EAAkBH,EAAQ,sBAAuB,sBAAuB,IAAMsB,EAAM,KAAK,6BAA6B6hD,EAAO,IAAI,cAAc,CAAC,EACpKnjD,EAAA,4BAA6BqB,EAAa,OAAO,QACnDf,EAAO,CACZmB,EAAK,MAAM,CACP,UAASF,GAAAC,EAAAlB,GAAA,YAAAA,EAAO,WAAP,YAAAkB,EAAiB,OAAjB,YAAAD,EAAuB,UAAW,qBAC9C,MAID,KACM,MAAAF,EAAe,MAAMlB,EAAkBH,EAAQ,sBAAuB,sBAAuB,IAAMsB,EAAM,KAAK,uCAAuC,CAAC,EACrJtB,EAAA,4BAA6BqB,EAAa,OAAO,OAC5C,EAGxB,EAEA,MAAM,cAAc,CAAC,OAAArB,GAASiyC,EAAe,SACrC,IACM,MAAA9xC,EAAkBH,EAAQ,sBAAuB,mBAAoB,IAAMsB,EAAM,KAAK,4CAA6C,CAAC,MAAA2wC,CAAK,CAAC,CAAC,EACjJ3zC,EAAS,MAAM,yBAAyB,EACxCA,EAAS,MAAM,gBAAiB,CAC5B,KAAM,UACN,QAAS,sBAAsB2zC,CAAK,GACvC,QACI3xC,EAAO,CACZmB,EAAK,MAAM,CACP,UAASF,GAAAC,EAAAlB,GAAA,YAAAA,EAAO,WAAP,YAAAkB,EAAiB,OAAjB,YAAAD,EAAuB,UAAW,qBAC9C,EACL,CAER,EAEe6hD,GAAA,CACX,WAAY,SACZ7iD,GAAA,UACAC,GAAA,QACAY,GACAqV,UACJ,ECEMlW,GAAuB,CACzB,KAAM,GACN,QAAS,CACL,SAAU,GACV,UAAW,GACX,OAAQ,GACR,UAAW,GACX,QAAS,GACT,eAAgB,GAChB,cAAe,GACf,iBAAkB,GAClB,kBAAmB,GACnB,eAAgB,GAChB,eAAgB,GAChB,SAAU,EACd,EACA,SAAU,CAAC,EACX,SAAU,CAAC,EACX,UAAW,CAAC,EACZ,SAAU,KACV,gBAAiB,GACjB,gBAAiB,CAAC,EAClB,aAAc,IAAIhB,GAClB,iBAAkB,CAAC,EACnB,gBAAiB,CACb,YAAa,EACjB,EAEA,eAAgB,CACZ,KAAM,EACN,aAAc,GACd,OAAQ,CAAC,YAAY,EACrB,SAAU,CAAC,EAAI,EACf,OAAQ,CACJ,SAAU,CAAC,EACX,SAAU,GACV,OAAQ,GACR,OAAQ,CAAC,EACT,KAAM,CACF,IAAK,GACL,IAAK,GAEb,EACA,QAAS,EACb,EACA,oBAAqB,CACjB,aAAc,EACd,KAAM,EACN,UAAW,EACX,SAAU,EACV,GAAI,EACJ,MAAO,EACP,gBAAiB,CACrB,EACA,iBAAkB,CACd,GAAI,GACJ,YAAa,EACb,YAAa,OAAO,WACpB,iBAAkB,EAClB,kBAAmB,EACnB,qBAAsB,EACtB,WAAY,KACZ,YAAa,KACb,aAAc,IAClB,EACA,sBAAuB,EAC3B,EAEMkX,GAAU,CACZ,KAAOlW,GAAyBA,EAAM,KACtC,gBAAkBA,GAAyBA,EAAM,gBACjD,iBAAmBA,GAAyBA,EAAM,iBAClD,sBAAwBA,GAAyBA,EAAM,sBACvD,QAAUA,GAAyBA,EAAM,QACzC,SAAWA,GAAyBA,EAAM,SAC1C,SAAWA,GAAyBA,EAAM,SAC1C,UAAYA,GAAyBA,EAAM,UAC3C,SAAWA,GAAyBA,EAAM,SAC1C,gBAAkBA,GAAyBA,EAAM,gBACjD,gBAAkBA,GAAyBA,EAAM,gBACjD,aAAeA,GAAyBA,EAAM,aAC9C,iBAAmBA,GAAyBA,EAAM,iBAClD,eAAiBA,GAAyBA,EAAM,eAChD,oBAAsBA,GAAyBA,EAAM,mBACzD,EAEMC,GAAY,CACd,CAAC6iD,EAA0B,EAAE9iD,EAAsBG,EAAgD,CAC/FH,EAAM,QAAQG,EAAQ,OAAO,EAAIA,EAAQ,OAC7C,EACA,CAAC4iD,EAA4B,EAAE/iD,EAAsBf,EAAyD,CAC1G,GAAI,OAAOA,EAAK,KAAQ,UAAYA,EAAK,eAAe,OAAO,EAAG,CAE9D,GAAI,CAACe,EAAM,iBAAiB,eAAef,EAAK,GAAG,EAAG,CAClD,QAAQ,MAAM,QAAQA,EAAK,GAAG,uCAAuC,EACrE,OAEJe,EAAM,iBAAiBf,EAAK,GAAG,EAAIA,EAAK,WACjC,OAAOA,GAAS,SAEhB,eAAQA,CAAI,EAAE,QAAQ,CAAC,CAACZ,EAAKE,CAAK,IAAM,CAC3C,GAAI,CAACyB,EAAM,iBAAiB,eAAe3B,CAAG,EAAG,CACrC,aAAK,QAAQA,CAAG,uCAAuC,EAC/D,OAEJ2B,EAAM,iBAAiB3B,CAAG,EAAIE,CAAA,CACjC,EAED,QAAQ,MAAM,0DAA0D,CAEhF,EAEA,CAACykD,EAAuB,EAAEhjD,EAAsBw4B,EAA6B,CACzE,QAAQ,IAAI,mBAAmB,EAC/B,QAAQ,IAAIA,CAAS,EACrBx4B,EAAM,UAAYw4B,EAAU,KAE5B,MAAMjlB,EAAOilB,GAAA,YAAAA,EAAW,KACpBjlB,IACAvT,EAAM,oBAAsB,CACxB,aAAcuT,EAAK,aACnB,KAAMA,EAAK,KACX,UAAWA,EAAK,UAChB,SAAUA,EAAK,SACf,GAAIA,EAAK,GACT,MAAOA,EAAK,MACZ,gBAAiBA,EAAK,eAC1B,EAER,EACA,CAAC0vC,EAAkB,EAAEjjD,EAAsBurB,EAA6B,CACpEvrB,EAAM,SAAWurB,EACjBvrB,EAAM,gBAAkB,EAC5B,EACA,CAACkjD,EAA4B,EAAEljD,EAAsBmjD,EAAW,CAC5DnjD,EAAM,SAAS,UAAYmjD,CAC/B,EACA,CAACC,EAA2B,EAAEpjD,EAAsBkjB,EAAU,CAC1DljB,EAAM,iBAAmBkjB,CAC7B,EACA,CAACmgC,EAA2B,EAAErjD,EAAsBf,EAAwB,CACxE,QAAQ,IAAI,uBAAuB,EACnC,QAAQ,IAAIA,CAAI,EAEV,MAAAoyB,EAAYpyB,EAAK,KAAO,EACxB86B,EAAW/5B,EAAM,sBAAsBqxB,CAAS,EAAE,SAClDiyB,EAAavpB,EAAS,UAAW3K,GAAwBA,EAAE,KAAOnwB,EAAK,EAAE,EAE3EqkD,IAAe,KACftjD,EAAM,sBAAsBqxB,CAAS,EAAE,SAASiyB,CAAU,EAAI,CAAC,GAAGvpB,EAASupB,CAAU,EAAG,GAAGrkD,CAAI,EAEvG,EACA,CAACskD,EAAoB,EAAEvjD,EAAsB0M,EAA6D,CACtG,QAAQ,IAAI,gBAAgB,EAC5B,QAAQ,IAAIA,CAAO,EACnB1M,EAAM,gBAAkB0M,EAAQ,KAG1B,MAAA/N,EAAS+N,EAAQ,KAAK,KAAK,CAAC7N,EAAGC,IAAMD,EAAE,KAAOC,EAAE,IAAI,EAE1DkB,EAAM,sBAAwB0M,EAAQ,WAAW,IAAI,CAACwkB,EAAGnqB,IAAU,CAC/D,MAAMquB,EAAaruB,EAAQ,EACvB,IAAAgzB,EAAWp7B,EAAO,OAAQywB,GAAMA,EAAE,OAASgG,CAAU,GAAK,CAAC,EAEpD,OAAA2E,IAAS,IAAKpK,GAAM,CAC3B,MAAM1wB,EAAO0wB,EACPqK,EAAUrK,GAAA,YAAAA,EAAG,QACb7lB,EAAQ6lB,GAAA,YAAAA,EAAG,MAEb,GAAAA,EAAE,OAAS,QAAS,CACpB,MAAMsK,EAAS5wB,EAAA,IAAIsmB,EAAG,SAAU,EAAK,EAC9B,OACH,GAAG1wB,EACH,OAAAg7B,EACA,KAAMA,EAASh7B,EAAK,KAAO,GAC3B,YAAaA,EAAK,KAClB,QAASA,EAAK,KACd,MAAO6K,GAAS7K,EAAK,IACzB,EAEA,OAAA0wB,EAAE,OAAS,OACJ,CACH,GAAG1wB,EACH,QAAQ0wB,GAAA,YAAAA,EAAG,SAAU,GACrB,YAAa1wB,EAAK,KAClB,KAAMA,EAAK,UAAY+6B,EAAU/6B,EAAK,KAAO,GAC7C,MAAO6K,GAAS7K,EAAK,IACzB,EAEA0wB,EAAE,OAAS,aACJ,CACH,GAAG1wB,EACH,UAAU0wB,GAAA,YAAAA,EAAG,WAAY,GACzB,QAAQA,GAAA,YAAAA,EAAG,SAAU,GACrB,KAAKA,GAAA,YAAAA,EAAG,MAAO,IACnB,EAEAA,EAAE,OAAS,WACJ,CACH,GAAG1wB,EACH,QAASA,EAAK,SAClB,EAGG,CACH,GAAG0wB,EACH,OAAQ,GACR,OAAQ,GACR,IAAK,GACL,QAAS,WACb,EACH,EAEM,CACH,KAAMyF,EACN,KAAMlE,EACN,SAAA6I,CACJ,EACH,CACL,EACA,CAACypB,EAAyB,EAAExjD,EAAsBf,EAAuC,CACrFe,EAAM,gBAAgBf,EAAK,GAAG,EAAIA,EAAK,KAC3C,EACA,CAACwkD,EAAwB,EAAEzjD,EAAsBf,EAAM,CACnD,QAAQ,IAAI,oBAAoB,EAChC,QAAQ,IAAIA,CAAI,EAEhBe,EAAM,eAAef,EAAK,GAAG,EAAIA,EAAK,MAE9C,EAEM4B,GAAU,CAMZ,MAAM,cAAc,CAAC,OAAApB,GAAS,CAAC,KAAAgN,EAAM,YAAAi3C,EAAa,aAAAC,EAAc,OAAAC,GAK7D,SACO,MAAAC,EAAc,IAAI,gBACpBD,GAAQC,EAAY,OAAO,SAAU,MAAM,EAC3CF,GAAcE,EAAY,OAAO,MAAOF,CAAY,EAIlD,MAAA/hD,EAAciiD,EAAY,WAAa,IAAIA,EAAY,UAAU,GAAK,GACtEC,EAAcF,EAAS,WAAWhiD,CAAW,GAAK,GAAGA,CAAW,GAEhEd,EAAe,MAAMlB,EAAkBH,EAAQ,uBAAwB,cAAe,IAAMsB,EAAM,IAAI,mBAAmB0L,CAAI,IAAIi3C,CAAW,GAAGI,CAAW,EAAE,CAAC,EAC7Jv4B,GAAWzqB,GAAA,YAAAA,EAAc,WAAY,CAAC,EACtCq4B,GAAmBr4B,GAAA,YAAAA,EAAc,mBAAoB,CAAC,EACtDijD,GAAe5qB,GAAA,YAAAA,EAAkB,QAAQ5N,GAAA,YAAAA,EAAU,OAAQ,CAAC,EAClE,QAAQ,IAAI,0BAA0B,MAAM,QAAQw4B,CAAY,CAAC,EAAE,EAEnEtkD,EAAO8jD,GAAsB,CACzB,KAAMQ,EACN,aAAY/iD,GAAAC,EAAAsqB,GAAA,YAAAA,EAAU,WAAV,YAAAtqB,EAAoB,YAApB,YAAAD,EAA+B,kBAAmB,EAAC,CAClE,EACMvB,EAAAwjD,GAAoB13B,CAAQ,EAC5B9rB,EAAA2jD,GAA6BjqB,CAAgB,CACxD,EAKA,MAAM,aAAa,CAAC,OAAA15B,GAAS,SACzB,QAAQ,IAAI,cAAc,EACtB,IACA,MAAMuE,EAAUhE,GAAM,eAEhB,CAAC,OAAA80C,EAAS,GAAI,SAAAZ,EAAW,GAAI,OAAAW,EAAS,CAAC,GAAK7wC,EAE5CggD,EAAc,CAChB,KAAQlP,EAAO,OAAS,EAAKZ,GAAA,MAAAA,EAAW,GAAK,IAAIY,EAAO,CAAC,CAAC,GAAKA,EAAO,CAAC,EAAK,KAC5E,mBAAoBD,EAAO,UAAY,KACvC,mBAAoBA,EAAO,UAAY,KACvC,YAAaA,EAAO,QAAU,KAC9B,iBAAkBA,EAAO,QAAU,KACnC,KAAQ7wC,EAAQ,MAAQ,EACxB,aAAgBA,EAAQ,cAAgB,GACxC,QAAWA,EAAQ,QACnB,sBAAqB/C,EAAA4zC,GAAA,YAAAA,EAAQ,OAAR,YAAA5zC,EAAc,MAAO,KAC1C,sBAAqBD,EAAA6zC,GAAA,YAAAA,EAAQ,OAAR,YAAA7zC,EAAc,MAAO,IAC9C,EAGMuC,EAAQnC,GAAqB4iD,EAAa,EAAI,EAC5C,YAAI,sBAAuBzgD,CAAK,EAExC,MAAMzC,EAAe,MAAMlB,EAAkBH,EAAQ,uBAAwB,YAAa,IAAMsB,EAAM,IAAI,eAAewC,CAAK,EAAE,CAAC,EAC1H9D,EAAAujD,GAAyBliD,CAAY,OAChC,EAEpB,EAEA,MAAM,eAAe,CAAC,OAAArB,GAASR,EAAM,SAC7B,IACM,MAAA6B,EAAe,MAAMlB,EAAkBH,EAAQ,uBAAwB,iBAAkB,IAAMsB,EAAM,KAAK,eAAgB9B,CAAI,CAAC,EAC9HQ,EAAAwjD,GAAoBniD,EAAa,QAAQ,EAChD/C,EAAS,MAAM,yBAAyB,QACnCgC,EAAO,CACZhC,EAAS,MAAM,gBAAiB,CAC5B,KAAM,QACN,UAASiD,GAAAC,EAAAlB,GAAA,YAAAA,EAAO,WAAP,YAAAkB,EAAiB,OAAjB,YAAAD,EAAuB,UAAW,sBAC9C,EAET,EAMA,kBAAkB,CAAC,OAAAvB,CAAM,EAAGgN,EAAc,CACtChN,EAAO,uBAAwB,CAAC,QAAS,oBAAqB,QAAS,GAAK,EAE5EsB,EAAM,KAAK,gBAAgB0L,CAAI,QAAQ,EAClC,KAAMpN,GAAa,CAChBI,EAAOwjD,GAAoB55C,EAAA,IAAIhK,EAAU,gBAAiB,CAAE,EAAC,EAChE,EAAE,MAAOmE,GAAM,CAChBzF,EAAS,MAAM,gBAAiB,CAC5B,KAAM,QACN,QAASsL,EAAA,IAAI7F,EAAG,wBAAyB,qBAAqB,EACjE,EACJ,EAAE,QAAQ,IAAM,CACb/D,EAAO,uBAAwB,CAAC,QAAS,oBAAqB,QAAS,GAAM,EAChF,CACL,EAKA,eAAe,CAAC,OAAAA,CAAA,EAAS,CAAC,KAAAgN,EAAM,WAAAuvB,GAAa,CACzCv8B,EAAO,uBAAwB,CAAC,QAAS,iBAAkB,QAAS,GAAK,EAEnEsB,EAAA,KAAK,gBAAgB0L,CAAI,UAAW,CAAC,WAAAuvB,CAAU,CAAC,EACjD,KAAK,IAAM,CACRj+B,EAAS,MAAM,gBAAiB,CAC5B,KAAM,UACN,QAAS,oBACZ,EACJ,EAAE,MAAOyF,GAAM,CAChBzF,EAAS,MAAM,gBAAiB,CAC5B,KAAM,QACN,QAASsL,EAAA,IAAI7F,EAAG,wBAAyB,qBAAqB,EACjE,EACJ,EAAE,QAAQ,IAAM,CACb/D,EAAO,uBAAwB,CAAC,QAAS,iBAAkB,QAAS,GAAM,EAC7E,CACL,EAMA,MAAM,cAAc,CAAC,MAAAO,EAAO,OAAAP,CAAA,EAASR,EAA4B,CAE7D,IAAI2C,EAAc,GACdyH,EAAA,IAAIpK,EAAM,QAAQ,IACJ2C,EAAA,WAGd,IACA,MAAMd,EAAe,MAAMlB,EAAkBH,EAAQ,uBAAwB,gBAAiB,IAAMsB,EAAM,KAAK,gBAAgB9B,EAAK,IAAI,IAAIA,EAAK,WAAW,aAAa2C,CAAW,GAAI3C,CAAI,CAAC,EACpLlB,EAAA,MAAM,0BAA2B+C,CAAY,EACtDrB,EAAOyjD,GAA8BpiD,EAAa,SAAS,WAAa,EAAE,EACnErB,EAAA2jD,GAA6BtiD,EAAa,QAAQ,EAEzDd,EAAM,aAAa,iBAAiB,OACxB,EAEpB,EAEA,MAAM,iBAAiB,CAAC,OAAAP,GAASR,EAA+B,CAC5D,IAAI2C,EAAc,GACd,OAAAyH,EAAA,IAAIpK,EAAM,QAAQ,IACJ2C,EAAA,WAEX,MAAMhC,EAAkBH,EAAQ,uBAAwB,mBAAoB,IAAMsB,EAAM,OAAO,gBAAgB9B,EAAK,IAAI,IAAIA,EAAK,WAAW,eAAeA,EAAK,YAAY,GAAG2C,CAAW,EAAE,CAAC,CACxM,EAKA,MAAM,aAAa,CAAC,OAAAnC,GAASR,EAA2B,CACpD,OAAO,MAAMW,EAAkBH,EAAQ,uBAAwB,iBAAkB,IAAMsB,EAAM,IAAI,gBAAgB9B,EAAK,IAAI,IAAIA,EAAK,WAAW,GAAIA,CAAI,CAAC,CAC3J,EAMA,cAAc,CAAC,OAAAQ,CAAM,EAAGR,EAAM,CAC1BQ,EAAO,uBAAwB,CAAC,QAAS,iBAAkB,QAAS,GAAK,EACzEsB,EAAM,KAAK,gBAAgB9B,EAAK,IAAI,IAAIA,EAAK,WAAW,SAAUA,CAAI,EACjE,KAAMI,GAAa,CACPtB,EAAA,MAAM,iCAAkCsB,CAAQ,EAC5D,EAAE,MAAM,IAAM,EAClB,EAAE,QAAQ,IAAM,CACbI,EAAO,uBAAwB,CAAC,QAAS,iBAAkB,QAAS,GAAM,EAC7E,CACL,EAOA,MAAM,gBAAgB,CAAC,OAAAA,GAASR,EAA6B,CACzD,MAAM6B,EAAe,MAAMlB,EAAkBH,EAAQ,uBAAwB,YAAa,IAAMsB,EAAM,KAAK,mBAAmB9B,EAAK,IAAI,IAAIA,EAAK,WAAW,UAAWA,CAAI,CAAC,EACpKQ,EAAAwjD,GAAoBniD,EAAa,QAAQ,CACpD,EAEA,MAAM,aAAa,CAAC,MAAAd,EAAO,OAAAP,CAAA,EAAS8rB,EAA6B,SACzD,IACM,MAAA3rB,EAAkBH,EAAQ,uBAAwB,UAAW,IAAMsB,EAAM,KAAK,gBAAgBwqB,EAAS,IAAI,OAAO,CAAC,EACzHxtB,EAAS,MAAM,gBAAiB,CAC5B,KAAM,UACN,QAAS,gCACZ,QACIgC,EAAO,CACZC,EAAM,aAAa,OAAO,MAAIgB,GAAAC,EAAAlB,GAAA,YAAAA,EAAO,WAAP,YAAAkB,EAAiB,OAAjB,YAAAD,EAAuB,SAAU,EAAE,EAEzE,EAGA,MAAM,iBAAiB,CAAC,MAAAhB,EAAO,OAAAP,CAAA,EAAS8rB,EAA6B,SAC7D,IACA,MAAMzqB,EAAe,MAAMlB,EAAkBH,EAAQ,uBAAwB,uBAAwB,IAAMsB,EAAM,KAAK,gBAAgBwqB,EAAS,IAAI,oBAAoB,CAAC,EACjK,YAAKzqB,EAAa,IAAK,QAAQ,QACjCf,EAAO,CACZC,EAAM,aAAa,OAAO,MAAIgB,GAAAC,EAAAlB,GAAA,YAAAA,EAAO,WAAP,YAAAkB,EAAiB,OAAjB,YAAAD,EAAuB,SAAU,EAAE,EAEzE,EAEA,aAAa,CAAC,MAAAhB,EAAO,OAAAP,CAAA,EAASR,EAAsD,CAChFQ,EAAO,uBAAwB,CAAC,QAAS,WAAY,QAAS,GAAK,EAEnEsB,EAAM,KAAK,gBAAgB9B,EAAK,SAAS,IAAI,YAAa,CAAC,MAAOA,EAAK,KAAM,GACxE,KAAMI,GAAa,CAChBtB,EAAS,MAAM,4BAA6BsL,MAAIhK,EAAU,gBAAiB,EAAE,CAAC,EAC9EtB,EAAS,MAAM,gBAAiB,CAC5B,KAAM,UACN,QAAS,uCACZ,EACJ,EAAE,MAAOyF,GAAM,CAChBxD,EAAM,aAAa,OAAO,IAAIqJ,MAAI7F,EAAG,uBAAwB,EAAE,CAAC,EACnE,EAAE,QAAQ,IAAM,CACb/D,EAAO,uBAAwB,CAAC,QAAS,WAAY,QAAS,GAAM,EACvE,EAET,EAEe8rB,GAAA,CACX,WAAY,SACZvrB,GAAA,UACAC,GAAA,QACAY,GACAqV,UACJ,EC/kBMlW,GAAoB,CACxB,QAAS,CACP,SAAU,GACV,YAAa,EACf,EACA,MAAO,CAAC,EACR,WAAY,IACd,EAGMkW,GAAU,CACd,QAAUlW,GAAsBA,EAAM,QACtC,MAAQA,GAAsBA,EAAM,MACpC,WAAaA,GAAsBA,EAAM,UAC3C,EAGMC,GAAY,CAChB,CAACgkD,EAAuB,EAAEjkD,EAAmBG,EAAgD,CAC3FH,EAAM,QAAQG,EAAQ,OAAO,EAAIA,EAAQ,OAC3C,EACA,CAAC+jD,EAAe,EAAElkD,EAAmBmkD,EAAe,CAClDnkD,EAAM,MAAQmkD,CAChB,EACA,CAACC,EAA0B,EAAEpkD,EAAmBqkD,EAAY,CAEpD,MAAAC,EAAgB,CAAE,GAAGD,CAAW,EACtC,OAAOC,EAAc,KACrB,OAAOA,EAAc,MAErBtkD,EAAM,WAAaskD,CACrB,EAEA,CAACC,EAAiB,EAAEvkD,EAAmBmkD,EAAqB,CAEpD,MAAAK,MAAkB,IAClBC,EAAc,CAAC,GAAGzkD,EAAM,MAAO,GAAGmkD,CAAK,EAAE,OAAevhB,GAAA,CAC5D,MAAM8hB,EAAW,CAACF,EAAY,IAAI5hB,EAAK,IAAI,EAC/B,OAAA4hB,EAAA,IAAI5hB,EAAK,IAAI,EAClB8hB,CAAA,CACR,EAEDD,EAAY,KAAK,CAAC5lD,EAAGC,IAAM,KAAK,MAAMA,EAAE,UAAU,EAAI,KAAK,MAAMD,EAAE,UAAU,CAAC,EAC9EmB,EAAM,MAAQykD,CAAA,CAElB,EAGM5jD,GAAU,CAKd,MAAM,SAAS,CAAE,OAAApB,GAAUiN,EAAsB,CAC3C,IACI,MAAA9K,EAAcR,GAAqBsL,CAAO,EAE1C5L,EAAe,MAAMlB,EAAkBH,EAAQ,oBAAoB,WAAY,IAAMsB,EAAM,IAAI,oBAAoBa,CAAW,EAAE,CAAC,EAChInC,EAAA,cAAeqB,EAAa,IAAI,EACvCrB,EAAO,uBAAwBqB,CAAY,OAC7B,EAElB,EAKA,MAAM,WAAW,CAAE,OAAArB,GAAUgN,EAAc,CACrC,IACI,MAAA7M,EAAkBH,EAAQ,oBAAoB,cAAe,IAAMsB,EAAM,OAAO,qBAAqB0L,CAAI,EAAE,CAAC,EAC3GhN,EAAA,YAAaO,GAAM,MAAM,OAAQ4iC,GAASA,EAAK,OAASn2B,CAAI,CAAC,OACtD,EAChB,CAEJ,EAGe03C,GAAA,CACb,WAAY,SACZnkD,GAAA,UACAC,GAAA,QACAY,GACAqV,UACF,EClHMlW,GAAoB,CACtB,QAAS,CACL,SAAU,GACV,aAAc,GACd,YAAa,GACb,aAAc,GACd,WAAY,GACZ,YAAa,EACjB,EACA,UAAW,IAAIhB,GACf,SAAU,CAAC,EACX,OAAQ,KACR,YAAa,CAAC,EACd,WAAY,KACZ,uBAAwB,KACxB,kBAAmB,EACvB,EAEMkX,GAAU,CACZ,QAAUlW,GAAsBA,EAAM,QACtC,UAAYA,GAAsBA,EAAM,UACxC,SAAWA,GAAsBA,EAAM,SACvC,OAASA,GAAsBA,EAAM,OACrC,YAAcA,GAAsBA,EAAM,YAC1C,WAAaA,GAAsBA,EAAM,WACzC,kBAAoBA,GAAsBA,EAAM,kBAChD,uBAAyBA,GAAsBA,EAAM,sBACzD,EAEMC,GAAY,CACd,CAAC0kD,EAAkC,EAAE3kD,EAAmBG,EAAgD,CACpGH,EAAM,QAAQG,EAAQ,OAAO,EAAIA,EAAQ,OAC7C,EACA,CAACykD,EAA0B,EAAE5kD,EAAmB6kD,EAA0B,CACtE7kD,EAAM,SAAW6kD,CACrB,EACA,CAACC,EAAwB,EAAE9kD,EAAmB+kD,EAAsB,CAChE/kD,EAAM,OAAS+kD,CACnB,EACA,CAACC,EAAsB,EAAEhlD,EAAmBilD,EAA2B,CACnEjlD,EAAM,YAAcilD,CACxB,EACA,CAACC,EAAqB,EAAEllD,EAAmB2gB,EAAwB,CAC/D3gB,EAAM,WAAa2gB,CACvB,EACA,CAACwkC,EAAyB,EAAEnlD,EAAmB2gB,EAAwB,CACnE3gB,EAAM,uBAAyB2gB,CACnC,EACA,CAACykC,EAAyB,EAAEplD,EAAmBzB,EAAgB,CAC3DyB,EAAM,kBAAoBzB,EAG1B,WAAW,IAAM,CACbyB,EAAM,kBAAoB,IAC3B,GAAI,CACX,EACA,CAACqlD,EAA0B,EAAErlD,EAAmBD,EAA0C,CACtFC,EAAM,UAAU,OAAO,IAAID,CAAK,CACpC,EACA,CAACulD,EAA6B,EAAEtlD,EAAmBk1C,EAA4B,KAAM,CAC7EA,GAAe,KACfl1C,EAAM,UAAU,OAAO,MAAM,EAE7BA,EAAM,UAAU,OAAO,MAAMk1C,CAAU,CAC3C,CAER,EAEMr0C,GAAU,CAKZ,MAAM,iBAAiB,CAAC,OAAApB,GAAS,CACvB,MAAAqB,EAAe,MAAMlB,EAAkBH,EAAQ,+BAAgC,WAAY,IAAMsB,EAAM,IAAI,cAAc,CAAC,EACzHtB,EAAAmlD,GAA4B9jD,EAAa,QAAQ,CAC5D,EAMA,MAAM,aAAa,CAAC,OAAArB,GAASslD,EAAsB,CAC3C,IACM,MAAAjkD,EAAe,MAAMlB,EAAkBH,EAAQ,+BAAgC,eAAgB,IAAMsB,EAAM,KAAK,eAAgBgkD,CAAM,CAAC,EACtItlD,EAAA,uBAAwBqB,EAAa,QAAQ,QAC/Cf,EAAO,CACN,MAAAA,CAAA,CAEd,EAMA,MAAM,aAAa,CAAC,OAAAN,GAASgN,EAAc,SACnC,IACA,MAAM3L,EAAe,MAAMlB,EAAkBH,EAAQ,+BAAgC,eAAgB,IAAMsB,EAAM,OAAO,gBAAgB0L,CAAI,EAAE,CAAC,EACxIhN,EAAA,uBAAwBqB,EAAa,QAAQ,QAC/Cf,EAAO,CACZmB,QAAK,MAAM,CACP,UAASF,GAAAC,EAAAlB,GAAA,YAAAA,EAAO,WAAP,YAAAkB,EAAiB,OAAjB,YAAAD,EAAuB,UAAW,0BAC9C,EACKjB,CAAA,CAEd,EAKA,MAAM,eAAe,CAAC,OAAAN,GAASgN,EAAc,CACrC,IACA,MAAM3L,EAAe,MAAMlB,EAAkBH,EAAQ,+BAAgC,cAAe,IAAMsB,EAAM,IAAI,gBAAgB0L,CAAI,EAAE,CAAC,EACpIhN,EAAA,qBAAsBqB,EAAa,MAAM,OACpC,EAEpB,EAKA,MAAM,kBAAkB,CAAC,OAAArB,GAASslD,EAAsB,CAChD,IACA,MAAMjkD,EAAe,MAAMlB,EAAkBH,EAAQ,+BAAgC,eAAgB,IAAMsB,EAAM,IAAI,gBAAgBgkD,EAAO,IAAI,GAAIA,CAAM,CAAC,EACpJ,OAAAtlD,EAAA,qBAAsBqB,EAAa,MAAM,EAChDI,EAAK,QAAQ,CACT,QAAS,4BACZ,EACMJ,EAAa,YACR,CACZI,EAAK,MAAM,CACP,QAAS,wBACZ,EAET,EAOA,MAAM,eAAe,CAAC,OAAAzB,GAAS,CACvB,IACM,MAAAqB,EAAe,MAAMlB,EAAkBH,EAAQ,+BAAgC,cAAe,IAAMsB,EAAM,IAAI,kBAAkB,CAAC,EAChItB,EAAA,mBAAoBqB,EAAa,WAAW,OACvC,EAEpB,EAMA,MAAM,cAAc,CAAC,OAAArB,GAASgN,EAAc,CACpC,IACA,MAAM3L,EAAe,MAAMlB,EAAkBH,EAAQ,+BAAgC,cAAe,IAAMsB,EAAM,IAAI,oBAAoB0L,CAAI,EAAE,CAAC,EACxIhN,EAAA,kBAAmBqB,EAAa,UAAU,OACrC,EAEpB,EAKA,MAAM,iBAAiB,CAAC,OAAArB,GAAS8lD,EAA8B,CACvD,IACM,MAAAzkD,EAAe,MAAMlB,EAAkBH,EAAQ,+BAAgC,aAAc,IAAMsB,EAAM,KAAK,mBAAoBwkD,CAAU,CAAC,EAC5I9lD,EAAA0lD,GAA2BrkD,EAAa,UAAU,EACzDI,EAAK,QAAQ,CACT,QAAS,mCACZ,QACInB,EAAO,CACZN,EAAO4lD,GAA4BtlD,EAAM,SAAS,KAAK,MAAM,EAErE,EAKA,MAAM,iBAAiB,CAAC,OAAAN,GAAS8lD,EAA8B,CACvD,IACA,MAAM3lD,EAAkBH,EAAQ,+BAAgC,cAAe,IAAMsB,EAAM,IAAI,oBAAoBwkD,EAAW,IAAI,GAAIA,CAAU,CAAC,EACjJrkD,EAAK,QAAQ,CACT,QAAS,iCACZ,QACInB,EAAO,CACZN,EAAO4lD,GAA4BtlD,EAAM,SAAS,KAAK,MAAM,EAErE,EAKA,MAAM,iBAAiB,CAAC,OAAAN,GAAS8lD,EAA8B,CACvD,IACM,MAAA3lD,EAAkBH,EAAQ,+BAAgC,aAAc,IAAMsB,EAAM,OAAO,oBAAoBwkD,EAAW,IAAI,EAAE,CAAC,EAChI9lD,EAAA2lD,GAA2B,EAAI,EACtClkD,EAAK,QAAQ,CACT,QAAS,mCACZ,OACW,EAChB,CAER,EAEeskD,GAAA,CACX,WAAY,SACZxlD,GAAA,UACAC,GAAA,QACAY,GACAqV,UACJ,EC7MMlW,GAAwB,CAC1B,KAAM,GAEN,QAAS,CACL,MAAO,GACP,OAAQ,GACR,OAAQ,GACR,SAAU,GACV,eAAgB,GAChB,iBAAkB,GAClB,QAAS,EACb,EAEA,iBAAkB,CAAC,EACnB,SAAU,CAAC,EAEX,mBAAoB,CAAC,EAErB,MAAO,CAAC,EACR,YAAa,CAAC,EACd,mBAAoB,CAAC,EAErB,YAAa,EACjB,EAEMkW,GAAU,CACZ,QAAUlW,GAA0BA,EAAM,QAC1C,KAAOA,GAA0BA,EAAM,KACvC,MAAQA,GAA0BA,EAAM,MACxC,YAAcA,GAA0BA,EAAM,YAC9C,mBAAqBA,GAA0BA,EAAM,mBACrD,SAAWA,GAA0BA,EAAM,SAC3C,iBAAmBA,GAA0BA,EAAM,iBACnD,mBAAqBA,GAA0BA,EAAM,mBACrD,YAAcA,GAA0BA,EAAM,WAClD,EAEMC,GAAY,CACd,CAACwlD,EAAwB,EAAEzlD,EAAuB+4C,EAAM,CACpD/4C,EAAM,KAAO+4C,CACjB,EACA,CAAC2M,EAA2B,EAAE1lD,EAAuBG,EAAS,CAC1DH,EAAM,QAAQG,EAAQ,OAAO,EAAIA,EAAQ,OAC7C,EACA,CAACwlD,EAA+B,EAAE3lD,EAAuBg3B,EAAa,CAClEh3B,EAAM,YAAcg3B,CACxB,EACA,CAAC4uB,EAA4B,EAAE5lD,EAAuB6lD,EAAU,CAC5D7lD,EAAM,SAAW6lD,CACrB,EACA,CAACC,EAAyB,EAAE9lD,EAAuB+lD,EAAO,CACtD/lD,EAAM,MAAQ+lD,CAClB,EACA,CAACC,EAA+B,EAAEhmD,EAAuBimD,EAAa,CAClEjmD,EAAM,YAAcimD,CACxB,EACA,CAACC,EAAuC,EAAElmD,EAAuBmmD,EAAS,CACtEnmD,EAAM,mBAAqBmmD,CAC/B,EACA,CAACC,EAAyC,EAAEpmD,EAAuB6lD,EAAU,CACzE7lD,EAAM,iBAAmB6lD,CAAA,CAEjC,EAEMhlD,GAAU,CAEZ,eAAe,CAAC,MAAOwlD,EAAgB,OAAA5mD,EAAQ,YAAA+xC,GAAc8U,EAAc,CACvE7mD,EAAO,wBAAyB,CAAC,QAAS,QAAS,QAAS,GAAK,EAE7D,IAAA25C,EAAYziB,YAAU32B,GAAM,YAAcq5C,GAAMiN,IAASjN,EAAE,IAAI,EAE/DD,IAAc,KACFA,EAAAp5C,GAAM,YAAY,KAAK,CAC/B,KAAAsmD,EACA,QAAS,GACT,UAAW,GACX,OAAQ,GACR,MAAO,GACP,SAAU,YACb,EACDlN,IACA,QAAQ,IAAIA,CAAS,GAGnBp5C,GAAA,YAAYo5C,CAAS,EAAE,QAAU,GACjCp5C,GAAA,YAAYo5C,CAAS,EAAE,UAAY,GACnCr4C,EAAA,IAAI,eAAeywC,EAAY,iBAAiB,EAAE,IAAI,0BAA0B8U,CAAI,QAAQ,EAC7F,KAAK,IAAM,CACFtmD,GAAA,YAAYo5C,CAAS,EAAE,UAAY,GAC5C,EAAE,MAAM,IAAM,CACTp5C,GAAA,YAAYo5C,CAAS,EAAE,UAAY,GAC5C,EAAE,QAAQ,IAAM,CACPp5C,GAAA,YAAYo5C,CAAS,EAAE,QAAU,GACvC35C,EAAO,wBAAyB,CAAC,QAAS,QAAS,QAAS,GAAM,EACrE,CACL,EAEA,MAAM,sBAAsB,CAAC,OAAAA,GAAS8mD,EAAI,SAClC,IACA,MAAMzlD,EAAe,MAAMlB,EAAkBH,EAAQ,wBAAyB,SAAU,IAAMsB,EAAM,IAAI,6BAA6BwlD,EAAG,IAAI,SAAS,CAAC,EACtJ9mD,EAAO,6BAA6BuB,GAAAC,EAAAH,GAAA,YAAAA,EAAc,UAAd,YAAAG,EAAuB,cAAvB,YAAAD,EAAoC,SAAS,EACjFjD,EAAS,MAAM,gBAAiB,CAC5B,KAAM,UACN,QAAS,8CACZ,QACIgC,EAAO,CACZ,QAAQ,IAAIA,CAAK,EAEzB,EACA,aAAa,CAAC,OAAAN,CAAM,EAAG8mD,EAAI,CACvB9mD,EAAO,wBAAyB,CAAC,QAAS,gBAAiB,QAAS,GAAK,EACnEsB,EAAA,KAAK,eAAewxC,GAAe,eAAgB,2BAA0BgU,EAAG,IAAI,gBAAgB,EACrG,KAAK,IAAM,CACRxoD,EAAS,MAAM,gBAAiB,CAC5B,KAAM,UACN,QAAS,0CACZ,EACJ,EAAE,MAAOyF,GAAM,CAChB,QAAQ,IAAIA,CAAC,EAChB,EAAE,QAAQ,IAAM,CACb/D,EAAO,wBAAyB,CAAC,QAAS,gBAAiB,QAAS,GAAM,EAC7E,CACL,EAEA,0BAA0B,CAAC,OAAAA,EAAQ,YAAA+xC,CAAA,EAAc+U,EAAI,CACjD9mD,EAAO,wBAAyB,CAAC,QAAS,SAAU,QAAS,GAAK,EAClEsB,EAAM,OAAO,eAAeywC,EAAY,iBAAiB,EAAE,IAAI,0BAA0B+U,EAAG,IAAI,EAAE,EAC7F,KAAMlnD,GAAa,CAChBI,EAAO,4BAA6B4J,MAAIhK,EAAU,oCAAoC,CAAC,EACvFtB,EAAS,MAAM,qCAAqC,EACpDA,EAAS,MAAM,gBAAiB,CAC5B,KAAM,UACN,QAAS,8CACZ,EACJ,EAAE,MAAOyF,GAAM,CAChB,QAAQ,IAAIA,CAAC,EAChB,EAAE,QAAQ,IAAM,CACb/D,EAAO,wBAAyB,CAAC,QAAS,SAAU,QAAS,GAAM,EACtE,CACL,EAEA,cAAc,CAAC,OAAAA,EAAQ,YAAA+xC,CAAA,EAAc+U,EAAI,CACrC9mD,EAAO,wBAAyB,CAAC,QAAS,iBAAkB,QAAS,GAAK,EAC1EsB,EAAM,IAAI,eAAewxC,GAAe,gBAAgB,0BAA0BgU,EAAG,IAAI,eAAe,EACnG,KAAMlnD,GAAa,CAChBI,EAAO,sBAAuB4J,MAAIhK,EAAU,YAAY,CAAC,EAC5D,EAAE,MAAOmE,GAAM,CAChB,QAAQ,IAAIA,CAAC,EAChB,EAAE,QAAQ,IAAM,CACb/D,EAAO,wBAAyB,CAAC,QAAS,iBAAkB,QAAS,GAAM,EAC9E,CACL,EAEA,oBAAoB,CAAC,OAAAA,CAAA,EAAS,CAAC,GAAA8mD,EAAI,eAAAC,GAAiB,CAChD/mD,EAAO,wBAAyB,CAAC,QAAS,iBAAkB,QAAS,GAAK,EAC1EsB,EAAM,IAAI,eAAewxC,GAAe,eAAgB,2BAA0BgU,EAAG,IAAI,iBAAiBC,CAAc,EAAE,EACrH,KAAMnnD,GAAa,CAChBI,EAAO,4BAA6B4J,MAAIhK,EAAU,WAAW,CAAC,EACjE,EAAE,MAAOmE,GAAM,CAChB,QAAQ,IAAIA,CAAC,EAChB,EAAE,QAAQ,IAAM,CACb/D,EAAO,wBAAyB,CAAC,QAAS,iBAAkB,QAAS,GAAM,EAC9E,CACL,EACA,2BAA2B,CAAC,OAAAA,CAAA,EAAS,CAAC,GAAA8mD,EAAI,eAAAC,GAAiB,CACvD/mD,EAAO,wBAAyB,CAAC,QAAS,UAAW,QAAS,GAAK,EACnEsB,EAAM,IAAI,eAAewxC,GAAe,eAAgB,2BAA0BgU,EAAG,IAAI,iBAAiBC,CAAc,UAAU,EAC7H,KAAMnnD,GAAa,CAChBI,EAAO,oCAAqC4J,MAAIhK,EAAU,cAAc,CAAC,EAC5E,EAAE,MAAOmE,GAAM,CAChB,QAAQ,IAAIA,CAAC,EAChB,EAAE,QAAQ,IAAM,CACb/D,EAAO,wBAAyB,CAAC,QAAS,UAAW,QAAS,GAAM,EACvE,CACL,EAEA,cAAc,CAAC,OAAAA,EAAQ,YAAA+xC,CAAA,EAAc+U,EAAI,CACrC9mD,EAAO,wBAAyB,CAAC,QAAS,WAAY,QAAS,GAAK,EACpEsB,EAAM,IAAI,eAAeywC,EAAY,iBAAiB,EAAE,IAAI,0BAA0B+U,EAAG,IAAI,WAAW,EACnG,KAAMlnD,GAAa,CAChBI,EAAO,yBAA0B4J,MAAIhK,EAAU,eAAe,CAAC,EAC/DI,EAAO,sCAAuC4J,MAAIhK,EAAU,eAAe,CAAC,EAC/E,EAAE,MAAOmE,GAAM,CAChB,QAAQ,IAAIA,CAAC,EAChB,EAAE,QAAQ,IAAM,CACb/D,EAAO,wBAAyB,CAAC,QAAS,WAAY,QAAS,GAAM,EACxE,CACL,EAEA,wBAAwB,CAAC,OAAAA,CAAA,EAAS,CAAC,SAAAiK,EAAU,GAAA68C,GAAK,CAC9C9mD,EAAO,wBAAyB,CAAC,QAAS,kBAAmB,QAAS,GAAK,EAClE1B,EAAA,MAAM,iCAAkC,WAAW,EAE5DgD,EAAM,KAAK,eAAewxC,GAAe,eAAgB,2BAA0BgU,EAAG,IAAI,UAAW,CAAC,SAAA78C,CAAS,GAC1G,KAAMrK,GAAa,CAChBI,EAAO,sBAAuBJ,EAAS,KAAK,QAAS,CAAC,KAAM,GAAK,EAC1DI,EAAA,mBAAoB4J,MAAIhK,EAAS,KAAK,QAAS,WAAY,EAAE,CAAC,EACrEtB,EAAS,MAAM,0CAA0C,EACzDA,EAAS,MAAM,gBAAiB,CAC5B,KAAM,UACN,QAAS,mCACZ,EACJ,EAAE,MAAM,IAAM,EAClB,EAAE,QAAQ,IAAM,CACbA,EAAS,MAAM,qCAAqC,EACpD0B,EAAO,wBAAyB,CAAC,QAAS,kBAAmB,QAAS,GAAM,EAC/E,CACL,EAEA,sBAAsB,CAAC,OAAAA,GAAS,CAC5BA,EAAO,wBAAyB,CAAC,QAAS,mBAAoB,QAAS,GAAK,EAC5EsB,EAAM,IAAI,iCAAiC,EACtC,KAAM1B,GAAa,CACTI,EAAA,sCAAuCJ,EAAS,KAAK,QAAQ,EACvE,EAAE,MAAM,IAAM,EAClB,EAAE,QAAQ,IAAM,CACbI,EAAO,wBAAyB,CAAC,QAAS,mBAAoB,QAAS,GAAM,EAChF,EAET,EAEegnD,GAAA,CACX,WAAY,SACZzmD,GAAA,UACAC,GAAA,QACAY,GACAqV,UACJ,EC5OMlW,GAAwB,CAC1B,QAAS,CACL,MAAO,GACP,KAAM,GACN,SAAU,GACV,SAAU,GACV,SAAU,GACV,KAAM,GACN,SAAU,EACd,EACA,KAAM,IAAIhB,GACV,YAAa,CAAC,EACd,SAAU,CAAC,EACX,SAAU,CAAC,EACX,SAAU,EACd,EAEMkX,GAAU,CACZ,KAAMlW,GAASA,EAAM,KACrB,YAAaA,GAASA,EAAM,YAC5B,QAASA,GAASA,EAAM,QACxB,SAAUA,GAASA,EAAM,SACzB,SAAUA,GAASA,EAAM,SACzB,SAAUA,GAASA,EAAM,QAC7B,EAEMC,GAAY,CACd,CAACymD,EAA2B,EAAE1mD,EAAOG,EAAS,CAC1CH,EAAM,QAAQG,EAAQ,OAAO,EAAIA,EAAQ,OAC7C,EACA,CAACwmD,EAA+B,EAAE3mD,EAAOg3B,EAAa,CAClDh3B,EAAM,YAAcg3B,CACxB,EACA,CAAC4vB,EAA4B,EAAE5mD,EAAO0J,EAAU,CAC5C1J,EAAM,SAAW0J,CACrB,EACA,CAACm9C,EAA4B,EAAE7mD,EAAOs2C,EAAU,CAC5Ct2C,EAAM,SAAWs2C,CACrB,EACA,CAACwQ,EAA4B,EAAE9mD,EAAO+mD,EAAU,CAC5C/mD,EAAM,SAAW+mD,CAAA,CAEzB,EAEMlmD,GAAU,CAEZ,MAAM,CAAC,OAAApB,EAAQ,YAAA+xC,CAAA,EAAcwV,EAAa,CACtCvnD,EAAO,wBAAyB,CAAC,QAAS,QAAS,QAAS,GAAK,EAE3DsB,EAAA,KAAK,eAAeywC,EAAY,iBAAiB,EAAE,IAAI,0BAA2BwV,CAAW,EAC9F,KAAM3nD,GAAa,CAChBtB,EAAS,MAAM,6BAA8BsL,EAAI,IAAAhK,EAAU,eAAe,CAAC,EAC3EtB,EAAS,MAAM,gBAAiB,CAC5B,KAAM,UACN,QAAS,qCACZ,EACJ,EAAE,MAAM,IAAM,EAClB,EAAE,QAAQ,IAAM,CACb0B,EAAO,wBAAyB,CAAC,QAAS,QAAS,QAAS,GAAM,EACrE,CACL,EAEA,QAAQ,CAAC,OAAAA,EAAQ,YAAA+xC,CAAA,EAAcvyC,EAAM,CACjCQ,EAAO,wBAAyB,CAAC,QAAS,QAAS,QAAS,GAAK,EAE3DsB,EAAA,KAAK,eAAeywC,EAAY,iBAAiB,EAAE,IAAI,kCAAmCvyC,CAAI,EAC/F,KAAMI,GAAa,CAChBtB,EAAS,MAAM,kCAAmCsL,EAAI,IAAAhK,EAAU,gBAAgB,CAAC,EACjFtB,EAAS,MAAM,gBAAiB,CAC5B,KAAM,UACN,QAAS,gDACZ,EACJ,EAAE,MAAM,IAAM,EAClB,EAAE,QAAQ,IAAM,CACb0B,EAAO,wBAAyB,CAAC,QAAS,QAAS,QAAS,GAAM,EACrE,CACL,EAEA,QAAQ,CAAC,OAAAA,EAAQ,YAAA+xC,CAAA,EAAcyV,EAAU,CACrCxnD,EAAO,wBAAyB,CAAC,QAAS,OAAQ,QAAS,GAAK,EAEhEsB,EAAM,KAAK,eAAeywC,EAAY,iBAAiB,EAAE,IAAI,2BAA2ByV,EAAS,IAAI,WAAW,EAC3G,KAAM5nD,GAAa,CAChBtB,EAAS,MAAM,gCAAiCsL,EAAI,IAAAhK,EAAU,aAAa,CAAC,EAC/E,EACA,MAAM,IAAM,EACZ,EACA,QAAQ,IAAM,CACXI,EAAO,wBAAyB,CAAC,QAAS,OAAQ,QAAS,GAAM,EACpE,CACT,EAEA,aAAa,CAAC,OAAAA,EAAQ,YAAA+xC,CAAA,EAAcvyC,EAAM,CACtCQ,EAAO,wBAAyB,CAAC,QAAS,WAAY,QAAS,GAAK,EAEpEsB,EAAM,IAAI,eAAeywC,EAAY,iBAAiB,EAAE,IAAI,2BAA2BvyC,EAAK,aAAa,YAAaA,CAAI,EACrH,KAAK,IAAM,CACRlB,EAAS,MAAM,gBAAiB,CAC5B,KAAM,UACN,QAAS,0CACZ,EACJ,EACA,MAAM,IAAM,EACZ,EACA,QAAQ,IAAM,CACX0B,EAAO,wBAAyB,CAAC,QAAS,WAAY,QAAS,GAAM,EACxE,CACT,EAEA,eAAe,CAAC,OAAAA,EAAQ,YAAA+xC,CAAA,EAAcyV,EAAU,CAC5CxnD,EAAO,wBAAyB,CAAC,QAAS,OAAQ,QAAS,GAAK,EAEhEsB,EAAM,KAAK,8BAA8BkmD,EAAS,IAAI,kBAAkB,EACnE,KAAK,IAAM,CACRlpD,EAAS,MAAM,gBAAiB,CAC5B,KAAM,UACN,QAAS,gDACZ,EACJ,EAAE,MAAOyF,GAAM,CAChBzF,EAAS,MAAM,kCAAkC,EACpD,EAAE,QAAQ,IAAM,CACb0B,EAAO,wBAAyB,CAAC,QAAS,OAAQ,QAAS,GAAM,EACpE,CACL,EAEA,cAAc,CAAC,OAAAA,EAAQ,YAAA+xC,CAAA,EAAc0V,EAAe,CAChDznD,EAAO,wBAAyB,CAAC,QAAS,WAAY,QAAS,GAAK,EAEpEsB,EAAM,IAAI,eAAeywC,EAAY,iBAAiB,EAAE,IAAI,2BAA2B0V,CAAa,WAAW,EAC1G,KAAM7nD,GAAa,CAChBI,EAAO,yBAA0B4J,MAAIhK,EAAU,eAAe,CAAC,EAC/DtB,EAAS,MAAM,gBAAiB,CAC5B,KAAM,UACN,QAAS,gDACZ,EACJ,EAAE,MAAM,IAAM,EAClB,EAAE,QAAQ,IAAM,CACb0B,EAAO,wBAAyB,CAAC,QAAS,WAAY,QAAS,GAAM,EACxE,CACL,EAEA,cAAc,CAAC,OAAAA,EAAQ,YAAA+xC,CAAA,EAAc0V,EAAe,CAChDznD,EAAO,wBAAyB,CAAC,QAAS,WAAY,QAAS,GAAK,EAEpEsB,EAAM,IAAI,eAAeywC,EAAY,iBAAiB,EAAE,IAAI,2BAA2B0V,CAAa,WAAW,EAC1G,KAAM7nD,GAAa,CAChBI,EAAO,yBAA0B4J,MAAIhK,EAAU,eAAe,CAAC,EAClE,EAAE,MAAM,IAAM,EAClB,EAAE,QAAQ,IAAM,CACbI,EAAO,wBAAyB,CAAC,QAAS,WAAY,QAAS,GAAM,EACxE,CACL,EAEA,cAAc,CAAC,OAAAA,EAAQ,YAAA+xC,CAAA,EAAc0V,EAAe,CAChDznD,EAAO,wBAAyB,CAAC,QAAS,WAAY,QAAS,GAAK,EAEpEsB,EAAM,IAAI,eAAeywC,EAAY,iBAAiB,EAAE,IAAI,2BAA2B0V,CAAa,WAAW,EAC1G,KAAM7nD,GAAa,CAChBI,EAAO,yBAA0B4J,MAAIhK,EAAU,eAAe,CAAC,EAClE,EAAE,MAAM,IAAM,EAClB,EAAE,QAAQ,IAAM,CACbI,EAAO,wBAAyB,CAAC,QAAS,WAAY,QAAS,GAAM,EACxE,EAET,EAEe0nD,GAAA,CACX,WAAY,SACZnnD,GAAA,UACAC,GAAA,QACAY,GACAqV,UACJ,ECxEMlW,GAAuB,CACzB,QAAS,CACL,eAAgB,GAChB,iBAAkB,GAClB,oBAAqB,GACrB,OAAQ,GACR,cAAe,GACf,cAAe,GACf,cAAe,GACf,cAAe,GACf,eAAgB,GAChB,oBAAqB,GACrB,kBAAmB,GACnB,aAAc,GACd,oBAAqB,GACrB,qBAAsB,EAC1B,EACA,SAAU,CAAC,EACX,QAAS,CAAC,EACV,WAAY,CACR,OAAQ,GACR,OAAQ,EACR,SAAU,KAAK,EAAE,cAAc,UAAU,EAAG,EAAE,EAC9C,iBAAkB,EAClB,oBAAqB,EACrB,oBAAqB,GACrB,YAAa,GACb,iBAAkB,SAClB,aAAc,OACd,QAAS,GACT,WAAY,GACZ,cAAe,KACf,eAAgB,KAChB,eAAgB,WACpB,EACA,UAAW,OACX,gBAAiB,CAAC,EAClB,aAAc,CAAC,EACf,YAAa,IAAIhB,GACjB,0BAA2B,CAAC,EAC5B,qBAAsB,EAC1B,EAGMooD,GAAmD,CACrD,WAAY,SACZpnD,GACA,UAAW,CACP,CAACqnD,EAA0B,EAAErnD,EAAsBG,EAAgD,CAC/FH,EAAM,QAAQG,EAAQ,OAAO,EAAIA,EAAQ,OAC7C,EACA,CAACmnD,EAAiB,EAAEtnD,EAAsBunD,EAAS,CAC/CvnD,EAAM,QAAUunD,CACpB,EACA,CAACC,EAAkB,EAAExnD,EAAO82C,EAAU,CAClC92C,EAAM,SAAW82C,CACrB,EACA,CAAC2Q,EAAyB,EAAEznD,EAAO0nD,EAAkC,CACjE1nD,EAAM,gBAAkB0nD,CAC5B,EACA,CAACC,EAAsC,EAAE3nD,EAAO2gB,EAAM,CAClD3gB,EAAM,0BAA4B2gB,CACtC,EACA,CAACinC,EAAgC,EAAE5nD,EAAO6nD,EAAS,CAC/C7nD,EAAM,qBAAuB6nD,CACjC,EACA,CAACC,EAAuB,EAAE9nD,EAAOf,EAAM,CACnCe,EAAM,aAAef,CACzB,EACA,CAAC8oD,EAAuB,EAAE/nD,EAAO,CAC7BA,EAAM,WAAa,CACf,OAAQ,GACR,OAAQ,EACR,SAAU,KAAK,EAAE,cAAc,UAAU,EAAG,EAAE,EAC9C,iBAAkB,EAClB,oBAAqB,EACrB,oBAAqB,GACrB,YAAa,GACb,iBAAkB,SAClB,aAAc,OACd,QAAS,GACT,WAAY,GACZ,cAAe,KACf,eAAgB,KAChB,eAAgB,WACpB,EAER,EACA,QAAS,CACL,MAAM,aAAa,CAAC,OAAAP,GAASuoD,EAAoB,CACzC,IACA,MAAMlnD,EAAe,MAAMlB,EAAkBH,EAAQ,uBAAwB,eAAgB,IAAMsB,EAAM,IAAI,gBAAgBinD,CAAU,EAAE,CAAC,EACnI,OAAAvoD,EAAA,cAAeqB,EAAa,OAAO,EACnCA,EAAa,cACff,EAAO,CACZ,QAAQ,MAAMA,CAAK,EAE3B,EAEA,cAAc,CAAC,OAAAN,CAAM,EAAGuI,EAAY,CAC1B,MAAAzE,EAAQnC,GAAqB4G,EAAY,EAAI,EAEnDjH,EAAM,IAAI,eAAewC,CAAK,EAAE,EAC3B,KAAMlE,GAAa,CACTI,EAAA,eAAgBJ,EAAS,KAAK,QAAQ,EAC7CtB,EAAS,MAAM,wBAAwB,EAC1C,EAAE,MAAM,IAAM,EAClB,EAAE,QAAQ,IAAM,EAChB,CACL,EAEA,MAAM,oBAAoB,CAAC,OAAA0B,GAAS,CAC5B,IACM,MAAAqB,EAAe,MAAMlB,EAAkBH,EAAQ,uBAAwB,sBAAuB,IAAMsB,EAAM,IAAI,4BAA4B,CAAC,EAC1ItB,EAAA,sBAAuBqB,EAAa,KAAK,QAC3Cf,EAAO,CACZ,QAAQ,MAAMA,CAAK,EAE3B,EACA,MAAM,4BAA4B,CAAC,OAAAN,GAASR,EAAM,SAC1C,IACM,MAAAW,EAAkBH,EAAQ,uBAAwB,uBAAwB,IAAMsB,EAAM,IAAI,qCAAsC9B,CAAI,CAAC,EAC3IiC,EAAK,QAAQ,CACT,QAAS,sCACZ,OACW,CACZA,EAAK,MAAM,CACP,UAASF,GAAAC,EAAA,iBAAG,WAAH,YAAAA,EAAa,OAAb,YAAAD,EAAmB,UAAW,qBAC1C,EAET,EAEA,kBAAkB,CAAC,OAAAvB,GAAS,CACxBsB,EAAM,KAAK,gCAAgC,EACtC,KAAM1B,GAAa,CACTI,EAAA,oBAAqBJ,EAAS,KAAK,MAAM,EACnD,EAAE,MAAM,IAAM,EAClB,EAAE,QAAQ,IAAM,EAChB,CACL,EAEA,MAAM,iBAAiB,CAAC,OAAAI,GAASwoD,EAAoC,CAC7D,IACM,MAAAnnD,EAAe,MAAMlB,EAAkBH,EAAQ,uBAAwB,mBAAoB,IAAMsB,EAAM,KAAK,gCAAiCknD,CAAa,CAAC,EACjKxoD,EAAOgoD,IAA2B3mD,GAAA,YAAAA,EAAc,QAAS,EAAE,EAC3DrB,EAAO,sBAAuBqB,GAAA,YAAAA,EAAc,QAAS,CAAC,KAAM,GAAK,EACjE/C,EAAS,MAAM,4BAA4B,QACtCgC,EAAO,CACZ,QAAQ,MAAMA,CAAK,EAE3B,EAKA,eAAe,CAAC,OAAAN,CAAM,EAAGyoD,EAAS,CAC9BzoD,EAAO,uBAAwB,CAAC,QAAS,iBAAkB,QAAS,GAAK,EAEnEsB,EAAA,KAAK,gBAAgBmnD,EAAQ,IAAI,WAAYA,CAAO,EACrD,KAAM7oD,GAAa,CACTI,EAAA,cAAeJ,EAAS,KAAK,OAAO,EAC3CtB,EAAS,MAAM,yBAAyB,EAExCmD,EAAK,QAAQ,CACT,QAAS,oCACZ,EACJ,EAAE,MAAOsC,GAAM,SAChBtC,EAAK,MAAM,CACP,UAASsC,sBAAG,WAAHA,cAAa,OAAbA,cAAmB,UAAW,qBAC1C,EACJ,EAAE,QAAQ,IAAM,CACb/D,EAAO,uBAAwB,CAAC,QAAS,iBAAkB,QAAS,GAAM,EAC7E,CACL,EAEA,eAAe,CAAC,OAAAA,EAAQ,YAAA+xC,CAAA,EAAc2W,EAAQ,CAC1C1oD,EAAO,uBAAwB,CAAC,QAAS,SAAU,QAAS,GAAK,EAC3DsB,EAAA,KAAK,eAAeywC,EAAY,iBAAiB,EAAE,IAAI,aAAa2W,EAAO,IAAI,UAAW,CAC5F,OAAQA,EAAO,OAClB,EACI,KAAM9oD,GAAa,CACTI,EAAA,cAAeJ,EAAS,KAAK,OAAO,EAC3C6B,EAAK,QAAQ,CACT,QAAS,gCACZ,EACJ,EAAE,MAAOsC,GAAM,SAChB,QAAQ,IAAIA,CAAC,EACbtC,EAAK,MAAM,CACP,UAASsC,sBAAG,WAAHA,cAAa,OAAbA,cAAmB,UAAW,qBAC1C,EACJ,EAAE,QAAQ,IAAM,CACb/D,EAAO,uBAAwB,CAAC,QAAS,SAAU,QAAS,GAAM,EACrE,CACL,EAKA,cAAc,CAAC,MAAAO,EAAO,OAAAP,CAAA,EAAS8nD,EAAS,CACpC9nD,EAAO,uBAAwB,CAAC,QAAS,gBAAiB,QAAS,GAAK,EAGxEsB,EAAM,KAAK,eAAgB,CACvB,QAAAwmD,CAAA,CACH,EAAE,KAAMloD,GAAa,CAClBtB,EAAS,MAAM,yBAA0BsB,EAAS,KAAK,OAAO,EAC9DI,EAAO6nD,GAAmBjoD,EAAS,KAAK,OAAO,EAE/C6B,EAAK,QAAQ,CACT,QAAS,UACZ,EACJ,EAAE,MAAOsC,GAAM,aACZtC,EAAK,MAAM,CACP,UAASsC,sBAAG,WAAHA,cAAa,OAAbA,cAAmB,UAAW,qBAC1C,EACDxD,EAAM,YAAY,OAAO,MAAIwD,sBAAG,WAAHA,cAAa,OAAbA,cAAmB,UAAW,oBAAoB,EAClF,EAAE,QAAQ,IAAM,CACb/D,EAAO,uBAAwB,CAAC,QAAS,gBAAiB,QAAS,GAAM,EAC5E,CACL,EAKA,oBAAoB,CAAC,OAAAA,CAAM,EAAG8nD,EAAS,CACnC9nD,EAAO,uBAAwB,CAAC,QAAS,gBAAiB,QAAS,GAAK,EAElEsB,EAAA,KAAK,eAAgB,CAAC,QAAAwmD,CAAA,CAAQ,EAC/B,KAAMloD,GAAa,CAChBtB,EAAS,MAAM,yBAA0BsB,EAAS,KAAK,OAAO,EAC9DI,EAAO6nD,GAAmBjoD,EAAS,KAAK,OAAO,EAE/C6B,EAAK,QAAQ,CACT,QAAS,UACZ,EACJ,EAAE,MAAOsC,GAAM,SAChB,QAAQ,IAAIA,CAAC,EACbtC,EAAK,MAAM,CACP,UAASsC,sBAAG,WAAHA,cAAa,OAAbA,cAAmB,UAAW,qBAC1C,EACJ,EAAE,QAAQ,IAAM,CACb/D,EAAO,uBAAwB,CAAC,QAAS,gBAAiB,QAAS,GAAM,EAC5E,CACL,EAEA,cAAc,CAAC,OAAAA,CAAM,EAAGgN,EAAM,CAC1BhN,EAAO,uBAAwB,CAAC,QAAS,gBAAiB,QAAS,GAAK,EACxEsB,EAAM,KAAK,gBAAgB0L,CAAI,iBAAiB,EAC3C,KAAMpN,GAAa,CAChBtB,EAAS,MAAM,gCAAiCsB,EAAS,KAAK,OAAO,EAC9DI,EAAA,cAAeJ,EAAS,KAAK,OAAO,EAC9C,EAAE,MAAOmE,GAAM,SAChBtC,EAAK,MAAM,CACP,UAASsC,sBAAG,WAAHA,cAAa,OAAbA,cAAmB,UAAW,qBAC1C,EACJ,EAAE,QAAQ,IAAM,CACb/D,EAAO,uBAAwB,CAAC,QAAS,gBAAiB,QAAS,GAAM,EAC5E,CACL,EAKA,cAAc,CAAC,MAAAO,EAAO,OAAAP,CAAA,EAAS8nD,EAAS,CACpC9nD,EAAO,uBAAwB,CAAC,QAAS,gBAAiB,QAAS,GAAK,EAClE2oD,EAAA,YAAY,OAAO,MAAM,EAEzBrnD,EAAA,KAAK,gBAAgBwmD,EAAQ,IAAI,UAAWA,CAAO,EACpD,KAAMloD,GAAa,CAChBtB,EAAS,MAAM,wBAAwB,EAChC0B,EAAA,cAAeJ,EAAS,KAAK,OAAO,EAC3C6B,EAAK,QAAQ,CACT,QAAS,yBACZ,EACJ,EAAE,MAAOsC,GAAM,aAChBzF,EAAS,MAAM,2BAA0ByF,sBAAG,WAAHA,cAAa,OAAbA,cAAmB,UAAW,oBAAoB,EAC3FxD,EAAM,YAAY,OAAO,MAAIwD,sBAAG,WAAHA,cAAa,OAAbA,cAAmB,UAAW,oBAAoB,EAClF,EAAE,QAAQ,IAAM,CACb/D,EAAO,uBAAwB,CAAC,QAAS,gBAAiB,QAAS,GAAM,EAC5E,CACL,EAKA,YAAY,CAAC,MAAAO,EAAO,OAAAP,CAAA,EAAS8nD,EAAS,CAClC9nD,EAAO,uBAAwB,CAAC,QAAS,gBAAiB,QAAS,GAAK,EAClE2oD,EAAA,YAAY,OAAO,MAAM,EAEzBrnD,EAAA,KAAK,eAAewxC,GAAe,eAAe,CAAC,yBAA0BgV,CAAO,EACrF,KAAMloD,GAAa,CAChBtB,EAAS,MAAM,wBAAwB,EAChC0B,EAAA,cAAeJ,EAAS,KAAK,OAAO,EAC3C6B,EAAK,QAAQ,CACT,QAAS,yBACZ,EACJ,EAAE,MAAOsC,GAAM,SAChBxD,EAAM,YAAY,OAAO,MAAIwD,sBAAG,WAAHA,cAAa,OAAbA,cAAmB,UAAW,oBAAoB,EAClF,EAAE,QAAQ,IAAM,CACb/D,EAAO,uBAAwB,CAAC,QAAS,gBAAiB,QAAS,GAAM,EAC5E,CACL,EAEA,cAAc,CAAC,OAAAA,CAAM,EAAGgN,EAAM,CAC1BhN,EAAO,uBAAwB,CAAC,QAAS,gBAAiB,QAAS,GAAK,EAExEsB,EAAM,OAAO,gBAAgB0L,CAAI,EAAE,EAC9B,KAAK,IAAM,CACR1O,EAAS,MAAM,wBAAwB,EAC1C,EAAE,MAAOyF,GAAM,SAChBtC,EAAK,MAAM,CACP,UAASsC,sBAAG,WAAHA,cAAa,OAAbA,cAAmB,UAAW,qBAC1C,EACJ,EAAE,QAAQ,IAAM,CACb/D,EAAO,uBAAwB,CAAC,QAAS,gBAAiB,QAAS,GAAM,EAC5E,CACL,EAEA,MAAM,0BAA0B,CAAC,OAAAA,GAASN,EAAM,CAC5C,MAAM2B,EAAe,MAAMlB,EAAkBH,EAAQ,uBAAwB,sBAAuB,IAAMsB,EAAM,OAAO,8BAA8B5B,CAAI,EAAE,CAAC,EACrJM,EAAAmoD,GAAkC9mD,EAAa,IAAI,CAC9D,EAMA,6BAA6B,CAAC,OAAArB,CAAM,EAAG8nD,EAAS,CAC5C9nD,EAAO,uBAAwB,CAAC,QAAS,oBAAqB,QAAS,GAAK,EAE5EsB,EAAM,KAAK,gBAAgBwmD,EAAQ,IAAI,eAAe,EACjD,KAAK,IAAM,CACRxpD,EAAS,MAAM,2CAA2C,EAC7D,EAAE,MAAOyF,GAAM,SAChBzF,EAAS,MAAM,6CAA4CyF,sBAAG,WAAHA,cAAa,OAAbA,cAAmB,UAAW,oBAAoB,EAChH,EAAE,QAAQ,IAAM,CACb/D,EAAO,uBAAwB,CAAC,QAAS,oBAAqB,QAAS,GAAM,EAChF,EAET,EACA,QAAS,CACL,QAAUO,GAAyBA,EAAM,QACzC,QAAUA,GAAyBA,EAAM,QACzC,SAAWA,GAAyBA,EAAM,SAC1C,WAAaA,GAAyBA,EAAM,WAC5C,UAAYA,GAAyBA,EAAM,UAC3C,aAAeA,GAAyBA,EAAM,aAC9C,eAAiBA,GAAyBA,EAAM,gBAChD,YAAcA,GAAyBA,EAAM,YAC7C,0BAA4BA,GAAyBA,EAAM,0BAC3D,qBAAuBA,GAAyBA,EAAM,qBAE9D,ECldeqoD,GAAA,CAWb,aAAc,GAMd,SAAU,GAMV,YAAa,GAMb,YAAa,EASf,EChCM,CAAC,aAAAC,GAAA,SAAcC,GAAU,YAAAC,GAAa,YAAAC,EAAe,EAAAJ,GAuCrDroD,GAAuB,CACzB,MAAO,CAAC,EACR,aAAAsoD,GAAA,SACAC,GACA,YAAAC,GACA,YAAAC,GACA,QAAS,CACL,cAAe,GACf,cAAe,GACf,SAAU,GACV,aAAc,EAClB,EACA,cAAe,CACX,IAAK,GACL,iBAAkB,KAClB,eAAgB,KAChB,wBAAyB,KACzB,sBAAuB,KACvB,oCAAqC,KACrC,kCAAmC,KACnC,GAAI,KACJ,gCAAiC,KACjC,8BAA+B,KAC/B,mBAAoB,KACpB,iBAAkB,KAClB,+BAAgC,KAChC,6BAA8B,KAC9B,iCAAkC,KAClC,mCAAoC,KACpC,wBAAyB,KACzB,0BAA2B,KAC3B,yBAA0B,KAC1B,2BAA4B,KAC5B,mBAAoB,KACpB,qBAAsB,KACtB,aAAc,KACd,WAAY,KAEpB,EAEMvyC,GAAU,CACZ,QAAUlW,GAAyBA,EAAM,QACzC,aAAeA,GAAyBA,EAAM,SAC9C,YAAcA,GAAyBA,EAAM,YAC7C,aAAeA,GAAyBA,EAAM,aAC9C,cAAgBA,GAAyBA,EAAM,aACnD,EAEMC,GAAY,CACd,CAACyoD,EAA0B,EAAE1oD,EAAsBG,EAAgD,CAC/FH,EAAM,QAAQG,EAAQ,OAAO,EAAIA,EAAQ,OAC7C,EACA,CAACwoD,EAA+B,EAAE3oD,EAAsB0iB,EAAgC,CAC/EqU,SAAOrU,CAAQ,IAChB1iB,EAAM,cAAgB0iB,EACtB1iB,EAAM,cAAc,IAAM,GAC9B,CAER,EAEMa,GAAU,CACZ,YAAY,CAAC,OAAApB,GAAS,CAClBA,EAAO,uBAAwB,CAAC,QAAS,eAAgB,QAAS,GAAK,EAEvEsB,EAAM,IAAI,cAAc,EACnB,KAAM1B,GAAa,CAChBtB,EAAS,MAAM,uBAAwBsB,EAAS,KAAK,QAAQ,EAC7DI,EAAO,+BAAgCJ,EAAS,KAAK,SAAU,CAAC,KAAM,GAAK,EAC9E,EAAE,MAAM,IAAM,CACftB,EAAS,MAAM,gBAAiB,CAC5B,KAAM,QACN,QAAS,yBACZ,EACJ,EAAE,QAAQ,IAAM,CACb0B,EAAO,uBAAwB,CAAC,QAAS,eAAgB,QAAS,GAAM,EAC3E,CACL,EAEA,MAAM,eAAe,CAAC,OAAAA,GAASR,EAA+C,CACtE,IACM,MAAA6B,EAAe,MAAMlB,EAAkBH,EAAQ,uBAAwB,WAAY,IAAMsB,EAAM,KAAK,eAAgB9B,CAAI,CAAC,EAC/HQ,EAAO,+BAAgCqB,EAAa,SAAU,CAAC,KAAM,GAAK,OAC9D,CACZ/C,EAAS,MAAM,gBAAiB,CAC5B,KAAM,QACN,QAAS,0CACZ,EAET,EAEA,MAAM,2BAA2B,CAAC,OAAA0B,GAAS,CACnC,IACA,MAAMqB,EAAe,MAAMlB,EAAkBH,EAAQ,uBAAwB,gBAAiB,IAAMsB,EAAM,IAAI,6BAA8Bf,GAAM,aAAa,CAAC,EAChK,OAAAjC,EAAS,MAAM,gBAAiB,CAC5B,KAAM,UACN,QAAS,iCACZ,EACM+C,OACK,CACZ/C,EAAS,MAAM,gBAAiB,CAC5B,KAAM,QACN,QAAS,0CACZ,EAET,EAEA,0BAA0B,CAAC,OAAA0B,GAAS,CAChCA,EAAO,uBAAwB,CAAC,QAAS,gBAAiB,QAAS,GAAK,EACxEsB,EAAM,KAAK,kCAAkC,EACxC,KAAM1B,GAAa,SAChBI,EAAO,6BAA6BuB,GAAAC,EAAA5B,GAAA,YAAAA,EAAU,OAAV,YAAA4B,EAAgB,UAAhB,YAAAD,EAAyB,qBAAqB,EACrF,EAAE,MAAM,IAAM,EAClB,EAAE,QAAQ,IAAM,CACbvB,EAAO,uBAAwB,CAAC,QAAS,gBAAiB,QAAS,GAAM,EAC5E,CACL,EAGA,iBAAiB,CAAC,OAAAA,GAAS,CACvBA,EAAO,uBAAwB,CAAC,QAAS,iBAAkB,QAAS,GAAK,EACzEsB,EAAM,IAAI,oBAAoB,EACzB,KAAM1B,GAAa,CACPtB,EAAA,MAAM,yBAA0BsB,EAAS,IAAI,EACzD,EAAE,MAAM,IAAM,EAClB,EAAE,QAAQ,IAAM,CACbI,EAAO,uBAAwB,CAAC,QAAS,iBAAkB,QAAS,GAAM,EAC7E,CACL,EACA,aAAa,CAAC,OAAAA,CAAM,EAAGR,EAAM,CACzBQ,EAAO,uBAAwB,CAAC,QAAS,gBAAiB,QAAS,GAAK,EACxEsB,EAAM,KAAK,aAAc9B,CAAI,EACxB,KAAMI,GAAa,CAChB,QAAQ,IAAIA,CAAQ,EACd,MAAAupD,EAAc,OAAO,IAAI,gBAAgB,IAAI,KAAK,CAACvpD,EAAS,IAAI,CAAC,CAAC,EAClEwpD,EAAO,SAAS,cAAc,GAAG,EACvCA,EAAK,KAAOD,EACPC,EAAA,aAAa,WAAY,sBAAsB,EAC3C,cAAK,YAAYA,CAAI,EAC9BA,EAAK,MAAM,EACXA,EAAK,OAAO,EACf,EAAE,MAAM,IAAM,EAClB,EAAE,QAAQ,IAAM,CACbppD,EAAO,uBAAwB,CAAC,QAAS,gBAAiB,QAAS,GAAM,EAC5E,EAET,EAEeijB,GAAA,CACX,WAAY,SACZ1iB,GAAA,UACAC,GAAA,QACAY,GACAqV,UACJ,EC5LMlW,GAAoB,CACxB,QAAS,CACP,MAAO,GACP,WAAY,GACZ,WAAY,EACd,EACA,YAAa,CAAC,EACd,WAAY,IACd,EAEMkW,GAAU,CACd,YAAalW,GAASA,EAAM,YAC5B,WAAYA,GAASA,EAAM,WAC3B,QAASA,GAASA,EAAM,OAC1B,EAEMC,GAAY,CAChB,CAAC6oD,EAAuB,EAAE9oD,EAAOG,EAAS,CACxCH,EAAM,QAAQG,EAAQ,OAAO,EAAIA,EAAQ,OAC3C,EACA,CAAC4oD,EAAsB,EAAE/oD,EAAOf,EAAM,CACpCe,EAAM,YAAcf,CACtB,EACA,CAAC+pD,EAA0B,EAAEhpD,EAAOf,EAAM,CACxCe,EAAM,WAAaf,CAAA,CAEvB,EAEM4B,GAAU,CASd,MAAM,eAAe,CAAE,OAAApB,GAAU,CAC/BA,EAAO,oBAAqB,CAAE,QAAS,QAAS,QAAS,GAAM,EAGzD,MAAAsB,EAAM,IAAI,mBAA2B,EACxC,KAAM1B,GAAa,CAClBI,EAAO,mBAAoB4J,MAAIhK,EAAU,WAAW,CAAC,EACtD,EAAE,MAAM,IAAM,EAChB,EAAE,QAAQ,IAAM,CACfI,EAAO,oBAAqB,CAAE,QAAS,QAAS,QAAS,GAAO,EACjE,CACH,EACA,cAAc,CAAE,OAAAA,CAAO,EAAGgN,EAAM,CAC9BhN,EAAO,oBAAqB,CAAE,QAAS,QAAS,QAAS,GAAM,EAE/DsB,EAAM,IAAI,oBAAoB0L,CAAI,EAAE,EACjC,KAAMpN,GAAa,CAClBI,EAAO,uBAAwB4J,MAAIhK,EAAU,WAAW,CAAC,EAC1D,EAAE,MAAM,IAAM,EAChB,EAAE,QAAQ,IAAM,CACfI,EAAO,oBAAqB,CAAE,QAAS,QAAS,QAAS,GAAO,EACjE,CACH,EACA,iBAAiB,CAAE,OAAAA,CAAO,EAAGwpD,EAAO,CAClCxpD,EAAO,oBAAqB,CAAE,QAAS,QAAS,QAAS,GAAM,EACzDsB,EAAA,IAAI,oBAAoBkoD,EAAM,IAAI,GAAIA,CAAK,EAC9C,KAAK,IAAM,CACVlrD,EAAS,MAAM,+BAA+B,EAC/C,EAAE,MAAM,IAAM,EAChB,EAAE,QAAQ,IAAM,CACf0B,EAAO,oBAAqB,CAAE,QAAS,QAAS,QAAS,GAAO,EACjE,EAEL,EAEewpD,GAAA,CACb,WAAY,SACZjpD,GAAA,UACAC,GAAA,QACAY,GACAqV,UACF,ECrFMgzC,GAAU,CAAC,EAQXlpD,GAAmB,CACvB,OAAQgwC,GAAG,mBAAmB,EAC9B,QAAAkZ,EACF,EAGMhzC,GAAU,CACd,OAASlW,GAAqBA,EAAM,OACpC,QAAUA,GAAqBA,EAAM,OACvC,EAGMC,GAAY,CAChB,CAACkpD,EAAgB,EAAEnpD,EAAkB,CAAE,OAAAgvC,GAAU,CAC/ChvC,EAAM,OAASgvC,CAAA,CAEnB,EAGMnuC,GAAU,CACd,UAAU,CAAE,OAAApB,GAAU,CAAE,OAAAuvC,GAAU,CAChCvvC,EAAO0pD,GAAkB,CAAE,OAAAna,EAAQ,EAEnC/xD,GAAQ,IAAI,SAAU+xD,EAAQ,CAAE,QAAS,IAAK,EAElD,EAGeoa,GAAA,CACb,WAAY,SACZppD,GAAA,UACAC,GAAA,QACAY,GACAqV,UACF,ECwBMmzC,GAAmC,CACrC,KAAM,GACN,OAAQ,GACR,KAAM,KACN,KAAM,GACN,MAAO,GACP,KAAM,GACN,MAAO,GACP,MAAO,GACP,IAAK,GACL,SAAU,KACV,WAAY,GACZ,cAAe,KACf,MAAO,GACP,QAAS,KACT,MAAO,KACP,MAAO,KACP,OAAQ,KACR,sBAAuB,EACvB,iBAAkB,GAClB,sBAAuB,GACvB,aAAc,GACd,iBAAkB,GAClB,wBAAyB,KACzB,0BAA2B,KAC3B,OAAQ,KACR,QAAS,KACT,qBAAsB,IAC1B,EAEMrpD,GAAsB,CACxB,QAAS,CACL,QAAS,GACT,SAAU,GACV,WAAY,GACZ,YAAa,GACb,cAAe,GACf,eAAgB,GAChB,QAAS,GACT,aAAc,GACd,mBAAoB,GACpB,qBAAsB,GACtB,oBAAqB,GACrB,aAAc,GACd,cAAe,GACf,gBAAiB,GACjB,aAAc,GACd,aAAc,GACd,aAAc,GACd,iBAAkB,GAClB,YAAa,GACb,kBAAmB,GACnB,mBAAoB,GACpB,QAAS,GACT,eAAgB,GAChB,aAAc,GACd,aAAc,GACd,eAAgB,GAChB,eAAgB,GAChB,eAAgB,GAChB,gBAAiB,EACrB,EACA,QAAS,CACL,eAAgB,EACpB,EACA,QAAS,CACL,KAAM,CACF,SAAU,GACV,MAAO,CAAC,EACR,gBAAiB,EACrB,EACA,KAAM,CACF,SAAU,GACV,MAAO,CAAC,EACR,gBAAiB,EACrB,EACA,MAAO,CACH,SAAU,GACV,OAAQ,CAAC,EACT,iBAAkB,EAAC,CAE3B,EAEA,OAAQ,CACJ,wBAAyB,EAC7B,EACA,YAAa,GACb,gBAAiB,GAEjB,KAAM,IAAIhB,GACV,iBAAkB,IAAIA,GACtB,YAAa,CAAC,EACd,kBAAmB,CAAC,EACpB,QAAS,KAET,gBAAiB,KACjB,eAAgB,CACZ,OAAQ,GACR,KAAM,GACN,SAAU,GACV,OAAQ,GACR,KAAM,KACN,QAAS,KACT,KAAM,GACN,YAAa,GACb,KAAM,GACN,UAAW,GACX,SAAU,GACV,cAAe,GACf,YAAa,GACb,YAAa,GACb,cAAe,GACf,MAAO,EACP,OAAQ,GACR,qBAAsB,GACtB,mBAAoB,GACpB,8BAA+B,GAC/B,eAAgB,EAChB,YAAa,EACb,OAAQ,CAAC,EACT,uBAAwB,EACxB,yBAA0B,EAC1B,QAAS,EACT,gBAAiB,EACjB,kBAAmB,KACnB,aAAc,KACd,aAAc,GACd,MAAO,GACP,QAAS,CACL,WAAY,WACZ,aAAc,MACd,mBAAoB,KACpB,OAAQ,EACR,wBAAyB,EACzB,uBAAwB,EACxB,gBAAiB,EACjB,aAAc,GACd,QAAS,GACT,eAAgB,EAChB,gBAAiB,KACjB,QAAS,EACT,cAAe,EACf,0BAA2B,EAC3B,2BAA4B,EAC5B,yBAA0B,CAC9B,EACA,eAAgB,CAAC,EACjB,eAAgB,EAChB,cAAe,EAEf,QAAS,CACL,KAAM,GACN,OAAQ,GACR,KAAM,KACN,KAAM,GACN,MAAO,GACP,KAAM,GACN,MAAO,GACP,MAAO,GACP,IAAK,GACL,SAAU,KACV,WAAY,GACZ,cAAe,KACf,MAAO,GACP,QAAS,KACT,MAAO,KACP,MAAO,KACP,OAAQ,KACR,sBAAuB,EACvB,iBAAkB,GAClB,sBAAuB,GACvB,aAAc,GACd,iBAAkB,GAClB,wBAAyB,KACzB,0BAA2B,KAC3B,OAAQ,KACR,QAAS,KACT,qBAAsB,IAC1B,EACA,SAAU,CAAC,EACX,iBAAkB,CACd,QAAS,GACT,aAAc,GACd,iBAAkB,GAClB,8BAA+B,IAC/B,gBAAiB,EACrB,EACA,oBAAqB,CAAC,EACtB,SAAU,IACd,EAEA,aAAc,CACV,MAAO,YACP,KAAM,OACN,OAAQ,GACR,KAAM,GACN,SAAU,GACV,KAAM,KACN,SAAU,CACN,QAAS,IACb,EACA,aAAc,CAAC,EACf,OAAQ,CACJ,CACI,MAAO,QACP,SAAU,GACV,MAAO,EACP,YAAa,yMACb,YAAa,GACb,YAAa,EACjB,CAER,EACA,aAAc,CAAC,EACf,UAAW,CAAC,EACZ,qBAAsB,GACtB,mBAAoB,CAAC,EACrB,uBAAwB,CAAC,EACzB,4BAA6B,GAC7B,sBAAuB,CAAC,EACxB,UAAW,CAAC,EACZ,cAAe,CAAC,EAChB,qBAAsB,CAAC,EACvB,cAAe,CACX,KAAM,WACN,KAAM,EAAC,CAEf,EAEMkX,GAAU,CACZ,YAAclW,GAAwBA,EAAM,YAC5C,QAAUA,GAAwBA,EAAM,QACxC,sBAAwBA,GAAwBA,EAAM,sBACtD,UAAYA,GAAwBA,EAAM,UAC1C,YAAcA,GAAwBA,EAAM,YAC5C,gBAAkBA,GAAwBA,EAAM,gBAChD,aAAeA,GAAwBA,EAAM,aAC7C,gBAAkBA,GAAwBA,EAAM,gBAChD,eAAiBA,GAAwBA,EAAM,eAC/C,uBAAyBA,GAAwBA,EAAM,eAAe,SACtE,eAAiBA,GAAwBA,EAAM,QAC/C,cAAgBA,GAAwBA,EAAM,OAC9C,QAAUA,GAAwBA,EAAM,QACxC,QAAUA,GAAwBA,EAAM,QACxC,KAAOA,GAAwBA,EAAM,KACrC,iBAAmBA,GAAwBA,EAAM,iBACjD,oBAAsBA,GAAwBA,EAAM,aACpD,oBAAsBA,GAAwBA,EAAM,qBACpD,uBAAyBA,GAAwBA,EAAM,uBACvD,mBAAqBA,GAAwBA,EAAM,mBACnD,cAAgBA,GAAwBA,EAAM,cAC9C,QAAUA,GAAwBA,EAAM,QACxC,UAAYA,GAAwBA,EAAM,UAC1C,cAAgBA,GAAwBA,EAAM,cAE9C,gBAAkBA,IACNA,EAAM,aAAe,IACxB,UAAkB,CAACsI,EAAQ,QAAUA,EAAQ,QAAUA,EAAQ,QAAQ,EACvE,QACA,KAAK,CAACzJ,EAAGC,KAAOD,EAAE,OAAS,IAAMC,EAAE,OAAS,EAAE,CAE3D,EAEA,SAASwqD,GAAgBtpD,EAAqBupD,EAAmBC,EAAiBvqD,EAA2B,CACrGA,IACAe,EAAM,QAAQupD,CAAS,EAAEC,CAAO,EAAIvqD,EAE5C,CAEA,MAAMgB,GAAY,CACd,CAACwpD,EAAyB,EAAEzpD,EAAqBG,EAAgD,CAC7FH,EAAM,QAAQG,EAAQ,OAAO,EAAIA,EAAQ,OAC7C,EACA,CAACupD,EAAuB,EAAE1pD,EAAqB2pD,EAA4C,CACvF3pD,EAAM,OAAO2pD,EAAM,OAAO,GAAIA,GAAA,YAAAA,EAAO,QAAS,EAClD,EACA,CAACC,EAAwB,EAAE5pD,EAAqB0M,EAA4C,CACxF1M,EAAM,QAAQ0M,EAAQ,KAAK,EAAIA,EAAQ,MAEvC,WAAW,IAAM,CACb1M,EAAM,QAAQ0M,EAAQ,KAAK,EAAI,IAChC,GAAG,CACV,EACA,CAACm9C,EAA0C,EAAE7pD,EAAqBf,EAI/D,CACCqqD,GAAgBtpD,EAAO,OAAQ,kBAAmBf,EAAK,KAAK,EAC5DqqD,GAAgBtpD,EAAO,OAAQ,kBAAmBf,EAAK,KAAK,EAC5DqqD,GAAgBtpD,EAAO,QAAS,mBAAoBf,EAAK,MAAM,CACnE,EACA,CAAC6qD,EAAyC,EAAE9pD,EAAqBf,EAI9D,CACCqqD,GAAgBtpD,EAAO,OAAQ,QAASf,EAAK,KAAK,EAClDqqD,GAAgBtpD,EAAO,OAAQ,QAASf,EAAK,KAAK,EAClDqqD,GAAgBtpD,EAAO,QAAS,SAAUf,EAAK,MAAM,CACzD,EACA,CAAC8qD,EAA2B,EAAE/pD,EAAqB60C,EAAmC,CAClF70C,EAAM,QAAQ60C,CAAM,EAAE,SAAW,CAAC70C,EAAM,QAAQ60C,CAAM,EAAE,QAC5D,EACA,CAACmV,EAA0B,EAAEhqD,EAAqB,CAC9CA,EAAM,QAAQ,KAAK,MAAQ,CAAC,EAC5BA,EAAM,QAAQ,KAAK,MAAQ,CAAC,EAC5BA,EAAM,QAAQ,MAAM,OAAS,CAAC,EAC9BA,EAAM,QAAQ,KAAK,SAAW,GAC9BA,EAAM,QAAQ,KAAK,SAAW,GAC9BA,EAAM,QAAQ,MAAM,SAAW,EACnC,EACA,CAACiqD,EAAiB,EAAEjqD,EAAqBsI,EAA2B,CAChEtI,EAAM,QAAUsI,EAChBtI,EAAM,YAAc,EACxB,EACA,CAACkqD,EAAsB,EAAElqD,EAAqBmqD,EAAiB,CAC3DnqD,EAAM,YAAcmqD,CACxB,EACA,CAACC,EAAsB,EAAEpqD,EAAqB0J,EAA8B,CACxE1J,EAAM,YAAc0J,EACpB1J,EAAM,gBAAkB,EAC5B,EACA,CAACqqD,EAAwB,EAAErqD,EAAqB6L,EAA0C,CACtF7L,EAAM,qBAAuB6L,CACjC,EACA,CAACy+C,EAA2B,EAAEtqD,EAAqB0J,EAA8B,CAC7E1J,EAAM,kBAAoB0J,CAC9B,EACA,CAAC6gD,EAAiC,EAAEvqD,EAAqB0J,EAA8B,CACnF1J,EAAM,4BAA8B,GACpCA,EAAM,sBAAwB0J,CAClC,EACA,CAAC8gD,EAAsC,EAAExqD,EAAqB,CAAC,KAAAq1C,EAAM,KAAAp2C,GAAO,CACxE,MAAMqJ,EAAUtI,EAAM,sBAAsB,KAAa2gB,KAAK,OAAS00B,CAAI,EAEvE/sC,GAEA,OAAO,KAAKrJ,CAAI,EAAE,QAAeZ,GAAA,CACzB,OAAOY,EAAKZ,CAAG,GAAM,UAAYY,EAAKZ,CAAG,IAAM,MAE1CiK,EAAQjK,CAAG,IAAWiK,EAAAjK,CAAG,EAAI,CAAC,GAGnC,OAAO,KAAKY,EAAKZ,CAAG,CAAC,EAAE,QAAkByD,GAAA,CACrCwG,EAAQjK,CAAG,EAAEyD,CAAM,EAAI7C,EAAKZ,CAAG,EAAEyD,CAAM,EAC1C,GAGOwG,EAAAjK,CAAG,EAAIY,EAAKZ,CAAG,CAC3B,CACH,CAET,EAEA,CAACosD,EAAqB,EAAEzqD,EAAqB0qD,EAAa,CACtD1qD,EAAM,eAAe,QAAQ,IAAM0qD,CACvC,EACA,CAACC,EAAmC,EAAE3qD,EAAqB4qD,EAA8B,CACrF5qD,EAAM,UAAY4qD,CACtB,EACA,CAACC,EAAgC,EAAE7qD,EAAqB8qD,EAA4C,CAChG,QAAQ,IAAI,4BAA4B,EACxC,QAAQ,IAAIA,CAAa,EACzB9qD,EAAM,cAAc8qD,EAAc,GAAG,EAAIA,EAAc,KAC3D,EACA,CAACC,EAAsB,EAAE/qD,EAAqBzB,EAAe,CAEpDyB,EAAM,eAAe,UACtBA,EAAM,eAAe,QAAU,CAAC,GAAGqpD,EAAc,GAIrDrpD,EAAM,eAAe,QAAQ,KAAOzB,CACxC,EACA,CAACysD,EAA4B,EAAEhrD,EAAqBzB,EAAe,CAC3DyB,QAAM,eAAgB,qBAAsBzB,CAAK,CACzD,EACA,CAAC0sD,EAA8B,EAAEjrD,EAAqBzB,EAAe,CAC7DyB,QAAM,eAAgB,uBAAwBzB,CAAK,CAC3D,EACA,CAAC2sD,EAAoC,EAAElrD,EAAqBzB,EAAe,CACnEyB,QAAM,eAAgB,6BAA8BzB,CAAK,CACjE,EACA,CAAC4sD,EAAgC,EAAEnrD,EAAqB6G,EAAoC,CACxF7G,EAAM,mBAAqB6G,CAC/B,EACA,CAACukD,EAAwB,EAAEprD,EAAqBi7C,EAAqB,CACjEj7C,EAAM,cAAgBi7C,CAC1B,EACA,CAACoQ,EAA0B,EAAErrD,EAAqB6G,EAAoC,CAClF7G,EAAM,uBAAyB6G,EAAS,IAAKykD,GAAYA,EAAQ,KAAK,CAC1E,EACA,CAACC,EAAsB,EAAEvrD,EAAqBzB,EAAe,CACrDyB,QAAM,eAAgB,eAAgBzB,CAAK,CACnD,EACA,CAACitD,EAAuB,EAAExrD,EAAqBzB,EAAe,CACtDyB,QAAM,eAAgB,gBAAiBzB,CAAK,CACpD,EACA,CAACktD,EAAuB,EAAEzrD,EAAqB0rD,EAAe,CACtD1rD,QAAM,eAAgB,gBAAiB0rD,CAAK,CACpD,EACA,CAACC,EAAuB,EAAE3rD,EAAqB4rD,EAAe,CACtD5rD,QAAM,eAAgB,gBAAiB4rD,CAAK,CACpD,EACA,CAACC,EAAuB,EAAE7rD,EAAqB8rD,EAAe,CACtD9rD,QAAM,eAAgB,gBAAiB8rD,CAAK,CACpD,EACA,CAACC,EAAuB,EAAE/rD,EAAqBgsD,EAAe,CACtDhsD,QAAM,eAAgB,gBAAiBgsD,CAAK,CACpD,EACA,CAACC,EAAuB,EAAEjsD,EAAqBzB,EAAqB,CAChEyB,EAAM,eAAiB,CACnB,GAAGA,EAAM,eACT,QAAS,CACL,GAAGA,EAAM,eAAe,QACxB,cAAezB,CAAA,CAEvB,CACJ,EAEA,CAAC2tD,EAAkC,EAAElsD,EAAqB,CACtDA,EAAM,eAAe,OAAS,CAACA,EAAM,eAAe,MACxD,EACA,CAACmsD,EAAuC,EAAEnsD,EAAqBosD,EAAc,CACzEpsD,EAAM,eAAe,cAAgBosD,CACzC,EAEA,CAACC,EAA6B,EAAEC,EAAa,CACzC,QAAQ,IAAI,yBAAyB,EACrC,QAAQ,IAAIA,CAAW,CAC3B,EACA,CAACC,EAA+B,EAAEvsD,EAAqBf,EAAW,CAC9D,OAAO,KAAKA,CAAI,EAAE,QAAeZ,GAAA,CACzBY,EAAKZ,CAAG,IAAM,MAAQ,OAAOY,EAAKZ,CAAG,GAAM,SAE3C2B,EAAM,eAAe3B,CAAG,EAAIY,EAAKZ,CAAG,GAG/B2B,EAAM,eAAe3B,CAAG,IAAG2B,EAAM,eAAe3B,CAAG,EAAI,CAAC,GAG7D,OAAO,KAAKY,EAAKZ,CAAG,CAAC,EAAE,QAAkByD,GAAA,CACrC9B,EAAM,eAAe3B,CAAG,EAAEyD,CAAM,EAAI7C,EAAKZ,CAAG,EAAEyD,CAAM,EACvD,EACL,CACH,CACL,EACA,CAAC0qD,EAA6B,EAAExsD,EAAqBsI,EAA2B,CAC5EtI,EAAM,eAAe,KAAOsI,EAAQ,KACpCtI,EAAM,eAAe,QAAQ,KAAOsI,EAAQ,QAAQ,KACpDtI,EAAM,eAAe,QAAQ,KAAOsI,EAAQ,QAAQ,KACpDtI,EAAM,eAAe,QAAQ,MAAQsI,EAAQ,QAAQ,MACrDtI,EAAM,eAAe,QAAQ,MAAQsI,EAAQ,QAAQ,MACrDtI,EAAM,eAAe,QAAQ,MAAQsI,EAAQ,QAAQ,MACrDtI,EAAM,eAAe,QAAQ,OAASsI,EAAQ,QAAQ,OACtDtI,EAAM,eAAe,QAAQ,aAAesI,EAAQ,QAAQ,YAChE,EAEA,CAACmkD,EAAyB,EAAEzsD,EAAqBsI,EAA2B,CACxEtI,EAAM,eAAe,OAAS,GAE1BsI,EAAQ,UAAY,MACpBtI,EAAM,eAAiB,CAAC,GAAGA,EAAM,eAAgB,GAAGsI,CAAO,EAG3DtI,EAAM,eAAe,QAAU,CAAC,GAAGqpD,EAAc,GAEjDrpD,EAAM,eAAiB,CAAC,GAAGA,EAAM,eAAgB,GAAGsI,CAAO,EAG/DtI,EAAM,eAAe,iBAAmB,CACpC,QAASsI,EAAQ,SAAW,GAC5B,gBAAiBA,EAAQ,iBAAmB,EAChD,EAEAtI,EAAM,YAAc,GAGpBA,EAAM,gBAAkB,KAAK,MAAM,KAAK,UAAUA,EAAM,cAAc,CAAC,EAIvE,IAAI0sD,EAAkB,GAEjB1sD,EAAM,cACPA,EAAM,YAAc,CAAC,GAGrBA,EAAM,cACN0sD,EAAkB1sD,EAAM,YAAY,aAAek3C,EAAE,OAAS5uC,EAAQ,IAAI,GAE1EokD,GAAmB,EACnB1sD,EAAM,YAAY0sD,CAAe,EAAIpkD,EAErCtI,EAAM,YAAY,KAAKsI,CAAO,CAEtC,EAEA,CAACqkD,EAAkC,EAAE3sD,EAAqBs2C,EAA8B,CACpFt2C,EAAM,eAAe,SAAWs2C,CACpC,EACA,CAACsW,EAAwC,EAAE5sD,EAAqBf,EAAM,CAC9DA,EAAK,iBACLe,EAAM,eAAe,eAAiBf,EAAK,gBAE3CA,EAAK,yBACLe,EAAM,eAAe,uBAAyBf,EAAK,uBAE3D,EACA,CAAC4tD,EAAsC,EAAE7sD,EAAqB8sD,EAAuB,CACjF9sD,EAAM,eAAe,QAAQ,aAAe8sD,CAChD,EACA,CAACC,EAA2C,EAAE/sD,EAAqBgtD,EAAe,CAC9E,QAAQ,IAAIA,CAAQ,EAChBA,EAAS,6BACThtD,EAAM,eAAe,QAAQ,2BAA6BgtD,EAAS,4BAEnEA,EAAS,2BACThtD,EAAM,eAAe,QAAQ,yBAA2BgtD,EAAS,0BAEjEA,EAAS,4BACThtD,EAAM,eAAe,QAAQ,0BAA4BgtD,EAAS,0BAE1E,EACA,CAACC,EAA4B,EAAEjtD,EAAqBi7C,EAAQ,CACxDj7C,EAAM,aAAei7C,CACzB,EACA,CAACiS,EAAoB,EAAEltD,EAAqBi7C,EAAQ,CAChDj7C,EAAM,UAAYi7C,CACtB,EACA,CAACkS,EAAuB,EAAEntD,EAAqBoJ,EAAgB,CAC3DpJ,EAAM,eAAe,QAAQ,OAASoJ,CAC1C,EACA,CAACgkD,EAAyB,EAAEptD,EAAqBf,EAAW,CACpDA,EAAK,wBACLe,EAAM,eAAe,QAAQ,sBAAwBf,EAAK,sBAElE,EACA,CAACouD,EAA+B,EAAErtD,EAAqBstD,EAAkB,CACrEttD,EAAM,eAAe,QAAQ,QAAUstD,CAC3C,EACA,CAACC,EAAoC,EAAEvtD,EAAqBwtD,EAA2B,CACnFxtD,EAAM,eAAe,aAAewtD,CACxC,EACA,CAACC,EAAyB,EAAEztD,EAAqBoJ,EAAgB,CAC7DpJ,EAAM,eAAe,QAAQ,QAAUoJ,CAC3C,EACA,CAACskD,EAAgC,EAAE1tD,EAAqBoJ,EAAgB,CACpE,QAAQ,IAAI,4BAA4B,EACxC,QAAQ,IAAIA,CAAM,EAClBpJ,EAAM,eAAe,QAAQ,wBAA0BoJ,CAC3D,EACA,CAACukD,EAA+B,EAAE3tD,EAAqBoJ,EAAgB,CACnEpJ,EAAM,eAAe,QAAQ,uBAAyBoJ,CAC1D,EACA,CAACwkD,EAA+B,EAAE5tD,EAAqBoJ,EAAgB,CACnEpJ,EAAM,eAAe,YAAcoJ,CACvC,EACA,CAACykD,EAAgC,EAAE7tD,EAAqB2f,EAAe,CACnE3f,EAAM,eAAe,eAAiB2f,CAC1C,EACA,CAACmuC,EAAsC,EAAE9tD,EAAqBpB,EAAiB,CAC3EoB,EAAM,qBAAuBpB,CACjC,EACA,CAACmvD,EAA8B,EAAE/tD,EAAqBguD,EAAsB,CACxEhuD,EAAM,aAAeguD,CACzB,EACA,CAACC,EAA+B,EAAEjuD,EAAqBk1C,EAA4B,KAAM,CACjFA,GAAe,KACfl1C,EAAM,KAAK,OAAO,MAAM,EAExBA,EAAM,KAAK,OAAO,MAAMk1C,CAAU,CAE1C,EACA,CAACgZ,EAA6B,EAAEluD,EAAqBjB,EAA2C,CAC5FiB,EAAM,KAAK,OAAO,IAAIjB,CAAM,CAChC,EACA,CAACovD,EAA2B,EAAEnuD,EAAqB,CAC/CA,EAAM,eAAiB,CACnB,OAAQ,GACR,SAAU,GACV,YAAa,GACb,cAAe,GACf,oBAAqB,OACrB,YAAa,GACb,uBAAwB,EACxB,aAAc,GACd,KAAM,GACN,cAAe,GACf,8BAA+B,GAC/B,YAAa,EACb,eAAgB,EAChB,QAAS,EACT,yBAA0B,EAC1B,MAAO,EACP,OAAQ,GACR,kBAAmB,OACnB,gBAAiB,EACjB,KAAM,GACN,UAAW,GACX,SAAU,GACV,MAAO,GACP,OAAQ,CAAC,EACT,mBAAoB,GACpB,qBAAsB,GACtB,OAAQ,GACR,KAAM,GACN,QAAS,CACL,WAAY,WACZ,aAAc,MACd,mBAAoB,KACpB,OAAQ,EACR,wBAAyB,EACzB,uBAAwB,EACxB,gBAAiB,EACjB,aAAc,GACd,QAAS,GACT,eAAgB,EAChB,gBAAiB,KACjB,QAAS,EACT,cAAe,EACf,0BAA2B,EAC3B,2BAA4B,EAC5B,yBAA0B,CAC9B,EACA,eAAgB,CAAC,EACjB,eAAgB,EAChB,cAAe,EACf,QAAS,CAAC,GAAGqpD,EAAc,EAE3B,SAAU,EACd,EACArpD,EAAM,gBAAkB,KAEhC,EAEMa,GAAU,CAEZ,oBAAoB,CAAC,OAAApB,CAAM,EAAGR,EAAiE,CACpFQ,EAAAoqD,GAA4C5qD,CAAI,CAC3D,EACA,oBAAoB,CAAC,OAAAQ,CAAM,EAAGo1C,EAAmC,CACtDp1C,EAAAsqD,GAA6BlV,CAAM,CAC9C,EACA,mBAAmB,CAAC,OAAAp1C,CAAM,EAAGR,EAAiE,CACnFQ,EAAAqqD,GAA2C7qD,CAAI,CAC1D,EAEA,aAAa,CAAC,OAAAQ,GAAS,CACnBA,EAAOuqD,EAA0B,CACrC,EAKA,MAAM,aAAa,CAAC,OAAAvqD,GAAS41C,EAAc,SACnC,IACA,MAAMv0C,EAAe,MAAMlB,EAAkBH,EAAQ,sBAAuB,UAAW,IAAMsB,EAAM,IAAI,eAAes0C,CAAI,EAAE,CAAC,EACtH,OAAA51C,EAAAwqD,GAAmBnpD,EAAa,OAAO,EACvCrB,EAAAgtD,GAA2B3rD,EAAa,OAAO,EACtDrB,EAAO4rD,IAA4BrqD,GAAAC,EAAAH,GAAA,YAAAA,EAAc,UAAd,YAAAG,EAAuB,UAAvB,YAAAD,EAAgC,OAAO,EAC1EvB,EAAO,8BAA+BqB,EAAa,QAAS,CAAC,KAAM,GAAK,EACxE/C,EAAS,MAAM,uBAAuB,EAEtC0B,EAAO,mBAAoB,EAAI,EACxBqB,EAAa,aACR,EAEpB,EAKA,MAAM,cAAc,CAAC,OAAArB,GAAS,SACtB,IACM,MAAAqB,EAAe,MAAMlB,EAAkBH,EAAQ,sBAAuB,WAAY,IAAMsB,EAAM,IAAI,cAAc,CAAC,EAChHtB,EAAA2qD,GAAwBtpD,EAAa,QAAQ,EACpD/C,EAAS,MAAM,wBAAwB,EAChC0B,EAAAyqD,GAAwB,EAAI,QAC9BnqD,EAAO,CACZmB,EAAK,MAAM,CACP,UAASF,GAAAC,EAAAlB,GAAA,YAAAA,EAAO,WAAP,YAAAkB,EAAiB,OAAjB,YAAAD,EAAuB,UAAW,qBAC9C,EAET,EAKA,MAAM,4BAA4B,CAAC,OAAAvB,GAAS2uD,EAAU,GAAO,SACrD,GAAApuD,KAAM,6BAA+B,CAACouD,GAItC,IACM,MAAAttD,EAAe,MAAMlB,EAAkBH,EAAQ,sBAAuB,WAAY,IAAMsB,EAAM,IAAI,6BAA6B,CAAC,EAC/HtB,EAAA,8BAA+BqB,EAAa,QAAQ,QACtDf,EAAO,CACZmB,EAAK,MAAM,CACP,UAASF,GAAAC,EAAAlB,GAAA,YAAAA,EAAO,WAAP,YAAAkB,EAAiB,OAAjB,YAAAD,EAAuB,UAAW,qBAC9C,EAET,EAMA,MAAM,WAAW,CAAC,OAAAvB,GAAS6I,EAA2B,WAC9C,IACA7I,EAAO,2BAA2B,EAE5B,MAAAqB,EAAe,MAAMlB,EAAkBH,EAAQ,sBAAuB,aAAc,IAAMsB,EAAM,KAAK,eAAgBuH,CAAO,CAAC,EAC5H,OAAA7I,EAAA,sBAAuBqB,EAAa,OAAO,EAClDI,EAAK,QAAQ,CACT,QAAS,kCACZ,EAEMJ,EAAa,cACf0C,EAAG,CACR,QAAQ,IAAIA,CAAC,EACb,MAAM2S,IAAenV,GAAAC,EAAAuC,EAAE,WAAF,YAAAvC,EAAY,OAAZ,YAAAD,EAAkB,UAAW,qBAC5CqtD,GAAat/C,EAAAvL,EAAE,WAAF,YAAAuL,EAAY,OAE/B,MAAAtP,EAAO,0BAA2B+D,EAAE,SAAS,KAAK,MAAM,EAEpD6qD,IAAe,KAAOA,IAAe,IACrCntD,EAAK,MAAM,CACP,QAASiV,CAAA,CACZ,EAED1W,EAAO,0BAA2B+D,EAAE,SAAS,KAAK,MAAM,EAGtDA,CAAA,CAEd,EAMA,MAAM,cAAc,CAAC,OAAA/D,GAAS6I,EAA2B,SACjD,IACM,MAAA1I,EAAkBH,EAAQ,sBAAuB,gBAAiB,IAAMsB,EAAM,OAAO,gBAAgBuH,EAAQ,IAAI,EAAE,CAAC,EAC1HvK,EAAS,MAAM,wBAAwB,EACvCmD,EAAK,QAAQ,CACT,QAAS,2BACZ,QACInB,EAAO,CACZmB,EAAK,MAAM,CACP,UAASF,GAAAC,EAAAlB,GAAA,YAAAA,EAAO,WAAP,YAAAkB,EAAiB,OAAjB,YAAAD,EAAuB,UAAW,qBAC9C,EAET,EAMA,MAAM,YAAY,CAAC,OAAAvB,GAASiK,EAA8B,SAClD,IACM,MAAA5I,EAAe,MAAMlB,EAAkBH,EAAQ,sBAAuB,iBAAkB,IAAMsB,EAAM,IAAI,qBAAsB2I,CAAQ,CAAC,EACtIjK,EAAA,mBAAoBqB,EAAa,QAAQ,EACzCrB,EAAA,8BAA+BqB,EAAa,QAAQ,QACtDf,EAAO,CACZmB,EAAK,MAAM,CACP,UAASF,GAAAC,EAAAlB,GAAA,YAAAA,EAAO,WAAP,YAAAkB,EAAiB,OAAjB,YAAAD,EAAuB,UAAW,qBAC9C,EAET,EAMA,qBAAqB,CAAC,OAAAvB,CAAM,EAAG41C,EAAc,CACzCt0C,EAAM,IAAI,gBAAgBs0C,CAAI,oBAAoB,EAC7C,KAAMh2C,GAAa,CAChBI,EAAOktD,GAAoCttD,EAAS,KAAK,QAAQ,EACjEtB,EAAS,MAAM,uBAAuB,EACzC,EAAE,MAAM,IAAM,EAClB,EAAE,QAAQ,IAAM,CACb0B,EAAO,mBAAoB,EAAI,EAClC,CACL,EAKA,MAAM,oBAAoB,CAAC,OAAAA,GAAS41C,EAAc,CAC1C,IACA,MAAMv0C,EAAe,MAAMlB,EAAkBH,EAAQ,sBAAuB,eAAgB,IAAMsB,EAAM,IAAI,8BAA8Bs0C,CAAI,EAAE,CAAC,EAC1I51C,EAAAkrD,GAAqC7pD,EAAa,SAAS,EAClE/C,EAAS,MAAM,yBAAyB,OAC5B,EAEpB,EAKA,MAAM,aAAa,CAAC,OAAA0B,GAASR,EAAuB,CAC5C,IACM,MAAAW,EAAkBH,EAAQ,sBAAuB,eAAgB,IAAMsB,EAAM,KAAK,wBAAyB9B,CAAI,CAAC,EACtHlB,EAAS,MAAM,wBAAwB,OAC3B,EAEpB,EAIA,MAAM,eAAe,CAAC,OAAA0B,GAASR,EAAuB,CAC9C,IACA,MAAMW,EAAkBH,EAAQ,sBAAuB,iBAAkB,IAAMsB,EAAM,IAAI,yBAAyB9B,EAAK,IAAI,GAAIA,CAAI,CAAC,EACpIlB,EAAS,MAAM,0BAA0B,OAC7B,EAEpB,EAKA,MAAM,eAAe,CAAC,OAAA0B,GAASgN,EAAc,CACrC,IACM,MAAA7M,EAAkBH,EAAQ,sBAAuB,iBAAkB,IAAMsB,EAAM,OAAO,yBAAyB0L,CAAI,EAAE,CAAC,EAC5H1O,EAAS,MAAM,0BAA0B,OAC7B,EAEpB,EAMA,kBAAkB,CAAC,OAAA0B,CAAA,EAAS,CAAC,KAAA41C,EAAM,MAAAvlC,GAAQ,CACvC/O,EAAM,IAAI,eAAes0C,CAAI,uBAAuBvlC,EAAM,KAAK,QAAQA,EAAM,GAAG,EAAE,EAC7E,KAAMzQ,GAAa,CAChBI,EAAO,mCAAoC4J,EAAA,IAAIhK,EAAU,8BAA+B,EAAE,CAAC,EAC9F,EAAE,MAAOmE,GAAM,CAChB/D,EAAO,mCAAoC4J,EAAA,IAAI7F,EAAG,uCAAwC,EAAE,CAAC,EAChG,EAAE,QAAQ,IAAM,CACb/D,EAAO,mBAAoB,EAAI,EAClC,CACL,EAKA,qBAAqB,CAAC,OAAAA,CAAM,EAAGqQ,EAAuC,CAC5D/O,EAAA,IAAI,mCAAmC+O,EAAM,KAAK,QAAQA,EAAM,GAAG,EAAE,EACtE,KAAMzQ,GAAa,CAChBI,EAAO,mCAAoC4J,EAAA,IAAIhK,EAAU,8BAA+B,EAAE,CAAC,EAC9F,EAAE,MAAOmE,GAAM,CAChB/D,EAAO,mCAAoC4J,EAAA,IAAI7F,EAAG,uCAAwC,EAAE,CAAC,EAChG,EAAE,QAAQ,IAAM,CACb/D,EAAO,mBAAoB,EAAI,EAClC,CACL,EAMA,MAAM,qBAAqB,CAAC,OAAAA,GAAS6uD,EAOlC,CACK,IACA7uD,EAAO,2BAA2B,EAClC,MAAMqB,EAAe,MAAMlB,EAAkBH,EAAQ,sBAAuB,qBAAsB,IAAMsB,EAAM,KAAK,gBAAgButD,EAAO,IAAI,kBAAmBA,CAAM,CAAC,EACxKptD,EAAK,QAAQ,CACT,QAAS,uCACZ,EACMzB,EAAAktD,GAAoC7rD,EAAa,QAAQ,EACvD/C,EAAA,MAAM,iCAAkC+C,CAAY,EAE7DrB,EAAO,mBAAoB,EAAI,QAC1BM,EAAO,CACZN,EAAO,0BAA2BM,EAAM,SAAS,KAAK,MAAM,EAC5DmB,EAAK,MAAM,CACP,QAAS,oDACZ,EAET,EAKA,kCAAkC,CAAC,OAAAzB,CAAM,EAAG6uD,EAAwD,CAChG7uD,EAAO,sBAAuB,CAAC,QAAS,qBAAsB,QAAS,GAAK,EAC5EA,EAAO,2BAA2B,EAE5BsB,EAAA,KAAK,gBAAgButD,EAAO,IAAI,+BAAgCA,CAAM,EACvE,KAAMjvD,GAAa,CAChB6B,EAAK,QAAQ,CACT,QAAS,uCACZ,EACDzB,EAAOktD,GAAoCtjD,EAAA,IAAIhK,EAAU,gBAAiB,CAAE,EAAC,EACpEtB,EAAA,MAAM,iCAAkCsB,EAAS,IAAI,EACjE,EAAE,MAAOmE,GAAM,CAChB,QAAQ,IAAI6F,MAAI7F,EAAG,sBAAsB,CAAC,EAC1C/D,EAAO,0BAA2B+D,EAAE,SAAS,KAAK,MAAM,EACxDtC,EAAK,MAAM,CACP,QAAS,oDACZ,EACJ,EAAE,QAAQ,IAAM,CACbzB,EAAO,sBAAuB,CAAC,QAAS,qBAAsB,QAAS,GAAM,EAChF,CACL,EAMA,wBAAwB,CAAC,OAAAA,CAAM,EAAG6uD,EAAwC,CACtE7uD,EAAO,sBAAuB,CAAC,QAAS,qBAAsB,QAAS,GAAK,EAEtEsB,EAAA,OAAO,gBAAgButD,EAAO,IAAI,mBAAmBA,EAAO,IAAI,EAAE,EACnE,KAAMjvD,GAAa,CAChBI,EAAOktD,GAAoCtjD,EAAA,IAAIhK,EAAU,gBAAiB,CAAE,EAAC,EAC7E6B,EAAK,QAAQ,CACT,QAAS,2CACZ,EACDnD,EAAS,MAAM,gCAAgC,EAClD,EAAE,MAAM,IAAM,CACfmD,EAAK,MAAM,CACP,QAAS,sDACZ,EACJ,EAAE,QAAQ,IAAM,CACbzB,EAAO,sBAAuB,CAAC,QAAS,qBAAsB,QAAS,GAAM,EAC7EA,EAAO,mBAAoB,EAAI,EAClC,CACL,EAMA,MAAM,wBAAwB,CAAC,OAAAA,GAAS6uD,EAKrC,SACK,IACA,MAAMxtD,EAAe,MAAMlB,EAAkBH,EAAQ,sBAAuB,qBAAsB,IAAMsB,EAAM,IAAI,gBAAgButD,EAAO,IAAI,mBAAmBA,EAAO,IAAI,GAAIA,CAAM,CAAC,EAC/K,OAAA7uD,EAAAktD,GAAoC7rD,EAAa,QAAQ,EAChEI,EAAK,QAAQ,CACT,QAAS,2CACZ,EACDnD,EAAS,MAAM,gCAAgC,EAC/C0B,EAAO,mBAAoB,EAAI,EAExBqB,QACFf,EAAO,CACZhC,EAAS,MAAM,kCAAkC,EACjDmD,EAAK,MAAM,CACP,UAASF,GAAAC,EAAAlB,GAAA,YAAAA,EAAO,WAAP,YAAAkB,EAAiB,OAAjB,YAAAD,EAAuB,UAAW,qBAC9C,EAET,EAMA,MAAM,2BAA2B,CAAC,OAAAvB,GAAS41C,EAAc,CACrD51C,EAAO,sBAAuB,CAAC,QAAS,UAAW,QAAS,GAAK,EAE3D,MAAAsB,EAAM,IAAI,gBAAgBs0C,CAAI,EAAE,EACjC,KAAMh2C,GAAa,CACTI,EAAA,sBAAuBJ,EAAS,KAAK,OAAO,EAC5CI,EAAA,uBAAwB4J,MAAIhK,EAAS,KAAK,QAAS,kBAAmB,EAAE,CAAC,EACzEI,EAAA,qBAAsB4J,MAAIhK,EAAS,KAAK,QAAS,SAAU,EAAE,CAAC,EACrEtB,EAAS,MAAM,uBAAuB,EACzC,EAAE,MAAM,IAAM,EACd,EAAE,QAAQ,IAAM,CACb0B,EAAO,sBAAuB,CAAC,QAAS,UAAW,QAAS,GAAM,EAClEA,EAAO,mBAAoB,EAAI,EAClC,CACT,EAEA,gCAAgC,CAAC,OAAAA,CAAM,EAAG41C,EAAc,CACpD51C,EAAO,sBAAuB,CAAC,QAAS,iBAAkB,QAAS,GAAK,EAExEsB,EAAM,IAAI,gBAAgBs0C,CAAI,SAAS,EAClC,KAAMh2C,GAAa,CAChBI,EAAO,qBAAsB4J,MAAIhK,EAAS,KAAM,SAAU,EAAE,CAAC,EAChE,EAAE,MAAM,IAAM,EAClB,EAAE,QAAQ,IAAM,CACbI,EAAO,sBAAuB,CAAC,QAAS,iBAAkB,QAAS,GAAM,EAC5E,CACL,EAKA,MAAM,qBAAqB,CAAC,OAAAA,EAAQ,SAAA8W,CAAA,EAAWtX,EAAiE,SACxG,IACA,MAAMW,EAAkBH,EAAQ,sBAAuB,iBAAkB,IAAMsB,EAAM,IAAI,gBAAgB9B,EAAK,IAAI,WAAYA,CAAI,CAAC,EACnIlB,EAAS,MAAM,8BAA8B,EACpCwY,EAAA,6BAA8BtX,EAAK,IAAI,EAChDQ,EAAO,oBAAqB,CAAC,QAAS,0BAA2B,MAAO,GAAK,QACxEM,EAAO,CACZmB,EAAK,MAAM,CACP,UAASF,GAAAC,EAAAlB,GAAA,YAAAA,EAAO,WAAP,YAAAkB,EAAiB,OAAjB,YAAAD,EAAuB,UAAW,qBAC9C,EAET,EAMA,aAAa,CAAC,OAAAvB,GAAS,CACnBA,EAAO0uD,EAA2B,CACtC,EAMA,MAAM,YAAY,CAAC,OAAA1uD,GAAS6I,EAA2B,WAC/C,IACA,MAAMxH,EAAe,MAAMlB,EAAkBH,EAAQ,sBAAuB,cAAe,IAAMsB,EAAM,IAAI,gBAAgBuH,EAAQ,IAAI,GAAIA,CAAO,CAAC,EACnJ7I,EAAO,2BAA2B,EAClCyB,EAAK,QAAQ,CACT,QAAS,8BACZ,EACMzB,EAAA,sBAAuBqB,EAAa,OAAO,EAClD/C,EAAS,MAAM,sBAAsB,QAChCyF,EAAG,CACR/D,EAAO,0BAA2B+D,EAAE,SAAS,KAAK,MAAM,EAExDtC,EAAK,MAAM,CACP,UAAS6N,GAAA/N,GAAAC,EAAAuC,EAAE,WAAF,YAAAvC,EAAY,OAAZ,YAAAD,EAAkB,SAAlB,YAAA+N,EAA0B,UAAW,yCACjD,EAET,EAMA,MAAM,aAAa,CAAC,OAAAtP,EAAQ,MAAAO,GAAQf,EAA4C,SACxE,IACA,MAAMW,EAAkBH,EAAQ,sBAAuB,UAAW,IAAMsB,EAAM,IAAI,qBAAsB,CACpG,KAAM9B,EAAK,KACX,SAAUA,EAAK,SAClB,CAAC,EACFiC,EAAK,QAAQ,CACT,QAAS,8BACZ,EACDnD,EAAS,MAAM,+BAA+B,EAGzCkB,EAAA,SAAS,QAASqJ,GAAY,CAC/B,MAAMvB,EAAQ/G,EAAM,sBAAsB,UAAkB2gB,KAAK,OAASrY,CAAO,EAE7EvB,IAAU,IACVtH,EAAO,mCAAoC,CACvC,KAAM6I,EACN,KAAM,CACF,OAAQ,CAACtI,EAAM,sBAAsB+G,CAAK,EAAE,OAChD,CACH,CACL,CACH,QACIhH,EAAO,CACZmB,EAAK,MAAM,CACP,UAASF,GAAAC,EAAAlB,GAAA,YAAAA,EAAO,WAAP,YAAAkB,EAAiB,OAAjB,YAAAD,EAAuB,UAAW,yCAC9C,EAET,EAMA,MAAM,iBAAiB,CAAC,OAAAvB,GAAS,CAAC,KAAA41C,EAAM,MAAA5kC,EAAO,IAAAC,GAAM,SAC7C,IACA,IAAI+nC,EAAU,GACVhoC,IACAgoC,GAAW,UAAUhoC,CAAK,IAE1BC,IACA+nC,GAAWhoC,EAAQ,QAAQC,CAAG,GAAK,QAAQA,CAAG,IAGlD,MAAM5P,EAAe,MAAMlB,EAAkBH,EAAQ,sBAAuB,cAAe,IAAMsB,EAAM,IAAI,gBAAgBs0C,CAAI,iBAAiBoD,CAAO,EAAE,CAAC,EACnJh5C,EAAAsuD,GAAgCjtD,EAAa,YAAY,EAChE/C,EAAS,MAAM,kCAAkC,QAC5CgC,EAAO,CACZmB,EAAK,MAAM,CACP,UAASF,GAAAC,EAAAlB,GAAA,YAAAA,EAAO,WAAP,YAAAkB,EAAiB,OAAjB,YAAAD,EAAuB,UAAW,qBAC9C,EAET,EAMA,iBAAiB,CAAC,OAAAvB,CAAM,EAAGR,EAAsE,CAC7FQ,EAAO,sBAAuB,CAAC,QAAS,oBAAqB,QAAS,GAAK,EAErEsB,EAAA,IAAI,gBAAgB9B,EAAK,IAAI,iBAAkBA,CAAI,EACpD,KAAMI,GAAa,CACPtB,EAAA,MAAM,sCAAuCsB,CAAQ,EACjE,EAAE,MAAM,IAAM,EAClB,EAAE,QAAQ,IAAM,CACbI,EAAO,sBAAuB,CAAC,QAAS,oBAAqB,QAAS,GAAM,EAC/E,CACL,EAMA,aAAa,CAAC,OAAAA,EAAQ,MAAAO,GAAQ,CAC1BP,EAAO,sBAAuB,CAAC,QAAS,eAAgB,QAAS,GAAK,EAEtEsB,EAAM,IAAI,aAAcf,EAAM,YAAY,EACrC,KAAMX,GAAa,CAChBI,EAAOytD,GAAsB7jD,MAAIhK,EAAU,aAAa,CAAC,EAC5D,EAAE,MAAM,IAAM,EAClB,EAAE,QAAQ,IAAM,CACbI,EAAO,sBAAuB,CAAC,QAAS,eAAgB,QAAS,GAAM,EAC1E,CACL,EAMA,mBAAmB,CAAC,OAAAA,CAAA,EAAS,CAAC,SAAAiK,EAAU,UAAA6kD,GAAY,CAChD9uD,EAAO,sBAAuB,CAAC,QAAS,kBAAmB,QAAS,GAAK,EAChE1B,EAAA,MAAM,iCAAkC,MAAM,EAEjDgD,EAAA,KAAK,4BAA4BwtD,CAAS,GAAI,CAAC,SAAA7kD,EAAS,EACzD,KAAMrK,GAAa,CAChBI,EAAO,sBAAuBJ,EAAS,KAAK,QAAS,CAAC,KAAM,GAAK,EAC1DI,EAAA,mBAAoB4J,MAAIhK,EAAS,KAAK,QAAS,WAAY,EAAE,CAAC,EACrEtB,EAAS,MAAM,qCAAqC,EACpDmD,EAAK,QAAQ,CACT,QAAS,8BACZ,EACJ,EAAE,MAAOsC,GAAM,CAChB/D,EAAO,0BAA2B+D,EAAE,SAAS,KAAK,MAAM,EAC3D,EAAE,QAAQ,IAAM,CACbzF,EAAS,MAAM,oCAAoC,EACnD0B,EAAO,sBAAuB,CAAC,QAAS,kBAAmB,QAAS,GAAM,EAC7E,CACL,EAEA,iBAAiB,CAAC,OAAAA,CAAA,EAAS,CAAC,SAAAiK,EAAU,UAAA6kD,GAAY,CAC9C9uD,EAAO,sBAAuB,CAAC,QAAS,kBAAmB,QAAS,GAAK,EAEnEsB,EAAA,KAAK,0BAA0BwtD,CAAS,YAAa,CAAC,SAAA7kD,CAAQ,CAAC,EAChE,KAAK,IAAM,EACX,EAAE,MAAOlG,GAAM,CAChB/D,EAAO,0BAA2B+D,EAAE,SAAS,KAAK,MAAM,EAC3D,EAAE,QAAQ,IAAM,CACbzF,EAAS,MAAM,oCAAoC,EACnD0B,EAAO,sBAAuB,CAAC,QAAS,kBAAmB,QAAS,GAAM,EAC7E,CACL,EAKA,iBAAiB,CAAC,OAAAA,CAAM,EAAGR,EAAM,CAC7BQ,EAAO,sBAAuB,CAAC,QAAS,cAAe,QAAS,GAAK,EAErEsB,EAAM,KAAK,gBAAgB9B,EAAK,UAAU,sBAAuB,CAC7D,GAAIA,EAAK,gBACT,kBAAmBA,EAAK,kBAC3B,EAAE,KAAMI,GAAa,CAClBI,EAAO,mBAAoB4J,MAAIhK,EAAS,KAAM,WAAY,EAAE,CAAC,EAC7DI,EAAO,sBAAuB4J,MAAIhK,EAAS,KAAM,UAAW,EAAE,CAAC,EAC/D6B,EAAK,QAAQ,CACT,QAAS,yDACZ,EACDnD,EAAS,MAAM,2CAA2C,EAC7D,EAAE,MAAOgC,GAAU,SAChBmB,EAAK,MAAM,CACP,UAASF,GAAAC,EAAAlB,GAAA,YAAAA,EAAO,WAAP,YAAAkB,EAAiB,OAAjB,YAAAD,EAAuB,UAAW,qBAC9C,EACJ,EAAE,QAAQ,IAAM,CACbvB,EAAO,sBAAuB,CAAC,QAAS,cAAe,QAAS,GAAM,EACzE,CACL,EAKA,oBAAoB,CAAC,OAAAA,CAAA,EAAS,CAAC,KAAA41C,EAAM,aAAAmZ,GAAe,CAChD/uD,EAAO,sBAAuB,CAAC,QAAS,sBAAuB,QAAS,GAAK,EAEvEsB,EAAA,KAAK,gBAAgBs0C,CAAI,yBAA0B,CAAC,GAAImZ,CAAa,GACtE,KAAMnvD,GAAa,CAChBI,EAAO,mBAAoB4J,MAAIhK,EAAS,KAAM,WAAY,EAAE,CAAC,EAC7DI,EAAO,sBAAuB4J,MAAIhK,EAAS,KAAM,UAAW,EAAE,CAAC,EAC/D6B,EAAK,QAAQ,CACT,QAAS,4DACZ,EACDnD,EAAS,MAAM,8CAA8C,EAChE,EAAE,MAAM,IAAM,EAClB,EAAE,QAAQ,IAAM,CACb0B,EAAO,sBAAuB,CAAC,QAAS,sBAAuB,QAAS,GAAM,EACjF,CACL,EAMA,sBAAsB,CAAC,OAAAA,CAAM,EAAG41C,EAAc,CAC1C51C,EAAO,sBAAuB,CAAC,QAAS,cAAe,QAAS,GAAK,EAErEsB,EAAM,OAAO,gBAAgBs0C,CAAI,0BAA0B,EACtD,KAAMh2C,GAAa,CAChBI,EAAO,mBAAoB4J,MAAIhK,EAAS,KAAM,WAAY,EAAE,CAAC,EAC7DI,EAAO,sBAAuB4J,MAAIhK,EAAS,KAAM,UAAW,EAAE,CAAC,EAC/D6B,EAAK,QAAQ,CACT,QAAS,8DACZ,EACDnD,EAAS,MAAM,gDAAgD,EAClE,EAAE,MAAM,IAAM,EAClB,EAAE,QAAQ,IAAM,CACb0B,EAAO,sBAAuB,CAAC,QAAS,cAAe,QAAS,GAAM,EACzE,CACL,EAEA,kBAAkB,CAAC,OAAAA,CAAM,EAAGR,EAAuC,CAC/DQ,EAAO,sBAAuB,CAAC,QAAS,uBAAwB,QAAS,GAAK,EAC9EsB,EAAM,KAAK,gBAAgB9B,EAAK,IAAI,uBAAwB,CAAC,KAAMA,EAAK,KAAK,CAAC,EACzE,KAAMI,GAAa,CAChBI,EAAO,mBAAoB4J,MAAIhK,EAAS,KAAM,WAAY,EAAE,CAAC,EAC7DI,EAAO,sBAAuB4J,MAAIhK,EAAS,KAAM,UAAW,EAAE,CAAC,EACxDI,EAAA,8BAA+B4J,MAAIhK,EAAS,KAAM,4BAA6B,EAAE,EAAG,CAAC,KAAM,GAAK,EAChGI,EAAA,0CAA2C4J,MAAIhK,EAAS,KAAM,eAAgB,EAAE,EAAG,CAAC,KAAM,GAAK,EACtG6B,EAAK,QAAQ,CACT,QAAS,0DACZ,EACDnD,EAAS,MAAM,4CAA4C,EAC9D,EAAE,MAAM,IAAM,EAClB,EAAE,QAAQ,IAAM,CACb0B,EAAO,sBAAuB,CAAC,QAAS,uBAAwB,QAAS,GAAM,EAClF,CACL,EAEA,sBAAsB,CAAC,OAAAA,CAAM,EAAG05C,EAAS,CACrC15C,EAAO,sBAAuB,CAAC,QAAS,cAAe,QAAS,GAAK,EACrEsB,EAAM,KAAK,eAAewxC,GAAe,gBAAgB,aAAavyC,GAAM,eAAe,IAAI,2BAA4B,CAAC,GAAIm5C,EAAQ,GAAG,EACtI,KAAM95C,GAAa,CACTI,EAAA,mBAAoBJ,EAAS,KAAK,QAAQ,EAC1CI,EAAA,sBAAuBJ,EAAS,KAAK,OAAO,EACnD6B,EAAK,QAAQ,CACT,QAAS,8DACZ,EACDnD,EAAS,MAAM,gDAAgD,EAClE,EAAE,MAAM,IAAM,EAClB,EAAE,QAAQ,IAAM,CACb0B,EAAO,sBAAuB,CAAC,QAAS,cAAe,QAAS,GAAM,EACzE,CACL,EAMA,mBAAmB,CAAC,OAAAA,EAAQ,MAAAO,GAAQ,CAChCP,EAAO,sBAAuB,CAAC,QAAS,cAAe,QAAS,GAAK,EAC/DsB,EAAA,OAAO,gBAAgBf,EAAM,eAAe,IAAI,uBAAuB,EACxE,KAAMX,GAAa,CACTI,EAAA,mBAAoBJ,EAAS,KAAK,QAAQ,EAC1CI,EAAA,sBAAuBJ,EAAS,KAAK,OAAO,EACnD6B,EAAK,QAAQ,CACT,QAAS,2DACZ,EACJ,EAAE,MAAM,IAAM,EAClB,EAAE,QAAQ,IAAM,CACbzB,EAAO,sBAAuB,CAAC,QAAS,cAAe,QAAS,GAAM,EACzE,CACL,EAEA,oBAAoB,CAAC,OAAAA,CAAM,EAAG6I,EAA2B,CACrD7I,EAAO,sBAAuB,CAAC,QAAS,uBAAwB,QAAS,GAAK,EAC9EsB,EAAM,OAAO,eAAewxC,GAAe,gBAAgB,aAAajqC,EAAQ,IAAI,wBAAwB,EACvG,KAAMjJ,GAAa,OACTI,EAAA,mBAAoBJ,EAAS,KAAK,QAAQ,EAC1CI,EAAA,sBAAuBJ,EAAS,KAAK,OAAO,EACnDI,EAAO,2CAA2CwB,EAAA5B,EAAS,OAAT,YAAA4B,EAAe,aAAc,CAAC,KAAM,GAAK,EAC3FC,EAAK,QAAQ,CACT,QAAS,4DACZ,EACJ,EAAE,MAAM,IAAM,EAClB,EAAE,QAAQ,IAAM,CACbzB,EAAO,sBAAuB,CAAC,QAAS,uBAAwB,QAAS,GAAM,EAClF,CACL,EAEA,wBAAwB,CAAC,OAAAA,GAAS,CAC9BA,EAAO,sBAAuB,CAAC,QAAS,cAAe,QAAS,GAAK,EACrEsB,EAAM,OAAO,eAAewxC,GAAe,eAAgB,cAAavyC,GAAM,eAAe,IAAI,4BAA4B,EACxH,KAAMX,GAAa,CACTI,EAAA,sBAAuBJ,EAAS,KAAK,OAAO,EACnD6B,EAAK,QAAQ,CACT,QAAS,gEACZ,EACJ,EAAE,MAAM,IAAM,EAClB,EAAE,QAAQ,IAAM,CACbzB,EAAO,sBAAuB,CAAC,QAAS,cAAe,QAAS,GAAM,EACzE,CACL,EAMA,MAAM,eAAe,CAAC,OAAAA,GAAS6I,EAA2B,SAClD,IACM,MAAA1I,EAAkBH,EAAQ,sBAAuB,iBAAkB,IAAMsB,EAAM,KAAK,gBAAgBuH,EAAQ,IAAI,UAAU,CAAC,EACjIpH,EAAK,QAAQ,CACT,QAAS,4BACZ,QACInB,EAAO,CACZmB,EAAK,MAAM,CACP,UAASF,GAAAC,EAAAlB,GAAA,YAAAA,EAAO,WAAP,YAAAkB,EAAiB,OAAjB,YAAAD,EAAuB,UAAW,qBAC9C,EAET,EAMA,MAAM,eAAe,CAAC,OAAAvB,GAASiK,EAAoB,SAC3C,IACM,MAAA9J,EAAkBH,EAAQ,sBAAuB,gBAAiB,IAAMsB,EAAM,KAAK,sBAAuB,CAAC,SAAA2I,CAAQ,CAAC,CAAC,EAC3H3L,EAAS,MAAM,wBAAwB,EACvCmD,EAAK,QAAQ,CACT,QAAS,2BACZ,QACInB,EAAO,CACZmB,EAAK,MAAM,CACP,UAASF,GAAAC,EAAAlB,GAAA,YAAAA,EAAO,WAAP,YAAAkB,EAAiB,OAAjB,YAAAD,EAAuB,UAAW,qBAC9C,EAET,EAEA,wBAAwB,CAAC,OAAAvB,CAAM,EAAGkgB,EAAkB,CAChD,QAAQ,IAAIA,CAAM,EAClBlgB,EAAO,sBAAuB,CAAC,QAAS,cAAe,QAAS,GAAK,EAE/DsB,EAAA,IAAI,gBAAgBf,GAAM,eAAe,IAAI,UAAW,CAAC,OAAA2f,EAAO,EACjE,KAAK,IAAM,EACX,EAAE,MAAM,IAAM,EAClB,EAAE,QAAQ,IAAM,CACblgB,EAAO,sBAAuB,CAAC,QAAS,cAAe,QAAS,GAAM,EACzE,CACL,EAMA,+BAA+B,CAAC,OAAAA,GAAS,CACrCA,EAAO,sBAAuB,CAAC,QAAS,eAAgB,QAAS,GAAK,EAChEsB,EAAA,KAAK,gBAAgBf,GAAM,eAAe,IAAI,sBAAsB,EACrE,KAAK,IAAM,CACRjC,EAAS,MAAM,gCAAgC,EAClD,EAAE,MAAOyF,GAAM,SAChBtC,EAAK,MAAM,CACP,UAASF,GAAAC,EAAAuC,GAAA,YAAAA,EAAG,WAAH,YAAAvC,EAAa,OAAb,YAAAD,EAAmB,UAAW,qBAC1C,EACJ,EAAE,QAAQ,IAAM,CACbvB,EAAO,sBAAuB,CAAC,QAAS,eAAgB,QAAS,GAAM,EAC1E,CACL,EAKA,MAAM,mBAAmB,CAAC,OAAAA,GAAS,SAC3B,IACM,MAAAqB,EAAe,MAAMlB,EAAkBH,EAAQ,sBAAuB,kBAAmB,IAAMsB,EAAM,IAAI,sBAAsB,CAAC,EAC/HtB,EAAA0rD,GAAkCrqD,EAAa,QAAQ,EACrD/C,EAAA,MAAM,4BAA6B+C,EAAa,OAAO,QAC3Df,EAAO,CACZmB,EAAK,MAAM,CACP,UAASF,GAAAC,EAAAlB,GAAA,YAAAA,EAAO,WAAP,YAAAkB,EAAiB,OAAjB,YAAAD,EAAuB,UAAW,qBAC9C,EAET,EAKA,iBAAiB,CAAC,OAAAvB,GAAS,CACvBA,EAAO,sBAAuB,CAAC,QAAS,mBAAoB,QAAS,GAAK,EAEpEsB,EAAA,KAAK,gBAAgBf,GAAM,eAAe,IAAI,sBAAsB,EACrE,KAAMX,GAAa,CAChBtB,EAAS,MAAM,4BAA6BsB,EAAS,KAAK,OAAO,EACpE,EAAE,MAAM,IAAM,EAClB,EAAE,QAAQ,IAAM,CACbI,EAAO,sBAAuB,CAAC,QAAS,mBAAoB,QAAS,GAAM,EAC9E,CACL,EAMA,mBAAmB,CAAC,MAAAO,EAAO,OAAAP,CAAA,EAASgvD,EAAe,CAC/ChvD,EAAO,sBAAuB,CAAC,QAAS,eAAgB,QAAS,GAAK,EAEhEsB,EAAA,OAAO,gBAAgBf,EAAM,eAAe,IAAI,WAAWyuD,CAAK,EAAE,EACnE,KAAMpvD,GAAa,CAChB6B,EAAK,QAAQ,CACT,QAAS,wBACZ,EACDzB,EAAOgtD,GAA2BptD,EAAS,KAAK,OAAO,EACvDtB,EAAS,MAAM,8BAA8B,EAChD,EAAE,MAAM,IAAM,EAClB,EAAE,QAAQ,IAAM,CACb0B,EAAO,sBAAuB,CAAC,QAAS,eAAgB,QAAS,GAAM,EAC1E,CACL,EAEA,wBAAwB,CAAC,OAAAA,GAAS,CAC9B,MAAMivD,EAAa,CAAC,EAChB,IAAA9rD,EACA+rD,EACAC,EACAC,EAEJ,QAAStiD,EAAI,EAAGA,EAAI,GAAIA,IACpB3J,EAAO,GAAG2J,CAAC,MACXoiD,EAAQpiD,EAAI,GAAK,GAAIA,EAAI,EAAG,MAAQ,GAAGA,CAAC,MACjCqiD,EAAAriD,GAAK,GAAK,KAAO,KACdsiD,EAAAtiD,GAAK,GAAK,GAAK,EACzBmiD,EAAW,KAAK,CAAC,MAAO,GAAGC,CAAK,IAAIC,CAAI,GAAI,KAAM,GAAGC,CAAO,GAAGjsD,CAAI,GAAG,EAEtEA,EAAO,GAAG2J,CAAC,MACXoiD,EAAQpiD,GAAK,GAAK,GAAIA,EAAI,EAAG,MAAQ,GAAGA,CAAC,MAClCqiD,EAAAriD,GAAK,GAAK,KAAO,KACdsiD,EAAAtiD,GAAK,GAAK,GAAK,EACzBmiD,EAAW,KAAK,CAAC,MAAO,GAAGC,CAAK,IAAIC,CAAI,GAAI,KAAM,GAAGC,CAAO,GAAGjsD,CAAI,GAAG,EAG1EnD,EAAO,qBAAsBivD,CAAU,CAC3C,EAEA,MAAM,UAAU,CAAC,OAAAjvD,GAASirD,EAAa,SAC/B,GAAAA,EAAI,SAAW,GACX,IACA,MAAM5pD,EAAe,MAAMlB,EAAkBH,EAAQ,sBAAuB,eAAgB,IAAMsB,EAAM,IAAI,kBAAkB2pD,CAAG,EAAE,CAAC,EAC3H3sD,EAAA,MAAM,8BAA+B+C,EAAa,WAAW,EAC/DrB,EAAA,0BAA2BqB,EAAa,WAAW,QACrDf,EAAO,CACZmB,EAAK,MAAM,CACP,UAASF,GAAAC,EAAAlB,GAAA,YAAAA,EAAO,WAAP,YAAAkB,EAAiB,OAAjB,YAAAD,EAAuB,UAAW,qBAC9C,EAGb,EAMA,kBAAkB,CAAC,OAAAvB,CAAM,EAAGiK,EAAU,CAClCjK,EAAO,sBAAuB,CAAC,QAAS,kBAAmB,QAAS,GAAK,EACzEA,EAAO,2BAA2B,EAE5BsB,EAAA,KAAK,0BAA2B,CAAC,SAAA2I,CAAA,CAAS,EAC3C,KAAMrK,GAAa,CAChBI,EAAO,2BAA4BJ,EAAS,KAAK,SAAU,CAAC,KAAM,GAAK,EACvE6B,EAAK,QAAQ,CACT,QAAS,iCACZ,EACDnD,EAAS,MAAM,6BAA6B,EAC/C,EAAE,MAAOyF,GAAM,aACR,YAAIA,EAAE,SAAS,IAAI,EAC3B/D,EAAO,0BAA2B+D,EAAE,SAAS,KAAK,MAAM,EAExDtC,EAAK,MAAM,CACP,UAASwjB,GAAA3V,GAAA/N,GAAAC,EAAAuC,EAAE,WAAF,YAAAvC,EAAY,OAAZ,YAAAD,EAAkB,SAAlB,YAAA+N,EAA0B,cAA1B,YAAA2V,EAAwC,KAAM,qBAC1D,EACJ,EAAE,QAAQ,IAAM,CACbjlB,EAAO,sBAAuB,CAAC,QAAS,kBAAmB,QAAS,GAAM,EAC7E,CACL,EAKA,uBAAuB,CAAC,OAAAA,CAAA,EAAS,CAAC,QAAA6I,EAAS,SAAA2+C,GAAW,CAClDxnD,EAAO,sBAAuB,CAAC,QAAS,qBAAsB,QAAS,GAAK,EAEtEsB,EAAA,KAAK,gBAAgBuH,EAAQ,IAAI,4BAA6B,CAAC,SAAA2+C,EAAS,EACzE,KAAK,IAAM,CACRlpD,EAAS,MAAM,uCAAuC,EACzD,EAAE,MAAM,IAAM,EAClB,EAAE,QAAQ,IAAM,CACb0B,EAAO,sBAAuB,CAAC,QAAS,qBAAsB,QAAS,GAAM,EAChF,EAET,EAEMqvD,GAAiD,CACnD,WAAY,SACZ9uD,GAAA,QACAkW,GAAA,QACArV,GACAZ,YACJ,EC7iDMD,GAAmB,CACrB,KAAM,GACN,QAAS,CACL,MAAO,GACP,SAAU,GACV,SAAU,EACd,EACA,KAAM,IAAIhB,GACV,YAAa,CAAC,EACd,SAAU,EACd,EAEMkX,GAAU,CACZ,KAAOlW,GAAqBA,EAAM,KAClC,QAAUA,GAAqBA,EAAM,QACrC,KAAOA,GAAqBA,EAAM,KAClC,YAAcA,GAAqBA,EAAM,YACzC,SAAWA,GAAqBA,EAAM,QAC1C,EAEMC,GAAY,CACd,CAAC8uD,EAAsB,EAAE/uD,EAAkBG,EAAgD,CACvFH,EAAM,QAAQG,EAAQ,OAAO,EAAIA,EAAQ,OAC7C,EACA,CAAC6uD,EAA0B,EAAEhvD,EAAkBg3B,EAAa,CACxDh3B,EAAM,YAAcg3B,CACxB,EACA,CAACi4B,EAAuB,EAAEjvD,EAAkB6lD,EAAU,CAClD7lD,EAAM,SAAW6lD,CAAA,CAEzB,EAEMhlD,GAAU,CAMZ,MAAM,CAAC,OAAApB,CAAM,EAAGiN,EAAS,CACrBjN,EAAO,mBAAoB,CAAC,QAAS,QAAS,QAAS,GAAK,EAE5DsB,EAAM,KAAK,iBAAkB2L,CAAO,EAC/B,KAAK,IAAM,EAEX,EAAE,MAAM,IAAM,EAClB,EAAE,QAAQ,IAAM,CACbjN,EAAO,mBAAoB,CAAC,QAAS,QAAS,QAAS,GAAM,EAChE,CACL,EAEA,cAAc,CAAC,OAAAA,CAAM,EAAGiN,EAAS,CAC7BjN,EAAO,mBAAoB,CAAC,QAAS,WAAY,QAAS,GAAK,EAE/DsB,EAAM,KAAK,oBAAqB2L,CAAO,EAClC,KAAMrN,GAAa,CAChBI,EAAO,oBAAqB4J,EAAI,IAAAhK,EAAU,gBAAiB,CAAE,EAAC,EACjE,EAAE,MAAM,IAAM,EAClB,EAAE,QAAQ,IAAM,CACbI,EAAO,mBAAoB,CAAC,QAAS,WAAY,QAAS,GAAM,EACnE,CACL,EAKA,iBAAiB,CAAC,OAAAA,CAAM,EAAGR,EAAM,CAC7BQ,EAAO,mBAAoB,CAAC,QAAS,WAAY,QAAS,GAAK,EAE/DsB,EAAM,KAAK,yBAA0B9B,CAAI,EACpC,KAAK,IAAM,CACRlB,EAAS,MAAM,4BAA4B,EAC9C,EAAE,MAAM,IAAM,EAClB,EAAE,QAAQ,IAAM,CACb0B,EAAO,mBAAoB,CAAC,QAAS,WAAY,QAAS,GAAM,EACnE,CACL,EAKA,mBAAmB,CAAC,OAAAA,CAAM,EAAGR,EAAM,CAC/BQ,EAAO,mBAAoB,CAAC,QAAS,WAAY,QAAS,GAAK,EAE/DsB,EAAM,KAAK,kCAAmC9B,CAAI,EAC7C,KAAK,IAAM,CACRlB,EAAS,MAAM,4BAA4B,EAC9C,EAAE,MAAM,IAAM,EAClB,EAAE,QAAQ,IAAM,CACb0B,EAAO,mBAAoB,CAAC,QAAS,WAAY,QAAS,GAAM,EACnE,EAET,EAEeyvD,GAAA,CACX,WAAY,SACZlvD,GAAA,UACAC,GAAA,QACAY,GACAqV,UACJ,ECpEMlW,GAAoB,CACtB,QAAS,CACL,MAAO,GACP,WAAY,GACZ,WAAY,EAChB,EACA,MAAO,CAAC,EACR,KAAM,IACV,EAEMkW,GAAU,CACZ,MAAQlW,GAAsBA,EAAM,MACpC,KAAOA,GAAsBA,EAAM,KACnC,QAAUA,GAAsBA,EAAM,OAC1C,EAEMC,GAAY,CACd,CAAC6oD,EAAuB,EAAE9oD,EAAmBG,EAAgD,CACzFH,EAAM,QAAQG,EAAQ,OAAO,EAAIA,EAAQ,QAEjD,EAEMU,GAAU,CAMZ,MAAM,SAAS,CAAC,OAAApB,GAASuE,EAA0D,CACzE,MACF,KAAA4c,EAAO,EACP,OAAAk0B,EAAS,aACT,SAAAZ,EAAW,CAAC,EAAI,EAChB,aAAAC,EAAe,EACf,aAAAgb,EAAe,IACf,WAAAC,EAAa,MACbprD,EAEE3C,EAAS,IAAI,gBAAgB,CAC/B,KAAMuf,EAAK,SAAS,EACpB,OAAAk0B,EACA,SAAUZ,EAAS,SAAS,EAC5B,aAAcC,EAAa,SAAS,EACpC,YAAagb,EACb,WAAYC,EAAaA,EAAW,WAAa,EACpD,GAAE,SAAS,EAGL,OACH,OAFiB,MAAMxvD,EAAkBH,EAAQ,oBAAqB,QAAS,IAAMsB,EAAM,IAAI,aAAaM,CAAM,EAAE,CAAC,GAEjG,MACpB,aAAA8tD,CACJ,CACJ,EAMA,MAAM,WAAW,CAAC,OAAA1vD,GAAS4vD,EAAe,CAEtC,OADqB,MAAMzvD,EAAkBH,EAAQ,oBAAqB,aAAc,IAAMsB,EAAM,KAAK,YAAasuD,CAAI,CAAC,GACvG,IACxB,EAOA,MAAM,WAAW,CAAC,OAAA5vD,GAASgN,EAAc,CAC/B,MAAA7M,EAAkBH,EAAQ,oBAAqB,aAAc,IAAMsB,EAAM,OAAO,aAAa0L,CAAI,EAAE,CAAC,EAElH,EAEe6iD,GAAA,CACX,WAAY,SACZtvD,GAAA,UACAC,GAAA,QACAY,GACAqV,UACJ,EC9GMlW,GAAwB,CAC1B,QAAS,CACL,MAAO,GACP,SAAU,GACV,OAAQ,GACR,SAAU,EACd,EACA,KAAM,IAAIhB,GACV,YAAa,CAAC,EACd,SAAU,CAAC,EACX,SAAU,EACd,EAEMkX,GAAU,CACZ,KAAOlW,GAA0BA,EAAM,KACvC,YAAcA,GAA0BA,EAAM,YAC9C,QAAUA,GAA0BA,EAAM,QAC1C,SAAWA,GAA0BA,EAAM,SAC3C,SAAWA,GAA0BA,EAAM,QAC/C,EAEMC,GAAY,CACd,CAACsvD,EAA2B,EAAEvvD,EAAuBG,EAAgD,CACjGH,EAAM,QAAQG,EAAQ,OAAO,EAAIA,EAAQ,OAC7C,EACA,CAACqvD,EAA+B,EAAExvD,EAAuBg3B,EAAa,CAClEh3B,EAAM,YAAcg3B,CACxB,EACA,CAACy4B,EAA4B,EAAEzvD,EAAuB0J,EAAU,CAC5D1J,EAAM,SAAW0J,CACrB,EACA,CAACgmD,EAA4B,EAAE1vD,EAAuBs2C,EAAU,CAC5Dt2C,EAAM,SAAWs2C,CAAA,CAEzB,EAEMz1C,GAAU,CASZ,MAAM,MAAM,CAAC,OAAApB,GAASunD,EAAa,CAC3B,IACM,MAAAlmD,EAAe,MAAMlB,EAAkBH,EAAQ,wBAAyB,QAAS,IAAMsB,EAAM,KAAK,4BAA6BimD,CAAW,CAAC,EACxIjpD,EAAA,MAAM,kCAAmC+C,GAAA,YAAAA,EAAc,SAAS,EAClErB,EAAA,4BAA6BqB,GAAA,YAAAA,EAAc,SAAS,EAC3D/C,EAAS,MAAM,gBAAiB,CAC5B,KAAM,UACN,QAAS,+CACZ,OACW,CACZA,EAAS,MAAM,gBAAiB,CAC5B,KAAM,QACN,QAAS,yCACZ,EAET,EASA,MAAM,OAAO,CAAC,OAAA0B,GAASkwD,EAAW,CAC1B,IACA,MAAM7uD,EAAe,MAAMlB,EAAkBH,EAAQ,wBAAyB,SAAU,IAAMsB,EAAM,OAAO,6BAA6B4uD,EAAU,IAAI,EAAE,CAAC,EACzJ5xD,EAAS,MAAM,qCAAqC,EAC7C0B,EAAA,4BAA6BqB,EAAa,SAAS,EAC1D/C,EAAS,MAAM,gBAAiB,CAC5B,KAAM,UACN,QAAS,6CACZ,OACW,EAEpB,EASA,MAAM,aAAa,CAAC,OAAA0B,GAASkwD,EAAW,CACpClwD,EAAO,wBAAyB,CAAC,QAAS,SAAU,QAAS,GAAK,EAE9D,IACA,MAAMqB,EAAe,MAAMlB,EAAkBH,EAAQ,wBAAyB,SAAU,IAAMsB,EAAM,IAAI,6BAA6B4uD,EAAU,IAAI,SAAS,CAAC,EACtJlwD,EAAA,yBAA0BqB,GAAA,YAAAA,EAAc,QAAQ,EACvD/C,EAAS,MAAM,mCAAmC,EAClDA,EAAS,MAAM,gBAAiB,CAC5B,KAAM,UACN,QAAS,6CACZ,OACW,EAEpB,EASA,MAAM,uBAAuB,CAAC,OAAA0B,GAASmwD,EAAgB,CAC/C,IACA,MAAM9uD,EAAe,MAAMlB,EAAkBH,EAAQ,wBAAyB,WAAY,IAAMsB,EAAM,IAAI,6BAA6B6uD,CAAc,WAAW,CAAC,EAC1JnwD,EAAA,yBAA0BqB,GAAA,YAAAA,EAAc,QAAQ,EACvD/C,EAAS,MAAM,kCAAkC,OACrC,EAEpB,EASA,MAAM,cAAc,CAAC,OAAA0B,GAASmwD,EAAgB,CACtC,IACA,MAAM9uD,EAAe,MAAMlB,EAAkBH,EAAQ,wBAAyB,WAAY,IAAMsB,EAAM,IAAI,6BAA6B6uD,CAAc,WAAW,CAAC,EAC1JnwD,EAAA,yBAA0BqB,GAAA,YAAAA,EAAc,QAAQ,EACvD/C,EAAS,MAAM,kCAAkC,OACrC,EAChB,CAGR,EAEe4xD,GAAA,CACX,WAAY,SACZ3vD,GAAA,UACAC,GAAA,QACAY,GACAqV,UACJ,ECtJA,SAAS25C,GAAU1uC,EAAiBjb,EAAuB4H,EAAgC,CACvF,MAAMyF,EAA8BzF,EAAM,KAEtC,IAACyF,EAAa,SAElB,IAAIu8C,EAAU,GACVC,EAAgB,GAEhB,OAAAx8C,EAAK,OAASA,EAAK,eACTu8C,EAAAv8C,EAAK,MAAQ4N,EAAM,KAAKkB,GAAQ9O,EAAK,MAAO,SAAS8O,CAAI,CAAC,EAAI,GACxD0tC,EAAAx8C,EAAK,YAAcrN,EAAY,KAAK+a,GAAc1N,EAAK,YAAa,SAAS0N,CAAU,CAAC,EAAI,IAGzG6uC,GAAWC,CACtB,CAQA,SAASC,GACLC,EACA9uC,EACAjb,EACgB,CAChB,MAAMgqD,EAAwB,CAAC,EAEvB,mBAAI,kCAAmC,iCAAiC,EAGzED,EAAA,QAASniD,GAAU,CAChB,MAAAqiD,EAAsB,CAAC,GAAGriD,CAAK,EAE7B,YAAI,0BAA2B,oCAAqCqiD,CAAG,EAE3EN,GAAU1uC,EAAOjb,EAAaiqD,CAAG,GACjC,QAAQ,IAAI,sBAAuB,mCAAoCA,EAAI,IAAI,EAE3EA,EAAI,WACJA,EAAI,SAAWH,GAAkBG,EAAI,SAAUhvC,EAAOjb,CAAW,GAGrEgqD,EAAI,KAAKC,CAAG,GAEZ,QAAQ,IAAI,sBAAuB,iCAAkCA,EAAI,IAAI,CACjF,CACH,EAEMD,CACX,CAOA,MAAMlwD,GAAyB,CAC3B,OAAQ,CAAC,EACT,UAAW,EACf,EAEMkW,GAAU,CACZ,kBAAoBlW,GAA2BA,EAAM,MACzD,EAEMC,GAAY,CACd,CAACmwD,EAAgB,EAAEpwD,EAAwBiwD,EAA0B,CACjE,QAAQ,IAAI,YAAY,EACxB,QAAQ,IAAIA,CAAM,EAClBjwD,EAAM,UAAYiwD,EAClBjwD,EAAM,OAAS2uC,GAAe,OAAOshB,CAAM,EAEnD,EAEMpvD,GAAU,CACZ,eAAe,CAAC,OAAApB,CAAA,EAAS,CAAC,MAAA0hB,EAAO,YAAAjb,GAAc,CACnC,mBAAI,6BAA8B,gCAAgC,EAEnE,IAAI,QAAS3B,GAAY,CACxB,IACI,IAAA8rD,EAEAlvC,EAAM,SAAS,OAAO,GACd,YAAI,iDAAkD,kCAAkC,EAC/EkvC,EAAAzhB,KAET,YAAI,yDAA0D,iCAAiC,EACtFyhB,EAAAL,GAAkBphB,GAAaztB,EAAOjb,CAAW,GAG9D,YAAI,sCAAuC,iCAAiC,EAC7EzG,EAAA2wD,GAAkBC,CAAc,EAEvC9rD,EAAQ8rD,CAAc,QACjBtwD,EAAO,CACJ,cAAM,gCAAiC,iCAAkCA,CAAK,EACtFwE,EAAQ,EAAE,EACd,CACH,EAET,EAEe0c,GAAA,CACX,WAAY,SACZjhB,GAAA,UACAC,GAAA,QACAY,GACAqV,UACJ,ECtGMlW,GAAsB,CACxB,QAAS,CACL,IAAK,GACL,OAAQ,GACR,OAAQ,GACR,OAAQ,GACR,OAAQ,GACR,WAAY,GACZ,UAAW,GACX,gBAAiB,GACjB,gBAAiB,GACjB,gBAAiB,EACrB,EACA,+BAAgC,CAC5B,KAAM,KACN,KAAM,GACN,cAAe,IACf,aAAc,IACd,cAAe,OACf,WAAY,EACZ,YAAa,CACT,CACI,KAAM,QACN,SAAU,EACV,OAAQ,OACR,WAAY,EACZ,cAAe,IACnB,CAER,EACA,WAAY,IAAIhB,GAChB,aAAc,CAAC,EACf,iBAAkB,KAClB,kBAAmB,EACvB,EAEMkX,GAAU,CACZ,QAASlW,GAASA,EAAM,QACxB,aAAcA,GAASA,EAAM,aAC7B,iBAAkBA,GAASA,EAAM,iBACjC,kBAAmBA,GAASA,EAAM,kBAClC,+BAAgCA,GAASA,EAAM,8BACnD,EAEMC,GAAY,CACd,CAACqwD,EAAyB,EAAEtwD,EAAOG,EAAS,CACxCH,EAAM,QAAQG,EAAQ,OAAO,EAAIA,EAAQ,OAC7C,EACA,CAACowD,EAAuB,EAAEvwD,EAAO6K,EAAO,CACpC7K,EAAM,aAAe6K,CACzB,EACA,CAAC2lD,EAA4B,EAAExwD,EAAOf,EAAM,CACxCe,EAAM,kBAAoBf,CAC9B,EACA,CAACwxD,EAA2B,EAAEzwD,EAAOf,EAAM,CACvCe,EAAM,iBAAmBf,CAC7B,EACA,CAACyxD,EAA6C,EAAE1wD,EAAO,CACnDA,EAAM,+BAAiC,CACnC,KAAM,KACN,KAAM,GACN,cAAe,IACf,aAAc,IACd,cAAe,OACf,WAAY,EACZ,YAAa,CACT,CACI,KAAM,QACN,SAAU,EACV,OAAQ,OACR,WAAY,EACZ,cAAe,IACnB,CAER,EAER,EAEMa,GAAU,CAKZ,gBAAgB,CAAC,OAAApB,GAAS,CACtB,OAAAA,EAAO,sBAAuB,CAAC,QAAS,MAAO,QAAS,GAAK,EACtDsB,EAAM,IAAI,mBAAmB,EAC/B,KAAM1B,GAAa,OACTI,EAAA,qBAAqBwB,EAAA5B,GAAA,YAAAA,EAAU,OAAV,YAAA4B,EAAgB,KAAK,EACpD,EAAE,MAAM,IAAM,EACd,EAAE,QAAQ,IAAM,CACbxB,EAAO,sBAAuB,CAAC,QAAS,MAAO,QAAS,GAAM,EACjE,CACT,EAQA,MAAM,kBAAkB,CAAC,OAAAA,GAASskB,EAAM,SACpCtkB,EAAO,sBAAuB,CAAC,QAAS,SAAU,QAAS,GAAK,EAE5D,IACM,MAAAG,EAAkBH,EAAQ,sBAAuB,SAAU,IAAMsB,EAAM,KAAK,oBAAqBgjB,CAAI,CAAC,EAC5GhmB,EAAS,MAAM,8BAA8B,QACxCgC,EAAO,CACZhC,EAAS,MAAM,gBAAiB,CAC5B,KAAM,QACN,UAASiD,GAAAC,EAAAlB,GAAA,YAAAA,EAAO,WAAP,YAAAkB,EAAiB,OAAjB,YAAAD,EAAuB,UAAW,qBAC9C,EAET,EASA,gBAAgB,CAAC,MAAAhB,EAAO,OAAAP,CAAA,EAASkxD,EAAU,CACvClxD,EAAO,sBAAuB,CAAC,QAAS,SAAU,QAAS,GAAK,EAE1DsB,EAAA,IAAI,qBAAqB4vD,EAAS,IAAI,GAAIA,CAAQ,EACnD,KAAK,IAAM,CACR5yD,EAAS,MAAM,8BAA8B,EAChD,EAAE,MAAM,IAAM,EAClB,EAAE,QAAQ,IAAM,CACb0B,EAAO,sBAAuB,CAAC,QAAS,SAAU,QAAS,GAAM,EACpE,CACL,EAQA,MAAM,mBAAmB,CAAC,OAAAA,GAAS0zC,EAAO,SAClC,IACM,MAAAvzC,EAAkBH,EAAQ,sBAAuB,SAAU,IAAMsB,EAAM,KAAK,2BAA4B,CAAC,MAAAoyC,CAAK,CAAC,CAAC,EACtHp1C,EAAS,MAAM,8BAA8B,QACxCgC,EAAO,CACZhC,EAAS,MAAM,gBAAiB,CAC5B,KAAM,QACN,UAASiD,GAAAC,EAAAlB,GAAA,YAAAA,EAAO,WAAP,YAAAkB,EAAiB,OAAjB,YAAAD,EAAuB,UAAW,qBAE9C,EAET,EAOA,qBAAqB,CAAC,OAAAvB,GAAS,CAC3BA,EAAO,sBAAuB,CAAC,QAAS,aAAc,QAAS,GAAK,EAEpEsB,EAAM,IAAI,sBAAsB,EAC3B,KAAM1B,GAAa,OACTI,EAAA,0BAA0BwB,EAAA5B,GAAA,YAAAA,EAAU,OAAV,YAAA4B,EAAgB,IAAI,EACxD,EACA,MAAM,IAAM,EACZ,EAAE,QAAQ,IAAM,CACjBxB,EAAO,sBAAuB,CAAC,QAAS,aAAc,QAAS,GAAM,EACxE,CACL,EAQA,oBAAoB,CAAC,OAAAA,CAAM,EAAGgN,EAAM,CAChChN,EAAO,sBAAuB,CAAC,QAAS,YAAa,QAAS,GAAK,EAEnEsB,EAAM,IAAI,wBAAwB0L,CAAI,EAAE,EACnC,KAAMpN,GAAa,OACTI,EAAA,yBAAyBwB,EAAA5B,GAAA,YAAAA,EAAU,OAAV,YAAA4B,EAAgB,IAAI,EACvD,EACA,MAAM,IAAM,EACZ,EAAE,QAAQ,IAAM,CACjBxB,EAAO,sBAAuB,CAAC,QAAS,YAAa,QAAS,GAAM,EACvE,CACL,EAQA,mBAAmB,CAAC,OAAAA,CAAM,EAAGR,EAAM,CAC/BQ,EAAO,sBAAuB,CAAC,QAAS,kBAAmB,QAAS,GAAK,EAEzEsB,EAAM,KAAK,uBAAwB9B,CAAI,EAClC,KAAK,IAAM,CACRlB,EAAS,MAAM,kCAAkC,EACpD,EACA,MAAM,IAAM,EACZ,EAAE,QAAQ,IAAM,CACjB0B,EAAO,sBAAuB,CAAC,QAAS,kBAAmB,QAAS,GAAM,EAC7E,CACL,EAQA,qBAAqB,CAAC,OAAAA,CAAM,EAAGR,EAAM,CACjCQ,EAAO,sBAAuB,CAAC,QAAS,kBAAmB,QAAS,GAAK,EAEnEsB,EAAA,IAAI,wBAAwB9B,EAAK,IAAI,GAAIA,CAAI,EAC9C,KAAK,IAAM,CACRlB,EAAS,MAAM,kCAAkC,EACjDA,EAAS,MAAM,gBAAiB,CAC5B,KAAM,UACN,QAAS,oBACZ,EACJ,EACA,MAAOyF,GAAM,SACVzF,EAAS,MAAM,gBAAiB,CAC5B,KAAM,QACN,UAASiD,GAAAC,EAAAuC,GAAA,YAAAA,EAAG,WAAH,YAAAvC,EAAa,OAAb,YAAAD,EAAmB,UAAW,qBAC1C,EACJ,EAAE,QAAQ,IAAM,CACjBvB,EAAO,sBAAuB,CAAC,QAAS,kBAAmB,QAAS,GAAM,EAC7E,CACL,EAQA,qBAAqB,CAAC,OAAAA,CAAM,EAAGR,EAAM,CACjCQ,EAAO,sBAAuB,CAAC,QAAS,kBAAmB,QAAS,GAAK,EAEzEsB,EAAM,OAAO,wBAAwB9B,EAAK,IAAI,EAAE,EAC3C,KAAK,IAAM,CACRlB,EAAS,MAAM,kCAAkC,EACpD,EACA,MAAOyF,GAAM,SACVzF,EAAS,MAAM,gBAAiB,CAC5B,KAAM,QACN,UAASiD,GAAAC,EAAAuC,GAAA,YAAAA,EAAG,WAAH,YAAAvC,EAAa,OAAb,YAAAD,EAAmB,UAAW,qBAC1C,EACJ,EAAE,QAAQ,IAAM,CACjBvB,EAAO,sBAAuB,CAAC,QAAS,kBAAmB,QAAS,GAAM,EAC7E,EAGT,EAEemxD,GAAA,CACX,WAAY,SACZ5wD,GAAA,UACAC,GAAA,QACAY,GACAqV,UACJ,EClQMlW,GAAwB,CAC1B,QAAS,CACL,IAAK,GACL,OAAQ,GACR,OAAQ,GACR,SAAU,GACV,sBAAuB,EAC3B,EACA,KAAM,IAAIhB,GACV,iBAAkB,EACtB,EAEMkX,GAAU,CACZ,KAAOlW,GAA0BA,EAAM,KACvC,QAAUA,GAA0BA,EAAM,QAC1C,iBAAmBA,GAA0BA,EAAM,gBACvD,EAEMC,GAAY,CACd,CAAC4wD,EAA2B,EAAE7wD,EAAuBG,EAAgD,CACjGH,EAAM,QAAQG,EAAQ,OAAO,EAAIA,EAAQ,OAC7C,EACA,CAAC2wD,EAA2B,EAAE9wD,EAAuB20C,EAAuB,CAC5DA,EAACA,GAAY,GACzBA,EAAa,MAAM,QAAQA,CAAS,EAAkBA,EAAd,CAACA,CAAS,EAElD30C,EAAM,iBAAmB20C,CAAA,CAEjC,EAEM9zC,GAAU,CAEZ,aAAa,CAAC,OAAApB,GAAS,CACnBA,EAAO,wBAAyB,CAAC,QAAS,MAAO,QAAS,GAAK,EAE/DsB,EAAM,IAAI,iBAAiB,EACtB,KAAM1B,GAAa,CACTI,EAAA,sCAAuC4J,EAAI,IAAAhK,EAAU,2BAA4B,EAAE,EAAG,CAAC,KAAM,GAAK,EAClGI,EAAA,sCAAuC4J,EAAI,IAAAhK,EAAU,4BAA6B,EAAE,EAAG,CAAC,KAAM,GAAK,EACnGI,EAAA,4BAA6B4J,EAAI,IAAAhK,EAAU,YAAa,EAAE,EAAG,CAAC,KAAM,GAAK,EACzEI,EAAA,2CAA4C4J,EAAI,IAAAhK,EAAU,8BAA+B,EAAE,EAAG,CAAC,KAAM,GAAK,EACpH,EAAE,MAAM,IAAM,EAClB,EAAE,QAAQ,IAAM,CACbI,EAAO,wBAAyB,CAAC,QAAS,MAAO,QAAS,GAAM,EACnE,CACL,EAEA,mBAAmB,CAAC,OAAAA,GAAS,CACzBA,EAAO,wBAAyB,CAAC,QAAS,MAAO,QAAS,GAAK,EAE/DsB,EAAM,IAAI,sBAAsB,EAC3B,KAAM1B,GAAa,CAChBI,EAAO,wBAAyB4J,EAAI,IAAAhK,EAAU,sBAAuB,CAAE,EAAC,EACxEtB,EAAS,MAAM,+BAAgCsL,EAAI,IAAAhK,EAAU,qBAAqB,CAAC,EACtF,EAAE,MAAM,IAAM,EAClB,EAAE,QAAQ,IAAM,CACbI,EAAO,wBAAyB,CAAC,QAAS,MAAO,QAAS,GAAM,EACnE,CACL,EAEA,kBAAkB,CAAC,OAAAA,CAAM,EAAGsxD,EAAgB,CACxCtxD,EAAO,wBAAyB,CAAC,QAAS,MAAO,QAAS,GAAK,EAE/D,MAAMgN,EAAO,OAAOskD,GAAmB,SAAWA,EAAe,KAAOA,EAExEhwD,EAAM,IAAI,wBAAwB0L,CAAI,EAAE,EACnC,KAAMpN,GAAa,CAChBtB,EAAS,MAAM,8BAA+BsL,EAAI,IAAAhK,EAAU,qBAAqB,CAAC,EACrF,EAAE,MAAM,IAAM,EAClB,EAAE,QAAQ,IAAM,CACbI,EAAO,wBAAyB,CAAC,QAAS,MAAO,QAAS,GAAM,EACnE,CACL,EAEA,MAAM,qBAAqB,CAAC,OAAAA,GAASsxD,EAA2C,CAC5E,MAAMtkD,EAAO,OAAOskD,GAAmB,SAAWA,EAAe,KAAOA,EAEjE,aAAMnxD,EAAkBH,EAAQ,wBAAyB,SAAU,IAAMsB,EAAM,OAAO,wBAAwB0L,CAAI,EAAE,CAAC,CAChI,EAEA,OAAO,CAAC,OAAAhN,EAAQ,YAAA+xC,CAAA,EAAcyV,EAAU,CACpCxnD,EAAO,wBAAyB,CAAC,QAAS,SAAU,QAAS,GAAK,EAElEsB,EAAM,OAAO,eAAeywC,EAAY,iBAAiB,EAAE,IAAI,gBAAgByV,EAAS,IAAI,EAAE,EACzF,KAAM5nD,GAAa,CAChBtB,EAAS,MAAM,0BAA2BsL,EAAI,IAAAhK,EAAU,eAAe,CAAC,EAC3E,EAAE,MAAM,IAAM,EAClB,EAAE,QAAQ,IAAM,CACbI,EAAO,wBAAyB,CAAC,QAAS,SAAU,QAAS,GAAM,EACtE,CACL,EAEA,aAAa,CAAC,OAAAA,EAAQ,YAAA+xC,CAAA,EAAcyV,EAAU,CAC1CxnD,EAAO,wBAAyB,CAAC,QAAS,SAAU,QAAS,GAAK,EAElEsB,EAAM,IAAI,eAAeywC,EAAY,iBAAiB,EAAE,IAAI,gBAAgByV,EAAS,IAAI,gBAAgB,EACpG,KAAM5nD,GAAa,CAChBtB,EAAS,MAAM,0BAA2BsL,EAAI,IAAAhK,EAAU,eAAe,CAAC,EAC3E,EAAE,MAAM,IAAM,EAClB,EAAE,QAAQ,IAAM,CACbI,EAAO,wBAAyB,CAAC,QAAS,SAAU,QAAS,GAAM,EACtE,CACL,EAEA,aAAa,CAAC,OAAAA,EAAQ,YAAA+xC,GAAc,CAAC,cAAA0V,EAAe,KAAA7R,GAAO,CACvD51C,EAAO,wBAAyB,CAAC,QAAS,WAAY,QAAS,GAAK,EAEpEsB,EAAM,KAAK,eAAeywC,EAAY,iBAAiB,EAAE,IAAI,sBAAsB0V,CAAa,mBAAmB7R,CAAI,EAAE,EACpH,KAAMh2C,GAAa,CAChBtB,EAAS,MAAM,kCAAmCsL,MAAIhK,EAAU,gBAAiB,EAAE,CAAC,EACvF,EAAE,MAAM,IAAM,EAClB,EAAE,QAAQ,IAAM,CACbI,EAAO,wBAAyB,CAAC,QAAS,WAAY,QAAS,GAAM,EACxE,CACL,EAEA,uBAAuB,CAAC,OAAAA,EAAQ,YAAA+xC,GAAc,CAAC,KAAA6D,EAAM,cAAA6R,GAAgB,CACjEznD,EAAO,wBAAyB,CAAC,QAAS,eAAgB,QAAS,GAAK,EAElEsB,EAAA,OAAO,gBAAgBs0C,CAAI,sBAAsB6R,CAAa,EAAE,EACjE,KAAK,IAAM,CACCnpD,EAAA,MAAM,sCAAuCmpD,CAAa,EACtE,EAAE,MAAM,IAAM,EAClB,EAAE,QAAQ,IAAM,CACbznD,EAAO,wBAAyB,CAAC,QAAS,eAAgB,QAAS,GAAM,EAC5E,CACL,EAEA,4BAA4B,CAAC,OAAAA,EAAQ,YAAA+xC,CAAA,EAAcvyC,EAAM,CACrDQ,EAAO,wBAAyB,CAAC,QAAS,wBAAyB,QAAS,GAAK,EAE3EsB,EAAA,KAAK,eAAeywC,EAAY,iBAAiB,EAAE,IAAI,qBAAsBvyC,CAAI,EAClF,KAAMI,GAAa,CACZgK,EAAA,IAAIhK,EAAU,cAAc,GACrBI,EAAA,sCAAuC4J,MAAIhK,EAAU,cAAc,EAAG,CAAC,KAAM,GAAK,CAC7F,CACH,EAAE,MAAM,IAAM,EAClB,EAAE,QAAQ,IAAM,CACbI,EAAO,wBAAyB,CAAC,QAAS,wBAAyB,QAAS,GAAM,EACrF,EAET,EAEek1C,GAAA,CACX,WAAY,SACZ30C,GAAA,UACAC,GAAA,QACAY,GACAqV,UACJ,ECpGMlW,GAAqB,CACvB,QAAS,CACL,OAAQ,GACR,aAAc,GACd,QAAS,GACT,OAAQ,GACR,SAAU,GACV,UAAW,GACX,cAAe,GACf,gBAAiB,GACjB,cAAe,GACf,cAAe,GACf,oBAAqB,GACrB,aAAc,EAElB,EACA,KAAM,GACN,cAAe,CACX,WAAY,GACZ,UAAW,GACX,UAAW,GACX,MAAO,GACP,MAAO,GACP,KAAM,GACN,OAAQ,GACR,gBAAiB,CAAC,EAClB,YAAa,CAAC,EACd,KAAM,KACN,OAAQ,GACR,WAAY,EAChB,EACA,eAAgB,CAAC,EACjB,QAAS,CAAC,EACV,WAAY,CAAC,EACb,gBAAiB,CAAC,EAClB,kBAAmB,CAAC,EACpB,WAAY,IAAIhB,GAChB,eAAgB,EAChB,mBAAoB,EACpB,cAAe,CAAC,EAChB,QAAS,CACL,gBAAiB,EACrB,EACA,sBAAuB,CAAC,EACxB,mBAAoB,CAChB,aAAc,EACd,KAAM,EACN,UAAW,EACX,SAAU,EACV,GAAI,EACJ,MAAO,CACX,EACA,eAAgB,CACZ,KAAM,EACN,aAAc,GACd,OAAQ,CAAC,EACT,SAAU,CAAC,EACX,OAAQ,CACJ,SAAU,CAAC,EACX,SAAU,GACV,OAAQ,EACZ,EACA,QAAS,GAEjB,EAGMkX,GAAU,CACZ,KAAOlW,GAAuBA,EAAM,KACpC,eAAiBA,GAAuBA,EAAM,QAC9C,QAAUA,GAAuBA,EAAM,QACvC,WAAaA,GAAuBA,EAAM,WAC1C,gBAAkBA,GAAuBA,EAAM,gBAC/C,cAAgBA,GAAuBA,EAAM,cAC7C,kBAAoBA,GAAuBA,EAAM,kBACjD,WAAaA,GAAuBA,EAAM,WAC1C,eAAiBA,GAAuBA,EAAM,eAC9C,mBAAqBA,GAAuBA,EAAM,mBAClD,cAAgBA,GAAuBA,EAAM,cAC7C,QAAUA,GAAuBA,EAAM,QACvC,sBAAwBA,GAAuBA,EAAM,sBACrD,eAAiBA,GAAuBA,EAAM,eAC9C,mBAAqBA,GAAuBA,EAAM,kBACtD,EAEMC,GAAY,CACd,CAAC+wD,EAAyB,EAAEhxD,EAAoBG,EAAgD,CAC5FH,EAAM,QAAQG,EAAQ,OAAO,EAAIA,EAAQ,QACzCH,EAAM,KAAO,EACjB,EACA,CAACixD,EAAiB,EAAEjxD,EAAoBf,EAAgC,CACpE,QAAQ,IAAI,aAAa,EACzB,QAAQ,IAAIA,CAAI,EAChBe,EAAM,QAAUf,EAAK,KACrBe,EAAM,eAAiBf,EAAK,KAAK,gBACjCe,EAAM,sBAAwBf,EAAK,KAAK,MAAM,SAC9Ce,EAAM,mBAAqB,CACvB,aAAcf,EAAK,KAAK,aACxB,KAAMA,EAAK,KAAK,KAChB,UAAWA,EAAK,KAAK,UACrB,SAAUA,EAAK,KAAK,SACpB,GAAIA,EAAK,KAAK,GACd,MAAOA,EAAK,KAAK,KACrB,EACAe,EAAM,KAAO,EACjB,EACA,CAACkxD,EAAqB,EAAElxD,EAAoBmxD,EAAyC,CACjFnxD,EAAM,WAAamxD,GAAA,YAAAA,EAAS,OAChC,EAEA,CAACC,EAAwB,EAAEpxD,EAAoB0M,EAA4C,CACvF1M,EAAM,QAAQ0M,EAAQ,KAAK,EAAIA,EAAQ,KAC3C,EACA,CAAC2kD,EAAgB,EAAErxD,EAAoBm8B,EAAyB,CAC5Dn8B,EAAM,cAAgB,CAAC,GAAGA,EAAM,cAAe,GAAGm8B,CAAM,EACxDn8B,EAAM,cAAc,OAAS,GAC7BA,EAAM,KAAO,EACjB,EACA,CAACsxD,EAAgB,EAAEtxD,EAAoBm8B,EAAyB,CACtD,MAAAo1B,EAAcvxD,EAAM,QAAQ,UAAWy7B,GAAMA,EAAE,OAASU,EAAO,IAAI,EACrEo1B,GAAe,EACfvxD,EAAM,QAAQuxD,CAAW,EAAIp1B,EAE7Bn8B,EAAM,QAAQ,KAAKm8B,CAAM,CAEjC,EACA,CAACq1B,EAAkB,EAAExxD,EAAoBm8B,EAAyB,CAC9Dn8B,EAAM,cAAgBm8B,CAC1B,EACA,CAACs1B,EAA8B,EAAEzxD,EAAoB0xD,EAAsB,CACvE1xD,EAAM,cAAc,YAAc0xD,CACtC,EACA,CAACC,EAAyB,EAAE3xD,EAAoB41C,EAAS,CACrD51C,EAAM,cAAc,gBAAkB41C,CAC1C,EACA,CAACgc,EAAyB,EAAE5xD,EAAoB6xD,EAAQ,CACpD7xD,EAAM,eAAiB6xD,CAC3B,EACA,CAACC,EAAsB,EAAE9xD,EAAoB2H,EAAgB,CACzD3H,EAAM,cAAc,MAAQ2H,CAChC,EACA,CAACoqD,EAA0B,EAAE/xD,EAAoBmxD,EAAgB,CAC7DnxD,EAAM,gBAAkBmxD,CAC5B,EACA,CAACa,EAA8B,EAAEhyD,EAAoBk1C,EAAoB,CACjEA,GAAe,KACfl1C,EAAM,WAAW,OAAO,MAAM,EAE9BA,EAAM,WAAW,OAAO,MAAMk1C,CAAU,CAEhD,EACA,CAAC+c,EAAyB,EAAEjyD,EAAoBkyD,EAAiB,CAC7DlyD,EAAM,kBAAoBkyD,CAC9B,EACA,CAACC,EAA8B,EAAEnyD,EAAoBipC,EAAe,CAChEjpC,EAAM,eAAgBipC,GAAA,YAAAA,EAAe,OAAQ,CAAC,EAC9CjpC,EAAM,oBAAqBipC,GAAA,YAAAA,EAAe,QAAS,CACvD,EACA,CAACmpB,EAAwB,EAAEpyD,EAAoBf,EAAmC,CAC9E,QAAQ,IAAI,oBAAoB,EAChC,QAAQ,IAAIA,CAAI,EAEhBe,EAAM,eAAef,EAAK,GAAG,EAAIA,EAAK,MAE9C,EAEM4B,GAAU,CAKZ,YAAY,CAAC,OAAApB,GAAS,CAgBXA,EAAA+xD,GAfQ,CACX,WAAY,GACZ,UAAW,GACX,UAAW,GACX,MAAO,GACP,MAAO,GACP,KAAM,GACN,OAAQ,GACR,gBAAiB,CAAC,EAClB,YAAa,CAAC,EACd,KAAM,KACN,OAAQ,GACR,WAAY,EAChB,CAEiC,CACrC,EAMA,MAAM,oBAAoB,CAAC,OAAA/xD,EAAQ,MAAAO,GAAQ,CACnC,IACA,MAAMgE,EAAUhE,EAAM,eAEhB,CAAC,OAAA80C,EAAS,GAAI,SAAAZ,EAAW,GAAI,OAAAW,EAAS,CAAC,GAAK7wC,EAE5CggD,EAAc,CAChB,KAAQlP,EAAO,OAAS,EAAKZ,GAAA,MAAAA,EAAW,GAAK,IAAIY,EAAO,CAAC,CAAC,GAAKA,EAAO,CAAC,EAAK,KAC5E,mBAAoBD,EAAO,UAAY,KACvC,mBAAoBA,EAAO,UAAY,KACvC,YAAaA,EAAO,QAAU,KAC9B,KAAQ7wC,EAAQ,MAAQ,EACxB,aAAgBA,EAAQ,cAAgB,GACxC,QAAWA,EAAQ,OACvB,EAGMT,EAAQnC,GAAqB4iD,EAAa,EAAI,EAC5C,YAAI,sBAAuBzgD,CAAK,EAExC,MAAMzC,EAAe,MAAMlB,EAAkBH,EAAQ,sBAAuB,UAAW,IAAMsB,EAAM,IAAI,cAAcwC,CAAK,EAAE,CAAC,EACtH9D,EAAAwxD,GAAmBnwD,CAAY,QACjCf,EAAO,CACZ,QAAQ,MAAMA,CAAK,EAE3B,EAMA,MAAM,sBAAsB,CAAC,OAAAN,GAAS,CAC9B,IACM,MAAAqB,EAAe,MAAMlB,EAAkBH,EAAQ,sBAAuB,gBAAiB,IAAMsB,EAAM,IAAI,oBAAoB,CAAC,EAE3HtB,EAAAyxD,GAAuBpwD,CAAY,QACrCf,EAAO,CACZ,QAAQ,MAAMA,CAAK,EAE3B,EAEA,MAAM,eAAe,CAAC,OAAAN,GAASR,EAAqE,CAC1F,MAAAW,EAAkBH,EAAQ,sBAAuB,eAAgB,IAAMsB,EAAM,KAAK,oBAAqB9B,CAAI,CAAC,CACtH,EAEA,gBAAgB,CAAC,OAAAQ,CAAM,EAAGR,EAAW,CACjCQ,EAAOuxD,GAA2B,CAAC,QAAS,eAAgB,QAAS,GAAK,EAE1EjwD,EAAM,KAAK,yBAA0B,CAAC,KAAA9B,CAAK,GACtC,KAAK,IAAM,CACRlB,EAAS,MAAM,uBAAuB,EACzC,EAAE,MAAM,IAAM,EAClB,EAAE,QAAQ,IAAM,CACb0B,EAAOuxD,GAA2B,CAAC,QAAS,eAAgB,QAAS,GAAM,EAC9E,CACL,EAMA,yBAAyB,CAAC,OAAAvxD,CAAM,EAAG08B,EAAyB,CACxD18B,EAAOuxD,GAA2B,CAAC,QAAS,sBAAuB,QAAS,GAAK,EAE3EjwD,EAAA,IAAI,eAAeo7B,EAAO,IAAI,gBAAgB,EAC/C,KAAM98B,GAAa,OAChBI,EAAO0yD,KAAgClxD,EAAA5B,GAAA,YAAAA,EAAU,OAAV,YAAA4B,EAAgB,gBAAiB,EAAE,EAC7E,EAAE,MAAM,IAAM,EAClB,EAAE,QAAQ,IAAM,CACbxB,EAAOuxD,GAA2B,CAAC,QAAS,sBAAuB,QAAS,GAAM,EACrF,CACL,EAMA,MAAM,YAAY,CAAC,OAAAvxD,GAASR,EAA0B,OAElD,QAAQ,IAAI,MAAM,EAClB,QAAQ,IAAIA,CAAI,EAChB,MAAMm9B,EAAWn9B,EAAK,KACtB,GAAI,CAACm9B,EACK,UAAI,MAAM,uBAAuB,EAGvCn9B,GAAA,MAAAA,EAAM,SACF,MAAM,QAAQA,GAAA,YAAAA,EAAM,OAAO,IAC3BA,EAAK,QAAUA,EAAK,QAAQ,KAAK,GAAG,GAI5C,MAAM+kD,EAAc,CAChB,QAAS/kD,GAAA,YAAAA,EAAM,QACf,eAAegC,EAAAhC,GAAA,YAAAA,EAAM,UAAN,YAAAgC,EAAe,aAClC,EACA,QAAQ,IAAI+iD,CAAW,EAEjB,MAAAzgD,EAAQnC,GAAqB4iD,EAAa,EAAI,EAEpD,QAAQ,IAAIzgD,CAAK,EAEX,MAAAxC,EAAM,IAAI,eAAeq7B,CAAQ,GAAG74B,CAAK,EAAE,EAC5C,KAAMlE,GAAa,CAChBI,EAAO4xD,GAAkBhyD,EAAS,KAAK,MAAM,EAChD,EAAE,MAAM,IAAM,CACXtB,EAAS,MAAM,sBAAsB,EACxC,EAAE,QAAQ,IAAM,OACb0B,EAAOuxD,GAA2B,CAAC,QAAS,SAAU,QAAS,GAAM,GAEjE/vD,EAAAhC,GAAA,YAAAA,EAAM,UAAN,MAAAgC,EAAe,eACfxB,EAAOuxD,GAA2B,CAAC,QAAS,eAAgB,QAAS,GAAM,CAC/E,CACH,CACT,EAKA,MAAM,aAAa,CAAC,OAAAvxD,GAAS08B,EAAyB,SAC9C,IACA,MAAMr7B,EAAe,MAAMlB,EAAkBH,EAAQ,sBAAuB,UAAW,IAAMsB,EAAM,IAAI,eAAeo7B,EAAO,IAAI,GAAIA,CAAM,CAAC,EAErI18B,EAAA4xD,GAAkBvwD,GAAA,YAAAA,EAAc,MAAM,EAC7CI,EAAK,QAAQ,CACT,QAAS,+BACZ,QACInB,EAAO,CACZmB,EAAK,MAAM,CACP,UAASF,GAAAC,EAAAlB,GAAA,YAAAA,EAAO,WAAP,YAAAkB,EAAiB,OAAjB,YAAAD,EAAuB,UAAW,yCAC9C,EAET,EAMA,MAAM,aAAa,CAAC,MAAAhB,EAAO,OAAAP,GAAS,aAC5B,IACA,MAAMqB,EAAe,MAAMlB,EAAkBH,EAAQ,sBAAuB,SAAU,IAAMsB,EAAM,KAAK,cAAef,EAAM,aAAa,CAAC,EAEnI,OAAAP,EAAA4xD,GAAkBvwD,GAAA,YAAAA,EAAc,MAAM,EACtCrB,EAAA6xD,GAAkBxwD,GAAA,YAAAA,EAAc,MAAM,EAC7CI,EAAK,QAAQ,CACT,QAAS,iCACZ,EACQnD,EAAA,MAAM,+BAAgC+C,GAAA,YAAAA,EAAc,MAAM,EAE5DA,GAAA,YAAAA,EAAc,aAChBf,EAAO,CACR,IAAAiB,GAAAC,EAAAlB,GAAA,YAAAA,EAAO,WAAP,YAAAkB,EAAiB,OAAjB,MAAAD,EAAuB,OAAQ,CAC/B,MAAMmV,EAAepW,EAAM,SAAS,KAAK,OAAO,OAAO,KAAKA,EAAM,SAAS,KAAK,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,EAC7FmB,EAAK,MAAM,CACP,QAASiV,CAAA,CACZ,OAEDjV,EAAK,MAAM,CACP,QAAS,wBACZ,EAELlB,EAAM,WAAW,OAAO,KAAI0kB,GAAA3V,EAAAhP,GAAA,YAAAA,EAAO,WAAP,YAAAgP,EAAiB,OAAjB,YAAA2V,EAAuB,MAAM,EAEjE,EAMA,MAAM,aAAa,CAAC,OAAAjlB,GAAS08B,EAAyB,SAC9C,IACM,MAAAv8B,EAAkBH,EAAQ,sBAAuB,WAAY,IAAMsB,EAAM,OAAO,eAAeo7B,EAAO,IAAI,EAAE,CAAC,QAC9Gp8B,EAAO,CACZmB,QAAK,MAAM,CACP,UAASF,GAAAC,EAAAlB,GAAA,YAAAA,EAAO,WAAP,YAAAkB,EAAiB,OAAjB,YAAAD,EAAuB,UAAW,qBAC9C,EACK,IAAI,MAAMjB,CAAK,EAE7B,EAMA,eAAe,CAAC,OAAAN,CAAM,EAAG4yD,EAAc,CACnC5yD,EAAOuxD,GAA2B,CAAC,QAAS,gBAAiB,QAAS,GAAK,EAE3EjwD,EAAM,IAAI,eAAesxD,CAAI,kBAAkB,EAC1C,KAAMhzD,GAAa,OACR,YAAIA,EAAS,IAAI,EACzBI,EAAOwyD,IAA2BhxD,EAAA5B,GAAA,YAAAA,EAAU,OAAV,YAAA4B,EAAgB,cAAc,EACnE,EAAE,MAAM,IAAM,EAClB,EAAE,QAAQ,IAAM,CACbxB,EAAOuxD,GAA2B,CAAC,QAAS,gBAAiB,QAAS,GAAM,EAC/E,CACL,EAMA,oBAAoB,CAAC,OAAAvxD,CAAM,EAAGqrC,EAAY,CACtCrrC,EAAOuxD,GAA2B,CAAC,QAAS,gBAAiB,QAAS,GAAK,EAC3EjwD,EAAM,KAAK,eAAewxC,GAAe,eAAgB,aAAYzH,EAAM,IAAI,WAAYA,CAAK,EAC3F,KAAMzrC,GAAa,OAChBtB,EAAS,MAAM,iCAAiCkD,EAAA5B,GAAA,YAAAA,EAAU,OAAV,YAAA4B,EAAgB,OAAO,EAC1E,EAAE,MAAM,IAAM,EAClB,EAAE,QAAQ,IAAM,CACbxB,EAAOuxD,GAA2B,CAAC,QAAS,gBAAiB,QAAS,GAAM,EAC/E,CACL,EAMA,sBAAsB,CAAC,OAAAvxD,CAAM,EAAGR,EAAW,CACvCQ,EAAOuxD,GAA2B,CAAC,QAAS,kBAAmB,QAAS,GAAK,EAE7EjwD,EAAM,KAAK,eAAewxC,GAAe,eAAgB,aAAYtzC,EAAK,MAAM,OAAO,IAAI,qBAAsBA,EAAK,KAAK,EACtH,KAAMI,GAAa,OAChB6B,EAAK,QAAQ,CACT,QAAS,4BACZ,EACDzB,EAAO,4BAA4BwB,EAAA5B,GAAA,YAAAA,EAAU,OAAV,YAAA4B,EAAgB,SAAU,CAAC,KAAM,GAAK,EACzElD,EAAS,MAAM,wCAAwC,EAC1D,EAAE,MAAOyF,GAAM,SAChBtC,EAAK,MAAM,CACP,UAASF,GAAAC,EAAAuC,GAAA,YAAAA,EAAG,WAAH,YAAAvC,EAAa,OAAb,YAAAD,EAAmB,UAAW,qBAC1C,EACJ,EAAE,QAAQ,IAAM,CACbvB,EAAOuxD,GAA2B,CAAC,QAAS,kBAAmB,QAAS,GAAM,EACjF,CACL,EAMA,eAAe,CAAC,OAAAvxD,CAAM,EAAG4yD,EAAc,CAC7BtxD,EAAA,IAAI,eAAewxC,GAAe,eAAgB,aAAY8f,CAAI,WAAW,EAC9E,KAAMhzD,GAAa,WACTI,EAAAkyD,KAA2B5iD,GAAA/N,GAAAC,EAAA5B,GAAA,YAAAA,EAAU,OAAV,YAAA4B,EAAgB,WAAhB,YAAAD,EAA0B,UAA1B,YAAA+N,EAAmC,OAAQ,EAAE,EAClF,EAAE,MAAM,IAAM,EAClB,EAAE,QAAQ,IAAM,CACbtP,EAAO,sBAAuB,CAAC,QAAS,UAAW,QAAS,GAAM,EACrE,CACL,EAMA,MAAM,cAAc,CAAC,OAAAA,GAAS4yD,EAAc,CACjC,aAAMzyD,EAAkBH,EAAQ,sBAAuB,YAAa,IAAMsB,EAAM,IAAI,YAAYsxD,CAAI,UAAU,CAAC,CAC1H,EAMA,MAAM,cAAc,CAAC,OAAA5yD,GAAS8D,EAAe,CACzC,MAAMzC,EAAe,MAAMlB,EAAkBH,EAAQ,sBAAuB,YAAa,IAAMsB,EAAM,IAAI,6BAA6BwC,CAAK,EAAE,CAAC,EAC9I9D,EAAOsyD,GAA4BjxD,EAAa,SAAW,EAAE,CACjE,EAKA,MAAM,YAAY,CAAC,OAAArB,GAASR,EAAM,CACvB,aAAMW,EAAkBH,EAAQ,sBAAuB,eAAgB,IAAMsB,EAAM,KAAK,oBAAqB9B,CAAI,CAAC,CAC7H,EAEA,MAAM,cAAc,CAAC,OAAAQ,GAASR,EAAM,CACzB,aAAMW,EAAkBH,EAAQ,sBAAuB,iBAAkB,IAAMsB,EAAM,KAAK,sBAAuB9B,CAAI,CAAC,CACjI,EAKA,wBAAwB,CAAC,OAAAQ,CAAA,EAAS,CAAC,OAAA08B,EAAQ,cAAAm2B,GAAgB,CACvD7yD,EAAOuxD,GAA2B,CAAC,QAAS,gBAAiB,QAAS,GAAK,EAC3EjwD,EAAM,KAAK,eAAewxC,GAAe,eAAgB,aAAYpW,EAAO,IAAI,mBAAmBm2B,CAAa,EAAE,EAC7G,KAAMjzD,GAAa,SAChBI,EAAOgyD,KAAgCxwD,EAAA5B,GAAA,YAAAA,EAAU,OAAV,YAAA4B,EAAgB,cAAe,EAAE,EACxElD,EAAS,MAAM,wCAAwCiD,EAAA3B,GAAA,YAAAA,EAAU,OAAV,YAAA2B,EAAgB,WAAW,EACrF,EAAE,MAAM,IAAM,EAClB,EAAE,QAAQ,IAAM,CACbvB,EAAOuxD,GAA2B,CAAC,QAAS,gBAAiB,QAAS,GAAM,EAC/E,CACL,EAMA,kBAAkB,CAAC,OAAAvxD,CAAM,EAAG08B,EAAyB,CACjD18B,EAAOuxD,GAA2B,CAAC,QAAS,cAAe,QAAS,GAAK,EACnEjwD,EAAA,IAAI,eAAeo7B,EAAO,IAAI,eAAe,EAC9C,KAAM98B,GAAa,OAChBI,EAAOgyD,KAAgCxwD,EAAA5B,GAAA,YAAAA,EAAU,OAAV,YAAA4B,EAAgB,cAAe,EAAE,EACxElD,EAAS,MAAM,6BAA6B,EAC/C,EAAE,MAAM,IAAM,EAClB,EAAE,QAAQ,IAAM,CACb0B,EAAOuxD,GAA2B,CAAC,QAAS,cAAe,QAAS,GAAM,EAC7E,EAET,EAEeG,GAAA,CACX,WAAY,SACZnxD,GAAA,UACAC,GAAA,QACAY,GACAqV,UACJ,ECjjBMlW,GAAqB,CACvB,QAAS,CACL,UAAW,GACX,UAAW,EACf,EACA,sBAAuB,EAC3B,EAEMkW,GAAwC,CAC1C,QAAUlW,GAAUA,EAAM,OAC9B,EAEMC,GAAY,CACd,CAACsyD,EAAwB,EAAEvyD,EAAoBG,EAAgD,CAC3FH,EAAM,QAAQG,EAAQ,OAAO,EAAIA,EAAQ,QAEjD,EAEMU,GAAwD,CAE1D,MAAM,kBAAkB,CAAC,OAAApB,GAAS,CAC9BA,EAAO8yD,GAA0B,CAAC,QAAS,YAAa,QAAS,GAAK,EAElE,IACA,MAAMlzD,EAAW,MAAM0B,EAAM,IAAI,gBAAgB,EACxChD,EAAA,MAAM,kCAAmCsB,EAAS,IAAI,QAC1DmE,EAAG,CACCzF,EAAA,MAAM,gCAAiCyF,EAAE,QAAQ,SAC5D,CACE/D,EAAO8yD,GAA0B,CAAC,QAAS,YAAa,QAAS,GAAM,EAE/E,EAEA,MAAM,eAAe,CAAC,OAAA9yD,GAASR,EAAuC,CAClEQ,EAAO8yD,GAA0B,CAAC,QAAS,YAAa,QAAS,GAAK,EAElE,IACA,MAAMlzD,EAAW,MAAM0B,EAAM,KAAK,sBAAuB9B,CAAI,EACpDlB,EAAA,MAAM,kCAAmCsB,EAAS,IAAI,QAC1DmE,EAAG,CACCzF,EAAA,MAAM,gCAAiCyF,EAAE,QAAQ,SAC5D,CACE/D,EAAO8yD,GAA0B,CAAC,QAAS,YAAa,QAAS,GAAM,EAE/E,EAEA,MAAM,mBAAoB,CAClB,IACA,MAAMlzD,EAAW,MAAM0B,EAAM,IAAI,aAAa,EACrChD,EAAA,MAAM,uBAAwBsB,EAAS,IAAI,QAC/CmE,EAAG,CACA,cAAM,kCAAmCA,CAAC,EAE1D,EAEA,MAAM,YAAYy/B,EAAGuvB,EAAkB,CAC/B,IACA,MAAMnzD,EAAW,MAAM0B,EAAM,KAAK,mCAAmCyxD,CAAQ,EAAE,EACtEz0D,EAAA,MAAM,8BAA+BsB,EAAS,IAAI,QACtDmE,EAAG,CACA,cAAM,gCAAiCA,CAAC,EACpD,CAER,EAEeivD,GAAA,CACX,WAAY,SACZzyD,GAAA,UACAC,GAAA,QACAY,GACAqV,UACJ,ECnFMw8C,GAA8C,CAChD,kBAAqB,gBACrB,oBAAuB,gBACvB,qBAAwB,mBACxB,oBAAuB,mBACvB,oBAAuB,kBACvB,oBAAuB,kBACvB,iBAAoB,eACpB,oBAAuB,eACvB,oBAAuB,kBACvB,oBAAuB,kBACvB,mBAAsB,iBACtB,oBAAuB,gBAC3B,EAIM1yD,GAA2B,CAC7B,QAAS,CACL,aAAc,GACd,YAAa,GACb,mBAAoB,GACpB,mBAAoB,GACpB,SAAU,EACd,EAEA,oBAAqB,GAErB,gBAAiB,CACb,cAAe,KACf,KAAM,IACV,EAEA,iBAAkB,IAAIhB,GAEtB,MAAO,CACH,CACI,KAAM,QACN,QAAS,CACL,QAAS,CACL,GAAI,oBACJ,MAAO,EACX,EACA,OAAQ,CACJ,GAAI,mBACJ,MAAO,GAEf,EACA,YAAa,CACT,QAAS,CACL,SACA,mBACA,oBACA,mBACA,sBACA,0BACA,eACA,qBACA,YACJ,CAER,EACA,CACI,KAAM,WACN,QAAS,CACL,QAAS,CACL,GAAI,uBACJ,MAAO,EACX,EACA,OAAQ,CACJ,GAAI,sBACJ,MAAO,GAEf,EACA,YAAa,CACT,QAAS,CACL,eACA,oBACA,mBACA,sBACA,0BACA,UACA,gBACA,UACA,gBACA,4BACA,YACJ,CAER,EACA,CACI,KAAM,UACN,QAAS,CACL,QAAS,CACL,GAAI,sBACJ,MAAO,GACX,EACA,OAAQ,CACJ,GAAI,qBACJ,MAAO,IAEf,EACA,YAAa,CACT,QAAS,CACL,kBACA,qBACA,oBACA,sBACA,gBACA,sBACA,qBACA,2BACA,qBACA,MACA,kCACA,YACJ,CACJ,CAER,EAEA,aAAc,CACV,cAAe,KACf,QAAS,KACT,MAAO,CAAC,EACR,KAAM,KACN,SAAU,KACV,UAAW,KACX,aAAc,KACd,cAAe,KACf,WAAY,IAChB,EAEA,mBAAoB,KACpB,wBAAyB,EAEzB,iBAAkB,EAClB,cAAe,EAEf,oBAAqB,CACjB,KAAM,QACN,SAAU,UAElB,EAEMkX,GAAU,CACZ,QAAUlW,GAA6BA,EAAM,QAC7C,oBAAsBA,GAA6BA,EAAM,oBACzD,MAAQA,GAA6BA,EAAM,MAC3C,aAAeA,GAA6BA,EAAM,aAClD,gBAAkBA,GAA6BA,EAAM,gBACrD,iBAAmBA,GAA6BA,EAAM,iBACtD,mBAAqBA,GAA6BA,EAAM,mBACxD,wBAA0BA,GAA6BA,EAAM,wBAC7D,qBAAuBA,GAA6B,CAC1C,MAAA2yD,EAAmBD,GAAoB1yD,EAAM,kBAAkB,EACrE,OAAO2yD,GAAsC,iBACjD,EACA,iBAAmB3yD,GAA6B,CAC5C,OAAQA,EAAM,mBAAoB,CAC9B,IAAK,oBACL,IAAK,mBACL,IAAK,sBACL,IAAK,sBACL,IAAK,iCACL,IAAK,iCACM,cACX,IAAK,uBACL,IAAK,sBACL,IAAK,sBACL,IAAK,sBACL,IAAK,iCACM,iBACX,IAAK,sBACL,IAAK,qBACL,IAAK,sBACL,IAAK,sBACM,gBACX,QACW,YAEnB,EACA,qBAAuBA,GAA6B,CAChD,OAAQA,EAAM,mBAAoB,CAC9B,IAAK,oBACL,IAAK,uBACL,IAAK,sBACL,IAAK,sBACL,IAAK,sBACL,IAAK,sBACM,gBACX,IAAK,sBACL,IAAK,mBACL,IAAK,qBACL,IAAK,sBACL,IAAK,sBACL,IAAK,sBACM,eACX,QACW,gBAEnB,EACA,sBAAwBA,GAA6BA,mBAAM,eAANA,cAAoB,iBAAkB,UAC3F,uBAAyBA,GAA6BA,mBAAM,eAANA,cAAoB,iBAAkB,YAC5F,sBAAwBA,GAA6BA,mBAAM,eAANA,cAAoB,iBAAkB,UAC3F,oBAAsBA,GAA6B,OACzC,MAAA4yD,GAAa5yD,IAAM,eAANA,cAAoB,QACnC,OAAC4yD,EACEtwD,GAAMswD,CAAU,EAAE,OAAO,aAAa,EADrB,EAE5B,EACA,iBAAmB5yD,GAA6BA,EAAM,iBACtD,cAAgBA,GAA6BA,EAAM,cACnD,oBAAsBA,GAA6BA,EAAM,mBAC7D,EAEMC,GAAY,CACd,CAAC4yD,EAA8B,EAAE7yD,EAA0BG,EAAgD,CACvGH,EAAM,QAAQG,EAAQ,OAAO,EAAIA,EAAQ,OAC7C,EACA,CAAC2yD,EAA8B,EAAE9yD,EAA0B+yD,EAAS,CAChE/yD,EAAM,oBAAsB+yD,CAChC,EACA,CAACC,EAA2B,EAAEhzD,EAA0BizD,EAAc,CAClEjzD,EAAM,iBAAmBizD,CAC7B,EACA,CAACC,EAAwC,EAAElzD,EAA0BmzD,EAGlE,CACCnzD,EAAM,oBAAsBmzD,CAChC,EACA,CAACC,EAAwB,EAAEpzD,EAA0BqzD,EAAmB,CACpErzD,EAAM,cAAgBqzD,CAC1B,EACA,CAACC,EAAsB,EAAEtzD,EAA0By9B,EAAc,CAC7Dz9B,EAAM,aAAey9B,CACzB,EAKA,CAAC81B,EAA6B,EAAEvzD,EAA0BwzD,EAAiB,CACnEA,EAAgB,gBAChBxzD,EAAM,gBAAgB,cAAgBwzD,EAAgB,eAEtDA,EAAgB,OAChBxzD,EAAM,gBAAgB,KAAOwzD,EAAgB,KAErD,EACA,CAACC,EAA6B,EAAEzzD,EAA0By9B,EAAc,CACpE,QAAQ,IAAI,yBAAyB,EACrC,QAAQ,IAAIA,CAAY,EACxBz9B,EAAM,mBAAqBy9B,CAC/B,EACA,CAACi2B,EAA8B,EAAE1zD,EAA0B4zB,EAAO,CAC9D5zB,EAAM,wBAA0B4zB,CACpC,EACA,CAAC+/B,EAAoC,EAAE3zD,EAA0Bk1C,EAA4B,KAAM,CAC3FA,GAAe,KACfl1C,EAAM,iBAAiB,OAAO,MAAM,EAEpCA,EAAM,iBAAiB,OAAO,MAAMk1C,CAAU,CAEtD,EACA,CAAC0e,EAAiC,EAAE5zD,EAA0BD,EAA0C,CACpGC,EAAM,iBAAiB,OAAO,IAAID,CAAK,EAE/C,EAEMc,GAAU,CAEZ,MAAM,gBAAgB,CAAC,OAAApB,GAASo0D,EAAK,SAC7B,IACA,MAAM/yD,EAAe,MAAMlB,EAAkBH,EAAQ,2BAA4B,cAAe,IAAMsB,EAAM,KAAK,mBAAoB,CAAC,GAAI8yD,CAAI,EAAC,EACxIp0D,EAAA6zD,GAAwBxyD,EAAa,YAAY,EACxDrB,EAAO,sBAAuBqB,EAAa,QAAS,CAAC,KAAM,GAAK,EAEhE/C,EAAS,MAAM,gBAAiB,CAC5B,KAAM,UACN,QAAS,0BACZ,EACDA,EAAS,MAAM,2BAA2B,QACrCgC,EAAO,CACZhC,EAAS,MAAM,gBAAiB,CAC5B,KAAM,QACN,UAASiD,GAAAC,EAAAlB,EAAM,WAAN,YAAAkB,EAAgB,OAAhB,YAAAD,EAAsB,UAAWjB,CAAA,CAC7C,EAET,EAEA,MAAM,WAAW,CAAC,OAAAN,GAASo0D,EAAa,SAChC,IACA,MAAM/yD,EAAe,MAAMlB,EAAkBH,EAAQ,2BAA4B,cAAe,IAAMsB,EAAM,KAAK,wBAAyB,CAAC,GAAI8yD,CAAI,EAAC,EACpJ,OAAA91D,EAAS,MAAM,gBAAiB,CAC5B,KAAM,UACN,QAAS,+BACZ,EACDA,EAAS,MAAM,mBAAmB,EAE3B+C,QACFf,EAAO,CACZhC,EAAS,MAAM,gBAAiB,CAC5B,KAAM,QACN,UAASiD,GAAAC,EAAAlB,EAAM,WAAN,YAAAkB,EAAgB,OAAhB,YAAAD,EAAsB,UAAW,iDAC7C,EAET,EAEA,SAAS,CAAC,OAAAvB,CAAM,EAAGR,EAAM,CACrBQ,EAAO,2BAA4B,CAAC,QAAS,cAAe,QAAS,GAAK,EAE1EsB,EAAM,KAAK,yBAA0B9B,CAAI,EACpC,KAAMI,GAAa,CACTI,EAAA,mBAAoBJ,EAAS,KAAK,YAAY,EACrDtB,EAAS,MAAM,gBAAiB,CAC5B,KAAM,UACN,QAAS,+BACZ,EACDA,EAAS,MAAM,mBAAmB,EACrC,EAAE,MAAOyF,GAAM,CAChB,QAAQ,IAAIA,CAAC,EACbzF,EAAS,MAAM,gBAAiB,CAC5B,KAAM,QACN,QAASyF,EAAE,SAAS,KAAK,QAC5B,EACJ,EAAE,QAAQ,IAAM,CACb/D,EAAO,2BAA4B,CAAC,QAAS,cAAe,QAAS,GAAM,EAC9E,CACL,EAEA,YAAY,CAAC,OAAAA,CAAM,EAAGiG,EAAY,CAC9BjG,EAAO,2BAA4B,CAAC,QAAS,cAAe,QAAS,GAAK,EAE1EsB,EAAM,OAAO,0BAA0B2E,CAAE,EAAE,EACtC,KAAMrG,GAAa,CACTI,EAAA,mBAAoBJ,EAAS,KAAK,YAAY,EACrDtB,EAAS,MAAM,gBAAiB,CAC5B,KAAM,UACN,QAAS,+BACZ,EACDA,EAAS,MAAM,mBAAmB,EACrC,EAAE,MAAOyF,GAAM,CAChB,QAAQ,IAAIA,CAAC,EACbzF,EAAS,MAAM,gBAAiB,CAC5B,KAAM,QACN,QAASyF,EAAE,SAAS,KAAK,QAC5B,EACJ,EAAE,QAAQ,IAAM,CACb/D,EAAO,2BAA4B,CAAC,QAAS,cAAe,QAAS,GAAM,EAC9E,CACL,EAEA,mBAAmB,CAAC,OAAAA,GAAS,CACzBA,EAAO,2BAA4B,CAAC,QAAS,qBAAsB,QAAS,GAAK,EACjFA,EAAO,gCAAgC,EAEvCsB,EAAM,OAAO,kBAAkB,EAC1B,KAAM1B,GAAa,CACTI,EAAA,mBAAoBJ,EAAS,KAAK,YAAY,EACrDtB,EAAS,MAAM,6BAA6B,EAC5CA,EAAS,MAAM,gBAAiB,CAC5B,KAAM,UACN,QAAS,iCACZ,EACJ,EAAE,MAAOyF,GAAM,SAChB/D,EAAOm0D,KAAmC5yD,GAAAC,EAAAuC,GAAA,YAAAA,EAAG,WAAH,YAAAvC,EAAa,OAAb,YAAAD,EAAmB,UAAW,kDAAkD,EAC7H,EAAE,QAAQ,IAAM,CACbvB,EAAO,2BAA4B,CAAC,QAAS,qBAAsB,QAAS,GAAM,EACrF,CACL,EAEA,MAAM,kCAAkC,CAAC,OAAAA,GAAS,CAC1C,IACO,aAAMG,EAAkBH,EAAQ,2BAA4B,qBAAsB,IAAMsB,EAAM,IAAI,gCAAgC,CAAC,OAC9H,EAEpB,EAEA,MAAM,mBAAmB,CAAC,OAAAtB,GAAS,SAC3B,IACM,MAAAqB,EAAe,MAAMlB,EAAkBH,EAAQ,2BAA4B,qBAAsB,IAAMsB,EAAM,IAAI,kBAAkB,CAAC,EACnI,OAAAtB,EAAA,mBAAoBqB,EAAa,YAAY,EACpD/C,EAAS,MAAM,gBAAiB,CAC5B,KAAM,UACN,QAAS,iCACZ,EACM+C,QACFf,EAAO,CACZhC,EAAS,MAAM,gBAAiB,CAC5B,KAAM,QACN,UAASiD,GAAAC,EAAAlB,EAAM,WAAN,YAAAkB,EAAgB,OAAhB,YAAAD,EAAsB,UAAW,iDAC7C,EAET,EAKA,MAAM,SAAS,CAAC,OAAAvB,GAAS,SAEjB,IACM,MAAAqB,EAAe,MAAMlB,EAAkBH,EAAQ,2BAA4B,WAAY,IAAMsB,EAAM,KAAK,eAAe,CAAC,EAC9H,OAAAhD,EAAS,MAAM,gBAAiB,CAC5B,KAAM,UACN,QAAS,yBACZ,EAEM+C,QACFf,EAAO,CACZ,MAAAhC,EAAS,MAAM,gBAAiB,CAC5B,KAAM,QACN,UAASiD,GAAAC,EAAAlB,EAAM,WAAN,YAAAkB,EAAgB,OAAhB,YAAAD,EAAsB,UAAW,wCAC7C,EACKjB,CAAA,CACV,CAER,EAEe+zD,GAAA,CACX,WAAY,SACZ9zD,GAAA,UACAC,GAAA,QACAY,GACAqV,UACJ,EChYMlW,GAAwB,CAC1B,QAAS,CACL,MAAO,KACP,MAAO,KACP,YAAa,KACb,YAAa,KACb,SAAU,KACV,YAAa,KACb,SAAU,KACV,YAAa,KACb,YAAa,KACb,SAAU,IACd,EACA,MAAO,CAAC,EACR,UAAW,CAAC,EACZ,cAAe,CACX,aAAc,EACd,KAAM,EACN,UAAW,EACX,SAAU,EACV,GAAI,EACJ,MAAO,CACX,EACA,sBAAuB,CAAC,EACxB,mBAAoB,CAAC,EACrB,MAAO,CAAC,EACR,YAAa,CAAC,EACd,MAAO,CAAC,EACR,iBAAkB,CAAC,EACnB,UAAW,GACX,iBAAkB,CAAC,EACnB,cAAe,CAAC,EAChB,WAAY,CACR,aAAc,CAAC,EACf,YAAa,CAAC,EACd,MAAO,KACP,OAAQ,KACR,SAAU,KACV,YAAa,KACb,SAAU,KACV,YAAa,CACT,eAAgB,KAChB,cAAe,KACf,mBAAoB,KAE5B,EAEA,gBAAiB,CAAC,EAClB,eAAgB,CAAC,EACjB,MAAO,EACX,EAEMkW,GAAU,CACZ,QAAUlW,GAA0BA,EAAM,QAC1C,SAAWA,GAA0BA,EAAM,MAC3C,aAAeA,GAA0BA,EAAM,UAC/C,cAAgBA,GAA0BA,EAAM,cAChD,mBAAqBA,GAA0BA,EAAM,mBACrD,sBAAwBA,GAA0BA,EAAM,sBACxD,MAAQA,GAA0BA,EAAM,MACxC,YAAcA,GAA0BA,EAAM,YAC9C,iBAAmBA,GAA0BA,EAAM,iBACnD,MAAQA,GAA0BA,EAAM,MACxC,UAAYA,GAA0BA,EAAM,UAC5C,iBAAmBA,GAA0BA,EAAM,iBACnD,WAAaA,GAA0BA,EAAM,WAC7C,cAAgBA,GAA0BA,EAAM,cAChD,gBAAkBA,GAA0BA,EAAM,gBAClD,eAAiBA,GAA0BA,EAAM,eACjD,MAAQA,GAA0BA,EAAM,KAC5C,EAEMC,GAAY,CACd,CAAC8zD,EAAoB,EAAE/zD,EAAuBG,EAAgD,CAC1FH,EAAM,QAAQG,EAAQ,OAAO,EAAIA,EAAQ,OAC7C,EACA,CAAC6zD,EAAmB,EAAEh0D,EAAuBi0D,EAAO,CAChDj0D,EAAM,MAAQi0D,CAClB,EACA,CAACC,EAAuB,EAAEl0D,EAAuBm0D,EAAW,CACpDA,EAAU,eAAiB,IAC3Bn0D,EAAM,UAAYm0D,EAAU,MAKhCn0D,EAAM,cAAgB,CAClB,aAAcm0D,EAAU,aACxB,KAAMA,EAAU,KAChB,UAAWA,EAAU,UACrB,SAAUA,EAAU,SACpB,GAAIA,EAAU,GACd,MAAOA,EAAU,KACrB,CACJ,EACA,CAACC,EAAiC,EAAEp0D,EAAuB0K,EAAS,CAChE1K,EAAM,sBAAwB0K,CAClC,EACA,CAAC2pD,EAA8B,EAAEr0D,EAAuBwN,EAAM,CAC1DxN,EAAM,mBAAqBwN,CAC/B,EACA,CAAC8mD,EAAmB,EAAEt0D,EAAuBmhB,EAAO,CAChDnhB,EAAM,MAAQmhB,CAClB,EACA,CAACozC,EAAyB,EAAEv0D,EAAuBkG,EAAa,CAC5DlG,EAAM,YAAckG,CACxB,EACA,CAACsuD,EAA+B,EAAEx0D,EAAuBy0D,EAAkB,CACvEz0D,EAAM,iBAAmBy0D,CAC7B,EACA,CAACC,EAAgC,EAAE10D,EAAuB20D,EAAO,CAC7D30D,EAAM,MAAQ20D,CAClB,EACA,CAACC,EAAyB,EAAE50D,EAAuB60D,EAAM,CACrD70D,EAAM,UAAY60D,CACtB,EACA,CAACC,EAA4B,EAAE90D,EAAuB2f,EAAQ,CAC1D3f,EAAM,iBAAmB2f,CAC7B,EACA,CAACo1C,EAA4B,EAAE/0D,EAAuBg1D,EAAS,CAC3Dh1D,EAAM,cAAgBg1D,CAC1B,EACA,CAACC,EAA6B,EAAEj1D,EAAuBk1D,EAAU,CAC7Dl1D,EAAM,gBAAkBk1D,CAC5B,EACA,CAACC,EAA4B,EAAEn1D,EAAuBo/B,EAAQ,CAC1Dp/B,EAAM,eAAiBo/B,CAC3B,EACA,CAACg2B,EAAkB,EAAEp1D,EAAuBq1D,EAAO,CAC/Cr1D,EAAM,MAAQq1D,CAClB,EACA,CAACC,EAAwC,EAAEt1D,EAAuBu1D,EAAO,CACrEv1D,EAAM,WAAW,OAAO,KAAKu1D,CAAK,EAAE,CAAC,CAAC,EAAIA,EAAM,OAAO,KAAKA,CAAK,EAAE,CAAC,CAAC,EAE7E,EAEM10D,GAAU,CACZ,MAAM,cAAc,CAAC,OAAApB,GAAS,CACtB,IACM,MAAAqB,EAAe,MAAMlB,EAAkBH,EAAQ,iBAAkB,QAAS,IAAMsB,EAAM,IAAI,cAAc,CAAC,EACxGtB,EAAA,gBAAiBqB,EAAa,KAAK,QACrCf,EAAO,CACZ,QAAQ,MAAMA,CAAK,EAE3B,EAEA,MAAM,cAAc,CAAC,OAAAN,GAASgN,EAAM,CAC5B,IACA,MAAM3L,EAAe,MAAMlB,EAAkBH,EAAQ,iBAAkB,QAAS,IAAMsB,EAAM,IAAI,gBAAgB0L,CAAI,EAAE,CAAC,EAChHhN,EAAA,2BAA4BqB,EAAa,IAAI,QAC/Cf,EAAO,CACZ,QAAQ,MAAMA,CAAK,EAE3B,EACA,MAAM,cAAc,CAAC,OAAAN,GAAS,CACtB,IACM,MAAAG,EAAkBH,EAAQ,iBAAkB,QAAS,IAAMsB,EAAM,KAAK,uBAAuB,CAAC,QAC/FhB,EAAO,CACZ,QAAQ,MAAMA,CAAK,EAE3B,EACA,MAAM,oBAAoB,CAAC,OAAAN,GAAS,CAC5B,IACM,MAAAqB,EAAe,MAAMlB,EAAkBH,EAAQ,iBAAkB,QAAS,IAAMsB,EAAM,IAAI,0BAA0B,CAAC,EACpHtB,EAAA,0BAA2BqB,EAAa,QAAQ,QAClDf,EAAO,CACZ,QAAQ,MAAMA,CAAK,EAE3B,EACA,gBAAgB,CAAC,OAAAN,CAAM,EAAG6rD,EAAS,CAC/BvqD,EAAM,KAAK,wBAAyBuqD,CAAO,EACtC,KAAK,IAAM,CACRvtD,EAAS,MAAM,8BAA8B,EAChD,EAAE,MAAM,IAAM,EAClB,EAAE,QAAQ,IAAM,EAChB,CACL,EACA,iBAAiB,CAAC,OAAA0B,CAAM,EAAG6rD,EAAS,CAChCvqD,EAAM,KAAK,yBAA0BuqD,CAAO,EACvC,KAAK,IAAM,CACRvtD,EAAS,MAAM,8BAA8B,EAChD,EAAE,MAAM,IAAM,EAClB,EAAE,QAAQ,IAAM,EAChB,CACL,EACA,4BAA4B,CAAC,OAAA0B,CAAM,EAAG6rD,EAAS,CAC3CvqD,EAAM,KAAK,kCAAkCuqD,CAAO,EAAE,EACjD,KAAK,IAAM,EAEX,EAAE,MAAM,IAAM,EAClB,EAAE,QAAQ,IAAM,EAChB,CACL,EAEA,YAAY,CAAC,OAAA7rD,GAAS,CAClBsB,EAAM,IAAI,iBAAiB,EACtB,KAAM1B,GAAa,CACTI,EAAA,yBAA0BJ,EAAS,KAAK,cAAc,EAChE,EAAE,MAAM,IAAM,EAClB,EAAE,QAAQ,IAAM,EAChB,CACL,EAEA,SAAS,CAAC,OAAAI,GAAS,CACfsB,EAAM,IAAI,cAAc,EACnB,KAAM1B,GAAa,CACTI,EAAA,eAAgBJ,EAAS,KAAK,KAAK,EAC7C,EAAE,MAAM,IAAM,EAClB,EAAE,QAAQ,IAAM,EAChB,CACL,EAEA,WAAWJ,EAAO,KAAM,CACpB8B,EAAM,OAAO,eAAgB,CAAC,KAAA9B,CAAK,GAC9B,MAAM,IAAM,EACZ,EAAE,QAAQ,IAAM,EACpB,CACL,EAEA,MAAM,qBAAqB,CAAC,OAAAQ,GAAS,CAC1B,aAAMG,EAAkBH,EAAQ,iBAAkB,uBAAwB,IAAMsB,EAAM,IAAI,iBAAiB,CAAC,CACvH,EAEA,oBAAoB,CAAC,OAAAtB,CAAM,EAAG+1D,EAAqB,CAC/Cz0D,EAAM,IAAI,mBAAmBy0D,CAAmB,EAAE,EAC7C,KAAMn2D,GAAa,CACPtB,EAAA,MAAM,gCAAiCsB,EAAS,IAAI,EAChE,EAAE,MAAM,IAAM,EAClB,EAAE,QAAQ,IAAM,EAChB,CACL,EAEA,MAAM,WAAW,CAAC,OAAAI,GAAS+N,EAAM,CACzB,IACA,MAAM1M,EAAe,MAAMlB,EAAkBH,EAAQ,iBAAkB,QAAS,IAAMsB,EAAM,IAAI,gBAAgByM,EAAK,IAAI,GAAIA,CAAI,CAAC,EAC3H/N,EAAA,2BAA4BqB,EAAa,IAAI,EACpD/C,EAAS,MAAM,gBAAiB,CAC5B,KAAM,UACN,QAAS,aACZ,QACIgC,EAAO,CACZ,QAAQ,MAAMA,CAAK,EAE3B,EAEA,kBAAkB,CAAC,OAAAN,CAAM,EAAGR,EAAM,CAC9B,MAAM2hB,EAAOvX,MAAIpK,EAAM,OAAQ,CAAC,GAAK,EAErC8B,EAAM,IAAI,uBAAuB6f,CAAI,EAAE,EAClC,KAAMvhB,GAAa,CACTI,EAAA,oBAAqBJ,EAAS,IAAI,EAC5C,EAAE,MAAM,IAAM,EAClB,EAAE,QAAQ,IAAM,EAChB,CACL,EAEA,MAAM,cAAc,CAAC,OAAAI,GAAS,CACpB,MAAAqB,EAAe,MAAMlB,EAAkBH,EAAQ,iBAAkB,QAAS,IAAMsB,EAAM,IAAI,cAAc,CAAC,EACxG,OAAAtB,EAAA+0D,GAAiC1zD,EAAa,WAAW,EACzDA,CACX,EACA,MAAM,iBAAiB,CAAC,OAAArB,GAASiN,EAA2B,CACxD,QAAQ,IAAI,kBAAkB,EAC9B,QAAQ,IAAIA,CAAO,EACb,MAAA+oD,EAAY,IAAI,gBACZA,EAAA,OAAO,OAAQ/oD,EAAQ,IAAI,EAC/B,MAAAnJ,EAAQkyD,EAAU,SAAS,EAC1B,aAAM71D,EAAkBH,EAAQ,iBAAkB,YAAa,IAAMsB,EAAM,IAAI,oBAAoBwC,CAAK,EAAE,CAAC,CACtH,EAEA,mBAAmB,CAAC,OAAA9D,GAAS,CACzBsB,EAAM,IAAI,uBAAuB,EAC5B,KAAM1B,GAAa,CACTI,EAAA,yBAA0BJ,EAAS,KAAK,OAAO,EACzD,EAAE,MAAM,IAAM,EAClB,EAAE,QAAQ,IAAM,EAChB,CACL,EAEA,MAAM,yBAAyB,CAAC,OAAAI,GAASi2D,EAAW,CAChD,MAAM50D,EAAe,MAAMlB,EAAkBH,EAAQ,iBAAkB,QAAS,IAAMsB,EAAM,IAAI,oCAAoC20D,CAAS,EAAE,CAAC,EACzI,OAAAj2D,EAAAi1D,GAAkC5zD,EAAa,KAAK,EACpDrB,EAAAm1D,GAA2B9zD,EAAa,IAAI,EAC5CA,CACX,EAEA,sBAAsB,CAAC,OAAArB,GAAS,CAC5BsB,EAAM,IAAI,uBAAuB,EAC5B,KAAM1B,GAAa,CACTI,EAAA,yBAA0BJ,EAAS,KAAK,MAAM,EACxD,EAAE,MAAM,IAAM,EAClB,EAAE,QAAQ,IAAM,EAChB,CACL,EAEA,YAAY,CAAC,OAAAI,CAAM,EAAGo1D,EAAM,CACxB9zD,EAAM,IAAI,sBAAuB,CAAC,KAAA8zD,CAAK,GAClC,KAAK,IAAM,EACX,EAAE,MAAM,IAAM,EAClB,EAAE,QAAQ,IAAM,EAChB,CACL,EAEA,gBAAgB,CAAC,OAAAp1D,CAAM,EAAGgN,EAAM,CAC5B1L,EAAM,IAAI,kBAAkB0L,CAAI,EAAE,EAC7B,KAAMpN,GAAa,CACTI,EAAA,8BAA+BJ,EAAS,KAAK,OAAO,EAC9D,EAAE,MAAM,IAAM,EAClB,EAAE,QAAQ,IAAM,EAChB,CACL,EAEA,cAAc,CAAC,OAAAI,EAAQ,MAAAO,GAAQ,CACrBe,EAAA,IAAI,kBAAkBf,EAAM,sBAAsB,IAAI,GAAIA,EAAM,qBAAqB,EACtF,KAAMX,GAAa,CACTI,EAAA,8BAA+BJ,EAAS,KAAK,OAAO,EAC3DtB,EAAS,MAAM,gBAAiB,CAC5B,KAAM,UACN,QAAS,kBACZ,EACJ,EAAE,MAAM,IAAM,EAClB,EAAE,QAAQ,IAAM,EAChB,CACL,EAEA,cAAc,CAAC,OAAA0B,EAAQ,MAAAO,GAAQ,CACrBe,EAAA,OAAO,kBAAkBf,EAAM,sBAAsB,IAAI,EAAE,EAC5D,KAAMX,GAAa,CACTI,EAAA,2BAA4BJ,EAAS,KAAK,IAAI,EACrDtB,EAAS,MAAM,gBAAiB,CAC5B,KAAM,UACN,QAAS,aACZ,EACJ,EAAE,MAAM,IAAM,EAClB,EAAE,QAAQ,IAAM,EAChB,CACL,EAEA,cAAc,CAAC,OAAA0B,GAAS,CACpBsB,EAAM,IAAI,cAAc,EACnB,KAAM1B,GAAa,CACTI,EAAA,qCAAsCJ,EAAS,KAAK,KAAK,EACnE,EAAE,MAAM,IAAM,EAClB,EAAE,QAAQ,IAAM,EAChB,CACL,EAEA,oBAAoB,CAAC,OAAAI,GAAS,CAC1BA,EAAO,iBAAkB,CAAC,QAAS,cAAe,QAAS,GAAK,EAEhEsB,EAAM,IAAI,oBAAoB,EACzB,KAAM1B,GAAa,CAChBI,EAAO,qCAAsC,CAAC,aAAcJ,EAAS,KAAK,MAAM,EACnF,EAAE,MAAM,IAAM,EAClB,EAAE,QAAQ,IAAM,CACbI,EAAO,iBAAkB,CAAC,QAAS,cAAe,QAAS,GAAM,EACpE,CACL,EAEA,YAAY,CAAC,OAAAA,GAAS,CAClBA,EAAO,iBAAkB,CAAC,QAAS,cAAe,QAAS,GAAK,EAEhEsB,EAAM,IAAI,sCAAsC,EAC3C,KAAK,IAAM,EACX,EAAE,MAAM,IAAM,EAClB,EAAE,QAAQ,IAAM,CACbtB,EAAO,iBAAkB,CAAC,QAAS,cAAe,QAAS,GAAM,EACpE,CACL,EAEA,oBAAoB,CAAC,OAAAA,GAAS,CAC1BA,EAAO,iBAAkB,CAAC,QAAS,cAAe,QAAS,GAAK,EAEhEsB,EAAM,IAAI,0BAA0B,EAC/B,KAAM1B,GAAa,CAChBI,EAAO,qCAAsC,CAAC,YAAaJ,EAAS,KAAK,MAAM,EAClF,EAAE,MAAM,IAAM,EAClB,EAAE,QAAQ,IAAM,CACbI,EAAO,iBAAkB,CAAC,QAAS,cAAe,QAAS,GAAM,EACpE,CACL,EAEA,gBAAgB,CAAC,OAAAA,GAAS,CACtBA,EAAO,iBAAkB,CAAC,QAAS,WAAY,QAAS,GAAK,EAE7DsB,EAAM,IAAI,2BAA2B,EAChC,KAAM1B,GAAa,CAChBI,EAAO,qCAAsC,CAAC,SAAUJ,EAAS,KAAK,MAAM,EAC/E,EAAE,MAAM,IAAM,EAClB,EAAE,QAAQ,IAAM,CACbI,EAAO,iBAAkB,CAAC,QAAS,WAAY,QAAS,GAAM,EACjE,CACL,EAEA,oBAAoB,CAAC,OAAAA,GAAS,CAC1BA,EAAO,iBAAkB,CAAC,QAAS,cAAe,QAAS,GAAK,EAEhEsB,EAAM,IAAI,+BAA+B,EACpC,KAAM1B,GAAa,CAChBI,EAAO,qCAAsC,CAAC,YAAaJ,EAAS,KAAK,MAAM,EAClF,EAAE,MAAM,IAAM,EAClB,EAAE,QAAQ,IAAM,CACbI,EAAO,iBAAkB,CAAC,QAAS,cAAe,QAAS,GAAM,EACpE,CACL,EAEA,eAAe,CAAC,OAAAA,CAAM,EAAGR,EAAM,CAC3BQ,EAAO,iBAAkB,CAAC,QAAS,cAAe,QAAS,GAAK,EAE1D,MAAA8D,EAAQnC,GAAqBnC,CAAI,EAEvC8B,EAAM,IAAI,2BAA2BwC,CAAK,EAAE,EACvC,KAAMlE,GAAa,CACPtB,EAAA,MAAM,0BAA2BsB,EAAS,IAAI,EAC1D,EAAE,MAAM,IAAM,EAClB,EAAE,QAAQ,IAAM,CACbI,EAAO,iBAAkB,CAAC,QAAS,cAAe,QAAS,GAAM,EACpE,CACL,EACA,oBAAoB,CAAC,OAAAA,GAAS,CAC1BA,EAAO,iBAAkB,CAAC,QAAS,cAAe,QAAS,GAAK,EAEhEsB,EAAM,IAAI,+BAA+B,EACpC,KAAM1B,GAAa,CAChBI,EAAO,qCAAsC,CAAC,YAAaJ,EAAS,KAAK,MAAM,EAClF,EAAE,MAAM,IAAM,EAClB,EAAE,QAAQ,IAAM,CACbI,EAAO,iBAAkB,CAAC,QAAS,cAAe,QAAS,GAAM,EACpE,CACL,EACA,wBAAwB,CAAC,OAAAA,CAAM,EAAGR,EAAM,CACpCQ,EAAO,iBAAkB,CAAC,QAAS,cAAe,QAAS,GAAK,EAE1D,MAAA8D,EAAQnC,GAAqBnC,CAAI,EAEvC8B,EAAM,IAAI,oCAAoCwC,CAAK,EAAE,EAChD,KAAMlE,GAAa,CACPtB,EAAA,MAAM,oCAAqCsB,EAAS,IAAI,EACpE,EAAE,MAAM,IAAM,EAClB,EAAE,QAAQ,IAAM,CACbI,EAAO,iBAAkB,CAAC,QAAS,cAAe,QAAS,GAAM,EACpE,CACL,EACA,YAAY,CAAC,OAAAA,CAAM,EAAGR,EAAM,CACxBQ,EAAO,iBAAkB,CAAC,QAAS,WAAY,QAAS,GAAK,EAEvD,MAAA8D,EAAQnC,GAAqBnC,CAAI,EAEvC8B,EAAM,IAAI,2BAA2BwC,CAAK,EAAE,EACvC,KAAMlE,GAAa,CACPtB,EAAA,MAAM,wBAAyBsB,EAAS,IAAI,EACxD,EAAE,MAAM,IAAM,EAClB,EAAE,QAAQ,IAAM,CACbI,EAAO,iBAAkB,CAAC,QAAS,WAAY,QAAS,GAAM,EACjE,CACL,EACA,iBAAiB,CAAC,OAAAA,GAAS,CACvBA,EAAO,iBAAkB,CAAC,QAAS,WAAY,QAAS,GAAK,EAE7DsB,EAAM,IAAI,2BAA2B,EAChC,KAAM1B,GAAa,CAChBI,EAAO,qCAAsC,CAAC,SAAUJ,EAAS,KAAK,MAAM,EAC/E,EAAE,MAAM,IAAM,EAClB,EAAE,QAAQ,IAAM,CACbI,EAAO,iBAAkB,CAAC,QAAS,WAAY,QAAS,GAAM,EACjE,CACL,EAEA,MAAM,cAAc,CAAC,OAAAA,GAAS,CACtB,IACM,MAAAqB,EAAe,MAAMlB,EAAkBH,EAAQ,iBAAkB,QAAS,IAAMsB,EAAM,IAAI,WAAW,CAAC,EACrGtB,EAAA,gBAAiBqB,EAAa,KAAK,QACrCf,EAAO,CACZ,QAAQ,MAAMA,CAAK,EAE3B,EAEA,MAAM,oBAAoB,CAAC,OAAAN,GAAS,CAC5B,IACM,MAAAqB,EAAe,MAAMlB,EAAkBH,EAAQ,iBAAkB,cAAe,IAAMsB,EAAM,IAAI,iBAAiB,CAAC,EACjHtB,EAAA,sBAAuBqB,EAAa,WAAW,QACjDf,EAAO,CACZ,QAAQ,MAAMA,CAAK,EAE3B,EAEA,iBAAiB,CAAC,OAAAN,CAAM,EAAGR,EAAM,CAC7B8B,EAAM,KAAK,kBAAmB9B,CAAI,EAC7B,KAAMI,GAAa,CACTI,EAAA,sBAAuBJ,EAAS,KAAK,WAAW,EACvDtB,EAAS,MAAM,gBAAiB,CAC5B,KAAM,UACN,QAAS,qBACZ,EACDiQ,GAAO,KAAK,CAAC,KAAM,0BAA0B,EAChD,EAAE,MAAM,IAAM,EAClB,EAAE,QAAQ,IAAM,EAChB,CACL,EAEA,iBAAiB,CAAC,OAAAvO,CAAM,EAAGR,EAAM,CACvB8B,EAAA,IAAI,mBAAmB9B,EAAK,EAAE,GAAIA,CAAI,EACvC,KAAMI,GAAa,CACTI,EAAA,sBAAuBJ,EAAS,KAAK,WAAW,EACvDtB,EAAS,MAAM,gBAAiB,CAC5B,KAAM,UACN,QAAS,qBACZ,EACJ,EAAE,MAAM,IAAM,EAClB,EAAE,QAAQ,IAAM,EAChB,CACL,EAEA,iBAAiB,CAAC,OAAA0B,CAAM,EAAGR,EAAM,CACvB8B,EAAA,OAAO,mBAAmB9B,EAAK,EAAE,EAAE,EACpC,KAAMI,GAAa,CACTI,EAAA,sBAAuBJ,EAAS,KAAK,WAAW,EACvDtB,EAAS,MAAM,gBAAiB,CAC5B,KAAM,UACN,QAAS,qBACZ,EACDiQ,GAAO,KAAK,CAAC,KAAM,0BAA0B,EAChD,EAAE,MAAM,IAAM,EAClB,EAAE,QAAQ,IAAM,EAChB,CACL,EAEA,eAAe,CAAC,OAAAvO,EAAQ,YAAA+xC,CAAA,EAAchkC,EAAM,CAClCzM,EAAA,IAAI,aAAayM,EAAK,IAAI,aAAa,EACxC,KAAMnO,GAAa,CAChBI,EAAO,qBAAsB,CACzB,KAAMJ,EAAS,KAAK,KACpB,MAAOA,EAAS,KAAK,MACrB,MAAO,CACH,MAAOmyC,EAAY,WAAW,EAAE,MAChC,KAAMA,EAAY,WAAW,EAAE,KACnC,EACD,CAAC,KAAM,GAAK,EAClB,EAAE,MAAM,IAAM,EAClB,EAAE,QAAQ,IAAM,EAChB,CACL,EAEA,YAAY,CAAC,OAAA/xC,CAAM,EAAGk2D,EAAQ,CACpB50D,EAAA,KAAK,sBAAuB,CAAC,KAAM40D,EAAO,EAC3C,KAAMt2D,GAAa,CAChBtB,EAAS,MAAM,0BAA2BsB,EAAS,KAAK,MAAM,EACjE,EAAE,MAAOmE,GAAM,CAChBzF,EAAS,MAAM,yBAA0ByF,EAAE,SAAS,KAAK,OAAO,EACnE,EAAE,QAAQ,IAAM,EAChB,CACL,EAEA,YAAY,CAAC,OAAA/D,CAAM,EAAGk2D,EAAQ,CACpB50D,EAAA,KAAK,sBAAuB,CAAC,KAAM40D,EAAO,EAC3C,KAAMt2D,GAAa,CAChBtB,EAAS,MAAM,0BAA2BsB,EAAS,KAAK,MAAM,EACjE,EAAE,MAAOmE,GAAM,CAChBzF,EAAS,MAAM,yBAA0ByF,EAAE,SAAS,KAAK,OAAO,EACnE,EAAE,QAAQ,IAAM,EAChB,CACL,EACA,YAAY,CAAC,OAAA/D,CAAM,EAAGmjC,EAAM,CACxB7hC,EAAM,KAAK,sBAAuB6hC,CAAI,EACjC,KAAMvjC,GAAa,CAChBtB,EAAS,MAAM,0BAA2BsB,EAAS,KAAK,IAAI,EAC/D,EAAE,MAAOmE,GAAM,CAChBzF,EAAS,MAAM,yBAA0ByF,EAAE,SAAS,KAAK,OAAO,EACnE,EAAE,QAAQ,IAAM,EAChB,EAET,EAEeoyD,GAAA,CACX,WAAY,SACZ51D,GAAA,UACAC,GAAA,QACAY,GACAqV,UACJ,EC9mBMlW,GAAuB,CAC3B,aAAc,CAAC,EACf,YAAa,EACf,EAEMC,GAAY,CAChB,iBAAkB,CAACD,EAAO61D,IAAS,CAC7B71D,EAAM,aAAa,KAAM4M,GAAMA,EAAE,OAASipD,EAAK,IAAI,GAIvD71D,EAAM,aAAa,KACjB,CAAE,GAAG61D,EAAM,MAAOA,EAAK,KAAK,OAAS,SAAU,CACjD,CACF,EACA,gBAAiB,CAAC71D,EAAO61D,IAAS,CAC5B71D,EAAM,YAAY,SAAS61D,EAAK,IAAI,GAInCA,EAAK,KAAK,SACb71D,EAAM,YAAY,KAAK61D,EAAK,IAAI,CAEpC,EAEA,iBAAkB,CAAC71D,EAAO61D,IAAS,CACjC,SAAW,CAACtpD,EAAGK,CAAC,IAAK5M,EAAM,aAAa,UAClC,GAAA4M,EAAE,OAASipD,EAAK,KAAM,CACxB71D,EAAM,aAAa,OAAOuM,EAAG,CAAC,EAC9B,MAGN,EACA,gBAAiB,CAACvM,EAAO61D,IAAS,CACrB,UAAAtpD,KAAKvM,EAAM,YAChB,GAAAuM,IAAMspD,EAAK,KAAM,CACnB,MAAM9uD,EAAQ/G,EAAM,YAAY,QAAQuM,CAAC,EACzCvM,EAAM,YAAY,OAAO+G,EAAO,CAAC,EACjC,MAGN,EAEA,yBAA0B,CAAC/G,EAAO61D,IAAS,CACzC71D,EAAM,aAAeA,EAAM,aAAa,OAAQ4M,GAAMA,EAAE,KAAK,OAASA,EAAE,OAASipD,EAAK,IAAI,CAC5F,EACA,wBAAyB,CAAC71D,EAAO61D,IAAS,CAC7B,UAAAtpD,KAAKvM,EAAM,YAChB,GAAAuM,IAAMspD,EAAK,KAAM,CACnB,MAAM9uD,EAAQ/G,EAAM,YAAY,QAAQuM,CAAC,EACzCvM,EAAM,YAAcA,EAAM,YAAY,MAAM+G,EAAOA,EAAQ,CAAC,EAC5D,MAGN,EAEA,sBAAwB/G,GAAU,CAEhCA,EAAM,aAAeA,EAAM,aAAa,OAAQ81D,GAAQA,EAAI,KAAK,KAAK,CACxE,EACA,qBAAuB91D,GAAU,CAC/BA,EAAM,YAAc,CAAC,CACvB,EAEA,oBAAqB,CAACA,EAAO61D,IAAS,CAC3B,QAAAjpD,KAAK5M,EAAM,aACd,GAAA4M,EAAE,OAASipD,EAAK,KAAM,CACpBjpD,EAAA,OAAO,OAAOA,EAAGipD,CAAI,EACzB,MAEJ,CAEJ,EAEMh1D,GAAU,CACd,QAAQ,CAAE,SAAA0V,CAAS,EAAGs/C,EAAM,CAC1Bt/C,EAAS,iBAAkBs/C,CAAI,EAC/Bt/C,EAAS,gBAAiBs/C,CAAI,CAChC,EACA,eAAe,CAAE,OAAAp2D,CAAO,EAAGo2D,EAAM,CAC/Bp2D,EAAO,mBAAoBo2D,CAAI,CACjC,EACA,cAAc,CAAE,OAAAp2D,CAAO,EAAGo2D,EAAM,CAC9Bp2D,EAAO,kBAAmBo2D,CAAI,CAChC,EAEA,QAAQ,CAAE,SAAAt/C,EAAU,MAAAvW,GAAS61D,EAAM,CAC1B,WAAI,QAAStxD,GAAY,CAC9BgS,EAAS,iBAAkBs/C,CAAI,EAC/Bt/C,EAAS,gBAAiBs/C,CAAI,EACtBtxD,EAAA,CACN,aAAc,CAAC,GAAGvE,EAAM,YAAY,EACpC,YAAa,CAAC,GAAGA,EAAM,WAAW,EACnC,EACF,CACH,EACA,eAAe,CAAE,OAAAP,EAAQ,MAAAO,GAAS61D,EAAM,CAC/B,WAAI,QAAStxD,GAAY,CAC9B9E,EAAO,mBAAoBo2D,CAAI,EAC/BtxD,EAAQ,CAAC,GAAGvE,EAAM,YAAY,CAAC,EAChC,CACH,EACA,cAAc,CAAE,OAAAP,EAAQ,MAAAO,GAAS61D,EAAM,CAC9B,WAAI,QAAStxD,GAAY,CAC9B9E,EAAO,kBAAmBo2D,CAAI,EAC9BtxD,EAAQ,CAAC,GAAGvE,EAAM,WAAW,CAAC,EAC/B,CACH,EAEA,eAAe,CAAE,SAAAuW,EAAU,MAAAvW,GAAS61D,EAAM,CACjC,WAAI,QAAStxD,GAAY,CAC9BgS,EAAS,wBAAyBs/C,CAAI,EACtCt/C,EAAS,uBAAwBs/C,CAAI,EAC7BtxD,EAAA,CACN,aAAc,CAAC,GAAGvE,EAAM,YAAY,EACpC,YAAa,CAAC,GAAGA,EAAM,WAAW,EACnC,EACF,CACH,EACA,sBAAsB,CAAE,OAAAP,EAAQ,MAAAO,GAAS61D,EAAM,CACtC,WAAI,QAAStxD,GAAY,CAC9B9E,EAAO,2BAA4Bo2D,CAAI,EACvCtxD,EAAQ,CAAC,GAAGvE,EAAM,YAAY,CAAC,EAChC,CACH,EACA,qBAAqB,CAAE,OAAAP,EAAQ,MAAAO,GAAS61D,EAAM,CACrC,WAAI,QAAStxD,GAAY,CAC9B9E,EAAO,0BAA2Bo2D,CAAI,EACtCtxD,EAAQ,CAAC,GAAGvE,EAAM,WAAW,CAAC,EAC/B,CACH,EAEA,YAAY,CAAE,SAAAuW,EAAU,MAAAvW,GAAS61D,EAAM,CAC9B,WAAI,QAAStxD,GAAY,CAC9BgS,EAAS,qBAAsBs/C,CAAI,EACnCt/C,EAAS,oBAAqBs/C,CAAI,EAC1BtxD,EAAA,CACN,aAAc,CAAC,GAAGvE,EAAM,YAAY,EACpC,YAAa,CAAC,GAAGA,EAAM,WAAW,EACnC,EACF,CACH,EACA,mBAAmB,CAAE,OAAAP,EAAQ,MAAAO,GAAS,CAC7B,WAAI,QAASuE,GAAY,CAC9B9E,EAAO,uBAAuB,EAC9B8E,EAAQ,CAAC,GAAGvE,EAAM,YAAY,CAAC,EAChC,CACH,EACA,kBAAkB,CAAE,OAAAP,EAAQ,MAAAO,GAAS,CAC5B,WAAI,QAASuE,GAAY,CAC9B9E,EAAO,sBAAsB,EAC7B8E,EAAQ,CAAC,GAAGvE,EAAM,WAAW,CAAC,EAC/B,CACH,EAEA,kBAAkB,CAAE,OAAAP,CAAO,EAAGo2D,EAAM,CAClCp2D,EAAO,sBAAuBo2D,CAAI,EAEtC,EAEetN,GAAA,CACb,WAAY,SACZvoD,GAAA,UACAC,GACAY,UACF,EC3JMb,GAAoB,CACtB,KAAM,GACN,QAAS,CACL,eAAgB,GAChB,YAAa,GACb,MAAO,GACP,OAAQ,GACR,OAAQ,GACR,OAAQ,EACZ,EACA,QAAS,IAAIhB,GACb,cAAe,CAAC,EAChB,0BAA2B,CACvB,QAAS,GACT,KAAM,GACN,UAAW,CAAC,CACR,KAAM,GACN,WAAY,GACZ,OAAQ,KACR,KAAM,MACT,GAET,EAEMkX,GAAU,CACZ,KAAOlW,GAAsBA,EAAM,KACnC,QAAUA,GAAsBA,EAAM,QACtC,QAAUA,GAAsBA,EAAM,QACtC,cAAgBA,GAAsBA,EAAM,cAC5C,0BAA4BA,GAAsBA,EAAM,yBAC5D,EAEMC,GAAY,CACd,CAAC81D,EAAuB,EAAE/1D,EAAmBG,EAAgD,CACzFH,EAAM,QAAQG,EAAQ,OAAO,EAAIA,EAAQ,OAC7C,EACA,CAAC61D,EAAwB,EAAEh2D,EAAmBi2D,EAAK,CAC/Cj2D,EAAM,cAAgBi2D,CAC1B,EACA,CAACC,EAAsC,EAAEl2D,EAAmBi2D,EAAK,CAC7Dj2D,EAAM,0BAA4Bi2D,CACtC,EACA,CAACE,EAAkC,EAAEn2D,EAAmBD,EAA0C,CAC9FC,EAAM,QAAQ,OAAO,IAAID,CAAK,CAClC,EACA,CAACq2D,EAAoC,EAAEp2D,EAAmBk1C,EAAY,CAC9DA,GAAe,KACfl1C,EAAM,QAAQ,OAAO,MAAM,EAE3BA,EAAM,QAAQ,OAAO,MAAMk1C,CAAU,CAE7C,EACA,CAACmhB,EAAwC,EAAEr2D,EAAmB,CAC1DA,EAAM,0BAA4B,CAC9B,QAAS,GACT,KAAM,GACN,UAAW,CAAC,CACR,KAAM,GACN,WAAY,GACZ,OAAQ,KACR,KAAM,MACT,EACL,EAER,EAEMa,GAAU,CAMZ,MAAM,iBAAiB,CAAC,OAAApB,GAAS,CACzB,IACM,MAAAqB,EAAe,MAAMlB,EAAkBH,EAAQ,oBAAqB,QAAS,IAAMsB,EAAM,IAAI,oBAAoB,CAAC,EACxHhD,EAAS,MAAM,0BAA0B,EACzC0B,EAAO,qBAAsBqB,EAAa,eAAiB,EAAE,QACxDf,EAAO,CACL,MAAAN,EAAA02D,GAAoCp2D,CAAK,EAC1CA,CAAA,CAEd,EAMA,MAAM,gBAAgB,CAAC,OAAAN,GAAS62D,EAA0B,SAClD,IACA72D,EAAO,gCAAgC,EACjC,MAAAqB,EAAe,MAAMlB,EAAkBH,EAAQ,oBAAqB,SAAU,IAAMsB,EAAM,KAAK,qBAAsBu1D,CAAW,CAAC,EACvI72D,EAAO,sBAAsBqB,GAAA,YAAAA,EAAc,gBAAiB,EAAE,EAC9DI,EAAK,QAAQ,CACT,QAAS,oCACZ,EACDnD,EAAS,MAAM,2BAA2B,QACrCgC,EAAO,CACZ,cAAQ,IAAIA,CAAK,EACjBN,EAAO02D,KAAoCn1D,GAAAC,EAAAlB,GAAA,YAAAA,EAAO,WAAP,YAAAkB,EAAiB,OAAjB,YAAAD,EAAuB,SAAU,oBAAoB,EAC1FjB,CAAA,CAEd,EAMA,MAAM,kBAAkB,CAAC,OAAAN,GAAS62D,EAA0B,OACpD,IACA72D,EAAO22D,EAAoC,EAC3C,MAAMt1D,EAAe,MAAMlB,EAAkBH,EAAQ,oBAAqB,SAAU,IAAMsB,EAAM,IAAI,sBAAsBu1D,EAAY,IAAI,GAAIA,CAAW,CAAC,EAC1J72D,EAAOu2D,IAA0Bl1D,GAAA,YAAAA,EAAc,gBAAiB,EAAE,EAClEI,EAAK,QAAQ,CACT,QAAS,oCACZ,QACInB,EAAO,CACZ,MAAAN,EAAO02D,KAAoCl1D,EAAAlB,EAAM,SAAS,OAAf,YAAAkB,EAAqB,SAAU,oBAAoB,EACxFlB,CAAA,CAEd,EAMA,MAAM,kBAAkB,CAAC,OAAAN,GAAS62D,EAA0B,CACpD,IACA,MAAMx1D,EAAe,MAAMlB,EAAkBH,EAAQ,oBAAqB,SAAU,IAAMsB,EAAM,OAAO,sBAAsBu1D,EAAY,IAAI,EAAE,CAAC,EAChJ72D,EAAOu2D,IAA0Bl1D,GAAA,YAAAA,EAAc,gBAAiB,EAAE,EAElEI,EAAK,QAAQ,CACT,QAAS,oCACZ,QACInB,EAAO,CACN,MAAAA,CAAA,CAEd,EAMA,MAAM,sBAAsB,CAAC,OAAAN,GAAS62D,EAA0B,CACxD,IACA,MAAMx1D,EAAe,MAAMlB,EAAkBH,EAAQ,oBAAqB,cAAe,IAAMsB,EAAM,KAAK,sBAAsBu1D,EAAY,IAAI,cAAc,CAAC,EAC/J72D,EAAOu2D,IAA0Bl1D,GAAA,YAAAA,EAAc,gBAAiB,EAAE,EAElEI,EAAK,QAAQ,CACT,QAAS,8BACZ,QACInB,EAAO,CACN,MAAAA,CAAA,CACV,CAER,EAEew2D,GAAA,CACX,WAAY,SACZv2D,GAAA,UACAC,GAAA,QACAY,GACAqV,UACJ,ECrIMlW,GAA0B,CAC5B,QAAS,CACL,MAAO,GACP,OAAQ,GACR,SAAU,GACV,SAAU,GACV,OAAQ,GACR,QAAS,EACb,EACA,mBAAoB,CAAC,EACrB,eAAgB,CAAC,EAEjB,aAAc,CAAC,GAAI,GAAI,EAAE,EACzB,iBAAkB,CAAC,QAAQ,EAC3B,iBAAkB,CAAC,cAAe,QAAQ,EAC1C,iBAAkB,CACd,aACA,mBACA,kBACA,aACA,SACA,SACA,SACA,eACA,aACA,OACA,WACA,UACA,cACA,OACJ,EACA,YAAa,EACjB,EAGMkW,GAAU,CACZ,QAAUlW,GAA4BA,EAAM,QAC5C,aAAeA,GAA4BA,EAAM,aACjD,iBAAmBA,GAA4BA,EAAM,iBACrD,iBAAmBA,GAA4BA,EAAM,iBACrD,iBAAmBA,GAA4BA,EAAM,iBACrD,mBAAqBA,GAA4BA,EAAM,mBACvD,eAAiBA,GAA4BA,EAAM,cACvD,EAGMC,GAAY,CACd,CAACu2D,EAA6B,EAAEx2D,EAAyBG,EAAgD,CACrGH,EAAM,QAAQG,EAAQ,OAAO,EAAIA,EAAQ,OAC7C,EACA,CAACs2D,EAAqC,EAAEz2D,EAAyB02D,EAAgC,CAC7F12D,EAAM,mBAAqB02D,CAC/B,EACA,CAACC,EAAiC,EAAE32D,EAAyB42D,EAAiC,CAC1F52D,EAAM,eAAiB42D,CAC3B,EACA,CAACC,EAA4C,EAAE72D,EAAyB,CACpEA,EAAM,mBAAqB,CAAC,EAEpC,EAEMa,GAAU,CAKZ,MAAM,wBAAwB,CAAC,OAAApB,GAAS6I,EAA2B,CAC/D,MAAMxH,EAAe,MAAMlB,EAAkBH,EAAQ,0BAA2B,QAAS,IAAMsB,EAAM,IAAI,gBAAgBuH,EAAQ,IAAI,cAAc,CAAC,EAC7I7I,EAAAg3D,GAAuC31D,EAAa,WAAW,CAC1E,EAKA,MAAM,oBAAoB,CAAC,OAAArB,GAAS6I,EAA2B,CAC3D,MAAMxH,EAAe,MAAMlB,EAAkBH,EAAQ,0BAA2B,UAAW,IAAMsB,EAAM,IAAI,gBAAgBuH,EAAQ,IAAI,UAAU,CAAC,EAC3I7I,EAAAk3D,GAAmC71D,EAAa,eAAe,CAC1E,EAMA,MAAM,yBAAyB,CAAC,OAAArB,GAASR,EAAmE,SACpG,IACM,MAAA2M,EAAY3M,EAAK,QAAQ,KACzB63D,EAAkB73D,EAAK,YACvB,MAAAW,EAAkBH,EAAQ,0BAA2B,SAAU,IAAMsB,EAAM,KAAK,gBAAgB6K,CAAS,eAAgBkrD,CAAe,CAAC,EAC/I51D,EAAK,OAAO,CACR,QAAS,qBACZ,QACInB,EAAO,CACZmB,EAAK,MAAM,CACP,UAASF,GAAAC,EAAAlB,GAAA,YAAAA,EAAO,WAAP,YAAAkB,EAAiB,OAAjB,YAAAD,EAAuB,UAAW,qBAC9C,EAET,EAMA,MAAM,yBAAyB,CAAC,OAAAvB,GAASR,EAAmE,SACpG,IACM,MAAA2M,EAAY3M,EAAK,QAAQ,KACzB63D,EAAkB73D,EAAK,YAE7B,MAAMW,EAAkBH,EAAQ,0BAA2B,WAAY,IAAMsB,EAAM,IAAI,gBAAgB6K,CAAS,gBAAgBkrD,EAAgB,IAAI,GAAIA,CAAe,CAAC,EACxK51D,EAAK,OAAO,CACR,QAAS,uBACZ,EACDzB,EAAO,wCAAwC,QAC1CM,EAAO,CACZmB,EAAK,MAAM,CACP,UAASF,GAAAC,EAAAlB,GAAA,YAAAA,EAAO,WAAP,YAAAkB,EAAiB,OAAjB,YAAAD,EAAuB,UAAW,qBAC9C,EAET,EAMA,MAAM,2BAA2B,CAAC,OAAAvB,CAAA,EAAS,CAAC,QAAA6I,EAAS,YAAAouD,GAAc,CAC/D,MAAM51D,EAAe,MAAMlB,EAAkBH,EAAQ,0BAA2B,WAAY,IAAMsB,EAAM,KAAK,gBAAgBuH,EAAQ,IAAI,gBAAgBouD,EAAY,IAAI,YAAaA,CAAW,CAAC,EAC3Lj3D,EAAAg3D,GAAuC31D,EAAa,WAAW,EAEtEI,EAAK,OAAO,CACR,QAAS,yBACZ,CACL,EAMA,MAAM,yBAAyB,CAAC,OAAAzB,GAASi3D,EAA8B,CAC7D,MAAA92D,EAAkBH,EAAQ,0BAA2B,SAAU,IAAMsB,EAAM,OAAO,mBAAmB21D,EAAY,IAAI,EAAE,CAAC,EAC9Hx1D,EAAK,OAAO,CACR,QAAS,uBACZ,EAET,EAGew1D,GAAA,CACX,WAAY,SACZ12D,GAAA,UACAC,GAAA,QACAY,GACAqV,UACJ,ECzKMlW,GAAoB,CACtB,QAAS,CACL,OAAQ,GACR,SAAU,GACV,OAAQ,GACR,YAAa,GACb,UAAW,GACX,QAAS,GACT,oBAAqB,GACrB,WAAY,GACZ,QAAS,GACT,WAAY,GACZ,YAAa,GACb,mBAAoB,GACpB,eAAgB,GAChB,aAAc,EAClB,EACA,QAAS,CACL,cAAe,EACnB,EACA,qCAAsC,KACtC,OAAQ,CAAC,EACT,MAAO,KACP,UAAW,CAAC,EACZ,SAAU,KACV,eAAgB,KAChB,aAAc,EAClB,EAOMkW,GAAU,CACZ,OAASlW,GAAsBA,EAAM,OACrC,MAAQA,GAAsBA,EAAM,MACpC,UAAYA,GAAsBA,EAAM,UACxC,SAAWA,GAAsBA,EAAM,SACvC,QAAUA,GAAsBA,EAAM,QACtC,eAAiBA,GAAsBA,EAAM,eAC7C,aAAeA,GAAsBA,EAAM,aAC3C,aAAeA,GAAsBA,EAAM,QAC3C,qCAAuCA,GAAsBA,EAAM,oCACvE,EAEMC,GAAY,CACd,CAAC82D,EAAwB,EAAE/2D,EAAmBG,EAAgD,CAC1FH,EAAM,QAAQG,EAAQ,OAAO,EAAIA,EAAQ,OAC7C,EACA,CAAC62D,EAAe,EAAEh3D,EAAmB8qC,EAAkB,CACnD,QAAQ,IAAI,WAAW,EACvB9qC,EAAM,MAAQ8qC,CAClB,EACA,CAACmsB,EAAuB,EAAEj3D,EAAmBynC,EAAM,CAC3C,IAAAyvB,EAAQl3D,EAAM,MAAM,MAEhBk3D,IAAM,IAAKhgB,GACXA,EAAE,OAASzP,EAAK,KACTA,EAEJyP,CACV,EAEDl3C,EAAM,MAAM,MAAQk3D,CACxB,EACA,CAACC,EAAyB,EAAEn3D,EAAmB0hD,EAAgC,CAC3E1hD,EAAM,UAAY0hD,CACtB,EACA,CAAC0V,EAAwB,EAAEp3D,EAAmBqnC,EAA6B,CACvErnC,EAAM,SAAWqnC,CACrB,EACA,CAACgwB,EAAwC,EAAEr3D,EAAmBo/B,EAAQ,CAClEp/B,EAAM,eAAiBo/B,CAC3B,EACA,CAACk4B,EAA4B,EAAEt3D,EAAmB46C,EAAc,CAC5D56C,EAAM,aAAe46C,CACzB,EACA,CAAC2c,EAAoC,EAAEv3D,EAAmBf,EAAM,CAC5De,EAAM,qCAAuCf,EAAK,SAClDe,EAAM,QAAQ,cAAgBf,EAAK,KAE3C,EAEM4B,GAAU,CAEZ,MAAM,SAAS,CAAC,OAAApB,GAAS,CACjB,IACA,MAAMqB,EAAe,MAAMlB,EACvBH,EACA,qBACA,WACA,IAAMsB,EAAM,IAAI,gBAAgB,CACpC,EAEOtB,EAAA,YAAaqB,EAAa,KAAK,EAC7B/C,EAAA,MAAM,wBAAyB+C,EAAa,KAAK,OAC9C,EAEpB,EAKA,MAAM,SAAS,CAAC,OAAArB,GAASslC,EAAkC,SACnD,IACA,MAAMjkC,EAAe,MAAMlB,EACvBH,EACA,qBACA,WACA,IAAMsB,EAAM,IAAI,cAAcgkC,CAAS,EAAE,CAC7C,EAEOtlC,EAAA,YAAaqB,EAAa,KAAK,QACjCf,EAAO,CACZhC,EAAS,MAAM,gBAAiB,CAC5B,KAAM,QACN,UAASiD,GAAAC,EAAAlB,GAAA,YAAAA,EAAO,WAAP,YAAAkB,EAAiB,OAAjB,YAAAD,EAAuB,UAAW,uBAC9C,EAET,EAKA,MAAM,OAAO,CAAC,OAAAvB,CAAM,EAAG,CAAC,UAAAslC,EAAW,WAAA/8B,EAAa,IAAyB,SACjE,IACA,MAAMlH,EAAe,MAAMlB,EACvBH,EACA,qBACA,SACA,IAAMsB,EAAM,IAAI,cAAcgkC,CAAS,GAAI,CAAC,WAAA/8B,CAAW,EAC3D,EACM,CAAC,MAAA8iC,GAAShqC,EAChBrB,EAAO,YAAaqrC,CAAK,EAChB/sC,EAAA,MAAM,uBAAwB+sC,CAAK,QACvC/qC,EAAO,CACZ,MAAMoW,IAAenV,GAAAC,EAAAlB,GAAA,YAAAA,EAAO,WAAP,YAAAkB,EAAiB,OAAjB,YAAAD,EAAuB,UAAW,qBACvDjD,EAAS,MAAM,gBAAiB,CAC5B,KAAM,QACN,QAASoY,CAAA,CACZ,EAET,EAEA,MAAM,oBAAoB,CAAC,OAAA1W,CAAA,EAAS,CAAC,UAAAslC,EAAW,KAAAstB,GAAO,CAC/C,IACA,MAAMvxD,EAAe,MAAMlB,EACvBH,EACA,qBACA,SACA,IAAMsB,EAAM,KAAK,cAAcgkC,CAAS,yBAA0B,CAAC,KAAAstB,CAAK,EAC5E,EAEO5yD,EAAAu3D,GAAiBl2D,EAAa,KAAK,EACjC/C,EAAA,MAAM,uBAAwB+C,EAAa,KAAK,OAC7C,EAEpB,EAGA,eAAe,CAAC,OAAArB,CAAA,EAAS,CAAC,UAAAslC,EAAW,KAAAstB,GAAO,CACxC5yD,EAAO,qBAAsB,CAAC,QAAS,iBAAkB,QAAS,GAAK,EAEjEsB,EAAA,KAAK,cAAcgkC,CAAS,mBAAoB,CAAC,KAAAstB,CAAK,GACvD,KAAMhzD,GAAa,CACTI,EAAA,YAAaJ,EAAS,KAAK,KAAK,EACvCtB,EAAS,MAAM,uBAAwBsB,EAAS,KAAK,KAAK,EAC7D,EAAE,MAAM,IAAM,EAClB,EAAE,QAAQ,IAAM,CACbI,EAAO,qBAAsB,CAAC,QAAS,iBAAkB,QAAS,GAAM,EAC3E,CACL,EAEA,mBAAmB,CAAC,OAAAA,CAAA,EAAS,CAAC,UAAAslC,EAAW,KAAAstB,GAAO,CAC5C5yD,EAAO,qBAAsB,CAAC,QAAS,qBAAsB,QAAS,GAAK,EAErEsB,EAAA,KAAK,cAAcgkC,CAAS,gBAAiB,CAAC,KAAAstB,CAAK,GACpD,KAAMhzD,GAAa,CACTI,EAAA,YAAaJ,EAAS,KAAK,KAAK,EACvCtB,EAAS,MAAM,uBAAwBsB,EAAS,KAAK,KAAK,EAC1DtB,EAAS,MAAM,gCAAiCsB,EAAS,KAAK,KAAK,EACtE,EAAE,MAAM,IAAM,EAClB,EAAE,QAAQ,IAAM,CACbI,EAAO,qBAAsB,CAAC,QAAS,qBAAsB,QAAS,GAAM,EAC/E,CACL,EAMA,QAAQ,CAAC,OAAAA,CAAM,EAAGslC,EAAmB,CACjCtlC,EAAO,qBAAsB,CAAC,QAAS,YAAa,QAAS,GAAK,EAElEsB,EAAM,KAAK,cAAcgkC,CAAS,UAAU,EACvC,KAAM1lC,GAAa,CAChBI,EAAOu3D,GAAiB33D,EAAS,KAAK,KAAK,EAClCtB,EAAA,MAAM,wBAAyBsB,EAAS,IAAI,EACxD,EAAE,MAAM,IAAM,EAClB,EAAE,QAAQ,IAAM,CACbI,EAAO,qBAAsB,CAAC,QAAS,YAAa,QAAS,GAAM,EACtE,CACL,EAMA,QAAQ,CAAC,OAAAA,CAAM,EAAGslC,EAAmB,CACjCtlC,EAAO,qBAAsB,CAAC,QAAS,UAAW,QAAS,GAAK,EAE1DsB,EAAA,KAAK,eAAewxC,GAAe,eAAgB,YAAWxN,CAAS,UAAU,EAClF,KAAM1lC,GAAa,CACTI,EAAA,YAAaJ,EAAS,KAAK,KAAK,EAC9BtB,EAAA,MAAM,wBAAyBsB,EAAS,IAAI,EACxD,EAAE,MAAOmE,GAAM,CAChBzF,EAAS,MAAM,0BAA2ByF,EAAE,SAAS,IAAI,EAC5D,EAAE,QAAQ,IAAM,CACb/D,EAAO,qBAAsB,CAAC,QAAS,UAAW,QAAS,GAAM,EACpE,CACL,EAMA,aAAa,CAAC,OAAAA,CAAM,EAAGslC,EAAmB,CACtCtlC,EAAO,qBAAsB,CAAC,QAAS,eAAgB,QAAS,GAAK,EAErEsB,EAAM,IAAI,cAAcgkC,CAAS,eAAe,EAC3C,KAAM1lC,GAAa,CAChBI,EAAO,yBAA0B4J,EAAI,IAAAhK,EAAU,iBAAkB,CAAE,EAAC,EACvE,EAAE,MAAM,IAAM,EAClB,EAAE,QAAQ,IAAM,CACbI,EAAO,qBAAsB,CAAC,QAAS,eAAgB,QAAS,GAAM,EACzE,CACL,EAMA,iBAAiB,CAAC,OAAAA,CAAA,EAAS,CAAC,UAAAslC,EAAW,WAAA/8B,GAAa,CAChDvI,EAAO,qBAAsB,CAAC,QAAS,cAAe,QAAS,GAAK,EAEpEsB,EAAM,KAAK,cAAcgkC,CAAS,gBAAiB/8B,CAAU,EACxD,KAAK,IAAM,CACRjK,EAAS,MAAM,4BAA4B,EAC9C,EAAE,MAAM,IAAM,EAClB,EAAE,QAAQ,IAAM,CACb0B,EAAO,qBAAsB,CAAC,QAAS,cAAe,QAAS,GAAM,EACxE,CACL,EAMA,eAAe,CAAC,OAAAA,CAAM,EAAGuI,EAAY,CACjCvI,EAAO,qBAAsB,CAAC,QAAS,SAAU,QAAS,GAAK,EAE/DsB,EAAM,KAAK,aAAciH,CAAU,EAC9B,KAAM3I,GAAa,CAChBtB,EAAS,MAAM,iCAAkCsL,EAAI,IAAAhK,EAAU,eAAe,CAAC,EAClF,EAAE,MAAM,IAAM,EAClB,EAAE,QAAQ,IAAM,CACbI,EAAO,qBAAsB,CAAC,QAAS,SAAU,QAAS,GAAM,EACnE,CACL,EAEA,uBAAuB,CAAC,OAAAA,CAAM,EAAGuI,EAAY,CACzCvI,EAAO,qBAAsB,CAAC,QAAS,SAAU,QAAS,GAAK,EAE/DsB,EAAM,KAAK,sBAAuBiH,CAAU,EACvC,KAAM3I,GAAa,CAChBtB,EAAS,MAAM,iCAAkCsL,EAAI,IAAAhK,EAAU,eAAe,CAAC,EAClF,EAAE,MAAM,IAAM,EAClB,EAAE,QAAQ,IAAM,CACbI,EAAO,qBAAsB,CAAC,QAAS,SAAU,QAAS,GAAM,EACnE,CACL,EAGA,qBAAqB,CAAC,OAAAA,GAAS,CAC3BA,EAAO,qBAAsB,CAAC,QAAS,SAAU,QAAS,GAAK,EAE/DsB,EAAM,IAAI,qBAAqB,EAC1B,KAAM1B,GAAa,CAChBI,EAAO,sBAAuB4J,MAAIhK,EAAU,gBAAgB,CAAC,EAChE,EAAE,MAAM,IAAM,EAClB,EAAE,QAAQ,IAAM,CACbI,EAAO,qBAAsB,CAAC,QAAS,SAAU,QAAS,GAAM,EACnE,CACL,EAMA,kBAAkB,CAAC,OAAAA,CAAM,EAAGslC,EAAmB,CAC3CtlC,EAAO,qBAAsB,CAAC,QAAS,eAAgB,QAAS,GAAK,EAErEsB,EAAM,IAAI,gCAAgCgkC,CAAS,EAAE,EAChD,KAAM1lC,GAAa,CAChBI,EAAO,sBAAuB4J,MAAIhK,EAAU,gBAAgB,CAAC,EAChE,EAAE,MAAM,IAAM,EAClB,EAAE,QAAQ,IAAM,CACbI,EAAO,qBAAsB,CAAC,QAAS,eAAgB,QAAS,GAAM,EACzE,CACL,EAEA,MAAM,iBAAiB,CAAC,OAAAA,GAASssB,EAAsB,CACnD,MAAMjrB,EAAe,MAAMlB,EACvBH,EACA,qBACA,SACA,IAAMsB,EAAM,IAAI,uBAAuBgrB,CAAY,EAAE,CACzD,EAEO,OAAAtsB,EAAA23D,GAA0Bt2D,GAAA,YAAAA,EAAc,QAAQ,EAEhDA,GAAA,YAAAA,EAAc,QACzB,EAEA,oBAAoB,CAAC,OAAArB,CAAA,EAAS,CAAC,aAAAssB,EAAc,WAAA/jB,GAAa,CACtDvI,EAAO,qBAAsB,CAAC,QAAS,SAAU,QAAS,GAAK,EAEzDsB,EAAA,IAAI,uBAAuBgrB,CAAY,GAAI,CAAC,WAAA/jB,EAAW,EACxD,KAAM3I,GAAa,CAChBI,EAAO,qBAAsB4J,MAAIhK,EAAU,eAAe,CAAC,EAC3DtB,EAAS,MAAM,gCAAiCsL,EAAI,IAAAhK,EAAU,eAAe,CAAC,EACjF,EAAE,MAAOmE,GAAM,SACPzF,EAAA,MAAM,8BAA+ByF,EAAE,QAAQ,EACxDzF,EAAS,MAAM,gBAAiB,CAC5B,KAAM,QACN,UAASiD,GAAAC,EAAAuC,GAAA,YAAAA,EAAG,WAAH,YAAAvC,EAAa,OAAb,YAAAD,EAAmB,UAAW,qBAC1C,EACJ,EAAE,QAAQ,IAAM,CACbvB,EAAO,qBAAsB,CAAC,QAAS,SAAU,QAAS,GAAM,EACnE,CACL,EAEA,MAAM,oBAAoB,CAAC,OAAAA,GAASssB,EAAsB,CACtD,eAAQ,IAAI,qBAAqB,EAC1B,MAAMnsB,EACTH,EACA,qBACA,sBACA,IAAMsB,EAAM,OAAO,uBAAuBgrB,CAAY,EAAE,CAC5D,CACJ,EAEA,sBAAsB,CAAC,OAAAtsB,CAAM,EAAGssB,EAAsB,CAClDtsB,EAAO,qBAAsB,CAAC,QAAS,SAAU,QAAS,GAAK,EAEzDsB,EAAA,IAAI,eAAewxC,GAAe,eAAgB,qBAAoBxmB,CAAY,WAAW,EAC9F,KAAM1sB,GAAa,CACTI,EAAA,qCAAsCJ,EAAS,IAAI,EACjDtB,EAAA,MAAM,wCAAyCsB,EAAS,IAAI,EACxE,EAAE,MAAM,IAAM,EAClB,EAAE,QAAQ,IAAM,CACbI,EAAO,qBAAsB,CAAC,QAAS,SAAU,QAAS,GAAM,EACnE,CACL,EAMA,MAAM,QAAQ,CAAC,OAAAA,CAAA,EAAS,CAAC,UAAAslC,EAAW,KAAA0C,GAAuB,CACnD,IACA,MAAM3mC,EAAe,MAAMlB,EACvBH,EACA,qBACA,UACA,IAAMsB,EAAM,KAAK,cAAcgkC,CAAS,QAAS,CAAC,KAAA0C,CAAK,EAC3D,EAES1pC,EAAA,MAAM,yBAA0B+C,EAAa,KAAK,EACpDrB,EAAA,YAAaqB,EAAa,KAAK,OAC1B,EAEpB,EAEA,MAAM,WAAW,CAAC,OAAArB,CAAA,EAAS,CAAC,KAAAgoC,EAAM,WAAAz/B,GAAgE,CAC9F,MAAMlH,EAAe,MAAMlB,EACvBH,EACA,qBACA,aACA,IAAMsB,EAAM,IAAI,YAAY0mC,CAAI,GAAI,CAAC,WAAAz/B,CAAW,EACpD,EAEOvI,EAAA,YAAaqB,EAAa,KAAK,EAC7B/C,EAAA,MAAM,uBAAwB+C,EAAa,KAAK,CAC7D,EAEA,YAAY,CAAC,OAAArB,CAAM,EAAGy3D,EAAO,CACzBz3D,EAAO,qBAAsB,CAAC,QAAS,aAAc,QAAS,GAAK,EAEnEsB,EAAM,IAAI,YAAa,CAAC,MAAAm2D,CAAM,GACzB,KAAK,IAAM,CACRn5D,EAAS,MAAM,4BAA4B,EAC9C,EAAE,MAAM,IAAM,EAClB,EAAE,QAAQ,IAAM,CACb0B,EAAO,qBAAsB,CAAC,QAAS,aAAc,QAAS,GAAM,EACvE,CACL,EAGA,MAAM,WAAW,CAAC,OAAAA,GAASgoC,EAAc,CACjC,IACM,MAAA7nC,EACFH,EACA,qBACA,aACA,IAAMsB,EAAM,OAAO,YAAY0mC,CAAI,EAAE,CACzC,OACY,EAEpB,EAKA,kBAAkB,CAAC,OAAAhoC,CAAM,EAAGR,EAAM,CAC9BQ,EAAO,qBAAsB,CAAC,QAAS,YAAa,QAAS,GAAK,EAE5DsB,EAAA,IAAI,uBAAuB9B,EAAK,KAAK,IAAIA,EAAK,EAAE,EAAE,EACnD,KAAMI,GAAa,CAChBtB,EAAS,MAAM,+BAAgCsL,EAAI,IAAAhK,EAAU,YAAY,CAAC,EAC7E,EAAE,MAAM,IAAM,EAClB,EAAE,QAAQ,IAAM,CACbI,EAAO,qBAAsB,CAAC,QAAS,YAAa,QAAS,GAAM,EACtE,CACL,EASA,YAAY,CAAC,OAAAA,CAAM,EAAGslC,EAAmB,CACrCtlC,EAAO,qBAAsB,CAAC,QAAS,cAAe,QAAS,GAAK,EAEpEsB,EAAM,KAAK,cAAcgkC,CAAS,SAAS,EACtC,KAAK,IAAM,CACRhnC,EAAS,MAAM,sBAAsB,EACxC,EAAE,MAAOyF,GAAM,CAChBzF,EAAS,MAAM,uBAAwBsL,MAAI7F,EAAG,wBAAyB,oBAAoB,CAAC,EAC/F,EAAE,QAAQ,IAAM,CACb/D,EAAO,qBAAsB,CAAC,QAAS,cAAe,QAAS,GAAM,EACxE,EAET,EAEeqrC,GAAA,CACX,WAAY,SACZ9qC,GAAA,UACAC,GAAA,QACAY,GACAqV,UACJ,ECndMlW,GAAqB,CACvB,QAAS,CACL,QAAS,GACT,OAAQ,GACR,aAAc,GACd,eAAgB,GAChB,2BAA4B,GAC5B,yBAA0B,GAC1B,8BAA+B,GAC/B,yBAA0B,GAC1B,0BAA2B,GAC3B,wBAAyB,GACzB,cAAe,GACf,SAAU,EACd,EACA,sBAAuB,CAAC,EACxB,4BAA6B,CAAC,EAC9B,oBAAqB,KACrB,iBAAkB,CAAC,EACnB,WAAY,IAAIhB,GAChB,OAAQ,KACR,QAAS,KACT,SAAU,CAAC,EACX,yBAA0B,KAC1B,aAAc,CACV,CACI,KAAM,QACN,QAAS,CACL,QAAS,CACL,GAAI,oBACJ,SAAU,oBACV,MAAO,EACX,EACA,OAAQ,CACJ,GAAI,mBACJ,SAAU,mBACV,MAAO,GAEf,EACA,YAAa,CACT,QAAS,CACL,SACA,mBACA,oBACA,mBACA,sBACA,0BACA,eACA,qBACA,YACJ,CAER,EACA,CACI,KAAM,WACN,QAAS,CACL,QAAS,CACL,GAAI,uBACJ,SAAU,uBACV,MAAO,EACX,EACA,OAAQ,CACJ,GAAI,sBACJ,SAAU,sBACV,MAAO,GAEf,EACA,YAAa,CACT,QAAS,CACL,eACA,oBACA,mBACA,sBACA,0BACA,UACA,gBACA,UACA,gBACA,4BACA,YACJ,CAER,EACA,CACI,KAAM,UACN,QAAS,CACL,QAAS,CACL,GAAI,sBACJ,SAAU,sBACV,MAAO,GACX,EACA,OAAQ,CACJ,GAAI,qBACJ,SAAU,qBACV,MAAO,IAEf,EACA,YAAa,CACT,QAAS,CACL,kBACA,qBACA,oBACA,sBACA,gBACA,sBACA,qBACA,2BACA,qBACA,MACA,kCACA,YACJ,CACJ,CACJ,CAER,EAEMkX,GAAU,CACZ,QAAUlW,GAAuBA,EAAM,QACvC,sBAAwBA,GAAuBA,EAAM,sBACrD,4BAA8BA,GAAuBA,EAAM,4BAC3D,kBAAoBA,GAAuBA,EAAM,oBACjD,iBAAmBA,GAAuBA,EAAM,iBAChD,WAAaA,GAAuBA,EAAM,WAC1C,OAASA,GAAuBA,EAAM,OACtC,QAAUA,GAAuBA,EAAM,QACvC,yBAA2BA,GAAuBA,EAAM,yBACxD,SAAWA,GAAuBA,EAAM,SACxC,aAAeA,GAAuBA,EAAM,YAChD,EAEMC,GAAY,CACd,CAACu3D,EAAwB,EAAEx3D,EAAoBG,EAAgD,CAC3FH,EAAM,QAAQG,EAAQ,OAAO,EAAIA,EAAQ,OAC7C,EACA,CAACs3D,EAAiC,EAAEz3D,EAAoBmhC,EAAS,CAC7DnhC,EAAM,sBAAwBmhC,CAClC,EACA,CAACu2B,EAAwC,EAAE13D,EAAoB23D,EAAQ,CACnE33D,EAAM,4BAA8B23D,CACxC,EACA,CAACC,EAAgC,EAAE53D,EAAoBuL,EAAa,CAChEvL,EAAM,oBAAsBuL,CAChC,EACA,CAACssD,EAA2B,EAAE73D,EAAoBguD,EAAgB,CAsB9D,QAAQ,IAAIA,CAAM,EACV,YAAIhuD,EAAM,YAAY,EAC9BA,EAAM,aAAa,QAASw+B,GAAS,CACjCA,EAAK,QAAQ,QAAQ,SAAWwvB,EAAOxvB,EAAK,QAAQ,QAAQ,EAAE,EAC9DA,EAAK,QAAQ,OAAO,SAAWwvB,EAAOxvB,EAAK,QAAQ,OAAO,EAAE,EAC/D,CACL,EACA,CAACs5B,EAA2B,EAAE93D,EAAoBoL,EAAK,CACnDpL,EAAM,iBAAmBoL,CAC7B,EACA,CAAC2sD,EAA8B,EAAE/3D,EAAoBg1D,EAAS,CAC1Dh1D,EAAM,0BAA2Bg1D,GAAA,YAAAA,EAAS,eAAgBA,CAC9D,EACA,CAACgD,EAAwB,EAAEh4D,EAAoBf,EAAM,CACjDe,EAAM,QAAUf,CACpB,EACA,CAACg5D,EAA+B,EAAEj4D,EAAoB6xD,EAAQ,CAC1D7xD,EAAM,OAAS6xD,CACnB,EACA,CAACqG,EAAkB,EAAEl4D,EAAoBm4D,EAAqB,CAC1Dn4D,EAAM,SAAWm4D,CAAA,CAEzB,EAEMt3D,GAAU,CACZ,MAAM,cAAc,CAAC,OAAApB,GAAS,CACtB,IACM,MAAAqB,EAAe,MAAMlB,EAAkBH,EAAQ,qBAAsB,WAAY,IAAMsB,EAAM,IAAI,qBAAqB,CAAC,EACtHtB,EAAA,eAAgBqB,EAAa,QAAQ,QACvCf,EAAO,CACZ,QAAQ,MAAMA,CAAK,EAE3B,EAEA,aAAa,CAAC,OAAAN,EAAQ,YAAA+xC,CAAA,EAAc4mB,EAAY,CAC5C34D,EAAO,qBAAsB,CAAC,QAAS,eAAgB,QAAS,GAAK,EACrEsB,EAAM,IAAI,eAAeywC,EAAY,iBAAiB,EAAE,IAAI,oBAAoB4mB,CAAU,EAAE,EACvF,KAAM/4D,GAAa,CACTI,EAAA,8BAA+BJ,EAAS,KAAK,OAAO,EAC9D,EAAE,MAAM,IAAM,CACf6B,EAAK,MAAM,CACP,QAAS,0CACZ,EACJ,EAAE,QAAQ,IAAM,CACbzB,EAAO,qBAAsB,CAAC,QAAS,eAAgB,QAAS,GAAM,EACzE,CACL,EAEA,YAAY,CAAC,OAAAA,CAAM,EAAG44D,EAAmB,CACrC54D,EAAO,qBAAsB,CAAC,QAAS,SAAU,QAAS,GAAK,EAE/DsB,EAAM,IAAI,qBAAqBs3D,CAAS,EAAE,EACrC,KAAMh5D,GAAa,CAChBI,EAAOw4D,GAAiC54D,EAAS,KAAK,MAAM,EAC/D,EAAE,MAAM,IAAM,CACf6B,EAAK,MAAM,CACP,QAAS,0CACZ,EACJ,EAAE,QAAQ,IAAM,CACbzB,EAAO,qBAAsB,CAAC,QAAS,SAAU,QAAS,GAAM,EACnE,CACL,EAEA,MAAM,mBAAmB,CAAC,OAAAA,GAAS,SAC3B,IACM,MAAAqB,EAAe,MAAMlB,EAAkBH,EAAQ,qBAAsB,UAAW,IAAMsB,EAAM,IAAI,oBAAoB,CAAC,EACpHtB,EAAAu4D,GAA0Bl3D,EAAa,OAAO,QAChDf,EAAO,CACZmB,EAAK,MAAM,CACP,UAASnB,sBAAO,WAAPA,cAAiB,OAAjBA,cAAuB,UAAW,kDAC9C,EAET,EAMA,oBAAoB,CAAC,OAAAN,CAAM,EAAG6yD,EAAe,CACzC7yD,EAAO,uBAAwB,CAAC,QAAS,mBAAoB,QAAS,GAAK,EAE3EsB,EAAM,KAAK,mCAAoCuxD,CAAa,EACvD,KAAK,IAAM,CACRv0D,EAAS,MAAM,4BAA4B,EAC9C,EAAE,MAAM,IAAM,EAClB,EAAE,QAAQ,IAAM,CACb0B,EAAO,uBAAwB,CAAC,QAAS,mBAAoB,QAAS,GAAM,EAC/E,CACL,EAEA,mBAAmB,CAAC,OAAAA,CAAM,EAAG64D,EAAmB,CAC5C74D,EAAO,qBAAsB,CAAC,QAAS,gBAAiB,QAAS,GAAK,EACtEsB,EAAM,IAAI,6BAA6Bu3D,CAAS,EAAE,EAC7C,KAAMj5D,GAAa,CAChBI,EAAOi4D,GAA0Cr4D,EAAS,KAAK,MAAM,EACxE,EAAE,MAAM,IAAM,SACf6B,EAAK,MAAM,CACP,UAASF,GAAAC,EAAA,yBAAO,WAAP,YAAAA,EAAiB,OAAjB,YAAAD,EAAuB,UAAW,0CAC9C,EACJ,EAAE,QAAQ,IAAM,CACbvB,EAAO,qBAAsB,CAAC,QAAS,gBAAiB,QAAS,GAAM,EAC1E,CACL,EAOA,0BAA0B,CAAC,OAAAA,GAAS,CAChCA,EAAO,qBAAsB,CAAC,QAAS,iBAAkB,QAAS,GAAK,EAEvEsB,EAAM,IAAI,2BAA2B,EAChC,KAAM1B,GAAa,CAChBI,EAAOm4D,GAAkCv4D,EAAS,KAAK,GAAG,EAC7D,EAAE,MAAOU,GAAU,SACpBmB,EAAK,MAAM,CACP,UAASnB,sBAAO,WAAPA,cAAiB,OAAjBA,cAAuB,UAAW,qBAC9C,EACJ,EAAE,QAAQ,IAAM,CACbN,EAAO,qBAAsB,CAAC,QAAS,iBAAkB,QAAS,GAAM,EAC3E,CACL,EAEA,MAAM,iBAAiB,CAAC,OAAAA,GAASR,EAAyB,SAClD,IACM,MAAA6B,EAAe,MAAMlB,EAAkBH,EAAQ,qBAAsB,iBAAkB,IAAMsB,EAAM,KAAK,0BAA2B9B,CAAI,CAAC,EAEvI,OAAAQ,EAAAm4D,GAAkC92D,EAAa,GAAG,EAElDA,EAAa,UACff,EAAO,CACZmB,QAAK,MAAM,CACP,UAASnB,sBAAO,WAAPA,cAAiB,OAAjBA,cAAuB,UAAW,qBAC9C,EACKA,CAAA,CAEd,EAEA,MAAM,qBAAqB,CAAC,OAAAN,GAAS,SAC7B,IACM,MAAAqB,EAAe,MAAMlB,EAAkBH,EAAQ,qBAAsB,iBAAkB,IAAMsB,EAAM,IAAI,mBAAmB,CAAC,EAE1H,OAAAtB,EAAAo4D,GAA6B/2D,EAAa,MAAM,EAEhDA,EAAa,UACff,EAAO,CACZmB,QAAK,MAAM,CACP,UAASnB,sBAAO,WAAPA,cAAiB,OAAjBA,cAAuB,UAAW,qBAC9C,EACKA,CAAA,CAEd,EAEA,MAAM,cAAc,CAAC,OAAAN,GAASR,EAAM,CAC5B,IACO,aAAMW,EAAkBH,EAAQ,qBAAsB,gBAAiB,IAAMsB,EAAM,KAAK,uBAAwB9B,CAAI,CAAC,QACvHc,EAAO,CACZ,QAAQ,MAAMA,CAAK,EAE3B,EAEA,MAAM,yBAAyB,CAAC,OAAAN,GAAS,CAEjC,IACM,MAAAqB,EAAe,MAAMlB,EAAkBH,EAAQ,qBAAsB,2BAA4B,IAAMsB,EAAM,IAAI,iCAAiC,CAAC,EACzJtB,EAAO,2BAA4BqB,CAAY,QAC1Cf,EAAO,CACZ,QAAQ,MAAMA,CAAK,EAE3B,EAKA,2BAA2B,CAAC,OAAAN,CAAM,EAAG84D,EAAgB,CACjD94D,EAAO,qBAAsB,CAAC,QAAS,6BAA8B,QAAS,GAAK,EAE7EsB,EAAA,KAAK,oCAAqC,CAAC,eAAAw3D,CAAA,CAAe,EAC3D,KAAMl5D,GAAa,OACTI,EAAA,iCAAgCwB,EAAA5B,GAAA,YAAAA,EAAU,OAAV,YAAA4B,EAAgB,kBAAmB,GAAI,CAAC,KAAM,GAAK,EAC1FxB,EAAO,sBAAuBJ,EAAS,KAAK,QAAS,CAAC,KAAM,GAAK,EACpE,EAAE,MAAM,IAAM,SACf6B,EAAK,MAAM,CACP,UAASF,GAAAC,EAAA,yBAAO,WAAP,YAAAA,EAAiB,OAAjB,YAAAD,EAAuB,UAAW,qBAC9C,EACJ,EAAE,QAAQ,IAAM,CACbvB,EAAO,qBAAsB,CAAC,QAAS,6BAA8B,QAAS,GAAM,EACvF,CACL,EAEA,mBAAmB,CAAC,OAAAA,EAAQ,YAAA+xC,GAAc,CACtC/xC,EAAO,qBAAsB,CAAC,QAAS,6BAA8B,QAAS,GAAK,EAC7EsB,EAAA,KAAK,eAAeywC,EAAY,iBAAiB,EAAE,IAAI,uBAAuB,EAC/E,KAAMnyC,GAAa,OACTI,EAAA,iCAAgCwB,EAAA5B,GAAA,YAAAA,EAAU,OAAV,YAAA4B,EAAgB,kBAAmB,GAAI,CAAC,KAAM,GAAK,EAC1FxB,EAAO,sBAAuBJ,EAAS,KAAK,QAAS,CAAC,KAAM,GAAK,EACpE,EAAE,MAAM,IAAM,SACf6B,EAAK,MAAM,CACP,UAASF,GAAAC,EAAA,yBAAO,WAAP,YAAAA,EAAiB,OAAjB,YAAAD,EAAuB,UAAW,qBAC9C,EACJ,EAAE,QAAQ,IAAM,CACbvB,EAAO,qBAAsB,CAAC,QAAS,6BAA8B,QAAS,GAAM,EACvF,CACL,EAKA,8BAA8B,CAAC,MAAAO,EAAO,OAAAP,CAAA,EAASR,EAAM,CACjDQ,EAAO,qBAAsB,CAAC,QAAS,gCAAiC,QAAS,GAAK,EAChFsB,EAAA,KAAK,gBAAgB9B,EAAK,IAAI,yBAA0BA,CAAI,EAC7D,KAAMI,GAAa,CAChBtB,EAAS,MAAM,uCAAuC,EAC/C0B,EAAA,+BAAgCJ,EAAS,KAAK,SAAW,GAAI,CAAC,KAAM,GAAK,EACnF,EAAE,MAAOU,GAAU,aACpBmB,EAAK,MAAM,CACP,UAASnB,sBAAO,WAAPA,cAAiB,OAAjBA,cAAuB,UAAW,qBAC9C,EACDC,EAAM,WAAW,OAAO,KAAID,sBAAO,WAAPA,cAAiB,OAAjBA,cAAuB,MAAM,EAC5D,EAAE,QAAQ,IAAM,CACbN,EAAO,qBAAsB,CAAC,QAAS,gCAAiC,QAAS,GAAM,EAC1F,CACL,EAMA,yBAAyB,CAAC,OAAAA,CAAM,EAAGR,EAAM,CACrCQ,EAAO,qBAAsB,CAAC,QAAS,2BAA4B,QAAS,GAAK,EACjFsB,EAAM,KAAK,sBAAuB9B,CAAI,EACjC,KAAMI,GAAa,CACTI,EAAA,wBAAyBJ,EAAS,KAAK,GAAG,EACjDtB,EAAS,MAAM,wCAAyCsB,EAAS,KAAK,GAAG,EAC5E,EAAE,MAAOU,GAAU,SACpBmB,EAAK,MAAM,CACP,UAASnB,sBAAO,WAAPA,cAAiB,OAAjBA,cAAuB,UAAW,qBAC9C,EACJ,EAAE,QAAQ,IAAM,CACbN,EAAO,qBAAsB,CAAC,QAAS,2BAA4B,QAAS,GAAM,EACrF,CACL,EAQA,yBAAyB,CAAC,OAAAA,CAAM,EAAG+4D,EAAc,CAC7C/4D,EAAO,qBAAsB,CAAC,QAAS,2BAA4B,QAAS+4D,EAAK,EAEjFz3D,EAAM,OAAO,uBAAuBy3D,CAAI,EAAE,EACrC,KAAMn5D,GAAa,CAChBtB,EAAS,MAAM,wCAAyCsB,EAAS,KAAK,QAAQ,EAC9EtB,EAAS,MAAM,gBAAiB,CAC5B,KAAM,UACN,QAAS,WACZ,EACJ,EAAE,MAAOgC,GAAU,SACpBmB,EAAK,MAAM,CACP,UAASnB,sBAAO,WAAPA,cAAiB,OAAjBA,cAAuB,UAAW,qBAC9C,EACJ,EAAE,QAAQ,IAAM,CACbN,EAAO,qBAAsB,CAAC,QAAS,2BAA4B,QAAS,GAAM,EACrF,CACL,EAEA,wBAAwB,CAAC,OAAAA,CAAM,EAAG+4D,EAAc,CAC5C/4D,EAAO,qBAAsB,CAAC,QAAS,0BAA2B,QAAS,GAAK,EAEhFsB,EAAM,IAAI,uBAAuBy3D,CAAI,QAAQ,EACxC,KAAMn5D,GAAa,CAChBtB,EAAS,MAAM,uCAAwCsB,EAAS,KAAK,OAAO,EAC/E,EAAE,MAAOU,GAAU,SACpBmB,EAAK,MAAM,CACP,UAASnB,sBAAO,WAAPA,cAAiB,OAAjBA,cAAuB,UAAW,qBAC9C,EACJ,EAAE,QAAQ,IAAM,CACbN,EAAO,qBAAsB,CAAC,QAAS,0BAA2B,QAAS,GAAM,EACpF,CACL,EAEA,0BAA0B,CAAC,OAAAA,CAAM,EAAG+4D,EAAc,CAC9C/4D,EAAO,qBAAsB,CAAC,QAAS,4BAA6B,QAAS,GAAK,EAElFsB,EAAM,KAAK,uBAAuBy3D,CAAI,gBAAgB,EACjD,KAAMn5D,GAAa,CAChBtB,EAAS,MAAM,kCAAmCsB,EAAS,KAAK,KAAK,EACxE,EAAE,MAAOmE,GAAM,SAChBzF,EAAS,MAAM,iCAAgCiD,GAAAC,EAAAuC,GAAA,YAAAA,EAAG,WAAH,YAAAvC,EAAa,OAAb,YAAAD,EAAmB,UAAW,oBAAoB,EACpG,EAAE,QAAQ,IAAM,CACbvB,EAAO,qBAAsB,CAAC,QAAS,4BAA6B,QAAS,GAAM,EACtF,CACL,EAEA,oBAAoB,CAAC,OAAAA,GAAS,CAC1BA,EAAO,qBAAsB,CAAC,QAAS,6BAA8B,QAAS,GAAK,EAC7EsB,EAAA,IAAI,eAAewxC,GAAe,gBAAgB,kBAAkB,EACrE,KAAMlzC,GAAa,CACTI,EAAA,wBAAyBJ,EAAS,KAAK,GAAG,EACpD,EAAE,MAAOU,GAAU,SACpBmB,EAAK,MAAM,CACP,UAASnB,sBAAO,WAAPA,cAAiB,OAAjBA,cAAuB,UAAW,qBAC9C,EACJ,EAAE,QAAQ,IAAM,CACbN,EAAO,qBAAsB,CAAC,QAAS,6BAA8B,QAAS,GAAM,EACvF,CACL,EAEA,MAAM,wBAAwB,CAAC,OAAAA,GAAS,CAC9B,MAAAqB,EAAe,MAAMlB,EAAkBH,EAAQ,qBAAsB,6BAA8B,IAAMsB,EAAM,IAAI,yBAAyB,CAAC,EAE5ItB,EAAAu4D,GAA0Bl3D,CAAY,EAErD,EAEe45C,GAAA,CACX,WAAY,SACZ16C,GAAA,UACAC,GAAA,QACAY,GACAqV,UACJ,ECxcMlW,GAAuB,CACzB,KAAM,GACN,QAAS,CACL,SAAU,GACV,OAAQ,EACZ,EACA,aAAc,GACd,YAAa,GACb,UAAW,CAAC,EACZ,SAAU,KACV,UAAW,CAAC,EACZ,SAAU,KAEV,aAAc,CACV,KAAM,GACN,KAAM,QACN,MAAO,EACX,EACA,mBAAoB,KACpB,cAAe,CACX,WAAY,CACR,KAAM,GACN,OAAQ,GACR,eAAgB,GAChB,cAAe,GACf,UAAW,GACX,SAAU,GAElB,EACA,gBAAiB,KACjB,mBAAoB,KAEpB,qBAAsB,CAAC,EACvB,gBAAiB,CAAC,EAElB,kBAAmB,CAAC,EAEpB,gBAAiB,CACb,SAAU,GACV,UAAW,SACf,EACA,SAAU,CACN,CACI,GAAI,0BACJ,KAAM,OACN,MAAO,OACP,KAAM,OACN,MAAO,QACP,KAAM,kBACN,SAAU,OACV,QAAS,EACb,EACA,CACI,GAAI,4BACJ,KAAM,OACN,MAAO,OACP,KAAM,OACN,MAAO,QACP,KAAM,kBACN,SAAU,OACV,UAAW,EACf,EACA,CACI,GAAI,yBACJ,KAAM,WACN,MAAO,GACP,KAAM,WACN,MAAO,QACP,KAAM,8BACN,YAAa,+CACb,SAAU,OACV,EAAG,GACH,EAAG,GACH,UAAW,GACX,UAAW,GACX,QAAS,EACb,EACA,CACI,GAAI,2BACJ,KAAM,WACN,MAAO,GACP,KAAM,WACN,MAAO,QACP,KAAM,8BACN,YAAa,+CACb,SAAU,OACV,EAAG,GACH,EAAG,GACH,UAAW,GACX,UAAW,GACX,UAAW,EACf,EACA,CACI,GAAI,0BACJ,KAAM,YACN,MAAO,OACP,MAAO,YACP,KAAM,QACN,UAAW,GACX,KAAM,0BACN,SAAU,mBACV,EAAG,IACH,EAAG,GACH,QAAS,CAAC,0BAA2B,2BAA4B,yBAAyB,EAC1F,YAAa,sCACb,QAAS,EACb,EACA,CACI,GAAI,2BACJ,KAAM,aACN,MAAO,OACP,MAAO,YACP,KAAM,QACN,UAAW,GACX,KAAM,kBACN,SAAU,mBACV,EAAG,IACH,EAAG,GACH,YAAa,uCACb,QAAS,CAAC,0BAA2B,2BAA4B,yBAAyB,EAC1F,QAAS,EACb,EACA,CACI,GAAI,0BACJ,KAAM,YACN,MAAO,OACP,MAAO,YACP,KAAM,QACN,UAAW,GACX,KAAM,kBACN,SAAU,mBACV,EAAG,IACH,EAAG,GACH,YAAa,sCACb,QAAS,CAAC,0BAA2B,2BAA4B,yBAAyB,EAC1F,QAAS,EACb,EACA,CACI,GAAI,sBACJ,KAAM,QACN,MAAO,QACP,KAAM,QACN,UAAW,GACX,KAAM,oBACN,YAAa,uCACb,SAAU,mBACV,QAAS,EACb,EACA,CACI,GAAI,qBACJ,KAAM,aACN,MAAO,OACP,KAAM,QACN,UAAW,GACX,EAAG,IACH,KAAM,gBACN,YAAa,uCACb,SAAU,mBACV,QAAS,EACb,EACA,CACI,GAAI,gCACJ,KAAM,oBACN,MAAO,YACP,KAAM,QACN,EAAG,IACH,EAAG,GACH,YAAa,mDACb,SAAU,mBACV,KAAM,yBACN,QAAS,EACb,EACA,CACI,GAAI,sCACJ,KAAM,qBACN,MAAO,WACP,KAAM,QACN,EAAG,IACH,EAAG,GACH,YAAa,kDACb,SAAU,mBACV,KAAM,yBACN,QAAS,EACb,EACA,CACI,GAAI,oCACJ,KAAM,sBACN,MAAO,SACP,KAAM,QACN,EAAG,IACH,EAAG,GACH,YAAa,4DACb,SAAU,mBACV,KAAM,yBACN,QAAS,EACb,EACA,CACI,GAAI,oBACJ,KAAM,MACN,MAAO,MACP,KAAM,QACN,EAAG,IACH,EAAG,GACH,YAAa,0CACb,SAAU,mBACV,KAAM,uBACN,QAAS,EACb,EACA,CACI,GAAI,0BACJ,KAAM,OACN,MAAO,YACP,KAAM,YACN,MAAO,YACP,UAAW,GACX,KAAM,gBACN,SAAU,mBACV,EAAG,GACH,EAAG,GACH,YAAa,sCACb,QAAS,EACb,EACA,CACI,GAAI,oBACJ,KAAM,cACN,MAAO,cACP,KAAM,QACN,UAAW,GACX,KAAM,qBACN,SAAU,mBACV,SAAU,GACV,EAAG,IACH,EAAG,GACH,QAAS,EACb,EACA,CACI,GAAI,mBACJ,KAAM,SACN,MAAO,aACP,KAAM,aACN,SAAU,GACV,UAAW,GACX,KAAM,gBACN,SAAU,mBACV,SAAU,EACV,EAAG,GACH,EAAG,GACH,YAAa,sCACb,QAAS,EACb,EAGA,CACI,GAAI,4BACJ,KAAM,YACN,MAAO,OACP,MAAO,YACP,KAAM,QACN,UAAW,GACX,KAAM,0BACN,SAAU,qBACV,EAAG,IACH,EAAG,GACH,YAAa,wCACb,QAAS,CAAC,4BAA6B,6BAA8B,2BAA2B,EAChG,UAAW,EACf,EAEA,CACI,GAAI,6BACJ,KAAM,aACN,MAAO,OACP,MAAO,YACP,KAAM,QACN,UAAW,GACX,KAAM,kBACN,SAAU,qBACV,EAAG,IACH,EAAG,GACH,YAAa,yCACb,QAAS,CAAC,4BAA6B,6BAA8B,2BAA2B,EAChG,UAAW,EACf,EACA,CACI,GAAI,4BACJ,KAAM,YACN,MAAO,OACP,MAAO,YACP,KAAM,QACN,UAAW,GACX,KAAM,kBACN,SAAU,qBACV,EAAG,IACH,EAAG,GACH,YAAa,wCACb,QAAS,CAAC,4BAA6B,6BAA8B,2BAA2B,EAChG,UAAW,EACf,EACA,CACI,GAAI,wBACJ,KAAM,QACN,MAAO,QACP,KAAM,QACN,UAAW,GACX,KAAM,oBACN,YAAa,yCACb,SAAU,qBACV,UAAW,EACf,EACA,CACI,GAAI,uBACJ,KAAM,aACN,MAAO,OACP,KAAM,QACN,UAAW,GACX,EAAG,IACH,KAAM,gBACN,YAAa,yCACb,SAAU,qBACV,UAAW,EACf,EACA,CACI,GAAI,kCACJ,KAAM,oBACN,MAAO,YACP,KAAM,QACN,EAAG,IACH,EAAG,GACH,YAAa,qDACb,SAAU,qBACV,KAAM,yBACN,UAAW,EACf,EACA,CACI,GAAI,wCACJ,KAAM,qBACN,MAAO,WACP,KAAM,QACN,EAAG,IACH,EAAG,GACH,YAAa,oDACb,SAAU,qBACV,KAAM,yBACN,UAAW,EACf,EACA,CACI,GAAI,sCACJ,KAAM,sBACN,MAAO,SACP,KAAM,QACN,EAAG,IACH,EAAG,GACH,YAAa,8DACb,SAAU,qBACV,KAAM,yBACN,UAAW,EACf,EACA,CACI,GAAI,sBACJ,KAAM,MACN,MAAO,MACP,KAAM,QACN,EAAG,GACH,EAAG,GACH,YAAa,4CACb,SAAU,qBACV,QAAS,SACT,KAAM,uBACN,UAAW,EACf,EACA,CACI,GAAI,4BACJ,KAAM,OACN,MAAO,YACP,KAAM,YACN,MAAO,YACP,UAAW,GACX,KAAM,gBACN,SAAU,qBACV,EAAG,GACH,EAAG,GACH,YAAa,wCACb,UAAW,EACf,EACA,CACI,GAAI,8BACJ,KAAM,cACN,MAAO,cACP,KAAM,QACN,UAAW,GACX,KAAM,qBACN,SAAU,qBACV,SAAU,GACV,EAAG,IACH,EAAG,GACH,UAAW,EACf,EACA,CACI,GAAI,mBACJ,KAAM,SACN,MAAO,aACP,KAAM,aACN,SAAU,GACV,UAAW,GACX,KAAM,gBACN,SAAU,qBACV,SAAU,EACV,EAAG,GACH,EAAG,GACH,YAAa,sCACb,UAAW,EACf,EAEA,CACI,GAAI,gCACJ,KAAM,kBACN,MAAO,0BACP,KAAM,QACN,SAAU,UACV,KAAM,UACN,SAAU,GACV,EAAG,IACH,EAAG,EACP,EACA,CACI,GAAI,qBACJ,KAAM,OACN,MAAO,eACP,KAAM,QACN,SAAU,UACV,SAAU,GACV,UAAW,GACX,KAAM,SACV,EACA,CACI,GAAI,qBACJ,KAAM,OACN,MAAO,eACP,KAAM,QACN,SAAU,UACV,SAAU,GACV,UAAW,GACX,KAAM,SACV,EACA,CACI,GAAI,sBACJ,KAAM,QACN,MAAO,gBACP,KAAM,QACN,SAAU,UACV,SAAU,GACV,UAAW,GACX,KAAM,SACV,EACA,CACI,GAAI,sBACJ,KAAM,QACN,MAAO,gBACP,KAAM,QACN,SAAU,UACV,SAAU,GACV,UAAW,GACX,KAAM,aACV,EACA,CACI,GAAI,sBACJ,KAAM,UACN,MAAO,gBACP,KAAM,QACN,SAAU,UACV,SAAU,GACV,UAAW,GACX,KAAM,uBACV,EACA,CACI,GAAI,oBACJ,KAAM,MACN,MAAO,cACP,KAAM,QACN,SAAU,UACV,SAAU,GACV,KAAM,uBACV,EACA,CACI,GAAI,iCACJ,KAAM,WACN,MAAO,mBACP,KAAM,QACN,SAAU,UACV,SAAU,GACV,KAAM,wBACN,EAAG,GACH,EAAG,GACH,YAAa,oOACjB,EACA,CACI,GAAI,sBACJ,KAAM,gBACN,MAAO,gBACP,KAAM,QACN,SAAU,UACV,UAAW,GACX,SAAU,GACV,KAAM,mBACN,EAAG,IACH,EAAG,EACP,EACA,CACI,GAAI,wBACJ,KAAM,UACN,MAAO,kBACP,KAAM,QACN,SAAU,UACV,UAAW,GACX,SAAU,GACV,KAAM,cACN,EAAG,IACH,EAAG,EACP,EACA,CACI,GAAI,uCACJ,KAAM,iBACN,MAAO,yBACP,KAAM,QACN,SAAU,UACV,SAAU,GACV,KAAM,cACN,EAAG,IACH,EAAG,EACP,EACA,CACI,GAAI,6BACJ,KAAM,eACN,MAAO,uBACP,KAAM,QACN,SAAU,UACV,KAAM,WACN,SAAU,GACV,EAAG,IACH,EAAG,EACP,EACA,CACI,GAAI,sBACJ,KAAM,gBACN,MAAO,gBACP,KAAM,QACN,SAAU,UACV,SAAU,GACV,KAAM,WACN,EAAG,IACH,EAAG,EACP,EACA,CACI,GAAI,mBACJ,KAAM,aACN,MAAO,aACP,KAAM,QACN,SAAU,UACV,SAAU,GACV,KAAM,cACN,EAAG,IACH,EAAG,EACP,EAEA,CACI,GAAI,mBACJ,KAAM,aACN,MAAO,aACP,KAAM,QACN,SAAU,UACV,KAAM,cACN,SAAU,GACV,EAAG,IACH,EAAG,EACP,EACA,CACI,GAAI,6BACJ,KAAM,gBACN,MAAO,cACP,KAAM,QACN,SAAU,UACV,KAAM,qBACN,SAAU,GACV,EAAG,IACH,EAAG,EACP,EACA,CACI,GAAI,+BACJ,KAAM,kBACN,MAAO,gBACP,KAAM,QACN,SAAU,UACV,SAAU,GACV,KAAM,qBACN,EAAG,IACH,EAAG,EACP,EACA,CACI,GAAI,2BACJ,KAAM,aACN,MAAO,qBACP,KAAM,QACN,SAAU,UACV,SAAU,GACV,KAAM,qBACN,EAAG,IACH,EAAG,EACP,EACA,CACI,GAAI,yBACJ,KAAM,WACN,MAAO,mBACP,KAAM,QACN,SAAU,UACV,SAAU,GACV,KAAM,qBACN,EAAG,IACH,EAAG,EACP,EACA,CACI,GAAI,2BACJ,KAAM,aACN,MAAO,qBACP,KAAM,QACN,SAAU,UACV,SAAU,GACV,KAAM,qBACN,EAAG,IACH,EAAG,EACP,EACA,CACI,GAAI,yBACJ,KAAM,WACN,MAAO,mBACP,KAAM,QACN,SAAU,UACV,SAAU,GACV,KAAM,qBACN,EAAG,IACH,EAAG,EACP,EACA,CACI,GAAI,2BACJ,KAAM,aACN,MAAO,qBACP,KAAM,QACN,SAAU,UACV,SAAU,GACV,KAAM,WACN,EAAG,IACH,EAAG,EACP,EACA,CACI,GAAI,sBACJ,KAAM,cACN,MAAO,gBACP,KAAM,QACN,SAAU,UACV,SAAU,GACV,KAAM,WACN,EAAG,IACH,EAAG,EACP,EAEA,CACI,GAAI,sBACJ,KAAM,cACN,MAAO,gBACP,KAAM,QACN,SAAU,UACV,SAAU,GACV,KAAM,WACN,EAAG,IACH,EAAG,EACP,EA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","names":["ray","Pusher","pusherAppKey","pusher","Cookies","Echo","SET_LOCALE","SET_APP_LOADING","SET_APP_BOOTING","TOGGLE_RIGHT_SIDEBAR","TOGGLE_SIDEBAR","INITIALIZE_STATE","TOGGLE_LISTING_VIEW","TOGGLE_SECONDARY_IMPORT_NAV_VIEW","CLOSE_SIDEBAR","TOGGLE_DEVICE","SET_ALL_POSSIBLE_PERMISSIONS","SET_MASQUERADE_STATUS","SET_MASQUERADE","END_MASQUERADE","SET_FW_STRIPE_KEY","SET_POLLED_FW_BUILD_NUMBER","SET_UPDATE_AVAILABLE","SET_APP_FEATURES","MARK_SETUP_ITEM_COMPLETE","SET_FEATURES_WAITLIST","SET_CURRENT_CURRENCY","TOGGLE_DEBUG_ON","TOGGLE_DEBUG_DRAWER","SET_FW_BUILD_NUMBER","SET_HOVERED_TURNOVER_BOOKING_ID","SET_ROUTES","SET_SETTINGS_LOADING","SET_NOTIFICATION_SETTINGS","SET_VEHICLES_LOADING","SET_VEHICLES","SET_VEHICLE_MAKES","SET_VEHICLE_MODELS","SET_VEHICLE_CLASS_CREATED","SET_VEHICLE_CLASSES","SET_VEHICLE_CLASS","CLEAR_VEHICLE_FORM_ERRORS","SET_VEHICLE_FORM_ERRORS","SET_USER","SET_AUTH_LOADING","SET_TOKEN","SAVE_TOKEN","SAVE_REGISTER_ID","SET_ROLES","SET_PERMISSIONS","FETCH_USER_FAILURE","LOGOUT","UPDATE_USER","SET_USER_NOTIFICATIONS","SET_USER_API_TOKENS","SET_BOOKING_LOADING","SET_BOOKING_DIALOG","CLEAR_BOOKING_FORM_ERRORS","SET_BOOKING_FORM_ERROR","SET_FILTERED_MAKES","PUSH_CALENDAR_ATTRIBUTES","SET_CALENDAR_ATTRIBUTES","SET_UNAVAILABLE_DATES","RESET_UNAVAILABLE_DATES","SET_BOOKING_LISTING","SET_STORED_TURO_BOOKINGS","SET_CUSTOMER_BOOKING","SET_REMEMBER_CUSTOMER","SET_BOOKINGS","SET_BOOKINGS_META","SET_ABANDONED_BOOKINGS","SET_PRIORITY_BOOKINGS","SET_TOTAL_BOOKINGS","SET_CURRENT_WORKING_BOOKING","SET_CURRENT_WORKING_BOOKING_STATUS","SET_BOOKING_PAYMENTS","MERGE_BOOKING_LINE_ITEM","UPDATE_BOOKING_LINE_ITEM","REMOVE_BOOKING_LINE_ITEM","SET_BOOKING_CART_ID","RESET_BOOKING","SET_BOOKING_AUTOMATION_EVENTS","SET_BOOKING_NOT_FOUND","SET_CURRENT_STRIPE_CHARGE","SET_FLEET_RESOURCES","SET_CURRENT_WORKING_BOOKING_ATTRIBUTE","SET_COMPANY_LOADING","SET_COMPANY","SET_COMPANY_PHONE","SET_COMPANY_META","SET_COMPANY_DEFAULT_META","SET_COMPANY_BOOKINGS","SET_COMPANY_EMPLOYEES","SET_COMPANY_EMPLOYEE","SET_POSSIBLE_PERMISSIONS","RESET_EMPLOYEE","SET_COMPANY_NOTIFICATIONS","SET_EMPLOYEE_PERMISSIONS","SET_EMPLOYEE_ROLES","SET_EMAIL_DOMAIN_SETTINGS","SET_DELIVERY_LOCATIONS","SET_FEEDBACK_REVIEWS","SET_COMPANY_FORM_ERROR","SET_COMPANY_META_FORM_ERROR","CLEAR_COMPANY_META_FORM_ERRORS","SET_OPERATING_RULES","SET_COMPANY_CURRENCY","SET_COMPANY_SETTINGS","SET_COUNTS","SET_AFFILIATE_LOADING","SET_AFFILIATE","SET_AFFILIATE_PAYOUTS","SET_AFFILIATE_APPLICATION","SET_AFFILIATE_FUTURE_PAYOUT","SET_AFFILIATE_PAST_PAYOUT","SET_LISTING_LOADING","SET_LISTING_SNACK","SET_LISTING_DIALOG","CLEAR_LISTING_FILTER","SET_LISTING_FILTER_AVAILABLE_FILTERS","SET_LISTING_FILTER_SELECTED_FILTERS","TOGGLE_LISTING_FILTER","SET_LISTING_VEHICLE","SET_LISTING_PRICE","SET_LISTING_PRICE_TAXABLE","SET_LISTING_PRICE_TAX_CATEGORY","SET_LISTING_SEC_DEP","SET_LISTING_SEC_DEP_CREDIT","SET_LISTING_SEC_DEP_DEBIT","SET_LISTING_MILES_OVERAGE","RESET_CURRENT_LISTING","SET_CURRENT_NEW_LISTING","SET_CURRENT_LISTING","SET_LISTING","SET_LISTING_INIT","SET_ALL_LISTINGS","SET_LISTING_ID","SET_STATUS_FILTER_ITEMS","SET_STATUS_FILTER_ITEMS_UPCOMING","SET_STATUS_FILTER_TEMP_ITEMS","SET_PAYMENT_STATUS_FILTER_ITEMS","SET_ACTIVITY_FILTER_ITEMS","SET_SOURCE_FILTER_ITEMS","SET_BOOKABLE_TIMES","SET_CURRENT_LISTING_BOOKINGS","SET_CURRENT_LISTING_DISCOUNTABLE","SET_CURRENT_LISTING_MILE_ALLOWANCE","SET_CURRENT_LISTING_DURATION_DISCOUNT","TOGGLE_PAUSE_CURRENT_LISTING","SET_CURRENT_LISTING_CHECKOUT_MODE","SET_LISTING_PRICE_TYPE","SET_LISTING_PRICE_PERIOD","SET_LISTING_PRICE_STRUCTURE_ID","SET_VEHICLE_VIN","SET_VEHICLE_YEAR","SET_VEHICLE_MAKE","SET_VEHICLE_MODEL","SET_VEHICLE_COLOR","SET_VEHICLE_SEATS","SET_VEHICLE_DOORS","SET_VEHICLE_PLATE","SET_ALL_AVAILABLE_FEATURES","SET_VEHICLE_FEATURES","SET_VEHICLE_EXTRAS","SET_CURRENT_DECODED_VIN","SET_EXISTING_LISTING_DATA","SET_CURRENT_TRIP_EXTRA","SET_CURRENT_LISTING_IMAGES","SET_LISTING_AVAILABILITY_MESSAGE","SET_ALL_EXTRAS","SET_LISTING_FORM_ERRORS","CLEAR_LISTING_FORM_ERRORS","SET_LISTING_DAILY_PRICES","SET_FLEET_RESOURCE_LISTINGS","SET_FLEET_RESOURCE_LISTINGS_DATA","SET_CURRENT_LISTING_INCIDENTS","SET_LISTING_FILTER_OPTIONS","SET_CUSTODIAL_LISTING","SET_INIT","SET_TURO_LOADING","SET_TRIPS","SET_TRIP_SINGLE","SET_TURO_EMAILS","SET_TRIP_SINGLE_MESSAGES","SET_TRIP_SINGLE_IMAGES","SET_TURO_MESSAGE_SENDING","SET_TURO_ALL_VEHICLES","RESET_VEHICLES","SET_ALL_IMPORTED_TURO_VEHICLES","SET_TRIP_TURO_GO","SET_TURO_CONNECTIONS","SET_TURO_REIMBURSEMENT_DETAILS","RESET_TURO_CREDS","SET_TURO_CAPTCHA_TESTING","SET_TURO_CAPTCHA_ID","SET_TURO_EARNINGS","SET_TRIP_HISTORY","SET_TRIP_PENDING_REQUESTS","SET_ACTIVITY_FEED","SET_TURO_CHANGE_REQUEST_SETTINGS","SET_TURO_FEEDBACK","SET_TURO_FEEDBACK_PAGE","SET_TURO_FEEDBACK_NEXT_PAGE","SET_TURO_FEEDBACK_TOTAL","SET_TURO_FEEDBACK_PER_PAGE","SET_TURO_FEEDBACK_LAST_PAGE","SET_ALL_TURO_VEHICLES","CLEAR_ALL_TURO_VEHICLES","SET_ALL_TURO_MESSAGES","SET_ALL_TURO_MESSAGES_CURRENT_PAGINATE","SET_ALL_TURO_MESSAGES_TOTAL_PAGES","SET_TURO_EMAILS_PAGINATION","SET_TRIP_SINGLE_MESSAGES_STORED","SET_TURO_PRICING_LOADING","SET_TURO_VEHICLE_DAILY_PRICING","SET_TURO_PRICING_VEHICLES","SET_GETAROUND_INIT","SET_GETAROUND_LOADING","SET_GETAROUND_VEHICLES","SET_GETAROUND_CONNECTIONS","SET_GETAROUND_TRIPS","SET_GETAROUND_RESERVATION","SET_ALL_IMPORTED_GETAROUND_VEHICLES","SET_GETAROUND_RESERVATION_RECEIPT","SET_RENTERS_LOADING","SET_RENTER","SET_RENTERS","SET_ALL_RENTERS","SET_RENTERS_DIALOG","ADD_RENTER","RESET_RENTER","SET_PAYMENT_SOURCES","SET_BOOKING_PAYMENT","SET_PHONE_NUMBER","SET_SEARCHED_RENTERS","SET_STRIPE_CUSTOMER","CLEAR_RENTERS_FORM_ERROR","SET_RENTERS_CREDIT_CARDS","SET_RENTER_NOTIFICATIONS","SET_CUSTOMER_QUERY","SET_AUTOMATION_LOADING","SET_CURRENT_AUTOMATION_EVENT","SET_MESSAGE_TEMPLATES","SET_AUTOMATION_EVENTS","SET_CURRENT_EVENT_LOGS","SET_CART_LOADING","SET_CART","SET_CART_L_ID","SET_PAYMENTS_LOADING","SET_PAYMENT_METHODS","SET_INVOICES","SET_PAYMENT","SET_PAYMENTS","SET_CURRENT_WORKING_PAYMENT_ITEM","SET_CUSTOM_PAYMENT_METHODS","SET_STRIPE_INTENT","RESET_NEW_PAYMENT","SET_SUBSCRIPTION_LOADING","SET_SUBSCRIPTION","UPDATE_NEW_SUBSCRIPTION","SET_ENFORCE_SUBSCRIPTION","SET_SUBSCRIPTION_MASTER","SET_EXTRA_LISTINGS_ADDON","CLEAR_SUBSCRIPTION_FORM_ERRORS","SET_SUBSCRIPTION_FORM_ERROR","SET_SUBSCRIPTION_STEP","SET_PLAN_SELECTION","SET_SUBSCRIPTION_PLAN_AND_INTERVAL","SET_SU_LOADING","SET_ALL_USERS","SET_CURRENT_WORKING_USER","SET_ALL_ROLES","SET_ALL_PERMISSIONS","SET_ALL_COMPANIES","SET_CURRENT_WORKING_COMPANY","SET_ALL_MEDIA_DIRECTORIES","SET_ALL_MEDIA_IN_DIRECTORY","SET_MEDIA_BASE_PATH","SET_ALL_LISTING_IMAGES","SET_CURRENT_WORKING_SU_BASIC_STATS","SET_ALL_SERVER_DETAILS","SET_SA_FEATURE_WAITLIST","SET_SA_FEATURES_STATUS","SET_SA_CACHE","SET_TWILIO_LOADING","SET_VERIFY_CODE","SET_TESLA_INIT","CLEAR_TESLA_FORM_ERRORS","SET_TESLA_LOADING","SET_TESLA_CREDENTIALS","SET_TESLA_CONNECTIONS","UPDATE_TESLA_CONNECTION","SET_TESLA_VEHICLES","SET_TESLA_CHARGING_INVOICES","SET_TESLA_INVOICES","SET_TESLA_INVOICES_META","SET_TESLA_INVOICE_PDF","SET_CURRENT_WORKING_TESLA_VEHICLE","SET_CURRENT_WORKING_TESLA_VEHICLE_DRIVERS","SET_CURRENT_WORKING_TESLA_VEHICLE_HISTORY","SET_CURRENT_WORKING_TESLA_VEHICLE_HISTORY_PAGINATE","SET_TESLA_VEHICLE_INVITATIONS","SET_CURRENT_WORKING_TESLA_VEHICLE_APP_ACCESS","SET_CURRENT_WORKING_TESLA_VEHICLE_STATE","SET_CURRENT_WORKING_TESLA_VEHICLE_DATA","SET_CURRENT_WORKING_TESLA_ASLEEP","SET_BOUNCIE_INIT","SET_BOUNCIE_LOADING","SET_BOUNCIE_CONNECTIONS","SET_TEMPLATES_LOADING","RESET_TEMPLATE","SET_ALL_DOCUMENTS","SET_ONE_DOCUMENT","SET_ALL_TEMPLATES","SET_ONE_TEMPLATE","SET_ENVELOPE_LOADING","SET_ENVELOPE","SET_ALL_ENVELOPES","SET_ENVELOPE_SIGNATURE","SET_ALL_FIELDS","SET_ENVELOPE_DIALOG","SET_ENVELOPE_QUERY","SET_ENVELOPE_CUSTOMER","UPDATE_ENVELOPE_FIELD","SET_ESIGN_SESSION_DATA","SET_STRIPE_LOADING","SET_CURRENT_WORKING_INVOICE","SET_CURRENT_WORKING_PAYMENT_INTENT","SET_BILLING_PORTAL_SESSION","SET_STRIPE_PRICE_DATA","SET_SUBSCRIPTION_DETAILS","SET_STRIPE_IDENTITIES","SET_STRIPE_ACCOUNT","SET_SQUARE_LOADING","SET_MAINTENANCE_LOADING","SET_CURRENT_VEHICLE_MAINTENANCE","SET_CURRENT_VEHICLE_RECALLS","RESET_CURRENT_WORKING_MAINTENANCE_ITEM","SET_RIGHT_SIDEBAR_OPEN","SET_RIGHT_SIDEBAR_MODE","SET_RIGHT_SIDEBAR_TITLE","SET_CURRENT_WORKING_TOOL","SET_SELECTED_FIELD","SET_SELECTED_FIELD_V2","REMOVE_FIELD","REMOVE_ALL_FIELDS","SET_SELECTED_FIELD_INDEX_V2","SET_EXISTING_DATA","SET_NEW_DATA","SET_TOOLS_ACTIVE","SET_CANVAS_ACTIVE","RESET_TEMPLATE_DATA","SET_FIELD_CURRENT_SIGNER","SET_DOCUMENT_IMAGES","UPDATE_DOCUMENT_TEMPLATE_DATA","ADD_TO_DOCUMENT_TEMPLATE_DATA","SET_TAXES_LOADING","SET_TAX_CATEGORIES","SET_CURRENT_WORKING_TAX_CATEGORY","SET_TAX_CATEGORY_FORM_ERRORS","CLEAR_TAX_CATEGORY_FORM_ERRORS","RESET_CURRENT_WORKING_TAX_CATEGORY","SET_TENANT_CHECKOUT_DATES","SET_TENANT_CHECKOUT_LOCATION","SET_TENANT_CHECKOUT_DURATIONS","SET_TENANT_CHECKOUT_CUSTOM_ORDER_FIELDS","SET_TENANT_CHECKOUT_BOOKING_ID","SET_TENANT_CHECKOUT_CUSTOMER_TOS_AGREE","SET_TENANT_CHECKOUT_COSTS","SET_TENANT_CHECKOUT_LISTING_ID","SET_TENANT_CHECKOUT_CUSTOMERS","SET_TENANT_CHECKOUT_CUSTOMER_BY_INDEX","SET_TENANT_CHECKOUT_EXTRAS_V2","SET_TENANT_CHECKOUT_REQUIRED_EXTRAS_V2","SET_TENANT_CHECKOUT_REQUIRED_EXTRAS","SET_TENANT_CHECKOUT_DELIVERY_ADDRESS_FORM_SHOW","SET_TENANT_CHECKOUT_STRIPE_PAYMENT_INTENT","SET_TENANT_CHECKOUT_DIALOG","SET_TENANT_CHECKOUT_ORDER_DELIVERY_ADDRESS","SET_TENANT_CHECKOUT_ORDER_DISTANCE_ALLOWANCE","RESET_TENANT_CHECKOUT_DELIVERY_RESULTS","SET_TENANT_CHECKOUT_DELIVERY_RESULTS","SET_TENANT_CHECKOUT_DISCOUNT","RESET_TENANT_CHECKOUT_DISCOUNT","SET_TENANT_CHECKOUT_FORM_ERRORS","RESET_TENANT_CHECKOUT_FORM_ERRORS","SET_CHECKOUT_LOADING","CLEAR_CHECKOUT_FORM_ERRORS","SET_CHECKOUT_DISCOUNT","RESET_CHECKOUT_DISCOUNT","SET_ORDER_DELIVERY","SET_CHECKOUT_STRIPE","SET_CHECKOUT_AVAILABILITY","SET_CHECKOUT_INITIALIZED","SET_CHECKOUT_ORDER_CUSTOMER","SET_CHECKOUT_ORDER_CUSTOMER_BY_INDEX","SET_CHECKOUT_ORDER_CUSTOMER_AGREE_TOS","SET_CHECKOUT_ORDER_DATES","SET_CHECKOUT_ORDER_CUSTOM_FIELDS","SET_CHECKOUT_ORDER_DELIVERY_ADDRESS","SET_CHECKOUT_RENTER_AUTHENTICATED","SET_CHECKOUT_ORDER_REQUIRED_EXTRAS","SET_RESERVATION_REQUEST_LISTING_ID","SET_RESERVATION_REQUEST_DATES","SET_RESERVATION_REQUEST_DURATIONS","SET_RESERVATION_REQUEST_EXTRAS","SET_RESERVATION_REQUEST_EXTRAS_V2","SET_RESERVATION_REQUEST_REQUIRED_EXTRAS_V2","SET_RESERVATION_REQUEST_REQUIRED_EXTRAS_V2_AT_INDEX","SET_RESERVATION_REQUEST_PRICING","SET_COUPON_LOADING","SET_COUPONS","UPDATE_COUPON","SET_COUPON_REDEMPTIONS","CLEAR_COUPON_FORM_ERRORS","SET_COUPON_FORM_ERROR","SET_COUPON_FORM_BUSY","SET_NOTES_LOADING","SET_CUSTOM_FIELDS_LOADING","SET_CUSTOM_FIELDS","SET_CUSTOM_FIELDS_FORM_BUSY","SET_DEFAULT_PROPERTIES","CLEAR_DEFAULT_PROPERTIES_FORM","SET_DEFAULT_PROPERTIES_FORM_BUSY","SET_DEFAULT_PROPERTIES_FORM_ERRORS","SET_TOLLS_LOADING","SET_TOLL_AGENCIES","SET_TOLL_ACCOUNTS","SET_TOLL_AGENCIES_WISHLIST","SET_TOLL_TRANSACTIONS","SET_TOLL_TRANSPONDERS","SET_WHATS_NEW_LOADING","SET_WHATS_NEW_COUNT","SET_WHATS_NEW","MERGE_WHATS_NEW","SET_WHATS_NEW_IMAGES","SET_SHOW_WHATS_NEW_SIDEBAR","SET_COMPANY_BRANCHES","SET_COMPANY_BRANCH","SET_COMPANY_BRANCHES_LOADING","SET_ACTION_ITEMS","SET_ACTION_ITEM","ACTION_ITEM_CREATED","ACTION_ITEM_DELETED","SET_FLEET_FORM_ERROR","CLEAR_FLEET_FORM_ERRORS","SET_OUTDOORSY_LOADING","SET_OUTDOORSY_CONNECTIONS","SET_OUTDOORSY_LISTINGS","SET_OUTDOORSY_BOOKINGS","SET_HQRENTALS_LOADING","SET_HQRENTALS_CONNECTIONS","SET_HQRENTALS_LISTINGS","SET_HQRENTALS_BOOKINGS","SET_HQRENTALS_CONTACTS","SET_PROVIDERS_LOADING","SET_PAYMENT_PROVIDERS","SET_TURO_RESEARCH_LOADING","SET_TURO_ALL_DELIVERY_LOCATIONS","SET_TURO_ALL_VEHICLE_MAKES","SET_TURO_RESEARCH_SEARCH_LIST","SET_COMMISSION_PARTNER_LOADING","SET_COMMISSION_PARTNERS","SET_COMMISSION_PARTNER","SET_COMMISSIONS","CLEAR_COMMISSION_PARTNER_COUPON_FORM_ERRORS","SET_ORDERS_LOADING","SET_ORDER","UPDATE_ORDER_LINE","SET_ORDER_DOCUMENT","SET_ORDER_DOCUMENTS","SET_ORDER_DOCUMENT_DOWNLOAD_STATUS","SET_ORDER_AVAILABILITY","SET_OPEN_PRICING_WIZARD_DIALOG","SET_EMAILS_LOADING","SET_EMAILS","SET_EMAIL_HISTORY","SET_EMAIL_TEMPLATES","SET_EMAIL_TEMPLATE","SET_EMAIL_FORM_ERROR","CLEAR_EMAIL_FORM_ERRORS","SET_WEBHOOKS_LOADING","SET_WEBHOOKS_CONVERSATIONS","SET_WEBHOOK_ENDPOINTS","SET_WEBHOOK_ENDPOINT","SET_WEBHOOK_ENDPOINT_SECRET","SET_ANALYTICS_LOADING","SET_CONVERSION_ANALYTICS","SET_VEHICLE_ANALYTICS","SET_VEHICLES_ANALYTICS","SET_CUSTODIAN_LOADING","SET_CUSTODIANS","SET_CUSTODIAN_INVITE","SET_CUSTODIAN_LISTINGS","SET_CUSTODIAN_BOOKINGS","SET_PRICING_LOADING","SET_PRICING_RULES","SET_PRICING_STRUCTURE","SET_PRICING_STRUCTURES","RESET_CURRENT_WORKING_PRICING_STRUCTURE","SET_LULA_LOADING","SET_LULA_CONNECTIONS","SET_LULA_VEHICLES","SET_TWISTED_ROAD_LOADING","SET_TWISTED_ROAD_CONNECTIONS","SET_TWISTED_ROAD_VEHICLES","SET_FILES","MERGE_FILES","SET_FILES_PAGINATION","SET_FILES_LOADING","SET_BARCODE_LOADING","SET_BARCODE","SET_EXTRAS_LOADING","SET_EXTRAS","SET_TRIP_EXTRA_SETTING_DIALOG","SET_REQUIRED_EXTRA_ADD_EDIT_DIALOG","SET_REQUIRED_EXTRA_ADD_EDIT_DATA","SET_REGULAR_EXTRA_DIALOG","SET_EXTRA_LISTINGS_DIALOG","SET_REGULAR_EXTRA_DATA","SET_AXLE_LOADING","SET_AXLE","SET_AXLE_IGNITIONS","MERGE_AXLE_IGNITION","SET_INCOMING_AXLE_IGNITION","SET_STORE_THEMES","SET_STORE_THEME_DATA","SET_BRAINTREE_LOADING","SET_TAGS_LOADING","SET_TAGS","EventBus","args","emitter","deepCopy","obj","copy","key","arrayWrap","value","Errors","field","messages","fields","message","a","b","errors","Form","data","result","name","success","response","event","targetElement","setLoading","commit","commitName","subject","performApiRequest","loadingCommitName","apiCall","error","state","mutations","types.SET_AFFILIATE_LOADING","loading","types.SET_AFFILIATE","affiliate","types.SET_AFFILIATE_PAYOUTS","payouts","types.SET_AFFILIATE_FUTURE_PAYOUT","payout","types.SET_AFFILIATE_PAST_PAYOUT","types.SET_AFFILIATE_APPLICATION","application","actions","responseData","axios","_b","_a","push","affiliateModule","createUrlQueryString","params","removeEmpty","acc","buildNestedQueryString","parentKey","fullKey","arrayItem","queryString","createOrderUrlQueryString","subKey","formatQueryStringDate","date","dateWithHyphen","input","parts","year","newDate","dayjs","dateWithoutHyphen","format","month","day","formatQueryStringTime","time","hours","minutes","baseUrls","getBaseUrl","envOverride","types.SET_ANALYTICS_LOADING","types.SET_CONVERSION_ANALYTICS","analytics","types.SET_VEHICLE_ANALYTICS","types.SET_VEHICLES_ANALYTICS","query","e","TokenKey","RegisterTokenKey","MasqueradeKey","getToken","setToken","token","remember","options","removeToken","getRegisterId","checkMasquerade","masqueradeCookie","setMasquerade","masquerade","resolve","removeMasquerade","currentMasquerade","setRegisterToken","removeAllUserCookies","isChrome","isSafari","isFirefox","isOpera","SIDEBAR_STORAGE_KEY","DEBUG_STORAGE_KEY","appModule","types.SET_APP_LOADING","types.INITIALIZE_STATE","types.SET_APP_BOOTING","booting","types.TOGGLE_RIGHT_SIDEBAR","types.TOGGLE_SIDEBAR","types.SET_HOVERED_TURNOVER_BOOKING_ID","id","types.TOGGLE_LISTING_VIEW","types.TOGGLE_SECONDARY_IMPORT_NAV_VIEW","types.CLOSE_SIDEBAR","withoutAnimation","types.TOGGLE_DEVICE","device","types.SET_ALL_POSSIBLE_PERMISSIONS","permissions","types.SET_MASQUERADE_STATUS","types.SET_MASQUERADE","types.END_MASQUERADE","types.SET_FW_STRIPE_KEY","types.SET_FW_BUILD_NUMBER","build","types.SET_POLLED_FW_BUILD_NUMBER","existingBuild","types.SET_UPDATE_AVAILABLE","types.SET_APP_FEATURES","features","types.MARK_SETUP_ITEM_COMPLETE","index","types.SET_FEATURES_WAITLIST","types.SET_CURRENT_CURRENCY","currency","types.TOGGLE_DEBUG_DRAWER","types.TOGGLE_DEBUG_ON","debugOnValue","isDebugOn","code","formatNumberWithCommas","x","formatPhoneNumber","number","phone","parsePhoneNumber","elFactory","type","attributes","children","el","child","CardService","productCards","listing","lid","UtilService","listingCardActions","listingCardCartBtn","dataset","markup","closeBtn","quickView","fwOverlayState","listingName","listingPrice","listingImage","listingAvailLink","amount","get","quickViewToggle","elementToggle","datasetString","allowed","listings","card","cardElement","attr","title","linkText","isUndefined","imageElement","cardDescription","style","updateAmount","cardPrice","priceDetails","price","DatepickerService","COMPANY_URL","company","symbol","names","rules","pickup","until","found","element","defaultTime","pDiv","ids","products","product","url","script","parentWidth","o","width","listingId","times","startDate","startTime","endDate","endTime","CartService","isNumber","length","text","possible","i","CART_UUID","uuid","payload","emailRule","v","minLengthRule","minLength","codeRule","requiredRule","useAuth","store","useStore","authLoading","computed","authForm","apiTokens","user","saveToken","checkStripe","setAuthLoading","updateUserPassword","registrationFormRules","route","useRoute","router","useRouter","form","ref","showPassword","loginFail","loginFailMessage","redirect","twoFactorAuth","last2","isFormValid","isButtonDisabled","registerFormRules","togglePasswordVisibility","onBeforeMount","_c","watch","newQuery","redirectQuery","handleLoginResponse","redirectTo","err","login","handleLoginError","onMounted","saveRegisterId","register","guessTimeZone","getUserTimezone","calcMiles","dates","milesIncluded","maxDistance","allowance","generateReservationTimes","startHour","endHour","interval","selectedDate","allowPastTime","now","start","end","effectiveStart","minutesSinceStart","nextIntervalMinutes","timeValue","timeTitle","timezones","utc","timezone","editPreferences","countryOptions","registerId","removeRegisterId","countries","country","guessCountryData","regMissing","tellProps","ipData","dataFormatOptions","timeFormatOptions","intl","currenciesAsArray","uniqueCodes","prioritized","filtered","countriesAsArray","displayCountry","displayCurrency","displayDateFormat","displayTimeFormat","displayCountryFlag","getFlagEmoji","regFieldsMissing","countryCode","codePoints","char","inputChanged","completeRegister","json","isSet","isEmpty","getDefaultMeta","getMetaBooleanValue","trueIfMissing","meta","useCompany","companyToken","companySettings","defaultMeta","companyMeta","companyLoading","companyForm","originalCompany","companyLoaded","operatingRules","companyMetaForm","companyTrialOver","saveCompanyTimezone","companyAdditionalScripts","additionalStyles","companyFacebookPixelId","companyGoogleAnalyticsId","addDefaultMeta","fetchDefaultMeta","saveCompanyInfo","saveCompanyMeta","getActivityLog","showSetupChecklist","localizationDistanceUnits","localizationDistanceUnitsObject","setupCustomStyles","companyAdditionalStyle","customStyles","setupCustomScripts","companyAdditionalScript","customScripts","stripScripts","s","noscriptRegex","div","scripts","stripScript","scriptContent","employee","fetchEmployeeByInviteToken","invite_token","completeInvite","getters","errorMessage","submitButtonDisabled","send","show1","dispatch","formSubmitSuccess","reset","onBeforeUnmount","qs","_sfc_main","to","from","next","vm","_hoisted_1","_createElementBlock","_createElementVNode","_createVNode","_component_card","_ctx","_withCtx","_openBlock","_Fragment","_hoisted_2","_toDisplayString","_component_router_link","_createTextVNode","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","_cache","$event","_withModifiers","$options","_component_alert_success","_normalizeClass","_vModelText","_component_has_error","_component_v_button","guest","isAuthenticated","authRoutes","BaseLogin","Login","Register","RegisterNextStep","CompanyEmployeeInvite","PasswordRequest","PasswordReset","PasswordVerify","PasswordResend","BaseDashboard","__vitePreload","settingsRoutes","General","Pricing","Coupons","AdvancedPricing$1","PricingTemplate$1","PricingTemplateNew$1","PricingTemplateEdit$1","AdvancedPricingEdit$1","Taxes","Security","ApiToken","ActivityLog","AccountAndBilling","Team$1","CompanyNotifications","Email$1","EmailTemplateSingle$1","SubscriptionCheckout","Providers","PaymentProviders","SinglePaymentProvider$1","CommissionPartners","Webhooks","Create","UpdateWebhook$1","Checkout","OnlineReservations","EmployeesNew$1","Employees$1","FleetBase$1","FleetBranches","FleetBranchesNew","FleetBranchesSingle","FleetClass","FleetClassNew","FleetClassSingle","ActionItems$1","ActionItemNew$1","ActionItemSingle$1","FleetFeatures$1","AffiliateIndex","AffiliateSignup","AffiliatePayouts","Index$1","commission","mapGetters","mapActions","$data","_createBlock","_component_v_progress_circular","_createCommentVNode","_component_v_alert","_component_v_dialog","_component_v_card","_component_v_card_text","_component_v_progress_linear","listingManagerRoutes","ListingManagerConnect","_component_v_app","_Transition","_KeepAlive","_renderSlot","_component_router_view","irregularPlurals","pluralize","label","cleanedLabel","lowercaseLabel","plural","upperFirst","trimmed","snakeCase","truncate","trimmedValue","useTemplate","documentTemplates","documentsLoading","selectedFieldV2","template","allTools","currentWorkingTool","documentFieldData","toolsActive","templateDocument","documentImages","selectedFieldIndexV2","signerItems","documentFileName","templateStageData","templateDocumentImages","selectedFieldV3Coordinates","y","currentSigner","signer","fetchTemplates","setDocumentImages","images","setTool","toolUsed","updateStageData","removeAllStageData","addToStageData","setSingleTemplate","deleteSelectedElementsV2","updateSelectedField","setToolsActive","isActive","toggleRightSidebar","makeFieldId","characters","templateStageDataGroupedByPage","grouped","item","page","documentViewer","checkPermission","customStore","defaultStore","permission","useAppSettings","roles","setupItems","currentCurrency","polledBuildNumber","updateAvailable","appCurrentRouteName","debugDrawerOpen","sidebar","browser","secondaryNavViews","goBack","numberOfRoutes","isRouteMatch","routeName","condition","shouldSubMenuOpen","pageName","userHasRole","role","fetchBuildNumber","toggleSideBar","userHasPermission","updateSettings","settings","fetchCurrency","getSettings","toggleDebugDrawer","DeleteButton","defineAsyncComponent","_sfc_main$1g","currentTool","customer","conditionalRulesDialog","conditionalRules","possibleWhens","possibleRules","conditionalRulesRules","tool","t","selectedFieldType","selectedFieldTitle","allFieldsWithRules","dependentFields","fieldIds","rule","setupConditionalField","getActionItems","setConditionalRules","addConditionToRuleset","fieldIsDependant","toolDescription","findTool","allFieldsOrdered","availableFields","allowsReadOnly","_d","selectedElementAttributesRequiredField","selectedElementAttributesReadOnlyField","_hoisted_8","_hoisted_9","_hoisted_11","_hoisted_12","_hoisted_13","_hoisted_14","_hoisted_15","_hoisted_16","_hoisted_17","_hoisted_18","_hoisted_19","_hoisted_21","_hoisted_22","_hoisted_24","_hoisted_25","_hoisted_27","_hoisted_28","_hoisted_29","_hoisted_31","_hoisted_32","_hoisted_33","_hoisted_34","_hoisted_36","_hoisted_37","_hoisted_38","_hoisted_39","_hoisted_41","_hoisted_42","_hoisted_43","_hoisted_45","_hoisted_46","_hoisted_47","_hoisted_48","_directive_tippy","_resolveDirective","_component_v_btn","$setup","_component_v_icon","_component_v_card_title","_hoisted_10","_component_v_divider","_withDirectives","_component_v_switch","_hoisted_20","_hoisted_23","_component_v_text_field","_component_v_expansion_panels","_component_v_expansion_panel","_component_v_expansion_panel_title","_component_v_expansion_panel_text","_component_v_btn_toggle","_component_v_card_actions","_component_v_spacer","_component_delete_button","_hoisted_30","_component_v_select","_renderList","_hoisted_35","_hoisted_40","_hoisted_44","_hoisted_49","_hoisted_50","removeField","scrollToField","showFieldSearch","leftSidebarView","searchTool","currentSignerTools","tools","filteredTools","defaultProperties","dp","categorizedTools","category","truncateFieldName","pageFieldsOverviewClassObject","hasError","emit","__emit","toolbarHeight","documentLoading","isSaving","sampleRoute","backRoute","handleSave","toolbar","_sfc_main$1c","$props","isBetween","copyTextToClipboard","textToCopy","modal","modals","textArea","dialog","round","decimals","dragElement","pos1","pos2","pos3","pos4","dragMouseDown","closeDragElement","elementDrag","useESign","envelope","envelopeAttachments","getTemplate","updateTemplate","pageMarginY","content_main","useTemplateRef","dataEditor","documentUuid","standardDoc","standardDocCoords","contentMainWidth","contentMainHeight","contentLeftSidebarWidth","mainContentStartingXPosition","scrollTop","originalContentMainWidth","originalContentMainHeight","localDocumentImages","currentWorkingDataElement","elementOffsetX","elementOffsetY","dragHandlesOn","coordinateData","removeAllFieldsDialog","editorText","currentWorkingFieldId","currentWorkingTarget","handleScroll","target","getCanvasOffset","top","left","right","bottom","height","determineRelativeY","topPosition","pos","docImage","totalPages","relTopPos","relPosition","pageYGap","pageHeightAdjust","rightSidebarOpen","LeftAndRightDocumentMargin","pageViewRectangle","widthChange","documentStartingXPosition","objectRatioHeightRev","scaled","newHeight","savedHeight","tempScale","objectRatioWidthRev","newWidth","savedWidth","handleWindowResize","getSelectedElements","removeSelectedElements","f","handleKeyup","evt","removeSelectedItems","copySelectedElement","dropItems","elementIdsToRemove","d","moveSelectedElement","selected","moveStep","elementId","dataIndex","newX","newY","verifyElementXCoords","verifyElementYCoords","firstStagedData","customerDefaultProperties","toolWidthAdjusted","widthDifference","toolHeightAdjusted","objectRatioWidth","objectRatio","objectRatioHeight","reference","numericValue","templateNew","adjustDocumentContainerHeight","docHeight","p","adjustDataCoords","scrollToPage","pageIndex","pagePosition","handleKeydown","mainContent","standardDocCoordsRect","templateDocumentDimensions","templateDocumentDimensionRatio","h","w","ratio","adjust","determinePageNumber","documentWidth","finalY","documentHeight","currentPage","pageOffset","pageEndY","elementBottom","lastPageHeight","dropListener","theDeterminedY","adjustOriginalCoords","saveTemplate","documentImageHeight","pageTop","pageBottom","selectedElement","selectedElementData","newElement","checkCoords","formatJson","html","tippyContent","elementFillColor","elementClassObject","determineYTextOffset","determineDisplayFontSize","countCheckboxes","count","removeAllFields","signerElementClicked","onDocViewLoad","onImgLoad","removeDraggingEventListeners","signingElement","dragStartListener","dragOverListener","boundingRect","svgClicked","theId","oldTarget","initElementsDrag","selectElement","determineTextLines","words","rows","usedIndex","word","checkDroppable","targetParent","updateCoordinateDataForPage","contentMain","pageNumber","rect","offsetParent","calculateTextWidth","fontSize","addField","typeId","selectedTool","fieldId","baseWidth","adjustedWidth","adjustedHeight","startingX","startingY","originalDimensions","fieldData","applyConditionalFieldProperties","subscriptionMixin","lowerCase","find","stripeTrialDate","plans","planIndex","findIndex","months","totalBilled","limit","isNull","connections","each","topic","useDateFormatter","parsedDate","useMoneyFormatter","DEFAULT_CURRENCY_FORMAT","DEFAULT_CURRENCY_POSITION","DEFAULT_CURRENCY","fromCents","toCents","formatAmount","convertFromInt","formattedAmount","formatMoneyDisplayV2","getCompanyCurrency","position","getCompanyCurrencyFormatSettings","setCurrencyAndValue","symbolOrName","companyCurrencySymbol","companyMoneyTextInputSettings","formatMoney","useEnvelope","envelopes","envelopeLoading","envelopeDialogs","envelopeForm","envelopesQuery","envelopesPagination","totalRemainingFields","envelopeIsReady","allEnvelopeData","esignSessionData","esignEnvelopeDataCopy","envelopeCustomer","envelopeCustomerData","envelopeTemplate","envelopeTemplateDocuments","envelopeDocumentImages","envelopeDocumentDimensions","envelopeDocumentDimensionRatio","envelopeCompleted","envelopeCustomerCompleted","completedEnvelopeUrl","envelopeStatus","envelopeData","pageData","updated","filled","envelopeRequiredFields","envelopeSignatures","signatureCount","remainingRequiredFields","sendEnvelopeReminder","saveSignature","acceptAndSignEnvelope","setEnvelopeDialog","updateEnvelopeField","voidEnvelope","getEnvelopes","updateCustomerQuery","formatRentalDate","envelopesTotal","currentWorkingEnvelope","envelopInfoDialog","voidEnvelopeDialog","reminderDialog","currentWorkingEnvelopeRecipients","dataTableOptions","envelopeVoided","sendReminderReady","reminderData","r","itemsPerPageOptions","envelopesHeaders","newPage","newItemsPerPage","newSort","val","recipients","recipient","renterFullName","renter","renterId","envelopeStatusText","envelopeRecipientSignatures","attachmentImage","attachment","openInNewTab","hasPendingSigners","pendingSigners","openEnvelopInfoDialog","openVoidEnvelopeDialog","openReminderDialog","pendingSignersData","voidEnvelopeCommit","sendReminderInit","isSameOrBefore","useSubscription","enforceSubscription","customersLoading","hasActiveSubscription","subscriptionPlans","subscriptionPlan","subscription","stripeSubscriptionObject","subscriptionsLoading","subscriptionEndDate","hasPastDueSubscription","hasPausedSubscription","subscriptionFeatures","subscriptionStatus","stripeStatus","trialEndDateRaw","planIncludes","cancelSubscription","cancelSubscriptionStripePortal","endTrial","switchPlan","plan","resumeSubscription","addSubscriptionAddon","addon","removeSubscriptionAddon","trialEndsMessage","rawDate","trialDate","trialDateFmt","stripeEndDate","ends_at","inGracePeriod","status","inTrial","isTrialing","trialEndDate","currentStripeSubscriptionObjectRenewalDate","currentStripeSubscriptionObjectPlanAmount","currentStripeSubscriptionObjectPlanInterval","includedInSubscription","planFeatures","planIncludesApi","trialDaysLeft","daysLeft","trialDaysLeftPercent","trialDaysLeftMessage","trialDaysClass","currentPlanDetails","currentPlanBullets","seatLimitReached","seatLimitReachedMessage","listingLimitReachedMessage","listingLimitReached","planSupportedFeatureCounts","TemplatesTableList","_sfc_main$19","documentsTab","learnMoreDialog","dataTableOptionStatus","orderDocumentsHeaders","envelopesFilter","nameChangeErrors","ContractsTable","invoice","invoiceStatus","total","templatesPending","firstTemplate","_component_v_tabs","_component_v_tab","_component_v_window","_component_v_window_item","expanded","_component_v_fade_transition","_component_the_help_link","planIncludesESign","_component_TemplatesTableList","_component_ContractsTable","_component_v_data_table","orderDocuments","_component_TheHelpLink","thePhotosUploading","filesForS3","templateDocs","documentsUploadedSuccess","rejectedReasons","uploadUrls","getUploadUrl","file","extension","uploadUrl","uploadS3Init","filteredFiles","_","uploadS3","createAwsAxiosInstance","headers","filesPaths","awsAxios","uploadFileToS3","filePath","onDrop","acceptedFiles","rejectReasons","reason","uploadDocument","uploadUrlsClean","formData","getRootProps","getInputProps","isDragActive","useDropzone","useOrders","orderLoading","theNewOrder","orderDialogs","orderDocument","currentWorkingPricingWizardOrderLine","orderAvailability","updateOrderLine","deleteOrderDocument","setOrderDocument","checkOrderAvailability","orderUuid","getOrderItemModel","getOrderDocuments","getOrderDocument","updateOrderDocument","getNewOrder","addOrderLine","getOrder","updateNewOrder","setOrder","removeOrderLine","lineId","orderLines","open","lineItem","documentDate","addEditFooter","editDateDialog","editDocumentNumber","editUser","editReference","editorjs","footer","documentDataCopy","customerAddress","orderReference","documentNumber","updateFooter","outputData","documentTitle","documentBookingId","documentStatus","documentPaid","documentType","companyAddress","newValue","EditorJS","Header","document","convertBlocksToHtml","block","getTaxCategoryParentName","line","updateCustomerAddress","updateOrderDocumentDate","updateOrderDocumentNumber","updateOrderReference","document_uuid","deleteOrderDocumentConfirmDialog","orderBookingId","documentCanBeFinalized","finalizeDocumentInit","deleteOrderDocumentInit","deleteOrderDocumentCommit","printElem","downloadOrderDocumentInit","documentRoutes","Home","SingleDocument","navRightActions","NewDocument","DocumentsDashboardLayoutV2","AddFields","loadBaseDashboard","loadBasePerks","perksRoutes","notifications","DashboardLayout","BaseListings","NewListings","SingleListing","ListingCalendar","ListingAnalytics","AddNewListingNavAction","SaveListingNavAction","AddListingSaveNavAction","listingRoutes","_to","connectionsRoutes","BaseOrders","OrderNewV2","OrderSingleV2","TheRightSidebar","AddNewOrder","NewOrderOptions","SingleOrderOptions","ordersRoutes","BaseCustomers","CustomerSingle","CustomerRightSidebar","NewCustomer","ImportCustomers","AddNewCustomer","customerRoutes","_sfc_main$13","order","sections","orderedSections","dragula","source","handle","sectionId","blockId","disable","section","blocks","blockOrder","orderedBlocks","_hoisted_26","j","_sfc_main$12","selector","action","iframe","_sfc_render","LeftSideNav","ThemeTopNav","ThemeMainArea","_component_ThemeTopNav","_component_LeftSideNav","_component_ThemeMainArea","themeRoutes","ThemeBase","_sfc_main$10","_resolveComponent","Company","SingleTenantProduct2","TenantStoreBase2","companyRoutes","companyRoutes2","BaseCompanyIFrame","EsignRecipient","BaseESigner","eSignerRoutes","eSignerCompleteRoutes","superAdminRoutes","Quickstart","HomeDashboard","dashboardChildrenRoutes","dashboardRoutes","BaseAnalytics","ConversionAnalytics","VehicleAnalytics","analyticsRoutes","loadPay","payRoutes","BaseCompany","StripeRedirect","BraintreeRedirect","SquareRedirect","redirectRoutes","moduleRoutes","custodian","tripExtrasRoutes","notificationRoutes","commissionRoutes","constantRoutes","asyncRoutes","companyStore","SUPPORT_LOCALES","DEFAULT_LOCALE","locale","i18n","createI18n","enUS","es","zncn","str","loadMessages","importedMessages","Trans","newLocale","nextTick","persistedLocale","userPersistedLocale","userPreferredLocale","guessedLocale","Tr","checkAuth","userLoaded","auth","isLoggedIn","addDynamicRoutes","globalMiddleware","createRouter","createWebHistory","context","middleware","getMiddleware","middlewareNames","matchedRoutes","handleCompanyConnections","connection","authModule","types.SAVE_TOKEN","types.SAVE_REGISTER_ID","subscriptionMaster","extraListingsAddon","allPermissions","fwPublicStripeKey","counts","rootGetters","types.SET_AUTH_LOADING","email","Sentry.setUser","types.FETCH_USER_FAILURE","types.UPDATE_USER","types.LOGOUT","types.SET_TOKEN","types.SET_USER","types.SET_ROLES","types.SET_PERMISSIONS","types.SET_USER_NOTIFICATIONS","types.SET_USER_API_TOKENS","tokens","COMPANY_UUID_KEY","StorageService","types.SET_AUTOMATION_LOADING","types.SET_MESSAGE_TEMPLATES","messageTemplates","types.SET_CURRENT_AUTOMATION_EVENT","cloneDeep","types.SET_AUTOMATION_EVENTS","events","uniqBy","types.SET_CURRENT_EVENT_LOGS","logs","perPage","uuids","automations","types.SET_AXLE_LOADING","types.SET_AXLE","axle","types.SET_AXLE_IGNITIONS","ignitions","types.SET_INCOMING_AXLE_IGNITION","types.MERGE_AXLE_IGNITION","ignition","types.SET_BARCODE_LOADING","types.SET_BARCODE","barcode","duration","prepareBookingData","sortDesc","itemsPerPage","includeAbandoned","onlyAbandoned","withOrderProperties","withRenterProperties","searchTerm","searchTopic","exporting","providers","statuses","filter","sortBy","types.SET_BOOKING_LOADING","types.SET_BOOKING_DIALOG","types.CLEAR_BOOKING_FORM_ERRORS","form_field","types.SET_BOOKING_FORM_ERROR","types.SET_LISTING_ID","l_id","types.SET_STATUS_FILTER_ITEMS","types.SET_STATUS_FILTER_ITEMS_UPCOMING","types.SET_STATUS_FILTER_TEMP_ITEMS","types.SET_ACTIVITY_FILTER_ITEMS","activity","types.SET_SOURCE_FILTER_ITEMS","sources","types.SET_PAYMENT_STATUS_FILTER_ITEMS","types.SET_BOOKING_CART_ID","cartId","types.SET_CURRENT_WORKING_BOOKING","booking","types.SET_CURRENT_WORKING_BOOKING_STATUS","types.SET_CURRENT_WORKING_BOOKING_ATTRIBUTE","types.SET_BOOKING_NOT_FOUND","types.SET_BOOKINGS","bookings","types.SET_BOOKINGS_META","types.SET_ABANDONED_BOOKINGS","types.SET_PRIORITY_BOOKINGS","types.SET_FLEET_RESOURCES","types.SET_BOOKING_AUTOMATION_EVENTS","types.SET_TOTAL_BOOKINGS","types.SET_BOOKING_PAYMENTS","payments","types.MERGE_BOOKING_LINE_ITEM","types.UPDATE_BOOKING_LINE_ITEM","lineIndex","l","types.REMOVE_BOOKING_LINE_ITEM","remove","types.SET_FILTERED_MAKES","make","types.SET_CALENDAR_ATTRIBUTES","types.PUSH_CALENDAR_ATTRIBUTES","attribute","types.RESET_UNAVAILABLE_DATES","types.SET_UNAVAILABLE_DATES","createCalendarAttribute","barColor","days","startTimeBuffer","endTimeBuffer","middleDur","types.SET_BOOKING_LISTING","newPricing","types.SET_STORED_TURO_BOOKINGS","types.SET_CUSTOMER_BOOKING","types.SET_REMEMBER_CUSTOMER","types.RESET_BOOKING","b_id","qString","lastEnvelope","checkoutSession","_e","extension_uuid","types.SET_BOUNCIE_INIT","init","types.SET_BOUNCIE_LOADING","types.SET_BOUNCIE_CONNECTIONS","bouncie","vehicle","connIndex","c","types.SET_BRAINTREE_LOADING","braintree$1","PARTNER_UUID","CommissionPartnerService","types.SET_CART_LOADING","types.SET_CART_L_ID","types.SET_CART","cart","partnerUuid","subdomain","types.SET_CHECKOUT_LOADING","types.CLEAR_CHECKOUT_FORM_ERRORS","types.SET_CHECKOUT_DISCOUNT","coupon","types.RESET_CHECKOUT_DISCOUNT","types.SET_ORDER_DELIVERY","location","types.SET_CHECKOUT_INITIALIZED","initialized","types.SET_CHECKOUT_STRIPE","stripe","types.SET_CHECKOUT_AVAILABILITY","availability","types.SET_RESERVATION_REQUEST_LISTING_ID","types.SET_RESERVATION_REQUEST_DATES","types.SET_RESERVATION_REQUEST_DURATIONS","types.SET_RESERVATION_REQUEST_EXTRAS","extras","types.SET_RESERVATION_REQUEST_EXTRAS_V2","types.SET_RESERVATION_REQUEST_REQUIRED_EXTRAS_V2","types.SET_RESERVATION_REQUEST_REQUIRED_EXTRAS_V2_AT_INDEX","set","types.SET_RESERVATION_REQUEST_PRICING","dataKeys","costKeys","types.SET_CHECKOUT_ORDER_DATES","types.SET_CHECKOUT_ORDER_CUSTOMER","customers","types.SET_CHECKOUT_ORDER_CUSTOMER_BY_INDEX","types.SET_CHECKOUT_ORDER_CUSTOMER_AGREE_TOS","types.SET_CHECKOUT_ORDER_CUSTOM_FIELDS","types.SET_CHECKOUT_ORDER_DELIVERY_ADDRESS","address","types.SET_CHECKOUT_RENTER_AUTHENTICATED","types.SET_CHECKOUT_ORDER_REQUIRED_EXTRAS","map","paymentStrategy","paymentProvider","usesStripe","usesSquare","hasBalance","paymentIntentId","checkout","types.SET_COMMISSION_PARTNER_LOADING","types.SET_COMMISSION_PARTNERS","partners","types.SET_COMMISSION_PARTNER","partner","types.SET_COMMISSIONS","commissions","types.CLEAR_COMMISSION_PARTNER_COUPON_FORM_ERRORS","partner_uuid","commissionPartnerModule","defaultMetaValues","types.SET_COMPANY_LOADING","types.SET_COMPANY","types.SET_COMPANY_PHONE","types.SET_COMPANY_META","types.SET_COMPANY_SETTINGS","types.SET_COUNTS","types.SET_COMPANY_CURRENCY","types.SET_COMPANY_DEFAULT_META","types.SET_POSSIBLE_PERMISSIONS","types.SET_COMPANY_BOOKINGS","types.SET_COMPANY_EMPLOYEES","employees","types.SET_DELIVERY_LOCATIONS","locations","types.RESET_EMPLOYEE","types.SET_COMPANY_NOTIFICATIONS","uniqueIds","types.SET_EMPLOYEE_PERMISSIONS","types.SET_EMPLOYEE_ROLES","types.SET_COMPANY_EMPLOYEE","types.SET_OPERATING_RULES","types.SET_FEEDBACK_REVIEWS","reviews","types.SET_COMPANY_FORM_ERROR","types.SET_COMPANY_META_FORM_ERROR","types.CLEAR_COMPANY_META_FORM_ERRORS","companyName","cancellation","terms","inviteToken","returnData","deliveryLocation","review","companyModule","types.SET_COUPON_LOADING","types.SET_COUPONS","coupons","types.SET_COUPON_REDEMPTIONS","redemptions","types.UPDATE_COUPON","updatedCoupons","types.CLEAR_COUPON_FORM_ERRORS","types.SET_COUPON_FORM_ERROR","types.SET_COUPON_FORM_BUSY","busy","couponUuid","couponModule","types.SET_CUSTODIAN_LOADING","types.SET_CUSTODIANS","custodians","types.SET_CUSTODIAN_INVITE","invite","types.SET_CUSTODIAN_LISTINGS","types.SET_CUSTODIAN_BOOKINGS","custodian_id","custodian_uuid","types.SET_CUSTOM_FIELDS_LOADING","types.SET_CUSTOM_FIELDS","types.SET_CUSTOM_FIELDS_FORM_BUSY","customFields","types.SET_DEFAULT_PROPERTIES","defaultProperty","types.CLEAR_DEFAULT_PROPERTIES_FORM","types.SET_DEFAULT_PROPERTIES_FORM_BUSY","types.SET_DEFAULT_PROPERTIES_FORM_ERRORS","types.SET_TEMPLATES_LOADING","types.SET_ONE_DOCUMENT","types.SET_ALL_DOCUMENTS","documents","types.RESET_TEMPLATE","types.SET_ONE_TEMPLATE","types.SET_ALL_TEMPLATES","templates","document$1","types.SET_EMAILS_LOADING","types.SET_EMAILS","emails","types.SET_EMAIL_HISTORY","types.SET_EMAIL_TEMPLATES","types.SET_EMAIL_TEMPLATE","types.SET_EMAIL_FORM_ERROR","types.CLEAR_EMAIL_FORM_ERRORS","_f","emailTemplate","types.SET_EMAIL_DOMAIN_SETTINGS","domains","domain","emailDomainSettings","types.SET_ENVELOPE_LOADING","types.SET_ESIGN_SESSION_DATA","types.SET_ALL_ENVELOPES","types.SET_ENVELOPE","types.SET_ENVELOPE_SIGNATURE","signature","types.SET_ENVELOPE_CUSTOMER","types.UPDATE_ENVELOPE_FIELD","fieldIndex","types.SET_ALL_FIELDS","types.SET_ENVELOPE_DIALOG","types.SET_ENVELOPE_QUERY","recipientId","recipientKey","sample","queryParams","requestPath","customerData","queryObject","types.SET_FILES_LOADING","types.SET_FILES","files","types.SET_FILES_PAGINATION","pagination","newPagination","types.MERGE_FILES","uniqueFiles","mergedFiles","isUnique","types.SET_COMPANY_BRANCHES_LOADING","types.SET_COMPANY_BRANCHES","branches","types.SET_COMPANY_BRANCH","branch","types.SET_ACTION_ITEMS","items","types.SET_ACTION_ITEM","types.ACTION_ITEM_CREATED","types.ACTION_ITEM_DELETED","types.SET_FLEET_FORM_ERROR","types.CLEAR_FLEET_FORM_ERRORS","actionItem","fleet","types.SET_GETAROUND_INIT","types.SET_GETAROUND_LOADING","types.SET_GETAROUND_CONNECTIONS","types.SET_GETAROUND_VEHICLES","vehicles","types.SET_GETAROUND_TRIPS","trips","types.SET_GETAROUND_RESERVATION","reservation","types.SET_GETAROUND_RESERVATION_RECEIPT","receipt","types.SET_ALL_IMPORTED_GETAROUND_VEHICLES","GetaroundState","gaid","ga","reservation_id","getaround","types.SET_HQRENTALS_LOADING","types.SET_HQRENTALS_CONNECTIONS","types.SET_HQRENTALS_LISTINGS","types.SET_HQRENTALS_BOOKINGS","types.SET_HQRENTALS_CONTACTS","contacts","credentials","provider","provider_uuid","hqRentals","PaymentsModule","types.SET_PAYMENTS_LOADING","types.SET_PAYMENT","payment","types.SET_PAYMENTS","types.SET_PAYMENT_METHODS","payment_methods","types.SET_CURRENT_WORKING_PAYMENT_ITEM","types.SET_CUSTOM_PAYMENT_METHODS","methods","types.SET_STRIPE_INTENT","types.RESET_NEW_PAYMENT","payment_id","paymentIntent","capture","refund","state2","defaultSettings","showSettings","tagsView","fixedHeader","sidebarLogo","types.SET_SETTINGS_LOADING","types.SET_NOTIFICATION_SETTINGS","downloadUrl","link","types.SET_NOTES_LOADING","types.SET_STORE_THEMES","types.SET_STORE_THEME_DATA","theme","locales","types.SET_LOCALE","lang","defaultVehicle","setFilterValues","filterKey","dataKey","types.SET_LISTING_LOADING","types.SET_LISTING_SNACK","snack","types.SET_LISTING_DIALOG","types.SET_LISTING_FILTER_AVAILABLE_FILTERS","types.SET_LISTING_FILTER_SELECTED_FILTERS","types.TOGGLE_LISTING_FILTER","types.CLEAR_LISTING_FILTER","types.SET_LISTING","types.SET_LISTING_INIT","isInit","types.SET_ALL_LISTINGS","types.SET_BOOKABLE_TIMES","types.SET_CUSTODIAL_LISTING","types.SET_FLEET_RESOURCE_LISTINGS","types.SET_FLEET_RESOURCE_LISTINGS_DATA","types.SET_VEHICLE_VIN","vin","types.SET_CURRENT_LISTING_INCIDENTS","incidents","types.SET_LISTING_FILTER_OPTIONS","filterOptions","types.SET_VEHICLE_YEAR","types.SET_LISTING_PRICE_TYPE","types.SET_LISTING_PRICE_PERIOD","types.SET_LISTING_PRICE_STRUCTURE_ID","types.SET_ALL_AVAILABLE_FEATURES","types.SET_VEHICLE_EXTRAS","types.SET_VEHICLE_FEATURES","feature","types.SET_VEHICLE_MAKE","types.SET_VEHICLE_MODEL","types.SET_VEHICLE_COLOR","color","types.SET_VEHICLE_SEATS","seats","types.SET_VEHICLE_DOORS","doors","types.SET_VEHICLE_PLATE","plate","types.SET_VEHICLE_CLASS","types.TOGGLE_PAUSE_CURRENT_LISTING","types.SET_CURRENT_LISTING_CHECKOUT_MODE","mode","types.SET_CURRENT_DECODED_VIN","vehicleData","types.SET_EXISTING_LISTING_DATA","types.SET_CURRENT_NEW_LISTING","types.SET_CURRENT_LISTING","allListingIndex","types.SET_CURRENT_LISTING_BOOKINGS","types.SET_CURRENT_LISTING_MILE_ALLOWANCE","types.SET_CURRENT_LISTING_DISCOUNTABLE","discountable","types.SET_CURRENT_LISTING_DURATION_DISCOUNT","discount","types.SET_CURRENT_TRIP_EXTRA","types.SET_ALL_EXTRAS","types.SET_LISTING_PRICE","types.SET_LISTING_VEHICLE","types.SET_LISTING_PRICE_TAXABLE","taxable","types.SET_LISTING_PRICE_TAX_CATEGORY","tax_category","types.SET_LISTING_SEC_DEP","types.SET_LISTING_SEC_DEP_CREDIT","types.SET_LISTING_SEC_DEP_DEBIT","types.SET_LISTING_MILES_OVERAGE","types.SET_CURRENT_LISTING_IMAGES","types.SET_LISTING_AVAILABILITY_MESSAGE","types.SET_LISTING_DAILY_PRICES","prices","types.CLEAR_LISTING_FORM_ERRORS","types.SET_LISTING_FORM_ERRORS","types.RESET_CURRENT_LISTING","refresh","statusCode","period","turo_uuid","bouncie_uuid","image","startTimes","timeF","ampm","lefZero","listingModule","types.SET_LULA_LOADING","types.SET_LULA_CONNECTIONS","types.SET_LULA_VEHICLES","lula","notable_type","notable_id","note","notes","types.SET_OUTDOORSY_LOADING","types.SET_OUTDOORSY_CONNECTIONS","types.SET_OUTDOORSY_LISTINGS","types.SET_OUTDOORSY_BOOKINGS","outdoorsy","outdoorsy_uuid","canAccess","hasRole","hasPermission","filterAsyncRoutes","routes","res","tmp","types.SET_ROUTES","accessedRoutes","types.SET_PRICING_LOADING","types.SET_PRICING_RULES","types.SET_PRICING_STRUCTURES","types.SET_PRICING_STRUCTURE","types.RESET_CURRENT_WORKING_PRICING_STRUCTURE","ruleData","pricing","types.SET_PROVIDERS_LOADING","types.SET_PAYMENT_PROVIDERS","paymentProfile","types.SET_RENTERS_LOADING","types.SET_RENTERS","types.SET_ALL_RENTERS","renters","types.SET_RENTERS_DIALOG","types.SET_RENTER","types.ADD_RENTER","renterIndex","types.RESET_RENTER","types.SET_RENTERS_CREDIT_CARDS","cards","types.SET_PAYMENT_SOURCES","types.SET_BOOKING_PAYMENT","charge","types.SET_PHONE_NUMBER","types.SET_SEARCHED_RENTERS","types.CLEAR_RENTERS_FORM_ERROR","types.SET_STRIPE_CUSTOMER","stripe_customer","types.SET_RENTER_NOTIFICATIONS","types.SET_CUSTOMER_QUERY","r_id","paymentMethod","types.SET_SQUARE_LOADING","squareId","square","subscriptionNameMap","subscriptionName","subEndDate","types.SET_SUBSCRIPTION_LOADING","types.SET_ENFORCE_SUBSCRIPTION","enforce","types.SET_SUBSCRIPTION_STEP","step","types.SET_SUBSCRIPTION_PLAN_AND_INTERVAL","updatedSubscription","types.SET_PLAN_SELECTION","selection","types.SET_SUBSCRIPTION","types.UPDATE_NEW_SUBSCRIPTION","newSubscription","types.SET_SUBSCRIPTION_MASTER","types.SET_EXTRA_LISTINGS_ADDON","types.CLEAR_SUBSCRIPTION_FORM_ERRORS","types.SET_SUBSCRIPTION_FORM_ERROR","sub","subscriptions","types.SET_SU_LOADING","types.SET_ALL_USERS","users","types.SET_ALL_COMPANIES","companies","types.SET_CURRENT_WORKING_COMPANY","types.SET_CURRENT_WORKING_USER","types.SET_ALL_ROLES","types.SET_ALL_PERMISSIONS","types.SET_ALL_MEDIA_DIRECTORIES","mediaDirectories","types.SET_ALL_MEDIA_IN_DIRECTORY","media","types.SET_MEDIA_BASE_PATH","path","types.SET_ALL_LISTING_IMAGES","types.SET_ALL_SERVER_DETAILS","details","types.SET_SA_FEATURE_WAITLIST","waitlist","types.SET_SA_FEATURES_STATUS","types.SET_SA_CACHE","cache","types.SET_CURRENT_WORKING_SU_BASIC_STATS","stats","getFleetwirePartner","urlParams","directory","string","superAdmin","view","tag","types.SET_TAXES_LOADING","types.SET_TAX_CATEGORIES","tax","types.SET_CURRENT_WORKING_TAX_CATEGORY","types.SET_TAX_CATEGORY_FORM_ERRORS","types.CLEAR_TAX_CATEGORY_FORM_ERRORS","types.RESET_CURRENT_WORKING_TAX_CATEGORY","taxCategory","taxes","types.SET_MAINTENANCE_LOADING","types.SET_CURRENT_VEHICLE_MAINTENANCE","maintenance","types.SET_CURRENT_VEHICLE_RECALLS","recalls","types.RESET_CURRENT_WORKING_MAINTENANCE_ITEM","maintenanceItem","types.SET_ORDERS_LOADING","types.SET_ORDER","types.UPDATE_ORDER_LINE","lines","types.SET_ORDER_DOCUMENTS","types.SET_ORDER_DOCUMENT","types.SET_ORDER_DOCUMENT_DOWNLOAD_STATUS","types.SET_ORDER_AVAILABILITY","types.SET_OPEN_PRICING_WIZARD_DIALOG","types.SET_STRIPE_LOADING","types.SET_CURRENT_WORKING_INVOICE","types.SET_CURRENT_WORKING_PAYMENT_INTENT","intent","types.SET_BILLING_PORTAL_SESSION","types.SET_STRIPE_PRICE_DATA","types.SET_STRIPE_IDENTITIES","types.SET_SUBSCRIPTION_DETAILS","types.SET_STRIPE_ACCOUNT","types.SET_CURRENT_STRIPE_CHARGE","types.SET_INVOICES","invoices","invoice_id","charge_id","intent_id","payment_method","vsId","types.SET_FIELD_CURRENT_SIGNER","types.SET_TOOLS_ACTIVE","active","types.SET_CANVAS_ACTIVE","types.SET_RIGHT_SIDEBAR_OPEN","types.SET_RIGHT_SIDEBAR_MODE","types.SET_RIGHT_SIDEBAR_TITLE","types.SET_CURRENT_WORKING_TOOL","types.SET_SELECTED_FIELD","types.SET_SELECTED_FIELD_V2","types.REMOVE_FIELD","types.REMOVE_ALL_FIELDS","types.SET_SELECTED_FIELD_INDEX_V2","types.UPDATE_DOCUMENT_TEMPLATE_DATA","types.ADD_TO_DOCUMENT_TEMPLATE_DATA","types.SET_EXISTING_DATA","types.SET_NEW_DATA","types.RESET_TEMPLATE_DATA","types.SET_DOCUMENT_IMAGES","types.SET_TESLA_INIT","types.CLEAR_TESLA_FORM_ERRORS","types.SET_TESLA_LOADING","types.SET_TESLA_CREDENTIALS","types.SET_TESLA_CONNECTIONS","types.UPDATE_TESLA_CONNECTION","tesla","types.SET_TESLA_VEHICLES","types.SET_CURRENT_WORKING_TESLA_VEHICLE","types.SET_CURRENT_WORKING_TESLA_VEHICLE_DRIVERS","drivers","types.SET_CURRENT_WORKING_TESLA_VEHICLE_HISTORY","chargingHistory","types.SET_CURRENT_WORKING_TESLA_VEHICLE_HISTORY_PAGINATE","paginate","types.SET_TESLA_VEHICLE_INVITATIONS","invites","types.SET_TESLA_CHARGING_INVOICES","types.SET_TESLA_INVOICES","types.SET_TESLA_INVOICES_META","types.SET_TESLA_INVOICE_PDF","pdf","types.SET_CURRENT_WORKING_TESLA_ASLEEP","asleep","types.SET_CURRENT_WORKING_TESLA_VEHICLE_APP_ACCESS","types.SET_CURRENT_WORKING_TESLA_VEHICLE_STATE","vehicleState","types.SET_CURRENT_WORKING_TESLA_VEHICLE_DATA","vehicle_uuids","tesla_uuid","types.SET_TOLLS_LOADING","types.SET_TOLL_AGENCIES","tolls","types.SET_TOLL_ACCOUNTS","types.SET_TOLL_AGENCIES_WISHLIST","types.SET_TOLL_TRANSACTIONS","transactions","types.SET_TOLL_TRANSPONDERS","transponders","tollAccount","transaction","tripExtrasModule","types.SET_EXTRAS_LOADING","types.SET_EXTRAS","types.SET_TRIP_EXTRA_SETTING_DIALOG","types.SET_REQUIRED_EXTRA_ADD_EDIT_DIALOG","types.SET_REQUIRED_EXTRA_ADD_EDIT_DATA","types.SET_REGULAR_EXTRA_DATA","types.SET_REGULAR_EXTRA_DIALOG","types.SET_EXTRA_LISTINGS_DIALOG","extra","types.SET_INIT","types.SET_TURO_LOADING","types.SET_VEHICLES","types.SET_ALL_TURO_VEHICLES","types.CLEAR_ALL_TURO_VEHICLES","types.SET_TURO_EMAILS","types.SET_TURO_EMAILS_PAGINATION","types.RESET_VEHICLES","types.SET_TURO_EARNINGS","earnings","types.SET_TURO_FEEDBACK","types.SET_TURO_FEEDBACK_PAGE","types.SET_TURO_FEEDBACK_TOTAL","types.SET_TURO_FEEDBACK_NEXT_PAGE","types.SET_TURO_FEEDBACK_PER_PAGE","per_page","types.SET_TURO_FEEDBACK_LAST_PAGE","last_page","types.SET_TRIPS","trip","types.SET_TRIP_SINGLE","types.SET_TRIP_SINGLE_MESSAGES","types.SET_TRIP_SINGLE_MESSAGES_STORED","types.SET_TRIP_SINGLE_IMAGES","types.SET_TURO_MESSAGE_SENDING","sending","types.SET_TURO_ALL_VEHICLES","types.SET_ALL_IMPORTED_TURO_VEHICLES","types.SET_TRIP_TURO_GO","types.SET_TURO_CONNECTIONS","types.SET_TURO_REIMBURSEMENT_DETAILS","types.RESET_TURO_CREDS","types.SET_TURO_CAPTCHA_ID","types.SET_TURO_CAPTCHA_TESTING","testing","types.SET_TRIP_HISTORY","history","types.SET_TRIP_PENDING_REQUESTS","requests","types.SET_ACTIVITY_FEED","types.SET_TURO_CHANGE_REQUEST_SETTINGS","types.SET_ALL_TURO_MESSAGES","types.SET_ALL_TURO_MESSAGES_CURRENT_PAGINATE","types.SET_ALL_TURO_MESSAGES_TOTAL_PAGES","pages","TuroState","turo","pending","feedback","turo_uuids","uniq","accounts","vehicle_id","vehicle_uuid","tripId","types.SET_TURO_PRICING_LOADING","types.SET_TURO_PRICING_VEHICLES","listed","types.SET_TURO_VEHICLE_DAILY_PRICING","vehicleId","vehicleIndex","slice","flatMap","turoPricing","types.SET_TURO_RESEARCH_LOADING","types.SET_TURO_ALL_VEHICLE_MAKES","makes","types.SET_TURO_ALL_DELIVERY_LOCATIONS","types.SET_TURO_RESEARCH_SEARCH_LIST","list","turoResearch","types.SET_TWILIO_LOADING","types.SET_VERIFY_CODE","stripe_id","twilio","types.SET_TWISTED_ROAD_LOADING","types.SET_TWISTED_ROAD_CONNECTIONS","types.SET_TWISTED_ROAD_VEHICLES","account","twistedRoad","types.SET_VEHICLES_LOADING","types.SET_VEHICLE_MAKES","types.SET_VEHICLE_MODELS","models","types.SET_VEHICLE_CLASS_CREATED","types.SET_VEHICLE_CLASSES","classes","vehicleClass","types.SET_VEHICLE_FORM_ERRORS","types.CLEAR_VEHICLE_FORM_ERRORS","v_id","types.SET_WHATS_NEW_LOADING","types.SET_WHATS_NEW_COUNT","types.SET_SHOW_WHATS_NEW_SIDEBAR","isShown","types.SET_WHATS_NEW_IMAGES","types.SET_WHATS_NEW","whatsNewPaginateObject","types.MERGE_WHATS_NEW","whatsNew","wnIndex","allPages","types.SET_WEBHOOKS_LOADING","types.SET_WEBHOOK_ENDPOINTS","webhookEndpoints","types.SET_WEBHOOK_ENDPOINT","webhookEndpoint","types.SET_WEBHOOKS_CONVERSATIONS","conversations","types.SET_WEBHOOK_ENDPOINT_SECRET","secret","webhook_uuid","webhook","conversation","tenantCheckoutModule","types.SET_TENANT_CHECKOUT_DATES","types.SET_TENANT_CHECKOUT_LOCATION","types.SET_TENANT_CHECKOUT_DELIVERY_ADDRESS_FORM_SHOW","types.SET_TENANT_CHECKOUT_STRIPE_PAYMENT_INTENT","types.SET_TENANT_CHECKOUT_DIALOG","types.SET_TENANT_CHECKOUT_DURATIONS","types.SET_TENANT_CHECKOUT_BOOKING_ID","types.SET_TENANT_CHECKOUT_CUSTOM_ORDER_FIELDS","types.SET_TENANT_CHECKOUT_CUSTOMER_TOS_AGREE","types.SET_TENANT_CHECKOUT_COSTS","types.SET_TENANT_CHECKOUT_LISTING_ID","types.SET_TENANT_CHECKOUT_CUSTOMER_BY_INDEX","types.SET_TENANT_CHECKOUT_CUSTOMERS","types.SET_TENANT_CHECKOUT_EXTRAS_V2","types.SET_TENANT_CHECKOUT_REQUIRED_EXTRAS_V2","types.SET_TENANT_CHECKOUT_REQUIRED_EXTRAS","types.SET_TENANT_CHECKOUT_ORDER_DELIVERY_ADDRESS","types.SET_TENANT_CHECKOUT_ORDER_DISTANCE_ALLOWANCE","types.RESET_TENANT_CHECKOUT_DELIVERY_RESULTS","types.SET_TENANT_CHECKOUT_DELIVERY_RESULTS","types.SET_TENANT_CHECKOUT_DISCOUNT","types.RESET_TENANT_CHECKOUT_DISCOUNT","types.SET_TENANT_CHECKOUT_FORM_ERRORS","types.RESET_TENANT_CHECKOUT_FORM_ERRORS","TenantCheckoutState","notingDueToday","sessionId","types.SET_TAGS_LOADING","types.SET_TAGS","tags","forType","tagsModule","createStore","app","braintree","commissionPartners","tenantCheckout","tripExtras","TheDefaultLayout","layoutMap","layoutComponent","layoutName","resolvedLayout","vuetify","createVuetify","initGtag","VueGtag","initSentry","Sentry.init","hint","Sentry.vueIntegration","Sentry.browserTracingIntegration","Sentry.replayIntegration","Sentry.replayCanvasIntegration","request","registerLayouts","layouts","layoutImporter","component","componentName","extractFileName","notivue","createNotivue","createApp","App","VueTippy","VCalendar","VueDragula","checkRole","requiredRoles","useAppFeatures","appFeatures","featureWaitlist","canFilterByPaymentStatus","canUseSquareIntegration","canUseBraintreeIntegration","hasAxleIntegrationFeature","hasPricingTemplateFeature","hasStoreThemesFeature","hasRenterBlockFeature","hasWaitlistRequest","addFeatureWaitlist","getFeatureWaitlist","CompanyInformation","useBranch","mapboxScriptIsReady","ACCESS_TOKEN","props","__props","dense","singleLineAddress","toRefs","expandForm","address2","setupMapBox","autofillCollection","minimap","lnglat","geometry","locationData","singleLine","useTaxAndFee","taxCategories","taxForm","taxCategoryLoading","VEHICLE_STATUSES","mapToTitleCodeArray","array","useListing","initialListing","isLoading","isLoaded","newListing","initializeWithCurrentListing","currentListing","updateListing","updates","errorData","updateField","resetListing","availableVehicleStatuses","listingInit","listingLoading","listingForm","originalListing","currentListingBookings","dailyPricing","listingSnacks","allVehicleFeatures","allListingsInit","fleetResourceListings","visibleListings","currentListingDailyPricing","listingExtras","listingDialogs","setListingDialog","allListingsAreArchived","setUnavailablePeriod","currentListingVehicleOdometer","currentListingVehicleStatus","currentListingVehicleId","resetCurrentListing","fetchDailyPrices","fetchCompanySingleListingExtras","updateVehicleDetails","getVehicleFeatures","fetchListings","addListing","setCurrentNewListing","allowsSecondaryDriver","listingLevel","companyLevel","saveListing","fetchCompanySingleListings","pauseListing","deleteListingImage","imageId","deleteListing","archiveListing","updateListingImageOrder","fetchFleetResourcesListings","getVehicleIncidents","resetAndReImportCarShareImages","fetchAgencySingleListingBookings","getListingPublicLink","listingVehicleStatus","theStatus","listingNameDisplay","characterLimit","currentListingAgeRequirements","currentListingName","currentListingVehicleUnitId","currentListingDescription","currentListingVehicleVin","currentListingVehicleYear","currentVehicleFeatures","currentListingVehicleMake","currentListingVehicleModel","currentListingVehicleColor","currentListingVehicleNumberOfSeats","currentListingVehicleNumberOfDoors","currentListingVehiclePlate","currentListingVehicleClass","currentListingVehicleClassName","listingVehicleHasRemoteCapability","listingVehicleHasConnectedBouncie","listingVehicleImages","listingVehicleImage","placeHolder","singleListingImage","listingVehicleDoorsDisplay","listingVehicleSeatsDisplay","listingVehicleYearMakeModelDisplay","listingVehicleYearDisplay","listingVehicleMakeDisplay","listingVehicleModelDisplay","listingDescriptionDisplay","listingClass","listingClassNameDisplay","listingPeriodDisplay","listingPriceDisplay","listingVehicleDetailsDisplay","currentListingChanges","originalClone","currentClone","listingChanges","differences","propertiesToDelete","prop","matchAListing","providerAutoMatchedBy","theMatchedListing","unitId","matchByVin","matchByUnitId","workingVin","listingVehicleVINDisplay","workingUnitId","listingFilter","itemTitle","queryText","searchText","raw","k","last4","useDefaultMeta","keys","reactive","getValue","config","fallback","initialize","fetchSession","updateDefaultMeta","displayPriceAdjustmentValue","validators","adjustmentRules","handlePriceAdjustmentUpdate","storedValue","newMode","oldMode","currentValue","newAmountInCents","newPercent","appCurrencies","currentLocalCurrency","currencyExample","example","currencyDisplay","currencyPosition","newCompany","useCoupons","couponLoading","couponForm","couponRedemptions","useCouponForm","couponClone","currentCouponListings","currentCouponUsersOn","currentCouponUsers","couponLimit","couponFormValid","currentCouponAmount","couponRules","UpgradePlanFeatureDialog2","CustomerPopoverMenu","FeatureTitle","fetchCoupons","createCoupon","updateCoupon","deleteCoupon","getCouponRedemptions","clearCoupons","resetForm","updateListings","updateUserLimit","couponDialog","search","couponTab","couponDialogMode","couponDialogTitle","confirmCouponDelete","selectedCoupons","importCouponsDialog","listingsClone","confirmMultiCouponToggle","orderHeaders","couponsFiltered","currentCouponReasonEllipsis","couponsExist","wantsAllListings","wantsSomeListings","classObject","deleteCouponCommit","createCouponCommit","updateCouponCommit","addCoupon","editCode","hasNoListings","hasAllListings","importCoupons","currentCouponListingsUpdate","currentCouponUserUpdate","toggle","removeListing","formatBookingDate","bookingDate","tab","ListingAutocompleteDropdown","_component_v_chip","_component_v_menu","_mergeProps","_component_v_list","_component_v_list_item","_component_v_list_item_title","_component_v_radio_group","_component_v_radio","_component_v_checkbox","_component_v_autocomplete","_component_ListingAutocompleteDropdown","_sfc_main$T","PricingRuleDialog","_component_v_card_subtitle","pricingRules","_component_PricingRuleDialog","_component_v_table","structure","_sfc_main$R","lastUnit","durationUnit","quantity","tier","multiplier","examplePrice","newPrice","resultingPrice","tiers","_sfc_main$Q","_component_DeleteButton","_sfc_main$P","pricingRule","_component_tippy","pricingRulesLoading","TheTaxes","getTaxCategories","ChangePassword","TwoFactorAuth","fetchUserTokens","createUserTokens","deleteApiToken","showInitialTokenDialog","newToken","copiedText","tokenDeletedSnack","copyToClipboardInit","createUserTokensInit","deleteApiTokenInit","getActivityLogInit","upgradeDialogIsOpen","featureStep","safeFeatureStep","stepDescription","stepImage","stepSecondDescription","featureListStyle","newVal","useStripe","stripeLoading","stripeAccounts","stripePrices","fetchStripeAccounts","fetchStripeCapabilities","saveStripeKey","resetStripeKey","testStripeIdentity","fetchSubscriptionDetails","fetchStripePriceData","fetchCheckoutUrl","formatDate","stripeIdentityName","identity","firstName","lastName","stripeIdentityDOB","dob","formattedDate","stripeIdentityStatus","stripeIdentityVSId","stripeIdentityErrors","stripeIdentityUrl","stripeIdentityDocumentNumber","stripeIdentityDocumentExpiration","expiration","stripeIdentityAddress","stripeInstance","publishableKey","reject","DeleteAccountSection","CardOnFileCard","RenewsOneCard","PlanPriceCard","shouldShowUpsellCard","cardBrand","cardLastFour","defaultPayment","trialDaysLeftWithDay","usePayments","paymentMethods","paymentsLoading","billingSessionUrl","paymentForm","newPayment","fetchPaymentMethods","fetchPayments","fetchPayment","paymentId","fetchStripeCheckoutUrl","sendPaymentRequestLinkViaSms","updateDefaultBillingDetails","paymentMethodId","addPaymentMethod","newPaymentAmount","newPaymentKeepDepositAmount","newPaymentSecurityDeposit","getEmployees","companyEmployees","employeeInitials","employeeNotificationSettings","updateNotificationSettings","updateEmployeeNotificationSettings","settingsLoading","notificationSettings","notification","notificationOld","emailTemplates","automaticEmailTemplates","manualEmailTemplates","getEmailTemplates","useEmailDomainSettings","emailDomainSettingsLoading","domainId","_sfc_main$F","EmailTemplates","fetchEmailDomain","createEmailDomain","deleteEmailDomain","emailDomainCheckDKIM","emailDomainCheckReturnPathStatus","setAsDefaultSendingDomain","sendTestEmail","updateEmailDomainUsername","editEmail","domainDialog","testEmailDialog","domainSettingsDialog","newDomain","testEmailAddress","createEmailDomainErrorMessage","currentWorkingSetting","domainSettingsDeleteConfirmDialog","toLower","clone","split","_withKeys","_component_EmailTemplates","_component_v_snackbar","useEmail","emailLoading","emailHistory","emailForm","emailsLoading","getEmailTemplate","updateEmailTemplate","sendTestTemplateEmail","resetEmailTemplate","resetEmailTemplateInit","updateEmailTemplateInit","localEmailTemplate","Paragraph","List","useSubscriptionManager","planSelectionName","plansOrdered","planSelection","planSelectionObject","planSelectionNameUpper","planSelectionPrice","planPricing","subscriptionStep","openStripeCheckoutUrl","switchPlanInit","termsSection","handleStepClick","planSelectionAnnualPrice","subscriptionPlanIndex","subscriptionPlanFeatures","bullet","cancelSubscriptionCommit","newUrl","Integrations","Connections","useProviders","paymentProviders","deletePaymentProfile","getPaymentProfiles","StripeOauthWindow","stripeInterval","removeStripeConfirm","stripeAccountDialog","stripeProvider","hasStripe","stripeUuid","stripeCreatedAt","stripeAccountCapabilities","stripeAccountChargesEnabled","stripeAccountPayoutsEnabled","deletePaymentProfileCommit","StripeOauth","clientId","results","_sfc_main$w","_component_v_img","useSquare","getSquareOauthUrl","getSquareProvider","setSquareLoading","squareOauthWindow","squareCheckInterval","removeSquareConfirmDialog","squareProvider","hasSquare","openOauthUrl","squareEmail","squareUuid","squareCreatedAt","squareOauthInit","_sfc_main$t","profile","instance","stripeScript","WhatAreCommissionsDialog","viewCommissionPartnerDialog","deleteCommissionPartnerDialog","editedIndex","showOnMainMenu","commissionPartner","partnersLoading","toggleShowCommissionPartnersOnMainMenu","getCommissionPartners","updateCommissionPartner","resetCommissionPartner","deleteCommissionPartner","createCommissionPartner","isDialogVisible","openDialog","updateAmountFormat","editItem","deleteItem","commissionAmount","showOnMainMenuData","webhooksLoading","getWebhookEndpoints","webhookEndpointStatus","endpoint","editWebhook","webhookForm","webhookLoading","webhookCardReady","webhookFormReady","clearErrors","addWebhookEndpoint","addWebhookEndpointInit","createWebhookSuccess","showEditForm","updateSuccess","webhookClone","currentWorkingConversation","conversationResultClassObject","currentWebhook","webhookConversations","webhookEndpointSecret","orderedConversations","groupBy","orderedDates","orderBy","getWebhookEndpoint","getWebhookConversations","resendWebhookConversation","companyNew","_component_v_form","_component_v_combobox","_vShow","eSign","AdditionalScripts","AdditionalStyling","TermsAndCancellationPolicy","Payments","localAcceptCoupons","SectionDivider","components","OperatingHours","GuestCancellation","CheckoutFields","SecondaryDrivers","StoreCustomizations","CustomDomain","EcommerceTracking","Install","_sfc_main$m","perms","newData","er","_component_v_container","$t","perm","_component_v_list_item_action","_component_v_checkbox_btn","PERMISSION_ORDER","_sfc_main$l","aIndex","bIndex","turnOn","otherPerms","employeeData","acronym","matches","_component_v_avatar","getFleetBranches","branchLocationName","branchLocationLine1","createBranch","fleetLoading","currentWorkingBranch","branchForm","formErrors","createFleetBranch","addLocationData","deleteFleetBranch","getFleetBranch","branchLoading","currentBranchUuid","confirmDelete","editingLocation","matchPickupReturnLocationToBranchDialog","branchClone","pickupReturnSame","pickupReturnSameAsBranch","editBranch","missingNewLocationInfo","branchLocation","locationStaticMap","lat","lng","deleteFleetBranchInit","updateFleetBranch","updatedBranch","updateFleetBranchInit","matchPickupReturnLocationsToBranch","documentName","changeLocationInit","vehicleClasses","vehicleLoading","getVehicleClasses","branchName","closeDialog","isOpen","COLORS","useVehicle","vehicleMakes","vehicleModels","vehicleColors","vehicleClassForm","vehicleClassCreated","createVehicleClass","createVehicleClassInit","currentWorkingClass","branchesFiltered","isSippDialogOpen","openSippDialog","vehicleClassBranch","cancel","filteredBranches","getVehicleClass","deleteVehicleClass","updateVehicleClass","fleetClassUuid","classClone","deleteVehicleClassInit","backToClasses","defaultActionItem","_sfc_main$b","newlyCreatedActionItem","fleetForm","createActionItem","_sfc_main$a","agreeToSDialog","hasAffiliate","agreeToS","affiliateLoading","affiliateApplication","getAffiliate","affiliateTOSAgree","submitSuccess","formReady","affiliateForm","affiliateApplicationCreatedAt","affiliateUrl","affiliateActive","affiliateApplications","submitAffiliateApplication","nameKeydown","submitAffiliateApplicationInit","formatMoneyDisplayUSD","affiliatePayouts","affiliatePayoutsPast","affiliatePayoutsFuture","getAffiliatePayouts","_sfc_main$4","custodianLoading","_component_v_scroll_y_transition","_sfc_main$3","ListingAddManagersDialog","custodiansLoading","_component_ListingAddManagersDialog","fetchSetupUrl","fetchSetupUrlInit"],"ignoreList":[],"sources":["../../../resources/js/bootstrap.ts","../../../resources/js/store/mutation-types.ts","../../../resources/js/plugins/eventBus.js","../../../resources/js/plugins/FWForms/util.ts","../../../resources/js/plugins/FWForms/Errors.ts","../../../resources/js/plugins/FWForms/Form.ts","../../../resources/js/store/helpers/vuex-helpers.ts","../../../resources/js/store/modules/affiliate.ts","../../../resources/js/utils/urls.ts","../../../resources/js/store/modules/analytics.ts","../../../resources/js/utils/auth.ts","../../../resources/js/store/modules/app.ts","../../../resources/js/utils/numbers.ts","../../../resources/js/tenant/Services/elFactory.service.js","../../../resources/js/tenant/Services/api.service.js","../../../resources/js/tenant/Services/card.service.js","../../../resources/js/tenant/Services/list.service.js","../../../resources/js/tenant/Services/datepicker.service.js","../../../resources/js/tenant/Services/util.service.js","../../../resources/js/services/cart.service.ts","../../../resources/js/utils/formValidationRules.ts","../../../resources/js/composables/useAuth.ts","../../../resources/js/views/auth/Login.vue","../../../resources/js/views/auth/Register.vue","../../../resources/js/utils/dates.ts","../../../resources/js/views/auth/RegisterNextStep.vue","../../../resources/js/utils/meta.ts","../../../resources/js/composables/useCompany.ts","../../../resources/js/views/auth/companyEmployeeInvite.vue","../../../resources/js/views/auth/password/email.vue","../../../resources/js/views/auth/password/reset.vue","../../../resources/js/views/auth/password/verify.vue","../../../resources/js/views/auth/password/resend.vue","../../../resources/js/middleware/guest.ts","../../../resources/js/router/modules/auth.ts","../../../resources/js/router/modules/settings.ts","../../../resources/js/router/modules/commission.ts","../../../resources/js/views/dashboard/manager/ListingManagerConnect.vue","../../../resources/js/router/modules/custodian.ts","../../../resources/js/views/documentsV2/DocumentsDashboardV2.vue","../../../resources/js/utils/text.ts","../../../resources/js/composables/useTemplate.ts","../../../resources/js/utils/permission.ts","../../../resources/js/composables/useAppSettings.ts","../../../resources/js/views/documentsV2/TemplateRightSidebarV2.vue","../../../resources/js/components/dashboard/documents/LeftSidebar.vue","../../../resources/js/components/dashboard/documents/TopToolbar.vue","../../../resources/js/components/dashboard/documents/FieldDragHandles.vue","../../../resources/js/helpers/index.ts","../../../resources/js/composables/useESign.ts","../../../resources/js/views/documentsV2/NewDocumentFieldsV2.vue","../../../resources/js/mixins/subscription.ts","../../../resources/js/composables/useDate.ts","../../../resources/js/composables/useMoneyFormatter.ts","../../../resources/js/composables/useEnvelope.ts","../../../resources/js/views/documents/ContractsTable.vue","../../../resources/js/composables/useSubscription.ts","../../../resources/js/views/documents/Home.vue","../../../resources/js/views/documents/NewDocument.vue","../../../resources/js/composables/useOrders.ts","../../../resources/js/views/documents/SingleDocument.vue","../../../resources/js/components/dashboard/dialogs/StartOrderDocumentDownloadDialog.vue","../../../resources/js/components/dashboard/navActions/OrderDocumentOptions.vue","../../../resources/js/router/modules/documents.ts","../../../resources/js/router/modules/perks.ts","../../../resources/js/router/modules/notifications.ts","../../../resources/js/router/modules/listing.ts","../../../resources/js/router/modules/connections.ts","../../../resources/js/router/modules/orders.ts","../../../resources/js/router/modules/customers.ts","../../../resources/js/router/modules/trip-extras.ts","../../../resources/js/components/themes/ThemeTopNav.vue","../../../resources/js/components/themes/LeftSideNav.vue","../../../resources/js/components/themes/ThemeMainArea.vue","../../../resources/js/views/themes/ThemeBase/ThemeBase.vue","../../../resources/js/router/modules/theme.ts","../../../resources/js/views/company/checkoutIFrame.vue","../../../resources/js/router/modules/company.ts","../../../resources/js/router/modules/e-signer.ts","../../../resources/js/router/modules/super-admin.ts","../../../resources/js/router/modules/dashboard.ts","../../../resources/js/router/modules/analytics.ts","../../../resources/js/components/company/index.vue","../../../resources/js/router/modules/pay.ts","../../../resources/js/router/routes.ts","../../../resources/js/middleware/companyStore.ts","../../../resources/js/plugins/i18n/i18n.ts","../../../resources/js/plugins/i18n/translations.ts","../../../resources/js/middleware/locale.ts","../../../resources/js/middleware/check-auth.ts","../../../resources/js/middleware/auth.ts","../../../resources/js/router/index.ts","../../../resources/js/store/modules/auth.ts","../../../resources/js/services/storage.service.ts","../../../resources/js/store/modules/automations.ts","../../../resources/js/store/modules/axle.ts","../../../resources/js/store/modules/barcode.ts","../../../resources/js/store/modules/booking.ts","../../../resources/js/store/modules/bouncie.ts","../../../resources/js/store/modules/braintree.ts","../../../resources/js/services/commission-partner.service.ts","../../../resources/js/store/modules/cart.ts","../../../resources/js/store/modules/checkout.ts","../../../resources/js/store/modules/commission-partners.ts","../../../resources/js/store/modules/company.ts","../../../resources/js/store/modules/coupon.ts","../../../resources/js/store/modules/custodian.ts","../../../resources/js/store/modules/custom-fields.ts","../../../resources/js/store/modules/default-properties.ts","../../../resources/js/store/modules/document.ts","../../../resources/js/store/modules/email.ts","../../../resources/js/store/modules/email-domain-settings.ts","../../../resources/js/store/modules/envelope.ts","../../../resources/js/store/modules/files.ts","../../../resources/js/store/modules/fleet.ts","../../../resources/js/store/modules/getaround.ts","../../../resources/js/store/modules/hq-rentals.ts","../../../resources/js/store/modules/payments.ts","../../../resources/js/settings.ts","../../../resources/js/store/modules/settings.ts","../../../resources/js/store/modules/theme.ts","../../../resources/js/store/modules/lang.ts","../../../resources/js/store/modules/listing.ts","../../../resources/js/store/modules/lula.ts","../../../resources/js/store/modules/notes.ts","../../../resources/js/store/modules/outdoorsy.ts","../../../resources/js/store/modules/permission.ts","../../../resources/js/store/modules/pricing.ts","../../../resources/js/store/modules/providers.ts","../../../resources/js/store/modules/renters.ts","../../../resources/js/store/modules/square.ts","../../../resources/js/store/modules/subscriptions.ts","../../../resources/js/store/modules/superAdmin.ts","../../../resources/js/store/modules/tags-view.ts","../../../resources/js/store/modules/taxes.ts","../../../resources/js/store/modules/maintenance.ts","../../../resources/js/store/modules/order.ts","../../../resources/js/store/modules/stripe.ts","../../../resources/js/store/modules/template.ts","../../../resources/js/store/modules/tesla.ts","../../../resources/js/store/modules/tolls.ts","../../../resources/js/store/modules/trip-extras.ts","../../../resources/js/store/modules/turo.ts","../../../resources/js/store/modules/turo-pricing.ts","../../../resources/js/store/modules/turo-research.ts","../../../resources/js/store/modules/twilio.ts","../../../resources/js/store/modules/twisted-road.ts","../../../resources/js/store/modules/vehicles.ts","../../../resources/js/store/modules/whats-new.ts","../../../resources/js/store/modules/webhook.ts","../../../resources/js/store/modules/tenant-checkout.ts","../../../resources/js/store/modules/tags.ts","../../../resources/js/store/index.ts","../../../resources/js/App.vue","../../../resources/js/plugins/vuetify.ts","../../../resources/js/plugins/gtag.ts","../../../resources/js/plugins/sentry.ts","../../../resources/js/plugins/axios.ts","../../../resources/js/layouts/register.ts","../../../resources/js/app.ts","../../../resources/js/utils/role.ts","../../../resources/js/composables/useAppFeatures.ts","../../../resources/js/views/dashboard/settings/General.vue","../../../resources/js/composables/useBranch.ts","../../../resources/js/plugins/mapBoxAddressAutofillScript.js","../../../resources/js/components/widgets/MapBoxAddressAutofill.vue","../../../resources/js/composables/useTaxAndFee.ts","../../../resources/js/composables/useListing.ts","../../../resources/js/composables/useDefaultMeta.ts","../../../resources/js/components/dashboard/settings/pricing/GlobalPriceAdjustment.vue","../../../resources/js/views/dashboard/settings/Pricing/Pricing.vue","../../../resources/js/composables/useCoupons.ts","../../../resources/js/composables/useCouponForm.ts","../../../resources/js/views/dashboard/settings/Pricing/Coupons.vue","../../../resources/js/views/dashboard/settings/Pricing/Dialogs/PricingRuleDialog.vue","../../../resources/js/views/dashboard/settings/Pricing/AdvancedPricing.vue","../../../resources/js/views/dashboard/settings/Pricing/PricingStructure/PricingTemplate.vue","../../../resources/js/views/dashboard/settings/Pricing/PricingStructure/PricingTemplateNew.vue","../../../resources/js/views/dashboard/settings/Pricing/PricingStructure/PricingTemplateEdit.vue","../../../resources/js/views/dashboard/settings/Pricing/AdvancedPricingEdit.vue","../../../resources/js/views/dashboard/settings/Taxes.vue","../../../resources/js/views/dashboard/settings/Security.vue","../../../resources/js/views/dashboard/settings/ApiToken.vue","../../../resources/js/views/dashboard/settings/ActivityLog.vue","../../../resources/js/components/dashboard/settings/account/UpsellCard.vue","../../../resources/js/composables/useStripe.ts","../../../resources/js/views/dashboard/settings/AccountAndBilling.vue","../../../resources/js/composables/usePayments.ts","../../../resources/js/views/dashboard/settings/Team.vue","../../../resources/js/views/dashboard/settings/CompanyNotifications.vue","../../../resources/js/components/dashboard/settings/Emails/EmailTemplates.vue","../../../resources/js/composables/useEmailDomainSettings.ts","../../../resources/js/views/dashboard/settings/Emails/Email.vue","../../../resources/js/composables/useEmail.ts","../../../resources/js/views/dashboard/settings/Emails/EmailTemplateSingle.vue","../../../resources/js/composables/useSubscriptionManager.ts","../../../resources/js/views/dashboard/settings/Billing/SubscriptionCheckout/SubscriptionSteps.vue","../../../resources/js/views/dashboard/settings/Billing/SubscriptionCheckout/SubscriptionTermsAndDiscount.vue","../../../resources/js/views/dashboard/settings/Billing/SubscriptionCheckout/SubscriptionReviewAndConfirm.vue","../../../resources/js/views/dashboard/settings/Billing/SubscriptionCheckout/SubscriptionOverview.vue","../../../resources/js/views/dashboard/settings/Billing/SubscriptionCheckout/SubscriptionCheckout.vue","../../../resources/js/views/dashboard/settings/Providers.vue","../../../resources/js/composables/useProviders.ts","../../../resources/js/components/dashboard/settings/providers/StripeProviderCard.vue","../../../resources/js/components/dashboard/settings/providers/BraintreeProviderCard.vue","../../../resources/js/composables/useSquare.ts","../../../resources/js/components/dashboard/settings/providers/SquareProviderCard.vue","../../../resources/js/views/dashboard/settings/PaymentProviders.vue","../../../resources/js/views/dashboard/settings/PaymentProviders/SinglePaymentProvider.vue","../../../resources/js/views/dashboard/settings/CommissionPartners.vue","../../../resources/js/views/dashboard/settings/Webhooks/Webhooks.vue","../../../resources/js/views/dashboard/settings/Webhooks/Create.vue","../../../resources/js/views/dashboard/settings/Webhooks/UpdateWebhook.vue","../../../resources/js/views/dashboard/settings/Checkout.vue","../../../resources/js/views/dashboard/settings/OnlineReservations.vue","../../../resources/js/views/dashboard/settings/EmployeesNew.vue","../../../resources/js/views/dashboard/settings/Employees.vue","../../../resources/js/views/dashboard/settings/Fleet/FleetBase.vue","../../../resources/js/views/dashboard/settings/Fleet/FleetBranches.vue","../../../resources/js/views/dashboard/settings/Fleet/FleetBranchesNew.vue","../../../resources/js/views/dashboard/settings/Fleet/FleetBranchesSingle.vue","../../../resources/js/views/dashboard/settings/Fleet/FleetClass.vue","../../../resources/js/views/dashboard/settings/Fleet/SippDialog.vue","../../../resources/js/composables/useVehicle.ts","../../../resources/js/views/dashboard/settings/Fleet/FleetClassNew.vue","../../../resources/js/views/dashboard/settings/Fleet/FleetClassSingle.vue","../../../resources/js/views/dashboard/settings/Fleet/ActionItems/ActionItems.vue","../../../resources/js/views/dashboard/settings/Fleet/ActionItems/ActionItemNew.vue","../../../resources/js/views/dashboard/settings/Fleet/ActionItems/ActionItemSingle.vue","../../../resources/js/views/dashboard/settings/Fleet/FleetFeatures.vue","../../../resources/js/views/dashboard/settings/Affiliate/AffiliateTerms.vue","../../../resources/js/views/dashboard/settings/Affiliate/AffiliateIndex.vue","../../../resources/js/views/dashboard/settings/Affiliate/AffiliateSignup.vue","../../../resources/js/views/dashboard/settings/Affiliate/AffiliatePayouts.vue","../../../resources/js/components/dashboard/dialogs/ListingAddManagersDialog.vue","../../../resources/js/views/dashboard/settings/Custodian/Index.vue","../../../resources/js/views/dashboard/settings/Billing/SubscriptionDetailCards/CardOnFileCard.vue","../../../resources/js/views/dashboard/settings/Billing/SubscriptionDetailCards/RenewsOneCard.vue","../../../resources/js/views/dashboard/settings/Billing/SubscriptionDetailCards/PlanPriceCard.vue"],"sourcesContent":["import Cookies from 'js-cookie';\nimport Echo from 'laravel-echo';\nimport Pusher from 'pusher-js';\nimport { ray } from 'node-ray/web';\n\nwindow.ray = ray;\nPusher.logToConsole = false;\n\nconst pusherAppKey = import.meta.env.VITE_PUSHER_APP_KEY;\n\nconst pusher = new Pusher(pusherAppKey, {\n  cluster: 'us3',\n  forceTLS: true,\n  authEndpoint: '/api/broadcasting/auth',\n  auth: {\n    headers: {\n      Authorization: `Bearer ${Cookies.get('token')}`,\n    },\n  },\n});\n\nwindow.Echo = new Echo({\n  broadcaster: 'pusher',\n  client: pusher,\n});\n","export const SET_LOCALE = 'SET_LOCALE';\n\n// app.js\nexport const SET_APP_LOADING = 'SET_APP_LOADING';\nexport const SET_APP_BOOTING = 'SET_APP_BOOTING';\nexport const TOGGLE_RIGHT_SIDEBAR = 'TOGGLE_RIGHT_SIDEBAR';\nexport const TOGGLE_SIDEBAR = 'TOGGLE_SIDEBAR';\nexport const INITIALIZE_STATE = 'INITIALIZE_STATE';\nexport const TOGGLE_LISTING_VIEW = 'TOGGLE_LISTING_VIEW';\nexport const TOGGLE_SECONDARY_IMPORT_NAV_VIEW = 'TOGGLE_SECONDARY_IMPORT_NAV_VIEW';\nexport const CLOSE_SIDEBAR = 'CLOSE_SIDEBAR';\nexport const TOGGLE_DEVICE = 'TOGGLE_DEVICE';\nexport const SET_ALL_POSSIBLE_PERMISSIONS = 'SET_ALL_POSSIBLE_PERMISSIONS';\nexport const SET_MASQUERADE_STATUS = 'SET_MASQUERADE_STATUS';\nexport const SET_MASQUERADE = 'SET_MASQUERADE';\nexport const END_MASQUERADE = 'END_MASQUERADE';\nexport const SET_FW_STRIPE_KEY = 'SET_FW_STRIPE_KEY';\nexport const SET_POLLED_FW_BUILD_NUMBER = 'SET_POLLED_FW_BUILD_NUMBER';\nexport const SET_UPDATE_AVAILABLE = 'SET_UPDATE_AVAILABLE';\nexport const SET_APP_FEATURES = 'SET_APP_FEATURES';\nexport const MARK_SETUP_ITEM_COMPLETE = 'MARK_SETUP_ITEM_COMPLETE';\nexport const SET_FEATURES_WAITLIST = 'SET_FEATURES_WAITLIST';\nexport const SET_CURRENT_CURRENCY = 'SET_CURRENT_CURRENCY';\nexport const TOGGLE_DEBUG_ON = 'TOGGLE_DEBUG_ON';\nexport const TOGGLE_DEBUG_DRAWER = 'TOGGLE_DEBUG_DRAWER';\nexport const SET_FW_BUILD_NUMBER = 'SET_FW_BUILD_NUMBER';\nexport const SET_HOVERED_TURNOVER_BOOKING_ID = 'SET_HOVERED_TURNOVER_BOOKING_ID';\n\n// permissions.js\nexport const SET_ROUTES = 'SET_ROUTES';\n\n// settings.js\nexport const SET_SETTINGS_LOADING = 'SET_SETTINGS_LOADING';\nexport const SET_NOTIFICATION_SETTINGS = 'SET_NOTIFICATION_SETTINGS';\n\n// vehicles.js\nexport const SET_VEHICLES_LOADING = 'SET_VEHICLES_LOADING';\nexport const SET_VEHICLES = 'SET_VEHICLES';\nexport const SET_VEHICLE_MAKES = 'SET_VEHICLE_MAKES';\nexport const SET_VEHICLE_MODELS = 'SET_VEHICLE_MODELS';\nexport const SET_VEHICLE_CLASS_CREATED = 'SET_VEHICLE_CLASS_CREATED';\nexport const SET_VEHICLE_CLASSES = 'SET_VEHICLE_CLASSES';\nexport const SET_VEHICLE_CLASS = 'SET_VEHICLE_CLASS';\nexport const CLEAR_VEHICLE_FORM_ERRORS = 'CLEAR_VEHICLE_FORM_ERRORS';\nexport const SET_VEHICLE_FORM_ERRORS = 'SET_VEHICLE_FORM_ERRORS';\n\n\n// auth.js\nexport const SET_USER = 'SET_USER';\nexport const SET_AUTH_LOADING = 'SET_AUTH_LOADING';\nexport const SET_TOKEN = 'SET_TOKEN';\nexport const SAVE_TOKEN = 'SAVE_TOKEN';\nexport const SAVE_REGISTER_ID = 'SAVE_REGISTER_ID';\nexport const SET_ROLES = 'SET_ROLES';\nexport const SET_PERMISSIONS = 'SET_PERMISSIONS';\nexport const FETCH_USER_FAILURE = 'FETCH_USER_FAILURE';\nexport const LOGOUT = 'LOGOUT';\nexport const UPDATE_USER = 'UPDATE_USER';\nexport const SET_USER_NOTIFICATIONS = 'SET_USER_NOTIFICATIONS';\nexport const SET_USER_API_TOKENS = 'SET_USER_API_TOKENS';\n\n\n// booking.js\nexport const SET_BOOKING_LOADING = 'SET_BOOKING_LOADING';\nexport const SET_BOOKING_DIALOG = 'SET_BOOKING_DIALOG';\nexport const CLEAR_BOOKING_FORM_ERRORS = 'CLEAR_BOOKING_FORM_ERRORS';\nexport const SET_BOOKING_FORM_ERROR = 'SET_BOOKING_FORM_ERROR';\nexport const SET_FILTERED_MAKES = 'SET_FILTERED_MAKES';\nexport const PUSH_CALENDAR_ATTRIBUTES = 'PUSH_CALENDAR_ATTRIBUTES';\nexport const SET_CALENDAR_ATTRIBUTES = 'SET_CALENDAR_ATTRIBUTES';\nexport const SET_UNAVAILABLE_DATES = 'SET_UNAVAILABLE_DATES';\nexport const RESET_UNAVAILABLE_DATES = 'RESET_UNAVAILABLE_DATES';\nexport const SET_BOOKING_LISTING = 'SET_BOOKING_LISTING';\nexport const SET_STORED_TURO_BOOKINGS = 'SET_STORED_TURO_BOOKINGS';\nexport const SET_CUSTOMER_BOOKING = 'SET_CUSTOMER_BOOKING';\nexport const SET_REMEMBER_CUSTOMER = 'SET_REMEMBER_CUSTOMER';\nexport const SET_BOOKINGS = 'SET_BOOKINGS';\nexport const SET_BOOKINGS_META = 'SET_BOOKINGS_META';\nexport const SET_ABANDONED_BOOKINGS = 'SET_ABANDONED_BOOKINGS';\nexport const SET_PRIORITY_BOOKINGS = 'SET_PRIORITY_BOOKINGS';\nexport const SET_TOTAL_BOOKINGS = 'SET_TOTAL_BOOKINGS';\nexport const SET_CURRENT_WORKING_BOOKING = 'SET_CURRENT_WORKING_BOOKING';\nexport const SET_CURRENT_WORKING_BOOKING_STATUS = 'SET_CURRENT_WORKING_BOOKING_STATUS';\nexport const SET_BOOKING_PAYMENTS = 'SET_BOOKING_PAYMENTS';\nexport const MERGE_BOOKING_LINE_ITEM = 'MERGE_BOOKING_LINE_ITEM';\nexport const UPDATE_BOOKING_LINE_ITEM = 'UPDATE_BOOKING_LINE_ITEM';\nexport const REMOVE_BOOKING_LINE_ITEM = 'REMOVE_BOOKING_LINE_ITEM';\nexport const SET_BOOKING_CART_ID = 'SET_BOOKING_CART_ID';\nexport const RESET_BOOKING = 'RESET_BOOKING';\nexport const SET_BOOKING_AUTOMATION_EVENTS = 'SET_BOOKING_AUTOMATION_EVENTS';\nexport const SET_BOOKING_NOT_FOUND = 'SET_BOOKING_NOT_FOUND';\nexport const SET_CURRENT_STRIPE_CHARGE = 'SET_CURRENT_STRIPE_CHARGE';\nexport const SET_FLEET_RESOURCES = 'SET_FLEET_RESOURCES';\nexport const SET_CURRENT_WORKING_BOOKING_ATTRIBUTE = 'SET_CURRENT_WORKING_BOOKING_ATTRIBUTE';\n\n\n// company.js\nexport const SET_COMPANY_LOADING = 'SET_COMPANY_LOADING';\nexport const SET_COMPANY = 'SET_COMPANY';\nexport const SET_COMPANY_PHONE = 'SET_COMPANY_PHONE';\nexport const SET_COMPANY_META = 'SET_COMPANY_META';\nexport const SET_COMPANY_DEFAULT_META = 'SET_COMPANY_DEFAULT_META';\nexport const SET_COMPANY_BOOKINGS = 'SET_COMPANY_BOOKINGS';\nexport const SET_COMPANY_EMPLOYEES = 'SET_COMPANY_EMPLOYEES';\nexport const SET_COMPANY_EMPLOYEE = 'SET_COMPANY_EMPLOYEE';\nexport const SET_POSSIBLE_PERMISSIONS = 'SET_POSSIBLE_PERMISSIONS';\nexport const RESET_EMPLOYEE = 'RESET_EMPLOYEE';\nexport const SET_COMPANY_NOTIFICATIONS = 'SET_COMPANY_NOTIFICATIONS';\nexport const SET_EMPLOYEE_PERMISSIONS = 'SET_EMPLOYEE_PERMISSIONS';\nexport const SET_EMPLOYEE_ROLES = 'SET_EMPLOYEE_ROLES';\nexport const SET_EMAIL_DOMAIN_SETTINGS = 'SET_EMAIL_DOMAIN_SETTINGS';\nexport const SET_DELIVERY_LOCATIONS = 'SET_DELIVERY_LOCATIONS';\nexport const SET_FEEDBACK_REVIEWS = 'SET_FEEDBACK_REVIEWS';\nexport const SET_COMPANY_FORM_ERROR = 'SET_COMPANY_FORM_ERROR';\nexport const SET_COMPANY_META_FORM_ERROR = 'SET_COMPANY_META_FORM_ERROR';\nexport const CLEAR_COMPANY_META_FORM_ERRORS = 'CLEAR_COMPANY_META_FORM_ERRORS';\n\nexport const SET_OPERATING_RULES = 'SET_OPERATING_RULES';\nexport const SET_COMPANY_CURRENCY = 'SET_COMPANY_CURRENCY';\nexport const SET_COMPANY_SETTINGS = 'SET_COMPANY_SETTINGS';\nexport const SET_COUNTS = 'SET_COUNTS';\n\n// affiliate.js\nexport const SET_AFFILIATE_LOADING = 'SET_AFFILIATE_LOADING';\nexport const SET_AFFILIATE = 'SET_AFFILIATE';\nexport const SET_AFFILIATE_PAYOUTS = 'SET_AFFILIATE_PAYOUTS';\nexport const SET_AFFILIATE_APPLICATION = 'SET_AFFILIATE_APPLICATION';\nexport const SET_AFFILIATE_FUTURE_PAYOUT = 'SET_AFFILIATE_FUTURE_PAYOUT';\nexport const SET_AFFILIATE_PAST_PAYOUT = 'SET_AFFILIATE_PAST_PAYOUT';\n\n\n// listing.js\nexport const SET_LISTING_LOADING = 'SET_LISTING_LOADING';\nexport const SET_LISTING_SNACK = 'SET_LISTING_SNACK';\nexport const SET_LISTING_DIALOG = 'SET_LISTING_DIALOG';\nexport const CLEAR_LISTING_FILTER = 'CLEAR_LISTING_FILTER';\nexport const SET_LISTING_FILTER_AVAILABLE_FILTERS = 'SET_LISTING_FILTER_AVAILABLE_FILTERS';\nexport const SET_LISTING_FILTER_SELECTED_FILTERS = 'SET_LISTING_FILTER_SELECTED_FILTERS';\nexport const TOGGLE_LISTING_FILTER = 'TOGGLE_LISTING_FILTER';\nexport const SET_LISTING_VEHICLE = 'SET_LISTING_VEHICLE';\nexport const SET_LISTING_PRICE = 'SET_LISTING_PRICE';\nexport const SET_LISTING_PRICE_TAXABLE = 'SET_LISTING_PRICE_TAXABLE';\nexport const SET_LISTING_PRICE_TAX_CATEGORY = 'SET_LISTING_PRICE_TAX_CATEGORY';\nexport const SET_LISTING_SEC_DEP = 'SET_LISTING_SEC_DEP';\nexport const SET_LISTING_SEC_DEP_CREDIT = 'SET_LISTING_SEC_DEP_CREDIT';\nexport const SET_LISTING_SEC_DEP_DEBIT = 'SET_LISTING_SEC_DEP_DEBIT';\nexport const SET_LISTING_MILES_OVERAGE = 'SET_LISTING_MILES_OVERAGE';\nexport const RESET_CURRENT_LISTING = 'RESET_CURRENT_LISTING';\nexport const SET_CURRENT_NEW_LISTING = 'SET_CURRENT_NEW_LISTING';\nexport const SET_CURRENT_LISTING = 'SET_CURRENT_LISTING';\nexport const SET_LISTING = 'SET_LISTING';\nexport const SET_LISTING_INIT = 'SET_LISTING_INIT';\nexport const SET_ALL_LISTINGS = 'SET_ALL_LISTINGS';\nexport const SET_LISTING_ID = 'SET_LISTING_ID';\nexport const SET_STATUS_FILTER_ITEMS = 'SET_STATUS_FILTER_ITEMS';\nexport const SET_STATUS_FILTER_ITEMS_UPCOMING = 'SET_STATUS_FILTER_ITEMS_UPCOMING';\nexport const SET_STATUS_FILTER_TEMP_ITEMS = 'SET_STATUS_FILTER_TEMP_ITEMS';\nexport const SET_PAYMENT_STATUS_FILTER_ITEMS = 'SET_PAYMENT_STATUS_FILTER_ITEMS';\nexport const SET_ACTIVITY_FILTER_ITEMS = 'SET_ACTIVITY_FILTER_ITEMS';\nexport const SET_SOURCE_FILTER_ITEMS = 'SET_SOURCE_FILTER_ITEMS';\nexport const SET_BOOKABLE_TIMES = 'SET_BOOKABLE_TIMES';\nexport const SET_CURRENT_LISTING_BOOKINGS = 'SET_CURRENT_LISTING_BOOKINGS';\nexport const SET_CURRENT_LISTING_DISCOUNTABLE = 'SET_CURRENT_LISTING_DISCOUNTABLE';\nexport const SET_CURRENT_LISTING_MILE_ALLOWANCE = 'SET_CURRENT_LISTING_MILE_ALLOWANCE';\nexport const SET_CURRENT_LISTING_DURATION_DISCOUNT = 'SET_CURRENT_LISTING_DURATION_DISCOUNT';\nexport const TOGGLE_PAUSE_CURRENT_LISTING = 'TOGGLE_PAUSE_CURRENT_LISTING';\nexport const SET_CURRENT_LISTING_CHECKOUT_MODE = 'SET_CURRENT_LISTING_CHECKOUT_MODE';\nexport const SET_LISTING_PRICE_TYPE = 'SET_LISTING_PRICE_TYPE';\nexport const SET_LISTING_PRICE_PERIOD = 'SET_LISTING_PRICE_PERIOD';\nexport const SET_LISTING_PRICE_STRUCTURE_ID = 'SET_LISTING_PRICE_STRUCTURE_ID';\nexport const SET_VEHICLE_VIN = 'SET_VEHICLE_VIN';\nexport const SET_VEHICLE_YEAR = 'SET_VEHICLE_YEAR';\nexport const SET_VEHICLE_MAKE = 'SET_VEHICLE_MAKE';\nexport const SET_VEHICLE_MODEL = 'SET_VEHICLE_MODEL';\nexport const SET_VEHICLE_COLOR = 'SET_VEHICLE_COLOR';\nexport const SET_VEHICLE_SEATS = 'SET_VEHICLE_SEATS';\nexport const SET_VEHICLE_DOORS = 'SET_VEHICLE_DOORS';\nexport const SET_VEHICLE_PLATE = 'SET_VEHICLE_PLATE';\nexport const SET_ALL_AVAILABLE_FEATURES = 'SET_ALL_AVAILABLE_FEATURES';\nexport const SET_VEHICLE_FEATURES = 'SET_VEHICLE_FEATURES';\nexport const SET_VEHICLE_EXTRAS = 'SET_VEHICLE_EXTRAS';\nexport const SET_CURRENT_DECODED_VIN = 'SET_CURRENT_DECODED_VIN';\nexport const SET_EXISTING_LISTING_DATA = 'SET_EXISTING_LISTING_DATA';\nexport const SET_CURRENT_TRIP_EXTRA = 'SET_CURRENT_TRIP_EXTRA';\nexport const SET_CURRENT_LISTING_IMAGES = 'SET_CURRENT_LISTING_IMAGES';\nexport const SET_LISTING_AVAILABILITY_MESSAGE = 'SET_LISTING_AVAILABILITY_MESSAGE';\nexport const SET_ALL_EXTRAS = 'SET_ALL_EXTRAS';\nexport const SET_LISTING_FORM_ERRORS = 'SET_LISTING_FORM_ERRORS';\nexport const CLEAR_LISTING_FORM_ERRORS = 'CLEAR_LISTING_FORM_ERRORS';\nexport const SET_LISTING_DAILY_PRICES = 'SET_LISTING_DAILY_PRICES';\nexport const SET_FLEET_RESOURCE_LISTINGS = 'SET_FLEET_RESOURCE_LISTINGS';\nexport const SET_FLEET_RESOURCE_LISTINGS_DATA = 'SET_FLEET_RESOURCE_LISTINGS_DATA';\nexport const SET_CURRENT_LISTING_INCIDENTS = 'SET_CURRENT_LISTING_INCIDENTS';\nexport const SET_LISTING_FILTER_OPTIONS = 'SET_LISTING_FILTER_OPTIONS';\nexport const SET_CUSTODIAL_LISTING = 'SET_CUSTODIAL_LISTING';\n\n// turo\nexport const SET_INIT = 'SET_INIT';\nexport const SET_TURO_LOADING = 'SET_TURO_LOADING';\nexport const SET_TRIPS = 'SET_TRIPS';\nexport const SET_TRIP_SINGLE = 'SET_TRIP_SINGLE';\nexport const SET_TURO_EMAILS = 'SET_TURO_EMAILS';\nexport const SET_TRIP_SINGLE_MESSAGES = 'SET_TRIP_SINGLE_MESSAGES';\nexport const SET_TRIP_SINGLE_IMAGES = 'SET_TRIP_SINGLE_IMAGES';\nexport const SET_TURO_MESSAGE_SENDING = 'SET_TURO_MESSAGE_SENDING';\nexport const SET_TURO_ALL_VEHICLES = 'SET_TURO_ALL_VEHICLES';\nexport const RESET_VEHICLES = 'RESET_VEHICLES';\nexport const SET_ALL_IMPORTED_TURO_VEHICLES = 'SET_ALL_IMPORTED_TURO_VEHICLES';\nexport const SET_TRIP_TURO_GO = 'SET_TRIP_TURO_GO';\nexport const SET_TURO_CONNECTIONS = 'SET_TURO_CONNECTIONS';\nexport const SET_TURO_REIMBURSEMENT_DETAILS = 'SET_TURO_REIMBURSEMENT_DETAILS';\nexport const RESET_TURO_CREDS = 'RESET_TURO_CREDS';\nexport const SET_TURO_CAPTCHA_TESTING = 'SET_TURO_CAPTCHA_TESTING';\nexport const SET_TURO_CAPTCHA_ID = 'SET_TURO_CAPTCHA_ID';\nexport const SET_TURO_EARNINGS = 'SET_TURO_EARNINGS';\nexport const SET_TRIP_HISTORY = 'SET_TRIP_HISTORY';\nexport const SET_TRIP_PENDING_REQUESTS = 'SET_TRIP_PENDING_REQUESTS';\nexport const SET_ACTIVITY_FEED = 'SET_ACTIVITY_FEED';\nexport const SET_TURO_CHANGE_REQUEST_SETTINGS = 'SET_TURO_CHANGE_REQUEST_SETTINGS';\nexport const SET_TURO_FEEDBACK = 'SET_TURO_FEEDBACK';\nexport const SET_TURO_FEEDBACK_PAGE = 'SET_TURO_FEEDBACK_PAGE';\nexport const SET_TURO_FEEDBACK_NEXT_PAGE = 'SET_TURO_FEEDBACK_NEXT_PAGE';\nexport const SET_TURO_FEEDBACK_TOTAL = 'SET_TURO_FEEDBACK_TOTAL';\nexport const SET_TURO_FEEDBACK_PER_PAGE = 'SET_TURO_FEEDBACK_PER_PAGE';\nexport const SET_TURO_FEEDBACK_LAST_PAGE = 'SET_TURO_FEEDBACK_LAST_PAGE';\nexport const SET_ALL_TURO_VEHICLES = 'SET_ALL_TURO_VEHICLES';\nexport const CLEAR_ALL_TURO_VEHICLES = 'CLEAR_ALL_TURO_VEHICLES';\nexport const SET_ALL_TURO_MESSAGES = 'SET_ALL_TURO_MESSAGES';\nexport const SET_ALL_TURO_MESSAGES_CURRENT_PAGINATE = 'SET_ALL_TURO_MESSAGES_CURRENT_PAGINATE';\nexport const SET_ALL_TURO_MESSAGES_TOTAL_PAGES = 'SET_ALL_TURO_MESSAGES_TOTAL_PAGES';\nexport const SET_TURO_EMAILS_PAGINATION = 'SET_TURO_EMAILS_PAGINATION';\nexport const SET_TRIP_SINGLE_MESSAGES_STORED = 'SET_TRIP_SINGLE_MESSAGES_STORED';\n\n//\nexport const SET_TURO_PRICING_LOADING = 'SET_TURO_PRICING_LOADING';\nexport const SET_TURO_VEHICLE_DAILY_PRICING = 'SET_TURO_VEHICLE_DAILY_PRICING';\nexport const SET_TURO_PRICING_VEHICLES = 'SET_TURO_PRICING_VEHICLES';\n\n\n// getaround.js\nexport const SET_GETAROUND_INIT = 'SET_GETAROUND_INIT';\nexport const SET_GETAROUND_LOADING = 'SET_GETAROUND_LOADING';\nexport const SET_GETAROUND_VEHICLES = 'SET_GETAROUND_VEHICLES';\nexport const SET_GETAROUND_CONNECTIONS = 'SET_GETAROUND_CONNECTIONS';\nexport const SET_GETAROUND_TRIPS = 'SET_GETAROUND_TRIPS';\nexport const SET_GETAROUND_RESERVATION = 'SET_GETAROUND_RESERVATION';\nexport const SET_ALL_IMPORTED_GETAROUND_VEHICLES = 'SET_ALL_IMPORTED_GETAROUND_VEHICLES';\nexport const SET_GETAROUND_RESERVATION_RECEIPT = 'SET_GETAROUND_RESERVATION_RECEIPT';\n\n\n// renters.js\nexport const SET_RENTERS_LOADING = 'SET_RENTERS_LOADING';\nexport const SET_RENTER = 'SET_RENTER';\nexport const SET_RENTERS = 'SET_RENTERS';\nexport const SET_ALL_RENTERS = 'SET_ALL_RENTERS';\nexport const SET_RENTERS_DIALOG = 'SET_RENTERS_DIALOG';\nexport const ADD_RENTER = 'ADD_RENTER';\nexport const RESET_RENTER = 'RESET_RENTER';\nexport const SET_PAYMENT_SOURCES = 'SET_PAYMENT_SOURCES';\nexport const SET_BOOKING_PAYMENT = 'SET_BOOKING_PAYMENT';\nexport const SET_PHONE_NUMBER = 'SET_PHONE_NUMBER';\nexport const SET_SEARCHED_RENTERS = 'SET_SEARCHED_RENTERS';\nexport const SET_STRIPE_CUSTOMER = 'SET_STRIPE_CUSTOMER';\nexport const CLEAR_RENTERS_FORM_ERROR = 'CLEAR_RENTERS_FORM_ERROR';\nexport const SET_RENTERS_CREDIT_CARDS = 'SET_RENTERS_CREDIT_CARDS';\nexport const SET_RENTER_NOTIFICATIONS = 'SET_RENTER_NOTIFICATIONS';\nexport const SET_CUSTOMER_QUERY = 'SET_CUSTOMER_QUERY';\n\n// automations\nexport const SET_AUTOMATION_LOADING = 'SET_AUTOMATION_LOADING';\nexport const SET_CURRENT_AUTOMATION_EVENT = 'SET_CURRENT_AUTOMATION_EVENT';\nexport const SET_MESSAGE_TEMPLATES = 'SET_MESSAGE_TEMPLATES';\nexport const SET_AUTOMATION_EVENTS = 'SET_AUTOMATION_EVENTS';\nexport const SET_CURRENT_EVENT_LOGS = 'SET_CURRENT_EVENT_LOGS';\n\n// cart.js\nexport const SET_CART_LOADING = 'SET_CART_LOADING';\nexport const SET_CART = 'SET_CART';\nexport const SET_CART_L_ID = 'SET_CART_L_ID';\n\n// payments.js\nexport const SET_PAYMENTS_LOADING = 'SET_PAYMENTS_LOADING';\nexport const SET_PAYMENT_METHODS = 'SET_PAYMENT_METHODS';\nexport const SET_INVOICES = 'SET_INVOICES';\nexport const SET_PAYMENT = 'SET_PAYMENT';\nexport const SET_PAYMENTS = 'SET_PAYMENTS';\nexport const SET_CURRENT_WORKING_PAYMENT_ITEM = 'SET_CURRENT_WORKING_PAYMENT_ITEM';\nexport const SET_CUSTOM_PAYMENT_METHODS = 'SET_CUSTOM_PAYMENT_METHODS';\nexport const SET_STRIPE_INTENT = 'SET_STRIPE_INTENT';\nexport const RESET_NEW_PAYMENT = 'RESET_NEW_PAYMENT';\n\n// subscription.js\nexport const SET_SUBSCRIPTION_LOADING = 'SET_SUBSCRIPTION_LOADING';\nexport const SET_SUBSCRIPTION = 'SET_SUBSCRIPTION';\nexport const UPDATE_NEW_SUBSCRIPTION = 'UPDATE_NEW_SUBSCRIPTION';\nexport const SET_ENFORCE_SUBSCRIPTION = 'SET_ENFORCE_SUBSCRIPTION';\nexport const SET_SUBSCRIPTION_MASTER = 'SET_SUBSCRIPTION_MASTER';\nexport const SET_EXTRA_LISTINGS_ADDON = 'SET_EXTRA_LISTINGS_ADDON';\nexport const CLEAR_SUBSCRIPTION_FORM_ERRORS = 'CLEAR_SUBSCRIPTION_FORM_ERRORS';\nexport const SET_SUBSCRIPTION_FORM_ERROR = 'SET_SUBSCRIPTION_FORM_ERROR';\nexport const SET_SUBSCRIPTION_STEP = 'SET_SUBSCRIPTION_STEP';\nexport const SET_PLAN_SELECTION = 'SET_PLAN_SELECTION';\nexport const SET_SUBSCRIPTION_PLAN_AND_INTERVAL = 'SET_SUBSCRIPTION_PLAN_AND_INTERVAL';\n\n// super-admin.js\nexport const SET_SU_LOADING = 'SET_SU_LOADING';\nexport const SET_ALL_USERS = 'SET_ALL_USERS';\nexport const SET_CURRENT_WORKING_USER = 'SET_CURRENT_WORKING_USER';\nexport const SET_ALL_ROLES = 'SET_ALL_ROLES';\nexport const SET_ALL_PERMISSIONS = 'SET_ALL_PERMISSIONS';\nexport const SET_ALL_COMPANIES = 'SET_ALL_COMPANIES';\nexport const SET_CURRENT_WORKING_COMPANY = 'SET_CURRENT_WORKING_COMPANY';\nexport const SET_ALL_MEDIA_DIRECTORIES = 'SET_ALL_MEDIA_DIRECTORIES';\nexport const SET_ALL_MEDIA_IN_DIRECTORY = 'SET_ALL_MEDIA_IN_DIRECTORY';\nexport const SET_MEDIA_BASE_PATH = 'SET_MEDIA_BASE_PATH';\nexport const SET_ALL_LISTING_IMAGES = 'SET_ALL_LISTING_IMAGES';\nexport const SET_CURRENT_WORKING_SU_BASIC_STATS = 'SET_CURRENT_WORKING_SU_BASIC_STATS';\nexport const SET_ALL_SERVER_DETAILS = 'SET_ALL_SERVER_DETAILS';\nexport const SET_SA_FEATURE_WAITLIST = 'SET_SA_FEATURE_WAITLIST';\nexport const SET_SA_FEATURES_STATUS = 'SET_SA_FEATURES_STATUS';\nexport const SET_SA_CACHE = 'SET_SA_CACHE';\n\n// twilio\nexport const SET_TWILIO_LOADING = 'SET_TWILIO_LOADING';\nexport const SET_VERIFY_CODE = 'SET_VERIFY_CODE';\n\n// tesla.js\nexport const SET_TESLA_INIT = 'SET_TESLA_INIT';\nexport const CLEAR_TESLA_FORM_ERRORS = 'CLEAR_TESLA_FORM_ERRORS';\nexport const SET_TESLA_LOADING = 'SET_TESLA_LOADING';\nexport const SET_TESLA_CREDENTIALS = 'SET_TESLA_CREDENTIALS';\nexport const SET_TESLA_CONNECTIONS = 'SET_TESLA_CONNECTIONS';\nexport const UPDATE_TESLA_CONNECTION = 'UPDATE_TESLA_CONNECTION';\nexport const SET_TESLA_VEHICLES = 'SET_TESLA_VEHICLES';\nexport const SET_TESLA_CHARGING_INVOICES = 'SET_TESLA_CHARGING_INVOICES';\nexport const SET_TESLA_INVOICES = 'SET_TESLA_INVOICES';\nexport const SET_TESLA_INVOICES_META = 'SET_TESLA_INVOICES_META';\nexport const SET_TESLA_INVOICE_PDF = 'SET_TESLA_INVOICE_PDF';\nexport const SET_CURRENT_WORKING_TESLA_VEHICLE = 'SET_CURRENT_WORKING_TESLA_VEHICLE';\nexport const SET_CURRENT_WORKING_TESLA_VEHICLE_DRIVERS = 'SET_CURRENT_WORKING_TESLA_VEHICLE_DRIVERS';\nexport const SET_CURRENT_WORKING_TESLA_VEHICLE_HISTORY = 'SET_CURRENT_WORKING_TESLA_VEHICLE_HISTORY';\nexport const SET_CURRENT_WORKING_TESLA_VEHICLE_HISTORY_PAGINATE = 'SET_CURRENT_WORKING_TESLA_VEHICLE_HISTORY_PAGINATE';\nexport const SET_TESLA_VEHICLE_INVITATIONS = 'SET_TESLA_VEHICLE_INVITATIONS';\nexport const SET_CURRENT_WORKING_TESLA_VEHICLE_APP_ACCESS = 'SET_CURRENT_WORKING_TESLA_VEHICLE_APP_ACCESS';\nexport const SET_CURRENT_WORKING_TESLA_VEHICLE_STATE = 'SET_CURRENT_WORKING_TESLA_VEHICLE_STATE';\nexport const SET_CURRENT_WORKING_TESLA_VEHICLE_DATA = 'SET_CURRENT_WORKING_TESLA_VEHICLE_DATA';\nexport const SET_CURRENT_WORKING_TESLA_ASLEEP = 'SET_CURRENT_WORKING_TESLA_ASLEEP';\n\n// bouncie.js\nexport const SET_BOUNCIE_INIT = 'SET_BOUNCIE_INIT';\nexport const SET_BOUNCIE_LOADING = 'SET_BOUNCIE_LOADING';\nexport const SET_BOUNCIE_CONNECTIONS = 'SET_BOUNCIE_CONNECTIONS';\n\n\n// document.js\nexport const SET_TEMPLATES_LOADING = 'SET_TEMPLATES_LOADING';\nexport const RESET_TEMPLATE = 'RESET_TEMPLATE';\nexport const SET_ALL_DOCUMENTS = 'SET_ALL_DOCUMENTS';\nexport const SET_ONE_DOCUMENT = 'SET_ONE_DOCUMENT';\nexport const SET_ALL_TEMPLATES = 'SET_ALL_TEMPLATES';\nexport const SET_ONE_TEMPLATE = 'SET_ONE_TEMPLATE';\n\n// envelope.js\nexport const SET_ENVELOPE_LOADING = 'SET_ENVELOPE_LOADING';\nexport const SET_ENVELOPE = 'SET_ENVELOPE';\nexport const SET_ALL_ENVELOPES = 'SET_ALL_ENVELOPES';\nexport const SET_ENVELOPE_SIGNATURE = 'SET_ENVELOPE_SIGNATURE';\nexport const SET_ALL_FIELDS = 'SET_ALL_FIELDS';\nexport const SET_ENVELOPE_DIALOG = 'SET_ENVELOPE_DIALOG';\nexport const SET_ENVELOPE_QUERY = 'SET_ENVELOPE_QUERY';\nexport const SET_ENVELOPE_CUSTOMER = 'SET_ENVELOPE_CUSTOMER';\nexport const UPDATE_ENVELOPE_FIELD = 'UPDATE_ENVELOPE_FIELD';\nexport const SET_ESIGN_SESSION_DATA = 'SET_ESIGN_SESSION_DATA';\n\n// stripe\nexport const SET_STRIPE_LOADING = 'SET_STRIPE_LOADING';\nexport const SET_CURRENT_WORKING_INVOICE = 'SET_CURRENT_WORKING_INVOICE';\nexport const SET_CURRENT_WORKING_PAYMENT_INTENT = 'SET_CURRENT_WORKING_PAYMENT_INTENT';\nexport const SET_BILLING_PORTAL_SESSION = 'SET_BILLING_PORTAL_SESSION';\nexport const SET_STRIPE_PRICE_DATA = 'SET_STRIPE_PRICE_DATA';\nexport const SET_SUBSCRIPTION_DETAILS = 'SET_SUBSCRIPTION_DETAILS';\nexport const SET_STRIPE_IDENTITIES = 'SET_STRIPE_IDENTITIES';\nexport const SET_STRIPE_ACCOUNT = 'SET_STRIPE_ACCOUNT';\n\n// square.ts\nexport const SET_SQUARE_LOADING = 'SET_SQUARE_LOADING';\n\n// maintenance.js\nexport const SET_MAINTENANCE_LOADING = 'SET_MAINTENANCE_LOADING';\nexport const SET_CURRENT_VEHICLE_MAINTENANCE = 'SET_CURRENT_VEHICLE_MAINTENANCE';\nexport const SET_CURRENT_VEHICLE_RECALLS = 'SET_CURRENT_VEHICLE_RECALLS';\nexport const RESET_CURRENT_WORKING_MAINTENANCE_ITEM = 'RESET_CURRENT_WORKING_MAINTENANCE_ITEM';\n\n// template.js\nexport const SET_RIGHT_SIDEBAR_OPEN = 'SET_RIGHT_SIDEBAR_OPEN';\nexport const SET_RIGHT_SIDEBAR_MODE = 'SET_RIGHT_SIDEBAR_MODE';\nexport const SET_RIGHT_SIDEBAR_TITLE = 'SET_RIGHT_SIDEBAR_TITLE';\nexport const SET_CURRENT_WORKING_TOOL = 'SET_CURRENT_WORKING_TOOL';\nexport const SET_SELECTED_FIELD = 'SET_SELECTED_FIELD';\nexport const SET_SELECTED_FIELD_V2 = 'SET_SELECTED_FIELD_V2';\nexport const REMOVE_FIELD = 'REMOVE_FIELD';\nexport const REMOVE_ALL_FIELDS = 'REMOVE_ALL_FIELDS';\nexport const SET_SELECTED_FIELD_INDEX_V2 = 'SET_SELECTED_FIELD_INDEX_V2';\nexport const SET_EXISTING_DATA = 'SET_EXISTING_DATA';\nexport const SET_NEW_DATA = 'SET_NEW_DATA';\nexport const SET_TOOLS_ACTIVE = 'SET_TOOLS_ACTIVE';\nexport const SET_CANVAS_ACTIVE = 'SET_CANVAS_ACTIVE';\nexport const RESET_TEMPLATE_DATA = 'RESET_TEMPLATE_DATA';\nexport const SET_FIELD_CURRENT_SIGNER = 'SET_FIELD_CURRENT_SIGNER';\nexport const SET_DOCUMENT_IMAGES = 'SET_DOCUMENT_IMAGES';\nexport const UPDATE_DOCUMENT_TEMPLATE_DATA = 'UPDATE_DOCUMENT_TEMPLATE_DATA';\nexport const ADD_TO_DOCUMENT_TEMPLATE_DATA = 'ADD_TO_DOCUMENT_TEMPLATE_DATA';\n\n// taxes.js\nexport const SET_TAXES_LOADING = 'SET_TAXES_LOADING';\nexport const SET_TAX_CATEGORIES = 'SET_TAX_CATEGORIES';\nexport const SET_CURRENT_WORKING_TAX_CATEGORY = 'SET_CURRENT_WORKING_TAX_CATEGORY';\nexport const SET_TAX_CATEGORY_FORM_ERRORS = 'SET_TAX_CATEGORY_FORM_ERRORS';\nexport const CLEAR_TAX_CATEGORY_FORM_ERRORS = 'CLEAR_TAX_CATEGORY_FORM_ERRORS';\nexport const RESET_CURRENT_WORKING_TAX_CATEGORY = 'RESET_CURRENT_WORKING_TAX_CATEGORY';\n\n// tenant-checkout.ts\nexport const SET_TENANT_CHECKOUT_DATES = 'SET_TENANT_CHECKOUT_DATES';\nexport const SET_TENANT_CHECKOUT_LOCATION = 'SET_TENANT_CHECKOUT_LOCATION';\nexport const SET_TENANT_CHECKOUT_DURATIONS = 'SET_TENANT_CHECKOUT_DURATIONS';\nexport const SET_TENANT_CHECKOUT_CUSTOM_ORDER_FIELDS = 'SET_TENANT_CHECKOUT_CUSTOM_ORDER_FIELDS';\nexport const SET_TENANT_CHECKOUT_BOOKING_ID = 'SET_TENANT_CHECKOUT_BOOKING_ID';\nexport const SET_TENANT_CHECKOUT_CUSTOMER_TOS_AGREE = 'SET_TENANT_CHECKOUT_CUSTOMER_TOS_AGREE';\nexport const SET_TENANT_CHECKOUT_COSTS = 'SET_TENANT_CHECKOUT_COSTS';\nexport const SET_TENANT_CHECKOUT_LISTING_ID = 'SET_TENANT_CHECKOUT_LISTING_ID';\nexport const SET_TENANT_CHECKOUT_CUSTOMERS = 'SET_TENANT_CHECKOUT_CUSTOMERS';\nexport const SET_TENANT_CHECKOUT_CUSTOMER_BY_INDEX = 'SET_TENANT_CHECKOUT_CUSTOMER_BY_INDEX';\nexport const SET_TENANT_CHECKOUT_EXTRAS_V2 = 'SET_TENANT_CHECKOUT_EXTRAS_V2';\nexport const SET_TENANT_CHECKOUT_REQUIRED_EXTRAS_V2 = 'SET_TENANT_CHECKOUT_REQUIRED_EXTRAS_V2';\nexport const SET_TENANT_CHECKOUT_REQUIRED_EXTRAS = 'SET_TENANT_CHECKOUT_REQUIRED_EXTRAS';\nexport const SET_TENANT_CHECKOUT_DELIVERY_ADDRESS_FORM_SHOW = 'SET_TENANT_CHECKOUT_DELIVERY_ADDRESS_FORM_SHOW';\nexport const SET_TENANT_CHECKOUT_STRIPE_PAYMENT_INTENT = 'SET_TENANT_CHECKOUT_STRIPE_PAYMENT_INTENT';\nexport const SET_TENANT_CHECKOUT_DIALOG = 'SET_TENANT_CHECKOUT_DIALOG';\nexport const SET_TENANT_CHECKOUT_ORDER_DELIVERY_ADDRESS = 'SET_TENANT_CHECKOUT_ORDER_DELIVERY_ADDRESS';\nexport const SET_TENANT_CHECKOUT_ORDER_DISTANCE_ALLOWANCE = 'SET_TENANT_CHECKOUT_ORDER_DISTANCE_ALLOWANCE';\nexport const RESET_TENANT_CHECKOUT_DELIVERY_RESULTS = 'RESET_TENANT_CHECKOUT_DELIVERY_RESULTS';\nexport const SET_TENANT_CHECKOUT_DELIVERY_RESULTS = 'SET_TENANT_CHECKOUT_DELIVERY_RESULTS';\nexport const SET_TENANT_CHECKOUT_DISCOUNT = 'SET_TENANT_CHECKOUT_DISCOUNT';\nexport const RESET_TENANT_CHECKOUT_DISCOUNT = 'RESET_TENANT_CHECKOUT_DISCOUNT';\nexport const SET_TENANT_CHECKOUT_FORM_ERRORS = 'SET_TENANT_CHECKOUT_FORM_ERRORS';\nexport const RESET_TENANT_CHECKOUT_FORM_ERRORS = 'RESET_TENANT_CHECKOUT_FORM_ERRORS';\n\n\n// checkout\nexport const SET_CHECKOUT_LOADING = 'SET_CHECKOUT_LOADING';\nexport const CLEAR_CHECKOUT_FORM_ERRORS = 'CLEAR_CHECKOUT_FORM_ERRORS';\nexport const SET_CHECKOUT_DISCOUNT = 'SET_CHECKOUT_DISCOUNT';\nexport const RESET_CHECKOUT_DISCOUNT = 'RESET_CHECKOUT_DISCOUNT';\nexport const SET_ORDER_DELIVERY = 'SET_ORDER_DELIVERY';\nexport const SET_CHECKOUT_STRIPE = 'SET_CHECKOUT_STRIPE';\nexport const SET_CHECKOUT_AVAILABILITY = 'SET_CHECKOUT_AVAILABILITY';\nexport const SET_CHECKOUT_INITIALIZED = 'SET_CHECKOUT_INITIALIZED';\nexport const SET_CHECKOUT_ORDER_CUSTOMER = 'SET_CHECKOUT_ORDER_CUSTOMER';\nexport const SET_CHECKOUT_ORDER_CUSTOMER_BY_INDEX = 'SET_CHECKOUT_ORDER_CUSTOMER_BY_INDEX';\nexport const SET_CHECKOUT_ORDER_CUSTOMER_AGREE_TOS = 'SET_CHECKOUT_ORDER_CUSTOMER_AGREE_TOS';\nexport const SET_CHECKOUT_ORDER_DATES = 'SET_CHECKOUT_ORDER_DATES';\nexport const SET_CHECKOUT_ORDER_CUSTOM_FIELDS = 'SET_CHECKOUT_ORDER_CUSTOM_FIELDS';\nexport const SET_CHECKOUT_ORDER_DELIVERY_ADDRESS = 'SET_CHECKOUT_ORDER_DELIVERY_ADDRESS';\nexport const SET_CHECKOUT_RENTER_AUTHENTICATED = 'SET_CHECKOUT_RENTER_AUTHENTICATED';\nexport const SET_CHECKOUT_ORDER_REQUIRED_EXTRAS = 'SET_CHECKOUT_ORDER_REQUIRED_EXTRAS';\nexport const SET_RESERVATION_REQUEST_LISTING_ID = 'SET_RESERVATION_REQUEST_LISTING_ID';\nexport const SET_RESERVATION_REQUEST_DATES = 'SET_RESERVATION_REQUEST_DATES';\nexport const SET_RESERVATION_REQUEST_DURATIONS = 'SET_RESERVATION_REQUEST_DURATIONS';\nexport const SET_RESERVATION_REQUEST_EXTRAS = 'SET_RESERVATION_REQUEST_EXTRAS';\nexport const SET_RESERVATION_REQUEST_EXTRAS_V2 = 'SET_RESERVATION_REQUEST_EXTRAS_V2';\nexport const SET_RESERVATION_REQUEST_REQUIRED_EXTRAS_V2 = 'SET_RESERVATION_REQUEST_REQUIRED_EXTRAS_V2';\nexport const SET_RESERVATION_REQUEST_REQUIRED_EXTRAS_V2_AT_INDEX = 'SET_RESERVATION_REQUEST_REQUIRED_EXTRAS_V2_AT_INDEX';\nexport const SET_RESERVATION_REQUEST_PRICING = 'SET_RESERVATION_REQUEST_PRICING';\n\n// coupon.js\nexport const SET_COUPON_LOADING = 'SET_COUPON_LOADING';\nexport const SET_COUPONS = 'SET_COUPONS';\nexport const UPDATE_COUPON = 'UPDATE_COUPON';\nexport const SET_COUPON_REDEMPTIONS = 'SET_COUPON_REDEMPTIONS';\nexport const CLEAR_COUPON_FORM_ERRORS = 'CLEAR_COUPON_FORM_ERRORS';\nexport const SET_COUPON_FORM_ERROR = 'SET_COUPON_FORM_ERROR';\nexport const SET_COUPON_FORM_BUSY = 'SET_COUPON_FORM_BUSY';\n\n// notes.js\nexport const SET_NOTES_LOADING = 'SET_NOTES_LOADING';\n\n\n// custom-fields.js\nexport const SET_CUSTOM_FIELDS_LOADING = 'SET_CUSTOM_FIELDS_LOADING';\nexport const SET_CUSTOM_FIELDS = 'SET_CUSTOM_FIELDS';\nexport const SET_CUSTOM_FIELDS_FORM_BUSY = 'SET_CUSTOM_FIELDS_FORM_BUSY';\n\n// default-properties.js\nexport const SET_DEFAULT_PROPERTIES = 'SET_DEFAULT_PROPERTIES';\nexport const CLEAR_DEFAULT_PROPERTIES_FORM = 'CLEAR_DEFAULT_PROPERTIES_FORM';\nexport const SET_DEFAULT_PROPERTIES_FORM_BUSY = 'SET_DEFAULT_PROPERTIES_FORM_BUSY';\nexport const SET_DEFAULT_PROPERTIES_FORM_ERRORS = 'SET_DEFAULT_PROPERTIES_FORM_ERRORS';\n\n// tolls.js\nexport const SET_TOLLS_LOADING = 'SET_TOLLS_LOADING';\nexport const SET_TOLL_AGENCIES = 'SET_TOLL_AGENCIES';\nexport const SET_TOLL_ACCOUNTS = 'SET_TOLL_ACCOUNTS';\nexport const SET_TOLL_AGENCIES_WISHLIST = 'SET_TOLL_AGENCIES_WISHLIST';\nexport const SET_TOLL_TRANSACTIONS = 'SET_TOLL_TRANSACTIONS';\nexport const SET_TOLL_TRANSPONDERS = 'SET_TOLL_TRANSPONDERS';\n\n// whats-new.js\nexport const SET_WHATS_NEW_LOADING = 'SET_WHATS_NEW_LOADING';\nexport const SET_WHATS_NEW_COUNT = 'SET_WHATS_NEW_COUNT';\nexport const SET_WHATS_NEW = 'SET_WHATS_NEW';\nexport const MERGE_WHATS_NEW = 'MERGE_WHATS_NEW';\nexport const SET_WHATS_NEW_IMAGES = 'SET_WHATS_NEW_IMAGES';\nexport const SET_SHOW_WHATS_NEW_SIDEBAR = 'SET_SHOW_WHATS_NEW_SIDEBAR';\n\n\n// fleet.js\nexport const SET_COMPANY_BRANCHES = 'SET_COMPANY_BRANCHES';\nexport const SET_COMPANY_BRANCH = 'SET_COMPANY_BRANCH';\nexport const SET_COMPANY_BRANCHES_LOADING = 'SET_COMPANY_BRANCHES_LOADING';\nexport const SET_ACTION_ITEMS = 'SET_ACTION_ITEMS';\nexport const SET_ACTION_ITEM = 'SET_ACTION_ITEM';\nexport const ACTION_ITEM_CREATED = 'ACTION_ITEM_CREATED';\nexport const ACTION_ITEM_DELETED = 'ACTION_ITEM_DELETED';\nexport const SET_FLEET_FORM_ERROR = 'SET_FLEET_FORM_ERROR';\nexport const CLEAR_FLEET_FORM_ERRORS = 'CLEAR_FLEET_FORM_ERRORS';\n\n// outdoorsy.js\nexport const SET_OUTDOORSY_LOADING = 'SET_OUTDOORSY_LOADING';\nexport const SET_OUTDOORSY_CONNECTIONS = 'SET_OUTDOORSY_CONNECTIONS';\nexport const SET_OUTDOORSY_LISTINGS = 'SET_OUTDOORSY_LISTINGS';\nexport const SET_OUTDOORSY_BOOKINGS = 'SET_OUTDOORSY_BOOKINGS';\n\n// hq-rentals.js\nexport const SET_HQRENTALS_LOADING = 'SET_HQRENTALS_LOADING';\nexport const SET_HQRENTALS_CONNECTIONS = 'SET_HQRENTALS_CONNECTIONS';\nexport const SET_HQRENTALS_LISTINGS = 'SET_HQRENTALS_LISTINGS';\nexport const SET_HQRENTALS_BOOKINGS = 'SET_HQRENTALS_BOOKINGS';\nexport const SET_HQRENTALS_CONTACTS = 'SET_HQRENTALS_CONTACTS';\n\n// providers.js\nexport const SET_PROVIDERS_LOADING = 'SET_PROVIDERS_LOADING';\nexport const SET_PAYMENT_PROVIDERS = 'SET_PAYMENT_PROVIDERS';\n\n// tur0-research.js\nexport const SET_TURO_RESEARCH_LOADING = 'SET_TURO_RESEARCH_LOADING';\nexport const SET_TURO_ALL_DELIVERY_LOCATIONS = 'SET_TURO_ALL_DELIVERY_LOCATIONS';\nexport const SET_TURO_ALL_VEHICLE_MAKES = 'SET_TURO_ALL_VEHICLE_MAKES';\nexport const SET_TURO_RESEARCH_SEARCH_LIST = 'SET_TURO_RESEARCH_SEARCH_LIST';\n\n// commission-partner.js\nexport const SET_COMMISSION_PARTNER_LOADING = 'SET_COMMISSION_PARTNER_LOADING';\nexport const SET_COMMISSION_PARTNERS = 'SET_COMMISSION_PARTNERS';\nexport const SET_COMMISSION_PARTNER = 'SET_COMMISSION_PARTNER';\nexport const SET_COMMISSIONS = 'SET_COMMISSIONS';\nexport const CLEAR_COMMISSION_PARTNER_COUPON_FORM_ERRORS = 'CLEAR_COMMISSION_PARTNER_COUPON_FORM_ERRORS';\n\n// order\nexport const SET_ORDERS_LOADING = 'SET_ORDERS_LOADING';\nexport const SET_ORDER = 'SET_ORDER';\nexport const UPDATE_ORDER_LINE = 'UPDATE_ORDER_LINE';\nexport const SET_ORDER_DOCUMENT = 'SET_ORDER_DOCUMENT';\nexport const SET_ORDER_DOCUMENTS = 'SET_ORDER_DOCUMENTS';\nexport const SET_ORDER_DOCUMENT_DOWNLOAD_STATUS = 'SET_ORDER_DOCUMENT_DOWNLOAD_STATUS';\nexport const SET_ORDER_AVAILABILITY = 'SET_ORDER_AVAILABILITY';\nexport const SET_OPEN_PRICING_WIZARD_DIALOG = 'SET_OPEN_PRICING_WIZARD_DIALOG';\n\n// email.js\nexport const SET_EMAILS_LOADING = 'SET_EMAILS_LOADING';\nexport const SET_EMAILS = 'SET_EMAILS';\nexport const SET_EMAIL_HISTORY = 'SET_EMAIL_HISTORY';\nexport const SET_EMAIL_TEMPLATES = 'SET_EMAIL_TEMPLATES';\nexport const SET_EMAIL_TEMPLATE = 'SET_EMAIL_TEMPLATE';\nexport const SET_EMAIL_FORM_ERROR = 'SET_EMAIL_FORM_ERROR';\nexport const CLEAR_EMAIL_FORM_ERRORS = 'CLEAR_EMAIL_FORM_ERRORS';\n\n\n// webhooks.ts\nexport const SET_WEBHOOKS_LOADING = 'SET_WEBHOOKS_LOADING';\nexport const SET_WEBHOOKS_CONVERSATIONS = 'SET_WEBHOOKS_CONVERSATIONS';\nexport const SET_WEBHOOK_ENDPOINTS = 'SET_WEBHOOK_ENDPOINTS';\nexport const SET_WEBHOOK_ENDPOINT = 'SET_WEBHOOK_ENDPOINT';\nexport const SET_WEBHOOK_ENDPOINT_SECRET = 'SET_WEBHOOK_ENDPOINT_SECRET';\n\n// analytics.js\nexport const SET_ANALYTICS_LOADING = 'SET_ANALYTICS_LOADING';\nexport const SET_CONVERSION_ANALYTICS = 'SET_CONVERSION_ANALYTICS';\nexport const SET_VEHICLE_ANALYTICS = 'SET_VEHICLE_ANALYTICS';\nexport const SET_VEHICLES_ANALYTICS = 'SET_VEHICLES_ANALYTICS';\n\n// custodial.js\nexport const SET_CUSTODIAN_LOADING = 'SET_CUSTODIAN_LOADING';\nexport const SET_CUSTODIANS = 'SET_CUSTODIANS';\nexport const SET_CUSTODIAN_INVITE = 'SET_CUSTODIAN_INVITE';\nexport const SET_CUSTODIAN_LISTINGS = 'SET_CUSTODIAN_LISTINGS';\nexport const SET_CUSTODIAN_BOOKINGS = 'SET_CUSTODIAN_BOOKINGS';\n\n// pricing\nexport const SET_PRICING_LOADING = 'SET_PRICING_LOADING';\nexport const SET_PRICING_RULES = 'SET_PRICING_RULES';\n\nexport const SET_PRICING_STRUCTURE = 'SET_PRICING_STRUCTURE';\nexport const SET_PRICING_STRUCTURES = 'SET_PRICING_STRUCTURES';\nexport const RESET_CURRENT_WORKING_PRICING_STRUCTURE = 'RESET_CURRENT_WORKING_PRICING_STRUCTURE';\n\n// lula.js\nexport const SET_LULA_LOADING = 'SET_LULA_LOADING';\nexport const SET_LULA_CONNECTIONS = 'SET_LULA_CONNECTIONS';\nexport const SET_LULA_VEHICLES = 'SET_LULA_VEHICLES';\n\n\n// twisted-road.js\n\nexport const SET_TWISTED_ROAD_LOADING = 'SET_TWISTED_ROAD_LOADING';\nexport const SET_TWISTED_ROAD_CONNECTIONS = 'SET_TWISTED_ROAD_CONNECTIONS';\nexport const SET_TWISTED_ROAD_VEHICLES = 'SET_TWISTED_ROAD_VEHICLES';\n\n// files.js\nexport const SET_FILES = 'SET_FILES';\nexport const MERGE_FILES = 'MERGE_FILES';\nexport const SET_FILES_PAGINATION = 'SET_FILES_PAGINATION';\nexport const SET_FILES_LOADING = 'SET_FILES_LOADING';\n\n// barcode.js\nexport const SET_BARCODE_LOADING = 'SET_BARCODE_LOADING';\nexport const SET_BARCODE = 'SET_BARCODE';\n\n// trip-extras.js\nexport const SET_EXTRAS_LOADING = 'SET_EXTRAS_LOADING';\nexport const SET_EXTRAS = 'SET_EXTRAS';\nexport const SET_TRIP_EXTRA_SETTING_DIALOG = 'SET_TRIP_EXTRA_SETTING_DIALOG';\nexport const SET_REQUIRED_EXTRA_ADD_EDIT_DIALOG = 'SET_REQUIRED_EXTRA_ADD_EDIT_DIALOG';\nexport const SET_REQUIRED_EXTRA_ADD_EDIT_DATA = 'SET_REQUIRED_EXTRA_ADD_EDIT_DATA';\nexport const SET_REGULAR_EXTRA_DIALOG = 'SET_REGULAR_EXTRA_DIALOG';\nexport const SET_EXTRA_LISTINGS_DIALOG = 'SET_EXTRA_LISTINGS_DIALOG';\nexport const SET_REGULAR_EXTRA_DATA = 'SET_REGULAR_EXTRA_DATA';\n\n// axle\nexport const SET_AXLE_LOADING = 'SET_AXLE_LOADING';\nexport const SET_AXLE = 'SET_AXLE';\nexport const SET_AXLE_IGNITIONS = 'SET_AXLE_IGNITIONS';\nexport const MERGE_AXLE_IGNITION = 'MERGE_AXLE_IGNITION';\nexport const SET_INCOMING_AXLE_IGNITION = 'SET_INCOMING_AXLE_IGNITION';\n\n// theme.js\nexport const SET_STORE_THEMES = 'SET_STORE_THEMES';\nexport const SET_STORE_THEME_DATA = 'SET_STORE_THEME_DATA';\n\n// braintree.ts\nexport const SET_BRAINTREE_LOADING = 'SET_BRAINTREE_LOADING';\n\n// tags\nexport const SET_TAGS_LOADING = 'SET_TAGS_LOADING';\nexport const SET_TAGS = 'SET_TAGS';","import emitter from 'tiny-emitter/instance'\n\nexport const EventBus = {\n  $on: (...args) => emitter.on(...args),\n  $once: (...args) => emitter.once(...args),\n  $off: (...args) => emitter.off(...args),\n  $emit: (...args) => emitter.emit(...args)\n}\n","/**\n * Deep copy the given object.\n *\n * @param  {Object} obj\n * @return {Object}\n */\nexport function deepCopy<T>(obj: T): T {\n    if (obj === null || typeof obj !== 'object') {\n        return obj;\n    }\n\n    const copy: any = Array.isArray(obj) ? [] : {};\n\n    Object.keys(obj).forEach((key) => {\n        copy[key] = deepCopy((obj as any)[key]);\n    });\n\n    return copy as T;\n}\n\n/**\n * If the given value is not an array, wrap it in one.\n *\n * @param  value\n * @return {Array}\n */\nexport function arrayWrap<T>(value: T | T[]): T[] {\n    return Array.isArray(value) ? value : [value];\n}\n","import {arrayWrap} from './util';\n\nexport default class Errors {\n    errors: Record<string, string[]>;\n\n    /**\n     * Create a new error bag instance.\n     */\n    constructor() {\n        this.errors = {};\n    }\n\n    /**\n     * Set the errors object or field error messages.\n     *\n     * @param {Object|String} field\n     * @param {Array|String|undefined} messages\n     */\n    set(field: string | Record<string, string[]>, messages: string[] | string | undefined = undefined): void {\n        if (typeof field === 'object') {\n            this.errors = field;\n        } else {\n            this.set({...this.errors, [field]: arrayWrap(messages)});\n        }\n    }\n\n    /**\n     * Get all the errors.\n     *\n     * @return {Object}\n     */\n    all(): Record<string, string[]> {\n        return this.errors;\n    }\n\n    /**\n     * Determine if there is an error for the given field.\n     *\n     * @param  {String} field\n     * @return {Boolean}\n     */\n    has(field: string): boolean {\n        return this.errors.hasOwnProperty(field);\n    }\n\n    /**\n     * Determine if there are any errors for the given fields.\n     *\n     * @param  {...String} fields\n     * @return {Boolean}\n     */\n    hasAny(...fields: string[]): boolean {\n        return fields.some(field => this.has(field));\n    }\n\n    /**\n     * Determine if there are any errors.\n     *\n     * @return {Boolean}\n     */\n    any(): boolean {\n        return Object.keys(this.errors).length > 0;\n    }\n\n    /**\n     * Get the first error message for the given field.\n     *\n     * @param  {String} field\n     * @return {String|undefined}\n     */\n    get(field: string): string | undefined {\n        if (this.has(field)) {\n            return this.getAll(field)[0];\n        }\n    }\n\n    /**\n     * Get all the error messages for the given field.\n     *\n     * @param  {String} field\n     * @return {Array}\n     */\n    getAll(field: string): string[] {\n        return arrayWrap(this.errors[field] || []);\n    }\n\n    /**\n     * Get the error message for the given fields.\n     *\n     * @param  {...String} fields\n     * @return {Array}\n     */\n    only(...fields: string[]): string[] {\n        const messages = [];\n\n        fields.forEach(field => {\n            const message = this.get(field);\n\n            if (message) {\n                messages.push(message);\n            }\n        });\n\n        return messages;\n    }\n\n    /**\n     * Get all the errors in a flat array.\n     *\n     * @return {Array}\n     */\n    flatten(): string[] {\n        return Object.values(this.errors).reduce((a, b) => a.concat(b), []);\n    }\n\n    /**\n     * Clear one or all error fields.\n     *\n     * @param {String|undefined} field\n     */\n    clear(field: string | undefined = undefined): void {\n        const errors: Record<string, string[]> = {};\n        \n        if (field) {\n            Object.keys(this.errors).forEach(key => {\n                if (key !== field) {\n                    errors[key] = this.errors[key];\n                }\n            });\n        }\n\n        this.set(errors);\n    }\n}\n","import Errors from './Errors';\nimport {deepCopy} from './util';\n\ninterface ErrorResponse {\n    data: {\n        errors?: Record<string, string[]>;\n        message?: string;\n    }\n}\n\nclass Form<T extends Record<string, any>> {\n    static ignore: string[];\n    static errorMessage: string;\n    busy: boolean;\n    successful: boolean;\n    originalData: T;\n    errors: Errors;\n\n    // Dynamic properties from `T`\n    [key: string]: any; // Allows dynamic assignment of properties\n\n    /**\n     * Create a new form instance.\n     *\n     * @param {Object} data\n     */\n    constructor(data: T = {} as T) {\n        this.busy = false;\n        this.successful = false;\n        this.errors = new Errors();\n        this.originalData = deepCopy(data);\n\n        Object.assign(this, data);\n    }\n\n    /**\n     * Fill form data.\n     *\n     * @param {Object} data\n     */\n    fill(data: Partial<T> | undefined): void {\n        if (!data || typeof data !== 'object') {\n            // Do nothing if `data` is undefined or not an object\n            return;\n        }\n\n        this.keys().forEach((key) => {\n            if (key in data) {\n                this[key] = data[key];\n            }\n        });\n    }\n\n\n    /**\n     * Get the form data.\n     *\n     * @return {Object}\n     */\n    data(): T {\n        const result = {} as T;\n        this.keys().forEach((key) => {\n            (result as any)[key] = this[key]; // Safely assign properties\n        });\n        return result;\n    }\n\n    dataGet(name: string): any {\n        return this.originalData[name];\n    }\n\n    /**\n     * Get the form data keys.\n     *\n     * @return {Array}\n     */\n    keys(): string[] {\n        return Object.keys(this)\n            .filter(key => !Form.ignore.includes(key));\n    }\n\n    startProcessing(): void {\n        this.errors.clear();\n        this.busy = true;\n        this.successful = false;\n    }\n\n    finishProcessing(success = true): void {\n        this.busy = false;\n        this.successful = success;\n    }\n\n    /**\n     * Extract the errors from the response object.\n     *\n     * @param  {Object} response\n     * @return {Object}\n     */\n    extractErrors(response: ErrorResponse): object {\n        const {data} = response;\n\n        if (!data || typeof data !== 'object') {\n            return {error: Form.errorMessage};\n        }\n\n        if (data.errors) {\n            return {...data.errors};\n        }\n\n        if (data.message) {\n            return {error: data.message};\n        }\n\n        return {...data};\n    };\n\n    /**\n     * Clear errors on keydown.\n     *\n     * @param {KeyboardEvent} event\n     */\n    onKeydown(event: KeyboardEvent): void {\n        if (event.target instanceof Element) {\n            const targetElement = event.target as HTMLInputElement;\n            if (targetElement.name) {\n                this.errors.clear(targetElement.name);\n            }\n        }\n    }\n}\n\nForm.errorMessage = 'Something went wrong. Please try again.';\nForm.ignore = ['busy', 'successful', 'errors', 'originalData'];\n\nexport default Form;\n","import { Commit } from 'vuex';\nimport { AxiosResponse } from 'axios';\n\n/**\n * Sets the loading state for a given subject.\n * @param commit - Vuex commit function\n * @param commitName - The name of the commit\n * @param subject - The subject of the loading state\n * @param value - The loading state value\n */\nexport const setLoading = (commit: Commit, commitName: string, subject: string, value: boolean) => {\n    commit(commitName, { subject, loading: value });\n};\n\n\n/**\n * Performs an API request with loading state management.\n * @template T - The type of the response data\n * @param commit - Vuex commit function\n * @param loadingCommitName - The name of the loading commit\n * @param subject - The subject of the loading state\n * @param apiCall - The API call function\n * @returns The response data\n * @throws The error thrown by the API call\n */\nexport const performApiRequest = async <T>(\n    commit: Commit,\n    loadingCommitName: string,\n    subject: string,\n    apiCall: () => Promise<AxiosResponse<T>>\n): Promise<T> => {\n    try {\n        setLoading(commit, loadingCommitName, subject, true);\n        const response = await apiCall();\n        return response.data;\n    } catch (error) {\n        console.error(`Error during API call for ${subject}: ${error}`);\n        throw error;\n    } finally {\n        setLoading(commit, loadingCommitName, subject, false);\n    }\n};","import axios from 'axios';\nimport * as types from '../mutation-types';\nimport {EventBus} from '@/plugins/eventBus';\nimport {Form} from '@/plugins/FWForms/index';\nimport {RootState} from '@/types/RootState';\nimport {Module} from 'vuex';\nimport {performApiRequest} from '@/store/helpers/vuex-helpers';\nimport {AffiliateInterface} from '@/types';\nimport {push} from 'notivue'\n\nexport interface AffiliateState {\n    loading: Record<string, boolean>;\n    affiliate: AffiliateInterface;\n    affiliatePayouts: any[];\n    affiliateApplication: any;\n    affiliatePayoutsFuture: number;\n    affiliatePayoutsPast: number;\n    affiliateForm: Form<any>;\n}\n\n\nconst state: AffiliateState = {\n    loading: {\n        affiliateApplication: false,\n        affiliateAgreeTOS: false,\n        getAffiliate: false,\n        getAffiliatePayouts: false,\n    },\n    affiliate: null,\n    affiliatePayouts: [],\n    affiliateApplication: {},\n    affiliatePayoutsFuture: 0,\n    affiliatePayoutsPast: 0,\n    affiliateForm: new Form(),\n};\n\n\nconst mutations = {\n    [types.SET_AFFILIATE_LOADING](state: AffiliateState, loading: { subject: string, loading: boolean }) {\n        state.loading[loading.subject] = loading.loading;\n    },\n    [types.SET_AFFILIATE](state: AffiliateState, affiliate: AffiliateInterface) {\n        state.affiliate = affiliate;\n    },\n    [types.SET_AFFILIATE_PAYOUTS](state: AffiliateState, payouts) {\n        state.affiliatePayouts = payouts;\n    },\n    [types.SET_AFFILIATE_FUTURE_PAYOUT](state: AffiliateState, payout) {\n        state.affiliatePayoutsFuture = payout;\n    },\n    [types.SET_AFFILIATE_PAST_PAYOUT](state: AffiliateState, payout) {\n        state.affiliatePayoutsPast = payout;\n    },\n    [types.SET_AFFILIATE_APPLICATION](state: AffiliateState, application) {\n        state.affiliateApplication = application;\n    },\n};\n\n\nconst actions = {\n\n    /**\n     * Submit Affiliate application\n     */\n    async submitAffiliateApplication({commit, state}, data) {\n        try {\n            const responseData = await performApiRequest(commit, 'SET_AFFILIATE_LOADING', 'submit', () => axios.post('/v1/affiliate/signup', data));\n            EventBus.$emit('affiliate-application-submit-success');\n            commit(types.SET_AFFILIATE_APPLICATION, responseData.application);\n        } catch (error) {\n            state.affiliateForm.errors.set(error?.response?.data?.errors || []);\n        }\n    },\n\n    /**\n     * Get Affiliate application\n     */\n    async affiliateApplications({commit, state}) {\n        try {\n            const responseData = await performApiRequest(commit, 'SET_AFFILIATE_LOADING', 'affiliateApplication', () => axios.get('/v1/affiliate/application'));\n            commit(types.SET_AFFILIATE_APPLICATION, responseData.application);\n            commit(types.SET_AFFILIATE, responseData.affiliate);\n        } catch (error) {\n            state.affiliateForm.errors.set(error?.response?.data?.errors || []);\n        }\n    },\n\n    /**\n     * Get Affiliate\n     */\n    async getAffiliate({commit}) {\n        try {\n            const responseData = await performApiRequest(commit, 'SET_AFFILIATE_LOADING', 'getAffiliate', () => axios.get('/v1/affiliate'));\n            commit(types.SET_AFFILIATE, responseData.affiliate);\n        } catch (error) {\n            state.affiliateForm.errors.set(error?.response?.data?.errors || []);\n        }\n    },\n\n    /**\n     * Get Affiliates Payouts\n     */\n    async getAffiliatePayouts({commit}) {\n        try {\n            const responseData = await performApiRequest(commit, 'SET_AFFILIATE_LOADING', 'getAffiliatePayouts', () => axios.get('/v1/affiliate/payouts'));\n            commit(types.SET_AFFILIATE_PAYOUTS, responseData.payouts);\n            commit(types.SET_AFFILIATE_FUTURE_PAYOUT, responseData.future_payouts);\n            commit(types.SET_AFFILIATE_PAST_PAYOUT, responseData.past_payouts);\n        } catch (error) {\n            state.affiliateForm.errors.set(error?.response?.data?.errors || []);\n        }\n    },\n\n    /**\n     * Affiliate TOS agreement\n     */\n    async affiliateTOSAgree({commit}) {\n        try {\n            const responseData = await performApiRequest(commit, 'SET_AFFILIATE_LOADING', 'getAffiliate', () => axios.post('/v1/affiliate/agree-tos'));\n            push.success({\n                message: 'Agree to TOS recorded successfully!',\n            });\n            EventBus.$emit('affiliate-application-tos-agree-success');\n            return responseData;\n        } catch (error) {\n            state.affiliateForm.errors.set(error?.response?.data?.errors || []);\n        }\n    },\n};\n\n\nconst affiliateModule: Module<AffiliateState, RootState> = {\n    namespaced: true,\n    state,\n    mutations,\n    actions,\n    getters: {\n        loading: (state: AffiliateState) => state.loading,\n        affiliate: (state: AffiliateState) => state.affiliate,\n        affiliateForm: (state: AffiliateState) => state.affiliateForm,\n        affiliatePayouts: (state: AffiliateState) => state.affiliatePayouts,\n        affiliateApplication: (state: AffiliateState) => state.affiliateApplication,\n        affiliatePayoutsPast: (state: AffiliateState) => state.affiliatePayoutsPast,\n        affiliatePayoutsFuture: (state: AffiliateState) => state.affiliatePayoutsFuture,\n    }\n};\n\n\nexport default affiliateModule;","import dayjs from 'dayjs';\n\n/**\n * Builds a query string from an object of parameters, with optional ignore of empty values and handling of nested objects.\n * @param params - The parameters object\n * @param removeEmpty - Whether to remove empty values\n * @returns The query string\n */\nexport function createUrlQueryString(params: Record<string, any>, removeEmpty = true): string {\n    if (params === undefined || typeof params !== 'object') {\n        throw new Error('Params must be an object');\n    }\n\n    if (removeEmpty) {\n        params = Object.entries(params)\n            .filter(([, value]) => {\n                // Filter out null, undefined, empty strings, and empty arrays\n                if (value == null || value === '') {\n                    return false;\n                }\n                return !(Array.isArray(value) && value.length === 0);\n            })\n            .reduce((acc, [key, value]) => ({...acc, [key]: value}), {});\n    }\n\n    const buildNestedQueryString = (obj: Record<string, any>, parentKey = ''): string => {\n        return Object.entries(obj)\n            .map(([key, value]) => {\n                const fullKey = parentKey ? `${parentKey}[${key}]` : key;\n\n                if (value === null || value === undefined) {\n                    return `${fullKey}=`;\n                } else if (typeof value === 'object' && !Array.isArray(value)) {\n                    return buildNestedQueryString(value, fullKey);\n                } else if (Array.isArray(value)) {\n\n                    return value.length\n                        ? value.map((arrayItem) => `${fullKey}[]=${encodeURIComponent(String(arrayItem))}`).join('&')\n                        : `${fullKey}=`; // Handle empty arrays\n                } else if (\n                    typeof value === 'string' ||\n                    typeof value === 'number' ||\n                    typeof value === 'boolean'\n                ) {\n                    return `${fullKey}=${encodeURIComponent(value)}`;\n                } else {\n                    throw new Error('Invalid value type');\n                }\n            })\n            .join('&');\n    }\n\n    const queryString = buildNestedQueryString(params);\n    return queryString ? `?${queryString}` : '';\n}\n\n\n/**\n * Builds a query string from an object of parameters, with optional ignore of empty values and handling of nested objects.\n * @param data - The parameters object\n * @param removeEmpty - Whether to remove empty values\n * @returns The query string\n */\nexport const createOrderUrlQueryString = (data, removeEmpty = false) => {\n    if (data === undefined) {\n        return '';\n    }\n    // Check if data is an object\n    if (typeof data !== 'object') {\n        throw new Error('Data must be an object');\n    }\n\n    if (removeEmpty) {\n        Object.keys(data).forEach((key) => {\n            if (data[key] === '' || data[key] === null || data[key] === undefined) {\n                delete data[key];\n            }\n        });\n    }\n\n    let queryString = '?';\n\n    Object.keys(data).forEach((key) => {\n        if (typeof data[key] === 'object') {\n            Object.keys(data[key]).forEach((subKey) => {\n                queryString += `${key}[${subKey}]=${data[key][subKey]}&`;\n            });\n        } else {\n            queryString += `${key}=${data[key]}&`;\n        }\n    });\n\n    // Remove the leading ? if there are no params\n    if (queryString === '?') {\n        queryString = '';\n    }\n\n    // remove last & if any\n    if (queryString[queryString.length - 1] === '&') {\n        queryString = queryString.slice(0, -1);\n    }\n    return queryString;\n};\n\n\nexport const formatQueryStringDate = (date: string) => {\n    if (!date) throw new Error('Date is required');\n\n    const dateWithHyphen = (input: string): string => {\n        const parts = input.split('-');\n        let year = parts[0];\n        if (year.length === 2) year = `20${year}`;\n\n        const newDate = dayjs(`${year}-${parts[1]}-${parts[2]}`);\n        if (newDate.isValid()) {\n            return newDate.format('YYYY-MM-DD');\n        }\n\n        throw new Error('Invalid date format');\n    };\n\n    const dateWithoutHyphen = (input: string, format: string): string => {\n        let year, month, day;\n\n        if (format === 'YYYYMMDD') {\n            year = input.substring(0, 4);\n            month = input.substring(4, 6);\n            day = input.substring(6, 8);\n        } else if (format === 'YYMMDD') {\n            year = `20${input.substring(0, 2)}`;\n            month = input.substring(2, 4);\n            day = input.substring(4, 6);\n        } else {\n            throw new Error('Invalid date format');\n        }\n\n        const newDate = dayjs(`${year}-${month}-${day}`);\n        if (newDate.isValid()) {\n            return newDate.format('YYYY-MM-DD');\n        }\n\n        throw new Error('Invalid date format');\n    };\n\n    if (date.includes('-')) {\n        return dateWithHyphen(date);\n    }\n\n    if (date.length === 8) {\n        return dateWithoutHyphen(date, 'YYYYMMDD');\n    }\n\n    if (date.length === 6) {\n        return dateWithoutHyphen(date, 'YYMMDD');\n    }\n\n    throw new Error('Invalid date format');\n}\n\nexport const formatQueryStringTime = (time: string | undefined): string => {\n    if (!time) return '10:00:00';\n\n    if (time.length !== 4) {\n        throw new Error('Invalid time format. Expected HHMM format.');\n    }\n\n    const hours = time.slice(0, 2);\n    const minutes = time.slice(2, 4);\n\n    return `${hours}:${minutes}:00`;\n};\n\n\nconst baseUrls: Record<string, string> = {\n    production: 'https://tenant.fleetwire.io/',\n    development: 'http://fleetwire.test/',\n};\n\n/**\n * Get the base URL based on the environment mode.\n * @param envOverride Optional override for the environment mode.\n * @returns The base URL for the current or specified environment.\n */\nexport const getBaseUrl = (envOverride: string | null = null): string => {\n    const env = envOverride || import.meta.env.MODE;\n    return baseUrls[env] || baseUrls.development;\n};","import {EventBus} from '@/plugins/eventBus';\nimport {performApiRequest} from '@/store/helpers/vuex-helpers';\nimport axios from 'axios';\nimport * as types from '@/store/mutation-types';\nimport {Module} from 'vuex';\nimport {createUrlQueryString} from '@/utils/urls';\n\nexport interface AnalyticsState {\n    loading: Record<string, boolean>;\n    analytics: any;\n    conversionAnalytics: any;\n    vehicleAnalytics: any;\n    allVehiclesAnalytics: any;\n}\n\ntype AnalyticsData = {\n    listing_id?: number,\n    start?: string,\n    end?: string,\n}\n\n\n// state\nconst state: AnalyticsState = {\n    loading: {\n        analytics: false,\n        fetchCart: false,\n    },\n    analytics: {},\n    conversionAnalytics: {},\n    vehicleAnalytics: {},\n    allVehiclesAnalytics: {},\n};\n\nconst mutations = {\n    [types.SET_ANALYTICS_LOADING](state: AnalyticsState, loading: { subject: string, loading: boolean }) {\n        state.loading[loading.subject] = loading.loading;\n    },\n    [types.SET_CONVERSION_ANALYTICS](state: AnalyticsState, analytics) {\n        state.conversionAnalytics = analytics;\n    },\n    [types.SET_VEHICLE_ANALYTICS](state: AnalyticsState, analytics) {\n        state.vehicleAnalytics = analytics;\n    },\n    [types.SET_VEHICLES_ANALYTICS](state: AnalyticsState, analytics) {\n        state.allVehiclesAnalytics = analytics;\n    },\n};\n\nconst actions = {\n\n    /**\n     * Fetch conversion analytics\n     */\n    async fetchConversionAnalytics({commit}, data: AnalyticsData = {}) {\n        const query = createUrlQueryString({\n            l_id: data?.listing_id,\n            start: data?.start,\n            end: data?.end,\n        });\n\n        try {\n            const responseData = await performApiRequest(commit, 'SET_ANALYTICS_LOADING', 'analytics', () => axios.get(`/v1/conversion-analytics${query}`));\n            commit(types.SET_CONVERSION_ANALYTICS, responseData.data);\n        } catch (e) {\n            EventBus.$emit('fetch-conversion-analytics-error', e.response);\n        }\n    },\n\n    async fetchAllVehicleAnalytics({commit}) {\n        try {\n            const responseData = await performApiRequest(commit, 'SET_ANALYTICS_LOADING', 'analytics', () => axios.get('/v1/vehicle-analytics'));\n            commit(types.SET_VEHICLES_ANALYTICS, responseData.analytics);\n        } catch (e) {\n            EventBus.$emit('fetch-conversion-analytics-error', e.response);\n        }\n    },\n\n    async fetchVehicleAnalytics({commit}, data: AnalyticsData = {}) {\n        const query = createUrlQueryString({\n            l_id: data?.listing_id,\n            start: data?.start,\n            end: data?.end,\n        });\n\n        try {\n            const responseData = await performApiRequest(commit, types.SET_ANALYTICS_LOADING, 'analytics', () => axios.get(`/v1/listings/utilization${query}`));\n            commit(types.SET_VEHICLES_ANALYTICS, responseData.data);\n        } catch (e) {\n            EventBus.$emit('fetch-conversion-analytics-error', e.response);\n        }\n    },\n};\n\nconst analytics: Module<AnalyticsState, any> = {\n    namespaced: true,\n    state,\n    mutations,\n    actions,\n    getters: {\n        loading: (state: AnalyticsState) => state.loading,\n        conversionAnalytics: (state: AnalyticsState) => state.conversionAnalytics,\n        vehicleAnalytics: (state: AnalyticsState) => state.vehicleAnalytics,\n        allVehiclesAnalytics: (state: AnalyticsState) => state.allVehiclesAnalytics,\n    },\n};\n\n\nexport default analytics;","import Cookies from 'js-cookie';\nimport {MasqueradeData} from '@/types';\n\nconst TokenKey: string = 'token';\nconst RegisterTokenKey: string = 'register_id';\nconst MasqueradeKey: string = 'masquerade';\n\n\nexport function getToken(): string | undefined {\n    return Cookies.get(TokenKey);\n}\n\n/**\n * Sets the authentication token.\n * @param token - The token string.\n * @param remember - Whether the token should persist across sessions.\n */\nexport function setToken(token: string, remember: boolean = true): void {\n    const options = remember ? {expires: 365} : undefined;\n    Cookies.set(TokenKey, token, options);\n}\n\nexport function removeToken(): void {\n    Cookies.remove(TokenKey);\n}\n\n\n/**\n * Retrieves the register ID token from cookies.\n */\nexport function getRegisterId(): string | undefined {\n    return Cookies.get(RegisterTokenKey);\n}\n\n\nexport function checkMasquerade(): MasqueradeData | undefined {\n    const masqueradeCookie = Cookies.get(MasqueradeKey);\n    if (!masqueradeCookie) return undefined;\n\n    try {\n        return JSON.parse(masqueradeCookie) as MasqueradeData;\n    } catch (error) {\n        console.error('Error parsing masquerade cookie:', error);\n        return undefined;\n    }\n}\n\nexport function setMasquerade(masquerade: MasqueradeData): Promise<void> {\n    return new Promise((resolve) => {\n        const masqueradeCookie = {\n            on: true,\n            admin: {\n                email: masquerade.admin.email,\n                uuid: masquerade.admin.uuid,\n                token: getToken(),\n            },\n            user: {\n                email: masquerade.user.email,\n                uuid: masquerade.user.uuid,\n                token: masquerade.token,\n            },\n        };\n\n        Cookies.set(MasqueradeKey, JSON.stringify(masqueradeCookie), {expires: 2});\n\n        resolve();\n    });\n}\n\nexport function removeMasquerade(): void {\n    const currentMasquerade: MasqueradeData = checkMasquerade();\n    if (currentMasquerade) {\n        setToken(currentMasquerade.admin.token);\n    }\n    Cookies.remove(MasqueradeKey);\n}\n\nexport function setRegisterToken(token: string): void {\n    Cookies.set(RegisterTokenKey, token, {expires: 365});\n}\n\nexport function removeAllUserCookies(): void {\n    Cookies.remove(TokenKey);\n    Cookies.remove(RegisterTokenKey);\n    Cookies.remove('fleetwireio_session');\n}\n","import {Module} from 'vuex'\nimport axios from 'axios';\nimport Cookies from 'js-cookie';\nimport {removeMasquerade, setMasquerade} from '@/utils/auth';\nimport * as types from '../mutation-types';\nimport {EventBus} from '@/plugins/eventBus';\nimport {AppCurrency, AppFeatures, AppState, MasqueradeData} from '@/types';\nimport {RootState} from '@/types/RootState';\nimport {performApiRequest} from '@/store/helpers/vuex-helpers';\n\nconst isChrome = /Chrome/.test(navigator.userAgent) && /Google Inc/.test(navigator.vendor);\nconst isSafari = /Safari/.test(navigator.userAgent) && /Apple Computer/.test(navigator.vendor);\nconst isFirefox = navigator.userAgent.toLowerCase().includes('firefox');\nconst isOpera = navigator.userAgent.toLowerCase().includes('opr');\n\nconst SIDEBAR_STORAGE_KEY = 'sidebarStatus';\nconst DEBUG_STORAGE_KEY = 'fw-debug';\n\n\nconst state: AppState = {\n    loading: {\n        fetchCurrency: false\n    },\n    build: null,\n    polled_build: null,\n    update_available: false,\n    debugDrawerOpen: false,\n    debugOn: false,\n    sidebar: {\n        opened: Cookies.get('sidebarStatus') ? !!+Cookies.get('sidebarStatus') : true,\n        withoutAnimation: false,\n    },\n    listingView: Cookies.get('listingViewStatus') ? parseInt(Cookies.get('listingViewStatus'), 10) : 0,\n    device: window.matchMedia('(max-width: 768px)').matches ? 'mobile' : 'desktop',\n    deviceWidth: window.innerWidth,\n    size: Cookies.get('size') || 'medium',\n\n    secondaryNavViews: {\n        listingImportNav: false,\n    },\n    possiblePermissions: [],\n    masquerade: {\n        on: false,\n        admin: null,\n        user: null,\n    },\n    fwPublicStripeKey: '',\n    browser: {\n        chrome: isChrome,\n        opera: isOpera,\n        safari: isSafari,\n        firefox: isFirefox,\n    },\n    hoveredTurnoverBooking: null,\n    rightSidebar: true,\n    booting: true,\n    setupItems: [\n        {\n            title: 'Create your account',\n            id: 'settings.setup_checklist.create_account',\n            completed: true,\n        },\n        {\n            title: 'Set up operating hours',\n            id: 'settings.setup_checklist.operating_hours',\n            completed: false,\n        },\n        {\n            title: 'Add tax rates',\n            id: 'settings.setup_checklist.tax_rates',\n            completed: false,\n        },\n        {\n            title: 'Add a listing',\n            id: 'settings.setup_checklist.add_listing',\n            completed: false,\n        },\n        {\n            title: 'Create order',\n            id: 'settings.setup_checklist.create_order',\n            completed: false,\n        },\n        {\n            title: 'Set up payment methods',\n            id: 'settings.setup_checklist.payment_methods',\n            completed: false,\n        },\n        {\n            title: 'Set up your website',\n            id: 'settings.setup_checklist.website',\n            completed: false,\n        },\n        {\n            title: 'Choose a plan',\n            id: 'settings.setup_checklist.choose_plan',\n            completed: false,\n        },\n    ],\n    appFeatures: null,\n    featureWaitlist: null,\n    countryOptions: [\n        {\n            name: 'Afghanistan',\n            code: 'AF',\n            phone: 93,\n            symbol: '؋',\n            currency: 'AFN',\n            continent_code: 'AS',\n            alpha_3: 'AFG',\n        },\n        {\n            name: 'Åland Islands',\n            code: 'AX',\n            phone: 358,\n            symbol: '€',\n            currency: 'EUR',\n            continent_code: 'EU',\n            alpha_3: 'ALA',\n        },\n        {name: 'Albania', code: 'AL', phone: 355, symbol: 'Lek', currency: 'ALL', continent_code: 'EU', alpha_3: 'ALB'},\n        {name: 'Algeria', code: 'DZ', phone: 213, symbol: 'دج', currency: 'DZD', continent_code: 'AF', alpha_3: 'DZA'},\n        {\n            name: 'American Samoa',\n            code: 'AS',\n            phone: 1684,\n            symbol: '$',\n            currency: 'USD',\n            continent_code: 'OC',\n            alpha_3: 'ASM',\n        },\n        {name: 'Andorra', code: 'AD', phone: 376, symbol: '€', currency: 'EUR', continent_code: 'EU', alpha_3: 'AND'},\n        {name: 'Angola', code: 'AO', phone: 244, symbol: 'Kz', currency: 'AOA', continent_code: 'AF', alpha_3: 'AGO'},\n        {name: 'Anguilla', code: 'AI', phone: 1264, symbol: '$', currency: 'XCD', continent_code: 'NA', alpha_3: 'AIA'},\n        {\n            name: 'Antarctica',\n            code: 'AQ',\n            phone: 672,\n            symbol: '$',\n            currency: 'AAD',\n            continent_code: 'AN',\n            alpha_3: 'ATA',\n        },\n        {\n            name: 'Antigua & Barbuda',\n            code: 'AG',\n            phone: 1268,\n            symbol: '$',\n            currency: 'XCD',\n            continent_code: 'NA',\n            alpha_3: 'ATG',\n        },\n        {name: 'Argentina', code: 'AR', phone: 54, symbol: '$', currency: 'ARS', continent_code: 'SA', alpha_3: 'ARG'},\n        {name: 'Armenia', code: 'AM', phone: 374, symbol: '֏', currency: 'AMD', continent_code: 'AS', alpha_3: 'ARM'},\n        {name: 'Aruba', code: 'AW', phone: 297, symbol: 'ƒ', currency: 'AWG', continent_code: 'NA', alpha_3: 'ABW'},\n        {name: 'Australia', code: 'AU', phone: 61, symbol: '$', currency: 'AUD', continent_code: 'OC', alpha_3: 'AUS'},\n        {name: 'Austria', code: 'AT', phone: 43, symbol: '€', currency: 'EUR', continent_code: 'EU', alpha_3: 'AUT'},\n        {\n            name: 'Azerbaijan',\n            code: 'AZ',\n            phone: 994,\n            symbol: 'm',\n            currency: 'AZN',\n            continent_code: 'AS',\n            alpha_3: 'AZE',\n        },\n        {name: 'Bahamas', code: 'BS', phone: 1242, symbol: 'B$', currency: 'BSD', continent_code: 'NA', alpha_3: 'BHS'},\n        {\n            name: 'Bahrain',\n            code: 'BH',\n            phone: 973,\n            symbol: '.د.ب',\n            currency: 'BHD',\n            continent_code: 'AS',\n            alpha_3: 'BHR',\n        },\n        {\n            name: 'Bangladesh',\n            code: 'BD',\n            phone: 880,\n            symbol: '৳',\n            currency: 'BDT',\n            continent_code: 'AS',\n            alpha_3: 'BGD',\n        },\n        {\n            name: 'Barbados',\n            code: 'BB',\n            phone: 1246,\n            symbol: 'Bds$',\n            currency: 'BBD',\n            continent_code: 'NA',\n            alpha_3: 'BRB',\n        },\n        {name: 'Belarus', code: 'BY', phone: 375, symbol: 'Br', currency: 'BYN', continent_code: 'EU', alpha_3: 'BLR'},\n        {name: 'Belgium', code: 'BE', phone: 32, symbol: '€', currency: 'EUR', continent_code: 'EU', alpha_3: 'BEL'},\n        {name: 'Belize', code: 'BZ', phone: 501, symbol: '$', currency: 'BZD', continent_code: 'NA', alpha_3: 'BLZ'},\n        {name: 'Benin', code: 'BJ', phone: 229, symbol: 'CFA', currency: 'XOF', continent_code: 'AF', alpha_3: 'BEN'},\n        {name: 'Bermuda', code: 'BM', phone: 1441, symbol: '$', currency: 'BMD', continent_code: 'NA', alpha_3: 'BMU'},\n        {name: 'Bhutan', code: 'BT', phone: 975, symbol: 'Nu.', currency: 'BTN', continent_code: 'AS', alpha_3: 'BTN'},\n        {name: 'Bolivia', code: 'BO', phone: 591, symbol: 'Bs.', currency: 'BOB', continent_code: 'SA', alpha_3: 'BOL'},\n        {\n            name: 'Caribbean Netherlands',\n            code: 'BQ',\n            phone: 599,\n            symbol: '$',\n            currency: 'USD',\n            continent_code: 'NA',\n            alpha_3: 'BES',\n        },\n        {\n            name: 'Bosnia & Herzegovina',\n            code: 'BA',\n            phone: 387,\n            symbol: 'KM',\n            currency: 'BAM',\n            continent_code: 'EU',\n            alpha_3: 'BIH',\n        },\n        {name: 'Botswana', code: 'BW', phone: 267, symbol: 'P', currency: 'BWP', continent_code: 'AF', alpha_3: 'BWA'},\n        {\n            name: 'Bouvet Island',\n            code: 'BV',\n            phone: 55,\n            symbol: 'kr',\n            currency: 'NOK',\n            continent_code: 'AN',\n            alpha_3: 'BVT',\n        },\n        {name: 'Brazil', code: 'BR', phone: 55, symbol: 'R$', currency: 'BRL', continent_code: 'SA', alpha_3: 'BRA'},\n        {\n            name: 'British Indian Ocean Territory',\n            code: 'IO',\n            phone: 246,\n            symbol: '$',\n            currency: 'USD',\n            continent_code: 'AS',\n            alpha_3: 'IOT',\n        },\n        {name: 'Brunei', code: 'BN', phone: 673, symbol: 'B$', currency: 'BND', continent_code: 'AS', alpha_3: 'BRN'},\n        {\n            name: 'Bulgaria',\n            code: 'BG',\n            phone: 359,\n            symbol: 'Лв.',\n            currency: 'BGN',\n            continent_code: 'EU',\n            alpha_3: 'BGR',\n        },\n        {\n            name: 'Burkina Faso',\n            code: 'BF',\n            phone: 226,\n            symbol: 'CFA',\n            currency: 'XOF',\n            continent_code: 'AF',\n            alpha_3: 'BFA',\n        },\n        {name: 'Burundi', code: 'BI', phone: 257, symbol: 'FBu', currency: 'BIF', continent_code: 'AF', alpha_3: 'BDI'},\n        {\n            name: 'Cambodia',\n            code: 'KH',\n            phone: 855,\n            symbol: 'KHR',\n            currency: 'KHR',\n            continent_code: 'AS',\n            alpha_3: 'KHM',\n        },\n        {\n            name: 'Cameroon',\n            code: 'CM',\n            phone: 237,\n            symbol: 'FCFA',\n            currency: 'XAF',\n            continent_code: 'AF',\n            alpha_3: 'CMR',\n        },\n        {name: 'Canada', code: 'CA', phone: 1, symbol: '$', currency: 'CAD', continent_code: 'NA', alpha_3: 'CAN'},\n        {\n            name: 'Cape Verde',\n            code: 'CV',\n            phone: 238,\n            symbol: '$',\n            currency: 'CVE',\n            continent_code: 'AF',\n            alpha_3: 'CPV',\n        },\n        {\n            name: 'Cayman Islands',\n            code: 'KY',\n            phone: 1345,\n            symbol: '$',\n            currency: 'KYD',\n            continent_code: 'NA',\n            alpha_3: 'CYM',\n        },\n        {\n            name: 'Central African Republic',\n            code: 'CF',\n            phone: 236,\n            symbol: 'FCFA',\n            currency: 'XAF',\n            continent_code: 'AF',\n            alpha_3: 'CAF',\n        },\n        {name: 'Chad', code: 'TD', phone: 235, symbol: 'FCFA', currency: 'XAF', continent_code: 'AF', alpha_3: 'TCD'},\n        {name: 'Chile', code: 'CL', phone: 56, symbol: '$', currency: 'CLP', continent_code: 'SA', alpha_3: 'CHL'},\n        {name: 'China', code: 'CN', phone: 86, symbol: '¥', currency: 'CNY', continent_code: 'AS', alpha_3: 'CHN'},\n        {\n            name: 'Christmas Island',\n            code: 'CX',\n            phone: 61,\n            symbol: '$',\n            currency: 'AUD',\n            continent_code: 'AS',\n            alpha_3: 'CXR',\n        },\n        {\n            name: 'Cocos (Keeling) Islands',\n            code: 'CC',\n            phone: 672,\n            symbol: '$',\n            currency: 'AUD',\n            continent_code: 'AS',\n            alpha_3: 'CCK',\n        },\n        {name: 'Colombia', code: 'CO', phone: 57, symbol: '$', currency: 'COP', continent_code: 'SA', alpha_3: 'COL'},\n        {name: 'Comoros', code: 'KM', phone: 269, symbol: 'CF', currency: 'KMF', continent_code: 'AF', alpha_3: 'COM'},\n        {\n            name: 'Congo - Brazzaville',\n            code: 'CG',\n            phone: 242,\n            symbol: 'FC',\n            currency: 'XAF',\n            continent_code: 'AF',\n            alpha_3: 'COG',\n        },\n        {\n            name: 'Congo - Kinshasa',\n            code: 'CD',\n            phone: 242,\n            symbol: 'FC',\n            currency: 'CDF',\n            continent_code: 'AF',\n            alpha_3: 'COD',\n        },\n        {\n            name: 'Cook Islands',\n            code: 'CK',\n            phone: 682,\n            symbol: '$',\n            currency: 'NZD',\n            continent_code: 'OC',\n            alpha_3: 'COK',\n        },\n        {\n            name: 'Costa Rica',\n            code: 'CR',\n            phone: 506,\n            symbol: '₡',\n            currency: 'CRC',\n            continent_code: 'NA',\n            alpha_3: 'CRI',\n        },\n        {\n            name: 'Côte d’Ivoire',\n            code: 'CI',\n            phone: 225,\n            symbol: 'CFA',\n            currency: 'XOF',\n            continent_code: 'AF',\n            alpha_3: 'CIV',\n        },\n        {name: 'Croatia', code: 'HR', phone: 385, symbol: 'kn', currency: 'HRK', continent_code: 'EU', alpha_3: 'HRV'},\n        {name: 'Cuba', code: 'CU', phone: 53, symbol: '$', currency: 'CUP', continent_code: 'NA', alpha_3: 'CUB'},\n        {name: 'Curaçao', code: 'CW', phone: 599, symbol: 'ƒ', currency: 'ANG', continent_code: 'NA', alpha_3: 'CUW'},\n        {name: 'Cyprus', code: 'CY', phone: 357, symbol: '€', currency: 'EUR', continent_code: 'AS', alpha_3: 'CYP'},\n        {name: 'Czechia', code: 'CZ', phone: 420, symbol: 'Kč', currency: 'CZK', continent_code: 'EU', alpha_3: 'CZE'},\n        {name: 'Denmark', code: 'DK', phone: 45, symbol: 'Kr.', currency: 'DKK', continent_code: 'EU', alpha_3: 'DNK'},\n        {\n            name: 'Djibouti',\n            code: 'DJ',\n            phone: 253,\n            symbol: 'Fdj',\n            currency: 'DJF',\n            continent_code: 'AF',\n            alpha_3: 'DJI',\n        },\n        {name: 'Dominica', code: 'DM', phone: 1767, symbol: '$', currency: 'XCD', continent_code: 'NA', alpha_3: 'DMA'},\n        {\n            name: 'Dominican Republic',\n            code: 'DO',\n            phone: 1809,\n            symbol: '$',\n            currency: 'DOP',\n            continent_code: 'NA',\n            alpha_3: 'DOM',\n        },\n        {name: 'Ecuador', code: 'EC', phone: 593, symbol: '$', currency: 'USD', continent_code: 'SA', alpha_3: 'ECU'},\n        {name: 'Egypt', code: 'EG', phone: 20, symbol: 'ج.م', currency: 'EGP', continent_code: 'AF', alpha_3: 'EGY'},\n        {\n            name: 'El Salvador',\n            code: 'SV',\n            phone: 503,\n            symbol: '$',\n            currency: 'USD',\n            continent_code: 'NA',\n            alpha_3: 'SLV',\n        },\n        {\n            name: 'Equatorial Guinea',\n            code: 'GQ',\n            phone: 240,\n            symbol: 'FCFA',\n            currency: 'XAF',\n            continent_code: 'AF',\n            alpha_3: 'GNQ',\n        },\n        {name: 'Eritrea', code: 'ER', phone: 291, symbol: 'Nfk', currency: 'ERN', continent_code: 'AF', alpha_3: 'ERI'},\n        {name: 'Estonia', code: 'EE', phone: 372, symbol: '€', currency: 'EUR', continent_code: 'EU', alpha_3: 'EST'},\n        {\n            name: 'Ethiopia',\n            code: 'ET',\n            phone: 251,\n            symbol: 'Nkf',\n            currency: 'ETB',\n            continent_code: 'AF',\n            alpha_3: 'ETH',\n        },\n        {\n            name: 'Falkland Islands (Islas Malvinas)',\n            code: 'FK',\n            phone: 500,\n            symbol: '£',\n            currency: 'FKP',\n            continent_code: 'SA',\n            alpha_3: 'FLK',\n        },\n        {\n            name: 'Faroe Islands',\n            code: 'FO',\n            phone: 298,\n            symbol: 'Kr.',\n            currency: 'DKK',\n            continent_code: 'EU',\n            alpha_3: 'FRO',\n        },\n        {name: 'Fiji', code: 'FJ', phone: 679, symbol: 'FJ$', currency: 'FJD', continent_code: 'OC', alpha_3: 'FJI'},\n        {name: 'Finland', code: 'FI', phone: 358, symbol: '€', currency: 'EUR', continent_code: 'EU', alpha_3: 'FIN'},\n        {name: 'France', code: 'FR', phone: 33, symbol: '€', currency: 'EUR', continent_code: 'EU', alpha_3: 'FRA'},\n        {\n            name: 'French Guiana',\n            code: 'GF',\n            phone: 594,\n            symbol: '€',\n            currency: 'EUR',\n            continent_code: 'SA',\n            alpha_3: 'GUF',\n        },\n        {\n            name: 'French Polynesia',\n            code: 'PF',\n            phone: 689,\n            symbol: '₣',\n            currency: 'XPF',\n            continent_code: 'OC',\n            alpha_3: 'PYF',\n        },\n        {\n            name: 'French Southern Territories',\n            code: 'TF',\n            phone: 262,\n            symbol: '€',\n            currency: 'EUR',\n            continent_code: 'AN',\n            alpha_3: 'ATF',\n        },\n        {name: 'Gabon', code: 'GA', phone: 241, symbol: 'FCFA', currency: 'XAF', continent_code: 'AF', alpha_3: 'GAB'},\n        {name: 'Gambia', code: 'GM', phone: 220, symbol: 'D', currency: 'GMD', continent_code: 'AF', alpha_3: 'GMB'},\n        {name: 'Georgia', code: 'GE', phone: 995, symbol: 'ლ', currency: 'GEL', continent_code: 'AS', alpha_3: 'GEO'},\n        {name: 'Germany', code: 'DE', phone: 49, symbol: '€', currency: 'EUR', continent_code: 'EU', alpha_3: 'DEU'},\n        {name: 'Ghana', code: 'GH', phone: 233, symbol: 'GH₵', currency: 'GHS', continent_code: 'AF', alpha_3: 'GHA'},\n        {name: 'Gibraltar', code: 'GI', phone: 350, symbol: '£', currency: 'GIP', continent_code: 'EU', alpha_3: 'GIB'},\n        {name: 'Greece', code: 'GR', phone: 30, symbol: '€', currency: 'EUR', continent_code: 'EU', alpha_3: 'GRC'},\n        {\n            name: 'Greenland',\n            code: 'GL',\n            phone: 299,\n            symbol: 'Kr.',\n            currency: 'DKK',\n            continent_code: 'NA',\n            alpha_3: 'GRL',\n        },\n        {name: 'Grenada', code: 'GD', phone: 1473, symbol: '$', currency: 'XCD', continent_code: 'NA', alpha_3: 'GRD'},\n        {\n            name: 'Guadeloupe',\n            code: 'GP',\n            phone: 590,\n            symbol: '€',\n            currency: 'EUR',\n            continent_code: 'NA',\n            alpha_3: 'GLP',\n        },\n        {name: 'Guam', code: 'GU', phone: 1671, symbol: '$', currency: 'USD', continent_code: 'OC', alpha_3: 'GUM'},\n        {name: 'Guatemala', code: 'GT', phone: 502, symbol: 'Q', currency: 'GTQ', continent_code: 'NA', alpha_3: 'GTM'},\n        {name: 'Guernsey', code: 'GG', phone: 44, symbol: '£', currency: 'GBP', continent_code: 'EU', alpha_3: 'GGY'},\n        {name: 'Guinea', code: 'GN', phone: 224, symbol: 'FG', currency: 'GNF', continent_code: 'AF', alpha_3: 'GIN'},\n        {\n            name: 'Guinea-Bissau',\n            code: 'GW',\n            phone: 245,\n            symbol: 'CFA',\n            currency: 'XOF',\n            continent_code: 'AF',\n            alpha_3: 'GNB',\n        },\n        {name: 'Guyana', code: 'GY', phone: 592, symbol: '$', currency: 'GYD', continent_code: 'SA', alpha_3: 'GUY'},\n        {name: 'Haiti', code: 'HT', phone: 509, symbol: 'G', currency: 'HTG', continent_code: 'NA', alpha_3: 'HTI'},\n        {\n            name: 'Heard & McDonald Islands',\n            code: 'HM',\n            phone: 0,\n            symbol: '$',\n            currency: 'AUD',\n            continent_code: 'AN',\n            alpha_3: 'HMD',\n        },\n        {\n            name: 'Vatican City',\n            code: 'VA',\n            phone: 39,\n            symbol: '€',\n            currency: 'EUR',\n            continent_code: 'EU',\n            alpha_3: 'VAT',\n        },\n        {name: 'Honduras', code: 'HN', phone: 504, symbol: 'L', currency: 'HNL', continent_code: 'NA', alpha_3: 'HND'},\n        {name: 'Hong Kong', code: 'HK', phone: 852, symbol: '$', currency: 'HKD', continent_code: 'AS', alpha_3: 'HKG'},\n        {name: 'Hungary', code: 'HU', phone: 36, symbol: 'Ft', currency: 'HUF', continent_code: 'EU', alpha_3: 'HUN'},\n        {name: 'Iceland', code: 'IS', phone: 354, symbol: 'kr', currency: 'ISK', continent_code: 'EU', alpha_3: 'ISL'},\n        {name: 'India', code: 'IN', phone: 91, symbol: '₹', currency: 'INR', continent_code: 'AS', alpha_3: 'IND'},\n        {name: 'Indonesia', code: 'ID', phone: 62, symbol: 'Rp', currency: 'IDR', continent_code: 'AS', alpha_3: 'IDN'},\n        {name: 'Iran', code: 'IR', phone: 98, symbol: '﷼', currency: 'IRR', continent_code: 'AS', alpha_3: 'IRN'},\n        {name: 'Iraq', code: 'IQ', phone: 964, symbol: 'د.ع', currency: 'IQD', continent_code: 'AS', alpha_3: 'IRQ'},\n        {name: 'Ireland', code: 'IE', phone: 353, symbol: '€', currency: 'EUR', continent_code: 'EU', alpha_3: 'IRL'},\n        {\n            name: 'Isle of Man',\n            code: 'IM',\n            phone: 44,\n            symbol: '£',\n            currency: 'GBP',\n            continent_code: 'EU',\n            alpha_3: 'IMN',\n        },\n        {name: 'Israel', code: 'IL', phone: 972, symbol: '₪', currency: 'ILS', continent_code: 'AS', alpha_3: 'ISR'},\n        {name: 'Italy', code: 'IT', phone: 39, symbol: '€', currency: 'EUR', continent_code: 'EU', alpha_3: 'ITA'},\n        {name: 'Jamaica', code: 'JM', phone: 1876, symbol: 'J$', currency: 'JMD', continent_code: 'NA', alpha_3: 'JAM'},\n        {name: 'Japan', code: 'JP', phone: 81, symbol: '¥', currency: 'JPY', continent_code: 'AS', alpha_3: 'JPN'},\n        {name: 'Jersey', code: 'JE', phone: 44, symbol: '£', currency: 'GBP', continent_code: 'EU', alpha_3: 'JEY'},\n        {name: 'Jordan', code: 'JO', phone: 962, symbol: 'ا.د', currency: 'JOD', continent_code: 'AS', alpha_3: 'JOR'},\n        {name: 'Kazakhstan', code: 'KZ', phone: 7, symbol: 'лв', currency: 'KZT', continent_code: 'AS', alpha_3: 'KAZ'},\n        {name: 'Kenya', code: 'KE', phone: 254, symbol: 'KSh', currency: 'KES', continent_code: 'AF', alpha_3: 'KEN'},\n        {name: 'Kiribati', code: 'KI', phone: 686, symbol: '$', currency: 'AUD', continent_code: 'OC', alpha_3: 'KIR'},\n        {\n            name: 'North Korea',\n            code: 'KP',\n            phone: 850,\n            symbol: '₩',\n            currency: 'KPW',\n            continent_code: 'AS',\n            alpha_3: 'PRK',\n        },\n        {\n            name: 'South Korea',\n            code: 'KR',\n            phone: 82,\n            symbol: '₩',\n            currency: 'KRW',\n            continent_code: 'AS',\n            alpha_3: 'KOR',\n        },\n        {name: 'Kosovo', code: 'XK', phone: 381, symbol: '€', currency: 'EUR', continent_code: 'EU', alpha_3: 'XKX'},\n        {name: 'Kuwait', code: 'KW', phone: 965, symbol: 'ك.د', currency: 'KWD', continent_code: 'AS', alpha_3: 'KWT'},\n        {\n            name: 'Kyrgyzstan',\n            code: 'KG',\n            phone: 996,\n            symbol: 'лв',\n            currency: 'KGS',\n            continent_code: 'AS',\n            alpha_3: 'KGZ',\n        },\n        {name: 'Laos', code: 'LA', phone: 856, symbol: '₭', currency: 'LAK', continent_code: 'AS', alpha_3: 'LAO'},\n        {name: 'Latvia', code: 'LV', phone: 371, symbol: '€', currency: 'EUR', continent_code: 'EU', alpha_3: 'LVA'},\n        {name: 'Lebanon', code: 'LB', phone: 961, symbol: '£', currency: 'LBP', continent_code: 'AS', alpha_3: 'LBN'},\n        {name: 'Lesotho', code: 'LS', phone: 266, symbol: 'L', currency: 'LSL', continent_code: 'AF', alpha_3: 'LSO'},\n        {name: 'Liberia', code: 'LR', phone: 231, symbol: '$', currency: 'LRD', continent_code: 'AF', alpha_3: 'LBR'},\n        {name: 'Libya', code: 'LY', phone: 218, symbol: 'د.ل', currency: 'LYD', continent_code: 'AF', alpha_3: 'LBY'},\n        {\n            name: 'Liechtenstein',\n            code: 'LI',\n            phone: 423,\n            symbol: 'CHf',\n            currency: 'CHF',\n            continent_code: 'EU',\n            alpha_3: 'LIE',\n        },\n        {name: 'Lithuania', code: 'LT', phone: 370, symbol: '€', currency: 'EUR', continent_code: 'EU', alpha_3: 'LTU'},\n        {\n            name: 'Luxembourg',\n            code: 'LU',\n            phone: 352,\n            symbol: '€',\n            currency: 'EUR',\n            continent_code: 'EU',\n            alpha_3: 'LUX',\n        },\n        {name: 'Macao', code: 'MO', phone: 853, symbol: '$', currency: 'MOP', continent_code: 'AS', alpha_3: 'MAC'},\n        {\n            name: 'North Macedonia',\n            code: 'MK',\n            phone: 389,\n            symbol: 'ден',\n            currency: 'MKD',\n            continent_code: 'EU',\n            alpha_3: 'MKD',\n        },\n        {\n            name: 'Madagascar',\n            code: 'MG',\n            phone: 261,\n            symbol: 'Ar',\n            currency: 'MGA',\n            continent_code: 'AF',\n            alpha_3: 'MDG',\n        },\n        {name: 'Malawi', code: 'MW', phone: 265, symbol: 'MK', currency: 'MWK', continent_code: 'AF', alpha_3: 'MWI'},\n        {name: 'Malaysia', code: 'MY', phone: 60, symbol: 'RM', currency: 'MYR', continent_code: 'AS', alpha_3: 'MYS'},\n        {name: 'Maldives', code: 'MV', phone: 960, symbol: 'Rf', currency: 'MVR', continent_code: 'AS', alpha_3: 'MDV'},\n        {name: 'Mali', code: 'ML', phone: 223, symbol: 'CFA', currency: 'XOF', continent_code: 'AF', alpha_3: 'MLI'},\n        {name: 'Malta', code: 'MT', phone: 356, symbol: '€', currency: 'EUR', continent_code: 'EU', alpha_3: 'MLT'},\n        {\n            name: 'Marshall Islands',\n            code: 'MH',\n            phone: 692,\n            symbol: '$',\n            currency: 'USD',\n            continent_code: 'OC',\n            alpha_3: 'MHL',\n        },\n        {\n            name: 'Martinique',\n            code: 'MQ',\n            phone: 596,\n            symbol: '€',\n            currency: 'EUR',\n            continent_code: 'NA',\n            alpha_3: 'MTQ',\n        },\n        {\n            name: 'Mauritania',\n            code: 'MR',\n            phone: 222,\n            symbol: 'MRU',\n            currency: 'MRO',\n            continent_code: 'AF',\n            alpha_3: 'MRT',\n        },\n        {name: 'Mauritius', code: 'MU', phone: 230, symbol: '₨', currency: 'MUR', continent_code: 'AF', alpha_3: 'MUS'},\n        {name: 'Mayotte', code: 'YT', phone: 262, symbol: '€', currency: 'EUR', continent_code: 'AF', alpha_3: 'MYT'},\n        {name: 'Mexico', code: 'MX', phone: 52, symbol: '$', currency: 'MXN', continent_code: 'NA', alpha_3: 'MEX'},\n        {\n            name: 'Micronesia',\n            code: 'FM',\n            phone: 691,\n            symbol: '$',\n            currency: 'USD',\n            continent_code: 'OC',\n            alpha_3: 'FSM',\n        },\n        {name: 'Moldova', code: 'MD', phone: 373, symbol: 'L', currency: 'MDL', continent_code: 'EU', alpha_3: 'MDA'},\n        {name: 'Monaco', code: 'MC', phone: 377, symbol: '€', currency: 'EUR', continent_code: 'EU', alpha_3: 'MCO'},\n        {name: 'Mongolia', code: 'MN', phone: 976, symbol: '₮', currency: 'MNT', continent_code: 'AS', alpha_3: 'MNG'},\n        {\n            name: 'Montenegro',\n            code: 'ME',\n            phone: 382,\n            symbol: '€',\n            currency: 'EUR',\n            continent_code: 'EU',\n            alpha_3: 'MNE',\n        },\n        {\n            name: 'Montserrat',\n            code: 'MS',\n            phone: 1664,\n            symbol: '$',\n            currency: 'XCD',\n            continent_code: 'NA',\n            alpha_3: 'MSR',\n        },\n        {name: 'Morocco', code: 'MA', phone: 212, symbol: 'DH', currency: 'MAD', continent_code: 'AF', alpha_3: 'MAR'},\n        {\n            name: 'Mozambique',\n            code: 'MZ',\n            phone: 258,\n            symbol: 'MT',\n            currency: 'MZN',\n            continent_code: 'AF',\n            alpha_3: 'MOZ',\n        },\n        {\n            name: 'Myanmar (Burma)',\n            code: 'MM',\n            phone: 95,\n            symbol: 'K',\n            currency: 'MMK',\n            continent_code: 'AS',\n            alpha_3: 'MMR',\n        },\n        {name: 'Namibia', code: 'NA', phone: 264, symbol: '$', currency: 'NAD', continent_code: 'AF', alpha_3: 'NAM'},\n        {name: 'Nauru', code: 'NR', phone: 674, symbol: '$', currency: 'AUD', continent_code: 'OC', alpha_3: 'NRU'},\n        {name: 'Nepal', code: 'NP', phone: 977, symbol: '₨', currency: 'NPR', continent_code: 'AS', alpha_3: 'NPL'},\n        {\n            name: 'Netherlands',\n            code: 'NL',\n            phone: 31,\n            symbol: '€',\n            currency: 'EUR',\n            continent_code: 'EU',\n            alpha_3: 'NLD',\n        },\n        {name: 'Curaçao', code: 'AN', phone: 599, symbol: 'NAf', currency: 'ANG', continent_code: 'NA', alpha_3: 'ANT'},\n        {\n            name: 'New Caledonia',\n            code: 'NC',\n            phone: 687,\n            symbol: '₣',\n            currency: 'XPF',\n            continent_code: 'OC',\n            alpha_3: 'NCL',\n        },\n        {\n            name: 'New Zealand',\n            code: 'NZ',\n            phone: 64,\n            symbol: '$',\n            currency: 'NZD',\n            continent_code: 'OC',\n            alpha_3: 'NZL',\n        },\n        {\n            name: 'Nicaragua',\n            code: 'NI',\n            phone: 505,\n            symbol: 'C$',\n            currency: 'NIO',\n            continent_code: 'NA',\n            alpha_3: 'NIC',\n        },\n        {name: 'Niger', code: 'NE', phone: 227, symbol: 'CFA', currency: 'XOF', continent_code: 'AF', alpha_3: 'NER'},\n        {name: 'Nigeria', code: 'NG', phone: 234, symbol: '₦', currency: 'NGN', continent_code: 'AF', alpha_3: 'NGA'},\n        {name: 'Niue', code: 'NU', phone: 683, symbol: '$', currency: 'NZD', continent_code: 'OC', alpha_3: 'NIU'},\n        {\n            name: 'Norfolk Island',\n            code: 'NF',\n            phone: 672,\n            symbol: '$',\n            currency: 'AUD',\n            continent_code: 'OC',\n            alpha_3: 'NFK',\n        },\n        {\n            name: 'Northern Mariana Islands',\n            code: 'MP',\n            phone: 1670,\n            symbol: '$',\n            currency: 'USD',\n            continent_code: 'OC',\n            alpha_3: 'MNP',\n        },\n        {name: 'Norway', code: 'NO', phone: 47, symbol: 'kr', currency: 'NOK', continent_code: 'EU', alpha_3: 'NOR'},\n        {name: 'Oman', code: 'OM', phone: 968, symbol: '.ع.ر', currency: 'OMR', continent_code: 'AS', alpha_3: 'OMN'},\n        {name: 'Pakistan', code: 'PK', phone: 92, symbol: '₨', currency: 'PKR', continent_code: 'AS', alpha_3: 'PAK'},\n        {name: 'Palau', code: 'PW', phone: 680, symbol: '$', currency: 'USD', continent_code: 'OC', alpha_3: 'PLW'},\n        {name: 'Palestine', code: 'PS', phone: 970, symbol: '₪', currency: 'ILS', continent_code: 'AS', alpha_3: 'PSE'},\n        {name: 'Panama', code: 'PA', phone: 507, symbol: 'B/.', currency: 'PAB', continent_code: 'NA', alpha_3: 'PAN'},\n        {\n            name: 'Papua New Guinea',\n            code: 'PG',\n            phone: 675,\n            symbol: 'K',\n            currency: 'PGK',\n            continent_code: 'OC',\n            alpha_3: 'PNG',\n        },\n        {name: 'Paraguay', code: 'PY', phone: 595, symbol: '₲', currency: 'PYG', continent_code: 'SA', alpha_3: 'PRY'},\n        {name: 'Peru', code: 'PE', phone: 51, symbol: 'S/.', currency: 'PEN', continent_code: 'SA', alpha_3: 'PER'},\n        {\n            name: 'Philippines',\n            code: 'PH',\n            phone: 63,\n            symbol: '₱',\n            currency: 'PHP',\n            continent_code: 'AS',\n            alpha_3: 'PHL',\n        },\n        {\n            name: 'Pitcairn Islands',\n            code: 'PN',\n            phone: 64,\n            symbol: '$',\n            currency: 'NZD',\n            continent_code: 'OC',\n            alpha_3: 'PCN',\n        },\n        {name: 'Poland', code: 'PL', phone: 48, symbol: 'zł', currency: 'PLN', continent_code: 'EU', alpha_3: 'POL'},\n        {name: 'Portugal', code: 'PT', phone: 351, symbol: '€', currency: 'EUR', continent_code: 'EU', alpha_3: 'PRT'},\n        {\n            name: 'Puerto Rico',\n            code: 'PR',\n            phone: 1787,\n            symbol: '$',\n            currency: 'USD',\n            continent_code: 'NA',\n            alpha_3: 'PRI',\n        },\n        {name: 'Qatar', code: 'QA', phone: 974, symbol: 'ق.ر', currency: 'QAR', continent_code: 'AS', alpha_3: 'QAT'},\n        {name: 'Réunion', code: 'RE', phone: 262, symbol: '€', currency: 'EUR', continent_code: 'AF', alpha_3: 'REU'},\n        {name: 'Romania', code: 'RO', phone: 40, symbol: 'lei', currency: 'RON', continent_code: 'EU', alpha_3: 'ROM'},\n        {name: 'Russia', code: 'RU', phone: 70, symbol: '₽', currency: 'RUB', continent_code: 'AS', alpha_3: 'RUS'},\n        {name: 'Rwanda', code: 'RW', phone: 250, symbol: 'FRw', currency: 'RWF', continent_code: 'AF', alpha_3: 'RWA'},\n        {\n            name: 'St. Barthélemy',\n            code: 'BL',\n            phone: 590,\n            symbol: '€',\n            currency: 'EUR',\n            continent_code: 'NA',\n            alpha_3: 'BLM',\n        },\n        {\n            name: 'St. Helena',\n            code: 'SH',\n            phone: 290,\n            symbol: '£',\n            currency: 'SHP',\n            continent_code: 'AF',\n            alpha_3: 'SHN',\n        },\n        {\n            name: 'St. Kitts & Nevis',\n            code: 'KN',\n            phone: 1869,\n            symbol: '$',\n            currency: 'XCD',\n            continent_code: 'NA',\n            alpha_3: 'KNA',\n        },\n        {\n            name: 'St. Lucia',\n            code: 'LC',\n            phone: 1758,\n            symbol: '$',\n            currency: 'XCD',\n            continent_code: 'NA',\n            alpha_3: 'LCA',\n        },\n        {\n            name: 'St. Martin',\n            code: 'MF',\n            phone: 590,\n            symbol: '€',\n            currency: 'EUR',\n            continent_code: 'NA',\n            alpha_3: 'MAF',\n        },\n        {\n            name: 'St. Pierre & Miquelon',\n            code: 'PM',\n            phone: 508,\n            symbol: '€',\n            currency: 'EUR',\n            continent_code: 'NA',\n            alpha_3: 'SPM',\n        },\n        {\n            name: 'St. Vincent & Grenadines',\n            code: 'VC',\n            phone: 1784,\n            symbol: '$',\n            currency: 'XCD',\n            continent_code: 'NA',\n            alpha_3: 'VCT',\n        },\n        {name: 'Samoa', code: 'WS', phone: 684, symbol: 'SAT', currency: 'WST', continent_code: 'OC', alpha_3: 'WSM'},\n        {\n            name: 'San Marino',\n            code: 'SM',\n            phone: 378,\n            symbol: '€',\n            currency: 'EUR',\n            continent_code: 'EU',\n            alpha_3: 'SMR',\n        },\n        {\n            name: 'São Tomé & Príncipe',\n            code: 'ST',\n            phone: 239,\n            symbol: 'Db',\n            currency: 'STD',\n            continent_code: 'AF',\n            alpha_3: 'STP',\n        },\n        {\n            name: 'Saudi Arabia',\n            code: 'SA',\n            phone: 966,\n            symbol: '﷼',\n            currency: 'SAR',\n            continent_code: 'AS',\n            alpha_3: 'SAU',\n        },\n        {name: 'Senegal', code: 'SN', phone: 221, symbol: 'CFA', currency: 'XOF', continent_code: 'AF', alpha_3: 'SEN'},\n        {name: 'Serbia', code: 'RS', phone: 381, symbol: 'din', currency: 'RSD', continent_code: 'EU', alpha_3: 'SRB'},\n        {name: 'Serbia', code: 'CS', phone: 381, symbol: 'din', currency: 'RSD', continent_code: 'EU', alpha_3: 'SCG'},\n        {\n            name: 'Seychelles',\n            code: 'SC',\n            phone: 248,\n            symbol: 'SRe',\n            currency: 'SCR',\n            continent_code: 'AF',\n            alpha_3: 'SYC',\n        },\n        {\n            name: 'Sierra Leone',\n            code: 'SL',\n            phone: 232,\n            symbol: 'Le',\n            currency: 'SLL',\n            continent_code: 'AF',\n            alpha_3: 'SLE',\n        },\n        {name: 'Singapore', code: 'SG', phone: 65, symbol: '$', currency: 'SGD', continent_code: 'AS', alpha_3: 'SGP'},\n        {\n            name: 'Sint Maarten',\n            code: 'SX',\n            phone: 1,\n            symbol: 'ƒ',\n            currency: 'ANG',\n            continent_code: 'NA',\n            alpha_3: 'SXM',\n        },\n        {name: 'Slovakia', code: 'SK', phone: 421, symbol: '€', currency: 'EUR', continent_code: 'EU', alpha_3: 'SVK'},\n        {name: 'Slovenia', code: 'SI', phone: 386, symbol: '€', currency: 'EUR', continent_code: 'EU', alpha_3: 'SVN'},\n        {\n            name: 'Solomon Islands',\n            code: 'SB',\n            phone: 677,\n            symbol: 'Si$',\n            currency: 'SBD',\n            continent_code: 'OC',\n            alpha_3: 'SLB',\n        },\n        {\n            name: 'Somalia',\n            code: 'SO',\n            phone: 252,\n            symbol: 'Sh.so.',\n            currency: 'SOS',\n            continent_code: 'AF',\n            alpha_3: 'SOM',\n        },\n        {\n            name: 'South Africa',\n            code: 'ZA',\n            phone: 27,\n            symbol: 'R',\n            currency: 'ZAR',\n            continent_code: 'AF',\n            alpha_3: 'ZAF',\n        },\n        {\n            name: 'South Georgia & South Sandwich Islands',\n            code: 'GS',\n            phone: 500,\n            symbol: '£',\n            currency: 'GBP',\n            continent_code: 'AN',\n            alpha_3: 'SGS',\n        },\n        {\n            name: 'South Sudan',\n            code: 'SS',\n            phone: 211,\n            symbol: '£',\n            currency: 'SSP',\n            continent_code: 'AF',\n            alpha_3: 'SSD',\n        },\n        {name: 'Spain', code: 'ES', phone: 34, symbol: '€', currency: 'EUR', continent_code: 'EU', alpha_3: 'ESP'},\n        {name: 'Sri Lanka', code: 'LK', phone: 94, symbol: 'Rs', currency: 'LKR', continent_code: 'AS', alpha_3: 'LKA'},\n        {name: 'Sudan', code: 'SD', phone: 249, symbol: '.س.ج', currency: 'SDG', continent_code: 'AF', alpha_3: 'SDN'},\n        {name: 'Suriname', code: 'SR', phone: 597, symbol: '$', currency: 'SRD', continent_code: 'SA', alpha_3: 'SUR'},\n        {\n            name: 'Svalbard & Jan Mayen',\n            code: 'SJ',\n            phone: 47,\n            symbol: 'kr',\n            currency: 'NOK',\n            continent_code: 'EU',\n            alpha_3: 'SJM',\n        },\n        {name: 'Eswatini', code: 'SZ', phone: 268, symbol: 'E', currency: 'SZL', continent_code: 'AF', alpha_3: 'SWZ'},\n        {name: 'Sweden', code: 'SE', phone: 46, symbol: 'kr', currency: 'SEK', continent_code: 'EU', alpha_3: 'SWE'},\n        {\n            name: 'Switzerland',\n            code: 'CH',\n            phone: 41,\n            symbol: 'CHf',\n            currency: 'CHF',\n            continent_code: 'EU',\n            alpha_3: 'CHE',\n        },\n        {name: 'Syria', code: 'SY', phone: 963, symbol: 'LS', currency: 'SYP', continent_code: 'AS', alpha_3: 'SYR'},\n        {name: 'Taiwan', code: 'TW', phone: 886, symbol: '$', currency: 'TWD', continent_code: 'AS', alpha_3: 'TWN'},\n        {\n            name: 'Tajikistan',\n            code: 'TJ',\n            phone: 992,\n            symbol: 'SM',\n            currency: 'TJS',\n            continent_code: 'AS',\n            alpha_3: 'TJK',\n        },\n        {\n            name: 'Tanzania',\n            code: 'TZ',\n            phone: 255,\n            symbol: 'TSh',\n            currency: 'TZS',\n            continent_code: 'AF',\n            alpha_3: 'TZA',\n        },\n        {name: 'Thailand', code: 'TH', phone: 66, symbol: '฿', currency: 'THB', continent_code: 'AS', alpha_3: 'THA'},\n        {\n            name: 'Timor-Leste',\n            code: 'TL',\n            phone: 670,\n            symbol: '$',\n            currency: 'USD',\n            continent_code: 'AS',\n            alpha_3: 'TLS',\n        },\n        {name: 'Togo', code: 'TG', phone: 228, symbol: 'CFA', currency: 'XOF', continent_code: 'AF', alpha_3: 'TGO'},\n        {name: 'Tokelau', code: 'TK', phone: 690, symbol: '$', currency: 'NZD', continent_code: 'OC', alpha_3: 'TKL'},\n        {name: 'Tonga', code: 'TO', phone: 676, symbol: '$', currency: 'TOP', continent_code: 'OC', alpha_3: 'TON'},\n        {\n            name: 'Trinidad & Tobago',\n            code: 'TT',\n            phone: 1868,\n            symbol: '$',\n            currency: 'TTD',\n            continent_code: 'NA',\n            alpha_3: 'TTO',\n        },\n        {name: 'Tunisia', code: 'TN', phone: 216, symbol: 'ت.د', currency: 'TND', continent_code: 'AF', alpha_3: 'TUN'},\n        {name: 'Turkey', code: 'TR', phone: 90, symbol: '₺', currency: 'TRY', continent_code: 'AS', alpha_3: 'TUR'},\n        {\n            name: 'Turkmenistan',\n            code: 'TM',\n            phone: 7370,\n            symbol: 'T',\n            currency: 'TMT',\n            continent_code: 'AS',\n            alpha_3: 'TKM',\n        },\n        {\n            name: 'Turks & Caicos Islands',\n            code: 'TC',\n            phone: 1649,\n            symbol: '$',\n            currency: 'USD',\n            continent_code: 'NA',\n            alpha_3: 'TCA',\n        },\n        {name: 'Tuvalu', code: 'TV', phone: 688, symbol: '$', currency: 'AUD', continent_code: 'OC', alpha_3: 'TUV'},\n        {name: 'Uganda', code: 'UG', phone: 256, symbol: 'USh', currency: 'UGX', continent_code: 'AF', alpha_3: 'UGA'},\n        {name: 'Ukraine', code: 'UA', phone: 380, symbol: '₴', currency: 'UAH', continent_code: 'EU', alpha_3: 'UKR'},\n        {\n            name: 'United Arab Emirates',\n            code: 'AE',\n            phone: 971,\n            symbol: 'إ.د',\n            currency: 'AED',\n            continent_code: 'AS',\n            alpha_3: 'ARE',\n        },\n        {\n            name: 'United Kingdom',\n            code: 'GB',\n            phone: 44,\n            symbol: '£',\n            currency: 'GBP',\n            continent_code: 'EU',\n            alpha_3: 'GBR',\n        },\n        {\n            name: 'United States',\n            code: 'US',\n            phone: 1,\n            symbol: '$',\n            currency: 'USD',\n            continent_code: 'NA',\n            alpha_3: 'USA',\n        },\n        {\n            name: 'U.S. Outlying Islands',\n            code: 'UM',\n            phone: 1,\n            symbol: '$',\n            currency: 'USD',\n            continent_code: 'NA',\n            alpha_3: 'UMI',\n        },\n        {name: 'Uruguay', code: 'UY', phone: 598, symbol: '$', currency: 'UYU', continent_code: 'SA', alpha_3: 'URY'},\n        {\n            name: 'Uzbekistan',\n            code: 'UZ',\n            phone: 998,\n            symbol: 'лв',\n            currency: 'UZS',\n            continent_code: 'AS',\n            alpha_3: 'UZB',\n        },\n        {name: 'Vanuatu', code: 'VU', phone: 678, symbol: 'VT', currency: 'VUV', continent_code: 'OC', alpha_3: 'VUT'},\n        {name: 'Venezuela', code: 'VE', phone: 58, symbol: 'Bs', currency: 'VEF', continent_code: 'SA', alpha_3: 'VEN'},\n        {name: 'Vietnam', code: 'VN', phone: 84, symbol: '₫', currency: 'VND', continent_code: 'AS', alpha_3: 'VNM'},\n        {\n            name: 'British Virgin Islands',\n            code: 'VG',\n            phone: 1284,\n            symbol: '$',\n            currency: 'USD',\n            continent_code: 'NA',\n            alpha_3: 'VGB',\n        },\n        {\n            name: 'U.S. Virgin Islands',\n            code: 'VI',\n            phone: 1340,\n            symbol: '$',\n            currency: 'USD',\n            continent_code: 'NA',\n            alpha_3: 'VIR',\n        },\n        {\n            name: 'Wallis & Futuna',\n            code: 'WF',\n            phone: 681,\n            symbol: '₣',\n            currency: 'XPF',\n            continent_code: 'OC',\n            alpha_3: 'WLF',\n        },\n        {\n            name: 'Western Sahara',\n            code: 'EH',\n            phone: 212,\n            symbol: 'MAD',\n            currency: 'MAD',\n            continent_code: 'AF',\n            alpha_3: 'ESH',\n        },\n        {name: 'Yemen', code: 'YE', phone: 967, symbol: '﷼', currency: 'YER', continent_code: 'AS', alpha_3: 'YEM'},\n        {name: 'Zambia', code: 'ZM', phone: 260, symbol: 'ZK', currency: 'ZMW', continent_code: 'AF', alpha_3: 'ZMB'},\n        {name: 'Zimbabwe', code: 'ZW', phone: 263, symbol: '$', currency: 'ZWL', continent_code: 'AF', alpha_3: 'ZWE'},\n    ],\n    currentCurrency: null,\n};\n\nconst appModule: Module<AppState, RootState> = {\n    namespaced: true,\n\n    state,\n\n    getters: {\n        loading: (state: AppState) => state.loading,\n        booting: (state: AppState) => state.booting,\n        setupItems: (state: AppState) => state.setupItems,\n        sidebar: (state: AppState) => state.sidebar,\n        rightSidebar: (state: AppState) => state.rightSidebar,\n        browser: (state: AppState) => state.browser,\n        listingView: (state: AppState) => state.listingView,\n        size: (state: AppState) => state.size,\n        device: (state: AppState) => state.device,\n        deviceWidth: (state: AppState) => state.deviceWidth,\n        secondaryNavViews: (state: AppState) => state.secondaryNavViews,\n        possiblePermissions: (state: AppState) => [...state.possiblePermissions].sort((a, b) => a.name.localeCompare(b.name)),\n        masquerade: (state: AppState) => state.masquerade,\n        fwPublicStripeKey: (state: AppState) => state.fwPublicStripeKey,\n        build: (state: AppState) => state.build,\n        polled_build: (state: AppState) => state.polled_build,\n        update_available: (state: AppState) => state.update_available,\n        debugDrawerOpen: (state: AppState) => state.debugDrawerOpen,\n        debugOn: (state: AppState) => state.debugOn,\n        hoveredTurnoverBooking: (state: AppState) => state.hoveredTurnoverBooking,\n        appFeatures: (state: AppState) => state.appFeatures,\n        featureWaitlist: (state: AppState) => state.featureWaitlist,\n        countryOptions: (state: AppState) => state.countryOptions,\n        currentCurrency: (state: AppState) => state.currentCurrency,\n    },\n\n    mutations: {\n        [types.SET_APP_LOADING](state: AppState, loading: { subject: string, loading: boolean }) {\n            state.loading[loading.subject] = loading.loading;\n        },\n        [types.INITIALIZE_STATE](state: AppState) {\n            state.debugDrawerOpen = [true, 'true'].includes(localStorage.getItem(DEBUG_STORAGE_KEY));\n        },\n        [types.SET_APP_BOOTING](state: AppState, booting: boolean) {\n            state.booting = booting;\n        },\n        [types.TOGGLE_RIGHT_SIDEBAR](state: AppState) {\n            state.rightSidebar = !state.rightSidebar;\n        },\n        [types.TOGGLE_SIDEBAR](state: AppState) {\n            state.sidebar.opened = !state.sidebar.opened;\n            state.sidebar.withoutAnimation = false;\n        },\n        [types.SET_HOVERED_TURNOVER_BOOKING_ID](state: AppState, id) {\n            state.hoveredTurnoverBooking = id;\n        },\n        [types.TOGGLE_LISTING_VIEW](state: AppState, value) {\n            state.listingView = value;\n            Cookies.set('listingViewStatus', state.listingView);\n        },\n        [types.TOGGLE_SECONDARY_IMPORT_NAV_VIEW](state: AppState) {\n            state.secondaryNavViews.listingImportNav = !state.secondaryNavViews.listingImportNav;\n        },\n\n        [types.CLOSE_SIDEBAR](state: AppState, withoutAnimation) {\n            Cookies.set('sidebarStatus', 0);\n            state.sidebar.opened = false;\n            state.sidebar.withoutAnimation = withoutAnimation;\n        },\n        [types.TOGGLE_DEVICE](state: AppState, device) {\n            state.device = device;\n        },\n        [types.SET_ALL_POSSIBLE_PERMISSIONS](state: AppState, permissions) {\n            state.possiblePermissions = permissions;\n        },\n        [types.SET_MASQUERADE_STATUS](state: AppState, masquerade) {\n            state.masquerade = masquerade;\n        },\n        [types.SET_MASQUERADE](state: AppState, masquerade: MasqueradeData) {\n            if (masquerade) {\n                state.masquerade = masquerade;\n                state.masquerade.on = true;\n                setMasquerade(state.masquerade).then(() => {\n                    window.location.href = '/dashboard';\n                });\n            }\n        },\n        [types.END_MASQUERADE](state: AppState) {\n            state.masquerade = {\n                on: false,\n                user: null,\n                admin: null,\n            };\n            removeMasquerade();\n            // eslint-disable-next-line no-restricted-globals\n            location.reload();\n        },\n        [types.SET_FW_STRIPE_KEY](state: AppState, key: string) {\n            state.fwPublicStripeKey = key;\n        },\n        [types.SET_FW_BUILD_NUMBER](state: AppState, build: string) {\n            state.build = build;\n        },\n        [types.SET_POLLED_FW_BUILD_NUMBER](state: AppState, build: string) {\n            state.polled_build = build;\n\n            const existingBuild = localStorage.getItem('fw_polled_build');\n\n            if (!existingBuild) {\n                localStorage.setItem('fw_polled_build', build);\n            } else if (existingBuild && existingBuild !== build) {\n                state.update_available = true;\n\n                localStorage.setItem('fw_polled_build', build);\n            }\n        },\n        [types.SET_UPDATE_AVAILABLE](state: AppState) {\n            state.update_available = true;\n        },\n        [types.SET_APP_FEATURES](state: AppState, features: AppFeatures) {\n            state.appFeatures = features;\n        },\n        [types.MARK_SETUP_ITEM_COMPLETE](state: AppState, index) {\n            state.setupItems[index].completed = true;\n        },\n        [types.SET_FEATURES_WAITLIST](state: AppState, features) {\n            state.featureWaitlist = features;\n        },\n        [types.SET_CURRENT_CURRENCY](state: AppState, currency: AppCurrency) {\n            state.currentCurrency = currency;\n        },\n        [types.TOGGLE_DEBUG_DRAWER](state: AppState) {\n            console.dir(`Toggle Debug Drawer ${(state.debugDrawerOpen ? 'off' : 'on')}`.toUpperCase());\n            localStorage.setItem('fw-debug', String(!state.debugDrawerOpen));\n            state.debugDrawerOpen = !state.debugDrawerOpen;\n        },\n        [types.TOGGLE_DEBUG_ON](state: AppState, value: boolean = null) {\n            const debugOnValue = value !== null ? value : !state.debugOn;\n\n            console.dir(`Toggle Debug On Value: ${(debugOnValue ? 'off' : 'on')}`.toUpperCase());\n            localStorage.setItem('fw-debug-on', String(debugOnValue));\n            state.debugOn = debugOnValue;\n        },\n    },\n\n    actions: {\n        toggleSideBar({commit, state}) {\n            commit(types.TOGGLE_SIDEBAR);\n\n            Cookies.set(SIDEBAR_STORAGE_KEY, state.sidebar.opened ? '1' : '0');\n        },\n        masqueradeEnd({commit}) {\n            commit(types.END_MASQUERADE);\n        },\n        toggleSecondaryImportNav({commit}) {\n            commit(types.TOGGLE_SECONDARY_IMPORT_NAV_VIEW);\n        },\n        closeSideBar({commit}, {withoutAnimation}) {\n            commit(types.CLOSE_SIDEBAR, withoutAnimation);\n        },\n        toggleDebugDrawer({commit}) {\n            commit(types.TOGGLE_DEBUG_DRAWER);\n        },\n\n        toggleDebugOn({commit}) {\n            console.dir('toggleDebugOn');\n            commit(types.TOGGLE_DEBUG_ON);\n        },\n\n        checkForDebug({commit}) {\n            console.dir('checkForDebug');\n\n            const isDebugOn = localStorage.getItem('fw-debug-on')\n\n            console.dir(isDebugOn);\n            if (['on', 'true', true, 1].includes(isDebugOn)) {\n                commit(types.TOGGLE_DEBUG_ON, true)\n            }\n        },\n\n        async fetchBuildNumber({commit}) {\n            const responseData = await performApiRequest(commit, 'SET_APP_LOADING', 'fetchBuild', () => axios.get('/v1/build'));\n            commit(types.SET_POLLED_FW_BUILD_NUMBER, responseData.build);\n            return responseData.build;\n        },\n\n        async fetchCurrency({commit}, code: string) {\n            try {\n                const responseData = await performApiRequest(commit, 'SET_APP_LOADING', 'fetchCurrency', () => axios.get(`/v1/currencies/${code}`));\n                commit(types.SET_CURRENT_CURRENCY, responseData.currency);\n            } catch (error) {\n            }\n        },\n\n        addFeatureWaitlist({commit}, data) {\n            axios.post('/v1/feature-waitlist', data)\n                .then((response) => {\n                    EventBus.$emit('join-feature-waitlist-success');\n                    commit('SET_FEATURES_WAITLIST', response.data.data);\n                }).catch(() => {\n            }).finally(() => {\n            });\n        },\n\n        async getFeatureWaitlist({commit}) {\n            const responseData = await performApiRequest(commit, 'SET_APP_LOADING', 'fetchCurrency', () => axios.get('/v1/feature-waitlist'));\n            commit('SET_FEATURES_WAITLIST', responseData.data);\n            EventBus.$emit('get-feature-waitlist-success', responseData.data);\n        },\n\n\n        fetchHolidays({commit, state}, data) {\n            axios.get(`/v1/holidays?year=${data.year}&countryCode=${data.countryCode}`)\n                .then((response) => {\n                    EventBus.$emit('get-holidays-success', response.data.holidays);\n                }).catch((e) => {\n                EventBus.$emit('SystemMessage', {\n                    type: 'error',\n                    message: e.response?.data?.message || 'There was an error',\n                });\n            }).finally(() => {\n            });\n        },\n    },\n\n}\n\nexport default appModule;\n","import parsePhoneNumber from 'libphonenumber-js'\n\n/**\n * Formats a number with commas as thousands separators.\n * @param x - The number to format.\n * @returns The formatted number as a string with commas, or '0' if the input is not a valid number.\n */\nexport const formatNumberWithCommas = (x: number | null | undefined): string => {\n    if (x === null || x === undefined || typeof x !== 'number' || isNaN(x)) {\n        return '0';\n    }\n\n    return x.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',');\n};\n\n\n/**\n * Formats a phone number based on its length.\n * @param number - The phone number as a string.\n * @returns The formatted phone number.\n */\nexport const formatPhoneNumber = (number: string): string => {\n    if (!number) return '';\n\n    try {\n        const phone = parsePhoneNumber(number);\n\n        // Ensure the number is valid before formatting\n        if (!phone?.isValid()) {\n            return number.replace(/[^0-9+]/g, ''); // Keep only numbers & leading '+'\n        }\n\n        if (phone.country === 'US' && phone.nationalNumber.length === 10) {\n            return `+1 (${phone.nationalNumber.slice(0, 3)}) ${phone.nationalNumber.slice(3, 6)}-${phone.nationalNumber.slice(6)}`;\n        }\n\n        return phone.formatInternational();\n    } catch (error) {\n        console.warn('Invalid phone number:', number, error);\n        return number.replace(/[^0-9+]/g, ''); // Remove all non-numeric characters except '+'\n    }\n}","/**\n * Build element\n * @param {string} type\n * @param {*} attributes\n * @param {*} children\n */\nconst elFactory = (type, attributes, ...children) => {\n  const el = document.createElement(type)\n\n  for (const key in attributes) {\n    el.setAttribute(key, attributes[key])\n  }\n\n  children.forEach(child => {\n    if (typeof child === 'string') {\n      el.appendChild(document.createTextNode(child))\n    } else {\n      el.appendChild(child)\n    }\n  })\n\n  return el\n}\n\nexport default elFactory;","import { CartService } from '@/services/cart.service';\n\n/** The company base url */\n// const COMPANY_URL = 'http://af769718-cc33-47e5-8164-b07bbdb39e71.fw.test';\nconst COMPANY_URL = window.fleetwireOptions?.apiURL;\n\nclass ApiService {\n\n  static apiVersion = '/api/v1';\n\n  static async call(url = '', method = 'GET', data = {}) {\n\n    const options = {\n      method,\n      mode: 'cors',\n      cache: 'no-cache',\n      headers: {\n        Accept: \"application/json\",\n        // 'Current-Url': window.location.href,\n      },\n      referrerPolicy: 'no-referrer',\n    };\n\n    if (method === 'POST') {\n      options.headers['Content-Type'] = 'application/json';\n      options.body = JSON.stringify(data);\n    }\n\n    data.cart_id = CartService.getCartUuid();\n\n    const response = await fetch(`${COMPANY_URL}${ApiService.apiVersion}${url}`, options);\n    return response.json();\n  }\n\n\n  /**\n   * Make the API calls\n   *\n   * @private\n   * @param {string} [url] The url.\n   * @param {Object} [data] The data to use for the call.\n   * @returns {JSON} Returns `json`.\n   */\n  static async postData(url = '', data = {}) {\n    data.cart_id = CartService.getCartUuid();\n    const response = await fetch(url, {\n      method: 'POST',\n      mode: 'cors',\n      cache: 'no-cache',\n      headers: {\n        \"Content-Type\": \"application/json\",\n        \"Accept\": \"application/json\",\n      },\n      referrerPolicy: 'no-referrer',\n      body: JSON.stringify(data)\n    });\n    return response.json();\n  }\n\n  /**\n   * @param {string} url\n   */\n  static async getData(url = '') {\n    const response = await fetch(url, {\n      method: 'GET',\n      mode: 'cors',\n      cache: 'no-cache',\n      headers: {\n        \"Accept\": \"application/json\",\n      },\n      referrerPolicy: 'no-referrer',\n    });\n    return response.json();\n  }\n\n\n}\n\nexport default ApiService;","import { get, isUndefined } from 'lodash';\nimport elFactory from './elFactory.service';\nimport UtilService from './util.service';\n\nconst CardService = {\n\n  cardCount: 0,\n\n  prepListingCards() {\n    const productCards = Array.from(document.getElementsByClassName('fleetwire-listing-card'))\n\n    productCards.forEach((listing, index) => {\n      CardService.cardCount++;\n      const lid = UtilService.getListingId(listing);\n\n\n      const listingCardActions = elFactory('div', { class: 'fw-card__actions' }, 'Open');\n      const listingCardCartBtn = elFactory('a', { class: 'fw-button fw-branded fw-card__actions' },\n        elFactory('i', { class: 'fw-icon-cart fw-link fw-branded-font-color' })\n      );\n\n      listingCardActions.onclick = function () {\n        CardService.clickedButton();\n      };\n      listingCardCartBtn.onclick = function () {\n\n\n        CardService.clickedButton(lid);\n      };\n\n      const dataset = $fw(listing).data();\n      const markup = CardService.buildProductCard(lid, dataset);\n\n      $fw(markup).click(function () {\n        window.open(\n          UtilService.companyProductUrl(lid),\n          '_blank'\n        );\n      });\n\n      $fw(productCards[index]).replaceWith(markup)\n    })\n    UtilService.setWidth();\n\n    CardService.buildQuickView();\n  },\n\n  buildQuickView() {\n    const closeBtn = elFactory('a', { class: 'fw-close' }, 'X');\n\n    closeBtn.onclick = function () {\n      CardService.close_quick_view();\n    };\n\n\n    const markup = elFactory('div', { id: 'fleetwire-quickview', class: 'fleetwire-quickview' },\n      elFactory('div', { class: 'booqable-component fleetwire-component', style: 'display: none;' },\n        elFactory('div', { id: 'booqable-quickview-wrapper', class: 'fleetwire-quickview-wrapper closed' },\n          elFactory('div', { id: 'booqable-quickview-inner' },\n            closeBtn,\n            elFactory('div', { class: 'booqable-product-detail-wrapper' },\n              elFactory('div', { class: 'ProductImage-czxphg hgNThE' },\n                elFactory('div', { class: 'MainImageContainer-dsPfmb kPjdza', 'data-tid': '' },\n                  elFactory('div', { class: 'MainImage-btvEcL gypPqW' },\n                    elFactory('div', {\n                        class: 'BFocalImage-dejJaX gWABCj',\n                        style: 'position: relative; overflow: hidden;'\n                      },\n                      elFactory('img', {\n                        class: 'Image-fDMyDA kftJhF',\n                        alt: 'bmw',\n                        src: 'https://fleetwire.io/images/vehicle-placeholder.jpg',\n                        style: 'min-height: 100%; min-width: 100%; position: absolute; inset: 0px; max-width: 100%;',\n                        'data-focus-y': '0',\n                        'data-focus-x': '0',\n                        loading: 'lazy',\n                      }),\n                    ),\n                  ),\n                ),\n              ),\n              elFactory('div', { class: 'fw-content' },\n                elFactory('h3', { class: 'fw-product-name' },\n                  'BMW'\n                ),\n                elFactory('div', {\n                    class: 'fleetwire-product-button-wrapper',\n                    id: 'booqable-product-button-18ae2009-9c79-411c-b6cd-20e40ed2e8a0'\n                  },\n                  elFactory('div', { class: 'fw-actions' },\n                    elFactory('span', { class: 'fw-price-details' },\n                      elFactory('span', { class: 'fw-duration' }, 'from'),\n                      elFactory('span', { class: 'fw-price' }, '$95.00')\n                    ),\n                    elFactory('span', { 'aria-expanded': false },\n                      elFactory('a', {\n                        target: '_blank',\n                        class: 'AvailabilityLink-hXmWhx kKkbX Link-coULHM letVP A-jrLLFi iMXKpJ',\n                        color: 'dark'\n                      }, 'Check availability')\n                    ),\n                    elFactory('div', { class: 'fw-control', style: 'display: none;' },\n                      elFactory('div', { class: 'InputField-fbCPUI dfiEEZ' },\n                        elFactory('div', { class: 'LabelContainer-imROAO kLzFrI' }),\n                        elFactory('span', { class: 'InputContainer-kcTEuW ldFkuZ' },\n                          elFactory('input', {\n                            name: 'quantity',\n                            value: 1,\n                            type: 'number',\n                            class: 'fw-quantity Input-fXckBj kNmAJV Input-eXLwAq iwGLPw'\n                          }),\n                        ),\n                      ),\n                      elFactory('div', { class: 'Spacer-dQMXRY endFZm' }),\n                      elFactory('span', { class: 'ButtonContainer-cCzDqJ dASMYX Span-hCfPsm jdJhRb', color: 'primary' },\n                        elFactory('button', {\n                            type: 'button',\n                            class: 'fw-button false Button-jiBmQ bruVYM Button-hYXUXp dvaIoi'\n                          },\n                          elFactory('span', { class: 'Label-ghyrbC cjnCZD Span-hCfPsm ehhEci' }, 'Add to cart'),\n                        ),\n                      ),\n                    ),\n                  ),\n                ),\n                elFactory('div', { class: 'MagnifyContainer-iQrpjS hBbDLP' }),\n              ),\n            ),\n          ),\n        )\n      )\n    );\n\n\n    document.body.appendChild(markup);\n\n\n    window.onclick = function (event) {\n      if (event.target.id === 'booqable-quickview-wrapper') {\n        event.target.classList.remove('open');\n        event.target.classList.add('closed');\n      }\n    }\n  },\n\n  clickedButton(lid) {\n    const listing = window.listingData.find(listing => listing.l_id === lid);\n\n\n    const quickView = document.getElementById('fleetwire-quickview');\n    const fwOverlayState = quickView.querySelector('#booqable-quickview-wrapper');\n\n\n    fwOverlayState.classList.remove('closed');\n    fwOverlayState.classList.add('open');\n\n    // var quickView = document.getElementsByClassName('booqable-quickview');\n\n\n    const listingName = quickView.getElementsByClassName('fw-product-name');\n    const listingPrice = quickView.getElementsByClassName('fw-price');\n    const listingImage = quickView.getElementsByClassName('Image-fDMyDA');\n    const listingAvailLink = quickView.getElementsByClassName('AvailabilityLink-hXmWhx');\n    const amount = get(listing, 'pricing.amount', 0);\n\n\n    listingName[0].innerHTML = listing.name;\n    listingPrice[0].innerHTML = `$${UtilService.getListingPrice(amount)}`;\n    listingImage[0].src = UtilService.productFirstImage(listing);\n    listingAvailLink[0].href = UtilService.companyProductUrl(lid);\n\n    if (quickView.length > 0) {\n      const quickViewToggle = quickView[0].getElementsByClassName('fleetwire-quickview-wrapper')\n      quickViewToggle[0].classList.remove('closed');\n      quickViewToggle[0].classList.add('open');\n    }\n  },\n\n\n  close_quick_view() {\n    const element = document.getElementsByClassName('fleetwire-quickview');\n\n    const elementToggle = element[0].getElementsByClassName('fleetwire-quickview-wrapper');\n\n    elementToggle[0].classList.remove('open');\n    elementToggle[0].classList.add('closed');\n  },\n\n  /**\n   * Builds listing card element\n   *\n   * @private\n   * @param {string} lid\n   * @param dataset\n   */\n  buildProductCard(lid, dataset = {}) {\n    let datasetString = '';\n    if (dataset) {\n      dataset = CardService.allowedCardDataAttributes(dataset)\n      datasetString = Object.keys(dataset).map(key => `data-${key}=\"${dataset[key]}\"`).join(' ');\n    }\n    return $fw(`<div class=\"fleetwire-listing-card card-${lid}\" ${datasetString}>\n        <div class=\"fleetwire-product ${lid}-card-main\">\n            <div class=\"fleetwire-component\">\n                <div class=\"fleetwire-product-wrapper\">\n                    <div class=\"fleetwire-product-inner\">\n                        <div style=\"height: 200px;\">\n                            <div class=\"fw-card-image ${lid}-card\" style=\"position: relative; overflow: hidden;\">\n                                <div class=\"fw-image__image fw-image__image--cover\"></div>\n                            </div>\n                        </div>\n                        <div class=\"fw-details\">\n                            <div class=\"fw-product-title-wrapper fw-has-prices\">\n                                <div class=\"fw-product-name\"></div>\n                            </div>\n                            <span class=\"fw-price-details\">\n                                <span class=\"fw-duration\"></span>\n                                <span class=\"fw-price fw-price-currency\"></span>\n                            </span>\n                        </div>\n                    </div>\n                </div>\n            </div>\n        </div>\n    </div>`);\n  },\n\n  /**\n   * Filters out unwanted data attributes\n   *\n   * @private\n   * @param {Object} dataset\n   */\n  allowedCardDataAttributes(dataset) {\n    const allowed = ['currency', 'customtitle', 'showprice'];\n\n    Object.keys(dataset).forEach(value => {\n      if (!allowed.includes(value)) {\n        delete dataset[value];\n      }\n    });\n    return dataset;\n  },\n\n\n  /**\n   * Adds listing card element to the DOM\n   *\n   * @private\n   * @param {Object} [listings]\n   */\n  addListingCards(listings) {\n    if (CardService.cardCount === 0) return;\n\n    listings.forEach((listing) => {\n      const listingCards = CardService.getListingCards(listing)\n\n      listingCards.forEach((card) => {\n        if (CardService.listingInactive(listing)) {\n          $fw(card).remove();\n          console.error(`listing (${listing.name}) archived, deleted or not active so it was removed`);\n          return;\n        }\n\n        CardService.setCardAttributes(card, listing);\n\n        card.classList.remove('card-skeleton', 'card-skeleton-loading');\n      })\n    });\n\n    UtilService.setWidth();\n  },\n\n  listingInactive(listing) {\n    return !!(listing.archived_at || listing.deleted_at || !listing.active);\n  },\n\n\n  /**\n   * Get all the card elements for a listing\n   *\n   * @private\n   * @param {Object} listing\n   */\n  getListingCards(listing) {\n    const lid = get(listing, 'l_id');\n    return Array.from(document.getElementsByClassName(`card-${lid}`));\n  },\n\n\n  /**\n   * Set the card element attributes\n   *\n   * @private\n   * @param {Object} cardElement\n   * @param {Object} listing\n   */\n  setCardAttributes(cardElement, listing) {\n    const attr = get(cardElement, 'dataset');\n\n\n    CardService.setPrice(cardElement, listing);\n\n\n    const title = get(listing, 'name', '');\n\n    const linkText = isUndefined(attr['customTitle']) ? title : attr['customtitle'];\n\n\n    const imageElement = cardElement.getElementsByClassName('fw-image__image');\n    const cardDescription = cardElement.getElementsByClassName('fw-product-name');\n\n\n    // Set card image\n    const img = UtilService.productFirstImage(listing);\n    const style = `background-image: url(\"${img}\"); background-position: center center;`;\n    imageElement[0].setAttribute('style', style);\n\n\n    // Set card title\n    cardDescription[0].innerHTML = linkText\n\n\n  },\n\n  /**\n   * Set the card element price attributes\n   *\n   * @private\n   * @param {Object} cardElement\n   * @param {Object} listing\n   * @param {number} updateAmount\n   */\n  setPrice(cardElement, listing = null, updateAmount = 0) {\n    const attr = get(cardElement, 'dataset');\n\n    const showPrice = get(attr, 'showprice')\n\n    if (showPrice) {\n      let currency = get(attr, 'currency');\n\n      /**\n       * If no currency is set, use the default company currency; fallback to USD\n       */\n      if (!currency) {\n        currency = get(window.fwCompany, 'currency')\n        currency = get(currency, 'symbol', '$') ?? '$';\n      }\n\n\n      const cardPrice = cardElement.getElementsByClassName('fw-price');\n      const priceDetails = cardElement.getElementsByClassName('fw-price-details');\n\n\n      const amount = get(listing, 'pricing.amount', get(listing, 'price', updateAmount));\n      const price = UtilService.getListingPrice(amount);\n      cardPrice[0].innerHTML = `${currency}${price}`\n      priceDetails[0].setAttribute('style', 'display: block;');\n    }\n  },\n\n}\n\nexport default CardService;","import ApiService from './api.service';\nimport CardService from './card.service';\nimport UtilService from './util.service';\n\nconst COMPANY_URL = window.fleetwireOptions?.apiURL;\n\nconst ListService = {\n\n\n  addListingList() {\n    const lists = Array.from(document.getElementsByClassName('fleetwire-listing-list'))\n\n\n    const listings = window.fwListings;\n\n    ListService.updatePaginate();\n\n    lists.forEach(list => {\n      list.setAttribute('id', `fleetwire-listing-list-${UtilService.randomString()}`);\n\n      list = ListService.addListComponent(list);\n\n      const listWrapper = list.getElementsByClassName('fleetwire-listing-list-wrapper')[0]\n\n\n      /**\n       * Remove the current cards and add the new ones\n       */\n      if (window.fwPaginate.current_page) {\n        const existingProductCards = $fw('.fleetwire-listing-list');\n\n        if (existingProductCards.length) {\n          const elements = $fw(existingProductCards[0]).find('.fleetwire-listing-list-wrapper')\n          if (elements.length) {\n            $fw(elements[0]).children().remove();\n          }\n          // $fw(existingProductCards[0]).forEach(card => {\n          //   card.remove();\n          // });\n        }\n      }\n\n\n      /**\n       * Add the listings to each listing list element\n       */\n      listings.forEach((listing) => {\n        CardService.cardCount++;\n        const listingUrl = UtilService.companyProductUrl(listing.l_id);\n        const dataset = $fw(list).data()\n        const markup = CardService.buildProductCard(listing.l_id, dataset);\n\n        $fw(markup).click(function () {\n          window.open(listingUrl, '_blank');\n        })\n\n        $fw(listWrapper).append(markup);\n      });\n\n      UtilService.setWidth();\n\n      CardService.addListingCards(listings);\n    })\n  },\n\n  /**\n   * Preps the product card element to the DOM and sets loading\n   *\n   * @private\n   */\n  prepListingList(page = 1) {\n    const productCards = Array.from(document.getElementsByClassName(\"fleetwire-listing-list\"));\n\n    if (productCards.length > 0) {\n      const hasPaginate = $fw(productCards[0]).data('per');\n\n      let qString = `?page=${page}`;\n\n      if (hasPaginate && parseInt(hasPaginate)) {\n        qString += `&limit=${+hasPaginate}`;\n      }\n\n      ApiService.getData(`${COMPANY_URL}/api/v1/products${qString}`)\n        .then(data => {\n          window.fwListings = data.data;\n          window.fwPaginate = data.meta;\n\n          ListService.addListingList()\n        }).catch(e => {\n        console.dir(e);\n      });\n    }\n  },\n\n  updatePaginate() {\n    const productCards = $fw('.fleetwire-listing-list');\n\n    const data = $fw(productCards[0]).data();\n\n    if (typeof data === 'undefined') return;\n    if (!data.per) return;\n\n    ListService.buildPaginate();\n\n    const paginate = $fw('.fleetwire-pagination .fw-pagination-inner');\n\n    if (paginate.length) {\n      const currentPage = window.fwPaginate.current_page;\n      // const totalPages = window.fwPaginate.total;\n\n      if (currentPage > 10) {\n        if ($fw('.fw-pagination-previous').length === 0) {\n          $fw($fw('.fw-pagination-inner')[0]).prepend(`<div class=\"fw-pagination-page fw-pagination-previous\"><a><i class=\"bq-icon-arrow-left2\"></i></a></div>`);\n        }\n\n\n      }\n\n      paginate.children().each(function (index, element) {\n\n        if (index + 1 === currentPage) {\n\n\n          if ($fw(element).hasClass('fw-pagination-next')) {\n\n          } else {\n            $fw(element).html(currentPage);\n\n            $fw(element).addClass('fw-pagination-current');\n            $fw(element).addClass('fw-branded');\n          }\n        } else {\n          if (currentPage > 10) {\n            if (index > 0 && index < 10) {\n              $fw(element).html(`<a>${currentPage - (10 - index)}</a>`);\n            }\n          }\n\n          if ($fw(element).hasClass('fw-pagination-current')) {\n            $fw(element).html(`<a>${index + 1}</a>`);\n          }\n\n          $fw(element).removeClass('fw-pagination-current');\n          $fw(element).removeClass('fw-branded');\n\n          $fw(element).unbind();\n\n          $fw(element).click(function (e) {\n            const pageRequest = +e.target.innerHTML\n\n            if (pageRequest > 0) {\n              ListService.prepListingList(pageRequest)\n            } else {\n              const button = $fw(e.target).parent();\n              if (button.length) {\n                if ($fw(button[0]).parents('.fw-pagination-next').length) {\n                  ListService.prepListingList(index + 1)\n                }\n              }\n            }\n          });\n\n        }\n      })\n    }\n  },\n\n  buildPaginate() {\n    const productCards = $fw('.fleetwire-listing-list');\n\n\n    if (productCards.length) {\n\n      if ($fw('.fleetwire-pagination').length === 0) {\n        $fw(productCards[0]).append('<div class=\"fleetwire-component\"><div class=\"fleetwire-pagination\"><div class=\"fw-pagination-inner\"></div></div></div>');\n        const addNextButton = window.fwPaginate.total > 10;\n\n        const buttonCount = window.fwPaginate.total > 10 ? 10 : window.fwPaginate.total;\n        for (let i = 0; i < buttonCount; i++) {\n          $fw($fw('.fw-pagination-inner')[0]).append(`<div class=\"fw-pagination-page\"><a>${i + 1}</a></div>`);\n        }\n\n        if (addNextButton) {\n          $fw($fw('.fw-pagination-inner')[0]).append(`<div class=\"fw-pagination-page fw-pagination-next\"><a><i class=\"bq-icon-arrow-right2\"></i></a></div>`);\n        }\n      }\n    }\n  },\n\n  addListComponent(list) {\n    if (list) {\n      $fw(list).append($fw(`<div class=\"fleetwire-themed\"><div class=\"fleetwire-component\"><div class=\"fleetwire-listing-list-wrapper\"></div></div></div>`));\n    }\n    return list;\n  },\n}\n\nexport default ListService;","import { find, get } from 'lodash';\nimport elFactory from './elFactory.service';\nimport UtilService from './util.service';\nimport { CartService } from '@/services/cart.service';\nimport ApiService from './api.service';\nimport ListService from './list.service';\nimport dayjs from 'dayjs';\nimport { easepick } from '@easepick/core';\nimport { RangePlugin } from '@easepick/range-plugin';\n\nconst COMPANY_URL = window.fleetwireOptions?.apiURL;\n\n\nconst timeSelect = `\n<div class=\"fw-time-select-outer\" id=\"fw-time-selector\">\n  <div class=\"Select__menu fw-time-select-inner\">\n    <div class=\"Select__menu-list css-o6rls7\">\n      <div class=\"Select__option Select__option--is-focused css-jt7bxz-option\" id=\"react-select-2-option-0\" tabindex=\"-1\">12:00 AM</div>\n      <div class=\"Select__option css-zhyjg9-option\" id=\"react-select-2-option-1\" tabindex=\"-1\">01:00 AM</div>\n      <div class=\"Select__option css-zhyjg9-option\" id=\"react-select-2-option-2\" tabindex=\"-1\">02:00 AM</div>\n      <div class=\"Select__option css-zhyjg9-option\" id=\"react-select-2-option-3\" tabindex=\"-1\">03:00 AM</div>\n      <div class=\"Select__option css-zhyjg9-option\" id=\"react-select-2-option-4\" tabindex=\"-1\">04:00 AM</div>\n      <div class=\"Select__option css-zhyjg9-option\" id=\"react-select-2-option-5\" tabindex=\"-1\">05:00 AM</div>\n      <div class=\"Select__option css-zhyjg9-option\" id=\"react-select-2-option-6\" tabindex=\"-1\">06:00 AM</div>\n      <div class=\"Select__option css-zhyjg9-option\" id=\"react-select-2-option-7\" tabindex=\"-1\">07:00 AM</div>\n      <div class=\"Select__option css-zhyjg9-option\" id=\"react-select-2-option-8\" tabindex=\"-1\">08:00 AM</div>\n      <div class=\"Select__option css-zhyjg9-option\" id=\"react-select-2-option-9\" tabindex=\"-1\">09:00 AM</div>\n      <div class=\"Select__option css-zhyjg9-option\" id=\"react-select-2-option-10\" tabindex=\"-1\">10:00 AM</div>\n      <div class=\"Select__option css-zhyjg9-option\" id=\"react-select-2-option-11\" tabindex=\"-1\">11:00 AM</div>\n      <div class=\"Select__option css-zhyjg9-option\" id=\"react-select-2-option-12\" tabindex=\"-1\">12:00 PM</div>\n      <div class=\"Select__option css-zhyjg9-option\" id=\"react-select-2-option-13\" tabindex=\"-1\">01:00 PM</div>\n      <div class=\"Select__option css-zhyjg9-option\" id=\"react-select-2-option-14\" tabindex=\"-1\">02:00 PM</div>\n      <div class=\"Select__option Select__option--is-selected css-r84qo7-option\" id=\"react-select-2-option-15\" tabindex=\"-1\">03:00 PM</div>\n      <div class=\"Select__option css-zhyjg9-option\" id=\"react-select-2-option-16\" tabindex=\"-1\">04:00 PM</div>\n      <div class=\"Select__option css-zhyjg9-option\" id=\"react-select-2-option-17\" tabindex=\"-1\">05:00 PM</div>\n      <div class=\"Select__option css-zhyjg9-option\" id=\"react-select-2-option-18\" tabindex=\"-1\">06:00 PM</div>\n      <div class=\"Select__option css-zhyjg9-option\" id=\"react-select-2-option-19\" tabindex=\"-1\">07:00 PM</div>\n      <div class=\"Select__option css-zhyjg9-option\" id=\"react-select-2-option-20\" tabindex=\"-1\">08:00 PM</div>\n      <div class=\"Select__option css-zhyjg9-option\" id=\"react-select-2-option-21\" tabindex=\"-1\">09:00 PM</div>\n      <div class=\"Select__option css-zhyjg9-option\" id=\"react-select-2-option-22\" tabindex=\"-1\">10:00 PM</div>\n      <div class=\"Select__option css-zhyjg9-option\" id=\"react-select-2-option-23\" tabindex=\"-1\">11:00 PM</div>\n    </div>\n  </div>\n</div>\n`;\n\n\nconst DatepickerService = {\n\n  data: {\n    dialog: false,\n    times: {\n      start: null,\n      end: null,\n    },\n  },\n\n  prepDatepicker() {\n    const datepicker = Array.from(document.getElementsByClassName('fleetwire-datepicker'));\n\n    if (datepicker.length) {\n      const markup = DatepickerService.buildDatepicker();\n\n      markup.onclick = function () {\n        DatepickerService.openDatepicker();\n      };\n\n      datepicker[0].appendChild(markup)\n    }\n  },\n\n  buildDatepicker() {\n    return elFactory('div', { class: `fleetwire-datepicker` },\n      elFactory('div', { class: 'fleetwire-themed' },\n        elFactory('div', { class: 'fleetwire-component' },\n          elFactory('div', { class: 'fleetwire-datetime-wrapper' },\n            elFactory('div', { class: 'fleetwire-datetime-container fleetwire-datetime-from' },\n              elFactory('div', { class: 'fleetwire-datetime-from-detail' },\n                elFactory('p', { class: 'fleetwire-datetime-placeholder fw-pickup' }, 'Pickup Date')\n              )\n            ),\n            elFactory('div', { class: 'fleetwire-datetime-container fleetwire-datetime-till' },\n              elFactory('div', { class: 'fleetwire-datetime-till-detail' },\n                elFactory('p', { class: 'fleetwire-datetime-placeholder fw-return' }, 'Return Date')\n              )\n            ),\n          )\n        )\n      )\n    );\n  },\n\n  setCartDates(cart) {\n    console.log('cart');\n    console.log(cart);\n    const pickup = Array.from(document.getElementsByClassName('fw-pickup'))\n    const dropOff = Array.from(document.getElementsByClassName('fw-return'))\n\n\n    if (pickup.length) {\n      pickup[0].innerHTML = dayjs(get(cart, 'trip_start')).format('MMM DD, YYYY, hh:mm A');\n      this.data.times.start = get(cart, 'trip_start');\n    }\n\n    if (dropOff.length) {\n      dropOff[0].innerHTML = dayjs(get(cart, 'trip_end')).format('MMM DD, YYYY, hh:mm A');\n      this.data.times.end = get(cart, 'trip_end');\n    }\n  },\n\n  openDatepicker() {\n    const markup = elFactory('div', { class: `fleetwire-datepicker-backdrop` },\n      elFactory('div', { class: `fleetwire-datepicker-container fleetwire-modal-hide` },\n        elFactory('h2', { class: `fleetwire-datepicker-close` },\n          elFactory('i', { class: `fleetwire-datepicker-close-icon` }, 'X')\n        ),\n        elFactory('div', { class: `fleetwire-modal-form-container` },\n          elFactory('form', { class: `` },\n            elFactory('div', { class: `` },\n              elFactory('div', { class: `picker-form` },\n                elFactory('div', { class: `picker-block` },\n                  elFactory('h3', { class: `picker-title` }, 'Pickup'),\n                  elFactory('div', { class: `picker-spacer` }),\n                  DatepickerService.buildModalFormInput(),\n                ),\n                elFactory('div', { class: `picker-spacer-main` }),\n                elFactory('div', { class: `picker-block` },\n                  elFactory('h3', { class: `picker-title` }, 'Return'),\n                  elFactory('div', { class: `picker-spacer` }),\n                  DatepickerService.buildModalFormInput('end'),\n                ),\n              ),\n            )\n          )\n        ),\n        elFactory('div', { class: `fleetwire-modal-actions` },\n          elFactory('div', { class: `fleetwire-modal-actions-group` },\n            elFactory('span', { class: `fleetwire-modal-actions-button-white` },\n              elFactory('button', { class: `fleetwire-modal-actions-button-close`, type: 'button' }, 'Cancel')\n            ),\n            elFactory('span', { class: `fleetwire-modal-actions-button-blue` },\n              elFactory('button', { class: ``, type: 'button', color: '#2B80FF' }, 'Apply')\n            )\n          )\n        )\n      ),\n    );\n\n    markup.onclick = function (event) {\n      DatepickerService.removeDatepicker(event);\n    };\n\n    document.body.appendChild(markup);\n\n    if (this.data.times.start) {\n      const startValue = document.getElementById('start-datepicker');\n      const startTimeValue = document.getElementById('start-placeholder');\n      startValue.value = dayjs(this.data.times.start).format('YYYY-MM-DD');\n      startTimeValue.innerText = dayjs(this.data.times.start).format('hh:mm A');\n    }\n\n    if (this.data.times.end) {\n      const endValue = document.getElementById('end-datepicker');\n      const endTimeValue = document.getElementById('end-placeholder');\n      endValue.value = dayjs(this.data.times.end).format('YYYY-MM-DD');\n      endTimeValue.innerText = dayjs(this.data.times.start).format('hh:mm A');\n    }\n\n    setTimeout(() => {\n      const datepicker = Array.from(document.getElementsByClassName('fleetwire-datepicker-container'))\n\n      if (datepicker.length) {\n        datepicker[0].classList.remove('fleetwire-modal-hide');\n        datepicker[0].classList.add('fleetwire-modal-show');\n\n        document.body.classList.add('fw-modal-open');\n\n\n        new easepick.create({\n          element: document.getElementById('start-datepicker'),\n          css: [\n            'https://cdn.jsdelivr.net/npm/@easepick/bundle@1.2.0/dist/index.css',\n          ],\n          plugins: [RangePlugin],\n          zIndex: 999999999,\n          setup(picker) {\n            picker.on('select', (e) => {\n              const { start, end } = e.detail;\n              // let startDate = start.getFullYear() + '-' + ((start.getMonth() > 8) ? (start.getMonth() + 1) : ('0' + (start.getMonth() + 1))) + '-' + ((start.getDate() > 9) ? start.getDate() : ('0' + start.getDate())) + ' ' + UtilService.padTo2Digits(start.getHours()) + ':' + UtilService.padTo2Digits(start.getMinutes()) + ':' + UtilService.padTo2Digits(start.getSeconds());\n              const startDate = dayjs(start).format('YYYY-MM-DD HH:mm:ss');\n              // let endDate = end.getFullYear() + '-' + ((end.getMonth() > 8) ? (end.getMonth() + 1) : ('0' + (end.getMonth() + 1))) + '-' + ((end.getDate() > 9) ? end.getDate() : ('0' + end.getDate())) + ' ' + UtilService.padTo2Digits(end.getHours()) + ':' + UtilService.padTo2Digits(end.getMinutes()) + ':' + UtilService.padTo2Digits(end.getSeconds());\n              const endDate = dayjs(end).format('YYYY-MM-DD HH:mm:ss');\n              console.dir(start);\n              console.dir(startDate);\n              console.dir(endDate);\n\n              DatepickerService.setDatePickerValues(startDate, endDate);\n              DatepickerService.checkAvailability(startDate, endDate);\n            });\n          },\n          RangePlugin: {\n            elementEnd: \"#end-datepicker\",\n            tooltip: false,\n          },\n        });\n      }\n    }, 50)\n  },\n\n  buildModalFormInput(period = 'start') {\n    const timeSelectMarkup = elFactory('div', { class: `Select__value-container css-1hwfws3` },\n      elFactory('div', {\n        class: `Select__placeholder css-1wa3eu0-placeholder ${period}-placeholder`,\n        id: `${period}-placeholder`\n      }, 'Select...'),\n    );\n\n    timeSelectMarkup.onclick = function (event) {\n      DatepickerService.addTimeSelector(event, period);\n    };\n\n    return elFactory('div', { class: `picker-input` },\n      elFactory('div', { class: `BOxSN` },\n        elFactory('div', { class: `InputField-ivJGtx ` },\n          elFactory('div', { style: `width: 100%` },\n            elFactory('div', { class: `lgjpsj` },\n              elFactory('input', {\n                id: `${period}-datepicker`,\n                class: `Input-lchiQn dCoejz`,\n                name: 'date',\n                placeholder: 'MM-DD-YY'\n              })\n            ),\n          ),\n        ),\n        elFactory('div', { class: `InputField-ivJGtx ` },\n          elFactory('div', { style: `width: 100%; height: 100%` },\n            elFactory('div', { class: `Container-bnWmgR hjMXLA`, style: 'height: 100%' },\n              elFactory('div', { class: `Select--is-disabled css-14jk2my-container`, style: 'height: 100%' },\n                elFactory('div', { class: `Select__control Select__control--is-disabled css-1fhf3k1-control` },\n                  elFactory('div', { class: `Select__value-container css-1hwfws3` },\n                    timeSelectMarkup,\n                  ),\n                  elFactory('div', { class: `Select__indicators css-1wy0on6` },\n                    elFactory('div', { class: `Select__indicator Select__dropdown-indicator css-tlfecz-indicatorContainer` },\n                      elFactory('svg', { class: `css-19bqh2r` },\n                        elFactory('path', { d: `M4.516 7.548c0.436-0.446 1.043-0.481 1.576 0l3.908 3.747 3.908-3.747c0.533-0.481 1.141-0.446 1.574 0 0.436 0.445 0.408 1.197 0 1.615-0.406 0.418-4.695 4.502-4.695 4.502-0.217 0.223-0.502 0.335-0.787 0.335s-0.57-0.112-0.789-0.335c0 0-4.287-4.084-4.695-4.502s-0.436-1.17 0-1.615z` }),\n                      ),\n                    ),\n                  ),\n                ),\n              ),\n            ),\n          ),\n        ),\n      ),\n    );\n  },\n\n  addTimeSelector(event, period) {\n\n    if ($fw('#fw-time-selector').length === 0) {\n      $fw(document.body).append(timeSelect);\n    }\n\n    $fw('#fw-time-selector').show();\n\n    console.dir(\"$fw('.fw-time-selector').first()\");\n    console.dir($fw('#fw-time-selector'));\n\n    if ($fw('#fw-time-selector').length) {\n      const picker = $fw($fw('#fw-time-selector')[0])\n      console.dir('picker');\n      console.dir(picker[0]);\n      const top = event.target.getBoundingClientRect().top + window.pageYOffset + 35;\n      picker[0].style.left = event.target.getBoundingClientRect().left + 'px';\n      picker[0].style.top = top + 'px';\n      picker[0].classList.remove('d-none');\n\n      picker[0].onclick = function (event) {\n        DatepickerService.selectTime(event, period);\n      };\n    } else {\n      $fw('#fw-time-selector')[0].hide();\n      // datepicker.classList.add('d-none')\n    }\n  },\n\n  closeTimeSelector() {\n    const datepicker = document.getElementById('fw-time-selector');\n\n    if (!datepicker.classList.contains('d-none')) {\n      datepicker.classList.add('d-none')\n    }\n  },\n\n  selectTime(event, period) {\n    const timePlaceholder = Array.from(document.getElementsByClassName(`${period}-placeholder`))\n\n    if (timePlaceholder.length > 0) {\n\n      timePlaceholder[0].innerHTML = event.target.innerHTML;\n      DatepickerService.closeTimeSelector()\n\n      if (this.data.times.start) {\n        const date = this.data.times.start.split(' ')[0];\n        let time1 = event.target.innerHTML.split(' ')[0];\n\n        if (event.target.innerHTML.split(' ')[1] === 'PM') {\n          time1 = (parseInt(time1.split(':')[0]) + 12) + ':' + time1.split(':')[1];\n        }\n\n        const time = dayjs(`${date} ${time1}:00`).format('HH:mm:ss');\n        this.data.times.start = dayjs(`${date} ${time}`).format('YYYY-MM-DD HH:mm:ss');\n        DatepickerService.checkAvailability(this.data.times.start, this.data.times.end);\n      }\n\n      if (this.data.times.end) {\n        const date = this.data.times.end.split(' ')[0];\n        let time1 = event.target.innerHTML.split(' ')[0];\n\n        if (event.target.innerHTML.split(' ')[1] === 'PM') {\n          time1 = (parseInt(time1.split(':')[0]) + 12) + ':' + time1.split(':')[1];\n        }\n        const time = dayjs(`${date} ${time1}:00`).format('HH:mm:ss');\n        this.data.times.end = dayjs(`${date} ${time}`).format('YYYY-MM-DD HH:mm:ss');\n        DatepickerService.checkAvailability(this.data.times.start, this.data.times.end);\n      }\n    }\n  },\n\n  checkAvailability(start, end) {\n    console.log('checkAvailability');\n    console.log(start);\n    console.log(end);\n    console.log('-----');\n\n    if (dayjs(start).format('HH:mm:ss') === '00:00:00') {\n      start = dayjs(start).format('YYYY-MM-DD 08:00:00')\n    }\n    if (dayjs(end).format('HH:mm:ss') === '00:00:00') {\n      end = dayjs(end).format('YYYY-MM-DD 08:00:00')\n    }\n\n\n    const cartUuid = CartService.getCartUuid();\n\n    CartService.updateCart(`${COMPANY_URL}/api/v1/carts/${cartUuid}/set-period`, { start, end })\n      .then(data => {\n        const { cart } = data\n        window.fwCart = cart;\n\n        DatepickerService.setCartDates(cart);\n      }).catch(e => {\n      UtilService.log(e)\n    });\n\n    const fwProduct = UtilService.collectFWComponents();\n\n    ApiService.postData(`${COMPANY_URL}/api/v1/listings/availability?start=${start}&end=${end}`)\n      .then(data => {\n        const { listings } = data\n        window.fwListings = listings;\n\n\n        fwProduct.forEach(lid => {\n          const timePlaceholder = Array.from(document.getElementsByClassName(`${lid}-card-main`))\n\n          if (timePlaceholder.length > 0) {\n            console.dir('timePlaceholder');\n            console.dir('timePlaceholder');\n            const cardStatus = timePlaceholder[0].getElementsByClassName(`fw-status`)\n            console.dir(cardStatus);\n\n            if (cardStatus.length > 0) {\n              const foundListing = find(listings, (listing) => {\n                return listing.l_id === lid;\n              });\n\n\n              if (foundListing) {\n                if (get(foundListing, 'available.available')) {\n                  cardStatus[0].classList.add('fw-available');\n                  cardStatus[0].classList.remove('fw-unavailable');\n                  cardStatus[0].innerHTML = 'Available';\n                  cardStatus[0].classList.remove('fw-d-none');\n                } else {\n                  cardStatus[0].classList.add('fw-unavailable');\n                  cardStatus[0].classList.remove('fw-available');\n                  cardStatus[0].innerHTML = 'Unavailable';\n                  cardStatus[0].classList.remove('fw-d-none');\n                }\n              }\n            }\n          }\n        });\n\n        ListService.addListingList()\n      }).catch(e => {\n      console.dir(e);\n    });\n  },\n\n  setDatePickerValues(startDate, endDate) {\n    document.querySelector('#start-datepicker').value = dayjs(startDate).format('YYYY-MM-DD');\n    document.querySelector('#end-datepicker').value = dayjs(endDate).format('YYYY-MM-DD');\n  },\n\n  removeDatepicker(event) {\n    const datepicker = Array.from(document.getElementsByClassName('fleetwire-datepicker-backdrop'))\n\n    if (datepicker.length\n      &&\n      (event.target.classList.contains('fleetwire-datepicker-backdrop')\n        || event.target.classList.contains('fleetwire-modal-actions-button-close')\n        || event.target.classList.contains('fleetwire-modal-actions-button-white'))\n    ) {\n      DatepickerService.closeTimeSelector();\n      const datepickerContainer = Array.from(document.getElementsByClassName('fleetwire-datepicker-container'))\n      datepickerContainer[0].classList.remove('fleetwire-modal-show');\n      datepickerContainer[0].classList.add('fleetwire-modal-hide');\n      document.body.classList.remove('fw-modal-open');\n      setTimeout(() => {\n        if (datepicker.length) {\n          datepicker[0].remove();\n        }\n      }, 100)\n    }\n  },\n\n}\n\n\nexport default DatepickerService;","import { get, isNumber } from 'lodash';\nimport { formatNumberWithCommas } from '@/utils/numbers';\nimport DatepickerService from './datepicker.service';\nimport dayjs from 'dayjs';\nimport { CartService } from '@/services/cart.service';\nimport CardService from './card.service';\n\n\nconst COMPANY_URL = window.fleetwireOptions?.apiURL;\n\nconst DEBUG_ON = window.fleetwireOptions?.debug || true;\n\nconst UtilService = {\n\n  log(data) {\n    if (DEBUG_ON) {\n      console.dir(data);\n    }\n  },\n\n  error(message) {\n    if (DEBUG_ON) {\n      console.error(message);\n    }\n  },\n\n  setCompany(company) {\n    UtilService.updatePriceCurrency(get(company, 'currency'));\n    UtilService.updateCompanyName(get(company, 'name'));\n    UtilService.updateCompanyDefaultPickupTimes(get(company, 'operating_rules'));\n  },\n\n  updatePriceCurrency(currency) {\n    const prices = $fw('.fw-price-currency');\n\n    prices.each(function (index, el) {\n      const cardElement = $fw(el).closest('.fleetwire-listing-card')[0]\n      let price = el.innerHTML;\n      price = price.replace(/\\D/g, \"\");\n\n      if (cardElement) {\n        CardService.setPrice(cardElement, null, price * 100);\n      } else {\n\n\n        const symbol = get(currency, 'symbol', \"**\");\n        el.innerHTML = `${symbol}${price}`;\n      }\n    })\n  },\n\n  updateCompanyName(name) {\n    console.dir('updateCompanyName');\n    console.dir(name);\n    const names = $fw('.fw-company-name');\n\n    console.dir(names);\n    names.each(function (index, el) {\n      $fw(el).text(name);\n    })\n  },\n\n  /**\n   * Fill in the default pickup times for the company.\n   *\n   * @param {Object} rules\n   */\n  updateCompanyDefaultPickupTimes(rules) {\n    if (Object.keys(rules).length > 0) {\n      const pickup = $fw('.fw-from-time');\n      const until = $fw('.fw-until-time');\n\n      const found = rules.find(element => element.data_type === 'default_pickup_time');\n      const defaultTime = get(found, 'data.default_pickup_time.start', '09:00');\n\n      pickup.each(function (index, el) {\n        $fw(el).text(UtilService.formatDefaultTime(defaultTime));\n      })\n      until.each(function (index, el) {\n        $fw(el).text(UtilService.formatDefaultTime(defaultTime));\n      })\n    }\n  },\n\n  formatDefaultTime(time) {\n    return UtilService.getFormattedTimeFromDate(dayjs(`2022-08-08 ${time}`));\n  },\n\n  getFormattedTimeFromDate(date) {\n    return dayjs(date).format('h:mm A');\n  },\n\n  /**\n   * Build a FW component wrapper\n   *\n   * @private\n   */\n  buildFWComponent() {\n    const pDiv = document.createElement('div');\n    pDiv.classList.add('fleetwire-component');\n    return pDiv;\n  },\n\n  /**\n   * Collect the fleetwire components\n   *\n   * @private\n   * @returns {Array} Returns `array`.\n   */\n  collectFWComponents() {\n    const ids = [];\n    const products = document.querySelectorAll('[class*=fleetwire-]');\n\n    for (const product of products) {\n      const id = product?.dataset?.id;\n      if (id && !ids.includes(id)) {\n        ids.push(id);\n      }\n    }\n\n    return ids;\n  },\n\n  /**\n   * Load another script\n   * @param {string} url\n   */\n  loadScript(url) {\n    const script = document.createElement('script')\n    script.type = 'text/javascript';\n\n    if (script.readyState) {  //IE\n      script.onreadystatechange = function () {\n        if (script.readyState === 'loaded' || script.readyState === 'complete') {\n          script.onreadystatechange = null;\n        }\n      };\n    }\n\n    script.src = url;\n    document.getElementsByTagName('head')[0].appendChild(script);\n  },\n\n  /**\n   * If window is resized then resize the elements\n   * @param {WindowEventMap[keyof WindowEventMap]} data\n   */\n  setWidth(data = null) {\n    const productCards = Array.from(document.getElementsByClassName('fleetwire-listing-card'))\n\n    if (productCards.length > 0) {\n      productCards.forEach(function (card) {\n        const parent = card.parentNode;\n\n        const parentWidth = parent.offsetWidth\n\n        const o = Math.floor(parentWidth / 280);\n        const width = Math.max(1, Math.min(o, 6));\n        card.style.width = 100 / width + '%';\n      })\n    }\n  },\n\n\n  /**\n   * Get the listings url\n   *\n   * @private\n   * @param {String} [listingId] The Listing ID.\n   * @returns {String}\n   */\n  companyProductUrl(listingId) {\n    const times = DatepickerService.data.times\n    let query = '';\n    if (get(times, 'start')) {\n      const startDate = dayjs(get(times, 'start')).format('MMDDYY');\n      const startTime = dayjs(get(times, 'start')).format('HHmm');\n      query += `&startDate=${startDate}&startTime=${startTime}`;\n    }\n    if (get(times, 'end')) {\n      const endDate = dayjs(get(times, 'end')).format('MMDDYY');\n      const endTime = dayjs(get(times, 'end')).format('HHmm');\n      query += `&endDate=${endDate}&endTime=${endTime}`;\n    }\n\n    if (CartService.getCartUuid()) {\n      query += `&cart=${CartService.getCartUuid()}`;\n    }\n    return encodeURI(`${COMPANY_URL}/rental/reservations?l_id=${listingId}&${query}`);\n  },\n\n\n  /**\n   * Get the listings price image or default\n   *\n   * @private\n   * @param {Number} [value] The price.\n   * @returns {String}\n   */\n  getListingPrice(value) {\n    if (isNumber(value)) {\n      return value <= 0 ? 0 : formatNumberWithCommas(value * 0.01);\n    }\n    return value === 0 ? 0 : formatNumberWithCommas(+value * 0.01);\n  },\n\n  randomString(length = 5) {\n    let text = \"\";\n    const possible = \"ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789\";\n\n    for (let i = 0; i < length; i++)\n      text += possible.charAt(Math.floor(Math.random() * possible.length));\n\n    return text;\n  },\n\n\n  /**\n   * Get the listings first image or default\n   *\n   * @private\n   * @param {Object} [listing] The listing object.\n   * @returns {String}\n   */\n  productFirstImage(listing) {\n    return get(listing, 'listing_images[0].path', 'https://fleetwire.io/images/vehicle-placeholder.jpg');\n  },\n\n\n  /**\n   * Get the listings id\n   *\n   * @private\n   * @param {Object} [listing] The listing object.\n   * @returns {String}\n   */\n  getListingId(listing) {\n    return get(listing, 'dataset.id');\n  }\n\n}\n\nexport default UtilService;","import UtilService from \"@/tenant/Services/util.service\";\n\nconst CART_UUID = 'fw_CartId';\n\nconst CartService = {\n\n    /**\n     * Saves a cart uuid\n     */\n    saveCartUuid(uuid: string): void {\n        UtilService.log(`✅ Saving cart uuid: ${uuid}`);\n        localStorage.setItem(CART_UUID, uuid);\n    },\n\n    /**\n     * Gets a cart uuid\n     *\n     */\n    getCartUuid() {\n        return localStorage.getItem(CART_UUID);\n    },\n\n    /**\n     * Removes a cart uuid from localstorage\n     *\n     */\n    removeCartUuid(): void {\n        localStorage.removeItem(CART_UUID);\n    },\n\n\n    async createCart(url: string) {\n        const payload = {\n            current_url: window.location.href,\n        };\n        const response = await fetch(url, {\n            method: 'POST',\n            mode: 'cors',\n            cache: 'no-cache',\n            headers: {\n                'Content-Type': 'application/json',\n                Accept: 'application/json',\n            },\n            referrerPolicy: 'no-referrer',\n            body: JSON.stringify(payload),\n        });\n        return response.json();\n    },\n\n    async fetchCart(url: string) {\n        const response = await fetch(url, {\n            method: 'GET',\n            mode: 'cors',\n            cache: 'no-cache',\n            headers: {\n                Accept: 'application/json',\n            },\n            referrerPolicy: 'no-referrer',\n        });\n        return response.json();\n    },\n\n    async updateCart(url: string, payload: { start: string, end: string, current_url: string }) {\n        payload.current_url = window.location.href;\n\n        const response = await fetch(url, {\n            method: 'POST',\n            mode: 'cors',\n            cache: 'no-cache',\n            headers: {\n                'Content-Type': 'application/json',\n                Accept: 'application/json',\n            },\n            referrerPolicy: 'no-referrer',\n            body: JSON.stringify(payload),\n        });\n        return response.json();\n    },\n};\n\nexport {CartService};\n","export const emailRule = () => {\n    return [(v) => /.+@.+\\..+/.test(v) || 'E-mail must be a valid e-mail'];\n};\n\nexport const minLengthRule = (minLength: number) => {\n    return (v) => {\n        if (!v) return true; // Optional: Skip minLength check if value is empty. Remove this if you want empty values to fail this validation.\n        return v.length >= minLength || `Min of ${minLength} characters`;\n    };\n}\n\nexport const codeRule = (length = 4) => {\n    return [(v) => v.length >= length || `Should be ${length} characters`];\n};\n\nexport const requiredRule = (v: any): string | boolean => {\n    if (!v) {\n        return 'Required';\n    }\n    return true;\n};","import {useStore} from 'vuex';\nimport {computed} from 'vue';\nimport {StoreLoaders} from '@/types';\n\nexport function useAuth() {\n    const store = useStore();\n\n    const authLoading = computed<StoreLoaders>(() => store.getters['auth/loading']);\n\n    const authForm = computed(() => store.getters['auth/authForm']);\n    const apiTokens = computed(() => store.getters['auth/apiTokens']);\n    const user = computed(() => store.getters['auth/user']);\n    const masquerade = computed(() => store.getters['app/masquerade']);\n\n    const saveToken = (payload: { token: string }) => {\n        return store.dispatch('auth/saveToken', payload);\n    }\n\n    const checkStripe = async () => {\n        return await store.dispatch('auth/checkStripe');\n    }\n\n    const setAuthLoading = (payload: { subject: string, loading: boolean }) => {\n        return store.commit('auth/SET_AUTH_LOADING', payload);\n    }\n\n    const updateUserPassword = (payload: { password: string, newPassword: string }) => {\n        return store.dispatch('auth/updateUserPassword', payload);\n    }\n\n    const registrationFormRules = computed(() => ({\n        required: (value: string) => !!value || 'Required',\n        min: (v: string) => v.length >= 8 || 'Min of 8 characters',\n        email: [\n            (v: string) => !!v || 'E-mail is required',\n            (v: string) => /.+@.+\\..+/.test(v) || 'E-mail must be a valid e-mail',\n        ],\n        code: [\n            (v: string) => !!v || '2FA code is required',\n            (v: string) => v.length >= 4 || 'Should be 4 characters',\n        ],\n    }));\n\n    const masqueradeEnd = () => {\n        return store.dispatch('app/masqueradeEnd');\n    }\n\n    const logout = () => {\n        return store.dispatch('auth/logout');\n    }\n\n    const createUserTokens = () => {\n        return store.dispatch('auth/createUserTokens');\n    }\n    const deleteApiToken = (payload) => {\n        return store.dispatch('auth/deleteApiToken', payload);\n    }\n\n    const fetchSession = () => {\n        return store.dispatch('auth/fetchSession');\n    }\n\n    const fetchUserTokens = () => {\n        return store.dispatch('auth/fetchApiTokens');\n    }\n\n    const start2FAVerify = async (payload: { code?: string, phone: string, channel: string }) => {\n        try {\n            return await store.dispatch('auth/start2FAVerify', payload);\n        } catch (error) {\n            throw error;\n        }\n    }\n\n    const check2FAVerify = async (payload: { code: string, phone: string, disable: boolean }) => {\n        try {\n            return await store.dispatch('auth/check2FAVerify', payload);\n        } catch (error) {\n            throw error;\n        }\n    }\n\n    return {\n        user,\n        masquerade,\n        authLoading,\n        authForm,\n        apiTokens,\n        registrationFormRules,\n        setAuthLoading,\n        checkStripe,\n        saveToken,\n        logout,\n        masqueradeEnd,\n        createUserTokens,\n        deleteApiToken,\n        fetchUserTokens,\n        fetchSession,\n        updateUserPassword,\n        start2FAVerify,\n        check2FAVerify\n    }\n}","<template>\n  <section class=\"bg-gray-50 dark:bg-gray-900\">\n    <div class=\"flex flex-col items-center justify-center px-6 py-8 mx-auto md:h-screen lg:py-0\">\n      <a class=\"flex items-center mb-6 text-2xl font-semibold text-gray-900 dark:text-white\" href=\"/\">\n        <img alt=\"logo\" class=\"w-8 h-8 mr-2\" src=\"https://tenant.fleetwire.io/images/logo/fleetwire-logo-new.png\">\n        Fleetwire\n      </a>\n      <div class=\"w-full bg-white rounded-lg shadow dark:border md:mt-0 sm:max-w-md xl:p-0 dark:bg-gray-800 dark:border-gray-700\">\n        <div class=\"p-6 space-y-4 md:space-y-6 sm:p-8\">\n          <h1 class=\"text-xl font-bold leading-tight tracking-tight text-gray-900 md:text-2xl dark:text-white\">\n            {{ $t('login') }} {{ $t('to') }} Fleetwire\n          </h1>\n          <v-form :disabled=\"form.busy\" action=\"#\" class=\"space-y-4 md:space-y-6\" @keydown=\"form.onKeydown($event)\" @submit.prevent=\"login()\">\n\n            <div v-show=\"twoFactorAuth\" class=\"w-full text-muted mb-4 text-subtitle-1\">\n              Enter the code we sent over SMS to\n              <div>+1 (•••) ••• - ••{{ last2 }}</div>\n            </div>\n\n            <div v-if=\"!twoFactorAuth\">\n              <v-text-field\n                v-model=\"form.email\"\n                :autofocus=true\n                :label=\"$t('email')\"\n                :rules=\"registerFormRules.email\"\n                aria-label=\"Email Address\"\n                aria-required=\"true\"\n                autocomplete=\"username\"\n                class=\"mb-4\"\n                density=\"comfortable\"\n                name=\"email\"\n                required\n                tabindex=\"1\"\n                type=\"email\"\n                variant=\"outlined\"\n              />\n\n              <v-text-field\n                v-model=\"form.password\"\n                :append-inner-icon=\"showPassword ? 'mdi-eye' : 'mdi-eye-off'\"\n                :label=\"$t('password')\"\n                :rules=\"[registerFormRules.required, registerFormRules.min]\"\n                :type=\"showPassword ? 'text' : 'password'\"\n                aria-live=\"polite\"\n                aria-pressed=\"true\"\n                autocomplete=\"current-password\"\n                class=\"mb-4\"\n                density=\"comfortable\"\n                name=\"password\"\n                required\n                tabindex=\"2\"\n                variant=\"outlined\"\n                @click:append-inner=\"togglePasswordVisibility\"\n              />\n\n              <div class=\"flex items-center justify-between\">\n                <div class=\"flex items-start\">\n                  <div class=\"flex items-center h-5\">\n                    <input id=\"remember\" v-model=\"form.remember\" aria-describedby=\"remember\" class=\"w-4 h-4 border border-gray-300 rounded bg-gray-50 focus:ring-3 focus:ring-primary-300 dark:bg-gray-700 dark:border-gray-600 dark:focus:ring-primary-600 dark:ring-offset-gray-800\" required type=\"checkbox\">\n                  </div>\n                  <div class=\"ml-3 text-sm\">\n                    <label class=\"text-gray-500 dark:text-gray-300\" for=\"remember\">Remember me</label>\n                  </div>\n                </div>\n\n                <router-link\n                  :to=\"{ name: 'password.request', query: { email: form.email }}\"\n                  class=\"text-sm font-medium text-primary-600 hover:underline dark:text-primary-500\"\n                >\n                  {{ $t('forgot_password') }}\n                </router-link>\n              </div>\n            </div>\n\n            <div v-if=\"twoFactorAuth\">\n              <v-text-field\n                v-model=\"form.code\"\n                :label=\"$t('2FA Code')\"\n                :rules=\"registerFormRules.code\"\n                autocomplete=\"one-time-code\"\n                name=\"code\"\n                required\n                tabindex=\"3\"\n                variant=\"outlined\"\n              />\n            </div>\n\n            <v-btn :disabled=\"isButtonDisabled\" :loading=\"form.busy\" block name=\"login-btn\" size=\"large\" tabindex=\"4\" type=\"submit\">\n              Sign in\n            </v-btn>\n            <p class=\"text-sm font-light text-gray-500 dark:text-gray-400\">\n              Don’t have an account yet?\n              <router-link :to=\"{ name: 'register' }\" class=\"font-medium text-primary-600 hover:underline dark:text-primary-500\" data-testid=register-link>\n                <b>{{ $t('register') }}</b>\n              </router-link>\n            </p>\n\n            <div>\n              <v-alert v-if=\"loginFail\" density=\"compact\" role=\"alert\" type=\"error\" variant=\"outlined\">\n                {{ loginFailMessage }}\n              </v-alert>\n            </div>\n\n          </v-form>\n\n        </div>\n\n      </div>\n    </div>\n  </section>\n</template>\n\n<script lang=\"ts\" setup>\nimport {codeRule, emailRule, minLengthRule, requiredRule} from '@/utils/formValidationRules';\nimport {computed, onBeforeMount, ref, watch} from 'vue';\nimport {useRoute, useRouter} from 'vue-router';\nimport {useAuth} from '@/composables/useAuth';\nimport Form from 'vform';\n\nconst {saveToken} = useAuth();\nconst route = useRoute();\nconst router = useRouter();\n\nconst form = ref(new Form({\n  email: '',\n  password: '',\n  code: '',\n  remember: true,\n}));\n\nconst showPassword = ref(false);\nconst loginFail = ref(false);\nconst loginFailMessage = ref('Email and/or password is incorrect.');\nconst redirect = ref('');\nconst twoFactorAuth = ref(false);\nconst last2 = ref('');\n\nconst isFormValid = computed(() =>\n  ['email', 'password'].every((field) => form.value[field]?.length)\n);\n\nconst isButtonDisabled = computed(() => form.value.busy || !isFormValid.value);\n\nconst registerFormRules = {\n  email: emailRule(),\n  min: minLengthRule(8),\n  code: codeRule(),\n  required: requiredRule,\n};\n\nconst togglePasswordVisibility = () => {\n  showPassword.value = !showPassword.value;\n};\n\nonBeforeMount(() => {\n  form.value.email = route.query?.email || route.params?.email || form.value?.email;\n});\n\nwatch(() => route.query, (newQuery) => {\n  if (!newQuery) return;\n\n  const redirectQuery = newQuery.redirect;\n  redirect.value = Array.isArray(redirectQuery) ? redirectQuery[0] : redirectQuery ?? undefined;\n}, {immediate: true});\n\n\nconst handleLoginResponse = async (data: { last2?: string, access_token: string }) => {\n  if (data?.['2fa']) {\n    twoFactorAuth.value = true;\n    last2.value = data?.last2 ?? 'xx';\n    return;\n  }\n\n  await saveToken({token: data?.access_token});\n\n  const redirectQuery = route.query.redirect;\n  let redirectTo = {path: '/dashboard'};\n\n\n  if (redirectQuery) {\n    try {\n      redirectTo = {path: decodeURIComponent(Array.isArray(redirectQuery) ? redirectQuery[0] : redirectQuery)};\n    } catch (err) {\n      console.warn(\"Invalid redirect URL:\", redirectQuery);\n    }\n  }\n\n  await router.push(redirectTo).catch(err => {\n    console.error(\"Router navigation error:\", err);\n  });\n};\n\nconst login = async () => {\n  if (form.value.busy) return;\n\n  loginFail.value = false;\n  form.value.busy = true;\n\n  try {\n    const {data} = await form.value.post('/v1/auth/login');\n    await handleLoginResponse(data);\n  } catch (error) {\n    handleLoginError(error);\n  } finally {\n    form.value.busy = false;\n  }\n};\n\nconst handleLoginError = (error: { response: { status: number, data: { error: string } } }) => {\n  if (error?.response?.status === 422) {\n    loginFailMessage.value = error?.response?.data?.error || 'An unknown error occurred. Please try again.';\n    twoFactorAuth.value = false;\n    form.value.code = '';\n  }\n  loginFail.value = true;\n};\n</script>\n","<template>\n  <section class=\"bg-gray-50 dark:bg-gray-900 bg-fixed\">\n    <div class=\"flex flex-col items-center justify-center px-6 py-8 mx-auto md:h-screen lg:py-0\">\n      <a class=\"flex items-center mb-6 text-2xl font-semibold text-gray-900 dark:text-white\" href=\"/\">\n        <img alt=\"logo\" class=\"w-8 h-8 mr-2\" src=\"https://tenant.fleetwire.io/images/logo/fleetwire-logo-new.png\">\n        Fleetwire\n      </a>\n      <div class=\"w-full bg-white rounded-lg shadow dark:border md:mt-0 sm:max-w-md xl:p-0 dark:bg-gray-800 dark:border-gray-700\">\n        <div class=\"p-6 space-y-3 md:space-y-4 sm:p-8\">\n          <h1 class=\"text-xl font-bold leading-tight tracking-tight text-gray-900 md:text-2xl dark:text-white\">\n            Start a free 14-day trial\n          </h1>\n          <v-form :disabled=\"form.busy\" class=\"space-y-2 md:space-y-3\" @keydown=\"form.onKeydown($event)\" @submit.prevent=\"register\">\n            <div>\n              <v-text-field\n                v-model=\"form.company_name\"\n                :autofocus=true\n                :error-messages=\"form.errors.get('company_name')\"\n                :label=\"$t('company_name')\"\n                density=\"comfortable\"\n                name=\"company_name\"\n                required\n                variant=\"outlined\"\n              />\n            </div>\n            <div>\n              <v-text-field\n                v-model=\"form.email\"\n                :error-messages=\"form.errors.get('email')\"\n                :label=\"$t('company_email')\"\n                :rules=\"registrationFormRules.email\"\n                density=\"comfortable\"\n                name=\"email\"\n                required\n                variant=\"outlined\"\n              />\n            </div>\n            <div>\n              <v-text-field\n                v-model=\"form.password\"\n                :error-messages=\"form.errors.get('password')\"\n                :label=\"$t('password')\"\n                :rules=\"[registrationFormRules.required, registrationFormRules.min]\"\n                autocomplete=\"new-password\"\n                density=\"comfortable\"\n                name=\"password\"\n                type=\"password\"\n                variant=\"outlined\"\n              />\n            </div>\n\n            <div class=\"flex items-start\">\n              <div class=\"flex items-center h-5\">\n                <input id=\"fw-agree-checkbox\" v-model=\"form.agree\" :error-messages=\"form.errors.get('agree')\" aria-describedby=\"terms\" class=\"w-4 h-4 border border-gray-300 rounded bg-gray-50 focus:ring-3 focus:ring-primary-300 dark:bg-gray-700 dark:border-gray-600 dark:focus:ring-primary-600 dark:ring-offset-gray-800\" name=\"agree\" required type=\"checkbox\">\n              </div>\n              <div class=\"ml-3 text-sm\">\n                <label class=\"font-light text-gray-500 dark:text-gray-300\" for=\"fw-agree-checkbox\">I accept the\n                  <a v-tippy class=\"font-medium text-primary-600 hover:underline dark:text-primary-500\"\n                     content=\"Opens in a new window\"\n                     href=\"https://fleetwire.io/terms?utm_source=register_page&utm_medium=web&utm_campaign=signup&utm_content=terms_link\"\n                     target=\"_blank\"\n                     @click.stop\n                  >{{ $t('terms_of_service') }}</a>\n                  &\n                  <a v-tippy class=\"font-medium text-primary-600 hover:underline dark:text-primary-500\"\n                     content=\"Opens in a new window\"\n                     href=\"https://fleetwire.io/privacy-policy?utm_source=register_page&utm_medium=web&utm_campaign=signup&utm_content=privacy_link\"\n                     target=\"_blank\"\n                     @click.stop\n                  >Privacy Policy</a>\n                </label>\n              </div>\n            </div>\n            <v-btn id=\"fw-register-button\" :disabled=\"isButtonDisabled\" :loading=\"form.busy\" block class=\"mt-5\" size=\"large\" type=\"submit\">\n              {{ $t('register') }}\n            </v-btn>\n\n            <p class=\"mt-5 text-sm font-light text-gray-500 dark:text-gray-400\">\n              Already have an account?\n              <router-link :to=\"{ name: 'login' }\" class=\"font-medium text-primary-600 hover:underline dark:text-primary-500\">\n                <b>{{ $t('login') }} here</b>\n              </router-link>\n            </p>\n          </v-form>\n        </div>\n      </div>\n\n      <div class=\"mt-5 text-center\">\n        <div class=\"p-1 bg-gray-100 border font-medium text-xs text-gray-600 mb-14 mx-4 line rounded-md\" style=\" border: 1px solid rgb(224, 228, 232);background: rgb(224, 228, 232);\">\n          It only takes a few seconds, no credit card required!\n        </div>\n      </div>\n    </div>\n  </section>\n</template>\n\n<script lang=\"ts\" setup>\nimport {computed, onMounted, ref} from 'vue';\nimport {useRoute, useRouter} from 'vue-router';\nimport {useStore} from 'vuex';\nimport {useAuth} from '@/composables/useAuth';\nimport Form from 'vform';\n\nconst route = useRoute();\nconst router = useRouter();\nconst store = useStore();\nconst {registrationFormRules} = useAuth();\n\nconst form = ref(new Form({\n  email: '',\n  password: '',\n  company_name: '',\n  agree: false,\n}));\n\nconst isFormValid = computed(\n  () => ['email', 'password', 'company_name'].every((field) => form.value[field]?.length) && form.value.agree\n);\n\nconst isButtonDisabled = computed(() => form.value.busy || !isFormValid.value);\n\nonMounted(() => {\n  form.value.email = (route.query?.email as string) || '';\n  form.value.company_name = (route.query?.company as string) || '';\n});\n\nconst saveRegisterId = async (id: string) => {\n  try {\n    await store.dispatch('auth/saveRegisterId', id);\n  } catch (error) {\n    console.error('Failed to save registration ID:', error);\n  }\n};\n\nconst register = async () => {\n  if (!isFormValid.value) return;\n\n  // Register the user.\n  try {\n    const {data} = await form.value.post('/v1/register');\n    await saveRegisterId(data.register_id);\n\n    // this.$gtag.event('Register', { email: form.value.email });\n    // Log success and redirect\n    console.info('User registered successfully', data);\n    router.push({name: 'company.next-step'}).catch((err) => console.error(err));\n  } catch (e) {\n    console.error('Registration failed:', e);\n  }\n};\n</script>\n","import dayjs, {Dayjs} from 'dayjs';\n\n\n/**\n * Format a date with a default format or supplied.\n *\n * @param date - The date to be formatted, can be a Date object, a string, or a number.\n * @param format - The format in which to display the date.\n *\n * @return The formatted date string.\n */\nexport function formatTripDate(date: Date | string | number, format: string = 'MMM DD, YYYY @ h:mma'): string {\n    return dayjs(date).format(format);\n}\n\nexport const guessTimeZone = dayjs.tz?.guess();\n\nexport const getUserTimezone = () => {\n    return Intl.DateTimeFormat().resolvedOptions().timeZone;\n}\n\nexport const calcMiles = (\n    dates: { start: Date | Dayjs, end: Date | Dayjs },\n    milesIncluded: number,\n    maxDistance?: number\n): string => {\n    const startDate = dates?.start ? dayjs(dates.start) : dayjs();\n    const endDate = dates?.end ? dayjs(dates.end) : dayjs();\n\n    if (milesIncluded === -1) return 'unlimited';\n\n    const units = endDate.diff(startDate, 'days') + (endDate.diff(startDate, 'hours') % 24 > 0 ? 1 : 0);\n    const allowance = units * milesIncluded;\n\n\n    const x = maxDistance ? Math.min(maxDistance, allowance) : allowance;\n\n    if (x === 0) return '0';\n\n    return x.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',');\n};\n\nexport const generateReservationTimes = (\n    startHour: number = 0,          // Opening hour in 24-hour format\n    endHour: number = 24,           // Closing hour in 24-hour format\n    interval: number = 15,          // Interval between time slots in minutes\n    selectedDate: Dayjs | string | null = null, // The selected date (e.g., `currentSelectedDates.value.start`)\n    allowPastTime: boolean = false  // Whether past times are allowed for today\n) => {\n    const times = [];\n    const now = dayjs(); // Current time\n    const start = dayjs().hour(startHour).minute(0).second(0); // Start of time range\n    const end = dayjs().hour(endHour).minute(0).second(0); // End of time range\n\n    let effectiveStart = start;\n\n    // Check if the selected date is today\n    const isToday = selectedDate ? dayjs().isSame(selectedDate, 'day') : false;\n\n    // Adjust the start time if it's today and past times are not allowed\n    if (isToday && !allowPastTime && now.isAfter(start)) {\n        const minutesSinceStart = now.diff(start, 'minutes');\n        const nextIntervalMinutes = Math.ceil(minutesSinceStart / interval) * interval;\n        effectiveStart = start.add(nextIntervalMinutes, 'minute');\n    }\n\n    // Validate if the time range is valid\n    if (startHour >= endHour || interval <= 0) {\n        console.warn(\"Invalid time range or interval\");\n        return times; // Return empty array if invalid\n    }\n\n    // Generate time slots between the effective start and end\n    for (let time = effectiveStart; time.isBefore(end); time = time.add(interval, 'minute')) {\n        const timeValue = time.format('HH:mm:00');\n        const timeTitle = timeValue === '12:00:00' ? 'Noon' : time.format('hh:mm a');\n\n        times.push({\n            title: timeTitle,\n            value: timeValue,\n        });\n    }\n\n    return times;\n};\n\nexport const timezones = [\n    'Europe/Andorra',\n    'Asia/Dubai',\n    'Asia/Kabul',\n    'Europe/Tirane',\n    'Asia/Yerevan',\n    'Antarctica/Casey',\n    'Antarctica/Davis',\n    'Antarctica/DumontDUrville', // https://bugs.chromium.org/p/chromium/issues/detail?id=928068\n    'Antarctica/Mawson',\n    'Antarctica/Palmer',\n    'Antarctica/Rothera',\n    'Antarctica/Syowa',\n    'Antarctica/Troll',\n    'Antarctica/Vostok',\n    'America/Argentina/Buenos_Aires',\n    'America/Argentina/Cordoba',\n    'America/Argentina/Salta',\n    'America/Argentina/Jujuy',\n    'America/Argentina/Tucuman',\n    'America/Argentina/Catamarca',\n    'America/Argentina/La_Rioja',\n    'America/Argentina/San_Juan',\n    'America/Argentina/Mendoza',\n    'America/Argentina/San_Luis',\n    'America/Argentina/Rio_Gallegos',\n    'America/Argentina/Ushuaia',\n    'Pacific/Pago_Pago',\n    'Europe/Vienna',\n    'Australia/Lord_Howe',\n    'Antarctica/Macquarie',\n    'Australia/Hobart',\n    'Australia/Currie',\n    'Australia/Melbourne',\n    'Australia/Sydney',\n    'Australia/Broken_Hill',\n    'Australia/Brisbane',\n    'Australia/Lindeman',\n    'Australia/Adelaide',\n    'Australia/Darwin',\n    'Australia/Perth',\n    'Australia/Eucla',\n    'Asia/Baku',\n    'America/Barbados',\n    'Asia/Dhaka',\n    'Europe/Brussels',\n    'Europe/Sofia',\n    'Atlantic/Bermuda',\n    'Asia/Brunei',\n    'America/La_Paz',\n    'America/Noronha',\n    'America/Belem',\n    'America/Fortaleza',\n    'America/Recife',\n    'America/Araguaina',\n    'America/Maceio',\n    'America/Bahia',\n    'America/Sao_Paulo',\n    'America/Campo_Grande',\n    'America/Cuiaba',\n    'America/Santarem',\n    'America/Porto_Velho',\n    'America/Boa_Vista',\n    'America/Manaus',\n    'America/Eirunepe',\n    'America/Rio_Branco',\n    'America/Nassau',\n    'Asia/Thimphu',\n    'Europe/Minsk',\n    'America/Belize',\n    'America/St_Johns',\n    'America/Halifax',\n    'America/Glace_Bay',\n    'America/Moncton',\n    'America/Goose_Bay',\n    'America/Blanc-Sablon',\n    'America/Toronto',\n    'America/Nipigon',\n    'America/Thunder_Bay',\n    'America/Iqaluit',\n    'America/Pangnirtung',\n    'America/Atikokan',\n    'America/Winnipeg',\n    'America/Rainy_River',\n    'America/Resolute',\n    'America/Rankin_Inlet',\n    'America/Regina',\n    'America/Swift_Current',\n    'America/Edmonton',\n    'America/Cambridge_Bay',\n    'America/Yellowknife',\n    'America/Inuvik',\n    'America/Creston',\n    'America/Dawson_Creek',\n    'America/Fort_Nelson',\n    'America/Vancouver',\n    'America/Whitehorse',\n    'America/Dawson',\n    'Indian/Cocos',\n    'Europe/Zurich',\n    'Africa/Abidjan',\n    'Pacific/Rarotonga',\n    'America/Santiago',\n    'America/Punta_Arenas',\n    'Pacific/Easter',\n    'Asia/Shanghai',\n    'Asia/Urumqi',\n    'America/Bogota',\n    'America/Costa_Rica',\n    'America/Havana',\n    'Atlantic/Cape_Verde',\n    'America/Curacao',\n    'Indian/Christmas',\n    'Asia/Nicosia',\n    'Asia/Famagusta',\n    'Europe/Prague',\n    'Europe/Berlin',\n    'Europe/Copenhagen',\n    'America/Santo_Domingo',\n    'Africa/Algiers',\n    'America/Guayaquil',\n    'Pacific/Galapagos',\n    'Europe/Tallinn',\n    'Africa/Cairo',\n    'Africa/El_Aaiun',\n    'Europe/Madrid',\n    'Africa/Ceuta',\n    'Atlantic/Canary',\n    'Europe/Helsinki',\n    'Pacific/Fiji',\n    'Atlantic/Stanley',\n    'Pacific/Chuuk',\n    'Pacific/Pohnpei',\n    'Pacific/Kosrae',\n    'Atlantic/Faroe',\n    'Europe/Paris',\n    'Europe/London',\n    'Asia/Tbilisi',\n    'America/Cayenne',\n    'Africa/Accra',\n    'Europe/Gibraltar',\n    'America/Godthab',\n    'America/Danmarkshavn',\n    'America/Scoresbysund',\n    'America/Thule',\n    'Europe/Athens',\n    'Atlantic/South_Georgia',\n    'America/Guatemala',\n    'Pacific/Guam',\n    'Africa/Bissau',\n    'America/Guyana',\n    'Asia/Hong_Kong',\n    'America/Tegucigalpa',\n    'America/Port-au-Prince',\n    'Europe/Budapest',\n    'Asia/Jakarta',\n    'Asia/Pontianak',\n    'Asia/Makassar',\n    'Asia/Jayapura',\n    'Europe/Dublin',\n    'Asia/Jerusalem',\n    'Asia/Kolkata',\n    'Indian/Chagos',\n    'Asia/Baghdad',\n    'Asia/Tehran',\n    'Atlantic/Reykjavik',\n    'Europe/Rome',\n    'America/Jamaica',\n    'Asia/Amman',\n    'Asia/Tokyo',\n    'Africa/Nairobi',\n    'Asia/Bishkek',\n    'Pacific/Tarawa',\n    'Pacific/Enderbury',\n    'Pacific/Kiritimati',\n    'Asia/Pyongyang',\n    'Asia/Seoul',\n    'Asia/Almaty',\n    'Asia/Qyzylorda',\n    'Asia/Qostanay', // https://bugs.chromium.org/p/chromium/issues/detail?id=928068\n    'Asia/Aqtobe',\n    'Asia/Aqtau',\n    'Asia/Atyrau',\n    'Asia/Oral',\n    'Asia/Beirut',\n    'Asia/Colombo',\n    'Africa/Monrovia',\n    'Europe/Vilnius',\n    'Europe/Luxembourg',\n    'Europe/Riga',\n    'Africa/Tripoli',\n    'Africa/Casablanca',\n    'Europe/Monaco',\n    'Europe/Chisinau',\n    'Pacific/Majuro',\n    'Pacific/Kwajalein',\n    'Asia/Yangon',\n    'Asia/Ulaanbaatar',\n    'Asia/Hovd',\n    'Asia/Choibalsan',\n    'Asia/Macau',\n    'America/Martinique',\n    'Europe/Malta',\n    'Indian/Mauritius',\n    'Indian/Maldives',\n    'America/Mexico_City',\n    'America/Cancun',\n    'America/Merida',\n    'America/Monterrey',\n    'America/Matamoros',\n    'America/Mazatlan',\n    'America/Chihuahua',\n    'America/Ojinaga',\n    'America/Hermosillo',\n    'America/Tijuana',\n    'America/Bahia_Banderas',\n    'Asia/Kuala_Lumpur',\n    'Asia/Kuching',\n    'Africa/Maputo',\n    'Africa/Windhoek',\n    'Pacific/Noumea',\n    'Pacific/Norfolk',\n    'Africa/Lagos',\n    'America/Managua',\n    'Europe/Amsterdam',\n    'Europe/Oslo',\n    'Asia/Kathmandu',\n    'Pacific/Nauru',\n    'Pacific/Niue',\n    'Pacific/Auckland',\n    'Pacific/Chatham',\n    'America/Panama',\n    'America/Lima',\n    'Pacific/Tahiti',\n    'Pacific/Marquesas',\n    'Pacific/Gambier',\n    'Pacific/Port_Moresby',\n    'Pacific/Bougainville',\n    'Asia/Manila',\n    'Asia/Karachi',\n    'Europe/Warsaw',\n    'America/Miquelon',\n    'Pacific/Pitcairn',\n    'America/Puerto_Rico',\n    'Asia/Gaza',\n    'Asia/Hebron',\n    'Europe/Lisbon',\n    'Atlantic/Madeira',\n    'Atlantic/Azores',\n    'Pacific/Palau',\n    'America/Asuncion',\n    'Asia/Qatar',\n    'Indian/Reunion',\n    'Europe/Bucharest',\n    'Europe/Belgrade',\n    'Europe/Kaliningrad',\n    'Europe/Moscow',\n    'Europe/Simferopol',\n    'Europe/Kirov',\n    'Europe/Astrakhan',\n    'Europe/Volgograd',\n    'Europe/Saratov',\n    'Europe/Ulyanovsk',\n    'Europe/Samara',\n    'Asia/Yekaterinburg',\n    'Asia/Omsk',\n    'Asia/Novosibirsk',\n    'Asia/Barnaul',\n    'Asia/Tomsk',\n    'Asia/Novokuznetsk',\n    'Asia/Krasnoyarsk',\n    'Asia/Irkutsk',\n    'Asia/Chita',\n    'Asia/Yakutsk',\n    'Asia/Khandyga',\n    'Asia/Vladivostok',\n    'Asia/Ust-Nera',\n    'Asia/Magadan',\n    'Asia/Sakhalin',\n    'Asia/Srednekolymsk',\n    'Asia/Kamchatka',\n    'Asia/Anadyr',\n    'Asia/Riyadh',\n    'Pacific/Guadalcanal',\n    'Indian/Mahe',\n    'Africa/Khartoum',\n    'Europe/Stockholm',\n    'Asia/Singapore',\n    'America/Paramaribo',\n    'Africa/Juba',\n    'Africa/Sao_Tome',\n    'America/El_Salvador',\n    'Asia/Damascus',\n    'America/Grand_Turk',\n    'Africa/Ndjamena',\n    'Indian/Kerguelen',\n    'Asia/Bangkok',\n    'Asia/Dushanbe',\n    'Pacific/Fakaofo',\n    'Asia/Dili',\n    'Asia/Ashgabat',\n    'Africa/Tunis',\n    'Pacific/Tongatapu',\n    'Europe/Istanbul',\n    'America/Port_of_Spain',\n    'Pacific/Funafuti',\n    'Asia/Taipei',\n    'Europe/Kiev',\n    'Europe/Uzhgorod',\n    'Europe/Zaporozhye',\n    'Pacific/Wake',\n    'America/New_York',\n    'America/Detroit',\n    'America/Kentucky/Louisville',\n    'America/Kentucky/Monticello',\n    'America/Indiana/Indianapolis',\n    'America/Indiana/Vincennes',\n    'America/Indiana/Winamac',\n    'America/Indiana/Marengo',\n    'America/Indiana/Petersburg',\n    'America/Indiana/Vevay',\n    'America/Chicago',\n    'America/Indiana/Tell_City',\n    'America/Indiana/Knox',\n    'America/Menominee',\n    'America/North_Dakota/Center',\n    'America/North_Dakota/New_Salem',\n    'America/North_Dakota/Beulah',\n    'America/Denver',\n    'America/Boise',\n    'America/Phoenix',\n    'America/Los_Angeles',\n    'America/Anchorage',\n    'America/Juneau',\n    'America/Sitka',\n    'America/Metlakatla',\n    'America/Yakutat',\n    'America/Nome',\n    'America/Adak',\n    'Pacific/Honolulu',\n    'America/Montevideo',\n    'Asia/Samarkand',\n    'Asia/Tashkent',\n    'America/Caracas',\n    'Asia/Ho_Chi_Minh',\n    'Pacific/Efate',\n    'Pacific/Wallis',\n    'Pacific/Apia',\n    'Africa/Johannesburg',\n];\n","<template>\n  <section class=\"bg-gray-50 dark:bg-gray-900 signup-setup\">\n    <div class=\"flex flex-col items-center justify-center px-6 py-8 mx-auto md:h-screen lg:py-0\">\n      <a class=\"flex items-center mb-6 text-2xl font-semibold text-gray-900 dark:text-white\" href=\"/\">\n        <img alt=\"logo\" class=\"w-8 h-8 mr-2\" src=\"https://tenant.fleetwire.io/images/logo/fleetwire-logo-new.png\">\n        Fleetwire\n      </a>\n      <div class=\"w-full bg-white rounded-lg shadow dark:border md:mt-0 sm:max-w-md xl:p-0 dark:bg-gray-800 dark:border-gray-700\">\n        <div class=\"p-6 space-y-4 md:space-y-6 sm:p-8\">\n          <h1 class=\"text-xl font-bold leading-tight tracking-tight text-gray-900 md:text-2xl dark:text-white\">\n            Continue with your setup\n          </h1>\n          <v-form :disabled=\"form.busy\" class=\"space-y-2 md:space-y-3\" @keydown=\"form.onKeydown($event)\" @submit.prevent=\"completeRegister\">\n            <div>\n              <v-text-field\n                v-model=\"form.first_name\"\n                :autofocus=\"true\"\n                :error-messages=\"form.errors.get('first_name')\"\n                :label=\"$t('first_name')\"\n                name=\"first_name\"\n                variant=\"outlined\"\n              />\n            </div>\n            <div>\n              <v-text-field\n                v-model=\"form.last_name\"\n                :error-messages=\"form.errors.get('last_name')\"\n                :label=\"$t('last_name')\"\n                name=\"last_name\"\n                variant=\"outlined\"\n              />\n            </div>\n            <div>\n              <vue-tel-input\n                v-model=\"form.phone\"\n                v-bind=\"tellProps\"\n                @validate=\"inputChanged\"\n              />\n            </div>\n\n            <div class=\"mb-10 mt-5\">\n              <div class=\"preferences mb-2\">\n                <div class=\"preferences__preview\">\n                  <div v-if=\"!editPreferences\">\n                    <v-btn class=\"edit-toggle\" size=\"small\" variant=\"text\" @click=\"editPreferences = !editPreferences\">\n                      Edit\n                    </v-btn>\n                    <span class=\"flag\">\n                      <span style=\"width: 1em; height: 1em; margin: 0 0.05em 0 0.1em; vertical-align: -0.1em;\">\n                        {{ displayCountryFlag }}\n                      </span>\n                    </span>\n                    <div class=\"text\">\n                      <div class=\"country\">{{ displayCountry }}</div>\n                      Currency: {{ displayCurrency }}<br>\n                      Date format: {{ displayDateFormat }}<br>\n                      Time format: {{ form.timezone }}, {{ displayTimeFormat }}\n                    </div>\n                  </div>\n                  <div v-if=\"editPreferences\">\n                    <div>\n                      <div class=\"col-6\">\n                        <v-autocomplete\n                          v-model=\"form.country\"\n                          :items=\"countriesAsArray\"\n                          density=\"compact\"\n                          label=\"Country\"\n                          variant=\"outlined\"\n                        />\n                      </div>\n                      <div class=\"col-6\">\n                        <v-autocomplete\n                          v-model=\"form.timezone\"\n                          :items=\"timezones\"\n                          density=\"compact\"\n                          label=\"Timezone\"\n                          variant=\"outlined\"\n                        />\n                      </div>\n                    </div>\n                    <div>\n                      <div class=\"col-6\">\n                        <v-autocomplete\n                          v-model=\"form.currency\"\n                          :items=\"currenciesAsArray\"\n                          density=\"compact\"\n                          label=\"Currency\"\n                          variant=\"outlined\"\n                        />\n                      </div>\n                      <div class=\"col-6\">\n                        <v-select\n                          v-model=\"form.date_format\"\n                          :items=\"dataFormatOptions\"\n                          density=\"compact\"\n                          label=\"Date Format\"\n                          variant=\"outlined\"\n                        />\n                      </div>\n                    </div>\n                    <div>\n                      <div class=\"col-6\">\n                        <v-autocomplete\n                          v-model=\"form.time_format\"\n                          :items=\"timeFormatOptions\"\n                          density=\"compact\"\n                          item-title=\"label\"\n                          item-value=\"value\"\n                          label=\"Time Format\"\n                          variant=\"outlined\"\n                        />\n                      </div>\n                    </div>\n\n                    <v-btn class=\"edit-toggle close\" size=\"small\" variant=\"plain\" @click=\"editPreferences = !editPreferences\">\n                      Close\n                    </v-btn>\n                  </div>\n                </div>\n              </div>\n            </div>\n\n            <v-btn :disabled=\"form.busy || !regFieldsMissing\" :loading=\"form.busy\" block class=\"mt-5\" size=\"large\" type=\"submit\" variant=\"elevated\">\n              {{ $t('complete') }}\n            </v-btn>\n          </v-form>\n        </div>\n      </div>\n    </div>\n  </section>\n</template>\n\n<script lang=\"ts\" setup>\nimport {computed, onMounted, ref, watch} from 'vue';\nimport Form from 'vform';\nimport {useStore} from 'vuex';\nimport {isEmpty, isSet} from 'lodash';\nimport {VueTelInput} from 'vue-tel-input';\nimport 'vue-tel-input/vue-tel-input.css';\nimport dayjs from 'dayjs';\nimport utc from 'dayjs/plugin/utc';\nimport timezone from 'dayjs/plugin/timezone';\nimport {useRouter} from 'vue-router';\nimport {timezones} from '@/utils/dates';\nimport {CountryOption} from '@/types';\n\ndayjs.extend(utc);\ndayjs.extend(timezone);\n\n\nconst router = useRouter();\nconst store = useStore();\nconst editPreferences = ref(false);\n\nconst countryOptions = store.getters['app/countryOptions'];\nconst registerId = store.getters['auth/registerId'];\n\nconst saveToken = async (token: { token: string, remember: boolean }) => {\n  await store.dispatch('auth/saveToken', token);\n};\n\nconst removeRegisterId = async () => {\n  await store.dispatch('auth/saveRegisterId', '');\n};\n\nconst countries = countryOptions.reduce((acc: string[], country: CountryOption) => {\n  acc[country.code] = country.name;\n  return acc;\n}, {});\n\n\nconst form = ref(new Form({\n  phone: '',\n  phoneMeta: null,\n  first_name: '',\n  last_name: '',\n  team_size: 1,\n  register_id: '',\n  timezone: '',\n  country: 'US',\n  currency: 'USD',\n  date_format: 'mm-dd-yyyy',\n  time_format: '12-hour',\n}));\n\nconst guessCountryData = ref({\n  country: '',\n  timezone: '',\n  flag: '',\n});\n\nconst regMissing = ref(false);\nconst tellProps = ref({\n  defaultCountry: 'US',\n  preferredCountries: ['US', 'CA'],\n});\nconst ipData = ref(null);\nconst dataFormatOptions = ref(['mm-dd-yyyy', 'dd-mm-yyyy', 'yyyy-mm-dd']);\nconst timeFormatOptions = ref([\n  {\n    label: '12-Hour clock',\n    value: '12-hour',\n  },\n  {\n    label: '24-Hour clock',\n    value: '24-hour',\n  },\n]);\nconst intl = ref(Intl.DateTimeFormat().resolvedOptions());\n\nconst currenciesAsArray = computed(() => {\n  const uniqueCodes = new Set();\n  const prioritized = ['USD', 'EUR']\n\n  const filtered = countryOptions\n    .map((country: CountryOption) => country.currency)\n    .filter((code: string) => {\n      if (code && !uniqueCodes.has(code)) {\n        uniqueCodes.add(code);\n        return true;\n      }\n      return false;\n    });\n\n  return [...new Set([...prioritized, ...filtered])];\n});\n\nconst countriesAsArray = computed(() => {\n  return countryOptions.map((country: CountryOption) => ({\n    title: country.name,\n    value: country.code,\n  }));\n});\n\n\nconst displayCountry = computed(() => {\n  return countries[form.value.country];\n});\n\nconst displayCurrency = computed(() => {\n  return form.value.currency;\n});\n\nconst displayDateFormat = computed(() => {\n  return form.value.date_format.toUpperCase();\n});\n\nconst displayTimeFormat = computed(() => {\n  return form.value.time_format;\n});\n\nconst displayCountryFlag = computed(() => {\n  return getFlagEmoji(form.value.country);\n});\n\nconst regFieldsMissing = computed(() => {\n  return form.value.phone.length\n    && form.value.team_size >= 1\n    && form.value.first_name.length\n    && form.value.last_name.length\n    && form.value.phoneMeta?.valid;\n});\n\n\nconst getFlagEmoji = (countryCode: string) => {\n  countryCode = countryCode.slice(0, 2);\n  const codePoints = countryCode\n    .toUpperCase()\n    .split('')\n    .map(char => 127397 + char.charCodeAt(0));\n  return String.fromCodePoint(...codePoints);\n};\n\nconst inputChanged = (phone: any) => {\n  form.value.phoneMeta = phone;\n};\n\nconst completeRegister = async () => {\n  const response = await form.value.put(`/v1/register/${registerId}/complete`);\n\n  if (response.status >= 200 && response.status < 300) {\n    // Log in the user.\n    const {data} = await form.value.post('/v1/auth/login');\n\n    // Save the token.\n    await saveToken({\n      token: data.access_token,\n      remember: true,\n    });\n\n    // remove the register id.\n    await removeRegisterId();\n\n    await store.dispatch('auth/fetchUser');\n\n    // Redirect home.\n    router.push({name: 'dashboard'}).catch(() => {\n    });\n  }\n};\n\n\nonMounted(async () => {\n  try {\n    const response = await fetch('https://api.geoapify.com/v1/ipinfo?apiKey=dc3d43b77c0e4876be94173b5b8a7bc9');\n\n    if (!response.ok) {\n      console.warn('GeoAPI request failed:', response.statusText);\n      return;\n    }\n\n    const json = await response.json();\n    if (!json?.country?.iso_code) {\n      console.warn('GeoAPI response missing country data:', json);\n      return;\n    }\n\n    ipData.value = json;\n\n    guessCountryData.value.country = countries[json.country.iso_code] || 'United States';\n    guessCountryData.value.flag = getFlagEmoji(json.country.iso_code);\n    form.value.currency = json.country.currency?.split(',')[0] || 'USD';\n    form.value.country = json.country.iso_code || 'US';\n  } catch (error) {\n    console.error('Error fetching IP info:', error);\n  }\n\n  if (!isSet(registerId) || isEmpty(registerId)) {\n    regMissing.value = true;\n  }\n\n  form.value.register_id = registerId;\n  guessCountryData.value.timezone = intl.value.timeZone;\n  form.value.timezone = intl.value.timeZone;\n\n  const country = intl.value.locale.slice(-2).toUpperCase();\n  guessCountryData.value.country = countries[country] || 'United States';\n});\n\nwatch(() => ipData.value, (data) => {\n  if (data?.country?.iso_code) {\n    guessCountryData.value.country = countries[data.country.iso_code] || 'United States';\n    guessCountryData.value.flag = getFlagEmoji(data.country.iso_code);\n    form.value.currency = data.country.currency?.split(',')[0] || 'USD';\n    form.value.country = data.country.iso_code;\n  }\n});\n</script>\n\n<style>\n.signup-setup .preferences {\n  border: 1px solid #E2E6EB;\n  padding: 18px 18px 0 18px;\n  border-radius: 6px;\n  position: relative;\n}\n\n.signup-setup .preferences__preview {\n  margin-bottom: 18px;\n  font-size: 13px;\n  color: #546972;\n  line-height: 18px;\n}\n\n.signup-setup .preferences .edit-toggle {\n  position: absolute;\n  right: 18px;\n  z-index: 99;\n}\n\n.signup-setup .preferences .edit-toggle.close {\n  bottom: 10px;\n}\n\n.signup-setup .preferences__preview span.flag {\n  font-size: 24px;\n  display: inline-block;\n  position: absolute;\n  left: 13px;\n}\n\n.signup-setup .preferences__preview .text {\n  padding-left: 30px;\n}\n\n.signup-setup .preferences__preview .country {\n  font-size: 14px;\n  font-weight: bold;\n  color: #181818;\n}\n</style>\n\n<style>\n.vue-tel-input {\n  min-height: 56px;\n\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-flex: 1;\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n  position: relative;\n\n  -webkit-box-align: center;\n  -ms-flex-align: center;\n  align-items: center;\n\n  color: rgba(0, 0, 0, .38);\n  border-collapse: collapse;\n  border: 1px solid;\n  right: 0;\n  top: -5px;\n}\n\n.vue-tel-input input {\n  color: rgba(0, 0, 0, .87);\n  max-height: 32px;\n  -webkit-box-flex: 1;\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n  line-height: 20px;\n  max-width: 100%;\n  min-width: 0;\n  width: 100%;\n  border: none;\n  border-radius: 0 2px 2px 0;\n  outline: none;\n  padding: 8px 0 8px 7px;\n}\n\n.vue-tel-input:focus-within {\n  border: #62a477 2px solid;\n  caret-color: #62a477 !important;\n  box-shadow: none;\n}\n\n.vue-tel-input .vti__dropdown {\n  min-height: 100%;\n}\n</style>\n","import {store} from '@/store';\nimport {DefaultMeta} from '@/types';\n\nexport default function getDefaultMeta(value: string): string | boolean | object | number | undefined {\n    const meta: DefaultMeta = store.getters['company/defaultMeta'];\n\n    return meta[value];\n}\n\n\nexport function getMetaBooleanValue(value: string, trueIfMissing: boolean = false): boolean {\n    const meta: DefaultMeta = store.getters['company/defaultMeta'];\n\n    if (meta[value] === undefined || meta[value] === null) {\n        return trueIfMissing;\n    }\n    \n    return Boolean(meta[value]);\n}","import {computed, ComputedRef} from 'vue';\nimport {useStore} from 'vuex';\nimport {CompanyInterface, CompanyMeta, DefaultMeta, StoreLoaders} from '@/types';\nimport getDefaultMeta from '@/utils/meta';\n\nexport function useCompany() {\n    const store = useStore();\n\n\n    const companyToken = computed(() => store.getters['auth/token']);\n    const company = computed<CompanyInterface>(() => store.getters['company/company']);\n    const companySettings: ComputedRef<any> = computed(() => store.getters['company/settings']);\n    const defaultMeta: ComputedRef<DefaultMeta> = computed(() => store.getters['company/defaultMeta']);\n    const companyMeta = computed<CompanyMeta>(() => store.getters['company/meta']);\n    const companyLoading: ComputedRef<StoreLoaders> = computed(() => store.getters['company/companyLoading']);\n    const companyForm = computed(() => store.getters['company/companyForm']);\n    const originalCompany = computed(() => store.getters['company/originalCompany']);\n    const companyLoaded = computed(() => store.getters['company/loaded']);\n    const registerFormRules = computed(() => store.getters['company/registerFormRules']);\n    const operatingRules = computed(() => store.getters['company/operatingRules']);\n\n    const companyMetaForm = computed(() => store.getters['company/companyMetaForm']);\n\n    const companyTrialOver = computed(() => store.getters['company/trialOver']);\n\n\n    const saveCompanyTimezone = (payload: { timezone: string, updateListings: boolean }) => {\n        return store.dispatch('company/saveCompanyTimezone', payload);\n    }\n\n    const companyAdditionalScripts = computed<string | null>(() => getDefaultMeta('settings.custom.scripts') as string | null);\n    const additionalStyles = computed<string | null>(() => getDefaultMeta('settings.custom.styles') as string | null);\n    const companyFacebookPixelId = computed<string | null>(() => getDefaultMeta('settings.analytics.facebook_id') as string | null);\n    const companyGoogleAnalyticsId = computed<string | null>(() => getDefaultMeta('settings.analytics.google_id') as string | null);\n\n    function addDefaultMeta(data: { meta: ({ value: any; key: string })[] }) {\n        try {\n            return store.dispatch('company/addDefaultMeta', data);\n        } catch (e) {\n            console.error(e);\n            throw e;\n        }\n    }\n\n    function fetchDefaultMeta() {\n        return store.dispatch('company/getDefaultMeta');\n    }\n\n    function saveCompanyInfo() {\n        return store.dispatch('company/saveCompanyInfo');\n    }\n\n\n    const saveCompanyMeta = async () => {\n        return await store.dispatch('company/saveCompanyMeta');\n    }\n\n    function getActivityLog(payload: { page?: number, perPage?: number }) {\n        return store.dispatch('company/getActivityLog', payload);\n    }\n\n    const showSetupChecklist = computed(() => {\n        return (companySettings.value?.['settings.setup_checklist.show_setup_checklist'] ?? false)\n            && !(companySettings.value?.['settings.setup_checklist.hide'] ?? false);\n    })\n\n    const localizationDistanceUnits = computed(() => {\n        return getDefaultMeta('localization_distance_units') ?? 'miles';\n    });\n\n    const localizationDistanceUnitsObject = computed(() => {\n        if (localizationDistanceUnits.value === 'kilometers') {\n            return {\n                label: 'Kilometer',\n                label_plural: 'Kilometers',\n                label_abr: 'km',\n            };\n        }\n        return {\n            label: 'Mile',\n            label_plural: 'Miles',\n            label_abr: 'mi',\n        };\n    })\n\n    const setupCustomStyles = () => {\n        if (!additionalStyles.value) {\n            return; // Exit early if there are no additional styles\n        }\n\n        // Check if the style element already exists in the DOM\n        const existingStyleElement = document.getElementById('FWAdditionalStyles') as HTMLStyleElement | null;\n\n\n        if (!existingStyleElement) {\n            const companyAdditionalStyle = document.createElement('style');\n            companyAdditionalStyle.setAttribute('id', 'FWAdditionalStyles');\n            companyAdditionalStyle.setAttribute('type', 'text/css');\n            const customStyles = additionalStyles.value;\n\n            try {\n                companyAdditionalStyle.appendChild(document.createTextNode(customStyles));\n                document.body.appendChild(companyAdditionalStyle);\n            } catch (e) {\n                try {\n                    companyAdditionalStyle.textContent = customStyles;\n                    document.body.appendChild(companyAdditionalStyle);\n                } catch (e) {\n                    console.error(e);\n                }\n            }\n        }\n    }\n\n    const setupCustomScripts = () => {\n        if (companyAdditionalScripts.value) {\n            if (!document.getElementById('FWAdditionalScripts')) {\n                const companyAdditionalScript = document.createElement('script');\n                companyAdditionalScript.setAttribute('id', 'FWAdditionalScripts');\n                const customScripts = stripScripts(companyAdditionalScripts.value);\n\n                try {\n                    companyAdditionalScript.appendChild(document.createTextNode(customScripts));\n                    document.body.appendChild(companyAdditionalScript);\n                } catch (e) {\n                    try {\n                        companyAdditionalScript.text = customScripts;\n                        document.body.appendChild(companyAdditionalScript);\n                    } catch (e) {\n                        console.error(e);\n                    }\n                }\n            }\n        }\n    }\n\n    const stripScripts = (s: string) => {\n        if (s) {\n            /** Remove noscript */\n            const noscriptRegex = /<noscript\\b[^<]*(?:(?!<\\/noscript>)<[^<]*)*<\\/noscript>/gi;\n            s = s.replace(noscriptRegex, '');\n\n            const div = document.createElement('div');\n            div.innerHTML = s;\n\n            const scripts = div.getElementsByTagName('script');\n            let stripScript = '<!-- Fleetwire Custom Script --> \\n\\n';\n\n            for (let i = scripts.length - 1; i >= 0; i--) {\n                if (scripts[i].innerText) {\n                    const scriptContent = scripts[i].innerText;\n                    stripScript += `${scriptContent}; \\n\\n`;\n                }\n                scripts[i].parentNode?.removeChild(scripts[i]);\n            }\n\n            stripScript += div.textContent?.trim() || '';\n\n            return stripScript;\n        }\n        return '';\n    }\n\n\n    return {\n        company,\n        companyToken,\n        companyTrialOver,\n        companyFacebookPixelId,\n        companyGoogleAnalyticsId,\n        originalCompany,\n        companySettings,\n        companyLoading,\n        defaultMeta,\n        companyMeta,\n        showSetupChecklist,\n        companyForm,\n        localizationDistanceUnits,\n        localizationDistanceUnitsObject,\n        registerFormRules,\n        companyLoaded,\n        companyMetaForm,\n        operatingRules,\n        setupCustomStyles,\n        setupCustomScripts,\n        getActivityLog,\n        saveCompanyInfo,\n        saveCompanyMeta,\n        addDefaultMeta,\n        fetchDefaultMeta,\n        saveCompanyTimezone,\n    }\n}","<template>\n  <section class=\"bg-gray-50 dark:bg-gray-900\">\n    <div class=\"flex flex-col items-center justify-center px-6 py-8 mx-auto md:h-screen lg:py-0\">\n      <a class=\"flex items-center mb-6 text-2xl font-semibold text-gray-900 dark:text-white\" href=\"/\">\n        <img alt=\"logo\" class=\"w-8 h-8 mr-2\" src=\"https://tenant.fleetwire.io/images/logo/fleetwire-logo-new.png\">\n        Fleetwire\n      </a>\n      <div class=\"w-full bg-white rounded-lg shadow dark:border md:mt-0 sm:max-w-md xl:p-0 dark:bg-gray-800 dark:border-gray-700\">\n        <div class=\"p-6 space-y-4 md:space-y-6 sm:p-8\">\n          <h1 class=\"text-xl font-bold leading-tight tracking-tight text-gray-900 md:text-2xl dark:text-white\">\n            Welcome to Fleetwire.io\n          </h1>\n          <p class=\"text-muted mb-4 text-subtitle-1\">\n            You have been invited by one of your team members. To get started, please fill our some info below.\n          </p>\n\n          <div v-if=\"!employee.init && companyLoading.invite\">\n            Loading...\n          </div>\n\n          <div v-else-if=\"!employee.found && !companyLoading.invite\">\n            <v-alert density=\"compact\" type=\"error\" variant=\"outlined\">\n              This invite token does not exist, expired or has been deleted by the company admins.\n            </v-alert>\n          </div>\n\n          <v-form action=\"#\" autocomplete=\"off\" class=\"space-y-4 md:space-y-6\" @keydown=\"form.onKeydown($event)\" @submit.prevent=\"completeInvite\">\n            <div class=\"flex flex-col mb-4 space-y-6 md:flex-row md:space-y-0 md:space-x-6\">\n              <div class=\"w-full\">\n                <v-text-field\n                  v-model=\"form.first_name\"\n                  :label=\"$t('first_name')\"\n                  variant=\"outlined\"\n                />\n              </div>\n              <div class=\"w-full\">\n                <v-text-field\n                  v-model=\"form.last_name\"\n                  :label=\"$t('last_name')\"\n                  variant=\"outlined\"\n                />\n              </div>\n            </div>\n            <div>\n              <v-text-field\n                v-model=\"form.phone\"\n                :error-messages=\"form.errors.get('phone')\"\n                :label=\"$t('phone')\"\n                autofocus\n                variant=\"outlined\"\n                @keydown=\"form.errors.clear('phone')\"\n              />\n\n              <v-text-field\n                v-model=\"form.password\"\n                :append-inner-icon=\"showPassword ? 'mdi-eye' : 'mdi-eye-off'\"\n                :label=\"$t('password')\"\n                :rules=\"[registerFormRules.required, registerFormRules.min]\"\n                :type=\"showPassword ? 'text' : 'password'\"\n                hint=\"This is a new password for you\"\n                persistent-hint\n                variant=\"outlined\"\n                @click:append-inner=\"showPassword = !showPassword\"\n              />\n            </div>\n            <div class=\"flex items-start\">\n              <div class=\"flex items-center h-5\">\n                <input id=\"fw-agree-checkbox\" v-model=\"form.agree\" :error-messages=\"form.errors.get('agree')\" aria-describedby=\"terms\" class=\"w-4 h-4 border border-gray-300 rounded bg-gray-50 focus:ring-3 focus:ring-primary-300 dark:bg-gray-700 dark:border-gray-600 dark:focus:ring-primary-600 dark:ring-offset-gray-800\" name=\"agree\" required type=\"checkbox\">\n              </div>\n              <div class=\"ml-3 text-sm\">\n                <label class=\"font-light text-gray-500 dark:text-gray-300\" for=\"fw-agree-checkbox\">I accept the\n                  <a v-tippy class=\"font-medium text-primary-600 hover:underline dark:text-primary-500\" content=\"Opens in a new window\" href=\"https://fleetwire.io/terms\" target=\"_blank\" @click.stop>{{\n                      $t('terms_of_service')\n                    }}</a>\n                  &\n                  <a v-tippy class=\"font-medium text-primary-600 hover:underline dark:text-primary-500\" content=\"Opens in a new window\" href=\"https://fleetwire.io/privacy-policy\" target=\"_blank\" @click.stop>Privacy\n                    Policy</a>\n                </label>\n              </div>\n            </div>\n\n            <v-btn :disabled=\"isButtonDisabled\" :loading=\"form.busy\" block size=\"large\" @click=\"completeInvite\">\n              {{ $t('complete') }}\n            </v-btn>\n          </v-form>\n        </div>\n      </div>\n    </div>\n  </section>\n</template>\n\n<script lang=\"ts\" setup>\nimport Form from 'vform';\nimport {useCompany} from '@/composables/useCompany';\nimport {computed, onBeforeMount, ref} from 'vue';\nimport {useRoute, useRouter} from 'vue-router';\nimport {useStore} from 'vuex';\n\nconst {companyLoading} = useCompany();\nconst route = useRoute();\nconst router = useRouter();\nconst store = useStore();\n\nconst form = ref(new Form({\n  phone: '',\n  first_name: '',\n  last_name: '',\n  password: '',\n  agree: true,\n  invite_token: '',\n}));\n\nconst employee = computed(() => store.getters['company/employee']);\nconst registerFormRules = computed(() => store.getters['company/registerFormRules']);\n\nconst fetchEmployeeByInviteToken = async (invite_token: string) => {\n  await store.dispatch('company/fetchEmployeeByInviteToken', invite_token);\n};\n\nconst saveToken = async (data) => {\n  await store.dispatch('auth/saveToken', data);\n};\n\nconst saveRegisterId = async (data) => {\n  await store.dispatch('auth/saveRegisterId', data);\n};\n\nconst showPassword = ref(false);\n\nconst isFormValid = computed(() =>\n  ['first_name', 'last_name', 'password', 'invite_token', 'phone'].every((field) => form.value[field]?.length) && form.value.agree\n);\n\nconst isButtonDisabled = computed(() => form.value.busy || !isFormValid.value);\n\n\nonBeforeMount(() => {\n  form.value.invite_token = route.params.invite_token;\n  fetchEmployeeByInviteToken(form.value.invite_token).then(() => {\n    form.value.first_name = employee.value.first_name;\n    form.value.last_name = employee.value.last_name;\n    if (employee.value.phone) {\n      form.value.phone = employee.value.phone;\n    }\n  });\n});\n\nconst completeInvite = async () => {\n  try {\n    const {data} = await form.value.put(`/v1/invite/${form.value.invite_token}/complete`);\n\n    console.table(data);\n\n    if (data.success) {\n      // Log in the user.\n      const {data} = await form.value.post('/v1/auth/login');\n\n      // Save the token.\n      await saveToken({\n        token: data.access_token,\n        remember: true,\n      });\n\n      // remove the register id.\n      await saveRegisterId('');\n\n      await store.dispatch('auth/fetchUser');\n\n      // Redirect home.\n      router.push({name: 'dashboard'}).catch(() => {\n      });\n    }\n  } catch (e) {\n    console.dir(e);\n  }\n};\n</script>\n","<template>\n  <section class=\"bg-gray-50 dark:bg-gray-900\">\n    <div class=\"flex flex-col items-center justify-center px-6 py-8 mx-auto md:h-screen lg:py-0\">\n      <a class=\"flex items-center mb-6 text-2xl font-semibold text-gray-900 dark:text-white\" href=\"/\">\n        <img alt=\"logo\" class=\"w-8 h-8 mr-2\" src=\"https://tenant.fleetwire.io/images/logo/fleetwire-logo-new.png\">\n        Fleetwire\n      </a>\n      <div class=\"w-full p-6 bg-white rounded-lg shadow dark:border md:mt-0 sm:max-w-md dark:bg-gray-800 dark:border-gray-700 sm:p-8\">\n        <h1 class=\"mb-1 text-xl font-bold leading-tight tracking-tight text-gray-900 md:text-2xl dark:text-white\">\n          {{ $t('forgot_password') }}\n        </h1>\n        <p class=\"font-light text-gray-500 dark:text-gray-400\">{{ $t('forgot_password_p') }}</p>\n        <v-form v-show=\"!form.successful\" :disabled=\"form.busy\" class=\"mt-4 space-y-4 lg:mt-5 md:space-y-5\" @submit.prevent=\"send\">\n          <div>\n            <v-text-field\n              v-model=\"form.email\"\n              :autofocus=\"true\"\n              :label=\"$t('email')\"\n              density=\"comfortable\"\n              required\n              type=\"email\"\n              variant=\"outlined\"\n            />\n          </div>\n          <v-btn :disabled=\"submitButtonDisabled\" :loading=\"form.busy\" block size=\"large\" type=\"submit\">\n            {{ $t('send_password_reset_link') }}\n          </v-btn>\n\n          <div>\n            <v-alert v-if=\"errorMessage.length > 0\" density=\"compact\" role=\"alert\" type=\"error\" variant=\"outlined\">\n              {{ errorMessage }}\n            </v-alert>\n          </div>\n        </v-form>\n\n        <div v-if=\"form.successful\">\n          <v-alert density=\"compact\" role=\"alert\" type=\"success\" variant=\"outlined\">\n            {{ $t('password_reset_link_sent') }}\n          </v-alert>\n        </div>\n\n        <p class=\"mt-10 text-sm font-light text-gray-500 dark:text-gray-400\">\n          Remember Now?\n          <router-link :to=\"{ name: 'login', query: { email: form.email } }\" class=\"font-medium text-primary-600 hover:underline dark:text-primary-500\" data-testid=register-link>\n            <b>{{ $t('login') }}</b>\n          </router-link>\n        </p>\n      </div>\n    </div>\n  </section>\n</template>\n\n<script lang=\"ts\" setup>\nimport Form from 'vform';\nimport {computed, onBeforeMount, ref} from 'vue';\nimport {useStore} from 'vuex';\nimport {useRoute} from 'vue-router';\n\nconst {getters} = useStore();\nconst route = useRoute();\n\nconst status = ref<string>('');\nconst form = ref(new Form({\n  email: '',\n}));\n\nconst errorMessage = ref('');\n\nconst submitButtonDisabled = computed(() => {\n  return !form.value.email;\n});\n\nconst send = async () => {\n  if (!form.value.email) {\n    errorMessage.value = 'Please enter your email address.';\n    return;\n  }\n\n  try {\n    const {data} = await form.value.post('/v1/password/email');\n\n    if (data.success) {\n      console.dir(data);\n      form.value.reset();\n    }\n  } catch (e) {\n    console.dir(e);\n    errorMessage.value = e.response?.data?.message || 'An error occurred. Please try again.';\n  }\n};\n\nonBeforeMount(() => {\n  if (route.query.email) {\n    console.dir(route.query.email);\n    form.value.email = route.query.email;\n  }\n  if (route.params.email) {\n    console.dir(route.params.email);\n    form.value.email = route.params.email;\n  }\n});\n</script>\n","<template>\n  <section class=\"bg-gray-50 dark:bg-gray-900\">\n    <div class=\"flex flex-col items-center justify-center px-6 py-8 mx-auto md:h-screen lg:py-0\">\n      <a class=\"flex items-center mb-6 text-2xl font-semibold text-gray-900 dark:text-white\" href=\"/\">\n        <img alt=\"logo\" class=\"w-8 h-8 mr-2\" src=\"https://tenant.fleetwire.io/images/logo/fleetwire-logo-new.png\">\n        Fleetwire\n      </a>\n      <div v-show=\"!formSubmitSuccess\" class=\"w-full p-6 bg-white rounded-lg shadow dark:border md:mt-0 sm:max-w-md dark:bg-gray-800 dark:border-gray-700 sm:p-8\">\n        <h1 class=\"mb-1 text-xl font-bold leading-tight tracking-tight text-gray-900 md:text-2xl dark:text-white\">\n          {{ $t('reset_password') }}\n        </h1>\n        <p class=\"font-light text-gray-500 dark:text-gray-400\">{{ $t('reset_password_p') }}</p>\n        <v-form :disabled=\"form.busy\" class=\"mt-4 space-y-4 lg:mt-5 md:space-y-5\" @keydown=\"form.onKeydown($event)\" @submit.prevent=\"reset\">\n          <div>\n            <v-text-field\n              v-model=\"form.password\"\n              :append-inner-icon=\"show1 ? 'mdi-eye' : 'mdi-eye-off'\"\n              :class=\"{ 'is-invalid': form.errors.has('password') }\"\n              :rules=\"[registerFormRules.required, registerFormRules.min]\"\n              :type=\"show1 ? 'text' : 'password'\"\n              hint=\"\"\n              label=\"New Password\"\n              minlength=\"8\"\n              variant=\"outlined\"\n              @click:append-inner=\"show1 = !show1\"\n            />\n          </div>\n          <v-btn :disabled=\"submitButtonDisabled\" :loading=\"form.busy\" block size=\"large\" type=\"submit\">\n            {{ $t('reset') }}\n          </v-btn>\n\n          <div>\n            <v-alert v-if=\"errorMessage.length > 0\" density=\"compact\" role=\"alert\" type=\"error\" variant=\"outlined\">\n              {{ errorMessage }}\n            </v-alert>\n          </div>\n        </v-form>\n\n        <p class=\"mt-10 text-sm font-light text-gray-500 dark:text-gray-400\">\n          Remember Now?\n          <router-link :to=\"{ name: 'login', query: { email: form.email } }\" class=\"font-medium text-primary-600 hover:underline dark:text-primary-500\" data-testid=register-link>\n            <b>{{ $t('login') }}</b>\n          </router-link>\n        </p>\n      </div>\n\n      <div v-show=\"formSubmitSuccess\" class=\"mt-5\">\n        <v-alert density=\"compact\" role=\"alert\" type=\"success\" variant=\"outlined\">\n          Password reset successfully. Redirecting to your dashboard...\n        </v-alert>\n      </div>\n    </div>\n  </section>\n</template>\n\n<script lang=\"ts\" setup>\nimport Form from 'vform';\nimport {useStore} from 'vuex';\nimport {computed, onBeforeMount, onBeforeUnmount, ref} from 'vue';\nimport {useRoute, useRouter} from 'vue-router';\n\nconst route = useRoute();\nconst router = useRouter();\nconst submitButtonDisabled = ref(false);\nconst errorMessage = ref('');\nconst show1 = ref(false);\nconst {dispatch, getters} = useStore();\nconst formSubmitSuccess = ref(false);\n\nconst registerFormRules = computed(() => getters['company/registerFormRules']);\n\nconst form = ref(new Form({\n  token: '',\n  email: '',\n  password: '',\n  password_confirmation: '',\n}));\n\nconst saveToken = async (payload) => {\n  await dispatch('auth/saveToken', payload);\n};\n\n\nconst reset = async () => {\n  if (!form.value.password) {\n    errorMessage.value = 'Please enter your password.';\n    return;\n  }\n\n  // wait 1 second and set formSubmitSuccess for testing\n  // setTimeout(() => {\n  //   formSubmitSuccess.value = true;\n  // }, 1000);\n\n  try {\n    form.value.password_confirmation = form.value.password;\n\n    const {data} = await form.value.post('/v1/password/reset');\n\n    formSubmitSuccess.value = true;\n\n    // Save the token.\n    await saveToken({\n      token: data.token,\n      remember: true,\n    });\n\n    // Fetch the user.\n    await dispatch('auth/fetchUser');\n\n    // Redirect home.\n    router.push({name: 'dashboard'}).catch(() => {\n    });\n  } catch (e) {\n    console.dir(e);\n  }\n};\n\n\nonBeforeMount(() => {\n  form.value.email = route.query.email;\n  form.value.token = route.params.token;\n});\n\nonBeforeUnmount(() => {\n  form.value.reset();\n});\n</script>\n","<template>\n  <div>\n    <div class=\" m-auto\">\n      <card :title=\"$t('verify_email')\">\n        <template v-if=\"success\">\n          <div class=\"alert alert-success\" role=\"alert\">\n            {{ success }}\n          </div>\n\n          <router-link :to=\"{ name: 'login' }\" class=\"btn btn-primary\">\n            {{ $t('login') }}\n          </router-link>\n        </template>\n        <template v-else>\n          <div class=\"alert alert-danger\" role=\"alert\">\n            {{ error || $t('failed_to_verify_email') }}\n          </div>\n\n          <router-link :to=\"{ name: 'verification.resend' }\" class=\"small float-right\">\n            {{ $t('resend_verification_link') }}\n          </router-link>\n        </template>\n      </card>\n    </div>\n  </div>\n</template>\n\n<script>\nimport axios from 'axios';\n\nconst qs = params => Object.keys(params).map(key => `${key}=${params[key]}`).join('&');\n\nexport default {\n  name: 'verifyEmail',\n\n  layout: 'blank',\n\n  middleware: 'guest',\n\n  metaInfo() {\n    return { title: this.$t('verify_email') };\n  },\n\n  async beforeRouteEnter(to, from, next) {\n    try {\n      const { data } = await axios.post(`/api/v1/email/verify/${to.params.id}?${qs(to.query)}`);\n\n      next((vm) => {\n        vm.success = data.status;\n      });\n    } catch (e) {\n      next((vm) => {\n        vm.error = e.response.data.status;\n      });\n    }\n  },\n\n  data: () => ({\n    error: '',\n    success: '',\n  }),\n};\n</script>\n","<template>\n  <div class=\"\">\n    <div class=\" m-auto\">\n      <card :title=\"$t('verify_email')\">\n        <form @keydown=\"form.onKeydown($event)\" @submit.prevent=\"send\">\n          <alert-success :form=\"form\" :message=\"status\"/>\n\n          <!-- Email -->\n          <div class=\"form-group row\">\n            <label class=\"col-form-label text-md-right\">{{ $t('email') }}</label>\n            <div class=\"\">\n              <input v-model=\"form.email\" :class=\"{ 'is-invalid': form.errors.has('email') }\" class=\"form-control\" name=\"email\" type=\"email\">\n              <has-error :form=\"form\" field=\"email\"/>\n            </div>\n          </div>\n\n          <!-- Submit Button -->\n          <div class=\"form-group row\">\n            <div class=\" ml-md-auto\">\n              <v-button :loading=\"form.busy\" block large>\n                {{ $t('send_verification_link') }}\n              </v-button>\n            </div>\n          </div>\n        </form>\n      </card>\n    </div>\n  </div>\n</template>\n\n<script>\nimport Form from 'vform';\n\nexport default {\n  name: 'ResendComponent',\n\n  layout: 'blank',\n\n  middleware: 'guest',\n\n  metaInfo() {\n    return { title: this.$t('verify_email') };\n  },\n\n  data: () => ({\n    status: '',\n    form: new Form({\n      email: '',\n    }),\n  }),\n\n  created() {\n    if (this.$route.query.email) {\n      this.form.email = this.$route.query.email;\n    }\n  },\n\n  methods: {\n    async send() {\n      const { data } = await this.form.post('/api/v1/email/resend');\n\n      this.status = data.status;\n\n      this.form.reset();\n    },\n  },\n};\n</script>\n","export default async function guest({store}) {\n    console.log('%c -- MIDDLEWARE -- GUEST ✅', 'color: white; background: green; padding: 2px; font-weight: bold;');\n\n    try {\n        // Retrieve authentication token from Vuex store\n        const token = store.getters['auth/token'];\n        const isAuthenticated = store.getters['auth/check'];\n\n        console.log('%c 🔑 Auth Token:', 'color: cyan; font-weight: bold;', token);\n        console.log('%c 👤 Is Authenticated?', 'color: cyan; font-weight: bold;', isAuthenticated);\n\n        // Check if user is authenticated\n        if (token) {\n            console.warn('%c 🚪 Guest Middleware: User is logged in - Redirecting...', 'color: orange; font-weight: bold;');\n            return false;\n        }\n\n        console.log('%c ✅ Guest Middleware: User is NOT logged in', 'color: lime; font-weight: bold;');\n        return true;\n    } catch (error) {\n        console.error('%c ❌ Guest Middleware Error:', 'color: red; font-weight: bold;', error);\n        return false; // Fallback to assuming user is logged in to prevent unintended access\n    }\n}","import type {RouteRecordRaw} from 'vue-router';\nimport BaseLogin from '@/views/auth/BaseLogin.vue';\n\nimport Login from '@/views/auth/Login.vue';\nimport Register from '@/views/auth/Register.vue';\nimport RegisterNextStep from '@/views/auth/RegisterNextStep.vue';\nimport CompanyEmployeeInvite from '@/views/auth/companyEmployeeInvite.vue';\nimport PasswordRequest from '@/views/auth/password/email.vue';\nimport PasswordReset from '@/views/auth/password/reset.vue';\nimport PasswordVerify from '@/views/auth/password/verify.vue';\nimport PasswordResend from '@/views/auth/password/resend.vue';\nimport guest from \"@/middleware/guest\";\nimport {CommonRouteMeta} from \"@/types\";\n\nconst authRoutes: RouteRecordRaw = {\n    path: '/',\n    component: BaseLogin,\n    meta: {\n        title: 'home',\n        icon: 'mdi-login',\n        noCache: false,\n        hidden: true,\n        layout: 'Default',\n        requiresAuth: false,\n        middleware: [guest],\n    } as CommonRouteMeta,\n    children: [\n        {\n            path: 'login',\n            name: 'login',\n            component: Login,\n            meta: {\n                requiresAuth: false,\n                middleware: [guest],\n            }\n        },\n        {\n            path: 'register',\n            name: 'register',\n            component: Register,\n        },\n        {\n            path: '/company',\n            name: 'company.next-step',\n            component: RegisterNextStep,\n        },\n        {\n            path: '/company/employees/invitation/accept/:invite_token',\n            name: 'company.employee.invite',\n            component: CompanyEmployeeInvite,\n        },\n        {\n            path: '/password/reset',\n            name: 'password.request',\n            component: PasswordRequest,\n        },\n        {\n            path: '/password/reset/:token',\n            name: 'password.reset',\n            component: PasswordReset,\n        },\n        {\n            path: '/email/verify/:id',\n            name: 'verification.verify',\n            component: PasswordVerify,\n        },\n        {\n            path: '/email/resend',\n            name: 'verification.resend',\n            component: PasswordResend,\n        },\n    ],\n};\n\nexport default authRoutes;\n","import type {RouteRecordRaw} from 'vue-router';\nimport {CommonRouteMeta} from \"@/types\";\n\nconst BaseDashboard = () => import('@/views/dashboard/BaseDashboard.vue');\n\n\nconst settingsRoutes: RouteRecordRaw[] = [\n    {\n        path: '/settings',\n        component: BaseDashboard,\n        redirect: '/settings/general',\n        meta: {\n            title: 'settings',\n            noCache: false,\n            showInMenu: true,\n            icon: 'mdi-cog-outline',\n            permissions: ['settings_view'],\n            middleware: ['auth',],\n            layout: 'Dashboard',\n        } as CommonRouteMeta,\n        children: [\n            {\n                path: 'general',\n                name: 'settings.general',\n                components: {\n                    default: () => import('@/views/dashboard/settings/General.vue'),\n                },\n                meta: {title: 'general', icon: 'mdi-cog', noCache: false},\n            },\n            {\n                path: 'locations',\n                name: 'settings.general.delivery',\n                components: {\n                    default: () => import('@/components/dashboard/settings/general/DeliveryLocations.vue'),\n                },\n                meta: {title: 'locations', icon: 'mdi-cog', noCache: false},\n            },\n            {\n                path: 'delivery/add',\n                name: 'settings.general.delivery.add',\n                components: {\n                    default: () => import('@/components/dashboard/settings/general/DeliveryLocationsAdd.vue'),\n                },\n                meta: {title: 'location add', icon: 'mdi-cog', noCache: false},\n            },\n            {\n                path: 'delivery/:uuid',\n                name: 'settings.general.delivery.edit',\n                components: {\n                    default: () => import('@/components/dashboard/settings/general/DeliveryLocationsEdit.vue'),\n                },\n                meta: {title: 'location edit', icon: 'mdi-cog', noCache: false},\n            },\n            {\n                path: 'custom-fields',\n                name: 'settings.custom_fields',\n                components: {\n                    default: () => import('@/components/dashboard/settings/general/CustomFields.vue'),\n                },\n                meta: {title: 'custom fields', icon: 'mdi-cog', noCache: false},\n            },\n            {\n                path: 'localization',\n                name: 'settings.general.localization',\n                components: {\n                    default: () => import('@/components/dashboard/settings/general/Localization.vue'),\n                },\n                meta: {title: 'localization', icon: 'mdi-cog', noCache: false},\n            },\n            {\n                path: 'pricing',\n                name: 'settings.pricing',\n                components: {\n                    default: () => import('@/views/dashboard/settings/Pricing/Pricing.vue'),\n                },\n                meta: {title: 'pricing', icon: 'mdi-cog', noCache: false},\n            },\n            {\n                path: 'coupons',\n                name: 'settings.pricing.coupons',\n                components: {\n                    default: () => import('@/views/dashboard/settings/Pricing/Coupons.vue'),\n                },\n                meta: {title: 'coupons', icon: 'mdi-cog', noCache: false},\n            },\n            {\n                path: 'pricing/advanced',\n                name: 'settings.pricing.advanced',\n                components: {\n                    default: () => import('@/views/dashboard/settings/Pricing/AdvancedPricing.vue'),\n                },\n                meta: {title: 'advanced pricing', icon: 'mdi-cog', noCache: false},\n            },\n            {\n                path: 'pricing-structure',\n                name: 'settings.pricing.template',\n                components: {\n                    default: () => import('@/views/dashboard/settings/Pricing/PricingStructure/PricingTemplate.vue'),\n                },\n                meta: {title: 'pricing template', icon: 'mdi-cog', noCache: false},\n                children: [],\n            },\n            {\n                path: 'pricing-structure/new',\n                name: 'settings.pricing.template.new',\n                components: {\n                    default: () => import('@/views/dashboard/settings/Pricing/PricingStructure/PricingTemplateNew.vue'),\n                },\n                meta: {title: 'New', icon: 'mdi-cog', noCache: false},\n            },\n            {\n                path: 'pricing-structure/:uuid/edit',\n                name: 'settings.pricing.template.edit',\n                components: {\n                    default: () => import('@/views/dashboard/settings/Pricing/PricingStructure/PricingTemplateEdit.vue'),\n                },\n                meta: {title: 'Edit', icon: 'mdi-cog', noCache: false},\n            },\n            {\n                path: 'pricing/advanced/edit/:uuid',\n                name: 'settings.pricing.advanced.edit',\n                components: {\n                    default: () => import('@/views/dashboard/settings/Pricing/AdvancedPricingEdit.vue'),\n                },\n                meta: {title: 'advanced pricing', icon: 'mdi-cog', noCache: false},\n            },\n            {\n                path: 'taxes',\n                name: 'settings.taxes',\n                components: {\n                    default: () => import('@/views/dashboard/settings/Taxes.vue'),\n                },\n                meta: {title: 'taxes', icon: 'mdi-cog', noCache: false},\n            },\n            {\n                path: 'security-deposits',\n                name: 'settings.pricing.deposits',\n                components: {\n                    default: () => import('@/components/dashboard/settings/pricing/SecurityDeposits.vue'),\n                },\n                meta: {title: 'Security Deposits', icon: 'mdi-cog', noCache: false},\n            },\n            {\n                path: 'security',\n                name: 'settings.security',\n                components: {\n                    default: () => import('@/views/dashboard/settings/Security.vue'),\n                },\n                meta: {title: 'Security', icon: 'mdi-cog', noCache: false},\n            },\n            {\n                path: 'security/api-tokens',\n                name: 'settings.security.api_tokens',\n                components: {\n                    default: () => import('@/views/dashboard/settings/ApiToken.vue'),\n                },\n                meta: {title: 'Security', icon: 'mdi-cog', noCache: false},\n            },\n            {\n                path: 'security/activity-log',\n                name: 'settings.security.activity_log',\n                components: {\n                    default: () => import('@/views/dashboard/settings/ActivityLog.vue'),\n                },\n                meta: {title: 'Security', icon: 'mdi-cog', noCache: false},\n            },\n            {\n                path: 'account',\n                name: 'settings.account',\n                component: () => import('@/views/dashboard/settings/AccountAndBilling.vue'),\n                meta: {title: 'Account', icon: 'mdi-cog', noCache: false},\n                redirect: '/settings/account/overview',\n                children: [\n                    {\n                        path: 'overview',\n                        name: 'settings.account.overview',\n                        component: () => import('@/components/dashboard/settings/account/TheOverview.vue'),\n                        meta: {title: 'Overview'},\n                    },\n                    {\n                        path: 'receipts',\n                        name: 'settings.account.receipts',\n                        component: () => import('@/components/dashboard/settings/account/TheReceipts.vue'),\n                        meta: {title: 'Receipts'},\n                    },\n                    {\n                        path: 'billing',\n                        name: 'settings.account.billing',\n                        component: () => import('@/components/dashboard/settings/account/TheBillingDetails.vue'),\n                        meta: {title: 'Billing Details'},\n                    },\n                ],\n            },\n            {\n                path: 'team',\n                name: 'settings.account.team',\n                components: {\n                    default: () => import('@/views/dashboard/settings/Team.vue'),\n                },\n                meta: {title: 'Account', icon: 'mdi-cog', noCache: false},\n            },\n            {\n                path: 'notifications',\n                name: 'settings.account.notifications',\n                components: {\n                    default: () => import('@/views/dashboard/settings/CompanyNotifications.vue'),\n                },\n                meta: {title: 'Notifications', icon: 'mdi-cog', noCache: false},\n            },\n            {\n                path: 'email',\n                name: 'settings.account.email',\n                components: {\n                    default: () => import('@/views/dashboard/settings/Emails/Email.vue'),\n                },\n                meta: {title: 'Email', icon: 'mdi-cog', noCache: false},\n            },\n            {\n                path: 'email_template/:uuid',\n                name: 'settings.account.email.email_template_single',\n                components: {\n                    default: () => import('@/views/dashboard/settings/Emails/EmailTemplateSingle.vue'),\n                },\n                meta: {title: 'Email', icon: 'mdi-cog', noCache: false},\n            },\n            {\n                path: 'account/plans/confirm',\n                name: 'settings.account.plans.confirm',\n                components: {\n                    default: () => import('@/views/dashboard/settings/Billing/SubscriptionCheckout/SubscriptionCheckout.vue'),\n                },\n                meta: {title: 'Plans', icon: 'mdi-cog', noCache: false},\n            },\n            {\n                path: 'providers',\n                name: 'settings.providers',\n                components: {\n                    default: () => import('@/views/dashboard/settings/Providers.vue'),\n                },\n                meta: {title: 'Providers', icon: 'mdi-cog', noCache: false},\n            },\n            {\n                path: 'payment-providers',\n                name: 'settings.providers.payment-providers',\n                components: {\n                    default: () => import('@/views/dashboard/settings/PaymentProviders.vue'),\n                },\n                meta: {title: 'Payment Providers', icon: 'mdi-cog', noCache: false},\n            },\n            {\n                path: 'payment-providers/:uuid',\n                name: 'settings.payment-provider.single',\n                components: {\n                    default: () => import('@/views/dashboard/settings/PaymentProviders/SinglePaymentProvider.vue'),\n                },\n                meta: {title: 'Payment Provider', icon: 'mdi-cog', noCache: false},\n            },\n            {\n                path: 'providers/commission-partners',\n                name: 'settings.providers.commission_partners',\n                components: {\n                    default: () => import('@/views/dashboard/settings/CommissionPartners.vue'),\n                },\n                meta: {title: 'Commission Partners', icon: 'mdi-cog', noCache: false},\n            },\n            {\n                path: 'providers/webhooks',\n                name: 'settings.providers.webhooks',\n                components: {\n                    default: () => import('@/views/dashboard/settings/Webhooks/Webhooks.vue'),\n                },\n                meta: {title: 'Webhooks', icon: 'mdi-cog', noCache: false},\n            },\n            {\n                path: 'providers/webhooks/create',\n                name: 'settings.providers.webhooks.create',\n                components: {\n                    default: () => import('@/views/dashboard/settings/Webhooks/Create.vue'),\n                },\n                meta: {title: 'Create Webhook', icon: 'mdi-cog', noCache: false},\n            },\n            {\n                path: 'providers/webhooks/:uuid',\n                name: 'settings.providers.webhooks.update',\n                components: {\n                    default: () => import('@/views/dashboard/settings/Webhooks/UpdateWebhook.vue'),\n                },\n                meta: {title: 'Edit Webhook', icon: 'mdi-cog', noCache: false},\n            },\n            {\n                path: 'checkout',\n                name: 'settings.checkout',\n                components: {\n                    default: () => import('@/views/dashboard/settings/Checkout.vue'),\n                },\n                meta: {title: 'Checkout', icon: 'mdi-cog', noCache: false},\n            },\n            {\n                path: 'online-reservations',\n                name: 'settings.checkout.online_reservations',\n                components: {\n                    default: () => import('@/views/dashboard/settings/OnlineReservations.vue'),\n                },\n                meta: {title: 'Checkout', icon: 'mdi-cog', noCache: false},\n            },\n            {\n                path: 'account/employees/new',\n                name: 'settings.account.employees.new',\n                components: {\n                    default: () => import('@/views/dashboard/settings/EmployeesNew.vue'),\n                },\n                meta: {title: 'Invite Team Member', icon: 'mdi-cog', noCache: false},\n            },\n            {\n                path: 'account/employees/:e_id',\n                name: 'settings.account.employees',\n                components: {\n                    default: () => import('@/views/dashboard/settings/Employees.vue'),\n                },\n                meta: {title: 'Account', icon: 'mdi-cog', noCache: false},\n            },\n            {\n                path: 'fleet',\n                name: 'settings.fleet',\n                components: {\n                    default: () => import('@/views/dashboard/settings/Fleet/FleetBase.vue'),\n                },\n                meta: {title: 'Account', icon: 'mdi-cog', noCache: false},\n                children: [\n                    {\n                        path: 'branches',\n                        name: 'settings.fleet.branches',\n                        components: {\n                            default: () => import('@/views/dashboard/settings/Fleet/FleetBranches.vue'),\n                        },\n                        meta: {title: 'Branches', icon: 'mdi-cog', noCache: false},\n                    },\n                    {\n                        path: 'branches/new',\n                        name: 'settings.fleet.branches.new',\n                        components: {\n                            default: () => import('@/views/dashboard/settings/Fleet/FleetBranchesNew.vue'),\n                        },\n                        meta: {title: 'Branches', icon: 'mdi-cog', noCache: false},\n                    },\n                    {\n                        path: 'branches/:uuid',\n                        name: 'settings.fleet.branches.single',\n                        components: {\n                            default: () => import('@/views/dashboard/settings/Fleet/FleetBranchesSingle.vue'),\n                        },\n                        meta: {title: 'Branches', icon: 'mdi-cog', noCache: false},\n                    },\n                    {\n                        path: 'vehicle-classes',\n                        name: 'settings.fleet.classes',\n                        components: {\n                            default: () => import('@/views/dashboard/settings/Fleet/FleetClass.vue'),\n                        },\n                        meta: {title: 'Vehicle Classes', icon: 'mdi-cog', noCache: false},\n                    },\n                    {\n                        path: 'vehicle-classes/new',\n                        name: 'settings.fleet.classes.new',\n                        components: {\n                            default: () => import('@/views/dashboard/settings/Fleet/FleetClassNew.vue'),\n                        },\n                        meta: {title: 'New Vehicle Classe', icon: 'mdi-cog', noCache: false},\n                    },\n                    {\n                        path: 'vehicle-classes/:uuid',\n                        name: 'settings.fleet.classes.single',\n                        components: {\n                            default: () => import('@/views/dashboard/settings/Fleet/FleetClassSingle.vue'),\n                        },\n                        meta: {title: 'Vehicle Class', icon: 'mdi-cog', noCache: false},\n                    },\n                    {\n                        path: 'action-items',\n                        name: 'settings.action_items',\n                        components: {\n                            default: () => import('@/views/dashboard/settings/Fleet/ActionItems/ActionItems.vue'),\n                        },\n                        meta: {title: 'Action Items', icon: 'mdi-cog', noCache: false},\n                    },\n                    {\n                        path: 'action-items/new',\n                        name: 'settings.action_item.new',\n                        components: {\n                            default: () => import('@/views/dashboard/settings/Fleet/ActionItems/ActionItemNew.vue'),\n                        },\n                        meta: {title: 'New Action Item', icon: 'mdi-cog', noCache: false},\n                    }, {\n                        path: 'action-items/:uuid',\n                        name: 'settings.action_items.single',\n                        components: {\n                            default: () => import('@/views/dashboard/settings/Fleet/ActionItems/ActionItemSingle.vue'),\n                        },\n                        meta: {title: 'Action Item', icon: 'mdi-cog', noCache: false},\n                    },\n                    {\n                        path: 'vehicle-features',\n                        name: 'settings.fleet.features',\n                        components: {\n                            default: () => import('@/views/dashboard/settings/Fleet/FleetFeatures.vue'),\n                        },\n                        meta: {title: 'Vehicle Features', icon: 'mdi-cog', noCache: false},\n                    },\n                ],\n            },\n            {\n                path: 'affiliate',\n                components: {\n                    default: () => import('@/views/dashboard/settings/Fleet/FleetBase.vue'),\n                },\n                meta: {title: 'Affiliate', icon: 'mdi-cog', noCache: false},\n                children: [\n                    {\n                        path: '',\n                        name: 'settings.account.affiliate.index',\n                        components: {\n                            default: () => import('@/views/dashboard/settings/Affiliate/AffiliateIndex.vue'),\n                        },\n                        meta: {title: 'Affiliate', icon: 'mdi-cog', noCache: false},\n                    },\n                    {\n                        path: 'signup',\n                        name: 'settings.affiliate.signup',\n                        components: {\n                            default: () => import('@/views/dashboard/settings/Affiliate/AffiliateSignup.vue'),\n                        },\n                        meta: {title: 'Affiliate', icon: 'mdi-cog', noCache: false},\n                    },\n                    {\n                        path: 'payouts',\n                        name: 'settings.affiliate.payouts',\n                        components: {\n                            default: () => import('@/views/dashboard/settings/Affiliate/AffiliatePayouts.vue'),\n                        },\n                        meta: {title: 'Affiliate', icon: 'mdi-cog', noCache: false},\n                    },\n                ],\n            },\n            {\n                path: 'custodian',\n                components: {\n                    default: () => import('@/views/dashboard/settings/Fleet/FleetBase.vue'),\n                },\n                meta: {title: 'Affiliate', icon: 'mdi-cog', noCache: false},\n                children: [\n                    {\n                        path: '',\n                        name: 'settings.custodian.index',\n                        components: {\n                            default: () => import('@/views/dashboard/settings/Custodian/Index.vue'),\n                        },\n                        meta: {title: 'Custodian', icon: 'mdi-cog', noCache: false},\n                    },\n                ],\n            },\n        ],\n    }\n];\n\nexport default settingsRoutes;\n","import type {RouteRecordRaw} from 'vue-router';\nimport type {CommonRouteMeta} from '@/types';\n\nconst BaseDashboard = () => import('@/views/dashboard/BaseDashboard.vue');\n\nconst defaultMeta: CommonRouteMeta = {\n    icon: 'mdi-handshake',\n    noCache: false,\n};\n\nconst commission: RouteRecordRaw[] = [{\n    path: '/commission',\n    component: BaseDashboard,\n    meta: {\n        ...defaultMeta,\n        title: 'commission',\n        showInMenu: false,\n        middleware: ['auth'],\n        layout: 'Dashboard',\n    } as CommonRouteMeta,\n    children: [\n        {\n            path: '',\n            components: {\n                default: () => import('@/views/dashboard/commission/Commission.vue'),\n            },\n            name: 'commission',\n            meta: {...defaultMeta, title: ''},\n        },\n        {\n            path: 'partners',\n            components: {\n                default: () => import('@/views/dashboard/settings/CommissionPartners.vue'),\n            },\n            name: 'commission.partners',\n            meta: {...defaultMeta, title: 'Partners'},\n        },\n        {\n            path: 'partners/:partner_uuid',\n            components: {\n                default: () => import('@/views/dashboard/commission/SingleCommissionPartner.vue'),\n            },\n            name: 'commission.partner.single',\n            meta: {...defaultMeta, title: 'Partners'},\n        },\n    ],\n}];\n\nexport default commission;\n","<template>\n<div class=\"justify-content-center align-items-center flex\">\n  <div>\n    <div class=\"text-center\">\n      <div class=\"h3\">Checking Invite Code</div>\n      {{ company.name }} <br>\n      {{ managed_id }} <br>\n\n      <v-progress-circular\n          v-if=\"custodianLoading.join\"\n          :size=\"50\"\n          color=\"primary\"\n          indeterminate\n      ></v-progress-circular>\n\n      <v-alert type=\"warning\" v-if=\"errorMessage\">\n        {{errorMessage}}\n      </v-alert>\n    </div>\n  </div>\n\n  <v-dialog\n      v-model=\"successDialog\"\n      persistent\n      width=\"300\"\n  >\n    <v-card color=\"primary\" dark>\n      <v-card-text>\n        Success. Please wait.\n        <v-progress-linear\n            indeterminate\n            color=\"white\"\n            class=\"mb-0\"\n        ></v-progress-linear>\n      </v-card-text>\n    </v-card>\n  </v-dialog>\n</div>\n</template>\n\n<script>\nimport { mapActions, mapGetters } from 'vuex';\nimport { EventBus } from '@/plugins/eventBus';\n\n\nexport default {\n  name: 'ListingManagerConnect',\n\n  data() {\n    return {\n      managed_id: this.$route.params.managed_id,\n      errorMessage: null,\n      successDialog: false,\n    };\n  },\n\n  created() {\n    EventBus.$on('custodian-join-success', () => {\n      this.successRedirectDialogInit();\n    });\n    EventBus.$on('custodian-join-failure', (message) => {\n      this.errorMessage = message;\n    });\n  },\n\n  mounted() {\n    if(this.$route.params.managed_id) {\n      this.fetchCustodian(this.$route.params.managed_id);\n    }\n  },\n\n  computed: {\n    ...mapGetters({\n      company: 'company/company',\n      custodianLoading: 'custodian/loading',\n    }),\n  },\n\n  methods: {\n    ...mapActions({\n      fetchCustodian: 'custodian/join',\n    }),\n    successRedirectDialogInit() {\n      this.successDialog = true;\n\n      // Set a timeout for 3 seconds and redirect to the listings page\n      setTimeout(() => {\n        this.$router.push({ name: 'listing.index' }).catch(() => {});\n      }, 2000);\n    },\n  },\n};\n</script>\n","import type {RouteRecordRaw} from 'vue-router';\nimport ListingManagerConnect from '@/views/dashboard/manager/ListingManagerConnect.vue';\nimport {CommonRouteMeta} from \"@/types\";\n\nconst BaseDashboard = () => import('@/views/dashboard/BaseDashboard.vue');\n\n\nconst listingManagerRoutes: RouteRecordRaw = {\n    path: '/custodian',\n    component: BaseDashboard,\n    meta: {\n        title: 'custodian',\n        icon: 'mdi-car-convertible',\n        noCache: false,\n        isBase: true,\n        permissions: ['listings_view'],\n    } as CommonRouteMeta,\n    children: [\n        {\n            path: ':managed_id',\n            components: {\n                default: ListingManagerConnect,\n            },\n            name: 'listing.manager.connect',\n            meta: {title: 'Single Listing', icon: 'mdi-car-convertible', noCache: false, resource: 'l_id'},\n        },\n    ],\n};\n\nexport default listingManagerRoutes;\n","<template>\n  <v-app class=\"d-block relative\">\n    <div class=\"flex flex-column h-screen\">\n      <transition name=\"fade-transform\" mode=\"out-in\">\n        <keep-alive>\n          <slot>\n            <router-view />\n          </slot>\n        </keep-alive>\n      </transition>\n    </div>\n  </v-app>\n</template>\n\n<script>\nimport { mapActions, mapGetters } from 'vuex';\n\nexport default {\n  name: 'TheDocumentsDashboardV2',\n\n  layout: 'dashboard',\n\n  middleware: 'auth',\n\n  data() {\n    return {\n      layout: null,\n      currentRole: 'adminDashboard',\n      admins: [\n        ['Management', 'mdi-people-outline'],\n        ['Settings', 'mdi-cog'],\n      ],\n      cruds: [\n        ['Create', 'mdi-add'],\n        ['Read', 'mdi-insert_drive_file'],\n        ['Update', 'mdi-update'],\n        ['Delete', 'mdi-delete'],\n      ],\n      headers: [\n        {\n          text: 'Name',\n          align: 'start',\n          value: 'name',\n        },\n        { text: 'Created', value: 'created_at' },\n        { text: 'Actions', value: 'actions', sortable: false },\n      ],\n    };\n  },\n  watch: {\n    $route() {\n      if (this.device === 'mobile' && this.secondaryNavViews.listingImportNav) {\n        this.toggleSecondaryImportNav();\n      }\n    },\n  },\n\n  computed: {\n    ...mapGetters({\n      sidebar: 'app/sidebar',\n      device: 'app/device',\n      secondaryNavViews: 'app/secondaryNavViews',\n    }),\n\n    classObj() {\n      return {\n        'sidebar-closed': !this.sidebar.opened,\n        'sidebar-opened': this.sidebar.opened,\n        withoutAnimation: this.sidebar.withoutAnimation,\n        mobile: this.device === 'mobile',\n        'show-import-secondary-menu': this.secondaryNavViews.listingImportNav,\n      };\n    },\n  },\n  methods: {\n    ...mapActions({\n      toggleSecondaryImportNav: 'app/toggleSecondaryImportNav',\n    }),\n  },\n\n};\n</script>\n\n<style lang=\"scss\">\n.component-fade-enter-active, .component-fade-leave-active {\n  transition: opacity .3s ease;\n}\n.component-fade-enter, .component-fade-leave-to\n  /* .component-fade-leave-active below version 2.1.8 */ {\n  opacity: 0;\n}\n</style>\n","const irregularPlurals: Record<string, string> = {\n    child: 'children',\n    person: 'people',\n    class: 'classes',\n    tomato: 'tomatoes',\n    boss: 'bosses',\n    glass: 'glasses',\n    mouse: 'mice',\n    tooth: 'teeth',\n    foot: 'feet',\n    goose: 'geese',\n    woman: 'women',\n    man: 'men',\n    cactus: 'cacti',\n    focus: 'foci',\n};\n\n\nexport function pluralize(time: unknown, label: unknown): string {\n    if (typeof label !== 'string' || !label.trim()) {\n        return ''; // Ensure label is a valid, non-empty string\n    }\n\n    const cleanedLabel = label.trim();\n    const lowercaseLabel = cleanedLabel.toLowerCase();\n    const count = Number(time) || 0;\n\n    if (count === 1) {\n        return cleanedLabel; // Return singular form unchanged\n    }\n\n    // Determine plural form\n    let plural = irregularPlurals[lowercaseLabel] || `${cleanedLabel}s`;\n\n    // Preserve case formatting\n    if (cleanedLabel === cleanedLabel.toUpperCase()) {\n        // All uppercase (e.g., \"ITEM\" → \"ITEMS\")\n        plural = plural.toUpperCase();\n    } else if (cleanedLabel[0] === cleanedLabel[0].toUpperCase()) {\n        // Capitalized (e.g., \"Person\" → \"People\")\n        plural = plural[0].toUpperCase() + plural.slice(1);\n    }\n\n    return plural;\n}\n\n\nexport function upperFirst(value: unknown): string {\n    if (typeof value === 'string') {\n        const trimmed = value.trim(); // Ensure no leading/trailing spaces\n        return trimmed.length ? trimmed.charAt(0).toUpperCase() + trimmed.slice(1) : '';\n    }\n\n    if (typeof value === 'number' || typeof value === 'boolean') {\n        return String(value).charAt(0).toUpperCase() + String(value).slice(1);\n    }\n\n    return ''; // Return empty string for invalid types\n}\n\nexport function snakeCase(value: unknown): string {\n    if (typeof value !== 'string') return '';\n\n    return value.trim()\n        .replace(/([a-z])([A-Z])/g, '$1_$2') // Insert _ between lowercase and uppercase letters\n        .replace(/(\\d)([A-Za-z])/g, '$1_$2') // Ensure numbers remain with previous word\n        .replace(/\\s+/g, '_') // Replace spaces with underscores\n        .toLowerCase();\n}\n\nexport function truncate(value: unknown, length: number): string {\n    if (typeof value !== 'string') return '';\n\n    const trimmedValue = value.trim();\n    if (trimmedValue.length <= length) return trimmedValue;\n\n    return trimmedValue.slice(0, length) + '...';\n}","import {useStore} from 'vuex';\nimport {computed} from 'vue';\nimport {TemplateData} from '@/store/modules/document';\nimport {ESignerFieldData, ESignTool} from '@/types';\n\nexport function useTemplate() {\n    const store = useStore();\n\n    // 🔹 Computed Properties\n    const documentTemplates = computed<TemplateData[]>(() => store.getters['document/templates']);\n    const documentsLoading = computed(() => store.getters['document/loading']);\n    const selectedFieldV2 = computed<ESignerFieldData>(() => store.getters['template/selectedFieldV2']);\n    const template = computed<TemplateData | null>(() => store.getters['template/template']);\n    const allTools = computed<ESignTool[]>(() => store.getters['template/allTools']);\n    const currentWorkingTool = computed(() => store.getters['template/currentWorkingTool']);\n    const documentFieldData = computed(() => store.getters['template/documentFieldData']);\n    const toolsActive = computed(() => store.getters['template/toolsActive']);\n    const templateDocument = computed(() => template.value?.documents);\n    const documentImages = computed(() => store.getters['template/documentImages']);\n    const selectedFieldIndexV2 = computed(() => store.getters['template/selectedFieldIndexV2']);\n    const signerItems = computed(() => store.getters['template/signerItems']);\n\n    const documentFileName = computed(() => {\n        return template.value?.documents.name ?? '';\n    });\n\n    const templateStageData = computed<ESignerFieldData[]>(() => {\n        return templateDocument.value?.data ?? [];\n    })\n\n    const templateDocumentImages = computed(() => {\n        return templateDocument.value?.document_images ?? [];\n    });\n    const selectedFieldV3Coordinates = computed(() => {\n        console.dir('selectedFieldV3Coordinates');\n        // Check if selectedFieldV2 is defined\n        if (!selectedFieldV2.value) {\n            return {x: 0, y: 0};\n        }\n\n        const x = selectedFieldV2.value.x || 0;\n        const y = selectedFieldV2.value.y || 0;\n\n        return {x, y};\n    });\n\n    const currentSigner = computed({\n        get: () => store.getters['template/currentSigner'],\n        set: (signer) => store.commit('template/SET_FIELD_CURRENT_SIGNER', signer)\n    });\n\n    const fetchTemplates = async () => {\n        return await store.dispatch('document/fetchTemplates');\n    }\n\n    const setDocumentImages = (images) => store.commit('template/SET_DOCUMENT_IMAGES', images);\n    const setTool = (toolUsed: string) => store.commit('template/SET_CURRENT_WORKING_TOOL', toolUsed)\n    const updateStageData = (payload: {\n        data: ESignerFieldData,\n        index: number\n    }) => store.commit('template/UPDATE_DOCUMENT_TEMPLATE_DATA', payload);\n    const removeAllStageData = () => store.commit('template/REMOVE_ALL_FIELDS');\n    const addToStageData = (payload: ESignerFieldData) => store.commit('template/ADD_TO_DOCUMENT_TEMPLATE_DATA', payload);\n    const setSingleTemplate = (template: TemplateData) => store.commit('template/SET_ONE_TEMPLATE', template);\n    const deleteSelectedElementsV2 = () => store.dispatch('template/deleteSelectedElementsV2');\n    const updateSelectedField = (field: ESignerFieldData) => store.commit('template/SET_SELECTED_FIELD_V2', field);\n    const setToolsActive = (isActive: boolean) => store.commit('template/SET_TOOLS_ACTIVE', isActive);\n\n    const toggleRightSidebar = () => {\n        store.commit('template/SET_SELECTED_FIELD_V2', null);\n        store.commit('template/SET_SELECTED_FIELD_INDEX_V2', 0);\n    }\n\n\n    const makeFieldId = (length = 8): string => {\n        const characters = 'ABCDEFGHJKLMNPQRSTUVWXYZ23456789';\n        return Array.from({length}, () =>\n            characters.charAt(Math.floor(Math.random() * characters.length))\n        ).join('');\n    };\n    //ESignerFieldData\n    const templateStageDataGroupedByPage = computed<{ [key: number]: ESignerFieldData[] }>(() => {\n        const data: ESignerFieldData[] = templateStageData.value;\n        const grouped: { [key: number]: ESignerFieldData[] } = {};\n\n        data.forEach((item) => {\n            const page = item.page;\n            if (!grouped[page]) {\n                grouped[page] = [];\n            }\n            grouped[page].push(item);\n        });\n        return grouped;\n    });\n\n    const removeField = (field: ESignerFieldData) => {\n        store.commit('template/REMOVE_FIELD', field);\n    }\n    const scrollToField = (field: ESignerFieldData) => {\n        const documentViewer = document.querySelector('#esign-editor-main-content');\n        if (documentViewer) {\n            documentViewer.scrollTo({\n                top: field.relativeY,\n                left: 0,\n                behavior: 'smooth',\n            });\n        }\n    }\n\n\n    return {\n        templateStageData,\n        allTools,\n        template,\n        documentsLoading,\n        documentTemplates,\n        selectedFieldV2,\n        documentFieldData,\n        currentWorkingTool,\n        selectedFieldV3Coordinates,\n        templateDocumentImages,\n        documentImages,\n        toolsActive,\n        currentSigner,\n        documentFileName,\n        selectedFieldIndexV2,\n        signerItems,\n        templateStageDataGroupedByPage,\n        removeField,\n        scrollToField,\n        setSingleTemplate,\n        addToStageData,\n        setDocumentImages,\n        updateStageData,\n        updateSelectedField,\n        toggleRightSidebar,\n        deleteSelectedElementsV2,\n        setTool,\n        fetchTemplates,\n        makeFieldId,\n        removeAllStageData,\n        setToolsActive\n    }\n}","import {store as defaultStore} from '@/store';\n\n/**\n * Check if user has the required permission(s)\n * @param {string[]} value - Required permissions\n * @param {any} [customStore] - Optional store (for reactivity)\n */\nexport default function checkPermission(value: string[], customStore = defaultStore): boolean {\n    if (!value || !Array.isArray(value) || value.length === 0) {\n        console.error('Need permissions! Example: checkPermission(\"[\\'manage permission\\',\\'edit article\\']\")');\n        return false;\n    }\n\n    const permissions = customStore?.getters?.['auth/permissions'] as string[];\n\n    if (!permissions) {\n        console.warn('Permissions not found. Store might not be initialized.');\n        return false;\n    }\n\n    return permissions.some(permission => value.includes(permission));\n}\n","import {computed} from 'vue';\nimport {RouteLocationNormalizedLoaded, useRoute, useRouter} from 'vue-router';\nimport {useStore} from 'vuex';\nimport checkPermission from '@/utils/permission';\nimport {AppCurrency} from '@/types';\n\n\nexport function useAppSettings() {\n    const route: RouteLocationNormalizedLoaded = useRoute();\n    const router = useRouter();\n    const store = useStore();\n\n    // State from store\n    const roles = computed(() => store.getters['auth/roles']);\n    const permissions = computed(() => store.getters['auth/permissions']);\n    const setupItems = computed(() => store.getters['app/setupItems']);\n    const currentCurrency = computed<AppCurrency>(() => store.getters['app/currentCurrency']);\n    const polledBuildNumber = computed(() => store.getters['app/polled_build']);\n    const updateAvailable = computed(() => store.getters['app/update_available']);\n    const appCurrentRouteName = computed(() => route.name);\n    const debugDrawerOpen = computed(() => store.getters['app/debugDrawerOpen']);\n    const sidebar = computed(() => store.getters['app/sidebar']);\n    const device = computed(() => store.getters['app/device']);\n    const browser = computed(() => store.getters['app/browser']);\n\n    const secondaryNavViews = computed(() => store.getters['app/secondaryNavViews']);\n\n    // goBack\n    const goBack = (numberOfRoutes: number = 1) => {\n        router.go(-numberOfRoutes);\n    }\n\n    const isRouteMatch = (routeName: string, condition: () => boolean = () => true): boolean => {\n        // Ensure that route.name is a string before calling string methods on it\n        if (typeof route.name === 'string') {\n            return route.name.startsWith(routeName) && condition();\n        }\n        return false;\n    };\n\n    function shouldSubMenuOpen(pageName: string) {\n        const conditions: { [key: string]: () => boolean } = {\n            'customers': () => typeof route.name === 'string' && !route.name.includes('customers.import') && !route.name.includes('customers.single'),\n            'orders': () => typeof route.name === 'string' && route.name.startsWith('orders.index'),\n            'documents': () => typeof route.name === 'string' && route.name.startsWith('documents.index'),\n        };\n\n        const condition = conditions[pageName] || (() => true);\n\n        return {\n            MainNavigation__open: isRouteMatch(pageName, condition)\n        };\n    }\n\n    function userHasRole(role: string): boolean {\n        return roles.value.includes(role);\n    }\n\n    const fetchBuildNumber = async () => {\n        return await store.dispatch('app/fetchBuildNumber');\n    }\n\n    const toggleSideBar = () => {\n        store.dispatch('app/toggleSideBar');\n    };\n\n    function userHasPermission(permissions: string[]): boolean {\n        return checkPermission(permissions);\n    }\n\n    const updateSettings = async (settings: { settings: { [key: string]: any } }) => {\n        return await store.dispatch('settings/updateSettings', settings);\n    }\n\n    const fetchCurrency = async (currency: string) => {\n        return await store.dispatch('app/fetchCurrency', currency);\n    }\n\n    const getSettings = async () => {\n        return await store.dispatch('settings/getSettings');\n    }\n\n    function toggleDebugDrawer() {\n        store.dispatch('app/toggleDebugDrawer');\n    }\n\n    const appCurrencies: AppCurrency[] = [\n        {name: 'British Pound Sterling', code: 'GBP', symbol: '£'},\n        {name: 'Canadian Dollar', code: 'CAD', symbol: '$'},\n        {name: 'Euro', code: 'EUR', symbol: '€'},\n        {name: 'Japanese Yen', code: 'JPY', symbol: '¥'},\n        {name: 'Mexican Peso', code: 'MXN', symbol: '$'},\n        {name: 'South Korean Won', code: 'KRW', symbol: '₩'},\n        {name: 'Turkish Lira', code: 'TRY', symbol: '₺'},\n        {name: 'US Dollar', code: 'USD', symbol: '$'},\n    ] as AppCurrency[]\n\n    return {\n        setupItems,\n        debugDrawerOpen,\n        appCurrencies,\n        currentCurrency,\n        roles,\n        permissions,\n        appCurrentRouteName,\n        polledBuildNumber,\n        updateAvailable,\n        sidebar,\n        device,\n        browser,\n        secondaryNavViews,\n        goBack,\n        fetchBuildNumber,\n        updateSettings,\n        getSettings,\n        userHasRole,\n        userHasPermission,\n        shouldSubMenuOpen,\n        toggleDebugDrawer,\n        fetchCurrency,\n        toggleSideBar,\n    }\n}","<template>\n  <div class=\"right-bar2 overflow-x-hidden\">\n    <div class=\"bg-gray-700 flex items-center justify-between w-full px-3 py-3\">\n      <div class=\"flex-grow\"></div>\n      <v-btn class=\"right-bar-toggle\" size=\"x-small\" theme=\"dark\" @click=\"toggleRightSidebar();\">\n        <v-icon color=\"white\" size=\"small\">mdi-close</v-icon>\n      </v-btn>\n    </div>\n\n    <div class=\"rightbar-content h-100\">\n      <div>\n\n        <!-- Edit Field -->\n        <div>\n          <div>\n            <v-card class=\"edit-field-card\" flat>\n              <v-card-title>\n                <div v-if=\"selectedFieldType === 'text'\">\n                  <v-icon class=\"mr-2\">mdi-format-text</v-icon>\n                  Text\n                </div>\n                <div v-if=\"selectedFieldType === 'checkbox'\">\n                  <v-icon class=\"mr-2\">mdi-checkbox-marked-outline</v-icon>\n                  Checkbox\n                </div>\n                <div v-if=\"selectedFieldType === 'signature'\">\n                  <v-icon class=\"mr-2\">mdi-signature</v-icon>\n                  Signature\n                </div>\n                <div v-if=\"selectedFieldType === 'attachment'\">\n                  <v-icon class=\"mr-2\">mdi-attachment</v-icon>\n                  Attachment\n                </div>\n                <div v-if=\"selectedFieldTitle === 'Name'\">\n                  <v-icon class=\"mr-2\">mdi-format-text</v-icon>\n                  Name\n                </div>\n                <div v-if=\"selectedFieldType === 'field'\">\n                  <span v-if=\"selectedFieldV2.customField\"><v-icon class=\"mr-2\">mdi-creation</v-icon>Custom Field</span>\n                  <span v-else><v-icon class=\"mr-2\">mdi-creation</v-icon> Field</span>\n                </div>\n              </v-card-title>\n              <v-divider/>\n              <v-card-text>\n                <div v-if=\"selectedFieldV2?.primary_customer\" class=\"p-1\">\n                  <v-icon :color=\"'#5be8ff'\" class=\"mr-1\" size=\"small\">mdi-account-circle</v-icon>\n                  Primary Signer\n                </div>\n                <div v-if=\"selectedFieldV2?.secondary_customer\" class=\"p-1\">\n                  <v-icon :color=\"'purple'\" class=\"mr-1\" size=\"small\">mdi-account-circle</v-icon>\n                  Secondary Signer\n                </div>\n                <p v-if=\"toolDescription(selectedFieldV2)\" class=\"p-1 overflow-auto\" style=\"max-height: 100px;\">\n                  <span class=\"h6 font-bold\">Description:</span>\n                  {{ toolDescription(selectedFieldV2) }}\n                </p>\n                <p v-if=\"selectedFieldV2?.typeId === 'field-booking-deposit'\" class=\"p-2\">\n                  <v-icon size=\"x-small\">mdi-help-circle-outline</v-icon>\n                  Depending on if they pay with a debit or credit this field will fill in the respective amount you\n                  chose for the listing.\n                </p>\n                <div class=\"px-2\">\n                  <div class=\"flex align-center\" style=\"height: 60px;\">\n                    <div class=\"flex-grow\">\n                      Required Field\n                      <v-icon v-tippy class=\"mb-1\" content=\"Requires users to enter data into the field before submitting.\" size=\"x-small\">\n                        mdi-help-circle-outline\n                      </v-icon>\n                    </div>\n                    <div>\n                      <v-switch\n                        v-model=\"selectedElementAttributesRequiredField\"\n                        density=\"compact\"\n                        hide-details\n                      />\n                    </div>\n                  </div>\n                  <div v-if=\"allowsReadOnly\" class=\"flex align-center\" style=\"height: 60px;\">\n                    <div class=\"flex-grow\">\n                      Read Only\n                      <v-icon v-tippy class=\"mb-1\" content=\"This field will be read only and can't be changed\" size=\"x-small\">\n                        mdi-help-circle-outline\n                      </v-icon>\n                    </div>\n                    <div>\n                      <v-switch\n                        v-model=\"selectedElementAttributesReadOnlyField\"\n                        density=\"compact\"\n                        hide-details\n                      />\n                    </div>\n                  </div>\n\n                  <div v-if=\"selectedFieldType === 'checkbox'\">\n                    <div class=\"flex align-center\" style=\"height: 60px;\">\n                      <div class=\"flex-grow\">\n                        Select By Default\n                        <v-icon v-tippy class=\"mb-1\" content=\"This field will be checked by default\" size=\"x-small\">\n                          mdi-help-circle-outline\n                        </v-icon>\n                      </div>\n                      <div class=\"h-100\">\n                        <v-switch\n                          v-model=\"selectedFieldV2.value\"\n                          density=\"compact\"\n                          hide-details\n                        />\n                      </div>\n                    </div>\n                    <v-text-field\n                      v-model=\"selectedFieldV2.fieldName\"\n                      density=\"compact\"\n                      label=\"Field Name *\"\n                      required\n                      variant=\"outlined\"\n                    />\n                  </div>\n                </div>\n\n                <div v-if=\"selectedFieldV2\" class=\"mt-5\">\n                  <v-expansion-panels multiple variant=\"accordion\">\n                    <v-expansion-panel v-if=\"selectedFieldType === 'text'\">\n                      <v-expansion-panel-title>Add Text</v-expansion-panel-title>\n                      <v-expansion-panel-text>\n                        <v-text-field\n                          v-model=\"selectedFieldV2.text\"\n                          label=\"Text\"\n                          variant=\"outlined\"\n                        ></v-text-field>\n                      </v-expansion-panel-text>\n                    </v-expansion-panel>\n                    <v-expansion-panel>\n                      <v-expansion-panel-title>Position</v-expansion-panel-title>\n                      <v-expansion-panel-text>\n                        <v-text-field\n                          v-model=\"selectedFieldV2.x\"\n                          label=\"X\"\n                          type=\"number\"\n                          variant=\"outlined\"\n                        ></v-text-field>\n                        <v-text-field\n                          v-model=\"selectedFieldV2.y\"\n                          label=\"Y\"\n                          type=\"number\"\n                          variant=\"outlined\"\n                        ></v-text-field>\n                      </v-expansion-panel-text>\n                    </v-expansion-panel>\n                    <v-expansion-panel v-if=\"selectedFieldType !== 'checkbox'\">\n                      <v-expansion-panel-title>Formatting</v-expansion-panel-title>\n                      <v-expansion-panel-text>\n                        <v-text-field\n                          v-model=\"selectedFieldV2.fontSize\"\n                          label=\"Font Size\"\n                          type=\"number\"\n                          variant=\"outlined\"\n                        ></v-text-field>\n\n                        <v-btn-toggle v-model=\"selectedFieldV2.textAlign\">\n                          <v-btn size=\"small\" value=\"left\">\n                            <v-icon size=\"small\">mdi-format-align-left</v-icon>\n                          </v-btn>\n                          <v-btn size=\"small\" value=\"center\">\n                            <v-icon size=\"small\">mdi-format-align-center</v-icon>\n                          </v-btn>\n                          <v-btn size=\"small\" value=\"right\">\n                            <v-icon size=\"small\">mdi-format-align-right</v-icon>\n                          </v-btn>\n                        </v-btn-toggle>\n                      </v-expansion-panel-text>\n                    </v-expansion-panel>\n                    <v-expansion-panel>\n                      <v-expansion-panel-title>ToolTip</v-expansion-panel-title>\n                      <v-expansion-panel-text>\n                        <v-text-field\n                          v-model=\"selectedFieldV2.toolTip\"\n                          label=\"Tool Tip\"\n                          variant=\"outlined\"\n                        ></v-text-field>\n                      </v-expansion-panel-text>\n                    </v-expansion-panel>\n                    <!--                   <v-expansion-panel>-->\n                    <!--                     <v-expansion-panel-title>Advanced</v-expansion-panel-title>-->\n                    <!--                     <v-expansion-panel-text>-->\n                    <!--                       <div style=\"height: 60px;\" class=\"flex align-center\">-->\n                    <!--                         <div class=\"flex-grow\">-->\n                    <!--                           Conditional-->\n                    <!--                           <v-icon x-small class=\"mb-1\" v-tippy content=\"Hide this field until other fields are filled out\">mdi-help-circle-outline</v-icon>-->\n                    <!--                         </div>-->\n                    <!--                         <div class=\"h-100\">-->\n                    <!--                           <v-switch-->\n                    <!--                               dense-->\n                    <!--                               v-model=\"selectedFieldV2?.conditional\"-->\n                    <!--                               inset-->\n                    <!--                               hide-details-->\n                    <!--                               @click=\"setupConditionalField()\"-->\n                    <!--                           ></v-switch>-->\n                    <!--                         </div>-->\n                    <!--                       </div>-->\n                    <!--                       <v-btn-->\n                    <!--                           v-if=\"selectedFieldV2?.conditional\"-->\n                    <!--                           x-small-->\n                    <!--                           block-->\n                    <!--                           @click=\"conditionalRulesDialog = true\"-->\n                    <!--                       >-->\n                    <!--                         Edit Conditions-->\n                    <!--                       </v-btn>-->\n                    <!--                     </v-expansion-panel-text>-->\n                    <!--                   </v-expansion-panel>-->\n                  </v-expansion-panels>\n                </div>\n                <div v-if=\"false\" class=\"mt-2 p-1\">\n                  <v-select\n                    v-model=\"customer\"\n                    :items=\"['primary', 'secondary']\"\n                    density=\"compact\"\n                    label=\"Customer\"\n                    variant=\"outlined\"\n                  >\n                    <template v-slot:item=\"{ item }\">\n                      <v-icon v-if=\"item.value === 'primary'\" color=\"#5be8ff\">mdi-circle-small</v-icon>\n                      <v-icon v-if=\"item.value === 'secondary'\" color=\"#975bff\">mdi-circle-small</v-icon>\n                      {{ upperFirst(item.value) }}\n                    </template>\n                  </v-select>\n                </div>\n              </v-card-text>\n\n              <v-card-actions>\n                <v-spacer/>\n                <delete-button\n                  :isDisabled=\"fieldIsDependant(selectedFieldV2)\"\n                  @delete-confirmed=\"$emit('update:esignFieldDeleted');\"\n                />\n              </v-card-actions>\n            </v-card>\n\n            <v-card-text>\n              <div v-if=\"selectedFieldV2?.x\" class=\"flex flex-col text-muted text-xs\">\n                <div class=\"flex\">\n                  <span class=\"flex-grow\">X POS:</span> {{ selectedFieldV2?.x }}\n                </div>\n                <div class=\"flex\">\n                  <span class=\"flex-grow\">Y POS:</span> {{ selectedFieldV2?.y }}\n                </div>\n                <div class=\"flex\">\n                  <span class=\"flex-grow\">Width:</span> {{ selectedFieldV2?.w }}\n                </div>\n                <div class=\"flex\">\n                  <span class=\"flex-grow\">Field ID:</span> {{ selectedFieldV2?.id }}\n                </div>\n              </div>\n            </v-card-text>\n            <pre v-if=\"debugDrawerOpen\" class=\"text-xs\">\n              {{ selectedFieldV2 }}\n            </pre>\n          </div>\n        </div>\n\n      </div>\n    </div>\n    <v-dialog v-model=\"conditionalRulesDialog\" width=\"420\">\n      <v-card>\n        <v-card-title>\n          Rules for {{ selectedFieldTitle }}\n        </v-card-title>\n\n        <v-card-text>\n          <div>Reveal this field when...</div>\n          <div>\n            <v-select\n              v-model=\"conditionalRules.when\"\n              :disabled=\"conditionalRules.rules.length <= 1\"\n              :items=\"possibleWhens\"\n              density=\"compact\"\n              item-title=\"text\"\n              item-value=\"value\"\n              variant=\"outlined\"\n            >\n            </v-select>\n          </div>\n          <div>\n            <div v-for=\"(rule, index) in conditionalRules.rules\" :key=\"index\" class=\"mb-1\">\n              <div class=\"flex  p-1 border rounded\">\n                <div class=\"flex-grow\">\n                  <v-select\n                    v-model=\"rule.field\"\n                    :items=\"availableFields\"\n                    class=\"mt-1\"\n                    density=\"compact\"\n                    hide-details\n                    item-title=\"text\"\n                    item-value=\"value\"\n                    label=\"Field\"\n                    variant=\"outlined\"\n                  >\n                    <template v-slot:selection=\"{ item }\">\n                      <v-icon :color=\"item.color\" class=\"mr-1\" size=\"small\">mdi-account-circle</v-icon>\n                      <div class=\"flex\">\n                        <div class=\"flex-grow\">\n                          {{ item.text }}\n                          <span v-if=\"item.fieldName\" class=\"small\">({{ item.fieldName }})</span>\n                        </div>\n                        <div v-if=\"item.primary\">Primary</div>\n                        <div v-if=\"item.secondary\">Secondary</div>\n                      </div>\n                    </template>\n                    <template v-slot:item=\"{ item }\">\n                      <v-icon :color=\"item.color\" class=\"mr-1\" size=\"small\">mdi-account-circle</v-icon>\n                      <div class=\"flex\">\n                        <div class=\"flex-grow\">\n                          {{ item.text }}\n                          <span v-if=\"item.fieldName\" class=\"small\">({{ item.fieldName }})</span>\n                        </div>\n                        <div v-if=\"item.primary\">Primary</div>\n                        <div v-if=\"item.secondary\">Secondary</div>\n                      </div>\n                    </template>\n                  </v-select>\n                  <v-select\n                    v-model=\"rule.value\"\n                    :items=\"getActionItems(rule)\"\n                    class=\"mt-2\"\n                    density=\"compact\"\n                    hide-details\n                    item-title=\"text\"\n                    item-value=\"value\"\n                    label=\"Action\"\n                    variant=\"outlined\"\n                  >\n                  </v-select>\n                </div>\n                <div class=\"px-1\">\n                  <v-btn\n                    v-if=\"index !== 0\"\n                    rounded\n                    size=\"x-small\"\n                    variant=\"flat\"\n                    @click=\"conditionalRules.rules.splice(index, 1)\"\n                  >\n                    <v-icon size=\"x-small\">mdi-delete</v-icon>\n                  </v-btn>\n\n                  <delete-button\n                    @delete-confirmed=\"conditionalRules.rules.splice(index, 1)\"\n                  />\n                </div>\n              </div>\n              <div\n                v-if=\"conditionalRules.rules.length > 1 && conditionalRules.rules.length !== index + 1\"\n                class=\"flex justify-content-center\"\n              >\n                <span v-if=\"conditionalRules.when === 'any'\">Or</span>\n                <span v-if=\"conditionalRules.when === 'all'\">And</span>\n                <span v-if=\"conditionalRules.when === 'none'\">Not And</span>\n              </div>\n            </div>\n            <div class=\"mt-2\">\n              <v-btn block size=\"small\" variant=\"text\" @click=\"addConditionToRuleset()\">\n                <v-icon>mdi-plus</v-icon>\n              </v-btn>\n            </div>\n          </div>\n        </v-card-text>\n\n        <v-card-actions>\n          <v-spacer/>\n          <v-btn @click=\"setConditionalRules()\">Okay</v-btn>\n        </v-card-actions>\n      </v-card>\n    </v-dialog>\n  </div>\n</template>\n\n<script lang=\"ts\">\nimport {computed, defineAsyncComponent, ref, watch} from 'vue';\nimport {upperFirst} from '@/utils/text';\nimport {useTemplate} from '@/composables/useTemplate';\nimport {useAppSettings} from '@/composables/useAppSettings';\nimport {ESignerFieldData} from '@/types';\n\nconst DeleteButton = defineAsyncComponent(() => import('@/components/buttons/DeleteButton.vue'));\n\nexport default {\n  name: 'TheTemplateRightSidebar',\n  components: {DeleteButton},\n\n  emits: ['update:esignFieldDeleted'],\n\n  setup() {\n    const {\n      allTools,\n      selectedFieldV2,\n      templateStageData,\n      toggleRightSidebar,\n      setTool,\n      deleteSelectedElementsV2\n    } = useTemplate();\n    const {debugDrawerOpen} = useAppSettings();\n    const currentTool = ref('');\n    const customer = ref('');\n    const conditionalRulesDialog = ref(false);\n    const conditionalRules = ref({\n      when: 'any',\n      rules: [\n        {\n          field: '',\n          operator: '',\n          value: '',\n        },\n      ],\n    });\n    const possibleWhens = ref([\n      {\n        text: 'Any of the following',\n        value: 'any',\n      },\n      {\n        text: 'All of the following',\n        value: 'all',\n      },\n      {\n        text: 'None of the following',\n        value: 'none',\n      },\n    ]);\n\n    const possibleRules = ref({\n      field: [\n        {\n          value: 'filled',\n          text: 'is filed in',\n        },\n        {\n          value: 'not_filled',\n          text: 'is not filed in',\n        },\n      ],\n      checkbox: [\n        {\n          value: 'filled',\n          text: 'is checked',\n        },\n        {\n          value: 'not_filled',\n          text: 'is not check',\n        },\n      ],\n    });\n\n    const conditionalRulesRules = computed(() => {\n      return conditionalRules.value.rules;\n    });\n\n    watch(currentTool, (tool) => {\n      if (tool) {\n        const toolUsed = allTools.value.find((t) => t.value === currentTool.value);\n        console.dir('toolUsed');\n        console.dir(toolUsed);\n        if (toolUsed) {\n          setTool(toolUsed);\n        }\n      }\n    });\n\n    watch(selectedFieldV2, (field) => {\n      if (field) {\n        if (field.conditional_rules) {\n          conditionalRules.value = field.conditional_rules;\n        } else {\n          conditionalRules.value = {\n            when: 'any',\n            rules: [\n              {\n                field: '',\n                operator: '',\n                value: '',\n              },\n            ],\n          };\n        }\n      }\n    });\n\n\n    watch(conditionalRulesRules, (rules) => {\n      if (rules.length <= 1) {\n        conditionalRules.value.when = 'any';\n      }\n    });\n\n    const selectedFieldType = computed(() => selectedFieldV2?.value?.type);\n    const selectedFieldTitle = computed(() => selectedFieldV2?.value?.title);\n\n\n    const allFieldsWithRules = computed(() => {\n      return templateStageData.value.filter((field: ESignerFieldData) => field?.conditional_rules?.rules?.length > 0);\n    });\n\n    const dependentFields = computed(() => {\n      const fieldIds = [];\n      allFieldsWithRules.value.forEach((field) => {\n        field.conditional_rules.rules.forEach((rule) => {\n          if (rule.value && !fieldIds.includes(rule.value)) {\n            fieldIds.push(rule.value);\n          }\n        });\n      });\n      return fieldIds;\n    });\n\n    const setupConditionalField = () => {\n      if (selectedFieldV2.value?.conditional) {\n        conditionalRulesDialog.value = true;\n      } else {\n        delete selectedFieldV2.value?.conditional_rules;\n      }\n    };\n\n    const getActionItems = (rule) => {\n      const field = templateStageData.value.find((field) => field.id === rule.field);\n      if (!field) return [];\n\n      return possibleRules.value[field.type] || [];\n    };\n\n    const setConditionalRules = () => {\n      conditionalRulesDialog.value = false;\n      selectedFieldV2.value.conditional_rules = conditionalRules.value;\n    };\n\n    const addConditionToRuleset = () => {\n      console.dir('addConditionToRuleset');\n      conditionalRules.value.rules.push({\n        field: '',\n        operator: '',\n        value: '',\n      });\n    };\n\n    const fieldIsDependant = (field) => {\n      return dependentFields.value && dependentFields.value.includes(field?.id);\n    };\n\n    const toolDescription = (tool) => {\n      const findTool = allTools.value.find((t) => t.id === tool?.typeId);\n      return findTool?.description;\n    };\n\n    const allFieldsOrdered = computed(() => {\n      const fields = templateStageData.value.map((field) => ({\n        text: field.title,\n        value: field.id,\n        type: field.type,\n        fieldName: field.fieldName,\n        primary: !!field.primary_customer,\n        secondary: !!field.secondary_customer,\n      }));\n\n      return fields.sort((a, b) => {\n        if (a.primary && !b.primary) {\n          return -1;\n        }\n        if (!a.primary && b.primary) {\n          return 1;\n        }\n        if (a.secondary && !b.secondary) {\n          return -1;\n        }\n        if (!a.secondary && b.secondary) {\n          return 1;\n        }\n        if (a.text < b.text) {\n          return -1;\n        }\n        if (a.text > b.text) {\n          return 1;\n        }\n        return 0;\n      });\n    });\n\n    const availableFields = computed(() => {\n      return allFieldsOrdered.value?.filter((field) => {\n        if (selectedFieldV2.value) {\n          return field.value !== selectedFieldV2.value.id;\n        }\n        return true;\n      });\n    });\n\n    const allowsReadOnly = computed(() => {\n      return selectedFieldV2.value?.typeId === 'field-free-text'\n        || selectedFieldV2.value?.typeId === 'field-primary-free-text'\n        || selectedFieldV2.value?.typeId === 'field-secondary-free-text'\n        || selectedFieldV2.value?.customField;\n    });\n\n    const selectedElementAttributesRequiredField = computed({\n      get() {\n        return selectedFieldV2.value?.required || false;\n      },\n      set(value) {\n        console.dir(selectedFieldV2.value);\n        selectedFieldV2.value.required = value;\n      },\n    });\n\n    const selectedElementAttributesReadOnlyField = computed({\n      get() {\n        return selectedFieldV2.value?.readOnly || false;\n      },\n      set(value) {\n        console.dir('set value');\n        selectedFieldV2.value.readOnly = value;\n      },\n    });\n\n\n    return {\n      upperFirst,\n      deleteSelectedElementsV2,\n      setupConditionalField,\n      getActionItems,\n      setConditionalRules,\n      addConditionToRuleset,\n      fieldIsDependant,\n      toolDescription,\n      toggleRightSidebar,\n      allowsReadOnly,\n      selectedElementAttributesRequiredField,\n      selectedElementAttributesReadOnlyField,\n      allFieldsOrdered,\n      dependentFields,\n      availableFields,\n      selectedFieldTitle,\n      selectedFieldType,\n      allFieldsWithRules,\n      templateStageData,\n      selectedFieldV2,\n      debugDrawerOpen,\n      allTools,\n      currentTool,\n      customer,\n      conditionalRulesDialog,\n      conditionalRules,\n      possibleWhens,\n      possibleRules,\n    };\n  },\n\n};\n</script>\n\n<style lang=\"scss\">\n.edit-field-card.theme--light.v-card {\n  background-color: #efefef;\n  border: none;\n}\n\n.edit-field-card .v-card__text {\n  padding: 0 !important;\n}\n\n.right-bar2 {\n  background-color: #efefef;\n  -webkit-box-shadow: 0 0 24px 0 rgba(50, 58, 70, .1), 0 1px 0 0 rgba(50, 58, 70, .08);\n  box-shadow: 0 0 24px 0 rgba(50, 58, 70, .1), 0 1px 0 0 rgba(50, 58, 70, .08);\n  display: block;\n  position: fixed;\n  -webkit-transition: all .2s ease-out;\n  transition: all .2s ease-out;\n  width: 220px;\n  z-index: 9999;\n  float: right !important;\n  right: -220px;\n  top: 0;\n  bottom: 0;\n  padding-bottom: 80px;\n  overflow: auto;\n}\n\n.esign-right-bar-enabled .right-bar2 {\n  right: 0;\n}\n\n.right-bar2 .rightbar-title {\n  background-color: #313a46;\n  padding: 27px 25px;\n  color: #fff !important;\n}\n\n.right-bar2 .rightbar-title h5 {\n  color: #fff !important;\n}\n\n.right-bar2 .right-bar-toggle {\n  //background-color: #444e5a;\n  //height: 24px;\n  //width: 24px;\n  //line-height: 22px;\n  //color: #fff;\n  //text-align: center;\n  //border-radius: 50%;\n  //margin-top: -4px;\n}\n</style>\n","<template>\n  <div id=\"content_sidebar-left\" class=\"content_sidebar content_sidebar-left overflow-x-hidden\">\n    <v-scroll-x-transition hide-on-leave>\n      <div v-if=\"showFieldSearch\" class=\"sidebar_footer\">\n        <div class=\"form_item-iconLeft form_item-iconRight\">\n          <v-text-field v-model=\"searchTool\" append-icon=\"mdi-close\" class=\"input-text mx-1 px-1\" density=\"compact\" placeholder=\"Search Tools\" prepend-inner-icon=\"mdi-magnify\" type=\"text\" @click:append=\"searchTool = ''; showFieldSearch = false;\"></v-text-field>\n        </div>\n      </div>\n    </v-scroll-x-transition>\n    <div class=\"\">\n      <v-btn :class=\"{'left-sidebar-group-active' : leftSidebarView === 1}\" class=\"left-sidebar-group\" size=\"small\" variant=\"text\" @click=\"leftSidebarView = 1\">\n        <v-icon size=\"small\">mdi-format-textbox</v-icon>\n      </v-btn>\n      <v-btn :class=\"{'left-sidebar-group-active' : leftSidebarView === 2}\" class=\"left-sidebar-group\" size=\"small\" variant=\"text\" @click=\"leftSidebarView = 2\">\n        <v-icon size=\"small\">mdi-cogs</v-icon>\n      </v-btn>\n      <v-btn class=\"left-sidebar-group\" size=\"small\" variant=\"text\" @click=\"showFieldSearch = !showFieldSearch\">\n        <v-icon size=\"small\">mdi-magnify</v-icon>\n      </v-btn>\n    </div>\n    <div class=\"w-100 overflow-auto bg-gray-100\">\n      <div class=\"h-100 flex\">\n        <div class=\"w-100 mx-2 overflow-x-hidden\">\n          <div v-if=\"leftSidebarView === 1\">\n            <div class=\"mx-3 my-2 l-flex-between border-b\">\n              <span>Fields <v-btn href=\"https://help.fleetwire.io/en/article/esign-fields-q9oeuf/\" size=\"small\" target=\"_blank\" variant=\"text\"><v-icon size=\"x-small\">mdi-help-circle-outline</v-icon></v-btn></span>\n            </div>\n            <div class=\"mb-5\">\n              <v-select\n                v-model=\"currentSigner\"\n                :items=\"signerItems\"\n                density=\"compact\"\n                item-title=\"title\"\n                item-value=\"value\"\n                label=\"Signer\"\n                variant=\"outlined\"\n              >\n                <template v-slot:selection=\"{ item }\">\n                  <v-icon :color=\"item.raw.color\" class=\"mr-1\" size=\"small\">mdi-account-circle</v-icon>\n                  <span>{{ item.title }}</span>\n                </template>\n                <template v-slot:item=\"{ props, item }\">\n                  <v-list-item :subtitle=\"item.raw.title\" v-bind=\"props\">\n                    <template v-slot:prepend>\n                      <v-icon :color=\"item.raw.color\" icon=\"mdi-account-circle\" size=\"small\"></v-icon>\n                    </template>\n\n                  </v-list-item>\n                </template>\n              </v-select>\n              <div v-for=\"(category, key) in categorizedTools\" :key=\"key\">\n                <span class=\"block my-2 underline\">{{ key }}</span>\n                <v-btn v-for=\"(tool, toolKey) in category\" :key=\"toolKey\" v-tippy :content=\"tool.name\" block class=\"mb-2 justify-left\" size=\"small\" variant=\"outlined\" @click=\"$emit('addField', tool.id)\">\n                  <v-icon v-if=\"tool.icon\" class=\"mr-2\" size=\"small\">{{ tool.icon }}</v-icon>\n                  {{ truncateFieldName(tool.name) }}\n                </v-btn>\n              </div>\n\n              <div v-if=\"!categorizedTools['Custom Fields']\">\n                <span class=\"block my-2 underline\">Custom Fields</span>\n                <small>Want to create a custom field?\n                  <router-link :to=\"{name: 'settings.custom_fields'}\">Configure Fields</router-link>\n                </small>\n              </div>\n            </div>\n          </div>\n          <div v-if=\"leftSidebarView === 2\">\n            <div class=\"l-flex-between border-b mx-3 my-2\">\n              <span>Settings</span>\n            </div>\n            <div class=\"mb-5\">\n              <v-btn v-tippy :disabled=\"templateStageData.length <= 0\" block class=\"mb-2\" content=\"Remove all fields on template (reset)\" variant=\"outlined\" @click=\"$emit('clear-all-fields')\">\n                <v-icon class=\"mr-2\" size=\"small\">mdi-delete</v-icon>\n                All Fields\n              </v-btn>\n              <div class=\"mt-5 muted\">\n                <span>Field Count:</span> {{ templateStageData.length }}\n              </div>\n              <div>\n\n                <v-expansion-panels class=\"mb-6\">\n                  <v-expansion-panel>\n                    <v-expansion-panel-title>\n                      Place holders.\n                    </v-expansion-panel-title>\n                    <v-expansion-panel-text>\n                      <div v-for=\"(pageFields, index) in templateStageDataGroupedByPage\" :key=\"index\" class=\"border my-1\">\n                        <div class=\"text-h6\">Page: {{ index }}</div>\n                        <div v-for=\"field in pageFields\" :key=\"field?.id\" :class=\"pageFieldsOverviewClassObject(field)\" class=\"border rounded m-1 px-1 small relative cursor-pointer\" @click=\"scrollToField(field)\">\n                          <div class=\"small font-bold \">{{ field.text }}</div>\n                          {{ field?.id }} <br>\n                          x:{{ field.x }} <br>\n                          y:{{ field.y }}\n                          <div class=\"absolute right-0 top-1/2\">\n                            <v-btn size=\"x-small\" variant=\"text\" @click.stop=\"removeField(field)\">\n                              <v-icon size=\"x-small\">mdi-delete</v-icon>\n                            </v-btn>\n                          </div>\n                        </div>\n                      </div>\n                    </v-expansion-panel-text>\n                  </v-expansion-panel>\n                </v-expansion-panels>\n              </div>\n            </div>\n          </div>\n        </div>\n      </div>\n    </div>\n  </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport {computed, ref} from 'vue';\nimport {useCompany} from '@/composables/useCompany';\nimport {useTemplate} from '@/composables/useTemplate';\nimport {ESignerFieldData, ESignTool} from '@/types';\nimport {truncate} from '@/utils/text';\n\nconst {company} = useCompany();\nconst {\n  currentSigner,\n  allTools,\n  selectedFieldV2,\n  signerItems,\n  templateStageData,\n  templateStageDataGroupedByPage,\n  removeField,\n  scrollToField,\n} = useTemplate();\n\nconst showFieldSearch = ref(false);\nconst leftSidebarView = ref(1);\nconst searchTool = ref('');\n\nconst currentSignerTools = computed(() => {\n  const tools = allTools.value.filter((t: ESignTool) => !t.disabled);\n\n  if (currentSigner.value === 'primary') {\n    return tools.filter((t) => t.primary || !t.secondary);\n  }\n  return tools.filter((t) => t.secondary || !t.primary);\n});\n\nconst filteredTools = computed(() => {\n  let tools = currentSignerTools.value;\n\n  const companyDefaultProperties = company.value?.default_properties || [];\n\n  const defaultProperties = companyDefaultProperties.map((dp) => {\n    const width = (dp.name.length * 9) + 10;\n    const signer = currentSigner.value === 'primary' ? 'primary' : 'secondary';\n    const data = {\n      id: `custom-field-${dp.uuid}`,\n      name: dp.name,\n      type: 'field',\n      category: 'Custom Fields',\n      icon: 'mdi-focus-field-horizontal',\n      customField: true,\n      w: width,\n      h: 20,\n    };\n    data[`${signer}_customer`] = true;\n    return data;\n  });\n\n  tools = tools.filter((t) => t.name.toLowerCase().includes(searchTool.value.toLowerCase()));\n\n  tools = tools.concat(defaultProperties);\n  return tools;\n});\n\n\nconst categorizedTools = computed(() => {\n  return filteredTools.value.reduce((acc, tool) => {\n    const category = tool.category || 'Uncategorized';\n    if (!acc[category]) {\n      acc[category] = [];\n    }\n    acc[category].push(tool);\n    return acc;\n  }, {});\n})\n\nconst truncateFieldName = (name: string) => {\n  return truncate(name, 25);\n};\n\nconst pageFieldsOverviewClassObject = (field: ESignerFieldData) => {\n  const hasError = field.x < 0 || field.y < 0 || field.w < 0 || field.h < 0;\n  return {\n    'bg-yellow-100': field?.id === selectedFieldV2.value?.id,\n    'field-error': hasError,\n  };\n};\n</script>\n\n<style>\n.page-fields-overview .v-expansion-panel-text__wrap {\n  padding: 0 5px !important;\n}\n\n.site-editor .content_sidebar-left {\n  background: #e9e9e9;\n}\n\n.site-editor .content_sidebar-left {\n  border-right: 1px solid #ec0606;\n  position: relative;\n  width: 240px;\n}\n\n.page-fields-overview .field-error {\n  border: 1px solid #ec0606 !important;\n}\n\n.content_sidebar-left {\n  border-right: 1px solid transparent;\n  max-width: 375px;\n  min-width: 220px;\n  overflow: visible;\n  position: relative;\n}\n\n.content_sidebar-left {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n  -ms-flex-direction: column;\n  flex-direction: column;\n}\n</style>\n","<template>\n  <div id=\"site_toolbar\">\n    <div class=\"toolbar_left recipient-selector\"></div>\n    <div class=\"toolbar_main text-h6\">Fleetwire eSign Editor</div>\n    <div class=\"toolbar_right\">\n      <div class=\"mr-4\">\n        <v-btn\n          v-if=\"company.uuid\"\n          :to=\"sampleRoute\"\n          class=\"mr-1\"\n          size=\"small\"\n          target=\"_blank\"\n        >\n          <v-icon class=\"mr-2\" size=\"small\">mdi-file-document-outline</v-icon>\n          View Sample\n        </v-btn>\n      </div>\n      <div class=\"mr-4\">\n        <v-btn :to=\"backRoute\" class=\"mr-1\" size=\"small\">\n          <v-icon class=\"mr-2\" size=\"small\">mdi-arrow-left</v-icon>\n          Back\n        </v-btn>\n      </div>\n      <div>\n        <v-btn :loading=\"isSaving\" color=\"primary\" size=\"small\" @click=\"handleSave\">\n          <v-icon class=\"mr-2\" size=\"small\">mdi-content-save-outline</v-icon>\n          Save\n        </v-btn>\n      </div>\n    </div>\n  </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport {computed, onMounted, ref} from 'vue';\nimport {useCompany} from '@/composables/useCompany';\nimport {store} from '@/store';\nimport {useRoute} from 'vue-router';\n\nconst route = useRoute();\n\nconst emit = defineEmits(['toolbarHeight']);\n\nconst {company} = useCompany();\n\nconst toolbarHeight = ref(0);\n\nconst documentLoading = computed(() => store.getters['document/loading']);\nconst isSaving = computed(() => documentLoading.value.saving);\n\n// Route objects\nconst sampleRoute = computed(() => ({\n  name: 'esign.recipient.v2.sample',\n  params: {\n    envelope_id: route.params.uuid,\n    recipient_id: company.value.uuid,\n  },\n}));\nconst backRoute = computed(() => ({name: 'documents.index'}));\n\nconst handleSave = () => {\n  emit('saveTemplate');\n};\n\nonMounted(() => {\n  const toolbar = document.getElementById('site_toolbar');\n  toolbarHeight.value = toolbar.offsetHeight;\n  emit('toolbarHeight', toolbarHeight.value);\n});\n</script>\n\n<style>\n.site-editor #site_toolbar {\n  border-bottom: 1px solid #ccc;\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-orient: horizontal;\n  -webkit-box-direction: normal;\n  -ms-flex-direction: row;\n  flex-direction: row;\n  min-height: 41px;\n  width: 100%;\n  -webkit-box-flex: 0;\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n}\n\n#site_toolbar .toolbar_main {\n  -webkit-box-flex: 1;\n  -ms-flex: 1 1 0;\n  flex: 1 1 0;\n  -webkit-box-pack: center;\n  -ms-flex-pack: center;\n  justify-content: center;\n  padding: 0 12px;\n}\n\n</style>\n","<template>\n  <g class=\"drag-handles\" v-if=\"handlesOn\" :transform=\"`matrix(1,0,0,1, ${element.x + 20}, ${element.y + 20})`\">\n    <rect stroke=\"#2463d1\" fill=\"transparent\" style=\"pointer-events: none;\" opacity=\"0\" rx=\"2\" ry=\"2\" x=\"-1\" y=\"-1\" :width=\"element.w + 20\" :height=\"element.h + 20\" stroke-width=\"0.7621247113163973\"></rect>\n    <circle stroke=\"#2463d1\" fill=\"white\" style=\"cursor: nwse-resize;\" opacity=\"1\" cx=\"0\" cy=\"0\" r=\"2.6674364896073905\" stroke-width=\"1.5242494226327945\"></circle>\n    <circle stroke=\"#2463d1\" fill=\"white\" style=\"cursor: nesw-resize;\" opacity=\"1\" :cx=\"element.w\" cy=\"0\" r=\"2.6674364896073905\" stroke-width=\"1.5242494226327945\"></circle>\n    <circle id=\"fw-signing-element-rect-se\" selectable stroke=\"#2463d1\" fill=\"white\" style=\"cursor: nwse-resize;\" opacity=\"1\" :cx=\"element.w\" :cy=\"element.h\" r=\"2.6674364896073905\" stroke-width=\"1.5242494226327945\"></circle>\n    <circle stroke=\"#2463d1\" fill=\"white\" style=\"cursor: nesw-resize;\" opacity=\"1\" cx=\"0\" :cy=\"element.h\" r=\"2.6674364896073905\" stroke-width=\"1.5242494226327945\"></circle>\n    <circle style=\"pointer-events: none;cursor: ew-resize;\" stroke=\"#2463d1\" fill=\"white\" opacity=\"0\" cx=\"0\" cy=\"0\" r=\"2.6674364896073905\" stroke-width=\"1.5242494226327945\"></circle>\n    <circle style=\"pointer-events: none;cursor: ew-resize;\" stroke=\"#2463d1\" fill=\"white\" opacity=\"0\" cx=\"0\" cy=\"0\" r=\"2.6674364896073905\" stroke-width=\"1.5242494226327945\"></circle>\n  </g>\n</template>\n\n<script lang=\"ts\">\n\nexport default {\n  name: 'FieldDragHandles',\n\n  props: {\n    handlesOn: {\n      type: Boolean,\n      default: false,\n    },\n    element: {\n      type: Object,\n    },\n  },\n};\n</script>\n","import dayjs from 'dayjs';\nimport isBetween from 'dayjs/plugin/isBetween';\ndayjs.extend(isBetween);\n\nexport const copyTextToClipboard = async (textToCopy: string) => {\n  // Navigator clipboard api needs a secure context (https)\n  if (navigator.clipboard && window.isSecureContext) {\n    try {\n      await navigator.clipboard.writeText(textToCopy);\n      console.log('Text copied to clipboard using navigator.clipboard');\n    } catch (error) {\n      console.error('Failed to copy text using navigator.clipboard:', error);\n    }\n  } else {\n    const isModalActive = () => {\n      const modals = document.querySelectorAll('.v-overlay.v-overlay--active.v-dialog');\n      for (const modal of modals) {\n        if (modal.style.display !== 'none') {\n          return modal;\n        }\n      }\n      return false;\n    };\n\n    // Check if a modal is active\n    const modal = isModalActive();\n\n    const textArea = document.createElement(\"textarea\");\n\n    // Use the 'out of viewport hidden text area' trick\n    textArea.value = textToCopy;\n\n    // Move textarea out of the viewport, so it's not visible\n    textArea.style.position = 'absolute';\n    textArea.style.left = '-9999px';\n    textArea.style.top = '0';\n    textArea.style.opacity = '0';\n    textArea.classList.add('copy-textarea');\n\n\n    if (modal) {\n      const dialog = modal.querySelector('.v-overlay__content');\n      if (dialog) {\n        dialog.appendChild(textArea);\n      } else {\n        document.body.prepend(textArea);\n      }\n    } else {\n      document.body.prepend(textArea);\n    }\n\n    textArea.focus();\n    textArea.select();\n\n    try {\n      const successful = document.execCommand('copy');\n      if (successful) {\n        console.log('Text copied to clipboard using document.execCommand');\n      } else {\n        console.error('Failed to copy text using document.execCommand');\n      }\n    } catch (error) {\n      console.error('Failed to copy text using document.execCommand:', error);\n    } finally {\n      textArea.remove();\n    }\n  }\n};\n\n\nexport const round = (value: number, decimals: number = 2) => {\n  return parseFloat( value.toFixed(decimals) );\n}\n\nexport const formatNumberWithCommas = (x) => {\n  if (x === null || isNaN(Number(x))) {\n    return '0';\n  }\n  return x.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',');\n};\n\n\nexport const titleCase = (str) => {\n  return str\n    .toLowerCase()\n    .split(' ')\n    .map(word => word.charAt(0).toUpperCase() + word.slice(1))\n    .join(' ');\n};\n\nexport const makeResizableDiv = (div) => {\n  const element = document.querySelector(div);\n  const resizers = document.querySelectorAll(`${div} .resizer`);\n  const minimum_size = 20;\n  let original_width = 0;\n  let original_height = 0;\n  let original_x = 0;\n  let original_y = 0;\n  let original_mouse_x = 0;\n  let original_mouse_y = 0;\n  for (let i = 0; i < resizers.length; i++) {\n    const currentResizer = resizers[i];\n    // eslint-disable-next-line no-loop-func\n    currentResizer.addEventListener('mousedown', (e: MouseEvent) => {\n      e.preventDefault();\n      original_width = parseFloat(getComputedStyle(element, null).getPropertyValue('width').replace('px', ''));\n      original_height = parseFloat(getComputedStyle(element, null).getPropertyValue('height').replace('px', ''));\n      original_x = element.getBoundingClientRect().left;\n      original_y = element.getBoundingClientRect().top;\n      original_mouse_x = e.pageX;\n      original_mouse_y = e.pageY;\n      window.addEventListener('mousemove', resize);\n      window.addEventListener('mouseup', stopResize);\n    });\n\n    // eslint-disable-next-line no-inner-declarations,no-loop-func\n    function resize(e) {\n      if (currentResizer.classList.contains('bottom-right')) {\n        const width = original_width + (e.pageX - original_mouse_x);\n        const height = original_height + (e.pageY - original_mouse_y);\n        if (width > minimum_size) {\n          element.style.width = `${width}px`;\n        }\n        if (height > minimum_size) {\n          element.style.height = `${height}px`;\n        }\n      } else if (currentResizer.classList.contains('bottom-left')) {\n        const height = original_height + (e.pageY - original_mouse_y);\n        const width = original_width - (e.pageX - original_mouse_x);\n        if (height > minimum_size) {\n          element.style.height = `${height}px`;\n        }\n        if (width > minimum_size) {\n          element.style.width = `${width}px`;\n          element.style.left = `${original_x + (e.pageX - original_mouse_x)}px`;\n        }\n      } else if (currentResizer.classList.contains('top-right')) {\n        const width = original_width + (e.pageX - original_mouse_x);\n        const height = original_height - (e.pageY - original_mouse_y);\n        if (width > minimum_size) {\n          element.style.width = `${width}px`;\n        }\n        if (height > minimum_size) {\n          element.style.height = `${height}px`;\n          element.style.top = `${original_y + (e.pageY - original_mouse_y)}px`;\n        }\n      } else {\n        const width = original_width - (e.pageX - original_mouse_x);\n        const height = original_height - (e.pageY - original_mouse_y);\n        if (width > minimum_size) {\n          element.style.width = `${width}px`;\n          element.style.left = `${original_x + (e.pageX - original_mouse_x)}px`;\n        }\n        if (height > minimum_size) {\n          element.style.height = `${height}px`;\n          element.style.top = `${original_y + (e.pageY - original_mouse_y)}px`;\n        }\n      }\n    }\n\n    // eslint-disable-next-line no-inner-declarations\n    function stopResize() {\n      window.removeEventListener('mousemove', resize);\n    }\n  }\n};\n\n\nexport const adjustDurationForDaylightSavings = (dates) => {\n  const getFirstSunday = (month, year) => {\n    let date = dayjs(`${year}-${month + 1}-01`);\n    while (date.day() !== 0) {\n      date = date.add(1, 'day');\n    }\n    return date;\n  };\n\n  const dstStart = getFirstSunday(2, dayjs(dates.start).year()); // March\n  const dstEnd = getFirstSunday(10, dayjs(dates.end).year()); // November\n\n  if (dayjs(dates.start).isBefore(dstStart) && dayjs(dates.end).isAfter(dstStart)) {\n    return 1;\n  }\n  if (dayjs(dates.start).isBefore(dstEnd) && dayjs(dates.end).isAfter(dstEnd)) {\n    return -1;\n  }\n\n  return 0;\n};\n\nexport const dragElement = (element: HTMLElement) => {\n  let pos1 = 0;\n  let pos2 = 0;\n  let pos3 = 0;\n  let pos4 = 0;\n  if (document.getElementById(`${element.id}header`)) {\n    // if present, the header is where you move the DIV from:\n    document.getElementById(`${element.id}header`).onmousedown = dragMouseDown;\n  } else {\n    // otherwise, move the DIV from anywhere inside the DIV:\n    element.onmousedown = dragMouseDown;\n  }\n\n  function dragMouseDown(e) {\n    e = e || window.event;\n    e.preventDefault();\n    // get the mouse cursor position at startup:\n    pos3 = e.clientX;\n    pos4 = e.clientY;\n    document.onmouseup = closeDragElement;\n    // call a function whenever the cursor moves:\n    document.onmousemove = elementDrag;\n  }\n\n  function elementDrag(e) {\n    e = e || window.event;\n    e.preventDefault();\n    // calculate the new cursor position:\n    pos1 = pos3 - e.clientX;\n    pos2 = pos4 - e.clientY;\n    pos3 = e.clientX;\n    pos4 = e.clientY;\n    // set the element's new position:\n    element.style.top = `${element.offsetTop - pos2}px`;\n    element.style.left = `${element.offsetLeft - pos1}px`;\n  }\n\n  function closeDragElement() {\n    // stop moving when mouse button is released:\n    document.onmouseup = null;\n    document.onmousemove = null;\n  }\n};\n","import {computed} from 'vue';\nimport {useStore} from 'vuex';\nimport {EnvelopeAttachmentInterface, EnvelopeInterface, RemoveAttachmentPayload} from '@/store/modules/envelope';\n\n\nexport function useESign() {\n    const store = useStore();\n\n    const template = computed(() => store.getters['template/template']);\n\n    const envelope = computed<EnvelopeInterface>(() => store.getters['envelope/envelope']);\n\n    const envelopeAttachments = computed<EnvelopeAttachmentInterface[]>(() => envelope.value?.attachments);\n\n\n    function getTemplate(uuid: string) {\n        store.dispatch('template/getTemplate', uuid);\n    }\n\n    function updateTemplate(data: { actions: any, template: object }) {\n        return store.dispatch('document/updateTemplate', data);\n    }\n\n    const removeAttachment = async (data: RemoveAttachmentPayload) => {\n        return await store.dispatch('envelope/removeAttachment', data);\n    }\n\n    return {\n        template,\n        envelope,\n        envelopeAttachments,\n        removeAttachment,\n        updateTemplate,\n        getTemplate,\n    }\n}","<template>\n  <div class=\"site site-fit site-full site-editor\">\n    <div :class=\"{'esign-right-bar-enabled': rightSidebarOpen}\" class=\"site_wrap\">\n      <!-- Toolbar -->\n      <TopToolbar\n        @saveTemplate=\"saveTemplate\"\n        @toolbarHeight=\"coordinateData.topBarHeight = $event\"\n      />\n\n      <!-- Content -->\n      <div class=\"site_content\">\n        <div class=\"content_wrap\" style=\"position: relative\">\n          <!-- Left sidebar-->\n          <LeftSidebar @addField=\"addField($event)\" @clear-all-fields=\"removeAllFieldsDialog = true\"/>\n\n          <!-- Main Content -->\n          <div id=\"esign-editor-main-content\" ref=\"content_main\" class=\"content_main flex overflow-scroll\" @mousemove=\"checkDroppable($event)\" @scroll=\"handleScroll\">\n            <div id=\"standard-documents\" class=\"standardDocuments\" style=\"flex-grow: 1;\">\n              <svg id=\"signer-document\" :height=\"contentMainHeight\" :viewbox=\"`0 0 ${contentMainWidth} ${contentMainHeight}`\" :width=\"contentMainWidth\" focusable=\"false\" @click=\"svgClicked\">\n                <g ref=\"DocumentsView\" data-view-id=\"doc-image-container\" data-view-name=\"DocumentsView\" transform=\"matrix(1,0,0,1, 0, 0)\">\n                  <g id=\"DocumentView\" :transform=\"`matrix(1,0,0,1, ${LeftAndRightDocumentMargin}, ${LeftAndRightDocumentMargin})`\" data-view-id=\"c241\" data-view-name=\"DocumentView\" @load=\"onDocViewLoad\">\n                    <!-- Page Views -->\n                    <g v-for=\"(pdf, key) in localDocumentImages\" :id=\"`pdf-${key}`\" :key=\"`pdf-${key}`\" :transform=\"`matrix(1,0,0,1, 0, ${pdf.position})`\" data-view-name=\"PageView\">\n                      <rect :height=\"docImage.height\" :width=\"pageViewRectangle\" fill=\"transparent\" stroke=\"0\" stroke-width=\"1.4\" x=\"-1\" y=\"-1\"/>\n                      <image :id=\"`document-image-${key}`\" :height=\"docImage.height\" :width=\"docImage.width\" :xlink:href=\"pdf.path\" @load=\"onImgLoad\"/>\n                      <text :y=\"docImage.height + 10\" class=\"font-sans\" fill=\"#666666\" font-size=\"8\">\n                        {{ documentFileName }}\n                      </text>\n                      <text :x=\"docImage.width - 20\" :y=\"docImage.height + 10\" class=\"font-sans\" fill=\"#666666\" font-size=\"8\">\n                        {{ key + 1 }} of {{ localDocumentImages.length }}\n                      </text>\n                    </g>\n\n                    <!-- Data Fields -->\n                    <g v-for=\"(data, dataKey) in templateStageData\" :id=\"data.id\" :key=\"`fw-signing-element-${data.id}`\" v-tippy :content=\"tippyContent(data)\" :status=\"data.status\" :transform=\"`matrix(1,0,0,1, ${data.x}, ${data.y})`\" class=\"fw-signing-element\" draggable=\"true\" opacity=\"1\" selectable @click=\"checkCoords\" @mousedown=\"selectElement($event, data)\">\n                      <!-- Signature -->\n                      <svg v-if=\"data.type === 'signature'\" :height=\"data.h\" :width=\"data.w\" fill=\"none\" viewBox=\"0 0 180 180\" xmlns=\"http://www.w3.org/2000/svg\">\n                        <path d=\"M125.303 89.4645C124.908 89.4656 124.517 89.387 124.155 89.2338C123.458 88.9413 122.91 88.3942 122.631 87.7127C122.353 87.0311 122.366 86.2709 122.669 85.599L135.361 57.494L131.175 55.2815C130.838 55.1103 130.54 54.8763 130.298 54.5932C130.057 54.3101 129.876 53.9835 129.766 53.6324C129.656 53.2813 129.62 52.9127 129.66 52.548C129.7 52.1834 129.814 51.8299 129.997 51.5083C130.18 51.1867 130.427 50.9032 130.724 50.6745C131.022 50.4458 131.363 50.2763 131.729 50.176C132.096 50.0756 132.479 50.0464 132.857 50.0899C133.234 50.1335 133.6 50.2491 133.931 50.4298L140.417 53.8497C141.046 54.1807 141.523 54.7264 141.756 55.3795C141.988 56.0325 141.958 56.7457 141.672 57.3786L127.938 87.8051C127.715 88.299 127.346 88.7191 126.878 89.0139C126.41 89.3087 125.863 89.4653 125.303 89.4645V89.4645Z\" fill=\"#FEDD55\"/>\n                        <path d=\"M90.2271 121.909L87.5039 137.966L66.5716 152.347L60.8956 156.234L61.5846 149.581L64.1438 124.912L77.2511 114.655L90.2271 121.909Z\" fill=\"#FEDD55\"/>\n                        <path d=\"M83.6911 103.853L96.6707 111.11L90.151 121.933L77.1714 114.676L83.6911 103.853Z\" fill=\"#D8D9FB\"/>\n                        <path d=\"M100.442 114.894L78.3384 102.55L122.398 39.2536C123.476 37.7048 125.126 36.6092 127.012 36.189C128.898 35.7687 130.879 36.0553 132.554 36.9905C134.229 37.9258 135.472 39.4398 136.03 41.2253C136.589 43.0108 136.422 44.9342 135.563 46.6054L100.442 114.894Z\" fill=\"#F2F2FC\"/>\n                        <path d=\"M77.9728 133.367L66.5716 152.347L60.8956 156.234L61.5846 149.581L73.0187 130.585C73.2045 130.265 73.4547 129.983 73.7547 129.757C74.0547 129.531 74.3984 129.365 74.7659 129.268C75.1334 129.171 75.5172 129.146 75.8949 129.194C76.2726 129.241 76.6366 129.361 76.9658 129.546C77.2949 129.731 77.5825 129.977 77.8118 130.27C78.0411 130.563 78.2075 130.897 78.3012 131.253C78.395 131.609 78.4142 131.979 78.3579 132.342C78.3015 132.705 78.1706 133.053 77.9728 133.367V133.367Z\" fill=\"#FD9F29\"/>\n                        <path d=\"M139.186 158.531H12.8708C12.1094 158.531 11.3792 158.24 10.8408 157.721C10.3025 157.203 10 156.499 10 155.766C10 155.032 10.3025 154.329 10.8408 153.81C11.3792 153.291 12.1094 153 12.8708 153H139.186C139.948 153 140.678 153.291 141.216 153.81C141.755 154.329 142.057 155.032 142.057 155.766C142.057 156.499 141.755 157.203 141.216 157.721C140.678 158.24 139.948 158.531 139.186 158.531V158.531Z\" fill=\"#454D74\"/>\n                        <path d=\"M11.544 64.864C14.072 66.592 16.504 67.456 18.84 67.456C21.208 67.456 23.048 66.912 24.36 65.824C25.704 64.736 26.376 63.232 26.376 61.312C26.376 59.744 25.896 58.512 24.936 57.616C23.912 56.624 22.312 55.632 20.136 54.64C19.496 54.32 19.048 54.096 18.792 53.968C16.616 52.944 14.92 51.76 13.704 50.416C12.52 49.072 11.928 47.168 11.928 44.704C11.928 42.24 12.84 40.224 14.664 38.656C16.52 37.088 18.744 36.304 21.336 36.304C23.928 36.304 26.296 36.768 28.44 37.696L27.72 40.336C25.8 39.696 23.928 39.376 22.104 39.376C20.28 39.376 18.744 39.856 17.496 40.816C16.248 41.744 15.624 42.976 15.624 44.512C15.624 46.048 16.056 47.28 16.92 48.208C17.912 49.232 19.672 50.32 22.2 51.472C24.504 52.56 26.072 53.472 26.904 54.208C28.056 55.264 28.776 56.112 29.064 56.752C29.672 58.288 29.976 59.744 29.976 61.12C29.976 64.032 28.968 66.336 26.952 68.032C24.968 69.728 22.408 70.576 19.272 70.576C16.168 70.576 13.336 69.52 10.776 67.408L11.544 64.864ZM40.4145 70.384C38.9425 70.384 37.9185 70.032 37.3425 69.328C36.7665 68.624 36.4785 67.472 36.4785 65.872V47.44H39.9345V63.904C39.9345 65.6 40.0625 66.704 40.3185 67.216C40.5745 67.696 41.3105 67.936 42.5265 67.936L42.6225 70.048C41.8865 70.272 41.1505 70.384 40.4145 70.384ZM36.1425 39.904C36.1425 38.4 36.8785 37.648 38.3505 37.648C39.6945 37.648 40.3665 38.384 40.3665 39.856C40.3665 41.296 39.6625 42.016 38.2545 42.016C36.8465 42.016 36.1425 41.312 36.1425 39.904ZM62.5748 68.56C62.5748 67.056 62.6868 65.632 62.9108 64.288H62.6228C61.4068 68.48 59.0068 70.576 55.4228 70.576C52.7028 70.576 50.6868 69.6 49.3748 67.648C48.0628 65.664 47.4068 62.928 47.4068 59.44C47.4068 55.952 48.3028 52.992 50.0948 50.56C51.9188 48.096 54.5908 46.864 58.1108 46.864C59.4228 46.864 60.7188 47.008 61.9988 47.296C63.3108 47.552 64.5908 47.952 65.8388 48.496L65.8868 68.56C65.8868 72.624 65.1348 75.792 63.6308 78.064C62.1588 80.368 59.6628 81.52 56.1428 81.52C54.8628 81.52 53.5508 81.28 52.2068 80.8C50.8628 80.352 49.7908 79.712 48.9908 78.88L49.5188 77.008C51.3748 78.224 53.5348 78.832 55.9988 78.832C58.4948 78.832 60.2068 77.952 61.1348 76.192C62.0948 74.464 62.5748 71.92 62.5748 68.56ZM55.7588 67.936C60.3348 67.936 62.6228 62.048 62.6228 50.272C61.5988 49.696 60.0948 49.408 58.1108 49.408C53.3748 49.408 51.0068 52.976 51.0068 60.112C51.0068 62.32 51.3748 64.176 52.1108 65.68C52.8468 67.184 54.0628 67.936 55.7588 67.936ZM77.9468 48.4C77.9468 50.096 77.8188 51.52 77.5628 52.672H77.8508C78.2988 50.88 79.1628 49.472 80.4428 48.448C81.7548 47.392 83.3388 46.864 85.1948 46.864C87.7228 46.864 89.4668 47.504 90.4268 48.784C91.3868 50.032 91.8668 51.92 91.8668 54.448C91.8668 54.544 91.8348 56.176 91.7708 59.344C91.7388 62.512 91.7228 64.528 91.7228 65.392C91.7228 66.256 91.8188 66.896 92.0108 67.312C92.2348 67.728 92.9228 67.936 94.0748 67.936L94.1708 70.096C93.7228 70.288 93.0668 70.384 92.2028 70.384C90.6668 70.384 89.6108 70.032 89.0348 69.328C88.4908 68.624 88.2188 67.504 88.2188 65.968C88.2188 65.904 88.2508 64.176 88.3148 60.784C88.3788 57.392 88.4108 55.632 88.4108 55.504C88.4108 53.648 88.1708 52.208 87.6908 51.184C87.2108 50.128 86.2508 49.6 84.8108 49.6C83.4028 49.6 82.2188 50.048 81.2588 50.944C80.3308 51.84 79.6268 53.008 79.1468 54.448C78.2828 57.232 77.8508 60.192 77.8508 63.328V70H74.5388V47.44L77.9468 47.008V48.4Z\" fill=\"black\"/>\n                      </svg>\n\n                      <!-- Attachment -->\n                      <svg v-if=\"data.type === 'attachment'\" :height=\"data.h\" :width=\"data.w\" viewBox=\"-40 -110 479 480\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n                        <linearGradient id=\"a\">\n                          <stop offset=\"0\" stop-color=\"#006df0\"/>\n                          <stop offset=\"1\" stop-color=\"#00e7f0\"/>\n                        </linearGradient>\n                        <linearGradient id=\"b\" gradientUnits=\"userSpaceOnUse\" x1=\"176.5\" x2=\"176.5\" xlink:href=\"#a\" y1=\"486.856\" y2=\"-43.912\"/>\n                        <linearGradient id=\"c\" gradientUnits=\"userSpaceOnUse\" x1=\"208.5\" x2=\"208.5\" xlink:href=\"#a\" y1=\"486.856\" y2=\"-43.912\"/>\n                        <linearGradient id=\"d\" gradientUnits=\"userSpaceOnUse\" x1=\"144.5\" x2=\"144.5\" xlink:href=\"#a\" y1=\"486.856\" y2=\"-43.912\"/>\n                        <linearGradient id=\"e\" gradientUnits=\"userSpaceOnUse\" x1=\"296.5\" x2=\"296.5\" xlink:href=\"#a\" y1=\"486.856\" y2=\"-43.912\"/>\n                        <path d=\"m352.394531 135.519531c-.042969-.78125-.203125-1.546875-.480469-2.28125-.082031-.273437-.183593-.539062-.300781-.796875-.421875-.902344-1.007812-1.71875-1.730469-2.402344l-88-80c-.675781-.59375-1.445312-1.070312-2.277343-1.40625-.242188-.105468-.488281-.152343-.738281-.234374-.621094-.195313-1.261719-.3125-1.910157-.351563-.152343-.023437-.304687-.039063-.457031-.046875h-112v-8c-.027344-22.082031-17.917969-39.9726562-40-40h-16c-22.082031.0273438-39.972656 17.917969-40 40v8h-8c-22.082031.027344-39.972656 17.917969-40 40v352c.027344 22.082031 17.917969 39.972656 40 40h272c22.082031-.027344 39.972656-17.917969 40-40v-304c0-.167969-.089844-.3125-.105469-.480469zm-87.894531-61.429687 59.304688 53.910156h-51.304688c-4.417969 0-8-3.582031-8-8zm-200-34.089844c0-13.253906 10.746094-24 24-24h16c13.253906 0 24 10.746094 24 24v96c0 13.253906-10.746094 24-24 24h-16c-13.253906 0-24-10.746094-24-24v-40h8v40c0 8.835938 7.164062 16 16 16h16c8.835938 0 16-7.164062 16-16v-96c0-8.835938-7.164062-16-16-16h-16c-8.835938 0-16 7.164062-16 16v8h-8zm40 8h-16v-8h16zm208 416h-272c-13.253906 0-24-10.746094-24-24v-352c0-13.253906 10.746094-24 24-24h64v72h-16v-48c0-4.417969-3.582031-8-8-8h-24c-4.417969 0-8 3.582031-8 8v48c.027344 22.082031 17.917969 39.972656 40 40h16c22.082031-.027344 39.972656-17.917969 40-40v-72h104v56c0 13.253906 10.746094 24 24 24h64v296c0 13.253906-10.746094 24-24 24zm0 0\" fill=\"url(#b)\"/>\n                        <path d=\"m120.5 224h176c4.417969 0 8-3.582031 8-8s-3.582031-8-8-8h-176c-4.417969 0-8 3.582031-8 8s3.582031 8 8 8zm0 0\" fill=\"url(#c)\"/>\n                        <g fill=\"url(#b)\">\n                          <path d=\"m56.5 272h240c4.417969 0 8-3.582031 8-8s-3.582031-8-8-8h-240c-4.417969 0-8 3.582031-8 8s3.582031 8 8 8zm0 0\"/>\n                          <path d=\"m56.5 320h240c4.417969 0 8-3.582031 8-8s-3.582031-8-8-8h-240c-4.417969 0-8 3.582031-8 8s3.582031 8 8 8zm0 0\"/>\n                          <path d=\"m56.5 368h240c4.417969 0 8-3.582031 8-8s-3.582031-8-8-8h-240c-4.417969 0-8 3.582031-8 8s3.582031 8 8 8zm0 0\"/>\n                        </g>\n                        <path d=\"m232.5 400h-176c-4.417969 0-8 3.582031-8 8s3.582031 8 8 8h176c4.417969 0 8-3.582031 8-8s-3.582031-8-8-8zm0 0\" fill=\"url(#d)\"/>\n                        <path d=\"m312.5 400c-4.417969 0-8 3.582031-8 8v16c0 4.417969-3.582031 8-8 8h-16c-4.417969 0-8 3.582031-8 8s3.582031 8 8 8h16c13.253906 0 24-10.746094 24-24v-16c0-4.417969-3.582031-8-8-8zm0 0\" fill=\"url(#e)\"/>\n                      </svg>\n\n\n                      <rect :id=\"`pageIndex-1-dataIndex-${dataKey}`\" :class=\"elementClassObject(data)\" :fill=\"elementFillColor(data)\" :fill-opacity=\"['signature', 'attachment'].includes(data.type) ? 0.20 : 0.75\" :height=\"data.h\" :resizable=\"data.resizable\" :width=\"data.w\" class=\"field-rectangle\" rx=\"1.4239482200647249\" ry=\"1.4239482200647249\" selectable stroke=\"#5CAEFF\" stroke-opacity=\"1\" stroke-width=\"0.7119741100323624\" style=\"pointer-events: all; cursor: pointer;\" type=\"text\" @click=\"signerElementClicked(data)\"/>\n\n                      <!-- Checkbox -->\n                      <svg v-if=\"data.type === 'checkbox'\" :height=\"data.h\" :width=\"data.w\" style=\"width:24px;height:24px\" viewBox=\"0 0 24 24\">\n                        <path v-if=\"data.value\" d=\"M19,19H5V5H15V3H5C3.89,3 3,3.89 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V11H19M7.91,10.08L6.5,11.5L11,16L21,6L19.59,4.58L11,13.17L7.91,10.08Z\" fill=\"currentColor\"/>\n                        <path v-else d=\"M19,3H5C3.89,3 3,3.89 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V5C21,3.89 20.1,3 19,3M19,5V19H5V5H19Z\" fill=\"currentColor\"/>\n                      </svg>\n\n                      <!-- Other -->\n                      <text v-if=\"!['signature', 'attachment', 'text'].includes(data.type)\" id=\"text-1\" :font-size=\"determineDisplayFontSize(data)\" :y=\"determineYTextOffset(data)\" fill=\"#333\" font-family=\"Lucida Console, Andale Mono, monaco, monospace\" opacity=\"1\" style=\"pointer-events: none;\" x=\"1\">\n                        <tspan dy=\"9\" letter-spacing=\".05\" x=\"1\">{{ data.text }}</tspan>\n                      </text>\n\n                      <!-- Text -->\n                      <text v-if=\"data.type === 'text'\" id=\"text-2\" :font-size=\"determineDisplayFontSize(data)\" :y=\"determineYTextOffset(data)\" fill=\"#333\" font-family=\"Lucida Console, Andale Mono, monaco, monospace\" opacity=\"1\" style=\"pointer-events: none;\" x=\"1\">\n                        <tspan v-if=\"data.text.length === 0\" dy=\"9\" letter-spacing=\".05\" opacity=\".5\" x=\"1\">\n                          {{ data.toolTip ? data.toolTip : data.type }}\n                        </tspan>\n                        <tspan v-for=\"(lines, lineIndex) in determineTextLines(data)\" :key=\"lineIndex\" :dy=\"lineIndex === 0 ? 9 : 11\" letter-spacing=\".05\" x=\"1\">\n                          {{ lines }}\n                        </tspan>\n                      </text>\n                    </g>\n                  </g>\n\n                  <!-- Drag handles -->\n                  <FieldDragHandles\n                    :element=\"currentWorkingDataElement\"\n                    :handles-on=\"dragHandlesOn\"\n                  />\n\n                </g>\n              </svg>\n\n              <div ref=\"dataEditor\" style=\" width: 100px; height: 25px; position: absolute; transform: scale(1); transform-origin: left top;\">\n                <div class=\"tab-editor-interface_content\">\n                  <textarea v-model=\"editorText\" :readonly=\"currentWorkingDataElement?.readOnly\" maxlength=\"4000\" tabindex=\"-1\"></textarea>\n                </div>\n              </div>\n            </div>\n          </div>\n\n          <!-- Right Sidebar -->\n          <RightSideColumn\n            :document-file-name=\"documentFileName\"\n            :document-images=\"localDocumentImages\"\n            @scroll-to-page=\"scrollToPage\"\n          />\n\n        </div>\n      </div>\n\n      <TemplateRightSidebarV2\n        @update:esign-field-deleted=\"dragHandlesOn = false; removeSelectedItems();\"\n\n      />\n    </div>\n\n    <div v-if=\"debugDrawerOpen\" class=\"absolute top-o\">\n      {{ coordinateData }}\n    </div>\n\n    <div v-if=\"debugDrawerOpen\" class=\"absolute top-20 p-1 debug debug-draggable w-52\" style=\"background-color: #0acf97\">\n      <div class=\"flex flex-col\">\n        <small>DEBUG BUTTONS</small>\n        <v-btn class=\"mt-1\" size=\"x-small\" @click=\"adjustDataCoords()\">\n          adjustDataCoords\n        </v-btn>\n\n        <v-btn class=\"mt-1\" color=\"red\" size=\"x-small\" @click=\"toggleDebugDrawer()\">\n          TURN OFF DEBUG.\n        </v-btn>\n\n        {{ selectedFieldV3Coordinates }}\n\n        {{ docImage }} <br>\n\n        {{ contentLeftSidebarWidth }}<br>\n\n        {{ LeftAndRightDocumentMargin }} <br>\n        {{ scrollTop }} <br>\n\n      </div>\n    </div>\n\n    <div v-if=\"debugDrawerOpen\" class=\"border debug debug-draggable relative overflow-hidden\" style=\"height: 600px; width: 300px;max-width: 300px;bottom: 10px; left: 0; opacity: 90%; background-color: rgba(0,0,0,0.90)\">\n      <div>\n        <div class=\"text-white small fixed debug-draggable__header\">The First Staged Data item</div>\n        <code>\n          <pre v-html=\"formatJson(firstStagedData)\"/>\n        </code>\n      </div>\n    </div>\n\n    <v-dialog v-model=\"removeAllFieldsDialog\" width=\"400\">\n      <v-card>\n        <v-card-title>Are you sure?</v-card-title>\n\n        <v-card-text>\n          You are about to delete all the fields on this document and start over.\n        </v-card-text>\n\n        <v-card-actions>\n          <v-spacer/>\n          <v-btn\n            color=\"grey\"\n            variant=\"text\"\n            @click=\"removeAllFieldsDialog = false\"\n          >\n            Nevermind\n          </v-btn>\n          <v-btn color=\"error\" @click=\"removeAllFields()\">\n            Reset Fields\n          </v-btn>\n        </v-card-actions>\n      </v-card>\n    </v-dialog>\n\n  </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport {computed, onBeforeUnmount, onMounted, ref, ShallowRef, useTemplateRef, watch} from 'vue';\nimport TemplateRightSidebarV2 from '@/views/documentsV2/TemplateRightSidebarV2.vue';\nimport LeftSidebar from '@/components/dashboard/documents/LeftSidebar.vue';\nimport TopToolbar from '@/components/dashboard/documents/TopToolbar.vue';\nimport RightSideColumn from '@/components/dashboard/documents/RightSideColumn.vue';\nimport FieldDragHandles from '@/components/dashboard/documents/FieldDragHandles.vue';\nimport {dragElement, round} from '@/helpers';\nimport {ESignerFieldData, ESignTool} from '@/types';\nimport {useCompany} from '@/composables/useCompany';\nimport {useESign} from '@/composables/useESign';\nimport {useAppSettings} from '@/composables/useAppSettings';\nimport {useTemplate} from '@/composables/useTemplate';\nimport {useRoute} from 'vue-router';\nimport {push} from 'notivue'\n\nexport interface documentImagesInterface {\n  position: number;\n  path: string;\n}\n\nconst route = useRoute();\nconst {company} = useCompany();\nconst {getTemplate, updateTemplate} = useESign();\nconst {toggleDebugDrawer, debugDrawerOpen} = useAppSettings();\nconst {\n  documentsLoading,\n  selectedFieldV2,\n  allTools,\n  template,\n  selectedFieldV3Coordinates,\n  updateSelectedField,\n  templateStageData,\n  updateStageData,\n  templateDocumentImages,\n  documentImages,\n  setDocumentImages,\n  addToStageData,\n  makeFieldId,\n  removeAllStageData,\n  setSingleTemplate,\n  setToolsActive,\n  currentSigner,\n  documentFileName,\n} = useTemplate();\n\n\nconst content_main = useTemplateRef('content_main') as ShallowRef<HTMLElement>;\nconst dataEditor = useTemplateRef('dataEditor') as ShallowRef<HTMLElement>;\n\nconst documentUuid = route.params.uuid as string;\nconst standardDoc = ref(null);\nconst standardDocCoords = ref(null);\nconst pageMarginY = 32;\nconst contentMainWidth = ref(612);\nconst contentMainHeight = ref(825);\nconst contentLeftSidebarWidth = ref(300);\nconst mainContentStartingXPosition = ref(260);\nconst scrollTop = ref(0);\nconst originalContentMainWidth = ref(612);\nconst originalContentMainHeight = ref(792);\nconst localDocumentImages = ref<documentImagesInterface[]>([]);\nconst currentWorkingDataElement = ref(null);\nconst elementOffsetX = ref(0);\nconst elementOffsetY = ref(0);\nconst dragHandlesOn = ref(false);\n\n\nconst coordinateData = ref({\n  x: 0,\n  y: 0,\n  page: 1,\n  pageId: null,\n  item_x: 0,\n  item_y: 0,\n  item_height: 0,\n  topBarHeight: 42,\n})\n\nconst removeAllFieldsDialog = ref(false);\nconst editorText = ref('');\nconst searchTool = ref('');\nconst currentWorkingFieldId = ref(null);\nconst currentWorkingTarget = ref('');\n\nconst handleScroll = (event: MouseEvent) => {\n  const target = event.target as HTMLElement;\n  scrollTop.value = target.scrollTop;\n};\n\n\nconst getCanvasOffset = computed(() => {\n  if (!standardDocCoords.value) {\n    return {\n      top: 0, left: 0, right: 0, bottom: 0, height: 0\n    };\n  }\n\n\n  const top = standardDocCoords.value.top - scrollTop.value + 20;\n  const left = standardDocCoords.value.left + window.scrollX;\n  const right = standardDocCoords.value.right;\n  const bottom = standardDocCoords.value.bottom;\n  const height = standardDocCoords.value.height;\n  const page = 0;\n  return {\n    page: Number(page),\n    top: Number(top.toFixed(3)),\n    left: Number(left.toFixed(3)),\n    right: Number(right.toFixed(3)),\n    bottom: Number(bottom.toFixed(3)),\n    height: Number(height.toFixed(3)),\n  };\n});\n\nconst determineRelativeY = (topPosition: number): number => {\n  const pos = topPosition - getCanvasOffset.value.top;\n\n  if (pos <= docImage.value.height) return round(pos, 5);\n  const totalPages = templateDocumentImages.value.length;\n\n  let relTopPos = 0;\n  for (let i = 1; i <= totalPages; i++) {\n    const relPosition = (docImage.value.height * i);\n    const pageYGap = pageHeightAdjust(i);\n    if (pos >= relPosition - docImage.value.height && pos <= relPosition) {\n      relTopPos = pos - (docImage.value.height * (i - 1)) - pageYGap;\n    }\n  }\n  return round(relTopPos, 5);\n};\n\n\nconst rightSidebarOpen = computed(() => {\n  return selectedFieldV2.value?.id;\n});\n\nconst LeftAndRightDocumentMargin = computed((): number => {\n  return (contentMainWidth.value - pageViewRectangle.value) / 2; // usually 20px\n});\n\nconst widthChange = computed((): number => {\n  return (pageViewRectangle.value - originalContentMainWidth.value) / originalContentMainWidth.value;\n});\n\nconst documentStartingXPosition = computed((): number => {\n  return LeftAndRightDocumentMargin.value + mainContentStartingXPosition.value; // usually 260px\n});\n\nconst objectRatioHeightRev = (scaled: number): number => {\n  const newHeight = docImage.value.height;\n  const savedHeight = originalContentMainHeight.value;\n  const tempScale = scaled / newHeight;\n  return round(tempScale * savedHeight, 5);\n};\n\nconst objectRatioWidthRev = (scaled: number): number => {\n  const newWidth = docImage.value.width;\n  const savedWidth = originalContentMainWidth.value;\n  const tempScale = scaled / newWidth;\n  return round(tempScale * savedWidth, 5);\n};\n\nconst pageHeightAdjust = (page: number): number => {\n  return ((pageMarginY * (page - 1)) * 100000) / 100000;\n};\n\nconst handleWindowResize = () => {\n  contentMainWidth.value = content_main.value.clientWidth;\n  contentMainHeight.value = contentMainWidth.value / docImage.value.ratio * localDocumentImages.value.length;\n};\n\n\nconst getSelectedElements = () => {\n  return Array.from(document.querySelectorAll('.field-selected'));\n};\n\n\nconst removeSelectedElements = () => {\n  const selected = getSelectedElements();\n\n  selected.forEach((f) => {\n    f.setAttribute('stroke', '#CAEFF');\n    f.setAttribute('stroke-width', '1');\n    f.classList.remove('field-selected');\n  });\n\n  dragHandlesOn.value = false;\n};\n\nconst handleKeyup = (evt: KeyboardEvent) => {\n  evt.preventDefault();\n  const target = evt.target as HTMLElement;\n  const key = evt.key.toLowerCase();\n  const isInputFocused = ['input', 'textarea'].includes(target.localName);\n\n  if (isInputFocused) return;\n\n  switch (key) {\n    /** DELETE / BACKSPACE - Delete Selected Fields */\n    case 'backspace':\n    case 'delete':\n      removeSelectedItems()\n      break;\n\n    case 'c':\n      if (evt.ctrlKey || evt.metaKey) {\n        evt.preventDefault();\n        copySelectedElement();\n      }\n      break;\n\n    /** ESCAPE - Deselect Current Field */\n    case 'escape':\n      removeSelectedElements();\n      currentWorkingDataElement.value = null;\n      updateSelectedField(null);\n      break;\n  }\n\n};\n\nconst removeSelectedItems = () => {\n  const dropItems = getSelectedElements();\n  dragHandlesOn.value = false;\n\n  if (dropItems.length > 0) {\n    const elementIdsToRemove = dropItems.map((d) => d.parentElement?.id).filter(Boolean);\n\n    dropItems.forEach((d) => d.setAttribute('style', 'display:none;'));\n\n    // Filter out elements and update Vuex state using the mutation\n    templateStageData.value.forEach((data, index) => {\n      if (elementIdsToRemove.includes(data.id)) {\n        updateStageData({data: null, index}); // Set to null or handle deletion in mutation\n      }\n    });\n\n    removeSelectedElements();\n    currentWorkingDataElement.value = null;\n    updateSelectedField(null);\n\n    push.success({\n      message: 'Field removed',\n    });\n  }\n\n  dragHandlesOn.value = false;\n};\n\nconst moveSelectedElement = (key: string, evt: KeyboardEvent) => {\n  evt.preventDefault();\n  const selected = getSelectedElements();\n\n  const moveStep = evt.shiftKey ? 10 : 1; // Shift + Arrow Key moves by 10px, otherwise 1px\n\n\n  if (selected.length > 0) {\n    const elementId = selected[0].parentElement?.id;\n    const dataIndex = templateStageData.value.findIndex((d) => d.id === elementId);\n\n    if (dataIndex !== -1) {\n      const data = templateStageData.value[dataIndex];\n      let newX = data.x;\n      let newY = data.y;\n\n      switch (key) {\n        case 'arrowup':\n          newY -= moveStep;\n          break;\n        case 'arrowdown':\n          newY += moveStep;\n          break;\n        case 'arrowleft':\n          newX -= moveStep;\n          break;\n        case 'arrowright':\n          newX += moveStep;\n          break;\n      }\n\n      console.dir(`newX: ${newX}`);\n      newX = verifyElementXCoords(newX);\n      newY = verifyElementYCoords(newY);\n      updateStageData({\n        data: {...data, x: newX, y: newY}, index: dataIndex\n      });\n\n      currentWorkingDataElement.value = {...data, x: newX, y: newY};\n    }\n  }\n};\n\nconst firstStagedData = computed(() => {\n  return templateStageData.value[0];\n});\n\nconst customerDefaultProperties = computed(() => {\n  return company.value?.default_properties?.filter((f) => ['customer', 'order'].includes(f.owner_type));\n});\n\nconst filteredTools = computed((): ESignTool[] => {\n  // Filter out disabled tools\n  const tools = allTools.value.filter((t: ESignTool) => !t.disabled && t.name.toLowerCase().includes(searchTool.value.toLowerCase()));\n\n  // Map to a specific structure\n  const defaultProperties = customerDefaultProperties.value.map((dp) => ({\n    id: `custom-field-${dp.uuid}`,\n    name: dp.name,\n    type: 'field',\n    category: 'Custom Fields',\n    icon: 'mdi-focus-field-horizontal',\n    customField: true,\n    w: (dp.name.length * 9) + 10,\n    h: 20,\n  }));\n\n  return [...tools, ...defaultProperties];\n});\n\n\n/**\n * Adjusts the width of the tool based on the current image width\n * NOTE: I set the tools width based on my screen size at the time of development.\n * So, this should be adjusted to the width of the screen when the tool was placed.\n */\nconst toolWidthAdjusted = (width: number): number => {\n  const widthWhenTooling = 928;\n  const currentImageWidth = +docImage.value.width;\n  const widthDifference = currentImageWidth - widthWhenTooling;\n  const widthChange = widthDifference === 0\n    ? 0\n    : widthDifference / widthWhenTooling;\n\n  return round((width + (width * widthChange)), 5);\n};\n\n\n/**\n * Adjusts the height of the tool based on the current adjusted width\n * NOTE: I set the tools width based on my screen size at the time of development.\n * So, this should be adjusted to the width of the screen when the tool was placed.\n */\nconst toolHeightAdjusted = (width: number, height: number): number => {\n  return round(toolWidthAdjusted(width) * (height / width), 5);\n};\n\nconst objectRatioWidth = (width: number): number => objectRatio(width, originalContentMainWidth.value, 'width');\n\nconst objectRatioHeight = (height: number): number => objectRatio(height, originalContentMainHeight.value, 'height');\n\nconst objectRatio = (value: number, reference: number, label: string): number => {\n  const numericValue = Number(value);\n\n  if (isNaN(numericValue)) {\n    console.error(`Invalid ${label} value:`, value);\n    return 0;\n  }\n\n  return Math.abs(parseFloat((numericValue / reference).toFixed(5)));\n};\n\nwatch(template, (templateNew) => {\n  originalContentMainWidth.value = templateNew?.documents?.dimensions?.width ?? 612;\n  originalContentMainHeight.value = templateNew?.documents?.dimensions?.height ?? 792;\n}, {once: true});\n\n\nconst adjustDocumentContainerHeight = () => {\n  const docHeight = pageViewRectangle.value / docImage.value.ratio;\n  console.dir(`DOC HEIGHT:: ${docHeight}`);\n  console.dir(documentImages.value);\n\n  localDocumentImages.value = [...documentImages.value];\n\n  localDocumentImages.value.forEach((p, index) => {\n    // console.dir(`index: ${index}`);\n    // console.dir(p);\n    if (index === 0) return;\n    localDocumentImages.value[index].position = (index * docHeight) + (pageMarginY * index);\n  });\n\n  adjustDataCoords();\n};\n\n\nwatch(templateDocumentImages, (images) => {\n  const docHeight = round(pageViewRectangle.value / docImage.value.ratio, 5);\n  console.dir(`Doc Height: ${docHeight}`);\n  console.dir(images);\n\n  setDocumentImages(images.map((i, index) => ({\n    path: i,\n    position: (index * docHeight) + (pageMarginY * index),\n  })));\n\n  if (images.length > 0) {\n    contentMainWidth.value = content_main.value.clientWidth;\n    console.log(`contentMainWidth: ${contentMainWidth.value}`);\n    contentMainHeight.value = docImage.value.height / docImage.value.ratio;\n    contentMainHeight.value = contentMainWidth.value / docImage.value.ratio * images.length;\n\n    contentLeftSidebarWidth.value = document.getElementById('content_sidebar-left').clientWidth;\n\n\n    adjustDocumentContainerHeight();\n  }\n});\n\nconst scrollToPage = (pageIndex: number) => {\n  console.log('scrollToPage!!');\n  console.dir(pageIndex);\n\n  const pagePosition = localDocumentImages.value[pageIndex].position;\n  content_main.value.scrollTo({\n    top: pagePosition,\n    left: 0,\n    behavior: 'smooth',\n  });\n};\n\nonMounted(() => {\n  getTemplate(documentUuid);\n\n  window.addEventListener('resize', handleWindowResize, false);\n  document.addEventListener('keyup', handleKeyup, false);\n  document.addEventListener('keydown', handleKeydown, false);\n\n\n  standardDoc.value = document.getElementById('standard-documents');\n\n  // esign-editor-main-content\n  const mainContent = document.getElementById('esign-editor-main-content');\n\n  // how far from the left of the window\n  mainContentStartingXPosition.value = mainContent.getBoundingClientRect().left;\n\n\n  // console.dir(standardDoc.value);\n  // console.dir(standardDoc.value.getBoundingClientRect());\n  const standardDocCoordsRect = standardDoc.value.getBoundingClientRect();\n\n  standardDocCoords.value = {\n    top: standardDocCoordsRect.top,\n    left: standardDocCoordsRect.left,\n    right: standardDocCoordsRect.right,\n    bottom: standardDocCoordsRect.bottom,\n    height: standardDocCoordsRect.height,\n    width: standardDocCoordsRect.width,\n    x: standardDocCoordsRect.x,\n    y: standardDocCoordsRect.y,\n  };\n\n  const draggableDebug = Array.from(document.getElementsByClassName('debug-draggable')) as HTMLElement[];\n  draggableDebug.forEach((el) => {\n    dragElement(el);\n  });\n});\n\n\nconst pageViewRectangle = computed(() => {\n  return contentMainWidth.value - 40;\n});\n\nconst templateDocumentDimensions = computed(() => {\n  return template.value?.documents?.dimensions ?? {\n    width: 612,\n    height: 792,\n  };\n});\n\nconst templateDocumentDimensionRatio = computed(() => {\n  const h = templateDocumentDimensions.value.height;\n  const w = templateDocumentDimensions.value.width;\n  return round(w / h, 5);\n});\n\nconst docImage = computed(() => {\n  const width = pageViewRectangle.value;\n  const height = width / templateDocumentDimensionRatio.value;\n  const ratio = width / height;\n  return {\n    width,\n    height,\n    ratio,\n  };\n});\n\n\nconst adjustDataCoords = () => {\n  templateStageData.value.forEach((data: ESignerFieldData, dataIndex: number) => {\n    const adjust = pageHeightAdjust(data.page || 1);\n\n    data.xRatio = objectRatioWidth(data.originalX);\n    data.yRatio = objectRatioHeight(data.originalY);\n\n    data.x = (docImage.value.width * data.xRatio) < 0 ? 0 : round(docImage.value.width * data.xRatio, 5);\n    data.y = Math.round(((docImage.value.height * data.yRatio) + adjust) * 100000) / 100000;\n    data.w = round(docImage.value.width * objectRatioWidth(data.originalWidth), 5);\n    data.h = round(docImage.value.height * objectRatioHeight(data.originalHeight), 5);\n    data.page = determinePageNumber(data.y);\n\n    updateStageData({\n      data,\n      index: dataIndex,\n    });\n  });\n};\n\nconst verifyElementXCoords = (x: number) => {\n  // e.clientX - elementOffsetX.value - documentStartingXPosition.value\n  console.log('verifyElementXCoords:: ' + x);\n  console.log('elementOffsetX.value:: ' + elementOffsetX.value);\n\n  console.log('documentStartingXPosition.value:: ' + documentStartingXPosition.value);\n  const element = currentWorkingDataElement.value;\n  const documentWidth = docImage.value.width;\n\n  // 🛑 Prevent movement outside the left side\n  if (x < 0) {\n    console.log('%c X AXIS CHECK FAILED - Left Side', 'background: #fd0000;');\n    return 0; // Prevent going below the first page\n  }\n\n  // 🛑 Prevent movement outside the right side\n  if (x + element.w > documentWidth) {\n    console.log('%c X AXIS CHECK FAILED - Right Side', 'background: #fd0000;');\n    return documentWidth - element.w; // Prevent going below the first page\n  }\n\n  // ✅ Allow movement across pages\n  console.log('%c X AXIS CHECK PASSED', 'background: #a6e22e;');\n  return x;\n\n}\n\nconst verifyElementYCoords = (finalY: number) => {\n  console.log('verifyElementYCoord:: ' + finalY);\n\n  if (finalY < 0) return 0; // Prevent dragging above the first page\n\n  const element = currentWorkingDataElement.value;\n  const documentHeight = docImage.value.height;\n  const totalPages = localDocumentImages.value.length;\n  const currentPage = determinePageNumber(finalY);\n\n  const pageOffset = (currentPage - 1) * (documentHeight + pageMarginY);\n  const pageEndY = pageOffset + documentHeight;\n  const elementBottom = finalY + element.h;\n\n  // 🛑 Prevent stopping in the page gap\n  if ((finalY + element.h) >= pageEndY && finalY < pageEndY + pageMarginY) {\n    console.log('%c Y AXIS CHECK FAILED - In Page Gap', 'background: #fd0000; font-size: 20px;');\n    return pageEndY - element.h; // Snap to the start of the next page\n  }\n\n  // ✅ Fix last page issue: Adjust the final Y limit\n  const lastPageHeight = (documentHeight * totalPages) + ((totalPages - 1) * pageMarginY);\n\n  // 🛑 Prevent movement below the last page\n  if (currentPage === totalPages && elementBottom > lastPageHeight) {\n    console.log('%c Y AXIS CHECK FAILED - Below Last Page', 'background: #fd0000;');\n    return lastPageHeight - element.h; // Prevent going below the last page\n  }\n\n  // ✅ Handle transitions smoothly (Optional Optimization)\n  if (finalY < pageOffset && elementBottom > pageEndY - element.h) {\n    console.log('%c Smooth Transition Between Pages', 'background: #00ff00;');\n    return pageOffset; // Snap to top of the page when transitioning\n  }\n\n  // ✅ Allow movement across pages\n  console.log('%c Y AXIS CHECK PASSED', 'background: #a6e22e;');\n  return finalY;\n};\n\n\nconst dropListener = (e: MouseEvent) => {\n  console.dir('drop');\n  e.preventDefault();\n\n  // currentWorkingDataElement.value.y = determineRelativeY(currentWorkingDataElement.value.y);\n  // currentWorkingDataElement.value.y = verifyElementYCoords(currentWorkingDataElement.value.y);\n\n  console.log('%c dropListener ', 'background: #fd0000;');\n\n  console.log('currentWorkingDataElement.value.y:' + currentWorkingDataElement.value.y);\n  console.log('getCanvasOffset.value.top ' + getCanvasOffset.value.top);\n  try {\n    const theDeterminedY = determineRelativeY(currentWorkingDataElement.value.y + getCanvasOffset.value.top);\n\n    console.log('theDeterminedY: ' + theDeterminedY);\n    currentWorkingDataElement.value.relativeY = theDeterminedY;\n    currentWorkingDataElement.value.originalX = round(objectRatioWidthRev(selectedFieldV3Coordinates.value.x), 5);\n    currentWorkingDataElement.value.originalY = objectRatioHeightRev(selectedFieldV3Coordinates.value.y - pageHeightAdjust(selectedFieldV2.value?.page || 1));\n    currentWorkingDataElement.value.originalRelativeY = objectRatioHeightRev(theDeterminedY);\n  } catch (e) {\n    console.error(e);\n  }\n\n  elementOffsetX.value = 0;\n  elementOffsetY.value = 0;\n};\n\n\nconst adjustOriginalCoords = () => {\n  templateStageData.value.forEach((data: ESignerFieldData, dataIndex: number) => {\n    const adjust = pageHeightAdjust(data?.page || 1);\n\n    templateStageData.value[dataIndex].originalX = objectRatioWidthRev(templateStageData.value[dataIndex].x);\n    templateStageData.value[dataIndex].originalY = objectRatioHeightRev(templateStageData.value[dataIndex].y - adjust);\n\n    // updateStageData({\n    //   data: {\n    //     ...templateStageData.value[dataIndex],\n    //     originalX: objectRatioWidthRev(templateStageData.value[dataIndex].x),\n    //     originalY: objectRatioHeightRev(templateStageData.value[dataIndex].y - adjust),\n    //   },\n    //   index: dataIndex,\n    // });\n  });\n};\n\nconst saveTemplate = () => {\n  console.dir('saveTemplate ***********');\n  adjustOriginalCoords();\n\n  const actions = JSON.stringify(templateStageData.value);\n\n  updateTemplate({\n    actions: btoa(encodeURI(actions)),\n    template: template.value,\n  });\n};\n\n\nconst handleKeydown = (evt: KeyboardEvent) => {\n  const key = evt.key.toLowerCase();\n\n  /**\n   * If the user is pressing the command and s key then save the document\n   * Note: this needs to be on keydown and not keyup\n   */\n  if (evt.metaKey && key === 's') {\n    console.log('save');\n    evt.preventDefault();\n    if (documentsLoading.value.saving === false) {\n      saveTemplate();\n    }\n  }\n  /**\n   * If the user is pressing the command and c key then copy the selected element\n   */\n  if (evt.metaKey && key === 'c') {\n    evt.preventDefault();\n    copySelectedElement();\n  }\n\n  /** ARROW KEYS - Move Selected Field */\n  if (key === 'arrowup' || key === 'arrowdown' || key === 'arrowleft' || key === 'arrowright') {\n    moveSelectedElement(key, evt);\n  }\n\n}\n\nconst determinePageNumber = (topPosition: number): number => {\n  const pos = Math.max(0, topPosition);\n  const documentImageHeight = docImage.value.height;\n  const totalPages = templateDocumentImages.value.length;\n\n  if (pos <= documentImageHeight + pageMarginY) return 1;\n\n\n  for (let i = 1; i <= totalPages; i++) {\n    const pageTop = documentImageHeight * (i - 1);\n    const pageBottom = (documentImageHeight * i) + pageMarginY;\n\n    // if pos is between pageTop and pageBottom\n    if (pos >= pageTop && pos <= pageBottom) {\n      console.dir(`PAGE: ${i}`);\n      return i;\n    }\n  }\n  return totalPages;\n};\n\nconst copySelectedElement = () => {\n  const selectedElement = getSelectedElements();\n\n  if (selectedElement.length > 0) {\n    const selectedElementData = templateStageData.value.find((d: ESignerFieldData) => d.id === selectedElement[0].parentElement.id);\n\n    if (selectedElementData) {\n      const newElement = JSON.parse(JSON.stringify(selectedElementData));\n      newElement.id = `${newElement.type}-${makeFieldId()}`;\n      newElement.x = selectedElementData.x + 10;\n      newElement.y = selectedElementData.y + 10;\n      removeSelectedElements();\n      removeSelectedElements();\n      templateStageData.value.push(newElement);\n\n      push.success({\n        message: 'Copied',\n      });\n    }\n  }\n};\n\nconst checkCoords = (e: MouseEvent) => {\n  dragHandlesOn.value = !!(e.target as HTMLElement).hasAttribute('resizable');\n};\n\n\nconst formatJson = (json: any) => {\n  let html = '<span class=\"fw-json-start-bracket\">{</span>';\n  if (json) {\n    // eslint-disable-next-line guard-for-in\n    for (const key in json) {\n      // eslint-disable-next-line no-prototype-builtins\n      if (json.hasOwnProperty(key)) {\n        html += `<div class=\"fw-json-item\"><span class=\"fw-json-key\">${key}</span>: <span class=\"fw-json-value\">${json[key]}</span></div>`;\n      }\n    }\n  }\n  html += '<span class=\"fw-json-end-bracket\">}</span>';\n  return html;\n};\n\n\nconst tippyContent = (data: ESignerFieldData) => {\n  if (data?.primary_customer) {\n    if (data.type === 'signature') {\n      return 'Primary - Signature';\n    }\n    return `Primary - ${data.text}`;\n  }\n\n  if (data?.secondary_customer) {\n    if (data.type === 'signature') {\n      return 'Secondary - Signature';\n    }\n    return `Secondary - ${data.text}`;\n  }\n  return data.text;\n};\n\nconst elementFillColor = (data: ESignerFieldData) => {\n  // return data.type === 'signature' ? '#5be8ff' : '#5be8ff';\n  return data.type === 'signature' ? '#9970ad' : '#c0af50';\n};\n\nconst elementClassObject = (data: ESignerFieldData) => {\n  return {\n    'fw-signing-element-rect': data.primary_customer ?? true,\n    'fw-signing-element-rect-secondary': data.secondary_customer ?? false,\n  };\n};\n\nconst determineYTextOffset = (data: ESignerFieldData) => {\n  if (['signature', 'attachment'].includes(data.type)) {\n    return data.fontSize - (widthChange.value * 7);\n  }\n  return (widthChange.value * 12);\n};\n\nconst determineDisplayFontSize = (data: ESignerFieldData) => {\n  return ['signature', 'attachment'].includes(data.type) ? (widthChange.value * data.fontSize) : (widthChange.value * data.fontSize) + 10;\n};\n\nconst countCheckboxes = () => {\n  let count = 1;\n  templateStageData.value.forEach((data: ESignerFieldData) => {\n    if (data.type === 'checkbox') {\n      count++;\n    }\n  });\n  return count;\n};\n\nconst removeAllFields = () => {\n  dragHandlesOn.value = false;\n  removeSelectedElements();\n  removeAllStageData();\n  updateSelectedField(null);\n  removeAllFieldsDialog.value = false;\n\n  push.success({\n    message: 'Removed all fields - Click Save to save your work',\n  });\n};\n\nconst signerElementClicked = (data: ESignerFieldData) => {\n  currentWorkingDataElement.value = data;\n  updateSelectedField(data);\n};\n\nconst onDocViewLoad = (e: Event) => {\n  console.dir('Document View Loaded');\n  console.dir(e);\n};\n\nconst onImgLoad = (payload: Event) => {\n\n  console.log('onImgLoad');\n  console.dir(payload);\n};\n\nconst removeDraggingEventListeners = (elementId: string) => {\n  console.dir('removeDraggingEventListeners');\n  const signingElement = document.getElementById(elementId);\n  const mainContent = document.querySelector('.content_main');\n\n  if (signingElement) {\n    signingElement.removeEventListener('dragstart', dragStartListener);\n  }\n  if (mainContent) {\n    mainContent.removeEventListener('dragover', dragOverListener);\n  }\n};\n\nconst dragStartListener = (e: DragEvent) => {\n  const signingElement = document.getElementById(currentWorkingFieldId.value);\n  console.dir(currentWorkingFieldId.value);\n  console.dir(signingElement);\n  console.dir('dragstart');\n  e.dataTransfer.setData('text/plain', 'element1');\n\n  const boundingRect = signingElement.getBoundingClientRect();\n  elementOffsetX.value = e.clientX - boundingRect.left;\n  elementOffsetY.value = e.clientY - boundingRect.top;\n};\n\nconst dragOverListener = (e: MouseEvent) => {\n  console.dir('dragOverListener');\n\n  currentWorkingDataElement.value.x = verifyElementXCoords(e.clientX - elementOffsetX.value - documentStartingXPosition.value);\n  currentWorkingDataElement.value.y = verifyElementYCoords(e.clientY - elementOffsetY.value - getCanvasOffset.value.top);\n  currentWorkingDataElement.value.page = determinePageNumber(currentWorkingDataElement.value.y);\n\n  e.preventDefault(); // Allow drop\n};\n\nconst svgClicked = (e: MouseEvent) => {\n  console.log('%c svgClicked', 'background: #222; color: #bada55');\n  const target = e.target as HTMLElement;\n\n  console.log(target.parentElement.id);\n  dataEditor.value.style.display = 'none';\n\n  if (currentWorkingTarget.value && currentWorkingTarget.value !== target.id) {\n    console.log('%c REMOVED field-selected from field 1', 'background: #222; color: #bada55');\n    const theId = `#${currentWorkingTarget.value}`;\n    const oldTarget = document.querySelector(theId);\n    if (oldTarget) {\n      oldTarget.classList.remove('field-selected');\n    }\n  }\n  currentWorkingTarget.value = target.parentElement.id;\n\n  const dropItems = document.querySelectorAll('.fw-signing-element[status=droppable]');\n\n  if (dropItems.length > 0) {\n    console.log('%c REMOVED field-selected from field 2', 'background: #222; color: #bada55');\n    templateStageData.value.forEach((f: ESignerFieldData) => {\n      f.status = 'dropped';\n    });\n\n    removeSelectedElements();\n    currentWorkingDataElement.value = {};\n  }\n\n  if (!target.classList.contains('fw-signing-element-rect') && target.id !== 'fw-signing-element-rect-se') {\n    console.log('%c REMOVED field-selected from field 3', 'background: #222; color: #bada55');\n    target.classList.remove('field-selected');\n\n    removeDraggingEventListeners(currentWorkingFieldId.value);\n  }\n\n  if (!target.hasAttribute('selectable')) {\n    console.dir('removeSelectedElements');\n    removeSelectedElements();\n    currentWorkingDataElement.value = {};\n    updateSelectedField(null);\n  }\n\n  target.classList.add('working');\n  initElementsDrag();\n};\n\n\nconst initElementsDrag = () => {\n  const mainContent = document.querySelector('.content_main');\n  const signingElement = document.getElementById(currentWorkingFieldId.value);\n\n  if (signingElement) {\n    signingElement.addEventListener('dragstart', dragStartListener);\n\n    mainContent.addEventListener('dragover', dragOverListener);\n\n    document.body.addEventListener('drop', dropListener);\n  }\n};\n\n\nwatch(() => contentMainWidth.value, () => {\n  dataEditor.value.style.display = 'none';\n  adjustDataCoords();\n  adjustDocumentContainerHeight();\n});\n\nconst selectElement = (e: MouseEvent, data: ESignerFieldData) => {\n  // console.log('%c selectElement', 'background: #222; color: #bada55');\n  // console.dir(e.target);\n  const target = e.target as HTMLElement;\n  //\n  removeSelectedElements();\n  dragHandlesOn.value = target.hasAttribute('resizable');\n  currentWorkingFieldId.value = target.parentElement.id;\n  svgClicked(e);\n  if (target.hasAttribute('selectable')) {\n    console.dir('selectElement HERE2');\n    target.classList.add('field-selected');\n    currentWorkingDataElement.value = data;\n    signerElementClicked(data);\n  }\n};\n\nconst determineTextLines = (data: ESignerFieldData) => {\n  console.log('%c determineTextLines', 'background: #222; color: #bada55');\n  const text = data.text;\n  if (!text) return [''];\n\n  const words = text.split(' ');\n\n  if (words.length === 0) return [''];\n  if (words.length === 1) return [data.text];\n\n  const el = document.createElement('div');\n  document.body.appendChild(el);\n\n  el.style.position = 'absolute';\n  el.style.display = 'inline';\n  el.style.fontSize = `${determineDisplayFontSize(data)}px`;\n  // el.style.padding = '0 16px';\n  el.style['white-space'] = 'nowrap';\n\n  let rows = [];\n  let usedIndex = 0;\n  // loop through each word and check if clientWidth is surpassing maxWidth\n  for (let i = 0; i < words.length; i++) {\n    const word = words[i];\n    el.innerHTML += word;\n    if (el.clientWidth > data.originalWidth) {\n      rows.push(el.innerHTML);\n      usedIndex = i;\n      el.innerHTML = '';\n    } else {\n      el.innerHTML += ' ';\n    }\n  }\n\n  // handle remaining words\n  words.splice(0, usedIndex);\n  rows = rows.concat(words.join(' '));\n\n  document.body.removeChild(el);\n\n  return rows;\n};\n\nconst checkDroppable = (e: MouseEvent) => {\n  const target = e.target as HTMLElement;\n  const targetParent = target.parentNode as HTMLElement;\n\n  coordinateData.value = {\n    ...coordinateData.value,\n    pageId: targetParent.id,\n    clientY: e.clientY,\n    clientX: e.clientX,\n  };\n\n  if (targetParent.id.startsWith('pdf-')) {\n    updateCoordinateDataForPage(targetParent, e);\n  }\n\n  const dropItems = document.querySelectorAll('.fw-signing-element[status=droppable]');\n\n  if (dropItems.length > 0) {\n    setToolsActive(false);\n\n    const contentMain = document.querySelector('.content_main');\n    const top = e.pageY + contentMain.scrollTop + 2; // Allows the element to follow the mouse on scroll\n\n    currentWorkingDataElement.value.x = e.pageX - documentStartingXPosition.value;\n    currentWorkingDataElement.value.y = top\n      - 20 // the height of the top of the first page to the top bar height bottom\n      - coordinateData.value.topBarHeight;\n    currentWorkingDataElement.value.page = determinePageNumber(currentWorkingDataElement.value.y);\n    currentWorkingDataElement.value.relativeY = determineRelativeY(currentWorkingDataElement.value.y);\n\n    const theDeterminedY = determineRelativeY(currentWorkingDataElement.value.y + getCanvasOffset.value.top);\n    currentWorkingDataElement.value.originalRelativeY = objectRatioHeightRev(theDeterminedY);\n  }\n};\n\n// 🔹 Helper function to update coordinate data for the current page\nconst updateCoordinateDataForPage = (targetParent: HTMLElement, e: MouseEvent) => {\n  const pageNumber = +targetParent.id.replace('pdf-', '');\n  coordinateData.value.page = pageNumber + 1;\n\n  const rect = targetParent.getBoundingClientRect();\n  const contentMainElement = document.querySelector('.content_main') as HTMLElement;\n  const offsetParent = contentMainElement.offsetParent as HTMLElement;\n\n  coordinateData.value.pageTop = rect.top - offsetParent.offsetTop;\n\n  coordinateData.value.x = e.clientX - rect.left;\n  coordinateData.value.y = round(\n    e.clientY - coordinateData.value.topBarHeight - coordinateData.value.pageTop - 2\n  );\n};\n\nconst calculateTextWidth = (text: string, fontSize: number) => {\n  const charWidthFactor = 0.8;\n  return Math.ceil(text.length * fontSize * charWidthFactor);\n};\n\n\nconst addField = (typeId = null) => {\n  console.log(`%c [ addField ] `, 'background: #DDD; color: #000; font-size: 20px;');\n\n  currentWorkingDataElement.value = {};\n\n  const selectedTool = filteredTools.value.find((t) => t.id === typeId) as ESignTool;\n  if (!selectedTool) return;\n\n  const fieldId = `${selectedTool.type}-${makeFieldId()}`;\n  const fontSize = selectedTool.fontSize ?? 12;\n  const text = selectedTool.type === 'field' ? selectedTool.name : '';\n\n  // 🔹 Dynamically calculate width and height\n  const baseWidth = Math.max(text ? calculateTextWidth(text, fontSize) : selectedTool.w ?? 50, 50);\n  const adjustedWidth = toolWidthAdjusted(baseWidth);\n  const adjustedHeight = toolHeightAdjusted(baseWidth, selectedTool.h ?? 20);\n\n  console.log(`Text: ${text}, Width: ${adjustedWidth}, Height: ${adjustedHeight}`);\n\n  // 🔹 Determine positioning\n  const startingX = 10;\n  const startingY = 100 + scrollTop.value;\n  const originalDimensions = {\n    width: objectRatioWidthRev(adjustedWidth),\n    height: objectRatioHeightRev(adjustedHeight),\n    x: objectRatioWidthRev(startingX),\n    y: objectRatioWidthRev(startingY),\n    relativeY: objectRatioWidthRev(startingY),\n  };\n\n  // 🔹 Create field data\n  const fieldData: ESignerFieldData = {\n    id: fieldId,\n    page: determinePageNumber(startingY),\n    x: startingX,\n    y: startingY,\n    relativeY: startingY,\n    w: adjustedWidth,\n    h: adjustedHeight,\n    originalWidth: originalDimensions.width,\n    originalHeight: originalDimensions.height,\n    originalX: originalDimensions.x,\n    originalY: originalDimensions.y,\n    originalRelativeY: originalDimensions.relativeY,\n    xRatio: null,\n    text,\n    title: selectedTool.name ?? '',\n    fontSize,\n    resizable: selectedTool.resizable ?? true,\n    draggable: true,\n    status: 'droppable',\n    required: selectedTool.required ?? true,\n    readOnly: selectedTool.readOnly ?? false,\n    typeId,\n    type: selectedTool.type,\n    customField: selectedTool.customField ?? false,\n    version: selectedTool.version ?? 2,\n  };\n\n  // 🔹 Apply conditional properties\n  applyConditionalFieldProperties(fieldData, selectedTool);\n\n  // 🔹 Add field to stage and update state\n  addToStageData(fieldData);\n  updateSelectedField(fieldData);\n\n  currentWorkingDataElement.value = fieldData;\n  currentWorkingFieldId.value = fieldId;\n\n  adjustOriginalCoords();\n  adjustDataCoords();\n};\n\nconst applyConditionalFieldProperties = (fieldData: ESignerFieldData, tool: ESignTool) => {\n  if (tool.type === 'checkbox') {\n    fieldData.value = false;\n    fieldData.fieldName = `Checkbox${countCheckboxes()}`;\n  }\n  if (tool.customField) {\n    fieldData[`${currentSigner.value}_customer`] = true;\n  }\n  if (tool.primary) fieldData.primary_customer = true;\n  if (tool.secondary) fieldData.secondary_customer = true;\n};\n\n\nonBeforeUnmount(() => {\n  console.dir('BEFORE_UNMOUNT');\n  window.removeEventListener('resize', handleWindowResize, false);\n  document.removeEventListener('keyup', handleKeyup, false);\n  document.removeEventListener('keydown', handleKeydown, false);\n\n  removeSelectedElements();\n  currentWorkingDataElement.value = null;\n\n\n  updateSelectedField(null);\n  setSingleTemplate(null);\n});\n</script>\n\n<style>\n.fw-json-item {\n  color: #f8f8f2;\n  margin-left: 16px;\n}\n\n.fw-json-key {\n  color: #f92672;\n}\n\n.fw-json-value {\n  color: #a6e22e;\n}\n\n.fw-json-start-bracket, .fw-json-end-bracket {\n  color: #f92672;\n}\n\n.debug-draggable {\n  position: absolute;\n  z-index: 9;\n  background-color: #f1f1f1;\n  border: 1px solid #d3d3d3;\n}\n\n.debug-draggable__header {\n  padding: 10px;\n  cursor: move;\n  z-index: 10;\n  background-color: #2196F3;\n  color: #fff;\n}\n\n.left-sidebar-group.left-sidebar-group-active {\n  background-color: #f9f9f9;\n}\n\n.fw-signing-element-rect {\n  fill: #5be8ff;\n  stroke: #5CAEFF;\n  stroke-width: 1;\n}\n\n.fw-signing-element-rect-secondary {\n  fill: #975bff !important;\n  stroke: #975bff !important;\n  stroke-width: 1;\n}\n\n.field-selected {\n  fill: red;\n  stroke: blue;\n  stroke-width: 2;\n}\n\n.resizable {\n  position: relative;\n}\n\n[draggable=true] {\n  -webkit-user-drag: element;\n}\n\nsvg:not(:root) {\n  overflow: hidden;\n}\n\n.working + text > tspan {\n  color: red;\n}\n\n.content_sidebar-right {\n  border-left: 1px solid #fd0000;\n}\n\n.site {\n  -webkit-box-orient: vertical;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  min-height: 100vh;\n}\n\n.site-fit .content_wrap {\n  height: 100%;\n}\n\n.site-fit {\n  max-height: 100vh;\n}\n\n.site-fit {\n  height: 100vh;\n}\n\n.site-editor {\n  background-color: #e9e9e9;\n}\n\n.site-full .content_wrap,\n.site-full .footer_wrap,\n.site-full .header_wrap,\n.site-full .hero_wrap,\n.site-full .toolbar_wrap {\n  max-width: none;\n}\n\n.site_wrap {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-flex: 0;\n  -ms-flex: 0 1 auto;\n  flex: 0 1 auto;\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  min-height: 100vh;\n}\n\n.content_wrap {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-orient: horizontal;\n  -webkit-box-direction: normal;\n  -ms-flex-direction: row;\n  flex-direction: row;\n  -webkit-box-flex: 1;\n  flex-grow: 1;\n  min-height: 0;\n  width: 100%;\n}\n\n.content_wrap,\n.footer_wrap,\n.header_wrap,\n.hero_wrap,\n.toolbar_wrap {\n  margin: 0 auto;\n  max-width: 1506px;\n}\n\n.content_main {\n  min-width: 0;\n}\n\n.content_main {\n  -webkit-box-flex: 1;\n  -ms-flex: 1 1 0;\n  flex: 1 1 0;\n}\n\n.standardDocuments {\n  position: relative;\n}\n\n.site_footer, .site_header, .site_hero {\n  -webkit-box-flex: 0;\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n}\n\n.site-editor .site_content {\n  -webkit-box-flex: 1;\n  -ms-flex: 1 1 0;\n  flex: 1 1 0;\n}\n\n.site-fit .site_content {\n  flex-basis: 0;\n}\n\n.site_content,\n.site_content.content,\n.site_content > .content {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-flex: 1;\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n  -webkit-box-orient: vertical !important;\n  -webkit-box-direction: normal !important;\n  -ms-flex-direction: column !important;\n  flex-direction: column !important;\n  min-height: 0;\n}\n\n.site, .site_content {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-direction: normal;\n  width: 100%;\n}\n\n.site_content {\n  -webkit-box-flex: 1;\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n  -webkit-box-orient: horizontal;\n  -ms-flex-direction: row;\n  flex-direction: row;\n  min-height: 0;\n}\n\n.l-flex-between {\n  -webkit-box-align: center;\n  -ms-flex-align: center;\n  align-items: center;\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-pack: justify;\n  -ms-flex-pack: justify;\n  justify-content: space-between;\n}\n\n.l-flex-between > :first-child {\n  -webkit-box-flex: 1;\n  -ms-flex: 1 1 0;\n  flex: 1 1 0;\n  min-width: 0;\n}\n\n.drawer.down > .drawer-wrapper,\n.drawer.up > .drawer-wrapper {\n  width: 100%;\n}\n\n\n.documentPage .bar-action .btn-action {\n  display: block;\n  float: right;\n  height: 28px;\n  margin: 0;\n  padding: 0;\n  text-align: center;\n  width: 28px;\n}\n\n.content_sidebar.sidebar-showingDrawer {\n  overflow: hidden;\n}\n\n.accordion {\n  background: 0 0;\n  border: 0;\n  cursor: pointer;\n  display: block;\n  font-size: inherit;\n  line-height: 20px;\n  padding: 6px 48px 6px 24px;\n  position: relative;\n  text-align: left;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n  width: 100%;\n}\n\n.documentPage {\n  background-color: #fff;\n  border: 1px solid #ccc;\n  cursor: pointer;\n  display: block;\n  margin: 0 auto 14px;\n  position: relative;\n  width: 132px;\n}\n\n.documentPage img {\n  display: block;\n  height: auto;\n  width: 100%;\n}\n\n.documentPage .bar-action {\n  background-color: #e9e9e9;\n  bottom: 0;\n  height: 28px;\n  position: absolute;\n  width: 100%;\n}\n\n.content_sidebar-right {\n  position: relative;\n}\n\n\n.content_sidebar {\n  max-width: 375px;\n  min-width: 220px;\n  overflow: hidden;\n  width: 220px;\n}\n\n.site-editor .sidebar_header {\n  border-bottom: 1px solid #d9d9d9;\n  padding: 13px 24px;\n}\n\n.form_item-iconLeft, .form_item-iconRight {\n  position: relative;\n}\n\n.site-editor .toolbar_left,\n.site-editor .toolbar_main,\n.site-editor .toolbar_right {\n  -webkit-box-align: center;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-item-align: stretch;\n  align-self: stretch;\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  min-height: inherit;\n}\n\n.site-fit .content_sidebar {\n  overflow-y: auto;\n}\n\n.site-editor .toolbar_left {\n  max-width: 375px;\n  min-width: 220px;\n  padding-left: 12px;\n  width: 240px;\n}\n\n.site-editor .toolbar_right {\n  max-width: 375px;\n  min-width: 220px;\n  width: 220px;\n}\n\n.site-editor .toolbar_right {\n  -webkit-box-pack: end;\n  -ms-flex-pack: end;\n  justify-content: flex-end;\n  padding-right: 24px;\n}\n\n.form_item-iconLeft, .form_item-iconRight {\n  position: relative;\n}\n\n.form_item-iconRight .input-text {\n  padding-right: 29px;\n}\n\n.sidebarTabs {\n  background: #e9e9e9;\n  list-style: none;\n  margin: 0;\n  padding: 0 !important;\n}\n\n\n.menu-fields {\n  margin-left: -15px;\n  margin-right: -15px;\n}\n\n.tab-editor-interface_content {\n  display: block;\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1;\n}\n\n.tab-editor-interface_content textarea {\n  -webkit-writing-mode: horizontal-tb !important;\n  text-rendering: auto;\n  color: black;\n  letter-spacing: normal;\n  word-spacing: normal;\n  text-transform: none;\n  text-indent: 0;\n  text-shadow: none;\n  display: inline-block;\n  text-align: start;\n  background-color: rgb(255, 255, 255);\n  -webkit-rtl-ordering: logical;\n  flex-direction: column;\n  cursor: text;\n  white-space: pre-wrap;\n  overflow-wrap: break-word;\n  margin: 0;\n  font: 400 13px Arial;\n  border-width: 1px;\n  border-style: solid;\n  border-color: rgb(118, 118, 118);\n  border-image: initial;\n  padding: 2px;\n}\n\n.tab-editor-interface_content textarea:focus {\n  outline: none;\n}\n\n.tab-editor-interface_content textarea {\n  width: 100%;\n  height: 100%;\n  resize: none;\n}\n\ntext {\n  display: block;\n  white-space: nowrap;\n}\n</style>\n","import {each, find, findIndex, get, isNull, isUndefined, lowerCase} from 'lodash';\nimport dayjs from 'dayjs';\nimport {mapGetters} from 'vuex';\nimport {formatNumberWithCommas} from '@/helpers';\nimport {SubscriptionPlan} from \"@/types\";\n\nexport default {\n\n    data() {\n        return {\n            allowCreditCardInput: true,\n            subscriptionFeatures: {\n                seats: {\n                    basic: 2,\n                    standard: 5,\n                    premium: 20,\n                },\n                listings: {\n                    basic: 5,\n                    standard: 50,\n                    premium: 150,\n                },\n                locations: {\n                    basic: 1,\n                    standard: 2,\n                    premium: 2,\n                },\n                carSharingConnections: {\n                    basic: 1,\n                    standard: 5,\n                    premium: 10,\n                },\n                smartCarConnections: {\n                    basic: 1,\n                    standard: 5,\n                    premium: 10,\n                },\n                orders: {\n                    basic: 5,\n                    standard: 50,\n                    premium: 20,\n                },\n            },\n\n            planIncludes: {\n                premium: {\n                    api: true,\n                    sso: true,\n                    coupons: true,\n                    additional_scripts: true,\n                    custom_domain: true,\n                    custom_tos: true,\n                    listing_exports: true,\n                    listing_imports: true,\n                    esign: true,\n                    webhooks: true,\n                    barcodes: true,\n                    custom_checkout_fields: true,\n                },\n                standard: {\n                    sso: true,\n                    coupons: true,\n                    custom_tos: true,\n                    listing_exports: true,\n                    listing_imports: true,\n                    esign: true,\n                    barcodes: true,\n                    custom_checkout_fields: true,\n                },\n                basic: {\n                    // esign: true,\n                },\n            },\n        };\n    },\n\n    watch: {\n        subLoading() {\n            this.$store.commit('subscriptions/UPDATE_NEW_SUBSCRIPTION', {\n                plan: lowerCase(this.subscriptionPlan),\n                billingPeriod: lowerCase(this.subscriptionDuration),\n            });\n        },\n    },\n\n    computed: {\n        ...mapGetters({\n            user: 'auth/user',\n            enforceSubscription: 'subscriptions/enforceSubscription',\n            subscriptionsLoading: 'subscriptions/loading',\n            plans: 'subscriptions/plans',\n            subscription: 'subscriptions/subscription',\n            hasActiveSubscription: 'subscriptions/hasActiveSubscription',\n            subscriptionPlan: 'subscriptions/subscriptionPlan',\n            subscriptionDuration: 'subscriptions/subscriptionDuration',\n            subscriptionEndDate: 'subscriptions/subscriptionEndDate',\n            company: 'company/company',\n            allListings: 'listing/allListings',\n            companySeatCount: 'company/companySeatCount',\n            subscriptionForm: 'subscriptions/subscriptionForm',\n            extraListingsAddonCount: 'subscriptions/extraListingsAddonCount',\n            stripeSubscriptionObject: 'stripe/stripeSubscriptionObject',\n        }),\n        currentStripeSubscriptionObjectRenewalDate(): string | null {\n            const date = this.stripeSubscriptionObject?.current_period_end;\n\n            if (!date) return null;\n\n            return dayjs(date * 1000).format('MMMM D, YYYY');\n        },\n        currentStripeSubscriptionObjectPlanAmount(): string {\n            const amount = this.stripeSubscriptionObject?.plan?.amount;\n\n            if (!amount) return '$0';\n\n            if (amount % 100 === 0) {\n                return `$${(amount * 0.01).toFixed(0)}`;\n            }\n\n            return `$${(amount * 0.01).toFixed(2)}`;\n        },\n\n        currentStripeSubscriptionObjectPlanInterval(): string | null {\n            return this.stripeSubscriptionObject?.plan?.interval;\n        },\n        currentPlanDetails() {\n            return find(this.plans, (p) => p.name === this.subscriptionPlan);\n        },\n        currentPlanBullets() {\n            return get(this.currentPlanDetails, 'description.bullets');\n        },\n        subLoading() {\n            return this.subscriptionsLoading.subscription;\n        },\n        plan() {\n            return lowerCase(this.subscriptionPlan);\n        },\n        inTrial(): boolean {\n            const trialDate = !!get(this.user, 'on_trial');\n\n            if (trialDate) return true;\n\n            const stripeTrialDate = get(this.subscription, 'trial_ends_at');\n\n            if (stripeTrialDate) {\n                return dayjs(stripeTrialDate).diff(dayjs()) > 0;\n            }\n\n            return false;\n        },\n        subscriptionStatus() {\n            return this.subscription?.stripe_status;\n        },\n        inGracePeriod(): boolean {\n            const endDate = get(this.subscription, 'ends_at');\n            const status = this.subscriptionStatus\n\n            return !(status === 'canceled' && dayjs(endDate).diff(dayjs()) <= 0);\n        },\n        monthlyPrice() {\n            const plans: SubscriptionPlan[] = this.plans;\n\n            const planIndex = findIndex(plans, (p) => this.newSubscription?.plan === p.name);\n            if (planIndex === -1) return 0;\n            if (isUndefined(planIndex)) return 0;\n            return this.plans[planIndex].pricing[this.newSubscription.billingPeriod].price;\n        },\n        billingPricing() {\n            const months = this.newSubscription?.billingPeriod === 'yearly' ? 12 : 1;\n            const totalBilled = this.monthlyPrice * months;\n            return formatNumberWithCommas(totalBilled);\n        },\n        listingLimitReached() {\n            if (!this.enforceSubscription) return false;\n\n            if (this.inTrial && !this.hasActiveSubscription) {\n                return false;\n            }\n\n            if (!this.hasActiveSubscription) {\n                return true;\n            }\n            const limit = this.subscriptionFeatures.listings[this.plan]\n                + this.extraListingsAddonCount;\n\n            return (limit !== -1)\n                && this.allListings.length >= limit;\n        },\n        listingLimitReachedMessage() {\n            if (isNull(this.subscriptionPlan)) return 'You need a subscription plan to add listings.';\n            return `You've reached your max listings of <b>${this.subscriptionFeatures.listings[this.plan]}</b> for your plan.`;\n        },\n\n        planIncludesESign() {\n            if (!this.enforceSubscription) return true;\n\n            if (this.inTrial && !this.hasActiveSubscription) {\n                return true;\n            }\n\n            if (!this.hasActiveSubscription) {\n                return false;\n            }\n\n            return get(this.planIncludes, `${this.plan}.esign`);\n        },\n\n        planIncludesApi() {\n            if (!this.enforceSubscription) return true;\n\n            if (this.inTrial && !this.hasActiveSubscription) {\n                return true;\n            }\n\n            if (!this.hasActiveSubscription) {\n                return false;\n            }\n\n            return get(this.planIncludes, `${this.plan}.api`);\n        },\n\n        carShareConnectionsLimitReached() {\n            if (!this.enforceSubscription) return false;\n\n            if (this.inTrial && !this.hasActiveSubscription) {\n                return false;\n            }\n\n            if (!this.hasActiveSubscription) {\n                return true;\n            }\n\n            let connections = 0;\n            each(get(this.company, 'connections.turo'), () => {\n                connections++;\n            });\n            each(get(this.company, 'connections.getaround'), () => {\n                connections++;\n            });\n            each(get(this.company, 'connections.ryde'), () => {\n                connections++;\n            });\n\n            return (this.subscriptionFeatures.listings[this.plan] !== -1)\n                && connections >= this.subscriptionFeatures.carSharingConnections[this.plan];\n        },\n        smartCarConnectionsLimitReached() {\n            if (!this.enforceSubscription) return false;\n\n            if (this.inTrial && !this.hasActiveSubscription) return false;\n\n            if (!this.hasActiveSubscription) return true;\n\n            let connections = 0;\n            each(get(this.company, 'connections.tesla'), () => {\n                connections++;\n            });\n            each(get(this.company, 'connections.bouncie'), () => {\n                connections++;\n            });\n\n            return (this.subscriptionFeatures.smartCarConnections[this.plan] !== -1)\n                && connections >= this.subscriptionFeatures.smartCarConnections[this.plan];\n        },\n        carShareConnectionsLimitReachedMessage() {\n            if (isNull(this.subscriptionPlan)) return 'You need a subscription plan to add a connection.';\n            return `You've reached your max car-sharing connection of <b>${this.subscriptionFeatures.carSharingConnections[this.plan]}</b> for your plan.`;\n        },\n        seatLimitReachedMessage() {\n            if (isNull(this.subscriptionPlan)) return 'You need a subscription plan to add seats.';\n            return `You've reached your max seats of <b>${this.subscriptionFeatures.seats[this.plan]}</b> for your plan.`;\n        },\n    },\n\n    methods: {\n        includedInSubscription(topic) {\n            if (!this.enforceSubscription) return true;\n\n            if (this.inTrial) return true;\n\n            if (!this.hasActiveSubscription) return false;\n\n            if (isUndefined(this.planIncludes[this.plan])) return false;\n            if (isUndefined(this.planIncludes[this.plan][topic])) return false;\n            return this.planIncludes[this.plan][topic];\n        },\n    },\n};\n","import dayjs from 'dayjs';\n\n\nexport function useDateFormatter() {\n\n    const formatRentalDate = (date: Date | string | number, format: string = 'MMM DD, YYYY @ h:mma'): string => {\n        const parsedDate = dayjs(date);\n        return parsedDate.isValid() ? parsedDate.format(format) : 'Invalid Date';\n    }\n\n    return {\n        formatRentalDate,\n    }\n}\n","import {computed, ComputedRef} from 'vue';\nimport {useStore} from 'vuex';\nimport {CompanyInterface, CurrencySettings} from '@/types';\nimport getDefaultMeta from '@/utils/meta';\n\n\ntype MoneyTextInputSettings = {\n    prefix: string,\n    suffix: string,\n}\n\nexport function useMoneyFormatter() {\n    const store = useStore();\n\n    const company: ComputedRef<CompanyInterface> = computed(() => store.getters['company/company']);\n\n    const DEFAULT_CURRENCY_FORMAT = 'symbol';\n    const DEFAULT_CURRENCY_POSITION = 'left';\n    const DEFAULT_CURRENCY: CurrencySettings = {\n        decimal: '.',\n        format: '%s%v',\n        name: 'USD',\n        precision: 2,\n        symbol: '$',\n        thousand: ',',\n    };\n\n    /**\n     * Converts an integer amount (cents) to a decimal value (dollars)\n     */\n    const fromCents = (amount: number | undefined): number => {\n        return Number(((amount ?? 0) * 0.01).toFixed(2));\n    };\n\n    /**\n     * Converts a decimal value (dollars) to an integer amount (cents)\n     */\n    const toCents = (amount: number): number => {\n        if (isNaN(amount)) {\n            return 0;\n        }\n\n        console.dir('toCents');\n        console.dir(amount);\n        return Math.round(amount * 100);\n    };\n\n    const formatNumberWithCommas = (x: number | string): string => {\n        if (x === null || isNaN(Number(x))) {\n            return '0';\n        }\n        return x.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',');\n    };\n\n    /**\n     * Formats an amount to include commas and decimal places.\n     * Handles integer-based currency storage.\n     */\n    const formatAmount = (amount: number, convertFromInt = true): string => {\n        const multiplier = convertFromInt ? 0.01 : 1;\n        const formattedAmount = (amount * multiplier).toFixed(2);\n        return formatNumberWithCommas(formattedAmount);\n    };\n\n    const formatMoneyDisplayV2 = (amount: number, convertFromInt: boolean = true) => {\n        const currency = getCompanyCurrency();\n        const {format, position} = getCompanyCurrencyFormatSettings();\n        return setCurrencyAndValue(formatAmount(amount, convertFromInt), currency, position, format);\n    };\n\n    /**\n     * Combines currency symbol/name with the value based on position.\n     */\n    const setCurrencyAndValue = (\n        value: string | number,\n        currency: CurrencySettings,\n        position: 'left' | 'right' = 'left',\n        format: 'symbol' | 'name' | string = 'symbol'\n    ): string => {\n        const symbolOrName = format === 'symbol' ? currency.symbol : currency.name;\n        return position === 'left' ? `${symbolOrName}${value}` : `${value}${symbolOrName}`;\n    }\n\n    /**\n     * Retrieves the company's currency settings or defaults.\n     */\n    const getCompanyCurrency = (): CurrencySettings => {\n        return company.value?.currency || DEFAULT_CURRENCY;\n    };\n\n    /**\n     * Determines the currency format and position for the company.\n     */\n    const getCompanyCurrencyFormatSettings = (): { format: string; position: 'left' | 'right' } => {\n        return {\n            format: getDefaultMeta('settings.pricing.currency.format') as string || DEFAULT_CURRENCY_FORMAT,\n            position: getDefaultMeta('settings.pricing.currency.position') as 'left' | 'right' || DEFAULT_CURRENCY_POSITION,\n        };\n    };\n\n\n    /**\n     * Returns the currency symbol for the company.\n     */\n    const companyCurrencySymbol = (): string => getCompanyCurrency().symbol;\n\n\n    const companyMoneyTextInputSettings = computed<MoneyTextInputSettings>(() => {\n        const currency = getCompanyCurrency();\n        const {format, position} = getCompanyCurrencyFormatSettings();\n        const symbol = format === 'symbol' ? currency.symbol : currency.name;\n\n        return {\n            prefix: position === 'left' ? symbol : '',\n            suffix: position === 'right' ? symbol : '',\n        };\n    });\n\n    /**\n     * Formats money without adding a currency symbol.\n     */\n    const formatMoney = (amount: number, convertFromInt = true): string => {\n        return amount ? formatAmount(amount, convertFromInt) : '0';\n    };\n\n    /**\n     * Formats money specifically in USD.\n     */\n    const formatMoneyDisplayUSD = (amount: number, convertFromInt = true): string => {\n        return `$${formatMoney(amount, convertFromInt)}`;\n    };\n\n    /**\n     * Returns the current currency symbol.\n     */\n    const currencySymbol = (): string => getCompanyCurrency().symbol;\n\n\n    return {\n        companyMoneyTextInputSettings,\n        currencySymbol,\n        formatMoney,\n        formatAmount,\n        formatMoneyDisplayV2,\n        setCurrencyAndValue,\n        companyCurrencySymbol,\n        formatMoneyDisplayUSD,\n        formatNumberWithCommas,\n        fromCents,\n        toCents,\n    };\n}\n","import {computed} from 'vue';\nimport {useStore} from 'vuex';\nimport {\n    AcceptEnvelopePayload,\n    EnvelopeInterface,\n    EnvelopePage,\n    RemoveAttachmentPayload,\n    SaveProgressPayload,\n    SaveSignaturePayload,\n} from '@/store/modules/envelope';\nimport {DocumentType, TemplateData} from '@/store/modules/document';\nimport {ESignerFieldData, StoreLoaders} from '@/types';\n\nexport type NewEnvelope = {\n    b_id: string,\n    template_uuid: string,\n    send_method: {\n        email: boolean,\n        sms: boolean,\n    },\n}\n\nexport interface envelopeDataByPageInterface {\n    page: number;\n    path: string;\n    pageData: ESignerFieldData[];\n}\n\nexport function useEnvelope() {\n    const store = useStore();\n\n    const envelope = computed<EnvelopeInterface>(() => store.getters['envelope/envelope']);\n    const envelopes = computed(() => store.getters['envelope/envelopes']);\n\n    const envelopeLoading = computed<StoreLoaders>(() => store.getters['envelope/loading']);\n    const envelopeDialogs = computed(() => store.getters['envelope/envelopeDialogs']);\n    const envelopeForm = computed(() => store.getters['envelope/envelopeForm']);\n    const envelopesQuery = computed(() => store.getters['envelope/envelopesQuery']);\n    const envelopesPagination = computed(() => store.getters['envelope/envelopesPagination']);\n    const totalRemainingFields = computed<number>(() => store.getters['envelope/totalRemainingFields']);\n    const envelopeIsReady = computed<boolean>(() => store.getters['envelope/envelopeIsReady']);\n\n    const allEnvelopeData = computed<ESignerFieldData[]>(() => store.getters['envelope/allEnvelopeData']);\n    const esignSessionData = computed(() => store.getters['envelope/esignSessionData']);\n    const esignEnvelopeDataCopy = computed<EnvelopePage[]>(() => store.getters['envelope/esignEnvelopeDataCopy']);\n\n    const envelopeCustomer = computed(() => store.getters['envelope/envelopeCustomer']);\n    const envelopeCustomerData = computed(() => envelopeCustomer.value?.data || {});\n\n    const envelopeTemplate = computed<TemplateData>(() => envelope.value?.template);\n    const envelopeTemplateDocuments = computed<DocumentType>(() => envelopeTemplate.value?.documents);\n    const envelopeDocumentImages = computed(() => envelopeTemplateDocuments.value?.document_images || []);\n\n    const envelopeDocumentDimensions = computed(() => envelopeTemplateDocuments.value?.dimensions || {\n        width: 612,\n        height: 792\n    });\n    const envelopeDocumentDimensionRatio = computed(() => {\n        const h = envelopeDocumentDimensions.value.height;\n        const w = envelopeDocumentDimensions.value.width;\n\n        return Math.round((w / h) * 100000) / 100000; // Round to 5 decimal places\n    });\n\n    const envelopeCompleted = computed(() => envelope.value?.completed_at);\n    const envelopeCustomerCompleted = computed(() => envelopeCustomer.value?.completed_at);\n\n    const completedEnvelopeUrl = computed<string>(() => envelope.value?.file_path || envelope.value?.pdf_url || '');\n\n    const envelopeStatus = computed(() => envelope.value?.status || 'pending');\n\n    const envelopeData = computed<envelopeDataByPageInterface[]>(() => {\n        const fields = Array.isArray(allEnvelopeData.value) ? [...allEnvelopeData.value].sort((a, b) => a.page - b.page) : [];\n\n        console.dir('envelopeData');\n        console.dir(fields);\n        const pages = envelopeDocumentImages.value || [];\n\n        return pages.map((p, index) => {\n            const pageNumber = index + 1;\n            let pageData = fields.filter((f) => f.page === pageNumber) || [];\n\n            pageData = pageData.map((d) => {\n                const data = d;\n                const updated = data.updated;\n                const title = data.title;\n\n                if (data.type === 'field') {\n                    const filled = data.filled || false;\n                    return {\n                        ...data,\n                        filled,\n                        text: filled ? data.text : '',\n                        placeholder: data.text,\n                        toolTip: data.text,\n                        title: title || data.text,\n                    };\n                }\n                if (data.type === 'text') {\n                    return {\n                        ...data,\n                        filled: data.filled || true,\n                        placeholder: data.text,\n                        text: data.readOnly || updated ? data.text : '',\n                        title: title || data.text,\n                    };\n                }\n                if (data.type === 'attachment') {\n                    return {\n                        ...data,\n                        attached: data.attached || false,\n                        filled: data.filled || false,\n                        url: data.url || null,\n                    };\n                }\n                if (data.type === 'checkbox') {\n                    return {\n                        ...data,\n                        toolTip: data.fieldName,\n                    };\n                }\n\n                return {\n                    ...d,\n                    signed: false,\n                    filled: false,\n                    src: '',\n                    toolTip: 'Sign Here',\n                };\n\n            });\n            return {\n                page: pageNumber,\n                path: p,\n                pageData,\n            };\n        });\n    });\n\n    const envelopeRequiredFields = computed(() => {\n        return envelopeData.value\n            .flatMap(e => e.pageData) // Native `flatMap`\n            .reduce((count, d) => count + (d.required ? 1 : 0), 0);\n    });\n\n    const envelopeSignatures = computed(() => {\n        const data = esignEnvelopeDataCopy.value.flatMap((e) => e.pageData);\n        let signatureCount = 0;\n        data.forEach((d) => {\n            if (d.type === 'signature') signatureCount++;\n        });\n        return signatureCount;\n    });\n\n    const remainingRequiredFields = computed(() => {\n        const data = esignEnvelopeDataCopy.value.flatMap((e) => e.pageData);\n        console.dir('remainingRequiredFields');\n        console.dir(data.length);\n        console.dir(data);\n\n        return data.filter((field) => {\n            if (!field.required) return false;\n\n            switch (field.type) {\n                case 'signature':\n                    return !field.signed;\n                case 'field':\n                case 'text':\n                    return !field.filled || (field.text?.trim().length === 0);\n                case 'checkbox':\n                    return !field.value;\n                case 'attachment':\n                    return !field.filled;\n                default:\n                    return false;\n            }\n        });\n    });\n\n\n    function sendEnvelopeReminder(data: { envelope: EnvelopeInterface, email: string }) {\n        store.dispatch('envelope/sendReminder', data);\n    }\n\n    const saveSignature = async (data: SaveSignaturePayload) => {\n        return await store.dispatch('envelope/saveSignature', data);\n    }\n\n    const acceptAndSignEnvelope = async (data: AcceptEnvelopePayload) => {\n        return await store.dispatch('envelope/acceptAndSignV2', data);\n    }\n\n    function setEnvelopeDialog(data: { key: string, value: boolean }) {\n        store.commit('envelope/SET_ENVELOPE_DIALOG', data);\n    }\n\n    function updateEnvelopeField(data: ESignerFieldData) {\n        store.commit('envelope/UPDATE_ENVELOPE_FIELD', data);\n    }\n\n    const setEsignSessionData = async (data: { key: string, value: any } | Record<string, any>) => {\n        return store.commit('envelope/SET_ESIGN_SESSION_DATA', data);\n    }\n\n\n    const removeAttachment = async (data: RemoveAttachmentPayload) => {\n        return await store.dispatch('envelope/removeAttachment', data);\n    }\n\n    const saveProgress = async (data: SaveProgressPayload) => {\n        return await store.dispatch('envelope/saveProgress', data);\n    }\n\n\n    const getEnvelopeV2 = async (payload: {\n        uuid: string,\n        recipientId: string,\n        recipientKey?: string,\n        sample?: boolean\n    }) => {\n        return await store.dispatch('envelope/getEnvelopeV2', payload);\n    }\n\n    const createEnvelope = async (data: NewEnvelope) => {\n        return await store.dispatch('envelope/createEnvelope', data);\n    }\n\n    const voidEnvelope = async (envelope: EnvelopeInterface) => {\n        return await store.dispatch('envelope/voidEnvelope', envelope);\n    }\n\n    const getEnvelopes = async () => {\n        return await store.dispatch('envelope/getEnvelopes');\n    };\n\n    const printProgress = async (envelope: EnvelopeInterface) => {\n        return await store.dispatch('envelope/printProgress', envelope);\n    }\n\n    const downloadProgress = async (envelope: EnvelopeInterface) => {\n        return await store.dispatch('envelope/downloadProgress', envelope);\n    }\n\n    const resendEnvelope = async (payload: { uuid: string, recipients: string[] }) => {\n        return await store.dispatch('envelope/resendEnvelope', payload);\n    }\n\n    const resetEnvelopeData = async (uuid: string) => {\n        return await store.dispatch('envelope/resetEnvelopeData', uuid);\n    }\n\n    const updateCustomerQuery = (query: { key: string, value: object | string | number }) => {\n        store.commit('envelope/SET_ENVELOPE_QUERY', query);\n    }\n\n    return {\n        envelope,\n        envelopeLoading,\n        envelopeDialogs,\n        envelopes,\n        envelopeForm,\n        envelopesQuery,\n        envelopesPagination,\n        totalRemainingFields,\n        envelopeIsReady,\n        allEnvelopeData,\n        envelopeDocumentImages,\n        envelopeData,\n        envelopeDocumentDimensionRatio,\n        envelopeDocumentDimensions,\n        envelopeStatus,\n        completedEnvelopeUrl,\n        envelopeRequiredFields,\n        envelopeCustomer,\n        envelopeCustomerData,\n        esignSessionData,\n        esignEnvelopeDataCopy,\n        remainingRequiredFields,\n        envelopeCompleted,\n        envelopeCustomerCompleted,\n        envelopeSignatures,\n        updateEnvelopeField,\n        acceptAndSignEnvelope,\n        setEsignSessionData,\n        getEnvelopeV2,\n        updateCustomerQuery,\n        setEnvelopeDialog,\n        createEnvelope,\n        saveSignature,\n        sendEnvelopeReminder,\n        getEnvelopes,\n        voidEnvelope,\n        printProgress,\n        downloadProgress,\n        resendEnvelope,\n        resetEnvelopeData,\n        removeAttachment,\n        saveProgress,\n    }\n}","<template>\n  <v-card class=\"mt-5\">\n    <v-card-text>\n      <div class=\"\">\n        <v-data-table-server\n          v-model:options=\"dataTableOptions\"\n          :headers=\"envelopesHeaders\"\n          :items=\"envelopes\"\n          :items-length=\"envelopesTotal\"\n          :items-per-page=\"dataTableOptions.itemsPerPage\"\n          :items-per-page-options=\"itemsPerPageOptions\"\n          :items-per-page-text=\"'Contracts per page'\"\n          :loading=\"envelopeLoading.envelopes\"\n          :mobile-breakpoint=\"0\"\n        >\n          <template v-slot:body=\"props\">\n            <tr v-for=\"(item, index) in props.items\" :key=\"index\" class=\"bg-white border-b dark:bg-gray-800 dark:border-gray-700 border-gray-200\">\n              <th class=\"px-6 py-4 font-medium text-gray-900 whitespace-nowrap dark:text-white\" scope=\"row\">\n                <div v-for=\"(recipient, key) in recipients(item)\" :key=\"key\" class=\"content-center\">\n                  <router-link v-if=\"renterId(recipient)\" :to=\"{name: 'customers.single', params: { r_id: renterId(recipient)}}\">\n                    {{ recipient.name }}\n                  </router-link>\n                </div>\n              </th>\n              <td>\n                <div class=\"content-center\">\n                  <v-chip :color=\"envelopeStatusText(item).color\" class=\"text-white\" size=\"x-small\">\n                    {{ envelopeStatusText(item).text }}\n                  </v-chip>\n                  <div v-if=\"item.completed_at\">{{ formatRentalDate(item.completed_at) }}</div>\n                </div>\n              </td>\n              <td>\n                <div class=\"content-center\">\n                  <v-btn v-if=\"item.file_path\" v-tippy :href=\"item.file_path\" content=\"Open in new window\" size=\"small\" target=\"_blank\" variant=\"text\">\n                    <v-icon size=\"small\">mdi-file-outline</v-icon>\n                  </v-btn>\n                  <v-btn v-else v-tippy :href=\"item.pdf_url\" content=\"Incomplete - Open in new window\" size=\"small\" target=\"_blank\" variant=\"text\">\n                    <v-icon size=\"small\">mdi-file-outline</v-icon>\n                  </v-btn>\n                </div>\n              </td>\n              <td>\n                <div class=\"content-center\">\n                  <span v-if=\"item.attachments.length === 0\"></span>\n                  <v-menu\n                    v-else\n                    v-model=\"item.attachmentsMenu\"\n                    :close-on-content-click=\"false\"\n                  >\n                    <template v-slot:activator=\"{ props }\">\n                      <v-btn\n                        v-bind=\"props\"\n                        variant=\"text\"\n                      >\n                        {{ item.attachments.length }}\n                      </v-btn>\n                    </template>\n\n                    <v-card max-width=\"300\">\n                      <v-list density=\"compact\">\n                        <template v-for=\"attachment in item.attachments\" :key=\"attachment.uuid\">\n                          <v-list-item v-if=\"attachmentImage(attachment)\" tile>\n                            <img :src=\"attachmentImage(attachment)\" alt=\"Attachment Image\" class=\"border\">\n                          </v-list-item>\n                          <v-list-item v-else tile>\n                            <template v-slot:prepend>\n                              <v-avatar\n                                color=\"primary\"\n                                size=\"25\"\n                              >\n                                <v-icon size=\"sma\">\n                                  mdi-file-outline\n                                </v-icon>\n                              </v-avatar>\n                            </template>\n\n                            <template v-slot:append>\n                              <v-btn :href=\"attachment.url\" target=\"_blank\" variant=\"text\">\n                                <v-icon size=\"small\">mdi-open-in-new</v-icon>\n                              </v-btn>\n                            </template>\n\n                            <template v-slot:subtitle>\n                              {{ attachment.attachment_id }}\n                            </template>\n\n                            <template v-slot:title>\n                              {{ attachment.name }}\n                            </template>\n                          </v-list-item>\n\n\n                        </template>\n                      </v-list>\n                    </v-card>\n                  </v-menu>\n                </div>\n              </td>\n              <td>\n                <div class=\"content-center\">\n                  <span v-if=\"item.created_at\">{{ formatRentalDate(item.created_at) }}</span>\n                </div>\n              </td>\n              <td>\n                <div class=\"content-center\">\n                  <v-menu>\n                    <template v-slot:activator=\"{ props }\">\n                      <v-btn\n                        size=\"small\"\n                        v-bind=\"props\"\n                        variant=\"text\"\n                      >\n                        <v-icon>mdi-dots-vertical</v-icon>\n                      </v-btn>\n                    </template>\n                    <v-list>\n                      <v-list-item v-if=\"item.file_path\" @click=\"openInNewTab(item.file_path)\">\n                        <v-list-item-title>\n                          <v-icon class=\"mr-1\" size=\"small\">mdi-download</v-icon>\n                          Download PDF\n                        </v-list-item-title>\n                      </v-list-item>\n                      <v-list-item v-else @click=\"openInNewTab(item.pdf_url)\">\n                        <v-list-item-title>\n                          <v-icon class=\"mr-1\" size=\"small\">mdi-download</v-icon>\n                          Download Template Used\n                        </v-list-item-title>\n                      </v-list-item>\n                      <!--                      <v-list-item>-->\n                      <!--                        <v-list-item-title>-->\n                      <!--                          <v-icon size=\"small\" class=\"mr-1\">mdi-eye</v-icon>-->\n                      <!--                          Preview-->\n                      <!--                        </v-list-item-title>-->\n                      <!--                      </v-list-item>-->\n                      <v-list-item :disabled=\"!hasPendingSigners(item) || envelopeVoided(item)\" @click=\"openReminderDialog(item)\">\n                        <v-list-item-title>\n                          <v-icon class=\"mr-1\" size=\"small\">mdi-email-outline</v-icon>\n                          Send Reminder\n                        </v-list-item-title>\n                      </v-list-item>\n                      <v-list-item :disabled=\"envelopeVoided(item)\" @click=\"openVoidEnvelopeDialog(item)\">\n                        <v-list-item-title>\n                          <v-icon class=\"mr-1\" size=\"small\">mdi-close-circle-outline</v-icon>\n                          Void\n                        </v-list-item-title>\n                      </v-list-item>\n                      <v-list-item @click=\"openEnvelopInfoDialog(item)\">\n                        <v-list-item-title>\n                          <v-icon class=\"mr-1\" size=\"small\">mdi-information-outline</v-icon>\n                          View Info\n                        </v-list-item-title>\n                      </v-list-item>\n                    </v-list>\n                  </v-menu>\n                </div>\n              </td>\n            </tr>\n          </template>\n        </v-data-table-server>\n      </div>\n    </v-card-text>\n  </v-card>\n\n  <v-dialog v-model=\"voidEnvelopeDialog\" max-width=\"400\">\n    <v-card :loading=\"envelopeLoading.voiding\">\n      <v-card-title class=\"text-h5\">Are you sure?</v-card-title>\n      <v-divider class=\"opacity-50\"></v-divider>\n      <v-card-text>\n        Are you sure you want to void this envelope?\n\n        <v-alert v-if=\"envelopeForm.errors.any()\" class=\"mt-5\" color=\"red\" density=\"compact\">\n          <strong>There was an error:</strong>\n          {{ envelopeForm.errors.flatten()[0] }}\n        </v-alert>\n      </v-card-text>\n\n      <v-divider class=\"opacity-50\"></v-divider>\n\n      <v-card-actions>\n        <v-spacer/>\n\n        <v-btn :disabled=\"envelopeLoading.voiding\" color=\"grey\" size=\"small\" variant=\"text\" @click=\"voidEnvelopeDialog = false; envelopeForm.errors.clear();\">\n          Nevermind\n        </v-btn>\n\n        <v-btn :disabled=\"envelopeLoading.voiding || envelopeForm.errors.any()\" color=\"red text-white\" @click=\"voidEnvelopeCommit(currentWorkingEnvelope)\">\n          Void\n        </v-btn>\n      </v-card-actions>\n    </v-card>\n  </v-dialog>\n\n  <v-dialog v-model=\"reminderDialog\" aria-label=\"Send Reminder\" max-width=\"600\">\n    <v-card :disabled=\"envelopeLoading.reminder\" :loading=\"envelopeLoading.reminder\">\n      <v-card-title>Send Reminder</v-card-title>\n      <v-divider class=\"opacity-50\"/>\n      <v-card-text>\n        <div class=\"my-2\">This is the name that will be used in the emails/sms sent to your guests.</div>\n        <v-checkbox\n          v-for=\"(reminder, index) in reminderData.recipients\"\n          :key=\"index\"\n          v-model=\"reminder.send\"\n          :label=\"reminder.label\"\n          hide-details\n        >\n        </v-checkbox>\n      </v-card-text>\n      <v-divider class=\"opacity-50\"/>\n      <v-card-actions>\n        <v-spacer/>\n        <v-btn :disabled=\"envelopeLoading.reminder\" color=\"grey\" size=\"small\" variant=\"text\" @click=\"reminderDialog = false\">\n          Nevermind\n        </v-btn>\n        <v-btn :disabled=\"sendReminderReady\" :loading=\"envelopeLoading.reminder\" color=\"primary text-white\" @click=\"sendReminderInit()\">\n          Send\n        </v-btn>\n      </v-card-actions>\n    </v-card>\n  </v-dialog>\n\n  <v-dialog v-model=\"envelopInfoDialog\" max-width=\"600\">\n    <v-card :disabled=\"documentsLoading.saving\" :loading=\"documentsLoading.saving\">\n      <v-card-title>Info</v-card-title>\n      <v-card-text>\n        <div class=\"mb-5\">\n          <v-chip :color=\"envelopeStatusText(currentWorkingEnvelope).color\" size=\"x-small\">\n            <span>{{ envelopeStatusText(currentWorkingEnvelope).text }}</span>\n          </v-chip>\n        </div>\n\n        <div>\n          <div v-for=\"recipient in currentWorkingEnvelopeRecipients\" :key=\"recipient.uuid\">\n            <div class=\"flex\">\n              <div v-if=\"recipient.completed_at\">\n                <v-icon v-tippy :content=\"`Signed at ${recipient.completed_at}`\" class=\"mr-1\" size=\"small\">mdi-check\n                </v-icon>\n              </div>\n              <div v-else-if=\"recipient.opened_at\">\n                <v-icon v-tippy :content=\"`Opened at ${recipient.opened_at}`\" class=\"mr-1\" size=\"small\">mdi-eye\n                </v-icon>\n              </div>\n              <div v-else>\n                <v-icon v-tippy :content=\"`Waiting`\" class=\"mr-1\" size=\"small\">mdi-clock-outline</v-icon>\n              </div>\n              <div>\n                {{ recipient.renter.full_name }}\n                ({{ recipient.recipient }})\n              </div>\n            </div>\n          </div>\n        </div>\n\n        <div>\n          <div v-for=\"(signature, key) in envelopeRecipientSignatures(currentWorkingEnvelope)\" :key=\"key\">\n            <div v-if=\"signature.signature\" class=\"border rounded my-1 p-1\">\n              <v-menu\n                v-if=\"signature.signature\"\n                v-model=\"signature.largerSignature\"\n                :close-on-content-click=\"false\"\n                open-on-hover\n              >\n                <template v-slot:activator=\"{ props }\">\n                  <v-img :src=\"signature.signature\" height=\"50\" v-bind=\"props\" width=\"100\"></v-img>\n                  <small>{{ signature.name }}</small>\n                </template>\n\n                <v-card>\n                  <v-card-text>\n                    <v-img :src=\"signature.signature\" height=\"200\"></v-img>\n                    <small>{{ signature.name }}</small>\n                  </v-card-text>\n                </v-card>\n              </v-menu>\n            </div>\n          </div>\n        </div>\n      </v-card-text>\n      <v-card-actions>\n        <v-spacer/>\n        <v-btn :disabled=\"documentsLoading.saving\" color=\"grey\" size=\"small\" variant=\"text\" @click=\"envelopInfoDialog = false\">\n          Okay\n        </v-btn>\n      </v-card-actions>\n    </v-card>\n  </v-dialog>\n</template>\n\n<script lang=\"ts\" setup>\nimport {computed, ref, watch} from 'vue';\nimport {useEnvelope} from \"@/composables/useEnvelope\";\nimport {useStore} from 'vuex';\nimport {useDateFormatter} from \"@/composables/useDate\";\nimport {EnvelopeInterface} from \"@/store/modules/envelope\";\nimport {RenterInterface} from \"@/types\";\n\nconst store = useStore();\nconst {\n  envelopeForm,\n  envelopeLoading,\n  envelopes,\n  envelopesQuery,\n  envelopesPagination,\n  sendEnvelopeReminder,\n  voidEnvelope,\n  getEnvelopes,\n  updateCustomerQuery,\n} = useEnvelope();\nconst {formatRentalDate} = useDateFormatter();\n\nconst documentsLoading = computed(() => store.getters['document/loading']);\n\nconst envelopesTotal = computed(() => envelopesPagination.value.total);\n\nconst currentWorkingEnvelope = ref<EnvelopeInterface>(null);\nconst envelopInfoDialog = ref(false);\nconst voidEnvelopeDialog = ref(false);\nconst reminderDialog = ref(false);\n\nconst currentWorkingEnvelopeRecipients = computed(() => {\n  return currentWorkingEnvelope.value.recipients;\n});\n\nconst dataTableOptions = ref({\n  page: 1,\n  itemsPerPage: 25,\n  sortBy: ['created_at'],\n  sortDesc: [true],\n  status: 'all',\n});\nconst envelopeVoided = (envelope: EnvelopeInterface) => {\n  return envelope.status === 'voided';\n};\n\nconst sendReminderReady = computed(() => {\n  return reminderData.value.recipients.length === 0 || reminderData.value.recipients.every(r => !r.send);\n});\n\nconst itemsPerPageOptions = [\n  {value: 10, title: '10'},\n  {value: 25, title: '25'},\n  {value: 50, title: '50'},\n  {value: 100, title: '100'},\n  {value: -1, title: '$vuetify.dataFooter.itemsPerPageAll'}\n];\n\nconst envelopesHeaders = ref([\n  {title: 'Customers', key: 'renter', sortable: false},\n  {title: 'Status', key: 'status', sortable: false},\n  // { text: 'Opened', value: 'opened', width: 100 },\n  // { text: 'Completed', value: 'completed_at', width: 200 },\n  // { text: 'Signatures', value: 'signature' },\n  {title: 'Files', key: 'pdf_url', sortable: false},\n  {title: 'Attachments', key: 'attachments', width: 125, sortable: false},\n  {title: 'Created', key: 'created_at', width: 200},\n  {title: '', sortable: false, key: 'uuid'},\n]);\n\nconst reminderData = ref({\n  recipients: [],\n});\n\nwatch(() => dataTableOptions.value.page, (newPage) => {\n  updateCustomerQuery({key: 'page', value: newPage});\n  getEnvelopes();\n});\n\nwatch(() => dataTableOptions.value.itemsPerPage, (newItemsPerPage) => {\n  updateCustomerQuery({key: 'itemsPerPage', value: newItemsPerPage});\n  getEnvelopes();\n});\n\nwatch(() => dataTableOptions.value.sortBy, (newSort) => {\n  updateCustomerQuery({key: 'sortBy', value: [newSort?.[0]?.['key']]});\n  updateCustomerQuery({key: 'sortDesc', value: [newSort?.[0]?.['order'] === 'desc']});\n  getEnvelopes();\n});\n\nwatch(dataTableOptions, (val) => {\n  // if there is no status filter, then we need to reset the page to 1\n  if (!val.status) {\n    dataTableOptions.value.status = 'all';\n  }\n});\n\nconst recipients = (envelope: EnvelopeInterface) => {\n  // Check if there are no recipients in the envelope\n  if (!envelope.recipients?.length) {\n    return [{\n      name: renterFullName(envelope.renter),\n      r_id: envelope.renter?.r_id,\n    }];\n  }\n\n  // Process each recipient to extract their details\n  return envelope.recipients.map(recipient => ({\n    name: renterFullName(recipient.renter),\n    r_id: recipient.renter?.r_id,\n  }));\n};\n\nconst renterFullName = (renter: RenterInterface) => {\n  const name = renter?.full_name;\n  if (name) {\n    return name;\n  }\n  return `${renter?.first_name} ${renter?.last_name}`.trim();\n};\n\nconst renterId = (renter: { name: string, r_id: string }) => {\n  return renter.r_id;\n};\n\n\nconst envelopeStatusText = (envelope: EnvelopeInterface) => {\n  if (envelope.status === 'init') return {text: \"Init\", color: \"purple\"};\n  if (envelope.status === 'voided') return {text: \"Voided\", color: \"red\"};\n  if (envelope.status === 'in_progress') return {text: \"In Progress\", color: \"blue\", textColor: \"black\"};\n  if (envelope.status === 'expired') return {text: \"Expired\", color: \"red\"};\n  if (envelope.status === 'pending') return {text: \"Expired\", color: \"blue\"};\n  if (envelope.recipients?.some(r => !r.completed_at)) return {text: \"Pending signature\", color: \"orange\"};\n  if (envelope.completed_at) return {text: \"Completed\", color: \"green\"};\n  return {text: envelope.status, color: \"gray\"};\n};\n\nconst envelopeRecipientSignatures = (envelope: EnvelopeInterface) => {\n  // Check if there are no recipients in the envelope\n  if (!envelope.recipients?.length) {\n    return [{\n      signature: envelope.signature,\n      recipient: envelope.renter?.full_name ?? 'Unknown Renter',\n      name: envelope.renter?.full_name ?? 'Unknown Renter',\n    }];\n  }\n\n  // Process each recipient to extract signature information\n  return envelope.recipients.map(recipient => ({\n    signature: recipient.signature,\n    recipient: recipient.recipient,\n    name: recipient.renter?.full_name ?? 'Unknown Renter',\n  }));\n};\n\nconst attachmentImage = (attachment) => {\n  return attachment?.document_images?.[0];\n};\n\nconst openInNewTab = (url) => {\n  window.open(url, '_blank', 'noreferrer');\n};\n\nconst hasPendingSigners = (envelope: EnvelopeInterface) => {\n  return pendingSigners(envelope).length > 0;\n};\n\nconst pendingSigners = (envelope: EnvelopeInterface) => {\n  return envelope.recipients.filter((r) => !r.completed_at);\n};\nconst openEnvelopInfoDialog = (envelope: EnvelopeInterface) => {\n  currentWorkingEnvelope.value = envelope;\n  envelopInfoDialog.value = true;\n};\n\nconst openVoidEnvelopeDialog = (envelope: EnvelopeInterface) => {\n  currentWorkingEnvelope.value = envelope;\n  voidEnvelopeDialog.value = true;\n};\n\n\nconst openReminderDialog = (envelope: EnvelopeInterface) => {\n  currentWorkingEnvelope.value = envelope;\n\n  const pendingSignersData = pendingSigners(envelope);\n\n  if (pendingSignersData.length === 0) {\n    return alert(\"No pending signers for this envelope!\");\n  }\n\n  reminderData.value.recipients = pendingSignersData.map(signer => ({\n    email: signer.recipient,\n    label: `${signer.renter?.full_name ?? 'Unknown Name'} (${signer.recipient})`,\n    send: true,\n  }));\n\n  reminderDialog.value = true;\n};\n\nconst voidEnvelopeCommit = async (envelope: EnvelopeInterface) => {\n  await voidEnvelope(envelope);\n  voidEnvelopeDialog.value = false;\n  currentWorkingEnvelope.value = null;\n\n  // Wait before fetching new data\n  setTimeout(() => getEnvelopes(), 300);\n};\n\nconst sendReminderInit = () => {\n  reminderData.value.recipients.forEach((r) => {\n    if (r.send) {\n      sendEnvelopeReminder({\n        envelope: currentWorkingEnvelope.value,\n        email: r.email,\n      });\n    }\n  });\n};\n</script>\n","import {useStore} from 'vuex';\nimport {computed} from 'vue';\nimport {default as dayjs} from 'dayjs';\nimport isSameOrBefore from 'dayjs/plugin/isSameOrBefore';\nimport {pluralize} from \"@/utils/text\";\n\ndayjs.extend(isSameOrBefore);\n\n\nexport function useSubscription() {\n    const store = useStore();\n\n\n    const enforceSubscription = computed(() => store.getters['subscriptions/enforceSubscription']);\n    const customersLoading = computed(() => store.getters['renters/rentersLoading']);\n\n    const hasActiveSubscription = computed(() => store.getters['subscriptions/hasActiveSubscription']);\n    const subscriptionPlans = computed(() => store.getters['subscriptions/plans']);\n    const subscriptionPlan = computed(() => store.getters['subscriptions/subscriptionPlan']);\n    const subscription = computed(() => store.getters['subscriptions/subscription']);\n    const user = computed(() => store.getters['auth/user']);\n    const company = computed(() => store.getters['company/company']);\n    const stripeSubscriptionObject = computed(() => store.getters['stripe/stripeSubscriptionObject']);\n    const subscriptionsLoading = computed(() => store.getters['subscriptions/loading']);\n    const subscriptionEndDate = computed(() => store.getters['subscriptions/subscriptionEndDate']);\n    const hasPastDueSubscription = computed(() => store.getters['subscriptions/hasPastDueSubscription']);\n    const hasPausedSubscription = computed(() => store.getters['subscriptions/hasPausedSubscription']);\n\n    const stripeTrialDate = computed(() => subscription.value?.trial_ends_at);\n\n    const subscriptionFeatures = {\n        seats: {\n            basic: 2,\n            standard: 5,\n            premium: 20,\n        },\n        listings: {\n            basic: 5,\n            standard: 50,\n            premium: 150,\n        },\n        locations: {\n            basic: 1,\n            standard: 2,\n            premium: 2,\n        },\n        carSharingConnections: {\n            basic: 1,\n            standard: 5,\n            premium: 10,\n        },\n        smartCarConnections: {\n            basic: 1,\n            standard: 5,\n            premium: 10,\n        },\n        orders: {\n            basic: 5,\n            standard: 50,\n            premium: 20,\n        },\n    }\n\n    const subscriptionStatus = computed(() => {\n        const stripeStatus = subscription.value?.stripe_status;\n\n        if (stripeStatus) return stripeStatus;\n\n        if (user.value?.on_trial) return 'trialing';\n\n        return 'inactive';\n    });\n\n    const trialEndDateRaw = computed(() => {\n        return company.value?.trial_ends_at ?? stripeTrialDate.value;\n    });\n\n    const planIncludes = {\n        premium: {\n            api: true,\n            sso: true,\n            coupons: true,\n            additional_scripts: true,\n            custom_domain: true,\n            custom_tos: true,\n            listing_exports: true,\n            listing_imports: true,\n            esign: true,\n            webhooks: true,\n            barcodes: true,\n            custom_checkout_fields: true,\n        },\n        standard: {\n            sso: true,\n            coupons: true,\n            custom_tos: true,\n            listing_exports: true,\n            listing_imports: true,\n            esign: true,\n            barcodes: true,\n            custom_checkout_fields: true,\n        },\n        basic: {\n            // esign: true,\n        },\n    }\n\n\n    const cancelSubscription = async () => {\n        return store.dispatch('subscriptions/cancelSubscription');\n    }\n\n    const cancelSubscriptionStripePortal = async () => {\n        return store.dispatch('subscriptions/cancelSubscriptionStripePortalUrl');\n    }\n\n    const endTrial = async () => {\n        return store.dispatch('subscriptions/endTrial');\n    }\n\n    const switchPlan = async (plan: string) => {\n        return store.dispatch('subscriptions/switchPlan', plan);\n    }\n\n    const resumeSubscription = async () => {\n        return store.dispatch('subscriptions/resumeSubscription');\n    }\n\n    const addSubscriptionAddon = async (addon: string) => {\n        return store.dispatch('subscriptions/addAddon', addon);\n    }\n    const removeSubscriptionAddon = async (addon: string) => {\n        return store.dispatch('subscriptions/removeAddon', addon);\n    }\n\n    const trialEndsMessage = computed(() => {\n        const rawDate = trialEndDateRaw.value;\n\n        // Check if rawDate is valid\n        if (!rawDate || !dayjs(rawDate).isValid() || subscriptionStatus.value === 'active') {\n            return 'Trial has ended';\n        }\n\n        const trialDate = dayjs(rawDate);\n        const trialDateFmt = trialDate.format('MMMM D, YYYY');\n\n        // Determine if the trial has already ended\n        const status = trialDate.isSameOrBefore(dayjs()) ? 'ended' : 'ends';\n\n        return `Trial ${status} ${trialDateFmt}`;\n    });\n\n    const stripeEndDate = computed(() => {\n        const ends_at = subscription.value?.ends_at;\n        if (!ends_at) return;\n        return dayjs(ends_at).format('MMMM D, YYYY');\n    });\n\n    const inGracePeriod = computed(() => {\n        const endDate = subscription.value?.ends_at;\n        const status = subscriptionStatus.value;\n\n        if (!endDate) return false;\n\n        return !(status === 'canceled' && dayjs(endDate).diff(dayjs()) <= 0);\n    });\n\n\n    const inTrial = computed((): boolean => {\n        const trialDate = user?.value?.on_trial;\n\n        if (trialDate) return true;\n\n        if (subscriptionStatus.value === 'trialing') return true;\n        if (subscriptionStatus.value === 'active') return false;\n\n        if (stripeTrialDate.value) {\n            return dayjs(stripeTrialDate.value).diff(dayjs()) > 0;\n        }\n\n        return false;\n    });\n\n    const isTrialing = computed((): boolean => {\n        return subscriptionStatus.value === 'trialing';\n    })\n\n    const trialEndDate = computed(() => {\n\n        if (!trialEndDateRaw.value) {\n            return 'N/A';\n        }\n\n        return dayjs(trialEndDateRaw.value).format('MMMM D, YYYY');\n    });\n\n\n    const currentStripeSubscriptionObjectRenewalDate = computed(() => {\n        const date = stripeSubscriptionObject.value?.current_period_end;\n        const status = stripeSubscriptionObject.value?.status;\n\n        if (!date) return null;\n        if (status === 'canceled') return null;\n\n        return dayjs(date * 1000).format('MMMM D, YYYY');\n    });\n\n    const currentStripeSubscriptionObjectPlanAmount = computed(() => {\n        const amount = stripeSubscriptionObject.value?.plan?.amount;\n\n        if (!amount) return '$0';\n\n        if (amount % 100 === 0) {\n            return `$${(amount * 0.01).toFixed(0)}`;\n        }\n\n        return `$${(amount * 0.01).toFixed(2)}`;\n    });\n\n    const currentStripeSubscriptionObjectPlanInterval = computed(() => {\n        return stripeSubscriptionObject.value?.plan?.interval ?? 'month';\n    });\n\n    const includedInSubscription = (topic: string): boolean => {\n        if (!enforceSubscription.value || inTrial.value) return true;\n        if (!hasActiveSubscription.value) return false;\n\n        // Safely get the subscription plan in lowercase\n        const plan = subscriptionPlan.value?.toLowerCase() || '';\n\n        // Ensure plan exists in planIncludes\n        const planFeatures = planIncludes[plan] ?? null;\n        if (!planFeatures) return false;\n\n        // Check if the topic is included in the plan\n        return planFeatures[topic] ?? false;\n    };\n\n\n    const planIncludesApi = computed(() => {\n        if (!enforceSubscription.value) return true;\n\n        if (inTrial.value && !hasActiveSubscription.value) {\n            return true;\n        }\n\n        if (!hasActiveSubscription.value) {\n            return false;\n        }\n\n        return planIncludes?.[subscriptionPlan.value]?.api ?? false;\n    })\n\n\n    const trialDaysLeft = computed((): number => {\n\n        if (!trialEndDateRaw.value) {\n            return 0;\n        }\n\n        const daysLeft = dayjs(trialEndDateRaw.value).diff(dayjs(), 'days', true);\n        return daysLeft > 0 ? Math.ceil(daysLeft) : 0; // Round up\n    })\n\n    const trialDaysLeftPercent = computed((): number => {\n        return trialDaysLeft.value === 0 ? 0 : Math.round((trialDaysLeft.value / 14) * 100);\n    });\n\n    const trialDaysLeftMessage = computed((): string => {\n        if (hasActiveSubscription.value) {\n            const plan = subscriptionPlan.value\n                ? `${subscriptionPlan.value.charAt(0).toUpperCase()}${subscriptionPlan.value.slice(1)}`\n                : 'Unknown';\n            return `Membership: ${plan} Plan`;\n        }\n        if (trialDaysLeft.value <= 0) {\n            return 'Your trial has ended';\n        }\n        return `You have ${trialDaysLeft.value} ${pluralize(trialDaysLeft.value, 'day')} left on your trial.`;\n    })\n\n    const trialDaysClass = computed(() => ({\n        'text-danger': trialDaysLeft.value === 0,\n        'text-warning': trialDaysLeft.value < 2,\n    }));\n\n    const currentPlanDetails = computed(() => {\n        return subscriptionPlans.value.find((p) => p.name === subscriptionPlan.value);\n    });\n\n    const currentPlanBullets = computed(() => {\n        return currentPlanDetails.value?.description.bullets;\n    });\n\n    const seatLimitReached = computed(() => {\n        if (!enforceSubscription.value) return false;\n\n        if (inTrial.value && !hasActiveSubscription.value) {\n            return false;\n        }\n\n        if (!hasActiveSubscription.value) {\n            return true;\n        }\n\n        return (currentPlanDetails.value?.seats !== -1)\n            && company.value?.seat_count >= currentPlanDetails.value?.seats;\n    })\n\n    const seatLimitReachedMessage = computed(() => {\n        if (!enforceSubscription.value) return 'You need a subscription plan to add seats.';\n        return `You've reached your max seats of <b>${currentPlanDetails.value?.seats}</b> for your plan.`;\n    });\n\n\n    const listingLimitReachedMessage = computed(() => {\n        if (!enforceSubscription.value) return 'You need a subscription plan to add listings.';\n        return `You've reached your max listings of <b>${currentPlanDetails.value?.listings}</b> for your plan.`;\n    });\n\n    const listingLimitReached = computed(() => {\n        if (!enforceSubscription.value) return false;\n\n        if (inTrial.value && !hasActiveSubscription.value) {\n            return false;\n        }\n\n        if (!hasActiveSubscription.value) {\n            return true;\n        }\n\n        return (currentPlanDetails.value?.listings !== -1)\n            && company.value?.listings >= currentPlanDetails.value?.listings;\n    });\n\n    const planSupportedFeatureCounts = computed(() => {\n        const plan = subscriptionPlan.value;\n\n        return {\n            listings: subscriptionFeatures.listings[plan],\n            locations: subscriptionFeatures.locations[plan],\n            carSharingConnections: subscriptionFeatures.carSharingConnections[plan],\n            smartCarConnections: subscriptionFeatures.smartCarConnections[plan],\n            orders: subscriptionFeatures.orders[plan],\n            seats: subscriptionFeatures.seats[plan],\n        }\n    });\n\n    return {\n        subscription,\n        seatLimitReached,\n        seatLimitReachedMessage,\n        subscriptionEndDate,\n        currentPlanBullets,\n        subscriptionsLoading,\n        hasActiveSubscription,\n        hasPausedSubscription,\n        subscriptionStatus,\n        subscriptionPlan,\n        subscriptionPlans,\n        enforceSubscription,\n        customersLoading,\n        inTrial,\n        isTrialing,\n        planIncludesApi,\n        trialEndDate,\n        currentStripeSubscriptionObjectRenewalDate,\n        currentStripeSubscriptionObjectPlanAmount,\n        currentStripeSubscriptionObjectPlanInterval,\n        stripeEndDate,\n        inGracePeriod,\n        trialDaysLeftMessage,\n        trialDaysLeft,\n        trialDaysLeftPercent,\n        trialDaysClass,\n        trialEndsMessage,\n        listingLimitReachedMessage,\n        listingLimitReached,\n        hasPastDueSubscription,\n        planSupportedFeatureCounts,\n        currentPlanDetails,\n        addSubscriptionAddon,\n        removeSubscriptionAddon,\n        resumeSubscription,\n        endTrial,\n        switchPlan,\n        cancelSubscription,\n        cancelSubscriptionStripePortal,\n        includedInSubscription,\n    }\n}","<template>\n  <div>\n    <v-tabs v-model=\"documentsTab\">\n      <v-tab>Contracts</v-tab>\n      <v-tab>Invoices</v-tab>\n      <v-tab v-if=\"userHasRole('beta-tester-1')\">Quotes</v-tab>\n    </v-tabs>\n\n    <v-window v-model=\"documentsTab\">\n      <v-window-item>\n        <div class=\"mx-5 mt-5\">\n          <v-expansion-panels style=\"border-top: none;\">\n            <v-expansion-panel>\n              <v-expansion-panel-title>\n                <template v-slot:default=\"{ expanded }\">\n                  <div class=\"grid grid-cols-4 gap-2\">\n                    <div class=\"col-4\">\n                      Templates\n                    </div>\n                    <div class=\"col-8\">\n                      <v-fade-transition hide-on-leave>\n                        <div v-if=\"!expanded\">\n                          ({{ validTemplates.length }} {{ $t('templates') }})\n                        </div>\n                      </v-fade-transition>\n                    </div>\n                  </div>\n                </template>\n\n              </v-expansion-panel-title>\n              <v-expansion-panel-text>\n                <v-card :loading=\"documentsLoading.get\" variant=\"flat\">\n                  <the-help-link url=\"https://help.fleetwire.io/en/article/what-is-automatic-e-sign-1o5wfxk/\"/>\n                  <v-alert v-if=\"!includedInSubscription('esign')\" border=\"bottom\" class=\"card-alert-full\" density=\"compact\" type=\"warning\">\n                    You plan does not include eSign rental agreements.\n                    <v-btn :to=\"{name: 'settings.account'}\" class=\"float-right\" size=\"x-small\">Upgrade</v-btn>\n                  </v-alert>\n\n                  <v-card-title>\n                    <div class=\"flex\">\n                      Document Templates\n                      <v-btn size=\"small\" variant=\"text\" @click=\"learnMoreDialog = true;\">\n                        <v-icon size=\"small\">mdi-help-circle</v-icon>\n                      </v-btn>\n                      <v-spacer/>\n                      <v-btn :disabled=\"!planIncludesESign\" class=\"mt-2\" size=\"small\" @click=\"createTemplateInit()\">\n                        <v-icon class=\"mr-1\" size=\"small\">mdi-plus</v-icon>\n                        {{ $t('template') }}\n                      </v-btn>\n                    </div>\n                  </v-card-title>\n                  <v-card-text>\n                    <TemplatesTableList :templates=\"templates\"/>\n                  </v-card-text>\n                </v-card>\n              </v-expansion-panel-text>\n            </v-expansion-panel>\n          </v-expansion-panels>\n        </div>\n\n\n        <ContractsTable/>\n      </v-window-item>\n      <v-window-item>\n        <v-card>\n          <div class=\"grid grid-cols-3 gap-2 mx-4 my-10\">\n            <div>\n              <v-card>\n                <v-card-title>\n                  Number of Invoices\n                </v-card-title>\n                <v-card-text>\n                  {{ orderDocumentsInvoicesFiltered.length }}\n                </v-card-text>\n              </v-card>\n            </div>\n            <div>\n              <v-card>\n                <v-card-title>\n                  Paid Amount\n                </v-card-title>\n                <v-card-text>\n                  {{ formatMoneyDisplayV2(invoicePaidAmount) }}\n                </v-card-text>\n              </v-card>\n            </div>\n            <div>\n              <v-card>\n                <v-card-title>\n                  Turnover\n                </v-card-title>\n                <v-card-text>\n                  {{ formatMoneyDisplayV2(invoiceTotalAmount) }}\n                </v-card-text>\n              </v-card>\n            </div>\n          </div>\n          <div v-if=\"orderDocumentsInvoicesFiltered.length === 0\" class=\"text-center border rounded p-4\">\n            No Invoices found\n          </div>\n          <v-data-table\n            v-else\n            :headers=\"orderDocumentsHeaders\"\n            :items=\"orderDocumentsInvoicesFiltered\"\n            :items-per-page=\"50\"\n            :mobile-breakpoint=\"0\"\n          >\n            <template v-slot:item.title=\"{ item }\">\n              <div class=\"h-100 content-center\">\n                <router-link :to=\"{name: 'documents.show', params: { uuid: item.uuid}}\">\n                  {{ item.title }}\n                </router-link>\n              </div>\n            </template>\n            <template v-slot:item.order=\"{ item }\">\n              <div class=\"h-100 content-center\">\n                <router-link v-if=\"item?.order?.b_id \" :to=\"{name: 'orders.single', params: { b_id: item?.order?.b_id }}\">\n                  {{ item?.order?.b_id }}\n                </router-link>\n              </div>\n            </template>\n            <template v-slot:item.customer=\"{ value }\">\n              <div class=\"h-100 content-center\">\n                <router-link v-if=\"value?.r_id\" :to=\"{name: 'customers.single', params: { r_id: value.r_id }}\">\n                  {{ value.r_id }}\n                </router-link>\n              </div>\n            </template>\n            <template v-slot:item.paid_in_cents=\"{ item }\">\n              <div class=\"h-100 content-center\">\n                {{ formatMoneyDisplayV2(item.paid_in_cents) }}\n              </div>\n            </template>\n            <template v-slot:item.grand_total_with_tax_in_cents=\"{ item }\">\n              <div class=\"h-100 content-center\">\n                {{ formatMoneyDisplayV2(item.grand_total_with_tax_in_cents) }}\n              </div>\n            </template>\n            <template v-slot:item.status=\"{ value }\">\n              <div class=\"h-100 content-center\">\n                {{ value }}\n              </div>\n            </template>\n            <template v-slot:item.date=\"{ value }\">\n              <div class=\"h-100 content-center\">\n                {{ value }}\n              </div>\n            </template>\n            <template v-slot:item.confirmed=\"{ value }\">\n              <div class=\"h-100 content-center\">\n                {{ value }}\n              </div>\n            </template>\n          </v-data-table>\n        </v-card>\n      </v-window-item>\n      <v-window-item>\n        <v-card>\n          <div v-if=\"orderDocuments.length === 0\" class=\"text-center border rounded p-4\">\n            No contracts found\n          </div>\n          <v-data-table\n            v-else\n            :headers=\"orderDocumentsHeaders\"\n            :items=\"orderDocumentsQuotesFiltered\"\n            :items-per-page=\"50\"\n            :mobile-breakpoint=\"0\"\n          >\n            <template v-slot:item.title=\"{ item }\">\n              <router-link :to=\"{name: 'documents.show', params: { uuid: item.uuid}}\">\n                {{ item.title }}\n              </router-link>\n            </template>\n            <template v-slot:item.customer=\"{ item }\">\n              <router-link :to=\"{name: 'customers.single', params: { r_id: renterId(item.customer)}}\">\n                {{ renterName(item.customer) }}\n              </router-link>\n            </template>\n            <template v-slot:item.grand_total_in_cents=\"{ item }\">\n              ${{ formatMoney(item.grand_total_in_cents) }}\n            </template>\n            <template v-slot:item.grand_total_with_tax_in_cents=\"{ item }\">\n              ${{ formatMoney(item.grand_total_with_tax_in_cents) }}\n            </template>\n          </v-data-table>\n        </v-card>\n      </v-window-item>\n    </v-window>\n\n    <v-dialog v-model=\"learnMoreDialog\" max-width=\"600\">\n      <v-card>\n        <v-card-title class=\"text-h5\">What are document templates?</v-card-title>\n        <v-card-text>\n          <div>\n            Here you can upload a document and insert variable placeholders that will automatically fill in once a\n            customer makes a reservation. These are called document templates. You can set up placeholders such as name,\n            email, booking dates, vehicle info, signatures, attachments, etc. Once customers book a vehicle, Fleetwire\n            can email them a link to their e-sign envelope. We will email you a complete copy for your records upon\n            completion.\n          </div>\n        </v-card-text>\n        <v-card-actions>\n          <TheHelpLink url=\"https://help.fleetwire.io/en/article/esign-1o5wfxk/?bust=1643742268392\"/>\n          <v-spacer/>\n          <v-btn @click=\"learnMoreDialog = false;\">\n            {{ $t('okay') }}\n          </v-btn>\n        </v-card-actions>\n      </v-card>\n    </v-dialog>\n\n\n  </div>\n</template>\n\n<script lang=\"ts\">\nimport {defineAsyncComponent, ref, watch} from 'vue';\nimport {mapActions, mapGetters, useStore} from 'vuex';\nimport {EventBus} from '@/plugins/eventBus';\nimport {Form} from '@/plugins/FWForms/index';\nimport subscriptionMixin from '@/mixins/subscription';\nimport {useDateFormatter} from '@/composables/useDate';\nimport {useMoneyFormatter} from '@/composables/useMoneyFormatter';\nimport {useAppSettings} from '@/composables/useAppSettings';\nimport {useEnvelope} from '@/composables/useEnvelope';\nimport ContractsTable from '@/views/documents/ContractsTable.vue';\nimport {RenterInterface} from '@/types';\nimport {useSubscription} from '@/composables/useSubscription';\nimport {useTemplate} from '@/composables/useTemplate';\n\nconst TemplatesTableList = defineAsyncComponent(() => import('@/components/dashboard/documents/TemplatesTableList.vue'));\n\n\nexport default {\n  name: 'TheDocumentsDashboardHome',\n\n  setup() {\n    const store = useStore();\n    const {formatMoneyDisplayV2, formatMoney} = useMoneyFormatter();\n    const {formatRentalDate} = useDateFormatter();\n    const {sendEnvelopeReminder, voidEnvelope, getEnvelopes} = useEnvelope();\n    const {includedInSubscription} = useSubscription();\n    const {fetchTemplates} = useTemplate();\n\n    const {userHasRole} = useAppSettings();\n\n\n    const documentsTab = ref(0);\n    const learnMoreDialog = ref(false);\n    const envelopInfoDialog = ref(false);\n    const voidEnvelopeDialog = ref(false);\n    const dataTableOptionStatus = ref('all');\n\n\n    const orderDocumentsHeaders = [\n      {title: 'Title', sortable: false, key: 'title'},\n      {title: 'Booking', key: 'order'},\n      {title: 'Customer', key: 'customer'},\n      {title: 'Status', key: 'status'},\n      {title: 'Date', key: 'date'},\n      {title: 'Total w/tax', key: 'grand_total_with_tax_in_cents'},\n      {title: 'Paid', key: 'paid_in_cents'},\n      {title: 'Confirmed', key: 'confirmed'},\n    ];\n\n\n    const reminderData = ref({\n      recipients: [],\n    });\n\n    watch(documentsTab, (val) => {\n      console.dir(val);\n      if (val === 1) {\n        store.dispatch('order/getAllOrderDocuments');\n      }\n    });\n\n\n    const envelopesFilter = ref({\n      complete: 'all',\n    });\n\n    const nameChangeErrors = ref([]);\n\n\n    const reminderDialog = ref(false);\n\n    const currentWorkingEnvelope = ref({});\n\n    const form = ref(new Form());\n\n\n    const envelopeVoided = (envelope) => {\n      return envelope.status === 'voided';\n    };\n\n    return {\n      learnMoreDialog,\n      envelopInfoDialog,\n      voidEnvelopeDialog,\n      orderDocumentsHeaders,\n      dataTableOptionStatus,\n      documentsTab,\n      envelopesFilter,\n      nameChangeErrors,\n      reminderData,\n      reminderDialog,\n      currentWorkingEnvelope,\n      form,\n      fetchTemplates,\n      includedInSubscription,\n      envelopeVoided,\n      userHasRole,\n      sendEnvelopeReminder,\n      voidEnvelope,\n      getEnvelopes,\n      formatMoney,\n      formatMoneyDisplayV2,\n      formatRentalDate,\n    };\n  },\n\n  components: {\n    ContractsTable,\n    TemplatesTableList,\n  },\n\n  mixins: [\n    subscriptionMixin,\n  ],\n\n  watch: {\n    $route() {\n      if (this.device === 'mobile' && this.secondaryNavViews.listingImportNav) {\n        this.toggleSecondaryImportNav();\n      }\n    },\n  },\n\n  created() {\n    if (this.planIncludesESign) {\n      this.fetchTemplates();\n    }\n    EventBus.$on('create-template-success', (template) => {\n      if (template.uuid) {\n        this.$router.push({name: 'documents.prepare', params: {uuid: template.uuid}}).catch(err => {\n        });\n      }\n    });\n    EventBus.$on('envelope-reminder-success', () => {\n      this.reminderDialog = false;\n      this.reminderData = {\n        recipients: [],\n      };\n    });\n  },\n\n  computed: {\n    ...mapGetters({\n      device: 'app/device',\n      secondaryNavViews: 'app/secondaryNavViews',\n      templates: 'document/templates',\n      documents: 'document/documents',\n      documentsLoading: 'document/loading',\n      envelopes: 'envelope/envelopes',\n      orderDocuments: 'order/documents',\n    }),\n    validTemplates() {\n      // Return templates that have documents (truthy value)\n      return this.templates.filter(template => template.documents);\n    },\n    templatesWithoutDocuments() {\n      // Return templates where documents exist (including null)\n      return this.templates.filter(template => template.documents === null);\n    },\n    orderDocumentsQuotesFiltered() {\n      return this.orderDocuments.filter((d) => d.type === 'Document::Quote');\n    },\n    orderDocumentsInvoicesFiltered() {\n      return this.orderDocuments.filter((d) => d.type === 'Document::Invoice');\n    },\n    invoicePaidAmount() {\n      // Filtering paid and overpaid invoices\n      const paidInvoices = this.orderDocumentsInvoicesFiltered.filter(invoice => {\n        const invoiceStatus = invoice.status?.toLowerCase();\n        return invoiceStatus === 'paid' || invoiceStatus === 'overpaid';\n      });\n\n      // Summing the paid amount in cents from the filtered invoices\n      return paidInvoices.reduce((total, invoice) => total + (invoice.paid_in_cents ?? 0), 0);\n    },\n    invoiceTotalAmount() {\n      // Summing the grand total with tax in cents from the filtered invoices\n      return this.orderDocumentsInvoicesFiltered.reduce((total, invoice) => total + (invoice.grand_total_with_tax_in_cents ?? 0), 0);\n    }\n  },\n\n  methods: {\n    ...mapActions({\n      toggleSecondaryImportNav: 'app/toggleSecondaryImportNav',\n      createTemplate: 'document/createTemplate',\n    }),\n    bookingId(item) {\n      return item?.order?.b_id;\n    },\n    renterFullName(renter: RenterInterface) {\n      const name = renter?.full_name;\n      if (name) {\n        return name;\n      }\n      return `${renter?.first_name} ${renter?.last_name}`.trim();\n    },\n    recipients(envelope) {\n      // Check if there are no recipients in the envelope\n      if (!envelope.recipients?.length) {\n        return [{\n          name: this.renterFullName(envelope.renter),\n          r_id: envelope.renter?.r_id,\n        }];\n      }\n\n      // Process each recipient to extract their details\n      return envelope.recipients.map(recipient => ({\n        name: this.renterFullName(recipient.renter),\n        r_id: recipient.renter?.r_id,\n      }));\n    },\n\n    renterName(item: RenterInterface) {\n      return item.full_name;\n    },\n    renterId(renter: RenterInterface) {\n      return renter.r_id;\n    },\n    createTemplateInit() {\n      const templatesPending = this.templatesWithoutDocuments;\n\n      if (templatesPending.length === 0) {\n        this.createTemplate();\n        return;\n      }\n\n      const firstTemplate = templatesPending[0];\n\n      this.$router.push({name: 'documents.prepare', params: {uuid: firstTemplate.uuid}}).catch({});\n    },\n  },\n\n  beforeUnmount() {\n    this.$store.commit('envelope/SET_ALL_ENVELOPES', {\n      data: [],\n    });\n    this.$store.commit('order/SET_ORDER_DOCUMENTS', []);\n  },\n};\n</script>\n\n<style>\n.denser .v-btn:not(.v-btn--round).v-size--default {\n  height: 21px !important;\n}\n\n.denser .v-btn.v-size--default {\n  font-size: 10px !important;\n}\n\n.denser .v-btn-toggle .v-btn.v-btn.v-size--default {\n  min-width: 40px !important;\n}\n</style>\n","<template>\n  <div class=\"grid grid-cols-2 gap-5\">\n    <v-card class=\"mb-2\">\n      <v-card-text>\n        <div class=\"my-5\">\n          Upload your document here. In the next step you will be able to add variable placeholders to your documents.\n        </div>\n        <div v-if=\"!documentsUploadedSuccess\" class=\"dragBox\" v-bind=\"getRootProps()\">\n          <input v-bind=\"getInputProps()\"/>\n          <p v-if=\"isDragActive\">Drop the files here ...</p>\n          <p v-else>Drag and drop your file here, or click to select files</p>\n        </div>\n\n        <div v-else>\n          <div class=\"h-100 row align-items-center\">\n            <div class=\"col text-center\">\n              <v-img height=\"200\" src=\"/images/illustrations/my_files.svg\"/>\n              <h2 class=\"newCustomer__header\">Success</h2>\n              <p>Click next to add placeholders to your template.</p>\n            </div>\n          </div>\n        </div>\n\n        <div v-if=\"rejectedReasons.length\" class=\"mt-5\">\n          <v-alert density=\"comfortable\" type=\"error\">\n            <ul>\n              <li v-for=\"(reason, index) in rejectedReasons\" :key=\"index\">{{ reason }}</li>\n            </ul>\n          </v-alert>\n        </div>\n\n      </v-card-text>\n      <v-card-actions>\n        <v-btn :to=\"{name: 'documents.index'}\" size=\"small\" variant=\"text\">back</v-btn>\n        <v-spacer/>\n        <v-btn :disabled=\"!documentsUploadedSuccess\" :to=\"{name: 'documentsv2.fields', params: { uuid: documentUuid}}\" color=\"primary\">\n          Next\n        </v-btn>\n      </v-card-actions>\n    </v-card>\n  </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport {useStore} from 'vuex'\nimport {useRoute} from 'vue-router'\nimport axios from 'axios';\nimport type {FileRejectReason} from 'vue3-dropzone'\nimport {useDropzone} from 'vue3-dropzone';\nimport {ref} from 'vue';\n\ninterface GetUploadUrlParams {\n  document_uuid: string;\n  actor: string;\n  extension: string;\n  mime: string;\n}\n\ninterface UploadUrlResponse {\n  uploadUrl: string;\n}\n\nconst route = useRoute();\nconst store = useStore();\nconst token = store.getters['auth/token'];\nconst url = `/v1/templates/${route.params.uuid}/documents/1`;\nconst thePhotosUploading = ref([]);\nconst filesForS3 = ref([]);\nconst theTripPhotos = ref([]);\nconst templateDocs = ref({});\nconst uploadProgress = ref('');\nconst completing = ref(false);\nconst documentsUploadedSuccess = ref(false);\nconst rejectedReasons = ref([]);\nconst uploadUrls = ref([]);\n\nconst documentUuid = route.params.uuid as string;\n\n\nconst getUploadUrl = async (file: File, documentUuid: string) => {\n  // Extract the file extension and fallback if necessary\n  const extension = file.name.split('.').pop() || 'txt';\n\n  // Prepare the payload for the API\n  const payload: GetUploadUrlParams = {\n    document_uuid: documentUuid,\n    actor: 'host',\n    extension,\n    mime: file.type || 'application/octet-stream',\n  };\n\n  try {\n    const response = await fetch('https://tljgib4tw6.execute-api.us-west-1.amazonaws.com/default/TenantFileSignedUploadUrl', {\n      method: 'POST',\n      headers: {'Content-Type': 'application/json'},\n      body: JSON.stringify(payload),\n    });\n\n    if (!response.ok) {\n      console.error(`Failed to fetch upload URL. Status: ${response.status} - ${response.statusText}`);\n      return null;\n    }\n\n    const {uploadUrl}: UploadUrlResponse = await response.json();\n    return uploadUrl;\n  } catch (error) {\n    console.error('Error getting upload URL', error);\n    return null;\n  }\n};\n\nconst uploadS3Init = async () => {\n  thePhotosUploading.value = [];\n  uploadUrls.value = await Promise.all(filesForS3.value.map(file => getUploadUrl(file, documentUuid)));\n\n  console.dir('uploadUrls%%%');\n  console.dir(uploadUrls.value);\n  const filteredFiles = filesForS3.value.filter((_, index) => uploadUrls.value[index]);\n  await uploadS3(uploadUrls.value, filteredFiles);\n};\n\nconst createAwsAxiosInstance = () => {\n  return axios.create({\n    transformRequest: (data, headers) => {\n      if (headers?.common?.Authorization) {\n        delete headers.common.Authorization;\n      }\n      return data;\n    },\n  });\n};\n\nconst uploadS3 = async (filesPaths: string[], filteredFiles: File[]) => {\n  const awsAxios = createAwsAxiosInstance();\n  console.dir('uploadS3');\n  console.dir(filesPaths);\n  console.dir(filteredFiles);\n  await Promise.all(filteredFiles.map((file, i) => uploadFileToS3(awsAxios, filesPaths[i], file, i)));\n};\n\nconst uploadFileToS3 = async (awsAxios, filePath: string, file: File, i: number) => {\n  console.dir('initializeUploadData', i);\n\n\n  try {\n    console.dir(filePath);\n    console.dir(file);\n    await awsAxios.put(filePath, file, {\n      onUploadProgress: event => {\n        console.dir(event);\n      },\n      headers: {'Content-Type': file.type},\n    });\n  } catch (error) {\n    console.error('Error uploading file', error);\n  } finally {\n    console.dir('finally');\n  }\n};\n\n\nfunction onDrop(acceptedFiles: File[], rejectReasons: FileRejectReason[]) {\n  rejectedReasons.value = [];\n  console.log('acceptedFiles', acceptedFiles)\n  console.log('rejectReasons', rejectReasons)\n\n  if (rejectReasons.length > 0) {\n    rejectReasons.forEach(reason => {\n      if (!rejectedReasons.value.includes(reason.errors[0].message)) {\n        rejectedReasons.value.push(reason.errors[0].message);\n      }\n    });\n  }\n\n  filesForS3.value = acceptedFiles;\n  uploadS3Init().then(() => {\n    uploadDocument();\n  });\n}\n\nconst uploadDocument = async () => {\n  if (uploadUrls.value.length > 0) {\n\n    const uploadUrlsClean = uploadUrls.value.map(url => {\n      return url.split('?')[0];\n    });\n\n    const formData = new FormData();\n    formData.append('file_path', uploadUrlsClean[0]);\n    formData.append('original_name', filesForS3.value[0].name);\n    try {\n      const response = await axios.post(`/v1/templates/${documentUuid}/documents/uploaded`, formData);\n      console.dir(response);\n      documentsUploadedSuccess.value = true;\n      templateDocs.value = response.data.templateDocs;\n    } catch (error) {\n      console.dir(error);\n    }\n  }\n};\n\n\nconst {getRootProps, getInputProps, isDragActive,} = useDropzone({\n  onDrop,\n  maxSize: 10000000, // 10MB\n  maxFiles: 1,\n  accept: 'application/pdf',\n});\n</script>\n\n<style>\n.fw-file-drop {\n  position: relative;\n  border: 3px dashed #a7d2b8 !important;\n  border-radius: 10px;\n  box-shadow: 0 0 25px -20px #333;\n  display: flex;\n  flex-wrap: wrap;\n  justify-content: flex-start;\n  align-items: flex-start;\n  margin: 0 0 20px;\n  overflow: auto;\n  cursor: pointer !important;\n  height: 200px;\n  padding-top: 10px;\n}\n\n.fw-file-drop:hover {\n  border: 3px dashed #5b7365 !important;\n}\n\n.fw-file-drop__inner {\n  display: block;\n  position: relative;\n  width: 100%;\n  height: 100%;\n  margin: auto;\n  overflow: auto;\n}\n\n.fw-file-drop input {\n  width: 100%;\n  opacity: 0;\n  height: 100%;\n  left: 0;\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n}\n\n.fw-file-drop svg {\n  margin: auto\n}\n\n.fw-file-drop label {\n  width: 100%;\n  font-size: 22px;\n  font-weight: 400;\n\n  display: inline-block;\n  max-width: 100%;\n  margin-bottom: 5px;\n}\n\n.dragBox {\n  width: 100%;\n  margin: 0 auto;\n  position: relative;\n  text-align: center;\n  font-weight: bold;\n  line-height: 95px;\n  color: #999;\n  border: 2px dashed #ccc;\n  display: inline-block;\n  transition: transform 0.3s;\n  border-radius: 10px;\n}\n\n.dragBox.active {\n  border: 2px dashed #5a81e0;\n}\n\n.dragBox input[type=\"file\"] {\n  position: absolute;\n  height: 100%;\n  width: 100%;\n  opacity: 0;\n  top: 0;\n  left: 0;\n}\n</style>\n","import {useStore} from 'vuex';\nimport {computed} from 'vue';\nimport {UpdateOrderPayload} from '@/store/modules/order';\nimport {OrderDocumentType, OrderLine} from '@/types';\n\n\nexport function useOrders() {\n    const store = useStore();\n\n\n    const orderLoading = computed<Record<string, boolean>>(() => store.getters['order/loading']);\n    const theNewOrder = computed(() => store.getters['order/order']);\n    const orderDialogs = computed(() => store.getters['order/orderDialogs']);\n    const orderDocument = computed<OrderDocumentType>(() => store.getters['order/document']);\n    const currentWorkingPricingWizardOrderLine = computed(() => store.getters['order/currentWorkingPricingWizardOrderLine']);\n\n\n    const orderAvailability = computed(() => store.getters['order/availability']);\n\n    const updateOrderLine = async (data) => {\n        return await store.dispatch('order/updateLine', data);\n    }\n\n    const deleteOrderDocument = async (documentUuid: string) => {\n        return await store.dispatch('order/deleteOrderDocument', documentUuid);\n    }\n\n    const setOrderDocument = async (data) => {\n        return store.commit('order/SET_ORDER_DOCUMENT', data);\n    }\n\n    const checkOrderAvailability = async (orderUuid: string) => {\n        return await store.dispatch('order/availability', orderUuid);\n    }\n\n    const getOrderItemModel = async (data) => {\n        return await store.dispatch('order/getOrderItemModel', data);\n    }\n\n    const getOrderDocuments = async (orderUuid: string) => {\n        return await store.dispatch('order/getOrderDocuments', orderUuid);\n    }\n\n    const getOrderDocument = async (documentUuid: string) => {\n        return await store.dispatch('order/getOrderDocument', documentUuid);\n    }\n\n    const updateOrderDocument = async (data) => {\n        return await store.dispatch('order/updateOrderDocument', data);\n    }\n\n    const getNewOrder = async () => {\n        return await store.dispatch('order/newOrder');\n    }\n\n    const addOrderLine = async (data: { orderUuid: string, line: OrderLine }) => {\n        return await store.dispatch('order/addLine', data);\n    }\n\n    /**\n     * Fetches a specific order by ID.\n     */\n    const getOrder = (id: string) => store.dispatch('order/getOrder', id);\n\n    const updateNewOrder = async (data: UpdateOrderPayload) => {\n        return await store.dispatch('order/update', data);\n    }\n\n    const setOrder = async (data) => {\n        console.dir(data);\n        return store.commit('order/SET_ORDER', data);\n    }\n\n    /**\n     * Removes an order line.\n     */\n    const removeOrderLine = (lineId: string) => {\n        return store.dispatch('order/removeLine', lineId);\n    };\n\n    /**\n     * Retrieves order lines safely.\n     */\n    const orderLines = computed<OrderLine[]>(() => theNewOrder.value?.lines || []);\n\n    const openPricingWizardDialog = (open: boolean = false, lineItem: OrderLine) => {\n        console.dir('openPricingWizardDialog');\n        console.dir(lineItem);\n        console.dir('^^^^^');\n        return store.commit('order/SET_OPEN_PRICING_WIZARD_DIALOG', {open, lineItem});\n    }\n\n    return {\n        orderLoading,\n        theNewOrder,\n        orderLines,\n        orderDialogs,\n        currentWorkingPricingWizardOrderLine,\n        orderAvailability,\n        orderDocument,\n        setOrderDocument,\n        checkOrderAvailability,\n        getNewOrder,\n        addOrderLine,\n        openPricingWizardDialog,\n        updateOrderLine,\n        getOrder,\n        setOrder,\n        updateNewOrder,\n        removeOrderLine,\n        getOrderDocuments,\n        getOrderDocument,\n        updateOrderDocument,\n        getOrderItemModel,\n        deleteOrderDocument,\n    }\n}","<template>\n  <div id=\"wrapper\" class=\"print-area\">\n    <div id=\"page\" section=\"documents\">\n      <div id=\"content\">\n        <div id=\"document\" class=\"document-quote\">\n          <div class=\"block\">\n            <div id=\"top\" class=\"\">\n              <div v-if=\"documentPaid\" id=\"stamp\">\n                <img id=\"paid\" alt=\"Stamp\" src=\"https://fleetwire.io/images/stamps/stamp-paid.png\">\n              </div>\n              <div v-if=\"company.logo\" id=\"logo-wrapper\">\n                <img id=\"logo\" :src=\"company.logo\" alt=\"Company Logo\">\n              </div>\n\n              <div class=\"lefter\">\n                <div id=\"user-info\" :class=\"editUser ? 'editing' :''\">\n                  <strong class=\"customer-name\">\n                    {{ customer.first_name }} {{ customer.last_name }}\n                  </strong>\n                  <v-btn\n                    v-if=\"!editUser\"\n                    class=\"absolute no-print\"\n                    size=\"small\"\n                    style=\"top: -5px;\"\n                    variant=\"text\"\n                    @click=\"editUser = true;\"\n                  >\n                    <v-icon size=\"x-small\">mdi-pencil</v-icon>\n                  </v-btn>\n                  <form action=\"#\">\n                    <div class=\"show-user flex\">\n                      <pre class=\"pre-address\" v-html=\"customerAddress\"></pre>\n                    </div>\n                    <div class=\"edit-user\">\n                      <v-textarea\n                        v-model=\"customerAddress\"\n                        hide-details\n                        label=\"Address\"\n                        name=\"input-7-4\"\n                        rows=\"2\"\n                        variant=\"outlined\"\n                      ></v-textarea>\n                      <div class=\"float-right mt-2\">\n                        <v-btn class=\"mr-2\" size=\"small\" variant=\"text\" @click=\"editUser = false;\">\n                          <v-icon size=\"small\">mdi-close</v-icon>\n                        </v-btn>\n                        <v-btn size=\"small\" variant=\"text\" @click=\"updateCustomerAddress(); editUser = false;\">Save\n                        </v-btn>\n                      </div>\n                    </div>\n                    <button style=\"display: none;\" type=\"submit\"></button>\n                  </form>\n                  <div class=\"customer-email\">{{ customer.email }}</div>\n                  <div class=\"additional-information\"></div>\n                </div>\n              </div>\n\n              <div class=\"righter\">\n                <div id=\"company-info\">\n                  <strong class=\"company-name\">{{ company.name }}</strong><br>\n                  <div v-if=\"companyAddress.address_1\">\n                    {{ companyAddress.address_1 }}<br>\n                    <span v-if=\"companyAddress.address_2\" class=\"block\">{{ companyAddress.address_2 }}</span>\n                    <span v-if=\"companyAddress.city\">{{ companyAddress.city }}, </span>\n                    <span v-if=\"companyAddress.state\">{{ companyAddress.state }} </span>\n                    <span v-if=\"companyAddress.postal_code\">{{ companyAddress.postal_code }} </span>\n                  </div>\n                  <span class=\"company-phone\">{{ company.phone_fmt || company.phone }}</span><br>\n                  <span class=\"company-email\">{{ company.email }}</span><br><br>\n                  <span class=\"financial-line-1\"></span><br>\n                  <span class=\"financial-line-2\"></span>\n                </div>\n              </div>\n            </div>\n          </div>\n\n          <div class=\"name-dates\">\n            <div class=\"grid grid-cols-2\">\n              <div class=\"\">\n                <h2 v-if=\"!editDocumentNumber\" class=\"table-form-title\">\n                  <span>{{ documentTitle }}</span>\n                  <v-btn v-if=\"!editDocumentNumber\" class=\"no-print\" size=\"small\" variant=\"text\" @click=\"editDocumentNumber = true;\">\n                    <v-icon size=\"small\">mdi-pencil</v-icon>\n                  </v-btn>\n                </h2>\n                <div v-if=\"editDocumentNumber\" class=\"flex\">\n                  <h2 class=\"table-form-title mr-2\">{{ documentType }} #</h2>\n                  <v-text-field\n                    v-model=\"documentNumber\"\n                    append-icon=\"mdi-content-save\"\n                    density=\"compact\"\n                    hide-details\n                    style=\"max-width: 100px;\"\n                    variant=\"outlined\"\n                    @keyup.enter=\"updateOrderDocumentNumber(); editDocumentNumber = !editDocumentNumber\"\n                    @click:append=\"updateOrderDocumentNumber(); editDocumentNumber = !editDocumentNumber\"\n                  ></v-text-field>\n                </div>\n              </div>\n\n              <div class=\"dates\">\n                <form action=\"#\">\n                  <div class=\"document-date\">\n                    <b>Date</b>\n                    <span>{{ formatRentalDate(orderDocument?.date, 'MMM DD, YYYY') }}</span>\n                    <v-dialog\n                      v-if=\"orderDocument?.date\"\n                      ref=\"dialog\"\n                      v-model=\"editDateDialog\"\n                      v-model:return-value=\"orderDocument.date\"\n                      persistent\n                      width=\"290px\"\n                    >\n                      <template v-slot:activator=\"{ props }\">\n                        <v-btn size=\"small\" v-bind=\"props\" variant=\"text\">\n                          <v-icon size=\"x-small\">mdi-pencil</v-icon>\n                        </v-btn>\n                      </template>\n                      <v-date-picker\n                        v-model=\"documentDate\"\n                        scrollable\n                      >\n                        <template v-slot:actions>\n                          <v-btn\n                            color=\"gray\"\n                            variant=\"text\"\n                            @click=\"editDateDialog = false\"\n                          >\n                            Cancel\n                          </v-btn>\n                          <v-btn\n                            color=\"primary\"\n                            variant=\"text\"\n                            @click=\"updateOrderDocumentDate()\"\n                          >\n                            OK\n                          </v-btn>\n                        </template>\n                        <v-spacer/>\n\n                      </v-date-picker>\n                    </v-dialog>\n                  </div>\n                </form>\n                <div class=\"starts-at\">\n                  <b>Pickup</b>\n                  <span v-if=\"orderDocument?.starts_at\">{{ formatRentalDate(orderDocument?.starts_at) }}</span>\n                </div>\n                <div class=\"stops-at\">\n                  <b>Return</b>\n                  <span v-if=\"orderDocument?.stops_at\">{{ formatRentalDate(orderDocument?.stops_at) }}</span>\n                </div>\n                <div class=\"stops-at\">\n                  <b>Booking ID</b>\n                  <span v-if=\"documentBookingId\">{{ documentBookingId }}</span>\n                </div>\n              </div>\n            </div>\n          </div>\n\n\n          <div id=\"products-table\">\n            <div>\n              <div class=\"\">\n                <form action=\"#\">\n                  <table class=\"table\">\n                    <tbody>\n                    <tr>\n                      <th class=\"auto-width\"></th>\n                      <th class=\"table-form-title\"></th>\n                      <th class=\"auto-width charge\"></th>\n                      <th class=\"text-right auto-width price\">Price</th>\n                      <th class=\"text-right vat\">Tax</th>\n                      <th class=\"text-right auto-width total\">Total</th>\n                    </tr>\n                    </tbody>\n                    <tbody>\n\n                    <tr v-for=\"(line) in orderDocument?.lines\" :key=\"line.uuid\" class=\"line\">\n                      <td class=\"auto-width quantity\">{{ line.quantity }}x</td>\n                      <td class=\"table-form-title\" colspan=\"1\">\n                        <div class=\"line-title\">\n                          {{ line.title }}\n                        </div>\n                        <div class=\"line-extra\">{{ line.extra_information }}</div>\n                        <div class=\"line-custom\"></div>\n                      </td>\n                      <td class=\"auto-width charge\">\n                        {{ line.charge_units }}\n                      </td>\n                      <td class=\"text-right auto-width price\">\n                        {{ formatMoneyDisplayV2(line.price_each_in_cents) }}\n                      </td>\n                      <td class=\"text-right auto-width tax\">\n                        {{ getTaxCategoryParentName(line) }}\n                      </td>\n                      <td class=\"text-right auto-width total\">\n                        {{ formatMoneyDisplayV2(line.price_in_cents) }}\n                      </td>\n                    </tr>\n                    </tbody>\n\n                    <tbody id=\"totals\">\n                    <tr class=\"reference\">\n                      <td class=\"print-hide\" colspan=\"3\" rowspan=\"100%\">\n                        <span v-if=\"!editReference\" class=\"printed-reference-text\">\n                          {{ orderReference }}\n                        </span>\n                        <v-btn v-if=\"!editReference\" class=\"no-print\" size=\"small\" variant=\"text\" @click=\"editReference = true\">\n                          <v-icon size=\"small\">mdi-pencil</v-icon>\n                        </v-btn>\n                        <v-btn\n                          v-if=\"!editReference && !orderReference\"\n                          class=\"no-print underline\"\n                          size=\"small\"\n                          variant=\"text\"\n                          @click=\"editReference = true;\"\n                        >\n                          Insert a reference\n                        </v-btn>\n                        <div v-if=\"editReference\">\n                          <v-textarea\n                            v-model=\"orderReference\"\n                            hide-details\n                            label=\"Reference\"\n                            name=\"input-7-4\"\n                            rows=\"5\"\n                            variant=\"outlined\"\n                          />\n                          <div class=\"float-right mt-2\">\n                            <v-btn :loading=\"orderLoading.update\" class=\"mr-2\" size=\"small\" variant=\"text\" @click=\"editReference = false;\">\n                              <v-icon size=\"small\">mdi-close</v-icon>\n                            </v-btn>\n                            <v-btn :loading=\"orderLoading.update\" size=\"small\" variant=\"text\" @click=\"updateOrderReference(); editReference = false;\">\n                              Save\n                            </v-btn>\n                          </div>\n                        </div>\n                      </td>\n                      <td class=\"print-show\" colspan=\"3\" rowspan=\"100%\">{{ orderReference }}</td>\n                      <td class=\"text-right subtotal\" colspan=\"2\">Subtotal</td>\n                      <td class=\"text-right subtotal\">{{ formatMoneyDisplayV2(orderDocument?.price_in_cents) }}</td>\n                    </tr>\n                    <tr v-if=\"orderDocument?.total_discount_in_cents > 0\">\n                      <td class=\"divider\" colspan=\"3\">\n                        <hr>\n                      </td>\n                    </tr>\n                    <tr v-if=\"orderDocument?.discount_in_cents > 0\" class=\"total\">\n                      <td class=\"text-right total\" colspan=\"2\">Discount</td>\n                      <td class=\"text-right total\">-{{ formatMoneyDisplayV2(orderDocument?.discount_in_cents) }}</td>\n                    </tr>\n                    <tr v-if=\"orderDocument?.coupon_discount_in_cents > 0\" class=\"total\">\n                      <td class=\"text-right total\" colspan=\"2\">Coupon</td>\n                      <td class=\"text-right total\">-{{\n                          formatMoneyDisplayV2(orderDocument?.coupon_discount_in_cents)\n                        }}\n                      </td>\n                    </tr>\n                    <tr v-if=\"orderDocument?.total_discount_in_cents > 0\" class=\"total\">\n                      <td class=\"text-right total\" colspan=\"2\">Total discount</td>\n                      <td class=\"text-right total\">-{{\n                          formatMoneyDisplayV2(orderDocument?.total_discount_in_cents)\n                        }}\n                      </td>\n                    </tr>\n                    <tr>\n                      <td class=\"divider\" colspan=\"3\">\n                        <hr>\n                      </td>\n                    </tr>\n                    <tr class=\"total\">\n                      <td class=\"text-right total\" colspan=\"2\">Total excl. taxes</td>\n                      <td class=\"text-right total\">{{ formatMoneyDisplayV2(orderDocument?.grand_total_in_cents) }}</td>\n                    </tr>\n                    <tr v-if=\"orderDocument?.total_tax_in_cents > 0\" class=\"tax\">\n                      <td class=\"text-right vat\" colspan=\"2\">Taxes</td>\n                      <td class=\"text-right vat\">{{ formatMoneyDisplayV2(orderDocument?.total_tax_in_cents) }}</td>\n                    </tr>\n                    <tr>\n                      <td class=\"divider\" colspan=\"3\">\n                        <hr>\n                      </td>\n                    </tr>\n                    <tr class=\"grand-total\">\n                      <td class=\"text-right bold grand-total\" colspan=\"2\">Total incl. taxes</td>\n                      <td class=\"text-right bold grand-total\">\n                        {{ formatMoneyDisplayV2(orderDocument?.grand_total_with_tax_in_cents) }}\n                      </td>\n                    </tr>\n                    <tr class=\"deposit\">\n                      <td class=\"text-right deposit\" colspan=\"2\">Security deposit</td>\n                      <td class=\"text-right deposit\">{{ formatMoneyDisplayV2(orderDocument?.deposit_in_cents) }}</td>\n                    </tr>\n                    <tr>\n                      <td class=\"divider\" colspan=\"3\">\n                        <hr>\n                      </td>\n                    </tr>\n                    <tr class=\"grand-total\">\n                      <td class=\"text-right bold grand-total\" colspan=\"2\">Paid</td>\n                      <td class=\"text-right bold grand-total\">{{\n                          formatMoneyDisplayV2(orderDocument?.paid_in_cents)\n                        }}\n                      </td>\n                    </tr>\n                    <tr class=\"grand-total\">\n                      <td class=\"text-right bold grand-total bold\" colspan=\"2\">Outstanding</td>\n                      <td class=\"text-right bold grand-total\">{{\n                          formatMoneyDisplayV2(orderDocument?.to_be_paid_in_cents)\n                        }}\n                      </td>\n                    </tr>\n                    <tr>\n                      <td colspan=\"100%\"><br></td>\n                    </tr>\n                    </tbody>\n                  </table>\n                  <button style=\"display: none;\" type=\"submit\"></button>\n                </form>\n              </div>\n\n              <div id=\"footer\" :class=\"footer.blocks ? '' : 'blank'\">\n                <div :class=\"addEditFooter ? 'editing' : 'view'\">\n                  <div v-if=\"!addEditFooter\" class=\"rx-content\" v-html=\"convertBlocksToHtml(footer.blocks)\"></div>\n                  <v-btn v-if=\"!addEditFooter\" class=\"float-right no-print\" size=\"x-small\" variant=\"text\" @click=\"addEditFooter = true;\">\n                    <span class=\"underline\">Add or edit footer</span>\n                  </v-btn>\n                  <div class=\"editor text-editor\">\n                    <div id=\"editorjs\"></div>\n                  </div>\n                  <v-btn v-if=\"addEditFooter\" class=\"text-right mt-2\" @click=\"updateFooter()\">Save</v-btn>\n                </div>\n              </div>\n              <button style=\"display: none;\" type=\"submit\"></button>\n            </div>\n\n            <br class=\"clear\">\n          </div>\n\n\n        </div>\n      </div>\n    </div>\n  </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport {computed, onBeforeMount, onBeforeUnmount, ref, watch} from 'vue';\nimport {EventBus} from '@/plugins/eventBus';\nimport EditorJS from '@editorjs/editorjs';\nimport Header from '@editorjs/header';\nimport {useMoneyFormatter} from '@/composables/useMoneyFormatter';\nimport {useDateFormatter} from '@/composables/useDate';\nimport {useCompany} from '@/composables/useCompany';\nimport dayjs from 'dayjs';\nimport {useRoute} from 'vue-router';\nimport {useOrders} from '@/composables/useOrders';\nimport {OrderLine} from '@/types';\n\nconst route = useRoute();\nconst {formatMoneyDisplayV2} = useMoneyFormatter();\nconst {formatRentalDate} = useDateFormatter();\nconst {company} = useCompany();\nconst {orderLoading, orderDocument, getOrderDocument, updateOrderDocument, setOrderDocument} = useOrders();\n\nconst documentUuid = route.params.uuid as string;\n\nconst documentDate = ref(null);\nconst selected = ref([]);\nconst options = ref({});\nconst addEditFooter = ref(false);\nconst editDateDialog = ref(false);\nconst editDocumentNumber = ref(false);\nconst editUser = ref(false);\nconst editReference = ref(false);\nconst customer = ref({\n  first_name: null,\n  last_name: null,\n  email: null,\n  phone: null,\n});\n\nconst editorjs = ref<EditorJS | null>(null);\nconst footer = ref({blocks: null});\nconst documentDataCopy = ref(null);\n\nconst customerAddress = computed({\n  get: () => orderDocument.value?.address,\n  set: (value: string) => {\n    if (orderDocument.value) {\n      orderDocument.value.address = value;\n    }\n  }\n});\n\nconst orderReference = computed({\n  get: () => orderDocument.value?.reference,\n  set: (value: string) => {\n    if (orderDocument.value) {\n      orderDocument.value.reference = value;\n    }\n  }\n});\n\nconst documentNumber = computed({\n  get: () => orderDocument.value?.number,\n  set: (value: string) => {\n    if (orderDocument.value) {\n      orderDocument.value.number = value;\n    }\n  }\n});\n\nconst updateFooter = async () => {\n  if (!editorjs.value) return;\n\n  try {\n    const outputData = await editorjs.value.save();\n    console.log('Saved footer data:', outputData);\n    footer.value.blocks = outputData;\n\n    await updateOrderDocument({\n      documentUuid,\n      attributes: {footer: footer.value.blocks}\n    });\n    addEditFooter.value = false;\n    // Destroy the editor instance after saving\n    editorjs.value.destroy();\n    editorjs.value = null;\n  } catch (error) {\n    console.error('Footer save failed:', error);\n  }\n};\n\nconst documentTitle = computed(() => orderDocument.value?.title);\nconst documentBookingId = computed(() => orderDocument.value?.order?.b_id);\nconst documentStatus = computed(() => orderDocument.value?.status);\nconst documentPaid = computed(() =>\n  ['overpaid', 'paid'].includes(documentStatus.value?.toLowerCase() || '')\n);\nconst documentType = computed(() =>\n  orderDocument.value?.type.split('::')[1] || 'Quote'\n);\nconst companyAddress = computed(() => company.value?.address);\n\nwatch(addEditFooter, (newValue) => {\n  if (newValue) {\n    // Ensure any existing editor is destroyed before creating a new one\n    if (editorjs.value) {\n      editorjs.value.destroy();\n      editorjs.value = null;\n    }\n\n    // Create new EditorJS instance with current footer data\n    editorjs.value = new EditorJS({\n      autofocus: true,\n      holder: 'editorjs',\n      tools: {\n        header: Header,\n      },\n      data: footer.value.blocks || undefined,\n      onReady: () => {\n        console.log('EditorJS initialized with data:', footer.value.blocks);\n      }\n    });\n  }\n});\n\n// Watchers\nwatch(orderDocument, (document) => {\n  if (document) {\n    documentDataCopy.value = JSON.parse(JSON.stringify(document));\n    customer.value = {\n      first_name: document.customer?.first_name,\n      last_name: document.customer?.last_name,\n      email: document.customer?.email,\n      phone: document.customer?.phone\n    };\n    if (document.footer) {\n      footer.value.blocks = document.footer;\n    }\n  }\n}, {immediate: true});\n\nonBeforeMount(() => {\n  getOrderDocument(documentUuid);\n});\n\n// Methods\nconst convertBlocksToHtml = (data: any) => {\n  if (!data?.blocks) return '';\n\n  let html = '';\n  data.blocks.forEach((block: any) => {\n    const value = block.data?.text;\n    if (block.type === 'paragraph') {\n      html += `<p>${value}</p>`;\n    } else if (block.type === 'header') {\n      const h = block.data?.level;\n      html += `<h${h}>${value}</h${h}>`;\n    }\n  });\n  return html;\n};\n\nconst getTaxCategoryParentName = (line: OrderLine) => {\n  return line?.tax_category?.name;\n};\n\nconst updateCustomerAddress = () => {\n  updateOrderDocument({\n    documentUuid,\n    attributes: {address: customerAddress.value}\n  });\n};\n\nconst updateOrderDocumentDate = () => {\n  updateOrderDocument({\n    documentUuid,\n    attributes: {\n      date: dayjs(documentDate.value).format('YYYY-MM-DD')\n    }\n  }).then(() => {\n    editDateDialog.value = false;\n  });\n};\n\nconst updateOrderDocumentNumber = () => {\n  updateOrderDocument({\n    documentUuid,\n    attributes: {number: documentNumber.value}\n  });\n};\n\nconst updateOrderReference = () => {\n  updateOrderDocument({\n    documentUuid,\n    attributes: {reference: orderReference.value}\n  });\n};\n\nonBeforeUnmount(() => {\n  if (editorjs.value) {\n    editorjs.value.destroy();\n    editorjs.value = null;\n  }\n\n  // @ts-ignore\n  setOrderDocument(null);\n  EventBus.$off('update-order-document-error');\n});\n\n// Event listeners\nEventBus.$on('update-order-document-error', () => {\n  documentNumber.value = documentDataCopy.value?.number;\n});\n\n</script>\n\n<style>\n.float-right {\n  float: right !important;\n}\n\n#wrapper {\n  float: left;\n  width: 100%;\n  height: 100%;\n  min-width: 708px;\n}\n</style>\n\n<style id=\"print-css\">\n\n.print-show {\n  display: none;\n}\n\n#page {\n  max-width: 1060px;\n  min-height: 29.7cm;\n  background: white;\n  display: block;\n  margin: 0 auto 0.5cm;\n  box-shadow: 0 0 0.5cm rgba(0, 0, 0, 0.5);\n}\n\n#document {\n  margin: 0 auto;\n  max-width: 1060px;\n  position: relative;\n  overflow: hidden;\n  padding: 0 40px 40px 40px;\n}\n\n#document #top {\n  float: left;\n  width: 100%;\n  font-weight: 300;\n  padding: 40px 0 0 0;\n}\n\n#document #top #logo-wrapper {\n  position: absolute;\n  top: 40px;\n  right: 40px;\n  display: table-cell;\n  max-width: 175px;\n  max-height: 175px;\n}\n\n#document #top .lefter {\n  float: left;\n  width: 50%;\n}\n\n#document #top .righter {\n  float: right;\n  width: 50%;\n}\n\n#document #top #user-info {\n  font-size: 13px;\n  position: relative;\n}\n\n#document #top .additional-information {\n  margin-top: 20px;\n}\n\n#document #top #company-info {\n  font-size: 13px;\n  max-width: 200px;\n}\n\n#document #products {\n  float: left;\n  width: 100%;\n  margin-top: 40px;\n}\n\n#document #products .dates {\n  font-size: 12px;\n  line-height: 18px;\n  float: right;\n  width: 50%;\n  margin-top: -20px;\n}\n\n#document #products .dates > span,\n#document #products .dates .document-date {\n  display: block;\n}\n\n\n.name-dates > div b,\n.document-date b {\n  width: 75px;\n  display: inline-block;\n  font-weight: 500;\n  font-size: 12px;\n}\n\n.name-dates > div span {\n  display: inline-block;\n  font-size: 12px;\n  margin-left: 10px;\n}\n\n#document #products table .line-title {\n  font-weight: bold;\n}\n\n#document #products h2.table-form-title {\n  font-weight: 200;\n  font-size: 30px;\n  margin: 0 0 40px 0;\n  color: #1C2A30;\n}\n\n.table {\n  width: 100%;\n  max-width: 100%;\n  margin-bottom: 20px;\n}\n\n\n#page table, #page .table {\n  margin: 0;\n  font-size: 13px;\n  font-weight: 300;\n  border-collapse: separate;\n}\n\n#document #products table tbody {\n  background: #fff;\n}\n\n#page table tbody,\n#page .table tbody {\n  color: #1C2A30;\n  border: 0;\n}\n\ntable th, .table th {\n  white-space: nowrap;\n}\n\ntable th, table td, .table th, .table td {\n  border-color: #DDE1E3;\n}\n\n.table > thead > tr > th,\n.table > thead > tr > td,\n.table > tbody > tr > th,\n.table > tbody > tr > td,\ntable > tfoot > tr > th,\n.table > tfoot > tr > td {\n  padding: 10px 20px;\n  line-height: 1.428571429;\n  vertical-align: top;\n  border-top: 1px solid #DDE1E3;\n}\n\ntable th.auto-width,\ntable td.auto-width,\n.table th.auto-width,\n.table td.auto-width {\n  width: 1px;\n  white-space: nowrap;\n}\n\n#page table th,\n#page table td,\n#page .table th,\n#page .table td {\n  vertical-align: middle;\n}\n\ntable th.total,\ntable th.price {\n  width: 100px;\n}\n\ntable th.total,\ntable th.vat {\n  padding-right: 0 !important;\n}\n\ntable th.vat {\n  width: 120px;\n}\n\ntable tbody:first-child th {\n  border-top: 0;\n}\n\n#page table tbody#totals tr,\n#page .table tbody#totals tr {\n  padding: 0;\n}\n\ntable td.tax,\ntable td.total,\ntable td.subtotal,\ntable td.grand-total,\ntable td.deposit {\n  padding-right: 0 !important;\n}\n\ntable td {\n  vertical-align: top !important;\n}\n\ntable .line-extra {\n  font-size: 12px;\n  margin-top: 4px;\n  white-space: pre-wrap;\n}\n\n\n#page table tbody#totals tr td,\n#page .table tbody#totals tr td {\n  border: 0;\n  padding: 5px 15px;\n  white-space: nowrap;\n}\n\n#page table tbody#totals tr td.divider,\n#page .table tbody#totals tr td.divider {\n  padding: 10px 0;\n}\n\n\n#page table tbody#totals tr td.right,\n#page .table tbody#totals tr td.right {\n  padding-right: 0;\n}\n\na.underline {\n  text-decoration: underline;\n}\n\n#page table th.bold,\n#page table td.bold,\n#page .table th.bold,\n#page .table td.bold {\n  font-weight: bold;\n}\n\ntable th.right,\ntable td.right,\n.table th.right,\n.table td.right {\n  text-align: right;\n}\n\n\n#body {\n  border: 0 !important;\n}\n\n#footer {\n  font-size: 12px;\n}\n\n#footer,\n#body {\n  margin-top: 30px;\n  padding-top: 20px;\n  border-top: 1px #DDE1E3 solid;\n  float: left;\n  width: 100%;\n  font-weight: 400;\n}\n\n\n#footer a.right,\n#body a.right {\n  text-align: right;\n  width: 100%;\n  display: inline-block;\n}\n\n#footer a.underline,\n#body a.underline {\n  font-size: 12px;\n  font-weight: 400;\n}\n\n#footer .edit,\n#body .edit {\n  display: none;\n}\n\n\n#document #top #user-info .edit-user {\n  display: none;\n  padding-right: 40px;\n}\n\n#document #top #user-info.editing .edit-user {\n  display: block;\n}\n\n#document #top #user-info.editing .show-user {\n  display: none;\n}\n\n\n#footer .editing .editor {\n  height: 200px;\n  padding: 20px;\n  border: 1px #DDE1E3 solid;\n  cursor: text;\n}\n\n#footer .view .editor {\n  display: none;\n}\n\n#footer .editing .editor {\n  float: left;\n  width: 100%;\n  max-height: calc(70vh - 125px);\n  overflow-y: scroll;\n}\n\n#text-editor .ProseMirror {\n  height: 362px !important;\n}\n\n\n#footer .ce-block__content,\n#footer .ce-toolbar__content {\n  max-width: calc(100% - 25px);\n}\n\n.pre-address {\n  font-family: inherit;\n  font-size: inherit;\n  color: inherit;\n  border: none;\n}\n\n@media print {\n  body * {\n    visibility: hidden;\n  }\n\n  .print-area, .print-area * {\n    visibility: visible;\n  }\n\n  * {\n    -o-transition-property: none !important;\n    -moz-transition-property: none !important;\n    -webkit-transition-property: none !important;\n    transition-property: none !important;\n    -o-transform: none !important;\n    -moz-transform: none !important;\n    -ms-transform: none !important;\n    -webkit-transform: none !important;\n    transform: none !important;\n  }\n\n  *, *:before, *:after {\n    background: transparent !important;\n    color: #000 !important;\n    box-shadow: none !important;\n    text-shadow: none !important;\n  }\n\n  @page {\n    margin-top: 30px;\n    margin-bottom: 30px;\n  }\n\n  body {\n    color: #1C2A30;\n    min-width: unset;\n    padding: 0 !important;\n    margin: 0;\n  }\n\n  #page {\n    max-width: unset !important;\n    min-height: unset !important;\n    margin: unset !important;\n    box-shadow: unset !important;\n  }\n\n  #app.bg-light {\n    background-color: #FFFFFF !important;\n  }\n\n  #page {\n    width: unset;\n    min-height: unset;\n    margin: 0 !important;\n  }\n\n  .print-hide {\n    display: none;\n  }\n\n  .no-print {\n    display: none;\n  }\n\n  .main-container {\n    padding: 0 !important;\n  }\n\n  #document #top {\n    float: left;\n    width: 100%;\n    font-weight: 300;\n    padding: 0 0 0 0;\n  }\n\n  #page h1 {\n    font-size: 2em;\n  }\n\n  #page h2 {\n    font-size: 1.5em;\n  }\n\n  #page h3 {\n    font-size: 1.17em;\n  }\n\n  #page h4 {\n    font-size: 1.12em;\n  }\n\n  #page h5 {\n    font-size: .83em;\n  }\n\n  #page h6 {\n    font-size: .75em;\n  }\n\n  [section=documents] #content {\n    padding: 0;\n  }\n\n  [section=documents] #document {\n    border: none !important;\n    padding: 0 !important;\n    border-radius: unset;\n    -webkit-box-shadow: unset;\n    box-shadow: unset;\n  }\n\n  [section=documents] table.table tr td,\n  [section=documents] table.table tr th {\n    padding: 8px !important;\n    border-color: #f1f1f1 !important;\n  }\n\n  [section=documents] #totals tr:first-child td {\n    border-top: 1px #dde1e3 solid !important;\n    padding-top: 18px !important;\n  }\n\n  [section=documents] #totals tr td {\n    padding: 5px 0 !important;\n  }\n\n  [section=documents] .printed-reference-text {\n    width: 100%;\n    white-space: normal;\n  }\n\n  .print-show {\n    display: table-cell;\n  }\n\n  .printed-reference-text {\n    width: 100%;\n    white-space: normal;\n  }\n\n  .main-content {\n    margin: 0 !important;\n    padding: 0 !important;\n    height: unset !important;\n  }\n\n  .eUcdHi {\n    padding: unset;\n  }\n\n  .navbar-custom {\n    display: none !important;\n  }\n\n  .app-wrapper {\n    margin-left: 0 !important;\n    padding: 0 !important;\n  }\n\n  .dashboard-sidebar {\n    display: none !important;\n  }\n\n  .mainNavBar__mobileMenuOpen {\n    display: none !important;\n  }\n\n  .fw-container-fluid {\n    padding: unset !important;\n  }\n\n  .v-application .my-3 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n\n  [section=documents] #footer.blank,\n  [section=documents] #body.blank {\n    display: none;\n  }\n\n  [section=documents] #totals tr:first-child td {\n    border-top: 1px #dde1e3 solid !important;\n    padding-top: 18px !important;\n  }\n}\n</style>\n\n\n<style>\n#document #stamp {\n  display: inline-block;\n  opacity: 0.1;\n  top: 0;\n  left: 0;\n  position: absolute;\n  width: 250px;\n  height: 250px;\n  pointer-events: none;\n}\n\n#document #stamp img#paid {\n  height: 250px;\n  top: -55px;\n  left: -60px;\n  position: absolute;\n}\n</style>\n","<template>\n  <v-dialog v-model=\"orderDocumentDialog\" width=\"500\">\n    <v-card>\n      <v-card-title>\n        Downloading\n        <v-spacer />\n        <span v-if=\"fileDone\">\n          <v-icon class=\"mr-2 mb-1\" color=\"green\">mdi-check</v-icon> Done\n        </span>\n      </v-card-title>\n      <v-card-text>\n        <div class=\"mt-5 text-center\">\n          <v-progress-circular\n              v-if=\"!fileDone\"\n              indeterminate\n              color=\"primary\"\n          ></v-progress-circular>\n          <div v-else>\n           <v-btn variant=\"text\" size=\"small\" :href=\"fileUrl\" target=\"_blank\">\n              Didnt start downloading automatically?\n              <v-icon size=\"x-small\" class=\"ml-2\">mdi-open-in-new</v-icon>\n            </v-btn>\n          </div>\n        </div>\n      </v-card-text>\n    </v-card>\n  </v-dialog>\n</template>\n\n<script>\nimport { mapActions, mapGetters } from 'vuex';\nimport { EventBus } from '@/plugins/eventBus';\nimport { get } from 'lodash';\n\nexport default {\n  name: 'StartOrderDocumentDownloadDialog',\n\n  data() {\n    return {\n      orderDocumentDialog: false,\n      currentWorkingOrderDocumentUuid: null,\n    };\n  },\n\n  created() {\n    EventBus.$on('open-download-order-document-dialog', (document_uuid) => {\n      this.orderDocumentDialog = true;\n      this.currentWorkingOrderDocumentUuid = document_uuid;\n\n      this.downloadOrderDocument(document_uuid);\n    });\n    EventBus.$on('start-order-document-download-success', (status) => {\n      if(['started', 'queued'].includes(get(status, 'status.status'))) {\n        setTimeout(() => {\n          this.downloadOrderDocument(this.currentWorkingOrderDocumentUuid);\n        }, 3 * 1000);\n      }\n    });\n  },\n\n  watch: {\n    fileDone: {\n      handler(status) {\n        if(status) {\n          window.open(this.fileUrl, '_blank').focus();\n        }\n      },\n    },\n    fileStatus: {\n      handler(status) {\n        console.dir(status);\n      },\n    },\n  },\n\n  computed: {\n    ...mapGetters({\n      theNewOrder: 'order/order',\n      documents: 'order/documents',\n      downloadStatus: 'order/downloadStatus',\n    }),\n    fileUrl() {\n      return get(this.downloadStatus, 'url');\n    },\n    fileDone() {\n      return get(this.downloadStatus, 'done');\n    },\n    fileStatus() {\n      return get(this.downloadStatus, 'status.status');\n    },\n  },\n\n  methods: {\n    ...mapActions({\n      downloadOrderDocument: 'order/downloadOrderDocument',\n    }),\n  },\n\n  beforeUnmount() {\n    EventBus.$off('open-download-order-document-dialog');\n    EventBus.$off('start-order-document-download-success');\n  },\n};\n</script>\n","<template>\n  <div>\n    <v-btn\n      v-if=\"orderBookingId && device !== 'mobile'\"\n      :to=\"{ name: 'orders.single', params: {b_id: orderBookingId} }\"\n      class=\"mx-3\"\n      size=\"small\"\n      variant=\"text\"\n    >\n      Order {{ orderBookingId }}\n    </v-btn>\n    <v-btn v-if=\"device !== 'mobile'\" class=\"mr-3\" color=\"red\" variant=\"outlined\" @click=\"deleteOrderDocumentInit()\">\n      <v-icon class=\"mr-2\" size=\"small\">mdi-delete-outline</v-icon>\n      Delete\n    </v-btn>\n    <div v-if=\"device !== 'mobile'\" class=\"v-btn-group\">\n      <v-btn variant=\"flat\" @click=\"printElem()\">\n        <v-icon class=\"mr-2\" size=\"small\">mdi-printer</v-icon>\n        Print\n      </v-btn>\n      <v-btn variant=\"flat\" @click=\"downloadOrderDocumentInit()\">\n        <v-icon class=\"mr-2\" size=\"small\">mdi-download</v-icon>\n        Download\n      </v-btn>\n      <v-btn\n        v-if=\"documentCanBeFinalized\"\n        :loading=\"orderLoading.update\"\n        color=\"blue\"\n        variant=\"flat\"\n        @click=\"finalizeDocumentInit()\"\n      >\n        <v-icon class=\"mr-2\" size=\"small\">mdi-check</v-icon>\n        Finalize\n      </v-btn>\n      <!--      <v-btn depressed theme=\"dark\" color=\"blue\">-->\n      <!--        <v-icon size=\"small\" class=\"mr-2\">mdi-check</v-icon> Confirm-->\n      <!--      </v-btn>-->\n      <!--      <v-btn depressed theme=\"dark\" color=\"green\">-->\n      <!--        <v-icon size=\"small\" class=\"mr-2\">mdi-email</v-icon> Send-->\n      <!--      </v-btn>-->\n    </div>\n    <v-menu v-if=\"device === 'mobile'\">\n      <template v-slot:activator=\"{ props }\">\n        <v-btn\n          class=\"ml-1\"\n          rounded\n          v-bind=\"props\"\n          variant=\"outlined\"\n        >\n          <v-icon>mdi-dots-vertical</v-icon>\n        </v-btn>\n      </template>\n      <v-list>\n        <v-list-item v-if=\"device === 'mobile'\">\n\n          <v-btn\n            v-if=\"orderBookingId\"\n            :to=\"{ name: 'orders.single', params: {b_id: orderBookingId} }\"\n            variant=\"outlined\"\n          >\n            Order {{ orderBookingId }}\n          </v-btn>\n\n        </v-list-item>\n        <v-list-item v-if=\"device === 'mobile'\">\n\n          <v-btn color=\"red\" variant=\"outlined\" @click=\"deleteOrderDocumentInit()\">\n            <v-icon class=\"mr-2\" size=\"small\">mdi-delete-outline</v-icon>\n            Delete\n          </v-btn>\n\n        </v-list-item>\n        <v-list-item>\n\n          <v-btn variant=\"flat\" @click=\"printElem()\">\n            <v-icon class=\"mr-2\" size=\"small\">mdi-printer</v-icon>\n            Print\n          </v-btn>\n\n        </v-list-item>\n        <v-list-item>\n\n          <v-btn variant=\"flat\" @click=\"downloadOrderDocumentInit()\">\n            <v-icon class=\"mr-2\" size=\"small\">mdi-download</v-icon>\n            Download\n          </v-btn>\n\n        </v-list-item>\n        <v-list-item>\n\n          <v-btn\n            v-if=\"documentCanBeFinalized\"\n            :loading=\"orderLoading.update\"\n            color=\"blue\"\n            variant=\"flat\"\n            @click=\"finalizeDocumentInit()\"\n          >\n            <v-icon class=\"mr-2\" size=\"small\">mdi-check</v-icon>\n            Finalize\n          </v-btn>\n\n        </v-list-item>\n      </v-list>\n    </v-menu>\n    <StartOrderDocumentDownloadDialog/>\n\n    <v-dialog v-model=\"deleteOrderDocumentConfirmDialog\" width=\"350\">\n      <v-card :disabled=\"orderLoading.deleteOrderDocument\">\n        <v-card-title>\n          Delete Document\n        </v-card-title>\n        <v-card-text>\n          Are you sure you want to delete this document?\n        </v-card-text>\n        <v-card-actions>\n          <v-spacer/>\n          <v-btn color=\"grey\" size=\"small\" variant=\"text\" @click=\"deleteOrderDocumentConfirmDialog = false;\">Nevermind\n          </v-btn>\n          <v-btn :loading=\"orderLoading.deleteOrderDocument\" color=\"red text-white\" size=\"small\" @click=\"deleteOrderDocumentCommit($route.params.uuid);\">\n            Delete\n          </v-btn>\n        </v-card-actions>\n      </v-card>\n    </v-dialog>\n  </div>\n</template>\n<script lang=\"ts\" setup>\nimport {computed, ref} from 'vue';\nimport {useRoute, useRouter} from 'vue-router';\nimport {EventBus} from '@/plugins/eventBus';\nimport {useOrders} from '@/composables/useOrders';\nimport {useAppSettings} from '@/composables/useAppSettings';\nimport StartOrderDocumentDownloadDialog from '@/components/dashboard/dialogs/StartOrderDocumentDownloadDialog.vue';\nimport {OrderDocumentType} from '@/types';\n\nconst route = useRoute();\nconst router = useRouter();\nconst {orderDocument, orderLoading, updateOrderDocument, deleteOrderDocument} = useOrders();\nconst {device} = useAppSettings();\n\n// Reactive state\nconst deleteOrderDocumentConfirmDialog = ref(false);\n\n// Computed properties\nconst orderBookingId = computed<string>(() => orderDocument.value?.order?.b_id);\nconst documentType = computed<OrderDocumentType['type']>(() => orderDocument.value?.type);\nconst documentCanBeFinalized = computed(() =>\n  documentType.value === 'Document::Invoice' && !orderDocument.value?.finalized\n);\n\n// Methods\nconst finalizeDocumentInit = () => {\n  updateOrderDocument({\n    documentUuid: orderDocument.value?.uuid,\n    attributes: {\n      finalize: true,\n    },\n  });\n};\n\nconst deleteOrderDocumentInit = () => {\n  deleteOrderDocumentConfirmDialog.value = true;\n};\n\nconst deleteOrderDocumentCommit = async (uuid: string) => {\n  console.log('deleteOrderDocumentCommit');\n  try {\n    await deleteOrderDocument(uuid);\n    router.push('/documents');\n  } catch (error) {\n    console.error('Failed to delete document:', error);\n  }\n};\n\nconst printElem = () => {\n  window.print();\n};\n\nconst downloadOrderDocumentInit = () => {\n  console.log('downloadOrderDocumentInit');\n  EventBus.$emit('open-download-order-document-dialog', route.params.uuid);\n};\n</script>\n\n\n<style lang=\"scss\">\n.v-btn-group {\n  vertical-align: middle;\n  border-radius: 2px;\n  display: inline-flex;\n\n  .v-btn {\n    border-radius: 0;\n    justify-content: center;\n    margin: 0;\n    min-width: auto;\n    padding: 0 8px;\n    width: auto;\n\n    &:not(:last-child) {\n      border-right: 1px solid transparent;\n    }\n\n    &:first-child {\n      border-radius: 4px 0 0 4px;\n    }\n\n    &:last-child {\n      border-radius: 0 4px 4px 0;\n    }\n  }\n}\n</style>\n","import type {RouteRecordRaw} from 'vue-router';\nimport DocumentsDashboardLayoutV2 from '@/views/documentsV2/DocumentsDashboardV2.vue';\n\nimport AddFields from '@/views/documentsV2/NewDocumentFieldsV2.vue';\n\nimport Home from '@/views/documents/Home.vue';\nimport NewDocument from \"@/views/documents/NewDocument.vue\";\nimport SingleDocument from \"@/views/documents/SingleDocument.vue\";\nimport navRightActions from '@/components/dashboard/navActions/OrderDocumentOptions.vue';\nimport {CommonRouteMeta} from \"@/types\";\n\nconst BaseDashboard = () => import('@/views/dashboard/BaseDashboard.vue');\n\nconst documentRoutes: RouteRecordRaw[] = [\n    {\n        path: '/documents',\n        component: BaseDashboard,\n        meta: {\n            title: 'documents',\n            icon: 'mdi-file-document-outline',\n            noCache: false,\n            showInMenu: true,\n            middleware: ['auth'],\n            layout: 'Dashboard',\n        } as CommonRouteMeta,\n        children: [\n            {\n                path: '',\n                component: Home,\n                name: 'documents.index',\n                meta: {title: 'Documents', icon: 'mdi-file-document-outline', noCache: false},\n            },\n            {\n                path: ':uuid',\n                components: {\n                    default: SingleDocument,\n                    navRightActions: navRightActions\n                },\n                name: 'documents.show',\n                meta: {title: '', icon: 'mdi-file-document-outline', noCache: false},\n            },\n            {\n                path: 'prepare/:uuid',\n                component: NewDocument,\n                name: 'documents.prepare',\n                meta: {title: 'Document Prep', icon: 'mdi-file-document-outline', noCache: false},\n            },\n            {\n                path: 'new',\n                component: NewDocument,\n                name: 'documents.new',\n                meta: {title: 'Document New', icon: 'mdi-file-document-outline', noCache: false},\n            },\n        ],\n    },\n    {\n        path: '/documents-v2',\n        component: DocumentsDashboardLayoutV2,\n        meta: {hidden: true, middleware: ['auth'], layout: 'Dashboard', noCache: false} as CommonRouteMeta,\n        children: [\n            {\n                path: '',\n                component: Home,\n                name: 'documentsv2.index',\n                meta: {title: '', icon: 'mdi-file-document-outline', noCache: false},\n            },\n            {\n                path: 'prepare/:uuid/add-fields',\n                component: AddFields,\n                name: 'documentsv2.fields',\n                meta: {title: 'Document Add Fields', icon: 'mdi-file-document-outline', noCache: false},\n            },\n        ],\n    },\n];\n\nexport default documentRoutes;\n","import type {RouteRecordRaw} from 'vue-router';\nimport {CommonRouteMeta} from '@/types';\n\n// Lazy-load the BaseDashboard component\nconst loadBaseDashboard = () => import('@/views/dashboard/BaseDashboard.vue');\nconst loadBasePerks = () => import('@/views/dashboard/perks/BasePerks.vue');\n\n\n// Define perks routes\nconst perksRoutes: RouteRecordRaw[] = [\n    {\n        path: '/perks',\n        component: loadBaseDashboard,\n        meta: {\n            title: 'Perks',\n            icon: 'mdi-cash-multiple',\n            noCache: false,\n            isBase: true,\n            middleware: ['auth'],\n            layout: 'Dashboard',\n        } as CommonRouteMeta,\n        children: [\n            {\n                path: '',\n                component: loadBasePerks,\n                name: 'perks.index',\n                meta: {\n                    title: 'Perks',\n                    icon: 'mdi-car-convertible',\n                    noCache: false,\n                    isBase: true,\n                } as CommonRouteMeta,\n            },\n        ],\n    }\n];\n\nexport default perksRoutes;\n","import type {RouteRecordRaw} from 'vue-router';\nimport {CommonRouteMeta} from \"@/types\";\n\nconst BaseDashboard = () => import('@/views/dashboard/BaseDashboard.vue');\n\nconst notifications: RouteRecordRaw[] = [\n    {\n        path: '/notifications',\n        component: BaseDashboard,\n        meta: {\n            title: 'notifications',\n            icon: 'mdi-newspaper-variant-multiple-outline',\n            noCache: false,\n            middleware: ['auth'],\n            layout: 'Dashboard',\n        } as CommonRouteMeta,\n        children: [\n            {\n                path: '',\n                components: {\n                    default: () => import('@/views/dashboard/notifications/BaseNotifications.vue'),\n                },\n                name: 'notifications.index',\n                meta: {title: 'Notifications', icon: 'mdi-account-outline', noCache: false},\n            },\n        ],\n    }\n];\n\nexport default notifications;\n","import type {RouteMeta, RouteRecordRaw} from 'vue-router';\nimport type {CommonRouteMeta} from '@/types';\n\nconst DashboardLayout = () => import('@/views/dashboard/BaseDashboard.vue');\n\n/** Views */\nconst BaseListings = () => import('@/views/dashboard/listings/BaseListings.vue');\nconst NewListings = () => import('@/views/dashboard/listings/New.vue');\nconst SingleListing = () => import('@/views/dashboard/listings/ListingSingle.vue');\nconst ListingCalendar = () => import('@/views/dashboard/listings/FWCalendarVue.vue');\nconst ListingAnalytics = () => import('@/views/dashboard/analytics/BaseAnalytics.vue');\n\n/** Nav Actions */\nconst AddNewListingNavAction = () => import('@/components/dashboard/navActions/AddNewListing.vue');\nconst SaveListingNavAction = () => import('@/components/dashboard/navActions/SaveCurrentListing.vue');\nconst AddListingSaveNavAction = () => import('@/components/dashboard/navActions/AddListingSave.vue');\n\n\n// Extend the CommonRouteMeta interface\ninterface ExtendedRouteMeta extends RouteMeta, CommonRouteMeta {\n    isBase?: boolean;\n    permissions?: string[];\n    resource?: string;\n    showInMenu?: boolean;\n    middleware?: string[];\n    layout?: string;\n}\n\nconst listingRoutes: RouteRecordRaw[] = [\n    {\n        path: '/listings',\n        component: DashboardLayout,\n        redirect: _to => {\n            return {name: 'listing.index'};\n        },\n        meta: {\n            title: 'listings',\n            icon: 'mdi-car-convertible',\n            noCache: false,\n            isBase: true,\n            permissions: ['listings_view'],\n            showInMenu: true,\n            middleware: ['auth'],\n            layout: 'Dashboard',\n        } as CommonRouteMeta,\n        children: [\n            {\n                path: 'all',\n                components: {\n                    default: BaseListings,\n                    navRightActions: AddNewListingNavAction,\n                },\n                name: 'listing.index',\n                meta: {title: 'Listings', icon: 'mdi-car-convertible', noCache: false} as ExtendedRouteMeta,\n            },\n            {\n                path: 'new',\n                components: {\n                    default: NewListings,\n                    navRightActions: AddListingSaveNavAction,\n                },\n                name: 'listing.new',\n                meta: {title: 'New Listing', icon: 'mdi-car-convertible', noCache: false} as ExtendedRouteMeta,\n            },\n            {\n                path: 'calendar',\n                components: {\n                    default: ListingCalendar,\n                },\n                name: 'listing.calendar',\n                meta: {\n                    title: 'Single Listing',\n                    icon: 'mdi-car-convertible',\n                    noCache: false,\n                    resource: 'l_id'\n                } as ExtendedRouteMeta,\n            },\n            {\n                path: ':l_id',\n                components: {\n                    default: SingleListing,\n                    navRightActions: SaveListingNavAction,\n                },\n                name: 'listing.single',\n                meta: {\n                    title: 'Single Listing',\n                    icon: 'mdi-car-convertible',\n                    noCache: false,\n                    resource: 'l_id',\n                    isBase: false\n                } as ExtendedRouteMeta,\n            },\n            {\n                path: ':l_id/analytics',\n                components: {\n                    default: ListingAnalytics,\n                },\n                name: 'listing.single.analytics',\n                meta: {\n                    title: 'Listing Analytics',\n                    icon: 'mdi-car-convertible',\n                    noCache: false,\n                    resource: 'l_id'\n                } as ExtendedRouteMeta,\n            },\n        ],\n    }\n];\n\nexport default listingRoutes;\n","import type {RouteRecordRaw} from 'vue-router';\nimport {CommonRouteMeta} from \"@/types\";\n\nconst BaseDashboard = () => import('@/views/dashboard/BaseDashboard.vue');\n\n\nconst connectionsRoutes: RouteRecordRaw[] = [\n    {\n        path: '/connections',\n        component: BaseDashboard,\n        meta: {\n            title: 'connections',\n            icon: 'mdi-toy-brick',\n            noCache: true,\n            middleware: ['auth'],\n            layout: 'Dashboard',\n            showInMenu: true,\n        } as CommonRouteMeta,\n        children: [\n            {\n                path: '',\n                components: {\n                    default: () => import(/* webpackChunkName: \"connections\" */ '@/views/connections/index.vue'),\n                },\n                name: 'connections',\n                meta: {title: 'connections', icon: 'mdi-toy-brick', noCache: true},\n            },\n            {\n                path: 'axle',\n                components: {\n                    default: () => import(/* webpackChunkName: \"axle\" */ '@/views/connections/axle/Axle.vue'),\n                },\n                meta: {title: 'Axle', icon: 'mdi-toy-brick', noCache: false},\n                children: [\n                    {\n                        path: '',\n                        components: {\n                            default: () => import(/* webpackChunkName: \"axle\" */ '@/views/connections/axle/BaseAxle.vue'),\n                        },\n                        name: 'connections.axle',\n                    },\n                ],\n            },\n            {\n                path: 'turo',\n                components: {\n                    default: () => import(/* webpackChunkName: \"turo\" */ '@/views/connections/turo/Turo.vue'),\n                },\n                meta: {title: 'Turo', icon: 'mdi-toy-brick', noCache: false},\n                children: [\n                    {\n                        path: '',\n                        components: {\n                            default: () => import(/* webpackChunkName: \"turo\" */ '@/views/connections/turo/BaseTuro.vue'),\n                        },\n                        name: 'connections.turo',\n                    },\n                    {\n                        path: 'all/bookings',\n                        components: {\n                            default: () => import(/* webpackChunkName: \"turo\" */ '@/views/connections/turo/Bookings.vue'),\n                        },\n                        name: 'connections.turo.bookings',\n                        meta: {title: 'bookings'},\n                    },\n                    {\n                        path: ':turo_uuid/bookings/:b_id',\n                        components: {\n                            default: () => import(/* webpackChunkName: \"turo\" */ '@/views/connections/turo/BookingSingle.vue'),\n                        },\n                        name: 'connections.turo.bookings.single',\n                        meta: {title: 'booking single'},\n                    },\n                    {\n                        path: 'all/vehicles',\n                        components: {\n                            default: () => import(/* webpackChunkName: \"turo\" */ '@/views/connections/turo/Vehicles.vue'),\n                        },\n                        name: 'connections.turo.vehicles',\n                        meta: {title: 'vehicles'},\n                    },\n                    {\n                        path: 'all/messages',\n                        components: {\n                            default: () => import(/* webpackChunkName: \"turo\" */ '@/views/connections/turo/Messages.vue'),\n                        },\n                        name: 'connections.turo.messages',\n                        meta: {title: 'messages'},\n                    },\n                    {\n                        path: 'all/messages2',\n                        components: {\n                            default: () => import(/* webpackChunkName: \"turo\" */ '@/views/connections/turo/TuroMessages.vue'),\n                        },\n                        name: 'connections.turo.messages2',\n                        meta: {title: 'messages'},\n                    },\n                    {\n                        path: 'all/emails',\n                        components: {\n                            default: () => import(/* webpackChunkName: \"turo\" */ '@/views/connections/turo/Emails.vue'),\n                        },\n                        name: 'connections.turo.emails',\n                        meta: {title: 'emails'},\n                    },\n                    {\n                        path: 'all/earnings',\n                        components: {\n                            default: () => import(/* webpackChunkName: \"turo\" */ '@/views/connections/turo/Earnings.vue'),\n                        },\n                        name: 'connections.turo.earnings',\n                        meta: {\n                            title: 'earnings',\n                            permissions: ['orders_financials'],\n                        },\n                    },\n                    {\n                        path: 'all/reimbursements',\n                        components: {\n                            default: () => import(/* webpackChunkName: \"turo\" */ '@/views/connections/turo/Reimbursements.vue'),\n                        },\n                        name: 'connections.turo.reimbursements',\n                        meta: {\n                            title: 'earnings',\n                            permissions: ['orders_financials'],\n                        },\n                    },\n                    {\n                        path: 'change-request',\n                        components: {\n                            default: () => import(/* webpackChunkName: \"turo\" */ '@/views/connections/turo/ChangeRequestSettings.vue'),\n                        },\n                        name: 'connections.turo.changeRequest',\n                        meta: {title: 'Change Request'},\n                    },\n                    {\n                        path: 'feedback',\n                        components: {\n                            default: () => import(/* webpackChunkName: \"turo\" */ '@/views/connections/turo/Feedback.vue'),\n                        },\n                        name: 'connections.turo.feedback',\n                        meta: {title: 'Feedback'},\n                    },\n                    {\n                        path: ':turo_uuid',\n                        components: {\n                            default: () => import(/* webpackChunkName: \"turo\" */ '@/views/connections/turo/SingleTuro.vue'),\n                        },\n                        name: 'connections.turo.single',\n                        meta: {title: 'Turo home'},\n                    },\n                    {\n                        path: ':turo_uuid/vehicles',\n                        components: {\n                            default: () => import(/* webpackChunkName: \"turo\" */ '@/views/connections/turo/SingleTuroVehicles.vue'),\n                        },\n                        name: 'connections.turo.single.vehicles',\n                        meta: {title: 'Turo Vehicles'},\n                    },\n                    {\n                        path: ':turo_uuid/research',\n                        components: {\n                            default: () => import(/* webpackChunkName: \"turo\" */ '@/views/connections/turo/Research.vue'),\n                        },\n                        name: 'connections.turo.single.research',\n                        meta: {title: 'Turo Vehicles'},\n                    },\n                ],\n            },\n            {\n                path: 'getaround',\n                components: {\n                    default: () => import(/* webpackChunkName: \"getaround\" */ '@/views/connections/getaround/Getaround.vue'),\n                },\n                children: [\n                    {\n                        path: '',\n                        components: {\n                            default: () => import(/* webpackChunkName: \"getaround\" */ '@/views/connections/getaround/BaseGetaround.vue'),\n                        },\n                        name: 'connections.getaround',\n                    },\n                    {\n                        path: ':getaround_uuid',\n                        components: {\n                            default: () => import(/* webpackChunkName: \"getaround\" */ '@/views/connections/getaround/SingleGetaround.vue'),\n                        },\n                        name: 'connections.getaround.single',\n                    },\n                    {\n                        path: ':getaround_uuid/vehicles',\n                        components: {\n                            default: () => import(/* webpackChunkName: \"getaround\" */ '@/views/connections/getaround/SingleGetaroundVehicles.vue'),\n                        },\n                        name: 'connections.getaround.single.vehicles',\n                    },\n                    {\n                        path: ':getaround_uuid/bookings',\n                        components: {\n                            default: () => import(/* webpackChunkName: \"getaround\" */ '@/views/connections/getaround/SingleGetaroundBookings.vue'),\n                        },\n                        name: 'connections.getaround.single.bookings',\n                    },\n                    {\n                        path: ':getaround_uuid/bookings/:reservation_id',\n                        components: {\n                            default: () => import(/* webpackChunkName: \"getaround\" */ '@/views/connections/getaround/SingleGetaroundOneReservation.vue'),\n                        },\n                        name: 'connections.getaround.single.booking',\n                    },\n                    {\n                        path: 'bookings',\n                        components: {\n                            default: () => import(/* webpackChunkName: \"getaround\" */ '@/views/connections/getaround/Bookings.vue'),\n                        },\n                        name: 'connections.getaround.bookings',\n                        meta: {title: 'bookings'},\n                    },\n                ],\n            },\n            {\n                path: 'tesla',\n                components: {\n                    default: () => import(/* webpackChunkName: \"tesla\" */ '@/views/connections/tesla/Tesla.vue'),\n                },\n                meta: {title: 'Tesla', icon: 'mdi-toy-brick', noCache: true},\n                children: [\n                    {\n                        path: '',\n                        components: {\n                            default: () => import(/* webpackChunkName: \"tesla\" */ '@/views/connections/tesla/BaseTesla.vue'),\n                        },\n                        name: 'connections.tesla',\n                    },\n                    {\n                        path: 'invoices',\n                        components: {\n                            default: () => import(/* webpackChunkName: \"tesla\" */ '@/views/connections/tesla/Invoices.vue'),\n                        },\n                        name: 'connections.tesla.invoices',\n                    },\n                    {\n                        path: 'vehicles',\n                        components: {\n                            default: () => import(/* webpackChunkName: \"tesla\" */ '@/views/connections/tesla/Vehicles.vue'),\n                        },\n                        name: 'connections.tesla.vehicles',\n                    },\n                    {\n                        path: ':tesla_uuid',\n                        components: {\n                            default: () => import(/* webpackChunkName: \"tesla\" */ '@/views/connections/tesla/TeslaSingle.vue'),\n                        },\n                        name: 'connections.tesla.single',\n                    },\n                    {\n                        path: 'vehicles/:tesla_uuid',\n                        components: {\n                            default: () => import(/* webpackChunkName: \"tesla\" */ '@/views/connections/tesla/VehicleSingle.vue'),\n                        },\n                        name: 'connections.tesla.vehicles.single',\n                    },\n                ],\n            },\n            {\n                path: 'outdoorsy',\n                components: {\n                    default: () => import(/* webpackChunkName: \"outdoorsy\" */ '@/views/connections/outdoorsy/Outdoorsy.vue'),\n                },\n                meta: {title: 'Outdoorsy', icon: 'mdi-toy-brick', noCache: true},\n                children: [\n                    {\n                        path: '',\n                        components: {\n                            default: () => import(/* webpackChunkName: \"outdoorsy\" */ '@/views/connections/outdoorsy/BaseOutdoorsy.vue'),\n                        },\n                        name: 'connections.outdoorsy',\n                    },\n                    {\n                        path: ':provider_uuid',\n                        components: {\n                            default: () => import(/* webpackChunkName: \"outdoorsy\" */ '@/views/connections/outdoorsy/OutdoorsySingle.vue'),\n                        },\n                        name: 'connections.outdoorsy.single',\n                    },\n                    {\n                        path: ':provider_uuid/listings',\n                        components: {\n                            default: () => import(/* webpackChunkName: \"outdoorsy\" */ '@/views/connections/outdoorsy/SingleOutdoorsyListings.vue'),\n                        },\n                        name: 'connections.outdoorsy.single.listings',\n                        meta: {title: 'Outdoorsy Vehicles'},\n                    },\n                    {\n                        path: ':provider_uuid/bookings',\n                        components: {\n                            default: () => import(/* webpackChunkName: \"outdoorsy\" */ '@/views/connections/outdoorsy/SingleOutdoorsyBookings.vue'),\n                        },\n                        name: 'connections.outdoorsy.single.bookings',\n                        meta: {title: 'Outdoorsy Vehicles'},\n                    },\n                    {\n                        path: 'invoices',\n                        components: {\n                            default: () => import(/* webpackChunkName: \"outdoorsy\" */ '@/views/connections/tesla/Invoices.vue'),\n                        },\n                        name: 'connections.outdoorsy.invoices',\n                    },\n                    {\n                        path: 'vehicles',\n                        components: {\n                            default: () => import(/* webpackChunkName: \"outdoorsy\" */ '@/views/connections/tesla/Vehicles.vue'),\n                        },\n                        name: 'connections.outdoorsy.vehicles',\n                    },\n                ],\n            },\n            {\n                path: 'hq-rentals',\n                components: {\n                    default: () => import(/* webpackChunkName: \"hq-rentals\" */ '@/views/connections/hq-rentals/HQRentals.vue'),\n                },\n                meta: {title: 'HQ Rentals', icon: 'mdi-toy-brick', noCache: true},\n                children: [\n                    {\n                        path: '',\n                        components: {\n                            default: () => import(/* webpackChunkName: \"hq-rentals\" */ '@/views/connections/hq-rentals/BaseHQRentals.vue'),\n                        },\n                        name: 'connections.hq-rentals',\n                    },\n                    {\n                        path: ':provider_uuid',\n                        components: {\n                            default: () => import(/* webpackChunkName: \"hq-rentals\" */ '@/views/connections/hq-rentals/HQRentalsSingle.vue'),\n                        },\n                        name: 'connections.hq-rentals.single',\n                    },\n                    {\n                        path: ':provider_uuid/listings',\n                        components: {\n                            default: () => import(/* webpackChunkName: \"hq-rentals\" */ '@/views/connections/hq-rentals/SingleHQRentalsListings.vue'),\n                        },\n                        name: 'connections.hq-rentals.single.listings',\n                        meta: {title: 'HQ Rentals Vehicles'},\n                    },\n                    {\n                        path: ':provider_uuid/bookings',\n                        components: {\n                            default: () => import(/* webpackChunkName: \"hq-rentals\" */ '@/views/connections/hq-rentals/SingleHQRentalsBookings.vue'),\n                        },\n                        name: 'connections.hq-rentals.single.bookings',\n                        meta: {title: 'HQ Rentals Vehicles'},\n                    },\n                    {\n                        path: ':provider_uuid/contacts',\n                        components: {\n                            default: () => import(/* webpackChunkName: \"hq-rentals\" */ '@/views/connections/hq-rentals/SingleHQRentalsContacts.vue'),\n                        },\n                        name: 'connections.hq-rentals.single.contacts',\n                        meta: {title: 'HQ Rentals Contacts'},\n                    },\n                ],\n            },\n            {\n                path: 'bouncie',\n                components: {\n                    default: () => import(/* webpackChunkName: \"bouncie\" */ '@/views/connections/bouncie/Bouncie.vue'),\n                },\n                meta: {title: 'Bouncie', icon: 'mdi-toy-brick', noCache: true},\n                children: [\n                    {\n                        path: '',\n                        components: {\n                            default: () => import(/* webpackChunkName: \"bouncie\" */ '@/views/connections/bouncie/BaseBouncie.vue'),\n                        },\n                        name: 'connections.bouncie',\n                    },\n                    {\n                        path: 'vehicles',\n                        components: {\n                            default: () => import(/* webpackChunkName: \"bouncie\" */ '@/views/connections/bouncie/Vehicles.vue'),\n                        },\n                        name: 'connections.bouncie.vehicles',\n                    },\n                    {\n                        path: 'vehicles/:bouncie_uuid',\n                        components: {\n                            default: () => import(/* webpackChunkName: \"bouncie\" */ '@/views/connections/bouncie/VehicleSingle.vue'),\n                        },\n                        name: 'connections.bouncie.vehicles.single',\n                    },\n                ],\n            },\n            {\n                path: 'stripe',\n                components: {\n                    default: () => import('@/views/connections/stripe/Stripe.vue'),\n                },\n                meta: {title: 'Stripe', icon: 'mdi-toy-brick', noCache: true},\n                children: [\n                    {\n                        path: '',\n                        components: {\n                            default: () => import('@/views/connections/stripe/StripeBase.vue'),\n                        },\n                        name: 'connections.stripe',\n                        meta: {title: 'Stripe', icon: 'mdi-toy-brick', noCache: true},\n                    },\n                    {\n                        path: 'identities',\n                        components: {\n                            default: () => import('@/views/connections/stripe/StripeIdentities.vue'),\n                        },\n                        name: 'connections.stripe.identities',\n                    },\n                ],\n            },\n            {\n                path: 'lula',\n                components: {\n                    default: () => import('@/views/connections/lula/Lula.vue'),\n                },\n                meta: {title: 'Lula', icon: 'mdi-toy-brick', noCache: true},\n                children: [\n                    {\n                        path: '',\n                        components: {\n                            default: () => import('@/views/connections/lula/LulaBase.vue'),\n                        },\n                        name: 'connections.lula',\n                        meta: {title: 'Lula', icon: 'mdi-toy-brick', noCache: true},\n                    },\n                    {\n                        path: ':lula_uuid',\n                        components: {\n                            default: () => import(/* webpackChunkName: \"lula\" */ '@/views/connections/lula/LulaAccountSingle.vue'),\n                        },\n                        name: 'connections.lula.account',\n                        meta: {title: 'Lula'},\n                    },\n                    {\n                        path: ':lula_uuid/vehicles',\n                        components: {\n                            default: () => import(/* webpackChunkName: \"lula\" */ '@/views/connections/lula/LulaVehicles.vue'),\n                        },\n                        name: 'connections.lula.vehicles',\n                        meta: {title: 'Lula Vehicles'},\n                    },\n                ],\n            },\n            {\n                path: 'tolls',\n                components: {\n                    default: () => import(/* webpackChunkName: \"tolls\" */ '@/views/connections/tolls/Tolls.vue'),\n                },\n                meta: {title: 'Tolls', icon: 'mdi-toy-brick', noCache: true},\n                children: [\n                    {\n                        path: '',\n                        components: {\n                            default: () => import(/* webpackChunkName: \"tolls\" */ '@/views/connections/tolls/TollsBase.vue'),\n                        },\n                        name: 'connections.tolls',\n                    },\n                    {\n                        path: 'transactions',\n                        components: {\n                            default: () => import(/* webpackChunkName: \"tolls\" */ '@/views/connections/tolls/TollsTransactions.vue'),\n                        },\n                        name: 'connections.tolls.transactions',\n                    },\n                ],\n            },\n        ],\n    }\n];\n\nexport default connectionsRoutes;\n","import type {RouteRecordRaw} from 'vue-router';\nimport {CommonRouteMeta} from \"@/types\";\n\n// Lazy-loaded components\nconst BaseDashboard = () => import('@/views/dashboard/BaseDashboard.vue');\nconst BaseOrders = () => import('@/views/dashboard/orders/BaseOrders.vue');\nconst OrderNewV2 = () => import('@/views/dashboard/orders/OrderNewV2.vue');\nconst OrderSingleV2 = () => import('@/views/dashboard/orders/OrderSingleV2.vue');\nconst TheRightSidebar = () => import('@/components/dashboard/TheRightSidebar.vue');\nconst AddNewOrder = () => import('@/components/dashboard/navActions/AddNewOrder.vue');\nconst NewOrderOptions = () => import('@/components/dashboard/navActions/NewOrderOptions.vue');\nconst SingleOrderOptions = () => import('@/components/dashboard/navActions/SingleOrderOptions.vue');\n\n\nconst ordersRoutes: RouteRecordRaw[] = [\n    {\n        path: '/orders',\n        components: {\n            default: BaseDashboard,\n        },\n        meta: {\n            title: 'orders',\n            icon: 'mdi-newspaper-variant-multiple-outline',\n            noCache: false,\n            isBase: true,\n            permissions: ['orders_view'],\n            showInMenu: true,\n            middleware: ['auth'],\n            layout: 'Dashboard',\n        } as CommonRouteMeta,\n        children: [\n            {\n                path: '',\n                components: {\n                    default: BaseOrders,\n                    navRightActions: AddNewOrder,\n                },\n                name: 'orders.index',\n                meta: {title: 'Orders', icon: 'mdi-account-outline', noCache: false, isBase: true},\n            },\n            {\n                path: 'upcoming',\n                components: {\n                    default: BaseOrders,\n                    navRightActions: AddNewOrder,\n                },\n                name: 'orders.index.upcoming',\n                meta: {title: 'Orders Upcoming', icon: 'mdi-account-outline', noCache: false, isBase: true},\n            },\n            {\n                path: 'overdue',\n                components: {\n                    default: BaseOrders,\n                    navRightActions: AddNewOrder,\n                },\n                name: 'orders.index.overdue',\n                meta: {title: 'Orders Overdue', icon: 'mdi-account-outline', noCache: false, isBase: true},\n            },\n            {\n                path: 'new',\n                components: {\n                    default: OrderNewV2,\n                    navRightActions: NewOrderOptions,\n                },\n                name: 'orders.new',\n                meta: {title: 'New', icon: 'mdi-account-outline', noCache: false, hasRightSidebar: false},\n            },\n            {\n                path: 'new-order',\n                components: {\n                    default: OrderNewV2,\n                    rightSidebar: TheRightSidebar,\n                    navRightActions: NewOrderOptions,\n                },\n                name: 'orders.newV2',\n                meta: {title: 'New', icon: 'mdi-account-outline', noCache: false, hasRightSidebar: true},\n            },\n            {\n                path: ':b_id',\n                components: {\n                    default: OrderSingleV2,\n                    rightSidebar: TheRightSidebar,\n                    navRightActions: SingleOrderOptions,\n                },\n                name: 'orders.single',\n                meta: {\n                    title: 'order',\n                    icon: 'mdi-account-outline',\n                    noCache: false,\n                    hasRightSidebar: true,\n                    resource: 'b_id',\n                    isBase: false\n                },\n            },\n            {\n                path: 'v2/:b_id',\n                components: {\n                    default: OrderSingleV2,\n                    rightSidebar: TheRightSidebar,\n                    navRightActions: SingleOrderOptions,\n                },\n                name: 'orders.singleV2',\n                meta: {title: 'order', icon: 'mdi-account-outline', noCache: false, hasRightSidebar: true},\n            },\n        ],\n    }\n];\n\nexport default ordersRoutes;\n","import type {RouteRecordRaw} from 'vue-router';\nimport {CommonRouteMeta} from '@/types';\n\nconst BaseDashboard = () => import('@/views/dashboard/BaseDashboard.vue');\nconst BaseCustomers = () => import('@/views/dashboard/customers/BaseCustomers.vue');\nconst CustomerSingle = () => import('@/views/dashboard/customers/CustomerSingle.vue');\nconst CustomerRightSidebar = () => import('@/components/dashboard/rightSideBars/CustomerRightSidebar.vue');\nconst NewCustomer = () => import('@/views/dashboard/customers/New.vue');\nconst ImportCustomers = () => import('@/views/dashboard/customers/ImportCustomers.vue');\nconst AddNewCustomer = () => import('@/components/dashboard/navActions/AddNewCustomer.vue');\n\nconst customerRoutes: RouteRecordRaw[] = [\n    {\n        path: '/customers',\n        components: {\n            default: BaseDashboard,\n        },\n        meta: {\n            title: 'customers',\n            icon: 'mdi-account-outline',\n            noCache: false,\n            isBase: true,\n            permissions: ['customers_view'],\n            showInMenu: true,\n            middleware: ['auth'],\n            layout: 'Dashboard',\n        } as CommonRouteMeta,\n        children: [\n            {\n                path: '',\n                components: {\n                    default: BaseCustomers,\n                    navRightActions: AddNewCustomer,\n                },\n                name: 'customers.index',\n                meta: {title: 'customers', icon: 'mdi-account-outline', noCache: false, isBase: true},\n            },\n            {\n                path: 'import',\n                component: ImportCustomers,\n                name: 'customers.import',\n                meta: {title: 'Import', icon: 'mdi-account-outline', noCache: false},\n            },\n            {\n                path: 'new',\n                component: NewCustomer,\n                name: 'customers.new',\n                meta: {title: 'New', icon: 'mdi-account-outline', noCache: false},\n            },\n            {\n                path: ':r_id',\n                components: {\n                    default: CustomerSingle,\n                    rightSidebar: CustomerRightSidebar,\n                },\n                name: 'customers.single',\n                meta: {\n                    title: 'customer',\n                    icon: 'mdi-account-outline',\n                    noCache: false,\n                    resource: 'r_id',\n                    hasRightSidebar: true,\n                    isBase: false\n                },\n            },\n        ],\n    }\n];\n\nexport default customerRoutes;\n","import type {RouteRecordRaw} from 'vue-router';\nimport {CommonRouteMeta} from \"@/types\";\n\nconst BaseDashboard = () => import('@/views/dashboard/BaseDashboard.vue');\n\nconst listingRoutes: RouteRecordRaw[] = [\n    {\n        path: '/trip-extras',\n        component: BaseDashboard,\n        meta: {\n            title: 'Trip Extras',\n            icon: 'mdi-car-convertible',\n            noCache: false,\n            isBase: true,\n            permissions: ['listings_view'],\n            middleware: ['auth'],\n            layout: 'Dashboard',\n        } as CommonRouteMeta,\n        children: [\n            {\n                path: '',\n                components: {\n                    default: () => import('@/views/dashboard/listings/tripExtras/BaseTripExtras.vue'),\n                    navRightActions: () => import('@/components/dashboard/navActions/AddNewTripExtra.vue'),\n                },\n                name: 'tripExtras.index',\n                meta: {title: 'Trip Extras', icon: 'mdi-car-convertible', noCache: false, isBase: true},\n            },\n            {\n                path: 'new',\n                components: {\n                    default: () => import('@/views/dashboard/listings/tripExtras/NewTripExtra.vue'),\n                    navRightActions: () => import('@/components/dashboard/navActions/AddExtraSaveBtn.vue'),\n                },\n                name: 'extra.new',\n                meta: {title: 'New Extra', icon: 'mdi-car-convertible', noCache: false},\n            },\n        ],\n    }\n];\n\nexport default listingRoutes;\n","<template>\n  <nav class=\"Header-igPdDJ ikpJHJ\">\n    <div class=\"BHeader-iqbMU gDKljt\">\n      <div class=\"Group-kSMArG jbSlEt\">\n        <v-btn size=\"small\" variant=\"outlined\">\n          <v-icon>mdi-arrow-left</v-icon>\n        </v-btn>\n        <v-btn size=\"small\" variant=\"outlined\">\n          <v-icon class=\"mr-2\" size=\"small\">mdi-file-document-outline</v-icon>\n          Templates\n        </v-btn>\n        <v-btn size=\"small\" variant=\"outlined\">\n          <v-icon class=\"mr-2\" size=\"small\">mdi-brush</v-icon>\n          Theme settings\n        </v-btn>\n      </div>\n      <div class=\"Preview-igMYrV fvcbKx\">\n        <v-btn variant=\"outlined\">\n          <div class=\"flex flex-col\">\n            <v-icon class=\"mr-2\" size=\"small\">mdi-laptop</v-icon>\n            Preview mode\n          </div>\n        </v-btn>\n      </div>\n      <div class=\"Group-kSMArG jbSlEt\">\n        <v-btn size=\"small\" variant=\"outlined\">\n          <v-icon class=\"mr-2\" size=\"small\">mdi-brush</v-icon>\n          Preview\n        </v-btn>\n        <v-btn size=\"small\" variant=\"outlined\">\n          <v-icon class=\"mr-2\" size=\"small\">mdi-brush</v-icon>\n          Publish\n        </v-btn>\n      </div>\n    </div>\n  </nav>\n</template>\n\n<script lang=\"ts\" setup>\n</script>\n\n<style>\n\n.ikpJHJ {\n  border-bottom: 1px solid rgb(226, 230, 235);\n  height: 62px;\n  top: 0;\n  position: fixed;\n  padding: 0 26px;\n  background: rgb(255, 255, 255);\n  z-index: 30;\n  transition: all 250ms cubic-bezier(0.86, 0, 0.07, 1) 0s;\n  overflow: hidden;\n  width: 100%\n}\n\n.fMkfAf .Header-igPdDJ {\n  padding: 0 18px;\n}\n\n.gDKljt {\n  position: relative;\n  display: flex;\n  -webkit-box-pack: justify;\n  justify-content: space-between;\n  -webkit-box-align: center;\n  align-items: center;\n  height: 99%;\n}\n\n.jbSlEt {\n  display: flex;\n  -webkit-box-align: center;\n  align-items: center;\n}\n\n.buJHmi {\n  display: block;\n  width: 100%;\n}\n\n.jbSlEt > :not(:last-of-type), .jbSlEt .Disable-iDtbRZ:not(:last-of-type) {\n  margin-right: 18px;\n}\n</style>\n","<template>\n  <nav class=\"Sidebar-ewrzQP hJbBaq\" data-tid=\"Sidebar\" open=\"\" width=\"320px\">\n    <div class=\"Div-bMiTSW Inner-eASQkV fNYben felMTq\">\n      <div class=\"BSidebar-loQfvV kWdRwd\">\n        <div aria-expanded=\"false\" class=\"Wrapper-iVPPu\">\n          <div class=\"Trigger-huDzbV eBqQQq\">\n            <div class=\"BTemplateSelect-cjqqCH fmnNSR\" data-tid=\"Template select\">\n              <div class=\"H3-bOhkOq lgizXY\">\n                <v-icon>mdi-file-document-outline</v-icon>\n                <div class=\"Div-bMiTSW Spacer-dThvcf  jaLOqC\"></div>\n                <div class=\"Label-edLtQd fZbXLc\">{{ themeName }}</div>\n                <div class=\"Div-bMiTSW Spacer-dThvcf  jaLOqC\"></div>\n                <i class=\"I-gmFDEA Icon-chbHoy eaYeOY hGUdVH far fa-chevron-down fa-fw\"></i>\n                <v-icon>mdi-chevron-down</v-icon>\n              </div>\n            </div>\n          </div>\n        </div>\n        <div class=\"Sections-ivYnKr kQUSAR\">\n          <div class=\"Container-goTTRW cneSZt\">\n            <div class=\"Section-eCkBMz iwkHtv\">\n              <div class=\"InnerContainer-dPNjJg gAUqSD\">\n                <i class=\"I-gmFDEA Icon-chbHoy eaYeOY hMXRVX far fa-fw fa-fw\"></i>\n              </div>\n              <div class=\"InnerContainer-dPNjJg kwXbLo\" @mouseleave=\"containerHoverLeave\" @mouseover=\"containerHover\">\n                <div class=\"LabelContainer-XFiUr kuxGbJ\">\n                  <label class=\"Label-eJXSuD fUNwul\" cursor=\"pointer\">Header</label></div>\n                <div class=\"Div-bMiTSW Spacer-dThvcf  jaLOqC\"></div>\n                <div class=\"Div-bMiTSW Description-dTYEvj  dfsrYj\">Edit for all pages</div>\n              </div>\n            </div>\n          </div>\n          <hr class=\"Hr-bhdsCb cfZQHO\">\n          <div class=\"sortable-container\" data-tid=\"Sections\">\n            <div v-for=\"(section,i) in orderedThemeSections\" :key=\"i\" class=\"Container-goTTRW cneSZt\">\n              <div class=\"Section-eCkBMz iwkHtv\">\n                <div v-if=\"showChevronUp(i)\" class=\"InnerContainer-dPNjJg gvmluV\">\n                  <v-icon class=\"I-gmFDEA Icon-chbHoy eaYeOY hMXRVX far fa-chevron-up fa-fw\">mdi-chevron-up</v-icon>\n                </div>\n                <div v-if=\"!showChevronUp(i)\" class=\"InnerContainer-dPNjJg gAUqSD\">\n                  <i class=\"I-gmFDEA Icon-chbHoy eaYeOY hMXRVX far fa-fw fa-fw\"></i>\n                </div>\n                <div class=\"InnerContainer-dPNjJg kwXbLo\" @mouseleave=\"containerHoverLeave(i)\" @mouseover=\"containerHover(i)\">\n                  <div class=\"LabelContainer-XFiUr kuxGbJ\">\n                    <label class=\"Label-eJXSuD fUNwul\">\n                      {{ sectionLabel(i) }} {{ section.disabled }}\n                    </label>\n                  </div>\n                  <div class=\"Div-bMiTSW Spacer-dThvcf  jaLOqC\"></div>\n                  <v-icon v-if=\"section.disabled\" class=\"I-gmFDEA Icon-chbHoy eaYeOY hMXRVX far fa-eye fa-fw\" size=\"small\">\n                    mdi-eye-outline\n                  </v-icon>\n                  <v-icon v-if=\"!section.disabled\" class=\"I-gmFDEA Icon-chbHoy eaYeOY hMXRVX far fa-eye fa-fw\" size=\"small\">\n                    mdi-eye-outline\n                  </v-icon>\n                  <div class=\"Div-bMiTSW Spacer-dThvcf  fbTExq\"></div>\n                  <v-icon class=\"I-gmFDEA Icon-chbHoy eaYeOY hMXRVX far fa-grip-lines sort\" size=\"small\">\n                    mdi-reorder-horizontal\n                  </v-icon>\n                </div>\n              </div>\n\n              <div id=\"firstContainer\" class=\"sortable-container\" data-tid=\"image-banner blocks\" style=\"transition-duration: 300ms; transform: translate3d(0px, 0px, 0px);\">\n                <div v-for=\"(block, j) in sectionBlocksOrdered(section)\" :key=\"`section${i}-block${j}`\" class=\"drag-item\">\n                  <div class=\"Container-goTTRW cneSZt\">\n                    <div :class=\"sectionItemClassObject(block)\" class=\"Section-eCkBMz \">\n                      <div class=\"InnerContainer-dPNjJg gAUqSD\">\n                        <i class=\"I-gmFDEA Icon-chbHoy eaYeOY hMXRVX far fa-fw fa-fw\"></i>\n                      </div>\n                      <div class=\"InnerContainer-dPNjJg kwXbLo\" @mouseleave=\"containerHoverLeave(i, block, j)\" @mouseover=\"containerHover(i, block, j)\">\n                        <div class=\"LabelContainer-XFiUr kuxGbJ\">\n                          <label class=\"Label-eJXSuD cMyTnJ\" cursor=\"pointer\">\n                            {{ blockLabel(block) }}\n                            <div class=\"BlockSummary-bMgBTA eNDwgr\">\n                              {{ blockSummary(block) }}\n                            </div>\n                          </label>\n                        </div>\n                        <v-icon v-if=\"!block.disabled\" class=\"I-gmFDEA Icon-chbHoy eaYeOY hMXRVX far fa-eye fa-fw\" size=\"small\" @click=\"toggleDisableBlock(i, j, true)\">\n                          mdi-eye-outline\n                        </v-icon>\n                        <v-icon v-if=\"block.disabled\" class=\"I-gmFDEA Icon-chbHoy eaYeOY hMXRVX far fa-eye-slash fa-fw\" size=\"small\" @click=\"toggleDisableBlock(i, j, false)\">\n                          mdi-eye-off-outline\n                        </v-icon>\n                        <div class=\"Div-bMiTSW Spacer-dThvcf  fbTExq\"></div>\n                        <v-icon class=\"I-gmFDEA Icon-chbHoy eaYeOY hMXRVX far fa-grip-lines sort\" size=\"small\">\n                          mdi-reorder-horizontal\n                        </v-icon>\n                      </div>\n                    </div>\n                  </div>\n                </div>\n                <span v-if=\"canAddBlock(i)\" aria-expanded=\"false\" class=\"Wrapper-iVPPu\">\n                  <div class=\"Trigger-huDzbV eBqQQq\">\n                    <div class=\"Container-goTTRW cneSZt\" data-tid=\"image-banner add block\">\n                      <div class=\"Section-eCkBMz iwkHtv\">\n                        <div class=\"InnerContainer-dPNjJg gAUqSD\">\n                          <i class=\"I-gmFDEA Icon-chbHoy eaYeOY hMXRVX far fa-fw fa-fw\"></i>\n                        </div>\n                        <div class=\"InnerContainer-dPNjJg hMXcFq\">\n                        <a class=\"A-fypPmk Link-cksnAZ  cWXaAG\" color=\"primary\">\n                          <v-icon class=\"mb-1 I-gmFDEA Icon-chbHoy eaYeOY hGUdVH far fa-plus-circle fa-fw\" color=\"rgb(43, 128, 255)\" size=\"small\">mdi-plus-circle-outline</v-icon>\n                          <span class=\"Span-dxRpuh fqDCBT\">Add block </span>\n                        </a>\n                      </div>\n                      </div>\n                    </div>\n                  </div>\n                </span>\n              </div>\n\n            </div>\n          </div>\n        </div>\n\n        <div class=\"Div-bMiTSW Spacer-dThvcf jVlDvc\"></div>\n\n        <span aria-expanded=\"false\" class=\"Wrapper-iVPPu eyAPpw\">\n          <div class=\"Trigger-huDzbV eBqQQq\">\n            <div class=\"PickerContainer-biFfmk hTPolk\">\n              <span class=\"Span-dxRpuh ButtonContainer-kOntak fqDCBT hDDKkN\" color=\"white\">\n                <v-btn block variant=\"outlined\">Add section</v-btn>\n              </span>\n            </div>\n          </div>\n        </span>\n      </div>\n    </div>\n  </nav>\n</template>\n\n<script lang=\"ts\">\nimport {EventBus} from '@/plugins/eventBus';\nimport {mapActions, mapGetters} from 'vuex';\nimport {get} from 'lodash';\nimport dragula from 'dragula';\n\nexport default {\n  name: 'LeftSideNav',\n\n  data() {\n    return {\n      localTheme: null,\n    };\n  },\n\n  created() {\n    this.getStoreThemes().then(() => {\n      this.localTheme = get(this.storeThemes, 0);\n      this.initDragula();\n    });\n  },\n\n  computed: {\n    ...mapGetters({\n      storeThemes: 'theme/storeThemes',\n    }),\n    themeName() {\n      return get(this.storeThemes, '0.name', 'default');\n    },\n    themeSections() {\n      return get(this.storeThemes, '0.theme_data.sections', {});\n    },\n    themeSectionsOrder() {\n      return get(this.storeThemes, '0.theme_data.order', []);\n    },\n    orderedThemeSections() {\n      const order = this.themeSectionsOrder;\n      const sections = this.themeSections;\n      const orderedSections = {};\n      order.forEach((key) => {\n        orderedSections[key] = sections[key];\n      });\n      return orderedSections;\n    },\n  },\n\n  methods: {\n    ...mapActions({\n      getExportDetails: 'settings/getExportDetails',\n      getStoreThemes: 'theme/getStoreThemes',\n      updateStoreTheme: 'theme/updateStoreTheme',\n    }),\n    initDragula() {\n      console.dir('initDragula');\n      console.dir(document.getElementById('firstContainer'));\n      const drake = dragula([document.getElementById('firstContainer')], {\n        moves: (el, source, handle) => {\n          console.dir('moves');\n          console.dir(el);\n          console.dir(handle);\n          console.dir(el.classList);\n          console.dir(handle.classList.contains('sort'));\n          return handle.classList.contains('sort');\n        },\n      });\n\n      drake.on('drag', (el) => {\n        // add 'is-moving' class to element being dragged\n        el.classList.add('is-moving');\n      })\n        // .on('shadow', (el, container, source) => {\n        //   if (el !== container.children[container.children.length - 1]) {\n        //     container.appendChild(el);\n        //   }\n        // })\n        .on('dragend', (el) => {\n          // remove 'is-moving' class from element after dragging has stopped\n          el.classList.remove('is-moving');\n\n          // add the 'is-moved' class for 600ms then remove it\n          window.setTimeout(() => {\n            el.classList.add('is-moved');\n            window.setTimeout(() => {\n              el.classList.remove('is-moved');\n            }, 600);\n          }, 100);\n        });\n    },\n    toggleDisableBlock(sectionId, blockId, disable) {\n      console.dir('disableBlock');\n      console.dir(sectionId);\n      console.dir(blockId);\n      const section = get(this.localTheme, `theme_data.sections.${sectionId}`, {});\n      console.dir(section);\n\n      if (section) {\n        const blocks = get(section, 'blocks', []);\n        blocks[blockId].disabled = disable;\n        this.updateStoreTheme(this.localTheme);\n      }\n    },\n    /**\n     * @param section\n     * @returns {boolean}\n     */\n    showChevronUp(section) {\n      return section.indexOf('date-picker') !== 0\n        && section.indexOf('products') !== 0\n        && section.indexOf('spacer') !== 0;\n    },\n    sectionItemClassObject(block) {\n      return {\n        bJkMPt: block.disabled,\n        iwkHtv: !block.disabled,\n      };\n    },\n    canAddBlock(section) {\n      return section.indexOf('date-picker') !== 0\n        // && section.indexOf('products') !== 0\n        && section.indexOf('spacer') !== 0;\n    },\n    containerHover(section, block = null, id = null) {\n      EventBus.$emit('mouse-over-theme-component', {section, block, id});\n    },\n    containerHoverLeave(section, block = null, id = null) {\n      EventBus.$emit('mouse-leave-theme-component', {section, block, id});\n    },\n    sectionBlocksOrdered(section) {\n      const blockOrder = get(section, 'block_order', []);\n      const blocks = get(section, 'blocks', {});\n      const orderedBlocks = {};\n      blockOrder.forEach((key) => {\n        orderedBlocks[key] = blocks[key];\n      });\n      return orderedBlocks;\n    },\n    sectionLabel(section) {\n      // if section begins with image-banner, return Image Banner\n      if (section.indexOf('image-banner') === 0) {\n        return 'Image Banner';\n      }\n      if (section.indexOf('date-picker') === 0) {\n        return 'Date Picker';\n      }\n      if (section.indexOf('products') === 0) {\n        return 'Products';\n      }\n      if (section.indexOf('spacer') === 0) {\n        return 'Spacer';\n      }\n      if (section.indexOf('columns') === 0) {\n        return 'Columns';\n      }\n\n      return section;\n    },\n    blockLabel(block) {\n      if (block.type === 'heading') {\n        return 'Heading';\n      }\n      if (block.type === 'text') {\n        return 'Text';\n      }\n      if (block.type === 'button') {\n        return 'Button';\n      }\n      if (block.type === 'column') {\n        return 'Column';\n      }\n    },\n    blockSummary(block) {\n      if (block.type === 'heading') {\n        return get(block, 'settings.text', 'na');\n      }\n      if (block.type === 'text') {\n        return get(block, 'settings.text', 'na');\n      }\n      if (block.type === 'button') {\n        return get(block, 'settings.text', 'na');\n      }\n      if (block.type === 'column') {\n        return get(block, 'settings.title', 'na');\n      }\n    },\n  },\n};\n</script>\n\n<style>\n.drag-item {\n  transition: all 0.3s cubic-bezier(0.23, 1, 0.32, 1);\n}\n\n.drag-item.is-moving {\n  transform: scale(1.1);\n}\n\n.gu-transit {\n  opacity: 0.5;\n  background: rgba(255, 255, 255, 0.5);\n  border-radius: 6px;\n\n  transform: translate3d(0px, 29px, 0px);\n  z-index: 1000;\n}\n\n.gu-mirror {\n  opacity: 0.5;\n  -ms-filter: \"progid:DXImageTransform.Microsoft.Alpha(Opacity=50)\";\n  filter: alpha(opacity=50);\n}\n\n.gu-hide {\n  display: none !important;\n}\n\n.gu-unselectable {\n  -webkit-user-select: none !important;\n  -moz-user-select: none !important;\n  -ms-user-select: none !important;\n  user-select: none !important;\n}\n</style>\n\n<style>\n.fzkgnE *, .fzkgnE ::before, .fzkgnE ::after {\n  box-sizing: border-box;\n}\n\n.hJbBaq {\n  background: rgb(247, 248, 248);\n  transition: width 250ms cubic-bezier(0.86, 0, 0.07, 1) 0s;\n  display: block;\n  border-color: rgb(226, 230, 235);\n  overflow-x: hidden;\n  position: sticky;\n  height: calc(100vh - 62px);\n  order: 1;\n  z-index: 29;\n  left: 0;\n  width: 320px;\n  border-right-width: 1px;\n  border-right-style: solid;\n}\n\n.fa-fw {\n  text-align: center;\n  width: 1.25em;\n}\n\n.felMTq {\n  padding: 18px;\n  width: 100%;\n  overflow-y: hidden;\n}\n\n.hJbBaq .Inner-eASQkV {\n  height: calc(100vh - 62px);\n}\n\n.fNYben {\n  padding: 0 !important;\n}\n\n.kWdRwd {\n  display: flex;\n  flex-flow: column nowrap;\n  height: 100%;\n  position: relative;\n}\n\n.fZbXLc {\n  width: 90%;\n}\n\n.fmnNSR {\n  padding: 12px;\n  border-bottom: 1px solid rgb(221, 225, 227);\n  cursor: pointer;\n}\n\n.fmnNSR .H3-bOhkOq {\n  display: flex;\n  -webkit-box-align: center;\n  align-items: center;\n}\n\n.lgizXY {\n  margin: 0;\n  color: rgb(24, 24, 24);\n  font-family: proxima-nova, sans-serif;\n  font-size: 18px;\n  font-weight: 600;\n}\n\n.iwkHtv {\n  display: flex;\n  -webkit-box-align: center;\n  align-items: center;\n  margin: 0 6px;\n  border-radius: 6px;\n  cursor: pointer;\n  user-select: none;\n  padding: 0;\n}\n\n.gAUqSD {\n  display: flex;\n  -webkit-box-align: center;\n  align-items: center;\n  border-radius: 6px;\n  padding: 12px 6px;\n  pointer-events: none;\n}\n\n.kQUSAR {\n  flex: 1 1 0;\n  padding-top: 6px;\n  overflow-y: auto;\n}\n\n.hMXRVX {\n  cursor: pointer;\n}\n\n.kwXbLo {\n  display: flex;\n  -webkit-box-align: center;\n  align-items: center;\n  border-radius: 6px;\n  width: 100%;\n  padding: 0 12px;\n}\n\n.kwXbLo:hover {\n  background: rgb(226, 230, 235);\n}\n\n.kwXbLo .I-gmFDEA {\n  color: rgb(33, 59, 71);\n  visibility: hidden;\n}\n\n.iwkHtv .I-gmFDEA:not(:first-child) {\n  color: rgb(33, 59, 71);\n  visibility: hidden;\n}\n\n.kwXbLo:hover .I-gmFDEA {\n  visibility: visible;\n}\n\n.bJkMPt .I-gmFDEA:not(:first-child) {\n  color: rgb(33, 59, 71);\n  visibility: hidden;\n}\n\n.kuxGbJ {\n  display: flex;\n  -webkit-box-align: center;\n  align-items: center;\n  flex: 1 1 0;\n  padding: 12px 0;\n}\n\n.jaLOqC.jaLOqC.jaLOqC {\n  display: inline-block;\n  width: 0;\n  margin-top: 0;\n  margin-left: 6px;\n}\n\n.dfsrYj {\n  margin: 0;\n  color: rgb(118, 127, 130);\n  font-size: 14px;\n  font-weight: 400;\n  line-height: 20px;\n}\n\n.fUNwul {\n  display: block;\n  color: rgb(24, 24, 24);\n  font-size: 14px;\n  font-weight: 600;\n  line-height: 14px;\n  cursor: pointer;\n  margin: 0 !important;\n}\n\n.cfZQHO {\n  border-color: rgb(221, 225, 227);\n  margin-top: 6px;\n  margin-bottom: 6px;\n  margin-right: 18px !important;\n  margin-left: 18px !important;\n}\n\n.fbTExq.fbTExq.fbTExq {\n  display: inline-block;\n  width: 0;\n  margin-top: 0;\n  margin-left: 12px;\n}\n\n.eNDwgr {\n  display: inline-block;\n  max-width: 130px;\n  vertical-align: bottom;\n  margin-left: 6px;\n  color: rgb(118, 127, 130);\n  font-weight: 400;\n  overflow: hidden;\n  white-space: nowrap;\n  text-overflow: ellipsis;\n}\n\n.cMyTnJ {\n  display: block;\n  color: rgb(24, 24, 24);\n  font-size: 14px;\n  line-height: 14px;\n  cursor: pointer;\n  font-weight: 400 !important;\n  margin: 0 !important;\n}\n\n.cWXaAG {\n  cursor: pointer;\n  align-self: center;\n  font-size: 14px;\n  color: rgb(43, 128, 255);\n}\n\n.bJkMPt {\n  display: flex;\n  -webkit-box-align: center;\n  align-items: center;\n  margin: 0 6px;\n  border-radius: 6px;\n  cursor: pointer;\n  user-select: none;\n  opacity: 0.55;\n  padding: 0;\n}\n\n.bJkMPt .I-gmFDEA:not(:first-child) {\n  color: rgb(33, 59, 71);\n  visibility: hidden;\n}\n\n.bJkMPt .fa-eye-slash {\n  visibility: visible !important;\n}\n\n.bJkMPt .fa-eye-slash {\n  visibility: visible !important;\n}\n\n.gAUqSD {\n  display: flex;\n  -webkit-box-align: center;\n  align-items: center;\n  border-radius: 6px;\n  padding: 12px 6px;\n  pointer-events: none;\n}\n\n.jVlDvc.jVlDvc.jVlDvc {\n  width: 100%;\n  margin-top: 6px;\n  display: block !important;\n}\n</style>\n\n<style>\n.eyAPpw {\n  position: sticky;\n  left: 0;\n  right: 0;\n  bottom: 6px;\n}\n\n.hTPolk {\n  padding: 6px 18px;\n}\n\n.hDDKkN {\n  display: block;\n  width: 100%;\n}\n</style>\n","<template>\n  <div class=\"Div-bMiTSW Content-jqUogp  bymsnf\">\n    <div class=\"Preview-jvKtmK bymkXl\" mode=\"desktop\">\n      <iframe id=\"preview\" class=\"Frame-hJxVdP fiTgfO\" src=\"http://fleetwire.test/theme-test1/e7d76370-0635-11ee-9558-3f5153343edb\"></iframe>\n    </div>\n  </div>\n</template>\n\n<script lang=\"ts\">\nimport {EventBus} from '@/plugins/eventBus';\nimport {mapActions} from 'vuex';\nimport {get} from 'lodash';\n\nexport default {\n  name: 'ThemeMainArea',\n\n  created() {\n    EventBus.$on('mouse-over-theme-component', data => {\n      const selector = this.findBlockElement(data);\n\n      this.toggleBorderAttribute(selector, 'add');\n    });\n    EventBus.$on('mouse-leave-theme-component', data => {\n      const selector = this.findBlockElement(data);\n      this.toggleBorderAttribute(selector, 'remove');\n    });\n    EventBus.$on('update-theme-settings-success', () => {\n      console.dir('update-theme-settings-success');\n      document.getElementById('preview').contentWindow.location.reload();\n    });\n  },\n\n  methods: {\n    ...mapActions({\n      getExportDetails: 'settings/getExportDetails',\n    }),\n    toggleBorderAttribute(selector, action) {\n      const iframe = document.getElementById('preview');\n      const iframeDocument = iframe.contentDocument || iframe.contentWindow.document;\n\n      const iframeContent = iframeDocument.documentElement;\n      const element = iframeContent.querySelector(selector);\n\n\n      if (element === null) {\n        console.error('Element not found');\n        return;\n      }\n\n      if (action === 'add') {\n        element.setAttribute('data-focus', 'true');\n      } else {\n        element.removeAttribute('data-focus');\n      }\n    },\n    findBlockElement(data) {\n      const section = get(data, 'section');\n      const id = get(data, 'id');\n\n      let selector = '';\n      if (section.indexOf('image-banner') === 0) {\n        if (id === null) {\n          return `.image-banner-${section}`;\n        }\n        return `.image-banner-${section} #${id}`;\n      }\n      if (section.indexOf('columns') === 0) {\n        if (id === null) {\n          return `.columns-${section}`;\n        }\n        return `.columns-${section} #${id}`;\n      }\n      if (section.indexOf('spacer') === 0) {\n        selector = `#section-${section}.spacer`;\n      }\n\n      return selector;\n    },\n  },\n};\n</script>\n\n<style>\n.bymsnf {\n  padding: 26px 26px 90px;\n  flex: 1 1 0;\n  order: 2;\n  height: calc(100vh - 62px);\n  z-index: 29;\n  background: rgb(246, 248, 248);\n  position: relative;\n}\n\n.bymsnf {\n  overflow-y: scroll;\n}\n\n.bymkXl {\n  height: 100%;\n  background-color: rgb(255, 255, 255);\n  box-shadow: rgba(0, 0, 15, 0.12) 0 4px 12px;\n}\n\n.fiTgfO {\n  width: 100%;\n  height: 100%;\n  border: none;\n}\n</style>\n","<template>\n  <div class=\"theme-layout\">\n    <ThemeTopNav />\n    <LeftSideNav />\n    <ThemeMainArea />\n  </div>\n</template>\n\n<script>\n\nimport ThemeTopNav from '@/components/themes/ThemeTopNav.vue';\nimport LeftSideNav from '@/components/themes/LeftSideNav.vue';\nimport ThemeMainArea from '@/components/themes/ThemeMainArea.vue';\n\nexport default {\n  name: 'ThemesBase',\n  components: {\n    LeftSideNav,\n    ThemeTopNav,\n    ThemeMainArea,\n  },\n\n  middleware: [],\n\n  layout: 'themes',\n\n  computed: {\n    cachedViews() {\n      return this.$store.state.tagsView.cachedViews;\n    },\n    key() {\n      return this.$route.fullPath;\n    },\n  },\n};\n</script>\n\n<style>\n.theme-layout {\n  background: rgb(246, 248, 248);\n  display: flex;\n  flex-direction: row;\n  -webkit-box-align: stretch;\n  align-items: stretch;\n  width: 100%;\n  padding-top: 62px;\n  box-sizing: border-box;\n}\n\n</style>\n","import type {RouteRecordRaw} from 'vue-router';\nimport ThemeBase from '@/views/themes/ThemeBase/ThemeBase.vue';\nimport {CommonRouteMeta} from \"@/types\";\n\n\nconst themeRoutes: RouteRecordRaw[] = [{\n    path: '/themes',\n    component: ThemeBase,\n    meta: {\n        title: 'themes',\n        icon: 'mdi-wallpaper',\n        noCache: false,\n        hidden: true,\n    } as CommonRouteMeta,\n    children: [\n        {\n            path: '',\n            components: {\n                default: () => import('@/views/themes/ThemeCustomize.vue'),\n            },\n            name: 'themes.index',\n            meta: {title: 'Trip Extras', icon: 'mdi-car-convertible', noCache: false, isBase: true},\n        },\n    ],\n}];\n\nexport default themeRoutes;\n","<template>\n  <transition mode=\"out-in\" name=\"fade-transform\">\n    <keep-alive :include=\"cachedViews\">\n      <router-view :key=\"key\"/>\n    </keep-alive>\n  </transition>\n</template>\n\n<script lang=\"ts\">\n\nexport default {\n  name: 'LayoutCompanyForCheckoutIFrame',\n\n  middleware: ['company'],\n\n  layout: 'companyIframe',\n\n  computed: {\n    cachedViews() {\n      return this.$store.state.tagsView.cachedViews;\n    },\n    key() {\n      return this.$route.fullPath;\n    },\n  },\n};\n</script>\n\n<style>\n.v-application ul,\n.v-application ol {\n  padding-left: 0 !important;\n}\n\n.options-subtitle {\n  line-height: 1.2;\n  color: rgba(255, 255, 255, 0.7);\n  font-size: 1rem;\n  margin-top: 5px;\n}\n</style>\n","import type {RouteRecordRaw} from 'vue-router';\nimport {CommonRouteMeta} from '@/types';\nimport BaseCompanyIFrame from '@/views/company/checkoutIFrame.vue';\n\n\nconst Company = () => import('@/views/company/CompanyCatalog.vue');\nconst SingleTenantProduct2 = () => import('@/views/tenantStore2/SingleTenantProduct2.vue');\nconst TenantStoreBase2 = () => import('@/views/tenantStore2/TenantStoreBase.vue');\n\nexport const companyRoutes: RouteRecordRaw[] = [\n    {\n        path: '/rental',\n        component: TenantStoreBase2,\n        meta: {\n            middleware: ['companyStore'],\n            layout: 'CompanyStore',\n            noCache: true,\n        } as CommonRouteMeta,\n        children: [\n            {\n                path: '',\n                component: Company,\n                name: 'company',\n                meta: {title: 'agencyReservation', icon: 'domain', noCache: true, showFilter: true, calendarOn: true},\n            },\n            {\n                path: 'reservations',\n                components: {\n                    default: SingleTenantProduct2,\n                    navBarItem: () => import('@/components/dashboard/secondaryMenus/Settings.vue'),\n                },\n                name: 'companyReservation',\n                meta: {title: 'companyReservation', icon: 'domain', noCache: true},\n            },\n            {\n                path: 'reservations/finalize',\n                component: () => import(/* webpackChunkName: \"checkout\" */ '@/views/company/Finalize.vue'),\n                name: 'reservations.finalize',\n                meta: {title: 'Finalize', icon: 'domain', noCache: true},\n            },\n            {\n                path: 'reservations/complete',\n                component: () => import('@/views/company/Complete.vue'),\n                name: 'reservations.complete',\n                meta: {title: 'Booked', icon: 'domain', noCache: true},\n            },\n            {\n                path: 'reservations/:b_id/trip-photos',\n                component: () => import('@/views/company/SingleReservationTripPhotos.vue'),\n                name: 'reservations.trip_photos',\n                meta: {title: 'Booked', icon: 'domain', noCache: true},\n            },\n            {\n                path: 'reservations/:b_id/inspection',\n                component: () => import(/* webpackChunkName: \"checkin\" */ '@/views/guest/DamageReport.vue'),\n                name: 'reservations.inspection',\n                meta: {title: 'Checkin', icon: 'domain', noCache: true},\n            },\n            {\n                path: 'reservations/checkin',\n                component: () => import(/* webpackChunkName: \"checkin\" */ '@/views/company/Checkin.vue'),\n                name: 'reservations.checkin',\n                meta: {title: 'Checkin', icon: 'domain', noCache: true},\n            },\n        ],\n    },\n];\n\n\nexport const companyRoutes2: RouteRecordRaw[] = [\n    {\n        path: '/public',\n        component: BaseCompanyIFrame,\n        meta: {\n            layout: 'CompanyIframeLayout',\n            noCache: true,\n            hidden: true,\n        } as CommonRouteMeta,\n        children: [\n            {\n                path: '/',\n                component: () => import('@/views/company/CompanyCatalog.vue'),\n                name: 'company.iframe',\n                meta: {title: 'agencyReservation', icon: 'domain', noCache: true, showFilter: true, calendarOn: true},\n            },\n            {\n                path: 'reservations',\n                components: {\n                    default: SingleTenantProduct2,\n                    navBarItem: () => import(/* webpackChunkName: \"checkout\" */ '@/components/dashboard/secondaryMenus/Settings.vue'),\n                },\n                name: 'company.iframe.reservations',\n                meta: {title: 'companyReservation', icon: 'domain', noCache: true},\n            },\n            {\n                path: 'reservations/finalize',\n                component: () => import(/* webpackChunkName: \"checkout\" */ '@/views/company/Finalize.vue'),\n                name: 'reservations.iframe.finalize',\n                meta: {title: 'Finalize', icon: 'domain', noCache: true},\n            },\n            {\n                path: 'reservations/complete',\n                component: () => import(/* webpackChunkName: \"checkout-complete\" */ '@/views/company/Complete.vue'),\n                name: 'reservations.iframe.complete',\n                meta: {title: 'Booked', icon: 'domain', noCache: true},\n            },\n            {\n                path: 'reservations/:b_id/trip-photos',\n                component: () => import(/* webpackChunkName: \"checkout-complete\" */ '@/views/company/SingleReservationTripPhotos.vue'),\n                name: 'reservations.iframe.trip_photos',\n                meta: {title: 'Booked', icon: 'domain', noCache: true},\n            },\n            {\n                path: 'reservations/:b_id/inspection',\n                component: () => import(/* webpackChunkName: \"checkin\" */ '@/views/guest/DamageReport.vue'),\n                name: 'reservations.iframe.inspection',\n                meta: {title: 'Checkin', icon: 'domain', noCache: true},\n            },\n            {\n                path: 'reservations/checkin',\n                component: () => import(/* webpackChunkName: \"checkin\" */ '@/views/company/Checkin.vue'),\n                name: 'reservations.iframe.checkin',\n                meta: {title: 'Checkin', icon: 'domain', noCache: true},\n            },\n        ]\n    },\n];\n","import type {RouteRecordRaw} from 'vue-router';\nimport {CommonRouteMeta} from '@/types';\n\nconst EsignRecipient = () => import('@/views/eSigner/RecipientV2.vue');\nconst BaseESigner = () => import('@/components/eSigner/index.vue');\n\nexport const eSignerRoutes: RouteRecordRaw[] = [\n    {\n        path: '/signing',\n        component: BaseESigner,\n        meta: {\n            layout: 'Esign',\n        } as CommonRouteMeta,\n        children: [\n            {\n                path: 'v2/:envelope_id/:recipient_id',\n                component: EsignRecipient,\n                name: 'esign.recipient.v2',\n                meta: {title: 'eSign Recipient', icon: 'domain', noCache: true, showNavbar: true, layout: 'Esign',},\n            },\n            {\n                path: 'v2/:envelope_id/:recipient_id/sample',\n                component: () => import('@/views/eSigner/RecipientV2.vue'),\n                name: 'esign.recipient.v2.sample',\n                meta: {title: 'eSign Recipient', icon: 'domain', noCache: true, showNavbar: true},\n            },\n        ],\n    },\n];\n\nexport const eSignerCompleteRoutes: RouteRecordRaw = {\n    path: '/signing',\n    component: BaseESigner,\n    children: [\n        {\n            path: ':envelope_id/:recipient_id/complete',\n            component: () => import('@/views/eSigner/RecipientComplete.vue'),\n            name: 'esign.recipient.complete',\n            meta: {title: 'eSign Recipient Complete', icon: 'domain', noCache: true},\n        },\n    ],\n    meta: {hidden: true, noCache: false} as CommonRouteMeta\n};\n","import type {RouteRecordRaw} from 'vue-router';\nimport {CommonRouteMeta} from \"@/types\";\n\nconst BaseDashboard = () => import('@/views/dashboard/BaseDashboard.vue');\n\nconst superAdminRoutes: RouteRecordRaw = {\n    path: '/super-admin',\n    component: BaseDashboard,\n    meta: {\n        title: 'Super Admin',\n        icon: 'mdi-login',\n        noCache: false,\n        superAdmin: true,\n        hidden: true,\n        middleware: ['auth'],\n        layout: 'Dashboard',\n        roles: ['super-admin']\n    } as CommonRouteMeta,\n    children: [\n        {\n            path: '',\n            name: 'super.admin.general',\n            component: () => import('@/views/dashboard/superAdmin/General.vue'),\n        },\n        {\n            path: 'roles',\n            component: () => import('@/views/dashboard/superAdmin/rolesPermissions/RolesBase.vue'),\n            children: [\n                {\n                    path: '',\n                    name: 'super.admin.roles',\n                    component: () => import('@/views/dashboard/superAdmin/rolesPermissions/Roles.vue'),\n                },\n                {\n                    path: 'new',\n                    name: 'super.admin.roles.new',\n                    component: () => import('@/views/dashboard/superAdmin/rolesPermissions/RolesNew.vue'),\n                },\n                {\n                    path: ':role_id',\n                    name: 'super.admin.roles.edit',\n                    component: () => import('@/views/dashboard/superAdmin/rolesPermissions/RolesEdit.vue'),\n                },\n            ],\n        },\n        {\n            path: 'permissions',\n            component: () => import('@/views/dashboard/superAdmin/rolesPermissions/PermissionsBase.vue'),\n            children: [\n                {\n                    path: '',\n                    name: 'super.admin.permissions',\n                    component: () => import('@/views/dashboard/superAdmin/rolesPermissions/Permissions.vue'),\n                },\n                {\n                    path: 'new',\n                    name: 'super.admin.permissions.new',\n                    component: () => import('@/views/dashboard/superAdmin/rolesPermissions/PermissionsNew.vue'),\n                },\n                {\n                    path: ':permission_id',\n                    name: 'super.admin.permissions.edit',\n                    component: () => import('@/views/dashboard/superAdmin/rolesPermissions/PermissionsEdit.vue'),\n                },\n            ],\n        },\n        {\n            path: 'media',\n            name: 'super.admin.media',\n            component: () => import('@/views/dashboard/superAdmin/media/Media.vue'),\n        },\n        {\n            path: 'media/upload',\n            name: 'super.admin.media.upload',\n            component: () => import('@/views/dashboard/superAdmin/media/SUUploadMedia.vue'),\n        },\n        {\n            path: 'users',\n            component: () => import('@/views/dashboard/superAdmin/users/UsersBase.vue'),\n            children: [\n                {\n                    path: '',\n                    name: 'super.admin.users',\n                    component: () => import('@/views/dashboard/superAdmin/users/Users.vue'),\n                },\n                {\n                    path: ':user_id',\n                    name: 'super.admin.users.edit',\n                    component: () => import('@/views/dashboard/superAdmin/users/UsersEdit.vue'),\n                },\n            ],\n        },\n        {\n            path: 'masquerade',\n            name: 'super.admin.users.masquerade',\n            component: () => import('@/views/dashboard/superAdmin/users/UserMasquerade.vue'),\n        },\n        {\n            path: 'companies',\n            component: () => import('@/views/dashboard/superAdmin/companies/CompaniesBase.vue'),\n            children: [\n                {\n                    path: '',\n                    name: 'super.admin.companies',\n                    component: () => import('@/views/dashboard/superAdmin/companies/Companies.vue'),\n                },\n                {\n                    path: ':company_id',\n                    name: 'super.admin.company.edit',\n                    component: () => import('@/views/dashboard/superAdmin/companies/CompanyEdit.vue'),\n                },\n            ],\n        },\n        {\n            path: 'stats',\n            component: () => import('@/views/dashboard/superAdmin/stats/StatsBase.vue'),\n            children: [\n                {\n                    path: '',\n                    name: 'super.admin.stats',\n                    component: () => import('@/views/dashboard/superAdmin/stats/Stats.vue'),\n                },\n                {\n                    path: 'users',\n                    name: 'super.admin.stats.users',\n                    component: () => import('@/views/dashboard/superAdmin/stats/UserStats.vue'),\n                },\n                {\n                    path: 'subscribers',\n                    name: 'super.admin.stats.subscribers',\n                    component: () => import('@/views/dashboard/superAdmin/stats/SubscriberStats.vue'),\n                },\n            ],\n        },\n        {\n            path: 'automations',\n            component: () => import('@/views/dashboard/superAdmin/Automations/AutomationsBase.vue'),\n            children: [\n                {\n                    path: '',\n                    name: 'super.admin.automations',\n                    component: () => import('@/views/dashboard/superAdmin/Automations/Automations.vue'),\n                },\n                {\n                    path: 'trip/:trip_id',\n                    name: 'super.admin.automations.trip',\n                    component: () => import('@/views/dashboard/superAdmin/Automations/AutomationsTrip.vue'),\n                },\n            ],\n        },\n        {\n            path: 'whats-new',\n            component: () => import('@/views/dashboard/superAdmin/stats/StatsBase.vue'),\n            children: [\n                {\n                    path: '',\n                    name: 'super.admin.whats-new',\n                    component: () => import('@/views/dashboard/superAdmin/whats-new/WhatsNew.vue'),\n                },\n            ],\n        },\n        {\n            path: 'server',\n            component: () => import('@/views/dashboard/superAdmin/server/ServerBase.vue'),\n            children: [\n                {\n                    path: '',\n                    name: 'super.admin.server',\n                    component: () => import('@/views/dashboard/superAdmin/whats-new/WhatsNew.vue'),\n                },\n            ],\n        },\n        {\n            path: 'utils',\n            component: () => import('@/views/dashboard/superAdmin/companies/CompaniesBase.vue'),\n            children: [\n                {\n                    path: '',\n                    name: 'super.admin.utils',\n                    component: () => import('@/views/dashboard/superAdmin/utils/UtilsBase.vue'),\n                },\n            ],\n        },\n        {\n            path: 'push-notifications',\n            component: () => import('@/views/dashboard/superAdmin/companies/CompaniesBase.vue'),\n            children: [\n                {\n                    path: '',\n                    name: 'super.admin.push-notifications',\n                    component: () => import('@/views/dashboard/superAdmin/companies/PushNotifications.vue'),\n                },\n            ],\n        },\n        {\n            path: 'features',\n            component: () => import('@/views/dashboard/superAdmin/companies/CompaniesBase.vue'),\n            children: [\n                {\n                    path: '',\n                    name: 'super.admin.features',\n                    component: () => import('@/views/dashboard/superAdmin/companies/Features.vue'),\n                },\n            ],\n        },\n        {\n            path: 'affiliate',\n            component: () => import('@/views/dashboard/superAdmin/companies/CompaniesBase.vue'),\n            children: [\n                {\n                    path: '',\n                    name: 'super.admin.affiliate',\n                    component: () => import('@/views/dashboard/superAdmin/companies/Affiliate.vue'),\n                },\n            ],\n        },\n        {\n            path: 'cache',\n            component: () => import('@/views/dashboard/superAdmin/companies/CompaniesBase.vue'),\n            children: [\n                {\n                    path: '',\n                    name: 'super.admin.cache',\n                    component: () => import('@/views/dashboard/superAdmin/companies/Cache.vue'),\n                },\n            ],\n        },\n        {\n            path: 'affiliate/:uuid',\n            component: () => import('@/views/dashboard/superAdmin/companies/CompaniesBase.vue'),\n            children: [\n                {\n                    path: '',\n                    name: 'super.admin.affiliateSingle',\n                    component: () => import('@/views/dashboard/superAdmin/companies/AffiliateSingle.vue'),\n                },\n            ],\n        },\n    ],\n};\n\nexport default superAdminRoutes;\n","import type {RouteMeta, RouteRecordRaw} from 'vue-router';\nimport type {CommonRouteMeta} from '@/types';\n\nconst Quickstart = () => import('@/views/dashboard/Quickstart.vue');\nconst BaseDashboard = () => import('@/views/dashboard/BaseDashboard.vue');\nconst HomeDashboard = () => import('@/views/dashboard/Home.vue');\n\n\ninterface ExtendedRouteMeta extends RouteMeta, CommonRouteMeta {\n    layout?: string;\n    requiresAuth?: boolean;\n    middleware?: string[];\n    showInMenu?: boolean;\n}\n\nconst dashboardChildrenRoutes: Array<RouteRecordRaw> = [\n    {\n        path: '',\n        component: HomeDashboard,\n        name: 'dashboard',\n        meta: {title: '', icon: 'mdi-view-dashboard', noCache: false} as ExtendedRouteMeta,\n    },\n    {\n        path: 'quickstart',\n        component: Quickstart,\n        name: 'quickstart',\n        meta: {title: 'quickstart', icon: 'mdi-account', noCache: false} as ExtendedRouteMeta,\n    },\n    {\n        path: 'account',\n        component: HomeDashboard,\n        name: 'me',\n        meta: {title: 'me', icon: 'mdi-account', noCache: false} as ExtendedRouteMeta,\n    },\n    {\n        path: 'debug',\n        component: Quickstart,\n        name: 'debug.index',\n        meta: {title: 'debug', icon: 'mdi-account', noCache: false} as ExtendedRouteMeta,\n    },\n];\n\nconst dashboardRoutes: RouteRecordRaw = {\n    path: '/dashboard',\n    component: BaseDashboard,\n    meta: {\n        title: 'dashboard',\n        icon: 'mdi-view-dashboard',\n        noCache: false,\n        layout: 'Dashboard',\n        requiresAuth: true,\n        middleware: ['auth',],\n        showInMenu: true,\n    } as CommonRouteMeta,\n    children: dashboardChildrenRoutes,\n};\n\nexport default dashboardRoutes;\n","import type {RouteRecordRaw} from 'vue-router';\nimport {CommonRouteMeta} from '@/types';\n\nconst BaseAnalytics = () => import('@/views/dashboard/analytics/BaseAnalytics.vue');\nconst BaseDashboard = () => import('@/views/dashboard/BaseDashboard.vue');\nconst ConversionAnalytics = () => import('@/views/dashboard/analytics/Conversion/ConversionAnalytics.vue');\nconst VehicleAnalytics = () => import('@/views/dashboard/analytics/Vehicle/VehicleAnalytics.vue');\n\nconst analyticsRoutes: RouteRecordRaw = {\n    path: '/analytics',\n    component: BaseDashboard,\n    meta: {\n        title: 'analytics',\n        icon: 'mdi-poll',\n        noCache: false,\n        isBase: true,\n        permissions: ['listings_view'],\n        hidden: true,\n    } as CommonRouteMeta,\n    children: [\n        {\n            path: '',\n            component: BaseAnalytics,\n            name: 'analytics.index',\n            meta: {title: 'Analytics', icon: 'mdi-poll', noCache: false, isBase: true},\n        },\n        {\n            path: 'conversion',\n            component: ConversionAnalytics,\n            name: 'analytics.conversion',\n            meta: {title: 'Conversion Analytics', icon: 'mdi-poll', noCache: false, isBase: true},\n        },\n        {\n            path: 'vehicle',\n            component: VehicleAnalytics,\n            name: 'analytics.vehicle',\n            meta: {title: 'Vehicle Analytics', icon: 'mdi-poll', noCache: false, isBase: true},\n        },\n    ],\n};\n\nexport default analyticsRoutes;\n","<template>\n  <section class=\"\">\n\n    <slot>\n      <router-view />\n    </slot>\n\n  </section>\n</template>\n\n<script>\n\nexport default {\n  name: 'LayoutCompany',\n\n  middleware: ['company'],\n\n  layout: 'company',\n\n  computed: {\n    cachedViews() {\n      return this.$store.state.tagsView.cachedViews;\n    },\n    key() {\n      return this.$route.fullPath;\n    },\n  },\n};\n</script>\n\n<style lang=\"scss\">\n  .v-application ul,\n  .v-application ol {\n    padding-left: 0 !important;\n  }\n\n  .options-subtitle {\n    line-height: 1.2;\n    color: rgba(255, 255, 255, 0.7);\n    font-size: 1rem;\n    margin-top: 5px;\n  }\n</style>\n","import type {RouteRecordRaw} from 'vue-router';\nimport BaseCompany from '@/components/company/index.vue';\nimport {CommonRouteMeta} from \"@/types\";\n\nconst loadPay = () => import('@/views/pay/index.vue');\n\nconst payRoutes: RouteRecordRaw[] = [\n    {\n        path: '/pay',\n        component: BaseCompany,\n        meta: {\n            hidden: true,\n            noCache: false,\n            requiresAuth: false,\n            middleware: ['companyStore'],\n            layout: 'Default',\n        } as CommonRouteMeta,\n        children: [\n            {\n                path: ':p_id',\n                component: loadPay,\n                name: 'pay',\n                meta: {title: 'single payment', icon: 'mdi-account-outline', noCache: false},\n            },\n        ],\n    }\n];\n\nexport default payRoutes;\n","import type {RouteRecordRaw} from 'vue-router';\n\n// Route Modules\nimport authRoutes from '@/router/modules/auth';\nimport settingsRoutes from '@/router/modules/settings';\nimport commissionRoutes from './modules/commission';\nimport custodian from './modules/custodian';\nimport documentRoutes from './modules/documents';\nimport perksRoutes from '@/router/modules/perks';\nimport notificationRoutes from '@/router/modules/notifications';\nimport listingRoutes from './modules/listing';\nimport connectionsRoutes from './modules/connections';\nimport ordersRoutes from '@/router/modules/orders';\nimport customerRoutes from '@/router/modules/customers';\nimport tripExtrasRoutes from '@/router/modules/trip-extras';\nimport themeRoutes from '@/router/modules/theme';\nimport {companyRoutes, companyRoutes2} from './modules/company';\nimport {eSignerCompleteRoutes, eSignerRoutes} from './modules/e-signer';\nimport superAdminRoutes from './modules/super-admin';\nimport dashboardRoutes from './modules/dashboard';\nimport analyticsRoutes from './modules/analytics';\nimport payRoutes from './modules/pay';\n\n// Lazy-loaded components for redirects\nconst StripeRedirect = () => import('@/views/auth/StripeRedirect.vue');\nconst BraintreeRedirect = () => import('@/views/auth/BraintreeRedirect.vue');\nconst SquareRedirect = () => import('@/views/auth/SquareRedirect.vue');\n\n// Grouped Constant Routes\nconst redirectRoutes: Array<RouteRecordRaw> = [\n    {\n        path: '/stripe/redirect',\n        name: 'stripe.redirect',\n        component: StripeRedirect,\n        meta: {hidden: true, middleware: ['auth'], layout: 'Dashboard'},\n    },\n    {\n        path: '/braintree/redirect',\n        name: 'braintree.redirect',\n        component: BraintreeRedirect,\n        meta: {hidden: true, middleware: ['auth'], layout: 'Dashboard'},\n    },\n    {\n        path: '/square/redirect',\n        name: 'square.redirect',\n        component: SquareRedirect,\n        meta: {hidden: true, middleware: ['auth'], layout: 'Dashboard'},\n    },\n];\n\nconst moduleRoutes: Array<RouteRecordRaw> = [\n    // {\n    //   path: '/',\n    //   name: 'home',\n    //   components: Home,\n    //   meta: { title: 'home', icon: 'mdi-home', noCache: false },\n    //   children: [],\n    // },\n    // {\n    //   path: '/theme-test1',\n    //   name: 'theme.test1',\n    //   component: ThemeTest,\n    //   meta: { hidden: true }\n    // },\n    // {\n    //   path: '/theme-test1/:uuid',\n    //   name: 'theme.test1.single',\n    //   component: ThemeTest,\n    //   meta: { hidden: true }\n    // },\n    dashboardRoutes,\n    authRoutes,\n    custodian,\n    ...companyRoutes,\n    ...companyRoutes2,\n    ...listingRoutes,\n    ...tripExtrasRoutes,\n    ...ordersRoutes,\n    ...customerRoutes,\n    ...connectionsRoutes,\n    ...settingsRoutes,\n    ...perksRoutes,\n    ...notificationRoutes,\n    ...themeRoutes,\n    ...commissionRoutes,\n    ...payRoutes,\n    ...documentRoutes,\n    ...eSignerRoutes,\n    superAdminRoutes,\n    eSignerCompleteRoutes,\n    analyticsRoutes,\n];\n\n// Consolidated Routes\nconst constantRoutes: Array<RouteRecordRaw> = [\n    ...redirectRoutes,\n    ...moduleRoutes,\n];\n\nconst asyncRoutes: Array<RouteRecordRaw> = [];\n\nexport {constantRoutes, asyncRoutes}","export default async function companyStore({store}) {\n    console.log('%c -- MIDDLEWARE -- COMPANY STORE ✅', 'color: white; background: green; padding: 2px; font-weight: bold;');\n\n    try {\n        // Extract company from URL parameters, fwData, or fallback to window location\n        const urlParams = new URLSearchParams(window.location.search);\n        const urlCompany = urlParams.get('company');\n\n        let company = urlCompany || window.fwData?.company || window.location.host;\n\n        // if company has .fleetwire.io in it, remove it\n        if (company.includes('.fleetwire.io')) {\n            company = company.replace('.fleetwire.io', '');\n        }\n\n        console.log('%c 🏢 Detected Company:', 'color: cyan; background: black; font-weight: bold;', company);\n\n        if (!company) {\n            console.warn('%c ⚠️ No company identifier found!', 'color: orange; font-weight: bold;');\n            return;\n        }\n\n        // Fetch company details from Vuex store\n        await store.dispatch('company/fetchCompany', company);\n    } catch (error) {\n        console.error('%c ❌ Company Store Middleware Error:', 'color: red; font-weight: bold;', error);\n    }\n}","import {createI18n} from 'vue-i18n'\nimport enUS from '@/lang/en-US.json';\nimport es from '@/lang/es.json';\nimport zncn from '@/lang/zh-CN.json';\nimport {ref} from 'vue';\n\n/**\n * Supported locale types in the application\n */\nexport type SupportedLocale = 'en-US' | 'es' | 'zh-CN';\n\n/**\n * List of supported locales\n */\nexport const SUPPORT_LOCALES: SupportedLocale[] = ['en-US', 'es', 'zh-CN'];\n\n/**\n * Default locale for the application\n */\nconst DEFAULT_LOCALE: SupportedLocale = 'en-US';\n\n/**\n * Initial locale state\n */\nconst locale = ref<SupportedLocale>(DEFAULT_LOCALE);\n\n/**\n * Creates and configures the i18n instance\n */\nconst i18n = createI18n({\n    legacy: false,\n    locale: locale.value,\n    fallbackLocale: DEFAULT_LOCALE,\n    messages: {\n        'en-US': enUS,\n        'es': es,\n        'zh-CN': zncn,\n    },\n    silentTranslationWarn: true,\n    globalInjection: true,\n    modifiers: {\n        snakeCase: (str: string) => str.split(' ').join('_')\n    }\n});\n\n/**\n * Loads messages for a specific locale if they haven't been loaded yet\n * @param locale - The locale to load messages for\n */\nexport async function loadMessages(locale: SupportedLocale): Promise<void> {\n    try {\n        const messages = i18n.global.getLocaleMessage(locale);\n        if (Object.keys(messages).length === 0) {\n            const importedMessages = await import(/* @vite-ignore */`@/lang/${locale}.json`);\n            i18n.global.setLocaleMessage(locale, importedMessages.default);\n        }\n\n        if (i18n.global.locale.value !== locale) {\n            i18n.global.locale.value = locale;\n        }\n    } catch (error) {\n        console.error(`Failed to load messages for locale ${locale}:`, error);\n        throw error;\n    }\n}\n\n// Initialize with default locale\nloadMessages(DEFAULT_LOCALE).catch(error => {\n    console.error('Failed to initialize i18n with default locale:', error);\n});\n\nexport default i18n;\n","import i18n, {SUPPORT_LOCALES} from './i18n'\nimport {nextTick} from 'vue'\n\n/**\n * Supported locale types in the application\n */\ntype SupportedLocale = 'en-US' | 'es' | 'zh-CN';\n\n/**\n * Interface for user locale information\n */\ninterface UserLocale {\n    locale: SupportedLocale;\n    localeNoRegion: SupportedLocale;\n}\n\n/**\n * Translation service for handling internationalization\n */\nconst Trans = {\n    /**\n     * Switches the application language to the specified locale\n     * @param newLocale - The locale to switch to\n     */\n    async switchLanguage(newLocale: SupportedLocale): Promise<void> {\n        try {\n            await Trans.loadLocaleMessages(newLocale);\n            Trans.currentLocale = newLocale;\n            document.documentElement.setAttribute('lang', newLocale);\n            localStorage.setItem('user-locale', newLocale);\n        } catch (error) {\n            console.error('Failed to switch language:', error);\n            throw error;\n        }\n    },\n\n    /**\n     * Loads locale messages if they haven't been loaded yet\n     * @param locale - The locale to load messages for\n     */\n    async loadLocaleMessages(locale: SupportedLocale): Promise<void> {\n        if (!i18n.global.availableLocales.includes(locale)) {\n            try {\n                const messages = await import(/* @vite-ignore */ `@/lang/${locale}.json`);\n                i18n.global.setLocaleMessage(locale, messages.default);\n            } catch (error) {\n                console.error(`Failed to load messages for locale ${locale}:`, error);\n                throw error;\n            }\n        }\n        await nextTick();\n    },\n\n    /**\n     * Sets the current locale in i18n\n     */\n    set currentLocale(newLocale: SupportedLocale) {\n        i18n.global.locale.value = newLocale;\n    },\n\n    /**\n     * Gets the list of supported locales\n     */\n    get supportedLocales(): SupportedLocale[] {\n        return SUPPORT_LOCALES as SupportedLocale[];\n    },\n\n    /**\n     * Gets the default locale\n     */\n    get defaultLocale(): SupportedLocale {\n        return 'en-US';\n    },\n\n    /**\n     * Checks if a locale is supported\n     * @param locale - The locale to check\n     */\n    isLocaleSupported(locale: string): boolean {\n        return Trans.supportedLocales.includes(locale as SupportedLocale);\n    },\n\n    /**\n     * Gets the user's preferred locale from browser settings\n     */\n    getUserLocale(): UserLocale {\n        const locale = (window.navigator.language ||\n            (window.navigator as any).userLanguage ||\n            Trans.defaultLocale) as SupportedLocale;\n\n        return {\n            locale,\n            localeNoRegion: locale.split('-')[0] as SupportedLocale\n        };\n    },\n\n    /**\n     * Gets the persisted locale from localStorage\n     */\n    getPersistedLocale(): SupportedLocale | null {\n        const persistedLocale = localStorage.getItem('user-locale') as SupportedLocale | null;\n        return Trans.isLocaleSupported(persistedLocale) ? persistedLocale : null;\n    },\n\n    /**\n     * Determines the default locale based on user preferences and persisted settings\n     */\n    guessDefaultLocale(): SupportedLocale {\n        const userPersistedLocale = Trans.getPersistedLocale();\n        if (userPersistedLocale) {\n            return userPersistedLocale;\n        }\n\n        const userPreferredLocale = Trans.getUserLocale();\n        if (Trans.isLocaleSupported(userPreferredLocale.locale)) {\n            return userPreferredLocale.locale;\n        }\n\n        if (Trans.isLocaleSupported(userPreferredLocale.localeNoRegion)) {\n            return userPreferredLocale.localeNoRegion;\n        }\n\n        return Trans.defaultLocale;\n    },\n}\n\nexport default Trans;","import Tr from \"@/plugins/i18n/translations\";\n\nexport default async () => {\n    console.log('%c -- MIDDLEWARE -- LOCALE ✅', 'color: white; background: green; padding: 2px; font-weight: bold;');\n\n    try {\n        const guessedLocale = Tr.guessDefaultLocale() || Tr.defaultLocale;\n        console.log('%c 🌍 Switching Locale:', 'color: cyan; font-weight: bold;', guessedLocale);\n\n        await Tr.switchLanguage(guessedLocale);\n    } catch (error) {\n        console.error('%c ❌ Locale Middleware Error:', 'color: red; font-weight: bold;', error);\n    }\n}\n","import {Store} from 'vuex';\nimport {RootState} from '@/types/RootState';\n\n\nconst debug: boolean = true;\n\nexport default async ({store}: { store: Store<RootState> }): Promise<boolean> => {\n    console.log('%c -- MIDDLEWARE -- CHECK AUTH ✅', 'color: white;background: green; padding: 2px; font-weight: bold;');\n\n\n    const userLoaded = store.getters['auth/userLoaded'];\n    const token = store.getters['auth/token'];\n    const user = store.getters['auth/user'];\n\n    console.dir('userLoaded');\n    console.dir(userLoaded);\n\n    if (debug) {\n        console.log('%c       \\\\/     ', 'color: white;background: red; padding: 2px');\n        console.dir(store);\n        console.dir(`userLoaded: ${userLoaded}`);\n        console.dir(`token: ${token}`);\n        console.dir(user);\n        console.dir(user.email);\n\n        console.table({\n            userLoaded,\n            token: token ?? 'No Token',\n            user: user ? user.email ?? 'User Object Exists' : 'No User',\n        });\n        console.log('%c       /\\\\     ', 'color: white;background: red; padding: 2px');\n    }\n\n\n    if (!userLoaded) {\n        try {\n            console.log('%c Fetching user data...', 'color: yellow; font-weight: bold;');\n            await store.dispatch('auth/fetchUser');\n            console.log('%c ✅ User data fetched successfully!', 'color: lime; font-weight: bold;');\n        } catch (error) {\n            console.error('%c ❌ Error fetching user:', 'color: red; font-weight: bold;', error);\n        }\n    }\n\n    return true;\n}","import {Store} from 'vuex';\nimport {RootState} from '@/types/RootState';\n\nexport default async function auth({store}: { store: Store<RootState> }) {\n    console.log('%c -- MIDDLEWARE -- AUTH ✅', 'color: white;background: green; padding: 2px; font-weight: bold;');\n\n    try {\n        // Check if user is authenticated\n        if (!isLoggedIn(store)) {\n            console.warn('%c 🚪 User is NOT logged in - Redirecting...', 'color: orange; font-weight: bold;');\n            return false;\n        }\n\n        console.log('%c 🔓 User is logged in - Loading dynamic routes...', 'color: lime; font-weight: bold;');\n\n        await addDynamicRoutes(store);\n\n        return true;\n    } catch (error) {\n        console.error('%c ❌ Auth Middleware Error:', 'color: red; font-weight: bold;', error);\n        return false;\n    }\n}\n\n/**\n * Check if the user is logged in\n */\nfunction isLoggedIn(store: Store<RootState>): boolean {\n    const token = store.getters['auth/token'];\n    console.log('%c 🔑 Auth Token:', 'color: cyan; font-weight: bold;', token);\n    return !!token;\n}\n\n/**\n * Add dynamic routes\n */\nasync function addDynamicRoutes(store: Store<RootState>) {\n    try {\n        const roles = store.getters['auth/roles'];\n        const permissions = store.getters['auth/permissions'];\n\n        console.log('%c 🚀 Generating dynamic routes...', 'color: lightblue; font-weight: bold;');\n        console.table({roles});\n        console.table({permissions});\n\n        await store.dispatch('permission/generateRoutes', {roles, permissions});\n\n        console.log('%c ✅ Dynamic routes added successfully!', 'color: lime; font-weight: bold;');\n    } catch (error) {\n        console.error('%c ❌ Error adding dynamic routes:', 'color: red; font-weight: bold;', error);\n    }\n}","import {createRouter, createWebHistory, RouteLocationNormalized} from 'vue-router'\n\nimport {Store} from 'vuex';\nimport {store} from '@/store';\nimport {constantRoutes} from '@/router/routes';\nimport {RootState} from '@/types/RootState';\nimport companyStore from '@/middleware/companyStore';\nimport locale from '@/middleware/locale';\nimport checkAuth from '@/middleware/check-auth';\nimport auth from '@/middleware/auth';\nimport guest from '@/middleware/guest';\n\nconst globalMiddleware: Array<string | Function> = [];\n\nconst router = createRouter({\n    history: createWebHistory(),\n    routes: constantRoutes,\n})\n\n\nrouter.beforeEach(async (to: RouteLocationNormalized, from: RouteLocationNormalized) => {\n    console.log('%c       START BEFORE EACH IN ROUTER   \\\\/  ', 'color: black;background: yellow; padding: 2px;border-top: 1px solid red;');\n    console.dir(to);\n\n    if (store.state.app.update_available) {\n        window.location.reload();\n    }\n\n    const context: { store: Store<RootState>; to: RouteLocationNormalized; from: RouteLocationNormalized } = {\n        to,\n        from,\n        store\n    };\n\n\n    // ✅ Ensure checkAuth runs first\n    await checkAuth(context).then(() => {\n        console.log('%c checkAuth Completed ✅', 'color: green;');\n    });\n\n    // ✅ Extract middleware for the route\n    const middleware = getMiddleware(to.matched);\n\n\n    if (!middleware.length) {\n        console.log('%c NO MIDDLEWARE ❌', 'color: red;');\n        return; // No middleware, continue navigation\n    }\n\n\n    const middlewareNames = middleware.map((middleware) => {\n        return typeof middleware === 'function' ? middleware.name : middleware\n    });\n\n    console.log('%c Middleware Found ✅', 'color: white;background: pink; padding: 2px; font-weight: bold; padding: 5px;');\n    console.table(middlewareNames);\n\n    // ✅ Ensure locale middleware always runs first\n    await locale();\n\n    // COMPANY STORE MIDDLEWARE\n    if (middlewareNames.includes('companyStore')) {\n\n        await companyStore(context);\n\n    }\n\n\n    // GUEST MIDDLEWARE\n    if (middlewareNames.includes('guest')) {\n\n        if (!(await guest(context))) {\n            console.log('%c REDIRECT TO DASH', 'color: white;background: pink; padding: 2px; font-weight: bold; padding: 5px;');\n            return {name: 'dashboard'}\n        }\n    }\n\n    // AUTH MIDDLEWARE\n    if (middlewareNames.includes('auth')) {\n        console.dir('middlewareNames.includes(\\'auth\\')');\n\n        const isAuth = await auth(context);\n\n        if (\n            !isAuth &&\n            // ❗️ Avoid an infinite redirect\n            to.name !== 'login'\n        ) {\n            // redirect the user to the login page\n            return {name: 'login', query: {redirect: to.fullPath}}\n        }\n    }\n\n    console.log('%c       END BEFORE EACH IN ROUTER   /\\\\  ', 'color: black;background: yellow; padding: 2px;border-bottom: 1px solid red');\n});\n\n\nexport default router;\n\n\n/**\n * Merge the global middleware with the component's middleware.\n */\nfunction getMiddleware(matchedRoutes: RouteLocationNormalized['matched']): Array<string | Function> {\n    const middleware: Array<string | Function> = [...globalMiddleware];\n\n    matchedRoutes.forEach((route) => {\n        if (route.meta?.middleware) {\n            if (Array.isArray(route.meta.middleware)) {\n                middleware.push(...route.meta.middleware as Array<string | Function>);\n            } else {\n                middleware.push(route.meta.middleware as string | Function);\n            }\n        }\n    });\n\n    // remove duplicates\n    return [...new Set(middleware)];\n}","import axios from 'axios';\nimport {EventBus} from '@/plugins/eventBus';\nimport {\n    checkMasquerade,\n    getRegisterId,\n    getToken,\n    removeAllUserCookies,\n    removeToken,\n    setRegisterToken,\n    setToken\n} from '@/utils/auth';\nimport {Form} from '@/plugins/FWForms/index';\nimport {CartService} from '@/services/cart.service';\nimport * as types from '../mutation-types';\nimport * as Sentry from '@sentry/vue';\nimport router from '@/router';\nimport {Module} from 'vuex'\nimport {ApiToken, CompanyInterface, StoreLoaders} from '@/types';\nimport {RootState} from '@/types/RootState';\nimport {performApiRequest} from '@/store/helpers/vuex-helpers';\n\n\ninterface User {\n    crisp_email_signature?: string\n    email?: string\n    email_verified_at?: string | null\n    first_name?: string\n    last_name?: string\n    loaded: boolean\n    name?: string\n    on_trial?: boolean\n    phone?: string\n    photo_url?: string\n    uuid?: string\n    roles: Array<string>\n    permissions: Array<string>\n    identities: object | undefined\n}\n\nexport interface AuthState {\n    loading: StoreLoaders\n    authForm: Form<object>\n    user: User\n    token: string | null\n    registerId: string | null\n    roles: Array<string>\n    permissions: Array<string>\n    notifications: object\n    apiTokens: ApiToken[]\n}\n\nconst state: AuthState = {\n    loading: {\n        updatePassword: false,\n        stripe_oauth: false,\n        getApiToken: false,\n        createApiToken: false,\n        start2FAVerify: false,\n        check2FAVerify: false,\n    },\n    authForm: new Form(),\n    user: {\n        loaded: false,\n        roles: [],\n        permissions: [],\n        identities: {\n            tesla: [],\n            turo: {},\n        },\n        photo_url: '',\n    },\n    token: getToken() as string,\n    registerId: getRegisterId(),\n    notifications: {},\n\n    roles: [],\n    permissions: [],\n    apiTokens: [],\n}\n\nfunction handleCompanyConnections(commit, company: CompanyInterface) {\n    const connections = ['getaround', 'turo', 'tesla', 'bouncie', 'outdoorsy', 'hqRentals'];\n    connections.forEach(connection => {\n        const payload = company?.connections?.[connection] ?? [];\n\n        commit(`${connection}/SET_${connection.toUpperCase()}_CONNECTIONS`, payload, {root: true});\n    });\n}\n\nconst authModule: Module<AuthState, RootState> = {\n    namespaced: true,\n\n    state,\n\n    getters: {\n        user: (state: AuthState) => state.user,\n        token: (state: AuthState) => state.token,\n        registerId: (state: AuthState) => state.registerId,\n        check: (state: AuthState) => state.user.loaded !== false,\n        userLoaded: (state: AuthState) => state.user.loaded,\n        roles: (state: AuthState) => state.roles,\n        permissions: (state: AuthState) => state.permissions,\n        notifications: (state: AuthState) => state.notifications,\n        loading: (state: AuthState) => state.loading,\n        apiTokens: (state: AuthState) => state.apiTokens,\n        authForm: (state: AuthState) => state.authForm,\n    },\n\n    actions: {\n        saveToken({commit}, payload) {\n            commit(types.SAVE_TOKEN, payload);\n        },\n        saveRegisterId({commit}, id: string) {\n            commit(types.SAVE_REGISTER_ID, id);\n        },\n\n        async updateUserPassword({commit}, data: { password: string, newPassword: string }) {\n            await performApiRequest(commit, 'SET_AUTH_LOADING', 'updatePassword', () => axios.post('/v1/password/change', data));\n        },\n\n        /**\n         * Start a 2fa flow\n         */\n        async start2FAVerify({commit}, data: { channel: string, phone: string }) {\n            try {\n                return await performApiRequest(commit, 'SET_AUTH_LOADING', 'start2FAVerify', () => axios.post('/v1/2fa/start', data));\n            } catch (error) {\n                EventBus.$emit('SystemMessage', {\n                    type: 'error',\n                    message: error?.response?.data?.message || 'There was an error',\n                });\n                throw error;\n            }\n        },\n\n        /**\n         * Verify a 2fa code\n         */\n        async check2FAVerify({commit, state}, data) {\n            commit('SET_AUTH_LOADING', {subject: 'check2FAVerify', loading: true});\n\n            try {\n                state.authForm.errors.clear();\n                await performApiRequest(commit, 'SET_AUTH_LOADING', 'check2FAVerify', () => axios.post('/v1/2fa/check', data));\n                EventBus.$emit('SystemMessage', {\n                    type: 'success',\n                    message: `2FA now ${data.disable ? 'disabled' : 'enabled'}`,\n                });\n            } catch (error) {\n                state.authForm.errors.set(error?.response?.data?.errors || []);\n                EventBus.$emit('SystemMessage', {\n                    type: 'error',\n                    message: error?.response?.data?.message || 'There was an error',\n                });\n            }\n        },\n\n        async fetchSession({commit, dispatch}) {\n            commit('subscriptions/SET_SUBSCRIPTION_LOADING', {subject: 'subscription', loading: true}, {root: true});\n            commit('listing/SET_LISTING_LOADING', {subject: 'listings', loading: true}, {root: true});\n            commit('company/SET_COMPANY_LOADING', {subject: 'company', loading: true}, {root: true});\n\n            try {\n                const response = await axios.get('/v1/session');\n\n                const {\n                    subscription,\n                    subscriptionMaster,\n                    extraListingsAddon,\n                    allPermissions,\n                    enforceSubscription,\n                    fwPublicStripeKey,\n                    build,\n                    meta,\n                    currency,\n                    settings,\n                    counts,\n                    features\n                } = response.data;\n\n                const company: CompanyInterface = response.data.company;\n\n                commit('subscriptions/SET_SUBSCRIPTION', subscription, {root: true});\n                commit('subscriptions/SET_SUBSCRIPTION_MASTER', subscriptionMaster, {root: true});\n                commit('subscriptions/SET_ENFORCE_SUBSCRIPTION', enforceSubscription, {root: true});\n                commit('subscriptions/SET_EXTRA_LISTINGS_ADDON', extraListingsAddon, {root: true});\n                commit('providers/SET_PAYMENT_PROVIDERS', company.payment_profile, {root: true});\n                commit('company/SET_COMPANY', company, {root: true});\n                commit('company/SET_COMPANY_DEFAULT_META', meta, {root: true});\n                commit('company/SET_COMPANY_CURRENCY', currency, {root: true});\n                commit('company/SET_COMPANY_SETTINGS', settings, {root: true});\n                commit('company/SET_COUNTS', counts, {root: true});\n\n                if (Array.isArray(company?.listings)) {\n                    commit('listing/SET_ALL_LISTINGS', company.listings, {root: true});\n                }\n\n                commit('app/SET_ALL_POSSIBLE_PERMISSIONS', allPermissions, {root: true});\n                commit('app/SET_FW_STRIPE_KEY', fwPublicStripeKey, {root: true});\n                commit('app/SET_FW_BUILD_NUMBER', build, {root: true});\n                commit('app/SET_APP_FEATURES', features, {root: true});\n\n                if (company.notification_settings === null) {\n                    dispatch('settings/resetNotificationSettings', null, {root: true});\n                } else {\n                    commit('settings/SET_NOTIFICATION_SETTINGS', company.notification_settings, {root: true});\n                }\n\n                handleCompanyConnections(commit, company);\n            } catch (error) {\n                console.error('Error fetching session data:', error);\n            } finally {\n                commit('subscriptions/SET_SUBSCRIPTION_LOADING', {\n                    subject: 'subscription',\n                    loading: false\n                }, {root: true});\n                commit('listing/SET_LISTING_LOADING', {subject: 'listings', loading: false}, {root: true});\n                commit('company/SET_COMPANY_LOADING', {subject: 'company', loading: false}, {root: true});\n                commit('app/SET_APP_BOOTING', false, {root: true});\n            }\n        },\n\n        async fetchApiTokens({commit}) {\n            try {\n                const responseData = await performApiRequest(commit, 'SET_AUTH_LOADING', 'getApiToken', () => axios.get('/v1/user/api-tokens'));\n                commit('SET_USER_API_TOKENS', responseData.tokens);\n            } catch (error) {\n            }\n        },\n\n        async createUserTokens({commit}) {\n            try {\n                const responseData = await performApiRequest(commit, 'SET_AUTH_LOADING', 'createApiToken', () => axios.post('/v1/user/api-tokens'));\n                commit('SET_USER_API_TOKENS', responseData.tokens);\n                return responseData.token\n            } catch (error) {\n            }\n        },\n\n        async deleteApiToken({commit}, token: ApiToken) {\n            try {\n                const responseData = await performApiRequest(commit, 'SET_AUTH_LOADING', 'deleteApiToken', () => axios.delete(`/v1/user/api-tokens/${token.id}`));\n                commit('SET_USER_API_TOKENS', responseData.tokens);\n            } catch (error) {\n            }\n        },\n\n\n        async checkStripe({commit, rootGetters}) {\n            const responseData = await performApiRequest(commit, 'SET_AUTH_LOADING', 'check_stripe', () => axios.get(`/v1/company/${rootGetters['company/company'].uuid}/stripe`));\n            if (responseData?.results) {\n                EventBus.$emit('stripe-oauth-success');\n                commit('company/SET_COMPANY', responseData.company, {root: true});\n                commit(types.SET_AUTH_LOADING, {subject: 'stripe_oauth', loading: false});\n\n                return responseData.results;\n            }\n        },\n\n\n        async saveStripeUserId({state, commit}, code: string) {\n            try {\n                await performApiRequest(commit, 'SET_AUTH_LOADING', 'stripe_oauth', () => axios.post(`/v1/stripe/user-id/${code}`));\n                EventBus.$emit('stripe-oauth-success');\n            } catch (error) {\n                throw error;\n            }\n        },\n\n        async fetchUser({commit}) {\n            const masquerade = checkMasquerade();\n\n            if (masquerade) {\n                commit('app/SET_MASQUERADE_STATUS', masquerade, {root: true});\n                setToken(masquerade.user.token);\n            }\n\n            try {\n                const {data} = await axios.post('/v1/auth/user');\n\n                const {roles, permissions, email, phone, name} = data;\n\n\n                if (email) {\n                    Sentry.setUser({email, phone, name});\n\n                    // const { config } = getOptions();\n                    //\n                    // query(\"config\", config.id, {\n                    //   'user_id': data.uuid,\n                    // });\n                }\n\n                commit('SET_USER', data);\n                commit('SET_ROLES', roles);\n                commit('SET_PERMISSIONS', permissions);\n            } catch (e) {\n                console.error('fetchUser error', e);\n                commit(types.FETCH_USER_FAILURE);\n            }\n        },\n\n        resendConfirmEmail({state}) {\n            axios.post(`/v1/users/${state.user.uuid}/confirm-email/resend`)\n                .then(() => {\n                    EventBus.$emit('verify-email-resent');\n                }).catch(() => {\n            }).finally(() => {\n            });\n        },\n\n        updateUser({commit}, payload) {\n            commit(types.UPDATE_USER, payload.user);\n        },\n\n        async logout({commit}) {\n            try {\n                await axios.post('/v1/auth/logout');\n            } catch (e) {\n            }\n\n            removeToken();\n            commit(types.LOGOUT);\n            router.push({name: 'login'});\n        },\n\n    },\n\n    mutations: {\n        [types.SET_AUTH_LOADING](state, loading: { subject: string, loading: boolean }) {\n            state.loading[loading.subject] = loading.loading;\n        },\n        [types.SET_TOKEN](state, {token, remember}) {\n            state.token = token;\n            setToken(token, remember);\n        },\n        [types.SAVE_TOKEN](state, {token, remember}) {\n            state.token = token;\n            setToken(token, remember);\n        },\n        [types.SAVE_REGISTER_ID](state: AuthState, id: string) {\n            state.registerId = id;\n            setRegisterToken(id);\n        },\n        [types.SET_USER](state, user) {\n            user.loaded = true;\n            state.user = user;\n        },\n        [types.SET_ROLES](state, roles) {\n            state.roles = roles;\n            if (roles.includes('super-admin')) {\n                localStorage.setItem('super-admin', 'true');\n            }\n        },\n        [types.SET_PERMISSIONS](state, permissions) {\n            state.permissions = permissions;\n        },\n\n        [types.FETCH_USER_FAILURE](state) {\n            state.token = null;\n            removeToken();\n        },\n\n        [types.LOGOUT](state) {\n            state.user = {\n                loaded: false,\n                roles: [],\n                permissions: [],\n                identities: {},\n            };\n            // remove token\n            state.token = null;\n\n            // unset roles/permissions\n            state.roles = [];\n\n            removeAllUserCookies();\n\n            localStorage.removeItem('userListings');\n            localStorage.removeItem('turo_me');\n            localStorage.removeItem('turo_vehicles');\n            localStorage.removeItem('message_templates');\n            localStorage.removeItem('super-admin');\n            localStorage.removeItem('welcome-panel');\n            localStorage.removeItem('turo-selected-hosts');\n            localStorage.removeItem('customer');\n            CartService.removeCartUuid();\n        },\n\n        [types.UPDATE_USER](state, {user}) {\n            state.user = user;\n        },\n        [types.SET_USER_NOTIFICATIONS](state, notifications) {\n            state.notifications = notifications;\n        },\n        [types.SET_USER_API_TOKENS](state, tokens) {\n            state.apiTokens = tokens;\n        },\n    }\n}\n\nexport default authModule;\n","const TOKEN_KEY = 'access_token';\nconst COMPANY_UUID_KEY = 'company_uuid';\nconst REFRESH_TOKEN_KEY = 'refresh_token';\n\nconst StorageService = {\n\n    saveCompanyUuid(uuid: string): void {\n        localStorage.setItem(COMPANY_UUID_KEY, uuid);\n    },\n\n    getCompanyUuid() {\n        return localStorage.getItem(COMPANY_UUID_KEY);\n    },\n\n    removeCompanyUuid() {\n        localStorage.removeItem(COMPANY_UUID_KEY);\n    },\n\n\n    saveShepherdTour(name: string) {\n        localStorage.setItem(`shepherd-${name}`, new Date().getTime().toString());\n    },\n\n    getShepherdTour(name: string): string | null {\n        return localStorage.getItem(`shepherd-${name}`);\n    },\n};\n\nexport {StorageService};\n","import {EventBus} from '@/plugins/eventBus';\nimport axios from 'axios';\nimport * as types from '@/store/mutation-types';\nimport {Form} from '@/plugins/FWForms/index';\nimport {cloneDeep, get, uniqBy} from 'lodash';\nimport {StorageService} from '@/services/storage.service';\n\nexport interface AutomationsState {\n    loading: Record<string, boolean>;\n    form: Form<any>;\n    automationUnits: any[];\n    eventTypes: any[];\n    currentEvent: any;\n    currentEventOriginal: any;\n    messageTemplates: any[];\n    events: any[];\n    currentPageEvents: any;\n    eventsMeta: any;\n    eventMeta: any;\n    eventLogs: any[];\n\n}\n\n// state\nconst state: AutomationsState = {\n    loading: {\n        messageTemplate: false,\n        triggered: false,\n        upcoming: false,\n        other: false,\n        update: false,\n        cancel: false,\n        logs: false,\n        sendNow: false,\n        delete_automation: false,\n        pause_automation: false,\n    },\n    form: new Form(),\n    automationUnits: [\n        {\n            name: 'Minutes',\n            code: 'minutes',\n        },\n        {\n            name: 'Hours',\n            code: 'hours',\n        },\n        {\n            name: 'Days',\n            code: 'days',\n        },\n        {\n            name: 'Weeks',\n            code: 'weeks',\n        },\n    ],\n    eventTypes: [\n        {\n            label: 'Pre-trip Photos Rule',\n            value: 'photos_rule',\n            disabled: true,\n            comingSoon: true,\n        },\n        {\n            label: 'Booking Request',\n            value: 'booking_request',\n        },\n        {\n            label: 'Trip Booked',\n            value: 'trip_booked',\n        },\n        {\n            label: 'Start of Trip',\n            value: 'start_of_trip',\n        },\n        {\n            label: 'Halfway Point',\n            value: 'halfway',\n        },\n        {\n            label: '3/4 Point',\n            value: '3_4',\n        },\n        {\n            label: 'End of Trip',\n            value: 'end_of_trip',\n        },\n        {\n            label: 'Post-rental',\n            value: 'post_rental',\n        },\n    ],\n    currentEvent: {},\n    currentEventOriginal: {},\n    messageTemplates: [],\n    events: [],\n    currentPageEvents: {\n        upcoming: [],\n        triggered: [],\n        other: [],\n    },\n    eventsMeta: {\n        current_page: 0,\n    },\n    eventMeta: {\n        upcoming: {\n            current_page: 0,\n            per_page: 100,\n        },\n        triggered: {\n            current_page: 0,\n            per_page: 100,\n        },\n        other: {\n            current_page: 0,\n            per_page: 100,\n        },\n    },\n    eventLogs: [],\n};\n\nconst getters = {\n    loading: state => state.loading,\n    eventTypes: state => state.eventTypes,\n    messageTemplates: state => state.messageTemplates,\n    currentEvent: state => state.currentEvent,\n    currentEventOriginal: state => state.currentEventOriginal,\n    automationUnits: state => state.automationUnits,\n    automationForm: state => state.form,\n    events: state => state.events,\n    currentPageEvents: state => state.currentPageEvents,\n    eventsMeta: state => state.eventsMeta,\n    eventMeta: state => state.eventMeta,\n    eventLogs: state => state.eventLogs,\n};\n\nconst mutations = {\n    [types.SET_AUTOMATION_LOADING](state, loading) {\n        state.loading[loading.subject] = loading.loading;\n    },\n    [types.SET_MESSAGE_TEMPLATES](state, messageTemplates) {\n        state.messageTemplates = messageTemplates;\n    },\n    [types.SET_CURRENT_AUTOMATION_EVENT](state, event) {\n        state.currentEventOriginal = cloneDeep(event);\n        state.currentEvent = event;\n    },\n    [types.SET_AUTOMATION_EVENTS](state, events) {\n        state.currentPageEvents[events.type] = events.data.data;\n        state.events = uniqBy([...state.events, ...events.data.data], w => w.uuid);\n\n        delete events.data.data;\n        delete events.data.links;\n        state.eventMeta[events.type] = events.data;\n    },\n    [types.SET_CURRENT_EVENT_LOGS](state, logs) {\n        state.eventLogs = logs;\n    },\n};\n\nconst actions = {\n\n\n    /**\n     * Fetch automations\n     *\n     * @param commit\n     */\n    fetchAutomations({commit}) {\n        axios.get('/v1/automations')\n            .then((response) => {\n                commit('SET_MESSAGE_TEMPLATES', get(response, 'data.automations', []));\n            }).catch(() => {\n        }).finally(() => {\n        });\n    },\n\n\n    /**\n     * Fetch automations events\n     *\n     * @param commit\n     * @param {Object} data\n     */\n    fetchAutomationsEvents({commit}, data) {\n        commit('SET_AUTOMATION_LOADING', {subject: 'upcoming', loading: true});\n\n        const page = get(data, 'page', 1);\n        const perPage = get(data, 'perPage', 100);\n\n        axios.get(`/v1/automations-events?type=upcoming&page=${page}&perPage=${perPage}`)\n            .then((response) => {\n                const data = {\n                    data: get(response, 'data.events', []),\n                    type: 'upcoming',\n                };\n                commit('SET_AUTOMATION_EVENTS', data);\n            }).catch(() => {\n        }).finally(() => {\n            commit('SET_AUTOMATION_LOADING', {subject: 'upcoming', loading: false});\n        });\n    },\n\n\n    /**\n     * Fetch triggered automations events\n     *\n     * @param commit\n     * @param {Object} data\n     */\n    fetchTriggeredAutomationsEvents({commit}, data) {\n        commit('SET_AUTOMATION_LOADING', {subject: 'triggered', loading: true});\n\n        const page = get(data, 'page', 1);\n        const perPage = get(data, 'perPage', 100);\n\n        axios.get(`/v1/automations-events?type=triggered&page=${page}&perPage=${perPage}`)\n            .then((response) => {\n                const data = {\n                    data: get(response, 'data.events', []),\n                    type: 'triggered',\n                };\n                commit('SET_AUTOMATION_EVENTS', data);\n            }).catch(() => {\n        }).finally(() => {\n            commit('SET_AUTOMATION_LOADING', {subject: 'triggered', loading: false});\n        });\n    },\n\n    /**\n     * Fetch other automations events\n     *\n     * @param commit\n     * @param {Object} data\n     */\n    fetchOtherAutomationsEvents({commit}, data) {\n        commit('SET_AUTOMATION_LOADING', {subject: 'other', loading: true});\n\n        const page = get(data, 'page', 1);\n        const perPage = get(data, 'perPage', 100);\n\n        axios.get(`/v1/automations-events?type=other&page=${page}&perPage=${perPage}`)\n            .then((response) => {\n                const data = {\n                    data: get(response, 'data.events', []),\n                    type: 'other',\n                };\n                commit('SET_AUTOMATION_EVENTS', data);\n            }).catch(() => {\n        }).finally(() => {\n            commit('SET_AUTOMATION_LOADING', {subject: 'other', loading: false});\n        });\n    },\n\n\n    /**\n     * Update a automation event\n     *\n     * @param commit\n     * @param {Object} event\n     */\n    updateAutomationEvent({commit}, event) {\n        commit('SET_AUTOMATION_LOADING', {subject: 'update', loading: true});\n\n        axios.put(`/v1/company/${StorageService.getCompanyUuid()}/automations-events/${event.uuid}`, event)\n            .then((response) => {\n                EventBus.$emit('update-automation-event-success', get(response, 'data.event'));\n            }).catch(() => {\n        }).finally(() => {\n            commit('SET_AUTOMATION_LOADING', {subject: 'update', loading: false});\n        });\n    },\n\n\n    /**\n     * Send an automation event now (override trigger date and send it now)\n     *\n     * @param commit\n     * @param {Object} event\n     */\n    sendAutomationEventNow({commit}, event) {\n        commit('SET_AUTOMATION_LOADING', {subject: 'sendNow', loading: true});\n\n        axios.post(`/v1/automations-events/${event.uuid}/send`)\n            .then((response) => {\n                EventBus.$emit('send-now-automation-event-success', get(response, 'data.event'));\n            }).catch((e) => {\n            EventBus.$emit('send-now-automation-event-failure', get(e, 'response.data.message', 'There was an error.'));\n        }).finally(() => {\n            commit('SET_AUTOMATION_LOADING', {subject: 'sendNow', loading: false});\n        });\n    },\n\n    /**\n     * Cancel a automation event\n     *\n     * @param commit\n     * @param {Object} event\n     */\n    cancelAutomationEvent({commit}, event) {\n        commit('SET_AUTOMATION_LOADING', {subject: 'cancel', loading: true});\n\n        axios.delete(`/v1/company/${StorageService.getCompanyUuid()}/automations-events/${event.uuid}`)\n            .then((response) => {\n                EventBus.$emit('cancel-automation-event-success', get(response, 'data.event'));\n            }).catch(() => {\n        }).finally(() => {\n            commit('SET_AUTOMATION_LOADING', {subject: 'cancel', loading: false});\n        });\n    },\n\n\n    /**\n     * Get an automation event logs\n     *\n     * @param commit\n     * @param {Object} event\n     */\n    getAutomationEventLogs({commit}, event) {\n        commit('SET_AUTOMATION_LOADING', {subject: 'logs', loading: true});\n\n        axios.get(`/v1/company/${StorageService.getCompanyUuid()}/automations-events/${event.uuid}/activity-logs`)\n            .then((response) => {\n                commit('SET_CURRENT_EVENT_LOGS', get(response, 'data.logs'));\n                EventBus.$emit('get-automation-event-logs-success');\n            }).catch(() => {\n        }).finally(() => {\n            commit('SET_AUTOMATION_LOADING', {subject: 'logs', loading: false});\n        });\n    },\n\n\n    /**\n     * Add message templates\n     *\n     * @param state\n     * @param commit\n     * @param {Object} template\n     */\n    addMessageTemplates({state, commit}, template) {\n        state.form.errors.clear();\n        state.form.busy = true;\n\n        axios.post('/v1/automations', template)\n            .then((response) => {\n                EventBus.$emit('add-message-template-success');\n                commit('SET_MESSAGE_TEMPLATES', get(response, 'data.automations', []));\n                commit('SET_AUTOMATION_EVENTS', get(response, 'data.events', []));\n            }).catch((e) => {\n            state.form.errors.set(get(e, 'response.data.errors'));\n        }).finally(() => {\n            state.form.busy = false;\n        });\n    },\n\n\n    /**\n     * Save message templates\n     *\n     * @param state\n     * @param commit\n     * @param {Object} template\n     * @param {String} template.uuid\n     */\n    saveMessageTemplates({state, commit}, template) {\n        state.form.errors.clear();\n        state.form.busy = true;\n\n        axios.put(`/v1/automations/${template.uuid}`, template)\n            .then((response) => {\n                EventBus.$emit('save-message-template-success');\n                commit('SET_MESSAGE_TEMPLATES', get(response, 'data.automations', []));\n                commit('SET_AUTOMATION_EVENTS', get(response, 'data.events', []));\n            }).catch((e) => {\n            state.form.errors.set(get(e, 'response.data.errors'));\n        }).finally(() => {\n            state.form.busy = false;\n        });\n    },\n\n\n    /**\n     * Delete message template\n     *\n     * @param commit\n     * @param {Array<String>} uuids\n     */\n    deleteMessageTemplates({commit}, uuids) {\n        commit('SET_AUTOMATION_LOADING', {subject: 'delete_automation', loading: true});\n\n        axios.post('/v1/automations/delete', {uuids})\n            .then((response) => {\n                EventBus.$emit('delete-message-template-success');\n                commit('SET_MESSAGE_TEMPLATES', get(response, 'data.automations', []));\n                commit('SET_AUTOMATION_EVENTS', get(response, 'data.events', []));\n            }).catch(() => {\n        }).finally(() => {\n            commit('SET_AUTOMATION_LOADING', {subject: 'delete_automation', loading: false});\n        });\n    },\n\n    /**\n     * Activate/deactivate message template\n     *\n     * @param commit\n     * @param {Object} data\n     */\n    pauseMessageTemplates({commit}, data) {\n        commit('SET_AUTOMATION_LOADING', {subject: 'pause_automation', loading: true});\n\n        axios.post('/v1/automations/pause', data)\n            .then((response) => {\n                EventBus.$emit('pause-message-template-success');\n                commit('SET_MESSAGE_TEMPLATES', get(response, 'data.automations', []));\n                commit('SET_AUTOMATION_EVENTS', get(response, 'data.events', []));\n            }).catch(() => {\n        }).finally(() => {\n            commit('SET_AUTOMATION_LOADING', {subject: 'pause_automation', loading: false});\n        });\n    },\n};\n\nexport default {\n    namespaced: true,\n    state,\n    mutations,\n    actions,\n    getters,\n};\n","import axios from 'axios';\nimport * as types from '@/store/mutation-types';\nimport {createUrlQueryString} from '@/utils/urls';\nimport {performApiRequest} from '@/store/helpers/vuex-helpers';\nimport {StoreLoaders} from '@/types';\nimport {push} from 'notivue';\n\ntype Axel = {\n    active: boolean,\n    balance: number,\n    client_id: string | null,\n    client_secret: string | null,\n    created_at: string,\n    low_balance_threshold: number,\n    refill_amount: number,\n    updated_at: string,\n    uuid: string,\n}\n\nexport type AxelIgnition = {\n    created_at: string,\n    ignition_uri: string,\n    policies: any | null,\n    policy_account_id: any | null,\n    results: any | null,\n    status: any | null,\n    updated_at: string | null\n    uuid: string,\n}\n\nexport type AxleState = {\n    loading: StoreLoaders,\n    axleAccount: Axel | null,\n    ignitions: AxelIgnition[],\n    incomingIgnition: object | null,\n}\n\n\n// state\nconst state: AxleState = {\n    loading: {\n        getLinks: false,\n        getCheckoutLink: false,\n        fetchStartLink: false,\n        refreshIgnition: false,\n        startAxleAccount: false,\n        axel_get: false,\n    },\n    axleAccount: null,\n    ignitions: [],\n    incomingIgnition: null,\n};\n\nconst getters = {\n    loading: (state: AxleState) => state.loading,\n    axleAccount: (state: AxleState) => state.axleAccount,\n    ignitions: (state: AxleState) => state.ignitions,\n    incomingIgnition: (state: AxleState) => state.incomingIgnition,\n};\n\nconst mutations = {\n    [types.SET_AXLE_LOADING](state: AxleState, loading: { subject: string, loading: boolean }) {\n        state.loading[loading.subject] = loading.loading;\n    },\n\n    [types.SET_AXLE](state: AxleState, axle: Axel | null) {\n        state.axleAccount = axle;\n    },\n    [types.SET_AXLE_IGNITIONS](state: AxleState, ignitions: AxelIgnition[]) {\n        state.ignitions = ignitions;\n    },\n    [types.SET_INCOMING_AXLE_IGNITION](state: AxleState, payload: object) {\n        state.incomingIgnition = payload;\n    },\n    [types.MERGE_AXLE_IGNITION](state: AxleState, ignition: AxelIgnition) {\n        const index = state.ignitions.findIndex((i) => i.uuid === ignition.uuid);\n\n        if (index !== -1) {\n            state.ignitions[index] = ignition;\n        }\n    },\n};\n\nconst actions = {\n\n    /**\n     * Get Axle account\n     */\n    async getAxle({commit}) {\n        const responseData = await performApiRequest(commit, 'SET_AXLE_LOADING', 'axel_get', () => axios.get('/v1/axle'));\n        commit(types.SET_AXLE, responseData.data);\n    },\n\n\n    /**\n     * Fetch a checkout link\n     */\n    async getCheckoutLink({commit}, data: { credits: number }) {\n        return await performApiRequest(commit, 'SET_AXLE_LOADING', 'getCheckoutLink', () => axios.post('/v1/axle/checkout-link', data));\n    },\n\n    async startAxleAccount({commit}) {\n        return await performApiRequest(commit, 'SET_AXLE_LOADING', 'startAxleAccount', () => axios.post('/v1/axle/create-account'));\n    },\n\n    async testAutoRecharge({commit}) {\n        return await performApiRequest(commit, 'SET_AXLE_LOADING', 'startAxleAccount', () => axios.post('/v1/axle/test-auto-recharge'));\n    },\n\n    /**\n     * Fetch a start ignition link\n     */\n    async fetchStartIgnitionLink({commit}, data: { r_id?: string, b_id?: string }) {\n        try {\n            const responseData = await performApiRequest(commit, 'SET_AXLE_LOADING', 'fetchStartLink', () => axios.post('/v1/axle/start-ignition', data));\n            commit(types.SET_AXLE_IGNITIONS, responseData.ignitions);\n        } catch (error) {\n            push.error({\n                message: error?.response?.data?.message || 'An error occurred while fetching the ignition link',\n            });\n        }\n    },\n\n    /**\n     * Fetch a start ignition link (public)\n     */\n    async fetchStartIgnitionLinkPublic({commit}, data: { b_id: string }) {\n        try {\n            const responseData = await performApiRequest(commit, 'SET_AXLE_LOADING', 'fetchStartLink', () => axios.post('/v1/axle/start-ignition/start', data));\n            return responseData.url;\n        } catch (error) {\n            push.error({\n                message: error?.response?.data?.message || 'There was an error',\n            });\n        }\n    },\n\n\n    /**\n     * Get ignition links\n     */\n    async getIgnitionLinks({commit}, data = []) {\n        try {\n            const query = createUrlQueryString(data);\n            const responseData = await performApiRequest(commit, 'SET_AXLE_LOADING', 'getLinks', () => axios.get(`/v1/axle/ignitions${query}`));\n            commit(types.SET_AXLE_IGNITIONS, responseData.ignitions);\n        } catch (error) {\n            push.error({\n                message: error?.response?.data?.message || 'There was an error',\n            });\n        }\n    },\n\n    /**\n     * Refresh ignition link\n     */\n    async refreshIgnition({commit}, data: AxelIgnition) {\n        try {\n            const responseData = await performApiRequest(commit, 'SET_AXLE_LOADING', 'refreshIgnition', () => axios.post(`/v1/axle/ignitions/${data.uuid}/refresh`));\n            commit(types.MERGE_AXLE_IGNITION, responseData.ignition);\n            return responseData;\n        } catch (error) {\n            push.error({\n                message: error?.response?.data?.message || 'There was an error',\n            });\n        }\n    },\n};\n\nexport default {\n    namespaced: true,\n    state,\n    mutations,\n    actions,\n    getters,\n};\n","import {EventBus} from '@/plugins/eventBus';\nimport axios from 'axios';\nimport * as types from '@/store/mutation-types';\nimport {CartService} from '@/services/cart.service';\nimport {createUrlQueryString} from '@/utils/urls';\nimport {performApiRequest} from \"@/store/helpers/vuex-helpers\";\n\n\ninterface Barcode {\n    barcode_type: string;\n    created_at?: string;\n    image_url: string;\n    number: string;\n    owner_id: string;\n    owner_type: string;\n    updated_at?: string;\n    uuid?: string;\n}\n\n\nexport interface BarcodeState {\n    loading: Record<string, boolean>;\n    barcode: Barcode;\n}\n\n// state\nconst state: BarcodeState = {\n    loading: {\n        fetchCart: false,\n        delete: false,\n        create: false,\n    },\n    barcode: null,\n};\n\nconst getters = {\n    loading: (state: BarcodeState) => state.loading,\n    barcode: (state: BarcodeState) => state.barcode,\n};\n\nconst mutations = {\n    [types.SET_BARCODE_LOADING](state: BarcodeState, loading: { subject: string, loading: boolean }) {\n        state.loading[loading.subject] = loading.loading;\n    },\n    [types.SET_BARCODE](state: BarcodeState, barcode: Barcode) {\n        state.barcode = barcode;\n    },\n};\n\nconst actions = {\n\n    async findBarcode({commit}, payload: Record<string, string>) {\n        const queryString = createUrlQueryString(payload);\n\n        return axios.get(`/v1/barcodes${queryString}`)\n            .then((response) => {\n                commit(types.SET_BARCODE, response.data.barcode);\n                EventBus.$emit('get-barcode-success', response.data.barcode);\n            }).catch(() => {\n            }).finally(() => {\n            });\n    },\n\n\n    /**\n     * Update a barcode\n     */\n    updateBarcode({commit}, barcode: Barcode) {\n        axios.put(`/v1/barcodes/${barcode.uuid}`, barcode)\n            .then((response) => {\n                commit(types.SET_BARCODE, response.data.barcode);\n                EventBus.$emit('update-barcode-success', response.data.barcode);\n            }).catch(() => {\n        }).finally(() => {\n        });\n    },\n\n\n    /**\n     * Create a new barcode\n     */\n    async createBarcode({commit}, data: Barcode) {\n        try {\n            const responseData = await performApiRequest(commit, 'SET_BARCODE_LOADING', 'create', () => axios.post('/v1/barcodes', data));\n            commit(types.SET_BARCODE, responseData.barcode);\n            EventBus.$emit('create-barcode-success', responseData.barcode);\n        } catch (error) {\n            EventBus.$emit('fetch-cart-error', error.response);\n            if (error.response.status === 404) {\n                CartService.removeCartUuid();\n                window.location.reload();\n            }\n        }\n    },\n\n    /**\n     * Delete a barcode\n     */\n    async deleteBarcode({commit}, barcode: Barcode) {\n        try {\n            await performApiRequest(commit, 'SET_BARCODE_LOADING', 'delete', () => axios.delete(`/v1/barcodes/${barcode.uuid}`));\n            commit(types.SET_BARCODE, null);\n        } catch (error) {\n        }\n    },\n};\n\nexport default {\n    namespaced: true,\n    state,\n    mutations,\n    actions,\n    getters,\n};\n","import {Form} from '@/plugins/FWForms/index';\nimport {findIndex, get, remove, set} from 'lodash';\nimport axios from 'axios';\nimport {EventBus} from '@/plugins/eventBus';\nimport dayjs, {Dayjs} from 'dayjs';\nimport duration from 'dayjs/plugin/duration';\nimport {StorageService} from '@/services/storage.service';\nimport * as types from '../mutation-types';\nimport {createOrderUrlQueryString} from '@/utils/urls';\nimport {BookingInterface, ListingInterface, OrderLine, StoreLoaders} from '@/types';\nimport {performApiRequest} from '@/store/helpers/vuex-helpers';\nimport {GetterTree} from 'vuex';\nimport {RootState} from '@/types/RootState';\nimport {push} from 'notivue'\n\ndayjs.extend(duration);\n\nexport type CancelBookingPayload = {\n    b_id: string;\n    refund: boolean;\n    unblockTuro: boolean;\n    sendCancellationEmail: boolean;\n}\n\n\ntype BookingQueryOptions = {\n    page?: number,\n    sortDesc?: string[] | boolean,\n    itemsPerPage?: number,\n    includeAbandoned?: boolean,\n    onlyAbandoned?: boolean,\n    withOrderProperties?: boolean,\n    withRenterProperties?: boolean,\n    searchTerm?: string,\n    searchTopic?: string,\n    exporting?: boolean,\n    providers?: string[],\n    statuses?: string[],\n    filter?: any,\n    sortBy?: Array<{ key: string, order: string }>\n}\n\n\nfunction prepareBookingData(options: BookingQueryOptions = {}) {\n    const {\n        page = 1,\n        sortDesc = [],\n        itemsPerPage = 20,\n        includeAbandoned = false,\n        onlyAbandoned = false,\n        withOrderProperties,\n        withRenterProperties,\n        searchTerm,\n        searchTopic,\n        exporting,\n        providers = [],\n        statuses = [],\n        filter,\n        sortBy\n    } = options;\n\n    const data: {\n        page: number;\n        sortDesc: string | boolean;\n        itemsPerPage: number;\n        includeAbandoned?: boolean;\n        onlyAbandoned?: boolean;\n        withOrderProperties?: boolean;\n        withRenterProperties?: boolean;\n        searchTerm?: string;\n        searchTopic?: string;\n        exporting?: boolean;\n        providers: string[];\n        statuses?: string;\n        filter?: any;\n        sortBy?: string;\n        filterQuery?: string;\n    } = {\n        page,\n        sortDesc: Array.isArray(sortDesc) && sortDesc.length === 1 ? sortDesc[0] : !!sortDesc,\n        itemsPerPage,\n        includeAbandoned,\n        onlyAbandoned,\n        withOrderProperties,\n        withRenterProperties,\n        searchTerm,\n        searchTopic,\n        exporting,\n        providers\n    };\n\n    if (statuses.length > 0) {\n        data.statuses = statuses.join(',');\n    }\n\n    if (providers.length > 0) {\n        data.statuses = providers.join(',');\n    }\n\n    if (!includeAbandoned) {\n        delete data.includeAbandoned;\n    }\n\n    if (!onlyAbandoned) {\n        delete data.onlyAbandoned;\n    }\n\n    if (filter) {\n        data.filter = filter;\n        data.filterQuery = Object.entries(filter)\n            .filter(([_, value]) => value)\n            .map(([key, value]) => `filter[${key}]=${value}`)\n            .join('&');\n    }\n\n    if (sortBy) {\n        data.sortBy = sortBy?.[0]?.key;\n        data.sortDesc = sortBy?.[0]?.order === 'desc';\n    }\n\n    return data;\n}\n\nexport interface BookingGetters extends GetterTree<BookingState, RootState> {\n    init(state: BookingState): boolean;\n\n    notFound(state: BookingState): boolean;\n\n    statusFilterItems(state: BookingState): string[];\n\n    startsAtFilterItems(state: BookingState): string | null;\n\n    statusFilterTemp(state: BookingState): string[];\n\n    paymentStatusFilterItems(state: BookingState): string[];\n\n    activityFilter(state: BookingState): string;\n\n    sourcesFilter(state: BookingState): string[];\n\n    booking(state: BookingState): BookingInterface;\n\n    priorityBookings(state: BookingState): BookingInterface[];\n\n    bookings(state: BookingState): BookingInterface[];\n\n    meta(state: BookingState): any;\n\n    fleetResources(state: BookingState): any;\n\n    abandonedBookings(state: BookingState): BookingInterface[];\n\n    totalBookings(state: BookingState): number;\n\n    customerBooking(state: BookingState): any;\n\n    bookingLoading(state: BookingState): Record<string, boolean>;\n\n    calendarAttributes(state: BookingState): any[];\n\n    bookingCustomer(state: BookingState): any;\n\n    bookingVehicle(state: BookingState): any;\n\n    completeBooking(state: BookingState): {\n        b_id: string,\n    };\n\n    filteredMake(state: BookingState): object[];\n\n    turoBookings(state: BookingState): any[];\n\n    rememberedCustomer(state: BookingState): any;\n\n    res2(state: BookingState): any;\n\n    bookingForm(state: BookingState): Form<any>;\n\n    bookingPayments(state: BookingState): any[];\n\n    automationEvents(state: BookingState): any[];\n}\n\n\ntype BookingVehicleSwapData = {\n    b_id: string,\n    listing: ListingInterface,\n    transferListingData: boolean,\n    transferUnavailabilityOnCarSharing: boolean,\n}\n\ntype CalendarAttribute = {\n    key: string,\n    id?: number,\n    highlight: {\n        color: string,\n        fillMode: string,\n    },\n    dates: string | Dayjs | Date | string[],\n    popover: {\n        label: string,\n    },\n    bar?: string,\n    trip_start?: string,\n    trip_end?: string,\n    trip_start_buffer?: string,\n    trip_end_buffer?: string,\n}\n\n\nexport interface BookingMeta {\n    current_page: number;\n    from: number | null;\n    last_page: number;\n    links: Array<{ url: string | null, label: string, active: boolean }>;\n    path: string;\n    per_page: number;\n    stats: {\n        count: {\n            [key: string]: number,\n        },\n        payment_status: {\n            [key: string]: number,\n        },\n        sources: {\n            [key: string]: number,\n        },\n        statuses: {\n            [key: string]: number,\n        },\n        tag_list: string[],\n        total: number,\n    }\n    to: number | null;\n    total: number;\n    total_bookings: number;\n}\n\nexport type BookingState = {\n    dialogs: Record<string, boolean>,\n    loading: StoreLoaders,\n    init: boolean,\n    notFound: boolean,\n    listing: ListingInterface,\n    statusFilterItems: string[],\n    startsAtFilterItems: string | null,\n    statusFilterTemp: string[],\n    paymentStatusFilterItems: string[],\n    activityFilter: string,\n    sourcesFilter: string[],\n    booking: BookingInterface,\n    priorityBookings: BookingInterface[],\n    bookings: BookingInterface[],\n    meta: BookingMeta,\n    fleetResources: any,\n    abandoned_bookings: BookingInterface[],\n    totalBookings: number,\n    customerBooking: any,\n    calendarAttributes: CalendarAttribute[],\n    unavailableDates: any[],\n    completeBooking: {\n        b_id: string,\n    },\n    filteredMake: object[],\n    turoBookings: any[],\n    rememberedCustomer: any,\n    res2: any,\n    bookingForm: Form<any>,\n    bookingPayments: any[],\n    automationEvents: any[],\n}\n\n\nconst state: BookingState = {\n    init: false,\n    notFound: false,\n\n    dialogs: {\n        createTripExtensionDialog: false,\n    },\n\n    loading: {\n        booking: false,\n        booking_logs: false,\n        bookings: false,\n        meta: false,\n        priority_bookings: false,\n        fleet_resources: false,\n        manualCheckout: false,\n        check_vehicles_availability: false,\n        updateBooking: false,\n        extendBooking: false,\n        deleteExtension: false,\n        cancelBooking: false,\n        bookingPayments: false,\n        bookingStatus: false,\n        addOrderItem: false,\n        startBookingVehicleSwap: false,\n        startBookingVehicleSwapStep2: false,\n        attachCommissionPartner: false,\n        getAutomationEvents: false,\n        updateBookingCustomerFields: false,\n        manuallyRemoveBooking: false,\n        deleteTripPhotos: false,\n    },\n\n    bookingForm: new Form(),\n\n    listing: null,\n\n    customerBooking: {},\n\n    totalBookings: 0,\n    priorityBookings: [],\n    bookings: [],\n    abandoned_bookings: [],\n\n    booking: {\n        init: false,\n        complete: 0,\n        created_at: '',\n        days: 0,\n        delivery_price: 0,\n        discount: 0,\n        extras_price: 0,\n        manually_deleted_at: null,\n        booking_meta: null,\n        payment_status: '',\n        price_per_day: 0,\n        r_id: '',\n        renter: null,\n        required_options_price: 0,\n        source: '',\n        status: '',\n        taxes: 0,\n        timezone: '',\n        total: 0,\n        trip_end: '',\n        trip_end_tz: '',\n        trip_start: '',\n        trip_start_tz: '',\n        turo_trip: null,\n        updated_at: '',\n        method: '',\n        miles_extra: 0,\n        miles_included: 0,\n\n        b_id: null,\n        l_id: null,\n        cartId: null,\n\n        host: null,\n\n        order_items: [],\n\n        customer: {\n            firstName: '',\n            lastName: '',\n            phone: '',\n            email: '',\n            dob: '',\n            age: '',\n            signaturePng: '',\n            signFullName: '',\n            signInitials: '',\n            agreeAdoptSignature: false,\n            agreeToS: false,\n        },\n\n        settings: {\n            zip_code: '',\n            age_requirement: 0,\n            mile_allowance: {\n                miles_included: 0,\n                miles_extra: 0,\n                miles_extra_selected: false,\n            },\n\n            young_driver: 0,\n            description: '',\n        },\n\n        vehicle: {\n            available: false,\n            price: 0,\n            title: '',\n            color: '',\n            year: '',\n            image: '',\n            images: [],\n            duration: '',\n            miles_included: '',\n            lat: '',\n            long: '',\n        },\n\n        listing: null,\n\n        pricing: {\n            original_price: 0,\n            price: 0,\n            price_type: '',\n            price_period: '',\n\n            discounts: {\n                success: false,\n                loading: false,\n                discounted: false,\n                code: '',\n                discount: '',\n                discountValue: 0,\n                newPrice: 0,\n                type: '',\n                reason: '',\n            },\n\n            delivery: 0,\n            extras: 0,\n            requiredOption: 0,\n            total_per_day: 0,\n            subTotal: 0,\n            grandTotal: 0,\n            paymentDisplay: '',\n            security_deposit: 0,\n        },\n\n        trip_required_options: [],\n\n        trip_displays: {\n            tripMilesUnlimited: false,\n            tripMilesIncluded: '',\n            tripMilesOverageDisplay: '',\n            tripMilesHelpModalDisplay: '',\n\n            young_driver: {\n                helpModalDisplaySet: false,\n                helpModalDisplayH1: '',\n                helpModalDisplayP1: '',\n            },\n        },\n\n        mile_allowance: {\n            miles_included: '',\n            miles_extra: '',\n            miles_extra_selected: false,\n        },\n\n        duration: {\n            months: 0,\n            weeks: 0,\n            days: 1,\n            hours: 0,\n            minutes: 0,\n            units: 1,\n        },\n\n        location: {\n            city: '',\n            state: '',\n            zip_code: '',\n            neighborhood: '',\n            airport_code: '',\n            price: 0,\n            type: '',\n            selecting: false,\n            count: JSON.parse(localStorage.getItem('count')),\n        },\n\n        locations: [],\n\n        delivery: {},\n    },\n\n    meta: null,\n    bookingPayments: [],\n\n    completeBooking: {\n        b_id: '',\n    },\n\n    filteredMake: [],\n\n    unavailableDates: [],\n    calendarAttributes: [\n        {\n            key: 'today',\n            highlight: {\n                color: 'orange',\n                fillMode: 'light',\n            },\n            dates: new Date(),\n            popover: {\n                label: 'Today',\n            },\n        },\n    ],\n\n    turoBookings: [],\n\n    rememberedCustomer: {},\n    res2: null,\n    automationEvents: [],\n    fleetResources: [],\n    statusFilterItems: [] as string[],\n    startsAtFilterItems: null,\n    statusFilterTemp: [],\n    paymentStatusFilterItems: [],\n    sourcesFilter: [] as string[],\n    activityFilter: '',\n};\n\nconst getters: BookingGetters = {\n    init: (state: BookingState) => state.init,\n    notFound: (state: BookingState) => state.notFound,\n    statusFilterItems: (state: BookingState) => state.statusFilterItems,\n    startsAtFilterItems: (state: BookingState) => state.startsAtFilterItems,\n    statusFilterTemp: (state: BookingState) => state.statusFilterTemp,\n    paymentStatusFilterItems: (state: BookingState) => state.paymentStatusFilterItems,\n    activityFilter: (state: BookingState) => state.activityFilter,\n    sourcesFilter: (state: BookingState) => state.sourcesFilter,\n    booking: (state: BookingState) => state.booking,\n    priorityBookings: (state: BookingState) => state.priorityBookings,\n    bookings: (state: BookingState) => state.bookings,\n    meta: (state: BookingState) => state.meta,\n    fleetResources: (state: BookingState) => state.fleetResources,\n    abandonedBookings: (state: BookingState) => state.abandoned_bookings,\n    totalBookings: (state: BookingState) => state.totalBookings,\n    customerBooking: (state: BookingState) => state.customerBooking,\n    bookingLoading: (state: BookingState) => state.loading,\n    calendarAttributes: (state: BookingState) => state.calendarAttributes,\n    unavailableDates: (state: BookingState) => state.unavailableDates,\n    bookingCustomer: (state: BookingState) => state.booking.customer,\n    bookingVehicle: (state: BookingState) => state.booking.vehicle,\n    completeBooking: (state: BookingState) => state.completeBooking,\n    filteredMake: (state: BookingState) => state.filteredMake,\n    turoBookings: (state: BookingState) => state.turoBookings,\n    rememberedCustomer: (state: BookingState) => state.rememberedCustomer,\n    res2: (state: BookingState) => state.res2,\n    bookingForm: (state: BookingState) => state.bookingForm,\n    bookingPayments: (state: BookingState) => state.bookingPayments,\n    automationEvents: (state: BookingState) => state.automationEvents,\n    bookingDialogs: (state: BookingState) => state.dialogs,\n};\n\nconst mutations = {\n    [types.SET_BOOKING_LOADING](state: BookingState, loading: { subject: string, loading: boolean }) {\n        state.loading[loading.subject] = loading.loading;\n    },\n\n    [types.SET_BOOKING_DIALOG](state: BookingState, dialog: { subject: string, value: boolean }) {\n        state.dialogs[dialog.subject] = dialog.value;\n    },\n    [types.CLEAR_BOOKING_FORM_ERRORS](state: BookingState, form_field) {\n        if (form_field === null || form_field === undefined) {\n            state.bookingForm.errors.clear();\n        } else {\n            state.bookingForm.errors.clear(form_field);\n        }\n    },\n    [types.SET_BOOKING_FORM_ERROR](state: BookingState, error) {\n        state.bookingForm.errors.set(error.field, error.message);\n    },\n    [types.SET_LISTING_ID](state: BookingState, l_id: string) {\n        state.booking.l_id = l_id;\n    },\n    [types.SET_STATUS_FILTER_ITEMS](state: BookingState, statuses) {\n        state.startsAtFilterItems = null;\n        state.statusFilterItems = statuses;\n    },\n    [types.SET_STATUS_FILTER_ITEMS_UPCOMING](state: BookingState) {\n        state.statusFilterItems = ['reserved'];\n        state.startsAtFilterItems = dayjs().format('YYYY-MM-DD HH:mm:ss');\n    },\n    [types.SET_STATUS_FILTER_TEMP_ITEMS](state: BookingState, filter) {\n        state.statusFilterTemp = filter;\n    },\n    [types.SET_ACTIVITY_FILTER_ITEMS](state: BookingState, activity) {\n        state.activityFilter = activity;\n    },\n    [types.SET_SOURCE_FILTER_ITEMS](state: BookingState, sources) {\n        state.sourcesFilter = sources;\n    },\n    [types.SET_PAYMENT_STATUS_FILTER_ITEMS](state: BookingState, statuses) {\n        state.paymentStatusFilterItems = statuses;\n    },\n    [types.SET_BOOKING_CART_ID](state: BookingState, cartId: string) {\n        state.booking.cartId = cartId;\n    },\n    [types.SET_CURRENT_WORKING_BOOKING](state: BookingState, booking: BookingInterface) {\n        state.booking = booking;\n        state.init = true;\n    },\n    [types.SET_CURRENT_WORKING_BOOKING_STATUS](state: BookingState, status: string) {\n        set(state.booking, 'status', status);\n    },\n    [types.SET_CURRENT_WORKING_BOOKING_ATTRIBUTE](state: BookingState, data) {\n        set(state.booking, data.attribute, get(data.booking, data.attribute));\n    },\n    [types.SET_BOOKING_NOT_FOUND](state: BookingState, value) {\n        state.notFound = value;\n    },\n    [types.SET_BOOKINGS](state: BookingState, bookings: BookingInterface[]) {\n        state.bookings = bookings;\n        state.init = true;\n    },\n    [types.SET_BOOKINGS_META](state: BookingState, meta) {\n        state.meta = meta;\n    },\n    [types.SET_ABANDONED_BOOKINGS](state: BookingState, bookings: BookingInterface[]) {\n        state.abandoned_bookings = bookings;\n    },\n    [types.SET_PRIORITY_BOOKINGS](state: BookingState, bookings: BookingInterface[]) {\n        state.priorityBookings = bookings;\n    },\n    [types.SET_FLEET_RESOURCES](state: BookingState, bookings: BookingInterface[]) {\n        state.fleetResources = bookings;\n    },\n    [types.SET_BOOKING_AUTOMATION_EVENTS](state: BookingState, events) {\n        state.automationEvents = events;\n    },\n    [types.SET_TOTAL_BOOKINGS](state: BookingState, count) {\n        state.totalBookings = count;\n    },\n    [types.SET_BOOKING_PAYMENTS](state: BookingState, payments) {\n        state.bookingPayments = payments;\n    },\n    [types.MERGE_BOOKING_LINE_ITEM](state: BookingState, line) {\n        state.booking.order_items.push(line);\n    },\n    [types.UPDATE_BOOKING_LINE_ITEM](state: BookingState, line) {\n        const lineIndex = findIndex(state.booking.order_items, l => l.uuid === line.uuid);\n        if (lineIndex >= 0) {\n            state.booking.order_items.splice(lineIndex, 1);\n            state.booking.order_items.push(line);\n        }\n    },\n    [types.REMOVE_BOOKING_LINE_ITEM](state: BookingState, line) {\n        state.booking.order_items = remove(state.booking.order_items, l => l.uuid !== line);\n    },\n    [types.SET_FILTERED_MAKES](state: BookingState, make) {\n        state.filteredMake = make;\n    },\n    [types.SET_CALENDAR_ATTRIBUTES](state: BookingState, attributes: CalendarAttribute[]) {\n        state.calendarAttributes = attributes;\n    },\n    [types.PUSH_CALENDAR_ATTRIBUTES](state: BookingState, attribute: CalendarAttribute) {\n        state.calendarAttributes.push(attribute);\n    },\n    [types.RESET_UNAVAILABLE_DATES](state: BookingState) {\n        state.calendarAttributes = [\n            {\n                key: 'today',\n                highlight: {\n                    color: 'orange',\n                    fillMode: 'light',\n                },\n                dates: new Date(),\n                popover: {\n                    label: 'Today',\n                },\n            },\n        ];\n    },\n    [types.SET_UNAVAILABLE_DATES](state: BookingState, dates: {\n        trip_start: string,\n        trip_end: string,\n        trip_start_buffer: string,\n        trip_end_buffer: string\n    }[]) {\n        state.unavailableDates = dates;\n\n        state.calendarAttributes = [{\n            key: 'today',\n            highlight: {\n                color: 'orange',\n                fillMode: 'light',\n            },\n            dates: new Date(),\n            popover: {\n                label: 'Today',\n            },\n        },];\n\n        const createCalendarAttribute = (barColor: string, date: string | Dayjs, label: string): CalendarAttribute => ({\n            key: 'unavailable-' + date,\n            highlight: null,\n            bar: barColor,\n            dates: [dayjs(date).format()],\n            popover: {label},\n        });\n\n        dates.forEach(date => {\n            const days = dayjs.duration(dayjs(date.trip_end).diff(dayjs(date.trip_start))).asDays();\n            const startTimeBuffer = dayjs(date.trip_start_buffer).format('h:mm a');\n            const endTimeBuffer = dayjs(date.trip_end_buffer).format('h:mm a');\n\n            if (days === 1) {\n                state.calendarAttributes.push(\n                    createCalendarAttribute('green', date.trip_start, `Becomes unavailable at ${startTimeBuffer}`),\n                    createCalendarAttribute('red', date.trip_start, `Unavailable after ${startTimeBuffer}`),\n                    createCalendarAttribute('red', date.trip_end, `Unavailable until ${startTimeBuffer}`),\n                    createCalendarAttribute('green', date.trip_end, `Becomes available after ${endTimeBuffer}`),\n                );\n            } else {\n                const middleDur = [];\n                for (let i = 1; i < days; i++) {\n                    middleDur.push(createCalendarAttribute('red', dayjs(date.trip_start).add(i, 'days'), 'Unavailable'));\n                }\n\n                state.calendarAttributes.push(\n                    createCalendarAttribute('green', date.trip_start, `Becomes unavailable at ${startTimeBuffer}`),\n                    createCalendarAttribute('red', date.trip_start, `Unavailable after ${startTimeBuffer}`),\n                    ...middleDur,\n                    createCalendarAttribute('red', date.trip_end, `Unavailable until after ${endTimeBuffer}`),\n                    createCalendarAttribute('green', date.trip_end, `Becomes available after ${endTimeBuffer}`),\n                );\n            }\n        });\n    },\n\n    [types.SET_BOOKING_LISTING](state: BookingState, data) {\n        state.listing = data;\n        state.listing.init = true;\n        const newPricing = data.pricing;\n        state.booking.pricing = {...state.booking.pricing, ...newPricing};\n\n        state.booking.pricing.security_deposit = get(data, 'pricing.sec_dep');\n    },\n\n    [types.SET_STORED_TURO_BOOKINGS](state: BookingState, bookings) {\n        state.turoBookings = bookings;\n    },\n    [types.SET_CUSTOMER_BOOKING](state: BookingState, booking) {\n        state.customerBooking = booking;\n    },\n    [types.SET_REMEMBER_CUSTOMER](state: BookingState, customer) {\n        const data = {\n            email: get(customer, 'email'),\n            stripe_id: get(customer, 'stripe_id'),\n            last4: null,\n        };\n\n        if (get(customer, 'last4')) {\n            data.last4 = get(customer, 'last4');\n        }\n        state.rememberedCustomer = customer;\n        localStorage.setItem('customer', JSON.stringify(data));\n    },\n    [types.RESET_BOOKING](state: BookingState) {\n        state.booking = {\n            fuel_level_end: 0,\n            fuel_level_start: 0,\n            listing: undefined,\n            odometer_end: 0,\n            odometer_start: 0,\n            b_id: '',\n            booking_meta: undefined,\n            complete: 0,\n            created_at: '',\n            days: 0,\n            delivery_price: 0,\n            discount: 0,\n            extras_price: 0,\n            manually_deleted_at: '',\n            method: '',\n            miles_extra: 0,\n            miles_included: 0,\n            payment_status: '',\n            price_per_day: 0,\n            r_id: '',\n            renter: undefined,\n            required_options_price: 0,\n            source: '',\n            status: '',\n            taxes: 0,\n            timezone: '',\n            total: 0,\n            trip_end: '',\n            trip_end_tz: '',\n            trip_start: '',\n            trip_start_tz: '',\n            turo_trip: null,\n            updated_at: '',\n            init: false,\n            l_id: null,\n            cartId: null,\n            host: null,\n            order_items: [],\n            customer: {\n                firstName: '',\n                lastName: '',\n                phone: '',\n                email: '',\n                dob: '',\n                age: '',\n                signaturePng: '',\n                signFullName: '',\n                signInitials: '',\n                agreeAdoptSignature: false,\n                agreeToS: false,\n            },\n            settings: {\n                zip_code: '',\n                age_requirement: 0,\n                mile_allowance: {\n                    miles_included: 0,\n                    miles_extra: 0,\n                    miles_extra_selected: false,\n                },\n\n                young_driver: 0,\n                description: '',\n            },\n\n            vehicle: {\n                available: false,\n                price: 0,\n                title: '',\n                color: '',\n                year: '',\n                image: '',\n                images: [],\n                duration: '',\n                miles_included: '',\n                lat: '',\n                long: '',\n            },\n\n            pricing: {\n                original_price: 0,\n                price: 0,\n                price_type: '',\n                price_period: '',\n\n                discounts: {\n                    success: false,\n                    loading: false,\n                    discounted: false,\n                    code: '',\n                    discount: '',\n                    discountValue: 0,\n                    newPrice: 0,\n                    type: '',\n                    reason: '',\n                },\n\n                delivery: 0,\n                extras: 0,\n                requiredOption: 0,\n                total_per_day: 0,\n                subTotal: 0,\n                grandTotal: 0,\n                paymentDisplay: '',\n                security_deposit: 1,\n            },\n\n            trip_required_options: [],\n\n            trip_displays: {\n                tripMilesUnlimited: false,\n                tripMilesIncluded: '',\n                tripMilesOverageDisplay: '',\n                tripMilesHelpModalDisplay: '',\n\n                young_driver: {\n                    helpModalDisplaySet: false,\n                    helpModalDisplayH1: '',\n                    helpModalDisplayP1: '',\n                },\n            },\n\n            mile_allowance: {\n                miles_included: '',\n                miles_extra: '',\n                miles_extra_selected: false,\n            },\n\n            duration: {\n                months: 0,\n                weeks: 0,\n                days: 1,\n                hours: 0,\n                minutes: 0,\n                units: 1,\n            },\n\n            location: {\n                city: '',\n                state: '',\n                zip_code: '',\n                neighborhood: '',\n                airport_code: '',\n                price: 0,\n                type: '',\n                selecting: false,\n                count: JSON.parse(localStorage.getItem('count')),\n            },\n\n            locations: [],\n\n            delivery: {}\n        };\n    },\n};\n\nconst actions = {\n\n    async fetchSingleBooking({commit}, b_id: string) {\n        commit(types.SET_BOOKING_NOT_FOUND, false);\n\n        try {\n            const responseData = await performApiRequest(commit, 'SET_BOOKING_LOADING', 'booking', () => axios.get(`/v1/bookings/${b_id}`));\n\n\n            const renter = responseData?.booking?.renter || [];\n            const order = responseData?.booking?.order || [];\n\n            commit('SET_CURRENT_WORKING_BOOKING', responseData.booking);\n            commit('renters/SET_RENTER', renter, {root: true});\n            commit('order/SET_ORDER', order, {root: true});\n            EventBus.$emit('fetch-single-booking-success', responseData.booking);\n        } catch (error) {\n            if (error.response.status === 404) {\n                commit(types.SET_BOOKING_NOT_FOUND, true);\n            }\n        }\n    },\n\n    getBookingActivityLogs({commit}, b_id: string) {\n        commit('SET_BOOKING_LOADING', {subject: 'booking_logs', loading: true});\n\n        axios.get(`/v1/bookings/${b_id}/activity-logs`)\n            .then(response => {\n                EventBus.$emit('get-booking--activity-logs-success', get(response, 'data.activity'));\n            }).catch(() => {\n        }).finally(() => {\n            commit('SET_BOOKING_LOADING', {subject: 'booking_logs', loading: false});\n        });\n    },\n\n    async fetchPriorityBookings({commit}) {\n        const responseData = await performApiRequest(commit, 'SET_BOOKING_LOADING', 'priority_bookings', () => axios.get('/v1/bookings/priority'));\n        commit(types.SET_PRIORITY_BOOKINGS, responseData.bookings);\n    },\n\n    /**\n     * Fetch fleet resources\n     */\n    fetchFleetResources({commit}, options) {\n        commit('SET_BOOKING_LOADING', {subject: 'fleet_resources', loading: true});\n\n        let qString = '?';\n        if (get(options, 'startDate')) {\n            qString += `startDate=${get(options, 'startDate')}`;\n        }\n        if (get(options, 'endDate')) {\n            qString += `&endDate=${get(options, 'endDate')}`;\n        }\n\n        axios.get(`/v1/fleet-resources${qString}`)\n            .then(response => {\n                commit('SET_FLEET_RESOURCES', get(response, 'data.bookings'));\n            }).catch(() => {\n        }).finally(() => {\n            commit('SET_BOOKING_LOADING', {subject: 'fleet_resources', loading: false});\n        });\n    },\n\n    fetchCustodianFleetResources({commit}, options) {\n        commit('SET_BOOKING_LOADING', {subject: 'fleet_resources', loading: true});\n\n        let qString = '?';\n        if (get(options, 'startDate')) {\n            qString += `startDate=${get(options, 'startDate')}`;\n        }\n        if (get(options, 'endDate')) {\n            qString += `&endDate=${get(options, 'endDate')}`;\n        }\n\n        axios.get(`/v1/custodians/${options.company_uuid}/fleet-resources${qString}`)\n            .then(response => {\n                commit('SET_FLEET_RESOURCES', get(response, 'data.bookings'));\n            }).catch(() => {\n        }).finally(() => {\n            commit('SET_BOOKING_LOADING', {subject: 'fleet_resources', loading: false});\n        });\n    },\n\n    /**\n     * Fetch bookings\n     */\n    async fetchBookings({commit}, options: BookingQueryOptions = {}) {\n        try {\n            const data = prepareBookingData(options);\n\n            const query = createOrderUrlQueryString(data, true);\n\n            const responseData = await performApiRequest(commit, 'SET_BOOKING_LOADING', 'bookings', () => axios.get(`/v1/bookings${query}`));\n\n            if (options?.onlyAbandoned) {\n                commit(types.SET_ABANDONED_BOOKINGS, responseData.data);\n            } else {\n                commit(types.SET_BOOKINGS, responseData.data);\n                commit(types.SET_BOOKINGS_META, responseData.meta);\n                commit(types.SET_TOTAL_BOOKINGS, responseData.meta.total);\n            }\n        } catch (error) {\n            commit('SET_BOOKING_FORM_ERROR', error.response?.data?.message || 'There was an error');\n            console.error(error)\n        }\n    },\n\n    async fetchCompanyBooking({commit}, b_id: string) {\n        try {\n            const responseData = await performApiRequest(commit, 'SET_BOOKING_LOADING', 'booking', () => axios.get(`/v1/company/${StorageService.getCompanyUuid()}/booking/${b_id}`));\n\n            commit(types.SET_CUSTOMER_BOOKING, responseData?.booking || []);\n            EventBus.$emit('booking-fetch-axle-success', responseData?.axle);\n            const envelopes = responseData?.booking?.envelope || [];\n            let lastEnvelope = {};\n            if (envelopes.length > 0) {\n                lastEnvelope = envelopes[envelopes.length - 1];\n            }\n            commit('envelope/SET_ENVELOPE', lastEnvelope, {root: true});\n            EventBus.$emit('booking-fetch-success');\n        } catch (error) {\n            if (error.response.status === 404) {\n                commit(types.SET_BOOKING_NOT_FOUND, true);\n            }\n        }\n    },\n\n    /**\n     * Create a booking meta\n     */\n    async createBookingMeta({commit}, data: { booking: BookingInterface, key: string, value: any }) {\n        return await performApiRequest(commit, 'SET_BOOKING_LOADING', 'meta', () => axios.post(`/v1/bookings/${data.booking.b_id}/meta`, {\n            key: data.key,\n            value: data.value,\n        }));\n    },\n\n    fetchStoredTuroBookings({commit}) {\n        axios.get('/v1/turo-bookings')\n            .then(response => {\n                commit('SET_STORED_TURO_BOOKINGS', get(response, 'data.bookings', []));\n            }).catch(() => {\n        }).finally(() => {\n            commit('SET_BOOKING_LOADING', {subject: 'check_vehicles_availability', loading: false});\n        });\n    },\n\n    updateListingId({commit}, l_id) {\n        commit(types.SET_LISTING_ID, l_id);\n    },\n\n    async checkOneListingsBookings({commit}, l_id: string) {\n        const responseData = await performApiRequest(commit, 'SET_BOOKING_LOADING', 'check_vehicles_availability', () => axios.get(`/v1/company/${StorageService.getCompanyUuid()}/listings/${l_id}/availability`));\n        commit('SET_UNAVAILABLE_DATES', responseData.unavailable);\n    },\n\n    /**\n     * Update a bookings\n     *\n     * @param commit\n     * @param state\n     * @param {String} id\n     */\n    retrieve: {\n        root: true,\n        handler({commit, state}, id) {\n            axios.post(`/v1/company/${StorageService.getCompanyUuid()}/stripe/retrieve`, {\n                id,\n            }).then(response => {\n                const checkoutSession = get(response, 'data.checkoutSession');\n                state.res2 = get(response, 'data.$res2');\n\n                /**\n                 * @typedef {Object} checkoutSession.customer\n                 * @typedef {Object} checkoutSession.setup_intent\n                 */\n                commit('SET_REMEMBER_CUSTOMER', {\n                    email: checkoutSession.customer.email,\n                    stripe_id: checkoutSession.customer.id,\n                    last4: checkoutSession.setup_intent.payment_method.card.last4,\n                });\n            }).catch(() => {\n            });\n        },\n    },\n\n    /**\n     * Update a bookings\n     */\n    async updateBooking({commit, state}, data) {\n        try {\n            commit('CLEAR_BOOKING_FORM_ERRORS');\n            const responseData = await performApiRequest(commit, 'SET_BOOKING_LOADING', 'updateBooking', () => axios.put(`/v1/bookings/${data.b_id}`, data));\n\n            commit('SET_CURRENT_WORKING_BOOKING', responseData.booking);\n            commit('renters/SET_RENTER', responseData?.booking?.renter || [], {root: true});\n            push.success({\n                message: 'Booking updated successfully',\n            });\n        } catch (error) {\n            push.error({\n                message: error?.response?.data?.message || 'There was an error',\n            });\n            state.bookingForm.errors.set(error?.response?.data?.errors || []);\n        }\n    },\n\n    /**\n     * Update a booking custom field\n     *\n     * @param commit\n     * @param {Object} data\n     */\n    updateBookingCustomFields({commit}, data) {\n        commit('SET_BOOKING_LOADING', {subject: 'updateBookingCustomerFields', loading: true});\n\n        axios.put(`/v1/bookings/${data.b_id}/custom-fields`, {properties: data.properties})\n            .then(() => {\n                EventBus.$emit('update-custom-field-success');\n            })\n            .catch(error => {\n                push.error({\n                    message: error?.response?.data?.message || 'There was an error',\n                });\n            }).finally(() => {\n            commit('SET_BOOKING_LOADING', {subject: 'updateBookingCustomerFields', loading: false});\n        });\n    },\n\n    /**\n     * Extend a bookings\n     */\n    async extendBooking({commit}, data) {\n        const responseData = await performApiRequest(commit, 'SET_BOOKING_LOADING', 'extendBooking', () => axios.post(`/v1/bookings/${data.b_id}/extend`, data));\n        commit(types.SET_CURRENT_WORKING_BOOKING, responseData.booking);\n        return responseData;\n    },\n\n    /**\n     * Delete a booking extension\n     */\n    async deleteExtension({commit}, extension_uuid: string) {\n        const responseData = await performApiRequest(commit, 'SET_BOOKING_LOADING', 'deleteExtension', () => axios.delete(`/v1/extensions/${extension_uuid}`));\n\n        commit('SET_CURRENT_WORKING_BOOKING_ATTRIBUTE', {\n            booking: responseData.booking,\n            attribute: 'extensions'\n        });\n        EventBus.$emit('extension-deleted-success', responseData.booking);\n    },\n\n    attachCommissionPartner({commit}, data) {\n        commit('SET_BOOKING_LOADING', {subject: 'attachCommissionPartner', loading: true});\n        commit('CLEAR_BOOKING_FORM_ERRORS');\n\n        axios.put(`/v1/bookings/${data.b_id}/attach-commission-partner/${data.partner_uuid}`, data).then(response => {\n            commit('SET_CURRENT_WORKING_BOOKING', get(response, 'data.booking'));\n            EventBus.$emit('attache-partner-commission-success');\n        }).catch(error => {\n            push.error({\n                message: error?.response?.data?.message || 'There was an error',\n            });\n        }).finally(() => {\n            commit('SET_BOOKING_LOADING', {subject: 'attachCommissionPartner', loading: false});\n        });\n    },\n\n    removeCommissionPartnerFromBooking({commit}, data) {\n        commit('SET_BOOKING_LOADING', {subject: 'attachCommissionPartner', loading: true});\n        commit('CLEAR_BOOKING_FORM_ERRORS');\n\n        axios.delete(`/v1/bookings/${data.b_id}/commission/${data.partner_uuid}`, data)\n            .then(response => {\n                commit('SET_CURRENT_WORKING_BOOKING', get(response, 'data.booking'));\n                EventBus.$emit('attache-partner-commission-success');\n            }).catch(error => {\n            push.error({\n                message: error?.response?.data?.message || 'There was an error',\n            });\n        }).finally(() => {\n            commit('SET_BOOKING_LOADING', {subject: 'attachCommissionPartner', loading: false});\n        });\n    },\n\n    cancelBooking({commit, state}, data: CancelBookingPayload) {\n        commit('SET_BOOKING_LOADING', {subject: 'cancelBooking', loading: true});\n        commit('CLEAR_BOOKING_FORM_ERRORS');\n\n        axios.post(`/v1/bookings/${data.b_id}/cancel`, data)\n            .then(response => {\n                if (get(response, 'data.success')) {\n                    push.success({\n                        message: 'Booking canceled successfully',\n                    });\n                    if (get(response, 'data.booking')) {\n                        commit('SET_CURRENT_WORKING_BOOKING', get(response, 'data.booking'));\n                    }\n                } else {\n                    state.bookingForm.errors.set(['There was an error']);\n                }\n            }).catch(error => {\n            push.error({\n                message: error?.response?.data?.message || 'There was an error',\n            });\n        }).finally(() => {\n            commit('SET_BOOKING_LOADING', {subject: 'cancelBooking', loading: false});\n        });\n    },\n\n\n    requestCancelBooking({commit}, data) {\n        commit('SET_BOOKING_LOADING', {subject: 'cancelBooking', loading: true});\n\n        axios.post('/v1/request-cancellation', data)\n            .then(response => {\n                EventBus.$emit('booking-guest-canceled-success', get(response, 'data.booking'));\n            }).catch(error => {\n            push.error({\n                message: error?.response?.data?.message || 'There was an error',\n            });\n        }).finally(() => {\n            commit('SET_BOOKING_LOADING', {subject: 'cancelBooking', loading: false});\n        });\n    },\n\n    addOrderItem({commit}, line) {\n        commit('SET_BOOKING_LOADING', {subject: 'addOrderItem', loading: true});\n        commit('CLEAR_BOOKING_FORM_ERRORS');\n\n        axios.post(`/v1/company/${StorageService.getCompanyUuid()}/bookings/${line.b_id}/lines/`, {line}).then(response => {\n            if (get(response, 'data.success')) {\n                commit('MERGE_BOOKING_LINE_ITEM', get(response, 'data.line'), {});\n                EventBus.$emit('add-order-item-success');\n            }\n        }).catch(error => {\n            push.error({\n                message: error?.response?.data?.message || 'There was an error',\n            });\n        }).finally(() => {\n            commit('SET_BOOKING_LOADING', {subject: 'addOrderItem', loading: false});\n        });\n    },\n    editOrderItem({commit}, line: OrderLine) {\n        commit('SET_BOOKING_LOADING', {subject: 'editOrderItems', loading: true});\n\n        axios.put(`/v1/company/${StorageService.getCompanyUuid()}/lines/${line.uuid}`, line).then(response => {\n            if (get(response, 'data.success')) {\n                commit('UPDATE_BOOKING_LINE_ITEM', get(response, 'data.line'), {});\n            }\n        }).catch(error => {\n            push.error({\n                message: error?.response?.data?.message || 'There was an error',\n            });\n        }).finally(() => {\n            commit('SET_BOOKING_LOADING', {subject: 'editOrderItems', loading: false});\n        });\n    },\n    deleteOrderLineItem({commit}, line: string) {\n        commit('SET_BOOKING_LOADING', {subject: 'bookingPayments', loading: true});\n        commit('CLEAR_BOOKING_FORM_ERRORS');\n\n        axios.delete(`/v1/company/${StorageService.getCompanyUuid()}/lines/${line}`).then(response => {\n            if (get(response, 'data.success')) {\n                EventBus.$emit('delete-order-item-success');\n                commit('REMOVE_BOOKING_LINE_ITEM', line);\n            }\n        }).catch(error => {\n            push.error({\n                message: error?.response?.data?.message || 'There was an error',\n            });\n        }).finally(() => {\n            commit('SET_BOOKING_LOADING', {subject: 'bookingPayments', loading: false});\n        });\n    },\n\n    fetchBookingPayments({commit}, b_id: string) {\n        commit('SET_BOOKING_LOADING', {subject: 'bookingPayments', loading: true});\n        commit('CLEAR_BOOKING_FORM_ERRORS');\n\n        axios.get('/v1/payments', {params: {b_id}})\n            .then(response => {\n                commit('SET_BOOKING_PAYMENTS', get(response, 'data.payments'), []);\n            }).catch(error => {\n            push.error({\n                message: error?.response?.data?.message || 'There was an error',\n            });\n        }).finally(() => {\n            commit('SET_BOOKING_LOADING', {subject: 'bookingPayments', loading: false});\n        });\n    },\n\n    changeBookingStatus({commit}, data) {\n        commit('SET_BOOKING_LOADING', {subject: 'bookingStatus', loading: true});\n        commit('CLEAR_BOOKING_FORM_ERRORS');\n\n        axios.put(`/v1/bookings/${data.b_id}/status`, data)\n            .then(response => {\n                commit('SET_CURRENT_WORKING_BOOKING_STATUS', get(response, 'data.booking.status'));\n                EventBus.$emit('change-booking-status-success', get(response, 'data.booking'));\n                push.success({\n                    message: 'Booking status updated successfully',\n                });\n            }).catch(error => {\n            push.error({\n                message: error?.response?.data?.message || 'There was an error',\n            });\n        }).finally(() => {\n            commit('SET_BOOKING_LOADING', {subject: 'bookingStatus', loading: false});\n        });\n    },\n\n    /**\n     * Update a bookings' mile allowance\n     *\n     * @param commit\n     * @param state\n     * @param {Object} data\n     */\n    updateBookingMileAllowance({commit, state}, data) {\n        commit('SET_BOOKING_LOADING', {subject: 'updateBooking', loading: true});\n        commit('CLEAR_BOOKING_FORM_ERRORS');\n\n        axios.put(`/v1/bookings/${data.b_id}/mile-allowance`, data).then(response => {\n            commit('SET_CURRENT_WORKING_BOOKING', get(response, 'data.booking'), []);\n            EventBus.$emit('update-booking-mile-allowance-success', get(response, 'data.booking'));\n            push.success({\n                message: 'Booking distance allowance updated successfully',\n            });\n        }).catch(error => {\n            push.error({\n                message: error?.response?.data?.message || 'There was an error',\n            });\n            state.bookingForm.errors.set(error?.response?.data?.errors || []);\n        }).finally(() => {\n            commit('SET_BOOKING_LOADING', {subject: 'updateBooking', loading: false});\n        });\n    },\n\n    /**\n     * Delete a trip photo from a reservation\n     *\n     * @param commit\n     * @param {String} uuid\n     */\n    deleteTripPhoto({commit}, uuid: string) {\n        commit('SET_BOOKING_LOADING', {subject: 'updateBooking', loading: true});\n\n        axios.delete(`/v1/trip-photo/${uuid}`)\n            .then(() => {\n                EventBus.$emit('delete-trip-photo-success');\n            }).catch(() => {\n        }).finally(() => {\n            commit('SET_BOOKING_LOADING', {subject: 'updateBooking', loading: false});\n        });\n    },\n\n    deleteTripPhotos({commit}, uuids: string[]) {\n        commit('SET_BOOKING_LOADING', {subject: 'deleteTripPhotos', loading: true});\n\n        axios.post('/v1/trip-photos-delete', uuids)\n            .then(() => {\n                EventBus.$emit('delete-trip-photos-success');\n            }).catch(() => {\n        }).finally(() => {\n            commit('SET_BOOKING_LOADING', {subject: 'deleteTripPhotos', loading: false});\n        });\n    },\n\n    /**\n     * Update a trip photo from a reservation\n     *\n     * @param commit\n     * @param {Object} file - The File\n     * @param {string} file.uuid - The UUID of the file\n     */\n    updateTripPhoto({commit}, file) {\n        commit('SET_BOOKING_LOADING', {subject: 'updateTripPhoto', loading: true});\n\n        axios.put(`/v1/trip-photo/${file.uuid}`, file)\n            .then(response => {\n                EventBus.$emit('update-trip-photo-success', get(response, 'data.photo'));\n            }).catch(() => {\n        }).finally(() => {\n            commit('SET_BOOKING_LOADING', {subject: 'updateTripPhoto', loading: false});\n        });\n    },\n\n    async startBookingVehicleSwap({commit}, data: BookingVehicleSwapData) {\n        commit('CLEAR_BOOKING_FORM_ERRORS');\n\n        try {\n            const responseData = await performApiRequest(commit, 'SET_BOOKING_LOADING', 'startBookingVehicleSwap', () => axios.post(`/v1/bookings/${data.b_id}/vehicle-swap`, data));\n            EventBus.$emit('vehicle-swap-success-step-1');\n            commit('SET_CURRENT_WORKING_BOOKING', responseData.booking);\n        } catch (error) {\n            commit('SET_BOOKING_FORM_ERROR', error.response?.data?.message || 'There was an error');\n            console.error(error)\n        }\n    },\n\n    startBookingVehicleSwapStep2({commit, state}, data) {\n        commit('SET_BOOKING_LOADING', {subject: 'startBookingVehicleSwapStep2', loading: true});\n        commit('CLEAR_BOOKING_FORM_ERRORS');\n\n        axios.post(`/v1/bookings/${data.booking.b_id}/vehicle-swap-step-2`, data).then(response => {\n            EventBus.$emit('vehicle-swap-success-step-2');\n            commit(types.SET_CURRENT_WORKING_BOOKING, response?.data?.booking);\n        }).catch(e => {\n            state.bookingForm.errors.set(get(e, 'response.data.errors', []));\n        }).finally(() => {\n            commit('SET_BOOKING_LOADING', {subject: 'startBookingVehicleSwapStep2', loading: false});\n        });\n    },\n\n    resendConfirmationEmail({commit}, b_id: string) {\n        commit('SET_BOOKING_LOADING', {subject: 'updateTripPhoto', loading: true});\n\n        axios.post(`/v1/bookings/${b_id}/resend-confirmation-email`)\n            .then(() => {\n                push.success({\n                    message: 'Booking confirmation email resent.',\n                });\n            }).catch(e => {\n            let message = get(e, 'response.data.message', 'There was an error');\n\n            if (get(e, 'response.headers.retry-after')) {\n                message = `${message}. Retry in ${get(e, 'response.headers.retry-after')} seconds`;\n            }\n\n            push.error({\n                message: message,\n            });\n        }).finally(() => {\n            commit('SET_BOOKING_LOADING', {subject: 'updateTripPhoto', loading: false});\n        });\n    },\n\n    /**\n     * Toggle a Turo connections active state.\n     *\n     * @param commit\n     * @param {String} b_id\n     */\n    fetchBookingAutomationEvents({commit}, b_id: string) {\n        commit('SET_BOOKING_LOADING', {subject: 'getAutomationEvents', loading: true});\n\n        axios.get(`/v1/bookings/${b_id}/automation-events`)\n            .then(response => {\n                commit('SET_BOOKING_AUTOMATION_EVENTS', get(response, 'data.events', []));\n            }).catch(() => {\n        }).finally(() => {\n            commit('SET_BOOKING_LOADING', {subject: 'getAutomationEvents', loading: false});\n        });\n    },\n\n    /**\n     * Mark a booking as manually removed\n     *\n     * @param commit\n     * @param {String} b_id\n     */\n    removeProviderBookingFromFleetwire({commit}, b_id: string) {\n        commit('SET_BOOKING_LOADING', {subject: 'manuallyRemoveBooking', loading: true});\n\n        axios.delete(`/v1/bookings/${b_id}/manual-delete`)\n            .then(() => {\n                EventBus.$emit('mark-booking-as-removed-manually-success');\n            }).catch(() => {\n        }).finally(() => {\n            commit('SET_BOOKING_LOADING', {subject: 'manuallyRemoveBooking', loading: false});\n        });\n    },\n};\n\nexport default {\n    namespaced: true,\n    state,\n    getters,\n    actions,\n    mutations,\n};\n","import axios from 'axios';\nimport {EventBus} from '@/plugins/eventBus';\nimport * as types from '../mutation-types';\nimport {Connection, StoreLoaders} from '@/types';\nimport {performApiRequest} from '@/store/helpers/vuex-helpers';\n\n\nexport interface BouncieState {\n    init: boolean;\n    loading: StoreLoaders;\n    credentials: {\n        email: string;\n        password: string;\n    };\n    connections: Connection[];\n    vehicles: any[];\n\n}\n\nconst state: BouncieState = {\n    init: false,\n\n    loading: {\n        login: false,\n        toggle: false,\n        delete: false,\n        vehicleState: false,\n        deleteConnection: false,\n    },\n\n    credentials: {\n        email: '',\n        password: '',\n    },\n\n    connections: [],\n    vehicles: [],\n};\n\nconst getters = {\n    init: (state: BouncieState) => state.init,\n    loading: (state: BouncieState) => state.loading,\n    credentials: (state: BouncieState) => state.credentials,\n    connections: (state: BouncieState) => state.connections,\n    vehicles: (state: BouncieState) => state.vehicles,\n};\n\nconst mutations = {\n    [types.SET_BOUNCIE_INIT](state: BouncieState, init: boolean) {\n        state.init = init;\n    },\n    [types.SET_BOUNCIE_LOADING](state: BouncieState, loading: { subject: string, loading: boolean }) {\n        state.loading[loading.subject] = loading.loading;\n    },\n    [types.SET_BOUNCIE_CONNECTIONS](state: BouncieState, connections: Connection[]) {\n        state.connections = connections;\n    },\n};\n\nconst actions = {\n\n\n    /**\n     * Fetch Bouncie vehicles\n     */\n    async fetchVehicles({commit}, bouncie: Connection) {\n        try {\n            const responseData = await performApiRequest(commit, 'SET_BOUNCIE_LOADING', 'vehicles', () => axios.get(`/v1/connections/bouncie/${bouncie.uuid}/vehicles`));\n\n            EventBus.$emit('fetch-bouncie-vehicles-success', responseData);\n            commit('SET_BOUNCIE_CONNECTIONS', [responseData.bouncie]);\n        } catch (error) {\n            console.error(error);\n        }\n    },\n\n\n    /**\n     * Get Bouncie vehicles\n     */\n    async getVehicles({commit}, bouncie: Connection) {\n        try {\n            await performApiRequest(commit, 'SET_BOUNCIE_LOADING', 'vehicles', () => axios.get(`/v1/connections/bouncie/${bouncie.uuid}/vehicles`));\n        } catch (error) {\n            console.error(error);\n        }\n    },\n\n\n    /**\n     * Fetch Bouncie vehicle state\n     */\n    async getVehicleState({commit}, vehicle) {\n        try {\n            const responseData = await performApiRequest(commit, 'SET_BOUNCIE_LOADING', 'vehicleState', () => axios.get(`/v1/connections/bouncie/${vehicle.bouncie_uuid}/vehicles/${vehicle.uuid}`));\n\n            EventBus.$emit('bouncie-vehicle-ping-success', responseData.state);\n        } catch (error) {\n            console.error(error);\n        }\n    },\n\n    async getVehicleTrips({commit}, data) {\n        try {\n            const responseData = await performApiRequest(commit, 'SET_BOUNCIE_LOADING', 'vehicleState', () => axios.get(`/v1/connections/bouncie/${data.vehicle.bouncie_uuid}/trips/${data.vehicle.uuid}`));\n            EventBus.$emit('bouncie-trips-success', responseData.trips);\n        } catch (error) {\n            console.error(error);\n        }\n    },\n\n\n    /**\n     * Toggle Bouncie vehicle active\n     */\n    async toggleActive({commit}, bouncie: Connection) {\n        try {\n            const connIndex = state.connections.findIndex((c) => bouncie.uuid === c.uuid);\n\n            state.connections[connIndex].loading = true;\n\n            const responseData = await performApiRequest(commit, 'SET_BOUNCIE_LOADING', 'vehicleState', () => axios.put(`/v1/connections/bouncie/${bouncie.uuid}/toggle`));\n            state.connections[connIndex].connected = true;\n            EventBus.$emit('toggle-bouncie-success');\n            commit('SET_BOUNCIE_CONNECTIONS', responseData?.company?.connections?.bouncie || []);\n\n            state.connections[connIndex].loading = false;\n        } catch (error) {\n            console.error(error);\n        }\n    },\n\n\n    /**\n     * Delete Bouncie connection\n     */\n    async deleteConnection({commit}, bouncie: Connection) {\n        const responseData = await performApiRequest(commit, 'SET_BOUNCIE_LOADING', 'deleteConnection', () => axios.delete(`/v1/connections/bouncie/${bouncie.uuid}`));\n        EventBus.$emit('SystemMessage', {\n            type: 'success',\n            message: 'Bouncie connection removed successfully',\n        });\n        commit(types.SET_BOUNCIE_CONNECTIONS, responseData?.company?.connections?.bouncie || []);\n    },\n\n};\n\n\nexport default {\n    namespaced: true,\n    state,\n    mutations,\n    actions,\n    getters,\n};\n","import { EventBus } from '@/plugins/eventBus';\nimport axios from 'axios';\nimport * as types from '@/store/mutation-types';\n\n\nexport interface BraintreeState {\n    loading: Record<string, boolean>\n}\n\n// state\nconst state: BraintreeState = {\n    loading: {\n        analytics: false,\n        fetchCart: false,\n    },\n};\n\nconst getters = {\n    loading: (state: BraintreeState) => state.loading,\n};\n\nconst mutations = {\n    [types.SET_BRAINTREE_LOADING](state: BraintreeState, loading: { subject: string, loading: boolean }) {\n        state.loading[loading.subject] = loading.loading;\n    },\n};\n\nconst actions = {\n\n    getBraintreeOauthUrl({ commit }) {\n        commit('SET_BRAINTREE_LOADING', {subject: 'analytics', loading: true});\n\n        axios.get('/v1/braintree/url')\n            .then((response) => {\n                EventBus.$emit('braintree-oauth-url-create-success', response.data);\n            }).catch((e) => {\n            EventBus.$emit('braintree-oauth-url-create-error', e.response);\n        }).finally(() => {\n            commit('SET_BRAINTREE_LOADING', {subject: 'analytics', loading: false});\n        });\n    },\n\n    saveBraintreeCode({ commit }, data) {\n        commit('SET_BRAINTREE_LOADING', {subject: 'analytics', loading: true});\n\n        axios.post('/v1/braintree/redirect', data)\n        .then((response) => {\n            EventBus.$emit('braintree-oauth-url-create-success', response.data);\n        }).catch((e) => {\n            EventBus.$emit('braintree-oauth-url-create-error', e.response);\n        }).finally(() => {\n            commit('SET_BRAINTREE_LOADING', {subject: 'analytics', loading: false});\n        });\n    },\n\n    getBraintreeProvider() {\n        axios.get('/v1/braintree/')\n        .then((response) => {\n            EventBus.$emit('braintree-oauth-success', response.data);\n        }).catch(() => {\n        }).finally(() => {\n        });\n    },\n    testPayment() {\n        axios.post('/v1/braintree/testPayment')\n        .then((response) => {\n            EventBus.$emit('delete-braintree-oauth-success', response.data);\n        }).catch(() => {\n        }).finally(() => {\n        });\n    },\n};\n\nexport default {\n    namespaced: true,\n    state,\n    mutations,\n    actions,\n    getters,\n};\n","import router from \"@/router\";\nimport {RouteLocationNormalizedLoaded} from 'vue-router';\n\nconst PARTNER_UUID: string = 'cp_uuid';\n\nconst CommissionPartnerService = {\n\n  /**\n   * Saves a partner uuid\n   */\n  savePartnerUuid(uuid: string): void {\n    localStorage.setItem(PARTNER_UUID, uuid);\n  },\n\n  /**\n   * Gets a partner uuid\n   */\n  getPartnerUuid(): string | null {\n    return localStorage.getItem(PARTNER_UUID);\n  },\n\n  /**\n   * Removed a partner uuid (cp) from the URL query.\n   */\n  removePartnerUuidParam(route: RouteLocationNormalizedLoaded): void {\n      const query = {...route.query};\n    delete query.cp;\n    router.replace({ query });\n  },\n\n  /**\n   * Removes a partner uuid from localstorage\n   */\n  removePartnerUuid(): void {\n    localStorage.removeItem(PARTNER_UUID);\n  },\n};\n\nexport { CommissionPartnerService };\n","import axios from 'axios';\nimport * as types from '@/store/mutation-types';\nimport {CommissionPartnerService} from '@/services/commission-partner.service';\nimport {CartService} from '@/services/cart.service';\nimport {performApiRequest} from \"@/store/helpers/vuex-helpers\";\nimport {Cart} from \"@/types\";\nimport dayjs from \"dayjs\";\n\n\nexport interface CartState {\n    loading: Record<string, boolean>;\n    cart: Cart;\n}\n\n// state\nconst state: CartState = {\n    loading: {\n        cart: false,\n        fetchCart: false,\n    },\n    cart: {\n        loaded: false,\n        uuid: CartService.getCartUuid(),\n        l_id: null,\n        trip_start: null,\n        trip_end: null,\n        b_id: null,\n        checkout_url: null,\n        commission_partner_id: null,\n        company_uuid: '',\n        complete: 0,\n        coupon_discount: null,\n        coupon_id: null,\n        created_at: '',\n        deposit: null,\n        grand_total: null,\n        price: null,\n        tax: null,\n        total_due: null,\n        updated_at: '',\n        website_url: null,\n    },\n};\n\nconst getters = {\n    loading: (state: CartState) => state.loading,\n    cart: (state: CartState) => state.cart,\n};\n\nconst mutations = {\n    [types.SET_CART_LOADING](state: CartState, loading: { subject: string, loading: boolean }) {\n        state.loading[loading.subject] = loading.loading;\n    },\n    [types.SET_CART_L_ID](state: CartState, l_id: string) {\n        state.cart.l_id = l_id;\n    },\n    [types.SET_CART](state: CartState, cart: Cart) {\n        console.dir('SET_CART', cart);\n        CartService.saveCartUuid(cart.uuid);\n        state.cart = cart;\n        state.cart.loaded = true;\n    },\n};\n\nconst actions = {\n\n    /**\n     * Create a cart\n     */\n    async createCart({commit}, payload: any = {}) {\n        const params = new URLSearchParams();\n        if (import.meta.env.MODE !== 'production' && !payload?.company) {\n            // params.append('company_slug', 'frunkyea-tesla-rentals');\n        }\n        const partnerUuid = CommissionPartnerService.getPartnerUuid();\n        if (partnerUuid) {\n            payload.cp = partnerUuid;\n        }\n\n        // if params is missing company_slug, add it\n        if (!params.has('company_slug')) {\n            console.dir('HERE %%66663333');\n\n            // get hostname subdomain\n            const hostname = window.location.hostname;\n\n            // if hostname has fleetwire.io in it then use the subdomain\n            if (hostname.includes('fleetwire.io')) {\n                const subdomain = window.location.hostname.split('.')[0];\n                console.dir(subdomain);\n                params.append('company_slug', subdomain);\n            } else {\n                // if hostname is not fleetwire.io then use the full hostname\n                params.append('company_custom_domain', window.location.hostname);\n            }\n        }\n\n        try {\n            const responseData = await performApiRequest(commit, 'SET_CART_LOADING', 'createCart', () => axios.post(`/v1/carts${params.toString() ? `?${params}` : ''}`, payload));\n            commit('SET_CART', responseData.cart);\n\n            return responseData;\n        } catch (e) {\n        }\n    },\n\n\n    /**\n     * Fetch a cart\n     */\n    async fetchCart({commit}, cartId: string) {\n        try {\n            const responseData = await performApiRequest(commit, 'SET_CART_LOADING', 'fetchCart', () => axios.get(`/v1/carts/${cartId}`));\n            commit(types.SET_CART, responseData.cart);\n            return responseData.cart;\n        } catch (e) {\n            if (e?.response?.status === 404) {\n                CartService.removeCartUuid();\n                window.location.reload();\n            }\n        }\n    },\n\n    /**\n     * Update a cart\n     */\n    async updateCart({state, commit}) {\n        const cartId = state.cart?.uuid;\n\n        if (typeof cartId === 'string') {\n            try {\n                const responseData = await performApiRequest(commit, 'SET_CART_LOADING', 'updateCart', () => axios.put(`/v1/carts/${cartId}`, state.cart));\n                commit('SET_CART', responseData.cart);\n            } catch (e) {\n                if (e.response.status === 404) {\n                    CartService.removeCartUuid();\n                    window.location.reload();\n                }\n            }\n        }\n    },\n\n\n    /**\n     * Set a carts period\n     */\n    async setPeriod({state, commit}, dates: { start: string, end: string }) {\n        const cartId = state.cart?.uuid;\n\n        console.dir('setPeriod');\n        console.dir(cartId);\n        console.dir(dates);\n\n        if (typeof cartId === 'string') {\n            const start = dayjs(dates.start).format('YYYY-MM-DD HH:mm:00');\n            const end = dayjs(dates.end).format('YYYY-MM-DD HH:mm:00');\n\n            try {\n                const responseData = await performApiRequest(commit, 'SET_CART_LOADING', 'setPeriod', () => axios.post(`/v1/carts/${cartId}/set-period`, {\n                    start,\n                    end\n                }));\n                commit(types.SET_CART, responseData.cart);\n\n                return responseData.cart;\n            } catch (e) {\n                if (e.response.status === 404) {\n                    CartService.removeCartUuid();\n                    window.location.reload();\n                }\n                throw e;\n            }\n        }\n    },\n\n    /**\n     * Report a cart change\n     */\n    async report({commit}, data = {}) {\n        try {\n            await performApiRequest(commit, 'SET_CART_LOADING', 'report', () => axios.post('/v1/report', data));\n        } catch (e) {\n        }\n    },\n};\n\nexport default {\n    namespaced: true,\n    state,\n    mutations,\n    actions,\n    getters,\n};\n","import {get, isNull, map, set} from 'lodash';\nimport axios from 'axios';\nimport * as types from '@/store/mutation-types';\nimport {EventBus} from '@/plugins/eventBus';\nimport {Form} from '@/plugins/FWForms/index';\nimport {CartService} from '@/services/cart.service';\nimport {performApiRequest} from '@/store/helpers/vuex-helpers';\nimport getDefaultMeta from '@/utils/meta';\n\nexport interface CheckoutState {\n    loading: Record<string, boolean>;\n    cart: any;\n    stripe: any;\n    checkoutForm: Form<any>;\n    _orderRequest: any;\n    initialized: boolean;\n    availability: any;\n    coupon: any;\n    checkoutRenterAuthenticatedData: object;\n}\n\nexport interface ListingsAvailabilityPayload {\n    dates: {\n        start: string,\n        end: string,\n    },\n    l_id?: string,\n    ignoreUnavailable?: boolean,\n}\n\n// state\nconst state: CheckoutState = {\n    loading: {\n        checkout: false,\n        checkAvailability: false,\n        paymentIntent: false,\n        checkDrivingDistance: false,\n    },\n    cart: {\n        uuid: CartService.getCartUuid(),\n        l_id: null,\n        trip_start: null,\n        trip_end: null,\n    },\n\n    stripe: null,\n\n    checkoutForm: new Form(),\n    checkoutRenterAuthenticatedData: null,\n    _orderRequest: {\n        l_id: '',\n        dates: {\n            start: null,\n            end: null,\n        },\n        costs: {\n            vehicle: 0,\n            extras: 0,\n            requiredExtras: 0,\n            delivery: 0,\n            taxes: 0,\n            discount: 0,\n            subtotal: 0,\n            grandTotal: 0,\n            dueToday: 0,\n            securityDepositCredit: 0,\n            securityDepositDebit: 0,\n        },\n        discounts: {\n            discounted: false,\n            amount: 0,\n            value: 0,\n            code: null,\n            reason: null,\n            type: null,\n            durationDiscountReason: null,\n            durationDiscountAmount: null,\n            durationDiscountValue: null,\n        },\n        duration: {\n            minutes: 0,\n            hours: 0,\n            days: 0,\n            weeks: 0,\n            months: 0,\n            years: 0,\n            units: 1,\n        },\n        customers: [\n            {\n                isPrimary: true,\n                firstName: '',\n                lastName: '',\n                phone: '',\n                email: '',\n                dob: '',\n                age: '',\n                signaturePng: '',\n                signFullName: '',\n                signInitials: '',\n                agreeAdoptSignature: false,\n                agreeToS: false,\n            },\n        ],\n        extras: [],\n        extrasV2: [],\n        requiredExtras: [],\n        requiredExtrasV2: [],\n        delivery: {},\n        delivery_address: null,\n        customFields: [],\n        cartId: CartService.getCartUuid(),\n    },\n\n\n    initialized: false,\n    availability: {\n        available: true,\n        booking: '',\n        endDate: '',\n        endTime: '',\n        message: '',\n        nextAvailableEndTime: '',\n        nextAvailableStartTime: '',\n        part: '',\n        startDate: '',\n        startTime: '',\n    },\n    coupon: {\n        code: '',\n        amount: 0,\n        reason: '',\n        type: '',\n        value: 0,\n    },\n};\n\nconst getters = {\n    loading: (state: CheckoutState) => state.loading,\n    coupon: (state: CheckoutState) => state.coupon,\n    availability: (state: CheckoutState) => state.availability,\n    checkoutForm: (state: CheckoutState) => state.checkoutForm,\n    checkoutRenterAuthenticatedData: (state: CheckoutState) => state.checkoutRenterAuthenticatedData,\n    checkoutInitialized: (state: CheckoutState) => state.initialized,\n    _orderRequest: (state: CheckoutState) => state._orderRequest,\n};\n\nconst mutations = {\n    [types.SET_CHECKOUT_LOADING](state: CheckoutState, loading: { subject: string, loading: boolean }) {\n        state.loading[loading.subject] = loading.loading;\n    },\n    [types.CLEAR_CHECKOUT_FORM_ERRORS](state: CheckoutState, form_field: string | null | undefined) {\n        if (form_field === null || form_field === undefined) {\n            state.checkoutForm.errors.clear();\n        } else {\n            state.checkoutForm.errors.clear(form_field);\n        }\n    },\n    [types.SET_CHECKOUT_DISCOUNT](state: CheckoutState, coupon) {\n        state.coupon = coupon;\n\n        // state.order.discounts = {\n        //   discounted: true,\n        //   code:   get(coupon, 'code'),\n        //   amount: get(coupon, 'amount'),\n        //   reason: get(coupon, 'reason'),\n        //   type:   get(coupon, 'type'),\n        //   durationDiscountReason: null,\n        //   durationDiscountAmount: null,\n        //   durationDiscountValue: null,\n        // };\n        state._orderRequest.discounts = {\n            discounted: true,\n            code: get(coupon, 'code'),\n            amount: get(coupon, 'amount'),\n            reason: get(coupon, 'reason'),\n            type: get(coupon, 'type'),\n            durationDiscountReason: null,\n            durationDiscountAmount: null,\n            durationDiscountValue: null,\n        };\n    },\n    [types.RESET_CHECKOUT_DISCOUNT](state: CheckoutState) {\n        state.checkoutForm.errors.clear('coupon');\n        state._orderRequest.discounts = {\n            discounted: false,\n            code: '',\n            amount: 0,\n            reason: '',\n            type: '',\n            value: 0,\n            durationDiscountReason: null,\n            durationDiscountAmount: null,\n            durationDiscountValue: null,\n        };\n    },\n    [types.SET_ORDER_DELIVERY](state: CheckoutState, location) {\n        state._orderRequest.delivery = location;\n    },\n    [types.SET_CHECKOUT_INITIALIZED](state: CheckoutState, initialized: boolean) {\n        console.dir('SET_CHECKOUT_INITIALIZED');\n        state.initialized = initialized;\n    },\n    [types.SET_CHECKOUT_STRIPE](state: CheckoutState, stripe) {\n        state.stripe = stripe;\n    },\n    [types.SET_CHECKOUT_AVAILABILITY](state: CheckoutState, availability) {\n        state.availability = availability;\n    },\n    [types.SET_RESERVATION_REQUEST_LISTING_ID](state: CheckoutState, l_id) {\n        console.dir('SET_RESERVATION_REQUEST_LISTING_ID');\n        state._orderRequest.l_id = l_id;\n    },\n    [types.SET_RESERVATION_REQUEST_DATES](state: CheckoutState, dates) {\n        console.log('%c SET_RESERVATION_REQUEST_DATES', 'color: blue;background: yellow; padding: 2px');\n\n        console.dir(dates);\n        set(state._orderRequest, 'dates', dates);\n    },\n    [types.SET_RESERVATION_REQUEST_DURATIONS](state: CheckoutState, duration) {\n        state._orderRequest.duration = duration;\n    },\n    [types.SET_RESERVATION_REQUEST_EXTRAS](state: CheckoutState, extras) {\n        state._orderRequest.extras = extras;\n    },\n    [types.SET_RESERVATION_REQUEST_EXTRAS_V2](state: CheckoutState, extras) {\n        console.dir('SET_RESERVATION_REQUEST_EXTRAS_V2');\n        state._orderRequest.extrasV2 = extras;\n    },\n    [types.SET_RESERVATION_REQUEST_REQUIRED_EXTRAS_V2](state: CheckoutState, extras) {\n        state._orderRequest.requiredExtrasV2 = extras;\n    },\n    [types.SET_RESERVATION_REQUEST_REQUIRED_EXTRAS_V2_AT_INDEX](state: CheckoutState, data) {\n        set(state._orderRequest.requiredExtrasV2, data.index, data.extra);\n    },\n    /**\n     * Set the pricing data for the reservation request\n     */\n    [types.SET_RESERVATION_REQUEST_PRICING](state: CheckoutState, data) {\n        const dataKeys = Object.keys(data);\n        const costKeys = Object.keys(state._orderRequest.costs);\n\n        dataKeys.forEach((key) => {\n            if (costKeys.includes(key)) {\n                state._orderRequest.costs[key] = data[key];\n            }\n        });\n    },\n    [types.SET_CHECKOUT_ORDER_DATES](state: CheckoutState, dates) {\n        state._orderRequest.dates = dates;\n    },\n    [types.SET_CHECKOUT_ORDER_CUSTOMER](state: CheckoutState, customers) {\n        set(state._orderRequest, 'customers', customers);\n\n    },\n    [types.SET_CHECKOUT_ORDER_CUSTOMER_BY_INDEX](state: CheckoutState, data) {\n        set(state._orderRequest.customers, data.index, data.customer);\n    },\n    [types.SET_CHECKOUT_ORDER_CUSTOMER_AGREE_TOS](state: CheckoutState, data) {\n        state._orderRequest.customers[data.index].agreeToS = data.agreeToS;\n    },\n    [types.SET_CHECKOUT_ORDER_CUSTOM_FIELDS](state: CheckoutState, fields) {\n        state._orderRequest.customFields = fields;\n    },\n    [types.SET_CHECKOUT_ORDER_DELIVERY_ADDRESS](state: CheckoutState, address) {\n        state._orderRequest.delivery_address = address;\n    },\n    [types.SET_CHECKOUT_RENTER_AUTHENTICATED](state: CheckoutState, data) {\n        console.dir('SET_CHECKOUT_RENTER_AUTHENTICATED');\n        console.dir(data);\n        state.checkoutRenterAuthenticatedData = data;\n    },\n    [types.SET_CHECKOUT_ORDER_REQUIRED_EXTRAS](state: CheckoutState, data) {\n        if (data.requiredExtras) {\n            state._orderRequest.requiredExtras = map(data.requiredExtras, e => e.extras[0]);\n        }\n\n        if (data.requiredExtrasV2) {\n            state._orderRequest.requiredExtrasV2 = map(data.requiredExtrasV2, e => {\n                const parentUuid = e.uuid;\n                return {\n                    parentUuid,\n                    choice: e.options[0],\n                };\n            });\n        }\n    },\n};\n\nconst actions = {\n\n    checkout({state, commit, rootGetters}) {\n        commit('SET_CHECKOUT_LOADING', {subject: 'checkout', loading: true});\n        const paymentStrategy = getDefaultMeta('settings.payment.strategy');\n        const paymentProvider = get(rootGetters['company/company'], 'payment_profile.provider');\n        const usesStripe = paymentProvider === 'stripe';\n        const usesSquare = paymentProvider === 'square';\n        const hasBalance = get(state._orderRequest, 'costs.grandTotal', 0) <= 0;\n\n        state.checkoutForm.startProcessing();\n\n        axios.post('/v1/checkout', state._orderRequest)\n            .then((response) => {\n                if (usesSquare) {\n                    window.location.href = get(response, 'data.redirect');\n                }\n\n                if ((!usesSquare && !usesStripe) || isNull(paymentStrategy) || hasBalance) {\n                    EventBus.$emit('checkout-successful', response.data);\n                } else if (get(response, 'data.redirect')) {\n                    window.location.href = get(response, 'data.redirect');\n                } else {\n                    const sessionId = get(response, 'data.StripeSession.id');\n                    const customer = get(response, 'data.customer');\n                    const stripePaymentMethod = 'payment_intent';\n                    commit('booking/SET_REMEMBER_CUSTOMER', {\n                        email: get(customer, 'email'),\n                        stripe_id: get(customer, 'stripe_id'),\n                    }, {root: true});\n\n\n                    if (stripePaymentMethod === 'payment_intent') {\n                        EventBus.$emit('set-booking-id', get(response, 'data.b_id'));\n                        EventBus.$emit('set-listing-id', get(response, 'data.l_id'));\n                        EventBus.$emit('open-checkout-payment-dialog', get(response, 'data.StripePaymentIntent'));\n                    } else {\n                        state.stripe.redirectToCheckout({\n                            sessionId,\n                        }).then(() => {\n                            // If `redirectToCheckout` fails due to a browser or network\n                            // error, display the localized error message to your customer\n                            // using `result.error.message`.\n                        });\n                    }\n                }\n                state.checkoutForm.finishProcessing(true);\n            })\n            .catch((e) => {\n                console.dir(e);\n                state.checkoutForm.errors.set(get(e.response, 'data.errors', []));\n\n                if (get(e.response, 'data.errors')) {\n                    EventBus.$emit('checkout-message', {\n                        type: 'error',\n                        message: 'There was an error',\n                    });\n                } else {\n                    EventBus.$emit('checkout-message', {\n                        type: 'error',\n                        message: 'There was an error - not available',\n                    });\n                }\n                state.checkoutForm.finishProcessing(false);\n            }).finally(() => {\n            commit('SET_CHECKOUT_LOADING', {subject: 'checkout', loading: false});\n        });\n    },\n\n    /**\n     * Start an otp authentication\n     */\n    async renterAuthenticationStart({commit}, data: { email: string }) {\n        try {\n            const responseData = await performApiRequest(commit, 'SET_CHECKOUT_LOADING', 'checkAvailability', () => axios.post('/v1/checkout/renter-authentication/start', data));\n            EventBus.$emit('renter-authenticated-start-success', responseData);\n\n            EventBus.$emit('open-renter-otp-auth', {\n                focusId: 'renter-email-input',\n                email: responseData.email,\n                phone_number: responseData.phone_number,\n            });\n        } catch (error) {\n        }\n    },\n\n    /**\n     * Complete an otp authentication\n     */\n    async renterAuthenticationComplete({commit}, data) {\n        try {\n            const responseData = await performApiRequest(commit, 'SET_CHECKOUT_LOADING', 'checkAvailability', () => axios.post('/v1/checkout/renter-authentication/complete', data));\n            commit(types.SET_CHECKOUT_RENTER_AUTHENTICATED, responseData.renter);\n            // EventBus.$emit('renter-authenticated-complete-success', responseData);\n        } catch (error) {\n            EventBus.$emit('renter-authenticated-complete-failed');\n        }\n    },\n\n\n    /**\n     * Verify Stripe Payment with Intent\n     */\n    verifyPayment({commit, rootGetters}, paymentIntentId) {\n        commit('SET_CHECKOUT_LOADING', {subject: 'checkAvailability', loading: true});\n        axios.get(`/v1/company/${rootGetters['company/company'].uuid}/verify-payment-intent/${paymentIntentId}`)\n            .then(() => {\n                EventBus.$emit('payment-intent-verified');\n            }).catch(() => {\n        }).finally(() => {\n            commit('SET_CHECKOUT_LOADING', {subject: 'checkAvailability', loading: false});\n        });\n    },\n\n\n    /**\n     * Check the available listings for a company\n     */\n    async checkListingsAvailability({commit, rootGetters}, data: ListingsAvailabilityPayload) {\n        const params = new URLSearchParams({\n            start: data.dates.start,\n            end: data.dates.end,\n        });\n\n        if (data.l_id) params.append('l_id', data.l_id);\n        if (data.ignoreUnavailable) params.append('ignoreUnavailable', 'true');\n\n\n        try {\n            console.log(params.toString());\n            const companyUuid = rootGetters['company/company']?.uuid;\n\n            const url = `/v1/company/${companyUuid}/listings/availability?${params.toString()}`;\n\n            const responseData = await performApiRequest(\n                commit,\n                'SET_CHECKOUT_LOADING',\n                'checkAvailability',\n                () => axios.get(url)\n            );\n\n            commit('listing/SET_ALL_LISTINGS', responseData?.listings ?? [], {root: true});\n        } catch (error) {\n            console.error('Error fetching listings availability:', error);\n        }\n    },\n\n    checkOneListingsAvailability({commit, state, rootGetters}, {l_id, dates}) {\n        commit('SET_CHECKOUT_LOADING', {subject: 'checkAvailability', loading: true});\n\n        axios.get(`/v1/company/${rootGetters['company/company'].uuid}/listings/${l_id}/availability?start=${dates.start}&end=${dates.end}`)\n            .then((response) => {\n                commit('listing/SET_ALL_LISTINGS', get(response.data, 'listings', []), {root: true});\n            }).catch(() => {\n        }).finally(() => {\n            commit('SET_CHECKOUT_LOADING', {subject: 'checkAvailability', loading: false});\n        });\n    },\n};\n\nexport default {\n    namespaced: true,\n    state,\n    mutations,\n    actions,\n    getters,\n};\n","import {EventBus} from '@/plugins/eventBus';\nimport axios from 'axios';\nimport * as types from '@/store/mutation-types';\nimport {Form} from '@/plugins/FWForms';\nimport {RootState} from '@/types/RootState';\nimport {Module} from 'vuex';\nimport {performApiRequest} from '@/store/helpers/vuex-helpers';\nimport {push} from 'notivue';\n\nexport interface CommissionPartnersState {\n    loading: Record<string, boolean>;\n    couponForm: Form<object>;\n    commissionPartners: CommissionPartner[];\n    commissionPartner?: CommissionPartner;\n    commissions: any[];\n}\n\nexport interface CommissionPartner {\n    active: boolean;\n    checkoutLink?: string;\n    commission_amount: number;\n    commission_type: string;\n    company?: any;\n    created_at?: string;\n    email: string;\n    name: string;\n    notes?: string;\n    phone: string;\n    updated_at?: string;\n    uuid?: string;\n    mode?: 'create' | 'edit';\n}\n\n// state\nconst state: CommissionPartnersState = {\n    loading: {\n        get: false,\n        create: false,\n        update: false,\n        delete: false,\n        toggle: false,\n        commissions: false,\n    },\n    couponForm: new Form(),\n    commissionPartners: [],\n    commissionPartner: null,\n    commissions: [],\n};\n\nconst mutations = {\n    [types.SET_COMMISSION_PARTNER_LOADING](state: CommissionPartnersState, loading: {\n        subject: string,\n        loading: boolean\n    }) {\n        state.loading[loading.subject] = loading.loading;\n    },\n    [types.SET_COMMISSION_PARTNERS](state: CommissionPartnersState, partners: CommissionPartner[]) {\n        state.commissionPartners = partners;\n    },\n    [types.SET_COMMISSION_PARTNER](state: CommissionPartnersState, partner: CommissionPartner) {\n        state.commissionPartner = partner;\n    },\n    [types.SET_COMMISSIONS](state: CommissionPartnersState, commissions) {\n        state.commissions = commissions;\n    },\n\n    [types.CLEAR_COMMISSION_PARTNER_COUPON_FORM_ERRORS](state: CommissionPartnersState) {\n        state.couponForm.errors.clear();\n    },\n};\n\nconst actions = {\n\n    /**\n     * Get commission partners\n     */\n    getCommissionPartners({commit}) {\n        commit('SET_COMMISSION_PARTNER_LOADING', {subject: 'get', loading: true});\n\n        commit(types.CLEAR_COMMISSION_PARTNER_COUPON_FORM_ERRORS);\n\n        axios.get('/v1/commission-partners')\n            .then((response) => {\n                EventBus.$emit('get-commission-partners-success', response.data.partners);\n                commit(types.SET_COMMISSION_PARTNERS, response.data.partners);\n            }).catch(() => {\n        }).finally(() => {\n            commit('SET_COMMISSION_PARTNER_LOADING', {subject: 'get', loading: false});\n        });\n    },\n\n\n    /**\n     * Get a single commission partner\n     */\n    getCommissionPartner({commit}, partner_uuid: string) {\n        commit('SET_COMMISSION_PARTNER_LOADING', {subject: 'get', loading: true});\n        commit('CLEAR_COMMISSION_PARTNER_COUPON_FORM_ERRORS');\n\n        axios.get(`/v1/commission-partners/${partner_uuid}`)\n            .then((response) => {\n                EventBus.$emit('get-commission-partners-success', response.data.partner);\n                commit('SET_COMMISSION_PARTNER', response.data.partner);\n            }).catch(() => {\n        }).finally(() => {\n            commit('SET_COMMISSION_PARTNER_LOADING', {subject: 'get', loading: false});\n        });\n    },\n\n    /**\n     * Create commission partner\n     */\n    async createCommissionPartner({commit}, partner: CommissionPartner) {\n        try {\n            const responseData = await performApiRequest(commit, 'SET_COMMISSION_PARTNER_LOADING', 'create', () => axios.post('/v1/commission-partners', partner));\n            EventBus.$emit('create-commission-partner-success', responseData.partner);\n        } catch (e) {\n            push.error({\n                message: e?.response?.data?.message || 'There was an error',\n            });\n        }\n    },\n\n    /**\n     * Update commission partner\n     */\n    async updateCommissionPartner({commit}, partner: CommissionPartner) {\n        try {\n            await performApiRequest(commit, 'SET_COMMISSION_PARTNER_LOADING', 'update', () => axios.put(`/v1/commission-partners/${partner.uuid}`, partner));\n        } catch (e) {\n            push.error({\n                message: e?.response?.data?.message || 'There was an error',\n            });\n        }\n    },\n\n    /**\n     * Delete commission partner\n     */\n    async deleteCommissionPartner({commit}, partner: CommissionPartner) {\n        try {\n            await performApiRequest(commit, 'SET_COMMISSION_PARTNER_LOADING', 'delete', () => axios.delete(`/v1/commission-partners/${partner.uuid}`));\n        } catch (e) {\n            push.error({\n                message: e?.response?.data?.message || 'There was an error',\n            });\n        }\n    },\n\n    async toggleShowOnMainMenu({commit}, value: boolean) {\n        try {\n            await performApiRequest(commit, 'SET_COMMISSION_PARTNER_LOADING', 'toggle', () => axios.post('/v1/commission-partners/main-menu-toggle', {value}));\n        } catch (e) {\n            push.error({\n                message: e?.response?.data?.message || 'There was an error',\n            });\n        }\n    },\n\n    /**\n     * Get commissions\n     */\n    getCommissions({commit}) {\n        commit('SET_COMMISSION_PARTNER_LOADING', {subject: 'commissions', loading: true});\n\n        axios.get('/v1/commissions')\n            .then((response) => {\n                EventBus.$emit('get-commissions-success');\n                commit('SET_COMMISSIONS', response.data.commissions);\n            }).catch(() => {\n        }).finally(() => {\n            commit('SET_COMMISSION_PARTNER_LOADING', {subject: 'commissions', loading: false});\n        });\n    },\n\n};\n\nconst commissionPartnerModule: Module<CommissionPartnersState, RootState> = {\n    namespaced: true,\n    state,\n    mutations,\n    actions,\n    getters: {\n        loading: state => state.loading,\n        commissions: state => state.commissions,\n        commissionPartners: state => state.commissionPartners,\n        commissionPartner: state => state.commissionPartner,\n    },\n};\n\nexport default commissionPartnerModule;\n","import axios from 'axios';\nimport {get} from 'lodash';\nimport dayjs from 'dayjs';\nimport {Form} from '@/plugins/FWForms/index';\nimport {EventBus} from '@/plugins/eventBus';\nimport {StorageService} from '@/services/storage.service';\nimport * as types from '../mutation-types';\nimport {\n    BookingInterface,\n    CompanyInterface,\n    CompanyMeta,\n    CompanySettings,\n    CompanyState,\n    CurrencySettings,\n    DefaultMeta,\n    DeliveryLocation,\n    Employee,\n    NotificationPagination,\n    OperatingRule,\n    PermissionsArray,\n    SavingEmployeeNotificationSettings\n} from '@/types';\nimport {RootState} from '@/types/RootState';\nimport {Module} from 'vuex'\nimport {performApiRequest} from '@/store/helpers/vuex-helpers';\nimport {createUrlQueryString} from '@/utils/urls';\nimport {push} from 'notivue'\n\nconst defaultMetaValues: CompanyMeta = {\n    cancellation_policy: '',\n    rental_tos_id: '',\n};\n\nconst state: CompanyState = {\n    loaded: false,\n\n    loading: {\n        company: false,\n        company_meta: false,\n        bookings: false,\n        listing: true,\n        listings: false,\n        employee: false,\n        invite: false,\n        notifications: false,\n        deliveryLocation: false,\n        getOperatingRules: false,\n        createOperatingRule: false,\n        deleteOperatingRule: false,\n        saveStripeKey: false,\n        resetStripeKey: false,\n        markAccountForDeletion: false,\n        saveCurrency: false,\n        listingReset: false,\n        addDefaultMeta: false,\n        getDefaultMeta: false,\n    },\n\n    companyForm: new Form(),\n    companyMetaForm: new Form(),\n\n    originalCompany: {},\n    company: {\n        active: false,\n        address: {\n            address_1: '',\n            address_2: '',\n            city: '',\n            state: '',\n            postal_code: '',\n        },\n        bookings: [],\n        currency: null,\n        delivery_locations: [],\n        email: null,\n        email_proxy: '',\n        found: false,\n        init: false,\n        listings: [],\n        logo: '',\n        mark_to_delete_at: null,\n        meta: {...defaultMetaValues},\n        name: null,\n        phone: '',\n        phone_fmt: '',\n        slug: '',\n        timezone: '',\n        uuid: '',\n    },\n\n    employees: [],\n\n    employee: {\n        init: false,\n        found: false,\n        uuid: '',\n        first_name: '',\n        last_name: '',\n        full_name: '',\n        name: '',\n        email: '',\n        phone: '',\n        photo_url: '',\n        permissions: [],\n        roles: [],\n        notificationSettings: null,\n    },\n\n    defaultMeta: [],\n\n    possiblePermissions: [\n        'listings_manage',\n        'settings_manage',\n        'account_and_billing_manage',\n        'turnover_view',\n        'orders_cancel',\n        'orders_revert',\n    ],\n\n    registerFormRules: {\n        required: (value) => !!value || 'Required',\n        min: (v) => v.length >= 8 || 'Min of 8 characters',\n        email: [\n            (v) => !!v || 'E-mail is required',\n            (v) => /.+@.+\\..+/.test(v) || 'E-mail must be a valid e-mail',\n        ],\n        code: [\n            (v) => !!v || '2FA code is required',\n            (v) => v.length >= 4 || 'Should be 4 characters',\n        ],\n    },\n\n    notifications: [],\n    notificationsTotal: 0,\n    nextNotifications: 1,\n    notificationsLast: 1,\n    operating_rules: [],\n    feedback_reviews: [],\n    trialOver: false,\n    settings: {\n        'settings.store.enabled': true,\n        'settings.store.public': true,\n        'settings.store.test': false,\n    } as CompanySettings,\n    counts: null,\n};\n\nconst getters = {\n    loaded: (state: CompanyState) => state.loaded,\n    trialOver: (state: CompanyState) => state.trialOver,\n    companyLoading: (state: CompanyState) => state.loading,\n    possiblePermissions: (state: CompanyState) => state.possiblePermissions,\n    check: (state: CompanyState) => state.company.found,\n    company: (state: CompanyState) => state.company,\n    settings: (state: CompanyState) => state.settings,\n    originalCompany: (state: CompanyState) => state.originalCompany,\n    meta: (state: CompanyState) => state.company.meta,\n    paymentProfile: (state: CompanyState) => state.company.payment_profile,\n    listings: (state: CompanyState) => state.company.listings,\n    bookings: (state: CompanyState) => state.company.bookings,\n    employees: (state: CompanyState) => state.employees,\n    employee: (state: CompanyState) => state.employee,\n    registerFormRules: (state: CompanyState) => state.registerFormRules,\n    notifications: (state: CompanyState) => state.notifications,\n    notificationsTotal: (state: CompanyState) => state.notificationsTotal,\n    companySeatCount: (state: CompanyState) => get(state.company, 'employees', []).length,\n    companyForm: (state: CompanyState) => state.companyForm,\n    companyMetaForm: (state: CompanyState) => state.companyMetaForm,\n    operatingRules: (state: CompanyState) => state.operating_rules,\n    feedbackReviews: (state: CompanyState) => state.feedback_reviews,\n    defaultMeta: (state: CompanyState) => state.defaultMeta,\n    notificationsLast: (state: CompanyState) => state.notificationsLast,\n    nextNotifications: (state: CompanyState) => state.nextNotifications,\n    counts: (state: CompanyState) => state.counts,\n};\n\nconst mutations = {\n    [types.SET_COMPANY_LOADING](state: CompanyState, loading: { subject: string, loading: boolean }) {\n        state.loading[loading.subject] = loading.loading;\n    },\n    [types.SET_COMPANY](state: CompanyState, company: CompanyInterface) {\n        state.trialOver = company?.trial_ends_at ? dayjs(company.trial_ends_at) < dayjs() : true;\n\n        state.company = {\n            ...state.company, ...company, found: true, init: true,\n        };\n\n        if (get(company, 'defaultMeta')) {\n            state.defaultMeta = company.defaultMeta;\n        }\n\n        if (!company.meta) {\n            state.company.meta = {\n                cancellation_policy: '',\n                rental_tos_id: '',\n            };\n        }\n        state.loaded = true;\n\n        if (company?.operating_rules) {\n            state.operating_rules = company.operating_rules;\n        }\n\n        state.originalCompany = JSON.parse(JSON.stringify(company));\n\n        StorageService.saveCompanyUuid(get(state.company, 'uuid'));\n    },\n    [types.SET_COMPANY_PHONE](state: CompanyState, phone: string) {\n        state.company.phone = phone;\n    },\n    [types.SET_COMPANY_META](state: CompanyState, meta: CompanyMeta) {\n        console.dir('meta', meta);\n        state.company.meta = meta;\n    },\n    [types.SET_COMPANY_SETTINGS](state: CompanyState, settings: CompanySettings) {\n        // merge the settings\n        state.settings = {...state.settings, ...settings};\n    },\n    [types.SET_COUNTS](state: CompanyState, counts: Record<string, number>) {\n        state.counts = counts;\n    },\n    [types.SET_COMPANY_CURRENCY](state: CompanyState, currency: CurrencySettings) {\n        state.company.currency = currency;\n    },\n    [types.SET_COMPANY_DEFAULT_META](state: CompanyState, meta: DefaultMeta) {\n        state.defaultMeta = meta;\n    },\n    [types.SET_POSSIBLE_PERMISSIONS](state: CompanyState, permission: Array<string>) {\n        state.possiblePermissions = permission;\n    },\n    [types.SET_COMPANY_BOOKINGS](state: CompanyState, bookings: BookingInterface[]) {\n        state.company.bookings = bookings;\n    },\n    [types.SET_COMPANY_EMPLOYEES](state: CompanyState, employees: Employee[]) {\n        state.employees = employees;\n    },\n    [types.SET_DELIVERY_LOCATIONS](state: CompanyState, locations: DeliveryLocation[]) {\n        state.company.delivery_locations = locations;\n    },\n    [types.RESET_EMPLOYEE](state: CompanyState) {\n        state.employee = {\n            full_name: '',\n            init: false,\n            found: false,\n            uuid: '',\n            first_name: '',\n            last_name: '',\n            name: '',\n            email: '',\n            phone: '',\n            photo_url: '',\n            permissions: [],\n            roles: [],\n            notificationSettings: null\n        };\n    },\n    [types.SET_COMPANY_NOTIFICATIONS](state: CompanyState, notifications: NotificationPagination) {\n        const data = notifications?.data || [];\n        const uniqueIds = new Set([...state.notifications, ...data].map(w => w.id));\n        state.notifications = Array.from(uniqueIds).map(id =>\n            [...state.notifications, ...data].find(w => w.id === id)\n        );\n        state.nextNotifications = notifications?.current_page ? notifications.current_page + 1 : 1;\n        state.notificationsLast = notifications?.last_page || 1;\n        state.notificationsTotal = notifications?.total || 0;\n    },\n    [types.SET_EMPLOYEE_PERMISSIONS](state: CompanyState, permissions: PermissionsArray[]) {\n        state.employee.permissions = permissions;\n    },\n    [types.SET_EMPLOYEE_ROLES](state: CompanyState, roles: string[]) {\n        state.employee.roles = roles;\n    },\n    [types.SET_COMPANY_EMPLOYEE](state: CompanyState, employee: Employee) {\n        state.employee = {\n            ...state.employee, ...employee, found: true, init: true,\n        };\n    },\n    [types.SET_OPERATING_RULES](state: CompanyState, rules: OperatingRule[]) {\n        state.operating_rules = rules;\n    },\n    [types.SET_FEEDBACK_REVIEWS](state: CompanyState, reviews: any[]) {\n        state.feedback_reviews = reviews;\n    },\n    [types.SET_COMPANY_FORM_ERROR](state: CompanyState, error: string | Record<string, string[]>) {\n        state.companyForm.errors.set(error);\n    },\n    [types.SET_COMPANY_META_FORM_ERROR](state: CompanyState, error: string | Record<string, string[]>) {\n        state.companyMetaForm.errors.set(error);\n    },\n    [types.CLEAR_COMPANY_META_FORM_ERRORS](state: CompanyState, form_field: string | null = null) {\n        if (form_field === null || form_field === undefined) {\n            state.companyMetaForm.errors.clear();\n        } else {\n            state.companyMetaForm.errors.clear(form_field);\n        }\n    },\n};\n\nconst actions = {\n\n    async fetchCompany({commit}, companyName: string) {\n        try {\n            const responseData = await performApiRequest(commit, 'SET_COMPANY_LOADING', 'company', () => axios.get(`/v1/company/${companyName}`));\n            commit(types.SET_COMPANY, responseData?.company);\n            if (Array.isArray(responseData?.company?.listings)) {\n                commit('listing/SET_ALL_LISTINGS', responseData.company.listings, {root: true});\n            }\n\n            state.company.init = true;\n        } catch (error) {\n            push.error({\n                message: error?.response?.data?.message || 'There was an error',\n            });\n        }\n    },\n\n    /**\n     * Save company Info\n     */\n    async saveCompanyInfo({state, commit}) {\n        try {\n            const responseData = await performApiRequest(commit, 'SET_COMPANY_LOADING', 'company', () => axios.put('/v1/company', state.company));\n            commit(types.SET_COMPANY, responseData.company);\n\n            push.success({\n                message: 'Company saved successfully',\n            });\n        } catch (error) {\n            push.error({\n                message: 'There was an error saving company info.',\n            });\n\n            console.dir('error');\n            console.dir(error);\n            commit(types.SET_COMPANY_META_FORM_ERROR, error.response.data.errors);\n        }\n    },\n\n    async saveCompanyTimezone({commit}, data: { timezone: string, updateListings: boolean }) {\n        try {\n            await performApiRequest(commit, 'SET_COMPANY_LOADING', 'company', () => axios.put('/v1/company/timezone', data));\n            push.success({\n                message: 'Timezone saved successfully',\n            });\n        } catch (error) {\n            push.error({\n                message: error?.response?.data?.message || 'There was an error',\n            });\n        }\n    },\n\n    async saveCompanyMeta({state, commit}) {\n        try {\n            commit(types.CLEAR_COMPANY_META_FORM_ERRORS);\n            const responseData = await performApiRequest(commit, 'SET_COMPANY_LOADING', 'company_meta', () => axios.put('/v1/meta', state.company.meta));\n            commit(types.SET_COMPANY_META, responseData.meta);\n            EventBus.$emit('SystemMessage', {\n                type: 'success',\n                message: 'Company information saved successfully',\n            });\n        } catch (error) {\n            commit(types.SET_COMPANY_META_FORM_ERROR, error.response.data.errors);\n            throw error;\n        }\n    },\n\n    async updateCancellationPolicy({commit, dispatch}, cancellation: string) {\n        try {\n            await performApiRequest(commit, 'SET_COMPANY_LOADING', 'company', () => axios.put('/v1/company/cancellation-policy', {cancellation}));\n            dispatch('fetchCompany', state.company.slug);\n            EventBus.$emit('SystemMessage', {\n                type: 'success',\n                message: 'Cancellation policy saved successfully',\n            });\n        } catch (error) {\n            commit('SET_COMPANY_META_FORM_ERROR', error.response.data.errors);\n        }\n    },\n\n    async updateTermsOfService({commit, dispatch}, terms: string) {\n        try {\n            await performApiRequest(commit, 'SET_COMPANY_LOADING', 'company', () => axios.put('/v1/company/terms-of-service', {terms}));\n            dispatch('fetchCompany', state.company.slug);\n\n            EventBus.$emit('SystemMessage', {\n                type: 'success',\n                message: 'Terms of service saved successfully',\n            });\n        } catch (error) {\n            commit('SET_COMPANY_META_FORM_ERROR', error.response.data.errors);\n        }\n    },\n\n    async removeCompanyLogo({commit}) {\n        try {\n            const responseData = await performApiRequest(commit, 'SET_COMPANY_LOADING', 'company', () => axios.delete('/v1/company/logo'));\n            commit(types.SET_COMPANY, responseData.company);\n            EventBus.$emit('SystemMessage', {\n                type: 'success',\n                message: 'Terms of service saved successfully',\n            });\n        } catch (error) {\n            commit('SET_COMPANY_META_FORM_ERROR', error.response.data.errors);\n        }\n    },\n\n    fetchCompanyNotifications({commit}) {\n        commit('SET_COMPANY_LOADING', {subject: 'notifications', loading: true});\n\n        axios.get(`/v1/notifications?page=${state.nextNotifications}`)\n            .then((response) => {\n                commit('SET_COMPANY_NOTIFICATIONS', response.data.notifications);\n            }).catch((e) => {\n            console.dir(e);\n        }).finally(() => {\n            commit('SET_COMPANY_LOADING', {subject: 'notifications', loading: false});\n        });\n    },\n\n    async markReadCompanyNotifications({commit}, id: string) {\n        try {\n            await performApiRequest(commit, 'SET_COMPANY_LOADING', 'notifications', () => axios.put(`/v1/notifications/${id}`));\n        } catch (error) {\n            commit('SET_COMPANY_META_FORM_ERROR', error.response.data.errors);\n        }\n    },\n\n    /**\n     * Fetch an employee by their invite token\n     */\n    async fetchEmployeeByInviteToken({commit}, inviteToken: string) {\n        try {\n            const returnData = await performApiRequest(commit, 'SET_COMPANY_LOADING', 'invite', () => axios.get(`/v1/company/invites/${inviteToken}`));\n            commit('SET_COMPANY_EMPLOYEE', returnData.employee);\n            return returnData;\n        } catch (error) {\n            commit('SET_COMPANY_META_FORM_ERROR', error.response.data.errors);\n        }\n    },\n\n    fetchAgencySingleListingBookings({commit}, l_id: string) {\n        commit('SET_COMPANY_LOADING', {subject: 'bookings', loading: true});\n\n        axios.get(`/v1/listings/${l_id}/bookings`)\n            .then((response) => {\n                commit('listing/SET_CURRENT_LISTING_BOOKINGS', response.data.bookings, {root: true});\n            }).catch(() => {\n        }).finally(() => {\n            commit('SET_COMPANY_LOADING', {subject: 'bookings', loading: false});\n        });\n    },\n\n    /**\n     * Save a Stripe API key\n     */\n    async saveStripeKey({commit}, key: string) {\n        try {\n            const responseData = await performApiRequest(commit, 'SET_COMPANY_LOADING', 'saveStripeKey', () => axios.post('/v1/stripe/key', {key}));\n            commit(types.SET_COMPANY, responseData.company);\n            EventBus.$emit('SystemMessage', {\n                type: 'success',\n                message: 'Stripe secret key added',\n            });\n            EventBus.$emit('save-stripe-secret-key-success');\n\n            return responseData;\n        } catch (error) {\n            commit(types.SET_COMPANY_META_FORM_ERROR, error.response.data.errors);\n        }\n    },\n\n    async resetStripeKey({commit}) {\n        const responseData = await performApiRequest(commit, 'SET_COMPANY_LOADING', 'resetStripeKey', () => axios.delete('/v1/stripe/key'));\n        commit(types.SET_COMPANY, responseData.company);\n        EventBus.$emit('SystemMessage', {\n            type: 'success',\n            message: 'Stripe secret key removed',\n        });\n        return responseData;\n    },\n\n    getCustomPaymentMethods({commit}) {\n        commit('SET_COMPANY_LOADING', {subject: 'customPaymentMethods', loading: true});\n\n        axios.get(`/v1/custom-payment-methods`)\n            .then((response) => {\n                commit('payments/SET_CUSTOM_PAYMENT_METHODS', response.data.meta, {root: true});\n            }).catch((e) => {\n            console.dir(e);\n        }).finally(() => {\n            commit('SET_COMPANY_LOADING', {subject: 'customPaymentMethods', loading: false});\n        });\n    },\n\n    async addCustomPaymentMethods({commit}, name: string) {\n        const responseData = await performApiRequest(commit, 'SET_COMPANY_LOADING', 'customPaymentMethods', () => axios.post(`/v1/custom-payment-methods`, {name}));\n        commit('payments/SET_CUSTOM_PAYMENT_METHODS', responseData.meta, {root: true});\n    },\n\n    async getDefaultMeta({commit}) {\n        try {\n            const responseData = await performApiRequest(commit, 'SET_COMPANY_LOADING', 'getDefaultMeta', () => axios.get('/v1/default-meta'));\n            commit(types.SET_COMPANY_DEFAULT_META, responseData.meta);\n        } catch (error) {\n        }\n    },\n\n    async addDefaultMeta({commit}, data: {\n        meta: ({ value: number; key: string } | { value: string; key: string })[]\n    }) {\n        try {\n            await performApiRequest(commit, 'SET_COMPANY_LOADING', 'addDefaultMeta', () => axios.post('/v1/default-meta', data));\n            push.success({\n                message: 'Settings saved successfully',\n            });\n        } catch (error) {\n            push.error({\n                message: 'There was an error saving settings',\n            });\n            commit(types.SET_COMPANY_META_FORM_ERROR, error.response.data.errors);\n            throw error;\n        }\n    },\n\n    async fetchDeliveryLocations({commit}) {\n        try {\n            commit('CLEAR_COMPANY_META_FORM_ERRORS');\n            const responseData = await performApiRequest(commit, 'SET_COMPANY_LOADING', 'deliveryLocation', () => axios.get('/v1/delivery-locations'));\n            EventBus.$emit('fetch-delivery-location-success');\n            commit(types.SET_DELIVERY_LOCATIONS, responseData.locations);\n\n            return responseData;\n        } catch (error) {\n            commit('SET_COMPANY_META_FORM_ERROR', error.response.data.errors);\n            push.error({\n                message: error?.response?.data?.message || 'There was an error',\n            });\n        }\n    },\n\n    async createDeliveryLocation({commit, dispatch}, deliveryLocation: DeliveryLocation) {\n        try {\n            commit('CLEAR_COMPANY_META_FORM_ERRORS');\n            const responseData = await performApiRequest(commit, 'SET_COMPANY_LOADING', 'deliveryLocation', () => axios.post('/v1/delivery-locations', deliveryLocation));\n            dispatch('fetchDeliveryLocations');\n            EventBus.$emit('SystemMessage', {\n                type: 'success',\n                message: 'Delivery location created',\n            });\n            return responseData;\n        } catch (error) {\n            commit('SET_COMPANY_META_FORM_ERROR', error.response.data.errors);\n            push.error({\n                message: error?.response?.data?.message || 'There was an error',\n            });\n        }\n    },\n\n    async deleteDeliveryLocation({commit, dispatch}, uuid: string) {\n        try {\n            commit('CLEAR_COMPANY_META_FORM_ERRORS');\n            await performApiRequest(commit, 'SET_COMPANY_LOADING', 'deliveryLocation', () => axios.delete(`/v1/delivery-locations/${uuid}`));\n            dispatch('fetchDeliveryLocations');\n            EventBus.$emit('SystemMessage', {\n                type: 'success',\n                message: 'Delivery location deleted',\n            });\n        } catch (error) {\n            commit('SET_COMPANY_META_FORM_ERROR', error.response.data.errors);\n            push.error({\n                message: error?.response?.data?.message || 'There was an error',\n            });\n        }\n    },\n\n    async toggleDeliveryLocation({commit, dispatch}, uuid: string) {\n        try {\n            commit('CLEAR_COMPANY_META_FORM_ERRORS');\n            await performApiRequest(commit, 'SET_COMPANY_LOADING', 'deliveryLocation', () => axios.post(`/v1/delivery-locations/${uuid}/toggle`));\n            dispatch('fetchDeliveryLocations');\n\n            push.success({\n                message: 'Delivery location toggled',\n            });\n        } catch (error) {\n            commit('SET_COMPANY_META_FORM_ERROR', error.response.data.errors);\n            push.error({\n                message: error?.response?.data?.message || 'There was an error',\n            });\n        }\n    },\n\n    async updateDeliveryLocation({commit, dispatch}, location: DeliveryLocation) {\n        try {\n            commit(types.CLEAR_COMPANY_META_FORM_ERRORS);\n            await performApiRequest(commit, 'SET_COMPANY_LOADING', 'deliveryLocation', () => axios.put(`/v1/delivery-locations/${location.uuid}/`, location));\n            dispatch('fetchDeliveryLocations');\n            push.success({\n                message: 'Delivery location updated',\n            });\n        } catch (error) {\n            commit('SET_COMPANY_META_FORM_ERROR', error.response.data.errors);\n            push.error({\n                message: error?.response?.data?.message || 'There was an error',\n            });\n        }\n    },\n\n    async getOperatingRules({commit}) {\n        try {\n            commit('CLEAR_COMPANY_META_FORM_ERRORS');\n            const responseData = await performApiRequest(commit, 'SET_COMPANY_LOADING', 'getOperatingRules', () => axios.get('/v1/operating-rules'));\n            commit('SET_OPERATING_RULES', responseData.operatingRules);\n        } catch (error) {\n            commit('SET_COMPANY_META_FORM_ERROR', error.response.data.errors);\n            push.error({\n                message: error?.response?.data?.message || 'There was an error',\n            });\n        }\n    },\n\n    async saveOperatingRule({commit, dispatch}, data: { type: string, data: any }) {\n        try {\n            commit('CLEAR_COMPANY_META_FORM_ERRORS');\n            await performApiRequest(commit, 'SET_COMPANY_LOADING', 'createOperatingRule', () => axios.post('/v1/operating-rules', data));\n            dispatch('getOperatingRules');\n            EventBus.$emit('save-operating-rule-success', data);\n        } catch (error) {\n            commit('SET_COMPANY_META_FORM_ERROR', error.response.data.errors);\n            push.error({\n                message: error?.response?.data?.message || 'There was an error',\n            });\n        }\n    },\n\n    /**\n     * Delete a companies' operating rule\n     */\n    async deleteOperatingRule({commit, dispatch}, rule: OperatingRule) {\n        try {\n            commit('CLEAR_COMPANY_META_FORM_ERRORS');\n            await performApiRequest(commit, 'SET_COMPANY_LOADING', 'deleteOperatingRule', () => axios.delete(`/v1/operating-rules/${rule.uuid}`));\n            dispatch('getOperatingRules');\n            EventBus.$emit('delete-operating-rule-success', rule);\n        } catch (error) {\n            commit('SET_COMPANY_META_FORM_ERROR', error.response.data.errors);\n            push.error({\n                message: error?.response?.data?.message || 'There was an error',\n            });\n        }\n    },\n\n    async getActivityLog({commit}, data: { page: number }) {\n        try {\n            const query = createUrlQueryString({\n                page: data.page || 1,\n            })\n\n            const responseData = await performApiRequest(commit, 'SET_COMPANY_LOADING', 'activity_log', () => axios.get(`/v1/activity-log${query}`));\n\n            return responseData.activity;\n        } catch (error) {\n            console.error('Failed to get activity log:', error);\n        }\n    },\n\n    getFeedbackReviews({commit}) {\n        axios.get('/v1/feedback-reviews')\n            .then((response) => {\n                commit('SET_FEEDBACK_REVIEWS', get(response, 'data.feedback'));\n            }).catch(() => {\n        }).finally(() => {\n        });\n    },\n\n    saveFeedbackReview({commit}, review: { turo_id: string, review: string }) {\n        axios.post('/v1/feedback-reviews', review)\n            .then((response) => {\n                commit('SET_FEEDBACK_REVIEWS', get(response, 'data.feedback'));\n                EventBus.$emit('save-feedback-review-success');\n                EventBus.$emit('SystemMessage', {\n                    type: 'success',\n                    message: 'Feedback review saved successfully',\n                });\n            }).catch(() => {\n        }).finally(() => {\n        });\n    },\n\n    deleteFeedbackReview({commit}, review) {\n        axios.delete(`/v1/feedback-reviews/${review.uuid}`, review)\n            .then((response) => {\n                commit(types.SET_FEEDBACK_REVIEWS, get(response, 'data.feedback'));\n                EventBus.$emit('delete-feedback-review-success');\n                EventBus.$emit('SystemMessage', {\n                    type: 'success',\n                    message: 'Feedback review saved successfully',\n                });\n            }).catch((e) => {\n            console.dir(e);\n        }).finally(() => {\n        });\n    },\n\n    /**\n     * Mark the account for deletion\n     */\n    markAccountForDeletion({commit}, data: { reason: string, comments: string }) {\n        commit('SET_COMPANY_LOADING', {subject: 'markAccountForDeletion', loading: true});\n        axios.post('/v1/mark-account-for-deletion', data)\n            .then(() => {\n                EventBus.$emit('mark-account-for-deletion-success');\n            }).catch((error) => {\n            push.error({\n                message: error?.response?.data?.message || 'There was an error',\n            });\n        }).finally(() => {\n            commit('SET_COMPANY_LOADING', {subject: 'markAccountForDeletion', loading: false});\n        });\n    },\n\n\n    /**\n     * Extend company trial\n     */\n    extendCompanyTrial({commit, state}) {\n        commit('SET_COMPANY_LOADING', {subject: 'extendTrial', loading: true});\n\n        axios.post(`/v1/company/${state.company.uuid}/extend-trial`)\n            .then((response) => {\n                commit('SET_COMPANY', response.data.company);\n                EventBus.$emit('SystemMessage', {\n                    type: 'success',\n                    message: 'Trial extended',\n                });\n                EventBus.$emit('extend-trial-success');\n            }).catch((error) => {\n            push.error({\n                message: error?.response?.data?.message || 'There was an error',\n            });\n        }).finally(() => {\n            commit('SET_COMPANY_LOADING', {subject: 'extendTrial', loading: false});\n        });\n    },\n\n    async getEmployees({commit}) {\n        try {\n            const responseData = await performApiRequest(commit, 'SET_COMPANY_LOADING', 'employee', () => axios.get('/v1/employees'));\n            commit('SET_COMPANY_EMPLOYEES', responseData.employees);\n            EventBus.$emit('employee-get-success');\n        } catch (error) {\n            commit('SET_COMPANY_META_FORM_ERROR', error.response.data.errors);\n        }\n    },\n\n    async saveEmployee({commit}, data: { employee_uuid: string, data: object }) {\n        try {\n            await performApiRequest(commit, 'SET_COMPANY_LOADING', 'employee', () => axios.put(`/v1/employees/${data.employee_uuid}`, data.data));\n            EventBus.$emit('employee-updated-success');\n        } catch (error) {\n            push.error({\n                message: error?.response?.data?.message || 'There was an error',\n            });\n        }\n    },\n\n    async updateEmployeeNotificationSettings({commit}, data: SavingEmployeeNotificationSettings) {\n        try {\n            await performApiRequest(commit, 'SET_COMPANY_LOADING', 'employee', () => axios.put(`/v1/employees/${data.uuid}/notification-settings`, data));\n            EventBus.$emit('employee-updated-success');\n            EventBus.$emit('SystemMessage', {\n                type: 'success',\n                message: 'Settings updated successfully!',\n            });\n        } catch (error) {\n            push.error({\n                message: error?.response?.data?.message || 'There was an error',\n            });\n        }\n    },\n\n\n    async listingMatchCompanyUseSecondaryDriver({commit}) {\n        try {\n            await performApiRequest(commit, 'SET_COMPANY_LOADING', 'listingReset', () => axios.post('/v1/reset-listings-allow-secondary-driver'));\n            EventBus.$emit('reset-use-secondary-driver-listings-success');\n            EventBus.$emit('SystemMessage', {\n                type: 'success',\n                message: 'Listing settings updated successfully',\n            });\n        } catch (error) {\n            console.error('Failed to get activity log:', error);\n        }\n    },\n};\n\nconst companyModule: Module<CompanyState, RootState> = {\n    namespaced: true,\n    state,\n    mutations,\n    actions,\n    getters,\n}\n\nexport default companyModule;\n","import axios from 'axios';\nimport * as types from '@/store/mutation-types';\nimport {Form} from '@/plugins/FWForms/index';\nimport {BookingInterface, Coupon, StoreLoaders} from '@/types';\nimport {RootState} from '@/types/RootState';\nimport {performApiRequest} from '@/store/helpers/vuex-helpers';\nimport {Module} from 'vuex';\nimport {push} from 'notivue'\n\nexport interface CouponState {\n    loading: StoreLoaders;\n    couponForm: Form<any>;\n    coupons: Coupon[];\n    redemptions: BookingInterface[];\n}\n\n// state\nconst state: CouponState = {\n    loading: {\n        save_coupon: false,\n        update_coupon: false,\n        fetch_coupon: false,\n        delete_coupon: false,\n        redemptions: false,\n    },\n    couponForm: new Form(),\n    coupons: [],\n    redemptions: [],\n};\n\n\nconst mutations = {\n    [types.SET_COUPON_LOADING](state: CouponState, loading: { subject: string, loading: boolean }) {\n        state.loading[loading.subject] = loading.loading;\n    },\n    [types.SET_COUPONS](state: CouponState, coupons: Coupon[]) {\n        state.coupons = coupons;\n    },\n    [types.SET_COUPON_REDEMPTIONS](state: CouponState, redemptions: BookingInterface[]) {\n        state.redemptions = redemptions;\n    },\n    [types.UPDATE_COUPON](state: CouponState, coupon: Coupon) {\n        const index = state.coupons.findIndex(c => c.uuid === coupon.uuid);\n\n        if (index >= 0) {\n            const updatedCoupons = [...state.coupons];\n\n            updatedCoupons[index] = coupon;\n\n            state.coupons = updatedCoupons;\n        }\n    },\n    [types.CLEAR_COUPON_FORM_ERRORS](state: CouponState, form_field: string | null = null) {\n        if (form_field === null || form_field === undefined) {\n            state.couponForm.errors.clear();\n        } else {\n            state.couponForm.errors.clear(form_field);\n        }\n    },\n    [types.SET_COUPON_FORM_ERROR](state: CouponState, error: string | Record<string, string[]>) {\n        state.couponForm.errors.set(error);\n    },\n    [types.SET_COUPON_FORM_BUSY](state: CouponState, busy: boolean) {\n        state.couponForm.busy = busy;\n    },\n\n};\n\nconst actions = {\n\n    /**\n     * Check a coupon\n     */\n    async checkCoupon({commit, rootGetters}, {coupon, l_id, email}) {\n        commit(types.CLEAR_COUPON_FORM_ERRORS);\n\n        let queryString = `?coupon=${coupon}`;\n        if (l_id) {\n            queryString += `&l_id=${l_id}`;\n        }\n        if (email) {\n            email = encodeURIComponent(email);\n            queryString += `&email=${email}`;\n        }\n\n        try {\n            commit('SET_COUPON_FORM_BUSY', true);\n\n            const responseData = await performApiRequest(commit, 'SET_COUPON_LOADING', 'fetch_coupon', () => axios.get(`/v1/company/${rootGetters['company/company'].uuid}/coupons/check${queryString}`));\n            commit('tenantCheckout/SET_TENANT_CHECKOUT_DISCOUNT', responseData?.coupon, {root: true});\n        } catch (error) {\n            commit('SET_COUPON_FORM_ERROR', error.response.data?.errors || 'There was an error');\n            commit('checkout/RESET_CHECKOUT_DISCOUNT', null, {root: true});\n        } finally {\n            commit(types.SET_COUPON_FORM_BUSY, false);\n        }\n    },\n\n    async fetchCoupons({commit}) {\n        try {\n            const responseData = await performApiRequest(commit, 'SET_COUPON_LOADING', 'fetch_coupon', () => axios.get('/v1/coupons'));\n            commit(types.SET_COUPONS, responseData.coupons);\n        } catch (error) {\n        }\n    },\n\n    async createCoupon({commit}, coupon: Coupon) {\n        commit(types.CLEAR_COUPON_FORM_ERRORS);\n        try {\n            const responseData = await performApiRequest(commit, 'SET_COUPON_LOADING', 'save_coupon', () => axios.post('/v1/coupons', coupon));\n            commit(types.SET_COUPONS, responseData.coupons);\n\n            push.success({\n                message: 'Coupon created successfully',\n            });\n        } catch (error) {\n            commit(types.SET_COUPON_FORM_ERROR, error.response.data?.errors || 'There was an error');\n        }\n    },\n\n    async toggleCouponActive({commit}, couponUuid: string) {\n        try {\n            const responseData = await performApiRequest(commit, 'SET_COUPON_LOADING', 'save_coupon', () => axios.put(`/v1/coupons/${couponUuid}/toggle`));\n            commit(types.SET_COUPONS, responseData.coupons);\n\n            push.success({\n                message: 'Coupon status updated successfully',\n            });\n        } catch (error) {\n        }\n    },\n\n    async multiCouponToggle({commit}, coupons: typeof Array<Coupon['uuid']>) {\n        try {\n            const responseData = await performApiRequest(commit, 'SET_COUPON_LOADING', 'save_coupon', () => axios.put('/v1/coupons/', coupons));\n            commit(types.SET_COUPONS, responseData.coupons);\n        } catch (error) {\n        }\n    },\n\n    async multiCouponDelete({commit}, coupons: typeof Array<Coupon['uuid']>) {\n        try {\n            const responseData = await performApiRequest(commit, 'SET_COUPON_LOADING', 'save_coupon', () => axios.post('/v1/coupons/delete', coupons));\n            commit(types.SET_COUPONS, responseData.coupons);\n        } catch (error) {\n        }\n    },\n\n    /**\n     * Update a coupon\n     */\n    async updateCoupon({commit}, coupon: Coupon) {\n        try {\n            const responseData = await performApiRequest(commit, 'SET_COUPON_LOADING', 'update_coupon', () => axios.put(`/v1/coupons/${coupon.uuid}`, coupon));\n            commit(types.UPDATE_COUPON, responseData?.coupon);\n\n            push.success({\n                message: 'Coupon updated successfully',\n            });\n        } catch (error) {\n            commit(types.SET_COUPON_FORM_ERROR, error.response.data?.errors || 'There was an error');\n            throw error;\n        }\n    },\n\n    async deleteCoupon({commit}, couponUuid: string) {\n        try {\n            const responseData = await performApiRequest(commit, 'SET_COUPON_LOADING', 'delete_coupon', () => axios.delete(`/v1/coupons/${couponUuid}`));\n            commit(types.SET_COUPONS, responseData.coupons);\n\n            push.success({\n                message: 'Coupon deleted successfully',\n            });\n        } catch (error) {\n            commit(types.SET_COUPON_FORM_ERROR, error.response.data?.errors || 'There was an error');\n        }\n    },\n\n    /**\n     * Check a coupons redemptions\n     */\n    async redemptions({commit}, coupon: string) {\n        try {\n            const responseData = await performApiRequest(commit, 'SET_COUPON_LOADING', 'redemptions', () => axios.get(`/v1/coupons/${coupon}/redemptions`));\n            commit(types.SET_COUPON_REDEMPTIONS, responseData.orders);\n        } catch (error) {\n            commit(types.SET_COUPON_FORM_ERROR, error.response.data?.errors || 'There was an error');\n        }\n    },\n};\n\nconst couponModule: Module<CouponState, RootState> = {\n    namespaced: true,\n\n    state,\n\n    getters: {\n        loading: (state: CouponState) => state.loading,\n        coupons: (state: CouponState) => state.coupons,\n        form: (state: CouponState) => state.couponForm,\n        redemptions: (state: CouponState) => state.redemptions,\n    },\n\n    mutations,\n\n    actions,\n}\n\nexport default couponModule;\n","import axios from 'axios';\nimport {Form} from '@/plugins/FWForms/index';\nimport {EventBus} from '@/plugins/eventBus';\nimport {get} from 'lodash';\nimport * as types from '../mutation-types';\nimport {push} from 'notivue';\n\nexport interface CustodianState {\n    init: boolean;\n    loading: Record<string, boolean>;\n    form: Form<object>;\n    custodian: any;\n    invite: any;\n    custodians: any[];\n    listings: any[];\n    bookings: any[];\n\n}\n\nconst state: CustodianState = {\n    init: false,\n    loading: {\n        create: false,\n        delete: false,\n        update: false,\n        join: false,\n    },\n    form: new Form(),\n    custodian: null,\n    invite: null,\n    custodians: [],\n    listings: [],\n    bookings: [],\n};\n\nconst getters = {\n    init: (state: CustodianState) => state.init,\n    loading: (state: CustodianState) => state.loading,\n    form: (state: CustodianState) => state.form,\n    custodian: (state: CustodianState) => state.custodian,\n    custodians: (state: CustodianState) => state.custodians,\n    invite: (state: CustodianState) => state.invite,\n    listings: (state: CustodianState) => state.listings,\n    bookings: (state: CustodianState) => state.bookings,\n};\n\nconst mutations = {\n    [types.SET_CUSTODIAN_LOADING](state: CustodianState, loading: { subject: string, loading: boolean }) {\n        state.loading[loading.subject] = loading.loading;\n    },\n    [types.SET_CUSTODIANS](state: CustodianState, custodians) {\n        state.custodians = custodians;\n    },\n    [types.SET_CUSTODIAN_INVITE](state: CustodianState, invite) {\n        state.invite = invite;\n    },\n    [types.SET_CUSTODIAN_LISTINGS](state: CustodianState, listings) {\n        state.listings = listings;\n    },\n    [types.SET_CUSTODIAN_BOOKINGS](state: CustodianState, bookings) {\n        state.bookings = bookings;\n    },\n};\n\nconst actions = {\n\n\n    /**\n     * Get custodian\n     */\n    join({commit}, custodian_id: string) {\n        commit(types.SET_CUSTODIAN_LOADING, {subject: 'join', loading: true});\n\n        axios.get(`/v1/custodian-invite/${custodian_id}`)\n            .then(() => {\n                EventBus.$emit('custodian-join-success');\n            }).catch((e) => {\n            EventBus.$emit('custodian-join-failure', get(e, 'response.data.message', 'There was an error'));\n            push.error({\n                message: e?.response?.data?.message || 'There was an error',\n            });\n        }).finally(() => {\n            commit('SET_CUSTODIAN_LOADING', {subject: 'join', loading: false});\n        });\n    },\n\n\n    /**\n     * Create custodian invite link\n     */\n    createInvite({commit}, data) {\n        commit('SET_CUSTODIAN_LOADING', {subject: 'create', loading: true});\n\n        axios.post('/v1/custodian-invite', data)\n            .then((response) => {\n                commit('SET_CUSTODIAN_INVITE', get(response, 'data.invite', []));\n                EventBus.$emit('custodial-invite-success', get(response, 'data.invite'));\n            }).catch((e) => {\n            EventBus.$emit('custodian-create-invite-failure', get(e, 'response.data.message', 'There was an error'));\n            push.error({\n                message: e?.response?.data?.message || 'There was an error',\n            });\n        }).finally(() => {\n            commit('SET_CUSTODIAN_LOADING', {subject: 'create', loading: false});\n        });\n    },\n\n    /**\n     * Update custodian\n     */\n    updateCustodian({commit}, data) {\n        commit('SET_CUSTODIAN_LOADING', {subject: 'create', loading: true});\n\n        axios.put(`/v1/custodians/${data.custodian.uuid}`, data)\n            .then((response) => {\n                commit('SET_CUSTODIAN_INVITE', get(response, 'data.invite', []));\n                EventBus.$emit('custodial-invite-success', get(response, 'data.invite'));\n            }).catch((e) => {\n            EventBus.$emit('custodian-create-invite-failure', get(e, 'response.data.message', 'There was an error'));\n            push.error({\n                message: e?.response?.data?.message || 'There was an error',\n            });\n        }).finally(() => {\n            commit('SET_CUSTODIAN_LOADING', {subject: 'create', loading: false});\n        });\n    },\n\n    /**\n     * Get custodian\n     */\n    getCustodians({commit}) {\n        commit('SET_CUSTODIAN_LOADING', {subject: 'tax_categories', loading: true});\n\n        axios.get('/v1/custodians')\n            .then((response) => {\n                commit('SET_CUSTODIANS', get(response, 'data.custodians', []));\n            }).catch(() => {\n        }).finally(() => {\n            commit('SET_CUSTODIAN_LOADING', {subject: 'tax_categories', loading: false});\n        });\n    },\n\n    /**\n     * Get custodians listings\n     */\n    getCustodianListings({commit}, custodian) {\n        commit('SET_CUSTODIAN_LOADING', {subject: 'tax_categories', loading: true});\n\n        axios.get(`/v1/custodians/${custodian.uuid}/listings`)\n            .then((response) => {\n                commit('SET_CUSTODIAN_LISTINGS', get(response, 'data.listings', []));\n                EventBus.$emit('get-custodian-listings-success', get(response, 'data.listings', []));\n            }).catch(() => {\n        }).finally(() => {\n            commit('SET_CUSTODIAN_LOADING', {subject: 'tax_categories', loading: false});\n        });\n    },\n\n    getCustodianBookings({commit}, options) {\n        commit('SET_CUSTODIAN_LOADING', {subject: 'tax_categories', loading: true});\n\n        let qString = '?';\n        if (get(options, 'startDate')) {\n            qString += `startDate=${get(options, 'startDate')}`;\n        }\n        if (get(options, 'endDate')) {\n            qString += `&endDate=${get(options, 'endDate')}`;\n        }\n\n\n        if (qString === '?') {\n            qString = '';\n        }\n\n        axios.get(`/v1/custodians/${options.custodian_uuid}/bookings${qString}`)\n            .then((response) => {\n                commit('SET_CUSTODIAN_BOOKINGS', get(response, 'data.bookings', []));\n                EventBus.$emit('get-custodian-bookings-success', get(response, 'data.listings', []));\n            }).catch(() => {\n        }).finally(() => {\n            commit('SET_CUSTODIAN_LOADING', {subject: 'tax_categories', loading: false});\n        });\n    },\n\n    /**\n     * Delete custodian\n     */\n    deleteCustodians({commit}, custodian_uuid) {\n        commit('SET_CUSTODIAN_LOADING', {subject: 'delete', loading: true});\n\n        axios.delete(`/v1/custodians/${custodian_uuid}`)\n            .then((response) => {\n                EventBus.$emit('delete-custodian-success', get(response, 'data.invite'));\n            }).catch((e) => {\n            EventBus.$emit('custodian-create-invite-failure', get(e, 'response.data.message', 'There was an error'));\n            push.error({\n                message: e?.response?.data?.message || 'There was an error',\n            });\n        }).finally(() => {\n            commit('SET_CUSTODIAN_LOADING', {subject: 'delete', loading: false});\n        });\n    },\n\n    /**\n     * Send custodian invite\n     */\n    sendInviteEmailLink({commit}, data) {\n        commit('SET_CUSTODIAN_LOADING', {subject: 'sending_invite_email', loading: true});\n\n        axios.post(`/v1/custodians/${data.custodian_uuid}/send-invite-email`, data)\n            .then((response) => {\n                EventBus.$emit('delete-custodian-success', get(response, 'data.invite'));\n            }).catch((e) => {\n            EventBus.$emit('custodian-create-invite-failure', get(e, 'response.data.message', 'There was an error'));\n            push.error({\n                message: e?.response?.data?.message || 'There was an error',\n            });\n        }).finally(() => {\n            commit('SET_CUSTODIAN_LOADING', {subject: 'sending_invite_email', loading: false});\n        });\n    },\n};\n\nexport default {\n    namespaced: true,\n    state,\n    mutations,\n    actions,\n    getters,\n};\n","import {EventBus} from '@/plugins/eventBus';\nimport {get} from 'lodash';\nimport {Form} from '@/plugins/FWForms/index';\nimport axios from 'axios';\nimport * as types from '@/store/mutation-types';\nimport {push} from 'notivue'\n\nexport interface CustomFieldsState {\n    loading: Record<string, boolean>;\n    customFields: any[];\n    form: Form<object>;\n}\n\n// state\nconst state: CustomFieldsState = {\n    loading: {\n        customFields: false,\n        updateCustomFields: false,\n    },\n    customFields: [],\n    form: new Form(),\n};\n\nconst getters = {\n    loading: (state: CustomFieldsState) => state.loading,\n    form: (state: CustomFieldsState) => state.form,\n    customFields: (state: CustomFieldsState) => state.customFields,\n};\n\nconst mutations = {\n    [types.SET_CUSTOM_FIELDS_LOADING](state: CustomFieldsState, loading: { subject: string, loading: boolean }) {\n        state.loading[loading.subject] = loading.loading;\n    },\n    [types.SET_CUSTOM_FIELDS](state: CustomFieldsState, fields) {\n        state.customFields = fields;\n    },\n    [types.SET_CUSTOM_FIELDS_FORM_BUSY](state: CustomFieldsState, busy) {\n        state.form.busy = busy;\n    },\n};\n\nconst actions = {\n\n    fetchCustomFields({commit}) {\n        commit('SET_CUSTOM_FIELDS_LOADING', {subject: 'customFields', loading: true});\n        commit('SET_CUSTOM_FIELDS_FORM_BUSY', true);\n\n        axios.get('/v1/custom-fields')\n            .then((response) => {\n                commit('SET_CUSTOM_FIELDS', get(response, 'data.customFields'));\n            }).catch(() => {\n        }).finally(() => {\n            commit('SET_CUSTOM_FIELDS_FORM_BUSY', false);\n\n            commit('SET_CUSTOM_FIELDS_LOADING', {subject: 'customFields', loading: false});\n        });\n    },\n\n    createCustomFields({commit, state}, field) {\n        commit('SET_CUSTOM_FIELDS_LOADING', {subject: 'updateCustomFields', loading: true});\n        commit('SET_CUSTOM_FIELDS_FORM_BUSY', true);\n\n        axios.post('/v1/custom-fields', field)\n            .then((response) => {\n                EventBus.$emit('create-custom-fields-success', get(response, 'data.customField', {}));\n                push.success({\n                    message: 'Custom Field created successfully!',\n                });\n            }).catch((e) => {\n            state.form.errors.set(get(e, 'response.data.errors'));\n        }).finally(() => {\n            commit('SET_CUSTOM_FIELDS_FORM_BUSY', false);\n            commit('SET_CUSTOM_FIELDS_LOADING', {subject: 'updateCustomFields', loading: false});\n        });\n    },\n\n    updateCustomFields({commit}, field) {\n        commit('SET_CUSTOM_FIELDS_LOADING', {subject: 'updateCustomFields', loading: true});\n        commit('SET_CUSTOM_FIELDS_FORM_BUSY', true);\n\n        axios.put(`/v1/custom-fields/${field.uuid}`, field)\n            .then((response) => {\n                EventBus.$emit('update-custom-fields-success', get(response, 'data.customField', {}));\n                push.success({\n                    message: 'Custom Field updated successfully!',\n                });\n            }).catch((e) => {\n            EventBus.$emit('update-custom-fields-error', {field, error: get(e, 'response.data.errors', {})});\n        }).finally(() => {\n            commit('SET_CUSTOM_FIELDS_FORM_BUSY', false);\n            commit('SET_CUSTOM_FIELDS_LOADING', {subject: 'updateCustomFields', loading: false});\n        });\n    },\n\n    updateCustomFieldsPositions({commit}, fields) {\n        commit('SET_CUSTOM_FIELDS_LOADING', {subject: 'updateCustomFields', loading: true});\n        commit('SET_CUSTOM_FIELDS_FORM_BUSY', true);\n\n        axios.put('/v1/custom-fields/positions', {fields})\n            .then((response) => {\n                EventBus.$emit('update-custom-fields-positions-success', get(response, 'data.customFields', []));\n            }).catch(() => {\n        }).finally(() => {\n            commit('SET_CUSTOM_FIELDS_FORM_BUSY', false);\n            commit('SET_CUSTOM_FIELDS_LOADING', {subject: 'updateCustomFields', loading: false});\n        });\n    },\n\n    deleteCustomField({commit}, field) {\n        commit('SET_CUSTOM_FIELDS_LOADING', {subject: 'updateCustomFields', loading: true});\n        commit('SET_CUSTOM_FIELDS_FORM_BUSY', true);\n\n        axios.delete(`/v1/custom-fields/${field.uuid}`)\n            .then((response) => {\n                commit('SET_CUSTOM_FIELDS', get(response, 'data.customFields'));\n                push.success({\n                    message: 'Custom Field deleted successfully!',\n                });\n            }).catch((e) => {\n            EventBus.$emit('delete-custom-fields-failed', get(e, 'response.data.message', {}));\n        }).finally(() => {\n            commit('SET_CUSTOM_FIELDS_FORM_BUSY', false);\n            commit('SET_CUSTOM_FIELDS_LOADING', {subject: 'updateCustomFields', loading: false});\n        });\n    },\n};\n\nexport default {\n    namespaced: true,\n    state,\n    mutations,\n    actions,\n    getters,\n};\n","import {Form} from '@/plugins/FWForms/index';\nimport axios from 'axios';\nimport * as types from '@/store/mutation-types';\nimport {performApiRequest} from '@/store/helpers/vuex-helpers';\nimport {StoreLoaders} from '@/types';\nimport {push} from 'notivue'\n\nexport interface DefaultProperty {\n    identifier: string;\n    name: string;\n    owner_type: string;\n    property_type: string;\n    select_options: any;\n    show_on: any;\n    position?: number;\n    editable?: boolean;\n    updated_at?: string;\n    created_at?: string;\n    uuid?: string;\n}\n\nexport interface DefaultPropertiesState {\n    loading: StoreLoaders;\n    defaultProperties: DefaultProperty[];\n    form: Form<any>;\n}\n\n// state\nconst state: DefaultPropertiesState = {\n    loading: {\n        fetchDefaultProperties: false,\n        defaultProperties: false,\n        createCustomFields: false,\n        updateCustomFields: false,\n        deleteCustomFields: false,\n    },\n    defaultProperties: [],\n    form: new Form(),\n};\n\nconst getters = {\n    loading: (state: DefaultPropertiesState) => state.loading,\n    form: (state: DefaultPropertiesState) => state.form,\n    defaultProperties: (state: DefaultPropertiesState) => state.defaultProperties,\n};\n\nconst mutations = {\n    [types.SET_CUSTOM_FIELDS_LOADING](state: DefaultPropertiesState, loading: { subject: string, loading: boolean }) {\n        state.loading[loading.subject] = loading.loading;\n    },\n    [types.SET_DEFAULT_PROPERTIES](state: DefaultPropertiesState, defaultProperty: DefaultProperty[]) {\n        state.defaultProperties = defaultProperty;\n    },\n    [types.CLEAR_DEFAULT_PROPERTIES_FORM](state: DefaultPropertiesState) {\n        state.form.errors.clear();\n    },\n    [types.SET_DEFAULT_PROPERTIES_FORM_BUSY](state: DefaultPropertiesState, busy = true) {\n        state.form.busy = busy;\n    },\n    [types.SET_DEFAULT_PROPERTIES_FORM_ERRORS](state: DefaultPropertiesState, errors: string | Record<string, string[]>) {\n        state.form.errors.set(errors);\n    },\n};\n\nconst actions = {\n    async fetchDefaultProperties({commit}) {\n        commit(types.CLEAR_DEFAULT_PROPERTIES_FORM);\n        commit(types.SET_DEFAULT_PROPERTIES_FORM_BUSY);\n\n        try {\n            const responseData = await performApiRequest(commit, 'SET_CUSTOM_FIELDS_LOADING', 'fetchDefaultProperties', () => axios.get('/v1/default-properties'));\n\n            commit(types.SET_DEFAULT_PROPERTIES, responseData.defaultProperties);\n            commit(types.SET_DEFAULT_PROPERTIES_FORM_BUSY, false);\n        } catch (error) {\n            push.error({\n                message: error?.response?.data?.message || 'There was an error fetching default properties.',\n            });\n        }\n    },\n\n    async createDefaultProperties({commit}, defaultProperty: DefaultProperty) {\n        commit(types.CLEAR_DEFAULT_PROPERTIES_FORM);\n        commit(types.SET_DEFAULT_PROPERTIES_FORM_BUSY);\n\n        try {\n            const responseData = await performApiRequest(commit, 'SET_CUSTOM_FIELDS_LOADING', 'createCustomFields', () => axios.post('/v1/default-properties', defaultProperty));\n\n            commit(types.SET_DEFAULT_PROPERTIES, responseData.defaultProperties);\n\n            push.success({\n                message: 'Custom Field Created successfully!',\n            });\n        } catch (error) {\n            commit(types.SET_DEFAULT_PROPERTIES_FORM_ERRORS, error?.response?.data?.errors);\n        }\n\n        commit(types.SET_DEFAULT_PROPERTIES_FORM_BUSY, false);\n    },\n\n    async updateDefaultProperties({commit}, defaultProperty: DefaultProperty) {\n        commit(types.CLEAR_DEFAULT_PROPERTIES_FORM);\n        commit(types.SET_DEFAULT_PROPERTIES_FORM_BUSY);\n\n        try {\n            await performApiRequest(commit, 'SET_CUSTOM_FIELDS_LOADING', 'updateCustomFields', () => axios.put(`/v1/default-properties/${defaultProperty.uuid}`, defaultProperty));\n\n            push.success({\n                message: 'Custom Field Updated successfully!',\n            });\n        } catch (error) {\n            push.error({\n                message: error?.response?.data?.message || 'There was an error saving this default property.',\n            });\n            commit(types.SET_DEFAULT_PROPERTIES_FORM_ERRORS, error?.response?.data?.message || 'There was an error deleting this custom field.',);\n        }\n\n        commit(types.SET_DEFAULT_PROPERTIES_FORM_BUSY, false);\n    },\n\n    async updateDefaultPropertiesPositions({commit}, fields: DefaultProperty[]) {\n        commit(types.CLEAR_DEFAULT_PROPERTIES_FORM);\n        commit(types.SET_DEFAULT_PROPERTIES_FORM_BUSY);\n\n        try {\n            await performApiRequest(commit, 'SET_CUSTOM_FIELDS_LOADING', 'updateCustomFields', () => axios.put('/v1/default-properties/positions', {fields}));\n\n            push.success({\n                message: 'Custom Field positions updated successfully!',\n            });\n        } catch (error) {\n            push.error({\n                message: error?.response?.data?.message || 'There was an error saving this default property.',\n            });\n            commit(types.SET_DEFAULT_PROPERTIES_FORM_ERRORS, error?.response?.data?.message || 'There was an error deleting this custom field.',);\n        }\n\n        commit(types.SET_DEFAULT_PROPERTIES_FORM_BUSY, false);\n    },\n\n    async deleteDefaultProperties({commit}, defaultProperty: DefaultProperty) {\n        try {\n            commit(types.CLEAR_DEFAULT_PROPERTIES_FORM);\n            commit(types.SET_DEFAULT_PROPERTIES_FORM_BUSY);\n\n            const responseData = await performApiRequest(commit, 'SET_CUSTOM_FIELDS_LOADING', 'deleteCustomFields', () => axios.delete(`/v1/default-properties/${defaultProperty.uuid}`));\n\n            commit(types.SET_DEFAULT_PROPERTIES, responseData.defaultProperties);\n\n            push.success({\n                message: 'Custom Field deleted successfully!',\n            });\n        } catch (error) {\n            commit(types.SET_DEFAULT_PROPERTIES_FORM_BUSY, false);\n            push.error({\n                message: error?.response?.data?.message || 'There was an error deleting this default property.',\n            });\n\n            commit(types.SET_DEFAULT_PROPERTIES_FORM_ERRORS, error?.response?.data?.errors || 'There was an error deleting this custom field.',);\n\n            throw error;\n        }\n\n        commit(types.SET_DEFAULT_PROPERTIES_FORM_BUSY, false);\n    },\n};\n\nexport default {\n    namespaced: true,\n    state,\n    mutations,\n    actions,\n    getters,\n};\n","import axios from 'axios';\nimport {EventBus} from '@/plugins/eventBus';\nimport {StorageService} from '@/services/storage.service';\nimport * as types from '../mutation-types';\nimport {performApiRequest} from '@/store/helpers/vuex-helpers';\nimport {ESignerFieldData} from '@/types';\nimport {push} from 'notivue'\n\nexport type DocumentType = {\n    created_at: string;\n    data: ESignerFieldData[];\n    dimensions: { height: number, width: number };\n    doc_width: number;\n    document_images: string[];\n    file_id: string;\n    files: string[];\n    name: string;\n    pages: number;\n    pdf_path: string;\n    template: any;\n    updated_at: string;\n    uuid: string;\n}\n\nexport type TemplateData = {\n    name: string;\n    documents: DocumentType;\n    pages: number;\n    file_id: string;\n    data: ESignerFieldData[];\n    version: string | 'v2';\n    created_at?: string;\n    updated_at?: string;\n    uuid?: string;\n    custodian?: boolean;\n}\n\nexport interface DocumentState {\n    init: boolean;\n    loading: Record<string, boolean>;\n    users: any[];\n    documents: DocumentType[];\n    document: DocumentType;\n    templates: TemplateData[];\n    template?: TemplateData;\n}\n\nconst state: DocumentState = {\n    init: false,\n    loading: {\n        get: false,\n        template: false,\n        saving: false,\n    },\n    users: [],\n    documents: [],\n    document: null,\n    templates: [],\n    template: null,\n};\n\nconst getters = {\n    init: (state: DocumentState) => state.init,\n    loading: (state: DocumentState) => state.loading,\n    document: (state: DocumentState) => state.document,\n    documents: (state: DocumentState) => state.documents,\n    templates: (state: DocumentState) => state.templates,\n    template: (state: DocumentState) => state.template,\n};\n\nconst mutations = {\n    [types.SET_TEMPLATES_LOADING](state: DocumentState, loading: { subject: string, loading: boolean }) {\n        state.loading[loading.subject] = loading.loading;\n    },\n    [types.SET_ONE_DOCUMENT](state: DocumentState, document: DocumentType) {\n        state.document = document;\n    },\n    [types.SET_ALL_DOCUMENTS](state: DocumentState, documents: DocumentType[]) {\n        state.documents = documents;\n    },\n    [types.RESET_TEMPLATE](state: DocumentState) {\n        state.template = null;\n        state.init = false;\n    },\n    [types.SET_ONE_TEMPLATE](state: DocumentState, template: TemplateData) {\n        state.template = template;\n        state.init = true;\n    },\n    [types.SET_ALL_TEMPLATES](state: DocumentState, templates: TemplateData[]) {\n        state.templates = templates;\n    },\n};\n\nconst actions = {\n\n    /**\n     * Fetch a template\n     */\n    async fetchTemplates({commit}) {\n        try {\n            const responseData = await performApiRequest(commit, 'SET_TEMPLATES_LOADING', 'get', () => axios.get('/v1/templates'));\n            commit(types.SET_ALL_TEMPLATES, responseData.templates);\n        } catch (error) {\n        }\n    },\n\n\n    /**\n     * Create a template\n     *\n     */\n    createTemplate() {\n        axios.post('/v1/templates')\n            .then((response) => {\n                EventBus.$emit('create-template-success', response?.data?.template);\n            }).catch((e) => {\n            push.error({\n                message: e?.response?.data?.message || 'There was an error',\n            });\n        }).finally(() => {\n        });\n    },\n\n\n    /**\n     * Get a guest template\n     */\n    getTemplateGuest({commit}, uuid: string) {\n        commit('SET_TEMPLATES_LOADING', {subject: 'template', loading: true});\n        axios.get(`/v1/templates/${uuid}`)\n            .then((response) => {\n                EventBus.$emit('get-template-success', response?.data?.template);\n                commit(types.SET_ONE_TEMPLATE, response?.data?.template);\n            }).catch(() => {\n        }).finally(() => {\n            commit('SET_TEMPLATES_LOADING', {subject: 'template', loading: false});\n        });\n    },\n\n\n    /**\n     * Update a template\n     */\n    async updateTemplate({commit}, data: { template: TemplateData, actions: any }) {\n        try {\n            await performApiRequest(commit, 'SET_TEMPLATES_LOADING', 'saving', () => axios.put(`/v1/documents/${data.template.documents.uuid}`, {actions: data.actions}));\n\n            push.success({\n                message: 'Template updated successfully!',\n            });\n        } catch (error) {\n        }\n    },\n\n\n    /**\n     * Get a document\n     */\n    getDocument({state, commit, rootGetters}) {\n        axios.get(`/v1/company/${rootGetters['company/company'].uuid}/documents/${state.document.uuid}`)\n            .then((response) => {\n                commit(types.SET_ONE_DOCUMENT, response?.data?.document);\n            }).catch(() => {\n        }).finally(() => {\n        });\n    },\n\n\n    /**\n     * Save a document\n     */\n    saveDocument({state, commit, rootGetters}, data: object) {\n        commit('SET_TEMPLATES_LOADING', {subject: 'saving', loading: true});\n        axios.put(`/v1/company/${rootGetters['company/company'].uuid}/documents/${state.document.uuid}`, {\n            data,\n            document: state.document,\n        })\n            .then(() => {\n                push.success({\n                    message: 'Document saved successfully!',\n                });\n            }).catch(() => {\n        }).finally(() => {\n            commit('SET_TEMPLATES_LOADING', {subject: 'saving', loading: false});\n        });\n    },\n\n\n    /**\n     * Update a template documents name\n     */\n    async updateDocumentName({commit}, name: string) {\n        try {\n            const responseData = await performApiRequest(commit, 'SET_TEMPLATES_LOADING', 'saving', () => axios.put(`/v1/documents/${state.document.uuid}/name`, {name}));\n\n            commit(types.SET_ALL_TEMPLATES, responseData.templates);\n\n            push.success({\n                message: 'Document name updated successfully!',\n            });\n        } catch (error) {\n        }\n    },\n\n\n    /**\n     * Delete a template document\n     */\n    deleteDocument({state, commit}) {\n        axios.delete(`/v1/company/${StorageService.getCompanyUuid()}/documents/${state.document.uuid}`)\n            .then((response) => {\n                commit(types.SET_ALL_DOCUMENTS, response?.data?.documents || []);\n\n                push.success({\n                    message: 'Document removed successfully!',\n                });\n            }).catch(() => {\n        }).finally(() => {\n        });\n    },\n\n\n    /**\n     * Delete a template\n     */\n    async deleteTemplate({commit}, template: TemplateData) {\n        try {\n            const responseData = await performApiRequest(commit, 'SET_TEMPLATES_LOADING', 'deleting', () => axios.delete(`/v1/templates/${template.uuid}`));\n\n            commit(types.SET_ALL_TEMPLATES, responseData.templates);\n\n            push.success({\n                message: 'Template deleted successfully!',\n            });\n        } catch (error) {\n        }\n    },\n};\n\nexport default {\n    namespaced: true,\n    state,\n    mutations,\n    actions,\n    getters,\n};\n","import axios from 'axios';\nimport {EventBus} from '@/plugins/eventBus';\nimport {Form} from '@/plugins/FWForms/index';\nimport * as types from '../mutation-types';\nimport {performApiRequest} from '@/store/helpers/vuex-helpers';\nimport {StoreLoaders} from '@/types';\n\nexport interface EmailTemplate {\n    context: string;\n    context_type: string;\n    created_at: string;\n    default: boolean;\n    email_body: string;\n    email_body_blocks: {\n        blocks: any[];\n        time?: number;\n        version?: string;\n    };\n    email_layout_id: string;\n    identifier: string;\n    is_automatic: boolean;\n    name: string;\n    subject: string;\n    updated_at: string;\n    uuid: string;\n}\n\nexport type Email = {\n    attachments: Array<any>,\n    blocks: Array<any>,\n    body: string,\n    order_id: string,\n    recipients: Array<string>,\n    subject: string,\n    template: {\n        name: string,\n        subject: string,\n        identifier: string,\n        uuid: string,\n    },\n}\n\ntype EmailHistory = {\n    created_at: string,\n    email_body: string,\n    email_full_body: string,\n    email_layout_id: string,\n    order_id: string,\n    recipients: Array<string>,\n    status: string,\n    subject: string,\n    updated_at: string,\n    uuid: string,\n}\n\nexport interface EmailState {\n    loading: StoreLoaders,\n    emailForm: Form<any>,\n    history: EmailHistory[],\n    emails: Array<any>,\n    emailTemplates: EmailTemplate[],\n    emailTemplate: EmailTemplate,\n    email: Email,\n}\n\nconst state: EmailState = {\n    loading: {\n        emails: false,\n        createEmail: false,\n        sendEmail: false,\n        history: false,\n        email_templates: false,\n    },\n    emailForm: new Form(),\n    history: [],\n    emails: [],\n    emailTemplates: [],\n    emailTemplate: null,\n    email: null,\n};\n\nconst getters = {\n    loading: (state: EmailState) => state.loading,\n    emailForm: (state: EmailState) => state.emailForm,\n    emails: (state: EmailState) => state.emails,\n    email: (state: EmailState) => state.email,\n    history: (state: EmailState) => state.history,\n    emailTemplates: (state: EmailState) => state.emailTemplates,\n    emailTemplate: (state: EmailState) => state.emailTemplate,\n};\n\nconst mutations = {\n    [types.SET_EMAILS_LOADING](state: EmailState, loading: { subject: string, loading: boolean }) {\n        state.loading[loading.subject] = loading.loading;\n    },\n    [types.SET_EMAILS](state: EmailState, emails: Array<any>) {\n        state.emails = emails;\n    },\n    [types.SET_EMAIL_HISTORY](state: EmailState, emails: EmailHistory[]) {\n        state.history = emails;\n    },\n    [types.SET_EMAIL_TEMPLATES](state: EmailState, templates: EmailTemplate[]) {\n        state.emailTemplates = templates;\n    },\n    [types.SET_EMAIL_TEMPLATE](state: EmailState, template: EmailTemplate) {\n        state.emailTemplate = template;\n    },\n    [types.SET_EMAIL_FORM_ERROR](state: EmailState, error: string | Record<string, string[]>) {\n        state.emailForm.errors.set(error);\n    },\n    [types.CLEAR_EMAIL_FORM_ERRORS](state: EmailState, form_field: string | null = null) {\n        if (form_field === null || form_field === undefined) {\n            state.emailForm.errors.clear();\n        } else {\n            state.emailForm.errors.clear(form_field);\n        }\n    },\n};\n\nconst actions = {\n\n    /**\n     * Create an email.\n     */\n    async sendEmail({commit}, email: Email) {\n        commit(types.CLEAR_EMAIL_FORM_ERRORS);\n\n        try {\n            const responseData = await performApiRequest(commit, 'SET_EMAILS_LOADING', 'sendEmail', () => axios.post('/v1/emails/send', email));\n            EventBus.$emit('send-email-success', responseData.email);\n        } catch (e) {\n            const message = e?.response?.data?.errors?.[0] || e?.response?.data?.message || 'There was an error';\n            EventBus.$emit('send-email-error', message);\n            commit(types.SET_EMAIL_FORM_ERROR, e.response.data?.errors || 'There was an error');\n        }\n    },\n\n    /**\n     * Get email history\n     */\n    async history({commit}, data: { type: string, id: string }) {\n        const params = new URLSearchParams(data).toString();\n\n        try {\n            const responseData = await performApiRequest(commit, 'SET_EMAILS_LOADING', 'history', () => axios.get(`/v1/emails/history?${params}`));\n            commit(types.SET_EMAIL_HISTORY, responseData.emails || []);\n        } catch (e) {\n        }\n    },\n\n    /**\n     * Get email templates\n     */\n    async getEmailTemplates({commit}, data: { context?: string } = undefined) {\n        const qString = data?.context ? `?context=${data.context}` : '';\n\n        try {\n            const responseData = await performApiRequest(commit, 'SET_EMAILS_LOADING', 'email_templates', () => axios.get(`/v1/email-templates${qString}`));\n            commit('SET_EMAIL_TEMPLATES', responseData.emailTemplates || []);\n        } catch (error) {\n        }\n    },\n\n    /**\n     * Get email template\n     */\n    async getEmailTemplate({commit}, uuid: string) {\n        const responseData = await performApiRequest(commit, 'SET_EMAILS_LOADING', 'email_templates', () => axios.get(`/v1/email-templates/${uuid}`));\n        commit(types.SET_EMAIL_TEMPLATE, responseData.emailTemplate || {});\n    },\n\n    /**\n     * Update email template\n     */\n    async updateEmailTemplate({commit}, emailTemplate: EmailTemplate) {\n        try {\n            const responseData = await performApiRequest(commit, 'SET_EMAILS_LOADING', 'email_templates', () => axios.put(`/v1/email-templates/${emailTemplate.uuid}`, emailTemplate));\n            commit(types.SET_EMAIL_TEMPLATE, responseData.emailTemplate || {});\n            return responseData.emailTemplate;\n        } catch (error) {\n        }\n    },\n\n    /**\n     * Reset email template\n     */\n    async resetEmailTemplate({commit}, emailTemplate: EmailTemplate) {\n        const responseData = await performApiRequest(commit, 'SET_EMAILS_LOADING', 'email_templates', () => axios.post(`/v1/email-templates/${emailTemplate.uuid}/reset`));\n        commit(types.SET_EMAIL_TEMPLATE, responseData.emailTemplate || {});\n        return responseData.emailTemplate;\n    },\n\n    /**\n     * Send test email template\n     */\n    async sendTestTemplateEmail({commit}, emailTemplate: EmailTemplate) {\n        try {\n            await performApiRequest(commit, 'SET_EMAILS_LOADING', 'email_templates', () => axios.post(`/v1/email-templates/${emailTemplate.uuid}/send-test`));\n        } catch (error) {\n        }\n    },\n};\n\nexport default {\n    namespaced: true,\n    state,\n    mutations,\n    actions,\n    getters,\n};\n","import {EventBus} from '@/plugins/eventBus';\nimport axios from 'axios';\nimport * as types from '@/store/mutation-types';\nimport {performApiRequest} from '@/store/helpers/vuex-helpers';\nimport {push} from 'notivue';\n\n\nexport interface EmailDomainSettingsState {\n    loading: Record<string, boolean>;\n    emailDomainSettings: EmailDomainSettings[];\n}\n\nexport interface EmailDomainSettings {\n    DKIMHost: string;\n    DKIMPendingHost: string;\n    DKIMPendingTextValue: string;\n    DKIMTextValue: string;\n    DKIMUpdateStatus: string;\n    DKIMVerified: boolean;\n    ReturnPathDomain: string;\n    ReturnPathDomainCNAMEValue: string;\n    ReturnPathDomainVerified: boolean;\n    SPFHost: string;\n    SPFTextValue: string;\n    SPFVerified: boolean;\n    WeakDKIM: boolean;\n    active: boolean;\n    created_at: string;\n    domain: string;\n    email: string;\n    pm_id: number;\n    updated_at: string;\n    uuid: string;\n}\n\nconst state: EmailDomainSettingsState = {\n    loading: {\n        deletingEmailDomain: false,\n        creatingEmailDomain: false,\n        checkingReturnPathStatus: false,\n        sendingTestEmail: false,\n    },\n    emailDomainSettings: [],\n};\n\nconst getters = {\n    loading: (state: EmailDomainSettingsState) => state.loading,\n    emailDomainSettings: (state: EmailDomainSettingsState) => state.emailDomainSettings,\n};\n\nconst mutations = {\n    [types.SET_COMPANY_LOADING](state: EmailDomainSettingsState, loading: { subject: string, loading: boolean }) {\n        state.loading[loading.subject] = loading.loading;\n    },\n    [types.SET_EMAIL_DOMAIN_SETTINGS](state: EmailDomainSettingsState, domains: EmailDomainSettings[]) {\n        state.emailDomainSettings = domains;\n    },\n};\n\nconst actions = {\n\n    /**\n     * Get the email domains\n     */\n    async fetchEmailDomain({commit}) {\n        try {\n            const responseData = await performApiRequest(commit, 'SET_COMPANY_LOADING', 'company', () => axios.get('/v1/email-domain-settings'));\n            commit('SET_EMAIL_DOMAIN_SETTINGS', responseData.domains);\n        } catch (error) {\n        }\n    },\n\n    /**\n     * Create a email domain\n     */\n    async createEmailDomain({commit}, domain: string) {\n        try {\n            const responseData = await performApiRequest(commit, 'SET_COMPANY_LOADING', 'creatingEmailDomain', () => axios.post('/v1/email-domain-settings', {domain}));\n            commit('SET_EMAIL_DOMAIN_SETTINGS', responseData.domains);\n            EventBus.$emit('create-email-domain-success');\n            EventBus.$emit('SystemMessage', {\n                type: 'success',\n                message: 'Email domain added',\n            });\n        } catch (error) {\n            EventBus.$emit('create-email-domain-error', error?.response?.data?.message || 'There was an error');\n        }\n    },\n\n    async deleteEmailDomain({commit}, domain: EmailDomainSettings) {\n        try {\n            const responseData = await performApiRequest(commit, 'SET_COMPANY_LOADING', 'deletingEmailDomain', () => axios.delete(`/v1/email-domain-settings/${domain.uuid}`));\n            commit('SET_EMAIL_DOMAIN_SETTINGS', responseData.domains);\n            EventBus.$emit('delete-email-domain-success');\n            EventBus.$emit('SystemMessage', {\n                type: 'success',\n                message: 'Email domain deleted',\n            });\n        } catch (error) {\n            EventBus.$emit('create-email-domain-error', error?.response?.data?.message || 'There was an error');\n        }\n    },\n\n    async emailDomainCheckDKIM({commit}, domain: EmailDomainSettings) {\n        try {\n            const responseData = await performApiRequest(commit, 'SET_COMPANY_LOADING', 'deletingEmailDomain', () => axios.get(`/v1/email-domain-settings/${domain.uuid}/check-dkim`));\n            commit('SET_EMAIL_DOMAIN_SETTINGS', responseData.domains);\n        } catch (error) {\n        }\n    },\n\n    async emailDomainCheckReturnPathStatus({commit}, domain: EmailDomainSettings) {\n        try {\n            const responseData = await performApiRequest(commit, 'SET_COMPANY_LOADING', 'checkingReturnPathStatus', () => axios.get(`/v1/email-domain-settings/${domain.uuid}/check-return-path-status`));\n            commit('SET_EMAIL_DOMAIN_SETTINGS', responseData.domains);\n        } catch (error) {\n        }\n    },\n\n    async updateEmailDomainUsername({commit}, domain: EmailDomainSettings) {\n        try {\n            const responseData = await performApiRequest(commit, 'SET_COMPANY_LOADING', 'checkingReturnPathStatus', () => axios.put(`/v1/email-domain-settings/${domain.uuid}`, {email: domain.email}));\n            commit('SET_EMAIL_DOMAIN_SETTINGS', responseData.domains);\n            EventBus.$emit('SystemMessage', {\n                type: 'success',\n                message: 'Email username updated',\n            });\n        } catch (error) {\n            push.error({\n                message: error?.response?.data?.message || 'There was an error',\n            });\n        }\n    },\n\n    async setAsDefaultSendingDomain({commit}, domain: EmailDomainSettings) {\n        if (domain.uuid) {\n            try {\n                const responseData = await performApiRequest(commit, 'SET_COMPANY_LOADING', 'creatingEmailDomain', () => axios.post(`/v1/email-domain-settings/${domain.uuid}/set-default`));\n                commit('SET_EMAIL_DOMAIN_SETTINGS', responseData.domains);\n            } catch (error) {\n                push.error({\n                    message: error?.response?.data?.message || 'There was an error',\n                });\n            }\n        } else {\n\n            try {\n                const responseData = await performApiRequest(commit, 'SET_COMPANY_LOADING', 'creatingEmailDomain', () => axios.post('/v1/email-domain-settings/set-default'));\n                commit('SET_EMAIL_DOMAIN_SETTINGS', responseData.domains);\n            } catch (error) {\n            }\n        }\n    },\n\n    async sendTestEmail({commit}, email: string) {\n        try {\n            await performApiRequest(commit, 'SET_COMPANY_LOADING', 'sendingTestEmail', () => axios.post('/v1/email-domain-settings/send-test-email', {email}));\n            EventBus.$emit('send-test-email-success');\n            EventBus.$emit('SystemMessage', {\n                type: 'success',\n                message: `Test email sent to ${email}`,\n            });\n        } catch (error) {\n            push.error({\n                message: error?.response?.data?.message || 'There was an error',\n            });\n        }\n    },\n};\n\nexport default {\n    namespaced: true,\n    state,\n    mutations,\n    actions,\n    getters,\n};\n","import axios from 'axios';\nimport {EventBus} from '@/plugins/eventBus';\nimport {get} from 'lodash';\nimport {Form} from '@/plugins/FWForms/index';\nimport * as types from '../mutation-types';\nimport {performApiRequest} from '@/store/helpers/vuex-helpers';\nimport {createUrlQueryString} from '@/utils/urls';\nimport {ESignerFieldData, RenterInterface, StoreLoaders} from '@/types';\nimport {TemplateData} from '@/store/modules/document';\n\n\nexport interface EnvelopeRecipientsInterface {\n    completed_at: string;\n    created_at: string;\n    data: ESignerFieldData[];\n    envelope_id_stamped: string;\n    opened_at: string;\n    recipient: string;\n    renter: RenterInterface;\n    sent_at: string;\n    signature: string;\n    signature_style: string;\n    status: string;\n    template_id: string;\n    updated_at: string;\n    uuid: string;\n}\n\nexport interface EnvelopeInterface {\n    attachments: EnvelopeAttachmentInterface[];\n    completed: boolean;\n    completed_at: string;\n    created_at: string;\n    data: ESignerFieldData[];\n    file_path: string;\n    opened: boolean;\n    opened_at: string;\n    order_document: string;\n    pdf_path: string;\n    pdf_url: string;\n    recipient_uuid: string;\n    recipients: EnvelopeRecipientsInterface[];\n    renter: RenterInterface;\n    signature: any;\n    status: string;\n    updated_at: string;\n    white_label: boolean;\n    uuid: string;\n    template?: TemplateData;\n    logs?: {\n        created_at: string;\n        action: string;\n        ip: string;\n        actor: string;\n    }[];\n}\n\nexport interface SaveProgressPayload {\n    uuid: string,\n    recipientId: string,\n    allSigned: boolean,\n    ip: string,\n    data: ESignerFieldData[],\n    sample?: boolean\n}\n\n// AcceptEnvelopePayload extends SaveProgressPayload\nexport interface AcceptEnvelopePayload extends SaveProgressPayload {\n    recipientKey: string\n}\n\nexport interface SaveSignaturePayload {\n    uuid: string,\n    recipientId: string,\n    signature: string,\n    sample?: boolean,\n    mode: 'draw' | 'typed',\n    recipientKey: string\n}\n\nexport interface RemoveAttachmentPayload {\n    attachmentId: string;\n    uuid: string;\n    recipientId: string;\n    sample?: boolean;\n}\n\nexport interface EnvelopeAttachmentInterface {\n    attachment_id: string;\n    document_images: string[];\n    envelope_id: number;\n    name: string;\n    order: number;\n    created_at?: string;\n    updated_at?: string;\n    url?: string;\n    uuid?: string;\n}\n\nexport interface EnvelopePagination {\n    count: number;\n    current_page: number;\n    next_page: string;\n    per_page: number;\n    total: number;\n    total_pages: string;\n    from: number;\n    to: number;\n    last_page: number;\n    total_envelopes: number;\n}\n\ninterface EnvelopeResponse {\n    data: EnvelopeInterface[];\n    meta: EnvelopePagination;\n    links: object;\n}\n\nexport interface EnvelopePage {\n    page: number;\n    pageData: ESignerFieldData[];\n    path: string; // URL to the page image\n}\n\ninterface EsignSessionData {\n    ip: string;\n    windowWidth?: number;\n    contentMainWidth: number;\n    contentMainHeight: number;\n    remainingFieldsCount: number;\n    envelopeId: string;\n    recipientId: string;\n    recipientKey: string;\n    totalFields: number;\n}\n\nexport interface EnvelopeState {\n    envelopesPagination: {\n        current_page: number;\n        from: number;\n        last_page: number;\n        per_page: number;\n        to: number;\n        total: number;\n        total_envelopes: number;\n    },\n    init: boolean;\n    loading: StoreLoaders;\n    document: any[];\n    template: any;\n    envelopes: EnvelopeInterface[];\n    envelope: EnvelopeInterface;\n    envelopeIsReady: boolean;\n    allEnvelopeData: ESignerFieldData[];\n    envelopeForm: Form<object>;\n    envelopeCustomer: any;\n    envelopeDialogs: Record<string, boolean>;\n    envelopesQuery?: {\n        page?: number,\n        itemsPerPage?: number,\n        sortBy?: string[],\n        sortDesc?: boolean[],\n        filter?: {\n            tag_list?: string[],\n            archived?: boolean,\n            search?: string,\n            status?: string[],\n            date?: {\n                gte?: string,\n                lte?: string,\n            }\n        },\n        include?: string,\n    },\n    esignSessionData: EsignSessionData,\n    esignEnvelopeDataCopy: EnvelopePage[],\n}\n\nconst state: EnvelopeState = {\n    init: false,\n    loading: {\n        envelope: false,\n        envelopes: false,\n        saving: false,\n        accepting: false,\n        voiding: false,\n        createEnvelope: false,\n        saveSignature: false,\n        deleteAttachment: false,\n        resetEnvelopeData: false,\n        savingProgress: false,\n        resendEnvelope: false,\n        reminder: false,\n    },\n    document: [],\n    template: {},\n    envelopes: [],\n    envelope: null,\n    envelopeIsReady: false,\n    allEnvelopeData: [],\n    envelopeForm: new Form(),\n    envelopeCustomer: {},\n    envelopeDialogs: {\n        newEnvelope: false,\n    },\n\n    envelopesQuery: {\n        page: 1,\n        itemsPerPage: 25,\n        sortBy: ['created_at'],\n        sortDesc: [true],\n        filter: {\n            tag_list: [],\n            archived: false,\n            search: '',\n            status: [],\n            date: {\n                gte: '',\n                lte: '',\n            }\n        },\n        include: '',\n    },\n    envelopesPagination: {\n        current_page: 0,\n        from: 0,\n        last_page: 0,\n        per_page: 0,\n        to: 0,\n        total: 0,\n        total_envelopes: 0,\n    },\n    esignSessionData: {\n        ip: '',\n        totalFields: 0,\n        windowWidth: window.innerWidth,\n        contentMainWidth: 0,\n        contentMainHeight: 0,\n        remainingFieldsCount: 0,\n        envelopeId: null,\n        recipientId: null,\n        recipientKey: null,\n    },\n    esignEnvelopeDataCopy: [],\n};\n\nconst getters = {\n    init: (state: EnvelopeState) => state.init,\n    envelopeDialogs: (state: EnvelopeState) => state.envelopeDialogs,\n    esignSessionData: (state: EnvelopeState) => state.esignSessionData,\n    esignEnvelopeDataCopy: (state: EnvelopeState) => state.esignEnvelopeDataCopy,\n    loading: (state: EnvelopeState) => state.loading,\n    document: (state: EnvelopeState) => state.document,\n    template: (state: EnvelopeState) => state.template,\n    envelopes: (state: EnvelopeState) => state.envelopes,\n    envelope: (state: EnvelopeState) => state.envelope,\n    envelopeIsReady: (state: EnvelopeState) => state.envelopeIsReady,\n    allEnvelopeData: (state: EnvelopeState) => state.allEnvelopeData,\n    envelopeForm: (state: EnvelopeState) => state.envelopeForm,\n    envelopeCustomer: (state: EnvelopeState) => state.envelopeCustomer,\n    envelopesQuery: (state: EnvelopeState) => state.envelopesQuery,\n    envelopesPagination: (state: EnvelopeState) => state.envelopesPagination,\n};\n\nconst mutations = {\n    [types.SET_ENVELOPE_LOADING](state: EnvelopeState, loading: { subject: string, loading: boolean }) {\n        state.loading[loading.subject] = loading.loading;\n    },\n    [types.SET_ESIGN_SESSION_DATA](state: EnvelopeState, data: { key: string, value: any } | Record<string, any>) {\n        if (typeof data.key === 'string' && data.hasOwnProperty('value')) {\n            // Single key-value pair update\n            if (!state.esignSessionData.hasOwnProperty(data.key)) {\n                console.error(`Key \"${data.key}\" does not exist in esignSessionData.`);\n                return;\n            }\n            state.esignSessionData[data.key] = data.value;\n        } else if (typeof data === 'object') {\n            // Multiple key-value pair updates\n            Object.entries(data).forEach(([key, value]) => {\n                if (!state.esignSessionData.hasOwnProperty(key)) {\n                    console.warn(`Key \"${key}\" does not exist in esignSessionData.`);\n                    return;\n                }\n                state.esignSessionData[key] = value;\n            });\n        } else {\n            console.error('Invalid data format for SET_ESIGN_SESSION_DATA mutation.');\n        }\n    },\n\n    [types.SET_ALL_ENVELOPES](state: EnvelopeState, envelopes: EnvelopeResponse) {\n        console.dir('SET_ALL_ENVELOPES');\n        console.dir(envelopes);\n        state.envelopes = envelopes.data;\n\n        const meta = envelopes?.meta;\n        if (meta) {\n            state.envelopesPagination = {\n                current_page: meta.current_page,\n                from: meta.from,\n                last_page: meta.last_page,\n                per_page: meta.per_page,\n                to: meta.to,\n                total: meta.total,\n                total_envelopes: meta.total_envelopes,\n            }\n        }\n    },\n    [types.SET_ENVELOPE](state: EnvelopeState, envelope: EnvelopeInterface) {\n        state.envelope = envelope;\n        state.envelopeIsReady = true;\n    },\n    [types.SET_ENVELOPE_SIGNATURE](state: EnvelopeState, signature) {\n        state.envelope.signature = signature;\n    },\n    [types.SET_ENVELOPE_CUSTOMER](state: EnvelopeState, customer) {\n        state.envelopeCustomer = customer;\n    },\n    [types.UPDATE_ENVELOPE_FIELD](state: EnvelopeState, data: ESignerFieldData) {\n        console.dir('UPDATE_ENVELOPE_FIELD');\n        console.dir(data);\n\n        const pageIndex = data.page - 1;\n        const pageData = state.esignEnvelopeDataCopy[pageIndex].pageData;\n        const fieldIndex = pageData.findIndex((f: ESignerFieldData) => f.id === data.id);\n\n        if (fieldIndex !== -1) {\n            state.esignEnvelopeDataCopy[pageIndex].pageData[fieldIndex] = {...pageData[fieldIndex], ...data};\n        }\n    },\n    [types.SET_ALL_FIELDS](state: EnvelopeState, payload: { data: ESignerFieldData[], pageImages: string[] }) {\n        console.dir('SET_ALL_FIELDS');\n        console.dir(payload);\n        state.allEnvelopeData = payload.data;\n\n\n        const fields = payload.data.sort((a, b) => a.page - b.page);\n\n        state.esignEnvelopeDataCopy = payload.pageImages.map((p, index) => {\n            const pageNumber = index + 1;\n            let pageData = fields.filter((f) => f.page === pageNumber) || [];\n\n            pageData = pageData.map((d) => {\n                const data = d;\n                const updated = d?.updated;\n                const title = d?.title;\n\n                if (d.type === 'field') {\n                    const filled = get(d, 'filled', false);\n                    return {\n                        ...data,\n                        filled,\n                        text: filled ? data.text : '',\n                        placeholder: data.text,\n                        toolTip: data.text,\n                        title: title || data.text,\n                    };\n                }\n                if (d.type === 'text') {\n                    return {\n                        ...data,\n                        filled: d?.filled || true,\n                        placeholder: data.text,\n                        text: data.readOnly || updated ? data.text : '',\n                        title: title || data.text,\n                    };\n                }\n                if (d.type === 'attachment') {\n                    return {\n                        ...data,\n                        attached: d?.attached || false,\n                        filled: d?.filled || false,\n                        url: d?.url || null,\n                    };\n                }\n                if (d.type === 'checkbox') {\n                    return {\n                        ...data,\n                        toolTip: data.fieldName,\n                    };\n                }\n\n                return {\n                    ...d,\n                    signed: false,\n                    filled: false,\n                    src: '',\n                    toolTip: 'Sign Here',\n                };\n            });\n\n            return {\n                page: pageNumber,\n                path: p,\n                pageData,\n            }\n        });\n    },\n    [types.SET_ENVELOPE_DIALOG](state: EnvelopeState, data: { key: string, value: boolean }) {\n        state.envelopeDialogs[data.key] = data.value;\n    },\n    [types.SET_ENVELOPE_QUERY](state: EnvelopeState, data) {\n        console.dir('SET_ENVELOPE_QUERY');\n        console.dir(data);\n\n        state.envelopesQuery[data.key] = data.value;\n    },\n};\n\nconst actions = {\n\n    /**\n     * Get an envelope\n     * @throws {Error}\n     */\n    async getEnvelopeV2({commit}, {uuid, recipientId, recipientKey, sample}: {\n        uuid: string;\n        recipientId: string;\n        recipientKey?: string;\n        sample?: boolean;\n    }) {\n        const queryParams = new URLSearchParams();\n        if (sample) queryParams.append('sample', 'true');\n        if (recipientKey) queryParams.append('key', recipientKey);\n\n\n        // Determine request path\n        const queryString = queryParams.toString() ? `?${queryParams.toString()}` : '';\n        const requestPath = sample ? `/sample/${queryString}` : `${queryString}`;\n\n        const responseData = await performApiRequest(commit, 'SET_ENVELOPE_LOADING', 'getEnvelope', () => axios.get(`/v1/envelope-v2/${uuid}/${recipientId}${requestPath}`));\n        const envelope = responseData?.envelope ?? [];\n        const envelopeCustomer = responseData?.envelopeCustomer ?? {};\n        const customerData = envelopeCustomer?.data ?? envelope?.data ?? [];\n        console.log(`customerData is array: ${Array.isArray(customerData)}`);\n\n        commit(types.SET_ALL_FIELDS, {\n            data: customerData,\n            pageImages: envelope?.template?.documents?.document_images ?? []\n        });\n        commit(types.SET_ENVELOPE, envelope);\n        commit(types.SET_ENVELOPE_CUSTOMER, envelopeCustomer);\n    },\n\n    /**\n     * Reset an envelope\n     */\n    async getEnvelopes({commit}) {\n        console.dir('getEnvelopes');\n        try {\n            const options = state.envelopesQuery;\n\n            const {sortBy = [], sortDesc = [], filter = {}} = options;\n\n            const queryObject = {\n                'sort': sortBy.length > 0 ? (sortDesc?.[0] ? `-${sortBy[0]}` : sortBy[0]) : null,\n                'filter[tag_list]': filter.tag_list || null,\n                'filter[archived]': filter.archived ?? null,\n                'filter[q]': filter.search || null,\n                'filter[status]': filter.status || null,\n                'page': options.page || 1,\n                'itemsPerPage': options.itemsPerPage || 30,\n                'include': options.include,\n                'filter[date][gte]': filter?.date?.gte || null,\n                'filter[date][lte]': filter?.date?.lte || null,\n            };\n\n            // Convert the object into a query string\n            const query = createUrlQueryString(queryObject, true);\n            console.log('✅ API Query String:', query);\n\n            const responseData = await performApiRequest(commit, 'SET_ENVELOPE_LOADING', 'envelopes', () => axios.get(`/v1/envelope${query}`));\n            commit(types.SET_ALL_ENVELOPES, responseData);\n        } catch (error) {\n        }\n    },\n\n    async createEnvelope({commit}, data) {\n        try {\n            const responseData = await performApiRequest(commit, 'SET_ENVELOPE_LOADING', 'createEnvelope', () => axios.post('/v1/envelope', data));\n            commit(types.SET_ENVELOPE, responseData.envelope);\n            EventBus.$emit('create-envelope-success');\n        } catch (error) {\n            EventBus.$emit('SystemMessage', {\n                type: 'error',\n                message: error?.response?.data?.message || 'There was an error.',\n            });\n        }\n    },\n\n\n    /**\n     * Reset an envelope\n     */\n    resetEnvelopeData({commit}, uuid: string) {\n        commit('SET_ENVELOPE_LOADING', {subject: 'resetEnvelopeData', loading: true});\n\n        axios.post(`/v1/envelope/${uuid}/reset`)\n            .then((response) => {\n                commit(types.SET_ENVELOPE, get(response, 'data.envelope', []));\n            }).catch((e) => {\n            EventBus.$emit('SystemMessage', {\n                type: 'error',\n                message: get(e, 'response.data.message', 'There was an error.'),\n            });\n        }).finally(() => {\n            commit('SET_ENVELOPE_LOADING', {subject: 'resetEnvelopeData', loading: false});\n        });\n    },\n\n    /**\n     * Resend an envelope\n     */\n    resendEnvelope({commit}, {uuid, recipients}) {\n        commit('SET_ENVELOPE_LOADING', {subject: 'resendEnvelope', loading: true});\n\n        axios.post(`/v1/envelope/${uuid}/resend`, {recipients})\n            .then(() => {\n                EventBus.$emit('SystemMessage', {\n                    type: 'success',\n                    message: 'Resend successful',\n                });\n            }).catch((e) => {\n            EventBus.$emit('SystemMessage', {\n                type: 'error',\n                message: get(e, 'response.data.message', 'There was an error.'),\n            });\n        }).finally(() => {\n            commit('SET_ENVELOPE_LOADING', {subject: 'resendEnvelope', loading: false});\n        });\n    },\n\n\n    /**\n     * Save an envelope customer signature\n     */\n    async saveSignature({state, commit}, data: SaveSignaturePayload) {\n\n        let queryString = '';\n        if (get(data, 'sample')) {\n            queryString = '/sample';\n        }\n\n        try {\n            const responseData = await performApiRequest(commit, 'SET_ENVELOPE_LOADING', 'saveSignature', () => axios.post(`/v1/envelope/${data.uuid}/${data.recipientId}/signature${queryString}`, data));\n            EventBus.$emit('saved-signature-success', responseData);\n            commit(types.SET_ENVELOPE_SIGNATURE, responseData.envelope.signature || '');\n            commit(types.SET_ENVELOPE_CUSTOMER, responseData.customer);\n\n            state.envelopeForm.finishProcessing();\n        } catch (error) {\n        }\n    },\n\n    async removeAttachment({commit}, data: RemoveAttachmentPayload) {\n        let queryString = '';\n        if (get(data, 'sample')) {\n            queryString = '/sample';\n        }\n        return await performApiRequest(commit, 'SET_ENVELOPE_LOADING', 'deleteAttachment', () => axios.delete(`/v1/envelope/${data.uuid}/${data.recipientId}/attachment/${data.attachmentId}${queryString}`));\n    },\n\n    /**\n     * Saves the progress of the e-sign document\n     */\n    async saveProgress({commit}, data: SaveProgressPayload) {\n        return await performApiRequest(commit, 'SET_ENVELOPE_LOADING', 'savingProgress', () => axios.put(`/v1/envelope/${data.uuid}/${data.recipientId}`, data));\n    },\n\n    /**\n     * Prints the progress of the e-sign document\n     * Handy for signing on paper\n     */\n    printProgress({commit}, data) {\n        commit('SET_ENVELOPE_LOADING', {subject: 'savingProgress', loading: true});\n        axios.post(`/v1/envelope/${data.uuid}/${data.recipientId}/print`, data)\n            .then((response) => {\n                EventBus.$emit('esign-progress-printed-success', response);\n            }).catch(() => {\n        }).finally(() => {\n            commit('SET_ENVELOPE_LOADING', {subject: 'savingProgress', loading: false});\n        });\n    },\n\n\n    /**\n     * Accept agreement and sign\n     * @throws {Error}\n     */\n    async acceptAndSignV2({commit}, data: AcceptEnvelopePayload) {\n        const responseData = await performApiRequest(commit, 'SET_ENVELOPE_LOADING', 'accepting', () => axios.post(`/v1/envelope-v2/${data.uuid}/${data.recipientId}/accept`, data));\n        commit(types.SET_ENVELOPE, responseData.envelope);\n    },\n\n    async voidEnvelope({state, commit}, envelope: EnvelopeInterface) {\n        try {\n            await performApiRequest(commit, 'SET_ENVELOPE_LOADING', 'voiding', () => axios.post(`/v1/envelope/${envelope.uuid}/void`));\n            EventBus.$emit('SystemMessage', {\n                type: 'success',\n                message: 'Envelope voided successfully!',\n            });\n        } catch (error) {\n            state.envelopeForm.errors.set(error?.response?.data?.errors || []);\n        }\n    },\n\n\n    async downloadProgress({state, commit}, envelope: EnvelopeInterface) {\n        try {\n            const responseData = await performApiRequest(commit, 'SET_ENVELOPE_LOADING', 'downloading-progress', () => axios.post(`/v1/envelope/${envelope.uuid}/download-progress`));\n            window.open(responseData.url, '_blank');\n        } catch (error) {\n            state.envelopeForm.errors.set(error?.response?.data?.errors || []);\n        }\n    },\n\n    sendReminder({state, commit}, data: { envelope: EnvelopeInterface, email: string }) {\n        commit('SET_ENVELOPE_LOADING', {subject: 'reminder', loading: true});\n\n        axios.post(`/v1/envelope/${data.envelope.uuid}/reminder`, {email: data.email})\n            .then((response) => {\n                EventBus.$emit('envelope-reminder-success', get(response, 'data.envelope', []));\n                EventBus.$emit('SystemMessage', {\n                    type: 'success',\n                    message: 'Envelope reminder sent successfully!',\n                });\n            }).catch((e) => {\n            state.envelopeForm.errors.set(get(e, 'response.data.errors', []));\n        }).finally(() => {\n            commit('SET_ENVELOPE_LOADING', {subject: 'reminder', loading: false});\n        });\n    },\n};\n\nexport default {\n    namespaced: true,\n    state,\n    mutations,\n    actions,\n    getters,\n};\n","import * as types from '../mutation-types';\nimport axios from 'axios';\nimport { createUrlQueryString } from '@/utils/urls';\nimport { performApiRequest } from \"@/store/helpers/vuex-helpers\";\n\n\ntype FilePayload = {\n    objectType: string,\n    objectId: string,\n    page?: number,\n}\n\ntype File = {\n  created_at: string,\n  disk: string,\n  extension: string,\n  hash: string,\n  mime_type: string,\n  name: string,\n  object_id: string,\n  object_type: string,\n  original_name: string,\n  path: string,\n  size: string,\n  updated_at: string,\n  uuid: string,\n};\n\ntype Pagination = {\n  current_page: number,\n  first_page_url: string,\n  from: number,\n  last_page: number,\n  last_page_url: string,\n  next_page_url: string,\n  path: string,\n  per_page: number,\n  prev_page_url: string,\n  to: number,\n  total: number,\n}\n\nexport interface FilesState {\n  loading: Record<string, boolean>,\n  files: File[],\n  pagination: Pagination | null,\n}\n\n// state\nconst state: FilesState = {\n  loading: {\n    getFiles: false,\n    deleteFiles: false,\n  },\n  files: [],\n  pagination: null,\n};\n\n// getters\nconst getters = {\n  loading: (state: FilesState) => state.loading,\n  files: (state: FilesState) => state.files,\n  pagination: (state: FilesState) => state.pagination,\n};\n\n// mutations\nconst mutations = {\n  [types.SET_FILES_LOADING](state: FilesState, loading: { subject: string, loading: boolean }) {\n    state.loading[loading.subject] = loading.loading;\n  },\n  [types.SET_FILES](state: FilesState, files: File[]) {\n    state.files = files;\n  },\n  [types.SET_FILES_PAGINATION](state: FilesState, pagination) {\n    // Cloning pagination object\n    const newPagination = { ...pagination };\n    delete newPagination.data;\n    delete newPagination.links;\n\n    state.pagination = newPagination;\n  },\n\n  [types.MERGE_FILES](state: FilesState, files: File[]): void {\n    // merge unique files and order by created_at\n    const uniqueFiles = new Set<string>();\n    const mergedFiles = [...state.files, ...files].filter(file => {\n      const isUnique = !uniqueFiles.has(file.uuid);\n      uniqueFiles.add(file.uuid);\n      return isUnique;\n    });\n\n    mergedFiles.sort((a, b) => Date.parse(b.created_at) - Date.parse(a.created_at));\n    state.files = mergedFiles;\n  },\n};\n\n// actions\nconst actions = {\n\n  /**\n   * Get company files\n   */\n  async getFiles({ commit }, payload: FilePayload) {\n    try {\n      const queryString = createUrlQueryString(payload);\n\n      const responseData = await performApiRequest(commit, 'SET_FILES_LOADING','getFiles', () => axios.get(`/v1/company-files${queryString}`));\n      commit('MERGE_FILES', responseData.data);\n      commit('SET_FILES_PAGINATION', responseData);\n    } catch (error) {\n    }\n  },\n\n  /**\n   * Delete a company file\n   */\n  async deleteFile({ commit }, uuid: string) {\n    try {\n      await performApiRequest(commit, 'SET_FILES_LOADING','deleteFiles', () => axios.delete(`/v1/company-files/${uuid}`));\n      commit('SET_FILES', state.files.filter((file) => file.uuid !== uuid));\n    } catch (error) {\n    }\n  },\n};\n\n\nexport default {\n  namespaced: true,\n  state,\n  mutations,\n  actions,\n  getters,\n};\n","import axios from 'axios';\nimport * as types from '../mutation-types';\nimport {TenantActionItem, TenantBranch} from '@/types';\nimport {performApiRequest} from '@/store/helpers/vuex-helpers';\nimport Form from '@/plugins/FWForms';\nimport {push} from 'notivue'\n\nexport interface FleetState {\n    loading: Record<string, boolean>,\n    branches: TenantBranch[],\n    branch: TenantBranch,\n    actionItems: TenantActionItem[],\n    actionItem: TenantActionItem\n    actionItemDeleted: boolean\n    newlyCreatedActionItem: TenantActionItem\n    fleetForm: Form<any>,\n}\n\nconst state: FleetState = {\n    loading: {\n        branches: false,\n        createBranch: false,\n        fetchBranch: false,\n        updateBranch: false,\n        actionItem: false,\n        actionItems: false,\n    },\n    fleetForm: new Form(),\n    branches: [],\n    branch: null,\n    actionItems: [],\n    actionItem: null,\n    newlyCreatedActionItem: null,\n    actionItemDeleted: false,\n};\n\nconst getters = {\n    loading: (state: FleetState) => state.loading,\n    fleetForm: (state: FleetState) => state.fleetForm,\n    branches: (state: FleetState) => state.branches,\n    branch: (state: FleetState) => state.branch,\n    actionItems: (state: FleetState) => state.actionItems,\n    actionItem: (state: FleetState) => state.actionItem,\n    actionItemDeleted: (state: FleetState) => state.actionItemDeleted,\n    newlyCreatedActionItem: (state: FleetState) => state.newlyCreatedActionItem,\n};\n\nconst mutations = {\n    [types.SET_COMPANY_BRANCHES_LOADING](state: FleetState, loading: { subject: string, loading: boolean }) {\n        state.loading[loading.subject] = loading.loading;\n    },\n    [types.SET_COMPANY_BRANCHES](state: FleetState, branches: TenantBranch[]) {\n        state.branches = branches;\n    },\n    [types.SET_COMPANY_BRANCH](state: FleetState, branch: TenantBranch) {\n        state.branch = branch;\n    },\n    [types.SET_ACTION_ITEMS](state: FleetState, items: TenantActionItem[]) {\n        state.actionItems = items;\n    },\n    [types.SET_ACTION_ITEM](state: FleetState, item: TenantActionItem) {\n        state.actionItem = item;\n    },\n    [types.ACTION_ITEM_CREATED](state: FleetState, item: TenantActionItem) {\n        state.newlyCreatedActionItem = item;\n    },\n    [types.ACTION_ITEM_DELETED](state: FleetState, value: boolean) {\n        state.actionItemDeleted = value;\n\n        // Reset the value after 2 seconds\n        setTimeout(() => {\n            state.actionItemDeleted = false;\n        }, 2000);\n    },\n    [types.SET_FLEET_FORM_ERROR](state: FleetState, error: string | Record<string, string[]>) {\n        state.fleetForm.errors.set(error);\n    },\n    [types.CLEAR_FLEET_FORM_ERRORS](state: FleetState, form_field: string | null = null) {\n        if (form_field === null || form_field === undefined) {\n            state.fleetForm.errors.clear();\n        } else {\n            state.fleetForm.errors.clear(form_field);\n        }\n    },\n};\n\nconst actions = {\n\n    /**\n     * Get fleet branches.\n     */\n    async getFleetBranches({commit}) {\n        const responseData = await performApiRequest(commit, 'SET_COMPANY_BRANCHES_LOADING', 'branches', () => axios.get('/v1/branches'));\n        commit(types.SET_COMPANY_BRANCHES, responseData.branches);\n    },\n\n\n    /**\n     * Create a fleet branch.\n     */\n    async createBranch({commit}, branch: TenantBranch) {\n        try {\n            const responseData = await performApiRequest(commit, 'SET_COMPANY_BRANCHES_LOADING', 'createBranch', () => axios.post('/v1/branches', branch));\n            commit('SET_COMPANY_BRANCHES', responseData.branches);\n        } catch (error) {\n            throw error;\n        }\n    },\n\n\n    /**\n     * Delete a fleet branch.\n     */\n    async deleteBranch({commit}, uuid: string) {\n        try {\n            const responseData = await performApiRequest(commit, 'SET_COMPANY_BRANCHES_LOADING', 'createBranch', () => axios.delete(`/v1/branches/${uuid}`));\n            commit('SET_COMPANY_BRANCHES', responseData.branches);\n        } catch (error) {\n            push.error({\n                message: error?.response?.data?.message || 'Failed to delete branch',\n            });\n            throw error;\n        }\n    },\n\n    /**\n     * Get a fleet branch.\n     */\n    async getFleetBranch({commit}, uuid: string) {\n        try {\n            const responseData = await performApiRequest(commit, 'SET_COMPANY_BRANCHES_LOADING', 'fetchBranch', () => axios.get(`/v1/branches/${uuid}`));\n            commit('SET_COMPANY_BRANCH', responseData.branch);\n        } catch (error) {\n        }\n    },\n\n    /**\n     * Delete a fleet branch.\n     */\n    async updateFleetBranch({commit}, branch: TenantBranch) {\n        try {\n            const responseData = await performApiRequest(commit, 'SET_COMPANY_BRANCHES_LOADING', 'updateBranch', () => axios.put(`/v1/branches/${branch.uuid}`, branch));\n            commit('SET_COMPANY_BRANCH', responseData.branch);\n            push.success({\n                message: 'Branch saved successfully',\n            });\n            return responseData.branch;\n        } catch (error) {\n            push.error({\n                message: 'Failed to save branch',\n            });\n        }\n    },\n\n\n    /**\n     * Get action items.\n     *\n     */\n    async getActionItems({commit}) {\n        try {\n            const responseData = await performApiRequest(commit, 'SET_COMPANY_BRANCHES_LOADING', 'actionItems', () => axios.get('/v1/action-items'));\n            commit('SET_ACTION_ITEMS', responseData.actionItems);\n        } catch (error) {\n        }\n    },\n\n\n    /**\n     * Get action items.\n     */\n    async getActionItem({commit}, uuid: string) {\n        try {\n            const responseData = await performApiRequest(commit, 'SET_COMPANY_BRANCHES_LOADING', 'actionItems', () => axios.get(`/v1/action-items/${uuid}`));\n            commit('SET_ACTION_ITEM', responseData.actionItem);\n        } catch (error) {\n        }\n    },\n\n    /**\n     * Create action item.\n     */\n    async createActionItem({commit}, actionItem: TenantActionItem) {\n        try {\n            const responseData = await performApiRequest(commit, 'SET_COMPANY_BRANCHES_LOADING', 'actionItem', () => axios.post('/v1/action-items', actionItem));\n            commit(types.ACTION_ITEM_CREATED, responseData.actionItem);\n            push.success({\n                message: 'Action Item created successfully',\n            });\n        } catch (error) {\n            commit(types.SET_FLEET_FORM_ERROR, error.response.data.errors)\n        }\n    },\n\n    /**\n     * Update action item.\n     */\n    async updateActionItem({commit}, actionItem: TenantActionItem) {\n        try {\n            await performApiRequest(commit, 'SET_COMPANY_BRANCHES_LOADING', 'actionItems', () => axios.put(`/v1/action-items/${actionItem.uuid}`, actionItem));\n            push.success({\n                message: 'Action Item saved successfully',\n            });\n        } catch (error) {\n            commit(types.SET_FLEET_FORM_ERROR, error.response.data.errors)\n        }\n    },\n\n    /**\n     * Delete action item.\n     */\n    async deleteActionItem({commit}, actionItem: TenantActionItem) {\n        try {\n            await performApiRequest(commit, 'SET_COMPANY_BRANCHES_LOADING', 'actionItem', () => axios.delete(`/v1/action-items/${actionItem.uuid}`));\n            commit(types.ACTION_ITEM_DELETED, true);\n            push.success({\n                message: 'Action Item deleted successfully',\n            });\n        } catch (error) {\n        }\n    },\n};\n\nexport default {\n    namespaced: true,\n    state,\n    mutations,\n    actions,\n    getters,\n};\n","import axios from 'axios';\nimport {findIndex, get} from 'lodash';\nimport {EventBus} from '@/plugins/eventBus';\nimport {StorageService} from '@/services/storage.service';\nimport * as types from '../mutation-types';\nimport {Connection} from '@/types';\nimport {performApiRequest} from '@/store/helpers/vuex-helpers';\n\ntype GetaroundConnection = Connection & {\n    gaid?: string;\n}\n\nexport interface GetaroundState {\n    init: boolean;\n    loading: Record<string, boolean>;\n    importedVehicles: any[];\n    vehicles: any[];\n    currentWorkingTrip: any;\n    trips: any[];\n    reservation: any;\n    reservationReceipt: any;\n    connections: GetaroundConnection[];\n}\n\nconst state: GetaroundState = {\n    init: false,\n\n    loading: {\n        pulse: false,\n        delete: false,\n        toggle: false,\n        vehicles: false,\n        vehicleHistory: false,\n        importedVehicles: false,\n        receipt: false,\n    },\n\n    importedVehicles: [],\n    vehicles: [],\n\n    currentWorkingTrip: {},\n\n    trips: [],\n    reservation: {},\n    reservationReceipt: {},\n\n    connections: [],\n};\n\nconst getters = {\n    loading: (state: GetaroundState) => state.loading,\n    init: (state: GetaroundState) => state.init,\n    trips: (state: GetaroundState) => state.trips,\n    reservation: (state: GetaroundState) => state.reservation,\n    reservationReceipt: (state: GetaroundState) => state.reservationReceipt,\n    vehicles: (state: GetaroundState) => state.vehicles,\n    importedVehicles: (state: GetaroundState) => state.importedVehicles,\n    currentWorkingTrip: (state: GetaroundState) => state.currentWorkingTrip,\n    connections: (state: GetaroundState) => state.connections,\n};\n\nconst mutations = {\n    [types.SET_GETAROUND_INIT](state: GetaroundState, init) {\n        state.init = init;\n    },\n    [types.SET_GETAROUND_LOADING](state: GetaroundState, loading) {\n        state.loading[loading.subject] = loading.loading;\n    },\n    [types.SET_GETAROUND_CONNECTIONS](state: GetaroundState, connections) {\n        state.connections = connections;\n    },\n    [types.SET_GETAROUND_VEHICLES](state: GetaroundState, vehicles) {\n        state.vehicles = vehicles;\n    },\n    [types.SET_GETAROUND_TRIPS](state: GetaroundState, trips) {\n        state.trips = trips;\n    },\n    [types.SET_GETAROUND_RESERVATION](state: GetaroundState, reservation) {\n        state.reservation = reservation;\n    },\n    [types.SET_GETAROUND_RESERVATION_RECEIPT](state: GetaroundState, receipt) {\n        state.reservationReceipt = receipt;\n    },\n    [types.SET_ALL_IMPORTED_GETAROUND_VEHICLES](state: GetaroundState, vehicles) {\n        state.importedVehicles = vehicles;\n    },\n};\n\nconst actions = {\n\n    getaroundPulse({state: GetaroundState, commit, rootGetters}, gaid: string) {\n        commit('SET_GETAROUND_LOADING', {subject: 'pulse', loading: true});\n\n        let connIndex = findIndex(state.connections, (c) => gaid === c.uuid);\n\n        if (connIndex === -1) {\n            connIndex = state.connections.push({\n                gaid,\n                loading: true,\n                connected: true,\n                active: true,\n                email: '',\n                provider: 'getaround',\n            });\n            connIndex--;\n            console.dir(connIndex);\n        }\n\n        state.connections[connIndex].loading = true;\n        state.connections[connIndex].connected = false;\n        axios.get(`/v1/company/${rootGetters['company/company'].uuid}/connections/getaround/${gaid}/pulse`)\n            .then(() => {\n                state.connections[connIndex].connected = true;\n            }).catch(() => {\n            state.connections[connIndex].connected = false;\n        }).finally(() => {\n            state.connections[connIndex].loading = false;\n            commit('SET_GETAROUND_LOADING', {subject: 'pulse', loading: false});\n        });\n    },\n\n    async toggleGetaroundActive({commit}, ga) {\n        try {\n            const responseData = await performApiRequest(commit, 'SET_GETAROUND_LOADING', 'toggle', () => axios.put(`/v1/connections/getaround/${ga.uuid}/toggle`));\n            commit('SET_GETAROUND_CONNECTIONS', responseData?.company?.connections?.getaround);\n            EventBus.$emit('SystemMessage', {\n                type: 'success',\n                message: 'Getaround connections toggled successfully!',\n            });\n        } catch (error) {\n            console.dir(error);\n        }\n    },\n    refreshToken({commit}, ga) {\n        commit('SET_GETAROUND_LOADING', {subject: 'refresh-token', loading: true});\n        axios.post(`/v1/company/${StorageService.getCompanyUuid()}/connections/getaround/${ga.uuid}/refresh-token`)\n            .then(() => {\n                EventBus.$emit('SystemMessage', {\n                    type: 'success',\n                    message: 'Getaround token refreshed successfully!',\n                });\n            }).catch((e) => {\n            console.dir(e);\n        }).finally(() => {\n            commit('SET_GETAROUND_LOADING', {subject: 'refresh-token', loading: false});\n        });\n    },\n\n    disconnectGetaroundCommit({commit, rootGetters}, ga) {\n        commit('SET_GETAROUND_LOADING', {subject: 'delete', loading: true});\n        axios.delete(`/v1/company/${rootGetters['company/company'].uuid}/connections/getaround/${ga.uuid}`)\n            .then((response) => {\n                commit('SET_GETAROUND_CONNECTIONS', get(response, 'data.company.connections.getaround'));\n                EventBus.$emit('remove-getaround-connection-success');\n                EventBus.$emit('SystemMessage', {\n                    type: 'success',\n                    message: 'Getaround connections removed successfully!',\n                });\n            }).catch((e) => {\n            console.dir(e);\n        }).finally(() => {\n            commit('SET_GETAROUND_LOADING', {subject: 'delete', loading: false});\n        });\n    },\n\n    fetchBookings({commit, rootGetters}, ga) {\n        commit('SET_GETAROUND_LOADING', {subject: 'vehicleHistory', loading: true});\n        axios.get(`/v1/company/${StorageService.getCompanyUuid()}/connections/getaround/${ga.uuid}/reservations`)\n            .then((response) => {\n                commit('SET_GETAROUND_TRIPS', get(response, 'data.trips'));\n            }).catch((e) => {\n            console.dir(e);\n        }).finally(() => {\n            commit('SET_GETAROUND_LOADING', {subject: 'vehicleHistory', loading: false});\n        });\n    },\n\n    fetchOneReservation({commit}, {ga, reservation_id}) {\n        commit('SET_GETAROUND_LOADING', {subject: 'vehicleHistory', loading: true});\n        axios.get(`/v1/company/${StorageService.getCompanyUuid()}/connections/getaround/${ga.uuid}/reservations/${reservation_id}`)\n            .then((response) => {\n                commit('SET_GETAROUND_RESERVATION', get(response, 'data.trip'));\n            }).catch((e) => {\n            console.dir(e);\n        }).finally(() => {\n            commit('SET_GETAROUND_LOADING', {subject: 'vehicleHistory', loading: false});\n        });\n    },\n    fetchOneReservationReceipt({commit}, {ga, reservation_id}) {\n        commit('SET_GETAROUND_LOADING', {subject: 'receipt', loading: true});\n        axios.get(`/v1/company/${StorageService.getCompanyUuid()}/connections/getaround/${ga.uuid}/reservations/${reservation_id}/receipt`)\n            .then((response) => {\n                commit('SET_GETAROUND_RESERVATION_RECEIPT', get(response, 'data.receipt'));\n            }).catch((e) => {\n            console.dir(e);\n        }).finally(() => {\n            commit('SET_GETAROUND_LOADING', {subject: 'receipt', loading: false});\n        });\n    },\n\n    fetchVehicles({commit, rootGetters}, ga) {\n        commit('SET_GETAROUND_LOADING', {subject: 'vehicles', loading: true});\n        axios.get(`/v1/company/${rootGetters['company/company'].uuid}/connections/getaround/${ga.uuid}/vehicles`)\n            .then((response) => {\n                commit('SET_GETAROUND_VEHICLES', get(response, 'data.vehicles'));\n                commit('SET_ALL_IMPORTED_GETAROUND_VEHICLES', get(response, 'data.vehicles'));\n            }).catch((e) => {\n            console.dir(e);\n        }).finally(() => {\n            commit('SET_GETAROUND_LOADING', {subject: 'vehicles', loading: false});\n        });\n    },\n\n    importGetaroundListings({commit}, {listings, ga}) {\n        commit('SET_GETAROUND_LOADING', {subject: 'import_listings', loading: true});\n        EventBus.$emit('save-imported-listings-started', 'getaround');\n\n        axios.post(`/v1/company/${StorageService.getCompanyUuid()}/connections/getaround/${ga.uuid}/import`, {listings})\n            .then((response) => {\n                commit('company/SET_COMPANY', response.data.company, {root: true});\n                commit('SET_ALL_LISTINGS', get(response.data.company, 'listings', []));\n                EventBus.$emit('save-getaround-imported-listings-success');\n                EventBus.$emit('SystemMessage', {\n                    type: 'success',\n                    message: 'Getaround listing Import success',\n                });\n            }).catch(() => {\n        }).finally(() => {\n            EventBus.$emit('save-turo-imported-listings-success');\n            commit('SET_GETAROUND_LOADING', {subject: 'import_listings', loading: false});\n        });\n    },\n\n    fetchImportedVehicles({commit}) {\n        commit('SET_GETAROUND_LOADING', {subject: 'importedVehicles', loading: true});\n        axios.get('/v1/imported-getaround-vehicles')\n            .then((response) => {\n                commit('SET_ALL_IMPORTED_GETAROUND_VEHICLES', response.data.vehicles);\n            }).catch(() => {\n        }).finally(() => {\n            commit('SET_GETAROUND_LOADING', {subject: 'importedVehicles', loading: false});\n        });\n    },\n};\n\nexport default {\n    namespaced: true,\n    state,\n    mutations,\n    actions,\n    getters,\n};\n","import axios from 'axios';\nimport {EventBus} from '@/plugins/eventBus';\nimport {get} from 'lodash';\nimport {Form} from '@/plugins/FWForms/index';\nimport * as types from '../mutation-types';\n\nexport interface HqRentalsState {\n    loading: Record<string, boolean>;\n    form: Form<any>;\n    connections: any[];\n    listings: any[];\n    bookings: any[];\n    contacts: any[];\n}\n\nconst state: HqRentalsState = {\n    loading: {\n        login: false,\n        test: false,\n        listings: false,\n        bookings: false,\n        contacts: false,\n        meta: false,\n        settings: false,\n    },\n    form: new Form(),\n    connections: [],\n    listings: [],\n    bookings: [],\n    contacts: [],\n};\n\nconst getters = {\n    form: state => state.form,\n    connections: state => state.connections,\n    loading: state => state.loading,\n    listings: state => state.listings,\n    bookings: state => state.bookings,\n    contacts: state => state.contacts,\n};\n\nconst mutations = {\n    [types.SET_HQRENTALS_LOADING](state, loading) {\n        state.loading[loading.subject] = loading.loading;\n    },\n    [types.SET_HQRENTALS_CONNECTIONS](state, connections) {\n        state.connections = connections;\n    },\n    [types.SET_HQRENTALS_LISTINGS](state, listings) {\n        state.listings = listings;\n    },\n    [types.SET_HQRENTALS_BOOKINGS](state, bookings) {\n        state.bookings = bookings;\n    },\n    [types.SET_HQRENTALS_CONTACTS](state, contacts) {\n        state.contacts = contacts;\n    },\n};\n\nconst actions = {\n\n    login({commit, rootGetters}, credentials) {\n        commit('SET_HQRENTALS_LOADING', {subject: 'login', loading: true});\n\n        axios.post(`/v1/company/${rootGetters['company/company'].uuid}/connections/hq-rentals`, credentials)\n            .then((response) => {\n                EventBus.$emit('hqrentals-login-successful', get(response, 'data.provider'));\n                EventBus.$emit('SystemMessage', {\n                    type: 'success',\n                    message: 'HQ Rentals logged in successfully!',\n                });\n            }).catch(() => {\n        }).finally(() => {\n            commit('SET_HQRENTALS_LOADING', {subject: 'login', loading: false});\n        });\n    },\n\n    connect({commit, rootGetters}, data) {\n        commit('SET_HQRENTALS_LOADING', {subject: 'login', loading: true});\n\n        axios.post(`/v1/company/${rootGetters['company/company'].uuid}/connections/hq-rentals/connect`, data)\n            .then((response) => {\n                EventBus.$emit('hqrentals-connection-successful', get(response, 'data.providers'));\n                EventBus.$emit('SystemMessage', {\n                    type: 'success',\n                    message: 'HQ Rentals connection connected successfully!',\n                });\n            }).catch(() => {\n        }).finally(() => {\n            commit('SET_HQRENTALS_LOADING', {subject: 'login', loading: false});\n        });\n    },\n\n    setMeta({commit, rootGetters}, provider) {\n        commit('SET_HQRENTALS_LOADING', {subject: 'meta', loading: true});\n\n        axios.post(`/v1/company/${rootGetters['company/company'].uuid}/connections/hq-rentals/${provider.uuid}/set-meta`)\n            .then((response) => {\n                EventBus.$emit('hqrentals-set-meta-successful', get(response, 'data.fields'));\n            })\n            .catch(() => {\n            })\n            .finally(() => {\n                commit('SET_HQRENTALS_LOADING', {subject: 'meta', loading: false});\n            });\n    },\n\n    saveSettings({commit, rootGetters}, data) {\n        commit('SET_HQRENTALS_LOADING', {subject: 'settings', loading: true});\n\n        axios.put(`/v1/company/${rootGetters['company/company'].uuid}/connections/hq-rentals/${data.provider_uuid}/settings`, data)\n            .then(() => {\n                EventBus.$emit('SystemMessage', {\n                    type: 'success',\n                    message: 'HQ Rentals settings saved successfully!',\n                });\n            })\n            .catch(() => {\n            })\n            .finally(() => {\n                commit('SET_HQRENTALS_LOADING', {subject: 'settings', loading: false});\n            });\n    },\n\n    testConnection({commit, rootGetters}, provider) {\n        commit('SET_HQRENTALS_LOADING', {subject: 'test', loading: true});\n\n        axios.post(`/v1/connections/hq-rentals/${provider.uuid}/test-connection`)\n            .then(() => {\n                EventBus.$emit('SystemMessage', {\n                    type: 'success',\n                    message: 'HQ Rentals connection connected successfully!',\n                });\n            }).catch((e) => {\n            EventBus.$emit('hqrentals-test-connection-failed');\n        }).finally(() => {\n            commit('SET_HQRENTALS_LOADING', {subject: 'test', loading: false});\n        });\n    },\n\n    fetchListings({commit, rootGetters}, provider_uuid) {\n        commit('SET_HQRENTALS_LOADING', {subject: 'listings', loading: true});\n\n        axios.get(`/v1/company/${rootGetters['company/company'].uuid}/connections/hq-rentals/${provider_uuid}/listings`)\n            .then((response) => {\n                commit('SET_HQRENTALS_LISTINGS', get(response, 'data.listings'));\n                EventBus.$emit('SystemMessage', {\n                    type: 'success',\n                    message: 'HQ Rentals connection connected successfully!',\n                });\n            }).catch(() => {\n        }).finally(() => {\n            commit('SET_HQRENTALS_LOADING', {subject: 'listings', loading: false});\n        });\n    },\n\n    fetchBookings({commit, rootGetters}, provider_uuid) {\n        commit('SET_HQRENTALS_LOADING', {subject: 'bookings', loading: true});\n\n        axios.get(`/v1/company/${rootGetters['company/company'].uuid}/connections/hq-rentals/${provider_uuid}/bookings`)\n            .then((response) => {\n                commit('SET_HQRENTALS_BOOKINGS', get(response, 'data.bookings'));\n            }).catch(() => {\n        }).finally(() => {\n            commit('SET_HQRENTALS_LOADING', {subject: 'bookings', loading: false});\n        });\n    },\n\n    fetchContacts({commit, rootGetters}, provider_uuid) {\n        commit('SET_HQRENTALS_LOADING', {subject: 'contacts', loading: true});\n\n        axios.get(`/v1/company/${rootGetters['company/company'].uuid}/connections/hq-rentals/${provider_uuid}/contacts`)\n            .then((response) => {\n                commit('SET_HQRENTALS_CONTACTS', get(response, 'data.contacts'));\n            }).catch(() => {\n        }).finally(() => {\n            commit('SET_HQRENTALS_LOADING', {subject: 'contacts', loading: false});\n        });\n    },\n};\n\nexport default {\n    namespaced: true,\n    state,\n    mutations,\n    actions,\n    getters,\n};\n","import {EventBus} from '@/plugins/eventBus';\nimport {Form} from '@/plugins/FWForms/index';\nimport axios from 'axios';\nimport * as types from '@/store/mutation-types';\nimport {StorageService} from '@/services/storage.service';\nimport {createUrlQueryString} from '@/utils/urls';\nimport {performApiRequest} from '@/store/helpers/vuex-helpers';\nimport {Module} from 'vuex';\nimport {RootState} from '@/types/RootState';\nimport {push} from 'notivue';\n\ntype PaymentMethod = {\n    billing_details: {\n        address: {\n            city: string | null,\n            country: string | null,\n            line1: string | null,\n            line2: string | null,\n            postal_code: string | null,\n            state: string | null,\n        },\n        email: string | null,\n        name: string | null,\n        phone: string | null,\n    },\n    brand: string,\n    card: {\n        brand: string,\n        checks: {\n            address_line1_check: string,\n            address_postal_code_check: string,\n            cvc_check: string,\n        },\n        country: string,\n        exp_month: number,\n        exp_year: number,\n        fingerprint: string,\n        funding: string,\n        generated_from: string,\n        last4: string,\n        networks: {\n            available: Array<string>,\n            preferred: string,\n        },\n        three_d_secure_usage: {\n            supported: boolean,\n        },\n        wallet: string,\n    },\n    exp_month: number,\n    exp_year: number,\n    funding: string,\n    id: string,\n    is_default: boolean,\n    last4: string,\n    name: string,\n}\n\nexport interface StripePaymentIntent {\n    amount: number,\n    amount_details: any,\n    automatic_payment_methods: any,\n    canceled_at: any,\n    cancellation_reason: any,\n    capture_method: string,\n    client_secret: string,\n    confirmation_method: string,\n    created: number,\n    currency: string,\n    description: string,\n    id: string,\n    last_payment_error: any,\n    livemode: boolean,\n    next_action: any,\n    object: string,\n    payment_method: string,\n    payment_method_configuration_details: any,\n    payment_method_types: Array<string>,\n    processing: any,\n    receipt_email: any,\n    setup_future_usage: string,\n    shipping: any,\n    source: any,\n    status: string,\n}\n\nexport interface PaymentsState {\n    loading: Record<string, boolean>,\n    payments: Array<any>,\n    payment: any,\n    newPayment: {\n        method: string,\n        amount: number,\n        date: string,\n        security_deposit: number,\n        keep_deposit_amount: number,\n        keep_deposit_reason: string,\n        description: string,\n        transaction_type: string,\n        payment_type: string,\n        newCard: boolean,\n        nameOnCard: string,\n        paymentMethod: any,\n        credit_card_id: any,\n        capture_method: string,\n    },\n    stripeKey: string,\n    payment_methods: PaymentMethod[],\n    StripeIntent: any,\n    paymentForm: Form<any>,\n    currentWorkingPaymentItem: any,\n    customPaymentMethods: string[],\n}\n\n// state\nconst state: PaymentsState = {\n    loading: {\n        cardBtnLoading: false,\n        addPaymentMethod: false,\n        cancelPaymentIntent: false,\n        refund: false,\n        refundPayment: false,\n        cancelPayment: false,\n        deletePayment: false,\n        createPayment: false,\n        capturePayment: false,\n        deleteCustomPayment: false,\n        sendPaymentViaSms: false,\n        fetchPayment: false,\n        fetchPaymentMethods: false,\n        updatePaymentMethods: false,\n    },\n    payments: [],\n    payment: {},\n    newPayment: {\n        method: '',\n        amount: 0,\n        date: new Date().toISOString().substring(0, 10),\n        security_deposit: 0,\n        keep_deposit_amount: 0,\n        keep_deposit_reason: '',\n        description: '',\n        transaction_type: 'charge',\n        payment_type: 'cash',\n        newCard: false,\n        nameOnCard: '',\n        paymentMethod: null,\n        credit_card_id: null,\n        capture_method: 'automatic',\n    },\n    stripeKey: import.meta.env.VUE_APP_STRIPE_KEY,\n    payment_methods: [] as PaymentMethod[],\n    StripeIntent: {},\n    paymentForm: new Form(),\n    currentWorkingPaymentItem: {},\n    customPaymentMethods: [],\n};\n\n\nconst PaymentsModule: Module<PaymentsState, RootState> = {\n    namespaced: true,\n    state,\n    mutations: {\n        [types.SET_PAYMENTS_LOADING](state: PaymentsState, loading: { subject: string, loading: boolean }) {\n            state.loading[loading.subject] = loading.loading;\n        },\n        [types.SET_PAYMENT](state: PaymentsState, payment) {\n            state.payment = payment;\n        },\n        [types.SET_PAYMENTS](state, payments) {\n            state.payments = payments;\n        },\n        [types.SET_PAYMENT_METHODS](state, payment_methods: PaymentMethod[]) {\n            state.payment_methods = payment_methods;\n        },\n        [types.SET_CURRENT_WORKING_PAYMENT_ITEM](state, item) {\n            state.currentWorkingPaymentItem = item;\n        },\n        [types.SET_CUSTOM_PAYMENT_METHODS](state, methods) {\n            state.customPaymentMethods = methods;\n        },\n        [types.SET_STRIPE_INTENT](state, data) {\n            state.StripeIntent = data;\n        },\n        [types.RESET_NEW_PAYMENT](state) {\n            state.newPayment = {\n                method: '',\n                amount: 0,\n                date: new Date().toISOString().substring(0, 10),\n                security_deposit: 0,\n                keep_deposit_amount: 0,\n                keep_deposit_reason: '',\n                description: '',\n                transaction_type: 'charge',\n                payment_type: 'cash',\n                newCard: false,\n                nameOnCard: '',\n                paymentMethod: null,\n                credit_card_id: null,\n                capture_method: 'automatic',\n            }\n        },\n    },\n    actions: {\n        async fetchPayment({commit}, payment_id: string) {\n            try {\n                const responseData = await performApiRequest(commit, 'SET_PAYMENTS_LOADING', 'fetchPayment', () => axios.get(`/v1/payments/${payment_id}`));\n                commit('SET_PAYMENT', responseData.payment);\n                return responseData.payment;\n            } catch (error) {\n                console.error(error)\n            }\n        },\n\n        fetchPayments({commit}, attributes) {\n            const query = createUrlQueryString(attributes, true);\n\n            axios.get(`/v1/payments${query}`)\n                .then((response) => {\n                    commit('SET_PAYMENTS', response.data.payments);\n                    EventBus.$emit('fetch-payments-success');\n                }).catch(() => {\n            }).finally(() => {\n            });\n        },\n\n        async fetchPaymentMethods({commit}) {\n            try {\n                const responseData = await performApiRequest(commit, 'SET_PAYMENTS_LOADING', 'fetchPaymentMethods', () => axios.get('/v1/stripe/payment-methods'));\n                commit('SET_PAYMENT_METHODS', responseData.cards);\n            } catch (error) {\n                console.error(error)\n            }\n        },\n        async updateDefaultBillingDetails({commit}, data) {\n            try {\n                await performApiRequest(commit, 'SET_PAYMENTS_LOADING', 'updatePaymentMethods', () => axios.put('/v1/stripe/payment-methods/default', data));\n                push.success({\n                    message: 'Payment method updated successfully',\n                });\n            } catch (error) {\n                push.error({\n                    message: e?.response?.data?.message || 'There was an error',\n                });\n            }\n        },\n\n        createSetupIntent({commit}) {\n            axios.post('/v1/stripe/create-setup-intent')\n                .then((response) => {\n                    commit('SET_STRIPE_INTENT', response.data.intent);\n                }).catch(() => {\n            }).finally(() => {\n            });\n        },\n\n        async addPaymentMethod({commit}, paymentIntent: StripePaymentIntent) {\n            try {\n                const responseData = await performApiRequest(commit, 'SET_PAYMENTS_LOADING', 'addPaymentMethod', () => axios.post('/v1/stripe/add-payment-method', paymentIntent));\n                commit(types.SET_PAYMENT_METHODS, responseData?.cards || []);\n                commit('company/SET_COMPANY', responseData?.company, {root: true});\n                EventBus.$emit('add-payment-method-success');\n            } catch (error) {\n                console.error(error)\n            }\n        },\n\n        /**\n         * Capture a payment authorization\n         */\n        capturePayment({commit}, capture) {\n            commit('SET_PAYMENTS_LOADING', {subject: 'capturePayment', loading: true});\n\n            axios.post(`/v1/payments/${capture.uuid}/capture`, capture)\n                .then((response) => {\n                    commit('SET_PAYMENT', response.data.payment);\n                    EventBus.$emit('capture-payment-success');\n\n                    push.success({\n                        message: 'Payment was captured successfully',\n                    });\n                }).catch((e) => {\n                push.error({\n                    message: e?.response?.data?.message || 'There was an error',\n                });\n            }).finally(() => {\n                commit('SET_PAYMENTS_LOADING', {subject: 'capturePayment', loading: false});\n            });\n        },\n\n        refundPayment2({commit, rootGetters}, refund) {\n            commit('SET_PAYMENTS_LOADING', {subject: 'refund', loading: true});\n            axios.post(`/v1/company/${rootGetters['company/company'].uuid}/payments/${refund.p_id}/refund`, {\n                amount: refund.amount,\n            })\n                .then((response) => {\n                    commit('SET_PAYMENT', response.data.payment);\n                    push.success({\n                        message: 'Payment refund was successful',\n                    });\n                }).catch((e) => {\n                console.dir(e);\n                push.error({\n                    message: e?.response?.data?.message || 'There was an error',\n                });\n            }).finally(() => {\n                commit('SET_PAYMENTS_LOADING', {subject: 'refund', loading: false});\n            });\n        },\n\n        /**\n         * Create a payment\n         */\n        createPayment({state, commit}, payment) {\n            commit('SET_PAYMENTS_LOADING', {subject: 'createPayment', loading: true});\n\n\n            axios.post('/v1/payments', {\n                payment,\n            }).then((response) => {\n                EventBus.$emit('create-payment-success', response.data.payment);\n                commit(types.SET_PAYMENT, response.data.payment);\n\n                push.success({\n                    message: 'Success',\n                });\n            }).catch((e) => {\n                push.error({\n                    message: e?.response?.data?.message || 'There was an error',\n                });\n                state.paymentForm.errors.set(e?.response?.data?.message || 'There was an error');\n            }).finally(() => {\n                commit('SET_PAYMENTS_LOADING', {subject: 'createPayment', loading: false});\n            });\n        },\n\n        /**\n         * Create a manual payment\n         */\n        createManualPayment({commit}, payment) {\n            commit('SET_PAYMENTS_LOADING', {subject: 'createPayment', loading: true});\n\n            axios.post('/v1/payments', {payment})\n                .then((response) => {\n                    EventBus.$emit('create-payment-success', response.data.payment);\n                    commit(types.SET_PAYMENT, response.data.payment);\n\n                    push.success({\n                        message: 'Success',\n                    });\n                }).catch((e) => {\n                console.dir(e);\n                push.error({\n                    message: e?.response?.data?.message || 'There was an error',\n                });\n            }).finally(() => {\n                commit('SET_PAYMENTS_LOADING', {subject: 'createPayment', loading: false});\n            });\n        },\n\n        cancelPayment({commit}, uuid) {\n            commit('SET_PAYMENTS_LOADING', {subject: 'cancelPayment', loading: true});\n            axios.post(`/v1/payments/${uuid}/cancel-request`)\n                .then((response) => {\n                    EventBus.$emit('cancel-payment-intent-success', response.data.payment);\n                    commit('SET_PAYMENT', response.data.payment);\n                }).catch((e) => {\n                push.error({\n                    message: e?.response?.data?.message || 'There was an error',\n                });\n            }).finally(() => {\n                commit('SET_PAYMENTS_LOADING', {subject: 'cancelPayment', loading: false});\n            });\n        },\n\n        /**\n         * Refund a payment\n         */\n        refundPayment({state, commit}, payment) {\n            commit('SET_PAYMENTS_LOADING', {subject: 'refundPayment', loading: true});\n            state.paymentForm.errors.clear();\n\n            axios.post(`/v1/payments/${payment.uuid}/refund`, payment)\n                .then((response) => {\n                    EventBus.$emit('refund-payment-success');\n                    commit('SET_PAYMENT', response.data.payment);\n                    push.success({\n                        message: 'Refund Payment Success',\n                    });\n                }).catch((e) => {\n                EventBus.$emit('refund-payment-failure', e?.response?.data?.message || 'There was an error');\n                state.paymentForm.errors.set(e?.response?.data?.message || 'There was an error');\n            }).finally(() => {\n                commit('SET_PAYMENTS_LOADING', {subject: 'refundPayment', loading: false});\n            });\n        },\n\n        /**\n         * Keep deposit\n         */\n        keepDeposit({state, commit}, payment) {\n            commit('SET_PAYMENTS_LOADING', {subject: 'refundPayment', loading: true});\n            state.paymentForm.errors.clear();\n\n            axios.post(`/v1/company/${StorageService.getCompanyUuid()}/payments/hold-deposit`, payment)\n                .then((response) => {\n                    EventBus.$emit('refund-payment-success');\n                    commit('SET_PAYMENT', response.data.payment);\n                    push.success({\n                        message: 'Refund Payment Success',\n                    });\n                }).catch((e) => {\n                state.paymentForm.errors.set(e?.response?.data?.message || 'There was an error');\n            }).finally(() => {\n                commit('SET_PAYMENTS_LOADING', {subject: 'refundPayment', loading: false});\n            });\n        },\n\n        deletePayment({commit}, uuid) {\n            commit('SET_PAYMENTS_LOADING', {subject: 'deletePayment', loading: true});\n\n            axios.delete(`/v1/payments/${uuid}`)\n                .then(() => {\n                    EventBus.$emit('delete-payment-success');\n                }).catch((e) => {\n                push.error({\n                    message: e?.response?.data?.message || 'There was an error',\n                });\n            }).finally(() => {\n                commit('SET_PAYMENTS_LOADING', {subject: 'deletePayment', loading: false});\n            });\n        },\n\n        async deleteCustomPaymentMethod({commit}, name) {\n            const responseData = await performApiRequest(commit, 'SET_PAYMENTS_LOADING', 'deleteCustomPayment', () => axios.delete(`/v1/custom-payment-methods/${name}`));\n            commit(types.SET_CUSTOM_PAYMENT_METHODS, responseData.meta);\n        },\n\n\n        /**\n         * Send a sms with a payment request link\n         */\n        sendPaymentRequestLinkViaSms({commit}, payment) {\n            commit('SET_PAYMENTS_LOADING', {subject: 'sendPaymentViaSms', loading: true});\n\n            axios.post(`/v1/payments/${payment.uuid}/send-via-sms`)\n                .then(() => {\n                    EventBus.$emit('send-payment-request-link-via-sms-success');\n                }).catch((e) => {\n                EventBus.$emit('send-payment-request-link-via-sms-failed', e?.response?.data?.message || 'There was an error');\n            }).finally(() => {\n                commit('SET_PAYMENTS_LOADING', {subject: 'sendPaymentViaSms', loading: false});\n            });\n        },\n    },\n    getters: {\n        loading: (state: PaymentsState) => state.loading,\n        payment: (state: PaymentsState) => state.payment,\n        payments: (state: PaymentsState) => state.payments,\n        newPayment: (state: PaymentsState) => state.newPayment,\n        stripeKey: (state: PaymentsState) => state.stripeKey,\n        StripeIntent: (state: PaymentsState) => state.StripeIntent,\n        paymentMethods: (state: PaymentsState) => state.payment_methods,\n        paymentForm: (state: PaymentsState) => state.paymentForm,\n        currentWorkingPaymentItem: (state: PaymentsState) => state.currentWorkingPaymentItem,\n        customPaymentMethods: (state: PaymentsState) => state.customPaymentMethods,\n    }\n};\n\nexport default PaymentsModule;\n","\nexport default {\n  /**\n   * @type {String}\n   */\n  title: 'Fleetwire.io' as string,\n  // theme: variables.theme,\n\n  /**\n   * @type {boolean} true | false\n   * @description Whether show the settings right-panel\n   */\n  showSettings: true as boolean,\n\n  /**\n   * @type {boolean} true | false\n   * @description Whether need tagsView\n   */\n  tagsView: true as boolean,\n\n  /**\n   * @type {boolean} true | false\n   * @description Whether fix the header\n   */\n  fixedHeader: false as boolean,\n\n  /**\n   * @type {boolean} true | false\n   * @description Whether show the logo in sidebar\n   */\n  sidebarLogo: false as boolean,\n\n  /**\n   * @type {string | array} 'production' | ['production','development']\n   * @description Need show err logs component.\n   * The default is only used in the production env\n   * If you want to also use it in dev, you can pass ['production','development']\n   */\n  errorLog: 'production' as string | string[],\n};\n","import defaultSettings from '@/settings';\nimport * as types from '@/store/mutation-types';\nimport axios from 'axios';\nimport {isNull} from 'lodash';\nimport {EventBus} from '@/plugins/eventBus';\nimport {performApiRequest} from '@/store/helpers/vuex-helpers';\n\nconst {showSettings, tagsView, fixedHeader, sidebarLogo} = defaultSettings;\n\nexport interface NotificationSettings {\n    fw_booking_email: boolean;\n    fw_booking_sms: boolean;\n    getaround_booking_email: boolean;\n    getaround_booking_sms: boolean;\n    getaround_communication_error_email: boolean;\n    getaround_communication_error_sms: boolean;\n    id: boolean;\n    tesla_communication_error_email: boolean;\n    tesla_communication_error_sms: boolean;\n    turo_booking_email: boolean;\n    turo_booking_sms: boolean;\n    turo_communication_error_email: boolean;\n    turo_communication_error_sms: boolean;\n    vehicle_maintenance_reminder_sms: boolean;\n    vehicle_maintenance_reminder_email: boolean;\n    renter_invoice_paid_sms: boolean;\n    renter_invoice_paid_email: boolean;\n    toll_new_transaction_sms: boolean;\n    toll_new_transaction_email: boolean;\n    vehicle_recall_sms: boolean;\n    vehicle_recall_email: boolean;\n    notify_email: boolean;\n    notify_sms: boolean;\n    set: boolean;\n}\n\nexport interface SettingsState {\n    theme: any[];\n    showSettings: boolean;\n    tagsView: boolean;\n    fixedHeader: boolean;\n    sidebarLogo: boolean;\n    loading: Record<string, boolean>;\n    notifications: NotificationSettings;\n}\n\nconst state: SettingsState = {\n    theme: [],\n    showSettings,\n    tagsView,\n    fixedHeader,\n    sidebarLogo,\n    loading: {\n        notifications: false,\n        export_commit: false,\n        settings: false,\n        get_settings: false,\n    },\n    notifications: {\n        set: false,\n        fw_booking_email: null,\n        fw_booking_sms: null,\n        getaround_booking_email: null,\n        getaround_booking_sms: null,\n        getaround_communication_error_email: null,\n        getaround_communication_error_sms: null,\n        id: null,\n        tesla_communication_error_email: null,\n        tesla_communication_error_sms: null,\n        turo_booking_email: null,\n        turo_booking_sms: null,\n        turo_communication_error_email: null,\n        turo_communication_error_sms: null,\n        vehicle_maintenance_reminder_sms: null,\n        vehicle_maintenance_reminder_email: null,\n        renter_invoice_paid_sms: null,\n        renter_invoice_paid_email: null,\n        toll_new_transaction_sms: null,\n        toll_new_transaction_email: null,\n        vehicle_recall_sms: null,\n        vehicle_recall_email: null,\n        notify_email: null,\n        notify_sms: null,\n    },\n};\n\nconst getters = {\n    loading: (state: SettingsState) => state.loading,\n    needTagsView: (state: SettingsState) => state.tagsView,\n    fixedHeader: (state: SettingsState) => state.fixedHeader,\n    showSettings: (state: SettingsState) => state.showSettings,\n    notifications: (state: SettingsState) => state.notifications,\n};\n\nconst mutations = {\n    [types.SET_SETTINGS_LOADING](state: SettingsState, loading: { subject: string, loading: boolean }) {\n        state.loading[loading.subject] = loading.loading;\n    },\n    [types.SET_NOTIFICATION_SETTINGS](state: SettingsState, settings: NotificationSettings) {\n        if (!isNull(settings)) {\n            state.notifications = settings;\n            state.notifications.set = true;\n        }\n    },\n};\n\nconst actions = {\n    getSettings({commit}) {\n        commit('SET_SETTINGS_LOADING', {subject: 'get_settings', loading: true});\n\n        axios.get('/v1/settings')\n            .then((response) => {\n                EventBus.$emit('get-settings-success', response.data.settings);\n                commit('company/SET_COMPANY_SETTINGS', response.data.settings, {root: true});\n            }).catch(() => {\n            EventBus.$emit('SystemMessage', {\n                type: 'error',\n                message: 'error getting settings',\n            });\n        }).finally(() => {\n            commit('SET_SETTINGS_LOADING', {subject: 'get_settings', loading: false});\n        });\n    },\n\n    async updateSettings({commit}, data: { settings: { [key: string]: string } }) {\n        try {\n            const responseData = await performApiRequest(commit, 'SET_SETTINGS_LOADING', 'settings', () => axios.post('/v1/settings', data));\n            commit('company/SET_COMPANY_SETTINGS', responseData.settings, {root: true});\n        } catch (error) {\n            EventBus.$emit('SystemMessage', {\n                type: 'error',\n                message: 'Settings update error. Try again later.',\n            });\n        }\n    },\n\n    async updateNotificationSettings({commit}) {\n        try {\n            const responseData = await performApiRequest(commit, 'SET_SETTINGS_LOADING', 'notifications', () => axios.put('/v1/settings/notifications', state.notifications));\n            EventBus.$emit('SystemMessage', {\n                type: 'success',\n                message: 'Settings updated successfully!',\n            });\n            return responseData;\n        } catch (error) {\n            EventBus.$emit('SystemMessage', {\n                type: 'error',\n                message: 'Settings update error. Try again later.',\n            });\n        }\n    },\n\n    resetNotificationSettings({commit}) {\n        commit('SET_SETTINGS_LOADING', {subject: 'notifications', loading: true});\n        axios.post('/v1/settings/notifications/reset')\n            .then((response) => {\n                commit('SET_NOTIFICATION_SETTINGS', response?.data?.company?.notification_settings);\n            }).catch(() => {\n        }).finally(() => {\n            commit('SET_SETTINGS_LOADING', {subject: 'notifications', loading: false});\n        });\n    },\n\n\n    getExportDetails({commit}) {\n        commit('SET_SETTINGS_LOADING', {subject: 'export_details', loading: true});\n        axios.get('/v1/export/details')\n            .then((response) => {\n                EventBus.$emit('export-details-success', response.data);\n            }).catch(() => {\n        }).finally(() => {\n            commit('SET_SETTINGS_LOADING', {subject: 'export_details', loading: false});\n        });\n    },\n    commitExport({commit}, data) {\n        commit('SET_SETTINGS_LOADING', {subject: 'export_commit', loading: true});\n        axios.post('/v1/export', data)\n            .then((response) => {\n                console.dir(response);\n                const downloadUrl = window.URL.createObjectURL(new Blob([response.data]));\n                const link = document.createElement('a');\n                link.href = downloadUrl;\n                link.setAttribute('download', 'fleetwire-export.csv');\n                document.body.appendChild(link);\n                link.click();\n                link.remove();\n            }).catch(() => {\n        }).finally(() => {\n            commit('SET_SETTINGS_LOADING', {subject: 'export_commit', loading: false});\n        });\n    },\n};\n\nexport default {\n    namespaced: true,\n    state,\n    mutations,\n    actions,\n    getters,\n};\n","import axios from 'axios';\nimport { EventBus } from '@/plugins/eventBus';\nimport { get } from 'lodash';\nimport * as types from '../mutation-types';\n\nexport interface ThemeState {\n    loading: Record<string, boolean>;\n    storeThemes: any[];\n    storeTheme: any;\n}\n\nconst state: ThemeState = {\n  loading: {\n    notes: false,\n    createNote: false,\n    deleteNote: false,\n  },\n  storeThemes: [],\n  storeTheme: null,\n};\n\nconst getters = {\n  storeThemes: state => state.storeThemes,\n  storeTheme: state => state.storeTheme,\n  loading: state => state.loading,\n};\n\nconst mutations = {\n  [types.SET_NOTES_LOADING](state, loading) {\n    state.loading[loading.subject] = loading.loading;\n  },\n  [types.SET_STORE_THEMES](state, data) {\n    state.storeThemes = data;\n  },\n  [types.SET_STORE_THEME_DATA](state, data) {\n    state.storeTheme = data;\n  },\n};\n\nconst actions = {\n\n\n  /**\n   * Get all notes.\n   *\n   * @param commit\n   * @param {Object} options\n   */\n  async getStoreThemes({ commit }) {\n    commit('SET_NOTES_LOADING', { subject: 'notes', loading: true });\n\n    const query = '';\n    await axios.get(`/v1/store-assets?${query}`)\n      .then((response) => {\n        commit('SET_STORE_THEMES', get(response, 'data.data'));\n      }).catch(() => {\n    }).finally(() => {\n      commit('SET_NOTES_LOADING', { subject: 'notes', loading: false });\n    });\n  },\n  getStoreTheme({ commit }, uuid) {\n    commit('SET_NOTES_LOADING', { subject: 'notes', loading: true });\n\n    axios.get(`/v1/store-assets/${uuid}`)\n      .then((response) => {\n        commit('SET_STORE_THEME_DATA', get(response, 'data.data'));\n      }).catch(() => {\n    }).finally(() => {\n      commit('SET_NOTES_LOADING', { subject: 'notes', loading: false });\n    });\n  },\n  updateStoreTheme({ commit }, theme) {\n    commit('SET_NOTES_LOADING', { subject: 'notes', loading: true });\n    axios.put(`/v1/store-assets/${theme.uuid}`, theme)\n      .then(() => {\n        EventBus.$emit('update-theme-settings-success');\n      }).catch(() => {\n    }).finally(() => {\n      commit('SET_NOTES_LOADING', { subject: 'notes', loading: false });\n    });\n  },\n};\n\nexport default {\n  namespaced: true,\n  state,\n  mutations,\n  actions,\n  getters,\n};\n","import Cookies from 'js-cookie';\nimport * as types from '../mutation-types';\nimport Tr from \"@/plugins/i18n/translations\";\n\nconst locales = [];\n\nexport interface LangState {\n    locale: string,\n    locales: string[],\n}\n\n// state\nconst state: LangState = {\n  locale: Tr.guessDefaultLocale(),\n  locales,\n};\n\n// getters\nconst getters = {\n  locale: (state: LangState) => state.locale,\n  locales: (state: LangState) => state.locales,\n};\n\n// mutations\nconst mutations = {\n  [types.SET_LOCALE](state: LangState, { locale }) {\n    state.locale = locale;\n  },\n};\n\n// actions\nconst actions = {\n  setLocale({ commit }, { locale }) {\n    commit(types.SET_LOCALE, { locale });\n\n    Cookies.set('locale', locale, { expires: 365 });\n  },\n};\n\n\nexport default {\n  namespaced: true,\n  state,\n  mutations,\n  actions,\n  getters,\n};\n","import axios from 'axios';\nimport {get, set} from 'lodash';\nimport {Form} from '@/plugins/FWForms/index';\nimport {EventBus} from '@/plugins/eventBus';\nimport {StorageService} from '@/services/storage.service';\nimport * as types from '../mutation-types';\nimport {\n    BookingInterface,\n    ListingFilter,\n    ListingInterface,\n    TaxCategory,\n    TripExtra,\n    VehicleClass,\n    VehicleInterface\n} from '@/types';\nimport {performApiRequest} from '@/store/helpers/vuex-helpers';\nimport {RootState} from '@/types/RootState';\nimport {Module} from 'vuex'\nimport {push} from 'notivue'\n\n\nexport type DailyPrice = {\n    date: string,\n    localizedDayOfWeek: string,\n    localizedShortDayOfWeek: string,\n    price: number,\n    source: 'custom' | 'default',\n}\n\ntype VehicleIncident = {\n    amount: null,\n    coordinates: { x: number, y: number },\n    created_at: string,\n    created_by: string,\n    damage_type: string,\n    description: string,\n    fixed_at: string,\n    incident_at: string,\n    updated_at: string,\n    uuid: string,\n}\n\nexport interface ListingState {\n    loading: Record<string, boolean>,\n    dialogs: Record<string, boolean>,\n    snacks: Record<string, boolean>,\n    listingInit: boolean,\n    allListingsInit: boolean,\n    allListings: ListingInterface[],\n    custodialListings: ListingInterface[],\n    fleetResourceListingsLoaded: boolean,\n    fleetResourceListings: ListingInterface[],\n    listing: ListingInterface,\n    originalListing: ListingInterface,\n    currentListing: ListingInterface,\n    currentExtra: any,\n    allExtras: any[],\n    listingExtras: any[],\n    currentVehicleFeatures: any[],\n    allVehicleFeatures: Record<string, string>[],\n    availability_message: string,\n    dailyPricing: DailyPrice[],\n    incidents: VehicleIncident[],\n    form: any,\n    listingExtraForm: any,\n    listingBookableTimes: Record<string, string>[],\n    filters: ListingFilter,\n    filterOptions: Record<string, any>,\n}\n\nconst defaultVehicle: VehicleInterface = {\n    v_id: '',\n    active: false,\n    year: null,\n    make: '',\n    model: '',\n    trim: '',\n    color: '',\n    title: '',\n    vin: '',\n    features: null,\n    in_service: false,\n    vehicle_class: null,\n    plate: '',\n    details: null,\n    seats: null,\n    doors: null,\n    branch: null,\n    last_odometer_reading: 0,\n    toll_transponder: '',\n    has_remote_capability: false,\n    lockbox_code: '',\n    lockbox_location: '',\n    matched_bouncie_vehicle: null,\n    matched_getaround_vehicle: null,\n    status: null,\n    unit_id: null,\n    matched_turo_vehicle: null,\n};\n\nconst state: ListingState = {\n    loading: {\n        listing: false,\n        listings: false,\n        addListing: false,\n        saveListing: false,\n        deleteListing: false,\n        archiveListing: false,\n        pausing: false,\n        decoding_vin: false,\n        unavailable_period: false,\n        matchingTeslaVehicle: false,\n        matchBouncieVehicle: false,\n        tripExtraAdd: false,\n        tripExtraEdit: false,\n        import_listings: false,\n        importImages: false,\n        importDelete: false,\n        getAllExtras: false,\n        syncCarShareData: false,\n        dailyPrices: false,\n        updateDailyPrices: false,\n        updateOdomProvider: false,\n        vehicle: false,\n        vehicleDetails: false,\n        getIncidents: false,\n        saveIncident: false,\n        deleteIncident: false,\n        updateIncident: false,\n        listing_extras: false,\n        vehicleFeatures: false,\n    },\n    dialogs: {\n        pricingOptions: false,\n    },\n    filters: {\n        year: {\n            selected: false,\n            years: [],\n            available_years: [],\n        },\n        make: {\n            selected: false,\n            makes: [],\n            available_makes: [],\n        },\n        model: {\n            selected: false,\n            models: [],\n            available_models: [],\n        },\n    },\n\n    snacks: {\n        vehicle_details_success: false,\n    },\n    listingInit: false,\n    allListingsInit: false,\n\n    form: new Form(),\n    listingExtraForm: new Form(),\n    allListings: [],\n    custodialListings: [],\n    listing: null,\n\n    originalListing: null,\n    currentListing: {\n        active: false,\n        init: false,\n        approved: false,\n        loaded: false,\n        l_id: null,\n        unit_id: null,\n        name: '',\n        description: '',\n        slug: '',\n        sub_title: '',\n        timezone: '',\n        checkout_mode: '',\n        archived_at: '',\n        cover_photo: '',\n        listing_image: '',\n        order: 0,\n        paused: false,\n        use_secondary_driver: false,\n        use_esign_template: false,\n        longer_weekend_trip_preferred: false,\n        miles_included: 0,\n        miles_extra: 0,\n        extras: [],\n        distance_allowance_max: 0,\n        minimum_request_duration: 0,\n        min_age: 0,\n        seasoned_driver: 0,\n        provider_listings: null,\n        tax_category: null,\n        is_custodian: false,\n        title: '',\n        pricing: {\n            price_type: 'flat_fee',\n            price_period: 'Day',\n            price_structure_id: null,\n            amount: 1,\n            security_deposit_credit: 0,\n            security_deposit_debit: 0,\n            adjusted_amount: 0,\n            discountable: false,\n            taxable: false,\n            original_price: 0,\n            price_structure: null,\n            sec_dep: 0,\n            total_per_day: 0,\n            monthlyPercentageDiscount: 0,\n            threeDayPercentageDiscount: 0,\n            weeklyPercentageDiscount: 0,\n        },\n        listing_images: [],\n        padding_before: 0,\n        padding_after: 0,\n\n        vehicle: {\n            v_id: '',\n            active: false,\n            year: null,\n            make: '',\n            model: '',\n            trim: '',\n            color: '',\n            title: '',\n            vin: '',\n            features: null,\n            in_service: false,\n            vehicle_class: null,\n            plate: '',\n            details: null,\n            seats: null,\n            doors: null,\n            branch: null,\n            last_odometer_reading: 0,\n            toll_transponder: '',\n            has_remote_capability: false,\n            lockbox_code: '',\n            lockbox_location: '',\n            matched_bouncie_vehicle: null,\n            matched_getaround_vehicle: null,\n            status: null,\n            unit_id: null,\n            matched_turo_vehicle: null,\n        },\n        bookings: [],\n        age_requirements: {\n            min_age: 21,\n            young_driver: 21,\n            young_driver_fee: 19,\n            young_driver_security_deposit: 250,\n            seasoned_driver: 25,\n        },\n        commission_partners: [],\n        template: null,\n    },\n\n    currentExtra: {\n        title: 'Insurance',\n        type: 'trip',\n        active: true,\n        l_id: '',\n        required: true,\n        code: null,\n        settings: {\n            display: null,\n        },\n        tax_category: {},\n        extras: [\n            {\n                title: 'Basic',\n                subtitle: '',\n                price: 0,\n                description: '<p>Example: Cover your trip with comprehensive rental insurance.</p><ul><li><p>Covers damage up to the full value of the vehicle.</p></li><li><p>Liability coverage up to state minimum.</p></li></ul>',\n                recommended: false,\n                allow_multi: 1,\n            },\n        ],\n    },\n    dailyPricing: [],\n    allExtras: [],\n    availability_message: '',\n    allVehicleFeatures: [],\n    currentVehicleFeatures: [],\n    fleetResourceListingsLoaded: false,\n    fleetResourceListings: [],\n    incidents: [],\n    listingExtras: [],\n    listingBookableTimes: [],\n    filterOptions: {\n        sort: 'standard',\n        make: [],\n    }\n};\n\nconst getters = {\n    allListings: (state: ListingState) => state.allListings,\n    filters: (state: ListingState) => state.filters,\n    fleetResourceListings: (state: ListingState) => state.fleetResourceListings,\n    allExtras: (state: ListingState) => state.allExtras,\n    listingInit: (state: ListingState) => state.listingInit,\n    allListingsInit: (state: ListingState) => state.allListingsInit,\n    dailyPricing: (state: ListingState) => state.dailyPricing,\n    originalListing: (state: ListingState) => state.originalListing,\n    currentListing: (state: ListingState) => state.currentListing,\n    currentListingBookings: (state: ListingState) => state.currentListing.bookings,\n    listingLoading: (state: ListingState) => state.loading,\n    listingSnacks: (state: ListingState) => state.snacks,\n    loading: (state: ListingState) => state.loading,\n    listing: (state: ListingState) => state.listing,\n    form: (state: ListingState) => state.form,\n    listingExtraForm: (state: ListingState) => state.listingExtraForm,\n    currentListingExtra: (state: ListingState) => state.currentExtra,\n    availabilityMessage: (state: ListingState) => state.availability_message,\n    currentVehicleFeatures: (state: ListingState) => state.currentVehicleFeatures,\n    allVehicleFeatures: (state: ListingState) => state.allVehicleFeatures,\n    listingExtras: (state: ListingState) => state.listingExtras,\n    dialogs: (state: ListingState) => state.dialogs,\n    incidents: (state: ListingState) => state.incidents,\n    filterOptions: (state: ListingState) => state.filterOptions,\n\n    visibleListings: (state: ListingState) => {\n        return (state.allListings || [])\n            .filter(listing => !listing.paused && listing.active && listing.approved)\n            .slice()\n            .sort((a, b) => (a.order ?? 0) - (b.order ?? 0));\n    },\n};\n\nfunction setFilterValues(state: ListingState, filterKey: string, dataKey: string, data: string[] | number[]) {\n    if (data) {\n        state.filters[filterKey][dataKey] = data;\n    }\n}\n\nconst mutations = {\n    [types.SET_LISTING_LOADING](state: ListingState, loading: { subject: string, loading: boolean }) {\n        state.loading[loading.subject] = loading.loading;\n    },\n    [types.SET_LISTING_SNACK](state: ListingState, snack: { subject: string, value: boolean }) {\n        state.snacks[snack.subject] = snack?.value || false;\n    },\n    [types.SET_LISTING_DIALOG](state: ListingState, payload: { topic: string, value: boolean }) {\n        state.dialogs[payload.topic] = payload.value;\n\n        setTimeout(() => {\n            state.dialogs[payload.topic] = false;\n        }, 500);\n    },\n    [types.SET_LISTING_FILTER_AVAILABLE_FILTERS](state: ListingState, data: {\n        years?: number[],\n        makes?: string[],\n        models?: string[]\n    }) {\n        setFilterValues(state, 'year', 'available_years', data.years);\n        setFilterValues(state, 'make', 'available_makes', data.makes);\n        setFilterValues(state, 'model', 'available_models', data.models);\n    },\n    [types.SET_LISTING_FILTER_SELECTED_FILTERS](state: ListingState, data: {\n        years?: number[],\n        makes?: string[],\n        models?: string[]\n    }) {\n        setFilterValues(state, 'year', 'years', data.years);\n        setFilterValues(state, 'make', 'makes', data.makes);\n        setFilterValues(state, 'model', 'models', data.models);\n    },\n    [types.TOGGLE_LISTING_FILTER](state: ListingState, filter: 'year' | 'make' | 'model') {\n        state.filters[filter].selected = !state.filters[filter].selected;\n    },\n    [types.CLEAR_LISTING_FILTER](state: ListingState) {\n        state.filters.year.years = [];\n        state.filters.make.makes = [];\n        state.filters.model.models = [];\n        state.filters.year.selected = false;\n        state.filters.make.selected = false;\n        state.filters.model.selected = false;\n    },\n    [types.SET_LISTING](state: ListingState, listing: ListingInterface) {\n        state.listing = listing;\n        state.listingInit = true;\n    },\n    [types.SET_LISTING_INIT](state: ListingState, isInit: boolean) {\n        state.listingInit = isInit;\n    },\n    [types.SET_ALL_LISTINGS](state: ListingState, listings: ListingInterface[]) {\n        state.allListings = listings;\n        state.allListingsInit = true;\n    },\n    [types.SET_BOOKABLE_TIMES](state: ListingState, times: { timeF: string, time: string }[]) {\n        state.listingBookableTimes = times;\n    },\n    [types.SET_CUSTODIAL_LISTING](state: ListingState, listings: ListingInterface[]) {\n        state.custodialListings = listings;\n    },\n    [types.SET_FLEET_RESOURCE_LISTINGS](state: ListingState, listings: ListingInterface[]) {\n        state.fleetResourceListingsLoaded = true;\n        state.fleetResourceListings = listings;\n    },\n    [types.SET_FLEET_RESOURCE_LISTINGS_DATA](state: ListingState, {l_id, data}) {\n        const listing = state.fleetResourceListings.find(item => item.l_id === l_id);\n\n        if (listing) {\n            // Iterate over the keys in the data\n            Object.keys(data).forEach(key => {\n                if (typeof data[key] === 'object' && data[key] !== null) {\n                    // Ensure the nested object exists\n                    if (!listing[key]) listing[key] = {};\n\n                    // Iterate over the nested object's keys\n                    Object.keys(data[key]).forEach(subKey => {\n                        listing[key][subKey] = data[key][subKey];\n                    });\n                } else {\n                    // Direct assignment for non-object properties\n                    listing[key] = data[key];\n                }\n            });\n        }\n    },\n\n    [types.SET_VEHICLE_VIN](state: ListingState, vin: string) {\n        state.currentListing.vehicle.vin = vin;\n    },\n    [types.SET_CURRENT_LISTING_INCIDENTS](state: ListingState, incidents: VehicleIncident[]) {\n        state.incidents = incidents;\n    },\n    [types.SET_LISTING_FILTER_OPTIONS](state: ListingState, filterOptions: { key: string, value: any }) {\n        console.dir('SET_LISTING_FILTER_OPTIONS');\n        console.dir(filterOptions);\n        state.filterOptions[filterOptions.key] = filterOptions.value;\n    },\n    [types.SET_VEHICLE_YEAR](state: ListingState, value: number) {\n        // Ensure the 'vehicle' object exists in 'currentListing'\n        if (!state.currentListing.vehicle) {\n            state.currentListing.vehicle = {...defaultVehicle};\n        }\n\n        // Directly set the 'year' property on the 'vehicle' object\n        state.currentListing.vehicle.year = value;\n    },\n    [types.SET_LISTING_PRICE_TYPE](state: ListingState, value: string) {\n        set(state.currentListing, 'pricing.price_type', value);\n    },\n    [types.SET_LISTING_PRICE_PERIOD](state: ListingState, value: string) {\n        set(state.currentListing, 'pricing.price_period', value);\n    },\n    [types.SET_LISTING_PRICE_STRUCTURE_ID](state: ListingState, value: string) {\n        set(state.currentListing, 'pricing.price_structure_id', value);\n    },\n    [types.SET_ALL_AVAILABLE_FEATURES](state: ListingState, features: Record<string, string>[]) {\n        state.allVehicleFeatures = features;\n    },\n    [types.SET_VEHICLE_EXTRAS](state: ListingState, extras: TripExtra[]) {\n        state.listingExtras = extras;\n    },\n    [types.SET_VEHICLE_FEATURES](state: ListingState, features: Record<string, string>[]) {\n        state.currentVehicleFeatures = features.map((feature) => feature.value);\n    },\n    [types.SET_VEHICLE_MAKE](state: ListingState, value: string) {\n        set(state.currentListing, 'vehicle.make', value);\n    },\n    [types.SET_VEHICLE_MODEL](state: ListingState, value: string) {\n        set(state.currentListing, 'vehicle.model', value);\n    },\n    [types.SET_VEHICLE_COLOR](state: ListingState, color: string) {\n        set(state.currentListing, 'vehicle.color', color);\n    },\n    [types.SET_VEHICLE_SEATS](state: ListingState, seats: number) {\n        set(state.currentListing, 'vehicle.seats', seats);\n    },\n    [types.SET_VEHICLE_DOORS](state: ListingState, doors: number) {\n        set(state.currentListing, 'vehicle.doors', doors);\n    },\n    [types.SET_VEHICLE_PLATE](state: ListingState, plate: string) {\n        set(state.currentListing, 'vehicle.plate', plate);\n    },\n    [types.SET_VEHICLE_CLASS](state: ListingState, value: VehicleClass) {\n        state.currentListing = {\n            ...state.currentListing,\n            vehicle: {\n                ...state.currentListing.vehicle,\n                vehicle_class: value\n            }\n        };\n    },\n\n    [types.TOGGLE_PAUSE_CURRENT_LISTING](state: ListingState) {\n        state.currentListing.paused = !state.currentListing.paused;\n    },\n    [types.SET_CURRENT_LISTING_CHECKOUT_MODE](state: ListingState, mode: string) {\n        state.currentListing.checkout_mode = mode;\n    },\n\n    [types.SET_CURRENT_DECODED_VIN](vehicleData) {\n        console.dir('SET_CURRENT_DECODED_VIN');\n        console.dir(vehicleData);\n    },\n    [types.SET_EXISTING_LISTING_DATA](state: ListingState, data: any) {\n        Object.keys(data).forEach(key => {\n            if (data[key] === null || typeof data[key] !== 'object') {\n                // For null or non-object properties, assign directly\n                state.currentListing[key] = data[key];\n            } else {\n                // Ensure the nested object exists\n                if (!state.currentListing[key]) state.currentListing[key] = {};\n\n                // Assign properties of the nested object\n                Object.keys(data[key]).forEach(subKey => {\n                    state.currentListing[key][subKey] = data[key][subKey];\n                });\n            }\n        });\n    },\n    [types.SET_CURRENT_NEW_LISTING](state: ListingState, listing: ListingInterface) {\n        state.currentListing.name = listing.name;\n        state.currentListing.vehicle.year = listing.vehicle.year;\n        state.currentListing.vehicle.make = listing.vehicle.make;\n        state.currentListing.vehicle.model = listing.vehicle.model;\n        state.currentListing.vehicle.color = listing.vehicle.color;\n        state.currentListing.vehicle.plate = listing.vehicle.plate;\n        state.currentListing.pricing.amount = listing.pricing.amount;\n        state.currentListing.pricing.price_period = listing.pricing.price_period;\n    },\n\n    [types.SET_CURRENT_LISTING](state: ListingState, listing: ListingInterface) {\n        state.currentListing.loaded = true;\n\n        if (listing.vehicle === null) {\n            state.currentListing = {...state.currentListing, ...listing};\n\n            // Reset vehicle object\n            state.currentListing.vehicle = {...defaultVehicle};\n        } else {\n            state.currentListing = {...state.currentListing, ...listing};\n        }\n        // Direct property assignment for age_requirements\n        state.currentListing.age_requirements = {\n            min_age: listing.min_age || 21,\n            seasoned_driver: listing.seasoned_driver || 25\n        };\n\n        state.listingInit = true;\n\n        // Deep clone using JSON methods\n        state.originalListing = JSON.parse(JSON.stringify(state.currentListing));\n\n\n        // Find and update or add the listing in allListings\n        let allListingIndex = -1;\n        // if state.allListings is undefined set it to an empty array\n        if (!state.allListings) {\n            state.allListings = [];\n        }\n\n        if (state.allListings) {\n            allListingIndex = state.allListings.findIndex(l => l.l_id === listing.l_id);\n        }\n        if (allListingIndex >= 0) {\n            state.allListings[allListingIndex] = listing;\n        } else {\n            state.allListings.push(listing);\n        }\n    },\n\n    [types.SET_CURRENT_LISTING_BOOKINGS](state: ListingState, bookings: BookingInterface[]) {\n        state.currentListing.bookings = bookings;\n    },\n    [types.SET_CURRENT_LISTING_MILE_ALLOWANCE](state: ListingState, data) {\n        if (data.miles_included) {\n            state.currentListing.miles_included = data.miles_included;\n        }\n        if (data.distance_allowance_max) {\n            state.currentListing.distance_allowance_max = data.distance_allowance_max;\n        }\n    },\n    [types.SET_CURRENT_LISTING_DISCOUNTABLE](state: ListingState, discountable: boolean) {\n        state.currentListing.pricing.discountable = discountable\n    },\n    [types.SET_CURRENT_LISTING_DURATION_DISCOUNT](state: ListingState, discount: any) {\n        console.dir(discount);\n        if (discount.threeDayPercentageDiscount) {\n            state.currentListing.pricing.threeDayPercentageDiscount = discount.threeDayPercentageDiscount;\n        }\n        if (discount.weeklyPercentageDiscount) {\n            state.currentListing.pricing.weeklyPercentageDiscount = discount.weeklyPercentageDiscount;\n        }\n        if (discount.monthlyPercentageDiscount) {\n            state.currentListing.pricing.monthlyPercentageDiscount = discount.monthlyPercentageDiscount;\n        }\n    },\n    [types.SET_CURRENT_TRIP_EXTRA](state: ListingState, extras) {\n        state.currentExtra = extras;\n    },\n    [types.SET_ALL_EXTRAS](state: ListingState, extras) {\n        state.allExtras = extras;\n    },\n    [types.SET_LISTING_PRICE](state: ListingState, amount: number) {\n        state.currentListing.pricing.amount = amount;\n    },\n    [types.SET_LISTING_VEHICLE](state: ListingState, data: any) {\n        if (data.last_odometer_reading) {\n            state.currentListing.vehicle.last_odometer_reading = data.last_odometer_reading;\n        }\n    },\n    [types.SET_LISTING_PRICE_TAXABLE](state: ListingState, taxable: boolean) {\n        state.currentListing.pricing.taxable = taxable;\n    },\n    [types.SET_LISTING_PRICE_TAX_CATEGORY](state: ListingState, tax_category: TaxCategory) {\n        state.currentListing.tax_category = tax_category;\n    },\n    [types.SET_LISTING_SEC_DEP](state: ListingState, amount: number) {\n        state.currentListing.pricing.sec_dep = amount;\n    },\n    [types.SET_LISTING_SEC_DEP_CREDIT](state: ListingState, amount: number) {\n        console.dir('SET_LISTING_SEC_DEP_CREDIT');\n        console.dir(amount);\n        state.currentListing.pricing.security_deposit_credit = amount;\n    },\n    [types.SET_LISTING_SEC_DEP_DEBIT](state: ListingState, amount: number) {\n        state.currentListing.pricing.security_deposit_debit = amount;\n    },\n    [types.SET_LISTING_MILES_OVERAGE](state: ListingState, amount: number) {\n        state.currentListing.miles_extra = amount;\n    },\n    [types.SET_CURRENT_LISTING_IMAGES](state: ListingState, images: any[]) {\n        state.currentListing.listing_images = images;\n    },\n    [types.SET_LISTING_AVAILABILITY_MESSAGE](state: ListingState, message: string) {\n        state.availability_message = message;\n    },\n    [types.SET_LISTING_DAILY_PRICES](state: ListingState, prices: DailyPrice[]) {\n        state.dailyPricing = prices;\n    },\n    [types.CLEAR_LISTING_FORM_ERRORS](state: ListingState, form_field: string | null = null) {\n        if (form_field === null || form_field === undefined) {\n            state.form.errors.clear();\n        } else {\n            state.form.errors.clear(form_field);\n        }\n    },\n    [types.SET_LISTING_FORM_ERRORS](state: ListingState, errors: string | Record<string, string[]>) {\n        state.form.errors.set(errors);\n    },\n    [types.RESET_CURRENT_LISTING](state: ListingState) {\n        state.currentListing = {\n            active: false,\n            approved: false,\n            archived_at: '',\n            checkout_mode: '',\n            commission_partners: undefined,\n            cover_photo: '',\n            distance_allowance_max: 0,\n            is_custodian: false,\n            l_id: '',\n            listing_image: '',\n            longer_weekend_trip_preferred: false,\n            miles_extra: 0,\n            miles_included: 0,\n            min_age: 0,\n            minimum_request_duration: 0,\n            order: 0,\n            paused: false,\n            provider_listings: undefined,\n            seasoned_driver: 0,\n            slug: '',\n            sub_title: '',\n            timezone: '',\n            title: '',\n            extras: [],\n            use_esign_template: false,\n            use_secondary_driver: false,\n            loaded: false,\n            name: '',\n            pricing: {\n                price_type: 'flat_fee',\n                price_period: 'Day',\n                price_structure_id: null,\n                amount: 1,\n                security_deposit_credit: 0,\n                security_deposit_debit: 0,\n                adjusted_amount: 0,\n                discountable: false,\n                taxable: false,\n                original_price: 0,\n                price_structure: null,\n                sec_dep: 0,\n                total_per_day: 0,\n                monthlyPercentageDiscount: 0,\n                threeDayPercentageDiscount: 0,\n                weeklyPercentageDiscount: 0,\n            },\n            listing_images: [],\n            padding_before: 0,\n            padding_after: 0,\n            vehicle: {...defaultVehicle},\n\n            bookings: []\n        };\n        state.originalListing = null;\n    },\n};\n\nconst actions = {\n\n    setAvailableFilters({commit}, data: { years?: number[], makes?: string[], models?: string[] }) {\n        commit(types.SET_LISTING_FILTER_AVAILABLE_FILTERS, data);\n    },\n    toggleListingFilter({commit}, filter: 'year' | 'make' | 'model') {\n        commit(types.TOGGLE_LISTING_FILTER, filter);\n    },\n    setSelectedFilters({commit}, data: { years?: number[], makes?: string[], models?: string[] }) {\n        commit(types.SET_LISTING_FILTER_SELECTED_FILTERS, data);\n    },\n\n    clearFilters({commit}) {\n        commit(types.CLEAR_LISTING_FILTER);\n    },\n\n    /**\n     * Fetch a listing\n     */\n    async fetchListing({commit}, l_id: string) {\n        try {\n            const responseData = await performApiRequest(commit, 'SET_LISTING_LOADING', 'listing', () => axios.get(`/v1/listing/${l_id}`));\n            commit(types.SET_LISTING, responseData.listing);\n            commit(types.SET_CURRENT_LISTING, responseData.listing);\n            commit(types.SET_VEHICLE_FEATURES, responseData?.listing?.vehicle?.details);\n            commit('booking/SET_BOOKING_LISTING', responseData.listing, {root: true});\n            EventBus.$emit('fetch-listing-success');\n\n            commit('SET_LISTING_INIT', true);\n            return responseData.listing;\n        } catch (error) {\n        }\n    },\n\n    /**\n     * Fetch all listings\n     */\n    async fetchListings({commit}) {\n        try {\n            const responseData = await performApiRequest(commit, 'SET_LISTING_LOADING', 'listings', () => axios.get('/v1/listings'));\n            commit(types.SET_ALL_LISTINGS, responseData.listings);\n            EventBus.$emit('fetch-listings-success');\n            commit(types.SET_LISTING_INIT, true);\n        } catch (error) {\n            push.error({\n                message: error?.response?.data?.message || 'There was an error',\n            });\n        }\n    },\n\n    /**\n     * Fetch all fleet resource listings\n     */\n    async fetchFleetResourcesListings({commit}, refresh = false) {\n        if (state.fleetResourceListingsLoaded && !refresh) {\n            return;\n        }\n\n        try {\n            const responseData = await performApiRequest(commit, 'SET_LISTING_LOADING', 'listings', () => axios.get('/v1/fleet-resource-listings'));\n            commit('SET_FLEET_RESOURCE_LISTINGS', responseData.listings);\n        } catch (error) {\n            push.error({\n                message: error?.response?.data?.message || 'There was an error',\n            });\n        }\n    },\n\n\n    /**\n     * Add a listing\n     */\n    async addListing({commit}, listing: ListingInterface) {\n        try {\n            commit('CLEAR_LISTING_FORM_ERRORS');\n\n            const responseData = await performApiRequest(commit, 'SET_LISTING_LOADING', 'addListing', () => axios.post('/v1/listings', listing));\n            commit('SET_CURRENT_LISTING', responseData.listing);\n            push.success({\n                message: 'New listing added successfully!',\n            });\n\n            return responseData.listing;\n        } catch (e) {\n            console.dir(e);\n            const errorMessage = e.response?.data?.message || 'There was an error';\n            const statusCode = e.response?.status;\n\n            commit('SET_LISTING_FORM_ERRORS', e.response.data.errors);\n\n            if (statusCode === 401 || statusCode === 422) {\n                push.error({\n                    message: errorMessage,\n                });\n            } else {\n                commit('SET_LISTING_FORM_ERRORS', e.response.data.errors);\n            }\n\n            throw e;\n        }\n    },\n\n\n    /**\n     * Delete a listing\n     */\n    async deleteListing({commit}, listing: ListingInterface) {\n        try {\n            await performApiRequest(commit, 'SET_LISTING_LOADING', 'deleteListing', () => axios.delete(`/v1/listings/${listing.l_id}`));\n            EventBus.$emit('delete-listing-success');\n            push.success({\n                message: 'Listing has been removed',\n            });\n        } catch (error) {\n            push.error({\n                message: error?.response?.data?.message || 'There was an error',\n            });\n        }\n    },\n\n\n    /**\n     * Update the order of the listings\n     */\n    async updateOrder({commit}, listings: ListingInterface[]) {\n        try {\n            const responseData = await performApiRequest(commit, 'SET_LISTING_LOADING', 'listings_order', () => axios.put('/v1/listings/order', listings));\n            commit('SET_ALL_LISTINGS', responseData.listings);\n            commit('SET_FLEET_RESOURCE_LISTINGS', responseData.listings);\n        } catch (error) {\n            push.error({\n                message: error?.response?.data?.message || 'There was an error',\n            });\n        }\n    },\n\n\n    /**\n     * Get a listings bookings\n     */\n    fetchListingBookings({commit}, l_id: string) {\n        axios.get(`/v1/listings/${l_id}/bookings?future=1`)\n            .then((response) => {\n                commit(types.SET_CURRENT_LISTING_BOOKINGS, response.data.bookings);\n                EventBus.$emit('fetch-listing-success');\n            }).catch(() => {\n        }).finally(() => {\n            commit('SET_LISTING_INIT', true);\n        });\n    },\n\n    /**\n     * Get a listings bookings\n     */\n    async getVehicleIncidents({commit}, l_id: string) {\n        try {\n            const responseData = await performApiRequest(commit, 'SET_LISTING_LOADING', 'getIncidents', () => axios.get(`/v1/vehicle-incidents?l_id=${l_id}`));\n            commit(types.SET_CURRENT_LISTING_INCIDENTS, responseData.incidents);\n            EventBus.$emit('fetch-incidents-success');\n        } catch (error) {\n        }\n    },\n\n    /**\n     * Save a vehicle incident\n     */\n    async saveIncident({commit}, data: VehicleIncident) {\n        try {\n            await performApiRequest(commit, 'SET_LISTING_LOADING', 'saveIncident', () => axios.post('/v1/vehicle-incidents', data));\n            EventBus.$emit('save-incidents-success');\n        } catch (error) {\n        }\n    },\n    /**\n     * Update a vehicle incident\n     */\n    async updateIncident({commit}, data: VehicleIncident) {\n        try {\n            await performApiRequest(commit, 'SET_LISTING_LOADING', 'updateIncident', () => axios.put(`/v1/vehicle-incidents/${data.uuid}`, data));\n            EventBus.$emit('update-incidents-success');\n        } catch (error) {\n        }\n    },\n\n    /**\n     * Delete a vehicle incident\n     */\n    async deleteIncident({commit}, uuid: string) {\n        try {\n            await performApiRequest(commit, 'SET_LISTING_LOADING', 'deleteIncident', () => axios.delete(`/v1/vehicle-incidents/${uuid}`));\n            EventBus.$emit('delete-incidents-success');\n        } catch (error) {\n        }\n    },\n\n\n    /**\n     * Get a listings bookings\n     */\n    checkAvailability({commit}, {l_id, dates}) {\n        axios.get(`/v1/listing/${l_id}/availability?start=${dates.start}&end=${dates.end}`)\n            .then((response) => {\n                commit('SET_LISTING_AVAILABILITY_MESSAGE', get(response, 'data.unavailableDescription', ''));\n            }).catch((e) => {\n            commit('SET_LISTING_AVAILABILITY_MESSAGE', get(e, 'response.data.unavailableDescription', ''));\n        }).finally(() => {\n            commit('SET_LISTING_INIT', true);\n        });\n    },\n\n    /**\n     * Get all listings availability\n     */\n    checkAllAvailability({commit}, dates: { start: string, end: string }) {\n        axios.get(`/v1/listings/availability?start=${dates.start}&end=${dates.end}`)\n            .then((response) => {\n                commit('SET_LISTING_AVAILABILITY_MESSAGE', get(response, 'data.unavailableDescription', ''));\n            }).catch((e) => {\n            commit('SET_LISTING_AVAILABILITY_MESSAGE', get(e, 'response.data.unavailableDescription', ''));\n        }).finally(() => {\n            commit('SET_LISTING_INIT', true);\n        });\n    },\n\n\n    /**\n     * Set an unavailable period\n     */\n    async setUnavailablePeriod({commit}, period: {\n        l_id: string,\n        trip_start: string,\n        trip_end: string,\n        source: string,\n        notes: string,\n        supplemental: boolean\n    }) {\n        try {\n            commit('CLEAR_LISTING_FORM_ERRORS');\n            const responseData = await performApiRequest(commit, 'SET_LISTING_LOADING', 'unavailable_period', () => axios.post(`/v1/listings/${period.l_id}/unavailability`, period));\n            push.success({\n                message: 'Unavailable period set successfully!',\n            });\n            commit(types.SET_CURRENT_LISTING_BOOKINGS, responseData.bookings);\n            EventBus.$emit('set-unavailable-period-success', responseData);\n\n            commit('SET_LISTING_INIT', true);\n        } catch (error) {\n            commit('SET_LISTING_FORM_ERRORS', error.response.data.errors);\n            push.error({\n                message: 'There was an error setting the unavailable period',\n            });\n        }\n    },\n\n    /**\n     * Set an unavailable period from a FW booking\n     */\n    setUnavailablePeriodFromFWBooking({commit}, period: { l_id: string, source: string, b_id: string }) {\n        commit('SET_LISTING_LOADING', {subject: 'unavailable_period', loading: true});\n        commit('CLEAR_LISTING_FORM_ERRORS');\n\n        axios.post(`/v1/listings/${period.l_id}/set-existing-unavailability`, period)\n            .then((response) => {\n                push.success({\n                    message: 'Unavailable period set successfully!',\n                });\n                commit(types.SET_CURRENT_LISTING_BOOKINGS, get(response, 'data.bookings', []));\n                EventBus.$emit('set-unavailable-period-success', response.data);\n            }).catch((e) => {\n            console.dir(get(e, 'response.data.errors'));\n            commit('SET_LISTING_FORM_ERRORS', e.response.data.errors);\n            push.error({\n                message: 'There was an error setting the unavailable period',\n            });\n        }).finally(() => {\n            commit('SET_LISTING_LOADING', {subject: 'unavailable_period', loading: false});\n        });\n    },\n\n\n    /**\n     * Remove an unavailable period\n     */\n    removeUnavailablePeriod({commit}, period: { l_id: string, b_id: string }) {\n        commit('SET_LISTING_LOADING', {subject: 'unavailable_period', loading: true});\n\n        axios.delete(`/v1/listings/${period.l_id}/unavailability/${period.b_id}`)\n            .then((response) => {\n                commit(types.SET_CURRENT_LISTING_BOOKINGS, get(response, 'data.bookings', []));\n                push.success({\n                    message: 'Unavailable period removed successfully!',\n                });\n                EventBus.$emit('RemoveUnavailablePeriodSuccess');\n            }).catch(() => {\n            push.error({\n                message: 'There was an error removing this unavailable period',\n            });\n        }).finally(() => {\n            commit('SET_LISTING_LOADING', {subject: 'unavailable_period', loading: false});\n            commit('SET_LISTING_INIT', true);\n        });\n    },\n\n\n    /**\n     * Update an unavailable period\n     */\n    async updateUnavailablePeriod({commit}, period: {\n        l_id: string,\n        b_id: string,\n        trip_start: string,\n        trip_end: string\n    }) {\n        try {\n            const responseData = await performApiRequest(commit, 'SET_LISTING_LOADING', 'unavailable_period', () => axios.put(`/v1/listings/${period.l_id}/unavailability/${period.b_id}`, period));\n            commit(types.SET_CURRENT_LISTING_BOOKINGS, responseData.bookings);\n            push.success({\n                message: 'Unavailable period updated successfully!',\n            });\n            EventBus.$emit('UpdateUnavailablePeriodSuccess');\n            commit('SET_LISTING_INIT', true);\n\n            return responseData;\n        } catch (error) {\n            EventBus.$emit('update-unavailable-period-failed');\n            push.error({\n                message: error?.response?.data?.message || 'There was an error',\n            });\n        }\n    },\n\n\n    /**\n     * Get a company listing\n     */\n    async fetchCompanySingleListings({commit}, l_id: string) {\n        commit('SET_LISTING_LOADING', {subject: 'listing', loading: true});\n\n        await axios.get(`/v1/listings/${l_id}`)\n            .then((response) => {\n                commit('SET_CURRENT_LISTING', response.data.listing);\n                commit('SET_VEHICLE_FEATURES', get(response.data.listing, 'vehicle.details', {}));\n                commit('SET_VEHICLE_EXTRAS', get(response.data.listing, 'extras', []));\n                EventBus.$emit('fetch-listing-success');\n            }).catch(() => {\n            }).finally(() => {\n                commit('SET_LISTING_LOADING', {subject: 'listing', loading: false});\n                commit('SET_LISTING_INIT', true);\n            });\n    },\n\n    fetchCompanySingleListingExtras({commit}, l_id: string) {\n        commit('SET_LISTING_LOADING', {subject: 'listing_extras', loading: true});\n\n        axios.get(`/v1/listings/${l_id}/extras`)\n            .then((response) => {\n                commit('SET_VEHICLE_EXTRAS', get(response.data, 'extras', []));\n            }).catch(() => {\n        }).finally(() => {\n            commit('SET_LISTING_LOADING', {subject: 'listing_extras', loading: false});\n        });\n    },\n\n    /**\n     * Update a vehicles details\n     */\n    async updateVehicleDetails({commit, dispatch}, data: { v_id: string, l_id: string, vehicleFeatures: string[] }) {\n        try {\n            await performApiRequest(commit, 'SET_LISTING_LOADING', 'vehicleDetails', () => axios.put(`/v1/vehicles/${data.v_id}/details`, data));\n            EventBus.$emit('save-vehicle-details-success');\n            dispatch('fetchCompanySingleListings', data.l_id);\n            commit('SET_LISTING_SNACK', {subject: 'vehicle_details_success', value: true});\n        } catch (error) {\n            push.error({\n                message: error?.response?.data?.message || 'There was an error',\n            });\n        }\n    },\n\n\n    /**\n     * Reset the current listing\n     */\n    resetListing({commit}) {\n        commit(types.RESET_CURRENT_LISTING);\n    },\n\n\n    /**\n     * Save a listing\n     */\n    async saveListing({commit}, listing: ListingInterface) {\n        try {\n            const responseData = await performApiRequest(commit, 'SET_LISTING_LOADING', 'saveListing', () => axios.put(`/v1/listings/${listing.l_id}`, listing));\n            commit('CLEAR_LISTING_FORM_ERRORS');\n            push.success({\n                message: 'Listings saved successfully',\n            });\n            commit('SET_CURRENT_LISTING', responseData.listing);\n            EventBus.$emit('save-listing-success');\n        } catch (e) {\n            commit('SET_LISTING_FORM_ERRORS', e.response.data.errors);\n\n            push.error({\n                message: e.response?.data?.errors?.message || 'There was an error pausing the listing',\n            });\n        }\n    },\n\n\n    /**\n     * Pause a listing\n     */\n    async pauseListing({commit, state}, data: { mode: string, listings: string[] }) {\n        try {\n            await performApiRequest(commit, 'SET_LISTING_LOADING', 'pausing', () => axios.put('/v1/listings/pause', {\n                mode: data.mode,\n                listings: data.listings\n            }));\n            push.success({\n                message: 'Listings saved successfully',\n            });\n            EventBus.$emit('listings-toggle-pause-success');\n\n            // Loop through data.listings and update the paused state\n            data.listings.forEach((listing) => {\n                const index = state.fleetResourceListings.findIndex(item => item.l_id === listing);\n\n                if (index !== -1) {\n                    commit('SET_FLEET_RESOURCE_LISTINGS_DATA', {\n                        l_id: listing,\n                        data: {\n                            paused: !state.fleetResourceListings[index].paused,\n                        },\n                    });\n                }\n            });\n        } catch (error) {\n            push.error({\n                message: error?.response?.data?.message || 'There was an error pausing the listing',\n            });\n        }\n    },\n\n\n    /**\n     * Fetch a Listings daily pricing\n     */\n    async fetchDailyPrices({commit}, {l_id, start, end}) {\n        try {\n            let qString = '';\n            if (start) {\n                qString += `?start=${start}`;\n            }\n            if (end) {\n                qString += start ? `&end=${end}` : `?end=${end}`;\n            }\n\n            const responseData = await performApiRequest(commit, 'SET_LISTING_LOADING', 'dailyPrices', () => axios.get(`/v1/listings/${l_id}/daily_pricing${qString}`));\n            commit(types.SET_LISTING_DAILY_PRICES, responseData.dailyPricing);\n            EventBus.$emit('get-listings-daily-price-success');\n        } catch (error) {\n            push.error({\n                message: error?.response?.data?.message || 'There was an error',\n            });\n        }\n    },\n\n\n    /**\n     * Update a Listings daily pricing\n     */\n    updateDailyPrice({commit}, data: { l_id: string, date: string, price: number, sources: object }) {\n        commit('SET_LISTING_LOADING', {subject: 'updateDailyPrices', loading: true});\n\n        axios.put(`/v1/listings/${data.l_id}/daily_pricing`, data)\n            .then((response) => {\n                EventBus.$emit('update-listings-daily-price-success', response);\n            }).catch(() => {\n        }).finally(() => {\n            commit('SET_LISTING_LOADING', {subject: 'updateDailyPrices', loading: false});\n        });\n    },\n\n\n    /**\n     * Get all Extras\n     */\n    getAllExtras({commit, state}) {\n        commit('SET_LISTING_LOADING', {subject: 'getAllExtras', loading: true});\n\n        axios.get('/v1/extras', state.currentExtra)\n            .then((response) => {\n                commit(types.SET_ALL_EXTRAS, get(response, 'data.extras'));\n            }).catch(() => {\n        }).finally(() => {\n            commit('SET_LISTING_LOADING', {subject: 'getAllExtras', loading: false});\n        });\n    },\n\n\n    /**\n     * Import Turo listings\n     */\n    importTuroListings({commit}, {listings, turo_uuid}) {\n        commit('SET_LISTING_LOADING', {subject: 'import_listings', loading: true});\n        EventBus.$emit('save-imported-listings-started', 'turo');\n\n        axios.post(`/v1/listings/import/turo/${turo_uuid}`, {listings})\n            .then((response) => {\n                commit('company/SET_COMPANY', response.data.company, {root: true});\n                commit('SET_ALL_LISTINGS', get(response.data.company, 'listings', []));\n                EventBus.$emit('save-turo-imported-listings-success');\n                push.success({\n                    message: 'Turo listing Import success',\n                });\n            }).catch((e) => {\n            commit('SET_LISTING_FORM_ERRORS', e.response.data.errors);\n        }).finally(() => {\n            EventBus.$emit('save-turo-imported-listings-failed');\n            commit('SET_LISTING_LOADING', {subject: 'import_listings', loading: false});\n        });\n    },\n\n    syncTuroListings({commit}, {listings, turo_uuid}) {\n        commit('SET_LISTING_LOADING', {subject: 'import_listings', loading: true});\n\n        axios.post(`/v1/listings/sync/turo/${turo_uuid}/listings`, {listings})\n            .then(() => {\n            }).catch((e) => {\n            commit('SET_LISTING_FORM_ERRORS', e.response.data.errors);\n        }).finally(() => {\n            EventBus.$emit('save-turo-imported-listings-failed');\n            commit('SET_LISTING_LOADING', {subject: 'import_listings', loading: false});\n        });\n    },\n\n    /**\n     * Match Turo vehicle\n     */\n    matchTuroVehicle({commit}, data) {\n        commit('SET_LISTING_LOADING', {subject: 'saveListing', loading: true});\n\n        axios.post(`/v1/listings/${data.listing_id}/match-turo-vehicle`, {\n            id: data.turo_vehicle_id,\n            turo_account_uuid: data.turo_account_uuid\n        }).then((response) => {\n            commit('SET_ALL_LISTINGS', get(response.data, 'listings', []));\n            commit('SET_CURRENT_LISTING', get(response.data, 'listing', []));\n            push.success({\n                message: 'Matched Turo vehicle has been added from this listing.',\n            });\n            EventBus.$emit('matched-turo-vehicle-with-listing-success');\n        }).catch((error) => {\n            push.error({\n                message: error?.response?.data?.message || 'There was an error',\n            });\n        }).finally(() => {\n            commit('SET_LISTING_LOADING', {subject: 'saveListing', loading: false});\n        });\n    },\n\n    /**\n     * Match Bouncie vehicles\n     */\n    matchBouncieVehicle({commit}, {l_id, bouncie_uuid}) {\n        commit('SET_LISTING_LOADING', {subject: 'matchBouncieVehicle', loading: true});\n\n        axios.post(`/v1/listings/${l_id}/match-bouncie-vehicle`, {id: bouncie_uuid})\n            .then((response) => {\n                commit('SET_ALL_LISTINGS', get(response.data, 'listings', []));\n                commit('SET_CURRENT_LISTING', get(response.data, 'listing', []));\n                push.success({\n                    message: 'Matched Bouncie vehicle has been added from this listing.',\n                });\n                EventBus.$emit('matched-bouncie-vehicle-with-listing-success');\n            }).catch(() => {\n        }).finally(() => {\n            commit('SET_LISTING_LOADING', {subject: 'matchBouncieVehicle', loading: false});\n        });\n    },\n\n\n    /**\n     * Un-match Bouncie vehicles\n     */\n    unMatchBouncieVehicle({commit}, l_id: string) {\n        commit('SET_LISTING_LOADING', {subject: 'saveListing', loading: true});\n\n        axios.delete(`/v1/listings/${l_id}/matched-bouncie-vehicle`)\n            .then((response) => {\n                commit('SET_ALL_LISTINGS', get(response.data, 'listings', []));\n                commit('SET_CURRENT_LISTING', get(response.data, 'listing', []));\n                push.success({\n                    message: 'Matched Bouncie vehicle has been removed from this listing.',\n                });\n                EventBus.$emit('unmatched-bouncie-vehicle-with-listing-success');\n            }).catch(() => {\n        }).finally(() => {\n            commit('SET_LISTING_LOADING', {subject: 'saveListing', loading: false});\n        });\n    },\n\n    matchTeslaVehicle({commit}, data: { l_id: string, tesla: string }) {\n        commit('SET_LISTING_LOADING', {subject: 'matchingTeslaVehicle', loading: true});\n        axios.post(`/v1/listings/${data.l_id}/match-tesla-vehicle`, {uuid: data.tesla})\n            .then((response) => {\n                commit('SET_ALL_LISTINGS', get(response.data, 'listings', []));\n                commit('SET_CURRENT_LISTING', get(response.data, 'listing', []));\n                commit('tesla/SET_TESLA_CONNECTIONS', get(response.data, 'company.connections.tesla', []), {root: true});\n                commit('tesla/SET_CURRENT_WORKING_TESLA_VEHICLE', get(response.data, 'teslaVehicle', []), {root: true});\n                push.success({\n                    message: 'Matched Tesla vehicle has been added from this listing.',\n                });\n                EventBus.$emit('matched-tesla-vehicle-with-listing-success');\n            }).catch(() => {\n        }).finally(() => {\n            commit('SET_LISTING_LOADING', {subject: 'matchingTeslaVehicle', loading: false});\n        });\n    },\n\n    matchGetaroundVehicle({commit}, vehicle) {\n        commit('SET_LISTING_LOADING', {subject: 'saveListing', loading: true});\n        axios.post(`/v1/company/${StorageService.getCompanyUuid()}/listings/${state.currentListing.l_id}/match-getaround-vehicle`, {id: vehicle.id})\n            .then((response) => {\n                commit('SET_ALL_LISTINGS', response.data.listings);\n                commit('SET_CURRENT_LISTING', response.data.listing);\n                push.success({\n                    message: 'Matched Getaround vehicle has been added from this listing.',\n                });\n                EventBus.$emit('matched-getaround-vehicle-with-listing-success');\n            }).catch(() => {\n        }).finally(() => {\n            commit('SET_LISTING_LOADING', {subject: 'saveListing', loading: false});\n        });\n    },\n\n\n    /**\n     * Un-match a Turo vehicle from Fleetwire\n     */\n    unMatchTuroVehicle({commit, state}) {\n        commit('SET_LISTING_LOADING', {subject: 'saveListing', loading: true});\n        axios.delete(`/v1/listings/${state.currentListing.l_id}/matched-turo-vehicle`)\n            .then((response) => {\n                commit('SET_ALL_LISTINGS', response.data.listings);\n                commit('SET_CURRENT_LISTING', response.data.listing);\n                push.success({\n                    message: 'Matched Turo vehicle has been removed from this listing.',\n                });\n            }).catch(() => {\n        }).finally(() => {\n            commit('SET_LISTING_LOADING', {subject: 'saveListing', loading: false});\n        });\n    },\n\n    unMatchTeslaVehicle({commit}, listing: ListingInterface) {\n        commit('SET_LISTING_LOADING', {subject: 'matchingTeslaVehicle', loading: true});\n        axios.delete(`/v1/company/${StorageService.getCompanyUuid()}/listings/${listing.l_id}/matched-tesla-vehicle`)\n            .then((response) => {\n                commit('SET_ALL_LISTINGS', response.data.listings);\n                commit('SET_CURRENT_LISTING', response.data.listing);\n                commit('tesla/SET_CURRENT_WORKING_TESLA_VEHICLE', response.data?.teslaVehicle, {root: true});\n                push.success({\n                    message: 'Matched Tesla vehicle has been removed from this listing.',\n                });\n            }).catch(() => {\n        }).finally(() => {\n            commit('SET_LISTING_LOADING', {subject: 'matchingTeslaVehicle', loading: false});\n        });\n    },\n\n    unMatchGetaroundVehicle({commit}) {\n        commit('SET_LISTING_LOADING', {subject: 'saveListing', loading: true});\n        axios.delete(`/v1/company/${StorageService.getCompanyUuid()}/listings/${state.currentListing.l_id}/matched-getaround-vehicle`)\n            .then((response) => {\n                commit('SET_CURRENT_LISTING', response.data.listing);\n                push.success({\n                    message: 'Matched Getaround vehicle has been removed from this listing.',\n                });\n            }).catch(() => {\n        }).finally(() => {\n            commit('SET_LISTING_LOADING', {subject: 'saveListing', loading: false});\n        });\n    },\n\n\n    /**\n     * Archive a listing\n     */\n    async archiveListing({commit}, listing: ListingInterface) {\n        try {\n            await performApiRequest(commit, 'SET_LISTING_LOADING', 'archiveListing', () => axios.post(`/v1/listings/${listing.l_id}/archive`));\n            push.success({\n                message: 'Listing has been archived',\n            });\n        } catch (error) {\n            push.error({\n                message: error?.response?.data?.message || 'There was an error',\n            });\n        }\n    },\n\n\n    /**\n     * Delete a listing\n     */\n    async deleteListings({commit}, listings: string[]) {\n        try {\n            await performApiRequest(commit, 'SET_LISTING_LOADING', 'deleteListing', () => axios.post('/v1/listings/delete', {listings}));\n            EventBus.$emit('delete-listing-success');\n            push.success({\n                message: 'Listing has been removed',\n            });\n        } catch (error) {\n            push.error({\n                message: error?.response?.data?.message || 'There was an error',\n            });\n        }\n    },\n\n    updateListingImageOrder({commit}, images: string[]) {\n        console.dir(images);\n        commit('SET_LISTING_LOADING', {subject: 'saveListing', loading: true});\n\n        axios.put(`/v1/listings/${state.currentListing.l_id}/images`, {images})\n            .then(() => {\n            }).catch(() => {\n        }).finally(() => {\n            commit('SET_LISTING_LOADING', {subject: 'saveListing', loading: false});\n        });\n    },\n\n    /**\n     *\n     * @param commit\n     */\n    resetAndReImportCarShareImages({commit}) {\n        commit('SET_LISTING_LOADING', {subject: 'importImages', loading: true});\n        axios.post(`/v1/listings/${state.currentListing.l_id}/reset-import-images`)\n            .then(() => {\n                EventBus.$emit('reimport-listing-image-success');\n            }).catch((e) => {\n            push.error({\n                message: e?.response?.data?.message || 'There was an error',\n            });\n        }).finally(() => {\n            commit('SET_LISTING_LOADING', {subject: 'importImages', loading: false});\n        });\n    },\n\n    /**\n     *\n     */\n    async getVehicleFeatures({commit}) {\n        try {\n            const responseData = await performApiRequest(commit, 'SET_LISTING_LOADING', 'vehicleFeatures', () => axios.get('/v1/vehicle-features'));\n            commit(types.SET_ALL_AVAILABLE_FEATURES, responseData.features);\n            EventBus.$emit('sync-listing-data-success', responseData.details);\n        } catch (error) {\n            push.error({\n                message: error?.response?.data?.message || 'There was an error',\n            });\n        }\n    },\n\n    /**\n     * Sync car share data\n     */\n    syncCarShareData({commit}) {\n        commit('SET_LISTING_LOADING', {subject: 'syncCarShareData', loading: true});\n\n        axios.post(`/v1/listings/${state.currentListing.l_id}/sync-car-share-data`)\n            .then((response) => {\n                EventBus.$emit('sync-listing-data-success', response.data.details);\n            }).catch(() => {\n        }).finally(() => {\n            commit('SET_LISTING_LOADING', {subject: 'syncCarShareData', loading: false});\n        });\n    },\n\n\n    /**\n     * Delete a single listing image\n     */\n    deleteListingImage({state, commit}, image: string) {\n        commit('SET_LISTING_LOADING', {subject: 'importDelete', loading: true});\n\n        axios.delete(`/v1/listings/${state.currentListing.l_id}/images/${image}`)\n            .then((response) => {\n                push.success({\n                    message: 'Listing image removed',\n                });\n                commit(types.SET_CURRENT_LISTING, response.data.listing);\n                EventBus.$emit('delete-listing-image-success');\n            }).catch(() => {\n        }).finally(() => {\n            commit('SET_LISTING_LOADING', {subject: 'importDelete', loading: false});\n        });\n    },\n\n    setListingBookableTimes({commit}) {\n        const startTimes = [];\n        let time: string;\n        let timeF: string;\n        let ampm: string;\n        let lefZero: string | number;\n\n        for (let i = 0; i < 24; i++) {\n            time = `${i}:00`;\n            timeF = i > 12 ? `${(i - 12)}:00` : `${i}:00`;\n            ampm = i >= 12 ? 'pm' : 'am';\n            lefZero = i >= 10 ? '' : 0;\n            startTimes.push({timeF: `${timeF} ${ampm}`, time: `${lefZero}${time}`});\n\n            time = `${i}:30`;\n            timeF = i >= 12 ? `${(i - 12)}:30` : `${i}:30`;\n            ampm = i >= 12 ? 'pm' : 'am';\n            lefZero = i >= 10 ? '' : 0;\n            startTimes.push({timeF: `${timeF} ${ampm}`, time: `${lefZero}${time}`});\n        }\n\n        commit('SET_BOOKABLE_TIMES', startTimes);\n    },\n\n    async vinDecode({commit}, vin: string) {\n        if (vin.length === 17) {\n            try {\n                const responseData = await performApiRequest(commit, 'SET_LISTING_LOADING', 'decoding_vin', () => axios.get(`/v1/decode-vin/${vin}`));\n                EventBus.$emit('listing-vin-decoded-success', responseData.vehicleData);\n                commit('SET_CURRENT_DECODED_VIN', responseData.vehicleData);\n            } catch (error) {\n                push.error({\n                    message: error?.response?.data?.message || 'There was an error',\n                });\n            }\n        }\n    },\n\n\n    /**\n     * Import listings from csv\n     */\n    importCSVListings({commit}, listings) {\n        commit('SET_LISTING_LOADING', {subject: 'import_listings', loading: true});\n        commit('CLEAR_LISTING_FORM_ERRORS');\n\n        axios.post('/v1/listings/import/csv', {listings})\n            .then((response) => {\n                commit('listing/SET_ALL_LISTINGS', response.data.listings, {root: true});\n                push.success({\n                    message: 'Imported listings successfully',\n                });\n                EventBus.$emit('import-csv-vehicles-success');\n            }).catch((e) => {\n            console.dir(e.response.data);\n            commit('SET_LISTING_FORM_ERRORS', e.response.data.errors);\n\n            push.error({\n                message: e.response?.data?.errors?.plan_limits?.[0] || 'There was an error',\n            });\n        }).finally(() => {\n            commit('SET_LISTING_LOADING', {subject: 'import_listings', loading: false});\n        });\n    },\n\n    /**\n     * Update odometer with a provider.\n     */\n    updateOdomWithProvider({commit}, {listing, provider}) {\n        commit('SET_LISTING_LOADING', {subject: 'updateOdomProvider', loading: true});\n\n        axios.post(`/v1/listings/${listing.l_id}/provider-update-odometer`, {provider})\n            .then(() => {\n                EventBus.$emit('update-odometer-with-provider-success');\n            }).catch(() => {\n        }).finally(() => {\n            commit('SET_LISTING_LOADING', {subject: 'updateOdomProvider', loading: false});\n        });\n    },\n};\n\nconst listingModule: Module<ListingState, RootState> = {\n    namespaced: true,\n    state,\n    getters,\n    actions,\n    mutations,\n};\n\nexport default listingModule;","import axios from 'axios';\nimport {Form} from '@/plugins/FWForms/index';\nimport {EventBus} from '@/plugins/eventBus';\nimport {get} from 'lodash';\nimport * as types from '../mutation-types';\n\nexport interface LulaState {\n    init: boolean;\n    loading: Record<string, boolean>;\n    form: Form<any>;\n    connections: any[];\n    vehicles: any[];\n}\n\nconst state: LulaState = {\n    init: false,\n    loading: {\n        login: false,\n        vehicles: false,\n        matching: false,\n    },\n    form: new Form(),\n    connections: [],\n    vehicles: [],\n};\n\nconst getters = {\n    init: (state: LulaState) => state.init,\n    loading: (state: LulaState) => state.loading,\n    form: (state: LulaState) => state.form,\n    connections: (state: LulaState) => state.connections,\n    vehicles: (state: LulaState) => state.vehicles,\n};\n\nconst mutations = {\n    [types.SET_LULA_LOADING](state: LulaState, loading: { subject: string, loading: boolean }) {\n        state.loading[loading.subject] = loading.loading;\n    },\n    [types.SET_LULA_CONNECTIONS](state: LulaState, connections) {\n        state.connections = connections;\n    },\n    [types.SET_LULA_VEHICLES](state: LulaState, vehicles) {\n        state.vehicles = vehicles;\n    },\n};\n\nconst actions = {\n\n\n    /**\n     * Get tax categories\n     */\n    login({commit}, payload) {\n        commit('SET_LULA_LOADING', {subject: 'login', loading: true});\n\n        axios.post('/v1/lula/login', payload)\n            .then(() => {\n                // commit('SET_LULA_CONNECTIONS', get(response, 'data.lula', []));\n            }).catch(() => {\n        }).finally(() => {\n            commit('SET_LULA_LOADING', {subject: 'login', loading: false});\n        });\n    },\n\n    fetchVehicles({commit}, payload) {\n        commit('SET_LULA_LOADING', {subject: 'vehicles', loading: true});\n\n        axios.post('/v1/lula/vehicles', payload)\n            .then((response) => {\n                commit('SET_LULA_VEHICLES', get(response, 'data.vehicles', []));\n            }).catch(() => {\n        }).finally(() => {\n            commit('SET_LULA_LOADING', {subject: 'vehicles', loading: false});\n        });\n    },\n\n    /**\n     * Match Lula Vehicles\n     */\n    matchLulaVehicle({commit}, data) {\n        commit('SET_LULA_LOADING', {subject: 'vehicles', loading: true});\n\n        axios.post('/v1/lula/match-vehicle', data)\n            .then(() => {\n                EventBus.$emit('match-lula-vehicle-success');\n            }).catch(() => {\n        }).finally(() => {\n            commit('SET_LULA_LOADING', {subject: 'vehicles', loading: false});\n        });\n    },\n\n    /**\n     * UnMatch Lula Vehicles\n     */\n    unMatchLulaVehicle({commit}, data) {\n        commit('SET_LULA_LOADING', {subject: 'matching', loading: true});\n\n        axios.post('/v1/lula/remove-matched-vehicle', data)\n            .then(() => {\n                EventBus.$emit('match-lula-vehicle-success');\n            }).catch(() => {\n        }).finally(() => {\n            commit('SET_LULA_LOADING', {subject: 'matching', loading: false});\n        });\n    },\n};\n\nexport default {\n    namespaced: true,\n    state,\n    mutations,\n    actions,\n    getters,\n};\n","import axios from 'axios';\nimport * as types from '../mutation-types';\nimport {performApiRequest} from \"@/store/helpers/vuex-helpers\";\nimport {Note} from \"@/types\";\n\nexport type NotableType = 'order' | 'document' | 'customer' | '*';\n\nexport type NewNote = {\n    body: string,\n    notable_id: string,\n    notable_type: string,\n}\n\nexport type NotesPaginateOptions = {\n    page?: number,\n    sortBy?: string,\n    sortDesc?: boolean[],\n    itemsPerPage?: number,\n    notable_type?: NotableType,\n    notable_id?: string,\n}\n\nexport interface NoteResponseMeta {\n    count: number,\n    current_page: number,\n    next_page: number,\n    per_page: number,\n    total: number,\n    total_pages: number,\n}\n\nexport interface NoteResponseData {\n    notes: {\n        data: Note[],\n        meta: NoteResponseMeta,\n    }\n    notable_type: NotableType,\n}\n\nexport interface NotesState {\n    loading: Record<string, boolean>,\n    notes: Note[],\n    note: Note,\n}\n\nconst state: NotesState = {\n    loading: {\n        notes: false,\n        createNote: false,\n        deleteNote: false,\n    },\n    notes: [],\n    note: null,\n};\n\nconst getters = {\n    notes: (state: NotesState) => state.notes,\n    note: (state: NotesState) => state.note,\n    loading: (state: NotesState) => state.loading,\n};\n\nconst mutations = {\n    [types.SET_NOTES_LOADING](state: NotesState, loading: { subject: string, loading: boolean }) {\n        state.loading[loading.subject] = loading.loading;\n    },\n};\n\nconst actions = {\n\n\n    /**\n     * Get all notes.\n     */\n    async getNotes({commit}, options: NotesPaginateOptions): Promise<NoteResponseData> {\n        const {\n            page = 1,\n            sortBy = 'created_at',\n            sortDesc = [true],\n            itemsPerPage = 5,\n            notable_type = '*',\n            notable_id = null,\n        } = options;\n\n        const params = new URLSearchParams({\n            page: page.toString(),\n            sortBy,\n            sortDesc: sortDesc.toString(), // Convert array to string\n            itemsPerPage: itemsPerPage.toString(),\n            notableType: notable_type,\n            notable_id: notable_id ? notable_id.toString() : '',\n        }).toString();\n\n        const responseData = await performApiRequest(commit, 'SET_NOTES_LOADING', 'notes', () => axios.get(`/v1/notes?${params}`));\n        return {\n            notes: responseData.notes,\n            notable_type,\n        };\n    },\n\n\n    /**\n     * Create a note.\n     */\n    async createNote({commit}, note: NewNote) {\n        const responseData = await performApiRequest(commit, 'SET_NOTES_LOADING', 'createNote', () => axios.post('/v1/notes', note));\n        return responseData.note;\n    },\n\n\n    /**\n     * Delete a note.\n     * @throws Error\n     */\n    async deleteNote({commit}, uuid: string) {\n        await performApiRequest(commit, 'SET_NOTES_LOADING', 'deleteNote', () => axios.delete(`/v1/notes/${uuid}`));\n    },\n};\n\nexport default {\n    namespaced: true,\n    state,\n    mutations,\n    actions,\n    getters,\n};\n","import axios from 'axios';\nimport {EventBus} from '@/plugins/eventBus';\nimport {Form} from '@/plugins/FWForms/index';\nimport * as types from '../mutation-types';\nimport {performApiRequest} from \"@/store/helpers/vuex-helpers\";\n\nexport interface OutdoorsyState {\n    loading: Record<string, boolean>;\n    form: Form<any>;\n    connections: any[];\n    listings: any[];\n    bookings: any[];\n}\n\nconst state: OutdoorsyState = {\n    loading: {\n        login: false,\n        matching: false,\n        toggle: false,\n        listings: false,\n    },\n    form: new Form(),\n    connections: [],\n    listings: [],\n    bookings: [],\n};\n\nconst getters = {\n    form: (state: OutdoorsyState) => state.form,\n    connections: (state: OutdoorsyState) => state.connections,\n    loading: (state: OutdoorsyState) => state.loading,\n    listings: (state: OutdoorsyState) => state.listings,\n    bookings: (state: OutdoorsyState) => state.bookings,\n};\n\nconst mutations = {\n    [types.SET_OUTDOORSY_LOADING](state: OutdoorsyState, loading: { subject: string, loading: boolean }) {\n        state.loading[loading.subject] = loading.loading;\n    },\n    [types.SET_OUTDOORSY_CONNECTIONS](state: OutdoorsyState, connections) {\n        state.connections = connections;\n    },\n    [types.SET_OUTDOORSY_LISTINGS](state: OutdoorsyState, listings) {\n        state.listings = listings;\n    },\n    [types.SET_OUTDOORSY_BOOKINGS](state: OutdoorsyState, bookings) {\n        state.bookings = bookings;\n    },\n};\n\nconst actions = {\n\n\n    /**\n     * Login to Outdoorsy\n     *\n     * @param commit\n     * @param {Object} credentials\n     */\n    async login({commit}, credentials) {\n        try {\n            const responseData = await performApiRequest(commit, 'SET_OUTDOORSY_LOADING', 'login', () => axios.post(`/v1/connections/outdoorsy`, credentials));\n            EventBus.$emit('outdoorsy-connection-successful', responseData?.providers);\n            commit('SET_OUTDOORSY_CONNECTIONS', responseData?.providers);\n            EventBus.$emit('SystemMessage', {\n                type: 'success',\n                message: 'Outdoorsy connection connected successfully!',\n            });\n        } catch (error) {\n            EventBus.$emit('SystemMessage', {\n                type: 'error',\n                message: 'Outdoorsy connection connection error.',\n            });\n        }\n    },\n\n\n    /**\n     * Delete Outdoorsy\n     *\n     * @param commit\n     * @param {Object} outdoorsy\n     */\n    async delete({commit}, outdoorsy) {\n        try {\n            const responseData = await performApiRequest(commit, 'SET_OUTDOORSY_LOADING', 'delete', () => axios.delete(`/v1/connections/outdoorsy/${outdoorsy.uuid}`));\n            EventBus.$emit('delete-outdoorsy-connection-success');\n            commit('SET_OUTDOORSY_CONNECTIONS', responseData.providers);\n            EventBus.$emit('SystemMessage', {\n                type: 'success',\n                message: 'Outdoorsy connection deleted successfully!',\n            });\n        } catch (error) {\n        }\n    },\n\n\n    /**\n     * Toggle Outdoorsy active\n     *\n     * @param commit\n     * @param {Object} outdoorsy\n     */\n    async toggleActive({commit}, outdoorsy) {\n        commit('SET_OUTDOORSY_LOADING', {subject: 'toggle', loading: true});\n\n        try {\n            const responseData = await performApiRequest(commit, 'SET_OUTDOORSY_LOADING', 'toggle', () => axios.put(`/v1/connections/outdoorsy/${outdoorsy.uuid}/active`));\n            commit('SET_OUTDOORSY_LISTINGS', responseData?.listings);\n            EventBus.$emit('toggle-outdoorsy-listings-success');\n            EventBus.$emit('SystemMessage', {\n                type: 'success',\n                message: 'Outdoorsy connection toggled successfully!',\n            });\n        } catch (error) {\n        }\n    },\n\n\n    /**\n     * Fetch Outdoorsy listings\n     *\n     * @param commit\n     * @param {String} outdoorsy_uuid\n     */\n    async fetchOutdoorsyListings({commit}, outdoorsy_uuid) {\n        try {\n            const responseData = await performApiRequest(commit, 'SET_OUTDOORSY_LOADING', 'listings', () => axios.get(`/v1/connections/outdoorsy/${outdoorsy_uuid}/vehicles`));\n            commit('SET_OUTDOORSY_LISTINGS', responseData?.listings);\n            EventBus.$emit('fetch-outdoorsy-listings-success');\n        } catch (error) {\n        }\n    },\n\n\n    /**\n     * Fetch Outdoorsy bookings\n     *\n     * @param commit\n     * @param {String} outdoorsy_uuid\n     */\n    async fetchBookings({commit}, outdoorsy_uuid) {\n        try {\n            const responseData = await performApiRequest(commit, 'SET_OUTDOORSY_LOADING', 'listings', () => axios.get(`/v1/connections/outdoorsy/${outdoorsy_uuid}/vehicles`));\n            commit('SET_OUTDOORSY_BOOKINGS', responseData?.listings);\n            EventBus.$emit('fetch-outdoorsy-listings-success');\n        } catch (error) {\n        }\n    },\n\n};\n\nexport default {\n    namespaced: true,\n    state,\n    mutations,\n    actions,\n    getters,\n};\n","import {asyncRoutes, constantRoutes} from '@/router/routes';\nimport * as types from '../mutation-types';\nimport type {RouteMeta, RouteRecordRaw} from 'vue-router';\n\n\n/**\n * Check if it matches the current user right by 'meta.role'\n */\nfunction canAccess(roles: string[], permissions: string[], route: RouteRecordRaw): boolean {\n    const meta: RouteMeta | undefined = route.meta;\n\n    if (!meta) return true; // If no meta, allow access\n\n    let hasRole = true;\n    let hasPermission = true;\n\n    if (meta.roles || meta.permissions) {\n        hasRole = meta.roles ? roles.some(role => meta.roles!.includes(role)) : false;\n        hasPermission = meta.permissions ? permissions.some(permission => meta.permissions!.includes(permission)) : false;\n    }\n\n    return hasRole || hasPermission;\n}\n\n/**\n * Find all routes of this role\n * @param routes asyncRoutes\n * @param roles\n * @param permissions\n */\nfunction filterAsyncRoutes(\n    routes: RouteRecordRaw[],\n    roles: string[],\n    permissions: string[]\n): RouteRecordRaw[] {\n    const res: RouteRecordRaw[] = [];\n\n    console.log('%c 🎯 Filtering Async Routes...', 'color: blue; font-weight: bold;');\n\n\n    routes.forEach((route) => {\n        const tmp: RouteRecordRaw = {...route};\n\n        console.log('%c 🔍 Evaluating Route:', 'color: purple; font-weight: bold;', tmp);\n\n        if (canAccess(roles, permissions, tmp)) {\n            console.log('%c ✅ Access Granted', 'color: green; font-weight: bold;', tmp.path);\n\n            if (tmp.children) {\n                tmp.children = filterAsyncRoutes(tmp.children, roles, permissions);\n            }\n\n            res.push(tmp);\n        } else {\n            console.log('%c 🚫 Access Denied', 'color: red; font-weight: bold;', tmp.path);\n        }\n    });\n\n    return res;\n}\n\nexport interface PermissionState {\n    routes: any[];\n    addRoutes: any[];\n}\n\nconst state: PermissionState = {\n    routes: [],\n    addRoutes: [],\n};\n\nconst getters = {\n    permission_routes: (state: PermissionState) => state.routes,\n};\n\nconst mutations = {\n    [types.SET_ROUTES](state: PermissionState, routes: RouteRecordRaw[]) {\n        console.dir('SET_ROUTES');\n        console.dir(routes);\n        state.addRoutes = routes;\n        state.routes = constantRoutes.concat(routes);\n    },\n};\n\nconst actions = {\n    generateRoutes({commit}, {roles, permissions}) {\n        console.log('%c 🚀 Generating Routes...', 'color: red; font-weight: bold;');\n\n        return new Promise((resolve) => {\n            try {\n                let accessedRoutes: RouteRecordRaw[];\n\n                if (roles.includes('admin')) {\n                    console.log('%c 🎩 Admin detected - Granting full access...', 'color: green; font-weight: bold;');\n                    accessedRoutes = asyncRoutes;\n                } else {\n                    console.log('%c 🔍 Filtering routes based on roles & permissions...', 'color: blue; font-weight: bold;');\n                    accessedRoutes = filterAsyncRoutes(asyncRoutes, roles, permissions);\n                }\n\n                console.log('%c ✅ Routes successfully generated!', 'color: lime; font-weight: bold;');\n                commit(types.SET_ROUTES, accessedRoutes);\n\n                resolve(accessedRoutes);\n            } catch (error) {\n                console.error('%c ❌ Error in generateRoutes:', 'color: red; font-weight: bold;', error);\n                resolve([]); // Resolve with an empty array to prevent breaking functionality\n            }\n        });\n    },\n};\n\nexport default {\n    namespaced: true,\n    state,\n    mutations,\n    actions,\n    getters,\n};\n","import {EventBus} from '@/plugins/eventBus';\nimport axios from 'axios';\nimport * as types from '@/store/mutation-types';\nimport {Form} from '@/plugins/FWForms/index';\nimport {performApiRequest} from \"@/store/helpers/vuex-helpers\";\n\nexport interface PricingState {\n    loading: Record<string, boolean>;\n    currentWorkingPricingStructure: any;\n    couponForm: Form<any>;\n    pricingRules: any[];\n    pricingStructure: any;\n    pricingStructures: any[];\n}\n\n// state\nconst state: PricingState = {\n    loading: {\n        get: false,\n        create: false,\n        update: false,\n        delete: false,\n        toggle: false,\n        structures: false,\n        structure: false,\n        structureUpdate: false,\n        structureDelete: false,\n        structureCreate: false,\n    },\n    currentWorkingPricingStructure: {\n        uuid: null,\n        name: '',\n        price_example: 100,\n        added_amount: 100,\n        duration_unit: 'days',\n        multiplier: 1,\n        price_tiers: [\n            {\n                name: '1 day',\n                quantity: 1,\n                period: 'days',\n                multiplier: 1,\n                example_price: 100,\n            },\n        ],\n    },\n    couponForm: new Form(),\n    pricingRules: [],\n    pricingStructure: null,\n    pricingStructures: [],\n};\n\nconst getters = {\n    loading: state => state.loading,\n    pricingRules: state => state.pricingRules,\n    pricingStructure: state => state.pricingStructure,\n    pricingStructures: state => state.pricingStructures,\n    currentWorkingPricingStructure: state => state.currentWorkingPricingStructure,\n};\n\nconst mutations = {\n    [types.SET_PRICING_LOADING](state, loading) {\n        state.loading[loading.subject] = loading.loading;\n    },\n    [types.SET_PRICING_RULES](state, rules) {\n        state.pricingRules = rules;\n    },\n    [types.SET_PRICING_STRUCTURES](state, data) {\n        state.pricingStructures = data;\n    },\n    [types.SET_PRICING_STRUCTURE](state, data) {\n        state.pricingStructure = data;\n    },\n    [types.RESET_CURRENT_WORKING_PRICING_STRUCTURE](state) {\n        state.currentWorkingPricingStructure = {\n            uuid: null,\n            name: '',\n            price_example: 100,\n            added_amount: 100,\n            duration_unit: 'days',\n            multiplier: 1,\n            price_tiers: [\n                {\n                    name: '1 day',\n                    quantity: 1,\n                    period: 'days',\n                    multiplier: 1,\n                    example_price: 100,\n                },\n            ],\n        };\n    },\n};\n\nconst actions = {\n\n    /**\n     * Get pricing rules\n     */\n    getPricingRules({commit}) {\n        commit('SET_PRICING_LOADING', {subject: 'get', loading: true});\n        return axios.get('/v1/pricing-rules')\n            .then((response) => {\n                commit('SET_PRICING_RULES', response?.data?.rules);\n            }).catch(() => {\n            }).finally(() => {\n                commit('SET_PRICING_LOADING', {subject: 'get', loading: false});\n            });\n    },\n\n    /**\n     * Create pricing rule\n     *\n     * @param commit\n     * @param {Object} rule\n     */\n    async createPricingRule({commit}, rule) {\n        commit('SET_PRICING_LOADING', {subject: 'create', loading: true});\n\n        try {\n            await performApiRequest(commit, 'SET_PRICING_LOADING', 'create', () => axios.post('/v1/pricing-rules', rule));\n            EventBus.$emit('create-pricing-rules-success');\n        } catch (error) {\n            EventBus.$emit('SystemMessage', {\n                type: 'error',\n                message: error?.response?.data?.message || 'There was an error',\n            });\n        }\n    },\n\n    /**\n     * Update pricing rule\n     *\n     * @param state\n     * @param commit\n     * @param {Object} ruleData\n     */\n    savePricingRule({state, commit}, ruleData) {\n        commit('SET_PRICING_LOADING', {subject: 'update', loading: true});\n\n        axios.put(`/v1/pricing-rules/${ruleData.uuid}`, ruleData)\n            .then(() => {\n                EventBus.$emit('update-pricing-rules-success');\n            }).catch(() => {\n        }).finally(() => {\n            commit('SET_PRICING_LOADING', {subject: 'update', loading: false});\n        });\n    },\n\n    /**\n     * Delete pricing rules\n     *\n     * @param commit\n     * @param {Array} uuids\n     */\n    async deletePricingRules({commit}, uuids) {\n        try {\n            await performApiRequest(commit, 'SET_PRICING_LOADING', 'delete', () => axios.post('/v1/pricing-rules/delete', {uuids}));\n            EventBus.$emit('delete-pricing-rules-success');\n        } catch (error) {\n            EventBus.$emit('SystemMessage', {\n                type: 'error',\n                message: error?.response?.data?.message || 'There was an error',\n\n            });\n        }\n    },\n\n    /**\n     * Pricing structures\n     *\n     * @param commit\n     */\n    getPricingStructures({commit}) {\n        commit('SET_PRICING_LOADING', {subject: 'structures', loading: true});\n\n        axios.get('/v1/price-structures')\n            .then((response) => {\n                commit('SET_PRICING_STRUCTURES', response?.data?.data);\n            })\n            .catch(() => {\n            }).finally(() => {\n            commit('SET_PRICING_LOADING', {subject: 'structures', loading: false});\n        });\n    },\n\n    /**\n     * Single pricing structures\n     *\n     * @param commit\n     * @param {String} uuid\n     */\n    getPricingStructure({commit}, uuid) {\n        commit('SET_PRICING_LOADING', {subject: 'structure', loading: true});\n\n        axios.get(`/v1/price-structures/${uuid}`)\n            .then((response) => {\n                commit('SET_PRICING_STRUCTURE', response?.data?.data);\n            })\n            .catch(() => {\n            }).finally(() => {\n            commit('SET_PRICING_LOADING', {subject: 'structure', loading: false});\n        });\n    },\n\n    /**\n     * Save pricing structures\n     *\n     * @param commit\n     * @param {Object} data\n     */\n    savePriceStructure({commit}, data) {\n        commit('SET_PRICING_LOADING', {subject: 'structureCreate', loading: true});\n\n        axios.post('/v1/price-structures', data)\n            .then(() => {\n                EventBus.$emit('create-pricing-structure-success');\n            })\n            .catch(() => {\n            }).finally(() => {\n            commit('SET_PRICING_LOADING', {subject: 'structureCreate', loading: false});\n        });\n    },\n\n    /**\n     * Update pricing structures\n     *\n     * @param commit\n     * @param {Object} data\n     */\n    updatePriceStructure({commit}, data) {\n        commit('SET_PRICING_LOADING', {subject: 'structureUpdate', loading: true});\n\n        axios.put(`/v1/price-structures/${data.uuid}`, data)\n            .then(() => {\n                EventBus.$emit('update-pricing-structure-success');\n                EventBus.$emit('SystemMessage', {\n                    type: 'success',\n                    message: 'Update successful',\n                });\n            })\n            .catch((e) => {\n                EventBus.$emit('SystemMessage', {\n                    type: 'error',\n                    message: e?.response?.data?.message || 'There was an error',\n                });\n            }).finally(() => {\n            commit('SET_PRICING_LOADING', {subject: 'structureUpdate', loading: false});\n        });\n    },\n\n    /**\n     * Delete pricing structures\n     *\n     * @param commit\n     * @param {Object} data\n     */\n    deletePriceStructure({commit}, data) {\n        commit('SET_PRICING_LOADING', {subject: 'structureDelete', loading: true});\n\n        axios.delete(`/v1/price-structures/${data.uuid}`)\n            .then(() => {\n                EventBus.$emit('delete-pricing-structure-success');\n            })\n            .catch((e) => {\n                EventBus.$emit('SystemMessage', {\n                    type: 'error',\n                    message: e?.response?.data?.message || 'There was an error',\n                });\n            }).finally(() => {\n            commit('SET_PRICING_LOADING', {subject: 'structureDelete', loading: false});\n        });\n    },\n\n};\n\nexport default {\n    namespaced: true,\n    state,\n    mutations,\n    actions,\n    getters,\n};\n","import axios from 'axios';\nimport {EventBus} from '@/plugins/eventBus';\nimport {get} from 'lodash';\nimport {Form} from '@/plugins/FWForms/index';\nimport * as types from '../mutation-types';\nimport {performApiRequest} from '@/store/helpers/vuex-helpers';\n\nexport interface Provider {\n    active: boolean,\n    created_at: string,\n    email: string | null,\n    provider: string,\n    publishable_key: string,\n    uid: string,\n    updated_at: string,\n    uuid: string,\n}\n\nexport interface ProvidersState {\n    loading: Record<string, boolean>,\n    form: Form<any>,\n    paymentProviders: Provider[],\n}\n\nconst state: ProvidersState = {\n    loading: {\n        get: false,\n        delete: false,\n        toggle: false,\n        matching: false,\n        create_unavailability: false,\n    },\n    form: new Form(),\n    paymentProviders: [],\n};\n\nconst getters = {\n    form: (state: ProvidersState) => state.form,\n    loading: (state: ProvidersState) => state.loading,\n    paymentProviders: (state: ProvidersState) => state.paymentProviders,\n};\n\nconst mutations = {\n    [types.SET_PROVIDERS_LOADING](state: ProvidersState, loading: { subject: string, loading: boolean }) {\n        state.loading[loading.subject] = loading.loading;\n    },\n    [types.SET_PAYMENT_PROVIDERS](state: ProvidersState, providers: Provider[]) {\n        providers = !providers ? [] : providers;\n        providers = !Array.isArray(providers) ? [providers] : providers;\n\n        state.paymentProviders = providers;\n    },\n};\n\nconst actions = {\n\n    getProviders({commit}) {\n        commit('SET_PROVIDERS_LOADING', {subject: 'get', loading: true});\n\n        axios.get('/v1/connections')\n            .then((response) => {\n                commit('outdoorsy/SET_OUTDOORSY_CONNECTIONS', get(response, 'data.providers.outdoorsy', []), {root: true});\n                commit('hqRentals/SET_HQRENTALS_CONNECTIONS', get(response, 'data.providers.hq-rentals', []), {root: true});\n                commit('lula/SET_LULA_CONNECTIONS', get(response, 'data.lula', []), {root: true});\n                commit('twistedRoad/SET_TWISTED_ROAD_CONNECTIONS', get(response, 'data.providers.twisted_road', []), {root: true});\n            }).catch(() => {\n        }).finally(() => {\n            commit('SET_PROVIDERS_LOADING', {subject: 'get', loading: false});\n        });\n    },\n\n    getPaymentProfiles({commit}) {\n        commit('SET_PROVIDERS_LOADING', {subject: 'get', loading: true});\n\n        axios.get('/v1/payment-profiles')\n            .then((response) => {\n                commit('SET_PAYMENT_PROVIDERS', get(response, 'data.paymentProfile', []));\n                EventBus.$emit('get-payment-profiles-success', get(response, 'data.paymentProfile'));\n            }).catch(() => {\n        }).finally(() => {\n            commit('SET_PROVIDERS_LOADING', {subject: 'get', loading: false});\n        });\n    },\n\n    getPaymentProfile({commit}, paymentProfile) {\n        commit('SET_PROVIDERS_LOADING', {subject: 'get', loading: true});\n\n        const uuid = typeof paymentProfile === 'object' ? paymentProfile.uuid : paymentProfile;\n\n        axios.get(`/v1/payment-profiles/${uuid}`)\n            .then((response) => {\n                EventBus.$emit('get-payment-profile-success', get(response, 'data.paymentProfile'));\n            }).catch(() => {\n        }).finally(() => {\n            commit('SET_PROVIDERS_LOADING', {subject: 'get', loading: false});\n        });\n    },\n\n    async deletePaymentProfile({commit}, paymentProfile: string | { uuid: string }) {\n        const uuid = typeof paymentProfile === 'object' ? paymentProfile.uuid : paymentProfile;\n\n        return await performApiRequest(commit, 'SET_PROVIDERS_LOADING', 'delete', () => axios.delete(`/v1/payment-profiles/${uuid}`));\n    },\n\n    delete({commit, rootGetters}, provider) {\n        commit('SET_PROVIDERS_LOADING', {subject: 'delete', loading: true});\n\n        axios.delete(`/v1/company/${rootGetters['company/company'].uuid}/connections/${provider.uuid}`)\n            .then((response) => {\n                EventBus.$emit('delete-provider-success', get(response, 'data.provider'));\n            }).catch(() => {\n        }).finally(() => {\n            commit('SET_PROVIDERS_LOADING', {subject: 'delete', loading: false});\n        });\n    },\n\n    toggleActive({commit, rootGetters}, provider) {\n        commit('SET_PROVIDERS_LOADING', {subject: 'toggle', loading: true});\n\n        axios.put(`/v1/company/${rootGetters['company/company'].uuid}/connections/${provider.uuid}/toggle-active`)\n            .then((response) => {\n                EventBus.$emit('toggle-provider-success', get(response, 'data.provider'));\n            }).catch(() => {\n        }).finally(() => {\n            commit('SET_PROVIDERS_LOADING', {subject: 'toggle', loading: false});\n        });\n    },\n\n    matchListing({commit, rootGetters}, {provider_uuid, l_id}) {\n        commit('SET_PROVIDERS_LOADING', {subject: 'matching', loading: true});\n\n        axios.post(`/v1/company/${rootGetters['company/company'].uuid}/provider-listings/${provider_uuid}/match/listings/${l_id}`)\n            .then((response) => {\n                EventBus.$emit('provider-listings-match-success', get(response, 'data.listings', []));\n            }).catch(() => {\n        }).finally(() => {\n            commit('SET_PROVIDERS_LOADING', {subject: 'matching', loading: false});\n        });\n    },\n\n    unMatchProviderListing({commit, rootGetters}, {l_id, provider_uuid}) {\n        commit('SET_PROVIDERS_LOADING', {subject: 'saveListing1', loading: true});\n\n        axios.delete(`/v1/listings/${l_id}/provider-listings/${provider_uuid}`)\n            .then(() => {\n                EventBus.$emit('provider-listings-unmatched-success', provider_uuid);\n            }).catch(() => {\n        }).finally(() => {\n            commit('SET_PROVIDERS_LOADING', {subject: 'saveListing1', loading: false});\n        });\n    },\n\n    createListingUnavailability({commit, rootGetters}, data) {\n        commit('SET_PROVIDERS_LOADING', {subject: 'create_unavailability', loading: true});\n\n        axios.post(`/v1/company/${rootGetters['company/company'].uuid}/provider-bookings`, data)\n            .then((response) => {\n                if (get(response, 'data.booking')) {\n                    commit('booking/SET_CURRENT_WORKING_BOOKING', get(response, 'data.booking'), {root: true});\n                }\n            }).catch(() => {\n        }).finally(() => {\n            commit('SET_PROVIDERS_LOADING', {subject: 'create_unavailability', loading: false});\n        });\n    },\n};\n\nexport default {\n    namespaced: true,\n    state,\n    mutations,\n    actions,\n    getters,\n};\n","import axios from 'axios';\nimport {Form} from '@/plugins/FWForms/index';\nimport {EventBus} from '@/plugins/eventBus';\nimport {StorageService} from '@/services/storage.service';\nimport * as types from '../mutation-types';\nimport {createUrlQueryString} from '@/utils/urls';\nimport {CreditCards, RenterInterface, StoreLoaders} from '@/types';\nimport {performApiRequest} from '@/store/helpers/vuex-helpers';\nimport {push} from 'notivue';\n\nexport interface fetchRenterOptions {\n    r_id: string,\n    include?: string | string[],\n    options?: { includeOrders: boolean | 1 | 0 },\n}\n\nexport interface RenterState {\n    loading: StoreLoaders,\n    init: boolean,\n    currentRenter: RenterInterface,\n    booking_charge: any,\n    renters: RenterInterface[],\n    allRenters: RenterInterface[],\n    searchedRenters: RenterInterface[],\n    stripeCustomerObj: any,\n    renterForm: Form<any>,\n    totalCustomers: number,\n    notificationsTotal: number,\n    notifications: any[],\n    dialogs: Record<string, boolean>,\n    customerTagListCounts: Record<string, number>,\n    customerPagination: {\n        current_page: number,\n        from: number,\n        last_page: number,\n        per_page: number,\n        to: number,\n        total: number,\n    }\n    customersQuery?: {\n        page?: number,\n        itemsPerPage?: number,\n        sortBy?: string[],\n        sortDesc?: boolean[],\n        filter?: {\n            tag_list?: string[],\n            archived?: boolean,\n            search?: string,\n        },\n        include?: string,\n    }\n}\n\ninterface RentersResponseInterface {\n    data: RenterInterface[],\n    links: object,\n    meta: {\n        current_page: number,\n        from: number,\n        last_page: number,\n        links: object[],\n        path: string,\n        per_page: number,\n        to: number,\n        total: number,\n        stats: {\n            tag_list: Record<string, number>,\n            total: number\n        },\n        total_customers: number,\n    },\n}\n\nconst state: RenterState = {\n    loading: {\n        renter: false,\n        renterOrders: false,\n        renters: false,\n        adding: false,\n        deleting: false,\n        searching: false,\n        stripeLoading: false,\n        teslaFeeInvoice: false,\n        paymentMethod: false,\n        exportRenters: false,\n        renterNotifications: false,\n        mergeRenters: false,\n\n    },\n    init: false,\n    currentRenter: {\n        first_name: '',\n        last_name: '',\n        full_name: '',\n        email: '',\n        phone: '',\n        r_id: '',\n        loaded: false,\n        payment_sources: [],\n        creditCards: [],\n        uuid: null,\n        source: '',\n        created_at: '',\n    },\n    booking_charge: {},\n    renters: [],\n    allRenters: [],\n    searchedRenters: [],\n    stripeCustomerObj: {},\n    renterForm: new Form(),\n    totalCustomers: 0,\n    notificationsTotal: 0,\n    notifications: [],\n    dialogs: {\n        exportCustomers: false,\n    },\n    customerTagListCounts: {},\n    customerPagination: {\n        current_page: 0,\n        from: 0,\n        last_page: 0,\n        per_page: 0,\n        to: 0,\n        total: 0,\n    },\n    customersQuery: {\n        page: 1,\n        itemsPerPage: 25,\n        sortBy: [],\n        sortDesc: [],\n        filter: {\n            tag_list: [],\n            archived: false,\n            search: '',\n        },\n        include: '',\n    }\n};\n\n\nconst getters = {\n    init: (state: RenterState) => state.init,\n    rentersLoading: (state: RenterState) => state.loading,\n    renters: (state: RenterState) => state.renters,\n    allRenters: (state: RenterState) => state.allRenters,\n    searchedRenters: (state: RenterState) => state.searchedRenters,\n    currentRenter: (state: RenterState) => state.currentRenter,\n    stripeCustomerObj: (state: RenterState) => state.stripeCustomerObj,\n    renterForm: (state: RenterState) => state.renterForm,\n    totalCustomers: (state: RenterState) => state.totalCustomers,\n    notificationsTotal: (state: RenterState) => state.notificationsTotal,\n    notifications: (state: RenterState) => state.notifications,\n    dialogs: (state: RenterState) => state.dialogs,\n    customerTagListCounts: (state: RenterState) => state.customerTagListCounts,\n    customersQuery: (state: RenterState) => state.customersQuery,\n    customerPagination: (state: RenterState) => state.customerPagination,\n};\n\nconst mutations = {\n    [types.SET_RENTERS_LOADING](state: RenterState, loading: { subject: string, loading: boolean }) {\n        state.loading[loading.subject] = loading.loading;\n        state.init = true;\n    },\n    [types.SET_RENTERS](state: RenterState, data: RentersResponseInterface) {\n        console.dir('SET_RENTERS');\n        console.dir(data);\n        state.renters = data.data;\n        state.totalCustomers = data.meta.total_customers;\n        state.customerTagListCounts = data.meta.stats.tag_list;\n        state.customerPagination = {\n            current_page: data.meta.current_page,\n            from: data.meta.from,\n            last_page: data.meta.last_page,\n            per_page: data.meta.per_page,\n            to: data.meta.to,\n            total: data.meta.total,\n        }\n        state.init = true;\n    },\n    [types.SET_ALL_RENTERS](state: RenterState, renters: { renters: RenterInterface[] }) {\n        state.allRenters = renters?.renters;\n    },\n\n    [types.SET_RENTERS_DIALOG](state: RenterState, payload: { topic: string, value: boolean }) {\n        state.dialogs[payload.topic] = payload.value;\n    },\n    [types.SET_RENTER](state: RenterState, renter: RenterInterface) {\n        state.currentRenter = {...state.currentRenter, ...renter};\n        state.currentRenter.loaded = true;\n        state.init = true;\n    },\n    [types.ADD_RENTER](state: RenterState, renter: RenterInterface) {\n        const renterIndex = state.renters.findIndex((r) => r.r_id === renter.r_id);\n        if (renterIndex >= 0) {\n            state.renters[renterIndex] = renter;\n        } else {\n            state.renters.push(renter);\n        }\n    },\n    [types.RESET_RENTER](state: RenterState, renter: RenterInterface) {\n        state.currentRenter = renter;\n    },\n    [types.SET_RENTERS_CREDIT_CARDS](state: RenterState, cards: CreditCards[]) {\n        state.currentRenter.creditCards = cards;\n    },\n    [types.SET_PAYMENT_SOURCES](state: RenterState, sources) {\n        state.currentRenter.payment_sources = sources;\n    },\n    [types.SET_BOOKING_PAYMENT](state: RenterState, charge) {\n        state.booking_charge = charge;\n    },\n    [types.SET_PHONE_NUMBER](state: RenterState, number: string) {\n        state.currentRenter.phone = number;\n    },\n    [types.SET_SEARCHED_RENTERS](state: RenterState, renters: any[]) {\n        state.searchedRenters = renters;\n    },\n    [types.CLEAR_RENTERS_FORM_ERROR](state: RenterState, form_field: string) {\n        if (form_field === null || form_field === undefined) {\n            state.renterForm.errors.clear();\n        } else {\n            state.renterForm.errors.clear(form_field);\n        }\n    },\n    [types.SET_STRIPE_CUSTOMER](state: RenterState, stripe_customer) {\n        state.stripeCustomerObj = stripe_customer;\n    },\n    [types.SET_RENTER_NOTIFICATIONS](state: RenterState, notifications) {\n        state.notifications = notifications?.data || [];\n        state.notificationsTotal = notifications?.total || 0;\n    },\n    [types.SET_CUSTOMER_QUERY](state: RenterState, data: { key: string, value: any }) {\n        console.dir('SET_CUSTOMER_QUERY');\n        console.dir(data);\n\n        state.customersQuery[data.key] = data.value;\n    },\n};\n\nconst actions = {\n\n    /**\n     * Reset renters\n     */\n    resetRenter({commit}) {\n        const renter = {\n            first_name: '',\n            last_name: '',\n            full_name: '',\n            email: '',\n            phone: '',\n            r_id: '',\n            loaded: false,\n            payment_sources: [],\n            creditCards: [],\n            uuid: null,\n            source: '',\n            created_at: '',\n        };\n\n        commit(types.RESET_RENTER, renter);\n    },\n\n\n    /**\n     * Fetch renters\n     */\n    async fetchCompanyRenters({commit, state}) {\n        try {\n            const options = state.customersQuery;\n\n            const {sortBy = [], sortDesc = [], filter = {}} = options;\n\n            const queryObject = {\n                'sort': sortBy.length > 0 ? (sortDesc?.[0] ? `-${sortBy[0]}` : sortBy[0]) : null,\n                'filter[tag_list]': filter.tag_list || null,\n                'filter[archived]': filter.archived ?? null,\n                'filter[q]': filter.search || null,\n                'page': options.page || 1,\n                'itemsPerPage': options.itemsPerPage || 30,\n                'include': options.include,\n            };\n\n            // Convert the object into a query string\n            const query = createUrlQueryString(queryObject, true);\n            console.log('✅ API Query String:', query);\n\n            const responseData = await performApiRequest(commit, 'SET_RENTERS_LOADING', 'renters', () => axios.get(`/v1/renters${query}`));\n            commit(types.SET_RENTERS, responseData);\n        } catch (error) {\n            console.error(error);\n        }\n    },\n\n\n    /**\n     * Fetch all renters for export\n     */\n    async fetchRentersForExport({commit}) {\n        try {\n            const responseData = await performApiRequest(commit, 'SET_RENTERS_LOADING', 'exportRenters', () => axios.get('/v1/renters-export'));\n\n            commit(types.SET_ALL_RENTERS, responseData);\n        } catch (error) {\n            console.error(error)\n        }\n    },\n\n    async mergeCustomers({commit}, data: { main: string, second: string, mode: 'simple' | 'advanced' }) {\n        await performApiRequest(commit, 'SET_RENTERS_LOADING', 'mergeRenters', () => axios.post('/v1/merge-renters', data));\n    },\n\n    importCustomers({commit}, data: any) {\n        commit(types.SET_RENTERS_LOADING, {subject: 'mergeRenters', loading: true});\n\n        axios.post('/v1/renters/import/csv', {data})\n            .then(() => {\n                EventBus.$emit('renter-import-success');\n            }).catch(() => {\n        }).finally(() => {\n            commit(types.SET_RENTERS_LOADING, {subject: 'mergeRenters', loading: false});\n        });\n    },\n\n\n    /**\n     * Fetch all renters for export\n     */\n    fetchRenterNotifications({commit}, renter: RenterInterface) {\n        commit(types.SET_RENTERS_LOADING, {subject: 'renterNotifications', loading: true});\n\n        axios.get(`/v1/renters/${renter.r_id}/notifications`)\n            .then((response) => {\n                commit(types.SET_RENTER_NOTIFICATIONS, response?.data?.notifications || []);\n            }).catch(() => {\n        }).finally(() => {\n            commit(types.SET_RENTERS_LOADING, {subject: 'renterNotifications', loading: false});\n        });\n    },\n\n\n    /**\n     * Fetch a renter\n     */\n    async fetchRenter({commit}, data: fetchRenterOptions) {\n\n        console.dir('data');\n        console.dir(data);\n        const renterId = data.r_id;\n        if (!renterId) {\n            throw new Error('No renter id provided');\n        }\n\n        if (data?.include) {\n            if (Array.isArray(data?.include)) {\n                data.include = data.include.join(',');\n            }\n        }\n\n        const queryObject = {\n            include: data?.include,\n            includeOrders: data?.options?.includeOrders,\n        };\n        console.dir(queryObject);\n\n        const query = createUrlQueryString(queryObject, true);\n\n        console.dir(query);\n\n        await axios.get(`/v1/renters/${renterId}${query}`)\n            .then((response) => {\n                commit(types.SET_RENTER, response.data.renter);\n            }).catch(() => {\n                EventBus.$emit('fetch-renter-failure');\n            }).finally(() => {\n                commit(types.SET_RENTERS_LOADING, {subject: 'renter', loading: false});\n\n                if (data?.options?.includeOrders) {\n                    commit(types.SET_RENTERS_LOADING, {subject: 'renterOrders', loading: false});\n                }\n            });\n    },\n\n    /**\n     * Update a renter\n     */\n    async updateRenter({commit}, renter: RenterInterface) {\n        try {\n            const responseData = await performApiRequest(commit, 'SET_RENTERS_LOADING', 'renters', () => axios.put(`/v1/renters/${renter.r_id}`, renter));\n\n            commit(types.SET_RENTER, responseData?.renter);\n            push.success({\n                message: 'Customer saved successfully!',\n            });\n        } catch (error) {\n            push.error({\n                message: error?.response?.data?.message || 'There was an error saving this renter.',\n            });\n        }\n    },\n\n\n    /**\n     * Create a renter\n     */\n    async createRenter({state, commit}) {\n        try {\n            const responseData = await performApiRequest(commit, 'SET_RENTERS_LOADING', 'adding', () => axios.post('/v1/renters', state.currentRenter));\n\n            commit(types.SET_RENTER, responseData?.renter);\n            commit(types.ADD_RENTER, responseData?.renter);\n            push.success({\n                message: 'Customer created successfully!',\n            });\n            EventBus.$emit('new-customer-created-success', responseData?.renter);\n\n            return responseData?.renter;\n        } catch (error) {\n            if (error?.response?.data?.errors) {\n                const errorMessage = error.response.data.errors[Object.keys(error.response.data.errors)[0]][0];\n                push.error({\n                    message: errorMessage,\n                });\n            } else {\n                push.error({\n                    message: 'Customer create error',\n                });\n            }\n            state.renterForm.errors.set(error?.response?.data?.errors);\n        }\n    },\n\n\n    /**\n     * Delete a renter\n     */\n    async deleteRenter({commit}, renter: RenterInterface) {\n        try {\n            await performApiRequest(commit, 'SET_RENTERS_LOADING', 'deleting', () => axios.delete(`/v1/renters/${renter.r_id}`));\n        } catch (error) {\n            push.error({\n                message: error?.response?.data?.message || 'There was an error',\n            });\n            throw new Error(error);\n        }\n    },\n\n\n    /**\n     * Stripe customer\n     */\n    stripeCustomer({commit}, r_id: string) {\n        commit(types.SET_RENTERS_LOADING, {subject: 'stripeLoading', loading: true});\n\n        axios.get(`/v1/renters/${r_id}/stripe-customer`)\n            .then((response) => {\n                console.dir(response.data);\n                commit(types.SET_STRIPE_CUSTOMER, response?.data?.stripeCustomer);\n            }).catch(() => {\n        }).finally(() => {\n            commit(types.SET_RENTERS_LOADING, {subject: 'stripeLoading', loading: false});\n        });\n    },\n\n\n    /**\n     * Create renter invoice\n     */\n    renterInvoiceCreate({commit}, order: any) {\n        commit(types.SET_RENTERS_LOADING, {subject: 'stripeLoading', loading: true});\n        axios.post(`/v1/company/${StorageService.getCompanyUuid()}/renters/${order.r_id}/invoice`, order)\n            .then((response) => {\n                EventBus.$emit('renter-invoice-create-success', response?.data?.payment);\n            }).catch(() => {\n        }).finally(() => {\n            commit(types.SET_RENTERS_LOADING, {subject: 'stripeLoading', loading: false});\n        });\n    },\n\n\n    /**\n     * Create renter Tesla fee invoice\n     */\n    teslaFeeInvoiceCreate({commit}, data: any) {\n        commit(types.SET_RENTERS_LOADING, {subject: 'teslaFeeInvoice', loading: true});\n\n        axios.post(`/v1/company/${StorageService.getCompanyUuid()}/renters/${data.order.renter.r_id}/tesla-fee-invoice`, data.order)\n            .then((response) => {\n                push.success({\n                    message: 'Invoice sent successfully',\n                });\n                commit('tesla/SET_TESLA_INVOICES', response?.data?.invoices, {root: true});\n                EventBus.$emit('tesla-fee-invoice-created-successfully');\n            }).catch((e) => {\n            push.error({\n                message: e?.response?.data?.message || 'There was an error',\n            });\n        }).finally(() => {\n            commit(types.SET_RENTERS_LOADING, {subject: 'teslaFeeInvoice', loading: false});\n        });\n    },\n\n\n    /**\n     * Fetch renter payments\n     */\n    renterPayments({commit}, r_id: string) {\n        axios.get(`/v1/company/${StorageService.getCompanyUuid()}/renters/${r_id}/payments`)\n            .then((response) => {\n                commit(types.SET_PAYMENT_SOURCES, response?.data?.customer?.sources?.data || []);\n            }).catch(() => {\n        }).finally(() => {\n            commit('SET_RENTERS_LOADING', {subject: 'renters', loading: false});\n        });\n    },\n\n\n    /**\n     * Fetch renter charges\n     */\n    async renterCharges({commit}, r_id: string) {\n        return await performApiRequest(commit, 'SET_RENTERS_LOADING', 'searching', () => axios.get(`/renters/${r_id}/charges`));\n    },\n\n\n    /**\n     * Search renters\n     */\n    async searchRenters({commit}, query: string) {\n        const responseData = await performApiRequest(commit, 'SET_RENTERS_LOADING', 'searching', () => axios.get(`/v1/search/renters?search=${query}`));\n        commit(types.SET_SEARCHED_RENTERS, responseData.renters || []);\n    },\n\n    /**\n     * Block renters\n     */\n    async blockRenter({commit}, data) {\n        return await performApiRequest(commit, 'SET_RENTERS_LOADING', 'block_renter', () => axios.post(`/v1/renters/block`, data));\n    },\n\n    async unblockRenter({commit}, data) {\n        return await performApiRequest(commit, 'SET_RENTERS_LOADING', 'unblock_renter', () => axios.post(`/v1/renters/unblock`, data));\n    },\n\n    /**\n     * Save a Stripe payment method for renter\n     */\n    stripeSavePaymentMethod({commit}, {renter, paymentMethod}) {\n        commit(types.SET_RENTERS_LOADING, {subject: 'paymentMethod', loading: true});\n        axios.post(`/v1/company/${StorageService.getCompanyUuid()}/renters/${renter.r_id}/payment-method/${paymentMethod}`)\n            .then((response) => {\n                commit(types.SET_RENTERS_CREDIT_CARDS, response?.data?.creditCards || []);\n                EventBus.$emit('renter-stripe-payment-method-success', response?.data?.creditCards);\n            }).catch(() => {\n        }).finally(() => {\n            commit(types.SET_RENTERS_LOADING, {subject: 'paymentMethod', loading: false});\n        });\n    },\n\n\n    /**\n     * Get a renters credit cards\n     */\n    renterCreditCards({commit}, renter: RenterInterface) {\n        commit(types.SET_RENTERS_LOADING, {subject: 'creditCards', loading: true});\n        axios.get(`/v1/renters/${renter.r_id}/credit-cards`)\n            .then((response) => {\n                commit(types.SET_RENTERS_CREDIT_CARDS, response?.data?.creditCards || []);\n                EventBus.$emit('renter-credit-cards-success');\n            }).catch(() => {\n        }).finally(() => {\n            commit(types.SET_RENTERS_LOADING, {subject: 'creditCards', loading: false});\n        });\n    },\n};\n\nexport default {\n    namespaced: true,\n    state,\n    mutations,\n    actions,\n    getters,\n};\n","import {ActionTree, GetterTree} from 'vuex';\nimport {EventBus} from '@/plugins/eventBus';\nimport axios from 'axios';\nimport * as types from '@/store/mutation-types';\n\nexport interface SquareState {\n    loading: Record<string, boolean>;\n    currentWorkingInvoice: any;\n}\n\nexport interface SquareActions {\n    getSquareOauthUrl(context: any): Promise<void>;\n\n    saveSquareCode(context: any, data: { code: string; state: string }): Promise<void>;\n\n    getSquareProvider(context: any): Promise<void>;\n\n    testPayment(context: any, squareId: string): Promise<void>;\n}\n\n// state\nconst state: SquareState = {\n    loading: {\n        analytics: false,\n        fetchCart: false,\n    },\n    currentWorkingInvoice: '',\n};\n\nconst getters: GetterTree<SquareState, any> = {\n    loading: (state) => state.loading,\n};\n\nconst mutations = {\n    [types.SET_SQUARE_LOADING](state: SquareState, loading: { subject: string, loading: boolean }) {\n        state.loading[loading.subject] = loading.loading;\n    },\n};\n\nconst actions: ActionTree<SquareState, any> & SquareActions = {\n\n    async getSquareOauthUrl({commit}) {\n        commit(types.SET_SQUARE_LOADING, {subject: 'analytics', loading: true});\n\n        try {\n            const response = await axios.get('/v1/square/url');\n            EventBus.$emit('square-oauth-url-create-success', response.data);\n        } catch (e) {\n            EventBus.$emit('square-oauth-url-create-error', e.response);\n        } finally {\n            commit(types.SET_SQUARE_LOADING, {subject: 'analytics', loading: false});\n        }\n    },\n\n    async saveSquareCode({commit}, data: { code: string; state: string }) {\n        commit(types.SET_SQUARE_LOADING, {subject: 'analytics', loading: true});\n\n        try {\n            const response = await axios.post('/v1/square/redirect', data);\n            EventBus.$emit('square-oauth-url-create-success', response.data);\n        } catch (e) {\n            EventBus.$emit('square-oauth-url-create-error', e.response);\n        } finally {\n            commit(types.SET_SQUARE_LOADING, {subject: 'analytics', loading: false});\n        }\n    },\n\n    async getSquareProvider() {\n        try {\n            const response = await axios.get('/v1/square/');\n            EventBus.$emit('square-oauth-success', response.data);\n        } catch (e) {\n            console.error('Error fetching Square provider:', e);\n        }\n    },\n\n    async testPayment(_, squareId: string) {\n        try {\n            const response = await axios.post(`/v1/square/testPayment?squareId=${squareId}`);\n            EventBus.$emit('delete-square-oauth-success', response.data);\n        } catch (e) {\n            console.error('Error testing Square payment:', e);\n        }\n    },\n};\n\nexport default {\n    namespaced: true,\n    state,\n    mutations,\n    actions,\n    getters,\n};\n","import {EventBus} from '@/plugins/eventBus';\nimport {Form} from '@/plugins/FWForms/index';\nimport axios from 'axios';\nimport * as types from '@/store/mutation-types';\nimport dayjs from 'dayjs';\nimport {performApiRequest} from \"@/store/helpers/vuex-helpers\";\nimport {SubscriptionPlan, SubscriptionState} from \"@/types\";\n\n\nconst subscriptionNameMap: Record<string, string> = {\n    'sub_basic_monthly': 'Basic Monthly',\n    'plan_IyarH890IaZoHd': 'Basic Monthly', // Production\n    'sub_standard_monthly': 'Standard Monthly',\n    'plan_IyarRkXlliDZhB': 'Standard Monthly', // Production\n    'sub_premium_monthly': 'Premium Monthly',\n    'plan_IyarEVETwSHGj7': 'Premium Monthly', // Production\n    'sub_basic_annual': 'Basic Annual',\n    'plan_IyarKGjJctzvXy': 'Basic Annual', // Production\n    'sub_standard_annual': 'Standard Annual',\n    'plan_IyarWX4xbYuDHu': 'Standard Annual', // Production\n    'sub_premium_annual': 'Premium Annual',\n    'plan_Iyar2EOrTQfZ6l': 'Premium Annual' // Production\n};\n\n\n// state\nconst state: SubscriptionState = {\n    loading: {\n        subscription: false,\n        subscribing: false,\n        cancelSubscription: false,\n        resumeSubscription: false,\n        endTrial: false,\n    },\n\n    enforceSubscription: false,\n\n    newSubscription: {\n        billingPeriod: null,\n        plan: null,\n    },\n\n    subscriptionForm: new Form(),\n\n    plans: [\n        {\n            name: 'basic',\n            pricing: {\n                monthly: {\n                    id: 'sub_basic_monthly',\n                    price: 34,\n                },\n                yearly: {\n                    id: 'sub_basic_annual',\n                    price: 24,\n                },\n            },\n            description: {\n                bullets: [\n                    'Orders',\n                    'Up to 5 vehicles',\n                    'Includes 1 branch',\n                    '2 staff accounts',\n                    'Unlimited Customers',\n                    '1 car-share connections',\n                    'Online Store',\n                    'Stripe Integration',\n                    'And More*',\n                ],\n            },\n        },\n        {\n            name: 'standard',\n            pricing: {\n                monthly: {\n                    id: 'sub_standard_monthly',\n                    price: 89,\n                },\n                yearly: {\n                    id: 'sub_standard_annual',\n                    price: 69,\n                },\n            },\n            description: {\n                bullets: [\n                    'All of Basic',\n                    'Up to 50 vehicles',\n                    '5 staff accounts',\n                    'Includes 2 branches',\n                    'eSign Rental Agreements',\n                    'Coupons',\n                    'QR & Barcodes',\n                    'Reports',\n                    'Import/Export',\n                    'Hide powered by Fleetwire',\n                    'And More*',\n                ],\n            },\n        },\n        {\n            name: 'premium',\n            pricing: {\n                monthly: {\n                    id: 'sub_premium_monthly',\n                    price: 279,\n                },\n                yearly: {\n                    id: 'sub_premium_annual',\n                    price: 239,\n                },\n            },\n            description: {\n                bullets: [\n                    'All of Standard',\n                    'Up to 150 vehicles',\n                    '20 staff accounts',\n                    'Includes 2 branches',\n                    'Custom Domain',\n                    'Custom Email Domain',\n                    'Additional Scripts',\n                    '10 Car-share connections',\n                    'Zapier integration',\n                    'API',\n                    'TFA (Two factor authentication)',\n                    'And More*',\n                ],\n            },\n        },\n    ] as SubscriptionPlan[],\n\n    subscription: {\n        stripe_status: null,\n        ends_at: null,\n        items: [],\n        name: null,\n        quantity: null,\n        stripe_id: null,\n        stripe_price: null,\n        trial_ends_at: null,\n        updated_at: null,\n    },\n\n    subscriptionMaster: null,\n    extraListingsAddonCount: 0,\n\n    subscriptionStep: 0,\n    planSelection: 0,\n\n    updatedSubscription: {\n        plan: 'basic',\n        interval: 'monthly',\n    }\n};\n\nconst getters = {\n    loading: (state: SubscriptionState) => state.loading,\n    enforceSubscription: (state: SubscriptionState) => state.enforceSubscription,\n    plans: (state: SubscriptionState) => state.plans,\n    subscription: (state: SubscriptionState) => state.subscription,\n    newSubscription: (state: SubscriptionState) => state.newSubscription,\n    subscriptionForm: (state: SubscriptionState) => state.subscriptionForm,\n    subscriptionMaster: (state: SubscriptionState) => state.subscriptionMaster,\n    extraListingsAddonCount: (state: SubscriptionState) => state.extraListingsAddonCount,\n    subscriptionFullName: (state: SubscriptionState) => {\n        const subscriptionName = subscriptionNameMap[state.subscriptionMaster];\n        return subscriptionName ? subscriptionName : 'Premium Monthly';\n    },\n    subscriptionPlan: (state: SubscriptionState) => {\n        switch (state.subscriptionMaster) {\n            case 'sub_basic_monthly':\n            case 'sub_basic_annual':\n            case 'plan_IyarH890IaZoHd': // Production\n            case 'plan_IyarKGjJctzvXy': // Production\n            case 'price_1KfoLECZJTjTZE0Qs6poe7wG':\n            case 'price_1KfoLECZJTjTZE0QmWH5yynX':\n                return 'basic';\n            case 'sub_standard_monthly':\n            case 'sub_standard_annual':\n            case 'plan_IyarRkXlliDZhB': // Production\n            case 'plan_IyarWX4xbYuDHu': // Production\n            case 'price_1Kfp67CZJTjTZE0Q0SW8L1Fk':\n                return 'standard';\n            case 'sub_premium_monthly':\n            case 'sub_premium_annual':\n            case 'plan_IyarEVETwSHGj7': // Production\n            case 'plan_Iyar2EOrTQfZ6l': // Production\n                return 'premium';\n            default:\n                return null;\n        }\n    },\n    subscriptionDuration: (state: SubscriptionState) => {\n        switch (state.subscriptionMaster) {\n            case 'sub_basic_monthly':\n            case 'sub_standard_monthly':\n            case 'sub_premium_monthly':\n            case 'plan_IyarH890IaZoHd':\n            case 'plan_IyarRkXlliDZhB':\n            case 'plan_IyarEVETwSHGj7':\n                return 'monthly';\n            case 'sub_standard_annual':\n            case 'sub_basic_annual':\n            case 'sub_premium_annual':\n            case 'plan_IyarKGjJctzvXy':\n            case 'plan_IyarWX4xbYuDHu':\n            case 'plan_Iyar2EOrTQfZ6l':\n                return 'yearly';\n            default:\n                return 'monthly';\n        }\n    },\n    hasActiveSubscription: (state: SubscriptionState) => state.subscription?.stripe_status === 'active',\n    hasPastDueSubscription: (state: SubscriptionState) => state.subscription?.stripe_status === 'past_due',\n    hasPausedSubscription: (state: SubscriptionState) => state.subscription?.stripe_status === 'paused',\n    subscriptionEndDate: (state: SubscriptionState) => {\n        const subEndDate = state.subscription?.ends_at;\n        if (!subEndDate) return false;\n        return dayjs(subEndDate).format('MMM D, YYYY');\n    },\n    subscriptionStep: (state: SubscriptionState) => state.subscriptionStep,\n    planSelection: (state: SubscriptionState) => state.planSelection,\n    updatedSubscription: (state: SubscriptionState) => state.updatedSubscription,\n};\n\nconst mutations = {\n    [types.SET_SUBSCRIPTION_LOADING](state: SubscriptionState, loading: { subject: string, loading: boolean }) {\n        state.loading[loading.subject] = loading.loading;\n    },\n    [types.SET_ENFORCE_SUBSCRIPTION](state: SubscriptionState, enforce) {\n        state.enforceSubscription = enforce;\n    },\n    [types.SET_SUBSCRIPTION_STEP](state: SubscriptionState, step: number) {\n        state.subscriptionStep = step;\n    },\n    [types.SET_SUBSCRIPTION_PLAN_AND_INTERVAL](state: SubscriptionState, updatedSubscription: {\n        plan: string,\n        interval: string\n    }) {\n        state.updatedSubscription = updatedSubscription;\n    },\n    [types.SET_PLAN_SELECTION](state: SubscriptionState, selection: number) {\n        state.planSelection = selection;\n    },\n    [types.SET_SUBSCRIPTION](state: SubscriptionState, subscription) {\n        state.subscription = subscription;\n    },\n\n    /**\n     * Update the new subscription object\n     */\n    [types.UPDATE_NEW_SUBSCRIPTION](state: SubscriptionState, newSubscription) {\n        if (newSubscription.billingPeriod) {\n            state.newSubscription.billingPeriod = newSubscription.billingPeriod;\n        }\n        if (newSubscription.plan) {\n            state.newSubscription.plan = newSubscription.plan;\n        }\n    },\n    [types.SET_SUBSCRIPTION_MASTER](state: SubscriptionState, subscription) {\n        console.dir('SET_SUBSCRIPTION_MASTER');\n        console.dir(subscription);\n        state.subscriptionMaster = subscription;\n    },\n    [types.SET_EXTRA_LISTINGS_ADDON](state: SubscriptionState, count) {\n        state.extraListingsAddonCount = count;\n    },\n    [types.CLEAR_SUBSCRIPTION_FORM_ERRORS](state: SubscriptionState, form_field: string | null = null) {\n        if (form_field === null || form_field === undefined) {\n            state.subscriptionForm.errors.clear();\n        } else {\n            state.subscriptionForm.errors.clear(form_field);\n        }\n    },\n    [types.SET_SUBSCRIPTION_FORM_ERROR](state: SubscriptionState, error: string | Record<string, string[]>) {\n        state.subscriptionForm.errors.set(error);\n    },\n};\n\nconst actions = {\n\n    async subscribeToPlan({commit}, sub) {\n        try {\n            const responseData = await performApiRequest(commit, 'SET_SUBSCRIPTION_LOADING', 'subscribing', () => axios.post('/v1/subscription', {id: sub}));\n            commit(types.SET_SUBSCRIPTION, responseData.subscription);\n            commit('company/SET_COMPANY', responseData.company, {root: true});\n\n            EventBus.$emit('SystemMessage', {\n                type: 'success',\n                message: 'subscription successful',\n            });\n            EventBus.$emit('subscribe-to-plan-success');\n        } catch (error) {\n            EventBus.$emit('SystemMessage', {\n                type: 'error',\n                message: error.response?.data?.message || error,\n            });\n        }\n    },\n\n    async switchPlan({commit}, sub: string) {\n        try {\n            const responseData = await performApiRequest(commit, 'SET_SUBSCRIPTION_LOADING', 'subscribing', () => axios.post('/v1/subscription/swap', {id: sub}));\n            EventBus.$emit('SystemMessage', {\n                type: 'success',\n                message: 'subscription swap successful',\n            });\n            EventBus.$emit('swap-plan-success');\n\n            return responseData;\n        } catch (error) {\n            EventBus.$emit('SystemMessage', {\n                type: 'error',\n                message: error.response?.data?.message || \"There was an error swapping your subscription.\",\n            });\n        }\n    },\n\n    addAddon({commit}, data) {\n        commit('SET_SUBSCRIPTION_LOADING', {subject: 'subscribing', loading: true});\n\n        axios.post('/v1/subscription/addon', data)\n            .then((response) => {\n                commit('SET_SUBSCRIPTION', response.data.subscription);\n                EventBus.$emit('SystemMessage', {\n                    type: 'success',\n                    message: 'subscription swap successful',\n                });\n                EventBus.$emit('swap-plan-success');\n            }).catch((e) => {\n            console.dir(e);\n            EventBus.$emit('SystemMessage', {\n                type: 'error',\n                message: e.response.data.message,\n            });\n        }).finally(() => {\n            commit('SET_SUBSCRIPTION_LOADING', {subject: 'subscribing', loading: false});\n        });\n    },\n\n    removeAddon({commit}, id: string) {\n        commit('SET_SUBSCRIPTION_LOADING', {subject: 'subscribing', loading: true});\n\n        axios.delete(`/v1/subscription/addon/${id}`)\n            .then((response) => {\n                commit('SET_SUBSCRIPTION', response.data.subscription);\n                EventBus.$emit('SystemMessage', {\n                    type: 'success',\n                    message: 'subscription swap successful',\n                });\n                EventBus.$emit('swap-plan-success');\n            }).catch((e) => {\n            console.dir(e);\n            EventBus.$emit('SystemMessage', {\n                type: 'error',\n                message: e.response.data.message,\n            });\n        }).finally(() => {\n            commit('SET_SUBSCRIPTION_LOADING', {subject: 'subscribing', loading: false});\n        });\n    },\n\n    cancelSubscription({commit}) {\n        commit('SET_SUBSCRIPTION_LOADING', {subject: 'cancelSubscription', loading: true});\n        commit('CLEAR_SUBSCRIPTION_FORM_ERRORS');\n\n        axios.delete('/v1/subscription')\n            .then((response) => {\n                commit('SET_SUBSCRIPTION', response.data.subscription);\n                EventBus.$emit('cancel-subscription-success');\n                EventBus.$emit('SystemMessage', {\n                    type: 'success',\n                    message: 'Cancel subscription successful',\n                });\n            }).catch((e) => {\n            commit(types.SET_SUBSCRIPTION_FORM_ERROR, e?.response?.data?.message || 'There was an error cancelling your subscription.');\n        }).finally(() => {\n            commit('SET_SUBSCRIPTION_LOADING', {subject: 'cancelSubscription', loading: false});\n        });\n    },\n\n    async cancelSubscriptionStripePortalUrl({commit}) {\n        try {\n            return await performApiRequest(commit, 'SET_SUBSCRIPTION_LOADING', 'cancelSubscription', () => axios.get('/v1/subscription/cancel-portal'));\n        } catch (error) {\n        }\n    },\n\n    async resumeSubscription({commit}) {\n        try {\n            const responseData = await performApiRequest(commit, 'SET_SUBSCRIPTION_LOADING', 'resumeSubscription', () => axios.put('/v1/subscription'));\n            commit('SET_SUBSCRIPTION', responseData.subscription);\n            EventBus.$emit('SystemMessage', {\n                type: 'success',\n                message: 'Resume subscription successful',\n            });\n            return responseData;\n        } catch (error) {\n            EventBus.$emit('SystemMessage', {\n                type: 'error',\n                message: error.response?.data?.message || \"There was an error resuming your subscription.\",\n            });\n        }\n    },\n\n    /**\n     * End trial early and start subscription\n     */\n    async endTrial({commit}) {\n\n        try {\n            const responseData = await performApiRequest(commit, 'SET_SUBSCRIPTION_LOADING', 'endTrial', () => axios.post('/v1/end-trial'));\n            EventBus.$emit('SystemMessage', {\n                type: 'success',\n                message: 'Ended trial successful',\n            });\n\n            return responseData;\n        } catch (error) {\n            EventBus.$emit('SystemMessage', {\n                type: 'error',\n                message: error.response?.data?.message || \"There was an error ending your trial.\",\n            });\n            throw error;\n        }\n    },\n};\n\nexport default {\n    namespaced: true,\n    state,\n    mutations,\n    actions,\n    getters,\n};\n","import axios from 'axios';\nimport {EventBus} from '@/plugins/eventBus';\nimport router from '@/router';\nimport * as types from '../mutation-types';\nimport {createUrlQueryString} from '@/utils/urls';\nimport {get} from 'lodash';\nimport {performApiRequest} from '@/store/helpers/vuex-helpers';\nimport {CompanyInterface, PermissionsArray} from '@/types';\n\nexport interface SuperUserState {\n    loading: Record<string, boolean>,\n    users: Array<any>,\n    companies: CompanyInterface[],\n    companiesMeta: {\n        current_page: number,\n        from: number,\n        last_page: number,\n        per_page: number,\n        to: number,\n        total: number,\n    },\n    currentWorkingCompany: any,\n    currentWorkingUser: any,\n    roles: Array<any>,\n    permissions: PermissionsArray,\n    media: Array<any>,\n    mediaDirectories: Array<any>,\n    mediaPath: string,\n    allListingImages: Array<any>,\n    serverDetails: any,\n    basicStats: {\n        active_users: Array<any>,\n        subscribers: any,\n        users: number | null,\n        trials: number | null,\n        listings: number | null,\n        automations: number | null,\n        bookings: number | null,\n        connections: {\n            tesla_accounts: number | null,\n            turo_accounts: number | null,\n            getaround_accounts: number | null,\n        },\n    },\n    featureWaitlist: Array<any>,\n    featuresStatus: Array<any>,\n    cache: Array<any>,\n}\n\nconst state: SuperUserState = {\n    loading: {\n        users: null,\n        roles: null,\n        permissions: null,\n        automations: null,\n        bookings: null,\n        connections: null,\n        listings: null,\n        subscribers: null,\n        activeUsers: null,\n        turoTrip: null,\n    },\n    users: [],\n    companies: [],\n    companiesMeta: {\n        current_page: 1,\n        from: 1,\n        last_page: 1,\n        per_page: 1,\n        to: 1,\n        total: 1,\n    },\n    currentWorkingCompany: {},\n    currentWorkingUser: {},\n    roles: [],\n    permissions: [],\n    media: [],\n    mediaDirectories: [],\n    mediaPath: '',\n    allListingImages: [],\n    serverDetails: {},\n    basicStats: {\n        active_users: [],\n        subscribers: {},\n        users: null,\n        trials: null,\n        listings: null,\n        automations: null,\n        bookings: null,\n        connections: {\n            tesla_accounts: null,\n            turo_accounts: null,\n            getaround_accounts: null,\n        },\n    },\n\n    featureWaitlist: [],\n    featuresStatus: [],\n    cache: [],\n};\n\nconst getters = {\n    loading: (state: SuperUserState) => state.loading,\n    allUsers: (state: SuperUserState) => state.users,\n    allCompanies: (state: SuperUserState) => state.companies,\n    companiesMeta: (state: SuperUserState) => state.companiesMeta,\n    currentWorkingUser: (state: SuperUserState) => state.currentWorkingUser,\n    currentWorkingCompany: (state: SuperUserState) => state.currentWorkingCompany,\n    roles: (state: SuperUserState) => state.roles,\n    permissions: (state: SuperUserState) => state.permissions,\n    mediaDirectories: (state: SuperUserState) => state.mediaDirectories,\n    media: (state: SuperUserState) => state.media,\n    mediaPath: (state: SuperUserState) => state.mediaPath,\n    allListingImages: (state: SuperUserState) => state.allListingImages,\n    basicStats: (state: SuperUserState) => state.basicStats,\n    serverDetails: (state: SuperUserState) => state.serverDetails,\n    featureWaitlist: (state: SuperUserState) => state.featureWaitlist,\n    featuresStatus: (state: SuperUserState) => state.featuresStatus,\n    cache: (state: SuperUserState) => state.cache,\n};\n\nconst mutations = {\n    [types.SET_SU_LOADING](state: SuperUserState, loading: { subject: string, loading: boolean }) {\n        state.loading[loading.subject] = loading.loading;\n    },\n    [types.SET_ALL_USERS](state: SuperUserState, users) {\n        state.users = users;\n    },\n    [types.SET_ALL_COMPANIES](state: SuperUserState, companies) {\n        if (companies.current_page === 1) {\n            state.companies = companies.data;\n        } else {\n            // state.companies = state.companies.concat(companies.data);\n        }\n\n        state.companiesMeta = {\n            current_page: companies.current_page,\n            from: companies.from,\n            last_page: companies.last_page,\n            per_page: companies.per_page,\n            to: companies.to,\n            total: companies.total,\n        };\n    },\n    [types.SET_CURRENT_WORKING_COMPANY](state: SuperUserState, company) {\n        state.currentWorkingCompany = company;\n    },\n    [types.SET_CURRENT_WORKING_USER](state: SuperUserState, user) {\n        state.currentWorkingUser = user;\n    },\n    [types.SET_ALL_ROLES](state: SuperUserState, roles) {\n        state.roles = roles;\n    },\n    [types.SET_ALL_PERMISSIONS](state: SuperUserState, permissions) {\n        state.permissions = permissions;\n    },\n    [types.SET_ALL_MEDIA_DIRECTORIES](state: SuperUserState, mediaDirectories) {\n        state.mediaDirectories = mediaDirectories;\n    },\n    [types.SET_ALL_MEDIA_IN_DIRECTORY](state: SuperUserState, media) {\n        state.media = media;\n    },\n    [types.SET_MEDIA_BASE_PATH](state: SuperUserState, path) {\n        state.mediaPath = path;\n    },\n    [types.SET_ALL_LISTING_IMAGES](state: SuperUserState, images) {\n        state.allListingImages = images;\n    },\n    [types.SET_ALL_SERVER_DETAILS](state: SuperUserState, details) {\n        state.serverDetails = details;\n    },\n    [types.SET_SA_FEATURE_WAITLIST](state: SuperUserState, waitlist) {\n        state.featureWaitlist = waitlist;\n    },\n    [types.SET_SA_FEATURES_STATUS](state: SuperUserState, status) {\n        state.featuresStatus = status;\n    },\n    [types.SET_SA_CACHE](state: SuperUserState, cache) {\n        state.cache = cache;\n    },\n    [types.SET_CURRENT_WORKING_SU_BASIC_STATS](state: SuperUserState, stats) {\n        state.basicStats[Object.keys(stats)[0]] = stats[Object.keys(stats)[0]];\n    },\n};\n\nconst actions = {\n    async fetchAllUsers({commit}) {\n        try {\n            const responseData = await performApiRequest(commit, 'SET_SU_LOADING', 'users', () => axios.get('/v1/su/users'));\n            commit('SET_ALL_USERS', responseData.users);\n        } catch (error) {\n            console.error(error)\n        }\n    },\n\n    async fetchOneUsers({commit}, uuid) {\n        try {\n            const responseData = await performApiRequest(commit, 'SET_SU_LOADING', 'users', () => axios.get(`/v1/su/users/${uuid}`));\n            commit('SET_CURRENT_WORKING_USER', responseData.user);\n        } catch (error) {\n            console.error(error)\n        }\n    },\n    async purgeFeatures({commit}) {\n        try {\n            await performApiRequest(commit, 'SET_SU_LOADING', 'users', () => axios.post('/v1/su/features/purge'));\n        } catch (error) {\n            console.error(error)\n        }\n    },\n    async getFeaturesWaitlist({commit}) {\n        try {\n            const responseData = await performApiRequest(commit, 'SET_SU_LOADING', 'users', () => axios.get('/v1/su/features-waitlist'));\n            commit('SET_SA_FEATURE_WAITLIST', responseData.waitlist);\n        } catch (error) {\n            console.error(error)\n        }\n    },\n    setAllowFeature({commit}, feature) {\n        axios.post('/v1/su/features/allow', feature)\n            .then(() => {\n                EventBus.$emit('sa-set-allow-feature-success');\n            }).catch(() => {\n        }).finally(() => {\n        });\n    },\n    setRemoveFeature({commit}, feature) {\n        axios.post('/v1/su/features/remove', feature)\n            .then(() => {\n                EventBus.$emit('sa-set-allow-feature-success');\n            }).catch(() => {\n        }).finally(() => {\n        });\n    },\n    setAllowFeatureFromWishlist({commit}, feature) {\n        axios.post(`/v1/su/features-waitlist/allow/${feature}`)\n            .then(() => {\n                // commit('SET_SA_FEATURE_WAITLIST', response.data.waitlist);\n            }).catch(() => {\n        }).finally(() => {\n        });\n    },\n\n    getFeatures({commit}) {\n        axios.get('/v1/su/features')\n            .then((response) => {\n                commit('SET_SA_FEATURES_STATUS', response.data.featuresStatus);\n            }).catch(() => {\n        }).finally(() => {\n        });\n    },\n\n    getCache({commit}) {\n        axios.get('/v1/su/cache')\n            .then((response) => {\n                commit('SET_SA_CACHE', response.data.cache);\n            }).catch(() => {\n        }).finally(() => {\n        });\n    },\n\n    clearCache(data = null) {\n        axios.delete('/v1/su/cache', {data})\n            .catch(() => {\n            }).finally(() => {\n        });\n    },\n\n    async getFleetwirePartners({commit}) {\n        return await performApiRequest(commit, 'SET_SU_LOADING', 'getFleetwirePartners', () => axios.get('/v1/su/partners'));\n    },\n\n    getFleetwirePartner({commit}, getFleetwirePartner) {\n        axios.get(`/v1/su/partners/${getFleetwirePartner}`)\n            .then((response) => {\n                EventBus.$emit('get-fleetwire-partner-success', response.data);\n            }).catch(() => {\n        }).finally(() => {\n        });\n    },\n\n    async updateUser({commit}, user) {\n        try {\n            const responseData = await performApiRequest(commit, 'SET_SU_LOADING', 'users', () => axios.put(`/v1/su/users/${user.uuid}`, user));\n            commit('SET_CURRENT_WORKING_USER', responseData.user);\n            EventBus.$emit('SystemMessage', {\n                type: 'success',\n                message: 'User Saved',\n            });\n        } catch (error) {\n            console.error(error)\n        }\n    },\n\n    fetchAllCompanies({commit}, data) {\n        const page = get(data, 'page', 1) || 1;\n\n        axios.get(`/v1/su/company?page=${page}`)\n            .then((response) => {\n                commit('SET_ALL_COMPANIES', response.data);\n            }).catch(() => {\n        }).finally(() => {\n        });\n    },\n\n    async fetchAllMedia({commit}) {\n        const responseData = await performApiRequest(commit, 'SET_SU_LOADING', 'users', () => axios.get('/v1/su/media'));\n        commit(types.SET_ALL_MEDIA_DIRECTORIES, responseData.directories);\n        return responseData;\n    },\n    async fetchDirectories({commit}, payload: { path: string }) {\n        console.dir('fetchDirectories');\n        console.dir(payload);\n        const urlParams = new URLSearchParams();\n        urlParams.append('path', payload.path);\n        const query = urlParams.toString();\n        return await performApiRequest(commit, 'SET_SU_LOADING', 'directory', () => axios.get(`/v1/su/directory?${query}`));\n    },\n\n    fetchServerDetails({commit}) {\n        axios.get('/v1/su/server-details')\n            .then((response) => {\n                commit('SET_ALL_SERVER_DETAILS', response.data.details);\n            }).catch(() => {\n        }).finally(() => {\n        });\n    },\n\n    async fetchAllMediaInDirectory({commit}, directory) {\n        const responseData = await performApiRequest(commit, 'SET_SU_LOADING', 'users', () => axios.get(`/v1/su/media/directory?directory=${directory}`));\n        commit(types.SET_ALL_MEDIA_IN_DIRECTORY, responseData.media);\n        commit(types.SET_MEDIA_BASE_PATH, responseData.path);\n        return responseData;\n    },\n\n    fetchAllListingImages({commit}) {\n        axios.get('/v1/su/listing-images')\n            .then((response) => {\n                commit('SET_ALL_LISTING_IMAGES', response.data.images);\n            }).catch(() => {\n        }).finally(() => {\n        });\n    },\n\n    resizeImage({commit}, path) {\n        axios.put('/v1/su/resize-image', {path})\n            .then(() => {\n            }).catch(() => {\n        }).finally(() => {\n        });\n    },\n\n    fetchOneCompany({commit}, uuid) {\n        axios.get(`/v1/su/company/${uuid}`)\n            .then((response) => {\n                commit('SET_CURRENT_WORKING_COMPANY', response.data.company);\n            }).catch(() => {\n        }).finally(() => {\n        });\n    },\n\n    updateCompany({commit, state}) {\n        axios.put(`/v1/su/company/${state.currentWorkingCompany.uuid}`, state.currentWorkingCompany)\n            .then((response) => {\n                commit('SET_CURRENT_WORKING_COMPANY', response.data.company);\n                EventBus.$emit('SystemMessage', {\n                    type: 'success',\n                    message: 'Company Updated',\n                });\n            }).catch(() => {\n        }).finally(() => {\n        });\n    },\n\n    deleteCompany({commit, state}) {\n        axios.delete(`/v1/su/company/${state.currentWorkingCompany.uuid}`)\n            .then((response) => {\n                commit('SET_CURRENT_WORKING_USER', response.data.user);\n                EventBus.$emit('SystemMessage', {\n                    type: 'success',\n                    message: 'User Saved',\n                });\n            }).catch(() => {\n        }).finally(() => {\n        });\n    },\n\n    getBasicStats({commit}) {\n        axios.get('/v1/su/stats')\n            .then((response) => {\n                commit('SET_CURRENT_WORKING_SU_BASIC_STATS', response.data.stats);\n            }).catch(() => {\n        }).finally(() => {\n        });\n    },\n\n    getActiveUsersStats({commit}) {\n        commit('SET_SU_LOADING', {subject: 'activeUsers', loading: true});\n\n        axios.get('/v1/su/stats/users')\n            .then((response) => {\n                commit('SET_CURRENT_WORKING_SU_BASIC_STATS', {active_users: response.data.stats});\n            }).catch(() => {\n        }).finally(() => {\n            commit('SET_SU_LOADING', {subject: 'activeUsers', loading: false});\n        });\n    },\n\n    testUserAPN({commit}) {\n        commit('SET_SU_LOADING', {subject: 'activeUsers', loading: true});\n\n        axios.get('/v1/su/pusher-test-user-notification')\n            .then(() => {\n            }).catch(() => {\n        }).finally(() => {\n            commit('SET_SU_LOADING', {subject: 'activeUsers', loading: false});\n        });\n    },\n\n    getSubscribersStats({commit}) {\n        commit('SET_SU_LOADING', {subject: 'subscribers', loading: true});\n\n        axios.get('/v1/su/stats/subscribers')\n            .then((response) => {\n                commit('SET_CURRENT_WORKING_SU_BASIC_STATS', {subscribers: response.data.stats});\n            }).catch(() => {\n        }).finally(() => {\n            commit('SET_SU_LOADING', {subject: 'subscribers', loading: false});\n        });\n    },\n\n    getListingStats({commit}) {\n        commit('SET_SU_LOADING', {subject: 'listings', loading: true});\n\n        axios.get('/v1/su/stats/listingStats')\n            .then((response) => {\n                commit('SET_CURRENT_WORKING_SU_BASIC_STATS', {listings: response.data.stats});\n            }).catch(() => {\n        }).finally(() => {\n            commit('SET_SU_LOADING', {subject: 'listings', loading: false});\n        });\n    },\n\n    getConnectionsStats({commit}) {\n        commit('SET_SU_LOADING', {subject: 'connections', loading: true});\n\n        axios.get('/v1/su/stats/connectionsStats')\n            .then((response) => {\n                commit('SET_CURRENT_WORKING_SU_BASIC_STATS', {connections: response.data.stats});\n            }).catch(() => {\n        }).finally(() => {\n            commit('SET_SU_LOADING', {subject: 'connections', loading: false});\n        });\n    },\n\n    getAutomations({commit}, data) {\n        commit('SET_SU_LOADING', {subject: 'automations', loading: true});\n\n        const query = createUrlQueryString(data);\n\n        axios.get(`/v1/su/stats/automations${query}`)\n            .then((response) => {\n                EventBus.$emit('get-automations-success', response.data);\n            }).catch(() => {\n        }).finally(() => {\n            commit('SET_SU_LOADING', {subject: 'automations', loading: false});\n        });\n    },\n    getAutomationsStats({commit}) {\n        commit('SET_SU_LOADING', {subject: 'automations', loading: true});\n\n        axios.get('/v1/su/stats/automationsStats')\n            .then((response) => {\n                commit('SET_CURRENT_WORKING_SU_BASIC_STATS', {automations: response.data.stats});\n            }).catch(() => {\n        }).finally(() => {\n            commit('SET_SU_LOADING', {subject: 'automations', loading: false});\n        });\n    },\n    getAutomationsStatsData({commit}, data) {\n        commit('SET_SU_LOADING', {subject: 'automations', loading: true});\n\n        const query = createUrlQueryString(data);\n\n        axios.get(`/v1/su/stats/automationsStatsData${query}`)\n            .then((response) => {\n                EventBus.$emit('get-automation-stats-data-success', response.data);\n            }).catch(() => {\n        }).finally(() => {\n            commit('SET_SU_LOADING', {subject: 'automations', loading: false});\n        });\n    },\n    getTuroTrip({commit}, data) {\n        commit('SET_SU_LOADING', {subject: 'turoTrip', loading: true});\n\n        const query = createUrlQueryString(data);\n\n        axios.get(`/v1/su/stats/getTuroTrip${query}`)\n            .then((response) => {\n                EventBus.$emit('get-turo-trip-success', response.data);\n            }).catch(() => {\n        }).finally(() => {\n            commit('SET_SU_LOADING', {subject: 'turoTrip', loading: false});\n        });\n    },\n    getBookingsStats({commit}) {\n        commit('SET_SU_LOADING', {subject: 'bookings', loading: true});\n\n        axios.get('/v1/su/stats/bookingStats')\n            .then((response) => {\n                commit('SET_CURRENT_WORKING_SU_BASIC_STATS', {bookings: response.data.stats});\n            }).catch(() => {\n        }).finally(() => {\n            commit('SET_SU_LOADING', {subject: 'bookings', loading: false});\n        });\n    },\n\n    async fetchAllRoles({commit}) {\n        try {\n            const responseData = await performApiRequest(commit, 'SET_SU_LOADING', 'roles', () => axios.get('/v1/roles'));\n            commit('SET_ALL_ROLES', responseData.roles);\n        } catch (error) {\n            console.error(error)\n        }\n    },\n\n    async fetchAllPermissions({commit}) {\n        try {\n            const responseData = await performApiRequest(commit, 'SET_SU_LOADING', 'permissions', () => axios.get('/v1/permissions'));\n            commit('SET_ALL_PERMISSIONS', responseData.permissions);\n        } catch (error) {\n            console.error(error)\n        }\n    },\n\n    createPermission({commit}, data) {\n        axios.post('/v1/permissions', data)\n            .then((response) => {\n                commit('SET_ALL_PERMISSIONS', response.data.permissions);\n                EventBus.$emit('SystemMessage', {\n                    type: 'success',\n                    message: 'Permission Created',\n                });\n                router.push({name: 'super.admin.permissions'});\n            }).catch(() => {\n        }).finally(() => {\n        });\n    },\n\n    updatePermission({commit}, data) {\n        axios.put(`/v1/permissions/${data.id}`, data)\n            .then((response) => {\n                commit('SET_ALL_PERMISSIONS', response.data.permissions);\n                EventBus.$emit('SystemMessage', {\n                    type: 'success',\n                    message: 'Permission Updated',\n                });\n            }).catch(() => {\n        }).finally(() => {\n        });\n    },\n\n    deletePermission({commit}, data) {\n        axios.delete(`/v1/permissions/${data.id}`)\n            .then((response) => {\n                commit('SET_ALL_PERMISSIONS', response.data.permissions);\n                EventBus.$emit('SystemMessage', {\n                    type: 'success',\n                    message: 'Permission Deleted',\n                });\n                router.push({name: 'super.admin.permissions'});\n            }).catch(() => {\n        }).finally(() => {\n        });\n    },\n\n    masqueradeInit({commit, rootGetters}, user) {\n        axios.get(`/v1/users/${user.uuid}/masquerade`)\n            .then((response) => {\n                commit('app/SET_MASQUERADE', {\n                    user: response.data.user,\n                    token: response.data.token,\n                    admin: {\n                        email: rootGetters['auth/user'].email,\n                        uuid: rootGetters['auth/user'].uuid,\n                    },\n                }, {root: true});\n            }).catch(() => {\n        }).finally(() => {\n        });\n    },\n\n    encryptText({commit}, string) {\n        axios.post('/v1/su/encrypt-text', {text: string})\n            .then((response) => {\n                EventBus.$emit('su-encrypt-text-success', response.data.result);\n            }).catch((e) => {\n            EventBus.$emit('su-encrypt-text-failed', e.response.data.message);\n        }).finally(() => {\n        });\n    },\n\n    decryptText({commit}, string) {\n        axios.post('/v1/su/decrypt-text', {text: string})\n            .then((response) => {\n                EventBus.$emit('su-decrypt-text-success', response.data.result);\n            }).catch((e) => {\n            EventBus.$emit('su-decrypt-text-failed', e.response.data.message);\n        }).finally(() => {\n        });\n    },\n    uploadMedia({commit}, file) {\n        axios.post('/v1/su/upload-media', file)\n            .then((response) => {\n                EventBus.$emit('su-upload-media-success', response.data.path);\n            }).catch((e) => {\n            EventBus.$emit('su-decrypt-text-failed', e.response.data.message);\n        }).finally(() => {\n        });\n    },\n};\n\nexport default {\n    namespaced: true,\n    state,\n    mutations,\n    actions,\n    getters,\n};\n","\nexport interface TagsViewState {\n    visitedViews: any[];\n    cachedViews: string[];\n}\n\nconst state: TagsViewState = {\n  visitedViews: [],\n  cachedViews: [],\n};\n\nconst mutations = {\n  ADD_VISITED_VIEW: (state, view) => {\n    if (state.visitedViews.some((v) => v.path === view.path)) {\n      return;\n    }\n\n    state.visitedViews.push(\n      { ...view, title: view.meta.title || 'no-name' },\n    );\n  },\n  ADD_CACHED_VIEW: (state, view) => {\n    if (state.cachedViews.includes(view.name)) {\n      return;\n    }\n\n    if (!view.meta.noCache) {\n      state.cachedViews.push(view.name);\n    }\n  },\n\n  DEL_VISITED_VIEW: (state, view) => {\n    for (const [i, v] of state.visitedViews.entries()) {\n      if (v.path === view.path) {\n        state.visitedViews.splice(i, 1);\n        break;\n      }\n    }\n  },\n  DEL_CACHED_VIEW: (state, view) => {\n    for (const i of state.cachedViews) {\n      if (i === view.name) {\n        const index = state.cachedViews.indexOf(i);\n        state.cachedViews.splice(index, 1);\n        break;\n      }\n    }\n  },\n\n  DEL_OTHERS_VISITED_VIEWS: (state, view) => {\n    state.visitedViews = state.visitedViews.filter((v) => v.meta.affix || v.path === view.path);\n  },\n  DEL_OTHERS_CACHED_VIEWS: (state, view) => {\n    for (const i of state.cachedViews) {\n      if (i === view.name) {\n        const index = state.cachedViews.indexOf(i);\n        state.cachedViews = state.cachedViews.slice(index, index + 1);\n        break;\n      }\n    }\n  },\n\n  DEL_ALL_VISITED_VIEWS: (state) => {\n    // keep affix tags\n    state.visitedViews = state.visitedViews.filter((tag) => tag.meta.affix);\n  },\n  DEL_ALL_CACHED_VIEWS: (state) => {\n    state.cachedViews = [];\n  },\n\n  UPDATE_VISITED_VIEW: (state, view) => {\n    for (let v of state.visitedViews) {\n      if (v.path === view.path) {\n        v = Object.assign(v, view);\n        break;\n      }\n    }\n  },\n};\n\nconst actions = {\n  addView({ dispatch }, view) {\n    dispatch('addVisitedView', view);\n    dispatch('addCachedView', view);\n  },\n  addVisitedView({ commit }, view) {\n    commit('ADD_VISITED_VIEW', view);\n  },\n  addCachedView({ commit }, view) {\n    commit('ADD_CACHED_VIEW', view);\n  },\n\n  delView({ dispatch, state }, view) {\n    return new Promise((resolve) => {\n      dispatch('delVisitedView', view);\n      dispatch('delCachedView', view);\n      resolve({\n        visitedViews: [...state.visitedViews],\n        cachedViews: [...state.cachedViews],\n      });\n    });\n  },\n  delVisitedView({ commit, state }, view) {\n    return new Promise((resolve) => {\n      commit('DEL_VISITED_VIEW', view);\n      resolve([...state.visitedViews]);\n    });\n  },\n  delCachedView({ commit, state }, view) {\n    return new Promise((resolve) => {\n      commit('DEL_CACHED_VIEW', view);\n      resolve([...state.cachedViews]);\n    });\n  },\n\n  delOthersViews({ dispatch, state }, view) {\n    return new Promise((resolve) => {\n      dispatch('delOthersVisitedViews', view);\n      dispatch('delOthersCachedViews', view);\n      resolve({\n        visitedViews: [...state.visitedViews],\n        cachedViews: [...state.cachedViews],\n      });\n    });\n  },\n  delOthersVisitedViews({ commit, state }, view) {\n    return new Promise((resolve) => {\n      commit('DEL_OTHERS_VISITED_VIEWS', view);\n      resolve([...state.visitedViews]);\n    });\n  },\n  delOthersCachedViews({ commit, state }, view) {\n    return new Promise((resolve) => {\n      commit('DEL_OTHERS_CACHED_VIEWS', view);\n      resolve([...state.cachedViews]);\n    });\n  },\n\n  delAllViews({ dispatch, state }, view) {\n    return new Promise((resolve) => {\n      dispatch('delAllVisitedViews', view);\n      dispatch('delAllCachedViews', view);\n      resolve({\n        visitedViews: [...state.visitedViews],\n        cachedViews: [...state.cachedViews],\n      });\n    });\n  },\n  delAllVisitedViews({ commit, state }) {\n    return new Promise((resolve) => {\n      commit('DEL_ALL_VISITED_VIEWS');\n      resolve([...state.visitedViews]);\n    });\n  },\n  delAllCachedViews({ commit, state }) {\n    return new Promise((resolve) => {\n      commit('DEL_ALL_CACHED_VIEWS');\n      resolve([...state.cachedViews]);\n    });\n  },\n\n  updateVisitedView({ commit }, view) {\n    commit('UPDATE_VISITED_VIEW', view);\n  },\n};\n\nexport default {\n  namespaced: true,\n  state,\n  mutations,\n  actions,\n};\n","import axios from 'axios';\nimport {Form} from '@/plugins/FWForms/index';\nimport {EventBus} from '@/plugins/eventBus';\nimport * as types from '../mutation-types';\nimport {performApiRequest} from '@/store/helpers/vuex-helpers';\nimport {TaxCategory} from '@/types';\nimport {push} from 'notivue'\n\nexport interface TaxesState {\n    init: boolean,\n    loading: Record<string, boolean>,\n    taxForm: Form<any>,\n    taxCategories: TaxCategory[],\n    currentWorkingTaxCategory: TaxCategory,\n}\n\nconst state: TaxesState = {\n    init: false,\n    loading: {\n        tax_categories: false,\n        set_default: false,\n        index: false,\n        create: false,\n        delete: false,\n        update: false,\n    },\n    taxForm: new Form(),\n    taxCategories: [],\n    currentWorkingTaxCategory: {\n        default: false,\n        name: '',\n        tax_rates: [{\n            name: '',\n            percentage: '',\n            amount: null,\n            type: 'trip',\n        }],\n    },\n};\n\nconst getters = {\n    init: (state: TaxesState) => state.init,\n    loading: (state: TaxesState) => state.loading,\n    taxForm: (state: TaxesState) => state.taxForm,\n    taxCategories: (state: TaxesState) => state.taxCategories,\n    currentWorkingTaxCategory: (state: TaxesState) => state.currentWorkingTaxCategory,\n};\n\nconst mutations = {\n    [types.SET_TAXES_LOADING](state: TaxesState, loading: { subject: string, loading: boolean }) {\n        state.loading[loading.subject] = loading.loading;\n    },\n    [types.SET_TAX_CATEGORIES](state: TaxesState, tax) {\n        state.taxCategories = tax;\n    },\n    [types.SET_CURRENT_WORKING_TAX_CATEGORY](state: TaxesState, tax) {\n        state.currentWorkingTaxCategory = tax;\n    },\n    [types.SET_TAX_CATEGORY_FORM_ERRORS](state: TaxesState, error: string | Record<string, string[]>) {\n        state.taxForm.errors.set(error);\n    },\n    [types.CLEAR_TAX_CATEGORY_FORM_ERRORS](state: TaxesState, form_field) {\n        if (form_field === null || form_field === undefined) {\n            state.taxForm.errors.clear();\n        } else {\n            state.taxForm.errors.clear(form_field);\n        }\n    },\n    [types.RESET_CURRENT_WORKING_TAX_CATEGORY](state: TaxesState) {\n        state.currentWorkingTaxCategory = {\n            default: false,\n            name: '',\n            tax_rates: [{\n                name: '',\n                percentage: '',\n                amount: null,\n                type: 'trip',\n            }],\n        };\n    },\n};\n\nconst actions = {\n\n\n    /**\n     * Get tax categories\n     */\n    async getTaxCategories({commit}) {\n        try {\n            const responseData = await performApiRequest(commit, 'SET_TAXES_LOADING', 'index', () => axios.get('/v1/tax-categories'));\n            EventBus.$emit('get-tax-category-success');\n            commit('SET_TAX_CATEGORIES', responseData.taxCategories || []);\n        } catch (error) {\n            commit(types.SET_TAX_CATEGORY_FORM_ERRORS, error);\n            throw error;\n        }\n    },\n\n\n    /**\n     * Save tax categories\n     */\n    async saveTaxCategory({commit}, taxCategory: TaxCategory) {\n        try {\n            commit('CLEAR_TAX_CATEGORY_FORM_ERRORS');\n            const responseData = await performApiRequest(commit, 'SET_TAXES_LOADING', 'create', () => axios.post('/v1/tax-categories', taxCategory));\n            commit('SET_TAX_CATEGORIES', responseData?.taxCategories || []);\n            push.success({\n                message: 'Tax Category created successfully',\n            });\n            EventBus.$emit('save-tax-category-success');\n        } catch (error) {\n            console.dir(error);\n            commit(types.SET_TAX_CATEGORY_FORM_ERRORS, error?.response?.data?.errors || 'There was an error');\n            throw error;\n        }\n    },\n\n\n    /**\n     * Update tax categories\n     */\n    async updateTaxCategory({commit}, taxCategory: TaxCategory) {\n        try {\n            commit(types.CLEAR_TAX_CATEGORY_FORM_ERRORS);\n            const responseData = await performApiRequest(commit, 'SET_TAXES_LOADING', 'update', () => axios.put(`/v1/tax-categories/${taxCategory.uuid}`, taxCategory));\n            commit(types.SET_TAX_CATEGORIES, responseData?.taxCategories || []);\n            push.success({\n                message: 'Tax Category updated successfully',\n            });\n        } catch (error) {\n            commit(types.SET_TAX_CATEGORY_FORM_ERRORS, error.response.data?.errors || 'There was an error');\n            throw error;\n        }\n    },\n\n\n    /**\n     * Delete tax categories\n     */\n    async deleteTaxCategory({commit}, taxCategory: TaxCategory) {\n        try {\n            const responseData = await performApiRequest(commit, 'SET_TAXES_LOADING', 'delete', () => axios.delete(`/v1/tax-categories/${taxCategory.uuid}`));\n            commit(types.SET_TAX_CATEGORIES, responseData?.taxCategories || []);\n\n            push.success({\n                message: 'Tax Category deleted successfully',\n            });\n        } catch (error) {\n            throw error;\n        }\n    },\n\n\n    /**\n     * Set tax category default\n     */\n    async taxCategorySetDefault({commit}, taxCategory: TaxCategory) {\n        try {\n            const responseData = await performApiRequest(commit, 'SET_TAXES_LOADING', 'set_default', () => axios.post(`/v1/tax-categories/${taxCategory.uuid}/set-default`));\n            commit(types.SET_TAX_CATEGORIES, responseData?.taxCategories || []);\n\n            push.success({\n                message: 'Tax Category set as default',\n            });\n        } catch (error) {\n            throw error;\n        }\n    },\n};\n\nexport default {\n    namespaced: true,\n    state,\n    mutations,\n    actions,\n    getters,\n};\n","import axios from 'axios';\nimport * as types from '../mutation-types';\nimport {performApiRequest} from '@/store/helpers/vuex-helpers';\nimport {ListingInterface, MaintenanceTask} from '@/types';\nimport {push} from 'notivue';\n\n\nexport interface VehicleRecall {\n    NHTSA_action_number: string | null,\n    NHTSA_campaign_number: string,\n    component: string,\n    consequence: string | null,\n    created_at: string | null,\n    id: number,\n    manufacturer: string,\n    notes: string,\n    remedy: string,\n    report_received_date: string,\n    summary: string,\n    updated_at: string | null,\n    vehicle_make: string,\n    vehicle_model: string,\n    vehicle_year: number\n}\n\nexport interface VehicleListingRecall {\n    addressed_at: string | null,\n    created_at: string | null,\n    notified_at: string,\n    status: string | null,\n    updated_at: string | null,\n    vehicle_recall: VehicleRecall\n}\n\nexport interface MaintenanceState {\n    loading: Record<string, boolean>,\n    reminderDays: number[],\n    reminderInterval: string[],\n    maintenanceTypes: string[],\n    maintenanceTasks: string[],\n    repairTasks: string[],\n    currentMaintenance: MaintenanceTask[],\n    currentRecalls: VehicleListingRecall[],\n}\n\nconst state: MaintenanceState = {\n    loading: {\n        fetch: false,\n        adding: false,\n        updating: false,\n        complete: false,\n        delete: false,\n        recalls: false,\n    },\n    currentMaintenance: [],\n    currentRecalls: [],\n\n    reminderDays: [30, 60, 90],\n    reminderInterval: ['yearly'],\n    maintenanceTypes: ['Maintenance', 'Repair'],\n    maintenanceTasks: [\n        'Oil Change',\n        'Tire Replacement',\n        'Wheel Alignment',\n        'Air Filter',\n        'Fluids',\n        'Breaks',\n        'Engine',\n        'Transmission',\n        'Suspension',\n        'Body',\n        'Interior',\n        'Battery',\n        'Electronics',\n        'Other',\n    ],\n    repairTasks: [],\n};\n\n\nconst getters = {\n    loading: (state: MaintenanceState) => state.loading,\n    reminderDays: (state: MaintenanceState) => state.reminderDays,\n    reminderInterval: (state: MaintenanceState) => state.reminderInterval,\n    maintenanceTypes: (state: MaintenanceState) => state.maintenanceTypes,\n    maintenanceTasks: (state: MaintenanceState) => state.maintenanceTasks,\n    currentMaintenance: (state: MaintenanceState) => state.currentMaintenance,\n    currentRecalls: (state: MaintenanceState) => state.currentRecalls,\n};\n\n\nconst mutations = {\n    [types.SET_MAINTENANCE_LOADING](state: MaintenanceState, loading: { subject: string, loading: boolean }) {\n        state.loading[loading.subject] = loading.loading;\n    },\n    [types.SET_CURRENT_VEHICLE_MAINTENANCE](state: MaintenanceState, maintenance: MaintenanceTask[]) {\n        state.currentMaintenance = maintenance;\n    },\n    [types.SET_CURRENT_VEHICLE_RECALLS](state: MaintenanceState, recalls: VehicleListingRecall[]) {\n        state.currentRecalls = recalls;\n    },\n    [types.RESET_CURRENT_WORKING_MAINTENANCE_ITEM](state: MaintenanceState) {\n        state.currentMaintenance = [];\n    },\n};\n\nconst actions = {\n\n    /**\n     * Fetch a vehicle maintenance record\n     */\n    async fetchVehicleMaintenance({commit}, listing: ListingInterface) {\n        const responseData = await performApiRequest(commit, 'SET_MAINTENANCE_LOADING', 'fetch', () => axios.get(`/v1/listings/${listing.l_id}/maintenance`));\n        commit(types.SET_CURRENT_VEHICLE_MAINTENANCE, responseData.maintenance);\n    },\n\n    /**\n     * Fetch a vehicles recalls\n     */\n    async fetchVehicleRecalls({commit}, listing: ListingInterface) {\n        const responseData = await performApiRequest(commit, 'SET_MAINTENANCE_LOADING', 'recalls', () => axios.get(`/v1/listings/${listing.l_id}/recalls`));\n        commit(types.SET_CURRENT_VEHICLE_RECALLS, responseData.recall_listings);\n    },\n\n\n    /**\n     * Creates a vehicle maintenance record\n     */\n    async createVehicleMaintenance({commit}, data: { listing: ListingInterface, maintenance: MaintenanceTask }) {\n        try {\n            const listingId = data.listing.l_id;\n            const maintenanceItem = data.maintenance;\n            await performApiRequest(commit, 'SET_MAINTENANCE_LOADING', 'adding', () => axios.post(`/v1/listings/${listingId}/maintenance`, maintenanceItem));\n            push.sucess({\n                message: 'Added successfully',\n            });\n        } catch (error) {\n            push.error({\n                message: error?.response?.data?.message || 'There was an error',\n            });\n        }\n    },\n\n\n    /**\n     * Update a vehicle maintenance record\n     */\n    async updateVehicleMaintenance({commit}, data: { listing: ListingInterface, maintenance: MaintenanceTask }) {\n        try {\n            const listingId = data.listing.l_id;\n            const maintenanceItem = data.maintenance;\n\n            await performApiRequest(commit, 'SET_MAINTENANCE_LOADING', 'updating', () => axios.put(`/v1/listings/${listingId}/maintenance/${maintenanceItem.uuid}`, maintenanceItem));\n            push.sucess({\n                message: 'Updated successfully',\n            });\n            commit('RESET_CURRENT_WORKING_MAINTENANCE_ITEM');\n        } catch (error) {\n            push.error({\n                message: error?.response?.data?.message || 'There was an error',\n            });\n        }\n    },\n\n\n    /**\n     * Mark complete a vehicle maintenance record\n     */\n    async completeVehicleMaintenance({commit}, {listing, maintenance}) {\n        const responseData = await performApiRequest(commit, 'SET_MAINTENANCE_LOADING', 'complete', () => axios.post(`/v1/listings/${listing.l_id}/maintenance/${maintenance.uuid}/complete`, maintenance));\n        commit(types.SET_CURRENT_VEHICLE_MAINTENANCE, responseData.maintenance);\n\n        push.sucess({\n            message: 'Completed successfully',\n        });\n    },\n\n\n    /**\n     * Delete a vehicle maintenance record\n     */\n    async deleteVehicleMaintenance({commit}, maintenance: MaintenanceTask) {\n        await performApiRequest(commit, 'SET_MAINTENANCE_LOADING', 'delete', () => axios.delete(`/v1/maintenance/${maintenance.uuid}`));\n        push.sucess({\n            message: 'Deleted successfully',\n        });\n    },\n};\n\n\nexport default {\n    namespaced: true,\n    state,\n    mutations,\n    actions,\n    getters,\n};\n","import axios from 'axios';\nimport {get} from 'lodash';\nimport {EventBus} from '@/plugins/eventBus';\nimport {StorageService} from '@/services/storage.service';\nimport * as types from '../mutation-types';\nimport {performApiRequest} from '@/store/helpers/vuex-helpers';\nimport {OrderDocumentType, OrderLine, OrderType} from '@/types';\n\nexport interface OrderState {\n    loading: Record<string, boolean>;\n    orders: OrderType[];\n    order: OrderType;\n    documents: OrderDocumentType[];\n    document: OrderDocumentType | null;\n    downloadStatus: any;\n    availability: any;\n    currentWorkingPricingWizardOrderLine: OrderLine | null;\n    dialogs: {\n        pricingWizard: boolean;\n    };\n}\n\nexport interface UpdateOrderPayload {\n    orderUuid: string;\n    attributes?: Record<string, any>;\n}\n\nconst state: OrderState = {\n    loading: {\n        orders: false,\n        newOrder: false,\n        update: false,\n        cancelOrder: false,\n        reserving: false,\n        concept: false,\n        deleteOrderDocument: false,\n        updateLine: false,\n        addLine: false,\n        removeLine: false,\n        holdDeposit: false,\n        addCustomerToOrder: false,\n        removeCustomer: false,\n        getDocuments: false,\n    },\n    dialogs: {\n        pricingWizard: false,\n    },\n    currentWorkingPricingWizardOrderLine: null,\n    orders: [],\n    order: null,\n    documents: [],\n    document: null,\n    downloadStatus: null,\n    availability: {},\n};\n\ninterface AddLinePayload {\n    orderUuid: string;\n    line: OrderLine;\n}\n\nconst getters = {\n    orders: (state: OrderState) => state.orders,\n    order: (state: OrderState) => state.order,\n    documents: (state: OrderState) => state.documents,\n    document: (state: OrderState) => state.document,\n    loading: (state: OrderState) => state.loading,\n    downloadStatus: (state: OrderState) => state.downloadStatus,\n    availability: (state: OrderState) => state.availability,\n    orderDialogs: (state: OrderState) => state.dialogs,\n    currentWorkingPricingWizardOrderLine: (state: OrderState) => state.currentWorkingPricingWizardOrderLine,\n};\n\nconst mutations = {\n    [types.SET_ORDERS_LOADING](state: OrderState, loading: { subject: string, loading: boolean }) {\n        state.loading[loading.subject] = loading.loading;\n    },\n    [types.SET_ORDER](state: OrderState, order: OrderType) {\n        console.dir('SET_ORDER');\n        state.order = order;\n    },\n    [types.UPDATE_ORDER_LINE](state: OrderState, line) {\n        let lines = state.order.lines;\n\n        lines = lines.map((l) => {\n            if (l.uuid === line.uuid) {\n                return line;\n            }\n            return l;\n        });\n\n        state.order.lines = lines;\n    },\n    [types.SET_ORDER_DOCUMENTS](state: OrderState, documents: OrderDocumentType[]) {\n        state.documents = documents;\n    },\n    [types.SET_ORDER_DOCUMENT](state: OrderState, document: OrderDocumentType) {\n        state.document = document;\n    },\n    [types.SET_ORDER_DOCUMENT_DOWNLOAD_STATUS](state: OrderState, status) {\n        state.downloadStatus = status;\n    },\n    [types.SET_ORDER_AVAILABILITY](state: OrderState, availability) {\n        state.availability = availability;\n    },\n    [types.SET_OPEN_PRICING_WIZARD_DIALOG](state: OrderState, data) {\n        state.currentWorkingPricingWizardOrderLine = data.lineItem;\n        state.dialogs.pricingWizard = data.open;\n    },\n};\n\nconst actions = {\n\n    async newOrder({commit}) {\n        try {\n            const responseData = await performApiRequest(\n                commit,\n                'SET_ORDERS_LOADING',\n                'newOrder',\n                () => axios.get('/v1/orders/new')\n            );\n\n            commit('SET_ORDER', responseData.order);\n            EventBus.$emit('get-new-order-success', responseData.order);\n        } catch (error) {\n        }\n    },\n\n    /**\n     * Get order\n     */\n    async getOrder({commit}, orderUuid: string): Promise<void> {\n        try {\n            const responseData = await performApiRequest(\n                commit,\n                'SET_ORDERS_LOADING',\n                'getOrder',\n                () => axios.get(`/v1/orders/${orderUuid}`)\n            );\n\n            commit('SET_ORDER', responseData.order);\n        } catch (error) {\n            EventBus.$emit('SystemMessage', {\n                type: 'error',\n                message: error?.response?.data?.message || 'Failed to load order',\n            });\n        }\n    },\n\n    /**\n     * Update order\n     */\n    async update({commit}, {orderUuid, attributes = {}}: UpdateOrderPayload) {\n        try {\n            const responseData = await performApiRequest(\n                commit,\n                'SET_ORDERS_LOADING',\n                'update',\n                () => axios.put(`/v1/orders/${orderUuid}`, {attributes})\n            );\n            const {order} = responseData;\n            commit('SET_ORDER', order);\n            EventBus.$emit('update-order-success', order);\n        } catch (error) {\n            const errorMessage = error?.response?.data?.message || 'There was an error';\n            EventBus.$emit('SystemMessage', {\n                type: 'error',\n                message: errorMessage,\n            });\n        }\n    },\n\n    async makeCustomerPrimary({commit}, {orderUuid, r_id}) {\n        try {\n            const responseData = await performApiRequest(\n                commit,\n                'SET_ORDERS_LOADING',\n                'update',\n                () => axios.post(`/v1/orders/${orderUuid}/make-customer-primary`, {r_id})\n            );\n\n            commit(types.SET_ORDER, responseData.order);\n            EventBus.$emit('update-order-success', responseData.order);\n        } catch (error) {\n        }\n    },\n\n\n    removeCustomer({commit}, {orderUuid, r_id}) {\n        commit('SET_ORDERS_LOADING', {subject: 'removeCustomer', loading: true});\n\n        axios.post(`/v1/orders/${orderUuid}/remove-customer`, {r_id})\n            .then((response) => {\n                commit('SET_ORDER', response.data.order);\n                EventBus.$emit('update-order-success', response.data.order);\n            }).catch(() => {\n        }).finally(() => {\n            commit('SET_ORDERS_LOADING', {subject: 'removeCustomer', loading: false});\n        });\n    },\n\n    addCustomerToOrder({commit}, {orderUuid, r_id}) {\n        commit('SET_ORDERS_LOADING', {subject: 'addCustomerToOrder', loading: true});\n\n        axios.post(`/v1/orders/${orderUuid}/add-customer`, {r_id})\n            .then((response) => {\n                commit('SET_ORDER', response.data.order);\n                EventBus.$emit('update-order-success', response.data.order);\n                EventBus.$emit('add-customer-to-order-success', response.data.order);\n            }).catch(() => {\n        }).finally(() => {\n            commit('SET_ORDERS_LOADING', {subject: 'addCustomerToOrder', loading: false});\n        });\n    },\n\n\n    /**\n     * Reserve a new order.\n     */\n    reserve({commit}, orderUuid: string) {\n        commit('SET_ORDERS_LOADING', {subject: 'reserving', loading: true});\n\n        axios.post(`/v1/orders/${orderUuid}/reserve`)\n            .then((response) => {\n                commit(types.SET_ORDER, response.data.order);\n                EventBus.$emit('reserve-order-success', response.data);\n            }).catch(() => {\n        }).finally(() => {\n            commit('SET_ORDERS_LOADING', {subject: 'reserving', loading: false});\n        });\n    },\n\n\n    /**\n     * Create a new order concept.\n     */\n    concept({commit}, orderUuid: string) {\n        commit('SET_ORDERS_LOADING', {subject: 'concept', loading: true});\n\n        axios.post(`/v1/company/${StorageService.getCompanyUuid()}/orders/${orderUuid}/concept`)\n            .then((response) => {\n                commit('SET_ORDER', response.data.order);\n                EventBus.$emit('reserve-order-success', response.data);\n            }).catch((e) => {\n            EventBus.$emit('set-order-concept-error', e.response.data);\n        }).finally(() => {\n            commit('SET_ORDERS_LOADING', {subject: 'concept', loading: false});\n        });\n    },\n\n\n    /**\n     * Check availability of a new order.\n     */\n    availability({commit}, orderUuid: string) {\n        commit('SET_ORDERS_LOADING', {subject: 'availability', loading: true});\n\n        axios.get(`/v1/orders/${orderUuid}/availability`)\n            .then((response) => {\n                commit('SET_ORDER_AVAILABILITY', get(response, 'data.available', []));\n            }).catch(() => {\n        }).finally(() => {\n            commit('SET_ORDERS_LOADING', {subject: 'availability', loading: false});\n        });\n    },\n\n\n    /**\n     * Hold the deposit of an order\n     */\n    holdOrderDeposit({commit}, {orderUuid, attributes}) {\n        commit('SET_ORDERS_LOADING', {subject: 'holdDeposit', loading: true});\n\n        axios.post(`/v1/orders/${orderUuid}/hold-deposit`, attributes)\n            .then(() => {\n                EventBus.$emit('hold-order-deposit-success');\n            }).catch(() => {\n        }).finally(() => {\n            commit('SET_ORDERS_LOADING', {subject: 'holdDeposit', loading: false});\n        });\n    },\n\n\n    /**\n     * Create a new quote\n     */\n    createNewQuote({commit}, attributes) {\n        commit('SET_ORDERS_LOADING', {subject: 'update', loading: true});\n\n        axios.post('/v1/quotes', attributes)\n            .then((response) => {\n                EventBus.$emit('create-new-order-quote-success', get(response, 'data.document'));\n            }).catch(() => {\n        }).finally(() => {\n            commit('SET_ORDERS_LOADING', {subject: 'update', loading: false});\n        });\n    },\n\n    createNewOrderDocument({commit}, attributes) {\n        commit('SET_ORDERS_LOADING', {subject: 'update', loading: true});\n\n        axios.post('/v1/order-documents', attributes)\n            .then((response) => {\n                EventBus.$emit('create-new-order-quote-success', get(response, 'data.document'));\n            }).catch(() => {\n        }).finally(() => {\n            commit('SET_ORDERS_LOADING', {subject: 'update', loading: false});\n        });\n    },\n\n\n    getAllOrderDocuments({commit}) {\n        commit('SET_ORDERS_LOADING', {subject: 'update', loading: true});\n\n        axios.get('/v1/order-documents')\n            .then((response) => {\n                commit('SET_ORDER_DOCUMENTS', get(response, 'data.documents'));\n            }).catch(() => {\n        }).finally(() => {\n            commit('SET_ORDERS_LOADING', {subject: 'update', loading: false});\n        });\n    },\n\n\n    /**\n     *Get the orders documents (rental agreement envelope, invoice, etc)\n     */\n    getOrderDocuments({commit}, orderUuid: string) {\n        commit('SET_ORDERS_LOADING', {subject: 'getDocuments', loading: true});\n\n        axios.get(`/v1/order-documents?order_id=${orderUuid}`)\n            .then((response) => {\n                commit('SET_ORDER_DOCUMENTS', get(response, 'data.documents'));\n            }).catch(() => {\n        }).finally(() => {\n            commit('SET_ORDERS_LOADING', {subject: 'getDocuments', loading: false});\n        });\n    },\n\n    async getOrderDocument({commit}, documentUuid: string) {\n        const responseData = await performApiRequest(\n            commit,\n            'SET_ORDERS_LOADING',\n            'update',\n            () => axios.get(`/v1/order-documents/${documentUuid}`)\n        );\n\n        commit(types.SET_ORDER_DOCUMENT, responseData?.document);\n\n        return responseData?.document;\n    },\n\n    updateOrderDocument({commit}, {documentUuid, attributes}) {\n        commit('SET_ORDERS_LOADING', {subject: 'update', loading: true});\n\n        axios.put(`/v1/order-documents/${documentUuid}`, {attributes})\n            .then((response) => {\n                commit('SET_ORDER_DOCUMENT', get(response, 'data.document'));\n                EventBus.$emit('update-order-document-success', get(response, 'data.document'));\n            }).catch((e) => {\n            EventBus.$emit('update-order-document-error', e.response);\n            EventBus.$emit('SystemMessage', {\n                type: 'error',\n                message: e?.response?.data?.message || 'There was an error',\n            });\n        }).finally(() => {\n            commit('SET_ORDERS_LOADING', {subject: 'update', loading: false});\n        });\n    },\n\n    async deleteOrderDocument({commit}, documentUuid: string) {\n        console.dir('deleteOrderDocument');\n        return await performApiRequest(\n            commit,\n            'SET_ORDERS_LOADING',\n            'deleteOrderDocument',\n            () => axios.delete(`/v1/order-documents/${documentUuid}`)\n        );\n    },\n\n    downloadOrderDocument({commit}, documentUuid: string) {\n        commit('SET_ORDERS_LOADING', {subject: 'update', loading: true});\n\n        axios.get(`/v1/company/${StorageService.getCompanyUuid()}/order-documents/${documentUuid}/download`)\n            .then((response) => {\n                commit('SET_ORDER_DOCUMENT_DOWNLOAD_STATUS', response.data);\n                EventBus.$emit('start-order-document-download-success', response.data);\n            }).catch(() => {\n        }).finally(() => {\n            commit('SET_ORDERS_LOADING', {subject: 'update', loading: false});\n        });\n    },\n\n\n    /**\n     * Add a line item to an order\n     */\n    async addLine({commit}, {orderUuid, line}: AddLinePayload) {\n        try {\n            const responseData = await performApiRequest(\n                commit,\n                'SET_ORDERS_LOADING',\n                'addLine',\n                () => axios.post(`/v1/orders/${orderUuid}/line`, {line})\n            );\n\n            EventBus.$emit('add-order-line-success', responseData.order);\n            commit('SET_ORDER', responseData.order);\n        } catch (error) {\n        }\n    },\n\n    async updateLine({commit}, {line, attributes}: { line: string, attributes: Record<string, any> }) {\n        const responseData = await performApiRequest(\n            commit,\n            'SET_ORDERS_LOADING',\n            'updateLine',\n            () => axios.put(`/v1/line/${line}`, {attributes})\n        );\n\n        commit('SET_ORDER', responseData.order);\n        EventBus.$emit('update-order-success', responseData.order);\n    },\n\n    updateLines({commit}, lines) {\n        commit('SET_ORDERS_LOADING', {subject: 'updateLine', loading: true});\n\n        axios.put('/v1/lines', {lines})\n            .then(() => {\n                EventBus.$emit('update-order-lines-success');\n            }).catch(() => {\n        }).finally(() => {\n            commit('SET_ORDERS_LOADING', {subject: 'updateLine', loading: false});\n        });\n    },\n\n\n    async removeLine({commit}, line: string) {\n        try {\n            await performApiRequest(\n                commit,\n                'SET_ORDERS_LOADING',\n                'removeLine',\n                () => axios.delete(`/v1/line/${line}`)\n            );\n        } catch (error) {\n        }\n    },\n\n    /**\n     * Get a line item model (ex. location model)\n     */\n    getOrderItemModel({commit}, data) {\n        commit('SET_ORDERS_LOADING', {subject: 'itemModel', loading: true});\n\n        axios.get(`/v1/line-item-model/${data.model}/${data.id}`)\n            .then((response) => {\n                EventBus.$emit('get-order-line-model-success', get(response, 'data.model'));\n            }).catch(() => {\n        }).finally(() => {\n            commit('SET_ORDERS_LOADING', {subject: 'itemModel', loading: false});\n        });\n    },\n\n\n    /**\n     * Cancel an order\n     *\n     * @param commit\n     * @param {String} orderUuid The orders UUID\n     */\n    cancelOrder({commit}, orderUuid: string) {\n        commit('SET_ORDERS_LOADING', {subject: 'cancelOrder', loading: true});\n\n        axios.post(`/v1/orders/${orderUuid}/cancel`)\n            .then(() => {\n                EventBus.$emit('cancel-order-success');\n            }).catch((e) => {\n            EventBus.$emit('cancel-order-failure', get(e, 'response.data.message', 'There was an error'));\n        }).finally(() => {\n            commit('SET_ORDERS_LOADING', {subject: 'cancelOrder', loading: false});\n        });\n    },\n};\n\nexport default {\n    namespaced: true,\n    state,\n    mutations,\n    actions,\n    getters,\n};\n","import * as types from '@/store/mutation-types';\nimport {Form} from '@/plugins/FWForms/index';\nimport axios from 'axios';\nimport {EventBus} from '@/plugins/eventBus';\nimport {StorageService} from '@/services/storage.service';\nimport {performApiRequest} from '@/store/helpers/vuex-helpers';\nimport {Invoice, StripeSubscriptionObject} from '@/types/Stripe';\nimport {SubscriptionPlan} from '@/types';\nimport {push} from 'notivue';\n\nexport interface StripeState {\n    loading: Record<string, boolean>,\n    currentWorkingInvoice: any,\n    currentWorkingPaymentIntent: any,\n    billing_session_url: string | null,\n    stripeIdentities: Array<string>,\n    stripeForm: Form<any>,\n    charge: any,\n    account: any,\n    invoices: Invoice[],\n    stripeSubscriptionObject: StripeSubscriptionObject\n    stripePrices: SubscriptionPlan[]\n}\n\nconst state: StripeState = {\n    loading: {\n        account: false,\n        charge: false,\n        fetchInvoice: false,\n        fetchPortalUrl: false,\n        updateDefaultPaymentMethod: false,\n        createStripeVerification: false,\n        bookingInitStripeVerification: false,\n        cancelStripeVerification: false,\n        refreshDocumentImageFiles: false,\n        freshStripeVerification: false,\n        fetchSetupUrl: false,\n        invoices: false,\n    },\n    currentWorkingInvoice: {},\n    currentWorkingPaymentIntent: {},\n    billing_session_url: null,\n    stripeIdentities: [],\n    stripeForm: new Form(),\n    charge: null,\n    account: null,\n    invoices: [],\n    stripeSubscriptionObject: null,\n    stripePrices: [\n        {\n            name: 'basic',\n            pricing: {\n                monthly: {\n                    id: 'sub_basic_monthly',\n                    price_id: 'sub_basic_monthly',\n                    price: 34,\n                },\n                yearly: {\n                    id: 'sub_basic_annual',\n                    price_id: 'sub_basic_annual',\n                    price: 24,\n                },\n            },\n            description: {\n                bullets: [\n                    'Orders',\n                    'Up to 5 vehicles',\n                    'Includes 1 branch',\n                    '2 staff accounts',\n                    'Unlimited Customers',\n                    '1 car-share connections',\n                    'Online Store',\n                    'Stripe Integration',\n                    'And More*',\n                ],\n            },\n        },\n        {\n            name: 'standard',\n            pricing: {\n                monthly: {\n                    id: 'sub_standard_monthly',\n                    price_id: 'sub_standard_monthly',\n                    price: 89,\n                },\n                yearly: {\n                    id: 'sub_standard_annual',\n                    price_id: 'sub_standard_annual',\n                    price: 69,\n                },\n            },\n            description: {\n                bullets: [\n                    'All of Basic',\n                    'Up to 50 vehicles',\n                    '5 staff accounts',\n                    'Includes 2 branches',\n                    'eSign Rental Agreements',\n                    'Coupons',\n                    'QR & Barcodes',\n                    'Reports',\n                    'Import/Export',\n                    'Hide powered by Fleetwire',\n                    'And More*',\n                ],\n            },\n        },\n        {\n            name: 'premium',\n            pricing: {\n                monthly: {\n                    id: 'sub_premium_monthly',\n                    price_id: 'sub_premium_monthly',\n                    price: 279,\n                },\n                yearly: {\n                    id: 'sub_premium_annual',\n                    price_id: 'sub_premium_annual',\n                    price: 239,\n                },\n            },\n            description: {\n                bullets: [\n                    'All of Standard',\n                    'Up to 150 vehicles',\n                    '20 staff accounts',\n                    'Includes 2 branches',\n                    'Custom Domain',\n                    'Custom Email Domain',\n                    'Additional Scripts',\n                    '10 Car-share connections',\n                    'Zapier integration',\n                    'API',\n                    'TFA (Two factor authentication)',\n                    'And More*',\n                ],\n            },\n        },\n    ],\n};\n\nconst getters = {\n    loading: (state: StripeState) => state.loading,\n    currentWorkingInvoice: (state: StripeState) => state.currentWorkingInvoice,\n    currentWorkingPaymentIntent: (state: StripeState) => state.currentWorkingPaymentIntent,\n    billingSessionUrl: (state: StripeState) => state.billing_session_url,\n    stripeIdentities: (state: StripeState) => state.stripeIdentities,\n    stripeForm: (state: StripeState) => state.stripeForm,\n    charge: (state: StripeState) => state.charge,\n    account: (state: StripeState) => state.account,\n    stripeSubscriptionObject: (state: StripeState) => state.stripeSubscriptionObject,\n    invoices: (state: StripeState) => state.invoices,\n    stripePrices: (state: StripeState) => state.stripePrices,\n};\n\nconst mutations = {\n    [types.SET_STRIPE_LOADING](state: StripeState, loading: { subject: string, loading: boolean }) {\n        state.loading[loading.subject] = loading.loading;\n    },\n    [types.SET_CURRENT_WORKING_INVOICE](state: StripeState, invoice) {\n        state.currentWorkingInvoice = invoice;\n    },\n    [types.SET_CURRENT_WORKING_PAYMENT_INTENT](state: StripeState, intent) {\n        state.currentWorkingPaymentIntent = intent;\n    },\n    [types.SET_BILLING_PORTAL_SESSION](state: StripeState, url: string) {\n        state.billing_session_url = url;\n    },\n    [types.SET_STRIPE_PRICE_DATA](state: StripeState, prices: object) {\n        //     sub_basic_annual\n        //         :\n        //         \"price_1KfoLECZJTjTZE0Qs6poe7wG\"\n        //     sub_basic_monthly\n        //         :\n        //         \"price_1KfoLECZJTjTZE0QmWH5yynX\"\n        //     sub_premium_annual\n        //         :\n        //         \"sub_premium_annual\"\n        //     sub_premium_monthly\n        //         :\n        //         \"sub_premium_monthly\"\n        //     sub_standard_annual\n        //         :\n        //         \"sub_standard_annual\"\n        //     sub_standard_monthly\n        //         :\n        //         \"sub_standard_monthly\"\n        //             [[Prototype]]\n        //\n\n        console.dir(prices);\n        console.dir(state.stripePrices);\n        state.stripePrices.forEach((plan) => {\n            plan.pricing.monthly.price_id = prices[plan.pricing.monthly.id];\n            plan.pricing.yearly.price_id = prices[plan.pricing.yearly.id];\n        });\n    },\n    [types.SET_STRIPE_IDENTITIES](state: StripeState, ids) {\n        state.stripeIdentities = ids;\n    },\n    [types.SET_SUBSCRIPTION_DETAILS](state: StripeState, details) {\n        state.stripeSubscriptionObject = details?.subscription || details;\n    },\n    [types.SET_STRIPE_ACCOUNT](state: StripeState, data) {\n        state.account = data;\n    },\n    [types.SET_CURRENT_STRIPE_CHARGE](state: StripeState, charge) {\n        state.charge = charge;\n    },\n    [types.SET_INVOICES](state: StripeState, invoices: Invoice[]) {\n        state.invoices = invoices;\n    },\n};\n\nconst actions = {\n    async fetchInvoices({commit}) {\n        try {\n            const responseData = await performApiRequest(commit, 'SET_STRIPE_LOADING', 'invoices', () => axios.get('/v1/stripe/invoices'));\n            commit('SET_INVOICES', responseData.invoices);\n        } catch (error) {\n            console.error(error)\n        }\n    },\n\n    fetchInvoice({commit, rootGetters}, invoice_id) {\n        commit('SET_STRIPE_LOADING', {subject: 'fetchInvoice', loading: true});\n        axios.get(`/v1/company/${rootGetters['company/company'].uuid}/stripe/invoices/${invoice_id}`)\n            .then((response) => {\n                commit('SET_CURRENT_WORKING_INVOICE', response.data.invoice);\n            }).catch(() => {\n            push.error({\n                message: 'Settings update error. Try again later.',\n            });\n        }).finally(() => {\n            commit('SET_STRIPE_LOADING', {subject: 'fetchInvoice', loading: false});\n        });\n    },\n\n    fetchCharge({commit}, charge_id: string) {\n        commit('SET_STRIPE_LOADING', {subject: 'charge', loading: true});\n\n        axios.get(`/v1/stripe/charge/${charge_id}`)\n            .then((response) => {\n                commit(types.SET_CURRENT_STRIPE_CHARGE, response.data.charge);\n            }).catch(() => {\n            push.error({\n                message: 'Settings update error. Try again later.',\n            });\n        }).finally(() => {\n            commit('SET_STRIPE_LOADING', {subject: 'charge', loading: false});\n        });\n    },\n\n    async fetchStripeAccount({commit}) {\n        try {\n            const responseData = await performApiRequest(commit, 'SET_STRIPE_LOADING', 'account', () => axios.get('/v1/stripe/account'));\n            commit(types.SET_STRIPE_ACCOUNT, responseData.account);\n        } catch (error) {\n            push.error({\n                message: error?.response?.data?.message || 'Fetching Stripe Account error. Try again later.',\n            });\n        }\n    },\n\n\n    /**\n     * Attach a new payment method to company\n     */\n    attachPaymentMethod({commit}, paymentMethod) {\n        commit('SET_PAYMENTS_LOADING', {subject: 'addPaymentMethod', loading: true});\n\n        axios.post('/v1/stripe/attach-payment-method', paymentMethod)\n            .then(() => {\n                EventBus.$emit('add-payment-method-success');\n            }).catch(() => {\n        }).finally(() => {\n            commit('SET_PAYMENTS_LOADING', {subject: 'addPaymentMethod', loading: false});\n        });\n    },\n\n    fetchPaymentIntent({commit}, intent_id: string) {\n        commit('SET_STRIPE_LOADING', {subject: 'notifications', loading: true});\n        axios.get(`/v1/stripe/payment-intent/${intent_id}`)\n            .then((response) => {\n                commit(types.SET_CURRENT_WORKING_PAYMENT_INTENT, response.data.intent);\n            }).catch(() => {\n            push.error({\n                message: error?.response?.data?.message || 'Settings update error. Try again later.',\n            });\n        }).finally(() => {\n            commit('SET_STRIPE_LOADING', {subject: 'notifications', loading: false});\n        });\n    },\n\n    /**\n     * Create a Stripe billing postal link and supply\n     *\n     * @param commit\n     */\n    fetchBillingPortalSession({commit}) {\n        commit('SET_STRIPE_LOADING', {subject: 'fetchPortalUrl', loading: true});\n\n        axios.get('/v1/stripe/billing-portal')\n            .then((response) => {\n                commit(types.SET_BILLING_PORTAL_SESSION, response.data.url);\n            }).catch((error) => {\n            push.error({\n                message: error?.response?.data?.message || 'There was an error',\n            });\n        }).finally(() => {\n            commit('SET_STRIPE_LOADING', {subject: 'fetchPortalUrl', loading: false});\n        });\n    },\n\n    async fetchCheckoutUrl({commit}, data: { price: string }) {\n        try {\n            const responseData = await performApiRequest(commit, 'SET_STRIPE_LOADING', 'fetchPortalUrl', () => axios.post('/v1/stripe/checkout-url', data));\n\n            commit(types.SET_BILLING_PORTAL_SESSION, responseData.url);\n\n            return responseData.url;\n        } catch (error) {\n            push.error({\n                message: error?.response?.data?.message || 'There was an error',\n            });\n            throw error;\n        }\n    },\n\n    async fetchStripePriceData({commit}) {\n        try {\n            const responseData = await performApiRequest(commit, 'SET_STRIPE_LOADING', 'fetchPortalUrl', () => axios.get('/v1/stripe/prices'));\n\n            commit(types.SET_STRIPE_PRICE_DATA, responseData.prices);\n\n            return responseData.url;\n        } catch (error) {\n            push.error({\n                message: error?.response?.data?.message || 'There was an error',\n            });\n            throw error;\n        }\n    },\n\n    async fetchSetupUrl({commit}, data) {\n        try {\n            return await performApiRequest(commit, 'SET_STRIPE_LOADING', 'fetchSetupUrl', () => axios.post('/v1/stripe/setup-url', data));\n        } catch (error) {\n            console.error(error)\n        }\n    },\n\n    async fetchSubscriptionDetails({commit}) {\n\n        try {\n            const responseData = await performApiRequest(commit, 'SET_STRIPE_LOADING', 'fetchSubscriptionDetails', () => axios.get('/v1/stripe/subscription-details'));\n            commit('SET_SUBSCRIPTION_DETAILS', responseData);\n        } catch (error) {\n            console.error(error)\n        }\n    },\n\n    /**\n     * Update default payment method\n     */\n    updateDefaultPaymentMethod({commit}, payment_method) {\n        commit('SET_STRIPE_LOADING', {subject: 'updateDefaultPaymentMethod', loading: true});\n\n        axios.post('/v1/stripe/update-default-payment', {payment_method})\n            .then((response) => {\n                commit('payments/SET_PAYMENT_METHODS', response?.data?.payment_methods || [], {root: true});\n                commit('company/SET_COMPANY', response.data.company, {root: true});\n            }).catch(() => {\n            push.error({\n                message: error?.response?.data?.message || 'There was an error',\n            });\n        }).finally(() => {\n            commit('SET_STRIPE_LOADING', {subject: 'updateDefaultPaymentMethod', loading: false});\n        });\n    },\n\n    testStripeIdentity({commit, rootGetters}) {\n        commit('SET_STRIPE_LOADING', {subject: 'updateDefaultPaymentMethod', loading: true});\n        axios.post(`/v1/company/${rootGetters['company/company'].uuid}/stripe/test-identity`)\n            .then((response) => {\n                commit('payments/SET_PAYMENT_METHODS', response?.data?.payment_methods || [], {root: true});\n                commit('company/SET_COMPANY', response.data.company, {root: true});\n            }).catch(() => {\n            push.error({\n                message: error?.response?.data?.message || 'There was an error',\n            });\n        }).finally(() => {\n            commit('SET_STRIPE_LOADING', {subject: 'updateDefaultPaymentMethod', loading: false});\n        });\n    },\n\n    /**\n     * Create a Stripe Identity Verification link and supply to customer\n     */\n    bookingInitStripeVerification({state, commit}, data) {\n        commit('SET_STRIPE_LOADING', {subject: 'bookingInitStripeVerification', loading: true});\n        axios.post(`/v1/bookings/${data.b_id}/stripe/identity/start`, data)\n            .then((response) => {\n                EventBus.$emit('stripe-create-verification-successful');\n                commit('booking/SET_CUSTOMER_BOOKING', response.data.booking || [], {root: true});\n            }).catch((error) => {\n            push.error({\n                message: error?.response?.data?.message || 'There was an error',\n            });\n            state.stripeForm.errors.set(error?.response?.data?.errors);\n        }).finally(() => {\n            commit('SET_STRIPE_LOADING', {subject: 'bookingInitStripeVerification', loading: false});\n        });\n    },\n\n\n    /**\n     * Create a Stripe Identity link and send\n     */\n    createStripeVerification({commit}, data) {\n        commit('SET_STRIPE_LOADING', {subject: 'createStripeVerification', loading: true});\n        axios.post('/v1/stripe/identity', data)\n            .then((response) => {\n                commit('SET_STRIPE_IDENTITIES', response.data.ids);\n                EventBus.$emit('stripe-create-verification-successful', response.data.ids);\n            }).catch((error) => {\n            push.error({\n                message: error?.response?.data?.message || 'There was an error',\n            });\n        }).finally(() => {\n            commit('SET_STRIPE_LOADING', {subject: 'createStripeVerification', loading: false});\n        });\n    },\n\n    /**\n     * Create a Stripe Identity link and send\n     *\n     * @param commit\n     * @param {String} vsId\n     */\n    cancelStripeVerification({commit}, vsId: string) {\n        commit('SET_STRIPE_LOADING', {subject: 'cancelStripeVerification', loading: vsId});\n\n        axios.delete(`/v1/stripe/identity/${vsId}`)\n            .then((response) => {\n                EventBus.$emit('stripe-cancel-verification-successful', response.data.identity);\n                EventBus.$emit('SystemMessage', {\n                    type: 'success',\n                    message: 'Canceled',\n                });\n            }).catch((error) => {\n            push.error({\n                message: error?.response?.data?.message || 'There was an error',\n            });\n        }).finally(() => {\n            commit('SET_STRIPE_LOADING', {subject: 'cancelStripeVerification', loading: false});\n        });\n    },\n\n    fetchStripeVerification({commit}, vsId: string) {\n        commit('SET_STRIPE_LOADING', {subject: 'freshStripeVerification', loading: true});\n\n        axios.get(`/v1/stripe/identity/${vsId}/fresh`)\n            .then((response) => {\n                EventBus.$emit('stripe-fresh-verification-successful', response.data.session);\n            }).catch((error) => {\n            push.error({\n                message: error?.response?.data?.message || 'There was an error',\n            });\n        }).finally(() => {\n            commit('SET_STRIPE_LOADING', {subject: 'freshStripeVerification', loading: false});\n        });\n    },\n\n    refreshDocumentImageFiles({commit}, vsId: string) {\n        commit('SET_STRIPE_LOADING', {subject: 'refreshDocumentImageFiles', loading: true});\n\n        axios.post(`/v1/stripe/identity/${vsId}/refresh-files`)\n            .then((response) => {\n                EventBus.$emit('stripe-refresh-files-successful', response.data.files);\n            }).catch((e) => {\n            EventBus.$emit('stripe-refresh-files-failure', e?.response?.data?.message || 'There was an error');\n        }).finally(() => {\n            commit('SET_STRIPE_LOADING', {subject: 'refreshDocumentImageFiles', loading: false});\n        });\n    },\n\n    getStripeIdentities({commit}) {\n        commit('SET_STRIPE_LOADING', {subject: 'updateDefaultPaymentMethod', loading: true});\n        axios.get(`/v1/company/${StorageService.getCompanyUuid()}/stripe/identity`)\n            .then((response) => {\n                commit('SET_STRIPE_IDENTITIES', response.data.ids);\n            }).catch((error) => {\n            push.error({\n                message: error?.response?.data?.message || 'There was an error',\n            });\n        }).finally(() => {\n            commit('SET_STRIPE_LOADING', {subject: 'updateDefaultPaymentMethod', loading: false});\n        });\n    },\n\n    async fetchStripeCapabilities({commit}) {\n        const responseData = await performApiRequest(commit, 'SET_STRIPE_LOADING', 'updateDefaultPaymentMethod', () => axios.get('/v1/stripe/capabilities'));\n\n        commit(types.SET_STRIPE_ACCOUNT, responseData);\n    },\n};\n\nexport default {\n    namespaced: true,\n    state,\n    mutations,\n    actions,\n    getters,\n};\n","import axios from 'axios';\nimport {EventBus} from '@/plugins/eventBus';\nimport * as types from '../mutation-types';\nimport {performApiRequest} from '@/store/helpers/vuex-helpers';\nimport {ESignerFieldData, ESignTool} from '@/types';\nimport {DocumentType, TemplateData} from '@/store/modules/document';\n\n\nexport interface TemplateInterface {\n    data: null;\n    documents: DocumentType;\n    file_id: null;\n    name: null;\n    pages: number;\n    version: 'v1' | 'v2';\n    uuid?: string;\n    updated_at?: string;\n    created_at?: string;\n}\n\nexport interface TemplateState {\n    init: boolean;\n    loading: Record<string, boolean>,\n    canvasActive: boolean;\n    toolsActive: boolean;\n    documents: DocumentType[];\n    document: DocumentType;\n    templates: TemplateData[];\n\n    template?: TemplateInterface;\n\n    rightSidebar: {\n        open: boolean;\n        mode: string;\n        title: string;\n    };\n    currentWorkingTool: ESignTool;\n    selectedField: any;\n    selectedFieldV2: ESignerFieldData | null;\n    selectedFieldIndex: number;\n\n    existingTemplateData: any[];\n    newTemplateData: any[];\n\n    documentFieldData: any[];\n\n    fieldProperties: {\n        fontSize: number;\n        fontColor: string;\n    };\n    allTools: ESignTool[];\n    currentSigner: string;\n    signerItems: any[];\n\n    documentImages: any[];\n}\n\n\nconst state: TemplateState = {\n    init: false,\n    loading: {\n        template: false,\n        saving: false,\n    },\n    canvasActive: false,\n    toolsActive: false,\n    documents: [],\n    document: null,\n    templates: [],\n    template: null,\n\n    rightSidebar: {\n        open: false,\n        mode: 'tools',\n        title: '',\n    },\n    currentWorkingTool: null,\n    selectedField: {\n        attributes: {\n            bold: false,\n            italic: false,\n            required_field: false,\n            strikethrough: false,\n            underline: false,\n            required: true,\n        },\n    },\n    selectedFieldV2: null,\n    selectedFieldIndex: null,\n\n    existingTemplateData: [],\n    newTemplateData: [],\n\n    documentFieldData: [],\n\n    fieldProperties: {\n        fontSize: 12,\n        fontColor: '#4169e1',\n    },\n    allTools: [\n        {\n            id: 'field-primary-free-text',\n            name: 'Text',\n            value: 'text',\n            type: 'text',\n            group: 'field',\n            icon: 'mdi-format-text',\n            category: 'Misc',\n            primary: true,\n        },\n        {\n            id: 'field-secondary-free-text',\n            name: 'Text',\n            value: 'text',\n            type: 'text',\n            group: 'field',\n            icon: 'mdi-format-text',\n            category: 'Misc',\n            secondary: true,\n        },\n        {\n            id: 'field-primary-checkbox',\n            name: 'Checkbox',\n            value: false,\n            type: 'checkbox',\n            group: 'field',\n            icon: 'mdi-checkbox-marked-outline',\n            description: 'Checkbox field for a signer to make a choice',\n            category: 'Misc',\n            w: 20,\n            h: 20,\n            resizable: false,\n            fieldName: '',\n            primary: true,\n        },\n        {\n            id: 'field-secondary-checkbox',\n            name: 'Checkbox',\n            value: false,\n            type: 'checkbox',\n            group: 'field',\n            icon: 'mdi-checkbox-marked-outline',\n            description: 'Checkbox field for a signer to make a choice',\n            category: 'Misc',\n            w: 20,\n            h: 20,\n            resizable: false,\n            fieldName: '',\n            secondary: true,\n        },\n        {\n            id: 'field-primary-full-name',\n            name: 'Full Name',\n            title: 'Name',\n            value: 'full_name',\n            type: 'field',\n            resizable: true,\n            icon: 'mdi-account-box-outline',\n            category: 'Primary Customer',\n            w: 100,\n            h: 20,\n            options: ['field-primary-full-name', 'field-primary-first-name', 'field-primary-last-name'],\n            description: 'The full name of the primary driver',\n            primary: true,\n        },\n        {\n            id: 'field-primary-first-name',\n            name: 'First Name',\n            title: 'Name',\n            value: 'full_name',\n            type: 'field',\n            resizable: true,\n            icon: 'mdi-account-box',\n            category: 'Primary Customer',\n            w: 100,\n            h: 20,\n            description: 'The first name of the primary driver',\n            options: ['field-primary-full-name', 'field-primary-first-name', 'field-primary-last-name'],\n            primary: true,\n        },\n        {\n            id: 'field-primary-last-name',\n            name: 'Last Name',\n            title: 'Name',\n            value: 'full_name',\n            type: 'field',\n            resizable: true,\n            icon: 'mdi-account-box',\n            category: 'Primary Customer',\n            w: 100,\n            h: 20,\n            description: 'The last name of the primary driver',\n            options: ['field-primary-full-name', 'field-primary-first-name', 'field-primary-last-name'],\n            primary: true,\n        },\n        {\n            id: 'field-primary-email',\n            name: 'Email',\n            value: 'email',\n            type: 'field',\n            resizable: true,\n            icon: 'mdi-email-outline',\n            description: 'The email name of the primary driver',\n            category: 'Primary Customer',\n            primary: true,\n        },\n        {\n            id: 'field-primary-cell',\n            name: 'Cell Phone',\n            value: 'cell',\n            type: 'field',\n            resizable: true,\n            w: 110,\n            icon: 'mdi-cellphone',\n            description: 'The cell phone of the primary driver',\n            category: 'Primary Customer',\n            primary: true,\n        },\n        {\n            id: 'field-primary-drivers-license',\n            name: 'Drivers License #',\n            value: 'dl_number',\n            type: 'field',\n            w: 160,\n            h: 20,\n            description: 'The drivers license number of the primary driver',\n            category: 'Primary Customer',\n            icon: 'mdi-smart-card-outline',\n            primary: true,\n        },\n        {\n            id: 'field-primary-drivers-license-state',\n            name: 'Drivers License St',\n            value: 'dl_state',\n            type: 'field',\n            w: 160,\n            h: 20,\n            description: 'The drivers license state of the primary driver',\n            category: 'Primary Customer',\n            icon: 'mdi-smart-card-outline',\n            primary: true,\n        },\n        {\n            id: 'field-primary-drivers-license-exp',\n            name: 'Drivers License Exp',\n            value: 'dl_exp',\n            type: 'field',\n            w: 160,\n            h: 20,\n            description: 'The drivers license expiration date of the primary driver',\n            category: 'Primary Customer',\n            icon: 'mdi-smart-card-outline',\n            primary: true,\n        },\n        {\n            id: 'field-primary-dob',\n            name: 'DOB',\n            value: 'dob',\n            type: 'field',\n            w: 160,\n            h: 20,\n            description: 'The date of birth of the primary driver',\n            category: 'Primary Customer',\n            icon: 'mdi-calendar-outline',\n            primary: true,\n        },\n        {\n            id: 'field-primary-signature',\n            name: 'Sign',\n            value: 'signature',\n            type: 'signature',\n            group: 'signature',\n            resizable: false,\n            icon: 'mdi-signature',\n            category: 'Primary Customer',\n            w: 50,\n            h: 50,\n            description: 'The signature of the primary driver',\n            primary: true,\n        },\n        {\n            id: 'field-date-signed',\n            name: 'Date Signed',\n            value: 'date_signed',\n            type: 'field',\n            resizable: true,\n            icon: 'mdi-calendar-range',\n            category: 'Primary Customer',\n            readOnly: true,\n            w: 110,\n            h: 23,\n            primary: true,\n        },\n        {\n            id: 'field-attachment',\n            name: 'Attach',\n            value: 'attachment',\n            type: 'attachment',\n            disabled: false,\n            resizable: false,\n            icon: 'mdi-paperclip',\n            category: 'Primary Customer',\n            fontSize: 7,\n            w: 50,\n            h: 50,\n            description: 'A attachment for the primary driver',\n            primary: true,\n        },\n\n\n        {\n            id: 'field-secondary-full-name',\n            name: 'Full Name',\n            title: 'Name',\n            value: 'full_name',\n            type: 'field',\n            resizable: true,\n            icon: 'mdi-account-box-outline',\n            category: 'Secondary Customer',\n            w: 100,\n            h: 20,\n            description: 'The full name of the secondary driver',\n            options: ['field-secondary-full-name', 'field-secondary-first-name', 'field-secondary-last-name'],\n            secondary: true,\n        },\n\n        {\n            id: 'field-secondary-first-name',\n            name: 'First Name',\n            title: 'Name',\n            value: 'full_name',\n            type: 'field',\n            resizable: true,\n            icon: 'mdi-account-box',\n            category: 'Secondary Customer',\n            w: 100,\n            h: 20,\n            description: 'The first name of the secondary driver',\n            options: ['field-secondary-full-name', 'field-secondary-first-name', 'field-secondary-last-name'],\n            secondary: true,\n        },\n        {\n            id: 'field-secondary-last-name',\n            name: 'Last Name',\n            title: 'Name',\n            value: 'full_name',\n            type: 'field',\n            resizable: true,\n            icon: 'mdi-account-box',\n            category: 'Secondary Customer',\n            w: 100,\n            h: 20,\n            description: 'The last name of the secondary driver',\n            options: ['field-secondary-full-name', 'field-secondary-first-name', 'field-secondary-last-name'],\n            secondary: true,\n        },\n        {\n            id: 'field-secondary-email',\n            name: 'Email',\n            value: 'email',\n            type: 'field',\n            resizable: true,\n            icon: 'mdi-email-outline',\n            description: 'The email name of the secondary driver',\n            category: 'Secondary Customer',\n            secondary: true,\n        },\n        {\n            id: 'field-secondary-cell',\n            name: 'Cell Phone',\n            value: 'cell',\n            type: 'field',\n            resizable: true,\n            w: 110,\n            icon: 'mdi-cellphone',\n            description: 'The cell phone of the secondary driver',\n            category: 'Secondary Customer',\n            secondary: true,\n        },\n        {\n            id: 'field-secondary-drivers-license',\n            name: 'Drivers License #',\n            value: 'dl_number',\n            type: 'field',\n            w: 160,\n            h: 20,\n            description: 'The drivers license number of the secondary driver',\n            category: 'Secondary Customer',\n            icon: 'mdi-smart-card-outline',\n            secondary: true,\n        },\n        {\n            id: 'field-secondary-drivers-license-state',\n            name: 'Drivers License St',\n            value: 'dl_state',\n            type: 'field',\n            w: 160,\n            h: 20,\n            description: 'The drivers license state of the secondary driver',\n            category: 'Secondary Customer',\n            icon: 'mdi-smart-card-outline',\n            secondary: true,\n        },\n        {\n            id: 'field-secondary-drivers-license-exp',\n            name: 'Drivers License Exp',\n            value: 'dl_exp',\n            type: 'field',\n            w: 160,\n            h: 20,\n            description: 'The drivers license expiration date of the secondary driver',\n            category: 'Secondary Customer',\n            icon: 'mdi-smart-card-outline',\n            secondary: true,\n        },\n        {\n            id: 'field-secondary-dob',\n            name: 'DOB',\n            value: 'dob',\n            type: 'field',\n            w: 50,\n            h: 20,\n            description: 'The date of birth of the secondary driver',\n            category: 'Secondary Customer',\n            bgColor: 'purple',\n            icon: 'mdi-calendar-outline',\n            secondary: true,\n        },\n        {\n            id: 'field-secondary-signature',\n            name: 'Sign',\n            value: 'signature',\n            type: 'signature',\n            group: 'signature',\n            resizable: false,\n            icon: 'mdi-signature',\n            category: 'Secondary Customer',\n            w: 50,\n            h: 50,\n            description: 'The signature of the secondary driver',\n            secondary: true,\n        },\n        {\n            id: 'field-secondary-date-signed',\n            name: 'Date Signed',\n            value: 'date_signed',\n            type: 'field',\n            resizable: true,\n            icon: 'mdi-calendar-range',\n            category: 'Secondary Customer',\n            readOnly: true,\n            w: 110,\n            h: 23,\n            secondary: true,\n        },\n        {\n            id: 'field-attachment',\n            name: 'Attach',\n            value: 'attachment',\n            type: 'attachment',\n            disabled: false,\n            resizable: false,\n            icon: 'mdi-paperclip',\n            category: 'Secondary Customer',\n            fontSize: 7,\n            w: 50,\n            h: 50,\n            description: 'A attachment for the primary driver',\n            secondary: true,\n        },\n\n        {\n            id: 'field-vehicle-year-make-model',\n            name: 'Year Make Model',\n            value: 'vehicle_year_make_model',\n            type: 'field',\n            category: 'Vehicle',\n            icon: 'mdi-car',\n            readOnly: true,\n            w: 160,\n            h: 20,\n        },\n        {\n            id: 'field-vehicle-year',\n            name: 'Year',\n            value: 'vehicle_year',\n            type: 'field',\n            category: 'Vehicle',\n            readOnly: true,\n            resizable: true,\n            icon: 'mdi-car',\n        },\n        {\n            id: 'field-vehicle-make',\n            name: 'Make',\n            value: 'vehicle_make',\n            type: 'field',\n            category: 'Vehicle',\n            readOnly: true,\n            resizable: true,\n            icon: 'mdi-car',\n        },\n        {\n            id: 'field-vehicle-model',\n            name: 'Model',\n            value: 'vehicle_model',\n            type: 'field',\n            category: 'Vehicle',\n            readOnly: true,\n            resizable: true,\n            icon: 'mdi-car',\n        },\n        {\n            id: 'field-vehicle-color',\n            name: 'Color',\n            value: 'vehicle_color',\n            type: 'field',\n            category: 'Vehicle',\n            readOnly: true,\n            resizable: true,\n            icon: 'mdi-palette',\n        },\n        {\n            id: 'field-vehicle-plate',\n            name: 'Plate #',\n            value: 'vehicle_plate',\n            type: 'field',\n            category: 'Vehicle',\n            readOnly: true,\n            resizable: true,\n            icon: 'mdi-card-text-outline',\n        },\n        {\n            id: 'field-vehicle-vin',\n            name: 'Vin',\n            value: 'vehicle_vin',\n            type: 'field',\n            category: 'Vehicle',\n            readOnly: true,\n            icon: 'mdi-card-text-outline',\n        },\n        {\n            id: 'field-vehicle-current-odometer',\n            name: 'Odometer',\n            value: 'vehicle_odometer',\n            type: 'field',\n            category: 'Vehicle',\n            readOnly: true,\n            icon: 'mdi-card-text-outline',\n            w: 90,\n            h: 20,\n            description: 'The current odometer reading of the vehicle at the time of signing. Note: This value will not update if the odometer is different at the time of pickup. Should probably only be used for agreements signed at the time of pickup.',\n        },\n        {\n            id: 'field-vehicle-title',\n            name: 'Listing title',\n            value: 'vehicle_title',\n            type: 'field',\n            category: 'Vehicle',\n            resizable: true,\n            readOnly: true,\n            icon: 'mdi-format-title',\n            w: 160,\n            h: 20,\n        },\n        {\n            id: 'field-vehicle-unit-id',\n            name: 'Unit Id',\n            value: 'vehicle_unit_id',\n            type: 'field',\n            category: 'Vehicle',\n            resizable: true,\n            readOnly: true,\n            icon: 'mdi-barcode',\n            w: 160,\n            h: 20,\n        },\n        {\n            id: 'field-listing-mile-allowance-per-day',\n            name: 'Mile Allowance',\n            value: 'listing_mile_allowance',\n            type: 'field',\n            category: 'Listing',\n            readOnly: true,\n            icon: 'mdi-counter',\n            w: 160,\n            h: 20,\n        },\n        {\n            id: 'field-listing-mile-overage',\n            name: 'Mile Overage',\n            value: 'listing_mile_overage',\n            type: 'field',\n            category: 'Listing',\n            icon: 'mdi-cash',\n            readOnly: true,\n            w: 160,\n            h: 20,\n        },\n        {\n            id: 'field-listing-price',\n            name: 'Listing Price',\n            value: 'listing_price',\n            type: 'field',\n            category: 'Listing',\n            readOnly: true,\n            icon: 'mdi-cash',\n            w: 160,\n            h: 20,\n        },\n        {\n            id: 'field-listing-id',\n            name: 'Listing ID',\n            value: 'listing_id',\n            type: 'field',\n            category: 'Listing',\n            readOnly: true,\n            icon: 'mdi-barcode',\n            w: 160,\n            h: 20,\n        },\n\n        {\n            id: 'field-booking-id',\n            name: 'Booking ID',\n            value: 'booking_id',\n            type: 'field',\n            category: 'Booking',\n            icon: 'mdi-numeric',\n            readOnly: true,\n            w: 115,\n            h: 20,\n        },\n        {\n            id: 'field-booking-end-datetime',\n            name: 'End date/time',\n            value: 'booking_end',\n            type: 'field',\n            category: 'Booking',\n            icon: 'mdi-calendar-range',\n            readOnly: true,\n            w: 160,\n            h: 20,\n        },\n        {\n            id: 'field-booking-start-datetime',\n            name: 'Start date/time',\n            value: 'booking_start',\n            type: 'field',\n            category: 'Booking',\n            readOnly: true,\n            icon: 'mdi-calendar-range',\n            w: 160,\n            h: 20,\n        },\n        {\n            id: 'field-booking-start-date',\n            name: 'Start Date',\n            value: 'booking_start_date',\n            type: 'field',\n            category: 'Booking',\n            readOnly: true,\n            icon: 'mdi-calendar-range',\n            w: 160,\n            h: 20,\n        },\n        {\n            id: 'field-booking-end-date',\n            name: 'End Date',\n            value: 'booking_end_date',\n            type: 'field',\n            category: 'Booking',\n            readOnly: true,\n            icon: 'mdi-calendar-range',\n            w: 160,\n            h: 20,\n        },\n        {\n            id: 'field-booking-start-time',\n            name: 'Start Time',\n            value: 'booking_start_time',\n            type: 'field',\n            category: 'Booking',\n            readOnly: true,\n            icon: 'mdi-calendar-clock',\n            w: 160,\n            h: 20,\n        },\n        {\n            id: 'field-booking-end-time',\n            name: 'End Time',\n            value: 'booking_end_time',\n            type: 'field',\n            category: 'Booking',\n            readOnly: true,\n            icon: 'mdi-calendar-clock',\n            w: 160,\n            h: 20,\n        },\n        {\n            id: 'field-booking-trip-total',\n            name: 'Trip Price',\n            value: 'booking_trip_total',\n            type: 'field',\n            category: 'Booking',\n            readOnly: true,\n            icon: 'mdi-cash',\n            w: 160,\n            h: 20,\n        },\n        {\n            id: 'field-booking-total',\n            name: 'Total Price',\n            value: 'booking_total',\n            type: 'field',\n            category: 'Booking',\n            readOnly: true,\n            icon: 'mdi-cash',\n            w: 160,\n            h: 20,\n        },\n\n        {\n            id: 'field-booking-taxes',\n            name: 'Total Taxes',\n            value: 'booking_taxes',\n            type: 'field',\n            category: 'Booking',\n            readOnly: true,\n            icon: 'mdi-cash',\n            w: 160,\n            h: 20,\n        },\n        {\n            id: 'field-booking-discount',\n            name: 'Total Discount',\n            value: 'booking_discount',\n            type: 'field',\n            category: 'Booking',\n            readOnly: true,\n            icon: 'mdi-cash',\n            w: 160,\n            h: 20,\n        },\n        {\n            id: 'field-booking-delivery',\n            name: 'Total Delivery',\n            value: 'booking_delivery_total',\n            type: 'field',\n            category: 'Booking',\n            readOnly: true,\n            icon: 'mdi-cash',\n            w: 160,\n            h: 20,\n        },\n        {\n            id: 'field-booking-extras',\n            name: 'Extras Total',\n            value: 'booking_extras_total',\n            type: 'field',\n            category: 'Booking',\n            readOnly: true,\n            icon: 'mdi-cash',\n            w: 160,\n            h: 20,\n        },\n        {\n            id: 'field-booking-deposit',\n            name: 'Total Deposit',\n            value: 'booking_deposit',\n            type: 'field',\n            category: 'Booking',\n            readOnly: true,\n            icon: 'mdi-cash-plus',\n            w: 160,\n            h: 20,\n        },\n        {\n            id: 'field-booking-days',\n            name: 'Total Days',\n            value: 'booking_days',\n            type: 'field',\n            category: 'Booking',\n            readOnly: true,\n            icon: 'mdi-calendar-range',\n            w: 105,\n            h: 20,\n        },\n        {\n            id: 'field-booking-mile-allowance',\n            name: 'Trip Mile Allowance',\n            value: 'booking_days',\n            type: 'field',\n            category: 'Booking',\n            readOnly: true,\n            icon: 'mdi-calendar-range',\n            w: 105,\n            h: 20,\n        },\n        {\n            id: 'field-booking-mile-extra',\n            name: 'Trip Distance Overage',\n            description: 'Trip distance overage is a field for storing the cost for exceeding the distance allowance. The default is the listings distance allowance setting but can be overridden on a reservation level.',\n            value: 'booking_days',\n            type: 'field',\n            category: 'Booking',\n            readOnly: true,\n            icon: 'mdi-calendar-range',\n            w: 220,\n            h: 20,\n        },\n    ],\n    currentSigner: 'primary',\n    signerItems: [\n        {\n            title: 'Primary',\n            value: 'primary',\n            color: '#5be8ff',\n        },\n        {\n            title: 'Secondary',\n            value: 'secondary',\n            color: 'purple',\n        },\n    ],\n\n    documentImages: [],\n};\n\nconst getters = {\n    init: (state: TemplateState) => state.init,\n    rightSidebar: (state: TemplateState) => state.rightSidebar,\n    toolsActive: (state: TemplateState) => state.toolsActive,\n    loading: (state: TemplateState) => state.loading,\n    document: (state: TemplateState) => state.document,\n    documents: (state: TemplateState) => state.documents,\n    templates: (state: TemplateState) => state.templates,\n    template: (state: TemplateState) => state.template,\n    currentWorkingTool: (state: TemplateState) => state.currentWorkingTool,\n    selectedField: (state: TemplateState) => state.selectedField,\n    selectedFieldV2: (state: TemplateState) => state.selectedFieldV2,\n    selectedFieldIndex: (state: TemplateState) => state.selectedFieldIndex,\n    documentFieldData: (state: TemplateState) => state.documentFieldData,\n    existingTemplateData: (state: TemplateState) => state.existingTemplateData,\n    newTemplateData: (state: TemplateState) => state.newTemplateData,\n    fieldProperties: (state: TemplateState) => state.fieldProperties,\n    allTools: (state: TemplateState) => state.allTools,\n    currentSigner: (state: TemplateState) => state.currentSigner,\n    signerItems: (state: TemplateState) => state.signerItems,\n    documentImages: (state: TemplateState) => state.documentImages,\n};\n\nconst mutations = {\n    [types.SET_TEMPLATES_LOADING](state: TemplateState, loading: { subject: string; loading: boolean }) {\n        state.loading[loading.subject] = loading.loading;\n    },\n    [types.SET_FIELD_CURRENT_SIGNER](state: TemplateState, signer: string) {\n        state.currentSigner = signer;\n    },\n    [types.SET_TOOLS_ACTIVE](state: TemplateState, active: boolean) {\n        state.toolsActive = active;\n    },\n    [types.SET_CANVAS_ACTIVE](state: TemplateState, active: boolean) {\n        state.canvasActive = active;\n    },\n    [types.SET_RIGHT_SIDEBAR_OPEN](state: TemplateState, open: boolean) {\n        state.rightSidebar.open = open;\n    },\n    [types.SET_RIGHT_SIDEBAR_MODE](state: TemplateState, mode: string) {\n        state.rightSidebar.mode = mode;\n    },\n    [types.SET_RIGHT_SIDEBAR_TITLE](state: TemplateState, title: string) {\n        state.rightSidebar.title = title;\n    },\n    [types.SET_CURRENT_WORKING_TOOL](state: TemplateState, tool: ESignTool) {\n        state.currentWorkingTool = tool;\n    },\n    [types.SET_SELECTED_FIELD](state: TemplateState, field) {\n        state.selectedField = field;\n    },\n    [types.SET_SELECTED_FIELD_V2](state: TemplateState, field: ESignerFieldData) {\n        console.dir('SET_SELECTED_FIELD_V2');\n        console.dir(field);\n        state.selectedFieldV2 = field;\n    },\n    [types.REMOVE_FIELD](state: TemplateState, field: ESignerFieldData) {\n        const documents = state.template?.documents;\n        if (documents && documents.data) {\n            documents.data = documents.data.filter((f: ESignerFieldData) => f.id !== field.id);\n        }\n    },\n    [types.REMOVE_ALL_FIELDS](state: TemplateState) {\n        const documents = state.template?.documents;\n        if (documents && documents.data) {\n            documents.data = [];\n        }\n    },\n    [types.SET_SELECTED_FIELD_INDEX_V2](state: TemplateState, index: number) {\n        state.selectedFieldIndex = index;\n    },\n\n    [types.UPDATE_DOCUMENT_TEMPLATE_DATA](state: TemplateState, payload: { data: ESignerFieldData, index: number }) {\n        if (payload.data === null) {\n            state.template.documents.data.splice(payload.index, 1); // Remove element safely\n        } else {\n            state.template.documents.data[payload.index] = payload.data;\n        }\n    },\n\n    [types.ADD_TO_DOCUMENT_TEMPLATE_DATA](state: TemplateState, payload: ESignerFieldData) {\n        state.template.documents.data.push(payload);\n    },\n    [types.SET_ONE_TEMPLATE](state: TemplateState, template: TemplateInterface) {\n        if (template?.documents?.data === null) {\n            template.documents.data = [];\n        }\n\n        state.template = template;\n\n    },\n    [types.SET_EXISTING_DATA](state: TemplateState, data) {\n        state.existingTemplateData = data || [];\n    },\n    [types.SET_NEW_DATA](state: TemplateState, data) {\n        state.newTemplateData = data;\n    },\n    [types.RESET_TEMPLATE_DATA](state: TemplateState) {\n        state.newTemplateData = [];\n        state.existingTemplateData = [];\n        state.template = null;\n    },\n    [types.SET_DOCUMENT_IMAGES](state: TemplateState, data) {\n        state.documentImages = data;\n    },\n};\n\nconst actions = {\n    async getTemplate({commit}, uuid: string) {\n        try {\n            const responseData = await performApiRequest(commit, 'SET_TEMPLATES_LOADING', 'template', () => axios.get(`/v1/templates/${uuid}`));\n            EventBus.$emit('get-template-success', responseData.template);\n            commit(types.SET_ONE_TEMPLATE, responseData.template);\n        } catch (error) {\n        }\n    },\n\n    deleteSelectedElements({state, commit}) {\n        ['newTemplateData', 'existingTemplateData'].forEach(dataKey => {\n            const index = state[dataKey].findIndex(d => d.fieldid === state.selectedField?.fieldid);\n            if (index >= 0) {\n                state[dataKey][index].styleParent = 'display:none;';\n                state[dataKey].splice(index, 1);\n            }\n        });\n        commit(types.SET_SELECTED_FIELD, {});\n        commit(types.SET_RIGHT_SIDEBAR_OPEN, false);\n    },\n\n    deleteSelectedElementsV2({state, commit}) {\n        console.dir('deleteSelectedElementsV2');\n        console.dir(state.selectedFieldIndex);\n        if (state.selectedFieldIndex >= 0) {\n            state.template?.documents?.data.splice(state.selectedFieldIndex, 1);\n            commit(types.SET_SELECTED_FIELD_V2, null);\n            commit(types.SET_SELECTED_FIELD_INDEX_V2, null);\n        }\n    },\n};\n\nexport default {\n    namespaced: true,\n    state,\n    mutations,\n    actions,\n    getters,\n};\n","import axios from 'axios';\nimport {findIndex, get} from 'lodash';\nimport {EventBus} from '@/plugins/eventBus';\nimport {Form} from '@/plugins/FWForms/index';\nimport {StorageService} from '@/services/storage.service';\nimport * as types from '../mutation-types';\nimport {performApiRequest} from '@/store/helpers/vuex-helpers';\nimport {Connection} from '@/types';\nimport {push} from 'notivue';\n\n\nexport interface TeslaConnection {\n    active: boolean;\n    connected: boolean;\n    email: string;\n    expires: string;\n    loading: boolean;\n    photo_url: string;\n    session_cookie_valid: boolean;\n    session_cookies_exist: boolean;\n    vehicles: any[];\n    uuid?: string;\n}\n\nexport interface TeslaState {\n    init: boolean;\n    loading: Record<string, boolean>;\n    credentials: {\n        email: string;\n        password: string;\n    };\n    connections: TeslaConnection[];\n    vehicles: any[];\n    currentWorkingTeslaVehicle: any;\n    currentWorkingTeslaVehicleDrivers: any[];\n    vehicleInvitations: any[];\n    chargingHistory: any[];\n    chargingHistoryPaginate: any;\n    chargingInvoices: any[];\n    invoices: any[];\n    invoices_meta: any;\n    invoices_pdf: string;\n    currentWorkingTeslaVehicleAppAccess: any[];\n    currentWorkingTeslaVehicleState: any;\n    currentWorkingTeslaVehicleData: any;\n    currentWorkingTeslaVehicleAsleep: boolean;\n    form: Form<object>;\n}\n\nconst state: TeslaState = {\n    init: false,\n\n    loading: {\n        login: false,\n        delete: false,\n        toggle: false,\n        refresh_invoice: false,\n        invoices: false,\n        invoicePDF: false,\n        refreshVehicles: false,\n        appAccess: false,\n        vehicleState: false,\n        vehicleData: false,\n        wakeVehicle: false,\n        chargingHistory: false,\n        invitations: false,\n    },\n\n    credentials: {\n        email: '',\n        password: '',\n    },\n\n    connections: [],\n    vehicles: [],\n    currentWorkingTeslaVehicle: {},\n    currentWorkingTeslaVehicleDrivers: [],\n    vehicleInvitations: [],\n    chargingHistory: [],\n    chargingHistoryPaginate: null,\n    chargingInvoices: [],\n    invoices: [],\n    invoices_meta: {},\n    invoices_pdf: '',\n    currentWorkingTeslaVehicleAppAccess: [],\n    currentWorkingTeslaVehicleState: {},\n    currentWorkingTeslaVehicleData: {},\n    currentWorkingTeslaVehicleAsleep: false,\n    form: new Form(),\n};\n\nconst getters = {\n    loading: (state: TeslaState) => state.loading,\n    credentials: (state: TeslaState) => state.credentials,\n    connections: (state: TeslaState) => state.connections,\n    vehicles: (state: TeslaState) => state.vehicles,\n    currentWorkingTeslaVehicle: (state: TeslaState) => state.currentWorkingTeslaVehicle,\n    currentWorkingTeslaVehicleDrivers: (state: TeslaState) => state.currentWorkingTeslaVehicleDrivers,\n    vehicleInvitations: (state: TeslaState) => state.vehicleInvitations,\n    chargingHistory: (state: TeslaState) => state.chargingHistory,\n    chargingHistoryPaginate: (state: TeslaState) => state.chargingHistoryPaginate,\n    currentWorkingTeslaVehicleAppAccess: (state: TeslaState) => state.currentWorkingTeslaVehicleAppAccess,\n    currentWorkingTeslaVehicleState: (state: TeslaState) => state.currentWorkingTeslaVehicleState,\n    currentWorkingTeslaVehicleData: (state: TeslaState) => state.currentWorkingTeslaVehicleData,\n    currentWorkingTeslaVehicleAsleep: (state: TeslaState) => state.currentWorkingTeslaVehicleAsleep,\n    chargingInvoices: (state: TeslaState) => state.chargingInvoices,\n    invoices: (state: TeslaState) => state.invoices,\n    invoicesMeta: (state: TeslaState) => state.invoices_meta,\n    invoicesPDF: (state: TeslaState) => state.invoices_pdf,\n    form: (state: TeslaState) => state.form,\n};\n\nconst mutations = {\n    [types.SET_TESLA_INIT](state: TeslaState, init: boolean) {\n        state.init = init;\n    },\n    [types.CLEAR_TESLA_FORM_ERRORS](state: TeslaState, form_field) {\n        if (form_field === null || form_field === undefined) {\n            state.form.errors.clear();\n        } else {\n            state.form.errors.clear(form_field);\n        }\n    },\n    [types.SET_TESLA_LOADING](state: TeslaState, loading: { subject: string, loading: boolean }) {\n        state.loading[loading.subject] = loading.loading;\n    },\n    [types.SET_TESLA_CREDENTIALS](state: TeslaState, init) {\n        state.init = init;\n    },\n    [types.SET_TESLA_CONNECTIONS](state: TeslaState, connections) {\n        state.connections = connections;\n    },\n    [types.UPDATE_TESLA_CONNECTION](state: TeslaState, tesla) {\n        if (tesla) {\n            const connIndex = findIndex(state.connections, (c) => tesla.uuid === c.uuid);\n            if (connIndex >= 0) {\n                state.connections[connIndex] = tesla;\n                if (!get(tesla, 'active', false)) {\n                    state.connections[connIndex].connected = false;\n                }\n            } else {\n                state.connections.push(tesla);\n            }\n        }\n    },\n    [types.SET_TESLA_VEHICLES](state: TeslaState, vehicles) {\n        state.vehicles = vehicles;\n    },\n    [types.SET_CURRENT_WORKING_TESLA_VEHICLE](state: TeslaState, vehicle) {\n        state.currentWorkingTeslaVehicle = vehicle;\n    },\n    [types.SET_CURRENT_WORKING_TESLA_VEHICLE_DRIVERS](state: TeslaState, drivers) {\n        state.currentWorkingTeslaVehicleDrivers = drivers;\n    },\n    [types.SET_CURRENT_WORKING_TESLA_VEHICLE_HISTORY](state: TeslaState, chargingHistory) {\n        state.chargingHistory = chargingHistory;\n    },\n    [types.SET_CURRENT_WORKING_TESLA_VEHICLE_HISTORY_PAGINATE](state: TeslaState, paginate) {\n        state.chargingHistoryPaginate = paginate;\n    },\n    [types.SET_TESLA_VEHICLE_INVITATIONS](state: TeslaState, invites) {\n        console.dir('SET_TESLA_VEHICLE_INVITATIONS');\n        console.dir(invites);\n        state.vehicleInvitations = invites;\n    },\n    [types.SET_TESLA_CHARGING_INVOICES](state: TeslaState, invoices) {\n        if (invoices && invoices.length > 0) {\n            state.chargingInvoices = invoices;\n        }\n    },\n    [types.SET_TESLA_INVOICES](state: TeslaState, invoices) {\n        state.invoices = invoices;\n    },\n    [types.SET_TESLA_INVOICES_META](state: TeslaState, meta) {\n        state.invoices_meta = meta;\n    },\n    [types.SET_TESLA_INVOICE_PDF](state: TeslaState, pdf) {\n        state.invoices_pdf = pdf;\n    },\n    [types.SET_CURRENT_WORKING_TESLA_ASLEEP](state: TeslaState, asleep) {\n        state.currentWorkingTeslaVehicleAsleep = asleep;\n    },\n    [types.SET_CURRENT_WORKING_TESLA_VEHICLE_APP_ACCESS](state: TeslaState, emails) {\n        state.currentWorkingTeslaVehicleAppAccess = emails;\n    },\n    [types.SET_CURRENT_WORKING_TESLA_VEHICLE_STATE](state: TeslaState, vehicleState) {\n        state.currentWorkingTeslaVehicleState = vehicleState;\n    },\n    [types.SET_CURRENT_WORKING_TESLA_VEHICLE_DATA](state: TeslaState, vehicleData) {\n        state.currentWorkingTeslaVehicleData = vehicleData;\n    },\n};\n\nconst actions = {\n\n    /**\n     * Toggle active a Tesla account\n     */\n    toggleActive({commit}, tesla: TeslaConnection) {\n        commit(types.SET_TESLA_LOADING, {subject: 'toggle', loading: true});\n\n        axios.put(`/v1/connections/tesla/${tesla.uuid}/toggle`)\n            .then((response) => {\n                commit('UPDATE_TESLA_CONNECTION', get(response.data, 'tesla'));\n                EventBus.$emit('tesla-toggle-success', get(response.data, 'tesla', []));\n            }).catch(() => {\n        }).finally(() => {\n            commit(types.SET_TESLA_LOADING, {subject: 'toggle', loading: false});\n        });\n    },\n\n    refreshToken({commit}, tesla: TeslaConnection) {\n        commit(types.SET_TESLA_LOADING, {subject: 'toggle', loading: true});\n        axios.post(`/v1/connections/tesla/${tesla.uuid}/refresh-token`)\n            .then(() => {\n                EventBus.$emit('SystemMessage', {\n                    type: 'success',\n                    message: 'Tesla token refreshed successful!',\n                });\n                EventBus.$emit('tesla-refresh-token-success');\n            }).catch(() => {\n        }).finally(() => {\n            commit(types.SET_TESLA_LOADING, {subject: 'toggle', loading: false});\n        });\n    },\n\n    deleteConnection({commit}, tesla: TeslaConnection) {\n        commit(types.SET_TESLA_LOADING, {subject: 'delete', loading: true});\n        axios.delete(`/v1/connections/tesla/${tesla.uuid}`)\n            .then(() => {\n                EventBus.$emit('delete-tesla-connection-success');\n                EventBus.$emit('SystemMessage', {\n                    type: 'success',\n                    message: 'Tesla connection removed.',\n                });\n            }).catch(() => {\n        }).finally(() => {\n            commit(types.SET_TESLA_LOADING, {subject: 'delete', loading: false});\n        });\n    },\n\n    fetchUserInfo({commit}, tesla: TeslaConnection) {\n        commit(types.SET_TESLA_LOADING, {subject: 'delete', loading: true});\n        axios.get(`/v1/connections/tesla/${tesla.uuid}/user-info`)\n            .then(() => {\n                EventBus.$emit('SystemMessage', {\n                    type: 'success',\n                    message: 'Tesla connection success.',\n                });\n            }).catch(() => {\n        }).finally(() => {\n            commit(types.SET_TESLA_LOADING, {subject: 'delete', loading: false});\n        });\n    },\n\n    getVehicles({state, commit}, tesla: TeslaConnection) {\n        commit(types.SET_TESLA_LOADING, {subject: 'login', loading: true});\n\n        const connIndex = state.connections.findIndex((c: Connection) => tesla.uuid === c.uuid);\n        state.connections[connIndex].loading = true;\n        state.connections[connIndex].connected = false;\n\n        axios.get(`/v1/connections/tesla/${tesla.uuid}/vehicles`)\n            .then((response) => {\n                commit('SET_TESLA_CONNECTIONS', get(response, 'data.vehicles'), []);\n                state.connections[connIndex].connected = true;\n            }).catch(() => {\n        }).finally(() => {\n            commit(types.SET_TESLA_LOADING, {subject: 'login', loading: false});\n            state.connections[connIndex].loading = false;\n        });\n    },\n\n    getVehicle({commit}, uuid: string) {\n        commit(types.SET_TESLA_LOADING, {subject: 'login', loading: true});\n\n        axios.get(`/v1/connections/tesla/vehicle/${uuid}`)\n            .then((response) => {\n                commit('SET_CURRENT_WORKING_TESLA_VEHICLE', get(response, 'data.vehicle'), []);\n            }).catch(() => {\n        }).finally(() => {\n            commit(types.SET_TESLA_LOADING, {subject: 'login', loading: false});\n        });\n    },\n\n    fetchVehicleDrivers({commit}, uuid: string) {\n        commit(types.SET_TESLA_LOADING, {subject: 'login', loading: true});\n\n        axios.get(`/v1/connections/tesla/vehicle/${uuid}/drivers`)\n            .then((response) => {\n                commit('SET_CURRENT_WORKING_TESLA_VEHICLE_DRIVERS', get(response, 'data.drivers'), []);\n            }).catch(() => {\n        }).finally(() => {\n            commit(types.SET_TESLA_LOADING, {subject: 'login', loading: false});\n        });\n    },\n\n    createVehicleInvitation({commit}, uuid: string) {\n        commit(types.SET_TESLA_LOADING, {subject: 'login', loading: true});\n\n        axios.post(`/v1/connections/tesla/vehicle/${uuid}/invitations`)\n            .then((response) => {\n                EventBus.$emit('create-tesla-vehicle-invitation-success', get(response, 'data.invitation'));\n            }).catch(() => {\n        }).finally(() => {\n            commit(types.SET_TESLA_LOADING, {subject: 'login', loading: false});\n        });\n    },\n\n    async fetchVehicleChargingHistory({commit}, data) {\n        try {\n            const responseData = await performApiRequest(commit, 'SET_TESLA_LOADING', 'chargingHistory', () => axios.get(`/v1/connections/tesla/vehicle/${data.tesla_uuid}/charging-history?page=${data.page}`));\n\n            commit('SET_CURRENT_WORKING_TESLA_VEHICLE_HISTORY_PAGINATE', responseData.paginate, []);\n            commit('SET_CURRENT_WORKING_TESLA_VEHICLE_HISTORY', responseData.data, []);\n        } catch (error) {\n        }\n    },\n    fetchTeslaInvoice({commit}, data) {\n        commit(types.SET_TESLA_LOADING, {subject: 'login', loading: true});\n        const ids = data.invoiceIds.join(',');\n\n        axios.get(`/v1/connections/tesla/vehicle/${data.tesla_uuid}/charging-history-invoice?contentId=${ids}`)\n            .then((response) => {\n                EventBus.$emit('fetch-tesla-charging-invoice-success', response.data);\n            }).catch(() => {\n        }).finally(() => {\n            commit(types.SET_TESLA_LOADING, {subject: 'login', loading: false});\n        });\n    },\n    async fetchVehicleInvitations({commit}, uuid: string) {\n        try {\n            const responseData = await performApiRequest(commit, 'SET_TESLA_LOADING', 'invitations', () => axios.get(`/v1/connections/tesla/vehicle/${uuid}/invitations`));\n\n            commit('SET_TESLA_VEHICLE_INVITATIONS', responseData.invitations, []);\n        } catch (error) {\n        }\n    },\n\n    /**\n     * Cancel vehicle invitation\n     *\n     */\n    async cancelVehicleInvitation({commit}, data: { tesla_uuid: string, invite_id: string }) {\n        try {\n            await performApiRequest(commit, 'SET_TESLA_LOADING', 'invitations', () => axios.delete(`/v1/connections/tesla/vehicle/${data.tesla_uuid}/invitations/${data.invite_id}`));\n        } catch (error) {\n        }\n    },\n\n    refreshVehicles({state, commit}, tesla: TeslaConnection) {\n        commit(types.SET_TESLA_LOADING, {subject: 'refreshVehicles', loading: true});\n\n        const connIndex = state.connections.findIndex((c: Connection) => tesla.uuid === c.uuid);\n        state.connections[connIndex].loading = true;\n        state.connections[connIndex].connected = false;\n\n        axios.post(`/v1/connections/tesla/${tesla.uuid}/refresh-vehicles`)\n            .then((response) => {\n                commit('SET_TESLA_CONNECTIONS', get(response, 'data.vehicles'), []);\n                state.connections[connIndex].connected = true;\n            }).catch(() => {\n        }).finally(() => {\n            commit(types.SET_TESLA_LOADING, {subject: 'refreshVehicles', loading: false});\n            state.connections[connIndex].loading = false;\n        });\n    },\n\n    wakeVehicle({commit}, tesla: TeslaConnection) {\n        commit(types.SET_TESLA_LOADING, {subject: 'wakeVehicle', loading: true});\n        commit('SET_CURRENT_WORKING_TESLA_VEHICLE', tesla);\n\n        axios.post(`/v1/connections/tesla/vehicles/${tesla.uuid}/wake`)\n            .then((response) => {\n                if (get(response, 'data.wake.state') === 'asleep') {\n                    EventBus.$emit('waking-tesla', get(response, 'data.wake'));\n                    EventBus.$emit('SystemMessage', {\n                        type: 'success',\n                        message: 'Tesla is waking. It may take a few seconds.',\n                    });\n                } else {\n                    commit('SET_CURRENT_WORKING_TESLA_ASLEEP', false);\n                    EventBus.$emit('woke-tesla', tesla);\n                }\n            }).catch((e) => {\n            push.error({\n                message: e?.response?.data?.message || 'There was an error',\n            });\n        }).finally(() => {\n            commit(types.SET_TESLA_LOADING, {subject: 'wakeVehicle', loading: false});\n        });\n    },\n\n    getVehicleState({commit}, tesla: TeslaConnection) {\n        commit(types.SET_TESLA_LOADING, {subject: 'vehicleState', loading: true});\n        axios.get(`/v1/connections/tesla/vehicles/${tesla.uuid}/state`)\n            .then((response) => {\n                commit('SET_CURRENT_WORKING_TESLA_VEHICLE_STATE', get(response, 'data.state'), []);\n            }).catch((e) => {\n            push.error({\n                message: e?.response?.data?.message || 'There was an error',\n            });\n        }).finally(() => {\n            commit(types.SET_TESLA_LOADING, {subject: 'vehicleState', loading: false});\n        });\n    },\n\n    getVehicleData({commit}, tesla: TeslaConnection) {\n        commit(types.SET_TESLA_LOADING, {subject: 'vehicleData', loading: true});\n\n        axios.get(`/v1/connections/tesla/vehicles/${tesla.uuid}/data`)\n            .then((response) => {\n                EventBus.$emit('get-tesla-vehicle-data-success', get(response, 'data.data'));\n                commit('SET_CURRENT_WORKING_TESLA_ASLEEP', false);\n                commit('SET_CURRENT_WORKING_TESLA_VEHICLE_DATA', get(response, 'data.data'), []);\n            }).catch((e) => {\n            console.dir(e);\n            if (e.response.status === 406) {\n                EventBus.$emit('get-tesla-vehicle-data-asleep', tesla);\n                commit('SET_CURRENT_WORKING_TESLA_ASLEEP', true);\n            }\n            push.error({\n                message: e?.response?.data?.message || 'There was an error',\n            });\n        }).finally(() => {\n            commit(types.SET_TESLA_LOADING, {subject: 'vehicleData', loading: false});\n        });\n    },\n\n    checkInvoices({commit}, tesla: TeslaConnection) {\n        commit(types.SET_TESLA_LOADING, {subject: 'refresh_invoice', loading: true});\n\n        axios.post(`/v1/company/${StorageService.getCompanyUuid()}/connections/tesla/${tesla.uuid}/payment-history`)\n            .then((response) => {\n                commit('SET_TESLA_INVOICES', get(response, 'data.invoices'));\n                commit('SET_TESLA_INVOICES_META', get(response, 'data.invoices_meta'));\n            }).catch((e) => {\n            console.dir(e);\n            push.error({\n                message: e?.response?.data?.message || 'There was an error',\n            });\n        }).finally(() => {\n            commit(types.SET_TESLA_LOADING, {subject: 'refresh_invoice', loading: false});\n        });\n    },\n\n    chargingHistory({commit}, tesla: TeslaConnection) {\n        commit(types.SET_TESLA_LOADING, {subject: 'refresh_invoice', loading: true});\n\n        axios.post(`/v1/connections/tesla/${tesla.uuid}/charging-history`)\n            .then(() => {\n            }).catch((e) => {\n            console.dir(e);\n            push.error({\n                message: e?.response?.data?.message || 'There was an error',\n            });\n        }).finally(() => {\n            commit(types.SET_TESLA_LOADING, {subject: 'refresh_invoice', loading: false});\n        });\n    },\n\n    getRnIds({commit}, tesla: TeslaConnection) {\n        commit(types.SET_TESLA_LOADING, {subject: 'refresh_invoice', loading: true});\n\n        axios.get(`/v1/company/${StorageService.getCompanyUuid()}/connections/tesla/${tesla.uuid}/rd-ids`)\n            .then(() => {\n            }).catch((e) => {\n            console.dir(e);\n            push.error({\n                message: e?.response?.data?.message || 'There was an error',\n            });\n        }).finally(() => {\n            commit(types.SET_TESLA_LOADING, {subject: 'refresh_invoice', loading: false});\n        });\n    },\n\n\n    getChargingInvoiceHistory({commit}, tesla: TeslaConnection) {\n        commit(types.SET_TESLA_LOADING, {subject: 'invoices', loading: true});\n\n        axios.get(`/v1/connections/tesla/${tesla.uuid}/charging-invoice-history`)\n            .then((response) => {\n                commit('SET_TESLA_CHARGING_INVOICES', get(response, 'data.charging'));\n            }).catch((e) => {\n            push.error({\n                message: e?.response?.data?.message || 'There was an error',\n            });\n        }).finally(() => {\n            commit(types.SET_TESLA_LOADING, {subject: 'invoices', loading: false});\n        });\n    },\n\n    getInvoices({commit}, tesla: TeslaConnection) {\n        commit(types.SET_TESLA_LOADING, {subject: 'invoices', loading: true});\n\n        axios.get(`/v1/company/${StorageService.getCompanyUuid()}/connections/tesla/${tesla.uuid}/payment-history`)\n            .then((response) => {\n                commit('SET_TESLA_INVOICES', get(response, 'data.invoices'));\n                commit('SET_TESLA_INVOICES_META', get(response, 'data.invoices_meta'));\n            }).catch((e) => {\n            push.error({\n                message: e?.response?.data?.message || 'There was an error',\n            });\n        }).finally(() => {\n            commit(types.SET_TESLA_LOADING, {subject: 'invoices', loading: false});\n        });\n    },\n\n\n    /**\n     * Get invoice pdfs\n     */\n    getInvoicePDF({commit}, tesla) {\n        commit(types.SET_TESLA_LOADING, {subject: 'invoicePDF', loading: true});\n        axios.get(`/v1/company/${StorageService.getCompanyUuid()}/connections/tesla/${tesla.tesla_uuid}/payment-history/${tesla.chargeSessionId}/invoice-pdf`)\n            .then((response) => {\n                commit('SET_TESLA_INVOICE_PDF', get(response, 'data.pdf'));\n            }).catch((e) => {\n            push.error({\n                message: e?.response?.data?.message || 'There was an error',\n            });\n        }).finally(() => {\n            commit(types.SET_TESLA_LOADING, {subject: 'invoicePDF', loading: false});\n        });\n    },\n\n    importTeslaVehiclesAsListings({commit}, {vehicle_uuids, tesla_uuid}) {\n        commit(types.SET_TESLA_LOADING, {subject: 'invoicePDF', loading: true});\n\n        axios.post(`/v1/company/${StorageService.getCompanyUuid()}/connections/tesla/${tesla_uuid}/import`, {vehicle_uuids})\n            .then((response) => {\n                commit('listing/SET_ALL_LISTINGS', get(response, 'data.listings'), {root: true});\n                EventBus.$emit('SystemMessage', {\n                    type: 'success',\n                    message: 'Tesla imported as listing successfully',\n                });\n                EventBus.$emit('import-tesla-vehicles-Success');\n            }).catch((e) => {\n            push.error({\n                message: e?.response?.data?.message || 'There was an error',\n            });\n        }).finally(() => {\n            commit(types.SET_TESLA_LOADING, {subject: 'invoicePDF', loading: false});\n        });\n    },\n\n};\n\n\nexport default {\n    namespaced: true,\n    state,\n    mutations,\n    actions,\n    getters,\n};\n","import axios from 'axios';\nimport {Form} from '@/plugins/FWForms/index';\nimport {EventBus} from '@/plugins/eventBus';\nimport {get} from 'lodash';\nimport * as types from '../mutation-types';\n\nexport interface TollState {\n    init: boolean;\n    loading: Record<string, boolean>;\n    tollForm: Form<any>;\n    tollAgencies: any[];\n    tollAccounts: any[];\n    wishlist: any[];\n    transactions: any[];\n    transponders: any[];\n}\n\nconst state: TollState = {\n    init: false,\n    loading: {\n        connect_account: false,\n        get_tolls: false,\n        toggle_tolls: false,\n        add_wishlist: false,\n        attach_booking: false,\n        attach_vehicle: false,\n        detach_booking: false,\n        detach_vehicle: false,\n        delete_account: false,\n        transaction_dismissing: false,\n        manual_fetch_transactions: false,\n        fetch_transponders: false,\n    },\n    tollForm: new Form(),\n    tollAgencies: [],\n    tollAccounts: [],\n    wishlist: [],\n    transactions: [],\n    transponders: [],\n};\n\nconst getters = {\n    init: state => state.init,\n    loading: state => state.loading,\n    tollAgencies: state => state.tollAgencies,\n    tollAccounts: state => state.tollAccounts,\n    tollForm: state => state.tollForm,\n    wishlist: state => state.wishlist,\n    transactions: state => state.transactions,\n    transponders: state => state.transponders,\n};\n\nconst mutations = {\n    [types.SET_TOLLS_LOADING](state, loading) {\n        state.loading[loading.subject] = loading.loading;\n    },\n    [types.SET_TOLL_AGENCIES](state, tolls) {\n        state.tollAgencies = tolls;\n    },\n    [types.SET_TOLL_ACCOUNTS](state, tolls) {\n        state.tollAccounts = tolls;\n    },\n    [types.SET_TOLL_AGENCIES_WISHLIST](state, tolls) {\n        state.wishlist = tolls;\n    },\n    [types.SET_TOLL_TRANSACTIONS](state, transactions) {\n        state.transactions = transactions;\n    },\n    [types.SET_TOLL_TRANSPONDERS](state, transponders) {\n        state.transponders = transponders;\n    },\n};\n\nconst actions = {\n    getTollAgencies({commit}) {\n        commit('SET_TOLLS_LOADING', {subject: 'get_tolls', loading: true});\n        state.tollForm.errors.clear();\n\n        axios.get('/v1/toll-agencies')\n            .then((response) => {\n                commit('SET_TOLL_AGENCIES', get(response, 'data.tollAgencies', []));\n            }).catch((e) => {\n            state.tollForm.errors.set(get(e, 'response.data.errors', []));\n        }).finally(() => {\n            commit('SET_TOLLS_LOADING', {subject: 'get_tolls', loading: false});\n        });\n    },\n\n    getTollAgenciesWishlist({commit}) {\n        commit('SET_TOLLS_LOADING', {subject: 'get_tolls', loading: true});\n\n        axios.get('/v1/toll-agencies/wishlist')\n            .then((response) => {\n                commit('SET_TOLL_AGENCIES_WISHLIST', get(response, 'data.wishlist', []));\n            }).catch(() => {\n        }).finally(() => {\n            commit('SET_TOLLS_LOADING', {subject: 'get_tolls', loading: false});\n        });\n    },\n\n    connectTollAgency({commit, rootGetters}, data) {\n        commit('SET_TOLLS_LOADING', {subject: 'connect_account', loading: true});\n\n        axios.post('/v1/toll-accounts', data)\n            .then((response) => {\n                commit('SET_TOLL_ACCOUNTS', get(response, 'data.tollAccounts', []));\n                EventBus.$emit('connect-toll-account-success');\n            }).catch((e) => {\n            state.tollForm.errors.set(get(e, 'response.data.errors'));\n        }).finally(() => {\n            commit('SET_TOLLS_LOADING', {subject: 'connect_account', loading: false});\n        });\n    },\n\n    getTollAccounts({commit}) {\n        commit('SET_TOLLS_LOADING', {subject: 'get_tolls', loading: true});\n\n        axios.get('/v1/toll-accounts')\n            .then((response) => {\n                commit('SET_TOLL_ACCOUNTS', get(response, 'data.tollAccounts', []));\n            }).catch(() => {\n        }).finally(() => {\n            commit('SET_TOLLS_LOADING', {subject: 'get_tolls', loading: false});\n        });\n    },\n\n    toggleTollAccountActive({commit, rootGetters}, tollAccount) {\n        commit('SET_TOLLS_LOADING', {subject: 'toggle_tolls', loading: true});\n\n        axios.put(`/v1/toll-accounts/${tollAccount.uuid}/toggle-active`)\n            .then((response) => {\n                commit('SET_TOLL_ACCOUNTS', get(response, 'data.tollAccounts', []));\n                EventBus.$emit('update-toll-account-success');\n            }).catch(() => {\n        }).finally(() => {\n            commit('SET_TOLLS_LOADING', {subject: 'toggle_tolls', loading: false});\n        });\n    },\n\n    deleteTollAccount({commit, rootGetters}, tollAccount) {\n        commit('SET_TOLLS_LOADING', {subject: 'delete_account', loading: true});\n\n        axios.delete(`/v1/toll-accounts/${tollAccount.uuid}`)\n            .then((response) => {\n                commit('SET_TOLL_ACCOUNTS', get(response, 'data.tollAccounts', []));\n                EventBus.$emit('delete-toll-account-success');\n            }).catch(() => {\n        }).finally(() => {\n            commit('SET_TOLLS_LOADING', {subject: 'delete_account', loading: false});\n        });\n    },\n\n    testTollAccount({commit, rootGetters}, tollAccount) {\n        commit('SET_TOLLS_LOADING', {subject: 'get_tolls', loading: true});\n\n        axios.post(`/v1/toll-accounts/${tollAccount.uuid}/test`)\n            .then(() => {\n            }).catch(() => {\n        }).finally(() => {\n            commit('SET_TOLLS_LOADING', {subject: 'get_tolls', loading: false});\n        });\n    },\n\n    updateAccount({commit, rootGetters}, tollAccount) {\n        commit('SET_TOLLS_LOADING', {subject: 'get_tolls', loading: true});\n\n        axios.put(`/v1/toll-accounts/${tollAccount.uuid}`, tollAccount)\n            .then(() => {\n                EventBus.$emit('update-toll-account-success');\n            }).catch(() => {\n        }).finally(() => {\n            commit('SET_TOLLS_LOADING', {subject: 'get_tolls', loading: false});\n        });\n    },\n\n    fetchTransactions({commit, rootGetters}, tollAccount) {\n        commit('SET_TOLLS_LOADING', {subject: 'get_tolls', loading: true});\n\n        axios.get(`/v1/toll-accounts/${tollAccount.uuid}/transactions`)\n            .then(() => {\n            }).catch(() => {\n        }).finally(() => {\n            commit('SET_TOLLS_LOADING', {subject: 'get_tolls', loading: false});\n        });\n    },\n\n    manualFetchAllTransactions({commit}) {\n        commit('SET_TOLLS_LOADING', {subject: 'manual_fetch_transactions', loading: true});\n\n        axios.get('/v1/toll-accounts/transactions/manual-fetch')\n            .then((response) => {\n                commit('SET_TOLL_TRANSACTIONS', get(response, 'data.transactions', []));\n                EventBus.$emit('manual-toll-transaction-fetch-success');\n            }).catch(() => {\n        }).finally(() => {\n            commit('SET_TOLLS_LOADING', {subject: 'manual_fetch_transactions', loading: false});\n        });\n    },\n\n    fetchVehicles({commit, rootGetters}, tollAccount) {\n        commit('SET_TOLLS_LOADING', {subject: 'get_tolls', loading: true});\n\n        axios.get(`/v1/toll-accounts/${tollAccount.uuid}/vehicles`)\n            .then(() => {\n            }).catch(() => {\n        }).finally(() => {\n            commit('SET_TOLLS_LOADING', {subject: 'get_tolls', loading: false});\n        });\n    },\n\n    fetchTransponders({commit, rootGetters}, tollAccount) {\n        commit('SET_TOLLS_LOADING', {subject: 'fetch_transponders', loading: true});\n\n        axios.get(`/v1/toll-accounts/${tollAccount.uuid}/transponders`)\n            .then((response) => {\n                commit('SET_TOLL_TRANSPONDERS', get(response, 'data.transponders', []));\n            }).catch(() => {\n        }).finally(() => {\n            commit('SET_TOLLS_LOADING', {subject: 'fetch_transponders', loading: false});\n        });\n    },\n\n    saveTransponders({commit, rootGetters}, transponders) {\n        commit('SET_TOLLS_LOADING', {subject: 'get_tolls', loading: true});\n\n        axios.put('/v1/toll-accounts/transponders', transponders)\n            .then((response) => {\n                commit('SET_TOLL_TRANSPONDERS', get(response, 'data.transponders', []));\n            }).catch(() => {\n        }).finally(() => {\n            commit('SET_TOLLS_LOADING', {subject: 'get_tolls', loading: false});\n        });\n    },\n\n    getTransactions({commit}) {\n        commit('SET_TOLLS_LOADING', {subject: 'get_tolls', loading: true});\n\n        axios.get('/v1/toll-accounts/transactions')\n            .then((response) => {\n                commit('SET_TOLL_TRANSACTIONS', get(response, 'data.transactions', []));\n            }).catch(() => {\n        }).finally(() => {\n            commit('SET_TOLLS_LOADING', {subject: 'get_tolls', loading: false});\n        });\n    },\n\n    removeTransactionsMatchedBooking({commit, rootGetters}, transaction) {\n        commit('SET_TOLLS_LOADING', {subject: 'detach_booking', loading: true});\n\n        axios.delete(`/v1/toll-transactions/${transaction.uuid}/matched-booking`)\n            .then((response) => {\n                commit('SET_TOLL_TRANSACTIONS', get(response, 'data.transactions', []));\n                EventBus.$emit('unmatched-toll-transaction-booking-success', get(response, 'data.transaction', []));\n            }).catch(() => {\n        }).finally(() => {\n            commit('SET_TOLLS_LOADING', {subject: 'detach_booking', loading: false});\n        });\n    },\n\n    removeTransactionsMatchedVehicle({commit, rootGetters}, transaction) {\n        commit('SET_TOLLS_LOADING', {subject: 'detach_vehicle', loading: true});\n\n        axios.delete(`/v1/toll-transactions/${transaction.uuid}/matched-vehicle`)\n            .then((response) => {\n                commit('SET_TOLL_TRANSACTIONS', get(response, 'data.transactions', []));\n                EventBus.$emit('unmatched-toll-transaction-vehicle-success', get(response, 'data.transaction'));\n            }).catch(() => {\n        }).finally(() => {\n            commit('SET_TOLLS_LOADING', {subject: 'detach_vehicle', loading: false});\n        });\n    },\n\n    dismissTransaction({commit, rootGetters}, transaction) {\n        commit('SET_TOLLS_LOADING', {subject: 'transaction_dismissing', loading: true});\n\n        axios.put(`/v1/toll-transactions/${transaction.uuid}/dismiss`)\n            .then((response) => {\n                commit('SET_TOLL_TRANSACTIONS', get(response, 'data.transactions', []));\n                EventBus.$emit('dismissed-toll-transaction-success', get(response, 'data.transaction'));\n            }).catch(() => {\n        }).finally(() => {\n            commit('SET_TOLLS_LOADING', {subject: 'transaction_dismissing', loading: false});\n        });\n    },\n\n    attachTransactionsMatchedBooking({commit, rootGetters}, data) {\n        commit('SET_TOLLS_LOADING', {subject: 'attach_booking', loading: true});\n        console.dir(data);\n        axios.put(`/v1/toll-transactions/${data.transaction.uuid}/matched-booking`, {b_id: data.b_id})\n            .then((response) => {\n                commit('SET_TOLL_TRANSACTIONS', get(response, 'data.transactions', []));\n                EventBus.$emit('attach-toll-transaction-booking-success', get(response, 'data.transaction', []));\n            }).catch(() => {\n        }).finally(() => {\n            commit('SET_TOLLS_LOADING', {subject: 'attach_booking', loading: false});\n        });\n    },\n\n    attachTransactionsMatchedVehicle({commit, rootGetters}, data) {\n        commit('SET_TOLLS_LOADING', {subject: 'attach_vehicle', loading: true});\n        console.dir(data);\n        axios.put(`/v1/toll-transactions/${data.transaction.uuid}/matched-vehicle`, {l_id: data.l_id})\n            .then((response) => {\n                commit('SET_TOLL_TRANSACTIONS', get(response, 'data.transactions', []));\n                EventBus.$emit('attach-toll-transaction-vehicle-success', get(response, 'data.transaction'));\n            }).catch(() => {\n        }).finally(() => {\n            commit('SET_TOLLS_LOADING', {subject: 'attach_vehicle', loading: false});\n        });\n    },\n\n    submitTollWishlist({commit, rootGetters}, data) {\n        commit('SET_TOLLS_LOADING', {subject: 'add_wishlist', loading: true});\n\n        axios.post('/v1/toll-agencies/wishlist', data)\n            .then((response) => {\n                commit('SET_TOLL_AGENCIES_WISHLIST', get(response, 'data.wishlist', []));\n                EventBus.$emit('toll-wishlist-added-success');\n            }).catch((e) => {\n            state.tollForm.errors.set(get(e, 'response.data.errors'));\n            if (get(e, 'response.data.code') === 'already_supported') {\n                EventBus.$emit('toll-wishlist-already-supported', get(e, 'response.data.tollAgency'));\n            }\n        }).finally(() => {\n            commit('SET_TOLLS_LOADING', {subject: 'add_wishlist', loading: false});\n        });\n    },\n};\n\nexport default {\n    namespaced: true,\n    state,\n    mutations,\n    actions,\n    getters,\n};\n","import axios from 'axios';\nimport * as types from '../mutation-types';\nimport {TripExtra} from '@/types';\nimport {RootState} from '@/types/RootState';\nimport {performApiRequest} from '@/store/helpers/vuex-helpers';\nimport {Module} from 'vuex';\nimport {push} from 'notivue'\n\nexport interface RegularExtraData {\n    extra?: TripExtra;\n    mode: 'add' | 'edit';\n    code?: 'secondary_driver' | 'young_driver';\n    type?: 'convenience';\n}\n\nexport interface TripExtrasState {\n    loading: Record<string, boolean>,\n    extras: TripExtra[],\n    tripExtraSettingDialog: boolean,\n    regularExtraDialog: boolean,\n    regularExtraData: RegularExtraData | null,\n    requiredExtraAddEditDialog: boolean,\n    requiredExtraAddEditData: TripExtra | null,\n    extraListingsDialog: boolean,\n}\n\nconst state: TripExtrasState = {\n    loading: {\n        extras: false,\n        extra_delete: false,\n        extra_update: false,\n    },\n    extras: [] as TripExtra[],\n    tripExtraSettingDialog: false,\n    requiredExtraAddEditDialog: false,\n    regularExtraDialog: false,\n    requiredExtraAddEditData: null,\n    regularExtraData: null,\n    extraListingsDialog: false,\n};\n\n\nconst tripExtrasModule: Module<TripExtrasState, RootState> = {\n    namespaced: true,\n\n    state,\n\n    getters: {\n        loading: (state: TripExtrasState) => state.loading,\n        extras: (state: TripExtrasState) => state.extras,\n        tripExtraSettingDialog: (state: TripExtrasState) => state.tripExtraSettingDialog,\n        requiredExtraAddEditDialog: (state: TripExtrasState) => state.requiredExtraAddEditDialog,\n        regularExtraDialog: (state: TripExtrasState) => state.regularExtraDialog,\n        requiredExtraAddEditData: (state: TripExtrasState) => state.requiredExtraAddEditData,\n        regularExtraData: (state: TripExtrasState) => state.regularExtraData,\n        extraListingsDialog: (state: TripExtrasState) => state.extraListingsDialog,\n    },\n\n    mutations: {\n        [types.SET_EXTRAS_LOADING](state: TripExtrasState, loading) {\n            state.loading[loading.subject] = loading.loading;\n        },\n        [types.SET_EXTRAS](state: TripExtrasState, extras) {\n            state.extras = extras;\n        },\n        [types.SET_TRIP_EXTRA_SETTING_DIALOG](state: TripExtrasState, value) {\n            state.tripExtraSettingDialog = value;\n        },\n        [types.SET_REQUIRED_EXTRA_ADD_EDIT_DIALOG](state: TripExtrasState, value) {\n            state.requiredExtraAddEditDialog = value;\n        },\n        [types.SET_REQUIRED_EXTRA_ADD_EDIT_DATA](state: TripExtrasState, payload) {\n            state.requiredExtraAddEditData = payload;\n        },\n        [types.SET_REGULAR_EXTRA_DATA](state: TripExtrasState, payload: RegularExtraData | null) {\n            state.regularExtraData = payload;\n        },\n        [types.SET_REGULAR_EXTRA_DIALOG](state, value) {\n            state.regularExtraDialog = value;\n        },\n        [types.SET_EXTRA_LISTINGS_DIALOG](state, value) {\n            state.extraListingsDialog = value;\n        },\n    },\n\n    actions: {\n\n        async getExtras({commit}) {\n            const data = await performApiRequest(commit, 'SET_EXTRAS_LOADING', 'extras', () => axios.get('/v1/trip-extras?with=listings'));\n            if (data) commit('SET_EXTRAS', data.extras);\n        },\n\n        async createExtras({commit}, data) {\n            try {\n                await performApiRequest(commit, 'SET_EXTRAS_LOADING', 'extras', () => axios.post('/v1/trip-extras', data));\n                push.success({\n                    message: 'Trip Extra created successfully!',\n                });\n            } catch (error) {\n                push.error({\n                    message: 'Failed to create Trip Extra',\n                });\n            }\n        },\n\n        async deleteExtra({commit}, extra: TripExtra) {\n            try {\n                await performApiRequest(commit, 'SET_EXTRAS_LOADING', 'extra_delete', () => axios.delete(`/v1/trip-extras/${extra.uuid}`));\n                push.success({\n                    message: 'Trip Extra deleted successfully!',\n                });\n            } catch (error) {\n                push.error({\n                    message: 'Failed to delete Trip Extra',\n                });\n            }\n        },\n\n        async deleteOldVersionExtras({commit}) {\n            await performApiRequest(commit, 'SET_EXTRAS_LOADING', 'extras', () => axios.delete('/v1/trip-extras/old-version'));\n            push.success({\n                message: 'Old Extras deleted successfully!',\n            });\n        },\n\n        async deleteFromListings({commit}, data: { extraUuid: string, listings: string[] }) {\n            await performApiRequest(commit, 'SET_EXTRAS_LOADING', 'extra_delete', () => axios.post(`/v1/trip-extras/${data.extraUuid}/remove-listings`, {listings: data.listings}));\n        },\n\n        async updateExtras({commit}, extra: TripExtra) {\n            try {\n                await performApiRequest(commit, 'SET_EXTRAS_LOADING', 'extra_update', () => axios.put(`/v1/trip-extras/${extra.uuid}`, extra));\n\n                push.success({\n                    message: 'Trip Extra updated successfully!',\n                });\n            } catch (error) {\n                push.error({\n                    message: 'Failed to update Trip Extra',\n                });\n            }\n        },\n\n        async updateExtraListings({commit}, data: { extraUuid: string, listingIds: string[] }) {\n            await performApiRequest(commit, 'SET_EXTRAS_LOADING', 'extra_update', () => axios.put(`/v1/trip-extras/${data.extraUuid}/listings`, {listings: data.listingIds}));\n\n            push.success({\n                message: 'Trip Extra Listings updated successfully!',\n            });\n        },\n    },\n}\n\nexport default tripExtrasModule;\n","import axios from 'axios';\nimport {get, uniq, uniqBy} from 'lodash';\nimport dayjs from 'dayjs';\nimport {EventBus} from '@/plugins/eventBus';\nimport {StorageService} from '@/services/storage.service';\nimport * as types from '../mutation-types';\nimport {Connection} from '@/types';\n\n\nexport type TuroConnection = Connection & {\n    turo_uuid?: string;\n    turo_id?: string;\n    me?: any;\n}\n\nexport interface TuroState {\n    init: boolean;\n    loading: Record<string, boolean>;\n    credentials: {\n        username: string,\n        turo_url?: string,\n        password: string,\n        token: string,\n        method: string,\n        challenge_code: string,\n        grant_type: string,\n        mode: string,\n        testing?: boolean\n    };\n    vehicles: any[];\n    allImportedVehicles: any[];\n    allVehicles: any[];\n    allTuroVehicles: any[];\n    currentWorkingTrip: any;\n    currentWorkingTripMessages: any[];\n    currentWorkingTripImages: any[];\n    currentWorkingTripImagesComplete: any[];\n    trips: any[];\n    emails: any[];\n    turoMessageSending: boolean;\n    turoGoSet: boolean;\n    currentTripTuroGo: any;\n    connections: TuroConnection[];\n    earnings: any[];\n    tripHistory: {\n        list: any[],\n        numPages: number,\n    };\n    pendingRequests: any[];\n    activityFeed: {\n        activities: any[],\n    };\n    reimbursementDetails: any;\n    captchaId: string;\n    captchaTest: boolean;\n    changeRequestSettings: any[];\n    feedbackMode: string;\n    feedback: {\n        pending: any[],\n        history: any[],\n    };\n    feedbackPage: {\n        pending: number,\n        history: number,\n    };\n    feedbackNextPage: {\n        pending: number,\n        history: number,\n    };\n    feedbackTotal: {\n        pending: number,\n        history: number,\n    };\n    feedbackPerPage: {\n        pending: number,\n        history: number,\n    };\n    feedbackLastPage: {\n        pending: number,\n        history: number,\n    };\n    allTuroMessages: any[];\n    allTuroMessagesPaginate: any;\n    allTuroMessagesCurrentPage: number;\n    allTuroMessagesPages: number;\n    emailsPagination: any;\n}\n\nconst state: TuroState = {\n    init: false,\n\n    loading: {\n        me: false,\n        login: false,\n        refresh_token: false,\n        logout: false,\n        trips: false,\n        listings: false,\n        emails: false,\n        messages: false,\n        images: false,\n        active: false,\n        captchaInit: false,\n        submitReimbursement: false,\n        submitReimbursementWithdraw: false,\n        reimbursementDetails: false,\n        removeTuro: false,\n        loginProcess: false,\n        fetch_unavailability: false,\n        create_unavailability: false,\n        remove_unavailability: false,\n        saving_change_request: false,\n        update_feedback: false,\n        delete_feedback: false,\n        match_with_listing: false,\n        earnings: false,\n        feedback: false,\n        vehicles: false,\n    },\n\n    turoMessageSending: false,\n    credentials: {\n        username: '',\n        turo_url: '',\n        password: '',\n        token: '',\n        method: 'general',\n        challenge_code: '',\n        grant_type: 'password',\n        mode: 'SMS',\n    },\n    vehicles: [],\n    allImportedVehicles: [],\n\n    allVehicles: [], // Stored on FW\n    allTuroVehicles: [], // Fetched straight from Turo\n\n    currentWorkingTrip: {},\n    currentWorkingTripMessages: [],\n    currentWorkingTripImages: [],\n    currentWorkingTripImagesComplete: [],\n\n    trips: [],\n\n    emails: [],\n\n    turoGoSet: false,\n    currentTripTuroGo: {\n        odometer: {\n            scalar: 0,\n            unit: '',\n        },\n    },\n\n    connections: [],\n    earnings: [],\n    tripHistory: {\n        list: [],\n        numPages: 0,\n    },\n    pendingRequests: [],\n    activityFeed: {\n        activities: [],\n    },\n    reimbursementDetails: null,\n    captchaId: null,\n    captchaTest: false,\n    changeRequestSettings: [],\n    feedbackMode: null,\n    feedback: {\n        pending: [],\n        history: [],\n    },\n    feedbackPage: {\n        pending: 0,\n        history: 0,\n    },\n    feedbackNextPage: {\n        pending: 0,\n        history: 0,\n    },\n    feedbackTotal: {\n        pending: 0,\n        history: 0,\n    },\n    feedbackPerPage: {\n        pending: 0,\n        history: 0,\n    },\n    feedbackLastPage: {\n        pending: 0,\n        history: 0,\n    },\n    allTuroMessages: [],\n    allTuroMessagesPaginate: {},\n    allTuroMessagesCurrentPage: 0,\n    allTuroMessagesPages: 1,\n    emailsPagination: {},\n};\n\nconst getters = {\n    turoInit: (state: TuroState) => state.init,\n    loading: (state: TuroState) => state.loading,\n    credentials: (state: TuroState) => state.credentials,\n    trips: (state: TuroState) => state.trips,\n    currentWorkingTrip: (state: TuroState) => state.currentWorkingTrip,\n    currentWorkingTripMessages: (state: TuroState) => state.currentWorkingTripMessages,\n    currentWorkingTripImages: (state: TuroState) => state.currentWorkingTripImages,\n    turoMessageSending: (state: TuroState) => state.turoMessageSending,\n    allTuroMessages: (state: TuroState) => state.allTuroMessages,\n    allTuroMessagesPaginate: (state: TuroState) => state.allTuroMessagesPaginate,\n    allTuroMessagesCurrentPage: (state: TuroState) => state.allTuroMessagesCurrentPage,\n    emails: (state: TuroState) => state.emails,\n    vehicles: (state: TuroState) => state.vehicles,\n    allVehicles: (state: TuroState) => state.allVehicles,\n    allTuroVehicles: (state: TuroState) => state.allTuroVehicles,\n    allImportedVehicles: (state: TuroState) => state.allImportedVehicles,\n    turoGoSet: (state: TuroState) => state.turoGoSet,\n    currentTripTuroGo: (state: TuroState) => state.currentTripTuroGo,\n    connections: (state: TuroState) => state.connections,\n    earnings: (state: TuroState) => state.earnings,\n    reimbursementDetails: (state: TuroState) => state.reimbursementDetails,\n    captchaId: (state: TuroState) => state.captchaId,\n    tripHistory: (state: TuroState) => state.tripHistory,\n    pendingRequests: (state: TuroState) => state.pendingRequests,\n    activityFeed: (state: TuroState) => state.activityFeed,\n    changeRequestSettings: (state: TuroState) => state.changeRequestSettings,\n    feedback: (state: TuroState) => state.feedback,\n    feedbackPage: (state: TuroState) => state.feedbackPage,\n    feedbackNextPage: (state: TuroState) => state.feedbackNextPage,\n    feedbackMode: (state: TuroState) => state.feedbackMode,\n    feedbackTotal: (state: TuroState) => state.feedbackTotal,\n    feedbackPerPage: (state: TuroState) => state.feedbackPerPage,\n    feedbackLastPage: (state: TuroState) => state.feedbackLastPage,\n    emailsPagination: (state: TuroState) => state.emailsPagination,\n};\n\nconst mutations = {\n    [types.SET_INIT](state: TuroState, init) {\n        state.init = init;\n    },\n    [types.SET_TURO_LOADING](state: TuroState, loading) {\n        state.loading[loading.subject] = loading.loading;\n    },\n    [types.SET_VEHICLES](state: TuroState, vehicles) {\n        state.vehicles = vehicles;\n    },\n    [types.SET_ALL_TURO_VEHICLES](state: TuroState, vehicles) {\n        state.allTuroVehicles = uniqBy([...state.allTuroVehicles, ...vehicles], (w) => w.id);\n    },\n    [types.CLEAR_ALL_TURO_VEHICLES](state: TuroState) {\n        state.allTuroVehicles = [];\n    },\n    [types.SET_TURO_EMAILS](state: TuroState, emails) {\n        state.emails = emails;\n    },\n    [types.SET_TURO_EMAILS_PAGINATION](state: TuroState, pagination) {\n        state.emailsPagination = pagination;\n    },\n    [types.RESET_VEHICLES](state: TuroState) {\n        state.vehicles = [];\n    },\n    [types.SET_TURO_EARNINGS](state: TuroState, earnings) {\n        state.earnings = earnings;\n    },\n    [types.SET_TURO_FEEDBACK](state: TuroState, {data, mode}) {\n        state.feedback[mode] = uniqBy([...state.feedback[mode], ...data], w => w.uuid);\n        state.feedbackMode = mode;\n    },\n    [types.SET_TURO_FEEDBACK_PAGE](state: TuroState, {page, mode}) {\n        state.feedbackPage[mode] = page;\n    },\n    [types.SET_TURO_FEEDBACK_TOTAL](state: TuroState, {total, mode}) {\n        state.feedbackTotal[mode] = total;\n    },\n    [types.SET_TURO_FEEDBACK_NEXT_PAGE](state: TuroState, {page, mode}) {\n        state.feedbackNextPage[mode] = page;\n    },\n    [types.SET_TURO_FEEDBACK_PER_PAGE](state: TuroState, {per_page, mode}) {\n        state.feedbackPerPage[mode] = per_page;\n    },\n    [types.SET_TURO_FEEDBACK_LAST_PAGE](state: TuroState, {last_page, mode}) {\n        state.feedbackLastPage[mode] = last_page;\n    },\n\n    [types.SET_TRIPS](state: TuroState, trips) {\n        state.init = true;\n\n\n        state.trips = trips.map(trip => ({\n            key: trip.reservationId,\n            renter: trip.actor.firstName,\n            listing: trip.vehicle.name,\n            time: dayjs(trip.itemTimestamp).format('ddd MMM DD @ H:mm a'),\n            make: trip.vehicle.make,\n            model: trip.vehicle.model,\n            trim: trip.vehicle.trim,\n            style: trip.vehicle.style,\n            vin: trip.vehicle.vin,\n            vin4: trip.vehicle.vin.substring(trip.vehicle.vin.length - 4),\n            year: trip.vehicle.year,\n            address: trip.address,\n            inProgress: trip.inProgress,\n            reservationId: trip.reservationId,\n            host: trip.host,\n            upcomingTripFeedItemType: trip.upcomingTripFeedItemType,\n            vehicle: trip.vehicle,\n            startF: dayjs(trip.startF).format('ddd MMM DD @ H:mm a'),\n            endF: dayjs(trip.endF).format('ddd MMM DD @ H:mm a'),\n        }));\n    },\n    [types.SET_TRIP_SINGLE](state: TuroState, trip) {\n        state.init = true;\n        state.currentWorkingTrip = trip;\n    },\n\n    [types.SET_TRIP_SINGLE_MESSAGES](state: TuroState, messages) {\n        state.currentWorkingTripMessages = messages;\n    },\n    [types.SET_TRIP_SINGLE_MESSAGES_STORED](state: TuroState, messages) {\n        state.currentWorkingTripMessages = messages;\n    },\n    [types.SET_TRIP_SINGLE_IMAGES](state: TuroState, images) {\n        state.currentWorkingTripImages = images;\n    },\n    [types.SET_TURO_MESSAGE_SENDING](state: TuroState, sending) {\n        state.turoMessageSending = sending;\n    },\n    [types.SET_TURO_ALL_VEHICLES](state: TuroState, vehicles) {\n        state.allVehicles = vehicles;\n    },\n    [types.SET_ALL_IMPORTED_TURO_VEHICLES](state: TuroState, vehicles) {\n        state.allImportedVehicles = vehicles;\n    },\n    [types.SET_TRIP_TURO_GO](state: TuroState, data) {\n        state.currentTripTuroGo = data;\n        state.turoGoSet = true;\n    },\n    [types.SET_TURO_CONNECTIONS](state: TuroState, connections) {\n        state.connections = connections;\n    },\n    [types.SET_TURO_REIMBURSEMENT_DETAILS](state: TuroState, details) {\n        state.reimbursementDetails = details;\n    },\n    [types.RESET_TURO_CREDS](state: TuroState) {\n        state.credentials = {\n            username: '',\n            password: '',\n            token: '',\n            method: 'general',\n            challenge_code: '',\n            grant_type: 'password',\n            mode: 'SMS',\n        };\n    },\n    [types.SET_TURO_CAPTCHA_ID](state: TuroState, id) {\n        state.captchaId = id;\n    },\n    [types.SET_TURO_CAPTCHA_TESTING](state: TuroState, testing) {\n        state.captchaTest = testing;\n    },\n    [types.SET_TRIP_HISTORY](state: TuroState, history) {\n        state.tripHistory = history;\n    },\n    [types.SET_TRIP_PENDING_REQUESTS](state: TuroState, requests) {\n        state.pendingRequests = requests;\n    },\n    [types.SET_ACTIVITY_FEED](state: TuroState, activity) {\n        state.activityFeed = activity;\n    },\n    [types.SET_TURO_CHANGE_REQUEST_SETTINGS](state: TuroState, settings) {\n        state.changeRequestSettings = settings;\n    },\n    [types.SET_ALL_TURO_MESSAGES](state: TuroState, messages) {\n        state.allTuroMessages = uniqBy([...state.allTuroMessages, ...messages], w => w.reservation.id);\n    },\n    [types.SET_ALL_TURO_MESSAGES_CURRENT_PAGINATE](state: TuroState, paginate) {\n        state.allTuroMessagesPaginate = paginate;\n    },\n    [types.SET_ALL_TURO_MESSAGES_TOTAL_PAGES](state: TuroState, pages) {\n        state.allTuroMessagesPages = pages;\n    },\n};\n\nconst actions = {\n\n    createTuroConnection({state, commit}) {\n        if (state.captchaTest) state.credentials.testing = true;\n        if (!state.loading.login) {\n            commit('SET_TURO_LOADING', {subject: 'login', loading: true});\n\n            axios.post('/v1/connections/turo', state.credentials)\n                .then(response => {\n                    commit('turo/SET_TURO_CONNECTIONS', get(response, 'data.company.connections.turo', []), {root: true});\n                    EventBus.$emit('create-turo-connection-success');\n                    EventBus.$emit('SystemMessage', {\n                        type: 'success',\n                        message: 'Turo connection added successfully',\n                    });\n                    commit('RESET_TURO_CREDS');\n                }).catch(e => {\n                console.dir(e);\n                if (e.response.status === 400 || e.response.status === 403) {\n                    EventBus.$emit('create-turo-connection-failed-400', e.response.data.message);\n                }\n\n                if (e.response.status === 412) {\n                    EventBus.$emit('create-turo-connection-failed-412', get(e, 'response.data'));\n                }\n\n                if (e.response.status === 422) {\n                    EventBus.$emit('create-turo-connection-failed-400', e.response.data.message);\n                }\n            }).finally(() => {\n                commit('SET_TURO_LOADING', {subject: 'login', loading: false});\n                commit('SET_TURO_LOADING', {subject: 'loginProcess', loading: false});\n            });\n        }\n    },\n\n    sendSecurityChallengeCode({state: TuroState, dispatch}, data) {\n        axios.post('/v1/connections/turo/code-challenge-init', data)\n            .then(() => {\n                EventBus.$emit('turo-code-challenge-send-success');\n            }).catch(() => {\n        });\n    },\n\n\n    /**\n     * Refresh a Turo connection\n     *\n     * @param commit\n     * @param {Object} turo\n     */\n    turoRefreshToken({commit}, turo) {\n        commit('SET_TURO_LOADING', {subject: 'refresh_token', loading: true});\n\n        axios.post(`/v1/connections/turo/${turo.uuid}/refresh-token`, turo)\n            .then(response => {\n                EventBus.$emit('turo-code-challenge-send-success');\n                EventBus.$emit('turo-refresh-token-success');\n                EventBus.$emit('create-turo-connection-success');\n                commit('turo/SET_TURO_CONNECTIONS', get(response, 'data.company.connections.turo', []), {root: true});\n            }).catch(e => {\n            if (e.response.status === 422 || e.response.status === 500) {\n                if (get(e, 'response.data.code') === 'invalid_refresh_token') {\n                }\n                EventBus.$emit('turo-refresh-token-failed');\n            }\n        }).finally(() => {\n            commit('SET_TURO_LOADING', {subject: 'refresh_token', loading: false});\n        });\n    },\n\n    getFeedback({state, commit}, options) {\n        commit('SET_TURO_LOADING', {subject: 'feedback', loading: true});\n\n        const mode = get(options, 'mode', false);\n        const nextPage = state.feedbackNextPage[mode]++;\n        let query = `?page=${nextPage}`;\n        const history = mode === 'history';\n        const pending = mode === 'pending';\n\n        if (history) {\n            query = `${query}&history=${history}`;\n        }\n        if (pending) {\n            query = `${query}&pending=${pending}`;\n        }\n\n\n        axios.get(`/v1/connections/turo/feedback${query}`)\n            .then(response => {\n                commit('SET_TURO_FEEDBACK', {\n                    data: get(response, 'data.feedback.data', []),\n                    mode,\n                });\n                commit('SET_TURO_FEEDBACK_PAGE', {\n                    page: get(response, 'data.feedback.current_page', 1),\n                    mode,\n                });\n                commit('SET_TURO_FEEDBACK_NEXT_PAGE', {\n                    page: get(response, 'data.feedback.current_page', 1) + 1,\n                    mode,\n                });\n                commit('SET_TURO_FEEDBACK_TOTAL', {\n                    total: get(response, 'data.feedback.total'),\n                    mode,\n                });\n                commit('SET_TURO_FEEDBACK_PER_PAGE', {\n                    per_page: get(response, 'data.feedback.per_page'),\n                    mode,\n                });\n                commit('SET_TURO_FEEDBACK_LAST_PAGE', {\n                    last_page: get(response, 'data.feedback.last_page'),\n                    mode,\n                });\n            }).catch(() => {\n        }).finally(() => {\n            commit('SET_TURO_LOADING', {subject: 'feedback', loading: false});\n        });\n    },\n\n    updateFeedback({state, commit, rootGetters}, feedback) {\n        commit('SET_TURO_LOADING', {subject: 'update_feedback', loading: true});\n\n        axios.put(`/v1/company/${rootGetters['company/company'].uuid}/connections/turo/feedback/${feedback.uuid}`, feedback)\n            .then(response => {\n                commit('SET_TURO_FEEDBACK', get(response, 'data.feedback', []));\n                EventBus.$emit('SystemMessage', {\n                    type: 'success',\n                    message: 'Auto feedback updated successfully',\n                });\n            }).catch(() => {\n        }).finally(() => {\n            commit('SET_TURO_LOADING', {subject: 'update_feedback', loading: false});\n        });\n    },\n\n    sendFeedback({state, commit, rootGetters}, feedback) {\n        commit('SET_TURO_LOADING', {subject: 'update_feedback', loading: true});\n\n        axios.post(`/v1/company/${rootGetters['company/company'].uuid}/connections/turo/feedback/${feedback.uuid}/send`, feedback)\n            .then(response => {\n                EventBus.$emit('turo-auto-feedback-send-success');\n                commit('SET_TURO_FEEDBACK', get(response, 'data.feedback', []));\n            }).catch(e => {\n            EventBus.$emit('turo-auto-feedback-send-error');\n            push.error({\n                message: e?.response?.data?.message || 'There was an error',\n            });\n            commit('SET_TURO_FEEDBACK', get(e, 'response.data.feedback', []));\n        }).finally(() => {\n            commit('SET_TURO_LOADING', {subject: 'update_feedback', loading: false});\n        });\n    },\n\n    deleteFeedback({state, commit, rootGetters}, feedback) {\n        commit('SET_TURO_LOADING', {subject: 'delete_feedback', loading: true});\n\n        axios.delete(`/v1/company/${rootGetters['company/company'].uuid}/connections/turo/feedback/${feedback.uuid}`)\n            .then(response => {\n                commit('SET_TURO_FEEDBACK', get(response, 'data.feedback', []));\n                EventBus.$emit('turo-auto-feedback-deleted-success');\n                EventBus.$emit('SystemMessage', {\n                    type: 'success',\n                    message: 'Auto feedback deleted successfully',\n                });\n            }).catch(() => {\n        }).finally(() => {\n            commit('SET_TURO_LOADING', {subject: 'delete_feedback', loading: false});\n        });\n    },\n\n    getFeedbackSettings({commit}) {\n        commit('SET_TURO_LOADING', {subject: 'active', loading: true});\n\n        axios.get('/v1/connections/turo/feedback-settings')\n            .then(response => {\n                commit('SET_TURO_CONNECTIONS', get(response, 'data.turoAccounts', []));\n            }).catch(() => {\n        }).finally(() => {\n            commit('SET_TURO_LOADING', {subject: 'active', loading: false});\n        });\n    },\n\n    updateFeedbackSettings({state, commit}, settings) {\n        commit('SET_TURO_LOADING', {subject: 'active', loading: true});\n\n        axios.put(`/v1/connections/turo/feedback-settings/${settings.uuid}`, settings)\n            .then(response => {\n                commit('SET_TURO_FEEDBACK', get(response, 'data.feedback', []));\n                commit('company/SET_FEEDBACK_REVIEWS', get(response, 'data.feedbackReviews'), {root: true});\n                EventBus.$emit('SystemMessage', {\n                    type: 'success',\n                    message: 'Turo updated successfully',\n                });\n            }).catch(() => {\n        }).finally(() => {\n            commit('SET_TURO_LOADING', {subject: 'active', loading: false});\n        });\n    },\n\n    /**\n     * Toggle a Turo connections active state.\n     */\n    toggleTuroActive({state: TuroState, commit}, turo: TuroConnection) {\n        commit('SET_TURO_LOADING', {subject: 'active', loading: true});\n\n        const connIndex = state.connections.findIndex(c => turo.uuid === c.uuid);\n\n        if (connIndex !== -1) {\n            state.connections[connIndex].loading = true;\n        }\n\n        axios.put(`/v1/connections/turo/${turo.uuid}/toggle`)\n            .then((response) => {\n                EventBus.$emit('toggle-turo-active-success', get(response, 'data.turo', []));\n\n                if (turo.active) {\n                    EventBus.$emit('toggle-turo-connection-success', turo);\n                }\n                if (connIndex !== -1) {\n                    state.connections[connIndex].connected = turo.active;\n                }\n            }).catch(e => {\n            push.error({\n                message: e?.response?.data?.message || 'There was an error',\n            });\n        }).finally(() => {\n            commit('SET_TURO_LOADING', {subject: 'active', loading: false});\n            if (connIndex !== -1) {\n                state.connections[connIndex].loading = false;\n            }\n        });\n    },\n\n\n    /**\n     * Delete a Turo connection\n     *\n     * @param commit\n     * @param {Object} turo\n     */\n    removeTuroConnection({commit}, turo) {\n        commit('SET_TURO_LOADING', {subject: 'removeTuro', loading: true});\n\n        axios.delete(`/v1/connections/turo/${turo.uuid}`)\n            .then(response => {\n                EventBus.$emit('SystemMessage', {\n                    type: 'success',\n                    message: 'Turo connection removed successfully',\n                });\n                EventBus.$emit('remove-turo-connection-success');\n                commit('SET_TURO_CONNECTIONS', get(response, 'data.connections.turo', []));\n            }).catch(e => {\n            console.dir(e);\n            if (e.response.status === 400 || e.response.status === 403) {\n                EventBus.$emit('create-turo-connection-failed-400', e.response.data.message);\n            }\n        }).finally(() => {\n            commit('SET_TURO_LOADING', {subject: 'removeTuro', loading: false});\n        });\n    },\n\n    /**\n     * Fetch Turo /me\n     */\n    fetchTuroMe({state: TuroState, commit}, turo_uuid: string) {\n        commit('SET_TURO_LOADING', {subject: 'login', loading: true});\n        commit('SET_TURO_LOADING', {subject: 'listings', loading: true});\n        commit('SET_TURO_LOADING', {subject: 'me', loading: true});\n\n        let connIndex = state.connections.findIndex(c => turo_uuid === c.uuid);\n\n        if (connIndex === -1) {\n            connIndex = state.connections.push({\n                turo_uuid,\n                loading: true,\n                connected: true,\n                active: true,\n                email: '',\n                provider: 'turo',\n            });\n            connIndex--;\n        }\n\n        state.connections[connIndex].loading = true;\n\n        axios.get(`/v1/connections/turo/${turo_uuid}/me?updateVehicles=1`)\n            .then(response => {\n                commit('SET_VEHICLES', response.data.me.vehicles);\n                state.connections[connIndex].connected = true;\n                state.connections[connIndex].me = get(response, 'data.me');\n                EventBus.$emit('turo-me-success', {\n                    me: response.data.me,\n                    turo_uuid,\n                });\n            }).catch(e => {\n            if (e.response.status === 400 || e.response.status === 403) {\n                EventBus.$emit('create-turo-connection-failed-400', e.response.data.message);\n            } else if (e.response.status === 428) {\n                EventBus.$emit('create-turo-connection-failed-428', {\n                    message: e.response.data.message,\n                    turo_uuid,\n                });\n            } else if (e.response.status === 422) {\n                EventBus.$emit('create-turo-connection-failed-422', {\n                    message: get(e.response, 'data.error'),\n                    turo_uuid,\n                });\n            }\n            state.connections[connIndex].connected = false;\n            state.connections[connIndex].me = null;\n            state.connections[connIndex].loading = false;\n        }).finally(() => {\n            state.connections[connIndex].loading = false;\n            commit('SET_TURO_LOADING', {subject: 'login', loading: false});\n            commit('SET_TURO_LOADING', {subject: 'listings', loading: false});\n            commit('SET_TURO_LOADING', {subject: 'me', loading: false});\n        });\n    },\n\n    /**\n     * Fetch Turo Vehicles\n     *\n     * @param state\n     * @param commit\n     * @param {Array} turo_uuids The Turo uuids to include\n     */\n    fetchTuroVehicles({state, commit}, turo_uuids) {\n        commit('SET_TURO_LOADING', {subject: 'vehicles', loading: true});\n\n        const ids = uniq(turo_uuids).join();\n\n        axios.get(`/v1/connections/turo/fetch-vehicles?turo_ids=${ids}`)\n            .then(response => {\n                commit('SET_ALL_TURO_VEHICLES', get(response, 'data.vehicles'));\n                EventBus.$emit('turo-fetch-vehicles-success', turo_uuids);\n            }).catch(e => {\n            console.dir(e);\n        }).finally(() => {\n            commit('SET_TURO_LOADING', {subject: 'vehicles', loading: false});\n        });\n    },\n\n    getTuroVehicles({state, commit}, turo_uuids) {\n        commit('SET_TURO_LOADING', {subject: 'vehicles', loading: true});\n\n        const ids = uniq(turo_uuids).join();\n\n        axios.get(`/v1/connections/turo/vehicles?turo_ids=${ids}`)\n            .then(response => {\n                commit('SET_ALL_TURO_VEHICLES', get(response, 'data.vehicles'));\n                EventBus.$emit('turo-vehicles-success', turo_uuids);\n            }).catch(e => {\n            console.dir(e);\n        }).finally(() => {\n            commit('SET_TURO_LOADING', {subject: 'vehicles', loading: false});\n        });\n    },\n\n    /**\n     * Match a Turo vehicle with a Fleetwire listing\n     *\n     * @param commit\n     * @param {Object} data\n     */\n    matchVehicleWithFleetwireListing({commit}, data) {\n        commit('SET_TURO_LOADING', {subject: 'match_with_listing', loading: true});\n\n        axios.post('/v1/connections/turo/match-with-listing', data)\n            .then(() => {\n                EventBus.$emit('match-turo-vehicle-with-listing-success');\n            }).catch(e => {\n            console.dir(e);\n            EventBus.$emit('match-turo-vehicle-with-listing-error', get(e, 'response'));\n        }).finally(() => {\n            commit('SET_TURO_LOADING', {subject: 'match_with_listing', loading: false});\n        });\n    },\n\n\n    fetchAllTuroVehicles({commit}) {\n        commit('SET_TURO_LOADING', {subject: 'login', loading: true});\n        commit('SET_TURO_LOADING', {subject: 'listings', loading: true});\n\n        axios.get('/v1/connections/turo/all/vehicles')\n            .then(response => {\n                commit('SET_TURO_ALL_VEHICLES', response.data.vehicles);\n            }).catch(e => {\n            console.dir(e);\n        }).finally(() => {\n            commit('SET_TURO_LOADING', {subject: 'login', loading: false});\n            commit('SET_TURO_LOADING', {subject: 'listings', loading: false});\n        });\n    },\n\n    /**\n     * Adjust a vehicle unavailability\n     *\n     * @param state\n     * @param commit\n     * @param {Object} accounts\n     */\n    fetchMyTaxEarnings({state, commit}, accounts) {\n        commit('SET_TURO_LOADING', {subject: 'earnings', loading: true});\n\n        const qString = accounts.join(',');\n        axios.get(`/v1/connections/turo/tax-earnings?turo_uuids=${qString}`)\n            .then(response => {\n                commit('SET_TURO_EARNINGS', get(response, 'data.earnings', []));\n            }).catch(e => {\n            console.dir(e);\n            if (e.response.status === 400 || e.response.status === 403) {\n                EventBus.$emit('create-turo-connection-failed-400', e.response.data.message);\n            }\n        }).finally(() => {\n            commit('SET_TURO_LOADING', {subject: 'earnings', loading: false});\n        });\n    },\n\n\n    /**\n     * Re-fetch Turo earnings\n     *\n     * @param state\n     * @param commit\n     * @param {String} turo_uuid\n     */\n    refreshAccountEarnings({state, commit}, turo_uuid) {\n        commit('SET_TURO_LOADING', {subject: 'earnings', loading: true});\n\n        axios.get(`/v1/connections/turo/${turo_uuid}/tax-earnings`)\n            .then(() => {\n                EventBus.$emit('refresh-turo-earnings-success');\n            }).catch(e => {\n            console.dir(e);\n            if (e.response.status === 400 || e.response.status === 403) {\n                EventBus.$emit('create-turo-connection-failed-400', e.response.data.message);\n            }\n        }).finally(() => {\n            commit('SET_TURO_LOADING', {subject: 'earnings', loading: false});\n        });\n    },\n\n    checkPulse({state, commit, rootGetters}, turo_uuid) {\n        commit('SET_TURO_LOADING', {subject: 'login', loading: true});\n        axios.get(`/v1/company/${rootGetters['company/company'].uuid}/connections/turo/${turo_uuid}/me`)\n            .catch(e => {\n                console.dir(e);\n                if (e.response.status === 400 || e.response.status === 403) {\n                    EventBus.$emit('create-turo-connection-failed-400', e.response.data.message);\n                }\n            }).finally(() => {\n            commit('SET_TURO_LOADING', {subject: 'login', loading: false});\n        });\n    },\n\n    fetchTuroGoTrip({state, commit, rootGetters}, {turo_uuid, vehicle_id}) {\n        commit('SET_TURO_LOADING', {subject: 'trips', loading: true});\n        axios.get(`/v1/company/${rootGetters['company/company'].uuid}/connections/turo/${turo_uuid}/${vehicle_id}/turo-go`)\n            .then(response => {\n                commit('SET_TRIP_TURO_GO', get(response, 'data.turoGo'));\n            }).catch(e => {\n            console.dir(e);\n        }).finally(() => {\n            commit('SET_TURO_LOADING', {subject: 'trips', loading: false});\n        });\n    },\n\n    /**\n     * Fetch a vehicle unavailability on Turo\n     *\n     * @param commit\n     * @param {String} turo_uuid\n     * @param {String} vehicle_uuid\n     */\n    fetchVehicleUnavailability({commit}, {turo_uuid, vehicle_uuid}) {\n        commit('SET_TURO_LOADING', {subject: 'trips', loading: true});\n\n        axios.get(`/v1/connections/turo/${turo_uuid}/vehicle/${vehicle_uuid}/unavailability`)\n            .then(() => {\n                // commit('SET_TRIPS', get(response, 'data.trips'));\n                // commit('listing/SET_CURRENT_LISTING_BOOKINGS', get(response, 'data.bookings', []), { root: true });\n            }).catch(e => {\n            if (e.response.status === 400 || e.response.status === 403) {\n                EventBus.$emit('create-turo-connection-failed-400', e.response.data.message);\n            }\n        }).finally(() => {\n            commit('SET_TURO_LOADING', {subject: 'trips', loading: false});\n        });\n    },\n\n    /**\n     * Create a vehicle unavailability on Turo\n     *\n     * @param state\n     * @param commit\n     * @param {Object} data\n     */\n    createVehicleUnavailability({state, commit}, data) {\n        commit('SET_TURO_LOADING', {subject: 'create_unavailability', loading: true});\n\n        axios.post(`/v1/connections/turo/${data.turo_uuid}/vehicle/${data.vehicle_uuid}/unavailability`, data)\n            .then(response => {\n                EventBus.$emit('create-turo-unavailability', response.data);\n                // commit('booking/SET_CURRENT_WORKING_BOOKING', get(response, 'data.booking'), { root: true });\n                EventBus.$emit('SystemMessage', {\n                    type: 'success',\n                    message: 'Turo vehicle unavailability period created successfully',\n                });\n            }).catch(e => {\n            console.dir(e);\n            if (e.response.status === 400 || e.response.status === 403) {\n                EventBus.$emit('create-turo-unavailability-failed-400', e.response.data);\n            }\n            if (e.response.status === 422) {\n                EventBus.$emit('create-turo-unavailability-failed-422', e.response.data);\n            }\n        }).finally(() => {\n            commit('SET_TURO_LOADING', {subject: 'create_unavailability', loading: false});\n        });\n    },\n\n    removeVehicleUnavailability({state, commit, rootGetters}, data) {\n        commit('SET_TURO_LOADING', {subject: 'remove_unavailability', loading: true});\n\n        axios.delete(`/v1/company/${rootGetters['company/company'].uuid}/connections/turo/${data.turo_uuid}/vehicle/${data.vehicle_uuid}/unavailability?reservationId=${data.reservationId}`)\n            .then(() => {\n                EventBus.$emit('remove-turo-unavailability', data.reservationId);\n                EventBus.$emit('SystemMessage', {\n                    type: 'success',\n                    message: 'Turo vehicle unavailability period removed successfully',\n                });\n            }).catch(e => {\n            if (e.response.status === 400 || e.response.status === 403) {\n                EventBus.$emit('remove-turo-unavailability-failed-400', e.response.data);\n            }\n        }).finally(() => {\n            commit('SET_TURO_LOADING', {subject: 'remove_unavailability', loading: false});\n        });\n    },\n\n    /**\n     * Adjust a vehicle unavailability\n     *\n     * @param state\n     * @param commit\n     * @param {Object} data\n     */\n    removeVehicleUnavailabilityAndAdjust({state, commit}, data) {\n        commit('SET_TURO_LOADING', {subject: 'remove_unavailability', loading: true});\n\n        axios.post(`/v1/company/${StorageService.getCompanyUuid()}/connections/turo/${data.turo_uuid}/vehicle/${data.vehicle_uuid}/unavailability/adjust`, data)\n            .then(response => {\n                commit('booking/SET_CURRENT_WORKING_BOOKING', response.data.booking, {root: true});\n                EventBus.$emit('remove-turo-unavailability-adjust-success', data);\n                EventBus.$emit('SystemMessage', {\n                    type: 'success',\n                    message: 'Turo vehicle unavailability period removed successfully',\n                });\n            }).catch(e => {\n            if (e.response.status === 400 || e.response.status === 403) {\n                EventBus.$emit('remove-turo-unavailability-failed-400', e.response.data);\n            }\n        }).finally(() => {\n            commit('SET_TURO_LOADING', {subject: 'remove_unavailability', loading: false});\n        });\n    },\n\n    fetchTripHistory({state, commit, rootGetters}, turo_uuid) {\n        commit('SET_TURO_LOADING', {subject: 'trips', loading: true});\n        axios.get(`/v1/connections/turo/${turo_uuid}/trips/history`)\n            .then(response => {\n                commit('SET_TRIP_HISTORY', get(response, 'data.history', []));\n            }).catch(e => {\n            if (e.response.status === 400 || e.response.status === 403) {\n                EventBus.$emit('fetch-turo-trip-single-failed', e.response.data.message);\n            }\n        }).finally(() => {\n            commit('SET_TURO_LOADING', {subject: 'trips', loading: false});\n            state.init = true;\n        });\n    },\n\n    fetchPendingRequests({state, commit, rootGetters}, turo_uuid) {\n        commit('SET_TURO_LOADING', {subject: 'trips', loading: true});\n        axios.get(`/v1/connections/turo/${turo_uuid}/trips/pending-requests`)\n            .then(response => {\n                commit('SET_TRIP_PENDING_REQUESTS', get(response, 'data.requests', []));\n            }).catch(e => {\n            if (e.response.status === 400 || e.response.status === 403) {\n                EventBus.$emit('fetch-turo-trip-single-failed', e.response.data.message);\n            }\n        }).finally(() => {\n            commit('SET_TURO_LOADING', {subject: 'trips', loading: false});\n            state.init = true;\n        });\n    },\n\n    fetchActivityFeed({state, commit, rootGetters}, turo_uuid) {\n        commit('SET_TURO_LOADING', {subject: 'trips', loading: true});\n\n        axios.get(`/v1/connections/turo/${turo_uuid}/trips/activity-feed`)\n            .then(response => {\n                commit('SET_ACTIVITY_FEED', get(response, 'data.activity', []));\n            }).catch(e => {\n            if (e.response.status === 400 || e.response.status === 403) {\n                EventBus.$emit('fetch-turo-trip-single-failed', e.response.data.message);\n            }\n        }).finally(() => {\n            commit('SET_TURO_LOADING', {subject: 'trips', loading: false});\n            state.init = true;\n        });\n    },\n\n    fetchTuroTripSingle({state, commit}, data) {\n        commit('SET_TURO_LOADING', {subject: 'trips', loading: true});\n\n        axios.get(`/v1/connections/turo-trips/${data.tripId}?turoId=${data.turoId}`)\n            .then(response => {\n                commit('SET_TRIP_SINGLE', get(response, 'data.trip'));\n                EventBus.$emit('turo-fetch-sing-trip-success', get(response, 'data.trip'));\n            }).catch(e => {\n            if (e.response.status === 400 || e.response.status === 403) {\n                EventBus.$emit('fetch-turo-trip-single-failed', e.response.data.message);\n            }\n        }).finally(() => {\n            commit('SET_TURO_LOADING', {subject: 'trips', loading: false});\n            state.init = true;\n        });\n    },\n\n    /**\n     * Fetch a Turo trip messages\n     *\n     * @param commit\n     * @param {Object} data\n     */\n    fetchTuroTripSingleMessages({commit}, data) {\n        commit('SET_TURO_LOADING', {subject: 'messages', loading: true});\n\n        axios.get(`/v1/connections/turo-trips/${data.tripId}/messages?account_id=${data.accountId}`)\n            .then(response => {\n                commit('SET_TRIP_SINGLE_MESSAGES', response.data.messages);\n            }).catch(e => {\n            if (e.response.status === 400 || e.response.status === 403) {\n                EventBus.$emit('create-turo-connection-failed-400', e.response.data.message);\n            }\n        }).finally(() => {\n            commit('SET_TURO_LOADING', {subject: 'messages', loading: false});\n        });\n    },\n\n    getStoredTuroTripSingleMessages({commit}, tripId) {\n        commit('SET_TURO_LOADING', {subject: 'messages', loading: true});\n\n        axios.get(`/v1/connections/turo-trips/${tripId}/stored-messages`)\n            .then(response => {\n                commit('SET_TRIP_SINGLE_MESSAGES_STORED', response.data.messages);\n            }).catch(e => {\n            console.dir(e);\n            if (e.response.status === 400 || e.response.status === 403) {\n                EventBus.$emit('create-turo-connection-failed-400', e.response.data.message);\n            }\n        }).finally(() => {\n            commit('SET_TURO_LOADING', {subject: 'messages', loading: false});\n        });\n    },\n\n\n    /**\n     * Fetch a Turo trips images\n     *\n     * @param commit\n     * @param {String} tripId\n     */\n    fetchTuroTripSingleImages({commit}, tripId) {\n        commit('SET_TURO_LOADING', {subject: 'images', loading: true});\n\n        axios.get(`/v1/connections/turo-trips/${tripId}/images`)\n            .then(response => {\n                commit('SET_TRIP_SINGLE_IMAGES', get(response, 'data.images'));\n            }).catch(e => {\n            console.dir(e);\n            if (e.response.status === 400 || e.response.status === 403) {\n                EventBus.$emit('fetch-turo-images-failed-400', e.response.data.message);\n            }\n        }).finally(() => {\n            commit('SET_TURO_LOADING', {subject: 'images', loading: false});\n        });\n    },\n\n    /**\n     * Get Turo messages\n     *\n     * @param state\n     * @param commit\n     * @param {Object} data\n     */\n    getTuroConversations({state, commit}, data) {\n        commit('SET_TURO_LOADING', {subject: 'messages', loading: true});\n\n        if (!get(state.allTuroMessagesCurrentPage, data.turoId)) {\n            state.allTuroMessagesCurrentPage = {\n                ...state.allTuroMessagesCurrentPage,\n                [data.turoId]: {page: 0, totalPages: 1}\n            };\n        }\n        state.allTuroMessagesCurrentPage[data.turoId].page += 1;\n\n        const qString = `page=${state.allTuroMessagesCurrentPage[data.turoId].page}`;\n\n        axios.get(`/v1/connections/turo/${data.turoUuid}/messages?${qString}`)\n            .then(response => {\n                commit('SET_ALL_TURO_MESSAGES', get(response, 'data.conversations.list', []));\n                commit('SET_ALL_TURO_MESSAGES_CURRENT_PAGINATE', get(response, 'data.conversations.numPages', 1));\n                state.allTuroMessagesCurrentPage[data.turoId].totalPages = get(response, 'data.conversations.numPages', 1);\n                commit('SET_ALL_TURO_MESSAGES_TOTAL_PAGES', get(response, 'data.conversations.numPages', 1));\n            }).catch(e => {\n            console.dir(e);\n        }).finally(() => {\n            commit('SET_TURO_LOADING', {subject: 'messages', loading: false});\n            commit('SET_TURO_MESSAGE_SENDING', false);\n        });\n    },\n\n    /**\n     * Send a message to a renter\n     *\n     * @param state\n     * @param commit\n     * @param {String} tripId\n     * @param {String} message\n     */\n    sendTuroMessage({state, commit}, {tripId, message}) {\n        commit('SET_TURO_LOADING', {subject: 'trips', loading: true});\n        commit('SET_TURO_MESSAGE_SENDING', true);\n\n        axios.post(`/v1/company/${StorageService.getCompanyUuid()}/connections/turo-trips/${tripId}/message`, {message})\n            .then(response => {\n                commit('SET_TRIP_SINGLE_MESSAGES', response.data.messages);\n                EventBus.$emit('send-turo-message-success');\n            }).catch(e => {\n            console.dir(e);\n            if (e.response.status === 400 || e.response.status === 403) {\n                EventBus.$emit('create-turo-connection-failed-400', e.response.data.message);\n            }\n        }).finally(() => {\n            commit('SET_TURO_LOADING', {subject: 'trips', loading: false});\n            commit('SET_TURO_MESSAGE_SENDING', false);\n        });\n    },\n\n    fetchTuroEmails({commit}, paginate: {\n        page?: number,\n        itemsPerPage?: number,\n        sortBy?: string,\n        sortDesc?: boolean\n    } = {}) {\n        commit('SET_TURO_LOADING', {subject: 'emails', loading: true});\n\n        if (paginate.page === undefined) {\n            paginate.page = 1;\n        }\n\n        if (paginate.itemsPerPage === undefined) {\n            paginate.itemsPerPage = 10;\n        }\n        if (paginate.sortBy === undefined) {\n            paginate.sortBy = 'created_at';\n        }\n        if (paginate.sortDesc === undefined) {\n            paginate.sortDesc = true;\n        }\n\n        axios.get(`/v1/connections/turo/emails?page=${paginate.page}&perPage=${paginate.itemsPerPage}&sortBy=${paginate.sortBy}&sortDesc=${paginate.sortDesc}`)\n            .then(response => {\n                const emails = response.data.data;\n                const pagination = response.data.meta;\n\n                commit('SET_TURO_EMAILS', emails);\n                commit('SET_TURO_EMAILS_PAGINATION', pagination);\n            }).catch(e => {\n            console.dir(e);\n            if (e.response.status === 400 || e.response.status === 403) {\n                EventBus.$emit('create-turo-connection-failed-400', e.response.data.message);\n            }\n        }).finally(() => {\n            commit('SET_TURO_LOADING', {subject: 'emails', loading: false});\n        });\n    },\n\n    submitReimbursement({state, commit, rootGetters}, data) {\n        commit('SET_TURO_LOADING', {subject: 'submitReimbursement', loading: true});\n        axios.post(`/v1/company/${rootGetters['company/company'].uuid}/connections/turo/${data.turo_uuid}/submit-reimbursement`, data)\n            .then(() => {\n                EventBus.$emit('SystemMessage', {\n                    type: 'success',\n                    message: 'Submit reimbursement request successfully',\n                });\n                EventBus.$emit('submit-turo-reimbursement-success');\n            }).catch(e => {\n            push.error({\n                message: e?.response?.data?.message || 'There was an error',\n            });\n        }).finally(() => {\n            commit('SET_TURO_LOADING', {subject: 'submitReimbursement', loading: false});\n        });\n    },\n\n    getTuroChangeRequestSettings({commit}) {\n        commit('SET_TURO_LOADING', {subject: 'submitReimbursement', loading: true});\n\n        axios.get('/v1/connections/turo/change-request-settings')\n            .then(response => {\n                commit('SET_TURO_CHANGE_REQUEST_SETTINGS', get(response, 'data.changeRequestSettings', []));\n            }).catch(e => {\n            push.error({\n                message: e?.response?.data?.message || 'There was an error',\n            });\n        }).finally(() => {\n            commit('SET_TURO_LOADING', {subject: 'submitReimbursement', loading: false});\n        });\n    },\n\n    saveTuroChangeRequestSettings({commit}, data) {\n        commit('SET_TURO_LOADING', {subject: 'saving_change_request', loading: true});\n\n        axios.post('/v1/connections/turo/change-request-settings', data)\n            .then(response => {\n                commit('SET_TURO_CHANGE_REQUEST_SETTINGS', get(response, 'data.changeRequestSettings', []));\n                EventBus.$emit('SystemMessage', {\n                    type: 'success',\n                    message: 'Change request settings saved successfully',\n                });\n                EventBus.$emit('submit-turo-reimbursement-success');\n            }).catch(e => {\n            push.error({\n                message: e?.response?.data?.message || 'There was an error',\n            });\n        }).finally(() => {\n            commit('SET_TURO_LOADING', {subject: 'saving_change_request', loading: false});\n        });\n    },\n\n    reimbursementDetails({commit, rootGetters}, data) {\n        commit('SET_TURO_LOADING', {subject: 'reimbursementDetails', loading: true});\n        axios.post(`/v1/connections/turo/${data.turo_uuid}/reimbursement-details`, data)\n            .then(response => {\n                commit('SET_TURO_REIMBURSEMENT_DETAILS', response.data.reimbursementDetails);\n                EventBus.$emit('turo-reimbursement-details-success');\n            }).catch(e => {\n            push.error({\n                message: e?.response?.data?.message || 'There was an error',\n            });\n        }).finally(() => {\n            commit('SET_TURO_LOADING', {subject: 'reimbursementDetails', loading: false});\n        });\n    },\n\n    withdrawReimbursement({state, commit, rootGetters}, data) {\n        commit('SET_TURO_LOADING', {subject: 'submitReimbursementWithdraw', loading: true});\n        axios.post(`/v1/company/${rootGetters['company/company'].uuid}/connections/turo/${data.turo_uuid}/withdraw-reimbursement`, data)\n            .then(() => {\n                EventBus.$emit('SystemMessage', {\n                    type: 'success',\n                    message: 'Submit reimbursement request successfully',\n                });\n                EventBus.$emit('submit-turo-withdraw-success');\n            }).catch(e => {\n            push.error({\n                message: e?.response?.data?.message || 'There was an error',\n            });\n        }).finally(() => {\n            commit('SET_TURO_LOADING', {subject: 'submitReimbursementWithdraw', loading: false});\n        });\n    },\n};\n\nexport default {\n    namespaced: true,\n    state,\n    mutations,\n    actions,\n    getters,\n};\n","import axios from 'axios';\nimport {filter, findIndex, flatMap, get, map, slice} from 'lodash';\nimport {EventBus} from '@/plugins/eventBus';\nimport * as types from '../mutation-types';\n\nexport interface TuroPricingState {\n    init: boolean,\n    loading: Record<string, boolean>,\n    allVehicles: any[],\n    listedVehicles: any[],\n    snoozedVehicles: any[],\n    vehiclePricing: any[],\n    outlookDays: number,\n\n}\n\nconst state: TuroPricingState = {\n    init: false,\n\n    loading: {\n        turo_me: false,\n        updateVehiclesDailyPrice: false,\n        fetchVehicleDailyPrice: false,\n    },\n    outlookDays: 28,\n    allVehicles: [],\n    listedVehicles: [],\n    snoozedVehicles: [],\n    vehiclePricing: [],\n};\n\nconst getters = {\n    turoInit: (state: TuroPricingState) => state.init,\n    loading: (state: TuroPricingState) => state.loading,\n    allVehicles: (state: TuroPricingState) => state.allVehicles,\n    listedVehicles: (state: TuroPricingState) => state.listedVehicles,\n    vehiclePricing: (state: TuroPricingState) => state.vehiclePricing,\n    outlookDays: (state: TuroPricingState) => state.outlookDays,\n};\n\nconst mutations = {\n    [types.SET_INIT](state: TuroPricingState, init) {\n        state.init = init;\n    },\n    [types.SET_TURO_PRICING_LOADING](state: TuroPricingState, loading) {\n        state.loading[loading.subject] = loading.loading;\n    },\n    [types.SET_TURO_PRICING_VEHICLES](state: TuroPricingState, vehicles) {\n        state.allVehicles = vehicles;\n\n        const listed = filter(vehicles, (v) => get(v, 'status.status.value') === 'LISTED');\n\n        const prices = [];\n        for (let i = 0; i < state.outlookDays; i++) {\n            prices.push({\n                date: null,\n                price: null,\n                selected: false,\n                vid: null,\n            });\n        }\n        state.listedVehicles = map(listed, (l) => ({\n            id: l.id,\n            image: get(l, 'image.originalImageUrl'),\n            name: l.name,\n            status: get(l, 'status.status.value'),\n            vin: get(l, 'vin'),\n            year: get(l, 'year'),\n            make: get(l, 'make'),\n            model: get(l, 'model'),\n            prices,\n            pricesSet: false,\n            rowSelected: false,\n        }));\n\n        state.snoozedVehicles = filter(vehicles, (v) => get(v, 'status.status.value') === 'SNOOZED');\n    },\n    [types.SET_TURO_VEHICLE_DAILY_PRICING](state: TuroPricingState, data) {\n        const vehicleId = get(data, 'data.vehicleId');\n        let pricing = get(data, 'pricing');\n\n        const vehicleIndex = findIndex(state.listedVehicles, (v) => v.id.toString() === vehicleId.toString());\n\n\n        pricing = slice(pricing, 0, state.outlookDays);\n\n        // noinspection JSUnusedLocalSymbols\n        pricing = flatMap(pricing, (p, index) => ({\n            price: p.price,\n            selected: false,\n            vid: vehicleId,\n            date: p.date,\n        }));\n\n        if (vehicleIndex >= 0) {\n            state.listedVehicles[vehicleIndex].prices = pricing;\n        }\n\n        state.vehiclePricing.push({id: vehicleId, prices: pricing});\n    },\n};\n\nconst actions = {\n\n    fetchTuroMe({commit}, turo_uuid) {\n        commit('SET_TURO_PRICING_LOADING', {subject: 'turo_me', loading: true});\n\n        axios.get(`/v1/connections/turo/${turo_uuid}/me`)\n            .then((response) => {\n                commit('SET_TURO_PRICING_VEHICLES', get(response, 'data.me.vehicles'));\n\n                EventBus.$emit('fetch-turo-me-success', response.data.me.vehicles);\n            }).catch((e) => {\n            if (e.response.status === 400 || e.response.status === 403) {\n                EventBus.$emit('fetch-turo-connection-failed-400', e.response.data.message);\n            }\n\n            if (e.response.status === 428) {\n                EventBus.$emit('fetch-turo-connection-failed-428', e.response.data.message);\n            }\n        }).finally(() => {\n            commit('SET_TURO_PRICING_LOADING', {subject: 'turo_me', loading: false});\n        });\n    },\n\n    fetchVehicleDailyPrice({commit, rootGetters}, data) {\n        commit('SET_TURO_PRICING_LOADING', {subject: 'fetchVehicleDailyPrice', loading: true});\n\n        const query = `?start=${data.start}&end=${data.end}&vehicleId=${data.vehicleId}`;\n        axios.get(`/v1/company/${rootGetters['company/company'].uuid}/connections/turo/${data.turo_uuid}/vehicle/${data.vehicleId}/daily_price${query}`)\n            .then((response) => {\n                commit('SET_TURO_VEHICLE_DAILY_PRICING', get(response, 'data'));\n                EventBus.$emit('fetch-turo-vehicle-daily-pricing-success', get(response, 'data'));\n            }).catch((e) => {\n            console.dir(e);\n            if (e.response.status === 429) {\n                EventBus.$emit('turo-too-many-requests-429', data);\n            }\n        }).finally(() => {\n            commit('SET_TURO_PRICING_LOADING', {subject: 'fetchVehicleDailyPrice', loading: false});\n        });\n    },\n\n    updateVehiclesDailyPrice({commit, rootGetters}, data) {\n        commit('SET_TURO_PRICING_LOADING', {subject: 'updateVehiclesDailyPrice', loading: true});\n\n        axios.post(`/v1/company/${rootGetters['company/company'].uuid}/connections/turo/${data.turo_uuid}/daily_price`, data)\n            .then((response) => {\n                EventBus.$emit('update-turo-vehicle-daily-pricing-success', get(response, 'data'));\n            }).catch((e) => {\n            console.dir(e);\n            if (e.response.status === 400 || e.response.status === 403) {\n                EventBus.$emit('create-turo-connection-failed-400', e.response.data.message);\n            }\n        }).finally(() => {\n            commit('SET_TURO_PRICING_LOADING', {subject: 'updateVehiclesDailyPrice', loading: false});\n        });\n    },\n\n};\n\nexport default {\n    namespaced: true,\n    state,\n    mutations,\n    actions,\n    getters,\n};\n","import axios from 'axios';\nimport { get } from 'lodash';\nimport * as types from '../mutation-types';\n\nexport interface TuroResearchState {\n    init: boolean;\n    loading: Record<string, boolean>;\n    locations: any[];\n    makes: any[];\n    researchList: any[];\n}\n\nconst state: TuroResearchState = {\n  init: false,\n\n  loading: {\n    locations: false,\n    makes: false,\n    research: false,\n  },\n  locations: [],\n  makes: [],\n  researchList: [],\n};\n\nconst getters = {\n  turoInit: (state) => state.init,\n  loading: (state) => state.loading,\n  locations: (state) => state.locations,\n  makes: (state) => state.makes,\n  researchList: (state) => state.researchList,\n};\n\nconst mutations = {\n  [types.SET_INIT](state, init) {\n    state.init = init;\n  },\n  [types.SET_TURO_RESEARCH_LOADING](state, loading) {\n    state.loading[loading.subject] = loading.loading;\n  },\n  [types.SET_TURO_ALL_VEHICLE_MAKES](state, makes) {\n    state.makes = makes;\n  },\n  [types.SET_TURO_ALL_DELIVERY_LOCATIONS](state, locations) {\n    state.locations = locations;\n  },\n  [types.SET_TURO_RESEARCH_SEARCH_LIST](state, list) {\n    state.researchList = list;\n  },\n};\n\nconst actions = {\n\n  /**\n   * Fetch delivery locations\n   *\n   * @param commit\n   * @param rootGetters\n   */\n  fetchDeliveryLocations({ commit, rootGetters }) {\n    commit('SET_TURO_RESEARCH_LOADING', { subject: 'locations', loading: true });\n\n    axios.get(`/v1/company/${rootGetters['company/company'].uuid}/connections/turo/delivery-locations`)\n    .then((response) => {\n      commit('SET_TURO_ALL_DELIVERY_LOCATIONS', get(response, 'data.locations'));\n    }).catch((e) => {\n      console.dir(e);\n    }).finally(() => {\n      commit('SET_TURO_RESEARCH_LOADING', { subject: 'locations', loading: false });\n    });\n  },\n\n\n  /**\n   * Fetch makes\n   *\n   * @param commit\n   * @param rootGetters\n   */\n  fetchMakes({ commit, rootGetters }) {\n    commit('SET_TURO_RESEARCH_LOADING', { subject: 'makes', loading: true });\n\n    axios.get(`/v1/company/${rootGetters['company/company'].uuid}/connections/turo/fetch-makes`)\n    .then((response) => {\n      commit('SET_TURO_ALL_VEHICLE_MAKES', get(response, 'data.makes'));\n    }).catch((e) => {\n      console.dir(e);\n    }).finally(() => {\n      commit('SET_TURO_RESEARCH_LOADING', { subject: 'makes', loading: false });\n    });\n  },\n\n\n  /**\n   * Start Turo research\n   *\n   * @param state\n   * @param commit\n   * @param rootGetters\n   * @param {Object} data\n   */\n  startResearch({ state, commit, rootGetters }, data) {\n    commit('SET_TURO_RESEARCH_LOADING', { subject: 'research', loading: true });\n\n    axios.post(`/v1/company/${rootGetters['company/company'].uuid}/connections/turo/research`, data)\n    .then((response) => {\n      commit('SET_TURO_RESEARCH_SEARCH_LIST', get(response, 'data.list.list'));\n    }).catch((e) => {\n      console.dir(e);\n    }).finally(() => {\n      commit('SET_TURO_RESEARCH_LOADING', { subject: 'research', loading: false });\n    });\n  },\n\n};\n\nexport default {\n  namespaced: true,\n  state,\n  mutations,\n  actions,\n  getters,\n};\n","import axios from 'axios';\nimport Form from 'vform';\nimport {EventBus} from '@/plugins/eventBus';\nimport * as types from '../mutation-types';\nimport {push} from 'notivue';\n\nexport interface TwilioState {\n    loading: Record<string, boolean>;\n    form: Form;\n    verifyCode: string;\n    codeSentSuccess: boolean;\n    codeCheckSuccess: boolean;\n}\n\nconst state: TwilioState = {\n    loading: {\n        start_verify: false,\n        check_verify: false,\n    },\n\n    form: new Form(),\n    verifyCode: '',\n    codeSentSuccess: false,\n    codeCheckSuccess: false,\n};\n\nconst getters = {\n    loading: state => state.loading,\n    verifyCode: state => state.verifyCode,\n    codeSentSuccess: state => state.codeSentSuccess,\n    codeCheckSuccess: state => state.codeCheckSuccess,\n    checkBtnReady: state => state.verifyCode.length === 6,\n};\n\nconst mutations = {\n    [types.SET_TWILIO_LOADING](state, loading) {\n        state.loading[loading.subject] = loading.loading;\n    },\n    [types.SET_VERIFY_CODE](state, code) {\n        state.verifyCode = code;\n    },\n};\n\nconst actions = {\n\n    startTwilioVerify({commit, rootGetters}, stripe_id) {\n        commit('SET_TWILIO_LOADING', {subject: 'start_verify', loading: true});\n        axios.post(`/v1/company/${rootGetters['company/company'].uuid}/start-twilio-verify`, {\n            stripe_id,\n        })\n            .then(() => {\n                state.codeSentSuccess = true;\n\n                push.success({\n                    message: 'SMS code sent',\n                });\n            }).catch((e) => {\n            state.form.errors.set(e.response.data.errors);\n        }).finally(() => {\n            commit('SET_TWILIO_LOADING', {subject: 'start_verify', loading: false});\n        });\n    },\n\n    checkTwilioVerify({state, commit, rootGetters}, stripe_id) {\n        commit('SET_TWILIO_LOADING', {subject: 'check_verify', loading: true});\n        axios.post(`/v1/company/${rootGetters['company/company'].uuid}/check-twilio-verify`, {\n            stripe_id,\n            code: state.verifyCode,\n        })\n            .then(() => {\n                state.codeCheckSuccess = true;\n                EventBus.$emit('success-message-text', 'SMS Verified');\n            }).catch((e) => {\n            push.error({\n                message: 'Code incorrect',\n            });\n        }).finally(() => {\n            commit('SET_TWILIO_LOADING', {subject: 'check_verify', loading: false});\n        });\n    },\n\n};\n\nexport default {\n    namespaced: true,\n    state,\n    mutations,\n    actions,\n    getters,\n};\n","import axios from 'axios';\nimport {Form} from '@/plugins/FWForms/index';\nimport {EventBus} from '@/plugins/eventBus';\nimport {get} from 'lodash';\nimport * as types from '../mutation-types';\n\nexport interface TwistedRoadState {\n    init: boolean;\n    loading: Record<string, boolean>;\n    form: Form<any>;\n    connections: any[];\n    vehicles: any[];\n}\n\nconst state: TwistedRoadState = {\n    init: false,\n    loading: {\n        login: false,\n        vehicles: false,\n        matching: false,\n        disconnect: false,\n        toggleActive: false,\n    },\n    form: new Form(),\n    connections: [],\n    vehicles: [],\n};\n\nconst getters = {\n    init: state => state.init,\n    loading: state => state.loading,\n    form: state => state.form,\n    connections: state => state.connections,\n    vehicles: state => state.vehicles,\n};\n\nconst mutations = {\n    [types.SET_TWISTED_ROAD_LOADING](state, loading) {\n        state.loading[loading.subject] = loading.loading;\n    },\n    [types.SET_TWISTED_ROAD_CONNECTIONS](state, connections) {\n        state.connections = connections;\n    },\n    [types.SET_TWISTED_ROAD_VEHICLES](state, vehicles) {\n        state.vehicles = vehicles;\n    },\n};\n\nconst actions = {\n\n\n    /**\n     * Get tax categories\n     *\n     * @param commit\n     * @param {Object} payload\n     */\n    login({commit}, payload) {\n        commit('SET_TWISTED_ROAD_LOADING', {subject: 'login', loading: true});\n\n        axios.post('/v1/connections/twisted-road/login', payload)\n            .then(() => {\n                EventBus.$emit('create-twisted-road-success');\n            }).catch(() => {\n        }).finally(() => {\n            commit('SET_TWISTED_ROAD_LOADING', {subject: 'login', loading: false});\n        });\n    },\n\n    disconnect({commit}, account) {\n        commit('SET_TWISTED_ROAD_LOADING', {subject: 'disconnect', loading: true});\n\n        axios.delete(`/v1/connections/twisted-road/${account.uuid}`)\n            .then(() => {\n                EventBus.$emit('delete-twisted-road-success');\n            }).catch(() => {\n        }).finally(() => {\n            commit('SET_TWISTED_ROAD_LOADING', {subject: 'disconnect', loading: false});\n        });\n    },\n\n    toggleActive({commit}, account) {\n        commit('SET_TWISTED_ROAD_LOADING', {subject: 'toggleActive', loading: true});\n\n        axios.put(`/v1/connections/twisted-road/${account.uuid}/toggle-active`)\n            .then(() => {\n            }).catch(() => {\n        }).finally(() => {\n            commit('SET_TWISTED_ROAD_LOADING', {subject: 'toggleActive', loading: false});\n        });\n    },\n\n    fetchVehicles({commit}, payload) {\n        commit('SET_TWISTED_ROAD_LOADING', {subject: 'vehicles', loading: true});\n\n        axios.post('/v1/connections/twisted-road/vehicles', payload)\n            .then((response) => {\n                commit('SET_TWISTED_ROAD_VEHICLES', get(response, 'data.vehicles', []));\n            }).catch(() => {\n        }).finally(() => {\n            commit('SET_TWISTED_ROAD_LOADING', {subject: 'vehicles', loading: false});\n        });\n    },\n\n    /**\n     * Match TR Vehicles\n     *\n     * @param commit\n     * @param {Object} data\n     */\n    matchVehicle({commit}, data) {\n        commit('SET_TWISTED_ROAD_LOADING', {subject: 'vehicles', loading: true});\n\n        axios.post('/v1/connections/twisted-road/match-vehicle', data)\n            .then(() => {\n                EventBus.$emit('match-twisted-road-vehicle-success');\n            }).catch(() => {\n        }).finally(() => {\n            commit('SET_TWISTED_ROAD_LOADING', {subject: 'vehicles', loading: false});\n        });\n    },\n\n    /**\n     * Match TR Vehicles\n     *\n     * @param commit\n     * @param {Object} data\n     */\n    unmatchVehicle({commit}, data) {\n        commit('SET_TWISTED_ROAD_LOADING', {subject: 'matching', loading: true});\n\n        axios.post('/v1/connections/twisted-road/remove-matched-vehicle', data)\n            .then(() => {\n                EventBus.$emit('match-twisted-road-vehicle-success');\n            }).catch(() => {\n        }).finally(() => {\n            commit('SET_TWISTED_ROAD_LOADING', {subject: 'matching', loading: false});\n        });\n    },\n};\n\nexport default {\n    namespaced: true,\n    state,\n    mutations,\n    actions,\n    getters,\n};\n","import axios from 'axios';\nimport {EventBus} from '@/plugins/eventBus';\nimport {Form} from '@/plugins/FWForms/index';\nimport * as types from '../mutation-types';\nimport {performApiRequest} from '@/store/helpers/vuex-helpers';\nimport {VehicleClass, VehicleMake, VehicleModel} from '@/types';\nimport {push} from 'notivue';\n\ninterface VehicleStatesResponse {\n    states: string[];\n}\n\nexport type VehicleState = {\n    loading: Record<string, boolean>,\n    vehicleClassCreated: boolean,\n    vehicleClassesLoaded: boolean,\n    vehicleClassForm: Form<any>,\n    vehicleMakes: VehicleMake[],\n    vehicleModels: VehicleModel[],\n    vehicleClasses: VehicleClass[],\n    vehicleClass: VehicleClass | {},\n}\n\nconst state: VehicleState = {\n    loading: {\n        makes: false,\n        models: false,\n        fetchOdometer: false,\n        classes: false,\n        class: false,\n    },\n    vehicleClassCreated: false,\n    vehicleClassesLoaded: false,\n    vehicleClassForm: new Form(),\n    vehicleMakes: [],\n    vehicleModels: [],\n    vehicleClasses: [],\n    vehicleClass: {},\n};\n\nconst getters = {\n    vehicleMakes: (state: VehicleState) => state.vehicleMakes,\n    vehicleModels: (state: VehicleState) => state.vehicleModels,\n    vehicleLoading: (state: VehicleState) => state.loading,\n    vehicleClasses: (state: VehicleState) => state.vehicleClasses,\n    vehicleClass: (state: VehicleState) => state.vehicleClass,\n    vehicleClassForm: (state: VehicleState) => state.vehicleClassForm,\n    vehicleClassCreated: (state: VehicleState) => state.vehicleClassCreated,\n};\n\nconst mutations = {\n    [types.SET_VEHICLES_LOADING](state: VehicleState, loading: { subject: string, loading: boolean }) {\n        state.loading[loading.subject] = loading.loading;\n    },\n    [types.SET_VEHICLE_MAKES](state: VehicleState, makes: VehicleMake[]) {\n        state.vehicleMakes = makes;\n    },\n    [types.SET_VEHICLE_MODELS](state: VehicleState, models: VehicleModel[]) {\n        state.vehicleModels = models;\n    },\n    [types.SET_VEHICLE_CLASS_CREATED](state: VehicleState, value: boolean) {\n        state.vehicleClassCreated = value;\n    },\n    [types.SET_VEHICLE_CLASSES](state: VehicleState, classes: VehicleClass[]) {\n        state.vehicleClassesLoaded = true;\n        state.vehicleClasses = classes;\n    },\n    [types.SET_VEHICLE_CLASS](state: VehicleState, vehicleClass: VehicleClass) {\n        state.vehicleClass = vehicleClass;\n    },\n    [types.SET_VEHICLE_FORM_ERRORS](state: VehicleState, errors: any) {\n        state.vehicleClassForm.errors.set(errors);\n    },\n    [types.CLEAR_VEHICLE_FORM_ERRORS](state: VehicleState, form_field: string | null) {\n        if (form_field === null || form_field === undefined) {\n            state.vehicleClassForm.errors.clear();\n        } else {\n            state.vehicleClassForm.errors.clear(form_field);\n        }\n    },\n};\n\nconst actions = {\n\n    /**\n     * Fetch vehicle makes\n     */\n    async fetchVehicleMakes({commit}, refresh = false) {\n        if (state.vehicleMakes.length > 0 && !refresh) {\n            return;\n        }\n\n        try {\n            const responseData = await performApiRequest(commit, 'SET_VEHICLES_LOADING', 'makes', () => axios.get('/v1/vehicles/makes'));\n            commit('SET_VEHICLE_MAKES', responseData.makes);\n        } catch (error) {\n        }\n    },\n\n    /**\n     * Fetch vehicle models\n     */\n    async fetchVehicleModels({commit}, make: string) {\n        try {\n            const responseData = await performApiRequest(commit, 'SET_VEHICLES_LOADING', 'models', () => axios.get(`/v1/vehicles/makes/${make}/models`));\n            commit('SET_VEHICLE_MODELS', responseData.models);\n        } catch (error) {\n        }\n    },\n\n\n    /**\n     * Get vehicle classes\n     */\n    async getVehicleClasses({commit}, refresh = false) {\n        if (state.vehicleClassesLoaded && !refresh) {\n            return;\n        }\n\n        try {\n            const responseData = await performApiRequest(commit, 'SET_VEHICLES_LOADING', 'classes', () => axios.get('/v1/vehicle-classes'));\n            commit('SET_VEHICLE_CLASSES', responseData.classes);\n        } catch (error) {\n        }\n    },\n\n\n    /**\n     * Get vehicle class\n     */\n    async getClass({commit}, uuid: string) {\n        try {\n            const responseData = await performApiRequest(commit, 'SET_VEHICLES_LOADING', 'class', () => axios.get(`/v1/vehicle-classes/${uuid}`));\n            commit('SET_VEHICLE_CLASS', responseData.class);\n        } catch (error) {\n            push.error({\n                message: error?.response?.data?.message || 'There was an error',\n            });\n        }\n    },\n\n\n    /**\n     * Create a vehicle class\n     */\n    async createClass({commit, dispatch}, vehicleClass: VehicleClass) {\n        try {\n            await performApiRequest(commit, 'SET_VEHICLES_LOADING', 'class', () => axios.post('/v1/vehicle-classes', vehicleClass));\n            EventBus.$emit('create-vehicle-class-success');\n            EventBus.$emit('SystemMessage', {\n                type: 'success',\n                message: 'Vehicle class created successfully!',\n            });\n            commit('SET_VEHICLE_CLASS_CREATED', true);\n            dispatch('getVehicleClasses', true);\n        } catch (error) {\n            commit('SET_VEHICLE_FORM_ERRORS', error.response.data.errors);\n        }\n    },\n\n\n    /**\n     * Update a vehicle class\n     */\n    async updateClass({commit, dispatch}, vehicleClass: VehicleClass) {\n        try {\n            const responseData = await performApiRequest(commit, 'SET_VEHICLES_LOADING', 'class', () => axios.put(`/v1/vehicle-classes/${vehicleClass.uuid}`, vehicleClass));\n            commit('SET_VEHICLE_CLASS', responseData.class);\n            dispatch('getVehicleClasses', true);\n            EventBus.$emit('update-vehicle-class-success');\n            EventBus.$emit('SystemMessage', {\n                type: 'success',\n                message: 'Vehicle class saved successfully!',\n            });\n        } catch (error) {\n            state.vehicleClassForm.errors.set(error.response.data.errors);\n        }\n    },\n\n\n    /**\n     * Create a vehicle class\n     */\n    async deleteClass({commit}, uuid: string) {\n        try {\n            await performApiRequest(commit, 'SET_VEHICLES_LOADING', 'class', () => axios.delete(`/v1/vehicle-classes/${uuid}`));\n            EventBus.$emit('delete-vehicle-class-success');\n        } catch (error) {\n        }\n    },\n\n\n    /**\n     * Get a vehicle state\n     */\n    async getStates({commit}, v_id: string) {\n        try {\n            const responseData = await performApiRequest<VehicleStatesResponse>(commit, 'SET_VEHICLES_LOADING', 'getStates', () => axios.get(`/v1/vehicles/${v_id}/states`));\n            EventBus.$emit('fetch-vehicle-states-success', responseData.states);\n        } catch (error) {\n        }\n    },\n\n\n    /**\n     * Fetch a vehicles odometer\n     */\n    async fetchOdometer({commit}, v_id: string) {\n        try {\n            const responseData = await performApiRequest(commit, 'SET_VEHICLES_LOADING', 'fetchOdometer', () => axios.get(`/v1/vehicles/${v_id}/odometer`));\n            EventBus.$emit('fetch-odometer-reading-success', responseData.vehicle);\n            EventBus.$emit('fetch-vehicle-states-success', responseData.states);\n        } catch (error) {\n            if (error.response.status === 408) {\n                EventBus.$emit('tesla-is-asleep', error.response.data.tesla);\n                EventBus.$emit('show-tesla-wake-options', error.response.data.tesla);\n            }\n            push.error({\n                message: error?.response?.data?.message || 'There was an error',\n            });\n        }\n    },\n};\n\nexport default {\n    namespaced: true,\n    state,\n    mutations,\n    actions,\n    getters,\n};\n","import axios from 'axios';\nimport {uniqBy} from 'lodash';\nimport * as types from '../mutation-types';\nimport {performApiRequest} from '@/store/helpers/vuex-helpers';\nimport {Pagination, WhatsNew, WhatsNewFeedback} from '@/types';\n\n\nexport interface WhatsNewState {\n    loading: Record<string, boolean>,\n    count: number,\n    nextWhatsNew: number,\n    nextWhatsLast: number,\n    whatsNew: WhatsNew[],\n    images: any[],\n    openSidebar: boolean,\n}\n\n\nconst state: WhatsNewState = {\n    loading: {\n        sendFeedback: false,\n        count: false,\n        get: false,\n        images: false,\n        update: false,\n        seen: false,\n    },\n    openSidebar: false,\n    count: 0,\n    nextWhatsNew: 1,\n    nextWhatsLast: 1,\n    whatsNew: [],\n    images: [],\n};\n\nconst getters = {\n    loading: (state: WhatsNewState) => state.loading,\n    count: (state: WhatsNewState) => state.count,\n    images: (state: WhatsNewState) => state.images,\n    whatsNew: (state: WhatsNewState) => state.whatsNew,\n    nextWhatsNew: (state: WhatsNewState) => state.nextWhatsNew,\n    nextWhatsLast: (state: WhatsNewState) => state.nextWhatsLast,\n    openSidebar: (state: WhatsNewState) => state.openSidebar,\n};\n\nconst mutations = {\n    [types.SET_WHATS_NEW_LOADING](state: WhatsNewState, loading: { subject: string, loading: boolean }) {\n        state.loading[loading.subject] = loading.loading;\n    },\n    [types.SET_WHATS_NEW_COUNT](state: WhatsNewState, count: number) {\n        state.count = count;\n    },\n    [types.SET_SHOW_WHATS_NEW_SIDEBAR](state: WhatsNewState, isShown: boolean = false) {\n        state.openSidebar = isShown;\n\n        setTimeout(() => {\n            state.openSidebar = false;\n        }, 300);\n    },\n    [types.SET_WHATS_NEW_IMAGES](state: WhatsNewState, images: any[]) {\n        state.images = images;\n    },\n    [types.SET_WHATS_NEW](state: WhatsNewState, whatsNewPaginateObject: Pagination) {\n        const data: WhatsNew[] = whatsNewPaginateObject.data || [];\n\n        state.whatsNew = uniqBy([...state.whatsNew, ...data], (w) => w.uuid);\n        state.nextWhatsNew = (whatsNewPaginateObject.current_page || 0) + 1;\n        state.nextWhatsLast = whatsNewPaginateObject.last_page || 1;\n    },\n    [types.MERGE_WHATS_NEW](state: WhatsNewState, whatsNew: WhatsNew) {\n        if (whatsNew.uuid) {\n            const wnIndex = state.whatsNew.findIndex(w => w.uuid === whatsNew.uuid);\n            if (wnIndex >= 0) {\n                state.whatsNew[wnIndex] = whatsNew;\n            }\n        }\n    },\n};\n\nconst actions = {\n\n    /**\n     * Get what's new count\n     */\n    async getWhatsNewCount({commit}) {\n        try {\n            const responseData = await performApiRequest(commit, 'SET_WHATS_NEW_LOADING', 'count', () => axios.get('/v1/whats-new/count'));\n            commit(types.SET_WHATS_NEW_COUNT, responseData.count);\n        } catch (error) {\n            console.error(error)\n        }\n    },\n\n\n    /**\n     * Get what's new\n     */\n    async getWhatsNew({commit, state}, allPages = false) {\n        const shouldFetch = allPages || state.nextWhatsNew <= state.nextWhatsLast;\n\n        if (!shouldFetch) return;\n\n        if (allPages) {\n            state.nextWhatsNew = 1;\n        }\n\n        try {\n            // Fetch data with a reusable helper function\n            const responseData = await performApiRequest(\n                commit,\n                'SET_WHATS_NEW_LOADING',\n                'get',\n                () => axios.get(`/v1/whats-new`, {params: {page: state.nextWhatsNew, allPages}})\n            );\n\n            // Commit the fetched data\n            commit(types.SET_WHATS_NEW, responseData.whatsNew);\n        } catch (error) {\n            console.error('Error fetching Whats New:', error);\n        }\n    },\n\n    /**\n     * Get what's new images\n     */\n    async getImages({commit}) {\n        try {\n            const responseData = await performApiRequest(commit, 'SET_WHATS_NEW_LOADING', 'images', () => axios.get('/v1/whats-new/images'));\n            commit(types.SET_WHATS_NEW_IMAGES, responseData.files);\n        } catch (error) {\n            console.error(error)\n        }\n    },\n\n    /**\n     * Send what's new feedback\n     */\n    async sendFeedback({commit}, data: WhatsNewFeedback) {\n        try {\n            const responseData = await performApiRequest(commit, 'SET_WHATS_NEW_LOADING', 'sendFeedback', () => axios.post(`/v1/whats-new/${data.uuid}/feedback`, data));\n            commit(types.MERGE_WHATS_NEW, responseData.whatsNew);\n        } catch (error) {\n            console.error(error)\n        }\n    },\n\n    /**\n     * Add what's new\n     */\n    async addWhatsNew({commit}, data: WhatsNew) {\n        try {\n            return await performApiRequest(commit, 'SET_WHATS_NEW_LOADING', 'sendFeedback', () => axios.post('/v1/whats-new', data));\n        } catch (error) {\n            console.error(error)\n        }\n    },\n\n    /**\n     * Update what's new\n     */\n    async updateWhatsNew({commit}, data: WhatsNew) {\n        try {\n            return await performApiRequest(commit, 'SET_WHATS_NEW_LOADING', 'update', () => axios.put(`/v1/whats-new/${data.uuid}`, data));\n        } catch (error) {\n            console.error(error)\n        }\n    },\n\n\n    /**\n     * Mark what's new as seen\n     */\n    async markSeen({commit}) {\n        try {\n            await performApiRequest(commit, 'SET_WHATS_NEW_LOADING', 'seen', () => axios.post('/v1/whats-new/seen'));\n            commit(types.SET_WHATS_NEW_COUNT, 0);\n        } catch (error) {\n            console.error(error)\n        }\n    },\n};\n\nexport default {\n    namespaced: true,\n    state,\n    mutations,\n    actions,\n    getters,\n};\n","import axios from 'axios';\nimport {EventBus} from '@/plugins/eventBus';\nimport {get} from 'lodash';\nimport * as types from '../mutation-types';\nimport {performApiRequest} from \"@/store/helpers/vuex-helpers\";\n\n\ntype Webhook = {\n    created_at: string,\n    description: string,\n    livemode: boolean,\n    metadata: null,\n    status: string,\n    type: null,\n    updated_at: string,\n    url: string,\n    uuid: string,\n}\n\nexport type WebhookEndpoint = {\n    url: string,\n    description: string,\n    events: Array<string>,\n}\n\nexport interface WebhookState {\n    loaded: boolean;\n    loading: Record<string, boolean>;\n    webhooks: Webhook[]\n    webhookEndpoints: WebhookEndpoint[],\n    webhookConversations: Array<any>,\n    webhook: Webhook,\n    webhookEndpoint: WebhookEndpoint,\n    webhookEndpointSecret: String,\n}\n\nconst state: WebhookState = {\n    loaded: false,\n    loading: {\n        webhooks: false,\n        webhooksUpdate: false,\n        webhooksDelete: false,\n        webhookConversationResend: false,\n        secret: false,\n    },\n    webhooks: [],\n    webhook: null,\n    webhookEndpoints: [],\n    webhookEndpoint: null,\n    webhookConversations: [],\n    webhookEndpointSecret: '',\n};\n\n\nconst getters = {\n    loaded: (state: WebhookState) => state.loaded,\n    loading: (state: WebhookState) => state.loading,\n    webhooks: (state: WebhookState) => state.webhooks,\n    webhook: (state: WebhookState) => state.webhook,\n    webhookEndpoint: (state: WebhookState) => state.webhookEndpoint,\n    webhookEndpoints: (state: WebhookState) => state.webhookEndpoints,\n    webhookConversations: (state: WebhookState) => state.webhookConversations,\n    webhookEndpointSecret: (state: WebhookState) => state.webhookEndpointSecret,\n};\n\n\nconst mutations = {\n    [types.SET_WEBHOOKS_LOADING](state: WebhookState, loading: { subject: string, loading: boolean }) {\n        state.loading[loading.subject] = loading.loading;\n    },\n\n    [types.SET_WEBHOOK_ENDPOINTS](state: WebhookState, webhookEndpoints: WebhookEndpoint[]) {\n        state.webhookEndpoints = webhookEndpoints;\n    },\n    [types.SET_WEBHOOK_ENDPOINT](state: WebhookState, webhookEndpoint: WebhookEndpoint) {\n        state.webhookEndpoint = webhookEndpoint;\n    },\n\n    [types.SET_WEBHOOKS_CONVERSATIONS](state: WebhookState, conversations: Array<any>) {\n        state.webhookConversations = conversations;\n    },\n    [types.SET_WEBHOOK_ENDPOINT_SECRET](state: WebhookState, secret: string) {\n        state.webhookEndpointSecret = secret;\n    },\n};\n\nconst actions = {\n\n    /**\n     * Get webhook endpoints\n     */\n    getWebhookEndpoints({commit}) {\n        commit('SET_WEBHOOKS_LOADING', {subject: 'webhooks', loading: true});\n\n        axios.get('/v1/webhook-endpoints')\n            .then((response) => {\n                commit('SET_WEBHOOK_ENDPOINTS', get(response, 'data.webhookEndpoints'));\n            }).catch((e) => {\n            console.dir(e);\n        }).finally(() => {\n            commit('SET_WEBHOOKS_LOADING', {subject: 'webhooks', loading: false});\n        });\n    },\n\n\n    /**\n     * Get webhook endpoint\n     */\n    getWebhookEndpoint({commit}, webhook_uuid: string) {\n        commit('SET_WEBHOOKS_LOADING', {subject: 'webhooks', loading: true});\n\n        axios.get(`/v1/webhook-endpoints/${webhook_uuid}`)\n            .then((response) => {\n                commit('SET_WEBHOOK_ENDPOINT', get(response, 'data.webhookEndpoint'));\n            }).catch((e) => {\n            console.dir(e);\n        }).finally(() => {\n            commit('SET_WEBHOOKS_LOADING', {subject: 'webhooks', loading: false});\n        });\n    },\n\n\n    /**\n     * Add webhook\n     */\n    async addWebhookEndpoint({commit}, data: WebhookEndpoint) {\n        return await performApiRequest(commit, 'SET_WEBHOOKS_LOADING', 'webhooks', () => axios.post('/v1/webhook-endpoints', data));\n    },\n\n\n    /**\n     * Update webhook\n     */\n    updateWebhookEndpoint({commit}, webhook: Webhook) {\n        commit('SET_WEBHOOKS_LOADING', {subject: 'webhooksUpdate', loading: true});\n\n        axios.put(`/v1/webhook-endpoints/${webhook.uuid}`, webhook)\n            .then(() => {\n                EventBus.$emit('update-webhook-endpoint-success');\n            }).catch((e) => {\n            console.dir(e);\n        }).finally(() => {\n            commit('SET_WEBHOOKS_LOADING', {subject: 'webhooksUpdate', loading: false});\n        });\n    },\n\n    /**\n     * Get webhook conversations\n     */\n    getWebhookConversations({commit}, uuid: string) {\n        commit('SET_WEBHOOKS_LOADING', {subject: 'webhooks', loading: true});\n\n        axios.get(`/v1/webhook-endpoints/${uuid}/conversations`)\n            .then((response) => {\n                commit('SET_WEBHOOKS_CONVERSATIONS', get(response, 'data.conversations'));\n            }).catch((e) => {\n            console.dir(e);\n        }).finally(() => {\n            commit('SET_WEBHOOKS_LOADING', {subject: 'webhooks', loading: false});\n        });\n    },\n\n\n    /**\n     * Resend webhook conversations\n     */\n    resendWebhookConversation({commit}, conversation: any) {\n        commit('SET_WEBHOOKS_LOADING', {subject: 'webhookConversationResend', loading: true});\n\n        axios.post(`/v1/webhooks-conversations/${conversation.uuid}/retry`)\n            .then(() => {\n            }).catch((e) => {\n            console.dir(e);\n        }).finally(() => {\n            commit('SET_WEBHOOKS_LOADING', {subject: 'webhookConversationResend', loading: false});\n        });\n    },\n\n\n    /**\n     * Delete webhook endpoint\n     */\n    deleteWebhookEndpoint({commit}, webhook: Webhook) {\n        commit('SET_WEBHOOKS_LOADING', {subject: 'webhooksDelete', loading: true});\n\n        axios.delete(`/v1/webhook-endpoints/${webhook.uuid}`)\n            .then(() => {\n                commit('SET_WEBHOOKS_CONVERSATIONS', []);\n                EventBus.$emit('delete-webhook-endpoint-success');\n            }).catch((e) => {\n            console.dir(e);\n        }).finally(() => {\n            commit('SET_WEBHOOKS_LOADING', {subject: 'webhooksDelete', loading: false});\n        });\n    },\n\n\n    /**\n     * Fetch webhook endpoints signing secret\n     */\n    async getWebhookEndpointSecret({commit}, uuid: string) {\n        try {\n            const responseData = await performApiRequest(commit, 'SET_WEBHOOKS_LOADING', 'secret', () => axios.get(`/v1/webhook-endpoints/${uuid}/secret`));\n            commit('SET_WEBHOOK_ENDPOINT_SECRET', responseData.secret);\n        } catch (error) {\n            throw error;\n        }\n    },\n};\n\nexport default {\n    namespaced: true,\n    state,\n    mutations,\n    actions,\n    getters,\n};\n","import axios from 'axios';\nimport {\n    DeliveryDistanceResults,\n    ProductOrder,\n    ProductOrderCosts,\n    ProductOrderDates,\n    ProductOrderDuration,\n    StoreLoaders,\n    TenantLocation\n} from '@/types';\nimport {Module} from 'vuex'\nimport * as types from '@/store/mutation-types';\nimport {RootState} from '@/types/RootState';\nimport {CartService} from '@/services/cart.service';\nimport {Form} from '@/plugins/FWForms/index';\nimport {performApiRequest} from '@/store/helpers/vuex-helpers';\nimport router from '@/router';\n\n\nexport interface TenantCheckoutState {\n    loading: StoreLoaders,\n    dialogs: Record<string, boolean>,\n    productOrder: ProductOrder,\n    showDeliveryAddressForm: boolean,\n    stripePaymentIntent: any,\n    tenantCheckoutForm: Form<any>,\n    deliveryDistanceResults: DeliveryDistanceResults,\n}\n\n\nconst state: TenantCheckoutState = {\n    loading: {\n        checkout: false,\n        stripe_oauth: false,\n        createApiToken: false,\n        start2FAVerify: false,\n        check2FAVerify: false,\n    },\n\n    dialogs: {\n        stripePayment: false,\n    },\n\n    stripePaymentIntent: null,\n\n    productOrder: {\n        version: 'v2',\n        l_id: '',\n        b_id: '',\n        p_id: '',\n        dates: {\n            start: null,\n            end: null,\n        },\n        costs: {\n            vehicle: 0,\n            extras: 0,\n            requiredExtras: 0,\n            delivery: 0,\n            taxes: 0,\n            discount: 0,\n            subtotal: 0,\n            grandTotal: 0,\n            dueToday: 0,\n            securityDepositCredit: 0,\n            securityDepositDebit: 0,\n        },\n        discounts: {\n            discounted: false,\n            amount: 0,\n            value: 0,\n            code: null,\n            reason: null,\n            type: null,\n            durationDiscountReason: null,\n            durationDiscountAmount: null,\n            durationDiscountValue: null,\n        },\n        duration: {\n            seconds: 0,\n            minutes: 0,\n            hours: 0,\n            days: 0,\n            weeks: 0,\n            months: 0,\n            years: 0,\n            units: 1,\n        },\n        customers: [\n            {\n                isPrimary: true,\n                firstName: '',\n                lastName: '',\n                phone: '',\n                email: '',\n                dob: '',\n                age: null,\n                signaturePng: null,\n                signFullName: null,\n                signInitials: null,\n                agreeAdoptSignature: false,\n                agreeToS: false,\n            },\n        ],\n        extras: [],\n        extrasV2: [],\n        requiredExtras: [],\n        requiredExtrasV2: {},\n        delivery: null,\n        delivery_address: null,\n        distance_allowance: {\n            distance: null,\n            unit: 'miles',\n        },\n        customFields: [],\n        cartId: CartService.getCartUuid(),\n    },\n\n    tenantCheckoutForm: new Form(),\n\n    showDeliveryAddressForm: false,\n    deliveryDistanceResults: {\n        checked: false as boolean,\n        valid: false as boolean,\n        message: null as string | null,\n        distance: null as number | null,\n    },\n}\n\n\nconst tenantCheckoutModule: Module<TenantCheckoutState, RootState> = {\n    namespaced: true,\n\n    state,\n\n    getters: {\n        loading: (state: TenantCheckoutState) => state.loading,\n        dialogs: (state: TenantCheckoutState) => state.dialogs,\n        stripePaymentIntent: (state: TenantCheckoutState) => state.stripePaymentIntent,\n        productOrder: (state: TenantCheckoutState) => state.productOrder,\n        showDeliveryAddressForm: (state: TenantCheckoutState) => state.showDeliveryAddressForm,\n        deliveryDistanceResults: (state: TenantCheckoutState) => state.deliveryDistanceResults,\n        tenantCheckoutForm: (state: TenantCheckoutState) => state.tenantCheckoutForm,\n    },\n\n\n    mutations: {\n        [types.SET_CHECKOUT_LOADING](state: TenantCheckoutState, loading: { subject: string, loading: boolean }) {\n            state.loading[loading.subject] = loading.loading;\n        },\n        [types.SET_TENANT_CHECKOUT_DATES](state: TenantCheckoutState, dates: ProductOrderDates) {\n            console.log('%cSET_TENANT_CHECKOUT_DATES', 'color: red; font-weight: bold;');\n            state.productOrder.dates = dates;\n        },\n        [types.SET_TENANT_CHECKOUT_LOCATION](state: TenantCheckoutState, location: TenantLocation) {\n            console.log('%cSET_TENANT_CHECKOUT_LOCATION', 'color: pink; font-weight: bold;');\n            state.productOrder.delivery = location;\n        },\n        [types.SET_TENANT_CHECKOUT_DELIVERY_ADDRESS_FORM_SHOW](state: TenantCheckoutState, payload) {\n            state.showDeliveryAddressForm = payload;\n        },\n        [types.SET_TENANT_CHECKOUT_STRIPE_PAYMENT_INTENT](state: TenantCheckoutState, payload) {\n            state.stripePaymentIntent = payload;\n        },\n        [types.SET_TENANT_CHECKOUT_DIALOG](state: TenantCheckoutState, payload) {\n            if (payload.topic === 'stripe-payment') {\n                state.dialogs.stripePayment = payload.value;\n            }\n        },\n        [types.SET_TENANT_CHECKOUT_DURATIONS](state: TenantCheckoutState, payload: ProductOrderDuration) {\n            state.productOrder.duration = payload;\n        },\n        [types.SET_TENANT_CHECKOUT_BOOKING_ID](state: TenantCheckoutState, payload: string) {\n            state.productOrder.b_id = payload;\n        },\n        [types.SET_TENANT_CHECKOUT_CUSTOM_ORDER_FIELDS](state: TenantCheckoutState, payload) {\n            state.productOrder.customFields = payload;\n        },\n        [types.SET_TENANT_CHECKOUT_CUSTOMER_TOS_AGREE](state: TenantCheckoutState, data: {\n            index: number,\n            agreeToS: boolean\n        }) {\n            state.productOrder.customers[data.index].agreeToS = data.agreeToS;\n        },\n        [types.SET_TENANT_CHECKOUT_COSTS](state: TenantCheckoutState, payload: ProductOrderCosts) {\n            state.productOrder.costs = payload;\n        },\n        [types.SET_TENANT_CHECKOUT_LISTING_ID](state: TenantCheckoutState, payload: string) {\n            state.productOrder.l_id = payload;\n        },\n        [types.SET_TENANT_CHECKOUT_CUSTOMER_BY_INDEX](state: TenantCheckoutState, data: {\n            index: number,\n            customer: any\n        }) {\n            state.productOrder.customers[data.index] = data.customer;\n        },\n        [types.SET_TENANT_CHECKOUT_CUSTOMERS](state: TenantCheckoutState, payload) {\n            state.productOrder.customers = payload;\n        },\n        [types.SET_TENANT_CHECKOUT_EXTRAS_V2](state: TenantCheckoutState, payload) {\n            console.dir('SET_TENANT_CHECKOUT_EXTRAS_V2');\n            state.productOrder.extrasV2 = payload;\n        },\n        [types.SET_TENANT_CHECKOUT_REQUIRED_EXTRAS_V2](state: TenantCheckoutState, payload) {\n            if (!state.productOrder.requiredExtrasV2) {\n                state.productOrder.requiredExtrasV2 = {};\n            }\n\n            state.productOrder.requiredExtrasV2[payload.index] = payload.extra;\n        },\n\n        [types.SET_TENANT_CHECKOUT_REQUIRED_EXTRAS](state: TenantCheckoutState, data) {\n            if (data.requiredExtras) {\n                state.productOrder.requiredExtras = data.requiredExtras.map(e => e.extras[0]);\n            }\n\n            if (data.requiredExtrasV2) {\n                state.productOrder.requiredExtrasV2 = data.requiredExtrasV2.map(e => {\n                    return {\n                        parentUuid: e.uuid,\n                        choice: e.options[0],\n                    };\n                });\n            }\n        },\n        [types.SET_TENANT_CHECKOUT_ORDER_DELIVERY_ADDRESS](state: TenantCheckoutState, address) {\n            state.productOrder.delivery_address = address;\n        },\n        [types.SET_TENANT_CHECKOUT_ORDER_DISTANCE_ALLOWANCE](state: TenantCheckoutState, payload: {\n            distance: number,\n            unit: string\n        }) {\n            state.productOrder.distance_allowance = payload;\n        },\n        [types.RESET_TENANT_CHECKOUT_DELIVERY_RESULTS](state: TenantCheckoutState) {\n            state.deliveryDistanceResults = {\n                checked: false,\n                valid: false,\n                message: null,\n                distance: null,\n            };\n        },\n        [types.SET_TENANT_CHECKOUT_DELIVERY_RESULTS](state: TenantCheckoutState, payload: DeliveryDistanceResults) {\n            state.deliveryDistanceResults = payload;\n        },\n        [types.SET_TENANT_CHECKOUT_DISCOUNT](state, coupon) {\n            console.dir(coupon);\n\n            state.productOrder.discounts = {\n                discounted: true,\n                value: coupon?.value,\n                code: coupon?.code,\n                amount: coupon?.amount,\n                reason: coupon?.reason,\n                type: coupon?.type,\n                durationDiscountReason: null,\n                durationDiscountAmount: null,\n                durationDiscountValue: null,\n            };\n        },\n        [types.RESET_TENANT_CHECKOUT_DISCOUNT](state) {\n            state.tenantCheckoutForm.errors.clear('coupon');\n            state.productOrder.discounts = {\n                discounted: false,\n                code: '',\n                amount: 0,\n                reason: '',\n                type: '',\n                value: 0,\n                durationDiscountReason: null,\n                durationDiscountAmount: null,\n                durationDiscountValue: null,\n            };\n        },\n        [types.SET_TENANT_CHECKOUT_FORM_ERRORS](state, errors) {\n            state.tenantCheckoutForm.errors.set(errors);\n        },\n        [types.RESET_TENANT_CHECKOUT_FORM_ERRORS](state) {\n            state.tenantCheckoutForm.errors.clear();\n        }\n    },\n\n    actions: {\n        setLocation({commit}, location: TenantLocation) {\n            commit(types.SET_TENANT_CHECKOUT_LOCATION, location);\n        },\n        setCustomOrderCheckoutFields({commit}, fields) {\n            commit(types.SET_TENANT_CHECKOUT_CUSTOM_ORDER_FIELDS, fields);\n        },\n        resetDeliveryDistanceResults({commit}) {\n            commit(types.RESET_TENANT_CHECKOUT_DELIVERY_RESULTS);\n        },\n        setDeliveryAddressFormVisibility({commit}, payload: boolean) {\n            commit(types.SET_TENANT_CHECKOUT_DELIVERY_ADDRESS_FORM_SHOW, payload);\n        },\n        setDeliveryDistanceResults({state: TenantCheckoutState}, payload) {\n            state.deliveryDistanceResults = payload;\n        },\n        /**\n         * Check the distance between the delivery location and the listing\n         */\n        async checkDrivingDistance({commit}, location) {\n            try {\n                await performApiRequest(commit, 'SET_CHECKOUT_LOADING', 'checkout', () => axios.post('/v1/verify-driving-distance', location));\n                commit(types.SET_TENANT_CHECKOUT_DELIVERY_RESULTS, {\n                    checked: true,\n                    valid: true,\n                });\n            } catch (e: any) {\n                commit(types.SET_TENANT_CHECKOUT_DELIVERY_RESULTS, {\n                    checked: true,\n                    valid: false,\n                    message: e.response?.data?.message || 'There was an error checking the driving distance.',\n                });\n            }\n        },\n        async verifyPayment({commit, rootGetters}, paymentIntentId: string) {\n            try {\n                return await performApiRequest(commit, 'SET_CHECKOUT_LOADING', 'checkout', () => axios.get(`/v1/company/${rootGetters['company/company'].uuid}/verify-payment-intent/${paymentIntentId}`));\n            } catch (error) {\n                console.error('error');\n                console.dir(error);\n            }\n        },\n        async tenantCheckout({commit, rootGetters, state: TenantCheckoutState}) {\n            try {\n                const paymentStrategy = rootGetters['company/company']?.meta?.payment_strategy;\n                const paymentProvider = rootGetters['company/company']?.payment_profile?.provider;\n                const notingDueToday = state.productOrder.costs.dueToday === 0;\n\n                const responseData = await performApiRequest(commit, 'SET_CHECKOUT_LOADING', 'checkout', () => axios.post('/v1/checkout', state.productOrder));\n\n                // if there is no payment provider, redirect to the success page\n                if (paymentProvider === null || (paymentProvider !== 'square' && paymentProvider !== 'stripe') || notingDueToday) {\n                    // send to checkout success page\n                    router.push({\n                        name: 'reservations.complete',\n                        query: {\n                            b_id: responseData?.b_id,\n                            l_id: responseData?.l_id,\n                            company: rootGetters['company/company']?.slug\n                        }\n                    }).catch(() => {\n                    });\n                    return;\n                }\n\n                // If payment provider is Square, redirect to Square payment page\n                if (paymentProvider === 'square') {\n                    window.location.href = responseData?.redirect;\n                }\n\n                if (responseData?.redirect) {\n                    window.location.href = responseData?.redirect;\n                    return;\n                }\n\n\n                // if payment provider is Stripe\n                if (paymentProvider === 'stripe') {\n                    const sessionId = responseData?.StripeSession?.id;\n                    const customer = responseData?.customer;\n                    const stripePaymentMethod = 'payment_intent';\n\n                    if (stripePaymentMethod === 'payment_intent') {\n                        // EventBus.$emit('set-booking-id', get(response, 'data.b_id'));\n                        // EventBus.$emit('set-listing-id', get(response, 'data.l_id'));\n                        // EventBus.$emit('open-checkout-payment-dialog', get(response, 'data.StripePaymentIntent'));\n\n                        commit(types.SET_TENANT_CHECKOUT_BOOKING_ID, responseData?.b_id);\n                        commit(types.SET_TENANT_CHECKOUT_STRIPE_PAYMENT_INTENT, responseData?.StripePaymentIntent);\n                        commit(types.SET_TENANT_CHECKOUT_DIALOG, {\n                            topic: 'stripe-payment',\n                            value: true,\n                        });\n                    }\n                }\n\n                // If payment provider is Stripe, redirect to Stripe payment page\n\n                console.dir(responseData);\n\n            } catch (error) {\n                console.error('error');\n                console.dir(error);\n\n                // tenantCheckoutForm.errors.record(error.response.data.errors);\n                commit(types.SET_TENANT_CHECKOUT_FORM_ERRORS, error.response.data.errors);\n            }\n        }\n    },\n\n}\n\nexport default tenantCheckoutModule;","import axios from 'axios';\nimport * as types from '@/store/mutation-types';\nimport {RootState} from '@/types/RootState';\nimport {performApiRequest} from \"@/store/helpers/vuex-helpers\";\nimport {Module} from 'vuex';\n\nexport interface TagState {\n    loading: Record<string, boolean>;\n    tags: Record<string, number>;\n}\n\n// state\nconst state: TagState = {\n    loading: {\n        fetch_tags: false,\n        create_tag: false,\n        remove_tag: false,\n    },\n    tags: {},\n};\n\n\nconst mutations = {\n    [types.SET_TAGS_LOADING](state: TagState, loading: { subject: string, loading: boolean }) {\n        state.loading[loading.subject] = loading.loading;\n    },\n    [types.SET_TAGS](state: TagState, tags) {\n        state.tags = tags;\n    },\n};\n\nconst actions = {\n\n    async fetchTags({commit}, {forType}) {\n        const query = forType ? `?for=${forType}` : '';\n\n        try {\n            const responseData = await performApiRequest(commit, 'SET_TAGS_LOADING', 'fetch_tags', () => axios.get(`/v1/tags${query}`));\n            commit(types.SET_TAGS, responseData.tags);\n        } catch (error) {\n        }\n    },\n\n    async createTag({commit}, data: { name: string, forType: string, forId: string }) {\n        try {\n            await performApiRequest(commit, 'SET_TAGS_LOADING', 'create_tag', () => axios.post('/v1/tags', data));\n        } catch (error) {\n            commit(types.SET_COUPON_FORM_ERROR, error.response.data?.errors || 'There was an error');\n        }\n    },\n\n    async removeTag({commit}, data: { name: string, customer_id: string }) {\n        try {\n            await performApiRequest(commit, 'SET_TAGS_LOADING', 'remove_tag', () => axios.post('/v1/tags/remove', data));\n        } catch (error) {\n            commit(types.SET_COUPON_FORM_ERROR, error.response.data?.errors || 'There was an error');\n        }\n    },\n};\n\nconst tagsModule: Module<TagState, RootState> = {\n    namespaced: true,\n\n    state,\n\n    getters: {\n        loading: (state: TagState) => state.loading,\n        tags: (state: TagState) => state.tags,\n    },\n\n    mutations,\n\n    actions,\n}\n\nexport default tagsModule;\n","import {createStore, Store} from 'vuex';\n\nimport affiliate from '@/store/modules/affiliate';\nimport analytics from '@/store/modules/analytics';\nimport app from '@/store/modules/app';\nimport auth from '@/store/modules/auth';\nimport automations from '@/store/modules/automations';\nimport axle from '@/store/modules/axle';\nimport barcode from '@/store/modules/barcode';\nimport booking from '@/store/modules/booking';\nimport bouncie from '@/store/modules/bouncie';\nimport braintree from '@/store/modules/braintree';\nimport cart from '@/store/modules/cart';\nimport checkout from '@/store/modules/checkout';\nimport commissionPartners from '@/store/modules/commission-partners';\nimport company from '@/store/modules/company';\nimport coupon from '@/store/modules/coupon';\nimport custodian from '@/store/modules/custodian';\nimport customFields from '@/store/modules/custom-fields';\nimport defaultProperties from '@/store/modules/default-properties';\nimport document from '@/store/modules/document';\nimport email from '@/store/modules/email';\nimport emailDomainSettings from '@/store/modules/email-domain-settings';\nimport envelope from '@/store/modules/envelope';\nimport files from '@/store/modules/files';\nimport fleet from '@/store/modules/fleet';\nimport getaround from '@/store/modules/getaround';\nimport hqRentals from '@/store/modules/hq-rentals';\nimport payments from '@/store/modules/payments';\nimport settings from '@/store/modules/settings';\nimport theme from '@/store/modules/theme';\nimport lang from '@/store/modules/lang';\nimport listing from '@/store/modules/listing';\nimport lula from '@/store/modules/lula';\nimport notes from '@/store/modules/notes';\nimport outdoorsy from '@/store/modules/outdoorsy';\nimport permission from '@/store/modules/permission';\nimport pricing from '@/store/modules/pricing';\nimport providers from '@/store/modules/providers';\nimport renters from '@/store/modules/renters';\nimport square from '@/store/modules/square';\nimport subscriptions from '@/store/modules/subscriptions';\nimport superAdmin from '@/store/modules/superAdmin';\nimport tagsView from '@/store/modules/tags-view';\nimport taxes from '@/store/modules/taxes';\nimport maintenance from '@/store/modules/maintenance';\nimport order from '@/store/modules/order';\nimport stripe from '@/store/modules/stripe';\nimport template from '@/store/modules/template';\nimport tesla from '@/store/modules/tesla';\nimport tolls from '@/store/modules/tolls';\nimport tripExtras from '@/store/modules/trip-extras';\nimport turo from '@/store/modules/turo';\nimport turoPricing from '@/store/modules/turo-pricing';\nimport turoResearch from '@/store/modules/turo-research';\nimport twilio from '@/store/modules/twilio';\nimport twistedRoad from '@/store/modules/twisted-road';\nimport vehicles from '@/store/modules/vehicles';\nimport whatsNew from '@/store/modules/whats-new';\nimport webhook from '@/store/modules/webhook';\nimport tenantCheckout from '@/store/modules/tenant-checkout';\nimport tags from '@/store/modules/tags';\nimport {RootState} from '@/types/RootState';\n\nexport const store: Store<RootState> = createStore({\n    modules: {\n        axle,\n        cart,\n        affiliate,\n        analytics,\n        app,\n        auth,\n        automations,\n        barcode,\n        booking,\n        bouncie,\n        braintree,\n        checkout,\n        commissionPartners,\n        company,\n        coupon,\n        custodian,\n        customFields,\n        defaultProperties,\n        document,\n        email,\n        emailDomainSettings,\n        envelope,\n        files,\n        fleet,\n        getaround,\n        hqRentals,\n        lang,\n        listing,\n        lula,\n        maintenance,\n        notes,\n        order,\n        outdoorsy,\n        payments,\n        permission,\n        pricing,\n        providers,\n        renters,\n        settings,\n        square,\n        theme,\n        stripe,\n        subscriptions,\n        superAdmin,\n        tagsView,\n        taxes,\n        template,\n        tenantCheckout,\n        tesla,\n        tolls,\n        tripExtras,\n        turo,\n        turoPricing,\n        turoResearch,\n        twilio,\n        twistedRoad,\n        vehicles,\n        webhook,\n        whatsNew,\n        tags,\n    },\n    // strict: import.meta.env.MODE === 'development',\n});","<template>\n  <v-app class=\"z-0 relative\">\n    <component :is=\"layoutComponent\">\n      <router-view/>\n    </component>\n\n    <Notivue v-slot=\"item\">\n      <Notification :item=\"item\"/>\n    </Notivue>\n  </v-app>\n</template>\n\n<script lang=\"ts\" setup>\nimport {computed, defineAsyncComponent, onBeforeMount} from 'vue';\nimport {useRoute} from 'vue-router';\nimport {store} from '@/store';\nimport 'notivue/animations.css';\nimport 'notivue/notification.css';\nimport {Notification, Notivue} from 'notivue'\n\nconst TheDefaultLayout = defineAsyncComponent(() => import('@/layouts/TheDefaultLayout.vue'));\n\n// Define the allowed layout names explicitly\ntype LayoutKey = 'Dashboard' | 'Esign' | 'CompanyStore' | 'Default';\n\nconst layoutMap = {\n  Dashboard: defineAsyncComponent({\n    loader: () => import('@/layouts/TheDashboardLayout.vue'),\n    delay: 200, // Avoid flicker on fast networks\n    timeout: 5000, // Fail if loading takes too long\n  }),\n  Esign: defineAsyncComponent(() => import('@/layouts/TheEsignLayout.vue')),\n  CompanyStore: defineAsyncComponent(() => import('@/layouts/TheCompanyStoreLayout.vue')),\n  Default: defineAsyncComponent(() => import('@/layouts/TheDefaultLayout.vue')),\n};\n\nconst route = useRoute();\n\n/**\n * Dynamically determine the layout component based on the route's metadata.\n * Defaults to a standard layout or fallback if no layout is specified.\n */\nconst layoutComponent = computed(() => {\n  const layoutName = route.meta?.layout as LayoutKey | undefined;\n  const resolvedLayout = layoutName && layoutMap[layoutName] ? layoutMap[layoutName] : TheDefaultLayout;\n\n  console.log(`🖥️ Using Layout: ${layoutName || 'Default'}`);\n  return resolvedLayout;\n});\n\nonBeforeMount(() => {\n  // Initialize the app state\n  store.commit('app/INITIALIZE_STATE');\n});\n</script>","// Vuetify\nimport 'vuetify/styles';\nimport { createVuetify } from 'vuetify';\n\nconst vuetify = createVuetify({\n    components: {},\n});\n\nexport default vuetify;","import VueGtag from \"vue-gtag\";\n\nexport function initGtag(app, router) {\n    app.use(VueGtag, {\n        bootstrap: false,\n        config: {id: \"G-NWFRX8HJBK\"}\n    }, router);\n}","import * as Sentry from '@sentry/vue';\n\nconst IS_DEBUG = import.meta.env.MODE !== 'production';\n\nexport function initSentry(app: any) {\n    const SENTRY_DSN = import.meta.env.VITE_SENTRY_DSN || 'https://477434e9051c46e38a6d5052ba4129d7@sentry.io/2158517';\n\n    if (!SENTRY_DSN) {\n        console.warn('⚠️ Sentry DSN is not provided.');\n        return;\n    }\n\n    Sentry.init({\n        app,\n        dsn: SENTRY_DSN,\n        release: import.meta.env.VITE_APP_VERSION || '1.0.51',\n        // debug: IS_DEBUG,\n        environment: import.meta.env.MODE,\n\n        beforeSend: (event, hint) => {\n            if (IS_DEBUG) {\n                console.error('[Sentry Debug] Captured Error:', hint.originalException || hint.syntheticException);\n                // return null; // this drops the event and nothing will be sent to sentry\n            }\n            return event;\n        },\n\n        integrations: [\n            Sentry.vueIntegration({\n                tracingOptions: {\n                    trackComponents: true,\n                },\n            }),\n            Sentry.browserTracingIntegration(),\n            Sentry.replayIntegration({\n                maskAllText: false,\n                blockAllMedia: true,\n            }),\n            // The following is all you need to enable canvas recording with Replay\n            Sentry.replayCanvasIntegration(),\n        ],\n\n        // This sets the sample rate to be 10%. You may want this to be 100% while\n        // in development and sample at a lower rate in production\n        replaysSessionSampleRate: IS_DEBUG ? 1.0 : 0.1,\n\n        // If the entire session is not sampled, use the below sample rate to sample\n        // sessions when an error occurs.\n        replaysOnErrorSampleRate: 1.0,\n        tracesSampleRate: 1.0,\n        tracePropagationTargets: ['localhost', 'fleetwire.test', 'fleetwire.io', /^\\//],\n    });\n\n    console.log('✅ Sentry Initialized Successfully!');\n}","import axios from 'axios';\nimport {getToken, removeAllUserCookies} from '@/utils/auth';\nimport {EventBus} from '@/plugins/eventBus';\nimport {store} from '@/store';\nimport router from '@/router';\n\naxios.defaults.baseURL = '/api';\n\n// Request interceptor\naxios.interceptors.request.use((request) => {\n    const token = getToken();\n\n    if (token) {\n        request.headers.Authorization = `bearer ${token}`;\n    }\n\n    request.headers.Accept = 'application/json';\n    request.headers['Accept-Language'] = store.getters['lang/locale'];\n\n    return request;\n});\n\naxios.interceptors.response.use((response) => response, (error) => {\n    const status = error.response?.status;\n\n    // eslint-disable-next-line\n    if (status === 401) {\n        // handleUnauthorizedError();\n    } else if (status === 500) {\n        EventBus.$emit('SystemMessage', {\n            type: 'error',\n            message: 'Server Error. Please try again in a few minutes.',\n        });\n    }\n\n    return Promise.reject(error);\n});\n\nconst handleUnauthorizedError = () => {\n    const currentRouterName = router.currentRoute.value.name;\n    const currentPath = window.location.pathname;\n    const fullPath = window.location.href;\n\n    console.dir('handleUnauthorizedError');\n    console.dir(currentRouterName);\n    console.dir(currentPath);\n    console.dir(fullPath);\n\n\n    const authPaths = ['/login', '/register', '/password/reset', '/password/verify', '/password/resend', '/company', '/rental', 'rental/reservations'];\n\n    if (authPaths.some(path => currentPath.startsWith(path))) {\n        console.log('Already on an auth-related page, no redirect needed.');\n        return;\n    }\n\n    EventBus.$emit('SystemMessage', {\n        type: 'error',\n        message: 'Unauthorized',\n    });\n\n    removeAllUserCookies();\n    window.location.href = `/login?redirect=${encodeURIComponent(currentPath)}`;\n};","import {App, Component} from 'vue';\n\n/**\n * Register layouts in the app instance\n *\n * @param {App<Element>} app\n */\nexport async function registerLayouts(app: App<Element>) {\n    const layouts = import.meta.glob('./*.vue'); // Returns a map of lazy-loaded modules\n\n    console.log('Layouts:', layouts);\n\n    for (const [path, layoutImporter] of Object.entries(layouts)) {\n        try {\n            // Dynamically import the layout\n            const module = (await layoutImporter()) as { default: Component };\n            const component = module.default;\n\n            if (!component) {\n                console.warn(`Failed to load layout at path: ${path}`);\n                continue;\n            }\n\n            // Use the `name` property or fallback to the filename\n            const componentName = component.name || extractFileName(path);\n\n            if (!componentName) {\n                console.error(`Unable to determine component name for layout at path: ${path}`);\n                continue;\n            }\n\n            app.component(componentName, component);\n        } catch (error) {\n            console.error(`Error loading layout at path: ${path}`, error);\n        }\n    }\n}\n\n/**\n * Extracts the filename from a given path and removes the extension.\n */\nfunction extractFileName(path: string): string {\n    return path.split('/').pop()?.replace(/\\.\\w+$/, '') || 'UnnamedComponent';\n}\n","import './bootstrap';\nimport '../css/app.css';\n\n// Core Vue imports\nimport {createApp, defineAsyncComponent} from 'vue';\nimport App from './App.vue';\n\n// Store and Router\nimport {store} from './store';\nimport router from './router';\n\n// Plugins\nimport vuetify from './plugins/vuetify';\nimport i18n from './plugins/i18n/i18n';\nimport {initGtag} from './plugins/gtag';\nimport {initSentry} from './plugins/sentry';\nimport {plugin as VueTippy} from 'vue-tippy';\nimport 'tippy.js/dist/tippy.css';\nimport VCalendar from 'v-calendar';\nimport 'v-calendar/style.css';\nimport {VueDragula} from 'vue3-dragula';\nimport './plugins';\n/** Register Layouts */\nimport {registerLayouts} from './layouts/register';\nimport {createNotivue} from 'notivue'\n\n\nconst notivue = createNotivue({\n    position: 'top-center',\n    limit: 4,\n    enqueue: true,\n    avoidDuplicates: true,\n    notifications: {\n        global: {\n            duration: 2000\n        }\n    }\n})\n\n/** Initialize App */\nconst app = createApp(App)\n    .use(store)\n    .use(i18n)\n    .use(router)\n    .use(vuetify)\n    .use(VueTippy, {\n        directive: 'tippy', // => v-tippy\n        component: 'tippy', // => <tippy/>\n    })\n    .use(VCalendar, {\n        componentPrefix: 'vc',\n    })\n    .use(VueDragula, {\n        logging: {\n            service: true,\n        },\n    });\n\n/** Register Components */\napp.component('TheHelpLink', defineAsyncComponent(() =>\n    import('@/components/widgets/HelpLink.vue')\n));\napp.component('FwDivider', defineAsyncComponent(() =>\n    import('@/components/Global/Fleetify/fw-divider.vue')\n));\napp.component('FeatureTitle', defineAsyncComponent(() =>\n    import('@/components/dashboard/FeatureTitle.vue')\n));\n\napp.use(notivue);\n\n(async () => {\n    await registerLayouts(app);\n})();\n\n/** Initialize Plugins */\nif (navigator.onLine) {\n    initSentry(app);\n    initGtag(app, router);\n} else {\n    console.warn('Offline: Skipping Sentry and Google Analytics initialization.');\n}\n\n\n/** Mount App */\nrouter.isReady().then(() => {\n    app.mount('#app');\n});\n\nexport {app};\n","import {store} from '@/store';\n\n/**\n * @example see @/views/permission/Directive.vue\n */\nexport default function checkRole(value: string[]): boolean {\n    if (value && value instanceof Array && value.length > 0) {\n        const roles = store.getters['auth/roles'];\n        const requiredRoles = value;\n\n        return roles.some((role: string) => requiredRoles.includes(role));\n    }\n    console.error('Need roles! Like v-role=\"[\\'admin\\',\\'editor\\']\"');\n    return false;\n}\n","import {computed, ComputedRef} from 'vue';\nimport {useStore} from 'vuex';\nimport {AppFeatures} from '@/types';\n\ninterface FeatureWaitlist {\n    feature: string;\n}\n\nexport function useAppFeatures() {\n    const store = useStore();\n\n    const appFeatures: ComputedRef<AppFeatures> = computed(() => store.getters['app/appFeatures']);\n    const featureWaitlist = computed(() => store.getters['app/featureWaitlist']);\n\n\n    const canFilterByPaymentStatus = computed(() => appFeatures.value?.['canFilterByPaymentStatus'] || false);\n    const canUseSquareIntegration = computed(() => appFeatures.value?.['square-payment-profile'] || false);\n    const canUseBraintreeIntegration = computed(() => appFeatures.value?.['braintree-payment-profile'] || false);\n    const hasAxleIntegrationFeature = computed(() => appFeatures.value?.['axle-integration'] || false);\n    const hasPricingTemplateFeature = computed(() => appFeatures.value?.['pricing-template'] || false);\n    const hasStoreThemesFeature = computed(() => appFeatures.value?.['store-themes'] || false);\n    const hasRenterBlockFeature = computed(() => appFeatures.value?.['renter-block'] || false);\n\n    function hasWaitlistRequest(feature: string): boolean {\n        return featureWaitlist.value?.some((f: FeatureWaitlist) => f.feature === feature) ?? false;\n    }\n\n    function addFeatureWaitlist(featureWaitlist: FeatureWaitlist): void {\n        store.dispatch('app/addFeatureWaitlist', featureWaitlist);\n    }\n\n    function getFeatureWaitlist(): void {\n        store.dispatch('app/getFeatureWaitlist');\n    }\n\n    return {\n        appFeatures,\n        addFeatureWaitlist,\n        hasWaitlistRequest,\n        getFeatureWaitlist,\n\n        // computed\n        canFilterByPaymentStatus,\n        canUseSquareIntegration,\n        canUseBraintreeIntegration,\n        hasAxleIntegrationFeature,\n        hasPricingTemplateFeature,\n        hasStoreThemesFeature,\n        hasRenterBlockFeature,\n    }\n}","<template>\n  <div v-if=\"checkPermission(['settings_view'])\" class=\"mb-13\">\n    <h2 class=\"mt-8 mb-4 font-bold text-2xl\">General</h2>\n\n    <CompanyInformation/>\n  </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport {defineAsyncComponent} from 'vue';\nimport checkPermission from '@/utils/permission';\n\nconst CompanyInformation = defineAsyncComponent(() => import('@/components/dashboard/settings/general/CompanyInformation.vue'));\n</script>\n","import {useStore} from 'vuex';\nimport {computed} from 'vue';\nimport {TenantBranch} from '@/types';\n\nexport function useBranch() {\n    const store = useStore();\n\n    const branches = computed<TenantBranch[]>(() => store.getters['fleet/branches']);\n    const branch = computed<TenantBranch>(() => store.getters['fleet/branch']);\n    const branchLoading = computed(() => store.getters['fleet/loading']);\n\n    const getFleetBranches = async () => {\n        return await store.dispatch('fleet/getFleetBranches');\n    }\n\n    const createBranch = (branch: TenantBranch) => {\n        return store.dispatch('fleet/createBranch', branch);\n    }\n\n    const getFleetBranch = (uuid: string) => {\n        return store.dispatch('fleet/getFleetBranch', uuid);\n    }\n\n    const deleteFleetBranch = (uuid: string) => {\n        return store.dispatch('fleet/deleteBranch', uuid);\n    }\n    return {\n        branchLoading,\n        branch,\n        branches,\n        createBranch,\n        getFleetBranches,\n        deleteFleetBranch,\n        getFleetBranch,\n    }\n}","export default new Promise((res) => {\n  const script = document.createElement('script');\n  script.onload = () => res();\n  script.setAttribute('src', 'https://api.mapbox.com/search-js/v1.0.0-beta.13/web.js');\n  document.head.appendChild(script);\n});\n","<template>\n  <div class=\"w-full z-auto\">\n    <v-form>\n      <div>\n        <div class=\"input-fields map-col w-full\">\n          <v-text-field\n            v-show=\"!address2\"\n            id=\"mapbox-autofill\"\n            :density=\"dense ? 'compact' : 'default'\"\n            autocomplete=\"address-line1\"\n            class=\"mb-2 relative\"\n            hide-details\n            label=\"Address\"\n            variant=\"outlined\"\n          />\n\n          <v-text-field\n            v-if=\"address2\"\n            v-model=\"address2\"\n            :density=\"dense ? 'compact' : 'default'\"\n            autocomplete=\"address-line\"\n            class=\"mb-2 relative\"\n            hide-details\n            label=\"Address1\"\n            variant=\"outlined\"\n            @focus=\"address2 = ''\"\n          />\n\n          <div v-show=\"!expandForm\">\n            <v-btn size=\"small\" variant=\"text\" @click=\"expandForm = !expandForm\">Or Enter an address manually</v-btn>\n          </div>\n          <div v-if=\"!singleLineAddress\" v-show=\"expandForm\" class=\"secondary-inputs\">\n            <v-text-field\n              :density=\"dense ? 'compact' : 'default'\"\n              autocomplete=\"address-line2\"\n              class=\"mb-2\"\n              hide-details\n              label=\"Address Line 2\"\n              name=\"address-line2\"\n              variant=\"outlined\"\n            ></v-text-field>\n            <div class=\" mt-2\">\n              <v-text-field\n                :density=\"dense ? 'compact' : 'default'\"\n                autocomplete=\"address-level2\"\n                class=\"mb-2\"\n                hide-details\n                label=\"City\"\n                name=\"address-level2\"\n                variant=\"outlined\"\n              ></v-text-field>\n              <v-text-field\n                :density=\"dense ? 'compact' : 'default'\"\n                autocomplete=\"address-level1\"\n                class=\"mb-2\"\n                hide-details\n                label=\"State / Region\"\n                name=\"address-level1\"\n                variant=\"outlined\"\n              ></v-text-field>\n              <v-text-field\n                :density=\"dense ? 'compact' : 'default'\"\n                autocomplete=\"postal-code\"\n                class=\"mb-2\"\n                hide-details\n                label=\"ZIP / Postcode\"\n                name=\"postal-code\"\n                variant=\"outlined\"\n              ></v-text-field>\n            </div>\n          </div>\n        </div>\n\n        <div class=\"map-col\" style=\"width: 100%\">\n          <div id=\"minimap-container\" class=\"relative\" style=\"height: 240px; width: 350px\"></div>\n        </div>\n      </div>\n    </v-form>\n  </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport {onMounted, ref, toRefs} from 'vue';\nimport {get} from 'lodash';\nimport 'mapbox-gl/dist/mapbox-gl.css';\nimport mapboxScriptIsReady from '@/plugins/mapBoxAddressAutofillScript.js';\n\nconst ACCESS_TOKEN = 'pk.eyJ1IjoiZmxlZXR3aXJlIiwiYSI6ImNramV3ZXpvbjA3Z3Ayc21wbHkwNGluY2IifQ.203P27NF1jbVqCAuGKeYsQ';\n\nexport interface LocationData {\n  name: string,\n  address_line1: string,\n  address_line2: string,\n  address_level1: string,\n  address_level2: string,\n  postcode: string,\n  country: string,\n  country_code: string,\n  district: string,\n  neighborhood: string,\n  provider: string,\n  provider_id: string,\n  lat: number,\n  lng: number,\n}\n\nconst props = defineProps<{\n  dense?: boolean,\n  singleLineAddress?: boolean,\n}>();\n\nconst emit = defineEmits(['locationData']);\n\nconst {dense, singleLineAddress} = toRefs(props);\n\nconst expandForm = ref(false);\nconst address2 = ref('');\n\nconst setupMapBox = () => {\n  mapboxsearch.config.accessToken = ACCESS_TOKEN;\n\n  mapboxsearch.popoverOptions = {\n    placement: 'bottom-start',\n  }\n\n  const autofillCollection = mapboxsearch.autofill({\n    container: document.body,\n  });\n  const minimap = new MapboxAddressMinimap();\n  // minimap.canAdjustMarker = true;\n  minimap.satelliteToggle = true;\n  minimap.theme = {\n    variables: {\n      borderRadius: '18px',\n      boxShadow: '0 2px 8px #000'\n    }\n  }\n  minimap.onSaveMarkerLocation = (lnglat) => {\n    console.log(`Marker moved to ${lnglat}`);\n  };\n  const minimapContainer = document.getElementById('minimap-container');\n  minimapContainer.appendChild(minimap);\n\n  autofillCollection.addEventListener(\n    'retrieve',\n    async (e) => {\n      expandForm.value = true;\n      if (minimap) {\n        minimap.feature = e.detail.features[0];\n      }\n\n      const features = get(e, 'detail.features.0.properties');\n      const geometry = get(e, 'detail.features.0.geometry');\n      const locationData: LocationData = {\n        name: get(features, 'full_address'),\n        address_line1: get(features, 'address_line1'),\n        address_line2: get(features, 'address_line2'),\n        address_level1: get(features, 'address_level1'),\n        address_level2: get(features, 'address_level2'),\n        postcode: get(features, 'postcode'),\n        country: get(features, 'country'),\n        country_code: get(features, 'country_code'),\n        district: get(features, 'district'),\n        neighborhood: get(features, 'neighborhood'),\n        provider: 'mapbox',\n        provider_id: get(features, 'id'),\n        lat: get(geometry, 'coordinates.1'),\n        lng: get(geometry, 'coordinates.0'),\n      };\n      const singleLine = singleLineAddress.value;\n      address2.value = singleLine ? get(features, 'full_address') : locationData.address_line1;\n\n      emit('locationData', locationData);\n    },\n  );\n};\n\nonMounted(() => {\n  mapboxScriptIsReady.then(() => {\n    setupMapBox();\n  });\n});\n</script>\n\n<style>\n.map-col {\n  display: block;\n  max-width: 100%;\n  flex-shrink: 1;\n}\n\n.mapboxgl-ctrl-geocoder {\n  z-index: 1050 !important; /* Higher than dialog */\n  position: absolute !important;\n}\n\n.v-overlay__content {\n  overflow: visible !important; /* Allow content to overflow dialog */\n}\n\n@media screen and (min-width: 640px) {\n  .map-col {\n    width: auto;\n    flex: 1 1 0;\n  }\n}\n\n</style>\n","import {useStore} from 'vuex';\nimport {computed} from 'vue';\nimport {TaxCategory} from \"@/types\";\n\nexport function useTaxAndFee() {\n    const store = useStore();\n\n\n    const taxCategories = computed(() => store.getters['taxes/taxCategories']);\n    const taxForm = computed(() => store.getters['taxes/taxForm']);\n    const taxCategoryLoading = computed(() => store.getters['taxes/loading']);\n\n    const resetTaxFormErrors = () => {\n        store.commit('taxes/CLEAR_TAX_CATEGORY_FORM_ERRORS');\n    }\n\n    const setTaxCategory = (taxCategories: TaxCategory[]) => {\n        store.commit('taxes/SET_TAX_CATEGORIES', taxCategories);\n    }\n    const saveTaxCategory = (taxCategory: TaxCategory) => {\n        return store.dispatch('taxes/saveTaxCategory', taxCategory);\n    }\n    const deleteTaxCategory = (taxCategory: TaxCategory) => {\n        return store.dispatch('taxes/deleteTaxCategory', taxCategory);\n    }\n    const updateTaxCategory = (taxCategory: TaxCategory) => {\n        return store.dispatch('taxes/updateTaxCategory', taxCategory);\n    }\n    const taxCategorySetDefault = (taxCategory: TaxCategory) => {\n        return store.dispatch('taxes/taxCategorySetDefault', taxCategory);\n    }\n\n    const getTaxCategories = () => {\n        return store.dispatch('taxes/getTaxCategories');\n    }\n\n    return {\n        taxCategories,\n        taxForm,\n        taxCategoryLoading,\n        setTaxCategory,\n        resetTaxFormErrors,\n        saveTaxCategory,\n        deleteTaxCategory,\n        updateTaxCategory,\n        taxCategorySetDefault,\n        getTaxCategories,\n    }\n}","import {computed, ref, watch} from 'vue';\nimport {useStore} from 'vuex';\nimport {\n    BookingInterface,\n    CompanyInterface,\n    DraftListingInterface,\n    ListingInterface,\n    TripExtra,\n    VehicleClass,\n    VehicleDetail,\n    VehicleImageInterface\n} from '@/types';\nimport {DailyPrice} from '@/store/modules/listing';\nimport {snakeCase} from '@/utils/text';\nimport {getMetaBooleanValue} from '@/utils/meta';\nimport axios from 'axios';\nimport {push} from 'notivue';\n\nconst VEHICLE_STATUSES = ['available', 'dirty', 'out of service', 'for sale', 'sold', 'new', 'reserved', 'rental', 'maintenance', 'other'];\n\nconst mapToTitleCodeArray = (array: string[]) =>\n    array.map(item => ({\n        title: item.charAt(0).toUpperCase() + item.slice(1).toLowerCase(),\n        code: snakeCase(item),\n    }));\n\nexport function useListing(initialListing?: ListingInterface) {\n    const store = useStore();\n    const listing = ref<ListingInterface>(initialListing || null);\n    const isLoading = ref(false);\n    const errors = ref<Record<string, string[]>>({});\n\n    // Computed property to check if listing is loaded\n    const isLoaded = computed(() => !!listing.value);\n\n    // Watch for changes in the store's listing if we're working with the current listing\n    if (!initialListing) {\n        watch(\n            () => store.state.listing.listing,\n            (newListing) => {\n                if (newListing) {\n                    listing.value = {...newListing};\n                }\n            },\n            {immediate: true}\n        );\n    }\n\n    const initializeWithCurrentListing = () => {\n        const currentListing = store.getters['listing/currentListing'];\n\n        if (currentListing) {\n            listing.value = {...currentListing};\n        }\n    };\n\n    const updateListing = async (updates: Partial<ListingInterface>) => {\n        console.dir('updateListing');\n        console.dir(updates);\n        console.dir(listing.value);\n        if (!listing.value?.l_id) return;\n\n        console.dir(updates);\n\n        isLoading.value = true;\n        errors.value = {};\n\n        try {\n            const response = await axios.patch(`/v1/listings/${listing.value.l_id}`, updates);\n\n            // Check if the response has an error status\n            if (response.status >= 400) {\n                throw new Error(response.data.message || 'Update failed');\n            }\n\n            // Only update and show success if we get here (no errors)\n            listing.value = {...listing.value, ...response.data?.listing};\n\n            // Update store if this is the current listing\n            if (store.getters['listing/currentListing']?.l_id === listing.value.l_id) {\n                store.commit('listing/SET_CURRENT_LISTING', listing.value);\n            }\n\n            push.success({\n                message: 'Listing updated successfully!',\n            });\n        } catch (error) {\n            // Handle any type of error (validation, network, etc)\n            const errorData = error?.response?.data;\n            errors.value = errorData?.errors || {};\n\n            push.error({\n                message: errorData?.message || error.message || 'Failed to update listing',\n            });\n        } finally {\n            isLoading.value = false;\n        }\n    };\n\n    const updateField = async (path: string, value: any) => {\n        const updates: Record<string, any> = {};\n        updates[path] = value;\n        await updateListing(updates);\n    };\n\n    const resetListing = () => {\n        if (initialListing) {\n            listing.value = {...initialListing};\n        } else if (store.state.listing.listing) {\n            listing.value = {...store.state.listing.listing};\n        }\n        errors.value = {};\n    };\n\n    const availableVehicleStatuses = ref(mapToTitleCodeArray(VEHICLE_STATUSES));\n\n    const listingInit = computed(() => store.getters['listing/listingInit']);\n    const listings = computed<ListingInterface[]>(() => store.getters['listing/allListings']);\n    const listingLoading = computed(() => store.getters['listing/listingLoading']);\n    const listingForm = computed(() => store.getters['listing/form']);\n    const currentListing = computed<ListingInterface>(() => store.getters['listing/currentListing']);\n    const originalListing = computed<ListingInterface>(() => store.getters['listing/originalListing']);\n    const currentListingBookings = computed<BookingInterface[]>(() => store.getters['listing/currentListingBookings']);\n    const dailyPricing = computed(() => store.getters['listing/dailyPricing']);\n    const company = computed<CompanyInterface>(() => store.getters['company/company']);\n    const listingSnacks = computed(() => store.getters['listing/listingSnacks']);\n    const allVehicleFeatures = computed(() => store.getters['listing/allVehicleFeatures']);\n    const allListingsInit = computed(() => store.getters['listing/allListingsInit']);\n    const fleetResourceListings = computed(() => store.getters['listing/fleetResourceListings']);\n    const visibleListings = computed(() => store.getters['listing/visibleListings']);\n    const currentListingDailyPricing = computed<DailyPrice[]>(() => store.getters['listing/dailyPricing']);\n    const listingExtras = computed<TripExtra[]>(() => store.getters['listing/listingExtras']);\n\n    const listingDialogs = computed(() => store.getters['listing/dialogs']);\n\n\n    const setListingDialog = (topic: string, value: boolean = true) => {\n        store.commit('listing/SET_LISTING_DIALOG', {topic, value});\n    }\n\n    const allListingsAreArchived = computed(() => {\n        return listings.value.every((listing) => listing.archived_at);\n    });\n\n    const setUnavailablePeriod = async (payload: { l_id: string, start: string, end: string }) => {\n        return await store.dispatch('listing/setUnavailablePeriod', payload);\n    }\n\n    const currentListingVehicleOdometer = computed({\n        get: () => currentListing.value?.vehicle?.last_odometer_reading,\n        set: (value) => {\n            store.commit('listing/SET_LISTING_VEHICLE', {\n                last_odometer_reading: value,\n            });\n        }\n    });\n\n    const currentListingVehicleStatus = computed({\n        get() {\n            return currentListing.value?.vehicle?.status || '';\n        },\n        set(value) {\n            store.commit('listing/SET_EXISTING_LISTING_DATA', {\n                vehicle: {\n                    status: value,\n                },\n            });\n        },\n    });\n\n    const currentListingVehicleId = computed(() => currentListing.value?.vehicle?.v_id);\n\n    const resetCurrentListing = () => {\n        store.commit('listing/RESET_CURRENT_LISTING');\n    }\n\n    const fetchDailyPrices = async (payload: { l_id: string, start: string, end: string }) => {\n        return await store.dispatch('listing/fetchDailyPrices', payload);\n    }\n\n    const fetchCompanySingleListingExtras = async (listingId: string) => {\n        return await store.dispatch('listing/fetchCompanySingleListingExtras', listingId);\n    }\n\n    const updateVehicleDetails = async (payload: { l_id: string, details: VehicleDetail[] }) => {\n        return await store.dispatch('listing/updateVehicleDetails', payload);\n    }\n\n    const getVehicleFeatures = async (l_id: string) => {\n        return await store.dispatch('listing/getVehicleFeatures', l_id);\n    }\n\n    const fetchListings = async () => {\n        return await store.dispatch('listing/fetchListings');\n    };\n\n    const addListing = async (listing: ListingInterface) => {\n        try {\n            return await store.dispatch('listing/addListing', listing);\n        } catch (e) {\n            console.error(e);\n            throw e;\n        }\n    }\n\n    const setCurrentNewListing = (listing: ListingInterface | DraftListingInterface) => {\n        store.commit('listing/SET_CURRENT_NEW_LISTING', listing);\n    }\n\n    const allowsSecondaryDriver = computed(() => {\n        const listingLevel = currentListing.value?.use_secondary_driver;\n        if (!listingLevel) return false;\n\n        const companyLevel = getMetaBooleanValue('settings.security.use_secondary_driver');\n\n        return listingLevel || companyLevel;\n    });\n\n    const saveListing = async (listing: ListingInterface) => {\n        try {\n            return await store.dispatch('listing/saveListing', listing);\n        } catch (e) {\n            console.error(e);\n            throw e;\n        }\n    }\n    const fetchCompanySingleListings = async (listingId: string) => {\n        return await store.dispatch('listing/fetchCompanySingleListings', listingId);\n    }\n\n    const pauseListing = async (payload: { mode: string, listings: string[] }) => {\n        return await store.dispatch('listing/pauseListing', payload);\n    }\n    const deleteListingImage = async (imageId: string) => {\n        return await store.dispatch('listing/deleteListingImage', imageId);\n    }\n\n    const deleteListing = async (listing: ListingInterface) => {\n        return await store.dispatch('listing/deleteListing', listing);\n    }\n\n    const archiveListing = async (listing: ListingInterface) => {\n        return await store.dispatch('listing/archiveListing', listing);\n    }\n\n    const updateListingImageOrder = async (images: any) => {\n        return await store.dispatch('listing/updateListingImageOrder', images);\n    }\n\n    const fetchFleetResourcesListings = async (refresh = false) => {\n        return await store.dispatch('listing/fetchFleetResourcesListings', refresh);\n    }\n\n    const getVehicleIncidents = async (listingId: string) => {\n        return await store.dispatch('listing/getVehicleIncidents', listingId);\n    }\n\n    const resetAndReImportCarShareImages = async (listingId: string) => {\n        return await store.dispatch('listing/resetAndReImportCarShareImages', listingId);\n    }\n\n    const fetchAgencySingleListingBookings = async (listingId: string) => {\n        return await store.dispatch('company/fetchAgencySingleListingBookings', listingId);\n    }\n\n    const getListingPublicLink = (listing: ListingInterface): string => {\n        if (import.meta.env.MODE === 'production') {\n            const base = 'https://' + company.value.slug + '.fleetwire.io';\n            return `${base}/rental/reservations?l_id=${listing.l_id}`;\n        }\n\n        return `/rental/reservations?l_id=${listing.l_id}&company=${company.value.slug}`;\n    }\n\n    const listingVehicleStatus = (listing: ListingInterface) => {\n        const status = listing?.vehicle?.status;\n        if (!status) return status;\n        const theStatus = availableVehicleStatuses.value.find(s => s.code === status);\n        return theStatus?.title;\n    }\n\n    const listingNameDisplay = (listing: ListingInterface | { name: string }, characterLimit: number = -1): string => {\n        const name = listing?.name || '';\n\n        return characterLimit > 0 ?\n            `${name.substring(0, characterLimit)}${name.length > characterLimit ? '...' : ''}`\n            : name;\n    }\n\n    const currentListingAgeRequirements = computed(() => {\n        return currentListing.value?.age_requirements || [];\n    });\n\n    const currentListingName = computed({\n        get: () => currentListing.value?.name || '',\n        set: (value: string) => {\n            store.commit('listing/SET_EXISTING_LISTING_DATA', {\n                name: value,\n            });\n        }\n    });\n\n    const currentListingVehicleUnitId = computed({\n        get: () => currentListing.value?.vehicle?.unit_id || '',\n        set: (value: string) => {\n            store.commit('listing/SET_EXISTING_LISTING_DATA', {\n                vehicle: {\n                    unit_id: value,\n                },\n            });\n        }\n    });\n\n    const currentListingDescription = computed({\n        get: () => currentListing.value?.description?.replace(/[\\r\\n]+/g, '<br />') || '',\n        set: (value: string) => {\n            store.commit('listing/SET_EXISTING_LISTING_DATA', {\n                description: value,\n            });\n        }\n    });\n\n    const currentListingVehicleVin = computed({\n        get: () => currentListing.value?.vehicle?.vin || '',\n        set: (value: string) => {\n            store.commit('listing/SET_VEHICLE_VIN', value.toLocaleUpperCase());\n        }\n    });\n\n    const currentListingVehicleYear = computed({\n        get: () => currentListing.value?.vehicle?.year || '',\n        set: (value: string | number) => {\n            store.commit('listing/SET_VEHICLE_YEAR', Number(value));\n        }\n    });\n\n    const currentVehicleFeatures = computed({\n        get: () => store.getters['listing/currentVehicleFeatures'],\n        set: (value: string[]) => {\n            store.commit('listing/SET_VEHICLE_FEATURES', value);\n        }\n    });\n\n    const currentListingVehicleMake = computed({\n        get: () => currentListing.value?.vehicle?.make || '',\n        set: (value: string) => {\n            store.commit('listing/SET_VEHICLE_MAKE', value);\n        }\n    });\n\n    const currentListingVehicleModel = computed({\n        get: () => currentListing.value?.vehicle?.model || '',\n        set: (value: string) => {\n            store.commit('listing/SET_VEHICLE_MODEL', value);\n        }\n    });\n\n    const currentListingVehicleColor = computed({\n        get: () => currentListing.value?.vehicle?.color || '',\n        set: (value: string) => {\n            store.commit('listing/SET_VEHICLE_COLOR', value);\n        }\n    });\n\n    const currentListingVehicleNumberOfSeats = computed({\n        get: () => currentListing.value?.vehicle?.seats || 5,\n        set: (value: number) => {\n            store.commit('listing/SET_VEHICLE_SEATS', value);\n        }\n    });\n\n    const currentListingVehicleNumberOfDoors = computed({\n        get: () => currentListing.value?.vehicle?.doors || 4,\n        set: (value: number) => {\n            store.commit('listing/SET_VEHICLE_DOORS', value);\n        }\n    })\n\n    const currentListingVehiclePlate = computed({\n        get: () => currentListing.value?.vehicle?.plate || '',\n        set: (value: string) => {\n            store.commit('listing/SET_VEHICLE_PLATE', value);\n        }\n    });\n\n    const currentListingVehicleClass = computed({\n        get: () => currentListing.value?.vehicle?.vehicle_class,\n        set: (value: VehicleClass) => {\n            store.commit('listing/SET_VEHICLE_CLASS', value);\n        }\n    })\n\n    const currentListingVehicleClassName = computed(() => currentListingVehicleClass.value?.name);\n\n    const listingVehicleHasRemoteCapability = (listing: ListingInterface) => {\n        return listing?.vehicle?.has_remote_capability;\n    }\n\n    const listingVehicleHasConnectedBouncie = (listing: ListingInterface) => {\n        return listing.vehicle?.matched_bouncie_vehicle;\n    }\n\n    const listingVehicleImages = (listing: ListingInterface): VehicleImageInterface[] => {\n        return listing?.listing_images ?? [];\n    }\n\n    const listingVehicleImage = (listing: ListingInterface): string => {\n        const placeHolder = '/images/vehicle-placeholder.jpg';\n        const singleListingImage = listing?.listing_image;\n\n        if (singleListingImage) {\n            return singleListingImage;\n        }\n\n        return (listing?.listing_images?.[0]?.path) ?? placeHolder;\n    }\n\n    const listingVehicleDoorsDisplay = (listing: ListingInterface): number => listing?.vehicle?.doors;\n    const listingVehicleSeatsDisplay = (listing: ListingInterface): number => listing?.vehicle?.seats;\n    const listingVehicleYearMakeModelDisplay = (l: ListingInterface): string => {\n        const vehicleProperties = [\n            listingVehicleYearDisplay(l),\n            listingVehicleMakeDisplay(l),\n            listingVehicleModelDisplay(l)\n        ];\n\n        return vehicleProperties.filter(Boolean).join(' ');\n    }\n\n    const listingDescriptionDisplay = (listing: ListingInterface) => {\n        return listing?.description?.replace(/[\\r\\n]+/g, '<br />') || '';\n    }\n\n    const listingClass = (listing: ListingInterface) => {\n        return listing?.vehicle?.vehicle_class;\n    }\n\n    const listingClassNameDisplay = (listing: ListingInterface): string => {\n        return listingClass(listing)?.name || '';\n    }\n\n    const listingPeriodDisplay = (listing: ListingInterface): string => listing?.pricing?.price_period || 'Day';\n    const listingPriceDisplay = (listing: ListingInterface): number => listing?.pricing?.adjusted_amount || 0;\n    const listingVehicleYearDisplay = (listing: ListingInterface) => listing?.vehicle?.year;\n    const listingVehicleMakeDisplay = (listing: ListingInterface) => listing?.vehicle?.make;\n    const listingVehicleModelDisplay = (listing: ListingInterface) => listing?.vehicle?.model\n\n    const listingVehicleDetailsDisplay = (listing: ListingInterface): VehicleDetail[] => {\n        const details = listing?.vehicle?.details ?? [];\n        return details.filter(d => d.type === 'feature');\n    }\n\n    const currentListingChanges = computed(() => {\n        const originalClone = JSON.parse(JSON.stringify(originalListing.value));\n        const currentClone = JSON.parse(JSON.stringify(currentListing.value));\n\n        if (!currentClone || !originalClone) return {};\n\n        const listingChanges = {\n            l_id: currentClone.l_id,\n        };\n\n        const differences = {\n            pricing: [],\n            age_requirements: [],\n            vehicle: [],\n        };\n\n        for (const key of Object.keys(originalClone.pricing)) {\n            if (originalClone.pricing[key] !== currentClone.pricing[key]) {\n                differences.pricing.push(key);\n            }\n        }\n        for (const key of Object.keys(originalClone.age_requirements)) {\n            if (originalClone.age_requirements[key] !== currentClone.age_requirements[key]) {\n                differences.age_requirements.push(key);\n            }\n        }\n        for (const key of Object.keys(originalClone.vehicle)) {\n            if (originalClone.vehicle[key] !== currentClone.vehicle[key]) {\n                differences.vehicle.push(key);\n            }\n        }\n\n        // Iterating and setting values\n        for (const [name, data] of Object.entries(differences)) {\n            for (const value of data) {\n                listingChanges[`${name}.${value}`] = currentClone[name][value];\n            }\n        }\n\n        // Deleting properties\n        const propertiesToDelete = ['pricing', 'bookings', 'listing_images', 'age_requirements', 'commission_partners', 'provider_listings', 'vehicle'];\n        for (const prop of propertiesToDelete) {\n            delete originalClone[prop];\n            delete currentClone[prop];\n        }\n\n        // Finding and setting final differences\n        for (const key of Object.keys(originalClone)) {\n            if (originalClone[key] !== currentClone[key]) {\n                listingChanges[key] = currentClone[key];\n            }\n        }\n\n        return listingChanges;\n    });\n\n    /**\n     * Match a Provider with a listing\n     *\n     * */\n    const matchAListing = (listing: ListingInterface) => {\n        let providerAutoMatchedBy = null;\n        let theMatchedListing = null;\n\n        const vin = listing?.vehicle?.vin;\n        const unitId = listing?.unit_id;\n\n        if (vin) {\n            theMatchedListing = matchByVin(vin);\n            if (theMatchedListing) {\n                providerAutoMatchedBy = 'vin';\n            }\n        }\n        // If VIN didn't yield a match, try to match by Unit ID\n        else if (unitId) {\n            theMatchedListing = matchByUnitId(unitId);\n            if (theMatchedListing) {\n                providerAutoMatchedBy = 'Unit ID';\n            }\n        }\n\n        if (theMatchedListing) {\n            return {providerAutoMatchedBy, theMatchedListing};\n        }\n\n        return {providerAutoMatchedBy, theMatchedListing};\n    }\n\n    const matchByVin = (workingVin: string): ListingInterface | null => {\n        return listings.value.find((l) => {\n            const vin = listingVehicleVINDisplay(l);\n            return vin && vin.toUpperCase() === workingVin.toUpperCase();\n        });\n    }\n\n    const matchByUnitId = (workingUnitId: string): ListingInterface | null => {\n        return listings.value.find((l) => {\n            const unitId = l.vehicle?.unit_id;\n            return unitId && unitId.toUpperCase() === workingUnitId.toUpperCase();\n        });\n    }\n\n    const listingFilter = (itemTitle, queryText: string, item) => {\n        const searchText = queryText.toLowerCase();\n        const raw = item.raw; // Ensure we're working with `item.raw`\n\n        const keys = [\n            'name',\n            'l_id',\n            ['vehicle', 'unit_id'],\n            ['vehicle', 'vin'],\n            ['vehicle', 'year'],\n            ['vehicle', 'make'],\n            ['vehicle', 'model'],\n        ];\n\n        return keys.some(key => {\n            let value;\n\n            if (Array.isArray(key)) {\n                // Traverse nested keys safely\n                value = key.reduce((acc, k) => (acc && acc[k] !== undefined ? acc[k] : null), raw);\n            } else {\n                value = raw[key];\n            }\n\n            if (value !== null && value !== undefined) {\n                value = String(value).toLowerCase(); // Convert to string before applying `toLowerCase`\n                return value.includes(searchText); // Use `includes` instead of `indexOf`\n            }\n\n            return false;\n        });\n    };\n\n    const listingVehicleVINDisplay = (listing: ListingInterface, last4: boolean = false): string => {\n        const vin = listing?.vehicle?.vin || '';\n\n        if (!vin) return '';\n\n        return last4 && vin.length >= 4 ? vin.slice(-4) : vin;\n    }\n\n    const listingVehicleMatchedTuro = (listing: ListingInterface) => {\n        return listing?.vehicle?.matched_turo_vehicle;\n    }\n\n    const listingVehicleUnitId = (listing: ListingInterface) => {\n        return listing?.vehicle?.unit_id;\n    }\n\n    const listingVehicleLicensePlate = (listing: ListingInterface) => {\n        return listing?.vehicle?.plate\n    }\n\n    const listingVehicleBranch = (listing: ListingInterface) => {\n        return listing?.vehicle?.branch;\n    }\n\n    return {\n        listingDialogs,\n        setListingDialog,\n        listing,\n        isLoading,\n        errors,\n        isLoaded,\n        updateListing,\n        updateField,\n        resetListing,\n        initializeWithCurrentListing,\n        listingInit,\n        fleetResourceListings,\n        listingForm,\n        listings,\n        listingLoading,\n        currentListing,\n        originalListing,\n        currentListingChanges,\n        currentListingBookings,\n        dailyPricing,\n        listingSnacks,\n        allVehicleFeatures,\n        currentVehicleFeatures,\n        allowsSecondaryDriver,\n        allListingsAreArchived,\n        currentListingVehicleOdometer,\n        currentListingVehicleStatus,\n        currentListingVehicleId,\n        currentListingName,\n        currentListingAgeRequirements,\n        currentListingVehicleUnitId,\n        currentListingDescription,\n        currentListingVehicleVin,\n        currentListingVehicleYear,\n        currentListingVehicleMake,\n        currentListingVehicleModel,\n        currentListingVehicleColor,\n        currentListingVehicleNumberOfSeats,\n        currentListingVehicleNumberOfDoors,\n        currentListingVehiclePlate,\n        currentListingVehicleClass,\n        currentListingVehicleClassName,\n        allListingsInit,\n        visibleListings,\n        currentListingDailyPricing,\n        availableVehicleStatuses,\n        listingExtras,\n        setUnavailablePeriod,\n        listingVehicleMatchedTuro,\n        listingVehicleUnitId,\n        listingVehicleLicensePlate,\n        listingVehicleBranch,\n        listingVehicleHasConnectedBouncie,\n        listingVehicleHasRemoteCapability,\n        matchAListing,\n        fetchFleetResourcesListings,\n        listingVehicleImages,\n        listingFilter,\n        getListingPublicLink,\n        listingVehicleStatus,\n        fetchDailyPrices,\n        fetchListings,\n        pauseListing,\n        getVehicleIncidents,\n        saveListing,\n        resetCurrentListing,\n        fetchCompanySingleListings,\n        setCurrentNewListing,\n        addListing,\n        deleteListing,\n        archiveListing,\n        deleteListingImage,\n        updateListingImageOrder,\n        resetAndReImportCarShareImages,\n        fetchAgencySingleListingBookings,\n        listingVehicleImage,\n        listingNameDisplay,\n        listingVehicleYearDisplay,\n        listingVehicleMakeDisplay,\n        listingVehicleModelDisplay,\n        listingPriceDisplay,\n        listingPeriodDisplay,\n        listingVehicleDoorsDisplay,\n        listingVehicleSeatsDisplay,\n        listingVehicleYearMakeModelDisplay,\n        listingDescriptionDisplay,\n        listingVehicleVINDisplay,\n        listingVehicleDetailsDisplay,\n        listingClassNameDisplay,\n        updateVehicleDetails,\n        getVehicleFeatures,\n        fetchCompanySingleListingExtras,\n    }\n}","import {reactive, watch} from 'vue';\nimport getDefaultMeta, {getMetaBooleanValue} from '@/utils/meta';\nimport {useCompany} from '@/composables/useCompany';\n\ntype MetaType = 'boolean' | 'string' | 'number';\ntype MetaConfig = {\n    type: MetaType;\n    default?: any;\n};\n\nexport function useDefaultMeta(keys: Record<string, MetaConfig>) {\n    const {defaultMeta, addDefaultMeta, companyMetaForm} = useCompany();\n    const state = reactive<Record<string, any>>({});\n\n    const getValue = (key: string, config: MetaConfig) => {\n        const {type, default: fallback} = config;\n\n        switch (type) {\n            case 'boolean': {\n                const val = getMetaBooleanValue(key);\n                return val ?? fallback ?? false;\n            }\n            case 'number': {\n                const val = Number(getDefaultMeta(key));\n                return isNaN(val) ? (fallback ?? 0) : val;\n            }\n            case 'string': {\n                const val = getDefaultMeta(key);\n                return val ?? fallback ?? '';\n            }\n            default:\n                return fallback ?? '';\n        }\n    };\n\n    const initialize = () => {\n        Object.entries(keys).forEach(([key, config]) => {\n            state[key] = getValue(key, config);\n        });\n    };\n\n    initialize();\n\n    watch(\n        defaultMeta,\n        initialize,\n        {immediate: true}\n    );\n\n    const updateDefaultMeta = (key: string, value: any) => {\n        state[key] = value;\n        companyMetaForm.value?.errors?.clear(key);\n        return addDefaultMeta({meta: [{key, value}]});\n    };\n\n    return {\n        state,\n        updateDefaultMeta,\n    };\n}","<template>\n  <div class=\"space-y-6\">\n    <div class=\"md:grid md:grid-cols-3 md:gap-6\">\n      <div class=\"md:col-span-1\">\n        <div class=\"px-4 sm:px-0\">\n          <h3 class=\"text-lg font-medium text-gray-900 dark:text-gray-100\">Global Price Adjustment</h3>\n          <p class=\"mt-1 text-sm text-gray-600 dark:text-gray-400\">\n            Adjust all your listing prices at once. You can add a fixed amount or percentage to every listing's base\n            price.\n          </p>\n        </div>\n      </div>\n\n      <div class=\"mt-4 md:mt-0 md:col-span-2\">\n        <v-card class=\"mb-5\">\n          <v-card-text>\n            <div class=\"space-y-4 \">\n              <div class=\"flex flex-col sm:flex-row items-start gap-4\">\n                <v-btn-toggle\n                  v-model=\"settings['global_listing_price_adjustment_mode']\"\n                  class=\"mt-1\"\n                  group\n                  mandatory\n                  @update:model-value=\"val => updateDefaultMeta('global_listing_price_adjustment_mode', val)\"\n                >\n                  <v-btn v-tippy content=\"Fixed amount\" size=\"small\" value=\"amount\">\n                    <v-icon>mdi-cash</v-icon>\n                  </v-btn>\n                  <v-btn v-tippy content=\"Percentage\" size=\"small\" value=\"percent\">\n                    <v-icon>mdi-percent</v-icon>\n                  </v-btn>\n                </v-btn-toggle>\n\n                <v-text-field\n                  v-model=\"displayPriceAdjustmentValue\"\n                  :prefix=\"settings['global_listing_price_adjustment_mode'] === 'amount' ? companyMoneyTextInputSettings.prefix : ''\"\n                  :rules=\"adjustmentRules\"\n                  :suffix=\"settings['global_listing_price_adjustment_mode'] === 'amount' ? companyMoneyTextInputSettings.suffix : '%'\"\n                  class=\"w-full sm:w-auto\"\n                  label=\"Adjustment value\"\n                  type=\"number\"\n                  variant=\"outlined\"\n                  @blur=\"handlePriceAdjustmentUpdate\"\n                  @keyup.enter=\"handlePriceAdjustmentUpdate; $event.target.blur()\"\n                />\n              </div>\n              <div class=\"text-sm text-gray-600 dark:text-gray-400\">\n                <p v-if=\"settings['global_listing_price_adjustment_mode'] === 'amount'\">\n                  This will add a fixed amount to every listing's base price.\n                </p>\n                <p v-else>\n                  This will adjust every listing's price by this percentage.\n                </p>\n              </div>\n            </div>\n          </v-card-text>\n        </v-card>\n      </div>\n    </div>\n  </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport {computed, ref, watch} from 'vue';\nimport {useMoneyFormatter} from '@/composables/useMoneyFormatter';\nimport {useDefaultMeta} from '@/composables/useDefaultMeta';\nimport {useAuth} from '@/composables/useAuth';\n\nconst {companyMoneyTextInputSettings} = useMoneyFormatter();\nconst {fetchSession} = useAuth();\n\nconst {state: settings, updateDefaultMeta} = useDefaultMeta({\n  'global_listing_price_adjustment_value': {type: 'number'},\n  'global_listing_price_adjustment_mode': {type: 'string'},\n});\n\nconst displayPriceAdjustmentValue = ref(0);\n\n// Validation\nconst validators = {\n  amount: (val: number) => {\n    if (isNaN(val)) return 'Amount must be a number';\n    if (val < 0) return 'Amount cannot be negative';\n    if (val > 100000) return 'Amount is too high';\n    return true;\n  },\n  percent: (val: number) => {\n    if (isNaN(val)) return 'Percent must be a number';\n    if (val < 0 || val > 100) return 'Percent must be between 0 and 100';\n    return true;\n  }\n};\n\nconst adjustmentRules = computed(() => [\n  settings['global_listing_price_adjustment_mode'] === 'percent'\n    ? validators.percent\n    : validators.amount\n]);\n\n\n// Handlers\nconst handlePriceAdjustmentUpdate = () => {\n  const mode = settings['global_listing_price_adjustment_mode'];\n  const value = displayPriceAdjustmentValue.value;\n  let storedValue = mode === 'amount' ? value * 100 : value;\n\n  if (storedValue < 0) {\n    displayPriceAdjustmentValue.value = 0;\n    return;\n  }\n\n  if (mode === 'percent' && storedValue > 100) {\n    storedValue = 100;\n    displayPriceAdjustmentValue.value = 100;\n  }\n\n  updateDefaultMeta('global_listing_price_adjustment_value', storedValue).then(() => {\n    fetchSession();\n  });\n};\n\n// Watchers\nwatch(\n  () => settings['global_listing_price_adjustment_value'],\n  (value) => {\n    const raw = +value || 0;\n    displayPriceAdjustmentValue.value =\n      settings['global_listing_price_adjustment_mode'] === 'amount'\n        ? raw * 0.01\n        : raw;\n  },\n  {immediate: true}\n);\n\nwatch(\n  () => settings['global_listing_price_adjustment_mode'],\n  (newMode, oldMode) => {\n    const currentValue = +settings['global_listing_price_adjustment_value'] || 0;\n\n    if (newMode === 'amount' && oldMode === 'percent') {\n      const newAmountInCents = currentValue * 100;\n      updateDefaultMeta('global_listing_price_adjustment_value', newAmountInCents);\n      displayPriceAdjustmentValue.value = newAmountInCents * 0.01;\n    } else if (newMode === 'percent' && oldMode === 'amount') {\n      const newPercent = currentValue * 0.01;\n      if (newPercent > 100) {\n        updateDefaultMeta('global_listing_price_adjustment_value', 10);\n        displayPriceAdjustmentValue.value = 10;\n      } else {\n        updateDefaultMeta('global_listing_price_adjustment_value', newPercent);\n        displayPriceAdjustmentValue.value = newPercent;\n      }\n    }\n  }\n);\n</script>\n","<template>\n  <div class=\"space-y-6\">\n    <div class=\"md:grid md:grid-cols-3 md:gap-6\">\n      <div class=\"md:col-span-1\">\n        <div class=\"px-4 sm:px-0\">\n          <h3 class=\"text-lg font-medium text-gray-900 dark:text-gray-100\">General</h3>\n          <p class=\"mt-1 text-sm text-gray-600 dark:text-gray-400\">\n            Configure how currency is displayed across your fleet. This affects all money values shown in the app,\n            booking emails, SMS notifications, and Stripe payments.\n            Need a different currency? Contact support to have it added.\n          </p>\n        </div>\n      </div>\n\n\n      <div class=\"mt-4 md:mt-0 md:col-span-2\">\n        <v-card :disabled=\"companyLoading.saveCurrency\" class=\"mb-5\">\n          <v-card-text>\n            <div class=\"space-y-4\">\n              <v-select\n                v-model=\"settings['settings.pricing.currency.currency']\"\n                :items=\"appCurrencies\"\n                class=\"w-full\"\n                item-title=\"name\"\n                item-value=\"code\"\n                label=\"Currency\"\n                variant=\"outlined\"\n                @update:model-value=\"val => updateDefaultMeta('settings.pricing.currency.currency', val)\"\n              >\n                <template v-slot:item=\"{ props, item }\">\n                  <v-list-item v-bind=\"props\">\n                    {{ item.raw.name }} ({{ item.raw.code }}) {{ item.raw.symbol }}\n                  </v-list-item>\n                </template>\n                <template v-slot:selection=\"{ item }\">\n                  <v-list-item>\n                    {{ item.raw.name }} ({{ item.raw.code }}) {{ item.raw.symbol }}\n                  </v-list-item>\n                </template>\n              </v-select>\n\n              <div class=\"text-sm\">\n                <b>Example:</b> {{ currencyExample }}\n              </div>\n\n              <div class=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\n                <v-select\n                  v-model=\"settings['settings.pricing.currency.format']\"\n                  :items=\"currencyDisplay\"\n                  class=\"w-full\"\n                  item-title=\"name\"\n                  item-value=\"value\"\n                  label=\"Display currency as\"\n                  variant=\"outlined\"\n                  @update:model-value=\"val => updateDefaultMeta('settings.pricing.currency.format', val)\"\n                />\n                <v-select\n                  v-model=\"settings['settings.pricing.currency.position']\"\n                  :items=\"currencyPosition\"\n                  class=\"w-full\"\n                  item-title=\"name\"\n                  item-value=\"value\"\n                  label=\"Currency position\"\n                  variant=\"outlined\"\n                  @update:model-value=\"val => updateDefaultMeta('settings.pricing.currency.position', val)\"\n                />\n              </div>\n            </div>\n          </v-card-text>\n        </v-card>\n      </div>\n    </div>\n\n    <GlobalPriceAdjustment/>\n  </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport {computed, ref, watch} from 'vue';\nimport GlobalPriceAdjustment from '@/components/dashboard/settings/pricing/GlobalPriceAdjustment.vue';\nimport {useCompany} from '@/composables/useCompany';\nimport {useAppSettings} from '@/composables/useAppSettings';\nimport {useDefaultMeta} from '@/composables/useDefaultMeta';\n\n\ninterface CurrencyShape {\n  decimal: string;\n  format: string;\n  name: string;\n  precision: number;\n  symbol: string;\n  thousand: string;\n}\n\ninterface DisplayOption {\n  name: string;\n  value: string;\n}\n\nconst DEFAULT_CURRENCY: CurrencyShape = {\n  decimal: '.',\n  format: '%s%v',\n  name: 'USD',\n  precision: 2,\n  symbol: '$',\n  thousand: ',',\n};\n\n// Composables\nconst {company, companyLoading} = useCompany();\nconst {appCurrencies, currentCurrency, fetchCurrency} = useAppSettings();\nconst {state: settings, updateDefaultMeta} = useDefaultMeta({\n  'settings.pricing.currency.format': {type: 'string', default: 'symbol'},\n  'settings.pricing.currency.position': {type: 'string', default: 'left'},\n  'settings.pricing.currency.currency': {type: 'string', default: 'USD'},\n});\n\n\nconst currentLocalCurrency = ref<CurrencyShape>({...DEFAULT_CURRENCY});\n\nconst currencyExample = computed(() => {\n  const example = '312.00';\n  const displaySymbol = settings['settings.pricing.currency.format'] === 'symbol';\n  const symbol = displaySymbol ? currentLocalCurrency.value.symbol : currentLocalCurrency.value.name;\n\n  return settings['settings.pricing.currency.position'] === 'left'\n    ? `${symbol} ${example}`\n    : `${example} ${symbol}`;\n});\n\nconst currencyDisplay = computed<DisplayOption[]>(() => [\n  {name: `Symbol (${currentLocalCurrency.value.symbol})`, value: 'symbol'},\n  {name: `Code (${currentLocalCurrency.value.name})`, value: 'code'},\n]);\n\nconst currencyPosition = computed<DisplayOption[]>(() => [\n  {name: `${currentLocalCurrency.value.symbol} 123.00`, value: 'left'},\n  {name: `123.00 ${currentLocalCurrency.value.symbol}`, value: 'right'},\n]);\n\n// Watchers\nwatch(company, (newCompany) => {\n  if (newCompany?.uuid) {\n    currentLocalCurrency.value = {...newCompany.currency};\n  }\n}, {immediate: true});\n\nwatch(() => settings['settings.pricing.currency.currency'], (code) => {\n  if (code) fetchCurrency(code);\n});\n\nwatch(currentCurrency, (currency) => {\n  if (!currency) return;\n\n  currentLocalCurrency.value = {\n    ...DEFAULT_CURRENCY,\n    name: currency.name,\n    symbol: currency.symbol ?? DEFAULT_CURRENCY.symbol,\n  };\n});\n</script>\n","import {useStore} from 'vuex';\nimport {computed} from 'vue';\nimport {Coupon, StoreLoaders} from '@/types';\n\nexport function useCoupons() {\n    const store = useStore();\n\n    const coupons = computed<Coupon[]>(() => store.getters['coupon/coupons']);\n    const couponLoading = computed<StoreLoaders>(() => store.getters['coupon/loading']);\n\n    const couponForm = computed(() => store.getters['coupon/form']);\n    const couponRedemptions = computed(() => store.getters['coupon/redemptions']);\n\n    const fetchCoupons = async () => {\n        return await store.dispatch('coupon/fetchCoupons');\n    }\n\n    const clearCoupons = async () => {\n        return store.commit('coupon/SET_COUPONS', []);\n    }\n\n    const createCoupon = async (coupon: Coupon) => {\n        return await store.dispatch('coupon/createCoupon', coupon);\n    }\n    const updateCoupon = async (coupon: Coupon) => {\n        couponForm.value.errors.clear();\n        return await store.dispatch('coupon/updateCoupon', coupon);\n    }\n    const deleteCoupon = async (couponUuid: string) => {\n        return await store.dispatch('coupon/deleteCoupon', couponUuid);\n    }\n\n    const getCouponRedemptions = async (coupon: string) => {\n        return await store.dispatch('coupon/redemptions', coupon);\n    }\n\n    const currentCouponReset = async (coupon: Coupon) => {\n        return await store.dispatch('coupon/currentCouponReset', coupon);\n    }\n\n    const toggleCouponActive = async (coupon: Coupon) => {\n        return await store.dispatch('coupon/toggleCouponActive', coupon);\n    }\n\n    const multiCouponToggle = async (coupons: Coupon[]) => {\n        return await store.dispatch('coupon/multiCouponToggle', coupons);\n    }\n\n    const multiCouponDelete = async (coupons: Coupon[]) => {\n        return await store.dispatch('coupon/multiCouponDelete', coupons);\n    }\n\n    return {\n        coupons,\n        couponLoading,\n        couponForm,\n        couponRedemptions,\n        fetchCoupons,\n        createCoupon,\n        updateCoupon,\n        deleteCoupon,\n        getCouponRedemptions,\n        currentCouponReset,\n        toggleCouponActive,\n        multiCouponToggle,\n        multiCouponDelete,\n        clearCoupons,\n    }\n}","import {computed, ref} from 'vue';\nimport {Coupon} from '@/types';\n\nexport function useCouponForm() {\n    const couponClone = ref<Coupon>({\n        uuid: '',\n        code: '',\n        type: 'percent',\n        amount: 20,\n        limit: -1,\n        count: 10,\n        reason: '',\n        notes: '',\n        start_at: '',\n        end_at: '',\n        schedule: true,\n        active: true,\n        listings: [],\n        user_limit: -1\n    });\n\n    const currentCouponListings = ref(true);\n    const currentCouponUsersOn = ref(false);\n    const currentCouponUsers = ref(1);\n    const couponLimit = ref(false);\n    const couponFormValid = ref(false);\n\n    const currentCouponAmount = computed({\n        get() {\n            const amount = couponClone.value.amount;\n            return couponClone.value.type === 'amount' ? amount * 0.01 : amount;\n        },\n        set(value) {\n            couponClone.value.amount = couponClone.value.type === 'amount' ? value * 100 : value;\n        }\n    });\n\n    const couponRules = computed(() => ({\n        reason: couponClone.value.reason ? [\n            couponClone.value.reason.length <= 40 || 'Max 40 characters'\n        ] : [],\n        code: [\n            couponClone.value.code.length > 0 || 'Coupon code is required',\n            couponClone.value.code.length <= 200 || 'Max 200 characters'\n        ],\n        amount: couponClone.value.type === 'percent'\n            ? [(couponClone.value.amount > 0 && couponClone.value.amount <= 100) || 'A percent based discount must be between 0 and 100 percent.']\n            : [(couponClone.value.amount > 0 && couponClone.value.amount < 1000000000) || 'An amount based discount must be between 0 and 10,000,000.']\n    }));\n\n    const resetForm = () => {\n        couponClone.value = {\n            uuid: '',\n            code: '',\n            type: 'percent',\n            amount: 20,\n            limit: -1,\n            count: 10,\n            reason: '',\n            notes: '',\n            start_at: '',\n            end_at: '',\n            schedule: true,\n            active: true,\n            listings: [],\n            user_limit: -1\n        };\n        currentCouponListings.value = true;\n        currentCouponUsersOn.value = false;\n        currentCouponUsers.value = 1;\n        couponLimit.value = false;\n        couponFormValid.value = false;\n    };\n\n    const updateListings = (listings: any[]) => {\n        if (currentCouponListings.value) {\n            couponClone.value.listings = [];\n        } else {\n            couponClone.value.listings = listings;\n        }\n    };\n\n    const updateUserLimit = () => {\n        if (currentCouponUsersOn.value) {\n            couponClone.value.user_limit = +currentCouponUsers.value === -1 ? 1 : +currentCouponUsers.value;\n            currentCouponUsers.value = couponClone.value.user_limit;\n        } else {\n            couponClone.value.user_limit = -1;\n        }\n    };\n\n    return {\n        couponClone,\n        currentCouponListings,\n        currentCouponUsersOn,\n        currentCouponUsers,\n        couponLimit,\n        couponFormValid,\n        currentCouponAmount,\n        couponRules,\n        resetForm,\n        updateListings,\n        updateUserLimit\n    };\n} ","<template>\n  <div>\n    <v-card max-width=\"100%\">\n      <v-alert\n        v-if=\"!includedInSubscription('coupons')\"\n        class=\"card-alert-full\"\n        density=\"compact\"\n        type=\"warning\"\n      >\n        <div class=\"sm:flex block\">\n          <div class=\"flex-grow\">Coupons are a standard & premium feature.</div>\n          <v-btn :to=\"{name: 'settings.account'}\" class=\"flex-shrink\" size=\"x-small\">Upgrade</v-btn>\n        </div>\n      </v-alert>\n\n      <v-card-title style=\"margin-top: 5px\">\n        <FeatureTitle\n          featurePremium\n          featureStandard\n          title=\"Coupons\"\n        />\n      </v-card-title>\n\n      <v-card-text>\n\n        <div v-if=\"couponsExist\">\n          <v-text-field\n            v-model=\"search\"\n            append-icon=\"mdi-search\"\n            class=\"mb-2\"\n            hide-details\n            label=\"Search\"\n            variant=\"outlined\"\n          ></v-text-field>\n          <div class=\"relative overflow-x-auto shadow-md sm:rounded-lg\">\n            <table class=\"w-full text-sm text-left text-gray-500 dark:text-gray-400\">\n              <thead class=\"text-xs text-gray-700 uppercase bg-gray-50 dark:bg-gray-700 dark:text-gray-400\">\n              <tr>\n                <th class=\"px-6 py-3\" scope=\"col\">Code</th>\n                <th class=\"px-6 py-3\" scope=\"col\">Type</th>\n                <th class=\"px-6 py-3\" scope=\"col\">Amount</th>\n                <th class=\"px-6 py-3\" scope=\"col\">Active</th>\n                <th class=\"px-6 py-3\" scope=\"col\">Listings</th>\n                <th class=\"px-6 py-3\" scope=\"col\">Limit</th>\n              </tr>\n              </thead>\n              <tbody>\n              <tr v-for=\"item in couponsFiltered\" :key=\"item.uuid\">\n                <th class=\"px-6 py-4 font-medium text-gray-900 whitespace-nowrap dark:text-white\" scope=\"row\">\n                  <span style=\"cursor: pointer\" @click=\"editCode(item)\">{{ item.code }}</span>\n                </th>\n                <td class=\"px-6 py-4\">\n                  {{ item.type }}\n                </td>\n                <td class=\"px-6 py-4\">\n                 <span v-if=\"item.type === 'amount'\">\n                    {{ formatMoneyDisplayV2(item.amount) }}\n                  </span>\n                  <span v-else>{{ item.amount }}<small class=\"ml-1\">%</small></span>\n                </td>\n                <td class=\"px-6 py-4\">\n                  <span v-if=\"item.active\" class=\"text-green-500\">Active</span>\n                  <span v-else class=\"text-red-500\">Inactive</span>\n                </td>\n                <td class=\"px-6 py-4\">\n                  {{\n                  item.listings?.length === 0 || fleetResourceListings.length === item.listings?.length ? 'All' :\n                  item.listings?.length\n                  }}\n                </td>\n                <td class=\"px-6 py-4\">\n                <span v-if=\"item.limit < 0\">{{ item.count || 0 }}/<v-icon\n                  size=\"small\">mdi-infinity</v-icon></span>\n                  <span v-else>{{ item.count || 0 }}/{{ item.limit }}</span>\n                </td>\n              </tr>\n              </tbody>\n            </table>\n          </div>\n        </div>\n\n        <div v-else>No Coupons Yet</div>\n      </v-card-text>\n      <v-card-actions>\n        <v-btn\n          :disabled=\"!includedInSubscription('coupons')\"\n          :loading=\"couponLoading.company\"\n          class=\"ml-2\"\n          @click=\"importCoupons()\"\n        >\n          Import\n        </v-btn>\n        <v-spacer/>\n        <v-btn\n          :disabled=\"!includedInSubscription('coupons')\"\n          :loading=\"couponLoading.company\"\n          class=\"mr-2\"\n          @click=\"addCoupon()\"\n        >\n          Add Coupon\n        </v-btn>\n      </v-card-actions>\n    </v-card>\n\n    <v-dialog v-model=\"importCouponsDialog\" :scrim=\"false\" fullscreen transition=\"dialog-bottom-transition\">\n      <v-card>\n        <v-toolbar color=\"primary\" theme=\"dark\">\n          <v-btn theme=\"dark\" variant=\"text\" @click=\"importCouponsDialog = false\">\n            <v-icon>mdi-close</v-icon>\n          </v-btn>\n          <v-toolbar-title>Import Coupons</v-toolbar-title>\n          <v-spacer></v-spacer>\n          <v-toolbar-items>\n            <v-btn theme=\"dark\" variant=\"text\" @click=\"importCouponsDialog = false\">Okay</v-btn>\n          </v-toolbar-items>\n        </v-toolbar>\n        <v-list lines=\"three\">\n          <v-list-item>\n\n            <v-list-item-title>Coming soon</v-list-item-title>\n            <v-list-item-subtitle>Ability to import a large number of coupon codes.\n            </v-list-item-subtitle>\n\n          </v-list-item>\n        </v-list>\n        <v-divider/>\n      </v-card>\n    </v-dialog>\n\n    <v-dialog v-model=\"couponDialog\" :max-width=\"couponTab === 1 ? 600 : 850\" :persistent=\"couponDialogMode === 'add'\">\n      <v-form v-model=\"couponFormValid\" :disabled=\"couponForm.busy\">\n        <v-card :loading=\"couponForm.busy\">\n          <v-scroll-y-transition hide-on-leave>\n            <v-card-title v-if=\"couponTab === 1\">\n              <div class=\"flex\">\n                <span class=\"text-h5\">{{ couponDialogTitle }}</span>\n                <v-spacer/>\n                <div class=\"flex items-center\">\n                  <span class=\"text-muted mr-3\">{{ couponClone.active ? 'Active' : 'Inactive' }}</span>\n                  <v-switch v-model=\"couponClone.active\" :inset=\"true\" color=\"green\" density=\"compact\" hide-details></v-switch>\n                </div>\n              </div>\n            </v-card-title>\n          </v-scroll-y-transition>\n\n          <v-window v-model=\"couponTab\">\n            <v-window-item :value=\"1\">\n              <v-card-text v-if=\"couponDialogMode === 'add'\">\n                <div class=\"coupon-form\">\n                  <v-text-field\n                    v-model=\"couponClone.code\"\n                    :error=\"couponForm.errors.has('code')\"\n                    :rules=\"couponRules.code\"\n                    class=\"coupon-code mx-2\"\n                    label=\"Code\"\n                    name=\"code\"\n                    required\n                    variant=\"outlined\"\n                    @keyup=\"store.commit('coupon/CLEAR_COUPON_FORM_ERRORS', 'code')\"\n                  ></v-text-field>\n\n                  <v-btn-toggle v-model=\"couponClone.type\" class=\"coupon-type-btn ml-2 h-100\" mandatory>\n                    <v-btn value=\"percent\">\n                      <span class=\"bold\">%</span>\n                    </v-btn>\n                    <v-btn value=\"amount\">\n                      <span class=\"bold\">{{ companyCurrencySymbol() }}</span>\n                    </v-btn>\n                  </v-btn-toggle>\n\n                  <v-text-field\n                    v-model=\"currentCouponAmount\"\n                    :prefix=\"couponClone.type === 'amount' ? companyMoneyTextInputSettings.prefix : ''\"\n                    :rules=\"couponRules.amount\"\n                    :suffix=\"couponClone.type === 'percent' ? '%' : companyMoneyTextInputSettings.suffix\"\n                    class=\"coupon-value\"\n                    variant=\"outlined\"\n                  />\n                </div>\n                <div class=\"limit-section mt-4\">\n                  <v-checkbox\n                    v-model=\"couponLimit\"\n                    class=\"mb-2\"\n                    label=\"Limit the total number of times this coupon can be redeemed\"\n                  ></v-checkbox>\n                  <v-text-field\n                    v-show=\"couponLimit\"\n                    v-model=\"couponClone.limit\"\n                    class=\"mt-2\"\n                    hint=\"How many times can this coupon be used?\"\n                    label=\"Limit\"\n                    min=\"0\"\n                    persistent-hint\n                    type=\"number\"\n                    variant=\"outlined\"\n                  ></v-text-field>\n                </div>\n                <span class=\"small italic\">There will be more coupon settings once created.</span>\n\n                <v-scroll-x-transition>\n                  <v-alert v-if=\"couponForm.errors.any()\" class=\"mt-3\" density=\"compact\" type=\"error\" variant=\"outlined\">\n                    <div v-for=\"(error, key) in couponForm.errors.flatten()\" :key=\"key\">\n                      {{ error }}\n                    </div>\n                  </v-alert>\n                </v-scroll-x-transition>\n              </v-card-text>\n              <v-card-text v-else-if=\"couponClone\">\n                <h5 class=\"mb-2 text-3xl font-bold text-gray-900 dark:text-white\">{{ couponClone.code }}</h5>\n                <p>{{ couponClone.type === 'amount' ? 'Fixed amount discount' : 'Percentage discount' }}\n                  ({{\n                  couponClone.type === 'amount' ? formatMoneyDisplayV2(currentCouponAmount, false) :\n                  `${currentCouponAmount}%`\n                  }})\n                </p>\n                <p>{{ couponClone.limit >= 0 ? `Limited to ${couponClone.limit} uses` : 'Unlimited uses' }}</p>\n\n                <v-expansion-panels>\n                  <v-expansion-panel>\n                    <v-expansion-panel-title>\n                      <span v-if=\"currentCouponListings\">All Listings</span>\n                      <span v-else>Allow for {{ couponClone.listings.length }} Listings</span>\n                    </v-expansion-panel-title>\n                    <v-expansion-panel-text>\n                      <div class=\"grid grid-cols-3 gap-2\" style=\"min-height: 125px;\">\n                        <div class=\"\">\n                          <v-switch\n                            v-model=\"currentCouponListings\"\n                            :inset=\"true\"\n                            density=\"compact\"\n                            hide-details\n                            label=\"All listings\"\n                            @update:model-value=\"currentCouponListingsUpdate()\"\n                          />\n                        </div>\n                        <div class=\"col-span-2\">\n                          <v-autocomplete\n                            v-show=\"!currentCouponListings\"\n                            v-model=\"couponClone.listings\"\n                            :items=\"fleetResourceListings\"\n                            chips\n                            class=\"mx-2\"\n                            closable-chips\n                            color=\"blue-grey-lighten-2\"\n                            hide-details\n                            item-title=\"name\"\n                            item-value=\"l_id\"\n                            label=\"Listings\"\n                            multiple\n                            variant=\"outlined\"\n                          >\n                            <template v-slot:prepend-item>\n                              <v-list-item title=\"Select All Listings\" @click=\"toggle\">\n                                <template v-slot:prepend>\n                                  <v-checkbox-btn\n                                    :color=\"fleetResourceListings.length > 0 ? 'indigo-darken-4' : undefined\"\n                                    :indeterminate=\"wantsSomeListings && !wantsAllListings\"\n                                    :model-value=\"wantsAllListings\"\n                                  />\n                                </template>\n                              </v-list-item>\n                              <v-divider class=\"mt-2\" opacity=\"50\"></v-divider>\n                            </template>\n                            <template v-slot:chip=\"data\">\n                              <v-chip\n                                v-if=\"data.index === 0\"\n                                :closable=\"true\"\n                                :model-value=\"data.selected\"\n                                v-bind=\"data.props\"\n                                @click=\"data.select\"\n                                @click:close=\"removeListing(data.item.raw as ListingInterface)\"\n                              >\n                                <v-avatar start>\n                                  <v-img :src=\"listingVehicleImage(data.item.raw as ListingInterface)\"></v-img>\n                                </v-avatar>\n                                {{ listingNameDisplay(data.item.raw as ListingInterface) }}\n                              </v-chip>\n                              <span\n                                v-if=\"data.index === 1\"\n                                class=\"text-grey text-caption\"\n                              >\n                              (+{{ couponClone.listings.length - 1 }} others)\n                            </span>\n                            </template>\n                            <template v-slot:item=\"{ props, item }\">\n                              <v-list-item\n                                :prepend-avatar=\"listingVehicleImage(item.raw as ListingInterface)\"\n                                :title=\"listingNameDisplay(item.raw as ListingInterface)\"\n                                v-bind=\"props\"\n                              />\n                            </template>\n                          </v-autocomplete>\n                        </div>\n                      </div>\n                    </v-expansion-panel-text>\n                  </v-expansion-panel>\n                  <v-expansion-panel>\n                    <v-expansion-panel-title>\n                      <span v-if=\"currentCouponUsersOn\">Limit Renter uses to {{ currentCouponUsers }}</span>\n                      <span v-else>Renters can use unlimited</span>\n                    </v-expansion-panel-title>\n                    <v-expansion-panel-text>\n                      <div class=\"grid grid-cols-1 gap-2\">\n                        <div>\n                          <v-switch\n                            v-model=\"currentCouponUsersOn\"\n                            :inset=\"true\"\n                            density=\"compact\"\n                            hide-details\n                            label=\"Limit number of times this coupon can be used per customer\"\n                            @update:model-value=\"currentCouponUserUpdate()\"\n                          />\n                        </div>\n                        <div>\n                          <v-text-field\n                            v-show=\"currentCouponUsersOn\"\n                            v-model=\"currentCouponUsers\"\n                            class=\"coupon-code mx-2\"\n                            hide-details\n                            label=\"Limit\"\n                            min=\"1\"\n                            persistent-hint\n                            type=\"number\"\n                            variant=\"outlined\"\n                          ></v-text-field>\n                        </div>\n                      </div>\n                    </v-expansion-panel-text>\n                  </v-expansion-panel>\n                  <v-expansion-panel>\n                    <v-expansion-panel-title>\n                      Reason\n                      <span v-if=\"couponClone.reason\">: {{ currentCouponReasonEllipsis }}</span>\n                    </v-expansion-panel-title>\n                    <v-expansion-panel-text>\n                      <v-text-field\n                        v-model=\"couponClone.reason\"\n                        :counter=\"40\"\n                        :error=\"couponForm.errors.has('reason')\"\n                        :persistent-hint=\"true\"\n                        :rules=\"couponRules.reason\"\n                        class=\"coupon-code mx-2\"\n                        hint=\"This will appear on customers' receipts and invoices.\"\n                        label=\"Reason\"\n                        required\n                        variant=\"outlined\"\n                        @keyup=\"couponForm.errors.clear('reason')\"\n                      ></v-text-field>\n                    </v-expansion-panel-text>\n                  </v-expansion-panel>\n                </v-expansion-panels>\n\n                <v-alert v-if=\"couponForm.errors.any()\" class=\"mt-3\" density=\"compact\" type=\"warning\">\n                  {{ couponForm.errors.flatten()[0] }}\n                </v-alert>\n\n                <v-btn class=\"mt-5\" size=\"small\" variant=\"text\" @click=\"couponTab = 2\">View Redemptions</v-btn>\n              </v-card-text>\n            </v-window-item>\n\n            <v-window-item :value=\"2\">\n              <v-card-title>Redemptions</v-card-title>\n              <v-card-text>\n                <div>\n                  <div v-if=\"couponRedemptions.length === 0 && couponLoading.redemptions\">Loading...</div>\n\n                  <v-data-table\n                    v-else-if=\"couponRedemptions.length > 0\"\n                    :headers=\"orderHeaders\"\n                    :items=\"couponRedemptions\"\n                    :loading=\"couponLoading.redemptions\"\n                    :mobile-breakpoint=\"0\"\n                    class=\"elevation-0\"\n                    item-key=\"b_id\"\n                  >\n                    <template v-slot:body=\"{ items }\">\n                      <tbody class=\"overflow-hidden overflow-x-auto\">\n                      <tr v-for=\"(item, index) in items\" :key=\"(item as VDataTableItem).name\">\n                        <td class=\"w-48\">\n                          <div class=\"d-flex align-items-start\">\n                            <div class=\"mr-2\">\n                              <div class=\"image-container image-responsive rounded\" style=\"width: 40px\">\n                                <div class=\"image-resizer\" style=\"padding-bottom: 100%;\"></div>\n                                <div :style=\"`background-image: url(${listingVehicleImage((item as VDataTableItem).listing)});`\" class=\"fw-image\" style=\"background-position: center center;\"></div>\n                                <div class=\"fw-responsive__content\"></div>\n                              </div>\n                            </div>\n                            <router-link v-if=\"(item as VDataTableItem).listing?.l_id\" :to=\"{ name: 'listing.single', params: {l_id: (item as VDataTableItem).listing?.l_id } }\" class=\"small\">\n                              {{ listingNameDisplay((item as VDataTableItem).listing) }}\n                            </router-link>\n                          </div>\n                        </td>\n                        <td style=\"min-width: 190px\">\n                          <CustomerPopoverMenu :customer=\"(item as VDataTableItem).renter\" :item-index=\"index\">\n                            <template v-slot:customerName>\n                              <span>{{ (item as VDataTableItem).renter?.full_name }}</span>\n                            </template>\n                          </CustomerPopoverMenu>\n                        </td>\n                        <td class=\"w-48\">\n                          <span v-if=\"checkPermission(['orders_financials'])\">\n                            {{ formatMoneyDisplayV2((item as VDataTableItem).total) }}\n                          </span>\n                          <span v-else v-tippy content=\"You need permission to view financial data\"><v-icon>mdi-eye-off-outline</v-icon></span>\n                        </td>\n                        <td class=\"w-48\">\n                          <span v-if=\"checkPermission(['orders_financials'])\">\n                            {{ formatMoneyDisplayV2((item as VDataTableItem).discount) }}\n                          </span>\n                          <span v-else v-tippy content=\"You need permission to view financial data\"><v-icon>mdi-eye-off-outline</v-icon></span>\n                        </td>\n                        <td style=\"min-width: 185px\">\n                          <router-link :to=\"{ name: 'orders.single', params: {b_id: (item as VDataTableItem).b_id} }\">\n                            <span v-html=\"(item as VDataTableItem).b_id\"></span>\n                          </router-link>\n                        </td>\n                        <td style=\"min-width: 190px\">\n                          {{ formatBookingDate((item as VDataTableItem).trip_start) }}\n                        </td>\n                        <td style=\"min-width: 190px\">\n                          {{ formatBookingDate((item as VDataTableItem).trip_end) }}\n                        </td>\n                        <td class=\"w-52\">\n                          <span :class=\"classObject(item as VDataTableItem)\" class=\"badge\">{{\n                              (item as VDataTableItem).status\n                            }}</span>\n                        </td>\n                        <td class=\"w-56\">\n                          {{ (item as VDataTableItem).source }}\n                        </td>\n                        <td style=\"min-width: 185px\">\n                          {{ formatBookingDate((item as VDataTableItem).created_at) }}\n                        </td>\n                      </tr>\n                      </tbody>\n                    </template>\n                    <template v-slot:no-data>No Redemptions</template>\n                  </v-data-table>\n                  <div v-else>No Redemptions</div>\n                </div>\n                <v-btn class=\"mt-5\" size=\"small\" variant=\"text\" @click=\"couponTab = 1\">Back</v-btn>\n              </v-card-text>\n            </v-window-item>\n          </v-window>\n\n          <v-scroll-y-reverse-transition leave-absolute>\n            <v-card-actions v-if=\"couponTab === 1\">\n              <DeleteButton\n                v-if=\"couponDialogMode === 'edit' && !confirmCouponDelete\"\n                :loading=\"couponLoading.delete_coupon\"\n                @delete-confirmed=\"deleteCouponCommit(couponClone)\"\n              />\n              <v-spacer/>\n              <v-btn :disabled=\"couponForm.busy\" color=\"grey\" size=\"small\"\n                     variant=\"text\"\n                     @click=\"couponDialog = false; confirmCouponDelete = false\" v-text=\"$t('close')\"></v-btn>\n              <v-btn v-if=\"couponDialogMode === 'edit'\" :disabled=\"!couponFormValid\"\n                     :loading=\"couponLoading.update_coupon\" color=\"primary\"\n                     @click=\"updateCouponCommit(couponClone); confirmCouponDelete = false\" v-text=\"$t('update')\"></v-btn>\n              <v-btn\n                v-if=\"couponDialogMode === 'add'\"\n                :disabled=\"!couponFormValid\"\n                :loading=\"couponLoading.save_coupon\"\n                color=\"primary\"\n                @click=\"createCouponCommit(couponClone)\"\n                v-text=\"$t('create')\"\n              ></v-btn>\n            </v-card-actions>\n          </v-scroll-y-reverse-transition>\n        </v-card>\n      </v-form>\n    </v-dialog>\n\n    <UpgradePlanFeatureDialog2\n      :bullets=\"[{text: 'Offer coupons for vehicle rentals, providing renters with exclusive discounts and promotions.'},\n         { text: 'Foster loyalty and referrals by rewarding renters with coupons, cultivating lasting relationships within your rental platform.',},\n         {text: 'Drive loyalty and recommendations with coupon incentives, nurturing lasting connections within your rental network.',},\n      ]\"\n      :tiers=\"['standard', 'premium']\"\n      description=\"Unlock extra value for your vehicle rental experience – Upgrade to Standard or Premium plans to access exclusive coupons and enhance your rentals with special discounts.\"\n      feature=\"Coupons\"\n      right-side-message=\"Create coupons for your most loyal renters and reward them with special discounts.\"\n    >\n      <template v-slot:rightImage>\n        <v-img alt=\"\" src=\"/images/upgrade_coupons.png\"/>\n      </template>\n    </UpgradePlanFeatureDialog2>\n  </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport {computed, defineAsyncComponent, onBeforeMount, onBeforeUnmount, ref, watch} from 'vue';\nimport dayjs from 'dayjs';\nimport {useStore} from 'vuex';\n\nimport {useMoneyFormatter} from '@/composables/useMoneyFormatter';\nimport {Coupon, ListingInterface} from '@/types';\nimport {useSubscription} from '@/composables/useSubscription';\nimport checkPermission from '@/utils/permission';\nimport {useListing} from '@/composables/useListing';\nimport {useCoupons} from '@/composables/useCoupons';\nimport {useCouponForm} from '@/composables/useCouponForm';\n\ninterface VDataTableItem {\n  name: string;\n  listing: ListingInterface;\n  renter: any;\n  total: number;\n  discount: number;\n  b_id: string;\n  trip_start: string;\n  trip_end: string;\n  status: string;\n  source: string;\n  created_at: string;\n}\n\nconst UpgradePlanFeatureDialog2 = defineAsyncComponent(() => import('@/components/dashboard/dialogs/UpgradePlanFeatureDialog2.vue'));\nconst CustomerPopoverMenu = defineAsyncComponent(() => import('@/components/dashboard/customers/CustomerPopoverMenu.vue'));\nconst FeatureTitle = defineAsyncComponent(() => import('@/components/dashboard/FeatureTitle.vue'));\nconst DeleteButton = defineAsyncComponent(() => import('@/components/buttons/DeleteButton.vue'));\n\nconst store = useStore();\nconst {includedInSubscription} = useSubscription();\nconst {formatMoneyDisplayV2, companyMoneyTextInputSettings, companyCurrencySymbol} = useMoneyFormatter();\nconst {\n  fleetResourceListings,\n  listingVehicleImage,\n  listingNameDisplay,\n  fetchListings,\n  fetchFleetResourcesListings\n} = useListing();\nconst {\n  coupons,\n  couponLoading,\n  couponForm,\n  couponRedemptions,\n  fetchCoupons,\n  createCoupon,\n  updateCoupon,\n  deleteCoupon,\n  getCouponRedemptions,\n  clearCoupons,\n} = useCoupons();\n\nconst {\n  couponClone,\n  currentCouponListings,\n  currentCouponUsersOn,\n  currentCouponUsers,\n  couponLimit,\n  couponFormValid,\n  currentCouponAmount,\n  couponRules,\n  resetForm,\n  updateListings,\n  updateUserLimit\n} = useCouponForm();\n\nconst couponDialog = ref(false);\nconst search = ref('');\nconst couponTab = ref(1);\nconst couponDialogMode = ref('add');\nconst couponDialogTitle = ref('Add Coupon');\nconst confirmCouponDelete = ref(false);\nconst selectedCoupons = ref([]);\nconst importCouponsDialog = ref(false);\nconst listingsClone = ref([]);\nconst confirmMultiCouponToggle = ref(false);\n\nconst orderHeaders = [\n  {text: 'Listing', value: 'listing', width: 200},\n  {text: 'Renter', value: 'renter', width: 200},\n  {text: 'Total', value: 'total', width: 200},\n  {text: 'Discount', value: 'discount', width: 200},\n  {text: 'Order ID', value: 'b_id', width: 200},\n  {text: 'Start Date', value: 'trip_start', width: 200},\n  {text: 'End Date', value: 'trip_end', width: 200},\n  {text: 'Status', value: 'status', width: 200},\n  {text: 'Source', value: 'source', width: 200},\n  {text: 'Created At', value: 'created_at', width: 200},\n];\n\n// Computed properties\nconst couponsFiltered = computed(() => {\n  const searchTerm = search.value.toLowerCase();\n  if (!coupons.value) return coupons.value;\n  return coupons.value.filter(coupon =>\n    coupon.code.toLowerCase().includes(searchTerm)\n  );\n});\n\n\nconst currentCouponReasonEllipsis = computed(() => {\n  return (couponClone.value?.reason ?? '').length > 40\n    ? `${couponClone.value.reason.substring(0, 40)}...`\n    : couponClone.value.reason;\n});\n\nconst couponsExist = computed(() => {\n  if (coupons.value === undefined) return false;\n  return coupons.value.length;\n});\n\nconst wantsAllListings = computed(() =>\n  (couponClone.value?.listings ?? []).length === fleetResourceListings.value.length\n);\n\nconst wantsSomeListings = computed(() =>\n  (couponClone.value?.listings ?? []).length > 0 && !wantsAllListings.value\n);\n\nconst icon = computed(() => {\n  if (wantsAllListings.value) return 'mdi-close-box';\n  if (wantsSomeListings.value) return 'mdi-minus-box';\n  return 'mdi-checkbox-blank-outline';\n});\n\n// Methods\nconst classObject = (item: VDataTableItem) => ({\n  'badge--success': item.status === 'completed',\n  'badge--warning': item.status === 'pending',\n  'badge--error': item.status === 'cancelled',\n});\n\nconst deleteCouponCommit = async (coupon: Coupon) => {\n  await deleteCoupon(coupon.uuid);\n  couponDialog.value = false;\n};\n\nconst createCouponCommit = async (coupon: Coupon) => {\n  await createCoupon(coupon);\n  couponDialog.value = false;\n  setTimeout(() => {\n    resetForm();\n  }, 300);\n};\n\nconst updateCouponCommit = async (coupon: Coupon) => {\n  await updateCoupon(coupon);\n  couponDialog.value = false;\n  setTimeout(() => {\n    resetForm();\n  }, 300);\n};\n\nconst addCoupon = () => {\n  couponDialogMode.value = 'add';\n  couponDialogTitle.value = 'Add Coupon';\n  couponDialog.value = true;\n};\n\nconst editCode = async (code: Coupon) => {\n  try {\n    await fetchFleetResourcesListings();\n    listingsClone.value = JSON.parse(JSON.stringify(fleetResourceListings.value));\n    couponClone.value = JSON.parse(JSON.stringify(code));\n    couponDialog.value = true;\n    couponDialogTitle.value = 'Edit Coupon';\n    couponDialogMode.value = 'edit';\n\n    const hasNoListings = code.listings.length === 0;\n    const hasAllListings = code.listings.length === fleetResourceListings.value.length;\n    currentCouponListings.value = hasNoListings || hasAllListings;\n\n    currentCouponUsersOn.value = code.user_limit > 0;\n    currentCouponUsers.value = Number(code.user_limit);\n  } catch (error) {\n    console.error('Error while editing coupon:', error);\n  }\n};\n\nconst importCoupons = () => {\n  importCouponsDialog.value = true;\n};\n\nconst currentCouponListingsUpdate = () => {\n  updateListings(fleetResourceListings.value);\n};\n\nconst currentCouponUserUpdate = () => {\n  updateUserLimit();\n};\n\nconst toggle = () => {\n  if (wantsAllListings.value) {\n    couponClone.value.listings = [];\n  } else {\n    couponClone.value.listings = fleetResourceListings.value.slice();\n  }\n};\n\nconst removeListing = (item: ListingInterface) => {\n  const index = couponClone.value.listings.findIndex((l: ListingInterface) => l.l_id === item.l_id);\n  if (index >= 0) couponClone.value.listings.splice(index, 1);\n};\n\nconst formatBookingDate = (bookingDate: string) => {\n  return dayjs(bookingDate).format('ddd, MMM D @ h:mma');\n};\n\n// Watchers\nwatch(couponDialog, (dialog) => {\n  store.commit('coupon/SET_COUPON_REDEMPTIONS', []);\n  couponTab.value = 1;\n  if (dialog && fleetResourceListings.value.length === 0) {\n    fetchListings();\n  }\n  if (!dialog) {\n    setTimeout(() => {\n      resetForm();\n    }, 300);\n  }\n});\n\nwatch(couponTab, (tab) => {\n  if (tab === 2 && couponClone.value) {\n    getCouponRedemptions(couponClone.value.uuid);\n  }\n});\n\nwatch(couponLimit, (limit) => {\n  couponClone.value.limit = limit ? 1 : -1;\n});\n\nwatch(selectedCoupons, () => {\n  confirmMultiCouponToggle.value = false;\n});\n\nwatch(currentCouponUsers, (users) => {\n  couponClone.value.user_limit = +users;\n});\n\n// Lifecycle hooks\nonBeforeMount(() => {\n  fetchCoupons();\n});\n\nonBeforeUnmount(() => {\n  clearCoupons();\n});\n</script>\n\n<style>\n.coupon-type-btn button {\n  height: 56px !important;\n}\n\n.coupon-form {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 8px;\n  align-items: flex-start;\n}\n\n.coupon-form .coupon-code {\n  width: 175px;\n  flex: 1;\n  min-width: 175px;\n}\n\n.coupon-form .coupon-value {\n  width: 100px;\n  flex: 0 0 100px;\n}\n\n.limit-section {\n  width: 100%;\n  max-width: 100%;\n}\n\n@media (max-width: 600px) {\n  .coupon-form {\n    flex-direction: column;\n    width: 100%;\n  }\n\n  .coupon-form .coupon-code,\n  .coupon-form .coupon-value {\n    width: 100%;\n    min-width: 100%;\n  }\n\n  .coupon-type-btn {\n    width: 100%;\n    margin: 8px 0;\n  }\n\n  .coupon-type-btn button {\n    flex: 1;\n  }\n}\n\n.select-all-item {\n  min-height: 48px;\n  padding: 0 16px;\n  white-space: nowrap;\n}\n\n.select-all-item .v-list-item-action {\n  margin-right: 16px;\n}\n\n.select-all-item .v-list-item-title {\n  font-size: 0.875rem;\n  font-weight: 500;\n  white-space: nowrap;\n  overflow: hidden;\n  text-overflow: ellipsis;\n}\n</style>\n","<template>\n  <div>\n    <v-dialog\n      v-model=\"dialog\"\n      width=\"500\"\n    >\n      <v-card>\n        <v-card-title>\n          Pricing Rule\n          <v-spacer/>\n          <v-chip color=\"orange text-white\" label>Automation</v-chip>\n        </v-card-title>\n\n        <v-card-text>\n          <v-select\n            v-model=\"rule\"\n            :items=\"rules\"\n            density=\"compact\"\n            hide-details\n            item-title=\"label\"\n            item-value=\"value\"\n            label=\"Rule\"\n            variant=\"outlined\"\n          ></v-select>\n\n          <div v-if=\"rule === 'raise-lower-prices'\" class=\"mt-5\">\n            <v-menu open-on-hover>\n              <template v-slot:activator=\"{ props }\">\n                <v-btn\n                  size=\"x-small\"\n                  v-bind=\"props\"\n                  variant=\"text\"\n                >\n                  <span class=\"i-in-place-edit\">\n                    {{ ruleData['raise-lower-prices'].action }}\n                  </span>\n                </v-btn>\n              </template>\n\n              <v-list>\n                <v-list-item v-model=\"ruleData['raise-lower-prices'].action\" mandatory>\n                  <v-list-item value=\"raise\">\n                    <v-list-item-title>Raise</v-list-item-title>\n                  </v-list-item>\n                  <v-list-item value=\"lower\">\n                    <v-list-item-title>Lower</v-list-item-title>\n                  </v-list-item>\n                </v-list-item>\n              </v-list>\n            </v-menu>\n            listing prices if there are\n            <v-menu :close-on-content-click=\"false\" open-on-hover>\n              <template v-slot:activator=\"{ props }\">\n                <v-btn size=\"x-small\" v-bind=\"props\" variant=\"text\">\n                  <span class=\"i-in-place-edit\">\n                    {{ ruleData['raise-lower-prices'].booking_cnt }}\n                  </span>\n                </v-btn>\n              </template>\n\n              <v-card>\n                <v-card-text>\n                  <v-text-field\n                    v-model=\"ruleData['raise-lower-prices'].booking_cnt\"\n                    label=\"Booking Count\"\n                    max=\"365\"\n                    min=\"0\"\n                    type=\"number\"\n                    variant=\"outlined\"\n                  ></v-text-field>\n                </v-card-text>\n              </v-card>\n            </v-menu>\n            bookings in the\n            <v-menu :close-on-content-click=\"false\" open-on-hover>\n              <template v-slot:activator=\"{ props }\">\n                <v-btn\n                  size=\"x-small\"\n                  v-bind=\"props\"\n                  variant=\"text\"\n                >\n                  <span class=\"i-in-place-edit\" v-text=\"ruleData['raise-lower-prices'].timeframe.timeframe_label()\"></span>\n                </v-btn>\n              </template>\n              <v-card>\n                <v-card-text class=\"mt-4\">\n                  <v-radio-group v-model=\"ruleData['raise-lower-prices'].timeframe.term\" inline>\n                    <v-radio label=\"Last\" value=\"last\"></v-radio>\n                    <v-radio label=\"Next\" value=\"next\"></v-radio>\n                  </v-radio-group>\n                  <v-text-field\n                    v-model=\"ruleData['raise-lower-prices'].timeframe.value\"\n                    label=\"Days\"\n                    max=\"365\"\n                    min=\"0\"\n                    type=\"number\"\n                    variant=\"outlined\"\n                  ></v-text-field>\n                </v-card-text>\n              </v-card>\n            </v-menu>\n          </div>\n\n          <div v-if=\"rule === 'fill-the-gap'\" class=\"mt-1\">\n\n            <p class=\"mt-2\">Fill the gap helps you fill in the time between reservations that may incentivize renters to\n              book odd or shorter times.</p>\n\n            <div class=\"text-2xl border-top\">\n              <v-menu open-on-hover>\n                <template v-slot:activator=\"{ props }\">\n                  <v-btn\n                    style=\"padding-left: 0; padding-right:0;\"\n                    v-bind=\"props\"\n                    variant=\"text\"\n                  >\n                  <span class=\"i-in-place-edit\">\n                    {{ ruleData['fill-the-gap'].action }}\n                  </span>\n                  </v-btn>\n                </template>\n\n                <v-list>\n                  <v-list-item v-model=\"ruleData['fill-the-gap'].action\">\n                    <v-list-item value=\"increase\">\n                      <v-list-item-title>Increase</v-list-item-title>\n                    </v-list-item>\n                    <v-list-item value=\"decrease\">\n                      <v-list-item-title>Decrease</v-list-item-title>\n                    </v-list-item>\n                  </v-list-item>\n                </v-list>\n              </v-menu>\n              listing prices by\n              <v-menu :close-on-content-click=\"false\" open-on-hover>\n                <template v-slot:activator=\"{ props }\">\n                  <v-btn\n                    style=\"padding-left: 0; padding-right:0;\"\n                    v-bind=\"props\"\n                    variant=\"text\"\n                  >\n                  <span class=\"i-in-place-edit\">\n                    <span v-if=\"ruleData['fill-the-gap'].mode ==='amount'\">$</span>\n                    {{ ruleData['fill-the-gap'].value }}\n                    <span v-if=\"ruleData['fill-the-gap'].mode ==='percent'\">%</span>\n                  </span>\n                  </v-btn>\n                </template>\n\n                <v-card>\n                  <v-card-text>\n                    <v-text-field\n                      v-model=\"ruleData['fill-the-gap'].value\"\n                      label=\"Amount\"\n                      max=\"365\"\n                      min=\"0\"\n                      type=\"number\"\n                      variant=\"outlined\"\n                    ></v-text-field>\n                    <v-radio-group v-model=\"ruleData['fill-the-gap'].mode\" inline>\n                      <v-radio label=\"Percent\" value=\"percent\"></v-radio>\n                      <v-radio label=\"Amount\" value=\"amount\"></v-radio>\n                    </v-radio-group>\n                  </v-card-text>\n                </v-card>\n              </v-menu>\n              between reservations\n              <v-menu :close-on-content-click=\"false\" open-on-hover>\n                <template v-slot:activator=\"{ props }\">\n                  <v-btn\n                    style=\"padding-left: 0; padding-right:0;\"\n                    v-bind=\"props\"\n                    variant=\"text\"\n                  >\n                  <span class=\"i-in-place-edit\">\n                    {{ ruleData['fill-the-gap'].time_value }}\n                    <span>Days</span>\n                  </span>\n                  </v-btn>\n                </template>\n\n                <v-card>\n                  <v-card-text>\n                    <v-text-field\n                      v-model=\"ruleData['fill-the-gap'].time_value\"\n                      label=\"Amount\"\n                      max=\"365\"\n                      min=\"0\"\n                      type=\"number\"\n                      variant=\"outlined\"\n                    ></v-text-field>\n                  </v-card-text>\n                </v-card>\n              </v-menu>\n              out.\n\n              <v-expansion-panels class=\"mt-3\">\n                <v-expansion-panel>\n                  <v-expansion-panel-title v-slot=\"{ open }\">\n                    <div>\n                      <div class=\"col-4\">Exclusions</div>\n                      <div class=\"col-8\">\n                        <v-fade-transition leave-absolute>\n                          <span v-if=\"open\">Add exclusion rules</span>\n                          <span v-else class=\"float-end\">{{ exclusionCount }} exclusion</span>\n                        </v-fade-transition>\n                      </div>\n                    </div>\n                  </v-expansion-panel-title>\n                  <v-expansion-panel-text>\n                    <v-checkbox\n                      v-model=\"ruleData['fill-the-gap'].exclusions.weekends.on\"\n                      density=\"compact\"\n                      hide-details\n                      label=\"Weekends\"\n                    ></v-checkbox>\n                    <v-checkbox\n                      v-model=\"ruleData['fill-the-gap'].exclusions.holidays.on\"\n                      density=\"compact\"\n                      hide-details\n                      label=\"Holidays\"\n                    ></v-checkbox>\n                    <div>\n                      <v-checkbox\n                        v-model=\"ruleData['fill-the-gap'].exclusions.listings.on\"\n                        density=\"compact\"\n                        hide-details\n                        label=\"These Listings\"\n                      ></v-checkbox>\n                      <div v-if=\"ruleData['fill-the-gap'].exclusions.listings.on\" class=\"mt-3 pl-10\">\n                        <v-autocomplete\n                          v-model=\"ruleData['fill-the-gap'].exclusions.listings.listings\"\n                          :items=\"filteredListings\"\n                          chips\n                          density=\"compact\"\n                          hide-details\n                          label=\"Excluded Listings\"\n                          multiple\n                        ></v-autocomplete>\n                        <ListingAutocompleteDropdown\n                          :allow-multiple=\"true\"\n                          :allow-select-all=\"true\"\n                          @selectedListing=\"listingSelected($event)\"\n                        ></ListingAutocompleteDropdown>\n                      </div>\n                    </div>\n                  </v-expansion-panel-text>\n                </v-expansion-panel>\n              </v-expansion-panels>\n            </div>\n          </div>\n        </v-card-text>\n\n        <v-divider/>\n\n        <v-card-actions>\n          <v-btn size=\"small\" variant=\"text\">Example</v-btn>\n          <v-spacer/>\n          <v-btn color=\"grey\" variant=\"text\" @click=\"dialog = false\">Cancel</v-btn>\n          <v-btn color=\"primary\" variant=\"text\" @click=\"saveRuleInit()\">\n            {{ $t('save') }}\n          </v-btn>\n        </v-card-actions>\n      </v-card>\n    </v-dialog>\n  </div>\n</template>\n\n<script>\nimport { EventBus } from '@/plugins/eventBus';\nimport { mapActions, mapGetters } from 'vuex';\n\nconst ListingAutocompleteDropdown = () => import('@/components/dashboard/listings/ListingAutocompleteDropdown.vue');\n\nexport default {\n  name: 'PricingRuleDialog',\n\n  components: {\n    ListingAutocompleteDropdown,\n  },\n\n  data() {\n    return {\n      snack: false,\n      dialog: false,\n      rule: 'fill-the-gap',\n      rules: [\n        {\n          label: 'Raise/lower prices',\n          value: 'raise-lower-prices',\n          data: {\n            action: 'raise',\n            booking_cnt: 0,\n          },\n        },\n        {\n          label: 'Fill the Gap',\n          value: 'fill-the-gap',\n        },\n      ],\n      ruleData: {\n        'fill-the-gap': {\n          action: 'decrease',\n          value: 10,\n          mode: 'percent',\n          time_value: 14,\n          exclusions: {\n            weekends: {\n              on: false,\n            },\n            holidays: {\n              on: false,\n            },\n            specials: {\n              on: false,\n            },\n            listings: {\n              on: false,\n              listings: [],\n            },\n            gap_max: {\n              on: false,\n              value: 1,\n            },\n          },\n          excluded_listings: [],\n        },\n        'raise-lower-prices': {\n          action: 'raise',\n          booking_cnt: 0,\n          timeframe: {\n            term: 'next',\n            value: 0,\n            unit: 'day',\n            unit_label: () => (this.ruleData['raise-lower-prices'].timeframe.value === '1' ? this.ruleData['raise-lower-prices'].timeframe.unit : `${this.ruleData['raise-lower-prices'].timeframe.unit}s`),\n            timeframe_label: () => (`${this.ruleData['raise-lower-prices'].timeframe.term} ${this.ruleData['raise-lower-prices'].timeframe.value} ${this.ruleData['raise-lower-prices'].timeframe.unit_label()}`),\n            label: () => `${this.ruleData['raise-lower-prices'].timeframe.value} ${this.ruleData['raise-lower-prices'].timeframe.unit_label()}`,\n          },\n        },\n      },\n    };\n  },\n\n  created() {\n    EventBus.$on('open-pricing-rule-dialog', () => {\n      this.dialog = true;\n    });\n\n    this.fetchListings();\n  },\n\n  computed: {\n    ...mapGetters({\n      pricingRules: 'pricing/pricingRules',\n      allListings: 'listing/allListings',\n    }),\n    exclusionCount() {\n      if (!this.ruleClone) {\n        return 0;\n      }\n      return Object.values(this.ruleClone.exclusions).filter((v) => v.on).length;\n    },\n    filteredListings() {\n      return this.allListings;\n    },\n  },\n\n  methods: {\n    ...mapActions({\n      fetchListings: 'listing/fetchListings',\n      getPricingRules: 'pricing/getPricingRules',\n      createPricingRule: 'pricing/createPricingRule',\n    }),\n    listingSelected(listings) {\n      this.ruleData['fill-the-gap'].exclusions.listings.listings = listings.map((l) => l.l_id);\n    },\n    saveRuleInit() {\n      this.createPricingRule({\n        rule: this.rule,\n        data: this.ruleData[this.rule],\n      }).finally(() => {\n        this.getPricingRules();\n        this.dialog = false;\n      });\n    },\n  },\n};\n</script>\n\n<style lang=\"scss\">\n.i-in-place-edit {\n  font-weight: bold;\n  cursor: text;\n  border-top: 2px solid transparent;\n  border-bottom: 2px solid transparent;\n}\n\n.i-in-place-edit:hover {\n  text-decoration: none;\n  border-bottom: 2px dotted var(--primary);\n}\n</style>\n","<template>\n  <div>\n    <v-card variant=\"outlined\">\n      <v-card-title>\n        Price Rules\n        <TheHelpLink url=\"https://help.fleetwire.io/en/article/advanced-pricing-cxlndp/?bust=1666982473968\"></TheHelpLink>\n        <v-spacer/>\n        <v-btn size=\"small\" @click=\"EventBus.$emit('open-pricing-rule-dialog');\">\n          <v-icon class=\"mr-1\" size=\"small\">mdi-plus</v-icon>\n          Rule\n        </v-btn>\n      </v-card-title>\n      <v-card-subtitle>\n        Price rules are used to automatically calculate the price of certain days based on your rules.\n      </v-card-subtitle>\n      <v-card-text class=\"mt-3\">\n        <v-data-table\n          :headers=\"headers\"\n          :items=\"pricingRules\"\n          hide-default-footer\n        >\n          <template v-slot:item.id=\"{ index }\">\n            {{ index + 1 }}\n          </template>\n          <template v-slot:item.active=\"{ item }\">\n            <span v-if=\"item.active\">Active</span>\n          </template>\n          <template v-slot:item.name=\"{ item }\">\n            <router-link :to=\"{name: 'settings.pricing.advanced.edit', params: {'uuid': item.uuid }}\">\n              {{ item.name }}\n            </router-link>\n          </template>\n          <template v-slot:item.uuid=\"{ item }\">\n            <span v-tippy=\"item.uuid\" v-text=\"firstPartOfUuid(item.uuid)\"></span>\n          </template>\n          <template v-slot:item.rule_type=\"{ item }\">\n            <span>{{ ruleType(item) }}</span>\n          </template>\n          <template v-slot:item.actions=\"{ item }\">\n            <div class=\"flex gap-1 float-end\">\n              <v-btn size=\"small\" variant=\"text\" @click=\"deletePricingRule(item)\">\n                <v-icon size=\"small\">mdi-delete</v-icon>\n              </v-btn>\n              <v-btn size=\"small\" variant=\"text\" @click=\"$router.push({ name: 'settings.pricing.advanced.edit', params: {'uuid': item.uuid } }).catch(() => {})\">\n                <v-icon size=\"small\">mdi-pencil</v-icon>\n              </v-btn>\n            </div>\n          </template>\n        </v-data-table>\n      </v-card-text>\n    </v-card>\n    <PricingRuleDialog/>\n\n    <v-alert class=\"mt-5\" density=\"compact\" type=\"info\" variant=\"outlined\">\n      If you are seeing this page that means you have a beta tester flag.\n    </v-alert>\n\n  </div>\n</template>\n\n<script lang=\"ts\">\nimport {EventBus} from '@/plugins/eventBus';\nimport {mapActions, mapGetters} from 'vuex';\nimport {get} from 'lodash';\nimport PricingRuleDialog from './Dialogs/PricingRuleDialog.vue';\n\nexport default {\n  name: 'AdvancedPricing',\n\n  components: {\n    PricingRuleDialog,\n  },\n\n  data() {\n    return {\n      headers: [\n        {text: '#', value: 'id', width: 60},\n        {text: 'Listing Name', value: 'name'},\n        {text: 'Status', value: 'active'},\n        {text: 'ID', value: 'uuid'},\n        {text: 'Type', value: 'rule_type'},\n        {text: '', value: 'actions'},\n      ],\n      EventBus,\n    };\n  },\n\n  created() {\n    this.getPricingRules();\n\n    EventBus.$on('create-pricing-rules-success', () => {\n      this.getPricingRules();\n    });\n    EventBus.$on('delete-pricing-rules-success', () => {\n      this.getPricingRules();\n    });\n  },\n\n  computed: {\n    ...mapGetters({\n      pricingRules: 'pricing/pricingRules',\n    }),\n  },\n\n  methods: {\n    ...mapActions({\n      getPricingRules: 'pricing/getPricingRules',\n      deletePricingRules: 'pricing/deletePricingRules',\n    }),\n    firstPartOfUuid(uuid) {\n      return uuid.split('-')[0];\n    },\n    ruleType(rule) {\n      const type = get(rule, 'rule_type', 'N/A');\n      switch (type) {\n        case 'fill-the-gap':\n          return 'Fill the gap';\n        case 'raise-lower-prices':\n          return 'Raise/Lower prices';\n        default:\n          return 'Unknown';\n      }\n    },\n    deletePricingRule(rule) {\n      this.deletePricingRules([rule.uuid])\n        .finally(() => {\n          this.getPricingRules();\n        });\n    },\n  },\n\n  beforeUnmount() {\n    EventBus.$off('create-pricing-rules-success');\n    EventBus.$off('delete-pricing-rules-success');\n  },\n};\n</script>\n","<template>\n  <div>\n    <v-card>\n      <v-card-title>\n        <div class=\"flex items-center\">\n          Price Structure\n          <TheHelpLink url=\"https://help.fleetwire.io/en/article/advanced-pricing-cxlndp/?bust=1666982473968\"></TheHelpLink>\n          <v-spacer/>\n          <v-btn size=\"small\" @click=\"$router.push({ name: 'settings.pricing.template.new'}).catch(() => {})\">\n            <v-icon class=\"mr-1\" size=\"small\">mdi-plus</v-icon>\n            Structure\n          </v-btn>\n        </div>\n      </v-card-title>\n      <v-card-subtitle>\n        Create template pricing structures for multiple products following the same pricing structure.\n      </v-card-subtitle>\n      <v-card-text class=\"mt-3\">\n        <v-table v-if=\"pricingStructures.length > 0\">\n          <template v-slot:default>\n            <thead>\n            <tr>\n              <th>Name</th>\n              <th></th>\n            </tr>\n            </thead>\n            <tbody>\n            <tr v-for=\"(structure, index) in pricingStructures\" :key=\"index\">\n              <td>\n                <v-btn color=\"blue\" variant=\"plain\" @click=\"$router.push({ name: 'settings.pricing.template.edit', params: { uuid: structure.uuid } }).catch(() => {})\">\n                  {{ structure.name }}\n                </v-btn>\n              </td>\n              <td class=\"text-right\">\n                <v-btn size=\"small\" variant=\"outlined\" @click=\"$router.push({ name: 'settings.pricing.template.edit', params: { uuid: structure.uuid } }).catch(() => {})\">\n                  <v-icon class=\"mr-2\" size=\"small\">mdi-calculator</v-icon>\n                  Preview\n                </v-btn>\n              </td>\n            </tr>\n            </tbody>\n          </template>\n        </v-table>\n        <div v-else>\n          No Pricing Structures\n        </div>\n      </v-card-text>\n    </v-card>\n  </div>\n</template>\n\n<script>\nimport { EventBus } from '@/plugins/eventBus';\nimport { mapActions, mapGetters } from 'vuex';\n\n\nexport default {\n  name: 'PricingTemplate',\n\n\n  data() {\n    return {\n      headers: [\n        { text: '#', value: 'id', width: 60 },\n        { text: 'Listing Name', value: 'name' },\n        { text: 'Status', value: 'active' },\n        { text: 'ID', value: 'uuid' },\n        { text: 'Type', value: 'rule_type' },\n        { text: '', value: 'actions' },\n      ],\n      EventBus,\n    };\n  },\n\n  created() {\n    this.getPricingStructures();\n\n    EventBus.$on('create-pricing-rules-success', () => {\n      this.getPricingRules();\n    });\n    EventBus.$on('delete-pricing-rules-success', () => {\n      this.getPricingRules();\n    });\n  },\n\n  computed: {\n    ...mapGetters({\n      pricingStructures: 'pricing/pricingStructures',\n    }),\n  },\n\n  methods: {\n    ...mapActions({\n      getPricingStructures: 'pricing/getPricingStructures',\n    }),\n  },\n\n  beforeUnmount() {\n    EventBus.$off('create-pricing-rules-success');\n    EventBus.$off('delete-pricing-rules-success');\n  },\n};\n</script>\n","<template>\n  <div>\n    <div class=\"\">\n      <div class=\"\">\n        <div class=\"setting-section-description\">\n          <h2>New template structure</h2>\n          <div class=\"feature-description\">\n            Create price tiers to set prices for different rental periods. You could use it to make the price lower when\n            customers rent for a longer period of time.\n\n            <TheHelpLink url=\"https://help.fleetwire.io/en/article/setting-up-taxes-ey9pyo/?bust=1675453082095\"></TheHelpLink>\n          </div>\n        </div>\n      </div>\n      <div class=\"\">\n        <v-card variant=\"outlined\">\n          <v-card-text class=\"mt-3\">\n            <div>\n              <div>\n                <label class=\"font-bold\">Template Name</label>\n                <v-text-field\n                  ref=\"template_name\"\n                  v-model=\"currentPricingStructure.name\"\n                  density=\"compact\"\n                  hide-details\n                  name=\"template_name\"\n                  variant=\"outlined\"\n                ></v-text-field>\n                <div class=\"mt-2\">This is not visible to customers.</div>\n              </div>\n            </div>\n          </v-card-text>\n        </v-card>\n\n        <v-card class=\"mt-5\" variant=\"outlined\">\n          <v-card-text>\n            <div class=\"mt-10\">\n              <h5 class=\"h5\">Price tiers</h5>\n\n              <div class=\"font-bold\">\n                Example price\n              </div>\n              <p>The example price is replaced by the base price of the listing that use this template.</p>\n\n              <v-text-field\n                v-model=\"currentPricingStructure.price_example\"\n                :prefix=\"companyMoneyTextInputSettings.prefix\"\n                :suffix=\"companyMoneyTextInputSettings.suffix\"\n                class=\"pricing-structure-example-price\"\n                density=\"compact\"\n                type=\"number\"\n                variant=\"outlined\"\n                @blur=\"updateResultingPriceParent()\"\n              ></v-text-field>\n\n              <div>\n                <div>\n                  <div v-for=\"(tier,i) in currentPricingStructure.price_tiers\" :key=\"i\" class=\"Row-eCkaBm evTrKC\">\n                    <div class=\"Div-bMiTSW Col-iaLJLx InputField-iwpqyF xfmMQ\" data-tid=\"Row 1: Label\">\n                      <div v-if=\"i === 0\" class=\"LabelContainer-fLmGyQ kXPMMB\">\n                        <label class=\"Label-eJXSuD Label-iekCsg gZKasB eYnYJY\" for=\"clidjimoz00273b7saj4fna9w\">\n                          Price tier label\n                        </label>\n                      </div>\n                      <span class=\"InputContainer-hJWSEI bsHxqg\">\n                          <input\n                            v-model=\"tier.name\"\n                            :name=\"`price_tiles_attributes[${i}].name`\"\n                            autocomplete=\"off\"\n                            class=\"Input-bXxEzP Input-icnXNI cCETsh blXyKC\"\n                            type=\"text\"\n                          ></span>\n                    </div>\n                    <div class=\"Div-bMiTSW Col-iaLJLx InputField-iwpqyF xfmMQ\" data-tid=\"Row 1: Duration\">\n                      <div v-if=\"i === 0\" class=\"LabelContainer-fLmGyQ kXPMMB\">\n                        <label class=\"Label-eJXSuD Label-iekCsg gZKasB eYnYJY\" for=\"clidjimp000283b7surusxx4f\">Duration</label>\n                      </div>\n                      <span class=\"InputContainer-hJWSEI bsHxqg\">\n                          <input\n                            v-model=\"tier.quantity\"\n                            :name=\"`price_tiles_attributes[${i}].quantity`\"\n                            autocomplete=\"off\"\n                            class=\"Input-bXxEzP Input-icnXNI cCETsh blXyKC\"\n                            min=\"1\"\n                            type=\"number\"\n                          ></span>\n                    </div>\n                    <div class=\"Div-bMiTSW Col-iaLJLx InputField-iwpqyF xfmMQ\" data-tid=\"Row 1: Period\">\n                      <div v-if=\"i === 0\" class=\"LabelContainer-fLmGyQ kXPMMB\"></div>\n                      <div class=\"Container-boBWlZ erHrFZ\">\n                        <v-select\n                          v-model=\"tier.period\"\n                          :items=\"durationUnits\"\n                          class=\"\"\n                          density=\"compact\"\n                          hide-details\n                          item-title=\"text\"\n                          item-value=\"value\"\n                          style=\"\"\n                          variant=\"outlined\"\n                        ></v-select>\n                      </div>\n                    </div>\n\n                    <div class=\"Div-bMiTSW Col-iaLJLx InputField-iwpqyF xfmMQ\" data-tid=\"Row 1: Multiplier\">\n                      <div v-if=\"i === 0\" class=\"LabelContainer-fLmGyQ kXPMMB\">\n                        <label class=\"Label-eJXSuD Label-iekCsg gZKasB eYnYJY\" for=\"clidjimp8002a3b7sz3j23aa9\">\n                          Multiply base price by\n                        </label>\n                      </div>\n                      <span class=\"InputContainer-hJWSEI bsHxqg\">\n                          <input\n                            v-model=\"tier.multiplier\"\n                            :name=\"`price_tiles_attributes[${i}].multiplier`\"\n                            autocomplete=\"off\"\n                            class=\"cCETsh\"\n                            type=\"text\"\n                            @blur=\"updateResultingPrice(i)\"\n                          ></span>\n                    </div>\n                    <div class=\"ONqJD\">* base price =</div>\n                    <div class=\"\" data-tid=\"Row 1: Example price\">\n                      <div v-if=\"i === 0\" class=\"LabelContainer-fLmGyQ kXPMMB\">\n                        <label class=\"Label-eJXSuD Label-iekCsg gZKasB eYnYJY\" for=\"clidjimp9002b3b7sb1ldvxal\">\n                          Resulting price\n                        </label>\n                      </div>\n                      <span class=\"InputContainer-hJWSEI bsHxqg\">\n                          <i class=\"I-gmFDEA eaYeOY\">$</i>\n                          <input\n                            v-model=\"tier.example_price\"\n                            :name=\"`price_tiles_attributes[${i}].example_price`\"\n                            autocomplete=\"off\"\n                            class=\"Input-bXxEzP Input-icnXNI cCETsh blXyKC\"\n                            label=\"Resulting price\"\n                            type=\"number\"\n                            @blur=\"updateMultiplier(i)\"\n                          >\n                        </span>\n                    </div>\n                    <v-btn class=\"fJfBtJ mt-4\" size=\"small\" variant=\"text\" @click=\"removePricingTier(i)\">\n                      <v-icon size=\"small\">mdi-delete</v-icon>\n                    </v-btn>\n                  </div>\n                </div>\n\n                <div class=\"mt-5\">\n                  <v-btn variant=\"outlined\" @click=\"addPricingTier()\">Add Price Tier</v-btn>\n                </div>\n              </div>\n            </div>\n          </v-card-text>\n        </v-card>\n\n        <v-card class=\"mt-5\" variant=\"outlined\">\n          <v-card-title>Automatic increments</v-card-title>\n          <v-card-subtitle>\n            Set an amount that is added for each period following the price tier with the longest period.\n          </v-card-subtitle>\n          <v-card-text>\n            <div>\n              <div class=\"Row-eCkaBm esebmt\" data-tid=\"Each extra block\">\n                <div class=\"EachExtra-hFYHww ipTNEC\">\n                  <div class=\"Div-bMiTSW Col-iaLJLx InputField-iwpqyF xfmMQ\" data-tid=\"Each extra\">\n                    <div class=\"LabelContainer-fLmGyQ kXPMMB\">\n                      <label class=\"Label-eJXSuD Label-iekCsg gZKasB eYnYJY\" for=\"clidly6i3002c3b7s5y2eovx6\">\n                        Each extra\n                      </label>\n                    </div>\n                    <div class=\"Container-boBWlZ erHrFZ\" data-tid=\"Each extra\">\n                      <div class=\"Container-boBWlZ erHrFZ\">\n                        <v-select\n                          v-model=\"currentPricingStructure.duration_unit\"\n                          :items=\"durationUnits\"\n                          class=\"\"\n                          density=\"compact\"\n                          hide-details\n                          item-title=\"text\"\n                          item-value=\"value\"\n                          style=\"\"\n                          variant=\"outlined\"\n                        ></v-select>\n                      </div>\n                    </div>\n                  </div>\n                </div>\n                <div class=\"Div-bMiTSW Col-iaLJLx InputField-iwpqyF xfmMQ\" data-tid=\"Each extra multiplier\">\n                  <div class=\"LabelContainer-fLmGyQ kXPMMB\">\n                    <label class=\"Label-eJXSuD Label-iekCsg gZKasB eYnYJY\" for=\"clidly6i6002d3b7s2wg4cao0\">\n                      Multiply base price by\n                    </label>\n                  </div>\n                  <span class=\"InputContainer-hJWSEI bsHxqg\">\n                    <input\n                      v-model=\"currentPricingStructure.multiplier\"\n                      autocomplete=\"off\"\n                      class=\"Input-bXxEzP Input-icnXNI cCETsh blXyKC\"\n                      name=\"hour\"\n                      type=\"text\"\n                      @blur.stop=\"updateAddedAmount()\"\n                    ></span>\n                </div>\n                <div class=\"PriceText-iYCcgJ ONqJD\">* base price =</div>\n                <div class=\"Div-bMiTSW Col-iaLJLx InputField-iwpqyF xfmMQ\" data-tid=\"Each extra price\">\n                  <div class=\"LabelContainer-fLmGyQ kXPMMB\">\n                    <label class=\"Label-eJXSuD Label-iekCsg gZKasB eYnYJY\" for=\"clidly6i6002e3b7srupwc20u\">\n                      Added amount\n                    </label>\n                  </div>\n                  <span class=\"InputContainer-hJWSEI bsHxqg\">\n                    <i class=\"I-gmFDEA eaYeOY\">$</i>\n                    <input\n                      v-model=\"currentPricingStructure.added_amount\"\n                      autocomplete=\"off\"\n                      class=\"Input-bXxEzP Input-icnXNI cCETsh blXyKC\"\n                      name=\"example_price\"\n                      @blur.stop=\"updateAddedAmountMultiple()\"\n                    >\n                  </span>\n                </div>\n              </div>\n            </div>\n          </v-card-text>\n        </v-card>\n\n        <div class=\"flex mt-5\">\n          <v-spacer/>\n          <v-btn variant=\"text\" @click=\"goBack\">Cancel</v-btn>\n          <v-btn :disabled=\"saveButtonReady\" class=\"ml-2\" color=\"primary\" variant=\"flat\" @click=\"savePriceStructureInit()\">\n            Save\n          </v-btn>\n        </div>\n      </div>\n    </div>\n  </div>\n</template>\n\n<script lang=\"ts\">\nimport {mapActions, mapGetters} from 'vuex';\nimport {get} from 'lodash';\nimport {EventBus} from '@/plugins/eventBus';\nimport {useMoneyFormatter} from '@/composables/useMoneyFormatter';\nimport {useRouter} from 'vue-router';\n\nexport default {\n  name: 'PricingTemplateNew',\n\n  setup() {\n    const router = useRouter();\n    const {companyMoneyTextInputSettings} = useMoneyFormatter();\n\n    const goBack = () => {\n      router.go(-1);\n    };\n\n    return {\n      goBack,\n      companyMoneyTextInputSettings,\n    };\n  },\n\n\n  data() {\n    return {\n      durationUnits: [\n        {\n          text: 'Hours',\n          value: 'hours',\n        },\n        {\n          text: 'Days',\n          value: 'days',\n        },\n        {\n          text: 'Weeks',\n          value: 'weeks',\n        },\n        {\n          text: 'Months',\n          value: 'months',\n        },\n        {\n          text: 'Years',\n          value: 'years',\n        },\n      ],\n      currentPricingStructure: {\n        uuid: null,\n        name: '',\n        price_example: 100,\n        added_amount: 100,\n        duration_unit: 'days',\n        multiplier: 1,\n        price_tiers: [\n          {\n            name: '1 day',\n            quantity: 1,\n            period: 'days',\n            multiplier: 1,\n            example_price: 100,\n          },\n        ],\n      },\n    };\n  },\n\n  created() {\n    this.getPricingStructures();\n\n    EventBus.$on('create-pricing-structure-success', () => {\n      this.$router.push({name: 'settings.pricing.template'}).catch(() => {\n      });\n    });\n  },\n\n  mounted() {\n    this.$nextTick(() => {\n      this.$refs.template_name.focus();\n    });\n  },\n\n  computed: {\n    ...mapGetters({\n      appFeatures: 'app/appFeatures',\n      featureWaitlist: 'app/featureWaitlist',\n      pricingStructures: 'pricing/pricingStructures',\n      pricingStructure: 'pricing/pricingStructure',\n      currentWorkingPricingStructure: 'pricing/currentWorkingPricingStructure',\n    }),\n    automaticAmount: {\n      get() {\n        return this.currentPricingStructure.example_price;\n      },\n      set(value) {\n        this.currentPricingStructure.example_price = value;\n      },\n    },\n    saveButtonReady() {\n      return !this.currentPricingStructure.name || !this.currentPricingStructure.price_example;\n    },\n  },\n\n  methods: {\n    savePriceStructureInit() {\n      this.savePriceStructure(this.currentPricingStructure);\n    },\n    ...mapActions({\n      getPricingStructure: 'pricing/getPricingStructure',\n      updatePriceStructure: 'pricing/updatePriceStructure',\n      deletePriceStructure: 'pricing/deletePriceStructure',\n      getPricingStructures: 'pricing/getPricingStructures',\n      savePriceStructure: 'pricing/savePriceStructure',\n    }),\n    removePricingTier(index) {\n      this.currentPricingStructure.price_tiers.splice(index, 1);\n    },\n    updateAddedAmount() {\n      this.currentPricingStructure.added_amount = this.currentPricingStructure.price_example * this.currentPricingStructure.multiplier;\n    },\n    updateAddedAmountMultiple() {\n      this.currentPricingStructure.multiplier = this.currentPricingStructure.added_amount / this.currentPricingStructure.price_example;\n    },\n    addPricingTier() {\n      const lastUnit = this.currentPricingStructure.price_tiers[this.currentPricingStructure.price_tiers.length - 1];\n      const durationUnit = get(lastUnit, 'period', 'days');\n      const quantity = get(lastUnit, 'quantity', 0) + 1;\n\n      this.currentPricingStructure.price_tiers.push({\n        name: `${quantity} ${durationUnit}`,\n        quantity,\n        period: durationUnit,\n        multiplier: 1,\n        example_price: 100,\n      });\n    },\n    updateResultingPriceParent() {\n      this.currentPricingStructure.added_amount = this.currentPricingStructure.price_example * this.currentPricingStructure.multiplier;\n      this.currentPricingStructure.price_tiers.forEach((tier) => {\n        const multiplier = +get(tier, 'multiplier', 1);\n        const examplePrice = this.currentPricingStructure.price_example;\n        let newPrice = multiplier * examplePrice;\n        newPrice = Math.round(newPrice * 100) / 100;\n        this.$set(tier, 'example_price', newPrice);\n      });\n    },\n    updateResultingPrice(index) {\n      const tier = this.currentPricingStructure.price_tiers[index];\n      const multiplier = +get(tier, 'multiplier', 1);\n      const examplePrice = this.currentPricingStructure.price_example;\n      this.$set(tier, 'example_price', multiplier * examplePrice);\n    },\n    updateMultiplier(index) {\n      const tier = this.currentPricingStructure.price_tiers[index];\n      const examplePrice = this.currentPricingStructure.price_example;\n      const resultingPrice = +get(tier, 'example_price', 0);\n\n      this.$set(tier, 'multiplier', resultingPrice / examplePrice);\n    },\n    updatePriceStructureInit() {\n      this.updatePriceStructure(this.currentPricingStructure);\n    },\n    deletePriceStructureInit() {\n      this.deletePriceStructure(this.currentPricingStructure);\n    },\n    setupEditStructure() {\n      this.currentPricingStructure.uuid = this.pricingStructure.uuid;\n      this.currentPricingStructure.name = this.pricingStructure.name;\n      this.currentPricingStructure.price_example = 100;\n      this.currentPricingStructure.multiplier = this.pricingStructure.multiplier;\n\n      let durationUnit = ['hour', 'day', 'month', 'week', 'year'].find(key => this.pricingStructure[key] > 0);\n      if (durationUnit) {\n        this.currentPricingStructure.multiplier = this.pricingStructure[durationUnit];\n\n        if (durationUnit[durationUnit.length - 1] !== 's') {\n          durationUnit += 's';\n        }\n        this.currentPricingStructure.duration_unit = durationUnit;\n      }\n\n      const tiers = this.pricingStructure?.pricing_tiles ?? [];\n\n      if (tiers) {\n        this.currentPricingStructure.price_tiers = [];\n        tiers.forEach((tier) => {\n          this.currentPricingStructure.price_tiers.push({\n            name: tier.name,\n            quantity: tier.quantity,\n            period: tier.period,\n            multiplier: tier.multiplier,\n            example_price: tier.multiplier * this.currentPricingStructure.price_example,\n          });\n        });\n      }\n    },\n  },\n\n  beforeUnmount() {\n    EventBus.$off('create-pricing-structure-success');\n  },\n};\n</script>\n<style>\n.evTrKC {\n  display: grid;\n  grid-template-columns: auto 50px 120px 50px 100px auto 50px;\n  column-gap: 6px;\n  align-items: flex-end;\n  margin-bottom: 12px;\n}\n\n.evTrKC > * {\n  margin: 0;\n}\n\n.ONqJD {\n  align-self: center;\n  color: rgb(118, 127, 130);\n  padding-top: 24px;\n}\n\n.fJfBtJ {\n  cursor: pointer;\n  align-self: center;\n  font-size: 14px;\n  display: inline-block;\n  color: rgb(24, 24, 24);\n}\n\n.jEVlcv {\n  padding-top: 19px;\n}\n\n.kXPMMB {\n  display: flex;\n  -webkit-box-align: center;\n  align-items: center;\n  -webkit-box-pack: justify;\n  justify-content: space-between;\n}\n\n.evTrKC .Label-eJXSuD {\n  white-space: nowrap;\n}\n\n.gZKasB {\n  display: block;\n  color: rgb(24, 24, 24);\n  font-size: 14px;\n  font-weight: 600;\n  line-height: 14px;\n  margin-bottom: 5px;\n}\n\n.eYnYJY {\n  height: 1.3em;\n  width: auto;\n  margin-bottom: 6px;\n}\n\n.bsHxqg.bsHxqg.bsHxqg {\n  display: block;\n  position: relative;\n  font-size: 12px;\n}\n\n.cCETsh.cCETsh {\n  display: inline-block;\n  vertical-align: middle;\n  width: 100%;\n  height: 38px;\n  padding: 0px 12px;\n  margin: 0px;\n  color: rgb(24, 24, 24);\n  background: rgb(255, 255, 255);\n  border: 1px solid rgb(226, 230, 235);\n  border-radius: 6px;\n  outline: 0px;\n  font-size: 12px;\n  font-weight: 400;\n  line-height: 1;\n  box-sizing: border-box;\n}\n\n.erHrFZ {\n  position: relative;\n}\n\n.css-2b097c-container {\n  position: relative;\n  box-sizing: border-box;\n}\n\n.kvYiAT .Select__control {\n  padding: 0px 0px 0px 12px;\n  color: rgb(24, 24, 24);\n  background: rgb(255, 255, 255);\n  border: 1px solid rgb(226, 230, 235);\n  border-radius: 6px;\n  font-size: 12px;\n  cursor: pointer;\n  height: 38px !important;\n  overflow: visible !important;\n}\n\n.css-yk16xz-control {\n  -webkit-box-align: center;\n  align-items: center;\n  background-color: rgb(255, 255, 255);\n  border-color: rgb(204, 204, 204);\n  border-radius: 4px;\n  border-style: solid;\n  border-width: 1px;\n  cursor: default;\n  display: flex;\n  flex-wrap: wrap;\n  -webkit-box-pack: justify;\n  justify-content: space-between;\n  min-height: 38px;\n  position: relative;\n  transition: all 100ms ease 0s;\n  box-sizing: border-box;\n  outline: 0px !important;\n}\n\n.css-1hwfws3 {\n  -webkit-box-align: center;\n  align-items: center;\n  display: flex;\n  flex: 1 1 0%;\n  flex-wrap: wrap;\n  padding: 2px 8px;\n  position: relative;\n  overflow: hidden;\n  box-sizing: border-box;\n}\n\n.kvYiAT .Select__value-container {\n  padding: 0px;\n  height: 38px !important;\n}\n\n.css-1wy0on6 {\n  -webkit-box-align: center;\n  align-items: center;\n  align-self: stretch;\n  display: flex;\n  flex-shrink: 0;\n  box-sizing: border-box;\n}\n\n.css-1okebmr-indicatorSeparator {\n  align-self: stretch;\n  background-color: rgb(204, 204, 204);\n  margin-bottom: 8px;\n  margin-top: 8px;\n  width: 1px;\n  box-sizing: border-box;\n}\n\n.kvYiAT .Select__indicator-separator {\n  display: none;\n}\n\n.css-tlfecz-indicatorContainer {\n  color: rgb(204, 204, 204);\n  display: flex;\n  padding: 8px;\n  transition: color 150ms ease 0s;\n  box-sizing: border-box;\n}\n\n.css-19bqh2r {\n  display: inline-block;\n  fill: currentcolor;\n  line-height: 1;\n  stroke: currentcolor;\n  stroke-width: 0;\n}\n\n.css-1uccc91-singleValue {\n  color: rgb(51, 51, 51);\n  margin-left: 2px;\n  margin-right: 2px;\n  max-width: calc(100% - 8px);\n  overflow: hidden;\n  position: absolute;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n  top: 50%;\n  transform: translateY(-50%);\n  box-sizing: border-box;\n}\n\n.kvYiAT .Select__single-value {\n  overflow: visible;\n  color: rgb(24, 24, 24);\n}\n\n.css-1ogwcvc {\n  margin: 0px;\n  padding: 0px;\n  height: 38px !important;\n}\n\n.ONqJD {\n  align-self: center;\n  color: rgb(118, 127, 130);\n  padding-top: 24px;\n}\n\n.bsHxqg.bsHxqg.bsHxqg {\n  display: block;\n  position: relative;\n  font-size: 12px;\n}\n\n.evTrKC .Label-eJXSuD {\n  white-space: nowrap;\n}\n\n.bsHxqg.bsHxqg.bsHxqg > .I-gmFDEA {\n  position: absolute;\n  height: 38px;\n  width: 38px;\n  color: rgb(187, 192, 193);\n  font-size: 1.25em;\n  font-style: normal;\n  line-height: 38px;\n  text-align: center;\n  pointer-events: none;\n}\n\n.bsHxqg.bsHxqg.bsHxqg > .I-gmFDEA + .Input-icnXNI {\n  padding-left: 38px;\n}\n\n.xfmMQ .v-select.v-input--dense .v-select__selection--comma {\n  margin: 0;\n  font-size: 12px;\n  font-weight: 400;\n}\n\n.xfmMQ fieldset {\n  color: rgb(226, 230, 235) !important;\n  border: 1px solid rgb(226, 230, 235);\n}\n\n.xfmMQ input[type=text]:hover:not(:focus) {\n  border-color: #CDCDCD;\n  -webkit-box-shadow: inset 0 -1px 0 0 rgba(255, 255, 255, 0.8);\n  -moz-box-shadow: inset 0 -1px 0 0 rgba(255, 255, 255, 0.8);\n  box-shadow: inset 0 -1px 0 0 rgba(255, 255, 255, 0.8);\n}\n\n.cCETsh.cCETsh:hover {\n  border-color: rgb(191, 197, 203);\n}\n\n.pricing-structure-example-price fieldset {\n  color: rgb(226, 230, 235) !important;\n  border: 1px solid rgb(226, 230, 235);\n}\n\n.pricing-structure-example-price:hover {\n  border-color: rgb(191, 197, 203) !important;\n}\n\n.esebmt {\n  display: grid;\n  column-gap: 6px;\n  align-items: flex-end;\n  grid-template-columns: auto 65px 90px 100px;\n  margin-bottom: 0px;\n  margin-top: 12px;\n}\n\n.esebmt .Label-eJXSuD {\n  white-space: nowrap;\n}\n\n/* Chrome, Safari, Edge, Opera */\ninput::-webkit-outer-spin-button,\ninput::-webkit-inner-spin-button {\n  -webkit-appearance: none;\n  margin: 0;\n}\n\n/* Firefox */\ninput[type=number] {\n  -moz-appearance: textfield;\n}\n</style>\n","<template>\n  <div>\n    <div class=\"\">\n      <div class=\"\">\n        <div class=\"setting-section-description\">\n          <h2>New template structure</h2>\n          <div class=\"feature-description\">\n            Create price tiers to set prices for different rental periods. You could use it to make the price lower when\n            customers rent for a longer period of time.\n\n            <TheHelpLink url=\"https://help.fleetwire.io/en/article/setting-up-taxes-ey9pyo/?bust=1675453082095\"></TheHelpLink>\n          </div>\n        </div>\n      </div>\n      <div class=\"\">\n        <v-card variant=\"outlined\">\n          <v-card-text class=\"mt-3\">\n            <div>\n              <div>\n                <label class=\"font-bold\">Template Name</label>\n                <v-text-field\n                  ref=\"template_name\"\n                  v-model=\"currentPricingStructure.name\"\n                  density=\"compact\"\n                  hide-details\n                  name=\"template_name\"\n                  variant=\"outlined\"\n                ></v-text-field>\n                <div class=\"mt-2\">This is not visible to customers.</div>\n              </div>\n            </div>\n          </v-card-text>\n        </v-card>\n\n        <v-card class=\"mt-5\" variant=\"outlined\">\n          <v-card-text>\n            <div class=\"mt-10\">\n              <h5 class=\"h5\">Price tiers</h5>\n\n              <div class=\"font-bold\">\n                Example price\n              </div>\n              <p>The example price is replaced by the base price of the listing that use this template.</p>\n\n              <v-text-field\n                v-model=\"currentPricingStructure.price_example\"\n                :prefix=\"companyMoneyTextInputSettings.prefix\"\n                :suffix=\"companyMoneyTextInputSettings.suffix\"\n                class=\"pricing-structure-example-price\"\n                density=\"compact\"\n                type=\"number\"\n                variant=\"outlined\"\n                @blur=\"updateResultingPriceParent()\"\n              ></v-text-field>\n\n              <div>\n                <div>\n                  <div v-for=\"(tier,i) in currentPricingStructure.price_tiers\" :key=\"i\" class=\"Row-eCkaBm evTrKC\">\n                    <div class=\"Div-bMiTSW Col-iaLJLx InputField-iwpqyF xfmMQ\" data-tid=\"Row 1: Label\">\n                      <div v-if=\"i === 0\" class=\"LabelContainer-fLmGyQ kXPMMB\">\n                        <label class=\"Label-eJXSuD Label-iekCsg gZKasB eYnYJY\" for=\"clidjimoz00273b7saj4fna9w\">\n                          Price tier label\n                        </label>\n                      </div>\n                      <span class=\"InputContainer-hJWSEI bsHxqg\">\n                          <input\n                            v-model=\"tier.name\"\n                            :name=\"`price_tiles_attributes[${i}].name`\"\n                            autocomplete=\"off\"\n                            class=\"Input-bXxEzP Input-icnXNI cCETsh blXyKC\"\n                            type=\"text\"\n                          ></span>\n                    </div>\n                    <div class=\"Div-bMiTSW Col-iaLJLx InputField-iwpqyF xfmMQ\" data-tid=\"Row 1: Duration\">\n                      <div v-if=\"i === 0\" class=\"LabelContainer-fLmGyQ kXPMMB\">\n                        <label class=\"Label-eJXSuD Label-iekCsg gZKasB eYnYJY\" for=\"clidjimp000283b7surusxx4f\">Duration</label>\n                      </div>\n                      <span class=\"InputContainer-hJWSEI bsHxqg\">\n                          <input\n                            v-model=\"tier.quantity\"\n                            :name=\"`price_tiles_attributes[${i}].quantity`\"\n                            autocomplete=\"off\"\n                            class=\"Input-bXxEzP Input-icnXNI cCETsh blXyKC\"\n                            min=\"1\"\n                            type=\"number\"\n                          ></span>\n                    </div>\n                    <div class=\"Div-bMiTSW Col-iaLJLx InputField-iwpqyF xfmMQ\" data-tid=\"Row 1: Period\">\n                      <div v-if=\"i === 0\" class=\"LabelContainer-fLmGyQ kXPMMB\"></div>\n                      <div class=\"Container-boBWlZ erHrFZ\">\n                        <v-select\n                          v-model=\"tier.period\"\n                          :items=\"durationUnits\"\n                          class=\"\"\n                          density=\"compact\"\n                          hide-details\n                          item-title=\"text\"\n                          item-value=\"value\"\n                          style=\"\"\n                          variant=\"outlined\"\n                        ></v-select>\n                      </div>\n                    </div>\n\n                    <div class=\"Div-bMiTSW Col-iaLJLx InputField-iwpqyF xfmMQ\" data-tid=\"Row 1: Multiplier\">\n                      <div v-if=\"i === 0\" class=\"LabelContainer-fLmGyQ kXPMMB\">\n                        <label class=\"Label-eJXSuD Label-iekCsg gZKasB eYnYJY\" for=\"clidjimp8002a3b7sz3j23aa9\">\n                          Multiply base price by\n                        </label>\n                      </div>\n                      <span class=\"InputContainer-hJWSEI bsHxqg\">\n                          <input\n                            v-model=\"tier.multiplier\"\n                            :name=\"`price_tiles_attributes[${i}].multiplier`\"\n                            autocomplete=\"off\"\n                            class=\"cCETsh\"\n                            type=\"text\"\n                            @blur=\"updateResultingPrice(i)\"\n                          ></span>\n                    </div>\n                    <div class=\"ONqJD\">* base price =</div>\n                    <div class=\"\" data-tid=\"Row 1: Example price\">\n                      <div v-if=\"i === 0\" class=\"LabelContainer-fLmGyQ kXPMMB\">\n                        <label class=\"Label-eJXSuD Label-iekCsg gZKasB eYnYJY\" for=\"clidjimp9002b3b7sb1ldvxal\">\n                          Resulting price\n                        </label>\n                      </div>\n                      <span class=\"InputContainer-hJWSEI bsHxqg\">\n                          <i class=\"I-gmFDEA eaYeOY\">$</i>\n                          <input\n                            v-model=\"tier.example_price\"\n                            :name=\"`price_tiles_attributes[${i}].example_price`\"\n                            autocomplete=\"off\"\n                            class=\"Input-bXxEzP Input-icnXNI cCETsh blXyKC\"\n                            label=\"Resulting price\"\n                            type=\"number\"\n                            @blur=\"updateMultiplier(i)\"\n                          >\n                        </span>\n                    </div>\n                    <v-btn class=\"fJfBtJ mt-4\" size=\"small\" variant=\"text\" @click=\"removePricingTier(i)\">\n                      <v-icon size=\"small\">mdi-delete</v-icon>\n                    </v-btn>\n                  </div>\n                </div>\n\n                <div class=\"mt-5\">\n                  <v-btn variant=\"outlined\" @click=\"addPricingTier()\">Add Price Tier</v-btn>\n                </div>\n              </div>\n            </div>\n          </v-card-text>\n        </v-card>\n\n        <v-card class=\"mt-5\" variant=\"outlined\">\n          <v-card-title>Automatic increments</v-card-title>\n          <v-card-subtitle>\n            Set an amount that is added for each period following the price tier with the longest period.\n          </v-card-subtitle>\n          <v-card-text>\n            <div>\n              <div class=\"Row-eCkaBm esebmt\" data-tid=\"Each extra block\">\n                <div class=\"EachExtra-hFYHww ipTNEC\">\n                  <div class=\"Div-bMiTSW Col-iaLJLx InputField-iwpqyF xfmMQ\" data-tid=\"Each extra\">\n                    <div class=\"LabelContainer-fLmGyQ kXPMMB\">\n                      <label class=\"Label-eJXSuD Label-iekCsg gZKasB eYnYJY\" for=\"clidly6i3002c3b7s5y2eovx6\">\n                        Each extra\n                      </label>\n                    </div>\n                    <div class=\"Container-boBWlZ erHrFZ\" data-tid=\"Each extra\">\n                      <div class=\"Container-boBWlZ erHrFZ\">\n                        <v-select\n                          v-model=\"currentPricingStructure.duration_unit\"\n                          :items=\"durationUnits\"\n                          class=\"\"\n                          density=\"compact\"\n                          hide-details\n                          item-title=\"text\"\n                          item-value=\"value\"\n                          style=\"\"\n                          variant=\"outlined\"\n                        ></v-select>\n                      </div>\n                    </div>\n                  </div>\n                </div>\n                <div class=\"Div-bMiTSW Col-iaLJLx InputField-iwpqyF xfmMQ\" data-tid=\"Each extra multiplier\">\n                  <div class=\"LabelContainer-fLmGyQ kXPMMB\">\n                    <label class=\"Label-eJXSuD Label-iekCsg gZKasB eYnYJY\" for=\"clidly6i6002d3b7s2wg4cao0\">\n                      Multiply base price by\n                    </label>\n                  </div>\n                  <span class=\"InputContainer-hJWSEI bsHxqg\">\n                    <input\n                      v-model=\"currentPricingStructure.multiplier\"\n                      autocomplete=\"off\"\n                      class=\"Input-bXxEzP Input-icnXNI cCETsh blXyKC\"\n                      name=\"hour\"\n                      type=\"text\"\n                      @blur.stop=\"updateAddedAmount()\"\n                    ></span>\n                </div>\n                <div class=\"PriceText-iYCcgJ ONqJD\">* base price =</div>\n                <div class=\"Div-bMiTSW Col-iaLJLx InputField-iwpqyF xfmMQ\" data-tid=\"Each extra price\">\n                  <div class=\"LabelContainer-fLmGyQ kXPMMB\">\n                    <label class=\"Label-eJXSuD Label-iekCsg gZKasB eYnYJY\" for=\"clidly6i6002e3b7srupwc20u\">\n                      Added amount\n                    </label>\n                  </div>\n                  <span class=\"InputContainer-hJWSEI bsHxqg\">\n                    <i class=\"I-gmFDEA eaYeOY\">$</i>\n                    <input\n                      v-model=\"currentPricingStructure.added_amount\"\n                      autocomplete=\"off\"\n                      class=\"Input-bXxEzP Input-icnXNI cCETsh blXyKC\"\n                      name=\"example_price\"\n                      @blur.stop=\"updateAddedAmountMultiple()\"\n                    >\n                  </span>\n                </div>\n              </div>\n            </div>\n          </v-card-text>\n        </v-card>\n\n        <div class=\"flex mt-5\">\n          <DeleteButton\n            button-main-color=\"red\"\n            @deleteConfirmed=\"deletePriceStructureInit()\"\n          />\n          <v-spacer/>\n          <v-btn variant=\"text\" @click=\"goBack\">Cancel</v-btn>\n          <v-btn :disabled=\"saveButtonReady\" class=\"ml-2\" color=\"primary\" variant=\"flat\" @click=\"updatePriceStructureInit()\">\n            Save\n          </v-btn>\n        </div>\n      </div>\n    </div>\n  </div>\n</template>\n\n<script lang=\"ts\">\nimport {defineAsyncComponent} from 'vue';\nimport {mapActions, mapGetters} from 'vuex';\nimport {get} from 'lodash';\nimport {EventBus} from '@/plugins/eventBus';\nimport {useMoneyFormatter} from '@/composables/useMoneyFormatter';\nimport {useRouter} from 'vue-router';\n\nconst DeleteButton = defineAsyncComponent(() => import('@/components/buttons/DeleteButton.vue'));\n\nexport default {\n  name: 'PricingTemplateEdit',\n\n  setup() {\n    const router = useRouter();\n    const {companyMoneyTextInputSettings} = useMoneyFormatter();\n\n    const goBack = () => {\n      router.go(-1);\n    };\n\n    return {\n      goBack,\n      companyMoneyTextInputSettings,\n    };\n  },\n\n  components: {\n    DeleteButton,\n  },\n\n  data() {\n    return {\n      durationUnits: [\n        {\n          text: 'Hours',\n          value: 'hours',\n        },\n        {\n          text: 'Days',\n          value: 'days',\n        },\n        {\n          text: 'Weeks',\n          value: 'weeks',\n        },\n        {\n          text: 'Months',\n          value: 'months',\n        },\n        {\n          text: 'Years',\n          value: 'years',\n        },\n      ],\n      currentPricingStructure: {\n        uuid: null,\n        name: '',\n        price_example: 100,\n        added_amount: 100,\n        duration_unit: 'days',\n        multiplier: 1,\n        price_tiers: [\n          {\n            name: '1 day',\n            quantity: 1,\n            period: 'days',\n            multiplier: 1,\n            example_price: 100,\n          },\n        ],\n      },\n    };\n  },\n\n  created() {\n    this.getPricingStructure(this.$route.params.uuid);\n\n    EventBus.$on('delete-pricing-structure-success', () => {\n      this.$router.push({name: 'settings.pricing.template'}).catch(() => {\n      });\n    });\n  },\n\n  watch: {\n    pricingStructure: {\n      handler() {\n        this.setupEditStructure();\n      },\n    },\n  },\n\n  computed: {\n    ...mapGetters({\n      appFeatures: 'app/appFeatures',\n      featureWaitlist: 'app/featureWaitlist',\n      pricingStructures: 'pricing/pricingStructures',\n      pricingStructure: 'pricing/pricingStructure',\n      currentWorkingPricingStructure: 'pricing/currentWorkingPricingStructure',\n    }),\n    automaticAmount: {\n      get() {\n        return this.currentPricingStructure.example_price;\n      },\n      set(value) {\n        this.currentPricingStructure.example_price = value;\n      },\n    },\n    saveButtonReady() {\n      return !this.currentPricingStructure.name || !this.currentPricingStructure.price_example;\n    },\n  },\n\n  methods: {\n    ...mapActions({\n      getPricingStructure: 'pricing/getPricingStructure',\n      updatePriceStructure: 'pricing/updatePriceStructure',\n      deletePriceStructure: 'pricing/deletePriceStructure',\n      getPricingStructures: 'pricing/getPricingStructures',\n      savePriceStructure: 'pricing/savePriceStructure',\n    }),\n    removePricingTier(index) {\n      this.currentPricingStructure.price_tiers.splice(index, 1);\n    },\n    updateAddedAmount() {\n      this.currentPricingStructure.added_amount = this.currentPricingStructure.price_example * this.currentPricingStructure.multiplier;\n    },\n    updateAddedAmountMultiple() {\n      this.currentPricingStructure.multiplier = this.currentPricingStructure.added_amount / this.currentPricingStructure.price_example;\n    },\n    addPricingTier() {\n      const lastUnit = this.currentPricingStructure.price_tiers[this.currentPricingStructure.price_tiers.length - 1];\n      const durationUnit = get(lastUnit, 'period', 'days');\n      const quantity = get(lastUnit, 'quantity', 0) + 1;\n\n      this.currentPricingStructure.price_tiers.push({\n        name: `${quantity} ${durationUnit}`,\n        quantity,\n        period: durationUnit,\n        multiplier: 1,\n        example_price: 100,\n      });\n    },\n    updateResultingPriceParent() {\n      this.currentPricingStructure.added_amount = this.currentPricingStructure.price_example * this.currentPricingStructure.multiplier;\n      this.currentPricingStructure.price_tiers.forEach((tier) => {\n        const multiplier = +get(tier, 'multiplier', 1);\n        const examplePrice = this.currentPricingStructure.price_example;\n        let newPrice = multiplier * examplePrice;\n        newPrice = Math.round(newPrice * 100) / 100;\n        this.$set(tier, 'example_price', newPrice);\n      });\n    },\n    updateResultingPrice(index) {\n      const tier = this.currentPricingStructure.price_tiers[index];\n      const multiplier = +get(tier, 'multiplier', 1);\n      const examplePrice = this.currentPricingStructure.price_example;\n      this.$set(tier, 'example_price', multiplier * examplePrice);\n    },\n    updateMultiplier(index) {\n      const tier = this.currentPricingStructure.price_tiers[index];\n      const examplePrice = this.currentPricingStructure.price_example;\n      const resultingPrice = +get(tier, 'example_price', 0);\n\n      this.$set(tier, 'multiplier', resultingPrice / examplePrice);\n    },\n    updatePriceStructureInit() {\n      this.updatePriceStructure(this.currentPricingStructure);\n    },\n    deletePriceStructureInit() {\n      this.deletePriceStructure(this.currentPricingStructure);\n    },\n    setupEditStructure() {\n      this.currentPricingStructure.uuid = this.pricingStructure.uuid;\n      this.currentPricingStructure.name = this.pricingStructure.name;\n      this.currentPricingStructure.price_example = 100;\n      this.currentPricingStructure.multiplier = this.pricingStructure.multiplier;\n\n      let durationUnit = ['hour', 'day', 'month', 'week', 'year'].find(key => this.pricingStructure[key] > 0);\n      if (durationUnit) {\n        this.currentPricingStructure.multiplier = this.pricingStructure[durationUnit];\n\n        if (durationUnit[durationUnit.length - 1] !== 's') {\n          durationUnit += 's';\n        }\n        this.currentPricingStructure.duration_unit = durationUnit;\n      }\n\n      const tiers = this.pricingStructure?.pricing_tiles ?? [];\n\n      if (tiers) {\n        this.currentPricingStructure.price_tiers = [];\n        tiers.forEach((tier) => {\n          this.currentPricingStructure.price_tiers.push({\n            name: tier.name,\n            quantity: tier.quantity,\n            period: tier.period,\n            multiplier: tier.multiplier,\n            example_price: tier.multiplier * this.currentPricingStructure.price_example,\n          });\n        });\n      }\n    },\n  },\n\n  beforeUnmount() {\n    EventBus.$off('delete-pricing-structure-success');\n    this.$store.commit('pricing/RESET_CURRENT_WORKING_PRICING_STRUCTURE');\n  },\n};\n</script>\n<style>\n.evTrKC {\n  display: grid;\n  grid-template-columns: auto 50px 120px 50px 100px auto 50px;\n  column-gap: 6px;\n  align-items: flex-end;\n  margin-bottom: 12px;\n}\n\n.evTrKC > * {\n  margin: 0;\n}\n\n.ONqJD {\n  align-self: center;\n  color: rgb(118, 127, 130);\n  padding-top: 24px;\n}\n\n.fJfBtJ {\n  cursor: pointer;\n  align-self: center;\n  font-size: 14px;\n  display: inline-block;\n  color: rgb(24, 24, 24);\n}\n\n.jEVlcv {\n  padding-top: 19px;\n}\n\n.kXPMMB {\n  display: flex;\n  -webkit-box-align: center;\n  align-items: center;\n  -webkit-box-pack: justify;\n  justify-content: space-between;\n}\n\n.evTrKC .Label-eJXSuD {\n  white-space: nowrap;\n}\n\n.gZKasB {\n  display: block;\n  color: rgb(24, 24, 24);\n  font-size: 14px;\n  font-weight: 600;\n  line-height: 14px;\n  margin-bottom: 5px;\n}\n\n.eYnYJY {\n  height: 1.3em;\n  width: auto;\n  margin-bottom: 6px;\n}\n\n.bsHxqg.bsHxqg.bsHxqg {\n  display: block;\n  position: relative;\n  font-size: 12px;\n}\n\n.cCETsh.cCETsh {\n  display: inline-block;\n  vertical-align: middle;\n  width: 100%;\n  height: 38px;\n  padding: 0 12px;\n  margin: 0;\n  color: rgb(24, 24, 24);\n  background: rgb(255, 255, 255);\n  border: 1px solid rgb(226, 230, 235);\n  border-radius: 6px;\n  outline: 0;\n  font-size: 12px;\n  font-weight: 400;\n  line-height: 1;\n  box-sizing: border-box;\n}\n\n.erHrFZ {\n  position: relative;\n}\n\n.css-2b097c-container {\n  position: relative;\n  box-sizing: border-box;\n}\n\n.kvYiAT .Select__control {\n  padding: 0 0 0 12px;\n  color: rgb(24, 24, 24);\n  background: rgb(255, 255, 255);\n  border: 1px solid rgb(226, 230, 235);\n  border-radius: 6px;\n  font-size: 12px;\n  cursor: pointer;\n  height: 38px !important;\n  overflow: visible !important;\n}\n\n.css-yk16xz-control {\n  -webkit-box-align: center;\n  align-items: center;\n  background-color: rgb(255, 255, 255);\n  border-color: rgb(204, 204, 204);\n  border-radius: 4px;\n  border-style: solid;\n  border-width: 1px;\n  cursor: default;\n  display: flex;\n  flex-wrap: wrap;\n  -webkit-box-pack: justify;\n  justify-content: space-between;\n  min-height: 38px;\n  position: relative;\n  transition: all 100ms ease 0s;\n  box-sizing: border-box;\n  outline: 0 !important;\n}\n\n.css-1hwfws3 {\n  -webkit-box-align: center;\n  align-items: center;\n  display: flex;\n  flex: 1 1 0;\n  flex-wrap: wrap;\n  padding: 2px 8px;\n  position: relative;\n  overflow: hidden;\n  box-sizing: border-box;\n}\n\n.kvYiAT .Select__value-container {\n  padding: 0;\n  height: 38px !important;\n}\n\n.css-1wy0on6 {\n  -webkit-box-align: center;\n  align-items: center;\n  align-self: stretch;\n  display: flex;\n  flex-shrink: 0;\n  box-sizing: border-box;\n}\n\n.css-1okebmr-indicatorSeparator {\n  align-self: stretch;\n  background-color: rgb(204, 204, 204);\n  margin-bottom: 8px;\n  margin-top: 8px;\n  width: 1px;\n  box-sizing: border-box;\n}\n\n.kvYiAT .Select__indicator-separator {\n  display: none;\n}\n\n.css-tlfecz-indicatorContainer {\n  color: rgb(204, 204, 204);\n  display: flex;\n  padding: 8px;\n  transition: color 150ms ease 0s;\n  box-sizing: border-box;\n}\n\n.css-19bqh2r {\n  display: inline-block;\n  fill: currentcolor;\n  line-height: 1;\n  stroke: currentcolor;\n  stroke-width: 0;\n}\n\n.css-1uccc91-singleValue {\n  color: rgb(51, 51, 51);\n  margin-left: 2px;\n  margin-right: 2px;\n  max-width: calc(100% - 8px);\n  overflow: hidden;\n  position: absolute;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n  top: 50%;\n  transform: translateY(-50%);\n  box-sizing: border-box;\n}\n\n.kvYiAT .Select__single-value {\n  overflow: visible;\n  color: rgb(24, 24, 24);\n}\n\n/*noinspection CssRedundantUnit*/\n.css-1ogwcvc {\n  margin: 0px;\n  padding: 0px;\n  height: 38px !important;\n}\n\n.ONqJD {\n  align-self: center;\n  color: rgb(118, 127, 130);\n  padding-top: 24px;\n}\n\n.bsHxqg.bsHxqg.bsHxqg {\n  display: block;\n  position: relative;\n  font-size: 12px;\n}\n\n.evTrKC .Label-eJXSuD {\n  white-space: nowrap;\n}\n\n.bsHxqg.bsHxqg.bsHxqg > .I-gmFDEA {\n  position: absolute;\n  height: 38px;\n  width: 38px;\n  color: rgb(187, 192, 193);\n  font-size: 1.25em;\n  font-style: normal;\n  line-height: 38px;\n  text-align: center;\n  pointer-events: none;\n}\n\n.bsHxqg.bsHxqg.bsHxqg > .I-gmFDEA + .Input-icnXNI {\n  padding-left: 38px;\n}\n\n.xfmMQ .v-select.v-input--dense .v-select__selection--comma {\n  margin: 0;\n  font-size: 12px;\n  font-weight: 400;\n}\n\n.xfmMQ fieldset {\n  color: rgb(226, 230, 235) !important;\n  border: 1px solid rgb(226, 230, 235);\n}\n\n.xfmMQ input[type=text]:hover:not(:focus) {\n  border-color: #CDCDCD;\n  -webkit-box-shadow: inset 0 -1px 0 0 rgba(255, 255, 255, 0.8);\n  -moz-box-shadow: inset 0 -1px 0 0 rgba(255, 255, 255, 0.8);\n  box-shadow: inset 0 -1px 0 0 rgba(255, 255, 255, 0.8);\n}\n\n.cCETsh.cCETsh:hover {\n  border-color: rgb(191, 197, 203);\n}\n\n.pricing-structure-example-price fieldset {\n  color: rgb(226, 230, 235) !important;\n  border: 1px solid rgb(226, 230, 235);\n}\n\n.pricing-structure-example-price:hover {\n  border-color: rgb(191, 197, 203) !important;\n}\n\n.esebmt {\n  display: grid;\n  column-gap: 6px;\n  align-items: flex-end;\n  grid-template-columns: auto 65px 90px 100px;\n  margin-bottom: 0;\n  margin-top: 12px;\n}\n\n.esebmt .Label-eJXSuD {\n  white-space: nowrap;\n}\n\n/* Chrome, Safari, Edge, Opera */\ninput::-webkit-outer-spin-button,\ninput::-webkit-inner-spin-button {\n  -webkit-appearance: none;\n  margin: 0;\n}\n\n/* Firefox */\ninput[type=number] {\n  -moz-appearance: textfield;\n}\n</style>\n","<template>\n  <div>\n    <v-card variant=\"outlined\">\n      <v-card-title>\n        <v-btn class=\"mr-2\" variant=\"text\" @click=\"$router.push({ name: 'settings.pricing.advanced' }).catch(() => {});\">\n          <v-icon size=\"small\">mdi-arrow-left</v-icon>\n        </v-btn>\n        Price Rules\n        <v-spacer/>\n      </v-card-title>\n\n      <v-card-text class=\"mt-3\">\n        <div v-if=\"ruleClone\">\n          <div class=\"col-6\">\n            <v-select\n              v-model=\"rule\"\n              :items=\"rules\"\n              density=\"compact\"\n              item-title=\"label\"\n              item-value=\"value\"\n              label=\"Rule\"\n              variant=\"outlined\"\n            ></v-select>\n\n            <v-text-field\n              v-model=\"ruleClone.name\"\n              density=\"compact\"\n              label=\"Name\"\n              variant=\"outlined\"\n            ></v-text-field>\n\n            <div v-if=\"rule === 'fill-the-gap'\" class=\"mt-1\">\n\n              <p class=\"mt-2\">Fill the gap helps you fill in the time between reservations that may incentivize renters\n                to book odd or shorter times.</p>\n\n              <div class=\"text-2xl border-top\">\n                <v-menu open-on-hover>\n                  <template v-slot:activator=\"{ props }\">\n                    <v-btn\n                      style=\"padding-left: 0; padding-right:0;\"\n                      v-bind=\"props\"\n                      variant=\"text\"\n                    >\n                  <span class=\"i-in-place-edit\">\n                    {{ ruleClone.rules.action }}\n                  </span>\n                    </v-btn>\n                  </template>\n\n                  <v-list>\n                    <v-list-item v-model=\"ruleClone.rules.action\">\n                      <v-list-item value=\"increase\">\n                        <v-list-item-title>Increase</v-list-item-title>\n                      </v-list-item>\n                      <v-list-item value=\"decrease\">\n                        <v-list-item-title>Decrease</v-list-item-title>\n                      </v-list-item>\n                    </v-list-item>\n                  </v-list>\n                </v-menu>\n                listing prices by\n                <v-menu :close-on-content-click=\"false\" open-on-hover>\n                  <template v-slot:activator=\"{ props }\">\n                    <v-btn\n                      style=\"padding-left: 0; padding-right:0;\"\n                      v-bind=\"props\"\n                      variant=\"text\"\n                    >\n                  <span class=\"i-in-place-edit\">\n                    <span v-if=\"ruleClone.rules.mode ==='amount'\">$</span>\n                    {{ ruleClone.rules.value }}\n                    <span v-if=\"ruleClone.rules.mode ==='percent'\">%</span>\n                  </span>\n                    </v-btn>\n                  </template>\n\n                  <v-card>\n                    <v-card-text>\n                      <v-text-field\n                        v-model=\"ruleClone.rules.value\"\n                        label=\"Amount\"\n                        max=\"365\"\n                        min=\"0\"\n                        type=\"number\"\n                        variant=\"outlined\"\n                      ></v-text-field>\n                      <v-radio-group v-model=\"ruleClone.rules.mode\" inline>\n                        <v-radio label=\"Percent\" value=\"percent\"></v-radio>\n                        <v-radio label=\"Amount\" value=\"amount\"></v-radio>\n                      </v-radio-group>\n                    </v-card-text>\n                  </v-card>\n                </v-menu>\n                between reservations\n                <v-menu :close-on-content-click=\"false\" open-on-hover>\n                  <template v-slot:activator=\"{ props}\">\n                    <v-btn\n                      style=\"padding-left: 0; padding-right:0;\"\n                      v-bind=\"props\"\n                      variant=\"text\"\n                    >\n                      <span class=\"i-in-place-edit\">\n                        {{ ruleClone.rules.time_value }}\n                        <span>Days</span>\n                      </span>\n                    </v-btn>\n                  </template>\n\n                  <v-card>\n                    <v-card-text>\n                      <v-text-field\n                        v-model=\"ruleClone.rules.time_value\"\n                        label=\"Amount\"\n                        max=\"365\"\n                        min=\"0\"\n                        type=\"number\"\n                        variant=\"outlined\"\n                      ></v-text-field>\n                    </v-card-text>\n                  </v-card>\n                </v-menu>\n                out.\n\n                <v-expansion-panels class=\"mt-3\">\n                  <v-expansion-panel>\n                    <v-expansion-panel-title v-slot=\"{ open }\">\n                      <div>\n                        <div class=\"col-4\">Exclusions</div>\n                        <div class=\"col-8\">\n                          <v-fade-transition leave-absolute>\n                            <span v-if=\"open\">Add exclusion rules</span>\n                            <span v-else class=\"float-end\">{{ exclusionCount }} exclusion</span>\n                          </v-fade-transition>\n                        </div>\n                      </div>\n                    </v-expansion-panel-title>\n                    <v-expansion-panel-text>\n                      <div :class=\"{ '': ruleExclusionsGapMax}\">\n                        <v-checkbox v-model=\"ruleExclusionsGapMax\" density=\"compact\" hide-details>\n                          <template v-slot:label>\n                            <div class=\"flex\">\n                              Only when any two reservations are\n                              {{ ruleExclusionsGapMaxValue }}\n                              day apart or less\n                              <tippy\n                                allowHTML\n                                arrow\n                                interactive>\n                                <template v-slot:trigger>\n                                  <v-icon class=\" ml-1\" size=\"small\">mdi-help-circle-outline</v-icon>\n                                </template>\n                                <span>\n                                  This exclusion will only apply when the gap between two reservations is {{\n                                    ruleExclusionsGapMaxValue\n                                  }} day or less. This is useful for when you want to fill the gap between two reservations that are {{\n                                    ruleExclusionsGapMaxValue\n                                  }} day apart.\n                                <TheHelpLink url=\"https://help.fleetwire.io/en/article/advanced-pricing-cxlndp/?bust=1666982473968\"></TheHelpLink>\n                              </span>\n                              </tippy>\n                            </div>\n                          </template>\n                        </v-checkbox>\n                        <div v-if=\"ruleExclusionsGapMax\" class=\"ml-10\">\n                          <v-text-field\n                            v-model=\"ruleExclusionsGapMaxValue\"\n                            class=\"mt-1 mb-1\"\n                            density=\"compact\"\n                            hide-details\n                            label=\"Max Gap\"\n                            max=\"365\"\n                            min=\"0\"\n                            style=\"width: 100px;\"\n                            type=\"number\"\n                            variant=\"outlined\"\n                          ></v-text-field>\n                        </div>\n                        <hr v-if=\"ruleExclusionsGapMax\">\n                      </div>\n\n                      <v-checkbox\n                        v-model=\"ruleClone.exclusions.weekends.on\"\n                        density=\"compact\"\n                        hide-details\n                        label=\"Weekends\"\n                      ></v-checkbox>\n                      <v-checkbox\n                        v-model=\"ruleClone.exclusions.holidays.on\"\n                        density=\"compact\"\n                        hide-details\n                        label=\"Holidays\"\n                      ></v-checkbox>\n                      <div>\n                        <v-checkbox\n                          v-model=\"ruleClone.exclusions.listings.on\"\n                          density=\"compact\"\n                          hide-details\n                          label=\"These Listings\"\n                        ></v-checkbox>\n                        <div v-if=\"ruleClone.exclusions.listings.on\" class=\"mt-3 pl-10\">\n                          <ListingAutocompleteDropdown\n                            :allow-multiple=\"true\"\n                            :allow-select-all=\"true\"\n                            :pre-selected=\"ruleClone.exclusions.listings.listings\"\n                            style=\"z-index: 1000\"\n                            @selectedListing=\"listingSelected($event)\"\n                          ></ListingAutocompleteDropdown>\n                        </div>\n                      </div>\n                    </v-expansion-panel-text>\n                  </v-expansion-panel>\n                </v-expansion-panels>\n              </div>\n            </div>\n          </div>\n        </div>\n      </v-card-text>\n      <v-card-actions>\n        <v-spacer/>\n        <DeleteButton class=\"mr-2\" @deleteConfirmed=\"deletePricingRule\"/>\n        <v-btn :loading=\"pricingRulesLoading.update\" size=\"small\" @click=\"savePricingRuleInit()\">Save</v-btn>\n      </v-card-actions>\n    </v-card>\n\n  </div>\n</template>\n\n<script lang=\"ts\">\nimport {defineAsyncComponent} from 'vue';\nimport {app} from '@/app';\nimport {EventBus} from '@/plugins/eventBus';\nimport {mapActions, mapGetters} from 'vuex';\nimport {get} from 'lodash';\n\nconst DeleteButton = defineAsyncComponent(() => import('@/components/buttons/DeleteButton.vue'));\nconst ListingAutocompleteDropdown = () => import('@/components/dashboard/listings/ListingAutocompleteDropdown.vue');\n\nexport default {\n  name: 'AdvancedPricingEdit',\n\n  components: {\n    DeleteButton,\n    ListingAutocompleteDropdown,\n  },\n\n  data() {\n    return {\n      timer: 0,\n      pricingRuleUuid: this.$route.params.uuid,\n      EventBus,\n      rule: null,\n      rules: [\n        {\n          label: 'Raise/lower prices',\n          value: 'raise-lower-prices',\n          data: {\n            action: 'raise',\n            booking_cnt: 0,\n          },\n        },\n        {\n          label: 'Fill the Gap',\n          value: 'fill-the-gap',\n        },\n      ],\n      ruleClone: null,\n    };\n  },\n\n  created() {\n    if (this.pricingRules.length === 0) {\n      this.getPricingRules();\n    }\n\n    EventBus.$on('create-pricing-rules-success', () => {\n      this.getPricingRules();\n    });\n    EventBus.$on('delete-pricing-rules-success', () => {\n      this.getPricingRules();\n    });\n  },\n\n  watch: {\n    pricingRules: {\n      immediate: true,\n      handler() {\n        this.findPricingRule();\n      },\n    },\n    currentPricingRule: {\n      immediate: true,\n      handler(rule) {\n        this.rule = get(rule, 'rule_type', null);\n        this.ruleClone = rule;\n      },\n    },\n  },\n\n  computed: {\n    ...mapGetters({\n      pricingRules: 'pricing/pricingRules',\n      pricingRulesLoading: 'pricing/loading',\n    }),\n    ruleExclusionsGapMax: {\n      get() {\n        return get(this.ruleClone, 'exclusions.gap_max.on', false);\n      },\n      set(value) {\n        if (!get(this.ruleClone, 'exclusions.gap_max')) {\n          app.set(this.ruleClone.exclusions, 'gap_max', {on: false, value: 1});\n        }\n        app.set(this.ruleClone.exclusions.gap_max, 'on', value);\n      },\n    },\n    ruleExclusionsGapMaxValue: {\n      get() {\n        return get(this.ruleClone, 'exclusions.gap_max.value', 1);\n      },\n      set(value) {\n        if (!get(this.ruleClone, 'exclusions.gap_max')) {\n          app.set(this.ruleClone.exclusions, 'gap_max', {on: false, value: 1});\n        }\n        app.set(this.ruleClone.exclusions.gap_max, 'value', +value);\n      },\n    },\n    currentPricingRule() {\n      return this.pricingRules.find((rule) => rule.uuid === this.pricingRuleUuid);\n    },\n    exclusionCount() {\n      if (!this.ruleClone) {\n        return 0;\n      }\n      return Object.values(this.ruleClone.exclusions).filter((v) => v.on).length;\n    },\n  },\n\n  methods: {\n    ...mapActions({\n      getPricingRules: 'pricing/getPricingRules',\n      deletePricingRules: 'pricing/deletePricingRules',\n      savePricingRule: 'pricing/savePricingRule',\n    }),\n    listingSelected(listings) {\n      if (!this.ruleClone.exclusions.listings.listings) {\n        app.set(this.ruleClone.exclusions.listings, 'listings', []);\n      }\n      this.ruleClone.exclusions.listings.listings = listings.map((l) => {\n        if (typeof l === 'string') {\n          return l;\n        }\n        return l.l_id;\n      });\n    },\n    savePricingRuleInit() {\n      this.savePricingRule({\n        uuid: this.pricingRuleUuid,\n        data: this.ruleClone,\n        rule: this.ruleClone.rule_type,\n      });\n    },\n    findPricingRule() {\n      return this.pricingRules.find((pricingRule) => pricingRule.uuid === this.pricingRuleUuid);\n    },\n    firstPartOfUuid(uuid) {\n      return uuid.split('-')[0];\n    },\n    ruleType(rule) {\n      const type = get(rule, 'rule_type', 'N/A');\n      switch (type) {\n        case 'fill-the-gap':\n          return 'Fill the gap';\n        case 'raise-lower-prices':\n          return 'Raise/Lower prices';\n        default:\n          return 'Unknown';\n      }\n    },\n    deletePricingRule() {\n      this.deletePricingRules([rule.uuid])\n        .finally(() => {\n          this.$router.push({name: 'settings.pricing.advanced'}).catch();\n        });\n    },\n  },\n\n  beforeUnmount() {\n    this.rule = null;\n    this.ruleClone = null;\n\n    EventBus.$off('create-pricing-rules-success');\n    EventBus.$off('delete-pricing-rules-success');\n  },\n};\n</script>\n","<template>\n  <div>\n    <TheTaxes/>\n  </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport {defineAsyncComponent, onMounted} from 'vue';\nimport {useTaxAndFee} from '@/composables/useTaxAndFee';\n\nconst TheTaxes = defineAsyncComponent(() => import('@/components/dashboard/settings/pricing/Taxes.vue'));\n\nconst {getTaxCategories} = useTaxAndFee();\n\nonMounted(() => {\n  getTaxCategories();\n});\n</script>\n","<template>\n  <div>\n    <h2 class=\"mt-8 mb-4 font-bold text-2xl\">Security</h2>\n\n    <ChangePassword/>\n\n    <TwoFactorAuth/>\n  </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport {defineAsyncComponent} from 'vue';\n\nconst ChangePassword = defineAsyncComponent(() => import('@/components/dashboard/settings/general/ChangePassword.vue'));\nconst TwoFactorAuth = defineAsyncComponent(() => import('@/components/dashboard/settings/general/TwoFactorAuth.vue'));\n</script>\n","<template>\n  <div>\n    <h2 class=\"mt-8 mb-4 font-bold text-2xl\">\n      <FeatureTitle\n        featurePremium\n        title=\"API Tokens\"\n      />\n      <the-help-link url=\"https://help.fleetwire.io/en/article/introduction-to-the-fleetwire-api-izq6u/?bust=1676569061818\"></the-help-link>\n    </h2>\n\n    <v-card :disabled=\"authLoading.createApiToken\">\n      <v-card-title>\n        <div class=\"flex flex-col sm:flex-row gap-2 sm:gap-0\">\n          <div>Standard keys</div>\n          <v-spacer class=\"hidden sm:block\"/>\n          <v-btn\n            :disabled=\"!planIncludesApi\"\n            :loading=\"authLoading.createApiToken\"\n            class=\"w-full sm:w-auto\"\n            size=\"small\"\n            @click=\"createUserTokensInit()\"\n          >\n            <v-icon class=\"mr-1\" size=\"small\">mdi-plus</v-icon>\n            Secret Key\n          </v-btn>\n        </div>\n      </v-card-title>\n      <v-card-subtitle>\n        <div class=\"flex flex-col sm:flex-row items-start sm:items-center gap-2\">\n          <span>These keys will allow you to authenticate API requests.</span>\n          <v-btn\n            class=\"text-decoration-none\"\n            href=\"https://documenter.getpostman.com/view/263138/Tz5p6dWS\"\n            size=\"x-small\"\n            target=\"_blank\"\n            variant=\"text\"\n          >\n            API Documentation\n            <v-icon class=\"ml-1\" size=\"x-small\">mdi-open-in-new</v-icon>\n          </v-btn>\n        </div>\n      </v-card-subtitle>\n      <v-card-text>\n        <div v-if=\"apiTokens.length > 0\" class=\"overflow-x-auto\">\n          <table class=\"w-full text-sm text-left text-gray-500 dark:text-gray-400\">\n            <thead class=\"text-xs text-gray-700 uppercase bg-gray-50 dark:bg-gray-700 dark:text-gray-400\">\n            <tr>\n              <th class=\"px-4 sm:px-6 py-3\" scope=\"col\">Name</th>\n              <th class=\"hidden sm:table-cell px-6 py-3\" scope=\"col\">Last Used</th>\n              <th class=\"hidden sm:table-cell px-6 py-3\" scope=\"col\">Created</th>\n              <th class=\"px-4 sm:px-6 py-3\" scope=\"col\"></th>\n            </tr>\n            </thead>\n            <tbody>\n            <tr v-for=\"(item, key) in apiTokens\" :key=\"key\" class=\"bg-white border-b dark:bg-gray-800 dark:border-gray-700 hover:bg-gray-50 dark:hover:bg-gray-600\">\n              <td class=\"px-4 sm:px-6 py-4 font-medium text-gray-900 whitespace-nowrap dark:text-white\">\n                {{ item.name }}\n              </td>\n              <td class=\"hidden sm:table-cell px-6 py-4\">\n                {{ item.last_used_at ? formatRentalDate(item.last_used_at, 'MMM DD') : '--' }}\n              </td>\n              <td class=\"hidden sm:table-cell px-6 py-4\">\n                {{ formatRentalDate(item.created_at, 'MMM DD') }}\n              </td>\n              <td class=\"px-4 sm:px-6 py-4 text-right\">\n                <v-menu location=\"bottom\">\n                  <template v-slot:activator=\"{ props }\">\n                    <v-btn size=\"small\" v-bind=\"props\" variant=\"text\">\n                      <v-icon>mdi-dots-vertical</v-icon>\n                    </v-btn>\n                  </template>\n\n                  <v-list>\n                    <v-list-item @click=\"deleteApiTokenInit(item)\">\n                      <v-list-item-title class=\"text-red-500\">\n                        Delete\n                      </v-list-item-title>\n                    </v-list-item>\n                  </v-list>\n                </v-menu>\n              </td>\n            </tr>\n            </tbody>\n          </table>\n        </div>\n        <div v-else class=\"text-center py-4\">No API Tokens</div>\n      </v-card-text>\n    </v-card>\n\n    <v-dialog v-model=\"showInitialTokenDialog\" :persistent=\"true\" width=\"500\">\n      <v-card>\n        <v-card-title class=\"pb-0\">\n          <div class=\"flex items-center\">\n            <span class=\"text-xl font-medium\">Your New API Token</span>\n            <v-spacer/>\n            <v-icon color=\"green\" size=\"small\">mdi-shield-lock</v-icon>\n          </div>\n        </v-card-title>\n\n        <v-card-text>\n          <div class=\"mb-4 p-3 bg-red-50 border border-red-200 rounded-lg\">\n            <div class=\"flex items-center\">\n              <v-icon class=\"mr-2\" color=\"red\" size=\"small\">mdi-alert-circle</v-icon>\n              <span class=\"text-red-600 text-sm\">\n                This secret key will only be shown once. Make sure to copy it now.\n              </span>\n            </div>\n          </div>\n\n          <v-tooltip location=\"right\">\n            <template v-slot:activator=\"{ props }\">\n              <div class=\"relative\">\n                <label for=\"new-token\"></label>\n                <input\n                  id=\"new-token\"\n                  :value=\"newToken\"\n                  class=\"cursor-pointer w-full border-2 border-gray-200 rounded-lg p-3 pr-10 font-mono text-sm bg-gray-50 hover:bg-gray-100 transition-colors\"\n                  readonly\n                  v-bind=\"props\"\n                  @click=\"copyToClipboardInit(newToken)\"\n                >\n                <v-icon class=\"absolute right-3 top-1/2 -translate-y-1/2\" color=\"gray\" size=\"small\" style=\"position: absolute !important;\">\n                  mdi-content-copy\n                </v-icon>\n              </div>\n            </template>\n            <span>Click to copy token</span>\n          </v-tooltip>\n        </v-card-text>\n\n        <v-card-actions class=\"pt-0\">\n          <v-spacer/>\n          <v-btn\n            color=\"primary\"\n            variant=\"elevated\"\n            @click=\"showInitialTokenDialog = false\"\n          >\n            Done\n          </v-btn>\n        </v-card-actions>\n      </v-card>\n    </v-dialog>\n\n    <v-snackbar v-model=\"copiedText\" location=\"bottom\">\n      Token Copied\n    </v-snackbar>\n    <v-snackbar v-model=\"tokenDeletedSnack\" location=\"bottom\">\n      Token Deleted\n    </v-snackbar>\n\n    <UpgradePlanFeatureDialog2\n      :bullets=\"[\n        {\n          text: 'Build on top of Fleetwire to extend and customize its capability.'\n        },\n         {\n          text: 'Build amazing custom reports the way you want and wherever you want.'\n        },\n         {\n          text: 'Combine Fleetwire\\'s data with any other data from analytics tools.'\n        },\n      ]\"\n      :tiers=\"['premium']\"\n      description=\"Benefit from efficient data exchange and integration, reducing the need for manual processes.\"\n      feature=\"API\"\n      right-side-message=\"Unlock the full potential of your fleet management game by seamlessly integrating Fleetwire into your favorite tools.\"\n    >\n      <template v-slot:rightImage>\n        <svg fill=\"none\" viewBox=\"0 0 589 528\" xmlns=\"http://www.w3.org/2000/svg\">\n          <g clip-path=\"url(#api-paywall_svg__clip0_1620_2881)\">\n            <circle cx=\"295.396\" cy=\"260.542\" fill=\"#A886B2\" opacity=\"0.16\" r=\"244.5\"></circle>\n            <circle cx=\"295.396\" cy=\"260.542\" fill=\"#A886B2\" opacity=\"0.16\" r=\"194.5\"></circle>\n            <circle cx=\"295.396\" cy=\"260.542\" fill=\"#A886B2\" opacity=\"0.16\" r=\"144.5\"></circle>\n            <circle cx=\"295.396\" cy=\"260.542\" fill=\"#654B6B\" r=\"94.5\"></circle>\n            <!--                <path d=\"M284.715 33.416 C 284.276 33.527,283.017 33.892,281.918 34.227 C 279.199 35.057,98.279 124.029,95.457 125.924 C 73.759 140.493,86.104 175.524,112.288 173.685 C 117.805 173.297,116.700 173.813,204.196 130.782 C 315.734 75.926,304.418 81.689,308.295 77.765 C 321.856 64.040,316.703 41.323,298.493 34.557 C 295.555 33.466,287.247 32.778,284.715 33.416 M243.066 155.241 C 239.188 155.944,240.963 155.097,169.506 190.356 C 102.068 223.632,104.477 222.367,100.604 226.549 C 82.731 245.854,102.443 277.094,127.594 269.326 C 131.666 268.068,261.695 203.835,264.424 201.733 C 285.979 185.131,270.004 150.356,243.066 155.241\" fill=\"#FF7F3B\"/>-->\n            <!--                <path d=\"M173.027 290.750 C 170.160 291.517,166.160 293.411,137.741 307.455 L 113.983 319.196 110.949 322.231 C 94.358 338.822,106.013 366.983,129.471 366.983 C 136.232 366.983,136.247 366.977,162.438 354.037 C 174.525 348.065,186.417 342.215,188.863 341.037 C 199.885 335.730,205.780 327.104,205.780 316.284 C 205.780 299.316,189.233 286.416,173.027 290.750\" fill=\"#FF7F3B\"/>-->\n            <path d=\"M457.773 59.38l10.643 6.858c1.856-2.942 28.944-36.493 72.231-49.026 37.966-10.991 92.595-1.24 96.786-2.31 2.955-3.261 12.981-10.827 2.453-9.95-4.945.878-61.817-8.555-102.259 2.978-46.617 13.295-77.392 47.932-79.854 51.45z\" fill=\"#DBC4E1\"></path>\n            <path d=\"M430.527 136.07l-11.89-5.98 1.02-2.03c6.18-12.27 1.23-27.23-11.04-33.4l-21.21 42.15a4.243 4.243 0 001.89 5.7l41.28 20.77 21.46-42.58c-11.54-5.81-15.7 3.82-21.5 15.36l-.01.01z\" fill=\"#FE8787\"></path>\n            <path d=\"M426.367 148.46l-35.77-18-2.25 4.47 38.02 13.53z\" fill=\"#F65B5B\"></path>\n            <path d=\"M470.352 67.128L442.896 97.04l-59.02 62.04 8.08 7.68 60.915-64.03 29.351-31.902-11.87-3.7zM367.207 171.601l13.08 12.44-.44 26.6-39.19-37.28 26.55-1.76z\" fill=\"#DBC4E1\"></path>\n            <path d=\"M340.667 173.347l-18.568 19.519 39.19 37.281 18.568-19.519-39.19-37.281z\" fill=\"#DBC4E1\"></path>\n            <path d=\"M345.587 207.42l-19.6-18.64 3.96-4.16 15.64 22.8z\" fill=\"#DBC4E1\"></path>\n            <path d=\"M322.068 185.031l-7.795 8.195 47.051 44.759 7.795-8.195-47.051-44.759zM382.257 157.541l11.31 10.76-13.28 15.74-13.08-12.44 15.05-14.06z\" fill=\"#DBC4E1\"></path>\n            <path d=\"M408.657 45.93l-32.75 65.08c-2.66 5.29-.51 11.79 4.77 14.45l45.69 22.99-5.1 10.13 9.3 4.68 41.08-28.61h41.06l-.05-73.61s-37.31-.09-40.73-.09l-48.82-19.79c-5.29-2.66-11.79-.51-14.45 4.77z\" fill=\"#FE8787\"></path>\n            <path d=\"M502.616 140.441l-.24-84.67 26.14.35-.36 84.37-25.54-.05z\" fill=\"#fff\"></path>\n            <path d=\"M516.887 52.79l80.38-.83v97.37l-80.22-5.68-.16-90.86z\" fill=\"#1D1D1D\"></path>\n            <path d=\"M157.89 404.115l12.04 6.06-1.03 2.05c-6.26 12.43-1.25 27.58 11.18 33.83l21.49-42.69c1.07-2.12.21-4.71-1.91-5.78l-41.81-21.04-21.74 43.13c11.69 5.88 15.9-3.87 21.78-15.56z\" fill=\"#FE8787\"></path>\n            <path d=\"M162.1 391.556l36.23 18.23 2.28-4.53-38.51-13.7z\" fill=\"#F65B5B\"></path>\n            <path d=\"M248.79 287.865a3.515 3.515 0 00-4.96.34l-17.45 20.01 5.3 4.62 17.45-20.01c1.28-1.46 1.12-3.68-.34-4.96zM276.84 312.325a3.524 3.524 0 00-4.96.34l-17.45 20.01 5.3 4.62 17.45-20.01a3.524 3.524 0 00-.34-4.96zM190.24 375l-56.62 64.93-12.17 25.9 12.17 3.23 10.34-23.805 54.79-62.835-8.51-7.42zM126.113 532.23c-1.127-6.431 4.887-38.744 9.997-46.462 0-4.401-2.784-10.867-9.998-3.149-6.621 8.549-11.286 44.483-10.284 52.438l10.285-2.827zM215.23 368.575l-13.78-12.02-.73-26.93 41.29 36-26.78 2.95z\" fill=\"#DBC4E1\"></path>\n            <path d=\"M218.654 309.064l-17.929 20.56 41.294 36.01 17.929-20.56-41.294-36.01z\" fill=\"#DBC4E1\"></path>\n            <path d=\"M218.269 301.138l-7.525 8.63 49.569 43.226 7.525-8.629-49.569-43.227zM200.61 383.456l-11.91-10.38 12.75-16.52 13.78 12.02-14.62 14.88z\" fill=\"#DBC4E1\"></path>\n            <path d=\"M190.4 374.556l8.51 7.42-4.51 5.16-4-12.58zM235.53 331.375l20.65 18.01-3.82 4.38-16.83-22.39z\" fill=\"#DBC4E1\"></path>\n            <path d=\"M180.03 495.395l33.18-65.92c2.69-5.35.52-11.94-4.83-14.64l-46.28-23.29 5.17-10.26-9.42-4.74-41.61 28.98H74.65l.05 74.56s37.78.09 41.26.09l49.44 20.06c5.35 2.69 11.94.52 14.63-4.84z\" fill=\"#FE8787\"></path>\n            <path d=\"M84.87 399.055l.24 85.14-26.48.27.37-85.46 25.87.05z\" fill=\"#fff\"></path>\n            <path d=\"M70.42 487.835l-81.42 6.42v-98.62l81.25.17.17 92.03z\" fill=\"#1D1D1D\"></path>\n            <path d=\"M118.185 229.31l-5.136 7.441-8.464 2.833 7.259 5.195 2.723 8.621 5.136-7.441 8.465-2.834-7.259-5.194-2.724-8.621z\" fill=\"#90AFFF\" opacity=\"0.6\"></path>\n            <path d=\"M376.691 372.335l-5.135 7.441-8.465 2.833 7.259 5.195 2.724 8.621 5.135-7.441 8.465-2.834-7.259-5.194-2.724-8.621z\" fill=\"#FFD282\" opacity=\"0.6\"></path>\n            <path d=\"M157.568 286.023l-3.853 5.58-6.348 2.126 5.444 3.896 2.043 6.465 3.853-5.579 6.348-2.126-5.444-3.897-2.043-6.465z\" fill=\"#99D8BA\" opacity=\"0.6\"></path>\n            <path d=\"M183.993 135.209l-6.421 9.298-10.58 3.545 9.072 6.495 3.407 10.774 6.418-9.299 10.582-3.544-9.074-6.495-3.404-10.774z\" fill=\"#FFAB90\" opacity=\"0.6\"></path>\n            <path d=\"M459.189 211.132l-6.421 9.299-10.579 3.544 9.071 6.495 3.407 10.775 6.418-9.299 10.583-3.544-9.075-6.496-3.404-10.774z\" fill=\"#90AFFF\" opacity=\"0.6\"></path>\n            <path d=\"M297.657 87.452l-6.421 9.298-10.579 3.544 9.071 6.496 3.407 10.774 6.419-9.299 10.582-3.544-9.075-6.496-3.404-10.773z\" fill=\"#FFD282\" opacity=\"0.6\"></path>\n            <path d=\"M91.3 321.76l-11.16-2.765-7.174-8.797-2.917 10.97-9.032 7.115 11.16 2.765 7.174 8.797 2.918-10.971 9.031-7.114z\" fill=\"#FFAB90\" opacity=\"0.6\"></path>\n            <path d=\"M98.886 147.048l-11.009-2.73-7.079-8.677-2.88 10.822-8.908 7.019 11.008 2.73 7.08 8.677 2.88-10.822 8.908-7.019z\" fill=\"#99D8BA\" opacity=\"0.6\"></path>\n            <path d=\"M329.447 449.45l-15.287-3.793-9.832-12.048-4.001 15.028-12.37 9.749 15.286 3.788 9.833 12.053 4-15.032 12.371-9.745z\" fill=\"#90AFFF\" opacity=\"0.6\"></path>\n            <path d=\"M530.402 272.411l-12.978-3.22-8.347-10.228-3.396 12.758-10.502 8.276 12.977 3.217 8.348 10.231 3.395-12.761 10.503-8.273z\" fill=\"#FFD282\" opacity=\"0.6\"></path>\n            <path d=\"M470.366 413.876l-15.287-3.793-9.833-12.048-4 15.028-12.371 9.749 15.286 3.789 9.834 12.052 3.999-15.032 12.372-9.745z\" fill=\"#FFAB90\" opacity=\"0.6\"></path>\n          </g>\n          <defs>\n            <clipPath id=\"api-paywall_svg__clip0_1620_2881\">\n              <path d=\"M0 0h589v528H0z\" fill=\"#fff\"></path>\n            </clipPath>\n          </defs>\n        </svg>\n      </template>\n    </UpgradePlanFeatureDialog2>\n\n  </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport {defineAsyncComponent, onMounted, ref} from 'vue';\nimport {copyTextToClipboard} from '@/helpers';\nimport {useDateFormatter} from '@/composables/useDate';\nimport {useAuth} from '@/composables/useAuth';\nimport {useSubscription} from '@/composables/useSubscription';\n\nconst FeatureTitle = defineAsyncComponent(() => import('@/components/dashboard/FeatureTitle.vue'));\n\nconst UpgradePlanFeatureDialog2 = defineAsyncComponent(() => import('@/components/dashboard/dialogs/UpgradePlanFeatureDialog2.vue'));\n\nconst {formatRentalDate} = useDateFormatter();\nconst {planIncludesApi} = useSubscription();\n\nconst {\n  apiTokens,\n  authLoading,\n  fetchUserTokens,\n  createUserTokens,\n  deleteApiToken,\n} = useAuth();\n\nconst showInitialTokenDialog = ref(false);\nconst newToken = ref('');\nconst copiedText = ref(false);\nconst tokenDeletedSnack = ref(false);\n\nonMounted(() => {\n  fetchUserTokens();\n});\n\nconst copyToClipboardInit = (text) => {\n  try {\n    copyTextToClipboard(text);\n    copiedText.value = true;\n  } catch (err) {\n    // eslint-disable-next-line no-alert\n    alert('Oops, unable to copy');\n  }\n};\n\nconst createUserTokensInit = () => {\n  createUserTokens().then((token) => {\n    showInitialTokenDialog.value = true;\n    newToken.value = token;\n  });\n};\n\nconst deleteApiTokenInit = (token) => {\n  deleteApiToken(token).then(() => {\n    fetchUserTokens();\n    tokenDeletedSnack.value = true;\n  });\n};\n</script>\n","<template>\n  <div>\n    <h2 class=\"mt-8 mb-4 font-bold text-2xl\">\n      <FeatureTitle\n        featurePremium\n        featureStandard\n        title=\"Activity Log\"\n      />\n    </h2>\n\n    <v-card>\n      <v-card-text>\n        <div v-if=\"activity.length > 0\" class=\"space-y-4\">\n          <div v-for=\"(item, key) in activity\" :key=\"key\"\n               class=\"bg-white dark:bg-gray-800 rounded-lg shadow-sm p-4 hover:bg-gray-50 dark:hover:bg-gray-600\">\n            <div class=\"flex flex-col sm:flex-row sm:items-center sm:justify-between gap-2\">\n              <div class=\"font-medium text-gray-900 dark:text-white\">\n                {{ item.description }}\n              </div>\n              <div class=\"text-sm text-gray-500 dark:text-gray-400\">\n                {{ formatRentalDate(item.created_at) }}\n              </div>\n            </div>\n          </div>\n        </div>\n\n        <div v-if=\"activity.length > 0\">\n          <div class=\"grid grid-cols-1 gap-2\">\n            <v-pagination\n              v-model=\"page\"\n              :length=\"pages\"\n              class=\"my-4\"\n            />\n          </div>\n        </div>\n\n        <div v-else class=\"text-center py-8 text-gray-500 dark:text-gray-400\">No Activity</div>\n      </v-card-text>\n    </v-card>\n  </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport {defineAsyncComponent, onMounted, ref, watch} from 'vue';\nimport {useDateFormatter} from '@/composables/useDate';\nimport {useCompany} from '@/composables/useCompany';\n\nconst FeatureTitle = defineAsyncComponent(() => import('@/components/dashboard/FeatureTitle.vue'));\n\nconst {formatRentalDate} = useDateFormatter();\nconst {getActivityLog} = useCompany();\n\nconst activity = ref([]);\nconst page = ref(1);\nconst pages = ref(1);\n\nwatch(page, () => {\n  console.dir(page.value);\n  getActivityLog({page: page.value}).then((response) => {\n    activity.value = response?.data || [];\n  });\n});\n\nonMounted(() => {\n  getActivityLogInit();\n});\n\nconst getActivityLogInit = () => {\n  getActivityLog({page: 1})\n    .then((response) => {\n      page.value = response?.current_page || 1;\n      pages.value = response?.last_page || 1;\n      activity.value = response?.data || [];\n    });\n};\n</script>\n","<template>\n  <div class=\"UpsellCard\">\n    <div>\n      <v-card class=\"bg-white\" variant=\"flat\">\n        <v-card-title>\n          Upgrade to Premium\n        </v-card-title>\n\n        <v-card-text>\n          <div class=\"grid grid-cols-2 justify-between\">\n            <div class=\"\">More listings, more staff accounts, custom domain, additional scripts, and more. Upgrade to\n              Fleetwire's Premium plan today.\n            </div>\n            <div class=\"grid col-auto grid-flow-col gap-2 justify-end\">\n\n              <v-dialog v-model=\"upgradeDialogIsOpen\" width=\"950\">\n                <template v-slot:activator=\"{ props }\">\n                  <v-btn size=\"small\" v-bind=\"props\">Learn More</v-btn>\n                </template>\n\n                <template v-slot:default=\"{ isActive }\">\n                  <v-card>\n                    <v-img class=\"app-15cj5iy e1xdmtt71\" data-element=\"PositionTopRight\" data-source-file=\"highlightModalContainer.tsx\" src=\"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDE0IiBoZWlnaHQ9Ijg1IiBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMCAwaDQxNHY3OC4zMDZMMjk2Ljc3NCA4NC4xNlY2OGgtMjcuMzMybC00LjE5Ny0zNC43MUw3LjUyNyAzMC4xMSAwIDB6IiBmaWxsPSIjRDlDRkU5Ii8+PHBhdGggZD0iTTIyOS44ODYgNDQuMjQ0aDI1LjA5MWwuODM2IDE1Ljg5LTI1LjkyNy0yLjE3NFY0NC4yNDR6IiBmaWxsPSIjRDlDRkU5Ii8+PC9zdmc+\" width=\"400px\"></v-img>\n                    <div style=\"position: relative;padding: 70px 80px;overflow: hidden;\">\n\n                      <div class=\"try-premium-modal\">\n                        <div>\n                          <div style=\"text-transform: uppercase;font-weight: bold;color: rgb(108, 95, 199);font-size: 11px;\">\n                            Next stop - Premium Plan\n                          </div>\n                          <div style=\"font-size: 22px;font-weight: bold;margin: 8px 0;\">Try the upgrade. Stress less.\n                          </div>\n                        </div>\n                        <div class=\"main-upsell\">\n                          <div>\n                            <div class=\"app-1fttcpj e6gn4392\">\n                              <div>\n                                {{ stepDescription }}\n                              </div>\n                              <v-img :src=\"stepImage\" class=\"app-1jbawm2 e6gn4391\" width=\"540px\"></v-img>\n                              <div class=\"app-10re2i4 e6gn4390\" v-html=\"stepSecondDescription\"/>\n                            </div>\n                          </div>\n\n                          <div>\n                            <div class=\"app-1vbqv9y e1qu3fq81\">Premium Features Include</div>\n                            <div v-for=\"(feature, index) in features\" :key=\"index\" :aria-selected=\"featureStep === index\" :style=\"featureListStyle(index)\" class=\"app-s85quu e1qu3fq80\" @click=\"featureStep = index\">\n                              <a v-if=\"feature.ctaUrl\" :href=\"feature.ctaUrl\" target=\"_blank\">\n                                <v-icon size=\"small\">mdi-flash-outline</v-icon>\n                                {{ feature.title }}\n                              </a>\n                              <span v-else>\n                                <v-icon size=\"small\">mdi-flash-outline</v-icon>\n                                {{ feature.title }}\n                              </span>\n                            </div>\n                          </div>\n                        </div>\n                      </div>\n\n\n                      <v-card-actions>\n                        <v-btn :to=\"{name: 'settings.account.plans.confirm'}\" color=\"primary\" variant=\"tonal\">Upgrade\n                        </v-btn>\n                        <v-btn variant=\"outlined\" @click=\"isActive.value = false\">Maybe Later</v-btn>\n                      </v-card-actions>\n                    </div>\n\n                    <v-img class=\"app-1n8nfba e1xdmtt70\" data-element=\"PositionBottomLeft\" data-source-file=\"highlightModalContainer.tsx\" src=\"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzExIiBoZWlnaHQ9IjE0NCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTI5OC4wMTMgMTQ0SC4wMDFWMGwxMDIuNzQgNy4wOTQgMi40NjcgODAuODI0IDY0LjE0MSAzLjQzMyAxLjI2NyAyNS4wMTEgMTI0Ljk0My0xLjhMMjk4LjAxMyAxNDR6IiBmaWxsPSIjRDlDRkU5Ii8+PHBhdGggZD0iTTEyMC40NTEgNjQuOTA2djE1LjYwNmwtMTEuMzE2LS43MDktLjI0OS0xNS4yNTEgMTEuNTY1LjM1NHpNMzA5LjU3OCAxMTMuMTQzbDEuNDIzIDE1LjUzNS0xMC4xNDEgMi41NTQtMS40OTUtMTcuNTIyIDEwLjIxMy0uNTY3eiIgZmlsbD0iI0Q5Q0ZFOSIvPjwvc3ZnPg==\" width=\"200px\"/>\n                  </v-card>\n                </template>\n              </v-dialog>\n\n              <v-btn :to=\"{name: 'settings.account.plans.confirm'}\" color=\"primary\" size=\"small\">Upgrade</v-btn>\n            </div>\n          </div>\n        </v-card-text>\n      </v-card>\n    </div>\n  </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport {computed, ref, watch} from 'vue';\n\nconst upgradeDialogIsOpen = ref(false);\nconst featureStep = ref(0);\nconst safeFeatureStep = computed(() => Math.min(featureStep.value, features.length - 1));\n\nconst features: Feature[] = [\n  {\n    description: 'Expand your visibility by adding and managing up to 150 vehicle listings.',\n    imageUrl: '/images/up-sell/listings2.png',\n    title: 'Additional Listings',\n    secondDescription: \"You'll need the <strong>Premium Plan</strong> to enable 150 listings. You're\\n\" +\n      \"                                currently on the Standard plan.\",\n  },\n  {\n    description: 'Coordinate your team by adding and managing up to 20 staff accounts for improved collaboration.',\n    imageUrl: '/images/up-sell/team2.png',\n    title: 'Additional Staff Accounts',\n    secondDescription: \"You'll need the <strong>Premium Plan</strong> to enable 150 listings. You're\\n\" +\n      \"                                currently on the Standard plan.\",\n  },\n  {\n    description: 'Broaden your operational presence by adding and managing up to 2 additional branch locations.',\n    imageUrl: 'https://s1.sentry-cdn.com/_static/dist/sentry/assets/cross-project.bd06afab95685c8b6ad5.svg',\n    title: 'Additional Branches',\n    secondDescription: \"You'll need the <strong>Premium Plan</strong> to enable 150 listings. You're\\n\" +\n      \"                                currently on the Standard plan.\",\n  },\n  {\n    description: 'Fortify your brand\\'s digital footprint with a seamless connection to a custom domain for your Fleetwire store, inclusive of a secure SSL certificate.',\n    imageUrl: 'https://s1.sentry-cdn.com/_static/dist/sentry/assets/change-alerts.53afc4cd6161b91abbc4.svg',\n    title: 'Custom Domain',\n    secondDescription: \"You'll need the <strong>Premium Plan</strong> to enable 150 listings. You're\\n\" +\n      \"                                currently on the Standard plan.\",\n  },\n  {\n    description: 'Professionalize your communication with a custom email domain that aligns with your brand identity.',\n    imageUrl: 'https://s1.sentry-cdn.com/_static/dist/sentry/assets/cross-project.bd06afab95685c8b6ad5.svg',\n    title: 'Custom Email Domain',\n    secondDescription: \"You'll need the <strong>Premium Plan</strong> to enable 150 listings. You're\\n\" +\n      \"                                currently on the Standard plan.\",\n  },\n  {\n    description: 'Tailor the checkout experience by adding custom fields to gather unique information like insurance details, secondary drivers, etc.',\n    imageUrl: 'https://s1.sentry-cdn.com/_static/dist/sentry/assets/change-alerts.53afc4cd6161b91abbc4.svg',\n    title: 'Custom Checkout Fields',\n    secondDescription: \"You'll need the <strong>Premium Plan</strong> to enable 150 listings. You're\\n\" +\n      \"                                currently on the Standard plan.\",\n  },\n  {\n    description: 'Empower your site with enhanced analytics and tracking through customizable scripts and styles for services like Google Analytics and Facebook Pixel.',\n    imageUrl: 'https://s1.sentry-cdn.com/_static/dist/sentry/assets/cross-project.bd06afab95685c8b6ad5.svg',\n    title: 'Additional Scripts & Styles',\n    secondDescription: \"You'll need the <strong>Premium Plan</strong> to enable 150 listings. You're\\n\" +\n      \"                                currently on the Standard plan.\",\n  },\n  {\n    description: 'Unleash Unlimited Functionality: Harness the Power of our Flexible API and Webhooks to Build Your Own Custom Integrations and Expand the Capabilities of Fleetwire.',\n    imageUrl: 'https://s1.sentry-cdn.com/_static/dist/sentry/assets/change-alerts.53afc4cd6161b91abbc4.svg',\n    title: 'API',\n    secondDescription: \"You'll need the <strong>Premium Plan</strong> to enable 150 listings. You're\\n\" +\n      \"                                currently on the Standard plan.\",\n  },\n  {\n    description: 'Receive top-tier assistance with our premium email support, dedicated to resolving your queries with priority.',\n    imageUrl: 'https://s1.sentry-cdn.com/_static/dist/sentry/assets/cross-project.bd06afab95685c8b6ad5.svg',\n    title: 'Premium Email Support',\n    secondDescription: \"You'll need the <strong>Premium Plan</strong> to enable 150 listings. You're\\n\" +\n      \"                                currently on the Standard plan.\",\n  },\n  {\n    description: 'Explore the full spectrum of advanced features and exclusive benefits with our Premium Plan—visit our pricing page to discover more..',\n    imageUrl: 'https://s1.sentry-cdn.com/_static/dist/sentry/assets/change-alerts.53afc4cd6161b91abbc4.svg',\n    ctaUrl: 'https://front.fleetwire.io/pricing/',\n    title: 'And More...',\n    secondDescription: \"You'll need the <strong>Premium Plan</strong> to enable 150 listings. You're\\n\" +\n      \"                                currently on the Standard plan.\",\n  }\n];\n\ninterface Feature {\n  description: string;\n  imageUrl: string;\n  title: string;\n  secondDescription: string;\n  ctaUrl?: string;\n}\n\nconst stepDescription = computed(() => features[safeFeatureStep.value].description);\nconst stepImage = computed(() => features[safeFeatureStep.value].imageUrl);\nconst stepSecondDescription = computed(() => features[safeFeatureStep.value].secondDescription);\n\nconst featureListStyle = computed(() => (index: number) => {\n  return {\n    transform: featureStep.value === index ? 'translateX(-7px)' : 'translateX(0px)',\n  };\n});\n\nwatch(() => upgradeDialogIsOpen.value, (newVal) => {\n  if (!newVal) {\n    featureStep.value = 0;\n  }\n});\n</script>\n\n<style scoped>\n\n.main-upsell {\n  display: grid;\n  font-size: 14px;\n  margin-bottom: 16px;\n}\n\n.app-1vbqv9y {\n  font-weight: bold;\n  margin-bottom: 8px;\n  display: grid;\n  grid-template-columns: 1fr max-content;\n  gap: 4px;\n}\n\n.app-s85quu[aria-selected=\"true\"] {\n  color: rgb(62, 52, 70);\n  font-weight: bold;\n}\n\n.app-s85quu {\n  cursor: pointer;\n  transition: color 300ms ease 0s;\n  color: rgb(128, 112, 143);\n  position: relative;\n  display: grid;\n  grid-template-columns: max-content auto;\n  gap: 8px;\n  align-items: center;\n  align-content: center;\n  margin-bottom: 4px;\n}\n\n.app-1fttcpj {\n  display: flex;\n  flex-direction: column;\n}\n\n.app-1jbawm2 {\n  margin: 16px 0;\n}\n\n.app-10re2i4 {\n  font-size: 11px;\n  line-height: 1.5;\n}\n\n.app-15cj5iy {\n  position: absolute;\n  width: 400px;\n  right: 0;\n  top: 0;\n  pointer-events: none;\n  border-radius: 0 8px 0 0;\n}\n\n.app-1n8nfba {\n  position: absolute;\n  width: 200px;\n  bottom: 0;\n  left: 0;\n  pointer-events: none;\n  border-radius: 0 0 0 8px;\n  z-index: -1;\n}\n\n@media (min-width: 800px) {\n  .main-upsell {\n    grid-template-columns: auto 200px;\n    gap: 30px;\n  }\n}\n\n</style>\n","import {useStore} from 'vuex';\nimport {computed, ref} from 'vue';\nimport dayjs from 'dayjs';\n\n\n// Define types for expected data structures\ninterface Identity {\n    person_details?: {\n        first_name?: string;\n        last_name?: string;\n        dob?: { month: number; day: number; year: number };\n        document_number?: string;\n        expiration_date?: { month: number; day: number; year: number };\n        address?: {\n            city?: string;\n            country?: string;\n            line1?: string;\n            line2?: string;\n            postal_code?: string;\n            state?: string;\n        };\n    };\n    status?: string;\n    vs_id?: string;\n    last_error?: string;\n    redirect_to_url?: string;\n}\n\nexport function useStripe() {\n    const store = useStore();\n\n    const stripeLoading = computed(() => store.getters['stripe/loading']);\n    const stripeAccounts = computed(() => store.getters['stripe/account']);\n    const stripePrices = computed(() => store.getters['stripe/stripePrices']);\n\n    const fetchStripeAccounts = async () => store.dispatch('stripe/fetchStripeAccount');\n\n    const fetchStripeCapabilities = async () => {\n        await store.dispatch('stripe/fetchStripeCapabilities');\n    }\n\n    const saveStripeKey = async (payload: string) => {\n        await store.dispatch('company/saveStripeKey', payload);\n    }\n    const resetStripeKey = async () => {\n        await store.dispatch('company/resetStripeKey');\n    }\n    const testStripeIdentity = async (payload: { stripeKey: string }) => {\n        await store.dispatch('stripe/testStripeIdentity', payload);\n    }\n\n    const fetchSubscriptionDetails = async () => {\n        await store.dispatch('stripe/fetchSubscriptionDetails');\n    }\n\n    const fetchStripePriceData = async () => {\n        await store.dispatch('stripe/fetchStripePriceData');\n    }\n\n\n    const fetchCheckoutUrl = async (data) => {\n        return await store.dispatch('stripe/fetchCheckoutUrl', data);\n    }\n\n    /**\n     * Helper function for formatting dates.\n     */\n    const formatDate = (month?: number, day?: number, year?: number): string | null => {\n        if (!month || !day || !year) return null;\n        return dayjs(`${month}/${day}/${year}`, 'M/D/YYYY').format('MMM D, YYYY');\n    };\n\n    const stripeIdentityName = (identity: Identity) => {\n        const firstName = identity?.person_details?.first_name || '';\n        const lastName = identity?.person_details?.last_name || '';\n\n        return {\n            set: !!firstName,\n            first_name: firstName,\n            last_name: lastName,\n            full_name: `${firstName} ${lastName}`.trim(),\n        };\n    }\n\n    const stripeIdentityDOB = (identity: Identity) => {\n        const dob = identity?.person_details?.dob;\n        const formattedDate = formatDate(dob?.month, dob?.day, dob?.year);\n\n        return {\n            set: !!formattedDate,\n            dob: formattedDate,\n            age: formattedDate ? dayjs().diff(formattedDate, 'year') : null,\n        };\n    }\n\n    /**\n     * Formats identity status for display.\n     */\n    const stripeIdentityStatus = (identity: Identity) => {\n        const status = identity?.status?.replace(/_/g, ' ') || 'unknown';\n        if (!status) return 'unknown';\n\n        return status.charAt(0).toUpperCase() + status.slice(1).toLowerCase();\n    }\n\n    /**\n     * Returns the Stripe Identity Verification ID.\n     */\n    const stripeIdentityVSId = (id: Identity) => id?.vs_id || null;\n\n    /**\n     * Returns the last error related to the Stripe identity.\n     */\n    const stripeIdentityErrors = (id: Identity) => id?.last_error || null;\n\n\n    /**\n     * Returns the Stripe identity verification URL.\n     */\n    const stripeIdentityUrl = (id: Identity) => id?.redirect_to_url || null;\n\n\n    /**\n     * Returns the document number for identity verification.\n     */\n    const stripeIdentityDocumentNumber = (id: Identity) => id?.person_details?.document_number || null;\n\n\n    /**\n     * Returns the formatted expiration date of an identity document.\n     */\n    const stripeIdentityDocumentExpiration = (id: Identity) => {\n        const expiration = id?.person_details?.expiration_date;\n        return expiration ? formatDate(expiration.month, expiration.day, expiration.year) : null;\n    };\n\n\n    /**\n     * Extracts and returns the identity address.\n     */\n    const stripeIdentityAddress = (id: Identity) => {\n        const address = id?.person_details?.address || {};\n        return {\n            city: address.city || '',\n            country: address.country || '',\n            line1: address.line1 || '',\n            line2: address.line2 || '',\n            postal_code: address.postal_code || '',\n            state: address.state || '',\n        };\n    };\n\n    const stripeInstance = ref<any>(null);\n\n    /**\n     * Dynamically loads Stripe.js and initializes the Stripe instance.\n     */\n    const loadStripe = (publishableKey: string): Promise<any> => {\n        return new Promise((resolve, reject) => {\n            if (stripeInstance.value) {\n                return resolve(stripeInstance.value);\n            }\n\n            if (window.Stripe) {\n                stripeInstance.value = window.Stripe(publishableKey);\n                return resolve(stripeInstance.value);\n            }\n\n            const script = document.createElement('script');\n            script.src = 'https://js.stripe.com/v3/';\n            script.async = true;\n            script.onload = () => {\n                if (window.Stripe) {\n                    stripeInstance.value = window.Stripe(publishableKey);\n                    resolve(stripeInstance.value);\n                } else {\n                    reject(new Error('Stripe failed to load'));\n                }\n            };\n            script.onerror = () => reject(new Error('Failed to load Stripe script'));\n\n            document.head.appendChild(script);\n        });\n    };\n\n    const fetchSetupUrl = async (data) => {\n        return await store.dispatch('stripe/fetchSetupUrl', data);\n    }\n\n    return {\n        stripeLoading,\n        stripeAccounts,\n        stripePrices,\n        fetchStripeCapabilities,\n        fetchCheckoutUrl,\n        fetchSetupUrl,\n        loadStripe,\n        fetchStripeAccounts,\n        stripeIdentityName,\n        stripeIdentityDOB,\n        stripeIdentityStatus,\n        stripeIdentityVSId,\n        stripeIdentityDocumentNumber,\n        stripeIdentityDocumentExpiration,\n        stripeIdentityUrl,\n        stripeIdentityErrors,\n        stripeIdentityAddress,\n        fetchSubscriptionDetails,\n        fetchStripePriceData,\n        saveStripeKey,\n        resetStripeKey,\n        testStripeIdentity,\n    }\n}","<template>\n  <div>\n    <div class=\"flex flex-col sm:flex-row sm:items-center sm:justify-between my-5\">\n      <div class=\"flex-grow\">\n        <h4 class=\"font-bold text-2xl\">Subscription</h4>\n\n        <div class=\"mt-2 flex flex-wrap gap-2 plan-features-title-list-item\">\n          <div class=\"pr-2\">\n            <span v-if=\"inTrial\">Trailing ({{ upperFirst(subscriptionPlan) }})</span>\n            <span v-else>\n             {{ upperFirst(subscriptionPlan) }} Plan\n            </span>\n          </div>\n\n          <div class=\"pr-2\">{{ planSupportedFeatureCounts.listings }} Listings</div>\n          <div class=\"pr-2\">{{ planSupportedFeatureCounts.seats }} Seats</div>\n          <div class=\"pr-2\">{{ planSupportedFeatureCounts.locations }} Branches</div>\n        </div>\n      </div>\n\n      <div class=\"mt-4 sm:mt-0\">\n        <v-btn\n          :to=\"{name: 'settings.account.plans.confirm'}\"\n          class=\"text-decoration-none w-full sm:w-auto\"\n          variant=\"tonal\"\n        >\n          Manage Subscription\n        </v-btn>\n      </div>\n    </div>\n\n    <v-alert\n      v-if=\"hasPastDueSubscription\"\n      class=\"mb-4\"\n      color=\"orange\"\n      type=\"warning\"\n    >\n      Subscription payment is past due and may result in service interruption. Please update your payment method to\n      avoid interruption.\n    </v-alert>\n\n    <template v-if=\"checkPermission(['account_and_billing_manage'])\">\n      <div>\n        <UpsellCard v-if=\"shouldShowUpsellCard\"/>\n\n        <div class=\"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-5 my-5\">\n          <RenewsOneCard/>\n          <PlanPriceCard/>\n          <CardOnFileCard/>\n        </div>\n\n        <div class=\"mb-10\">\n          <div class=\"mb-5 text-sm font-medium text-center text-gray-500 border-b border-gray-200 dark:text-gray-400 dark:border-gray-700\">\n            <ul class=\"flex flex-wrap -mb-px overflow-x-auto\">\n              <li class=\"mr-2\">\n                <router-link\n                  v-slot=\"{ href, navigate, isExactActive }\"\n                  :to=\"{name: 'settings.account.overview'}\"\n                  custom\n                >\n                  <a\n                    :href=\"href\"\n                    :style=\"[isExactActive && 'border-bottom: 2px solid blue;']\"\n                    class=\"inline-block p-3 sm:p-4 border-b-2 border-blue-600 rounded-t-lg hover:text-gray-600 hover:border-gray-300 dark:hover:text-gray-300 whitespace-nowrap\"\n                    @click=\"navigate\"\n                  >Overview</a>\n                </router-link>\n              </li>\n              <li class=\"mr-2\">\n                <router-link\n                  v-slot=\"{ href, navigate, isExactActive }\"\n                  :to=\"{name: 'settings.account.receipts'}\"\n                  custom\n                >\n                  <a\n                    :href=\"href\"\n                    :style=\"[isExactActive && 'border-bottom: 2px solid blue;']\"\n                    class=\"inline-block p-3 sm:p-4 border-b-2 border-blue-600 rounded-t-lg hover:text-gray-600 hover:border-gray-300 dark:hover:text-gray-300 whitespace-nowrap\"\n                    @click=\"navigate\"\n                  >Receipts</a>\n                </router-link>\n              </li>\n              <li class=\"mr-2\">\n                <router-link\n                  v-slot=\"{ href, navigate, isExactActive }\"\n                  :to=\"{name: 'settings.account.billing'}\"\n                  custom\n                >\n                  <a\n                    :href=\"href\"\n                    :style=\"[isExactActive && 'border-bottom: 2px solid blue;']\"\n                    class=\"inline-block p-3 sm:p-4 border-b-2 border-blue-600 rounded-t-lg hover:text-gray-600 hover:border-gray-300 dark:hover:text-gray-300 whitespace-nowrap\"\n                    @click=\"navigate\"\n                  >Billing Details</a>\n                </router-link>\n              </li>\n            </ul>\n          </div>\n\n          <router-view name=\"default\"/>\n        </div>\n      </div>\n\n      <div class=\"my-6 sm:my-10\">\n        <div class=\"\">\n          <v-card>\n            <v-alert v-if=\"!defaultPayment\" type=\"warning\" variant=\"tonal\">\n              <div v-if=\"!hasActiveSubscription\">\n                You have {{ trialDaysLeftWithDay }} left on your trial and you don't have a payment method set up. <br>\n              </div>\n              Add a card for uninterrupted service.\n            </v-alert>\n          </v-card>\n        </div>\n      </div>\n\n      <DeleteAccountSection/>\n    </template>\n\n    <div v-else class=\"h-100 row align-items-center\">\n      <div class=\"col text-center\">\n        <v-img height=\"200px\" src=\"/images/illustrations/undraw_security.svg\"/>\n        <v-img height=\"200px\" src=\"/images/illustrations/undraw_security.svg\"/>\n        <h2 class=\"newCustomer__header\">No Permissions</h2>\n        <p>You dont have permissions to view this page.<br> You will need to ask your company admin\n          to add \"Account & Billing Manage\" permission.</p>\n      </div>\n    </div>\n  </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport {computed, defineAsyncComponent, onBeforeMount} from 'vue';\nimport UpsellCard from '@/components/dashboard/settings/account/UpsellCard.vue';\nimport checkPermission from '@/utils/permission';\nimport {useSubscription} from '@/composables/useSubscription';\nimport {useCompany} from '@/composables/useCompany';\nimport {useStripe} from '@/composables/useStripe';\nimport {upperFirst} from '@/utils/text';\n\nconst DeleteAccountSection = defineAsyncComponent(() => import('@/components/dashboard/settings/account/DeleteAccountSection.vue'));\nconst CardOnFileCard = defineAsyncComponent(() => import('@/views/dashboard/settings/Billing/SubscriptionDetailCards/CardOnFileCard.vue'));\nconst RenewsOneCard = defineAsyncComponent(() => import('@/views/dashboard/settings/Billing/SubscriptionDetailCards/RenewsOneCard.vue'));\nconst PlanPriceCard = defineAsyncComponent(() => import('@/views/dashboard/settings/Billing/SubscriptionDetailCards/PlanPriceCard.vue'));\n\nconst {\n  inTrial,\n  subscriptionPlan,\n  hasActiveSubscription,\n  trialDaysLeft,\n  planSupportedFeatureCounts,\n  hasPastDueSubscription,\n} = useSubscription();\nconst {company} = useCompany();\n\nconst {fetchSubscriptionDetails} = useStripe();\n\n\nconst shouldShowUpsellCard = computed(() => {\n  return subscriptionPlan.value === 'basic' || subscriptionPlan.value === 'standard';\n});\n\nconst cardBrand = computed(() => company.value?.pm_type);\nconst cardLastFour = computed(() => company.value?.pm_last_four);\nconst defaultPayment = computed(() => {\n  if (!cardBrand.value || !cardLastFour.value) return false;\n  return `${upperFirst(cardBrand.value)}-${cardLastFour.value}`;\n});\n\nconst trialDaysLeftWithDay = computed(() => {\n  return `${trialDaysLeft.value} day${trialDaysLeft.value === 1 ? '' : 's'}`;\n});\n\nonBeforeMount(() => {\n  fetchSubscriptionDetails();\n});\n</script>\n\n<style>\n.plan-features-title-list-item > :not(:last-child) {\n  border-right: 1px solid rgb(224, 220, 229);\n}\n\n@media (max-width: 640px) {\n  .plan-features-title-list-item > :not(:last-child) {\n    border-right: none;\n    border-bottom: 1px solid rgb(224, 220, 229);\n    padding-bottom: 0.5rem;\n  }\n}\n</style>","import {useStore} from 'vuex';\nimport {computed} from 'vue';\nimport {StripePaymentIntent} from \"@/store/modules/payments\";\nimport {useMoneyFormatter} from \"@/composables/useMoneyFormatter\";\n\nexport function usePayments() {\n    const store = useStore();\n    const {fromCents, toCents} = useMoneyFormatter();\n\n    const paymentMethods = computed(() => store.getters['payments/paymentMethods']);\n    const paymentsLoading = computed(() => store.getters['payments/loading']);\n    const billingSessionUrl = computed(() => store.getters['payments/billingSessionUrl']);\n    const paymentForm = computed(() => store.getters['payments/paymentForm']);\n    const newPayment = computed(() => store.getters['payments/newPayment']);\n    const payment = computed(() => store.getters['payments/payment']);\n\n\n    // Fetch actions\n    const fetchPaymentMethods = () => store.dispatch('payments/fetchPaymentMethods');\n    const fetchPayments = (payload: Record<string, any>) => store.dispatch('payments/fetchPayments', payload);\n    const fetchPayment = async (paymentId: string) => store.dispatch('payments/fetchPayment', paymentId);\n    const fetchStripeCheckoutUrl = (payload: { price: string }) => store.dispatch('stripe/fetchCheckoutUrl', payload);\n    const sendPaymentRequestLinkViaSms = (payload: Record<string, any>) => store.dispatch('payments/sendPaymentRequestLinkViaSms', payload);\n    const updateDefaultBillingDetails = (paymentMethodId: string) => store.dispatch('payments/updateDefaultBillingDetails', paymentMethodId);\n    const addPaymentMethod = (paymentIntent: StripePaymentIntent) => store.dispatch('payments/addPaymentMethod', paymentIntent);\n\n    // Computed values for new payment amounts\n    const newPaymentAmount = computed({\n        get: () => fromCents(newPayment.value?.amount),\n        set: (amount: number) => {\n            console.dir(newPayment.value);\n            console.dir(amount);\n            if (newPayment.value) newPayment.value.amount = toCents(amount);\n        },\n    });\n\n    const newPaymentKeepDepositAmount = computed({\n        get: () => fromCents(newPayment.value?.keep_deposit_amount),\n        set: (amount: number) => {\n            if (newPayment.value) newPayment.value.keep_deposit_amount = toCents(amount);\n        },\n    });\n\n    const newPaymentSecurityDeposit = computed({\n        get: () => fromCents(newPayment.value?.security_deposit),\n        set: (amount: number) => {\n            if (newPayment.value) newPayment.value.security_deposit = toCents(amount);\n        },\n    });\n\n    //RESET_NEW_PAYMENT\n    const resetNewPayment = () => store.commit('payments/RESET_NEW_PAYMENT');\n\n\n    return {\n        payment,\n        paymentForm,\n        paymentMethods,\n        paymentsLoading,\n        billingSessionUrl,\n        newPayment,\n        newPaymentAmount,\n        newPaymentKeepDepositAmount,\n        newPaymentSecurityDeposit,\n        resetNewPayment,\n        fetchPayment,\n        fetchPayments,\n        sendPaymentRequestLinkViaSms,\n        updateDefaultBillingDetails,\n        fetchStripeCheckoutUrl,\n        fetchPaymentMethods,\n        addPaymentMethod,\n    }\n}","<template>\n  <div class=\"md:grid md:grid-cols-3 md:gap-6\">\n    <div class=\"md:col-span-1 flex justify-between mb-4 md:mb-0\">\n      <div class=\"px-4 sm:px-0\">\n        <h3 class=\"text-lg font-medium text-gray-900 dark:text-gray-100\">Team Management</h3>\n        <p class=\"mt-1 text-sm text-gray-600 dark:text-gray-400\">\n          Add team members to your Fleetwire account and manage their access levels with customizable role\n          permissions.<br><br>\n          <TheHelpLink url=\"https://help.fleetwire.io/en/article/creating-team-accounts-3vjoe5/?bust=1675454097202\"></TheHelpLink>\n        </p>\n      </div>\n    </div>\n\n    <div class=\"md:col-span-2\">\n      <v-card>\n        <v-alert v-if=\"seatLimitReached\" class=\"card-alert-full\" density=\"compact\" type=\"warning\">\n          Seat limit reached for your plan.\n        </v-alert>\n\n        <v-card-title class=\"px-4 sm:px-6\">\n          <div class=\"flex flex-col sm:flex-row sm:items-center gap-2 sm:gap-0\">\n            <v-badge :content=\"companyEmployees.length\" :inline=\"true\">\n              Seats\n            </v-badge>\n            <v-spacer/>\n            <v-btn\n              :disabled=\"seatLimitReached || !checkRole(['company_admin'])\"\n              :to=\"{ name: 'settings.account.employees.new' }\"\n              class=\"text-decoration-none w-full sm:w-auto\"\n              color=\"primary\"\n              size=\"small\"\n              variant=\"outlined\"\n            >\n              <v-icon class=\"mr-2\">mdi-plus</v-icon>\n              Invite team member\n            </v-btn>\n          </div>\n        </v-card-title>\n        <v-divider opacity=\"50\"/>\n        <v-container class=\"px-4 sm:px-6\">\n          <div v-if=\"checkRole(['company_admin'])\">\n            <v-list class=\"team-list\">\n              <v-list-item\n                v-for=\"employee in companyEmployees\"\n                :key=\"employee.email\"\n                :class=\"{'border-l-4 border-primary': employee.email === user.email}\"\n                :to=\"{ name: 'settings.account.employees', params: { 'e_id': employee.uuid }}\"\n                class=\"text-decoration-none py-3 px-4 rounded-lg hover:bg-gray-50 dark:hover:bg-gray-800 transition-colors duration-200\"\n              >\n                <div class=\"flex items-center justify-between w-full\">\n                  <div class=\"flex items-center\">\n                    <v-avatar\n                      class=\"shadow-sm\"\n                      color=\"primary\"\n                      size=\"40\"\n                    >\n                      <span class=\"text-white font-medium\">{{ employeeInitials(employee) }}</span>\n                    </v-avatar>\n                    <div class=\"ml-4\">\n                      <div class=\"flex items-center gap-2\">\n                        <span class=\"text-gray-900 dark:text-gray-100 font-medium\">\n                          {{ employee.name }}\n                        </span>\n                        <v-chip\n                          v-if=\"employee.email === user.email\"\n                          class=\"text-xs\"\n                          color=\"primary\"\n                          size=\"small\"\n                          variant=\"outlined\"\n                        >\n                          Account Owner\n                        </v-chip>\n                      </div>\n                      <div class=\"text-sm text-gray-500 dark:text-gray-400 mt-1\">\n                        {{ employee.email }}\n                      </div>\n                    </div>\n                  </div>\n                  <v-icon class=\"opacity-50\" color=\"gray\" size=\"small\">mdi-chevron-right</v-icon>\n                </div>\n              </v-list-item>\n            </v-list>\n          </div>\n          <div v-else class=\"flex items-center gap-2 text-gray-500 dark:text-gray-400\">\n            <v-icon size=\"small\">mdi-lock</v-icon>\n            You are not the company admin to be able to view this section.\n          </div>\n        </v-container>\n      </v-card>\n    </div>\n  </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport {computed, onMounted} from 'vue';\nimport {useStore} from 'vuex';\nimport {useSubscription} from '@/composables/useSubscription';\nimport checkRole from '@/utils/role';\nimport {Employee} from '@/types';\n\nconst store = useStore();\n\nconst {seatLimitReached} = useSubscription();\n\nconst getEmployees = () => {\n  store.dispatch('company/getEmployees');\n};\n\nconst companyEmployees = computed<Employee[]>(() => store.getters['company/employees']);\nconst user = store.getters['auth/user'];\n\nconst employeeInitials = (employee: Employee): string => {\n  if (employee.first_name && employee.last_name) {\n    return employee.first_name[0] + employee.last_name[0];\n  }\n\n  const matches = employee.name?.match(/\\b\\w/g) || [];\n\n  return matches.slice(0, 2).join('').toUpperCase();\n};\n\n\nonMounted(() => {\n  getEmployees();\n});\n</script>\n\n<style scoped>\n.team-list {\n  @apply divide-y divide-gray-100 dark:divide-gray-800;\n}\n\n.team-list :deep(.v-list-item) {\n  @apply min-h-0;\n}\n\n.team-list :deep(.v-list-item--active) {\n  @apply bg-gray-50 dark:bg-gray-800;\n}\n</style>","<template>\n  <div>\n    <v-card class=\"mb-5\" variant=\"flat\">\n      <v-card-title>People to Notify</v-card-title>\n      <v-card-text>\n        <div class=\"grid grid-cols-1 sm:grid-cols-2 gap-4\">\n          <div class=\"border rounded p-4 flex flex-col sm:flex-row items-start sm:items-center\">\n            <div class=\"flex-grow\">\n              <strong>{{ company.name }}</strong>\n              <p class=\"text-sm text-gray-600\">{{ company.email }}</p>\n              <p class=\"text-sm text-gray-600\">{{ company.phone }}</p>\n            </div>\n            <div class=\"flex flex-col sm:flex-row gap-2\">\n              <v-checkbox v-model=\"notificationSettings.notify_sms\" :disabled=\"!company.phone\" label=\"SMS\" @update:model-value=\"updateNotificationSettings()\"/>\n              <v-checkbox v-model=\"notificationSettings.notify_email\" :disabled=\"!company.email\" label=\"EMAIL\" @update:model-value=\"updateNotificationSettings()\"/>\n            </div>\n          </div>\n          <div v-for=\"employee in employeeNotificationSettings\" :key=\"employee.uuid\" class=\"border rounded p-4 flex flex-col sm:flex-row items-start sm:items-center\">\n            <div class=\"flex-grow\">\n              <strong>{{ employee.name }}</strong>\n              <p class=\"text-sm text-gray-600\">{{ employee.email }}</p>\n              <p class=\"text-sm text-gray-600\">{{ employee.phone }}</p>\n            </div>\n            <div class=\"flex flex-col sm:flex-row gap-2\">\n              <v-checkbox v-model=\"employee.notify_sms\" :disabled=\"!employee.phone\" label=\"SMS\" @update:model-value=\"updateEmployeeNotificationSettings(employee)\"/>\n              <v-checkbox v-model=\"employee.notify_email\" :disabled=\"!employee.email\" label=\"EMAIL\" @update:model-value=\"updateEmployeeNotificationSettings(employee)\"/>\n            </div>\n          </div>\n        </div>\n      </v-card-text>\n    </v-card>\n\n    <v-card class=\"mb-5\" variant=\"flat\">\n      <v-card-title>\n        Fleetwire\n      </v-card-title>\n      <v-card-text v-if=\"notificationSettings\">\n        <div class=\"mt-1\">\n          <div class=\"grid grid-cols-2\">\n            <div></div>\n            <div class=\"\">\n              <span class=\"mr-md-4 mr-4\">SMS</span>\n              <span class=\"mr-md-0 mr-2\">EMAIL</span>\n            </div>\n          </div>\n          <div class=\"\">\n            <div class=\"list-group-item\">\n              <div class=\"grid grid-cols-2 \">\n                <div>\n                  <p class=\"mb-0\" style=\"font-size: 1rem;\">\n                    Fleetwire Booking\n                  </p>\n                  <small class=\"text-gray-700\">\n                    If you get a direct booking\n                  </small>\n                </div>\n                <div class=\"col-auto\">\n                  <div class=\"notification-checkbox-group\">\n                    <v-checkbox\n                      v-model=\"notificationSettings.fw_booking_sms\"\n                      :disabled=\"settingsLoading.notifications\"\n                      class=\"mr-2\"\n                    />\n                    <v-checkbox\n                      v-model=\"notificationSettings.fw_booking_email\"\n                      :disabled=\"settingsLoading.notifications\"\n                    />\n                  </div>\n                </div>\n              </div>\n            </div>\n          </div>\n        </div>\n\n        <div class=\"list-group list-group-flush\">\n          <div class=\"list-group-item\">\n            <div class=\"grid grid-cols-2 align-items-center\">\n              <div>\n                <p class=\"mb-0\" style=\"font-size: 1rem;\">\n                  Vehicle Maintenance Reminders\n                </p>\n                <small class=\"text-gray-700\">\n                  If you have a vehicle maintenance reminder set up.\n                </small>\n              </div>\n              <div class=\"col-auto\">\n                <div class=\"notification-checkbox-group\">\n                  <v-checkbox\n                    v-model=\"notificationSettings.vehicle_maintenance_reminder_sms\"\n                    :disabled=\"settingsLoading.notifications\"\n                    class=\"mr-2\"\n                  />\n                  <v-checkbox\n                    v-model=\"notificationSettings.vehicle_maintenance_reminder_email\"\n                    :disabled=\"settingsLoading.notifications\"\n                  />\n                </div>\n              </div>\n            </div>\n          </div>\n        </div>\n\n        <div class=\"list-group list-group-flush\">\n          <div class=\"list-group-item\">\n            <div class=\"grid grid-cols-2 align-items-center\">\n              <div>\n                <p class=\"mb-0\" style=\"font-size: 1rem;\">\n                  Vehicle Recall Notifications\n                </p>\n                <small class=\"text-gray-700\">\n                  If you have a vehicle with a known recall from NHTSA.\n                </small>\n              </div>\n              <div class=\"col-auto\">\n                <div class=\"notification-checkbox-group\">\n                  <v-checkbox\n                    v-model=\"notificationSettings.vehicle_recall_sms\"\n                    :disabled=\"settingsLoading.notifications\"\n                    class=\"mr-2\"\n                  />\n                  <v-checkbox\n                    v-model=\"notificationSettings.vehicle_recall_email\"\n                    :disabled=\"settingsLoading.notifications\"\n                  />\n                </div>\n              </div>\n            </div>\n          </div>\n        </div>\n\n        <div class=\"list-group list-group-flush\">\n          <div class=\"list-group-item\">\n            <div class=\"grid grid-cols-2\">\n              <div class=\"\">\n                <p class=\"mb-0\" style=\"font-size: 1rem;\">\n                  Renter Invoice Paid\n                </p>\n                <small class=\"text-gray-700\">\n                  When a renter invoice is paid\n                </small>\n              </div>\n              <div class=\"\">\n                <div class=\"notification-checkbox-group\">\n                  <v-checkbox\n                    v-model=\"notificationSettings.renter_invoice_paid_sms\"\n                    :disabled=\"settingsLoading.notifications\"\n                    class=\"mr-2\"\n                  />\n                  <v-checkbox\n                    v-model=\"notificationSettings.renter_invoice_paid_email\"\n                    :disabled=\"settingsLoading.notifications\"\n                  />\n                </div>\n              </div>\n            </div>\n          </div>\n        </div>\n\n        <div class=\"list-group list-group-flush\">\n          <div class=\"list-group-item\">\n            <div class=\"grid grid-cols-2\">\n              <div class=\"\">\n                <p class=\"mb-0\" style=\"font-size: 1rem;\">\n                  New Toll Transaction\n                </p>\n                <small class=\"text-gray-700\">\n                  When a vehicle receives a new toll\n                </small>\n              </div>\n              <div>\n                <div class=\"notification-checkbox-group\">\n                  <v-checkbox\n                    v-model=\"notificationSettings.toll_new_transaction_sms\"\n                    :disabled=\"settingsLoading.notifications\"\n                    class=\"mr-2\"\n                  />\n                  <v-checkbox\n                    v-model=\"notificationSettings.toll_new_transaction_email\"\n                    :disabled=\"settingsLoading.notifications\"\n                  />\n                </div>\n              </div>\n            </div>\n          </div>\n        </div>\n      </v-card-text>\n    </v-card>\n\n    <v-card class=\"mb-5\" variant=\"flat\">\n      <v-card-title>\n        Turo\n      </v-card-title>\n      <v-card-text v-if=\"notificationSettings\">\n        <div class=\"mt-3\">\n          <div class=\"grid grid-cols-2\">\n            <div></div>\n            <div class=\"float-right pr-md-3 pr-0\">\n              <span class=\"mr-md-4 mr-4\">SMS</span>\n              <span class=\"mr-md-0 mr-2\">EMAIL</span>\n            </div>\n          </div>\n          <div class=\"list-group list-group-flush\">\n            <div class=\"list-group-item\">\n              <div class=\"grid grid-cols-2 align-items-center\">\n                <div>\n                  <p class=\"mb-0 list-title\">\n                    Turo Error\n                  </p>\n                  <small class=\"text-gray-700\">\n                    If we get a Turo communication error\n                  </small>\n                </div>\n                <div>\n                  <div class=\"notification-checkbox-group\">\n                    <v-checkbox\n                      v-model=\"notificationSettings.turo_communication_error_sms\"\n                      :disabled=\"settingsLoading.notifications\"\n                      class=\"mr-2\"\n                    />\n                    <v-checkbox\n                      v-model=\"notificationSettings.turo_communication_error_email\"\n                      :disabled=\"settingsLoading.notifications\"\n                    />\n                  </div>\n                </div>\n              </div>\n            </div>\n            <div class=\"list-group-item\">\n              <div class=\"grid grid-cols-2 align-items-center\">\n                <div class=\"\">\n                  <p class=\"mb-0\" style=\"font-size: 1rem;\">\n                    Turo Booking\n                  </p>\n                  <small class=\"text-gray-700\">\n                    If we get a Turo booking notification\n                  </small>\n                </div>\n                <div class=\"col-auto\">\n                  <div class=\"notification-checkbox-group\">\n                    <v-checkbox\n                      v-model=\"notificationSettings.turo_booking_sms\"\n                      :disabled=\"settingsLoading.notifications\"\n                      class=\"mr-2\"\n                    />\n                    <v-checkbox\n                      v-model=\"notificationSettings.turo_booking_email\"\n                      :disabled=\"settingsLoading.notifications\"\n                    />\n                  </div>\n                </div>\n              </div>\n            </div>\n          </div>\n        </div>\n      </v-card-text>\n    </v-card>\n  </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport {computed, onBeforeMount, ref, watch} from 'vue';\nimport {useCompany} from '@/composables/useCompany';\nimport {useStore} from 'vuex';\n\nconst {company} = useCompany();\n\nconst store = useStore();\n\nconst settings = ref({\n  turo: {},\n  fw: {},\n});\n\nconst employeeNotificationSettings = ref([]);\n\nconst updateNotificationSettings = () => {\n  store.dispatch('settings/updateNotificationSettings', settings.value);\n};\n\nconst updateEmployeeNotificationSettings = (employee) => {\n  store.dispatch('company/updateEmployeeNotificationSettings', employee);\n};\n\nconst companyEmployees = computed(() => store.getters['company/employees']);\nconst settingsLoading = computed(() => store.getters['settings/loading']);\nconst notificationSettings = computed(() => store.getters['settings/notifications']);\n\n\nconst getEmployees = () => {\n  return store.dispatch('company/getEmployees');\n};\n\nonBeforeMount(() => {\n  getEmployees().then(() => {\n    employeeNotificationSettings.value = companyEmployees.value.map((e) => ({\n      type: 'employee',\n      uuid: e.uuid,\n      name: e.name,\n      phone: e.phone,\n      email: e.email,\n      notify_sms: e.phone ? e?.notificationSettings?.notify_sms : false,\n      notify_email: e.email ? e?.notificationSettings?.notify_email : false,\n    }));\n  });\n});\n\nwatch(notificationSettings, (notification, notificationOld) => {\n  if (notificationOld.set) {\n    updateNotificationSettings();\n  }\n}, {deep: true});\n</script>\n\n<style lang=\"scss\">\n.v-list-item__action--stack {\n  flex-direction: row !important;\n}\n\n.v-list-item__action .v-input--checkbox:first-child {\n  margin-right: 25px !important;\n}\n\n.notification-checkbox-group {\n  display: -ms-inline-flexbox;\n  display: inline-flex;\n  min-width: 24px;\n  -webkit-box-orient: horizontal !important;\n  -ms-flex-direction: row !important;\n  flex-direction: row !important;\n  -webkit-box-align: end;\n  -ms-flex-align: end;\n  align-items: flex-end;\n  align-self: stretch;\n  -webkit-box-pack: justify;\n  -ms-flex-pack: justify;\n  justify-content: space-between;\n  white-space: nowrap;\n  -webkit-box-direction: normal;\n}\n\n.list-title {\n  font-size: 1rem;\n}\n\n</style>\n","<template>\n  <div class=\"p-4\">\n    <div class=\"grid grid-cols-1 md:grid-cols-3 gap-6\">\n      <div>\n        <div class=\"setting-section-description\">\n          <h3 class=\"text-lg font-medium text-gray-900 dark:text-gray-100\">Email Templates</h3>\n\n          <div class=\"feature-description\">\n            Create and customize Email templates to type less and send faster.\n            <TheHelpLink url=\"https://help.fleetwire.io/en/article/create-your-own-email-templates-in-fleetwire-1apedin/?bust=1649702346456\"></TheHelpLink>\n          </div>\n        </div>\n      </div>\n\n      <div class=\"col-span-1 md:col-span-2 space-y-6\">\n        <v-card>\n          <v-card-title class=\"text-base sm:text-lg\">Automatic Emails</v-card-title>\n          <v-card-subtitle class=\"text-sm\">These emails are sent automatically, their contents can't be changed before\n            sending.\n          </v-card-subtitle>\n          <v-card-text>\n            <div class=\"rounded-lg overflow-hidden border border-gray-200 dark:border-gray-700\">\n              <div class=\"p-3 bg-gray-50 dark:bg-gray-800 border-b border-gray-200 dark:border-gray-700 font-semibold\">\n                Template\n              </div>\n\n              <div v-for=\"item in automaticEmailTemplates\" :key=\"item.uuid\" class=\"template-item py-5\">\n                <router-link\n                  :to=\"{ name: 'settings.account.email.email_template_single', params: {uuid: item.uuid} }\"\n                  class=\"block p-3 hover:bg-gray-50 dark:hover:bg-gray-800 text-blue-500\">\n                  <span class=\"font-semibold\">{{ item.name }}</span>\n                </router-link>\n              </div>\n            </div>\n          </v-card-text>\n        </v-card>\n\n        <v-card>\n          <v-card-title class=\"text-base sm:text-lg\">Manual Emails</v-card-title>\n          <v-card-subtitle class=\"text-sm\">These emails are available when viewing orders, customers, or documents. You\n            can edit their\n            contents before sending.\n          </v-card-subtitle>\n          <v-card-text>\n            <div class=\"rounded-lg overflow-hidden border border-gray-200 dark:border-gray-700\">\n              <div class=\"p-3 bg-gray-50 dark:bg-gray-800 border-b border-gray-200 dark:border-gray-700 font-semibold\">\n                Template\n              </div>\n\n              <div v-for=\"item in manualEmailTemplates\" :key=\"item.uuid\" class=\"template-item py-5\">\n                <router-link\n                  :to=\"{ name: 'settings.account.email.email_template_single', params: {uuid: item.uuid} }\"\n                  class=\"block p-3 hover:bg-gray-50 dark:hover:bg-gray-800 text-blue-500\">\n                  <span class=\"font-semibold\">{{ item.name }}</span>\n                </router-link>\n              </div>\n            </div>\n          </v-card-text>\n          <v-card-actions class=\"p-4\">\n            <v-btn disabled size=\"small\" variant=\"outlined\">New Email Template</v-btn>\n            <span class=\"text-sm text-gray-500 ml-2\">Coming soon</span>\n          </v-card-actions>\n        </v-card>\n      </div>\n    </div>\n  </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport {computed, onMounted} from 'vue';\nimport {useStore} from 'vuex';\n\nconst store = useStore();\nconst emailTemplates = computed(() => store.getters['email/emailTemplates']);\nconst automaticEmailTemplates = computed(() => emailTemplates.value.filter((t) => t.is_automatic));\nconst manualEmailTemplates = computed(() => emailTemplates.value.filter((t) => !t.is_automatic));\n\nconst getEmailTemplates = () => store.dispatch('email/getEmailTemplates');\n\nonMounted(() => {\n  getEmailTemplates();\n});\n</script>\n\n<style scoped>\n.template-item:not(:last-child) {\n  border-bottom: 1px solid rgb(214, 217, 219);\n}\n\n@media (max-width: 640px) {\n  .v-card-title {\n    font-size: 1.125rem;\n    line-height: 1.75rem;\n  }\n\n  .v-card-subtitle {\n    font-size: 0.875rem;\n    line-height: 1.25rem;\n  }\n}\n</style>","import {useStore} from 'vuex';\nimport {computed} from 'vue';\nimport {EmailDomainSettings} from '@/store/modules/email-domain-settings';\n\nexport function useEmailDomainSettings() {\n    const store = useStore();\n\n    const emailDomainSettingsLoading = computed(() => store.getters['emailDomainSettings/loading']);\n    const emailDomainSettings = computed(() => store.getters['emailDomainSettings/emailDomainSettings']);\n\n\n    const fetchEmailDomain = async () => {\n        return await store.dispatch('emailDomainSettings/fetchEmailDomain');\n    }\n\n    const createEmailDomain = async (payload: any) => {\n        return await store.dispatch('emailDomainSettings/createEmailDomain', payload);\n    }\n\n    const deleteEmailDomain = async (domainId: EmailDomainSettings) => {\n        return await store.dispatch('emailDomainSettings/deleteEmailDomain', domainId);\n    }\n\n    const emailDomainCheckDKIM = async (domainId: EmailDomainSettings) => {\n        return await store.dispatch('emailDomainSettings/emailDomainCheckDKIM', domainId);\n    }\n\n    const emailDomainCheckReturnPathStatus = async (domainId: EmailDomainSettings) => {\n        return await store.dispatch('emailDomainSettings/emailDomainCheckReturnPathStatus', domainId);\n    }\n\n    const setAsDefaultSendingDomain = async (domainId: EmailDomainSettings) => {\n        return await store.dispatch('emailDomainSettings/setAsDefaultSendingDomain', domainId);\n    }\n\n    const sendTestEmail = async (payload: string) => {\n        return await store.dispatch('emailDomainSettings/sendTestEmail', payload);\n    }\n\n    const updateEmailDomainUsername = async (payload: EmailDomainSettings) => {\n        return await store.dispatch('emailDomainSettings/updateEmailDomainUsername', payload);\n    }\n\n    return {\n        emailDomainSettingsLoading,\n        emailDomainSettings,\n        fetchEmailDomain,\n        createEmailDomain,\n        deleteEmailDomain,\n        emailDomainCheckDKIM,\n        emailDomainCheckReturnPathStatus,\n        setAsDefaultSendingDomain,\n        sendTestEmail,\n        updateEmailDomainUsername\n    }\n}","<template>\n  <div>\n    <v-card class=\"mb-5\" variant=\"flat\">\n      <v-card-title>\n        <div class=\"flex\">\n          Customer Emails\n          <v-spacer/>\n          <v-btn size=\"small\" @click=\"domainDialog = true; createEmailDomainErrorMessage = '';\">\n            <v-icon class=\"mr-1\" size=\"small\">mdi-plus</v-icon>\n            Add domain\n          </v-btn>\n        </div>\n      </v-card-title>\n      <v-card-subtitle>\n        Customize the domain used when sending emails to customers.\n        <TheHelpLink url=\"https://help.fleetwire.io/en/article/custom-email-domain-19fqufb/?bust=1649702303369\"></TheHelpLink>\n      </v-card-subtitle>\n      <v-card-text>\n        <div class=\"table-responsive-sm\">\n          <table class=\"w-full text-sm text-left text-gray-500 dark:text-gray-400\">\n            <thead class=\"text-xs text-gray-700 uppercase bg-gray-50 dark:bg-gray-700 dark:text-gray-400\">\n            <tr>\n              <th class=\"px-6 py-3\" scope=\"col\">Domain</th>\n              <th class=\"px-6 py-3\" scope=\"col\">Email</th>\n              <th class=\"px-6 py-3\" scope=\"col\">DKIM Verified</th>\n              <th class=\"px-6 py-3\" scope=\"col\">SPF Verified</th>\n              <th class=\"px-6 py-3\" scope=\"col\"></th>\n              <th class=\"px-6 py-3\" scope=\"col\">\n                <span class=\"sr-only\">Actions</span>\n              </th>\n            </tr>\n            </thead>\n            <tbody>\n            <tr v-for=\"item in domains\" :key=\"item.name\" class=\"bg-white border-b dark:bg-gray-800 dark:border-gray-700 hover:bg-gray-50 dark:hover:bg-gray-600\">\n              <th class=\"px-6 py-4 font-medium text-gray-900 whitespace-nowrap dark:text-white\" scope=\"row\">\n                {{ item.domain }}\n                <div v-if=\"showSending(item)\" class=\"items-center text-blue-100 leading-none lg:rounded-full flex lg:inline-flex\" role=\"alert\">\n                  <span class=\"flex rounded-full bg-blue-500 uppercase px-2 py-1 text-xs font-bold\">Sending</span>\n                </div>\n              </th>\n              <td class=\"px-6 py-4\" style=\"cursor: text;\">\n                <span v-if=\"item.email === 'no-reply@fleetwire.io'\">{{ item.email }}</span>\n                <span v-else-if=\"!editEmail || editEmail !== item\" @click=\"editEmail = item\"><v-icon size=\"small\">mdi-pencil-outline</v-icon> {{\n                    item.email\n                  }}</span>\n                <v-text-field\n                  v-if=\"editEmail && editEmail.uuid === item.uuid && item.email !== 'no-reply@fleetwire.io'\"\n                  v-model=\"username\"\n                  :append-icon=\"'mdi-content-save'\"\n                  autofocus\n                  class=\"m-0\"\n                  density=\"compact\"\n                  label=\"Username\"\n                  variant=\"outlined\"\n                  @blur=\"editEmail = false\"\n                  @click:append=\"updateEmailAddress(item)\"\n                  @keyup.enter=\"updateEmailAddress(item); $event.target.blur()\"\n                ></v-text-field>\n              </td>\n              <td class=\"px-6 py-4\">\n                <div v-if=\"item.DKIMVerified\">\n                  <div class=\"items-center text-green-100 leading-none lg:rounded-full flex lg:inline-flex\" role=\"alert\">\n                    <span class=\"flex rounded-full bg-green-500 uppercase px-2 py-1 text-xs font-bold\">Yes</span>\n                  </div>\n                </div>\n                <div v-else>\n                  <div class=\"items-center text-indigo-100 leading-none lg:rounded-full flex lg:inline-flex\" role=\"alert\" @click=\"emailDomainCheckDKIM(item)\">\n                    <span class=\"flex rounded-full bg-red-500 uppercase px-2 py-1 text-xs font-bold mr-3\">No</span>\n                    <svg class=\"fill-current opacity-75 h-4 w-4\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\">\n                      <path d=\"M12.95 10.707l.707-.707L8 4.343 6.586 5.757 10.828 10l-4.242 4.243L8 15.657l4.95-4.95z\"/>\n                    </svg>\n                  </div>\n                </div>\n              </td>\n              <td class=\"px-6 py-4\">\n                <div v-if=\"item.SPFVerified\">\n                  <div class=\"items-center text-green-100 leading-none lg:rounded-full flex lg:inline-flex\" role=\"alert\">\n                    <span class=\"flex rounded-full bg-green-500 uppercase px-2 py-1 text-xs font-bold\">Yes</span>\n                  </div>\n                </div>\n                <div v-else>\n                  <div class=\"items-center text-indigo-100 leading-none lg:rounded-full flex lg:inline-flex\" role=\"alert\">\n                    <span class=\"flex rounded-full bg-red-500 uppercase px-2 py-1 text-xs font-bold mr-3\">No</span>\n                    <svg class=\"fill-current opacity-75 h-4 w-4\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\">\n                      <path d=\"M12.95 10.707l.707-.707L8 4.343 6.586 5.757 10.828 10l-4.242 4.243L8 15.657l4.95-4.95z\"/>\n                    </svg>\n                  </div>\n                </div>\n              </td>\n              <td class=\"px-6 py-4\">\n                <v-btn v-if=\"showSetAsDefault(item)\" class=\"mr-3\" size=\"x-small\" @click=\"setAsDefaultSendingDomain(item)\">\n                  Set as sending domain\n                </v-btn>\n              </td>\n              <td class=\"table-action px-6 py-4 text-right\">\n                <v-menu location=\"bottom\">\n                  <template v-slot:activator=\"{ props }\">\n                    <v-icon color=\"grey\" v-bind=\"props\">mdi-dots-vertical</v-icon>\n                  </template>\n                  <v-list>\n                    <v-list-item :disabled=\"!item.active && item.domain !== 'fleetwire.io'\" @click=\"sendTestEmailInit()\">\n                      <v-list-item-title>Send Test Email</v-list-item-title>\n                    </v-list-item>\n                    <v-list-item v-if=\"item.domain !== 'fleetwire.io'\" @click=\"domainSettingsInit(item)\">\n                      <v-list-item-title>View Domain Settings</v-list-item-title>\n                    </v-list-item>\n                    <v-list-item v-if=\"item.domain !== 'fleetwire.io'\" :disabled=\"item.active\" @click=\"domainSettingsRemoveInit(item)\">\n                      <v-list-item-title>Delete</v-list-item-title>\n                    </v-list-item>\n                    <v-divider v-if=\"item.domain !== 'fleetwire.io'\"/>\n\n                    <v-list-item v-if=\"item.domain !== 'fleetwire.io'  && !item.ReturnPathDomainVerified\" @click=\"emailDomainCheckReturnPathStatus(item)\">\n                      <v-list-item-title>Check Return Path Status</v-list-item-title>\n                    </v-list-item>\n                    <v-list-item v-if=\"item.domain !== 'fleetwire.io'  && !item.DKIMVerified\" @click=\"emailDomainCheckDKIM(item)\">\n                      <v-list-item-title>Check DKIM Status</v-list-item-title>\n                    </v-list-item>\n                  </v-list>\n                </v-menu>\n              </td>\n            </tr>\n            </tbody>\n          </table>\n        </div>\n      </v-card-text>\n    </v-card>\n    <v-divider/>\n\n    <EmailTemplates/>\n    <v-divider/>\n\n    <v-dialog v-model=\"domainDialog\" width=\"400\">\n      <v-card>\n        <v-card-title>Add your email domain</v-card-title>\n        <v-divider opacity=\"50\"/>\n        <v-card-text class=\"\">\n          <v-text-field\n            v-model=\"newDomain\"\n            :error=\"createEmailDomainErrorMessage.length > 0\"\n            label=\"Email Domain\"\n            placeholder=\"example.com or subdomain.example.com\"\n            variant=\"outlined\"\n            @keyup.enter=\"createEmailDomain(newDomain); $event.target.blur()\"\n          ></v-text-field>\n\n          <div v-show=\"createEmailDomainErrorMessage\" class=\"bg-red-100 border border-eed-400 text-red-700 px-4 py-3 rounded relative\" role=\"alert\">\n            <strong class=\"font-bold mr-2\">Error!</strong>\n            <span class=\"block sm:inline\">{{ createEmailDomainErrorMessage }}</span>\n            <span class=\"absolute top-0 bottom-0 right-0 px-4 py-3\" @click=\"createEmailDomainErrorMessage = ''\">\n              <svg class=\"fill-current h-6 w-6 text-red-500\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><title>Close</title><path d=\"M14.348 14.849a1.2 1.2 0 0 1-1.697 0L10 11.819l-2.651 3.029a1.2 1.2 0 1 1-1.697-1.697l2.758-3.15-2.759-3.152a1.2 1.2 0 1 1 1.697-1.697L10 8.183l2.651-3.031a1.2 1.2 0 1 1 1.697 1.697l-2.758 3.152 2.758 3.15a1.2 1.2 0 0 1 0 1.698z\"/></svg>\n            </span>\n          </div>\n        </v-card-text>\n        <v-divider opacity=\"50\"/>\n        <v-card-actions>\n          <v-spacer/>\n          <v-btn :disabled=\"newDomain.length < 4\" :loading=\"emailDomainSettingsLoading.creatingEmailDomain\" color=\"primary\" @click=\"createEmailDomain(newDomain); createEmailDomainErrorMessage = ''\">\n            Add domain\n          </v-btn>\n        </v-card-actions>\n      </v-card>\n    </v-dialog>\n\n    <v-dialog v-model=\"testEmailDialog\" width=\"400\">\n      <v-card>\n        <v-card-title>\n          Send Test email from {{ activeDomain }}\n        </v-card-title>\n        <v-divider opacity=\"50\"/>\n        <v-card-text>\n          <v-text-field\n            v-model=\"testEmailAddress\"\n            label=\"email\"\n            name=\"email\"\n            variant=\"outlined\"\n          ></v-text-field>\n        </v-card-text>\n        <v-divider opacity=\"50\"/>\n        <v-card-actions>\n          <v-spacer/>\n          <v-btn :disabled=\"testEmailAddress.length < 4\" :loading=\"emailDomainSettingsLoading.sendingTestEmail\" color=\"primary\" @click=\"sendTestEmail(testEmailAddress)\">\n            Send Test Email\n          </v-btn>\n        </v-card-actions>\n      </v-card>\n    </v-dialog>\n\n    <v-dialog v-model=\"domainSettingsDialog\" width=\"550\">\n      <v-card>\n        <v-card-title>DNS Records</v-card-title>\n\n        <v-card-subtitle>\n          Here are the 3 records you should add to your DNS settings.\n          <TheHelpLink url=\"https://help.fleetwire.io/en/article/custom-email-domain-19fqufb/?bust=1658353515728\"/>\n        </v-card-subtitle>\n        <v-card-text class=\"mt-4\">\n          <v-expansion-panels multiple>\n            <v-expansion-panel>\n              <v-expansion-panel-title>\n                <template v-slot:default=\"{ expanded }\">\n                  <div class=\"\">\n                    <div class=\"col-4\"><span>DKIM</span></div>\n                    <div class=\"col-8 text--secondary\">\n                      <v-fade-transition leave-absolute>\n                        <span v-if=\"expanded\">Type: TXT</span>\n                        <div v-else class=\"\" style=\"width: 100%\">\n                          <div class=\"col-6\">\n                            <span v-if=\"currentWorkingSetting.DKIMUpdateStatus === 'Verified'\" class=\"text-sm text-green-600 flex items-center float-right\">\n                              <svg enable-background=\"new 0 0 24 24\" height=\"15\" viewBox=\"0 0 24 24\" width=\"15\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"m17.5 24c-3.584 0-6.5-2.916-6.5-6.5s2.916-6.5 6.5-6.5 6.5 2.916 6.5 6.5-2.916 6.5-6.5 6.5zm0-11.5c-2.757 0-5 2.243-5 5s2.243 5 5 5 5-2.243 5-5-2.243-5-5-5z\"/><path d=\"m16.5 20c-.198 0-.39-.079-.53-.22l-2-2c-.293-.293-.293-.768 0-1.061s.768-.293 1.061 0l1.434 1.433 2.972-3.396c.274-.313.747-.343 1.059-.071.312.273.343.747.07 1.058l-3.5 4c-.138.157-.334.25-.541.257-.008 0-.017 0-.025 0z\"/><path d=\"m8.5 21c-.048 0-.096-.004-.143-.014-.084-.016-8.357-1.725-8.357-11.056v-6.18c0-.31.19-.587.479-.699l7.75-3c.174-.067.367-.067.541 0l7.75 3c.29.112.48.389.48.699v4.5c0 .414-.336.75-.75.75s-.75-.336-.75-.75v-3.986l-7-2.709-7 2.709v5.666c0 7.594 6.01 9.32 7.012 9.555h.002c.406-.086.801.182.882.589.081.406-.183.801-.589.882l-.186.034c-.04.007-.08.01-.121.01z\"/></svg>\n                              <span>Verified</span>\n                            </span>\n                            <span v-else class=\"text-sm text-yellow-600 flex items-center float-right\">\n                              <svg id=\"Capa_1\" enable-background=\"new 0 0 512 512\" height=\"15\" viewBox=\"0 0 512 512\" width=\"15\" xmlns=\"http://www.w3.org/2000/svg\"><g><path d=\"m392.274 204.411c-37.588 0-71.18 17.417-93.146 44.599l-30.294-29.083 129.032-123.87c1.875 3.468 2.941 7.434 2.941 11.645v72.145c0 4.142 3.358 7.5 7.5 7.5s7.5-3.358 7.5-7.5v-72.145c0-21.816-17.749-39.564-39.565-39.564h-336.678c-21.815-.001-39.564 17.748-39.564 39.564v224.452c0 21.816 17.749 39.564 39.564 39.564h216.436c4.142 0 7.5-3.358 7.5-7.5s-3.358-7.5-7.5-7.5h-216.436c-3.876 0-7.543-.906-10.806-2.511l129.275-124.104c14.57 11.748 32.216 17.637 49.87 17.637s35.3-5.889 49.87-17.637l32.583 31.28c-11.284 18.26-17.808 39.759-17.808 62.755 0 66.017 53.709 119.726 119.726 119.726s119.726-53.71 119.726-119.727-53.708-119.726-119.726-119.726zm-229.14 10.238-16.006-15.366c-2.988-2.869-7.736-2.772-10.604.216s-2.771 7.736.217 10.604l10.232 9.823-129.032 123.872c-1.875-3.468-2.941-7.434-2.941-11.645v-224.451c0-4.211 1.066-8.177 2.941-11.645l93.952 90.194c1.454 1.396 3.325 2.09 5.193 2.09 1.971 0 3.939-.772 5.412-2.306 2.868-2.988 2.771-7.736-.217-10.604l-93.523-89.783c3.263-1.605 6.93-2.511 10.806-2.511h336.677c3.876 0 7.543.906 10.807 2.511l-134.376 129.001c-25.104 24.101-64.433 24.101-89.538 0zm229.14 214.214c-57.746 0-104.726-46.98-104.726-104.726s46.98-104.726 104.726-104.726 104.726 46.98 104.726 104.726-46.979 104.726-104.726 104.726z\"/><path d=\"m462.148 271.195c-2.503-3.3-7.208-3.945-10.508-1.441s-3.945 7.208-1.441 10.508c8.12 10.701 13.001 23.155 14.343 36.375h-69.162l-48.879-48.879c12.504-10.171 28.435-16.282 45.772-16.282 11.712 0 22.889 2.698 33.221 8.02 3.684 1.897 8.206.449 10.102-3.233 1.897-3.682.449-8.205-3.233-10.102-12.301-6.336-26.164-9.685-40.09-9.685-48.337 0-87.662 39.325-87.662 87.661s39.325 87.661 87.662 87.661c48.336 0 87.661-39.325 87.661-87.661.002-19.299-6.149-37.606-17.786-52.942zm-69.874 125.603c-40.066 0-72.662-32.596-72.662-72.661 0-17.337 6.112-33.269 16.283-45.772l51.076 51.076c1.406 1.406 3.314 2.197 5.303 2.197h72.275c-3.765 36.554-34.741 65.16-72.275 65.16z\"/></g></svg>\n                              <span class=\"ml-3\">Pending</span>\n                            </span>\n                          </div>\n                        </div>\n                      </v-fade-transition>\n                    </div>\n                  </div>\n                </template>\n              </v-expansion-panel-title>\n              <v-expansion-panel-text>\n                <div>\n                  <div>\n                    <v-text-field\n                      id=\"DKIMName\"\n                      :model-value=\"dkimName\"\n                      append-icon=\"mdi-content-copy\"\n                      density=\"compact\"\n                      label=\"Name\"\n                      readonly\n                      variant=\"outlined\"\n                      @click:append=\"copyToClipboardInit(dkimName)\"\n                    ></v-text-field>\n                    <v-text-field\n                      id=\"DKIMValue\"\n                      :model-value=\"dkimValue\"\n                      append-icon=\"mdi-content-copy\"\n                      density=\"compact\"\n                      label=\"Value\"\n                      readonly\n                      variant=\"outlined\"\n                      @click:append=\"copyToClipboardInit(dkimValue)\"\n                    ></v-text-field>\n                    <span v-if=\"currentWorkingSetting.DKIMUpdateStatus === 'Verified'\" class=\"text-sm text-green-600 flex items-center float-right\">\n                      <svg enable-background=\"new 0 0 24 24\" height=\"15\" viewBox=\"0 0 24 24\" width=\"15\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"m17.5 24c-3.584 0-6.5-2.916-6.5-6.5s2.916-6.5 6.5-6.5 6.5 2.916 6.5 6.5-2.916 6.5-6.5 6.5zm0-11.5c-2.757 0-5 2.243-5 5s2.243 5 5 5 5-2.243 5-5-2.243-5-5-5z\"/><path d=\"m16.5 20c-.198 0-.39-.079-.53-.22l-2-2c-.293-.293-.293-.768 0-1.061s.768-.293 1.061 0l1.434 1.433 2.972-3.396c.274-.313.747-.343 1.059-.071.312.273.343.747.07 1.058l-3.5 4c-.138.157-.334.25-.541.257-.008 0-.017 0-.025 0z\"/><path d=\"m8.5 21c-.048 0-.096-.004-.143-.014-.084-.016-8.357-1.725-8.357-11.056v-6.18c0-.31.19-.587.479-.699l7.75-3c.174-.067.367-.067.541 0l7.75 3c.29.112.48.389.48.699v4.5c0 .414-.336.75-.75.75s-.75-.336-.75-.75v-3.986l-7-2.709-7 2.709v5.666c0 7.594 6.01 9.32 7.012 9.555h.002c.406-.086.801.182.882.589.081.406-.183.801-.589.882l-.186.034c-.04.007-.08.01-.121.01z\"/></svg>\n                      Verified\n                    </span>\n                    <span v-else class=\"text-sm text-yellow-600 flex items-center float-right\">\n                      <svg id=\"Capa_1\" enable-background=\"new 0 0 512 512\" height=\"15\" viewBox=\"0 0 512 512\" width=\"15\" xmlns=\"http://www.w3.org/2000/svg\"><g><path d=\"m392.274 204.411c-37.588 0-71.18 17.417-93.146 44.599l-30.294-29.083 129.032-123.87c1.875 3.468 2.941 7.434 2.941 11.645v72.145c0 4.142 3.358 7.5 7.5 7.5s7.5-3.358 7.5-7.5v-72.145c0-21.816-17.749-39.564-39.565-39.564h-336.678c-21.815-.001-39.564 17.748-39.564 39.564v224.452c0 21.816 17.749 39.564 39.564 39.564h216.436c4.142 0 7.5-3.358 7.5-7.5s-3.358-7.5-7.5-7.5h-216.436c-3.876 0-7.543-.906-10.806-2.511l129.275-124.104c14.57 11.748 32.216 17.637 49.87 17.637s35.3-5.889 49.87-17.637l32.583 31.28c-11.284 18.26-17.808 39.759-17.808 62.755 0 66.017 53.709 119.726 119.726 119.726s119.726-53.71 119.726-119.727-53.708-119.726-119.726-119.726zm-229.14 10.238-16.006-15.366c-2.988-2.869-7.736-2.772-10.604.216s-2.771 7.736.217 10.604l10.232 9.823-129.032 123.872c-1.875-3.468-2.941-7.434-2.941-11.645v-224.451c0-4.211 1.066-8.177 2.941-11.645l93.952 90.194c1.454 1.396 3.325 2.09 5.193 2.09 1.971 0 3.939-.772 5.412-2.306 2.868-2.988 2.771-7.736-.217-10.604l-93.523-89.783c3.263-1.605 6.93-2.511 10.806-2.511h336.677c3.876 0 7.543.906 10.807 2.511l-134.376 129.001c-25.104 24.101-64.433 24.101-89.538 0zm229.14 214.214c-57.746 0-104.726-46.98-104.726-104.726s46.98-104.726 104.726-104.726 104.726 46.98 104.726 104.726-46.979 104.726-104.726 104.726z\"/><path d=\"m462.148 271.195c-2.503-3.3-7.208-3.945-10.508-1.441s-3.945 7.208-1.441 10.508c8.12 10.701 13.001 23.155 14.343 36.375h-69.162l-48.879-48.879c12.504-10.171 28.435-16.282 45.772-16.282 11.712 0 22.889 2.698 33.221 8.02 3.684 1.897 8.206.449 10.102-3.233 1.897-3.682.449-8.205-3.233-10.102-12.301-6.336-26.164-9.685-40.09-9.685-48.337 0-87.662 39.325-87.662 87.661s39.325 87.661 87.662 87.661c48.336 0 87.661-39.325 87.661-87.661.002-19.299-6.149-37.606-17.786-52.942zm-69.874 125.603c-40.066 0-72.662-32.596-72.662-72.661 0-17.337 6.112-33.269 16.283-45.772l51.076 51.076c1.406 1.406 3.314 2.197 5.303 2.197h72.275c-3.765 36.554-34.741 65.16-72.275 65.16z\"/></g></svg>\n                      Pending\n                    </span>\n                  </div>\n                </div>\n              </v-expansion-panel-text>\n            </v-expansion-panel>\n\n            <v-expansion-panel>\n              <v-expansion-panel-title>\n                <template v-slot:default=\"{ expanded }\">\n                  <div>\n                    <div class=\"col-4\"><span>SPF</span></div>\n                    <div class=\"col-8 text--secondary\">\n                      <v-fade-transition leave-absolute>\n                        <span v-if=\"expanded\">Type TXT</span>\n                        <div v-else style=\"width: 100%\">\n                          <div class=\"col-6\">\n                            <span v-if=\"currentWorkingSetting.SPFVerified\" class=\"text-sm text-green-600 flex items-center float-right\">\n                              <svg enable-background=\"new 0 0 24 24\" height=\"15\" viewBox=\"0 0 24 24\" width=\"15\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"m17.5 24c-3.584 0-6.5-2.916-6.5-6.5s2.916-6.5 6.5-6.5 6.5 2.916 6.5 6.5-2.916 6.5-6.5 6.5zm0-11.5c-2.757 0-5 2.243-5 5s2.243 5 5 5 5-2.243 5-5-2.243-5-5-5z\"/><path d=\"m16.5 20c-.198 0-.39-.079-.53-.22l-2-2c-.293-.293-.293-.768 0-1.061s.768-.293 1.061 0l1.434 1.433 2.972-3.396c.274-.313.747-.343 1.059-.071.312.273.343.747.07 1.058l-3.5 4c-.138.157-.334.25-.541.257-.008 0-.017 0-.025 0z\"/><path d=\"m8.5 21c-.048 0-.096-.004-.143-.014-.084-.016-8.357-1.725-8.357-11.056v-6.18c0-.31.19-.587.479-.699l7.75-3c.174-.067.367-.067.541 0l7.75 3c.29.112.48.389.48.699v4.5c0 .414-.336.75-.75.75s-.75-.336-.75-.75v-3.986l-7-2.709-7 2.709v5.666c0 7.594 6.01 9.32 7.012 9.555h.002c.406-.086.801.182.882.589.081.406-.183.801-.589.882l-.186.034c-.04.007-.08.01-.121.01z\"/></svg>\n                              <span class=\"ml-3\">Verified</span>\n                            </span>\n                            <span v-else class=\"text-sm text-yellow-600 flex items-center float-right\">\n                              <svg id=\"Capa_1\" enable-background=\"new 0 0 512 512\" height=\"15\" viewBox=\"0 0 512 512\" width=\"15\" xmlns=\"http://www.w3.org/2000/svg\"><g><path d=\"m392.274 204.411c-37.588 0-71.18 17.417-93.146 44.599l-30.294-29.083 129.032-123.87c1.875 3.468 2.941 7.434 2.941 11.645v72.145c0 4.142 3.358 7.5 7.5 7.5s7.5-3.358 7.5-7.5v-72.145c0-21.816-17.749-39.564-39.565-39.564h-336.678c-21.815-.001-39.564 17.748-39.564 39.564v224.452c0 21.816 17.749 39.564 39.564 39.564h216.436c4.142 0 7.5-3.358 7.5-7.5s-3.358-7.5-7.5-7.5h-216.436c-3.876 0-7.543-.906-10.806-2.511l129.275-124.104c14.57 11.748 32.216 17.637 49.87 17.637s35.3-5.889 49.87-17.637l32.583 31.28c-11.284 18.26-17.808 39.759-17.808 62.755 0 66.017 53.709 119.726 119.726 119.726s119.726-53.71 119.726-119.727-53.708-119.726-119.726-119.726zm-229.14 10.238-16.006-15.366c-2.988-2.869-7.736-2.772-10.604.216s-2.771 7.736.217 10.604l10.232 9.823-129.032 123.872c-1.875-3.468-2.941-7.434-2.941-11.645v-224.451c0-4.211 1.066-8.177 2.941-11.645l93.952 90.194c1.454 1.396 3.325 2.09 5.193 2.09 1.971 0 3.939-.772 5.412-2.306 2.868-2.988 2.771-7.736-.217-10.604l-93.523-89.783c3.263-1.605 6.93-2.511 10.806-2.511h336.677c3.876 0 7.543.906 10.807 2.511l-134.376 129.001c-25.104 24.101-64.433 24.101-89.538 0zm229.14 214.214c-57.746 0-104.726-46.98-104.726-104.726s46.98-104.726 104.726-104.726 104.726 46.98 104.726 104.726-46.979 104.726-104.726 104.726z\"/><path d=\"m462.148 271.195c-2.503-3.3-7.208-3.945-10.508-1.441s-3.945 7.208-1.441 10.508c8.12 10.701 13.001 23.155 14.343 36.375h-69.162l-48.879-48.879c12.504-10.171 28.435-16.282 45.772-16.282 11.712 0 22.889 2.698 33.221 8.02 3.684 1.897 8.206.449 10.102-3.233 1.897-3.682.449-8.205-3.233-10.102-12.301-6.336-26.164-9.685-40.09-9.685-48.337 0-87.662 39.325-87.662 87.661s39.325 87.661 87.662 87.661c48.336 0 87.661-39.325 87.661-87.661.002-19.299-6.149-37.606-17.786-52.942zm-69.874 125.603c-40.066 0-72.662-32.596-72.662-72.661 0-17.337 6.112-33.269 16.283-45.772l51.076 51.076c1.406 1.406 3.314 2.197 5.303 2.197h72.275c-3.765 36.554-34.741 65.16-72.275 65.16z\"/></g></svg>\n                              <span class=\"ml-3\">Pending</span>\n                            </span>\n                          </div>\n                        </div>\n                      </v-fade-transition>\n                    </div>\n                  </div>\n                </template>\n              </v-expansion-panel-title>\n              <v-expansion-panel-text>\n                <v-text-field\n                  id=\"SPFName\"\n                  v-model=\"currentWorkingSetting.SPFHost\"\n                  append-icon=\"mdi-content-copy\"\n                  density=\"compact\"\n                  label=\"Name\"\n                  readonly\n                  variant=\"outlined\"\n                  @click:append=\"copyToClipboardInit(currentWorkingSetting.SPFHost)\"\n                ></v-text-field>\n                <v-text-field\n                  id=\"SPFValue\"\n                  v-model=\"currentWorkingSetting.SPFTextValue\"\n                  append-icon=\"mdi-content-copy\"\n                  density=\"compact\"\n                  label=\"Value\"\n                  readonly\n                  variant=\"outlined\"\n                  @click:append=\"copyToClipboardInit(currentWorkingSetting.SPFTextValue)\"\n                ></v-text-field>\n                <span v-if=\"currentWorkingSetting.SPFVerified\" class=\"text-sm text-green-600 flex items-center float-right\">\n                  <svg enable-background=\"new 0 0 24 24\" height=\"15\" viewBox=\"0 0 24 24\" width=\"15\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"m17.5 24c-3.584 0-6.5-2.916-6.5-6.5s2.916-6.5 6.5-6.5 6.5 2.916 6.5 6.5-2.916 6.5-6.5 6.5zm0-11.5c-2.757 0-5 2.243-5 5s2.243 5 5 5 5-2.243 5-5-2.243-5-5-5z\"/><path d=\"m16.5 20c-.198 0-.39-.079-.53-.22l-2-2c-.293-.293-.293-.768 0-1.061s.768-.293 1.061 0l1.434 1.433 2.972-3.396c.274-.313.747-.343 1.059-.071.312.273.343.747.07 1.058l-3.5 4c-.138.157-.334.25-.541.257-.008 0-.017 0-.025 0z\"/><path d=\"m8.5 21c-.048 0-.096-.004-.143-.014-.084-.016-8.357-1.725-8.357-11.056v-6.18c0-.31.19-.587.479-.699l7.75-3c.174-.067.367-.067.541 0l7.75 3c.29.112.48.389.48.699v4.5c0 .414-.336.75-.75.75s-.75-.336-.75-.75v-3.986l-7-2.709-7 2.709v5.666c0 7.594 6.01 9.32 7.012 9.555h.002c.406-.086.801.182.882.589.081.406-.183.801-.589.882l-.186.034c-.04.007-.08.01-.121.01z\"/></svg>\n                  <span class=\"ml-3\">Verified</span>\n                </span>\n                <span v-else class=\"text-sm text-yellow-600 flex items-center float-right\">\n                  <svg id=\"Capa_1\" enable-background=\"new 0 0 512 512\" height=\"15\" viewBox=\"0 0 512 512\" width=\"15\" xmlns=\"http://www.w3.org/2000/svg\"><g><path d=\"m392.274 204.411c-37.588 0-71.18 17.417-93.146 44.599l-30.294-29.083 129.032-123.87c1.875 3.468 2.941 7.434 2.941 11.645v72.145c0 4.142 3.358 7.5 7.5 7.5s7.5-3.358 7.5-7.5v-72.145c0-21.816-17.749-39.564-39.565-39.564h-336.678c-21.815-.001-39.564 17.748-39.564 39.564v224.452c0 21.816 17.749 39.564 39.564 39.564h216.436c4.142 0 7.5-3.358 7.5-7.5s-3.358-7.5-7.5-7.5h-216.436c-3.876 0-7.543-.906-10.806-2.511l129.275-124.104c14.57 11.748 32.216 17.637 49.87 17.637s35.3-5.889 49.87-17.637l32.583 31.28c-11.284 18.26-17.808 39.759-17.808 62.755 0 66.017 53.709 119.726 119.726 119.726s119.726-53.71 119.726-119.727-53.708-119.726-119.726-119.726zm-229.14 10.238-16.006-15.366c-2.988-2.869-7.736-2.772-10.604.216s-2.771 7.736.217 10.604l10.232 9.823-129.032 123.872c-1.875-3.468-2.941-7.434-2.941-11.645v-224.451c0-4.211 1.066-8.177 2.941-11.645l93.952 90.194c1.454 1.396 3.325 2.09 5.193 2.09 1.971 0 3.939-.772 5.412-2.306 2.868-2.988 2.771-7.736-.217-10.604l-93.523-89.783c3.263-1.605 6.93-2.511 10.806-2.511h336.677c3.876 0 7.543.906 10.807 2.511l-134.376 129.001c-25.104 24.101-64.433 24.101-89.538 0zm229.14 214.214c-57.746 0-104.726-46.98-104.726-104.726s46.98-104.726 104.726-104.726 104.726 46.98 104.726 104.726-46.979 104.726-104.726 104.726z\"/><path d=\"m462.148 271.195c-2.503-3.3-7.208-3.945-10.508-1.441s-3.945 7.208-1.441 10.508c8.12 10.701 13.001 23.155 14.343 36.375h-69.162l-48.879-48.879c12.504-10.171 28.435-16.282 45.772-16.282 11.712 0 22.889 2.698 33.221 8.02 3.684 1.897 8.206.449 10.102-3.233 1.897-3.682.449-8.205-3.233-10.102-12.301-6.336-26.164-9.685-40.09-9.685-48.337 0-87.662 39.325-87.662 87.661s39.325 87.661 87.662 87.661c48.336 0 87.661-39.325 87.661-87.661.002-19.299-6.149-37.606-17.786-52.942zm-69.874 125.603c-40.066 0-72.662-32.596-72.662-72.661 0-17.337 6.112-33.269 16.283-45.772l51.076 51.076c1.406 1.406 3.314 2.197 5.303 2.197h72.275c-3.765 36.554-34.741 65.16-72.275 65.16z\"/></g></svg>\n                  <span class=\"ml-3\">Pending</span>\n                </span>\n              </v-expansion-panel-text>\n            </v-expansion-panel>\n\n            <v-expansion-panel>\n              <v-expansion-panel-title>\n                <template v-slot:default=\"{ expanded }\">\n                  <div class=\"\">\n                    <div class=\"col-4\"><span>Return-Path</span></div>\n                    <div class=\"col-8 text--secondary\">\n                      <v-fade-transition leave-absolute>\n                        <span v-if=\"expanded\">Type: CNAME</span>\n                        <div v-else class=\"\" style=\"width: 100%\">\n                          <div class=\"col-6\">\n                            <span v-if=\"currentWorkingSetting.ReturnPathDomainVerified\" class=\"text-sm text-green-600 flex items-center float-right\">\n                              <svg enable-background=\"new 0 0 24 24\" height=\"15\" viewBox=\"0 0 24 24\" width=\"15\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"m17.5 24c-3.584 0-6.5-2.916-6.5-6.5s2.916-6.5 6.5-6.5 6.5 2.916 6.5 6.5-2.916 6.5-6.5 6.5zm0-11.5c-2.757 0-5 2.243-5 5s2.243 5 5 5 5-2.243 5-5-2.243-5-5-5z\"/><path d=\"m16.5 20c-.198 0-.39-.079-.53-.22l-2-2c-.293-.293-.293-.768 0-1.061s.768-.293 1.061 0l1.434 1.433 2.972-3.396c.274-.313.747-.343 1.059-.071.312.273.343.747.07 1.058l-3.5 4c-.138.157-.334.25-.541.257-.008 0-.017 0-.025 0z\"/><path d=\"m8.5 21c-.048 0-.096-.004-.143-.014-.084-.016-8.357-1.725-8.357-11.056v-6.18c0-.31.19-.587.479-.699l7.75-3c.174-.067.367-.067.541 0l7.75 3c.29.112.48.389.48.699v4.5c0 .414-.336.75-.75.75s-.75-.336-.75-.75v-3.986l-7-2.709-7 2.709v5.666c0 7.594 6.01 9.32 7.012 9.555h.002c.406-.086.801.182.882.589.081.406-.183.801-.589.882l-.186.034c-.04.007-.08.01-.121.01z\"/></svg>\n                              <span class=\"ml-3\">Verified</span>\n                            </span>\n                            <span v-else class=\"text-sm text-yellow-600 flex items-center float-right\">\n                              <svg id=\"Capa_1\" enable-background=\"new 0 0 512 512\" height=\"15\" viewBox=\"0 0 512 512\" width=\"15\" xmlns=\"http://www.w3.org/2000/svg\"><g><path d=\"m392.274 204.411c-37.588 0-71.18 17.417-93.146 44.599l-30.294-29.083 129.032-123.87c1.875 3.468 2.941 7.434 2.941 11.645v72.145c0 4.142 3.358 7.5 7.5 7.5s7.5-3.358 7.5-7.5v-72.145c0-21.816-17.749-39.564-39.565-39.564h-336.678c-21.815-.001-39.564 17.748-39.564 39.564v224.452c0 21.816 17.749 39.564 39.564 39.564h216.436c4.142 0 7.5-3.358 7.5-7.5s-3.358-7.5-7.5-7.5h-216.436c-3.876 0-7.543-.906-10.806-2.511l129.275-124.104c14.57 11.748 32.216 17.637 49.87 17.637s35.3-5.889 49.87-17.637l32.583 31.28c-11.284 18.26-17.808 39.759-17.808 62.755 0 66.017 53.709 119.726 119.726 119.726s119.726-53.71 119.726-119.727-53.708-119.726-119.726-119.726zm-229.14 10.238-16.006-15.366c-2.988-2.869-7.736-2.772-10.604.216s-2.771 7.736.217 10.604l10.232 9.823-129.032 123.872c-1.875-3.468-2.941-7.434-2.941-11.645v-224.451c0-4.211 1.066-8.177 2.941-11.645l93.952 90.194c1.454 1.396 3.325 2.09 5.193 2.09 1.971 0 3.939-.772 5.412-2.306 2.868-2.988 2.771-7.736-.217-10.604l-93.523-89.783c3.263-1.605 6.93-2.511 10.806-2.511h336.677c3.876 0 7.543.906 10.807 2.511l-134.376 129.001c-25.104 24.101-64.433 24.101-89.538 0zm229.14 214.214c-57.746 0-104.726-46.98-104.726-104.726s46.98-104.726 104.726-104.726 104.726 46.98 104.726 104.726-46.979 104.726-104.726 104.726z\"/><path d=\"m462.148 271.195c-2.503-3.3-7.208-3.945-10.508-1.441s-3.945 7.208-1.441 10.508c8.12 10.701 13.001 23.155 14.343 36.375h-69.162l-48.879-48.879c12.504-10.171 28.435-16.282 45.772-16.282 11.712 0 22.889 2.698 33.221 8.02 3.684 1.897 8.206.449 10.102-3.233 1.897-3.682.449-8.205-3.233-10.102-12.301-6.336-26.164-9.685-40.09-9.685-48.337 0-87.662 39.325-87.662 87.661s39.325 87.661 87.662 87.661c48.336 0 87.661-39.325 87.661-87.661.002-19.299-6.149-37.606-17.786-52.942zm-69.874 125.603c-40.066 0-72.662-32.596-72.662-72.661 0-17.337 6.112-33.269 16.283-45.772l51.076 51.076c1.406 1.406 3.314 2.197 5.303 2.197h72.275c-3.765 36.554-34.741 65.16-72.275 65.16z\"/></g></svg>\n                              <span class=\"ml-3\">Pending</span>\n                            </span>\n                          </div>\n                        </div>\n                      </v-fade-transition>\n                    </div>\n                  </div>\n                </template>\n              </v-expansion-panel-title>\n              <v-expansion-panel-text>\n                <v-text-field\n                  id=\"CNAMEName\"\n                  v-model=\"currentWorkingSetting.ReturnPathDomain\"\n                  append-icon=\"mdi-content-copy\"\n                  density=\"compact\"\n                  label=\"Name\"\n                  readonly\n                  variant=\"outlined\"\n                  @click:append=\"copyToClipboardInit(currentWorkingSetting.ReturnPathDomain)\"\n                ></v-text-field>\n                <v-text-field\n                  id=\"CNAMEValue\"\n                  v-model=\"currentWorkingSetting.ReturnPathDomainCNAMEValue\"\n                  append-icon=\"mdi-content-copy\"\n                  density=\"compact\"\n                  label=\"Value\"\n                  readonly\n                  variant=\"outlined\"\n                  @click:append=\"copyToClipboardInit(currentWorkingSetting.ReturnPathDomainCNAMEValue)\"\n                ></v-text-field>\n                <div>\n                  <span v-if=\"currentWorkingSetting.ReturnPathDomainVerified\" class=\"text-sm text-green-600 flex items-center float-right\">\n                    <svg enable-background=\"new 0 0 24 24\" height=\"15\" viewBox=\"0 0 24 24\" width=\"15\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"m17.5 24c-3.584 0-6.5-2.916-6.5-6.5s2.916-6.5 6.5-6.5 6.5 2.916 6.5 6.5-2.916 6.5-6.5 6.5zm0-11.5c-2.757 0-5 2.243-5 5s2.243 5 5 5 5-2.243 5-5-2.243-5-5-5z\"/><path d=\"m16.5 20c-.198 0-.39-.079-.53-.22l-2-2c-.293-.293-.293-.768 0-1.061s.768-.293 1.061 0l1.434 1.433 2.972-3.396c.274-.313.747-.343 1.059-.071.312.273.343.747.07 1.058l-3.5 4c-.138.157-.334.25-.541.257-.008 0-.017 0-.025 0z\"/><path d=\"m8.5 21c-.048 0-.096-.004-.143-.014-.084-.016-8.357-1.725-8.357-11.056v-6.18c0-.31.19-.587.479-.699l7.75-3c.174-.067.367-.067.541 0l7.75 3c.29.112.48.389.48.699v4.5c0 .414-.336.75-.75.75s-.75-.336-.75-.75v-3.986l-7-2.709-7 2.709v5.666c0 7.594 6.01 9.32 7.012 9.555h.002c.406-.086.801.182.882.589.081.406-.183.801-.589.882l-.186.034c-.04.007-.08.01-.121.01z\"/></svg>\n                    Verified\n                  </span>\n                  <div v-else>\n                    <div class=\"bg-yellow-100 border border-yellow-400 text-yellow-700 px-4 py-3 rounded relative\" role=\"alert\">\n                      <strong class=\"font-bold mr-2\">Pending...</strong>\n                      <span class=\"block sm:inline\">We couldn’t find your Return-Path record. Go back to your DNS provider and double check that the hostname is set to pm-bounces. If the hostname and value look good, then it might take up to 48 hours for the DNS changes to propagate.</span><br>\n                      <v-btn :loading=\"emailDomainSettingsLoading.checkingReturnPathStatus\" class=\"mt-2\" @click=\"emailDomainCheckReturnPathStatus(currentWorkingSetting)\">\n                        Re-check\n                      </v-btn>\n                    </div>\n                  </div>\n                </div>\n              </v-expansion-panel-text>\n            </v-expansion-panel>\n          </v-expansion-panels>\n        </v-card-text>\n      </v-card>\n    </v-dialog>\n\n    <v-dialog v-model=\"domainSettingsDeleteConfirmDialog\" max-width=\"290\">\n      <v-card :disabled=\"emailDomainSettingsLoading.deletingEmailDomain\">\n        <v-card-title class=\"text-h5\">Remove Domain</v-card-title>\n        <v-card-text>\n          Are you sure you want to remove this domain?\n        </v-card-text>\n        <v-card-actions>\n          <v-spacer/>\n          <v-btn color=\"grey-darken-1\" size=\"small\" variant=\"text\" @click=\"domainSettingsDeleteConfirmDialog = false\">\n            Nevermind\n          </v-btn>\n          <v-btn :loading=\"emailDomainSettingsLoading.deletingEmailDomain\" color=\"red text-white\" @click=\"deleteEmailDomain(currentWorkingSetting)\">\n            Delete\n          </v-btn>\n        </v-card-actions>\n      </v-card>\n    </v-dialog>\n\n    <v-snackbar\n      v-model=\"copiedText\"\n      class=\"elevation-24\"\n      color=\"accent-4\"\n      location=\"bottom\"\n      width=\"100\"\n    >\n      Copied!\n    </v-snackbar>\n  </div>\n</template>\n\n<script lang=\"ts\">\nimport {ref, watch} from 'vue';\nimport {EventBus} from '@/plugins/eventBus';\nimport {clone, filter, get, split, toLower} from 'lodash';\nimport {copyTextToClipboard} from '@/helpers';\nimport EmailTemplates from '@/components/dashboard/settings/Emails/EmailTemplates.vue';\nimport {useEmailDomainSettings} from '@/composables/useEmailDomainSettings';\nimport {EmailDomainSettings} from '@/store/modules/email-domain-settings';\n\n\nexport default {\n  name: 'SettingsEmail',\n\n  components: {\n    EmailTemplates,\n  },\n\n  setup() {\n    const {\n      emailDomainSettingsLoading,\n      emailDomainSettings,\n      fetchEmailDomain,\n      createEmailDomain,\n      deleteEmailDomain,\n      emailDomainCheckDKIM,\n      emailDomainCheckReturnPathStatus,\n      setAsDefaultSendingDomain,\n      sendTestEmail,\n      updateEmailDomainUsername\n    } = useEmailDomainSettings();\n\n    const editEmail = ref(null);\n    const copiedText = ref(false);\n    const domainDialog = ref(false);\n    const testEmailDialog = ref(false);\n    const domainSettingsDialog = ref(false);\n    const newDomain = ref<string>('');\n    const testEmailAddress = ref('');\n    const createEmailDomainErrorMessage = ref('');\n    const currentWorkingSetting = ref<EmailDomainSettings>(null);\n    const domainSettingsDeleteConfirmDialog = ref(false);\n\n    watch(newDomain, (newValue) => {\n      newDomain.value = newValue.toLowerCase();\n    });\n\n    return {\n      editEmail,\n      copiedText,\n      domainDialog,\n      testEmailDialog,\n      domainSettingsDialog,\n      newDomain,\n      testEmailAddress,\n      createEmailDomainErrorMessage,\n      currentWorkingSetting,\n      domainSettingsDeleteConfirmDialog,\n      emailDomainSettingsLoading,\n      emailDomainSettings,\n      fetchEmailDomain,\n      createEmailDomain,\n      deleteEmailDomain,\n      emailDomainCheckDKIM,\n      emailDomainCheckReturnPathStatus,\n      setAsDefaultSendingDomain,\n      sendTestEmail,\n      updateEmailDomainUsername,\n    }\n  },\n\n  created() {\n    EventBus.$on('create-email-domain-success', () => {\n      const newDomain = this.domains.find((d) => toLower(d.domain) === toLower(this.newDomain));\n      this.newDomain = '';\n      this.domainDialog = false;\n\n      this.domainSettingsInit(newDomain);\n    });\n    EventBus.$on('delete-email-domain-success', () => {\n      this.currentWorkingSetting = '';\n      this.domainSettingsDeleteConfirmDialog = false;\n    });\n    EventBus.$on('send-test-email-success', () => {\n      this.testEmailAddress = '';\n      this.testEmailDialog = false;\n    });\n    EventBus.$on('create-email-domain-error', (message) => {\n      this.createEmailDomainErrorMessage = message;\n      this.testEmailDialog = false;\n    });\n\n    this.fetchEmailDomain();\n  },\n\n  computed: {\n    domains() {\n      const domains = clone(this.emailDomainSettings);\n      domains.push({\n        domain: 'fleetwire.io',\n        email: 'no-reply@fleetwire.io',\n        DKIMVerified: true,\n        SPFVerified: true,\n      });\n      return domains;\n    },\n    activeDomain() {\n      const domain = filter(this.domains, (d) => d.active);\n      return get(domain, '0.domain', 'fleetwire.io');\n    },\n    dkimName() {\n      if (get(this.currentWorkingSetting, 'DKIMPendingHost')) return this.currentWorkingSetting.DKIMPendingHost;\n      if (get(this.currentWorkingSetting, 'DKIMHost')) return this.currentWorkingSetting.DKIMHost;\n      return '';\n    },\n    dkimValue() {\n      if (get(this.currentWorkingSetting, 'DKIMPendingTextValue')) return this.currentWorkingSetting.DKIMPendingTextValue;\n      if (get(this.currentWorkingSetting, 'DKIMTextValue')) return this.currentWorkingSetting.DKIMTextValue;\n      return '';\n    },\n    username: {\n      get() {\n        return split(this.editEmail.email, '@')[0];\n      },\n      set(value) {\n        const domain = split(this.editEmail.email, '@');\n        this.editEmail.email = `${value}@${domain[1]}`;\n      },\n    },\n  },\n\n  methods: {\n\n    updateEmailAddress(item) {\n      this.editEmail = null;\n      this.updateEmailDomainUsername(item);\n    },\n\n    sendTestEmailInit() {\n      this.testEmailDialog = true;\n    },\n\n    copyToClipboardInit(text) {\n      copyTextToClipboard(text)\n        .then(() => {\n          this.variableLegendDialog = false;\n          this.copiedText = true;\n        });\n    },\n\n    showSetAsDefault(item) {\n      if (this.domains.length === 1) return false;\n      if (item.active) return false;\n\n      if (!item.SPFVerified || !item.DKIMVerified) return false;\n\n      const found = filter(this.domains, (d) => d.active);\n\n      return !(found.length === 0 && item.domain === 'fleetwire.io');\n    },\n\n    showSending(item) {\n      if (this.domains.length === 1) return true;\n      if (item.active) return true;\n\n      const found = filter(this.domains, (d) => d.active);\n\n      return found.length === 0 && item.domain === 'fleetwire.io';\n    },\n\n    domainSettingsInit(item) {\n      this.currentWorkingSetting = item;\n      this.domainSettingsDialog = true;\n    },\n\n    domainSettingsRemoveInit(item) {\n      this.currentWorkingSetting = item;\n      this.domainSettingsDeleteConfirmDialog = true;\n    },\n  },\n\n  beforeUnmount() {\n    EventBus.$off('create-email-domain-success');\n    EventBus.$off('delete-email-domain-success');\n    EventBus.$off('send-test-email-success');\n    EventBus.$off('create-email-domain-error');\n  },\n};\n</script>\n","import {useStore} from 'vuex';\nimport {computed} from 'vue';\nimport {Email, EmailTemplate} from '@/store/modules/email';\nimport {StoreLoaders} from '@/types';\n\nexport function useEmail() {\n    const store = useStore();\n\n    const emailTemplate = computed<EmailTemplate | null>(() => store.getters['email/emailTemplate']);\n    const emailLoading = computed<StoreLoaders>(() => store.getters['email/loading']);\n    const emailHistory = computed(() => store.getters['email/history']);\n    const emailForm = computed(() => store.getters['email/emailForm']);\n    const emailsLoading = computed(() => store.getters['email/loading']);\n    const emailTemplates = computed<EmailTemplate[]>(() => store.getters['email/emailTemplates']);\n\n\n    const sendEmail = async (payload: Email) => {\n        return await store.dispatch('email/sendEmail', payload);\n    }\n\n    const getEmailTemplate = async (uuid: string): Promise<EmailTemplate> => {\n        return await store.dispatch('email/getEmailTemplate', uuid);\n    };\n\n    const getEmailHistory = async (data: { type: string, id: string }) => {\n        return await store.dispatch('email/history', data);\n    };\n\n    const getEmailTemplates = async (data?: { context?: string }): Promise<EmailTemplate[]> => {\n        return await store.dispatch('email/getEmailTemplates', data);\n    };\n\n    const updateEmailTemplate = async (payload: EmailTemplate) => {\n        return await store.dispatch('email/updateEmailTemplate', payload);\n    }\n\n    const sendTestTemplateEmail = async (payload: EmailTemplate) => {\n        return await store.dispatch('email/sendTestTemplateEmail', payload);\n    }\n\n    const resetEmailTemplate = async (payload: EmailTemplate) => {\n        return await store.dispatch('email/resetEmailTemplate', payload);\n    }\n\n\n    return {\n        emailTemplate,\n        emailLoading,\n        emailHistory,\n        emailForm,\n        emailsLoading,\n        emailTemplates,\n        getEmailTemplate,\n        updateEmailTemplate,\n        sendTestTemplateEmail,\n        resetEmailTemplate,\n        getEmailHistory,\n        getEmailTemplates,\n        sendEmail\n    }\n}","<template>\n  <div>\n    <div class=\"grid grid-cols-1 md:grid-cols-3 gap-4 my-5\">\n      <div class=\"px-4 md:px-0\">\n        <div class=\"setting-section-description\">\n          <h3 class=\"text-lg font-medium text-gray-900 dark:text-gray-100\">Edit email template</h3>\n\n          <div class=\"feature-description\">\n            Customize your email templates using dynamic variables to personalize your messages. Insert customer\n            details, order information, and more using our\n            <a class=\"text-blue-500\" href=\"https://help.fleetwire.io/en/article/email-variables-1i0tn10/?bust=1649486067702\" target=\"_blank\">email\n              variables</a>.\n            Click the link to see the full list of available variables and how to use them.\n            <div v-if=\"debugDrawerOpen\">\n              <v-btn size=\"small\" @click=\"sendTestTemplateEmail(emailTemplate)\">Send Test Email</v-btn>\n            </div>\n          </div>\n        </div>\n      </div>\n\n      <div class=\"col-span-1 md:col-span-2 px-4 md:px-0\">\n        <v-card :disabled=\"emailLoading.email_templates\" class=\"mb-5\" variant=\"elevated\">\n          <v-card-text>\n            <v-form>\n              <v-text-field\n                v-if=\"emailTemplate\"\n                v-model=\"emailTemplate.subject\"\n                class=\"mb-4\"\n                label=\"Subject\"\n                variant=\"outlined\"\n              ></v-text-field>\n              <div id=\"editorjs\" class=\"rounded min-h-[200px]\" style=\"border: #9b9b9b 1px solid;\"></div>\n            </v-form>\n          </v-card-text>\n          <v-card-actions class=\"flex flex-wrap gap-2 justify-end px-4 py-3\">\n            <v-btn\n              v-if=\"!emailTemplate || !emailTemplate.default\"\n              class=\"order-1 md:order-none\"\n              color=\"red\"\n              size=\"small\"\n              variant=\"text\"\n              @click=\"resetEmailTemplateInit()\"\n            >Reset\n            </v-btn>\n            <v-spacer class=\"hidden md:block\"/>\n            <v-btn :to=\"{name: 'settings.account.email', hash: '#email'}\" class=\"w-full md:w-auto\" size=\"small\" variant=\"text\">\n              Back\n            </v-btn>\n            <v-btn\n              :loading=\"emailLoading.email_templates\"\n              class=\"w-full md:w-auto\"\n              color=\"primary\"\n              @click=\"updateEmailTemplateInit()\"\n            >\n              Save\n            </v-btn>\n          </v-card-actions>\n        </v-card>\n      </div>\n    </div>\n  </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport {nextTick, onBeforeUnmount, onMounted} from 'vue';\nimport EditorJS from '@editorjs/editorjs';\nimport Header from '@editorjs/header';\nimport List from '@editorjs/list';\nimport Paragraph from 'editorjs-paragraph-with-alignment';\nimport {useEmail} from '@/composables/useEmail';\nimport {useAppSettings} from '@/composables/useAppSettings';\nimport {useRoute, useRouter} from 'vue-router';\n\n\nconst route = useRoute();\nconst router = useRouter();\nconst {\n  emailTemplate,\n  emailLoading,\n  getEmailTemplate,\n  updateEmailTemplate,\n  sendTestTemplateEmail,\n  resetEmailTemplate\n} = useEmail();\n\nconst {debugDrawerOpen} = useAppSettings();\n\n\nlet editorjs: EditorJS | null = null;\n\nconst resetEmailTemplateInit = () => {\n  resetEmailTemplate(emailTemplate.value).then((template) => {\n    if (template.uuid !== route.params.uuid) {\n      router.replace({\n        name: 'settings.account.email.email_template_single',\n        params: {uuid: template.uuid}\n      }).catch(() => {\n      });\n    }\n  });\n};\n\nconst updateEmailTemplateInit = () => {\n  editorjs\n    .save()\n    .then((outputData) => {\n      const localEmailTemplate = {...emailTemplate.value};\n\n      localEmailTemplate.email_body_blocks = outputData;\n\n      updateEmailTemplate(localEmailTemplate).then((template) => {\n        console.dir('THEN updateEmailTemplate');\n        console.dir(template);\n        if (template.uuid !== route.params.uuid) {\n          router.replace({\n            name: 'settings.account.email.email_template_single',\n            params: {uuid: template.uuid}\n          }).catch(() => {\n          });\n        }\n      });\n    }).catch((error) => {\n    console.log('Saving failed: ', error);\n  });\n};\n\nonMounted(() => {\n  getEmailTemplate(route.params.uuid as string).then(() => {\n    nextTick(() => {\n      console.dir(emailTemplate.value.email_body_blocks);\n      if (editorjs && typeof editorjs.destroy === 'function') {\n        editorjs.destroy();\n      }\n\n      editorjs = new EditorJS({\n        autofocus: true,\n        holder: 'editorjs',\n        defaultBlock: 'paragraph',\n        tools: {\n          paragraph: {\n            class: Paragraph,\n            inlineToolbar: true,\n          },\n          header: Header,\n          list: List,\n        },\n        data: emailTemplate.value.email_body_blocks,\n        minHeight: 200,\n      });\n    });\n  }).catch(() => {\n    router.replace({name: 'settings.account.email', hash: '#email'}).catch(() => {\n    });\n  });\n});\n\nonBeforeUnmount(() => {\n  if (editorjs && typeof editorjs.destroy === 'function') {\n    editorjs.destroy();\n  }\n});\n\n</script>\n\n<style scoped>\n@media (max-width: 768px) {\n  :deep(.codex-editor) {\n    padding: 0.5rem !important;\n  }\n\n  :deep(.ce-toolbar__plus) {\n    left: -10px !important;\n  }\n\n  :deep(.ce-toolbar__actions) {\n    right: -10px !important;\n  }\n}\n</style>\n\n","import {useStore} from 'vuex';\nimport {computed} from 'vue';\nimport {useRouter} from 'vue-router';\nimport {useSubscription} from \"@/composables/useSubscription\";\nimport {usePayments} from \"@/composables/usePayments\";\nimport {useStripe} from \"@/composables/useStripe\";\nimport {useAuth} from \"@/composables/useAuth\";\n\n\nexport function useSubscriptionManager() {\n\n    const router = useRouter();\n    const store = useStore();\n    const {switchPlan, subscription} = useSubscription();\n    const {fetchStripeCheckoutUrl} = usePayments();\n    const {fetchSession} = useAuth();\n    const {stripePrices} = useStripe();\n\n    const planSelectionName = computed(() => plansOrdered.value[planSelection.value].name);\n    const planSelectionObject = computed(() => plansOrdered.value[planSelection.value]);\n    const planSelectionNameUpper = computed(() => planSelectionName.value.charAt(0).toUpperCase() + planSelectionName.value.slice(1));\n    const planSelectionPrice = computed(() => planPricing[updatedSubscription.value.interval][planSelectionName.value]);\n\n    // const subscriptionStatus = subscription.value?.stripe_status;\n    const subscriptionStatus = computed(() => subscription.value?.stripe_status);\n    const subscriptionMaster = computed(() => store.getters['subscriptions/subscriptionMaster']);\n\n    const subscriptionStep = computed({\n        get: () => store.getters['subscriptions/subscriptionStep'],\n        set: (value) => store.commit('subscriptions/SET_SUBSCRIPTION_STEP', value),\n    });\n\n    const planSelection = computed({\n        get: () => store.getters['subscriptions/planSelection'],\n        set: (value) => store.commit('subscriptions/SET_PLAN_SELECTION', value),\n    });\n\n    const updatedSubscription = computed({\n        get: () => store.getters['subscriptions/updatedSubscription'],\n        set: (value) => store.commit('subscriptions/SET_SUBSCRIPTION_PLAN_AND_INTERVAL', value),\n    });\n\n    const plansOrdered = computed(() =>\n        stripePrices.value.sort((a, b) =>\n            ['premium', 'standard', 'basic'].indexOf(a.name) -\n            ['premium', 'standard', 'basic'].indexOf(b.name)\n        )\n    );\n\n    const openStripeCheckoutUrl = () => {\n\n        fetchStripeCheckoutUrl({\n            price: stripePrices.value[planSelection.value].pricing[updatedSubscription.value.interval].price_id,\n        }).then((url) => {\n            console.dir('Stripe checkout URL fetched');\n\n            window.open(url, '_blank');\n        });\n    };\n\n    const switchPlanInit = async () => {\n        await switchPlan(stripePrices.value[planSelection.value].pricing[updatedSubscription.value.interval].price_id).then(() => {\n            // pause for 2 seconds\n            setTimeout(() => {\n                fetchSession().then(() => {\n                    router.push({name: 'settings.account'}).catch();\n                });\n            }, 1000);\n        });\n    };\n\n    const planPricing = {\n        monthly: {\n            basic: 34,\n            standard: 89,\n            premium: 279,\n        },\n        yearly: {\n            basic: 24,\n            standard: 69,\n            premium: 239,\n        },\n    };\n\n    return {\n        subscriptionStatus,\n        planSelection,\n        updatedSubscription,\n        plansOrdered,\n        subscriptionStep,\n        planPricing,\n        planSelectionName,\n        subscriptionMaster,\n        planSelectionObject,\n        planSelectionNameUpper,\n        planSelectionPrice,\n        openStripeCheckoutUrl,\n        switchPlanInit,\n    }\n}","<template>\n  <!-- Plan Selection -->\n  <v-card style=\"border: 1px solid rgb(224, 220, 229);\" variant=\"flat\">\n    <v-card-title :class=\"{'cursor-pointer' : subscriptionStep !== 0}\" @click=\"subscriptionStep = 0\">\n      <div class=\"flex items-center\">\n        <span class=\"text-sm md:text-base\">1. Choose your plan</span>\n        <v-spacer/>\n        <v-btn\n          v-if=\"subscriptionStep > 0\"\n          icon=\"mdi-chevron-down\"\n          size=\"small\"\n          variant=\"text\"\n        />\n      </div>\n    </v-card-title>\n\n    <div v-if=\"subscriptionStep === 0\">\n      <v-item-group v-model=\"planSelection\" mandatory>\n        <div v-for=\"(plan, i) in plansOrdered\" :key=\"i\">\n          <v-item v-slot=\"{ isSelected, toggle }\">\n            <v-card\n              :class=\"isSelected ? 'plan-selected' : ''\"\n              :color=\"isSelected ? 'grey-200' : ''\"\n              class=\"d-flex flex-column md:flex-row align-start md:align-center border-b rounded-b-none\"\n              dark\n              variant=\"flat\"\n              @click=\"toggle\"\n            >\n              <v-scroll-y-transition>\n                <div class=\"p-3 w-full\">\n                  <div class=\"subscription__card flex flex-col md:flex-row w-full\">\n                    <div class=\"subscription__card--first flex-1\">\n                      <div class=\"flex items-start\">\n                        <div>\n                          <v-btn :icon=\"isSelected ? 'mdi-circle' : 'mdi-circle-outline'\" size=\"small\" variant=\"text\"/>\n                        </div>\n\n                        <div class=\"subscription__card--details ml-2\">\n                          <div class=\"subscription__card--title\">\n                            <div class=\"font-bold uppercase text-sm md:text-base\">\n                              {{ plan.name }}\n                            </div>\n\n                            <div v-if=\"plan.name === subscriptionPlan\" class=\"text-xs md:text-sm\">\n                              <span class=\"bg-yellow-100 text-yellow-800 text-xs font-medium mr-2 px-2.5 py-0.5 rounded-full dark:bg-yellow-900 dark:text-yellow-300\" type=\"info\">Current plan</span>\n                            </div>\n                            <div v-if=\"plan.name === 'premium'\" class=\"text-xs md:text-sm\">\n                              <span class=\"bg-gray-200 text-gray-800 text-xs font-medium mr-2 px-2.5 py-0.5 rounded-full dark:bg-gray-700 dark:text-gray-300\" type=\"info\">You trialed this plan</span>\n                            </div>\n                          </div>\n\n                          <div v-if=\"plan.name === 'premium'\" class=\"subscription__card--description text-xs md:text-sm\">\n                            Everything in the Standard plan + more vehicles, connections and advanced features.\n                          </div>\n\n                          <div v-if=\"plan.name === 'standard'\" class=\"subscription__card--description text-xs md:text-sm\">\n                            Everything in the Basic plan + more vehicles, esign capability, coupons, and more.\n                          </div>\n\n                          <div v-if=\"plan.name === 'basic'\" class=\"subscription__card--description text-xs md:text-sm\">\n                            Great for just getting started.\n                          </div>\n\n                          <div class=\"subscription__card--bullets mt-2\">\n                            <template v-for=\"bullet in plan.description.bullets\" :key=\"bullet\">\n                              <div v-if=\"bullet !== 'And More*'\" class=\"subscription__card--bullet flex items-start\">\n                                <div class=\"badge badge-rounded-circle badge-success-soft mt-1 mr-2\">\n                                  <v-icon color=\"success\" size=\"x-small\">mdi-check</v-icon>\n                                </div>\n                                <p class=\"text-xs md:text-sm\">\n                                  {{ bullet }}\n                                </p>\n                              </div>\n                            </template>\n\n                            <div class=\"subscription__card--bullet flex items-start\">\n                              <div class=\"badge badge-rounded-circle badge-success-soft mt-1 mr-2\">\n                                <v-icon color=\"success\" size=\"x-small\">mdi-check</v-icon>\n                              </div>\n                              <p class=\"text-xs md:text-sm\">\n                                <a\n                                  href=\"https://fleetwire.io/pricing/?utm_source=subscription-checkout&utm_medium=subscription-page&utm_campaign=subscription-review\"\n                                  rel=\"noopener noreferrer\"\n                                  target=\"_blank\"\n                                  @click.stop\n                                >\n                                  And more...\n                                </a>\n                              </p>\n                            </div>\n                          </div>\n                        </div>\n                      </div>\n                    </div>\n\n                    <div class=\"subscription__card--second mt-3 md:mt-0 md:ml-4\">\n                      <div class=\"subscription__card--price-title text-xs md:text-sm\">Starts At</div>\n                      <div class=\"subscription__card--price-price flex items-baseline\">\n                        <span class=\"text-sm md:text-base\">$</span>\n                        <span class=\"text-lg md:text-2xl\">\n                          {{ planPricing['yearly'][plan.name] }}\n                        </span>\n                        <span class=\"text-xs md:text-sm\">/mo</span>\n                      </div>\n                    </div>\n                  </div>\n                </div>\n              </v-scroll-y-transition>\n            </v-card>\n          </v-item>\n        </div>\n      </v-item-group>\n    </div>\n  </v-card>\n</template>\n\n<script lang=\"ts\" setup>\nimport {useSubscription} from '@/composables/useSubscription';\nimport {useSubscriptionManager} from '@/composables/useSubscriptionManager';\n\nconst {subscriptionPlan} = useSubscription();\nconst {subscriptionStep, planSelection, plansOrdered, planPricing} = useSubscriptionManager();\n</script>\n","<template>\n  <!-- Terms & Discounts -->\n  <v-card ref=\"termsSection\" class=\"mt-5\" style=\"border: 1px solid rgb(224, 220, 229);\" variant=\"flat\">\n    <v-card-title :class=\"{'cursor-pointer' : subscriptionStep === 0}\" @click=\"handleStepClick\">\n      <div class=\"flex\">\n        <span class=\"text-sm md:text-base\">2. Term & Discounts</span>\n        <v-spacer/>\n        <v-btn\n          v-if=\"subscriptionStep !== 1\"\n          icon=\"mdi-chevron-down\"\n          variant=\"text\"\n        />\n      </div>\n    </v-card-title>\n\n    <div v-show=\"subscriptionStep === 1\">\n      <v-item-group\n        v-model=\"updatedSubscription.interval\"\n        mandatory\n      >\n        <div v-for=\"(_details, term) in planPricing\" :key=\"term\">\n          <v-item v-slot=\"{ isSelected, toggle }\" :value=\"term\">\n            <v-card\n              :color=\"isSelected ? 'grey-200' : ''\"\n              class=\"d-flex align-center border-b rounded-b-none\"\n              variant=\"flat\"\n              @click=\"toggle\"\n            >\n              <v-scroll-y-transition>\n                <div class=\"p-3 w-full\">\n                  <div class=\"subscription__card d-flex justify-space-between align-center\">\n                    <div class=\"subscription__card--first d-flex align-center\">\n                      <div class=\"mr-2\">\n                        <v-btn\n                          :icon=\"isSelected ? 'mdi-circle' : 'mdi-circle-outline'\"\n                          variant=\"text\"\n                        />\n                      </div>\n\n                      <div class=\"subscription__card--details\">\n                        <div class=\"subscription__card--title\">\n                          <div class=\"font-bold\">\n                            <div v-if=\"term === 'monthly'\">Monthly</div>\n                            <div v-else>Annual</div>\n                          </div>\n                        </div>\n\n                        <div class=\"subscription__card--description text-caption text-md-body-2\">\n                          <div v-if=\"term === 'monthly'\">Month-to-month contract</div>\n                          <div v-else>Save up to 29% by committing to a 12-month plan</div>\n                        </div>\n                      </div>\n                    </div>\n\n                    <div class=\"subscription__card--second text-right\">\n                      <div class=\"subscription__card--price-title text-caption text-md-body-2\">Per Month</div>\n                      <div class=\"subscription__card--price-price d-flex align-end justify-end\">\n                        <span style=\"padding-top: 4px;\">$</span>\n                        <span style=\"font-size: 24px;align-self: end;\">\n                          {{ planPricing[term][planSelectionName] }}\n                        </span>\n                        <span style=\"font-size: 14px;align-self: end;padding-bottom: 2px;\">/mo</span>\n                      </div>\n                    </div>\n                  </div>\n                </div>\n              </v-scroll-y-transition>\n            </v-card>\n          </v-item>\n        </div>\n      </v-item-group>\n    </div>\n  </v-card>\n</template>\n\n<script lang=\"ts\" setup>\nimport {useSubscriptionManager} from '@/composables/useSubscriptionManager';\nimport {ref} from 'vue';\nimport type {VCard} from 'vuetify/components';\n\nconst termsSection = ref<InstanceType<typeof VCard> | null>(null);\n\nconst {\n  subscriptionStep,\n  planPricing,\n  updatedSubscription,\n  planSelectionName\n} = useSubscriptionManager();\n\nconst handleStepClick = () => {\n  if (subscriptionStep.value === 0) {\n    subscriptionStep.value = 1;\n    // Wait for the next tick to ensure the content is rendered\n    setTimeout(() => {\n      termsSection.value?.$el?.scrollIntoView({behavior: 'smooth', block: 'start'});\n    }, 100);\n  } else {\n    subscriptionStep.value = 1;\n  }\n};\n</script>\n","<template>\n  <!-- Review & Confirm -->\n  <v-card class=\"mt-5\" style=\"border: 1px solid rgb(224, 220, 229);\" variant=\"flat\">\n    <v-card-title :class=\"{'cursor-pointer' : subscriptionStep < 2}\" class=\"py-4\" @click=\"subscriptionStep = 2\">\n      <div class=\"flex align-center\">\n        <span class=\"text-sm md:text-base\">3. Review & Confirm</span>\n        <v-spacer/>\n        <v-btn\n          v-if=\"subscriptionStep !== 2\"\n          icon=\"mdi-chevron-down\"\n          size=\"small\"\n          variant=\"text\"\n        />\n      </div>\n    </v-card-title>\n\n    <div v-show=\"subscriptionStep === 2\">\n      <v-card :disabled=\"stripeLoading.fetchPortalUrl\" :loading=\"stripeLoading.fetchPortalUrl\">\n        <v-card-text class=\"pa-4\">\n          <p class=\"text-body-2 text-sm-md\">\n            By continuing, you agree to our\n            <a\n              class=\"underline text-primary\"\n              href=\"https://fleetwire.io/terms/?utm_source=subscription-checkout&utm_medium=subscription-page&utm_campaign=subscription-review\"\n              rel=\"noopener noreferrer\"\n              target=\"_blank\"\n              @click.stop\n            >\n              Terms of Service\n            </a>\n            and\n            <a\n              class=\"underline text-primary\"\n              href=\"https://fleetwire.io/privacy-policy/?utm_source=subscription-checkout&utm_medium=subscription-page&utm_campaign=subscription-review\"\n              rel=\"noopener noreferrer\"\n              target=\"_blank\"\n              @click.stop\n            >\n              Privacy Policy\n            </a>.\n          </p>\n        </v-card-text>\n        <v-card-actions class=\"pa-4\">\n          <v-spacer/>\n          <v-btn\n            :disabled=\"paymentsLoading.cardBtnLoading\"\n            :to=\"{ name: 'settings.account' }\"\n            class=\"mr-2\"\n            size=\"small\"\n            variant=\"text\"\n          >\n            Back\n          </v-btn>\n          <v-btn\n            v-if=\"hasActiveSubscription\"\n            :disabled=\"subscriptionsLoading.subscribing\"\n            :loading=\"subscriptionsLoading.subscribing\"\n            color=\"primary\"\n            size=\"small\"\n            @click=\"switchPlanInit()\"\n          >\n            Swap Plans\n          </v-btn>\n          <v-btn\n            v-if=\"!hasActiveSubscription\"\n            :loading=\"stripeLoading.fetchPortalUrl\"\n            class=\"ml-2\"\n            size=\"small\"\n            variant=\"text\"\n            @click=\"openStripeCheckoutUrl()\"\n          >\n            Checkout on Stripe\n          </v-btn>\n        </v-card-actions>\n      </v-card>\n    </div>\n  </v-card>\n</template>\n\n<script lang=\"ts\" setup>\nimport {useSubscription} from '@/composables/useSubscription';\nimport {usePayments} from '@/composables/usePayments';\nimport {useStripe} from '@/composables/useStripe';\nimport {useSubscriptionManager} from '@/composables/useSubscriptionManager';\n\n\nconst {\n  hasActiveSubscription,\n  subscriptionsLoading,\n} = useSubscription();\n\nconst {paymentsLoading} = usePayments()\n\nconst {stripeLoading} = useStripe();\nconst {\n  subscriptionStep,\n  openStripeCheckoutUrl,\n  switchPlanInit,\n} = useSubscriptionManager();\n\n</script>","<template>\n  <v-card color=\"transparent\" variant=\"flat\">\n    <div class=\"subscription__card--summary-card\">\n      <div class=\"subscription__card--summary-card-title\">\n        <div class=\"font-extrabold text-lg sm:text-xl\">{{ planSelectionNameUpper }} Plan</div>\n        <div class=\"subscription__card--summary-card-pricing flex items-baseline\">\n          <div class=\"text-2xl sm:text-3xl\">$</div>\n          <div class=\"text-3xl sm:text-4xl\">{{ planSelectionPrice }}</div>\n          <div class=\"text-lg sm:text-xl ml-1\">/mo</div>\n        </div>\n      </div>\n\n      <div class=\"subscription__card--summary-card-details\">\n        <div class=\"subscription__card--summary-card-details-row1 flex justify-between items-center py-2\" data-test-id=\"plan\">\n          <div class=\"text-sm sm:text-base\">\n            <div class=\"text-gray-600\">Plan Type</div>\n            {{ planSelectionNameUpper }}\n          </div>\n          <div class=\"text-sm sm:text-base\">\n            <div class=\"text-right\">${{ planSelectionAnnualPrice }}\n              <span v-if=\"updatedSubscription.interval === 'monthly'\">/mo</span>\n              <span v-else>/yr</span>\n            </div>\n          </div>\n        </div>\n      </div>\n\n      <div class=\"subscription__card--bullets space-y-3 mt-4\">\n        <template v-for=\"bullet in planSelectionObject.description.bullets\" :key=\"bullet\">\n          <div v-if=\"bullet !== 'And More*'\" class=\"subscription__card--bullet flex items-start\">\n            <div class=\"badge badge-rounded-circle badge-success-soft mt-1 mr-3\">\n              <v-icon color=\"success\" size=\"x-small\">mdi-check</v-icon>\n            </div>\n            <p class=\"text-sm sm:text-base\">\n              {{ bullet }}\n            </p>\n          </div>\n        </template>\n\n        <div class=\"subscription__card--bullet flex items-start\">\n          <div class=\"badge badge-rounded-circle badge-success-soft mt-1 mr-3\">\n            <v-icon color=\"success\" size=\"x-small\">mdi-check</v-icon>\n          </div>\n          <p class=\"text-sm sm:text-base\">\n            <a\n              class=\"text-primary hover:underline\"\n              href=\"https://fleetwire.io/pricing/?utm_source=subscription-checkout&utm_medium=subscription-page&utm_campaign=subscription-review\"\n              rel=\"noopener noreferrer\"\n              target=\"_blank\"\n              @click.stop\n            >\n              And more...\n            </a>\n          </p>\n        </div>\n      </div>\n    </div>\n\n    <div class=\"flex bg-white border rounded p-3 mt-4 text-sm sm:text-base\">\n      <span class=\"flex-grow\">Have a question?</span>\n      <span><a class=\"text-primary hover:underline\" href=\"https://help.fleetwire.io/en/\" target=\"_blank\">Find an answer</a></span>\n    </div>\n\n    <div v-if=\"hasActiveSubscription\" class=\"text-center my-4 sm:my-7\">\n      <v-dialog class=\"mx-2\" max-width=\"600\">\n        <template v-slot:activator=\"{ props: cancelSubscriptionDialogProps }\">\n          <v-btn class=\"text-sm sm:text-base\" size=\"small\" v-bind=\"cancelSubscriptionDialogProps\" variant=\"tonal\">Cancel\n            Subscription\n          </v-btn>\n        </template>\n\n        <template v-slot:default=\"{ isActive }\">\n          <v-card class=\"mx-2\" title=\"Cancel Subscription\">\n            <v-divider opacity=\"50\"/>\n            <v-card-text class=\"px-4 sm:px-6\">\n              <div class=\"font-bold text-base sm:text-lg\">Are you sure you want to cancel your {{ subscriptionPlan }}\n                subscription?\n              </div>\n\n              <div class=\"mt-4 sm:mt-5 text-sm sm:text-base\">By cancelling, you will lose access to:</div>\n              <div class=\"ml-4 sm:ml-10 mt-3 sm:mt-5\">\n                <ul class=\"list-disc text-sm sm:text-base\" v-html=\"subscriptionPlanFeatures\"></ul>\n              </div>\n\n              <div class=\"mt-6 sm:mt-10 font-bold text-base sm:text-lg\">We value your membership and want to make sure\n                you're getting the most out of it.\n              </div>\n\n              <div class=\"mt-3 sm:mt-5 text-sm sm:text-base\">Before you go, here are some options you might consider:\n              </div>\n              <div class=\"ml-4 sm:ml-10 mt-3 sm:mt-5\">\n                <ul class=\"list-disc text-sm sm:text-base\">\n                  <li><span class=\"font-bold\">Speak with Support:</span> Let us know if there's anything we can do to\n                    improve your experience.\n                  </li>\n                  <li><span class=\"font-bold\">Pause Subscription:</span> If you need a break, consider pausing your\n                    subscription instead of cancelling.\n                  </li>\n                  <li><span class=\"font-bold\">Offer Feedback:</span> Share your reasons for cancelling so we can work on\n                    making our service better.\n                  </li>\n                </ul>\n              </div>\n\n              <div class=\"mt-6 sm:mt-10 font-bold text-base sm:text-lg\">Would you like to continue with the\n                cancellation, or would you prefer to explore these options?\n              </div>\n            </v-card-text>\n\n            <v-divider opacity=\"50\"/>\n            <v-card-actions class=\"px-4 sm:px-6 py-3\">\n              <v-btn class=\"text-sm sm:text-base\" size=\"small\" @click=\"isActive.value = false\">nevermind</v-btn>\n              <v-spacer/>\n              <v-btn class=\"text-sm sm:text-base\" size=\"small\" @click=\"isActive.value = false; cancelSubscriptionCommit()\">\n                End Subscription\n              </v-btn>\n            </v-card-actions>\n          </v-card>\n        </template>\n      </v-dialog>\n    </div>\n\n    <div class=\"font-light text-xs sm:text-sm mb-6 sm:mb-10 my-4 sm:my-7\">\n      Annual subscriptions require a one-year non-cancellable commitment.\n      By using Fleetwire you agree to our\n      <a\n        class=\"underline text-primary hover:text-primary-dark\"\n        href=\"https://fleetwire.io/terms/?utm_source=subscription-checkout&utm_medium=subscription-page&utm_campaign=subscription-review\"\n        rel=\"noopener noreferrer\"\n        target=\"_blank\"\n      >\n        Terms of Service\n      </a>.\n    </div>\n  </v-card>\n</template>\n\n<script lang=\"ts\" setup>\nimport {computed} from 'vue';\nimport {useSubscription} from '@/composables/useSubscription';\nimport {useSubscriptionManager} from '@/composables/useSubscriptionManager';\nimport {SubscriptionPlan} from '@/types';\n\n\nconst {\n  subscriptionPlan,\n  subscriptionPlans,\n  hasActiveSubscription,\n  cancelSubscriptionStripePortal,\n} = useSubscription();\n\n\nconst {planSelection, plansOrdered, planPricing, planSelectionName, updatedSubscription} = useSubscriptionManager();\n\n\nconst planSelectionObject = computed(() => plansOrdered.value[planSelection.value]);\nconst planSelectionNameUpper = computed(() => planSelectionName.value.charAt(0).toUpperCase() + planSelectionName.value.slice(1));\nconst planSelectionPrice = computed(() => planPricing[updatedSubscription.value.interval][planSelectionName.value]);\nconst planSelectionAnnualPrice = computed(() => updatedSubscription.value.interval === 'monthly' ? planSelectionPrice.value : planSelectionPrice.value * 12);\nconst subscriptionPlanIndex = computed(() => subscriptionPlans.value.findIndex((p: SubscriptionPlan) => p.name === subscriptionPlan.value));\nconst subscriptionPlanFeatures = computed(() => {\n  return plansOrdered.value[subscriptionPlanIndex.value]?.description?.bullets?.map((bullet: string) => {\n    return `<li>${bullet}</li>`;\n  }).join('');\n});\n\nconst cancelSubscriptionCommit = async () => {\n  await cancelSubscriptionStripePortal().then((responseData) => {\n    console.dir('Subscription cancelled');\n    console.dir(responseData);\n    // router.push({name: 'settings.account'}).catch();\n\n    window.open(responseData.url, '_blank');\n  });\n};\n</script>\n\n","<template>\n  <div>\n\n    <h1 class=\"mb-2 text-2xl font-semibold tracking-tight text-gray-900 dark:text-white\">Change Subscription</h1>\n\n    <div class=\"grid gap-5 mt-10 lg:grid-cols-[60%_auto]\">\n\n      <div>\n        <!-- Plan Selection -->\n        <SubscriptionSteps/>\n\n        <!-- Terms & Discounts -->\n        <SubscriptionTermsAndDiscount/>\n\n        <!-- Review & Confirm -->\n        <SubscriptionReviewAndConfirm/>\n      </div>\n\n      <div>\n        <SubscriptionOverview/>\n      </div>\n    </div>\n\n  </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport {onMounted, watch} from 'vue';\nimport {useSubscription} from '@/composables/useSubscription';\nimport {usePayments} from '@/composables/usePayments';\nimport {useStripe} from '@/composables/useStripe';\nimport {useSubscriptionManager} from '@/composables/useSubscriptionManager';\nimport SubscriptionSteps from '@/views/dashboard/settings/Billing/SubscriptionCheckout/SubscriptionSteps.vue';\nimport SubscriptionTermsAndDiscount\n  from '@/views/dashboard/settings/Billing/SubscriptionCheckout/SubscriptionTermsAndDiscount.vue';\nimport SubscriptionReviewAndConfirm\n  from '@/views/dashboard/settings/Billing/SubscriptionCheckout/SubscriptionReviewAndConfirm.vue';\nimport SubscriptionOverview from '@/views/dashboard/settings/Billing/SubscriptionCheckout/SubscriptionOverview.vue';\n\nconst {\n  subscriptionPlan,\n\n} = useSubscription();\n\nconst {billingSessionUrl} = usePayments()\n\nconst {fetchStripePriceData} = useStripe();\n\nconst {\n\n  updatedSubscription\n} = useSubscriptionManager();\n\nonMounted(() => {\n  fetchStripePriceData()\n})\n\nwatch(subscriptionPlan, (newVal) => {\n  updatedSubscription.value.plan = newVal;\n});\n\nwatch(billingSessionUrl, (newUrl) => {\n  if (newUrl) {\n    window.open(newUrl, '_blank');\n  }\n});\n</script>\n\n<style>\n.subscription__card {\n  display: grid;\n  grid-template-columns: 1fr auto;\n  gap: 12px;\n  justify-content: space-between;\n  align-items: start;\n}\n\n.subscription__card--first {\n  display: grid;\n  grid-template-columns: auto 1fr;\n  gap: 12px;\n}\n\n.subscription__card--second {\n  display: grid;\n  gap: 4px;\n  grid-template-rows: repeat(2, auto);\n  justify-items: end;\n  padding-top: 12px;\n}\n\n.subscription__card--details {\n  display: inline-grid;\n  gap: 6px;\n  font-size: 16px;\n  color: rgb(62, 52, 70);\n}\n\n.subscription__card--title {\n  display: flex;\n  align-items: center;\n  flex-flow: row;\n  gap: 8px;\n  flex-wrap: wrap;\n}\n\n.subscription__card--description {\n  line-height: 1.5;\n  font-size: 14px;\n  color: rgb(128, 112, 143);\n  margin: 0;\n}\n\n.subscription__card--bullets {\n  display: grid;\n  grid-template-rows: auto;\n  gap: 8px;\n  font-size: 14px;\n  color: rgb(128, 112, 143);\n}\n\n.subscription__card--bullet {\n  display: flex;\n  gap: 8px;\n  align-items: center;\n  align-content: center;\n  flex-wrap: wrap;\n}\n\n.subscription__card--price-title {\n  color: rgb(128, 112, 143);\n  font-size: 12px;\n  text-transform: uppercase;\n  font-weight: bold;\n}\n\n.subscription__card--price-price {\n  display: inline-grid;\n  grid-template-columns: repeat(3, auto);\n  color: rgb(62, 52, 70);\n}\n\n.subscription__card--summary-card {\n  background: rgb(255, 255, 255);\n  border-radius: 6px;\n  border: 1px solid rgb(224, 220, 229);\n  margin-bottom: 16px;\n  position: relative;\n  display: grid;\n  grid-template-rows: repeat(2, auto);\n  gap: 30px;\n  padding: 30px 20px 20px;\n}\n\n.subscription__card--summary-card-title {\n  display: grid;\n  grid-template-rows: repeat(2, auto);\n  gap: 12px;\n  font-size: 18px;\n  place-items: center;\n  text-align: center;\n}\n\n.subscription__card--summary-card-pricing {\n  display: inline-grid;\n  grid-template-columns: repeat(3, auto);\n  font-size: 56px;\n}\n\n.subscription__card--summary-card-details {\n  color: rgb(128, 112, 143);\n  font-size: 16px;\n}\n\n.subscription__card--summary-card-details-row1 {\n  display: grid;\n  grid-template-columns: 1fr auto;\n  justify-content: space-between;\n  gap: 4px;\n  align-items: center;\n  padding: 16px 0;\n  border-top: 1px solid rgb(240, 236, 243);\n}\n\n.subscription__card--summary-card-details-row1-title {\n  text-transform: uppercase;\n  font-size: 12px;\n  font-weight: 600;\n  color: rgb(128, 112, 143);\n  margin-bottom: 8px;\n}\n\n.plan-selected {\n  background-color: #e8e8e8;\n}\n\n@media (max-width: 768px) {\n  .subscription__card {\n    grid-template-columns: 1fr;\n  }\n\n  .subscription__card--first {\n    grid-template-columns: 1fr;\n  }\n\n  .subscription__card--second {\n    justify-items: start;\n  }\n\n  .subscription__card--summary-card-pricing {\n    font-size: 36px;\n  }\n}\n</style>\n","<template>\n  <div>\n    <Connections/>\n\n    <v-divider class=\"my-10\" opacity=\"50\"/>\n\n    <Integrations/>\n  </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport {defineAsyncComponent} from 'vue';\n\nconst Integrations = defineAsyncComponent(() => import('@/components/dashboard/settings/providers/Integrations.vue'));\nconst Connections = defineAsyncComponent(() => import('@/components/dashboard/settings/providers/Connections.vue'));\n</script>\n","/*\n * Copyright (c) 2025.  Chad and contributors.\n * All rights reserved.\n */\n\nimport {useStore} from 'vuex';\nimport {computed} from 'vue';\n\nexport function useProviders() {\n    const store = useStore();\n\n    const paymentProviders = computed(() => store.getters['providers/paymentProviders']);\n\n    const getProviders = () => {\n        return store.dispatch('providers/getProviders');\n    }\n\n    const deletePaymentProfile = async (payload: string | { uuid: string }) => {\n        return await store.dispatch('providers/deletePaymentProfile', payload);\n    }\n\n    const getPaymentProfiles = () => {\n        return store.dispatch('providers/getPaymentProfiles');\n    }\n\n    return {\n        paymentProviders,\n        getProviders,\n        deletePaymentProfile,\n        getPaymentProfiles,\n    }\n}","<template>\n  <div>\n    <v-card class=\"mobile-friendly-card\" max-width=\"100%\">\n      <v-img alt=\"Stripe Payment Provider Logo\" max-height=\"75\" src=\"/images/logo/Stripelogo.png\"/>\n      <v-card-text v-if=\"!hasStripe\">\n        <a class=\"stripe-connect slate\" @click=\"StripeOauth\">\n          <span class=\"pr-5\">Connect with</span>\n        </a>\n      </v-card-text>\n\n      <v-card-text v-if=\"hasStripe\">\n        <div class=\"flex flex-column flex-sm-row items-center border rounded p-3\">\n          <div class=\"flex-shrink-0 mb-2 mb-sm-0\">\n            <img :src=\"`https://ui-avatars.com/api/?name=ST`\" alt=\"Avatar\" class=\"w-8 h-8 rounded-full\">\n          </div>\n          <div class=\"flex-1 min-w-0 ms-0 ms-sm-4 text-center text-sm-start\">\n            <p class=\"text-sm font-medium text-gray-900 truncate dark:text-white\">\n              {{ stripeProvider.uid }}\n            </p>\n            <p class=\"text-sm text-gray-500 truncate dark:text-gray-400\">\n              <strong>Connected: </strong>{{ formatRentalDate(stripeCreatedAt) }}\n            </p>\n          </div>\n          <div class=\"mt-2 mt-sm-0\">\n            <v-menu class=\"flex-row2\">\n              <template v-slot:activator=\"{ props }\">\n                <v-btn size=\"small\" v-bind=\"props\" variant=\"text\">\n                  <v-icon>mdi-dots-vertical</v-icon>\n                </v-btn>\n              </template>\n\n              <v-list>\n                <v-list-item @click=\"stripeAccountDialog = true\">\n                  <v-list-item-title>\n                    Account Data\n                  </v-list-item-title>\n                </v-list-item>\n                <v-list-item @click=\"removeStripeConfirm = true\">\n                  <v-list-item-title>\n                    Disconnect\n                  </v-list-item-title>\n                </v-list-item>\n              </v-list>\n            </v-menu>\n          </div>\n        </div>\n      </v-card-text>\n\n      <v-progress-linear\n        :active=\"authLoading.stripe_oauth\"\n        class=\"mb-0\"\n        indeterminate\n      ></v-progress-linear>\n    </v-card>\n\n    <v-dialog v-model=\"removeStripeConfirm\" max-width=\"350\">\n      <v-card>\n        <v-card-title class=\"text-h5\">Delete Stripe Connection</v-card-title>\n        <v-card-text>\n          Are you sure you want to delete your Stripe connection?\n        </v-card-text>\n        <v-card-actions>\n          <v-spacer/>\n          <v-btn color=\"grey\" size=\"small\" variant=\"text\" @click=\"removeStripeConfirm = false\">\n            Nevermind\n          </v-btn>\n          <v-btn color=\"primary\" @click=\"deletePaymentProfileCommit(stripeUuid)\">\n            I'm Sure\n          </v-btn>\n        </v-card-actions>\n      </v-card>\n    </v-dialog>\n\n    <v-dialog v-model=\"stripeAccountDialog\" class=\"mobile-dialog\" max-width=\"350\">\n      <v-card>\n        <v-card-title class=\"text-h6 text-sm-h5\">Stripe Account Data</v-card-title>\n        <v-card-text>\n          <div class=\"border-b\">\n            <div class=\"flex flex-column flex-sm-row py-2\">\n              <div class=\"flex-grow\">Charges Enabled:</div>\n              <div class=\"mt-1 mt-sm-0\">\n                <span v-if=\"stripeAccountChargesEnabled\" class=\"badge-pill text-green-500 bg-green-50\">Yes</span>\n                <span v-else class=\"badge-pill text-red-500 bg-red-50\">No</span>\n              </div>\n            </div>\n            <div class=\"flex flex-column flex-sm-row py-2 border-b\">\n              <div class=\"flex-grow\">Payouts Enabled:</div>\n              <div class=\"mt-1 mt-sm-0\">\n                <span v-if=\"stripeAccountPayoutsEnabled\" class=\"badge-pill text-green-500 bg-green-50\">Yes</span>\n                <span v-else class=\"badge-pill text-red-500 bg-red-50\">No</span>\n              </div>\n            </div>\n          </div>\n          <div class=\"mt-3\">\n            <div class=\"font-extrabold\">Capabilities</div>\n            <div v-for=\"(item, i) in stripeAccountCapabilities\" :key=\"i\" class=\"py-2\">\n              <div class=\"flex flex-column flex-sm-row\">\n                <div class=\"flex-grow\">\n                  {{ i }}:\n                </div>\n                <div class=\"mt-1 mt-sm-0\">\n                  <span v-if=\"item === 'active'\" class=\"badge-pill text-green-500 bg-green-50\">Active</span>\n                  <span v-else-if=\"item === 'inactive'\" class=\"badge-pill text-red-500 bg-red-50\">Inactive</span>\n                  <span v-else-if=\"item === 'pending'\" class=\"badge-pill text-yellow-500 bg-yellow-50\">pending</span>\n                  <span v-else class=\"\">{{ item }}</span>\n                </div>\n              </div>\n            </div>\n          </div>\n        </v-card-text>\n        <v-card-actions>\n          <v-spacer/>\n          <v-btn color=\"primary\" @click=\"stripeAccountDialog = false\">\n            Okay\n          </v-btn>\n        </v-card-actions>\n      </v-card>\n    </v-dialog>\n  </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport {computed, ref, watch} from 'vue';\nimport {useDateFormatter} from '@/composables/useDate';\nimport {useAuth} from '@/composables/useAuth';\nimport {useProviders} from '@/composables/useProviders';\nimport {useStripe} from '@/composables/useStripe';\nimport {Provider} from '@/store/modules/providers';\n\nconst {formatRentalDate} = useDateFormatter();\n\nconst {authLoading, checkStripe, setAuthLoading} = useAuth();\nconst {\n  paymentProviders,\n  deletePaymentProfile,\n  getPaymentProfiles\n} = useProviders();\nconst {\n  stripeAccounts,\n  fetchStripeCapabilities\n} = useStripe();\n\nconst StripeOauthWindow = ref(null);\nconst stripeInterval = ref(null);\nconst removeStripeConfirm = ref(false);\nconst stripeAccountDialog = ref(false);\n\nconst stripeProvider = computed(() => {\n  return paymentProviders.value.find((provider: Provider) => provider.provider === 'stripe');\n});\nconst hasStripe = computed(() => {\n  return stripeProvider.value !== undefined;\n});\nconst stripeEmail = computed(() => {\n  return stripeProvider.value?.email;\n});\nconst stripeUuid = computed(() => {\n  return stripeProvider.value?.uuid;\n});\nconst stripeCreatedAt = computed(() => {\n  return stripeProvider.value?.created_at;\n});\nconst stripeAccountCapabilities = computed(() => {\n  return stripeAccounts.value?.capabilities;\n});\nconst stripeAccountChargesEnabled = computed(() => {\n  return stripeAccounts.value?.charges_enabled;\n});\nconst stripeAccountPayoutsEnabled = computed(() => {\n  return stripeAccounts.value?.payouts_enabled;\n});\n\nconst deletePaymentProfileCommit = (uuid: string) => {\n\n  deletePaymentProfile(uuid).then(() => {\n    removeStripeConfirm.value = false;\n    getPaymentProfiles();\n  });\n}\n\nconst StripeOauth = () => {\n  setAuthLoading({\n    subject: 'stripe_oauth',\n    loading: true,\n  });\n\n  const url = window.location.href;\n\n  let clientId = 'ca_Gf8zoSeAOjUHi6Op0cj8DdNG00QcPIaa';\n  if (url.includes('fleetwire.test') || url.includes('localhost')) {\n    clientId = 'ca_Gf8zkVN3YcOedDmpefmhsmIB21bpAk21';\n  }\n\n  StripeOauthWindow.value = window.open(\n    `https://connect.stripe.com/oauth/authorize?response_type=code&client_id=${clientId}&scope=read_write_and_identity_write`,\n    'Fleetwire.io Stripe Oauth',\n    'scrollbars,status,width=750,height=650',\n  );\n\n  stripeInterval.value = setInterval(() => {\n    if (StripeOauthWindow.value.closed) {\n      clearInterval(stripeInterval.value);\n      setAuthLoading({\n        subject: 'stripe_oauth',\n        loading: false,\n      });\n    }\n    checkStripe().then((results) => {\n      console.dir(results);\n      if (results) {\n        getPaymentProfiles();\n        StripeOauthWindow.value.close();\n        clearInterval(stripeInterval.value);\n      }\n    });\n  }, 2000);\n};\n\nwatch(hasStripe, (val) => {\n  if (val) {\n    fetchStripeCapabilities();\n  }\n}, {immediate: true});\n</script>\n\n<style lang=\"scss\" scoped>\n.stripe-connect a {\n  text-decoration: none;\n}\n\n.stripe-connect {\n  background: #635bff;\n  display: inline-block;\n  height: 38px;\n  text-decoration: none;\n  width: 180px;\n  max-width: 100%;\n  min-width: 160px;\n\n  border-radius: 4px;\n  -moz-border-radius: 4px;\n  -webkit-border-radius: 4px;\n\n  user-select: none;\n  -moz-user-select: none;\n  -webkit-user-select: none;\n  -ms-user-select: none;\n\n  -webkit-font-smoothing: antialiased;\n}\n\n.stripe-connect span {\n  color: #ffffff;\n  display: block;\n  font-family: sohne-var, \"Helvetica Neue\", Arial, sans-serif;\n  font-size: 15px;\n  font-weight: 400;\n  line-height: 14px;\n  padding: 11px 0 0 24px;\n  position: relative;\n  text-align: left;\n}\n\n.stripe-connect:hover {\n  background: #7a73ff;\n}\n\n.stripe-connect.slate {\n  background: #0a2540;\n}\n\n.stripe-connect.slate:hover {\n  background: #425466;\n}\n\n.stripe-connect.white {\n  background: #ffffff;\n}\n\n.stripe-connect.white span {\n  color: #0a2540;\n}\n\n.stripe-connect.white:hover {\n  background: #f6f9fc;\n}\n\n.stripe-connect span::after {\n  background-repeat: no-repeat;\n  background-size: 49.58px;\n  content: \"\";\n  height: 20px;\n  left: 65%;\n  position: absolute;\n  top: 29%;\n  width: 50px;\n}\n\n/* Logos */\n.stripe-connect span::after {\n  background-image: url(\"data:image/svg+xml,%3C%3Fxml version='1.0' encoding='utf-8'%3F%3E%3C!-- Generator: Adobe Illustrator 23.0.4, SVG Export Plug-In . SVG Version: 6.00 Build 0) --%3E%3Csvg version='1.1' id='Layer_1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' viewBox='0 0 468 222.5' style='enable-background:new 0 0 468 222.5;' xml:space='preserve'%3E%3Cstyle type='text/css'%3E .st0%7Bfill-rule:evenodd;clip-rule:evenodd;fill:%23FFFFFF;%7D%0A%3C/style%3E%3Cg%3E%3Cpath class='st0' d='M414,113.4c0-25.6-12.4-45.8-36.1-45.8c-23.8,0-38.2,20.2-38.2,45.6c0,30.1,17,45.3,41.4,45.3 c11.9,0,20.9-2.7,27.7-6.5v-20c-6.8,3.4-14.6,5.5-24.5,5.5c-9.7,0-18.3-3.4-19.4-15.2h48.9C413.8,121,414,115.8,414,113.4z M364.6,103.9c0-11.3,6.9-16,13.2-16c6.1,0,12.6,4.7,12.6,16H364.6z'/%3E%3Cpath class='st0' d='M301.1,67.6c-9.8,0-16.1,4.6-19.6,7.8l-1.3-6.2h-22v116.6l25-5.3l0.1-28.3c3.6,2.6,8.9,6.3,17.7,6.3 c17.9,0,34.2-14.4,34.2-46.1C335.1,83.4,318.6,67.6,301.1,67.6z M295.1,136.5c-5.9,0-9.4-2.1-11.8-4.7l-0.1-37.1 c2.6-2.9,6.2-4.9,11.9-4.9c9.1,0,15.4,10.2,15.4,23.3C310.5,126.5,304.3,136.5,295.1,136.5z'/%3E%3Cpolygon class='st0' points='223.8,61.7 248.9,56.3 248.9,36 223.8,41.3 '/%3E%3Crect x='223.8' y='69.3' class='st0' width='25.1' height='87.5'/%3E%3Cpath class='st0' d='M196.9,76.7l-1.6-7.4h-21.6v87.5h25V97.5c5.9-7.7,15.9-6.3,19-5.2v-23C214.5,68.1,202.8,65.9,196.9,76.7z'/%3E%3Cpath class='st0' d='M146.9,47.6l-24.4,5.2l-0.1,80.1c0,14.8,11.1,25.7,25.9,25.7c8.2,0,14.2-1.5,17.5-3.3V135 c-3.2,1.3-19,5.9-19-8.9V90.6h19V69.3h-19L146.9,47.6z'/%3E%3Cpath class='st0' d='M79.3,94.7c0-3.9,3.2-5.4,8.5-5.4c7.6,0,17.2,2.3,24.8,6.4V72.2c-8.3-3.3-16.5-4.6-24.8-4.6 C67.5,67.6,54,78.2,54,95.9c0,27.6,38,23.2,38,35.1c0,4.6-4,6.1-9.6,6.1c-8.3,0-18.9-3.4-27.3-8v23.8c9.3,4,18.7,5.7,27.3,5.7 c20.8,0,35.1-10.3,35.1-28.2C117.4,100.6,79.3,105.9,79.3,94.7z'/%3E%3C/g%3E%3C/svg%3E\");\n}\n\n.stripe-connect.white span::after {\n  background-image: url(\"data:image/svg+xml,%3C%3Fxml version='1.0' encoding='utf-8'%3F%3E%3C!-- Generator: Adobe Illustrator 24.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) --%3E%3Csvg version='1.1' id='Layer_1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' viewBox='0 0 468 222.5' style='enable-background:new 0 0 468 222.5;' xml:space='preserve'%3E%3Cstyle type='text/css'%3E .st0%7Bfill-rule:evenodd;clip-rule:evenodd;fill:%230A2540;%7D%0A%3C/style%3E%3Cg%3E%3Cpath class='st0' d='M414,113.4c0-25.6-12.4-45.8-36.1-45.8c-23.8,0-38.2,20.2-38.2,45.6c0,30.1,17,45.3,41.4,45.3 c11.9,0,20.9-2.7,27.7-6.5v-20c-6.8,3.4-14.6,5.5-24.5,5.5c-9.7,0-18.3-3.4-19.4-15.2h48.9C413.8,121,414,115.8,414,113.4z M364.6,103.9c0-11.3,6.9-16,13.2-16c6.1,0,12.6,4.7,12.6,16H364.6z'/%3E%3Cpath class='st0' d='M301.1,67.6c-9.8,0-16.1,4.6-19.6,7.8l-1.3-6.2h-22v116.6l25-5.3l0.1-28.3c3.6,2.6,8.9,6.3,17.7,6.3 c17.9,0,34.2-14.4,34.2-46.1C335.1,83.4,318.6,67.6,301.1,67.6z M295.1,136.5c-5.9,0-9.4-2.1-11.8-4.7l-0.1-37.1 c2.6-2.9,6.2-4.9,11.9-4.9c9.1,0,15.4,10.2,15.4,23.3C310.5,126.5,304.3,136.5,295.1,136.5z'/%3E%3Cpolygon class='st0' points='223.8,61.7 248.9,56.3 248.9,36 223.8,41.3 '/%3E%3Crect x='223.8' y='69.3' class='st0' width='25.1' height='87.5'/%3E%3Cpath class='st0' d='M196.9,76.7l-1.6-7.4h-21.6v87.5h25V97.5c5.9-7.7,15.9-6.3,19-5.2v-23C214.5,68.1,202.8,65.9,196.9,76.7z'/%3E%3Cpath class='st0' d='M146.9,47.6l-24.4,5.2l-0.1,80.1c0,14.8,11.1,25.7,25.9,25.7c8.2,0,14.2-1.5,17.5-3.3V135 c-3.2,1.3-19,5.9-19-8.9V90.6h19V69.3h-19L146.9,47.6z'/%3E%3Cpath class='st0' d='M79.3,94.7c0-3.9,3.2-5.4,8.5-5.4c7.6,0,17.2,2.3,24.8,6.4V72.2c-8.3-3.3-16.5-4.6-24.8-4.6 C67.5,67.6,54,78.2,54,95.9c0,27.6,38,23.2,38,35.1c0,4.6-4,6.1-9.6,6.1c-8.3,0-18.9-3.4-27.3-8v23.8c9.3,4,18.7,5.7,27.3,5.7 c20.8,0,35.1-10.3,35.1-28.2C117.4,100.6,79.3,105.9,79.3,94.7z'/%3E%3C/g%3E%3C/svg%3E\");\n}\n\n.mobile-friendly-card {\n  @media (max-width: 600px) {\n    border-radius: 0;\n  }\n}\n\n.mobile-dialog {\n  @media (max-width: 600px) {\n    margin: 0;\n    height: 100%;\n    max-height: 100%;\n  }\n}\n</style>\n","<template>\n  <div>\n    <v-card :disabled=\"true\" class=\"mt-5\">\n      <div class=\"my-3\">\n        <v-img alt=\"Braintree Payment Provider Logo\" max-height=\"25\" src=\"https://s3-us-west-1.amazonaws.com/bt-partner-assets/paypal-braintree.png\"/>\n      </div>\n      <v-card-text>\n        <div v-if=\"!hasBraintree\">\n          <img alt=\"Connect with Braintree\" class=\"cursor-pointer\" height=\"44\" src=\"https://s3-us-west-1.amazonaws.com/bt-partner-assets/connect-braintree.png\" width=\"328\" @click=\"braintreeOauthInit\">\n        </div>\n        <div v-else class=\"media align-items-center border rounded p-3\">\n          <img :src=\"`https://ui-avatars.com/api/?name=PP`\" alt=\"Image Description\" class=\"h-10 w-10 rounded-full object-cover mx-1 mr-3\">\n          <div class=\"media-body\">\n            <h6 class=\"text-hover-primary mb-0\">{{ braintreeEmail }}</h6>\n            <small class=\"d-block\">\n              <strong>Connected: </strong>{{ formatRentalDate(braintreeCreatedAt) }}</small>\n          </div>\n\n          <v-menu class=\"flex-row\" offset=\"left\">\n            <template v-slot:activator=\"{ props }\">\n              <v-btn v-bind=\"props\" variant=\"text\">\n                <v-icon>mdi-dots-vertical</v-icon>\n              </v-btn>\n            </template>\n\n            <v-list>\n              <v-list-item @click=\"$router.push({ name: 'settings.payment-provider.single', params: { uuid: braintreeUuid }}).catch(() => {})\">\n                <v-list-item-title>\n                  View\n                </v-list-item-title>\n              </v-list-item>\n              <v-list-item @click=\"removeBraintreeConfirmDialog = true\">\n                <v-list-item-title>\n                  Disconnect\n                </v-list-item-title>\n              </v-list-item>\n            </v-list>\n          </v-menu>\n        </div>\n      </v-card-text>\n      <v-card-actions>\n        <div class=\"small text-gray-600\">\n          Braintree provider is currently on closed beta. Contact us if you are interested.\n        </div>\n      </v-card-actions>\n    </v-card>\n\n    <v-dialog v-model=\"removeBraintreeConfirmDialog\" max-width=\"350\">\n      <v-card>\n        <v-card-title class=\"text-h5\">Delete PayPal Connection</v-card-title>\n        <v-card-text>\n          Are you sure you want to delete your PayPal/Braintree connection?\n        </v-card-text>\n        <v-card-actions>\n          <v-spacer/>\n          <v-btn color=\"grey\" size=\"small\" variant=\"text\" @click=\"removeBraintreeConfirmDialog = false\">\n            Nevermind\n          </v-btn>\n          <v-btn color=\"primary\" @click=\"deletePaymentProfile(braintreeProvider.id)\">\n            I'm Sure\n          </v-btn>\n        </v-card-actions>\n      </v-card>\n    </v-dialog>\n  </div>\n</template>\n\n<script lang=\"ts\">\nimport {mapActions, mapGetters} from 'vuex';\nimport {get} from 'lodash';\nimport {EventBus} from '@/plugins/eventBus';\nimport {useDateFormatter} from \"@/composables/useDate\";\n\n\nexport default {\n  name: 'BraintreeProviderCard',\n\n  setup() {\n    const {formatRentalDate} = useDateFormatter();\n    return {\n      formatRentalDate,\n    };\n  },\n\n  data() {\n    return {\n      braintreeOauthWindow: null,\n      braintreeCheckInterval: null,\n      removeBraintreeConfirmDialog: false,\n    };\n  },\n\n  created() {\n    EventBus.$on('braintree-oauth-url-create-success', (data) => {\n      this.openOauthUrl(data.url);\n    });\n    EventBus.$on('delete-payment-profile-success', () => {\n      this.removeBraintreeConfirmDialog = false;\n      this.getPaymentProfiles();\n    });\n  },\n\n  mounted() {\n    EventBus.$on('braintree-oauth-success', (data) => {\n      if (get(data, 'braintree')) {\n        this.braintreeOauthWindow.close();\n        clearInterval(this.braintreeCheckInterval);\n      }\n    });\n  },\n\n  computed: {\n    ...mapGetters({\n      paymentProviders: 'providers/paymentProviders',\n    }),\n    braintreeProvider() {\n      return this.paymentProviders.find(provider => provider.provider === 'braintree');\n    },\n    hasBraintree() {\n      return this.braintreeProvider !== undefined;\n    },\n    braintreeEmail() {\n      return get(this.braintreeProvider, 'email');\n    },\n    braintreeUuid() {\n      return get(this.braintreeProvider, 'uuid');\n    },\n    braintreeCreatedAt() {\n      return get(this.braintreeProvider, 'created_at');\n    },\n  },\n\n  methods: {\n    ...mapActions({\n      getBraintreeOauthUrl: 'braintree/getBraintreeOauthUrl',\n      getBraintreeProvider: 'braintree/getBraintreeProvider',\n      deletePaymentProfile: 'providers/deletePaymentProfile',\n      getPaymentProfiles: 'providers/getPaymentProfiles',\n    }),\n    braintreeOauthInit() {\n      this.getBraintreeOauthUrl();\n    },\n    openOauthUrl(url) {\n      const vm = this;\n\n      this.braintreeOauthWindow = window.open(\n        url,\n        'Fleetwire.io Braintree Oauth',\n        'scrollbars,status,width=750,height=700',\n      );\n\n      this.braintreeCheckInterval = setInterval(() => {\n        if (this.braintreeOauthWindow.closed) {\n          clearInterval(vm.braintreeCheckInterval);\n          this.authLoading.stripe_oauth = false;\n        }\n        vm.getBraintreeProvider();\n      }, 1000);\n    },\n  },\n\n  beforeUnmount() {\n    EventBus.$off('braintree-oauth-url-create-success');\n    EventBus.$off('braintree-oauth-success');\n    EventBus.$off('delete-payment-profile-success');\n  },\n};\n</script>\n","/*\n * Copyright (c) 2025.  Chad and contributors.\n * All rights reserved.\n */\n\nimport {useStore} from 'vuex';\nimport {computed} from 'vue';\n\nexport function useSquare() {\n    const store = useStore();\n\n    const squareLoading = computed(() => store.getters['square/loading']);\n\n    const setSquareLoading = (payload) => {\n        return store.commit('square/SET_SQUARE_LOADING', payload);\n    }\n\n    const saveSquareCode = (payload) => {\n        return store.dispatch('square/saveSquareCode', payload);\n    }\n\n    const getSquareOauthUrl = async () => {\n        return await store.dispatch('square/getSquareOauthUrl');\n    }\n    const getSquareProvider = async () => {\n        return await store.dispatch('square/getSquareProvider');\n    }\n    return {\n        squareLoading,\n        saveSquareCode,\n        getSquareOauthUrl,\n        getSquareProvider,\n        setSquareLoading,\n    }\n}","<template>\n  <div>\n    <v-card :disabled=\"!canUseSquareIntegration\" class=\"mt-5\">\n      <div class=\"my-3\">\n        <v-img alt=\"Braintree Payment Provider Logo\" max-height=\"50\" src=\"/images/logo/Square_LogoLockup_Black.png\"/>\n      </div>\n      <v-card-text>\n        <div v-if=\"!hasSquare\">\n          <a class=\"square-connect slate\" @click=\"squareOauthInit\">\n            <span>Connect with</span>\n          </a>\n        </div>\n        <div v-else class=\"flex items-center border rounded p-3\">\n          <div class=\"flex-shrink-0\">\n            <img :src=\"`https://ui-avatars.com/api/?name=SQ`\" alt=\"Image Description\" class=\"h-10 w-10 rounded-full object-cover mx-1 mr-3\">\n          </div>\n          <div class=\"flex-1 min-w-0 ms-4\">\n            <h6 class=\"text-hover-primary mb-0\">{{ squareEmail }}</h6>\n            <small class=\"d-block\">\n              <strong>Connected: </strong>{{ formatRentalDate(squareCreatedAt) }}</small>\n          </div>\n\n          <div class=\"inline-flex items-center text-base font-semibold text-gray-900 dark:text-white\">\n            <v-menu>\n              <template v-slot:activator=\"{ props }\">\n                <v-btn v-bind=\"props\" variant=\"text\">\n                  <v-icon>mdi-dots-vertical</v-icon>\n                </v-btn>\n              </template>\n\n              <v-list>\n                <!--              <v-list-item @click=\"$router.push({ name: 'settings.payment-provider.single', params: { uuid: squareUuid }}).catch(() => {})\">-->\n                <!--                <v-list-item-title>-->\n                <!--                  View-->\n                <!--                </v-list-item-title>-->\n                <!--              </v-list-item>-->\n                <v-list-item @click=\"removeSquareConfirmDialog = true\">\n                  <v-list-item-title>\n                    Disconnect\n                  </v-list-item-title>\n                </v-list-item>\n              </v-list>\n            </v-menu>\n          </div>\n        </div>\n      </v-card-text>\n    </v-card>\n\n    <v-dialog v-model=\"removeSquareConfirmDialog\" max-width=\"350\">\n      <v-card>\n        <v-card-title class=\"text-h5\">Delete Square Connection</v-card-title>\n        <v-card-text>\n          Are you sure you want to delete your Square connection?\n        </v-card-text>\n        <v-card-actions>\n          <v-spacer/>\n          <v-btn color=\"grey\" size=\"small\" variant=\"text\" @click=\"removeSquareConfirmDialog = false\">\n            Nevermind\n          </v-btn>\n          <v-btn color=\"primary\" @click=\"deletePaymentProfileCommit(squareUuid)\">\n            I'm Sure\n          </v-btn>\n        </v-card-actions>\n      </v-card>\n    </v-dialog>\n  </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport {computed, ref} from 'vue';\nimport {EventBus} from '@/plugins/eventBus';\nimport {useDateFormatter} from '@/composables/useDate';\nimport {useAppFeatures} from '@/composables/useAppFeatures';\nimport {Provider} from '@/store/modules/providers';\nimport {useProviders} from '@/composables/useProviders';\nimport {useSquare} from '@/composables/useSquare';\n\n\nconst {paymentProviders, deletePaymentProfile, getPaymentProfiles} = useProviders();\nconst {formatRentalDate} = useDateFormatter();\nconst {canUseSquareIntegration} = useAppFeatures();\nconst {\n  getSquareOauthUrl,\n  getSquareProvider,\n  setSquareLoading,\n} = useSquare();\n\nconst squareOauthWindow = ref(null);\nconst squareCheckInterval = ref(null);\nconst removeSquareConfirmDialog = ref(false);\n\n\nconst squareProvider = computed(() => {\n  return paymentProviders.value.find((provider: Provider) => provider.provider === 'square');\n});\nconst hasSquare = computed(() => {\n  return squareProvider.value !== undefined;\n});\n\nEventBus.$on('square-oauth-url-create-success', (data) => {\n  openOauthUrl(data.url);\n});\nEventBus.$on('delete-payment-profile-success', () => {\n  removeSquareConfirmDialog.value = false;\n  getPaymentProfiles();\n});\n\nconst squareEmail = computed(() => {\n  return squareProvider.value?.email;\n});\n\nconst squareUuid = computed(() => {\n  return squareProvider.value?.uuid;\n});\nconst squareCreatedAt = computed(() => {\n  return squareProvider.value?.created_at;\n});\n\nconst squareOauthInit = () => {\n  getSquareOauthUrl().then((response) => {\n    if (response.data.url) {\n      openOauthUrl(response.data.url);\n    }\n  });\n};\nconst openOauthUrl = (url) => {\n\n  squareOauthWindow.value = window.open(\n    url,\n    'Fleetwire.io Square Oauth',\n    'scrollbars,status,width=750,height=700',\n  );\n\n  squareCheckInterval.value = setInterval(() => {\n    if (squareOauthWindow.value.closed) {\n      clearInterval(squareCheckInterval.value);\n      setSquareLoading({\n        subject: 'square_oauth',\n        loading: false,\n      })\n\n    }\n    getSquareProvider().then((response) => {\n      if (response.data.square) {\n        squareOauthWindow.value.close();\n        clearInterval(squareCheckInterval.value);\n        getPaymentProfiles();\n      }\n    });\n  }, 1000);\n};\n\nconst deletePaymentProfileCommit = (uuid: string) => {\n  deletePaymentProfile(uuid).then(() => {\n    removeSquareConfirmDialog.value = false;\n    getPaymentProfiles();\n  });\n};\n</script>\n\n<style scoped>\n.square-connect a {\n  text-decoration: none;\n}\n\n.square-connect {\n  background: #635bff;\n  display: inline-block;\n  height: 38px;\n  text-decoration: none;\n  width: 180px;\n\n  border-radius: 4px;\n  -moz-border-radius: 4px;\n  -webkit-border-radius: 4px;\n\n  user-select: none;\n  -moz-user-select: none;\n  -webkit-user-select: none;\n  -ms-user-select: none;\n\n  -webkit-font-smoothing: antialiased;\n}\n\n.square-connect span {\n  color: #ffffff;\n  display: block;\n  font-family: sohne-var, \"Helvetica Neue\", Arial, sans-serif;\n  font-size: 15px;\n  font-weight: 400;\n  line-height: 14px;\n  padding: 11px 0 0 24px;\n  position: relative;\n  text-align: left;\n}\n\n.square-connect:hover {\n  background: #7a73ff;\n}\n\n.square-connect.slate {\n  background: #000000;\n}\n\n.square-connect.slate:hover {\n  background: #425466;\n}\n\n.square-connect.white {\n  background: #ffffff;\n}\n\n.square-connect.white span {\n  color: #0a2540;\n}\n\n.square-connect.white:hover {\n  background: #f6f9fc;\n}\n\n.square-connect span::after {\n  background-repeat: no-repeat;\n  background-size: 70px;\n  content: \"\";\n  height: 30px;\n  left: 63%;\n  position: absolute;\n  top: 20%;\n  width: 75px;\n}\n\n/* Logos */\n.square-connect span::after {\n  background-image: url(https://tenant.fleetwire.io/images/logo/Square_LogoLockup_White.png);\n}\n\n\n</style>\n","<template>\n  <div class=\"space-y-6\">\n    <div class=\"md:grid md:grid-cols-3 md:gap-6\">\n      <div class=\"md:col-span-1\">\n        <div class=\"px-4 sm:px-0\">\n          <div class=\"flex items-center gap-2\">\n            <h3 class=\"text-lg font-medium text-gray-900 dark:text-gray-100\">\n              Stripe\n            </h3>\n            <span class=\"recommended\">Recommended</span>\n          </div>\n          <div class=\"mt-1 text-sm text-gray-600 dark:text-gray-400\">\n            Accept payments through Stripe in your online store and via payment requests. Stripe enables you to process\n            credit cards, debit cards, and other popular payment methods.<br><br>\n\n            You can also securely charge cards or place authorization holds directly within Fleetwire.<br>\n            <the-help-link url=\"https://help.fleetwire.io/en/article/integrating-with-stripe-747u5f/?bust=1678309814404\"/>\n          </div>\n        </div>\n      </div>\n      <div class=\"mt-4 md:mt-0 md:col-span-2\">\n        <StripeProviderCard/>\n      </div>\n    </div>\n\n    <v-divider class=\"my-6\"/>\n\n    <div class=\"md:grid md:grid-cols-3 md:gap-6\">\n      <div class=\"md:col-span-1\">\n        <div class=\"px-4 sm:px-0\">\n          <div class=\"flex items-center gap-2\">\n            <h3 class=\"text-lg font-medium text-gray-900 dark:text-gray-100\">\n              Square\n            </h3>\n            <span class=\"under-development__red\">Beta</span>\n          </div>\n          <div class=\"mt-1 text-sm text-gray-600 dark:text-gray-400\">\n            Accept payments through Square in your online store and via payment requests. Square enables you to process\n            credit cards, debit cards, and other popular payment methods.\n            <the-help-link\n              url=\"https://help.fleetwire.io/en/article/integrating-with-square-1hg2hi2/?bust=1689725719338\"\n            />\n            <v-alert\n              v-if=\"!canUseSquareIntegration\"\n              class=\"mt-5\"\n              color=\"info\"\n              density=\"compact\"\n              icon=\"mdi-fire\"\n              variant=\"outlined\"\n            >\n              <div class=\"flex flex-col sm:flex-row gap-2\">\n                <div class=\"grow\">\n                  Coming soon\n                </div>\n                <div class=\"shrink\">\n                  <v-btn v-if=\"!hasWaitlistRequest('SquarePaymentProvider')\" size=\"small\" @click=\"addFeatureWaitlist({feature: 'SquarePaymentProvider'})\">\n                    Notify Me\n                  </v-btn>\n                  <v-btn v-else :disabled=\"true\" size=\"small\">Will notify</v-btn>\n                </div>\n              </div>\n            </v-alert>\n          </div>\n        </div>\n      </div>\n      <div class=\"mt-4 md:mt-0 md:col-span-2\">\n        <SquareProviderCard/>\n      </div>\n    </div>\n\n    <v-divider class=\"my-6\"/>\n\n    <div class=\"md:grid md:grid-cols-3 md:gap-6\">\n      <div class=\"md:col-span-1\">\n        <div class=\"px-4 sm:px-0\">\n          <div class=\"flex items-center gap-2\">\n            <h3 class=\"text-lg font-medium text-gray-900 dark:text-gray-100\">\n              PayPal\n            </h3>\n            <span class=\"under-development__yellow\">Under Development</span>\n          </div>\n          <div class=\"mt-1 text-sm text-gray-600 dark:text-gray-400\">\n            Accept payments through PayPal or any major credit/debit card for online purchases and payment requests.\n            <the-help-link url=\"https://help.fleetwire.io/en/article/integrating-with-paypal-14wog9m/?bust=1678311944038\"/>\n\n            <v-alert\n              v-if=\"!canUseBraintreeIntegration\"\n              class=\"mt-5\"\n              color=\"info\"\n              density=\"compact\"\n              icon=\"mdi-fire\"\n              variant=\"outlined\"\n            >\n              <div class=\"flex flex-col sm:flex-row gap-2\">\n                <div class=\"grow\">\n                  Coming soon\n                </div>\n                <div class=\"shrink\">\n                  <v-btn v-if=\"!hasWaitlistRequest('BraintreePaymentProvider')\" size=\"small\" variant=\"tonal\" @click=\"addFeatureWaitlist({feature: 'BraintreePaymentProvider'})\">\n                    Notify Me\n                  </v-btn>\n                  <v-btn v-else :disabled=\"true\" size=\"small\">Will notify</v-btn>\n                </div>\n              </div>\n            </v-alert>\n          </div>\n        </div>\n      </div>\n      <div class=\"mt-4 md:mt-0 md:col-span-2\">\n        <BraintreeProviderCard/>\n      </div>\n    </div>\n  </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport StripeProviderCard from '@/components/dashboard/settings/providers/StripeProviderCard.vue';\nimport BraintreeProviderCard from '@/components/dashboard/settings/providers/BraintreeProviderCard.vue';\nimport SquareProviderCard from '@/components/dashboard/settings/providers/SquareProviderCard.vue';\nimport {useAppFeatures} from '@/composables/useAppFeatures';\nimport {onBeforeMount} from 'vue';\n\nconst {\n  hasWaitlistRequest,\n  addFeatureWaitlist,\n  getFeatureWaitlist,\n  canUseBraintreeIntegration,\n  canUseSquareIntegration,\n} = useAppFeatures();\n\nonBeforeMount(() => {\n  getFeatureWaitlist();\n});\n</script>\n\n<style>\n.recommended {\n  color: #6c36f4 !important;\n  font-weight: 600;\n  font-size: 12px;\n  padding: 2px 8px;\n  border: 1px solid #6c36f4;\n  border-radius: 3px;\n  background-color: #ebe7f5;\n  height: 22px;\n  white-space: nowrap;\n}\n\n.under-development__yellow {\n  color: #f7b500 !important;\n  font-weight: 600;\n  font-size: 12px;\n  padding: 2px 8px;\n  border: 1px solid #f7b500;\n  border-radius: 3px;\n  background-color: #fff8e1;\n  height: 22px;\n  white-space: nowrap;\n}\n\n.under-development__red {\n  color: #f44336 !important;\n  font-weight: 600;\n  font-size: 12px;\n  padding: 2px 8px;\n  border: 1px solid #f44336;\n  border-radius: 3px;\n  background-color: #ffebee;\n  height: 22px;\n  white-space: nowrap;\n}\n</style>\n","<template>\n  <div>\n    Provider: {{ profileProvider }} <br>\n    UID: {{ profileUid }} <br>\n    Created: {{ formatRentalDate(profileCreated) }} <br>\n    Active: {{ profileActive }} <br>\n\n    <v-card variant=\"outlined\">\n      <v-card-text>\n        <v-btn @click=\"testConnection()\">Test Connection</v-btn>\n      </v-card-text>\n\n      <div id=\"dropin-container\"></div>\n    </v-card>\n  </div>\n</template>\n\n<script lang=\"ts\">\nimport {mapActions} from 'vuex';\nimport {get} from 'lodash';\nimport {EventBus} from '@/plugins/eventBus';\nimport {useDateFormatter} from \"@/composables/useDate\";\n\n\nexport default {\n  name: 'SinglePaymentProvider',\n\n  setup() {\n    const {formatRentalDate} = useDateFormatter();\n    return {\n      formatRentalDate,\n    };\n  },\n\n  data() {\n    return {\n      paymentProfile: null,\n    };\n  },\n\n  mounted() {\n    this.getPaymentProfile(this.$route.params.uuid);\n\n    EventBus.$on('get-payment-profile-success', (profile) => {\n      this.paymentProfile = profile;\n    });\n    this.addJs();\n    // check for braintree js id every second\n    // if it exists, then we can load the braintree dropin\n    this.checkJs();\n  },\n\n  computed: {\n    profileProvider() {\n      return get(this.paymentProfile, 'provider');\n    },\n    profileUid() {\n      return get(this.paymentProfile, 'uid');\n    },\n    profileCreated() {\n      return get(this.paymentProfile, 'created_at');\n    },\n    profileActive() {\n      return get(this.paymentProfile, 'active');\n    },\n  },\n\n  methods: {\n    ...mapActions({\n      getPaymentProfile: 'providers/getPaymentProfile',\n      braintreeTestPayment: 'braintree/testPayment',\n      squareTestPayment: 'square/testPayment',\n    }),\n    checkJs() {\n      this.braintreeCheckInterval = setInterval(() => {\n        console.dir('checking');\n        if (document.getElementById('FWBraintreeJS')) {\n          clearInterval(this.braintreeCheckInterval);\n\n          braintree.dropin.create({\n            authorization: 'sandbox_bnrhnp5x_yytkcsfc4sdbbspv',\n            container: '#dropin-container',\n          }).then((instance) => {\n            console.dir('instance');\n            console.dir(instance);\n          });\n        }\n      }, 1000);\n    },\n    addJs() {\n      if (!document.getElementById('FWStripeJS')) {\n        const stripeScript = document.createElement('script');\n        stripeScript.setAttribute('src', 'https://js.braintreegateway.com/web/dropin/1.34.0/js/dropin.min.js');\n        stripeScript.async = true;\n        stripeScript.id = 'FWBraintreeJS';\n        document.head.appendChild(stripeScript);\n      }\n    },\n    testConnection() {\n      console.dir('squareTestPayment');\n      this.squareTestPayment();\n    },\n  },\n\n  beforeUnmount() {\n    EventBus.$off('get-payment-profile-success');\n  },\n};\n</script>\n","<template>\n  <div>\n    <v-alert\n      class=\"mb-5\"\n      color=\"info\"\n      density=\"compact\"\n      icon=\"mdi-fire\"\n      variant=\"outlined\"\n    >\n      <div class=\"flex\">\n        <div class=\"grow col\">\n          Coming soon - This is an experimental feature and is in active development & in beta.\n        </div>\n        <div class=\"shrink col\">\n          <v-btn v-if=\"!hasWaitlistRequest('CommissionedPartners')\" size=\"small\" @click=\"addFeatureWaitlist({feature: 'CommissionedPartners'})\">\n            Notify Me\n          </v-btn>\n          <v-btn v-else disabled size=\"small\">Will notify</v-btn>\n        </div>\n      </div>\n    </v-alert>\n\n    <v-card class=\"mb-5\">\n      <div class=\"beta-ribbon ribbon-top-left\">\n        <span>Beta</span>\n      </div>\n      <v-card-text>\n        <v-switch\n          v-model=\"showOnMainMenu\"\n          density=\"compact\"\n          hint=\"Show the commission icon/link on the main menu\"\n          inset\n          label=\"Show on main menu\"\n          persistent-hint\n          @update:model-value=\"toggleShowCommissionPartnersOnMainMenu(showOnMainMenu)\"\n        ></v-switch>\n      </v-card-text>\n    </v-card>\n    <v-card>\n      <div class=\"beta-ribbon ribbon-top-left\">\n        <span>Beta</span>\n      </div>\n      <v-card-title>\n        <div class=\"flex\">\n          <FeatureTitle\n            featurePremium\n            title=\"Commission Partners\"\n          />\n          <v-btn class=\"ml-2\" variant=\"text\" @click=\"openDialog()\">\n            <v-icon size=\"small\">mdi-help-circle</v-icon>\n          </v-btn>\n          <v-spacer/>\n          <v-btn variant=\"text\" @click=\"viewCommissionPartnerDialog = true;\">\n            <v-icon>mdi-plus</v-icon>\n            Add Partner\n          </v-btn>\n        </div>\n      </v-card-title>\n      <v-card-text>\n        <div class=\"mt-5\">\n          <v-data-table\n            v-if=\"commissionPartners.length > 0\"\n            :headers=\"headers\"\n            :items=\"commissionPartners\"\n            :items-per-page=\"10\"\n          >\n            <template v-slot:item.name=\"{ item }\">\n              <router-link :to=\"{ name: 'commission.partner.single', params: { partner_uuid: item.uuid } }\" class=\"text-dark ml-1\">\n                {{ item.name }}\n              </router-link>\n            </template>\n            <template v-slot:item.commission_type=\"{ item }\">\n              <span v-if=\"item.commission_type === 'percentage'\">Percentage</span>\n              <span v-if=\"item.commission_type === 'amount'\">Amount</span>\n            </template>\n            <template v-slot:item.commission_amount=\"{ item }\">\n              <span v-if=\"item.commission_type === 'percentage'\">{{ item.commission_amount }} %</span>\n              <span v-if=\"item.commission_type === 'amount'\">{{ formatMoneyDisplayV2(item.commission_amount) }}</span>\n            </template>\n            <template v-slot:item.actions=\"{ item }\">\n              <v-icon\n                class=\"mr-2\"\n                size=\"small\"\n                @click=\"editItem(item)\"\n              >\n                mdi-pencil\n              </v-icon>\n              <v-icon size=\"small\" @click=\"deleteItem(item)\">\n                mdi-delete\n              </v-icon>\n            </template>\n          </v-data-table>\n          <div v-else>No commission partners</div>\n        </div>\n      </v-card-text>\n    </v-card>\n\n    <v-dialog v-model=\"viewCommissionPartnerDialog\" width=\"400\">\n      <v-card :disabled=\"partnersLoading.create\">\n        <v-card-title>New commission partner</v-card-title>\n        <v-divider opacity=\"50\"/>\n        <v-card-text>\n          <v-form>\n            <v-text-field\n              v-model=\"commissionPartner.name\"\n              label=\"Name\"\n              name=\"name\"\n              variant=\"outlined\"\n            ></v-text-field>\n            <v-text-field\n              v-model=\"commissionPartner.phone\"\n              label=\"Phone\"\n              name=\"phone\"\n              variant=\"outlined\"\n            ></v-text-field>\n            <v-text-field\n              v-model=\"commissionPartner.email\"\n              label=\"Email\"\n              variant=\"outlined\"\n            ></v-text-field>\n            <div>\n              <div>\n                <v-text-field\n                  v-model=\"commissionAmount\"\n                  :append-icon=\"commissionPartner.commission_type === 'percentage' ? 'mdi-percent':''\"\n                  :label=\"commissionPartner.commission_type === 'percentage' ? 'Percentage':'Amount'\"\n                  :prefix=\"commissionPartner.commission_type === 'amount' ? companyMoneyTextInputSettings.prefix: ''\"\n                  :suffix=\"commissionPartner.commission_type === 'amount' ? companyMoneyTextInputSettings.suffix: ''\"\n                  type=\"number\"\n                  variant=\"outlined\"\n                ></v-text-field>\n              </div>\n              <div>\n                <v-radio-group v-model=\"commissionPartner.commission_type\" class=\"mt-0\" density=\"compact\" hide-details @update:model-value=\"updateAmountFormat()\">\n                  <v-radio label=\"Percentage\" value=\"percentage\"></v-radio>\n                  <v-radio label=\"Amount\" value=\"amount\"></v-radio>\n                </v-radio-group>\n              </div>\n            </div>\n\n          </v-form>\n        </v-card-text>\n        <v-divider opacity=\"50\"/>\n        <v-card-actions>\n          <v-spacer/>\n          <v-btn color=\"grey\" size=\"small\" variant=\"text\" @click=\"viewCommissionPartnerDialog = false\">\n            Nevermind\n          </v-btn>\n          <v-btn v-if=\"commissionPartner.mode === 'edit'\" :loading=\"partnersLoading.update\" color=\"primary\" @click=\"updateCommissionPartner(commissionPartner)\">\n            Update\n          </v-btn>\n          <v-btn v-else :loading=\"partnersLoading.create\" color=\"primary\" @click=\"createCommissionPartner(commissionPartner)\">\n            Create\n          </v-btn>\n        </v-card-actions>\n      </v-card>\n    </v-dialog>\n\n    <v-dialog v-model=\"deleteCommissionPartnerDialog\" max-width=\"350\">\n      <v-card :disabled=\"partnersLoading.delete\">\n        <v-card-title class=\"text-h5\">Delete Commission Partner</v-card-title>\n        <v-divider opacity=\"50\"/>\n        <v-card-text>\n          Are you sure you want to delete this commission partner? <br>\n          <strong>{{ commissionPartner.name }}</strong>\n        </v-card-text>\n        <v-divider opacity=\"50\"/>\n        <v-card-actions>\n          <v-spacer/>\n          <v-btn color=\"grey\" size=\"small\" variant=\"text\" @click=\"deleteCommissionPartnerDialog = false\">\n            Nevermind\n          </v-btn>\n          <v-btn :loading=\"partnersLoading.delete\" color=\"red text-white\" @click=\"deleteCommissionPartner(commissionPartner)\">\n            I'm Sure\n          </v-btn>\n        </v-card-actions>\n      </v-card>\n    </v-dialog>\n\n    <WhatAreCommissionsDialog\n      :visible=\"isDialogVisible\"\n      @update:visible=\"isDialogVisible = $event\"\n    />\n  </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport {computed, defineAsyncComponent, onBeforeMount, ref, watch} from 'vue';\nimport {useStore} from 'vuex';\nimport getDefaultMeta from '@/utils/meta';\nimport {useMoneyFormatter} from '@/composables/useMoneyFormatter';\nimport {useAppFeatures} from '@/composables/useAppFeatures';\nimport {useAuth} from '@/composables/useAuth';\nimport {useCompany} from '@/composables/useCompany';\nimport type {CommissionPartner} from '@/store/modules/commission-partners';\n\nconst FeatureTitle = defineAsyncComponent(() => import('@/components/dashboard/FeatureTitle.vue'));\nconst WhatAreCommissionsDialog = defineAsyncComponent(() => import('@/components/dashboard/dialogs/WhatAreCommissionsDialog.vue'));\n\nconst store = useStore();\nconst {hasWaitlistRequest, addFeatureWaitlist} = useAppFeatures();\nconst {formatMoneyDisplayV2, companyMoneyTextInputSettings} = useMoneyFormatter();\nconst {fetchSession} = useAuth();\nconst {defaultMeta} = useCompany()\n\nconst viewCommissionPartnerDialog = ref(false);\nconst deleteCommissionPartnerDialog = ref(false);\nconst editedIndex = ref(null);\nconst showOnMainMenu = ref(false);\nconst commissionPartner = ref<CommissionPartner>({\n  active: true,\n  name: '',\n  phone: '',\n  email: '',\n  commission_amount: 0,\n  commission_type: 'percentage',\n  mode: 'create',\n});\n\nconst headers = [\n  {title: 'Name', key: 'name'},\n  {title: 'Phone', key: 'phone'},\n  {title: 'Email', key: 'email'},\n  {title: 'Type', key: 'commission_type'},\n  {title: 'Amount', key: 'commission_amount'},\n  {title: 'Actions', key: 'actions', sortable: false},\n];\n\nconst commissionPartners = computed<CommissionPartner[]>(() => store.getters['commissionPartners/commissionPartners']);\nconst partnersLoading = computed(() => store.getters['commissionPartners/loading']);\n\nconst toggleShowCommissionPartnersOnMainMenu = (showOnMainMenu: boolean) => {\n  store.dispatch('commissionPartners/toggleShowOnMainMenu', showOnMainMenu).then(() => {\n    fetchSession();\n  });\n};\nconst getFeatureWaitlist = () => {\n  store.dispatch('app/getFeatureWaitlist', {feature: 'CommissionedPartners'});\n};\n\nconst getCommissionPartners = () => {\n  store.dispatch('commissionPartners/getCommissionPartners');\n};\nconst updateCommissionPartner = (commissionPartner: CommissionPartner) => {\n  store.dispatch('commissionPartners/updateCommissionPartner', commissionPartner).then(() => {\n    getCommissionPartners();\n    viewCommissionPartnerDialog.value = false;\n    resetCommissionPartner();\n  });\n};\nconst deleteCommissionPartner = (commissionPartner: CommissionPartner) => {\n  store.dispatch('commissionPartners/deleteCommissionPartner', commissionPartner).then(() => {\n    getCommissionPartners();\n    deleteCommissionPartnerDialog.value = false;\n    resetCommissionPartner();\n  });\n};\n\nconst createCommissionPartner = (commissionPartner: CommissionPartner) => {\n  store.dispatch('commissionPartners/createCommissionPartner', commissionPartner).then(() => {\n    getCommissionPartners();\n    viewCommissionPartnerDialog.value = false;\n    resetCommissionPartner();\n  });\n};\n\nconst resetCommissionPartner = () => {\n  commissionPartner.value = {\n    active: true,\n    name: '',\n    phone: '',\n    email: '',\n    commission_amount: 0,\n    commission_type: 'percentage',\n    mode: 'create',\n  };\n};\n\n\nconst isDialogVisible = ref(false);\n\nconst openDialog = () => {\n  isDialogVisible.value = true;\n};\n\nconst updateAmountFormat = () => {\n  if (commissionPartner.value.commission_type === 'amount') {\n    commissionPartner.value.commission_amount *= 100;\n  } else if (commissionPartner.value.commission_type === 'percentage') {\n    commissionPartner.value.commission_amount /= 100;\n  }\n};\n\nconst editItem = (item: CommissionPartner) => {\n  editedIndex.value = store.getters['commissionPartners/commissionPartners'].indexOf(item);\n  commissionPartner.value = Object.assign({}, item);\n  commissionPartner.value.mode = 'edit';\n  viewCommissionPartnerDialog.value = true;\n};\n\nconst deleteItem = (item: CommissionPartner) => {\n  editedIndex.value = store.getters['commissionPartners/commissionPartners'].indexOf(item);\n  commissionPartner.value = Object.assign({}, item);\n  deleteCommissionPartnerDialog.value = true;\n};\n\nconst commissionAmount = computed({\n  get() {\n    const amount = +commissionPartner.value.commission_amount;\n    if (amount === 0) return 0;\n    if (commissionPartner.value.commission_type === 'amount') {\n      return amount * 0.01;\n    }\n    return amount;\n  },\n  set(amount: number) {\n    if (commissionPartner.value.commission_type === 'amount') {\n      commissionPartner.value.commission_amount = amount * 100;\n    } else {\n      commissionPartner.value.commission_amount = amount;\n    }\n  },\n});\n\nwatch(defaultMeta, () => {\n  const showOnMainMenuData = getDefaultMeta('show_commission_main_menu');\n  showOnMainMenu.value = showOnMainMenuData === 1 || showOnMainMenuData === '1';\n});\n\nonBeforeMount(() => {\n  getFeatureWaitlist();\n\n  const showOnMainMenuData = getDefaultMeta('show_commission_main_menu');\n\n  showOnMainMenu.value = showOnMainMenuData === 1 || showOnMainMenuData === '1';\n  getCommissionPartners();\n});\n</script>\n","<template>\n  <div>\n    <FeatureTitle\n      featurePremium\n      title=\"Webhooks\"\n    />\n    <div class=\"grid grid-cols-1 my-5\">\n      <div>\n        <div v-if=\"webhooksLoading.webhooks\">Loading...</div>\n        <v-card v-else-if=\"webhookEndpoints.length > 0\" :disabled=\"!includedInSubscription('webhooks')\">\n          <v-card-title>\n            <div class=\"flex\">\n              Hosted endpoints\n              <v-spacer/>\n              <v-btn :to=\"{ name: 'settings.providers.webhooks.create' }\" size=\"small\">\n                <v-icon class=\"mr-2\" size=\"small\">mdi-plus</v-icon>\n                Add Endpoint\n              </v-btn>\n            </div>\n          </v-card-title>\n\n          <v-card-text>\n            <table class=\"w-full text-sm text-left text-gray-500 dark:text-gray-400\">\n              <thead class=\"text-xs text-gray-700 uppercase bg-gray-50 dark:bg-gray-700 dark:text-gray-400\">\n              <tr>\n                <th class=\"px-6 py-3\" scope=\"col\">\n                  URL\n                </th>\n                <th class=\"px-6 py-3\" scope=\"col\">\n                  STATUS\n                </th>\n                <th class=\"px-6 py-3\" scope=\"col\">\n                </th>\n              </tr>\n              </thead>\n              <tbody>\n              <tr\n                v-for=\"item in webhookEndpoints\"\n                :key=\"item.uuid\"\n                class=\"border align-content-center justify-center\"\n              >\n                <td class=\"px-6 py-4 font-medium text-gray-900 whitespace-nowrap dark:text-white\" scope=\"row\">\n                  {{ item.url }}\n                </td>\n                <td class=\"px-6 py-3 cursor-pointer align-middle\">\n                    <span v-if=\"webhookEndpointStatus(item) === 'Enabled'\" class=\"badge badge-success\">\n                      Enabled\n                    </span>\n                  <span v-if=\"webhookEndpointStatus(item) === 'Disabled'\" class=\"badge badge-danger\">\n                      Disabled\n                    </span>\n                </td>\n                <td class=\"px-6 py-3 align-middle\">\n                  <v-btn size=\"small\" variant=\"text\" @click=\"editWebhook(item)\">View</v-btn>\n                </td>\n              </tr>\n              </tbody>\n            </table>\n          </v-card-text>\n        </v-card>\n\n        <div v-else class=\"h-100 row align-items-center\">\n          <div class=\"col text-center\">\n            <div class=\"w-100 mb-5\">\n              <svg data-name=\"Layer 1\" height=\"200\" viewBox=\"0 0 888 710.80704\"\n                   width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\"><title>server_cluster</title>\n                <path\n                  d=\"M600.93555,699.40352a260.06372,260.06372,0,1,1,183.89355-76.1709A258.36518,258.36518,0,0,1,600.93555,699.40352Zm0-518.12891c-142.29688,0-258.06446,115.76758-258.06446,258.06494s115.76758,258.064,258.06446,258.064S859,581.63692,859,439.33955,743.23242,181.27461,600.93555,181.27461Z\"\n                  fill=\"#ccc\" transform=\"translate(-156 -94.59648)\"/>\n                <rect fill=\"#2f2e41\" height=\"195\" transform=\"translate(1051.40391 -87.19257) rotate(90)\" width=\"262\"\n                      x=\"469\" y=\"509.90391\"/>\n                <rect fill=\"#3f3d56\" height=\"104\" width=\"262\" x=\"313\" y=\"373.80743\"/>\n                <rect fill=\"#3f3d56\" height=\"104\" width=\"262\" x=\"313\" y=\"489.80743\"/>\n                <rect fill=\"#3f3d56\" height=\"104\" width=\"262\" x=\"313\" y=\"605.80743\"/>\n                <rect fill=\"#73b18a\" height=\"16\" width=\"262\" x=\"313\" y=\"417.90372\"/>\n                <rect fill=\"#73b18a\" height=\"16\" width=\"262\" x=\"313\" y=\"533.90372\"/>\n                <rect fill=\"#73b18a\" height=\"16\" width=\"262\" x=\"313\" y=\"649.90372\"/>\n                <circle cx=\"524\" cy=\"388.80743\" fill=\"#73b18a\" r=\"6\"/>\n                <circle cx=\"545\" cy=\"388.80743\" fill=\"#73b18a\" r=\"6\"/>\n                <circle cx=\"566\" cy=\"388.80743\" fill=\"#73b18a\" r=\"6\"/>\n                <circle cx=\"524\" cy=\"502.80743\" fill=\"#73b18a\" r=\"6\"/>\n                <circle cx=\"545\" cy=\"502.80743\" fill=\"#73b18a\" r=\"6\"/>\n                <circle cx=\"566\" cy=\"502.80743\" fill=\"#73b18a\" r=\"6\"/>\n                <circle cx=\"524\" cy=\"616.80743\" fill=\"#73b18a\" r=\"6\"/>\n                <circle cx=\"545\" cy=\"616.80743\" fill=\"#73b18a\" r=\"6\"/>\n                <circle cx=\"566\" cy=\"616.80743\" fill=\"#73b18a\" r=\"6\"/>\n                <rect fill=\"#3f3d56\" height=\"2\" width=\"888\" y=\"708.80704\"/>\n                <path\n                  d=\"M397.8787,365.66116v185.9917a14.67525,14.67525,0,0,1-14.67227,14.67231H310.928a14.67656,14.67656,0,0,1-14.6784-14.67231V365.66116a14.67655,14.67655,0,0,1,14.6784-14.67228h8.76786a6.9778,6.9778,0,0,0,6.4551,9.60614h41.20843a6.97774,6.97774,0,0,0,6.45506-9.60614h9.392A14.67524,14.67524,0,0,1,397.8787,365.66116Z\"\n                  fill=\"#e6e6e6\" transform=\"translate(-156 -94.59648)\"/>\n                <rect fill=\"#fff\" height=\"128\" width=\"92\" x=\"145.06414\" y=\"291.91002\"/>\n                <rect fill=\"#e6e6e6\" height=\"2.09827\" width=\"36.71978\" x=\"171.18557\" y=\"379.92719\"/>\n                <rect fill=\"#73b18a\" height=\"2.09827\" width=\"56.81724\" x=\"171.14869\" y=\"387.63152\"/>\n                <rect fill=\"#e6e6e6\" height=\"2.09827\" width=\"44.5883\" x=\"171.14869\" y=\"394.89011\"/>\n                <rect fill=\"#e6e6e6\" height=\"2.09827\" width=\"26.22841\" x=\"171.14869\" y=\"402.1487\"/>\n                <rect fill=\"#e6e6e6\" height=\"2.09827\" width=\"39.34262\" x=\"171.14869\" y=\"409.40729\"/>\n                <rect fill=\"#e6e6e6\" height=\"4.19655\" width=\"4.19655\" x=\"154.53324\" y=\"379.32379\"/>\n                <rect fill=\"#73b18a\" height=\"4.19655\" width=\"4.19655\" x=\"154.53324\" y=\"386.58238\"/>\n                <rect fill=\"#e6e6e6\" height=\"4.19655\" width=\"4.19655\" x=\"154.53324\" y=\"393.84097\"/>\n                <rect fill=\"#e6e6e6\" height=\"4.19655\" width=\"4.19655\" x=\"154.53324\" y=\"401.09956\"/>\n                <rect fill=\"#e6e6e6\" height=\"4.19655\" width=\"4.19655\" x=\"154.53324\" y=\"408.35815\"/>\n                <rect fill=\"#e6e6e6\" height=\"36.99753\" width=\"36.99753\" x=\"172.75082\" y=\"307.91002\"/>\n                <rect fill=\"#e6e6e6\" height=\"157.47494\" width=\"245.88383\" x=\"321.11058\" y=\"0.13939\"/>\n                <rect fill=\"#fff\" height=\"77.03517\" width=\"203.86136\" x=\"339.64671\" y=\"44.19534\"/>\n                <rect fill=\"#e6e6e6\" height=\"2.79582\" width=\"48.92684\" x=\"376.78939\" y=\"57.54179\"/>\n                <rect fill=\"#73b18a\" height=\"2.79582\" width=\"75.70547\" x=\"376.74025\" y=\"67.80733\"/>\n                <rect fill=\"#e6e6e6\" height=\"2.79582\" width=\"59.41117\" x=\"376.74025\" y=\"77.47895\"/>\n                <rect fill=\"#e6e6e6\" height=\"2.79582\" width=\"34.94775\" x=\"376.74025\" y=\"87.15058\"/>\n                <rect fill=\"#e6e6e6\" height=\"2.79582\" width=\"52.42162\" x=\"376.74025\" y=\"96.8222\"/>\n                <rect fill=\"#e6e6e6\" height=\"5.59164\" width=\"5.59164\" x=\"354.60119\" y=\"56.7378\"/>\n                <rect fill=\"#73b18a\" height=\"5.59164\" width=\"5.59164\" x=\"354.60119\" y=\"66.40942\"/>\n                <rect fill=\"#e6e6e6\" height=\"5.59164\" width=\"5.59164\" x=\"354.60119\" y=\"76.08104\"/>\n                <rect fill=\"#e6e6e6\" height=\"5.59164\" width=\"5.59164\" x=\"354.60119\" y=\"85.75267\"/>\n                <rect fill=\"#e6e6e6\" height=\"5.59164\" width=\"5.59164\" x=\"354.60119\" y=\"95.42429\"/>\n                <rect fill=\"#e6e6e6\" height=\"50.05873\" width=\"50.05873\" x=\"483.44507\" y=\"53.8475\"/>\n                <rect fill=\"#73b18a\" height=\"10.44604\" width=\"245.88383\" x=\"321.00559\"/>\n                <circle cx=\"328.76825\" cy=\"5.34057\" fill=\"#fff\" r=\"2.09686\"/>\n                <circle cx=\"336.11718\" cy=\"5.34057\" fill=\"#fff\" r=\"2.09686\"/>\n                <circle cx=\"343.46611\" cy=\"5.34057\" fill=\"#fff\" r=\"2.09686\"/>\n                <rect fill=\"#e6e6e6\" height=\"31\" width=\"60\" x=\"671.64772\" y=\"294.80743\"/>\n                <rect fill=\"#e6e6e6\" height=\"31\" width=\"60\" x=\"671.64772\" y=\"405.80743\"/>\n                <circle cx=\"701.64772\" cy=\"365.80743\" fill=\"#e6e6e6\" r=\"50\"/>\n                <circle cx=\"701.64772\" cy=\"365.80743\" fill=\"#fff\" r=\"39\"/>\n                <rect fill=\"#e2e2e2\" height=\"1.72839\" width=\"30.24683\" x=\"688.87659\" y=\"355.12175\"/>\n                <rect fill=\"#73b18a\" height=\"1.72839\" width=\"46.80151\" x=\"688.84621\" y=\"361.46796\"/>\n                <rect fill=\"#e2e2e2\" height=\"1.72839\" width=\"36.72829\" x=\"688.84621\" y=\"367.44701\"/>\n                <rect fill=\"#e2e2e2\" height=\"1.72839\" width=\"21.60488\" x=\"688.84621\" y=\"373.42605\"/>\n                <rect fill=\"#e2e2e2\" height=\"1.72839\" width=\"32.40732\" x=\"688.84621\" y=\"379.4051\"/>\n                <rect fill=\"#e2e2e2\" height=\"3.45678\" width=\"3.45678\" x=\"675.15972\" y=\"354.62472\"/>\n                <rect fill=\"#73b18a\" height=\"3.45678\" width=\"3.45678\" x=\"675.15972\" y=\"360.60376\"/>\n                <rect fill=\"#e2e2e2\" height=\"3.45678\" width=\"3.45678\" x=\"675.15972\" y=\"366.58281\"/>\n                <rect fill=\"#e2e2e2\" height=\"3.45678\" width=\"3.45678\" x=\"675.15972\" y=\"372.56186\"/>\n                <rect fill=\"#e2e2e2\" height=\"3.45678\" width=\"3.45678\" x=\"675.15972\" y=\"378.54091\"/>\n              </svg>\n            </div>\n            <h2 class=\"newCustomer__header\">No webhooks yet.</h2>\n            <p>Create webhook endpoints, so that Fleetwire can notify your integration when asynchronous events\n              occur.</p>\n            <v-btn :to=\"{ name: 'settings.providers.webhooks.create' }\" size=\"small\">\n              <v-icon class=\"mr-2\" size=\"small\">mdi-plus</v-icon>\n              Add Endpoint\n            </v-btn>\n          </div>\n        </div>\n\n      </div>\n    </div>\n  </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport {computed, defineAsyncComponent, onBeforeMount} from 'vue';\nimport {useSubscription} from '@/composables/useSubscription';\nimport {useStore} from 'vuex';\nimport {useRouter} from 'vue-router';\n\nconst FeatureTitle = defineAsyncComponent(() => import('@/components/dashboard/FeatureTitle.vue'));\n\nconst router = useRouter();\nconst {getters, dispatch} = useStore();\nconst {includedInSubscription} = useSubscription();\nconst webhooksLoading = computed(() => getters['webhook/loading']);\nconst webhookEndpoints = computed(() => getters['webhook/webhookEndpoints']);\n\nconst getWebhookEndpoints = async () => {\n  return await dispatch('webhook/getWebhookEndpoints');\n};\n\nconst webhookEndpointStatus = (endpoint) => {\n  if (!endpoint || !endpoint.status) {\n    return 'Unknown';\n  }\n  return endpoint.status.charAt(0).toUpperCase() + endpoint.status.slice(1);\n};\n\nconst editWebhook = (webhook) => {\n  router.push({name: 'settings.providers.webhooks.update', params: {uuid: webhook.uuid}})\n    .catch(err => {\n      console.error('Failed to navigate to edit webhook:', err);\n    });\n\n};\n\nonBeforeMount(() => {\n  getWebhookEndpoints();\n});\n</script>\n","<template>\n  <div>\n    <div class=\"grid grid-cols-2\">\n      <div class=\"\">\n        <v-card :disabled=\"webhookCardReady\">\n          <v-card-title>\n            Listen to Fleetwire events\n          </v-card-title>\n          <v-card-subtitle>\n            Set up your webhook endpoint to receive live events from Fleetwire.\n          </v-card-subtitle>\n\n          <v-card-text>\n            <v-form>\n              <v-text-field\n                v-model=\"webhookForm.url\"\n                :error-messages=\"webhookForm.errors.get('url')\"\n                class=\"mb-2\"\n                density=\"compact\"\n                label=\"URL Endpoint\"\n                name=\"url\"\n                variant=\"outlined\"\n                @keyup=\"clearErrors('url')\"\n              />\n              <v-text-field\n                v-model=\"webhookForm.description\"\n                :error-messages=\"webhookForm.errors.get('description')\"\n                class=\"mb-2\"\n                density=\"compact\"\n                label=\"Description\"\n                name=\"description\"\n                variant=\"outlined\"\n                @keyup=\"clearErrors('description')\"\n              />\n\n              <v-combobox\n                v-model=\"webhookForm.events\"\n                :error-messages=\"webhookForm.errors.get('events')\"\n                :items=\"items\"\n                class=\"mb-2\"\n                density=\"compact\"\n                label=\"Select events to listen to\"\n                multiple\n                name=\"events\"\n                variant=\"outlined\"\n                @update:modelValue=\"clearErrors('events')\"\n              />\n            </v-form>\n          </v-card-text>\n          <v-card-actions>\n            <v-btn :disabled=\"!webhookFormReady\" :loading=\"webhookLoading.webhooks\" @click=\"addWebhookEndpointInit()\">\n              Add Endpoint\n            </v-btn>\n            <v-btn size=\"small\" variant=\"text\" @click=\"router.push({ name: 'settings.providers.webhooks' })\">Cancel\n            </v-btn>\n          </v-card-actions>\n        </v-card>\n      </div>\n    </div>\n\n    <v-snackbar v-model=\"createWebhookSuccess\">\n      Webhook created Successfully\n      <template v-slot:actions>\n        <v-btn variant=\"text\" @click=\"createWebhookSuccess = false\">\n          Close\n        </v-btn>\n      </template>\n    </v-snackbar>\n  </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport {computed, ref} from 'vue';\nimport {useStore} from 'vuex';\nimport {useSubscription} from \"@/composables/useSubscription\";\nimport {useRouter} from 'vue-router';\nimport Form from \"@/plugins/FWForms\";\nimport {WebhookEndpoint} from \"@/store/modules/webhook\";\n\nconst {getters, dispatch} = useStore();\n\nconst store = useStore();\nconst router = useRouter();\nconst {includedInSubscription} = useSubscription();\n\ninterface WebhookFormData {\n  url: string;\n  description: string;\n  events: string[];\n}\n\nconst webhookForm = ref(new Form<WebhookFormData>({\n  url: '',\n  description: '',\n  events: [],\n}));\n\nconst webhookLoading = computed(() => store.getters['webhook/loading']);\n\nconst webhookCardReady = computed(() => !includedInSubscription('coupons') || webhookLoading.value.webhook);\n\nconst webhookFormReady = computed(() => {\n  const formData = webhookForm.value.data();\n  for (const value of Object.values(formData)) {\n    if (!value) return false;\n  }\n  return formData.events.length > 0;\n});\n\nconst clearErrors = (field: string) => {\n  webhookForm.value.errors[field] = [];\n};\n\nconst addWebhookEndpoint = async (webhook: WebhookEndpoint) => {\n  return await store.dispatch('webhook/addWebhookEndpoint', webhook);\n};\n\nconst addWebhookEndpointInit = () => {\n  webhookForm.value.url = webhookForm.value.url.startsWith('https://')\n    ? webhookForm.value.url\n    : `https://${webhookForm.value.url.replace(/^http:\\/\\//, '')}`;\n\n  console.dir(webhookForm.value.data());\n\n  addWebhookEndpoint(webhookForm.value.data()).then((data) => {\n    createWebhookSuccess.value = true;\n    webhookForm.value.errors.clear();\n    router.push({name: 'settings.providers.webhooks.update', params: {uuid: data.webhook.uuid}}).catch(() => {\n    });\n  }).catch((error) => {\n    console.dir(error);\n    webhookForm.value.errors.set(error.response.data.errors)\n  });\n}\n\nconst createWebhookSuccess = ref(false);\nconst items = ref([\n  'reservation.created',\n]);\n</script>\n","<template>\n  <div>\n    <div class=\"grid grid-cols-1\">\n      <div class=\"\">\n\n        <div class=\"mb-4 font-bold\">\n          <div class=\"flex\">\n            <span class=\"small flex-fill\">\n              <v-btn :to=\"{ name: 'settings.providers.webhooks' }\" class=\"mr-2\" size=\"small\" variant=\"text\">\n                <v-icon size=\"small\">mdi-arrow-left</v-icon>\n              </v-btn>\n              <v-icon size=\"small\">mdi-webhook</v-icon> WEBHOOK\n            </span>\n            <small>\n              uuid: {{ webhookClone.uuid }}\n              <v-progress-circular v-if=\"webhookLoading.webhooks || webhookLoading.webhooksDelete\" :size=\"12\" :width=\"1\" indeterminate></v-progress-circular>\n            </small>\n          </div>\n          <div class=\"flex\">\n            <div class=\"flex-fill\">{{ webhookClone.url }}</div>\n            <div>\n              <v-menu>\n                <template v-slot:activator=\"{ props }\">\n                  <v-btn size=\"small\" v-bind=\"props\">\n                    <v-icon>mdi-dots-horizontal</v-icon>\n                  </v-btn>\n                </template>\n                <v-list>\n                  <v-list-item @click=\"showEditForm = !showEditForm\">\n                    <v-list-item-title>Edit</v-list-item-title>\n                  </v-list-item>\n                </v-list>\n              </v-menu>\n            </div>\n          </div>\n        </div>\n      </div>\n    </div>\n    <div class=\"grid grid-cols-1 my-5\">\n      <div>\n        <v-card v-show=\"showEditForm\" :disabled=\"!includedInSubscription('webhooks') || webhookLoading.webhooks || webhookLoading.webhooksUpdate || webhookLoading.webhooksDelete\">\n          <v-card-title>\n            Listen to Stripe events\n            <v-spacer/>\n            <v-btn size=\"small\" @click=\"showEditForm = !showEditForm\">Close</v-btn>\n          </v-card-title>\n          <v-card-subtitle>\n            Set up your webhook endpoint to receive live events from Fleetwire.\n          </v-card-subtitle>\n\n          <v-card-text>\n            <v-form>\n              <v-text-field\n                v-model=\"webhookClone.url\"\n                label=\"URL Endpoint\"\n                variant=\"outlined\"\n              ></v-text-field>\n              <v-text-field\n                v-model=\"webhookClone.description\"\n                label=\"Description\"\n                variant=\"outlined\"\n              ></v-text-field>\n\n              <v-combobox\n                v-model=\"webhookClone.events\"\n                :items=\"items\"\n                density=\"compact\"\n                label=\"Select events to listen to\"\n                multiple\n                variant=\"outlined\"\n              ></v-combobox>\n              <v-select\n                v-model=\"webhookClone.status\"\n                :items=\"['enabled', 'disabled']\"\n                label=\"Status\"\n                variant=\"outlined\"\n              ></v-select>\n            </v-form>\n          </v-card-text>\n          <v-card-actions>\n            <v-btn :loading=\"webhookLoading.webhooksDelete\" color=\"red\" size=\"small\" variant=\"text\" @click=\"deleteWebhook(webhookClone)\">\n              <v-icon size=\"small\">mdi-delete</v-icon>\n            </v-btn>\n            <v-spacer/>\n            <v-btn size=\"small\" variant=\"text\" @click=\"showEditForm = !showEditForm\">Close</v-btn>\n            <v-btn :disabled=\"!webhookFormReady\" :loading=\"webhookLoading.webhooksUpdate\" @click=\"updateWebhookEndpoint(webhookClone)\">\n              Update Endpoint\n            </v-btn>\n          </v-card-actions>\n        </v-card>\n      </div>\n    </div>\n\n    <div class=\"mt-5 border-t\">\n      <div class=\"flex\">\n        <div class=\"border-e py-2 px-4\">\n          <span class=\"block text-gray-600\">Status</span>\n          <span v-if=\"webhookClone.status === 'enabled'\" class=\"badge badge-success\">\n            Enabled\n          </span>\n          <span v-if=\"webhookClone.status === 'disabled'\" class=\"badge badge-danger\">\n            Disabled\n          </span>\n        </div>\n        <div class=\"border-e py-2 px-4\">\n          <span class=\"block text-gray-600\">Listening for</span>\n          <span class=\"badge badge-secondary\">\n            {{ webhookClone.events.length }} Events\n          </span>\n        </div>\n        <div class=\"border-e py-2 px-4\">\n          <span class=\"block text-gray-600\">Signing secret</span>\n          <span>\n            <v-btn v-if=\"!webhookEndpointSecret\" :loading=\"webhookLoading.secret\" size=\"x-small\" variant=\"text\" @click=\"getWebhookEndpointSecret(webhookClone.uuid)\">Reveal</v-btn>\n            <span v-if=\"webhookEndpointSecret\" class=\"small\">{{ webhookEndpointSecret }}</span>\n          </span>\n        </div>\n      </div>\n    </div>\n\n    <div class=\"mt-5\">\n      <div class=\"flex\">\n        <v-card :disabled=\"webhookLoading.webhookConversationResend\">\n          <v-card-text>\n            <div style=\"min-width: 500px; width: 500px\">\n              <div v-for=\"(conversations, date) in orderedConversations\" :key=\"date\">\n                <div class=\"border-b w-100 mt-5\">\n                  <strong>{{ date }}</strong>\n                </div>\n                <div v-for=\"(conversation) in conversations\" :key=\"conversation.uuid\" :class=\"conversationListClassObject(conversation)\" class=\"cursor-pointer hover:bg-blue-100\" @click=\"selectConversation(conversation)\">\n                  <div class=\"py-1 px-3 flex\">\n                    <div class=\"flex-fill\">\n                      <v-icon v-if=\"conversation.result_type === 'success'\" color=\"green\" size=\"small\">\n                        mdi-check-circle\n                      </v-icon>\n                      <v-icon v-else-if=\"conversation.result_type === 'error'\" color=\"red\" size=\"small\">\n                        mdi-close-circle\n                      </v-icon>\n                      <v-icon v-else color=\"orange\" size=\"small\">mdi-help-circle</v-icon>\n                      {{ webhookEventLabel(conversation) }}\n                    </div>\n                    <div>\n                      {{ webhookEventLabelTime(conversation) }}\n                    </div>\n                  </div>\n                </div>\n              </div>\n              <div v-if=\"webhookConversations.length === 0\">No Events yet</div>\n            </div>\n          </v-card-text>\n        </v-card>\n\n        <div :class=\"conversationResultClassObject\" class=\"flex-fill p-2\">\n          <v-card v-show=\"currentWorkingConversation.uuid\" class=\"flex-fill\" flat>\n            <v-card-title>\n              {{ webhookEventLabel(currentWorkingConversation) }}\n              <v-spacer/>\n              <v-btn :loading=\"webhookLoading.webhookConversationResend\" size=\"small\" variant=\"outlined\" @click=\"resendWebhookConversationInit(currentWorkingConversation)\">\n                <v-icon class=\"mr-2\" size=\"x-small\">mdi-restore</v-icon>\n                Resend\n              </v-btn>\n            </v-card-title>\n            <v-card-subtitle>\n              Created: <small>{{ webhookEventLabelTime(currentWorkingConversation) }}</small>\n            </v-card-subtitle>\n            <v-card-text>\n              <div>\n                <label class=\"block font-bold\">Response:</label>\n                <div>{{ currentWorkingConversation.http_status }}</div>\n                <div style=\"max-width: 500px; max-height: 250px; overflow: auto\">\n                  {{ currentWorkingConversation.response_body }}\n                </div>\n              </div>\n              <div class=\"mt-3\">\n                <label class=\"block font-bold\">Request:</label>\n                <div class=\"response-code\">\n                  <pre>{{ currentWorkingConversation.request_body }}</pre>\n                </div>\n              </div>\n            </v-card-text>\n          </v-card>\n        </div>\n      </div>\n    </div>\n\n    <v-snackbar v-model=\"updateSuccess\">\n      Webhook updated Successfully\n      <template v-slot:actions>\n        <v-btn variant=\"text\" @click=\"updateSuccess = false\">\n          Close\n        </v-btn>\n      </template>\n    </v-snackbar>\n  </div>\n</template>\n\n<script>\nimport { ref, computed } from 'vue';\nimport { cloneDeep, groupBy, orderBy, clone } from 'lodash';\nimport { EventBus } from '@/plugins/eventBus';\nimport dayjs from 'dayjs';\nimport { useCompany } from '@/composables/useCompany';\nimport { useSubscription } from '@/composables/useSubscription';\nimport { useStore } from 'vuex';\n\nexport default {\n  name: 'SettingsWebhookUpdate',\n\n  setup() {\n    const { getters, dispatch } = useStore();\n    const { company, companyLoading } = useCompany();\n    const { includedInSubscription } = useSubscription();\n\n    const showEditForm = ref(false);\n    const updateSuccess = ref(false);\n    const webhookClone = ref({\n      uuid: '',\n      url: '',\n      description: '',\n      status: '',\n      events: [],\n    });\n    const currentWorkingConversation = ref({});\n    const items = ref([\n      'reservation.created',\n    ]);\n\n    const conversationResultClassObject = ref({\n      'bg-red-100': currentWorkingConversation.value?.result_type === 'error',\n      'bg-green-100': currentWorkingConversation.value?.result_type === 'success',\n    });\n\n    // computed\n    const webhookLoading = computed(() => getters['webhook/loading']);\n    const currentWebhook = computed(() => getters['webhook/webhookEndpoint']);\n    const webhookConversations = computed(() => getters['webhook/webhookConversations']);\n    const webhookEndpointSecret = computed(() => getters['webhook/webhookEndpointSecret']);\n\n    const webhookFormReady = computed(() => {\n      for (const [key, value] of Object.entries(webhookClone.value)) {\n        if (!['metadata', 'type'].includes(key)) {\n          if (!value) return false;\n        }\n      }\n      return true;\n    });\n\n    const orderedConversations = computed(() => {\n      const conversation = groupBy(webhookConversations.value, (c) => dayjs(c.created_at).format('MMM DD, YYYY'));\n\n      const orderedDates = {};\n      // @ts-ignore: The right-hand side of an arithmetic operation must be of type 'any', 'number', 'bigint' or an enum type.\n      Object.keys(conversation).sort((a, b) => dayjs(b).toDate() - dayjs(a).toDate()).forEach((key) => {\n        orderedDates[key] = conversation[key];\n      });\n\n      Object.keys(orderedDates).forEach((element) => {\n        orderedDates[element] = orderBy(orderedDates[element], 'created_at', 'desc');\n      });\n\n      return orderedDates;\n    });\n\n\n    const getWebhookEndpoint = (uuid) => dispatch('webhook/getWebhookEndpoint', uuid);\n    const getWebhookConversations = (uuid) => dispatch('webhook/getWebhookConversations', uuid);\n    const resendWebhookConversation = (conversation) => dispatch('webhook/resendWebhookConversation', conversation);\n    const updateWebhookEndpoint = (webhook) => dispatch('webhook/updateWebhookEndpoint', webhook);\n    const deleteWebhook = (webhook) => dispatch('webhook/deleteWebhookEndpoint', webhook);\n    const getWebhookEndpointSecret = (uuid) => dispatch('webhook/getWebhookEndpointSecret', uuid);\n\n\n    const webhookEventLabel = (conversation) => conversation?.event;\n\n    const webhookEventLabelTime = (conversation) => dayjs(conversation.created_at).format('H:mm');\n\n    const selectConversation = (conversation) => currentWorkingConversation.value = clone(conversation);\n\n    const conversationListClassObject = (conversation) => ({\n      'bg-blue-100': currentWorkingConversation.value?.uuid === conversation.uuid,\n      'is-selected': currentWorkingConversation.value?.uuid === conversation.uuid,\n    });\n\n    const resendWebhookConversationInit = (conversation) => resendWebhookConversation(conversation);\n\n    return {\n      company,\n      webhookLoading,\n      companyLoading,\n      showEditForm,\n      updateSuccess,\n      webhookClone,\n      currentWorkingConversation,\n      items,\n      currentWebhook,\n      webhookConversations,\n      webhookEndpointSecret,\n      conversationResultClassObject,\n      webhookFormReady,\n      orderedConversations,\n      webhookEventLabel,\n      includedInSubscription,\n      getWebhookConversations,\n      getWebhookEndpoint,\n      resendWebhookConversation,\n      updateWebhookEndpoint,\n      deleteWebhook,\n      getWebhookEndpointSecret,\n      webhookEventLabelTime,\n      selectConversation,\n      conversationListClassObject,\n      resendWebhookConversationInit,\n    };\n  },\n\n  created() {\n    EventBus.$on('update-webhook-endpoint-success', () => {\n      this.updateSuccess = true;\n      this.showEditForm = false;\n    });\n    EventBus.$on('webhook-conversation-created-success', () => {\n      this.getWebhookConversations(this.$route.params.uuid);\n    });\n    EventBus.$on('delete-webhook-endpoint-success', () => {\n      this.$router.push({ name: 'settings.providers.webhooks' }).catch(() => {\n      });\n    });\n  },\n\n  watch: {\n    company: {\n      immediate: true,\n      handler(companyNew) {\n        if (companyNew.uuid) {\n          this.getWebhookEndpoint(this.$route.params.uuid);\n          this.getWebhookConversations(this.$route.params.uuid);\n        }\n      },\n    },\n    currentWebhook: {\n      immediate: true,\n      handler(webhook) {\n        if (webhook?.uuid) {\n          this.webhookClone = cloneDeep(webhook);\n          this.webhookClone.events = this.webhookClone.events.map((e) => e.event);\n        }\n      },\n    },\n    orderedConversations: {\n      immediate: true,\n      handler(conversation) {\n        if (Object.keys(conversation).length > 0) {\n          this.currentWorkingConversation = clone(conversation[Object.keys(conversation)[0]][0]);\n        }\n      },\n    },\n  },\n\n  beforeUnmount() {\n    this.webhookClone = null;\n    this.webhookClone = {\n      uuid: '',\n      url: '',\n      description: '',\n      events: [],\n    };\n\n    EventBus.$off('update-webhook-endpoint-success');\n    EventBus.$off('webhook-conversation-created-success');\n    EventBus.$off('delete-webhook-endpoint-success');\n  },\n};\n</script>\n\n<style>\n.response-code {\n  padding: 0.2em 0.4em;\n  border-radius: 3px;\n  font-size: 85%;\n  font-weight: 400;\n}\n\n.is-selected {\n  background-color: #f6f8fa;\n  box-shadow: inset 0 -1px 0 0 #ebeef1, inset 4px 0 0 0 #81b3fe;\n  font-weight: 500;\n}\n</style>\n","<template>\n  <div>\n    <h2 class=\"mt-8 mb-4 font-bold text-2xl\">Checkout</h2>\n\n    <Payments/>\n    <v-divider class=\"my-10\" opacity=\"50\"/>\n\n    <TermsAndCancellationPolicy/>\n    <v-divider class=\"my-10\" opacity=\"50\"/>\n\n    <eSign/>\n    <v-divider class=\"my-10\" opacity=\"50\"/>\n\n    <AdditionalScripts/>\n    <v-divider class=\"my-10\" opacity=\"50\"/>\n\n    <AdditionalStyling/>\n    <v-divider class=\"my-10\" opacity=\"50\"/>\n\n    <div v-if=\"false\" class=\"my-5\">\n      <div class=\"\">\n        <div class=\"setting-section-description\">\n          <FeatureTitle\n            featurePremium\n            featureStandard\n            title=\"Coupon Codes\"\n          />\n          <div class=\"feature-description\">\n            Allow renters to use coupon codes at checkout.\n          </div>\n        </div>\n      </div>\n      <div class=\"\">\n        <v-card :disabled=\"!includedInSubscription('coupons')\" max-width=\"100%\" variant=\"outlined\">\n          <v-card-text>\n            <div class=\"list-group list-group-flush\">\n              <div class=\"list-group-item\">\n                <div class=\"align-items-center\">\n                  <div>\n                    <p class=\"mb-0\">\n                      Accept coupons\n                    </p>\n                    <small class=\"text-gray-700\">\n                      Allow your customers to use coupons\n                    </small>\n                  </div>\n                  <div class=\"col-auto\">\n                    <div class=\"custom-control custom-switch\">\n                      <v-switch v-model=\"localAcceptCoupons\" :loading=\"companyLoading.company\" inset/>\n                    </div>\n\n                  </div>\n                </div>\n              </div>\n            </div>\n          </v-card-text>\n\n          <v-card-actions>\n            <v-spacer/>\n            <v-btn :loading=\"companyLoading.company\" location=\"right\" @click=\"saveCompanyMeta()\">Save</v-btn>\n          </v-card-actions>\n        </v-card>\n      </div>\n    </div>\n  </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport {defineAsyncComponent, ref, watch} from 'vue';\nimport {useCompany} from '@/composables/useCompany';\nimport {useSubscription} from '@/composables/useSubscription';\nimport {getMetaBooleanValue} from '@/utils/meta';\n\nconst eSign = defineAsyncComponent(() => import('@/components/dashboard/settings/checkout/eSign.vue'));\nconst AdditionalScripts = defineAsyncComponent(() => import('@/components/dashboard/settings/checkout/AdditionalScripts.vue'));\nconst AdditionalStyling = defineAsyncComponent(() => import('@/components/dashboard/settings/checkout/AdditionalStyling.vue'));\nconst FeatureTitle = defineAsyncComponent(() => import('@/components/dashboard/FeatureTitle.vue'));\nconst TermsAndCancellationPolicy = defineAsyncComponent(() => import('@/components/dashboard/settings/checkout/TermsAndCancellationPolicy.vue'));\nconst Payments = defineAsyncComponent(() => import('@/components/dashboard/settings/checkout/Payments.vue'));\n\nconst {includedInSubscription} = useSubscription();\nconst {companyLoading, saveCompanyMeta, defaultMeta} = useCompany();\n\nconst localAcceptCoupons = ref(false);\n\n\nwatch(defaultMeta, () => {\n  localAcceptCoupons.value = getMetaBooleanValue('settings.payment.accept_coupons')\n}, {immediate: true});\n</script>\n","<template>\n  <div>\n    <h2 class=\"mt-8 mb-4 font-bold text-2xl\">Online Reservations</h2>\n\n    <General/>\n    <SectionDivider/>\n\n    <OperatingHours/>\n    <SectionDivider/>\n\n    <GuestCancellation/>\n    <SectionDivider/>\n\n    <CheckoutFields/>\n    <SectionDivider/>\n\n    <SecondaryDrivers/>\n    <SectionDivider/>\n\n    <StoreCustomizations/>\n    <SectionDivider/>\n\n    <CustomDomain/>\n    <SectionDivider/>\n\n    <EcommerceTracking/>\n    <SectionDivider/>\n\n    <Install/>\n  </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport {defineAsyncComponent} from 'vue';\n\nconst SectionDivider = defineAsyncComponent(() => import('@/components/common/SectionDivider.vue'));\n\nconst components = {\n  OperatingHours: defineAsyncComponent(() => import('@/components/dashboard/settings/onlineReservations/OperatingHours.vue')),\n  General: defineAsyncComponent(() => import('@/components/dashboard/settings/onlineReservations/SettingsGeneral.vue')),\n  GuestCancellation: defineAsyncComponent(() => import('@/components/dashboard/settings/onlineReservations/AllowBookingCancellation.vue')),\n  CheckoutFields: defineAsyncComponent(() => import('@/components/dashboard/settings/onlineReservations/CheckoutFields.vue')),\n  SecondaryDrivers: defineAsyncComponent(() => import('@/components/dashboard/settings/onlineReservations/AllowSecondaryDrivers.vue')),\n  StoreCustomizations: defineAsyncComponent(() => import('@/components/dashboard/settings/onlineReservations/StoreCustomizations.vue')),\n  CustomDomain: defineAsyncComponent(() => import('@/components/dashboard/settings/onlineReservations/CustomDomain.vue')),\n  EcommerceTracking: defineAsyncComponent(() => import('@/components/dashboard/settings/onlineReservations/EcommerceTracking.vue')),\n  Install: defineAsyncComponent(() => import('@/components/dashboard/settings/onlineReservations/Install.vue')),\n};\n\n// Destructure components for template use\nconst {\n  OperatingHours,\n  General,\n  GuestCancellation,\n  CheckoutFields,\n  SecondaryDrivers,\n  StoreCustomizations,\n  CustomDomain,\n  EcommerceTracking,\n  Install,\n} = components;\n</script>\n","<template>\n  <div>\n    <h2 class=\"mt-8 mb-4 font-bold text-2xl\">Add New Employee</h2>\n\n    <v-alert v-if=\"seatLimitReached\" class=\"my-2\" type=\"warning\">\n      <span v-html=\"seatLimitReachedMessage\"></span>\n    </v-alert>\n\n    <div class=\"grid grid-cols-2 gap-1\">\n      <v-card :disabled=\"seatLimitReached\">\n        <v-card-title class=\"mb-2\">\n          Account information\n        </v-card-title>\n\n        <v-card-subtitle>\n          Invite a team member\n        </v-card-subtitle>\n        <v-container>\n          <v-form v-model=\"newTeamMemberFormValid\" :disabled=\"seatLimitReached\">\n            <div class=\" align-center\">\n              <div class=\"\">\n                <div class=\"\">\n                  <div class=\"\">\n                    <v-text-field\n                      v-model=\"form.first_name\"\n                      :disabled=\"seatLimitReached\"\n                      :error-messages=\"form.errors.get('first_name')\"\n                      :label=\"$t('first_name')\"\n                      autofocus=\"autofocus\"\n                      large\n                      name=\"first_name\"\n                      variant=\"outlined\"\n                      @keyup=\"form.errors.clear('first_name')\"\n                    />\n                  </div>\n                  <div class=\"\">\n                    <v-text-field\n                      v-model=\"form.last_name\"\n                      :disabled=\"seatLimitReached\"\n                      :error-messages=\"form.errors.get('last_name')\"\n                      :label=\"$t('last_name')\"\n                      name=\"last_name\"\n                      variant=\"outlined\"\n                      @keyup=\"form.errors.clear('last_name')\"\n                    />\n                  </div>\n                </div>\n                <div class=\"\">\n                  <div class=\"\">\n                    <v-text-field\n                      v-model=\"form.email\"\n                      :disabled=\"seatLimitReached\"\n                      :error-messages=\"form.errors.get('email')\"\n                      :label=\"$t('email')\"\n                      :rules=\"registerFormRules.email\"\n                      name=\"email\"\n                      required\n                      type=\"email\"\n                      variant=\"outlined\"\n                      @keyup=\"form.errors.clear('email')\"\n                    />\n                  </div>\n                </div>\n              </div>\n            </div>\n          </v-form>\n        </v-container>\n      </v-card>\n    </div>\n\n    <div class=\"grid grid-cols-2 my-5\">\n      <v-card :disabled=\"seatLimitReached || form.busy\">\n        <v-card-title>\n          Permissions\n        </v-card-title>\n        <v-card-subtitle>\n          Choose a set of permissions that fits this new team member's role.\n        </v-card-subtitle>\n\n        <v-card-text>\n          <div class=\"flex\">\n            <v-spacer/>\n            <v-checkbox\n              v-model=\"selectAllPermissions\"\n              :indeterminate=\"form.permissions.length !== 0 && form.permissions.length < possiblePermissions.length\"\n              color=\"accent-4\"\n            >\n              <template v-slot:prepend>\n                <small style=\"min-width: 65px; margin-top: 5px; color: #5a5e66\">Select All</small>\n              </template>\n            </v-checkbox>\n          </div>\n\n          <div>\n            <div v-for=\"(item, category) in filteredPermissions\" :key=\"`title-${category}`\">\n              <div class=\"font-bold text-xl\">{{ formatTitles(category) }}</div>\n\n              <v-list-item v-for=\"(perm, index) in item\" :key=\"`item${category}-${index}`\" :value=\"perm.name\">\n                <template v-slot:prepend=\"{ isActive }\">\n                  <v-list-item-action :start=\"true\">\n                    <v-checkbox-btn\n                      v-model=\"form.permissions\"\n                      :input-value=\"isActive\"\n                      :true-value=\"perm.name\"\n                      :value=\"perm.name\"\n\n                      color=\"accent-4\"\n                      @change=\"form.errors.clear('permissions')\"\n                    ></v-checkbox-btn>\n                  </v-list-item-action>\n\n                  <v-list-item-title v-text=\"formatTitles(perm.name)\"></v-list-item-title>\n                </template>\n              </v-list-item>\n              <v-divider/>\n            </div>\n          </div>\n        </v-card-text>\n\n        <v-alert v-if=\"form.errors.any()\" class=\"card-alert-full\" density=\"compact\" type=\"error\">\n          {{ form.errors.flatten()[0] }}\n        </v-alert>\n\n        <v-card-actions>\n          <v-spacer/>\n          <v-btn\n            :disabled=\"!newTeamMemberFormValid || form.errors.any() || form.busy\"\n            :loading=\"form.busy\"\n            class=\"mt-3\"\n            color=\"primary\"\n            @click=\"inviteNewTeamMember()\"\n          >\n            Send Invite\n          </v-btn>\n        </v-card-actions>\n      </v-card>\n    </div>\n  </div>\n</template>\n\n<script lang=\"ts\">\nimport {mapGetters} from 'vuex';\nimport Form from 'vform';\nimport {EventBus} from '@/plugins/eventBus';\nimport {each, get, map, remove} from 'lodash';\nimport {useSubscription} from '@/composables/useSubscription';\n\n\nexport default {\n  name: 'SettingsEmployeeNew',\n\n  setup() {\n    const {seatLimitReached, seatLimitReachedMessage} = useSubscription()\n    return {\n      seatLimitReached,\n      seatLimitReachedMessage,\n    };\n  },\n\n  data() {\n    return {\n      newTeamMemberFormValid: false,\n      selectAllPermissions: true,\n      form: new Form({\n        first_name: '',\n        last_name: '',\n        email: '',\n        permissions: [],\n      }),\n    };\n  },\n\n  computed: {\n    ...mapGetters({\n      possiblePermissions: 'app/possiblePermissions',\n      employee: 'company/employee',\n      registerFormRules: 'company/registerFormRules',\n    }),\n\n    filteredPermissions() {\n      const perms = {\n        customers: [],\n        users: [],\n        listings: [],\n        orders: [],\n        settings: [],\n        turo: [],\n      };\n\n      const allPermissions = [...this.possiblePermissions];\n\n      each(perms, (p, i) => {\n        perms[i] = remove(allPermissions, (p) => p.name.includes(i));\n      });\n      perms.misc = allPermissions;\n\n      return perms;\n    },\n\n    employeePermissions: {\n      get() {\n        const employee = this.$store.getters['company/employee'];\n        return employee?.permissions || [];\n      },\n      set(value) {\n        this.$store.commit('company/SET_EMPLOYEE_PERMISSIONS', value);\n      },\n    },\n  },\n\n  watch: {\n    possiblePermissions() {\n      this.form.permissions = map(this.possiblePermissions, (p) => p.name);\n    },\n\n    selectAllPermissions: {\n      immediate: true,\n      handler(newData) {\n        if (newData) {\n          this.form.permissions = map(this.possiblePermissions, (p) => p.name);\n        } else {\n          this.form.permissions = [];\n        }\n      },\n    },\n  },\n\n  methods: {\n    formatTitles(word) {\n      if (!word) return '';\n      const title = word.split('_');\n      return title.map((word) => word[0].toUpperCase() + word.substring(1)).join(' ');\n    },\n    async inviteNewTeamMember() {\n      try {\n        const response = await this.form.post('/v1/employees');\n        if (response.status === 200) {\n          if (get(response, 'data.company')) {\n            this.$store.commit('company/SET_COMPANY', get(response, 'data.company'));\n          }\n\n          EventBus.$emit('SystemMessage', {\n            type: 'success',\n            message: 'Employee invited',\n          });\n          this.$router.push({name: 'settings.account'}).catch(() => {\n          });\n        }\n      } catch (er) {\n        console.dir(er);\n      }\n    },\n  },\n};\n</script>\n","<template>\n  <div>\n    <div v-if=\"!company.init\" class=\"container\">\n      <div class=\"grid grid-cols-3\">\n        <div>\n          <div class=\"max-w-sm animate-pulse p-5\" role=\"status\">\n            <div class=\"h-2.5 bg-gray-200 rounded-full dark:bg-gray-700 w-48 mb-4\"></div>\n          </div>\n        </div>\n        <div class=\"col-span-2\">\n          <v-card variant=\"flat\">\n            <v-card-text>\n              <div class=\"max-w-sm animate-pulse p-5\" role=\"status\">\n                <div class=\"h-2.5 bg-gray-200 rounded-full dark:bg-gray-700 w-48 mb-4\"></div>\n                <div class=\"h-2 bg-gray-200 rounded-full dark:bg-gray-700 max-w-[360px] mb-2.5\"></div>\n                <div class=\"h-2 bg-gray-200 rounded-full dark:bg-gray-700 mb-2.5\"></div>\n                <div class=\"h-2 bg-gray-200 rounded-full dark:bg-gray-700 max-w-[330px] mb-2.5\"></div>\n                <div class=\"h-2 bg-gray-200 rounded-full dark:bg-gray-700 max-w-[300px] mb-2.5\"></div>\n                <div class=\"h-2 bg-gray-200 rounded-full dark:bg-gray-700 max-w-[360px]\"></div>\n                <span class=\"sr-only\">Loading...</span>\n              </div>\n            </v-card-text>\n            <v-card-actions>\n              <v-spacer/>\n              <div class=\"max-w-sm animate-pulse p-5\" role=\"status\">\n                <div class=\"h-2.5 bg-gray-200 rounded-full dark:bg-gray-700 w-48 mb-4\"></div>\n                <span class=\"sr-only\">Loading...</span>\n              </div>\n            </v-card-actions>\n          </v-card>\n        </div>\n      </div>\n    </div>\n    <div v-else-if=\"!employee.found\">\n      Employee not found\n    </div>\n    <div v-else>\n      <div class=\"grid grid-cols-1 md:grid-cols-3 mb-5\">\n        <div>\n          <div class=\"setting-section-description\">\n            <h3 class=\"text-lg font-medium text-gray-900 dark:text-gray-100\">Account</h3>\n          </div>\n        </div>\n        <div class=\"col-span-1\">\n          <v-card max-width=\"100%\" variant=\"flat\">\n            <v-card-text>\n              <div class=\"flex flex-col sm:flex-row\">\n                <div class=\"flex flex-grow h-100 content-center\">\n                  <v-avatar\n                    class=\"shadow-sm\"\n                    color=\"primary\"\n                    size=\"40\"\n                  >\n                    <span class=\"text-white font-medium\">{{ employeeInitials(employee) }}</span>\n                  </v-avatar>\n                  <div class=\"ml-4\">\n                    <div class=\"flex items-center gap-2\">\n                      <span class=\"text-gray-900 dark:text-gray-100 font-medium\">\n                        {{ employee.name }}\n                      </span>\n                      <v-chip\n                        v-if=\"employee.email === user.email\"\n                        class=\"text-xs\"\n                        color=\"primary\"\n                        size=\"small\"\n                        variant=\"outlined\"\n                      >\n                        Account Owner\n                      </v-chip>\n                    </div>\n                    <div class=\"text-sm text-gray-500 dark:text-gray-400 mt-1\">\n                      {{ employee.email }}\n                    </div>\n                    <div class=\"text-sm text-gray-500 dark:text-gray-400\">\n                      {{ employee.phone }}\n                    </div>\n                  </div>\n                </div>\n              </div>\n\n              <v-form v-if=\"editAccountForm\" class=\"mt-10\">\n                <div class=\"\">\n                  <div class=\"\">\n                    <v-text-field\n                      v-model=\"employeeClone.email\"\n                      class=\"mb-4\"\n                      label=\"Email\"\n                      variant=\"outlined\"\n                    />\n                  </div>\n                </div>\n                <div class=\"\">\n                  <div class=\"mb-4\">\n                    <v-text-field\n                      v-model=\"employeeClone.first_name\"\n                      label=\"First Name\"\n                      variant=\"outlined\"\n                    />\n                  </div>\n                  <div class=\"mb-4\">\n                    <v-text-field\n                      v-model=\"employeeClone.last_name\"\n                      label=\"Last Name\"\n                      variant=\"outlined\"\n                    />\n                  </div>\n                </div>\n                <div class=\"\">\n                  <div class=\"\">\n                    <v-text-field\n                      v-model=\"employeeClone.phone\"\n                      label=\"Phone\"\n                      variant=\"outlined\"\n                    />\n                  </div>\n                  <div class=\"\">\n                  </div>\n                </div>\n              </v-form>\n            </v-card-text>\n            <v-card-actions class=\"flex flex-col sm:flex-row justify-end gap-2\">\n              <v-btn v-if=\"editAccountForm\" size=\"small\" variant=\"text\" @click=\"editAccountForm = false;\">\n                Cancel\n              </v-btn>\n              <v-btn v-if=\"editAccountForm\" @click=\"saveCompanyEmployeeInit()\">\n                Save\n              </v-btn>\n              <v-btn v-if=\"!editAccountForm\" size=\"small\" variant=\"text\" @click=\"editAccountForm = true;\">\n                edit\n              </v-btn>\n            </v-card-actions>\n          </v-card>\n        </div>\n      </div>\n\n      <v-divider class=\"my-6 md:my-10\" opacity=\"50\"/>\n\n      <div class=\"grid grid-cols-1 md:grid-cols-3 my-5\">\n        <div>\n          <div class=\"setting-section-description\">\n            <h3 class=\"text-lg font-medium text-gray-900 dark:text-gray-100\">Account Status</h3>\n            <div class=\"feature-description\">\n              Manage team member access by activating or deactivating accounts as needed.<br>\n\n              When you deactivate a team member, their seat becomes available in your plan's total seat allocation.\n            </div>\n          </div>\n        </div>\n        <div class=\"col-span-1\">\n          <v-card max-width=\"100%\" variant=\"flat\">\n            <v-card-title>\n              <span v-if=\"!employee.email_verified_at\">Invite Pending</span>\n              <span v-else>Confirmed</span>\n            </v-card-title>\n\n            <v-card-text>\n              This team member occupies one seat in your plan's allocation. They will gain access to your Fleetwire\n              account once they accept the invitation sent to <strong>{{ employee.email }}</strong>\n            </v-card-text>\n\n            <v-card-actions class=\"flex flex-col sm:flex-row justify-between gap-2\">\n              <v-btn\n                v-if=\"!employee.email_verified_at\"\n                color=\"grey\"\n                variant=\"text\"\n                @click=\"sendEmployeeInvite()\"\n              >\n                Resend invite\n              </v-btn>\n              <v-btn :disabled=\"currentEmployeeIsMe\" color=\"error\" size=\"small\" variant=\"text\" @click=\"deleteEmployee()\">\n                {{ $t('deactivate') }}\n              </v-btn>\n            </v-card-actions>\n          </v-card>\n        </div>\n      </div>\n\n      <v-divider class=\"my-6 md:my-10\" opacity=\"50\"/>\n\n      <div class=\"grid grid-cols-1 md:grid-cols-3 my-5\">\n        <div>\n          <div class=\"setting-section-description\">\n            <h3 class=\"text-lg font-medium text-gray-900 dark:text-gray-100\">Permissions</h3>\n          </div>\n        </div>\n        <div class=\"col-span-1\">\n          <v-card :disabled=\"form.busy\" max-width=\"100%\" variant=\"flat\">\n            <v-card-text>\n              <v-checkbox\n                v-model=\"selectAllPermissions\"\n                :indeterminate=\"employeePermissions.length !== 0 && employeePermissions.length < possiblePermissions.length\"\n                class=\"mb-4\"\n                color=\"accent-4\"\n                label=\"Select All\"\n              />\n\n              <div v-for=\"(item, category) in filteredPermissions\" :key=\"`title-${item.name}`\" class=\"mb-6\">\n                <v-card-title class=\"text-base\">{{ formatTitles(category) }}</v-card-title>\n                <template v-for=\"(perm, index) in item\" :key=\"`item${category}-${index}`\">\n                  <v-checkbox\n                    v-model=\"employeePermissions\"\n                    :label=\"perm.name\"\n                    :value=\"perm.name\"\n                    class=\"mb-1\"\n                    color=\"accent-4\"\n                    density=\"compact\"\n                    hide-details\n                  ></v-checkbox>\n                </template>\n              </div>\n            </v-card-text>\n\n            <v-card-actions class=\"flex justify-end\">\n              <v-btn :loading=\"form.busy\" color=\"primary\" @click=\"saveEmployee\">\n                {{ $t('save') }}\n              </v-btn>\n            </v-card-actions>\n          </v-card>\n        </div>\n      </div>\n\n      <v-divider class=\"my-6 md:my-10\" opacity=\"50\"/>\n\n      <div class=\"grid grid-cols-1 md:grid-cols-3 my-5\">\n        <div>\n          <div class=\"setting-section-description\">\n            <h3 class=\"text-lg font-medium text-gray-900 dark:text-gray-100\">Roles</h3>\n          </div>\n        </div>\n        <div class=\"col-span-1\">\n          <v-card :disabled=\"form.busy\" max-width=\"100%\" variant=\"flat\">\n            <v-card-text>\n              <div v-for=\"(item) in availableRoles\" :key=\"`title-${item.title}`\" class=\"mb-2\">\n                <v-checkbox\n                  v-model=\"employeeRoles\"\n                  :disabled=\"currentEmployeeIsMe\"\n                  :label=\"item.title\"\n                  :value=\"item.name\"\n                  color=\"accent-4\"\n                  density=\"compact\"\n                  hide-details\n                ></v-checkbox>\n              </div>\n            </v-card-text>\n\n            <v-card-actions class=\"flex justify-end\">\n              <v-btn :loading=\"form.busy\" color=\"primary\" @click=\"saveEmployee\">\n                {{ $t('save') }}\n              </v-btn>\n            </v-card-actions>\n          </v-card>\n        </div>\n      </div>\n    </div>\n\n    <v-dialog v-model=\"deleteConfirmDialog\" max-width=\"400\">\n      <v-card>\n        <v-alert v-if=\"currentEmployeeIsMe\" class=\"card-alert-full\" type=\"warning\">\n          You can not delete yourself\n        </v-alert>\n        <v-card-title class=\"text-h5\">Are you sure?</v-card-title>\n        <v-card-text>\n          You are about to delete this employee.\n        </v-card-text>\n        <v-card-actions>\n          <v-spacer/>\n          <v-btn color=\"grey\" size=\"small\" variant=\"text\" @click=\"deleteConfirmDialog = false\">\n            {{ $t('nevermind') }}\n          </v-btn>\n          <v-btn :disabled=\"currentEmployeeIsMe\" :loading=\"form.busy\" color=\"red text-white\" @click=\"deleteEmployeeConfirmed()\">\n            {{ $t('confirm') }}\n          </v-btn>\n        </v-card-actions>\n      </v-card>\n    </v-dialog>\n  </div>\n</template>\n\n<script lang=\"ts\">\nimport {nextTick} from 'vue';\nimport {mapActions, mapGetters} from 'vuex';\nimport {clone, each, get, map, remove} from 'lodash';\nimport {EventBus} from '@/plugins/eventBus';\nimport Form from 'vform';\nimport {useCompany} from '@/composables/useCompany';\nimport {push} from 'notivue'\n\nconst PERMISSION_ORDER = ['view', 'add', 'edit', 'cancel', 'delete', 'manage'];\n\n\nexport default {\n  name: 'SettingsEmployeeSingle',\n\n  setup() {\n    const {company} = useCompany();\n    return {\n      company,\n    };\n  },\n\n  data() {\n    return {\n      availableRoles: [\n        {\n          name: 'company_admin',\n          title: 'Company Admin',\n          description: 'The company admin',\n        },\n      ],\n      deleteConfirmDialog: false,\n      selectAllPermissions: false,\n      form: new Form(),\n      editAccountForm: false,\n      employeeClone: {\n        first_name: null,\n        last_name: null,\n        phone: null,\n        email: null,\n      },\n      permissionDescriptions: {\n        orders_adjust_taxes: {\n          title: 'Adjust Taxes',\n          description: 'Allows the employee to adjust taxes on orders',\n        },\n      },\n      admin_approvals: {\n        customers_edit: false,\n        customers_delete: true,\n      },\n    };\n  },\n\n  watch: {\n    employee: {\n      immediate: true,\n      handler(employee) {\n        if (employee.uuid) {\n          this.employeeClone = clone(employee);\n        }\n      },\n    },\n    selectAllPermissions: {\n      immediate: true,\n      handler(newData) {\n        if (newData) {\n          this.employeePermissions = map(this.possiblePermissions, (p) => p.name);\n        } else {\n          this.employeePermissions = [];\n        }\n      },\n    },\n  },\n\n  mounted() {\n    if (this.possiblePermissions.length === this.employeePermissions.length) {\n      this.selectAllPermissions = true;\n    }\n  },\n\n  created() {\n    this.fetchCompanyEmployee();\n    EventBus.$on('employee-updated-success', () => {\n      this.editAccountForm = false;\n      this.fetchCompanyEmployee();\n    });\n  },\n\n  computed: {\n    ...mapGetters({\n      user: 'auth/user',\n      possiblePermissions: 'app/possiblePermissions',\n      employee: 'company/employee',\n    }),\n\n    filteredPermissions(): Record<string, any> {\n      const permissions = {\n        customers: [],\n        users: [],\n        listings: [],\n        orders: [],\n        settings: [],\n        turo: [],\n        misc: [],\n      };\n\n      const allPermissions = [...this.possiblePermissions];\n\n      each(permissions, (p, i) => {\n        permissions[i] = remove(allPermissions, (p) => p.name.includes(i));\n      });\n      permissions.misc = allPermissions;\n\n      each(permissions, (p, i) => {\n        // order each permission group by the order in PERMISSION_ORDER\n        // e.g. customers_view should be first in the list because PERMISSION_ORDER[0] === 'view'\n        // any permissions that are not in PERMISSION_ORDER will be sorted alphabetically after\n        permissions[i] = p.sort((a, b) => {\n          const aIndex = PERMISSION_ORDER.indexOf(a.name.split('_')[1]);\n          const bIndex = PERMISSION_ORDER.indexOf(b.name.split('_')[1]);\n\n          if (aIndex === -1 && bIndex === -1) {\n            return a.name.localeCompare(b.name);\n          }\n          if (aIndex === -1) {\n            return 1;\n          }\n          if (bIndex === -1) {\n            return -1;\n          }\n\n          return aIndex - bIndex;\n        });\n      });\n\n      return permissions;\n    },\n\n    currentEmployeeIsMe() {\n      return this.employee.uuid === this.user.uuid;\n    },\n\n    employeePermissions: {\n      get() {\n        const employee = this.$store.getters['company/employee'];\n        return get(employee, 'permissions', []);\n      },\n      set(value) {\n        this.$store.commit('company/SET_EMPLOYEE_PERMISSIONS', value);\n      },\n    },\n    employeeRoles: {\n      get() {\n        const employee = this.$store.getters['company/employee'];\n        return get(employee, 'roles', []);\n      },\n      set(value) {\n        this.$store.commit('company/SET_EMPLOYEE_ROLES', value);\n      },\n    },\n  },\n\n  methods: {\n    ...mapActions({\n      saveCompanyEmployee: 'company/saveEmployee',\n    }),\n    checkPermission(perm) {\n      nextTick(() => {\n        const turnOn = this.employeePermissions.includes(perm.name);\n\n        if (perm.name.includes('_view') && !turnOn) {\n          let otherPerms = this.possiblePermissions.filter((p) => p.name.includes(perm.name.split('_')[0]) && !p.name.includes('_view'));\n          otherPerms = map(otherPerms, (p) => p.name);\n          // remove all the other permissions from the employeePermissions array\n          this.employeePermissions = this.employeePermissions.filter((p) => !otherPerms.includes(p));\n        }\n\n        const topic = perm.name.split('_')[0];\n        console.dir(topic);\n\n        if (turnOn) {\n          const viewPerm = this.employeePermissions.includes(`${topic}_view`);\n          if (!viewPerm) {\n            this.employeePermissions.push(`${topic}_view`);\n          }\n        }\n      });\n    },\n    saveCompanyEmployeeInit() {\n      const employeeData = {};\n\n      if (this.employeeClone.first_name !== this.employee.first_name) {\n        employeeData.first_name = this.employeeClone.first_name;\n      }\n      if (this.employeeClone.last_name !== this.employee.last_name) {\n        employeeData.last_name = this.employeeClone.last_name;\n      }\n      if (this.employeeClone.phone !== this.employee.phone) {\n        employeeData.phone = this.employeeClone.phone;\n      }\n      if (this.employeeClone.email !== this.employee.email) {\n        employeeData.email = this.employeeClone.email;\n      }\n\n      if (Object.keys(employeeData).length === 0 && employeeData.constructor === Object) {\n        return;\n      }\n\n      this.saveCompanyEmployee({\n        employee_uuid: this.$route.params.e_id,\n        data: employeeData,\n      });\n    },\n    formatTitles(word: string) {\n      if (!word) return '';\n      const title = word.split('_');\n      return title.map((word) => word[0].toUpperCase() + word.substring(1)).join(' ');\n    },\n    async fetchCompanyEmployee() {\n      try {\n        const response = await this.form.get(`/v1/employees/${this.$route.params.e_id}`);\n\n        this.$store.commit('company/SET_COMPANY_EMPLOYEE', get(response, 'data.employee'));\n        this.form = new Form(get(response, 'data.employee'));\n      } catch (er) {\n        console.dir(er);\n      }\n    },\n\n    async saveEmployee() {\n      try {\n        this.form = new Form(this.employee);\n        const response = await this.form.put(`/v1/employees/${this.employee.uuid}`);\n        this.$store.commit('company/SET_COMPANY_EMPLOYEE', response.data.employee);\n        push.success({\n          message: 'Company employee saved',\n        });\n\n      } catch (er) {\n        console.dir(er);\n      }\n    },\n\n    async deleteCompanyEmployee() {\n      try {\n        this.form = new Form();\n        const response = await this.form.delete(`/v1/employees/${this.employee.uuid}`);\n\n        if (get(response, 'data.company')) {\n          this.$store.commit('company/SET_COMPANY', get(response, 'data.company'));\n        }\n        push.success({\n          message: 'Company employee deleted',\n        });\n        this.$router.push({name: 'settings.account'}).catch(() => {\n        });\n      } catch (er) {\n        console.dir(er);\n      }\n    },\n\n    sendEmployeeInvite() {\n      console.dir('sendEmployeeInvite');\n    },\n\n    deleteEmployee() {\n      this.deleteConfirmDialog = true;\n    },\n\n    deleteEmployeeConfirmed() {\n      this.deleteConfirmDialog = false;\n      this.deleteCompanyEmployee(this.employee);\n    },\n\n    employeeInitials(employee) {\n      let acronym = '';\n      if (employee.first_name && employee.last_name) {\n        acronym = employee.first_name.slice(0, 1) + employee.last_name.slice(0, 1);\n      } else {\n        let matches = employee.name.match(/\\b(\\w)/g);\n\n        if (matches && matches.length > 2) {\n          matches = matches.slice(0, 2);\n          acronym = matches.join('');\n        }\n      }\n      return acronym;\n    },\n  },\n\n  beforeUnmount() {\n    EventBus.$off('employee-updated-success');\n    this.$store.commit('company/RESET_EMPLOYEE');\n  },\n};\n</script>\n","<template>\n  <div>\n    <router-view/>\n  </div>\n</template>\n","<template>\n  <div>\n    <v-card>\n      <v-card-title class=\"py-4\">\n        <div class=\"flex items-center\">\n          <h1 class=\"text-xl font-semibold\">Branches</h1>\n          <v-spacer/>\n          <v-btn\n            :to=\"{name: 'settings.fleet.branches.new'}\"\n            class=\"text-decoration-none\"\n            color=\"primary\"\n            size=\"small\"\n          >\n            Add Branch\n          </v-btn>\n        </div>\n      </v-card-title>\n      <v-card-text>\n        <p class=\"text-sm text-gray-600 mb-6\">\n          Create and manage multiple fleet locations to organize your listings, extras, and pickup/return locations.\n        </p>\n        <div class=\"overflow-x-auto rounded-lg border border-gray-200\">\n          <table class=\"w-full text-sm text-left text-gray-500 dark:text-gray-400\">\n            <thead class=\"text-xs text-gray-700 uppercase bg-gray-50 dark:bg-gray-700 dark:text-gray-400\">\n            <tr>\n              <th class=\"px-6 py-4 whitespace-nowrap\" scope=\"col\">#</th>\n              <th class=\"px-6 py-4 whitespace-nowrap\" scope=\"col\">Name</th>\n              <th class=\"px-6 py-4 whitespace-nowrap\" scope=\"col\">Branch Location</th>\n              <th class=\"px-6 py-4 whitespace-nowrap\" scope=\"col\">Default Pickup Location</th>\n              <th class=\"px-6 py-4 whitespace-nowrap\" scope=\"col\">Default Return Location</th>\n            </tr>\n            </thead>\n            <tbody class=\"divide-y divide-gray-200\">\n            <tr v-for=\"(branch, index) in branches\" :key=\"branch.uuid\" class=\"hover:bg-gray-50\">\n              <td class=\"px-6 py-4 whitespace-nowrap\">{{ index + 1 }}</td>\n              <th class=\"px-6 py-4 font-medium text-gray-900 whitespace-nowrap dark:text-white\" scope=\"row\">\n                <router-link :to=\"{name: 'settings.fleet.branches.single', params: {uuid: branch.uuid}}\" class=\"hover:underline\">\n                  {{ branch.name }}\n                </router-link>\n              </th>\n              <td class=\"px-6 py-4 whitespace-nowrap\">\n                <span v-if=\"branchLocationName(branch)\" v-tippy=\"branchLocationName(branch)\">\n                  {{ branchLocationLine1(branch) }}\n                </span>\n                <span v-else>\n                  {{ branch.pickup_location }}\n                </span>\n              </td>\n              <td class=\"px-6 py-4 whitespace-nowrap\">{{ branch.pickup_location }}</td>\n              <td class=\"px-6 py-4 whitespace-nowrap\">{{ branch.return_location }}</td>\n            </tr>\n            </tbody>\n          </table>\n        </div>\n      </v-card-text>\n    </v-card>\n  </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport {onMounted} from 'vue';\nimport {TenantBranch} from '@/types';\nimport {useBranch} from '@/composables/useBranch';\n\nconst {branches, getFleetBranches} = useBranch();\n\nconst branchLocationName = (branch: TenantBranch) => {\n  return branch?.location?.name;\n};\n\nconst branchLocationLine1 = (branch: TenantBranch) => {\n  return branch?.location?.address_line1;\n};\n\nonMounted(() => {\n  getFleetBranches();\n});\n</script>\n\n","<template>\n  <div>\n    <v-card :disabled=\"fleetLoading.createBranch\" :loading=\"fleetLoading.createBranch\">\n      <v-card-title>\n        New branch\n      </v-card-title>\n      <v-card-text class=\"mt-3\">\n        <v-form v-model=\"branchForm\">\n          <div class=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\n            <v-text-field\n              v-model=\"currentWorkingBranch.name\"\n              class=\"w-full\"\n              label=\"Name\"\n              name=\"name\"\n              required\n              variant=\"outlined\"\n            />\n            <v-text-field\n              v-model=\"currentWorkingBranch.email\"\n              class=\"w-full\"\n              label=\"Email\"\n              required\n              variant=\"outlined\"\n            />\n          </div>\n\n          <div class=\"grid grid-cols-1 md:grid-cols-2 gap-4 mt-4\">\n            <v-select\n              v-model=\"currentWorkingBranch.document\"\n              :items=\"documents\"\n              class=\"w-full\"\n              item-title=\"name\"\n              item-value=\"uuid\"\n              label=\"Rental Agreement\"\n              return-object\n              variant=\"outlined\"\n            >\n              <template v-slot:item=\"{ props, item }\">\n                <v-list-item :subtitle=\"item.raw.uuid\" v-bind=\"props\"></v-list-item>\n              </template>\n            </v-select>\n            <v-autocomplete\n              v-model=\"currentWorkingBranch.timezone\"\n              :items=\"timezones\"\n              :label=\"$t('timezone')\"\n              :persistent-hint=\"true\"\n              class=\"w-full\"\n              hint=\"This timezone will be used for listings when a branch is assigned to it.\"\n              variant=\"outlined\"\n            />\n          </div>\n\n          <div class=\"mt-8 mb-10 pt-4 border-t\">\n            <h4 class=\"text-lg font-semibold mb-4\">Location Settings</h4>\n            <MapBoxAddressAutofill\n              class=\"w-full\"\n              @locationData=\"addLocationData\"\n            />\n          </div>\n        </v-form>\n        <div v-if=\"formErrors\" class=\"space-y-2\">\n          <v-alert v-for=\"(error, index) in formErrors\" :key=\"index\" type=\"error\" variant=\"outlined\">\n            {{ error[0] }}\n          </v-alert>\n        </div>\n      </v-card-text>\n      <v-divider/>\n      <v-card-actions>\n        <v-spacer/>\n        <v-btn variant=\"text\" @click=\"router.push({ name: 'settings.fleet.branches' }).catch(() => {});\">Cancel</v-btn>\n        <v-btn :loading=\"fleetLoading.createBranch\" @click=\"createFleetBranch(currentWorkingBranch)\">Save</v-btn>\n      </v-card-actions>\n    </v-card>\n  </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport {computed, onBeforeMount, ref} from 'vue';\nimport {guessTimeZone, timezones} from '@/utils/dates';\nimport {useStore} from 'vuex';\nimport MapBoxAddressAutofill from '@/components/widgets/MapBoxAddressAutofill.vue';\nimport {useRouter} from 'vue-router';\nimport {TenantBranch, TenantBranchLocation} from '@/types';\nimport {TemplateData} from '@/store/modules/document';\nimport {useTemplate} from '@/composables/useTemplate';\nimport {useBranch} from '@/composables/useBranch';\n\nconst router = useRouter();\nconst {getters} = useStore();\n\nconst {fetchTemplates, documentTemplates} = useTemplate();\nconst {createBranch} = useBranch();\n\nconst fleetLoading = computed(() => getters['fleet/loading']);\nconst documents = computed(() => {\n  const templates = documentTemplates.value?.filter((t: TemplateData) => t?.documents);\n\n  return templates.map((t: TemplateData) => ({\n    name: t?.documents?.name,\n    uuid: t?.documents?.uuid,\n  }));\n});\n\nconst currentWorkingBranch = ref<TenantBranch>({\n  active: true,\n  short_code: '',\n  set: false,\n  name: '',\n  uuid: '',\n  email: '',\n  pickup_location: '',\n  return_location: '',\n  pickup_location_id: '',\n  return_location_id: '',\n  timezone: '',\n  document: null,\n  location_id: '',\n  location: null,\n  order: null,\n  document_set: null,\n});\nconst branchForm = ref(null);\nconst formErrors = ref(null);\n\n\nconst createFleetBranch = async (branch: TenantBranch) => {\n  await createBranch(branch).then(() => {\n    router.push({name: 'settings.fleet.branches'}).catch(() => {\n    });\n  }).catch((error) => {\n    console.dir(error);\n    formErrors.value = error.response.data.errors;\n  });\n};\n\nconst addLocationData = (locationData: TenantBranchLocation) => {\n  currentWorkingBranch.value.location = locationData;\n};\n\nonBeforeMount(() => {\n  fetchTemplates();\n\n  currentWorkingBranch.value.timezone = guessTimeZone;\n});\n</script>\n","<template>\n  <div>\n    <v-card :disabled=\"branchLoading.updateBranch || branchLoading.fetchBranch\" :loading=\"branchLoading.fetchBranch || branchLoading.updateBranch\">\n      <v-card-title>\n        Branch: {{ branch?.name }}\n      </v-card-title>\n      <v-card-text class=\"mt-3\">\n        <v-form v-if=\"currentWorkingBranch.set\">\n          <div class=\"space-y-6\">\n            <!-- Name Field -->\n            <div class=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\n              <div v-show=\"!editBranch.name\" class=\"flex items-center space-x-2\">\n                <span class=\"font-bold\">Name:</span>\n                <span>{{ branch.name }}</span>\n                <v-btn size=\"small\" variant=\"text\" @click=\"editBranch.name = !editBranch.name\">\n                  <v-icon size=\"small\">mdi-pencil</v-icon>\n                </v-btn>\n              </div>\n              <v-text-field\n                v-show=\"editBranch.name\"\n                v-model=\"currentWorkingBranch.name\"\n                class=\"w-full\"\n                label=\"Name\"\n                variant=\"outlined\"\n              />\n            </div>\n\n            <!-- Email Field -->\n            <div class=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\n              <div class=\"flex items-center space-x-2\">\n                <span class=\"font-bold\">Email:</span>\n                <span>{{ branch.email }}</span>\n                <v-btn size=\"small\" variant=\"text\" @click=\"editBranch.email = !editBranch.email\">\n                  <v-icon size=\"small\">mdi-pencil</v-icon>\n                </v-btn>\n              </div>\n              <v-text-field\n                v-show=\"editBranch.email\"\n                v-model=\"currentWorkingBranch.email\"\n                class=\"w-full\"\n                label=\"Email\"\n                variant=\"outlined\"\n              />\n            </div>\n\n            <!-- Rental Agreement Field -->\n            <div class=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\n              <div class=\"flex items-center space-x-2\">\n                <span class=\"font-bold\">Rental Agreement:</span>\n                <span>{{ documentName(document) }}</span>\n                <v-btn size=\"small\" variant=\"text\" @click=\"editBranch.agreement = !editBranch.agreement\">\n                  <v-icon size=\"small\">mdi-pencil</v-icon>\n                </v-btn>\n              </div>\n              <v-select\n                v-show=\"editBranch.agreement\"\n                v-model=\"currentWorkingBranch.document\"\n                :items=\"documents\"\n                class=\"w-full\"\n                item-title=\"name\"\n                item-value=\"uuid\"\n                label=\"Rental Agreement\"\n                return-object\n                variant=\"outlined\"\n              >\n                <template v-slot:item=\"{ props, item }\">\n                  <v-list-item :subtitle=\"item.raw.uuid\" v-bind=\"props\"/>\n                </template>\n              </v-select>\n            </div>\n\n            <!-- Timezone Field -->\n            <div class=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\n              <div class=\"flex items-center space-x-2\">\n                <span class=\"font-bold\">Timezone:</span>\n                <span>{{ currentWorkingBranch.timezone }}</span>\n                <v-btn size=\"small\" variant=\"text\" @click=\"editBranch.timezone = !editBranch.timezone\">\n                  <v-icon size=\"small\">mdi-pencil</v-icon>\n                </v-btn>\n              </div>\n              <v-autocomplete\n                v-show=\"editBranch.timezone\"\n                v-model=\"currentWorkingBranch.timezone\"\n                :items=\"timezones\"\n                :label=\"$t('timezone')\"\n                :persistent-hint=\"true\"\n                class=\"w-full\"\n                hint=\"This will set all your listings timezone under this branch\"\n                variant=\"outlined\"\n              />\n            </div>\n\n            <!-- Location Settings -->\n            <div class=\"mt-8 pt-4 border-t\">\n              <h4 class=\"text-lg font-semibold mb-4\">Location Settings</h4>\n\n              <!-- Branch location -->\n              <div class=\"space-y-4\">\n                <div class=\"flex items-center space-x-2\">\n                  <span class=\"font-bold\">Branch Location</span>\n                  <v-btn size=\"small\" variant=\"text\" @click=\"changeLocationInit()\">\n                    <v-icon size=\"small\">mdi-pencil</v-icon>\n                  </v-btn>\n                </div>\n\n                <div v-if=\"branchLocationName && !editingLocation\" class=\"space-y-4\">\n                  <p>{{ branchLocationName }}</p>\n                  <v-img\n                    :src=\"locationStaticMap\"\n                    class=\"rounded-lg\"\n                    height=\"200\"\n                    width=\"300\"\n                  />\n                </div>\n                <div v-else>\n                  <MapBoxAddressAutofill\n                    class=\"w-full\"\n                    @locationData=\"addLocationData\"\n                  />\n                </div>\n              </div>\n\n              <!-- Pickup/Return location -->\n              <div class=\"mt-6 space-y-4\">\n                <div class=\"flex items-center space-x-2\">\n                  <span class=\"font-bold\">Pickup/Return Location:</span>\n                  <span v-if=\"pickupReturnSameAsBranch\">Same as branch</span>\n                  <span v-else>{{ branchClone.pickup_location }}</span>\n                  <v-btn size=\"small\" variant=\"text\" @click=\"editBranch.pickup_location = !editBranch.pickup_location\">\n                    <v-icon size=\"small\">mdi-pencil</v-icon>\n                  </v-btn>\n                </div>\n\n                <div v-show=\"editBranch.pickup_location\" class=\"border rounded p-4 space-y-4\">\n                  <v-checkbox\n                    v-model=\"pickupReturnSameAsBranch\"\n                    label=\"Same as branch location\"\n                  />\n                  <div v-if=\"!pickupReturnSameAsBranch\" class=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\n                    <v-text-field\n                      v-model=\"currentWorkingBranch.pickup_location\"\n                      class=\"w-full\"\n                      label=\"Default Pickup Location\"\n                      variant=\"outlined\"\n                    />\n                    <v-text-field\n                      v-model=\"currentWorkingBranch.return_location\"\n                      class=\"w-full\"\n                      label=\"Default Return Location\"\n                      variant=\"outlined\"\n                    />\n                  </div>\n                </div>\n              </div>\n            </div>\n          </div>\n        </v-form>\n        <div v-else class=\"flex justify-center items-center py-8\">Loading...</div>\n      </v-card-text>\n      <v-divider opacity=\"50\"/>\n      <v-card-actions>\n        <DeleteButton @deleteConfirmed=\"deleteFleetBranchInit()\"/>\n        <v-spacer/>\n        <v-btn variant=\"text\" @click=\"router.push({ name: 'settings.fleet.branches' }).catch(() => {});\">Back</v-btn>\n        <v-btn :loading=\"branchLoading.updateBranch\" color=\"primary\" @click=\"updateFleetBranchInit()\">Save</v-btn>\n      </v-card-actions>\n    </v-card>\n\n    <v-dialog v-model=\"matchPickupReturnLocationToBranchDialog\" width=\"400\">\n      <v-card>\n        <v-card-title>\n          Update Locations\n        </v-card-title>\n        <v-card-text>\n          Do you want to make the pickup & return locations the same as the branch location?\n        </v-card-text>\n        <v-card-actions>\n          <v-spacer/>\n          <v-btn variant=\"text\" @click=\"matchPickupReturnLocationToBranchDialog = false;\">No</v-btn>\n          <v-btn color=\"primary\" @click=\"matchPickupReturnLocationsToBranch()\">Yes</v-btn>\n        </v-card-actions>\n      </v-card>\n    </v-dialog>\n  </div>\n</template>\n\n\n<script lang=\"ts\" setup>\nimport {computed, defineAsyncComponent, onBeforeMount, onBeforeUnmount, ref, watch} from 'vue';\nimport MapBoxAddressAutofill from '@/components/widgets/MapBoxAddressAutofill.vue';\nimport {timezones} from '@/utils/dates';\nimport {useBranch} from '@/composables/useBranch';\nimport {useStore} from 'vuex';\nimport {useRouter} from 'vue-router';\nimport {TenantBranch, TenantBranchLocation} from '@/types';\nimport {DocumentType, TemplateData} from '@/store/modules/document';\nimport {useTemplate} from '@/composables/useTemplate';\n\nconst DeleteButton = defineAsyncComponent(() => import('@/components/buttons/DeleteButton.vue'));\n\n\nconst router = useRouter();\nconst store = useStore();\nconst {branch, deleteFleetBranch, getFleetBranch, branchLoading} = useBranch();\nconst {documentTemplates, fetchTemplates} = useTemplate();\n\n//\nconst currentBranchUuid = router.currentRoute.value.params.uuid as string;\nconst confirmDelete = ref(false);\nconst editingLocation = ref(false);\nconst matchPickupReturnLocationToBranchDialog = ref(false);\nconst currentWorkingBranch = ref<TenantBranch>({\n  active: true,\n  short_code: '',\n  set: false,\n  name: '',\n  uuid: '',\n  email: '',\n  pickup_location: '',\n  return_location: '',\n  pickup_location_id: '',\n  return_location_id: '',\n  timezone: '',\n  document: null,\n  location_id: '',\n  location: null,\n  order: null,\n  document_set: null,\n});\nconst branchClone = ref<TenantBranch>({\n  active: true,\n  short_code: '',\n  set: false,\n  name: '',\n  uuid: '',\n  email: '',\n  pickup_location: '',\n  return_location: '',\n  pickup_location_id: '',\n  return_location_id: '',\n  timezone: '',\n  document: null,\n  location_id: '',\n  location: null,\n  order: null,\n  document_set: null,\n});\nconst pickupReturnSame = ref(true);\nconst pickupReturnSameAsBranch = ref(true);\nconst editBranch = ref({\n  name: false,\n  email: false,\n  pickup_location: false,\n  agreement: false,\n  timezone: false,\n});\n\n// computed\nconst missingNewLocationInfo = computed(() => !branchClone.value.location);\nconst documents = computed(() => {\n  if (!documentTemplates?.value) return [];\n\n  const filteredTemplates = documentTemplates.value?.filter((t: TemplateData) => t?.documents);\n\n  return filteredTemplates.map((t: TemplateData) => ({\n    name: t?.documents?.name,\n    uuid: t?.documents?.uuid,\n  }));\n});\nconst document = computed({\n  get() {\n    return currentWorkingBranch.value.document;\n  },\n  set(value) {\n    currentWorkingBranch.value.document = value;\n  },\n});\n\nconst branchLocation = computed(() => currentWorkingBranch.value?.location);\nconst branchLocationName = computed(() => branchLocation.value?.name);\n\nconst locationStaticMap = computed<string>(() => {\n  const {lat, lng} = branchLocation.value;\n\n  const pin = `pin-s+555555(${lng},${lat})`;\n  return `https://api.mapbox.com/styles/v1/mapbox/streets-v11/static/${pin}/${lng},${lat},13,0/300x200?access_token=${import.meta.env.VITE_MAPBOX_TOKEN}`;\n});\n\nconst deleteFleetBranchInit = () => {\n  deleteFleetBranch(branchClone.value.uuid).then(() => {\n    router.push({name: 'settings.fleet.branches'}).catch(() => {\n    });\n  }).catch(() => {\n    confirmDelete.value = false;\n  });\n};\n\nconst updateFleetBranch = (branch: TenantBranch) => store.dispatch('fleet/updateFleetBranch', branch).then((updatedBranch) => {\n  editingLocation.value = false;\n  branchClone.value = JSON.parse(JSON.stringify(updatedBranch));\n  currentWorkingBranch.value = branchClone.value;\n  currentWorkingBranch.value.set = true;\n});\n\nconst updateFleetBranchInit = () => {\n  if (pickupReturnSameAsBranch.value) {\n    currentWorkingBranch.value.pickup_location = currentWorkingBranch.value.location;\n    currentWorkingBranch.value.return_location = currentWorkingBranch.value.location;\n  }\n\n  updateFleetBranch(currentWorkingBranch.value);\n};\n\nwatch(branch, (branch) => {\n  if (branch?.uuid) {\n    branchClone.value = JSON.parse(JSON.stringify(branch));\n    pickupReturnSame.value = branchClone.value.pickup_location === branchClone.value.return_location;\n    pickupReturnSameAsBranch.value = (branchClone.value.pickup_location_id === branchClone.value.return_location_id\n      && branchClone.value.pickup_location_id === branchClone.value.location_id) || (branchClone.value.location_id && !branchClone.value.pickup_location_id && !branchClone.value.return_location_id);\n    currentWorkingBranch.value = branchClone.value;\n    currentWorkingBranch.value.document = branchClone.value.document;\n    currentWorkingBranch.value.set = true;\n  }\n}, {immediate: true});\n\nconst matchPickupReturnLocationsToBranch = () => {\n  matchPickupReturnLocationToBranchDialog.value = true;\n  currentWorkingBranch.value.pickup_location = currentWorkingBranch.value.location;\n  currentWorkingBranch.value.return_location = currentWorkingBranch.value.location;\n  pickupReturnSame.value = true;\n  pickupReturnSameAsBranch.value = true;\n};\n\nconst documentName = (document: DocumentType) => {\n  return document?.name || 'NA';\n};\n\nconst addLocationData = (locationData: TenantBranchLocation) => {\n  currentWorkingBranch.value.location = locationData;\n\n  if (missingNewLocationInfo.value) {\n    matchPickupReturnLocationToBranchDialog.value = true;\n  }\n};\n\nconst changeLocationInit = () => {\n  editingLocation.value = !editingLocation.value;\n};\n\nonBeforeMount(() => {\n  getFleetBranch(currentBranchUuid);\n  fetchTemplates();\n});\n\nonBeforeUnmount(() => {\n  console.dir('onBeforeUnmount');\n  store.commit('fleet/SET_COMPANY_BRANCH', {});\n  currentWorkingBranch.value = {\n    active: true,\n    short_code: '',\n    set: false,\n    name: '',\n    uuid: '',\n    email: '',\n    pickup_location: '',\n    return_location: '',\n    pickup_location_id: '',\n    return_location_id: '',\n    timezone: '',\n    document: null,\n    location_id: '',\n    location: null,\n    order: null,\n    document_set: null,\n  };\n  branchClone.value = {\n    active: true,\n    short_code: '',\n    set: false,\n    name: '',\n    uuid: '',\n    email: '',\n    pickup_location: '',\n    return_location: '',\n    pickup_location_id: '',\n    return_location_id: '',\n    timezone: '',\n    document: null,\n    location_id: '',\n    location: null,\n    order: null,\n    document_set: null,\n  };\n});\n\n</script>\n\n","<template>\n  <div>\n    <v-card :loading=\"vehicleLoading.classes\">\n      <v-card-title>\n        <div class=\"flex\">\n          Vehicle Classes\n          <v-spacer/>\n          <v-btn\n            :to=\"{name: 'settings.fleet.classes.new'}\"\n            class=\"text-decoration-none\"\n            size=\"small\"\n          >\n            Add Class\n          </v-btn>\n        </div>\n      </v-card-title>\n      <v-card-text class=\"mt-5\">\n        <!-- Desktop Table View -->\n        <div class=\"hidden md:block\">\n          <div class=\"relative overflow-x-auto shadow-md sm:rounded-lg\">\n            <table class=\"w-full text-sm text-left text-gray-500 dark:text-gray-400\">\n              <thead class=\"text-xs text-gray-700 uppercase bg-gray-50 dark:bg-gray-700 dark:text-gray-400\">\n              <tr>\n                <th class=\"px-6 py-3\" scope=\"col\">Name</th>\n                <th class=\"px-6 py-3\" scope=\"col\">Minimum Age</th>\n                <th class=\"px-6 py-3\" scope=\"col\">SIPP Code</th>\n                <th class=\"px-6 py-3\" scope=\"col\">Vehicles</th>\n                <th class=\"px-6 py-3\" scope=\"col\">Branch</th>\n                <th class=\"px-6 py-3\" scope=\"col\">\n                  <span class=\"sr-only\">Edit</span>\n                </th>\n              </tr>\n              </thead>\n              <tbody>\n              <tr v-for=\"(vehicleClass, index) in vehicleClasses\"\n                  :key=\"index\"\n                  class=\"bg-white border-b dark:bg-gray-800 dark:border-gray-700 hover:bg-gray-50 dark:hover:bg-gray-600\">\n                <th class=\"px-6 py-4 font-medium text-gray-900 whitespace-nowrap dark:text-white\" scope=\"row\">\n                  <router-link :to=\"{name: 'settings.fleet.classes.single', params: {uuid: vehicleClass.uuid}}\" class=\"underline\">\n                    {{ vehicleClass.name }}\n                  </router-link>\n                </th>\n                <td class=\"px-6 py-4\">{{ vehicleClass.minimum_age }}</td>\n                <td class=\"px-6 py-4\">{{ vehicleClass.sipp_code }}</td>\n                <td class=\"px-6 py-4\">{{ vehicleClass.vehicles_count }}</td>\n                <td class=\"px-6 py-4\">{{ branchName(vehicleClass) }}</td>\n                <td class=\"px-6 py-4 text-right\">\n                  <router-link\n                    :to=\"{name: 'settings.fleet.classes.single', params: {uuid: vehicleClass.uuid}}\"\n                    class=\"font-medium text-blue-600 dark:text-blue-500 hover:underline\"\n                  >\n                    Edit\n                  </router-link>\n                </td>\n              </tr>\n              </tbody>\n            </table>\n          </div>\n        </div>\n\n        <!-- Mobile Card View -->\n        <div class=\"md:hidden grid grid-cols-1 gap-4\">\n          <div v-for=\"(vehicleClass, index) in vehicleClasses\"\n               :key=\"index\"\n               class=\"bg-white dark:bg-gray-800 rounded-lg shadow p-4 hover:shadow-md transition-shadow\">\n            <div class=\"flex justify-between items-start mb-3\">\n              <router-link\n                :to=\"{name: 'settings.fleet.classes.single', params: {uuid: vehicleClass.uuid}}\"\n                class=\"text-lg font-medium text-blue-600 dark:text-blue-400 hover:underline\">\n                {{ vehicleClass.name }}\n              </router-link>\n              <router-link\n                :to=\"{name: 'settings.fleet.classes.single', params: {uuid: vehicleClass.uuid}}\"\n                class=\"text-sm text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-200\">\n                Edit\n              </router-link>\n            </div>\n\n            <div class=\"space-y-2 text-sm text-gray-600 dark:text-gray-300\">\n              <div class=\"flex justify-between\">\n                <span class=\"font-medium\">Minimum Age:</span>\n                <span>{{ vehicleClass.minimum_age }}</span>\n              </div>\n              <div class=\"flex justify-between\">\n                <span class=\"font-medium\">SIPP Code:</span>\n                <span>{{ vehicleClass.sipp_code }}</span>\n              </div>\n              <div class=\"flex justify-between\">\n                <span class=\"font-medium\">Vehicles:</span>\n                <span>{{ vehicleClass.vehicles_count }}</span>\n              </div>\n              <div class=\"flex justify-between\">\n                <span class=\"font-medium\">Branch:</span>\n                <span>{{ branchName(vehicleClass) }}</span>\n              </div>\n            </div>\n          </div>\n        </div>\n      </v-card-text>\n    </v-card>\n  </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport {useStore} from 'vuex';\nimport {computed, onBeforeMount} from 'vue';\nimport {VehicleClass} from '@/types';\n\nconst {getters, dispatch} = useStore();\nconst vehicleClasses = computed(() => getters['vehicles/vehicleClasses']);\nconst vehicleLoading = computed(() => getters['vehicles/vehicleLoading']);\n\nconst getVehicleClasses = () => {\n  dispatch('vehicles/getVehicleClasses');\n};\n\nconst branchName = (item: VehicleClass) => {\n  return item?.branch?.name;\n};\n\n\nonBeforeMount(() => {\n  getVehicleClasses();\n});\n</script>\n\n","<template>\n  <v-dialog v-model=\"isOpen\" :scrollable=\"true\" width=\"600\">\n    <v-card>\n      <v-card-title>SIPP</v-card-title>\n\n      <v-card-text>\n        <p class=\"mb-3 font-normal text-gray-700 dark:text-gray-400\">\n          Standard Interline Passenger Procedure (SIPP) codes are four-letter abbreviations that identify the major\n          features of a rental car. For example, a compact, two-door car with air conditioning would have a SIPP code\n          of CBMR or CBAR depending on whether it’s a manual or an automatic.\n        </p>\n        <table class=\"w-full text-sm text-left text-gray-500 dark:text-gray-400\">\n          <tbody>\n          <tr class=\"bg-white border-b dark:bg-gray-900 dark:border-gray-700\">\n            <td style=\"text-align: center;\">\n              <strong>First Letter</strong> <br/>Size of vehicle\n            </td>\n            <td>\n              <strong>C</strong> - Compact<br> <strong>D</strong> - Compact Elite<br>\n              <strong>E</strong> - Economy<br> <strong>F</strong> - Fullsize<br>\n              <strong>G</strong> - Fullsize Elite<br> <strong>H</strong> - Economy Elite<br>\n              <strong>I</strong> - Intermediate<br> <strong>J</strong> - Intermediate Elite<br>\n              <strong>L</strong> - Luxury<br> <strong>M</strong> - Mini<br> <strong>N</strong> - Mini Elite<br>\n              <strong>O</strong> - Oversize<br> <strong>P</strong> - Premium<br>\n              <strong>R</strong> - Standard Elite<br> <strong>S</strong> - Standard<br>\n              <strong>U</strong> - Premium Elite<br> <strong>W</strong> - Luxury Elite<br>\n              <strong>X</strong> - Special<br></td>\n          </tr>\n          <tr class=\"border-b bg-gray-50 dark:bg-gray-800 dark:border-gray-700\">\n            <td style=\"text-align: center;\"><strong>Second Letter<br></strong>Number of doors</td>\n            <td><strong>B</strong> - 2/3 Door<br> <strong>C</strong> - 2 or 4 Door<br>\n              <strong>D</strong> - 4/5 Door<br> <strong>E</strong> - Coupe<br> <strong>F</strong> - SUV<br>\n              <strong>G</strong> - Crossover<br> <strong>H</strong> - Motorhome<br>\n              <strong>J</strong> - Open-Air All Terrain<br> <strong>K</strong> - Commercial Van / Truck<br>\n              <strong>L</strong> - Limousine<br> <strong>M</strong> - Monospace<br> <strong>N</strong> - Roadster<br>\n              <strong>P</strong> - Pickup Regular Cab<br> <strong>Q</strong> - Pickup Extended Cab<br>\n              <strong>R</strong> - Recreational<br> <strong>S</strong> - Sport<br>\n              <strong>T</strong> - Convertible<br> <strong>V</strong> - Passenger Van<br>\n              <strong>W</strong> - Wagon / Estate<br> <strong>X</strong> - Special<br>\n              <strong>Y</strong> - Two-Wheel Drive<br> <strong>Z</strong> - Special Offer Car<br></td>\n          </tr>\n          <tr class=\"bg-white border-b dark:bg-gray-900 dark:border-gray-700\">\n            <td style=\"text-align: center;\"><strong>Third Letter</strong> <br>Transmission and drive</td>\n            <td><strong>A</strong> - Auto Drive<br> <strong>B</strong> - Auto Four-Wheel Drive<br>\n              <strong>C</strong> - Manual All-Wheel Drive<br> <strong>D</strong> - Auto All-Wheel Drive<br>\n              <strong>M</strong> - Manual Drive<br> <strong>N</strong> - Manual Four-Wheel Drive\n            </td>\n          </tr>\n          <tr class=\" bg-gray-50 dark:bg-gray-800 dark:border-gray-700\">\n            <td style=\"text-align: center;\"><strong>Fourth Letter<br></strong>Fuel and A/C<br></td>\n            <td><strong>N</strong> - Unspecified Fuel, No A/C<br> <strong>R</strong> - Unspecified Fuel, A/C<br>\n              <strong>V</strong> - Petrol, A/C<br> <strong>Z</strong> - Petrol, No A/C<br>\n              <strong>D</strong> - Diesel, A/C<br> <strong>Q</strong> - Diesel, No A/C<br>\n              <strong>E</strong> - Electric, A/C<br> <strong>C</strong> - Electric, No A/C<br>\n              <strong>H</strong> - Hybrid, A/C<br> <strong>I</strong> - Hybrid, No A/C<br>\n              <strong>L</strong> - LPG/Gas, A/C<br> <strong>S</strong> - LPG/Gas, No A/C<br>\n              <strong>M</strong> - Multi Fuel, A/C<br> <strong>F</strong> - Multi Fuel, No A/C<br>\n              <strong>A</strong> - Hydrogen, A/C<br> <strong>B</strong> - Hydrogen, No A/C<br>\n              <strong>U</strong> - Ethanol, A/C<br> <strong>X</strong> - Ethanol, No A/C\n            </td>\n          </tr>\n          </tbody>\n        </table>\n      </v-card-text>\n\n      <v-divider/>\n\n      <v-card-actions>\n        <v-spacer/>\n        <v-btn color=\"primary\" variant=\"text\" @click=\"closeDialog\">Okay</v-btn>\n      </v-card-actions>\n    </v-card>\n  </v-dialog>\n</template>\n\n<script lang=\"ts\" setup>\nimport {computed} from 'vue';\n\nconst props = defineProps({\n  modelValue: {\n    type: Boolean,\n    required: true,\n  },\n});\n\n// Emit Event\nconst emit = defineEmits(['update:modelValue']);\n\n// Close Dialog\nconst closeDialog = () => {\n  isOpen.value = false;\n};\n\n// Computed binding for the dialog\nconst isOpen = computed({\n  get: () => props.modelValue,\n  set: (value: boolean) => emit('update:modelValue', value),\n});\n</script>\n","import {useStore} from 'vuex';\nimport {computed} from 'vue';\nimport {VehicleClass} from \"@/types\";\n\nconst COLORS = ['black', 'blue', 'brown', 'gold', 'gray', 'green', 'orange', 'purple', 'red', 'silver', 'white', 'yellow', 'other'];\nconst VEHICLE_STATUSES = ['available', 'dirty', 'out of service', 'for sale', 'sold', 'new', 'reserved', 'rental', 'maintenance', 'other'];\n\nconst mapToTitleCodeArray = (statuses: string[]) => statuses.map(item => ({\n    // uppercase first letter of each word\n    title: item.split(' ').map(word => word.charAt(0).toUpperCase() + word.slice(1)).join(' '),\n    code: item\n}));\n\n\nexport function useVehicle() {\n    const store = useStore();\n\n\n    const vehicleLoading = computed(() => store.getters['vehicles/vehicleLoading']);\n    const vehicleMakes = computed(() => store.getters['vehicles/vehicleMakes']);\n    const vehicleModels = computed(() => store.getters['vehicles/vehicleModels']);\n    const vehicleColors = computed(() => mapToTitleCodeArray(COLORS));\n    const availableVehicleStatuses = computed(() => mapToTitleCodeArray(VEHICLE_STATUSES));\n    const vehicleClasses = computed(() => store.getters['vehicles/vehicleClasses']);\n    const vehicleClass = computed<VehicleClass>(() => store.getters['vehicles/vehicleClass'])\n    const vehicleClassForm = computed(() => store.getters['vehicles/vehicleClassForm']);\n    const vehicleClassCreated = computed(() => store.getters['vehicles/vehicleClassCreated']);\n\n    const getVehicleClass = (uuid: string) => {\n        return store.dispatch('vehicles/getClass', uuid);\n    }\n    const createVehicleClass = (vehicleClass: VehicleClass) => {\n        return store.dispatch('vehicles/createClass', vehicleClass);\n    }\n    const fetchVehicleMakes = () => {\n        store.dispatch('vehicles/fetchVehicleMakes');\n    }\n\n    const fetchVehicleModels = (make: string) => {\n        return store.dispatch('vehicles/fetchVehicleModels', make);\n    }\n\n    const deleteVehicleClass = (uuid: string) => {\n        return store.dispatch('vehicles/deleteClass', uuid);\n    }\n    const updateVehicleClass = (vehicleClass: VehicleClass) => {\n        return store.dispatch('vehicles/updateClass', vehicleClass);\n    }\n    const getVehicleClasses = (refresh = false) => {\n        return store.dispatch('vehicles/getVehicleClasses', refresh);\n    }\n\n    return {\n        vehicleColors,\n        availableVehicleStatuses,\n        vehicleLoading,\n        vehicleMakes,\n        vehicleModels,\n        vehicleClasses,\n        vehicleClass,\n        vehicleClassForm,\n        vehicleClassCreated,\n        fetchVehicleMakes,\n        fetchVehicleModels,\n        getVehicleClass,\n        deleteVehicleClass,\n        updateVehicleClass,\n        getVehicleClasses,\n        createVehicleClass,\n    }\n}","<template>\n  <v-card :disabled=\"vehicleLoading.class\" :loading=\"vehicleLoading.class\">\n    <v-card-title>\n      New vehicle class\n    </v-card-title>\n    <v-card-text class=\"mt-3\">\n      <v-form class=\"space-y-4\">\n        <v-text-field\n          v-model=\"currentWorkingClass.name\"\n          :error-messages=\"vehicleClassForm.errors.get('name')\"\n          class=\"w-full md:w-[300px]\"\n          label=\"Name\"\n          variant=\"outlined\"\n          @keyup=\"commit('vehicles/CLEAR_VEHICLE_FORM_ERRORS', 'name')\"\n        />\n        <div class=\"flex flex-col md:flex-row md:items-center gap-2\">\n          <v-text-field\n            v-model=\"currentWorkingClass.sipp_code\"\n            :error-messages=\"vehicleClassForm.errors.get('sipp_code')\"\n            class=\"w-full md:w-[300px]\"\n            label=\"SIPP Code\"\n            variant=\"outlined\"\n            @keyup=\"commit('vehicles/CLEAR_VEHICLE_FORM_ERRORS', 'sipp_code')\"\n          />\n          <v-btn size=\"x-small\" variant=\"text\" @click=\"openSippDialog()\">What is SIPP?</v-btn>\n        </div>\n        <v-text-field\n          v-model=\"currentWorkingClass.minimum_age\"\n          :error-messages=\"vehicleClassForm.errors.get('minimum_age')\"\n          class=\"w-full md:w-[300px]\"\n          label=\"Minimum Age\"\n          type=\"number\"\n          variant=\"outlined\"\n          @keyup=\"commit('vehicles/CLEAR_VEHICLE_FORM_ERRORS', 'minimum_age')\"\n        />\n        <div>\n          <v-select\n            v-model=\"vehicleClassBranch\"\n            :error-messages=\"vehicleClassForm.errors.get('branch')\"\n            :items=\"branchesFiltered\"\n            append-icon=\"mdi-close\"\n            class=\"fleet-branches-select w-full md:w-[300px]\"\n            label=\"Branches\"\n            variant=\"outlined\"\n            @update:modelValue=\"commit('vehicles/CLEAR_VEHICLE_FORM_ERRORS', 'branch')\"\n            @click:append=\"vehicleClassBranch = null\"\n          >\n            <template v-slot:append-item>\n              <div class=\"border-t py-5 flex justify-center\">\n                <router-link :to=\"{name: 'settings.fleet.branches'}\">\n                  <span class=\"text-sm\">Manage Fleet Branches</span>\n                </router-link>\n              </div>\n            </template>\n          </v-select>\n        </div>\n      </v-form>\n    </v-card-text>\n    <v-card-actions class=\"flex flex-wrap gap-2\">\n      <v-spacer/>\n      <div class=\"flex items-center gap-2\">\n        <v-btn size=\"small\" variant=\"text\" @click=\"cancel\">\n          Cancel\n        </v-btn>\n        <v-btn :loading=\"vehicleLoading.class\" @click=\"createVehicleClassInit\">Save</v-btn>\n      </div>\n    </v-card-actions>\n  </v-card>\n  <SippDialog v-model=\"isSippDialogOpen\"/>\n</template>\n\n<script lang=\"ts\" setup>\nimport SippDialog from '@/views/dashboard/settings/Fleet/SippDialog.vue';\nimport {computed, onBeforeMount, ref, watch} from 'vue';\nimport {useStore} from 'vuex';\nimport {useRouter} from 'vue-router';\nimport {VehicleClass} from '@/types';\nimport {useVehicle} from '@/composables/useVehicle';\nimport {useBranch} from '@/composables/useBranch';\n\nconst {dispatch, commit} = useStore();\nconst router = useRouter();\n\nconst {createVehicleClass, vehicleClassForm, vehicleLoading, vehicleClassCreated} = useVehicle();\nconst {branches, getFleetBranches} = useBranch();\n\nconst createVehicleClassInit = () => {\n  createVehicleClass(currentWorkingClass.value);\n};\n\nconst currentWorkingClass = ref<VehicleClass>({\n  name: '',\n  uuid: '',\n  minimum_age: null,\n  sipp_code: '',\n  branch: null,\n  active: true,\n  image_url: null,\n});\n\n\nconst branchesFiltered = computed(() => branches.value.map((b) => ({\n  value: b.uuid,\n  title: b.name,\n})));\n\nconst isSippDialogOpen = ref(false);\n\nconst openSippDialog = () => {\n  isSippDialogOpen.value = true;\n};\n\nonBeforeMount(() => {\n  getFleetBranches();\n});\n\nconst vehicleClassBranch = computed({\n  get() {\n    return currentWorkingClass.value.branch;\n  },\n  set(value) {\n    currentWorkingClass.value.branch = value;\n  },\n});\n\nconst cancel = () => {\n  router.push({name: 'settings.fleet.classes'}).catch(() => {\n  });\n};\n\n\nwatch(branchesFiltered, (filteredBranches) => {\n  if (!currentWorkingClass.value.branch && filteredBranches.length === 1) {\n    const branch = branches.value.find(b => b.uuid === filteredBranches[0].value);\n    if (branch) {\n      currentWorkingClass.value.branch = branch;\n    }\n  }\n}, {immediate: true});\n\nwatch(vehicleClassCreated, (newValue) => {\n  if (newValue) {\n    dispatch('vehicles/SET_VEHICLE_CLASS_CREATED', false);\n    router.push({name: 'settings.fleet.classes'}).catch(() => {\n    });\n  }\n});\n</script>\n\n","<template>\n  <div>\n    <v-card :disabled=\"vehicleLoading.class\" :loading=\"vehicleLoading.class\">\n      <v-card-title>\n        {{ vehicleClass.name }}\n      </v-card-title>\n      <v-card-text class=\"mt-3\">\n        <v-form class=\"space-y-4\">\n          <v-text-field\n            v-model=\"currentWorkingClass.name\"\n            :error-messages=\"vehicleClassForm.errors.get('name')\"\n            class=\"w-full md:w-[300px]\"\n            label=\"Name\"\n            variant=\"outlined\"\n            @keyup=\"store.commit('vehicles/CLEAR_VEHICLE_FORM_ERRORS', 'name')\"\n          />\n          <div class=\"flex flex-col md:flex-row md:items-center gap-2\">\n            <v-text-field\n              v-model=\"currentWorkingClass.sipp_code\"\n              :error-messages=\"vehicleClassForm.errors.get('sipp_code')\"\n              class=\"w-full md:w-[300px]\"\n              label=\"SIPP Code\"\n              variant=\"outlined\"\n              @keyup=\"store.commit('vehicles/CLEAR_VEHICLE_FORM_ERRORS', 'sipp_code')\"\n            />\n            <v-btn size=\"x-small\" variant=\"text\" @click=\"openSippDialog()\">What is SIPP?</v-btn>\n          </div>\n          <v-text-field\n            v-model=\"currentWorkingClass.minimum_age\"\n            :error-messages=\"vehicleClassForm.errors.get('minimum_age')\"\n            class=\"w-full md:w-[300px]\"\n            label=\"Minimum Age\"\n            type=\"number\"\n            variant=\"outlined\"\n            @keyup=\"store.commit('vehicles/CLEAR_VEHICLE_FORM_ERRORS', 'minimum_age')\"\n          />\n          <div>\n            <v-select\n              v-model=\"currentWorkingClass.branch\"\n              :error-messages=\"vehicleClassForm.errors.get('branch')\"\n              :items=\"branchesFiltered\"\n              append-icon=\"mdi-close\"\n              class=\"fleet-branches-select w-full md:w-[300px]\"\n              label=\"Branches\"\n              variant=\"outlined\"\n              @keyup=\"store.commit('vehicles/CLEAR_VEHICLE_FORM_ERRORS', 'branch')\"\n              @click:append=\"currentWorkingClass.branch = null\"\n            >\n              <template v-slot:append-item>\n                <div class=\"border-t py-5 flex justify-center\">\n                  <router-link :to=\"{name: 'settings.fleet.branches'}\">\n                    <span class=\"text-sm\">Manage Fleet Branches</span>\n                  </router-link>\n                </div>\n              </template>\n            </v-select>\n          </div>\n        </v-form>\n      </v-card-text>\n      <v-card-actions class=\"flex flex-wrap gap-2\">\n        <div class=\"flex items-center gap-2\">\n          <v-btn v-if=\"!confirmDelete\" color=\"red\" size=\"small\" variant=\"text\" @click=\"confirmDelete = true\">\n            <v-icon size=\"small\">mdi-delete</v-icon>\n          </v-btn>\n          <v-btn v-if=\"confirmDelete\" size=\"small\" variant=\"text\" @click=\"confirmDelete = false\">Cancel</v-btn>\n          <v-btn v-if=\"confirmDelete\" color=\"red text-white\" size=\"small\" @click=\"deleteVehicleClassInit(fleetClassUuid)\">\n            Confirm\n          </v-btn>\n        </div>\n        <v-spacer/>\n        <div class=\"flex items-center gap-2\">\n          <v-btn size=\"small\" variant=\"text\" @click=\"backToClasses()\">\n            Back\n          </v-btn>\n          <v-btn :loading=\"vehicleLoading.class\" @click=\"updateVehicleClass(currentWorkingClass)\">Save</v-btn>\n        </div>\n      </v-card-actions>\n    </v-card>\n    <SippDialog v-model=\"isSippDialogOpen\"/>\n  </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport {computed, onBeforeMount, ref, watch} from 'vue';\n\nimport SippDialog from '@/views/dashboard/settings/Fleet/SippDialog.vue';\nimport {useVehicle} from '@/composables/useVehicle';\nimport {useRoute, useRouter} from 'vue-router';\nimport {useBranch} from '@/composables/useBranch';\nimport {VehicleClass} from '@/types';\nimport {useStore} from 'vuex';\n\nconst route = useRoute();\nconst router = useRouter();\nconst isSippDialogOpen = ref(false);\n\nconst store = useStore();\n\nconst {\n  getVehicleClass,\n  vehicleClass,\n  vehicleClassForm,\n  vehicleLoading,\n  deleteVehicleClass,\n  updateVehicleClass,\n  getVehicleClasses,\n} = useVehicle();\nconst {getFleetBranches, branches} = useBranch();\n\nconst fleetClassUuid = route.params.uuid as string;\n\nconst confirmDelete = ref(false);\nconst currentWorkingClass = ref<VehicleClass>({\n  set: false,\n  image_url: '',\n  active: true,\n  name: '',\n  uuid: '',\n  minimum_age: null,\n  sipp_code: '',\n  branch: null,\n});\nconst classClone = ref({\n  set: false,\n  image_url: '',\n  active: true,\n  name: '',\n  uuid: '',\n  minimum_age: null,\n  sipp_code: '',\n  branch: null,\n});\n\nconst openSippDialog = () => {\n  isSippDialogOpen.value = true;\n};\n\nonBeforeMount(() => {\n  getVehicleClass(route.params.uuid as string);\n  getFleetBranches();\n\n  currentWorkingClass.value = {\n    set: false,\n    image_url: '',\n    active: true,\n    name: '',\n    uuid: '',\n    minimum_age: null,\n    sipp_code: '',\n    branch: null,\n  }\n  classClone.value = {\n    set: false,\n    image_url: '',\n    active: true,\n    name: '',\n    uuid: '',\n    minimum_age: null,\n    sipp_code: '',\n    branch: null,\n  };\n});\n\nconst branchesFiltered = computed(() => {\n  return branches.value.map((b) => ({\n    value: b.uuid,\n    title: b.name,\n  }));\n});\n\nwatch(vehicleClass, (vehicleClass) => {\n  if (vehicleClass.uuid) {\n    classClone.value = JSON.parse(JSON.stringify(vehicleClass));\n    currentWorkingClass.value = classClone.value;\n    currentWorkingClass.value.branch = classClone.value?.branch?.uuid;\n    currentWorkingClass.value.set = true;\n  }\n});\n\nconst deleteVehicleClassInit = (uuid: string) => {\n  deleteVehicleClass(uuid).then(() => {\n    getVehicleClasses(true);\n    router.push({name: 'settings.fleet.classes'}).catch(() => {\n    });\n  }).catch(() => {\n    console.dir('error');\n  });\n};\n\nconst backToClasses = () => {\n  router.push({name: 'settings.fleet.classes'}).catch(() => {\n  });\n};\n\n</script>\n\n","<template>\n  <div>\n    <v-card>\n      <v-card-title>\n       <div class=\"flex\">\n         Action Items\n         <v-spacer/>\n         <v-btn size=\"small\" :to=\"{name: 'settings.action_item.new'}\">Add Item</v-btn>\n       </div>\n      </v-card-title>\n      <v-card-text class=\"mt-3\">\n        <table class=\"w-full text-sm text-left text-gray-500 dark:text-gray-400\" v-if=\"actionItems.length > 0\">\n          <thead class=\"text-xs text-gray-700 uppercase bg-gray-50 dark:bg-gray-700 dark:text-gray-400\">\n          <tr>\n            <th scope=\"col\" class=\"px-6 py-3\">Title</th>\n            <th scope=\"col\" class=\"px-6 py-3\">Era</th>\n            <th scope=\"col\" class=\"px-6 py-3\">Vehicle Classes</th>\n            <th scope=\"col\" class=\"px-6 py-3\"></th>\n          </tr>\n          </thead>\n          <tbody>\n          <tr v-for=\"(item) in actionItems\" :key=\"item.uuid\">\n            <th scope=\"row\" class=\"px-6 py-4 font-medium text-gray-900 whitespace-nowrap dark:text-white\">\n              <router-link :to=\"{name: 'settings.action_items.single', params: {uuid: item.uuid}}\" class=\"\">{{ item.title }}</router-link>\n            </th>\n            <td class=\"px-6 py-4\">\n             {{ item.when }}\n            </td>\n            <td class=\"px-6 py-4\">{{ item.vehicle_classes_count }}</td>\n            <td class=\"px-6 py-4\">\n              <router-link\n                :to=\"{name: 'settings.action_items.single', params: {uuid: item.uuid}}\"\n                class=\"font-medium text-blue-600 dark:text-blue-500 hover:underline\"\n              >View</router-link>\n            </td>\n          </tr>\n          </tbody>\n        </table>\n        <div v-else>No action items yet</div>\n      </v-card-text>\n    </v-card>\n  </div>\n</template>\n\n<script>\nimport { mapGetters, mapActions } from 'vuex';\n\nexport default {\n  name: 'ActionItems.vue',\n\n  created() {\n    this.getActionItems();\n  },\n\n  computed: {\n    ...mapGetters({\n      actionItems: 'fleet/actionItems',\n    }),\n  },\n\n  methods: {\n    ...mapActions({\n      getActionItems: 'fleet/getActionItems',\n    }),\n  },\n};\n</script>\n\n","<template>\n  <div>\n    <v-card :disabled=\"fleetLoading.updateBranch || fleetLoading.actionItem\" :loading=\"fleetLoading.actionItem\">\n      <v-card-title>\n        New Action Item\n      </v-card-title>\n      <v-card-text class=\"mt-3\">\n        <v-card-text class=\"mt-3\">\n          <v-form>\n            <div class=\"grid grid-cols-2\">\n              <div class=\"mb-5\">\n                <v-text-field\n                  v-model=\"currentWorkingActionItem.title\"\n                  :error-messages=\"fleetForm.errors.get('title')\"\n                  label=\"Name\"\n                  variant=\"outlined\"\n                  @keydown=\"$store.commit('fleet/CLEAR_FLEET_FORM_ERRORS', 'title')\"\n                />\n              </div>\n            </div>\n\n            <div class=\"grid grid-cols-2\">\n              <div class=\"mb-5\">\n                <v-select\n                  v-model=\"currentWorkingActionItem.when\"\n                  :error-messages=\"fleetForm.errors.get('when')\"\n                  :items=\"actionItemEras\"\n                  item-title=\"name\"\n                  item-value=\"value\"\n                  label=\"Era\"\n                  variant=\"outlined\"\n                />\n              </div>\n            </div>\n\n            <div class=\"grid grid-cols-2\">\n              <div class=\"mb-5\">\n                <v-autocomplete\n                  v-model=\"currentWorkingActionItem.vehicle_classes\"\n                  :items=\"vehicleClasses\"\n                  item-title=\"name\"\n                  item-value=\"uuid\"\n                  label=\"Vehicle Classes\"\n                  multiple\n                  return-object\n                  variant=\"outlined\"\n                />\n              </div>\n            </div>\n          </v-form>\n        </v-card-text>\n      </v-card-text>\n      <v-divider/>\n      <v-card-actions>\n        <v-spacer/>\n        <v-btn size=\"small\" variant=\"text\" @click=\"$router.push({ name: 'settings.action_items' }).catch(() => {});\">\n          Back\n        </v-btn>\n        <v-btn\n          :disabled=\"fleetLoading.updateBranch || currentWorkingActionItem.title === '' || currentWorkingActionItem.when === ''\"\n          :loading=\"fleetLoading.updateBranch\"\n          @click=\"createActionItem(currentWorkingActionItem)\"\n        >Save\n        </v-btn>\n      </v-card-actions>\n    </v-card>\n  </div>\n</template>\n\n\n<script lang=\"ts\">\nimport {mapActions, mapGetters} from 'vuex';\n\nconst defaultActionItem = {\n  uuid: '',\n  title: '',\n  when: 'pre-trip',\n  order: 0,\n  vehicle_classes: [],\n};\n\nexport default {\n  name: 'ActionItemNew.vue',\n\n  data() {\n    return {\n      actionItemEras: [\n        {name: 'Pre-Trip', value: 'pre-trip'},\n        {name: 'Post-Trip', value: 'post-trip'},\n      ],\n      currentWorkingActionItem: {...defaultActionItem},\n    };\n  },\n\n  created() {\n    this.getVehicleClasses();\n  },\n\n  watch: {\n    newlyCreatedActionItem(newlyCreatedActionItem) {\n      if (newlyCreatedActionItem.uuid) {\n        this.$router.push({\n          name: 'settings.action_items.single',\n          params: {uuid: newlyCreatedActionItem.uuid}\n        }).catch(() => {\n        });\n      }\n    },\n  },\n\n  computed: {\n    ...mapGetters({\n      fleetLoading: 'fleet/loading',\n      newlyCreatedActionItem: 'fleet/newlyCreatedActionItem',\n      vehicleClasses: 'vehicles/vehicleClasses',\n      vehicleLoading: 'vehicles/vehicleLoading',\n      fleetForm: 'fleet/fleetForm',\n    }),\n  },\n\n  methods: {\n    ...mapActions({\n      createActionItem: 'fleet/createActionItem',\n      getVehicleClasses: 'vehicles/getVehicleClasses',\n    }),\n    updateActionItemInit() {\n      this.updateActionItem({\n        uuid: this.$route.params.uuid,\n        title: this.currentWorkingActionItem.title,\n        when: this.currentWorkingActionItem.when,\n        order: this.currentWorkingActionItem.order,\n        vehicle_classes: this.currentWorkingActionItem.vehicle_classes,\n      });\n    },\n  },\n\n  beforeUnmount() {\n    this.currentWorkingActionItem = {...defaultActionItem};\n    this.$store.commit('fleet/CLEAR_FLEET_FORM_ERRORS');\n  },\n};\n</script>\n\n","<template>\n  <div>\n    <v-card :disabled=\"branchLoading.updateBranch || branchLoading.fetchBranch\" :loading=\"branchLoading.fetchBranch\">\n      <v-card-title>\n        Action Item: {{ actionItem?.title }}\n      </v-card-title>\n      <v-card-text class=\"mt-3\">\n        <v-form>\n          <div class=\"grid grid-cols-2\">\n            <div class=\"mb-5\">\n              <v-text-field\n                v-model=\"currentWorkingActionItemClone.title\"\n                :error-messages=\"fleetForm.errors.get('title')\"\n                label=\"Name\"\n                variant=\"outlined\"\n                @keydown=\"$store.commit('fleet/CLEAR_FLEET_FORM_ERRORS', 'title')\"\n              />\n            </div>\n          </div>\n\n          <div class=\"grid grid-cols-2\">\n            <div class=\"mb-5\">\n              <v-select\n                v-model=\"currentWorkingActionItemClone.when\"\n                :items=\"actionItemEras\"\n                item-title=\"name\"\n                item-value=\"value\"\n                label=\"Era\"\n                variant=\"outlined\"\n              />\n            </div>\n          </div>\n\n          <div class=\"grid grid-cols-2\">\n            <div class=\"mb-5\">\n              <v-autocomplete\n                v-model=\"currentWorkingActionItemClone.vehicle_classes\"\n                :items=\"vehicleClasses\"\n                item-title=\"name\"\n                item-value=\"uuid\"\n                label=\"Vehicle Classes\"\n                multiple\n                return-object\n                variant=\"outlined\"\n              />\n            </div>\n          </div>\n        </v-form>\n      </v-card-text>\n      <v-card-actions>\n        <DeleteButton @deleteConfirmed=\"deleteActionItem(currentWorkingActionItemClone)\"/>\n        <v-spacer/>\n        <v-btn size=\"small\" variant=\"text\" @click=\"$router.push({ name: 'settings.action_items' }).catch(() => {});\">\n          Back\n        </v-btn>\n        <v-btn\n          :disabled=\"branchLoading.updateBranch || currentWorkingActionItemClone.title === '' || currentWorkingActionItemClone.when === ''\"\n          :loading=\"branchLoading.updateBranch\"\n          @click=\"updateActionItemInit()\"\n        >Save\n        </v-btn>\n      </v-card-actions>\n    </v-card>\n  </div>\n</template>\n\n\n<script lang=\"ts\">\nimport {defineAsyncComponent} from 'vue';\nimport {mapActions, mapGetters} from 'vuex';\n\nconst DeleteButton = defineAsyncComponent(() => import('@/components/buttons/DeleteButton.vue'));\n\nconst defaultActionItem = {\n  uuid: '',\n  title: '',\n  when: 'pre-trip',\n  order: 0,\n  vehicle_classes: [],\n};\n\nexport default {\n  name: 'ActionItemSingle.vue',\n\n  components: {\n    DeleteButton,\n  },\n\n  data() {\n    return {\n      actionItemEras: [\n        {name: 'Pre-Trip', value: 'pre-trip'},\n        {name: 'Post-Trip', value: 'post-trip'},\n      ],\n      currentWorkingActionItemClone: {...defaultActionItem},\n    };\n  },\n\n  created() {\n    this.getActionItem(this.$route.params.uuid);\n    this.getVehicleClasses();\n  },\n\n  watch: {\n    actionItem(item) {\n      this.currentWorkingActionItemClone = JSON.parse(JSON.stringify(item));\n    },\n    actionItemDeleted() {\n      this.$router.push({name: 'settings.action_items'}).catch(() => {\n      });\n    },\n  },\n\n  computed: {\n    ...mapGetters({\n      actionItem: 'fleet/actionItem',\n      branchLoading: 'fleet/loading',\n      vehicleClasses: 'vehicles/vehicleClasses',\n      actionItemDeleted: 'fleet/actionItemDeleted',\n      fleetForm: 'fleet/fleetForm',\n    }),\n  },\n\n  methods: {\n    ...mapActions({\n      getActionItem: 'fleet/getActionItem',\n      deleteActionItem: 'fleet/deleteActionItem',\n      updateActionItem: 'fleet/updateActionItem',\n      getVehicleClasses: 'vehicles/getVehicleClasses',\n    }),\n    updateActionItemInit() {\n      this.updateActionItem({\n        uuid: this.$route.params.uuid,\n        title: this.currentWorkingActionItemClone.title,\n        when: this.currentWorkingActionItemClone.when,\n        order: this.currentWorkingActionItemClone.order,\n        vehicle_classes: this.currentWorkingActionItemClone.vehicle_classes,\n      });\n    },\n  },\n\n  beforeUnmount() {\n    this.currentWorkingActionItemClone = {...defaultActionItem};\n  },\n};\n</script>\n\n","<template>\n  <div>\n    Fleet Vehicle Features\n  </div>\n</template>\n\n<script>\nimport { mapGetters, mapActions } from 'vuex';\n\nexport default {\n  name: 'SettingsFleetFeatures',\n\n  data() {\n    return {\n      settings: {\n        turo: {},\n        fw: {},\n      },\n    };\n  },\n\n  watch: {\n    notificationSettings: {\n      deep: true,\n      handler(notification, notificationOld) {\n        if(notificationOld.set) {\n          this.updateNotificationSettings();\n        }\n      },\n    },\n  },\n\n  computed: {\n    ...mapGetters({\n      loading: 'settings/loading',\n      notificationSettings: 'settings/notifications',\n    }),\n  },\n\n  methods: {\n    ...mapActions({\n      updateNotificationSettings: 'settings/updateNotificationSettings',\n    }),\n  },\n};\n</script>\n\n","<template>\n  <div>\n    <v-dialog v-model=\"agreeToSDialog\" fullscreen>\n      <v-card>\n        <v-card-text class=\"p-5\">\n          <div id=\"terms-of-service\">\n            <h2 class=\"h2\" style=\"text-align:center;\">\n              <strong>Fleetwire.io AFFILIATE PROGRAM. TERMS AND CONDITIONS</strong>\n            </h2>\n            <small>Updated Dec 16, 2021</small>\n\n            <p style=\"text-align:justify;\">These Affiliate Program Operating Terms and Conditions\n              (the\n              “<strong>Affiliate Program Terms</strong>”) contain terms and conditions between\n              Fleetwire LLC, 30 N Gould St STE R Sheridan, WY 82801, USA.\n              (“<strong>Fleetwire.io</strong>”, “<strong>us</strong>”, or “<strong>we</strong>”,\n              “<strong>our</strong>”), and you (“<strong>you</strong>”, “<strong>your</strong>” or\n              “<strong>Affiliate</strong>”), that govern your participation in our affiliate program\n              accessible through this website(“<strong>Affiliate Program</strong>”).</p>\n\n            <p style=\"text-align:justify;\">The Affiliate Program Terms are governed by Fleetwire.io\n              General Terms and Conditions for Marketing Campaigns (“<strong>General Terms</strong>”)\n              available at <a href=\"https://fleetwire.io/terms\">https://fleetwire.io/terms</a>. The\n              Affiliate Program Terms and the General Terms are together referred to as the\n              “<strong>Agreement</strong>”.\n              You confirm that you have read and understood the Agreement, and agree to the\n              provisions\n              stated therein. In the event of any inconsistency between the Affiliate Program Terms\n              and General Terms, the terms of this Affiliate Program Terms shall prevail.</p>\n\n            <p style=\"text-align:justify;\">Each Affiliate Program offer (an \"<strong>Offer</strong>\")\n              may be for any offering by Fleetwire.io or a third party (each such third party a\n              \"<strong>Client</strong>\") and may link to a specific website for that particular\n              Offer\n              or other websites of Fleetwire.io (“<strong>Program Website</strong>”). Furthermore,\n              each Offer and its accompanying documents may have additional terms and conditions on\n              pages within the Affiliate Program and forms a part of this Agreement.</p>\n\n            <p style=\"text-align:justify;\">We reserve the right to include to the Affiliate Program\n              additional products in our sole discretion anytime.</p>\n\n            <p style=\"text-align:justify;\">The Fleetwire.io entity which you are contracting with\n              under these Affiliate Program Terms is Fleetwire, LLC. In such a case your\n              counterparty\n              under these Affiliate Program Terms is Fleetwire, LLC, 30 N Gould St STE R Sheridan,\n              WY\n              82801, USA.</p>\n\n            <ol>\n              <li style=\"text-align:justify;\"><strong>ENROLLMENT IN THE AFFILIATE\n                PROGRAM</strong><br><br>\n                1.1. In order to enrol in the Affiliate Program, you must submit an Affiliate\n                Program\n                application form on our website (<a href=\"https://tenant.fleetwire.io/settings/affiliate/\">https://tenant.fleetwire.io/settings/affiliate/</a>).\n                You must accurately complete the application form to become an affiliate. You must\n                not\n                use any aliases or other means to mask your true identity or contact information.You\n                must provide us with any future updates regarding your contact details immediately\n                after they change.<br><br>\n                1.2. After we review your application form, we will notify you of your acceptance or\n                rejection to the AffiliateProgram. The notification generally is provided within two\n                (2) business days after you submit an application form. We may accept or reject your\n                application in our sole discretion for any reason.<br>\n              </li>\n\n              <li style=\"text-align:justify;\">\n                <strong>LINKS TO THE PROGRAM WEBSITE AND PROMOTION OF AFFILIATE\n                  RELATIONSHIP</strong>\n                <br><br>\n                2.1. If you qualify and agree to participate as an Affiliate and we accept your\n                application, you will become anAffiliate and we will make available graphic and\n                textual links and accesses to the Program Website(collectively,\n                “<strong>Links</strong>”) and/or other creative materials to you via the Affiliate\n                Program.<br><br>\n                2.2. You may display the Links on the websites owned or controlled by you, in emails\n                sent by you and/or in online advertisements (collectively, “<strong>Media</strong>”).\n                You must be always identified when displaying Links. TheLinks will serve to identify\n                you as a member of our Affiliate Program and will establish a connection from your\n                Media to the Program Website. The Links may connect to any area of our websites\n                (althoughCommissions will only be issued for Qualified Actions).<br><br>\n                2.3. In utilizing the Links, you agree that you will reasonably cooperate with us in\n                order to establish and maintain such Links. All Affiliate websites shall display the\n                Links, including, but not limited to, graphic and/or textual images, prominently in\n                relevant sections of their websites.<br><br>\n                2.4. Fleetwire.io may change, suspend or discontinue any aspect of an Offer or Link\n                or\n                remove, alter, or modify any tags, text, graphic or banner advertisement in\n                connection\n                with the Link. You agree to promptly implement any request from Fleetwire.io to\n                remove,\n                alter or modify any Link, graphic or banner advertisement that is being used by you\n                as\n                part of the Affiliate Program.<br><br>\n                2.5. When a user follows your Affiliate Link to the Program Website, we place a\n                tracking cookie on that user’s computer or mobile device which will be used to\n                identify\n                that user as a referral from you provided that user creates an account (including a\n                free account) on Fleetwire's website within thirty (30) days (after which the cookie\n                expires). If the user uses another computer or mobile device to create an account or\n                deletes the tracking cookie before creating the account, then we shall have no\n                liability to pay to you any Commission in respect of any Fleetwire.io services\n                purchased by that user.<br><br>\n                2.6. You are not allowed to:<br><br>\n                2.6.1. use cookie stuffing techniques that set the Affiliate tracking cookie without\n                the knowledge of the users of your Media and your websites (example:\n                iframe);<br><br>\n                2.6.2. post any refunds, credits or discounts, or other similar content concerning\n                Fleetwire, unless we have given you prior written permission in each instance.\n                Affiliates\n                may only use coupons and discounts that are provided exclusively through the\n                Affiliate\n                Program using banners and links;<br><br>\n                2.7. Each Link connecting users of your Media and/or your website to the pertinent\n                area of our websites shall in no way alter the look, feel, or functionality of our\n                websites. Any violations of the terms surroundingLinks, other links, coupons,\n                refunds,\n                credits or discounts shall constitute a material breach of thisAgreement and may\n                result in your termination from the Affiliate Program and/or withholding\n                ofCommissions.<br></li>\n              <li style=\"text-align:justify;\"><strong>DETERMINATION OF COMMISSIONS</strong><br><br>\n                3.1. We will pay you payments for each Qualified Action\n                (“<strong>Commission</strong>”).\n                A “<strong>Qualified Action</strong>” is counted when all of the following actions\n                are\n                performed:\n                <ol class=\"ml-10\" style=\"list-style-type:lower-roman;\">\n                  <li>an individual person accesses the Program Website via the Link;</li>\n                  <li>pre-populated fields are not used;</li>\n                  <li>individual completes all of the information required for accessing the\n                    Fleetwire.io service within the time period allowed by Fleetwire;\n                  </li>\n                  <li>individual purchases Fleetwire.io service(s); and</li>\n                  <li>individual does not require a refund,chargeback or cancellation within thirty\n                    (30) days after the completion of purchase for such purchase.\n                  </li>\n                </ol>\n                <br>\n                3.2. The actions that do not satisfy the conditions for the Qualified Actions\n                stipulated in Clause 3.1, are not considered Qualified Action, including, but not\n                limited to, the following cases:\n                <ol class=\"ml-10\" style=\"list-style-type:lower-roman;\">\n                  <li>the Program Website is accessed by a computer-generated user, such as a robot,\n                    spider,computer script or other automated, artificial or fraudulent method to\n                    appear like an individual, real live person;\n                  </li>\n                  <li>the access is later determined by Fleetwire.io to be fraudulent, incomplete,\n                    unqualified or a duplicate;\n                  </li>\n                  <li>the actions performed by the Affiliate violate this Agreement, (including, but\n                    not limited to, the obligations of the Affiliate stipulated herein) and/or the\n                    requirements of the applicable law.\n                  </li>\n                </ol>\n                <br>\n                3.3. In some specifically identified cases we, at our sole discretion, may offer\n                payouts for free individual registrations. In these cases, the Qualified Action is\n                counted when all of the following actions are performed:\n                <ol class=\"ml-10\" style=\"list-style-type:lower-roman;\">\n                  <li>an individual access the Program Website via the Link;</li>\n                  <li>pre-populated fields are not used;</li>\n                  <li>individual completes all of the information required for accessing the\n                    Fleetwire.io service within the time period allowed by Fleetwire;\n                  </li>\n                  <li>individual is actively using his/her account for a period of time determined\n                    solely by Fleetwire.\n                  </li>\n                </ol>\n                <br></li>\n              <li style=\"text-align:justify;\"><strong>PAYMENT OF COMMISSIONS</strong><br><br>\n                4.1. We will pay you any earned Commissions when the amount of the Commissions in\n                your\n                Affiliate account is greater than one hundred United States dollars ($100).\n                Commissions\n                will be paid via PayPal. Direct wire transfer is available only for sums over one\n                thousand United States dollars ($1,000) per month. You shall cover any and all costs\n                and expenses related to the payment of Commissions. We shall not have any liability\n                for\n                Commissions lost due to incorrect payment details provided by you.<br><br>\n                4.2. Subject to Clauses 3 “Determination of Commission” and 12 “Fraud”, Commissions\n                are paid only if and when we determine that your actions are considered Qualified\n                Actions and have remained in compliance with this Agreement for the entirety of the\n                period for which the Commissions are paid and throughout to the payment date. We\n                reserve the right to charge back to your Affiliate account any and all\n                previous payments for Qualified Actions that are later determined by Fleetwire.io to\n                have not met the requirements to be aQualified Action.<br><br>\n                4.3. All tracking of Links, determinations of Qualified Actions and counting of\n                Commissions shall be made by us in our sole discretion according to our technology.\n                In\n                the event that you are also tracking Links andQualified Actions, tracking results of\n                Fleetwire.io shall always prevail.<br><br>\n                4.4. Payments for revenue generated by you will be transferred to you once a month,\n                following your request. In exceptional cases this term can be extended with a prior\n                written notice to you. Due to our Refund policy,you can request a payment of the\n                respective Commissions not earlier than forty (40) days after generating this\n                respective amount.<br><br>\n                4.5. You should send requests for payments to <a\n                  href=\"mailto:hi@fleetwire.io\">hi@fleetwire.io</a> and we will\n                provide you with our calculations regarding the amount of Commissions earned by you.\n                In\n                the event that you dispute any portion of the Commissions calculated by us in good\n                faith (e.g., calculations contain a mathematical error),you agree and must (i)\n                notify\n                Fleetwire.io of such disputed amount in writing with sufficient detail within thirty\n                (30)days’ after being notified regarding the Commission amount for the respective\n                period, (ii) make authorized personnel available to resolve the dispute. If you do\n                not\n                dispute the calculated amount as set forth herein,you irrevocably waive any claims\n                based upon that amount.All amounts not timely and appropriately disputed shall be\n                deemed final and not subject to further dispute.<br><br>\n                4.6. Fleetwire's Commission payments are directly dependent upon receipt of payments\n                from\n                customers (except for limited cases of payouts for free individual registrations).\n                Therefore, we shall only be liable for theCommissions to the extent that we have\n                received such payments from the customers. You shall have no right to any claims for\n                Commissions if we have not received respective payments from the customers(including\n                but not limited, due to the chargebacks, refunds, cancellations).<br><br>\n                4.7. In the event customers terminate our services after the purchase (e.g. any\n                chargebacks,refunds,cancellations), the respective amount of your Commission shall\n                be\n                cancelled. We grant refunds to our customers in accordance with our Refund policy or\n                in\n                our sole discretion, which means that our customers usually have the right to cancel\n                our services and request for a refund within a specified period after the purchase.\n                Nevertheless, customers’ right to request for a chargeback is not limited in time.\n                Therefore, if we have already paid the relevant Commission to you, we shall deduct\n                the\n                respective amount from our next payment.<br><br>\n                4.8. Where the rate of chargeback(s), refunds or cancellations on your Affiliate\n                account is unusually high or we suspect your Affiliate account is being used for\n                fraudulent activity or in violation of this Agreement and/or applicable law, we\n                reserve\n                the right to place restrictions on your Affiliate account immediately upon\n                written notice to you, including, but not limited to, suspend your Affiliate account\n                and suspend all payments related to your Affiliate account, as well as commence a\n                full\n                investigation (internal or involving any appropriate third parties). If we find it\n                necessary, we have full rights in our sole discretion to inform the appropriate law\n                enforcement or regulatory authorities or any third parties of any actual or alleged\n                breach of law and/or fraud performed by you (either in or not in connection with\n                this\n                Agreement). Only once we are satisfied that the matter is resolved, we will remove\n                the\n                restrictions applied to your Affiliate account.<br><br>\n                4.9. If you have an outstanding balance due to Fleetwire.io under this Agreement or\n                any other agreement between you and Fleetwire, whether or not related to the\n                Affiliate\n                Program, you agree that Fleetwire.io may offset any such amounts due to you from\n                amounts payable to you under this Agreement.<br><br>\n                4.10. If you have not earned any Commissions or have not logged into your Affiliate\n                account within a six (6)months period, then we may, in our sole discretion\n                unilaterally terminate this Agreement, close yourAffiliate account, and withhold any\n                unpaid Commissions. We are relieved from any and all obligations to you, including,\n                without limitations, financial obligations, in accordance with the Agreement if you\n                do\n                not dispute the closing of your Affiliate account as specified in this Clause 4.10\n                within five (5) business days from notification informing you about the termination\n                of\n                the Agreement along with the closure of your account and withholding of unpaid\n                Commissions.<br></li>\n              <li style=\"text-align:justify;\"><strong>OBLIGATIONS OF THE AFFILIATE</strong><br><br>\n                5.1. As an Affiliate you shall:<br><br>\n                5.1.1. comply with all (i) obligations, requirements and restrictions under this\n                Agreement, and (ii) applicable law,rules and regulations, including but without\n                limitation in relation to your business, your Media or your use of the Links, for\n                the\n                entirety of the period of this Agreement;<br><br>\n                5.1.2. have sole responsibility for the development, operation, and maintenance of,\n                and all content on or linked to your Media;<br><br>\n                5.1.3. disclose commercial relationships between you, your Media and Fleetwire, and\n                clearly\n                identify advertising and paid promotions. Review sites shall clearly state how\n                reviews\n                are composed and checked;<br><br>\n                5.1.4. ensure that all materials posted on your Media or otherwise used in\n                connection\n                with the Affiliate Program:\n                <ol class=\"ml-10\" style=\"list-style-type:lower-roman;\">\n                  <li>comply with the requirements of applicable law and are not illegal,</li>\n                  <li>do not infringe any rights of third parties, including, without limitation,\n                    intellectual property,personality, publicity rights,\n                  </li>\n                  <li>do not contain ethically unacceptable content, creative materials or copy\n                    (including, but not limited to, keywords, terms, meta tags, descriptions, web\n                    designs, etc.),\n                  </li>\n                  <li>do not contain, create, promote or link to any content which is in any way\n                    deceptive,misleading,and does not represent actual and accurate information\n                    about\n                    Fleetwire.io and it’s products or services,\n                  </li>\n                  <li>do not contain, create, promote or link to any material which is harmful,\n                    threatening, defamatory,obscene, sexually explicit, harassing, promotes\n                    violence,\n                    discrimination (whether based on sex,religion, race, ethnicity, nationality,\n                    disability or age), illegal activities (such as gambling), contains profanity,\n                    and/or do not otherwise contain any material which, as informed by Fleetwire.io\n                    to\n                    you, Fleetwire considers objectionable (collectively, “<strong>Objectionable\n                      Content</strong>”);\n                  </li>\n                </ol>\n                <br>\n                5.1.5. not make any representations, warranties or other statements concerning\n                Fleetwire.io or Client, or any of their respective products or services, except as\n                expressly authorized by Fleetwire.io in writing;<br><br>\n                5.1.6. not disseminate information that does not correspond to reality and/or any\n                other allegations that damages the reputation of Fleetwire.io and each of its\n                parents,\n                subsidiaries, affiliates, their principals, directors, officers,partners, agents,\n                employees, and assignees, whether or not such information/allegations relate to\n                thisAgreement or Affiliate Program;<br><br>\n                5.1.7. make sure that your Media does not copy or resemble the look, feel and/or\n                trade-dress of the ProgramWebsite or create the impression that you or your Media is\n                part of or endorsed by Fleetwire.io or Client, or is apart of the Program Website,\n                without prior written permission from us;<br><br>\n                5.1.8. comply with the terms, conditions, guidelines and policies of any third-party\n                services used by you in connection with this Agreement and the Affiliate Program,\n                including, but not limited to, email providers,social networking services and\n                advertising networks;<br><br>\n                5.1.9. always prominently post and make available to any visitors of your websites\n                and/or users of your Media(“<strong>your end-users</strong>”), including prior to\n                the\n                processing of any personal data and/or other personally identifiable information, a\n                privacy policy in compliance with all applicable laws that clearly and\n                thoroughly discloses all personal data processing and information collection, use\n                and\n                sharing practices. Also, obtain informed, unambiguous, specific and freely given\n                consent from your end-users, if necessary, in accordance with applicable law, for\n                the\n                use of cookies and/or the collection and processing of their information;<br><br>\n                5.1.10. always prominently post and make available to your end-users any terms and\n                conditions in connection with the Offer set forth by Fleetwire.io or Client, or as\n                required by applicable law regarding such Offers;<br><br>\n                5.1.11. make sure to not place Fleetwire.io ads on any online auction platform\n                (including, but not limited to, eBay,Amazon, etc.);<br><br>\n                5.1.12. be transparent to Fleetwire.io in relation to your actions under the\n                Affiliate\n                Program and, if you are planning any action that does not fully comply with the\n                usual\n                business practice and/or you feel that your actions might violate this Agreement or\n                applicable law, to consult your Affiliate account manager.<br></li>\n              <li style=\"text-align:justify;\"><strong>ADDITIONAL PROGRAM-SPECIFIC\n                TERMS</strong><br><br><strong>The following additional program-specific terms shall\n                apply to any promotional programs set forth below:</strong><br><br>\n                6.1. <strong>Email Campaigns</strong>. All email campaigns shall be approved in\n                advance and in writing by us.<br><br>\n                6.2. <strong>Advertising Campaigns</strong>:\n                <ol class=\"ml-10\" style=\"list-style-type:lower-roman;\">\n                  <li>No Links can appear to be associated with or be positioned on chat rooms or\n                    bulletin boards unless otherwise agreed by us in writing. Any pop-ups/unders are\n                    forbidden.\n                  </li>\n                  <li>Advertising campaigns shall not violate any applicable national or\n                    international\n                    advertising and marketing laws, as well, they shall not violate the intellectual\n                    property rights of third parties.\n                  </li>\n                  <li>You are solely responsible for confirming the legal requirements when\n                    publishing\n                    the advertisements.\n                  </li>\n                  <li>It is prohibited to use Banned keywords (as defined below in these Affiliate\n                    Program Terms) and to make any bidding on any referencing service or search\n                    engine\n                    (such as Google AdWords), paid or otherwise, in any meta tags, advertising,\n                    search\n                    terms, code, or in a similar manner, for any goods or services, either similar\n                    or\n                    not to Fleetwire's products or services.\n                  </li>\n                  <li>We can never be held responsible for the content of commercials or the\n                    context,\n                    how and where,the commercials are used, released, made available, published, or\n                    disseminated.\n                  </li>\n                </ol>\n                <br>\n                6.3. <strong>Affiliate Network Campaigns</strong>:\n\n                <ol class=\"ml-10\" style=\"list-style-type:lower-roman;\">\n                  <li>For all Affiliates that maintain their own affiliate networks, Affiliate\n                    agrees\n                    to place the Links in its affiliate network\n                    (“<strong>Affiliate’sNetwork</strong>”)\n                    for access and use by those affiliates in Affiliate's Network(each a “<strong>Third\n                      Party Affiliate</strong>”). Affiliate agrees that it will expressly forbid any\n                    Third Party Affiliate to modify the Links in any way.\n                  </li>\n                  <li>Affiliate agrees to maintain the Affiliate’s Network according to the highest\n                    industry standards.Affiliate shall not permit any party whose website or\n                    business\n                    model involves content containingObjectionable Content to be a Third Party\n                    Affiliate.\n                  </li>\n                  <li>All Third Party Affiliates must be in good standing with the Affiliate.\n                    Affiliate must require and confirm that all Third Party Affiliates affirmatively\n                    accept, through verifiable means, this Agreement prior to obtaining access to\n                    the\n                    Links.\n                  </li>\n                  <li>Affiliate shall disclose any and all Third Party Affiliates which access the\n                    Affiliate Program and use the Links for generation of Commissions to Fleetwire.\n                  </li>\n                  <li>Affiliate shall promptly terminate any Third Party Affiliate who takes, or\n                    could\n                    reasonably be expected to take, any action that violates the terms and\n                    conditions\n                    of this Agreement. In the event that either party suspects any wrongdoing by a\n                    Third Party Affiliate with respect to the Links and/or violation of this\n                    Agreement\n                    and/or applicable law in relation to this Agreement by a Third PartyAffiliate,\n                    Affiliate shall promptly disclose to Fleetwire.io the identity and contact\n                    information of such ThirdParty Affiliate.\n                  </li>\n                  <li>Affiliate shall promptly remove any Third Party Affiliate from the Affiliate\n                    Program and terminate their access to future Offers of Fleetwire.io in the\n                    Affiliate’s Network, including but not limited to, anyLinks, upon written notice\n                    from Fleetwire.\n                  </li>\n                  <li>Unless Fleetwire.io has been provided with all truthful and complete contact\n                    information of a Third PartyAffiliate and such Third Party Affiliate has\n                    affirmatively accepted this Agreement as recorded byFleetwire.io (and,\n                    therefore,\n                    is liable directly to Fleetwire), Affiliate shall remain liable for all acts or\n                    omissions(including, but not limited to, violations of this Agreement and/or\n                    applicable law) by any Third PartyAffiliate.\n                  </li>\n                </ol>\n                <br></li>\n              <li style=\"text-align:justify;\"><strong>ANTI-SPAM POLICY</strong><br><br>\n                7.1. When participating in our Affiliate Program, you may not use for selling or\n                promoting Fleetwire's products or services any spamming methods, including, but not\n                limited\n                to, the following:<br><br>\n                7.1.1. <strong>Email SPAM</strong>: sending unsolicited marketing email. However,\n                you\n                may send emails to people who have given you consent to send them marketing emails\n                for\n                products and services similar to Fleetwire.io products. In any case, sending of\n                emails\n                shall comply with legal requirements of applicable laws (including, but not limited\n                to,\n                privacy laws).<br><br>\n                7.1.2. <strong>Short texts SPAM</strong>: sending unsolicited short texts to the\n                cell\n                phones without the permission of the user of the cell phone and/or otherwise in\n                violation of applicable laws (including but not limited to, U.S. TelephoneConsumers\n                Protection Act, EU General Data Protection Regulation, etc.).<br><br>\n                7.1.3. <strong>Comment SPAM</strong>: posting Links on blogs, message boards and\n                forums in cases where the discussion or content is not related to the services we\n                offer. However, you may advertise your Link on websites which are discussing our\n                services or in a forum signature. You should never use automated bots to post\n                comments\n                containing your Affiliate Link.<br><br>\n                7.1.4. <strong>Black Hat techniques</strong>: using “Black hat” SEO marketing on\n                your\n                website, such as keyword stuffing,invisible text or doorway pages; Incentives:\n                offering incentives to users such as cash back or other rewards, except where\n                facilitated by features on our websites.<br><br>\n                7.2. In the event of a breach of the requirements of this Clause, Fleetwire.io\n                reserves the right to terminate thisAgreement and/or place restrictions, suspend or\n                delete your Affiliate account, including but not limited to,withholding all sums\n                within your Affiliate account.<br></li>\n              <li style=\"text-align:justify;\"><strong>PROHIBITION OF FRAUD</strong><br><br>\n                8.1. Credibility of the affiliates is of the essence to us. You are expressly\n                prohibited from using any persons,means, devices or arrangements to commit fraud,\n                violate any applicable law, interfere with other affiliates or falsify and/or hide\n                information in connection with referrals through the Links or the generation\n                ofCommissions, or exceed your permitted access to the Affiliate Program. Such acts\n                include, but are in noway limited to, using automated means to increase the number\n                of\n                clicks through the Links or completion of any required information, hiding of\n                traffic\n                or making it otherwise unavailable to Fleetwire, using spyware, using stealware,\n                cookie-stuffing and other deceptive acts or click-fraud. Such and similar acts shall\n                constitute a material breach of this Agreement. We shall make all determinations\n                about\n                fraudulent activity in our sole discretion.<br><br>\n                8.2. If we have reason to believe your Affiliate account is being used to conduct\n                fraudulent activities and/or fraudulent transactions or is in any way associated\n                with\n                fraudulent activity, we may reject any payments of the Commissions to you (in full\n                or\n                in part), terminate this Agreement, suspend or delete your Affiliate account, and/or\n                require you to return to us any Commissions paid by us to you in relation to\n                your participation in the Affiliate Program.<br></li>\n              <li style=\"text-align:justify;\"><strong>LIMITED LICENSE &amp; INTELLECTUAL\n                PROPERTY</strong><br><br>\n                9.1. <strong>Licence.</strong> Provided that you comply with the terms of this\n                Agreement and are a member in good standing of the Affiliate Program, only for the\n                sole\n                purpose of identifying your Media as a participant of the AffiliateProgram, and\n                assisting in increasing sales of Fleetwire.io products or services through the\n                Program\n                Website,during the validity of the Agreement we grant you a limited, revocable,\n                non-exclusive, non-transferable licence to:<br><br>\n                9.1.1. reproduce and make available on your Media Fleetwire's intellectual property\n                (as\n                defined in General Terms)that was made available to you via the Affiliate Program,\n                including, without limitation, the Links;<br><br>\n                9.1.2. use Fleetwire's intellectual property that was made available to you via the\n                Affiliate Program only for creating editorial content (illustrate an article, etc.)\n                or\n                graphical advertisements (banners, pop-up, etc.). Subject to Clause 9.3.1 below, you\n                are not allowed to modify and/or create derivative works from Fleetwire's\n                intellectual\n                property if this has not been pre-approved in writing by us.<br><br>\n                9.2. <strong>Revocation of Licence.</strong> We, at our sole discretion, have a\n                right\n                to revoke, partially or in whole, your license any time by giving you a written\n                notice.<br><br>\n                9.3. <strong>Restrictions on Licence.</strong> We do not transfer to you any rights,\n                express or implied, in respect to Links,Program Website and/or any other Fleetwire's\n                intellectual property, and we retain right, title, interest, ownership in and to\n                Fleetwire's\n                intellectual property. Fleetwire's intellectual property are licensed, not sold, and\n                you\n                receive no title to or ownership of any copy or of Fleetwire's intellectual property\n                itself.\n                Furthermore, you receive no rights toFleetwire's intellectual property other than\n                those\n                specifically granted in Section 9.1 above. Without limiting the generality of the\n                foregoing, you are imperatively prohibited, and you shall not, among other\n                things:<br><br>\n                9.3.1. modify, create derivative works from, distribute, publicly display, publicly\n                perform, sublicense, or otherwise use the Links or any other Fleetwire's\n                intellectual\n                property;<br>\n                9.3.2. register and/or use the domain name with any suffix that consists of or\n                contains any mark that is identical or similar to or misspellings, variations,\n                modifications of Fleetwire's trademarks and/or any other Fleetwire’s\n                intellectual property, for any goods or services, either similar or not to\n                Fleetwire’s\n                products or services<br>\n                9.3.3. use and/or to make bidding for any mark and/or keyword that is identical or\n                similar to or misspellings, variations, modifications of Fleetwire’s trademarks\n                and/or\n                any other\n                Fleetwire’s intellectual property (“<strong>Banned Keywords</strong>”) on any\n                referencing\n                service or search engine (such as Google AdWords), paid or otherwise, in any meta\n                tags,\n                advertising, search terms, code, or in a similar manner, for any goods or services,\n                either similar or not to Fleetwire’s products or services;<br>\n                9.3.4. cause or create, or act in any way that causes or creates or could cause or\n                create any initial interest confusion over the use of Fleetwire's intellectual\n                property on\n                the internet or in any search engine advertising;<br>\n                9.3.5. take unfair advantage and/or benefit of the distinctive character or repute\n                of\n                Fleetwire.io trademarks and/or other Fleetwire's intellectual property (free-riding)\n                and/or\n                dilute, whittle away and blur the distinctive character of Fleetwire's intellectual\n                property\n                and/or tarnish the repute of Fleetwire's intellectual property.<br><br>\n                9.4. All rights not expressly granted in this Agreement are reserved by\n                Fleetwire.<br><br>\n                9.5. You represent and warrant that you are fully aware that your use of Fleetwire's\n                intellectual property to any other extent than as expressly permitted in Section 9.1\n                above (in addition to being a breach of thisAgreement) shall constitute the\n                infringement of our rights to Fleetwire's intellectual property, and therefore may\n                be\n                subject to claims for damages from you.<br><br>\n                9.6. You hereby grant us a perpetual, irrevocable, worldwide license to use any\n                Feedback (as defined below)you communicate to us during the validity of this\n                Agreement, without compensation, without any obligation to report on such use, and\n                without any other restriction. Our rights granted in the previous sentence include,\n                without limitation, the right to exploit Feedback in any and every way, as well as\n                the\n                right to grant sub licenses. (“<strong>Feedback</strong>” refers to any suggestion,\n                comment, recommendation or idea arising out or in connection with the performance of\n                this Agreement, including without limitation all intellectual property rights in any\n                such suggestion, comment, recommendation or idea.)<br></li>\n              <li style=\"text-align:justify;\"><strong>VALIDITY AND TERMINATION</strong><br><br>\n                10.1. This Agreement comes into force upon our approval of your Affiliate Program\n                application and will be valid until terminated by either you or us.<br><br>\n                10.2. Either you or we may terminate this Agreement at any time, without cause, by\n                giving the other party 3(three) days’ prior written notice of termination.\n                Fleetwire.io may, without limitation and free from any and all liability, terminate\n                the\n                Agreement with Cause immediately at any time if you are in a material breach of your\n                obligations hereunder.<br><br>\n                10.3. “Cause” shall mean including, but without limitation:<br><br>\n                10.3.1. The services provided by you (a) are not compliant, fully or in part, with\n                the\n                Agreement; (b) are not compliant, fully or in part, with established business\n                practice,\n                professional standards, industry codes; (c)violate any applicable law, regulation,\n                judicial or administrative action, or rights of a third parties; (d) are defamatory,\n                obscene, harassing, tortuous, vulgar, invasive of another’s privacy, hateful, or\n                racially,ethnically or otherwise objectionable; (d) damage the reputation, brand,\n                image, likeness, expression in the public domain of Fleetwire, its representatives,\n                affiliates, officers, directors, employees, agents, clients,service providers and\n                all\n                other related third parties;<br>\n                10.3.2. you breach the General Warranties and Representations as specified in the\n                General Terms and/provisions of these Affiliate Program Terms;<br>\n                10.3.3. we believe that we may face potential claims or liability in connection with\n                your participation in theAffiliate program;<br>\n                10.3.4. we believe that our brand or reputation may be tarnished by you or in\n                connection with your participation in the Affiliate Program.<br><br>\n                10.4. Upon the termination of this Agreement for any reason, you shall immediately\n                cease to: (i) use the Links,remove them from your Media and delete them; (ii) use\n                all\n                Fleetwire's intellectual property and Client’s intellectual property, and (iii)\n                represent\n                yourself as a Fleetwire.io Affiliate.<br><br>\n                10.5. Upon termination of your participation in the Affiliate Program for one or\n                more\n                Offers or termination of thisAgreement for any reason, all rights to validly accrued\n                payments, causes of action and any provisions,which by their terms are intended to\n                survive termination, shall survive any termination.<br><br>\n                10.6. We may hold accrued unpaid Commissions for a reasonable period of time\n                following\n                the termination of this Agreement to ensure that the correct amount of Commissions\n                is\n                paid (for example, to account for any chargebacks, refunds, cancellations or\n                returns).<br></li>\n              <li style=\"text-align:justify;\"><strong>REMEDIES</strong><br><br>\n                11.1. In addition to any other rights and remedies available to us under this\n                Agreement, in law or in equity, were serve the right to (i) terminate the Agreement\n                and/or suspend your Affiliate account or delete it, (ii)delete any actions submitted\n                through your Links, and (iii) suspend and/or withhold any unpaidCommissions, and/or\n                charge back paid Commissions to your account immediately upon written notice to you\n                if:<br><br>\n                11.1.1. we determine that you have violated this Agreement;<br>\n                11.1.2. we receive any complaints about your participation in the Affiliate Program\n                which we reasonably believe to violate this Agreement; or<br>\n                11.1.3. any Qualified Action is later determined to have not met the requirements\n                set\n                forth in this Agreement or on the Affiliate Program.<br><br>\n                11.2. Such suspending and/or withholding of the Commissions, or charge backs for\n                paid\n                Commissions, shall be without regard as to whether or not such Commissions were\n                earned\n                as a result of such violation.<br></li>\n              <li style=\"text-align:justify;\"><strong>MODIFICATIONS TO THIS\n                AGREEMENT</strong><br><br>\n                12.1. Fleetwire.io reserves the right to modify any of these terms and conditions of\n                this Agreement at any time inFleetwire's sole discretion. Such modifications shall\n                take\n                effect upon posting to the Fleetwire's website. Fleetwire, in its sole discretion,\n                reserves\n                the\n                right to notify you by e-mail and further reserves the right to withhold\n                notification\n                of any changes made to this Agreement.<br><br>\n                12.2. Modifications may include, but are not limited to, changes in the scope of\n                available Commissions,Commission amounts/percentages, payment procedures, Commission\n                fee payment schedules, andAffiliate Program rules.<br><br>\n                12.3. If any modification is unacceptable to you, your only recourse is to terminate\n                this Agreement. Your continued participation in the Affiliate Program following our\n                posting of a change notice or new agreement on our website will constitute binding\n                acceptance of the change.<br></li>\n              <li style=\"text-align:justify;\"><strong>INDEPENDENT REVIEW AND\n                INVESTIGATION</strong><br><br>\n                13.1. Your submission of the application for the Affiliate Program acknowledges that\n                you understand and have read this Agreement (including the General Terms) in full,\n                and\n                agree to be bound by all the terms and conditions of this Agreement. You understand\n                that other Affiliates may have a different relationship with Fleetwire.io than you,\n                including competitors.<br><br>\n                13.2. You acknowledge that you have independently reviewed and assessed the\n                advantages\n                and disadvantages of participating in this Affiliate Program, and you are not\n                relying\n                on any guarantees,representations, or statements other than this Agreement as set\n                forth herein.\n              </li>\n            </ol>\n            <p style=\"text-align:justify;\">I, AS A POTENTIAL AFFILIATE, INDICATE MY ASSENT TO THIS\n              AGREEMENT AND MY DESIRE TO BECOME AN AFFILIATE HEREIN BOUND BY THE AFOREMENTIONED\n              TERMS\n              AND CONDITIONS, BY COMPLETING AND SUBMITTING THE AFFILIATE PROGRAM APPLICATION FORM,\n              BY\n              SUBMITTING PROPOSED REFERRED CUSTOMERS AND/OR INFORMATION REGARDING THE QUALIFYING\n              ACTIONS TO FLEETWIRE.IO UNDER THIS AFFILIATE PROGRAM AND/OR BY COLLECTING ANY\n              COMMISSION\n              PAYMENTS FROM FLEETWIRE.</p>\n          </div>\n        </v-card-text>\n        <v-card-actions>\n          <v-btn @click=\"agreeToSDialog = false;\">Okay</v-btn>\n        </v-card-actions>\n      </v-card>\n    </v-dialog>\n  </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport {onMounted, ref} from 'vue';\nimport {EventBus} from '@/plugins/eventBus';\n\n\nconst agreeToSDialog = ref(false);\n\nonMounted(() => {\n  EventBus.$on('open-affiliate-terms-dialog', () => {\n    agreeToSDialog.value = true;\n  });\n});\n</script>\n\n","<template>\n  <div>\n    <div v-if=\"hasAffiliate\" class=\"mb-5\">\n      <div class=\"\">\n        <v-card variant=\"outlined\">\n          <v-card-title>\n            <div class=\"flex\">\n              Payouts\n              <v-spacer/>\n              <v-btn :to=\"{name: 'settings.affiliate.payouts'}\" size=\"small\" variant=\"text\">\n                <v-icon>mdi-arrow-right</v-icon>\n              </v-btn>\n            </div>\n          </v-card-title>\n        </v-card>\n      </div>\n    </div>\n\n    <v-card v-if=\"!hasAffiliate\">\n      <v-card-title>\n        Fleetwire affiliate program\n      </v-card-title>\n      <v-card-subtitle>\n        Join now and earn money by promoting one of the best fleet management services.\n      </v-card-subtitle>\n      <v-card-text></v-card-text>\n    </v-card>\n\n    <v-card v-if=\"hasAffiliate && !affiliate.agree_tos_at\" :loading=\"affiliateLoading.affiliateAgreeTOS\" class=\"my-5\" variant=\"outlined\">\n      <v-card-title>\n        Agree to ToS\n      </v-card-title>\n      <v-card-text>\n        <v-checkbox\n          v-model=\"agreeToS\"\n          label=\"I agree to the Fleetwire Affiliate Partner Terms of Service.\"\n        >\n          <template v-slot:label>\n            I agree to the\n            <v-btn size=\"small\" variant=\"text\" @click=\"EventBus.$emit('open-affiliate-terms-dialog');\">Fleetwire\n              Affiliate Partner Terms of\n              Service.\n            </v-btn>\n          </template>\n\n        </v-checkbox>\n\n        <v-btn :disabled=\"!agreeToS\" :loading=\"affiliateLoading.affiliateAgreeTOS\" @click=\"affiliateTOSAgree()\">Accept\n        </v-btn>\n      </v-card-text>\n    </v-card>\n\n    <v-card v-if=\"hasAffiliate\" :disabled=\"!affiliate.agree_tos_at\" variant=\"outlined\">\n      <v-card-title>\n        Affiliate Referrals\n        <v-spacer/>\n      </v-card-title>\n      <v-card-text class=\"mt-3\">\n        <div class=\"my-5\">\n          Affiliate URL:\n          <a :href=\"`https://fleetwire.io/r/${affiliate.slug}`\">https://fleetwire.io/r/{{ affiliate.slug }}</a>\n\n        </div>\n        <v-data-table\n          :headers=\"headers\"\n          :items=\"affiliate.referral\"\n          :items-per-page=\"10\"\n        >\n          <template v-slot:item.id=\"{ index }\">\n            {{ index + 1 }}\n          </template>\n          <template v-slot:item.user.full_name=\"{ item }\">\n            {{ item.user.full_name }}\n          </template>\n          <template v-slot:item.user.subscribed=\"{ item }\">\n            <span v-if=\"item.user.subscribed\" class=\"text-green-700\">\n              Subscribed <span class=\"italic\">({{ item.subscribed_product }})</span>\n            </span>\n          </template>\n          <template v-slot:item.created_at=\"{ item }\">\n            {{ formatRentalDate(item.created_at, 'ddd MMM DD @ h:mm a') }}\n          </template>\n          <template v-slot:item.user.trial_ends_at=\"{ item }\">\n            <span v-if=\"item.user.trial_ends_at\">\n              {{ formatRentalDate(item.user.trial_ends_at, 'ddd MMM DD @ h:mm a') }}\n            </span>\n          </template>\n        </v-data-table>\n      </v-card-text>\n    </v-card>\n\n    <div class=\"mt-10\">\n      <v-btn v-if=\"agreeToS\" size=\"small\" variant=\"text\" @click=\"EventBus.$emit('open-affiliate-terms-dialog');\">Terms &\n        Conditions\n      </v-btn>\n    </div>\n\n    <AffiliateTerms/>\n\n  </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport {computed, onBeforeMount, ref, watch} from 'vue';\nimport {EventBus} from '@/plugins/eventBus';\nimport AffiliateTerms from '@/views/dashboard/settings/Affiliate/AffiliateTerms.vue';\nimport {useDateFormatter} from '@/composables/useDate';\nimport {useStore} from 'vuex';\nimport {useRouter} from 'vue-router';\n\nconst router = useRouter();\n\nconst store = useStore();\nconst {formatRentalDate} = useDateFormatter();\n\nconst hasAffiliate = ref(false);\nconst agreeToS = ref(false);\n\nconst headers = [\n  {\n    text: '#',\n    align: 'start',\n    value: 'id',\n  },\n  {\n    text: 'Name',\n    value: 'user.full_name',\n  },\n  {\n    text: 'Email',\n    value: 'user.email',\n  },\n  {text: 'Referred', value: 'created_at'},\n  {text: 'Trial Ends', value: 'user.trial_ends_at'},\n  {text: 'Active Subscription', value: 'user.subscribed'},\n];\n\nconst affiliateLoading = computed(() => store.getters['settings/loading']);\nconst affiliate = computed(() => store.getters['affiliate/affiliate']);\nconst affiliateApplication = computed(() => store.getters['affiliate/affiliateApplication']);\n\nconst affiliateApplications = () => store.dispatch('affiliate/affiliateApplications');\nconst getAffiliate = () => store.dispatch('affiliate/getAffiliate');\nconst affiliateTOSAgree = () => {\n  store.dispatch('affiliate/affiliateTOSAgree').then(() => {\n    getAffiliate();\n  });\n}\n\nwatch(affiliate, (affiliate) => {\n  if (affiliate) {\n    hasAffiliate.value = true;\n    // affiliateApplications();\n  }\n});\n\nwatch(affiliateApplication, (application) => {\n  ray(application);\n  if (!application || application.status !== 'approved') {\n    router.push({name: 'settings.affiliate.signup'}).catch(() => {\n    });\n  }\n});\n\nonBeforeMount(() => {\n  getAffiliate();\n});\n</script>\n\n","<template>\n  <div>\n    <div v-if=\"affiliateLoading.affiliateApplication\">\n      <v-progress-circular\n        :size=\"50\"\n        color=\"primary\"\n        indeterminate\n      ></v-progress-circular>\n    </div>\n\n    <v-card v-else-if=\"!affiliateApplication\">\n      <v-card-title>\n        Affiliate Signup\n      </v-card-title>\n      <v-card-text class=\"mt-3\">\n        <v-form v-model=\"formReady\">\n          <h5 class=\"h5 my-5\">Account Details</h5>\n          <v-text-field\n            v-model=\"application.company_name\"\n            :error-messages=\"affiliateForm.errors.get('company_name')\"\n            label=\"Company Name\"\n            name=\"company\"\n            required\n            variant=\"outlined\"\n            @keydown=\"affiliateForm.errors.clear('company_name')\"\n          ></v-text-field>\n\n          <v-text-field\n            v-model=\"application.website\"\n            :error-messages=\"affiliateForm.errors.get('website')\"\n            label=\"Website\"\n            name=\"website-url\"\n            variant=\"outlined\"\n            @keydown=\"affiliateForm.errors.clear('website')\"\n          ></v-text-field>\n\n          <v-text-field\n            v-model=\"application.phone\"\n            :error-messages=\"affiliateForm.errors.get('phone')\"\n            label=\"Phone\"\n            name=\"phone\"\n            variant=\"outlined\"\n            @keydown=\"affiliateForm.errors.clear('phone')\"\n          ></v-text-field>\n\n          <h5 class=\"h5\">Additional Details</h5>\n\n          <v-text-field\n            v-model=\"application.channel\"\n            :error-messages=\"affiliateForm.errors.get('channel')\"\n            label=\"URL of website/channel you intend to promote our product(s) on?\"\n            name=\"url\"\n            variant=\"outlined\"\n            @keydown=\"affiliateForm.errors.clear('channel')\"\n          ></v-text-field>\n\n          <v-select\n            v-model=\"application.use_popup\"\n            :error-messages=\"affiliateForm.errors.get('use_popup')\"\n            :items=\"['yes', 'no']\"\n            label=\"Do you plan to drive popup/popunder traffic?\"\n            variant=\"outlined\"\n            @update:model-value=\"affiliateForm.errors.clear('use_popup')\"\n          ></v-select>\n          <v-select\n            v-model=\"application.use_ppc\"\n            :error-messages=\"affiliateForm.errors.get('use_ppc')\"\n            :items=\"['yes', 'no']\"\n            label=\"Do you plan to drive traffic to your site(s) through PPC/paid advertising?\"\n            variant=\"outlined\"\n            @update:model-value=\"affiliateForm.errors.clear('use_ppc')\"\n          ></v-select>\n\n          <v-textarea\n            v-model=\"application.method_to_promote\"\n            :error-messages=\"affiliateForm.errors.get('method_to_promote')\"\n            label=\"How do you intend to promote our product(s)?\"\n            name=\"usage\"\n            variant=\"outlined\"\n            @keydown=\"affiliateForm.errors.clear('method_to_promote')\"\n          ></v-textarea>\n\n          <v-text-field\n            v-model=\"application.url\"\n            :error-messages=\"affiliateForm.errors.get('url')\"\n            hint=\"The Affiliate URL is the link your referrals will sign up with and how we know how to track and match the signup with you. Only alphanumeric, '-', '_' characters.\"\n            label=\"Desired Affiliate URL\"\n            prefix=\"https://fleetwire.io/r/\"\n            @keydown=\"nameKeydown($event)\"\n            @keyup=\"affiliateForm.errors.clear('url')\"\n          ></v-text-field>\n\n          <v-checkbox\n            v-model=\"application.agreeToS\"\n            :error-messages=\"affiliateForm.errors.get('agreeToS')\"\n            label=\"I agree to the Fleetwire Affiliate Partner Terms of Service.\"\n            @update:model-value=\"affiliateForm.errors.clear('agreeToS')\"\n          >\n            <template v-slot:label>\n              I agree to the\n              <v-btn size=\"small\" variant=\"text\" @click=\"EventBus.$emit('open-affiliate-terms-dialog');\">Fleetwire\n                Affiliate Partner Terms of\n                Service.\n              </v-btn>\n            </template>\n\n          </v-checkbox>\n\n          <div v-if=\"affiliateForm.errors.any()\" class=\"mt-5\">\n            <v-alert closable type=\"error\">\n              Please correct the errors above.\n            </v-alert>\n          </div>\n\n          <v-btn class=\"mt-5\" @click=\"submitAffiliateApplicationInit(application)\">Sign Up</v-btn>\n        </v-form>\n      </v-card-text>\n    </v-card>\n\n    <v-card v-else-if=\"affiliateApplication\" variant=\"outlined\">\n      <v-card-title>\n        Affiliate Signup Success\n      </v-card-title>\n      <v-card-text>\n        Date of application: {{ formatRentalDate(affiliateApplicationCreatedAt) }}<br>\n\n        We will review your application and get back to you shortly.\n\n        <div class=\"mt-10\">\n          <v-btn size=\"small\" variant=\"text\" @click=\"EventBus.$emit('open-affiliate-terms-dialog');\">Terms &\n            Conditions\n          </v-btn>\n        </div>\n      </v-card-text>\n    </v-card>\n    <AffiliateTerms/>\n  </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport {computed, onBeforeMount, ref, watch} from 'vue';\nimport {EventBus} from '@/plugins/eventBus';\nimport AffiliateTerms from '@/views/dashboard/settings/Affiliate/AffiliateTerms.vue';\nimport {useDateFormatter} from '@/composables/useDate';\nimport {useStore} from 'vuex';\nimport {useRouter} from 'vue-router';\n\nconst store = useStore();\nconst {formatRentalDate} = useDateFormatter();\n\nconst router = useRouter();\n\nconst submitSuccess = ref(false);\nconst formReady = ref(null);\nconst application = ref({\n  company_name: '',\n  website: '',\n  phone: '',\n  channel: '',\n  use_popup: '',\n  use_ppc: '',\n  method_to_promote: '',\n  url: '',\n  agreeToS: false,\n});\n\nconst affiliateLoading = computed(() => store.getters['affiliate/loading']);\nconst affiliate = computed(() => store.getters['affiliate/affiliate']);\nconst affiliatePayouts = computed(() => store.getters['affiliate/affiliatePayouts']);\nconst affiliateApplication = computed(() => store.getters['affiliate/affiliateApplication']);\nconst affiliateForm = computed(() => store.getters['affiliate/affiliateForm']);\nconst affiliateApplicationCreatedAt = computed(() => affiliateApplication.value?.created_at);\n\nconst affiliateUrl = computed(() => affiliate.value?.url);\nconst affiliateActive = computed(() => affiliate.value?.active);\n\nconst affiliateApplications = () => store.dispatch('affiliate/affiliateApplications');\nconst submitAffiliateApplication = (application) => store.dispatch('affiliate/submitAffiliateApplication', application);\n\nconst nameKeydown = (e) => {\n  if (/[^a-zA-Z0-9-_]/.test(e.key)) {\n    e.preventDefault();\n  }\n};\n\nconst submitAffiliateApplicationInit = (application) => {\n  submitAffiliateApplication(application).then(() => {\n    submitSuccess.value = true;\n    application.value = {\n      company_name: '',\n      website: '',\n      phone: '',\n      channel: '',\n      use_popup: '',\n      use_ppc: '',\n      method_to_promote: '',\n      url: '',\n      agreeToS: false,\n    };\n  });\n};\n\nwatch(affiliateUrl, (val) => {\n  if (!val) return;\n\n  application.value.url = val.replace(/[^a-zA-Z0-9-_]/g, '');\n});\n\nwatch(affiliateActive, (val) => {\n  if (val) {\n    ray('affiliate active');\n    router.push({name: 'settings.account.affiliate.index'}).catch(() => {\n    });\n  }\n});\n\nonBeforeMount(() => {\n  affiliateApplications();\n});\n</script>\n\n","<template>\n  <div>\n    <v-card variant=\"flat\">\n      <v-card-title>\n        <v-btn :to=\"{name: 'settings.account.affiliate.index'}\" class=\"mr-2\" size=\"small\" variant=\"text\">\n          <v-icon>mdi-arrow-left</v-icon>\n        </v-btn>\n        Payouts\n        <v-spacer/>\n      </v-card-title>\n      <v-card-text class=\"mt-3\">\n        <div class=\"mb-5\">\n          <div class=\"grid grid-cols-2 gap-2\">\n            <div>\n              <v-card>\n                <v-card-title>Past Payouts</v-card-title>\n                <v-card-text>{{ formatMoneyDisplayUSD(affiliatePayoutsPast) }}</v-card-text>\n              </v-card>\n            </div>\n            <div>\n              <v-card>\n                <v-card-title>Future Payouts</v-card-title>\n                <v-card-text>{{ formatMoneyDisplayUSD(affiliatePayoutsFuture) }}</v-card-text>\n              </v-card>\n            </div>\n          </div>\n        </div>\n\n        <v-data-table\n          :headers=\"headers\"\n          :items=\"affiliatePayouts\"\n          :items-per-page=\"20\"\n        >\n          <template v-slot:item.id=\"{ index }\">\n            {{ index + 1 }}\n          </template>\n          <template v-slot:item.payout=\"{ item }\">\n            {{ formatMoneyDisplayUSD(item.payout) }}\n          </template>\n        </v-data-table>\n      </v-card-text>\n    </v-card>\n  </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport {onMounted, computed} from 'vue';\nimport {useMoneyFormatter} from '@/composables/useMoneyFormatter';\nimport {useStore} from 'vuex';\n\nconst store = useStore();\n\nconst {formatMoneyDisplayUSD, formatNumberWithCommas} = useMoneyFormatter();\n\nconst affiliate = computed(() => store.getters['affiliate/affiliate']);\nconst affiliatePayouts = computed(() => store.getters['affiliate/affiliatePayouts']);\nconst affiliatePayoutsPast = computed(() => store.getters['affiliate/affiliatePayoutsPast']);\nconst affiliatePayoutsFuture = computed(() => store.getters['affiliate/affiliatePayoutsFuture']);\n\nconst getAffiliatePayouts = () => {\n  store.dispatch('affiliate/getAffiliatePayouts');\n};\n\nconst headers = [\n  {text: '#', value: 'id'},\n  {text: 'Subscriptions', value: 'subscriptions'},\n  {text: 'Trials', value: 'trials'},\n  {text: 'Period Start', value: 'period_start'},\n  {text: 'Period End', value: 'period_end'},\n  {text: 'Payout', value: 'payout'},\n  {text: 'Paid', value: 'payout_at'},\n];\n\nonMounted(() => {\n  getAffiliatePayouts();\n});\n</script>\n\n","<template>\n  <div>\n    <v-dialog v-model=\"openDialog\" :persistent=\"true\" width=\"500\">\n      <v-card :disabled=\"custodianLoading.create\">\n        <v-card-title class=\"break-normal\">\n          {{ mode }} external custodial\n        </v-card-title>\n        <v-card-text>\n          <p class=\"mb-5\">\n            Allow others outside your company to manage the orders of the selected\n            listings. Whoever accepts the invite link will have control over the\n            listings you select below.\n            <TheHelpLink url=\"https://help.fleetwire.io/en/article/custodians-1wu4w2h/?bust=1664293159925\"/>\n          </p>\n\n          <div v-if=\"mode === 'Edit'\" class=\"grid grid-cols-4 mb-5\">\n            <strong>Company:</strong> <span class=\"col-span-3\">{{ childCompanyName }}</span>\n            <strong>Company Email:</strong> <span class=\"col-span-3\">{{ childCompanyEmail }}</span>\n            <strong>Accepted:</strong> <span class=\"col-span-3\">{{ acceptedAt }}</span>\n          </div>\n\n          <ListingAutocompleteDropdown\n            :allow-multiple=\"true\"\n            :allow-select-all=\"true\"\n            label=\"Listings to manage\"\n            @selectedListing=\"listingSelected($event)\"\n          />\n\n\n          <div class=\"d-none\">\n            <div class=\"text-h6\">Permissions</div>\n            <v-checkbox v-model=\"custodianPermissions.order_view\" density=\"compact\" hide-details>\n              <template v-slot:label>\n                <div>\n                  View Listing Orders\n                </div>\n              </template>\n            </v-checkbox>\n            <v-checkbox v-model=\"custodianPermissions.listing_update\" density=\"compact\" hide-details>\n              <template v-slot:label>\n                <div>\n                  Update Listing Details\n                </div>\n              </template>\n            </v-checkbox>\n          </div>\n        </v-card-text>\n        <v-card-actions>\n          <v-spacer/>\n          <v-btn color=\"grey\" variant=\"text\" @click=\"openDialog = false\">Cancel</v-btn>\n          <v-btn v-if=\"mode === 'Add'\" :disabled=\"nextButtonDisabled\" :loading=\"custodianLoading.create\" color=\"primary\" @click=\"generateLink()\">\n            Next\n          </v-btn>\n          <v-btn v-if=\"mode === 'Edit'\" :disabled=\"nextButtonDisabled\" :loading=\"custodianLoading.update\" color=\"primary\" @click=\"updateCustodianInit()\">\n            Update\n          </v-btn>\n        </v-card-actions>\n      </v-card>\n    </v-dialog>\n\n    <v-dialog v-model=\"openDialogStep2\" width=\"500\">\n      <v-card>\n        <v-card-title class=\"break-normal\">\n          Here is your invite link\n        </v-card-title>\n\n        <v-card-text>\n          <p>\n            Email or Copy & send this link to a custodian you want to\n            have access to the listings you selected.\n            You can delete or change access at any time.\n            <TheHelpLink url=\"https://help.fleetwire.io/en/article/custodians-1wu4w2h/?bust=1664293159925\"/>\n          </p>\n          <div class=\"mt-5\">\n            <v-text-field\n              v-model=\"managerShareEmailLink\"\n              label=\"Email Invite Link\"\n              variant=\"outlined\"\n            >\n              <template v-slot:append>\n                <v-fade-transition :leave-absolute=\"true\">\n                  <v-progress-circular\n                    v-if=\"emailLoading\"\n                    color=\"info\"\n                    indeterminate\n                    size=\"24\"\n                  ></v-progress-circular>\n                  <v-icon v-else @click=\"sendInviteEmailLinkInit()\">mdi-send</v-icon>\n                </v-fade-transition>\n              </template>\n            </v-text-field>\n          </div>\n\n          <div class=\"my-5 hr-lr\">\n            <span>Or</span>\n          </div>\n          <v-scroll-y-transition>\n            <div v-if=\"showManagerShareLink\" class=\"manager-link-container mt-2\">\n              <input id=\"share-link-hidden\" :value=\"managerShareLink\" class=\"d-none\">\n              <div class=\"manager-link-field\">{{ managerShareLink }}</div>\n              <div data-link-only=\"true\">\n                <v-btn variant=\"text\" @click=\"copyToClipboardInit(managerShareLink); copyToClipboardSuccessSnack = true\">\n                  <v-icon size=\"small\">mdi-content-copy</v-icon>\n                </v-btn>\n              </div>\n            </div>\n          </v-scroll-y-transition>\n        </v-card-text>\n        <v-card-actions>\n          <v-spacer/>\n          <v-btn color=\"primary\" @click=\"openDialogStep2 = false\">Okay</v-btn>\n        </v-card-actions>\n      </v-card>\n    </v-dialog>\n\n    <v-snackbar v-model=\"copyToClipboardSuccessSnack\">\n      Copied to clipboard!\n      <template v-slot:actions>\n        <v-btn variant=\"text\" @click=\"copyToClipboardSuccessSnack = false\">\n          Close\n        </v-btn>\n      </template>\n    </v-snackbar>\n  </div>\n</template>\n\n<script lang=\"ts\">\nimport {mapActions, mapGetters} from 'vuex';\nimport {get} from 'lodash';\nimport {EventBus} from '@/plugins/eventBus';\nimport dayjs from 'dayjs';\nimport {copyTextToClipboard} from '@/helpers';\n\nconst ListingAutocompleteDropdown = () => import('@/components/dashboard/listings/ListingAutocompleteDropdown.vue');\n\nexport default {\n  name: 'ListingAddManagersDialog',\n\n  components: {\n    ListingAutocompleteDropdown\n  },\n\n  props: {\n    custodian: {\n      type: Object,\n      default: null,\n    },\n    mode: {\n      type: String,\n      default: 'Add',\n    },\n  },\n\n  data() {\n    return {\n      emailLoading: false,\n      openDialog: false,\n      openDialogStep2: false,\n      copyToClipboardSuccessSnack: false,\n      showManagerShareLink: false,\n      selectedListings: [],\n      managerShareLink: '',\n      managerShareEmailLink: '',\n      currentWorkingInvite: null,\n      custodianPermissions: {\n        order_view: true,\n        listing_update: true,\n      },\n    };\n  },\n\n  created() {\n    EventBus.$on('open-add-listing-manager-dialog', (custodian = null) => {\n      if (this.mode === 'Edit') {\n        this.getCustodianListings(custodian);\n      }\n\n      this.openDialog = true;\n      this.fetchListings();\n    });\n    EventBus.$on('custodial-invite-success', (invite) => {\n      this.openDialog = false;\n\n      if (this.mode === 'Add') {\n        this.openDialogStep2 = true;\n        this.managerShareLink = get(invite, 'invite_url', '');\n        this.currentWorkingInvite = invite;\n        this.showManagerShareLink = true;\n      }\n\n      this.selectedListings = [];\n    });\n\n    EventBus.$on('get-custodian-listings-success', (listings) => {\n      this.selectedListings = listings;\n      EventBus.$emit('set-selected-listings-for-dropdown', listings);\n    });\n  },\n\n  computed: {\n    ...mapGetters({\n      fleetResourceListings: 'listing/fleetResourceListings',\n      custodianLoading: 'custodian/loading',\n      invite: 'custodian/invite',\n      custodianListings: 'custodian/listings',\n    }),\n    childCompanyName() {\n      return get(this.custodian, 'company.name', 'na');\n    },\n    childCompanyEmail() {\n      return get(this.custodian, 'company.email', 'na');\n    },\n    acceptedAt() {\n      if (this.custodian && this.custodian.accepted_at) {\n        return dayjs(this.custodian.accepted_at).format('MMM D, YYYY h:mm A');\n      }\n      return 'Not yet accepted';\n    },\n    allAvailableVehiclesSelected() {\n      return this.selectedListings.length === this.fleetResourceListings.length;\n    },\n    hasSomeVehiclesSelected() {\n      return this.selectedListings.length > 0;\n    },\n    nextButtonDisabled() {\n      return !this.hasSomeVehiclesSelected;\n    },\n    selectedListingIds() {\n      return this.selectedListings.map((listing) => listing.l_id);\n    },\n    icon() {\n      if (this.allAvailableVehiclesSelected) return 'mdi-close-box';\n      if (this.hasSomeVehiclesSelected) return 'mdi-minus-box';\n      return 'mdi-checkbox-blank-outline';\n    },\n  },\n\n  methods: {\n    ...mapActions({\n      fetchListings: 'listing/fetchListings',\n      createInvite: 'custodian/createInvite',\n      updateCustodian: 'custodian/updateCustodian',\n      getCustodianListings: 'custodian/getCustodianListings',\n      sendInviteEmailLink: 'custodian/sendInviteEmailLink',\n    }),\n    sendInviteEmailLinkInit() {\n      this.emailLoading = true;\n      setTimeout(() => {\n        this.emailLoading = false;\n      }, 2000);\n      this.sendInviteEmailLink({\n        custodian_uuid: this.currentWorkingInvite.uuid,\n        email: this.managerShareEmailLink,\n      });\n    },\n    updateCustodianInit() {\n      this.updateCustodian({\n        listings: this.selectedListingIds,\n        custodian: this.custodian,\n      });\n    },\n    generateLink() {\n      this.createInvite({\n        listings: this.selectedListingIds,\n      });\n    },\n    listingSelected(listing) {\n      this.selectedListings = listing;\n    },\n    copyToClipboardInit(text) {\n      try {\n        copyTextToClipboard(text);\n        this.copiedText = true;\n      } catch (err) {\n        console.dir(err);\n        // eslint-disable-next-line no-alert\n        alert('Oops, unable to copy');\n      }\n    },\n  },\n\n  beforeUnmount() {\n    EventBus.$off('open-add-listing-manager-dialog');\n    EventBus.$off('custodial-invite-success');\n    EventBus.$off('get-custodian-listings-success');\n  },\n};\n</script>\n\n<style>\n/*.hr-lr {*/\n/*  width: 100%;*/\n/*  text-align: center;*/\n/*  border-bottom: 1px solid rgba(130, 147, 131, 0.85);*/\n/*  line-height: 0.1em;*/\n/*  margin: 10px 0 20px;*/\n/*}*/\n/*.hr-lr span {*/\n/*  background:#fff;*/\n/*  padding:0 10px;*/\n/*}*/\n\n.hr-lr {\n  overflow: hidden;\n  text-align: center;\n}\n\n.hr-lr:before,\n.hr-lr:after {\n  background-color: #000;\n  content: \"\";\n  display: inline-block;\n  height: 1px;\n  position: relative;\n  vertical-align: middle;\n  width: 50%;\n}\n\n.hr-lr:before {\n  right: 0.5em;\n  margin-left: -50%;\n}\n\n.hr-lr:after {\n  left: 0.5em;\n  margin-right: -50%;\n}\n\n.manager-link-container {\n  align-items: center;\n  background: #f1f3f4;\n  border-radius: 4px;\n  color: #5f6368;\n  display: flex;\n  padding-left: 0.75rem;\n}\n\n.manager-link-field {\n  letter-spacing: .00625em;\n  font-family: Roboto, Arial, sans-serif;\n  font-size: 1rem;\n  font-weight: 400;\n  line-height: 1.5rem;\n  color: #202124;\n  flex-grow: 1;\n}\n</style>\n","<template>\n  <div>\n    <v-card>\n      <v-card-title>Custodians</v-card-title>\n      <v-card-subtitle>\n        Manage your custodians\n        <TheHelpLink url=\"https://help.fleetwire.io/en/article/custodians-1wu4w2h/?bust=1664293159925\"/>\n      </v-card-subtitle>\n      <v-card-text>\n        <table class=\"w-full text-sm text-left text-gray-500 dark:text-gray-400\">\n          <thead class=\"text-xs text-gray-700 uppercase bg-gray-50 dark:bg-gray-700 dark:text-gray-400\">\n          <tr>\n            <th class=\"px-6 py-3\" scope=\"col\">\n              #\n            </th>\n            <th class=\"px-6 py-3\" scope=\"col\">\n              Invite Url\n            </th>\n            <th class=\"px-6 py-3\" scope=\"col\">\n              Accepted\n            </th>\n            <th class=\"px-6 py-3\" scope=\"col\">\n              Company\n            </th>\n            <th class=\"px-6 py-3\" scope=\"col\"></th>\n          </tr>\n          </thead>\n          <tbody>\n          <tr v-for=\"(custodian, index) in custodians\" :key=\"custodian.uuid\" class=\"bg-white border-b dark:bg-gray-800 dark:border-gray-700 hover:bg-gray-50 dark:hover:bg-gray-600\">\n            <th class=\"px-6 py-4 font-medium text-gray-900 whitespace-nowrap dark:text-white\" scope=\"row\">\n              <span v-tippy=\"custodian.uuid\">{{ index + 1 }}</span>\n              <v-icon v-if=\"isAccepted(custodian)\" color=\"green\" size=\"small\">mdi-check</v-icon>\n              <v-icon v-else color=\"orange\" size=\"small\">mdi-account-clock-outline</v-icon>\n            </th>\n            <td class=\"px-6 py-4\">\n              {{ inviteUrl(custodian) }}\n\n              <v-btn v-if=\"!isAccepted(custodian)\" variant=\"text\" @click=\"copyToClipboardInit(inviteUrl(custodian)); copyToClipboardSuccessSnack = true\">\n                <v-icon size=\"small\">mdi-content-copy</v-icon>\n              </v-btn>\n              <input :id=\"`share-link-hidden-${index}`\" :value=\"inviteUrl(custodian)\" class=\"d-none\">\n            </td>\n            <td class=\"px-6 py-4\">\n              {{ acceptedAt(custodian) }}\n            </td>\n            <td class=\"px-6 py-4\">\n              {{ childCompanyName(custodian) }}\n              <div class=\"small\">{{ childCompanyEmail(custodian) }}</div>\n            </td>\n            <td class=\"px-6 py-4\">\n              <div class=\"float-end\">\n                <v-btn size=\"small\" variant=\"text\" @click=\"openDeleteConfirmDialogInit(custodian)\">\n                  <v-icon color=\"red\" size=\"small\">mdi-delete</v-icon>\n                </v-btn>\n                <v-btn size=\"small\" variant=\"text\" @click=\"openUpdateConfirmDialogInit(custodian)\">\n                  <v-icon size=\"small\">mdi-pencil</v-icon>\n                </v-btn>\n                <v-btn class=\"d-none\" size=\"small\" variant=\"text\">\n                  <v-icon size=\"small\">mdi-eye</v-icon>\n                </v-btn>\n              </div>\n            </td>\n          </tr>\n          </tbody>\n        </table>\n      </v-card-text>\n    </v-card>\n\n    <v-dialog v-model=\"openDeleteConfirmDialog\" width=\"400\">\n      <v-card :disabled=\"custodiansLoading.delete\">\n        <v-card-title class=\"break-normal\">\n          Are you sure?\n        </v-card-title>\n        <v-card-text>\n          <div v-if=\"isAccepted(currentWorkingCustodian)\">\n            If you delete this custodian ({{ childCompanyName(currentWorkingCustodian) }}), they will no longer have\n            access to the resources you've allowed.\n            <TheHelpLink url=\"https://help.fleetwire.io/en/article/custodians-1wu4w2h/?bust=1664293159925\"/>\n          </div>\n          <div v-else>\n            If you delete this custodian invite, they will no longer be able to claim the invite link.\n            <TheHelpLink url=\"https://help.fleetwire.io/en/article/custodians-1wu4w2h/?bust=1664293159925\"/>\n          </div>\n        </v-card-text>\n        <v-card-actions>\n          <v-spacer/>\n          <v-btn :loading=\"custodiansLoading.delete\" color=\"error\" @click=\"deleteCustodian(currentWorkingCustodian)\">\n            Delete\n          </v-btn>\n        </v-card-actions>\n      </v-card>\n    </v-dialog>\n\n    <ListingAddManagersDialog :custodian=\"currentWorkingCustodian\" mode=\"Edit\"/>\n\n    <v-snackbar v-model=\"copyToClipboardSuccessSnack\">\n      Copied to clipboard!\n      <template v-slot:actions>\n        <v-btn variant=\"text\" @click=\"copyToClipboardSuccessSnack = false\">\n          Close\n        </v-btn>\n      </template>\n    </v-snackbar>\n  </div>\n</template>\n\n<script lang=\"ts\">\nimport {mapActions, mapGetters} from 'vuex';\nimport {get} from 'lodash';\nimport dayjs from 'dayjs';\nimport {EventBus} from '@/plugins/eventBus';\nimport {copyTextToClipboard} from '@/helpers';\n\nimport ListingAddManagersDialog from '@/components/dashboard/dialogs/ListingAddManagersDialog.vue';\n\nexport default {\n  name: 'CustodianIndex',\n\n  components: {\n    ListingAddManagersDialog,\n  },\n\n  data() {\n    return {\n      copyToClipboardSuccessSnack: false,\n      openDeleteConfirmDialog: false,\n      currentWorkingCustodian: null,\n    };\n  },\n\n  created() {\n    this.getCustodians();\n\n    EventBus.$on('delete-custodian-success', () => {\n      this.openDeleteConfirmDialog = false;\n      this.getCustodians();\n    });\n  },\n\n  computed: {\n    ...mapGetters({\n      custodians: 'custodian/custodians',\n      custodiansLoading: 'custodian/loading',\n    }),\n  },\n\n  methods: {\n    ...mapActions({\n      getCustodians: 'custodian/getCustodians',\n      deleteCustodians: 'custodian/deleteCustodians',\n    }),\n    deleteCustodian(custodian) {\n      this.deleteCustodians(custodian.uuid);\n    },\n    isAccepted(custodian) {\n      if (!custodian) return false;\n      return !!custodian.accepted_at;\n    },\n    acceptedAt(custodian) {\n      if (custodian && custodian.accepted_at) {\n        return dayjs(custodian.accepted_at).format('MMM D, YYYY h:mm A');\n      }\n      return 'Not yet accepted';\n    },\n    inviteUrl(custodian) {\n      if (custodian.invite_url) {\n        return custodian.invite_url;\n      }\n      return 'Claimed';\n    },\n    childCompanyName(custodian) {\n      return get(custodian, 'company.name', '-');\n    },\n    childCompanyEmail(custodian) {\n      return get(custodian, 'company.email', '-');\n    },\n    openDeleteConfirmDialogInit(custodian) {\n      this.currentWorkingCustodian = custodian;\n      this.openDeleteConfirmDialog = true;\n    },\n    openUpdateConfirmDialogInit(custodian) {\n      this.currentWorkingCustodian = custodian;\n      EventBus.$emit('open-add-listing-manager-dialog', custodian);\n    },\n    async copyToClipboardInit(value) {\n      try {\n        await copyTextToClipboard(value);\n        this.copiedText = true;\n      } catch (error) {\n        console.error(error);\n      }\n    },\n  },\n\n  beforeUnmount() {\n    EventBus.$off('delete-custodian-success');\n  },\n};\n</script>\n","<template>\n  <div class=\"CardOnFileCard\">\n    <v-card style=\"border: 1px solid rgb(224, 220, 229);\" variant=\"flat\">\n      <v-card-text>\n        <div>\n          <div class=\"text-gray-500 dark:text-gray-400\">Card On File</div>\n          <div class=\"mb-4 text-xl font-medium text-gray-900 dark:text-white\">\n            <span v-if=\"!!cardLastFour\"> **** **** **** {{ cardLastFour }}</span>\n            <span v-else>No Card on File</span>\n          </div>\n          <div>\n            <a style=\"cursor: pointer;color: rgb(37, 98, 212);\" @click=\"fetchSetupUrlInit()\">\n              Update credit card\n            </a>\n          </div>\n        </div>\n      </v-card-text>\n    </v-card>\n  </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport {computed} from 'vue';\nimport {useCompany} from \"@/composables/useCompany\";\nimport {useStripe} from \"@/composables/useStripe\";\n\n\nconst {fetchSetupUrl} = useStripe();\nconst {company} = useCompany()\nconst cardLastFour = computed(() => company.value?.pm_last_four);\n\nconst fetchSetupUrlInit = () => {\n  fetchSetupUrl({\n    returnUrl: `${window.location.origin}/settings/account`,\n    cancelUrl: `${window.location.origin}/settings/account`,\n  }).then((response) => {\n    console.dir(response);\n    window.location.href = response.url;\n  });\n}\n\n</script>","<template>\n  <div class=\"RenewsOneCard\">\n    <v-card style=\"border: 1px solid rgb(224, 220, 229);\" variant=\"flat\">\n      <v-card-text>\n        <div>\n          <div class=\"text-gray-500 dark:text-gray-400\">\n            <span v-if=\"inGracePeriod\">Ends On</span>\n            <span v-else-if=\"inTrial\">Trialing Until</span>\n            <span v-else>Renews On</span>\n          </div>\n          <div class=\"mb-4 text-xl font-medium text-gray-900 dark:text-white\">\n            <span v-if=\"inGracePeriod\">{{ stripeEndDate }}</span>\n            <span v-else-if=\"inTrial\">{{ trialEndDate }}</span>\n            <span v-else>{{ currentStripeSubscriptionObjectRenewalDate }}</span>\n          </div>\n          <div>\n            <router-link :to=\"{name: 'settings.account.receipts'}\" style=\"color: rgb(37, 98, 212);\">\n              View receipts\n            </router-link>\n          </div>\n        </div>\n      </v-card-text>\n    </v-card>\n  </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport {useSubscription} from '@/composables/useSubscription';\n\nconst {\n  inTrial,\n  trialEndDate,\n  currentStripeSubscriptionObjectRenewalDate,\n  stripeEndDate,\n  inGracePeriod,\n} = useSubscription();\n</script>","<template>\n  <div class=\"PlanPriceCard\">\n    <v-card style=\"border: 1px solid rgb(224, 220, 229);\" variant=\"flat\">\n      <v-card-text>\n        <div>\n          <div class=\"text-gray-500 dark:text-gray-400\">\n            <span v-if=\"inTrial\">Plan Price after trial</span>\n            <span v-else>Plan Price</span>\n          </div>\n          <div class=\"mb-4 text-xl font-medium text-gray-900 dark:text-white\">\n            <span>{{ currentStripeSubscriptionObjectPlanAmount }}</span>\n          </div>\n          <div>\n            <router-link\n              :to=\"{name: 'settings.account.billing'}\"\n              style=\"color: rgb(37, 98, 212);\"\n            >\n              View billing details\n            </router-link>\n          </div>\n        </div>\n      </v-card-text>\n    </v-card>\n  </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport {useSubscription} from \"@/composables/useSubscription\";\n\nconst {inTrial, currentStripeSubscriptionObjectPlanAmount} = useSubscription();\n</script>"],"file":"assets/app-C1Dx1yRe.js"}