{"version":3,"file":"static/js/default-index.tsx-270e7a47979d991cb8c3.js","mappings":"y/BAuBO,MAAMA,EAAiC,I,IAAA,SAC5CC,EAAQ,SACRC,GAAQ,EACLC,EAAK,IAHoC,yBAK5C,IAAIC,EACJ,OAAQH,GACN,IAAK,SAEHG,EAAO,gBAAC,MAAQ,CAACC,MAAO,CAAEC,WAAY,UACtC,MACF,IAAK,WACHF,EAAO,gBAAC,MAAU,MAClB,MACF,IAAK,SACHA,EAAO,gBAAC,MAAQ,MAChB,MACF,QACEA,EAAO,KAGX,OACE,gBAAC,IAAY,wBAAWH,GAAcE,EAAK,CAAEI,SAAUJ,EAAMI,WAC1DH,EACAF,K,uYCfA,MAAMF,EAAiC,I,IAAA,SAC5CC,EAAQ,MACRO,EAAQ,WAAU,SAClBC,EAAQ,SACRC,EAAQ,aACRC,EAAY,UACZC,EAAS,SACTV,GAAQ,EACLC,EAAK,IARoC,kFAW5C,MAAMU,EAAcD,GAAaE,QAAQH,GACzC,OACE,gBAAC,KAAY,wBACDV,EAAQ,MACXO,EAAK,SACFC,EAAQ,UACPI,EACXN,SAAUJ,EAAMI,UACZJ,GAEHO,EACC,gCACE,gBAAC,KAAoB,KACnB,gBAAC,KAAoB,M,IAAKC,GAG5B,gBAAC,KAA2B,KAAET,IAE9B,K,+CCtDV,MAaaa,EAAY,QAA0B;IAb1B,EAAGP,MAAAA,EAAQ,SAClC,OAAQA,GACN,IAAK,KACH,OAAO,IAAG;qBACML,GAAUA,EAAMa,MAAMC,UAAUC;QAElD,IAAK,KACH,OAAO,IAAG;qBACMf,GAAUA,EAAMa,MAAMC,UAAUE;;;;IASlD,EAAGC,SAAAA,KACU,KAAbA,EACI,IAAG;wBACaA;2BACGA;UAEnB;0YCtBD,MAAMC,EAAuC,I,IAAA,SAClDC,EAAQ,KACRC,GAAI,EACDpB,EAAK,IAH0C,qBAKlD,OACE,gBAAC,IAAe,eAACmB,SAAUA,GAAcnB,GACvC,yBAAIoB,M,4FCIV,MAAMC,EAAe,CACnBC,MAAO,MACPC,KAAM,QACNC,OAAQ,QACRC,QAAQ,EACRC,YAAa,UACbC,UAAW,2BAGAC,EAAgC,EAC3CC,WAAAA,EACAC,UAAAA,EACAC,aAAAA,EACAC,iBAAAA,GAAmB,EACnBC,cAAAA,GAAgB,EAChBC,eAAAA,GAAiB,EACjBC,iBAAAA,MAEA,MAAM,EAAEC,IAAM,SAEd,OACE,2BACE,gBAAC,IAAkB,KACjB,gBAAC,IAAY,eAACC,GAAI,eAAmBhB,GAClCe,EAAE,iCAEL,gBAAC,IAAgB,CACfb,KAAM,SACNnB,SAAU8B,GAAkBC,EAC5BG,QAAST,EAAU,yBAEV,eAET,gBAAC,MAAM,CAACU,KAAM,MAEhB,gBAAC,IAAY,eAACF,GAAI,iBAAqBhB,GACpCe,EAAE,mCAEL,gBAAC,IAAgB,CACfb,KAAM,SACNnB,SAAU4B,GAAoBG,EAC9BG,QAASP,EAAY,yBAEZ,iBAET,gBAAC,MAAO,CAACQ,KAAM,MAEjB,gBAAC,IAAY,eAACF,GAAI,cAAkBhB,GACjCe,EAAE,gCAEL,gBAAC,IAAgB,CACfb,KAAM,SACNnB,SAAU6B,GAAiBE,EAC3BG,QAASR,EAAS,yBAET,cAET,gBAAC,MAAM,CAACS,KAAM,U,gDChExB,MAAMC,E,QAAY,IAEhB;;;WAGS,EAAGC,QAAAA,EAAS5B,MAAAA,MACnB,OAAQ4B,GACN,IAAK,UACH,OAAO5B,EAAM6B,MAAMC,QAAQjB,YAC7B,IAAK,QACH,OAAOb,EAAM6B,MAAME,MAAMlB,YAC3B,QACE,OAAOb,EAAM6B,MAAMG,QAAQnB;EAKtBoB,EAA8C,EAAGC,QAAAA,KAE1D,iCACGA,MAAAA,OAAO,EAAPA,EAASH,QACR,gBAACJ,EAAS,eAAc,QAAO,aAAa,OAAOC,QAAQ,SACxDM,MAAAA,OAAO,EAAPA,EAASH,QAGbG,MAAAA,OAAO,EAAPA,EAASJ,UACR,gBAACH,EAAS,CAACC,QAAQ,WAAWM,MAAAA,OAAO,EAAPA,EAASJ,W,uYC3BxC,MAAMK,EAAiC,I,IAAA,MAAEC,EAAK,QAAEC,GAAO,EAAKlD,EAAK,IAA1B,qBAC5C,OAAOkD,EACL,gBAAC,IAAY,KACX,gBAAC,IAAY,iBAAKlD,GAAQiD,IAG5B,gBAAC,IAAY,iBAAKjD,GAAQiD,K,qYCTvB,MAAME,EAAmC,I,IAAA,QAC9CC,EAAO,SACPrD,GAAQ,EACLC,EAAK,IAHsC,wBAK9C,OACE,gBAAC,IAAa,uBAAUoD,GAAapD,GAClCoD,GAAW,uBAAKzB,UAAW,iBAAkByB,GAC9C,uBAAKzB,UAAW,gBAAiB5B,M,qICIvC,MAAMsD,EAAuB,CAC3BC,QAAS,CACPC,IAAK,MACLC,KAAM,MACNC,MAAO,OACPC,OAAQ,OACRC,OAAQ,IACRC,MAAO,QACPC,aAAc,MACdC,UAAW,uCACXC,YAAa,OACbC,UAAW,wBACXC,gBAAiB,QAEnBC,QAAS,CACPC,OAAQ,mBAINC,EAA0B,CAC9Bd,QAAS,OAAF,wBACFD,EAAaC,SAAO,CACvBO,aAAc,MACdC,eAAWO,EACXC,SAAU,QACVV,MAAO,OACPW,OAAQ,OACRC,UAAW,OACXC,SAAU,OACVC,QAAS,EACTf,OAAQ,EACRgB,SAAU,WAEZT,QAAS,CACPD,gBAAiB,qBACjBE,OAAQ,mBAINS,EAAgC,CACpCtB,QAAS,CACPC,IAAK,MACLC,KAAM,MACNC,MAAO,OACPC,OAAQ,OACRC,OAAQ,IACRC,MAAO,QACPnC,OAAQ,OACRwC,gBAAiB,cACjBF,YAAa,OACbC,UAAW,yBAEbE,QAAS,CACPC,OAAQ,mBAINU,EAA+B,CACnCvB,QAAS,CACPC,IAAK,MACLC,KAAM,MACNC,MAAO,OACPC,OAAQ,OACRC,OAAQ,IACRC,MAAO,MACPc,QAAS,IACTb,aAAc,MACdC,UAAW,iCACXG,gBAAiB,OACjBD,UAAW,wBAEbE,QAAS,CACPD,gBAAiB,qBAIfa,EAA6B,CACjCxB,QAAS,CACPyB,SAAU,WACVxB,IAAK,EACLG,OAAQ,EACRD,MAAO,EACPD,KAAM,EACNkB,QAAS,IACTb,aAAc,MACdC,UAAW,iCACXG,gBAAiB,QAEnBC,QAAS,CACPD,gBAAiB,qBAIfe,EAAgB,QAAU;;;;;;;;;;;;;;;;EAkB1BC,EAAe,QAAU;;;;;EAOzBC,EAAY,QAA2D;;;IAGzE,EAAGC,cAAAA,EAAeC,UAAAA,KAClBD,GAAiBC,EACb,IAAG;;;;;;;;UASH;IACJ,EAAGA,UAAAA,KACHA,GACA,IAAG;;;EAoBMC,EAA8B,EACzCC,OAAAA,EACAvF,SAAAA,EACAwF,aAAAA,EACAC,gBAAAA,EACAL,cAAAA,EACAM,YAAAA,EACAL,UAAAA,EAEAM,OAAAA,MAEA,MAAOC,EAAUC,IAAe,IAAAC,WAAS,IAElCC,EAAaC,IAAkB,IAAAF,UAASG,OAAOC,aAEtD,IAAAC,YAAU,KACR,MAAMC,EAAe,KACnBJ,EAAeC,OAAOC,aAKxB,OAFAD,OAAOI,iBAAiB,SAAUD,GAE3B,KACLH,OAAOK,oBAAoB,SAAUF,MAEtC,IAEH,MAAMG,EAA2B,CAC/BhD,QAAS,CACPC,IAAK,MACLC,KAAM,MACNC,MAAO,OACPC,OAAQ,OACRC,OAAQ,IACRC,MAAOkC,EAAe,IAAc,QAAR,MAC5BpB,QAASoB,EAAe,IAAY,OAAN,IAC9BjC,aAAc,MACdC,UAAW,uCACXG,gBAAiB,OACjBD,UAAW,yBAEbE,QAAS,CACPD,gBAAiB,qBACjBE,OAAQ,mBAIZ,OACE,gBAAC,IAAU,CACTmB,OAAQA,EACRiB,eAAgBhB,EAChBrF,MACEuF,IAAgBE,EACZd,EACAY,GAAeE,EACfb,EACAK,EACAP,EACAQ,EACAhB,EACAsB,EACAY,EACAjD,EAENmD,eAAe,GAWbhB,GAAoBJ,EAIlB,KAHF,gBAACF,EAAS,CAACC,cAAeA,EAAe7C,QAASiD,GAChD,gBAAC,MAAc,OAIlBE,EACC,gCACE,gBAACT,EAAa,KACZ,kDACA,gBAACC,EAAY,KACVU,EACC,gBAAC,IAAY,CAACrD,QAAS,IAAMsD,GAAY,KAEzC,gBAAC,IAAU,CAACtD,QAAS,IAAMsD,GAAY,KAEzC,gBAAC,IAAc,CAACtD,QAASiD,OAI7B,KACHxF,IAKP,kBAAyB,U,2FCvQlB,MAAM0G,EAAsC,EACjDC,MAAAA,EAAQ,QACRC,SAAAA,EAAW,SAGX,MAAMC,EAA+C,CACnD/D,QAAS,gBAAC,MAAoB,CAACgE,MAAO,UAAWtE,KAAMoE,IACvDhE,QAAS,gBAAC,MAA2B,CAACkE,MAAO,UAAWtE,KAAMoE,IAC9D/D,MAAO,gBAAC,MAAoB,CAACiE,MAAO,UAAWtE,KAAMoE,IAErDG,MAAO,uBAAKlD,MAAO,EAAGW,OAAQoC,KAGhC,OACE,gBAAC,IAAe,KACd,6BACCC,EAAMF,GACP,gC,qYCzBN,MAAMK,EAAgB,WAAa;;;;;;;iBAOlB,EAAGlG,MAAAA,KAAYA,EAAMmG,KAAKC;;;;aAI9B,EAAGpG,MAAAA,KAAYA,EAAMgG,MAAMK;;;;;;EAQ3BC,EAAsC,I,IAAA,SACjDpH,EAAQ,KACRwB,EAAO,UAAQ,EACZ6F,EAAI,IAH0C,qBAKjD,OACE,gBAACL,EAAa,eAACxF,KAAMA,GAAU6F,GAC5BrH,K,sgBCWA,MAAMsH,EAAgD,EAC3DC,SAAAA,EACAC,MAAAA,EACAC,aAAAA,EACAC,cAAAA,EACAC,YAAAA,EACAC,UAAAA,EACAC,aAAAA,EACAC,gBAAAA,MAEA,MAAMC,GAAW,UAEXC,GAAe,QAA0BD,EAASE,SAAU,CAChEC,KAAM,CAAC,uBAA6B,MACpCC,OAAO,EACPC,QAAQ,IAEJC,GAASL,MAAAA,OAAY,EAAZA,EAAcM,SACzB,GAAGrC,OAAO8B,SAASQ,SAASR,EAASE,gBACrC3D,GAEGkE,EAA4BC,IACjC,IAAA3C,WAAkB,IACb4C,EAA4BC,IAAiC,IAAA7C,UAElE,WACK8C,EAAiBC,IAAsB,IAAA/C,WAAS,GAEjDgD,GAAiB,IAAAC,SAAO,IAC9B,IAAA5C,YAAU,KACR2C,EAAeE,SAAU,EAClB,KACDF,IACFA,EAAeE,SAAU,OAI/B,MAAMC,EAAqB,KACrBH,EAAeE,SACjBH,GAAmB,IAIjBK,EAAoCC,GAAuB,OAAD,6B,MAK9D,IAAIC,EAJA3B,GACFA,IAIEK,IACFsB,QAAuBtB,KAGzB,MAAMuB,GAAwB,UAUxBC,QAAqB,SACF,6BAAoC,OAAF,QACvD9B,MAAAA,EACAa,OAAAA,EACAkB,YAAaC,SAASC,eAAYnF,EAClC6E,WAAYA,EACZ5B,SAAUA,EACV6B,eAAgBA,GAAkB,GAClCM,YAAYL,MAAAA,OAAqB,EAArBA,EAAuBK,kBAAcpF,EACjDqF,cAAcN,MAAAA,OAAqB,EAArBA,EAAuBM,oBAAgBrF,GAElDuD,IAEJ+B,OAAO/G,IACN,MAAMgH,GAAc,OAAchH,GAE9B8E,GACFA,EAAYkC,EAAYC,QAASD,EAAYE,OAG/C,QAAW,CACTC,UAAW,wBACXC,QAAS,iBAETC,KACY,WAAV1C,EACI,SACU,WAAVA,EACA,cACAlD,EACN6F,OAAQ,CACNC,OAAQ,CACNC,UAAWR,EAAYE,KACvBO,iBAAkBT,EAAYC,QAC9BvC,SAAAA,EACAC,MAAAA,EACA+C,OAAQ1C,MAAAA,OAAY,EAAZA,EAAc2C,SAG1BC,qBAAqB,OAI3B,IAAKnB,EACH,OAGF,MAAMoB,EAA4B,QAAjB,EAAApB,EAAaqB,YAAI,eAAEA,KAC9BC,EAAkBF,MAAAA,OAAQ,EAARA,EAAUG,YAElC,GACGD,GACAA,EAAgBE,UAChBF,EAAgBG,SAChBH,EAAgBI,aAChBJ,EAAgBK,aALnB,CA6BA,IAhBA,QAAuBP,GAAUQ,MAAMC,SAGvC,QAAW,CACTnB,UAAW,SACXC,QAAS,iBACTC,KAAM,YAGR,QAAyB,CACvBY,SAAUF,EAAgBE,SAC1BC,QAASH,EAAgBG,QACzBC,YAAaJ,EAAgBI,YAC7BC,aAAcL,EAAgBK,eAGlB,WAAVzD,EAEF,UACQ,uBACN,MAAO3E,eAKH,kBAAyB,GAG7B6E,GAAiBgD,GACnBhD,EAAcgD,IAGhB,cAsDF,OAAO,gCAnDgB,MACrB,OAAQnD,GACN,IAAK,WAEH,OAAOqB,EACL,gBAAC,IAAa,CAACpB,MAAOA,IACV,WAAVA,EACF,gBAAC,IAAoB,CACnB4D,gBAAiBlC,EACjB1B,MAAOA,EACP6D,eAAgBpC,IAGlB,gBAAC,IAAoB,CACnBmC,gBAAiBlC,EACjB1B,MAAOA,EACPI,UAAWA,EACXyD,eAAgBpC,IAGtB,IAAK,SACH,MAAc,WAAVzB,GAAqD,WAA/BkB,EAEtB,uBAAKvI,MAAO,CAAEmL,QAAS9C,EAA6B,EAAI,IACtD,gBAAC,IAAkB,CACjB4C,gBAAiBlC,EACjB1B,MAAOA,EACP+D,6BAA8B,KAI5B9C,GAA8B,IAEhC+C,2BAA4B,KAE1B7C,EAA8B,cAOpC,gBAAC,IAAkB,CACjByC,gBAAiBlC,EACjB1B,MAAOA,MAOTiE,M,0DC7OL,MAAMC,EAA0D,EACrEC,UAAAA,EACAC,QAAAA,EAAU,IACVC,SAAAA,EAAW,IACXC,YAAAA,EACAC,aAAAA,EACAC,YAAAA,EACAC,UAAAA,EAAY,gBAEZ,MAAMC,GAAQ,IAAAnD,QAAsB,MAC9BoD,GAAc,IAAApD,SAAgB,GAC9BqD,GAAa,IAAArD,WAEb,cAAEsD,IAAkB,QAAwBH,GA8DlD,OA3DA,IAAA/F,YAAU,KAER,MAAMmG,GAAW,QAAkBV,EAASC,GAC5CK,EAAMlD,QAAU/C,OAAOsG,KAAKZ,EAAWM,EAAWK,GAClD,MAAME,EAAeN,EAAMlD,QAE3B,GAAKwD,EAgBL,OAVAV,EAAYU,GACZA,EAAaC,SAGb,QAAuB,CACrBT,YAAAA,EACAE,MAAOM,IAIF,KAEDN,EAAMlD,UACRkD,EAAMlD,QAAQ0D,QACdX,MAnBFA,MAsBD,KAGH,IAAA5F,YAAU,KACR,MAAMqG,EAAeN,EAAMlD,QAU3B,OATIwD,IACFJ,EAAWpD,QAAU2D,aAAY,KAC3BH,EAAaI,SAAWT,EAAYnD,UACtCmD,EAAYnD,SAAU,EACtB+C,OAED,MAGE,KACDK,EAAWpD,SACb6D,cAAcT,EAAWpD,YAG5B,CAACkD,KAGJ,IAAA/F,YAAU,KACJkG,IAEFN,EAAaM,GACbH,EAAMlD,QAAS0D,WAEhB,CAACL,IAEG,O,gFC5EF,MAAMS,EAAoC,EAC/CC,WAAAA,EAAa,OACb/M,SAAAA,EACAgN,eAAAA,EACAC,uBAAAA,MAEA,MAAO1H,EAAQ2H,IAAa,IAAApH,WAAS,GAC/BqH,EAAuB,IAAMD,GAAU,GACvCE,GAAe,OAAaD,GAElC,OACE,gBAAC,KAAe,CAACE,IAAK9H,EAAS6H,OAAe9I,GAC5C,wBAAM/B,QAAS,IAAM2K,GAAWI,IAAOA,KACpCN,GAAkB,gBAAC,IAAW,OAEjC,gBAAC,KAAkB,YACLD,EAAU,QACbxH,EAAM,uBACS0H,EAExB1K,QAAS4K,GAERnN,M,kZCvBF,MAAMuN,EAAqC,I,IAAA,MAChDC,EAAK,QACLC,EAAO,SACPC,EAAQ,KACRC,EAAI,SACJtN,EAAQ,SACRL,EAAQ,QACRgD,GAAO,EACJ4K,EAAU,IARmC,uEAUhD,OACE,gBAAC,WAAc,KACb,gBAAC,IAAc,CAAChM,UAAW,IAAGvB,EAAW,WAAa,KACpD,yBAAOuB,UAAU,aACd5B,EACD,uCACEK,SAAUA,EACVmB,KAAK,WACLmM,KAAMA,EACNrL,GAAIqL,EACJH,MAAOA,EACPC,QAASA,EACTC,SAAUA,GACNE,IAEN,wBAAMhM,UAAU,gBAGnBoB,GAAW,gBAAC,IAAa,SAAUA,O,sYClCnC,MAAM6K,EAA2C,I,IAAA,eACtDC,EAAc,aACdC,GAAY,EACT9N,EAAK,IAH8C,mCAKtD,OACE,gBAAC,IAAiB,KAChB,6BAAQ6N,GACR,yCAAW7N,EAAK,CAAEuB,KAAK,UACvB,6BAAQuM,M,saCYP,MAAMC,EAIR,I,OAAA,MACHC,EAAK,SACLC,EAAQ,UACRC,EAAS,QACTnL,EAAO,WACP+J,EACM,WACNqB,EAAU,aACVC,EAAY,cACZC,EAAa,mBACbC,EAAkB,iBAClBC,GAAgB,EACbvO,EAAK,IAZL,sJAcH,MAAMwO,EAAU,GAAGxO,EAAM0N,QAClBe,EAAWC,IAAgB,IAAA7I,WAAS,IACpC8I,EAAUC,IAAe,IAAA/I,WAAS,GACnCgJ,GAAW,IAAA/F,QAAyB,OAE1C,IAAA5C,YAAU,KACJqI,GAAoBM,EAAS9F,SAC/BwF,EAAiBM,EAAS9F,WAE3B,CAAC8F,EAAS9F,QAASwF,IAwBtB,OARA,IAAArI,YAAU,K,OACY,QAAhB,EAAA2I,EAAS9F,eAAO,eAAEwE,OACpBqB,GAAY,GAEZA,GAAY,KAEb,CAAiB,QAAhB,EAAAC,EAAS9F,eAAO,eAAEwE,QAGpB,gBAAC,KAAW,YACET,GAAc,SAAQ,QACzB/J,EACTxB,KAAMvB,EAAMuB,KACZmM,KAAM1N,EAAM0N,KACZrL,GAAImM,EAAO,WACCL,EACZxM,UAAW3B,EAAM2B,WAEhBqM,GACC,gBAAC,IAAK,WAAYhO,EAAMI,SAAU0O,QAASN,EAAO,OAAUR,IAE9D,gBAAC,KAAkB,KAChBK,GACC,gBAAC,KAAmB,CAClBS,QAASN,EACTO,WAAYN,GAAaE,EACzBrM,QAAS,KAAK,MAAC,OAAiB,QAAjB,EAAAuM,MAAAA,OAAQ,EAARA,EAAU9F,eAAO,eAAEyD,UAEjCiC,GAAaE,EAAWN,EAAcW,cAAgBZ,GAG1DH,EAAW,gBAAC,KAAS,OAAQ,QAASA,GAAwB,KAC/D,yCACMjO,EAAK,CACToN,IAAKyB,EACLtN,KAAMvB,EAAMuB,KACZmM,KAAM1N,EAAM0N,KACZrL,GAAImM,EACJS,QApDaC,IACnBR,GAAa,GACT1O,EAAMiP,SACRjP,EAAMiP,QAAQC,IAkDVC,OA9CYD,IAClBR,GAAa,GACT1O,EAAMmP,QACRnP,EAAMmP,OAAOD,IA4CThP,MACEkO,GAAgBC,IAAkBI,GAAaE,GAC3C,CACES,WAAY,QACZC,cAAe,QACfC,UAAW,QACX/K,OAAQ,OACRsC,MAAQyH,EAAsB,WAAUjK,GAE1C+J,GAAgBC,IAAkBI,IAAcE,EAChD,CACEpK,OAAQ,QAEV,MAGP2J,EAAY,gBAAC,KAAS,OAAQ,SAAUA,GAAyB,MAGnEnL,GAAW,gBAAC,IAAa,SAAUA,O,waCxGnC,MAAMwM,EAA2C,I,IAAA,KACtD7B,EAAI,SACJtN,EAAQ,SACRG,EAAQ,WACRuM,EAAU,OACV0C,EAAM,SACNC,EAAQ,cACRC,EAAa,QACb3M,EAAO,WACPoL,GAAU,EACPnO,EAAK,IAV8C,wGAYtD,MAAM2P,EAAW,GAAGjC,UACpB,OACE,gBAAC,IAAY,UACD+B,EAAQ,WACN3C,GAAc,SAC1BY,KAAMA,EAAI,cACKgC,EAAa,QACnB3M,EAAO,WACJoL,GAEXqB,GACC,gBAAC,IAAK,WAAYpP,EAAU0O,QAASa,EAAQ,OAAUH,IAEzD,gBAAC,IAAa,KACZ,wCACE9B,KAAMA,EACNrL,GAAIsN,GACA3P,EAAK,CACTI,SAAUA,GAAYG,IAErBmP,GACC,0BAAQnC,MAAM,IAAIhN,EAAW,aAAemP,GAE7CD,GACCA,EAASG,KAAKC,GACZ,gBAAC,WAAc,CAACC,IAAKD,EAAOtC,OAC1B,0BAAQA,MAAOsC,EAAOtC,MAAOnN,SAAUyP,EAAOzP,UAC3CyP,EAAO7B,WAKlB,2BACE,gBAAC,MAAa,QAGjBjL,GAAW,gBAAC,IAAa,SAAUA,O,iHCQnC,MAAMgN,EAA+C,EAC1DC,cAAAA,EACAC,YAAAA,GAAc,EACdC,SAAAA,EACAC,YAAAA,EACAC,aAAAA,EACAC,aAAAA,GAAe,EACfC,qBAAAA,EACAC,mBAAAA,EACAC,cAAAA,EACAC,gBAAAA,EACAC,UAAAA,EACAC,YAAAA,EACAC,QAAAA,EACAC,WAAAA,EACA9N,QAAAA,EACAoM,OAAAA,EACAzB,KAAAA,EACAoD,WAAAA,EACAC,OAAAA,EACAC,eAAAA,EACAC,eAAAA,EACAC,WAAAA,EACAC,gBAAAA,EACAC,gBAAAA,EACAC,QAAAA,EACAC,WAAAA,EACAC,WAAAA,EACAnD,aAAAA,EACAC,cAAAA,EACAmD,iBAAAA,EACAlD,mBAAAA,EACAmD,sBAAAA,EAEAC,WAAAA,MAEA,MAAM,UAAEC,EAAS,sBAAEC,EAAqB,eAAEC,IACxC,OAAkB,CAChBzB,aAAcA,IAIZ0B,EAAa,CACjBvB,mBAAAA,EACAU,eAAAA,EACAC,WAAAA,EACAH,OAAAA,EACAK,gBAAAA,EACAE,WAAAA,EACAlD,aAAAA,EACAC,cAAAA,EACAmD,iBAAAA,EACAC,sBAAAA,EACAG,sBAAAA,EACAL,WAAAA,EAEAQ,qBAAsBF,EACjBzB,EAA6BpC,WAC9B3J,EACJ2N,uBAAwBhB,EACxB1C,mBAAAA,GAGI2D,EACJ5B,GAAgBM,EACZ,CAAEuB,kBAAmB,IAAM,KAAMC,mBAAoB,IAAM,MAC3D,GAEN,OACE,gBAAC,KAAkB,CACjB/E,IAAKuE,EACLjB,UAAWA,EAAS,cACPgB,GAEZf,EACC,gBAAC,IAAW,eACVyB,WAAU,eACRC,OAAQ,KACRC,YAAa,KACbC,QAAS,KACTC,KAAM,KACNC,SAAU,KACVC,eAAgB,KAChBC,oBAAqB,MAClBV,GAELW,OAAQzB,EAAkB,KAAa,KACvClB,YAAaA,EAEbI,cAAY,EACZwC,eAAgB7C,EAChBI,aAAcA,EACd3C,SAAWqF,IACT5C,EAAS4C,IAEXnC,YAAaA,EACbR,YAAaO,EAAY,aAAeP,EACxChB,OAAQA,EACRzB,KAAMA,EACNoD,WAAYA,EACZD,WAAYH,GAAaG,GACrBiB,IAGN,gBAAC,KAAM,eACLhB,WAAYA,EACZiC,QAAS/C,EACTI,aAAcA,EACdgC,WAAU,eACRC,OAAQ,KACRC,YAAa,KACbC,QAAS,KACTC,KAAM,KACNC,SAAU,KACVC,eAAgB,KAChBC,oBAAqB,MAClBV,GAELW,OAAQzB,EAAkB,KAAa,KACvClB,YAAaA,EACbE,YAAaO,EAAY,aAAeP,EACxC6C,iBACE1C,EAAuB,IAAMA,OAAuBjM,EAEtDwM,WAAYH,GAAaG,EACzBR,aAAcA,GAAgBI,EAC9BhD,SAAWqF,IACT5C,EAAS4C,IAEXtC,cAAgByC,IACVzC,GACFA,EAAcyC,IAGlBC,aAAczC,EAAkB,KAAM,OAAOpM,EAC7CuM,QAASA,EACTzB,OAAQA,EACRzB,KAAMA,EACNyF,UAAW9B,GACPS,IAGP/O,GAAW,gBAAC,IAAa,SAAUA,O,sYC/MnC,MAAMqQ,EAA2C,I,IAAA,WACtDC,EAAU,SACVvT,EAAQ,WACRwT,EAAU,YACVC,EAAW,MACXlT,EAAK,YACLmT,GAAW,EACRxT,EAAK,IAP8C,4EAStD,OACE,gBAAC,KAAa,OAAQK,EAAK,SAAYP,EAAQ,WAAcuT,GAC1DC,GACC,yBAAOpT,MAAO,CAAE6D,YAAa,SAAWuP,GAE1C,gBAAC,KAAW,aAAcE,EAAW,MAASnT,GAC5C,uCACED,SAAUoT,EACVhG,QAAS6F,EACT9R,KAAK,YACDvB,IAEN,gBAAC,KAAU,OAAQK,EAAK,SAAYP,EAAQ,WAAcuT,KAE3DE,GACC,yBAAOrT,MAAO,CAAEC,WAAY,SAAWoT,M,2DCjCxC,MAAME,EAA8B,EACzCC,UAAAA,EACA5E,QAAAA,EACAU,OAAAA,EACAmE,WAAAA,MAEA,MAAMC,EAAU,GAAG9E,IACnB,OAAO6E,EACL,gBAAC,EAAAE,EAAW,WACCH,EACX5E,QAAS8E,EACTE,wBAAyB,CACvBC,OAAQvE,GAAU,MAItB,gBAAC,EAAAqE,EAAW,WAAYH,EAAW5E,QAAS8E,GACzCpE,K,qGCpBP,MAAMwE,EAAe,QAAU;;;;;;;EASzBC,EAAS,QAAU;;;;EAcZC,EAAuC,EAClDlG,MAAAA,EACAmG,OAAAA,EACAC,WAAAA,EACAtF,QAAAA,EACAuF,QAAAA,MAEA,MAAM,EAAEjS,IAAM,SAGd,OACE,gBAAC4R,EAAY,KACX,2BACE,gBAAC,IAAK,CAAClF,QAASA,EAAO,OALHsF,EAAa,GAAGpG,yBAA+BA,EAKf2F,YAAU,IAC7DU,EACC,gCACE,gBAAC,MAAsB,CAAC9R,KAAM,QAAO,WAAY8R,IACjD,gBAAC,IAAY,CACX/S,MAAO,SACPG,QAAM,EACNwC,gBAAiB,qBACjBvC,YAAa,UACbC,UAAW,uBAGb,MAELwS,EACC,gBAACF,EAAM,KACL,qBAAGK,KAAMH,EAAQI,OAAQ,SAAUC,IAAK,uBACrCpS,EAAE,0CAGL,Q,4HCMH,MAAMqS,EAAwC,EACnDC,YAAAA,EACAC,WAAAA,EAAa,EACbC,gBAAAA,EACAC,gBAAAA,EACAC,oBAAAA,EACAC,cAAAA,EACAC,gBAAAA,EACAC,sBAAAA,EACAC,cAAAA,EACAC,cAAAA,EACAhF,YAAAA,EACAO,UAAAA,EACAG,WAAAA,EACA9N,QAAAA,EACA2O,WAAAA,EACA0D,YAAAA,GAAc,EACdC,gBAAAA,GAAkB,M,MAElB,MAAOC,EAAiBC,IAAsB,IAAA1P,UAA6B,KACpEiL,EAAY0E,IAAiB,IAAA3P,WAAS,IACvC,EAAEzD,IAAM,SAERqT,EACJT,IACAN,MAAAA,OAAW,EAAXA,EAAagB,YACQ,QAArB,EAAAhB,MAAAA,OAAW,EAAXA,EAAagB,gBAAQ,eAAEC,QAAS,EAC5BC,EAAmBH,EAAc,SAAW,SAC5CI,EAAaX,GAAiBA,EAAcS,OAAS,GACpDG,EAAWC,IAAgB,IAAAlQ,UAAkB+P,GAG9CI,EAAwBX,EAC1BN,MAAAA,OAAa,EAAbA,EAAekB,QACZpG,IACEyF,EAAgBY,MAAMC,GAAaA,EAAS5I,QAAUsC,EAAOtC,UAElEwH,EAEEhC,GAAU,QACdiD,GAAyB,GACzBhB,GAAmB,GACnBE,GAAiB,GACjBY,GAEIM,GACJ,SAAoB1B,MAAAA,OAAW,EAAXA,EAAa2B,UAAW,GAAItB,GAAiB,GAAI3S,IACrE,GAEIkU,GAAmBrB,GAAuC,aAAda,EAE5CS,EACJ,gBAAC,KAAU,CAACC,IAAKrB,EAAesB,IAAI,gBAIhCC,EAAsB,CAC1BC,EACAC,K,UAIA,IAAKhC,EAAiB,OACtB,MAAMiC,GAAa,QACjBF,EACAjC,MAAAA,EAAAA,EAAe,CAAEoC,YAAa,SAAUT,QAAS,KAMnD,GAHAd,EAAmBoB,GACnB/B,EAAgBiC,GAEXhC,GAE6B,aAA9B+B,MAAAA,OAAc,EAAdA,EAAgBG,WAAyB,CAC3C,MAAMC,EAA4C,CAChD3U,GAAIuU,EAAejH,SACnBsH,cAAe,KACfF,UAAW,UACX3V,KAAM,KACN8V,QAAS,CACP7U,GAAIuU,EAAerJ,MACnBrD,QAEa,QADX,EAAkE,QAAlE,EAAAwK,MAAAA,OAAW,EAAXA,EAAa2B,QAAQc,MAAMC,GAAMA,EAAE/U,KAAOuU,EAAejH,kBAAS,eAC9DuH,eAAO,eAAEhN,SAAU,GACzBmN,MAAkC,QAA3B,EAAAT,EAAeU,oBAAY,WAGtCzC,EAAgBmC,KAIdO,EAAmBC,IACvBzB,EAAayB,IAGTC,EAAkBrC,EAAc,IAAkB,KAElDsC,EACJ,SAAoC,MAiChC5F,EAA6C,CACjDyF,gBAAAA,EACAzB,UAAAA,EACAL,YAAAA,EACAc,oBAAAA,EACAV,WAAAA,EACAZ,sBAAAA,EACAH,oBAAAA,GAgBF,OATA,IAAA5O,YAAU,KACR,MAAMyQ,GAAa,SACjBjC,MAAAA,OAAW,EAAXA,EAAa2B,UAAW,GACxBtB,GAAiB,GACjB3S,GAEFmT,EAAmBoB,KAClB,CAACjC,MAAAA,OAAW,EAAXA,EAAa2B,UAGf,qCAAkB3E,GAChB,gBAAC+F,EAAe,eACdrK,IAAKsK,EACL3E,QAASA,EACTH,OAAQ,KACRR,WAAY,CACVuF,WAAY,KACZhF,oBAAqB,IAAM,KAC3BN,OAAQ,KACRI,SAAU,KACVmF,iBAAkB,IAAM,MAE1BrK,MAAO+H,EACPlF,aAAcgG,EACdjG,YAAaO,EAAY,aAAeP,EACxCgD,UAvEiB0E,I,QAErB,MAAMC,EAA2B,CAAC,SAAU,YACxCrC,GAAaqC,EAAcC,QAAQ,UAEvC,MAAMC,EAAkBF,EAAcG,QAAQnC,GAE9C,GAAc,QAAV+B,EAAE/H,IAAe,CACnB+H,EAAEK,iBAGFX,EAAgBO,GADME,EAAkB,GAAKF,EAAcnC,SAG/C,cAAVkC,EAAE/H,KAA+D,MAAvB,QAAjB,EAAA4H,EAAU3O,eAAO,eAAE/I,MAAMmY,cACpDN,EAAEK,iBAEFxB,EAAoBpB,EAAgB8C,MAAM,GAAI,KAElC,MAAVP,EAAE/H,KAAuD,MAAvB,QAAjB,EAAA4H,EAAU3O,eAAO,eAAE/I,MAAMmY,cAC5CN,EAAEK,iBACFxB,EAAoB,IACfpB,EACH,CACEtH,MAAO,QACPT,MAAO,IACPwJ,UAAW,OACXpH,SAAU,GAAGgF,WAAoBW,EAAgBK,cA8CnD0C,iBAAiB,EACjBvH,WAAYA,EACZwH,WAAY,IAAM9C,GAAc,GAChC+C,YAAa,IAAM/C,GAAc,GACjCgD,qBAAqB,EACrB3H,WAAYH,GAAaG,EACzBD,SAAO,EACPX,aAAa,EACbwI,iBAAkB,KAAM,EACxBC,iBAAkB,IAAMpC,IAAmB,EAC3CqC,iBAAmBR,GAEVA,EAAWS,OAAOjD,OAAS,EAEpClI,SAAU,CAACqF,EAAe+F,KACxB,OAAQA,EAAWC,QACjB,IAAK,gBAAiB,CACpB,MAAMlC,EAAiBiC,EAAWhJ,OAIlC,GAAI+G,EAAerJ,MAAO,CAKxB,MAGMoC,EAAW,GAAGgF,KAFDiC,EAAerJ,SADb+H,EAAgBK,SAK/BoD,EAAgB,OAAH,wBACdnC,GAAc,CACjBjH,SAAAA,IAIF+G,EACE,IAAIpB,EAAiByD,GACrBA,QAIFrC,EACE,IAAIpB,GACJxC,GAGJ,MAGF,IAAK,kBAGH4D,EACEpB,EAAgBW,QACbpG,GACCA,EAAOF,WACNmD,EAAmCnD,YAG1C,MAGF,IAAK,gBAAiB,CAEpB,MAAMqJ,EAAY,CAChBhL,MAAQ6K,EAAWhJ,OAA4B7B,MAC/CT,MAAQsL,EAAWhJ,OAA4BtC,MAC/CwJ,UAAW,OACXkC,WAAW,EACXtJ,SAAU,GAAGgF,KACVkE,EAAWhJ,OAA4BtC,SACtC+H,EAAgBK,UAGtBe,EAAoB,IAAIpB,EAAiB0D,IACzC,UAIFlH,IAEL/O,GAAW,gBAAC,IAAa,SAAUA,O,6ZCpTnC,MAAMmW,GAAW,IAAAC,aACtB,CAAC,EAA8B/L,K,IAA9B,MAAEY,EAAK,QAAEjL,GAAO,EAAK/C,EAAK,IAA1B,qBAGC,OACE,gBAAC,IAAe,KACbgO,GACC,gBAAC,IAAK,WAAYhO,EAAMI,SAAU0O,QALxB,GAAG9O,EAAM0N,OAK+B,OAAUM,IAE9D,gBAAC,IAAc,eAACZ,IAAKA,EAAG,QAAWrK,GAAa/C,IAC/C+C,GAAW,gBAAC,IAAa,SAAUA,QAM5CmW,EAASE,YAAc,Y,sGCZhB,MAAMC,EAA0C,EACrDrJ,cAAAA,EACAtC,KAAAA,EACAM,MAAAA,EACA0C,UAAAA,EACAS,gBAAAA,EACAJ,OAAAA,EACAd,YAAAA,MAEA,MAAOqJ,EAAOC,EAAMC,IAAW,QAAS9L,GAClC+L,EAAeF,EAAKG,SAAWH,EAAK3W,MACpCwN,EAAeJ,EAAcmH,MAAMwC,GAASA,EAAKpM,QAAU+L,EAAM/L,QAEvE,OACE,gBAAC,IAA4B,CAAC4D,gBAAiBA,GAC7C,gBAAC,IAAK,QAASnD,IACf,gBAAC,IAAgB,CACfmB,OAAQ,KACNqK,EAAQI,YAAW,IAErBlJ,UAAWA,EACXZ,IAAKM,MAAAA,OAAY,EAAZA,EAAc7C,MACnB6C,aAAcA,EACdJ,cAAeA,GAAiB,GAChCE,SAAW4C,IACT,MAAM+G,EAAe/G,EACrB0G,EAAQM,UAASD,MAAAA,OAAY,EAAZA,EAActM,QAAS,KAE1C4D,gBAAiBA,EACjBJ,OAAQA,EACRd,YAAaA,IAEdwJ,EACC,gBAAC,IAAa,SAAU,CAAE7W,MAAO6W,KAC/B,Q,waCjCH,MAAMM,EAAwC,I,IAAA,MACnD/L,EAAK,WACLmK,EAAU,QACV9D,EAAO,OACPF,EAAM,QACN6F,GAAO,EACJha,EAAK,IAN2C,qDAQnD,MAAM6O,GAAW,IAAA/F,QAAgC,OAC1CmR,EAAUC,IAAe,IAAArU,WAAS,GAEnCsU,EAAiB,K,MACJ,QAAjB,EAAAtL,MAAAA,OAAQ,EAARA,EAAU9F,eAAO,SAAEqR,SACnB7Q,SAAS8Q,YAAY,QACrBH,GAAY,IAGd,OACE,gBAAC,KAAY,KACX,gBAAC,KAAY,KACVlM,GAAS,6BAAQA,GACjBmG,GACC,qBAAGG,KAAMH,EAAQI,OAAQ,SAAUC,IAAK,uBACrCwF,IAIP,gBAAC,KAAU,KACT,gBAAC,IAAY,CACX3X,GAAG,MACHf,MAAM,MACNC,KAAM,QACNC,OAAO,QACPG,UAAU,sBAETwW,GAEH,gEAEW,MACT/K,IAAKyB,EACLtN,KAAK,OACLgM,MAAO4K,EACPmC,UAAQ,EACRhY,QAAS6X,GACLna,IAEN,gBAAC,KAAW,KACTqU,EACC,gBAAC,IAAY,CACXhS,GAAG,WACHf,MAAM,SACNC,KAAM,QACNC,OAAO,QACPG,UAAU,qBAET0S,GAED,KACJ,gBAAC,MAAgB,CAAC9R,KAAM,GAAE,yBAAoB,aAC9C,gBAAC,MAAM,CAACA,KAAM,GAAID,QAAS6X,MAG9BF,GAAY,gBAAC,KAAQ,kB,oGC7DrB,MAAMM,EAAyC,EACpDC,MAAAA,EACAlX,QAAAA,EACAmX,QAAAA,EACAC,YAAAA,EACA3V,SAAAA,MAEA,MAAM,EAAE3C,IAAM,EAAAuY,EAAA,MACPC,EAAWC,IAAgB,IAAAhV,WAAS,GACrCiV,GAAY,IAAAhS,UAclB,OAZA,IAAA5C,YAAU,KACR4U,EAAU/R,QAAUgS,YAAW,KAC7BF,GAAa,KACZ,GAEI,KACDC,EAAU/R,SACZiS,aAAaF,EAAU/R,YAG1B,IAGD,gBAAC,KAAgB,CACfhE,SAAUA,GAAY,WACtBpD,UAAWiZ,EAAY,UAAY,IAEnC,gBAAC,KAAiB,KAChB,gBAAC,KAAgB,KACdF,EACC,gBAAC,KAAqB,CACpBpY,QAAS,KACHmY,GACFA,MAIJ,gBAAC,MAAc,M,IAAKrY,EAAE,iBAEtB,MAGN,gBAAC,KAAc,KACb,gBAAC,KAAiB,KAAEkB,GACnBkX,EACC,gBAAC,KAAsB,KACrB,uBAAKhE,IAAKgE,KAEV,S,eClDP,MAAMS,GAAoB,IAAAC,eAAiC,IAYrDC,EAA8B,EACzCC,KAAAA,EACAC,KAAAA,EACAC,OAAAA,EACAC,sBAAAA,M,QAEA,MAAOtP,EAAOuP,IAAY,IAAA3V,aACnB4V,EAAmBC,IAAwB,IAAA7V,YAE5C8V,GAAe,IAAA7S,QAA8B,MAC7C8S,GAAe,IAAA9S,QAA8B,MAC7C+S,GAAY,IAAA/S,QAA8B,MAG1CgT,EAAsC,QAApB,EAAAH,EAAa5S,eAAO,eAAEgT,aACxCC,EAAsC,QAApB,EAAAJ,EAAa7S,eAAO,eAAEgT,aACxCE,KACJH,IAAmBE,IACfA,EAAkBF,EAUxB,OANA,IAAA5V,YAAU,K,MACJ2V,EAAU9S,SACZ2S,EAAsC,QAAjB,EAAAG,EAAU9S,eAAO,eAAEgT,gBAEzC,CAACF,IAGF,gBAACZ,EAAkBiB,SAAQ,CACzB3O,MAAO,CACLtB,MAAAA,EACAkQ,UAAWX,IAGb,gBAAC,KAAW,CAACY,aAAczb,QAAQ2a,IACjC,gBAAC,KAAY,KACVC,EACC,gBAACc,EAAA,EAAW,CAACC,WAAYf,IACvB,KACHH,EACC,gBAAC,KAAS,KAAEA,GAGZ,uBAAKlb,MAAO,CAAEkP,WAAY,OAE3BiM,GAAQC,EACP,gBAAC,IAAS,sBACcF,EACtBhO,IAAKuO,EAAY,gBACAP,GAEjB,gBAAC,KAAc,CACbhO,IAAKwO,EACLvM,cAAeiM,EAASG,EAAoB,GAE3CJ,IAGH,OAIPC,EACC,gBAAC,KAAW,CAAClO,IAAKyO,GAChB,gBAAC,KAAoB,mBAAoBI,GACtChQ,EACC,gBAACsO,EAAU,iBACLtO,EAAK,CACTwO,QAAS,KACPe,OAASnX,GACL4H,EAAMwO,SACRxO,EAAMwO,cAIV,KAEJ,gBAAC,KAAkB,KACjB,gBAAC,KAAe,KAAEa,EAAO9X,MACzB,gBAAC,KAAgB,KAAE8X,EAAO7X,UAI9B,Q,sVCtGV,MAAM8Y,EAAqB,2CAEdC,EAA8B,EAAGzc,SAAAA,OA2B5C,IAAAmG,YAAU,KAKR,GAAIqD,SAASkT,eAAe,oBAE1B,OAIF,MAAMC,EAASnT,SAASoT,cAAc,UAMtC,OALAD,EAAOlG,IAAM,kDAAkD+F,IAC/DG,EAAOra,GAAK,mBACZkH,SAAS8R,KAAKuB,YAAYF,GAGnB,K,MACL,MAAMG,EAAetT,SAASkT,eAAe,oBAEF,QAA3C,EAAAlT,SAASuT,cAAc,4BAAoB,SAAEC,SACzCF,GACFA,EAAaE,YAGhB,IAEI,gCAAGhd,EAAS,CAAE8H,gBApDoB,IAAY,OAAD,6BAKlD,MAAMmV,EAAIhX,OACV,GAAKgX,EAAEC,WAKP,IAOE,aAN4BD,EAAEC,WAAWC,QACvC,2CACA,CACEpE,OAAQ,WAIZ,MAAOjB,GAEP,MAAO,2C,2DC/BN,MAAMsF,EAA6B,EAAGC,QAAAA,EAASC,OAAAA,EAAQC,MAAAA,KAE1D,gBAAC,IAAK,CACJF,QAASA,EACThL,WAAY,CACVmL,EAAG,+BACHC,OAAQ,+BACRC,EAAG,0BACHC,GAAI,4BAENL,OAAQA,EACRC,MAAOA,K,4HCFN,MAAMK,EAAiC,EAAGC,QAAAA,EAASC,SAAAA,MACxD,MAAM,EAAEzb,IAAM,SACR0b,EAAQ,CACZ,CACEC,MAAO3b,EAAE,8BACT4L,MAAO5L,EAAE,+BAEX,GACA,IAGF,OACE,gBAAC,KAAM,CACL4N,cAAe,KACfgO,kBAAkB,QAAqB5b,GACvCyb,SAAU,CAACR,EAAQY,KACjBJ,EAASR,EAAQY,MAGlB,IAEG,gBAAC,EAAAC,SAAQ,KACP,gBAAC,IAAU,CAACJ,MAAOA,EAAOK,WAAY,EAAGC,WAAS,GAChD,gBAAC,KAAI,KACH,gBAAC,IAAK,CACJhD,KAAMwC,GAAW,gBAAC,IAAQ,CAACA,QAASA,IACpCvC,KAAM,gBAAC,IAAS,e,iFCvClC,MAAMgD,GAAuB,IAAAC,OAAK,IAAM,kCAElCC,EAAuC,K,MAC3C,MAAQ7T,KAAM8T,IAAa,SAE3B,OAAIA,MAAAA,OAAQ,EAARA,EAAUC,QAA2B,QAAnB,EAAAD,MAAAA,OAAQ,EAARA,EAAUE,iBAAS,eAAEC,OAEvC,gBAAC,EAAAC,SAAQ,CAACC,SAAU,MAClB,gBAACR,EAAoB,CACnBS,SAAU,GAAGN,EAASC,KAAKM,aAAaP,EAASC,KAAKO,WACtDL,MAAOH,EAASC,KAAKE,OAAS,MAM/B,MAMIM,EAA8B,IAEvC,gBAAC,KAAM,KACL,gBAAC,KAAK,CAAChX,KAAM,kBACX,6BAEF,gBAAC,KAAK,CAACA,KAAK,KAAKC,OAAK,GACpB,gBAACqW,EAAyB,S,6JCrB3B,MAAMW,EAAkC,EAC7CC,YAAAA,EACAC,cAAAA,EACA3U,SAAAA,MAEA,MAAM,EAAErI,IAAM,EAAAuY,EAAA,MAER,YACJ0E,EAAW,QACXC,EAAU,GAAE,MACZ5Y,EAAQ,GAAE,IACV6Y,EAAM,GAAE,MACRC,GACEL,MAAAA,EAAAA,EAAe,GAEbM,EAAc,CAClB/R,KAAM2R,GAAe,GAAG5U,EAASsU,aAAatU,EAASuU,WACvDU,QAAS,CAACJ,EAAS5Y,EAAO6Y,GAAKtJ,OAAOtV,SAASgf,KAAK,MACpDH,MAAAA,GAGF,OACE,gCACE,gBAAC,IAAoB,KACnB,2BACE,yBAAIC,EAAY/R,MAChB,yBAAI+R,EAAYC,QAAQ9G,QACxB,yBAAI6G,EAAYD,SAGpB,gBAAC,IAAa,KACZ,gBAAC,MAAM,CAACjd,KAAM,GAAIsE,MAAO,YACzB,gBAAC,IAAM,CACL3G,MAAO,CAAEyD,OAAQ,IAAKe,QAAS,eAC/BpC,QAAS,KACP8c,KACD,SACS,eAAc,MACjB,SAENhd,EAAE,mC,sVCpBN,MAAMwd,EAA8B,EACzCC,kBAAAA,EACAC,eAAAA,EACAC,YAAAA,EACAtV,SAAAA,EACAuV,eAAAA,MAEA,MAAOC,EAAiBC,IAAsB,IAAAra,WAAS,IAChDsa,EAAaC,IAAkB,IAAAva,UAASga,EAAkBP,UAC1De,EAAWC,IAAgB,IAAAza,UAASga,EAAkBQ,YACtDE,EAAYC,IAAiB,IAAA3a,UAAS,OAQ3C6E,KAAM+V,IAGJ,UAGF/V,KAAMgW,EACNC,QAASC,IAIP,OAAaT,GAAe,KAYhC,OAVA,IAAAja,YAAU,KACJ6Z,GACFG,GAAmB,KAEpB,CAACH,KAEJ,IAAA7Z,YAAU,KACR0a,MACC,CAACT,IAGF,gBAAC,KAAO,KACLF,EACC,gBAAC,KAAM,CACLjQ,cAAe6P,EACf7B,iBAAkBuC,EAClBM,kBAAgB,EAChBC,gBAAc,EACdjD,SAAU,IAAY,OAAD,mCAInBkD,IACA,MAAMC,EAAiD,OAA/BD,EAAY1D,OAAOiC,QAE3C,OACE,gBAAC,KAAI,KACH,gBAAC2B,EAAA,EAAoB,CACnBjB,eAAgBA,EAChBF,eAAgB,CAACoB,EAAWC,KACtBD,EAAUb,WACZU,EAAYK,cAAc,cAAe,IAEjB,OAAtBF,EAAU5B,QACZkB,EAAc,OAEdA,EAAc,MACdO,EAAYK,cAAc,QAAS,KAxDlC,CAACF,IACpBZ,EAAaY,EAAUb,WACvBD,EAAec,EAAU5B,UAwDT+B,CAAaH,GACbpB,EAAeoB,EAAWC,MAG9B,gBAAC,KAAgB,CACfzT,KAAM,cACNnM,KAAM,OACNyM,MAAO,eACP5N,SAAUigB,IAEZ,gBAAC,KAAoB,KACnB,gBAACiB,EAAA,EAAmB,CAAC5T,KAAM,aAAW,sBAIxC,gBAAC,KAAY,KACX,gBAAC6T,EAAA,EAAgB,CACfhgB,KAAM,MACNmM,KAAM,QACNM,MAAO,sBACP9N,MAAO,CAAE+D,gBAAiB,cAG9B,gBAAC,KAAc,CAACud,YAAaR,GAC3B,gBAAC,KAAY,KACX,gBAAC3H,EAAA,EAAsB,CACrBrJ,eACGyQ,GAAa,IAAI7Q,KAAK+J,IAAS,CAC9BpM,MAAOoM,EAAKtX,GACZ2L,MAAO2L,EAAKvY,UACP,GAETsM,KAAM,UACNM,MAAO,UACPmD,iBAAe,EACfJ,QAAM,EACNd,aAAa,KAGhB+Q,EACC,gBAAC,KAAY,KACX,gBAACS,EAAA,EAAiB,gBAEbf,MAAAA,OAAM,EAANA,EAAQ/K,SAAWqL,EAEhB,aADA3c,EAGNqJ,KAAM,QAAO,SAEVsT,GAEIN,GAAU,IAAI9Q,KAAK+J,IAAS,CAC3BpM,MAAOoM,EAAKtX,GACZ2L,MAAO2L,EAAKtX,OAHd,GAIG,OAED,QACRnC,MAAO,CAAE+D,gBAAiB,WAC1B7D,WAAWsgB,MAAAA,OAAM,EAANA,EAAQ/K,UAAWqL,KAGhC,KAEJ,gBAAC,KAAY,KACX,gBAACO,EAAA,EAAgB,CACfhgB,KAAM,OACNmM,KAAM,MACNM,MAAO,MACP9N,MAAO,CAAE+D,gBAAiB,mBASxC,gBAACib,EAAc,CACbC,YAAaU,EACbT,cAAe,IAAMc,GAAmB,GACxCzV,SAAUA,O,+EClLb,MAAMiX,EAAU,QAAoC;;;;;;;;;;aAU9C,EAAGC,WAAAA,KAAkBA,EAAa,OAAS;;eAEzC,EAAGA,WAAAA,KAAkBA,EAAa,OAAS;;;;;;;;;;;EAapDC,EAAW,QAAU;;EAGrBC,EAAsB,QAAU;;;;;;;;;;EAWhCC,EAA2B,QAAU;;;;;;EAc9BC,EAA2C,EACtDhiB,SAAAA,EACAiiB,sBAAAA,EACAjE,MAAAA,EACA4D,WAAAA,KAGE,gBAACD,EAAO,CAACC,WAAYA,GACnB,gBAACC,EAAQ,KACN7D,GAAS,0BAAKA,GACdhe,GAEH,gBAAC8hB,EAAmB,KAClB,gBAACC,EAAwB,KACvB,gBAAC,IAAY,OAEdE,GAAyB,gBAAC,IAAiB,S,0OChDpD,MAAMC,EAAgB,QAAU;;;;;;;;;;EAYnBC,EAA0B,KACrC,MAAOC,EAAiBC,IAAsB,IAAAvc,WAAS,GACjDwc,GAAW,UACX,EAAEjgB,IAAM,UAGZsI,KAAM8T,EACN9N,UAAW4R,EACX3B,QAAS4B,IACP,SACEC,EAAkBhE,MAAAA,OAAQ,EAARA,EAAUiE,QAE5BC,GACJF,GAAmBA,EAAgBG,WAC/B,CACE,CACE7D,SAAU0D,EAAgBI,iBAAmB,aAC7CC,OAAQL,EAAgBG,WACxBG,WAAYN,EAAgBO,uBAGhC,IACJ9M,QAAQ+M,GAASA,EAAKH,QAA0B,QAAhBG,EAAKH,UAGrCI,OAAQC,EACRtgB,MAAOugB,EACPzS,UAAW0S,IACT,SAyCJ,OA1BA,IAAAld,YAAU,KACR,GAAIid,EAAsB,CACxB,MAAMvZ,GAAc,OAAcuZ,GAClCd,GACE,QAAU,CACRtE,MAAO,QACPlU,QAASD,EAAYC,QACrBhD,MAAO,eAIX,QAAW,CACTkD,UAAW,wBACXC,QAAS,UACTC,MAAM,QAAwBnC,SAASE,UACvCkC,OAAQ,CACNC,OAAQ,CACNC,UAAWR,EAAYE,KACvBO,iBAAkBT,EAAYC,UAGlCW,qBAAqB,OAGxB,CAAC2Y,IAEGb,EACL,2BACE,gBAAC,IAAM,6BAAwB,WAE/BH,EACF,gBAAC,IAAqB,KACpB,gBAAC,IAAU,CAACkB,2BA7CSC,IACvBJ,EACE,CAAEI,gBAAAA,GACF,CACEC,UAAW,KACThB,IACAH,GAAmB,SAwCpB,EAAG1R,UAAAA,KACF,gBAAC,IAAuB,CACtBA,UAAWA,GAAa0S,EACxBI,gBAAiB,KACfpB,GAAmB,SAO7B,gBAAC,IAAuB,CACtBT,YAAU,EACV5D,MAAO3b,EAAE,uCAERsgB,GAASA,EAAM/M,OACd+M,EAAM9S,KAAI,CAACoT,EAAMS,IACf,gBAAC,IAAW,CACV3T,IAAK2T,EACLT,KAAMN,EAAM,GACZgB,kBAAmB,KACjBtB,GAAmB,QAKzB,2BACE,yBAAIhgB,EAAE,qCACN,gBAAC6f,EAAa,KACZ,gBAAC,MAAiB,CAACpb,MAAO,SAC1B,gBAAC,IAAM,CACLvE,QAAS,KACP8f,GAAmB,IACpB,SACS,SAAQ,MACX,QAAO,UAEdliB,MAAO,CAAEuE,SAAU,UAElBrC,EAAE,iC,4FCnIV,MAAMuhB,EAAkC,EAC7CC,cAAAA,EACAC,gBAAAA,EACAC,YAAAA,EACAC,YAAAA,EACAlG,SAAAA,EACAnN,UAAAA,EACAsT,iBAAAA,EACAC,kBAAAA,EACAC,WAAAA,MAEA,MAAM,EAAE9hB,IAAM,SACd,OACE,gCACG4hB,GAAoBE,EACnB,gBAAC,KAAgB,WAAU,sBACzB,yBAAI9hB,EAAE,iCAAkC,CAAEyhB,gBAAAA,KAC1C,qBAAGliB,UAAW,cACZ,yBAAIsiB,GACJ,wBAAM/jB,MAAO,CAAEmL,QAAS,K,IAAS,OAAOuY,OAG1C,KACHI,EACC,gBAAC,KAA6B,KAC3B5hB,EAAE,0CAEH,KACJ,sBAAIlC,MAAO,CAAEyD,OAAQ,YACrB,gBAAC,KAAiB,WAAU,wBAC1B,gBAAC,IAAa,KAAEvB,EAAE,iCAClB,yBAAI0hB,IAEN,gBAAC,IAAM,CACLviB,KAAMsc,EAAW,SAAW,SAAQ,MAC7B,QAAO,SACJ,OAAM,SACNnN,EACVtQ,SAAUsQ,EACVpO,QAAS,KACHub,GACFA,MAIHkG,M,qEC1DT,MAAMI,EAAuB,QAAqC;;YAEtD,EAAGC,YAAAA,KAAmBA,EAAc,UAAY;EAGtDC,EAAc,QAAU;;;;;;;;;EAWjBC,EAA8C,EACzDhiB,QAAAA,EACAgD,OAAAA,GAAS,EACTvF,SAAAA,KAGE,gBAACokB,EAAoB,CAAC7hB,QAASA,EAAS8hB,cAAe9hB,GACrD,gBAAC+hB,EAAW,KACV,0BAAKtkB,GACJuF,GAAUhD,EACT,gBAAC,MAAW,OACTgD,GAAUhD,EACb,gBAAC,MAAa,MACZ,Q,uICvBL,MAAMiiB,EAAkD,EAC7DC,YAAAA,EACAC,mBAAAA,MAEA,MAAM,EAAEriB,IAAM,SACR0b,GAAQ,OAAuB,GAC/B4G,GAAU,UACVC,EAAa3e,OAAO4e,aAAaC,QAAQ,eAAiB,GAkBhE,OAhBA,IAAA3e,YAAU,KACY,IAAhBse,IACFC,GAAmB,IACnB,QAAW,CACT1a,UAAW,mBACXC,QAAS,OACTC,KAAM,WACNC,OAAQ,CACNC,OAAQ,CACNwa,WAAAA,MAIND,EAAQI,KAAK,2CAEd,CAACN,IAEF,gBAAC,IAAU,CACT1G,MAAOA,EACPK,WAAY,EACZ4G,YAAa3iB,EAAE,oBACfgc,WAAS,EACT4G,SAAU,CACRC,IAAK,yBACLjX,MAAO5L,EAAE,2BAGX,gBAAC,IAAK,CAACiZ,KAAM,gBAAC,IAAS,W,4HC1CtB,MAAM6J,EAA2B,KACtC,MAAM,EAAE9iB,IAAM,SACR0b,GAAQ,OAAuB,IACrB,UAChB,OACE,gBAAC,IAAU,CACTA,MAAOA,EACPK,WAAY,EACZ4G,YAAa3iB,EAAE,oBACfgc,WAAS,EACT4G,SAAU,CACRC,IAAK,yBACLjX,MAAO5L,EAAE,2BAGX,gBAAC,IAAK,CACJiZ,KAAM,gBAAC,IAAS,MAChBC,OAAQ,CACN9X,KAAM,KACNC,MACE,qBAAG6Q,KAAM,gBACP,gBAAC,IAAM,eACO,oBACZ/S,KAAM,SAAQ,SACJ,gBAETa,EAAE,qD,iHC3BZ,MAAM+iB,EAAgC,KAC3C,MAAM,EAAE/iB,IAAM,SACR0b,GAAQ,OAAuB,IACrB,WACC,UAEjB,OACE,gBAAC,IAAU,CACTA,MAAOA,EACPK,WAAY,EACZ4G,YAAa3iB,EAAE,oBACfgc,WAAS,EACT4G,SAAU,CACRC,IAAK,yBACLjX,MAAO5L,EAAE,2BAGX,gBAAC,IAAK,CAACiZ,KAAM,gBAAC,IAAS,W,2LCTtB,MAAM+J,EAAqC,KAChD,MAAM,EAAEhjB,IAAM,EAAAuY,EAAA,MAGNjQ,KAAM2a,EAAgB3U,UAAW4U,KAFtB,WAGjB,WACM5a,KAAM6a,EAAe7U,UAAW8U,IACtC,SAEF,OACE,gCACE,gBAAC,KAAsB,KACrB,gBAAC,KAAe,KACd,uBAAKhP,IAAK,IAAeC,IAAK,OAAQ7S,MAAO,OAE/C,0BAAKxB,EAAE,iCAGT,gBAAC,KAAgC,KAC/B,gBAAC,KAAyB,KACxB,gBAACmf,EAAA,EAAgB,eACH,qBACZvT,MAAO5L,EAAE,uCACTsL,KAAM,WACNnM,KAAM,SAER,gBAACggB,EAAA,EAAgB,eACH,cACZvT,MAAO5L,EAAE,oCACTsL,KAAM,QACNnM,KAAM,UAGV,gBAAC,KAAyB,KACxB,gBAAC8X,EAAA,EAAsB,CACrBrJ,cAAeqV,GAAkB,GACjC3X,KAAM,WACNM,MAAO5L,EAAE,uCACTsO,UAAW4U,IAEb,gBAACjM,EAAA,EAAsB,CACrBrJ,cAAeuV,GAAiB,GAChC7X,KAAM,WACNM,MAAO5L,EAAE,uCACTsO,UAAW8U,Q,0BCvChB,MAAMC,EAAyD,EACpEzV,cAAAA,EACA6N,SAAAA,EACA6H,YAAAA,MAEA,MAAM,EAAEtjB,IAAM,EAAAuY,EAAA,KACRmD,GAAQ,OAAuB,IACrB,UAChB,OACE,gBAAC,KAAM,CACL9N,cAAeA,EACfgO,iBAAkB,IAClB2H,oBAAoB,EACpBC,iBAAe,EACf/H,SAAU,CAACR,EAAQY,KACjBJ,EAASR,EAAQY,MAGjB8C,GAIE,gBAAC,EAAA7C,SAAQ,KACP,gBAAC2H,EAAA,EAAU,CACT/H,MAAOA,EACPK,WAAY,EACZ4G,YAAa3iB,EAAE,oBACfgc,WAAS,EACT4G,SAAU,CACRC,IAAK,yBACLjX,MAAO5L,EAAE,2BAGX,gBAAC,KAAI,KACH,gBAAC+Y,EAAA,EAAK,CACJE,KAAM,gBAAC+J,EAAwB,MAC/B9J,OAAQ,CACN9X,KAAM,KACNC,MACE,gBAAC,IAAM,CACLlC,KAAM,SAAQ,SACJmkB,EACVtlB,UAAW2gB,EAAYI,SAAWuE,EAAW,cAChC,aAAY,SACf,WAETtjB,EAAE,8B,uGCzBpB,MAAM0jB,EAAoC,EAC/CC,gBAAAA,EACAC,cAAAA,EACAC,WAAAA,EACAC,iBAAAA,EACAC,gBAAAA,EACAC,eAAAA,EACAC,sBAAAA,EACAC,aAAAA,EACAC,WAAAA,EACAC,qBAAAA,EACAC,mBAAAA,EACAC,iBAAAA,EACAC,aAAAA,EACA5mB,SAAAA,EACA6mB,oBAAAA,EACAC,iBAAAA,EACAC,mBAAAA,EACAC,uBAAAA,MAEA,MAAOza,EAAM0a,IAAW,IAAAnhB,WAAS,GAEjC,OACE,gBAAC,KAAsB,KACrB,gBAAC,KAAuB,KACtB,gBAAC,KAAoB,KACnB,gBAAC,KAAa,KACZ,2BACE,uBAAK2Q,IAAKuP,EAAiBniB,MAAO,KACjCqiB,EACC,gBAAC,KAAc,KAAEA,GACf,MAELC,EAAmB,2BAAMA,GAA0B,MAEtD,gBAAC,KAAc,KACZG,GAAyBF,EACxB,gBAAC,KAAW,KACV,gBAAC,IAAY,CAAC3kB,OAAO,QAAQa,GAAG,6BAC7BqkB,GAEFpa,EACC,uBAAKpM,MAAO,CAAE+mB,UAAW,WACvB,gBAAC,MAAW,YACD,GAAE,WACF,4BAA2B,aACzB,MACX3kB,QAAS,IAAM0kB,GAAS1a,GACxBpM,MAAO,CACLgnB,OAAQ,cAKd,gBAAC,IAAM,UACK,UACV5kB,QAAS,KACP0kB,GAAS1a,IAEXlM,SAAUkM,GAET6Z,IAILC,GAAkBD,EACpB,qBAAG3R,IAAI,aAAaD,OAAQ,SAAUD,KAAM8R,GAC1C,gBAAC,IAAM,eAAcQ,EAAmB,SAAY,WACjDT,IAGH,KACJ,gBAAC,KAAkB,eACJU,EACbtS,OAAQ,SACRD,KAAMiS,EACN/R,IAAI,cAEH8R,KAIND,EACC,gBAAC,KAAoB,OAAQ/Z,GAC3B,gBAAC,KAAsB,KACrB,gBAAC,IAAQ,eACMwa,EACbpZ,KAAM,MACND,SAAU,KACJkZ,GACFA,EAAaQ,SAGjB3Z,QAASwY,GAERe,GAGFP,EACC,qBAAGjS,OAAQ,SAAUC,IAAI,aAAaF,KAAMmS,GAC1C,gBAAC,IAAM,eACQG,EACbxmB,UAAW4lB,EAAa,SACd,WAETQ,IAGH,OAGN,MAELzmB,K,iJC3IqB,QAAU;;;;;;;EAAtC,MAcaqnB,EAA4D,EACvEpX,cAAAA,EACA6N,SAAAA,MAEA,MAAM,EAAEzb,IAAM,SACRilB,GAAa,UAEZtb,EAAaub,IAClB,IAAAzhB,UAA2BmK,GAa7B,OACE,gBAAC,KAAM,CACLA,cAAejE,EACfwb,SAAU,IACV3B,iBAAe,EACfD,oBAAoB,EACpB9H,SAAWR,IACTQ,EAASR,MAGT0D,GAEE,gBAAC,EAAA7C,SAAQ,KACP,gBAAC,IAAU,CACTsJ,cAAezG,EACf0G,UAAWrlB,EAAE,4BACbgc,WAAYiJ,EACZrC,SAAU,CACRC,IAAK,WACLjX,MAAO5L,EAAE,iCAGX,gBAAC,KAAI,KACH,gBAAC,IAAK,CACJiZ,KACE,gCACE,gBAAC,IAAS,OAwBdC,OAAQ,CACN9X,KAAM,KACNC,MACE,gCACE,gBAAC,IAAM,CACLlC,KAAM,SAAQ,SACJ,UACVnB,SACE2gB,EAAY2G,eAAiB3G,EAAYI,QAAO,SAExCJ,EAAY2G,aAAY,aACpB,cAAa,cAG1BtlB,EAAE,+B,4FC5GtB,MAAMulB,EAAqC,KAChD,MAAMC,GAAY,UACZlD,GAAU,UAEVmD,EAAcC,SAASF,EAAUC,YAAa,IAC9CE,EAAmBD,SAASF,EAAUG,iBAAkB,KAG5Drd,KAAMsd,EACNtX,UAAWuX,IACT,OAA0BJ,EAAaE,GAErCG,EAASF,MAAAA,OAAqB,EAArBA,EAAuBG,YAAYD,OAC5CE,EAAUJ,MAAAA,OAAqB,EAArBA,EAAuBG,YAAYC,QAYnD,OAVA,IAAAliB,YAAU,KACJgiB,IAAWE,EACbpiB,OAAO8B,SAASwM,KAAO4T,IACZA,GAAUE,GAAaF,GAAUE,IAG5C1D,EAAQI,KAAKsD,KAEd,CAACF,EAAQE,IAE6C,UAArDJ,MAAAA,OAAqB,EAArBA,EAAuBG,YAAYE,eAC9B,gBAAC,KAAQ,CAACC,GAAI,wCAGhBL,IAAgCG,EAAU,gBAAC,IAAW,MAAM,O,sICjB9D,MAAMG,EAAiC,EAC5CC,SAAAA,EACAC,uBAAAA,EACAjK,SAAAA,M,0BAEA,MAAM,OAAEnB,EAAM,UAAEqL,EAAS,QAAEvH,EAAO,aAAEuG,EAAY,OAAEiB,IAChD,UAEIC,EAA4B,QAAV,EAAAvL,MAAAA,OAAM,EAANA,EAAQwL,UAAE,eAAED,iBAC9B,aAAEE,EAAY,gBAAEC,GAAoB,IAEpCC,EAAkBP,MAAAA,OAAsB,EAAtBA,EAAwBpmB,GAE1C4mB,GAAYzK,MAAAA,OAAQ,EAARA,EAAUC,KAAKE,OAAQ,CAACH,MAAAA,OAAQ,EAARA,EAAUC,KAAKE,OAAS,GAE5DuK,EAAoBvoB,QAAQ8nB,MAAAA,OAAsB,EAAtBA,EAAwBU,SACpDC,EAAsBX,MAAAA,OAAsB,EAAtBA,EAAwBY,YAE9CC,GAAwB,QAC5Bd,EACAQ,EACAI,GAGIG,EAAgBH,EAClB,IAAgBA,EAAoBI,YAAYxa,cAChD,GAEEya,EAAWpM,MAAAA,OAAM,EAANA,EAAQoM,SACnBC,GAA+C,QAAtB,EAAAD,MAAAA,OAAQ,EAARA,EAAUE,oBAAY,eAAEC,aAAc,GAC/DC,GACJpB,MAAAA,OAAsB,EAAtBA,EAAwBqB,aAAaF,aAAc,GAS/C5Z,EAAsC,CAC1C+Z,OAE6C,QAD3C,EAA8B,QAA9B,EAAsB,QAAtB,EAAAN,MAAAA,OAAQ,EAARA,EAAUE,oBAAY,eAAEI,cAAM,QAC9BtB,MAAAA,OAAsB,EAAtBA,EAAwBqB,aAAaC,cAAM,SAE7CH,YAXAF,EAAuB/T,OAAS,EAC5B+T,EACAG,EAAsBlU,OAAS,EAC/BkU,EACAZ,IAOsB,GAC1Be,SACwB,QAAtB,EAAAP,MAAAA,OAAQ,EAARA,EAAUE,oBAAY,eAAEK,WACxBvB,MAAAA,OAAsB,EAAtBA,EAAwBqB,aAAaE,UACrC,WACFC,QAA+C,QAAtC,EAA6B,QAA7B,EAAe,QAAf,EAAA5M,EAAOoM,gBAAQ,eAAEE,oBAAY,eAAEM,eAAO,UAG3CC,EAAyD,QAA9B,EAAgB,QAAhB,EAAA7M,MAAAA,OAAM,EAANA,EAAQoM,gBAAQ,eAAEE,oBAAY,eAAEM,QAqBjE,OAlBEja,GACAka,GACA/I,IACCuG,GAC8B,IAA/ByC,OAAOC,KAAKzB,GAAQhT,OAepB,uBAAKzV,MAAO,CAAEoP,UAAW,SACvB,gBAACwZ,EAAY,KACX,sBAAI5oB,MAAO,CAAEyD,OAAQ,kBAAiB,iBACtC,gBAAColB,EAAe,MACZG,GACA,gBAAC,KAAY,CAACmB,OAAK,EAAC/nB,QAAS,IAAMgnB,KACjC,gBAAC,MAAM,M,IAAKC,KAMnBL,GAAqBlZ,EAAc+Z,OAClC,gBAAC,IAAS,CACRnB,gBAAiBA,EACjB0B,aA5BoBC,I,MAC1B7B,EAAU,OAAD,wBACJrL,GAAM,CACToM,SAAU,CACRE,aAAc,OAAF,wBACQ,QAAf,EAAAtM,EAAOoM,gBAAQ,eAAEE,cACjBY,QAuBHva,cAAeA,IAGjB,gBAAC,IAAmB,CAClBgZ,gBAAiBA,EACjBwB,iBAAkBpB,EAClBZ,SAAUA,KAId,O,2FC7GN,MAAM9G,EAAU,QAAU;;;;;;;;;;;EAapB+I,EAAO,QAAU;;EAIjBC,EAAQ,QAAU;;;EAKXC,EAA2C,EACtDC,qBAAAA,EACAC,WAAAA,MAEA,MAAM,EAAEzoB,IAAM,SAEd,OACE,gBAACsf,EAAO,KACN,gBAAC+I,EAAI,KAECroB,EADHyoB,EACK,6CACA,qCAER,gBAACH,EAAK,CAAClU,IAAK,IAAWC,IAAKrU,EAAE,sCAC7ByoB,EACC,gBAAC,IAAM,CACLtpB,KAAM,SAAQ,SACJ,SACVe,QAASsoB,GAERxoB,EAAE,oCAEH,Q,gCCrCH,MAAM0oB,EAAiBC,GACrBZ,OAAOa,QAAQD,GAAaE,QACjC,CAACC,GAAqBpb,EAAKvC,MACzB,GAAqB,iBAAVA,EAAoB,CAI7B,MAAM4d,EAAYL,EAAcvd,GAChC,MAAO,IAAI2d,KAAaC,GAExB,MAAO,IAAID,EAAU3d,KAGzB,K,uKCUG,MAAM6d,EAAqC,EAChDC,gBAAAA,EACA/lB,OAAAA,EACAC,aAAAA,EACA+lB,mBAAAA,EACAC,MAAAA,M,YAEA,MAAMC,EAAYH,MAAAA,OAAe,EAAfA,EAAiBhpB,GAC7BopB,EAAoC,QAAxB,EAAAJ,MAAAA,OAAe,EAAfA,EAAiBnU,eAAO,eAAE7U,GACtCgV,EAAgC,QAAxB,EAAAgU,MAAAA,OAAe,EAAfA,EAAiBnU,eAAO,eAAEG,MAClCqU,EAAarU,EAAQ,MAAQ,QAE7B,EAAEjV,IAAM,UAGR,OAAEib,IAAW,UAEbsO,EAAY,iBAAiBJ,KAC5BjS,EAAOC,EAAMC,IAAW,QAAsBmS,GAE/CC,EAAoBtS,EAAM/L,MAC1Bse,EAAiCvS,EAAM/L,MAAM8I,QAAQc,MACxDC,GAAMA,EAAEF,SAAWE,EAAE/U,KAAOmpB,IAIzBM,EAAsBD,MAAAA,OAA8B,EAA9BA,EAAgC3U,QACtD6U,EAA4BD,MAAAA,OAAmB,EAAnBA,EAAqB5hB,QAGhD8hB,EAAuBC,IAC5B,IAAApmB,UAA6BimB,IAGxBI,EAAwBC,IAC7B,IAAAtmB,WAAkB,IAGZ6E,KAAM0hB,EAAqB1b,UAAW2b,IAC5C,OAA0B,GAAY,QAAT,EAAAhP,EAAOwL,UAAE,eAAEL,WAAYiD,GAGhDa,EAAc,WAClB,K,QACE,OAAAF,GAAuBA,EAAoB1hB,KAAKiL,OAC5C,GAA+B,QAA5B,EAAAyW,MAAAA,OAAmB,EAAnBA,EAAqB1hB,KAAK,UAAE,eAAE6hB,eAAenqB,EAC9C,iBAA6C,QAA5B,EAAAgqB,MAAAA,OAAmB,EAAnBA,EAAqB1hB,KAAK,UAAE,eAAErI,kBAEjDgC,IACN,CAACjC,EAAGgqB,IAEAI,EAAqB,WACzB,K,MACE,OAAAJ,EACIhqB,EACE,iBAA6C,QAA5B,EAAAgqB,MAAAA,OAAmB,EAAnBA,EAAqB1hB,KAAK,UAAE,eAAErI,uBAEjDgC,IACN,CAACjC,EAAGgqB,IAEAK,EAAsB,WAC1B,IAAOC,I,MACL,OAAAtqB,EACE,iBAA6C,QAA5B,EAAAgqB,MAAAA,OAAmB,EAAnBA,EAAqB1hB,KAAK,UAAE,eAAErI,aAAaqqB,OAEhE,CAACtqB,EAAGgqB,IAGAO,GAAwD,QAA5B,EAAAP,MAAAA,OAAmB,EAAnBA,EAAqB1hB,KAAK,UAAE,eAAER,SAAU,IAI1E,IAAAhE,YAAU,K,QACJkmB,KAAwBL,MAAAA,OAAyB,EAAzBA,EAA2BpW,QACrDsW,EAAyB,OAAD,wBAClBH,GAA0C,CAC9C5hB,QACsC,QAApC,EAA4B,QAA5B,EAAAkiB,MAAAA,OAAmB,EAAnBA,EAAqB1hB,KAAK,UAAE,eAAER,cAAM,eAAE0F,KAAI,CAACvC,EAAGke,IACrC,OAAP,wBACKle,GAAC,CACJlM,SAAqB,UAAXkM,EAAE9L,MAA8B,IAAVgqB,QAE9B,MAEDa,IAAuBL,MAAAA,OAAyB,EAAzBA,EAA2BpW,SAE3DsW,EAAyB,OAAD,wBAClBH,GAA0C,CAC9C5hB,QACE6hB,MAAAA,OAAyB,EAAzBA,EAA2Bnc,KAAKvC,GAAO,OAAD,wBACjCA,GAAC,CACJgQ,OAAQhQ,EAAEgQ,OACVlc,SAAqB,UAAXkM,EAAE9L,MAA8B,IAAVgqB,QAC3B,QAGZ,CAACa,IAEJ,MAAMQ,EAAoB,CACxBF,EACAnf,KAEA,IAAKye,EACH,OAGF,MAAMa,EAAqC,CACzCxqB,GAAI2pB,EAAsB3pB,GAC1B6H,OAAQ,IAAI8hB,MAAAA,OAAqB,EAArBA,EAAuB9hB,SAAW,IAE1C4iB,EAAaD,EAAe3iB,OAAO6iB,WAAW1f,GAAMA,EAAEhL,KAAOqqB,IACjD,EAAdI,IACFD,EAAe3iB,OAAO4iB,GAAYzP,OAAS9P,GAI7C0e,EAAyBY,IAGrBG,EAA+BN,I,QACnC,MAAMO,EAAoD,QAApC,EAA4B,QAA5B,EAAAb,MAAAA,OAAmB,EAAnBA,EAAqB1hB,KAAK,UAAE,eAAER,cAAM,eAAEiN,MACzD9J,GAAMA,EAAEhL,KAAOqqB,IAElB,OAAIQ,MAAMC,QAAQF,MAAAA,OAAa,EAAbA,EAAe5P,UAAW4P,MAAAA,OAAa,EAAbA,EAAe5P,QAClD4P,MAAAA,OAAa,EAAbA,EAAe5P,OAAOzN,KAC1Bwd,IAAM,CAAG7f,MAAO6f,EAAGpf,MAAOof,MAGtB,IAILC,EAA4BX,IAChC,GAAIV,MAAAA,OAAqB,EAArBA,EAAuB3U,MAAO,OAClC,KAAK2U,MAAAA,OAAqB,EAArBA,EAAuB9hB,UAAWohB,EAAoB,OAE3D,MAAM2B,EAAgBjB,MAAAA,OAAqB,EAArBA,EAAuB9hB,OAAOiN,MACjD9J,GAAMA,EAAEhL,KAAOqqB,IAElB,GAAKO,EAAL,CAGA,GAA2B,UAAvBA,EAAc1rB,KAChB,OAAO+pB,EAAmBnU,MACvBtH,GAAWA,EAAOtC,QAAU0f,EAAc5P,SAG/C,GAA2B,aAAvB4P,EAAc1rB,KAAqB,CACrC,MAAM+rB,EAAkBN,EAA4BN,GACpD,IAAItc,EAAekd,MAAAA,OAAe,EAAfA,EAAiBnW,MACjCtH,GAAWA,EAAOtC,QAAU0f,EAAc5P,SAU7C,YARqBhZ,IAAjB+L,GAA8Bkd,EAAgB3X,OAAS,IACzDvF,EAAe,CACb7C,MAAO+f,EAAgB,GAAG/f,MAC1BS,MAAOsf,EAAgB,GAAG/f,OAE5Bqf,EAAkBF,EAASY,EAAgB,GAAG/f,QAGzC6C,KAILmd,EAAqCb,I,MACzC,KAAkC,QAA7B,EAAAV,MAAAA,OAAqB,EAArBA,EAAuB9hB,cAAM,eAAEyL,QAClC,OAEF,MAAMsX,EAAgBjB,MAAAA,OAAqB,EAArBA,EAAuB9hB,OAAOiN,MACjD9J,GAAMA,EAAEhL,KAAOqqB,IAElB,OAAQO,MAAAA,OAAa,EAAbA,EAAe5P,SAAuB,KAchD,IAAAnX,YAAU,K,MACJmmB,GACFF,GAA0B,IAES,QAAhC,EAAAH,MAAAA,OAAqB,EAArBA,EAAuB9hB,OAAO,UAAE,eAAEmT,QAGrC8O,GAA0B,GAF1BA,GAA0B,KAI3B,CAACH,IAEJ,MAAMwB,EAAc,KAElB,MAAMC,EAAe7B,EAAkBvV,QAAQ0W,WAC5C3V,GAAMA,EAAE/U,KAAOmpB,IAGlB,IAAsB,IAAlBiC,GAAuBpW,EAAO,CAEhC,MAAMqW,EAAc9B,EAAkBvV,QAAQJ,QAC5C,CAACmB,EAAGuW,IAAMA,IAAMF,IAIlBjU,EAAQM,SAAS,OAAD,wBACX8R,GAAiB,CACpBvV,QAASqX,KAKbnoB,EAAaumB,IA4Bf,OACE,gBAAC,IAAK,CACJ1mB,WAAS,EACTE,OAAQA,EACRC,aAAc,IACZA,EAAaumB,IAGdO,GACC,gBAAC,IAAM,6BAAuB,yBAGhC,gBAAC,KAAmB,KAClB,gBAAC,KAAkB,KACjB,2BACE,0BACGX,E,IAAcY,GAAeA,EAAYtd,eAAkB,IAE9D,gBAAC,KAAgB,KACf,6BAAQwd,KAGZ,gBAAC,KAAqB,CAAClqB,QAASkrB,GAC9B,gBAAC,MAAc,QAInB,gBAAC,KAAgB,KACdb,GACCA,EAA0B/c,KAAKge,I,MAnGflB,EAmGyB,OACvC,gBAAC,EAAAxO,SAAQ,CAACpO,IAAK,GAAG8d,EAAMvrB,MAAMiD,EAAS,OAAS,YAC9C,uBAAKpF,MAAO,CAAEoP,UAAW,UACvB,2BAtGUod,EAsGYkB,MAAAA,OAAK,EAALA,EAAOvrB,IAnGpCqqB,EACJmB,cACAC,QAAQ,KAAM,KACdA,QAAQ,kBAAkB,CAACC,EAAGC,IAAQ,SAASC,OAAOD,GAAO,MAC7DF,QAAQ,WAAYI,GAASA,EAAKlf,gBANhB,MAsGP,yBACE9O,MAAO,CACLiuB,QAAS,eACT1pB,SAAU,QACV2pB,SAAU,eAGX3B,EAAoBmB,EAAMvrB,MAG/B,uBAAKnC,MAAO,CAAEyD,OAAQ,YACnBqoB,EACgB,UAAf4B,EAAMrsB,KACJ,gBAAC,IAAgB,CACfyO,cAAesb,GAAsB,GACrClb,aAAcid,EAAyBO,EAAMvrB,IAC7C6N,SAAW4C,IACWA,GAElB8Z,EAAkBgB,EAAMvrB,GAFNyQ,EAEsBvF,QAG5CiE,kBAAgB,EAChBvB,aAAW,IAEI,aAAf2d,EAAMrsB,KACR,gBAAC,IAAgB,CACfyO,cAAegd,EAA4BY,EAAMvrB,IACjD+N,aAAcid,EAAyBO,EAAMvrB,IAC7C6N,SAAW4C,IACWA,GAElB8Z,EAAkBgB,EAAMvrB,GAFNyQ,EAEsBvF,QAG5CiE,kBAAgB,EAChBvB,aAAW,IAEI,SAAf2d,EAAMrsB,MACO,SAAfqsB,EAAMrsB,MACS,QAAfqsB,EAAMrsB,KACN,gBAAC,IAAU,CACTmM,KAAM,GAAGkgB,EAAMvrB,KACfd,KAAM,OACN8sB,UAA0B,SAAfT,EAAMrsB,KAAkB,OAAI8C,EACvCkJ,MACGye,IAGE,QAFD,EAAAA,MAAAA,OAAqB,EAArBA,EAAuB9hB,OAAOiN,MAC3B9J,GAAMA,EAAEhL,KAAOurB,EAAMvrB,YACvB,eAAEgb,SACL,GAEF5P,SAAWoK,GACT+U,EAAkBgB,EAAMvrB,GAAIwV,EAAEtD,OAAOhH,SAGxB,SAAfqgB,EAAMrsB,KACR,gBAAC,IAAyB,CACxBmM,KAAM,GAAGkgB,EAAMvrB,KACf8N,YAAa,GACbC,aAAcmd,EACZK,EAAMvrB,IAER6N,SAAWgR,GACT0L,EAAkBgB,EAAMvrB,GAAI6e,GAE9BjR,aAAa,IAEb,KACF,WAMd,gBAAC,KAAkB,KACjB,gBAAC,IAAM,CAAC1O,KAAM,SAAQ,SAAY,YAAae,QAASkrB,GACrD,SAEH,gBAAC,IAAM,CACLjsB,KAAM,SAAQ,SACJ,UACVe,QA5IW,KAEnB,MAAMgsB,EAAiB1C,EAAkBvV,QAAQzG,KAAKyG,GAEhDA,EAAQhU,KAAOmpB,EAEV,OAAP,wBACKnV,GAAO,CACVa,QAAS,OAAF,wBAAO8U,GAAqB,CAAE3U,OAAO,MAIzChB,IAITmD,EAAQM,SAAS,OAAD,wBACX8R,GAAiB,CACpBvV,QAASiY,KAIX/oB,EAAaymB,IAuHL5rB,SAAU8rB,GAET,gB,4JCxXN,MAAMqC,EAAgC,EAC3C1G,YAAAA,EACAE,iBAAAA,EACAyG,YAAAA,EACArW,WAAAA,EACAsW,aAAAA,EACAje,cAAAA,EACAke,cAAAA,EACAC,uBAAAA,EACAC,2BAAAA,EACAC,4BAAAA,EACAC,eAAAA,EACAC,UAAAA,EACAC,oBAAAA,EACAC,cAAAA,M,MAEA,MAAMC,GAAaD,GAAiB,IAAI9X,MAAMgY,GAAQA,EAAI9sB,KAAOwlB,IAC3DuH,GAAkBH,GAAiB,IAAI9X,MAC1CgY,GAAQA,EAAI9sB,KAAO0lB,IAGhBsH,EAA0B,qFAE1BC,GAAaJ,MAAAA,OAAS,EAATA,EAAWxhB,OAAQ,GAChCyH,GAAgB+Z,MAAAA,OAAS,EAATA,EAAWK,eAAgBF,EAC3CG,GAAkBJ,MAAAA,OAAc,EAAdA,EAAgB1hB,OAAQ,GAC1C+hB,GACJL,MAAAA,OAAc,EAAdA,EAAgBG,eAAgBF,GAE5B,OAAEhS,EAAM,cAAE+D,IAAkB,WAElC,IAAAlb,YAAU,KACJopB,GACFlO,EAAc,4BAA6BkO,GAEzCE,GACFpO,EAAc,iCAAkCoO,KAEjD,CAACF,EAAYE,IAGhB,MAAME,EAAsBrS,EAAOsS,eAAiB,GAE9CC,KACJF,IAAuBA,EAAoB/Z,SACvC+Z,EAAoBG,MAAM,MAG1BC,KACJJ,IAAuBA,EAAoB/Z,SACvC+Z,EAAoBG,MAAM,MAM1BE,GAAmB5X,KADMyX,GAAgBE,GAU/C,OAPA,IAAA5pB,YAAU,KAEH6pB,GACHpB,GAAuB,KAExB,CAACoB,IAGF,gBAACC,EAAAC,EAAqB,CACpBzB,YAAaA,EACbC,aAAcA,EACda,WAAYA,EACZna,cAAeA,EACfqa,gBAAiBA,EACjBC,mBAAoBA,EACpBjf,cAAeA,EACf2H,WAAYA,EACZuW,cAAeA,EACfC,uBAAwBA,EACxBG,eAAgBA,EAChBiB,iBAAkBA,EAClBnB,2BAA4BA,EAC5BsB,sBAAuBrB,EACvBsB,sBAAgC,QAAT,EAAA9S,EAAOwL,UAAE,eAAED,gBAClCmG,UAAWA,EACXC,oBAAqBA,K,0HCnE3B,MAAMoB,EAAyC,CAC7C7uB,KAAM,GACN8b,OAAQ,GACRgT,SAAU,GACV/W,MAAO,CACLjX,GAAI,KACJ2L,MAAO,KAGEsiB,EAA6C,EACxDhrB,OAAAA,EACAC,aAAAA,EACAgrB,aAAAA,EACAC,mBAAAA,EACA9E,WAAAA,EACAlD,SAAAA,EACAiI,0BAAAA,EACAC,kBAAAA,EACAvuB,iBAAAA,EACAwuB,WAAAA,OAEc,EAAAhW,EAAA,KAAd,MAEQjQ,KAAMkmB,EAAelgB,UAAWmgB,IACtC,UACKC,EAAgBC,IAAqB,IAAAlrB,WAAS,IAInDod,OAAQ+N,EACRtgB,UAAWugB,EACXvmB,KAAMwmB,IACJ,UAGFjO,OAAQkO,EACRzgB,UAAW0gB,EACX1mB,KAAM2mB,EACNlK,OAAQmK,IACN,SAEEC,EAAwBb,MAAAA,OAAiB,EAAjBA,EAAmBvH,SAK1CqI,EAAaC,IAAkB,IAAA5rB,UAAkC,CACtEuqB,KAIF,IAAAlqB,YAAU,MACJsqB,MAAAA,OAAkB,EAAlBA,EAAoB7a,SACtB8b,EAAejB,KAEhB,KAGH,IAAAtqB,YAAU,KAOmB,IAAvBsrB,EAAY7b,QACd8b,EAAe,CAACrB,IAIhBW,EADyB,IAAvBS,EAAY7b,QAA4C,OAA5B6b,EAAY,GAAGlY,MAAMjX,MAGpD,CAACmvB,IAGJ,MAAME,EAAuBjO,IAC3B,MAAMkO,EAAWC,KAAKC,SACZxtB,IAARof,EAAoBA,EAAM,EAAI+N,EAAY7b,OAC1C6b,EAAY7b,QAERmc,EAAiB,IAAIN,GAC3BM,EAAeC,OAAOJ,EAAU,EAAGvB,GACnCqB,EAAeK,IAIXE,EAA0BvO,IAC9BgO,EAAe,IACVD,EAAYpZ,MAAM,EAAGqL,MACrB+N,EAAYpZ,MAAMqL,EAAM,MAUzBwO,EAAwBxO,IAC5B,MAAMkO,OACIttB,IAARof,GAA2B+N,EAAY7b,OAAlB8N,EACjBA,EAAM,EACN+N,EAAY7b,OACZmc,EAAiB,IAAIN,GAC3BM,EAAeC,OAAOJ,EAAU,EAAGH,EAAY/N,IAC/CgO,EAAeK,IAUXI,EAAoB,CAACzO,GAAezV,MAAAA,MACxC,MAAMmkB,EAAgB5B,MAAAA,OAAY,EAAZA,EAAcpZ,MAAMib,GAAMA,EAAEpkB,QAAUA,IAEtDqkB,GAAoBF,MAAAA,OAAa,EAAbA,EAAe5wB,MACrC,aACE4wB,EAAc5wB,MAEd4wB,EAAc5wB,KACd,OACF,GAEJkwB,GAAgBa,IACd,MAAMC,EAAW,IAAID,GAWrB,OAVAC,EAAS9O,GAAO,OAAH,wBACR8O,EAAS9O,IAAI,CAChBnK,MAAO,CACLtL,OAAOmkB,MAAAA,OAAa,EAAbA,EAAenkB,QAAS,GAC/B3L,IAAI8vB,MAAAA,OAAa,EAAbA,EAAe9vB,KAAM,MAE3Bd,KAAM8wB,GAAqB,OAC3BhC,SAAU,GACVhT,OAAQ,KAEHkV,MAKLC,EAAuB,CAAC/O,EAAa4M,KACzC,MAAMkC,EAAW,IAAIf,GACrBe,EAAS9O,GAAO,OAAH,wBAAQ8O,EAAS9O,IAAI,CAAE4M,SAAU,GAAGA,IAAYhT,OAAQ,KACrEoU,EAAec,IAIX3F,EAAoB,CAACnJ,EAAalW,KACtCkkB,GAAgBa,IACd,MAAMC,EAAW,IAAID,GAKrB,OAJAC,EAAS9O,GAAO,OAAH,wBACR8O,EAAS9O,IAAI,CAChBpG,OAAQ9P,IAEHglB,MAKLE,EAAyB,CAC7BzkB,EACAT,EACAmlB,IAEgB,OAAZA,EACK,CACL1kB,MAAO,GAAGA,IACVT,MAAO,GAAGA,KAGL,GAeLolB,EAAyB5b,I,MAC7B,MAAM6b,EACqC,QADvB,EAAAhC,MAAAA,OAAa,EAAbA,EAAelmB,KAChCyM,MAAM0b,GAAUA,EAAM/iB,MAAQiH,WAAU,eACvC+b,MAAMljB,KAAKygB,IACJ,CACL9iB,MAAO8iB,EAAS9uB,KAChByM,MAAOqiB,EAAS9uB,KACbssB,cACAC,QAAQ,KAAM,KACdA,QAAQ,WAAYI,GAASA,EAAKlf,oBAG3C,OAAK4jB,GACI,IAOLG,EAA4BC,I,QAChC,OAEuD,QAFhD,EACoC,QADpC,EAAApC,MAAAA,OAAa,EAAbA,EAAelmB,KACnByM,MAAM0b,GAAUA,EAAM/iB,MAAQkjB,EAAKzxB,cAAK,eACvCuxB,MAAM3b,MAAM0b,GAAUA,EAAMtxB,OAASyxB,EAAK3C,kBAAS,eAAE9iB,OA+BrD2e,EA3B+BsF,EAAYtb,MAAM8c,I,MACrD,MAAkB,OAAlBA,EAAK1Z,MAAMjX,KAEc,KAArB2wB,EAAK1Z,MAAMtL,OACO,KAAlBglB,EAAK3C,WAEsC,QAD1C,EAAAO,MAAAA,OAAa,EAAbA,EAAelmB,KACbyM,MAAM0b,GAAUA,EAAM/iB,MAAQkjB,EAAKzxB,cAAK,eACvCuxB,MAAM3b,MACL8b,GACCA,EAAa1xB,OAASyxB,EAAK3C,UACJ,aAAvB4C,EAAa1lB,UAED,KAAhBylB,EAAK3V,YAkBX+T,GACAH,GACAJ,GACA1uB,EAoCF,OAZA,IAAA+D,YAAU,K,QACR,GACEgrB,GACkC,YAAlCI,EACA,CACA,MAAMQ,GAC4C,QAAhD,EAAiC,QAAjC,EAAAZ,MAAAA,OAA2B,EAA3BA,EAA6BxmB,YAAI,eAAEwoB,qBAAa,eAAEC,aAAc,GAClE1C,EAA0BqB,GAC1BvsB,OAED,CAAC2rB,EAA6BG,IAG/B,gBAAChsB,EAAA,EAAK,CACJD,WAAS,EACTE,OAAQA,EACRC,aAAcA,EACdJ,eAAe,EACfK,iBAAiB,GAEhBqrB,GACCI,GACCG,GAA+B,gBAACpuB,EAAA,EAAM,cAEzC,gBAAC,KAAkB,KACjB,gBAAC,KAAiB,KAChB,0BAAK0oB,GACL,gBAAC,KAAoB,CAACppB,QAASiD,GAC7B,gBAAC,MAAc,QAGjBgsB,GACA,2BACE,qBAAGrxB,MAAO,CAAEwE,QAAS,4BAA6Bf,OAAQ,IACxD,gBAACyvB,EAAA,EAAK,CACJC,GAAI,MACJjW,QAAS,oCACThL,WAAY,CACVoL,OAAQ,mCAIE,aAAfmT,GACC,qBAAGzwB,MAAO,CAAEwE,QAAS,uBAAwBf,OAAQ,IACnD,gBAACyvB,EAAA,EAAK,CACJC,GAAI,MACJjW,QAAS,mCACThL,WAAY,CACVoL,OAAQ,qCAOlB,KACF,gBAAC,KAAe,KACd,gCACGgU,GACCA,EAAY7b,OAAS,GACrB6b,EAAY5hB,KAAI,CAAC0jB,EAAY/H,K,YA1JbgI,EA0JuB,OACrC,gBAACC,EAAA,EAAa,CACZ1jB,IAAK,GAAGyb,KAAS+H,EAAWjD,YAAYiD,EAAWha,MAAMjX,KACzDkpB,MAAOA,EACP+H,WAAYA,EACZG,mCACGlD,MAAAA,OAAY,EAAZA,EAAcpZ,MACZuc,IAAM,MAAC,OAAAA,EAAG1lB,SAA0B,QAAhB,EAAAslB,EAAWha,aAAK,eAAEtL,WAG3C2lB,wBAAyBlB,EACP,QAAhB,EAAAa,EAAWha,aAAK,eAAEtL,MACF,QAAhB,EAAAslB,EAAWha,aAAK,eAAEtL,MACF,QAAhB,EAAAslB,EAAWha,aAAK,eAAEjX,IAEpBuxB,0BAzKYL,EA0KVhD,MAAAA,EAAAA,EAAgB,IAxK9BgD,MAAAA,OAAM,EAANA,EAAQ3jB,KAAK0J,IAAU,CACrB/L,MAAO+L,EAAMtL,MACbA,MAAOsL,EAAMtL,YACR,IAuKK6lB,cAAe3B,EACf4B,2BAA4BrB,EAC1Ba,EAAWjD,SACRxC,cACAC,QAAQ,KAAM,KACdA,QAAQ,WAAYI,GAASA,EAAKlf,gBACrCskB,EAAWjD,SACK,QAAhB,EAAAiD,EAAWha,aAAK,eAAEjX,IAEpB0xB,4BAA6BpB,EAC3BW,EAAW/xB,MAAQ,QAErByyB,iBAAkBxB,EAClByB,eAAgBlB,EAAyBO,GACzCY,cAAetH,EACfuH,iBAAkBlC,EAClBmC,gBAAiB1C,EACjB2C,mBAAoBrC,EACpBsC,2BAAmD,IAAvB9C,EAAY7b,OACxCxT,iBAAkBA,SAK5B,gBAAC,KAAiB,KAChB,gBAAC,IAAM,CACLG,QAAS,KA1RjBmvB,EAAe,KA2RPlwB,KAAM,SAAQ,SACJ,eAAc,MACjB,QAAO,cACF,0BACZnB,SAAU+B,GAAgB,oBAI5B,uBAAKjC,MAAO,CAAEiuB,QAAS,OAAQoG,IAAK,SAClC,gBAAC,IAAM,eACO,uBACZhzB,KAAM,SAAQ,SACJ,YACVe,QAASiD,GAER,UAGH,gBAAC,IAAM,eACO,qBACZhE,KAAM,SAAQ,SACJ,UACVe,QAAS,IApJW,MAE9B,IAAIwuB,IAAmBN,MAAAA,OAAkB,EAAlBA,EAAoB7a,QAK3C,GAAImb,EACFK,EAAwB,CAAE3I,SAAAA,QACrB,CAEL,MAAMgM,EAAc,CAClBrB,WAAY,IAAI3B,GAAavb,QAC1Byd,GAAuB,OAAhBA,EAAGpa,MAAMjX,KAEnBkuB,aAAc,IAAKA,GAAgB,KAErCS,EAAsB,CAAExI,SAAAA,EAAUgM,YAAAA,SAdlCjvB,KAiJuBkvB,GACfr0B,SAAU8rB,EAAsB,yBAEtB,0BAET,qB,eC9ZR,MAAMwI,EAAmC,EAC9ClE,mBAAAA,EACAmE,gBAAAA,EACAnM,SAAAA,EAEArmB,iBAAAA,EACAuuB,kBAAAA,EACAC,WAAAA,MAGA,MAAOmC,EAAO8B,IAAY,IAAA/uB,UACxB2qB,GAAsB,KAGjBqE,EAAaC,IAAqB,IAAAjvB,WAAkB,GACrD0rB,EAAwBb,MAAAA,OAAiB,EAAjBA,EAAmBvH,QAC3CC,EAAsBsH,MAAAA,OAAiB,EAAjBA,EAAmBrH,YAGzCC,GAAwB,QAC5Bd,EAHqBkI,MAAAA,OAAiB,EAAjBA,EAAmBruB,GAKxC+mB,GAGIG,EAAgBH,EAClB2L,GAAgB3L,EAAoBI,YAAYxa,cAChD,IAOE,EAAE5M,IAAM,EAAAuY,EAAA,KAGRqa,KAAelC,MAAAA,OAAK,EAALA,EAAOnd,QACtBsf,EAAYnC,MAAAA,OAAK,EAALA,EAAQ,GACpBoC,EAAiBD,MAAAA,OAAS,EAATA,EAAW3b,MAAMtL,MAClCmnB,EAAqBF,MAAAA,OAAS,EAATA,EAAW5E,SACnCxC,cACAC,QAAQ,KAAM,KACXsH,EAAiBH,MAAAA,OAAS,EAATA,EAAW5X,OAC5BgY,GAAmBvC,MAAAA,OAAK,EAALA,EAAOnd,SAAUmd,EAAMnd,OAAS,EACnD2f,IAAuBD,EACvBE,EAAgC,KAAlBzC,MAAAA,OAAK,EAALA,EAAOnd,QACrBoO,EAAciR,EAClB7yB,EACE,gCAAG,eAEH,gCACGC,EAAE,sCACH,gBAAC,KAAQ,OAIb,gC,IAAIA,EAAE,sCAaR,OACE,gCACE,gBAAC,KAAsB,KACrB,gBAAC,KAAU,CAAC4yB,WAAYA,GACtB,gBAAC,MAAQ,OAEVA,GACC,gBAAC,KAAgB,eAAa,6BAC5B,gBAAC,KAAqB,KACnB5yB,EAAE,8CAEJA,EAAE,8CAA+C,CAChD8yB,eAAAA,EACAC,mBAAAA,EACAC,eAAAA,IAEDE,GACC,4BACGlzB,EAAE,gDAAiD,CAClDizB,iBAAAA,IAEDE,EAAc,GAAK,MAK5B,gBAAC,IAAM,eACO,oBACZn1B,SAAU+B,IAAqB6yB,EAC/BzzB,KAAM,SAAQ,SACJ,eACVe,QAzCgB,KAClBivB,IAA2BA,GAAyByD,EACtDF,GAAkB,GAIlBxL,KAoCIppB,MAAO,CAAEs1B,SAAU,SAAUC,YAAa,UAE1C,gBAAC,KAAiB,KACf1R,EAAa,KACZwN,GACA,gBAAC,KAAY,KACX,gBAAC,MAAM,M,IAAKhI,MAMrBsL,GACC,gBAACvE,EAAoB,CACnB5E,WACGsJ,EAEG7yB,EACA,cACA,cAHA,aAKNwuB,WAAYA,EACZrrB,OAAQuvB,EACRtvB,aAhGiB,KACvBuvB,GAAkB,IAgGZvE,aAAcoE,EACdnE,mBAAoBsC,EACpBtK,SAAUA,EACViI,0BAjGmB8B,GACzBqC,EAASrC,GAiGH7B,kBAAmBA,EACnBvuB,mBAAoBA,M,0DCnJ9B,MAAMuf,EAAU,QAAU;;;;EAMpBgJ,EAAQ,QAAU;;;;EAMlBzI,EAAgB,QAAU;;;;;;;;EAUnByT,EAAyC,EACpDC,oBAAAA,EACAC,iBAAAA,EACAzO,OAAAA,EACA0O,SAAAA,EACApc,aAAAA,EACAmP,gBAAAA,MAEA,MAAM,EAAExmB,IAAM,EAAAuY,EAAA,MACR,aAAE+M,IAAiB,UAEzB,MAAkB,YAAXP,EACL,gBAACzF,EAAO,KACN,0BAAKtf,EAAE,wCACNyzB,GACC,2BACE,qBACE31B,MAAO,CAAEiuB,QAAS,gBAClB5Z,OAAQ,SACRC,IAAK,sBACLF,KAAMuhB,GAELzzB,EAAE,yCAIT,gBAACsoB,EAAK,CACJlU,IAAK,IACLC,IAAKrU,EAAE,yCAET,gBAAC6f,EAAa,KACZ,gBAAC,IAAM,CACL1gB,KAAM,SAAQ,SACJ,YACVe,QAASqzB,EACTv1B,SAAUsnB,GAETtlB,EAAE,6CAGL,gBAAC,IAAM,CACLb,KAAM,SAAQ,SACJ,UACVe,QAASszB,EACTx1B,SAAUsnB,EAAY,SACZA,GAINtlB,EAFFwmB,EAEI,kBADA,wCAMZ,gBAAClH,EAAO,KACN,0BAAKtf,EAAE,sCACP,sBAAIlC,MAAO,CAAE2G,MAAO,QAAU4S,GAC7Boc,GACC,2BACE,qBACE31B,MAAO,CAAEiuB,QAAS,gBAClB5Z,OAAQ,SACRC,IAAK,sBACLF,KAAMuhB,GAELzzB,EAAE,yCAIT,gBAACsoB,EAAK,CAAClU,IAAK,IAAYC,IAAKrU,EAAE,yCAC/B,gBAAC6f,EAAa,KACZ,qBACE3N,KAAM,kBAAYwhB,sBAClBvhB,OAAQ,SACRC,IAAK,uBAEL,gBAAC,IAAM,CAACjT,KAAM,SAAQ,SAAY,aAC/Ba,EAAE,wCAIP,gBAAC,IAAM,CACLb,KAAM,SAAQ,SACJ,UACVe,QAASqzB,GAERvzB,EAAE,gD,qIC7GN,MAAM2zB,EAAwC,EACnDC,eAAAA,EACA5U,cAAAA,EACA6U,6BAAAA,MAEA,MAAM,EAAE7zB,IAAM,EAAAuY,EAAA,KAEd,OACE,gBAAC,KAAiB,KACdqb,EAAergB,OAGf,gCACE,sBAAIhU,UAAW,eAAgBS,EAAE,iCAChC4zB,EAAepmB,KAAK0J,GACnB,gBAAC,KAAe,CAACxJ,IAAKwJ,EAAMjX,IAC1B,2BACE,gBAAC,KAAoB,KAAEiX,EAAMtL,QAE/B,gBAACD,EAAA,EAAU,CACTxM,KAAM,OACNmM,KAAM4L,EAAMjX,GACZkL,MAAO+L,EAAM/L,OAAS,GACtBE,SAAU,EAAG8G,QAAUhH,MAAAA,OACrB6T,EACE6U,EACAD,EAAepmB,KAAKsmB,GAClBA,EAAS7zB,KAAOiX,EAAMjX,GAClB,OAAD,wBACM6zB,GAAQ,CACX3oB,MAAAA,IAEF2oB,YAtBlB,2BAAM9zB,EAAE,6CCTH+zB,EAAuC,EAAG3N,SAAAA,M,MACrD,MAAM,EAAEpmB,IAAM,EAAAuY,EAAA,MACR,OAAE0C,EAAM,cAAE+D,IAAkB,UAE5B4U,GAA0B,QAAT,EAAA3Y,EAAOwL,UAAE,eAAEuN,sBAAuB,GACnDH,EAA+B,0BAGnCvrB,KAAM2rB,EACNzzB,MAAO0zB,EACP5lB,UAAW6lB,EACXC,aAAcC,IACZ,OAA2BjO,GAEzBkO,EAAeH,GAAyBE,EAExCE,EAAWL,EAWjB,OATA,IAAApwB,YAAU,KACR,GAAImwB,EAAsB,CAExB,MAAMO,GACJ,QAAgCP,GAClCjV,EAAc6U,EAA8BW,MAE7C,CAACP,IAGF,gCACGK,EACC,2BACE,gBAAC1zB,EAAA,EAAM,kBAAgB,QAAO,MAASZ,EAAE,yBAEzCu0B,EACF,gBAACxzB,EAAA,EAAO,SAAU,UAAU,OAAcwzB,GAAU9sB,SAEpD,gCACE,gBAACksB,EAAmB,CAClBC,eAAgBA,EAChB5U,cAAeA,EACf6U,6BAA8BA,O,0EClCnC,MAAMY,GAAsC,EAAGC,aAAAA,M,eACtC,EAAAnc,EAAA,KAAd,MACMoc,GAAqB,IAAAjuB,QAAuB,MAC5CkuB,GAAc,IAAAluB,QAA4B,MAC1CmuB,EAAa,KAGb,OAAE5Z,EAAM,cAAE+D,IAAkB,WAC3B8V,EAAqBC,IAA0B,IAAAtxB,UAAmB,KAClEuxB,EAAcC,EAAaC,IAAkB,QAClD,uCAEKC,EAAWC,EAAUC,IAAe,QACzC,oCAEKC,EAAgB,CAAEC,IAAuB,QAC9C,8CAEKC,EAAc,CAAEC,IAAkB,QACvC,sCAGIC,EAA6Bza,EAAOya,2BACpClP,EAA2B,QAAT,EAAAvL,EAAOwL,UAAE,eAAED,gBAE7BmP,EAAeV,EAAY3d,SAAW2d,EAAYz0B,MAClDo1B,EAAYR,EAAS9d,SAAW8d,EAAS50B,MACzCq1B,EAAqBF,EAAe,CAAEn1B,MAAOm1B,QAAiB1zB,EAC9D6zB,EAAkBF,EAAY,CAAEp1B,MAAOo1B,QAAc3zB,EAErD2L,EAA4C,CAChDga,QAA4C,QAAnC,EAAA8N,MAAAA,OAA0B,EAA1BA,EAA4B9N,eAAO,QAAI,qBAChD3O,KACkC,QAAhC,EAAAyc,MAAAA,OAA0B,EAA1BA,EAA4Bzc,YAAI,QAChC,6CACFqc,eAA0D,QAA1C,EAAAI,MAAAA,OAA0B,EAA1BA,EAA4BJ,sBAAc,SAC1DS,QAA4C,QAAnC,EAAAL,MAAAA,OAA0B,EAA1BA,EAA4BK,eAAO,QAAI,KAG3CC,EAAqBC,IAA0B,IAAAxyB,UAAS,CAAEyyB,EAAG,EAAGC,EAAG,KACnEC,EAAcC,IAAmB,IAAA5yB,WAAS,IAC1C6yB,EAAkBC,IAAuB,IAAA9yB,UAAiB,IAC1D+yB,EAAcC,IAAmB,IAAAhzB,UACtC,OAEKizB,EAAkBC,IAAuB,IAAAlzB,UAE9C,OACKmzB,EAAeC,IAAoB,IAAApzB,WAAS,IACnD,IAAAK,YAAU,KACR+yB,GAAiB,KAChB,IAEH,MAAOC,EAAgBC,IAAqB,IAAAtzB,UAAS,IAE9CuzB,EAAoBC,IAAyB,IAAAxzB,UAAS,KACtDyzB,GAAcC,KAAmB,IAAA1zB,UAA4B,IAE9D2zB,GAAS1C,MAAAA,OAAY,EAAZA,EAAc0C,OACvBC,GAAiB3C,MAAAA,OAAY,EAAZA,EAAc2C,eAC/BC,GACJD,KAAmBA,GAAevjB,MAAMoD,GAAuB,YAAbA,EAAMjX,KAEpDs3B,GAAc,CAAEt3B,GAAI,SAAU2L,MAAO,WAE3C,IAAA9H,YAAU,KACHmX,EAAOya,6BACV1W,EAAc,qCAAsCpR,EAAcga,SAClE5I,EAAc,kCAAmCpR,EAAcqL,MAC/D+F,EACE,4CACApR,EAAc0nB,gBAEhBtW,EAAc,qCAAsCpR,EAAcmoB,YAEnE,CAAC/W,EAAe/D,EAAOya,2BAA4B9nB,KAEtD,IAAA9J,YAAU,KACRixB,EAAuB,IAAI,IAAIyC,IAAI,IAAI5pB,EAAcmoB,cACpD,KAEH,IAAAjyB,YAAU,KACR,GAAIszB,GAAQ,CACV,MAAMztB,EAAcytB,GAAO5pB,KAAK+J,IAAS,CACvCtX,GAAIsX,EAAKtX,GAAG2M,cACZhB,MAAO2L,EAAK3L,MAAMgB,kBAEpBuqB,GACEG,GAAe3tB,EAAc,CAAC4tB,MAAgB5tB,OAGjD,CAACytB,GAAQE,MAEZ,IAAAxzB,YAAU,KACR,GAAIkzB,EAAoB,CACtB,MAAMS,EAAWL,GACbA,GACGvjB,QAAQ0D,GACPA,EAAKtX,GAAGwrB,cAAciM,WAAWV,EAAmBvL,iBAErDje,KAAK+J,IAAS,CACbtX,GAAIsX,EAAKtX,GAAG2M,cACZhB,MAAO2L,EAAK3L,MAAMgB,kBAEtB,GACJuqB,GAAgBG,GAAeG,EAAW,CAACF,MAAgBE,QACtD,CACL,MAAME,EAAUP,GACZA,GAAO5pB,KAAK+J,IAAS,CACnBtX,GAAIsX,EAAKtX,GAAG2M,cACZhB,MAAO2L,EAAK3L,MAAMgB,kBAEpB,GACJuqB,GAAgBG,GAAeK,EAAU,CAACJ,MAAgBI,OAE3D,CAACX,EAAoBI,GAAQE,MAEhC,IAAAxzB,YAAU,MACH8yB,GAAiBjC,EAAmBhuB,SACvCowB,EAAkBpC,EAAmBhuB,QAAQgT,gBAE9C,CAACid,EAAejC,KAEnB,IAAA7wB,YAAU,KACJ6wB,EAAmBhuB,SACrBowB,EAAkBpC,EAAmBhuB,QAAQgT,gBAE9C,CAACud,MAEJ,IAAApzB,YAAU,K,MACR,IAAK6wB,EAAmBhuB,UAAYiuB,EAAYjuB,QAAS,OAEzD,MAAMixB,EACiB,YAArBlB,GAAkCF,EAC9BA,EACA5B,EAAYjuB,QAEZwE,EAAQysB,EAASzsB,MACjB0sB,EAAsC,QAArB,EAAAD,EAASE,oBAAY,QAAI,EAC1CC,EAAyB5sB,EAAM6sB,YAAYnD,EAAYgD,GAEvDI,GAAc,QAClBL,EACAzsB,EACAwpB,EAAmBhuB,QAAQgT,aAC3Boe,GAGF9B,EAAuBgC,KACtB,CACDnB,EACAd,EAAoBE,EACpBF,EAAoBG,EACpBO,EACAM,EACAR,KAGF,IAAA1yB,YAAU,KACR,MAAMo0B,EAAe,K,MACnB,IAAKvD,EAAmBhuB,UAAY6vB,IAAiB5B,EAAYjuB,QAC/D,OAEF,MAAMixB,EACiB,YAArBlB,EAAiCF,EAAe5B,EAAYjuB,QACxDwE,EAAQysB,EAASzsB,MACjB0sB,EAAsC,QAArB,EAAAD,EAASE,oBAAY,QAAI,EAC1CC,EAAyB5sB,EAAM6sB,YACnCnD,EACAgD,GAGII,GAAc,QAClBL,EACAzsB,EACAwpB,EAAmBhuB,QAAQgT,aAC3Boe,GAGF9B,EAAuBgC,IAKzB,OAFAr0B,OAAOI,iBAAiB,SAAUk0B,GAE3B,KACLt0B,OAAOK,oBAAoB,SAAUi0B,MAEtC,CAACxB,EAAkBI,IAEtB,MAIMqB,GAAe,CACnBhtB,EACAitB,EACAC,GAA0B,K,MAE1B,IAAKD,EAAS,OAEd,MAAMP,EAAuC,QAAtB,EAAAO,EAAQE,sBAAc,QAAI,EAC3CC,EAAqCptB,EAAM6sB,YAC/CnD,EACAgD,EAAiB,GAOnB,GACEU,EAN0CptB,EAAM6sB,YAxMhC,IA0MhBH,EAAiB,IAMjBQ,EACA,CACA,MAAMr5B,EAAOmM,EAAMqtB,UACjBD,EAAqC,EACrCV,GAEFZ,EAAsBj4B,GACtBq3B,GAAgB,GAEhB,MAAM4B,GAAc,QAClBG,EACAjtB,EACA2rB,EACAyB,GAEFtC,EAAuBgC,QAEvB5B,GAAgB,IAIdoC,GAAoBvhB,IACxByf,EAAoBzf,GACN,YAAVA,EACFge,EAAe1d,YAAW,GACP,SAAVN,GACTme,EAAY7d,YAAW,IAIrBkhB,GAAkBnhB,I,MACtB,MAAMohB,EACiB,YAArBjC,EAAiCF,EAAe5B,EAAYjuB,QAC9D,IAAKgyB,EACH,OAGF,MAAMC,EACiB,YAArBlC,EAAiCxB,EAAiBG,EAC9CwD,EAAcF,EAAcxtB,MAE5B0sB,EAA2C,QAA1B,EAAAc,EAAcb,oBAAY,QAAI,EAC/CC,EAAyBc,EAAYb,YACzCnD,EACAgD,GAGF,IAAIiB,EACAC,EAE0B,EAA1BhB,GASFe,EAAUD,EAAc,IAAMthB,EAAKtX,GAAK,IACxC84B,EAAoBF,EAAYtlB,OAASgE,EAAKtX,GAAGsT,OAAS,IAT1DulB,EACED,EAAYL,UAAU,EAAGT,GACzB,IACAxgB,EAAKtX,GACL,IACA44B,EAAYL,UAAUX,GACxBkB,EAAoBhB,EAAyBxgB,EAAKtX,GAAGsT,OAAS,GAMhEqlB,EAAgBlhB,SAASohB,GAEzBngB,YAAW,KACTggB,EAAcvuB,QACduuB,EAAcK,kBAAkBD,EAAmBA,KAClD,GAEH1C,GAAgB,IAGZ4C,GACJxjB,IAIA,MAAM,KAAEnK,EAAI,MAAEH,GAAUsK,EAAEtD,OAEb,YAAT7G,GACF4pB,EAAexd,SAASvM,GACxBgtB,GAAahtB,EAAOqrB,IACF,SAATlrB,IACT+pB,EAAY3d,SAASvM,GACrBgtB,GAAahtB,EAAOypB,EAAYjuB,YAIpC,IAAA7C,YAAU,KACJsyB,GAAmC,EAAnBE,GAAwBY,GAAa3jB,OAAS,GAChEgjB,EAAoB,KAErB,CAACH,EAAcE,EAAkBY,KAEpC,MAAMgC,GAAiBzjB,IACrB,GAAc,cAAVA,EAAE/H,KAAiC,YAAV+H,EAAE/H,IAAmB,CAChD+H,EAAEK,iBACF,IAAIyZ,EAAW+G,EAQf,GAPc,cAAV7gB,EAAE/H,KAA0CwpB,GAAa3jB,OAAS,EAAzC+iB,EAC3B/G,EAAW+G,EAAmB,EACX,YAAV7gB,EAAE/H,KAAqB4oB,EAAmB,IACnD/G,EAAW+G,EAAmB,GAEhCC,EAAoBhH,GAEhBoF,EAAmBhuB,QAAS,CAC9B,MAAMwyB,EAAexE,EAAmBhuB,QAAQhJ,SAAS4xB,GACzD4J,MAAAA,GAAAA,EAAcC,eAAe,CAAEC,SAAU,SAAUC,MAAO,aAG9D,GAAc,UAAV7jB,EAAE/H,KAAmB0oB,GAAgBc,GAAa3jB,OAAS,EAC7DkC,EAAEK,iBACF4iB,GAAexB,GAAaZ,IAC5BD,GAAgB,QACX,GAAc,cAAV5gB,EAAE/H,IAAqB,CAChC,MAAMkqB,EACiB,YAArBlB,EAAiCF,EAAe5B,EAAYjuB,QAC9D,GAAIixB,GAAuC,MAA3BA,EAASU,eAAwB,CAC/C,MAEMD,EAzUQ,MA0UZT,EAASzsB,MAHYysB,EAASU,eAGE,GAElC3f,YAAW,KACTwf,GAAaP,EAASzsB,MAAOysB,EAAUS,KACtC,MA+CT,OACE,gCACE,uBAAKv6B,MAAO,CAAE6E,SAAU,WAAYuK,UAAW,UAC3CoqB,IACA,gCACE,gBAAC3rB,EAAA,EAAU,CACTR,MAAOyC,EAAcga,QACrB7W,UAAWmoB,GACX/sB,iBA7MS7L,IACnBm2B,EAAgBn2B,IA6MNgL,KAAM,UACNnM,KAAM,OACNyM,MAAO,UACPP,SAAU4tB,GACVpsB,QAAS,IAAM4rB,GAAiB,WAChCz6B,SAAUwoB,EAAe,gBAG1BqP,GACC,gBAACn1B,GAAA,EAAa,SAAUm1B,KAI9B,gBAAC/e,EAAA,EAAQ,CACP3L,MAAOyC,EAAcqL,KACrBlI,UAAWmoB,GACXluB,IAAK4pB,EACLtpB,KAAM,OACNnM,KAAM,OACNyM,MAAO,OACPP,SAAU4tB,GACVpsB,QAAS,IAAM4rB,GAAiB,QAChC36B,MAAO,CAAEqE,OAAQ,QAASo3B,OAAQ,OAAQC,QAAS,QACnDx7B,SAAUwoB,IAEXsP,GAAmB,gBAACp1B,GAAA,EAAa,SAAUo1B,IAC5C,gBAAC,IAAM,UACK,eACV32B,KAAM,SACNe,QAhFuB,KAC7B,MAAM03B,EACiB,YAArBlB,EAAiCF,EAAe5B,EAAYjuB,QAE9D,GAAIixB,GAAYzwB,SAAS8R,KAAKwgB,SAAS7B,GAAW,CAChD,MAAMC,EAAiBD,EAASU,gBAAkB,EAE5CntB,EAAQysB,EAASzsB,MACjB0F,EACJ1F,EAAM6K,MAAM,EAAG6hB,GAAkB,IAAM1sB,EAAM6K,MAAM6hB,IAG9B,YAArBnB,EAAiCxB,EAAiBG,GACpC3d,SAAS7G,GAEzB8H,YAAW,KACTif,EAASxtB,QACTwtB,EAASoB,kBAAkBnB,EAAiB,EAAGA,EAAiB,GAEhEM,GAAatnB,EAAU+mB,KACtB,KA6DC95B,MAAO,CACL6E,SAAU,WACVtB,MAAO,EACPC,OAAQ,EACRS,OAAQ,GAEV/D,SAAUwoB,GAAe,gBAI3B,gBAAC,KAAQ,CACPxb,IAAK2pB,EACL+E,MAAOxC,GACPppB,SAAWyJ,IACTmhB,GAAenhB,IAEjBiB,UAAW4d,EACXzzB,SAAUqzB,EACVM,iBAAkBA,EAClBC,oBAAqBA,KAGzB,uBAAKz4B,MAAO,CAAEoP,UAAW,SACvB,uBACEpP,MAAO,CACLiuB,QAAS,OACT4N,WAAY,SACZxH,IAAK,QACLyH,aAAc,SAGhB,gBAAC,MAAY,CAACn1B,MAAO,YACrB,wBAAM3G,MAAO,CAAE2G,MAAO,UAAW2uB,SAAU,aAAY,wDAIvDkE,IACA,gCACE,gBAACtmB,EAAA,EAAW,UACA,UAAS,MACZ,QAAO,YACD,cAAa,WACdpD,EAAc0nB,eAAc,YAC3B9O,EACbnb,SAAU,KAERkqB,EAAoB7d,UADF9J,EAAc0nB,mBAKnC1nB,EAAc0nB,gBACb,uBAAKx3B,MAAO,CAAEoP,UAAW,SACvB,gBAAC,KAAyB,CACxBQ,IAAKmsB,KAAKC,UAAUlsB,EAAcmoB,SAAW,IAC7C/nB,aAAcJ,EAAcmoB,QAC5BnoB,cAAeknB,EACfiF,QAjHUtkB,IACxBA,EAAEK,iBACF,MACMkkB,EADavkB,EAAEwkB,cAAcC,QAAQ,QAExCxO,QAAQ,YAAa,KACrByO,MAAM,UACNtmB,QAAQumB,GAA6B,KAAlBA,EAAO5jB,SAEvB6jB,EAAiB,IAAIzsB,EAAcmoB,WAAYiE,GACrDvE,EAAe/d,SAAS2iB,GACxBtF,GAAwBuF,GAAS,IAAI,IAAI9C,IAAI,IAAI8C,KAASN,QAwG5ClsB,SArGYioB,IAC1BN,EAAe/d,SAASqe,GACxBhB,GAAwBuF,GAAS,IAAI,IAAI9C,IAAI,IAAI8C,KAASvE,QAoG5CtnB,WAAY+X,S,gBCjcvB,MAAMmM,GAAwC,CACnD,EAAK,OACL,EAAK,MACL,EAAK,OACL,EAAK,UACL,GAAM,WASK4H,GAAqC,EAChDnU,SAAAA,EACAxY,cAAAA,EACA6N,SAAAA,EACA6H,YAAAA,EACAkX,gBAAAA,EACAC,sBAAAA,EACAC,0BAAAA,EACAC,0BAAAA,EACAC,mBAAAA,M,QAEA,MAAM,EAAE56B,IAAM,EAAAuY,EAAA,KACR+J,GAAU,UACV5G,GAAQ,QAAc,EAAG0K,EAAUwU,GACnC3V,GAAa,SAEb4V,EAA+B,QAAjB,EAAAjtB,MAAAA,OAAa,EAAbA,EAAe6Y,UAAE,eAAEoU,aAGrCtc,QAASuP,EACTsG,aAAc5H,IACZ,OAAsBpG,IAGxB9d,KAAMwyB,EACNxsB,UAAWysB,IAET,UAEIzyB,KAAMukB,IACZ,UAEIC,GAAaD,GAAiB,IAAI9X,MACrCgY,GAAQA,EAAI9sB,KAAO2N,EAAcwpB,OAAO4D,QAIrCjoB,GAAgB+Z,MAAAA,OAAS,EAATA,EAAWK,eAFD,sFAKzB8N,EAAaC,IAClB,IAAAz3B,UAAkC,YAE7B6oB,EAAe6O,IAAoB,IAAA13B,WACxC,QAA4BmK,EAAc2f,iBAErC6N,EAAYC,IAAiB,IAAA53B,UAAS,KAEtC63B,EAAkBC,KAAuB,IAAA93B,aACzC+3B,GAAoBC,KAAyB,IAAAh4B,YAG9CmY,IAAmB,SACnB8f,IAAoBlB,MAAAA,OAAe,EAAfA,EAAiBmB,cAAe,GAEpDC,GAAepP,GAA8BuO,EAE7Cc,IAAcf,MAAAA,OAAmB,EAAnBA,EAAqBgB,UAAW,GAC9CxN,GAAoBuN,GAAY9mB,MAAMwW,GAAe,kBAATA,EAAEtrB,KAC9C87B,GAAqBF,GAAY9mB,MAAMwW,GAAe,mBAATA,EAAEtrB,KAC/C+7B,GAAsBH,GAAY9mB,MAAMwW,GAAe,mBAATA,EAAEtrB,KAEhDg8B,GAAiBpB,EACc,QAAjC,EAAAmB,MAAAA,QAAmB,EAAnBA,GAAqBtU,oBAAY,eAAEwU,sBACnCj6B,EAEEo1B,GAAiBmD,MAAAA,OAAe,EAAfA,EAAiBnD,eAElC8E,GACH9E,KACEA,GAAevjB,MAAMoD,GAAuB,YAAbA,EAAMjX,OACxC,EAEI2sB,GAA2C,CAC/CwP,qBAAsBxB,EACtBuB,UAAAA,KAGF,IAAAr4B,YAAU,KACJs3B,GACFD,GAAiB,KAElB,CAACC,IAGJ,MAAMiB,GAAuC,YAAhBpB,EACvBqB,GAAuC,YAAhBrB,EACvBsB,GACY,iBAAhBtB,GAAkD,eAAhBA,EAEpC,OACE,gBAAC,KAAM,CACLrtB,cAAeA,EACfgO,iBAAkBA,GAClB2H,oBAAoB,EACpB9H,SAAU,CAACR,EAAQ7D,KACjBqE,EAASR,EAAQ7D,IAEnBoM,iBAAe,IAEb7E,I,oBACA,MAAM6d,GAAoB7d,EAAY1D,OAAOsS,eAAiB,IAAIha,OAC5DkpB,GACJ9d,EAAY1D,OAAOsS,eAAiB,IACpC1Z,QAAQmc,GACRA,EAAE/b,QAAQH,MACPyD,IAAQ,MAAC,OAAY,QAAZ,EAAAA,EAAKzC,eAAO,eAAE7U,KAAMsX,EAAK1C,eAAiB0C,EAAKvY,UAE3DuU,OAEImpB,EAAyC,QAArB,EAAA/d,EAAY1D,OAAOwL,UAAE,eAAEoU,YAE3CrU,EAAuC,QAArB,EAAA7H,EAAY1D,OAAOwL,UAAE,eAAED,gBAE/C,OACE,gBAAC,EAAA1K,SAAQ,KACNif,GAAwB,gBAACn6B,EAAA,EAAM,OAAO,QAAO,wBAC9C,gBAAC6iB,EAAA,EAAU,CACT2B,cAAezG,EACfjD,MAAOA,EACPK,WAAY,EACZ4G,YAAahE,EAAY1D,OAAO3P,KAChCqxB,SACuB,QAArB,EAAAhe,EAAY1D,OAAOwL,UAAE,eAAEL,UACrB,gBAACwW,EAAA,EAAe,CACdpkB,YAEoC,KAAhC5K,MAAAA,OAAa,EAAbA,EAAeivB,eACiB,SAAhCjvB,MAAAA,OAAa,EAAbA,EAAeivB,eAGnBzW,SAAUzH,EAAY1D,OAAOwL,GAAGL,WAEhC,KAEN0W,qBACuB,QAArB,EAAAne,EAAY1D,OAAOwL,UAAE,eAAED,sBACnBvkB,EACC86B,IACCpe,EAAYK,cAAc,OAAQ+d,IAG1C/gB,WAAYiJ,EACZrC,SAAU,CACRC,IAAK,WACLjX,MAAO5L,EAAE,iCAGX,gBAAC,KAAI,KACH,gBAAC+Y,EAAA,EAAK,CACJC,KACE,gBAACmT,EAAY,CACXU,cAAeA,EACfpH,YAAa7X,EAAcwpB,OAAO4D,MAClCrV,iBAAkB/X,EAAc+tB,YAAYX,MAC5C5O,YAAaoQ,EACbnQ,aAAcoQ,EACd1mB,WAAYqlB,EACZhtB,cAAeitB,EACf/O,cAAeA,EACfG,4BAA6BqB,EAC7BtB,2BAA4BoP,GAC5BjP,UAAWsP,GACX1P,uBAAyBD,IACvB6O,EAAiB7O,IAEnBI,eACE4P,IACAC,IACA3B,EAEFhO,oBAAqBA,KAGzBzT,sBAAuB8L,EAAa,QAAKhjB,EACzCgX,KACE,gCACG2iB,GACC,gBAACh7B,EAAA,EAAM,OACEZ,EACL,sDACD,SACQ,IAETs8B,GACF,gCACE,gBAACvI,EAAkB,CACjB3N,SAAUA,EACVuU,0BACEA,KAIJ4B,GACF,gBAACjJ,EAAoB,CACnBvO,OACkB,iBAAhBkW,EAAiC,UAAY,QAE/CxH,SAAU6H,EACVjkB,aAAcmkB,GACdjI,oBAAqB,KACnB2H,EAAe,YAEjB1U,gBACwC,QAAtC,EAAqB,QAArB,EAAA7H,EAAY1D,OAAOwL,UAAE,eAAED,uBAAe,SAExCgN,iBAAkB,K,OAGU,QAArB,EAAA7U,EAAY1D,OAAOwL,UAAE,eAAED,iBAG1BlE,EAAQI,KACN,uBAA4B,GAAG0D,MAHjCzH,EAAYqe,gBASlB,gCACE,gBAAC1K,EAAe,CACdlE,mBAAoBqM,EACpBlI,gBAAiBiI,MAAAA,OAAe,EAAfA,EAAiBpD,OAClChR,SAAUA,EACVsU,0BACEA,EAEF36B,iBAAkBymB,EAClB8H,kBAAmBA,GACnBC,WAAY3gB,EAAczO,OAE3BmkB,GACC,gBAAC1iB,EAAA,EAAM,6BAGE,QAAO,MACPZ,EACL,mDAIN,gBAACi9B,EAAA,EAAS,CACR7W,SAAUA,EACVgV,WAAYA,EACZ9O,cAAeA,EACf9D,qBAAsB,KACpB2S,GAAiB,GACjBE,EAAc,KAEhBb,gBAAiBA,EACjB0C,kBAAmBnB,GACnBU,kBAAmBA,EACnB9P,UAAWsP,GACXrB,mBAAoBA,EACpB7nB,cAAeA,IAEhB6nB,GACC,gBAACnG,GAAkB,CACjBC,aAAc8F,MAO1BthB,OAEEmjB,GACI,CACEj7B,KACE,gBAAC,IAAM,aAELjC,KAAM,SAAQ,SACJ,iBACVnB,SAAU49B,GACV17B,QAAS,KACPoiB,EAAQI,KACN,2BAAgC,GAAG0D,QAIvC,gBAAC,MAAW,MACXpmB,EAAE,qCAGPqB,MACE,uBAAKvD,MAAO,CAAEiuB,QAAS,OAAQoG,IAAK,SAEjCuK,KACqB,QAArB,EAAA/d,EAAY1D,OAAOwL,UAAE,eAAED,iBACtB,gBAAC2W,EAAA,EAA0B,CACzBh4B,MAAO,OACPu2B,kBAAmBA,GACnB/c,YAAaA,EACbyH,SAAUA,EACVgX,qBAAsBxB,GACtBza,UAAW,KAET+Z,EAAe,cAGjBwB,EAEF,gBAAC,IAAM,UACK,YACVv9B,KAAM,SACNe,QAAS,KACPg7B,EAAe,aAGhBl7B,EAAE,yCAEH,MAGmB,QAArB,EAAA2e,EAAY1D,OAAOwL,UAAE,eAAED,iBAcvB,gBAAC,IAAM,UACK,UACVrnB,KAAM,SACNe,QAAS,KACPoiB,EAAQI,KACN,uBAA4B,GAAG0D,QAIlCpmB,EAAE,oBAtBL,gBAACm9B,EAAA,EAA0B,CACzBh4B,MAAO,OACPu2B,kBAAmBA,GACnB/c,YAAaA,EACbye,qBAAsBxB,GACtByB,mBAAoB/Z,EACpB8C,SAAUA,EACVjF,UAAW,KACTxC,EAAYqe,kBAqB1BV,GACE,CACEl7B,KACE,gBAAC,IAAM,aAELjC,KAAM,SAAQ,SACJ,iBACVe,QAAS,KACPg7B,EAAe,aAGjB,gBAAC,MAAW,MACXl7B,EAAE,qCAGPqB,MACE,gBAACi8B,EAAA,EAAkB,CACjBlX,SAAUA,EACVmX,eAAgB,EACdxY,OAAAA,EACA0O,SAAAA,EACApc,aAAAA,MAEA6jB,EACa,YAAXnW,EACI,eACA,cAENwW,GAAoB9H,GACpBgI,GAAsBpkB,OAM9B,e,uICzajB,MAAMmmB,EAAyC,EACpDC,OAAAA,EACAC,gBAAAA,EACAC,sBAAAA,EACAC,SAAAA,EACAC,sBAAAA,EACAC,QAAAA,MAEA,MAAM,EAAE99B,IAAM,SAER+9B,EACJD,IACa,qBAAZA,EAAiC,sBAAwBA,GAE5D,OACE,gBAAC,KAAO,KACN,gBAAC,KAAM,KACL,uBAAK1pB,IAAK,IAAW5S,MAAM,QAE7B,gBAAC,KAAI,KACH,gBAAC,MAA2B,CAACiD,MAAO,UAAWtE,KAAM,MACrD,gBAAC,KAAS,KACPH,EAAE,6CAA8C,CAC/C89B,QAASC,KAGb,gBAAC,KAAK,KAAE/9B,EAAE,uCACV,uBAAKlC,MAAO,CAAE0D,MAAO,UACnB,gBAAC,IAAU,CACT8J,KAAM,OACNnM,KAAM,OACNgM,MAAOuyB,EACPryB,SAAWoK,GAAMkoB,EAAsBloB,EAAEtD,OAAOhH,OAChDrN,MAAO,CAAE+mB,UAAW,aAGxB,gBAAC,KAAa,KACZ,gBAAC,IAAM,CACL/mB,MAAO,CAAE0D,MAAO,QAAQ,SACd,UAAS,MACZ,QACPtB,QAASu9B,EACTz/B,SAAU6/B,GAA6C,KAApBH,GAElC19B,EAAE,gBAEL,gBAAC,IAAM,UACK,eACVlC,MAAO,CAAEkgC,eAAgB,YAAa9wB,UAAW,SACjDhN,QAAS09B,GAER59B,EAAE,mBAGP,gBAAC,KAAU,KACT,gBAAC,MAAe,CAACG,KAAM,WACvB,2BACE,gBAAC,IAAK,CACJ8wB,GAAI,MACJjW,QAAS,sCACThL,WAAY,CACVqL,EAAG,mC,kJCvDZ,MAAM4iB,EAA2C,EACtDC,WAAAA,EACA5vB,UAAAA,EACA6vB,kBAAAA,EACAL,QAAAA,EACA9C,MAAAA,EACAptB,cAAAA,M,UAEA,MAAM,EAAE5N,IAAM,SACRo+B,GAAsB,QACzB95B,GAAUA,EAAM85B,sBAGbL,EAAaD,EACbO,EAA6C,QAA9B,EAAwB,QAAxB,EAAAD,EAAoB91B,YAAI,eAAEnJ,YAAI,QAAI,MACvD,OACE,gBAAC,KAAO,KACN,gBAAC,KAAM,KACL,uBAAKiV,IAAK,IAAW5S,MAAM,KAAK6S,IAAI,sBAEtC,gBAAC,KAAI,KACH,gBAAC,KAAK,KACJ,uBAAKD,IAAK8pB,EAAY18B,MAAM,KAAK6S,IAAI,aACrC,0BACGrU,EAAE,qBAAqBq+B,0BAAsC,CAC5DP,QAASC,MAIf,gBAAC,KAAS,KACP/9B,EAAE,qBAAqBq+B,8BAA0C,CAChEP,QAASC,KAGZK,EAAoB91B,KACnB,gBAAC,I,CAECsP,QAAS5X,EAAE,8CACX4L,MAAO5L,EAAE,qBAAqBq+B,gBAC9BtoB,WAAoC,QAAxB,EAAAqoB,EAAoB91B,YAAI,eAAEg2B,KACtCrsB,QAASjS,EACP,qBAAqBq+B,4BACrB,CACEP,QAASC,MAIb,KACJ,gBAAC,KAAM,CACLnwB,cAAeA,EACfgO,iBAAkB,KAAM,IAAA5G,IAAmC,GAC3DyG,SAAU,CAACR,EAAQY,KACjBsiB,EAAkBljB,EAAQY,EAAe,aAG1C,IAEG,uBACE/d,MAAO,CACL0D,MAAO,SAGT,gBAAC,KAAI,KACH,gBAAC,IAAS,CACRw5B,MAAOA,EACP8C,QAASA,EACTS,UAAU,EACVC,mBAAoB,SAKtB,gBAAC,KAAa,KACZ,gBAAC,IAAM,CACL1gC,MAAO,CAAE0D,MAAO,QAAQ,SACd,UACVrC,KAAM,SACNnB,SAAUsQ,GAETtO,EAAE,oD,kHCtGlB,MAAMy+B,EAAqC,EAChDtN,OAAAA,EACAM,cAAAA,KAOE,gBAAC,KAAO,eAAc,SACpB,gBAAC,KAAS,KACPN,EAAO3jB,KAAK0J,GACX,gBAAC,KAAS,CAACxJ,IAAKwJ,EAAMjX,IACpB,gBAAC,KAAQ,KACP,gBAACiL,EAAA,EAAQ,cACKgM,EAAMtL,MAClBR,QAAS8L,EAAM6P,QACfzb,KAAM,YAAY4L,EAAMtL,QACxBP,SAAU,KAdK,IAACkM,EAE5Bka,GAF4Bla,EAcqBL,GAZ9BjX,IADFsX,EAAKwP,aAgBd,gBAAC,KAAQ,CAACjpB,MAAO,CAAE4gC,WAAY,MAAQxnB,EAAMtL,OAC7C,gBAAC,KAAQ,KAAEsL,EAAMynB,gB,iFCbtB,MAAMC,EAA+B,EAC1CV,WAAAA,EACAJ,QAAAA,EACA9C,MAAAA,EACA6D,cAAAA,EACAR,aAAAA,M,MAEA,MAAM,EAAEr+B,IAAM,EAAAuY,EAAA,KACR6lB,GAAsB,QACzB95B,GAAUA,EAAM85B,uBAEZv2B,EAAMi3B,IAAW,IAAAr7B,UAAS,GAC3B6e,GAAU,WAEhB,IAAAxe,YAAU,KACR,MAAM4U,EAAYC,YAAW,KAChB,EAAP9Q,GACFi3B,GAASC,GAAcA,EAAY,MAEpC,KAEH,MAAO,KACLnmB,aAAaF,MAEd,CAAC7Q,IACJ,MAAMm3B,EACK,IAATn3B,EACI,iCACS,IAATA,EACA,iCACA,sCAGAo3B,EACK,IAATp3B,EAAa7H,EAAEg/B,EAAa,CAAElB,QAAAA,IAAa99B,EAAEg/B,GAE/C,OACE,gBAAC,KAAI,KACH,gBAAC,KAAK,KACJ,uBAAK5qB,IAAK8pB,EAAY18B,MAAM,OAC5B,0BAAKy9B,IAEG,IAATp3B,GACC,gCACE,gBAAC,KAAS,KACP7H,EAAE,qBAAqBq+B,4BAE1B,gBAAC1mB,EAAA,EAAmB,CAClB/L,MAAO5L,EAAE,qBAAqBq+B,gBAE9BzmB,QAAS5X,EAAE,8CACX+V,WAAoC,QAAxB,EAAAqoB,EAAoB91B,YAAI,eAAEg2B,KACtCrsB,QAASjS,EACP,qBAAqBq+B,4BACrB,CACEP,QAASA,OAMnB,uBAAKhgC,MAAO,CAAE6E,SAAU,WAAYpB,OAAQ,gBAC1C,gBAACX,EAAA,EAAM,OACE,QAAO,MACA,EAAPiH,EAAW7H,EAAE,kBAAoB,GAAE,SACjC,KAGH,IAAT6H,GACC,gBAAC,KAAa,KACZ,gBAAC,IAAM,CACL/J,MAAO,CAAE0D,MAAO,QAAQ,SACd,UAAS,MACZ,QACPtB,QAAS,KACP4+B,EAAQ,KAGT9+B,EAAE,0CAA2C,CAC5C89B,QAASA,KAGb,uBAAKhgC,MAAO,CAAEoP,UAAW,SACvB,gBAAC,IAAM,CACLhN,QAAS,IACPoiB,EAAQI,KACN,oCAAyC,CACvCsY,MAAAA,EACA6D,cAAAA,KAEH,SAEO,kBAET,e,eCxER,MAAMK,EAAyC,EACpDhB,WAAAA,EACAiB,oBAAAA,EACAC,WAAAA,EACAC,cAAAA,GAAgB,EAChBC,SAAAA,EACAC,mBAAAA,EACApO,OAAAA,EACAqO,cAAAA,EACAC,aAAAA,EACAC,sBAAAA,EACA5B,QAAAA,EACA9C,MAAAA,EACA6D,cAAAA,EACAR,aAAAA,MAEA,MAAM,EAAEr+B,IAAM,EAAAuY,EAAA,KACRonB,GAAW,IAAAj5B,QAAuB,MAClCuZ,GAAW,UACV2f,EAASC,GAAc,WAAeR,IACtCS,EAAWC,IAAgB,IAAAt8B,UAChC0tB,EAAO1D,OAAOvW,GAAUA,EAAM6P,WAE1BiZ,GAAa,IAAAt5B,QAAO,MAsCpBu5B,EAAsBV,GAAsBA,EAAqB,GAEvE,IAAAz7B,YAAU,KACJ27B,GAAgBD,GAAiBS,GACnCr8B,OAAOs8B,SAAS,EAAG/4B,SAAS8R,KAAKknB,gBAElC,CAACV,EAAcD,EAAeS,IAsBjC,MAAMlC,EAAaD,EAEnB,OACE,gBAAC,KAAO,KACN,gBAAC,KAAM,KACL,uBAAK1pB,IAAK,IAAW5S,MAAM,QAE5B29B,EACC,gBAACP,EAAW,CACV5D,MAAOA,EACP6D,cAAeA,EACfX,WAAYA,EACZJ,QAASC,EACTM,aAAcA,IAGhB,gBAAC,KAAI,KACH,gBAAC,KAAK,KACJ,uBAAKjqB,IAAK8pB,EAAY18B,MAAM,OAC5B,0BACGxB,EAAE,2CAA4C,CAC7CosB,YAAa+E,EAAO5d,OACpBuqB,QAASC,MAIf,gBAAC,KAAS,KACP/9B,EAAE,iDAEL,gBAAC,KAAW,CAACq/B,cAAeO,EAAS50B,IAAK20B,GACxC,gBAAC,KAAc,KACb,uBACE7hC,MAAO,CACLiuB,QAAS,OACTqU,eAAgB,SAChB99B,QAAS,aAGX,gBAAC4I,EAAA,EAAQ,CACPE,QAAS00B,EACTx0B,KAAM,WACND,SAzGc,KAC5B,MAAMg1B,GAAqBP,EAC3BC,EAAaM,GAEb,MAAMC,EAAgBnP,EAAO3jB,KAAK0J,GACzB,OAAP,wBAAYA,GAAK,CAAE6P,QAASsZ,MAG9BpgB,GACE,QAA6B,CAC3B3X,KAAM,CAAEi4B,iBAAkBD,UAkGpB,kCACA,sCAGJ,gBAAC,KAAS,KACR,gBAAC7B,EAAiB,CAChBtN,OAAQA,EACRM,cApGc,CAACnB,EAAiBvJ,KAC1C,MAAMuZ,EAAgBnP,EAAO3jB,KAAK0J,GAChCA,EAAMjX,KAAOqwB,EAAU,OAAD,wBAAMpZ,GAAK,CAAE6P,QAASA,IAAY7P,IAG1D+I,GACE,QAA6B,CAC3B3X,KAAM,CAAEi4B,iBAAkBD,MAI9B,MAAME,EAAkBF,EAAc7S,OAAOvW,GAAUA,EAAM6P,UAC7DgZ,EAAaS,MA0FJf,GAAgBD,GAAiBS,EAChC,gBAAC,KAAc,CAACj1B,IAAKg1B,GAClBhgC,EAAE,wCAAyC,CAC1Cy/B,aAAAA,EACAD,cAAAA,EACA9oB,OAAQ,YAGV,MAEN,gBAAC,KAAa,KACZ,gBAAC,KAAa,KACZ,gBAAC,IAAM,UACKupB,EAAsB,SAAW,YAC3C//B,QAASo/B,GAGT,4BACE,4BAAOt/B,EAzGA,CACrB,qCACA,4CACA,iDAsGsCu/B,OAI5B,gBAAC,IAAM,UACK,UACVr/B,QACE+/B,EACI,IAAMP,EAAsB,GAC5BN,GAIFp/B,EADHigC,EACK,qCACA,+C,8PCzKf,MAAMQ,EAA0C,EACrDzF,MAAAA,EACA5U,SAAAA,EACA3K,SAAAA,EACA7N,cAAAA,EACA0V,YAAAA,EACAod,WAAAA,EACAC,WAAAA,EACA7C,QAAAA,EACAe,cAAAA,EACA+B,kCAAAA,MAEA,MAAM,EAAE5gC,IAAM,EAAAuY,EAAA,KACR0H,GAAW,UAIVse,EAAUsC,IAAe,IAAAp9B,UAASlF,QAAQoiC,KAC1CG,EAAcC,IAAmB,IAAAt9B,UACtCo7B,EAAgB,SAAW,aAEtBmC,EAAUC,IAAe,IAAAx9B,WAAS,GAKnC+6B,EAAsBzZ,IAC1Bkc,EAAYlc,KAGNzc,KAAM44B,IAAqB,OACjCrC,EACAzY,IAIAvF,OAAQsgB,IAIN,UAEJ,IAAAr9B,YAAU,KACJ88B,GACFC,GAAY,KAEb,CAACD,IAEJ,MAAMnB,EAAeyB,MAAAA,OAAgB,EAAhBA,EAAkB54B,KAAKm3B,aACtCD,EAAgB0B,MAAAA,OAAgB,EAAhBA,EAAkB54B,KAAKk3B,cACvC4B,EAAoB7iC,QAAQkhC,GAElC,OACE,gBAAC,KAAM,CACL7xB,cAAeA,EACfgO,iBAAkB,KAAM,IAAA5G,GAAmCupB,GAC3D9iB,SAAU,CAACR,EAAQY,KAEZ0iB,IACH,QAAW,CACT52B,UAAW,mBACXC,QAAS,OACTC,KAAM,cACNC,OAAQ,CACNkzB,MAAOA,EACP8C,QAASA,EACTe,cAAeA,EACfnB,gBAAiB9vB,MAAAA,OAAa,EAAbA,EAAetC,KAChC8a,SAAAA,EACAib,MAAOX,MAMRnC,GAAYmC,GACf7kB,EAAcylB,eAAc,QAC5BH,EACE,CAAEnG,MAAAA,EAAOxyB,YAAayS,EAAOzS,aAC7B,CACE2Y,UAAY7Y,I,QACV,MAAMi5B,EAAwB,QAAV,EAAAj5B,MAAAA,OAAI,EAAJA,EAAMA,YAAI,eAAEi5B,YAC1BC,EAAqB,QAAV,EAAAl5B,MAAAA,OAAI,EAAJA,EAAMA,YAAI,eAAEk5B,UAC7B,QAAe,CACbh5B,YAAayS,EAAOzS,YACpB+4B,YAAAA,EACAvG,MAAAA,EACA6D,cAAAA,EACA2C,SAAAA,KAGJC,QAAUjhC,IACRyf,GACE,QAAU,CACRtE,MAAO,QACPmN,SAAU,EAAC,OAActoB,GAAOiH,SAChChD,MAAO,kBAYd85B,GAKLtjB,EAAO4jB,cAAgBA,OAGvBpjB,EAASR,EAAQY,EAAeilB,KAP9BD,GAAY,QACZhlB,EAAcylB,eAAc,OAS9B3iB,GAEE,gBAAC,KAAW,KACTiiB,IAAsCrC,EACrC,uBAAKh/B,UAAW,QACd,gBAACwB,EAAA,EAAO,SAAU,SACf6/B,IAGH,KACJ,gBAAC,KAAI,KACH,gBAAC,KAAO,KACN,uBAAK9iC,MAAO,CAAE4jC,KAAM,EAAGp/B,QAAS,WAC9B,gBAAC26B,EAAA,EAAS,CACRjC,MAAOA,EACP8C,QAASA,EACTS,SAAUA,EACVC,mBAAoBA,IAErBK,GAAiBuC,GAAqB7C,GACrC,gBAAC79B,EAAA,EAAa,SACH,CACPF,MAAOR,EAAE,wCAAyC,CAChDy/B,aAAAA,EACAD,cAAAA,EACA9oB,OAAQ,iBAOhB6nB,IAAamC,GACb,gBAACiB,EAAA,EAAW,CACV3G,MAAOA,EACP6D,cAAeA,EACfnB,gBAAiB/e,EAAY1D,OAAO3P,KACpC8a,SAAUA,KAIhB,gBAAC,KAAmB,KACjByY,GAAiBuC,GAAqB7C,GACrC,gBAAC,IAAiB,KAChB,gBAACqD,EAAA,EAAY,CACX9D,QAASA,EACTrvB,WAAY6U,GAAe3E,EAAY2G,aACvChX,UACGgV,GAAgC,aAAjBwd,GACfniB,EAAY2G,cACM,aAAjBwb,EAEJe,WAAYtD,EACZ7nB,OAAQ,WACRorB,gBAAiB,KACff,EAAgB,YAChBpiB,EAAYqe,gBAGhB,gBAAC4E,EAAA,EAAY,CACX9D,QAASA,EACTrvB,WAAY6U,GAAe3E,EAAY2G,aACvChX,UACGgV,GAAgC,WAAjBwd,GACfniB,EAAY2G,cAAiC,WAAjBwb,EAE/Be,WAAYtD,EACZ7nB,OAAQ,SACRorB,gBAAiB,KACff,EAAgB,UAChBpiB,EAAYqe,kBAKlBoE,GAAqB7C,EACrB,gBAAC,KAAmB,KAClB,gBAACqD,EAAA,EAAY,CACX9D,QAASA,EACTrvB,WAAY6U,GAAe3E,EAAY2G,aACvChX,UAAWgV,GAAe3E,EAAY2G,aACtCuc,WAAYtD,KAGbA,EAWD,KAVF,gBAAC,KAAmB,KAClB,gBAACqD,EAAA,EAAY,CACX9D,QAASA,EACTrvB,WACE6U,GAAe3E,EAAY2G,cAAgB0b,EAE7C1yB,UAAWgV,GAAe3E,EAAY2G,aACtCuc,WAAYtD,KAKlB,gBAAC,IAAM,CACLp/B,KAAM,SAAQ,SACJ,iBAAgB,MACnB,WACPnB,SAAUslB,GAAe3E,EAAY2G,aACrCplB,QAAS,KAGHq+B,EACFsC,GAAY,GAEZj9B,OAAOyG,UAIVrK,EAAE,wB,0BClPd,MAAM+hC,EAAiD,EAC5D/G,MAAAA,EACA5U,SAAAA,EACA0X,QAAAA,EACAI,WAAAA,EACAziB,SAAAA,EACA7N,cAAAA,EACA0V,YAAAA,EACAod,WAAAA,EACAC,WAAAA,EACA9B,cAAAA,EACA+B,kCAAAA,MAEA,MAAM,EAAE5gC,IAAM,EAAAuY,EAAA,MAER,QAAE+G,EAAO,OAAE0iB,EAAM,WAAEC,EAAU,KAAEC,EAAI,KAAEC,EAAI,MAAEC,EAAK,SAAEC,GACtD,KAEIC,EAA2B5B,GAAcC,EAE/C,OACE,gBAACrhB,EAAO,KACN,gBAAC0iB,EAAM,KACL,uBAAK5tB,IAAK,IAAW5S,MAAM,QAG7B,gBAAC0gC,EAAI,KACFI,EACC,gCACE,uBAAKxkC,MAAO,CAAEyD,OAAQ,SAAUsjB,UAAW,WACzC,gBAAC,MAAoB,CAAC1kB,KAAM,KAAMsE,MAAM,YACxC,gBAAC29B,EAAK,KACHpiC,EAAE,mCAAoC,CACrC89B,QAAAA,OAMR,gCACE,gBAACqE,EAAI,CAAC/tB,IAAK8pB,EAAY7pB,IAAKypB,IAC5B,gBAACsE,EAAK,KACHpiC,EAAE,0CAA2C,CAC5C89B,QAAAA,KAGJ,gBAACuE,EAAQ,KACNriC,EAAE,6CAA8C,CAC/C89B,QAAAA,MAMR,gBAAC2C,EAAqB,CACpBzF,MAAOA,EACP8C,QAASA,EACTlwB,cAAeA,EACf6N,SAAUA,EACV6H,YAAaA,EACbod,WAAYA,EACZC,WAAYA,EACZ9B,cAAeA,EACfzY,SAAUA,EACVwa,kCAAmCA,IAGrC,gBAACqB,EAAU,KACT,gBAAC,MAAe,CAAC9hC,KAAM,WACvB,2BACE,gBAAC6wB,EAAA,EAAK,CACJC,GAAI,MACJjW,QAAS,sCACThL,WAAY,CACVqL,EAAG,mC,uGChGnB,MAAMknB,EAA+C,CACnD,EAAG,GACH,EAAG,GACH,EAAG,KAGQ3D,EAA+B,EAC1C4D,gBAAAA,EACApc,SAAAA,EACA4Y,YAAAA,MAEA,MAAMtjB,GAAQ,QAAc8mB,EAAiBpc,GACvCnB,GAAa,SACnB,OACE,gBAAC,IAAU,CACTvJ,MAAOuJ,OAAahjB,EAAYyZ,EAChCK,WAAYymB,EACZxmB,WAAYiJ,GAEZ,gBAAC,IAAK,CACJ9L,sBACE8L,GAAcud,EACVD,EAAqBC,IAAoB,OACzCvgC,EAENgX,KACE,uBACEnb,MAAO,CACL6E,SAAU,WACVR,OAAQ,MAGV,gBAAC,IAAM,kBAAgB,QAAO,MAAS68B,U,6HCzB5C,MAAMyD,EAAuC,EAClDv/B,OAAAA,EACAC,aAAAA,EACAu/B,oBAAAA,EACAC,SAAAA,MAEA,MAAM,EAAE3iC,IAAM,SAEd,OACE,gBAAC,IAAK,CACJsD,QAAM,EACNP,eAAe,EACfG,OAAQA,EACRC,aAAcA,EACdC,iBAAe,GAEf,gBAAC,KAAY,KACVs/B,EACC,gCACE,gBAAC,KAAW,K,MACC1iC,EAAE,sC,OAEf,gBAAC,KAAS,KACR,yBACGA,EAAE,yCAA0C,CAC3C2iC,SAAUA,IACR,I,MAGN,yBAAI3iC,EAAE,2CACN,gBAAC,IAAY,MACb,yBAAIA,EAAE,2CACN,yBACE,gBAAC,IAAK,CACJgb,QAAS,yCACThL,WAAY,CACVqL,EAAG,qBAAGnJ,KAAM,4B,MAKlB,yBAAIlS,EAAE,0C,SAIV,gCACE,gBAAC,KAAW,K,MACCA,EAAE,qC,OAEf,gBAAC,KAAS,KACR,yBAAIA,EAAE,yC,OACN,yBAAIA,EAAE,0CACN,gBAAC,IAAY,MACb,yBAAIA,EAAE,0CACN,yBACE,gBAAC,IAAK,CACJgb,QAAS,wCACThL,WAAY,CACVqL,EAAG,qBAAGnJ,KAAM,4B,MAKlB,yBAAIlS,EAAE,yC,SAKZ,gBAAC,KAAW,KACV,gBAAC,IAAM,CACLE,QAASiD,EAAY,UAErBhE,KAAM,SAAQ,SACJ,WAAS,gC,kJC1ExB,MAAMyjC,EAA6B,EACxCvrB,aAAAA,EACAmrB,gBAAAA,EACApc,SAAAA,EACAyc,WAAAA,EACA76B,UAAAA,MAEA,MAAM0T,GAAQ,QAAc8mB,EAAiBpc,IACvC,EAAEpmB,IAAM,SACRsiB,GAAU,UACV2C,GAAa,SAkBnB,OAhBA,IAAAnhB,YAAU,MACR,QAAW,CACT6D,UAAW,qBACXC,QAAS,OACTC,KAAM,OACNC,OAAQ,CACNse,SAAUA,EAAWV,SAAS,GAAGU,IAAY,SAAMnkB,EACnD8F,OAAQ,CACNC,UAAWA,GAAa66B,EACxB56B,iBAAkBoP,IAGtBjP,qBAAqB,MAEtB,CAACge,IAGF,gBAAC,IAAU,CACT1K,MAAOA,EACPK,WAAYymB,EACZnd,UAAWrlB,EAAE,uBACbgc,WAAYiJ,EACZrC,SAAU,CACRC,IAAK,WACLjX,MAAO,SAGT,gBAAC,IAAO,SAAU,SAAUyL,GAGZ,MAAfwrB,GAAsBzc,EACrB,gBAAC,IAAM,UACK,UACVlmB,QAAS,KACY,MAAf2iC,EAKAzc,GACF9D,EAAQI,KAAK,2BAAgC,GAAG0D,MALhDxiB,OAAO8B,SAASwM,KAAO,wCAS1BlS,EAAE,kBAEH,Q,iHC/DV,MAAM8iC,EAAiB,CAACthC,EAAgBW,KAAmC,CACzEX,MAAOA,GAAS,OAChBW,OAAQA,GAAU,QAClBy3B,aAAc,IACd1sB,UAAW,MAMA61B,EAAoC,EAC/CvhC,MAAAA,EACAW,OAAAA,EACA6gC,WAAAA,MAGA,KADsBxhC,GAASW,KACR6gC,EAIrB,OAAO,KAGT,MAAMC,EAAeH,EAAethC,EAAOW,GAErC+gC,EAAgBF,EAlBA,CAACA,GACvB,IAAqBA,IAAeF,IAiBDK,CAAgBH,GAAcC,EAEjE,OACE,gBAAC,IAAc,CACbzhC,MAAO0hC,EAAc1hC,MACrBW,OAAQ+gC,EAAc/gC,OACtBy3B,aAAcsJ,EAActJ,aAC5B1sB,UAAWg2B,EAAch2B,a,icCHxB,MAAMk2B,EAAuC,EAClDpI,MAAAA,EACA77B,KAAAA,EACAkkC,YAAAA,EAEAC,UAAAA,EACAC,yBAAAA,M,YAEA,MAAOC,EAAWC,IAAgB,IAAAhgC,UAAiB,IAEnD,IAAAK,YAAU,KACY,KAAhBu/B,EACFI,EAAazI,GACmB,iBAAhBqI,GAChBI,EAAaJ,KAEd,CAACA,EAAarI,IAEjB,MAAM,UACJ1sB,EAAS,KACThG,EACAiW,QAASmlB,IACP,IAAAC,GAA4BH,GAE1BvjB,GAAW,UACX2jB,GAAkB,SACrBt/B,GAAqBA,EAAMu/B,YAAYhF,iBAEpC,OAAE5jB,EAAM,cAAE+D,IAAkB,WAG3B8kB,EAAoBC,EAAmBC,IAC5C,QAAgD,GAAG7kC,mBAC/C8kC,EAAwBH,EAAmB34B,OAE3C,gBAAE+4B,IAAoB,EAAAC,EAAA,GAAyBhlC,IAG7CmJ,KAAM87B,IAAY,UAElBC,YAAaC,EAAsBh2B,UAAWi2B,IACpD,SAEIC,GAAeJ,GAAW,IAAIrvB,MAAMgY,GAAQA,EAAI9sB,KAAO+6B,IACvDyJ,EAAqBD,MAAAA,OAAW,EAAXA,EAAarX,aAClCuX,EAAsBF,MAAAA,OAAW,EAAXA,EAAaG,SACnCC,EAAgBJ,MAAAA,OAAW,EAAXA,EAAavkC,GAE7B2N,GAAgCtF,GAAQ,IAAIkF,KAAKq3B,IAAM,CAC3Dj5B,MAAOi5B,EAAEv5B,KACTH,MAAO,GAAG05B,EAAE5kC,KACZ6kC,QAASL,OAIJM,EAAqBC,IAA0B,IAAAvhC,UACpD,OAEKwhC,EAAcC,KAAmB,IAAAzhC,UAAwB,MAC1D0hC,GAAc5mC,QAAQ0mC,IAAiBA,EAAa16B,SAEnD66B,GAA0BC,KAA+B,IAAA5hC,YAO1D2iB,GAAoB,QAAT,EAAAnL,EAAOwL,UAAE,eAAEL,SACtBkf,GAAoCC,GAAiC,OAAD,6B,QAExE,IAAIC,EAKJ,GANAH,QAA4BpjC,GAOF,aAAxByiC,GACAE,KAAkB3pB,MAAAA,OAAM,EAANA,EAAQmc,OAAO4D,SAChCuK,EACD,CACA,MAAMnT,EAA6C,CACjD9mB,KAAM,GACN0vB,MAAOnP,OAAOmP,GACdxyB,YAAa,IAETi9B,QAA+BnB,EAAqB,CAAElS,YAAAA,IAC5DoT,EAAmB3Z,OAAgD,QAAzC,EAA4B,QAA5B,EAAA4Z,MAAAA,OAAsB,EAAtBA,EAAwBn9B,YAAI,eAAEo9B,mBAAW,eAAEzlC,IAGvE,MAAM0lC,EACoB,aAAxBjB,GACAE,KAAkB3pB,MAAAA,OAAM,EAANA,EAAQmc,OAAO4D,QAChCuK,EAK2B,aAAxBb,GACAa,GACAX,KAAkB3pB,MAAAA,OAAM,EAANA,EAAQmc,OAAO4D,OACjC,oCAAyC,CACvCA,MAAO,GAAGA,IACV6D,cAAe,GAAG0G,MAEpBA,GAAuBnf,GACvB,mDAAwD,CACtDyY,cAAe,GAAG0G,IAClBvK,MAAO,GAAGwI,IACVpd,SAAU,GAAGA,OAEfmf,EACA,uCAA4C,CAC1C1G,cAAe,GAAG0G,IAClBvK,MAAO,GAAGwI,MAEZ,mCAAwC,CACtCxI,MAAO,GAAGwI,MAvBZ,gCAAqC,CACnCxI,MAAO,GAAGA,IACV6D,cAAe,GAAG2G,MAuB1BR,EAAuBW,OAGzB,IAAA7hC,YAAU,KACgB,OAApB8/B,GAA4BA,IAAoBK,IAClDqB,GAA2BrB,GAE3BhkB,EAAS,CAAE9gB,KAAM,2CAElB,CAACykC,IAEJ,MAAM51B,GAAeo3B,GACjB,CACEx5B,MAAOw5B,GAAyB95B,KAChCH,MAAOi6B,GAAyBnlC,GAChC6kC,QAASL,GAEXR,EACAr2B,EAAcmH,MAAM8vB,GAAMA,EAAE15B,QAAU,GAAG84B,WACzChiC,GAEJ,IAAA6B,YAAU,KACRkb,EACE,MAAM7f,6BACN6O,MAAAA,QAAY,EAAZA,GAAcpC,QAAS,MAExB,CAACoC,MAAAA,QAAY,EAAZA,GAAcpC,QAElB,MAAMyL,GAAe0sB,EAAkBvjC,MACjColC,GAAY7B,EAAkBzsB,QAC9BuuB,GACJ5qB,EAAOwL,IAAMxL,EAAOwL,GAAGtnB,KAAwB,QAAf,EAAA8b,EAAOwL,GAAGtnB,UAAK,eAAE0mC,wBAC7CC,GACH7qB,EAAOwL,IAAMxL,EAAOwL,GAAGtnB,IAAS8b,EAAOwL,GAAGtnB,GAAO2mC,cAClDxC,GACAiB,GAEKwB,GAAUC,KAAe,IAAAviC,UAC9B,MAqBF,OAjBA,IAAAK,YAAU,KAERmiC,EAAA,6BACGp9B,MAAMq9B,IACLF,GAAY,CACVv9B,SAAUy9B,EAAUz9B,UAAY,GAChCC,QAASw9B,EAAUC,kBAAkBz9B,QAAQ09B,SAC7Cz9B,YAAau9B,EAAUC,kBAAkBx9B,YAAYy9B,SACrDx9B,aAAcs9B,EAAUC,kBAAkBv9B,aAAay9B,MACvDC,SAAU1iC,OAAO2iC,OAAS3iC,OAAOzC,SAGpCoG,OAAOkO,UAGT,IAGD,2BACGnH,IAAcN,GACb,gBAAC+0B,EAAQ,CAACC,WAAY,iBAEtB,uBAAKllC,MAAO,CAAE6E,SAAU,aACrB2L,GAAaw3B,GAAe,gBAACllC,EAAA,EAAM,yBAAsB,KAC1D,gBAAC+M,EAAA,EAAgB,CACfI,YAAa,WAAWy2B,MAAAA,OAAW,EAAXA,EAAal5B,OACrCsC,cAAeA,EACfI,aAAcA,GACdN,IAAKM,MAAAA,QAAY,EAAZA,GAAcpC,MACnB0C,UAAW62B,GACX12B,WAAYq3B,KAAyB,QAAT,EAAA7qB,EAAOwL,UAAE,eAAED,iBACvC3Y,aAAa,EACbC,SAAW4C,IACT,GAAIoa,MAAMC,QAAQra,GAChB,OAEF,MAAMG,EAAWH,EACbgV,SAAS,GAAGhV,EAAcvF,QAAS,SACnClJ,EACJ+hC,EAAqBtsB,SAAS7G,IAEhChC,eAAgB,CACdjD,MAAO,2BACP1L,QAAS,IAAMolC,MAEjBv4B,OAAQ,KACNi3B,EAAqBxsB,YAAW,IAElCtJ,qBAAsB,IAAG,QAEvB03B,IAAavuB,GACT,CACE7W,MAAO6W,SAETpV,MAMXgiC,GAA0BkB,KAAyB,QAAT,EAAAlqB,EAAOwL,UAAE,eAAED,iBAmDlD,KAlDF,uBACE1oB,MAAO,CACLiuB,QAAS,OACTya,oBAAqB,WACrBrU,IAAK,OAGLlpB,QAAS68B,GAAe,EAAI,EAC5BW,cAAeX,GAAe,YAAS7jC,IAGxC4jC,GACC,gBAACnlC,EAAA,EAAa,SACH,CACPF,MACE,gBAACwwB,EAAA,EAAK,CACJC,GAAI,MACJjW,QACE,oDAEFhL,WAAY,CACV02B,KACE,wBACE5oC,MAAO,CACLkgC,eAAgB,YAChBlZ,OAAQ,WAEV5kB,QAAS,KACPolC,GAA2BrB,YAU3C,4BAEF,uBAAKnmC,MAAO,CAAE+mB,UAAW,UACvB,gBAAC9f,EAAA,EAAiB,CAChB7E,QAAS,KACPolC,GAA2BrB,KAG7B,gBAAC,MAAM,M,WAMdkB,IACC,gBAAC,IAAqB,K,wCAEpB,wBACEjlC,QAAS,IAAM+kC,EAAc76B,QAC7BtM,MAAO,CACL4gC,WAAY,IACZV,eAAgB,YAChBlZ,OAAQ,YACT,uBAONigB,EACC,gBAAC17B,EAAA,EAAoB,CACnBM,aAAao8B,MAAAA,QAAQ,EAARA,GAAUO,UAAWP,GAAW,KAC7Cz8B,UAAWy7B,EACXn7B,UAAWzK,EACXoK,SAAS,UACTC,UAAU,UACVC,YAAcI,IACZq7B,GAAgBr7B,IAElBH,aAAeiuB,IACb,GAAIA,EAAS,CACX,MAAM6N,EAAoB7N,EAAgBkH,cACpC8H,EAAsBhP,EAAgB+F,gBAGxC8H,GAAoBmB,IACtBtB,GAA4B,CAC1BplC,GAAIulC,EACJl6B,KAAMq7B,IAERpD,IACAS,EAAqBtsB,SAAS8tB,IAIhC9B,IAIE8B,GACAA,IAAqBvB,GAErBC,IAIJc,EAAuB,SAGzB,O,sGClVH,MAAM4B,EAA0D,EACrEznC,KAAAA,EACA0nC,mBAAAA,EAEAC,iBAAAA,MAEA,MAAM,EAAE9mC,IAAM,EAAAuY,EAAA,KACRwuB,GAA8B,IAAArgC,WAC7BsgC,EAAUC,IAAe,IAAAxjC,WAAS,IAGnC,OACJwX,EAAM,cACN+D,EAAa,cACbsiB,EAAa,gBACb4F,EAAe,aACfC,IACE,UACElD,EAAwBhpB,EAAO9b,GAAM0/B,cACrC+F,EAAgB3pB,EAAO9b,GAAM67B,MAC7BoM,EAAmB,GAAGjoC,aAGtBkoC,EAAwBpsB,EAAO9b,GAAMkoB,UAAY,IAIrD/e,KAAMg/B,EACNzmB,OAAQ0mB,EACRj5B,UAAWk5B,EACXhnC,MAAOinC,IACL,UACG7T,EAAgB8T,IAAqB,IAAAjkC,UAC1C4jC,IAwBI,eAAEM,EAAc,gBAAEC,IAAoB,EAAAC,EAAA,GAAc,CACxD1oC,KAAAA,EACA2oC,UAAU,KAEZ,IAAAhkC,YAAU,KACR8jC,IACIH,GACFE,EAAeF,KAEhB,CAACA,KAGJ,IAAA3jC,YAAU,K,MACR,MAAMikC,EAC6B,QAAjC,EAAAT,MAAAA,OAA2B,EAA3BA,EAA6Bh/B,YAAI,eAAE0/B,eACrC,GAAID,EAAqB,CACvBL,EAAkBK,GAOlB,MACME,GAA0B,QAC9BF,EAFuB9sB,EAAO9b,GAAMkoB,UAAY,IAUlD0f,EAA4BpgC,SAAU,EACtCqY,EAAcooB,EAAkBa,GAEhCjpB,EAAc,MAAM7f,YAAgB,IAEpCwZ,YAAW,KACTouB,EAA4BpgC,SAAU,IACrC,QAEJ,CAAC2gC,KAGJ,IAAAxjC,YAAU,KACHmgC,KACE6C,MAAAA,OAAgB,EAAhBA,EAAkBvzB,SASrBm0B,EAAkBZ,GAClB9nB,EAAcooB,EAAkBN,GAChCK,IACAD,EAAgBE,GAAkB,GAClCQ,MAXAF,EAAkB,IAClB1oB,EAAcooB,EAAkB,IAChCD,IACAD,EAAgBE,GAAkB,GAClCQ,QAUH,CAAC3D,KAKJ,IAAAngC,YAAU,KAzF2B,I,EA+FjCmgC,GACAW,GACAiC,IACCW,GA9FHD,EAA4B,CAC1BW,wBAAyB,CACvBrJ,cA8F2BoF,EA7F3BjJ,MA6FkD4J,EA5FlDzlC,KAAAA,EACAkoB,SAAUggB,EAAsB75B,KAAK26B,IAAY,CAC/Cz6B,IAAKy6B,EAAQz6B,IACbvC,MAAOg9B,EAAQh9B,OAAS,OAE1Bi9B,QACGntB,EAAOwL,IAAMxL,EAAOwL,GAAGtnB,IAAS8b,EAAOwL,GAAGtnB,GAAOipC,SAAY,GAChEhiB,SAAmB,QAAT,EAAAnL,EAAOwL,UAAE,eAAEL,cAuFxB,CACD6d,EAfAhpB,EAAOwL,IAAMxL,EAAOwL,GAAGtnB,IAAS8b,EAAOwL,GAAGtnB,GAAOkpC,sBAkBjDxB,IAGF,MAAM,gBAAE3C,IAAoB,EAAAC,EAAA,GAAyBhlC,IACrD,IAAA2E,YAAU,MACHkjC,GAAY/C,IACfgD,GAAY,GACZ/C,OAED,CAACmD,EAAuBL,EAAU/C,KAErC,IAAAngC,YAAU,KACRmjC,GAAY,KACX,CAAChD,KAGJ,IAAAngC,YAAU,KACRw9B,EAAckG,GACdxoB,EAAc,MAAM7f,iBAAqBqoC,KACxC,CAACA,IAEJ,MAAMc,EAAe/pC,QACnB0lC,GAAyB4C,GAAsBjT,EAAergB,QAG1Dg1B,EAAyC3U,EAAepmB,KAC3D0J,IAAU,CACTjX,GAAIiX,EAAMjX,GACV2L,MAAOsL,EAAMtL,MACb7M,SAAUmY,EAAMnY,WAAY,EAC5BI,KAAM+X,EAAM/X,KACZqpC,OAAQtxB,EAAMsxB,WAQlB,OAJA,IAAA1kC,YAAU,KACRkb,EAAc,MAAM7f,6BAAiCopC,KACpD,CAAC3U,IAGF,gBAAC,EAAA9X,SAAQ,KACNwsB,GACC,0BAAKtoC,EAAE,gDAER4zB,EAAepmB,KAAI,CAAC0J,EAAOmK,IACnBnK,EAAMuxB,KAAO,KAClB,gBAAC,EAAA3sB,SAAQ,CAACpO,IAAKwJ,EAAMjX,IACnB,2BACG,cAAuCiX,EAAM/X,MAC5C,gBAACupC,EAAA,EAAgC,CAC/BC,YAAazxB,EACb/X,KAAMA,EACNgqB,MAAO9H,EACP/S,UAAWk5B,IAEX,cAA+BtwB,EAAM/X,MACvC,gBAACypC,EAAA,EAAY,CACXD,YAAazxB,EACb/X,KAAMA,EACNgqB,MAAO9H,EACP/S,UAAWk5B,EACXqB,cAAepB,IAEf,cAA8BvwB,EAAM/X,MACtC,gBAAC2pC,EAAA,EAAuB,CACtBH,YAAazxB,EACb/X,KAAMA,EACNgqB,MAAO9H,EACP/S,UAAWk5B,EACXqB,cAAepB,IAEf,cAAwBvwB,EAAM/X,MAChC,gBAAC4pC,EAAA,EAAiB,CAChBJ,YAAazxB,EACb/X,KAAMA,EACNgqB,MAAO9H,EACP/S,UAAWk5B,IAEX,cAAyBtwB,EAAM/X,MACjC,gBAAC6pC,EAAA,EAAkB,CACjBL,YAAazxB,EACb/X,KAAMA,EACNgqB,MAAO9H,EACP/S,UAAWk5B,IAEX,SAOXA,EACC,2BACE,gBAACzE,EAAQ,CAACC,WAAY,UACtB,gBAACD,EAAQ,CAACC,WAAY,WAEtB,O,cC7PH,MAAMiG,EAAkD,EAC7D9pC,KAAAA,EACA+pC,wBAAAA,EACApC,iBAAAA,M,QAEA,MAAM,EAAE9mC,IAAM,EAAAuY,EAAA,MAER,OAAE0C,EAAM,cAAE+D,EAAa,cAAEpR,EAAa,cAAE0zB,IAC5C,UACIsD,EAAgB3pB,EAAO9b,GAAM67B,MAC7BqI,EAAcpoB,EAAO9b,GAAMkkC,YAC3BY,EAAwBhpB,EAAO9b,GAAM0/B,eAIzCv2B,KAAM6gC,EACN3oC,MAAO4oC,EACP96B,UAAW+6B,EACXjV,aAAckV,EACd/qB,QAASgrB,IACP,OAAkCtF,EAAuBW,GAEvD4E,EACJH,GAA8BC,EAE1BzC,EAAqBtoC,QAAwC,QAAhC,EAAA4qC,MAAAA,OAA0B,EAA1BA,EAA4B7gC,YAAI,eAAEmhC,SAE/D,eAAE9B,EAAc,gBAAEC,EAAe,iBAAE8B,IAAqB,EAAA7B,EAAA,GAAc,CAC1E1oC,KAAAA,EACA2oC,UAAU,KAGZ,IAAAhkC,YAAU,KAUR,GATA8jC,IACIwB,GAA8BnF,IAChCyF,EAAiBzF,GACjB0D,EAAeyB,KAM+B,KAA5CD,MAAAA,OAA0B,EAA1BA,EAA4B7gC,KAAKmhC,QAAkB,CACrD,MAAME,EAAiB,CACrBC,SAAU,CACRthC,KAAM,CACJ9H,MAAO,CACLkH,KAAM,oBACND,QACE0hC,EAA2B7gC,KAAKb,SAChCzH,EAAE,yDAKZ2nC,EAAegC,MAEhB,CAACR,EAA4BC,IAEhC,MAAOS,EAAuBC,IAA4B,IAAArmC,UAExDqjC,GAAoB,KAGtB,IAAAhjC,YAAU,KACRw9B,EAAckI,KACb,CAACA,KAIJ,IAAA1lC,YAAU,KACH8gC,GAAiBA,IAAkBh3B,EAAczO,GAAM67B,QAC1Dhc,EAAc,GAAG7f,uBAAsB8C,GACvC6nC,EAAyB,OAE1B,CAAClF,KAGJ,IAAA9gC,YAAU,K,MACR,MAGMimC,EAAyC,QAArB,EAAA9uB,EAAO9b,GAAMkoB,gBAAQ,eAAE9T,SAF9C0wB,GACDA,IAA0Br2B,EAAczO,GAAM0/B,gBAElBkL,GAG1B/qB,EAAc,GAAG7f,cAFf0qC,MAAAA,OAAqB,EAArBA,EAAuBt2B,QAESs2B,EAIA,MAGrC,CAAC5F,IAEJ,MAAM+F,EACJne,OAAOoe,UAAUhvB,EAAOmc,OAAO4D,QAC/BnP,OAAOoe,UAAUhvB,EAAO0gB,YAAYX,QACpCkO,EAEIgB,EAAqC,QAArB,EAAAjvB,EAAO9b,GAAMkoB,gBAAQ,eAAE9T,OAE7C,OACE,gCACE,0BAEMvT,EADM,WAATb,EACK,iCACA,wCAER,0BAEMa,EADM,WAATb,EACK,oCACA,2CAIR,gBAACgrC,EAAA,EAAW,CAAChrC,KAAMA,IAGlB6qC,GAAuBE,EACtB,gBAAC9G,EAAmB,CAClBjkC,KAAMA,EACN67B,MAAO4J,EACPvB,YAAaA,EACbC,aACKW,IAAyBuF,GAE9BjG,yBAA0B,KACxBgG,OAGF,KAGJ,gBAAC3C,EAAmB,CAClBznC,KAAMA,EACN0nC,mBAAoBA,EACpBC,iBAAkB+C,O,kLCjInB,MAAMM,EAA0C,EAAGhrC,KAAAA,M,QACxD,MAAM,EAAEa,IAAM,UACPoqC,EAAaC,IAAkB,IAAA5mC,WAAS,GAEzC6mC,GAAkB,QAAc,IACjC,QACA,OAECC,KAAcD,MAAAA,OAAe,EAAfA,EAAiBrkC,SAG/BukC,EAAY,GAAGrrC,WACdsrC,EAAYC,EAAWC,IAC5B,QAAwCH,GACpC5F,EAAgB6F,EAAWt/B,OAG3B,OAAE8P,EAAM,cAAE+D,IAAkB,WAE1B1W,KAAM87B,EAAS91B,UAAWs8B,IAAkB,UAC5CtiC,KAAMuiC,EAAav8B,UAAWw8B,IACpC,OAAwB,CAAE3rC,KAAAA,EAAM4rC,MAAO,MAEjCziC,KAAMukB,EAAeve,UAAW08B,IACtC,SAEI1W,EACJsW,GAAiBE,GAAwBE,EAErCC,GAAyB,OAA+BJ,GACxDK,GAAiB,IAAAC,UACrB,KAAM,OAA+B/G,IACrC,CAACA,IAGGgH,GAAuB,OAA+Bve,GAEtD7e,GAAe,OAAsB42B,EAAesG,IAI1D,IAAApnC,YAAU,KACRkb,EAAc,MAAM7f,aAAgB6O,MAAAA,OAAY,EAAZA,EAAc82B,UAAW,IAC7D9lB,EAAc,MAAM7f,qBAAwB6O,MAAAA,OAAY,EAAZA,EAAcpC,QAAS,IACnEoT,EAAc,GAAG7f,iBAAoB6O,MAAAA,OAAY,EAAZA,EAAcq1B,cAAe,MACjE,CAACr1B,IAGJ,MAAMq9B,GAC+C,QAAnD,GAACjH,GAAW,IAAIrvB,MAAMsG,GAAMA,EAAEpb,KAAO2kC,WAAc,eAAEt5B,OAAQ,IAC/D,IAAAxH,YAAU,KACJ8gC,GAAiByG,IACnB,QAAW,CACT1jC,UAAoB,WAATxI,EAAoB,iBAAmB,sBAClDyI,QAAS,OACTC,KAAM0iC,EAAY,OAAS,gBAC3BziC,OAAQ,OAAF,yBACD,QAAuBmT,EAAQ9b,IAAK,CAEvC2+B,QAASuN,EACT,CAAC,GAAGlsC,UAAcylC,EAClB,CAAC,GAAGzlC,YAAgBksC,IAEtBjjC,qBAAqB,MAGxB,CAACw8B,EAAeyG,IAEnB,MAAMz9B,EAAgB,CACpB,CACEhC,MAAO5L,EAAE,wBACT2Q,QAASy6B,GAEX,CACEx/B,MAAO5L,EAAE,sBACT2Q,QAASs6B,IAOPK,EAAc,IAAI,IAAKJ,EAAgB,CAC3CK,iBAAiB,EACjBC,YAAY,EACZC,gBAAgB,EAChBC,gBAAgB,EAChBC,cAAc,EAEdC,UAAW,IACXC,SAAU,GAEV7jB,KAAM,CAAC,SACP8jB,gBAAgB,EAChBC,OAAQ,CAAC1wB,EAAGF,IAaa,EAAI,GAVFA,EAAEkG,IAAM,GAIlBlG,EAAE6wB,MAKM,EAAI,GAVF3wB,EAAEgG,IAAM,GAIlBhG,EAAE2wB,OASyB,EAAI,IAoC5CC,EAAYj+B,EAAe7O,EAAO6O,EAAa7C,WAAQlJ,EAEvD6jC,EACJ7qB,EAAOwL,IAAMxL,EAAOwL,GAAGtnB,IAAS8b,EAAOwL,GAAGtnB,GAAO2mC,aAEnD,OACE,2BACE,gBAAC,IAAgB,CACf/3B,YAAa/N,EAAE,gCACfsO,UAAWgmB,EACX7lB,WAAYq3B,IAAyB,QAAT,EAAA7qB,EAAOwL,UAAE,eAAED,iBACvCxY,aAAcA,EACdJ,cAAeA,EACfC,aAAa,EAEbU,YA1CewH,GACnB,IAAIm2B,SAASC,IAEX,MAAMC,EANRd,EAAYe,OAKyBt2B,GALTC,MAAM,EAAG,IAMCxI,KAAI,EAAG+J,KAAAA,KAAWA,IACtD40B,EAAQC,GACJA,EAAe74B,QACjB82B,GAAe,GAEZ+B,EAAe74B,QAAW62B,IAC7BC,GAAe,IACf,QAAW,CACT1iC,UACW,WAATxI,EAAoB,iBAAmB,sBACzC0I,KAAM0iC,EAAY,OAAS,gBAC3B3iC,QAAS,OACTE,OAAQ,OAAF,yBACD,QAAuBmT,EAAQ9b,IAAK,CACvC4I,OAAQ,CACNukC,cAAev2B,KAGnB3N,qBAAqB,QAwBvBsF,IAAKu+B,EACLn+B,SAAW02B,IACT,GAAI1Z,MAAMC,QAAQyZ,GAChB,OAGF,MAAM3zB,EAAW2zB,EACb9e,SAAS,GAAG8e,EAAYr5B,QAAS,SACjClJ,EAGJ0oC,EAAajzB,SAAS7G,IAExBvF,KAAMk/B,EACNz9B,OAAQ,KACN49B,EAAanzB,YAAW,IACzB,QAECkzB,EAAUpzB,SAAWozB,EAAUlqC,MAC3B,CACEA,MAAOkqC,EAAUlqC,YAEnByB,O,0OCrLP,MAAMsqC,EACX,EACE3+B,cAAAA,EACA6N,SAAAA,EACA6H,YAAAA,EACA+C,uBAAAA,EACAjK,SAAAA,EACA0qB,iBAAAA,MAEA,MAAM,EAAE9mC,IAAM,SACR0b,GAAQ,QAAc,GACtB4G,GAAU,UACV2C,GAAa,SAEnB,OACE,gBAAC,KAAM,CACLrX,cAAeA,EACfuX,SAAU,IACV5B,oBAAoB,EACpBC,iBAAe,EACf/H,SAAU,CAACR,EAAQY,K,SACjB,QAAW,CACTlU,UAAW,cACXC,QAAS,OACTC,KAAM,OACNC,OAAQ,OAAF,WACD,QAAuBmT,IAE5B7S,oBAAqB7J,QAAgC,MAAxB0c,EAAOmc,OAAO4D,UAEhC,QAAT,EAAA/f,EAAOwL,UAAE,eAAED,iBACblE,EAAQI,KAAK,uBAA4B,GAAY,QAAT,EAAAzH,EAAOwL,UAAE,eAAEL,aAEvD3K,EAASR,EAAQY,MAInB8C,I,gBAEA,MAAM6tB,GAAmB,OAA0B7tB,EAAY1D,QACzDwxB,IAAuBpmB,MAAAA,OAAsB,EAAtBA,EAAwBU,UAEjDgB,OAAO9M,OAAOuxB,GAAkB/e,OAAOtiB,GAAoB,OAAVA,IAE/CuhC,EACyB,QAA7B,EAAqB,QAArB,EAAA/tB,EAAY1D,OAAOwL,UAAE,eAAE2Q,cAAM,eAAEuV,oBAE3BC,EAC8B,QAAlC,EAAqB,QAArB,EAAAjuB,EAAY1D,OAAOwL,UAAE,eAAEkV,mBAAW,eAAEgR,oBAEhCE,EACJluB,EAAY2G,eACX3G,EAAYI,SACb2tB,GACAE,GACAtpB,IACCmpB,EAIGlK,EACJ5jB,EAAY1D,OAAOmc,OAAO4D,OAC1Brc,EAAY1D,OAAO0gB,YAAYX,MAC3B,GACA,EAEN,OACE,gBAAC,EAAAlf,SAAQ,KACP,gBAAC,IAAU,CACTsJ,cAAezG,EACfjD,MAAOA,EACPK,WAAY,EACZ4gB,SACuB,QAArB,EAAAhe,EAAY1D,OAAOwL,UAAE,eAAEL,UACrB,gBAAC,IAAe,CACdA,SAAUzH,EAAY1D,OAAOwL,GAAGL,SAChC5N,YAEoC,KAAhC5K,MAAAA,OAAa,EAAbA,EAAeivB,eACiB,SAAhCjvB,MAAAA,OAAa,EAAbA,EAAeivB,iBAInB,KAENla,YAAahE,EAAY1D,OAAO3P,KAChCwhC,YAAanuB,EAAY4H,OAAOjb,KAChCwxB,oBAEExZ,IAAoC,QAArB,EAAA3E,EAAY1D,OAAOwL,UAAE,eAAED,sBAClCvkB,EACC86B,IACCpe,EAAYK,cAAc,OAAQ+d,IAG1C/gB,WAAYiJ,EACZrC,SAAU,CACRC,IAAK,WACLjX,MAAO5L,EAAE,iCAGX,gBAAC,KAAI,KACH,gBAAC,IAAK,CACJmZ,sBACE8L,EAAasd,OAAuBtgC,EAEtCgX,KACE,gCACGqK,GACC,gBAAC,IAAM,6BAGE,QAAO,MACPtjB,EACL,iDAIN,gBAAC,IAAS,CACRqmB,uBAAwBA,EACxBjK,SAAUA,EACV0qB,iBAAkBA,KAIxB5tB,OAAQ,CACN9X,KAAM,KACNC,MACE,wBACEnB,QAAUuV,KAGR,OAAiBkJ,KAGnB,gBAAC,IAAM,CACLxf,KAAM,SAAQ,SACJ,UACVnB,SAAU6uC,GAET7sC,EAAE,gC,iFCtJxB,MAAM+sC,EAAsC,EACjD/tC,KAAAA,EACA+lB,OAAAA,EACApD,YAAAA,EACAzhB,QAAAA,EACAoO,UAAAA,EACA0+B,mBAAAA,MAEA,MAAO9pC,EAAQ2H,IAAa,IAAApH,WAAS,GAErC,OAAKP,EAGH,gBAAC,KAAqB,KACpB,gBAAC,KAAsB,KACpB8pC,GACC,gBAAC,KAAS,CAAC9sC,QAAS,IAAM2K,GAAU,IAClC,gBAAC,MAAc,CAAC1K,KAAM,MAI1B,gBAAC,KAAO,MACR,gBAAC,KAAS,KACR,gBAAC,KAAe,KAAE4kB,GAClB,gBAAC,KAAgB,KAAE/lB,IAErB,gBAAC,KAAQ,KACN2iB,EACC,gBAAC,IAAM,UACK,YACVzhB,QAASA,EACTlC,SAAUsQ,EAAS,SACTA,EACVxQ,MAAO,CAAEs1B,SAAU,SAAU9wB,QAAS,aAErCqf,GAED,QA3BQ,M,0FCjBf,MAAMib,EAAkD,EAC7DxW,SAAAA,EACA5N,UAAAA,M,MAEA,MAAM,OAAEyC,EAAM,cAAE+D,IAAkB,UAC5BwH,EAA2B,QAAT,EAAAvL,EAAOwL,UAAE,eAAED,iBAE7B,EAAExmB,IAAM,EAAAuY,EAAA,KACR0H,GAAW,UAGfY,OAAQosB,EACR3+B,UAAW4+B,EACX1sC,MAAO2sC,EACP7kC,KAAM8kC,IACJ,SAoCJ,OAjCA,IAAAtpC,YAAU,K,MACR,GAAIspC,EAAuB,CACzB,MAAMC,KAAyC,QAA3B,EAAAD,MAAAA,OAAqB,EAArBA,EAAuB9kC,YAAI,eAAEqf,QACjD3I,EAAc,qBAAsBquB,MAErC,CAACD,KAEJ,IAAAtpC,YAAU,KACR,GAAIqpC,EAAuB,CACzB,MAAM3lC,GAAc,OAAc2lC,GAClCltB,GACE,QAAU,CACRtE,MAAO,QACPlU,QAASD,EAAYC,QACrBhD,MAAO,eAGX,QAAW,CACTkD,UAAW,wBACXC,QAAS,OACTC,KAAM,OACNC,OAAQ,OAAF,yBACD,QAAuBmT,IAAO,CACjClT,OAAQ,CACNC,UAAWR,EAAYE,KACvBO,iBAAkBT,EAAYC,WAGlCW,qBAAqB,OAGxB,CAAC+kC,IAEG3mB,EAEL,gBAACumB,EAAS,CACR7sC,QAAS,KACP+sC,EAAc,CAAE7mB,SAAAA,KAElBzE,YAAa3hB,EAAE,kCACfhB,KAAMgB,EAAE,oCACR+kB,OAAQ/kB,EAAE,6BACVsO,UAAW4+B,EACXF,oBAAoB,IAEpB5mB,GAAY5N,EAGd,gBAACu0B,EAAS,CACR/tC,KAAMgB,EAAE,uCACR+kB,OAAQ/kB,EAAE,gCACVgtC,oBAAoB,IAEpB,O,+NCvDC,MAAMM,EAAiC,EAC5ClnB,SAAAA,EACAmnB,WAAAA,EACArgB,WAAAA,EACAE,gBAAAA,EACAmU,YAAAA,EACAiM,kBAAAA,EACAC,4BAAAA,EACAC,oCAAAA,EACAC,wBAAAA,EACAC,0CAAAA,EACAC,aAAAA,MAEA,MAAM,EAAE7tC,IAAM,SACRsiB,GAAU,UACV5G,GAAQ,QAAc,EAAG0K,GACzBnB,GAAa,SAEb6oB,GAAc,IAAAC,kBAEpB,OACE,gBAAC,IAAU,CACTryB,MAAOA,EACPK,WAAY,EACZ4G,YAAa4qB,EACbvxB,WAAYiJ,EACZ+oB,aAAc5nB,EACd6nB,iBAAkBT,EAClB5qB,SAAU,CACRC,IAAK,WACLjX,MAAO5L,EAAE,iCAGX,uBACElC,MAAO,CACLiuB,QAAS,OACTqU,eAAgB,SAChBriC,WACE0vC,IAAgCE,EAC5B,QACA,IAGR,gBAAC,IAAK,CACJx0B,sBAAuB8L,EAAa,SAAMhjB,EAC1CgX,KACE,uBACEnb,MAAO,CACLiuB,QAAS,OACT4N,WAAY,SACZyG,eAAgB,WAGlB,gBAAC,IAAQ,MACT,gBAAC,KAAoB,KAClBqN,IAAgCE,GAC/B,gBAAC,IAAI,CACHxtC,KAAK,MACLmL,KAAM,eACNxN,MAAO,CACL2G,MAAO,UACPlD,OAAQ,EACRe,QAAS,EACT4rC,UAAW,YAKjB,sBACEpwC,MAAO,CACLoP,UAAW,OACX0sB,aAAc,OACdxG,SACEqa,IAAgCE,EAC5B,YACA1rC,IAGPjC,EAAE,0CAEL,qBACElC,MAAO,CACLyD,OAAQ,eAGV,gBAAC,IAAK,CACJ0vB,GAAI,MACJjW,QAAS,sCACThL,WAAY,CACVoL,OAAQ,+BACRmyB,WAAYA,EACZrgB,WAAYA,EACZE,gBAAiBA,MAItBqgB,IAAgCE,GAC/B,qBACE7vC,MAAO,CACL4gC,WAAY,OACZn9B,OAAQ,IAGTvB,EAAE,sCAIJytC,GAA+BE,IAChC,uBAAK7vC,MAAO,CAAEoP,UAAW,OAAQghC,UAAW,WAC1C,qBACE97B,IAAI,aACJF,KAAMqvB,EACNpvB,QAAQ,SAAe,cAAWlQ,GAElC,gBAAC,IAAM,UAAW,WACfjC,EAAE,4CAMVytC,IAAgCE,GAC/B,gBAAC,IAAwB,CACvBD,oCACEA,EAEFE,0CACEA,EAEFC,aAAcA,EACdznB,SAAUA,KAIZqnB,IAAgCE,GAChC,gBAAC,KAAS,CACRv5B,IAAK,IACLC,IAAKrU,EAAE,mCAIVytC,IAAgCE,GAC/B,2BACE,qBACEv7B,IAAI,aACJF,KAAMqvB,EACNpvB,QAAQ,SAAe,cAAWlQ,GAElC,gBAAC,IAAM,UACK,eACVnE,MAAO,CACLkgC,eAAgB,YAChB17B,QAAS,EACTo8B,WAAY,MAGb1+B,EAAE,yCAQjBkZ,OAAQ,CACN9X,KACE,gBAAC,IAAM,CACLjC,KAAM,SAAQ,SACJ,iBACVe,QAAS,KAEP4tC,EAAYK,kBAAkB,CAAC,sBAC/B7rB,EAAQI,KAAK,uBAA4B0D,MAG1CpmB,EAAE,qCAGPqB,MACE,uBAAKvD,MAAO,CAAEiuB,QAAS,OAAQoG,IAAK,SAClC,gBAAC,IAAM,CACLhzB,KAAM,SAAQ,SACJ,YACVe,QAAS,KACPoiB,EAAQI,KAAK,yCAGd1iB,EAAE,yCAMZytC,IAAgCE,GAC/B,gBAAC,IAAqB,U,8LC/MzB,MAAMS,EAAwC,EACnDlrC,OAAAA,EACAC,aAAAA,M,MAEA,MAAM,EAAEnD,IAAM,SACRigB,GAAW,UACVouB,EAAaC,IAAkB,IAAA7qC,WAAS,IACxC8qC,EAAaC,IAAkB,IAAA/qC,WAAS,IAG7C6E,KAAM8T,EACNmC,QAASkwB,EACTra,aAAcsa,IACZ,SAEEC,EAAiB,IAAIC,KACR,QAAjB,EAAAxyB,MAAAA,OAAQ,EAARA,EAAUiE,eAAO,eAAEsuB,gBACnBE,UACIC,GAAU,IAAIF,MAAOC,UACrBE,GAAa,OAA0BJ,EAAgBG,IAGrDjuB,OAAQmuB,EAAoB1gC,UAAW2gC,IAC7C,SA0CF,OACE,gBAAC,IAAK,WACK,oBACT/rC,OAAQA,EACRI,OAAQ+qC,GAAeE,EACvBprC,aAAc,KACZmrC,GAAe,GACXW,GAGJ9rC,MAGF,gBAAC,IAAO,KACN,0BACGkrC,EACGruC,EAAE,6CAA8C,CAC9C+uC,WAAAA,IAGF/uC,EADAuuC,EACE,6CACA,wCAER,2BACA,qBACEzwC,MACEuwC,EACI,CAAEzU,aAAc,SAChB2U,EACA,CAAE3U,aAAc,QAChB,IAGLyU,EACC,gBAAC,IAAK,CACJpd,GAAI,MACJjW,QAAS,2CACThL,WAAY,CACVsL,GAAI,4BAENL,OAAQ,CAAE8zB,WAAAA,KAGZ/uC,EADEuuC,EACA,4CAEA,uCAGLF,GAAeE,EACd,uBACEzwC,MAAOywC,EAAc,CAAE3U,aAAc,QAAW,GAChDxlB,IAAK,IACLC,IAAK,aAEL,KACHg6B,GACC,qBAAGvwC,MAAO,CAAEyD,OAAQ,oBAAqBC,MAAO,QAC7CxB,EAAE,8CAGP,gBAAC,IAAa,KACXquC,GAAeE,EAAc,KAC5B,gBAAC,IAAM,OACE,QAAO,SACJ,eACVruC,QAASiD,GAERnD,EAAE,4CAIP,gBAAC,IAAM,CACLE,QACGmuC,GAAgBE,EAEb,KACEprC,IACAmrC,GAAe,IAHjB,IAlHG,GAAGpmC,OAAAA,MACpB8mC,EACE,CACE9mC,OAAAA,EACAgnC,OAAO,GAET,CACE/tB,UAAW,K,UACTstB,IAAkB5lC,MAAK,IAAMylC,GAAe,MAC5C,QAAW,CACT3mC,UAAW,cACXC,QAAS,UACTC,KAAM,QACNC,OAAQ,CACNC,OAAQ,CACNonC,eAAiC,QAAjB,EAAA/yB,MAAAA,OAAQ,EAARA,EAAUiE,eAAO,eAAE+uB,SACnCC,UAAWnnC,EACXonC,aAA8B,QAAjB,EAAAlzB,MAAAA,OAAQ,EAARA,EAAUiE,eAAO,eAAEkvB,OACV,QAAjB,EAAAnzB,MAAAA,OAAQ,EAARA,EAAUiE,eAAO,eAAEkvB,MAAO,GAAK,SAChCttC,EACJutC,OAAQ,EACRN,OAAO,IAGX9mC,qBAAqB,KAGzBq5B,QAAUjhC,IACRyf,GACE,QAAU,CACRtE,MAAO,QACPmN,SAAU,EAAC,OAActoB,GAAOiH,SAChChD,MAAO,kBAkFGgrC,CAAW,CAAEvnC,OAAQ,aAMjClK,SAAUixC,GAAkBP,EAAoB,SACtCO,GAAkBP,EAAoB,MACzC,QAAO,SACJ,QAGN1uC,EADHquC,EACK,sCACFE,EACE,2CACA,kD,uGClKX,MAAMmB,EAAyC,EAAGxsC,OAAAA,MACvD,MAAM,IAAQ,SAEd,OACE,gBAAC,IAAK,CACJA,OAAQA,EACRC,aAAc,KACZS,OAAO8B,SAASwM,KAAO,+BAEzB5O,QAAM,GAEN,gBAAC,IAAO,KACN,sBAAIxF,MAAO,CAAEs1B,SAAU,SAAUsL,WAAY,MAC1C1+B,EAAE,+CAEL,2BACA,yBAAIA,EAAE,8CACN,uBACElC,MAAO,CAAE87B,aAAc,QACvBxlB,IAAK,IACLC,IAAK,eAEP,gBAAC,IAAa,KACZ,gBAAC,IAAM,OACE,QAAO,SACJ,UACVnU,QAAS,KACP0D,OAAO8B,SAASwM,KAAO,gCAGxBlS,EAAE,kD,uIChBR,MAAM2vC,EAAkC,EAC7CC,KAAAA,EACAC,WAAAA,EACAC,cAAAA,EACAC,cAAAA,EACAC,aAAAA,EACAvhC,WAAAA,M,MAEA,MAAM,EAAEzO,IAAM,SAERiwC,EAA2C,cAApB,QAAV,EAAAL,MAAAA,OAAI,EAAJA,EAAMtkC,YAAI,eAAEmgB,eACzBykB,EAAQD,EAAa,MAAQ,IAEnC,OAAKL,EAKH,gBAAC,KAAO,KACN,2BACE,gBAAC,KAAQ,KAAEA,MAAAA,OAAI,EAAJA,EAAMO,aACjB,gBAAC,KAAQ,MAAE,OAAkBP,MAAAA,OAAI,EAAJA,EAAMtkC,KAAKmgB,gBACxC,yBAAImkB,MAAAA,OAAI,EAAJA,EAAMQ,cAEXP,GAAcC,EACb,uBACEhyC,MAAO,CACLiuB,QAAS,OACTskB,cAAe,SACfle,IAAK,SAGP,gBAAC,KAAgB,KACf,gBAAC,IAAW,CACVn0B,UAAQ,EACRsN,KAAMskC,EAAKtkC,KAAI,SACLukC,EACV1kC,MAAO0kC,EAAW,GAAG1kC,QAEvB,gBAAC,MAAsB,CACrBhL,KAAM,GAAE,WACEH,EAAE,sCAAqC,WACvC,qBAAoB,aACnB,kBAEb,gBAAC,IAAY,CAACC,GAAI,wBAEpB,gBAAC,KAAgB,KACf,gBAAC,IAAW,CACVjC,UAAQ,EACRsN,KAAMskC,EAAKtkC,KAAI,SACLwkC,EACV3kC,MAAO2kC,EAAc,GAAG3kC,QAE1B,gBAAC,MAAsB,CACrBhL,KAAM,GAAE,WACEH,EAAE,yCAAwC,WAC1C,wBAAuB,aACtB,kBAEb,gBAAC,IAAY,CAACC,GAAI,4BAGpB,KAEJ,2BACE,0BACG2vC,MAAAA,OAAI,EAAJA,EAAMU,aAAa9iC,KAAI,CAAC5F,EAASuhB,IAChCvhB,EAAQ0D,KACN,sBAAIoC,IAAKyb,GACNvhB,EAAQwoC,YACP,gCACE,gBAAC,IAAY,CACX7wC,UAAW,sBACXgxC,WAAW,EACXrxC,MAAM,QACNE,OAAO,QACPoxC,MAAM,EACNvwC,GAAI,GAAG2vC,MAAAA,OAAI,EAAJA,EAAMtkC,gBAAgB6d,MAE/B,wBACE5pB,UAAW,4BACXzB,MAAO,CAAEgnB,OAAQ,QAAQ,WACfld,EAAQwoC,YAAW,WACnB,GAAGR,MAAAA,OAAI,EAAJA,EAAMtkC,gBAAgB6d,KAElCvhB,EAAQ0D,OAIb,gCAAG1D,EAAQ0D,OAGb,SAIV,uBAAKxN,MAAO,CAAE+mB,UAAW,WACvB,gBAAC,KAAW,KACV,0BACE,iCACCqrB,IAIH,yBAAIlwC,EADLiwC,EACO,2CAEA,6CAER,gBAAC,IAAM,CACL/vC,QAAU+vC,OAA4BhuC,EAAf+tC,EACvBhyC,SAAU+xC,GAAiBthC,EAAU,gBAE9B,QAAO,SACJ,WAGNzO,EADHiwC,EACK,8BACFF,EACE,iCACA,oCA1GL,O,0FCEJ,MAAMU,EAAyC,CACpDC,SAAU,OACVC,QAAS,UACTC,IAAK,MACLC,SAAU,YAGCC,EAAqBnO,GACzB8N,EAAe9N,IAAa8N,EAGxBM,EAA0C,EACrD9mC,SAAAA,EACA04B,SAAAA,EACAqO,gBAAAA,EACAd,MAAAA,EACAe,iBAAAA,EACAC,SAAAA,EACAC,cAAAA,EACApB,cAAAA,EACAqB,gBAAAA,EACAC,yBAAAA,EACA1zC,SAAAA,EACAoxC,WAAAA,EACAuC,aAAAA,EACAl1B,SAAAA,EACAuyB,eAAAA,EACA4C,aAAAA,M,MAEA,MAAM,EAAEvxC,IAAM,SAERwxC,GACH7C,GAAkB4C,KACL,QAAb5O,GAAmC,YAAbA,IACvBoN,EAEI0B,EAAcF,EAChB,uCAEA,4CAGErpC,EAA0B,QAAjB,EAAAkU,MAAAA,OAAQ,EAARA,EAAUiE,eAAO,eAAE+uB,SAElC,OACE,gBAAC,KAAkB,CAACzM,SAAUA,EAAS+O,qBACpCF,EACC,gBAAC,KAAwB,KACvB,gBAAC,KAAsB,CAACA,YAAaA,GACnC,yBACGxxC,EAAEyxC,EAAa,CAAE1C,WAAAA,IAClB,wBAAM7uC,QAAS,IAAMoxC,EAAappC,IAAO,WAI7CipC,GAAiBpB,EACnB,gBAAC,KAAwB,KACvB,gBAAC,KAAsB,CAACA,cAAeA,GACpCA,EACG/vC,EAAE,wCACFmxC,EACAnxC,EAAE,4CACF,OAGN,KAEJ,gBAAC,KAAc,CAACkxC,SAAUA,EAAUC,cAAeA,GACjD,gBAAC,KAAQ,KACqB,aAA3BxO,EAASlX,cACN,eACA,mBAGN,gBAAC,KAAuB,KACtB,gBAAC,KAAc,KACb,gBAAC,KAAQ,CAACkX,SAAUA,EAAS+O,qBAC1BZ,EAAkBnO,EAASlX,gBAE9B,gBAAC,KAAe,CAACkX,SAAUA,EAAS+O,qBACjCV,IAGL,gBAAC,KAAe,KACd,gBAAC,KAAW,KACV,iCACA,0BACGI,GACDC,GACiC,aAAjC1O,EAAS+O,qBACwB,aAAjC/O,EAAS+O,oBACP,gBAAC,KAAa,CAACN,gBAAiBA,GAC7B,G,KAAMC,E,IAA2B,IAElC,KAEHnB,IAGL,gBAAC,KAAgB,KAAEe,KAGvB,uBAAKnzC,MAAO,CAAEyD,OAAQ,kBAAoB5D,GAC1C,gBAAC,KAAc,KACZsM,EAASuD,KAAI,CAAC5F,EAASuhB,IAEtBvhB,EAAQ0D,KACN,sBAAIoC,IAAKyb,GACNvhB,EAAQwoC,YACP,gCACE,gBAAC,IAAY,CACX7wC,UAAW,sBACXgxC,WAAW,EACXrxC,MAAM,MACNE,OAAO,QACPoxC,MAAM,EACNvwC,GAAI,GAAG0iC,aAAoBxZ,MAE7B,wBACE5pB,UAAW,4BACXzB,MAAO,CAAEgnB,OAAQ,QAAQ,WACfld,EAAQwoC,YAAW,WACnB,GAAGzN,aAAoBxZ,KAEhCvhB,EAAQ0D,OAIb,gCAAG1D,EAAQ0D,OAGb,Y,opBCvGT,MAAMqmC,EAA8B,EACzCh2B,MAAAA,EACAi2B,iBAAAA,EACAC,mBAAAA,EACAC,UAAAA,EACAC,eAAAA,EACAC,WAAAA,EACAC,OAAAA,EACAC,OAAAA,M,QAEA,MAAM5vB,GAAU,UACV5c,GAAW,UACXua,GAAW,UACX,EAAEjgB,IAAM,UACPsO,EAAW6jC,IAAgB,IAAA1uC,WAAS,GACrC2uC,GAAgB,UAGtB,UACA,MAAM5sC,GAAe,UACfG,GAAe,QAA0BD,EAASE,SAAU,CAChEC,KAAM,oBACNC,OAAO,EACPC,QAAQ,IAGJssC,GAAmB,QACvB3sC,EAASE,SACT,CACEC,KAAM,wBACNC,OAAO,EACPC,QAAQ,IAINusC,EAAaD,MAAAA,OAAgB,EAAhBA,EAAkBvqC,OAAOwqC,WAEtCC,EAAcT,EAChB,eACAtsC,EAAa2C,QAAU,WAKrBqqC,EAA2B,OAAH,wBAAQ,MAAwB,CAAEF,WAAAA,IAE1DG,GAAgB9sC,MAAAA,OAAY,EAAZA,EAAcmC,OAAOsvB,OACrCsb,GAAqB/sC,MAAAA,OAAY,EAAZA,EAAcmC,OAAO6zB,aACxCrzB,KAAMqqC,KAAgB,OAC5BF,GACAC,IAEIE,GAAgBr0C,SACD,QAAnB,EAAAo0C,MAAAA,QAAW,EAAXA,GAAavb,cAAM,eAAEn3B,MAA6B,QAAvB,EAAA0yC,GAAYhX,mBAAW,eAAE17B,MAG/C4yC,GAAeC,IAAoB,WAExC,CACAzrC,gBAAYpF,EACZqF,kBAAcrF,IAIhB,aAAgB,KACd,MAAM8wC,GAAqB,UAC3BD,GAAiBC,KAChB,IAGH,aAAgB,K,SAGe,QAA3B,oBAA2B,eAAE1rC,cACF,QAA3B,oBAA2B,eAAEC,eAK1B9B,EAAawF,MAIlB,SAAS,eACT,WACE,CACEgoC,iBAAiB,EACjBC,cAAeztC,EAAawF,MAE9B,CAAC4+B,EAAesJ,KAQd,GAAiB,4BAAbtJ,EAEF,OAGF,MAAQ3pC,GAAIkzC,EAAOC,IAAKC,GAAWH,GAAQ,GAErCjzC,EAAKkzC,EACLC,EAAMC,EAERpzC,GAAMmzC,KAER,QAAU,SAAUnzC,IACpB,QAAU,UAAWmzC,GAGrBN,GAAiB,CAAEzrC,WAAYpH,EAAIqH,aAAc8rC,WAItD,CAAC5tC,EAAawF,MAEjB,MACE6V,OAAQyyB,GACRhlC,UAAWilC,GACX/yC,MAAOgzC,GACPlrC,KAAMmrC,KACJ,SAEEpuC,GAAgB,IAAY,OAAD,6B,oBACzB,OAAM,KAEZ,MAGMquC,GAAYD,MAAAA,QAAa,EAAbA,GAAep3B,KAAKs3B,QAClC,OAAOF,MAAAA,QAAa,EAAbA,GAAep3B,KAAKs3B,cAC3B1xC,QAGE,QAAuBwxC,IAAelsC,OAAM,UAIlD,QAAW,CACTI,UAAW,SACXC,QAAS,iBACTC,KAAM,SACNC,OAAQ,CACNC,OAAQ,CACNG,OAAQqqC,EACRhD,MAA4B,QAAtB,EAAAkE,MAAAA,QAAa,EAAbA,GAAepzB,eAAO,eAAEkvB,MAAO,GAAK,IAC1CqE,QAAShB,GAAgB,KAAO,SAChCiB,SAA6B,QAAnB,EAAAlB,MAAAA,QAAW,EAAXA,GAAavb,cAAM,eAAEn3B,GAC/BitB,WAA+B,QAAnB,EAAAylB,MAAAA,QAAW,EAAXA,GAAavb,cAAM,eAAE9rB,KACjCwoC,cAAuC,QAAxB,EAAAnB,MAAAA,QAAW,EAAXA,GAAahX,mBAAW,eAAE17B,GACzCmtB,gBAAyC,QAAxB,EAAAulB,MAAAA,QAAW,EAAXA,GAAahX,mBAAW,eAAErwB,MAE7CqoC,OAAQD,GAEVtrC,qBAAqB,IAGnBqqC,IAAiBC,IAAsBE,GAEzC,cAAa,KAAiB,CAC5B9lC,MAAO,KACPrF,QAAS,cACTa,KAAM,OAEC9C,EAAaquC,UAAYruC,EAAasuC,cAE/CxxB,EAAQI,KAAK,CACX9c,SAAU,4BACVymC,OAAQ7mC,EAAaquC,SACjB,YAAYruC,EAAaquC,oCAAmDtB,IAC5E,iBAAiB/sC,EAAasuC,yCAAwDvB,OAI5F,cAAa,KAAiB,CAC5BzlC,MAAO,KACPrF,QAAS,cACTa,KAAM,OAERga,EAAQI,KAAK,CACX9c,SAAU,4BACVymC,OAAQ,2BAA0CkG,UAKlDwB,GAAoBtsC,IACxB0qC,GAAa,GACblyB,GACE,QAAU,CACRtE,MAAO,QACPmN,SAAU,CAACrhB,GACXhD,MAAO,gBAKb,IAAAX,YAAU,KACJ2vC,KACF,OAA6B,CAC3BjrC,YAAairC,MAAAA,QAAa,EAAbA,GAAejrC,YAC5Bi5B,QAASsS,KACRlrC,MAAK,KACNxD,UAGH,CAACouC,MAGJ,IAAA3vC,YAAU,KACR,GAAI0vC,GAAyB,CAC3B,MAAMhsC,GAAc,OAAcgsC,IAClCO,GAAiBvsC,EAAYC,UAC7B,QAAW,CACTE,UAAW,wBACXC,QAAS,iBACTC,KAAM,SACNC,OAAQ,CACNC,OAAQ,CACNC,UAAWR,EAAYE,KACvBO,iBAAkBT,EAAYC,QAC9BS,OAAQqqC,IAGZnqC,qBAAqB,OAGxB,CAACorC,KAEJ,MAAMQ,GAGA,CACJ,CACE1oC,KAAM,SACN2oC,KAAMrC,GAER,CACEtmC,KAAM,WACN2oC,KAAMpC,IAIV,OACE,gBAAC,KAAiB,eAAcK,EAAQJ,UAAWA,GAChDxjC,GAAa,gBAAC,IAAM,yBAErB,gBAAC,IAAS,MACP,EAAG7I,gBAAAA,KACF,gBAAC,KAAc,CAACqsC,UAAWA,GACxBG,GAAU,gBAAC,KAAS,KAAEA,GACtBt2B,GAAS,gBAAC,KAAW,KAAEA,GACxB,gBAAC,KAAsB,KACpBq4B,GAAgBxmC,KAAI,EAAGymC,KAAAA,EAAM3oC,KAAAA,KAC5B2oC,EACE,gBAAC,IAAc,CACbvmC,IAAKpC,EACLnG,MAAO,SACPD,SAAUoG,EACV7F,gBAAiBA,EACjBD,aAAcA,EACdJ,aAAc,KACZ+sC,GAAa,IAEf7sC,YAAayuC,GACb1uC,cAAeA,KAEf,QAIPwsC,GAAsBD,EACrB,gBAAC,KAAe,KACd,2BACA,kCACA,4BAEA,KAEJ,gBAAC,KAAM,CACLhkC,cACEkkC,EAAYU,EAA2B,KAEzC52B,iBACEk2B,EAAY,KAA0B,KAExCr2B,SAAiBR,GAAW,OAAD,6BACzBk3B,GAAa,GACb,MAAMprC,QAAuBtB,IACxBsB,EAWLusC,GAAgB,CACdlhB,YAAa,CACXzV,UAAW1B,EAAO0B,UAClBC,SAAU3B,EAAO2B,SACjBL,MAAOtB,EAAOsB,MACdrV,YAAaC,SAASC,UAAYxD,OAAO8B,SAASQ,OAClDguC,UAAWpC,OACP7vC,EACA,GAAGuD,EAAa0uC,YACpB/rC,OAAQoqC,EACRD,WACEr3B,EAAOq3B,YAAc9sC,EAAa8sC,iBAAcrwC,EAClDkyC,SAAUrC,EAAY72B,EAAOk5B,SAAW,GACxCnuC,OAAQ8rC,OACJ7vC,GACA0D,MAAAA,OAAY,EAAZA,EAAcM,UAAW2sC,GACzB,GAAGhvC,OAAO8B,SAASQ,SAASR,EAASE,gBACrC3D,EACJ8E,eAAgBA,GAAkB,GAClCM,YAAYwrC,MAAAA,QAAa,EAAbA,GAAexrC,kBAAcpF,EACzCqF,cAAcurC,MAAAA,QAAa,EAAbA,GAAevrC,oBAAgBrF,KA9B/CkwC,GAAa,QAmChB,IAEG,gBAAC,KAAI,KACH,gBAAC,KAAO,KACN,gBAAC,IAAgB,CACf7mC,KAAK,YACLnM,KAAK,OACLyM,MAAM,aAAY,wBAGlBmC,YAAa,OACbxO,UAAW,SAEb,gBAAC,IAAgB,CACf+L,KAAK,WACLnM,KAAK,OACLyM,MAAM,YAAW,wBAGjBmC,YAAa,YACbxO,UAAW,UAIf,gBAAC,IAAgB,CACf+L,KAAK,QACLnM,KAAK,QACLyM,MAAM,QAAO,wBAGbmC,YAAa,mBACbxO,UAAW,SAEZuyC,GAAaC,EACZ,gBAAC,IAAiB,UACNK,EAAc9pC,MAAQ,GAAE,SACxB8pC,EAAc9jC,UACxBtQ,SAAUO,QAAQ6zC,EAAc5xC,OAAM,cAEpC4xC,EAAc5xC,MACV,gCACA,yBAEN8K,KAAM,WAAU,OACR,WAAU,gBAGlB,KAEHwmC,GAAaE,EACZ,gBAAC,IAAgB,CACf1mC,KAAK,aACLnM,KAAK,OACLyM,MAAO5L,EAAE,kCAAiC,wBAG1CT,UAAW,SAEX,KACJ,uBAAKzB,MAAO,CAAEoP,UAAW,SACvB,gBAAC,IAAmB,CAAC5B,KAAK,kBACxB,gBAAC,KAAS,KACR,gBAAC,IAAK,CACJ2lB,GAAI,MACJjW,QACE82B,EACI,uCACA,gCAEN9hC,WAAY,CACVqL,EAAG,gCAMb,uBAAKvd,MAAO,CAAEyD,OAAQ,kBACpB,gBAAC,IAAS,CACRpC,KAAM,SAAQ,SACJ,SACVnB,SAAUu1C,IAAiBjlC,EAAS,MAC7B,QAAO,WAIVtO,EADH8xC,EACK,6BACA,iCAQjBA,GAAcD,GAAuBD,EAMlC,KALF,gBAAC,KAAe,KACd,2BACA,kCACA,4BAGJ,gBAAC,KAAY,CAACE,UAAWA,GACvB,gBAAC,IAAS,CACRh0C,MAAO,CAAEwE,QAAS,IAAK07B,eAAgB,aAAa,SAC1C,iBACV99B,QAAS,KACPoiB,EAAQI,KAAK,yBAGd1iB,EAAE,iCAEL,gBAAC,IAAS,CACRlC,MAAO,CAAEyD,OAAQ,KAAK,SACZ,mBACVrB,QAAS,KACPoiB,EAAQI,KAAK,yBAGd1iB,EAAE,8B,0DC1fnB,MAAMo0C,EAAsB,QAAU;;;;;;;;EAUhCC,EAAqB,QAAU;;;;eAItB,EAAG51C,MAAAA,KAAYA,EAAMC,UAAU41C;;;;;;;;;EAWxCC,EAAkB,QAAuC;;;;;IAK3D,EAAGC,cAAAA,KACHA,EACI,IAAG;;;;UAKH;EAGKC,EAAsC,EACjDC,SAAAA,EACAC,UAAAA,EACAC,iBAAAA,KAGE,gBAACR,EAAmB,KAClB,gBAACC,EAAkB,KACjB,gBAACE,EAAe,eAAgBK,GAC7BF,GAEH,gBAACH,EAAe,KAAEI,M,gICrD1B,MAAME,EAAc,QAAU;;;;aAIjB,EAAGp2C,MAAAA,KAAYA,EAAMsD,OAAO+yC;;;;EAmDzC,EA7CiC,KAC/B,MAAOC,EAASC,IAAc,IAAAvxC,WAAkB,GAC1CwxC,GAAsB,SACzB3wC,GAAqBA,EAAMu/B,YAAYoR,QAY1C,OATA,IAAAnxC,YAAU,KACM,OAAVmxC,IACFD,GAAW,GACXr8B,YAAW,KACTq8B,GAAW,KACV,SAEJ,CAACC,IAGF,gBAACJ,EAAW,KACV,gBAACK,EAAA,EAAU,CAACH,QAASA,EAASI,UAAU,QAAQC,SAAU,KACxD,gBAACr0C,EAAA,EAAO,CACNs0C,SAAO,EACP91C,UAAW01C,MAAAA,OAAK,EAALA,EAAOxwC,MAClBwtC,OAAQgD,MAAAA,OAAK,EAALA,EAAOt5B,MACf25B,UAAW,IAAMN,GAAW,IAE3BC,GAASA,EAAMxtC,QACd,wBAAMiK,wBAAyB,CAAEC,OAAQsjC,EAAMxtC,WAC7C,KACHwtC,GAASA,EAAMnsB,SACd,0BACGmsB,EAAMnsB,SAAStb,KAAI,CAAC/F,EAAS0hB,IAE1B,sBACEzb,IAAKyb,EACLzX,wBAAyB,CAAEC,OAAQlK,QAKzC,S,mLCpCyB,SAAnC,kBAAY8tC,qBACd,SAGF,MAAM,GAAU,UAIVzH,EAAc,IAAI,EAAA0H,YAAY,CAClC/kC,eAAgB,CACdglC,QAAS,CACPC,MAAO,EACPC,UAAWC,EAAAA,EACXC,sBAAsB,MC7B1B,EAAAC,EAAY,CACVC,IAAK,4EACLC,aAAc,CACZ,OACA,OAGFC,iBAAkB,GAClBC,yBAA0B,GAC1BC,yBAA0B,EAC1BC,YAAa,aACbC,QAAS,gCAETtvB,SAAS,EAETuvB,SAAU,CACR,cACA,wBACA,0CACA,qCACA,uCACA,gBACA,gBACA,gCACA,qCACA,iDAGA,qBACA,uBACA,oBAMA,qBAGA,kBACA,gCACA,kBACA,cACA,aACA,YACA,wBACA,iDACA,aACA,qCAGA,oBACA,YACA,mBACA,cACA,gBAGA,gBACA,qBACA,gBAGA,0CACA,wBAGA,aAGA,aAGA,eACA,iCAGA,yBACA,sBAGFC,aAAc,CACZ,cACA,6BACA,yBACA,4BACA,yBACA,kCACA,wBACA,6BACA,mCACA,kBACA,iBACA,oBACA,4BACA,cACA,gBACA,gBAGA,8CACA,qCACA,6BACA,kBAKA,aACA,kBACA,qBACA,uBACA,oDAGA,aAGA,iDAGA,qCAOA,kBACA,kCACA,yBACA,6BACA,mCACA,yBACA,wBACA,yBACA,4BACA,6BACA,cAGA,gBAGA,kBACA,kBAGA,UAGA,iBAGA,aAGA,oBACA,4BAGA,cAIA,WAIA,qBAGA,yCAKA,kDAGA,YAIA,2BAGA,yBAIA,qBAGA,OAGA,mBACA,YACA,YACA,cACA,qCACA,mBACA,eACA,WACA,WACA,cACA,aACA,aACA,gBACA,kBAIFC,UAAW,CAAC,iDDlLhB,SACE,gBAAC,EAAAC,oBAAmB,CAACC,OAAQ5I,GAC3B,gBAAC,EAAA6I,mBAAkB,CAACC,eAAe,IACnC,gBAAC,KAAQ,CAACC,MAAOA,EAAA,GACf,gBAAC,KAAM,CAACv0B,QAAS,GACf,gBAAC,KAAa,CAAC7jB,MAAO,KACpB,gBAAC,KAAa,CAACge,SAAU,IAAM,gBAACq6B,EAAA,EAAS,OACvC,gBAACC,EAAA,EAAG,OAEN,gBAAC,EAAc,MACf,iBE7B8B,KACtC,MAAOhC,EAASC,IAAc,IAAAvxC,WAAkB,GAC1CuzC,GAAsB,SACzB1yC,GAAqBA,EAAMu/B,YAAYmT,SAEpC,EAAEh3C,IAAM,EAAAuY,EAAA,MAEd,IAAAzU,YAAU,KACJkzC,GACFhC,GAAW,KAEZ,CAACgC,IAEJ,MAAMC,GAAU,IAAAvwC,UAehB,OAdA,IAAA5C,YAAU,KACJkzC,GAASA,EAAME,mBACjBD,EAAQtwC,QAAUgS,YAAW,KAC3Bq8B,GAAW,KACVgC,EAAME,mBAGJ,KACDD,EAAQtwC,SACViS,aAAaq+B,EAAQtwC,YAGxB,CAACqwC,MAAAA,OAAK,EAALA,EAAOE,mBAENF,EAGH,gBAAC,KAAW,CAACx+B,UAAWu8B,GACtB,gBAACv2C,EAAA,EAAS,OAAQ,MAChB,gBAAC,KAAY,KACX,gBAAC,KAAW,KACTw4C,EAAMG,cACL,gBAAC,KAAgB,CACfj3C,QAAS,KACP80C,GAAW,IACPgC,MAAAA,OAAK,EAALA,EAAO3+B,UACT2+B,EAAM3+B,YAIV,gBAAC,MAAc,M,IAAKrY,EAAE,iBAEtB,MAGN,gBAAC,KAAS,KACR,gBAAC,KAAgB,KACdg3C,EAAMr7B,MAAQ,0BAAKq7B,EAAMr7B,OAAc,KACxC,qBACE7d,MAAO,CACLuE,SAAU,MAGX20C,EAAMz+B,eACL,gBAACwC,EAAA,EAAS,CACRC,QAASg8B,EAAMvvC,QACfwT,OACE+7B,EAAMI,WACF,CAAEzqB,UAAWqqB,EAAMI,iBACnBn1C,IAIR+0C,EAAa,UAIlBA,EAAM5+B,MACL,gBAAC,KAAiB,KAChB,uBAAKhE,IAAK4iC,EAAM5+B,SAEhB,MAGN,gBAAC,KAAW,KAAE4+B,EAAMK,UAErBL,EAAMM,gBAAkBN,EAAME,iBAC7B,gBAACK,EAAA,EAAgB,CAACC,MAAOR,EAAME,wBAC7Bj1C,IAtDS,OFCI,UAKvBkF,SAASkT,eAAe,U,kbG1CnB,MAAMo9B,EAA0C,I,IAAA,MACrDtsC,EAAK,aACLkM,EAAY,aACZqgC,GAAY,EACT95C,EAAK,IAJ6C,yCAMrD,MAAO+5C,EAAoBC,IAAyB,IAAAn0C,WAAkB,GAChEgJ,GAAW,IAAA/F,QAAgC,MAuBjD,OANA,IAAA5C,YAAU,MACH6zC,GAAsBlrC,EAAS9F,SAClC8F,EAAS9F,QAAQyD,UAElB,CAACutC,IAGF,gBAAC,IAAkB,KACjB,gBAAC,IAAkB,KAChBtgC,EACC,gCACE,gBAAC,IAAY,CACXpX,GAAG,eACHf,MAAM,SACNC,KAAK,QACLC,OAAO,SAEP,4BAAOiY,IAET,gBAAC,MAAc,CACb9X,UAAW,QAAO,yBAET,kBAGX,MAEN,yBACEyL,IAAKyB,EACL3O,MAAO,CAAE0D,MAA4B,GAApB2J,EAAMoI,OAAS,GAAS,MACzCvV,SAAU25C,EACVxsC,MAAOA,EACPwQ,MAAOxQ,EACPE,SAAWoK,GAAMiiC,EAAajiC,EAAEtD,OAAOhH,OACvC8gB,UAAW,MAGZruB,EAAMi6C,WACL,wBACEt4C,UAAU,kBACVW,QAAS,KA9CXiL,GACFysC,GAAuBD,KARhB,gBADLA,EACM,MAEA,MAFM,OA0DZ,mC,aC5DD,MAAMG,EAAgC,EAC3C9pC,aAAAA,EACAqJ,aAAAA,EACAqgC,aAAAA,EACA90B,SAAAA,EACAjlB,SAAAA,EACAo6C,iBAAAA,EACA13C,QAAAA,KAGE,gBAAC,IAAY,KACX,gBAAC,IAAa,CACZ03C,iBAAkBA,EAClB13C,QAASA,GAAW,SAEpB,2BACGuiB,EACC,gBAAC,KAAI,CAACsD,GAAItD,EAASC,IAAG,cAAc,YAClC,gBAAC,IAAO,M,IAAKD,EAAShX,OAEtB,IAIN,2BACE,gBAAC6rC,EAAY,CACXC,aAAe7mC,IACT6mC,GACFA,EAAa7mC,IAGjBwG,aAAcA,EACdlM,MAAO6C,GAAgB,GACvB6pC,WAAYt5C,QAAQm5C,MAGxB,2BAAM/5C,K,qCCzCP,MAAMq6C,EAAkC,EAAGt8B,MAAAA,EAAOK,WAAAA,KAErD,gBAAC,IAAgB,KACdL,EAAMlO,KAAI,CAAC3F,EAAMshB,IAEd,gBAAC8uB,EAAA,EAAW,CACVvqC,IAAKyb,EACLA,MAAOA,EACP+nB,SAAUn1B,IAAeoN,EACzBxN,MAAO9T,EAAK8T,MACZ/P,MAAO/D,EAAK+D,MACZssC,SAAUrwC,EAAKqwC,SACfC,YAAatwC,EAAKswC,iB,uICcvB,MAAM10B,EAAwC,EACnD4B,UAAAA,EACAzC,SAAAA,EACA5G,UAAAA,EACAD,WAAAA,EAAa,EACbL,MAAAA,EACAiH,YAAAA,EACAmqB,YAAAA,EACAhQ,oBAAAA,EACAH,QAAAA,EACAh/B,SAAAA,EACAswC,iBAAAA,EACAD,aAAAA,EACA5oB,cAAAA,M,QAEA,MAAMH,GAAa,UAEb,EAAEjlB,IAAM,EAAAuY,EAAA,KACR+J,GAAU,WACV,GAAE81B,GAAOx0C,OACTy0C,GAAgB,QAAgB/zC,GAAUA,EAAM+X,KAAKi8B,QACpDC,EAAuBC,GAC5B,YAAe,IACVC,EAAmBC,GAAwB,YAAe,IAEzDpwC,KAAMwyB,IAAwB,OAAkByd,GAGlDI,IADc7d,MAAAA,OAAmB,EAAnBA,EAAqBgB,UAAW,IACd/mB,MAAMC,GAAe,qBAATA,EAAE/U,KAE9CmoB,EAAmBuwB,MAAAA,OAAiB,EAAjBA,EAAmB1xB,YACtC2xB,EAAoBD,MAAAA,OAAiB,EAAjBA,EAAmB14C,GACvC44C,GAAoD,KAA/BF,MAAAA,OAAiB,EAAjBA,EAAmB5xB,SAU9C,IAAIX,EACA0yB,EAKJ,IAdA,IAAAh1C,YAAU,KACJu0C,IACFG,GAAyB,GACzBE,GAAqB,MAEtB,CAACL,IASAjzB,EAAe,CACjB,MAAM,OAAEnK,GAAWmK,EACnBgB,EAAqB,QAAV,EAAAnL,MAAAA,OAAM,EAANA,EAAQwL,UAAE,eAAEL,SACvB0yB,EAAuB,QAAV,EAAA79B,MAAAA,OAAM,EAANA,EAAQwL,UAAE,eAAEoU,iBAEzBie,EAAa7K,EACb7nB,EAAW4nB,EAGb,OACE,gBAAC,KAAgB,KACdhyB,EACC,gCACE,gBAAC87B,EAAM,CACLl1B,SAAUA,EACV5U,aAAc2U,EACdtL,aAAcy1B,EACd4K,aAAc5a,EACdib,kBAAgB,GAEf3xB,GAAY0yB,EACX,qBACE3mC,OAAQ,SACRD,KAAM,2CAA+CkU,cACrDhU,IAAI,cAEJ,gBAAC,IAAM,OAAQ,QAAO,SAAY,aAAW,gBAI7C,MACFymC,GACA,gBAAC,IAAY,CACX54C,GAAG,iBACHf,MAAM,MACNC,KAAK,OACL45C,UAAU,QACV35C,OAAO,SAEP,4BAAOY,EAAE,yBAGZy4C,EACC,iDAAwB,kBACtB,gBAAC,IAAM,CACLv4C,QAAS,KACF24C,GAOH,OAAgBT,GANhB91B,EAAQI,KACN,GAAG,iCAAsCk2B,iBACvCxwB,GAAoB,MAM3B,MACM,QAAO,SACJ,a,WAEAywB,EAAkC,KAAb,gBAAC,MAAM,QAGxC,KAEJ,qBAAG1mC,OAAQ,SAAUD,KAAM,IAAeE,IAAI,cAC5C,gBAAC,IAAM,OAAQ,QAAO,SAAY,aAAW,gBAI/C,uBAAKgC,IAAK,IAAQ5S,MAAO,IAAK6S,IAAK,iBAEpCsoB,GAED,KAIH1X,EAAa,KAAOvJ,GAASA,EAAMnI,OAClC,gBAAC,KAAgB,CAAChU,UAAW,eAC3B,gBAACy4C,EAAO,CAACt8B,MAAOA,EAAOK,WAAYA,KAGrC,uBAAKje,MAAO,CAAEkP,WAAY,UAE3BqY,EACC,gBAAC7mB,EAAA,EAAS,KACR,gBAAC,KAAS,eAAa,aAAae,UAAW,eAC5C8lB,IAGH,KACJ,gBAAC,KAAc,KAAE1nB,M,0DClLvB,MAAMq7C,EAAoB,QAAU;;;;;;;;EAU9BC,EAAc,QAAU;;;EAKjBC,EAAuB,EAAGv7C,SAAAA,KAEnC,gBAACq7C,EAAiB,KAChB,gBAACC,EAAW,KAAEt7C,K,2HCZpB,MAAM2hB,EAAU,QAAU;;EAIpB65B,EAAc,QAAU;;EAIxBC,EAAS,QAAU;;EAIZC,EAA+B,KAC1C,MAAOhT,EAAOiT,IAAY,IAAA71C,UAAS,KAC5BsS,EAAYwjC,IAAiB,IAAA91C,UAClC,0HAEK+1C,EAAQC,IAAa,IAAAh2C,UAAS,IAC/Bwc,GAAW,UACV3R,EAAW6jC,IAAgB,IAAA1uC,WAAS,GA6B3C,OACE,gBAAC6b,EAAO,KACN,gBAAC85B,EAAM,KACL,gBAAC,IAAU,CACTxtC,MAAO,SACPN,KAAM,GACNnM,KAAM,OACNnB,SAAUsQ,EACVnD,MAAO4K,EACPhI,YAAa,sCACb1C,SAAWoK,GAAM8jC,EAAc9jC,EAAEikC,cAAcvuC,SAEjD,gBAAC,IAAM,CACLnN,UAAW+X,GAAczH,EACzBpO,QAAS,KACPu5C,EAAU1jC,IACX,SACS,UAAQ,eAMtB,gBAACqjC,EAAM,KACJI,EACC,uBAAK17C,MAAO,CAAE0D,MAAO,MACnB,gBAAC,IAAoB,CACnBkM,IAAK8rC,EACLzwC,gBAAiBuwC,EACjBn0C,MAAO,SACP6D,eAAgB,KACdguC,MAAM,yBAER2C,kBAAmBH,KAIvB,0EAIHnT,EACC,gBAAC+S,EAAM,KACL,gBAACD,EAAW,KACV,gBAAC,IAAU,CACTvtC,MAAO,aACPN,KAAM,GACNnM,KAAM,OACN+Y,UAAQ,EACRla,UAAQ,EACRmN,MAAOk7B,EACPt4B,YAAa,iCAGjB,2BACE,gBAAC,IAAM,UACK,UACV/P,SAAUsQ,EACVpO,QAAS,KArFQ,CAACmmC,IAC5B8L,GAAa,GACb,SACQ,2DAAgE,CACpErrC,WAAYu/B,IAEbx9B,MAAK,KACJoX,GACE,QAAU,CACRtE,MAAO,UACPlU,QAAS,oBACThD,MAAO,iBAIZ8C,OAAM,KACL4qC,GAAa,GACblyB,GACE,QAAU,CACRtE,MAAO,QACPlU,QAAS,iBACThD,MAAO,kBAiEHm1C,CAAqBvT,KACtB,oBAML,Q,2DCxHV,MAAMwT,EAAgB,QAAW,IAAM,0DAE1BC,EAAa,IAEtB,gBAAC,EAAAt9B,SAAQ,CACPC,SACE,uBACE3e,MAAO,CACL6E,SAAU,WACVR,OAAQ,MAGV,gBAAC,IAAM,6BAAwB,YAInC,gBAAC03C,EAAa,Q,iJCXb,MAAM5/B,EAAwC,EACnD8/B,UAAAA,EACAC,OAAAA,KAEO,gBAAC,IAAiB,WAAYD,EAAS,OAAUC,I,qCCoBnD,MAAMC,EAAiC,EAC5CpyC,KAAAA,EACAyG,UAAAA,EACA0wB,YAAAA,EACAkb,iBAAAA,EACAC,gBAAAA,KAGE,gBAAC,KAAe,KACd,gBAAC,KAAe,KACd,uBAAK/lC,IAAK,IAAMC,IAAI,MAEtB,gBAAC,KAAY,KACX,0BAAK,oCACJ6lC,GACCA,EAAiB9iB,QACjB8iB,EAAiBve,aACf,gBAAC,KAAiB,KAChB,2BACE,gBAAC,KAAU,CACTvnB,IAAK8lC,EAAiB9iB,OAAOgjB,KAC7B/lC,IAAK6lC,EAAiB9iB,OAAO9rB,KAC7BqQ,MAAOu+B,EAAiB9iB,OAAO9rB,OAEjC,gBAAC,MAAmB,MACpB,gBAAC,KAAU,CACT8I,IAAK8lC,EAAiBve,YAAYye,KAClC/lC,IAAK6lC,EAAiBve,YAAYrwB,KAClCqQ,MAAOu+B,EAAiBve,YAAYrwB,QAGxC,gBAAC2O,EAAW,WACU,IAATpS,EAAa,EAAa,IAATA,EAAa,GAAK,IAAG,OACzC,cAKlB,gBAAC,KAA0B,KACxByG,EACC,gBAAC,KAAmB,KAClB,gBAAC1N,EAAA,EAAM,kBAAgB,QAAO,MAASo+B,KAGzC,gBAACqb,EAAA,EAAI,CAACF,gBAAiBA,M,8ECnD1B,MAAMG,EAAuC,EAClDC,uBAAAA,MAGA,MAAM,gBAAEC,IAAoB,UACtB90C,GAAW,UACX4c,GAAU,UACVm4B,EAAuC5gB,KAAK6gB,MAChD92C,OAAO+2C,eAAel4B,QACpB,wBACG,OAED,EAAEziB,IAAM,EAAAuY,EAAA,KAERqiC,EAAa,QAAkBl1C,EAAS2mC,QAAQwO,SAK/CvsC,EAAW6jC,IAAgB,IAAA1uC,WAAS,IACpCq3C,EAAcC,IAAmB,IAAAt3C,UAAoB,IACrDu7B,EAAagc,IAAkB,IAAAv3C,UACpC,mCAEKw3C,EAAwBC,IAA6B,IAAAz3C,WAAS,IAC9D03C,EAAiBC,IAAsB,IAAA33C,UAAS,IAGjD43C,GAAyB,QAA0BZ,GACrDA,EACA,KAEEa,EAA4BD,EAE7BT,EAED,KADA56C,EAAE,kCAFFA,EAAE,sCAMA,WAAEu7C,EAAU,SAAEhnB,IAAa,EAAAinB,EAAA,GAAkB,CACjDt2C,SAAUs1C,EACViB,SAAUb,EACVc,WAAYL,MAAAA,OAAsB,EAAtBA,EAAwBK,WACpClgC,QAAS6/B,IAGLM,EAAuBn5B,aAAaC,QACxC,6BAGIm5B,EACJ,cAA6BD,GAAwB,KACrD,cAA6BJ,GAAc,IAEvCM,EAAkB,KAGtBj4C,OAAO+2C,eAAemB,WACpB,uBAEF,IACE,MAAMC,EAAS,IAAIC,IAAIX,EAAwBK,YAAY91C,SAC3D0c,EAAQI,KAAKq5B,GACb,SACAz5B,EAAQI,KAAK,+BAqDjB,OAjDA,IAAA5e,YAAU,KACJm3C,GAKCV,IAMDqB,IAEF,QAAW,CACTj0C,UAAW,kBACXC,QAAS,iBACTC,KAAM,WAERkzC,EAAgB,GAChB5I,GAAa,KAKb4I,EAAgB,GAChBC,EAAe,kCAEfiB,EAAA,OACQ,0BAAiC,CACrC/2C,SAAUs1C,EACViB,SAAUb,EACVc,WAAYL,MAAAA,OAAsB,EAAtBA,EAAwBK,aAErC7yC,MAAK,KACJmyC,EAAe,iCACfa,OAEDt0C,OAAO/G,IACN46C,GACE,OAAmB,CACjB56C,MAAAA,YAKT,CAAC+5C,EAAwBqB,EAAcX,IAGtCK,GAA4B/mB,GAAY4mB,EAExC,2BACE,gBAAC,KAAS,KACR,gBAACp6C,EAAA,EAAO,SAAU,QAAO,QAAW,SACjCu6C,GAA4B,yBAAIA,GAChC/mB,GACC,uBACE7iB,wBAAyB,CAEvBC,OAAQ4iB,KAIb4mB,GACC,uBACEzpC,wBAAyB,CAEvBC,OAAQwpC,KAOb5mB,EAAS2nB,SAAS,OAAS,KAC1B,gBAACz+C,EAAA,EAAM,CACL8B,UAAW,OAAM,SACP,YACVW,QAAS,MACHm7C,MAAAA,OAAsB,EAAtBA,EAAwBK,YAE1Bp5B,EAAQI,KACN,IAAIs5B,IAAIX,EAAuBK,YAAY91C,UAK3C,KAAuB40C,GACzB52C,OAAO8B,SAASwM,KACd,KAAuBsoC,GAEzB52C,OAAO8B,SAASy2C,WAEnB,YAYb,gCACE,gBAAClC,EAAa,CACZ3rC,UAAWA,EACXzG,KAAMizC,EACNZ,iBAAkB,CAChB9iB,OAAQikB,MAAAA,OAAsB,EAAtBA,EAAwBjkB,OAChCuE,YAAa0f,MAAAA,OAAsB,EAAtBA,EAAwB1f,aAEvCqD,YAAaA,EACbmb,gBAAiB,KACfe,GAA0B,GAC1B14B,aAAas5B,WACX,6BAEF3J,GAAa,GACb4I,EAAgB,GAChBC,EAAe,+BACfa,U,2DCpNV,MAAMO,EAAe,QAAW,IAAM,sMAEzBC,EAAe,IAExB,gBAAC,EAAA7/B,SAAQ,CACPC,SACE,uBACE3e,MAAO,CACL6E,SAAU,WACVR,OAAQ,MAGV,gBAAC,IAAM,6BAAwB,YAInC,gBAACi6C,EAAY,Q,2DChBnB,MAAMvC,EAAgB,QAAW,IAAM,qEAE1ByC,EAAyB,IAElC,gBAAC,EAAA9/B,SAAQ,CACPC,SACE,uBACE3e,MAAO,CACL6E,SAAU,WACVR,OAAQ,MAGV,gBAAC,IAAM,6BAAwB,YAInC,gBAAC03C,EAAa,Q,uGCZb,MAAM0C,EAA+B,IAExC,gBAAC,KAAM,KACL,gBAAC,KAAK,CACJz2C,OAAK,EACLD,KAAM,6BACN22C,UAAW,MAEb,gBAAC,KAAK,CACJ12C,OAAK,EACLD,KAAM,iCACN22C,UAAW,MAEb,gBAAC,KAAK,CACJ12C,OAAK,EACLD,KAAM,mCACN22C,UAAW,MAEb,gBAAC,KAAK,CACJ12C,OAAK,EACLD,KAAM,iCACN22C,UAAW,Q,6HCnBZ,MAAMC,EAA8B,IAEvC,gBAAC,KAAM,KACL,gBAAC,KAAK,CACJ32C,OAAK,EACLD,KAAM,yCACN22C,UAAW,MAEb,gBAAC,KAAK,CACJ12C,OAAK,EACLD,KAAM,wCACN22C,UAAW,MAEb,gBAAC,KAAK,CACJ32C,KAAM,CACJ,oCACA,gDACA,0CAEFC,OAAK,EACL02C,UAAW,MAEb,gBAAC,KAAK,CACJ32C,KAAM,gCACNC,OAAK,EACL02C,UAAW,MAEb,gBAAC,KAAK,CAACA,UAAW,Q,kJCzBxB,MAsGA,EAtGyB,K,MACvB,MAAMv8B,GAAW,SACXqC,GAAU,UACV+pB,GAAUzoC,OAAO8B,SAAS2mC,QAAU,IAAI3gB,QAAQ,KAAM,KACtDgxB,EAAK,QAAkBrQ,IACvB,EAAErsC,IAAM,SAOR28C,EAAaD,EAAGE,kBAA0B,QAAP,EAAAF,EAAG72C,YAAI,eAAEq2C,SAAS,qBAG3D,IAAAp4C,YAAU,KACR,GAAI64C,EAGF,YADA/4C,OAAOi5C,YAAY,CAAEC,gBAAgB,GAAQ,KAI/C,GAAI31C,SAASkT,eAAe,oBAE1B,OAKF,MACM0iC,EAAS51C,SAASoT,cAAc,UACtCwiC,EAAO3oC,IAFa,uDAGpB2oC,EAAO98C,GAAK,mBACZ88C,EAAOj/C,MAAM6E,SAAW,WACxBo6C,EAAOj/C,MAAMqD,IAAM,UACnB47C,EAAOj/C,MAAMmL,QAAU,IACvB9B,SAAS8R,KAAKuB,YAAYuiC,KACzB,IAGH,MAAMC,EAAmC,KACnCL,IAIJ,SAAsB9zC,MAAK,MACzB,UACA,cAAeA,MAAK,KAGlByZ,EAAQI,KAFc,GAAGg6B,EAAG72C,MAAQ,cASpCo3C,EAAoB,SAAUnwC,GAC9BA,EAAMxE,KAAKw0C,gBAEbE,KAmCJ,OAhCA,IAAAl5C,YAAU,KACRF,OAAOI,iBAAiB,UAAWi5C,GAC5B,IAAMr5C,OAAOK,oBAAoB,UAAWg5C,KAClD,KAEH,IAAAn5C,YAAU,KACR6U,YAAW,KAETqkC,MACC,OACF,KAGH,IAAAl5C,YAAU,K,UACR,GAAI44C,GAAMA,EAAGj1C,QACX,IACE,MAAMy1C,EAAoBt5C,OAAOu5C,KAAKT,EAAGj1C,QAAQ2f,YAC3Cg2B,EAAavjB,KAAK6gB,MAAMwC,GACxBG,EAA6B,QAAhB,EAAAD,EAAWzhC,aAAK,QAAI,GACjC2hC,EAA4C,QAA7B,EAAAt9C,EAAE,mCAA2B,QAAI,GAChDu9C,EAA4B,QAAf,EAAAH,EAAWj+C,YAAI,QAAI,WACtC8gB,GACE,QAAU,CACRtE,MAAO0hC,EACP51C,QAAS61C,EACT74C,MAAO84C,KAGX,MAAO9nC,OAEV,IAGD,2BACE,gBAAC,IAAM,iB,kJCjGN,MAAM+nC,EAAuB,IAEhC,gBAAC,KAAM,KACL,gBAAC,KAAK,CAAC13C,OAAK,EAACD,KAAM,uBAA6B22C,UAAW,MAC3D,gBAAC,KAAK,CACJ12C,OAAK,EACLD,KAAM,CACJ,iCACA,kCAEF22C,UAAW,MAEb,gBAAC,KAAK,CAAC12C,OAAK,EAACD,KAAM,uBAA6B22C,UAAW,MAC3D,gBAAC,KAAK,CACJ12C,OAAK,EACLD,KAAM,CACJ,qBACA,uBACG,MAEL22C,UAAW,MAEb,gBAAC,KAAK,CAAC12C,OAAK,EAACD,KAAM,wBAA8B22C,UAAW,MAC5D,gBAAC,KAAK,CAAC12C,OAAK,EAACD,KAAM,oBAA0B22C,UAAW,MACxD,gBAAC,KAAK,CAAC12C,OAAK,EAACD,KAAM,oBAA0B22C,UAAW,MACxD,gBAAC,KAAK,CAACA,UAAW,Q,gDClCxB,MAAMiB,EAAc,QAAW,IAAM,sMAExBC,EAAc,IAEvB,gBAAC,EAAAlhC,SAAQ,CACPC,SACE,uBACE3e,MAAO,CACL6E,SAAU,WACVR,OAAQ,QAKd,gBAACs7C,EAAW,Q,uGCTX,MAAME,EAAmB,KAC9B,MAAM,EAAE39C,IAAM,SAEd,OACE,gCACE,gBAAC,IAAY,CACX40C,kBAAgB,EAChBF,SACE,gBAAC,IAAO,CACNkJ,QAAS,uBAAKxpC,IAAK,MACnBypC,WAAY79C,EAAE,wBACd89C,QAAS99C,EAAE,6BAGf20C,UACE,gBAAC,IAAU,CACTh5B,MAAO3b,EAAE,yBACT4xC,kBAAgB,EAChBC,oBAAkB,S,wICf9B,MAAMkM,EACJ,gCACE,uBAAK3pC,IAAK,IAAQ5S,MAAO,IAAK6S,IAAK,gBACnC,uBAAKD,IAAK,IAAUtW,MAAO,CAAEyD,OAAQ,WAAa8S,IAAK,UACvD,uBAAKD,IAAK,IAAaC,IAAK,UAAW7S,MAAO,IAAKW,OAAQ,MAIlD67C,EAA0B,KACrC,MAAM,EAAEh+C,IAAM,SAEd,OACE,gCACE,gBAAC,IAAY,CACX40C,kBAAgB,EAChBF,SACE,gBAAC,IAAO,CACNkJ,QAAS,uBAAKxpC,IAAK,MACnBypC,WAAY79C,EAAE,wBACd89C,QAAS99C,EAAE,6BAGf20C,UACE,gBAAC,IAAU,CACTh5B,MAAO3b,EAAE,gCACT8xC,WAAS,EACTC,gBAAc,EACdC,YAAU,EACVC,OAAQ8L,S,6HCpBpB,MAAME,EAAY,EAAGnZ,QAAAA,EAASx5B,KAAAA,EAAMgD,UAAAA,KAClC,gBAAC,KAAY,KACVA,EACC,gBAAC1N,EAAA,EAAM,cAEP,gCACE,uBAAKwT,IAAK0wB,GAAW,IAAWzwB,IAAK/I,IACpCA,GAAQ,yBAAIA,KAaR4yC,EAAwC,EACnDnrC,cAAAA,EACAma,WAAAA,EACAG,mBAAAA,EACAD,gBAAAA,EACA+wB,SAAAA,KAGE,gBAAC,KAAe,KACd,gBAAC,KAAgB,KACf,gBAACF,EAAS,CAACnZ,QAAS/xB,EAAezH,KAAM4hB,IACzC,gBAAC,KAAiB,KAChB,6BACA,gBAAC,MAAmB,CAACpvB,MAAO,CAAEyD,OAAQ,KAAOkD,MAAM,UACnD,8BAEF,gBAAC,KAAY,KACX,gBAACw5C,EAAS,CAACnZ,QAASzX,EAAoB/hB,KAAM8hB,MAGjD+wB,EACC,gBAAC,KAAgB,KACdA,GACC,8BAA8BjxB,UAAmBE,KAEnD,M,gDCjDH,MAAMgxB,EAAsB,K,UACjC,MAAM,EAAEp+C,IAAM,EAAAuY,EAAA,MACR,OAAE6e,EAAM,YAAEuE,IAAgC,WAE1C,UAAErtB,EAAWhG,KAAMqqC,IACvB,OAAuCvb,EAAQuE,GAG3CzO,EAAgC,QAAnB,EAAAylB,MAAAA,OAAW,EAAXA,EAAavb,cAAM,eAAE9rB,KAClCyH,EAAgB4/B,MAAAA,OAAW,EAAXA,EAAavb,OAAOinB,aACpCjxB,EAA0C,QAAxB,EAAAulB,MAAAA,OAAW,EAAXA,EAAahX,mBAAW,eAAErwB,KAC5C+hB,EAAqBslB,MAAAA,OAAW,EAAXA,EAAahX,YAAY0iB,aAC9CF,EAA4B,QAAjB,EAAAxL,MAAAA,OAAW,EAAXA,EAAax7B,YAAI,eAAEgnC,SAC9BG,EAAgB//C,QAAQ2uB,GAAcE,GAE5C,OACE,gCACE,gBAACqnB,EAAA,EAAY,CACXC,SACE,gBAAC6J,EAAA,EAAO,CACNX,QACEtvC,EACE,uBAAKxQ,MAAO,CAAE6E,SAAU,aACtB,gBAAC/B,EAAA,EAAM,4BAEP09C,EACF,gBAACJ,EAAU,CACThxB,WAAYA,EACZna,cAAeA,EACfsa,mBAAoBA,EACpBD,gBAAiBA,EACjB+wB,SAAUA,IAIZ,gBAACI,EAAA,EAAO,CACNX,QAAS,uBAAKxpC,IAAK,MACnBypC,WAAY79C,EAAE,wBACd89C,QAAS99C,EAAE,+BAMrB20C,UACE,gBAAC,IAAU,CACTh5B,MAAO3b,EAAE,yBACT4xC,kBAAgB,EAChBC,oBAAkB,S,2DC3D9B,MAAMgI,EAAgB,QACpB,IAAM,qEAGK2E,EAA0B,IAEnC,gBAAC,EAAAhiC,SAAQ,CACPC,SACE,uBACE3e,MAAO,CACL6E,SAAU,WACVR,OAAQ,MAGV,gBAAC,IAAM,6BAAwB,YAInC,gBAAC03C,EAAa,Q,uICVb,MAAM4E,EAAgB,QAAU;;;;;;;;;;;;;;;;;;;;;;;;;;EAkC1BC,EAAyB,KACpC,MAAMp8B,GAAU,UACVrC,GAAW,UACX,MAAE3b,IAAU,UACZq6C,GAA0B,SAC7Br6C,GAAqBA,EAAMu/B,YAAYh+B,OAKpCuqC,GAAc9rC,MAAAA,OAAK,EAALA,EAAO8rC,cAAe,CAAC,oCACrCwO,GAAUt6C,MAAAA,OAAK,EAALA,EAAOs6C,UAAW,WAElC,OACE,gBAAC,IAAU,KACT,gBAACH,EAAa,KACZ,2BAPQn6C,MAAAA,OAAK,EAALA,EAAOqX,QAAS,aAQxB,uBAAKvH,IAAK,IAAcC,IAAK,eAC5B+7B,EAAY5iC,KAAI,CAACqxC,EAAKx9B,IACrB,qBAAG3T,IAAK2T,GAAMw9B,KAEhB,gBAAC,IAAM,OACE,QAAO,SACJ,SACV3+C,QAAS,KACHy+C,GACFr8B,EAAQI,KAAKi8B,GACb1+B,GAAS,YAETrc,OAAO8B,SAASwM,KAAO,gCAI1B0sC,O,sGCvEX,MAAME,GAAc,QAAgB,CAClCjb,YAAa,IACbkb,SAAU,IACV1iC,KAAM,IACN+hB,oBAAqB,MAgBvB,GAbc,QAAe,CAC3B4gB,QAASF,EACTG,UAAU,EACVC,WAAaC,GACXA,EAAqB,CACnBC,kBAAmB,CAEjBC,mBAAoB,CAAC,mBACrBC,aAAc,CAAC","sources":["webpack://leadsbridge/./src/components/Basic/Button/index.tsx","webpack://leadsbridge/./src/components/Basic/ButtonNbe/index.tsx","webpack://leadsbridge/./src/components/Basic/Container/index.tsx","webpack://leadsbridge/./src/components/Basic/FakeInput/index.tsx","webpack://leadsbridge/./src/components/Basic/FiltersIcons/index.tsx","webpack://leadsbridge/./src/components/Basic/InputFeedback/index.tsx","webpack://leadsbridge/./src/components/Basic/Loader/index.tsx","webpack://leadsbridge/./src/components/Basic/Message/index.tsx","webpack://leadsbridge/./src/components/Basic/Modal/index.tsx","webpack://leadsbridge/./src/components/Basic/StateIcon/index.tsx","webpack://leadsbridge/./src/components/Basic/TinyTextualButton/index.tsx","webpack://leadsbridge/./src/components/ButtonProvider/index.tsx","webpack://leadsbridge/./src/components/ConnectedPopupWindow/index.tsx","webpack://leadsbridge/./src/components/Dropdown/index.tsx","webpack://leadsbridge/./src/components/Form/Checkbox/index.tsx","webpack://leadsbridge/./src/components/Form/InputDomain/index.tsx","webpack://leadsbridge/./src/components/Form/InputField/index.tsx","webpack://leadsbridge/./src/components/Form/InputSelect/index.tsx","webpack://leadsbridge/./src/components/Form/InputSmartSelect/index.tsx","webpack://leadsbridge/./src/components/Form/InputToggle/index.tsx","webpack://leadsbridge/./src/components/Form/Label/index.tsx","webpack://leadsbridge/./src/components/Form/LabelWithDocTooltip/index.tsx","webpack://leadsbridge/./src/components/Form/MultiCreatableCustom/index.tsx","webpack://leadsbridge/./src/components/Form/Textarea/index.tsx","webpack://leadsbridge/./src/components/Formik/FormikInputSmartSelect/index.tsx","webpack://leadsbridge/./src/components/InputAutoSelectCopy/index.tsx","webpack://leadsbridge/./src/components/PanelPopup/index.tsx","webpack://leadsbridge/./src/components/Panel/index.tsx","webpack://leadsbridge/./src/components/ReCaptcha/index.tsx","webpack://leadsbridge/./src/components/Translate/index.tsx","webpack://leadsbridge/./src/features/SignupSurvey/index.tsx","webpack://leadsbridge/./src/features/auth/SuperUserInfoBar/index.tsx","webpack://leadsbridge/./src/features/billing/BillingBox/BillingDetails/index.tsx","webpack://leadsbridge/./src/features/billing/BillingBox/index.tsx","webpack://leadsbridge/./src/features/billing/CreditCardBox/BoxWrapperWithSideImage/index.tsx","webpack://leadsbridge/./src/features/billing/CreditCardBox/index.tsx","webpack://leadsbridge/./src/features/checkout/CheckoutFooter/index.tsx","webpack://leadsbridge/./src/features/checkout/CheckoutTitle/index.tsx","webpack://leadsbridge/./src/features/googleAdsAccount/AccountActivate/index.tsx","webpack://leadsbridge/./src/features/googleAdsAccount/AccountConnect/index.tsx","webpack://leadsbridge/./src/features/googleAdsAccount/AccountCreationDone/index.tsx","webpack://leadsbridge/./src/features/googleAdsAccount/AccountCreationFormInner/index.tsx","webpack://leadsbridge/./src/features/googleAdsAccount/AccountCreationForm/index.tsx","webpack://leadsbridge/./src/features/googleAdsAccount/IntegrationPanel/index.tsx","webpack://leadsbridge/./src/features/nbee/BridgeChooserForm/index.tsx","webpack://leadsbridge/./src/features/nbee/BridgeChooserRedirector/index.tsx","webpack://leadsbridge/./src/features/nbee/EmailReceipt/index.tsx","webpack://leadsbridge/./src/features/nbee/FieldsMappingForm/FieldMappingEmptyState/index.tsx","webpack://leadsbridge/./src/features/nbee/FieldsMappingForm/FieldMappingRow/index.tsx","webpack://leadsbridge/./src/features/nbee/FieldsMappingForm/FormulaModal/index.tsx","webpack://leadsbridge/./src/features/nbee/FieldsMappingForm/HeaderSearch/index.tsx","webpack://leadsbridge/./src/features/nbee/AddFilterButton/AddFilterButtonModal/index.tsx","webpack://leadsbridge/./src/features/nbee/AddFilterButton/index.tsx","webpack://leadsbridge/./src/features/nbee/FieldsMappingForm/SendTestLeadFeedback/index.tsx","webpack://leadsbridge/./src/features/nbee/FieldsMappingForm/SendTestLeadSubForm/index.tsx","webpack://leadsbridge/./src/features/nbee/FieldsMappingForm/TestConnectionView/index.tsx","webpack://leadsbridge/./src/features/nbee/WelcomeMessageForm/index.tsx","webpack://leadsbridge/./src/features/nbee/FieldsMappingForm/index.tsx","webpack://leadsbridge/./src/features/nbee/IncomingDataContent/IncomingDataFinalStep/index.tsx","webpack://leadsbridge/./src/features/nbee/IncomingDataContent/IncomingDataInitialStep/index.tsx","webpack://leadsbridge/./src/components/IncomingDataTable/index.tsx","webpack://leadsbridge/./src/features/nbee/IncomingDataContent/LoadingStep/index.tsx","webpack://leadsbridge/./src/features/nbee/IncomingDataContent/IncomingDataTableStep/index.tsx","webpack://leadsbridge/./src/features/nbee/IntegrationCredentialsContent/AppAuthCredentialForm/index.tsx","webpack://leadsbridge/./src/features/nbee/IntegrationCredentialsContent/index.tsx","webpack://leadsbridge/./src/features/nbee/LoadingStep/index.tsx","webpack://leadsbridge/./src/features/nbee/ModalTrialInfo/index.tsx","webpack://leadsbridge/./src/features/nbee/NbeeError/index.tsx","webpack://leadsbridge/./src/components/Basic/Skeleton/index.tsx","webpack://leadsbridge/./src/features/nbee/SimpleBridgeBuilderForm/fields/IntegrationSelector/index.tsx","webpack://leadsbridge/./src/features/nbee/SimpleBridgeBuilderForm/fields/IntegrationSettings/index.tsx","webpack://leadsbridge/./src/features/nbee/SimpleBridgeBuilderForm/fields/AppConfigurator/index.tsx","webpack://leadsbridge/./src/features/nbee/SimpleBridgeBuilderForm/fields/AppSelector/index.tsx","webpack://leadsbridge/./src/features/nbee/SimpleBridgeBuilderForm/index.tsx","webpack://leadsbridge/./src/components/StatusBar/index.tsx","webpack://leadsbridge/./src/features/nbee/StatusBarBridge/index.tsx","webpack://leadsbridge/./src/features/nbee/StepCompleted/index.tsx","webpack://leadsbridge/./src/features/pricing/ModalChangePlan/index.tsx","webpack://leadsbridge/./src/features/pricing/ModalUpdatedPlan/index.tsx","webpack://leadsbridge/./src/features/pricing/PlanInfoBanner/index.tsx","webpack://leadsbridge/./src/features/pricing/PricingCard/index.tsx","webpack://leadsbridge/./src/features/signup/SignupForm/index.tsx","webpack://leadsbridge/./src/features/signup/SignupLayout/index.tsx","webpack://leadsbridge/./src/components/ToastComponent/index.tsx","webpack://leadsbridge/./src/index.tsx","webpack://leadsbridge/./src/utils/sentry/index.tsx","webpack://leadsbridge/./src/components/Alert/index.tsx","webpack://leadsbridge/./src/components/Basic/EditableText/index.tsx","webpack://leadsbridge/./src/components/Topbar/index.tsx","webpack://leadsbridge/./src/components/StepBar/index.tsx","webpack://leadsbridge/./src/layouts/PageEditor/index.tsx","webpack://leadsbridge/./src/layouts/SimplePage/index.tsx","webpack://leadsbridge/./src/pages/Admin/TestFacebookToken/index.tsx","webpack://leadsbridge/./src/pages/Admin/index.tsx","webpack://leadsbridge/./src/components/Basic/ProgressBar/index.tsx","webpack://leadsbridge/./src/components/FastAppSurvey/index.tsx","webpack://leadsbridge/./src/pages/BridgeByUrlCallback/index.tsx","webpack://leadsbridge/./src/pages/Checkout/index.tsx","webpack://leadsbridge/./src/pages/GoogleAdsAccount/index.tsx","webpack://leadsbridge/./src/pages/IncomingData/index.tsx","webpack://leadsbridge/./src/pages/Integration/index.tsx","webpack://leadsbridge/./src/pages/Logout/index.tsx","webpack://leadsbridge/./src/pages/Nbee/index.tsx","webpack://leadsbridge/./src/pages/Pricing/index.tsx","webpack://leadsbridge/./src/pages/Signup/index.tsx","webpack://leadsbridge/./src/pages/SignupAppSumo/index.tsx","webpack://leadsbridge/./src/features/signup/BbuContent/index.tsx","webpack://leadsbridge/./src/pages/SignupBbu/index.tsx","webpack://leadsbridge/./src/pages/SignupBbuFallbackSurvey/index.tsx","webpack://leadsbridge/./src/pages/ThankYouPage/index.tsx","webpack://leadsbridge/./src/store/index.tsx"],"sourcesContent":["import React, { ButtonHTMLAttributes } from 'react'\nimport { ButtonStyled } from './styled'\nimport { FaFacebook, FaTiktok } from 'react-icons/fa'\nimport { FcGoogle } from 'react-icons/fc'\n\ntype ButtonStyle =\n  | 'facebook'\n  | 'google'\n  | 'tiktok'\n  | 'primary'\n  | 'secondary'\n  | 'link'\n\nexport type ButtonSize = 'inline-small' | 'large'\n\nexport interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n  $fluid?: boolean\n  $loading?: boolean\n  $variant?: ButtonStyle\n  $size?: ButtonSize\n  disabled?: boolean\n}\n\nexport const Button: React.FC<ButtonProps> = ({\n  $variant,\n  children,\n  ...props\n}) => {\n  let icon\n  switch ($variant) {\n    case 'google':\n      // we need to compensate some icon disaligment\n      icon = <FcGoogle style={{ marginLeft: '-2px' }} />\n      break\n    case 'facebook':\n      icon = <FaFacebook />\n      break\n    case 'tiktok':\n      icon = <FaTiktok />\n      break\n    default:\n      icon = null\n  }\n\n  return (\n    <ButtonStyled $variant={$variant} {...props} disabled={props.disabled}>\n      {icon}\n      {children}\n    </ButtonStyled>\n  )\n}\n","import React, { ButtonHTMLAttributes } from 'react'\nimport {\n  ButtonLoadingHiddenChildren,\n  ButtonLoadingSpinner,\n  ButtonLoadingWrapper,\n  ButtonStyled,\n} from './styled'\n\ntype ButtonStyle =\n  | 'primary'\n  | 'action'\n  | 'secondary'\n  | 'blue'\n  | 'outlined-primary'\n  | 'outlined-secondary'\n  | 'filter'\n  | 'link-primary'\n  | 'link-secondary'\ntype ButtonSize = 'small' | 'standard' | 'large'\n\nexport interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n  $fluid?: boolean\n  $loading?: boolean\n  $loadingText?: string\n  $variant?: ButtonStyle\n  $size?: ButtonSize\n  // when has an icon inside and needs to be aligned and separated a bit from text\n  $hasIcon?: boolean\n  disabled?: boolean\n  $minWidth?: boolean\n}\n\nexport const Button: React.FC<ButtonProps> = ({\n  $variant,\n  $size = 'standard',\n  $hasIcon,\n  $loading,\n  $loadingText,\n  $minWidth,\n  children,\n  ...props\n}) => {\n  // when there's a loading text we force a min width\n  const hasMinWidth = $minWidth || Boolean($loadingText)\n  return (\n    <ButtonStyled\n      $variant={$variant}\n      $size={$size}\n      $hasIcon={$hasIcon}\n      $minWidth={hasMinWidth}\n      disabled={props.disabled}\n      {...props}\n    >\n      {$loading ? (\n        <>\n          <ButtonLoadingWrapper>\n            <ButtonLoadingSpinner /> {$loadingText}\n          </ButtonLoadingWrapper>\n          {/* this is only used to keep a fixed button width */}\n          <ButtonLoadingHiddenChildren>{children}</ButtonLoadingHiddenChildren>\n        </>\n      ) : (\n        children\n      )}\n    </ButtonStyled>\n  )\n}\n","import styled, { css } from 'styled-components'\n\ninterface ContainerProps {\n  $size?: 'md' | 'lg' | 'fluid'\n  $marginY?: string\n}\n\nconst getContainerSize = ({ $size = 'md' }: ContainerProps) => {\n  switch ($size) {\n    case 'lg':\n      return css`\n        max-width: ${(props) => props.theme.container.large};\n      `\n    case 'md':\n      return css`\n        max-width: ${(props) => props.theme.container.medium};\n      `\n  }\n}\n\nexport const Container = styled.div<ContainerProps>`\n  ${getContainerSize};\n\n  margin: 0 auto;\n  ${({ $marginY }) =>\n    $marginY !== ''\n      ? css`\n          margin-top: ${$marginY};\n          margin-bottom: ${$marginY};\n        `\n      : ''}\n`\n","import React from 'react'\nimport { FakeInputStyled } from './styled'\n\nexport interface FakeInputProps extends React.HTMLAttributes<HTMLDivElement> {\n  required?: boolean\n  text?: string\n}\n\nexport const FakeInput: React.FC<FakeInputProps> = ({\n  required,\n  text,\n  ...props\n}) => {\n  return (\n    <FakeInputStyled required={required} {...props}>\n      <p>{text}</p>\n    </FakeInputStyled>\n  )\n}\n","import React from 'react'\nimport { FaCopy, FaMinus, FaPlus } from 'react-icons/fa'\nimport ReactTooltip, { Place, Type, Effect } from 'react-tooltip'\nimport { useTranslation } from 'react-i18next'\nimport {\n  IconButtonStyled,\n  IconsWrapperStyled,\n} from '@components/Basic/FiltersIcons/styled'\n\ninterface Props {\n  handleCopy: () => void\n  handleAdd: () => void\n  handleDelete: () => void\n  isDeleteDisabled?: boolean\n  isAddDisabled?: boolean\n  isCopyDisabled?: boolean\n  isBridgeDisabled?: boolean\n}\n\nconst tooltipProps = {\n  place: 'top' as Place,\n  type: 'light' as Type,\n  effect: 'solid' as Effect,\n  border: true,\n  borderColor: '#f6f7f8',\n  className: 'reactTooltipFilterIcons',\n}\n\nexport const FiltersIcons: React.FC<Props> = ({\n  handleCopy,\n  handleAdd,\n  handleDelete,\n  isDeleteDisabled = false,\n  isAddDisabled = false,\n  isCopyDisabled = false,\n  isBridgeDisabled,\n}) => {\n  const { t } = useTranslation()\n\n  return (\n    <div>\n      <IconsWrapperStyled>\n        <ReactTooltip id={'filter-copy'} {...tooltipProps}>\n          {t('nbee.filters.tooltipIconCopy')}\n        </ReactTooltip>\n        <IconButtonStyled\n          type={'button'}\n          disabled={isCopyDisabled || isBridgeDisabled}\n          onClick={handleCopy}\n          data-tip\n          data-for='filter-copy'\n        >\n          <FaCopy size={15} />\n        </IconButtonStyled>\n        <ReactTooltip id={'filter-delete'} {...tooltipProps}>\n          {t('nbee.filters.tooltipIconDelete')}\n        </ReactTooltip>\n        <IconButtonStyled\n          type={'button'}\n          disabled={isDeleteDisabled || isBridgeDisabled}\n          onClick={handleDelete}\n          data-tip\n          data-for='filter-delete'\n        >\n          <FaMinus size={15} />\n        </IconButtonStyled>\n        <ReactTooltip id={'filter-add'} {...tooltipProps}>\n          {t('nbee.filters.tooltipIconAdd')}\n        </ReactTooltip>\n        <IconButtonStyled\n          type={'button'}\n          disabled={isAddDisabled || isBridgeDisabled}\n          onClick={handleAdd}\n          data-tip\n          data-for='filter-add'\n        >\n          <FaPlus size={15} />\n        </IconButtonStyled>\n      </IconsWrapperStyled>\n    </div>\n  )\n}\n","import React, { ReactNode } from 'react'\nimport styled from 'styled-components'\n\nexport type InputFeedbackStatus = {\n  error?: string | ReactNode\n  success?: string\n}\n\nexport interface InputFeedbackProps {\n  $status: InputFeedbackStatus\n}\n\nconst InputText = styled.p<{\n  variant: 'success' | 'error'\n}>`\n  font-size: 0.9rem;\n  text-align: left;\n  color: ${({ variant, theme }) => {\n    switch (variant) {\n      case 'success':\n        return theme.input.success.borderColor\n      case 'error':\n        return theme.input.error.borderColor\n      default:\n        return theme.input.default.borderColor\n    }\n  }};\n`\n\nexport const InputFeedback: React.FC<InputFeedbackProps> = ({ $status }) => {\n  return (\n    <>\n      {$status?.error && (\n        <InputText data-testid={'input'} data-error='true' variant='error'>\n          {$status?.error}\n        </InputText>\n      )}\n      {$status?.success && (\n        <InputText variant='success'>{$status?.success}</InputText>\n      )}\n    </>\n  )\n}\n","import React from 'react'\nimport { LoaderStyled, LoaderDimmer } from './styled'\n\nexport interface LoaderProps {\n  $active?: boolean\n  $text?: string\n  $size?: 'large' | 'small' | 'x-large'\n  $inverted?: boolean\n  $dimmer?: boolean\n}\n\nexport const Loader: React.FC<LoaderProps> = ({ $text, $dimmer, ...props }) => {\n  return $dimmer ? (\n    <LoaderDimmer>\n      <LoaderStyled {...props}>{$text}</LoaderStyled>\n    </LoaderDimmer>\n  ) : (\n    <LoaderStyled {...props}>{$text}</LoaderStyled>\n  )\n}\n","import React from 'react'\nimport { MessageStyled } from './styled'\n\nexport interface MessageProps {\n  $status?: 'success' | 'error'\n  $header?: string\n}\n\nexport const Message: React.FC<MessageProps> = ({\n  $header,\n  children,\n  ...props\n}) => {\n  return (\n    <MessageStyled $header={$header} {...props}>\n      {$header && <div className={'message-title'}>{$header}</div>}\n      <div className={'message-body'}>{children}</div>\n    </MessageStyled>\n  )\n}\n","import React, { useEffect, useState } from 'react'\nimport ReactModal, { Styles } from 'react-modal'\nimport styled, { css } from 'styled-components'\nimport { IoCloseOutline } from 'react-icons/io5'\nimport { defaultTheme } from '@app/styles/theme/default'\nimport { ReactComponent as MinimizeIcon } from '@assets/images/minimize.svg'\nimport { ReactComponent as CloseBlackIcon } from '@assets/images/close_black.svg'\nimport { ReactComponent as ExpandIcon } from '@assets/images/expand.svg'\n\ninterface ModalProps {\n  isOpen: boolean\n  onCloseModal: () => void\n  hideCloseButton?: boolean\n  isTransparent?: boolean\n  isResizable?: boolean\n  noPadding?: boolean\n  modalTitle?: string\n  isWide?: boolean\n}\n\nconst customStyles: Styles = {\n  content: {\n    top: '50%',\n    left: '50%',\n    right: 'auto',\n    bottom: 'auto',\n    margin: '0',\n    width: '600px',\n    borderRadius: '8px',\n    boxShadow: '2px 2px 15px 0px rgba(31,31,31,0.28)',\n    marginRight: '-50%',\n    transform: 'translate(-50%, -50%)',\n    backgroundColor: '#fff',\n  },\n  overlay: {\n    zIndex: defaultTheme.zIndex.modal,\n  },\n}\n\nconst noPaddingStyles: Styles = {\n  content: {\n    ...customStyles.content,\n    borderRadius: '5px',\n    boxShadow: undefined,\n    minWidth: '570px',\n    width: 'auto',\n    height: '65vh',\n    maxHeight: '75vh',\n    maxWidth: '95vw',\n    padding: 0,\n    margin: 0,\n    overflow: 'hidden',\n  },\n  overlay: {\n    backgroundColor: 'rgba(94,94,94,0.6)',\n    zIndex: defaultTheme.zIndex.modal,\n  },\n}\n\nconst secondaryCustomStyles: Styles = {\n  content: {\n    top: '50%',\n    left: '50%',\n    right: 'auto',\n    bottom: 'auto',\n    margin: '0',\n    width: '600px',\n    border: 'none',\n    backgroundColor: 'transparent',\n    marginRight: '-50%',\n    transform: 'translate(-50%, -50%)',\n  },\n  overlay: {\n    zIndex: defaultTheme.zIndex.modal,\n  },\n}\n\nconst minimizeCustomStyles: Styles = {\n  content: {\n    top: '60%',\n    left: '50%',\n    right: 'auto',\n    bottom: 'auto',\n    margin: '0',\n    width: '40%',\n    padding: '0',\n    borderRadius: '6px',\n    boxShadow: '0 2px 6px 0 rgba(0, 0, 0, 0.4)',\n    backgroundColor: '#fff',\n    transform: 'translate(20%, -50%)',\n  },\n  overlay: {\n    backgroundColor: 'rgba(0, 0, 0, 0)',\n  },\n}\n\nconst expandCustomStyles: Styles = {\n  content: {\n    position: 'absolute',\n    top: 0,\n    bottom: 0,\n    right: 0,\n    left: 0,\n    padding: '0',\n    borderRadius: '6px',\n    boxShadow: '0 2px 6px 0 rgba(0, 0, 0, 0.4)',\n    backgroundColor: '#fff',\n  },\n  overlay: {\n    backgroundColor: 'rgba(0, 0, 0, 0)',\n  },\n}\n\nconst ResizeWrapper = styled.div`\n  background-color: #41a6dc;\n  display: flex;\n  align-items: center;\n  padding: 0.5rem 1rem;\n\n  p {\n    margin: 0;\n    flex: 1;\n    font-weight: 600;\n    color: #fff;\n  }\n\n  svg {\n    cursor: pointer;\n  }\n`\n\nconst IconsWrapper = styled.div`\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  width: 3rem;\n`\n\nconst CloseIcon = styled.div<Pick<ModalProps, 'isTransparent' | 'noPadding'>>`\n  text-align: right;\n  cursor: pointer;\n  ${({ isTransparent, noPadding }) =>\n    isTransparent || noPadding\n      ? css`\n          font-size: 2rem;\n          background-color: #f8f8f8;\n          display: flex;\n          justify-content: center;\n          align-items: center;\n          padding: 1rem;\n          border-radius: 0 10%;\n        `\n      : null}\n  ${({ noPadding }) =>\n    noPadding &&\n    css`\n      margin: 0;\n    `}\n`\n\n/*const ModalHeader = styled.div`\n  display: flex;\n  flex-direction: row;\n  justify-content: space-between;\n  align-items: center;\n  padding: 0;\n  margin: 0;\n\n  h3 {\n    font-size: 1.35rem;\n    padding-left: 1.5rem;\n    padding-top: 1.5rem;\n  }\n`*/\n\nexport const Modal: React.FC<ModalProps> = ({\n  isOpen,\n  children,\n  onCloseModal,\n  hideCloseButton,\n  isTransparent,\n  isResizable,\n  noPadding,\n  // modalTitle,\n  isWide,\n}) => {\n  const [isExpand, setIsExpand] = useState(false)\n\n  const [windowWidth, setWindowWidth] = useState(window.innerWidth)\n\n  useEffect(() => {\n    const handleResize = () => {\n      setWindowWidth(window.innerWidth)\n    }\n\n    window.addEventListener('resize', handleResize)\n\n    return () => {\n      window.removeEventListener('resize', handleResize)\n    }\n  }, [])\n\n  const wideCustomStyles: Styles = {\n    content: {\n      top: '50%',\n      left: '50%',\n      right: 'auto',\n      bottom: 'auto',\n      margin: '0',\n      width: windowWidth <= 768 ? '80%' : '750px',\n      padding: windowWidth <= 768 ? '0' : '1rem',\n      borderRadius: '6px',\n      boxShadow: '2px 2px 15px 0px rgba(31,31,31,0.28)',\n      backgroundColor: '#fff',\n      transform: 'translate(-50%, -50%)',\n    },\n    overlay: {\n      backgroundColor: 'rgba(94,94,94,0.6)',\n      zIndex: defaultTheme.zIndex.modal,\n    },\n  }\n\n  return (\n    <ReactModal\n      isOpen={isOpen}\n      onRequestClose={onCloseModal}\n      style={\n        isResizable && !isExpand\n          ? minimizeCustomStyles\n          : isResizable && isExpand\n          ? expandCustomStyles\n          : isTransparent\n          ? secondaryCustomStyles\n          : noPadding\n          ? noPaddingStyles\n          : isWide\n          ? wideCustomStyles\n          : customStyles\n      }\n      preventScroll={false}\n    >\n      {/* {noPadding && modalTitle ? (\n        <ModalHeader>\n          <h3>{modalTitle}</h3>\n          <CloseIcon noPadding={noPadding} onClick={onCloseModal}>\n            <IoCloseOutline />\n          </CloseIcon>\n        </ModalHeader>\n      ) : null}*/}\n\n      {!hideCloseButton && !noPadding ? (\n        <CloseIcon isTransparent={isTransparent} onClick={onCloseModal}>\n          <IoCloseOutline />\n        </CloseIcon>\n      ) : null}\n\n      {isResizable ? (\n        <>\n          <ResizeWrapper>\n            <p>Getting started video</p>\n            <IconsWrapper>\n              {isExpand ? (\n                <MinimizeIcon onClick={() => setIsExpand(false)} />\n              ) : (\n                <ExpandIcon onClick={() => setIsExpand(true)} />\n              )}\n              <CloseBlackIcon onClick={onCloseModal} />\n            </IconsWrapper>\n          </ResizeWrapper>\n        </>\n      ) : null}\n      {children}\n    </ReactModal>\n  )\n}\n\nReactModal.setAppElement('#root')\n","import React from 'react'\nimport { StateIconStyled } from '@components/Basic/StateIcon/styled'\nimport { IoIosCheckmarkCircleOutline } from 'react-icons/io'\nimport { IoAlertCircleOutline } from 'react-icons/io5'\nimport { AiOutlineMinusCircle } from 'react-icons/ai'\n\nexport type ValidationStates = 'empty' | 'default' | 'success' | 'error'\n\ninterface StateIconProps {\n  state?: ValidationStates\n  iconSize?: string\n}\n\nexport const StateIcon: React.FC<StateIconProps> = ({\n  state = 'empty',\n  iconSize = '24',\n}) => {\n  // set of allowed icons\n  const icons: Record<ValidationStates, JSX.Element> = {\n    default: <AiOutlineMinusCircle color={'#ABB4BD'} size={iconSize} />,\n    success: <IoIosCheckmarkCircleOutline color={'#2ECD72'} size={iconSize} />,\n    error: <IoAlertCircleOutline color={'#EF4836'} size={iconSize} />,\n    // return an empty svg to keep height consistent with other\n    empty: <svg width={2} height={iconSize} />,\n  }\n\n  return (\n    <StateIconStyled>\n      <span />\n      {icons[state]}\n      <span />\n    </StateIconStyled>\n  )\n}\n","import React, { ButtonHTMLAttributes } from 'react'\nimport styled from 'styled-components'\n\nexport type Props = ButtonHTMLAttributes<HTMLButtonElement>\n\nconst RefreshButton = styled.button`\n  cursor: pointer;\n  font-size: 0.8rem;\n  background: #fff;\n  outline: none;\n  border: 0;\n  padding: 0;\n  font-family: ${({ theme }) => theme.font.family};\n  display: inline-flex;\n  align-items: center;\n  &:hover {\n    color: ${({ theme }) => theme.color.link};\n  }\n\n  svg {\n    margin-right: 0.3rem;\n  }\n`\n\nexport const TinyTextualButton: React.FC<Props> = ({\n  children,\n  type = 'button',\n  ...rest\n}) => {\n  return (\n    <RefreshButton type={type} {...rest}>\n      {children}\n    </RefreshButton>\n  )\n}\n","import React, { useEffect, useRef, useState } from 'react'\nimport { FacebookButtonCustom } from '@components/ButtonProvider/Facebook/FacebookButtonCustom'\nimport { FacebookButtonNative } from '@components/ButtonProvider/Facebook/FacebookButtonNative'\nimport { GoogleButtonNative } from '@components/ButtonProvider/Google/GoogleButtonNative'\nimport { GoogleButtonCustom } from '@components/ButtonProvider/Google/GoogleButtonCustom'\nimport { apiPublicClient } from '@app/services/apiPublicClient'\nimport { endpoints } from '@app/api/config'\nimport { parseApiError } from '@app/api/utils/error'\nimport AuthService from '@app/services/AuthService'\nimport { appRoutes, bridgeByUrlPartnersPaths } from '@app/routes'\nimport { deletePersistendSignupParms } from '@features/signup/SignupForm/useHideParamsFromString'\nimport { LocationDescriptor } from 'history'\nimport { matchPath } from 'react-router'\nimport { BbuRouteParams } from 'LeadsBridgeApp'\nimport { useLocation } from 'react-router-dom'\nimport { ApiErrorResponse, ApiUser, ApiUserResponse } from 'BackendApi'\nimport { identifyUserByUserData, trackEvent } from '@app/dataTracking'\nimport { ButtonErrorUi } from '@components/ButtonProvider/Facebook/ButtonErrorUi'\nimport { GetCaptchaToken } from '@components/ReCaptcha'\nimport { signInUserSessionCognito } from '@app/services/apiAuthClient/utils'\nimport { getAffiliateIdFromCookies } from '@app/utils/cookieUtils'\n\nexport type SignupProviderName = 'Facebook' | 'Google'\nexport type AuthScope = 'SignIn' | 'SignUp' | 'NoScope'\ntype SignUpParams = {\n  trialDays: number\n  cbPlan: string\n  couponCode?: string\n}\n\nexport interface ButtonProviderProps {\n  scope: AuthScope\n  provider: SignupProviderName\n  signupParams?: SignUpParams\n  onBeforeAuth?: () => void\n  onAuthError?: (errorMessage: string, errorCode?: string | number) => void\n  onAuthSuccess?: (apiResponse: ApiUser) => void\n  redirectPath?: LocationDescriptor<unknown>\n  dataWidth?: number\n  getCaptchaToken?: GetCaptchaToken\n}\n\nexport const ButtonProvider: React.FC<ButtonProviderProps> = ({\n  provider,\n  scope,\n  onBeforeAuth,\n  onAuthSuccess,\n  onAuthError,\n  dataWidth,\n  signupParams,\n  getCaptchaToken,\n}) => {\n  const location = useLocation()\n\n  const matchBBuPath = matchPath<BbuRouteParams>(location.pathname, {\n    path: [appRoutes.signupBbu.path, ...bridgeByUrlPartnersPaths],\n    exact: true,\n    strict: false,\n  })\n  const bbuUri = matchBBuPath?.isExact\n    ? `${window.location.origin}${location.pathname}`\n    : undefined\n\n  const [isGoogleButtonCustomLoaded, setIsGoogleButtonCustomLoaded] =\n    useState<boolean>(false)\n  const [googleButtonToUseForSignup, setGoogleButtonToUseForSignup] = useState<\n    'native' | 'custom'\n  >('native')\n  const [sdkFailedToLoad, setSdkFailedToLoad] = useState(false)\n\n  const canUpdateState = useRef(true)\n  useEffect(() => {\n    canUpdateState.current = true\n    return () => {\n      if (canUpdateState) {\n        canUpdateState.current = false\n      }\n    }\n  })\n  const handleSdkLoadError = () => {\n    if (canUpdateState.current) {\n      setSdkFailedToLoad(true)\n    }\n  }\n\n  const handleExternalProviderAuth = async (oauthToken: string) => {\n    if (onBeforeAuth) {\n      onBeforeAuth()\n    }\n\n    let recaptchaToken: string | undefined\n    if (getCaptchaToken) {\n      recaptchaToken = await getCaptchaToken()\n    }\n\n    const tapExistingCookieData = getAffiliateIdFromCookies()\n\n    console.log(\n      'calling authWithExternalProvider',\n      'tapVisitorId',\n      tapExistingCookieData?.tapVisitorId,\n      'tapClickId',\n      tapExistingCookieData?.tapClickId\n    )\n\n    const authResponse = await apiPublicClient\n      .post<ApiUserResponse>(endpoints.authWithExternalProvider, {\n        scope,\n        bbuUri,\n        referralUri: document.referrer || undefined,\n        oauthToken: oauthToken,\n        provider: provider,\n        recaptchaToken: recaptchaToken || '',\n        tapClickId: tapExistingCookieData?.tapClickId || undefined,\n        tapVisitorId: tapExistingCookieData?.tapVisitorId || undefined,\n        // signup params if any\n        ...signupParams,\n      })\n      .catch((error: ApiErrorResponse) => {\n        const parsedError = parseApiError(error)\n\n        if (onAuthError) {\n          onAuthError(parsedError.message, parsedError.code)\n        }\n\n        trackEvent({\n          eventName: 'UnexpectedErrorThrown',\n          feature: 'Authentication',\n          // detecting scope, or not passing step when scope is 'NoScope' (eg. bbu)\n          step:\n            scope === 'SignIn'\n              ? 'Signin'\n              : scope === 'SignUp'\n              ? 'Signup'\n              : undefined,\n          params: {\n            custom: {\n              errorCode: parsedError.code,\n              errorDescription: parsedError.message,\n              provider,\n              scope,\n              planId: signupParams?.cbPlan,\n            },\n          },\n          sendEventToIntercom: true,\n        })\n      })\n\n    if (!authResponse) {\n      return\n    }\n\n    const userInfo = authResponse.data?.data\n    const userCredentials = userInfo?.credentials\n\n    if (\n      !userCredentials ||\n      !userCredentials.username ||\n      !userCredentials.idToken ||\n      !userCredentials.accessToken ||\n      !userCredentials.refreshToken\n    ) {\n      if (onAuthError) {\n        console.error('missing auth response', authResponse)\n      }\n      return\n    }\n\n    identifyUserByUserData(userInfo).then((r) =>\n      console.log('App: Identify User: By UserData', r)\n    )\n    trackEvent({\n      eventName: 'SignIn',\n      feature: 'Authentication',\n      step: 'Signin',\n    })\n\n    signInUserSessionCognito({\n      username: userCredentials.username,\n      idToken: userCredentials.idToken,\n      accessToken: userCredentials.accessToken,\n      refreshToken: userCredentials.refreshToken,\n    })\n\n    if (scope === 'SignUp') {\n      // on signup we handle a redirect\n      try {\n        await AuthService.setSessionCookie()\n      } catch (error) {\n        console.error(error instanceof Error ? error.message : 'Unknown error')\n      }\n    } else {\n      // on signin or no scope we also update the UI_AUTH_CHANNEL (Amplify Auth provider)\n      await AuthService.onLoginAsync(false)\n    }\n\n    if (onAuthSuccess && userInfo) {\n      onAuthSuccess(userInfo)\n    }\n\n    deletePersistendSignupParms()\n  }\n\n  const providerRender = () => {\n    switch (provider) {\n      case 'Facebook':\n        // we don't show button fb is signup is sdk fails to load, in other pages (bbu) we show the ButtonErrorUi\n        return sdkFailedToLoad ? (\n          <ButtonErrorUi scope={scope} />\n        ) : scope === 'SignUp' ? (\n          <FacebookButtonCustom\n            onTokenRetrived={handleExternalProviderAuth}\n            scope={scope}\n            onSdkLoadError={handleSdkLoadError}\n          />\n        ) : (\n          <FacebookButtonNative\n            onTokenRetrived={handleExternalProviderAuth}\n            scope={scope}\n            dataWidth={dataWidth}\n            onSdkLoadError={handleSdkLoadError}\n          />\n        )\n      case 'Google':\n        if (scope === 'SignUp' && googleButtonToUseForSignup === 'custom') {\n          return (\n            <div style={{ opacity: isGoogleButtonCustomLoaded ? 1 : 0 }}>\n              <GoogleButtonCustom\n                onTokenRetrived={handleExternalProviderAuth}\n                scope={scope}\n                onGoogleLegacySdkInitSuccess={() => {\n                  // we know that legacy sdk has success:\n                  // If we have a success state, we can make the button visible otherwise, we make the native key load.\n                  // NB: The user will see the loading of a single button!\n                  setIsGoogleButtonCustomLoaded(true)\n                }}\n                onGoogleLegacySdkInitError={() => {\n                  // we know that legacy sdk has fail to laod\n                  setGoogleButtonToUseForSignup('native')\n                }}\n              />\n            </div>\n          )\n        } else {\n          return (\n            <GoogleButtonNative\n              onTokenRetrived={handleExternalProviderAuth}\n              scope={scope}\n            />\n          )\n        }\n    }\n  }\n\n  return <>{providerRender()}</>\n}\n","import React, { useEffect, useRef } from 'react'\nimport {\n  makePopupFeatures,\n  postInitialDataToPopup,\n  usePopupMessageReceiver,\n} from '@components/ConnectedPopupWindow/utils'\n\ninterface AuthorizationPopupProps {\n  urlToOpen: string\n  widthPx?: number\n  heightPx?: number\n  onPopupOpen: (popup: Window) => void\n  onPopupClose: (newData?: unknown) => void\n  popupName?: string\n  initialData?: unknown\n}\n\nexport const ConnectedPopupWindow: React.FC<AuthorizationPopupProps> = ({\n  urlToOpen,\n  widthPx = 700,\n  heightPx = 550,\n  onPopupOpen,\n  onPopupClose,\n  initialData,\n  popupName = 'authPopup',\n}) => {\n  const popup = useRef<Window | null>(null)\n  const isClosedRef = useRef<boolean>(false)\n  const intervalId = useRef<NodeJS.Timer | null>()\n\n  const { dataFromPopup } = usePopupMessageReceiver(popup)\n\n  // Handle opening on new popup and posting of initialData\n  useEffect(() => {\n    // opening a new window as popup\n    const features = makePopupFeatures(widthPx, heightPx)\n    popup.current = window.open(urlToOpen, popupName, features)\n    const currentPopup = popup.current\n\n    if (!currentPopup) {\n      onPopupClose()\n      return\n    }\n\n    //  we send the instance of the just opened popup as callback\n    onPopupOpen(currentPopup)\n    currentPopup.focus()\n\n    // send initial data to popup\n    postInitialDataToPopup({\n      initialData,\n      popup: currentPopup,\n    })\n\n    // cleanup functions\n    return () => {\n      // In case our component in un-mounted, we want to automatically close our popup\n      if (popup.current) {\n        popup.current.close()\n        onPopupClose()\n      }\n    }\n  }, [])\n\n  // constantly check if popup is closed, to sync outer state\n  useEffect(() => {\n    const currentPopup = popup.current\n    if (currentPopup) {\n      intervalId.current = setInterval(() => {\n        if (currentPopup.closed && !isClosedRef.current) {\n          isClosedRef.current = true\n          onPopupClose()\n        }\n      }, 500)\n    }\n\n    return () => {\n      if (intervalId.current) {\n        clearInterval(intervalId.current)\n      }\n    }\n  }, [popup])\n\n  // controlling the receival of data from popup\n  useEffect(() => {\n    if (dataFromPopup) {\n      // console.log('received new data from popup: ', dataFromPopup)\n      onPopupClose(dataFromPopup)\n      popup.current!.close()\n    }\n  }, [dataFromPopup])\n\n  return null\n}\n","import React, { useState } from 'react'\nimport {\n  DropdownMenuDirection,\n  DropdownMenuStyled,\n  DropdownWrapper,\n} from './styled'\nimport { KebabButton } from '@components/Dropdown/KebabButton'\nimport { useClickAway } from '@components/Dropdown/useClickAway'\ntype DropdownLineSeparatorChild = 'last' | 'none'\n\ninterface DropdownProps {\n  $direction?: DropdownMenuDirection\n  dropdownButton?: React.ReactNode\n  $lineSeparatorMenuItem?: DropdownLineSeparatorChild\n}\n\nexport const Dropdown: React.FC<DropdownProps> = ({\n  $direction = 'left',\n  children,\n  dropdownButton,\n  $lineSeparatorMenuItem,\n}) => {\n  const [isOpen, setIsOpen] = useState(false)\n  const closeDropdownHandler = () => setIsOpen(false)\n  const clickAwayRef = useClickAway(closeDropdownHandler)\n\n  return (\n    <DropdownWrapper ref={isOpen ? clickAwayRef : undefined}>\n      <span onClick={() => setIsOpen((p) => !p)}>\n        {dropdownButton || <KebabButton />}\n      </span>\n      <DropdownMenuStyled\n        $direction={$direction}\n        $isOpen={isOpen}\n        $lineSeparatorMenuItem={$lineSeparatorMenuItem}\n        // close menu on item click (leveraging event-bubbling)\n        onClick={closeDropdownHandler}\n      >\n        {children}\n      </DropdownMenuStyled>\n    </DropdownWrapper>\n  )\n}\n","import React from 'react'\nimport { CheckboxStyled } from './styled'\nimport {\n  InputFeedback,\n  InputFeedbackStatus,\n} from '@components/Basic/InputFeedback'\n\nexport interface CheckboxProps {\n  name: string\n  value?: string\n  checked?: boolean\n  onChange?: (e: React.ChangeEvent<HTMLInputElement>) => void\n  disabled?: boolean\n  $status?: InputFeedbackStatus\n}\nexport const Checkbox: React.FC<CheckboxProps> = ({\n  value,\n  checked,\n  onChange,\n  name,\n  disabled,\n  children,\n  $status,\n  ...inputProps\n}) => {\n  return (\n    <React.Fragment>\n      <CheckboxStyled className={`${disabled ? 'disabled' : ''}`}>\n        <label className='container'>\n          {children}\n          <input\n            disabled={disabled}\n            type='checkbox'\n            name={name}\n            id={name}\n            value={value}\n            checked={checked}\n            onChange={onChange}\n            {...inputProps}\n          />\n          <span className='checkmark' />\n        </label>\n      </CheckboxStyled>\n      {$status && <InputFeedback $status={$status} />}\n    </React.Fragment>\n  )\n}\n","import React, { InputHTMLAttributes } from 'react'\nimport { InputDomainStyled } from '@components/Form/InputDomain/styled'\n\nexport interface InputDomainProps\n  extends InputHTMLAttributes<HTMLInputElement> {\n  $protocolLabel: string\n  $domainLabel: string\n}\n\nexport const InputDomain: React.FC<InputDomainProps> = ({\n  $protocolLabel,\n  $domainLabel,\n  ...props\n}) => {\n  return (\n    <InputDomainStyled>\n      <label>{$protocolLabel}</label>\n      <input {...props} type='text' />\n      <label>{$domainLabel}</label>\n    </InputDomainStyled>\n  )\n}\n","import React, { InputHTMLAttributes, useEffect, useRef, useState } from 'react'\nimport {\n  InputStyled,\n  InputWrapperStyled,\n  InputStyledProps,\n  InputSlot,\n} from './styled'\nimport { Label } from '@components/Form/Label'\nimport {\n  InputFeedbackStatus,\n  InputFeedback,\n} from '@components/Basic/InputFeedback'\nimport { FloatingLabelStyled } from '@components/Form/InputSmartSelect/styled'\n\nexport interface InputFieldAttrProps\n  extends InputHTMLAttributes<HTMLInputElement> {\n  $status?: InputFeedbackStatus\n  name: string\n  type: 'text' | 'email' | 'number' | 'password' | 'tel' | 'url'\n  $direction?: InputStyledProps['$direction']\n  $fluid?: boolean\n  slotLeft?: React.ReactNode\n  slotRight?: React.ReactNode\n  label?: string\n  $hasMargin?: boolean\n  defaultLabel?: string\n  floatingLabel?: string\n  fieldIsUnavailable?: boolean\n}\n\nexport const InputField: React.FC<\n  InputFieldAttrProps & {\n    inputRefCallback?: (input: HTMLInputElement | null) => void\n  }\n> = ({\n  label,\n  slotLeft,\n  slotRight,\n  $status,\n  $direction,\n  $fluid,\n  $hasMargin,\n  defaultLabel,\n  floatingLabel,\n  fieldIsUnavailable,\n  inputRefCallback,\n  ...props\n}) => {\n  const inputId = `${props.name}`\n  const [isFocused, setIsFocused] = useState(false)\n  const [hasValue, setHasValue] = useState(false)\n  const inputRef = useRef<HTMLInputElement>(null)\n\n  useEffect(() => {\n    if (inputRefCallback && inputRef.current) {\n      inputRefCallback(inputRef.current)\n    }\n  }, [inputRef.current, inputRefCallback])\n\n  const handleFocus = (event: React.FocusEvent<HTMLInputElement, Element>) => {\n    setIsFocused(true)\n    if (props.onFocus) {\n      props.onFocus(event)\n    }\n  }\n\n  const handleBlur = (event: React.FocusEvent<HTMLInputElement, Element>) => {\n    setIsFocused(false)\n    if (props.onBlur) {\n      props.onBlur(event)\n    }\n  }\n\n  useEffect(() => {\n    if (inputRef.current?.value) {\n      setHasValue(true)\n    } else {\n      setHasValue(false)\n    }\n  }, [inputRef.current?.value])\n\n  return (\n    <InputStyled\n      $direction={$direction || 'column'}\n      $status={$status}\n      type={props.type}\n      name={props.name}\n      id={inputId}\n      $hasMargin={$hasMargin}\n      className={props.className}\n    >\n      {label && (\n        <Label $disabled={props.disabled} htmlFor={inputId} $label={label} />\n      )}\n      <InputWrapperStyled>\n        {floatingLabel && (\n          <FloatingLabelStyled\n            htmlFor={inputId}\n            isFloating={isFocused || hasValue}\n            onClick={() => inputRef?.current?.focus()}\n          >\n            {isFocused || hasValue ? floatingLabel.toUpperCase() : defaultLabel}\n          </FloatingLabelStyled>\n        )}\n        {slotLeft ? <InputSlot $slot={'left'}>{slotLeft}</InputSlot> : null}\n        <input\n          {...props}\n          ref={inputRef}\n          type={props.type}\n          name={props.name}\n          id={inputId}\n          onFocus={handleFocus}\n          onBlur={handleBlur}\n          style={\n            defaultLabel && floatingLabel && (isFocused || hasValue)\n              ? {\n                  paddingTop: '.6rem',\n                  paddingBottom: '.1rem',\n                  marginTop: '.6rem',\n                  height: '34px',\n                  color: (fieldIsUnavailable && 'red') || undefined,\n                }\n              : defaultLabel && floatingLabel && !isFocused && !hasValue\n              ? {\n                  height: '43px',\n                }\n              : {}\n          }\n        />\n        {slotRight ? <InputSlot $slot={'right'}>{slotRight}</InputSlot> : null}\n      </InputWrapperStyled>\n\n      {$status && <InputFeedback $status={$status} />}\n    </InputStyled>\n  )\n}\n","import React, { SelectHTMLAttributes } from 'react'\nimport { SelectStyled, SelectWrapper } from './styled'\nimport { Label } from '@components/Form/Label'\nimport {\n  InputFeedback,\n  InputFeedbackStatus,\n} from '@components/Basic/InputFeedback'\nimport { FiChevronDown } from 'react-icons/fi'\n\nexport type InputSelectOption = {\n  value: string\n  label: string\n  disabled?: boolean\n}\n\nexport interface SelectFieldProps\n  extends SelectHTMLAttributes<HTMLSelectElement> {\n  name: string\n  disabled?: boolean\n  $loading?: boolean\n  $label?: string\n  $direction?: 'column' | 'row'\n  $options: InputSelectOption[]\n  $optionsLabel?: string\n  $status?: InputFeedbackStatus\n  $hasMargin?: boolean\n}\n\nexport const InputSelect: React.FC<SelectFieldProps> = ({\n  name,\n  disabled,\n  $loading,\n  $direction,\n  $label,\n  $options,\n  $optionsLabel,\n  $status,\n  $hasMargin,\n  ...props\n}) => {\n  const selectId = `${name}Select`\n  return (\n    <SelectStyled\n      $options={$options}\n      $direction={$direction || 'column'}\n      name={name}\n      $optionsLabel={$optionsLabel}\n      $status={$status}\n      $hasMargin={$hasMargin}\n    >\n      {$label && (\n        <Label $disabled={disabled} htmlFor={selectId} $label={$label} />\n      )}\n      <SelectWrapper>\n        <select\n          name={name}\n          id={selectId}\n          {...props}\n          disabled={disabled || $loading}\n        >\n          {$optionsLabel && (\n            <option value=''>{$loading ? 'Loading...' : $optionsLabel}</option>\n          )}\n          {$options &&\n            $options.map((option) => (\n              <React.Fragment key={option.value}>\n                <option value={option.value} disabled={option.disabled}>\n                  {option.label}\n                </option>\n              </React.Fragment>\n            ))}\n        </select>\n        <div>\n          <FiChevronDown />\n        </div>\n      </SelectWrapper>\n      {$status && <InputFeedback $status={$status} />}\n    </SelectStyled>\n  )\n}\n","import React, { ClipboardEventHandler, FocusEventHandler } from 'react'\nimport Select from 'react-select'\nimport AsyncSelect from 'react-select/async'\nimport {\n  CustomControl,\n  CustomIndicatorsContainer,\n  CustomMenu,\n  CustomOption,\n  CustomSingleValue,\n  CustomValueContainer,\n  MenuList,\n} from './ComponentOverrides'\nimport { customStyles, greyStyles, SmartSelectWrapper } from './styled'\nimport {\n  InputFeedback,\n  InputFeedbackStatus,\n} from '@components/Basic/InputFeedback'\nimport { useIsLabelTooLong } from '@components/Form/InputSmartSelect/Tooltip'\n\nexport type GroupedSelectValues = { label: string; options: SelectValue[] }[]\n\nexport type SelectValues = {\n  sourceFields: SelectValue[]\n  formula: SelectValue[]\n}\n\nexport type SelectValue = {\n  value: string | number\n  label: string\n  logoUri?: string\n  dropdownPrimaryLabel?: string\n  secondaryLabel?: string\n  icon?: 'new' | 'waiting'\n  isVerified?: boolean\n  type?: string\n  index?: number\n  [key: string]: any\n}\n\nexport interface SmartSelectProps {\n  initialValues: GroupedSelectValues | SelectValue[]\n  defaultValue?: SelectValue | SelectValue[]\n  placeholder?: string\n  isLoading?: boolean\n  isClearable?: boolean\n  isDisabled?: boolean\n  secondaryStyles?: boolean\n  isSearchable?: boolean\n  isMulti?: boolean\n  noOptionsMessageText?: string\n  onSelect: (value: SelectValue | SelectValue[]) => void\n  addNewOptionButton?: {\n    label: string\n    onClick: () => void\n  }\n  addActionClick?: {\n    label: string\n    onClick: () => void\n  }\n  onInputChange?: (value: string) => void\n  hasCustomSearch?: boolean\n  loadOptions?: (\n    inputValue: string\n  ) => Promise<GroupedSelectValues | SelectValue[]>\n  $status?: InputFeedbackStatus\n  onBlur?: FocusEventHandler<HTMLInputElement>\n  name?: string\n  menuIsOpen?: boolean\n  noIcon?: boolean\n  tooltipMessage?: string\n  extraLabel?: boolean\n  emailValidation?: boolean\n  keyDown?: (e: any) => any\n  isVerified?: boolean\n  defaultLabel?: string\n  floatingLabel?: string\n  upDownIconsStyle?: boolean\n  fieldIsUnavailable?: boolean\n  largeUpDownIconsStyle?: boolean\n  isFormulas?: boolean\n  onPaste?: ClipboardEventHandler<HTMLInputElement>\n  dataTestId?: string\n}\n\nexport const InputSmartSelect: React.FC<SmartSelectProps> = ({\n  initialValues,\n  isClearable = true,\n  onSelect,\n  placeholder,\n  defaultValue,\n  isSearchable = false,\n  noOptionsMessageText,\n  addNewOptionButton,\n  onInputChange,\n  hasCustomSearch,\n  isLoading,\n  loadOptions,\n  isMulti,\n  isDisabled,\n  $status,\n  onBlur,\n  name,\n  menuIsOpen,\n  noIcon,\n  tooltipMessage,\n  addActionClick,\n  extraLabel,\n  secondaryStyles,\n  emailValidation,\n  keyDown,\n  isVerified,\n  isFormulas,\n  defaultLabel,\n  floatingLabel,\n  upDownIconsStyle,\n  fieldIsUnavailable,\n  largeUpDownIconsStyle,\n  onPaste,\n  dataTestId,\n}) => {\n  const { wrapperEl, selectedSingleValueEl, isLabelTooLong } =\n    useIsLabelTooLong({\n      defaultValue: defaultValue as SelectValue,\n    })\n\n  // use this object to pass extra props and read them inside custom components (overrides)\n  const extraProps = {\n    addNewOptionButton,\n    addActionClick,\n    extraLabel,\n    noIcon,\n    emailValidation,\n    isVerified,\n    defaultLabel,\n    floatingLabel,\n    upDownIconsStyle,\n    largeUpDownIconsStyle,\n    selectedSingleValueEl,\n    isFormulas,\n    // this is the selected value to be displayed when text is too long\n    tooltipInternalLabel: isLabelTooLong\n      ? (defaultValue as SelectValue).label\n      : undefined,\n    tooltipExternalMessage: tooltipMessage,\n    fieldIsUnavailable,\n  }\n\n  const noDropdownIndicator =\n    isSearchable || loadOptions\n      ? { DropdownIndicator: () => null, IndicatorSeparator: () => null }\n      : {}\n\n  return (\n    <SmartSelectWrapper\n      ref={wrapperEl}\n      isLoading={isLoading}\n      datatest-id={dataTestId}\n    >\n      {loadOptions ? (\n        <AsyncSelect\n          components={{\n            Option: CustomOption,\n            SingleValue: CustomSingleValue,\n            Control: CustomControl,\n            Menu: CustomMenu,\n            MenuList: MenuList,\n            ValueContainer: CustomValueContainer,\n            IndicatorsContainer: CustomIndicatorsContainer,\n            ...noDropdownIndicator,\n          }}\n          styles={secondaryStyles ? greyStyles : customStyles}\n          isClearable={isClearable}\n          // always searchable when async\n          isSearchable\n          defaultOptions={initialValues}\n          defaultValue={defaultValue}\n          onChange={(selectedValue) => {\n            onSelect(selectedValue as SelectValue)\n          }}\n          loadOptions={loadOptions}\n          placeholder={isLoading ? 'Loading...' : placeholder}\n          onBlur={onBlur}\n          name={name}\n          menuIsOpen={menuIsOpen}\n          isDisabled={isLoading || isDisabled}\n          {...extraProps}\n        />\n      ) : (\n        <Select\n          menuIsOpen={menuIsOpen}\n          options={initialValues}\n          defaultValue={defaultValue}\n          components={{\n            Option: CustomOption,\n            SingleValue: CustomSingleValue,\n            Control: CustomControl,\n            Menu: CustomMenu,\n            MenuList: MenuList,\n            ValueContainer: CustomValueContainer,\n            IndicatorsContainer: CustomIndicatorsContainer,\n            ...noDropdownIndicator,\n          }}\n          styles={secondaryStyles ? greyStyles : customStyles}\n          isClearable={isClearable}\n          placeholder={isLoading ? 'Loading...' : placeholder}\n          noOptionsMessage={\n            noOptionsMessageText ? () => noOptionsMessageText : undefined\n          }\n          isDisabled={isLoading || isDisabled}\n          isSearchable={isSearchable || hasCustomSearch}\n          onChange={(selectedValue) => {\n            onSelect(selectedValue as SelectValue)\n          }}\n          onInputChange={(newValue) => {\n            if (onInputChange) {\n              onInputChange(newValue)\n            }\n          }}\n          filterOption={hasCustomSearch ? () => true : undefined}\n          isMulti={isMulti}\n          onBlur={onBlur}\n          name={name}\n          onKeyDown={keyDown}\n          {...extraProps}\n        />\n      )}\n      {$status && <InputFeedback $status={$status} />}\n    </SmartSelectWrapper>\n  )\n}\n","import React, { InputHTMLAttributes } from 'react'\nimport {\n  LabelStyled,\n  SpanStyled,\n  WrapperStyled,\n} from '@components/Form/InputToggle/styled'\n\nexport type SpanStyle = 'primary' | 'dark'\n\nexport interface InputToggleProps\n  extends InputHTMLAttributes<HTMLInputElement> {\n  $labelRight?: string\n  $labelLeft?: string\n  $isChecked?: boolean\n  $variant?: SpanStyle\n  $size?: 'large' | 'small'\n  $isDisabled?: boolean\n}\n\nexport const InputToggle: React.FC<InputToggleProps> = ({\n  $isChecked,\n  $variant,\n  $labelLeft,\n  $labelRight,\n  $size,\n  $isDisabled,\n  ...props\n}) => {\n  return (\n    <WrapperStyled $size={$size} $variant={$variant} $isChecked={$isChecked}>\n      {$labelLeft && (\n        <label style={{ marginRight: '1rem' }}>{$labelLeft}</label>\n      )}\n      <LabelStyled $isDisabled={$isDisabled} $size={$size}>\n        <input\n          disabled={$isDisabled}\n          checked={$isChecked}\n          type='checkbox'\n          {...props}\n        />\n        <SpanStyled $size={$size} $variant={$variant} $isChecked={$isChecked} />\n      </LabelStyled>\n      {$labelRight && (\n        <label style={{ marginLeft: '1rem' }}>{$labelRight}</label>\n      )}\n    </WrapperStyled>\n  )\n}\n","import React from 'react'\nimport { LabelStyled } from './styled'\n\nexport interface LabelProps {\n  $disabled?: boolean\n  $label?: string\n  htmlFor?: string\n  allowsHtml?: boolean\n}\n\nexport const Label: React.FC<LabelProps> = ({\n  $disabled,\n  htmlFor,\n  $label,\n  allowsHtml,\n}) => {\n  const labelId = `${htmlFor}`\n  return allowsHtml ? (\n    <LabelStyled\n      $disabled={$disabled}\n      htmlFor={labelId}\n      dangerouslySetInnerHTML={{\n        __html: $label || '',\n      }}\n    />\n  ) : (\n    <LabelStyled $disabled={$disabled} htmlFor={labelId}>\n      {$label}\n    </LabelStyled>\n  )\n}\n","import React from 'react'\nimport styled from 'styled-components'\nimport { Label } from '@components/Form/Label'\nimport ReactTooltip from 'react-tooltip'\nimport { IoIosHelpCircleOutline } from 'react-icons/io'\nimport { useTranslation } from 'react-i18next'\n\nconst LabelWrapper = styled.div`\n  display: flex;\n  align-items: center;\n  svg {\n    margin-left: 0.5rem;\n    cursor: pointer;\n  }\n`\n\nconst DocUrl = styled.div`\n  margin-left: auto;\n  font-size: 0.8rem; /* same as label */\n  text-align: right;\n`\n\ninterface Props {\n  label: string\n  docUrl?: string\n  isRequired?: boolean\n  htmlFor?: string\n  tooltip?: string\n}\n\nexport const LabelWithDocTooltip: React.FC<Props> = ({\n  label,\n  docUrl,\n  isRequired,\n  htmlFor,\n  tooltip,\n}) => {\n  const { t } = useTranslation()\n  const labelWithRequired = isRequired ? `${label} <strong>(*)</strong>` : label\n\n  return (\n    <LabelWrapper>\n      <div>\n        <Label htmlFor={htmlFor} $label={labelWithRequired} allowsHtml />\n        {tooltip ? (\n          <>\n            <IoIosHelpCircleOutline size={'0.9em'} data-tip={tooltip} />\n            <ReactTooltip\n              place={'bottom'}\n              border\n              backgroundColor={'rgba(0, 0, 0, 0.7)'}\n              borderColor={'#f6f7f8'}\n              className={'reactTooltipSmall'}\n            />\n          </>\n        ) : null}\n      </div>\n      {docUrl ? (\n        <DocUrl>\n          <a href={docUrl} target={'_blank'} rel={'noopener noreferrer'}>\n            {t('nbee.bridgeBuilder.settingDocUrlText')}\n          </a>\n        </DocUrl>\n      ) : null}\n    </LabelWrapper>\n  )\n}\n","import React, { ReactElement, Ref, useEffect, useState } from 'react'\nimport CreatableSelect from 'react-select/creatable'\nimport {\n  InputFeedback,\n  InputFeedbackStatus,\n} from '@components/Basic/InputFeedback'\nimport {\n  CustomMenuList,\n  CustomMultiValue,\n  CustomOption,\n} from '@components/Form/MultiCreatableCustom/ComponentOverrides'\nimport { ApiFormulasSchemaResponseData } from 'BackendApi'\nimport {\n  customStyles,\n  SourceIcon,\n} from '@components/Form/MultiCreatableCustom/styled'\nimport { MappedField, MappedFieldMapping, MappedFieldType } from 'Nbee'\nimport {\n  createDefaultValues,\n  createOptions,\n  convertToMapping,\n} from '@components/Form/MultiCreatableCustom/utils'\nimport { useTranslation } from 'react-i18next'\nimport Select, { SelectInstance } from 'react-select'\n\nexport type SelectValueMulti = {\n  label: string\n  value: string\n  lastValue?: string\n  selectId?: string\n  fieldType?: MappedFieldType\n  formulaDescription?: string\n  formulaCategory?: string\n  isNewFormula?: boolean\n  sourceLogoComponent?: ReactElement\n}\n\nexport type CustomCreatableAdditionalProps = {\n  hasFormula?: boolean\n  handleTabChange?: (tabName: TabType) => void\n  activeTab?: TabType\n  hasPicklist?: boolean\n  sourceLogoComponent?: ReactElement\n  userHasFormulaEnabled?: boolean\n  onRedirectToPricing?: (redirect: boolean) => void\n}\n\nexport type TabType = 'fields' | 'formulas' | 'custom'\n\ninterface Props {\n  mappedField?: MappedField\n  fieldIndex?: number\n  onMappingChange?: (mapping: MappedFieldMapping[]) => void\n  onFormulaSelect?: (mappingItem: MappedFieldMapping) => void\n  onRedirectToPricing?: (redirect: boolean) => void\n  sourceOptions?: SelectValueMulti[]\n  picklistOptions?: SelectValueMulti[]\n  userHasFormulaEnabled?: boolean\n  formulaSchema?: ApiFormulasSchemaResponseData[]\n  sourceLogoUri?: string\n  placeholder?: string\n  isLoading?: boolean\n  isDisabled?: boolean\n  $status?: InputFeedbackStatus\n  dataTestId?: string\n  isCreatable?: boolean\n  excludeSelected?: boolean\n}\n\nexport const MultiCreatableCustom: React.FC<Props> = ({\n  mappedField,\n  fieldIndex = 0, // default value must be 0\n  onMappingChange,\n  onFormulaSelect,\n  onRedirectToPricing,\n  sourceOptions,\n  picklistOptions,\n  userHasFormulaEnabled,\n  formulaSchema,\n  sourceLogoUri,\n  placeholder,\n  isLoading,\n  isDisabled,\n  $status,\n  dataTestId,\n  isCreatable = true,\n  excludeSelected = false,\n}) => {\n  const [selectedOptions, setSelectedOptions] = useState<SelectValueMulti[]>([])\n  const [menuIsOpen, setMenuIsOpen] = useState(false)\n  const { t } = useTranslation()\n\n  const hasPicklist =\n    picklistOptions &&\n    mappedField?.picklist &&\n    mappedField?.picklist?.length > 0\n  const defaultActiveTab = hasPicklist ? 'custom' : 'fields'\n  const hasFormula = formulaSchema && formulaSchema.length > 0\n  const [activeTab, setActiveTab] = useState<TabType>(defaultActiveTab)\n\n  // Filter options if excludeSelected is true\n  const filteredSourceOptions = excludeSelected\n    ? sourceOptions?.filter(\n        (option) =>\n          !selectedOptions.some((selected) => selected.value === option.value)\n      )\n    : sourceOptions\n\n  const options = createOptions(\n    filteredSourceOptions || [],\n    picklistOptions || [],\n    formulaSchema || [],\n    activeTab\n  )\n  const defaultValues =\n    createDefaultValues(mappedField?.mapping || [], sourceOptions || [], t) ||\n    []\n\n  const optionsDisabled = !userHasFormulaEnabled && activeTab === 'formulas'\n\n  const sourceLogoComponent = (\n    <SourceIcon src={sourceLogoUri} alt='Source logo' />\n  )\n\n  // Wrapper function to update both local (react-select) and parent (formik) state\n  const handleMappingChange = (\n    newOptions: SelectValueMulti[], // New selected options\n    selectedOption?: SelectValueMulti // The option that was selected/deselected (if any)\n  ) => {\n    // console.log('handle mapping change is called', newOptions, selectedOption)\n    // Convert the new selected options to an array of MappedFieldMapping objects for the Formik context\n    if (!onMappingChange) return\n    const newMapping = convertToMapping(\n      newOptions,\n      mappedField ?? { mappingType: 'manual', mapping: [] }\n    )\n\n    setSelectedOptions(newOptions) // Update local state with the new options\n    onMappingChange(newMapping) // Notify parent component with new mapping array\n\n    if (!onFormulaSelect) return\n    // Check if the selected option is a formula and pass the mapping object to the parent component\n    if (selectedOption?.fieldType === 'formula') {\n      const newMappingWithFormula: MappedFieldMapping = {\n        id: selectedOption.selectId,\n        sourceFieldId: null,\n        fieldType: 'formula',\n        text: null,\n        formula: {\n          id: selectedOption.value,\n          params:\n            mappedField?.mapping.find((m) => m.id === selectedOption.selectId)\n              ?.formula?.params || [],\n          isNew: selectedOption.isNewFormula ?? true, // Set isNew to true if it's a new formula, otherwise false when editing an existing one\n        },\n      }\n      onFormulaSelect(newMappingWithFormula)\n    }\n  }\n\n  const handleTabChange = (tabName: TabType) => {\n    setActiveTab(tabName)\n  }\n\n  const SelectComponent = isCreatable ? CreatableSelect : Select\n\n  const selectRef: Ref<SelectInstance<any, any>> =\n    React.useRef<SelectInstance | null>(null)\n  const handleKeyDown = (e: React.KeyboardEvent<HTMLElement>) => {\n    // Dynamically determine the available tabs based on conditions\n    const availableTabs: TabType[] = ['fields', 'formulas'] // Always available\n    if (hasPicklist) availableTabs.unshift('custom') // Add 'custom' at the beginning if available\n\n    const currentTabIndex = availableTabs.indexOf(activeTab)\n\n    if (e.key === 'Tab') {\n      e.preventDefault()\n      // Move to the next tab (cyclically)\n      const nextTabIndex = (currentTabIndex + 1) % availableTabs.length\n      handleTabChange(availableTabs[nextTabIndex])\n    }\n    if (e.key === 'Backspace' && selectRef.current?.props.inputValue === '') {\n      e.preventDefault()\n      // console.log('selectValue', selectRef.current)\n      handleMappingChange(selectedOptions.slice(0, -1))\n    }\n    if (e.key === ' ' && selectRef.current?.props.inputValue === '') {\n      e.preventDefault()\n      handleMappingChange([\n        ...selectedOptions,\n        {\n          label: 'SPACE',\n          value: ' ',\n          fieldType: 'text',\n          selectId: `${fieldIndex}-SPACE-${selectedOptions.length}`,\n        },\n      ])\n    }\n  }\n\n  const extraProps: CustomCreatableAdditionalProps = {\n    handleTabChange,\n    activeTab,\n    hasPicklist,\n    sourceLogoComponent,\n    hasFormula,\n    userHasFormulaEnabled,\n    onRedirectToPricing,\n  }\n\n  // Update selectedOptions when mappedField changes\n  // This is necessary to keep the selected options in sync with the mappedField\n  // (e.g. when the user adds a new formula, we want to display the label including the selected\n  // field from the FormulaModal)\n  useEffect(() => {\n    const newOptions = createDefaultValues(\n      mappedField?.mapping || [],\n      sourceOptions || [],\n      t\n    )\n    setSelectedOptions(newOptions as SelectValueMulti[])\n  }, [mappedField?.mapping])\n\n  return (\n    <div data-testid={dataTestId}>\n      <SelectComponent\n        ref={selectRef}\n        options={options}\n        styles={customStyles}\n        components={{\n          MultiValue: CustomMultiValue,\n          IndicatorsContainer: () => null, // disable indicators\n          Option: CustomOption,\n          MenuList: CustomMenuList,\n          MultiValueRemove: () => null, // disable default MultiValueRemove component\n        }}\n        value={selectedOptions}\n        defaultValue={defaultValues}\n        placeholder={isLoading ? 'Loading...' : placeholder}\n        onKeyDown={handleKeyDown}\n        openMenuOnClick={true}\n        menuIsOpen={menuIsOpen}\n        onMenuOpen={() => setMenuIsOpen(true)}\n        onMenuClose={() => setMenuIsOpen(false)}\n        hideSelectedOptions={false}\n        isDisabled={isLoading || isDisabled}\n        isMulti\n        isClearable={false}\n        isOptionSelected={() => false}\n        isOptionDisabled={() => optionsDisabled || false}\n        isValidNewOption={(inputValue) => {\n          // Necessary to allow adding value with the same text\n          return inputValue.trim().length > 0\n        }}\n        onChange={(selectedValue, actionMeta) => {\n          switch (actionMeta.action) {\n            case 'select-option': {\n              const selectedOption = actionMeta.option as SelectValueMulti\n              // when selectedOption is an array, is because the editFormula button was clicked.\n              // Otherwise, a new option has been added\n              // console.log('selectedOption', selectedOption)\n              if (selectedOption.value) {\n                // If we're adding a new option, we want to generate a new selectId\n                // to avoid conflicts with existing options,\n                // and to update the local and parent states\n                // console.log('selectedOption', selectedOption)\n                const mappingIndex = selectedOptions.length\n                const identifier = selectedOption.value\n                // Generate unique identifier for the new option\n                const selectId = `${fieldIndex}-${identifier}-${mappingIndex}`\n\n                const updatedOption = {\n                  ...selectedOption,\n                  selectId,\n                }\n\n                // Update selectedOptions with the new or updated option\n                handleMappingChange(\n                  [...selectedOptions, updatedOption],\n                  updatedOption\n                )\n              } else {\n                // we are editing an existing formula, so we already have the selectId\n                handleMappingChange(\n                  [...selectedOptions],\n                  selectedValue as unknown as SelectValueMulti\n                )\n              }\n              break\n            }\n\n            case 'deselect-option': {\n              // Filter out the deselected option using the selectId previously generated,\n              // then update local and parent states\n              handleMappingChange(\n                selectedOptions.filter(\n                  (option) =>\n                    option.selectId !==\n                    (selectedValue as SelectValueMulti).selectId\n                )\n              )\n              break\n            }\n\n            case 'create-option': {\n              // Handle new 'text' options created by the user\n              const newOption = {\n                label: (actionMeta.option as SelectValueMulti).label,\n                value: (actionMeta.option as SelectValueMulti).value,\n                fieldType: 'text' as MappedFieldType, // Default to 'text' for new custom options\n                isFormula: false,\n                selectId: `${fieldIndex}-${\n                  (actionMeta.option as SelectValueMulti).value\n                }-${selectedOptions.length}`, // Generate a new selectId for the custom option\n              }\n              // update local and parent states\n              handleMappingChange([...selectedOptions, newOption])\n              break\n            }\n          }\n        }}\n        {...extraProps}\n      />\n      {$status && <InputFeedback $status={$status} />}\n    </div>\n  )\n}\n","import React, { forwardRef, InputHTMLAttributes } from 'react'\nimport { TextareaWrapper, TextareaStyled } from './styled'\nimport { Label } from '@components/Form/Label'\nimport {\n  InputFeedbackStatus,\n  InputFeedback,\n} from '@components/Basic/InputFeedback'\n\nexport interface InputFieldAttrProps\n  extends InputHTMLAttributes<HTMLTextAreaElement> {\n  $status?: InputFeedbackStatus\n  name: string\n  label?: string\n}\n\nexport const Textarea = forwardRef<HTMLTextAreaElement, InputFieldAttrProps>(\n  ({ label, $status, ...props }, ref) => {\n    const inputId = `${props.name}`\n\n    return (\n      <TextareaWrapper>\n        {label && (\n          <Label $disabled={props.disabled} htmlFor={inputId} $label={label} />\n        )}\n        <TextareaStyled ref={ref} $status={$status} {...props} />\n        {$status && <InputFeedback $status={$status} />}\n      </TextareaWrapper>\n    )\n  }\n)\n\nTextarea.displayName = 'Textarea'\n","import React from 'react'\nimport {\n  InputSmartSelect,\n  SelectValue,\n} from '@components/Form/InputSmartSelect'\nimport { useField, useFormikContext } from 'formik'\nimport { Label } from '@components/Form/Label'\nimport { InputFeedback } from '@components/Basic/InputFeedback'\nimport { FormikInputSmartSelectStyled } from './styled'\n\nexport interface Props {\n  initialValues: SelectValue[]\n  name: string\n  label?: string\n  isLoading?: boolean\n  secondaryStyles?: boolean\n  noIcon?: boolean\n  isClearable?: boolean\n}\nexport const FormikInputSmartSelect: React.FC<Props> = ({\n  initialValues,\n  name,\n  label,\n  isLoading,\n  secondaryStyles,\n  noIcon,\n  isClearable,\n}) => {\n  const [field, meta, helpers] = useField(name)\n  const errorMessage = meta.touched && meta.error\n  const defaultValue = initialValues.find((item) => item.value === field.value)\n\n  return (\n    <FormikInputSmartSelectStyled secondaryStyles={secondaryStyles}>\n      <Label $label={label} />\n      <InputSmartSelect\n        onBlur={() => {\n          helpers.setTouched(true)\n        }}\n        isLoading={isLoading}\n        key={defaultValue?.value}\n        defaultValue={defaultValue}\n        initialValues={initialValues || []}\n        onSelect={(selectedValue) => {\n          const currentValue = selectedValue as SelectValue | null\n          helpers.setValue(currentValue?.value || '')\n        }}\n        secondaryStyles={secondaryStyles}\n        noIcon={noIcon}\n        isClearable={isClearable}\n      />\n      {errorMessage ? (\n        <InputFeedback $status={{ error: errorMessage }} />\n      ) : null}\n    </FormikInputSmartSelectStyled>\n  )\n}\n","import React, { useRef, useState } from 'react'\nimport { BsQuestionCircle } from 'react-icons/bs'\nimport { ImCopy } from 'react-icons/im'\nimport ReactTooltip from 'react-tooltip'\nimport {\n  InputWrapper,\n  IconWrapper,\n  InputField,\n  CopyText,\n  LabelWrapper,\n} from './styled'\n\ninterface Props {\n  label?: string\n  inputValue?: string\n  tooltip?: string\n  docUrl?: string\n  linkKey?: string\n}\n\nexport const InputAutoSelectCopy: React.FC<Props> = ({\n  label,\n  inputValue,\n  tooltip,\n  docUrl,\n  linkKey,\n  ...props\n}) => {\n  const inputRef = useRef<HTMLInputElement | null>(null)\n  const [isCopied, setIsCopied] = useState(false)\n\n  const handleCopyLink = () => {\n    inputRef?.current?.select()\n    document.execCommand('copy')\n    setIsCopied(true)\n  }\n\n  return (\n    <InputWrapper>\n      <LabelWrapper>\n        {label && <label>{label}</label>}\n        {docUrl && (\n          <a href={docUrl} target={'_blank'} rel={'noopener noreferrer'}>\n            {linkKey}\n          </a>\n        )}\n      </LabelWrapper>\n      <InputField>\n        <ReactTooltip\n          id='url'\n          place='top'\n          type={'light'}\n          effect='solid'\n          className='customTooltipInput'\n        >\n          {inputValue}\n        </ReactTooltip>\n        <input\n          data-tip\n          data-for='url'\n          ref={inputRef}\n          type='text'\n          value={inputValue}\n          readOnly\n          onClick={handleCopyLink}\n          {...props}\n        />\n        <IconWrapper>\n          {tooltip ? (\n            <ReactTooltip\n              id='url-info'\n              place='bottom'\n              type={'light'}\n              effect='solid'\n              className='customTooltipIcon'\n            >\n              {tooltip}\n            </ReactTooltip>\n          ) : null}\n          <BsQuestionCircle size={20} data-tip data-for='url-info' />\n          <ImCopy size={20} onClick={handleCopyLink} />\n        </IconWrapper>\n      </InputField>\n      {isCopied && <CopyText>Copied</CopyText>}\n    </InputWrapper>\n  )\n}\n","import React, { useEffect, useRef, useState } from 'react'\n\nimport {\n  PanelPopupBody,\n  PanelPopupButtonClose,\n  PanelPopupContent,\n  PanelPopupHeader,\n  PanelPopupImageWrapper,\n  PanelPopupStyled,\n  PanelPopupWrapper,\n} from './styled'\nimport { useTranslation } from 'react-i18next'\nimport { IoCloseOutline } from 'react-icons/io5'\n\nexport interface PanelPopupProps {\n  image?: string\n  dismissable?: boolean\n  onClose?: () => void\n  content?: React.ReactNode\n  position?: 'floating' | 'bottom'\n}\n\nexport const PanelPopup: React.VFC<PanelPopupProps> = ({\n  image,\n  content,\n  onClose,\n  dismissable,\n  position,\n}) => {\n  const { t } = useTranslation()\n  const [isVisible, setIsVisible] = useState(false)\n  const timeoutId = useRef<NodeJS.Timeout>()\n\n  useEffect(() => {\n    timeoutId.current = setTimeout(() => {\n      setIsVisible(true)\n    }, 1)\n\n    return () => {\n      if (timeoutId.current) {\n        clearTimeout(timeoutId.current)\n      }\n    }\n  }, [])\n\n  return (\n    <PanelPopupStyled\n      position={position || 'floating'}\n      className={isVisible ? 'visible' : ''}\n    >\n      <PanelPopupWrapper>\n        <PanelPopupHeader>\n          {dismissable ? (\n            <PanelPopupButtonClose\n              onClick={() => {\n                if (onClose) {\n                  onClose()\n                }\n              }}\n            >\n              <IoCloseOutline /> {t('common.close')}\n            </PanelPopupButtonClose>\n          ) : null}\n        </PanelPopupHeader>\n\n        <PanelPopupBody>\n          <PanelPopupContent>{content}</PanelPopupContent>\n          {image ? (\n            <PanelPopupImageWrapper>\n              <img src={image} />\n            </PanelPopupImageWrapper>\n          ) : null}\n        </PanelPopupBody>\n      </PanelPopupWrapper>\n    </PanelPopupStyled>\n  )\n}\n","import React, { createContext, useEffect, useRef, useState } from 'react'\nimport {\n  PanelBody,\n  PanelBodyInner,\n  PanelFooter,\n  PanelFooterContainer,\n  PanelFooterLeft,\n  PanelFooterRight,\n  PanelFooterWrapper,\n  PanelHead,\n  PanelStyled,\n  PanelWrapper,\n} from './styled'\nimport { PanelPopup, PanelPopupProps } from '@components/PanelPopup'\nimport { ProgressBar } from '@components/Panel/ProgressBar'\n\ninterface PanelPopupContext {\n  popup?: PanelPopupProps\n  sendPopup?: (popup?: PanelPopupProps) => void\n}\n\nexport const PanelPopupContext = createContext<PanelPopupContext>({})\n\ninterface PanelProps {\n  head?: React.ReactNode\n  body?: React.ReactNode\n  progressBarPercentage?: number\n  footer?: {\n    left?: React.ReactNode\n    right?: React.ReactNode\n  } | null\n}\n\nexport const Panel: React.FC<PanelProps> = ({\n  head,\n  body,\n  footer,\n  progressBarPercentage,\n}) => {\n  const [popup, setPopup] = useState<PanelPopupProps | undefined>()\n  const [bodyPaddingBottom, setBodyPaddingBottom] = useState<number>()\n\n  const bodyOuterRef = useRef<HTMLDivElement | null>(null)\n  const bodyInnerRef = useRef<HTMLDivElement | null>(null)\n  const footerRef = useRef<HTMLDivElement | null>(null)\n\n  // when bodyInner has scroll, we set a top seprator for footer\n  const bodyOuterHeight = bodyOuterRef.current?.clientHeight\n  const bodyInnerHeight = bodyInnerRef.current?.clientHeight\n  const footerHasTopSeparator =\n    bodyOuterHeight && bodyInnerHeight\n      ? bodyInnerHeight > bodyOuterHeight\n      : false\n\n  // To avoid that footer will overlaps body content we set a padding bottom equal to footer height\n  useEffect(() => {\n    if (footerRef.current) {\n      setBodyPaddingBottom(footerRef.current?.clientHeight)\n    }\n  }, [footerRef])\n\n  return (\n    <PanelPopupContext.Provider\n      value={{\n        popup,\n        sendPopup: setPopup,\n      }}\n    >\n      <PanelStyled extraPadding={Boolean(footer)}>\n        <PanelWrapper>\n          {progressBarPercentage ? (\n            <ProgressBar percentage={progressBarPercentage} />\n          ) : null}\n          {head ? (\n            <PanelHead>{head}</PanelHead>\n          ) : (\n            // in case of no head we keep some top space\n            <div style={{ paddingTop: '0' }} />\n          )}\n          {body || footer ? (\n            <PanelBody\n              $hasExtraTopPadding={!head}\n              ref={bodyOuterRef}\n              $panelHasHead={!!head}\n            >\n              <PanelBodyInner\n                ref={bodyInnerRef}\n                paddingBottom={footer ? bodyPaddingBottom : 0}\n              >\n                {body}\n              </PanelBodyInner>\n            </PanelBody>\n          ) : null}\n        </PanelWrapper>\n      </PanelStyled>\n      {/* footer */}\n      {footer ? (\n        <PanelFooter ref={footerRef}>\n          <PanelFooterContainer $showTopSeparator={footerHasTopSeparator}>\n            {popup ? (\n              <PanelPopup\n                {...popup}\n                onClose={() => {\n                  setPopup(undefined)\n                  if (popup.onClose) {\n                    popup.onClose()\n                  }\n                }}\n              />\n            ) : null}\n\n            <PanelFooterWrapper>\n              <PanelFooterLeft>{footer.left}</PanelFooterLeft>\n              <PanelFooterRight>{footer.right}</PanelFooterRight>\n            </PanelFooterWrapper>\n          </PanelFooterContainer>\n        </PanelFooter>\n      ) : null}\n    </PanelPopupContext.Provider>\n  )\n}\n","import React, { useEffect } from 'react'\n\ntype WindowWithGrecaptchh = Window &\n  typeof globalThis & {\n    grecaptcha: any\n  }\n\nexport type GetCaptchaToken = () => Promise<string | undefined>\n\ninterface Props {\n  children: (renderProps: {\n    getCaptchaToken: GetCaptchaToken\n  }) => React.ReactNode\n}\n\nconst googleReCaptchaKey = process.env.REACT_GOOGLE_RECAPTCHA_KEY || ''\n\nexport const ReCaptcha: React.VFC<Props> = ({ children }) => {\n  // we generate the token everytime a child component calls this method\n  const getCaptchaToken: GetCaptchaToken = async () => {\n    if (!googleReCaptchaKey) {\n      return 'recaptcha-not-enabled'\n    }\n\n    const w = window as WindowWithGrecaptchh\n    if (!w.grecaptcha) {\n      console.log('recaptcha lib not found')\n      return\n    }\n\n    try {\n      const token: string = await w.grecaptcha.execute(\n        `${process.env.REACT_GOOGLE_RECAPTCHA_KEY}`,\n        {\n          action: 'submit',\n        }\n      )\n      return token\n    } catch (e: any) {\n      console.log(e, e.message)\n      return 'cannot-retrieve-recaptcha-token'\n    }\n  }\n\n  useEffect(() => {\n    if (!googleReCaptchaKey) {\n      return\n    }\n\n    if (document.getElementById('google-recaptcha')) {\n      console.log('Captcha script exists already')\n      return\n    }\n\n    // Inject recaptcha script in DOM\n    const script = document.createElement('script')\n    script.src = `https://www.google.com/recaptcha/api.js?render=${googleReCaptchaKey}`\n    script.id = 'google-recaptcha'\n    document.body.appendChild(script)\n\n    // cleanup function to remove script on component unmount\n    return () => {\n      const googleScript = document.getElementById('google-recaptcha')\n      // remove element in DOM\n      document.querySelector('.grecaptcha-badge')?.remove()\n      if (googleScript) {\n        googleScript.remove()\n      }\n    }\n  }, [])\n\n  return <>{children({ getCaptchaToken })}</>\n}\n","import React from 'react'\nimport { Trans } from 'react-i18next'\n\ninterface Props {\n  i18nKey: string\n  values?: Record<string, string | number>\n  count?: number\n}\n\nexport const Translate: React.FC<Props> = ({ i18nKey, values, count }) => {\n  return (\n    <Trans\n      i18nKey={i18nKey as never}\n      components={{\n        b: <strong />,\n        strong: <strong />,\n        a: <a />,\n        br: <br />,\n      }}\n      values={values}\n      count={count}\n    />\n  )\n}\n","import React, { Fragment } from 'react'\nimport { PageEditor } from '@app/layouts/PageEditor'\nimport { Formik, Form, FormikHelpers } from 'formik'\nimport { Panel } from '@components/Panel'\nimport { FormInner } from './FormInner'\nimport { SignupSurveyFormValues } from 'SignupSurvey'\nimport { initialValues, makeValidationSchema } from './formUtils'\nimport { useTranslation } from 'react-i18next'\nimport { AppLogos, BbuData } from '@features/SignupSurvey/AppLogos'\n\ninterface Props {\n  bbuData?: BbuData\n  onSubmit: (\n    values: SignupSurveyFormValues,\n    formikHelpers: FormikHelpers<SignupSurveyFormValues>\n  ) => void\n}\n\nexport const SignupSurvey: React.VFC<Props> = ({ bbuData, onSubmit }) => {\n  const { t } = useTranslation()\n  const steps = [\n    {\n      title: t('auth.signupSurvey.stepName'),\n      label: t('auth.signupSurvey.stepName'),\n    },\n    {},\n    {},\n  ]\n\n  return (\n    <Formik\n      initialValues={initialValues}\n      validationSchema={makeValidationSchema(t)}\n      onSubmit={(values, formikHelpers) => {\n        onSubmit(values, formikHelpers)\n      }}\n    >\n      {() => {\n        return (\n          <Fragment>\n            <PageEditor steps={steps} activeStep={0} hasTopBar>\n              <Form>\n                <Panel\n                  head={bbuData && <AppLogos bbuData={bbuData} />}\n                  body={<FormInner />}\n                />\n              </Form>\n            </PageEditor>\n          </Fragment>\n        )\n      }}\n    </Formik>\n  )\n}\n","import React, { lazy, Suspense } from 'react'\nimport { useGetUserInfo } from '@app/api/getUserInfo'\nimport { Route, Switch } from 'react-router-dom'\nimport { appRoutes } from '@app/routes'\n\nconst InfoBarComponentLazy = lazy(() => import('./InfoBarComponent'))\n\nconst SuperUserInfoBarWithQuery: React.VFC = () => {\n  const { data: userData } = useGetUserInfo()\n\n  if (userData?.user && userData?.superUser?.email) {\n    return (\n      <Suspense fallback={null}>\n        <InfoBarComponentLazy\n          fullName={`${userData.user.firstName} ${userData.user.lastName}`}\n          email={userData.user.email || ''}\n        />\n      </Suspense>\n    )\n  }\n\n  return null\n}\n\n// In case we are in logout path we can't load the SuperUserInfoBarWithQuery\n// because it will call `useGetUserInfo` (user/me) api that will generate an endless loop\n// `user/me` returns 401 -> redirect to logout -> calls user/me again -> 401 -> new redirection\nexport const SuperUserInfoBar: React.VFC = () => {\n  return (\n    <Switch>\n      <Route path={appRoutes.logout.path}>\n        <div />\n      </Route>\n      <Route path='/*' exact>\n        <SuperUserInfoBarWithQuery />\n      </Route>\n    </Switch>\n  )\n}\n","import React from 'react'\nimport { Button } from '@components/Basic/ButtonNbe'\nimport { useTranslation } from 'react-i18next'\nimport { MdMode } from 'react-icons/md'\nimport { ApiBillingInfo, ApiUserInfo } from 'BackendApi'\nimport { BillingDetailsStyled, ButtonWrapper } from './styled'\n\ninterface Props {\n  billingInfo?: ApiBillingInfo | undefined\n  onEditRequest: () => void\n  userInfo: ApiUserInfo\n}\n\nexport const BillingDetails: React.FC<Props> = ({\n  billingInfo,\n  onEditRequest,\n  userInfo,\n}) => {\n  const { t } = useTranslation()\n\n  const {\n    companyName,\n    country = '',\n    state = '',\n    zip = '',\n    phone,\n  } = billingInfo ?? {}\n\n  const displayInfo = {\n    name: companyName || `${userInfo.firstName} ${userInfo.lastName}`,\n    address: [country, state, zip].filter(Boolean).join(', '),\n    phone,\n  }\n\n  return (\n    <>\n      <BillingDetailsStyled>\n        <div>\n          <p>{displayInfo.name}</p>\n          <p>{displayInfo.address.trim()}</p>\n          <p>{displayInfo.phone}</p>\n        </div>\n      </BillingDetailsStyled>\n      <ButtonWrapper>\n        <MdMode size={24} color={'#41a6dc'} />\n        <Button\n          style={{ margin: '0', padding: '1rem 0.5rem' }}\n          onClick={() => {\n            onEditRequest()\n          }}\n          $variant={'link-primary'}\n          $size={'large'}\n        >\n          {t('billing.payment.editBilling')}\n        </Button>\n      </ButtonWrapper>\n    </>\n  )\n}\n","import { Form, Formik } from 'formik'\nimport React, { useEffect, useState } from 'react'\nimport {\n  BillingFormValues,\n  statesValidationSchema,\n  validationSchema,\n} from '@features/billing/BillingBox/formConfig'\nimport { FormikInputField } from '@components/Formik/FormikInputField'\nimport { FormikInputCheckbox } from '@components/Formik/FormikInputCheckbox'\nimport { FormikInputSelect } from '@components/Formik/FormikInputSelect'\nimport { SyncValuesWithParent } from '@features/billing/BillingBox/SyncValuesWithParent'\nimport { BillingDetails } from '@features/billing/BillingBox/BillingDetails'\n\nimport {\n  CustomInputField,\n  FormInputGroup,\n  WrapperInputCheckbox,\n  Wrapper,\n  InputWrapper,\n} from './styled'\nimport { useGetCountries } from '@app/api/getCountries'\nimport { useGetStates } from '@app/api/getStates'\nimport { ApiUserInfo } from 'BackendApi'\nimport { FormikInputSmartSelect } from '@components/Formik/FormikInputSmartSelect'\n\ninterface Props {\n  initialFormValues: BillingFormValues\n  onValuesChange: (newValues: BillingFormValues, isValid: boolean) => void\n  isDataEmpty: boolean\n  userInfo: ApiUserInfo\n  onStripeSubmit: boolean\n}\n\nexport const BillingBox: React.FC<Props> = ({\n  initialFormValues,\n  onValuesChange,\n  isDataEmpty,\n  userInfo,\n  onStripeSubmit,\n}) => {\n  const [isAddingNewInfo, setIsAddingNewInfo] = useState(false)\n  const [countryCode, setCountryCode] = useState(initialFormValues.country)\n  const [noCompany, setNoCompany] = useState(initialFormValues.noCompany)\n  const [validation, setValidation] = useState(validationSchema)\n\n  const handleValues = (newValues: BillingFormValues) => {\n    setNoCompany(newValues.noCompany)\n    setCountryCode(newValues.country)\n  }\n\n  const {\n    data: countries,\n    isLoading: isLoadingCountries,\n    error: countriesError,\n  } = useGetCountries()\n\n  const {\n    data: states,\n    refetch: refetchStates,\n    isLoading: isLoadingStates,\n    error: statesError,\n    remove: removeData,\n  } = useGetStates(countryCode || ' ')\n\n  useEffect(() => {\n    if (isDataEmpty) {\n      setIsAddingNewInfo(true)\n    }\n  }, [isDataEmpty])\n\n  useEffect(() => {\n    refetchStates()\n  }, [countryCode])\n\n  return (\n    <Wrapper>\n      {isAddingNewInfo ? (\n        <Formik\n          initialValues={initialFormValues}\n          validationSchema={validation}\n          validateOnChange\n          validateOnBlur\n          onSubmit={async () => {\n            // No submit needed , we pass sync values to parent\n          }}\n        >\n          {(formikProps) => {\n            const isCountryStates = formikProps.values.country === 'US'\n\n            return (\n              <Form>\n                <SyncValuesWithParent\n                  onStripeSubmit={onStripeSubmit}\n                  onValuesChange={(newValues, isValid) => {\n                    if (newValues.noCompany) {\n                      formikProps.setFieldValue('companyName', '')\n                    }\n                    if (newValues.country === 'US') {\n                      setValidation(statesValidationSchema)\n                    } else {\n                      setValidation(validationSchema)\n                      formikProps.setFieldValue('state', '')\n                    }\n                    handleValues(newValues)\n                    onValuesChange(newValues, isValid)\n                  }}\n                />\n                <CustomInputField\n                  name={'companyName'}\n                  type={'text'}\n                  label={'Company Name'}\n                  disabled={noCompany}\n                />\n                <WrapperInputCheckbox>\n                  <FormikInputCheckbox name={'noCompany'}>\n                    I'm not a company\n                  </FormikInputCheckbox>\n                </WrapperInputCheckbox>\n                <InputWrapper>\n                  <FormikInputField\n                    type={'tel'}\n                    name={'phone'}\n                    label={'Phone (with prefix)'}\n                    style={{ backgroundColor: '#ededee' }}\n                  />\n                </InputWrapper>\n                <FormInputGroup twoColumns={!isCountryStates}>\n                  <InputWrapper>\n                    <FormikInputSmartSelect\n                      initialValues={\n                        (countries || []).map((item) => ({\n                          value: item.id,\n                          label: item.text,\n                        })) || []\n                      }\n                      name={'country'}\n                      label={'Country'}\n                      secondaryStyles\n                      noIcon\n                      isClearable={false}\n                    />\n                  </InputWrapper>\n                  {isCountryStates ? (\n                    <InputWrapper>\n                      <FormikInputSelect\n                        $optionsLabel={\n                          !states?.length || !isCountryStates\n                            ? undefined\n                            : 'State'\n                        }\n                        name={'state'}\n                        $options={\n                          !isCountryStates\n                            ? []\n                            : (states || []).map((item) => ({\n                                value: item.id,\n                                label: item.id,\n                              }))\n                        }\n                        $label={'State'}\n                        style={{ backgroundColor: '#ededee' }}\n                        disabled={!states?.length || !isCountryStates}\n                      />\n                    </InputWrapper>\n                  ) : null}\n\n                  <InputWrapper>\n                    <FormikInputField\n                      type={'text'}\n                      name={'zip'}\n                      label={'Zip'}\n                      style={{ backgroundColor: '#ededee' }}\n                    />\n                  </InputWrapper>\n                </FormInputGroup>\n              </Form>\n            )\n          }}\n        </Formik>\n      ) : (\n        <BillingDetails\n          billingInfo={initialFormValues}\n          onEditRequest={() => setIsAddingNewInfo(true)}\n          userInfo={userInfo}\n        />\n      )}\n    </Wrapper>\n  )\n}\n","import React from 'react'\nimport styled from 'styled-components'\nimport { ReactComponent as CardBoxImage } from '@assets/images/card_payments.svg'\nimport { SecurePaymentLogo } from './SecurePaymentLogo'\n\nexport const Wrapper = styled.div<{ hasPadding?: boolean }>`\n  width: 100%;\n  height: 100%;\n  display: flex;\n  justify-content: space-between;\n  align-items: stretch;\n  border-radius: 8px;\n  gap: 2rem;\n  background: transparent;\n\n  padding: ${({ hasPadding }) => (hasPadding ? '1rem' : '0')};\n  @media (min-width: 500px) {\n    padding: ${({ hasPadding }) => (hasPadding ? '2rem' : '0')};\n  }\n\n  .full-width {\n    width: 100%;\n  }\n\n  h2 {\n    font-size: 1.7rem;\n    margin-bottom: 2rem;\n  }\n`\n\nconst CardInfo = styled.div`\n  flex: 1;\n`\nconst CardBoxASideWrapper = styled.div`\n  width: 30%;\n  text-align: center;\n\n  display: flex;\n  flex-direction: column;\n  justify-content: flex-start;\n  @media (max-width: 600px) {\n    display: none;\n  }\n`\nconst CardBoxASideImageWrapper = styled.div`\n  svg {\n    display: block;\n    width: 75%;\n    height: auto;\n  }\n`\n\ninterface Props {\n  showSecurePaymentLogo?: boolean\n  title?: string\n  hasPadding?: boolean\n}\n\nexport const BoxWrapperWithSideImage: React.FC<Props> = ({\n  children,\n  showSecurePaymentLogo,\n  title,\n  hasPadding,\n}) => {\n  return (\n    <Wrapper hasPadding={hasPadding}>\n      <CardInfo>\n        {title && <h2>{title}</h2>}\n        {children}\n      </CardInfo>\n      <CardBoxASideWrapper>\n        <CardBoxASideImageWrapper>\n          <CardBoxImage />\n        </CardBoxASideImageWrapper>\n        {showSecurePaymentLogo && <SecurePaymentLogo />}\n      </CardBoxASideWrapper>\n    </Wrapper>\n  )\n}\n","import React, { useEffect, useState } from 'react'\nimport { CardDetails } from '@features/billing/CreditCardBox/CardDetails'\nimport { BoxWrapperWithSideImage } from '@features/billing/CreditCardBox/BoxWrapperWithSideImage'\nimport { StripePaymentProvider } from '@features/billing/stripe/StripePaymentProvider'\nimport { StripeForm } from '@features/billing/stripe/StripeForm'\nimport { CreditCardSubmitButtons } from '@features/billing/stripe/CreditCardSubmitButtons'\nimport { Button } from '@components/Basic/ButtonNbe'\nimport { useStoreCreditCard } from '@app/api/postCreditCard'\nimport { sendToast } from '@app/store/actions/ApplicationConfigurationActions'\nimport { parseApiError } from '@app/api/utils/error'\nimport { useAppDispatch } from '@app/store/hooks'\nimport { useGetUserInfo } from '@app/api/getUserInfo'\nimport { useTranslation } from 'react-i18next'\nimport { Loader } from '@components/Basic/Loader'\nimport styled from 'styled-components'\nimport { BsCreditCard2Back } from 'react-icons/bs'\nimport { trackEvent } from '@app/dataTracking'\nimport { makePricingTrackingStep } from '@app/dataTracking/utils'\n\nexport type CreditCardItem = {\n  fullName?: string\n  number: string\n  expiration: string\n  logoUri?: string\n}\n\nconst ButtonWrapper = styled.div`\n  position: relative;\n\n  svg {\n    position: absolute;\n    z-index: 100;\n    top: 50%;\n    left: 8%;\n    transform: translate(-50%, -50%);\n  }\n`\n\nexport const CreditCardBox: React.FC = () => {\n  const [isAddingNewCard, setIsAddingNewCard] = useState(false)\n  const dispatch = useAppDispatch()\n  const { t } = useTranslation()\n\n  const {\n    data: userData,\n    isLoading: isLoadingUser,\n    refetch: refetchUserInfo,\n  } = useGetUserInfo()\n  const userBillingInfo = userData?.pricing\n\n  const cards: CreditCardItem[] = (\n    userBillingInfo && userBillingInfo.creditCard\n      ? [\n          {\n            fullName: userBillingInfo.creditCardOwner || 'Saved card',\n            number: userBillingInfo.creditCard,\n            expiration: userBillingInfo.creditCardExpiration,\n          },\n        ]\n      : []\n  ).filter((card) => card.number && card.number !== 'N/A')\n\n  const {\n    mutate: storeCreditCardMutation,\n    error: errorStoreCreditCard,\n    isLoading: storeLoadingStateCreditCard,\n  } = useStoreCreditCard()\n\n  const storeCreditCard = (creditCardToken: string) => {\n    storeCreditCardMutation(\n      { creditCardToken },\n      {\n        onSuccess: () => {\n          refetchUserInfo()\n          setIsAddingNewCard(false)\n        },\n      }\n    )\n  }\n\n  // on error\n  useEffect(() => {\n    if (errorStoreCreditCard) {\n      const parsedError = parseApiError(errorStoreCreditCard)\n      dispatch(\n        sendToast({\n          title: 'Error',\n          message: parsedError.message,\n          color: 'negative',\n        })\n      )\n\n      trackEvent({\n        eventName: 'UnexpectedErrorThrown',\n        feature: 'Pricing',\n        step: makePricingTrackingStep(location.pathname),\n        params: {\n          custom: {\n            errorCode: parsedError.code,\n            errorDescription: parsedError.message,\n          },\n        },\n        sendEventToIntercom: true,\n      })\n    }\n  }, [errorStoreCreditCard])\n\n  return isLoadingUser ? (\n    <div>\n      <Loader $active $dimmer $size={'large'} />\n    </div>\n  ) : isAddingNewCard ? (\n    <StripePaymentProvider>\n      <StripeForm onCreditCardTokenRetrieved={storeCreditCard}>\n        {({ isLoading }) => (\n          <CreditCardSubmitButtons\n            isLoading={isLoading || storeLoadingStateCreditCard}\n            onCancelRequest={() => {\n              setIsAddingNewCard(false)\n            }}\n          />\n        )}\n      </StripeForm>\n    </StripePaymentProvider>\n  ) : (\n    <BoxWrapperWithSideImage\n      hasPadding\n      title={t('billing.payment.creditCardBoxTitle')}\n    >\n      {cards && cards.length ? (\n        cards.map((card, idx) => (\n          <CardDetails\n            key={idx}\n            card={cards[0]}\n            onEditCardRequest={() => {\n              setIsAddingNewCard(true)\n            }}\n          />\n        ))\n      ) : (\n        <div>\n          <p>{t('billing.payment.noPaymentMethods')}</p>\n          <ButtonWrapper>\n            <BsCreditCard2Back color={'#fff'} />\n            <Button\n              onClick={() => {\n                setIsAddingNewCard(true)\n              }}\n              $variant={'action'}\n              $size={'large'}\n              $fluid\n              style={{ maxWidth: '270px' }}\n            >\n              {t('billing.payment.addCard')}\n            </Button>\n          </ButtonWrapper>\n        </div>\n      )}\n    </BoxWrapperWithSideImage>\n  )\n}\n","import React from 'react'\nimport {\n  CheckoutPrePrice,\n  CeckoutTotalPrice,\n  CheckoutTrialLimitsDisclaimer,\n} from './styled'\nimport { CheckoutTitle } from '@features/checkout/CheckoutTitle'\nimport { Button } from '@components/Basic/ButtonNbe'\nimport { useTranslation } from 'react-i18next'\n\ninterface Props {\n  amountToPay: string\n  buttonLabel: string\n  billingCircle: string\n  nextInvoiceAmount?: string\n  nextBillingDate?: string\n  onSubmit?: () => void\n  isLoading?: boolean\n  isTrialAvailable?: boolean\n  isProrated?: boolean\n}\n\nexport const CheckoutFooter: React.FC<Props> = ({\n  billingCircle,\n  nextBillingDate,\n  amountToPay,\n  buttonLabel,\n  onSubmit,\n  isLoading,\n  isTrialAvailable,\n  nextInvoiceAmount,\n  isProrated,\n}) => {\n  const { t } = useTranslation()\n  return (\n    <>\n      {isTrialAvailable || isProrated ? (\n        <CheckoutPrePrice data-id={'checkout-pre-price'}>\n          <p>{t('billing.checkout.paymentOnDate', { nextBillingDate })}</p>\n          <p className={'text-right'}>\n            <b>{nextInvoiceAmount}</b>\n            <span style={{ opacity: 0.5 }}> {`per ${billingCircle}`}</span>\n          </p>\n        </CheckoutPrePrice>\n      ) : null}\n      {isTrialAvailable ? (\n        <CheckoutTrialLimitsDisclaimer>\n          {t('billing.checkout.trialLimitDisclaimer')}\n        </CheckoutTrialLimitsDisclaimer>\n      ) : null}\n      <hr style={{ margin: '20px 0' }} />\n      <CeckoutTotalPrice data-id={'checkout-total-price'}>\n        <CheckoutTitle>{t('billing.checkout.todayYouPay')}</CheckoutTitle>\n        <p>{amountToPay}</p>\n      </CeckoutTotalPrice>\n      <Button\n        type={onSubmit ? 'button' : 'submit'}\n        $size={'large'}\n        $variant={'blue'}\n        $loading={isLoading}\n        disabled={isLoading}\n        onClick={() => {\n          if (onSubmit) {\n            onSubmit()\n          }\n        }}\n      >\n        {buttonLabel}\n      </Button>\n    </>\n  )\n}\n","import React from 'react'\nimport styled from 'styled-components'\nimport { FiChevronDown, FiChevronUp } from 'react-icons/fi'\n\ninterface CheckoutTitleProps {\n  onClick?: () => void\n  isOpen?: boolean\n}\n\nconst CheckoutTitleWrapper = styled.div<{ isClickable?: boolean }>`\n  display: inline-block;\n  cursor: ${({ isClickable }) => (isClickable ? 'pointer' : 'default')};\n`\n\nconst TitleStyled = styled.div`\n  display: flex;\n  align-items: center;\n\n  h2 {\n    margin: 0 12px 0 0;\n    font-size: 1rem;\n    font-weight: 600;\n  }\n`\n\nexport const CheckoutTitle: React.FC<CheckoutTitleProps> = ({\n  onClick,\n  isOpen = false,\n  children,\n}) => {\n  return (\n    <CheckoutTitleWrapper onClick={onClick} isClickable={!!onClick}>\n      <TitleStyled>\n        <h2>{children}</h2>\n        {isOpen && onClick ? (\n          <FiChevronUp />\n        ) : !isOpen && onClick ? (\n          <FiChevronDown />\n        ) : null}\n      </TitleStyled>\n    </CheckoutTitleWrapper>\n  )\n}\n","import React, { useEffect } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { PageEditor } from '@app/layouts/PageEditor'\nimport { Panel } from '@components/Panel'\nimport { makeGoogleAccountSteps } from '@features/googleAdsAccount/utils'\nimport { PanelBody } from '@features/googleAdsAccount/AccountActivate/PanelBody'\nimport { Button } from '@components/Basic/ButtonNbe'\nimport { appRoutes } from '@app/routes'\nimport { useHistory } from 'react-router-dom'\nimport { trackEvent } from '@app/dataTracking'\n\ninterface AccountActivateProps {\n  billingData: number\n  handlePollingState: (state: boolean) => void\n}\nexport const AccountActivate: React.FC<AccountActivateProps> = ({\n  billingData,\n  handlePollingState,\n}) => {\n  const { t } = useTranslation()\n  const steps = makeGoogleAccountSteps(1)\n  const history = useHistory()\n  const customerId = window.localStorage.getItem('customerId') || ''\n\n  useEffect(() => {\n    if (billingData === 2) {\n      handlePollingState(false)\n      trackEvent({\n        eventName: 'GaacBillingAdded',\n        feature: 'GAAC',\n        step: 'Activate',\n        params: {\n          custom: {\n            customerId,\n          },\n        },\n      })\n      history.push(appRoutes.googleAdsAccountConnect.makeUrl())\n    }\n  }, [billingData])\n  return (\n    <PageEditor\n      steps={steps}\n      activeStep={1}\n      topbarValue={t('gaac.topbarTitle')}\n      hasTopBar\n      backlink={{\n        url: '/app/googleAdsAccounts',\n        label: t('gaac.topbarExitButton'),\n      }}\n    >\n      <Panel body={<PanelBody />} />\n    </PageEditor>\n  )\n}\n","import React from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { PageEditor } from '@app/layouts/PageEditor'\nimport { Panel } from '@components/Panel'\nimport { makeGoogleAccountSteps } from '@features/googleAdsAccount/utils'\nimport { PanelBody } from '@features/googleAdsAccount/AccountConnect/PanelBody'\nimport { Button } from '@components/Basic/ButtonNbe'\nimport { useHistory } from 'react-router-dom'\n\nexport const AccountConnect: React.FC = () => {\n  const { t } = useTranslation()\n  const steps = makeGoogleAccountSteps(2)\n  const history = useHistory()\n  return (\n    <PageEditor\n      steps={steps}\n      activeStep={2}\n      topbarValue={t('gaac.topbarTitle')}\n      hasTopBar\n      backlink={{\n        url: '/app/googleAdsAccounts',\n        label: t('gaac.topbarExitButton'),\n      }}\n    >\n      <Panel\n        body={<PanelBody />}\n        footer={{\n          left: null,\n          right: (\n            <a href={'/app/bridges'}>\n              <Button\n                data-testid='connect_later_btn'\n                type={'submit'}\n                $variant={'link-primary'}\n              >\n                {t('gaac.steps.stepConnect.buttonConnectLater')}\n              </Button>\n            </a>\n          ),\n        }}\n      />\n    </PageEditor>\n  )\n}\n","import React from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { PageEditor } from '@app/layouts/PageEditor'\nimport { Panel } from '@components/Panel'\nimport { makeGoogleAccountSteps } from '@features/googleAdsAccount/utils'\nimport { PanelBody } from '@features/googleAdsAccount/AccountCreationDone/PanelBody'\nimport { useHistory, useLocation } from 'react-router-dom'\n\nexport const AccountCreationDone: React.FC = () => {\n  const { t } = useTranslation()\n  const steps = makeGoogleAccountSteps(0)\n  const history = useHistory()\n  const location = useLocation()\n\n  return (\n    <PageEditor\n      steps={steps}\n      activeStep={0}\n      topbarValue={t('gaac.topbarTitle')}\n      hasTopBar\n      backlink={{\n        url: '/app/googleAdsAccounts',\n        label: t('gaac.topbarExitButton'),\n      }}\n    >\n      <Panel body={<PanelBody />} />\n    </PageEditor>\n  )\n}\n","import { FormikInputField } from '@components/Formik/FormikInputField'\nimport React from 'react'\nimport { FormikInputSelect } from '@components/Formik/FormikInputSelect'\nimport {\n  AccountCreationFormWrapperStyled,\n  AccountCreationInputGroup,\n  IntegrationLogoWrapper,\n} from './styled'\nimport { useGetCurrencies } from '@app/api/getCurrencies'\nimport { useGetTimezones } from '@app/api/getTimezones'\nimport { useTranslation } from 'react-i18next'\nimport { FormikInputSmartSelect } from '@components/Formik/FormikInputSmartSelect'\nimport { useFormikContext } from 'formik'\nimport { IntegrationLogo } from '@features/googleAdsAccount/AccountActivate/styled'\nimport googleAdsLogo from '@assets/images/gads-logo_2.svg'\n\nexport const AccountCreationFormInner: React.FC = () => {\n  const { t } = useTranslation()\n  const { values } = useFormikContext()\n\n  const { data: currenciesData, isLoading: isLoadingCurrencies } =\n    useGetCurrencies()\n  const { data: timezonesData, isLoading: isLoadingTimezones } =\n    useGetTimezones()\n\n  return (\n    <>\n      <IntegrationLogoWrapper>\n        <IntegrationLogo>\n          <img src={googleAdsLogo} alt={'logo'} width={170} />\n        </IntegrationLogo>\n        <h2>{t('gaac.steps.stepCreate.title')}</h2>\n      </IntegrationLogoWrapper>\n\n      <AccountCreationFormWrapperStyled>\n        <AccountCreationInputGroup>\n          <FormikInputField\n            data-testid='display_name_input'\n            label={t('gaac.steps.stepCreate.labelFullname')}\n            name={'fullname'}\n            type={'text'}\n          />\n          <FormikInputField\n            data-testid='email_input'\n            label={t('gaac.steps.stepCreate.labelEmail')}\n            name={'email'}\n            type={'text'}\n          />\n        </AccountCreationInputGroup>\n        <AccountCreationInputGroup>\n          <FormikInputSmartSelect\n            initialValues={currenciesData || []}\n            name={'currency'}\n            label={t('gaac.steps.stepCreate.labelCurrency')}\n            isLoading={isLoadingCurrencies}\n          />\n          <FormikInputSmartSelect\n            initialValues={timezonesData || []}\n            name={'timezone'}\n            label={t('gaac.steps.stepCreate.labelTimezone')}\n            isLoading={isLoadingTimezones}\n          />\n        </AccountCreationInputGroup>\n      </AccountCreationFormWrapperStyled>\n    </>\n  )\n}\n","import React, { Fragment } from 'react'\nimport { Formik, Form, FormikHelpers } from 'formik'\nimport { useTranslation } from 'react-i18next'\nimport { PageEditor } from '@app/layouts/PageEditor'\nimport { Panel } from '@components/Panel'\nimport { Button } from '@components/Basic/ButtonNbe'\nimport { makeGoogleAccountSteps } from '@features/googleAdsAccount/utils'\nimport { AccountCreationFormInner } from '@features/googleAdsAccount/AccountCreationFormInner'\nimport { useHistory } from 'react-router-dom'\nimport { GoogleAdsAccountFormValues } from 'GoogleAdsAccount'\nimport { googleAdsAccountFormValidationSchema } from '@features/googleAdsAccount/AccountCreationForm/validation'\n\ninterface StepAccountConnectProps {\n  initialValues: GoogleAdsAccountFormValues\n  onSubmit: (\n    formValues: GoogleAdsAccountFormValues,\n    formikHelpers: FormikHelpers<GoogleAdsAccountFormValues>\n  ) => void\n  isSavingApi?: boolean\n}\n\nexport const AccountCreationForm: React.FC<StepAccountConnectProps> = ({\n  initialValues,\n  onSubmit,\n  isSavingApi,\n}) => {\n  const { t } = useTranslation()\n  const steps = makeGoogleAccountSteps(0)\n  const history = useHistory()\n  return (\n    <Formik\n      initialValues={initialValues}\n      validationSchema={googleAdsAccountFormValidationSchema}\n      enableReinitialize={true}\n      validateOnMount\n      onSubmit={(values, formikHelpers) => {\n        onSubmit(values, formikHelpers)\n      }}\n    >\n      {(formikProps) => {\n        // here we handle all cases where button is disabled\n\n        return (\n          <Fragment>\n            <PageEditor\n              steps={steps}\n              activeStep={0}\n              topbarValue={t('gaac.topbarTitle')}\n              hasTopBar\n              backlink={{\n                url: '/app/googleAdsAccounts',\n                label: t('gaac.topbarExitButton'),\n              }}\n            >\n              <Form>\n                <Panel\n                  body={<AccountCreationFormInner />}\n                  footer={{\n                    left: null,\n                    right: (\n                      <Button\n                        type={'submit'}\n                        $loading={isSavingApi}\n                        disabled={!formikProps.isValid || isSavingApi}\n                        data-testid={'create_btn'}\n                        $variant={'primary'}\n                      >\n                        {t('common.continue')}\n                      </Button>\n                    ),\n                  }}\n                />\n              </Form>\n            </PageEditor>\n          </Fragment>\n        )\n      }}\n    </Formik>\n  )\n}\n","import React, { useState } from 'react'\nimport {\n  IntegrationPanelStyled,\n  IntegrationPanelBody,\n  IntegrationPanelHead,\n  IntegrationPanelWrapper,\n  PanelHeadLeft,\n  PanelHeadRight,\n  PanelHeadTitle,\n  IntegrationPanelFooter,\n  ButtonGroup,\n  PanelHeadRightLink,\n} from './styled'\nimport { Button } from '@components/Basic/ButtonNbe'\nimport { FaChevronUp } from 'react-icons/fa'\nimport ReactTooltip from 'react-tooltip'\nimport { Checkbox } from '@components/Form/Checkbox'\n\nexport interface IntegrationPanelBodyProps {\n  $open: boolean\n}\ninterface Props {\n  integrationLogo: string\n  panelTitle: string\n  isTosAccepted?: boolean\n  btnMoreUrl?: string\n  panelDescription?: string\n  btnPrimaryLabel?: string\n  btnPrimaryLink?: string\n  isbtnPrimaryAccordion?: boolean\n  btnLinkLabel?: string\n  btnLinkUrl?: string\n  accordionButtonLabel?: string\n  accordionButtonUrl?: string\n  closeTooltipText?: string\n  handleAction?: (status: string) => void\n  children?: React.ReactNode\n  testIdPrimaryButton?: string\n  testIdLinkButton?: string\n  testIdPolicyButton?: string\n  accordionCheckboxLabel?: string\n}\nexport const IntegrationPanel: React.FC<Props> = ({\n  integrationLogo,\n  isTosAccepted,\n  panelTitle,\n  panelDescription,\n  btnPrimaryLabel,\n  btnPrimaryLink,\n  isbtnPrimaryAccordion,\n  btnLinkLabel,\n  btnLinkUrl,\n  accordionButtonLabel,\n  accordionButtonUrl,\n  closeTooltipText,\n  handleAction,\n  children,\n  testIdPrimaryButton,\n  testIdLinkButton,\n  testIdPolicyButton,\n  accordionCheckboxLabel,\n}) => {\n  const [open, setOpen] = useState(false)\n\n  return (\n    <IntegrationPanelStyled>\n      <IntegrationPanelWrapper>\n        <IntegrationPanelHead>\n          <PanelHeadLeft>\n            <div>\n              <img src={integrationLogo} width={30} />\n              {panelTitle ? (\n                <PanelHeadTitle>{panelTitle}</PanelHeadTitle>\n              ) : null}\n            </div>\n            {panelDescription ? <div>{panelDescription}</div> : null}\n          </PanelHeadLeft>\n          <PanelHeadRight>\n            {isbtnPrimaryAccordion && btnPrimaryLabel ? (\n              <ButtonGroup>\n                <ReactTooltip effect='solid' id='panel-integration-chevron'>\n                  {closeTooltipText}\n                </ReactTooltip>\n                {open ? (\n                  <div style={{ textAlign: 'center' }}>\n                    <FaChevronUp\n                      data-tip=''\n                      data-for='panel-integration-chevron'\n                      data-place='top'\n                      onClick={() => setOpen(!open)}\n                      style={{\n                        cursor: 'pointer',\n                      }}\n                    />\n                  </div>\n                ) : (\n                  <Button\n                    $variant={'primary'}\n                    onClick={() => {\n                      setOpen(!open)\n                    }}\n                    disabled={open}\n                  >\n                    {btnPrimaryLabel}\n                  </Button>\n                )}\n              </ButtonGroup>\n            ) : btnPrimaryLink && btnPrimaryLabel ? (\n              <a rel='noreferrer' target={'_blank'} href={btnPrimaryLink}>\n                <Button data-testid={testIdPrimaryButton} $variant={'primary'}>\n                  {btnPrimaryLabel}\n                </Button>\n              </a>\n            ) : null}\n            <PanelHeadRightLink\n              data-testid={testIdLinkButton}\n              target={'_blank'}\n              href={btnLinkUrl}\n              rel='noreferrer'\n            >\n              {btnLinkLabel}\n            </PanelHeadRightLink>\n          </PanelHeadRight>\n        </IntegrationPanelHead>\n        {isbtnPrimaryAccordion ? (\n          <IntegrationPanelBody $open={open}>\n            <IntegrationPanelFooter>\n              <Checkbox\n                data-testid={testIdPolicyButton}\n                name={'tos'}\n                onChange={() => {\n                  if (handleAction) {\n                    handleAction(status)\n                  }\n                }}\n                checked={isTosAccepted}\n              >\n                {accordionCheckboxLabel}\n              </Checkbox>\n\n              {accordionButtonLabel ? (\n                <a target={'_blank'} rel='noreferrer' href={accordionButtonUrl}>\n                  <Button\n                    data-testid={testIdPrimaryButton}\n                    disabled={!isTosAccepted}\n                    $variant={'primary'}\n                  >\n                    {accordionButtonLabel}\n                  </Button>\n                </a>\n              ) : null}\n            </IntegrationPanelFooter>\n          </IntegrationPanelBody>\n        ) : null}\n      </IntegrationPanelWrapper>\n      {children}\n    </IntegrationPanelStyled>\n  )\n}\n","import React, { Fragment, useState } from 'react'\nimport { Formik, Form } from 'formik'\nimport styled from 'styled-components'\nimport { BridgeFormValues } from 'Nbee'\nimport { FormInner } from './FormInner'\nimport { Button } from '@components/Basic/ButtonNbe'\nimport { PageEditor } from '@app/layouts/PageEditor'\nimport { Panel } from '@components/Panel'\nimport { useTranslation } from 'react-i18next'\nimport { validateBridgeChooserForm } from './validation'\nimport { isInIframe } from '@app/utils/isInFrame'\nimport { AppCombination } from '@features/nbee/AppCombination'\nimport { useFetchPopularConnections } from '@app/api/getPopularConnections'\nimport { ApiConnection } from 'BackendApi'\nimport { Loader } from '@components/Basic/Loader'\n\nconst CombinationsWrapper = styled.div`\n  position: relative;\n  margin-top: 4rem;\n\n  h3 {\n    font-size: 1.1rem;\n  }\n`\n\ninterface SimpleBridgeBuilderFormProps {\n  initialValues: BridgeFormValues\n  onSubmit: (formValues: BridgeFormValues) => void\n}\n\nexport const BridgeChooserForm: React.FC<SimpleBridgeBuilderFormProps> = ({\n  initialValues,\n  onSubmit,\n}) => {\n  const { t } = useTranslation()\n  const isEmbedded = isInIframe()\n\n  const [initialData, setInitialData] =\n    useState<BridgeFormValues>(initialValues)\n\n  /* const { data: popularConnections, isLoading: isLoadingConnections } =\n    useFetchPopularConnections() */\n\n  const handleClick = (appCombination: ApiConnection) => {\n    setInitialData({\n      ...initialValues,\n      source: { appId: appCombination.source.id },\n      destination: { appId: appCombination.destination.id },\n    })\n  }\n\n  return (\n    <Formik\n      initialValues={initialData}\n      validate={validateBridgeChooserForm}\n      validateOnMount\n      enableReinitialize={true}\n      onSubmit={(values) => {\n        onSubmit(values)\n      }}\n    >\n      {(formikProps) => {\n        return (\n          <Fragment>\n            <PageEditor\n              formikContext={formikProps}\n              pageTitle={t('nbee.bridgeChooser.title')}\n              hasTopBar={!isEmbedded}\n              backlink={{\n                url: '/bridges',\n                label: t('nbee.bridgeBuilder.exitNbee'),\n              }}\n            >\n              <Form>\n                <Panel\n                  body={\n                    <>\n                      <FormInner />\n                      {/* <CombinationsWrapper>\n                        <h3>\n                          {t('nbee.bridgeChooser.popularCombinationsTitle')}\n                        </h3>\n                        {isLoadingConnections ? (\n                          <div style={{ height: '5rem' }}>\n                            <Loader $dimmer $active />\n                          </div>\n                        ) : (\n                          popularConnections?.data?.connections &&\n                          popularConnections.data.connections.map(\n                            (item, index) => (\n                              <AppCombination\n                                key={index}\n                                appConnection={item}\n                                handleClick={handleClick}\n                              />\n                            )\n                          )\n                        )}\n                      </CombinationsWrapper> */}\n                    </>\n                  }\n                  footer={{\n                    left: null,\n                    right: (\n                      <>\n                        <Button\n                          type={'submit'}\n                          $variant={'primary'}\n                          disabled={\n                            formikProps.isSubmitting || !formikProps.isValid\n                          }\n                          $loading={formikProps.isSubmitting}\n                          $loadingText={'Checking...'}\n                          $minWidth\n                        >\n                          {t('common.continue')}\n                        </Button>\n                      </>\n                    ),\n                  }}\n                />\n              </Form>\n            </PageEditor>\n          </Fragment>\n        )\n      }}\n    </Formik>\n  )\n}\n","import React, { useEffect } from 'react'\nimport { useCheckAppsCompatibility } from '@app/api/checkAppsCompatibility'\nimport { LoadingStep } from '@features/nbee/LoadingStep'\nimport { Redirect, useHistory, useParams } from 'react-router-dom'\nimport { BridgeChooserStep2RouteParams } from 'LeadsBridgeApp'\nimport { appRoutes } from '@app/routes'\n\nexport const BridgeChooserRedirector: React.VFC = () => {\n  const urlParams = useParams<BridgeChooserStep2RouteParams>()\n  const history = useHistory()\n\n  const sourceAppId = parseInt(urlParams.sourceAppId, 10)\n  const destinationAppId = parseInt(urlParams.destinationAppId, 10)\n\n  const {\n    data: appCompatibilityCheck,\n    isLoading: isCheckingAppsCompatibility,\n  } = useCheckAppsCompatibility(sourceAppId, destinationAppId)\n\n  const obeUri = appCompatibilityCheck?.combination.obeUri\n  const nbeeUri = appCompatibilityCheck?.combination.nbeeUri\n\n  useEffect(() => {\n    if (obeUri && !nbeeUri) {\n      window.location.href = obeUri\n    } else if ((!obeUri && nbeeUri) || (obeUri && nbeeUri)) {\n      // if we only have nbeeUri, or if we both have obeUri and nbeeUri,\n      // we want to redirect the user directly to NBEE and never display the chooser.\n      history.push(nbeeUri)\n    }\n  }, [obeUri, nbeeUri])\n\n  if (appCompatibilityCheck?.combination.compatibility === 'none') {\n    return <Redirect to={appRoutes.nbeeBridgeChooserStep1.makeUrl()} />\n  }\n\n  return isCheckingAppsCompatibility || !nbeeUri ? <LoadingStep /> : null\n}\n","import React from 'react'\nimport { useFormikContext } from 'formik'\nimport { BridgeFormValues, EmailReceiptSettings } from 'Nbee'\nimport { emailReceiptValidationSchema } from '@features/nbee/EmailReceipt/validation'\nimport { FormInner } from '@features/nbee/EmailReceipt/FormInner'\nimport { FeatureNotAvailable } from '@features/nbee/EmailReceipt/FeatureNotAvailable'\nimport { minimumPlanName } from '@features/nbee/FieldsMappingForm'\nimport { StarterLabel } from '@features/nbee/AddFilterButton/styled'\nimport { FaLock } from 'react-icons/fa'\nimport { EmailReceiptStyled } from '@features/nbee/EmailReceipt/styled'\nimport { useUpdateBridgeToPricing } from '@features/nbee/utils'\nimport { ApiUserModuleItem, ApiUser } from 'BackendApi'\n\ninterface Props {\n  bridgeId?: string | number\n  emailReceiptUserModule?: ApiUserModuleItem\n  userData?: ApiUser\n}\n\nexport const EmailReceipt: React.VFC<Props> = ({\n  bridgeId,\n  emailReceiptUserModule,\n  userData,\n}) => {\n  const { values, setValues, isValid, isSubmitting, errors } =\n    useFormikContext<BridgeFormValues>()\n\n  const isBridgeEnabled = values?.ui?.isBridgeEnabled\n  const { TitleWrapper, IconLockWrapper } = EmailReceiptStyled\n\n  const moduleReceiptId = emailReceiptUserModule?.id\n\n  const userEmail = userData?.user.email ? [userData?.user.email] : []\n\n  const isAvailableToUser = Boolean(emailReceiptUserModule?.enabled)\n  const minimumPlanRequired = emailReceiptUserModule?.minimumPlan\n\n  const updateBridgeToPricing = useUpdateBridgeToPricing(\n    bridgeId,\n    moduleReceiptId,\n    minimumPlanRequired\n  )\n\n  const planLabelName = minimumPlanRequired\n    ? minimumPlanName[minimumPlanRequired.toString()].toUpperCase()\n    : ''\n\n  const settings = values?.settings\n  const emailReceiptRecipients = settings?.emailReceipt?.recipients || []\n  const userDefaultRecipients =\n    emailReceiptUserModule?.userDefaults.recipients || []\n\n  const recipients =\n    emailReceiptRecipients.length > 0\n      ? emailReceiptRecipients\n      : userDefaultRecipients.length > 0\n      ? userDefaultRecipients\n      : userEmail\n\n  const initialValues: EmailReceiptSettings = {\n    active:\n      settings?.emailReceipt?.active ??\n      emailReceiptUserModule?.userDefaults.active ??\n      false,\n    recipients: recipients || [],\n    subject:\n      settings?.emailReceipt?.subject ||\n      emailReceiptUserModule?.userDefaults.subject ||\n      'New Lead',\n    canShow: values.settings?.emailReceipt?.canShow ?? false, // canShow value is in Formik context due to useHandleAppsCompatibility hook result\n  }\n\n  const isEmailReceiptCompatible = values?.settings?.emailReceipt?.canShow\n\n  const canShowEmailReceipt =\n    initialValues &&\n    isEmailReceiptCompatible &&\n    isValid &&\n    !isSubmitting &&\n    Object.keys(errors).length === 0\n\n  const handleSaveSettings = (emailReceiptValues: EmailReceiptSettings) => {\n    setValues({\n      ...values,\n      settings: {\n        emailReceipt: {\n          ...values.settings?.emailReceipt,\n          ...emailReceiptValues,\n        },\n      },\n    })\n  }\n\n  return canShowEmailReceipt ? (\n    <div style={{ marginTop: '3rem' }}>\n      <TitleWrapper>\n        <h2 style={{ margin: '0 1rem 1rem 0' }}>Email Receipt</h2>\n        <IconLockWrapper>\n          {!isAvailableToUser && (\n            <StarterLabel small onClick={() => updateBridgeToPricing()}>\n              <FaLock /> {planLabelName}\n            </StarterLabel>\n          )}\n        </IconLockWrapper>\n      </TitleWrapper>\n\n      {isAvailableToUser || initialValues.active ? (\n        <FormInner\n          isBridgeEnabled={isBridgeEnabled}\n          handleSubmit={handleSaveSettings}\n          initialValues={initialValues}\n        />\n      ) : (\n        <FeatureNotAvailable\n          moduleReceiptId={moduleReceiptId}\n          requiredLbPlanId={minimumPlanRequired}\n          bridgeId={bridgeId}\n        />\n      )}\n    </div>\n  ) : null\n}\n","import React from 'react'\nimport { Button } from '@components/Basic/ButtonNbe'\nimport NoResults from '@assets/images/illustrations/nbee-no-results.svg'\nimport styled from 'styled-components'\nimport { useTranslation } from 'react-i18next'\n\ninterface Props {\n  onResetFilterRequest: () => void\n  isFiltered?: boolean\n}\n\nconst Wrapper = styled.div`\n  width: 80%;\n  margin: 0 auto;\n  padding-top: 2rem;\n  display: flex;\n  text-align: center;\n  flex-direction: column;\n  align-items: center;\n  & > *:not(:last-child) {\n    margin-bottom: 2rem;\n  }\n`\n\nconst Text = styled.div`\n  font-weight: 600;\n`\n\nconst Image = styled.img`\n  max-width: 100%;\n  width: 200px;\n`\n\nexport const FieldMappingEmptyState: React.VFC<Props> = ({\n  onResetFilterRequest,\n  isFiltered,\n}) => {\n  const { t } = useTranslation()\n\n  return (\n    <Wrapper>\n      <Text>\n        {isFiltered\n          ? t('nbee.fieldsMapping.noFieldsFoundForFilters')\n          : t('nbee.fieldsMapping.noFieldsFound')}\n      </Text>\n      <Image src={NoResults} alt={t('nbee.fieldsMapping.noFieldsFound')} />\n      {isFiltered ? (\n        <Button\n          type={'button'}\n          $variant={'filter'}\n          onClick={onResetFilterRequest}\n        >\n          {t('nbee.fieldsMapping.resetFilters')}\n        </Button>\n      ) : null}\n    </Wrapper>\n  )\n}\n","import { SelectValueMulti } from '@components/Form/MultiCreatableCustom'\nimport { ApiFormulasSchemaResponseData, ApiUserModuleItem } from 'BackendApi'\n\nexport interface RowProps {\n  index: number\n  selectOptions: SelectValueMulti[]\n  formulaUserModule?: ApiUserModuleItem | undefined\n  showWelcomeMessage?: boolean\n  formulaSchema?: ApiFormulasSchemaResponseData[]\n  sourceLogoUri?: string\n  onRedirectToPricing?: (redirect: boolean) => void\n}\n\ntype ErrorObject = {\n  [key: string]: any\n}\n\n// function to flatten the hasError object and extract the errors from the params\nexport const flattenErrors = (errorObject: ErrorObject): string[] => {\n  return Object.entries(errorObject).reduce(\n    (messages: string[], [key, value]) => {\n      if (typeof value === 'object') {\n        // when we have a formula,\n        // checks if we need to retrieve the error message\n        // from the values in the param array\n        const subErrors = flattenErrors(value as ErrorObject)\n        return [...messages, ...subErrors]\n      } else {\n        return [...messages, value as string]\n      }\n    },\n    []\n  )\n}\n","import React, { useState, useEffect, Fragment } from 'react'\nimport { useField, useFormikContext } from 'formik'\nimport { useTranslation } from 'react-i18next'\n\nimport {\n  BridgeFormValues,\n  MappedField,\n  MappedFieldFormula,\n  MappedFieldMapping,\n} from 'Nbee'\n\nimport { Button } from '@components/Basic/ButtonNbe'\nimport { Loader } from '@components/Basic/Loader'\nimport { Modal } from '@components/Basic/Modal'\nimport { InputField } from '@app/components/Form/InputField'\nimport {\n  InputSmartSelect,\n  SelectValue,\n} from '@components/Form/InputSmartSelect'\nimport { InputSmartCreatableSelect } from '@app/components/Form/InputSmartSelect/Creatable'\n\nimport {\n  FormulaModalBody,\n  FormulaModalCloseIcon,\n  FormulaModalFooter,\n  FormulaModalHeader,\n  FormulaModalHero,\n  FormulaModalWrapper,\n} from '@features/nbee/FieldsMappingForm/FormulaModal/styled'\nimport { IoCloseOutline } from 'react-icons/io5'\n\nimport { useGetSingleFormulaSchema } from '@app/api/getSingleFormulaSchema'\n\ninterface ModalProps {\n  selectedMapping?: MappedFieldMapping\n  isOpen: boolean\n  onCloseModal: (formula: MappedFieldFormula) => void\n  sourceFieldOptions?: SelectValue[] | []\n  index: number\n}\n\nexport const FormulaModal: React.FC<ModalProps> = ({\n  selectedMapping,\n  isOpen,\n  onCloseModal,\n  sourceFieldOptions,\n  index,\n}) => {\n  const mappingId = selectedMapping?.id\n  const formulaId = selectedMapping?.formula?.id\n  const isNew = selectedMapping?.formula?.isNew\n  const modalTitle = isNew ? 'Add' : 'Edit'\n\n  const { t } = useTranslation()\n\n  // Extract information from Formik context\n  const { values } = useFormikContext<BridgeFormValues>()\n\n  const fieldName = `fieldsMapping.${index}`\n  const [field, meta, helpers] = useField<MappedField>(fieldName)\n\n  const currentFieldValue = field.value\n  const currentFieldMappingWithFormula = field.value.mapping.find(\n    (m) => m.formula && m.id === mappingId // Matches the mapping ID\n  )\n\n  // Now you can access the formula and its params directly\n  const currentFieldFormula = currentFieldMappingWithFormula?.formula\n  const currentFieldFormulaParams = currentFieldFormula?.params\n\n  // Create a temporary state to not save immediately in Formik context\n  const [formulaTemporaryState, setFormulaTemporaryState] =\n    useState<MappedFieldFormula>(currentFieldFormula as MappedFieldFormula)\n\n  // Disable submit button if there are errors in the form\n  const [isSubmitButtonDisabled, setIsSubmitButtonDisabled] =\n    useState<boolean>(false)\n\n  // Retrieve single formula schema, passing bridge ID and formula ID\n  const { data: singleFormulaSchema, isLoading: isGettingSingleFormulaSchema } =\n    useGetSingleFormulaSchema(`${values.ui?.bridgeId}`, formulaId)\n\n  // Memoize formula name, formula description and param title to avoid re-rendering\n  const formulaName = React.useMemo(\n    () =>\n      singleFormulaSchema && singleFormulaSchema.data.length\n        ? `${singleFormulaSchema?.data[0]?.category} >> ${t(\n            `nbee.formulas.${singleFormulaSchema?.data[0]?.id}.Name` as any\n          )}`\n        : undefined,\n    [t, singleFormulaSchema]\n  )\n  const formulaDescription = React.useMemo(\n    () =>\n      singleFormulaSchema\n        ? t(\n            `nbee.formulas.${singleFormulaSchema?.data[0]?.id}.Description` as any\n          )\n        : undefined,\n    [t, singleFormulaSchema]\n  )\n  const getParamDescription = React.useMemo(\n    () => (paramId: string) =>\n      t(\n        `nbee.formulas.${singleFormulaSchema?.data[0]?.id}.Params.${paramId}` as any\n      ),\n    [t, singleFormulaSchema]\n  )\n\n  const singleFormulaSchemaParams = singleFormulaSchema?.data[0]?.params || []\n\n  // if there are no params in the formik context it's because we've just changed the formula.\n  // in that case, we need to load in the state the params of the new formula\n  useEffect(() => {\n    if (singleFormulaSchema && !currentFieldFormulaParams?.length) {\n      setFormulaTemporaryState({\n        ...(currentFieldFormula as MappedFieldFormula),\n        params:\n          singleFormulaSchema?.data[0]?.params?.map((p, index) => {\n            return {\n              ...p,\n              required: p.type === 'field' && index === 0,\n            }\n          }) || [],\n      })\n    } else if (singleFormulaSchema && currentFieldFormulaParams?.length) {\n      // otherwise, we need to update the state with the params of the formik context\n      setFormulaTemporaryState({\n        ...(currentFieldFormula as MappedFieldFormula),\n        params:\n          currentFieldFormulaParams?.map((p) => ({\n            ...p,\n            values: p.values,\n            required: p.type === 'field' && index === 0,\n          })) || [],\n      })\n    }\n  }, [singleFormulaSchema])\n\n  const handleValueChange = (\n    paramId: string,\n    value: string | string[] | number\n  ) => {\n    if (!formulaTemporaryState) {\n      return undefined\n    }\n\n    const updatedFormula: MappedFieldFormula = {\n      id: formulaTemporaryState.id,\n      params: [...formulaTemporaryState?.params] || [],\n    }\n    const paramIndex = updatedFormula.params.findIndex((p) => p.id === paramId)\n    if (paramIndex >= 0) {\n      updatedFormula.params[paramIndex].values = value as string | string[]\n    }\n\n    // Handle field value change and update state, not formik context\n    setFormulaTemporaryState(updatedFormula)\n  }\n\n  const getOptionsForSelectDropdown = (paramId: string) => {\n    const selectedParam = singleFormulaSchema?.data[0]?.params?.find(\n      (p) => p.id === paramId\n    )\n    if (Array.isArray(selectedParam?.values) && selectedParam?.values) {\n      return selectedParam?.values.map(\n        (v) => ({ value: v, label: v } as SelectValue)\n      )\n    } else {\n      return []\n    }\n  }\n\n  const getDefaultValueForSelect = (paramId: string) => {\n    if (formulaTemporaryState?.isNew) return undefined\n    if (!formulaTemporaryState?.params || !sourceFieldOptions) return undefined\n\n    const selectedParam = formulaTemporaryState?.params.find(\n      (p) => p.id === paramId\n    )\n    if (!selectedParam) {\n      return undefined\n    }\n    if (selectedParam.type === 'field') {\n      return sourceFieldOptions.find(\n        (option) => option.value === selectedParam.values\n      )\n    }\n    if (selectedParam.type === 'dropdown') {\n      const dropdownOptions = getOptionsForSelectDropdown(paramId)\n      let defaultValue = dropdownOptions?.find(\n        (option) => option.value === selectedParam.values\n      )\n      if (defaultValue === undefined && dropdownOptions.length > 0) {\n        defaultValue = {\n          value: dropdownOptions[0].value,\n          label: dropdownOptions[0].value,\n        } as SelectValue\n        handleValueChange(paramId, dropdownOptions[0].value)\n      }\n\n      return defaultValue\n    }\n  }\n\n  const getDefaultValueForCreatableSelect = (paramId: string) => {\n    if (!formulaTemporaryState?.params?.length) {\n      return undefined\n    }\n    const selectedParam = formulaTemporaryState?.params.find(\n      (p) => p.id === paramId\n    )\n    return (selectedParam?.values as string[]) || []\n  }\n\n  const transformFieldId = (paramId?: string): string | null => {\n    if (!paramId) return null\n\n    return paramId\n      .toLowerCase()\n      .replace(/_/g, ' ')\n      .replace(/field\\.(\\d+)/gi, (_, num) => `Field ${Number(num) + 1}`)\n      .replace(/\\b(\\w)/g, (char) => char.toUpperCase())\n  }\n\n  // Handle submit button disabled state\n  useEffect(() => {\n    if (isGettingSingleFormulaSchema) {\n      setIsSubmitButtonDisabled(true)\n    }\n    if (!formulaTemporaryState?.params[0]?.values) {\n      setIsSubmitButtonDisabled(true)\n    } else {\n      setIsSubmitButtonDisabled(false)\n    }\n  }, [formulaTemporaryState])\n\n  const handleAbort = () => {\n    // Find the index of the mapping formula to reset\n    const mappingIndex = currentFieldValue.mapping.findIndex(\n      (m) => m.id === mappingId\n    )\n\n    if (mappingIndex !== -1 && isNew) {\n      // Remove the mapping formula from the array only when it's a new formula\n      const newMappings = currentFieldValue.mapping.filter(\n        (m, i) => i !== mappingIndex\n      )\n\n      // Update the MappedField with the modified mappings\n      helpers.setValue({\n        ...currentFieldValue,\n        mapping: newMappings,\n      })\n    }\n    // if we're editing an existing formula, don't do anything\n\n    onCloseModal(currentFieldFormula as MappedFieldFormula)\n  }\n\n  const handleSubmit = () => {\n    // Create a new mapping array by mapping over the currentFieldValue.mapping\n    const updatedMapping = currentFieldValue.mapping.map((mapping) => {\n      // Check if the current mapping is the one being edited (matched by mappingId)\n      if (mapping.id === mappingId) {\n        // If it is, return a new mapping object with the updated formulaTemporaryState\n        return {\n          ...mapping,\n          formula: { ...formulaTemporaryState, isNew: false },\n        }\n      }\n      // For all other mappings, return them unchanged\n      return mapping\n    })\n\n    // Set the updated mapping array back into the Formik state\n    helpers.setValue({\n      ...currentFieldValue,\n      mapping: updatedMapping,\n    })\n\n    // Close the modal and pass the updated formula back as a confirmation (if needed)\n    onCloseModal(formulaTemporaryState)\n  }\n\n  return (\n    <Modal\n      noPadding\n      isOpen={isOpen}\n      onCloseModal={() =>\n        onCloseModal(currentFieldFormula as MappedFieldFormula)\n      }\n    >\n      {isGettingSingleFormulaSchema && (\n        <Loader $active $dimmer $text='Populating fields...' />\n      )}\n\n      <FormulaModalWrapper>\n        <FormulaModalHeader>\n          <div>\n            <h3>\n              {modalTitle} {(formulaName && formulaName.toUpperCase()) || ''}\n            </h3>\n            <FormulaModalHero>\n              <small>{formulaDescription}</small>\n            </FormulaModalHero>\n          </div>\n          <FormulaModalCloseIcon onClick={handleAbort}>\n            <IoCloseOutline />\n          </FormulaModalCloseIcon>\n        </FormulaModalHeader>\n\n        <FormulaModalBody>\n          {singleFormulaSchemaParams &&\n            singleFormulaSchemaParams.map((param) => (\n              <Fragment key={`${param.id}-${isOpen ? 'open' : 'closed'}`}>\n                <div style={{ marginTop: '.6rem' }}>\n                  <h5>{transformFieldId(param?.id)}</h5>\n                  <small\n                    style={{\n                      display: 'inline-block',\n                      maxWidth: '40rem',\n                      wordWrap: 'break-word',\n                    }}\n                  >\n                    {getParamDescription(param.id)}\n                  </small>\n                </div>\n                <div style={{ margin: '.6rem 0' }}>\n                  {formulaTemporaryState ? (\n                    param.type === 'field' ? (\n                      <InputSmartSelect\n                        initialValues={sourceFieldOptions || []}\n                        defaultValue={getDefaultValueForSelect(param.id)}\n                        onSelect={(selectedValue) => {\n                          const singleValue = selectedValue as SelectValue\n                          if (singleValue) {\n                            handleValueChange(param.id, singleValue.value)\n                          }\n                        }}\n                        upDownIconsStyle\n                        isClearable\n                      />\n                    ) : param.type === 'dropdown' ? (\n                      <InputSmartSelect\n                        initialValues={getOptionsForSelectDropdown(param.id)}\n                        defaultValue={getDefaultValueForSelect(param.id)}\n                        onSelect={(selectedValue) => {\n                          const singleValue = selectedValue as SelectValue\n                          if (singleValue) {\n                            handleValueChange(param.id, singleValue.value)\n                          }\n                        }}\n                        upDownIconsStyle\n                        isClearable\n                      />\n                    ) : param.type === 'text' ||\n                      param.type === 'char' ||\n                      param.type === 'int' ? (\n                      <InputField\n                        name={`${param.id}`}\n                        type={'text'}\n                        maxLength={param.type === 'char' ? 1 : undefined}\n                        value={\n                          (formulaTemporaryState &&\n                            formulaTemporaryState?.params.find(\n                              (p) => p.id === param.id\n                            )?.values) ||\n                          ''\n                        }\n                        onChange={(e) =>\n                          handleValueChange(param.id, e.target.value)\n                        }\n                      />\n                    ) : param.type === 'tags' ? (\n                      <InputSmartCreatableSelect\n                        name={`${param.id}`}\n                        placeholder={''}\n                        defaultValue={getDefaultValueForCreatableSelect(\n                          param.id\n                        )}\n                        onSelect={(newValues) =>\n                          handleValueChange(param.id, newValues)\n                        }\n                        isClearable={false}\n                      />\n                    ) : null\n                  ) : null}\n                </div>\n              </Fragment>\n            ))}\n        </FormulaModalBody>\n\n        <FormulaModalFooter>\n          <Button type={'button'} $variant={'secondary'} onClick={handleAbort}>\n            {'Abort'}\n          </Button>\n          <Button\n            type={'button'}\n            $variant={'primary'}\n            onClick={handleSubmit}\n            disabled={isSubmitButtonDisabled}\n          >\n            {'Confirm'}\n          </Button>\n        </FormulaModalFooter>\n      </FormulaModalWrapper>\n    </Modal>\n  )\n}\n","import React, { useEffect } from 'react'\nimport { HeaderSearchComponent } from './HeaderSearchComponent'\nimport { useFormikContext } from 'formik'\nimport { App, BridgeFormValues } from 'Nbee'\nimport {\n  isFieldMapped,\n  isFieldUnmapped,\n} from '@features/nbee/FieldsMappingForm/utils'\nimport { WelcomeMessageProps } from '@features/nbee/FieldsMappingForm'\n\ninterface Props {\n  sourceAppId?: number\n  destinationAppId?: number\n  totalFields: number\n  mappedFields: number\n  inputValue: string\n  onInputChange: (value: string) => void\n  showAllFields: boolean\n  onShowAllFieldsRequest: (showAllFields: boolean) => void\n  isInTestScreen?: boolean\n  isReloadingAllBridgeFields: boolean\n  onRefetchBridgeFieldRequest: () => void\n  maxFields?: number\n  welcomeMessageProps?: WelcomeMessageProps\n  connectedApps: App[] | undefined\n}\n\nexport const HeaderSearch: React.FC<Props> = ({\n  sourceAppId,\n  destinationAppId,\n  totalFields,\n  inputValue,\n  mappedFields,\n  onInputChange,\n  showAllFields,\n  onShowAllFieldsRequest,\n  isReloadingAllBridgeFields,\n  onRefetchBridgeFieldRequest,\n  isInTestScreen,\n  maxFields,\n  welcomeMessageProps,\n  connectedApps,\n}) => {\n  const sourceApp = (connectedApps || []).find((app) => app.id === sourceAppId)\n  const destinationApp = (connectedApps || []).find(\n    (app) => app.id === destinationAppId\n  )\n\n  const defaultTransparentPixel = `data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==`\n\n  const sourceName = sourceApp?.name || ''\n  const sourceLogoUri = sourceApp?.logoUriSmall || defaultTransparentPixel\n  const destinationName = destinationApp?.name || ''\n  const destinationLogoUri =\n    destinationApp?.logoUriSmall || defaultTransparentPixel\n\n  const { values, setFieldValue } = useFormikContext<BridgeFormValues>()\n  // setting app names, it will be useful in case we need to access in other parts of the form (eg. tracking events)\n  useEffect(() => {\n    if (sourceName) {\n      setFieldValue('ui.source.selectedAppName', sourceName)\n    }\n    if (destinationName) {\n      setFieldValue('ui.destination.selectedAppName', destinationName)\n    }\n  }, [sourceName, destinationName])\n\n  // show button logic\n  const fieldsMappingValues = values.fieldsMapping || []\n\n  const allAreMapped =\n    fieldsMappingValues && fieldsMappingValues.length\n      ? fieldsMappingValues.every(isFieldMapped)\n      : false\n\n  const allAreUnmapped =\n    fieldsMappingValues && fieldsMappingValues.length\n      ? fieldsMappingValues.every(isFieldUnmapped)\n      : false\n\n  // we show the button only when user is not typing in the search box or when there is something to toggle\n  // when all fields are mapped or all is unmapped there is nothing to toggle\n  const thereIsNothingToToggle = allAreMapped || allAreUnmapped\n  const showFilterButton = inputValue ? false : !thereIsNothingToToggle\n\n  useEffect(() => {\n    // when we hide the button we need to be sure to show all fields\n    if (!showFilterButton) {\n      onShowAllFieldsRequest(true)\n    }\n  }, [showFilterButton])\n\n  return (\n    <HeaderSearchComponent\n      totalFields={totalFields}\n      mappedFields={mappedFields}\n      sourceName={sourceName}\n      sourceLogoUri={sourceLogoUri}\n      destinationName={destinationName}\n      destinationLogoUri={destinationLogoUri}\n      onInputChange={onInputChange}\n      inputValue={inputValue}\n      showAllFields={showAllFields}\n      onShowAllFieldsRequest={onShowAllFieldsRequest}\n      isInTestScreen={isInTestScreen}\n      showFilterButton={showFilterButton}\n      isReloadingAllBridgeFields={isReloadingAllBridgeFields}\n      onRefetchFieldRequest={onRefetchBridgeFieldRequest}\n      isReadonlyModeEnabled={values.ui?.isBridgeEnabled}\n      maxFields={maxFields}\n      welcomeMessageProps={welcomeMessageProps}\n    />\n  )\n}\n","import React, { useState, useEffect } from 'react'\nimport { Modal } from '@components/Basic/Modal'\nimport { SelectValue } from '@components/Form/InputSmartSelect'\nimport { Button } from '@components/Basic/ButtonNbe'\nimport {\n  ApiBridgeFieldDefinition,\n  ApiUserModuleItem,\n  ApiBridgeFieldDefinitionType,\n  ApiBridgeType,\n} from 'BackendApi'\nimport { BridgeFilterCondition } from 'Nbee'\nimport { usePostSaveBridgeFilterRules } from '@app/api/postSaveBridgeFilterRules'\nimport { Loader } from '@components/Basic/Loader'\nimport { FilterRuleRow } from '@features/nbee/AddFilterButton/AddFilterButtonModal/FilterRuleRow'\nimport { Panel } from '@components/Panel'\nimport { Trans, useTranslation } from 'react-i18next'\nimport { useGetFiltersSchema } from '@app/api/getFiltersSchema'\nimport { useDeleteBridgeFilterRules } from '@app/api/deleteBridgeFilterRules'\nimport { IoCloseOutline } from 'react-icons/io5'\nimport {\n  FilterModalBody,\n  FilterModalCloseIcon,\n  FilterModalFooter,\n  FilterModalHeader,\n  FilterModalWrapper,\n} from '@features/nbee/AddFilterButton/styled'\n\nimport { FilterNotAvailablePage } from './FilterNotAvailablePage'\nimport { apiBridgeFieldTypes } from '@app/@typings/Api/bridgeFieldsArrayTypes'\n\ninterface ModalProps {\n  isOpen: boolean\n  onCloseModal: () => void\n  sourceFields?: ApiBridgeFieldDefinition[] | []\n  initialFilterRules?: BridgeFilterCondition[] | []\n  modalTitle: string\n  bridgeId: number\n  onSaveOrDeleteFilterRules: (filterRules: BridgeFilterCondition[]) => void\n  filterUserModules: ApiUserModuleItem | undefined\n  isBridgeDisabled: boolean\n  bridgeType?: ApiBridgeType\n}\n\nconst emptyFilterRule: BridgeFilterCondition = {\n  type: '',\n  values: '',\n  operator: '',\n  field: {\n    id: '-1',\n    label: '',\n  },\n}\nexport const AddFilterButtonModal: React.FC<ModalProps> = ({\n  isOpen,\n  onCloseModal,\n  sourceFields,\n  initialFilterRules,\n  modalTitle,\n  bridgeId,\n  onSaveOrDeleteFilterRules,\n  filterUserModules,\n  isBridgeDisabled,\n  bridgeType,\n}) => {\n  const { t } = useTranslation()\n  // Retrieve filter schema\n  const { data: filtersSchema, isLoading: isGettingFiltersSchema } =\n    useGetFiltersSchema()\n  const [allInputsEmpty, setAllInputsEmpty] = useState(false)\n\n  // Save Filter\n  const {\n    mutate: saveBridgeFilterRules,\n    isLoading: isSavingBridgeFilterRules,\n    data: saveBridgeFilterRulesResult,\n  } = usePostSaveBridgeFilterRules()\n\n  const {\n    mutate: deleteBridgeFilterRules,\n    isLoading: isDeletingBridgeFilterRules,\n    data: deleteBridgeFilterRulesResult,\n    status: deleteBridgeFilterRulesStatus,\n  } = useDeleteBridgeFilterRules()\n\n  const userHasFiltersEnabled = filterUserModules?.enabled\n  const minimumPlanRequired = filterUserModules?.minimumPlan\n\n  // This state will contain the filter rules and will bind with the form displayed on screen.\n  // The content of this state will also reflect the expected payload by BE.\n  const [filterRules, setFilterRules] = useState<BridgeFilterCondition[]>([\n    emptyFilterRule,\n  ])\n\n  // Loads existing filter rules into state, if any, when the component renders for the first time.\n  useEffect(() => {\n    if (initialFilterRules?.length) {\n      setFilterRules(initialFilterRules)\n    }\n  }, [])\n\n  // If there are no rules or if all rules were deleted, displays an empty rule.\n  useEffect(() => {\n    // Debugging console logs\n    // console.log('filtersSchema', filtersSchema)\n    // console.log('sourceFields', sourceFields)\n    // console.log('initialFilterRules', initialFilterRules)\n    // console.log('filterRules', filterRules)\n\n    if (filterRules.length === 0) {\n      setFilterRules([emptyFilterRule])\n    }\n\n    if (filterRules.length === 1 && filterRules[0].field.id === '-1') {\n      setAllInputsEmpty(true)\n    } else setAllInputsEmpty(false)\n  }, [filterRules])\n\n  // Adds a new rule\n  const handleAddFilterRule = (idx: number) => {\n    const newIndex = Math.min(\n      idx !== undefined ? idx + 1 : filterRules.length,\n      filterRules.length\n    )\n    const newFilterRules = [...filterRules]\n    newFilterRules.splice(newIndex, 0, emptyFilterRule)\n    setFilterRules(newFilterRules)\n  }\n\n  // Removes a rule\n  const handleRemoveFilterRule = (idx: number) => {\n    setFilterRules([\n      ...filterRules.slice(0, idx),\n      ...filterRules.slice(idx + 1),\n    ])\n  }\n\n  // Deletes all rules\n  const handleDeleteAllRules = () => {\n    setFilterRules([])\n  }\n\n  // Copies an existing rule\n  const handleCopyFilterRule = (idx: number) => {\n    const newIndex =\n      idx !== undefined && idx < filterRules.length\n        ? idx + 1\n        : filterRules.length\n    const newFilterRules = [...filterRules]\n    newFilterRules.splice(newIndex, 0, filterRules[idx])\n    setFilterRules(newFilterRules)\n  }\n\n  // Triggers on the onSelect event for the first select (select field)\n\n  /* `ApiBridgeFieldDefinitionType` is a TypeScript type and, unfortunately, there's no direct way to retrieve the values from a union type.\n  Therefore, we need to declare the valid types manually in an array \"apiBridgeFieldTypes\".\n  We then check if `selectedField?.type` is one of the valid types.\n  If it is, we use `selectedField.type`, else we default to 'text'.\n  */\n  const handleFieldChange = (idx: number, { label }: SelectValue) => {\n    const selectedField = sourceFields?.find((f) => f.label === label)\n\n    const selectedFieldType = selectedField?.type\n      ? apiBridgeFieldTypes.includes(\n          selectedField.type as ApiBridgeFieldDefinitionType\n        )\n        ? selectedField.type\n        : 'text'\n      : ''\n\n    setFilterRules((prevRules) => {\n      const newRules = [...prevRules]\n      newRules[idx] = {\n        ...newRules[idx],\n        field: {\n          label: selectedField?.label || '',\n          id: selectedField?.id || '-1',\n        },\n        type: selectedFieldType || 'text',\n        operator: '',\n        values: '',\n      }\n      return newRules\n    })\n  }\n\n  // Triggers on the onSelect event for the second select (select operator)\n  const handleOperatorChange = (idx: number, operator: string) => {\n    const newRules = [...filterRules]\n    newRules[idx] = { ...newRules[idx], operator: `${operator}`, values: '' }\n    setFilterRules(newRules)\n  }\n\n  // Triggers on the change of input value for the third input (in case of text operators)\n  const handleValueChange = (idx: number, value: string | string[] | []) => {\n    setFilterRules((prevRules) => {\n      const newRules = [...prevRules]\n      newRules[idx] = {\n        ...newRules[idx],\n        values: value,\n      }\n      return newRules\n    })\n  }\n\n  // Obtains the default value to display in the first select (select field) OR in the second select (select operator)\n  const getDefaultSelectOption = (\n    label: string,\n    value: string,\n    fieldId: string\n  ) => {\n    if (fieldId !== '-1') {\n      return {\n        label: `${label}`,\n        value: `${value}`,\n      }\n    } else {\n      return []\n    }\n  }\n\n  // Obtains list of possible options for first select (select field)\n  const getFieldsForSelect = (fields: ApiBridgeFieldDefinition[]) => {\n    return (\n      fields?.map((field) => ({\n        value: field.label,\n        label: field.label,\n      })) || []\n    )\n  }\n\n  // Obtains list of possible options for second select (select operator)\n  const getOperatorsForSelect = (fieldType: string) => {\n    const schemaEntry = filtersSchema?.data\n      .find((entry) => entry.key === fieldType)\n      ?.rules.map((operator) => {\n        return {\n          value: operator.type,\n          label: operator.type\n            .toLowerCase()\n            .replace(/_/g, ' ')\n            .replace(/\\b(\\w)/g, (char) => char.toUpperCase()),\n        }\n      })\n    if (!schemaEntry) {\n      return []\n    } else {\n      return schemaEntry\n    }\n  }\n\n  // Obtains the type of input to use depending on the selected operator\n  const getInputTypeForCondition = (rule: BridgeFilterCondition) => {\n    return filtersSchema?.data\n      .find((entry) => entry.key === rule.type)\n      ?.rules.find((entry) => entry.type === rule.operator)?.value\n  }\n\n  // Determines whether there are rules with empty input fields (and the operator value is not 'disabled')\n  const hasEmptyFilterRules: boolean = filterRules.some((rule) =>\n    rule.field.id === '-1'\n      ? false\n      : rule.field.label === '' ||\n        rule.operator === '' ||\n        (filtersSchema?.data\n          .find((entry) => entry.key === rule.type)\n          ?.rules.find(\n            (operatorRule) =>\n              operatorRule.type === rule.operator &&\n              operatorRule.value !== 'disabled'\n          ) &&\n          rule.values === '')\n  )\n\n  // Determines if there are two rules with the same field and the same operator\n  /* const hasDuplicates =\n    filterRules.length !==\n    filterRules.filter((rule, index, self) => {\n      const isUnique: boolean =\n        self.findIndex(\n          (r) => r.field.id === rule.field.id && r.operator === rule.operator\n        ) === index\n      return isUnique\n    }).length */\n\n  // Determines whether the submit button should be disabled\n  const isSubmitButtonDisabled: boolean =\n    hasEmptyFilterRules ||\n    /* hasDuplicates || */\n    isDeletingBridgeFilterRules ||\n    isSavingBridgeFilterRules ||\n    isGettingFiltersSchema ||\n    isBridgeDisabled\n\n  // Submits payload to API\n  const handleSubmitSaveFilters = () => {\n    // just close the modal if there are no existing nor new rules\n    if (allInputsEmpty && !initialFilterRules?.length) {\n      onCloseModal()\n      return\n    }\n    // if there are existing rules, but all inputs are empty, delete all rules\n    if (allInputsEmpty) {\n      deleteBridgeFilterRules({ bridgeId })\n    } else {\n      // otherwise, save the rules\n      const requestBody = {\n        conditions: [...filterRules].filter(\n          (el) => el.field.id !== '-1' // filters out rules that have empty field\n        ),\n        sourceFields: [...(sourceFields || [])],\n      }\n      saveBridgeFilterRules({ bridgeId, requestBody })\n    }\n  }\n\n  useEffect(() => {\n    if (\n      saveBridgeFilterRulesResult ||\n      deleteBridgeFilterRulesStatus === 'success'\n    ) {\n      const newFilterRules =\n        saveBridgeFilterRulesResult?.data?.sourceFilters?.conditions || []\n      onSaveOrDeleteFilterRules(newFilterRules)\n      onCloseModal()\n    }\n  }, [saveBridgeFilterRulesResult, deleteBridgeFilterRulesResult])\n\n  return (\n    <Modal\n      noPadding\n      isOpen={isOpen}\n      onCloseModal={onCloseModal}\n      isTransparent={false}\n      hideCloseButton={false}\n    >\n      {isGettingFiltersSchema ||\n        isSavingBridgeFilterRules ||\n        (isDeletingBridgeFilterRules && <Loader $active />)}\n\n      <FilterModalWrapper>\n        <FilterModalHeader>\n          <h3>{modalTitle}</h3>\n          <FilterModalCloseIcon onClick={onCloseModal}>\n            <IoCloseOutline />\n          </FilterModalCloseIcon>\n        </FilterModalHeader>\n        {(userHasFiltersEnabled && (\n          <div>\n            <p style={{ padding: '1rem 1.5rem 1.2rem 1.5rem', margin: 0 }}>\n              <Trans\n                ns={'all'}\n                i18nKey={'nbee.filters.modalFiltersSubtitle'}\n                components={{\n                  strong: <strong />,\n                }}\n              />\n            </p>\n            {bridgeType === 'Audience' && (\n              <p style={{ padding: '0 1.5rem 0rem 1.5rem', margin: 0 }}>\n                <Trans\n                  ns={'all'}\n                  i18nKey={'nbee.filters.warningHashedValues'}\n                  components={{\n                    strong: <strong />,\n                  }}\n                />\n              </p>\n            )}\n          </div>\n        )) ||\n          null}\n        <FilterModalBody>\n          <>\n            {filterRules &&\n              filterRules.length > 0 &&\n              filterRules.map((filterRule, index) => (\n                <FilterRuleRow\n                  key={`${index}|${filterRule.operator}|${filterRule.field.id}`}\n                  index={index}\n                  filterRule={filterRule}\n                  isDefaultValueNotInSourceAnymore={\n                    !sourceFields?.find(\n                      (el) => el.label === filterRule.field?.label\n                    )\n                  }\n                  fieldSelectDefaultValue={getDefaultSelectOption(\n                    filterRule.field?.label,\n                    filterRule.field?.label,\n                    filterRule.field?.id\n                  )}\n                  fieldSelectInitialValues={getFieldsForSelect(\n                    sourceFields ?? []\n                  )}\n                  onFieldChange={handleFieldChange}\n                  operatorSelectDefaultValue={getDefaultSelectOption(\n                    filterRule.operator\n                      .toLowerCase()\n                      .replace(/_/g, ' ')\n                      .replace(/\\b(\\w)/g, (char) => char.toUpperCase()),\n                    filterRule.operator,\n                    filterRule.field?.id\n                  )}\n                  operatorSelectInitialValues={getOperatorsForSelect(\n                    filterRule.type || 'text' // default value for field type should be 'text'\n                  )}\n                  onOperatorChange={handleOperatorChange}\n                  inputValueType={getInputTypeForCondition(filterRule)}\n                  onValueChange={handleValueChange}\n                  onCopyFilterRule={handleCopyFilterRule}\n                  onAddFilterRule={handleAddFilterRule}\n                  onRemoveFilterRule={handleRemoveFilterRule}\n                  isRemoveFilterRuleDisabled={filterRules.length === 1}\n                  isBridgeDisabled={isBridgeDisabled}\n                />\n              ))}\n          </>\n        </FilterModalBody>\n        <FilterModalFooter>\n          <Button\n            onClick={() => handleDeleteAllRules()}\n            type={'button'}\n            $variant={'link-primary'}\n            $size={'large'}\n            data-testid='delete-all-rules-button'\n            disabled={isBridgeDisabled}\n          >\n            Delete all rules\n          </Button>\n          <div style={{ display: 'flex', gap: '1rem' }}>\n            <Button\n              data-testid='cancel-filter-button'\n              type={'button'}\n              $variant={'secondary'}\n              onClick={onCloseModal}\n            >\n              {'Cancel'}\n            </Button>\n\n            <Button\n              data-testid='save-filter-button'\n              type={'button'}\n              $variant={'primary'}\n              onClick={() => handleSubmitSaveFilters()}\n              disabled={isSubmitButtonDisabled}\n              data-tip\n              data-for={'filter-disabled-button'}\n            >\n              {'Save Changes'}\n            </Button>\n          </div>\n        </FilterModalFooter>\n      </FilterModalWrapper>\n    </Modal>\n  )\n}\n","import React, { useState } from 'react'\nimport { BridgeFilterCondition } from 'Nbee'\nimport {\n  ApiBridgeFieldDefinition,\n  ApiBridgeType,\n  ApiUserModuleItem,\n} from 'BackendApi'\nimport { Button } from '@components/Basic/ButtonNbe'\n\nimport {\n  AddFilterButtonWrapper,\n  ButtonStyledLabel,\n  EditIcon,\n  FilterIcon,\n  HasFilterMessage,\n  HasFilterMessageTitle,\n  StarterLabel,\n} from './styled'\nimport { AddFilterButtonModal } from '@features/nbee/AddFilterButton/AddFilterButtonModal'\nimport { FaFilter, FaLock } from 'react-icons/fa'\nimport { useTranslation } from 'react-i18next'\nimport { minimumPlanName } from '@features/nbee/FieldsMappingForm'\nimport { useUpdateBridgeToPricing } from '@features/nbee/utils'\n\ninterface Props {\n  initialFilterRules?: BridgeFilterCondition[]\n  allSourceFields?: ApiBridgeFieldDefinition[]\n  bridgeId: number\n  onRefetchBridgeFormValues?: () => void\n  isBridgeDisabled: boolean | undefined\n  filterUserModules: ApiUserModuleItem | undefined\n  bridgeType?: ApiBridgeType\n}\n\nexport const AddFilterButton: React.FC<Props> = ({\n  initialFilterRules,\n  allSourceFields,\n  bridgeId,\n  onRefetchBridgeFormValues,\n  isBridgeDisabled,\n  filterUserModules,\n  bridgeType,\n}) => {\n  // State variables and functions to handle modal display on page\n  const [rules, setRules] = useState<BridgeFilterCondition[]>(\n    initialFilterRules || []\n  )\n\n  const [isModalOpen, toggleIsModalOpen] = useState<boolean>(false)\n  const userHasFiltersEnabled = filterUserModules?.enabled\n  const minimumPlanRequired = filterUserModules?.minimumPlan\n  const moduleFilterId = filterUserModules?.id\n\n  const updateBridgeToPricing = useUpdateBridgeToPricing(\n    bridgeId,\n    moduleFilterId,\n    minimumPlanRequired\n  )\n\n  const planLabelName = minimumPlanRequired\n    ? minimumPlanName[minimumPlanRequired.toString()].toUpperCase()\n    : ''\n\n  const handleCloseModal = () => {\n    toggleIsModalOpen(false)\n  }\n  const handleLabelUpdate = (newRules: BridgeFilterCondition[]) =>\n    setRules(newRules)\n  const { t } = useTranslation()\n\n  // Helper variables to easily handle button label message\n  const hasFilters = !!rules?.length\n  const firstRule = rules?.[0]\n  const firstRuleField = firstRule?.field.label\n  const firstRuleCondition = firstRule?.operator\n    .toLowerCase()\n    .replace(/_/g, ' ')\n  const firstRuleValue = firstRule?.values\n  const otherRulesNumber = rules?.length && rules.length - 1\n  const hasMoreThanOneRule = !!otherRulesNumber\n  const hasTwoRules = rules?.length === 2\n  const buttonLabel = hasFilters ? (\n    isBridgeDisabled ? (\n      <>{'Show Filter'}</>\n    ) : (\n      <>\n        {t('nbee.filters.buttonHasFiltersTitle')}\n        <EditIcon />\n      </>\n    )\n  ) : (\n    <> {t('nbee.filters.buttonNoFiltersTitle')}</>\n  )\n\n  const handleOpenModal = () => {\n    if (userHasFiltersEnabled || (!userHasFiltersEnabled && hasFilters)) {\n      toggleIsModalOpen(true)\n    } else {\n      // Redirect user to pricing page\n      // if they do not have the 'filters' module\n      updateBridgeToPricing()\n    }\n  }\n\n  return (\n    <>\n      <AddFilterButtonWrapper>\n        <FilterIcon hasFilters={hasFilters}>\n          <FaFilter />\n        </FilterIcon>\n        {hasFilters && (\n          <HasFilterMessage data-testid='add-filter-button-message'>\n            <HasFilterMessageTitle>\n              {t('nbee.filters.buttonHasFiltersMessageTitle')}\n            </HasFilterMessageTitle>\n            {t('nbee.filters.buttonHasFiltersMessageOneRule', {\n              firstRuleField,\n              firstRuleCondition,\n              firstRuleValue,\n            })}\n            {hasMoreThanOneRule && (\n              <span>\n                {t('nbee.filters.buttonHasFiltersMessageMoreRules', {\n                  otherRulesNumber,\n                })}\n                {hasTwoRules ? '' : 's'}\n              </span>\n            )}\n          </HasFilterMessage>\n        )}\n        <Button\n          data-testid='add-filter-button'\n          disabled={isBridgeDisabled && !hasFilters}\n          type={'button'}\n          $variant={'link-primary'}\n          onClick={handleOpenModal}\n          style={{ fontSize: '0.95em', paddingLeft: '0.2em' }}\n        >\n          <ButtonStyledLabel>\n            {buttonLabel}{' '}\n            {!userHasFiltersEnabled && (\n              <StarterLabel>\n                <FaLock /> {planLabelName}\n              </StarterLabel>\n            )}\n          </ButtonStyledLabel>\n        </Button>\n      </AddFilterButtonWrapper>\n      {isModalOpen && (\n        <AddFilterButtonModal\n          modalTitle={\n            !hasFilters\n              ? 'Add Filter'\n              : isBridgeDisabled\n              ? 'Show Filter'\n              : 'Edit Filter'\n          }\n          bridgeType={bridgeType}\n          isOpen={isModalOpen}\n          onCloseModal={handleCloseModal}\n          sourceFields={allSourceFields}\n          initialFilterRules={rules}\n          bridgeId={bridgeId}\n          onSaveOrDeleteFilterRules={handleLabelUpdate}\n          filterUserModules={filterUserModules}\n          isBridgeDisabled={!!isBridgeDisabled}\n        />\n      )}\n    </>\n  )\n}\n","import React from 'react'\nimport { Button } from '@components/Basic/ButtonNbe'\nimport { useTranslation } from 'react-i18next'\nimport SuccessImage from '@assets/images/illustrations/field-mapping-test-success.svg'\nimport ErrorImage from '@assets/images/illustrations/field-mapping-test-error.svg'\nimport styled from 'styled-components'\nimport { useFormikContext } from 'formik'\nimport { BridgeFormValues } from 'Nbee'\n\ninterface Props {\n  onBackToEditRequest: () => void\n  onProceedRequest: () => void\n  status: 'success' | 'error'\n  debugUri?: string\n  errorMessage?: string\n  isBridgeEnabled: boolean\n}\n\nconst Wrapper = styled.div`\n  max-width: 490px;\n  margin: 2rem auto 0;\n  text-align: center;\n`\n\nconst Image = styled.img`\n  width: 250px;\n  max-width: 100%;\n  margin: 1rem auto;\n`\n\nconst ButtonWrapper = styled.div`\n  display: flex;\n  gap: 1rem;\n  justify-content: center;\n  padding: 2rem 3.5rem 0;\n  button {\n    flex: 1;\n  }\n`\n\nexport const SendTestLeadFeedback: React.VFC<Props> = ({\n  onBackToEditRequest,\n  onProceedRequest,\n  status,\n  debugUri,\n  errorMessage,\n  isBridgeEnabled,\n}) => {\n  const { t } = useTranslation()\n  const { isSubmitting } = useFormikContext<BridgeFormValues>()\n\n  return status === 'success' ? (\n    <Wrapper>\n      <h4>{t('nbee.fieldsMapping.testSuccessTitle')}</h4>\n      {debugUri && (\n        <div>\n          <a\n            style={{ display: 'inline-block' }}\n            target={'_blank'}\n            rel={'noopener noreferrer'}\n            href={debugUri}\n          >\n            {t('nbee.fieldsMapping.testLeadDebugCta')}\n          </a>\n        </div>\n      )}\n      <Image\n        src={SuccessImage}\n        alt={t('nbee.fieldsMapping.testSuccessTitle')}\n      />\n      <ButtonWrapper>\n        <Button\n          type={'button'}\n          $variant={'secondary'}\n          onClick={onBackToEditRequest}\n          disabled={isSubmitting}\n        >\n          {t('nbee.fieldsMapping.goBackToFieldsMapping')}\n        </Button>\n\n        <Button\n          type={'button'}\n          $variant={'primary'}\n          onClick={onProceedRequest}\n          disabled={isSubmitting}\n          $loading={isSubmitting}\n        >\n          {!isBridgeEnabled\n            ? t('nbee.fieldsMapping.saveAndPublish')\n            : t('common.continue')}\n        </Button>\n      </ButtonWrapper>\n    </Wrapper>\n  ) : (\n    <Wrapper>\n      <h4>{t('nbee.fieldsMapping.testErrorTitle')}</h4>\n      <h5 style={{ color: 'red' }}>{errorMessage}</h5>\n      {debugUri && (\n        <div>\n          <a\n            style={{ display: 'inline-block' }}\n            target={'_blank'}\n            rel={'noopener noreferrer'}\n            href={debugUri}\n          >\n            {t('nbee.fieldsMapping.testLeadDebugCta')}\n          </a>\n        </div>\n      )}\n      <Image src={ErrorImage} alt={t('nbee.fieldsMapping.testSuccessTitle')} />\n      <ButtonWrapper>\n        <a\n          href={process.env.REACT_APP_SUPPORT_URL}\n          target={'_blank'}\n          rel={'noopener noreferrer'}\n        >\n          <Button type={'button'} $variant={'secondary'}>\n            {t('nbee.fieldsMapping.chatWithSupport')}\n          </Button>\n        </a>\n\n        <Button\n          type={'button'}\n          $variant={'primary'}\n          onClick={onBackToEditRequest}\n        >\n          {t('nbee.fieldsMapping.goBackToFieldsMapping')}\n        </Button>\n      </ButtonWrapper>\n    </Wrapper>\n  )\n}\n","import React from 'react'\n\nimport { InputField } from '@components/Form/InputField'\nimport {\n  TestMapperField,\n  TestMapperFieldLabel,\n  TestMapperWrapper,\n} from '@features/nbee/FieldsMappingForm/SendTestLeadSubForm/styled'\nimport { useTranslation } from 'react-i18next'\nimport { ApiTestableField } from 'BackendApi'\n\ninterface Props {\n  fieldsToRender: ApiTestableField[]\n  setFieldValue: (field: string, value: ApiTestableField[]) => void\n  fieldMappingTestingFieldName: string\n}\n\nexport const SendTestLeadSubForm: React.VFC<Props> = ({\n  fieldsToRender,\n  setFieldValue,\n  fieldMappingTestingFieldName,\n}) => {\n  const { t } = useTranslation()\n\n  return (\n    <TestMapperWrapper>\n      {!fieldsToRender.length ? (\n        <div>{t('nbee.fieldsMapping.noFieldsToTestFound')}</div>\n      ) : (\n        <>\n          <h4 className={'text-center'}>{t('nbee.fieldsMapping.testTitle')}</h4>\n          {fieldsToRender.map((field) => (\n            <TestMapperField key={field.id}>\n              <div>\n                <TestMapperFieldLabel>{field.label}</TestMapperFieldLabel>\n              </div>\n              <InputField\n                type={'text'}\n                name={field.id}\n                value={field.value || ''}\n                onChange={({ target: { value } }) => {\n                  setFieldValue(\n                    fieldMappingTestingFieldName,\n                    fieldsToRender.map((oldField) =>\n                      oldField.id === field.id\n                        ? {\n                            ...oldField,\n                            value,\n                          }\n                        : oldField\n                    )\n                  )\n                }}\n              />\n            </TestMapperField>\n          ))}\n        </>\n      )}\n    </TestMapperWrapper>\n  )\n}\n","import React, { useEffect } from 'react'\nimport { useFormikContext } from 'formik'\nimport { BridgeFormValues } from 'Nbee'\nimport { useTranslation } from 'react-i18next'\nimport { Loader } from '@components/Basic/Loader'\nimport { Message } from '@components/Basic/Message'\nimport { parseApiError } from '@app/api/utils/error'\nimport { useGetBridgeTestableFields } from '@app/api/getBridgeTestableFields'\nimport { tranformApiResponseToFormValues } from '@features/nbee/FieldsMappingForm/SendTestLeadSubForm/utils'\nimport { ApiBridgeAvailablePermissionCheckResponse } from 'BackendApi'\nimport { SendTestLeadSubForm } from '../SendTestLeadSubForm'\ninterface Props {\n  bridgeId: number\n  availablePermissionChecks:\n    | ApiBridgeAvailablePermissionCheckResponse\n    | undefined\n}\n\nexport const TestConnectionView: React.VFC<Props> = ({ bridgeId }) => {\n  const { t } = useTranslation()\n  const { values, setFieldValue } = useFormikContext<BridgeFormValues>()\n\n  const fieldsToRender = values.ui?.fieldMappingTesting || []\n  const fieldMappingTestingFieldName = `ui.fieldMappingTesting`\n\n  const {\n    data: fieldsToTestResponse,\n    error: errorGettingFieldsToTest,\n    isLoading: isLoadingFieldsToTest,\n    isRefetching: isRefetchingFieldsToTest,\n  } = useGetBridgeTestableFields(bridgeId)\n\n  const isLoadingAll = isLoadingFieldsToTest || isRefetchingFieldsToTest\n\n  const apiError = errorGettingFieldsToTest\n\n  useEffect(() => {\n    if (fieldsToTestResponse) {\n      // we update formik state with the fields to render\n      const sourceFieldsToTest =\n        tranformApiResponseToFormValues(fieldsToTestResponse)\n      setFieldValue(fieldMappingTestingFieldName, sourceFieldsToTest)\n    }\n  }, [fieldsToTestResponse])\n\n  return (\n    <>\n      {isLoadingAll ? (\n        <div>\n          <Loader $active $size={'large'} $text={t('common.loadingData')} />\n        </div>\n      ) : apiError ? (\n        <Message $status={'error'}>{parseApiError(apiError).message}</Message>\n      ) : (\n        <>\n          <SendTestLeadSubForm\n            fieldsToRender={fieldsToRender}\n            setFieldValue={setFieldValue}\n            fieldMappingTestingFieldName={fieldMappingTestingFieldName}\n          />\n        </>\n      )}\n    </>\n  )\n}\n","import React, { useEffect, useRef, useState } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { InputField } from '@components/Form/InputField'\nimport { Textarea } from '@components/Form/Textarea'\nimport { InputToggle } from '@components/Form/InputToggle'\nimport { useField, useFormikContext } from 'formik'\nimport { Dropdown } from '@features/nbee/WelcomeMessageForm/DropDown'\nimport { BridgeFormValues } from 'Nbee'\nimport { ApiBridgeFieldsList, TemplateBasedFieldsMapping } from 'BackendApi'\nimport { Button } from '@components/Basic/ButtonNbe'\nimport { InputSmartCreatableSelect } from '@components/Form/InputSmartSelect/Creatable'\nimport { FaInfoCircle } from 'react-icons/fa'\nimport { calculateDropdownPosition } from '@features/nbee/WelcomeMessageForm/utils'\nimport { InputFeedback } from '@components/Basic/InputFeedback'\n\nexport interface VariableObjType {\n  id: string\n  label?: string\n}\n\ninterface Props {\n  bridgeFields: ApiBridgeFieldsList | undefined\n}\n\nexport const WelcomeMessageForm: React.FC<Props> = ({ bridgeFields }) => {\n  const { t } = useTranslation()\n  const dropdownWrapperRef = useRef<HTMLDivElement>(null)\n  const textAreaRef = useRef<HTMLTextAreaElement>(null)\n  const charToOpen = '['\n  const charToClose = ']'\n\n  const { values, setFieldValue } = useFormikContext<BridgeFormValues>()\n  const [allAvailableCoupons, setAllAvailableCoupons] = useState<string[]>([])\n  const [subjectField, metaSubject, helpersSubject] = useField(\n    'templateBasedFieldsMapping.subject'\n  )\n  const [bodyField, metaBody, bodyHelpers] = useField(\n    'templateBasedFieldsMapping.body'\n  )\n  const [isCouponActive, , couponActiveHelpers] = useField(\n    'templateBasedFieldsMapping.isCouponActive'\n  )\n  const [couponsField, , couponsHelpers] = useField(\n    'templateBasedFieldsMapping.coupons'\n  )\n\n  const templateBasedFieldsMapping = values.templateBasedFieldsMapping\n  const isBridgeEnabled = values.ui?.isBridgeEnabled\n\n  const subjectError = metaSubject.touched && metaSubject.error\n  const bodyError = metaBody.touched && metaBody.error\n  const subjectErrorStatus = subjectError ? { error: subjectError } : undefined\n  const bodyErrorStatus = bodyError ? { error: bodyError } : undefined\n\n  const initialValues: TemplateBasedFieldsMapping = {\n    subject: templateBasedFieldsMapping?.subject ?? 'Welcome on board, ',\n    body:\n      templateBasedFieldsMapping?.body ??\n      'Hi\\nHere is your [COUPON]\\nHave a nice day',\n    isCouponActive: templateBasedFieldsMapping?.isCouponActive ?? false,\n    coupons: templateBasedFieldsMapping?.coupons ?? [],\n  }\n\n  const [inputSelectPosition, setInputSelectPosition] = useState({ x: 0, y: 0 })\n  const [showDropdown, setShowDropdown] = useState(false)\n  const [highlightedIndex, setHighlightedIndex] = useState<number>(0)\n  const [inputElement, setInputElement] = useState<HTMLInputElement | null>(\n    null\n  )\n  const [lastFocusedField, setLastFocusedField] = useState<\n    'subject' | 'body' | null\n  >(null)\n  const [isFirstRender, setIsFirstRender] = useState(true)\n  useEffect(() => {\n    setIsFirstRender(false)\n  }, [])\n\n  const [dropdownHeight, setDropdownHeight] = useState(0)\n\n  const [textInsideBrackets, setTextInsideBrackets] = useState('')\n  const [filteredData, setFilteredData] = useState<VariableObjType[]>([])\n\n  const source = bridgeFields?.source\n  const templateFields = bridgeFields?.templateFields\n  const isSmsMessage =\n    templateFields && !templateFields.some((field) => field.id === 'subject')\n\n  const couponValue = { id: 'COUPON', label: 'COUPON' }\n\n  useEffect(() => {\n    if (!values.templateBasedFieldsMapping) {\n      setFieldValue('templateBasedFieldsMapping.subject', initialValues.subject)\n      setFieldValue('templateBasedFieldsMapping.body', initialValues.body)\n      setFieldValue(\n        'templateBasedFieldsMapping.isCouponActive',\n        initialValues.isCouponActive\n      )\n      setFieldValue('templateBasedFieldsMapping.coupons', initialValues.coupons)\n    }\n  }, [setFieldValue, values.templateBasedFieldsMapping, initialValues])\n\n  useEffect(() => {\n    setAllAvailableCoupons([...new Set([...initialValues.coupons])])\n  }, [])\n\n  useEffect(() => {\n    if (source) {\n      const initialData = source.map((item) => ({\n        id: item.id.toUpperCase(),\n        label: item.label.toUpperCase(),\n      }))\n      setFilteredData(\n        isSmsMessage ? initialData : [couponValue, ...initialData]\n      )\n    }\n  }, [source, isSmsMessage])\n\n  useEffect(() => {\n    if (textInsideBrackets) {\n      const filtered = source\n        ? source\n            .filter((item) =>\n              item.id.toLowerCase().startsWith(textInsideBrackets.toLowerCase())\n            )\n            .map((item) => ({\n              id: item.id.toUpperCase(),\n              label: item.label.toUpperCase(),\n            }))\n        : []\n      setFilteredData(isSmsMessage ? filtered : [couponValue, ...filtered])\n    } else {\n      const newData = source\n        ? source.map((item) => ({\n            id: item.id.toUpperCase(),\n            label: item.label.toUpperCase(),\n          }))\n        : []\n      setFilteredData(isSmsMessage ? newData : [couponValue, ...newData])\n    }\n  }, [textInsideBrackets, source, isSmsMessage])\n\n  useEffect(() => {\n    if (!isFirstRender && dropdownWrapperRef.current) {\n      setDropdownHeight(dropdownWrapperRef.current.clientHeight)\n    }\n  }, [isFirstRender, dropdownWrapperRef])\n\n  useEffect(() => {\n    if (dropdownWrapperRef.current) {\n      setDropdownHeight(dropdownWrapperRef.current.clientHeight)\n    }\n  }, [filteredData])\n\n  useEffect(() => {\n    if (!dropdownWrapperRef.current || !textAreaRef.current) return\n\n    const fieldRef =\n      lastFocusedField === 'subject' && inputElement\n        ? inputElement\n        : textAreaRef.current\n\n    const value = fieldRef.value\n    const cursorPosition = fieldRef.selectionEnd ?? 0\n    const indexOfLastOpenBracket = value.lastIndexOf(charToOpen, cursorPosition)\n\n    const newPosition = calculateDropdownPosition(\n      fieldRef,\n      value,\n      dropdownWrapperRef.current.clientHeight,\n      indexOfLastOpenBracket\n    )\n\n    setInputSelectPosition(newPosition)\n  }, [\n    dropdownHeight,\n    inputSelectPosition.x,\n    inputSelectPosition.y,\n    lastFocusedField,\n    textInsideBrackets,\n    inputElement,\n  ])\n\n  useEffect(() => {\n    const handleScroll = () => {\n      if (!dropdownWrapperRef.current || !inputElement || !textAreaRef.current)\n        return\n\n      const fieldRef =\n        lastFocusedField === 'subject' ? inputElement : textAreaRef.current\n      const value = fieldRef.value\n      const cursorPosition = fieldRef.selectionEnd ?? 0\n      const indexOfLastOpenBracket = value.lastIndexOf(\n        charToOpen,\n        cursorPosition\n      )\n\n      const newPosition = calculateDropdownPosition(\n        fieldRef,\n        value,\n        dropdownWrapperRef.current.clientHeight,\n        indexOfLastOpenBracket\n      )\n\n      setInputSelectPosition(newPosition)\n    }\n\n    window.addEventListener('scroll', handleScroll)\n\n    return () => {\n      window.removeEventListener('scroll', handleScroll)\n    }\n  }, [lastFocusedField, dropdownHeight])\n\n  const setInputRef = (input: HTMLInputElement | null) => {\n    setInputElement(input)\n  }\n\n  const checkForChar = (\n    value: string,\n    element: HTMLInputElement | HTMLTextAreaElement | null,\n    isClosingBracketDeleted = false\n  ) => {\n    if (!element) return\n\n    const cursorPosition = element.selectionStart ?? 0\n    const indexOfLastOpenBracketBeforeCursor = value.lastIndexOf(\n      charToOpen,\n      cursorPosition - 1\n    )\n    const indexOfLastCloseBracketBeforeCursor = value.lastIndexOf(\n      charToClose,\n      cursorPosition - 1\n    )\n\n    if (\n      indexOfLastOpenBracketBeforeCursor >\n        indexOfLastCloseBracketBeforeCursor ||\n      isClosingBracketDeleted\n    ) {\n      const text = value.substring(\n        indexOfLastOpenBracketBeforeCursor + 1,\n        cursorPosition\n      )\n      setTextInsideBrackets(text)\n      setShowDropdown(true)\n\n      const newPosition = calculateDropdownPosition(\n        element,\n        value,\n        dropdownHeight,\n        indexOfLastOpenBracketBeforeCursor\n      )\n      setInputSelectPosition(newPosition)\n    } else {\n      setShowDropdown(false)\n    }\n  }\n\n  const handleFieldFocus = (field: 'subject' | 'body') => {\n    setLastFocusedField(field)\n    if (field === 'subject') {\n      helpersSubject.setTouched(true)\n    } else if (field === 'body') {\n      bodyHelpers.setTouched(true)\n    }\n  }\n\n  const handleOnSelect = (item: VariableObjType) => {\n    const fieldToUpdate =\n      lastFocusedField === 'subject' ? inputElement : textAreaRef.current\n    if (!fieldToUpdate) {\n      return\n    }\n\n    const helpersToUpdate =\n      lastFocusedField === 'subject' ? helpersSubject : bodyHelpers\n    const currentText = fieldToUpdate.value\n\n    const cursorPosition = fieldToUpdate.selectionEnd ?? 0\n    const indexOfLastOpenBracket = currentText.lastIndexOf(\n      charToOpen,\n      cursorPosition\n    )\n\n    let newText\n    let newCursorPosition: number\n\n    if (indexOfLastOpenBracket >= 0) {\n      newText =\n        currentText.substring(0, indexOfLastOpenBracket) +\n        '[' +\n        item.id +\n        ']' +\n        currentText.substring(cursorPosition)\n      newCursorPosition = indexOfLastOpenBracket + item.id.length + 2\n    } else {\n      newText = currentText + '[' + item.id + ']'\n      newCursorPosition = currentText.length + item.id.length + 2\n    }\n\n    helpersToUpdate.setValue(newText)\n\n    setTimeout(() => {\n      fieldToUpdate.focus()\n      fieldToUpdate.setSelectionRange(newCursorPosition, newCursorPosition)\n    }, 0)\n\n    setShowDropdown(false)\n  }\n\n  const handleInputChange = (\n    e:\n      | React.ChangeEvent<HTMLInputElement>\n      | React.ChangeEvent<HTMLTextAreaElement>\n  ) => {\n    const { name, value } = e.target\n\n    if (name === 'subject') {\n      helpersSubject.setValue(value)\n      checkForChar(value, inputElement)\n    } else if (name === 'body') {\n      bodyHelpers.setValue(value)\n      checkForChar(value, textAreaRef.current)\n    }\n  }\n\n  useEffect(() => {\n    if (showDropdown && highlightedIndex < 0 && filteredData.length > 0) {\n      setHighlightedIndex(0)\n    }\n  }, [showDropdown, highlightedIndex, filteredData])\n\n  const handleKeyDown = (e: React.KeyboardEvent) => {\n    if (e.key === 'ArrowDown' || e.key === 'ArrowUp') {\n      e.preventDefault()\n      let newIndex = highlightedIndex\n      if (e.key === 'ArrowDown' && highlightedIndex < filteredData.length - 1) {\n        newIndex = highlightedIndex + 1\n      } else if (e.key === 'ArrowUp' && highlightedIndex > 0) {\n        newIndex = highlightedIndex - 1\n      }\n      setHighlightedIndex(newIndex)\n\n      if (dropdownWrapperRef.current) {\n        const selectedItem = dropdownWrapperRef.current.children[newIndex]\n        selectedItem?.scrollIntoView({ behavior: 'smooth', block: 'nearest' })\n      }\n    }\n    if (e.key === 'Enter' && showDropdown && filteredData.length > 0) {\n      e.preventDefault()\n      handleOnSelect(filteredData[highlightedIndex])\n      setShowDropdown(false)\n    } else if (e.key === 'Backspace') {\n      const fieldRef =\n        lastFocusedField === 'subject' ? inputElement : textAreaRef.current\n      if (fieldRef && fieldRef.selectionStart != null) {\n        const cursorPosition = fieldRef.selectionStart\n\n        const isClosingBracketDeleted =\n          fieldRef.value[cursorPosition - 1] === charToClose\n\n        setTimeout(() => {\n          checkForChar(fieldRef.value, fieldRef, isClosingBracketDeleted)\n        }, 0)\n      }\n    }\n  }\n\n  const handleAddVariableClick = () => {\n    const fieldRef =\n      lastFocusedField === 'subject' ? inputElement : textAreaRef.current\n\n    if (fieldRef && document.body.contains(fieldRef)) {\n      const cursorPosition = fieldRef.selectionStart || 0\n\n      const value = fieldRef.value\n      const newValue =\n        value.slice(0, cursorPosition) + '[' + value.slice(cursorPosition)\n\n      const helpersToUpdate =\n        lastFocusedField === 'subject' ? helpersSubject : bodyHelpers\n      helpersToUpdate.setValue(newValue)\n\n      setTimeout(() => {\n        fieldRef.focus()\n        fieldRef.setSelectionRange(cursorPosition + 1, cursorPosition + 1)\n\n        checkForChar(newValue, fieldRef)\n      }, 0)\n    }\n  }\n\n  const managePastedData = (e: React.ClipboardEvent<HTMLInputElement>) => {\n    e.preventDefault()\n    const pastedData = e.clipboardData.getData('text')\n    const newCoupons = pastedData\n      .replace(/\\r?\\n|\\r/g, ' ')\n      .split(/[\\s,]+/)\n      .filter((coupon) => coupon.trim() !== '')\n\n    const updatedCoupons = [...initialValues.coupons, ...newCoupons]\n    couponsHelpers.setValue(updatedCoupons)\n    setAllAvailableCoupons((prev) => [...new Set([...prev, ...newCoupons])])\n  }\n\n  const handleSelectCoupon = (coupons: string[]) => {\n    couponsHelpers.setValue(coupons)\n    setAllAvailableCoupons((prev) => [...new Set([...prev, ...coupons])])\n  }\n\n  return (\n    <>\n      <div style={{ position: 'relative', marginTop: '1rem' }}>\n        {!isSmsMessage && (\n          <>\n            <InputField\n              value={initialValues.subject}\n              onKeyDown={handleKeyDown}\n              inputRefCallback={setInputRef}\n              name={'subject'}\n              type={'text'}\n              label={'Subject'}\n              onChange={handleInputChange}\n              onFocus={() => handleFieldFocus('subject')}\n              disabled={isBridgeEnabled}\n              $hasMargin\n            />\n            {subjectErrorStatus && (\n              <InputFeedback $status={subjectErrorStatus} />\n            )}\n          </>\n        )}\n        <Textarea\n          value={initialValues.body}\n          onKeyDown={handleKeyDown}\n          ref={textAreaRef}\n          name={'body'}\n          type={'text'}\n          label={'Body'}\n          onChange={handleInputChange}\n          onFocus={() => handleFieldFocus('body')}\n          style={{ height: '200px', resize: 'none', outline: 'none' }}\n          disabled={isBridgeEnabled}\n        />\n        {bodyErrorStatus && <InputFeedback $status={bodyErrorStatus} />}\n        <Button\n          $variant={'link-primary'}\n          type={'button'}\n          onClick={handleAddVariableClick}\n          style={{\n            position: 'absolute',\n            right: 0,\n            bottom: 0,\n            zIndex: 2,\n          }}\n          disabled={isBridgeEnabled}\n        >\n          Add Variable\n        </Button>\n        <Dropdown\n          ref={dropdownWrapperRef}\n          items={filteredData}\n          onSelect={(item: VariableObjType) => {\n            handleOnSelect(item)\n          }}\n          isVisible={showDropdown}\n          position={inputSelectPosition}\n          highlightedIndex={highlightedIndex}\n          setHighlightedIndex={setHighlightedIndex}\n        />\n      </div>\n      <div style={{ marginTop: '1rem' }}>\n        <div\n          style={{\n            display: 'flex',\n            alignItems: 'center',\n            gap: '.5rem',\n            marginBottom: '1rem',\n          }}\n        >\n          <FaInfoCircle color={'#22a7f0'} />\n          <span style={{ color: '#696f8c', fontSize: '0.875rem' }}>\n            Use shortcut: type “[“ to open menu with variables\n          </span>\n        </div>\n        {!isSmsMessage && (\n          <>\n            <InputToggle\n              $variant={'primary'}\n              $size={'small'}\n              $labelRight={'Use Coupons'}\n              $isChecked={initialValues.isCouponActive}\n              $isDisabled={isBridgeEnabled}\n              onChange={() => {\n                const newState = !initialValues.isCouponActive\n                couponActiveHelpers.setValue(newState)\n              }}\n            />\n\n            {initialValues.isCouponActive && (\n              <div style={{ marginTop: '1rem' }}>\n                <InputSmartCreatableSelect\n                  key={JSON.stringify(initialValues.coupons || [])}\n                  defaultValue={initialValues.coupons}\n                  initialValues={allAvailableCoupons}\n                  onPaste={managePastedData}\n                  onSelect={handleSelectCoupon}\n                  isDisabled={isBridgeEnabled}\n                />\n              </div>\n            )}\n          </>\n        )}\n      </div>\n    </>\n  )\n}\n","import React, { Fragment, useEffect, useState } from 'react'\nimport { Panel } from '@components/Panel'\nimport { Button } from '@components/Basic/ButtonNbe'\nimport { PageEditor } from '@app/layouts/PageEditor'\nimport { appRoutes } from '@app/routes'\nimport { useTranslation } from 'react-i18next'\nimport { makeNbeeSteps } from '@features/nbee/utils'\nimport { HeaderSearch } from '@features/nbee/FieldsMappingForm/HeaderSearch'\nimport { FormInner } from '@features/nbee/FieldsMappingForm/FormInner'\nimport { AddFilterButton } from '@features/nbee/AddFilterButton'\nimport { BridgeFilterCondition, BridgeFormValues } from 'Nbee'\nimport {\n  ApiBridgeAvailablePermissionCheckResponse,\n  ApiBridgeFieldsList,\n} from 'BackendApi'\nimport { Formik, Form, FormikHelpers } from 'formik'\nimport { useHistory } from 'react-router-dom'\nimport { makeFieldMappingValidationSchema } from '@features/nbee/FieldsMappingForm/validation'\nimport { SendTestLeadFeedback } from '@features/nbee/FieldsMappingForm/SendTestLeadFeedback'\nimport { ButtonTestBeforeProceeding } from '@features/nbee/FieldsMappingForm/ButtonTestBeforeProceeding'\nimport { getShowUnmappedInitialState } from '@features/nbee/FieldsMappingForm/utils'\nimport { ButtonSendTestLead } from '@features/nbee/FieldsMappingForm/SendTestLeadSubForm/ButtonSendTestLead'\nimport { FaAngleLeft } from 'react-icons/fa'\nimport { useGetBridgeAllFields } from '@app/api/getBridgeAllFields'\nimport { Loader } from '@app/components/Basic/Loader'\nimport { StatusBarBridge } from '@features/nbee/StatusBarBridge'\nimport { isInIframe } from '@app/utils/isInFrame'\nimport { useGetUserModules } from '@app/api/getUserModules'\nimport { TestConnectionView } from './TestConnectionView'\nimport { WelcomeMessageForm } from '@features/nbee/WelcomeMessageForm'\nimport { useFetchConnectedApps } from '@app/api/getConnectedApps'\n\ninterface Props {\n  bridgeId: number\n  initialValues: BridgeFormValues\n  onSubmit: (\n    formValues: BridgeFormValues,\n    formikHelpers: FormikHelpers<BridgeFormValues>\n  ) => void\n  isSavingApi?: boolean\n  allBridgeFields?: ApiBridgeFieldsList\n  isFirstBridge?: boolean\n  bridgeFilterRulesList?: BridgeFilterCondition[]\n  onRefetchBridgeFormValues?: () => void\n  availablePermissionChecks?:\n    | ApiBridgeAvailablePermissionCheckResponse\n    | undefined\n  showWelcomeMessage: boolean\n}\n\nexport type WelcomeMessageProps = {\n  isWelcomeMessageForm: boolean\n  isSmsForm: boolean\n}\n\nexport type MinimumPlanNameTypes = {\n  [key: string]: string\n}\nexport const minimumPlanName: MinimumPlanNameTypes = {\n  '6': 'Free',\n  '7': 'pro',\n  '8': 'team', // only a constant\n  '9': 'appsumo',\n  '10': 'starter',\n}\n\nexport type FieldMappingScreenState =\n  | 'mapping'\n  | 'testing'\n  | 'test-success'\n  | 'test-error'\n\nexport const FieldsMappingForm: React.FC<Props> = ({\n  bridgeId,\n  initialValues,\n  onSubmit,\n  isSavingApi,\n  allBridgeFields,\n  bridgeFilterRulesList,\n  onRefetchBridgeFormValues,\n  availablePermissionChecks,\n  showWelcomeMessage,\n}) => {\n  const { t } = useTranslation()\n  const history = useHistory()\n  const steps = makeNbeeSteps(1, bridgeId, showWelcomeMessage)\n  const isEmbedded = isInIframe()\n\n  const testEnabled = initialValues?.ui?.testEnabled\n\n  const {\n    refetch: onRefetchFieldRequest,\n    isRefetching: isReloadingAllBridgeFields,\n  } = useGetBridgeAllFields(bridgeId)\n\n  const {\n    data: userModulesResponse,\n    isLoading: isLoadingUserModules,\n    error: apiUserModulesError,\n  } = useGetUserModules()\n\n  const { data: connectedApps, isLoading: isLoadingConnectedApps } =\n    useFetchConnectedApps()\n\n  const sourceApp = (connectedApps || []).find(\n    (app) => app.id === initialValues.source.appId\n  )\n  const defaultTransparentPixel = `data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==`\n\n  const sourceLogoUri = sourceApp?.logoUriSmall || defaultTransparentPixel\n\n  // this state handles which screen of the FieldsMappingForm to display\n  const [screenState, setScreenState] =\n    useState<FieldMappingScreenState>('mapping')\n\n  const [showAllFields, setShowAllFields] = useState(\n    getShowUnmappedInitialState(initialValues.fieldsMapping)\n  )\n  const [filterText, setFilterText] = useState('')\n\n  const [testLeadDebugUri, setTestLeadDebugUri] = useState<string | undefined>()\n  const [testLeadDebugError, setTestLeadDebugError] = useState<\n    string | undefined\n  >()\n  const validationSchema = makeFieldMappingValidationSchema()\n  const destinationFields = allBridgeFields?.destination || []\n\n  const isAPILoading = isReloadingAllBridgeFields || isLoadingUserModules\n\n  const userModules = userModulesResponse?.modules || []\n  const filterUserModules = userModules.find((i) => i.id === 'bridge-filter')\n  const formulaUserModules = userModules.find((i) => i.id === 'bridge-formula')\n  const fieldMappingModules = userModules.find((i) => i.id === 'fields-mapping')\n\n  const maxFieldsToMap = testEnabled\n    ? fieldMappingModules?.userDefaults?.maxFieldsMapping\n    : undefined\n\n  const templateFields = allBridgeFields?.templateFields\n\n  const isSmsForm =\n    (templateFields &&\n      !templateFields.some((field) => field.id === 'subject')) ||\n    false\n\n  const welcomeMessageProps: WelcomeMessageProps = {\n    isWelcomeMessageForm: showWelcomeMessage,\n    isSmsForm,\n  }\n\n  useEffect(() => {\n    if (filterText) {\n      setShowAllFields(true)\n    }\n  }, [filterText])\n\n  // UI\n  const isInFieldMappingForm = screenState === 'mapping'\n  const isInTestFieldMapping = screenState === 'testing'\n  const isInTestFeedback =\n    screenState === 'test-success' || screenState === 'test-error'\n\n  return (\n    <Formik\n      initialValues={initialValues}\n      validationSchema={validationSchema}\n      enableReinitialize={true}\n      onSubmit={(values, helpers) => {\n        onSubmit(values, helpers)\n      }}\n      validateOnMount\n    >\n      {(formikProps) => {\n        const totalFieldsToMap = (formikProps.values.fieldsMapping || []).length\n        const totalFieldsMapped = (\n          formikProps.values.fieldsMapping || []\n        ).filter((f) =>\n          f.mapping.some(\n            (item) => item.formula?.id || item.sourceFieldId || item.text\n          )\n        ).length\n\n        const isTestLeadEnabled = formikProps.values.ui?.testEnabled\n\n        const isBridgeEnabled = formikProps.values.ui?.isBridgeEnabled\n\n        return (\n          <Fragment>\n            {isLoadingUserModules && <Loader $size='large' $active $dimmer />}\n            <PageEditor\n              formikContext={formikProps}\n              steps={steps}\n              activeStep={1}\n              topbarValue={formikProps.values.name}\n              infoBar={\n                formikProps.values.ui?.bridgeId ? (\n                  <StatusBarBridge\n                    isVisible={\n                      !(\n                        initialValues?.manualStatus === 1 ||\n                        initialValues?.manualStatus === 'new'\n                      ) // checks if the bridge is in status \"new\"; in that case we will NOT want to display the edit bar.\n                    }\n                    bridgeId={formikProps.values.ui.bridgeId}\n                  />\n                ) : null\n              }\n              onTopbarValueChange={\n                formikProps.values.ui?.isBridgeEnabled\n                  ? undefined\n                  : (newBridgeName) => {\n                      formikProps.setFieldValue('name', newBridgeName)\n                    }\n              }\n              hasTopBar={!isEmbedded}\n              backlink={{\n                url: '/bridges',\n                label: t('nbee.bridgeBuilder.exitNbee'),\n              }}\n            >\n              <Form>\n                <Panel\n                  head={\n                    <HeaderSearch\n                      connectedApps={connectedApps}\n                      sourceAppId={initialValues.source.appId}\n                      destinationAppId={initialValues.destination.appId}\n                      totalFields={totalFieldsToMap}\n                      mappedFields={totalFieldsMapped}\n                      inputValue={filterText}\n                      onInputChange={setFilterText}\n                      showAllFields={showAllFields}\n                      onRefetchBridgeFieldRequest={onRefetchFieldRequest}\n                      isReloadingAllBridgeFields={isAPILoading}\n                      maxFields={maxFieldsToMap}\n                      onShowAllFieldsRequest={(showAllFields) => {\n                        setShowAllFields(showAllFields)\n                      }}\n                      isInTestScreen={\n                        isInTestFieldMapping ||\n                        isInTestFeedback ||\n                        showWelcomeMessage\n                      }\n                      welcomeMessageProps={welcomeMessageProps}\n                    />\n                  }\n                  progressBarPercentage={isEmbedded ? 66 : undefined}\n                  body={\n                    <>\n                      {isAPILoading ? (\n                        <Loader\n                          $text={t(\n                            'nbee.fieldsMapping.refetchBridgeFieldLoaderMessage'\n                          )}\n                          $active={true}\n                        />\n                      ) : isInTestFieldMapping ? (\n                        <>\n                          <TestConnectionView\n                            bridgeId={bridgeId}\n                            availablePermissionChecks={\n                              availablePermissionChecks\n                            }\n                          />\n                        </>\n                      ) : isInTestFeedback ? (\n                        <SendTestLeadFeedback\n                          status={\n                            screenState === 'test-success' ? 'success' : 'error'\n                          }\n                          debugUri={testLeadDebugUri}\n                          errorMessage={testLeadDebugError}\n                          onBackToEditRequest={() => {\n                            setScreenState('mapping')\n                          }}\n                          isBridgeEnabled={\n                            formikProps.values.ui?.isBridgeEnabled ?? false\n                          }\n                          onProceedRequest={() => {\n                            // if the bridge is already enabled I go directly to the next step\n                            // if it's not enabled I save and publish the bridge\n                            if (!formikProps.values.ui?.isBridgeEnabled) {\n                              formikProps.submitForm()\n                            } else {\n                              history.push(\n                                appRoutes.nbeeStep3.makeUrl(`${bridgeId}`)\n                              )\n                            }\n                          }}\n                        />\n                      ) : (\n                        <>\n                          <AddFilterButton\n                            initialFilterRules={bridgeFilterRulesList}\n                            allSourceFields={allBridgeFields?.source}\n                            bridgeId={bridgeId}\n                            onRefetchBridgeFormValues={\n                              onRefetchBridgeFormValues\n                            }\n                            isBridgeDisabled={isBridgeEnabled}\n                            filterUserModules={filterUserModules}\n                            bridgeType={initialValues.type}\n                          />\n                          {isSavingApi && (\n                            <Loader\n                              $active\n                              $dimmer\n                              $size={'large'}\n                              $text={t(\n                                'nbee.bridgeBuilder.step2PublishLoadingMessage'\n                              )}\n                            />\n                          )}\n                          <FormInner\n                            bridgeId={bridgeId}\n                            filterText={filterText}\n                            showAllFields={showAllFields}\n                            onResetFilterRequest={() => {\n                              setShowAllFields(true)\n                              setFilterText('')\n                            }}\n                            allBridgeFields={allBridgeFields}\n                            formulaUserModule={formulaUserModules}\n                            totalFieldsMapped={totalFieldsMapped}\n                            maxFields={maxFieldsToMap}\n                            showWelcomeMessage={showWelcomeMessage}\n                            sourceLogoUri={sourceLogoUri}\n                          />\n                          {showWelcomeMessage && (\n                            <WelcomeMessageForm\n                              bridgeFields={allBridgeFields}\n                            />\n                          )}\n                        </>\n                      )}\n                    </>\n                  }\n                  footer={\n                    // FOOTER FOR FIELD MAPPING SCREEN\n                    isInFieldMappingForm\n                      ? {\n                          left: (\n                            <Button\n                              $hasIcon\n                              type={'button'}\n                              $variant={'link-secondary'}\n                              disabled={isAPILoading}\n                              onClick={() => {\n                                history.push(\n                                  appRoutes.nbeeStep1Edit.makeUrl(`${bridgeId}`)\n                                )\n                              }}\n                            >\n                              <FaAngleLeft />\n                              {t('nbee.fieldsMapping.goPreviewStep')}\n                            </Button>\n                          ),\n                          right: (\n                            <div style={{ display: 'flex', gap: '1rem' }}>\n                              {/* Open screenState to submit a test lead */}\n                              {isTestLeadEnabled &&\n                              !formikProps.values.ui?.isBridgeEnabled ? (\n                                <ButtonTestBeforeProceeding\n                                  scope={'test'}\n                                  destinationFields={destinationFields}\n                                  formikProps={formikProps}\n                                  bridgeId={bridgeId}\n                                  isDisabledFromParent={isAPILoading}\n                                  onSuccess={() => {\n                                    // when we check actual mapping, we take the user to the test screen\n                                    setScreenState('testing')\n                                  }}\n                                />\n                              ) : isTestLeadEnabled ? (\n                                // in case of view only mode we just show a link to the test lead\n                                <Button\n                                  $variant={'secondary'}\n                                  type={'button'}\n                                  onClick={() => {\n                                    setScreenState('testing')\n                                  }}\n                                >\n                                  {t('nbee.fieldsMapping.testFieldsMapping')}\n                                </Button>\n                              ) : null}\n                              {/* Save mapping */}\n\n                              {!formikProps.values.ui?.isBridgeEnabled ? (\n                                <ButtonTestBeforeProceeding\n                                  scope={'save'}\n                                  destinationFields={destinationFields}\n                                  formikProps={formikProps}\n                                  isDisabledFromParent={isAPILoading}\n                                  isSavingFromParent={isSavingApi}\n                                  bridgeId={bridgeId}\n                                  onSuccess={() => {\n                                    formikProps.submitForm()\n                                  }}\n                                />\n                              ) : (\n                                // in case of view only mode we just show a link to next step\n                                <Button\n                                  $variant={'primary'}\n                                  type={'button'}\n                                  onClick={() => {\n                                    history.push(\n                                      appRoutes.nbeeStep3.makeUrl(`${bridgeId}`)\n                                    )\n                                  }}\n                                >\n                                  {t('common.continue')}\n                                </Button>\n                              )}\n                            </div>\n                          ),\n                        }\n                      : // FOOTER FOR TEST FIELD MAPPING SCREEN\n                      isInTestFieldMapping\n                      ? {\n                          left: (\n                            <Button\n                              $hasIcon\n                              type={'button'}\n                              $variant={'link-secondary'}\n                              onClick={() => {\n                                setScreenState('mapping')\n                              }}\n                            >\n                              <FaAngleLeft />\n                              {t('nbee.fieldsMapping.goPreviewStep')}\n                            </Button>\n                          ),\n                          right: (\n                            <ButtonSendTestLead\n                              bridgeId={bridgeId}\n                              onSendTestLead={({\n                                status,\n                                debugUri,\n                                errorMessage,\n                              }) => {\n                                setScreenState(\n                                  status === 'success'\n                                    ? 'test-success'\n                                    : 'test-error'\n                                )\n                                setTestLeadDebugUri(debugUri)\n                                setTestLeadDebugError(errorMessage)\n                              }}\n                            />\n                          ),\n                        }\n                      : // NO FOOTER FOR TEST FIELD MAPPING FEEDBACK\n                        null\n                  }\n                />\n              </Form>\n            </PageEditor>\n          </Fragment>\n        )\n      }}\n    </Formik>\n  )\n}\n","import React from 'react'\nimport { Button } from '@components/Basic/ButtonNbe'\nimport LbLogoSvg from '@assets/images/logo-lb-small.svg'\nimport { MdOutlineCheckCircleOutline } from 'react-icons/md'\nimport { Trans, useTranslation } from 'react-i18next'\nimport {\n  Wrapper,\n  ButtonWrapper,\n  Header,\n  Paragraph,\n  Body,\n  Label,\n  Disclaimer,\n} from './styled'\nimport { InputField } from '@components/Form/InputField'\nimport { BiShieldQuarter } from 'react-icons/bi'\n\ninterface Props {\n  appLogoUri?: string\n  onSave: () => void\n  onCancel: () => void\n  integrationName: string\n  onEditIntegrationName: (name: string) => void\n  isUpdatingIntegration: boolean\n  appName: string\n}\n\nexport const IncomingDataFinalStep: React.FC<Props> = ({\n  onSave,\n  integrationName,\n  onEditIntegrationName,\n  onCancel,\n  isUpdatingIntegration,\n  appName,\n}) => {\n  const { t } = useTranslation()\n\n  const showedName =\n    appName &&\n    (appName === 'Incoming Webhook' ? 'your webhook system' : appName)\n\n  return (\n    <Wrapper>\n      <Header>\n        <img src={LbLogoSvg} width='40' />\n      </Header>\n      <Body>\n        <MdOutlineCheckCircleOutline color={'#2ECD72'} size={100} />\n        <Paragraph>\n          {t('incomingDataPopup.paragraphLastStepWebhook', {\n            appName: showedName,\n          })}\n        </Paragraph>\n        <Label>{t('nbee.bridgeBuilder.integrationName')}</Label>\n        <div style={{ width: '450px' }}>\n          <InputField\n            name={'name'}\n            type={'text'}\n            value={integrationName}\n            onChange={(e) => onEditIntegrationName(e.target.value)}\n            style={{ textAlign: 'center' }}\n          />\n        </div>\n        <ButtonWrapper>\n          <Button\n            style={{ width: '100%' }}\n            $variant={'primary'}\n            $size={'large'}\n            onClick={onSave}\n            disabled={isUpdatingIntegration || integrationName === ''}\n          >\n            {t('common.save')}\n          </Button>\n          <Button\n            $variant={'link-primary'}\n            style={{ textDecoration: 'underline', marginTop: '.5rem' }}\n            onClick={onCancel}\n          >\n            {t('common.cancel')}\n          </Button>\n        </ButtonWrapper>\n        <Disclaimer>\n          <BiShieldQuarter size={'1.2rem'} />\n          <div>\n            <Trans\n              ns={'all'}\n              i18nKey={'integrationAuthPopup.disclaimerLine'}\n              components={{\n                a: <a />,\n              }}\n            />\n          </div>\n        </Disclaimer>\n      </Body>\n    </Wrapper>\n  )\n}\n","import React from 'react'\nimport { Button } from '@components/Basic/ButtonNbe'\nimport { InputAutoSelectCopy } from '@components/InputAutoSelectCopy'\nimport LbLogoSvg from '@assets/images/logo-lb-small.svg'\nimport { useTranslation } from 'react-i18next'\nimport {\n  Wrapper,\n  ButtonWrapper,\n  Header,\n  Title,\n  Paragraph,\n  Body,\n} from './styled'\nimport { useAppSelector } from '@app/store/hooks'\nimport { IntegrationFormValues } from 'Nbee'\nimport { Formik, Form, FormikHelpers } from 'formik'\nimport { FormInner } from '@features/nbee/IntegrationCredentialsContent/AppAuthCredentialForm/FormInner'\nimport { SubmitAction } from '@features/nbee/IntegrationCredentialsContent/AppAuthCredentialForm'\nimport { makeAuthCredentialValidationSchema } from '@features/nbee/IntegrationCredentialsContent/AppAuthCredentialForm/validation'\n\ninterface Props {\n  appLogoUri: string\n  onContinueRequest: (\n    formValues: IntegrationFormValues,\n    formikHelpers: FormikHelpers<IntegrationFormValues>,\n    action: SubmitAction\n  ) => void\n  appId: number\n  appName: string\n  initialValues: IntegrationFormValues\n  isLoading: boolean\n}\n\nexport const IncomingDataInitialStep: React.FC<Props> = ({\n  appLogoUri,\n  isLoading,\n  onContinueRequest,\n  appName,\n  appId,\n  initialValues,\n}) => {\n  const { t } = useTranslation()\n  const integrationListener = useAppSelector(\n    (state) => state.integrationListener\n  )\n\n  const showedName = appName\n  const listenerType = integrationListener.data?.type ?? 'url'\n  return (\n    <Wrapper>\n      <Header>\n        <img src={LbLogoSvg} width='40' alt='Logo description' />\n      </Header>\n      <Body>\n        <Title>\n          <img src={appLogoUri} width='45' alt='App logo' />\n          <h2>\n            {t(`incomingDataPopup.${listenerType}.titleFirstStepWebhook`, {\n              appName: showedName,\n            })}\n          </h2>\n        </Title>\n        <Paragraph>\n          {t(`incomingDataPopup.${listenerType}.paragraphFirstStepWebhook`, {\n            appName: showedName,\n          })}\n        </Paragraph>\n        {integrationListener.data ? (\n          <InputAutoSelectCopy\n            // docUrl={'https://leadsbridge.com'}\n            linkKey={t('incomingDataPopup.linkTextFirstStepWebhook')}\n            label={t(`incomingDataPopup.${listenerType}.inputLabel`)}\n            inputValue={integrationListener.data?.slug}\n            tooltip={t(\n              `incomingDataPopup.${listenerType}.inputCopyTooltipWebhook`,\n              {\n                appName: showedName,\n              }\n            )}\n          />\n        ) : null}\n        <Formik\n          initialValues={initialValues}\n          validationSchema={() => makeAuthCredentialValidationSchema(false)}\n          onSubmit={(values, formikHelpers) => {\n            onContinueRequest(values, formikHelpers, 'update')\n          }}\n        >\n          {() => {\n            return (\n              <div\n                style={{\n                  width: '100%',\n                }}\n              >\n                <Form>\n                  <FormInner\n                    appId={appId}\n                    appName={appName}\n                    showName={false}\n                    handleErrorsUpdate={() => {\n                      console.log('error')\n                    }}\n                  />\n\n                  <ButtonWrapper>\n                    <Button\n                      style={{ width: '100%' }}\n                      $variant={'primary'}\n                      type={'submit'}\n                      disabled={isLoading}\n                    >\n                      {t('incomingDataPopup.ctaRecognizedWebhook')}\n                    </Button>\n                  </ButtonWrapper>\n                </Form>\n              </div>\n            )\n          }}\n        </Formik>\n      </Body>\n    </Wrapper>\n  )\n}\n","import React from 'react'\nimport { Checkbox } from '@components/Form/Checkbox'\nimport { Wrapper, FieldsRow, InputBox, ValueBox, DataTable } from './styled'\nimport { ApiIntegrationListenerField } from '@app/@typings/Api/integration'\n\ninterface Props {\n  fields: ApiIntegrationListenerField[]\n  onFieldChange: (fieldId: string, enabled: boolean) => void\n}\n\nexport const IncomingDataTable: React.FC<Props> = ({\n  fields,\n  onFieldChange,\n}) => {\n  const handleCheckboxChange = (item: ApiIntegrationListenerField) => {\n    const enabled = !item.enabled\n    onFieldChange(item.id, enabled)\n  }\n  return (\n    <Wrapper data-testid={'table'}>\n      <DataTable>\n        {fields.map((field) => (\n          <FieldsRow key={field.id}>\n            <InputBox>\n              <Checkbox\n                aria-label={field.label}\n                checked={field.enabled}\n                name={`checkbox-${field.label}`}\n                onChange={() => handleCheckboxChange(field)}\n              />\n            </InputBox>\n            <ValueBox style={{ fontWeight: 600 }}>{field.label}</ValueBox>\n            <ValueBox>{field.lastValue}</ValueBox>\n          </FieldsRow>\n        ))}\n      </DataTable>\n    </Wrapper>\n  )\n}\n","import React, { useEffect, useState } from 'react'\nimport { Button } from '@components/Basic/ButtonNbe'\nimport { InputAutoSelectCopy } from '@components/InputAutoSelectCopy'\nimport { useTranslation } from 'react-i18next'\nimport { Title, Paragraph, Body } from './styled'\nimport { Loader } from '@components/Basic/Loader'\nimport { ButtonWrapper } from '@features/nbee/IncomingDataContent/IncomingDataFinalStep/styled'\nimport { useAppSelector } from '@app/store/hooks'\nimport { appRoutes } from '@app/routes'\nimport { useHistory } from 'react-router-dom'\n\ninterface Props {\n  appLogoUri?: string\n  appId: string\n  integrationId: string\n  appName: string\n  listenerType: 'url' | 'email'\n}\n\nexport const LoadingStep: React.FC<Props> = ({\n  appLogoUri,\n  appName,\n  appId,\n  integrationId,\n  listenerType,\n}) => {\n  const { t } = useTranslation()\n  const integrationListener = useAppSelector(\n    (state) => state.integrationListener\n  )\n  const [step, setStep] = useState(1)\n  const history = useHistory()\n\n  useEffect(() => {\n    const timeoutId = setTimeout(() => {\n      if (step < 3) {\n        setStep((prevState) => prevState + 1)\n      }\n    }, 5000)\n\n    return () => {\n      clearTimeout(timeoutId)\n    }\n  }, [step])\n  const loadingText =\n    step === 1\n      ? `incomingDataPopup.loadingText1`\n      : step === 2\n      ? `incomingDataPopup.loadingText2`\n      : `incomingDataPopup.errorTitleWebhook`\n\n  // If it's the second step, and appName is to be included, pass it to the translation function.\n  const loadingTextTranslation =\n    step === 2 ? t(loadingText, { appName }) : t(loadingText)\n\n  return (\n    <Body>\n      <Title>\n        <img src={appLogoUri} width='45' />\n        <h2>{loadingTextTranslation}</h2>\n      </Title>\n      {step === 3 && (\n        <>\n          <Paragraph>\n            {t(`incomingDataPopup.${listenerType}.errorParagraphWebhook`)}\n          </Paragraph>\n          <InputAutoSelectCopy\n            label={t(`incomingDataPopup.${listenerType}.inputLabel`)}\n            // docUrl={'https://leadsbridge.com'}\n            linkKey={t('incomingDataPopup.linkTextFirstStepWebhook')}\n            inputValue={integrationListener.data?.slug}\n            tooltip={t(\n              `incomingDataPopup.${listenerType}.inputCopyTooltipWebhook`,\n              {\n                appName: appName,\n              }\n            )}\n          />\n        </>\n      )}\n      <div style={{ position: 'relative', margin: '4rem 0 2rem' }}>\n        <Loader\n          $size={'large'}\n          $text={step < 3 ? t('common.loading') : ''}\n          $active={true}\n        />\n      </div>\n      {step === 3 && (\n        <ButtonWrapper>\n          <Button\n            style={{ width: '100%' }}\n            $variant={'primary'}\n            $size={'large'}\n            onClick={() => {\n              setStep(1)\n            }}\n          >\n            {t('incomingDataPopup.ctaErrorReloadWebhook', {\n              appName: appName,\n            })}\n          </Button>\n          <div style={{ marginTop: '1rem' }}>\n            <Button\n              onClick={() =>\n                history.push(\n                  appRoutes.incomingDataScreenEdit.makeUrl({\n                    appId,\n                    integrationId,\n                  })\n                )\n              }\n              $variant={'link-secondary'}\n            >\n              {'Go Back'}\n            </Button>\n          </div>\n        </ButtonWrapper>\n      )}\n    </Body>\n  )\n}\n","import React, { useEffect, useRef, useState } from 'react'\nimport { Button } from '@components/Basic/ButtonNbe'\nimport LbLogoSvg from '@assets/images/logo-lb-small.svg'\nimport { useTranslation, Trans } from 'react-i18next'\nimport {\n  Wrapper,\n  ButtonWrapper,\n  Header,\n  Title,\n  Paragraph,\n  FooterWrapper,\n  Body,\n  BodyInner,\n  TableHeader,\n  ElementWrapper,\n  WarningMessage,\n} from './styled'\nimport { IncomingDataTable } from '@components/IncomingDataTable'\nimport { LoadingStep } from '@features/nbee/IncomingDataContent/LoadingStep'\nimport { Checkbox } from '@components/Form/Checkbox'\nimport { ApiIntegrationListenerField } from '@app/@typings/Api/integration'\nimport { useAppDispatch } from '@app/store/hooks'\nimport { setIntegrationListenerFields } from '@app/store/actions/IntegrationListenerActions'\n\nexport interface Props {\n  appLogoUri: string\n  isRecognizingFields: boolean\n  isHeaderStuck?: boolean\n  onContinue: () => void\n  onReload: () => void\n  resetConfirmingReload: (value: number) => void\n  fields: ApiIntegrationListenerField[]\n  isConfirmingReload: number\n  activeBridges: number\n  totalBridges: number\n  appName: string\n  appId: string\n  integrationId: string\n  listenerType: 'url' | 'email'\n}\n\nexport const IncomingDataTableStep: React.FC<Props> = ({\n  appLogoUri,\n  isRecognizingFields,\n  onContinue,\n  isHeaderStuck = false,\n  onReload,\n  isConfirmingReload,\n  fields,\n  activeBridges,\n  totalBridges,\n  resetConfirmingReload,\n  appName,\n  appId,\n  integrationId,\n  listenerType,\n}) => {\n  const { t } = useTranslation()\n  const tableRef = useRef<HTMLDivElement>(null)\n  const dispatch = useAppDispatch()\n  const [isStuck, setIsStuck] = React.useState(isHeaderStuck)\n  const [selectAll, setSelectAll] = useState<boolean>(\n    fields.every((field) => field.enabled)\n  )\n  const warningRef = useRef(null)\n\n  const handleSelectAllChange = () => {\n    const newSelectAllState = !selectAll\n    setSelectAll(newSelectAllState)\n\n    const updatedFields = fields.map((field) => {\n      return { ...field, enabled: newSelectAllState }\n    })\n\n    dispatch(\n      setIntegrationListenerFields({\n        data: { recognizedFields: updatedFields },\n      })\n    )\n  }\n\n  const handleFieldChange = (fieldId: string, enabled: boolean) => {\n    const updatedFields = fields.map((field) =>\n      field.id === fieldId ? { ...field, enabled: enabled } : field\n    )\n\n    dispatch(\n      setIntegrationListenerFields({\n        data: { recognizedFields: updatedFields },\n      })\n    )\n\n    const selectAllStatus = updatedFields.every((field) => field.enabled)\n    setSelectAll(selectAllStatus)\n  }\n\n  const reloadMessages = [\n    'incomingDataPopup.ctaReloadWebhook',\n    'incomingDataPopup.ctaReloadWebhookWarning',\n    'incomingDataPopup.ctaReloadWebhookLastWarning',\n  ]\n\n  const isLastStepOfWarning = isConfirmingReload && isConfirmingReload > 0\n\n  useEffect(() => {\n    if (totalBridges && activeBridges && isLastStepOfWarning) {\n      window.scrollTo(0, document.body.scrollHeight)\n    }\n  }, [totalBridges, activeBridges, isLastStepOfWarning])\n\n  // TODO: Fix handleScrollEvent ?\n  /*\n  const handleScrollEvent = () => {\n    const tableOffsetTop = tableRef?.current?.offsetTop\n    const bodyOffsetTop =\n      Math.abs(document.body.getBoundingClientRect().top) + 35\n\n    if (tableOffsetTop && bodyOffsetTop) {\n      setIsStuck(tableOffsetTop === bodyOffsetTop)\n    }\n  }\n\n  useEffect(() => {\n    window.addEventListener('scroll', handleScrollEvent)\n    return () => {\n      window.removeEventListener('scroll', handleScrollEvent)\n    }\n  })\n  */\n\n  const showedName = appName\n\n  return (\n    <Wrapper>\n      <Header>\n        <img src={LbLogoSvg} width='40' />\n      </Header>\n      {isRecognizingFields ? (\n        <LoadingStep\n          appId={appId}\n          integrationId={integrationId}\n          appLogoUri={appLogoUri}\n          appName={showedName}\n          listenerType={listenerType}\n        />\n      ) : (\n        <Body>\n          <Title>\n            <img src={appLogoUri} width='45' />\n            <h2>\n              {t('incomingDataPopup.titleSecondStepWebhook', {\n                totalFields: fields.length,\n                appName: showedName,\n              })}\n            </h2>\n          </Title>\n          <Paragraph>\n            {t('incomingDataPopup.paragraphSecondStepWebhook')}\n          </Paragraph>\n          <TableHeader isHeaderStuck={isStuck} ref={tableRef}>\n            <ElementWrapper>\n              <div\n                style={{\n                  display: 'flex',\n                  justifyContent: 'center',\n                  padding: '0 0.1rem',\n                }}\n              >\n                <Checkbox\n                  checked={selectAll}\n                  name={'checkbox'}\n                  onChange={handleSelectAllChange}\n                />\n              </div>\n              <div>Key</div>\n              <div>Value</div>\n            </ElementWrapper>\n          </TableHeader>\n          <BodyInner>\n            <IncomingDataTable\n              fields={fields}\n              onFieldChange={handleFieldChange}\n            />\n            {totalBridges && activeBridges && isLastStepOfWarning ? (\n              <WarningMessage ref={warningRef}>\n                {t('integrationAuthPopup.integrationUsage', {\n                  totalBridges,\n                  activeBridges,\n                  action: 'Reload',\n                })}\n              </WarningMessage>\n            ) : null}\n          </BodyInner>\n          <FooterWrapper>\n            <ButtonWrapper>\n              <Button\n                $variant={isLastStepOfWarning ? 'action' : 'secondary'}\n                onClick={onReload}\n                // style={{ width: '' }}\n              >\n                <span>\n                  <span>{t(reloadMessages[isConfirmingReload] as any)}</span>\n                </span>\n              </Button>\n\n              <Button\n                $variant={'primary'}\n                onClick={\n                  isLastStepOfWarning\n                    ? () => resetConfirmingReload(0)\n                    : onContinue\n                }\n              >\n                {isLastStepOfWarning\n                  ? t('incomingDataPopup.ctaGoBackWebhook')\n                  : t('incomingDataPopup.ctaContinueWebhook')}\n              </Button>\n            </ButtonWrapper>\n          </FooterWrapper>\n        </Body>\n      )}\n    </Wrapper>\n  )\n}\n","import React, { useEffect, useState } from 'react'\nimport { Formik, Form, FormikHelpers } from 'formik'\nimport { startOAuthFlow } from './utils'\nimport { FormInner } from './FormInner'\nimport { makeAuthCredentialValidationSchema } from './validation'\nimport { Button } from '@components/Basic/ButtonNbe'\nimport {\n  ActionButtonWrapper,\n  FormWrapper,\n  EditButtonWrapper,\n  SubmitButtonWrapper,\n  FormRow,\n} from '@features/nbee/IntegrationCredentialsContent/styled'\nimport { useTranslation } from 'react-i18next'\nimport { IntegrationFormValues } from 'Nbee'\nimport { SubmitButton } from '@features/nbee/IntegrationCredentialsContent/AppAuthCredentialForm/SubmitButton'\nimport { useGetIntegrationUsage } from '@app/api/getIntegrationUsage'\nimport { InputFeedback } from '@components/Basic/InputFeedback'\nimport { Message } from '@components/Basic/Message'\nimport { InfoSection } from '@features/nbee/IntegrationCredentialsContent/InfoSection'\nimport { trackEvent } from '@app/dataTracking'\nimport { useGenIntegrationRedirectUri } from '@app/api/postGenIntegrationRedirectUri'\nimport { sendToast } from '@app/store/actions/ApplicationConfigurationActions'\nimport { parseApiError } from '@app/api/utils/error'\nimport { useAppDispatch } from '@app/store/hooks'\n\nexport type SubmitAction = 'update' | 'save-new'\n\ninterface Props {\n  appId: number\n  bridgeId?: number\n  onSubmit: (\n    formValues: IntegrationFormValues,\n    formikHelpers: FormikHelpers<IntegrationFormValues>,\n    action: SubmitAction\n  ) => void\n  initialValues: IntegrationFormValues\n  isSavingApi: boolean\n  isOauthUri?: boolean\n  skipParams?: boolean\n  appName: string\n  integrationId?: number\n  // when we receive an error after testing the credentials, we show it inline in the first scrren\n  isNotValidIntegrationErrorMessage?: string\n}\n\nexport const AppAuthCredentialForm: React.VFC<Props> = ({\n  appId,\n  bridgeId,\n  onSubmit,\n  initialValues,\n  isSavingApi,\n  isOauthUri,\n  skipParams,\n  appName,\n  integrationId,\n  isNotValidIntegrationErrorMessage,\n}) => {\n  const { t } = useTranslation()\n  const dispatch = useAppDispatch()\n\n  // this is used to control if we are in the first step (credentials form or oauth flow start) or if user is in the final step with the input \"integration's name\" (showName will be true)\n  // after the oauth flow, this component will be mounted but will receive `skipParams` as true, in this case we take the user directly to the name step\n  const [showName, setShowName] = useState(Boolean(skipParams))\n  const [submitAction, setSubmitAction] = useState<SubmitAction>(\n    integrationId ? 'update' : 'save-new'\n  )\n  const [hasError, setHasError] = useState(false)\n\n  // State to disable the submit button when user select email that it's not verified yet or empty string\n  // let hasError = true\n  // This callback is passed to the form inner component which will pass it to the CredentialFieldVerifyEmail component\n  const handleErrorsUpdate = (status: boolean) => {\n    setHasError(status)\n  }\n\n  const { data: integrationUsage } = useGetIntegrationUsage(\n    integrationId,\n    bridgeId\n  )\n\n  const {\n    mutate: generateRedirectUri,\n    isLoading: isLoadingRedirectUri,\n    error: genRedirectUriApiError,\n    data: redirectUriData,\n  } = useGenIntegrationRedirectUri()\n\n  useEffect(() => {\n    if (isNotValidIntegrationErrorMessage) {\n      setShowName(false)\n    }\n  }, [isNotValidIntegrationErrorMessage])\n\n  const totalBridges = integrationUsage?.data.totalBridges\n  const activeBridges = integrationUsage?.data.activeBridges\n  const isIntegrationUsed = Boolean(totalBridges)\n\n  return (\n    <Formik\n      initialValues={initialValues}\n      validationSchema={() => makeAuthCredentialValidationSchema(showName)}\n      onSubmit={(values, formikHelpers) => {\n        // When user proceed with the second step we send the `AuthorizeStarted` event\n        if (!showName) {\n          trackEvent({\n            eventName: 'AuthorizeStarted',\n            feature: 'NBEE',\n            step: 'Integration',\n            params: {\n              appId: appId,\n              appName: appName,\n              integrationId: integrationId,\n              integrationName: initialValues?.name,\n              bridgeId,\n              oauth: isOauthUri,\n            },\n          })\n        }\n\n        // if we found an OAuth uri, we must start the oauth flow\n        if (!showName && isOauthUri) {\n          formikHelpers.setSubmitting(true)\n          generateRedirectUri(\n            { appId, credentials: values.credentials },\n            {\n              onSuccess: (data) => {\n                const redirectUri = data?.data?.redirectUri as string\n                const isLegacy = data?.data?.isLegacy as boolean\n                startOAuthFlow({\n                  credentials: values.credentials,\n                  redirectUri,\n                  appId,\n                  integrationId,\n                  isLegacy,\n                })\n              },\n              onError: (error) => {\n                dispatch(\n                  sendToast({\n                    title: 'Error',\n                    messages: [parseApiError(error).message],\n                    color: 'negative',\n                  })\n                )\n              },\n            }\n          )\n          return\n        }\n\n        // otherwise first submit is not the real one, we'll run validation just\n        // to move to second step  where the user can select the name and perform\n        // the real saving\n        if (!showName) {\n          setShowName(true)\n          formikHelpers.setSubmitting(false)\n          return\n        }\n        values.integrationId = integrationId\n\n        // real submit :)\n        onSubmit(values, formikHelpers, submitAction)\n      }}\n    >\n      {(formikProps) => {\n        return (\n          <FormWrapper>\n            {isNotValidIntegrationErrorMessage && !showName ? (\n              <div className={'mb-1'}>\n                <Message $status={'error'}>\n                  {isNotValidIntegrationErrorMessage}\n                </Message>\n              </div>\n            ) : null}\n            <Form>\n              <FormRow>\n                <div style={{ flex: 1, padding: '0 1rem' }}>\n                  <FormInner\n                    appId={appId}\n                    appName={appName}\n                    showName={showName}\n                    handleErrorsUpdate={handleErrorsUpdate}\n                  />\n                  {integrationId && isIntegrationUsed && showName && (\n                    <InputFeedback\n                      $status={{\n                        error: t('integrationAuthPopup.integrationUsage', {\n                          totalBridges,\n                          activeBridges,\n                          action: 'Editing',\n                        }),\n                      }}\n                    />\n                  )}\n                </div>\n                {/* Video and Doc section */}\n                {!showName && !isOauthUri && (\n                  <InfoSection\n                    appId={appId}\n                    integrationId={integrationId}\n                    integrationName={formikProps.values.name}\n                    bridgeId={bridgeId}\n                  />\n                )}\n              </FormRow>\n              <ActionButtonWrapper>\n                {integrationId && isIntegrationUsed && showName && (\n                  <EditButtonWrapper>\n                    <SubmitButton\n                      appName={appName}\n                      isDisabled={isSavingApi || formikProps.isSubmitting}\n                      isLoading={\n                        (isSavingApi && submitAction === 'save-new') ||\n                        (formikProps.isSubmitting &&\n                          submitAction === 'save-new')\n                      }\n                      isStepName={showName}\n                      action={'save-new'}\n                      onSubmitRequest={() => {\n                        setSubmitAction('save-new')\n                        formikProps.submitForm()\n                      }}\n                    />\n                    <SubmitButton\n                      appName={appName}\n                      isDisabled={isSavingApi || formikProps.isSubmitting}\n                      isLoading={\n                        (isSavingApi && submitAction === 'update') ||\n                        (formikProps.isSubmitting && submitAction === 'update')\n                      }\n                      isStepName={showName}\n                      action={'update'}\n                      onSubmitRequest={() => {\n                        setSubmitAction('update')\n                        formikProps.submitForm()\n                      }}\n                    />\n                  </EditButtonWrapper>\n                )}\n                {!isIntegrationUsed && showName ? (\n                  <SubmitButtonWrapper>\n                    <SubmitButton\n                      appName={appName}\n                      isDisabled={isSavingApi || formikProps.isSubmitting}\n                      isLoading={isSavingApi || formikProps.isSubmitting}\n                      isStepName={showName}\n                    />\n                  </SubmitButtonWrapper>\n                ) : !showName ? (\n                  <SubmitButtonWrapper>\n                    <SubmitButton\n                      appName={appName}\n                      isDisabled={\n                        isSavingApi || formikProps.isSubmitting || hasError\n                      }\n                      isLoading={isSavingApi || formikProps.isSubmitting}\n                      isStepName={showName}\n                    />\n                  </SubmitButtonWrapper>\n                ) : null}\n\n                <Button\n                  type={'button'}\n                  $variant={'link-secondary'}\n                  $size={'standard'}\n                  disabled={isSavingApi || formikProps.isSubmitting}\n                  onClick={() => {\n                    // back to previus step (credentials fields) is we are in the edit name screen\n                    // otherwise we close the popup\n                    if (showName) {\n                      setShowName(false)\n                    } else {\n                      window.close()\n                    }\n                  }}\n                >\n                  {t('common.goBack')}\n                </Button>\n              </ActionButtonWrapper>\n            </Form>\n          </FormWrapper>\n        )\n      }}\n    </Formik>\n  )\n}\n","import React, { useEffect } from 'react'\nimport { StyledAuthorizationPopup } from './styled'\nimport LbLogoSvg from '@assets/images/logo-lb-small.svg'\nimport { Trans, useTranslation } from 'react-i18next'\nimport {\n  AppAuthCredentialForm,\n  SubmitAction,\n} from '@features/nbee/IntegrationCredentialsContent/AppAuthCredentialForm'\nimport { IntegrationFormValues } from 'Nbee'\nimport { ApiErrorResponse } from 'BackendApi'\nimport { FormikHelpers } from 'formik'\nimport { AiOutlineCheckCircle } from 'react-icons/ai'\nimport { BiShieldQuarter } from 'react-icons/bi'\n\ninterface Props {\n  appId: number\n  bridgeId?: number\n  appName: string\n  appLogoUri: string\n  onSubmit: (\n    formValues: IntegrationFormValues,\n    formikHelpers: FormikHelpers<IntegrationFormValues>,\n    action: SubmitAction\n  ) => void\n  initialValues: IntegrationFormValues\n  isSavingApi: boolean\n  isOauthUri?: boolean\n  // skip step1 (params fields) and load the form at the integration name (final) step\n  skipParams?: boolean\n  // in case of edit we also need the integrationId we want to update\n  integrationId?: number\n  // when we receive an error after testing the credentials, we show it inline in the first scrren\n  isNotValidIntegrationErrorMessage?: string\n}\n\nexport const IntegrationCredentialsContent: React.FC<Props> = ({\n  appId,\n  bridgeId,\n  appName,\n  appLogoUri,\n  onSubmit,\n  initialValues,\n  isSavingApi,\n  isOauthUri,\n  skipParams,\n  integrationId,\n  isNotValidIntegrationErrorMessage,\n}) => {\n  const { t } = useTranslation()\n\n  const { Wrapper, Header, Disclaimer, Body, Logo, Title, SubTitle } =\n    StyledAuthorizationPopup\n\n  const isFinalStepFromOauthFlow = isOauthUri && skipParams\n\n  return (\n    <Wrapper>\n      <Header>\n        <img src={LbLogoSvg} width='40' />\n      </Header>\n\n      <Body>\n        {isFinalStepFromOauthFlow ? (\n          <>\n            <div style={{ margin: '2rem 0', textAlign: 'center' }}>\n              <AiOutlineCheckCircle size={'90'} color='#2ECD72' />\n              <Title>\n                {t('integrationAuthPopup.textSuccess', {\n                  appName,\n                })}\n              </Title>\n            </div>\n          </>\n        ) : (\n          <>\n            <Logo src={appLogoUri} alt={appName} />\n            <Title>\n              {t('integrationAuthPopup.authorizationTitle', {\n                appName,\n              })}\n            </Title>\n            <SubTitle>\n              {t('integrationAuthPopup.authorizationSubtitle', {\n                appName,\n              })}\n            </SubTitle>\n          </>\n        )}\n\n        <AppAuthCredentialForm\n          appId={appId}\n          appName={appName}\n          initialValues={initialValues}\n          onSubmit={onSubmit}\n          isSavingApi={isSavingApi}\n          isOauthUri={isOauthUri}\n          skipParams={skipParams}\n          integrationId={integrationId}\n          bridgeId={bridgeId}\n          isNotValidIntegrationErrorMessage={isNotValidIntegrationErrorMessage}\n        />\n\n        <Disclaimer>\n          <BiShieldQuarter size={'1.2rem'} />\n          <div>\n            <Trans\n              ns={'all'}\n              i18nKey={'integrationAuthPopup.disclaimerLine'}\n              components={{\n                a: <a />,\n              }}\n            />\n          </div>\n        </Disclaimer>\n      </Body>\n    </Wrapper>\n  )\n}\n","import React from 'react'\nimport { PageEditor } from '@app/layouts/PageEditor'\nimport { Panel } from '@components/Panel'\nimport { makeNbeeSteps } from '@features/nbee/utils'\nimport { Loader } from '@components/Basic/Loader'\nimport { isInIframe } from '@app/utils/isInFrame'\n\ninterface Props {\n  activeStepIndex?: number\n  bridgeId?: number | string\n  loadingText?: string\n}\n\nconst embeddablePercentage: Record<number, number> = {\n  0: 33,\n  1: 66,\n  2: 100,\n}\n\nexport const LoadingStep: React.FC<Props> = ({\n  activeStepIndex,\n  bridgeId,\n  loadingText,\n}) => {\n  const steps = makeNbeeSteps(activeStepIndex, bridgeId)\n  const isEmbedded = isInIframe()\n  return (\n    <PageEditor\n      steps={isEmbedded ? undefined : steps}\n      activeStep={activeStepIndex}\n      hasTopBar={!isEmbedded}\n    >\n      <Panel\n        progressBarPercentage={\n          isEmbedded && activeStepIndex\n            ? embeddablePercentage[activeStepIndex] || 0\n            : undefined\n        }\n        body={\n          <div\n            style={{\n              position: 'relative',\n              height: 400,\n            }}\n          >\n            <Loader $active $size={'large'} $text={loadingText} />\n          </div>\n        }\n      />\n    </PageEditor>\n  )\n}\n","import React from 'react'\nimport { Modal } from '@components/Basic/Modal'\nimport { Button } from '@components/Basic/ButtonNbe'\nimport { ReactComponent as SuperHeroImg } from '@assets/images/superhero.svg'\nimport { Trans, useTranslation } from 'react-i18next'\nimport {\n  ModalBody,\n  ModalFooter,\n  ModalHeader,\n  ModalWrapper,\n} from '@features/nbee/ModalTrialInfo/styled'\nimport { appRoutes } from '@app/routes'\n\ninterface ModalProps {\n  isOpen: boolean\n  showSurpriseMessage?: boolean\n  planName?: string\n  onCloseModal: () => void\n}\n\nexport const ModalTrialInfo: React.FC<ModalProps> = ({\n  isOpen,\n  onCloseModal,\n  showSurpriseMessage,\n  planName,\n}) => {\n  const { t } = useTranslation()\n\n  return (\n    <Modal\n      isWide\n      isTransparent={false}\n      isOpen={isOpen}\n      onCloseModal={onCloseModal}\n      hideCloseButton\n    >\n      <ModalWrapper>\n        {showSurpriseMessage ? (\n          <>\n            <ModalHeader>\n              &#127881; {t('nbee.trialInfoModal.fromFreeHeader')} &#127881;\n            </ModalHeader>\n            <ModalBody>\n              <p>\n                {t('nbee.trialInfoModal.fromFreeParagraph1', {\n                  planName: planName,\n                })}{' '}\n                &#x1F680;\n              </p>\n              <p>{t('nbee.trialInfoModal.fromFreeParagraph2')}</p>\n              <SuperHeroImg />\n              <p>{t('nbee.trialInfoModal.fromFreeParagraph3')}</p>\n              <p>\n                <Trans\n                  i18nKey={'nbee.trialInfoModal.fromFreeParagraph4'}\n                  components={{\n                    a: <a href={appRoutes.pricing.makeUrl()} />,\n                  }}\n                />\n                &#x1F31F;\n              </p>\n              <p>{t('nbee.trialInfoModal.fromFreeParagraph5')} &#x1F91D;</p>\n            </ModalBody>\n          </>\n        ) : (\n          <>\n            <ModalHeader>\n              &#127881; {t('nbee.trialInfoModal.fromProHeader')} &#127881;\n            </ModalHeader>\n            <ModalBody>\n              <p>{t('nbee.trialInfoModal.fromProParagraph1')} &#x1F680;</p>\n              <p>{t('nbee.trialInfoModal.fromProParagraph2')}</p>\n              <SuperHeroImg />\n              <p>{t('nbee.trialInfoModal.fromProParagraph3')}</p>\n              <p>\n                <Trans\n                  i18nKey={'nbee.trialInfoModal.fromProParagraph4'}\n                  components={{\n                    a: <a href={appRoutes.pricing.makeUrl()} />,\n                  }}\n                />\n                &#x1F31F;\n              </p>\n              <p>{t('nbee.trialInfoModal.fromProParagraph5')} &#x1F91D;</p>\n            </ModalBody>\n          </>\n        )}\n\n        <ModalFooter>\n          <Button\n            onClick={onCloseModal}\n            $fluid\n            type={'button'}\n            $variant={'primary'}\n          >\n            Continue to LeadsBridge\n          </Button>\n        </ModalFooter>\n      </ModalWrapper>\n    </Modal>\n  )\n}\n","import React, { useEffect } from 'react'\nimport { PageEditor } from '@app/layouts/PageEditor'\nimport { makeNbeeSteps } from '@features/nbee/utils'\nimport { useTranslation } from 'react-i18next'\nimport { Message } from '@components/Basic/Message'\nimport { Button } from '@components/Basic/ButtonNbe'\nimport { useHistory } from 'react-router-dom'\nimport { appRoutes } from '@app/routes'\nimport { trackEvent } from '@app/dataTracking'\nimport { isInIframe } from '@app/utils/isInFrame'\n\ninterface Props {\n  errorMessage: string\n  activeStepIndex: number\n  bridgeId?: number | string\n  statusCode?: number\n  errorCode: number | string\n}\n\nexport const NbeeError: React.FC<Props> = ({\n  errorMessage,\n  activeStepIndex,\n  bridgeId,\n  statusCode,\n  errorCode,\n}) => {\n  const steps = makeNbeeSteps(activeStepIndex, bridgeId)\n  const { t } = useTranslation()\n  const history = useHistory()\n  const isEmbedded = isInIframe()\n\n  useEffect(() => {\n    trackEvent({\n      eventName: 'UnableToLoadBridge',\n      feature: 'NBEE',\n      step: 'Apps',\n      params: {\n        bridgeId: bridgeId ? parseInt(`${bridgeId}`, 10) : undefined,\n        custom: {\n          errorCode: errorCode || statusCode,\n          errorDescription: errorMessage,\n        },\n      },\n      sendEventToIntercom: true,\n    })\n  }, [bridgeId])\n\n  return (\n    <PageEditor\n      steps={steps}\n      activeStep={activeStepIndex}\n      pageTitle={t('common.genericError')}\n      hasTopBar={!isEmbedded}\n      backlink={{\n        url: '/bridges',\n        label: 'Exit',\n      }}\n    >\n      <Message $status={'error'}>{errorMessage}</Message>\n\n      {/* Go back button only in ca  */}\n      {statusCode === 404 || bridgeId ? (\n        <Button\n          $variant={'primary'}\n          onClick={() => {\n            if (statusCode === 404) {\n              window.location.href = `${process.env.REACT_APP_V1_URL}/bridges`\n              return\n            }\n\n            if (bridgeId) {\n              history.push(appRoutes.nbeeStep1Edit.makeUrl(`${bridgeId}`))\n            }\n          }}\n        >\n          {t('common.goBack')}\n        </Button>\n      ) : null}\n    </PageEditor>\n  )\n}\n","import React from 'react'\nimport { StyledSkeleton } from '@components/Basic/Skeleton/styled'\nimport {\n  SkeletonAllowedElement,\n  skeletonElementSizes,\n  SkeletonSizes,\n} from '@components/Basic/Skeleton/elementSizes'\n\ninterface SkeletonProps {\n  width?: string\n  height?: string\n  forElement?: SkeletonAllowedElement\n}\n\nconst getDefaultSize = (width?: string, height?: string): SkeletonSizes => ({\n  width: width || '100%',\n  height: height || '1.4em',\n  marginBottom: '0',\n  marginTop: '0',\n})\n\nconst getSpecificSize = (forElement: SkeletonAllowedElement) =>\n  skeletonElementSizes[forElement] || getDefaultSize()\n\nexport const Skeleton: React.FC<SkeletonProps> = ({\n  width,\n  height,\n  forElement,\n}) => {\n  const hasCustomSize = width && height\n  if (!hasCustomSize && !forElement) {\n    console.warn(\n      'Custom size or a specific element is required to use skeleton'\n    )\n    return null\n  }\n\n  const defaultSizes = getDefaultSize(width, height)\n\n  const computedSizes = forElement ? getSpecificSize(forElement) : defaultSizes\n\n  return (\n    <StyledSkeleton\n      width={computedSizes.width}\n      height={computedSizes.height}\n      marginBottom={computedSizes.marginBottom}\n      marginTop={computedSizes.marginTop}\n    />\n  )\n}\n","import React, { useState, useEffect } from 'react'\nimport { useFetchIntegrationsByAppId } from '@app/api/getIntegrationsByAppId'\nimport {\n  InputSmartSelect,\n  SelectValue,\n} from '@components/Form/InputSmartSelect'\nimport { Skeleton } from '@components/Basic/Skeleton'\nimport { useFetchAllApps } from '@app/api/getAllApps'\nimport { Trans, useTranslation } from 'react-i18next'\nimport {\n  AppConfigurationType,\n  PartialConfiguredApp,\n  BridgeFormValues,\n} from 'Nbee'\nimport { useField, useFormikContext } from 'formik'\nimport { ConnectedPopupWindow } from '@components/ConnectedPopupWindow'\nimport { appRoutes } from '@app/routes'\nimport { PopupInstanceDetector } from '@features/nbee/SimpleBridgeBuilderForm/fields/IntegrationSelector/styled'\nimport { TinyTextualButton } from '@components/Basic/TinyTextualButton'\nimport { MdEdit } from 'react-icons/md'\nimport { useTriggerSettingsUpdate } from '@features/nbee/SimpleBridgeBuilderForm/fields/IntegrationSettings/useTriggerSettingsUpdate'\nimport { InputFeedback } from '@components/Basic/InputFeedback'\nimport { Loader } from '@components/Basic/Loader'\nimport {\n  getPopupHeight,\n  getPopupWeight,\n} from '@components/ConnectedPopupWindow/utils'\nimport { usePostNewIntegration } from '@app/api/postNewIntegration'\nimport { ApiSaveIntegrationRequestBody } from 'BackendApi'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { RootState } from '@app/index'\nimport { HandleSignupCognitoProps } from '@app/services/apiAuthClient/utils'\nimport { Auth } from 'aws-amplify'\n\ninterface Props {\n  appId: number\n  parentAppId?: number | '' | null\n  type: AppConfigurationType\n  disabled?: boolean\n  isTesting?: boolean\n  onTestIntegrationRequest: () => void\n}\n\nexport const IntegrationSelector: React.FC<Props> = ({\n  appId,\n  type,\n  parentAppId,\n  disabled,\n  isTesting,\n  onTestIntegrationRequest,\n}) => {\n  const [currentId, setCurrentId] = useState<number>(0)\n\n  useEffect(() => {\n    if (parentAppId === '') {\n      setCurrentId(appId)\n    } else if (typeof parentAppId === 'number') {\n      setCurrentId(parentAppId)\n    }\n  }, [parentAppId, appId])\n\n  const {\n    isLoading,\n    data,\n    refetch: refetchIntegrationsByAppId,\n  } = useFetchIntegrationsByAppId(currentId)\n\n  const dispatch = useDispatch()\n  const selectedIdState = useSelector(\n    (state: RootState) => state.application.integrationId\n  )\n  const { values, setFieldValue } = useFormikContext<BridgeFormValues>()\n\n  // integrationId field\n  const [integrationIdField, integrationIdMeta, integrationIdHelpers] =\n    useField<PartialConfiguredApp['integrationId']>(`${type}.integrationId`)\n  const selectedIntegrationId = integrationIdField.value\n\n  const { refetchSettings } = useTriggerSettingsUpdate(type)\n\n  // getting app logo from cached react-query hook\n  const { data: allApps } = useFetchAllApps()\n\n  const { mutateAsync: saveIntegrationAsync, isLoading: isSavingIntegration } =\n    usePostNewIntegration()\n\n  const selectedApp = (allApps || []).find((app) => app.id === appId)\n  const selectedAppLogoUri = selectedApp?.logoUriSmall\n  const selectedAppAuthType = selectedApp?.authType\n  const selectedAppId = selectedApp?.id\n\n  const initialValues: SelectValue[] = (data || []).map((o) => ({\n    label: o.name,\n    value: `${o.id}`,\n    logoUri: selectedAppLogoUri,\n  }))\n\n  // auth credentials popup\n  const [popupDestinationUrl, setPopupDestinationUrl] = useState<string | null>(\n    null\n  )\n  const [popupInstace, setPopupInstace] = useState<Window | null>(null)\n  const popupIsOpen = Boolean(popupInstace && !popupInstace.closed)\n\n  const [integrationDataFromPopup, setIntegrationDataFromPopup] = useState<{\n    id: number\n    name: string\n  }>()\n\n  // if is an edit we append to popup url the integration id as query string\n  // we also need to check if an edit from v1 or is from v2 in that case has a bridgeId\n  const bridgeId = values.ui?.bridgeId\n  const onConnectNewAccountRequest = async (integrationIdToEdit?: number) => {\n    setIntegrationDataFromPopup(undefined)\n    let newIntegrationId: number | undefined\n\n    // special case for new integrations of type listener\n    // we need to create a new integration to allow BE to create the listener\n    // name and credentials can be left empty\n    if (\n      selectedAppAuthType === 'listener' &&\n      selectedAppId === values?.source.appId &&\n      !integrationIdToEdit\n    ) {\n      const requestBody: ApiSaveIntegrationRequestBody = {\n        name: '',\n        appId: Number(appId),\n        credentials: [],\n      }\n      const newIntegrationResponse = await saveIntegrationAsync({ requestBody })\n      newIntegrationId = Number(newIntegrationResponse?.data?.integration?.id)\n    }\n\n    const popupUrl =\n      selectedAppAuthType === 'listener' &&\n      selectedAppId === values?.source.appId && // special case for webhook\n      !integrationIdToEdit\n        ? appRoutes.incomingDataScreen.makeUrl({\n            appId: `${appId}`,\n            integrationId: `${newIntegrationId}`,\n          })\n        : selectedAppAuthType === 'listener' &&\n          integrationIdToEdit &&\n          selectedAppId === values?.source.appId\n        ? appRoutes.incomingDataScreenEdit.makeUrl({\n            appId: `${appId}`,\n            integrationId: `${integrationIdToEdit}`,\n          })\n        : integrationIdToEdit && bridgeId\n        ? appRoutes.integrationAuthScreenEditWithBridgeId.makeUrl({\n            integrationId: `${integrationIdToEdit}`,\n            appId: `${currentId}`,\n            bridgeId: `${bridgeId}`,\n          })\n        : integrationIdToEdit\n        ? appRoutes.integrationAuthScreenEdit.makeUrl({\n            integrationId: `${integrationIdToEdit}`,\n            appId: `${currentId}`,\n          })\n        : appRoutes.integrationAuthScreen.makeUrl({\n            appId: `${currentId}`,\n          })\n    setPopupDestinationUrl(popupUrl)\n  }\n\n  useEffect(() => {\n    if (selectedIdState !== null && selectedIdState === selectedIntegrationId) {\n      onConnectNewAccountRequest(selectedIntegrationId)\n\n      dispatch({ type: 'RESET_TRIGGER_CONNECT_ACCOUNT_POPUP' })\n    }\n  }, [selectedIdState])\n\n  const defaultValue = integrationDataFromPopup\n    ? {\n        label: integrationDataFromPopup.name,\n        value: integrationDataFromPopup.id,\n        logoUri: selectedAppLogoUri,\n      }\n    : selectedIntegrationId\n    ? initialValues.find((o) => o.value === `${selectedIntegrationId}`)\n    : undefined\n\n  useEffect(() => {\n    setFieldValue(\n      `ui.${type}.selectedIntegrationName`,\n      defaultValue?.label || ''\n    )\n  }, [defaultValue?.label])\n\n  const errorMessage = integrationIdMeta.error\n  const isTouched = integrationIdMeta.touched\n  const hasIntegrationApiError =\n    values.ui && values.ui[type] && values.ui[type]?.hasIntegrationApiError\n  const isLoadingApi =\n    (values.ui && values.ui[type] && values.ui[type]!.isLoadingApi) ||\n    isTesting ||\n    isSavingIntegration\n\n  const [authData, setAuthData] = useState<HandleSignupCognitoProps | null>(\n    null\n  )\n\n  // Set Auth Data on mount\n  useEffect(() => {\n    console.log('isIframe', window.self !== window.top)\n    Auth.currentAuthenticatedUser()\n      .then((authData_) => {\n        setAuthData({\n          username: authData_.username || '',\n          idToken: authData_.signInUserSession.idToken.jwtToken,\n          accessToken: authData_.signInUserSession.accessToken.jwtToken,\n          refreshToken: authData_.signInUserSession.refreshToken.token,\n          isIframe: window.self !== window.top,\n        })\n      })\n      .catch((e) => {\n        console.info('No auth state:', e)\n      })\n  }, [])\n\n  return (\n    <div>\n      {isLoading && !defaultValue ? (\n        <Skeleton forElement={'smart-select'} />\n      ) : (\n        <div style={{ position: 'relative' }}>\n          {isLoading || isLoadingApi ? <Loader $active $dimmer /> : null}\n          <InputSmartSelect\n            placeholder={`Connect ${selectedApp?.name}`}\n            initialValues={initialValues}\n            defaultValue={defaultValue}\n            key={defaultValue?.label}\n            isLoading={popupIsOpen}\n            isDisabled={isLoadingApi || values.ui?.isBridgeEnabled}\n            isClearable={false}\n            onSelect={(selectedValue) => {\n              if (Array.isArray(selectedValue)) {\n                return\n              }\n              const newValue = selectedValue\n                ? parseInt(`${selectedValue.value}`, 10)\n                : undefined\n              integrationIdHelpers.setValue(newValue)\n            }}\n            addActionClick={{\n              label: 'Create a new integration',\n              onClick: () => onConnectNewAccountRequest(),\n            }}\n            onBlur={() => {\n              integrationIdHelpers.setTouched(true)\n            }}\n            noOptionsMessageText={' '}\n            $status={\n              isTouched && errorMessage\n                ? {\n                    error: errorMessage,\n                  }\n                : undefined\n            }\n          />\n        </div>\n      )}\n\n      {selectedIntegrationId && !popupIsOpen && !values.ui?.isBridgeEnabled ? (\n        <div\n          style={{\n            display: 'grid',\n            gridTemplateColumns: '1fr auto',\n            gap: '1rem',\n\n            // hiding content while loading but keeping height to prevent content jumping\n            opacity: isLoadingApi ? 0 : 1,\n            pointerEvents: isLoadingApi ? 'none' : undefined,\n          }}\n        >\n          {hasIntegrationApiError ? (\n            <InputFeedback\n              $status={{\n                error: (\n                  <Trans\n                    ns={'all'}\n                    i18nKey={\n                      'nbee.bridgeBuilder.validation.integrationApiError'\n                    }\n                    components={{\n                      span: (\n                        <span\n                          style={{\n                            textDecoration: 'underline',\n                            cursor: 'pointer',\n                          }}\n                          onClick={() => {\n                            onConnectNewAccountRequest(selectedIntegrationId)\n                          }}\n                        />\n                      ),\n                    }}\n                  />\n                ),\n              }}\n            />\n          ) : (\n            <div />\n          )}\n          <div style={{ textAlign: 'right' }}>\n            <TinyTextualButton\n              onClick={() => {\n                onConnectNewAccountRequest(selectedIntegrationId)\n              }}\n            >\n              <MdEdit /> edit\n            </TinyTextualButton>\n          </div>\n        </div>\n      ) : null}\n\n      {popupIsOpen && (\n        <PopupInstanceDetector>\n          Account configuration screen is open.\n          <span\n            onClick={() => popupInstace!.focus()}\n            style={{\n              fontWeight: 600,\n              textDecoration: 'underline',\n              cursor: 'pointer',\n            }}\n          >\n            click here to view\n          </span>\n        </PopupInstanceDetector>\n      )}\n\n      {popupDestinationUrl ? (\n        <ConnectedPopupWindow\n          initialData={authData?.isIframe ? authData : null} // passing auth data to popup only when we're in an iframe\n          urlToOpen={popupDestinationUrl}\n          popupName={type}\n          widthPx={getPopupWeight()}\n          heightPx={getPopupHeight()}\n          onPopupOpen={(popup) => {\n            setPopupInstace(popup)\n          }}\n          onPopupClose={(newData) => {\n            if (newData) {\n              const newIntegrationId = (newData as any).integrationId\n              const newIntegrationName = (newData as any).integrationName\n\n              // updating field with the just created integrationId\n              if (newIntegrationId && newIntegrationName) {\n                setIntegrationDataFromPopup({\n                  id: newIntegrationId,\n                  name: newIntegrationName,\n                })\n                onTestIntegrationRequest()\n                integrationIdHelpers.setValue(newIntegrationId)\n              }\n\n              // we refetch all integrations for selected app to keep the list updated\n              refetchIntegrationsByAppId()\n\n              // in case we are edited the selected integration we need to refetch integration settings\n              if (\n                newIntegrationId &&\n                newIntegrationId === selectedIntegrationId\n              ) {\n                refetchSettings()\n              }\n            }\n\n            setPopupDestinationUrl(null)\n          }}\n        />\n      ) : null}\n    </div>\n  )\n}\n","import React, { Fragment, useEffect, useRef, useState } from 'react'\nimport { useChooseIntegrationSettings } from '@app/api/postChooseIntegrationSetting'\nimport { useFormikContext } from 'formik'\nimport {\n  AppConfigurationType,\n  BridgeFormValues,\n  RetrivedSettingField,\n  AppIntegrationSetting,\n} from 'Nbee'\nimport { ApiAppSetting } from 'BackendApi'\nimport { Skeleton } from '@components/Basic/Skeleton'\nimport { SettingFieldSmartSelect } from './SettingFieldSmartSelect'\nimport { SettingFieldInput } from './SettingFieldInput'\nimport { SettingFieldToggle } from './SettingFieldToggle'\nimport {\n  fieldsForSmartSelect,\n  fieldsForInput,\n  fieldsForToggle,\n  fieldsForSmartCreatableSelect,\n  fillNewSettingsWithExistingValues,\n  fieldsForGooglePicker,\n} from './utils'\nimport { SettingFieldSmartCreatableSelect } from './SettingFieldSmartCreatableSelect'\nimport { useTranslation } from 'react-i18next'\nimport { useTriggerSettingsUpdate } from '@features/nbee/SimpleBridgeBuilderForm/fields/IntegrationSettings/useTriggerSettingsUpdate'\nimport { usePopupError } from './usePopupError'\nimport { GooglePicker } from '@components/ButtonProvider/Google/GooglePicker'\n\ninterface IntegrationSettingsProps {\n  type: AppConfigurationType\n  isValidIntegration?: boolean\n  onCompletionChange?: (isComplete: boolean) => void\n  templateSettings?: AppIntegrationSetting[]\n}\n\nexport const IntegrationSettings: React.FC<IntegrationSettingsProps> = ({\n  type,\n  isValidIntegration,\n  onCompletionChange,\n  templateSettings,\n}) => {\n  const { t } = useTranslation()\n  const skipRequestNewSettingsToApi = useRef<boolean>()\n  const [firstRun, setFirstRun] = useState(false)\n\n  // some formik helpers\n  const {\n    values,\n    setFieldValue,\n    setSubmitting,\n    setFieldTouched,\n    validateForm,\n  } = useFormikContext<BridgeFormValues>()\n  const selectedIntegrationId = values[type].integrationId\n  const selectedAppId = values[type].appId\n  const settingFieldName = `${type}.settings`\n\n  console.log('currentSettingsValues', values[type].settings, selectedAppId)\n  const currentSettingsValues = values[type].settings || []\n\n  // chooseIntegrationSettings mutation\n  const {\n    data: integrationSettingsResponse,\n    mutate: retrieveIntegrationSettings,\n    isLoading: isLoadingIntegrationSettings,\n    error: retrieveIntegrationSettingsApiError,\n  } = useChooseIntegrationSettings()\n  const [fieldsToRender, setFieldsToRender] = useState<ApiAppSetting[]>(\n    currentSettingsValues as unknown as ApiAppSetting[]\n  )\n\n  const retrieveUpdatedSettingFields = (\n    integrationId: number,\n    appId: number\n  ) => {\n    retrieveIntegrationSettings({\n      integrationSettingsData: {\n        integrationId,\n        appId,\n        type,\n        settings: currentSettingsValues.map((setting) => ({\n          key: setting.key,\n          value: setting.value || '',\n        })),\n        refresh:\n          (values.ui && values.ui[type] && values.ui[type]!.refresh) || [],\n        bridgeId: values.ui?.bridgeId, // this is only when we are editing an existing bridge, for new bridges this will be undefined, so it will be ignored\n      },\n    })\n  }\n\n  // handling api error\n  const { showPopupError, clearPopupError } = usePopupError({\n    type,\n    showLogo: true,\n  })\n  useEffect(() => {\n    clearPopupError()\n    if (retrieveIntegrationSettingsApiError) {\n      showPopupError(retrieveIntegrationSettingsApiError)\n    }\n  }, [retrieveIntegrationSettingsApiError])\n\n  // saving in local state\n  useEffect(() => {\n    const newSettingsReceived =\n      integrationSettingsResponse?.data?.schemaSettings\n    if (newSettingsReceived) {\n      setFieldsToRender(newSettingsReceived)\n\n      // we need to inform formik about the new settings received,  so it will be\n      // able to proper handle touched states. To do this we merge existing\n      // values into new settings data and we keep new settings with a default value.\n      // This will also solve the case where a value was set but is not existing anymore\n      // (example a filed that was depending from another value\n      const existingSettings = values[type].settings || []\n      const newSettingsWithDefaults = fillNewSettingsWithExistingValues(\n        newSettingsReceived,\n        existingSettings\n      )\n\n      // before updating form status we need to pause the re-fetching of new settings\n      // and we set it back to normal once we are sure formik state has been updated\n      // this is to prevent an endless loop, since api request to get new settings starts\n      // is exectued every time formik state (settings field) changes\n      skipRequestNewSettingsToApi.current = true\n      setFieldValue(settingFieldName, newSettingsWithDefaults)\n      // reset refresh array so we don't always request cache invalidation\n      setFieldValue(`ui.${type}.refresh`, [])\n\n      setTimeout(() => {\n        skipRequestNewSettingsToApi.current = false\n      }, 300)\n    }\n  }, [integrationSettingsResponse])\n\n  // cleanup integration settings when selectedIntegrationId changes, if we don't have template values\n  useEffect(() => {\n    if (!selectedIntegrationId) {\n      if (!templateSettings?.length) {\n        console.log('emptying integration settings (IntegrationSettings)')\n        setFieldsToRender([])\n        setFieldValue(settingFieldName, [])\n        validateForm()\n        setFieldTouched(settingFieldName, false)\n        clearPopupError()\n      } else {\n        // if we do have template settings values, we need to set them as default values\n        setFieldsToRender(templateSettings as any)\n        setFieldValue(settingFieldName, templateSettings)\n        validateForm()\n        setFieldTouched(settingFieldName, false)\n        clearPopupError()\n      }\n    }\n  }, [selectedIntegrationId])\n\n  // re-run mutation to get new settings fields when form settings values are updated\n  const triggerSettingsUpdate =\n    values.ui && values.ui[type] && values.ui[type]!.triggerSettingsUpdate\n  useEffect(() => {\n    // if (skipRequestNewSettingsToApi.current) {\n    //   return\n    // }\n\n    if (\n      selectedIntegrationId &&\n      selectedAppId &&\n      isValidIntegration &&\n      !isLoadingIntegrationSettings\n    ) {\n      retrieveUpdatedSettingFields(selectedIntegrationId, selectedAppId)\n    }\n  }, [\n    selectedIntegrationId,\n    // currentSettingsValues,\n    triggerSettingsUpdate,\n    isValidIntegration,\n  ])\n\n  const { refetchSettings } = useTriggerSettingsUpdate(type)\n  useEffect(() => {\n    if (!firstRun && selectedIntegrationId) {\n      setFirstRun(true)\n      refetchSettings()\n    }\n  }, [currentSettingsValues, firstRun, selectedIntegrationId])\n\n  useEffect(() => {\n    setFirstRun(false)\n  }, [selectedIntegrationId])\n\n  // when retrieving new settings, we need to updated formik isSubmitting to disable continue button\n  useEffect(() => {\n    setSubmitting(isLoadingIntegrationSettings)\n    setFieldValue(`ui.${type}.isLoadingApi`, isLoadingIntegrationSettings)\n  }, [isLoadingIntegrationSettings])\n\n  const canShowTitle = Boolean(\n    selectedIntegrationId && isValidIntegration && fieldsToRender.length\n  )\n\n  const requiredFields: RetrivedSettingField[] = fieldsToRender.map(\n    (field) => ({\n      id: field.id,\n      label: field.label,\n      required: field.required || false,\n      type: field.type,\n      format: field.format,\n    })\n  )\n\n  useEffect(() => {\n    setFieldValue(`ui.${type}.allRetrivedSettingFields`, requiredFields)\n  }, [fieldsToRender])\n\n  return (\n    <Fragment>\n      {canShowTitle && (\n        <h2>{t('nbee.bridgeBuilder.integrationSettingsTitle')}</h2>\n      )}\n      {fieldsToRender.map((field, idx) => {\n        return field.hide ? null : (\n          <Fragment key={field.id}>\n            <div>\n              {fieldsForSmartCreatableSelect.includes(field.type) ? (\n                <SettingFieldSmartCreatableSelect\n                  fieldSchema={field}\n                  type={type}\n                  index={idx}\n                  isLoading={isLoadingIntegrationSettings}\n                />\n              ) : fieldsForGooglePicker.includes(field.type) ? (\n                <GooglePicker\n                  fieldSchema={field}\n                  type={type}\n                  index={idx}\n                  isLoading={isLoadingIntegrationSettings}\n                  apiHasError={!!retrieveIntegrationSettingsApiError}\n                />\n              ) : fieldsForSmartSelect.includes(field.type) ? (\n                <SettingFieldSmartSelect\n                  fieldSchema={field}\n                  type={type}\n                  index={idx}\n                  isLoading={isLoadingIntegrationSettings}\n                  apiHasError={!!retrieveIntegrationSettingsApiError}\n                />\n              ) : fieldsForInput.includes(field.type) ? (\n                <SettingFieldInput\n                  fieldSchema={field}\n                  type={type}\n                  index={idx}\n                  isLoading={isLoadingIntegrationSettings}\n                />\n              ) : fieldsForToggle.includes(field.type) ? (\n                <SettingFieldToggle\n                  fieldSchema={field}\n                  type={type}\n                  index={idx}\n                  isLoading={isLoadingIntegrationSettings}\n                />\n              ) : null}\n            </div>\n          </Fragment>\n        )\n      })}\n\n      {/* Loading state (we need to keep existing fields visible */}\n      {isLoadingIntegrationSettings ? (\n        <div>\n          <Skeleton forElement={'label'} />\n          <Skeleton forElement={'input'} />\n        </div>\n      ) : null}\n    </Fragment>\n  )\n}\n","import React, { useEffect, useState } from 'react'\nimport {\n  AppConfigurationType,\n  BridgeFormValues,\n  AppIntegrationSetting,\n} from 'Nbee'\nimport { ApiErrorResponse } from 'BackendApi'\nimport { AppSelector } from '@features/nbee/SimpleBridgeBuilderForm/fields/AppSelector'\nimport { useFormikContext } from 'formik'\nimport { IntegrationSelector } from '@features/nbee/SimpleBridgeBuilderForm/fields/IntegrationSelector'\nimport { IntegrationSettings } from '@features/nbee/SimpleBridgeBuilderForm/fields/IntegrationSettings'\nimport { useTestIntegrationCredentialsById } from '@app/api/testIntegrationCredentialsById'\nimport { useTranslation } from 'react-i18next'\nimport { usePopupError } from '@features/nbee/SimpleBridgeBuilderForm/fields/IntegrationSettings/usePopupError'\n\ninterface AppConfiguratorProps {\n  type: AppConfigurationType\n  canShowIntegrationField?: boolean\n  templateSettings?: AppIntegrationSetting[]\n}\n\nexport const AppConfigurator: React.FC<AppConfiguratorProps> = ({\n  type,\n  canShowIntegrationField,\n  templateSettings,\n}) => {\n  const { t } = useTranslation()\n  // some formik helpers\n  const { values, setFieldValue, initialValues, setSubmitting } =\n    useFormikContext<BridgeFormValues>()\n  const selectedAppId = values[type].appId\n  const parentAppId = values[type].parentAppId\n  const selectedIntegrationId = values[type].integrationId\n\n  // test integration once selected\n  const {\n    data: isValidIntegrationResponse,\n    error: isValidIntegrationApiError,\n    isLoading: isCheckingValidIntegration,\n    isRefetching: isReCheckingValidIntegration,\n    refetch: reCheckValidIntegration,\n  } = useTestIntegrationCredentialsById(selectedIntegrationId, selectedAppId)\n\n  const isTestingIntegrationCredentials =\n    isCheckingValidIntegration || isReCheckingValidIntegration\n\n  const isValidIntegration = Boolean(isValidIntegrationResponse?.data?.result)\n  // handling error in case isValidIntegrationResponse retuns false\n  const { showPopupError, clearPopupError, setIntegrationId } = usePopupError({\n    type,\n    showLogo: true,\n  })\n\n  useEffect(() => {\n    clearPopupError()\n    if (isValidIntegrationApiError && selectedIntegrationId) {\n      setIntegrationId(selectedIntegrationId)\n      showPopupError(isValidIntegrationApiError)\n    }\n\n    // Back-end does not return an error message in case integration is not valid,\n    // instead it returns a 200 reponse with result: false, so in order to achieve same\n    // behaviour of the 'integration-error'  we need to simulate the ApiErrorResponse structure\n    if (isValidIntegrationResponse?.data.result === false) {\n      const popupErrorFake = {\n        response: {\n          data: {\n            error: {\n              code: 'integration-error',\n              message:\n                isValidIntegrationResponse.data.message ||\n                t('nbee.bridgeBuilder.validation.integrationApiError'),\n            },\n          },\n        },\n      } as unknown as ApiErrorResponse\n      showPopupError(popupErrorFake)\n    }\n  }, [isValidIntegrationResponse, isValidIntegrationApiError])\n\n  const [localTemplateSettings, setLocalTemplateSettings] = useState<\n    AppIntegrationSetting[]\n  >(templateSettings || [])\n\n  // we need to disable submit while testing integration\n  useEffect(() => {\n    setSubmitting(isTestingIntegrationCredentials)\n  }, [isTestingIntegrationCredentials])\n\n  // reset integrationId when appId changes\n  // TODO: if user changes appId and then changes it back to the previous one, the initialValues are not restored\n  useEffect(() => {\n    if (!selectedAppId || selectedAppId !== initialValues[type].appId) {\n      setFieldValue(`${type}.integrationId`, undefined)\n      setLocalTemplateSettings([])\n    }\n  }, [selectedAppId])\n\n  // when integrationID changes we need to empty the integration settings\n  useEffect(() => {\n    const isIntegrationIdChanged =\n      !selectedIntegrationId ||\n      selectedIntegrationId !== initialValues[type].integrationId\n    const settingsAreFilled = values[type].settings?.length\n    if (isIntegrationIdChanged && settingsAreFilled) {\n      if (localTemplateSettings?.length) {\n        // Special case: reset settings to template settings, if we have them\n        setFieldValue(`${type}.settings`, localTemplateSettings)\n      } else {\n        // Normal case: reset settings\n        console.log('emptying integration settings (AppConfigurator)')\n        setFieldValue(`${type}.settings`, [])\n      }\n    }\n  }, [selectedIntegrationId])\n\n  const bothAppsAreSelected =\n    Number.isInteger(values.source.appId) &&\n    Number.isInteger(values.destination.appId) &&\n    canShowIntegrationField\n\n  const appHasSetting = values[type].settings?.length\n\n  return (\n    <>\n      <h1>\n        {type === 'source'\n          ? t('nbee.bridgeBuilder.sourceTitle')\n          : t('nbee.bridgeBuilder.destinationTitle')}\n      </h1>\n      <h4>\n        {type === 'source'\n          ? t('nbee.bridgeBuilder.sourceSubTitle')\n          : t('nbee.bridgeBuilder.destinationSubTitle')}\n      </h4>\n\n      {/* Select app */}\n      <AppSelector type={type} />\n\n      {/* Select integration/connection  */}\n      {bothAppsAreSelected || appHasSetting ? (\n        <IntegrationSelector\n          type={type}\n          appId={selectedAppId!}\n          parentAppId={parentAppId}\n          isTesting={\n            !!(selectedIntegrationId && isTestingIntegrationCredentials)\n          }\n          onTestIntegrationRequest={() => {\n            reCheckValidIntegration()\n          }}\n        />\n      ) : null}\n\n      {/* Dynamic settings returned by api */}\n      <IntegrationSettings\n        type={type}\n        isValidIntegration={isValidIntegration}\n        templateSettings={localTemplateSettings}\n      />\n    </>\n  )\n}\n","import React, { useEffect, useMemo, useState } from 'react'\nimport { useFetchAllApps } from '@app/api/getAllApps'\nimport {\n  InputSmartSelect,\n  SelectValue,\n} from '@components/Form/InputSmartSelect'\nimport { useFetchMostPopularApps } from '@app/api/getMostPopularApp'\nimport { useTranslation } from 'react-i18next'\nimport {\n  getAppOptionFromAppId,\n  tranformApiAppsToSelectOptions,\n} from '@features/nbee/SimpleBridgeBuilderForm/fields/AppSelector/utils'\nimport { useFetchConnectedApps } from '@app/api/getConnectedApps'\nimport Fuse from 'fuse.js'\nimport { useField, useFormikContext } from 'formik'\nimport {\n  AppConfigurationType,\n  PartialConfiguredApp,\n  BridgeFormValues,\n} from 'Nbee'\nimport { trackEvent } from '@app/dataTracking'\nimport { makeNbeeTrackingParams } from '@app/dataTracking/utils'\nimport { useRouteMatch } from 'react-router-dom'\nimport { bridgeBuilderStep1Paths, bridgeByUrlPartnersPaths } from '@app/routes'\n\ninterface AppSelectorProps {\n  type: AppConfigurationType\n}\n\nexport const AppSelector: React.FC<AppSelectorProps> = ({ type }) => {\n  const { t } = useTranslation()\n  const [appNotFound, setAppNotFound] = useState(false)\n\n  const step1MatchRoute = useRouteMatch([\n    ...bridgeBuilderStep1Paths,\n    ...bridgeByUrlPartnersPaths,\n  ])\n  const isInStep1 = !!step1MatchRoute?.isExact\n\n  // appId field\n  const inputName = `${type}.appId`\n  const [appIdField, appIdMeta, appIdHelpers] =\n    useField<PartialConfiguredApp['appId']>(inputName)\n  const selectedAppId = appIdField.value\n\n  // formik helpers\n  const { values, setFieldValue } = useFormikContext<BridgeFormValues>()\n\n  const { data: allApps, isLoading: isLoadingApps } = useFetchAllApps()\n  const { data: mostPopular, isLoading: isLoadingMostPopular } =\n    useFetchMostPopularApps({ type, limit: 50 })\n\n  const { data: connectedApps, isLoading: isLoadingConnectedApps } =\n    useFetchConnectedApps()\n\n  const isLoadingAll =\n    isLoadingApps || isLoadingMostPopular || isLoadingConnectedApps\n\n  const mostPopularAppsOptions = tranformApiAppsToSelectOptions(mostPopular)\n  const allAppsOptions = useMemo(\n    () => tranformApiAppsToSelectOptions(allApps),\n    [allApps]\n  )\n\n  const connectedAppsOptions = tranformApiAppsToSelectOptions(connectedApps)\n\n  const defaultValue = getAppOptionFromAppId(selectedAppId, allAppsOptions)\n\n  // every time we have a selected value (defaultValue) we store in our formik state its logo\n  // so we can re-use it in case of need\n  useEffect(() => {\n    setFieldValue(`ui.${type}.logoUri`, defaultValue?.logoUri || '')\n    setFieldValue(`ui.${type}.selectedAppName`, defaultValue?.label || '')\n    setFieldValue(`${type}.parentAppId`, defaultValue?.parentAppId || '')\n  }, [defaultValue])\n\n  // sending track event every time a value is updated\n  const selectedAppName =\n    (allApps || []).find((a) => a.id === selectedAppId)?.name || ''\n  useEffect(() => {\n    if (selectedAppId && selectedAppName) {\n      trackEvent({\n        eventName: type === 'source' ? 'SourceSelected' : 'DestinationSelected',\n        feature: 'NBEE',\n        step: isInStep1 ? 'Apps' : 'BridgeChooser',\n        params: {\n          ...makeNbeeTrackingParams(values, type),\n          // be sure we always send the just selected value and to avoid that form values are not being updated yet\n          appName: selectedAppName,\n          [`${type}AppId`]: selectedAppId, // computed sourceAppId or destinationAppID\n          [`${type}AppName`]: selectedAppName, // computed sourceAppName or destinationAppName\n        },\n        sendEventToIntercom: true,\n      })\n    }\n  }, [selectedAppId, selectedAppName])\n\n  const initialValues = [\n    {\n      label: t('common.connectedApps'),\n      options: connectedAppsOptions,\n    },\n    {\n      label: t('common.mostPopular'),\n      options: mostPopularAppsOptions,\n    },\n  ]\n\n  // setting app fuzzy search with Fuse.js\n  // to search with typo tollerance\n  // https://fusejs.io/api/options.html\n  const fuzzySearch = new Fuse(allAppsOptions, {\n    isCaseSensitive: false,\n    shouldSort: true,\n    findAllMatches: true,\n    includeMatches: true,\n    includeScore: true,\n    // minMatchCharLength: 3,\n    threshold: 0.25, // 0 for exact match of letter and location, 1 to match everything\n    distance: 30,\n    // distance: 800,\n    keys: ['label'],\n    ignoreLocation: true, // in this way searching for `lead` will make \"Lead Metadata\" and \"Facebook Lead Ads\" at same position\n    sortFn: (a, b) => {\n      // this is the order that comes from original array (index position from 0 to array.length)\n      const aPopularityOrder = a.idx + 1\n      const bPopularityOrder = b.idx + 1\n\n      // this is the score assigned by fuseJS\n      const aScore = a.score\n      const bScore = b.score\n\n      // this is our computed score\n      // it means we have our internal score calculated from popularity (1 - 1 / popularityOrder) and we add it tp the fuzzy search score\n      // computed scores closest to zero will appear first\n      const aComputedOrder = 1 - 1 / aPopularityOrder + aScore\n      const bComputedOrder = 1 - 1 / bPopularityOrder + bScore\n\n      return aComputedOrder < bComputedOrder ? -1 : 1\n    },\n  })\n\n  // this function will be used to filter between all apps\n  const filterResults = (pattern: string) =>\n    fuzzySearch.search(pattern).slice(0, 40)\n\n  // react-select option to load new options with async search\n  const onAppSearch = (inputValue: string): Promise<SelectValue[]> =>\n    new Promise((resolve) => {\n      const fuzzyResults = filterResults(inputValue)\n      const flattenResults = fuzzyResults.map(({ item }) => item)\n      resolve(flattenResults)\n      if (flattenResults.length) {\n        setAppNotFound(false)\n      }\n      if (!flattenResults.length && !appNotFound) {\n        setAppNotFound(true)\n        trackEvent({\n          eventName:\n            type === 'source' ? 'SourceNotFound' : 'DestinationNotFound',\n          step: isInStep1 ? 'Apps' : 'BridgeChooser',\n          feature: 'NBEE',\n          params: {\n            ...makeNbeeTrackingParams(values, type),\n            custom: {\n              searchAppName: inputValue,\n            },\n          },\n          sendEventToIntercom: true,\n        })\n      }\n    })\n\n  // we set a render key to force component in sync when is in edit\n  const renderKey = defaultValue ? type + defaultValue.value : undefined\n\n  const isLoadingApi =\n    values.ui && values.ui[type] && values.ui[type]!.isLoadingApi\n\n  return (\n    <div>\n      <InputSmartSelect\n        placeholder={t('nbee.bridgeBuilder.selectApp')}\n        isLoading={isLoadingAll}\n        isDisabled={isLoadingApi || values.ui?.isBridgeEnabled}\n        defaultValue={defaultValue}\n        initialValues={initialValues}\n        isClearable={false}\n        // async search\n        loadOptions={onAppSearch}\n        // enforcing default value as key will force componente re-rending\n        // when async default value arrives\n        key={renderKey}\n        onSelect={(selectedApp) => {\n          if (Array.isArray(selectedApp)) {\n            return\n          }\n\n          const newValue = selectedApp\n            ? parseInt(`${selectedApp.value}`, 10)\n            : undefined\n\n          // update formik value\n          appIdHelpers.setValue(newValue)\n        }}\n        name={inputName}\n        onBlur={() => {\n          appIdHelpers.setTouched(true)\n        }}\n        $status={\n          appIdMeta.touched && appIdMeta.error\n            ? {\n                error: appIdMeta.error,\n              }\n            : undefined\n        }\n      />\n    </div>\n  )\n}\n","import React, { Fragment } from 'react'\nimport { Formik, Form, FormikHelpers } from 'formik'\nimport { BridgeFormValues, AppIntegrationSetting } from 'Nbee'\nimport { FormInner } from './FormInner'\nimport { Button } from '@components/Basic/ButtonNbe'\nimport { PageEditor } from '@app/layouts/PageEditor'\nimport { Panel } from '@components/Panel'\nimport { useTranslation } from 'react-i18next'\nimport { makeNbeeSteps } from '@features/nbee/utils'\nimport { validateNbeeForm } from './validation'\nimport { touchAllSettings } from '@features/nbee/SimpleBridgeBuilderForm/fields/IntegrationSettings/touchAllSettings'\nimport { trackEvent } from '@app/dataTracking'\nimport { makeNbeeTrackingParams } from '@app/dataTracking/utils'\nimport { StatusBarBridge } from '@features/nbee/StatusBarBridge'\nimport { useHistory } from 'react-router-dom'\nimport { appRoutes } from '@app/routes'\nimport { Loader } from '@components/Basic/Loader'\nimport { isInIframe } from '@app/utils/isInFrame'\nimport { ApiUserModuleItem, ApiUser } from 'BackendApi'\nimport { useEmailReceiptValidation } from '@features/nbee/EmailReceipt/useEmailReceiptValidation'\n\ninterface SimpleBridgeBuilderFormProps {\n  initialValues: BridgeFormValues\n  onSubmit: (\n    formValues: BridgeFormValues,\n    formikHelpers: FormikHelpers<BridgeFormValues>\n  ) => void\n  isSavingApi?: boolean\n  emailReceiptUserModule?: ApiUserModuleItem\n  userData?: ApiUser\n  templateSettings?: AppIntegrationSetting[]\n}\n\nexport const SimpleBridgeBuilderForm: React.FC<SimpleBridgeBuilderFormProps> =\n  ({\n    initialValues,\n    onSubmit,\n    isSavingApi,\n    emailReceiptUserModule,\n    userData,\n    templateSettings,\n  }) => {\n    const { t } = useTranslation()\n    const steps = makeNbeeSteps(0)\n    const history = useHistory()\n    const isEmbedded = isInIframe()\n\n    return (\n      <Formik\n        initialValues={initialValues}\n        validate={validateNbeeForm}\n        enableReinitialize={true}\n        validateOnMount\n        onSubmit={(values, formikHelpers) => {\n          trackEvent({\n            eventName: 'NextClicked',\n            feature: 'NBEE',\n            step: 'Apps',\n            params: {\n              ...makeNbeeTrackingParams(values),\n            },\n            sendEventToIntercom: Boolean(values.source.appId === 370), // only send to intercom if source is Facebook Lead Ads\n          })\n          if (values.ui?.isBridgeEnabled) {\n            history.push(appRoutes.nbeeStep2.makeUrl(`${values.ui?.bridgeId}`))\n          } else {\n            onSubmit(values, formikHelpers)\n          }\n        }}\n      >\n        {(formikProps) => {\n          // here we handle all cases where button is disabled\n          const validationErrors = useEmailReceiptValidation(formikProps.values)\n          const isEmailReceiptValid = !emailReceiptUserModule?.enabled\n            ? true\n            : Object.values(validationErrors).every((value) => value === null)\n\n          const sourceHasApiError =\n            formikProps.values.ui?.source?.hasSettingsApiError\n\n          const destinationHasApiError =\n            formikProps.values.ui?.destination?.hasSettingsApiError\n\n          const cannotSubmit =\n            formikProps.isSubmitting ||\n            !formikProps.isValid ||\n            sourceHasApiError ||\n            destinationHasApiError ||\n            isSavingApi ||\n            !isEmailReceiptValid\n\n          // when this is loaded inside an iframe, we show a progress bar in the <Panel> component to replace the regular step bar\n          // we simulate the progress when both apps have been selected\n          const embeddablePercentage =\n            formikProps.values.source.appId &&\n            formikProps.values.destination.appId\n              ? 33\n              : 1\n\n          return (\n            <Fragment>\n              <PageEditor\n                formikContext={formikProps}\n                steps={steps}\n                activeStep={0}\n                infoBar={\n                  formikProps.values.ui?.bridgeId ? (\n                    <StatusBarBridge\n                      bridgeId={formikProps.values.ui.bridgeId}\n                      isVisible={\n                        !(\n                          initialValues?.manualStatus === 1 ||\n                          initialValues?.manualStatus === 'new'\n                        ) // checks if the bridge is in status \"new\"; in that case we will NOT want to display the edit bar.\n                      }\n                    />\n                  ) : null\n                }\n                topbarValue={formikProps.values.name}\n                topbarError={formikProps.errors.name}\n                onTopbarValueChange={\n                  // we don't want user to edit name while bridge is saving or is in readOnlyMode\n                  isSavingApi || formikProps.values.ui?.isBridgeEnabled\n                    ? undefined\n                    : (newBridgeName) => {\n                        formikProps.setFieldValue('name', newBridgeName)\n                      }\n                }\n                hasTopBar={!isEmbedded}\n                backlink={{\n                  url: '/bridges',\n                  label: t('nbee.bridgeBuilder.exitNbee'),\n                }}\n              >\n                <Form>\n                  <Panel\n                    progressBarPercentage={\n                      isEmbedded ? embeddablePercentage : undefined\n                    }\n                    body={\n                      <>\n                        {isSavingApi && (\n                          <Loader\n                            $active\n                            $dimmer\n                            $size={'large'}\n                            $text={t(\n                              'nbee.bridgeBuilder.step1SetupLoadingMessage'\n                            )}\n                          />\n                        )}\n                        <FormInner\n                          emailReceiptUserModule={emailReceiptUserModule}\n                          userData={userData}\n                          templateSettings={templateSettings}\n                        />\n                      </>\n                    }\n                    footer={{\n                      left: null,\n                      right: (\n                        <span\n                          onClick={(e) => {\n                            // small workaround to show validation error messages since UX wants to keep the button disabled\n                            // and if user does not click on submit not yet touched fields are not set to touched\n                            touchAllSettings(formikProps)\n                          }}\n                        >\n                          <Button\n                            type={'submit'}\n                            $variant={'primary'}\n                            disabled={cannotSubmit}\n                          >\n                            {t('common.continue')}\n                          </Button>\n                        </span>\n                      ),\n                    }}\n                  />\n                </Form>\n              </PageEditor>\n            </Fragment>\n          )\n        }}\n      </Formik>\n    )\n  }\n","import { Button } from '@components/Basic/ButtonNbe'\nimport React, { useState } from 'react'\nimport {\n  BarRight,\n  BarLeft,\n  StatusBarBridgeStyled,\n  StatusBarBridgeWrapper,\n  StatusBarStatus,\n  StatusBarMessage,\n  BarCenter,\n  CloseIcon,\n} from './styled'\nimport { IoCloseOutline } from 'react-icons/io5'\n\ninterface StatusBarProps {\n  text: string\n  status: string\n  onClick?: () => void\n  buttonLabel?: string\n  isLoading?: boolean\n  allowManualClosing?: boolean\n}\n\nexport const StatusBar: React.FC<StatusBarProps> = ({\n  text,\n  status,\n  buttonLabel,\n  onClick,\n  isLoading,\n  allowManualClosing,\n}) => {\n  const [isOpen, setIsOpen] = useState(true)\n\n  if (!isOpen) return null\n\n  return (\n    <StatusBarBridgeStyled>\n      <StatusBarBridgeWrapper>\n        {allowManualClosing && (\n          <CloseIcon onClick={() => setIsOpen(false)}>\n            <IoCloseOutline size={25} />\n          </CloseIcon>\n        )}\n\n        <BarLeft />\n        <BarCenter>\n          <StatusBarStatus>{status}</StatusBarStatus>\n          <StatusBarMessage>{text}</StatusBarMessage>\n        </BarCenter>\n        <BarRight>\n          {buttonLabel ? (\n            <Button\n              $variant={'secondary'}\n              onClick={onClick}\n              disabled={isLoading}\n              $loading={isLoading}\n              style={{ fontSize: '.75rem', padding: '8px 18px' }}\n            >\n              {buttonLabel}\n            </Button>\n          ) : null}\n        </BarRight>\n      </StatusBarBridgeWrapper>\n    </StatusBarBridgeStyled>\n  )\n}\n","import { StatusBar } from '@components/StatusBar'\nimport React, { useEffect, useState } from 'react'\nimport { useFormikContext } from 'formik'\nimport { useTranslation } from 'react-i18next'\nimport { useDisableBridgeById } from '@app/api/disableBridge'\nimport { parseApiError } from '@app/api/utils/error'\nimport { BridgeFormValues } from 'Nbee'\nimport { sendToast } from '@app/store/actions/ApplicationConfigurationActions'\nimport { useAppDispatch } from '@app/store/hooks'\nimport { trackEvent } from '@app/dataTracking'\nimport { makeNbeeTrackingParams } from '@app/dataTracking/utils'\n\ninterface StatusBarBridgeProps {\n  bridgeId: number\n  isVisible?: boolean\n}\nexport const StatusBarBridge: React.FC<StatusBarBridgeProps> = ({\n  bridgeId,\n  isVisible,\n}) => {\n  const { values, setFieldValue } = useFormikContext<BridgeFormValues>()\n  const isBridgeEnabled = values.ui?.isBridgeEnabled\n\n  const { t } = useTranslation()\n  const dispatch = useAppDispatch()\n\n  const {\n    mutate: disableBridge,\n    isLoading: isDisablingBridge,\n    error: disableBridgeApiError,\n    data: disableBridgeResponse,\n  } = useDisableBridgeById()\n\n  // in case of success we update the form values setting the bridge as disabled\n  useEffect(() => {\n    if (disableBridgeResponse) {\n      const newStatus = !!disableBridgeResponse?.data?.active\n      setFieldValue('ui.isBridgeEnabled', newStatus)\n    }\n  }, [disableBridgeResponse])\n\n  useEffect(() => {\n    if (disableBridgeApiError) {\n      const parsedError = parseApiError(disableBridgeApiError)\n      dispatch(\n        sendToast({\n          title: 'Error',\n          message: parsedError.message,\n          color: 'negative',\n        })\n      )\n      trackEvent({\n        eventName: 'UnexpectedErrorThrown',\n        feature: 'NBEE',\n        step: 'Apps',\n        params: {\n          ...makeNbeeTrackingParams(values),\n          custom: {\n            errorCode: parsedError.code,\n            errorDescription: parsedError.message,\n          },\n        },\n        sendEventToIntercom: true,\n      })\n    }\n  }, [disableBridgeApiError])\n\n  return isBridgeEnabled ? (\n    // enabled bridge can't be edited, user needs to disable it first\n    <StatusBar\n      onClick={() => {\n        disableBridge({ bridgeId })\n      }}\n      buttonLabel={t('nbee.bridgeEnded.enableEditCta')}\n      text={t('nbee.bridgeEnded.ViewDescription')}\n      status={t('nbee.bridgeEnded.ViewMode')}\n      isLoading={isDisablingBridge}\n      allowManualClosing={false}\n    />\n  ) : bridgeId && isVisible ? (\n    // Here bridge is not enabled and we tell the user that it needs to go all the way throught to publish it\n    // This can only be shown in first step, because in step 2 we always have a bridgeId (when bridge is just been created)\n    <StatusBar\n      text={t('nbee.bridgeEnded.editingDescription')}\n      status={t('nbee.bridgeEnded.editingMode')}\n      allowManualClosing={false}\n    />\n  ) : null\n}\n","import React from 'react'\nimport { Button } from '@components/Basic/ButtonNbe'\nimport { StepCompletedWrapper, StepImage } from './styled'\nimport { ApiErrorResponse } from 'BackendApi'\nimport { PageEditor } from '@app/layouts/PageEditor'\nimport { Panel } from '@components/Panel'\nimport { Trans, useTranslation } from 'react-i18next'\nimport { makeNbeeSteps } from '@features/nbee/utils'\nimport { useHistory } from 'react-router-dom'\nimport { appRoutes } from '@app/routes'\nimport FinishImage from '@assets/images/illustrations/nbee-completed.svg'\nimport { isInIframe } from '@app/utils/isInFrame'\nimport Confetti from '@components/Confetti'\nimport { useQueryClient } from 'react-query'\nimport { Icon } from 'semantic-ui-react'\nimport { PerformanceBoosterBanner } from '@features/nbee/StepCompleted/PerformanceBoosterBanner'\nimport { PerformanceBoosterTip } from '@features/nbee/StepCompleted/PerformanceBoosterTip'\n\ninterface Props {\n  bridgeName: string\n  bridgeId: string\n  sourceName?: string\n  destinationName?: string\n  redirectUri?: string\n  isTestEnabledProp?: boolean\n  performanceBoosterAvailable?: boolean\n  errorPerformanceBooster?: ApiErrorResponse | null\n  existingPerformanceBoosterAvailable?: boolean\n  handleCreatePerformanceBoosterAndRedirect?: () => void\n  existingPbId?: number\n}\n\nexport const StepCompleted: React.FC<Props> = ({\n  bridgeId,\n  bridgeName,\n  sourceName,\n  destinationName,\n  redirectUri,\n  isTestEnabledProp,\n  performanceBoosterAvailable,\n  existingPerformanceBoosterAvailable,\n  errorPerformanceBooster,\n  handleCreatePerformanceBoosterAndRedirect,\n  existingPbId,\n}) => {\n  const { t } = useTranslation()\n  const history = useHistory()\n  const steps = makeNbeeSteps(2, bridgeId)\n  const isEmbedded = isInIframe()\n\n  const queryClient = useQueryClient()\n\n  return (\n    <PageEditor\n      steps={steps}\n      activeStep={2}\n      topbarValue={bridgeName}\n      hasTopBar={!isEmbedded}\n      bridgeIdProp={bridgeId}\n      IsTestEnableProp={isTestEnabledProp}\n      backlink={{\n        url: '/bridges',\n        label: t('nbee.bridgeBuilder.exitNbee'),\n      }}\n    >\n      <div\n        style={{\n          display: 'flex',\n          justifyContent: 'center',\n          marginLeft:\n            performanceBoosterAvailable && !errorPerformanceBooster\n              ? '190px'\n              : 0,\n        }}\n      >\n        <Panel\n          progressBarPercentage={isEmbedded ? 100 : undefined}\n          body={\n            <div\n              style={{\n                display: 'flex',\n                alignItems: 'center',\n                justifyContent: 'center',\n              }}\n            >\n              <Confetti />\n              <StepCompletedWrapper>\n                {performanceBoosterAvailable && !errorPerformanceBooster && (\n                  <Icon\n                    size='big'\n                    name={'check circle'}\n                    style={{\n                      color: '#2fcc71',\n                      margin: 0,\n                      padding: 0,\n                      alignSelf: 'center',\n                    }}\n                  />\n                )}\n\n                <h3\n                  style={{\n                    marginTop: '16px',\n                    marginBottom: '16px',\n                    fontSize:\n                      performanceBoosterAvailable && !errorPerformanceBooster\n                        ? '18px'\n                        : undefined,\n                  }}\n                >\n                  {t('nbee.bridgeBuilder.step3SuccessHeader')}\n                </h3>\n                <p\n                  style={{\n                    margin: '0 0 16px 0',\n                  }}\n                >\n                  <Trans\n                    ns={'all'}\n                    i18nKey={'nbee.bridgeBuilder.step3SuccessBody'}\n                    components={{\n                      strong: <strong />,\n                      bridgeName: bridgeName,\n                      sourceName: sourceName,\n                      destinationName: destinationName,\n                    }}\n                  />\n                </p>\n                {performanceBoosterAvailable && !errorPerformanceBooster && (\n                  <p\n                    style={{\n                      fontWeight: 'bold',\n                      margin: 0,\n                    }}\n                  >\n                    {t('nbee.bridgeBuilder.step3Enabled')}\n                  </p>\n                )}\n\n                {(!performanceBoosterAvailable || errorPerformanceBooster) && (\n                  <div style={{ marginTop: '12px', alignSelf: 'center' }}>\n                    <a\n                      rel='noreferrer'\n                      href={redirectUri}\n                      target={isInIframe() ? '_blank' : undefined}\n                    >\n                      <Button $variant={'primary'}>\n                        {t('nbee.bridgeBuilder.exploreLeadsBridge')}\n                      </Button>\n                    </a>\n                  </div>\n                )}\n\n                {performanceBoosterAvailable && !errorPerformanceBooster && (\n                  <PerformanceBoosterBanner\n                    existingPerformanceBoosterAvailable={\n                      existingPerformanceBoosterAvailable\n                    }\n                    handleCreatePerformanceBoosterAndRedirect={\n                      handleCreatePerformanceBoosterAndRedirect\n                    }\n                    existingPbId={existingPbId}\n                    bridgeId={bridgeId}\n                  />\n                )}\n\n                {!performanceBoosterAvailable && !errorPerformanceBooster && (\n                  <StepImage\n                    src={FinishImage}\n                    alt={t('nbee.bridgeBuilder.step3Title')}\n                  />\n                )}\n\n                {performanceBoosterAvailable && !errorPerformanceBooster && (\n                  <div>\n                    <a\n                      rel='noreferrer'\n                      href={redirectUri}\n                      target={isInIframe() ? '_blank' : undefined}\n                    >\n                      <Button\n                        $variant={'link-primary'}\n                        style={{\n                          textDecoration: 'underline',\n                          padding: 0,\n                          fontWeight: 400,\n                        }}\n                      >\n                        {t('nbee.bridgeBuilder.backToBridges')}\n                      </Button>\n                    </a>\n                  </div>\n                )}\n              </StepCompletedWrapper>\n            </div>\n          }\n          footer={{\n            left: (\n              <Button\n                type={'button'}\n                $variant={'link-secondary'}\n                onClick={() => {\n                  // we want to invalidate the permission checks query when the user goes back from here. This way the information will be refetched once the user lands on step2\n                  queryClient.invalidateQueries(['permission-checks'])\n                  history.push(appRoutes.nbeeStep2.makeUrl(bridgeId))\n                }}\n              >\n                {t('nbee.fieldsMapping.goPreviewStep')}\n              </Button>\n            ),\n            right: (\n              <div style={{ display: 'flex', gap: '1rem' }}>\n                <Button\n                  type={'button'}\n                  $variant={'secondary'}\n                  onClick={() => {\n                    history.push(appRoutes.nbeeBridgeChooserStep1.makeUrl())\n                  }}\n                >\n                  {t('nbee.fieldsMapping.makeNewBridge')}\n                </Button>\n              </div>\n            ),\n          }}\n        />\n        {performanceBoosterAvailable && !errorPerformanceBooster && (\n          <PerformanceBoosterTip />\n        )}\n      </div>\n    </PageEditor>\n  )\n}\n","import React, { useState } from 'react'\nimport { Button } from '@components/Basic/ButtonNbe'\nimport { Modal } from '@components/Basic/Modal'\nimport { useChangePlan } from '@app/api/postChangePlan'\nimport { sendToast } from '@app/store/actions/ApplicationConfigurationActions'\nimport { parseApiError } from '@app/api/utils/error'\nimport { useTranslation, Trans } from 'react-i18next'\nimport { useAppDispatch } from '@app/store/hooks'\nimport { trackEvent } from '@app/dataTracking'\nimport { useGetUserInfo } from '@app/api/getUserInfo'\nimport wellDoneImg from '@assets/images/well_done.png'\nimport { Content, ButtonWrapper } from './styled'\nimport { calculateDaysBetweenDates } from '@app/utils/calcDaysBetweenDates'\n\ninterface ModalProps {\n  isOpen: boolean\n  onCloseModal: () => void\n}\n\nexport const ModalChangePlan: React.FC<ModalProps> = ({\n  isOpen,\n  onCloseModal,\n}) => {\n  const { t } = useTranslation()\n  const dispatch = useAppDispatch()\n  const [hasSwitched, setHasSwitched] = useState(false)\n  const [showConfirm, setShowConfirm] = useState(false)\n\n  const {\n    data: userData,\n    refetch: userDataRefetch,\n    isRefetching: isUserDataRefetching,\n  } = useGetUserInfo()\n\n  const endOfTermsDate = new Date(\n    userData?.pricing?.endOfTermsDate as string\n  ).getTime()\n  const dateNow = new Date().getTime()\n  const remainDays = calculateDaysBetweenDates(endOfTermsDate, dateNow)\n\n  // change plan\n  const { mutate: changePlanMutation, isLoading: isChangingPlan } =\n    useChangePlan()\n\n  const changePlan = ({ planId }: { planId: string }) => {\n    changePlanMutation(\n      {\n        planId,\n        trial: false,\n      },\n      {\n        onSuccess: () => {\n          userDataRefetch().then(() => setHasSwitched(true))\n          trackEvent({\n            eventName: 'PlanChanged',\n            feature: 'Pricing',\n            step: 'Table',\n            params: {\n              custom: {\n                previousPlanId: userData?.pricing?.cbPlanId,\n                newPlanId: planId,\n                previousMrr: userData?.pricing?.mrr\n                  ? (userData?.pricing?.mrr || 0) / 100\n                  : undefined,\n                newMrr: 0, // here is always freemium\n                trial: false,\n              },\n            },\n            sendEventToIntercom: true,\n          })\n        },\n        onError: (error) => {\n          dispatch(\n            sendToast({\n              title: 'Error',\n              messages: [parseApiError(error).message],\n              color: 'negative',\n            })\n          )\n        },\n      }\n    )\n  }\n\n  return (\n    <Modal\n      data-id={'modal-change-plan'}\n      isOpen={isOpen}\n      isWide={hasSwitched || showConfirm}\n      onCloseModal={() => {\n        setHasSwitched(false)\n        if (isChangingPlan) {\n          return\n        }\n        onCloseModal()\n      }}\n    >\n      <Content>\n        <h2>\n          {hasSwitched\n            ? t('billing.pricing.modalDowngradeTitleConfirm', {\n                remainDays,\n              })\n            : showConfirm\n            ? t('billing.pricing.modalDowngradeTitleSuccess')\n            : t('billing.pricing.modalDowngradeTitle')}\n        </h2>\n        <hr />\n        <p\n          style={\n            hasSwitched\n              ? { marginBottom: '.5rem' }\n              : showConfirm\n              ? { marginBottom: '2rem' }\n              : {}\n          }\n        >\n          {hasSwitched ? (\n            <Trans\n              ns={'all'}\n              i18nKey={'billing.pricing.modalDowngradeSubConfirm'}\n              components={{\n                br: <br />,\n              }}\n              values={{ remainDays }}\n            />\n          ) : showConfirm ? (\n            t('billing.pricing.modalDowngradeTextSuccess')\n          ) : (\n            t('billing.pricing.modalDowngradeText')\n          )}\n        </p>\n        {hasSwitched || showConfirm ? (\n          <img\n            style={showConfirm ? { marginBottom: '1rem' } : {}}\n            src={wellDoneImg}\n            alt={'wellDone'}\n          />\n        ) : null}\n        {hasSwitched && (\n          <p style={{ margin: '.5rem auto 1.5rem', width: '80%' }}>\n            {t('billing.pricing.modalDowngradeTextConfirm')}\n          </p>\n        )}\n        <ButtonWrapper>\n          {hasSwitched || showConfirm ? null : (\n            <Button\n              $size={'large'}\n              $variant={'link-primary'}\n              onClick={onCloseModal}\n            >\n              {t('billing.pricing.modalDowngradeCtaCancel')}\n            </Button>\n          )}\n\n          <Button\n            onClick={\n              !hasSwitched && !showConfirm\n                ? () => changePlan({ planId: 'freemium' })\n                : () => {\n                    onCloseModal()\n                    setHasSwitched(false)\n                  }\n            }\n            disabled={isChangingPlan || isUserDataRefetching}\n            $loading={isChangingPlan || isUserDataRefetching}\n            $size={'large'}\n            $variant={'blue'}\n          >\n            {hasSwitched\n              ? t('billing.pricing.modalDowngradeCtaOk')\n              : showConfirm\n              ? t('billing.pricing.modalDowngradeCtaSuccess')\n              : t('billing.pricing.modalDowngradeCtaConfirm')}\n          </Button>\n        </ButtonWrapper>\n      </Content>\n    </Modal>\n  )\n}\n","import React from 'react'\nimport { Modal } from '@components/Basic/Modal'\nimport { Content, ButtonWrapper } from '../ModalChangePlan/styled'\nimport wellDoneImg from '@assets/images/well_done.png'\nimport { Button } from '@components/Basic/ButtonNbe'\nimport { useTranslation } from 'react-i18next'\n\ninterface ModalProps {\n  isOpen: boolean\n}\n\nexport const ModalUpdatedPlan: React.FC<ModalProps> = ({ isOpen }) => {\n  const { t } = useTranslation()\n\n  return (\n    <Modal\n      isOpen={isOpen}\n      onCloseModal={() => {\n        window.location.href = process.env.REACT_APP_V1_URL || ''\n      }}\n      isWide\n    >\n      <Content>\n        <h2 style={{ fontSize: '1.3rem', fontWeight: 800 }}>\n          {t('billing.pricing.modalDowngradeTitleSuccess')}\n        </h2>\n        <hr />\n        <p>{t('billing.pricing.modalDowngradeTextSuccess')}</p>\n        <img\n          style={{ marginBottom: '1rem' }}\n          src={wellDoneImg}\n          alt={'super hero'}\n        />\n        <ButtonWrapper>\n          <Button\n            $size={'large'}\n            $variant={'primary'}\n            onClick={() => {\n              window.location.href = process.env.REACT_APP_V1_URL || ''\n            }}\n          >\n            {t('billing.pricing.modalDowngradeCtaSuccess')}\n          </Button>\n        </ButtonWrapper>\n      </Content>\n    </Modal>\n  )\n}\n","import React from 'react'\nimport { Button } from '@components/Basic/ButtonNbe'\nimport {\n  Wrapper,\n  PlanType,\n  PlanName,\n  PriceStyled,\n} from '@features/pricing/PlanInfoBanner/styled'\nimport { ApiFeatures } from 'BackendApi'\nimport ReactTooltip from 'react-tooltip'\nimport { useTranslation } from 'react-i18next'\nimport { getPlanNameToShow } from '@features/pricing/PricingCard'\nimport { InputSelect, InputSelectOption } from '@components/Form/InputSelect'\nimport { IoIosHelpCircleOutline } from 'react-icons/io'\nimport { InputWrapperIcon } from '@features/pricing/PricingCardControllers/styled'\n\ninterface Props {\n  plan: ApiFeatures\n  optionsMtu?: InputSelectOption[]\n  optionsBridge?: InputSelectOption[]\n  isCurrentPlan?: boolean\n  onPlanSelect?: () => void\n  isDisabled?: boolean\n}\n\nexport const PlanInfoBanner: React.FC<Props> = ({\n  plan,\n  optionsMtu,\n  optionsBridge,\n  isCurrentPlan,\n  onPlanSelect,\n  isDisabled,\n}) => {\n  const { t } = useTranslation()\n\n  const isBusiness = plan?.name?.toLowerCase() === 'business'\n  const price = isBusiness ? '999' : '0'\n\n  if (!plan) {\n    return null\n  }\n\n  return (\n    <Wrapper>\n      <div>\n        <PlanType>{plan?.serviceType}</PlanType>\n        <PlanName>{getPlanNameToShow(plan?.name.toLowerCase())}</PlanName>\n        <p>{plan?.description}</p>\n      </div>\n      {optionsMtu && optionsBridge ? (\n        <div\n          style={{\n            display: 'flex',\n            flexDirection: 'column',\n            gap: '1rem',\n          }}\n        >\n          <InputWrapperIcon>\n            <InputSelect\n              disabled\n              name={plan.name}\n              $options={optionsMtu}\n              value={optionsMtu[0].value}\n            />\n            <IoIosHelpCircleOutline\n              size={20}\n              data-tip={t('billing.pricing.freemiumMtuTooltip')}\n              data-for={'freemium-mtu-limit'}\n              data-class='tooltip-style'\n            />\n            <ReactTooltip id={'freemium-mtu-limit'} />\n          </InputWrapperIcon>\n          <InputWrapperIcon>\n            <InputSelect\n              disabled\n              name={plan.name}\n              $options={optionsBridge}\n              value={optionsBridge[0].value}\n            />\n            <IoIosHelpCircleOutline\n              size={20}\n              data-tip={t('billing.pricing.freemiumBridgeTooltip')}\n              data-for={'freemium-bridge-limit'}\n              data-class='tooltip-style'\n            />\n            <ReactTooltip id={'freemium-bridge-limit'} />\n          </InputWrapperIcon>\n        </div>\n      ) : null}\n\n      <div>\n        <ul>\n          {plan?.mainFeatures.map((feature, index) =>\n            feature.name ? (\n              <li key={index}>\n                {feature.description ? (\n                  <>\n                    <ReactTooltip\n                      className={'feature-item-styled'}\n                      clickable={true}\n                      place='right'\n                      effect='solid'\n                      html={true}\n                      id={`${plan?.name}_feature_${index}`}\n                    />\n                    <span\n                      className={'feature-item-label-styled'}\n                      style={{ cursor: 'help' }}\n                      data-tip={feature.description}\n                      data-for={`${plan?.name}_feature_${index}`}\n                    >\n                      {feature.name}\n                    </span>\n                  </>\n                ) : (\n                  <>{feature.name}</>\n                )}\n              </li>\n            ) : null\n          )}\n        </ul>\n      </div>\n      <div style={{ textAlign: 'center' }}>\n        <PriceStyled>\n          <h2>\n            <span>$</span>\n            {price}\n          </h2>\n        </PriceStyled>\n        {isBusiness ? (\n          <p>{t('billing.pricing.businessPriceDescription')}</p>\n        ) : (\n          <p>{t('billing.pricing.freemiumPriceDescription')}</p>\n        )}\n        <Button\n          onClick={!isBusiness ? onPlanSelect : undefined}\n          disabled={isCurrentPlan || isDisabled}\n          $fluid\n          $size={'large'}\n          $variant={'primary'}\n        >\n          {isBusiness\n            ? t('billing.pricing.businessCta')\n            : isCurrentPlan\n            ? t('billing.pricing.ctaCurrentPlan')\n            : t('billing.pricing.ctaChoosePlan')}\n        </Button>\n      </div>\n    </Wrapper>\n  )\n}\n","import React from 'react'\nimport {\n  FeaturesStyled,\n  PlanDescription,\n  PlanHeaderLeft,\n  PlanHeaderRight,\n  PlanName,\n  PlanType,\n  PriceDescription,\n  PriceDiscount,\n  PriceStyled,\n  PricingCardBox,\n  PricingCardHeaderStyled,\n  PricingCardTopBarLabel,\n  PricingCardTopBarWrapper,\n  PricingCardWrapper,\n} from '@features/pricing/PricingCard/styled'\n\nimport ReactTooltip from 'react-tooltip'\nimport { useTranslation } from 'react-i18next'\nimport { ApiMainFeatures, ApiUser } from 'BackendApi'\n\nexport interface PricingCardProps {\n  planName: string\n  planDescription: string\n  price: number\n  priceDescription: string\n  features: ApiMainFeatures[]\n  isYearlyChecked: boolean\n  yearlyDiscountPercentage?: string\n  isActive?: boolean\n  isRecommended?: boolean\n  isCurrentPlan?: boolean\n  showUndo?: boolean\n  remainDays?: number\n  onUndoSelect: (planId: string | undefined) => void\n  userData: ApiUser\n  endOfTermsDate?: string\n  deleteAtDate?: string\n}\n\nexport const planNameToShow: Record<string, string> = {\n  freemium: 'Free',\n  starter: 'Starter',\n  pro: 'Pro',\n  business: 'Business',\n}\n\nexport const getPlanNameToShow = (planName: string) => {\n  return planNameToShow[planName] || planNameToShow\n}\n\nexport const PricingCard: React.FC<PricingCardProps> = ({\n  features,\n  planName,\n  planDescription,\n  price,\n  priceDescription,\n  isActive,\n  isRecommended,\n  isCurrentPlan,\n  isYearlyChecked,\n  yearlyDiscountPercentage,\n  children,\n  remainDays,\n  onUndoSelect,\n  userData,\n  endOfTermsDate,\n  deleteAtDate,\n}) => {\n  const { t } = useTranslation()\n\n  const showUndoPro =\n    (endOfTermsDate || deleteAtDate) &&\n    (planName === 'PRO' || planName === 'STARTER') &&\n    isCurrentPlan\n\n  const undoMessage = deleteAtDate\n    ? 'billing.pricing.cancellingCardHeader'\n    : endOfTermsDate\n    ? 'billing.pricing.switchingToFreeCardHeader'\n    : 'billing.pricing.switchingToFreeCardHeader' // Providing a default value to ensure non-nullability for TypeScript\n\n  const planId = userData?.pricing?.cbPlanId\n\n  return (\n    <PricingCardWrapper planName={planName.toLocaleLowerCase()}>\n      {showUndoPro ? (\n        <PricingCardTopBarWrapper>\n          <PricingCardTopBarLabel showUndoPro={showUndoPro}>\n            <p>\n              {t(undoMessage, { remainDays })}\n              <span onClick={() => onUndoSelect(planId)}>Undo</span>\n            </p>\n          </PricingCardTopBarLabel>\n        </PricingCardTopBarWrapper>\n      ) : isRecommended || isCurrentPlan ? (\n        <PricingCardTopBarWrapper>\n          <PricingCardTopBarLabel isCurrentPlan={isCurrentPlan}>\n            {isCurrentPlan\n              ? t('billing.pricing.pricingColumnCurrent')\n              : isRecommended\n              ? t('billing.pricing.pricingColumnRecommended')\n              : null}\n          </PricingCardTopBarLabel>\n        </PricingCardTopBarWrapper>\n      ) : null}\n\n      <PricingCardBox isActive={isActive} isRecommended={isRecommended}>\n        <PlanType>\n          {planName.toLowerCase() !== 'business'\n            ? 'self-service'\n            : 'managed service'}\n        </PlanType>\n\n        <PricingCardHeaderStyled>\n          <PlanHeaderLeft>\n            <PlanName planName={planName.toLocaleLowerCase()}>\n              {getPlanNameToShow(planName.toLowerCase())}\n            </PlanName>\n            <PlanDescription planName={planName.toLocaleLowerCase()}>\n              {planDescription}\n            </PlanDescription>\n          </PlanHeaderLeft>\n          <PlanHeaderRight>\n            <PriceStyled>\n              <span>$</span>\n              <h2>\n                {isYearlyChecked &&\n                yearlyDiscountPercentage &&\n                planName.toLocaleLowerCase() !== 'business' &&\n                planName.toLocaleLowerCase() !== 'freemium' ? (\n                  <PriceDiscount isYearlyChecked={isYearlyChecked}>\n                    {''}- {yearlyDiscountPercentage}%{''}\n                  </PriceDiscount>\n                ) : null}\n\n                {price}\n              </h2>\n            </PriceStyled>\n            <PriceDescription>{priceDescription}</PriceDescription>\n          </PlanHeaderRight>\n        </PricingCardHeaderStyled>\n        <div style={{ margin: '1.5rem 0 1rem' }}>{children}</div>\n        <FeaturesStyled>\n          {features.map((feature, index) =>\n            // Clear map result: avoid dot without feature.name label\n            feature.name ? (\n              <li key={index}>\n                {feature.description ? (\n                  <>\n                    <ReactTooltip\n                      className={'feature-item-styled'}\n                      clickable={true}\n                      place='top'\n                      effect='solid'\n                      html={true}\n                      id={`${planName}_feature_${index}`}\n                    />\n                    <span\n                      className={'feature-item-label-styled'}\n                      style={{ cursor: 'help' }}\n                      data-tip={feature.description}\n                      data-for={`${planName}_feature_${index}`}\n                    >\n                      {feature.name}\n                    </span>\n                  </>\n                ) : (\n                  <>{feature.name}</>\n                )}\n              </li>\n            ) : null\n          )}\n        </FeaturesStyled>\n      </PricingCardBox>\n    </PricingCardWrapper>\n  )\n}\n","import React, { useEffect, useState } from 'react'\nimport { Formik, Form } from 'formik'\nimport { Button as ButtonNbe } from '@components/Basic/ButtonNbe'\nimport {\n  FooterStyled,\n  SignupFormWrapper,\n  SeparatorStyled,\n  TitleStyled,\n  FormRow,\n  SocialProvidersWrapper,\n  TermsText,\n  ContentWrapper,\n  HeaderTop,\n} from './styled'\nimport { FormikInputField } from '@components/Formik/FormikInputField'\nimport {\n  initialFormValues,\n  initialFormValuesAppsumo,\n  validationSchema,\n  validationSchemaAppsumo,\n} from '@features/signup/SignupForm/formConfig'\nimport { useHistory, useLocation } from 'react-router-dom'\nimport { appRoutes } from '@app/routes'\nimport { ButtonProvider, SignupProviderName } from '@components/ButtonProvider'\nimport { matchPath } from 'react-router'\nimport { BbuRouteParams, PartnerSignupRouterParam } from 'LeadsBridgeApp'\nimport { useAppDispatch } from '@app/store/hooks'\nimport { sendToast } from '@app/store/actions/ApplicationConfigurationActions'\nimport { Loader } from '@components/Basic/Loader'\nimport { Trans, useTranslation } from 'react-i18next'\nimport {\n  getPersistentSignupParams,\n  useHideParamsFromString,\n} from '@features/signup/SignupForm/useHideParamsFromString'\nimport { useSignupWithEmail } from '@app/api/signup'\nimport { parseApiError } from '@app/api/utils/error'\nimport { handleSignupWithEmailSuccess } from '@features/signup/SignupForm/signupWithEmailUtils'\nimport { ReCaptcha } from '@components/ReCaptcha'\nimport { identifyUserByUserData, trackEvent } from '@app/dataTracking'\nimport { useFetchIntegrationsMetaForBridgeByUrl } from '@app/api/integrationTools'\nimport { Hub } from '@aws-amplify/core'\nimport {\n  AUTH_STATE_CHANGE_EVENT,\n  AuthState,\n  UI_AUTH_CHANNEL,\n} from '@aws-amplify/ui-components'\nimport { useFastAppSurveyIndustries } from '@app/api/fastAppSurveyIndustries'\nimport { FormikInputSelect } from '@components/Formik/FormikInputSelect'\nimport { FormikInputCheckbox } from '@components/Formik/FormikInputCheckbox'\nimport { sleep } from '@app/utils/helpers'\nimport Tap from '@tapfiliate/tapfiliate-js'\nimport {\n  AffiliateIdDataFromCookies,\n  getAffiliateIdFromCookies,\n  setCookie,\n} from '@app/utils/cookieUtils'\n\nexport interface Props {\n  showFacebookButton?: boolean\n  showGoogleButton?: boolean\n  title?: string\n  onSignUp?: () => void\n  isAppSumo?: boolean\n  showIndustries?: boolean\n  showCoupon?: boolean\n  header?: React.ReactNode\n  testId?: string\n}\n\nexport const SignUpForm: React.FC<Props> = ({\n  title,\n  showGoogleButton,\n  showFacebookButton,\n  isAppSumo,\n  showIndustries,\n  showCoupon,\n  header,\n  testId,\n}) => {\n  const history = useHistory()\n  const location = useLocation()\n  const dispatch = useAppDispatch()\n  const { t } = useTranslation()\n  const [isLoading, setIsLoading] = useState(false)\n  const getIndustries = useFastAppSurveyIndustries()\n\n  // .../bc/lb/facebook-leads-ads/google-sheets/?cc=XXX&cbPlan=YYY&td=15\n  useHideParamsFromString()\n  const signupParams = getPersistentSignupParams()\n  const matchBBuPath = matchPath<BbuRouteParams>(location.pathname, {\n    path: appRoutes.signupBbu.path,\n    exact: true,\n    strict: false,\n  })\n\n  const matchPartnerPath = matchPath<PartnerSignupRouterParam>(\n    location.pathname,\n    {\n      path: appRoutes.signupPartner.path,\n      exact: true,\n      strict: false,\n    }\n  )\n\n  const couponCode = matchPartnerPath?.params.couponCode\n\n  const currentPlan = isAppSumo\n    ? 'appsumo-2022'\n    : signupParams.cbPlan || 'freemium'\n\n  /* const isFreePlan =\n    currentPlan === 'freemium' || currentPlan.includes('starter') */\n\n  const updatedAppSumoFormValues = { ...initialFormValuesAppsumo, couponCode }\n\n  const bbuSourceSlug = matchBBuPath?.params.source\n  const bbuDestinationSlug = matchBBuPath?.params.destination\n  const { data: bbuAppsInfo } = useFetchIntegrationsMetaForBridgeByUrl(\n    bbuSourceSlug,\n    bbuDestinationSlug\n  )\n  const isValidBbuUrl = Boolean(\n    bbuAppsInfo?.source?.id && bbuAppsInfo.destination?.id\n  )\n\n  const [affiliateData, setAffiliateData] = React.useState<\n    AffiliateIdDataFromCookies | undefined\n  >({\n    tapClickId: undefined,\n    tapVisitorId: undefined,\n  })\n\n  // Check if cookies are already there\n  React.useEffect(() => {\n    const existingCookieData = getAffiliateIdFromCookies()\n    setAffiliateData(existingCookieData)\n  }, [])\n\n  // Stores click Id and visitor Id in cookies\n  React.useEffect(() => {\n    // if cookies are already there (and they've been stored in the affiliateData state), exit early\n    if (\n      getAffiliateIdFromCookies()?.tapClickId &&\n      getAffiliateIdFromCookies()?.tapVisitorId\n    )\n      return\n    // If cookies are not present, check if ref is present in query params\n    // If it is not, exit early\n    if (!signupParams.ref) return\n\n    // If cookies aren't present, but we do have the ref code,\n    // initialize TapFiliate, then execute Tap.detect\n    Tap.init(`${process.env.TAPFILIATE_ACCOUNT_ID}`)\n    Tap.detect(\n      {\n        always_callback: true,\n        referral_code: signupParams.ref,\n      },\n      (response: any, args: { id?: string; vid?: string }) => {\n        console.log(\n          'Tap.detect callback response',\n          response,\n          'Tap.detect args',\n          args\n        )\n\n        if (response === 'Tracking request failed') {\n          console.error('Error in Tap.detect:', response)\n          return\n        }\n\n        const { id: argId, vid: argVid } = args || {}\n\n        const id = argId\n        const vid = argVid\n\n        if (id && vid) {\n          // create cookies with tap click id and visitor id values (which I'm sure I don't have already)\n          setCookie('tap.id', id)\n          setCookie('tap.vid', vid)\n\n          // Set affiliate data directly after setting cookies\n          setAffiliateData({ tapClickId: id, tapVisitorId: vid })\n        }\n      }\n    )\n  }, [signupParams.ref]) // executes this useEffect only when the value of signupParams.ref changes (-> only when we do have a ref code in the signup page url)\n\n  const {\n    mutate: signupWithEmail,\n    isLoading: isDoingSingup,\n    error: signupWithEmailApiError,\n    data: signupReponse,\n  } = useSignupWithEmail()\n\n  const onAuthSuccess = async () => {\n    await sleep(500)\n\n    const firstLoginUrlParam = 'lbfsgn'\n\n    // we should already have an user id, so we try to track the signup event with an UID already attached\n    const newUserId = signupReponse?.user.userId\n      ? `UID-${signupReponse?.user.userId}`\n      : undefined\n\n    // we wait to have the user identified before sending the track event\n    await identifyUserByUserData(signupReponse).catch(() => {\n      console.log('not identified - segment not active')\n    })\n\n    trackEvent({\n      eventName: 'SignUp',\n      feature: 'Authentication',\n      step: 'Signup',\n      params: {\n        custom: {\n          planId: currentPlan,\n          mrr: (signupReponse?.pricing?.mrr || 0) / 100,\n          channel: isValidBbuUrl ? 'lb' : 'signup',\n          sourceId: bbuAppsInfo?.source?.id,\n          sourceName: bbuAppsInfo?.source?.name,\n          destinationId: bbuAppsInfo?.destination?.id,\n          destinationName: bbuAppsInfo?.destination?.name,\n        },\n        userId: newUserId,\n      },\n      sendEventToIntercom: true,\n    })\n\n    if (bbuSourceSlug && bbuDestinationSlug && isValidBbuUrl) {\n      // re-render Apps.tsx routing and this time will match private route for Step1 with bbu\n      Hub.dispatch(UI_AUTH_CHANNEL, {\n        event: AUTH_STATE_CHANGE_EVENT,\n        message: AuthState.SignedIn,\n        data: null,\n      })\n    } else if (signupParams.sourceId || signupParams.destinationId) {\n      // in case we have sourceId or destinationId in query string, we take user to nbee step1 with source or destination pre-selected\n      history.push({\n        pathname: appRoutes.nbeeStep1New.makeUrl(),\n        search: signupParams.sourceId\n          ? `sourceId=${signupParams.sourceId}&${firstLoginUrlParam}=true&currentPlan=${currentPlan}`\n          : `destinationId=${signupParams.destinationId}&${firstLoginUrlParam}=true&currentPlan=${currentPlan}`,\n      })\n    } else {\n      // generic signup, we take user NBEE step1 right after updating auth state\n      Hub.dispatch(UI_AUTH_CHANNEL, {\n        event: AUTH_STATE_CHANGE_EVENT,\n        message: AuthState.SignedIn,\n        data: null,\n      })\n      history.push({\n        pathname: appRoutes.nbeeStep1New.makeUrl(),\n        search: `${firstLoginUrlParam}=true&currentPlan=${currentPlan}`,\n      })\n    }\n  }\n\n  const showGenericError = (message: string) => {\n    setIsLoading(false)\n    dispatch(\n      sendToast({\n        title: 'Error',\n        messages: [message],\n        color: 'negative',\n      })\n    )\n  }\n\n  useEffect(() => {\n    if (signupReponse) {\n      handleSignupWithEmailSuccess({\n        credentials: signupReponse?.credentials,\n        onError: showGenericError,\n      }).then(() => {\n        onAuthSuccess()\n      })\n    }\n  }, [signupReponse])\n\n  // on signupWithEmailError\n  useEffect(() => {\n    if (signupWithEmailApiError) {\n      const parsedError = parseApiError(signupWithEmailApiError)\n      showGenericError(parsedError.message)\n      trackEvent({\n        eventName: 'UnexpectedErrorThrown',\n        feature: 'Authentication',\n        step: 'Signup',\n        params: {\n          custom: {\n            errorCode: parsedError.code,\n            errorDescription: parsedError.message,\n            planId: currentPlan,\n          },\n        },\n        sendEventToIntercom: true,\n      })\n    }\n  }, [signupWithEmailApiError])\n\n  const signupProviders: {\n    name: SignupProviderName\n    show?: boolean\n  }[] = [\n    {\n      name: 'Google',\n      show: showGoogleButton,\n    },\n    {\n      name: 'Facebook',\n      show: showFacebookButton,\n    },\n  ]\n\n  return (\n    <SignupFormWrapper data-testid={testId} isAppSumo={isAppSumo}>\n      {isLoading && <Loader $active $dimmer />}\n\n      <ReCaptcha>\n        {({ getCaptchaToken }) => (\n          <ContentWrapper isAppSumo={isAppSumo}>\n            {header && <HeaderTop>{header}</HeaderTop>}\n            {title && <TitleStyled>{title}</TitleStyled>}\n            <SocialProvidersWrapper>\n              {signupProviders.map(({ show, name }) =>\n                show ? (\n                  <ButtonProvider\n                    key={name}\n                    scope={'SignUp'}\n                    provider={name}\n                    getCaptchaToken={getCaptchaToken}\n                    signupParams={signupParams}\n                    onBeforeAuth={() => {\n                      setIsLoading(true)\n                    }}\n                    onAuthError={showGenericError}\n                    onAuthSuccess={onAuthSuccess}\n                  />\n                ) : null\n              )}\n            </SocialProvidersWrapper>\n\n            {showFacebookButton || showGoogleButton ? (\n              <SeparatorStyled>\n                <hr />\n                <span>Or</span>\n                <hr />\n              </SeparatorStyled>\n            ) : null}\n\n            <Formik\n              initialValues={\n                isAppSumo ? updatedAppSumoFormValues : initialFormValues\n              }\n              validationSchema={\n                isAppSumo ? validationSchemaAppsumo : validationSchema\n              }\n              onSubmit={async (values) => {\n                setIsLoading(true)\n                const recaptchaToken = await getCaptchaToken()\n                if (!recaptchaToken) {\n                  setIsLoading(false)\n                  return\n                }\n                console.log(\n                  'calling signupWithEmail',\n                  'tapVisitorId',\n                  affiliateData?.tapVisitorId,\n                  'tapClickId',\n                  affiliateData?.tapClickId\n                )\n                signupWithEmail({\n                  requestBody: {\n                    firstName: values.firstName,\n                    lastName: values.lastName,\n                    email: values.email,\n                    referralUri: document.referrer || window.location.origin,\n                    trialDays: isAppSumo\n                      ? undefined\n                      : `${signupParams.trialDays}`,\n                    cbPlan: currentPlan,\n                    couponCode:\n                      values.couponCode || signupParams.couponCode || undefined,\n                    industry: isAppSumo ? values.industry : '',\n                    bbuUri: isAppSumo\n                      ? undefined\n                      : matchBBuPath?.isExact && isValidBbuUrl\n                      ? `${window.location.origin}${location.pathname}`\n                      : undefined,\n                    recaptchaToken: recaptchaToken || '',\n                    tapClickId: affiliateData?.tapClickId || undefined,\n                    tapVisitorId: affiliateData?.tapVisitorId || undefined,\n                  },\n                })\n              }}\n            >\n              {() => {\n                return (\n                  <Form>\n                    <FormRow>\n                      <FormikInputField\n                        name='firstName'\n                        type='text'\n                        label='First Name'\n                        $fluid\n                        $hasMargin\n                        placeholder={'John'}\n                        className={'mb-0'}\n                      />\n                      <FormikInputField\n                        name='lastName'\n                        type='text'\n                        label='Last Name'\n                        $fluid\n                        $hasMargin\n                        placeholder={'Appleseed'}\n                        className={'mb-0'}\n                      />\n                    </FormRow>\n\n                    <FormikInputField\n                      name='email'\n                      type='email'\n                      label='Email'\n                      $fluid\n                      $hasMargin\n                      placeholder={'example@mail.com'}\n                      className={'mb-0'}\n                    />\n                    {isAppSumo && showIndustries ? (\n                      <FormikInputSelect\n                        $options={getIndustries.data || []}\n                        $loading={getIndustries.isLoading}\n                        disabled={Boolean(getIndustries.error)}\n                        $optionsLabel={\n                          getIndustries.error\n                            ? 'Unable to retrieve industries'\n                            : 'Please select industry'\n                        }\n                        name={'industry'}\n                        $label={'Industry'}\n                        $hasMargin\n                      />\n                    ) : null}\n\n                    {isAppSumo && showCoupon ? (\n                      <FormikInputField\n                        name='couponCode'\n                        type='text'\n                        label={t('auth.signup.couponLabelAppSumo')}\n                        $fluid\n                        $hasMargin\n                        className={'mb-0'}\n                      />\n                    ) : null}\n                    <div style={{ marginTop: '1rem' }}>\n                      <FormikInputCheckbox name='privacyConsent'>\n                        <TermsText>\n                          <Trans\n                            ns={'all'}\n                            i18nKey={\n                              isAppSumo\n                                ? 'auth.signup.termsAndConditionAppSumo'\n                                : 'auth.signup.termsAndCondition'\n                            }\n                            components={{\n                              a: <a />,\n                            }}\n                          />\n                        </TermsText>\n                      </FormikInputCheckbox>\n                    </div>\n                    <div style={{ margin: '1.6rem 0 1rem' }}>\n                      <ButtonNbe\n                        type={'submit'}\n                        $variant={'action'}\n                        disabled={isDoingSingup || isLoading}\n                        $size={'large'}\n                        $fluid\n                      >\n                        {isAppSumo\n                          ? t('auth.signup.ctaWithAppsumo')\n                          : t('auth.signup.ctaViaEmail')}\n                      </ButtonNbe>\n                    </div>\n                  </Form>\n                )\n              }}\n            </Formik>\n\n            {isAppSumo || !showFacebookButton || !showGoogleButton ? (\n              <SeparatorStyled>\n                <hr />\n                <span>or</span>\n                <hr />\n              </SeparatorStyled>\n            ) : null}\n            <FooterStyled isAppSumo={isAppSumo}>\n              <ButtonNbe\n                style={{ padding: '0', textDecoration: 'underline' }}\n                $variant={'link-secondary'}\n                onClick={() => {\n                  history.push(appRoutes.signin.makeUrl())\n                }}\n              >\n                {t('auth.signup.alreadyAnAccount')}\n              </ButtonNbe>\n              <ButtonNbe\n                style={{ margin: '0' }}\n                $variant={'outlined-primary'}\n                onClick={() => {\n                  history.push(appRoutes.signin.makeUrl())\n                }}\n              >\n                {t('auth.signup.signIn')}\n              </ButtonNbe>\n            </FooterStyled>\n          </ContentWrapper>\n        )}\n      </ReCaptcha>\n    </SignupFormWrapper>\n  )\n}\n","import React, { ReactNode } from 'react'\nimport styled, { css } from 'styled-components'\n\ninterface LayoutProps {\n  leftSlot?: ReactNode\n  hideLeftOnMobile?: boolean\n  rightSlot: ReactNode\n}\n\nconst SingupLayoutWrapper = styled.div`\n  background-color: #41a6dc;\n  width: 100%;\n  min-height: 100vh;\n  padding: 1rem;\n  @media (min-width: 980px) {\n    padding: 0 1rem;\n  }\n`\n\nconst SignupLayoutStyled = styled.div`\n  width: 100%;\n  min-height: 100vh;\n\n  max-width: ${({ theme }) => theme.container.extralarge};\n  display: grid;\n  align-items: center;\n  margin: 0 auto;\n  gap: 1rem;\n\n  @media (min-width: 980px) {\n    grid-template-columns: 1fr 1fr;\n  }\n`\n\nconst ContainerStyled = styled.div<{ $hideOnMobile?: boolean }>`\n  display: flex;\n  justify-content: center;\n\n  /* in generic singup left image needs to disappear on mobile, in bbu not  */\n  ${({ $hideOnMobile }) =>\n    $hideOnMobile\n      ? css`\n          @media (max-width: 768px) {\n            display: none;\n          }\n        `\n      : null}\n`\n\nexport const SignupLayout: React.FC<LayoutProps> = ({\n  leftSlot,\n  rightSlot,\n  hideLeftOnMobile,\n}) => {\n  return (\n    <SingupLayoutWrapper>\n      <SignupLayoutStyled>\n        <ContainerStyled $hideOnMobile={hideLeftOnMobile}>\n          {leftSlot}\n        </ContainerStyled>\n        <ContainerStyled>{rightSlot}</ContainerStyled>\n      </SignupLayoutStyled>\n    </SingupLayoutWrapper>\n  )\n}\n","import React, { useEffect, useState } from 'react'\nimport { Message, Transition } from 'semantic-ui-react'\nimport { Toast } from 'LeadsBridgeApp'\nimport { useSelector } from 'react-redux'\nimport { RootState } from '@app/index'\nimport styled from 'styled-components'\n\nconst ToastStyled = styled.div`\n  position: fixed;\n  top: 33px;\n  right: 10px;\n  z-index: ${({ theme }) => theme.zIndex.overallNotifications};\n  .ui.message {\n    padding-right: 40px;\n  }\n`\n\nconst ToastComponent: React.FC = () => {\n  const [visible, setVisible] = useState<boolean>(false)\n  const toast: Toast | null = useSelector(\n    (state: RootState) => state.application.toast\n  )\n\n  useEffect(() => {\n    if (toast !== null) {\n      setVisible(true)\n      setTimeout(() => {\n        setVisible(false)\n      }, 5500)\n    }\n  }, [toast])\n\n  return (\n    <ToastStyled>\n      <Transition visible={visible} animation='scale' duration={500}>\n        <Message\n          compact\n          className={toast?.color}\n          header={toast?.title}\n          onDismiss={() => setVisible(false)}\n        >\n          {toast && toast.message ? (\n            <span dangerouslySetInnerHTML={{ __html: toast.message }} />\n          ) : null}\n          {toast && toast.messages ? (\n            <ul>\n              {toast.messages.map((message, index) => {\n                return (\n                  <li\n                    key={index}\n                    dangerouslySetInnerHTML={{ __html: message }}\n                  />\n                )\n              })}\n            </ul>\n          ) : null}\n        </Message>\n      </Transition>\n    </ToastStyled>\n  )\n}\n\nexport default ToastComponent\n","import * as React from 'react'\nimport * as ReactDOM from 'react-dom'\nimport App from './App'\nimport { Router } from 'react-router-dom'\nimport store from './store'\nimport { createBrowserHistory } from 'history'\nimport { Provider } from 'react-redux'\nimport ToastComponent from './components/ToastComponent'\nimport { QueryClient, QueryClientProvider } from 'react-query'\nimport { createServerInit } from './mockapi'\nimport { ReactQueryDevtools } from 'react-query/devtools'\nimport { ThemeProvider } from 'styled-components'\nimport { defaultTheme } from '@app/styles/theme/default'\nimport './i18n'\nimport { AlertComponent } from '@components/Alert'\nimport { ErrorBoundary } from '@sentry/react'\nimport { ErrorPage } from '@components/ErrorBoundary/ErrorPage'\nimport { initSentry } from '@app/utils/sentry'\n\nif (process.env.REACT_USE_MOCK_API === 'true') {\n  createServerInit()\n}\n\nconst history = createBrowserHistory()\nexport type RootState = ReturnType<typeof store.getState>\nexport type AppDispatch = typeof store.dispatch\n\nconst queryClient = new QueryClient({\n  defaultOptions: {\n    queries: {\n      retry: 0,\n      staleTime: Infinity,\n      refetchOnWindowFocus: false,\n    },\n  },\n})\n\ninitSentry()\n\nReactDOM.render(\n  <QueryClientProvider client={queryClient}>\n    <ReactQueryDevtools initialIsOpen={false} />\n    <Provider store={store}>\n      <Router history={history}>\n        <ThemeProvider theme={defaultTheme}>\n          <ErrorBoundary fallback={() => <ErrorPage />}>\n            <App />\n          </ErrorBoundary>\n          <ToastComponent />\n          <AlertComponent />\n        </ThemeProvider>\n      </Router>\n    </Provider>\n  </QueryClientProvider>,\n  document.getElementById('root')\n)\n","import * as Sentry from '@sentry/react'\n\nexport const initSentry = () => {\n  Sentry.init({\n    dsn: 'https://acad65fcd1a943a893a7e2dfb763ebf7@o320992.ingest.sentry.io/6172904',\n    integrations: [\n      Sentry.browserTracingIntegration(),\n      Sentry.replayIntegration(),\n    ],\n    // https://docs.sentry.io/platforms/javascript/guides/react/configuration/sampling/#sampling-transaction-events\n    tracesSampleRate: 0.2,\n    replaysOnErrorSampleRate: 0.5,\n    replaysSessionSampleRate: 0,\n    environment: process.env.DEPLOY_ENV,\n    release: APP_VERSION,\n    // loading Sentry only for production\n    enabled: process.env.NODE_ENV === 'production',\n\n    denyUrls: [\n      /pagead\\/js/i,\n      /graph\\.facebook\\.com/i,\n      /connect\\.facebook\\.net\\/en_US\\/all\\.js/i,\n      /eatdifferent\\.com\\.woopra-ns\\.com/i,\n      /static\\.woopra\\.com\\/js\\/woopra\\.js/i,\n      /extensions\\//i,\n      /^chrome:\\/\\//i,\n      /127\\.0\\.0\\.1:4001\\/isrunning/i,\n      /webappstoolbarba\\.texthelp\\.com\\//i,\n      /metrics\\.itunes\\.apple\\.com\\.edgesuite\\.net\\//i,\n      //\n      // custom LB here:\n      /cdn\\.segment\\.com/i,\n      /static\\.woopra\\.com/i,\n      /snap\\.licdn\\.com/i,\n\n      /**\n       * @see https://github.com/fdev/sentry-ignores\n       */\n      // Specific files\n      /\\/js\\/popunder\\.js/,\n\n      // Random plugins and extensions.\n      /^resource:\\/\\//i,\n      /127\\.0\\.0\\.1:4001\\/isrunning/i,\n      /bestpriceninja/i,\n      /googleapis/i,\n      /googlebot/i,\n      /googlest/i,\n      /itunes\\.apple\\.com\\//i,\n      /metrics\\.itunes\\.apple\\.com\\.edgesuite\\.net\\//i,\n      /re-markit/i,\n      /webappstoolbarba\\.texthelp\\.com\\//i,\n\n      // Analytics.\n      /doubleclick\\.net/i,\n      /hotjar\\./i,\n      /netstats\\.space/i,\n      /pagead\\/js/i,\n      /posthog\\.com/i,\n\n      // Chrome extensions.\n      /^chrome:\\/\\//i,\n      /chrome-extension:/i,\n      /extensions\\//i,\n\n      // Facebook.\n      /connect\\.facebook\\.net\\/en_US\\/all\\.js/i,\n      /graph\\.facebook\\.com/i,\n\n      // Kaspersky antivirus.\n      /kaspersky/i,\n\n      // Locally saved copies\n      /file:\\/\\//i,\n\n      // Proxy servers.\n      /nph-proxy\\./i,\n      /\\.cloudfront\\..+\\/statistic\\//i,\n\n      // Safari extensions.\n      /safari-web-extension:/i,\n      /safari-extension:/i,\n    ],\n\n    ignoreErrors: [\n      'top.GLOBALS',\n      'originalCreateNotification',\n      'canvas.contentDocument',\n      'MyApp_RemoveAllHighlights',\n      'http://tt.epicplay.com',\n      \"Can't find variable: ZiteReader\",\n      'jigsaw is not defined',\n      'ComboSearch is not defined',\n      'http://loading.retry.widdit.com/',\n      'atomicFindClose',\n      'fb_xd_fragment',\n      'bmi_SafeAddOnload',\n      'EBCallBackMessageReceived',\n      'conduitPage',\n      'Script error.',\n      '_avast_submit',\n      //\n      // custom from LB here...\n      'Pending sign-in attempt already in progress', // internal cognito\n      'consentCookieParser is not defined', // some marketing tracking script injected in page\n      'TypeError: Failed to fetch',\n      'Failed to fetch',\n\n      // Build\n\n      // Media\n      'AbortError',\n      'Request aborted',\n      'Picture-in-Picture',\n      'webkitExitFullScreen',\n      'NotSupportedError: The operation is not supported', // Safari not compatible video - https://stackoverflow.com/a/47976124\n\n      // Network\n      'FetchError',\n\n      // Service worker\n      'Registration failed - no active Service Worker',\n\n      // - Misc -\n      'ResizeObserver loop limit exceeded',\n\n      /**\n       * @see https://github.com/fdev/sentry-ignores\n       */\n      // Random plugins and extensions.\n      // http://blog.errorception.com/2012/03/tale-of-unfindable-js-error.html\n      'atomicFindClose',\n      \"Can't find variable: ZiteReader\",\n      'canvas.contentDocument',\n      'ComboSearch is not defined',\n      'http://loading.retry.widdit.com/',\n      'http://tt.epicplay.com',\n      'jigsaw is not defined',\n      'miscellaneous_bindings',\n      'MyApp_RemoveAllHighlights',\n      'originalCreateNotification',\n      'top.GLOBALS',\n\n      // Generic error code from errors outside the security sandbox.\n      'Script error.',\n\n      // Analytics code.\n      'vars.hotjar.com',\n      'doubleclick.net',\n\n      // Avast.\n      '_avast_',\n\n      // Facebook.\n      'fb_xd_fragment',\n\n      // Broadcom ASG error.\n      'ICAP Error',\n\n      // Bytemobile proxy.\n      'bmi_SafeAddOnload',\n      'EBCallBackMessageReceived',\n\n      // Conduit Toolbar.\n      'conduitPage',\n\n      // Chrome for iOS bug.\n      // https://groups.google.com/a/chromium.org/forum/#!topic/chromium-discuss/7VU0_VvC7mE\n      '__gCrWeb',\n\n      // Chromium bug.\n      // https://bugs.chromium.org/p/chromium/issues/detail?id=97172\n      'ntp is not defined',\n\n      // Edge on iOS.\n      'instantSearchSDKJSBridgeClearHighlight',\n\n      // Firefox bug.\n      // https://bugzilla.mozilla.org/show_bug.cgi?id=783260\n      // http://stackoverflow.com/a/13101119\n      'Permission denied to access property \"toString\"',\n\n      // Firefox internals.\n      '_firefox_',\n\n      // Firefox freeing add-on memory.\n      // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Errors/Dead_object\n      \"can't access dead object\",\n\n      // Nuance Dragon Web Extension.\n      'plugin.setSuspendState',\n\n      // Safari bug.\n      // https://bugs.webkit.org/show_bug.cgi?id=119472\n      'promiseReactionJob',\n\n      // SafeBrowse extension.\n      'jQSB',\n\n      // Commonly ignored errors of unknown origin.\n      'androidInterface',\n      'eshopcomp',\n      'eval at C',\n      'eval at E_c',\n      'frameConnector_isForegroundChanged',\n      'harkedtremblings',\n      'kw__injected',\n      'NPObject',\n      'siteroot',\n      'SymBrowser_',\n      'touchDownX',\n      'uiWebview_',\n      'variable: inf',\n      'Window.dologin',\n    ],\n\n    // regex should match both https://app.leadsbridge.com  and https://staging-app.leadsbridge.com\n    allowUrls: [/https?:\\/\\/([a-z0-9-]+[.])?leadsbridge\\.com/],\n  })\n}\n","import React, { useEffect, useRef, useState } from 'react'\nimport {\n  AlertBody,\n  AlertBodyContent,\n  AlertButtonClose,\n  AlertFooter,\n  AlertHeader,\n  AlertImageWrapper,\n  AlertStyled,\n  AlertWrapper,\n} from './styled'\nimport { useSelector } from 'react-redux'\nimport { RootState } from '@app/index'\nimport { Alert } from 'LeadsBridgeApp'\nimport { IoCloseOutline } from 'react-icons/io5'\nimport { useTranslation } from 'react-i18next'\nimport { AlertProgressBar } from '@components/Alert/AlertProgressBar/AlertProgressBar'\nimport { Translate } from '@components/Translate'\nimport { Container } from '../Basic/Container'\n\nexport const AlertComponent: React.FC = () => {\n  const [visible, setVisible] = useState<boolean>(false)\n  const alert: Alert | null = useSelector(\n    (state: RootState) => state.application.alert\n  )\n  const { t } = useTranslation()\n\n  useEffect(() => {\n    if (alert) {\n      setVisible(true)\n    }\n  }, [alert])\n\n  const timerId = useRef<NodeJS.Timeout>()\n  useEffect(() => {\n    if (alert && alert.dismissableTimer) {\n      timerId.current = setTimeout(() => {\n        setVisible(false)\n      }, alert.dismissableTimer)\n    }\n\n    return () => {\n      if (timerId.current) {\n        clearTimeout(timerId.current)\n      }\n    }\n  }, [alert?.dismissableTimer])\n\n  if (!alert) return null\n\n  return (\n    <AlertStyled isVisible={visible}>\n      <Container $size={'lg'}>\n        <AlertWrapper>\n          <AlertHeader>\n            {alert.isDismissable ? (\n              <AlertButtonClose\n                onClick={() => {\n                  setVisible(false)\n                  if (alert?.onClose) {\n                    alert.onClose()\n                  }\n                }}\n              >\n                <IoCloseOutline /> {t('common.close')}\n              </AlertButtonClose>\n            ) : null}\n          </AlertHeader>\n\n          <AlertBody>\n            <AlertBodyContent>\n              {alert.title ? <h4>{alert.title}</h4> : null}\n              <p\n                style={{\n                  maxWidth: 600,\n                }}\n              >\n                {alert.useTranslation ? (\n                  <Translate\n                    i18nKey={alert.message}\n                    values={\n                      alert.transValue\n                        ? { maxFields: alert.transValue }\n                        : undefined\n                    }\n                  />\n                ) : (\n                  alert.message\n                )}\n              </p>\n            </AlertBodyContent>\n            {alert.image ? (\n              <AlertImageWrapper>\n                <img src={alert.image} />\n              </AlertImageWrapper>\n            ) : null}\n          </AlertBody>\n\n          <AlertFooter>{alert.buttons}</AlertFooter>\n        </AlertWrapper>\n        {alert.hasProgressBar && alert.dismissableTimer ? (\n          <AlertProgressBar timer={alert.dismissableTimer} />\n        ) : undefined}\n      </Container>\n    </AlertStyled>\n  )\n}\n","import React, { useEffect, useRef, useState } from 'react'\nimport { EditableIconStatus, EditableTextStyled } from './styled'\nimport { MdEdit, MdSave, MdErrorOutline } from 'react-icons/md'\nimport ReactTooltip from 'react-tooltip'\n\nexport interface TextInputProps {\n  onNameChange: (newValue: string) => void\n  value: string\n  errorMessage?: string\n  isEditable?: boolean\n}\n\nexport const EditableText: React.FC<TextInputProps> = ({\n  value,\n  errorMessage,\n  onNameChange,\n  ...props\n}) => {\n  const [hasEditModeEnabled, setHasEditModeEnabled] = useState<boolean>(true)\n  const inputRef = useRef<HTMLInputElement | null>(null)\n\n  const iconInputStatus = () => {\n    if (hasEditModeEnabled) {\n      return <MdEdit />\n    } else {\n      return <MdSave />\n    }\n  }\n\n  const handleChangeInputStatus = () => {\n    if (value) {\n      setHasEditModeEnabled(!hasEditModeEnabled)\n    }\n  }\n\n  // set focus on input once visibile\n  useEffect(() => {\n    if (!hasEditModeEnabled && inputRef.current) {\n      inputRef.current.focus()\n    }\n  }, [hasEditModeEnabled])\n\n  return (\n    <EditableTextStyled>\n      <EditableIconStatus>\n        {errorMessage ? (\n          <>\n            <ReactTooltip\n              id='topbar-input'\n              place='bottom'\n              type='error'\n              effect='solid'\n            >\n              <span>{errorMessage}</span>\n            </ReactTooltip>\n            <MdErrorOutline\n              className={'error'}\n              data-tip\n              data-for='topbar-input'\n            />\n          </>\n        ) : null}\n      </EditableIconStatus>\n      <input\n        ref={inputRef}\n        style={{ width: (value.length + 3) * 8 + 'px' }}\n        disabled={hasEditModeEnabled}\n        value={value}\n        title={value}\n        onChange={(e) => onNameChange(e.target.value)}\n        maxLength={100}\n      />\n\n      {props.isEditable ? (\n        <span\n          className='text-input-icon'\n          onClick={() => handleChangeInputStatus()}\n        >\n          {iconInputStatus()}\n        </span>\n      ) : (\n        <></>\n      )}\n    </EditableTextStyled>\n  )\n}\n","import React from 'react'\nimport { ReactComponent as BackSVG } from '@assets/images/chevron-left.svg'\nimport { TopbarStyled, TopbarWrapper } from './styled'\nimport { EditableText } from '@components/Basic/EditableText'\nimport { Link } from 'react-router-dom'\n\nexport interface TopbarBacklinkProps {\n  url: string\n  label: string\n}\n\nexport interface TopbarProps {\n  defaultValue?: string\n  errorMessage?: string\n  onNameChange?: (newValue: string) => void // owner : page/layout\n  backlink?: TopbarBacklinkProps\n  hideOnEmbeddable?: boolean\n  variant?: 'light' | 'dark'\n  subBar?: React.ReactNode\n}\n\nexport const Topbar: React.FC<TopbarProps> = ({\n  defaultValue,\n  errorMessage,\n  onNameChange,\n  backlink,\n  children,\n  hideOnEmbeddable,\n  variant,\n}) => {\n  return (\n    <TopbarStyled>\n      <TopbarWrapper\n        hideOnEmbeddable={hideOnEmbeddable}\n        variant={variant || 'light'}\n      >\n        <div>\n          {backlink ? (\n            <Link to={backlink.url} data-testid='exit_btn'>\n              <BackSVG /> {backlink.label}\n            </Link>\n          ) : (\n            ''\n          )}\n        </div>\n        <div>\n          <EditableText\n            onNameChange={(newValue) => {\n              if (onNameChange) {\n                onNameChange(newValue)\n              }\n            }}\n            errorMessage={errorMessage}\n            value={defaultValue || ''}\n            isEditable={Boolean(onNameChange)}\n          />\n        </div>\n        <div>{children}</div>\n      </TopbarWrapper>\n    </TopbarStyled>\n  )\n}\n","import React from 'react'\nimport { StepBarItem } from '@components/StepBar/StepBarItem'\nimport { StepBarContainer } from './styled'\n\nexport type StepBarStep = {\n  onStepClick?: (stepIndex: number) => void\n  label?: string\n  title?: string\n  subLabel?: string\n}\n\nexport interface StepBarProps {\n  steps: StepBarStep[]\n  activeStep: number\n}\n\nexport const StepBar: React.FC<StepBarProps> = ({ steps, activeStep }) => {\n  return (\n    <StepBarContainer>\n      {steps.map((step, index) => {\n        return (\n          <StepBarItem\n            key={index}\n            index={index}\n            isActive={activeStep === index}\n            title={step.title}\n            label={step.label}\n            subLabel={step.subLabel}\n            onStepClick={step.onStepClick}\n          />\n        )\n      })}\n    </StepBarContainer>\n  )\n}\n","import React, { useEffect } from 'react'\nimport { Topbar, TopbarBacklinkProps } from '@components/Topbar'\nimport {\n  PageEditorStyled,\n  PageTitle,\n  PanelContainer,\n  StepBarContainer,\n} from './styled'\nimport { StepBar, StepBarStep } from '@components/StepBar'\nimport { Container } from '@components/Basic/Container'\nimport lbLogo from '@assets/images/logo_lb_extended.svg'\nimport { isInIframe } from '@app/utils/isInFrame'\nimport { Button } from '@app/components/Basic/ButtonNbe'\nimport { FormikProps } from 'formik'\nimport { BridgeFormValues } from 'Nbee'\nimport { helpCenterUrl } from '@app/App'\nimport { useGetUserInfo } from '@app/api/getUserInfo'\nimport ReactTooltip from 'react-tooltip'\nimport { openZendeskChat } from '@app/utils/helpers'\nimport { useTranslation } from 'react-i18next'\nimport { FaLock } from 'react-icons/fa'\nimport { appRoutes } from '@app/routes'\nimport { useHistory } from 'react-router-dom'\nimport { useGetUserModules } from '@app/api/getUserModules'\nimport { useAppSelector } from '@app/store/hooks'\n\ninterface PageEditorProps {\n  pageTitle?: string\n  backlink?: TopbarBacklinkProps\n  hasTopBar?: boolean\n  steps?: StepBarStep[]\n  activeStep?: number\n  infoBar?: React.ReactNode\n  topbarValue?: string\n  topbarError?: string\n  // if callback is not passed, item will not be editable\n  onTopbarValueChange?: (newValue: string) => void\n  IsTestEnableProp?: boolean\n  bridgeIdProp?: string\n  formikContext?: FormikProps<BridgeFormValues>\n}\n\nexport const PageEditor: React.FC<PageEditorProps> = ({\n  pageTitle,\n  backlink,\n  hasTopBar,\n  activeStep = 0,\n  steps,\n  topbarValue,\n  topbarError,\n  onTopbarValueChange,\n  infoBar,\n  children,\n  IsTestEnableProp,\n  bridgeIdProp,\n  formikContext,\n}) => {\n  const isEmbedded = isInIframe()\n\n  const { t } = useTranslation()\n  const history = useHistory()\n  const { zE } = window\n  const userAuthState = useAppSelector((state) => state.user.auth)\n  const [shouldFetchUserModule, setShouldFetchUserModule] =\n    React.useState(false)\n  const [showSupportButton, setShowSupportButton] = React.useState(false)\n\n  const { data: userModulesResponse } = useGetUserModules(shouldFetchUserModule)\n\n  const userModules = userModulesResponse?.modules || []\n  const supportUserModule = userModules.find((m) => m.id === 'customer-support')\n\n  const requiredLbPlanId = supportUserModule?.minimumPlan\n  const customerSupportId = supportUserModule?.id\n  const supportIsAvailable = supportUserModule?.enabled !== false\n\n  useEffect(() => {\n    if (userAuthState) {\n      setShouldFetchUserModule(true)\n      setShowSupportButton(true)\n    }\n  }, [userAuthState])\n\n  // We use a standard variable let because setState in this case generate too many renders and loop error\n  let bridgeId\n  let testEnable\n\n  // Check if we have the formik context to get bridgeId and testEnable,\n  // if not as it is in the step 3 we use props coming from StepCompleted which is not in the formik context\n\n  if (formikContext) {\n    const { values } = formikContext\n    bridgeId = values?.ui?.bridgeId\n    testEnable = values?.ui?.testEnabled\n  } else {\n    testEnable = IsTestEnableProp\n    bridgeId = bridgeIdProp\n  }\n\n  return (\n    <PageEditorStyled>\n      {hasTopBar ? (\n        <>\n          <Topbar\n            backlink={backlink}\n            defaultValue={topbarValue}\n            errorMessage={topbarError}\n            onNameChange={onTopbarValueChange}\n            hideOnEmbeddable\n          >\n            {bridgeId && testEnable ? (\n              <a\n                target={'_blank'}\n                href={`${process.env.REACT_APP_V1_URL}/leads/table/${bridgeId}?version=2`}\n                rel='noreferrer'\n              >\n                <Button $size={'small'} $variant={'secondary'}>\n                  Leads table\n                </Button>\n              </a>\n            ) : null}\n            {!supportIsAvailable && (\n              <ReactTooltip\n                id='support-button'\n                place='top'\n                type='dark'\n                textColor='white'\n                effect='solid'\n              >\n                <span>{t('auth.supportTooltip')}</span>\n              </ReactTooltip>\n            )}\n            {showSupportButton ? (\n              <span data-tip data-for='support-button'>\n                <Button\n                  onClick={() => {\n                    if (!supportIsAvailable) {\n                      history.push(\n                        `${appRoutes.pricing.makeUrl()}?reason=${customerSupportId}&suggestPlan=${\n                          requiredLbPlanId || 7\n                        }`\n                      )\n                    } else {\n                      openZendeskChat(zE)\n                    }\n                  }}\n                  $size={'small'}\n                  $variant={'secondary'}\n                >\n                  Support {!supportIsAvailable ? <FaLock /> : null}\n                </Button>\n              </span>\n            ) : null}\n\n            <a target={'_blank'} href={helpCenterUrl} rel='noreferrer'>\n              <Button $size={'small'} $variant={'secondary'}>\n                Help center\n              </Button>\n            </a>\n            <img src={lbLogo} width={140} alt={'LeadsBridge'} />\n          </Topbar>\n          {infoBar}\n        </>\n      ) : null}\n      {/* when content is embedded in iframe we hide stepbar with js */}\n      {/* it's not possibilel to rely on mediaqueries since the iframe size is too large */}\n      {/* we also display a mini stepbar inside the <Panel> component */}\n      {isEmbedded ? null : steps && steps.length ? (\n        <StepBarContainer className={'text-center'}>\n          <StepBar steps={steps} activeStep={activeStep} />\n        </StepBarContainer>\n      ) : (\n        <div style={{ paddingTop: '3rem' }} />\n      )}\n      {pageTitle ? (\n        <Container>\n          <PageTitle data-testid='page_title' className={'text-center'}>\n            {pageTitle}\n          </PageTitle>\n        </Container>\n      ) : null}\n      <PanelContainer>{children}</PanelContainer>\n    </PageEditorStyled>\n  )\n}\n","import React from 'react'\nimport styled from 'styled-components'\n\nconst SimplePageWrapper = styled.div`\n  background-color: rgba(65, 166, 220, 0.15);\n  min-height: 100vh;\n  padding: 1rem;\n\n  @media (min-width: 980px) {\n    padding: 2.5rem;\n  }\n`\n\nconst CardWrapper = styled.div`\n  background-color: white;\n  padding: 2em;\n`\n\nexport const SimplePage: React.FC = ({ children }) => {\n  return (\n    <SimplePageWrapper>\n      <CardWrapper>{children}</CardWrapper>\n    </SimplePageWrapper>\n  )\n}\n","import React, { useState } from 'react'\nimport styled from 'styled-components'\nimport { FacebookButtonNative } from '@components/ButtonProvider/Facebook/FacebookButtonNative'\nimport { InputField } from '@components/Form/InputField'\nimport { Button } from '@components/Basic/ButtonNbe'\nimport { apiAuthClient } from '@app/services/apiAuthClient'\nimport { useAppDispatch } from '@app/store/hooks'\nimport { sendToast } from '@app/store/actions/ApplicationConfigurationActions'\n\nconst Wrapper = styled.div`\n  padding: 2rem;\n`\n\nconst TokenOutput = styled.div`\n  padding-top: 1rem;\n`\n\nconst Spacer = styled.div`\n  margin-bottom: 1rem;\n`\n\nexport const TestFacebookToken: React.VFC = () => {\n  const [token, setToken] = useState('')\n  const [inputValue, setInputValue] = useState(\n    'pages_manage_ads,pages_manage_metadata,pages_read_engagement,ads_management,email,leads_retrieval,business_management'\n  )\n  const [scopes, setScopes] = useState('')\n  const dispatch = useAppDispatch()\n  const [isLoading, setIsLoading] = useState(false)\n\n  const validateTokenWithApi = (token: string) => {\n    setIsLoading(true)\n    apiAuthClient\n      .post(`${process.env.REACT_APP_LARAVEL_API}/admin/testFacebookToken`, {\n        oauthToken: token,\n      })\n      .then(() => {\n        dispatch(\n          sendToast({\n            title: 'Success',\n            message: 'Request completed',\n            color: 'positive',\n          })\n        )\n      })\n      .catch(() => {\n        setIsLoading(false)\n        dispatch(\n          sendToast({\n            title: 'Error',\n            message: 'Request failed',\n            color: 'negative',\n          })\n        )\n      })\n  }\n\n  return (\n    <Wrapper>\n      <Spacer>\n        <InputField\n          label={'Scopes'}\n          name={''}\n          type={'text'}\n          disabled={isLoading}\n          value={inputValue}\n          placeholder={'add scope as comma separated values'}\n          onChange={(e) => setInputValue(e.currentTarget.value)}\n        />\n        <Button\n          disabled={!inputValue || isLoading}\n          onClick={() => {\n            setScopes(inputValue)\n          }}\n          $variant={'action'}\n        >\n          Set scopes\n        </Button>\n      </Spacer>\n\n      <Spacer>\n        {scopes ? (\n          <div style={{ width: 240 }}>\n            <FacebookButtonNative\n              key={scopes}\n              onTokenRetrived={setToken}\n              scope={'SignIn'}\n              onSdkLoadError={() => {\n                alert('error loading FB SDK')\n              }}\n              customFbAppScopes={scopes}\n            />\n          </div>\n        ) : (\n          <div>Add some scopes to see the FB login button</div>\n        )}\n      </Spacer>\n\n      {token ? (\n        <Spacer>\n          <TokenOutput>\n            <InputField\n              label={'Auth token'}\n              name={''}\n              type={'text'}\n              readOnly\n              disabled\n              value={token}\n              placeholder={'Auth token will appear here'}\n            />\n          </TokenOutput>\n          <div>\n            <Button\n              $variant={'primary'}\n              disabled={isLoading}\n              onClick={() => {\n                validateTokenWithApi(token)\n              }}\n            >\n              Validate token\n            </Button>\n          </div>\n        </Spacer>\n      ) : null}\n    </Wrapper>\n  )\n}\n","import React, { Suspense } from 'react'\nimport { Loader } from '@components/Basic/Loader'\n\nconst ComponentLazy = React.lazy(() => import('./Router'))\n\nexport const AdminPages = () => {\n  return (\n    <Suspense\n      fallback={\n        <div\n          style={{\n            position: 'relative',\n            height: 200,\n          }}\n        >\n          <Loader $active $dimmer $size={'large'} />\n        </div>\n      }\n    >\n      <ComponentLazy />\n    </Suspense>\n  )\n}\n","import React from 'react'\nimport { ProgressDivStyled } from '@components/Basic/ProgressBar/styled'\n\nexport interface ProgressProps {\n  $progress: number\n  $theme: 'primary'\n}\n\nexport const ProgressBar: React.VFC<ProgressProps> = ({\n  $progress,\n  $theme,\n}) => {\n  return <ProgressDivStyled $progress={$progress} $theme={$theme} />\n}\n","import React from 'react'\nimport {\n  ContainerStyled,\n  IconWrapperStyled,\n  FastAppSurveyWrapperStyled,\n  HeaderStyled,\n  LoaderWrapperStyled,\n  LogoStyled,\n  BrandLogoStyled,\n} from './styled'\nimport { Loader } from '@components/Basic/Loader'\nimport { ProgressBar } from '@components/Basic/ProgressBar'\nimport { Form, FormProps } from '@components/FastAppSurvey/Form'\nimport logo from '@assets/images/logo-lb.png'\nimport { AiOutlineArrowRight } from 'react-icons/ai'\n\nexport interface Props extends Pick<FormProps, 'onSubmitSuccess'> {\n  isLoading?: boolean\n  loadingText?: string\n  step: 0 | 1 | 2\n  integrationsData?: {\n    source?: {\n      name: string\n      logo: string\n    }\n    destination?: {\n      name: string\n      logo: string\n    }\n  }\n}\n\nexport const FastAppSurvey: React.FC<Props> = ({\n  step,\n  isLoading,\n  loadingText,\n  integrationsData,\n  onSubmitSuccess,\n}) => {\n  return (\n    <ContainerStyled>\n      <BrandLogoStyled>\n        <img src={logo} alt='' />\n      </BrandLogoStyled>\n      <HeaderStyled>\n        <h2>{`We're setting up your connection`}</h2>\n        {integrationsData &&\n          integrationsData.source &&\n          integrationsData.destination && (\n            <IconWrapperStyled>\n              <div>\n                <LogoStyled\n                  src={integrationsData.source.logo}\n                  alt={integrationsData.source.name}\n                  title={integrationsData.source.name}\n                />\n                <AiOutlineArrowRight />\n                <LogoStyled\n                  src={integrationsData.destination.logo}\n                  alt={integrationsData.destination.name}\n                  title={integrationsData.destination.name}\n                />\n              </div>\n              <ProgressBar\n                $progress={step === 0 ? 5 : step === 1 ? 50 : 100}\n                $theme={'primary'}\n              />\n            </IconWrapperStyled>\n          )}\n      </HeaderStyled>\n      <FastAppSurveyWrapperStyled>\n        {isLoading ? (\n          <LoaderWrapperStyled>\n            <Loader $active $size={'large'} $text={loadingText} />\n          </LoaderWrapperStyled>\n        ) : (\n          <Form onSubmitSuccess={onSubmitSuccess} />\n        )}\n      </FastAppSurveyWrapperStyled>\n    </ContainerStyled>\n  )\n}\n","import React, { useEffect, useState } from 'react'\nimport { useHistory, useLocation, useParams } from 'react-router-dom'\nimport {\n  validatePersistentBbuData,\n  retryButtonPartnerLink,\n  userStatusForSurvey,\n} from '@app/pages/BridgeByUrlCallback/utils'\nimport queryString from 'query-string'\nimport { Button } from '@components/Basic/Button'\nimport { useGenericBbuAuth } from '@app/pages/BridgeByUrlCallback/useGenericBbuAuth'\nimport { BbuCallbackRouteParams, PersistentBbuData } from 'LeadsBridgeApp'\nimport { PersistentLocalStorageKeys } from '@app/enums/persistentLocalStorageKeys'\nimport { FastAppSurvey } from '@components/FastAppSurvey'\nimport { endpoints, getApiErrorMessage } from '@app/api/config'\nimport { Message } from '@components/Basic/Message'\nimport { Container } from 'react-grid-system'\nimport { useTranslation } from 'react-i18next'\nimport { apiAuthClient } from '@app/services/apiAuthClient'\nimport { appRoutes } from '@app/routes'\nimport { trackEvent } from '@app/dataTracking'\n\ninterface Props {\n  isMountedInLoggedRoute: boolean\n}\n\nexport const BridgeByUrlCallback: React.FC<Props> = ({\n  isMountedInLoggedRoute,\n}) => {\n  // can user reach this also when logged in?\n  const { partnerFullName } = useParams<BbuCallbackRouteParams>()\n  const location = useLocation()\n  const history = useHistory()\n  const persistentBbuData: PersistentBbuData = JSON.parse(\n    window.sessionStorage.getItem(\n      PersistentLocalStorageKeys.bbuPersistentData\n    ) || '{}'\n  )\n  const { t } = useTranslation()\n\n  const authLbCode = queryString.parse(location.search).lb_code as\n    | string\n    | undefined\n\n  // ui states\n  const [isLoading, setIsLoading] = useState(true)\n  const [progressStep, setProgressStep] = useState<0 | 1 | 2>(0)\n  const [loadingText, setLoadingText] = useState(\n    'We are connecting your account'\n  )\n  const [hasJustCompletedSurvey, setHasJustCompletedSurvey] = useState(false)\n  const [genericApiError, setGenericApiError] = useState('')\n\n  // before using data from local storage, it's always better to validate them\n  const validPersistentBbuData = validatePersistentBbuData(persistentBbuData)\n    ? persistentBbuData\n    : null\n\n  const errorMissingStartingData = !validPersistentBbuData\n    ? t('bbu.callback.missingPersitentData')\n    : !authLbCode\n    ? t('bbu.callback.missingAuthLbCode')\n    : null\n\n  // when user is not logged in\n  const { userStatus, apiError } = useGenericBbuAuth({\n    provider: partnerFullName,\n    authCode: authLbCode,\n    requestUri: validPersistentBbuData?.requestUri,\n    bbuData: validPersistentBbuData,\n  })\n\n  const persistentUserStatus = localStorage.getItem(\n    PersistentLocalStorageKeys.bbuPersistentUserStatus\n  )\n\n  const surveyNeeded =\n    userStatusForSurvey.includes(persistentUserStatus || '') ||\n    userStatusForSurvey.includes(userStatus || '')\n\n  const handleFinalStep = () => {\n    // As decided in SB-782 we take the user to nbee step1 instead of calling setupBridge\n    // https://leadsbridge.atlassian.net/browse/SB-782\n    window.sessionStorage.removeItem(\n      PersistentLocalStorageKeys.bbuPersistentData\n    )\n    try {\n      const bbuUrl = new URL(validPersistentBbuData!.requestUri).pathname\n      history.push(bbuUrl)\n    } catch {\n      history.push(appRoutes.nbeeStep1New.makeUrl())\n    }\n  }\n\n  useEffect(() => {\n    if (hasJustCompletedSurvey) {\n      // if user has just completed survay, surveyNeeded will mutate and we don't want to proceed with this useEffect\n      return\n    }\n\n    if (!isMountedInLoggedRoute) {\n      // we want to be sure this component has been mounted in it's final state, to prevent firing api requests twice\n      // note that we can't rely on redux, because redux store will be updated before the remount of this component in the signed-in routes\n      return\n    }\n\n    if (surveyNeeded) {\n      console.log('User is logged in but survey is needed')\n      trackEvent({\n        eventName: 'FastSurveyShown',\n        feature: 'Authentication',\n        step: 'Signup',\n      })\n      setProgressStep(1)\n      setIsLoading(false)\n    } else {\n      console.log(\n        'User is logged in and already has own email (survey is not needed), so we can call handleOauth (private endpoint) + setupBridge'\n      )\n      setProgressStep(2)\n      setLoadingText('We are connecting your account')\n\n      apiAuthClient\n        .post(endpoints.handleOauthLoggedUser, {\n          provider: partnerFullName,\n          authCode: authLbCode,\n          requestUri: validPersistentBbuData?.requestUri,\n        })\n        .then(() => {\n          setLoadingText('We are setting up your bridge')\n          handleFinalStep()\n        })\n        .catch((error) => {\n          setGenericApiError(\n            getApiErrorMessage({\n              error,\n            })\n          )\n        })\n    }\n  }, [isMountedInLoggedRoute, surveyNeeded, hasJustCompletedSurvey])\n\n  // SHOW ERROR\n  if (errorMissingStartingData || apiError || genericApiError) {\n    return (\n      <div>\n        <Container>\n          <Message $header={'Error'} $status={'error'}>\n            {errorMissingStartingData && <p>{errorMissingStartingData}</p>}\n            {apiError && (\n              <div\n                dangerouslySetInnerHTML={{\n                  // error messages from api could arrive as html\n                  __html: apiError,\n                }}\n              />\n            )}\n            {genericApiError && (\n              <div\n                dangerouslySetInnerHTML={{\n                  // error messages from api could arrive as html\n                  __html: genericApiError,\n                }}\n              />\n            )}\n\n            {/* api can return a link for the retry inside the error message (as html) */}\n            {/* It's not the best solution, but it's the good enough for now */}\n            {apiError.includes('<a ') ? null : (\n              <Button\n                className={'mt-1'}\n                $variant={'secondary'}\n                onClick={() => {\n                  if (validPersistentBbuData?.requestUri) {\n                    // we already validate `requestUri` so it's safe to do build a `new URL`\n                    history.push(\n                      new URL(validPersistentBbuData.requestUri).pathname\n                    )\n                    return\n                  }\n\n                  if (retryButtonPartnerLink[partnerFullName]) {\n                    window.location.href =\n                      retryButtonPartnerLink[partnerFullName]\n                  } else {\n                    window.location.reload()\n                  }\n                }}\n              >\n                Retry\n              </Button>\n            )}\n          </Message>\n        </Container>\n      </div>\n    )\n  }\n\n  return (\n    <>\n      <FastAppSurvey\n        isLoading={isLoading}\n        step={progressStep}\n        integrationsData={{\n          source: validPersistentBbuData?.source,\n          destination: validPersistentBbuData?.destination,\n        }}\n        loadingText={loadingText}\n        onSubmitSuccess={() => {\n          setHasJustCompletedSurvey(true)\n          localStorage.removeItem(\n            PersistentLocalStorageKeys.bbuPersistentUserStatus\n          )\n          setIsLoading(true)\n          setProgressStep(2)\n          setLoadingText('We are creating your bridge')\n          handleFinalStep()\n        }}\n      />\n    </>\n  )\n}\n","import React, { Suspense } from 'react'\nimport { Loader } from '@components/Basic/Loader'\n\nconst CheckoutLazy = React.lazy(() => import('./CheckoutPageComponent'))\n\nexport const CheckoutPage = () => {\n  return (\n    <Suspense\n      fallback={\n        <div\n          style={{\n            position: 'relative',\n            height: 200,\n          }}\n        >\n          <Loader $active $dimmer $size={'large'} />\n        </div>\n      }\n    >\n      <CheckoutLazy />\n    </Suspense>\n  )\n}\n","import React, { Suspense } from 'react'\nimport { Loader } from '@components/Basic/Loader'\n\nconst ComponentLazy = React.lazy(() => import('./Router'))\n\nexport const GoogleAdsAccountRouter = () => {\n  return (\n    <Suspense\n      fallback={\n        <div\n          style={{\n            position: 'relative',\n            height: 200,\n          }}\n        >\n          <Loader $active $dimmer $size={'large'} />\n        </div>\n      }\n    >\n      <ComponentLazy />\n    </Suspense>\n  )\n}\n","import React from 'react'\nimport { Route, Switch } from 'react-router-dom'\nimport { appRoutes } from '@app/routes'\nimport { IncomingDataScreen } from './IncomingDataScreen'\nimport { IncomingDataScreenSave } from './IncomingDataScreenSave'\nimport { IncomingDataScreenFields } from './IncomingDataScreenFields'\n\nexport const IncomingDataRouter: React.FC = () => {\n  return (\n    <Switch>\n      <Route\n        exact\n        path={appRoutes.incomingDataScreen.path}\n        component={IncomingDataScreen}\n      />\n      <Route\n        exact\n        path={appRoutes.incomingDataScreenEdit.path}\n        component={IncomingDataScreen}\n      />\n      <Route\n        exact\n        path={appRoutes.incomingDataScreenFields.path}\n        component={IncomingDataScreenFields}\n      />\n      <Route\n        exact\n        path={appRoutes.incomingDataScreenSave.path}\n        component={IncomingDataScreenSave}\n      />\n    </Switch>\n  )\n}\n","import React from 'react'\nimport { Route, Switch } from 'react-router-dom'\nimport { appRoutes } from '@app/routes'\nimport { IntegrationAuthScreenEdit } from './IntegrationAuthScreenEdit'\nimport { IntegrationAuthScreen } from './IntegrationAuthScreen'\nimport { IntegrationHome } from '@app/pages/Integration/IntegrationHome'\nimport { IntegrationAuthCallback } from './IntegrationAuthCallback'\nimport { IntegrationAuthCallback2 } from './IntegrationAuthCallback2'\n\nexport const IntegrationRouter: React.FC = () => {\n  return (\n    <Switch>\n      <Route\n        exact\n        path={appRoutes.integrationAuthScreenCallback2.path}\n        component={IntegrationAuthCallback2}\n      />\n      <Route\n        exact\n        path={appRoutes.integrationAuthScreenCallback.path}\n        component={IntegrationAuthCallback}\n      />\n      <Route\n        path={[\n          appRoutes.integrationAuthScreenEdit.path,\n          appRoutes.integrationAuthScreenEditWithBridgeId.path,\n          appRoutes.integrationAuthScreenEditStep2.path,\n        ]}\n        exact\n        component={IntegrationAuthScreenEdit}\n      />\n      <Route\n        path={appRoutes.integrationAuthScreen.path}\n        exact\n        component={IntegrationAuthScreen}\n      />\n      <Route component={IntegrationHome} />\n    </Switch>\n  )\n}\n","import React, { useEffect } from 'react'\nimport { Auth } from 'aws-amplify'\nimport { useHistory } from 'react-router-dom'\nimport queryString from 'query-string'\nimport { sendToast } from '../../store/actions/ApplicationConfigurationActions'\nimport { Loader } from '@components/Basic/Loader'\nimport { useAppDispatch } from '@app/store/hooks'\nimport { clearPersistentData } from '@app/pages/Logout/clearPersistentData'\nimport { forgetUser } from '@app/dataTracking'\nimport { useTranslation } from 'react-i18next'\n\nconst Logout: React.FC = () => {\n  const dispatch = useAppDispatch()\n  const history = useHistory()\n  const search = (window.location.search || '').replace('??', '?') // remove double ?? generate by v1\n  const qs = queryString.parse(search)\n  const { t } = useTranslation()\n\n  // https://leadsbridge.atlassian.net/browse/SB-572\n  // In order to logout the user also from V1 we need to load the v1/app/logout url inside an iframe.\n  // Strategy is to inject an iframe, prevent infinite injections  by checking the presence of `preventRedirect` in query string\n  // When this code/component is loaded inside the iframe we detect `preventRedirect` and send a post message to paret\n  // Parent (this same component) receives the message and performs a logout in cognito and redirect user to `path` where they was or to `/`\n  const isInIframe = qs.preventRedirect || qs.path?.includes('preventRedirect')\n\n  // Create the iframe to load v1 logout\n  useEffect(() => {\n    if (isInIframe) {\n      console.log('We are in iframe')\n      window.postMessage({ hasV1LoggedOut: true }, '*')\n      return\n    }\n\n    if (document.getElementById('logout-v1-iframe')) {\n      // we don't want each re-rendering to create new iframes\n      return\n    }\n\n    // we need to be sure that the iframe url contains preventRedirect so V1 will keep it during redirection\n    // and we won't create infinite loop of iframes\n    const logoutV1Url = `${process.env.REACT_APP_V1_URL}/logout?preventRedirect=1`\n    const iframe = document.createElement('iframe')\n    iframe.src = logoutV1Url\n    iframe.id = 'logout-v1-iframe'\n    iframe.style.position = 'absolute'\n    iframe.style.top = '-1000px'\n    iframe.style.opacity = '0'\n    document.body.appendChild(iframe)\n  }, [])\n\n  // Generic function to logout the user\n  const logoutFromCognitoAndRedirectUser = () => {\n    if (isInIframe) {\n      return // parent will be in charge, no need to do this in iframe\n    }\n    // remove cookies and localStorage\n    clearPersistentData().then(() => {\n      forgetUser() //  flush segment user info\n      Auth.signOut().then(() => {\n        const postLogoutUrl = `${qs.path || '/'}`\n        console.log('Logout from Cognito -> Redirect user to -> ', postLogoutUrl)\n        history.push(postLogoutUrl)\n      })\n    })\n  }\n\n  // We are expecting to receive data as postMessage from parent window\n  // Once we have received the message we can proceed with the v2 logout\n  const messageReceiverFn = function (event: MessageEvent) {\n    if (event.data.hasV1LoggedOut) {\n      console.log('Received post message from logout iframe')\n      logoutFromCognitoAndRedirectUser()\n    }\n  }\n  useEffect(() => {\n    window.addEventListener('message', messageReceiverFn)\n    return () => window.removeEventListener('message', messageReceiverFn)\n  }, [])\n  // in case something goes wrong, we proceed with the logout after few seconds\n  useEffect(() => {\n    setTimeout(() => {\n      console.log('logout timeout')\n      logoutFromCognitoAndRedirectUser()\n    }, 6000)\n  }, [])\n\n  // display toast to notify something to user (eg. session is expired)\n  useEffect(() => {\n    if (qs && qs.message) {\n      try {\n        const encodedStringAtoB = window.atob(qs.message.toString())\n        const JSONParsed = JSON.parse(encodedStringAtoB)\n        const alertTitle = JSONParsed.title ?? ''\n        const alertMessage = t('auth.logout.toastMessage') ?? ''\n        const alertColor = JSONParsed.type ?? 'negative'\n        dispatch(\n          sendToast({\n            title: alertTitle,\n            message: alertMessage,\n            color: alertColor,\n          })\n        )\n      } catch (e) {}\n    }\n  }, [])\n\n  return (\n    <div>\n      <Loader $active />\n    </div>\n  )\n}\n\nexport default Logout\n","import React from 'react'\nimport { Route, Switch } from 'react-router-dom'\nimport { appRoutes, bridgeByUrlPartnersPaths } from '@app/routes'\nimport { Step1Edit } from '@app/pages/Nbee/Step1Edit'\nimport { Step1 } from '@app/pages/Nbee/Step1'\nimport { Step2 } from '@app/pages/Nbee/Step2'\nimport { NbeeHome } from '@app/pages/Nbee/NbeeHome'\nimport { Step3 } from '@app/pages/Nbee/Step3'\nimport { BridgeChooser } from '@app/pages/Nbee/BridgeChooser'\nimport { InfoPage } from '@features/nbee/StepCompleted/InfoPage'\n\nexport const NbeeRouter: React.FC = () => {\n  return (\n    <Switch>\n      <Route exact path={appRoutes.nbeeInfoPage.path} component={InfoPage} />\n      <Route\n        exact\n        path={[\n          appRoutes.nbeeBridgeChooserStep1.path,\n          appRoutes.nbeeBridgeChooserStep2.path,\n        ]}\n        component={BridgeChooser}\n      />\n      <Route exact path={appRoutes.nbeeStep1New.path} component={Step1} />\n      <Route\n        exact\n        path={[\n          appRoutes.nbeeAppBbu.path,\n          appRoutes.signupBbu.path,\n          ...bridgeByUrlPartnersPaths,\n        ]}\n        component={Step1}\n      />\n      <Route exact path={appRoutes.nbeeStep1Edit.path} component={Step1Edit} />\n      <Route exact path={appRoutes.nbeeStep2.path} component={Step2} />\n      <Route exact path={appRoutes.nbeeStep3.path} component={Step3} />\n      <Route component={NbeeHome} />\n    </Switch>\n  )\n}\n","import React, { Suspense } from 'react'\n\nconst PricingLazy = React.lazy(() => import('./PricingPageComponent'))\n\nexport const PricingPage = () => {\n  return (\n    <Suspense\n      fallback={\n        <div\n          style={{\n            position: 'relative',\n            height: 200,\n          }}\n        ></div>\n      }\n    >\n      <PricingLazy />\n    </Suspense>\n  )\n}\n","import React from 'react'\nimport { SignupLayout } from '@features/signup/SignupLayout'\nimport { Content } from '@features/signup/SignupContent/Content'\nimport { SignUpForm } from '@features/signup/SignupForm'\nimport { useTranslation } from 'react-i18next'\nimport signupGenericImage from '@assets/images/signup-generic.svg'\n\nexport const SignUp: React.FC = () => {\n  const { t } = useTranslation()\n\n  return (\n    <>\n      <SignupLayout\n        hideLeftOnMobile\n        leftSlot={\n          <Content\n            section={<img src={signupGenericImage} />}\n            headerText={t('auth.signup.headline')}\n            subText={t('auth.signup.subHeadline')}\n          />\n        }\n        rightSlot={\n          <SignUpForm\n            title={t('auth.signup.formTitle')}\n            showGoogleButton\n            showFacebookButton\n          />\n        }\n      />\n    </>\n  )\n}\n","import React from 'react'\nimport { SignupLayout } from '@features/signup/SignupLayout'\nimport { Content } from '@features/signup/SignupContent/Content'\nimport { SignUpForm } from '@features/signup/SignupForm'\nimport { useTranslation } from 'react-i18next'\nimport signupGenericImage from '@assets/images/signup-generic.svg'\nimport lbLogo from '@assets/images/logo_lb_extended.svg'\nimport heartImg from '@assets/images/heart.svg'\nimport appSumoLogo from '@assets/images/appsumo-logo.svg'\n\nconst appSumoHeader = (\n  <>\n    <img src={lbLogo} width={140} alt={'LeadsBridge'} />\n    <img src={heartImg} style={{ margin: '0 .5rem' }} alt={'heart'} />\n    <img src={appSumoLogo} alt={'appSumo'} width={100} height={16} />\n  </>\n)\n\nexport const SignUpAppSumo: React.FC = () => {\n  const { t } = useTranslation()\n\n  return (\n    <>\n      <SignupLayout\n        hideLeftOnMobile\n        leftSlot={\n          <Content\n            section={<img src={signupGenericImage} />}\n            headerText={t('auth.signup.headline')}\n            subText={t('auth.signup.subHeadline')}\n          />\n        }\n        rightSlot={\n          <SignUpForm\n            title={t('auth.signup.formTitleAppSumo')}\n            isAppSumo\n            showIndustries\n            showCoupon\n            header={appSumoHeader}\n          />\n        }\n      />\n    </>\n  )\n}\n","import React from 'react'\nimport {\n  ContainerStyled,\n  ImgBoxStyled,\n  ImgWrapperStyled,\n  HeaderTextStyled,\n  IconWrapperStyled,\n} from './styled'\nimport noDataPng from '@assets/images/no-data.png'\nimport { Loader } from '@components/Basic/Loader'\nimport { AiOutlinePlusCircle } from 'react-icons/ai'\n\ninterface ImgSquareProps {\n  logoUri?: string\n  name?: string\n  isLoading?: boolean\n}\n\nconst ImgSquare = ({ logoUri, name, isLoading }: ImgSquareProps) => (\n  <ImgBoxStyled>\n    {isLoading ? (\n      <Loader $active />\n    ) : (\n      <>\n        <img src={logoUri || noDataPng} alt={name} />\n        {name && <p>{name}</p>}\n      </>\n    )}\n  </ImgBoxStyled>\n)\n\ninterface BbuContentProps {\n  sourceLogoUri?: string\n  sourceName?: string\n  destinationLogoUri?: string\n  destinationName?: string\n  headline?: string\n}\nexport const BbuContent: React.FC<BbuContentProps> = ({\n  sourceLogoUri,\n  sourceName,\n  destinationLogoUri,\n  destinationName,\n  headline,\n}) => {\n  return (\n    <ContainerStyled>\n      <ImgWrapperStyled>\n        <ImgSquare logoUri={sourceLogoUri} name={sourceName} />\n        <IconWrapperStyled>\n          <span />\n          <AiOutlinePlusCircle style={{ margin: '0' }} color='white' />\n          <span />\n        </IconWrapperStyled>\n        <ImgBoxStyled>\n          <ImgSquare logoUri={destinationLogoUri} name={destinationName} />\n        </ImgBoxStyled>\n      </ImgWrapperStyled>\n      {headline ? (\n        <HeaderTextStyled>\n          {headline ||\n            `Use LeadsBridge to connect ${sourceName} with ${destinationName}`}\n        </HeaderTextStyled>\n      ) : null}\n    </ContainerStyled>\n  )\n}\n","import React from 'react'\nimport { SignupLayout } from '@features/signup/SignupLayout'\nimport { Content } from '@features/signup/SignupContent/Content'\nimport { SignUpForm } from '@features/signup/SignupForm'\nimport { BbuContent } from '@features/signup/BbuContent'\nimport { useTranslation } from 'react-i18next'\nimport { BbuRouteParams } from 'LeadsBridgeApp'\nimport { useParams } from 'react-router-dom'\nimport { useFetchIntegrationsMetaForBridgeByUrl } from '@app/api/integrationTools'\nimport { Loader } from '@components/Basic/Loader'\nimport signupGenericImage from '@assets/images/signup-generic.svg'\n\n// example url for testing:\n// http://localhost:3000/bc/lb/facebook-lead-ads/google-sheets\nexport const SignUpBbu: React.FC = () => {\n  const { t } = useTranslation()\n  const { source, destination }: BbuRouteParams = useParams()\n\n  const { isLoading, data: bbuAppsInfo } =\n    useFetchIntegrationsMetaForBridgeByUrl(source, destination)\n\n  // prepare content in case of bbu\n  const sourceName = bbuAppsInfo?.source?.name\n  const sourceLogoUri = bbuAppsInfo?.source.logoSmallUri\n  const destinationName = bbuAppsInfo?.destination?.name\n  const destinationLogoUri = bbuAppsInfo?.destination.logoSmallUri\n  const headline = bbuAppsInfo?.meta?.headline\n  const isValidBbuUri = Boolean(sourceName && destinationName)\n\n  return (\n    <>\n      <SignupLayout\n        leftSlot={\n          <Content\n            section={\n              isLoading ? (\n                <div style={{ position: 'relative' }}>\n                  <Loader $active $inverted />\n                </div>\n              ) : isValidBbuUri ? (\n                <BbuContent\n                  sourceName={sourceName}\n                  sourceLogoUri={sourceLogoUri}\n                  destinationLogoUri={destinationLogoUri}\n                  destinationName={destinationName}\n                  headline={headline}\n                />\n              ) : (\n                // if is not a valid bbuUri, we display the default signup content as fallback\n                <Content\n                  section={<img src={signupGenericImage} />}\n                  headerText={t('auth.signup.headline')}\n                  subText={t('auth.signup.subHeadline')}\n                />\n              )\n            }\n          />\n        }\n        rightSlot={\n          <SignUpForm\n            title={t('auth.signup.formTitle')}\n            showGoogleButton\n            showFacebookButton\n          />\n        }\n      />\n    </>\n  )\n}\n","import React, { Suspense } from 'react'\nimport { Loader } from '@components/Basic/Loader'\n\nconst ComponentLazy = React.lazy(\n  () => import('./SignupBbuFallbackSurveyComponent')\n)\n\nexport const SignupBbuFallbackSurvey = () => {\n  return (\n    <Suspense\n      fallback={\n        <div\n          style={{\n            position: 'relative',\n            height: 200,\n          }}\n        >\n          <Loader $active $dimmer $size={'large'} />\n        </div>\n      }\n    >\n      <ComponentLazy />\n    </Suspense>\n  )\n}\n","import React from 'react'\nimport { SimplePage } from '@app/layouts/SimplePage'\nimport styled from 'styled-components'\nimport superHeroImg from '@assets/images/superhero.svg'\nimport { Button } from '@components/Basic/ButtonNbe'\nimport { useHistory, useLocation } from 'react-router-dom'\nimport { useSelector } from 'react-redux'\nimport { RootState } from '@app/index'\nimport { resetPath } from '@app/store/actions/ApplicationConfigurationActions'\nimport { useAppDispatch } from '@app/store/hooks'\n\nexport const WrapperStyled = styled.div`\n  height: 100%;\n  margin: 12rem auto;\n  text-align: center;\n\n  h2 {\n    font-size: 1.5rem;\n    font-weight: 700;\n    color: #273649;\n  }\n\n  img {\n    margin: 2rem 0;\n    width: 16rem;\n  }\n\n  p {\n    font-size: 0.875rem;\n    font-weight: 700;\n    margin: 0;\n  }\n\n  button {\n    margin-top: 2rem;\n    width: 15rem;\n  }\n`\n\nexport type ThankYouPageState = {\n  title: string\n  description: string[]\n  ctaText: string\n}\n\nexport const ThankYouPage: React.FC = () => {\n  const history = useHistory()\n  const dispatch = useAppDispatch()\n  const { state } = useLocation<ThankYouPageState>()\n  const prevPath: string | null = useSelector(\n    (state: RootState) => state.application.path\n  )\n\n  // we set some defaults in case state is missing\n  const title = state?.title || 'Thank you'\n  const description = state?.description || ['Your request has been processed.']\n  const ctaText = state?.ctaText || 'Continue'\n\n  return (\n    <SimplePage>\n      <WrapperStyled>\n        <h2>{title}</h2>\n        <img src={superHeroImg} alt={'super hero'} />\n        {description.map((row, idx) => (\n          <p key={idx}>{row}</p>\n        ))}\n        <Button\n          $size={'large'}\n          $variant={'action'}\n          onClick={() => {\n            if (prevPath) {\n              history.push(prevPath)\n              dispatch(resetPath())\n            } else {\n              window.location.href = process.env.REACT_APP_V1_URL! || ''\n            }\n          }}\n        >\n          {ctaText}\n        </Button>\n      </WrapperStyled>\n    </SimplePage>\n  )\n}\n","import { combineReducers } from 'redux'\nimport { ApplicationConfigurationReducer } from './reducers/ApplicationConfigurationReducer'\nimport { FbAppStoreReducer } from './reducers/FbAppStoreReducer'\nimport { UserReducer } from './reducers/UserReducer'\nimport { configureStore } from '@reduxjs/toolkit'\nimport { IntegrationListenerReducer } from './reducers/IntegrationListenerReducer'\n\nconst rootReducer = combineReducers({\n  application: ApplicationConfigurationReducer,\n  appStore: FbAppStoreReducer,\n  user: UserReducer,\n  integrationListener: IntegrationListenerReducer,\n})\n\nconst store = configureStore({\n  reducer: rootReducer,\n  devTools: process.env.NODE_ENV !== 'production',\n  middleware: (getDefaultMiddleware) =>\n    getDefaultMiddleware({\n      serializableCheck: {\n        // Ignore these field paths to handle buttons ReactNode in Alert component\n        ignoredActionPaths: ['payload.buttons'],\n        ignoredPaths: ['application.alert'],\n      },\n    }),\n})\n\nexport default store\n"],"names":["Button","$variant","children","props","icon","style","marginLeft","disabled","$size","$hasIcon","$loading","$loadingText","$minWidth","hasMinWidth","Boolean","Container","theme","container","large","medium","$marginY","FakeInput","required","text","tooltipProps","place","type","effect","border","borderColor","className","FiltersIcons","handleCopy","handleAdd","handleDelete","isDeleteDisabled","isAddDisabled","isCopyDisabled","isBridgeDisabled","t","id","onClick","size","InputText","variant","input","success","error","default","InputFeedback","$status","Loader","$text","$dimmer","Message","$header","customStyles","content","top","left","right","bottom","margin","width","borderRadius","boxShadow","marginRight","transform","backgroundColor","overlay","zIndex","noPaddingStyles","undefined","minWidth","height","maxHeight","maxWidth","padding","overflow","secondaryCustomStyles","minimizeCustomStyles","expandCustomStyles","position","ResizeWrapper","IconsWrapper","CloseIcon","isTransparent","noPadding","Modal","isOpen","onCloseModal","hideCloseButton","isResizable","isWide","isExpand","setIsExpand","useState","windowWidth","setWindowWidth","window","innerWidth","useEffect","handleResize","addEventListener","removeEventListener","wideCustomStyles","onRequestClose","preventScroll","StateIcon","state","iconSize","icons","color","empty","RefreshButton","font","family","link","TinyTextualButton","rest","ButtonProvider","provider","scope","onBeforeAuth","onAuthSuccess","onAuthError","dataWidth","signupParams","getCaptchaToken","location","matchBBuPath","pathname","path","exact","strict","bbuUri","isExact","origin","isGoogleButtonCustomLoaded","setIsGoogleButtonCustomLoaded","googleButtonToUseForSignup","setGoogleButtonToUseForSignup","sdkFailedToLoad","setSdkFailedToLoad","canUpdateState","useRef","current","handleSdkLoadError","handleExternalProviderAuth","oauthToken","recaptchaToken","tapExistingCookieData","authResponse","referralUri","document","referrer","tapClickId","tapVisitorId","catch","parsedError","message","code","eventName","feature","step","params","custom","errorCode","errorDescription","planId","cbPlan","sendEventToIntercom","userInfo","data","userCredentials","credentials","username","idToken","accessToken","refreshToken","then","r","onTokenRetrived","onSdkLoadError","opacity","onGoogleLegacySdkInitSuccess","onGoogleLegacySdkInitError","providerRender","ConnectedPopupWindow","urlToOpen","widthPx","heightPx","onPopupOpen","onPopupClose","initialData","popupName","popup","isClosedRef","intervalId","dataFromPopup","features","open","currentPopup","focus","close","setInterval","closed","clearInterval","Dropdown","$direction","dropdownButton","$lineSeparatorMenuItem","setIsOpen","closeDropdownHandler","clickAwayRef","ref","p","Checkbox","value","checked","onChange","name","inputProps","InputDomain","$protocolLabel","$domainLabel","InputField","label","slotLeft","slotRight","$hasMargin","defaultLabel","floatingLabel","fieldIsUnavailable","inputRefCallback","inputId","isFocused","setIsFocused","hasValue","setHasValue","inputRef","htmlFor","isFloating","toUpperCase","onFocus","event","onBlur","paddingTop","paddingBottom","marginTop","InputSelect","$label","$options","$optionsLabel","selectId","map","option","key","InputSmartSelect","initialValues","isClearable","onSelect","placeholder","defaultValue","isSearchable","noOptionsMessageText","addNewOptionButton","onInputChange","hasCustomSearch","isLoading","loadOptions","isMulti","isDisabled","menuIsOpen","noIcon","tooltipMessage","addActionClick","extraLabel","secondaryStyles","emailValidation","keyDown","isVerified","isFormulas","upDownIconsStyle","largeUpDownIconsStyle","dataTestId","wrapperEl","selectedSingleValueEl","isLabelTooLong","extraProps","tooltipInternalLabel","tooltipExternalMessage","noDropdownIndicator","DropdownIndicator","IndicatorSeparator","components","Option","SingleValue","Control","Menu","MenuList","ValueContainer","IndicatorsContainer","styles","defaultOptions","selectedValue","options","noOptionsMessage","newValue","filterOption","onKeyDown","InputToggle","$isChecked","$labelLeft","$labelRight","$isDisabled","Label","$disabled","allowsHtml","labelId","L","dangerouslySetInnerHTML","__html","LabelWrapper","DocUrl","LabelWithDocTooltip","docUrl","isRequired","tooltip","href","target","rel","MultiCreatableCustom","mappedField","fieldIndex","onMappingChange","onFormulaSelect","onRedirectToPricing","sourceOptions","picklistOptions","userHasFormulaEnabled","formulaSchema","sourceLogoUri","isCreatable","excludeSelected","selectedOptions","setSelectedOptions","setMenuIsOpen","hasPicklist","picklist","length","defaultActiveTab","hasFormula","activeTab","setActiveTab","filteredSourceOptions","filter","some","selected","defaultValues","mapping","optionsDisabled","sourceLogoComponent","src","alt","handleMappingChange","newOptions","selectedOption","newMapping","mappingType","fieldType","newMappingWithFormula","sourceFieldId","formula","find","m","isNew","isNewFormula","handleTabChange","tabName","SelectComponent","selectRef","MultiValue","MultiValueRemove","e","availableTabs","unshift","currentTabIndex","indexOf","preventDefault","inputValue","slice","openMenuOnClick","onMenuOpen","onMenuClose","hideSelectedOptions","isOptionSelected","isOptionDisabled","isValidNewOption","trim","actionMeta","action","updatedOption","newOption","isFormula","Textarea","forwardRef","displayName","FormikInputSmartSelect","field","meta","helpers","errorMessage","touched","item","setTouched","currentValue","setValue","InputAutoSelectCopy","linkKey","isCopied","setIsCopied","handleCopyLink","select","execCommand","readOnly","PanelPopup","image","onClose","dismissable","useTranslation","isVisible","setIsVisible","timeoutId","setTimeout","clearTimeout","PanelPopupContext","createContext","Panel","head","body","footer","progressBarPercentage","setPopup","bodyPaddingBottom","setBodyPaddingBottom","bodyOuterRef","bodyInnerRef","footerRef","bodyOuterHeight","clientHeight","bodyInnerHeight","footerHasTopSeparator","Provider","sendPopup","extraPadding","ProgressBar","percentage","googleReCaptchaKey","ReCaptcha","getElementById","script","createElement","appendChild","googleScript","querySelector","remove","w","grecaptcha","execute","Translate","i18nKey","values","count","b","strong","a","br","SignupSurvey","bbuData","onSubmit","steps","title","validationSchema","formikHelpers","Fragment","activeStep","hasTopBar","InfoBarComponentLazy","lazy","SuperUserInfoBarWithQuery","userData","user","superUser","email","Suspense","fallback","fullName","firstName","lastName","SuperUserInfoBar","BillingDetails","billingInfo","onEditRequest","companyName","country","zip","phone","displayInfo","address","join","BillingBox","initialFormValues","onValuesChange","isDataEmpty","onStripeSubmit","isAddingNewInfo","setIsAddingNewInfo","countryCode","setCountryCode","noCompany","setNoCompany","validation","setValidation","countries","states","refetch","refetchStates","validateOnChange","validateOnBlur","formikProps","isCountryStates","SyncValuesWithParent","newValues","isValid","setFieldValue","handleValues","FormikInputCheckbox","FormikInputField","twoColumns","FormikInputSelect","Wrapper","hasPadding","CardInfo","CardBoxASideWrapper","CardBoxASideImageWrapper","BoxWrapperWithSideImage","showSecurePaymentLogo","ButtonWrapper","CreditCardBox","isAddingNewCard","setIsAddingNewCard","dispatch","isLoadingUser","refetchUserInfo","userBillingInfo","pricing","cards","creditCard","creditCardOwner","number","expiration","creditCardExpiration","card","mutate","storeCreditCardMutation","errorStoreCreditCard","storeLoadingStateCreditCard","onCreditCardTokenRetrieved","creditCardToken","onSuccess","onCancelRequest","idx","onEditCardRequest","CheckoutFooter","billingCircle","nextBillingDate","amountToPay","buttonLabel","isTrialAvailable","nextInvoiceAmount","isProrated","CheckoutTitleWrapper","isClickable","TitleStyled","CheckoutTitle","AccountActivate","billingData","handlePollingState","history","customerId","localStorage","getItem","push","topbarValue","backlink","url","AccountConnect","AccountCreationDone","AccountCreationFormInner","currenciesData","isLoadingCurrencies","timezonesData","isLoadingTimezones","AccountCreationForm","isSavingApi","enableReinitialize","validateOnMount","PageEditor","IntegrationPanel","integrationLogo","isTosAccepted","panelTitle","panelDescription","btnPrimaryLabel","btnPrimaryLink","isbtnPrimaryAccordion","btnLinkLabel","btnLinkUrl","accordionButtonLabel","accordionButtonUrl","closeTooltipText","handleAction","testIdPrimaryButton","testIdLinkButton","testIdPolicyButton","accordionCheckboxLabel","setOpen","textAlign","cursor","status","BridgeChooserForm","isEmbedded","setInitialData","validate","formikContext","pageTitle","isSubmitting","BridgeChooserRedirector","urlParams","sourceAppId","parseInt","destinationAppId","appCompatibilityCheck","isCheckingAppsCompatibility","obeUri","combination","nbeeUri","compatibility","to","EmailReceipt","bridgeId","emailReceiptUserModule","setValues","errors","isBridgeEnabled","ui","TitleWrapper","IconLockWrapper","moduleReceiptId","userEmail","isAvailableToUser","enabled","minimumPlanRequired","minimumPlan","updateBridgeToPricing","planLabelName","toString","settings","emailReceiptRecipients","emailReceipt","recipients","userDefaultRecipients","userDefaults","active","subject","canShow","isEmailReceiptCompatible","Object","keys","small","handleSubmit","emailReceiptValues","requiredLbPlanId","Text","Image","FieldMappingEmptyState","onResetFilterRequest","isFiltered","flattenErrors","errorObject","entries","reduce","messages","subErrors","FormulaModal","selectedMapping","sourceFieldOptions","index","mappingId","formulaId","modalTitle","fieldName","currentFieldValue","currentFieldMappingWithFormula","currentFieldFormula","currentFieldFormulaParams","formulaTemporaryState","setFormulaTemporaryState","isSubmitButtonDisabled","setIsSubmitButtonDisabled","singleFormulaSchema","isGettingSingleFormulaSchema","formulaName","category","formulaDescription","getParamDescription","paramId","singleFormulaSchemaParams","handleValueChange","updatedFormula","paramIndex","findIndex","getOptionsForSelectDropdown","selectedParam","Array","isArray","v","getDefaultValueForSelect","dropdownOptions","getDefaultValueForCreatableSelect","handleAbort","mappingIndex","newMappings","i","param","toLowerCase","replace","_","num","Number","char","display","wordWrap","maxLength","updatedMapping","HeaderSearch","totalFields","mappedFields","showAllFields","onShowAllFieldsRequest","isReloadingAllBridgeFields","onRefetchBridgeFieldRequest","isInTestScreen","maxFields","welcomeMessageProps","connectedApps","sourceApp","app","destinationApp","defaultTransparentPixel","sourceName","logoUriSmall","destinationName","destinationLogoUri","fieldsMappingValues","fieldsMapping","allAreMapped","every","allAreUnmapped","showFilterButton","HeaderSearchComponent","H","onRefetchFieldRequest","isReadonlyModeEnabled","emptyFilterRule","operator","AddFilterButtonModal","sourceFields","initialFilterRules","onSaveOrDeleteFilterRules","filterUserModules","bridgeType","filtersSchema","isGettingFiltersSchema","allInputsEmpty","setAllInputsEmpty","saveBridgeFilterRules","isSavingBridgeFilterRules","saveBridgeFilterRulesResult","deleteBridgeFilterRules","isDeletingBridgeFilterRules","deleteBridgeFilterRulesResult","deleteBridgeFilterRulesStatus","userHasFiltersEnabled","filterRules","setFilterRules","handleAddFilterRule","newIndex","Math","min","newFilterRules","splice","handleRemoveFilterRule","handleCopyFilterRule","handleFieldChange","selectedField","f","selectedFieldType","prevRules","newRules","handleOperatorChange","getDefaultSelectOption","fieldId","getOperatorsForSelect","schemaEntry","entry","rules","getInputTypeForCondition","rule","operatorRule","sourceFilters","conditions","Trans","ns","filterRule","fields","FilterRuleRow","isDefaultValueNotInSourceAnymore","el","fieldSelectDefaultValue","fieldSelectInitialValues","onFieldChange","operatorSelectDefaultValue","operatorSelectInitialValues","onOperatorChange","inputValueType","onValueChange","onCopyFilterRule","onAddFilterRule","onRemoveFilterRule","isRemoveFilterRuleDisabled","gap","requestBody","handleSubmitSaveFilters","AddFilterButton","allSourceFields","setRules","isModalOpen","toggleIsModalOpen","minimumPlanName","hasFilters","firstRule","firstRuleField","firstRuleCondition","firstRuleValue","otherRulesNumber","hasMoreThanOneRule","hasTwoRules","fontSize","paddingLeft","SendTestLeadFeedback","onBackToEditRequest","onProceedRequest","debugUri","REACT_APP_SUPPORT_URL","SendTestLeadSubForm","fieldsToRender","fieldMappingTestingFieldName","oldField","TestConnectionView","fieldMappingTesting","fieldsToTestResponse","errorGettingFieldsToTest","isLoadingFieldsToTest","isRefetching","isRefetchingFieldsToTest","isLoadingAll","apiError","sourceFieldsToTest","WelcomeMessageForm","bridgeFields","dropdownWrapperRef","textAreaRef","charToOpen","allAvailableCoupons","setAllAvailableCoupons","subjectField","metaSubject","helpersSubject","bodyField","metaBody","bodyHelpers","isCouponActive","couponActiveHelpers","couponsField","couponsHelpers","templateBasedFieldsMapping","subjectError","bodyError","subjectErrorStatus","bodyErrorStatus","coupons","inputSelectPosition","setInputSelectPosition","x","y","showDropdown","setShowDropdown","highlightedIndex","setHighlightedIndex","inputElement","setInputElement","lastFocusedField","setLastFocusedField","isFirstRender","setIsFirstRender","dropdownHeight","setDropdownHeight","textInsideBrackets","setTextInsideBrackets","filteredData","setFilteredData","source","templateFields","isSmsMessage","couponValue","Set","filtered","startsWith","newData","fieldRef","cursorPosition","selectionEnd","indexOfLastOpenBracket","lastIndexOf","newPosition","handleScroll","checkForChar","element","isClosingBracketDeleted","selectionStart","indexOfLastOpenBracketBeforeCursor","substring","handleFieldFocus","handleOnSelect","fieldToUpdate","helpersToUpdate","currentText","newText","newCursorPosition","setSelectionRange","handleInputChange","handleKeyDown","selectedItem","scrollIntoView","behavior","block","resize","outline","contains","items","alignItems","marginBottom","JSON","stringify","onPaste","newCoupons","clipboardData","getData","split","coupon","updatedCoupons","prev","FieldsMappingForm","allBridgeFields","bridgeFilterRulesList","onRefetchBridgeFormValues","availablePermissionChecks","showWelcomeMessage","testEnabled","userModulesResponse","isLoadingUserModules","appId","screenState","setScreenState","setShowAllFields","filterText","setFilterText","testLeadDebugUri","setTestLeadDebugUri","testLeadDebugError","setTestLeadDebugError","destinationFields","destination","isAPILoading","userModules","modules","formulaUserModules","fieldMappingModules","maxFieldsToMap","maxFieldsMapping","isSmsForm","isWelcomeMessageForm","isInFieldMappingForm","isInTestFieldMapping","isInTestFeedback","totalFieldsToMap","totalFieldsMapped","isTestLeadEnabled","infoBar","StatusBarBridge","manualStatus","onTopbarValueChange","newBridgeName","submitForm","FormInner","formulaUserModule","ButtonTestBeforeProceeding","isDisabledFromParent","isSavingFromParent","ButtonSendTestLead","onSendTestLead","IncomingDataFinalStep","onSave","integrationName","onEditIntegrationName","onCancel","isUpdatingIntegration","appName","showedName","textDecoration","IncomingDataInitialStep","appLogoUri","onContinueRequest","integrationListener","listenerType","slug","showName","handleErrorsUpdate","IncomingDataTable","fontWeight","lastValue","LoadingStep","integrationId","setStep","prevState","loadingText","loadingTextTranslation","IncomingDataTableStep","isRecognizingFields","onContinue","isHeaderStuck","onReload","isConfirmingReload","activeBridges","totalBridges","resetConfirmingReload","tableRef","isStuck","setIsStuck","selectAll","setSelectAll","warningRef","isLastStepOfWarning","scrollTo","scrollHeight","justifyContent","newSelectAllState","updatedFields","recognizedFields","selectAllStatus","AppAuthCredentialForm","isOauthUri","skipParams","isNotValidIntegrationErrorMessage","setShowName","submitAction","setSubmitAction","hasError","setHasError","integrationUsage","generateRedirectUri","isIntegrationUsed","oauth","setSubmitting","redirectUri","isLegacy","onError","flex","InfoSection","SubmitButton","isStepName","onSubmitRequest","IntegrationCredentialsContent","Header","Disclaimer","Body","Logo","Title","SubTitle","isFinalStepFromOauthFlow","embeddablePercentage","activeStepIndex","ModalTrialInfo","showSurpriseMessage","planName","NbeeError","statusCode","getDefaultSize","Skeleton","forElement","defaultSizes","computedSizes","getSpecificSize","IntegrationSelector","parentAppId","isTesting","onTestIntegrationRequest","currentId","setCurrentId","refetchIntegrationsByAppId","u","selectedIdState","application","integrationIdField","integrationIdMeta","integrationIdHelpers","selectedIntegrationId","refetchSettings","useTriggerSettingsUpdate","allApps","mutateAsync","saveIntegrationAsync","isSavingIntegration","selectedApp","selectedAppLogoUri","selectedAppAuthType","authType","selectedAppId","o","logoUri","popupDestinationUrl","setPopupDestinationUrl","popupInstace","setPopupInstace","popupIsOpen","integrationDataFromPopup","setIntegrationDataFromPopup","onConnectNewAccountRequest","integrationIdToEdit","newIntegrationId","newIntegrationResponse","integration","popupUrl","isTouched","hasIntegrationApiError","isLoadingApi","authData","setAuthData","Auth","authData_","signInUserSession","jwtToken","token","isIframe","self","gridTemplateColumns","pointerEvents","span","newIntegrationName","IntegrationSettings","isValidIntegration","templateSettings","skipRequestNewSettingsToApi","firstRun","setFirstRun","setFieldTouched","validateForm","settingFieldName","currentSettingsValues","integrationSettingsResponse","retrieveIntegrationSettings","isLoadingIntegrationSettings","retrieveIntegrationSettingsApiError","setFieldsToRender","showPopupError","clearPopupError","usePopupError","showLogo","newSettingsReceived","schemaSettings","newSettingsWithDefaults","integrationSettingsData","setting","refresh","triggerSettingsUpdate","canShowTitle","requiredFields","format","hide","SettingFieldSmartCreatableSelect","fieldSchema","GooglePicker","apiHasError","SettingFieldSmartSelect","SettingFieldInput","SettingFieldToggle","AppConfigurator","canShowIntegrationField","isValidIntegrationResponse","isValidIntegrationApiError","isCheckingValidIntegration","isReCheckingValidIntegration","reCheckValidIntegration","isTestingIntegrationCredentials","result","setIntegrationId","popupErrorFake","response","localTemplateSettings","setLocalTemplateSettings","settingsAreFilled","bothAppsAreSelected","isInteger","appHasSetting","AppSelector","appNotFound","setAppNotFound","step1MatchRoute","isInStep1","inputName","appIdField","appIdMeta","appIdHelpers","isLoadingApps","mostPopular","isLoadingMostPopular","limit","isLoadingConnectedApps","mostPopularAppsOptions","allAppsOptions","useMemo","connectedAppsOptions","selectedAppName","fuzzySearch","isCaseSensitive","shouldSort","findAllMatches","includeMatches","includeScore","threshold","distance","ignoreLocation","sortFn","score","renderKey","Promise","resolve","flattenResults","search","searchAppName","SimpleBridgeBuilderForm","validationErrors","isEmailReceiptValid","sourceHasApiError","hasSettingsApiError","destinationHasApiError","cannotSubmit","topbarError","StatusBar","allowManualClosing","disableBridge","isDisablingBridge","disableBridgeApiError","disableBridgeResponse","newStatus","StepCompleted","bridgeName","isTestEnabledProp","performanceBoosterAvailable","existingPerformanceBoosterAvailable","errorPerformanceBooster","handleCreatePerformanceBoosterAndRedirect","existingPbId","queryClient","useQueryClient","bridgeIdProp","IsTestEnableProp","alignSelf","invalidateQueries","ModalChangePlan","hasSwitched","setHasSwitched","showConfirm","setShowConfirm","userDataRefetch","isUserDataRefetching","endOfTermsDate","Date","getTime","dateNow","remainDays","changePlanMutation","isChangingPlan","trial","previousPlanId","cbPlanId","newPlanId","previousMrr","mrr","newMrr","changePlan","ModalUpdatedPlan","PlanInfoBanner","plan","optionsMtu","optionsBridge","isCurrentPlan","onPlanSelect","isBusiness","price","serviceType","description","flexDirection","mainFeatures","clickable","html","planNameToShow","freemium","starter","pro","business","getPlanNameToShow","PricingCard","planDescription","priceDescription","isActive","isRecommended","isYearlyChecked","yearlyDiscountPercentage","onUndoSelect","deleteAtDate","showUndoPro","undoMessage","toLocaleLowerCase","SignUpForm","showGoogleButton","showFacebookButton","isAppSumo","showIndustries","showCoupon","header","testId","setIsLoading","getIndustries","matchPartnerPath","couponCode","currentPlan","updatedAppSumoFormValues","bbuSourceSlug","bbuDestinationSlug","bbuAppsInfo","isValidBbuUrl","affiliateData","setAffiliateData","existingCookieData","always_callback","referral_code","args","argId","vid","argVid","signupWithEmail","isDoingSingup","signupWithEmailApiError","signupReponse","newUserId","userId","channel","sourceId","destinationId","showGenericError","signupProviders","show","trialDays","industry","SingupLayoutWrapper","SignupLayoutStyled","extralarge","ContainerStyled","$hideOnMobile","SignupLayout","leftSlot","rightSlot","hideLeftOnMobile","ToastStyled","overallNotifications","visible","setVisible","toast","Transition","animation","duration","compact","onDismiss","REACT_USE_MOCK_API","QueryClient","queries","retry","staleTime","Infinity","refetchOnWindowFocus","S","dsn","integrations","tracesSampleRate","replaysOnErrorSampleRate","replaysSessionSampleRate","environment","release","denyUrls","ignoreErrors","allowUrls","QueryClientProvider","client","ReactQueryDevtools","initialIsOpen","store","ErrorPage","App","alert","timerId","dismissableTimer","isDismissable","transValue","buttons","hasProgressBar","AlertProgressBar","timer","EditableText","onNameChange","hasEditModeEnabled","setHasEditModeEnabled","isEditable","Topbar","hideOnEmbeddable","StepBar","StepBarItem","subLabel","onStepClick","zE","userAuthState","auth","shouldFetchUserModule","setShouldFetchUserModule","showSupportButton","setShowSupportButton","supportUserModule","customerSupportId","supportIsAvailable","testEnable","textColor","SimplePageWrapper","CardWrapper","SimplePage","TokenOutput","Spacer","TestFacebookToken","setToken","setInputValue","scopes","setScopes","currentTarget","customFbAppScopes","validateTokenWithApi","ComponentLazy","AdminPages","$progress","$theme","FastAppSurvey","integrationsData","onSubmitSuccess","logo","Form","BridgeByUrlCallback","isMountedInLoggedRoute","partnerFullName","persistentBbuData","parse","sessionStorage","authLbCode","lb_code","progressStep","setProgressStep","setLoadingText","hasJustCompletedSurvey","setHasJustCompletedSurvey","genericApiError","setGenericApiError","validPersistentBbuData","errorMissingStartingData","userStatus","useGenericBbuAuth","authCode","requestUri","persistentUserStatus","surveyNeeded","handleFinalStep","removeItem","bbuUrl","URL","apiAuthClient","includes","reload","CheckoutLazy","CheckoutPage","GoogleAdsAccountRouter","IncomingDataRouter","component","IntegrationRouter","qs","isInIframe","preventRedirect","postMessage","hasV1LoggedOut","iframe","logoutFromCognitoAndRedirectUser","messageReceiverFn","encodedStringAtoB","atob","JSONParsed","alertTitle","alertMessage","alertColor","NbeeRouter","PricingLazy","PricingPage","SignUp","section","headerText","subText","appSumoHeader","SignUpAppSumo","ImgSquare","BbuContent","headline","SignUpBbu","logoSmallUri","isValidBbuUri","Content","SignupBbuFallbackSurvey","WrapperStyled","ThankYouPage","prevPath","ctaText","row","rootReducer","appStore","reducer","devTools","middleware","getDefaultMiddleware","serializableCheck","ignoredActionPaths","ignoredPaths"],"sourceRoot":""}