{"version":3,"file":"static/js/17.be7b7e720914579b4d97.chunk.js","mappings":";uQAkBA,MAMA,EAN8CA,IAAA,IAAC,GAAEC,EAAE,UAAEC,EAAS,KAAEC,EAAI,UAAEC,EAAS,SAAEC,EAAQ,QAAEC,GAASN,EAAA,OAChGO,EAAAA,cAACC,EAAAA,OAAM,CAACP,GAAIA,EAAIC,UAAWA,EAAS,aAAcE,EAAWC,SAAUA,EAAUC,QAASA,GACrFH,ICMT,EAViDH,IAA8C,IAA7C,GAAEC,EAAE,UAAEC,EAAS,KAAEO,EAAO,OAAM,QAAEC,GAASV,EACvF,MAAMW,EAAiB,GAAGT,MAAcO,UAExC,OACIF,EAAAA,cAAA,OAAKN,GAAIA,EAAIC,UAAWU,GAAAA,CAAWD,EAAgB,QAAS,GAAGF,UAAcI,KAAK,QAAO,YAAW,YAAW,cAAa,QACxHN,EAAAA,cAAA,KAAGL,UAAW,GAAGS,UAAwBD,WCSrD,MAAMI,EAAgBC,IAClB,GAAIA,EAAW,CACX,MAAMC,EAAkBC,OAAOC,SAASH,EAAW,IACnD,IAAKI,MAAMH,GACP,OAAOA,IAqBnB,EAdiDhB,IAAA,IAAC,GAAEC,EAAE,KAAEQ,EAAI,MAAEW,EAAK,QAAEC,EAAO,UAAEnB,EAAS,UAAEa,EAAS,SAAEO,EAAQ,SAAEC,GAAUvB,EAAA,OACpHO,EAAAA,cAAA,SACIN,GAAIA,EACJQ,KAAMA,EACNW,MAAOA,EACPlB,UAAW,GAAGA,WAAmBA,KAAaD,IAC9CoB,QAAqB,KAAZA,EAAiBA,OAAUG,EAAS,gBAC/B,OACdT,UAAWD,EAAaC,GACxBO,SAAUA,EACVC,SAAUA,KC9BlB,EAN4CvB,IAAA,IAAC,GAAEC,EAAE,MAAEwB,EAAK,UAAEvB,EAAS,KAAEC,GAAMH,EAAA,OACvEO,EAAAA,cAAA,SAAON,GAAI,GAAGA,UAAYC,UAAW,GAAGA,UAAmBwB,QAASD,GAC/DtB,ICHT,EAFwDH,IAAA,IAAC,UAAEE,GAAWF,EAAA,OAAKO,EAAAA,cAAA,OAAKL,UAAW,GAAGA,qBCK9F,EAJ8DF,IAAA,IAAC,UAAEE,EAAS,QAAEQ,GAASV,EAAA,OACjFO,EAAAA,cAAA,OAAKL,UAAW,GAAGA,sBAA+BQ,ICYtD,EAVgDV,IAA8C,IAA7C,GAAEC,EAAE,UAAEC,EAAS,KAAEO,EAAO,OAAM,QAAEC,GAASV,EACtF,MAAM2B,EAAmB,GAAGzB,MAAcO,YAE1C,OACIF,EAAAA,cAAA,QAAMN,GAAIA,EAAIC,UAAWU,GAAAA,CAAWe,EAAkB,GAAGlB,UAAcI,KAAK,QAAO,YAAW,YAAW,cAAa,QAClHN,EAAAA,cAAA,KAAGL,UAAW,GAAGyB,UAA0BjB,0kBCiFvD,IAAMkB,EAAN,cAAqBrB,EAAAA,UAuBjBsB,YAAYC,GACRC,MAAMD,GAnBO,KAAAE,gBAA0B,cAoGpC,KAAAC,oBAAuBC,GAA0CC,KAAKL,MAAMM,OAAOC,QAAQlC,KAAO+B,EAAMI,OAAOlB,MAO/G,KAAAmB,sBAAyBL,GAA0CC,KAAKL,MAAMM,OAAOI,WAAaN,EAAMI,OAAOlB,MAG/G,KAAAqB,QAAU,KACbN,KAAKO,sBACLP,KAAKQ,mBAGLR,KAAKS,oBAAsBC,aAAY,KACnCV,KAAKW,gCACN,KACHC,YAAW,KACPC,cAAcb,KAAKS,uBACpB,MAIU,KAAAE,4BAA8B,KAEvCG,QAAUA,OAAe,QAAKA,OAAe,OAA4B,2BACzED,cAAcb,KAAKS,qBACnBT,KAAKe,eAAgB,IAIZ,KAAAP,iBAAmB,KAChC,MAAMQ,EAAiChB,KAAKL,MAAMqB,WAAa,GAG3DF,OAAkB,WAAKA,OAAkB,UAAmB,iBAE5DA,OAAkB,UAAmB,gBAAEG,KAClCC,IACG,MAAMjC,EAAQiC,EAAIC,IAAMnB,KAAKoB,YAAYF,EAAIC,KAAO,GACpD,OAAQD,EAAIG,GAAGC,eACX,IAAK,2BACDtB,KAAKuB,6BAA8B,EACnCvB,KAAKwB,gBAAkB,KACvB,MAEJ,IAAK,QACDxB,KAAKyB,MAAQxC,EACbe,KAAK0B,WAAaR,EAAIS,IACtB3B,KAAKuB,4BAA8BL,EAAIU,OACvC5B,KAAKwB,gBAAkB,KACvB,MAEJ,IAAK,+BACDxB,KAAK6B,iCAAkC,EACvC,MAEJ,IAAK,YACD7B,KAAK8B,UAAY7C,EACjBe,KAAK6B,gCAAkCX,EAAIU,OAC3C,MAEJ,IAAK,6BACD5B,KAAKuB,6BAA8B,EACnC,MAEJ,IAAK,UACDvB,KAAK+B,QAAU9C,EACfe,KAAKgC,8BAAgCd,EAAIU,OAMjD,OAAQV,EAAIe,cAAcX,eACtB,IAAK,WACDJ,EAAIgB,SAAWlB,EAAUmB,8BAiBhC,KAAA5B,oBAAsB,KACnC,MAAMS,EAAiChB,KAAKL,MAAMqB,WAAa,GAG/D,GAAIF,QAAUA,OAAgB,QAAG,CAC7B,MAAMsB,EAAgB,CAClBC,eAAgBrB,EAAUsB,2BAI9BC,OAAOC,OAAO1B,OAAgB,QAAGsB,KAIxB,KAAAK,SAAW,CAACC,EAAiBC,IACtC3C,KAAKwB,gBAC2B,OAAzBxB,KAAKwB,gBAA2BkB,EAAUC,EAE9C,GAhMP3C,KAAK8B,UAAY,GACjB9B,KAAK+B,QAAU,GACf/B,KAAKyB,MAAQ,GACbzB,KAAK0B,WAAakB,EAAAA,EAAWC,aAAaC,OAC1C9C,KAAKuB,6BAA8B,EACnCvB,KAAK6B,iCAAkC,EACvC7B,KAAKgC,+BAAgC,EACrChC,KAAKe,eAAgB,EACrBf,KAAKwB,gBAAkB,GAGpBuB,oBACH/C,KAAKM,UAIF0C,qBAEChD,KAAKe,eAAiBD,QAAUA,OAAiB,UAAKA,OAAiB,SAAc,YAErFA,OAAiB,SAAc,aAIhCmC,sBAAsBC,EAA8CC,GACvE,OAAInD,KAAKoD,QAAUD,GAAanD,KAAKL,MAAM0D,OAASH,EAAUG,KAM3DC,SACH,MAAM,OAAErD,EAAM,UAAEe,GAAchB,KAAKL,MAE7B4D,EAASC,EAAAA,EAAA,GACRxD,KAAKL,OAAK,IACb8D,UAAW,CACPC,eAAgB1D,KAAKe,eAEzB4C,OAAQ,CACJC,YAAa5D,KAAKL,MAClB5B,UAAWU,GAAAA,CAAWuB,KAAKH,gBAAiBI,EAAOlC,YAEvD8F,QAAS,CACLC,MAAO,CACHC,IAAKC,EAAAA,MACLC,QAAQ,GAEZC,UAAW,CACPH,IAAKI,EAAAA,WAETC,KAAMhG,EAAAA,cAACiG,EAA0B,CAACtG,UAAWiC,KAAKH,kBAClDtB,QAASH,EAAAA,cAACkG,EAA6B,CAACvG,UAAWiC,KAAKH,gBAAiBtB,QAASyC,EAAUuD,kBAEhGC,mBAAoB,CAChB1G,GAAI,MACJ2G,MAAO,CAAEC,QAAS,SAEtBC,YAAa,CACT7G,GAAIkC,KAAKe,cAAgB,MAAQ,KACjChD,UAAW,GAAGiC,KAAKH,8BAEvBK,QACI9B,EAAAA,cAACwG,EAAAA,GAAarC,OAAAC,OAAA,CACVzE,UAAW,GAAGiC,KAAKH,4BACfI,EAAOC,QAAO,CAClB2E,UAAW,CAAEC,OAAQ9E,KAAKF,oBAAqBiF,eAAgB/E,KAAKL,MAAMqF,QAAQC,YAG1FC,mBAAoBlF,KAAKmF,wBAG7B,OAAOnF,KAAKL,MAAMyF,WAAW7B,GA+FzBnC,YAAYiE,GAChB,MAAMC,EAAIC,SAASC,cAAc,OAGjC,OADAF,EAAEG,UAAYJ,EACiB,IAAxBC,EAAEI,WAAWC,OAAe,GAAKL,EAAEI,WAAW,GAAGE,WAAa,GAwBjET,sBACJ,MAAM,OAAElF,EAAM,UAAEe,GAAchB,KAAKL,MACnC,MAAO,CACHkG,aAAc,CACV/H,GAAI,gBACJC,UAAW,GAAGiC,KAAKH,uCAEvBiG,MAAO,CACH9F,KAAK+F,aACD,YACA,OACA/F,KAAK8B,UACLd,EAAUgF,mBACVhF,EAAUiF,mBACV,GACA,IACA,GAEJjG,KAAK+F,aAAa,UAAW,OAAQ/F,KAAK+B,QAASf,EAAUkF,kBAAmBlF,EAAUmF,kBAAmB,GAAI,IAAI,GACrHnG,KAAK+F,aAAa,QAAS,QAAS/F,KAAKyB,MAAOT,EAAUoF,2BAAuB/G,EAAWW,KAAK0B,WAAY,IAAI,IAErH2E,kBAAmB,CACfC,WAAYtG,KAAKuB,4BACjBE,MAAOzB,KAAK+F,aACR/F,KAAKyC,SAAS,kBAAmB,yBACjC,OACAzB,EAAUuF,0BACV,QACAlH,OACAA,EACA,oBAEJmH,2BAA4B,CACxB1I,GAAI,2BACJC,UAAW,GAAGiC,KAAKH,4EAEvB4G,cAAe,CACX1I,UAAW,GAAGiC,KAAKH,+CAA+CG,KAAKyC,SAAS,SAAU,MAC1F,gBAAiB,SAErBiE,QAAS,CACLtI,EAAAA,cAACuI,EAAqB,CAClBC,IAAI,qBACJ9I,GAAIkC,KAAKyC,SAAS,qBAAsB,0CACxC1E,UAAW,GAAGiC,KAAKH,8CACfG,KAAKH,6CACqBG,KAAKyC,SAAS,aAAc,iBAC1DxE,UAAW+C,EAAU6F,wBACrB7I,KAAMgD,EAAU8F,qBAEpB1I,EAAAA,cAACuI,EAAqB,CAClBC,IAAI,uBACJ9I,GAAIkC,KAAKyC,SAAS,uBAAwB,4CAC1C1E,UAAW,GAAGiC,KAAKH,8CACfG,KAAKH,+CACuBG,KAAKyC,SAAS,eAAgB,gBAC9DxE,UAAW+C,EAAU+F,0BACrB/I,KAAMgD,EAAUgG,uBAEpB5I,EAAAA,cAACuI,EAAqB,CAClBC,IAAI,uBACJ9I,GAAIkC,KAAKyC,SAAS,uBAAwB,8CAC1C1E,UAAW,GAAGiC,KAAKH,8CACfG,KAAKH,+CACuBG,KAAKyC,SAAS,aAAc,iBAC5DxE,UAAW+C,EAAUiG,0BACrBjJ,KAAMgD,EAAUkG,uBAEpB9I,EAAAA,cAACuI,EAAqB,CAClBC,IAAI,qBACJ9I,GAAIkC,KAAKyC,SAAS,qBAAsB,8CACxC1E,UAAW,GAAGiC,KAAKH,8CACfG,KAAKH,6CACqBG,KAAKyC,SAAS,aAAc,kBAC1DxE,UAAW+C,EAAUmG,2BACrBnJ,KAAMgD,EAAUoG,yBAGxBC,eAAgB,CACZjJ,EAAAA,cAACkJ,EAAsB,CACnBV,IAAI,aACJ9I,GAAIkC,KAAKyC,SAAS,aAAc,yCAChC1E,UAAWiC,KAAKH,gBAChBtB,QAASyC,EAAUuG,8BAEvBnJ,EAAAA,cAACkJ,EAAsB,CACnBV,IAAI,gBACJ9I,GAAIkC,KAAKyC,SAAS,gBAAiB,4CACnC1E,UAAWiC,KAAKH,gBAChBtB,QAASyC,EAAUwG,+BAG3BC,aAAc,CACVrJ,EAAAA,cAACsJ,EAAoB,CACjBd,IAAI,yCACJ9I,GAAG,yCACHC,UAAWiC,KAAKH,kBAEpBzB,EAAAA,cAACsJ,EAAoB,CACjBd,IAAI,mBACJ9I,GAAG,mBACHC,UAAWiC,KAAKH,gBAChBtB,QAASyC,EAAU2G,aAEvBvJ,EAAAA,cAACsJ,EAAoB,CACjBd,IAAI,sBACJ9I,GAAG,sBACHC,UAAWiC,KAAKH,gBAChBtB,QAASyC,EAAU4G,uBAEvBxJ,EAAAA,cAACsJ,EAAoB,CACjBd,IAAI,uBACJ9I,GAAG,uBACHC,UAAWiC,KAAKH,gBAChBtB,QAASyC,EAAU6G,iBAEvBzJ,EAAAA,cAACsJ,EAAoB,CACjBd,IAAI,0BACJ9I,GAAG,0BACHC,UAAWiC,KAAKH,gBAChBtB,QAASyC,EAAU8G,mBAEvB1J,EAAAA,cAACsJ,EAAoB,CACjBd,IAAI,oBACJ9I,GAAG,oBACHC,UAAWiC,KAAKH,gBAChBtB,QAASyC,EAAU+G,cAEvB3J,EAAAA,cAACsJ,EAAoB,CACjBd,IAAI,yBACJ9I,GAAG,yBACHC,UAAWiC,KAAKH,gBAChBtB,QAASyC,EAAUgH,sBAI/BC,sBAAuB,CACnB3B,WAAYtG,KAAK6B,gCACjBC,UAAW9B,KAAK+F,aACZ/F,KAAKyC,SAAS,sBAAuB,6BACrC,OACA,GACAzB,EAAUuF,+BACVlH,OACAA,EACA,oBAEJmH,2BAA4B,CACxB1I,GAAI,+BACJC,UAAW,GAAGiC,KAAKH,4EAEvB4H,aAAc,CACVrJ,EAAAA,cAACsJ,EAAoB,CACjBd,IAAI,uBACJ9I,GAAG,uBACHC,UAAWiC,KAAKH,gBAChBtB,QAASyC,EAAUkH,qCAI/BC,oBAAqB,CACjB7B,WAAYtG,KAAKgC,8BACjBD,QAAS/B,KAAK+F,aACV/F,KAAKyC,SAAS,oBAAqB,2BACnC,OACA,GACAzB,EAAUuF,+BACVlH,OACAA,EACA,oBAEJmH,2BAA4B,CACxB1I,GAAI,6BACJC,UAAW,GAAGiC,KAAKH,4EAEvB4H,aAAc,CACVrJ,EAAAA,cAACsJ,EAAoB,CACjBd,IAAI,uBACJ9I,GAAG,uBACHC,UAAWiC,KAAKH,gBAChBtB,QAASyC,EAAUkH,qCAI/BxB,QAAS,CACLtI,EAAAA,cAACuI,EAAqB,CAClBC,IAAI,WACJ9I,GAAG,WACHC,UAAW,GAAGiC,KAAKH,iCACnB5B,UAAW+C,EAAUoH,sBACrBpK,KAAMgD,EAAUqH,mBAEpBjK,EAAAA,cAACuI,EAAqB,CAClBC,IAAI,SACJ9I,GAAG,SACHC,UAAW,GAAGiC,KAAKH,iCACnB5B,UAAW+C,EAAUsH,sBACrBtK,KAAMgD,EAAUuH,oBAGxBd,aAAc,CACVrJ,EAAAA,cAACsJ,EAAoB,CACjBd,IAAI,uBACJ9I,GAAG,uBACHC,UAAWiC,KAAKH,gBAChBtB,QAASyC,EAAUkH,mCAEvB9J,EAAAA,cAACsJ,EAAoB,CACjBd,IAAI,iBACJ9I,GAAG,iBACHC,UAAWiC,KAAKH,gBAChBtB,QAASyC,EAAUwH,sBAEvBpK,EAAAA,cAACsJ,EAAoB,CACjBd,IAAI,+BACJ9I,GAAG,+BACHC,UAAWiC,KAAKH,mBAGxBQ,WAAYJ,EAAOI,YACfjC,EAAAA,cAACwG,EAAAA,GAA0B,CACvB7G,UAAW,GAAGiC,KAAKH,sCACnB7B,KAAMiC,EAAOI,WACbwE,UAAW,CAAEC,OAAQ9E,KAAKI,sBAAuB2E,eAAgB/E,KAAKL,MAAMqF,QAAQC,YAM5Fc,aACJjI,EACAQ,EACAW,EACAwJ,EACA7J,EACAM,EACAwJ,EACAvJ,GAEA,MAAMpB,EAAY,GAAGiC,KAAKH,gCAC1B,MAAO,CACH8I,QAAS,CACL5K,UAAWU,GAAAA,CAAWV,EAAW,GAAGA,KAAaD,IAAM,aAAc,YAAa4K,IAEtF9B,IAAK9I,EACL8K,MACIxK,EAAAA,cAACyK,EAAoBtG,OAAAC,OAAA,GACb,CACA1E,GAAAA,EACAwB,MAAOxB,EACPC,UAAAA,EACAC,KAAMyK,KAIlBhB,aACIrJ,EAAAA,cAACsJ,EAAoBnF,OAAAC,OAAA,GACb,CACAzE,UAAWiC,KAAKH,gBAChBvB,KAAM,UAIlBwK,MACI1K,EAAAA,cAAC2K,EAAoBxG,OAAAC,OAAA,GACb,CACA1E,GAAAA,EACAQ,KAAAA,EACAW,MAAAA,EACAL,UAAAA,EACAM,QAAAA,EACAnB,UAAAA,EACAoB,SAAAA,SA3eR6J,EAAAA,EAAAA,IAAA,CAAXC,EAAAA,IAAU,uDAECD,EAAAA,EAAAA,IAAA,CAAXC,EAAAA,IAAU,qDAICD,EAAAA,EAAAA,IAAA,CAAXC,EAAAA,IAAU,iCAECD,EAAAA,EAAAA,IAAA,CAAXC,EAAAA,IAAU,+BAECD,EAAAA,EAAAA,IAAA,CAAXC,EAAAA,IAAU,6BAECD,EAAAA,EAAAA,IAAA,CAAXC,EAAAA,IAAU,kCAECD,EAAAA,EAAAA,IAAA,CAAXC,EAAAA,IAAU,mDAECD,EAAAA,EAAAA,IAAA,CAAXC,EAAAA,IAAU,qCAECD,EAAAA,EAAAA,IAAA,CAAXC,EAAAA,IAAU,sCAnBTxJ,GAAMuJ,EAAAA,EAAAA,IAAA,CADXE,EAAAA,IACKzJ,GAofN,qFCvkBA,MAAM0J,EAAoCtL,IAA4C,IAA3C,QAAE8K,EAAO,MAAEC,EAAK,aAAEnB,EAAY,MAAEqB,GAAOjL,EAC9E,OACIO,EAAAA,cAACgL,EAAAA,KAAI7G,OAAAC,OAAA,GAAKmG,GACLC,EACAnB,EACAqB,IAKPO,EAA8DC,IAAoE,IAAnE,MAAE7H,EAAK,cAAEgF,EAAa,QAAEC,EAAO,eAAEW,EAAc,aAAEI,GAAc6B,EAChI,OACIlL,EAAAA,cAAAA,EAAAA,SAAA,KACKiJ,GACGA,EAAepG,KAAK1C,GACTH,EAAAA,cAAAA,EAAAA,SAAA,KAAGG,KAElBH,EAAAA,cAAC+K,EAAU5G,OAAAC,OAAA,GAAKf,IACfgG,GACGA,EAAaxG,KAAK1C,GACPH,EAAAA,cAAAA,EAAAA,SAAA,KAAGG,KAElBH,EAAAA,cAACgL,EAAAA,KAAI7G,OAAAC,OAAA,GAAKiE,GACLC,GACGA,EAAQzF,KAAKsI,GACFnL,EAAAA,cAAAA,EAAAA,SAAA,KAAGmL,QAc5BC,EAA+EC,IAAgC,IAA/B,UAAE3H,EAAS,aAAE2F,GAAcgC,EAC7G,OACIrL,EAAAA,cAAAA,EAAAA,SAAA,KACIA,EAAAA,cAAC+K,EAAU5G,OAAAC,OAAA,GAAKV,IACf2F,EAAaxG,KAAK1C,GACRH,EAAAA,cAAAA,EAAAA,SAAA,KAAGG,OAapBmL,EAA2EC,IAA8B,IAA7B,QAAE5H,EAAO,aAAE0F,GAAckC,EACvG,OACIvL,EAAAA,cAAAA,EAAAA,SAAA,KACIA,EAAAA,cAAC+K,EAAU5G,OAAAC,OAAA,GAAKT,IACf0F,EAAaxG,KAAK1C,GACRH,EAAAA,cAAAA,EAAAA,SAAA,KAAGG,OA+DpBqL,EAA0CC,IAAwC,IAAvC,MAAE/F,EAAK,UAAEI,EAAS,KAAEE,EAAI,QAAE7F,GAASsL,EAChF,OACIzL,EAAAA,cAACgL,EAAAA,KAAI7G,OAAAC,OAAA,GAAKsB,GACN1F,EAAAA,cAACgL,EAAAA,KAAI7G,OAAAC,OAAA,GAAK0B,GACLE,EACA7F,KAqBjB,EAf+CoB,IAC3C,MAAM,OAAEgE,EAAM,UAAEF,EAAS,QAAEI,EAAO,mBAAEW,EAAkB,YAAEG,EAAW,QAAEzE,EAAO,mBAAEgF,GAAuBvF,EAErG,OACIvB,EAAAA,cAAC0L,EAAAA,OAAMvH,OAAAC,OAAA,GAAKmB,GACPF,EAAUC,eAAiBtF,EAAAA,cAACgL,EAAAA,KAAI7G,OAAAC,OAAA,GAAKgC,IACrCf,EAAUC,eAAiBtF,EAAAA,cAACwL,EAAarH,OAAAC,OAAA,GAAKqB,IAC/CzF,EAAAA,cAACgL,EAAAA,KAAI7G,OAAAC,OAAA,GAAKmC,GACLzE,EA5EmC6J,CAAAA,IAS/C,IATgD,aACjDlE,EAAY,MACZC,EAAK,kBACLO,EAAiB,sBACjB4B,EAAqB,oBACrBE,EAAmB,QACnBzB,EAAO,aACPe,EAAY,WACZpH,GACH0J,EACG,OACI3L,EAAAA,cAACgL,EAAAA,KAAI7G,OAAAC,OAAA,GAAKqD,GACLC,GACGA,EAAM7E,KAAK+I,GACU,UAAbA,EAAKpD,KAAmBP,EAAkBC,WAGtClI,EAAAA,cAACgL,EAAAA,KAAI7G,OAAAC,OAAA,GAAK6D,EAAkBG,4BACxBpI,EAAAA,cAAC+K,EAAU5G,OAAAC,OAAA,GAAKwH,IAChB5L,EAAAA,cAACiL,EAAuB9G,OAAAC,OAAA,GAAK6D,KAIxB,cAAb2D,EAAKpD,KAAuBqB,EAAsB3B,WAG9ClI,EAAAA,cAACgL,EAAAA,KAAI7G,OAAAC,OAAA,GAAKyF,EAAsBzB,4BAC5BpI,EAAAA,cAAC+K,EAAU5G,OAAAC,OAAA,GAAKwH,IAChB5L,EAAAA,cAACoL,EAAoCjH,OAAAC,OAAA,GAAKyF,KAIrC,YAAb+B,EAAKpD,KAAqBuB,EAAoB7B,WAG1ClI,EAAAA,cAACgL,EAAAA,KAAI7G,OAAAC,OAAA,GAAK2F,EAAoB3B,4BAC1BpI,EAAAA,cAAC+K,EAAU5G,OAAAC,OAAA,GAAKwH,IAChB5L,EAAAA,cAACsL,EAAkCnH,OAAAC,OAAA,GAAK2F,KAK7C/J,EAAAA,cAAC+K,EAAU5G,OAAAC,OAAA,GAAKwH,MAE9BvC,GACGA,EAAaxG,KAAI,CAACgJ,EAAwBC,IAC/B9L,EAAAA,cAACA,EAAAA,SAAc,CAACwI,IAAKsD,GAAQD,KAE3CvD,GACGA,EAAQzF,KAAI,CAACsI,EAAyBW,IAC3B9L,EAAAA,cAACA,EAAAA,SAAc,CAACwI,IAAKsD,GAAQX,KAE3ClJ,IAyBI8J,CAAajF,wDC/HlBkF,iHAAZ,SAAYA,GACRA,EAAAA,EAAA,eACAA,EAAAA,EAAA,aACAA,EAAAA,EAAA,aACAA,EAAAA,EAAA,iBACAA,EAAAA,EAAA,eACAA,EAAAA,EAAA,0BACAA,EAAAA,EAAA,uBAPJ,CAAYA,IAAAA,EAAgB,KAsBrB,MAAMC,EAAmBA,CAC5B1K,EACA2K,EACAC,KAEA,MAAMC,GAAmBC,EAAAA,EAAAA,kBAAiB,GAAGH,IAAiB3K,EAAM+K,SAAS1F,QAAQ2F,cAAc5F,eAAe6F,aAC5GC,EAAgD,CAClDC,UAAW,CACPC,GAAI,CAAEC,EAAG,kBAAmBC,EAAG,EAAGC,EAAG,GACrCC,GAAI,CAAEH,EAAG,kBAAmBC,EAAG,EAAGC,EAAG,GACrCE,GAAI,CAAEJ,EAAG,kBAAmBC,EAAG,EAAGC,EAAG,GACrCG,GAAI,CAAEL,EAAG,kBAAmBC,EAAG,EAAGC,EAAG,IAEzCI,UAAU,GAEd,QAAyBjM,IAArBmL,EAAgC,KAAAe,EAChC,MAAMC,EAAiC,CAAEC,IAAKjB,GAC9C,OACIpM,EAAAA,cAACwG,EAAAA,GAAcrC,OAAAC,OAAA,CACXuC,eAAgBpF,EAAM+K,SAAS1F,QAAQ2F,cAAc5F,eACrDhH,UAAU,sBACNyN,EAAS,CACbE,aAAc/L,EAAM+K,SAAS1F,QAAQC,QAAQyG,aAC7CC,cAA0D,QAA7CJ,EAAE5L,EAAM+K,SAASzK,OAAO2L,6BAAqB,IAAAL,EAAAA,EAAIV,EAC9DgB,oBAAoB,OACpBnN,KAAK,WACLoN,QAASvB,KAIrB,OAAO,2kBCrDL,MAAOwB,UAAmC3N,EAAAA,cAuB5CsB,YAAmBC,GACfC,MAAMD,GArBO,KAAAqM,eAAyB5B,EAAiB6B,KAEnD,KAAAC,aAAuB9B,EAAiB+B,KAM/B,KAAAC,UAAoBhC,EAAiBgC,UAIrC,KAAAC,iBAA0C,GAyG1C,KAAAC,cAAgB,KAC7BtM,KAAKuM,UAASC,IAAiB,CAC3BC,gBAAYpN,EACZqN,WAAYF,EAAcE,eAI1B,KAAAC,0BAA4B,KAAK,IAAAC,EACrC,OAA0B,QAAnBA,EAAA5M,KAAKL,MAAM+K,gBAAQ,IAAAkC,GAAc,QAAdA,EAAnBA,EAAqBC,oBAAY,IAAAD,GAAjCA,EAAmCjH,OACtCvH,EAAAA,cAAA,UACK4B,KAAKL,MAAM+K,SAASmC,aAAa5L,KAAI,CAAC6L,EAAM5C,KAAS,IAAA6C,EAClD,OAAOD,MAAAA,GAAa,QAATC,EAAJD,EAAME,eAAO,IAAAD,GAAbA,EAAepH,OAClBvH,EAAAA,cAAA,UACIA,EAAAA,cAACC,EAAAA,OAAM,CACHF,QAASA,KACL6B,KAAKsM,gBACLtM,KAAKuM,SAAS,CAAEU,WAAYH,EAAKhP,MAErC8I,IAAKsD,EACLnM,UAAW,IAAGiC,KAAKoD,MAAMsJ,UAAY,OAAS,KAE7CI,EAAKI,WAId9O,EAAAA,cAAA,UAAK4B,KAAKmN,YAAYL,EAAM5C,QAIxC,MAGA,KAAAiD,YAAc,CAACL,EAAqB5C,KACxC,MAAMkD,EAAoC,CACtCnP,UAAW6O,EAAK7O,UAChBF,UAAW,0BACXmP,SAAUJ,EAAKI,SACfG,QAASP,EAAKQ,QACdC,cAAc,EACd7O,KAAM,QAEV,OAAON,EAAAA,cAACwG,EAAAA,GAAa,CAACgC,IAAKsD,EAAO4C,KAAMM,KAwS3B,KAAAI,0BAA4B,CAACC,EAA4BC,IAA0B,KAChG,MAAM,eAAEC,GAAmB3N,KAAKoD,MAC1BwK,EAAU,CAAE,CAACH,IAAWC,GAC9B1N,KAAKuM,SAAS,CAAEoB,eAAcnK,EAAAA,EAAA,GAAOmK,GAAmBC,MAmI3C,KAAAC,qBAAuB,CAACC,EAA6BC,IAA0B,KAC5F,MAAMb,EAAWa,EAAOb,SAAWa,EAAOb,SAAW,GAC/Cb,EAA0C,CAAC,CAAEZ,IAAKqC,EAAqBhC,QAASoB,IAGtF,GAAIc,EAAAA,gBAAgBC,YAAYF,EAAOG,oBACnC,IAAK,MAAMlE,KAAQ+D,EAAOG,mBAAoB,CAC1C,MAAMC,EAAcnE,EAAKoE,MAAM3C,IAC/BY,EAAiBgC,KAAK,CAClB5C,IAAK0C,EACLrC,QAAS9B,EAAKhM,KACdsQ,qBAAsB,CAAEjB,QAASrD,EAAKqD,QAAQkB,kBAI1DvO,KAAKuM,SAAS,CACVjC,cAAe0D,EAAAA,gBAAgBC,YAAY5B,GAAoBA,EAAmB,CAAC,CAAEZ,IAAK,aAUjF,KAAA+C,sBAAwB,CAACnL,EAAqBoL,IAAsB,KAC5EzO,KAAKoD,MAAMsL,cASZ3C,EAA2B4C,aAAc,EACzC3O,KAAKuM,SAAS,CACVE,WAAYpJ,EAAKvF,GACjB8Q,oBAAqBvL,EAAK6J,SAC1B2B,WAAYJ,MAZhBzO,KAAKuM,SAAS,CACVE,WAAYpJ,EAAKvF,GACjB+Q,WAAYJ,IAEZzO,KAAKL,MAAM+K,SAASoE,mBACpB9O,KAAK6N,qBAAqBxK,EAAK8K,YAAc9K,EAA7CrD,KAgBK,KAAA+O,cAAgB,IAAM,KACnChD,EAA2B4C,aAAc,EACzC3O,KAAKuM,UAASC,IAAiB,CAAGC,WAAYD,EAAcqC,gBAO/C,KAAAG,oBAAuBjP,IAChCC,KAAKiP,SAASC,UAAYlP,KAAKiP,SAASC,QAAQC,SAASpP,EAAMI,UAC1DH,KAAKoD,MAAMsL,aAGZ1O,KAAKuM,SAAS,CAAEE,gBAAYpN,EAAWuP,oBAAqB,GAAIlC,WAAW,IAF3E1M,KAAKuM,SAAS,CAAEE,WAAY,EAAGmC,oBAAqB,GAAIlC,WAAW,MAc9D,KAAA0C,uBAAyB,CAAClF,EAAe0E,EAA8BS,KAE/EtD,EAA2B4C,aADL,IACoBzE,MAG1CmF,IAAmBT,IAGjBA,IAAwBS,EAMlB,KAAAC,cAAgB,KAAW,IAAAC,EACnCvP,KAAKoD,MAAMsL,aAGZ1O,KAAKuM,SAAS,CAAEE,gBAAYpN,EAAWuP,oBAAqB,GAAIlC,WAAW,IAF3E1M,KAAKuM,SAAS,CAAEE,WAAY,EAAGmC,oBAAqB,GAAIlC,WAAW,IAIjD,QAArB6C,EAAAvP,KAAKiP,SAASC,eAAO,IAAAK,GAArBA,EAAuBC,SAAS,GAAmBC,SAOvC,KAAAC,aAAgB3P,IAC6D,IAAA4P,EAAtF5P,EAAM6P,UAAY5P,KAAKoM,YAAcpM,KAAKoD,MAAMsL,cAAgB1O,KAAKoD,MAAMsJ,YAC3E1M,KAAKuM,SAAS,CAAEE,WAAY,EAAGmC,oBAAqB,GAAIlC,WAAW,IAC7C,QAArBiD,EAAA3P,KAAKiP,SAASC,eAAO,IAAAS,GAArBA,EAAuBH,SAAS,GAAmBC,UAO3C,KAAAI,sBAAwB,KACrC7P,KAAKuM,SAAS,CAAEmC,aAAc1O,KAAK0O,gBAvqBnC1O,KAAKiP,SAAW7Q,EAAAA,YAChB4B,KAAK8P,YAAc1R,EAAAA,YACnB,MAAM,aAAEyO,GAAiB7M,KAAKL,MAAM+K,SACpC,GAAIsD,EAAAA,gBAAgBC,YAAYpB,IAAiBmB,EAAAA,gBAAgBC,YAAYpB,EAAa,GAAGG,SAAU,CACnG,MAAM+C,EAAclD,EAAa,GAAGG,QAAQ,GAAGmB,YAActB,EAAa,GAAGG,QAAQ,GAAGmB,YAAc,GAChGjB,EAAWL,EAAa,GAAGG,QAAQ,GAAGE,SAAWL,EAAa,GAAGG,QAAQ,GAAGE,SAAW,GAC7FlN,KAAKqM,iBAAmB,CAAC,CAAEZ,IAAKsE,EAAajE,QAASoB,IAGlDc,EAAAA,gBAAgBC,YAAYpB,EAAa,GAAGG,QAAQ,GAAGkB,qBACvDrB,EAAa,GAAGG,QAAQ,GAAGkB,mBAAmBjN,KAAI+I,IAC9C,MAAMmE,EAAcnE,EAAKoE,MAAM3C,IAM/B,OALAzL,KAAKqM,iBAAiBgC,KAAK,CACvB5C,IAAK0C,EACLrC,QAAS9B,EAAKhM,KACdsQ,qBAAsB,CAAEjB,QAASrD,EAAKqD,QAAQkB,kBAE3C,QAKnBvO,KAAKoD,MAAQ,CACTqJ,WAAY,EACZmC,oBAAqB,GACrBC,gBAAYxP,EACZsO,eAAgB,GAChBe,aAAc1O,KAAK0O,aACnBpE,cAAetK,KAAKqM,iBACpBK,WAAW,EACXO,YAAa,GAEjBjN,KAAKgQ,kBAAmBC,EAAAA,EAAAA,oBACpBjQ,KAAKL,MAAM+K,SAAS1F,QAAQC,QAAQiL,kBACpClQ,KAAKL,MAAM+K,SAASyF,aACpBnQ,KAAKL,MAAM+K,SAAS0F,WAExBpQ,KAAKqQ,SAAUC,EAAAA,EAAAA,kBAAiB,QAAStQ,KAAKgQ,iBAAkB,GAAI,IAI9D,mBACN,MAAMO,GAAaC,EAAAA,EAAAA,UAAS,CAAEC,QAASC,EAAAA,YAAYC,QAAS3L,QAAShF,KAAKL,MAAM+K,SAAS1F,QAAQC,UACjG,MAAsB,OAAfsL,GAAsC,OAAfA,GAAsC,OAAfA,EAGlDxN,oBACH/C,KAAK4Q,mCAAoCC,EAAAA,EAAAA,mBAAkB/P,OAAQ,SAAUd,KAAK6P,uBAClFtK,SAASuL,iBAAiB,UAAY9Q,KAAK0P,cAA2C,GACtF1P,KAAK6P,wBACLtK,SAASwL,KAAKD,iBAAiB,YAAa9Q,KAAKgP,qBAG9ChM,qBAAkB,IAAAgO,EACO,QAAxBA,EAAAhR,KAAK8P,YAAYZ,eAAO,IAAA8B,GAAxBA,EAA0BxB,SAAS,IAAMxP,KAAKL,MAAM+K,SAASuG,cAC5DjR,KAAK8P,YAAYZ,QAAQM,SAAS,GAAmBC,QAIvDyB,uBACHpQ,OAAOqQ,oBAAoB,SAAUnR,KAAK4Q,mCAAoC,GAC9ErL,SAASwL,KAAKI,oBAAoB,YAAanR,KAAKgP,qBAAqB,GAGtE1L,SACHtD,KAAKkM,aAAe,EAGpB,OACI9N,EAAAA,cAACgL,EAAAA,KAAI,CAACrL,UAAU,qBAAqBqT,IAAKpR,KAAKiP,UAC1CjP,KAAKoD,MAAMsL,aACRtQ,EAAAA,cAAAA,EAAAA,SAAA,KACIA,EAAAA,cAACC,EAAAA,OAAMkE,OAAAC,OAAA,CACHzE,UAAU,uBACVI,QAAS6B,KAAKsM,cAAa,gBAR7B,oBAUE+E,MAAOrR,KAAKL,MAAM+K,SAAS1J,UAAUsQ,mBAAkB,aAC3CtR,KAAKL,MAAM+K,SAAS1J,UAAUsQ,oBACtCtR,KAAKuR,aAEZvR,KAAKwR,uBAGVpT,EAAAA,cAAAA,EAAAA,SAAA,KACK4B,KAAK2M,4BACL3M,KAAKwR,wBAsDlBA,sBACJ,OACIpT,EAAAA,cAACqT,EAAAA,SAAQ,CAAC1T,UAAU,oCAAoCkG,OAAQjE,KAAKoD,MAAMsJ,WACtE1M,KAAKoD,MAAMsL,aAAe1O,KAAK0R,oBAAsB1R,KAAK2R,sBAK/DD,oBACJ,MAAM,SAAEE,EAAQ,iBAAEC,EAAgB,2BAAEC,EAA0B,uBAAEC,EAAsB,WAAEC,GAAehS,KAAKL,MAAM+K,SAGlH,OADA1K,KAAKkM,aAAe,EAEhB9N,EAAAA,cAAAA,EAAAA,SAAA,KACIA,EAAAA,cAAA,OAAKL,UAAU,sCACXK,EAAAA,cAAA,UAAQL,UAAU,qBAAoB,aAAY,QAAQI,QAAS6B,KAAKsP,iBAE5ElR,EAAAA,cAAC0L,EAAAA,OAAMvH,OAAAC,OAAA,GACCwP,EAAU,CACdjU,UAAWU,GAAAA,CACPuT,EAAWjU,UACXiC,KAAKoD,MAAMsL,mBAA0CrP,IAA1BW,KAAKoD,MAAMqJ,WAA2B,QAAU,YAG/ErO,EAAAA,cAACgL,EAAAA,KAAI7G,OAAAC,OAAA,GAAKoP,EAAQ,CAAEK,SAAS,OACxBjS,KAAKoD,MAAMsL,mBAA0CrP,IAA1BW,KAAKoD,MAAMqJ,YACnCrO,EAAAA,cAACgL,EAAAA,KAAI7G,OAAAC,OAAA,GAAKsP,GACN1T,EAAAA,cAACgL,EAAAA,KAAI7G,OAAAC,OAAA,GAAKqP,EAAgB,CAAE1T,QAAS6B,KAAK+O,mBAC1C3Q,EAAAA,cAACgL,EAAAA,KAAI7G,OAAAC,OAAA,GAAKuP,GAAyB/R,KAAKoD,MAAMwL,sBAGrD5O,KAAKkS,oBAOlBP,qBACJ,MAAM,SAAEC,EAAQ,WAAEI,GAAehS,KAAKL,MAAM+K,SAE5C,OACItM,EAAAA,cAAAA,EAAAA,SAAA,KACIA,EAAAA,cAAA,OAAKL,UAAU,sCACXK,EAAAA,cAAA,UAAQL,UAAU,qBAAoB,aAAY,QAAQI,QAAS6B,KAAKsP,iBAE5ElR,EAAAA,cAAC0L,EAAAA,OAAMvH,OAAAC,OAAA,GAAKwP,EAAU,CAAEjU,UAAWU,GAAAA,CAAWuT,EAAWjU,UAAW,8BAChEK,EAAAA,cAACgL,EAAAA,KAAI7G,OAAAC,OAAA,GAAKoP,EAAQ,CAAEK,SAAS,OACxBjS,KAAKkS,oBAOlBC,kBAAkBnI,GACtB,OAAIA,EAAKsD,UAAY8E,EAAAA,iBAAiBC,mBAAmBrI,EAAKsD,SACnDtN,KAAKsS,oBAAoBtI,GACxBA,EAAKsD,QAGV,KAFItN,KAAKuS,oBAAoBvI,GAKhCkI,iBACJ,MAAM,SAAEM,GAAaxS,KAAKL,MAAM+K,SAC1BmC,EAAgC7M,KAAKL,MAAM+K,SAASmC,cACpD,WAAEJ,GAAezM,KAAKoD,MACtBqP,EAA8B,GAMpC,GAJIzE,EAAAA,gBAAgBC,YAAYpB,KAC5BA,EAAa,GAAG/O,GAAK,GAGrBkC,KAAKoD,MAAMsL,mBAA+BrP,IAAfoN,GAA4BuB,EAAAA,gBAAgBC,YAAYpB,GAAe,CAClG,MAAM6F,EAAW1S,KAAK2S,qBAAgBtT,EAAWwN,GAE7C6F,GACAD,EAAapE,KACTjQ,EAAAA,cAACgL,EAAAA,KAAI7G,OAAAC,OAAA,CAACoE,IAAK8L,EAAS5U,IAAQ0U,GACvBxS,KAAK4S,oBAAoBF,GAAS,IAAG,WAKlD,GAAI1S,KAAKoD,MAAMsL,aACX,IAAK,MAAOxE,EAAOF,KAAS6C,EAAagG,UACrCJ,EAAapE,KACTjQ,EAAAA,cAACgL,EAAAA,KAAI7G,OAAAC,OAAA,CACDoE,IAAKoD,EAAKlM,IACN0U,EAAQ,CACZpB,IACIpR,KAAKoP,uBAAuBlF,EAAOlK,KAAKoD,MAAMwL,oBAAqB5E,EAAKkD,UAAYlN,KAAK8P,YAAc,OAG1G9P,KAAK4S,oBAAoB5I,UAKtC,IAAK,MAAO,CAAE0I,KAAa7F,EAAagG,UAAW,KAAAC,EAC/C,GAAIJ,EAAS5U,KAAOkC,KAAKoD,MAAM6J,YAA8B,QAApB6F,EAAIJ,EAAS1F,eAAO,IAAA8F,GAAhBA,EAAkBnN,OAC3D,IAAK,MAAOuE,EAAO6I,KAAgBL,EAAS1F,QAAQ6F,UAChDJ,EAAapE,KACTjQ,EAAAA,cAACgL,EAAAA,KAAI7G,OAAAC,OAAA,CACDoE,IAAKmM,EAAYjV,IACb0U,EAAQ,CACZpB,IACIpR,KAAKoP,uBAAuBlF,EAAOlK,KAAKoD,MAAMwL,oBAAqBmE,EAAY7F,UACzElN,KAAK8P,YACL,OAGT9P,KAAK4S,oBAAoBG,KAStD,OAAON,EAGHE,gBAAgBK,EAAuBC,GAC3C,IAAKA,EACD,OAAO,KAGX,IAAK,IAAI/I,EAAQ,EAAGA,GAAS+I,EAAKtN,OAASyE,EAAiB8I,IAAKhJ,IAAS,CACtE,MAAMF,EAAsBiJ,EAAKnU,OAAOoL,IAExC,GAAIF,EAAKlM,KAAOkC,KAAKoD,MAAMqJ,WAMvB,OALKV,EAA2B4C,YAG5B3O,KAAKuM,SAAS,CAAEsC,WAAYmE,EAAcpE,oBAAqB5E,EAAKkD,WAFpElN,KAAKuM,SAAS,CAAEsC,WAAYmE,IAIzBhJ,EAEX,MAAMmJ,EAAQnT,KAAK2S,gBAAgB3I,EAAKlM,GAAIkM,EAAKgD,SACjD,GAAImG,EACA,OAAOA,EAGf,OAAO,KAGHP,oBAAoB/F,GACxB,OAAImB,EAAAA,gBAAgBC,YAAYpB,EAAaG,SACrChN,KAAKoD,MAAMsL,mBAA0CrP,IAA1BW,KAAKoD,MAAMqJ,WAC/BzM,KAAKoT,eAAevG,EAAaG,QAASH,EAAa/O,IAAI,GAIlEM,EAAAA,cAAAA,EAAAA,SAAA,KACK4B,KAAKqT,sBAAsBxG,GAC3B7M,KAAKoT,eAAevG,EAAaG,QAASH,EAAa/O,KAGzD+O,EAAaS,UAAY8E,EAAAA,iBAAiBC,mBAAmBxF,EAAaS,SAC1EtN,KAAKsS,oBAAoBzF,EAAcA,EAAa/O,IACnD+O,EAAaS,SAAatN,KAAKoD,MAAMsL,mBAA0CrP,IAA1BW,KAAKoD,MAAMqJ,WAIrE,KAHIzM,KAAKuS,oBAAoB1F,GAMhCuG,eAAeE,EAAgC7G,EAAqB8G,GAAmB,IAAAC,EAAAC,EAC3F,IAAIC,EAAwCJ,EACxC7G,IAAerC,EAAiBuJ,WAChCD,EAAWJ,EAAcM,QAAOb,GAAeA,EAAYjV,IAAMiV,EAAYjV,IAAM+V,EAAAA,gBAAgBC,UAGvG,MAAM,SAAEtB,GAAaxS,KAAKL,MAAM+K,SAC1BqJ,EAA0E,QAAlDP,EAAGxT,KAAKL,MAAM+K,SAASzK,OAAO+T,4BAAoB,IAAAR,GAAAA,EAC1ES,EAAqE,QAA9CR,EAAGzT,KAAKL,MAAM+K,SAASzK,OAAOiU,wBAAgB,IAAAT,EAAAA,EAAIrJ,EAAiB+J,MAEhG,GAAI1H,GAAczM,KAAKoD,MAAMqJ,aAAeA,EAExC,OADAzM,KAAKL,MAAM+K,SAAS1F,QAAQoL,UAAUnG,MAAM,gEACrC,KAGX,IAAKyJ,IAAa1F,EAAAA,gBAAgBC,YAAYyF,GAE1C,OADA1T,KAAKL,MAAM+K,SAAS1F,QAAQoL,UAAUnG,MAAM,4DACrC,KAGX,IAAImK,EAAyB,GAC7B,MAAMC,EAAcX,EAASzS,KAAI,CAAC8M,EAAuB7D,KACrD,MAAMoK,EAAavG,EAAOf,SAAWgB,EAAAA,gBAAgBC,YAAYF,EAAOf,SACxE,IAAI0F,EAQA1F,EANA0F,EADA4B,GAActU,KAAKoD,MAAMsL,aACd1O,KAAKqT,sBAAsBtF,EAAQtB,EAAYvC,GACnDlK,KAAKkM,eAAiB9B,EAAiB8I,KAAQoB,EAG3C,KAFAtU,KAAKuU,YAAYxG,EAAQ7D,GAKxC,MAAMsK,EACFF,GAAcP,GAA4B/T,KAAKkM,cAAgBuI,KAAKC,MAAMT,GAA2B7J,EAAiB8I,IAEtHoB,IAAetU,KAAKoD,MAAMsL,eACtB1O,KAAKkM,cAAgB9B,EAAiBuK,IACtC3H,EAAUhN,KAAK4U,qBAAqB7G,GAC7B/N,KAAKkM,cAAgBlM,KAAKgM,iBACjChM,KAAKkM,eACLkI,EAAiB,SAASpU,KAAKkM,aAAa2I,aAC5C7H,EAAUhN,KAAKoT,eAAerF,EAAOf,aAAS3N,GAAW,KAI7DmV,GAAmBxU,KAAKoD,MAAMsL,eAC9B1O,KAAKkM,eACLkI,EAAiBL,EAA2B,SAAS/T,KAAKkM,aAAa2I,aAAe,GACtF7H,EAAUhN,KAAKoT,eAAerF,EAAOf,QAASe,EAAOjQ,IAAI,IAE7D,MAAMiS,EAAchC,EAAOI,YAAcJ,EAAOI,YAAc,GAC9D,OACI/P,EAAAA,cAACgL,EAAAA,KAAI7G,OAAAC,OAAA,GACGgQ,EAAQ,CACZ5L,IAAKmH,EAAOjQ,GACZgX,YAAa9U,KAAKkM,eAAiB9B,EAAiB8I,KAAOlT,KAAK6N,qBAAqBkC,EAAahC,GAClGhQ,UAAWU,GAAAA,CAAW+T,EAASzU,UAAWyW,GAAmB,eAC7DpD,IAAKpR,KAAKoP,uBAAuBlF,EAAOlK,KAAKoD,MAAMwL,oBAAqBb,EAAOb,UAAYlN,KAAK8P,YAAc,OAE7G4C,EACA1F,MAIb,OAAOhN,KAAK+U,YAAYX,EAAgBC,EAAad,GAGjDgB,YAAYxG,EAAuB7D,GACvC,IAAIwI,EAMJ,OAJIA,EADA1S,KAAKkM,eAAiB9B,EAAiB8I,IAC5BnF,EAAOT,QAAUtN,KAAKgV,4BAA4BjH,EAAQ7D,GAASlK,KAAKuS,oBAAoBxE,GAE5FA,EAAOT,QAAUtN,KAAKsS,oBAAoBvE,EAAQ7D,GAASlK,KAAKuS,oBAAoBxE,GAE5F2E,EAGHkC,qBAAqBlC,GAAuB,IAAAuC,EAChD,MAAMb,EAAiB,SAASpU,KAAKkM,aAAa2I,aAC5CK,EAAmBxC,EAASxF,SAE5BiI,OAAkC9V,IAArB6V,EAAiCA,EAAmB,GACjEE,EAFWpV,KAAKoD,MAAMuK,eAGtBsG,EAAqE,QAA9CgB,EAAGjV,KAAKL,MAAM+K,SAASzK,OAAOiU,wBAAgB,IAAAe,EAAAA,EAAI7K,EAAiB+J,MAEhG,IAAIzG,GAAe,EACf0H,EAAK1C,EAAS5U,MACd4P,GAAe,GAEnB,MAAM2H,EAA2B,CAAEC,QAAS,EAAGrR,OAAQyJ,GAEvD,OACItP,EAAAA,cAACmX,EAAAA,OAAM,CACHC,cAAeH,EACfzO,IAAK8L,EAAS5U,GACdC,UAAWU,GAAAA,CAAW,yBAA0B2V,GAChDqB,UAAU,sBACVC,WAAW,uBACXC,eAAe,QACfT,iBAAkBC,EAClBS,SAAU5V,KAAKwN,0BAA0BkF,EAAS5U,GAAI4P,IAEtDtP,EAAAA,cAAA,WACKsU,EAAS1F,QAAS/L,KAAK4U,GAChB7H,EAAAA,gBAAgBC,YAAY4H,EAAY7I,WACxChN,KAAKkM,eACDlM,KAAKkM,aAAe+H,GACbjU,KAAK4U,qBAAqBiB,GAGlC7V,KAAKmS,kBAAkB0D,OAmB1CxC,sBAAsBtF,EAAuBtB,EAAqBvC,GACtE,OACI9L,EAAAA,cAACgL,EAAAA,KAAI7G,OAAAC,OAAA,CACDoE,IAAKsD,GACDlK,KAAKL,MAAM+K,SAASrM,OAAM,CAC9BF,QAAS6B,KAAKwO,sBAAsBT,EAAQtB,GAAW,kBACtCzM,KAAKoD,MAAMqJ,YAAczM,KAAKoD,MAAMqJ,aAAesB,EAAOjQ,IAAG,mBAC5DkC,KAAKoD,MAAMqJ,YAAczM,KAAKoD,MAAMqJ,aAAesB,EAAOjQ,IAAG,cAClE2O,EAAU,aACXzM,KAAKoD,MAAMsL,aAAeX,EAAO9P,eAAYoB,IAExD0O,EAAOb,UAKZoF,oBAAoBvE,EAAuB7D,GAC/C,MAAM,KAAE4L,GAAS9V,KAAKL,MAAM+K,SACtBwC,EAAWa,EAAOb,SAAWa,EAAOb,SAAW,GACrDlN,KAAKqQ,QAAQ0F,cAAcC,MAAQ9I,EACnC,MAAMqE,GAAa0E,EAAAA,EAAAA,wBAAuBjW,KAAKgQ,iBAAkBhQ,KAAKqQ,SACtE,OACIjS,EAAAA,cAACgL,EAAAA,KAAI7G,OAAAC,OAAA,GACGsT,EAAI,CACRlP,IAAKsD,EACLgM,KAAMnI,EAAOT,SACTiE,EAAU,CACdpR,OAAQ4N,EAAOoI,iBAAmB,cAAW9W,EAC7ClB,SAASiY,EAAAA,EAAAA,kBAAiBpW,KAAKgQ,iBAAkBhQ,KAAKqQ,QAASnD,KAE9Da,EAAOb,UAKZ8H,4BAA4BjH,EAAuB7D,GAA6C,IAA7BmM,IAAAC,UAAA3Q,OAAA,QAAAtG,IAAAiX,UAAA,KAAAA,UAAA,GACvE,MAAM,KAAER,GAAS9V,KAAKL,MAAM+K,SACtBwC,EAAWa,EAAOb,SAAWa,EAAOb,SAAW,GAC/C6C,EAAchC,EAAOI,YAAcJ,EAAOI,YAAc,GAC9DnO,KAAKqQ,QAAQ0F,cAAcC,MAAQ9I,EACnC,MAAMqE,GAAa0E,EAAAA,EAAAA,wBAAuBjW,KAAKgQ,iBAAkBhQ,KAAKqQ,SACtE,OACIjS,EAAAA,cAACgL,EAAAA,KAAI7G,OAAAC,OAAA,GACGsT,EAAI,CACRlP,IAAKsD,EACL4K,YAAauB,GAAiBrW,KAAK6N,qBAAqBkC,EAAahC,GACrEmI,KAAMnI,EAAOT,SACTiE,EAAU,CACdpT,SAASiY,EAAAA,EAAAA,kBAAiBpW,KAAKgQ,iBAAkBhQ,KAAKqQ,QAASnD,KAE9Da,EAAOb,UAKZqJ,uBAAuBrJ,EAAmBG,GAC9C,MAAM,KAAEyI,GAAS9V,KAAKL,MAAM+K,SAC5B1K,KAAKqQ,QAAQ0F,cAAcC,MAAQ9I,EACnC,MAAMqE,GAAa0E,EAAAA,EAAAA,wBAAuBjW,KAAKgQ,iBAAkBhQ,KAAKqQ,SACtE,OAAInD,GAAYG,EAERjP,EAAAA,cAACgL,EAAAA,KAAI7G,OAAAC,OAAA,GAAKsT,EAAI,CAAEI,KAAM7I,GAAakE,EAAU,CAAEpT,SAASiY,EAAAA,EAAAA,kBAAiBpW,KAAKgQ,iBAAkBhQ,KAAKqQ,QAASnD,KACzGA,GAIN,KAGHqF,oBAAoBxE,EAAuB7D,GAC/C,MAAM,KAAEsM,GAASxW,KAAKL,MAAM+K,SAC5B,OACItM,EAAAA,cAACgL,EAAAA,KAAI7G,OAAAC,OAAA,CAACoE,IAAKsD,GAAWsM,GACjBzI,EAAOb,UAKZ6H,YAAY0B,EAAepC,EAA4BqC,GAAmB,IAAAC,EAC9E,MAAM,aAAEC,EAAY,SAAEhF,EAAQ,kBAAEiF,EAAiB,kBAAE/H,EAAiB,uBAAEgI,GAA2B9W,KAAKL,MAAM+K,SACtGqM,GACD/W,KAAKoD,MAAMsL,cACZI,GAC6B,OAA7B9O,KAAKoD,MAAMkH,oBACkBjL,IAA7BW,KAAKoD,MAAMkH,gBACVoM,EACCM,GACDhX,KAAKoD,MAAMsL,cAAgBoI,GAA0B9I,EAAAA,gBAAgBC,YAAYjO,KAAKoD,MAAMkH,iBAAmBoM,EAC9GO,EACFjX,KAAKkM,aAAe9B,EAAiBuK,KAAOoC,EAAyBH,EAAc7Y,UAAY,kBACnGiC,KAAKkM,aAAe9B,EAAiB8I,IACrC,MAAMgE,EACFH,GACA/W,KAAKL,MAAM+K,SAASzK,OAAOiU,kBAC3BlU,KAAKL,MAAM+K,SAASzK,OAAOiU,iBAAmB9J,EAAiBuK,KAC/D,sBAEEwC,EAAyC,QAA3BR,EAAG3W,KAAKoD,MAAMkH,qBAAa,IAAAqM,OAAA,EAAxBA,EAA0B/C,QAAOxF,IAAUgE,EAAAA,iBAAiBC,mBAAmBjE,EAAM3C,OACtG2L,EAAqBD,MAAAA,OAAc,EAAdA,EAAgBlW,KAAI+I,GAAQA,EAAKyB,MAAK4L,KAAK,KACtE,OACIjZ,EAAAA,cAACgL,EAAAA,KAAI7G,OAAAC,OAAA,GAAKoU,EAAY,CAAE7Y,UAAWkZ,IAC/B7Y,EAAAA,cAACgL,EAAAA,KAAI7G,OAAAC,OAAA,GACGoP,EAAQ,CACZ7T,UAAWU,GAAAA,CAAWmT,EAAS7T,UAAW0Y,EAAOM,GAA0B,gBAAiBG,KAE3F7C,GAELjW,EAAAA,cAAA,OAAKL,UAAU,2BAA2B6I,IAAKwQ,GAC1CL,GACG/I,EAAAA,gBAAgBC,YAAYkJ,IAC5BA,EAAelW,KAAI+I,IAAI,IAAAsN,EAAAC,EAAA,OACnBnZ,EAAAA,cAACgL,EAAAA,KAAI7G,OAAAC,OAAA,GAAKqU,EAAiB,CAAE9Y,UAAW8Y,EAAmB9Y,UAAW6I,IAAKoD,EAAKyB,MAC3EpB,EAAiBrK,KAAKL,MAAe,QAAV2X,EAAEtN,EAAKyB,WAAG,IAAA6L,EAAAA,EAAI,GAAItN,EAAK8B,QAAS+I,YAC3DmC,GACGhX,KAAKuW,uBAAuBvM,EAAK8B,QAAkC,QAA3ByL,EAAEvN,EAAKsE,4BAAoB,IAAAiJ,OAAA,EAAzBA,EAA2BlK,gBAhkBtFtB,EAAA4C,aAAuB,GAiE5B3F,EAAAA,EAAAA,IAAA,CAATwO,EAAAA,IAAQ,iCAkoBb,+kBCpsBM,MAAOC,UAAkCrZ,EAAAA,cAyB3CsB,YAAmBC,GACfC,MAAMD,GAvBO,KAAAqM,eAAyB5B,EAAiB6B,KAEnD,KAAAC,aAAuB9B,EAAiB+B,KAM/B,KAAAC,UAAoBhC,EAAiBgC,UAIrC,KAAAC,iBAA0C,GAEnD,KAAAQ,aAAgC,GAoGvB,KAAAP,cAAgB,KAC7BtM,KAAKuM,UAASC,IAAiB,CAC3BC,WAAYrC,EAAiBuJ,SAC7BjH,WAAYF,EAAcE,eAwTjB,KAAAc,0BAA4B,CAACC,EAA4BC,IAA0B,KAChG,MAAM,eAAEC,GAAmB3N,KAAKoD,MAC1BwK,EAAU,CAAE,CAACH,IAAWC,GAC9B1N,KAAKuM,SAAS,CAAEoB,eAAcnK,EAAAA,EAAA,GAAOmK,GAAmBC,MAwI3C,KAAAC,qBAAuB,CAACC,EAA6BC,IAA0B,KAC5F,MAAMb,EAAWa,EAAOb,SAAWa,EAAOb,SAAW,GAC/Cb,EAA0C,CAAC,CAAEZ,IAAKqC,EAAqBhC,QAASoB,IAGtF,GAAIc,EAAAA,gBAAgBC,YAAYF,EAAOG,oBACnC,IAAK,MAAMlE,KAAQ+D,EAAOG,mBAAoB,CAC1C,MAAMC,EAAcnE,EAAKoE,MAAM3C,IAC/BY,EAAiBgC,KAAK,CAClB5C,IAAK0C,EACLrC,QAAS9B,EAAKhM,KACdsQ,qBAAsB,CAAEjB,QAASrD,EAAKqD,QAAQkB,kBAI1DvO,KAAKuM,SAAS,CACVjC,cAAe0D,EAAAA,gBAAgBC,YAAY5B,GAAoBA,EAAmB,CAAC,CAAEZ,IAAK,aAUjF,KAAA+C,sBAAwB,CAACnL,EAAqBoL,IAAsB,KAC5EzO,KAAKoD,MAAMsL,cASZ+I,EAA0B9I,aAAc,EACxC3O,KAAKuM,SAAS,CACVE,WAAYpJ,EAAKvF,GACjB8Q,oBAAqBvL,EAAK6J,SAC1B2B,WAAYJ,MAZhBzO,KAAKuM,SAAS,CACVE,WAAYpJ,EAAKvF,GACjB+Q,WAAYJ,IAEZzO,KAAKL,MAAM+K,SAASoE,mBACpB9O,KAAK6N,qBAAqBxK,EAAK8K,YAAc9K,EAA7CrD,KAgBK,KAAA+O,cAAgB,IAAM,KACnC0I,EAA0B9I,aAAc,EACxC3O,KAAKuM,UAASC,IAAiB,CAAGC,WAAYD,EAAcqC,gBAO/C,KAAAG,oBAAuBjP,IAChCC,KAAKiP,SAASC,UAAYlP,KAAKiP,SAASC,QAAQC,SAASpP,EAAMI,UAC1DH,KAAKoD,MAAMsL,aAGZ1O,KAAKuM,SAAS,CAAEE,gBAAYpN,EAAWuP,oBAAqB,GAAIlC,WAAW,IAF3E1M,KAAKuM,SAAS,CAAEE,WAAYrC,EAAiBuJ,SAAU/E,oBAAqB,GAAIlC,WAAW,MAUtF,KAAAgL,gBAAkB,KAC/B,MAAM,aAAE7K,GAAiB7M,KAAKL,MAAM+K,SAEmE,IAAAiN,GADvG3X,KAAK6M,aAAeA,EAChBmB,EAAAA,gBAAgBC,YAAYpB,IAAiBmB,EAAAA,gBAAgBC,YAAYpB,EAAa,GAAGG,YAC7D,QAA5B2K,EAAA3X,KAAK6M,aAAa,GAAGG,eAAO,IAAA2K,GAA5BA,EAA8B1W,KAAI+I,IAC9B,MAAM4N,EAAgB,GAOtB,OANArV,OAAOC,OAAOoV,EAAe,CAAEzJ,YAAanE,EAAKmE,cACjD5L,OAAOC,OAAOoV,EAAe,CAAE1K,SAAUlN,KAAKL,MAAM+K,SAAS1J,UAAU6W,sBACvEtV,OAAOC,OAAOoV,EAAe,CAAEtK,QAAStD,EAAKsD,UACzCU,EAAAA,gBAAgBC,YAAYjE,EAAKgD,UAAYhD,EAAK8N,aAAeC,EAAAA,WAAWjE,QAC5E9J,EAAKgD,QAAQgL,QAAQJ,GAElB5N,OAYF,KAAAoF,uBAAyB,CAAClF,EAAe0E,EAA8BS,KAE/EoI,EAA0B9I,aADJ,IACmBzE,MAGzCmF,IAAmBT,IAGjBA,IAAwBS,EAMlB,KAAAC,cAAgB,KACxBtP,KAAKoD,MAAMsL,aAGZ1O,KAAKuM,SAAS,CAAEE,gBAAYpN,EAAWuP,oBAAqB,GAAIlC,WAAW,IAF3E1M,KAAKuM,SAAS,CAAEE,WAAYrC,EAAiBuJ,SAAU/E,oBAAqB,GAAIlC,WAAW,KAUlF,KAAAgD,aAAgB3P,IACzBA,EAAM6P,UAAY5P,KAAKoM,YAAcpM,KAAKoD,MAAMsL,cAAgB1O,KAAKoD,MAAMsJ,WAC3E1M,KAAKuM,SAAS,CAAEE,WAAYrC,EAAiBuJ,SAAU/E,oBAAqB,GAAIlC,WAAW,KAOlF,KAAAmD,sBAAwB,KACrC7P,KAAKuM,SAAS,CAAEmC,aAAc1O,KAAK0O,gBAnqBnC1O,KAAKiP,SAAW7Q,EAAAA,YAChB4B,KAAK8P,YAAc1R,EAAAA,YACnB,MAAM,aAAEyO,GAAiB7M,KAAKL,MAAM+K,SACpC,GAAIsD,EAAAA,gBAAgBC,YAAYpB,IAAiBmB,EAAAA,gBAAgBC,YAAYpB,EAAa,GAAGG,SAAU,CACnG,MAAM+C,EAAclD,EAAa,GAAGG,QAAQ,GAAGmB,YAActB,EAAa,GAAGG,QAAQ,GAAGmB,YAAc,GAChGjB,EAAWL,EAAa,GAAGG,QAAQ,GAAGE,SAAWL,EAAa,GAAGG,QAAQ,GAAGE,SAAW,GAC7FlN,KAAKqM,iBAAmB,CAAC,CAAEZ,IAAKsE,EAAajE,QAASoB,IAGlDc,EAAAA,gBAAgBC,YAAYpB,EAAa,GAAGG,QAAQ,GAAGkB,qBACvDrB,EAAa,GAAGG,QAAQ,GAAGkB,mBAAmBjN,KAAI+I,IAC9C,MAAMmE,EAAcnE,EAAKoE,MAAM3C,IAM/B,OALAzL,KAAKqM,iBAAiBgC,KAAK,CACvB5C,IAAK0C,EACLrC,QAAS9B,EAAKhM,KACdsQ,qBAAsB,CAAEjB,QAASrD,EAAKqD,QAAQkB,kBAE3C,QAInBvO,KAAKoD,MAAQ,CACTqJ,WAAYrC,EAAiBuJ,SAC7B/E,oBAAqB,GACrBC,gBAAYxP,EACZsO,eAAgB,GAChBe,aAAc1O,KAAK0O,aACnBpE,cAAetK,KAAKqM,iBACpBK,WAAW,GAGf1M,KAAKgQ,kBAAmBC,EAAAA,EAAAA,oBACpBjQ,KAAKL,MAAM+K,SAAS1F,QAAQC,QAAQiL,kBACpClQ,KAAKL,MAAM+K,SAASyF,aACpBnQ,KAAKL,MAAM+K,SAAS0F,WAExBpQ,KAAKqQ,SAAUC,EAAAA,EAAAA,kBAAiB,QAAStQ,KAAKgQ,iBAAkB,GAAI,IACpEhQ,KAAKuR,YAAa0E,EAAAA,EAAAA,wBAAuBjW,KAAKgQ,iBAAkBhQ,KAAKqQ,SAG/D,mBACN,MAAoG,QAA7FG,EAAAA,EAAAA,UAAS,CAAEC,QAASC,EAAAA,YAAYC,QAAS3L,QAAShF,KAAKL,MAAM+K,SAAS1F,QAAQC,UAGlFlC,oBACH/C,KAAK4Q,mCAAoCC,EAAAA,EAAAA,mBAAkB/P,OAAQ,SAAUd,KAAK6P,uBAClFtK,SAASuL,iBAAiB,UAAY9Q,KAAK0P,cAA2C,GACtF1P,KAAK6P,wBACLtK,SAASwL,KAAKD,iBAAiB,YAAa9Q,KAAKgP,qBACjDhP,KAAK0X,kBAGF1U,qBAAkB,IAAAgO,EACO,QAAxBA,EAAAhR,KAAK8P,YAAYZ,eAAO,IAAA8B,GAAxBA,EAA0BxB,SAAS,IAAMxP,KAAKL,MAAM+K,SAASuG,cAC5DjR,KAAK8P,YAAYZ,QAAQM,SAAS,GAAmBC,QAIvDyB,uBACHpQ,OAAOqQ,oBAAoB,SAAUnR,KAAK4Q,mCAAoC,GAC9ErL,SAASwL,KAAKI,oBAAoB,YAAanR,KAAKgP,qBAAqB,GAGtE1L,SACHtD,KAAKkM,aAAe9B,EAAiB8I,IAErC,OACI9U,EAAAA,cAACgL,EAAAA,KAAI,CAACrL,UAAU,qBAAqBqT,IAAKpR,KAAKiP,UAC1CjP,KAAKoD,MAAMsL,aACR1O,KAAK0R,oBAELtT,EAAAA,cAAAA,EAAAA,SAAA,KACIA,EAAAA,cAACC,EAAAA,OAAMkE,OAAAC,OAAA,CACHzE,UAAU,uBACVI,QAAS6B,KAAKsM,cAAa,gBAT7B,oBAWE+E,MAAOrR,KAAKL,MAAM+K,SAAS1J,UAAUsQ,mBAAkB,aAC3CtR,KAAKL,MAAM+K,SAAS1J,UAAUsQ,oBACtCtR,KAAKuR,aAEZvR,KAAKwR,wBAiBlBA,sBACJ,OACIpT,EAAAA,cAACqT,EAAAA,SAAQ,CAAC1T,UAAU,oCAAoCkG,OAAQjE,KAAKoD,MAAMsJ,WACtE1M,KAAKoD,MAAMsL,aAAe1O,KAAK0R,oBAAsB1R,KAAK2R,sBAK/DD,oBACJ,MAAM,iBAAEG,EAAgB,2BAAEC,EAA0B,uBAAEC,EAAsB,WAAEC,GAAehS,KAAKL,MAAM+K,SAGxG,OADA1K,KAAKkM,aAAe9B,EAAiB8I,IAEjC9U,EAAAA,cAAC0L,EAAAA,OAAMvH,OAAAC,OAAA,GACCwP,EAAU,CACdjU,UAAWU,GAAAA,CACPuT,EAAWjU,UACXiC,KAAKoD,MAAMsL,mBAA0CrP,IAA1BW,KAAKoD,MAAMqJ,WAA2B,QAAU,YAG/ErO,EAAAA,cAACgL,EAAAA,KAAI7G,OAAAC,OAAA,GAAKxC,KAAKL,MAAM+K,SAASkH,SAAQ,CAAEK,SAAS,OAC5CjS,KAAKoD,MAAMsL,mBAA0CrP,IAA1BW,KAAKoD,MAAMqJ,YACnCrO,EAAAA,cAACgL,EAAAA,KAAI7G,OAAAC,OAAA,GAAKsP,GACN1T,EAAAA,cAACgL,EAAAA,KAAI7G,OAAAC,OAAA,GAAKqP,EAAgB,CAAE1T,QAAS6B,KAAK+O,mBAC1C3Q,EAAAA,cAACgL,EAAAA,KAAI7G,OAAAC,OAAA,GAAKuP,GAAyB/R,KAAKoD,MAAMwL,sBAGrD5O,KAAKkS,mBAMdP,qBACJ,MAAM,WAAEK,GAAehS,KAAKL,MAAM+K,SAClC,OACItM,EAAAA,cAAC0L,EAAAA,OAAMvH,OAAAC,OAAA,GAAKwP,EAAU,CAAEjU,UAAWU,GAAAA,CAAWuT,EAAWjU,aACrDK,EAAAA,cAACgL,EAAAA,KAAI7G,OAAAC,OAAA,GAAKxC,KAAKL,MAAM+K,SAASkH,SAAQ,CAAEK,SAAS,OAC5CjS,KAAKkS,iBACN9T,EAAAA,cAAA,OAAKL,UAAU,uBACXK,EAAAA,cAAA,UAAQL,UAAU,qBAAoB,aAAY,QAAQI,QAAS6B,KAAKsP,mBAOpF6C,kBAAkBnI,GACtB,OAAIA,EAAKsD,UAAY8E,EAAAA,iBAAiBC,mBAAmBrI,EAAKsD,SACnDtN,KAAKsS,oBAAoBtI,GACxBA,EAAKsD,QAGV,KAFItN,KAAKuS,oBAAoBvI,GAKhCkI,iBACJ,MAAM,SAAEM,GAAaxS,KAAKL,MAAM+K,SAChC,IAAImC,EAAgC,GAEhCA,EADA7M,KAAKoD,MAAMsL,aACI1O,KAAK6M,aAEL7M,KAAKL,MAAM+K,SAASmC,aAEvC,MAAM,WAAEJ,GAAezM,KAAKoD,MACtBqP,EAA8B,GACpC,IAAIwF,EAA2C,GAC3CC,EAAkD,GACtD,MAAMC,EAAiBC,KAAKC,MAAMD,KAAKE,UAAUzL,IAEjD,IAAK,MAAM7C,KAAQmO,EACfD,EAAqBlO,EAAKgD,QAAS4G,QAAOb,GAAeA,EAAYjV,IAAMiV,EAAYjV,IAAM+V,EAAAA,gBAAgBC,SAC7G9J,EAAKgD,QAAUkL,EAGnB,IAAK,MAAMlO,KAAQ6C,EACfoL,EAAcjO,EAAKgD,QAAS4G,QAAOb,GAAeA,EAAYjV,IAAMiV,EAAYjV,GAAK+V,EAAAA,gBAAgBC,SAGzG,GAAI9T,KAAKoD,MAAMsL,mBAA+BrP,IAAfoN,GAA4BuB,EAAAA,gBAAgBC,YAAYpB,GAAe,CAClG,IAAI6F,EAAiC,GACrC,IAAK,MAAM6F,KAAiB1L,EAAc,CACtC,GAAI0L,EAAcza,KAAO2O,EAAY,CACjCiG,EAAW6F,EACNd,EAA0B9I,YAK3B3O,KAAKuM,SAAS,CACVsC,gBAAYxP,EACZuP,oBAAqB2J,EAAcrL,WANvClN,KAAKuM,SAAS,CACVsC,gBAAYxP,IAQpB,MAGJ,GADAqT,EAAW1S,KAAK2S,gBAAgB4F,GAC5B7F,GAAYA,EAAS5U,KAAO2O,EAC5B,MAIJiG,GACAD,EAAapE,KACTjQ,EAAAA,cAACgL,EAAAA,KAAI7G,OAAAC,OAAA,CAACoE,IAAK8L,EAAS5U,IAAQ0U,GACvB,IACAxS,KAAK4S,oBAAoBF,GAAS,IAAG,UAI/C,CACH,IAAK,MAAOxI,EAAOF,KAASmO,EAAetF,UACvCJ,EAAapE,KACTjQ,EAAAA,cAACgL,EAAAA,KAAI7G,OAAAC,OAAA,CACDoE,IAAKoD,EAAKlM,IACN0U,EAAQ,CACZpB,IAAKpR,KAAKoP,uBAAuBlF,EAAOlK,KAAKoD,MAAMwL,oBAAqB5E,EAAKkD,UAAYlN,KAAK8P,YAAc,OAE3G9P,KAAK4S,oBAAoB5I,KAKtC,IAAK,MAAOE,EAAOF,KAASiO,EAAYpF,UACpCJ,EAAapE,KACTjQ,EAAAA,cAACgL,EAAAA,KAAI7G,OAAAC,OAAA,CACDoE,IAAKoD,EAAKlM,IACN0U,EAAQ,CACZpB,IAAKpR,KAAKoP,uBAAuBlF,EAAOlK,KAAKoD,MAAMwL,oBAAqB5E,EAAKkD,UAAYlN,KAAK8P,YAAc,OAE3G9P,KAAK4S,oBAAoB5I,KAM1C,OAAOyI,EAGHE,gBAAgB3I,GACpB,MAAM0J,EAAW1J,MAAAA,OAAI,EAAJA,EAAMgD,QACvB,GAAI0G,GAAY1F,EAAAA,gBAAgBC,YAAYyF,GACxC,IAAK,IAAIxJ,EAAQ,EAAGA,GAASwJ,EAAS/N,OAASyE,EAAiB8I,IAAKhJ,IAAS,CAC1E,MAAM8C,EAAyB0G,EAAS5U,OAAOoL,IAC/C,IAAI8I,EAAehJ,MAAAA,OAAI,EAAJA,EAAMlM,GAEzB,GAAIkP,EAAQlP,KAAOkC,KAAKoD,MAAMqJ,WAU1B,OATIuG,IAAiB5I,EAAiBuJ,UAAY3G,EAAQlP,GAAM+V,EAAAA,gBAAgBC,SAC5Ed,OAAe3T,GAGdoY,EAA0B9I,YAG3B3O,KAAKuM,SAAS,CAAEsC,WAAYmE,EAAcpE,oBAAqB5B,EAAQE,WAFvElN,KAAKuM,SAAS,CAAEsC,WAAYmE,IAIzBhG,EAEX,MAAMmG,EAAQnT,KAAK2S,gBAAgB3F,GACnC,GAAImG,EACA,OAAOA,EAInB,OAAO,KAGHP,oBAAoB/F,GACxB,OAAImB,EAAAA,gBAAgBC,YAAYpB,EAAaG,SACrChN,KAAKoD,MAAMsL,mBAA0CrP,IAA1BW,KAAKoD,MAAMqJ,WAC/BzM,KAAKoT,eAAevG,EAAaG,QAASH,EAAa/O,IAAI,GAGlEM,EAAAA,cAAAA,EAAAA,SAAA,KACK4B,KAAKqT,sBAAsBxG,GAC3B7M,KAAKoT,eAAevG,EAAaG,QAASH,EAAa/O,KAGzD+O,EAAaS,UAAY8E,EAAAA,iBAAiBC,mBAAmBxF,EAAaS,SAC1EtN,KAAKsS,oBAAoBzF,EAAcA,EAAa/O,IACnD+O,EAAaS,QAIlB,KAHItN,KAAKuS,oBAAoB1F,GAMhCuG,eAAeE,EAAgC7G,EAAqB8G,GAAmB,IAAAC,EAAAC,EAC3F,IAAIC,EAAwCJ,EACxC7G,IAAerC,EAAiBuJ,WAChCD,EAAWJ,EAAcM,QAAOb,GAAeA,EAAYjV,IAAMiV,EAAYjV,IAAM+V,EAAAA,gBAAgBC,UAGvG,MAAM,SAAEtB,GAAaxS,KAAKL,MAAM+K,SAC1BqJ,EAA0E,QAAlDP,EAAGxT,KAAKL,MAAM+K,SAASzK,OAAO+T,4BAAoB,IAAAR,GAAAA,EAC1ES,EAAqE,QAA9CR,EAAGzT,KAAKL,MAAM+K,SAASzK,OAAOiU,wBAAgB,IAAAT,EAAAA,EAAIrJ,EAAiB+J,MAEhG,GAAI1H,GAAczM,KAAKoD,MAAMqJ,aAAeA,EAExC,OADAzM,KAAKL,MAAM+K,SAAS1F,QAAQoL,UAAUnG,MAAM,gEACrC,KAGX,IAAKyJ,IAAa1F,EAAAA,gBAAgBC,YAAYyF,GAE1C,OADA1T,KAAKL,MAAM+K,SAAS1F,QAAQoL,UAAUnG,MAAM,4DACrC,KAGX,IAAImK,EAAyB,GAC7B,MAAMC,EAAcX,EAASzS,KAAI,CAAC8M,EAAuB7D,KACrD,MAAMoK,EAAavG,EAAOf,SAAWgB,EAAAA,gBAAgBC,YAAYF,EAAOf,SACxE,IAAI0F,EAQA1F,EANA0F,EADA4B,GAActU,KAAKoD,MAAMsL,aACd1O,KAAKqT,sBAAsBtF,EAAQtB,EAAYvC,GACnDlK,KAAKkM,eAAiB9B,EAAiB8I,KAAQoB,EAG3C,KAFAtU,KAAKuU,YAAYxG,EAAQ7D,GAKxC,MAAMsK,EACFF,GAAcP,GAA4B/T,KAAKkM,cAAgBuI,KAAKC,MAAMT,GAA2B7J,EAAiB8I,IAEtHoB,IAAetU,KAAKoD,MAAMsL,eACtB1O,KAAKkM,cAAgB9B,EAAiBuK,IACtC3H,EAAUhN,KAAK4U,qBAAqB7G,GAC7B/N,KAAKkM,cAAgBlM,KAAKgM,eAAiB5B,EAAiB8I,MACnElT,KAAKkM,eACLkI,EAAiB,SAASpU,KAAKkM,aAAa2I,aAC5C7H,EAAUhN,KAAKoT,eAAerF,EAAOf,aAAS3N,GAAW,KAG7DmV,GAAmBxU,KAAKoD,MAAMsL,eAC9B1O,KAAKkM,eACLkI,EAAiBL,EAA2B,SAAS/T,KAAKkM,aAAa2I,aAAe,GACtF7H,EAAUhN,KAAKoT,eAAerF,EAAOf,QAASe,EAAOjQ,IAAI,IAE7D,MAAMiS,EAAchC,EAAOI,YAAcJ,EAAOI,YAAc,GAC9D,OACI/P,EAAAA,cAACgL,EAAAA,KAAI7G,OAAAC,OAAA,GACGgQ,EAAQ,CACZ5L,IAAKmH,EAAOjQ,GACZgX,YAAa9U,KAAKkM,eAAiB9B,EAAiB8I,KAAOlT,KAAK6N,qBAAqBkC,EAAahC,GAClGhQ,UAAWU,GAAAA,CAAW+T,EAASzU,UAAWyW,GAAmB,eAC7DpD,IAAKpR,KAAKoP,uBAAuBlF,EAAOlK,KAAKoD,MAAMwL,oBAAqBb,EAAOb,UAAYlN,KAAK8P,YAAc,OAE7G4C,EACA1F,MAIb,OAAOhN,KAAK+U,YAAYX,EAAgBC,EAAad,GAGjDgB,YAAYxG,EAAuB7D,GACvC,IAAIwI,EAMJ,OAJIA,EADA1S,KAAKkM,eAAiB9B,EAAiB8I,IAC5BnF,EAAOT,QAAUtN,KAAKgV,4BAA4BjH,EAAQ7D,GAASlK,KAAKuS,oBAAoBxE,GAE5FA,EAAOT,QAAUtN,KAAKsS,oBAAoBvE,EAAQ7D,GAASlK,KAAKuS,oBAAoBxE,GAE5F2E,EAGHkC,qBAAqBlC,GAAuB,IAAAuC,EAChD,MAAMb,EAAiB,SAASpU,KAAKkM,aAAa2I,aAC5CK,EAAmBxC,EAASxF,SAE5BiI,OAAkC9V,IAArB6V,EAAiCA,EAAmB,GACjEE,EAFWpV,KAAKoD,MAAMuK,eAGtBsG,EAAqE,QAA9CgB,EAAGjV,KAAKL,MAAM+K,SAASzK,OAAOiU,wBAAgB,IAAAe,EAAAA,EAAI7K,EAAiB+J,MAEhG,IAAIzG,GAAe,EACf0H,EAAK1C,EAAS5U,MACd4P,GAAe,GAEnB,MAAM2H,EAA2B,CAAEC,QAAS,EAAGrR,OAAQyJ,GACvD,OACItP,EAAAA,cAACmX,EAAAA,OAAM,CACHC,cAAeH,EACfzO,IAAK8L,EAAS5U,GACdC,UAAWU,GAAAA,CAAW,yBAA0B2V,GAChDqB,UAAU,sBACVC,WAAW,uBACXC,eAAe,QACfT,iBAAkBC,EAClBS,SAAU5V,KAAKwN,0BAA0BkF,EAAS5U,GAAI4P,IAEtDtP,EAAAA,cAAA,WACKsU,EAAS1F,QAAS/L,KAAK4U,GAChB7H,EAAAA,gBAAgBC,YAAY4H,EAAY7I,WACxChN,KAAKkM,eACDlM,KAAKkM,aAAe+H,GACbjU,KAAK4U,qBAAqBiB,GAGlC7V,KAAKmS,kBAAkB0D,OAmB1CxC,sBAAsBtF,EAAuBtB,EAAqBvC,GACtE,OACI9L,EAAAA,cAACgL,EAAAA,KAAI7G,OAAAC,OAAA,CACDoE,IAAKsD,GACDlK,KAAKL,MAAM+K,SAASrM,OAAM,CAC9BF,QAAS6B,KAAKwO,sBAAsBT,EAAQtB,GAAW,kBACtCzM,KAAKoD,MAAMqJ,YAAczM,KAAKoD,MAAMqJ,aAAesB,EAAOjQ,IAAG,mBAC5DkC,KAAKoD,MAAMqJ,YAAczM,KAAKoD,MAAMqJ,aAAesB,EAAOjQ,IAAG,cAClE2O,EAAU,aACXzM,KAAKoD,MAAMsL,aAAeX,EAAO9P,eAAYoB,IAExD0O,EAAOb,UAKZoF,oBAAoBvE,EAAuB7D,GAC/C,MAAM,KAAE4L,GAAS9V,KAAKL,MAAM+K,SACtBwC,EAAWa,EAAOb,SAAWa,EAAOb,SAAW,GACrDlN,KAAKqQ,QAAQ0F,cAAcC,MAAQ9I,EACnC,MAAMqE,GAAa0E,EAAAA,EAAAA,wBAAuBjW,KAAKgQ,iBAAkBhQ,KAAKqQ,SACtE,OACIjS,EAAAA,cAACgL,EAAAA,KAAI7G,OAAAC,OAAA,GACGsT,EAAI,CACRlP,IAAKsD,EACLgM,KAAMnI,EAAOT,SACTiE,EAAU,CACdpR,OAAQ4N,EAAOoI,iBAAmB,cAAW9W,EAC7ClB,SAASiY,EAAAA,EAAAA,kBAAiBpW,KAAKgQ,iBAAkBhQ,KAAKqQ,QAASnD,KAE9Da,EAAOb,UAKZ8H,4BAA4BjH,EAAuB7D,GAA6C,IAA7BmM,IAAAC,UAAA3Q,OAAA,QAAAtG,IAAAiX,UAAA,KAAAA,UAAA,GACvE,MAAM,KAAER,GAAS9V,KAAKL,MAAM+K,SACtBwC,EAAWa,EAAOb,SAAWa,EAAOb,SAAW,GAC/C6C,EAAchC,EAAOI,YAAcJ,EAAOI,YAAc,GAC9DnO,KAAKqQ,QAAQ0F,cAAcC,MAAQ9I,EACnC,MAAMqE,GAAa0E,EAAAA,EAAAA,wBAAuBjW,KAAKgQ,iBAAkBhQ,KAAKqQ,SACtE,OACIjS,EAAAA,cAACgL,EAAAA,KAAI7G,OAAAC,OAAA,GACGsT,EAAI,CACRlP,IAAKsD,EACL4K,YAAauB,GAAiBrW,KAAK6N,qBAAqBkC,EAAahC,GACrEmI,KAAMnI,EAAOT,SACTiE,EAAU,CACdpT,SAASiY,EAAAA,EAAAA,kBAAiBpW,KAAKgQ,iBAAkBhQ,KAAKqQ,QAASnD,KAE9Da,EAAOb,UAKZqJ,uBAAuBrJ,EAAmBG,GAC9C,MAAM,KAAEyI,GAAS9V,KAAKL,MAAM+K,SAC5B1K,KAAKqQ,QAAQ0F,cAAcC,MAAQ9I,EACnC,MAAMqE,GAAa0E,EAAAA,EAAAA,wBAAuBjW,KAAKgQ,iBAAkBhQ,KAAKqQ,SACtE,OAAInD,GAAYG,EAERjP,EAAAA,cAACgL,EAAAA,KAAI7G,OAAAC,OAAA,GAAKsT,EAAI,CAAEI,KAAM7I,GAAakE,EAAU,CAAEpT,SAASiY,EAAAA,EAAAA,kBAAiBpW,KAAKgQ,iBAAkBhQ,KAAKqQ,QAASnD,KACzGA,GAIN,KAGHqF,oBAAoBxE,EAAuB7D,GAC/C,MAAM,KAAEsM,GAASxW,KAAKL,MAAM+K,SAC5B,OACItM,EAAAA,cAACgL,EAAAA,KAAI7G,OAAAC,OAAA,CAACoE,IAAKsD,GAAWsM,GACjBzI,EAAOb,UAKZ6H,YAAY0B,EAAepC,EAA4BqC,GAAmB,IAAAC,EAC9E,MAAM,aAAEC,EAAY,kBAAEC,EAAiB,kBAAE/H,EAAiB,uBAAEgI,GAA2B9W,KAAKL,MAAM+K,SAC5FqM,GACD/W,KAAKoD,MAAMsL,cACZI,GAC6B,OAA7B9O,KAAKoD,MAAMkH,oBACkBjL,IAA7BW,KAAKoD,MAAMkH,gBACVoM,EACCM,GACDhX,KAAKoD,MAAMsL,cAAgBoI,GAA0B9I,EAAAA,gBAAgBC,YAAYjO,KAAKoD,MAAMkH,iBAAmBoM,EAC9GO,EACFjX,KAAKkM,aAAe9B,EAAiBuK,KAAOoC,EAAyBH,EAAc7Y,UAAY,kBACnGiC,KAAKkM,aAAe9B,EAAiB8I,IACrC,MAAMgE,EACFH,GACA/W,KAAKL,MAAM+K,SAASzK,OAAOiU,kBAC3BlU,KAAKL,MAAM+K,SAASzK,OAAOiU,iBAAmB9J,EAAiBuK,KAC/D,sBAEEwC,EAAyC,QAA3BR,EAAG3W,KAAKoD,MAAMkH,qBAAa,IAAAqM,OAAA,EAAxBA,EAA0B/C,QAAOxF,IAAUgE,EAAAA,iBAAiBC,mBAAmBjE,EAAM3C,OACtG2L,EAAqBD,MAAAA,OAAc,EAAdA,EAAgBlW,KAAI+I,GAAQA,EAAKyB,MAAK4L,KAAK,KACtE,OACIjZ,EAAAA,cAACgL,EAAAA,KAAI7G,OAAAC,OAAA,GAAKoU,EAAY,CAAE7Y,UAAWkZ,IAC/B7Y,EAAAA,cAACgL,EAAAA,KAAI7G,OAAAC,OAAA,GACGxC,KAAKL,MAAM+K,SAASkH,SAAQ,CAChC7T,UAAWU,GAAAA,CACPuB,KAAKL,MAAM+K,SAASkH,SAAS7T,UAC7B0Y,EACAM,GAA0B,gBAC1BG,KAGH7C,GAELjW,EAAAA,cAAA,OAAKL,UAAU,2BAA2B6I,IAAKwQ,GAC1CL,GACG/I,EAAAA,gBAAgBC,YAAYkJ,IAC5BA,EAAelW,KAAI+I,IAAI,IAAAsN,EAAAC,EAAA,OACnBnZ,EAAAA,cAACgL,EAAAA,KAAI7G,OAAAC,OAAA,GAAKqU,EAAiB,CAAE9Y,UAAW8Y,EAAmB9Y,UAAW6I,IAAKoD,EAAKyB,MAC3EpB,EAAiBrK,KAAKL,MAAe,QAAV2X,EAAEtN,EAAKyB,WAAG,IAAA6L,EAAAA,EAAI,GAAItN,EAAK8B,QAAS+I,YAC3DmC,GACGhX,KAAKuW,uBAAuBvM,EAAK8B,QAAkC,QAA3ByL,EAAEvN,EAAKsE,4BAAoB,IAAAiJ,OAAA,EAAzBA,EAA2BlK,gBA5iBtFoK,EAAA9I,aAAuB,GAkE5B3F,EAAAA,EAAAA,IAAA,CAATwO,EAAAA,IAAQ,iCA+nBb,UC7sBA,EAR4B7X,GACpBA,EAAMM,OAAOuY,cACNpa,EAAAA,cAACqZ,EAAyB,CAAC/M,SAAU/K,IAGzCvB,EAAAA,cAAC2N,EAA0B,CAACrB,SAAU/K,qCCb3C,MAAgBiD,EAoBX,0BACH,OAAOA,EAAW6V,iBAXC7V,EAAA6V,gBAAkB,wRCZtC,MAAMC,EAA0C/Y,GAC5CvB,IAAAA,cAAA,KAAGL,UAAU,2BAA2B4B,EAAM3B,2kBCsCzD,IAAM2a,EAAN,cAA4Bva,EAAAA,UAOxBsB,YAAYC,GACRC,MAAMD,GAiHH,KAAAG,oBAAuBC,GAA0CC,KAAKL,MAAMM,OAAOC,QAASlC,KAAO+B,EAAMI,OAAOlB,MAEhH,KAAA2Z,0BAA6B7Y,GAC/BC,KAAKL,MAAMM,OAAO4Y,cAAe7a,KAAO+B,EAAMI,OAAOlB,MAEzC,KAAA6Z,cAAgB,KAC7B,GAAI9Y,KAAKL,MAAMqF,QAAQC,QAAQ8T,KAAKC,kBAAoBhZ,KAAKoD,MAAM6V,QAAS,CACxEjZ,KAAKuM,SAAS,CAAE0M,SAAS,IACzB,MAAMnQ,EAAQ,IAAIoQ,EAAAA,kBAAkBlZ,KAAKL,MAAMqF,QAAQC,QAAQ2F,cAE/DuO,EAAAA,EAAAA,cAAarQ,EAAO9I,KAAKL,MAAMqF,QAAQ2F,eAClCyO,MAAK,KACEC,EAAAA,GAASC,WACTxY,OAAOyY,SAAS/W,OAAOoC,EAAAA,GAAoB,UAAW5E,KAAKL,MAAMqF,QAAQ2F,gBAAkB,OAGlG6O,OAAOvP,IACJjK,KAAKuM,SAAS,CAAE0M,SAAS,IACzBjZ,KAAKL,MAAMyQ,UAAUnG,MAAMA,EAAM1L,SACjCyB,KAAKL,MAAMyQ,UAAUqJ,MAAM,qCAnIvCzZ,KAAKoD,MAAQ,CAAE6V,SAAS,GACxBjZ,KAAKgQ,kBAAmBC,EAAAA,EAAAA,oBACpBjQ,KAAKL,MAAMqF,QAAQC,QAAQiL,kBAC3BlQ,KAAKL,MAAMwQ,aACXnQ,KAAKL,MAAMyQ,WAEf,MAAMC,GAAUC,EAAAA,EAAAA,kBAAiB,QAAStQ,KAAKgQ,iBAAkB0J,EAAAA,kBAAkBC,QACnF3Z,KAAK4Z,yBAA0B3D,EAAAA,EAAAA,wBAAuBjW,KAAKgQ,iBAAkBK,GAC7EA,EAAQ0F,cAAcC,MAAQ0D,EAAAA,kBAAkBja,OAChDO,KAAK6Z,yBAA0B5D,EAAAA,EAAAA,wBAAuBjW,KAAKgQ,iBAAkBK,GAC7EA,EAAQ0F,cAAcC,MAAQ0D,EAAAA,kBAAkBI,kBAChD9Z,KAAK+Z,8BAA+B9D,EAAAA,EAAAA,wBAAuBjW,KAAKgQ,iBAAkBK,GAClFA,EAAQ0F,cAAcC,MAAQ0D,EAAAA,kBAAkBM,iBAChDha,KAAKia,4BAA6BhE,EAAAA,EAAAA,wBAAuBjW,KAAKgQ,iBAAkBK,GAG7EpN,sBAAsBC,EAAoDC,GAC7E,OAAInD,KAAKoD,QAAUD,GAAanD,KAAKL,MAAM0D,OAASH,EAAUG,KAM3DC,SAAM,IAAA4W,EAAAC,EACT,MACIla,QAAQ,UAAElC,EAAS,QAAEmC,EAAO,cAAE2Y,GAAe,UAC7C7X,EACAgE,SAAS,cACL2F,EACA1F,SACI8T,MAAM,UAAEqB,EAAS,gBAAEpB,KAE1B,KACD3V,GACArD,KAAKL,MAEH0a,EAAWzV,EAAAA,GAAoB,eAAgB+F,GACrD,IAAI2P,EAAiB,GAAG1V,EAAAA,GAAoB,cAAe+F,yBACvD0O,EAAAA,GAASC,YACTgB,EAAiB,GAAGxZ,OAAOyY,SAASgB,SAASD,KAEjD,MAAME,EAAY,GAAGJ,QAAgBE,IAC/BG,EAAgBC,GAAAA,CAAU,oBAAqB3c,GAC/C4c,EAActX,EAAKsX,YACnBC,EAAoBD,EAAYE,aAAqDxb,IAA3Csb,EAAYE,OAAOC,oBAC7DC,EAA8C,QAA3Bb,EAAG7W,EAAK0X,2BAAmB,IAAAb,OAAA,EAAxBA,EAA0BW,OAEhDG,GACqB,QAAtBb,EAAAna,KAAKL,MAAMqF,QAAQiW,WAAG,IAAAd,GAAQ,QAARA,EAAtBA,EAAwBla,cAAM,IAAAka,OAAA,EAA9BA,EAAgCe,4CAChCH,MAAAA,OAAmB,EAAnBA,EAAqBI,mBADuD,EAE3E5X,EAASC,EAAAA,EAAA,GACRxD,KAAKL,OAAK,IACb5B,UAAW0c,EACX9B,cAAe,CACX/U,YAAa5D,KAAKL,MAClB5B,UAAW0c,GAEfW,eAAgBJ,GACZ5c,EAAAA,cAACwG,EAAAA,GAAa,CAAC7G,UAAU,0BAA0BC,KAAMgD,EAAUqa,sCAEvExX,SAAU7D,KAAKL,MAAMqF,QAAQC,QAAQqW,OAAOC,UAAoC,aAAxBZ,MAAAA,OAAW,EAAXA,EAAaa,QACrEtb,SAAU0a,GAAqB1a,GAAWA,EAAQlC,MAC9CI,EAAAA,cAACwG,EAAAA,GAAa,CACV7G,UAAU,6BACVgG,IAAK7D,EAAQ6D,IACb/F,KAAMkC,EAAQlC,KACd6G,UAAW,CAAEC,OAAQ9E,KAAKF,oBAAqBiF,eAAgB/E,KAAKL,MAAMqF,QAAQC,WAG1F4T,cAAe+B,GAAqB/B,GAAiBA,EAAc7a,MAC/DI,EAAAA,cAACwG,EAAAA,GAAa,CACV7G,UAAU,6BACVgG,IAAK8U,EAAc9U,IACnB/F,KAAM6a,EAAc7a,KACpB6G,UAAW,CAAEC,OAAQ9E,KAAK4Y,0BAA2B7T,eAAgB/E,KAAKL,MAAMqF,QAAQC,WAGhGwW,YAAazC,GACT5a,EAAAA,cAACC,EAAAA,OAAMkE,OAAAC,OAAA,CAACzE,UAAU,4BAA4BmY,KAAMsE,GAAexa,KAAK4Z,yBACnE5Z,KAAKL,MAAMqB,UAAU0a,uBAG9BC,YAAaf,GAAqBxc,EAAAA,cAACsa,EAAU,CAAC1a,KAAMgD,EAAU4a,qBAC9DC,cAAejB,GAAqB5B,GAChC5a,EAAAA,cAACC,EAAAA,OAAMkE,OAAAC,OAAA,CACHzE,UAAU,yBACVG,SAAU8c,EACV7c,QAAS6B,KAAK8Y,eACV9Y,KAAK6Z,yBAER7Z,KAAKL,MAAMqB,UAAU0a,uBAG9BI,YAAalB,GACTxc,EAAAA,cAACC,EAAAA,OAAMkE,OAAAC,OAAA,CACHzE,UAAU,6BACVmY,KAAMtR,EAAAA,GAAoB,UAAW5E,KAAKL,MAAMqF,QAAQ2F,gBACpD3K,KAAK+Z,8BAER/Z,KAAKL,MAAMqB,UAAU+a,qBAG9BC,WAAYpB,GACRxc,EAAAA,cAACC,EAAAA,OAAMkE,OAAAC,OAAA,CAACzE,UAAU,2BAA2BmY,KAAMmE,GAAcra,KAAKia,4BACjEja,KAAKL,MAAMqB,UAAUib,wBAKlC,OAAOjc,KAAKL,MAAMyF,WAAW7B,KAtH/BoV,GAAa3P,EAAAA,EAAAA,IAAA,CADlBE,EAAAA,IACKyP,GAkJN,oFCtLA,MAiCA,EAjC6DhZ,IACzD,MAAM,cACFgZ,EAAa,QACbzY,EAAO,cACP2Y,EAAa,WACb4C,EAAU,WACVE,EAAU,aACVE,EAAY,YACZC,EAAW,UACXE,EAAS,QACTnY,EAAO,eACPuX,GACAzb,EAEJ,OAAIkE,GACAlE,EAAMqF,QAAQoL,UAAUnG,MAAM,mDACvB,MAIP7L,EAAAA,cAAC0L,EAAAA,OAAMvH,OAAAC,OAAA,GAAKmW,GACPyC,EACAvC,EACA3Y,EACA4b,EACAH,EACAK,EACAH,EACAJ,2ECcN,MAAMS,EAAqBvc,IAC9B,MAAM0Q,GAAUC,EAAAA,EAAAA,kBAAiB,QAAS3Q,EAAMqQ,iBAAmB0J,EAAAA,kBAAkByC,oBAC/EC,GAA8BnG,EAAAA,EAAAA,wBAAuBtW,EAAMqQ,iBAAmBK,GACpFA,EAAQ0F,cAAcC,MAAQ0D,EAAAA,kBAAkB2C,mBAChD,MAAMC,GAA8BrG,EAAAA,EAAAA,wBAAuBtW,EAAMqQ,iBAAmBK,GACpFA,EAAQ0F,cAAcC,MAAQ0D,EAAAA,kBAAkB6C,kBAChD,MAAMC,GAAgCvG,EAAAA,EAAAA,wBAAuBtW,EAAMqQ,iBAAmBK,GACtF,MAAO,CACHvM,MAAO,CACHC,IAAKC,EAAAA,MACLjG,UAAW,0BACX0e,OAAQ9c,EAAMiW,SACd8G,gBAAiB,aACjBzY,OAAQtE,EAAMsE,OACd0Y,eAAgBhd,EAAMid,WAE1BC,YAAa,CAAE9Y,IAAK+Y,EAAAA,YAAa/e,UAAW,iCAAkC0e,OAAQ9c,EAAMiW,UAC5FmH,YAAa,CAAEhZ,IAAKiZ,EAAAA,YAAajf,UAAW,kCAC5CmG,UAAW,CAAEH,IAAKI,EAAAA,UAAWpG,UAAW,gCACxCkf,aACI7e,IAAAA,cAACC,EAAAA,OAAMkE,OAAAC,OAAA,CAACzE,UAAU,2BAA2BI,QAASwB,EAAMiW,UAAcwG,GACrEzc,EAAMqB,UAAUkc,wBAGzBC,aACI/e,IAAAA,cAACC,EAAAA,OAAMkE,OAAAC,OAAA,CACHzE,UAAU,2BACVI,QAASwB,EAAMyd,SACflf,UAAWyB,EAAM0d,SACbf,GAEH3c,EAAMqB,UAAUsc,sBAGzBpd,QAAS9B,IAAAA,cAAA,KAAGL,UAAU,6BAA6B4B,EAAMqB,UAAUuc,qBACnEC,MAAO7d,EAAM6d,MACbC,aAAc,CAAE1f,UAAW,mCAC3B2f,SACItf,IAAAA,cAAA,QAAAmE,OAAAC,OAAA,CACIzE,UAAU,8BACNye,EAA6B,CACjCle,KAAK,WACL+e,QAAS1d,EAAM0d,QAAO,eACR1d,EAAM0d,QACpBje,SAAUO,EAAMge,WAGxBC,UAAWxf,IAAAA,cAAA,KAAGL,UAAU,2BAA2B4B,EAAMqB,UAAU6c,ivBClE3E,MAAMC,UAAqB1f,EAAAA,UAKvBsB,YAAmBC,GACfC,MAAMD,GACNK,KAAK+d,QAAU/d,KAAK+d,QAAQC,KAAKhe,MACjCA,KAAKie,QAAUje,KAAKie,QAAQD,KAAKhe,MACjCA,KAAKke,iBAAmBle,KAAKke,iBAAiBF,KAAKhe,MACnDA,KAAKme,UAAY/f,EAAAA,YACjB4B,KAAKgQ,kBAAmBC,EAAAA,EAAAA,oBACpBjQ,KAAKL,MAAMqF,QAAQC,QAAQiL,kBAC3BlQ,KAAKL,MAAMwQ,aACXnQ,KAAKL,MAAMyQ,WAEf,IAAIgO,EAASpe,KAAKL,MAAMqF,QAAQC,QAAQoZ,IAAIC,WAAWF,OACnDG,GAAY,EAChB,GAAIH,EAAQ,CACRA,EAASA,EAAOI,UAAU,GAC1B,MAAMC,EAAOL,EAAOM,MAAM,KAC1B,IAAK,MAAMC,KAAOF,EAAM,CACpB,MAAMG,EAAWD,EAAID,MAAM,KAE3B,GADAH,EAA4B,mBAAhBK,EAAS,IAA2C,SAAhBA,EAAS,GACrDL,EACA,OAKZve,KAAKoD,MAAQ,CACTyb,YAAaN,EACblB,SAAS,EACTpE,SAAS,GAIVhW,sBAAsBC,EAAkDC,GAC3E,OAAInD,KAAKoD,QAAUD,GAAanD,KAAKL,MAAM0D,OAASH,EAAUG,KAM3DC,SACH,MACIrD,QAAQ,UAAElC,EAAS,WAAE+gB,GAAY,UACjC9d,EACA+d,OAAO,aAAEC,GACT3b,MAAM,YAAEsX,GACR3V,SACIC,SACI8T,MAAM,gBAAEC,MAGhBhZ,KAAKL,MACH8a,EAAgBC,GAAAA,CAAU,mBAAoB3c,GAE9CwF,EAASC,EAAAA,EAAA,GACRxD,KAAKL,OAAK,IACb5B,UAAW0c,EACXqD,aAAc,CACVla,YAAa5D,KAAKL,MAClB5B,UAAW0c,GAEf5W,QAAgC,YAAvB8W,EAAYa,OACrByD,aAA4B,IAAfH,GACT1gB,EAAAA,cAACC,EAAAA,OAAM,CAACN,UAAU,2BAA2BI,QAAS6B,KAAK+d,QAASmB,SAAUlf,KAAKme,WAC9End,EAAUme,4BAGnBrb,MACIkV,GACA2B,EAAYE,aACsBxb,IAAlCsb,EAAYE,OAAOuE,aACnBlD,EAAAA,EAAAA,GAAkB,CACdlb,UAASwC,EAAA,GAAOxC,GAChB4b,UAAW5c,KAAKme,UAChBd,QAASrd,KAAKoD,MAAMia,QACpBpZ,OAAQjE,KAAKoD,MAAMyb,YACnBrB,MAAOwB,EACPhP,iBAAkBhQ,KAAKgQ,iBACvB4F,SAAU5V,KAAK+d,QACfX,SAAUpd,KAAKie,QACfN,QAAS3d,KAAKke,qBAI1B,OAAOle,KAAKL,MAAMyF,WAAW7B,GAGzBwa,UACJ/d,KAAKuM,SAAS,CAAEsS,aAAc7e,KAAKoD,MAAMyb,YAAaxB,SAAS,IAG3DY,UACJ,GAAIje,KAAKL,MAAMqF,QAAQC,QAAQ8T,KAAKC,kBAAoBhZ,KAAKoD,MAAM6V,QAAS,CACxEjZ,KAAKuM,SAAS,CAAE0M,SAAS,IACzB,MAAMnQ,EAAQ,IAAIoQ,EAAAA,kBAAkBlZ,KAAKL,MAAMqF,QAAQC,QAAQ2F,cAE/DuO,EAAAA,EAAAA,cAAarQ,EAAO9I,KAAKL,MAAMqF,QAAQ2F,eAClCyO,MAAKiG,IACErf,KAAKL,MAAMM,OAAOqf,kBAClBxe,OAAOyY,SAAS/W,QAAO+c,EAAAA,EAAAA,IAAW,UAAWvf,KAAKL,MAAMqF,QAAQ2F,gBAAkB,KAElF6U,EAAAA,EAAAA,qBAAoB,CAAEC,cAAezf,KAAKL,MAAMqF,QAAQ2F,eAAiB0U,EAAKD,YAAc,IACvFhG,MAAKsG,IACF1f,KAAKL,MAAMqF,QAAQ2F,cAAcgV,OAC7B,IAAIC,EAAAA,oBAAoB5f,KAAKL,MAAMqF,QAAQC,QAAQ2F,aACnD8U,MAGPlG,OAAOvP,IACJjK,KAAKL,MAAMqF,QAAQ2F,cAAcgV,OAC7B,IAAIC,EAAAA,oBAAoB5f,KAAKL,MAAMqF,QAAQC,QAAQ2F,aACnDyU,GAEJrf,KAAKL,MAAMyQ,UAAUnG,MAAMA,EAAM1L,SACjCyB,KAAKL,MAAMyQ,UAAUqJ,MAAM,sCAI1CD,OAAOvP,IACJjK,KAAKuM,SAAS,CAAE0M,SAAS,IACzBjZ,KAAKL,MAAMyQ,UAAUnG,MAAMA,EAAM1L,SACjCyB,KAAKL,MAAMyQ,UAAUqJ,MAAM,oCAKnCyE,mBACJle,KAAKuM,SAAS,CAAE8Q,SAAUrd,KAAKoD,MAAMia,WAI7C,oFC9JA,MAwBA,EAxB2D1d,IACvD,MAAM,aAAEme,EAAY,YAAEmB,EAAW,MAAEnb,EAAK,QAAED,GAAYlE,EAEtD,OAAQkE,GAAWC,EACf1F,EAAAA,cAAC0L,EAAAA,OAAMvH,OAAAC,OAAA,GAAKsb,GACPmB,EACD7gB,EAAAA,cAACgL,EAAAA,KAAI7G,OAAAC,OAAA,GAAKsB,EAAMA,OACZ1F,EAAAA,cAACgL,EAAAA,KAAI7G,OAAAC,OAAA,GAAKsB,EAAM+Y,aAAc/Y,EAAM5D,SACpC9B,EAAAA,cAACgL,EAAAA,KAAI7G,OAAAC,OAAA,GAAKsB,EAAMI,WACXJ,EAAM0Z,MACPpf,EAAAA,cAACgL,EAAAA,KAAI7G,OAAAC,OAAA,GAAKsB,EAAM2Z,cACX3Z,EAAM4Z,SACN5Z,EAAM8Z,YAGfxf,EAAAA,cAACgL,EAAAA,KAAI7G,OAAAC,OAAA,GAAKsB,EAAMiZ,aACXjZ,EAAMqZ,aACNrZ,EAAMmZ,gBAInB,uECbR,MAAM4C,UAAyBzhB,EAAAA,cAEpB2E,oBACH,IAAI+c,EAAAA,EAAAA,IAAa9f,KAAKL,MAAMqF,QAAQC,SAChC,OAGJ,MAAMoZ,EAAMre,KAAKL,MAAMM,OAAO8f,oBAAsB/f,KAAKL,MAAMqF,QAAQiW,IAAIhb,OAAO+f,mCAC5EC,EAAS1a,SAASC,cAAc,UACtCya,EAAOxU,IAAM4S,EACb4B,EAAOC,OAAQ,EACfD,EAAOE,YAAc,YACrB5a,SAASwL,KAAKqP,YAAYH,GAGvB3c,SACH,OAAIwc,EAAAA,EAAAA,IAAa9f,KAAKL,MAAMqF,QAAQC,SACzB,KAGJjF,KAAKL,MAAMyF,WAAWpF,KAAKL,QAI1C,kECvCI0gB,yDACAC,+BAAQ,IAAIC,WAAW,KACZ,SAASC,IAEtB,IAAKH,KAGHA,EAAoC,oBAAXI,QAA0BA,OAAOJ,iBAAmBI,OAAOJ,gBAAgBrC,KAAKyC,SAA+B,oBAAbC,UAAgE,mBAA7BA,SAASL,iBAAkCK,SAASL,gBAAgBrC,KAAK0C,WAGrO,MAAM,IAAIC,MAAM,4GAIpB,OAAON,EAAgBC,eCjBzB,8HCMA,QAJA,SAAkBM,GAChB,MAAuB,iBAATA,GAAqBC,EAAMC,KAAKF,ICKhD,IAFA,IAAIG,EAAY,GAEPC,EAAI,EAAGA,EAAI,MAAOA,EACzBD,EAAU1S,MAAM2S,EAAI,KAAOnM,SAAS,IAAIoM,OAAO,IAoBjD,QAjBA,SAAmBC,GACjB,IAAIC,EAAS7K,UAAU3Q,OAAS,QAAsBtG,IAAjBiX,UAAU,GAAmBA,UAAU,GAAK,EAG7EsK,GAAQG,EAAUG,EAAIC,EAAS,IAAMJ,EAAUG,EAAIC,EAAS,IAAMJ,EAAUG,EAAIC,EAAS,IAAMJ,EAAUG,EAAIC,EAAS,IAAM,IAAMJ,EAAUG,EAAIC,EAAS,IAAMJ,EAAUG,EAAIC,EAAS,IAAM,IAAMJ,EAAUG,EAAIC,EAAS,IAAMJ,EAAUG,EAAIC,EAAS,IAAM,IAAMJ,EAAUG,EAAIC,EAAS,IAAMJ,EAAUG,EAAIC,EAAS,IAAM,IAAMJ,EAAUG,EAAIC,EAAS,KAAOJ,EAAUG,EAAIC,EAAS,KAAOJ,EAAUG,EAAIC,EAAS,KAAOJ,EAAUG,EAAIC,EAAS,KAAOJ,EAAUG,EAAIC,EAAS,KAAOJ,EAAUG,EAAIC,EAAS,MAAM7f,cAMzf,IAAK8f,EAASR,GACZ,MAAMS,UAAU,+BAGlB,OAAOT,GCHT,QApBA,SAAYU,EAASC,EAAKJ,GAExB,IAAIK,GADJF,EAAUA,GAAW,IACFG,SAAWH,EAAQd,KAAOA,KAK7C,GAHAgB,EAAK,GAAe,GAAVA,EAAK,GAAY,GAC3BA,EAAK,GAAe,GAAVA,EAAK,GAAY,IAEvBD,EAAK,CACPJ,EAASA,GAAU,EAEnB,IAAK,IAAIH,EAAI,EAAGA,EAAI,KAAMA,EACxBO,EAAIJ,EAASH,GAAKQ,EAAKR,GAGzB,OAAOO,EAGT,OAAOjJ,EAAUkJ,gBCmBnB,QA3BA,MAGI9hB,YAAYC,EAAmCqF,GAC3ChF,KAAKL,MAAQA,EACbK,KAAKgF,QAAUA,ykBCHvB,MAAM0c,UAA0BC,EAK5BjiB,YAAYC,EAAmCqF,GAC3CpF,MAAMD,EAAOqF,GAHT,KAAA4c,YAAsB,EAI1B5hB,KAAK6hB,IAAM7hB,KAAKL,MAAMM,OAAO6hB,yBAC7B9hB,KAAK+hB,IAAM/hB,KAAKL,MAAMM,OAAO+hB,yBAC7BhiB,KAAKL,MAAMqF,QAAQoL,UAAUqJ,MACzB,UAAUiI,EAAkBO,2DAA2DjiB,KAAK6hB,eAAe7hB,KAAK+hB,SAIjH,iBACH,MAAMG,QAAaliB,KAAKmiB,WACxB,GAAID,EAAKE,QAEL,OADApiB,KAAKL,MAAMqF,QAAQoL,UAAUqJ,MAAM,UAAUiI,EAAkBO,wDACxD,EAGXjiB,KAAK4hB,YAAcM,EAAKA,KAAKG,aAAe,EAC5C,IAAIC,GAAS,EAiBb,OAdQA,EAFJtiB,KAAK6hB,IACD7hB,KAAK+hB,IACI/hB,KAAK6hB,KAAO7hB,KAAK4hB,aAAe5hB,KAAK4hB,aAAe5hB,KAAK+hB,IAEzD/hB,KAAK6hB,KAAO7hB,KAAK4hB,cAG1B5hB,KAAK+hB,KACI/hB,KAAK4hB,aAAe5hB,KAAK+hB,IAK1C/hB,KAAKL,MAAMqF,QAAQoL,UAAUqJ,MACzB,UAAUiI,EAAkBO,6BAA6BK,oBAAyBtiB,KAAK4hB,iBAEpFU,EAGJC,qBACH,MAAO,IACH/e,EAAAA,EAAA,GACOxD,KAAKgF,SAAO,IACfwd,6BAA8B,OAC9BC,2BAA4B,cAC5BC,yCAA0C,GAAG1iB,KAAK4hB,gBAKvDe,aAEH,OAAO3iB,KAAKL,MAAMM,OAAO2iB,8BAAgC5iB,KAAKL,MAAMM,OAAO4iB,wBAGvE,iBACJ,OAAOC,EAAAA,EAAAA,cAAa9iB,KAAKL,MAAMqF,QAAQ2F,gBAI/C,+kBC/DA,MAAMoY,UAAiCpB,EAKnCjiB,YAAYC,EAAmCqF,GAC3CpF,MAAMD,EAAOqF,GAHT,KAAAge,cAAwB,EAI5BhjB,KAAK6hB,IAAM7hB,KAAKL,MAAMM,OAAOgjB,4BAC7BjjB,KAAK+hB,IAAM/hB,KAAKL,MAAMM,OAAOijB,4BAE7BljB,KAAKL,MAAMqF,QAAQoL,UAAUqJ,MACzB,IAAIsJ,EAAyBd,oEAAoEjiB,KAAK6hB,eAAe7hB,KAAK+hB,SAI3H,iBACH,MAAMG,QAAaliB,KAAKmiB,WACxB,GAAID,EAAKE,QAEL,OADApiB,KAAKL,MAAMqF,QAAQoL,UAAUqJ,MAAM,UAAUsJ,EAAyBd,wDAC/D,EAGXjiB,KAAKgjB,cAAgBd,EAAKA,KAAKiB,YAAc,EAE7C,IAAIb,GAAS,EAiBb,OAdQA,EAFJtiB,KAAK6hB,IACD7hB,KAAK+hB,IACI/hB,KAAK6hB,KAAO7hB,KAAKgjB,eAAiBhjB,KAAKgjB,eAAiBhjB,KAAK+hB,IAE7D/hB,KAAK6hB,KAAO7hB,KAAKgjB,gBAG1BhjB,KAAK+hB,KACI/hB,KAAKgjB,eAAiBhjB,KAAK+hB,IAK5C/hB,KAAKL,MAAMqF,QAAQoL,UAAUqJ,MACzB,IAAIsJ,EAAyBd,6BAA6BK,iCAAsCtiB,KAAKgjB,mBAElGV,EAGJC,qBACH,MAAO,IACH/e,EAAAA,EAAA,GACOxD,KAAKgF,SAAO,IACfwd,6BAA8B,OAC9BC,2BAA4B,uBAC5BW,gDAAiD,GAAGpjB,KAAKgjB,kBAK9DL,aAEH,OAAO3iB,KAAKL,MAAMM,OAAOojB,iCAAmCrjB,KAAKL,MAAMM,OAAO4iB,wBAG1E,iBACJ,OAAOC,EAAAA,EAAAA,cAAa9iB,KAAKL,MAAMqF,QAAQ2F,gBAI/C,+kBClEA,MAAM2Y,UAAmC3B,EAAzCjiB,cAAA,oBACY,KAAA6jB,QAAkB,GAEnB,iBACH,IAAIC,GAAU,EACd,MAAMtB,QAAaliB,KAAKmiB,WACxB,GAAKD,EAAKE,QAmCNpiB,KAAKL,MAAMqF,QAAQoL,UAAUqJ,MAAM,UAAU6J,EAA2BrB,8BAlCxE,GAAIC,EAAKA,KAAKuB,UAAW,CAAC,IAADC,EACrB1jB,KAAKL,MAAMqF,QAAQoL,UAAUqJ,MACzB,IAAI6J,EAA2BrB,wCAA2D,QAAvDyB,EAAoCxB,EAAKA,KAAKuB,iBAAS,IAAAC,OAAA,EAAnBA,EAAqB/d,WAEhG,IAAK,IAAIqb,EAAI,EAAGA,GAAuB,QAAtB2C,EAAGzB,EAAKA,KAAKuB,iBAAS,IAAAE,OAAA,EAAnBA,EAAqBhe,QAAQqb,IAAK,CAAC,IAAD2C,EAClD,IAAIzB,EAAKA,KAAKuB,UAAUzC,GAsBpB,MArBA,GAAIhhB,KAAKL,MAAMM,OAAO2jB,mCAAoC,CAAC,IAADC,EACtD7jB,KAAKL,MAAMqF,QAAQoL,UAAUqJ,MACzB,IAAI6J,EAA2BrB,iFAAqI,QAAjI4B,EAA6E7jB,KAAKL,MAAMM,OAAO2jB,0CAAkC,IAAAC,OAAA,EAApDA,EAAsDle,WAG1K,IAAK,IAAIme,EAAI,EAAGA,IAAyD,QAApDC,EAAA/jB,KAAKL,MAAMM,OAAO2jB,0CAAkC,IAAAG,OAAA,EAApDA,EAAsDpe,SAAU,GAAIme,IAAK,CAAC,IAADC,EAC1F,GACI/jB,KAAKL,MAAMM,OAAO2jB,oCAClB1B,EAAKA,KAAKuB,UAAUzC,GAAGgD,QACvBhkB,KAAKL,MAAMM,OAAO2jB,mCAAmCE,KAAO5B,EAAKA,KAAKuB,UAAUzC,GAAGgD,OACrF,CACEhkB,KAAKL,MAAMqF,QAAQoL,UAAUqJ,MACzB,IAAI6J,EAA2BrB,oCAAoCC,EAAKA,KAAKuB,UAAUzC,GAAGgD,8EAE9FR,GAAU,EACV,eAUpBxjB,KAAKL,MAAMqF,QAAQoL,UAAUqJ,MAAM,UAAU6J,EAA2BrB,8CAMhF,OADAjiB,KAAKL,MAAMqF,QAAQoL,UAAUqJ,MAAM,UAAU6J,EAA2BrB,+BAA+BuB,OAChGA,EAGJjB,qBACH,MAAO,IACH/e,EAAAA,EAAA,GACOxD,KAAKgF,SAAO,IACfwd,6BAA8B,OAC9BC,2BAA4B,wBAC5BwB,kDAAmD,GAAGjkB,KAAKujB,YAKhEZ,aAEH,OAAO3iB,KAAKL,MAAMM,OAAOikB,uCAAyClkB,KAAKL,MAAMM,OAAO4iB,wBAGhF,iBACJ,OAAOC,EAAAA,EAAAA,cAAa9iB,KAAKL,MAAMqF,QAAQ2F,gBAI/C,UC5EO,IAAKwZ,wkBAAZ,SAAYA,GACRA,EAAA,uBACAA,EAAA,sCACAA,EAAA,yBACAA,EAAA,qCACAA,EAAA,6BACAA,EAAA,0BANJ,CAAYA,IAAAA,EAAkB,KCQ9B,MAAMC,UAAyBzC,EAI3BjiB,YAAYC,EAAmCqF,GAC3CpF,MAAMD,EAAOqF,GACbhF,KAAKqkB,MAAQrkB,KAAKskB,QAAQtkB,KAAKL,MAAMM,OAAOskB,2BAC5CvkB,KAAKwkB,IAAMxkB,KAAKskB,QAAQtkB,KAAKL,MAAMM,OAAOwkB,yBAE1CzkB,KAAKL,MAAMqF,QAAQoL,UAAUqJ,MACzB,IAAI2K,EAAiBnC,qDAAqDjiB,KAAKqkB,iBAAiBrkB,KAAKwkB,SAItG,iBACH,MAAME,EAAM,IAAIC,KAChBD,EAAIE,SAAS,EAAG,EAAG,EAAG,GAEtB,IAAItC,GAAS,EAcb,OAbItiB,KAAKqkB,MAED/B,EADAtiB,KAAKwkB,IACIxkB,KAAKqkB,MAAMQ,WAAaH,EAAIG,WAAaH,EAAIG,WAAa7kB,KAAKwkB,IAAIK,UAEnE7kB,KAAKqkB,MAAMQ,WAAaH,EAAIG,UAElC7kB,KAAKwkB,MACZlC,EAASoC,EAAIG,WAAa7kB,KAAKwkB,IAAIK,WAGvC7kB,KAAKL,MAAMqF,QAAQoL,UAAUqJ,MACzB,IAAI2K,EAAiBnC,6BAA6BK,sCAA2CoC,OAE1FpC,EAGJC,qBACH,MAAO,IACH/e,EAAAA,EAAA,GACOxD,KAAKgF,SAAO,IACfwd,6BAA8B,OAC9BC,2BAA4B0B,EAAmBW,UAC/CC,+BAAgC/kB,KAAKqkB,MAAQrkB,KAAKqkB,MAAMW,cAAgB,GACxEC,6BAA8BjlB,KAAKwkB,IAAMxkB,KAAKwkB,IAAIQ,cAAgB,KAKvErC,aAEH,OAAO3iB,KAAKL,MAAMM,OAAOilB,6BAA+BllB,KAAKL,MAAMM,OAAO4iB,wBAQtEyB,QAAQa,GACZ,GAAIA,EAAM,CACN,MAAMC,EAAYD,EAAKzG,MAAM,KAC7B,OAAO,IAAIiG,MAAMS,EAAU,IAAKA,EAAU,GAAK,GAAIA,EAAU,MAOzE,+kBCpEA,MAAMC,UAAgC1D,EAC3B,iBACH,IAAI6B,GAAU,EACd,GAAIxjB,KAAKL,MAAMM,OAAOqlB,gCAAiC,CAAC,IAADzB,EACnD7jB,KAAKL,MAAMqF,QAAQoL,UAAUqJ,MACzB,IAAI4L,EAAwBpD,2EAA4H,QAAxH4B,EAAuE7jB,KAAKL,MAAMM,OAAOqlB,uCAA+B,IAAAzB,OAAA,EAAjDA,EAAmDle,YAE9J,IAAK,IAAIqb,EAAI,EAAGA,IAAsD,QAAjD+C,EAAA/jB,KAAKL,MAAMM,OAAOqlB,uCAA+B,IAAAvB,OAAA,EAAjDA,EAAmDpe,SAAU,GAAIqb,IAAK,CAAC,IAAD+C,EACvF,MAAMwB,EAAkCvlB,KAAKL,MAAMM,OAAOqlB,gCAAgCtE,GAAGwE,OAQ7F,GAPAxlB,KAAKL,MAAMqF,QAAQoL,UAAUqJ,MACzB,UAAU4L,EAAwBpD,4BAA4BnhB,OAAOyE,SAASkgB,cAElFzlB,KAAKL,MAAMqF,QAAQoL,UAAUqJ,MACzB,IAAI4L,EAAwBpD,uEAAuEsD,OAGnGzkB,OAAOyE,SAASkgB,SAASC,QAAQH,IAA4B,EAAG,CAChE/B,GAAU,EACV,aAIRxjB,KAAKL,MAAMqF,QAAQoL,UAAUqJ,MACzB,UAAU4L,EAAwBpD,+DAI1C,OADAjiB,KAAKL,MAAMqF,QAAQoL,UAAUqJ,MAAM,UAAU4L,EAAwBpD,+BAA+BuB,OAC7FA,EAEJjB,qBACH,MAAO,IACH/e,EAAAA,EAAA,GACOxD,KAAKgF,SAAO,IACfwd,6BAA8B,OAC9BC,2BAA4B0B,EAAmBwB,iBAC/CC,mCAAoC9kB,OAAOyE,SAASkgB,WAIzD9C,aAEH,OAAO3iB,KAAKL,MAAMM,OAAO4lB,oCAAsC7lB,KAAKL,MAAMM,OAAO4iB,yBAIzF,+kBC3CA,MAAMiD,UAAyBnE,EAM3BjiB,YAAYC,EAAmCqF,GAC3CpF,MAAMD,EAAOqF,GANV,KAAA+gB,OAAiB,EAChB,KAAAC,WAAqB,mBAMzBhmB,KAAKimB,QAAUjmB,KAAKL,MAAMqF,QAAQC,QAAQghB,QAC1CjmB,KAAKkmB,QAAU,IAAIvB,KAEnB3kB,KAAKkmB,QAAQC,QAAQnmB,KAAKkmB,QAAQrB,UAAY,SAC9C7kB,KAAKL,MAAMqF,QAAQoL,UAAUqJ,MAAM,UAAUqM,EAAiB7D,qCAAqCjiB,KAAKkmB,aAExGlmB,KAAKL,MAAMqF,QAAQoL,UAAUqJ,MAAM,UAAUqM,EAAiB7D,mCAAmCjiB,KAAKimB,QAAQG,sBAC1GpmB,KAAKimB,QAAQG,kBACbpmB,KAAKimB,QAAQI,mBAGjBrmB,KAAKsmB,sBAGF,iBACH,IAAIhE,GAAkB,EAOtB,OALItiB,KAAKL,MAAMM,OAAOsmB,6BAClBjE,EAAStiB,KAAK+lB,QAAU/lB,KAAKL,MAAMM,OAAOsmB,4BAG9CvmB,KAAKL,MAAMqF,QAAQoL,UAAUqJ,MAAM,UAAUqM,EAAiB7D,6BAA6BK,OACpFA,EAGJkE,QACHxmB,KAAKL,MAAMqF,QAAQoL,UAAUqJ,MAAM,UAAUqM,EAAiB7D,iDAC9DjiB,KAAKimB,QAAQQ,IAAYzmB,KAAKgmB,WAAY,EAAG,CACzCU,OAAQ5lB,OAAOyY,SAASoN,SACxBC,KAAM9lB,OAAOyY,SAASsN,SACtBC,QAAS9mB,KAAKkmB,UAIf3D,qBACH,MAAO,IACH/e,EAAAA,EAAA,GACOxD,KAAKgF,SAAO,IACfwd,6BAA8B,OAC9BC,2BAA4B0B,EAAmB4C,WAC/CC,qCAAsC,GAAGhnB,KAAK+lB,WAKnDpD,aAEH,OAAO3iB,KAAKL,MAAMM,OAAOgnB,6BAA+BjnB,KAAKL,MAAMM,OAAO4iB,wBAGtEyD,sBACJtmB,KAAK+lB,OAAS/lB,KAAKimB,QAAQiB,IAAYlnB,KAAKgmB,YAAY/mB,OAAS,EACjEe,KAAKL,MAAMqF,QAAQoL,UAAUqJ,MAAM,UAAUqM,EAAiB7D,4CAA4CjiB,KAAK+lB,aAC7G/lB,KAAK+lB,OACP/lB,KAAKL,MAAMqF,QAAQoL,UAAUqJ,MAAM,UAAUqM,EAAiB7D,2CAA2CjiB,KAAK+lB,WAE9G/lB,KAAKimB,QAAQQ,IAAYzmB,KAAKgmB,WAAYhmB,KAAK+lB,OAAQ,CACnDW,OAAQ5lB,OAAOyY,SAASoN,SACxBC,KAAM9lB,OAAOyY,SAASsN,SACtBC,QAAS9mB,KAAKkmB,WAK1B,+kBCxEA,MAAMiB,UAAqCxF,EAEvCjiB,YAAYC,EAAmCqF,GAC3CpF,MAAMD,EAAOqF,GACbhF,KAAKonB,oBAAyCpnB,KAAKL,MAAMqF,QAAQC,QAASoiB,iBAAmB,MAC7FrnB,KAAKL,MAAMqF,QAAQoL,UAAUqJ,MACzB,IAAI0N,EAA6BlF,wCAAwCjiB,KAAKonB,yBAI/E,iBACH,MAAM9E,IAAkBtiB,KAAKL,MAAMM,OAAOqnB,6BACpCtnB,KAAKL,MAAMM,OAAOqnB,4BAA4BhmB,cAAcokB,QAAQ1lB,KAAKonB,oBAAoB9lB,gBAAkB,EAGrH,OADAtB,KAAKL,MAAMqF,QAAQoL,UAAUqJ,MAAM,UAAU0N,EAA6BlF,+BAA+BK,OAClGA,EAEJC,qBACH,MAAO,IACH/e,EAAAA,EAAA,GACOxD,KAAKgF,SAAO,IACfwd,6BAA8B,OAC9B+E,kCAAmCvnB,KAAKL,MAAMM,OAAOqnB,6BAA+B,GACpF7E,2BAA4B0B,EAAmBqD,mBAIpD7E,aAEH,OAAO3iB,KAAKL,MAAMM,OAAOwnB,yCAA2CznB,KAAKL,MAAMM,OAAO4iB,yBAI9F,+kBCnCA,MAAM6E,UAA4B/F,EACvB,iBACH,IAAI6B,GAAU,EACd,GAAIxjB,KAAKL,MAAMM,OAAO0nB,4BAA6B,CAAC,IAAD9D,EAC/C7jB,KAAKL,MAAMqF,QAAQoL,UAAUqJ,MACzB,IAAIiO,EAAoBzF,uEAAoH,QAAhH4B,EAAmE7jB,KAAKL,MAAMM,OAAO0nB,mCAA2B,IAAA9D,OAAA,EAA7CA,EAA+Cle,YAElJ,IAAK,IAAIqb,EAAI,EAAGA,IAAkD,QAA7C+C,EAAA/jB,KAAKL,MAAMM,OAAO0nB,mCAA2B,IAAA5D,OAAA,EAA7CA,EAA+Cpe,SAAU,GAAIqb,IAAK,CAAC,IAAD+C,EACnF,MAAM6D,EAA8B5nB,KAAKL,MAAMM,OAAO0nB,4BAA4B3G,GAAGwE,OAGrF,GAFAxlB,KAAKL,MAAMqF,QAAQoL,UAAUqJ,MAAM,4BAA4B3Y,OAAOyY,SAASrD,SAC/ElW,KAAKL,MAAMqF,QAAQoL,UAAUqJ,MAAM,8DAA8DmO,MAC7F9mB,OAAOyY,SAASrD,KAAKwP,QAAQkC,IAAwB,EAAG,CACxDpE,GAAU,EACV,aAIRxjB,KAAKL,MAAMqF,QAAQoL,UAAUqJ,MAAM,UAAUiO,EAAoBzF,0DAGrE,OADAjiB,KAAKL,MAAMqF,QAAQoL,UAAUqJ,MAAM,UAAUiO,EAAoBzF,+BAA+BuB,OACzFA,EAGJjB,qBACH,MAAO,IACH/e,EAAAA,EAAA,GACOxD,KAAKgF,SAAO,IACfwd,6BAA8B,OAC9BC,2BAA4B0B,EAAmB0D,eAKpDlF,aAEH,OAAO3iB,KAAKL,MAAMM,OAAO6nB,gCAAkC9nB,KAAKL,MAAMM,OAAO4iB,yBAIrF,+kBCtCA,MAAMkF,UAA0BpG,EAG5BjiB,YAAYC,EAAmCqF,GAC3CpF,MAAMD,EAAOqF,GACThF,KAAKL,MAAMM,OAAO+nB,6BAA+BhpB,MAAMgB,KAAKL,MAAMM,OAAO+nB,8BACzEhoB,KAAKioB,uBAAgF,IAAvDnpB,OAAOkB,KAAKL,MAAMM,OAAO+nB,4BACvDhoB,KAAKL,MAAMqF,QAAQoL,UAAUqJ,MACzB,UAAUsO,EAAkB9F,iCAAiCjiB,KAAKioB,6BAKvE,iBACH,MAAM3F,OAAkDjjB,IAAhCW,KAAKioB,uBAE7B,OADAjoB,KAAKL,MAAMqF,QAAQoL,UAAUqJ,MAAM,UAAUsO,EAAkB9F,+BAA+BK,OACvFA,EAGJC,qBACH,MAAM2F,EAAcvD,KAAKD,OAAS1kB,KAAKioB,wBAA0B,GACjE,MAAO,IACIC,EAAcvD,KAAKD,MACpB1kB,KAAKgF,QAAOxB,EAAAA,EAAA,GAELxD,KAAKgF,SAAO,IACfwd,6BAA8B,OAC9BC,2BAA4B0B,EAAmBgE,WAC/CC,iCAAkC,GAAGpoB,KAAKioB,uBAAyBjoB,KAAKioB,uBAAyB,MAK5GtF,aAEH,OAAO3iB,KAAKL,MAAMM,OAAOooB,4BAA8BroB,KAAKL,MAAMM,OAAO4iB,yBAIjF,MCvBayF,GAAqC,CAC9ClE,EACAsD,EACArC,EACAS,EACAqB,EACAzF,EACAqB,EACAO,EDeJ,GEmFA,SAtHA,MAQI5jB,YAAYC,GACRK,KAAKL,MAAQA,EACbK,KAAK+Y,KAAO/Y,KAAKL,MAAMqF,QAAQC,QAAQ8T,KACvC/Y,KAAKuoB,OAAS,MAAMC,MACpBxoB,KAAKgF,QAAUhF,KAAKyoB,cAEpBzoB,KAAKqD,KAAO,CACRqlB,SAAS,EACTpT,QAAStV,KAAKL,MAAMM,OAAO+nB,4BAA8B,EACzDzpB,QAASyB,KAAKL,MAAMM,OAAO4iB,yBAQ5B,aACH,UACU7iB,KAAK2oB,kBACb,MAAOrjB,GAGLtF,KAAKL,MAAMyQ,UAAUwY,UAAUtjB,GAEnC,OAAOtF,KAAK6oB,UAAY7oB,KAAK8oB,eAMzBA,eACJ,MAAO,KAAK,IAAAC,EACR,MAAqB,CACjBC,6BAA8BhpB,KAAKL,MAAMqF,QAAQC,QAAQ2F,YAAYqe,IACrEC,iBAAkBlpB,KAAKL,MAAMqF,QAAQC,QAAQ2F,YAAYue,QACzDC,oBAAuD,QAApCL,EAAE/oB,KAAKL,MAAMqF,QAAQC,QAAQokB,eAAO,IAAAN,OAAA,EAAlCA,EAAoCO,yBACzDC,OAAQvpB,KAAKuoB,OAEbiB,cAAexpB,KAAK+Y,KAAK0Q,sBAAwBzpB,KAAK+Y,KAAK0Q,sBAAwB,MACnFC,MAAO1pB,KAAK+Y,KAAK4Q,aAAe3pB,KAAK+Y,KAAK4Q,aAAe,MACzDC,UAAW5pB,KAAK+Y,KAAK8Q,UAAY7pB,KAAK+Y,KAAK8Q,UAAY7pB,KAAKL,MAAMM,OAAO6pB,kBACzEC,SAAU/pB,KAAK+Y,KAAKiR,SAAWhqB,KAAK+Y,KAAKiR,SAAW,MACpDC,KAAMjqB,KAAK+Y,KAAKkJ,KAAOjiB,KAAK+Y,KAAKkJ,KAAOjiB,KAAKL,MAAMM,OAAO6pB,kBAC1DI,qBAAsBppB,OAAOyY,SAASrD,KACtCiU,sBAAuB,MAEvB3H,6BAA8B,QAC9BC,2BAA4B,MAE5BsC,+BAAgC,MAChCE,6BAA8B,MAE9BW,mCAAoC,MAEpCoB,qCAAsC,MAEtCO,kCAAmC,MAInCa,iCAAkC,MAElC1F,yCAA0C,MAE1CU,gDAAiD,MAEjDa,kDAAmD,QAQvDwE,cACJ,OAAOzoB,KAAK8oB,cAAL9oB,GAMH,wBACJ,GAAIA,KAAKL,MAAMM,OAAOmqB,qBAClB,IAAK,IAAIpJ,EAAI,EAAGA,EAAIsH,GAAkB3iB,OAAQqb,IAAK,CAC/C,MAAMqJ,EAAY,IAAI/B,GAAkBtH,GAAGhhB,KAAKL,MAAOK,KAAKgF,SAE5D,SAAUhF,KAAKsqB,aAAaD,GAAY,CACpCrqB,KAAKL,MAAMqF,QAAQoL,UAAUqJ,MAAM,oDAAoD4Q,KACvF,QAWR,mBAAmBA,GAMvB,OALArqB,KAAKqD,KAAKqlB,cAAgB2B,EAAUjJ,WAChCphB,KAAKqD,KAAKqlB,UACV1oB,KAAK6oB,SAAWwB,EAAU9H,qBAC1BviB,KAAKqD,KAAK9E,QAAU8rB,EAAU1H,cAE3B3iB,KAAKqD,KAAKqlB,mlBCxHzB,MAAM6B,GAAuBtqB,IACG,CACxBuqB,SAAUvqB,EAAOuqB,UAAY,UAC7BC,IAAKxqB,EAAOwqB,IAAMxqB,EAAOwqB,IAAM,UAC/BC,MAAOzqB,EAAOyqB,MAAQzqB,EAAOyqB,MAAQ,UACrCC,OAAQ1qB,EAAO0qB,OAAS1qB,EAAO0qB,OAAS,UACxCC,KAAM3qB,EAAO2qB,KAAO3qB,EAAO2qB,KAAO,UAClCC,OAAQ,IACRnmB,QAAS,OACTomB,eAAgB,aAIlBC,GAA+BA,CAAC9qB,EAAyC+qB,IACvEA,EAC4B,CACxBC,OAAQ,MACRC,MAAO,OACPP,OAAQ,QACRD,MAAO,IACPS,QAAS,OAGW,CACxBF,OAAQhrB,EAAOmrB,WAAanrB,EAAOmrB,WAAa,MAChDF,MAAOjrB,EAAOorB,UAAYprB,EAAOorB,UAAY,WAI/CC,GAAsBrrB,IACI,CACxByE,QAAS,OACT6mB,WAAY,SACZC,gBAAiBvrB,EAAOwrB,gCAAkC,QAC1DC,MAAOzrB,EAAO0rB,0BAA4B,UAC1CC,YAAa3rB,EAAO4rB,4BAA8B,UAClDC,aAAc7rB,EAAO8rB,6BAA+B,MACpDC,YAAa/rB,EAAOgsB,4BAA8B,QAClDC,YAAajsB,EAAOksB,2BAA6BlsB,EAAOksB,2BAA6B,MACrFhB,QAASlrB,EAAOmsB,aAAe,mBAAqB,sBACpDC,OAAQ,UACRC,aAAc,OACdC,UAAW,WACXC,UAAW,+BACXC,gBAAiB,+BACjBC,aAAc,iCAIhBC,GAA2B1sB,IACD,CACxBurB,gBAAiBvrB,EAAO2sB,uBAAyB,UACjDlB,MAAOzrB,EAAO4sB,iBAAmB,UACjCf,aAAc,MACdX,QAAS,OACTD,MAAO,OACPD,OAAQ,OACR6B,YAAa,OACbd,YAAa,QACbE,YAAa,MACba,UAAW,gBAIbC,GAAyB/sB,IACC,CACxBurB,gBAAiBvrB,EAAO2sB,uBAAyB,UACjDlB,MAAOzrB,EAAO4sB,iBAAmB,UACjCf,aAAc,MACdX,QAAS,OACTD,MAAO,OACPD,OAAQ,OACRgC,OAAQ,mBACRV,UAAW,SACXP,YAAa,QACbE,YAAa,MACba,UAAW,gBAIbG,GAAuBA,CAACjtB,EAAyCktB,KACvC,CACxBzoB,QAASyoB,EAAY,OAAS,QAC9B3B,gBAAiBvrB,EAAOurB,iBAAmB,QAC3CP,OAAQ,OACRC,MAAO,OACP6B,UAAW,aACXvC,SAAU,aAIZ4C,GAAwBntB,IAC1BA,EAAOotB,iBAAmBptB,EAAOotB,kBAAoB,OACzB,CACxB7B,gBAAiBvrB,EAAO2sB,uBAAyB,UACjDU,gBAAiB,QAAQrtB,EAAOstB,8BAAgC,OAChE7B,MAAOzrB,EAAO4sB,iBAAmB,UACjCW,iBAAkB,YAClB9oB,QAAS,OACT6mB,WAAY,aACZkC,cAAe,MACfvC,MAAO,OACPV,SAAU,WACVC,IAAKxqB,EAAOotB,iBAAmB,IAAIptB,EAAOotB,mBAAqB,GAC/DpC,OAAQhrB,EAAOotB,iBACfzB,YAAa3rB,EAAO2sB,sBAAwB3sB,EAAO2sB,sBAAwB,UAC3EZ,YAAa/rB,EAAOytB,gBAAkBztB,EAAOytB,gBAAkB,OAC/DxB,YAAajsB,EAAO0tB,gBAAkB1tB,EAAO0tB,gBAAkB,QAIjEC,GAA0B3tB,IAC5BA,EAAOotB,iBAAmBptB,EAAOotB,kBAAoB,OACzB,CACxBQ,UAAW,OACXC,WAAY,OACZC,YAAa,OACbC,aAAc,aAAa/tB,EAAO4sB,iBAAmB,UACrDrB,gBAAiB,cACjBL,QAAS,oBACTkB,OAAQ,UACRC,aAAc,OACd2B,UAAW,MACXnB,YAAa,QAIfoB,GAAuBjuB,IACzBA,EAAOotB,iBAAmBptB,EAAOotB,kBAAoB,OACzB,CACxBc,OAAQ,OACRzC,MAAOzrB,EAAO4sB,iBAAmB,QACjCrB,gBAAiB,cACjBL,QAAS,kBACTkB,OAAQ,UACRC,aAAc,OACd2B,UAAW,MACXnB,YAAa,QAIfsB,GAAyBnuB,IAC3BA,EAAOotB,iBAAmBptB,EAAOotB,kBAAoB,OACzB,CACxBpC,OAAQ,OACRC,MAAO,OACPU,YAAa3rB,EAAOouB,gBAAkBpuB,EAAOouB,gBAAkB,UAC/DrC,YAAa/rB,EAAOytB,gBAAkBztB,EAAOytB,gBAAkB,OAC/DxB,YAAajsB,EAAO0tB,gBAAkB1tB,EAAO0tB,gBAAkB,QAIjEW,GAA4BruB,IACF,CACxBwtB,cAAe,SACf/oB,QAAS,OACTomB,eAAgB,WAChBU,gBAAiBvrB,EAAOurB,iBAAmB,UAI7C+C,GAA6BtuB,IAC/BA,EAAOotB,iBAAmBptB,EAAOotB,kBAAoB,OACzB,CACxB7B,gBAAiBvrB,EAAO2sB,uBAAyB,UACjDU,gBAAiB,QAAQrtB,EAAOstB,8BAAgC,OAChE7B,MAAOzrB,EAAO4sB,iBAAmB,UACjCW,iBAAkB,YAClB9oB,QAAS,OACT6mB,WAAY,aACZkC,cAAe,MACfV,UAAW,aACX7B,MAAO,OACPD,OAAQhrB,EAAOotB,iBACfzB,YAAa3rB,EAAO2sB,sBAAwB3sB,EAAO2sB,sBAAwB,UAC3EZ,YAAa/rB,EAAOytB,gBAAkBztB,EAAOytB,gBAAkB,OAC/DxB,YAAajsB,EAAO0tB,gBAAkB1tB,EAAO0tB,gBAAkB,QAIjEa,GAA8BvuB,IAChCA,EAAOotB,iBAAmBptB,EAAOotB,kBAAoB,OACzB,CACxBnC,MAAO,OACPC,QAAS,YACT4B,UAAW,aACXnB,YAAa3rB,EAAOouB,gBAAkBpuB,EAAOouB,gBAAkB,UAC/DrC,YAAa/rB,EAAOytB,gBAAkBztB,EAAOytB,gBAAkB,OAC/DxB,YAAajsB,EAAO0tB,gBAAkB1tB,EAAO0tB,gBAAkB,QAIjEc,GAA2BxuB,IAC7BA,EAAOotB,iBAAmBptB,EAAOotB,kBAAoB,OACzB,CACxB3B,MAAOzrB,EAAO4sB,iBAAmB,UACjCR,OAAQ,UACRlB,QAAS,WACTuD,QAAS,OACTP,OAAQ,OACR3C,gBAAiBvrB,EAAO2sB,uBAAyB,UACjDd,aAAc,SA0ChB6C,GAAcC,IAChB,GAAIA,GAAQA,EAAKjpB,OAAS,EAAG,CACzB,MAAMub,EAAM0N,EAAKlQ,MAAM,KACvB,IAAK,IAAIsC,EAAI,EAAGA,EAAIE,EAAIvb,OAAQqb,IAC5BE,EAAIF,GAAK,IAAIE,EAAIF,GAAGwE,UAExBoJ,EAAO1N,EAAI7J,KAAK,WAEhBuX,EAAO,qDAGX,OAAOA,GC/PJ,MAAMC,GA+CTnvB,YACIC,EACAkpB,EACAiG,GAEA9uB,KAAKL,MAAQA,EACbK,KAAK6oB,SAAWA,EAChB7oB,KAAK+uB,oBAAsBD,EA7CxB,gCAAgCnvB,GACnC,GAAIA,EAAMM,OAAO+uB,2BAA6BrvB,EAAMM,OAAOgvB,OAAStvB,EAAMM,OAAOivB,SAAU,CAEvF,MAAM7Q,EAAM,GAAG1e,EAAMM,OAAO+uB,mCAAmCrvB,EAAMM,OAAOgvB,kBAAkBtvB,EAAMM,OAAOivB,WAE3G,OAAOC,MAAM9Q,EADG,CAAE+Q,OAAQ,QAErBhW,MAAKiW,GAAKA,EAAEC,SACZlW,MAAKiW,IACF,GAAIA,EAAEE,MACF,OAAOF,EAAEE,MAET,MAAMF,KAMtB,MAAMhR,EAAM,GAAG1e,EAAMqF,QAAQiW,IAAIhb,OAAOuvB,mDAAmD7vB,EAAMqF,QAAQiW,IAAIhb,OAAOwvB,kCAAkC9vB,EAAMqF,QAAQiW,IAAIhb,OAAOyvB,2BAI/K,OAAOP,MAAM9Q,EAHG,CACZ+Q,OAAQ,QAGPhW,MAAKiW,GAAKA,EAAEC,SACZlW,MAAKiW,IACF,GAAIA,EAAEE,MACF,OAAOF,EAAEE,MAET,MAAMF,KA6Bf,oBAAmBxxB,GAAkF,IAAjF,SAAE8xB,EAAQ,KAAEC,EAAI,OAAEC,GAA+DhyB,EAGxG,OAFcgyB,EAAOvxB,MAGjB,IAAK,gCAEDqxB,EAAS,CACLrxB,KAAM,sBACNwxB,QAAS,CACL7N,KAAM,eACNhjB,MAAO,CAAE8wB,SAAUjvB,OAAOkvB,UAAUD,aAG5C,MAEJ,IAAK,gCAAiC,CAAC,IAADE,EAClC,MAAMC,EAAWL,EAAOC,QAAQI,SACH,SAAzBA,MAAAA,GAAc,QAAND,EAARC,EAAUC,YAAI,IAAAF,OAAA,EAAdA,EAAgBvxB,OAEhBsB,KAAK+uB,qBAAoB,GAE7B,MAEJ,IAAK,sCACD,OAAQc,EAAOC,QAAQI,SAASjO,MAC5B,IAAK,oBAEyB5iB,IAAlBW,KAAK6oB,UAEL8G,EAAS,CACLrxB,KAAM,sBACNwxB,QAAS,CACL7N,KAAM,gBACNhjB,MAAOe,KAAK6oB,cAK5B,MACJ,IAAK,gBAEO7oB,KAAKL,MAAMM,OAAOmwB,cAElBT,EAAS,CACLrxB,KAAM,6BACNwxB,QAAS,CACL9xB,KAAMgC,KAAKL,MAAMM,OAAOmwB,iBAiBxD,OAAOR,EAAKC,IC3HpB,MAyCA,GAzCqDlwB,IACjD,MAAM,aAAE0wB,GAAiBvvB,OAAOwvB,SAEzB/H,EAAQgI,IAAaC,EAAAA,EAAAA,UAAS,KACrCC,EAAAA,EAAAA,UAAQ,KACJ,GAAI9wB,EAAMkpB,SAAU,CAChB,MAAM6H,EAAM/wB,EAAMkpB,WACd6H,EAAInH,QACJgH,EAAgC,iBAAfG,EAAInH,OAAsBmH,EAAInH,OAASmH,EAAInH,OAAOtqB,MAAM4V,eAGlF,CAAClV,EAAMkpB,WAEV,MAAM8H,GAAaF,EAAAA,EAAAA,UAAQ,IAChB3vB,OAAOwvB,QAAQM,iBAAiB,CAAErB,MAAO5vB,EAAMkxB,mBACvD,CAAClxB,EAAMkxB,kBAEJC,GAAoBL,EAAAA,EAAAA,UAAQ,KAC9B,GAAIE,GAAchxB,EAAMkpB,SACpB,OAAO,IAAIgG,GAAkBlvB,EAAMM,OAAQN,EAAMkpB,SAAUlpB,EAAMmvB,iBAGtE,CAACnvB,EAAMkpB,SAAU8H,IAEdI,GAAQN,EAAAA,EAAAA,UAAQ,IACX3vB,OAAOwvB,QAAQU,YAClB,IACAnzB,IAAA,IAAC,SAAE8xB,GAAmC9xB,EAAA,OAAM+xB,GAA0CC,IAClFiB,MAAAA,GAAAA,EAAmBG,cAAc,CAAEtB,SAAAA,EAAUC,KAAAA,EAAMC,OAAAA,SAG5D,CAACiB,IACEI,EFkU0BjxB,CAAAA,IAChC,MAAMkxB,EAtGgBlxB,CAAAA,IACf,CACHmxB,iBAAkBnxB,EAAOmxB,kBAAoB,QAC7CC,gBAAiBpxB,EAAOoxB,iBAAmB,QAC3CC,kBAAmBrxB,EAAOqxB,mBAAqB,UAC/CC,mBAAoBtxB,EAAOsxB,oBAAsB,IACjDC,kBAAmBvxB,EAAOuxB,mBAAqB,QAC/CC,kBAAmBxxB,EAAOwxB,mBAAqB,IAC/CC,yBAA0BzxB,EAAOyxB,0BAA4B,QAC7DC,wBAAyB1xB,EAAO0xB,yBAA2B,QAC3DC,0BAA2B3xB,EAAO2xB,2BAA6B,UAC/DC,2BAA4B5xB,EAAO4xB,4BAA8B,IACjEC,0BAA2B7xB,EAAO6xB,2BAA6B,QAC/DC,0BAA2B9xB,EAAO8xB,2BAA6B,MAyF7CC,CAAiB/xB,GACjCgyB,EA9CgBhyB,CAAAA,IACf,CACHiyB,mBAAoBjyB,EAAOiyB,oBAAsB,MACjDC,WAAYlyB,EAAOkyB,YAAc,KACjCC,yBAA0BnyB,EAAOmyB,0BAA4B,YAC7DC,eAAgBpyB,EAAOoyB,gBAAkB,GACzCC,kBAAmBryB,EAAOqyB,mBAAqB,GAC/CC,0BAA2BtyB,EAAOsyB,2BAA6B,YAC/DC,gBAAiBvyB,EAAOuyB,iBAAmB,GAC3CC,mBAAoBxyB,EAAOwyB,oBAAsB,GACjDC,kBAAmBzyB,EAAOyyB,mBAAqB,WAoC7BC,CAAiB1yB,GACjC2yB,EAjCyB3yB,CAAAA,IACxB,CACH4yB,sBAAuB5yB,EAAO4yB,uBAAyB,WACvDC,0BAA2B7yB,EAAO6yB,2BAA6B,QAC/DC,yBAA0B9yB,EAAO8yB,0BAA4B,GAC7DC,2BAA4B/yB,EAAO+yB,4BAA8B,GACjEC,4BAA6BhzB,EAAOgzB,6BAA+B,IACnEC,2BAA4BjzB,EAAOizB,4BAA8B,QACjEC,2BAA4BlzB,EAAOkzB,4BAA8B,IACjEC,mCAAoCnzB,EAAOmzB,oCAAsC,QACjFC,mCAAoCpzB,EAAOozB,oCAAsC,IACjFC,iCAAkCrzB,EAAOqzB,kCAAoC,GAC7EC,sBAAuBtzB,EAAOszB,uBAAyB,KACvDC,2BAA4BvzB,EAAOuzB,4BAA8B,KACjEC,sCAAuCxzB,EAAOwzB,uCAAyC,GACvFC,wCAAyCzzB,EAAOyzB,yCAA2C,KAC3FC,oCAAqC1zB,EAAO0zB,qCAAuC,KACnFC,8BAA+B3zB,EAAO2zB,+BAAiC,GACvEC,8BAA+B5zB,EAAO4zB,+BAAiC,GACvEC,gCAAiC7zB,EAAO6zB,iCAAmC,IAC3EC,6CAA8C9zB,EAAO8zB,8CAAgD,GACrGC,4CAA6C/zB,EAAO+zB,8CAA+C,IAYxEC,CAA0Bh0B,GACnDi0B,EAvFej0B,CAAAA,IACd,CACHk0B,eAAgBl0B,EAAOk0B,iBAAkB,EACzCC,YAAan0B,EAAOm0B,aAAe,QACnCC,0BAA2Bp0B,EAAOo0B,2BAA6B,SAC/DC,eAAgBr0B,EAAOq0B,gBAAkB,YACzCC,gBAAiBt0B,EAAOs0B,iBAAmB,YAC3CC,4BAA6Bv0B,EAAOu0B,6BAA+B,MACnEC,YAAax0B,EAAOw0B,cAAe,EACnCC,cAAez0B,EAAOy0B,eAAiB,KACvCC,iBAAkB10B,EAAO00B,kBAAoB,SAC7CC,yBAA0B30B,EAAO20B,0BAA4B,KAC7DC,cAAe50B,EAAO40B,eAAiB,QACvCC,eAAgB70B,EAAO60B,gBAAkB,KACzCC,oBAAqB90B,EAAO80B,qBAAuB,UACnDC,iBAAkB/0B,EAAO+0B,kBAAoB,IAC7CC,0BAA2Bh1B,EAAOg1B,2BAA6B,UAC/DC,gBAAiBj1B,EAAOi1B,iBAAmB,UAC3CC,yBAA0Bl1B,EAAOk1B,0BAA4B,UAC7DC,eAAgBn1B,EAAOm1B,gBAAkB,UACzCC,4BAA6Bp1B,EAAOo1B,6BAA+B,UACnEC,kBAAmBr1B,EAAOq1B,mBAAqB,UAC/CC,yBAA0Bt1B,EAAOs1B,0BAA4B,UAC7DC,eAAgBv1B,EAAOu1B,gBAAkB,UACzCC,+BAAgCx1B,EAAOw1B,gCAAkC,YACzEC,wBAAyBz1B,EAAOy1B,yBAA2B,OAC3DC,sBAAuB11B,EAAO01B,uBAAyB,KACvDC,qBAAsB31B,EAAO21B,sBAAwB,KACrDC,YAAa51B,EAAO41B,aAAe,MACnCC,8BACI71B,EAAO61B,+BACP,8iEACJC,oBAAqB91B,EAAO81B,qBAAuB,OACnDC,4BAA6B/1B,EAAO+1B,6BAA+B,OACnEC,OAAQh2B,EAAOg2B,QAAU,UACzBC,OAAQj2B,EAAOi2B,QAAU,YAoDRC,CAAgBl2B,GACrC,OAAAuD,GAAAA,GAAAA,GAAAA,GAAA,CACI4yB,kBAAkB,EAClBC,YAAa1H,GAAW1uB,EAAOo2B,aAC/B7K,gBAAiBvrB,EAAOurB,iBAAmB,SACxC2F,GACAc,GACAW,GACAsB,IE9UcoC,CAAoB32B,EAAMM,OAAOA,QAEtD,MAAiC,KAA1BN,EAAMkxB,gBACTzyB,IAAAA,cAACiyB,EAAY,CAACM,WAAYA,EAAY4F,OAAQhO,EAAQ2I,aAAcA,EAAcH,MAAOA,IAEzF3yB,IAAAA,cAAA,2nBCtCR,MAAMo4B,GAAgB,gBAyItB,GAjI6D72B,IACzD,MAAO82B,EAAQC,IAAalG,EAAAA,EAAAA,WAAS,IAC9BrD,EAAWwJ,IAAgBnG,EAAAA,EAAAA,WAAS,IACpCoG,EAAY9H,IAAiB0B,EAAAA,EAAAA,WAAS,IACtCjB,EAAOsH,IAAYrG,EAAAA,EAAAA,UAAS,KAC5BsG,EAAaC,IAAkBvG,EAAAA,EAAAA,WAAS,IACxCwG,EAAkBC,IAAuBzG,EAAAA,EAAAA,UAAS7wB,EAAMM,OAAO4iB,0BAC/DqU,EAAQC,IAAa3G,EAAAA,EAAAA,WAAS,IAC9B3H,EAAUuO,IAAe5G,EAAAA,EAAAA,YAC1BxF,EAC6E,QAA/Exa,EAAAA,EAAAA,UAAS,CAAEC,QAASC,EAAAA,YAAYC,QAAS3L,QAASrF,EAAMqF,QAAQC,WACgB,QAAhFuL,EAAAA,EAAAA,UAAS,CAAEC,QAASC,EAAAA,YAAY2mB,SAAUryB,QAASrF,EAAMqF,QAAQC,UAC/DqyB,EHwMoBC,EAACt3B,EAAyCktB,EAAoBnC,KAC/D,CACrBwM,iBAAkBjN,GAAoBtqB,GACtCw3B,0BAA2B1M,GAA6B9qB,EAAQ+qB,GAChE0M,gBAAiBpM,GAAmBrrB,GACpC03B,qBAAsBhL,GAAwB1sB,GAC9C23B,mBAAoB5K,GAAsB/sB,GAC1C43B,kBAAmB3K,GAAqBjtB,EAAQktB,GAChD2K,kBAAmB1K,GAAqBntB,GACxC83B,oBAAqBnK,GAAuB3tB,GAC5C+3B,iBAAkB9J,GAAoBjuB,GACtCg4B,mBAAoB7J,GAAsBnuB,GAC1Ci4B,sBAAuB5J,GAAyBruB,GAChDk4B,uBAAwB5J,GAA0BtuB,GAClDm4B,wBAAyB5J,GAA2BvuB,GACpDo4B,qBAAsB5J,GAAwBxuB,GAC9Cq4B,YAjCwB,CACxBC,WAAY,MACZzM,aAAc,MACdb,OAAQ,MACRC,MAAO,MACPV,SAAU,WACVE,MAAO,OACPC,OAAQ,UG9LM4M,CAAe53B,EAAMM,OAAQktB,EAAWnC,GACpDwN,EAA4BA,KAC9B9B,GAAU,GACVC,GAAa,GACb7H,GAAc,KAalB2J,EAAAA,EAAAA,YAAU,KACFhC,GACA5H,GAAkB6J,mBAAmB/4B,GAChCyZ,MAAKyX,IACFgG,EAAShG,MAEZrX,OAAMlU,IACHuxB,EAASL,IACT72B,EAAMyQ,UAAUwY,UAAUtjB,QAGvC,CAACmxB,KACJgC,EAAAA,EAAAA,YAAU,KACN,WACI,MAAME,EAAkB,IAAIC,GAAgBj5B,GACtCk5B,QAAaF,EAAgBG,OACnC,GAAIH,EAAgBt1B,KAAKqlB,QAAS,CAC9B/oB,EAAMqF,QAAQoL,UAAUqJ,MAAM,uCAAuCkf,EAAgBt1B,KAAKqlB,aAE1F,MAAMpT,EAAyC,IAA/BqjB,EAAgBt1B,KAAKiS,QACrC1U,YAAW,KACF61B,IACD92B,EAAMqF,QAAQoL,UAAUqJ,MAAM,qCAAqCgd,MACnEQ,EAAoB0B,EAAgBt1B,KAAK9E,SACzCw4B,GAAe,MAEpBzhB,GAEP8hB,GAAY,IAAMyB,KAftB,GAgBKrf,OAAMlU,GAAK3F,EAAMyQ,UAAUwY,UAAUtjB,OAC3C,KACHmzB,EAAAA,EAAAA,YAAU,KACFvB,GACAC,GAAU,KAEf,CAAC5H,EAAO1G,IACX,MAAMkQ,EAAeA,IACV,GAAGxJ,MAAYiH,GAE1B,OACIp4B,IAAAA,cAAA,OACIqG,MAAKjB,GAAAA,GAAA,GACE8zB,EAAUE,mBACRrK,GAAasJ,GAAUsC,IAAiBzB,EAAUG,0BAA4B,KAGtFtK,KAAe2J,GAAgBA,GAAeL,IAC3Cr4B,IAAAA,cAAA,UAAQD,QAASq6B,EAA2B/zB,MAAO6yB,EAAUI,iBACxD/3B,EAAMM,OAAOmsB,cAAgBhuB,IAAAA,cAAA,OAAKqN,IAAK9L,EAAMM,OAAOmsB,aAAc4M,IAAI,OAAOv0B,MAAO6yB,EAAUK,uBAC/Fv5B,IAAAA,cAAA,OAAKqG,MAAO,IACRrG,IAAAA,cAAA,OAAKqG,MAAO,CAAEw0B,WAAY,OAAQC,SAAU,SAAWv5B,EAAMM,OAAOk5B,kBACpE/6B,IAAAA,cAAA,WAAMuB,EAAMM,OAAOm5B,iBAChB,IACNxC,GACGx4B,IAAAA,cAAA,QAAML,UAAU,UAAU0G,MAAO6yB,EAAUgB,aAAW,MAMjEnL,GAAa2J,IAAgBL,GAC1Br4B,IAAAA,cAAA,OAAKqG,MAAO6yB,EAAUY,uBAClB95B,IAAAA,cAAA,OAAKqG,MAAO6yB,EAAUa,wBACjBx4B,EAAMM,OAAOmsB,cACVhuB,IAAAA,cAAA,OAAKqN,IAAK9L,EAAMM,OAAOmsB,aAAc4M,IAAI,OAAOv0B,MAAO6yB,EAAUM,qBAErEx5B,IAAAA,cAAA,OAAKqG,MAAO,CAAE40B,SAAU,MAE5Bj7B,IAAAA,cAAA,OAAKqG,MAAO6yB,EAAUc,yBAClBh6B,IAAAA,cAAA,SAAI44B,GACJ54B,IAAAA,cAAA,UAAQD,QAASq6B,EAA2B/zB,MAAO6yB,EAAUe,sBAAoB,gBAM5F5B,GAAUsC,KACP36B,IAAAA,cAAA,OAAKqG,MAAO6yB,EAAUO,mBAClBz5B,IAAAA,cAAA,OAAKqG,MAAO6yB,EAAUQ,mBACjBn4B,EAAMM,OAAOmsB,cACVhuB,IAAAA,cAAA,OAAKqN,IAAK9L,EAAMM,OAAOmsB,aAAc4M,IAAI,OAAOv0B,MAAO6yB,EAAUM,qBAErEx5B,IAAAA,cAAA,OAAKqG,MAAO,CAAE40B,SAAU,KACxBj7B,IAAAA,cAAA,UAAQD,QA9FMm7B,KAC9B3C,GAAa,GACb7H,GAAc,IA4F8CrqB,MAAO6yB,EAAUS,sBAC7D35B,IAAAA,cAAA,UAAQD,QA3FGo7B,KAC3BpC,GAAU,GACVT,GAAU,GACVC,GAAa,GACb7H,GAAc,GACdiI,GAAe,IAsF0CtyB,MAAO6yB,EAAUU,kBACtD55B,IAAAA,cAAA,OAAK6sB,OAAO,OAAOntB,GAAG,UAAU07B,QAAQ,MAAMC,QAAQ,cAAcvO,MAAM,OAAOwO,SAAS,YACtFt7B,IAAAA,cAAA,QAAMu7B,EAzHlC,geAyHqDC,KAAMj6B,EAAMM,OAAO4sB,qBAIxDzuB,IAAAA,cAAA,OAAKqG,MAAO6yB,EAAUW,oBAClB75B,IAAAA,cAACy7B,GAAQ,CAAChJ,gBAAiBtB,EAAOtvB,OAAQN,EAAOkpB,SAAUA,EAAUiG,cAAeA,OAI9FiK,KAAkB36B,IAAAA,cAAA,OAAKqG,MAAO,CAAEC,QAAS,OAAQ6mB,WAAY,aAAe5rB,EAAMM,OAAO65B,0PCzIvG,SAAgBn6B,IAEZ,MAAO82B,EAAQC,GAAat4B,EAAAA,UAAe,GACrC27B,yWAACv2B,CAAA,GACA7D,GAKDq6B,EAAWt5B,aAAY,KAEf,qBADOI,QACQA,OAAOwvB,UAC5BoG,GAAU,GACV71B,cAAcm5B,MAEnB,KAEH,OAAO57B,EAAAA,cAAA,OAAKL,UAAU,OAAO04B,GAAUr4B,EAAAA,cAAC67B,GAAI13B,OAAAC,OAAA,GAAKu3B,4HCP9C,MAAMG,EAAwEr8B,IAKhF,IALiF,wBAClFs8B,EAAuB,6BACvBC,EAA4B,iBAC5BpqB,EAAgB,QAChBqqB,GACHx8B,EACG,MAAMwS,GAAoBC,EAAAA,EAAAA,kBAAiB,QAASN,EAAmB,kBACjEuB,GAAa0E,EAAAA,EAAAA,wBAAuBjG,EAAmBK,GAE7D,OACIjS,EAAAA,cAAA,SAAAmE,OAAAC,OAAA,CACIlE,KAAK,SACLP,UAAU,8CAA6C,aAC3Cq8B,EACZj8B,QAASk8B,GACL9oB,GAEH4oB,SCbN,MAAMG,UAA8Bl8B,EAAAA,cAA3CsB,cAAA,oBAeqB,KAAA66B,kBAAqBC,IAClC,IAAKA,GAAgC,IAApBA,EAAS70B,OACtB,OAAO,KAEX,MAAM80B,EAAuC,GAoB7C,OAnBAD,EAASE,SAAQ,CAAC5tB,EAAM5C,KAEpB,MAAMmG,GAAUC,EAAAA,EAAAA,kBAAiB,QAAStQ,KAAKL,MAAMqQ,iBAAkB,GAAI,IACrE9C,EAAWJ,EAAKI,SAAWJ,EAAKI,SAAW,GACjDmD,EAAQ0F,cAAcC,MAAQ9I,EAC9B,MAAMqE,GAAa0E,EAAAA,EAAAA,wBAAuBjW,KAAKL,MAAMqQ,iBAAkBK,GACjEjD,EAAoC,CACtCnP,UAAW6O,EAAK7O,UAChBF,UAAW,OACXmP,SAAUJ,EAAKI,SACfG,QAASP,EAAKO,QAAQkB,eACtBhB,aAAcT,EAAKS,aACnB7O,KAAM,OACN4P,qBAAsBiD,EACtBpT,SAASiY,EAAAA,EAAAA,kBAAiBpW,KAAKL,MAAMqQ,iBAAkBK,EAASnD,IAEpEutB,EAAcpsB,KAAKjB,MAGhBqtB,GAtCJn3B,SACH,MAAMm3B,EAAgBz6B,KAAKu6B,kBAAkBv6B,KAAKL,MAAMg7B,OACxD,OACIv8B,EAAAA,cAAA,QAAML,UAAU,mCACX08B,GAAiBA,EAAc90B,OAAS,EACrCvH,EAAAA,cAACwG,EAAAA,GAAc,CACX+1B,MAAOF,EACP51B,UAAW,CAAE+1B,aAAc56B,KAAKL,MAAMi7B,aAAc71B,eAAgB/E,KAAKL,MAAMoF,kBAEnF,4kBCOpB,MAAM81B,UAAyBz8B,EAAAA,cAS3BsB,YAAmBC,GACfC,MAAMD,GAPO,KAAAqQ,kBAAsCC,EAAAA,EAAAA,oBACnDjQ,KAAKL,MAAMqF,QAAQC,QAAQiL,kBAC3BlQ,KAAKL,MAAMwQ,aACXnQ,KAAKL,MAAMyQ,WA2FR,KAAA0qB,qBAAwBC,GAAuBh7B,IAA8C,IAAAi7B,EAC/D,QAAjCA,EAAIh7B,KAAKL,MAAMM,OAAOg7B,mBAAW,IAAAD,GAA7BA,EAAgCD,KAChC/6B,KAAKL,MAAMM,OAAOg7B,YAAYF,GAAW7tB,SAAWnN,EAAMI,OAAOlB,QAQlE,KAAAi8B,oBAAuBn7B,IAC1BC,KAAKL,MAAMM,OAAOk7B,QAAUp7B,EAAMI,OAAOlB,OAjGzCe,KAAKoD,MAAQ,CAAEg4B,SAAS,GACxBp7B,KAAKq7B,UAAYj9B,EAAAA,YACjB4B,KAAKs7B,WAAat7B,KAAKs7B,WAAWtd,KAAKhe,MAGpC+C,oBACH,MAAM,QAAEiC,GAAYhF,KAAKL,MAErBqF,GAAWA,EAAQC,SAAWD,EAAQC,QAAQghB,UAAYjhB,EAAQC,QAAQghB,QAAQG,kBAClFpmB,KAAKuM,SAAS,CAAE6uB,SAAS,IAI1B93B,SACH,MAAM,OAAErD,EAAM,QAAE+E,EAAO,UAAEhE,EAAS,UAAEoP,GAAcpQ,KAAKL,OACjD,wBAAEw6B,EAAuB,uBAAEoB,GAA2Bv6B,GACtD,QAAEo6B,GAAYp7B,KAAKoD,MAEnBgjB,EAAiBphB,GAAWA,EAAQC,SAAWD,EAAQC,QAAQghB,SAAWjhB,EAAQC,QAAQghB,QAAQG,iBACxG,IAAIoV,EAEJ,IACIA,EAAev7B,EACjB,MAAOgK,GAEL,OADAmG,EAAUnG,MAAM,+DAA+DA,KACxE7L,EAAAA,cAAA,WAAM6L,GAGjB,GAAImc,IAAmBgV,EAEnB,OADAp7B,KAAKL,MAAMqF,QAAQoL,UAAUnG,MAAM,2DAC5B,KAGX,IAAKoP,EAAAA,GAA0BC,UAC3B,OAAOlb,EAAAA,cAAAA,EAAAA,SAAA,MAGX,MAAMmF,EAASC,EAAAA,EAAA,GACRxD,KAAKL,OAAK,IACb87B,UAAWz7B,KAAKs7B,WAChBI,uBAAwB,CACpB93B,YAAa5D,KAAKL,MAClB5B,UAAWU,GAAAA,CAAW,uBAAwB+8B,EAAaz9B,WAC3DqT,IAAKpR,KAAKq7B,WAEdM,WAAY,CACR59B,UAAW,kCACX2tB,MAAO,QACPkQ,MAAM,GAEVC,QAAS,CACL99B,UAAW,iCAEfC,KAAMw9B,EAAaL,SACf/8B,EAAAA,cAACib,EAAAA,GAA0B,CACvBtb,UAAU,6BACVC,KAAMw9B,EAAaL,QACnBt2B,UAAW,CAAEC,OAAQ9E,KAAKk7B,oBAAqBn2B,eAAgB/E,KAAKL,MAAMqF,QAAQC,WAG1F01B,MAAO3sB,EAAAA,gBAAgBC,YAAYutB,EAAaP,cAC5C78B,EAAAA,cAACk8B,EAAqB,CAClBK,MAAOa,EAAaP,YACpBL,aAAc56B,KAAK86B,qBACnB/1B,eAAgB/E,KAAKL,MAAMqF,QAAQC,QACnC+K,iBAAkBhQ,KAAKgQ,mBAG/B8rB,aACI19B,EAAAA,cAAC87B,EAA4B,CACzBG,QAASr6B,KAAKs7B,WACdnB,wBAAyBA,EACzBC,6BAA8BmB,EAC9BvrB,iBAAkBhQ,KAAKgQ,qBAKnC,OAAOhQ,KAAKL,MAAMyF,WAAW7B,GAsBzB+3B,aACJ,MAAM,QAAEt2B,GAAYhF,KAAKL,MAErBqF,GAAWA,EAAQC,SAAWD,EAAQC,QAAQghB,UAC9CjhB,EAAQC,QAAQghB,QAAQI,mBACxB9M,SAASwiB,UAEb/7B,KAAKuM,SAAS,CAAE6uB,SAAS,KAIjC,qFCxJA,MAeA,EAfmEz7B,IAC/D,MAAM,uBAAE+7B,EAAsB,WAAEC,EAAU,QAAEE,EAAO,aAAEC,EAAY,KAAE99B,EAAI,MAAE28B,GAAUh7B,EAEnF,OACIvB,EAAAA,cAAC0L,EAAAA,OAAMvH,OAAAC,OAAA,GAAKk5B,GACRt9B,EAAAA,cAAC49B,EAAAA,MAAK,CAACj+B,UAAW49B,EAAW59B,UAAW2tB,MAAOiQ,EAAWjQ,MAAOkQ,KAAMD,EAAWC,MAC9Ex9B,EAAAA,cAACgL,EAAAA,KAAI7G,OAAAC,OAAA,GAAKq5B,GACL79B,EACA28B,GAEJmB,qHCWV,IAAKjoB,EASAkE,2BATZ,SAAYlE,GACRA,EAAAA,EAAA,eACAA,EAAAA,EAAA,qBAFJ,CAAYA,IAAAA,EAAe,KAS3B,SAAYkE,GACRA,EAAA,UACAA,EAAA,gBAFJ,CAAYA,IAAAA,EAAU,mtBCUtB,MAAMkkB,UAAuB79B,EAAAA,cAyBzBsB,YAAYC,GACRC,MAAMD,GAjBF,KAAAu8B,UAAoB,EAEpB,KAAAC,OAAiB,EAmPR,KAAAC,qBAAwBC,IACrC,OAAQA,GACJ,IAAI,mBACAr8B,KAAKk8B,UAAW,EAChBl8B,KAAKm8B,OAAQ,EACb,MACJ,IAAI,UACAn8B,KAAKk8B,UAAW,EAChBl8B,KAAKm8B,OAAQ,EACb,MACJ,IAAI,MACAn8B,KAAKk8B,UAAW,EAChBl8B,KAAKm8B,OAAQ,IA/OrBn8B,KAAKs8B,gBAAkBt8B,KAAKs8B,gBAAgBte,KAAKhe,MACjDA,KAAKu8B,SACD58B,EAAMqF,QAAQC,SAAWtF,EAAMqF,QAAQC,QAAQu3B,QAAgD,WAAtC78B,EAAMqF,QAAQC,QAAQu3B,OAAOC,KAAoB,KAAO,KACrHz8B,KAAKo8B,qBAAqBp8B,KAAKL,MAAMM,QAAUD,KAAKL,MAAMM,OAAOy8B,sBACjE18B,KAAKoD,MAAQ,CAAEoN,SAAUxQ,KAAKwQ,UAC9BxQ,KAAKyS,aAAe,GAhBjB,uBAAuBkqB,EAAgBC,GAC1C,IAAIC,EAKJ,OAJIF,GAAUC,GAAoBA,EAAiBj3B,OAAS,IACxDk3B,EAAkBD,EAAiBE,MAAK9yB,GAAQA,EAAK+yB,SAAUz7B,gBAAkBq7B,EAAOr7B,iBAGrFu7B,GAAmBA,EAAgBG,KAapC,eACN,MAAyB,OAAlBh9B,KAAKu8B,UAAuC,OAAlBv8B,KAAKu8B,SAGnCx5B,oBACCsW,EAAAA,GAASC,YACTtZ,KAAKi9B,6BAA8BpsB,EAAAA,EAAAA,mBAAkB/P,OAAQ,SAAUd,KAAKs8B,kBAEhFt8B,KAAKs8B,kBAGFprB,uBACCmI,EAAAA,GAASC,WACTxY,OAAOqQ,oBAAoB,SAAUnR,KAAKi9B,6BAA8B,GAIzE35B,SAAM,IAAA45B,EAAAC,EAET,GADAn9B,KAAKyS,aAAezS,KAAKo9B,YACrBC,EAAAA,EAAAA,IAAoBr9B,KAAKL,MAAM0D,MAE/B,OADArD,KAAKL,MAAMyQ,UAAUnG,MAAM,+BACpB,KAGX,MAQM1G,EAASC,EAAAA,EAAAA,EAAA,GACRxD,KAAKL,OACLK,KAAKoD,OAAK,IACbuI,cAXyC,CACzCb,UAAW,CACPC,GAAI,CAAEC,EAAG,kBAAmBC,EAAG,EAAGC,EAAG,GACrCoyB,GAAI,CAAEtyB,EAAG,kBAAmBC,EAAG,EAAGC,EAAG,IAEzCI,UAAU,GAOVI,aAAc1L,KAAKL,MAAMqF,QAAQC,QAAQyG,aACzCsG,WAAY,CACRpO,YAAa5D,KAAKL,MAClB5B,UAAWU,GAAAA,CAAW,SAAUuB,KAAKL,MAAMM,OAAOlC,UAAWiC,KAAKoD,MAAMoN,SAAW,YAAc,cACjGzM,IAAK,MACLrF,KAAMsB,KAAKwQ,SAAW,UAAY,cAEtCoB,SAAU,CACN7T,UAAW,eACXgG,IAAK,KACLrF,KAAMsB,KAAKwQ,SAAW,UAAY,QAEtCgC,SAAU,CACNzU,UAAW,qBACXW,KAAM,eACNqF,IAAK,MAET+K,kBAAyD,QAAxCouB,EAAEl9B,KAAKL,MAAMM,OAAOs9B,4BAAoB,IAAAL,GAAAA,EACzDpmB,uBAAiE,QAA3CqmB,EAAEn9B,KAAKL,MAAMM,OAAOu9B,+BAAuB,IAAAL,GAAAA,EACjErnB,KAAM,CACF/R,IAAK,IACLhG,UAAW,2BACXW,KAAMsB,KAAKwQ,SAAW,SAAW,YAErCoG,aAAc,CACV7S,IAAK,MACLhG,UAAW,mBAEf8Y,kBAAmB,CACf9S,IAAK,MACLhG,UAAW,iBACXW,KAAM,YAEVL,OAAQ,CACJN,UAAW,6BACXgG,IAAK,SACLrF,KAAMsB,KAAKwQ,SAAW,SAAW,WACjCrS,QAAS6B,KAAKL,OAElB89B,eAAgB,CACZ1/B,UAAW,6BAEfyY,KAAM,CACFzY,UAAW,2BACXgG,IAAK,QAET+N,2BAA4B,CACxB/T,UAAW,mCAEf8T,iBAAkB,CACd9T,UAAW,0CACXgG,IAAK,SACL,aAAc/D,KAAKL,MAAMqB,UAAU08B,oBACnCv/B,QAAS6B,KAAKL,OAElBoS,uBAAwB,CACpBhU,UAAW,wCACXgG,IAAK,QAETkN,aAAcjR,KAAKoD,MAAMoN,SACzB3D,aAAc7M,KAAKyS,aACnB1U,UAAWU,GAAAA,CAAW,SAAUuB,KAAKL,MAAMM,OAAOlC,aAGtD,OAAOiC,KAAKL,MAAMyF,WAAW7B,GAGzB65B,WACJ,MAAM,KAAE/5B,EAAI,OAAEpD,GAAWD,KAAKL,MACxBg+B,EAA8B,GAYpC,OAXI39B,KAAKk8B,UAAY74B,GAAQA,EAAKu6B,YAAcv6B,EAAKu6B,WAAW/iB,QAAUxX,EAAKu6B,WAAW/iB,OAAOlV,OAAS,GACtGtC,EAAKu6B,WAAW/iB,OAAO5Z,KAAI,CAAC+I,EAAyBE,IACjDyzB,EAAWtvB,KAAKrO,KAAK69B,uBAAuB7zB,OAAM3K,GAAW,EAAM6K,GAAO,MAI9ElK,KAAKm8B,OAASl8B,EAAO69B,aAAe79B,EAAO69B,YAAYn4B,OAAS,GAChE1F,EAAO69B,YAAY78B,KAAI,CAAC+I,EAAwB+zB,IAC5CJ,EAAWtvB,KAAKrO,KAAK69B,4BAAuBx+B,EAAW2K,GAAM,EAAO+zB,EAAM,MAG3E/9B,KAAKg+B,0BAA0BL,GAGlCK,0BAA0BL,GAA2B,IAAAM,EAAAC,EAEzD,KAD0D,QAAlCD,EAAGj+B,KAAKL,MAAMM,OAAOuY,qBAAa,IAAAylB,GAAAA,GAEtD,OAAON,EAEX,MAAMQ,EAAsC,GACtCC,EAAU,CACZtgC,GAAI,EACJoP,SAA8C,QAAtCgxB,EAAEl+B,KAAKL,MAAMM,OAAOo+B,0BAAkB,IAAAH,EAAAA,EAAI,MAClD5wB,QAAS,IACTa,iBAAa9O,EACb2N,QAAS2wB,GAIb,OAFAQ,EAAmB9vB,KAAK+vB,GAEjBD,EAGHN,uBACJS,EACAC,EACArC,EACA6B,EACAS,GAEA,MAAM7B,EACF38B,KAAKL,MAAMqF,SAAWhF,KAAKL,MAAMqF,QAAQC,SAAWjF,KAAKL,MAAMqF,QAAQC,QAAQ03B,OACzE38B,KAAKL,MAAMqF,QAAQC,QAAQ03B,OAC3B,SACJ,2BAAE8B,GAA+Bz+B,KAAKL,MAAMM,OAC5Cy+B,EAAeH,GAAWA,EAAQrxB,UAAa,IAC/C,cAAEyxB,GAAkB3+B,KAAKL,MAAMqB,UAG/B49B,EACFN,IACAG,MAAAA,OAA0B,EAA1BA,EAA4B7qB,QAAOirB,IAAS,IAAAC,EAAAC,EAAA,OAA0B,QAAtBD,EAAAD,EAAUG,oBAAY,IAAAF,OAAA,EAAtBA,EAAwBx9B,kBAAkBg9B,MAAAA,GAAgB,QAANS,EAAVT,EAAYrU,YAAI,IAAA8U,OAAA,EAAhBA,EAAkBz9B,mBAGhH,IAAI6M,EAAsB,QAIX,IAAD8wB,EAAAC,EAAd,OAHIlxB,EAAAA,gBAAgBC,YAAYqwB,MAAAA,OAAU,EAAVA,EAAYa,SAAWb,EAAYa,OAAO,GAAGC,MACzEjxB,EAAcmwB,EAAYa,OAAO,GAAGC,KAEpClD,EACO,CACHp+B,GAAIm+B,EAAeoD,eACnBnyB,SAA8E,QAAtE+xB,EAAEhD,EAAeqD,gBAAgB3C,EAAQ2B,MAAAA,OAAU,EAAVA,EAAYiB,yBAAiB,IAAAN,EAAAA,EAAI,GAClF3xB,QAASgxB,MAAAA,OAAU,EAAVA,EAAYkB,IACrBrxB,YAAAA,EACAnB,QAAShN,KAAKy/B,mBAAmBnB,EAAYnwB,EAAaqwB,GAC1DtwB,mBAAoBlO,KAAKL,MAAMM,OAAOu9B,yBAA2BoB,EACjE9mB,WAAYC,EAAAA,EAAWjE,OACvB7V,UAAW,GAAuE,QAAvEihC,EAAGjD,EAAeqD,gBAAgB3C,EAAQ2B,MAAAA,OAAU,EAAVA,EAAYiB,yBAAiB,IAAAL,EAAAA,EAAI,MAAMP,KAG7F,CACH7gC,GAAIm+B,EAAeyD,gBACnBxyB,SAAUwxB,EACVpxB,QAAUixB,GAAWA,EAAQlxB,SAAWkxB,EAAQlxB,QAAQkB,gBAAmB,GAC3EoxB,oBAAsBpB,GAAWA,EAAQqB,WAAarB,EAAQqB,UAAUrxB,gBAAmB,GAC3FJ,YAAcowB,GAAWA,EAAQnwB,OAASmwB,EAAQnwB,MAAM3C,KAAQ,GAChEuB,QAAShN,KAAK6/B,sBAAsBtB,GACpCzmB,WAAYC,EAAAA,EAAW+nB,IACvB3pB,iBAAkBooB,MAAAA,OAAO,EAAPA,EAAShxB,aAC3BtP,UAAW,GAAGygC,KAAeC,KAI7Bc,mBAAmBM,EAA8BC,GAAsD,IAA7BxB,EAAAloB,UAAA3Q,OAAA,QAAAtG,IAAAiX,UAAA,IAAAA,UAAA,GAC9E,MAAM2pB,EAAkC,GACxC,OAAKF,GAAaA,EAASG,UAAyC,IAA7BH,EAASG,SAASv6B,SAGpD3F,KAAKL,MAAMM,OAAOuY,eAAiBgmB,GACpCyB,EAAe5xB,KAAK,CAChBnB,SAAUlN,KAAKL,MAAMqB,UAAU6W,oBAC/B1J,YAAa6xB,EACb1yB,SAAS6yB,EAAAA,EAAAA,gBAAeJ,EAAW//B,KAAKL,MAAMqF,QAAuC,MAG7F+6B,EAASG,SAASj/B,KAAI,CAAC+I,EAAyBE,KAC5C+1B,EAAe5xB,KAAKrO,KAAK69B,uBAAuB7zB,OAAM3K,GAAW,EAAM6K,GAAO,OAE3E+1B,GAZI,GAePJ,sBAAsBE,GAC1B,MAAME,EAAkC,GAExC,OAAKF,GAAaA,EAASrsB,UAAyC,IAA7BqsB,EAASrsB,SAAS/N,QAIzDo6B,EAASrsB,SAASzS,KAAI,CAAC+I,EAAqB+zB,KACxCkC,EAAe5xB,KAAKrO,KAAK69B,4BAAuBx+B,EAAW2K,GAAM,EAAO+zB,OAErEkC,GANI,GA2BP3D,kBACJt8B,KAAKu8B,SAAWv8B,KAAKogC,eACrBpgC,KAAKuM,SAAS,CAAEiE,SAAUxQ,KAAKwQ,WAG3B4vB,eACJ,MAAM,QAAEp7B,GAAYhF,KAAKL,MAGzB,GAAIqF,EAAQC,SAAWD,EAAQC,QAAQu3B,QAA0C,WAAhCx3B,EAAQC,QAAQu3B,OAAOC,KACpE,MAAO,KAGX,GAAIpjB,EAAAA,GAASC,WAAaxY,OAAOu/B,WAAY,CACzC,MAAM30B,EAAe1G,EAAQC,QAAQyG,aACrC,GAAIA,EACA,OAAIA,EAAaX,IAAMjK,OAAOu/B,YAAc30B,EAAaX,GAAGE,EACjD,KACAS,EAAaP,IAAMrK,OAAOu/B,YAAc30B,EAAaP,GAAGF,EACxD,KACAS,EAAaN,IAAMtK,OAAOu/B,YAAc30B,EAAaN,GAAGH,EACxD,KACAS,EAAaL,IAAMvK,OAAOu/B,YAAc30B,EAAaL,GAAGJ,EACxD,KAEJ,KAIf,MAAO,MA5SIgxB,EAAAyD,cAAwB7rB,EAAAA,EAAgBisB,IAExC7D,EAAAoD,aAAuBxrB,EAAAA,EAAgBC,QAWtD9K,EAAAA,EAAAA,IAAA,CADCC,EAAAA,IAAU,gCAsBDD,EAAAA,EAAAA,IAAA,CAATwO,EAAAA,IAAQ,6BA8Qb,6JC/TO,MAAM8oB,UAA2BliC,EAAAA,cAapCsB,YAAYC,GACRC,MAAMD,GAXF,KAAAuM,aAAuB,EAmTd,KAAA2B,qBAAuB,CAAC0yB,EAA0BxyB,IAA0B,KACzF,MAAMb,EAAWa,GAAUA,EAAOb,SAAWa,EAAOb,SAAW,GACzDb,EAAiC,CAAC,CAAEZ,IAAK80B,EAAkBz0B,QAASoB,IAGtEc,EAAAA,gBAAgBC,YAAYF,EAAOG,qBACnCH,EAAOG,mBAAmBjN,KAAI+I,IAC1B,GAAIA,GAAQA,EAAKoE,MAAO,CACpB,MAAMoyB,EAAWx2B,EAAKoE,MAAM3C,IACtBg1B,EAA+Bz2B,EAAKoE,MAAMzC,cAChDU,EAAiBgC,KAAK,CAClB5C,IAAK+0B,EACL10B,QAAS9B,EAAKhM,KACd2N,cAAe80B,EACfnyB,qBAAsB,CAAEjB,QAASrD,EAAKqD,QAAQkB,sBAK9DvO,KAAKuM,SAAS,CACVjC,cAAe+B,EAAiB1G,OAAS,EAAI0G,EAAmB,CAAC,CAAEZ,IAAK,UACxEi1B,qBAAsBxzB,KAIb,KAAAsB,sBAAwB,CAACnL,EAAqBoL,IAAsB,KAC5EzO,KAAKL,MAAMsR,cASZqvB,EAAmB3xB,aAAc,EACjC3O,KAAKuM,SAAS,CACVE,WAAYpJ,EAAKvF,GACjB8Q,oBAAqBvL,EAAK6J,SAC1B2B,WAAYJ,MAZhBzO,KAAKuM,SAAS,CACVE,WAAYzM,KAAKoD,MAAMqJ,YAAczM,KAAKoD,MAAMqJ,aAAepJ,EAAKvF,QAAMuB,EAAYgE,EAAKvF,GAC3F+Q,WAAYJ,IAEZzO,KAAKL,MAAMmP,mBACX9O,KAAK6N,qBAAqBxK,EAAK8K,YAAc9K,EAA7CrD,KAYK,KAAA+O,cAAgB,IAAM,KACnCuxB,EAAmB3xB,aAAc,EACjC3O,KAAKuM,SAAS,CAAEE,WAAYzM,KAAKoD,MAAMyL,cAO1B,KAAAG,oBAAuBjP,IAChCC,KAAKiP,SAASC,UAAYlP,KAAKiP,SAASC,QAAQC,SAASpP,EAAMI,SAC/DH,KAAKuM,SAAS,CACVE,gBAAYpN,EACZuP,oBAAqB,GACrBtE,cAAe,QASV,KAAAq2B,oBAAuB5gC,IAChCC,KAAKiP,SAASC,UAAYlP,KAAKiP,SAASC,QAAQC,SAASpP,EAAM6gC,gBAC/D5gC,KAAK6gC,iBAWI,KAAAzxB,uBAAyB,CAAClF,EAAe0E,EAA8BS,KAC/EixB,EAAmB3xB,aAAyB,IAAVzE,MAGlCmF,IAAmBT,IAGjBA,IAAwBS,EASlB,KAAAyxB,kBAAqBx2B,IAClC,IAAKA,IAAkBA,EAAcmB,IACjC,OAAO,KAGX,MACMZ,EAAuC,CACzCC,UAAW,CACPC,GAAI,CAAEC,EAAG,kBAAmBC,EAAG,EAAGC,EAAG,GACrCC,GAAI,CAAEH,EAAG,kBAAmBC,EAAG,EAAGC,EAAG,GACrCE,GAAI,CAAEJ,EAAG,kBAAmBC,EAAG,EAAGC,EAAG,GACrCG,GAAI,CAAEL,EAAG,kBAAmBC,EAAG,EAAGC,EAAG,IAEzCI,UAAU,GAEuB,IAADzN,EAAAkjC,EAApC,YAAyB1hC,KAVAoL,EAAAA,EAAAA,kBAAiB,GAAGH,EAAcmB,MAAOzL,KAAKL,MAAMqF,QAAQ2F,cAAc5F,eAAe6F,aAY1GxM,EAAAA,cAAC4iC,EAAAA,GAAKz+B,OAAAC,OAAA,CACFuC,eAAgB/E,KAAKL,MAAMqF,QAAQ2F,cAAc5F,eACjDhH,UAAU,sBACNuM,EAAa,CACjBoB,aAAc1L,KAAKL,MAAMqF,QAAQC,QAAQyG,aACzCC,cAAqF,QAAxE9N,EAA6B,QAA7BkjC,EAAEz2B,EAAcqB,qBAAa,IAAAo1B,EAAAA,EAAI/gC,KAAKL,MAAMM,OAAO2L,6BAAqB,IAAA/N,EAAAA,EAAIgN,EACzFgB,oBAAoB,OACpBnN,KAAK,WACLZ,GAAG,kCACHgO,QAASxB,EAAcwB,WAI5B,MAraP9L,KAAKiP,SAAW7Q,EAAAA,YAChB4B,KAAK8P,YAAc1R,EAAAA,YACnB4B,KAAKoD,MAAQ,CAAEqJ,gBAAYpN,EAAWuP,oBAAqB,GAAIC,gBAAYxP,EAAWqhC,qBAAsB,IAC5G1gC,KAAK6gC,cAAgB7gC,KAAK6gC,cAAc7iB,KAAKhe,MAC7CA,KAAKgQ,kBAAmBC,EAAAA,EAAAA,oBACpBjQ,KAAKL,MAAMqF,QAAQC,QAAQiL,kBAC3BlQ,KAAKL,MAAMwQ,aACXnQ,KAAKL,MAAMyQ,WAEfpQ,KAAKqQ,SAAUC,EAAAA,EAAAA,kBAAiB,QAAStQ,KAAKgQ,iBAAkB,GAAI,IAGjEjN,oBACCsW,EAAAA,GAASC,YACT/T,SAASwL,KAAKD,iBAAiB,YAAa9Q,KAAKgP,qBACjDzJ,SAASwL,KAAKD,iBAAiB,WAAY9Q,KAAK2gC,sBAIjD39B,qBAAkB,IAAAgO,EACO,QAAxBA,EAAAhR,KAAK8P,YAAYZ,eAAO,IAAA8B,GAAxBA,EAA0BxB,SAAS,IAAMxP,KAAKL,MAAMsR,cACnDjR,KAAK8P,YAAYZ,QAAQM,SAAS,GAAmBC,QAIvDyB,uBACCmI,EAAAA,GAASC,YACT/T,SAASwL,KAAKI,oBAAoB,YAAanR,KAAKgP,qBAAqB,GACzEzJ,SAASwL,KAAKI,oBAAoB,WAAYnR,KAAK2gC,qBAAqB,IAIzEr9B,SACH,MAAM,aAAE2N,EAAY,SAAEW,EAAQ,iBAAEC,EAAgB,2BAAEC,EAA0B,uBAAEC,EAAsB,WAAEC,GAAehS,KAAKL,MAG1H,OADAK,KAAKkM,aAAe,EAEhB9N,EAAAA,cAAC0L,EAAAA,OAAMvH,OAAAC,OAAA,GACCwP,EAAU,CACdjU,UAAWU,GAAAA,CAAWuT,EAAWjU,UAAWkT,QAA0C5R,IAA1BW,KAAKoD,MAAMqJ,WAA2B,QAAU,YAE5GrO,EAAAA,cAACgL,EAAAA,KAAI7G,OAAAC,OAAA,GAAKoP,EAAQ,CAAER,IAAKpR,KAAKiP,SAAUgD,SAAS,OAC5ChB,QAA0C5R,IAA1BW,KAAKoD,MAAMqJ,YACxBrO,EAAAA,cAACgL,EAAAA,KAAI7G,OAAAC,OAAA,GAAKsP,GACN1T,EAAAA,cAACgL,EAAAA,KAAI7G,OAAAC,OAAA,GAAKqP,EAAgB,CAAE1T,QAAS6B,KAAK+O,mBAC1C3Q,EAAAA,cAACgL,EAAAA,KAAI7G,OAAAC,OAAA,GAAKuP,GAAyB/R,KAAKoD,MAAMwL,sBAGrD5O,KAAKkS,mBAMdA,iBACJ,MAAM,SAAEM,EAAQ,aAAE3F,EAAY,aAAEoE,GAAiBjR,KAAKL,OAChD,WAAE8M,GAAezM,KAAKoD,MACtBqP,EAA8B,GAEpC,GAAIxB,QAA+B5R,IAAfoN,GAA4BI,EAAalH,OAAS,EAAG,CACrE,IAAI+M,EAA0B,GAC9B,IAAK,MAAM6F,KAAiB1L,EAAc,CACtC,GAAI0L,GAAiBA,EAAcza,KAAO2O,EAAY,CAClDiG,EAAW6F,EACV+nB,EAAmB3xB,YAEd3O,KAAKuM,SAAS,CAAEsC,gBAAYxP,EAAWuP,oBAAqB2J,EAAcrL,WAD1ElN,KAAKuM,SAAS,CAAEsC,gBAAYxP,IAElC,MAGJ,GADAqT,EAAW1S,KAAK2S,gBAAgB4F,GAC5B7F,GAAYA,EAAS5U,KAAO2O,EAC5B,MAIRiG,GACID,EAAapE,KACTjQ,EAAAA,cAACgL,EAAAA,KAAI7G,OAAAC,OAAA,CAACoE,IAAK8L,EAAS5U,IAAQ0U,GACvB,IACAxS,KAAK4S,oBAAoBF,GAAW,WAIjD7F,EAAa6tB,SAAQ,CAAC1wB,EAAqBE,KACvCuI,EAAapE,KACTjQ,EAAAA,cAACgL,EAAAA,KAAI7G,OAAAC,OAAA,CACDoE,IAAKsD,GACDsI,EAAQ,CACZpB,IAAKpR,KAAKoP,uBAAuBlF,EAAOlK,KAAKoD,MAAMwL,oBAAqB5E,EAAKkD,UAAYlN,KAAK8P,YAAc,OAE3G9P,KAAK4S,oBAAoB5I,QAM1C,OAAOyI,EAGHE,gBAAgB3I,GACpB,MAAM0J,EAAW1J,GAAQA,EAAKgD,QAC9B,GAAI0G,GAAYA,EAAS/N,OAAS,EAC9B,IAAK,IAAIqb,EAAI,EAAGA,GAAKtN,EAAS/N,OAAS,EAAGqb,IAAK,CAC3C,GAAItN,EAASsN,GAAGljB,KAAOkC,KAAKoD,MAAMqJ,WAI9B,OAHC6zB,EAAmB3xB,YAEd3O,KAAKuM,SAAS,CAAEsC,WAAY7E,GAAQA,EAAKlM,GAAI8Q,oBAAqB8E,EAASsN,GAAG9T,WAD9ElN,KAAKuM,SAAS,CAAEsC,WAAY7E,MAAAA,OAAI,EAAJA,EAAMlM,KAEjC4V,EAASsN,GAEpB,MAAM7N,EAAQnT,KAAK2S,gBAAgBe,EAASsN,IAC5C,GAAI7N,EACA,OAAOA,EAKnB,OADAnT,KAAKL,MAAMqF,QAAQoL,UAAUnG,MAAM,iDAC5B,KAGH2I,oBAAoB/F,GACxB,OAAIA,GAAgBA,EAAaG,SAAWH,EAAaG,QAAQrH,OAAS,EAClE3F,KAAKL,MAAMsR,mBAA0C5R,IAA1BW,KAAKoD,MAAMqJ,WAC/BzM,KAAKoT,eAAevG,EAAaG,QAASH,EAAa/O,IAAI,GAGlEM,EAAAA,cAAAA,EAAAA,SAAA,KACK4B,KAAKqT,sBAAsBxG,GAC3B7M,KAAKoT,eAAevG,EAAaG,QAASH,EAAa/O,IAAI,IAG7D+O,GAAgBA,EAAaK,UAAYL,EAAaS,SAAWT,EAAaS,QAAQ3H,OAAS,EAC/F3F,KAAKsS,oBAAoBzF,EAAcA,EAAa/O,IAAI,GAAO,GAC/D+O,GAAgBA,EAAaK,WAAaL,EAAaS,QACvDtN,KAAKuS,oBAAoB1F,EAAcA,EAAa/O,IAAI,IAEnEkC,KAAKL,MAAMqF,QAAQoL,UAAUnG,MAAM,yDAC5B,MAGHmJ,eAAeM,EAA4BjH,EAAqBw0B,GACpE,MAAM,aAAEhwB,EAAY,SAAEuB,GAAaxS,KAAKL,MAClCuhC,EAAyBlhC,KAAKL,MAAMM,OAAO+T,uBAAwB,EACnEC,EAA0BjU,KAAKL,MAAMM,OAAOiU,kBAAoB,EAGtE,GAAIzH,GAAczM,KAAKoD,MAAMqJ,aAAeA,EAExC,OADAzM,KAAKL,MAAMqF,QAAQoL,UAAUnG,MAAM,gEAC5B,KAGX,IAAKyJ,GAAgC,IAApBA,EAAS/N,OAEtB,OADA3F,KAAKL,MAAMqF,QAAQoL,UAAUnG,MAAM,4DAC5B,KAGX,IAAImK,EAAyB,GAC7B,MAAMC,EACFX,GACAA,EAASzS,KAAI,CAAC8M,EAAuBgwB,KACjC,MAAMzpB,EAAavG,EAAOf,SAAWe,EAAOf,QAAQrH,OAAS,EAC7D,IAAI+M,EAOA1F,EALA0F,EADA4B,GAAcrD,EACHjR,KAAKqT,sBAAsBtF,EAAQtB,EAAYsxB,GAE/ChwB,EAAOT,QAAUtN,KAAKsS,oBAAoBvE,EAAQgwB,GAAO/9B,KAAKuS,oBAAoBxE,GAIjG,MAAMozB,EAAc7sB,GAAc4sB,GAA0BlhC,KAAKkM,cAAgBuI,KAAKC,MAAMT,GAA2B,EAMvH,OALIktB,IACAnhC,KAAKkM,eACLkI,EAAiB8sB,EAAyB,SAASlhC,KAAKkM,aAAa2I,aAAe,GACpF7H,EAAUhN,KAAKoT,eAAerF,EAAOf,QAASiE,EAAelD,EAAOjQ,QAAKuB,GAAW,IAGpFjB,EAAAA,cAACgL,EAAAA,KAAI7G,OAAAC,OAAA,GACGgQ,EAAQ,CACZ5L,IAAKmH,EAAOjQ,GACZC,UAAWU,GAAAA,CAAW+T,EAASzU,UAAWojC,GAAe,eACzD/vB,IAAKpR,KAAKoP,uBAAuB2uB,EAAK/9B,KAAKoD,MAAMwL,oBAAqBb,EAAOb,UAAYlN,KAAK8P,YAAc,OAE3G4C,EACA1F,MAIjB,OAAOhN,KAAK+U,YAAYX,EAAgBC,EAAa5H,EAAYw0B,GAG7D5tB,sBAAsBtF,EAAuBtB,EAAqBvC,GACtE,MAAM,OAAE7L,GAAW2B,KAAKL,MACxB,OACIvB,EAAAA,cAACgL,EAAAA,KAAI7G,OAAAC,OAAA,CACDoE,IAAKsD,GACD7L,EAAM,CACVF,QAAS6B,KAAKwO,sBAAsBT,EAAQtB,GAC5C20B,QAASphC,KAAK6gC,cAAa,kBACV7gC,KAAKoD,MAAMqJ,YAAczM,KAAKoD,MAAMqJ,aAAesB,EAAOjQ,IAAG,mBAC5DkC,KAAKoD,MAAMqJ,YAAczM,KAAKoD,MAAMqJ,aAAesB,EAAOjQ,IAAG,cAClE2O,IAEZsB,EAAOb,UAKZoF,oBACJvE,EACA7D,GAEyB,IADzBm3B,IAAA/qB,UAAA3Q,OAAA,QAAAtG,IAAAiX,UAAA,KAAAA,UAAA,GACAgrB,EAAAhrB,UAAA3Q,OAAA,QAAAtG,IAAAiX,UAAA,IAAAA,UAAA,GAEA,MAAM,KAAER,GAAS9V,KAAKL,MAChBuN,EAAWa,EAAOb,SAAWa,EAAOb,SAAW,GAC/C6C,EAAchC,EAAOI,YAAcJ,EAAOI,YAAc,GAC9DnO,KAAKqQ,QAAQ0F,cAAcC,MAAQ9I,EACnC,MAAMqE,GAAa0E,EAAAA,EAAAA,wBAAuBjW,KAAKgQ,iBAAkBhQ,KAAKqQ,SACtE,OACIjS,EAAAA,cAACgL,EAAAA,KAAI7G,OAAAC,OAAA,GACGsT,EAAI,CACRlP,IAAKsD,EACLk3B,QAASE,GAAYthC,KAAK6gC,cAC1B1gC,OAAQ4N,EAAOoI,iBAAmB,cAAW9W,EAC7CyV,YAAausB,GAAerhC,KAAK6N,qBAAqBkC,EAAahC,GACnEmI,KAAMnI,EAAOT,SACTiE,EAAU,CACdpT,SAASiY,EAAAA,EAAAA,kBAAiBpW,KAAKgQ,iBAAkBhQ,KAAKqQ,QAASnD,KAE9Da,EAAOb,UAKZqJ,uBAAuBrJ,EAAmBG,GAC9C,MAAM,KAAEyI,GAAS9V,KAAKL,MACtBK,KAAKqQ,QAAQ0F,cAAcC,MAAQ9I,EACnC,MAAMqE,GAAa0E,EAAAA,EAAAA,wBAAuBjW,KAAKgQ,iBAAkBhQ,KAAKqQ,SACtE,OAAInD,GAAYG,EAERjP,EAAAA,cAACgL,EAAAA,KAAI7G,OAAAC,OAAA,GAAKsT,EAAI,CAAEI,KAAM7I,GAAakE,EAAU,CAAEpT,SAASiY,EAAAA,EAAAA,kBAAiBpW,KAAKgQ,iBAAkBhQ,KAAKqQ,QAASnD,KACzGA,GAIN,KAGHqF,oBAAoBxE,EAAuB7D,GAAyC,IAAzBo3B,EAAAhrB,UAAA3Q,OAAA,QAAAtG,IAAAiX,UAAA,IAAAA,UAAA,GAC/D,MAAM,KAAEE,GAASxW,KAAKL,MACtB,OACIvB,EAAAA,cAACgL,EAAAA,KAAI7G,OAAAC,OAAA,CAACoE,IAAKsD,GAAWsM,EAAI,CAAE4qB,QAASE,GAAYthC,KAAK6gC,gBACjD9yB,EAAOb,UAKZ6H,YAAY0B,EAAepC,EAA4BktB,EAAsBC,GACjF,MAAM,aAAE5qB,EAAY,SAAEhF,EAAQ,kBAAEiF,EAAiB,kBAAE/H,EAAiB,uBAAEgI,EAAsB,aAAE7F,GAAiBjR,KAAKL,MAC9G8hC,GACDxwB,IACAnC,GAAqBgI,KACrB9I,EAAAA,gBAAgBC,YAAYjO,KAAKoD,MAAMkH,iBACvCk3B,EACCE,GACDzwB,GAAgB6F,GAA0B9I,EAAAA,gBAAgBC,YAAYjO,KAAKoD,MAAMkH,iBAAmBk3B,EACnGG,EAAoB3hC,KAAKkM,aAAe,GAAKu1B,EAAuB7qB,EAAc7Y,UAAY,kBAEpG,OADAiC,KAAKkM,aAAe,EAEhB9N,EAAAA,cAACgL,EAAAA,KAAI7G,OAAAC,OAAA,GAAKoU,EAAY,CAAE7Y,UAAW4jC,IAC/BvjC,EAAAA,cAACgL,EAAAA,KAAI7G,OAAAC,OAAA,GACGoP,EAAQ,CACZ7T,UAAWU,GAAAA,CACPmT,EAAS7T,UACT0Y,EACAgrB,GAAwB,gBACxBA,GACIzhC,KAAKL,MAAMM,OAAOiU,kBAClBlU,KAAKL,MAAMM,OAAOiU,iBAAmB,GACrC,yBAGPG,GAEJotB,GACGzhC,KAAKoD,MAAMkH,eACXtK,KAAKoD,MAAMkH,cAAcrJ,KAAI+I,IAAI,IAAAuN,EAAA,OAC7BnZ,EAAAA,cAACgL,EAAAA,KAAI7G,OAAAC,OAAA,GAAKqU,EAAiB,CAAEjQ,IAAKoD,EAAKyB,IAAK1N,UAAW8Y,EAAmB9Y,YACrEiC,KAAKoD,MAAMkH,eAAiBtK,KAAK8gC,kBAAkB92B,GACnD03B,GAA6B1hC,KAAKuW,uBAAuBvM,EAAK8B,QAAkC,QAA3ByL,EAAEvN,EAAKsE,4BAAoB,IAAAiJ,OAAA,EAAzBA,EAA2BlK,cAiGnHwzB,gBACC7gC,KAAKL,MAAMsR,cACZjR,KAAKuM,SAAS,CAAEE,gBAAYpN,EAAWiL,cAAe,KAAMsE,oBAAqB,MAjZ1E0xB,EAAA3xB,aAAuB,EAub1C,4DCzbYvE,iHAAZ,SAAYA,GACRA,EAAAA,EAAA,eACAA,EAAAA,EAAA,aACAA,EAAAA,EAAA,aACAA,EAAAA,EAAA,iBACAA,EAAAA,EAAA,eACAA,EAAAA,EAAA,0BACAA,EAAAA,EAAA,uBAPJ,CAAYA,IAAAA,EAAgB,KAsBrB,MAAMC,EAAmBA,CAAC1K,EAAqC2K,EAAuBC,KACzF,MAAMC,GAAmBC,EAAAA,EAAAA,kBAAiB,GAAGH,IAAiB3K,EAAM+K,SAAS1F,QAAQ2F,cAAc5F,eAAe6F,aAC5GC,EAAgD,CAClDC,UAAW,CACPC,GAAI,CAAEC,EAAG,kBAAmBC,EAAG,EAAGC,EAAG,GACrCC,GAAI,CAAEH,EAAG,kBAAmBC,EAAG,EAAGC,EAAG,GACrCE,GAAI,CAAEJ,EAAG,kBAAmBC,EAAG,EAAGC,EAAG,GACrCG,GAAI,CAAEL,EAAG,kBAAmBC,EAAG,EAAGC,EAAG,IAEzCI,UAAU,GAEd,QAAyBjM,IAArBmL,EAAgC,CAAC,IAADe,EAChC,MAAMC,EAAiC,CAAEC,IAAKjB,GAC9C,OACIpM,EAAAA,cAACwG,EAAAA,GAAcrC,OAAAC,OAAA,CACXuC,eAAgBpF,EAAM+K,SAAS1F,QAAQ2F,cAAc5F,eACrDhH,UAAU,sBACNyN,EAAS,CACbE,aAAc/L,EAAM+K,SAAS1F,QAAQC,QAAQyG,aAC7CC,cAA0D,QAA7CJ,EAAE5L,EAAM+K,SAASzK,OAAO2L,6BAAqB,IAAAL,EAAAA,EAAIV,EAC9DgB,oBAAoB,OACpBnN,KAAK,WACLoN,QAASvB,KAIrB,OAAO,2kBC/CJ,MAAMwB,UAAmC3N,EAAAA,cAuB5CsB,YAAmBC,GACfC,MAAMD,GArBO,KAAAqM,eAAyB5B,EAAiB6B,KAEnD,KAAAC,aAAuB9B,EAAiB+B,KAM/B,KAAAC,UAAoBhC,EAAiBgC,UAIrC,KAAAC,iBAA0C,GAmG1C,KAAAC,cAAgB,KAC7BtM,KAAKuM,UAASC,IAAa,CACvBC,WAAY,EACZC,WAAYF,EAAcE,eA2QjB,KAAAc,0BAA4B,CAACC,EAA4BC,IAA0B,KAChG,MAAM,eAAEC,GAAmB3N,KAAKoD,MAC1BwK,EAAU,CAAE,CAACH,IAAWC,GAC9B1N,KAAKuM,SAAS,CAAEoB,eAAcnK,EAAAA,EAAA,GAAOmK,GAAmBC,MAmI3C,KAAAC,qBAAuB,CAACC,EAA6BC,IAA0B,KAC5F,MAAMb,EAAWa,EAAOb,SAAWa,EAAOb,SAAW,GAC/Cb,EAA0C,CAAC,CAAEZ,IAAKqC,EAAqBhC,QAASoB,IAGtF,GAAIc,EAAAA,gBAAgBC,YAAYF,EAAOG,oBACnC,IAAK,MAAMlE,KAAQ+D,EAAOG,mBAAoB,CAC1C,MAAMC,EAAcnE,EAAKoE,MAAM3C,IAC/BY,EAAiBgC,KAAK,CAClB5C,IAAK0C,EACLrC,QAAS9B,EAAKhM,KACdsQ,qBAAsB,CAAEjB,QAASrD,EAAKqD,QAAQkB,kBAI1DvO,KAAKuM,SAAS,CACVjC,cAAe0D,EAAAA,gBAAgBC,YAAY5B,GAAoBA,EAAmB,CAAC,CAAEZ,IAAK,aAUjF,KAAA+C,sBAAwB,CAACnL,EAAqBoL,IAAsB,KAC5EzO,KAAKoD,MAAMsL,cASZ3C,EAA2B4C,aAAc,EACzC3O,KAAKuM,SAAS,CACVE,WAAYpJ,EAAKvF,GACjB8Q,oBAAqBvL,EAAK6J,SAC1B2B,WAAYJ,MAZhBzO,KAAKuM,SAAS,CACVE,WAAYpJ,EAAKvF,GACjB+Q,WAAYJ,IAEZzO,KAAKL,MAAM+K,SAASoE,mBACpB9O,KAAK6N,qBAAqBxK,EAAK8K,YAAc9K,EAA7CrD,KAgBK,KAAA+O,cAAgB,IAAM,KACnChD,EAA2B4C,aAAc,EACzC3O,KAAKuM,UAASC,IAAa,CAAOC,WAAYD,EAAcqC,gBAO/C,KAAAG,oBAAuBjP,IAChCC,KAAKiP,SAASC,UAAYlP,KAAKiP,SAASC,QAAQC,SAASpP,EAAMI,UAC1DH,KAAKoD,MAAMsL,aAGZ1O,KAAKuM,SAAS,CAAEE,gBAAYpN,EAAWuP,oBAAqB,GAAIlC,WAAW,IAF3E1M,KAAKuM,SAAS,CAAEE,WAAY,EAAGmC,oBAAqB,GAAIlC,WAAW,MAc9D,KAAA0C,uBAAyB,CAAClF,EAAe0E,EAA8BS,KAE/EtD,EAA2B4C,aADL,IACoBzE,MAG1CmF,IAAmBT,IAGjBA,IAAwBS,EAMlB,KAAAC,cAAgB,KAAW,IAAAC,EACnCvP,KAAKoD,MAAMsL,aAGZ1O,KAAKuM,SAAS,CAAEE,gBAAYpN,EAAWuP,oBAAqB,GAAIlC,WAAW,IAF3E1M,KAAKuM,SAAS,CAAEE,WAAY,EAAGmC,oBAAqB,GAAIlC,WAAW,IAIjD,QAArB6C,EAAAvP,KAAKiP,SAASC,eAAO,IAAAK,GAArBA,EAAuBC,SAAS,GAAmBC,SAOvC,KAAAC,aAAgB3P,IAC8D,IAAD4P,EAAtF5P,EAAM6P,UAAY5P,KAAKoM,YAAcpM,KAAKoD,MAAMsL,cAAgB1O,KAAKoD,MAAMsJ,YAC3E1M,KAAKuM,SAAS,CAAEE,WAAY,EAAGmC,oBAAqB,GAAIlC,WAAW,IAC7C,QAArBiD,EAAA3P,KAAKiP,SAASC,eAAO,IAAAS,GAArBA,EAAuBH,SAAS,GAAmBC,UAO3C,KAAAI,sBAAwB,KACrC7P,KAAKuM,SAAS,CAAEmC,aAAc1O,KAAK0O,gBA9lBnC1O,KAAKiP,SAAW7Q,EAAAA,YAChB4B,KAAK8P,YAAc1R,EAAAA,YACnB,MAAM,aAAEyO,GAAiB7M,KAAKL,MAAM+K,SACpC,GAAIsD,EAAAA,gBAAgBC,YAAYpB,IAAiBmB,EAAAA,gBAAgBC,YAAYpB,EAAa,GAAGG,SAAU,CACnG,MAAM+C,EAAclD,EAAa,GAAGG,QAAQ,GAAGmB,YAActB,EAAa,GAAGG,QAAQ,GAAGmB,YAAc,GAChGjB,EAAWL,EAAa,GAAGG,QAAQ,GAAGE,SAAWL,EAAa,GAAGG,QAAQ,GAAGE,SAAW,GAC7FlN,KAAKqM,iBAAmB,CAAC,CAAEZ,IAAKsE,EAAajE,QAASoB,IAGlDc,EAAAA,gBAAgBC,YAAYpB,EAAa,GAAGG,QAAQ,GAAGkB,qBACvDrB,EAAa,GAAGG,QAAQ,GAAGkB,mBAAmBjN,KAAI+I,IAC9C,MAAMmE,EAAcnE,EAAKoE,MAAM3C,IAM/B,OALAzL,KAAKqM,iBAAiBgC,KAAK,CACvB5C,IAAK0C,EACLrC,QAAS9B,EAAKhM,KACdsQ,qBAAsB,CAAEjB,QAASrD,EAAKqD,QAAQkB,kBAE3C,QAKnBvO,KAAKoD,MAAQ,CACTqJ,WAAY,EACZmC,oBAAqB,GACrBC,gBAAYxP,EACZsO,eAAgB,GAChBe,aAAc1O,KAAK0O,aACnBpE,cAAetK,KAAKqM,iBACpBK,WAAW,GAEf1M,KAAKgQ,kBAAmBC,EAAAA,EAAAA,oBACpBjQ,KAAKL,MAAM+K,SAAS1F,QAAQC,QAAQiL,kBACpClQ,KAAKL,MAAM+K,SAASyF,aACpBnQ,KAAKL,MAAM+K,SAAS0F,WAExBpQ,KAAKqQ,SAAUC,EAAAA,EAAAA,kBAAiB,QAAStQ,KAAKgQ,iBAAkB,GAAI,IACpEhQ,KAAKuR,YAAa0E,EAAAA,EAAAA,wBAAuBjW,KAAKgQ,iBAAkBhQ,KAAKqQ,SAG/D,mBACN,MAAoG,QAA7FG,EAAAA,EAAAA,UAAS,CAAEC,QAASC,EAAAA,YAAYC,QAAS3L,QAAShF,KAAKL,MAAM+K,SAAS1F,QAAQC,UAGlFlC,oBACH/C,KAAK4Q,mCAAoCC,EAAAA,EAAAA,mBAAkB/P,OAAQ,SAAUd,KAAK6P,uBAClFtK,SAASuL,iBAAiB,UAAY9Q,KAAK0P,cAA2C,GACtF1P,KAAK6P,wBACLtK,SAASwL,KAAKD,iBAAiB,YAAa9Q,KAAKgP,qBAG9ChM,qBAAkB,IAAAgO,EACO,QAAxBA,EAAAhR,KAAK8P,YAAYZ,eAAO,IAAA8B,GAAxBA,EAA0BxB,SAAS,IAAMxP,KAAKL,MAAM+K,SAASuG,cAC5DjR,KAAK8P,YAAYZ,QAAQM,SAAS,GAAmBC,QAIvDyB,uBACHpQ,OAAOqQ,oBAAoB,SAAUnR,KAAK4Q,mCAAoC,GAC9ErL,SAASwL,KAAKI,oBAAoB,YAAanR,KAAKgP,qBAAqB,GAGtE1L,SACHtD,KAAKkM,aAAe,EAEpB,OACI9N,EAAAA,cAACgL,EAAAA,KAAI,CAACrL,UAAU,qBAAqBqT,IAAKpR,KAAKiP,UAC1CjP,KAAKoD,MAAMsL,aACR1O,KAAK0R,oBAELtT,EAAAA,cAAAA,EAAAA,SAAA,KACIA,EAAAA,cAACC,EAAAA,OAAMkE,OAAAC,OAAA,CACHzE,UAAU,sBACVI,QAAS6B,KAAKsM,cAAa,gBAT7B,oBAWE+E,MAAOrR,KAAKL,MAAM+K,SAAS1J,UAAUsQ,mBAAkB,aAC3CtR,KAAKL,MAAM+K,SAAS1J,UAAUsQ,oBACtCtR,KAAKuR,aAEZvR,KAAKwR,wBAiBlBA,sBACJ,OACIpT,EAAAA,cAACqT,EAAAA,SAAQ,CAAC1T,UAAU,mCAAmCkG,OAAQjE,KAAKoD,MAAMsJ,WACrE1M,KAAKoD,MAAMsL,aAAe1O,KAAK0R,oBAAsB1R,KAAK2R,sBAK/DD,oBACJ,MAAM,SAAEE,EAAQ,iBAAEC,EAAgB,2BAAEC,EAA0B,uBAAEC,EAAsB,WAAEC,GAAehS,KAAKL,MAAM+K,SAGlH,OADA1K,KAAKkM,aAAe,EAEhB9N,EAAAA,cAAC0L,EAAAA,OAAMvH,OAAAC,OAAA,GACCwP,EAAU,CACdjU,UAAWU,GAAAA,CACPuT,EAAWjU,UACXiC,KAAKoD,MAAMsL,mBAA0CrP,IAA1BW,KAAKoD,MAAMqJ,WAA2B,QAAU,YAG/ErO,EAAAA,cAACgL,EAAAA,KAAI7G,OAAAC,OAAA,GAAKoP,EAAQ,CAAEK,SAAS,OACxBjS,KAAKoD,MAAMsL,mBAA0CrP,IAA1BW,KAAKoD,MAAMqJ,YACnCrO,EAAAA,cAACgL,EAAAA,KAAI7G,OAAAC,OAAA,GAAKsP,GACN1T,EAAAA,cAACgL,EAAAA,KAAI7G,OAAAC,OAAA,GAAKqP,EAAgB,CAAE1T,QAAS6B,KAAK+O,mBAC1C3Q,EAAAA,cAACgL,EAAAA,KAAI7G,OAAAC,OAAA,GAAKuP,GAAyB/R,KAAKoD,MAAMwL,sBAGrD5O,KAAKkS,mBAMdP,qBACJ,MAAM,SAAEC,EAAQ,WAAEI,GAAehS,KAAKL,MAAM+K,SAE5C,OACItM,EAAAA,cAAC0L,EAAAA,OAAMvH,OAAAC,OAAA,GAAKwP,EAAU,CAAEjU,UAAWU,GAAAA,CAAWuT,EAAWjU,UAAW,8BAChEK,EAAAA,cAACgL,EAAAA,KAAI7G,OAAAC,OAAA,GAAKoP,EAAQ,CAAEK,SAAS,OACxBjS,KAAKkS,iBACN9T,EAAAA,cAAA,OAAKL,UAAU,uBACXK,EAAAA,cAAA,UAAQL,UAAU,qBAAoB,aAAY,QAAQI,QAAS6B,KAAKsP,mBAOpF6C,kBAAkBnI,GACtB,OAAIA,EAAKsD,UAAY8E,EAAAA,iBAAiBC,mBAAmBrI,EAAKsD,SACnDtN,KAAKsS,oBAAoBtI,GACxBA,EAAKsD,QAGV,KAFItN,KAAKuS,oBAAoBvI,GAKhCkI,iBACJ,MAAM,SAAEM,GAAaxS,KAAKL,MAAM+K,SAC1BmC,EAAgC7M,KAAKL,MAAM+K,SAASmC,cACpD,WAAEJ,GAAezM,KAAKoD,MACtBqP,EAA8B,GAMpC,GAJIzE,EAAAA,gBAAgBC,YAAYpB,KAC5BA,EAAa,GAAG/O,GAAK,GAGrBkC,KAAKoD,MAAMsL,mBAA+BrP,IAAfoN,GAA4BuB,EAAAA,gBAAgBC,YAAYpB,GAAe,CAClG,MAAM6F,EAAW1S,KAAK2S,qBAAgBtT,EAAWwN,GAE7C6F,GACAD,EAAapE,KACTjQ,EAAAA,cAACgL,EAAAA,KAAI7G,OAAAC,OAAA,CAACoE,IAAK8L,EAAS5U,IAAQ0U,GACvB,IACAxS,KAAK4S,oBAAoBF,GAAS,IAAG,WAKlD,IAAK,MAAOxI,EAAOF,KAAS6C,EAAagG,UACrCJ,EAAapE,KACTjQ,EAAAA,cAACgL,EAAAA,KAAI7G,OAAAC,OAAA,CACDoE,IAAKoD,EAAKlM,IACN0U,EAAQ,CACZpB,IAAKpR,KAAKoP,uBAAuBlF,EAAOlK,KAAKoD,MAAMwL,oBAAqB5E,EAAKkD,UAAYlN,KAAK8P,YAAc,OAE3G9P,KAAK4S,oBAAoB5I,KAM1C,OAAOyI,EAGHE,gBAAgBK,EAAuBC,GAC3C,IAAKA,EACD,OAAO,KAGX,IAAK,IAAI/I,EAAQ,EAAGA,GAAS+I,EAAKtN,OAASyE,EAAiB8I,IAAKhJ,IAAS,CACtE,MAAMF,EAAsBiJ,EAAKnU,OAAOoL,IAExC,GAAIF,EAAKlM,KAAOkC,KAAKoD,MAAMqJ,WAMvB,OALKV,EAA2B4C,YAG5B3O,KAAKuM,SAAS,CAAEsC,WAAYmE,EAAcpE,oBAAqB5E,EAAKkD,WAFpElN,KAAKuM,SAAS,CAAEsC,WAAYmE,IAIzBhJ,EAEX,MAAMmJ,EAAQnT,KAAK2S,gBAAgB3I,EAAKlM,GAAIkM,EAAKgD,SACjD,GAAImG,EACA,OAAOA,EAGf,OAAO,KAGHP,oBAAoB/F,GACxB,OAAImB,EAAAA,gBAAgBC,YAAYpB,EAAaG,SACrChN,KAAKoD,MAAMsL,mBAA0CrP,IAA1BW,KAAKoD,MAAMqJ,WAC/BzM,KAAKoT,eAAevG,EAAaG,QAASH,EAAa/O,IAAI,GAIlEM,EAAAA,cAAAA,EAAAA,SAAA,KACK4B,KAAKqT,sBAAsBxG,GAC3B7M,KAAKoT,eAAevG,EAAaG,QAASH,EAAa/O,KAGzD+O,EAAaS,UAAY8E,EAAAA,iBAAiBC,mBAAmBxF,EAAaS,SAC1EtN,KAAKsS,oBAAoBzF,EAAcA,EAAa/O,IACnD+O,EAAaS,SAAatN,KAAKoD,MAAMsL,mBAA0CrP,IAA1BW,KAAKoD,MAAMqJ,WAIrE,KAHIzM,KAAKuS,oBAAoB1F,GAMhCuG,eAAeE,EAAgC7G,EAAqB8G,GAAmB,IAAAC,EAAAC,EAC3F,IAAIC,EAAwCJ,EACxC7G,IAAerC,EAAiBuJ,WAChCD,EAAWJ,EAAcM,QAAOb,GAAeA,EAAYjV,IAAMiV,EAAYjV,IAAM+V,EAAAA,gBAAgBC,UAGvG,MAAM,SAAEtB,GAAaxS,KAAKL,MAAM+K,SAC1BqJ,EAA0E,QAAlDP,EAAGxT,KAAKL,MAAM+K,SAASzK,OAAO+T,4BAAoB,IAAAR,GAAAA,EAC1ES,EAAqE,QAA9CR,EAAGzT,KAAKL,MAAM+K,SAASzK,OAAOiU,wBAAgB,IAAAT,EAAAA,EAAIrJ,EAAiB+J,MAEhG,GAAI1H,GAAczM,KAAKoD,MAAMqJ,aAAeA,EAExC,OADAzM,KAAKL,MAAM+K,SAAS1F,QAAQoL,UAAUnG,MAAM,gEACrC,KAGX,IAAKyJ,IAAa1F,EAAAA,gBAAgBC,YAAYyF,GAE1C,OADA1T,KAAKL,MAAM+K,SAAS1F,QAAQoL,UAAUnG,MAAM,4DACrC,KAGX,IAAImK,EAAyB,GAC7B,MAAMC,EAAcX,EAASzS,KAAI,CAAC8M,EAAuB7D,KACrD,MAAMoK,EAAavG,EAAOf,SAAWgB,EAAAA,gBAAgBC,YAAYF,EAAOf,SACxE,IAAI0F,EAQA1F,EANA0F,EADA4B,GAActU,KAAKoD,MAAMsL,aACd1O,KAAKqT,sBAAsBtF,EAAQtB,EAAYvC,GACnDlK,KAAKkM,eAAiB9B,EAAiB8I,KAAQoB,EAG3C,KAFAtU,KAAKuU,YAAYxG,EAAQ7D,GAKxC,MAAMsK,EACFF,GAAcP,GAA4B/T,KAAKkM,cAAgBuI,KAAKC,MAAMT,GAA2B7J,EAAiB8I,IAEtHoB,IAAetU,KAAKoD,MAAMsL,eACtB1O,KAAKkM,cAAgB9B,EAAiBuK,IACtC3H,EAAUhN,KAAK4U,qBAAqB7G,GAC7B/N,KAAKkM,cAAgBlM,KAAKgM,iBACjChM,KAAKkM,eACLkI,EAAiB,SAASpU,KAAKkM,aAAa2I,aAC5C7H,EAAUhN,KAAKoT,eAAerF,EAAOf,aAAS3N,GAAW,KAI7DmV,GAAmBxU,KAAKoD,MAAMsL,eAC9B1O,KAAKkM,eACLkI,EAAiBL,EAA2B,SAAS/T,KAAKkM,aAAa2I,aAAe,GACtF7H,EAAUhN,KAAKoT,eAAerF,EAAOf,QAASe,EAAOjQ,IAAI,IAE7D,MAAMiS,EAAchC,EAAOI,YAAcJ,EAAOI,YAAc,GAC9D,OACI/P,EAAAA,cAACgL,EAAAA,KAAI7G,OAAAC,OAAA,GACGgQ,EAAQ,CACZ5L,IAAKmH,EAAOjQ,GACZgX,YAAa9U,KAAKkM,eAAiB9B,EAAiB8I,KAAOlT,KAAK6N,qBAAqBkC,EAAahC,GAClGhQ,UAAWU,GAAAA,CAAW+T,EAASzU,UAAWyW,GAAmB,eAC7DpD,IAAKpR,KAAKoP,uBAAuBlF,EAAOlK,KAAKoD,MAAMwL,oBAAqBb,EAAOb,UAAYlN,KAAK8P,YAAc,OAE7G4C,EACA1F,MAIb,OAAOhN,KAAK+U,YAAYX,EAAgBC,EAAad,GAGjDgB,YAAYxG,EAAuB7D,GACvC,IAAIwI,EAMJ,OAJIA,EADA1S,KAAKkM,eAAiB9B,EAAiB8I,IAC5BnF,EAAOT,QAAUtN,KAAKgV,4BAA4BjH,EAAQ7D,GAASlK,KAAKuS,oBAAoBxE,GAE5FA,EAAOT,QAAUtN,KAAKsS,oBAAoBvE,EAAQ7D,GAASlK,KAAKuS,oBAAoBxE,GAE5F2E,EAGHkC,qBAAqBlC,GAAuB,IAAAuC,EAChD,MAAMb,EAAiB,SAASpU,KAAKkM,aAAa2I,aAC5CK,EAAmBxC,EAASxF,SAE5BiI,OAAkC9V,IAArB6V,EAAiCA,EAAmB,GACjEE,EAFWpV,KAAKoD,MAAMuK,eAGtBsG,EAAqE,QAA9CgB,EAAGjV,KAAKL,MAAM+K,SAASzK,OAAOiU,wBAAgB,IAAAe,EAAAA,EAAI7K,EAAiB+J,MAEhG,IAAIzG,GAAe,EACf0H,EAAK1C,EAAS5U,MACd4P,GAAe,GAEnB,MAAM2H,EAA2B,CAAEC,QAAS,EAAGrR,OAAQyJ,GAEvD,OACItP,EAAAA,cAACmX,EAAAA,OAAM,CACHC,cAAeH,EACfzO,IAAK8L,EAAS5U,GACdC,UAAWU,GAAAA,CAAW,yBAA0B2V,GAChDqB,UAAU,sBACVC,WAAW,uBACXC,eAAe,QACfT,iBAAkBC,EAClBS,SAAU5V,KAAKwN,0BAA0BkF,EAAS5U,GAAI4P,IAEtDtP,EAAAA,cAAA,WACKsU,EAAS1F,QAAS/L,KAAK4U,GAChB7H,EAAAA,gBAAgBC,YAAY4H,EAAY7I,WACxChN,KAAKkM,eACDlM,KAAKkM,aAAe+H,GACbjU,KAAK4U,qBAAqBiB,GAGlC7V,KAAKmS,kBAAkB0D,OAmB1CxC,sBAAsBtF,EAAuBtB,EAAqBvC,GACtE,OACI9L,EAAAA,cAACgL,EAAAA,KAAI7G,OAAAC,OAAA,CACDoE,IAAKsD,GACDlK,KAAKL,MAAM+K,SAASrM,OAAM,CAC9BF,QAAS6B,KAAKwO,sBAAsBT,EAAQtB,GAAW,kBACtCzM,KAAKoD,MAAMqJ,YAAczM,KAAKoD,MAAMqJ,aAAesB,EAAOjQ,IAAG,mBAC5DkC,KAAKoD,MAAMqJ,YAAczM,KAAKoD,MAAMqJ,aAAesB,EAAOjQ,IAAG,cAClE2O,EAAU,aACXzM,KAAKoD,MAAMsL,aAAeX,EAAO9P,eAAYoB,IAExD0O,EAAOb,UAKZoF,oBAAoBvE,EAAuB7D,GAC/C,MAAM,KAAE4L,GAAS9V,KAAKL,MAAM+K,SACtBwC,EAAWa,EAAOb,SAAWa,EAAOb,SAAW,GACrDlN,KAAKqQ,QAAQ0F,cAAcC,MAAQ9I,EACnC,MAAMqE,GAAa0E,EAAAA,EAAAA,wBAAuBjW,KAAKgQ,iBAAkBhQ,KAAKqQ,SACtE,OACIjS,EAAAA,cAACgL,EAAAA,KAAI7G,OAAAC,OAAA,GACGsT,EAAI,CACRlP,IAAKsD,EACLgM,KAAMnI,EAAOT,SACTiE,EAAU,CACdpR,OAAQ4N,EAAOoI,iBAAmB,cAAW9W,EAC7ClB,SAASiY,EAAAA,EAAAA,kBAAiBpW,KAAKgQ,iBAAkBhQ,KAAKqQ,QAASnD,KAE9Da,EAAOb,UAKZ8H,4BAA4BjH,EAAuB7D,GAA6C,IAA7BmM,IAAAC,UAAA3Q,OAAA,QAAAtG,IAAAiX,UAAA,KAAAA,UAAA,GACvE,MAAM,KAAER,GAAS9V,KAAKL,MAAM+K,SACtBwC,EAAWa,EAAOb,SAAWa,EAAOb,SAAW,GAC/C6C,EAAchC,EAAOI,YAAcJ,EAAOI,YAAc,GAC9DnO,KAAKqQ,QAAQ0F,cAAcC,MAAQ9I,EACnC,MAAMqE,GAAa0E,EAAAA,EAAAA,wBAAuBjW,KAAKgQ,iBAAkBhQ,KAAKqQ,SACtE,OACIjS,EAAAA,cAACgL,EAAAA,KAAI7G,OAAAC,OAAA,GACGsT,EAAI,CACRlP,IAAKsD,EACL4K,YAAauB,GAAiBrW,KAAK6N,qBAAqBkC,EAAahC,GACrEmI,KAAMnI,EAAOT,SACTiE,EAAU,CACdpT,SAASiY,EAAAA,EAAAA,kBAAiBpW,KAAKgQ,iBAAkBhQ,KAAKqQ,QAASnD,KAE9Da,EAAOb,UAKZqJ,uBAAuBrJ,EAAmBG,GAC9C,MAAM,KAAEyI,GAAS9V,KAAKL,MAAM+K,SAC5B1K,KAAKqQ,QAAQ0F,cAAcC,MAAQ9I,EACnC,MAAMqE,GAAa0E,EAAAA,EAAAA,wBAAuBjW,KAAKgQ,iBAAkBhQ,KAAKqQ,SACtE,OAAInD,GAAYG,EAERjP,EAAAA,cAACgL,EAAAA,KAAI7G,OAAAC,OAAA,GAAKsT,EAAI,CAAEI,KAAM7I,GAAakE,EAAU,CAAEpT,SAASiY,EAAAA,EAAAA,kBAAiBpW,KAAKgQ,iBAAkBhQ,KAAKqQ,QAASnD,KACzGA,GAIN,KAGHqF,oBAAoBxE,EAAuB7D,GAC/C,MAAM,KAAEsM,GAASxW,KAAKL,MAAM+K,SAC5B,OACItM,EAAAA,cAACgL,EAAAA,KAAI7G,OAAAC,OAAA,CAACoE,IAAKsD,GAAWsM,GACjBzI,EAAOb,UAKZ6H,YAAY0B,EAAepC,EAA4BqC,GAAmB,IAAAC,EAC9E,MAAM,aAAEC,EAAY,SAAEhF,EAAQ,kBAAEiF,EAAiB,kBAAE/H,EAAiB,uBAAEgI,GAA2B9W,KAAKL,MAAM+K,SACtGqM,GACD/W,KAAKoD,MAAMsL,cACZI,GAC6B,OAA7B9O,KAAKoD,MAAMkH,oBACkBjL,IAA7BW,KAAKoD,MAAMkH,gBACVoM,EACCM,GACDhX,KAAKoD,MAAMsL,cAAgBoI,GAA0B9I,EAAAA,gBAAgBC,YAAYjO,KAAKoD,MAAMkH,iBAAmBoM,EAC9GO,EACFjX,KAAKkM,aAAe9B,EAAiBuK,KAAOoC,EAAyBH,EAAc7Y,UAAY,kBACnGiC,KAAKkM,aAAe9B,EAAiB8I,IACrC,MAAMgE,EACFH,GACA/W,KAAKL,MAAM+K,SAASzK,OAAOiU,kBAC3BlU,KAAKL,MAAM+K,SAASzK,OAAOiU,iBAAmB9J,EAAiBuK,KAC/D,sBAEEwC,EAAyC,QAA3BR,EAAG3W,KAAKoD,MAAMkH,qBAAa,IAAAqM,OAAA,EAAxBA,EAA0B/C,QAAOxF,IAAUgE,EAAAA,iBAAiBC,mBAAmBjE,EAAM3C,OACtG2L,EAAqBD,MAAAA,OAAc,EAAdA,EAAgBlW,KAAI+I,GAAQA,EAAKyB,MAAK4L,KAAK,KACtE,OACIjZ,EAAAA,cAACgL,EAAAA,KAAI7G,OAAAC,OAAA,GAAKoU,EAAY,CAAE7Y,UAAWkZ,IAC/B7Y,EAAAA,cAACgL,EAAAA,KAAI7G,OAAAC,OAAA,GACGoP,EAAQ,CACZ7T,UAAWU,GAAAA,CAAWmT,EAAS7T,UAAW0Y,EAAOM,GAA0B,gBAAiBG,KAE3F7C,GAELjW,EAAAA,cAAA,OAAKL,UAAU,2BAA2B6I,IAAKwQ,GAC1CL,GACG/I,EAAAA,gBAAgBC,YAAYkJ,IAC5BA,EAAelW,KAAI+I,IAAI,IAAAsN,EAAAC,EAAA,OACnBnZ,EAAAA,cAACgL,EAAAA,KAAI7G,OAAAC,OAAA,GAAKqU,EAAiB,CAAE9Y,UAAW8Y,EAAmB9Y,UAAW6I,IAAKoD,EAAKyB,MAC3EpB,EAAiBrK,KAAKL,MAAe,QAAV2X,EAAEtN,EAAKyB,WAAG,IAAA6L,EAAAA,EAAI,GAAItN,EAAK8B,QAAS+I,YAC3DmC,GACGhX,KAAKuW,uBAAuBvM,EAAK8B,QAAkC,QAA3ByL,EAAEvN,EAAKsE,4BAAoB,IAAAiJ,OAAA,EAAzBA,EAA2BlK,gBAvftFtB,EAAA4C,aAAuB,GAgE5B3F,EAAAA,EAAAA,IAAA,CAATwO,EAAAA,IAAQ,iCA0jBb,+kBC3nBO,MAAMC,UAAkCrZ,EAAAA,cAyB3CsB,YAAmBC,GACfC,MAAMD,GAvBO,KAAAqM,eAAyB5B,EAAiB6B,KAEnD,KAAAC,aAAuB9B,EAAiB+B,KAM/B,KAAAC,UAAoBhC,EAAiBgC,UAIrC,KAAAC,iBAA0C,GAEnD,KAAAQ,aAAgC,GAoGvB,KAAAP,cAAgB,KAC7BtM,KAAKuM,UAASC,IAAa,CACvBC,WAAYrC,EAAiBuJ,SAC7BjH,WAAYF,EAAcE,eAwTjB,KAAAc,0BAA4B,CAACC,EAA4BC,IAA0B,KAChG,MAAM,eAAEC,GAAmB3N,KAAKoD,MAC1BwK,EAAU,CAAE,CAACH,IAAWC,GAC9B1N,KAAKuM,SAAS,CAAEoB,eAAcnK,EAAAA,EAAA,GAAOmK,GAAmBC,MAwI3C,KAAAC,qBAAuB,CAACC,EAA6BC,IAA0B,KAC5F,MAAMb,EAAWa,EAAOb,SAAWa,EAAOb,SAAW,GAC/Cb,EAA0C,CAAC,CAAEZ,IAAKqC,EAAqBhC,QAASoB,IAGtF,GAAIc,EAAAA,gBAAgBC,YAAYF,EAAOG,oBACnC,IAAK,MAAMlE,KAAQ+D,EAAOG,mBAAoB,CAC1C,MAAMC,EAAcnE,EAAKoE,MAAM3C,IAC/BY,EAAiBgC,KAAK,CAClB5C,IAAK0C,EACLrC,QAAS9B,EAAKhM,KACdsQ,qBAAsB,CAAEjB,QAASrD,EAAKqD,QAAQkB,kBAI1DvO,KAAKuM,SAAS,CACVjC,cAAe0D,EAAAA,gBAAgBC,YAAY5B,GAAoBA,EAAmB,CAAC,CAAEZ,IAAK,aAUjF,KAAA+C,sBAAwB,CAACnL,EAAqBoL,IAAsB,KAC5EzO,KAAKoD,MAAMsL,cASZ+I,EAA0B9I,aAAc,EACxC3O,KAAKuM,SAAS,CACVE,WAAYpJ,EAAKvF,GACjB8Q,oBAAqBvL,EAAK6J,SAC1B2B,WAAYJ,MAZhBzO,KAAKuM,SAAS,CACVE,WAAYpJ,EAAKvF,GACjB+Q,WAAYJ,IAEZzO,KAAKL,MAAM+K,SAASoE,mBACpB9O,KAAK6N,qBAAqBxK,EAAK8K,YAAc9K,EAA7CrD,KAgBK,KAAA+O,cAAgB,IAAM,KACnC0I,EAA0B9I,aAAc,EACxC3O,KAAKuM,UAASC,IAAa,CAAOC,WAAYD,EAAcqC,gBAO/C,KAAAG,oBAAuBjP,IAChCC,KAAKiP,SAASC,UAAYlP,KAAKiP,SAASC,QAAQC,SAASpP,EAAMI,UAC1DH,KAAKoD,MAAMsL,aAGZ1O,KAAKuM,SAAS,CAAEE,gBAAYpN,EAAWuP,oBAAqB,GAAIlC,WAAW,IAF3E1M,KAAKuM,SAAS,CAAEE,WAAYrC,EAAiBuJ,SAAU/E,oBAAqB,GAAIlC,WAAW,MAUtF,KAAAgL,gBAAkB,KAC/B,MAAM,aAAE7K,GAAiB7M,KAAKL,MAAM+K,SAEoE,IAADiN,GADvG3X,KAAK6M,aAAeA,EAChBmB,EAAAA,gBAAgBC,YAAYpB,IAAiBmB,EAAAA,gBAAgBC,YAAYpB,EAAa,GAAGG,YAC7D,QAA5B2K,EAAA3X,KAAK6M,aAAa,GAAGG,eAAO,IAAA2K,GAA5BA,EAA8B1W,KAAI+I,IAC9B,MAAM4N,EAAgB,GAOtB,OANArV,OAAOC,OAAOoV,EAAe,CAAEzJ,YAAanE,EAAKmE,cACjD5L,OAAOC,OAAOoV,EAAe,CAAE1K,SAAUlN,KAAKL,MAAM+K,SAAS1J,UAAU6W,sBACvEtV,OAAOC,OAAOoV,EAAe,CAAEtK,QAAStD,EAAKsD,UACzCU,EAAAA,gBAAgBC,YAAYjE,EAAKgD,UAAYhD,EAAK8N,aAAeC,EAAAA,WAAWjE,QAC5E9J,EAAKgD,QAAQgL,QAAQJ,GAElB5N,OAYF,KAAAoF,uBAAyB,CAAClF,EAAe0E,EAA8BS,KAE/EoI,EAA0B9I,aADJ,IACmBzE,MAGzCmF,IAAmBT,IAGjBA,IAAwBS,EAMlB,KAAAC,cAAgB,KACxBtP,KAAKoD,MAAMsL,aAGZ1O,KAAKuM,SAAS,CAAEE,gBAAYpN,EAAWuP,oBAAqB,GAAIlC,WAAW,IAF3E1M,KAAKuM,SAAS,CAAEE,WAAYrC,EAAiBuJ,SAAU/E,oBAAqB,GAAIlC,WAAW,KAUlF,KAAAgD,aAAgB3P,IACzBA,EAAM6P,UAAY5P,KAAKoM,YAAcpM,KAAKoD,MAAMsL,cAAgB1O,KAAKoD,MAAMsJ,WAC3E1M,KAAKuM,SAAS,CAAEE,WAAYrC,EAAiBuJ,SAAU/E,oBAAqB,GAAIlC,WAAW,KAOlF,KAAAmD,sBAAwB,KACrC7P,KAAKuM,SAAS,CAAEmC,aAAc1O,KAAK0O,gBAnqBnC1O,KAAKiP,SAAW7Q,EAAAA,YAChB4B,KAAK8P,YAAc1R,EAAAA,YACnB,MAAM,aAAEyO,GAAiB7M,KAAKL,MAAM+K,SACpC,GAAIsD,EAAAA,gBAAgBC,YAAYpB,IAAiBmB,EAAAA,gBAAgBC,YAAYpB,EAAa,GAAGG,SAAU,CACnG,MAAM+C,EAAclD,EAAa,GAAGG,QAAQ,GAAGmB,YAActB,EAAa,GAAGG,QAAQ,GAAGmB,YAAc,GAChGjB,EAAWL,EAAa,GAAGG,QAAQ,GAAGE,SAAWL,EAAa,GAAGG,QAAQ,GAAGE,SAAW,GAC7FlN,KAAKqM,iBAAmB,CAAC,CAAEZ,IAAKsE,EAAajE,QAASoB,IAGlDc,EAAAA,gBAAgBC,YAAYpB,EAAa,GAAGG,QAAQ,GAAGkB,qBACvDrB,EAAa,GAAGG,QAAQ,GAAGkB,mBAAmBjN,KAAI+I,IAC9C,MAAMmE,EAAcnE,EAAKoE,MAAM3C,IAM/B,OALAzL,KAAKqM,iBAAiBgC,KAAK,CACvB5C,IAAK0C,EACLrC,QAAS9B,EAAKhM,KACdsQ,qBAAsB,CAAEjB,QAASrD,EAAKqD,QAAQkB,kBAE3C,QAInBvO,KAAKoD,MAAQ,CACTqJ,WAAYrC,EAAiBuJ,SAC7B/E,oBAAqB,GACrBC,gBAAYxP,EACZsO,eAAgB,GAChBe,aAAc1O,KAAK0O,aACnBpE,cAAetK,KAAKqM,iBACpBK,WAAW,GAGf1M,KAAKgQ,kBAAmBC,EAAAA,EAAAA,oBACpBjQ,KAAKL,MAAM+K,SAAS1F,QAAQC,QAAQiL,kBACpClQ,KAAKL,MAAM+K,SAASyF,aACpBnQ,KAAKL,MAAM+K,SAAS0F,WAExBpQ,KAAKqQ,SAAUC,EAAAA,EAAAA,kBAAiB,QAAStQ,KAAKgQ,iBAAkB,GAAI,IACpEhQ,KAAKuR,YAAa0E,EAAAA,EAAAA,wBAAuBjW,KAAKgQ,iBAAkBhQ,KAAKqQ,SAG/D,mBACN,MAAoG,QAA7FG,EAAAA,EAAAA,UAAS,CAAEC,QAASC,EAAAA,YAAYC,QAAS3L,QAAShF,KAAKL,MAAM+K,SAAS1F,QAAQC,UAGlFlC,oBACH/C,KAAK4Q,mCAAoCC,EAAAA,EAAAA,mBAAkB/P,OAAQ,SAAUd,KAAK6P,uBAClFtK,SAASuL,iBAAiB,UAAY9Q,KAAK0P,cAA2C,GACtF1P,KAAK6P,wBACLtK,SAASwL,KAAKD,iBAAiB,YAAa9Q,KAAKgP,qBACjDhP,KAAK0X,kBAGF1U,qBAAkB,IAAAgO,EACO,QAAxBA,EAAAhR,KAAK8P,YAAYZ,eAAO,IAAA8B,GAAxBA,EAA0BxB,SAAS,IAAMxP,KAAKL,MAAM+K,SAASuG,cAC5DjR,KAAK8P,YAAYZ,QAAQM,SAAS,GAAmBC,QAIvDyB,uBACHpQ,OAAOqQ,oBAAoB,SAAUnR,KAAK4Q,mCAAoC,GAC9ErL,SAASwL,KAAKI,oBAAoB,YAAanR,KAAKgP,qBAAqB,GAGtE1L,SACHtD,KAAKkM,aAAe9B,EAAiB8I,IAErC,OACI9U,EAAAA,cAACgL,EAAAA,KAAI,CAACrL,UAAU,qBAAqBqT,IAAKpR,KAAKiP,UAC1CjP,KAAKoD,MAAMsL,aACR1O,KAAK0R,oBAELtT,EAAAA,cAAAA,EAAAA,SAAA,KACIA,EAAAA,cAACC,EAAAA,OAAMkE,OAAAC,OAAA,CACHzE,UAAU,sBACVI,QAAS6B,KAAKsM,cAAa,gBAT7B,oBAWE+E,MAAOrR,KAAKL,MAAM+K,SAAS1J,UAAUsQ,mBAAkB,aAC3CtR,KAAKL,MAAM+K,SAAS1J,UAAUsQ,oBACtCtR,KAAKuR,aAEZvR,KAAKwR,wBAiBlBA,sBACJ,OACIpT,EAAAA,cAACqT,EAAAA,SAAQ,CAAC1T,UAAU,mCAAmCkG,OAAQjE,KAAKoD,MAAMsJ,WACrE1M,KAAKoD,MAAMsL,aAAe1O,KAAK0R,oBAAsB1R,KAAK2R,sBAK/DD,oBACJ,MAAM,iBAAEG,EAAgB,2BAAEC,EAA0B,uBAAEC,EAAsB,WAAEC,GAAehS,KAAKL,MAAM+K,SAGxG,OADA1K,KAAKkM,aAAe9B,EAAiB8I,IAEjC9U,EAAAA,cAAC0L,EAAAA,OAAMvH,OAAAC,OAAA,GACCwP,EAAU,CACdjU,UAAWU,GAAAA,CACPuT,EAAWjU,UACXiC,KAAKoD,MAAMsL,mBAA0CrP,IAA1BW,KAAKoD,MAAMqJ,WAA2B,QAAU,YAG/ErO,EAAAA,cAACgL,EAAAA,KAAI7G,OAAAC,OAAA,GAAKxC,KAAKL,MAAM+K,SAASkH,SAAQ,CAAEK,SAAS,OAC5CjS,KAAKoD,MAAMsL,mBAA0CrP,IAA1BW,KAAKoD,MAAMqJ,YACnCrO,EAAAA,cAACgL,EAAAA,KAAI7G,OAAAC,OAAA,GAAKsP,GACN1T,EAAAA,cAACgL,EAAAA,KAAI7G,OAAAC,OAAA,GAAKqP,EAAgB,CAAE1T,QAAS6B,KAAK+O,mBAC1C3Q,EAAAA,cAACgL,EAAAA,KAAI7G,OAAAC,OAAA,GAAKuP,GAAyB/R,KAAKoD,MAAMwL,sBAGrD5O,KAAKkS,mBAMdP,qBACJ,MAAM,WAAEK,GAAehS,KAAKL,MAAM+K,SAClC,OACItM,EAAAA,cAAC0L,EAAAA,OAAMvH,OAAAC,OAAA,GAAKwP,EAAU,CAAEjU,UAAWU,GAAAA,CAAWuT,EAAWjU,aACrDK,EAAAA,cAACgL,EAAAA,KAAI7G,OAAAC,OAAA,GAAKxC,KAAKL,MAAM+K,SAASkH,SAAQ,CAAEK,SAAS,OAC5CjS,KAAKkS,iBACN9T,EAAAA,cAAA,OAAKL,UAAU,uBACXK,EAAAA,cAAA,UAAQL,UAAU,qBAAoB,aAAY,QAAQI,QAAS6B,KAAKsP,mBAOpF6C,kBAAkBnI,GACtB,OAAIA,EAAKsD,UAAY8E,EAAAA,iBAAiBC,mBAAmBrI,EAAKsD,SACnDtN,KAAKsS,oBAAoBtI,GACxBA,EAAKsD,QAGV,KAFItN,KAAKuS,oBAAoBvI,GAKhCkI,iBACJ,MAAM,SAAEM,GAAaxS,KAAKL,MAAM+K,SAChC,IAAImC,EAAgC,GAEhCA,EADA7M,KAAKoD,MAAMsL,aACI1O,KAAK6M,aAEL7M,KAAKL,MAAM+K,SAASmC,aAEvC,MAAM,WAAEJ,GAAezM,KAAKoD,MACtBqP,EAA8B,GACpC,IAAIwF,EAA2C,GAC3CC,EAAkD,GACtD,MAAMC,EAAiBC,KAAKC,MAAMD,KAAKE,UAAUzL,IAEjD,IAAK,MAAM7C,KAAQmO,EACfD,EAAqBlO,EAAKgD,QAAS4G,QAAOb,GAAeA,EAAYjV,IAAMiV,EAAYjV,IAAM+V,EAAAA,gBAAgBC,SAC7G9J,EAAKgD,QAAUkL,EAGnB,IAAK,MAAMlO,KAAQ6C,EACfoL,EAAcjO,EAAKgD,QAAS4G,QAAOb,GAAeA,EAAYjV,IAAMiV,EAAYjV,GAAK+V,EAAAA,gBAAgBC,SAGzG,GAAI9T,KAAKoD,MAAMsL,mBAA+BrP,IAAfoN,GAA4BuB,EAAAA,gBAAgBC,YAAYpB,GAAe,CAClG,IAAI6F,EAAiC,GACrC,IAAK,MAAM6F,KAAiB1L,EAAc,CACtC,GAAI0L,EAAcza,KAAO2O,EAAY,CACjCiG,EAAW6F,EACNd,EAA0B9I,YAK3B3O,KAAKuM,SAAS,CACVsC,gBAAYxP,EACZuP,oBAAqB2J,EAAcrL,WANvClN,KAAKuM,SAAS,CACVsC,gBAAYxP,IAQpB,MAGJ,GADAqT,EAAW1S,KAAK2S,gBAAgB4F,GAC5B7F,GAAYA,EAAS5U,KAAO2O,EAC5B,MAIJiG,GACAD,EAAapE,KACTjQ,EAAAA,cAACgL,EAAAA,KAAI7G,OAAAC,OAAA,CAACoE,IAAK8L,EAAS5U,IAAQ0U,GACvB,IACAxS,KAAK4S,oBAAoBF,GAAS,IAAG,UAI/C,CACH,IAAK,MAAOxI,EAAOF,KAASmO,EAAetF,UACvCJ,EAAapE,KACTjQ,EAAAA,cAACgL,EAAAA,KAAI7G,OAAAC,OAAA,CACDoE,IAAKoD,EAAKlM,IACN0U,EAAQ,CACZpB,IAAKpR,KAAKoP,uBAAuBlF,EAAOlK,KAAKoD,MAAMwL,oBAAqB5E,EAAKkD,UAAYlN,KAAK8P,YAAc,OAE3G9P,KAAK4S,oBAAoB5I,KAKtC,IAAK,MAAOE,EAAOF,KAASiO,EAAYpF,UACpCJ,EAAapE,KACTjQ,EAAAA,cAACgL,EAAAA,KAAI7G,OAAAC,OAAA,CACDoE,IAAKoD,EAAKlM,IACN0U,EAAQ,CACZpB,IAAKpR,KAAKoP,uBAAuBlF,EAAOlK,KAAKoD,MAAMwL,oBAAqB5E,EAAKkD,UAAYlN,KAAK8P,YAAc,OAE3G9P,KAAK4S,oBAAoB5I,KAM1C,OAAOyI,EAGHE,gBAAgB3I,GACpB,MAAM0J,EAAW1J,MAAAA,OAAI,EAAJA,EAAMgD,QACvB,GAAI0G,GAAY1F,EAAAA,gBAAgBC,YAAYyF,GACxC,IAAK,IAAIxJ,EAAQ,EAAGA,GAASwJ,EAAS/N,OAASyE,EAAiB8I,IAAKhJ,IAAS,CAC1E,MAAM8C,EAAyB0G,EAAS5U,OAAOoL,IAC/C,IAAI8I,EAAehJ,MAAAA,OAAI,EAAJA,EAAMlM,GAEzB,GAAIkP,EAAQlP,KAAOkC,KAAKoD,MAAMqJ,WAU1B,OATIuG,IAAiB5I,EAAiBuJ,UAAY3G,EAAQlP,GAAM+V,EAAAA,gBAAgBC,SAC5Ed,OAAe3T,GAGdoY,EAA0B9I,YAG3B3O,KAAKuM,SAAS,CAAEsC,WAAYmE,EAAcpE,oBAAqB5B,EAAQE,WAFvElN,KAAKuM,SAAS,CAAEsC,WAAYmE,IAIzBhG,EAEX,MAAMmG,EAAQnT,KAAK2S,gBAAgB3F,GACnC,GAAImG,EACA,OAAOA,EAInB,OAAO,KAGHP,oBAAoB/F,GACxB,OAAImB,EAAAA,gBAAgBC,YAAYpB,EAAaG,SACrChN,KAAKoD,MAAMsL,mBAA0CrP,IAA1BW,KAAKoD,MAAMqJ,WAC/BzM,KAAKoT,eAAevG,EAAaG,QAASH,EAAa/O,IAAI,GAGlEM,EAAAA,cAAAA,EAAAA,SAAA,KACK4B,KAAKqT,sBAAsBxG,GAC3B7M,KAAKoT,eAAevG,EAAaG,QAASH,EAAa/O,KAGzD+O,EAAaS,UAAY8E,EAAAA,iBAAiBC,mBAAmBxF,EAAaS,SAC1EtN,KAAKsS,oBAAoBzF,EAAcA,EAAa/O,IACnD+O,EAAaS,QAIlB,KAHItN,KAAKuS,oBAAoB1F,GAMhCuG,eAAeE,EAAgC7G,EAAqB8G,GAAmB,IAAAC,EAAAC,EAC3F,IAAIC,EAAwCJ,EACxC7G,IAAerC,EAAiBuJ,WAChCD,EAAWJ,EAAcM,QAAOb,GAAeA,EAAYjV,IAAMiV,EAAYjV,IAAM+V,EAAAA,gBAAgBC,UAGvG,MAAM,SAAEtB,GAAaxS,KAAKL,MAAM+K,SAC1BqJ,EAA0E,QAAlDP,EAAGxT,KAAKL,MAAM+K,SAASzK,OAAO+T,4BAAoB,IAAAR,GAAAA,EAC1ES,EAAqE,QAA9CR,EAAGzT,KAAKL,MAAM+K,SAASzK,OAAOiU,wBAAgB,IAAAT,EAAAA,EAAIrJ,EAAiB+J,MAEhG,GAAI1H,GAAczM,KAAKoD,MAAMqJ,aAAeA,EAExC,OADAzM,KAAKL,MAAM+K,SAAS1F,QAAQoL,UAAUnG,MAAM,gEACrC,KAGX,IAAKyJ,IAAa1F,EAAAA,gBAAgBC,YAAYyF,GAE1C,OADA1T,KAAKL,MAAM+K,SAAS1F,QAAQoL,UAAUnG,MAAM,4DACrC,KAGX,IAAImK,EAAyB,GAC7B,MAAMC,EAAcX,EAASzS,KAAI,CAAC8M,EAAuB7D,KACrD,MAAMoK,EAAavG,EAAOf,SAAWgB,EAAAA,gBAAgBC,YAAYF,EAAOf,SACxE,IAAI0F,EAQA1F,EANA0F,EADA4B,GAActU,KAAKoD,MAAMsL,aACd1O,KAAKqT,sBAAsBtF,EAAQtB,EAAYvC,GACnDlK,KAAKkM,eAAiB9B,EAAiB8I,KAAQoB,EAG3C,KAFAtU,KAAKuU,YAAYxG,EAAQ7D,GAKxC,MAAMsK,EACFF,GAAcP,GAA4B/T,KAAKkM,cAAgBuI,KAAKC,MAAMT,GAA2B7J,EAAiB8I,IAEtHoB,IAAetU,KAAKoD,MAAMsL,eACtB1O,KAAKkM,cAAgB9B,EAAiBuK,IACtC3H,EAAUhN,KAAK4U,qBAAqB7G,GAC7B/N,KAAKkM,cAAgBlM,KAAKgM,eAAiB5B,EAAiB8I,MACnElT,KAAKkM,eACLkI,EAAiB,SAASpU,KAAKkM,aAAa2I,aAC5C7H,EAAUhN,KAAKoT,eAAerF,EAAOf,aAAS3N,GAAW,KAG7DmV,GAAmBxU,KAAKoD,MAAMsL,eAC9B1O,KAAKkM,eACLkI,EAAiBL,EAA2B,SAAS/T,KAAKkM,aAAa2I,aAAe,GACtF7H,EAAUhN,KAAKoT,eAAerF,EAAOf,QAASe,EAAOjQ,IAAI,IAE7D,MAAMiS,EAAchC,EAAOI,YAAcJ,EAAOI,YAAc,GAC9D,OACI/P,EAAAA,cAACgL,EAAAA,KAAI7G,OAAAC,OAAA,GACGgQ,EAAQ,CACZ5L,IAAKmH,EAAOjQ,GACZgX,YAAa9U,KAAKkM,eAAiB9B,EAAiB8I,KAAOlT,KAAK6N,qBAAqBkC,EAAahC,GAClGhQ,UAAWU,GAAAA,CAAW+T,EAASzU,UAAWyW,GAAmB,eAC7DpD,IAAKpR,KAAKoP,uBAAuBlF,EAAOlK,KAAKoD,MAAMwL,oBAAqBb,EAAOb,UAAYlN,KAAK8P,YAAc,OAE7G4C,EACA1F,MAIb,OAAOhN,KAAK+U,YAAYX,EAAgBC,EAAad,GAGjDgB,YAAYxG,EAAuB7D,GACvC,IAAIwI,EAMJ,OAJIA,EADA1S,KAAKkM,eAAiB9B,EAAiB8I,IAC5BnF,EAAOT,QAAUtN,KAAKgV,4BAA4BjH,EAAQ7D,GAASlK,KAAKuS,oBAAoBxE,GAE5FA,EAAOT,QAAUtN,KAAKsS,oBAAoBvE,EAAQ7D,GAASlK,KAAKuS,oBAAoBxE,GAE5F2E,EAGHkC,qBAAqBlC,GAAuB,IAAAuC,EAChD,MAAMb,EAAiB,SAASpU,KAAKkM,aAAa2I,aAC5CK,EAAmBxC,EAASxF,SAE5BiI,OAAkC9V,IAArB6V,EAAiCA,EAAmB,GACjEE,EAFWpV,KAAKoD,MAAMuK,eAGtBsG,EAAqE,QAA9CgB,EAAGjV,KAAKL,MAAM+K,SAASzK,OAAOiU,wBAAgB,IAAAe,EAAAA,EAAI7K,EAAiB+J,MAEhG,IAAIzG,GAAe,EACf0H,EAAK1C,EAAS5U,MACd4P,GAAe,GAEnB,MAAM2H,EAA2B,CAAEC,QAAS,EAAGrR,OAAQyJ,GACvD,OACItP,EAAAA,cAACmX,EAAAA,OAAM,CACHC,cAAeH,EACfzO,IAAK8L,EAAS5U,GACdC,UAAWU,GAAAA,CAAW,yBAA0B2V,GAChDqB,UAAU,sBACVC,WAAW,uBACXC,eAAe,QACfT,iBAAkBC,EAClBS,SAAU5V,KAAKwN,0BAA0BkF,EAAS5U,GAAI4P,IAEtDtP,EAAAA,cAAA,WACKsU,EAAS1F,QAAS/L,KAAK4U,GAChB7H,EAAAA,gBAAgBC,YAAY4H,EAAY7I,WACxChN,KAAKkM,eACDlM,KAAKkM,aAAe+H,GACbjU,KAAK4U,qBAAqBiB,GAGlC7V,KAAKmS,kBAAkB0D,OAmB1CxC,sBAAsBtF,EAAuBtB,EAAqBvC,GACtE,OACI9L,EAAAA,cAACgL,EAAAA,KAAI7G,OAAAC,OAAA,CACDoE,IAAKsD,GACDlK,KAAKL,MAAM+K,SAASrM,OAAM,CAC9BF,QAAS6B,KAAKwO,sBAAsBT,EAAQtB,GAAW,kBACtCzM,KAAKoD,MAAMqJ,YAAczM,KAAKoD,MAAMqJ,aAAesB,EAAOjQ,IAAG,mBAC5DkC,KAAKoD,MAAMqJ,YAAczM,KAAKoD,MAAMqJ,aAAesB,EAAOjQ,IAAG,cAClE2O,EAAU,aACXzM,KAAKoD,MAAMsL,aAAeX,EAAO9P,eAAYoB,IAExD0O,EAAOb,UAKZoF,oBAAoBvE,EAAuB7D,GAC/C,MAAM,KAAE4L,GAAS9V,KAAKL,MAAM+K,SACtBwC,EAAWa,EAAOb,SAAWa,EAAOb,SAAW,GACrDlN,KAAKqQ,QAAQ0F,cAAcC,MAAQ9I,EACnC,MAAMqE,GAAa0E,EAAAA,EAAAA,wBAAuBjW,KAAKgQ,iBAAkBhQ,KAAKqQ,SACtE,OACIjS,EAAAA,cAACgL,EAAAA,KAAI7G,OAAAC,OAAA,GACGsT,EAAI,CACRlP,IAAKsD,EACLgM,KAAMnI,EAAOT,SACTiE,EAAU,CACdpR,OAAQ4N,EAAOoI,iBAAmB,cAAW9W,EAC7ClB,SAASiY,EAAAA,EAAAA,kBAAiBpW,KAAKgQ,iBAAkBhQ,KAAKqQ,QAASnD,KAE9Da,EAAOb,UAKZ8H,4BAA4BjH,EAAuB7D,GAA6C,IAA7BmM,IAAAC,UAAA3Q,OAAA,QAAAtG,IAAAiX,UAAA,KAAAA,UAAA,GACvE,MAAM,KAAER,GAAS9V,KAAKL,MAAM+K,SACtBwC,EAAWa,EAAOb,SAAWa,EAAOb,SAAW,GAC/C6C,EAAchC,EAAOI,YAAcJ,EAAOI,YAAc,GAC9DnO,KAAKqQ,QAAQ0F,cAAcC,MAAQ9I,EACnC,MAAMqE,GAAa0E,EAAAA,EAAAA,wBAAuBjW,KAAKgQ,iBAAkBhQ,KAAKqQ,SACtE,OACIjS,EAAAA,cAACgL,EAAAA,KAAI7G,OAAAC,OAAA,GACGsT,EAAI,CACRlP,IAAKsD,EACL4K,YAAauB,GAAiBrW,KAAK6N,qBAAqBkC,EAAahC,GACrEmI,KAAMnI,EAAOT,SACTiE,EAAU,CACdpT,SAASiY,EAAAA,EAAAA,kBAAiBpW,KAAKgQ,iBAAkBhQ,KAAKqQ,QAASnD,KAE9Da,EAAOb,UAKZqJ,uBAAuBrJ,EAAmBG,GAC9C,MAAM,KAAEyI,GAAS9V,KAAKL,MAAM+K,SAC5B1K,KAAKqQ,QAAQ0F,cAAcC,MAAQ9I,EACnC,MAAMqE,GAAa0E,EAAAA,EAAAA,wBAAuBjW,KAAKgQ,iBAAkBhQ,KAAKqQ,SACtE,OAAInD,GAAYG,EAERjP,EAAAA,cAACgL,EAAAA,KAAI7G,OAAAC,OAAA,GAAKsT,EAAI,CAAEI,KAAM7I,GAAakE,EAAU,CAAEpT,SAASiY,EAAAA,EAAAA,kBAAiBpW,KAAKgQ,iBAAkBhQ,KAAKqQ,QAASnD,KACzGA,GAIN,KAGHqF,oBAAoBxE,EAAuB7D,GAC/C,MAAM,KAAEsM,GAASxW,KAAKL,MAAM+K,SAC5B,OACItM,EAAAA,cAACgL,EAAAA,KAAI7G,OAAAC,OAAA,CAACoE,IAAKsD,GAAWsM,GACjBzI,EAAOb,UAKZ6H,YAAY0B,EAAepC,EAA4BqC,GAAmB,IAAAC,EAC9E,MAAM,aAAEC,EAAY,kBAAEC,EAAiB,kBAAE/H,EAAiB,uBAAEgI,GAA2B9W,KAAKL,MAAM+K,SAC5FqM,GACD/W,KAAKoD,MAAMsL,cACZI,GAC6B,OAA7B9O,KAAKoD,MAAMkH,oBACkBjL,IAA7BW,KAAKoD,MAAMkH,gBACVoM,EACCM,GACDhX,KAAKoD,MAAMsL,cAAgBoI,GAA0B9I,EAAAA,gBAAgBC,YAAYjO,KAAKoD,MAAMkH,iBAAmBoM,EAC9GO,EACFjX,KAAKkM,aAAe9B,EAAiBuK,KAAOoC,EAAyBH,EAAc7Y,UAAY,kBACnGiC,KAAKkM,aAAe9B,EAAiB8I,IACrC,MAAMgE,EACFH,GACA/W,KAAKL,MAAM+K,SAASzK,OAAOiU,kBAC3BlU,KAAKL,MAAM+K,SAASzK,OAAOiU,iBAAmB9J,EAAiBuK,KAC/D,sBAEEwC,EAAyC,QAA3BR,EAAG3W,KAAKoD,MAAMkH,qBAAa,IAAAqM,OAAA,EAAxBA,EAA0B/C,QAAOxF,IAAUgE,EAAAA,iBAAiBC,mBAAmBjE,EAAM3C,OACtG2L,EAAqBD,MAAAA,OAAc,EAAdA,EAAgBlW,KAAI+I,GAAQA,EAAKyB,MAAK4L,KAAK,KACtE,OACIjZ,EAAAA,cAACgL,EAAAA,KAAI7G,OAAAC,OAAA,GAAKoU,EAAY,CAAE7Y,UAAWkZ,IAC/B7Y,EAAAA,cAACgL,EAAAA,KAAI7G,OAAAC,OAAA,GACGxC,KAAKL,MAAM+K,SAASkH,SAAQ,CAChC7T,UAAWU,GAAAA,CACPuB,KAAKL,MAAM+K,SAASkH,SAAS7T,UAC7B0Y,EACAM,GAA0B,gBAC1BG,KAGH7C,GAELjW,EAAAA,cAAA,OAAKL,UAAU,2BAA2B6I,IAAKwQ,GAC1CL,GACG/I,EAAAA,gBAAgBC,YAAYkJ,IAC5BA,EAAelW,KAAI+I,IAAI,IAAAsN,EAAAC,EAAA,OACnBnZ,EAAAA,cAACgL,EAAAA,KAAI7G,OAAAC,OAAA,GAAKqU,EAAiB,CAAE9Y,UAAW8Y,EAAmB9Y,UAAW6I,IAAKoD,EAAKyB,MAC3EpB,EAAiBrK,KAAKL,MAAe,QAAV2X,EAAEtN,EAAKyB,WAAG,IAAA6L,EAAAA,EAAI,GAAItN,EAAK8B,QAAS+I,YAC3DmC,GACGhX,KAAKuW,uBAAuBvM,EAAK8B,QAAkC,QAA3ByL,EAAEvN,EAAKsE,4BAAoB,IAAAiJ,OAAA,EAAzBA,EAA2BlK,gBA5iBtFoK,EAAA9I,aAAuB,GAkE5B3F,EAAAA,EAAAA,IAAA,CAATwO,EAAAA,IAAQ,iCA+nBb,UC7sBA,EAR4B7X,GACpBA,EAAMM,OAAOuY,cACNpa,EAAAA,cAACqZ,EAAyB,CAAC/M,SAAU/K,IAGzCvB,EAAAA,cAAC2N,EAA0B,CAACrB,SAAU/K,8MCH1C,MAAMiiC,EAA+C/jC,IAAA,IAAC,sBACzDgkC,EAAqB,QACrBC,EAAO,UACPC,EAAS,YACTC,EAAW,MACXC,EAAK,OACLC,EAAM,mBACNC,EAAkB,YAClBC,EAAW,eACXC,GACHxkC,EAAA,OACGO,EAAAA,cAACgL,EAAAA,KAAI7G,OAAAC,OAAA,GAAKq/B,GACLO,EACAC,EACAP,EACAC,EACAC,EACAC,EACAC,EACAC,IAIIG,EAAkCh5B,IAAA,IAAC,eAAEi5B,EAAc,UAAEC,EAAS,eAAEC,EAAc,OAAEC,GAAQp5B,EAAA,OACjGlL,EAAAA,cAACgL,EAAAA,KAAI7G,OAAAC,OAAA,GAAK+/B,GACLC,EACAC,EACAC,IAIIC,EAA0Cl5B,IAAA,IAAC,cAAEm5B,EAAa,QAAE1iC,EAAO,MAAE+hC,GAAOx4B,EAAA,OACrFrL,EAAAA,cAACgL,EAAAA,KAAI7G,OAAAC,OAAA,GAAKogC,GACL1iC,EACA+hC,IAIIY,EAA0Bl5B,IAAA,IAAC,WAAEm5B,EAAU,SAAEC,EAAQ,QAAEC,EAAO,gBAAEC,EAAe,WAAEC,EAAU,0BAAEC,GAA2Bx5B,EAAA,OAC7HvL,EAAAA,cAACgL,EAAAA,KAAI7G,OAAAC,OAAA,GAAKsgC,GACLC,GAAY3kC,EAAAA,cAACukC,EAAapgC,OAAAC,OAAA,GAAKugC,IAChC3kC,EAAAA,cAACgL,EAAAA,KAAI,CAACrL,UAAU,2CACXmlC,GACG9kC,EAAAA,cAACgL,EAAAA,KAAI7G,OAAAC,OAAA,GAAKygC,GACLC,EAAWjiC,KAAIuhC,GACZpkC,EAAAA,cAACA,EAAAA,SAAc,CAACwI,IAAK47B,EAAUn/B,KAAKm/B,UAAUY,SACxCD,GAA6BX,EAAUa,YACR,SAAhCb,EAAUn/B,KAAKigC,cAA2Bd,EAAUn/B,KAAKkgC,SAAWf,EAAUgB,aAAe,KAC9FplC,EAAAA,cAACkkC,EAAS//B,OAAAC,OAAA,GAAKggC,SAK7BO,EAASU,cAAgBT,EAC1BD,EAASU,cACNrlC,EAAAA,cAACgL,EAAAA,KAAI7G,OAAAC,OAAA,GAAKugC,EAASW,aACdV,EACAD,EAASY,uBAOjBC,EAA4B75B,IAAA,IAAC,YAAE85B,EAAW,OAAEC,GAAQ/5B,EAAA,OAC7D3L,EAAAA,cAACgL,EAAAA,KAAI7G,OAAAC,OAAA,GAAKqhC,GACLC,EAAO7iC,KAAI,CAAC8iC,EAAO75B,IAChB9L,EAAAA,cAACykC,EAAKtgC,OAAAC,OAAA,CAACoE,IAAKsD,GAAW65B,QAKtBC,EAAwCn6B,IAAA,IAAC,kBAClDo6B,EAAiB,QACjB/jC,EAAO,SACPgkC,EAAQ,SACRC,EAAQ,IACRC,EAAG,YACHC,EAAW,aACXC,GACHz6B,EAAA,OACGzL,EAAAA,cAACgL,EAAAA,KAAI7G,OAAAC,OAAA,GAAKyhC,GACL/jC,EACAgkC,EACAC,EACAC,EACAC,EACAC,IAIIC,EAAqCC,IAAA,IAAC,oBAAEC,EAAmB,MAAEpzB,EAAK,QAAEqzB,GAASF,EAAA,OACtFpmC,EAAAA,cAACgL,EAAAA,KAAI7G,OAAAC,OAAA,GAAKiiC,GACLpzB,EACAqzB,IAIIC,EAAwBC,IAAA,IAAC,UAAEC,EAAS,cAAEC,EAAa,oBAAEC,EAAmB,cAAEC,GAAeJ,EAAA,OAClGxmC,EAAAA,cAACgL,EAAAA,KAAI7G,OAAAC,OAAA,GAAKqiC,GACLC,EACAC,EACAC,IAuCT,EAnC2DC,IActD,IAduD,YACxDrhC,EAAW,UACXshC,EAAS,iBACTC,EAAgB,MAChBC,EAAK,SACLC,EAAQ,QACRnlC,EAAO,MACPolC,EAAK,QACLzhC,EAAO,gBACP0hC,EAAe,aACfC,EAAY,QACZC,EAAO,KACPC,EAAI,OACJ5B,GACHmB,EACG,OACI7mC,EAAAA,cAAC0L,EAAAA,OAAMvH,OAAAC,OAAA,GAAKoB,GACPyhC,EACAnlC,EACAolC,EACAzhC,EACA0hC,GAAmBnnC,EAAAA,cAACwjC,EAAer/B,OAAAC,OAAA,GAAK+iC,IACxCJ,EACAD,EACAE,EACAtB,GAAU1lC,EAAAA,cAACwlC,EAAMrhC,OAAAC,OAAA,GAAKshC,IACvB1lC,EAAAA,cAACgL,EAAAA,KAAI,CAACrL,UAAU,6CACXynC,GAAgBpnC,EAAAA,cAAC4lC,EAAYzhC,OAAAC,OAAA,GAAKgjC,IAClCC,GAAWrnC,EAAAA,cAACmmC,EAAOhiC,OAAAC,OAAA,GAAKijC,KAE5BC,GAAQtnC,EAAAA,cAACumC,EAAIpiC,OAAAC,OAAA,GAAKkjC,+FCzI/B,MA+BMC,EAA4BhmC,IAC9B,MAAM4jB,EAAU5jB,EAAM0D,KAAKkgB,QAAQ1I,OACnC,OACIzc,EAAAA,cAACgL,EAAAA,KAAI,CAACrL,UAAU,iCACZK,EAAAA,cAAA,OAAKL,UAAU,2BAnCC4B,CAAAA,IAAmF,IAAAimC,EAC3G,MAAMC,EAA8C,QAA5BD,EAAGjmC,EAAM0D,KAAKkgB,QAAQ1I,cAAM,IAAA+qB,OAAA,EAAzBA,EAA2BE,gBAChDC,GAAWt7B,EAAAA,EAAAA,kBAAiBo7B,EAAoBlmC,EAAMqF,QAAQC,QAAQ2F,aAa5E,OACIxM,EAAAA,cAAC4iC,EAAAA,GAAK,CACFv1B,IAAKs6B,MAAAA,EAAAA,EAAY,GACjBC,YAAaH,EACbh6B,oBAAoB,QACpBH,aAAc/L,EAAMqF,QAAQC,QAAQyG,aACpCC,cAAehM,EAAMM,OAAO0L,cAAgBhM,EAAMM,OAAO0L,cAlBpB,CACzCb,UAAW,CACPC,GAAI,CAAEC,EAAG,kBAAmBC,EAAG,IAAKC,EAAG,KACvCC,GAAI,CAAEH,EAAG,kBAAmBC,EAAG,IAAKC,EAAG,KACvCE,GAAI,CAAEJ,EAAG,kBAAmBC,EAAG,IAAKC,EAAG,KACvCG,GAAI,CAAEL,EAAG,kBAAmBC,EAAG,IAAKC,EAAG,KACvCoyB,GAAI,CAAEtyB,EAAG,kBAAmBC,EAAG,IAAKC,EAAG,MAE3CI,UAAU,EACV26B,iBAAiB,MAuB6BC,CAAmBvmC,IAC7DvB,EAAAA,cAAA,OAAKL,UAAU,6BACXK,EAAAA,cAAA,OAAKL,UAAU,2BAA2BwlB,MAAAA,OAAO,EAAPA,EAAS0G,MACnD7rB,EAAAA,cAAA,OAAKL,UAAU,4BAA4BwlB,MAAAA,OAAO,EAAPA,EAASS,WA4EpE,EAzB+FrkB,IAC3F,MAAM,OAAEM,EAAM,QAAEC,EAAO,cAAEimC,EAAa,aAAEC,EAAY,YAAEnnB,EAAW,YAAErb,GAAgBjE,GAC7E,UAAE0mC,GAAcpmC,EAChB+Y,EAAkBrZ,EAAMqF,QAAQC,QAAQ8T,KAAKC,gBAC7Chb,EAAOqoC,GAAajoC,EAAAA,cAACkoC,EAAAA,GAAiB,CAACtoC,KAAMqoC,EAAWtoC,UAAU,0BAExE,OACIK,EAAAA,cAAC0L,EAAAA,OAAMvH,OAAAC,OAAA,GAAKoB,GACP1D,EACC8Y,EAME5a,EAAAA,cAAAA,EAAAA,SAAA,KACKJ,EACAihB,EAzDMtf,CAAAA,IACvB,MAAM,UAAEqB,EAAS,YAAE4C,EAAW,YAAE2iC,GAAgB5mC,EAEhD,OACIvB,EAAAA,cAAC0L,EAAAA,OAAMvH,OAAAC,OAAA,GAAK+jC,EAAYziC,MAAWF,GAC9B2iC,EAAY1pB,YACbze,EAAAA,cAACgL,EAAAA,KAAI7G,OAAAC,OAAA,GAAK+jC,EAAYriC,WAClB9F,EAAAA,cAACgL,EAAAA,KAAI7G,OAAAC,OAAA,GAAK+jC,EAAYC,MAClBpoC,EAAAA,cAACgL,EAAAA,KAAI,CAACrL,UAAU,qBACX4nC,EAAyBhmC,GAC1BvB,EAAAA,cAACgL,EAAAA,KAAI7G,OAAAC,OAAA,GAAK+jC,EAAYE,SAAQ,CAAE1oC,UAAU,8BACtCK,EAAAA,cAAA,OAAKL,UAAU,gDAAgDiD,EAAU0lC,mBACxEH,EAAYI,SAGrBvoC,EAAAA,cAACgL,EAAAA,KAAI7G,OAAAC,OAAA,GAAK+jC,EAAYE,SAAQ,CAAE1oC,UAAU,6BACrCiD,EAAU4lC,iBACVL,EAAYM,YAEjBzoC,EAAAA,cAACgL,EAAAA,KAAI7G,OAAAC,OAAA,GAAK+jC,EAAYE,SAAQ,CAAE1oC,UAAU,oCACrCiD,EAAU8lC,gBACVP,EAAYQ,WAEhBR,EAAYS,iBACZT,EAAYt8B,QAGrB7L,EAAAA,cAACgL,EAAAA,KAAI7G,OAAAC,OAAA,GAAK+jC,EAAYxpB,aACjBwpB,EAAYppB,aACZopB,EAAYtpB,gBA6BRgqB,CAAkBtnC,IARvBvB,EAAAA,cAAAA,EAAAA,SAAA,KACK+nC,EACAC","sources":["webpack://Msdyn365.Commerce.Online/./src/modules/nos-sign-up/components/nos-sign-up-button.tsx?0f15","webpack://Msdyn365.Commerce.Online/./src/modules/nos-sign-up/components/nos-sign-up-error.tsx?9874","webpack://Msdyn365.Commerce.Online/./src/modules/nos-sign-up/components/nos-sign-up-input.tsx?c43d","webpack://Msdyn365.Commerce.Online/./src/modules/nos-sign-up/components/nos-sign-up-label.tsx?15c1","webpack://Msdyn365.Commerce.Online/./src/modules/nos-sign-up/components/nos-sign-up-loading-icon.tsx?663f","webpack://Msdyn365.Commerce.Online/./src/modules/nos-sign-up/components/nos-sign-up-loading-message.tsx?6719","webpack://Msdyn365.Commerce.Online/./src/modules/nos-sign-up/components/nos-sign-up-success.tsx?a522","webpack://Msdyn365.Commerce.Online/./src/modules/nos-sign-up/nos-sign-up.tsx?8236","webpack://Msdyn365.Commerce.Online/./src/modules/nos-sign-up/nos-sign-up.view.tsx?6b22","webpack://Msdyn365.Commerce.Online/./src/themes/nos/views/components/navigation-menu-utilities.tsx?b3ad","webpack://Msdyn365.Commerce.Online/./src/themes/nos/views/components/navigation-menu-root-disabled.tsx?ab0a","webpack://Msdyn365.Commerce.Online/./src/themes/nos/views/components/navigation-menu-root-enabled.tsx?829a","webpack://Msdyn365.Commerce.Online/./src/themes/nos/views/navigation-menu.view.tsx?c83e","webpack://Msdyn365.Commerce.Online/./src/utilities/regex/email-regex.ts?4a25","webpack://Msdyn365.Commerce.Online/./src/modules/loyalty-sign-up/components/loyalty-sign-up-small-components.tsx?7106","webpack://Msdyn365.Commerce.Online/./src/modules/loyalty-sign-up/loyalty-sign-up.tsx?fd89","webpack://Msdyn365.Commerce.Online/./src/modules/loyalty-sign-up/loyalty-sign-up.view.tsx?45ec","webpack://Msdyn365.Commerce.Online/./src/modules/loyalty-terms/components/loyalty-terms-modal.tsx?1b8b","webpack://Msdyn365.Commerce.Online/./src/modules/loyalty-terms/loyalty-terms.tsx?babd","webpack://Msdyn365.Commerce.Online/./src/modules/loyalty-terms/loyalty-terms.view.tsx?b3e6","webpack://Msdyn365.Commerce.Online/./src/modules/msdyn365-pva-chat-connector/msdyn365-pva-chat-connector.tsx?797a","webpack://Msdyn365.Commerce.Online/./node_modules/@msdyn365-commerce-modules/chat/node_modules/uuid/dist/esm-browser/rng.js?7d39","webpack://Msdyn365.Commerce.Online/./node_modules/@msdyn365-commerce-modules/chat/node_modules/uuid/dist/esm-browser/regex.js?255d","webpack://Msdyn365.Commerce.Online/./node_modules/@msdyn365-commerce-modules/chat/node_modules/uuid/dist/esm-browser/validate.js?f4cd","webpack://Msdyn365.Commerce.Online/./node_modules/@msdyn365-commerce-modules/chat/node_modules/uuid/dist/esm-browser/stringify.js?688d","webpack://Msdyn365.Commerce.Online/./node_modules/@msdyn365-commerce-modules/chat/node_modules/uuid/dist/esm-browser/v4.js?0bec","webpack://Msdyn365.Commerce.Online/./src/modules/msdyn365-pva-chat-connector/proactive/triggers/proactive-chat-trigger.ts?ab51","webpack://Msdyn365.Commerce.Online/./src/modules/msdyn365-pva-chat-connector/proactive/triggers/cart-amount-trigger.ts?b0a3","webpack://Msdyn365.Commerce.Online/./src/modules/msdyn365-pva-chat-connector/proactive/triggers/cart-number-of-items-trigger.ts?5c1e","webpack://Msdyn365.Commerce.Online/./src/modules/msdyn365-pva-chat-connector/proactive/triggers/cart-specific-product-trigger.ts?5985","webpack://Msdyn365.Commerce.Online/./src/modules/msdyn365-pva-chat-connector/helpers/consts.ts?4dc3","webpack://Msdyn365.Commerce.Online/./src/modules/msdyn365-pva-chat-connector/proactive/triggers/date-range-trigger.ts?d574","webpack://Msdyn365.Commerce.Online/./src/modules/msdyn365-pva-chat-connector/proactive/triggers/from-specific-page-trigger.ts?37c0","webpack://Msdyn365.Commerce.Online/./src/modules/msdyn365-pva-chat-connector/proactive/triggers/page-visits-trigger.ts?66a6","webpack://Msdyn365.Commerce.Online/./src/modules/msdyn365-pva-chat-connector/proactive/triggers/specific-CountryRegion-trigger.ts?5c72","webpack://Msdyn365.Commerce.Online/./src/modules/msdyn365-pva-chat-connector/proactive/triggers/specific-page-trigger.ts?9295","webpack://Msdyn365.Commerce.Online/./src/modules/msdyn365-pva-chat-connector/proactive/triggers/wait-on-time-trigger.ts?63fd","webpack://Msdyn365.Commerce.Online/./src/modules/msdyn365-pva-chat-connector/proactive/index.ts?ef6c","webpack://Msdyn365.Commerce.Online/./src/modules/msdyn365-pva-chat-connector/helpers/ContextProvider.ts?20ff","webpack://Msdyn365.Commerce.Online/./src/modules/msdyn365-pva-chat-connector/helpers/StyleComposers.ts?0cc6","webpack://Msdyn365.Commerce.Online/./src/modules/msdyn365-pva-chat-connector/helpers/CommerceChatStore.ts?9abc","webpack://Msdyn365.Commerce.Online/./src/modules/msdyn365-pva-chat-connector/components/ChatCore.tsx?1b5f","webpack://Msdyn365.Commerce.Online/./src/modules/msdyn365-pva-chat-connector/components/Chat.tsx?5004","webpack://Msdyn365.Commerce.Online/./src/modules/msdyn365-pva-chat-connector/msdyn365-pva-chat-connector.view.tsx?cb2f","webpack://Msdyn365.Commerce.Online/./src/modules/cookie-compliance/components/accept-button.tsx?8e73","webpack://Msdyn365.Commerce.Online/./src/modules/cookie-compliance/components/links.tsx?97b8","webpack://Msdyn365.Commerce.Online/./src/modules/cookie-compliance/cookie-compliance.tsx?02ac","webpack://Msdyn365.Commerce.Online/./src/modules/cookie-compliance/cookie-compliance.view.tsx?a33f","webpack://Msdyn365.Commerce.Online/./src/modules/navigation-menu/navigation-menu.data.ts?9815","webpack://Msdyn365.Commerce.Online/./src/modules/navigation-menu/navigation-menu.tsx?2bef","webpack://Msdyn365.Commerce.Online/./src/modules/navigation-menu/navigation-menu.view.tsx?c594","webpack://Msdyn365.Commerce.Online/./src/modules/adventureworks/views/components/navigation-menu-utilities.tsx?d092","webpack://Msdyn365.Commerce.Online/./src/modules/adventureworks/views/components/navigation-menu-root-disabled.tsx?1d68","webpack://Msdyn365.Commerce.Online/./src/modules/adventureworks/views/components/navigation-menu-root-enabled.tsx?d5b3","webpack://Msdyn365.Commerce.Online/./src/modules/adventureworks/views/navigation-menu.view.tsx?5304","webpack://Msdyn365.Commerce.Online/./src/modules/adventureworks/views/order-details.view.tsx?027b","webpack://Msdyn365.Commerce.Online/./src/modules/adventureworks/views/write-review.view.tsx?c67c"],"sourcesContent":["/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport { Button } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nexport interface ISignUpButton {\r\n id?: string;\r\n className: string;\r\n text: string;\r\n ariaLabel: string;\r\n disabled?: boolean;\r\n onClick?(event: React.MouseEvent): void;\r\n}\r\n\r\nconst SignUpButton: React.FC = ({ id, className, text, ariaLabel, disabled, onClick }) => (\r\n \r\n);\r\n\r\nexport default SignUpButton;\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport classnames from 'classnames';\r\nimport * as React from 'react';\r\n\r\nexport interface ISignUpErrorProps {\r\n id?: string;\r\n className: string;\r\n type?: string;\r\n message?: string;\r\n}\r\n\r\nconst SignUpError: React.FC = ({ id, className, type = 'page', message }) => {\r\n const errorClassName = `${className}__${type}-error`;\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nexport default SignUpError;\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport { INodeProps } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nexport interface ISignUpInputProps {\r\n id?: string;\r\n hasFocus?: boolean;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n type: any;\r\n value?: string;\r\n pattern?: string;\r\n className: string;\r\n maxLength?: string;\r\n readOnly?: boolean;\r\n onChange?(event: React.ChangeEvent): void;\r\n}\r\n\r\nexport interface ISignUpInput {\r\n key: string;\r\n AddressItem: INodeProps;\r\n label: React.ReactNode;\r\n alert: React.ReactNode;\r\n input: React.ReactNode;\r\n}\r\n\r\nconst GetMaxLength = (maxLength?: string): number | undefined => {\r\n if (maxLength) {\r\n const parsedMaxLength = Number.parseInt(maxLength, 10);\r\n if (!isNaN(parsedMaxLength)) {\r\n return parsedMaxLength;\r\n }\r\n }\r\n\r\n return undefined;\r\n};\r\n\r\nconst SignUpInput: React.FC = ({ id, type, value, pattern, className, maxLength, readOnly, onChange }) => (\r\n \r\n);\r\n\r\nexport default SignUpInput;\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport * as React from 'react';\r\n\r\nexport interface ISignUpLabel {\r\n id: string;\r\n forId: string;\r\n className: string;\r\n text: string;\r\n}\r\n\r\nconst SignUpLabel: React.FC = ({ id, forId, className, text }) => (\r\n \r\n);\r\n\r\nexport default SignUpLabel;\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport * as React from 'react';\r\n\r\nexport interface ISignUpLoadingIcon {\r\n className: string;\r\n}\r\n\r\nconst SignUpLoadingIcon: React.FC = ({ className }) =>
;\r\n\r\nexport default SignUpLoadingIcon;\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport * as React from 'react';\r\n\r\nexport interface ISignUpLoadingMessage {\r\n className: string;\r\n message: string;\r\n}\r\n\r\nconst SignUpLoadingMessage: React.FC = ({ className, message }) => (\r\n
{message}
\r\n);\r\n\r\nexport default SignUpLoadingMessage;\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport classnames from 'classnames';\r\nimport * as React from 'react';\r\n\r\nexport interface ISignUpSuccess {\r\n id?: string;\r\n className: string;\r\n type?: string;\r\n message?: string;\r\n}\r\n\r\nconst SignUpSuccess: React.FC = ({ id, className, type = 'page', message }) => {\r\n const successClassName = `${className}__${type}-success`;\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nexport default SignUpSuccess;\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\nimport { IModuleProps, INodeProps, Modal, ModalBody } from '@msdyn365-commerce-modules/utilities';\r\nimport classnames from 'classnames';\r\nimport { observable } from 'mobx';\r\nimport { observer } from 'mobx-react';\r\nimport * as React from 'react';\r\n\r\nimport { EmailRegex } from '../../utilities/regex/email-regex';\r\nimport SignUpButtonComponent from './components/nos-sign-up-button';\r\nimport SignUpErrorComponent from './components/nos-sign-up-error';\r\nimport SignUpInputComponent from './components/nos-sign-up-input';\r\nimport SignUpLabelComponent from './components/nos-sign-up-label';\r\nimport SignUpLoadingIconComponent from './components/nos-sign-up-loading-icon';\r\nimport SignUpLoadingMessageComponent from './components/nos-sign-up-loading-message';\r\nimport SignUpSuccessComponent from './components/nos-sign-up-success';\r\nimport { INosSignUpConfig, INosSignUpProps, INosSignUpResources } from './nos-sign-up.props.autogenerated';\r\n\r\nexport interface ISignUpViewState {\r\n isShowLoading: boolean;\r\n}\r\n\r\nexport interface ISignUpItem {\r\n wrapper: INodeProps;\r\n key: string;\r\n label: React.ReactNode;\r\n errorMessage: React.ReactNode;\r\n input: React.ReactNode;\r\n}\r\n\r\nexport interface ISignUpEmailVerification {\r\n isRequired: boolean;\r\n email: ISignUpItem;\r\n buttonWrapper: INodeProps;\r\n buttons: React.ReactNode[];\r\n successMessage: React.ReactNode[];\r\n errorMessage: React.ReactNode[];\r\n verificationControlWrapper: INodeProps;\r\n}\r\n\r\n/**\r\n * SignUp Given Name Verification Interface.\r\n */\r\nexport interface ISignUpGivenNameVerification {\r\n isRequired: boolean;\r\n givenName: ISignUpItem;\r\n errorMessage: React.ReactNode[];\r\n verificationControlWrapper: INodeProps;\r\n}\r\n\r\n/**\r\n * SignUp Surname Verification Interface.\r\n */\r\nexport interface ISignUpSurnameVerification {\r\n isRequired: boolean;\r\n surname: ISignUpItem;\r\n errorMessage: React.ReactNode[];\r\n verificationControlWrapper: INodeProps;\r\n}\r\n\r\nexport interface ISignUpLocalAccount {\r\n localAccount: INodeProps;\r\n items: ISignUpItem[];\r\n emailVerification: ISignUpEmailVerification;\r\n givenNameVerification: ISignUpGivenNameVerification;\r\n surnameVerification: ISignUpSurnameVerification;\r\n buttons: React.ReactNode[];\r\n errorMessage: React.ReactNode[];\r\n disclaimer: React.ReactNode;\r\n}\r\n\r\nexport interface ISignUpLoading {\r\n modal: INodeProps;\r\n modalBody: INodeProps;\r\n icon: React.ReactNode;\r\n message: React.ReactNode;\r\n}\r\n\r\nexport interface ISignUpViewProps {\r\n className: string;\r\n viewState: ISignUpViewState;\r\n loading: ISignUpLoading;\r\n signUp: IModuleProps;\r\n defaultAADConainer: INodeProps;\r\n aadConainer: INodeProps;\r\n heading: React.ReactNode;\r\n signUpLocalAccount: ISignUpLocalAccount;\r\n}\r\n\r\n/**\r\n *\r\n * SignUp component\r\n * All AAD related module is rendered on AAD page and we need to respect HTML contract provide by AAD.\r\n * Please ensure any change in module don't break contract with AAD.\r\n * @extends {React.Component>}\r\n */\r\n@observer\r\nclass SignUp extends React.Component> {\r\n @observable private isGivenNameVerificationRequried: boolean;\r\n\r\n @observable private isSurnameVerificationRequried: boolean;\r\n\r\n private readonly moduleClassName: string = 'nos-sign-up';\r\n\r\n @observable private givenName: string;\r\n\r\n @observable private surname: string;\r\n\r\n @observable private email: string;\r\n\r\n @observable private emailRegex: string;\r\n\r\n @observable private isEmailVerificationRequried: boolean;\r\n\r\n @observable private isInitialized: boolean;\r\n\r\n @observable private templateVersion: string;\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n private initializationTimer: any;\r\n constructor(props: INosSignUpProps) {\r\n super(props);\r\n this.givenName = '';\r\n this.surname = '';\r\n this.email = '';\r\n this.emailRegex = EmailRegex.defaultRegex.source;\r\n this.isEmailVerificationRequried = false;\r\n this.isGivenNameVerificationRequried = false;\r\n this.isSurnameVerificationRequried = false;\r\n this.isInitialized = false;\r\n this.templateVersion = '';\r\n }\r\n\r\n public componentDidMount(): void {\r\n this._onInit();\r\n }\r\n\r\n // After successful AAD initialization, call initialize method provided by AAD to attach events.\r\n public componentDidUpdate(): void {\r\n // eslint-disable-next-line @typescript-eslint/dot-notation, @typescript-eslint/no-unsafe-member-access -- Auto-suppressed.\r\n if (this.isInitialized && window && window['$element'] && window['$element']['initialize']) {\r\n // eslint-disable-next-line @typescript-eslint/dot-notation, @typescript-eslint/no-unsafe-member-access -- Auto-suppressed.\r\n window['$element']['initialize']();\r\n }\r\n }\r\n\r\n public shouldComponentUpdate(nextProps: INosSignUpProps, nextState: ISignUpViewState): boolean {\r\n if (this.state === nextState && this.props.data === nextProps.data) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n public render(): JSX.Element {\r\n const { config, resources } = this.props;\r\n\r\n const viewProps = {\r\n ...this.props,\r\n viewState: {\r\n isShowLoading: !this.isInitialized\r\n },\r\n signUp: {\r\n moduleProps: this.props,\r\n className: classnames(this.moduleClassName, config.className)\r\n },\r\n loading: {\r\n modal: {\r\n tag: Modal,\r\n isOpen: true\r\n },\r\n modalBody: {\r\n tag: ModalBody\r\n },\r\n icon: ,\r\n message: \r\n },\r\n defaultAADConainer: {\r\n id: 'api',\r\n style: { display: 'none' }\r\n },\r\n aadConainer: {\r\n id: this.isInitialized ? 'api' : null,\r\n className: `${this.moduleClassName}__container`\r\n },\r\n heading: (\r\n \r\n ),\r\n signUpLocalAccount: this._renderLocalAccount()\r\n };\r\n\r\n return this.props.renderView(viewProps) as React.ReactElement;\r\n }\r\n\r\n /**\r\n * Handles heading content change event.\r\n * @param event - Content editable event.\r\n * @returns - Heading Text.\r\n */\r\n public handleHeadingChange = (event: Msdyn365.ContentEditableEvent) => (this.props.config.heading.text = event.target.value);\r\n\r\n /**\r\n * Handles paragraph content change event.\r\n * @param event - Content editable event.\r\n * @returns - Paragraph Text.\r\n */\r\n public handleParagraphChange = (event: Msdyn365.ContentEditableEvent) => (this.props.config.disclaimer = event.target.value);\r\n\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n public _onInit = () => {\r\n this._updateErrorMessage();\r\n this._prePopulateData();\r\n\r\n // Check if AAD initialization is complete. AAD do not provide any event to subscribe so we need to check variable set by AAD to check initialization status.\r\n this.initializationTimer = setInterval(() => {\r\n this._isInitializationSuccessful();\r\n }, 100);\r\n setTimeout(() => {\r\n clearInterval(this.initializationTimer);\r\n }, 10_000);\r\n };\r\n\r\n // After successful AAD initialization, remove waiting and preload any data, if needed.\r\n private readonly _isInitializationSuccessful = () => {\r\n // eslint-disable-next-line @typescript-eslint/dot-notation, @typescript-eslint/no-unsafe-member-access -- Auto-suppressed.\r\n if (window && window['$diags'] && window['$diags']['initializationSuccessful']) {\r\n clearInterval(this.initializationTimer);\r\n this.isInitialized = true;\r\n }\r\n };\r\n\r\n private readonly _prePopulateData = () => {\r\n const resources: INosSignUpResources = this.props.resources || {};\r\n\r\n // eslint-disable-next-line @typescript-eslint/dot-notation, @typescript-eslint/no-unsafe-member-access -- Auto-suppressed.\r\n if (window['SA_FIELDS'] && window['SA_FIELDS']['AttributeFields']) {\r\n // eslint-disable-next-line @typescript-eslint/dot-notation, @typescript-eslint/no-unsafe-member-access -- Auto-suppressed.\r\n window['SA_FIELDS']['AttributeFields'].map(\r\n (obj: { ID: string; PRE: string; PAT: string; UX_INPUT_TYPE: string; PAT_DESC: string; VERIFY: boolean }) => {\r\n const value = obj.PRE ? this._htmlDecode(obj.PRE) : '';\r\n switch (obj.ID.toLowerCase()) {\r\n case 'emailverificationcontrol': {\r\n this.isEmailVerificationRequried = true;\r\n this.templateVersion = 'v2';\r\n break;\r\n }\r\n case 'email': {\r\n this.email = value;\r\n this.emailRegex = obj.PAT;\r\n this.isEmailVerificationRequried = obj.VERIFY;\r\n this.templateVersion = 'v1';\r\n break;\r\n }\r\n case 'givennameverificationcontrol': {\r\n this.isGivenNameVerificationRequried = true;\r\n break;\r\n }\r\n case 'givenname': {\r\n this.givenName = value;\r\n this.isGivenNameVerificationRequried = obj.VERIFY;\r\n break;\r\n }\r\n case 'surnameverificationcontrol': {\r\n this.isEmailVerificationRequried = true;\r\n break;\r\n }\r\n case 'surname': {\r\n this.surname = value;\r\n this.isSurnameVerificationRequried = obj.VERIFY;\r\n break;\r\n }\r\n default:\r\n }\r\n\r\n switch (obj.UX_INPUT_TYPE.toLowerCase()) {\r\n case 'emailbox': {\r\n obj.PAT_DESC = resources.invalidEmailAddressError;\r\n break;\r\n }\r\n default:\r\n }\r\n }\r\n );\r\n }\r\n };\r\n\r\n private _htmlDecode(str: string): string {\r\n const e = document.createElement('div');\r\n\r\n e.innerHTML = str;\r\n return e.childNodes.length === 0 ? '' : e.childNodes[0].nodeValue || '';\r\n }\r\n\r\n private readonly _updateErrorMessage = () => {\r\n const resources: INosSignUpResources = this.props.resources || {};\r\n\r\n // eslint-disable-next-line @typescript-eslint/dot-notation -- Auto-suppressed.\r\n if (window && window['CONTENT']) {\r\n const errorMessages = {\r\n required_field: resources.requiredFieldMissingError\r\n };\r\n\r\n // eslint-disable-next-line @typescript-eslint/dot-notation -- Auto-suppressed.\r\n Object.assign(window['CONTENT'], errorMessages);\r\n }\r\n };\r\n\r\n private readonly getValue = (v1Value: string, v2Value: string): string => {\r\n if (this.templateVersion) {\r\n return this.templateVersion === 'v1' ? v1Value : v2Value;\r\n }\r\n return '';\r\n };\r\n\r\n private _renderLocalAccount(): ISignUpLocalAccount {\r\n const { config, resources } = this.props;\r\n return {\r\n localAccount: {\r\n id: 'attributeList',\r\n className: `${this.moduleClassName}__account-items attr`\r\n },\r\n items: [\r\n this._renderInput(\r\n 'givenName',\r\n 'text',\r\n this.givenName,\r\n resources.firstNameLabelText,\r\n resources.firstNameMaxLength,\r\n '',\r\n '',\r\n true\r\n ),\r\n this._renderInput('surname', 'text', this.surname, resources.lastNameLabelText, resources.lastNameMaxLength, '', '', true),\r\n this._renderInput('email', 'email', this.email, resources.emailAddressLabelText, undefined, this.emailRegex, '', true)\r\n ],\r\n emailVerification: {\r\n isRequired: this.isEmailVerificationRequried,\r\n email: this._renderInput(\r\n this.getValue('email_ver_input', 'emailVerificationCode'),\r\n 'text',\r\n resources.verificationCodeLabelText,\r\n '',\r\n undefined,\r\n undefined,\r\n 'VerificationCode'\r\n ),\r\n verificationControlWrapper: {\r\n id: 'emailVerificationControl',\r\n className: `${this.moduleClassName}__verification-control-content verificationControlContent`\r\n },\r\n buttonWrapper: {\r\n className: `${this.moduleClassName}__email-verification-buttons ${this.getValue('verify', '')}`,\r\n 'data-claim_id': 'email'\r\n },\r\n buttons: [\r\n ,\r\n ,\r\n ,\r\n \r\n ],\r\n successMessage: [\r\n ,\r\n \r\n ],\r\n errorMessage: [\r\n ,\r\n ,\r\n ,\r\n ,\r\n ,\r\n ,\r\n \r\n ]\r\n },\r\n givenNameVerification: {\r\n isRequired: this.isGivenNameVerificationRequried,\r\n givenName: this._renderInput(\r\n this.getValue('givenName_ver_input', 'givenNameVerificationCode'),\r\n 'text',\r\n '',\r\n resources.verificationCodeLabelText,\r\n undefined,\r\n undefined,\r\n 'VerificationCode'\r\n ),\r\n verificationControlWrapper: {\r\n id: 'givenNameVerificationControl',\r\n className: `${this.moduleClassName}__verification-control-content verificationControlContent`\r\n },\r\n errorMessage: [\r\n \r\n ]\r\n },\r\n surnameVerification: {\r\n isRequired: this.isSurnameVerificationRequried,\r\n surname: this._renderInput(\r\n this.getValue('surname_ver_input', 'surnameVerificationCode'),\r\n 'text',\r\n '',\r\n resources.verificationCodeLabelText,\r\n undefined,\r\n undefined,\r\n 'VerificationCode'\r\n ),\r\n verificationControlWrapper: {\r\n id: 'surnameVerificationControl',\r\n className: `${this.moduleClassName}__verification-control-content verificationControlContent`\r\n },\r\n errorMessage: [\r\n \r\n ]\r\n },\r\n buttons: [\r\n ,\r\n \r\n ],\r\n errorMessage: [\r\n ,\r\n ,\r\n \r\n ],\r\n disclaimer: config.disclaimer && (\r\n \r\n )\r\n };\r\n }\r\n\r\n private _renderInput(\r\n id: string,\r\n type: string,\r\n value: string,\r\n labelText: string,\r\n maxLength?: string,\r\n pattern?: string,\r\n cssClassName?: string,\r\n readOnly?: boolean\r\n ): ISignUpItem {\r\n const className = `${this.moduleClassName}__account-item`;\r\n return {\r\n wrapper: {\r\n className: classnames(className, `${className}-${id}`, 'entry-item', 'attrEntry', cssClassName)\r\n },\r\n key: id,\r\n label: (\r\n \r\n ),\r\n errorMessage: (\r\n \r\n ),\r\n input: (\r\n \r\n )\r\n };\r\n }\r\n}\r\n\r\nexport default SignUp;\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nimport {\r\n ISignUpEmailVerification,\r\n ISignUpGivenNameVerification,\r\n ISignUpItem,\r\n ISignUpLoading,\r\n ISignUpLocalAccount,\r\n ISignUpSurnameVerification,\r\n ISignUpViewProps\r\n} from './nos-sign-up';\r\n\r\nconst SignUpItem: React.FC = ({ wrapper, label, errorMessage, input }) => {\r\n return (\r\n \r\n {label}\r\n {errorMessage}\r\n {input}\r\n \r\n );\r\n};\r\n\r\nconst SignUpEmailVerification: React.FC = ({ email, buttonWrapper, buttons, successMessage, errorMessage }) => {\r\n return (\r\n <>\r\n {successMessage &&\r\n successMessage.map((message: React.ReactNode) => {\r\n return <>{message};\r\n })}\r\n \r\n {errorMessage &&\r\n errorMessage.map((message: React.ReactNode) => {\r\n return <>{message};\r\n })}\r\n \r\n {buttons &&\r\n buttons.map((button: React.ReactNode) => {\r\n return <>{button};\r\n })}\r\n \r\n \r\n );\r\n};\r\n\r\n/**\r\n * Handles validation of sign-up givenName.\r\n * @param event - Content editable event.\r\n * @param event.givenName - Event Given Name.\r\n * @param event.errorMessage - Event Error Message.\r\n * @returns - Error Message for Given Name.\r\n */\r\nconst SignUpGivenNameVerificationComponent: React.FC = ({ givenName, errorMessage }) => {\r\n return (\r\n <>\r\n \r\n {errorMessage.map((message: React.ReactNode) => {\r\n return <>{message};\r\n })}\r\n \r\n );\r\n};\r\n\r\n/**\r\n * Handles validation of signUp surname.\r\n * @param event - Content editable event.\r\n * @param event.surname - Event surname.\r\n * @param event.errorMessage - Event Error Message.\r\n * @returns - Error Message for surname.\r\n */\r\nconst SignUpSurnameVerificationComponent: React.FC = ({ surname, errorMessage }) => {\r\n return (\r\n <>\r\n \r\n {errorMessage.map((message: React.ReactNode) => {\r\n return <>{message};\r\n })}\r\n \r\n );\r\n};\r\n\r\nconst LocalAccount: React.FC = ({\r\n localAccount,\r\n items,\r\n emailVerification,\r\n givenNameVerification,\r\n surnameVerification,\r\n buttons,\r\n errorMessage,\r\n disclaimer\r\n}) => {\r\n return (\r\n \r\n {items &&\r\n items.map((item: ISignUpItem) => {\r\n if (item.key === 'email' && emailVerification.isRequired) {\r\n return (\r\n // eslint-disable-next-line react/jsx-key\r\n \r\n \r\n \r\n \r\n );\r\n }\r\n if (item.key === 'givenName' && givenNameVerification.isRequired) {\r\n return (\r\n // eslint-disable-next-line react/jsx-key\r\n \r\n \r\n \r\n \r\n );\r\n }\r\n if (item.key === 'surname' && surnameVerification.isRequired) {\r\n return (\r\n // eslint-disable-next-line react/jsx-key\r\n \r\n \r\n \r\n \r\n );\r\n }\r\n // eslint-disable-next-line react/jsx-key\r\n return ;\r\n })}\r\n {errorMessage &&\r\n errorMessage.map((error: React.ReactNode, index: number) => {\r\n return {error};\r\n })}\r\n {buttons &&\r\n buttons.map((button: React.ReactNode, index: number) => {\r\n return {button};\r\n })}\r\n {disclaimer}\r\n \r\n );\r\n};\r\n\r\nconst SignUpLoading: React.FC = ({ modal, modalBody, icon, message }) => {\r\n return (\r\n \r\n \r\n {icon}\r\n {message}\r\n \r\n \r\n );\r\n};\r\n\r\nconst SignUpView: React.FC = props => {\r\n const { signUp, viewState, loading, defaultAADConainer, aadConainer, heading, signUpLocalAccount } = props;\r\n\r\n return (\r\n \r\n {viewState.isShowLoading && }\r\n {viewState.isShowLoading && }\r\n \r\n {heading}\r\n {LocalAccount(signUpLocalAccount)}\r\n \r\n \r\n );\r\n};\r\n\r\nexport default SignUpView;\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\nimport { INavigationMenuViewProps } from '@msdyn365-commerce-modules/navigation-menu/src/modules/navigation-menu/./navigation-menu';\r\nimport { generateImageUrl } from '@msdyn365-commerce-modules/retail-actions';\r\nimport * as React from 'react';\r\n\r\nimport { INavigationMenuProps } from '../../definition-extensions/navigation-menu.ext.props.autogenerated';\r\n\r\n/**\r\n * INosNavigationMenuViewRootProps.\r\n */\r\n\r\nexport interface INosNavigationMenuViewRootProps {\r\n navProps: INavigationMenuViewProps & INavigationMenuProps<{}>;\r\n}\r\n\r\n/**\r\n * Represent navigation menu state interface.\r\n */\r\nexport interface INavigationState {\r\n parentMenu?: number;\r\n activeMenu?: number;\r\n categoryImage?: Msdyn365.IImageData[] | null;\r\n mobileViewLabelText?: string;\r\n drawerKeyValue: Msdyn365.IDictionary;\r\n isOnlyMobile: boolean;\r\n isNavOpen: boolean;\r\n menuItemId?: number;\r\n}\r\n\r\n/**\r\n * NavMenuConstants enum.\r\n */\r\nexport enum NavMenuConstants {\r\n zero = 0,\r\n one = 1,\r\n two = 2,\r\n three = 3,\r\n four = 4,\r\n escapeKey = 27,\r\n rootMenu = 1\r\n}\r\n\r\n/**\r\n * GridSizes.\r\n */\r\nexport type GridSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\r\n\r\n/**\r\n * Get category image.\r\n * @param props - Navigation menu props.\r\n * @param categoryImage - Category Image.\r\n * @param alttext - AltText String.\r\n * @returns Returns Node.\r\n */\r\nexport const getCategoryImage = (\r\n props: INosNavigationMenuViewRootProps,\r\n categoryImage: string,\r\n alttext: string\r\n): React.ReactNode | null => {\r\n const categoryImageUrl = generateImageUrl(`${categoryImage}`, props.navProps.context.actionContext.requestContext.apiSettings);\r\n const defaultImageSettings: Msdyn365.IImageSettings = {\r\n viewports: {\r\n xs: { q: 'w=162&h=162&m=8', w: 0, h: 0 },\r\n sm: { q: 'w=162&h=162&m=8', w: 0, h: 0 },\r\n md: { q: 'w=203&h=203&m=8', w: 0, h: 0 },\r\n lg: { q: 'w=203&h=203&m=8', w: 0, h: 0 }\r\n },\r\n lazyload: true\r\n };\r\n if (categoryImageUrl !== undefined) {\r\n const imageData: Msdyn365.IImageData = { src: categoryImageUrl };\r\n return (\r\n \r\n );\r\n }\r\n return null;\r\n};\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\nimport { IMenuItemData, MenuTypeIndexId } from '@msdyn365-commerce-modules/navigation-menu';\r\nimport { ArrayExtensions, StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\r\nimport {\r\n addThrottledEvent,\r\n Button,\r\n Collapse,\r\n Drawer,\r\n getPayloadObject,\r\n getTelemetryAttributes,\r\n getTelemetryObject,\r\n ICollapseProps,\r\n IPayLoad,\r\n isMobile,\r\n ITelemetryContent,\r\n Module,\r\n Node,\r\n onTelemetryClick,\r\n VariantType\r\n} from '@msdyn365-commerce-modules/utilities';\r\nimport classnames from 'classnames';\r\nimport { computed } from 'mobx';\r\nimport * as React from 'react';\r\n\r\nimport { getCategoryImage, INosNavigationMenuViewRootProps, INavigationState, NavMenuConstants } from './navigation-menu-utilities';\r\n\r\n/**\r\n *\r\n * NavigationMenuRootDisabled component.\r\n * @extends {React.PureComponent}\r\n */\r\nexport class NavigationMenuRootDisabled extends React.PureComponent {\r\n private static isBackTrack: boolean = false;\r\n\r\n private readonly supportedLevel: number = NavMenuConstants.four;\r\n\r\n private currentLevel: number = NavMenuConstants.zero;\r\n\r\n private readonly menuNode: React.RefObject;\r\n\r\n private readonly menuItemRef: React.RefObject;\r\n\r\n private readonly escapeKey: number = NavMenuConstants.escapeKey;\r\n\r\n private readonly telemetryContent: ITelemetryContent;\r\n\r\n private readonly promotionalImage: Msdyn365.IImageData[] = [];\r\n\r\n private readonly payLoad: IPayLoad;\r\n\r\n private readonly attributes?: Msdyn365.IDictionary;\r\n\r\n private customResizeThrottledEventHandler?: (event: Event) => void;\r\n\r\n public constructor(props: INosNavigationMenuViewRootProps) {\r\n super(props);\r\n this.menuNode = React.createRef();\r\n this.menuItemRef = React.createRef();\r\n const { menuItemData } = this.props.navProps;\r\n if (ArrayExtensions.hasElements(menuItemData) && ArrayExtensions.hasElements(menuItemData[0].subMenu)) {\r\n const imagesource = menuItemData[0].subMenu[0].imageSource ? menuItemData[0].subMenu[0].imageSource : '';\r\n const linkText = menuItemData[0].subMenu[0].linkText ? menuItemData[0].subMenu[0].linkText : '';\r\n this.promotionalImage = [{ src: imagesource, altText: linkText }];\r\n\r\n // Read category and promotional image in one array\r\n if (ArrayExtensions.hasElements(menuItemData[0].subMenu[0].promotionalContent)) {\r\n menuItemData[0].subMenu[0].promotionalContent.map(item => {\r\n const imageSource = item.image.src;\r\n this.promotionalImage.push({\r\n src: imageSource,\r\n altText: item.text,\r\n additionalProperties: { linkUrl: item.linkUrl.destinationUrl }\r\n });\r\n return null;\r\n });\r\n }\r\n }\r\n\r\n this.state = {\r\n activeMenu: 1,\r\n mobileViewLabelText: '',\r\n parentMenu: undefined,\r\n drawerKeyValue: {},\r\n isOnlyMobile: this.isOnlyMobile,\r\n categoryImage: this.promotionalImage,\r\n isNavOpen: false,\r\n menuItemId: -1\r\n };\r\n this.telemetryContent = getTelemetryObject(\r\n this.props.navProps.context.request.telemetryPageName!,\r\n this.props.navProps.friendlyName,\r\n this.props.navProps.telemetry\r\n );\r\n this.payLoad = getPayloadObject('click', this.telemetryContent, '', '');\r\n // this.attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\r\n }\r\n\r\n @computed public get isOnlyMobile(): boolean {\r\n const screenMode = isMobile({ variant: VariantType.Browser, context: this.props.navProps.context.request });\r\n return screenMode === 'xs' || screenMode === 'sm' || screenMode === 'md';\r\n }\r\n\r\n public componentDidMount(): void {\r\n this.customResizeThrottledEventHandler = addThrottledEvent(window, 'resize', this._customUpdateViewport as EventListener);\r\n document.addEventListener('keydown', (this._escFunction as unknown) as EventListener, false);\r\n this._customUpdateViewport();\r\n document.body.addEventListener('mousedown', this._handleClickOutside);\r\n }\r\n\r\n public componentDidUpdate(): void {\r\n if (this.menuItemRef.current?.children[0] && this.props.navProps.isMobileView) {\r\n (this.menuItemRef.current.children[0] as HTMLElement).focus();\r\n }\r\n }\r\n\r\n public componentWillUnmount(): void {\r\n window.removeEventListener('resize', this.customResizeThrottledEventHandler!, false);\r\n document.body.removeEventListener('mousedown', this._handleClickOutside, false);\r\n }\r\n\r\n public render(): JSX.Element | null {\r\n this.currentLevel = 1;\r\n const navbarKey = 'header-nav-mobile';\r\n\r\n return (\r\n \r\n {this.state.isOnlyMobile ? (\r\n <>\r\n \r\n {this._renderCollapseMenu()}\r\n \r\n ) : (\r\n <>\r\n {this._createDesktopHeaderLinks()}\r\n {this._renderCollapseMenu()}\r\n \r\n )}\r\n \r\n );\r\n }\r\n\r\n /**\r\n * Function to handle nav bar toggle.\r\n */\r\n private readonly _toggleNavBar = (): void => {\r\n this.setState(previousState => ({\r\n activeMenu: undefined,\r\n isNavOpen: !previousState.isNavOpen\r\n }));\r\n };\r\n\r\n private _createDesktopHeaderLinks = () => {\r\n return this.props.navProps?.menuItemData?.length ? (\r\n
    \r\n {this.props.navProps.menuItemData.map((link, index) => {\r\n return link?.subMenu?.length ? (\r\n
  • \r\n {\r\n this._toggleNavBar();\r\n this.setState({ menuItemId: link.id });\r\n }}\r\n key={index}\r\n className={`${this.state.isNavOpen ? 'open' : ''}`}\r\n >\r\n {link.linkText}\r\n \r\n
  • \r\n ) : (\r\n
  • {this._createLink(link, index)}
  • \r\n );\r\n })}\r\n
\r\n ) : null;\r\n };\r\n\r\n private _createLink = (link: IMenuItemData, index: number) => {\r\n const editableLink: Msdyn365.ILinksData = {\r\n ariaLabel: link.ariaLabel,\r\n className: 'nos-header__header-link',\r\n linkText: link.linkText,\r\n linkUrl: link.linkURL,\r\n openInNewTab: false,\r\n role: 'link'\r\n };\r\n return ;\r\n };\r\n\r\n private _renderCollapseMenu(): JSX.Element | null {\r\n return (\r\n \r\n {this.state.isOnlyMobile ? this._renderMobileMenu() : this._renderDesktopMenu()}\r\n \r\n );\r\n }\r\n\r\n private _renderMobileMenu(): JSX.Element {\r\n const { MenuList, MobileBackButton, MobileDescriptionContainer, MobileDescriptionLabel, Navigation } = this.props.navProps;\r\n\r\n this.currentLevel = 1;\r\n return (\r\n <>\r\n
\r\n
\r\n \r\n \r\n {this.state.isOnlyMobile && this.state.activeMenu !== undefined && (\r\n \r\n \r\n {this.state.mobileViewLabelText}\r\n \r\n )}\r\n {this._renderDisplay()}\r\n \r\n \r\n \r\n );\r\n }\r\n\r\n private _renderDesktopMenu(): JSX.Element {\r\n const { MenuList, Navigation } = this.props.navProps;\r\n\r\n return (\r\n <>\r\n
\r\n
\r\n \r\n \r\n {this._renderDisplay()}\r\n \r\n \r\n \r\n );\r\n }\r\n\r\n private _renderDrawerLink(item: IMenuItemData): JSX.Element | null {\r\n if (item.linkURL && !StringExtensions.isNullOrWhitespace(item.linkURL)) {\r\n return this._renderLinkMenuItem(item);\r\n } else if (!item.linkURL) {\r\n return this._renderSpanMenuItem(item);\r\n }\r\n return null;\r\n }\r\n\r\n private _renderDisplay(): JSX.Element[] {\r\n const { ListItem } = this.props.navProps;\r\n const menuItemData: IMenuItemData[] = this.props.navProps.menuItemData;\r\n const { activeMenu } = this.state;\r\n const menuItemList: JSX.Element[] = [];\r\n\r\n if (ArrayExtensions.hasElements(menuItemData)) {\r\n menuItemData[0].id = 1;\r\n }\r\n\r\n if (this.state.isOnlyMobile && activeMenu !== undefined && ArrayExtensions.hasElements(menuItemData)) {\r\n const menuItem = this._getFromSubMenu(undefined, menuItemData);\r\n\r\n if (menuItem) {\r\n menuItemList.push(\r\n \r\n {this._createMenuItemList(menuItem)} {` `}\r\n \r\n );\r\n }\r\n } else {\r\n if (this.state.isOnlyMobile) {\r\n for (const [index, item] of menuItemData.entries()) {\r\n menuItemList.push(\r\n \r\n {this._createMenuItemList(item)}\r\n
\r\n );\r\n }\r\n } else {\r\n for (const [, menuItem] of menuItemData.entries()) {\r\n if (menuItem.id === this.state.menuItemId && menuItem.subMenu?.length) {\r\n for (const [index, subMenuItem] of menuItem.subMenu.entries()) {\r\n menuItemList.push(\r\n \r\n {this._createMenuItemList(subMenuItem)}\r\n \r\n );\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n return menuItemList;\r\n }\r\n\r\n private _getFromSubMenu(parentMenuId?: number, menu?: IMenuItemData[]): IMenuItemData | null {\r\n if (!menu) {\r\n return null;\r\n }\r\n\r\n for (let index = 0; index <= menu.length - NavMenuConstants.one; index++) {\r\n const item: IMenuItemData = menu[Number(index)];\r\n\r\n if (item.id === this.state.activeMenu) {\r\n if (!NavigationMenuRootDisabled.isBackTrack) {\r\n this.setState({ parentMenu: parentMenuId });\r\n } else {\r\n this.setState({ parentMenu: parentMenuId, mobileViewLabelText: item.linkText });\r\n }\r\n return item;\r\n }\r\n const found = this._getFromSubMenu(item.id, item.subMenu);\r\n if (found) {\r\n return found;\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n private _createMenuItemList(menuItemData: IMenuItemData): JSX.Element | null {\r\n if (ArrayExtensions.hasElements(menuItemData.subMenu)) {\r\n if (this.state.isOnlyMobile && this.state.activeMenu !== undefined) {\r\n return this._renderSubMenu(menuItemData.subMenu, menuItemData.id, false);\r\n }\r\n\r\n return (\r\n <>\r\n {this._renderButtonMenuItem(menuItemData)}\r\n {this._renderSubMenu(menuItemData.subMenu, menuItemData.id)}\r\n \r\n );\r\n } else if (menuItemData.linkURL && !StringExtensions.isNullOrWhitespace(menuItemData.linkURL)) {\r\n return this._renderLinkMenuItem(menuItemData, menuItemData.id);\r\n } else if (!menuItemData.linkURL && !(this.state.isOnlyMobile && this.state.activeMenu !== undefined)) {\r\n return this._renderSpanMenuItem(menuItemData);\r\n }\r\n\r\n return null;\r\n }\r\n\r\n private _renderSubMenu(subMenuArray?: IMenuItemData[], activeMenu?: number, isSubMenu?: boolean): JSX.Element | null {\r\n let subMenus: IMenuItemData[] | undefined = subMenuArray;\r\n if (activeMenu === NavMenuConstants.rootMenu) {\r\n subMenus = subMenuArray!.filter(subMenuItem => subMenuItem.id && subMenuItem.id >= MenuTypeIndexId.Retail);\r\n }\r\n\r\n const { ListItem } = this.props.navProps;\r\n const isEnableMultiSupportMenu = this.props.navProps.config.enableMultilevelMenu ?? false;\r\n const multiLevelSupportedMenu = this.props.navProps.config.menuLevelSupport ?? NavMenuConstants.three;\r\n\r\n if (activeMenu && this.state.activeMenu !== activeMenu) {\r\n this.props.navProps.context.telemetry.error('Navigation Active menu content is empty, module wont render.');\r\n return null;\r\n }\r\n\r\n if (!subMenus || !ArrayExtensions.hasElements(subMenus)) {\r\n this.props.navProps.context.telemetry.error('Navigation Submenu content is empty, module wont render.');\r\n return null;\r\n }\r\n\r\n let levelClassName: string = '';\r\n const menuOptions = subMenus.map((option: IMenuItemData, index: number) => {\r\n const hasOptions = option.subMenu && ArrayExtensions.hasElements(option.subMenu);\r\n let menuItem: JSX.Element | null;\r\n if (hasOptions && this.state.isOnlyMobile) {\r\n menuItem = this._renderButtonMenuItem(option, activeMenu, index);\r\n } else if (this.currentLevel === NavMenuConstants.one || !hasOptions) {\r\n menuItem = this.getMenuItem(option, index);\r\n } else {\r\n menuItem = null;\r\n }\r\n let subMenu;\r\n const isHavingSubmenu =\r\n hasOptions && isEnableMultiSupportMenu && this.currentLevel <= Math.round(multiLevelSupportedMenu) - NavMenuConstants.one;\r\n\r\n if (hasOptions && !this.state.isOnlyMobile) {\r\n if (this.currentLevel >= NavMenuConstants.two) {\r\n subMenu = this._renderSubMenuDrawer(option);\r\n } else if (this.currentLevel <= this.supportedLevel) {\r\n this.currentLevel++;\r\n levelClassName = `level-${this.currentLevel.toString()}`;\r\n subMenu = this._renderSubMenu(option.subMenu, undefined, true);\r\n }\r\n }\r\n\r\n if (isHavingSubmenu && this.state.isOnlyMobile) {\r\n this.currentLevel++;\r\n levelClassName = isEnableMultiSupportMenu ? `level-${this.currentLevel.toString()}` : '';\r\n subMenu = this._renderSubMenu(option.subMenu, option.id, true);\r\n }\r\n const imagesource = option.imageSource ? option.imageSource : '';\r\n return (\r\n \r\n {menuItem}\r\n {subMenu}\r\n \r\n );\r\n });\r\n return this._renderMenu(levelClassName, menuOptions, isSubMenu);\r\n }\r\n\r\n private getMenuItem(option: IMenuItemData, index: number): JSX.Element | null {\r\n let menuItem: JSX.Element | null;\r\n if (this.currentLevel === NavMenuConstants.one) {\r\n menuItem = option.linkURL ? this._renderLinkMenuItemLevelOne(option, index) : this._renderSpanMenuItem(option);\r\n } else {\r\n menuItem = option.linkURL ? this._renderLinkMenuItem(option, index) : this._renderSpanMenuItem(option);\r\n }\r\n return menuItem;\r\n }\r\n\r\n private _renderSubMenuDrawer(menuItem: IMenuItemData): JSX.Element | null {\r\n const levelClassName = `level-${this.currentLevel.toString()}`;\r\n const toggleButtonText = menuItem.linkText;\r\n const keyValue = this.state.drawerKeyValue;\r\n const buttonText = toggleButtonText !== undefined ? toggleButtonText : '';\r\n const keys = keyValue;\r\n const multiLevelSupportedMenu = this.props.navProps.config.menuLevelSupport ?? NavMenuConstants.three;\r\n\r\n let isDrawerOpen = false;\r\n if (keys[menuItem.id!]) {\r\n isDrawerOpen = true;\r\n }\r\n const colProps: ICollapseProps = { timeout: 0, isOpen: isDrawerOpen };\r\n\r\n return (\r\n \r\n
\r\n {menuItem.subMenu!.map((menuSubItem: IMenuItemData) => {\r\n if (ArrayExtensions.hasElements(menuSubItem.subMenu)) {\r\n this.currentLevel++;\r\n if (this.currentLevel < multiLevelSupportedMenu) {\r\n return this._renderSubMenuDrawer(menuSubItem);\r\n }\r\n }\r\n return this._renderDrawerLink(menuSubItem);\r\n })}\r\n
\r\n \r\n );\r\n }\r\n\r\n /**\r\n * Method to handle escape key event.\r\n * @param menuId -Number.\r\n * @param isDrawerOpen -Boolean.\r\n * @returns Void.\r\n */\r\n private readonly _bindDesktopCategoryClick = (menuId: number | undefined, isDrawerOpen: boolean) => (): void => {\r\n const { drawerKeyValue } = this.state;\r\n const newPair = { [menuId!]: !isDrawerOpen };\r\n this.setState({ drawerKeyValue: { ...drawerKeyValue, ...newPair } });\r\n };\r\n\r\n private _renderButtonMenuItem(option: IMenuItemData, activeMenu?: number, index?: number): JSX.Element | null {\r\n return (\r\n \r\n {option.linkText}\r\n \r\n );\r\n }\r\n\r\n private _renderLinkMenuItem(option: IMenuItemData, index?: number): JSX.Element | null {\r\n const { Link } = this.props.navProps;\r\n const linkText = option.linkText ? option.linkText : '';\r\n this.payLoad.contentAction.etext = linkText;\r\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\r\n return (\r\n \r\n {option.linkText}\r\n \r\n );\r\n }\r\n\r\n private _renderLinkMenuItemLevelOne(option: IMenuItemData, index?: number, isHoverEffect: boolean = true): JSX.Element | null {\r\n const { Link } = this.props.navProps;\r\n const linkText = option.linkText ? option.linkText : '';\r\n const imagesource = option.imageSource ? option.imageSource : '';\r\n this.payLoad.contentAction.etext = linkText;\r\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\r\n return (\r\n \r\n {option.linkText}\r\n \r\n );\r\n }\r\n\r\n private _renderPromotionalLink(linkText?: string, linkUrl?: string): JSX.Element | null {\r\n const { Link } = this.props.navProps;\r\n this.payLoad.contentAction.etext = linkText;\r\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\r\n if (linkText && linkUrl) {\r\n return (\r\n \r\n {linkText}\r\n \r\n );\r\n }\r\n return null;\r\n }\r\n\r\n private _renderSpanMenuItem(option: IMenuItemData, index?: number): JSX.Element | null {\r\n const { Span } = this.props.navProps;\r\n return (\r\n \r\n {option.linkText}\r\n \r\n );\r\n }\r\n\r\n private _renderMenu(level: string, menuOptions: JSX.Element[], isSubmenu?: boolean): JSX.Element | null {\r\n const { DivContainer, MenuList, ImageDivContainer, showCategoryImage, showPromotionalContent } = this.props.navProps;\r\n const isCategoryImageDisplay =\r\n !this.state.isOnlyMobile &&\r\n showCategoryImage &&\r\n this.state.categoryImage !== null &&\r\n this.state.categoryImage !== undefined &&\r\n !isSubmenu;\r\n const isPromotionalContentDisplay =\r\n !this.state.isOnlyMobile && showPromotionalContent && ArrayExtensions.hasElements(this.state.categoryImage) && !isSubmenu;\r\n const divContainerClass =\r\n this.currentLevel > NavMenuConstants.two || isCategoryImageDisplay ? DivContainer!.className : 'ms-nav__deafult';\r\n this.currentLevel = NavMenuConstants.one;\r\n const menuLevelSupportClassName =\r\n isCategoryImageDisplay &&\r\n this.props.navProps.config.menuLevelSupport &&\r\n this.props.navProps.config.menuLevelSupport > NavMenuConstants.two &&\r\n 'navmenu-multi-level';\r\n\r\n const categoryImages = this.state.categoryImage?.filter(image => !StringExtensions.isNullOrWhitespace(image.src));\r\n const imagesContainerKey = categoryImages?.map(item => item.src).join('-');\r\n return (\r\n \r\n \r\n {menuOptions}\r\n \r\n
\r\n {isCategoryImageDisplay &&\r\n ArrayExtensions.hasElements(categoryImages) &&\r\n categoryImages.map(item => (\r\n \r\n {getCategoryImage(this.props, item.src ?? '', item.altText!.toString())}\r\n {isPromotionalContentDisplay &&\r\n this._renderPromotionalLink(item.altText, item.additionalProperties?.linkUrl)}\r\n \r\n ))}\r\n
\r\n \r\n );\r\n }\r\n\r\n /**\r\n * Handle Category image update.\r\n * @param categoryImageSource - Image source.\r\n * @param option - Menu Item data.\r\n * @returns Returns empty.\r\n */\r\n private readonly _updateCategoryImage = (categoryImageSource: string, option: IMenuItemData) => () => {\r\n const linkText = option.linkText ? option.linkText : '';\r\n const promotionalImage: Msdyn365.IImageData[] = [{ src: categoryImageSource, altText: linkText }];\r\n\r\n // Read category and promotional image in one array\r\n if (ArrayExtensions.hasElements(option.promotionalContent)) {\r\n for (const item of option.promotionalContent) {\r\n const imageSource = item.image.src;\r\n promotionalImage.push({\r\n src: imageSource,\r\n altText: item.text,\r\n additionalProperties: { linkUrl: item.linkUrl.destinationUrl }\r\n });\r\n }\r\n }\r\n this.setState({\r\n categoryImage: ArrayExtensions.hasElements(promotionalImage) ? promotionalImage : [{ src: 'empty' }]\r\n });\r\n };\r\n\r\n /**\r\n * Handle dropdown toggle.\r\n * @param data - Menu Item data.\r\n * @param parentId - Number.\r\n * @returns Returns empty.\r\n */\r\n private readonly _handleDropdownToggle = (data: IMenuItemData, parentId?: number) => () => {\r\n if (!this.state.isOnlyMobile) {\r\n this.setState({\r\n activeMenu: data.id,\r\n parentMenu: parentId\r\n });\r\n if (this.props.navProps.showCategoryImage) {\r\n this._updateCategoryImage(data.imageSource!, data)();\r\n }\r\n } else {\r\n NavigationMenuRootDisabled.isBackTrack = false;\r\n this.setState({\r\n activeMenu: data.id,\r\n mobileViewLabelText: data.linkText!,\r\n parentMenu: parentId\r\n });\r\n }\r\n };\r\n\r\n /**\r\n * Handle back navigation for menu items for mobile view.\r\n * @returns Returns empty.\r\n */\r\n private readonly _handleGoBack = () => () => {\r\n NavigationMenuRootDisabled.isBackTrack = true;\r\n this.setState(previousState => ({ activeMenu: previousState.parentMenu }));\r\n };\r\n\r\n /**\r\n * Function to close the nav menu on click on body.\r\n * @param event - MouseEvent.\r\n */\r\n private readonly _handleClickOutside = (event: MouseEvent) => {\r\n if (this.menuNode.current && !this.menuNode.current.contains(event.target as Node)) {\r\n if (!this.state.isOnlyMobile) {\r\n this.setState({ activeMenu: 1, mobileViewLabelText: '', isNavOpen: false });\r\n } else {\r\n this.setState({ activeMenu: undefined, mobileViewLabelText: '', isNavOpen: false });\r\n }\r\n }\r\n };\r\n\r\n /**\r\n * Checks to assign a ref for focus.\r\n * @param index -Sub menu list index.\r\n * @param mobileViewLabelText -Mobile view label text.\r\n * @param optionLinkText -Sub menu item link text.\r\n * @returns Boolean.\r\n */\r\n private readonly _shouldAddFocusMenuRef = (index: number, mobileViewLabelText?: string, optionLinkText?: string) => {\r\n const firstIndex: number = 0;\r\n if (!NavigationMenuRootDisabled.isBackTrack && index === firstIndex) {\r\n return true;\r\n }\r\n if (!optionLinkText || !mobileViewLabelText) {\r\n return false;\r\n }\r\n return mobileViewLabelText === optionLinkText;\r\n };\r\n\r\n /**\r\n * Function to handle nav menu close.\r\n */\r\n private readonly _closeNavMenu = (): void => {\r\n if (!this.state.isOnlyMobile) {\r\n this.setState({ activeMenu: 1, mobileViewLabelText: '', isNavOpen: false });\r\n } else {\r\n this.setState({ activeMenu: undefined, mobileViewLabelText: '', isNavOpen: false });\r\n }\r\n (this.menuNode.current?.children[0] as HTMLElement).focus();\r\n };\r\n\r\n /**\r\n * Function to close the nav menu on esc key.\r\n * @param event - Event.\r\n */\r\n private readonly _escFunction = (event: React.KeyboardEvent) => {\r\n if (event.keyCode === this.escapeKey && !this.state.isOnlyMobile && this.state.isNavOpen) {\r\n this.setState({ activeMenu: 1, mobileViewLabelText: '', isNavOpen: false });\r\n (this.menuNode.current?.children[0] as HTMLElement).focus();\r\n }\r\n };\r\n\r\n /**\r\n * Custom update viewport.\r\n */\r\n private readonly _customUpdateViewport = (): void => {\r\n this.setState({ isOnlyMobile: this.isOnlyMobile });\r\n };\r\n}\r\n\r\nexport default NavigationMenuRootDisabled;\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\nimport { IMenuItemData, MenuSource, MenuTypeIndexId } from '@msdyn365-commerce-modules/navigation-menu';\r\nimport { ArrayExtensions, StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\r\nimport {\r\n addThrottledEvent,\r\n Button,\r\n Collapse,\r\n Drawer,\r\n getPayloadObject,\r\n getTelemetryAttributes,\r\n getTelemetryObject,\r\n ICollapseProps,\r\n IPayLoad,\r\n isMobile,\r\n ITelemetryContent,\r\n Module,\r\n Node,\r\n onTelemetryClick,\r\n VariantType\r\n} from '@msdyn365-commerce-modules/utilities';\r\nimport classnames from 'classnames';\r\nimport { computed } from 'mobx';\r\nimport * as React from 'react';\r\n\r\nimport { getCategoryImage, INosNavigationMenuViewRootProps, INavigationState, NavMenuConstants } from './navigation-menu-utilities';\r\n\r\n/**\r\n *\r\n * NavigationMenuRootEnabled component.\r\n * @extends {React.PureComponent}\r\n */\r\nexport class NavigationMenuRootEnabled extends React.PureComponent {\r\n private static isBackTrack: boolean = false;\r\n\r\n private readonly supportedLevel: number = NavMenuConstants.four;\r\n\r\n private currentLevel: number = NavMenuConstants.zero;\r\n\r\n private readonly menuNode: React.RefObject;\r\n\r\n private readonly menuItemRef: React.RefObject;\r\n\r\n private readonly escapeKey: number = NavMenuConstants.escapeKey;\r\n\r\n private readonly telemetryContent: ITelemetryContent;\r\n\r\n private readonly promotionalImage: Msdyn365.IImageData[] = [];\r\n\r\n private menuItemData: IMenuItemData[] = [];\r\n\r\n private readonly payLoad: IPayLoad;\r\n\r\n private readonly attributes?: Msdyn365.IDictionary;\r\n\r\n private customResizeThrottledEventHandler?: (event: Event) => void;\r\n\r\n public constructor(props: INosNavigationMenuViewRootProps) {\r\n super(props);\r\n this.menuNode = React.createRef();\r\n this.menuItemRef = React.createRef();\r\n const { menuItemData } = this.props.navProps;\r\n if (ArrayExtensions.hasElements(menuItemData) && ArrayExtensions.hasElements(menuItemData[0].subMenu)) {\r\n const imagesource = menuItemData[0].subMenu[0].imageSource ? menuItemData[0].subMenu[0].imageSource : '';\r\n const linkText = menuItemData[0].subMenu[0].linkText ? menuItemData[0].subMenu[0].linkText : '';\r\n this.promotionalImage = [{ src: imagesource, altText: linkText }];\r\n\r\n // Read category and promotional image in one array\r\n if (ArrayExtensions.hasElements(menuItemData[0].subMenu[0].promotionalContent)) {\r\n menuItemData[0].subMenu[0].promotionalContent.map(item => {\r\n const imageSource = item.image.src;\r\n this.promotionalImage.push({\r\n src: imageSource,\r\n altText: item.text,\r\n additionalProperties: { linkUrl: item.linkUrl.destinationUrl }\r\n });\r\n return null;\r\n });\r\n }\r\n }\r\n this.state = {\r\n activeMenu: NavMenuConstants.rootMenu,\r\n mobileViewLabelText: '',\r\n parentMenu: undefined,\r\n drawerKeyValue: {},\r\n isOnlyMobile: this.isOnlyMobile,\r\n categoryImage: this.promotionalImage,\r\n isNavOpen: false\r\n };\r\n\r\n this.telemetryContent = getTelemetryObject(\r\n this.props.navProps.context.request.telemetryPageName!,\r\n this.props.navProps.friendlyName,\r\n this.props.navProps.telemetry\r\n );\r\n this.payLoad = getPayloadObject('click', this.telemetryContent, '', '');\r\n this.attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\r\n }\r\n\r\n @computed public get isOnlyMobile(): boolean {\r\n return isMobile({ variant: VariantType.Browser, context: this.props.navProps.context.request }) === 'xs';\r\n }\r\n\r\n public componentDidMount(): void {\r\n this.customResizeThrottledEventHandler = addThrottledEvent(window, 'resize', this._customUpdateViewport as EventListener);\r\n document.addEventListener('keydown', (this._escFunction as unknown) as EventListener, false);\r\n this._customUpdateViewport();\r\n document.body.addEventListener('mousedown', this._handleClickOutside);\r\n this._addShopAllLink();\r\n }\r\n\r\n public componentDidUpdate(): void {\r\n if (this.menuItemRef.current?.children[0] && this.props.navProps.isMobileView) {\r\n (this.menuItemRef.current.children[0] as HTMLElement).focus();\r\n }\r\n }\r\n\r\n public componentWillUnmount(): void {\r\n window.removeEventListener('resize', this.customResizeThrottledEventHandler!, false);\r\n document.body.removeEventListener('mousedown', this._handleClickOutside, false);\r\n }\r\n\r\n public render(): JSX.Element | null {\r\n this.currentLevel = NavMenuConstants.one;\r\n const navbarKey = 'header-nav-mobile';\r\n return (\r\n \r\n {this.state.isOnlyMobile ? (\r\n this._renderMobileMenu()\r\n ) : (\r\n <>\r\n \r\n {this._renderCollapseMenu()}\r\n \r\n )}\r\n \r\n );\r\n }\r\n\r\n /**\r\n * Function to handle nav bar toggle.\r\n */\r\n private readonly _toggleNavBar = (): void => {\r\n this.setState(previousState => ({\r\n activeMenu: NavMenuConstants.rootMenu,\r\n isNavOpen: !previousState.isNavOpen\r\n }));\r\n };\r\n\r\n private _renderCollapseMenu(): JSX.Element | null {\r\n return (\r\n \r\n {this.state.isOnlyMobile ? this._renderMobileMenu() : this._renderDesktopMenu()}\r\n \r\n );\r\n }\r\n\r\n private _renderMobileMenu(): JSX.Element {\r\n const { MobileBackButton, MobileDescriptionContainer, MobileDescriptionLabel, Navigation } = this.props.navProps;\r\n\r\n this.currentLevel = NavMenuConstants.one;\r\n return (\r\n \r\n \r\n {this.state.isOnlyMobile && this.state.activeMenu !== undefined && (\r\n \r\n \r\n {this.state.mobileViewLabelText}\r\n \r\n )}\r\n {this._renderDisplay()}\r\n \r\n \r\n );\r\n }\r\n\r\n private _renderDesktopMenu(): JSX.Element {\r\n const { Navigation } = this.props.navProps;\r\n return (\r\n \r\n \r\n {this._renderDisplay()}\r\n
\r\n
\r\n
\r\n
\r\n );\r\n }\r\n\r\n private _renderDrawerLink(item: IMenuItemData): JSX.Element | null {\r\n if (item.linkURL && !StringExtensions.isNullOrWhitespace(item.linkURL)) {\r\n return this._renderLinkMenuItem(item);\r\n } else if (!item.linkURL) {\r\n return this._renderSpanMenuItem(item);\r\n }\r\n return null;\r\n }\r\n\r\n private _renderDisplay(): JSX.Element[] {\r\n const { ListItem } = this.props.navProps;\r\n let menuItemData: IMenuItemData[] = [];\r\n if (this.state.isOnlyMobile) {\r\n menuItemData = this.menuItemData;\r\n } else {\r\n menuItemData = this.props.navProps.menuItemData;\r\n }\r\n const { activeMenu } = this.state;\r\n const menuItemList: JSX.Element[] = [];\r\n let cmsMenuData: IMenuItemData[] | undefined = [];\r\n let retailMenuItemData: IMenuItemData[] | undefined = [];\r\n const retailMenuData = JSON.parse(JSON.stringify(menuItemData)) as IMenuItemData[];\r\n\r\n for (const item of retailMenuData) {\r\n retailMenuItemData = item.subMenu!.filter(subMenuItem => subMenuItem.id && subMenuItem.id >= MenuTypeIndexId.Retail);\r\n item.subMenu = retailMenuItemData;\r\n }\r\n\r\n for (const item of menuItemData) {\r\n cmsMenuData = item.subMenu!.filter(subMenuItem => subMenuItem.id && subMenuItem.id < MenuTypeIndexId.Retail);\r\n }\r\n\r\n if (this.state.isOnlyMobile && activeMenu !== undefined && ArrayExtensions.hasElements(menuItemData)) {\r\n let menuItem: IMenuItemData | null = {};\r\n for (const menuItemDatum of menuItemData) {\r\n if (menuItemDatum.id === activeMenu) {\r\n menuItem = menuItemDatum;\r\n if (!NavigationMenuRootEnabled.isBackTrack) {\r\n this.setState({\r\n parentMenu: undefined\r\n });\r\n } else {\r\n this.setState({\r\n parentMenu: undefined,\r\n mobileViewLabelText: menuItemDatum.linkText\r\n });\r\n }\r\n break;\r\n }\r\n menuItem = this._getFromSubMenu(menuItemDatum);\r\n if (menuItem && menuItem.id === activeMenu) {\r\n break;\r\n }\r\n }\r\n\r\n if (menuItem) {\r\n menuItemList.push(\r\n \r\n {` `}\r\n {this._createMenuItemList(menuItem)} {` `}\r\n \r\n );\r\n }\r\n } else {\r\n for (const [index, item] of retailMenuData.entries()) {\r\n menuItemList.push(\r\n \r\n {this._createMenuItemList(item)}\r\n
\r\n );\r\n }\r\n\r\n for (const [index, item] of cmsMenuData.entries()) {\r\n menuItemList.push(\r\n \r\n {this._createMenuItemList(item)}\r\n \r\n );\r\n }\r\n }\r\n\r\n return menuItemList;\r\n }\r\n\r\n private _getFromSubMenu(item?: IMenuItemData): IMenuItemData | null {\r\n const subMenus = item?.subMenu;\r\n if (subMenus && ArrayExtensions.hasElements(subMenus)) {\r\n for (let index = 0; index <= subMenus.length - NavMenuConstants.one; index++) {\r\n const subMenu: IMenuItemData = subMenus[Number(index)];\r\n let parentMenuId = item?.id;\r\n\r\n if (subMenu.id === this.state.activeMenu) {\r\n if (parentMenuId === NavMenuConstants.rootMenu && subMenu.id! < MenuTypeIndexId.Retail) {\r\n parentMenuId = undefined;\r\n }\r\n\r\n if (!NavigationMenuRootEnabled.isBackTrack) {\r\n this.setState({ parentMenu: parentMenuId });\r\n } else {\r\n this.setState({ parentMenu: parentMenuId, mobileViewLabelText: subMenu.linkText });\r\n }\r\n return subMenu;\r\n }\r\n const found = this._getFromSubMenu(subMenu);\r\n if (found) {\r\n return found;\r\n }\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n private _createMenuItemList(menuItemData: IMenuItemData): JSX.Element | null {\r\n if (ArrayExtensions.hasElements(menuItemData.subMenu)) {\r\n if (this.state.isOnlyMobile && this.state.activeMenu !== undefined) {\r\n return this._renderSubMenu(menuItemData.subMenu, menuItemData.id, false);\r\n }\r\n return (\r\n <>\r\n {this._renderButtonMenuItem(menuItemData)}\r\n {this._renderSubMenu(menuItemData.subMenu, menuItemData.id)}\r\n \r\n );\r\n } else if (menuItemData.linkURL && !StringExtensions.isNullOrWhitespace(menuItemData.linkURL)) {\r\n return this._renderLinkMenuItem(menuItemData, menuItemData.id);\r\n } else if (!menuItemData.linkURL) {\r\n return this._renderSpanMenuItem(menuItemData);\r\n }\r\n\r\n return null;\r\n }\r\n\r\n private _renderSubMenu(subMenuArray?: IMenuItemData[], activeMenu?: number, isSubMenu?: boolean): JSX.Element | null {\r\n let subMenus: IMenuItemData[] | undefined = subMenuArray;\r\n if (activeMenu === NavMenuConstants.rootMenu) {\r\n subMenus = subMenuArray!.filter(subMenuItem => subMenuItem.id && subMenuItem.id >= MenuTypeIndexId.Retail);\r\n }\r\n\r\n const { ListItem } = this.props.navProps;\r\n const isEnableMultiSupportMenu = this.props.navProps.config.enableMultilevelMenu ?? false;\r\n const multiLevelSupportedMenu = this.props.navProps.config.menuLevelSupport ?? NavMenuConstants.three;\r\n\r\n if (activeMenu && this.state.activeMenu !== activeMenu) {\r\n this.props.navProps.context.telemetry.error('Navigation Active menu content is empty, module wont render.');\r\n return null;\r\n }\r\n\r\n if (!subMenus || !ArrayExtensions.hasElements(subMenus)) {\r\n this.props.navProps.context.telemetry.error('Navigation Submenu content is empty, module wont render.');\r\n return null;\r\n }\r\n\r\n let levelClassName: string = '';\r\n const menuOptions = subMenus.map((option: IMenuItemData, index: number) => {\r\n const hasOptions = option.subMenu && ArrayExtensions.hasElements(option.subMenu);\r\n let menuItem: JSX.Element | null;\r\n if (hasOptions && this.state.isOnlyMobile) {\r\n menuItem = this._renderButtonMenuItem(option, activeMenu, index);\r\n } else if (this.currentLevel === NavMenuConstants.one || !hasOptions) {\r\n menuItem = this.getMenuItem(option, index);\r\n } else {\r\n menuItem = null;\r\n }\r\n let subMenu;\r\n const isHavingSubmenu =\r\n hasOptions && isEnableMultiSupportMenu && this.currentLevel <= Math.round(multiLevelSupportedMenu) - NavMenuConstants.one;\r\n\r\n if (hasOptions && !this.state.isOnlyMobile) {\r\n if (this.currentLevel >= NavMenuConstants.two) {\r\n subMenu = this._renderSubMenuDrawer(option);\r\n } else if (this.currentLevel <= this.supportedLevel - NavMenuConstants.one) {\r\n this.currentLevel++;\r\n levelClassName = `level-${this.currentLevel.toString()}`;\r\n subMenu = this._renderSubMenu(option.subMenu, undefined, true);\r\n }\r\n }\r\n if (isHavingSubmenu && this.state.isOnlyMobile) {\r\n this.currentLevel++;\r\n levelClassName = isEnableMultiSupportMenu ? `level-${this.currentLevel.toString()}` : '';\r\n subMenu = this._renderSubMenu(option.subMenu, option.id, true);\r\n }\r\n const imagesource = option.imageSource ? option.imageSource : '';\r\n return (\r\n \r\n {menuItem}\r\n {subMenu}\r\n \r\n );\r\n });\r\n return this._renderMenu(levelClassName, menuOptions, isSubMenu);\r\n }\r\n\r\n private getMenuItem(option: IMenuItemData, index: number): JSX.Element | null {\r\n let menuItem: JSX.Element | null;\r\n if (this.currentLevel === NavMenuConstants.one) {\r\n menuItem = option.linkURL ? this._renderLinkMenuItemLevelOne(option, index) : this._renderSpanMenuItem(option);\r\n } else {\r\n menuItem = option.linkURL ? this._renderLinkMenuItem(option, index) : this._renderSpanMenuItem(option);\r\n }\r\n return menuItem;\r\n }\r\n\r\n private _renderSubMenuDrawer(menuItem: IMenuItemData): JSX.Element | null {\r\n const levelClassName = `level-${this.currentLevel.toString()}`;\r\n const toggleButtonText = menuItem.linkText;\r\n const keyValue = this.state.drawerKeyValue;\r\n const buttonText = toggleButtonText !== undefined ? toggleButtonText : '';\r\n const keys = keyValue;\r\n const multiLevelSupportedMenu = this.props.navProps.config.menuLevelSupport ?? NavMenuConstants.three;\r\n\r\n let isDrawerOpen = false;\r\n if (keys[menuItem.id!]) {\r\n isDrawerOpen = true;\r\n }\r\n const colProps: ICollapseProps = { timeout: 0, isOpen: isDrawerOpen };\r\n return (\r\n \r\n
\r\n {menuItem.subMenu!.map((menuSubItem: IMenuItemData) => {\r\n if (ArrayExtensions.hasElements(menuSubItem.subMenu)) {\r\n this.currentLevel++;\r\n if (this.currentLevel < multiLevelSupportedMenu) {\r\n return this._renderSubMenuDrawer(menuSubItem);\r\n }\r\n }\r\n return this._renderDrawerLink(menuSubItem);\r\n })}\r\n
\r\n \r\n );\r\n }\r\n\r\n /**\r\n * Method to handle escape key event.\r\n * @param menuId -Number.\r\n * @param isDrawerOpen -Boolean.\r\n * @returns Void.\r\n */\r\n private readonly _bindDesktopCategoryClick = (menuId: number | undefined, isDrawerOpen: boolean) => (): void => {\r\n const { drawerKeyValue } = this.state;\r\n const newPair = { [menuId!]: !isDrawerOpen };\r\n this.setState({ drawerKeyValue: { ...drawerKeyValue, ...newPair } });\r\n };\r\n\r\n private _renderButtonMenuItem(option: IMenuItemData, activeMenu?: number, index?: number): JSX.Element | null {\r\n return (\r\n \r\n {option.linkText}\r\n \r\n );\r\n }\r\n\r\n private _renderLinkMenuItem(option: IMenuItemData, index?: number): JSX.Element | null {\r\n const { Link } = this.props.navProps;\r\n const linkText = option.linkText ? option.linkText : '';\r\n this.payLoad.contentAction.etext = linkText;\r\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\r\n return (\r\n \r\n {option.linkText}\r\n \r\n );\r\n }\r\n\r\n private _renderLinkMenuItemLevelOne(option: IMenuItemData, index?: number, isHoverEffect: boolean = true): JSX.Element | null {\r\n const { Link } = this.props.navProps;\r\n const linkText = option.linkText ? option.linkText : '';\r\n const imagesource = option.imageSource ? option.imageSource : '';\r\n this.payLoad.contentAction.etext = linkText;\r\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\r\n return (\r\n \r\n {option.linkText}\r\n \r\n );\r\n }\r\n\r\n private _renderPromotionalLink(linkText?: string, linkUrl?: string): JSX.Element | null {\r\n const { Link } = this.props.navProps;\r\n this.payLoad.contentAction.etext = linkText;\r\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\r\n if (linkText && linkUrl) {\r\n return (\r\n \r\n {linkText}\r\n \r\n );\r\n }\r\n return null;\r\n }\r\n\r\n private _renderSpanMenuItem(option: IMenuItemData, index?: number): JSX.Element | null {\r\n const { Span } = this.props.navProps;\r\n return (\r\n \r\n {option.linkText}\r\n \r\n );\r\n }\r\n\r\n private _renderMenu(level: string, menuOptions: JSX.Element[], isSubmenu?: boolean): JSX.Element | null {\r\n const { DivContainer, ImageDivContainer, showCategoryImage, showPromotionalContent } = this.props.navProps;\r\n const isCategoryImageDisplay =\r\n !this.state.isOnlyMobile &&\r\n showCategoryImage &&\r\n this.state.categoryImage !== null &&\r\n this.state.categoryImage !== undefined &&\r\n !isSubmenu;\r\n const isPromotionalContentDisplay =\r\n !this.state.isOnlyMobile && showPromotionalContent && ArrayExtensions.hasElements(this.state.categoryImage) && !isSubmenu;\r\n const divContainerClass =\r\n this.currentLevel > NavMenuConstants.two || isCategoryImageDisplay ? DivContainer!.className : 'ms-nav__deafult';\r\n this.currentLevel = NavMenuConstants.one;\r\n const menuLevelSupportClassName =\r\n isCategoryImageDisplay &&\r\n this.props.navProps.config.menuLevelSupport &&\r\n this.props.navProps.config.menuLevelSupport > NavMenuConstants.two &&\r\n 'navmenu-multi-level';\r\n\r\n const categoryImages = this.state.categoryImage?.filter(image => !StringExtensions.isNullOrWhitespace(image.src));\r\n const imagesContainerKey = categoryImages?.map(item => item.src).join('-');\r\n return (\r\n \r\n \r\n {menuOptions}\r\n \r\n
\r\n {isCategoryImageDisplay &&\r\n ArrayExtensions.hasElements(categoryImages) &&\r\n categoryImages.map(item => (\r\n \r\n {getCategoryImage(this.props, item.src ?? '', item.altText!.toString())}\r\n {isPromotionalContentDisplay &&\r\n this._renderPromotionalLink(item.altText, item.additionalProperties?.linkUrl)}\r\n \r\n ))}\r\n
\r\n \r\n );\r\n }\r\n\r\n /**\r\n * Handle Category image update.\r\n * @param categoryImageSource - Image source.\r\n * @param option - Menu Item data.\r\n * @returns Returns empty.\r\n */\r\n private readonly _updateCategoryImage = (categoryImageSource: string, option: IMenuItemData) => () => {\r\n const linkText = option.linkText ? option.linkText : '';\r\n const promotionalImage: Msdyn365.IImageData[] = [{ src: categoryImageSource, altText: linkText }];\r\n\r\n // Read category and promotional image in one array\r\n if (ArrayExtensions.hasElements(option.promotionalContent)) {\r\n for (const item of option.promotionalContent) {\r\n const imageSource = item.image.src;\r\n promotionalImage.push({\r\n src: imageSource,\r\n altText: item.text,\r\n additionalProperties: { linkUrl: item.linkUrl.destinationUrl }\r\n });\r\n }\r\n }\r\n this.setState({\r\n categoryImage: ArrayExtensions.hasElements(promotionalImage) ? promotionalImage : [{ src: 'empty' }]\r\n });\r\n };\r\n\r\n /**\r\n * Handle dropdown toggle.\r\n * @param data - Menu Item data.\r\n * @param parentId - Number.\r\n * @returns Returns empty.\r\n */\r\n private readonly _handleDropdownToggle = (data: IMenuItemData, parentId?: number) => () => {\r\n if (!this.state.isOnlyMobile) {\r\n this.setState({\r\n activeMenu: data.id,\r\n parentMenu: parentId\r\n });\r\n if (this.props.navProps.showCategoryImage) {\r\n this._updateCategoryImage(data.imageSource!, data)();\r\n }\r\n } else {\r\n NavigationMenuRootEnabled.isBackTrack = false;\r\n this.setState({\r\n activeMenu: data.id,\r\n mobileViewLabelText: data.linkText!,\r\n parentMenu: parentId\r\n });\r\n }\r\n };\r\n\r\n /**\r\n * Handle back navigation for menu items for mobile view.\r\n * @returns Returns empty.\r\n */\r\n private readonly _handleGoBack = () => () => {\r\n NavigationMenuRootEnabled.isBackTrack = true;\r\n this.setState(previousState => ({ activeMenu: previousState.parentMenu }));\r\n };\r\n\r\n /**\r\n * Function to close the nav menu on click on body.\r\n * @param event - MouseEvent.\r\n */\r\n private readonly _handleClickOutside = (event: MouseEvent) => {\r\n if (this.menuNode.current && !this.menuNode.current.contains(event.target as Node)) {\r\n if (!this.state.isOnlyMobile) {\r\n this.setState({ activeMenu: NavMenuConstants.rootMenu, mobileViewLabelText: '', isNavOpen: false });\r\n } else {\r\n this.setState({ activeMenu: undefined, mobileViewLabelText: '', isNavOpen: false });\r\n }\r\n }\r\n };\r\n\r\n /**\r\n * Add shop all link for Mobile submenu.\r\n */\r\n private readonly _addShopAllLink = (): void => {\r\n const { menuItemData } = this.props.navProps;\r\n this.menuItemData = menuItemData;\r\n if (ArrayExtensions.hasElements(menuItemData) && ArrayExtensions.hasElements(menuItemData[0].subMenu)) {\r\n this.menuItemData[0].subMenu?.map(item => {\r\n const shopAllObject = {};\r\n Object.assign(shopAllObject, { imageSource: item.imageSource });\r\n Object.assign(shopAllObject, { linkText: this.props.navProps.resources.allCategoryMenuText });\r\n Object.assign(shopAllObject, { linkURL: item.linkURL });\r\n if (ArrayExtensions.hasElements(item.subMenu) && item.menuSource === MenuSource.Retail) {\r\n item.subMenu.unshift(shopAllObject);\r\n }\r\n return item;\r\n });\r\n }\r\n };\r\n\r\n /**\r\n * Checks to assign a ref for focus.\r\n * @param index -Sub menu list index.\r\n * @param mobileViewLabelText -Mobile view label text.\r\n * @param optionLinkText -Sub menu item link text.\r\n * @returns Boolean.\r\n */\r\n private readonly _shouldAddFocusMenuRef = (index: number, mobileViewLabelText?: string, optionLinkText?: string) => {\r\n const firstIndex: number = 0;\r\n if (!NavigationMenuRootEnabled.isBackTrack && index === firstIndex) {\r\n return true;\r\n }\r\n if (!optionLinkText || !mobileViewLabelText) {\r\n return false;\r\n }\r\n return mobileViewLabelText === optionLinkText;\r\n };\r\n\r\n /**\r\n * Function to handle nav menu close.\r\n */\r\n private readonly _closeNavMenu = (): void => {\r\n if (!this.state.isOnlyMobile) {\r\n this.setState({ activeMenu: NavMenuConstants.rootMenu, mobileViewLabelText: '', isNavOpen: false });\r\n } else {\r\n this.setState({ activeMenu: undefined, mobileViewLabelText: '', isNavOpen: false });\r\n }\r\n };\r\n\r\n /**\r\n * Function to close the nav menu on esc key.\r\n * @param event - Event.\r\n */\r\n private readonly _escFunction = (event: React.KeyboardEvent) => {\r\n if (event.keyCode === this.escapeKey && !this.state.isOnlyMobile && this.state.isNavOpen) {\r\n this.setState({ activeMenu: NavMenuConstants.rootMenu, mobileViewLabelText: '', isNavOpen: false });\r\n }\r\n };\r\n\r\n /**\r\n * Custom update viewport.\r\n */\r\n private readonly _customUpdateViewport = (): void => {\r\n this.setState({ isOnlyMobile: this.isOnlyMobile });\r\n };\r\n}\r\n\r\nexport default NavigationMenuRootEnabled;\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\nimport { INavigationMenuViewProps } from '@msdyn365-commerce-modules/navigation-menu';\r\nimport * as React from 'react';\r\n\r\nimport { INavigationMenuProps } from '../definition-extensions/navigation-menu.ext.props.autogenerated';\r\nimport NavigationMenuRootDisabled from './components/navigation-menu-root-disabled';\r\nimport NavigationMenuRootEnabled from './components/navigation-menu-root-enabled';\r\n\r\n/**\r\n * Render the Navigation menu.\r\n * @param props - The navigation menu view props.\r\n * @returns Return HTML having INavigationMenuViewProps props with navigation menu.\r\n */\r\nconst navigationMenuView = (props: INavigationMenuViewProps & INavigationMenuProps<{}>): JSX.Element => {\r\n if (props.config.enabletopMenu) {\r\n return ;\r\n }\r\n\r\n return ;\r\n};\r\n\r\nexport default navigationMenuView;\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\n/**\r\n * Regular expressions to validate emails.\r\n */\r\n// eslint-disable-next-line @typescript-eslint/no-extraneous-class\r\nexport abstract class EmailRegex {\r\n /**\r\n * Represents a HTML5 Validation Regex.\r\n *\r\n * A valid email address is a string that matches the email production of the following ABNF, the character set for which is Unicode.\r\n * This ABNF implements the extensions described in RFC 1123.\r\n *\r\n * For more info: https://html.spec.whatwg.org/multipage/input.html#valid-e-mail-address.\r\n */\r\n // eslint-disable-next-line security/detect-unsafe-regex\r\n public static readonly html5EmailRegex = /^[a-zA-Z0-9.!#$%&'*+=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+$/;\r\n\r\n /**\r\n * Returns a default regex which should be used for most email validation cases.\r\n *\r\n * As of now, the default regex is HTML5 email regex standard.\r\n * @see EmailRegex.html5EmailRegex - The regex which is set to be default right now.\r\n *\r\n * @returns Regular expression for email validation.\r\n */\r\n public static get defaultRegex(): RegExp {\r\n return EmailRegex.html5EmailRegex;\r\n }\r\n}\r\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport React from 'react';\n\nexport const SignUpText: React.FC<{ text: string }> = (props: { text: string }) => {\n return

{props.text}

;\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport MsDyn365, * as Msdyn365 from '@msdyn365-commerce/core';\nimport { issueLoyalty, IssueLoyaltyInput } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n Button,\n getPayloadObject,\n getTelemetryAttributes,\n getTelemetryObject,\n IModuleProps,\n ITelemetryContent,\n TelemetryConstant\n} from '@msdyn365-commerce-modules/utilities';\nimport classname from 'classnames';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { SignUpText } from './components/loyalty-sign-up-small-components';\nimport { ILoyaltySignUpData } from './loyalty-sign-up.data';\nimport { ILoyaltySignUpProps } from './loyalty-sign-up.props.autogenerated';\n\nexport interface IAccountLoyaltyJoinState {\n clicked: boolean;\n}\nexport interface ILoyaltySignUpViewProps extends ILoyaltySignUpProps {\n LoyaltySignUp: IModuleProps;\n heading: React.ReactNode;\n memberHeading: React.ReactNode;\n signInLink: React.ReactElement;\n signUpText: React.ReactElement;\n signUpButton: React.ReactElement;\n detailsLink: React.ReactElement;\n termsLink: React.ReactElement;\n loading: boolean;\n infoMessageBar?: React.ReactNode;\n}\n\n/**\n *\n * LoyaltySignUp component.\n * @extends {React.Component>}\n */\n@observer\nclass LoyaltySignUp extends React.Component, IAccountLoyaltyJoinState> {\n private readonly telemetryContent?: ITelemetryContent;\n private readonly loyaltySignInAttributes: Msdyn365.IDictionary | undefined;\n private readonly loyaltySignUpAttributes: Msdyn365.IDictionary | undefined;\n private readonly loyaltyDetailsLinkAttributes: Msdyn365.IDictionary | undefined;\n private readonly loyaltyTermsLinkAttributes: Msdyn365.IDictionary | undefined;\n\n constructor(props: ILoyaltySignUpProps) {\n super(props);\n this.state = { clicked: false };\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n const payLoad = getPayloadObject('click', this.telemetryContent, TelemetryConstant.SignIn);\n this.loyaltySignInAttributes = getTelemetryAttributes(this.telemetryContent, payLoad);\n payLoad.contentAction.etext = TelemetryConstant.SignUp;\n this.loyaltySignUpAttributes = getTelemetryAttributes(this.telemetryContent, payLoad);\n payLoad.contentAction.etext = TelemetryConstant.LoyaltyDetailLink;\n this.loyaltyDetailsLinkAttributes = getTelemetryAttributes(this.telemetryContent, payLoad);\n payLoad.contentAction.etext = TelemetryConstant.LoyaltyTermsLink;\n this.loyaltyTermsLinkAttributes = getTelemetryAttributes(this.telemetryContent, payLoad);\n }\n\n public shouldComponentUpdate(nextProps: ILoyaltySignUpProps, nextState: IAccountLoyaltyJoinState): boolean {\n if (this.state === nextState && this.props.data === nextProps.data) {\n return false;\n }\n return true;\n }\n\n public render(): JSX.Element | null {\n const {\n config: { className, heading, memberHeading },\n resources,\n context: {\n actionContext,\n request: {\n user: { signInUrl, isAuthenticated }\n }\n },\n data\n } = this.props;\n\n const termsUrl = Msdyn365.getUrlSync('loyaltyTerms', actionContext);\n let loyaltyJoinUrl = `${Msdyn365.getUrlSync('loyaltyJoin', actionContext)}?joiningLoyalty=true`;\n if (MsDyn365.isBrowser) {\n loyaltyJoinUrl = `${window.location.origin}${loyaltyJoinUrl}`;\n }\n const signInurl = `${signInUrl}?ru=${loyaltyJoinUrl}`;\n const completeClass = classname('ms-loyalty-signup', className);\n const loyaltyCard = data.loyaltyCard;\n const hasLoyaltyAccount = loyaltyCard.result && loyaltyCard.result.CardTenderTypeValue !== undefined;\n const customerInformation = data.customerInformation?.result;\n\n const invalidAsyncCustomerState: boolean =\n (this.props.context.app?.config?.canRenderAsyncCustomerDataAsUnmodifiable || false) &&\n (customerInformation?.IsAsyncCustomer || false);\n const viewProps = {\n ...this.props,\n className: completeClass,\n LoyaltySignUp: {\n moduleProps: this.props,\n className: completeClass\n },\n infoMessageBar: invalidAsyncCustomerState && (\n \n ),\n loading: !this.props.context.request.params.isEditor && loyaltyCard?.status === 'LOADING',\n heading: !hasLoyaltyAccount && heading && heading.text && (\n \n ),\n memberHeading: hasLoyaltyAccount && memberHeading && memberHeading.text && (\n \n ),\n signInLink: !isAuthenticated && (\n \n ),\n signUpText: !hasLoyaltyAccount && ,\n signUpButton: !hasLoyaltyAccount && isAuthenticated && (\n \n {this.props.resources.joinLoyaltyButtonText}\n \n ),\n detailsLink: hasLoyaltyAccount && (\n \n {this.props.resources.viewLoyaltyPageText}\n \n ),\n termsLink: !hasLoyaltyAccount && (\n \n )\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n public handleHeadingChange = (event: Msdyn365.ContentEditableEvent) => (this.props.config.heading!.text = event.target.value);\n\n public handleMemberHeadingChange = (event: Msdyn365.ContentEditableEvent) =>\n (this.props.config.memberHeading!.text = event.target.value);\n\n private readonly _issueLoyalty = () => {\n if (this.props.context.request.user.isAuthenticated && !this.state.clicked) {\n this.setState({ clicked: true });\n const input = new IssueLoyaltyInput(this.props.context.request.apiSettings);\n\n issueLoyalty(input, this.props.context.actionContext)\n .then(() => {\n if (MsDyn365.isBrowser) {\n window.location.assign(Msdyn365.getUrlSync('loyalty', this.props.context.actionContext) || '');\n }\n })\n .catch((error: Error) => {\n this.setState({ clicked: false });\n this.props.telemetry.error(error.message);\n this.props.telemetry.debug('Unable to issue loyalty card');\n });\n }\n };\n}\n\nexport default LoyaltySignUp;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Module } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ILoyaltySignUpViewProps } from './loyalty-sign-up';\n\nconst LoyaltySignUpView: React.FC = props => {\n const {\n LoyaltySignUp,\n heading,\n memberHeading,\n signInLink,\n signUpText,\n signUpButton,\n detailsLink,\n termsLink,\n loading,\n infoMessageBar\n } = props;\n\n if (loading) {\n props.context.telemetry.error('LoyaltySignUp data is empty, module wont render');\n return null;\n }\n\n return (\n \n {infoMessageBar}\n {memberHeading}\n {heading}\n {detailsLink}\n {signUpText}\n {termsLink}\n {signUpButton}\n {signInLink}\n \n );\n};\n\nexport default LoyaltySignUpView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport {\n Button,\n getPayloadObject,\n getTelemetryAttributes,\n INodeProps,\n ITelemetryContent,\n Modal,\n ModalBody,\n ModalFooter,\n ModalHeader,\n TelemetryConstant\n} from '@msdyn365-commerce-modules/utilities';\nimport React from 'react';\n\nexport interface ILoyaltyTermsModalProps {\n resources: ILoyaltyTermsModalResources;\n returnRef: React.RefObject | undefined;\n checked: boolean;\n isOpen: boolean;\n terms: React.ReactNode;\n telemetryContent?: ITelemetryContent;\n onToggle(): void;\n onSubmit(): void;\n onCheck(): void;\n}\n\nexport interface ILoyaltyTermsModalResources {\n loyaltyTermsHeading: string;\n loyaltyAgreeToTerms: string;\n joinLoyaltyTermsText: string;\n cancelLoyaltyTermsText: string;\n}\n\nexport interface ILoyaltyTermsModalViewProps {\n modal: INodeProps;\n modalHeader: INodeProps;\n modalFooter: INodeProps;\n modalBody: INodeProps;\n heading: React.ReactElement;\n cancelButton: React.ReactElement;\n submitButton: React.ReactElement;\n terms: React.ReactNode;\n checkbox: React.ReactElement;\n agreeText: React.ReactElement;\n agreeSection: INodeProps;\n}\n\nexport const LoyaltyTermsModal = (props: ILoyaltyTermsModalProps): ILoyaltyTermsModalViewProps => {\n const payLoad = getPayloadObject('click', props.telemetryContent!, TelemetryConstant.LoyaltyTermsCancel);\n const loyaltyTermCancelAttributes = getTelemetryAttributes(props.telemetryContent!, payLoad);\n payLoad.contentAction.etext = TelemetryConstant.LoyaltyTermsSubmit;\n const loyaltyTermSubmitAttributes = getTelemetryAttributes(props.telemetryContent!, payLoad);\n payLoad.contentAction.etext = TelemetryConstant.LoyaltyTermsAgree;\n const loyaltyTermCheckboxAttributes = getTelemetryAttributes(props.telemetryContent!, payLoad);\n return {\n modal: {\n tag: Modal,\n className: 'ms-loyalty-terms__modal',\n toggle: props.onToggle,\n applicationNode: 'renderPage',\n isOpen: props.isOpen,\n returnFocusRef: props.returnRef\n },\n modalHeader: { tag: ModalHeader, className: 'ms-loyalty-terms__modal-header', toggle: props.onToggle },\n modalFooter: { tag: ModalFooter, className: 'ms-loyalty-terms__modal-footer' },\n modalBody: { tag: ModalBody, className: 'ms-loyalty-terms__modal-body' },\n cancelButton: (\n \n ),\n submitButton: (\n \n {props.resources.joinLoyaltyTermsText}\n \n ),\n heading:

{props.resources.loyaltyTermsHeading}

,\n terms: props.terms,\n agreeSection: { className: 'ms-loyalty-terms__agree-section' },\n checkbox: (\n \n ),\n agreeText:

{props.resources.loyaltyAgreeToTerms}

\n };\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { getUrlSync } from '@msdyn365-commerce/core';\nimport { getLoyaltyCardAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/StoreOperationsDataActions.g';\nimport { GetLoyaltyCardInput, issueLoyalty, IssueLoyaltyInput } from '@msdyn365-commerce-modules/retail-actions';\nimport { Button, getTelemetryObject, IModuleProps, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport classname from 'classnames';\nimport * as React from 'react';\n\nimport { ILoyaltyTermsModalViewProps, LoyaltyTermsModal } from './components/loyalty-terms-modal';\nimport { ILoyaltyTermsData } from './loyalty-terms.data';\nimport { ILoyaltyTermsProps } from './loyalty-terms.props.autogenerated';\n\nexport interface ILoyaltyTermsState {\n checked: boolean;\n clicked: boolean;\n isModalOpen: boolean;\n}\nexport interface ILoyaltyTermsViewProps extends ILoyaltyTermsProps {\n LoyaltyTerms: IModuleProps;\n modalToggle: React.ReactElement;\n modal: ILoyaltyTermsModalViewProps;\n loading: boolean;\n}\n\n/**\n *\n * LoyaltyTerms component.\n * @extends {React.Component>}\n */\nclass LoyaltyTerms extends React.Component, ILoyaltyTermsState> {\n private readonly toggleRef: React.RefObject;\n\n private readonly telemetryContent: ITelemetryContent;\n\n public constructor(props: ILoyaltyTermsProps) {\n super(props);\n this._toggle = this._toggle.bind(this);\n this._submit = this._submit.bind(this);\n this._checkboxChecked = this._checkboxChecked.bind(this);\n this.toggleRef = React.createRef();\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n let search = this.props.context.request.url.requestUrl.search;\n let isJoining = false;\n if (search) {\n search = search.substring(1);\n const qsps = search.split('&');\n for (const qsp of qsps) {\n const splitQsp = qsp.split('=');\n isJoining = splitQsp[0] === 'joiningLoyalty' && splitQsp[1] === 'true';\n if (isJoining) {\n break;\n }\n }\n }\n\n this.state = {\n isModalOpen: isJoining,\n checked: false,\n clicked: false\n };\n }\n\n public shouldComponentUpdate(nextProps: ILoyaltyTermsProps, nextState: ILoyaltyTermsState): boolean {\n if (this.state === nextState && this.props.data === nextProps.data) {\n return false;\n }\n return true;\n }\n\n public render(): JSX.Element | null {\n const {\n config: { className, hideToggle },\n resources,\n slots: { serviceTerms },\n data: { loyaltyCard },\n context: {\n request: {\n user: { isAuthenticated }\n }\n }\n } = this.props;\n const completeClass = classname('ms-loyalty-terms', className);\n\n const viewProps = {\n ...this.props,\n className: completeClass,\n LoyaltyTerms: {\n moduleProps: this.props,\n className: completeClass\n },\n loading: loyaltyCard.status === 'LOADING',\n modalToggle: hideToggle !== true && (\n \n ),\n modal:\n isAuthenticated &&\n loyaltyCard.result &&\n loyaltyCard.result.CardNumber === undefined &&\n LoyaltyTermsModal({\n resources: { ...resources },\n returnRef: this.toggleRef,\n checked: this.state.checked,\n isOpen: this.state.isModalOpen,\n terms: serviceTerms,\n telemetryContent: this.telemetryContent,\n onToggle: this._toggle,\n onSubmit: this._submit,\n onCheck: this._checkboxChecked\n })\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n private _toggle(): void {\n this.setState({ isModalOpen: !this.state.isModalOpen, checked: false });\n }\n\n private _submit(): void {\n if (this.props.context.request.user.isAuthenticated && !this.state.clicked) {\n this.setState({ clicked: true });\n const input = new IssueLoyaltyInput(this.props.context.request.apiSettings);\n\n issueLoyalty(input, this.props.context.actionContext)\n .then(card => {\n if (this.props.config.redirectToLoyalty) {\n window.location.assign(getUrlSync('loyalty', this.props.context.actionContext) || '');\n } else {\n getLoyaltyCardAsync({ callerContext: this.props.context.actionContext }, card.CardNumber || '')\n .then(fullCard => {\n this.props.context.actionContext.update(\n new GetLoyaltyCardInput(this.props.context.request.apiSettings),\n fullCard\n );\n })\n .catch((error: Error) => {\n this.props.context.actionContext.update(\n new GetLoyaltyCardInput(this.props.context.request.apiSettings),\n card\n );\n this.props.telemetry.error(error.message);\n this.props.telemetry.debug('Unable to fetch loyalty card');\n });\n }\n })\n .catch((error: Error) => {\n this.setState({ clicked: false });\n this.props.telemetry.error(error.message);\n this.props.telemetry.debug('Unable to issue loyalty card');\n });\n }\n }\n\n private _checkboxChecked(): void {\n this.setState({ checked: !this.state.checked });\n }\n}\n\nexport default LoyaltyTerms;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ILoyaltyTermsViewProps } from './loyalty-terms';\n\nconst LoyaltyTermsView: React.FC = props => {\n const { LoyaltyTerms, modalToggle, modal, loading } = props;\n\n return !loading && modal ? (\n \n {modalToggle}\n \n {modal.heading}\n \n {modal.terms}\n \n {modal.checkbox}\n {modal.agreeText}\n \n \n \n {modal.submitButton}\n {modal.cancelButton}\n \n \n \n ) : null;\n};\n\nexport default LoyaltyTermsView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as React from 'react';\nimport { isOboRequest } from '@msdyn365-commerce/core-internal';\nimport { IMsdyn365PvaChatConnectorData } from './msdyn365-pva-chat-connector.data';\nimport { IMsdyn365PvaChatConnectorConfig, IMsdyn365PvaChatConnectorProps } from './msdyn365-pva-chat-connector.props.autogenerated';\n\nexport interface IPvaChatConnectorViewProps extends IMsdyn365PvaChatConnectorProps {\n config: IMsdyn365PvaChatConnectorConfig;\n}\n\n/**\n * PvaChatConnector component\n * @extends {React.PureComponent>}\n */\nclass PvaChatConnector extends React.PureComponent> {\n // Loads CDN version of Botframework-Webchat library\n public componentDidMount(): void {\n if (isOboRequest(this.props.context.request)) {\n return;\n }\n\n const url = this.props.config.botFrameworkCDNURL || this.props.context.app.config.pvaChatConnectorBotFrameworkCDNURL;\n const script = document.createElement('script');\n script.src = url;\n script.async = true;\n script.crossOrigin = 'anonymous';\n document.body.appendChild(script);\n }\n\n public render(): JSX.Element | null {\n if (isOboRequest(this.props.context.request)) {\n return null;\n }\n\n return this.props.renderView(this.props);\n }\n}\n\nexport default PvaChatConnector;\n","// Unique ID creation requires a high quality random # generator. In the browser we therefore\n// require the crypto API and do not support built-in fallback to lower quality random number\n// generators (like Math.random()).\nvar getRandomValues;\nvar rnds8 = new Uint8Array(16);\nexport default function rng() {\n // lazy load so that environments that need to polyfill have a chance to do so\n if (!getRandomValues) {\n // getRandomValues needs to be invoked in a context where \"this\" is a Crypto implementation. Also,\n // find the complete implementation of crypto (msCrypto) on IE11.\n getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto) || typeof msCrypto !== 'undefined' && typeof msCrypto.getRandomValues === 'function' && msCrypto.getRandomValues.bind(msCrypto);\n\n if (!getRandomValues) {\n throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');\n }\n }\n\n return getRandomValues(rnds8);\n}","export default /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;","import REGEX from './regex.js';\n\nfunction validate(uuid) {\n return typeof uuid === 'string' && REGEX.test(uuid);\n}\n\nexport default validate;","import validate from './validate.js';\n/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\n\nvar byteToHex = [];\n\nfor (var i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).substr(1));\n}\n\nfunction stringify(arr) {\n var offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n // Note: Be careful editing this code! It's been tuned for performance\n // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434\n var uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one\n // of the following:\n // - One or more input array values don't map to a hex octet (leading to\n // \"undefined\" in the uuid)\n // - Invalid input values for the RFC `version` or `variant` fields\n\n if (!validate(uuid)) {\n throw TypeError('Stringified UUID is invalid');\n }\n\n return uuid;\n}\n\nexport default stringify;","import rng from './rng.js';\nimport stringify from './stringify.js';\n\nfunction v4(options, buf, offset) {\n options = options || {};\n var rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n\n rnds[6] = rnds[6] & 0x0f | 0x40;\n rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided\n\n if (buf) {\n offset = offset || 0;\n\n for (var i = 0; i < 16; ++i) {\n buf[offset + i] = rnds[i];\n }\n\n return buf;\n }\n\n return stringify(rnds);\n}\n\nexport default v4;","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IProactiveChatTrigger } from '../../interfaces';\nimport { IChatContext, TContextProvider } from '../../../interfaces';\nimport { IPvaChatConnectorViewProps } from '../../msdyn365-pva-chat-connector';\n\n/**\n * ProactiveChatTrigger class - checks if Proactive Chat should be triggered, starts the chat and sets context\n */\nabstract class ProactiveChatTrigger implements IProactiveChatTrigger {\n public props: IPvaChatConnectorViewProps;\n public context: IChatContext;\n constructor(props: IPvaChatConnectorViewProps, context: IChatContext) {\n this.props = props;\n this.context = context;\n }\n\n /**\n * Generates Chat Context with included properties related to Proactive Chat\n * @returns TContextProvider - Chat Context\n */\n public abstract getContextProvider(): TContextProvider;\n\n /**\n * Generates chat welcome message to be used if Proactive Chat is triggered\n * @returns string - chat welcome message\n */\n public abstract getMessage(): string;\n\n /**\n * Validate specific trigger conditions if Proactive Chat should be initiated\n * @returns boolean (TRUE if Proactive Chat should be triggered)\n */\n public abstract validate(): Promise;\n}\n\nexport default ProactiveChatTrigger;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\n// @ts-ignore\nimport { getCartState, ICartState } from '@msdyn365-commerce/global-state';\nimport { IChatContext, TContextProvider } from '../../../interfaces';\nimport { IPvaChatConnectorViewProps } from '../../msdyn365-pva-chat-connector';\nimport ProactiveChatTrigger from './proactive-chat-trigger';\n\n/**\n * CartAmountTrigger class - proactive chat is triggered if cArt amount is in preset boundaries (config.proactiveOnCartAmountMin, config.proactiveOnCartAmountMax)\n */\nclass CartAmountTrigger extends ProactiveChatTrigger {\n private min?: number;\n private max?: number;\n private totalInCart: number = 0;\n\n constructor(props: IPvaChatConnectorViewProps, context: IChatContext) {\n super(props, context);\n this.min = this.props.config.proactiveOnCartAmountMin;\n this.max = this.props.config.proactiveOnCartAmountMax;\n this.props.context.telemetry.debug(\n `[Chat][${CartAmountTrigger.name}] Cart amount proactive chat initialized with min: '${this.min}'; max: '${this.max}'.`\n );\n }\n\n public async validate(): Promise {\n const cart = await this._getCart();\n if (cart.isEmpty) {\n this.props.context.telemetry.debug(`[Chat][${CartAmountTrigger.name}] Cart was empty. Validation returning 'false'.`);\n return false;\n }\n\n this.totalInCart = cart.cart.TotalAmount || 0;\n let retVal = false;\n if (this.min) {\n if (this.max) {\n retVal = this.min <= this.totalInCart && this.totalInCart <= this.max;\n } else {\n retVal = this.min <= this.totalInCart;\n }\n } else {\n if (this.max) {\n retVal = this.totalInCart <= this.max;\n } else {\n retVal = false;\n }\n }\n this.props.context.telemetry.debug(\n `[Chat][${CartAmountTrigger.name}] Validation result: '${retVal}'; Cart total: '${this.totalInCart}'.`\n );\n return retVal;\n }\n\n public getContextProvider(): TContextProvider {\n return () => {\n return {\n ...this.context,\n eCommerceCustIsProactiveChat: 'True',\n eCommerceCustProactiveType: 'Cart Amount',\n eCommerceCustProactiveShoppingCartAmount: `${this.totalInCart}`\n };\n };\n }\n\n public getMessage(): string {\n // @TODO: Add message processing if needed\n return this.props.config.proactiveOnCartAmountMessage || this.props.config.proactiveDefaultMessage;\n }\n\n private async _getCart(): Promise {\n return getCartState(this.props.context.actionContext);\n }\n}\n\nexport default CartAmountTrigger;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\n// @ts-ignore\nimport { getCartState, ICartState } from '@msdyn365-commerce/global-state';\nimport { IChatContext, TContextProvider } from '../../../interfaces';\nimport { IPvaChatConnectorViewProps } from '../../msdyn365-pva-chat-connector';\nimport ProactiveChatTrigger from './proactive-chat-trigger';\n\n/**\n * CartNumberOfItemsTrigger class - proactive chat is triggered if Cart Number of Items is in preset boundaries (config.proactiveOnCartNoOfItemsMin, config.proactiveOnCartNoOfItemsMax)\n */\nclass CartNumberOfItemsTrigger extends ProactiveChatTrigger {\n private min?: number;\n private max?: number;\n private numberOfItems: number = 0;\n\n constructor(props: IPvaChatConnectorViewProps, context: IChatContext) {\n super(props, context);\n this.min = this.props.config.proactiveOnCartNoOfItemsMin;\n this.max = this.props.config.proactiveOnCartNoOfItemsMax;\n\n this.props.context.telemetry.debug(\n `[${CartNumberOfItemsTrigger.name}] Cart number of items proactive chat initialized with min: '${this.min}'; max: '${this.max}'.`\n );\n }\n\n public async validate(): Promise {\n const cart = await this._getCart();\n if (cart.isEmpty) {\n this.props.context.telemetry.debug(`[Chat][${CartNumberOfItemsTrigger.name}] Cart was empty. Validation returning 'false'.`);\n return false;\n }\n\n this.numberOfItems = cart.cart.TotalItems || 0;\n\n let retVal = false;\n if (this.min) {\n if (this.max) {\n retVal = this.min <= this.numberOfItems && this.numberOfItems <= this.max;\n } else {\n retVal = this.min <= this.numberOfItems;\n }\n } else {\n if (this.max) {\n retVal = this.numberOfItems <= this.max;\n } else {\n retVal = false;\n }\n }\n this.props.context.telemetry.debug(\n `[${CartNumberOfItemsTrigger.name}] Validation result: '${retVal}'; Number of items in cart: '${this.numberOfItems}'.`\n );\n return retVal;\n }\n\n public getContextProvider(): TContextProvider {\n return () => {\n return {\n ...this.context,\n eCommerceCustIsProactiveChat: 'True',\n eCommerceCustProactiveType: 'Cart Number of Items',\n eCommerceCustProactiveShoppingCartNumberOfItems: `${this.numberOfItems}`\n };\n };\n }\n\n public getMessage(): string {\n // @TODO: Add message processing if needed\n return this.props.config.proactiveOnCartNoOfItemsMessage || this.props.config.proactiveDefaultMessage;\n }\n\n private async _getCart(): Promise {\n return getCartState(this.props.context.actionContext);\n }\n}\n\nexport default CartNumberOfItemsTrigger;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\n// @ts-ignore\nimport { getCartState, ICartState } from '@msdyn365-commerce/global-state';\nimport { TContextProvider } from '../../../interfaces';\nimport ProactiveChatTrigger from './proactive-chat-trigger';\n\n/**\n * CartSpecificProductTrigger class - proactive chat is triggered if a Product in the Cart is in preset list of products (config.proactiveOnCartSpecificProductList)\n */\nclass CartSpecificProductTrigger extends ProactiveChatTrigger {\n private product: string = '';\n\n public async validate(): Promise {\n let isValid = false;\n const cart = await this._getCart();\n if (!cart.isEmpty) {\n if (cart.cart.CartLines) {\n this.props.context.telemetry.debug(\n `[${CartSpecificProductTrigger.name}] Number of cart line items was '${cart.cart.CartLines?.length}'`\n );\n for (let i = 0; i < cart.cart.CartLines?.length; i++) {\n if (cart.cart.CartLines[i]) {\n if (this.props.config.proactiveOnCartSpecificProductList) {\n this.props.context.telemetry.debug(\n `[${CartSpecificProductTrigger.name}] Number of cart specific products was configured for proactive chat was '${this.props.config.proactiveOnCartSpecificProductList?.length}'`\n );\n // Find first item, from user-defined list of products, that matches the cart lines' itemId in the cart.\n for (let j = 0; j < (this.props.config.proactiveOnCartSpecificProductList?.length || 0); j++) {\n if (\n this.props.config.proactiveOnCartSpecificProductList &&\n cart.cart.CartLines[i].ItemId &&\n this.props.config.proactiveOnCartSpecificProductList[j] === cart.cart.CartLines[i].ItemId\n ) {\n this.props.context.telemetry.debug(\n `[${CartSpecificProductTrigger.name}] Matched cart line item ID '${cart.cart.CartLines[i].ItemId}' against user-defined list of specific products for proactive chat.`\n );\n isValid = true;\n break;\n }\n }\n }\n } else {\n // Rest of the CartLines are undefined\n break;\n }\n }\n } else {\n this.props.context.telemetry.debug(`[Chat][${CartSpecificProductTrigger.name}] Cart did not contain any cart lines.`);\n }\n } else {\n this.props.context.telemetry.debug(`[Chat][${CartSpecificProductTrigger.name}] Cart was empty.`);\n }\n this.props.context.telemetry.debug(`[Chat][${CartSpecificProductTrigger.name}] Validation returning '${isValid}'.`);\n return isValid;\n }\n\n public getContextProvider(): TContextProvider {\n return () => {\n return {\n ...this.context,\n eCommerceCustIsProactiveChat: 'True',\n eCommerceCustProactiveType: 'Cart Specific Product',\n eCommerceCustProactiveShoppingCartSpecificProduct: `${this.product}`\n };\n };\n }\n\n public getMessage(): string {\n // @TODO: Add message processing if needed\n return this.props.config.proactiveOnCartSpecificProductMessage || this.props.config.proactiveDefaultMessage;\n }\n\n private async _getCart(): Promise {\n return getCartState(this.props.context.actionContext);\n }\n}\n\nexport default CartSpecificProductTrigger;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nexport enum ProactiveChatNames {\n DateRange = 'Date Range',\n FromSpecificPage = 'From Specific Page',\n PageVisits = 'Page Visits',\n SpecificLocation = 'Specific Location',\n SpecificPage = 'Specific Page',\n WaitOnTime = 'Wait On Time'\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ProactiveChatNames } from '../../helpers/consts';\nimport { IChatContext, TContextProvider } from '../../../interfaces';\nimport { IPvaChatConnectorViewProps } from '../../msdyn365-pva-chat-connector';\nimport ProactiveChatTrigger from './proactive-chat-trigger';\n\n/**\n * DateRangeTrigger class - proactive chat is triggered if current date is in preset date boundaries (config.proactiveOnDateRangeStart, config.proactiveOnDateRangeEnd)\n */\nclass DateRangeTrigger extends ProactiveChatTrigger {\n private start?: Date;\n private end?: Date;\n\n constructor(props: IPvaChatConnectorViewProps, context: IChatContext) {\n super(props, context);\n this.start = this._toDate(this.props.config.proactiveOnDateRangeStart);\n this.end = this._toDate(this.props.config.proactiveOnDateRangeEnd);\n\n this.props.context.telemetry.debug(\n `[${DateRangeTrigger.name}] Proactive chat initialized with startDate: '${this.start}'; max: '${this.end}'.`\n );\n }\n\n public async validate(): Promise {\n const now = new Date();\n now.setHours(0, 0, 0, 0);\n\n let retVal = false;\n if (this.start) {\n if (this.end) {\n retVal = this.start.getTime() <= now.getTime() && now.getTime() <= this.end.getTime();\n } else {\n retVal = this.start.getTime() <= now.getTime();\n }\n } else if (this.end) {\n retVal = now.getTime() <= this.end.getTime();\n }\n\n this.props.context.telemetry.debug(\n `[${DateRangeTrigger.name}] Validation result: '${retVal}'; Current date used to compare: '${now}'.`\n );\n return retVal;\n }\n\n public getContextProvider(): TContextProvider {\n return () => {\n return {\n ...this.context,\n eCommerceCustIsProactiveChat: 'True',\n eCommerceCustProactiveType: ProactiveChatNames.DateRange,\n eCommerceCustProactiveFromDate: this.start ? this.start.toUTCString() : '',\n eCommerceCustProactiveToDate: this.end ? this.end.toUTCString() : ''\n };\n };\n }\n\n public getMessage(): string {\n // @TODO: Add message processing if needed\n return this.props.config.proactiveOnDateRangeMessage || this.props.config.proactiveDefaultMessage;\n }\n\n /**\n * Converts string(us-en) to date\n * @param date string (mm/dd/yyyy)\n * @returns Date or undefined\n */\n private _toDate(date?: string): Date | undefined {\n if (date) {\n const dateParts = date.split('/');\n return new Date(+dateParts[2], +dateParts[1] - 1, +dateParts[0]);\n } else {\n return undefined;\n }\n }\n}\n\nexport default DateRangeTrigger;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ProactiveChatNames } from '../../helpers/consts';\nimport { TContextProvider } from '../../../interfaces';\nimport ProactiveChatTrigger from './proactive-chat-trigger';\n\n/**\n * FromSpecificPageTrigger class - proactive chat is triggered if user has come from specific page (the one listed in config.proactiveOnFromSpecificPageList)\n */\nclass FromSpecificPageTrigger extends ProactiveChatTrigger {\n public async validate(): Promise {\n let isValid = false;\n if (this.props.config.proactiveOnFromSpecificPageList) {\n this.props.context.telemetry.debug(\n `[${FromSpecificPageTrigger.name}] Number of items in user-defined list of 'From Specific Page' was '${this.props.config.proactiveOnFromSpecificPageList?.length}'.`\n );\n for (let i = 0; i < (this.props.config.proactiveOnFromSpecificPageList?.length || 0); i++) {\n const fromSpecificPageTrimmed: string = this.props.config.proactiveOnFromSpecificPageList[i].trim();\n this.props.context.telemetry.debug(\n `[Chat][${FromSpecificPageTrigger.name}] Current page URL: '${window.document.referrer}'.`\n );\n this.props.context.telemetry.debug(\n `[${FromSpecificPageTrigger.name}] Current item from user-defined list of 'From Specific Page': '${fromSpecificPageTrimmed}'.`\n );\n\n if (window.document.referrer.indexOf(fromSpecificPageTrimmed) > -1) {\n isValid = true;\n break;\n }\n }\n } else {\n this.props.context.telemetry.debug(\n `[Chat][${FromSpecificPageTrigger.name}] User-defined 'From Specific Page' list was undefined.`\n );\n }\n this.props.context.telemetry.debug(`[Chat][${FromSpecificPageTrigger.name}] Validation returning '${isValid}'.`);\n return isValid;\n }\n public getContextProvider(): TContextProvider {\n return () => {\n return {\n ...this.context,\n eCommerceCustIsProactiveChat: 'True',\n eCommerceCustProactiveType: ProactiveChatNames.FromSpecificPage,\n eCommerceCustProactiveCameFromPage: window.document.referrer\n };\n };\n }\n public getMessage(): string {\n // @TODO: Add message processing if needed\n return this.props.config.proactiveOnFromSpecificPageMessage || this.props.config.proactiveDefaultMessage;\n }\n}\n\nexport default FromSpecificPageTrigger;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ICookieContext } from '@msdyn365-commerce/core-internal/dist/types/interfaces/context/ICookieContext';\nimport { ProactiveChatNames } from '../../helpers/consts';\nimport { IChatContext, TContextProvider } from '../../../interfaces';\nimport { IPvaChatConnectorViewProps } from '../../msdyn365-pva-chat-connector';\nimport ProactiveChatTrigger from './proactive-chat-trigger';\n\n/**\n * PageVisitTrigger class - proactive chat is triggered if user has visited current page for (config.proactiveOnPageVisitNumber) or more times\n */\nclass PageVisitTrigger extends ProactiveChatTrigger {\n public visits: number = 0;\n private cookieName: string = 'TimesPageVisited';\n private expdate: Date;\n private cookies: ICookieContext;\n\n constructor(props: IPvaChatConnectorViewProps, context: IChatContext) {\n super(props, context);\n this.cookies = this.props.context.request.cookies;\n this.expdate = new Date();\n // Set expiry date to 365 days.\n this.expdate.setTime(this.expdate.getTime() + 24 * 60 * 60 * 1000 * 365);\n this.props.context.telemetry.debug(`[Chat][${PageVisitTrigger.name}] Cookie expiry date set to: '${this.expdate}'.`);\n\n this.props.context.telemetry.debug(`[Chat][${PageVisitTrigger.name}] Cookie context is given: '${this.cookies.isConsentGiven()}'.`);\n if (this.cookies.isConsentGiven()) {\n this.cookies.setConsentCookie();\n }\n\n this._updateVisitCounter();\n }\n\n public async validate(): Promise {\n let retVal: boolean = false;\n\n if (this.props.config.proactiveOnPageVisitNumber) {\n retVal = this.visits >= this.props.config.proactiveOnPageVisitNumber;\n }\n\n this.props.context.telemetry.debug(`[Chat][${PageVisitTrigger.name}] Validation result: '${retVal}'.`);\n return retVal;\n }\n\n public clear(): void {\n this.props.context.telemetry.debug(`[Chat][${PageVisitTrigger.name}] Clearing cookie for page visit counter.`);\n this.cookies.set(this.cookieName, 0, {\n domain: window.location.hostname,\n path: window.location.pathname,\n expires: this.expdate\n });\n }\n\n public getContextProvider(): TContextProvider {\n return () => {\n return {\n ...this.context,\n eCommerceCustIsProactiveChat: 'True',\n eCommerceCustProactiveType: ProactiveChatNames.PageVisits,\n eCommerceCustProactiveNumberOfVisits: `${this.visits}`\n };\n };\n }\n\n public getMessage(): string {\n // @TODO: Add message processing if needed\n return this.props.config.proactiveOnPageVisitMessage || this.props.config.proactiveDefaultMessage;\n }\n\n private _updateVisitCounter(): void {\n this.visits = this.cookies.get(this.cookieName).value || 0;\n this.props.context.telemetry.debug(`[Chat][${PageVisitTrigger.name}] Page visit counter BEFORE update: '${this.visits}.`);\n ++this.visits;\n this.props.context.telemetry.debug(`[Chat][${PageVisitTrigger.name}] Page visit counter AFTER update: '${this.visits}.`);\n\n this.cookies.set(this.cookieName, this.visits, {\n domain: window.location.hostname,\n path: window.location.pathname,\n expires: this.expdate\n });\n }\n}\n\nexport default PageVisitTrigger;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ProactiveChatNames } from '../../helpers/consts';\nimport { IExtendedRequest } from '../../interfaces';\nimport { IChatContext, TContextProvider } from '../../../interfaces';\nimport { IPvaChatConnectorViewProps } from '../../msdyn365-pva-chat-connector';\nimport ProactiveChatTrigger from './proactive-chat-trigger';\n\n/**\n * SpecificPageTrigger class - proactive chat is triggered if user geographically uses the website from specific country/regions(config.proactiveOnSpecificCountryRegionCountry)\n */\nclass SpecificCountryRegionTrigger extends ProactiveChatTrigger {\n private customerCountryCode: string;\n constructor(props: IPvaChatConnectorViewProps, context: IChatContext) {\n super(props, context);\n this.customerCountryCode = (this.props.context.request).suggestedMarket || 'n/a';\n this.props.context.telemetry.debug(\n `[${SpecificCountryRegionTrigger.name}] Customer country code set to: '${this.customerCountryCode}.'`\n );\n }\n\n public async validate(): Promise {\n const retVal: boolean = this.props.config.proactiveOnSpecificLocation\n ? this.props.config.proactiveOnSpecificLocation.toLowerCase().indexOf(this.customerCountryCode.toLowerCase()) > -1\n : false;\n this.props.context.telemetry.debug(`[Chat][${SpecificCountryRegionTrigger.name}] Validation returning '${retVal}'.`);\n return retVal;\n }\n public getContextProvider(): TContextProvider {\n return () => {\n return {\n ...this.context,\n eCommerceCustIsProactiveChat: 'True',\n eCommerceCustProactiveCountryCode: this.props.config.proactiveOnSpecificLocation || '',\n eCommerceCustProactiveType: ProactiveChatNames.SpecificLocation\n };\n };\n }\n public getMessage(): string {\n // @TODO: Add message processing if needed\n return this.props.config.proactiveOnSpecificCountryRegionMessage || this.props.config.proactiveDefaultMessage;\n }\n}\n\nexport default SpecificCountryRegionTrigger;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ProactiveChatNames } from '../../helpers/consts';\nimport { TContextProvider } from '../../../interfaces';\nimport ProactiveChatTrigger from './proactive-chat-trigger';\n\n/**\n * SpecificPageTrigger class - proactive chat is triggered if current page is listed in config.proactiveOnSpecificPageList\n */\nclass SpecificPageTrigger extends ProactiveChatTrigger {\n public async validate(): Promise {\n let isValid = false;\n if (this.props.config.proactiveOnSpecificPageList) {\n this.props.context.telemetry.debug(\n `[${SpecificPageTrigger.name}] Number of items in user-defined list of 'Specific Pages' was '${this.props.config.proactiveOnSpecificPageList?.length}'.`\n );\n for (let i = 0; i < (this.props.config.proactiveOnSpecificPageList?.length || 0); i++) {\n const specificPageTrimmed: string = this.props.config.proactiveOnSpecificPageList[i].trim();\n this.props.context.telemetry.debug(`[] Current location URL: ${window.location.href}.`);\n this.props.context.telemetry.debug(`[] Current item from user-defined list of 'Specific Page': ${specificPageTrimmed}.`);\n if (window.location.href.indexOf(specificPageTrimmed) > -1) {\n isValid = true;\n break;\n }\n }\n } else {\n this.props.context.telemetry.debug(`[Chat][${SpecificPageTrigger.name}] User-defined 'Specific Page' list was undefined.`);\n }\n this.props.context.telemetry.debug(`[Chat][${SpecificPageTrigger.name}] Validation returning '${isValid}'.`);\n return isValid;\n }\n\n public getContextProvider(): TContextProvider {\n return () => {\n return {\n ...this.context,\n eCommerceCustIsProactiveChat: 'True',\n eCommerceCustProactiveType: ProactiveChatNames.SpecificPage\n };\n };\n }\n\n public getMessage(): string {\n // @TODO: Add message processing if needed\n return this.props.config.proactiveOnSpecificPageMessage || this.props.config.proactiveDefaultMessage;\n }\n}\n\nexport default SpecificPageTrigger;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ProactiveChatNames } from '../../helpers/consts';\nimport { IChatContext, TContextProvider } from '../../../interfaces';\nimport { IPvaChatConnectorViewProps } from '../../msdyn365-pva-chat-connector';\nimport ProactiveChatTrigger from './proactive-chat-trigger';\n\n/**\n * WaitOnTimeTrigger - proactive chat is triggered if user stays on current page for more than (config.proactiveOnWaitTimeSeconds) seconds\n */\nclass WaitOnTimeTrigger extends ProactiveChatTrigger {\n private waitTimeInMilliseconds: number | undefined;\n\n constructor(props: IPvaChatConnectorViewProps, context: IChatContext) {\n super(props, context);\n if (this.props.config.proactiveOnWaitTimeSeconds && !isNaN(this.props.config.proactiveOnWaitTimeSeconds)) {\n this.waitTimeInMilliseconds = Number(this.props.config.proactiveOnWaitTimeSeconds) * 1000;\n this.props.context.telemetry.debug(\n `[Chat][${WaitOnTimeTrigger.name}] Wait time (ms) set to: '${this.waitTimeInMilliseconds}'.`\n );\n }\n }\n\n public async validate(): Promise {\n const retVal: boolean = this.waitTimeInMilliseconds !== undefined;\n this.props.context.telemetry.debug(`[Chat][${WaitOnTimeTrigger.name}] Validation returning '${retVal}'.`);\n return retVal;\n }\n\n public getContextProvider(): TContextProvider {\n const triggerTime = Date.now() + (this.waitTimeInMilliseconds || 0);\n return () => {\n return triggerTime > Date.now()\n ? this.context\n : {\n ...this.context,\n eCommerceCustIsProactiveChat: 'True',\n eCommerceCustProactiveType: ProactiveChatNames.WaitOnTime,\n eCommerceCustProactiveTimeOnPage: `${this.waitTimeInMilliseconds ? this.waitTimeInMilliseconds : 0}`\n };\n };\n }\n\n public getMessage(): string {\n // @TODO: Add message processing if needed\n return this.props.config.proactiveOnWaitTimeMessage || this.props.config.proactiveDefaultMessage;\n }\n}\n\nexport default WaitOnTimeTrigger;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport CartAmountTrigger from './triggers/cart-amount-trigger';\nimport CartNumberOfItemsTrigger from './triggers/cart-number-of-items-trigger';\nimport CartSpecificProductTrigger from './triggers/cart-specific-product-trigger';\nimport DateRangeTrigger from './triggers/date-range-trigger';\nimport FromSpecificPageTrigger from './triggers/from-specific-page-trigger';\nimport PageVisitTrigger from './triggers/page-visits-trigger';\nimport SpecificCountryRegionTrigger from './triggers/specific-CountryRegion-trigger';\nimport SpecificPageTrigger from './triggers/specific-page-trigger';\nimport WaitOnTimeTrigger from './triggers/wait-on-time-trigger';\n\ntype ProactiveChat =\n | typeof DateRangeTrigger\n | typeof SpecificPageTrigger\n | typeof FromSpecificPageTrigger\n | typeof PageVisitTrigger\n | typeof SpecificCountryRegionTrigger\n | typeof CartAmountTrigger\n | typeof CartNumberOfItemsTrigger\n | typeof CartSpecificProductTrigger\n | typeof WaitOnTimeTrigger;\n\n/**\n * List of Proactive Chat Validators in order of validation (first proactive chat that pass validation is triggered, the rest are ommited)\n */\nexport const ProactiveTriggers: ProactiveChat[] = [\n DateRangeTrigger,\n SpecificPageTrigger,\n FromSpecificPageTrigger,\n PageVisitTrigger,\n SpecificCountryRegionTrigger,\n CartAmountTrigger,\n CartNumberOfItemsTrigger,\n CartSpecificProductTrigger,\n WaitOnTimeTrigger\n];\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IRequestContextUser } from '@msdyn365-commerce/core-internal/dist/types/interfaces/context/IRequestContext';\nimport { v4 as uuidv4 } from 'uuid';\nimport { ProactiveTriggers } from '../proactive';\nimport ProactiveChatTrigger from '../proactive/triggers/proactive-chat-trigger';\nimport { IPvaChatConnectorViewProps } from '../msdyn365-pva-chat-connector';\nimport { IProactiveData } from './../interfaces';\nimport { IChatContext, TContextProvider } from '../../interfaces';\n\n/**\n *\n * ContextProvider class - generates chat context, and checks for proactive triggers\n */\nclass ContextProvider {\n public data: IProactiveData;\n public props: IPvaChatConnectorViewProps;\n private user: IRequestContextUser;\n private userId: string;\n private context: IChatContext;\n private provider: TContextProvider | undefined;\n\n constructor(props: IPvaChatConnectorViewProps) {\n this.props = props;\n this.user = this.props.context.request.user;\n this.userId = `dl_${uuidv4()}`;\n this.context = this._getContext();\n // Proactive Chat related data\n this.data = {\n enabled: false,\n timeout: this.props.config.proactiveOnWaitTimeSeconds || 0,\n message: this.props.config.proactiveDefaultMessage\n };\n }\n\n /**\n * Executes Proactive Chat validation\n * @returns TContextProvider - a function returning IChatContext object\n */\n public async init(): Promise {\n try {\n await this._proactiveCheck();\n } catch (e) {\n // Use ?debug=true to see telemetry\n // If previous block fails, chat will still be available (no need to display any errors to user)\n this.props.telemetry.exception(e);\n }\n return this.provider || this._getProvider();\n }\n\n /**\n * Returns TContextProvider - a function returning IChatContext object\n */\n private _getProvider(): TContextProvider {\n return () => {\n return {\n eCommerceOperatingUnitNumber: this.props.context.request.apiSettings.oun,\n eCommerceBaseUrl: this.props.context.request.apiSettings.baseUrl,\n eCommerceDataAreaId: this.props.context.request.channel?.InventLocationDataAreaId,\n UserId: this.userId,\n // eCommerceCust...\n AccountNumber: this.user.customerAccountNumber ? this.user.customerAccountNumber : 'N/A',\n Email: this.user.emailAddress ? this.user.emailAddress : 'N/A',\n FirstName: this.user.firstName ? this.user.firstName : this.props.config.anonymousUserName,\n LastName: this.user.lastName ? this.user.lastName : 'N/A',\n Name: this.user.name ? this.user.name : this.props.config.anonymousUserName,\n eCommerceCustPageURL: window.location.href,\n eCommerceCustChatType: 'pva',\n // Proactive chat\n eCommerceCustIsProactiveChat: 'False',\n eCommerceCustProactiveType: 'N/A',\n // Date Range\n eCommerceCustProactiveFromDate: 'N/A',\n eCommerceCustProactiveToDate: 'N/A',\n // From Specific Page\n eCommerceCustProactiveCameFromPage: 'N/A',\n // No. Page Visits\n eCommerceCustProactiveNumberOfVisits: 'N/A',\n // Specific CountryRegion\n eCommerceCustProactiveCountryCode: 'N/A',\n // Specific Page => eCommerceCustPageURL\n // eCommerceCustProactiveSpecificPage: 'N/A',\n // Wait On Time\n eCommerceCustProactiveTimeOnPage: 'N/A',\n // Shopping cart amount\n eCommerceCustProactiveShoppingCartAmount: 'N/A',\n // Shopping cart number of items\n eCommerceCustProactiveShoppingCartNumberOfItems: 'N/A',\n // Shopping cart specific product\n eCommerceCustProactiveShoppingCartSpecificProduct: 'N/A'\n };\n };\n }\n\n /**\n * Returns default IChatContext object\n */\n private _getContext(): IChatContext {\n return this._getProvider()();\n }\n\n /**\n * Validates proactive triggers to check if proactive chat should be initialized\n */\n private async _proactiveCheck(): Promise {\n if (this.props.config.proactiveChatEnabled) {\n for (let i = 0; i < ProactiveTriggers.length; i++) {\n const proactive = new ProactiveTriggers[i](this.props, this.context);\n // Only first detected proactive trigger gets executed\n if (await this._isProactive(proactive)) {\n this.props.context.telemetry.debug(`First detected proactive trigger to be executed: ${proactive}`);\n break;\n }\n }\n }\n }\n\n /**\n * Validates if proactive chat should be triggered for given ProactiveTrigger\n * @param proactive ProactiveChatTrigger\n * @returns boolean\n */\n private async _isProactive(proactive: ProactiveChatTrigger): Promise {\n this.data.enabled = await proactive.validate();\n if (this.data.enabled) {\n this.provider = proactive.getContextProvider();\n this.data.message = proactive.getMessage();\n }\n return this.data.enabled;\n }\n}\n\nexport default ContextProvider;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\n/**\n * Style generating functions\n */\nimport { IAvatarStyling, IBubbleStyling, IChatCustomStyle, IChatStyling, IOtherStyling, ISuggestedActionStyling } from '../interfaces';\nimport { IMsdyn365PvaChatConnectorConfig } from '../msdyn365-pva-chat-connector.props.autogenerated';\n\nconst getChatWrapperStyle = (config: IMsdyn365PvaChatConnectorConfig): React.CSSProperties => {\n return {\n position: config.position || 'inherit',\n top: config.top ? config.top : 'inherit',\n right: config.right ? config.right : 'inherit',\n bottom: config.bottom ? config.bottom : 'inherit',\n left: config.left ? config.left : 'inherit',\n zIndex: 1000,\n display: 'flex',\n justifyContent: 'flex-end'\n };\n};\n\nconst getMaximizedChatWrapperStyle = (config: IMsdyn365PvaChatConnectorConfig, isMobileDevice: boolean): React.CSSProperties => {\n if (isMobileDevice) {\n return {\n height: '90%',\n width: '100%',\n bottom: '0.5em',\n right: '0',\n padding: '5px'\n };\n }\n return {\n height: config.chatHeight ? config.chatHeight : '80%',\n width: config.chatWidth ? config.chatWidth : 'inherit'\n };\n};\n\nconst getChatButtonStyle = (config: IMsdyn365PvaChatConnectorConfig): React.CSSProperties => {\n return {\n display: 'flex',\n alignItems: 'center',\n backgroundColor: config.startChatButtonBackgroundColor || 'white',\n color: config.startChatButtonTextColor || 'inherit',\n borderColor: config.startChatButtonBorderColor || 'inherit',\n borderRadius: config.startChatButtonBorderRadius || '0px',\n borderStyle: config.startChatButtonBorderStyle || 'solid',\n borderWidth: config.startChatButtonBorderWidth ? config.startChatButtonBorderWidth : '0px',\n padding: config.storeLogoURL ? '2px 20px 2px 2px' : '10px 20px 10px 20px',\n cursor: 'pointer',\n outlineStyle: 'none',\n alignSelf: 'flex-end',\n boxShadow: '0 0 4px rgba(102,102,102,.5)',\n WebkitBoxShadow: '0 0 4px rgba(102,102,102,.5)',\n MozBoxShadow: '0 0 4px rgba(102,102,102,.5)'\n };\n};\n\nconst getButtonStoreLogoStyle = (config: IMsdyn365PvaChatConnectorConfig): React.CSSProperties => {\n return {\n backgroundColor: config.headerBackgroundColor || 'inherit',\n color: config.headerTextColor || 'inherit',\n borderRadius: '50%',\n padding: '11px',\n width: '30px',\n height: '30px',\n marginRight: '12px',\n borderStyle: 'solid',\n borderWidth: '1px',\n boxSizing: 'content-box'\n };\n};\n\nconst getChatStoreLogoStyle = (config: IMsdyn365PvaChatConnectorConfig): React.CSSProperties => {\n return {\n backgroundColor: config.headerBackgroundColor || 'inherit',\n color: config.headerTextColor || 'inherit',\n borderRadius: '50%',\n padding: '11px',\n width: '30px',\n height: '30px',\n margin: '5px 12px 5px 5px',\n alignSelf: 'center',\n borderStyle: 'solid',\n borderWidth: '1px',\n boxSizing: 'content-box'\n };\n};\n\nconst getChatMessagesStyle = (config: IMsdyn365PvaChatConnectorConfig, minimized: boolean): React.CSSProperties => {\n return {\n display: minimized ? 'none' : 'block',\n backgroundColor: config.backgroundColor || 'White',\n height: '100%',\n width: '100%',\n boxSizing: 'border-box',\n position: 'relative'\n };\n};\n\nconst getChatMessageHeader = (config: IMsdyn365PvaChatConnectorConfig): React.CSSProperties => {\n config.chatHeaderHeight = config.chatHeaderHeight || '70px';\n return {\n backgroundColor: config.headerBackgroundColor || 'inherit',\n backgroundImage: `url(\"${config.headerBackgroundImageURL}\")` || 'none',\n color: config.headerTextColor || 'inherit',\n backgroundRepeat: 'no-repeat',\n display: 'flex',\n alignItems: 'flex-start',\n flexDirection: 'row',\n width: '100%',\n position: 'absolute',\n top: config.chatHeaderHeight ? `-${config.chatHeaderHeight}` : '',\n height: config.chatHeaderHeight,\n borderColor: config.headerBackgroundColor ? config.headerBackgroundColor : 'inherit',\n borderStyle: config.chatBorderStyle ? config.chatBorderStyle : 'none',\n borderWidth: config.chatBorderWidth ? config.chatBorderWidth : '0px'\n };\n};\n\nconst getMinimizeButtonStyle = (config: IMsdyn365PvaChatConnectorConfig): React.CSSProperties => {\n config.chatHeaderHeight = config.chatHeaderHeight || '70px';\n return {\n borderTop: 'none',\n borderLeft: 'none',\n borderRight: 'none',\n borderBottom: `solid 2px ${config.headerTextColor || 'White'}`,\n backgroundColor: 'transparent',\n padding: '5px 10px 3px 10px',\n cursor: 'pointer',\n outlineStyle: 'none',\n marginTop: '7px',\n marginRight: '7px'\n };\n};\n\nconst getCloseButtonStyle = (config: IMsdyn365PvaChatConnectorConfig): React.CSSProperties => {\n config.chatHeaderHeight = config.chatHeaderHeight || '70px';\n return {\n border: 'none',\n color: config.headerTextColor || 'White',\n backgroundColor: 'transparent',\n padding: '0px 0px 0px 7px',\n cursor: 'pointer',\n outlineStyle: 'none',\n marginTop: '7px',\n marginRight: '7px'\n };\n};\n\nconst getChatMessageContent = (config: IMsdyn365PvaChatConnectorConfig): React.CSSProperties => {\n config.chatHeaderHeight = config.chatHeaderHeight || '70px';\n return {\n height: '100%',\n width: '100%',\n borderColor: config.chatBorderColor ? config.chatBorderColor : 'inherit',\n borderStyle: config.chatBorderStyle ? config.chatBorderStyle : 'none',\n borderWidth: config.chatBorderWidth ? config.chatBorderWidth : '0px'\n };\n};\n\nconst getProactiveWrapperStyle = (config: IMsdyn365PvaChatConnectorConfig): React.CSSProperties => {\n return {\n flexDirection: 'column',\n display: 'flex',\n justifyContent: 'flex-end',\n backgroundColor: config.backgroundColor || 'White'\n };\n};\n\nconst getProactiveMessageHeader = (config: IMsdyn365PvaChatConnectorConfig): React.CSSProperties => {\n config.chatHeaderHeight = config.chatHeaderHeight || '70px';\n return {\n backgroundColor: config.headerBackgroundColor || 'inherit',\n backgroundImage: `url(\"${config.headerBackgroundImageURL}\")` || 'none',\n color: config.headerTextColor || 'inherit',\n backgroundRepeat: 'no-repeat',\n display: 'flex',\n alignItems: 'flex-start',\n flexDirection: 'row',\n boxSizing: 'border-box',\n width: '100%',\n height: config.chatHeaderHeight,\n borderColor: config.headerBackgroundColor ? config.headerBackgroundColor : 'inherit',\n borderStyle: config.chatBorderStyle ? config.chatBorderStyle : 'none',\n borderWidth: config.chatBorderWidth ? config.chatBorderWidth : '0px'\n };\n};\n\nconst getProactiveMessageContent = (config: IMsdyn365PvaChatConnectorConfig): React.CSSProperties => {\n config.chatHeaderHeight = config.chatHeaderHeight || '70px';\n return {\n width: '100%',\n padding: '10px 20px',\n boxSizing: 'border-box',\n borderColor: config.chatBorderColor ? config.chatBorderColor : 'inherit',\n borderStyle: config.chatBorderStyle ? config.chatBorderStyle : 'none',\n borderWidth: config.chatBorderWidth ? config.chatBorderWidth : '0px'\n };\n};\n\nconst getProactiveButtonStyle = (config: IMsdyn365PvaChatConnectorConfig): React.CSSProperties => {\n config.chatHeaderHeight = config.chatHeaderHeight || '70px';\n return {\n color: config.headerTextColor || 'inherit',\n cursor: 'pointer',\n padding: '5px 10px',\n outline: 'none',\n border: 'none',\n backgroundColor: config.headerBackgroundColor || 'inherit',\n borderRadius: '25px'\n };\n};\n\nconst getRedDotStyle = (config: IMsdyn365PvaChatConnectorConfig): React.CSSProperties => {\n return {\n background: 'Red',\n borderRadius: '50%',\n height: '5px',\n width: '5px',\n position: 'absolute',\n right: '10px',\n bottom: '33px'\n };\n};\n\n/**\n * Generates styles for the chat wrapper, and proactive chat parts\n * @param config IMsdyn365PvaChatConnectorConfig\n * @param minimized boolean\n * @returns IChatCustomStyle\n */\nexport const getChatStyling = (config: IMsdyn365PvaChatConnectorConfig, minimized: boolean, isMobileDevice: boolean): IChatCustomStyle => {\n return {\n ChatWrapperStyle: getChatWrapperStyle(config),\n MaximizedChatWrapperStyle: getMaximizedChatWrapperStyle(config, isMobileDevice),\n ChatButtonStyle: getChatButtonStyle(config),\n ButtonStoreLogoStyle: getButtonStoreLogoStyle(config),\n ChatStoreLogoStyle: getChatStoreLogoStyle(config),\n ChatMessagesStyle: getChatMessagesStyle(config, minimized),\n ChatMessageHeader: getChatMessageHeader(config),\n MinimizeButtonStyle: getMinimizeButtonStyle(config),\n CloseButtonStyle: getCloseButtonStyle(config),\n ChatMessageContent: getChatMessageContent(config),\n ProactiveWrapperStyle: getProactiveWrapperStyle(config),\n ProactiveMessageHeader: getProactiveMessageHeader(config),\n ProactiveMessageContent: getProactiveMessageContent(config),\n ProactiveButtonStyle: getProactiveButtonStyle(config),\n RedDotStyle: getRedDotStyle(config)\n };\n};\n\nconst fontFormat = (font?: string): string | undefined => {\n if (font && font.length > 0) {\n const arr = font.split(',');\n for (let i = 0; i < arr.length; i++) {\n arr[i] = `'${arr[i].trim()}'`;\n }\n font = arr.join(', ');\n } else {\n font = \"'Calibri', 'Helvetica Neue', 'Arial', 'sans-serif'\";\n }\n\n return font;\n};\n\nconst getBubbleStyling = (config: IMsdyn365PvaChatConnectorConfig): IBubbleStyling => {\n return {\n bubbleBackground: config.bubbleBackground || 'White',\n bubbleTextColor: config.bubbleTextColor || 'Black',\n bubbleBorderColor: config.bubbleBorderColor || '#e6e6e6',\n bubbleBorderRadius: config.bubbleBorderRadius || '2',\n bubbleBorderStyle: config.bubbleBorderStyle || 'solid',\n bubbleBorderWidth: config.bubbleBorderWidth || '1',\n bubbleFromUserBackground: config.bubbleFromUserBackground || 'White',\n bubbleFromUserTextColor: config.bubbleFromUserTextColor || 'Black',\n bubbleFromUserBorderColor: config.bubbleFromUserBorderColor || '#e6e6e6',\n bubbleFromUserBorderRadius: config.bubbleFromUserBorderRadius || '2',\n bubbleFromUserBorderStyle: config.bubbleFromUserBorderStyle || 'solid',\n bubbleFromUserBorderWidth: config.bubbleFromUserBorderWidth || '1'\n };\n};\n\n// eslint-disable-next-line complexity\nconst getOtherStyling = (config: IMsdyn365PvaChatConnectorConfig): IOtherStyling => {\n return {\n groupTimestamp: config.groupTimestamp || true,\n sendTimeout: config.sendTimeout || '20000',\n sendTimeoutForAttachments: config.sendTimeoutForAttachments || '120000',\n timestampColor: config.timestampColor || 'undefined',\n timestampFormat: config.timestampFormat || 'undefined',\n notificationDebounceTimeout: config.notificationDebounceTimeout || '400',\n hideToaster: config.hideToaster || true,\n toasterHeight: config.toasterHeight || '32',\n toasterMaxHeight: config.toasterMaxHeight || '32 * 5',\n toasterSingularMaxHeight: config.toasterSingularMaxHeight || '50',\n toastFontSize: config.toastFontSize || '87.5%',\n toastIconWidth: config.toastIconWidth || '36',\n toastSeparatorColor: config.toastSeparatorColor || '#E8EAEC',\n toastTextPadding: config.toastTextPadding || '6',\n toastErrorBackgroundColor: config.toastErrorBackgroundColor || '#FDE7E9',\n toastErrorColor: config.toastErrorColor || '#A80000',\n toastInfoBackgroundColor: config.toastInfoBackgroundColor || '#CEF1FF',\n toastInfoColor: config.toastInfoColor || '#105E7D',\n toastSuccessBackgroundColor: config.toastSuccessBackgroundColor || '#DFF6DD',\n toastSuccessColor: config.toastSuccessColor || '#107C10',\n toastWarnBackgroundColor: config.toastWarnBackgroundColor || '#FFF4CE',\n toastWarnColor: config.toastWarnColor || '#3B3A39',\n typingAnimationBackgroundImage: config.typingAnimationBackgroundImage || 'undefined',\n typingAnimationDuration: config.typingAnimationDuration || '5000',\n typingAnimationHeight: config.typingAnimationHeight || '20',\n typingAnimationWidth: config.typingAnimationWidth || '64',\n videoHeight: config.videoHeight || '270',\n markdownExternalLinkIconImage:\n config.markdownExternalLinkIconImage ||\n 'url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIzIDMgMTggMTgiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTcuMjUwMSA0LjUwMDE3SDEwLjc0OTVDMTEuMTYzNyA0LjUwMDE3IDExLjQ5OTUgNC44MzU5NiAxMS40OTk1IDUuMjUwMTdDMTEuNDk5NSA1LjYyOTg2IDExLjIxNzMgNS45NDM2NiAxMC44NTEzIDUuOTkzMzJMMTAuNzQ5NSA2LjAwMDE3SDcuMjQ5NzRDNi4wNzA3OSA1Ljk5OTYxIDUuMTAzNDkgNi45MDY1NiA1LjAwNzg2IDguMDYxMTJMNS4wMDAyOCA4LjIyMDAzTDUuMDAzMTIgMTYuNzUwN0M1LjAwMzQzIDE3Ljk0MTUgNS45Mjg4NSAxOC45MTYxIDcuMDk5NjYgMTguOTk0OUw3LjI1MzcxIDE5LjAwMDFMMTUuNzUxOCAxOC45ODg0QzE2Ljk0MTUgMTguOTg2OCAxNy45MTQ1IDE4LjA2MiAxNy45OTM1IDE2Ljg5MjNMMTcuOTk4NyAxNi43Mzg0VjEzLjIzMjFDMTcuOTk4NyAxMi44MTc5IDE4LjMzNDUgMTIuNDgyMSAxOC43NDg3IDEyLjQ4MjFDMTkuMTI4NCAxMi40ODIxIDE5LjQ0MjIgMTIuNzY0MyAxOS40OTE4IDEzLjEzMDNMMTkuNDk4NyAxMy4yMzIxVjE2LjczODRDMTkuNDk4NyAxOC43NDA3IDE3LjkyOTMgMjAuMzc2OSAxNS45NTI4IDIwLjQ4MjlMMTUuNzUzOCAyMC40ODg0TDcuMjU4MjcgMjAuNTAwMUw3LjA1NDk1IDIwLjQ5NDlDNS4xNDIzOSAyMC4zOTU0IDMuNjA4OTUgMTguODYyNyAzLjUwODM3IDE2Ljk1MDJMMy41MDMxMiAxNi43NTExTDMuNTAwODkgOC4yNTI3TDMuNTA1MjkgOC4wNTAyQzMuNjA1MzkgNi4xMzc0OSA1LjEzODY3IDQuNjA0NDkgNy4wNTA5NiA0LjUwNTI3TDcuMjUwMSA0LjUwMDE3SDEwLjc0OTVINy4yNTAxWk0xMy43NDgxIDMuMDAxNDZMMjAuMzAxOCAzLjAwMTk3TDIwLjQwMTQgMy4wMTU3NUwyMC41MDIyIDMuMDQzOTNMMjAuNTU5IDMuMDY4MDNDMjAuNjEyMiAzLjA5MTIyIDIwLjY2MzQgMy4xMjE2MyAyMC43MTExIDMuMTU4ODVMMjAuNzgwNCAzLjIyMTU2TDIwLjg2NDEgMy4zMjAxNEwyMC45MTgzIDMuNDEwMjVMMjAuOTU3IDMuNTAwNTdMMjAuOTc2MiAzLjU2NDc2TDIwLjk4OTggMy42Mjg2MkwyMC45OTkyIDMuNzIyODJMMjAuOTk5NyAxMC4yNTU0QzIwLjk5OTcgMTAuNjY5NiAyMC42NjM5IDExLjAwNTQgMjAuMjQ5NyAxMS4wMDU0QzE5Ljg3IDExLjAwNTQgMTkuNTU2MiAxMC43MjMyIDE5LjUwNjUgMTAuMzU3MUwxOS40OTk3IDEwLjI1NTRMMTkuNDk4OSA1LjU2MTQ3TDEyLjI3OTcgMTIuNzg0N0MxMi4wMTM0IDEzLjA1MSAxMS41OTY4IDEzLjA3NTMgMTEuMzAzMSAxMi44NTc1TDExLjIxOSAxMi43ODQ5QzEwLjk1MjcgMTIuNTE4NyAxMC45Mjg0IDEyLjEwMjEgMTEuMTQ2MiAxMS44MDg0TDExLjIxODggMTEuNzI0M0wxOC40MzY5IDQuNTAxNDZIMTMuNzQ4MUMxMy4zNjg0IDQuNTAxNDYgMTMuMDU0NiA0LjIxOTMxIDEzLjAwNSAzLjg1MzI0TDEyLjk5ODEgMy43NTE0NkMxMi45OTgxIDMuMzcxNzcgMTMuMjgwMyAzLjA1Nzk3IDEzLjY0NjQgMy4wMDgzMUwxMy43NDgxIDMuMDAxNDZaIiBmaWxsPSIjMjEyMTIxIiAvPjwvc3ZnPg==)',\n markdownRespectCRLF: config.markdownRespectCRLF || 'true',\n internalLiveRegionFadeAfter: config.internalLiveRegionFadeAfter || '1000',\n accent: config.accent || '#0063B1',\n subtle: config.subtle || '#767676'\n };\n};\n\nconst getAvatarStyling = (config: IMsdyn365PvaChatConnectorConfig): IAvatarStyling => {\n return {\n avatarBorderRadius: config.avatarBorderRadius || '50%',\n avatarSize: config.avatarSize || '40',\n botAvatarBackgroundColor: config.botAvatarBackgroundColor || 'undefined',\n botAvatarImage: config.botAvatarImage || '',\n botAvatarInitials: config.botAvatarInitials || '',\n userAvatarBackgroundColor: config.userAvatarBackgroundColor || 'undefined',\n userAvatarImage: config.userAvatarImage || '',\n userAvatarInitials: config.userAvatarInitials || '',\n showAvatarInGroup: config.showAvatarInGroup || 'status'\n };\n};\n\nconst getSuggestedActionStyling = (config: IMsdyn365PvaChatConnectorConfig): ISuggestedActionStyling => {\n return {\n suggestedActionLayout: config.suggestedActionLayout || 'carousel',\n suggestedActionBackground: config.suggestedActionBackground || 'White',\n suggestedActionTextColor: config.suggestedActionTextColor || '',\n suggestedActionBorderColor: config.suggestedActionBorderColor || '',\n suggestedActionBorderRadius: config.suggestedActionBorderRadius || '0',\n suggestedActionBorderStyle: config.suggestedActionBorderStyle || 'solid',\n suggestedActionBorderWidth: config.suggestedActionBorderWidth || '2',\n suggestedActionDisabledBorderStyle: config.suggestedActionDisabledBorderStyle || 'solid',\n suggestedActionDisabledBorderWidth: config.suggestedActionDisabledBorderWidth || '2',\n suggestedActionDisabledTextColor: config.suggestedActionDisabledTextColor || '',\n suggestedActionHeight: config.suggestedActionHeight || '40',\n suggestedActionImageHeight: config.suggestedActionImageHeight || '20',\n suggestedActionsCarouselFlipperCursor: config.suggestedActionsCarouselFlipperCursor || '',\n suggestedActionsCarouselFlipperBoxWidth: config.suggestedActionsCarouselFlipperBoxWidth || '40',\n suggestedActionsCarouselFlipperSize: config.suggestedActionsCarouselFlipperSize || '20',\n suggestedActionsFlowMaxHeight: config.suggestedActionsFlowMaxHeight || '',\n suggestedActionsStackedHeight: config.suggestedActionsStackedHeight || '',\n suggestedActionsStackedOverflow: config.suggestedActionsStackedOverflow || '2',\n suggestedActionsStackedLayoutButtonMaxHeight: config.suggestedActionsStackedLayoutButtonMaxHeight || '',\n suggestedActionsStackedLayoutButtonTextWrap: config.suggestedActionsStackedLayoutButtonTextWrap || false\n };\n};\n\n/**\n * Generates style options for the Botframework-WebChat widget\n * @param config IMsdyn365PvaChatConnectorConfig\n * @returns IChatStyling\n */\nexport const getChatStyleOptions = (config: IMsdyn365PvaChatConnectorConfig): IChatStyling => {\n const bubbleStyling = getBubbleStyling(config);\n const avatarStyling = getAvatarStyling(config);\n const suggestedActionStyling = getSuggestedActionStyling(config);\n const otherStyling = getOtherStyling(config);\n return {\n hideUploadButton: true,\n primaryFont: fontFormat(config.primaryFont),\n backgroundColor: config.backgroundColor || 'White',\n ...bubbleStyling,\n ...avatarStyling,\n ...suggestedActionStyling,\n ...otherStyling\n };\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport React from 'react';\nimport { IAction, IDispatch, INext } from '../interfaces';\nimport { TContextProvider } from '../../interfaces';\nimport { IPvaChatConnectorViewProps } from '../msdyn365-pva-chat-connector';\n\nexport class CommerceChatStore {\n private props: IPvaChatConnectorViewProps;\n private setNewMessageAction: React.Dispatch>;\n private provider?: TContextProvider;\n\n /**\n * Gets conversation token\n * @param props IPvaChatConnectorViewProps\n */\n public static async getDirectLineToken(props: IPvaChatConnectorViewProps): Promise {\n if (props.config.powervaDirectlineTokenURL && props.config.botID && props.config.tenantID) {\n // use direct line token url, bot id and tenant id from module config to get conversation token\n const url = `${props.config.powervaDirectlineTokenURL}?botId=${props.config.botID}&tenantId=${props.config.tenantID}`;\n const options = { method: 'GET' };\n return fetch(url, options)\n .then(r => r.json())\n .then(r => {\n if (r.token) {\n return r.token;\n } else {\n throw r;\n }\n });\n }\n\n // use direct line token url, bot id and tenant id from app config to get conversation token\n const url = `${props.context.app.config.pvaChatConnectorPowervaDirectlineTokenURL}?botId=${props.context.app.config.pvaChatConnectorBotID}&tenantId=${props.context.app.config.pvaChatConnectorTenantID}`;\n const options = {\n method: 'GET'\n };\n return fetch(url, options)\n .then(r => r.json())\n .then(r => {\n if (r.token) {\n return r.token;\n } else {\n throw r;\n }\n });\n }\n\n /**\n * Creates a new instance of commerce store for WebChat\n * @param props IPvaChatConnectorViewProps\n * @param provider TContextProvider\n * @param setNewMessage React.Dispatch>\n */\n constructor(\n props: IPvaChatConnectorViewProps,\n provider: TContextProvider | undefined,\n setNewMessage: React.Dispatch>\n ) {\n this.props = props;\n this.provider = provider;\n this.setNewMessageAction = setNewMessage;\n }\n\n /**\n * Handles custom chat actions\n * @param param0 {\n * dispatch: IDispatch;\n * next: INext;\n * action: IAction;\n * }\n */\n public async actionHandler({ dispatch, next, action }: { dispatch: IDispatch; next: INext; action: IAction }): Promise {\n const atype = action.type;\n\n switch (atype) {\n case 'DIRECT_LINE/CONNECT_FULFILLED': {\n // sets language\n dispatch({\n type: 'WEB_CHAT/SEND_EVENT',\n payload: {\n name: 'webchat/join',\n value: { language: window.navigator.language }\n }\n });\n break;\n }\n case 'DIRECT_LINE/INCOMING_ACTIVITY': {\n const activity = action.payload.activity;\n if (activity?.from?.role === 'bot') {\n // Sets flag for new message (will be use to indicate new messages from bot when chat is minimized)\n this.setNewMessageAction(true);\n }\n break;\n }\n case 'DIRECT_LINE/POST_ACTIVITY_FULFILLED': {\n switch (action.payload.activity.name) {\n case 'webchat/join':\n {\n if (this.provider !== undefined) {\n // Sets Chat Context\n dispatch({\n type: 'WEB_CHAT/SEND_EVENT',\n payload: {\n name: 'pvaSetContext',\n value: this.provider()\n }\n });\n }\n }\n break;\n case 'pvaSetContext':\n {\n if (this.props.config.triggerQuery) {\n // Initialize chat after Chat Context is set\n dispatch({\n type: 'WEB_CHAT/SEND_MESSAGE_BACK',\n payload: {\n text: this.props.config.triggerQuery\n }\n });\n }\n }\n break;\n default: {\n // default nothing\n }\n }\n break;\n }\n default: {\n // default nothing\n }\n }\n\n return next(action);\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport React, { FunctionComponent, useMemo, useState } from 'react';\nimport { getChatStyleOptions } from '../helpers/StyleComposers';\nimport { IChatCoreProps, IAction, IDispatch } from '../interfaces';\nimport { CommerceChatStore } from '../helpers/CommerceChatStore';\n\n/**\n * Just a core Chat component\n * @param props\n */\n\nconst ChatCore: FunctionComponent = (props: IChatCoreProps) => {\n const { ReactWebChat } = window.WebChat;\n\n const [userId, setUserId] = useState('');\n useMemo(() => {\n if (props.provider) {\n const ctx = props.provider();\n if (ctx.UserId) {\n setUserId(typeof ctx.UserId === 'string' ? ctx.UserId : ctx.UserId.value.toString());\n }\n }\n }, [props.provider]);\n\n const directLine = useMemo(() => {\n return window.WebChat.createDirectLine({ token: props.directLineToken });\n }, [props.directLineToken]);\n\n const commerceChatStore = useMemo(() => {\n if (directLine && props.provider) {\n return new CommerceChatStore(props.config, props.provider, props.setNewMessage);\n }\n return undefined;\n }, [props.provider, directLine]);\n\n const store = useMemo(() => {\n return window.WebChat.createStore(\n {},\n ({ dispatch }: { dispatch: IDispatch }) => (next: (action: IAction) => IDispatch) => (action: IAction) => {\n commerceChatStore?.actionHandler({ dispatch, next, action });\n }\n );\n }, [commerceChatStore]);\n const styleOptions = getChatStyleOptions(props.config.config);\n\n return props.directLineToken !== '' ? (\n \n ) : (\n

Please wait while we are connecting.

\n );\n};\n\nexport default ChatCore;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport React, { FunctionComponent, useEffect, useState } from 'react';\nimport { isMobile, VariantType } from '@msdyn365-commerce-modules/utilities';\nimport ContextProvider from '../helpers/ContextProvider';\nimport { getChatStyling } from '../helpers/StyleComposers';\nimport { TContextProvider } from '../../interfaces';\nimport { IPvaChatConnectorViewProps } from '../msdyn365-pva-chat-connector';\nimport { CommerceChatStore } from '../helpers';\nimport ChatCore from './ChatCore';\n\nconst INVALID_TOKEN = 'INVALID_TOKEN';\nconst CLOSE_IMG_DATA =\n 'M443.6,387.1L312.4,255.4l131.5-130c5.4-5.4,5.4-14.2,0-19.6l-37.4-37.6c-2.6-2.6-6.1-4-9.8-4c-3.7,0-7.2,1.5-9.8,4 L256,197.8L124.9,68.3c-2.6-2.6-6.1-4-9.8-4c-3.7,0-7.2,1.5-9.8,4L68,105.9c-5.4,5.4-5.4,14.2,0,19.6l131.5,130L68.4,387.1 c-2.6,2.6-4.1,6.1-4.1,9.8c0,3.7,1.4,7.2,4.1,9.8l37.4,37.6c2.7,2.7,6.2,4.1,9.8,4.1c3.5,0,7.1-1.3,9.8-4.1L256,313.1l130.7,131.1 c2.7,2.7,6.2,4.1,9.8,4.1c3.5,0,7.1-1.3,9.8-4.1l37.4-37.6c2.6-2.6,4.1-6.1,4.1-9.8C447.7,393.2,446.2,389.7,443.6,387.1z';\n\n/**\n * Outer chat component, displays chat button, and proactive chat, and handles custom actions\n * @param props IPvaChatConnectorViewProps\n */\nconst Chat: FunctionComponent = (props: IPvaChatConnectorViewProps) => {\n const [loaded, setLoaded] = useState(false); // loaded & minimized are needed as ChatWidget should not be removed from DOM (it resets chat)\n const [minimized, setMinimized] = useState(true);\n const [newMessage, setNewMessage] = useState(false); // TODO: use this to indicate new message in minimized chat\n const [token, setToken] = useState(''); // holds conversation token for WebChat\n const [isProactive, setIsProactive] = useState(false); // if proactive chat is triggered\n const [proactiveMessage, setProactiveMessage] = useState(props.config.proactiveDefaultMessage);\n const [closed, setClosed] = useState(false);\n const [provider, setProvider] = useState();\n const isMobileDevice =\n isMobile({ variant: VariantType.Browser, context: props.context.request }) === 'xs' ||\n isMobile({ variant: VariantType.Viewport, context: props.context.request }) === 'xs';\n const chatStyle = getChatStyling(props.config, minimized, isMobileDevice); // generates chat style objects based on configuration\n const handleMaximizeButtonClick = () => {\n setLoaded(true);\n setMinimized(false);\n setNewMessage(false);\n };\n const handleMinimizeButtonClick = () => {\n setMinimized(true);\n setNewMessage(false);\n };\n const handleCloseButtonClick = () => {\n setClosed(true);\n setLoaded(false);\n setMinimized(true);\n setNewMessage(false);\n setIsProactive(false);\n };\n useEffect(() => {\n if (loaded) {\n CommerceChatStore.getDirectLineToken(props)\n .then(directLineToken => {\n setToken(directLineToken);\n })\n .catch(e => {\n setToken(INVALID_TOKEN);\n props.telemetry.exception(e);\n });\n }\n }, [loaded]);\n useEffect(() => {\n (async () => {\n const contextProvider = new ContextProvider(props); // Generates context (provider) and checks for proactive chat triggers\n const prov = await contextProvider.init();\n if (contextProvider.data.enabled) {\n props.context.telemetry.debug(`[Chat] Proactive chat was enabled: '${contextProvider.data.enabled}'.`);\n // if proactive chat is triggered\n const timeout = contextProvider.data.timeout * 1000; // timeout is there only for WaitOnTime trigger\n setTimeout(() => {\n if (!loaded) {\n props.context.telemetry.debug(`[Chat] Proactive chat was loaded: ${loaded}.`);\n setProactiveMessage(contextProvider.data.message);\n setIsProactive(true);\n }\n }, timeout);\n }\n setProvider(() => prov);\n })().catch(e => props.telemetry.exception(e));\n }, []);\n useEffect(() => {\n if (closed) {\n setClosed(false);\n }\n }, [token, provider]);\n const isValidToken = (): boolean => {\n return `${token}` !== INVALID_TOKEN;\n };\n return (\n \n {minimized && (!isProactive || (isProactive && loaded)) && (\n \n )}\n {minimized && isProactive && !loaded && (\n
\n
\n {props.config.storeLogoURL && (\n logo\n )}\n
\n
\n
\n

{proactiveMessage}

\n \n
\n
\n )}\n {loaded && isValidToken() && (\n
\n
\n {props.config.storeLogoURL && (\n logo\n )}\n
\n \n
\n
\n \n
\n
\n )}\n {!isValidToken() &&
{props.config.unableToLoadChatMessage}
}\n
\n );\n};\n\nexport default Chat;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as React from 'react';\nimport Chat from './components/Chat';\nimport { IPvaChatConnectorViewProps } from './msdyn365-pva-chat-connector';\n\nexport default (props: IPvaChatConnectorViewProps) => {\n // Only for CDN loading check, won't be needed with npm package of Botframework-WebChat\n const [loaded, setLoaded] = React.useState(false);\n const p = {\n ...props\n };\n\n // Just to verify that CDN Chat Widget js lib is loaded\n // Remove this block if moving to npm package of Botframework-WebChat\n const interval = setInterval(() => {\n const t = typeof window;\n if (t !== 'undefined' && window.WebChat) {\n setLoaded(true);\n clearInterval(interval);\n }\n }, 100);\n\n return
{loaded && }
;\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { getPayloadObject, getTelemetryAttributes, IPayLoad, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nexport interface ICookieComplianceAcceptButton {\n acceptCookiesButtonText?: string;\n acceptCookiesButtonAriaLabel?: string;\n\n /**\n * The telemetry content\n */\n telemetryContent?: ITelemetryContent;\n onClose(): void;\n}\n\nexport const CookieComplianceAcceptButton: React.FC = ({\n acceptCookiesButtonText,\n acceptCookiesButtonAriaLabel,\n telemetryContent,\n onClose\n}) => {\n const payLoad: IPayLoad = getPayloadObject('click', telemetryContent!, 'accept cookies');\n const attributes = getTelemetryAttributes(telemetryContent!, payLoad);\n\n return (\n \n {acceptCookiesButtonText}\n \n );\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as Msdyn365 from '@msdyn365-commerce/core';\nimport { getPayloadObject, getTelemetryAttributes, ITelemetryContent, onTelemetryClick } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IActionLinksData } from '../cookie-compliance.props.autogenerated';\n\nexport interface ICookieComplianceLinks {\n links: IActionLinksData[];\n requestContext: Msdyn365.IRequestContext;\n telemetryContent: ITelemetryContent;\n onTextChange?(index: number): (event: Msdyn365.ContentEditableEvent) => void;\n}\n\n/**\n *\n * ContentCardLinks component.\n * @extends {React.PureComponent}\n */\nexport class CookieComplianceLinks extends React.PureComponent {\n public render(): JSX.Element {\n const editableLinks = this._mapEditableLinks(this.props.links);\n return (\n \n {editableLinks && editableLinks.length > 0 ? (\n \n ) : null}\n \n );\n }\n\n private readonly _mapEditableLinks = (linkdata: IActionLinksData[]): Msdyn365.ILinksData[] | null => {\n if (!linkdata || linkdata.length === 0) {\n return null;\n }\n const editableLinks: Msdyn365.ILinksData[] = [];\n linkdata.forEach((link, index) => {\n // Construct telemetry attribute to render\n const payLoad = getPayloadObject('click', this.props.telemetryContent, '', '');\n const linkText = link.linkText ? link.linkText : '';\n payLoad.contentAction.etext = linkText;\n const attributes = getTelemetryAttributes(this.props.telemetryContent, payLoad);\n const editableLink: Msdyn365.ILinksData = {\n ariaLabel: link.ariaLabel,\n className: 'link',\n linkText: link.linkText,\n linkUrl: link.linkUrl.destinationUrl,\n openInNewTab: link.openInNewTab,\n role: 'link',\n additionalProperties: attributes,\n onClick: onTelemetryClick(this.props.telemetryContent, payLoad, linkText)\n };\n editableLinks.push(editableLink);\n });\n\n return editableLinks;\n };\n}\n\nexport default CookieComplianceLinks;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as MsDyn365 from '@msdyn365-commerce/core';\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport { getTelemetryObject, IAlertProps, IModuleProps, INodeProps, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { CookieComplianceAcceptButton, CookieComplianceLinks } from './components';\nimport { ICookieComplianceConfig, ICookieComplianceProps } from './cookie-compliance.props.autogenerated';\n\n/**\n * Alert state interface.\n */\nexport interface IAlertState {\n visible: boolean;\n}\n\n/**\n * Cookie compliance view props interface.\n */\nexport interface ICookieComplianceViewProps extends ICookieComplianceProps<{}> {\n CookieComplianceBanner: IModuleProps;\n AlertProps: IAlertProps;\n Content: INodeProps;\n text?: React.ReactNode;\n links?: React.ReactNode;\n acceptButton?: React.ReactNode;\n className: string;\n onDismiss(): void;\n}\n\n/**\n *\n * CookieCompliance component.\n * @extends {React.PureComponent>}\n */\nclass CookieCompliance extends React.PureComponent, IAlertState> {\n private readonly cookieRef: React.RefObject;\n\n private readonly telemetryContent: ITelemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n\n public constructor(props: ICookieComplianceProps) {\n super(props);\n this.state = { visible: false };\n this.cookieRef = React.createRef();\n this._onDismiss = this._onDismiss.bind(this);\n }\n\n public componentDidMount(): void {\n const { context } = this.props;\n\n if (context && context.request && context.request.cookies && !context.request.cookies.isConsentGiven()) {\n this.setState({ visible: true });\n }\n }\n\n public render(): JSX.Element | null {\n const { config, context, resources, telemetry } = this.props;\n const { acceptCookiesButtonText, acceptCookiesAriaLabel } = resources;\n const { visible } = this.state;\n\n const isConsentGiven = context && context.request && context.request.cookies && context.request.cookies.isConsentGiven();\n let moduleConfig: ICookieComplianceConfig;\n\n try {\n moduleConfig = config;\n } catch (error) {\n telemetry.error(`Something went wrong while rendering the alert module ------${error}`);\n return
{error}
;\n }\n\n if (isConsentGiven && !visible) {\n this.props.context.telemetry.error('Cookie Compliance content is empty, module wont render.');\n return null;\n }\n\n if (!MsDyn365.msdyn365Commerce.isBrowser) {\n return <>;\n }\n\n const viewProps = {\n ...this.props,\n onDismiss: this._onDismiss,\n CookieComplianceBanner: {\n moduleProps: this.props,\n className: classnames('ms-cookie-compliance', moduleConfig.className),\n ref: this.cookieRef\n },\n AlertProps: {\n className: 'ms-cookie-compliance__container',\n color: 'white',\n fade: false\n },\n Content: {\n className: 'ms-cookie-compliance__content'\n },\n text: moduleConfig.content && (\n \n ),\n links: ArrayExtensions.hasElements(moduleConfig.actionLinks) && (\n \n ),\n acceptButton: (\n \n )\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n /**\n * Handles Link content change event.\n * @param linkIndex - Index of link in linkarray.\n * @returns Void.\n */\n public handleLinkTextChange = (linkIndex: number) => (event: MsDyn365.ContentEditableEvent): void => {\n if (this.props.config.actionLinks?.[linkIndex]) {\n this.props.config.actionLinks[linkIndex].linkText = event.target.value;\n }\n };\n\n /**\n * Handles content change event.\n * @param event - Event.\n */\n public handleContentChange = (event: MsDyn365.ContentEditableEvent): void => {\n this.props.config.content = event.target.value;\n };\n\n private _onDismiss(): void {\n const { context } = this.props;\n\n if (context && context.request && context.request.cookies) {\n context.request.cookies.setConsentCookie();\n location.reload();\n }\n this.setState({ visible: false });\n }\n}\n\nexport default CookieCompliance;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Alert, Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ICookieComplianceViewProps } from './cookie-compliance';\n\nconst CookieComplianceView: React.FC = props => {\n const { CookieComplianceBanner, AlertProps, Content, acceptButton, text, links } = props;\n\n return (\n \n \n \n {text}\n {links}\n \n {acceptButton}\n \n \n );\n};\nexport default CookieComplianceView;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { CategoryHierarchy } from '@msdyn365-commerce/commerce-entities';\nimport { AsyncResult } from '@msdyn365-commerce/retail-proxy';\n\nimport { ICategoryPromotionalContentData } from './navigation-menu.props.autogenerated';\n\nexport interface INavigationMenuData {\n categories: AsyncResult;\n}\n\nexport interface IMenuItemData {\n id?: number;\n linkText?: string;\n linkURL?: string;\n imageSource?: string;\n imageDestinationURL?: string;\n subMenu?: IMenuItemData[];\n promotionalContent?: ICategoryPromotionalContentData[];\n menuSource?: string;\n shouldOpenNewTab?: boolean;\n ariaLabel?: string;\n}\n\n/**\n *\n * Menu type index id.\n */\nexport enum MenuTypeIndexId {\n Cms = 1000,\n Retail = 5000\n}\n\n/**\n *\n * Menu type source.\n */\nexport enum MenuSource {\n Cms = 'Cms',\n Retail = 'Retail'\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { CategoryHierarchy } from '@msdyn365-commerce/commerce-entities';\nimport MsDyn365, { IActionContext, IGridSettings, IImageSettings, isEmptyOrNullObject } from '@msdyn365-commerce/core';\nimport { TextValueTranslation } from '@msdyn365-commerce/retail-proxy';\nimport { ArrayExtensions, getCategoryUrl } from '@msdyn365-commerce-modules/retail-actions';\nimport { addThrottledEvent, IModuleProps, INodeProps } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport { computed, observable } from 'mobx';\nimport * as React from 'react';\n\nimport { IMenuItemData, INavigationMenuData, MenuSource, MenuTypeIndexId } from './navigation-menu.data';\nimport { ICmsNavItemsData, INavigationMenuProps, ISubMenusData, navigationMenuSource } from './navigation-menu.props.autogenerated';\n\nexport interface INavigationMenuViewProps extends INavigationMenuProps {\n className: string;\n menuItemData: IMenuItemData[];\n Navigation: IModuleProps;\n MenuList: INodeProps;\n ListItem: INodeProps;\n Link: INodeProps;\n Button: INodeProps;\n Span: INodeProps;\n ImageContainer: INodeProps;\n MobileDescriptionContainer: INodeProps;\n MobileBackButton: INodeProps;\n MobileDescriptionLabel: INodeProps;\n imageSettings: IImageSettings;\n gridSettings: IGridSettings;\n isMobileView: boolean;\n DivContainer?: INodeProps;\n ImageDivContainer?: INodeProps;\n showCategoryImage?: boolean;\n showPromotionalContent?: boolean;\n}\n\nexport type GridSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n\nexport interface INavigationMenuState {\n isMobile: boolean;\n}\n\n/**\n *\n * NavigationMenu component.\n * @extends {React.PureComponent>}\n */\nclass NavigationMenu extends React.PureComponent, INavigationMenuState> {\n private static CMSItemIdInit: number = MenuTypeIndexId.Cms;\n\n private static RSItemIdInit: number = MenuTypeIndexId.Retail;\n\n private resizeThrottledEventHandler?: (event: Event) => void;\n\n private menuItemList: IMenuItemData[];\n\n private isRetail: boolean = true;\n\n private isCMS: boolean = true;\n\n @observable\n private viewport: GridSize;\n\n public static getFriendlyName(locale: string, nameTranslations?: TextValueTranslation[]): string | undefined {\n let nameTranslation: TextValueTranslation | undefined;\n if (locale && nameTranslations && nameTranslations.length > 0) {\n nameTranslation = nameTranslations.find(item => item.Language!.toLowerCase() === locale.toLowerCase());\n }\n\n return nameTranslation && nameTranslation.Text;\n }\n\n constructor(props: INavigationMenuProps) {\n super(props);\n this._updateViewport = this._updateViewport.bind(this);\n this.viewport =\n props.context.request && props.context.request.device && props.context.request.device.Type === 'Mobile' ? 'xs' : 'lg';\n this._setNavigationSource(this.props.config && this.props.config.navigationMenuSource);\n this.state = { isMobile: this.isMobile };\n this.menuItemList = [];\n }\n\n @computed get isMobile(): boolean {\n return this.viewport === 'xs' || this.viewport === 'sm';\n }\n\n public componentDidMount(): void {\n if (MsDyn365.isBrowser) {\n this.resizeThrottledEventHandler = addThrottledEvent(window, 'resize', this._updateViewport as EventListener);\n }\n this._updateViewport();\n }\n\n public componentWillUnmount(): void {\n if (MsDyn365.isBrowser) {\n window.removeEventListener('resize', this.resizeThrottledEventHandler!, false);\n }\n }\n\n public render(): JSX.Element | null {\n this.menuItemList = this._mapData();\n if (isEmptyOrNullObject(this.props.data)) {\n this.props.telemetry.error('Navigatiomenu returned null');\n return null;\n }\n\n const defaultImageSettings: IImageSettings = {\n viewports: {\n xs: { q: 'w=224&h=300&m=6', w: 0, h: 0 },\n xl: { q: 'w=224&h=300&m=6', w: 0, h: 0 }\n },\n lazyload: true\n };\n\n const viewProps = {\n ...this.props,\n ...this.state,\n imageSettings: defaultImageSettings,\n gridSettings: this.props.context.request.gridSettings,\n Navigation: {\n moduleProps: this.props,\n className: classnames('ms-nav', this.props.config.className, this.state.isMobile ? 'mobile-vp' : 'desktop-vp'),\n tag: 'nav',\n role: this.isMobile ? 'listbox' : 'navigation'\n },\n MenuList: {\n className: 'ms-nav__list',\n tag: 'ul',\n role: this.isMobile ? 'listbox' : 'menu'\n },\n ListItem: {\n className: 'ms-nav__list__item',\n role: 'presentation',\n tag: 'li'\n },\n showCategoryImage: this.props.config.displayCategoryImage ?? false,\n showPromotionalContent: this.props.config.displayPromotionalImage ?? false,\n Link: {\n tag: 'a',\n className: 'ms-nav__list__item__link',\n role: this.isMobile ? 'option' : 'menuitem'\n },\n DivContainer: {\n tag: 'div',\n className: 'ms-nav__feature'\n },\n ImageDivContainer: {\n tag: 'div',\n className: 'category-image',\n role: 'tabpanel'\n },\n Button: {\n className: 'ms-nav__list__item__button',\n tag: 'button',\n role: this.isMobile ? 'option' : 'menuitem',\n onClick: this.props\n },\n ImageContainer: {\n className: 'ms-nav__list__item__image'\n },\n Span: {\n className: 'ms-nav__list__item__span',\n tag: 'span'\n },\n MobileDescriptionContainer: {\n className: 'ms-nav__list__mobile__container'\n },\n MobileBackButton: {\n className: 'ms-nav__list__mobile__container__button',\n tag: 'button',\n 'aria-label': this.props.resources.backButtonAriaLabel,\n onClick: this.props\n },\n MobileDescriptionLabel: {\n className: 'ms-nav__list__mobile__container__span',\n tag: 'span'\n },\n isMobileView: this.state.isMobile,\n menuItemData: this.menuItemList,\n className: classnames('ms-nav', this.props.config.className)\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n private _mapData(): IMenuItemData[] {\n const { data, config } = this.props;\n const mergedData: IMenuItemData[] = [];\n if (this.isRetail && data && data.categories && data.categories.result && data.categories.result.length > 0) {\n data.categories.result.map((item: CategoryHierarchy, index) =>\n mergedData.push(this._constructMenuItemData(item, undefined, true, index, true))\n );\n }\n\n if (this.isCMS && config.cmsNavItems && config.cmsNavItems.length > 0) {\n config.cmsNavItems.map((item: ICmsNavItemsData, idx: number) =>\n mergedData.push(this._constructMenuItemData(undefined, item, false, idx + 1))\n );\n }\n return this._constructTopMenuItemData(mergedData);\n }\n\n private _constructTopMenuItemData(mergedData: IMenuItemData[]): IMenuItemData[] {\n const enableTopLevelMenu = this.props.config.enabletopMenu ?? false;\n if (!enableTopLevelMenu) {\n return mergedData;\n }\n const mergedRootMenuData: IMenuItemData[] = [];\n const topMenu = {\n id: 1,\n linkText: this.props.config.rootMenuNavigation ?? '...',\n linkURL: '#',\n imageSource: undefined,\n subMenu: mergedData\n } as IMenuItemData;\n mergedRootMenuData.push(topMenu);\n\n return mergedRootMenuData;\n }\n\n private _constructMenuItemData(\n retailItem?: CategoryHierarchy,\n cmsItem?: ICmsNavItemsData,\n isRetail?: boolean,\n idx?: number,\n addedAllMenu?: boolean\n ): IMenuItemData {\n const locale =\n this.props.context && this.props.context.request && this.props.context.request.locale\n ? this.props.context.request.locale\n : 'en-us';\n const { categoryPromotionalContent } = this.props.config;\n const cmsItemText = (cmsItem && cmsItem.linkText) || '';\n const { menuAriaLabel } = this.props.resources;\n\n // Filter category promotional data based on category name\n const promotionalData =\n retailItem &&\n categoryPromotionalContent?.filter(promoItem => promoItem.categoryName?.toLowerCase() === retailItem?.Name?.toLowerCase());\n\n // First check if image is available from promotional data else read from retail server\n let imageSource: string = 'empty';\n if (ArrayExtensions.hasElements(retailItem?.Images) && retailItem!.Images[0].Uri) {\n imageSource = retailItem!.Images[0].Uri;\n }\n if (isRetail) {\n return {\n id: NavigationMenu.RSItemIdInit++,\n linkText: NavigationMenu.getFriendlyName(locale, retailItem?.NameTranslations) ?? '',\n linkURL: retailItem?.Url,\n imageSource,\n subMenu: this._getNestedChildren(retailItem, imageSource, addedAllMenu),\n promotionalContent: this.props.config.displayPromotionalImage && promotionalData,\n menuSource: MenuSource.Retail,\n ariaLabel: `${NavigationMenu.getFriendlyName(locale, retailItem?.NameTranslations) ?? ''} ${menuAriaLabel}`\n } as IMenuItemData;\n }\n return {\n id: NavigationMenu.CMSItemIdInit++,\n linkText: cmsItemText,\n linkURL: (cmsItem && cmsItem.linkUrl && cmsItem.linkUrl.destinationUrl) || '',\n imageDestinationURL: (cmsItem && cmsItem.imageLink && cmsItem.imageLink.destinationUrl) || '',\n imageSource: (cmsItem && cmsItem.image && cmsItem.image.src) || '',\n subMenu: this._getCMSNestedChildren(cmsItem),\n menuSource: MenuSource.Cms,\n shouldOpenNewTab: cmsItem?.openInNewTab,\n ariaLabel: `${cmsItemText} ${menuAriaLabel}`\n } as IMenuItemData;\n }\n\n private _getNestedChildren(category?: CategoryHierarchy, imageSourceUrl?: string, addedAllMenu: boolean = false): IMenuItemData[] {\n const nestedChildren: IMenuItemData[] = [];\n if (!category || !category.Children || category.Children.length === 0) {\n return [];\n }\n if (!this.props.config.enabletopMenu && addedAllMenu) {\n nestedChildren.push({\n linkText: this.props.resources.allCategoryMenuText,\n imageSource: imageSourceUrl,\n linkURL: getCategoryUrl(category, (this.props.context as unknown) as IActionContext, {})\n });\n }\n category.Children.map((item: CategoryHierarchy, index) => {\n nestedChildren.push(this._constructMenuItemData(item, undefined, true, index, false));\n });\n return nestedChildren;\n }\n\n private _getCMSNestedChildren(category?: ICmsNavItemsData): IMenuItemData[] {\n const nestedChildren: IMenuItemData[] = [];\n\n if (!category || !category.subMenus || category.subMenus.length === 0) {\n return [];\n }\n\n category.subMenus.map((item: ISubMenusData, idx: number) => {\n nestedChildren.push(this._constructMenuItemData(undefined, item, false, idx));\n });\n return nestedChildren;\n }\n\n private readonly _setNavigationSource = (sourceType?: navigationMenuSource): void => {\n switch (sourceType) {\n case navigationMenuSource.retailServerOnly:\n this.isRetail = true;\n this.isCMS = false;\n break;\n case navigationMenuSource.cmsOnly:\n this.isRetail = false;\n this.isCMS = true;\n break;\n case navigationMenuSource.all:\n this.isRetail = true;\n this.isCMS = true;\n break;\n default:\n }\n };\n\n private _updateViewport(): void {\n this.viewport = this._getViewport();\n this.setState({ isMobile: this.isMobile });\n }\n\n private _getViewport(): GridSize {\n const { context } = this.props;\n\n // Always render in mobile viewport on a mobile device\n if (context.request && context.request.device && context.request.device.Type === 'Mobile') {\n return 'xs';\n }\n\n if (MsDyn365.isBrowser && window.innerWidth) {\n const gridSettings = context.request.gridSettings;\n if (gridSettings) {\n if (gridSettings.xs && window.innerWidth <= gridSettings.xs.w) {\n return 'xs';\n } else if (gridSettings.sm && window.innerWidth <= gridSettings.sm.w) {\n return 'sm';\n } else if (gridSettings.md && window.innerWidth <= gridSettings.md.w) {\n return 'md';\n } else if (gridSettings.lg && window.innerWidth <= gridSettings.lg.w) {\n return 'lg';\n }\n return 'xl';\n }\n }\n\n return 'xs';\n }\n}\n\nexport default NavigationMenu;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport MsDyn365, { IImageData, IImageSettings, Image } from '@msdyn365-commerce/core';\nimport { ArrayExtensions, generateImageUrl } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n getPayloadObject,\n getTelemetryAttributes,\n getTelemetryObject,\n IPayLoad,\n ITelemetryContent,\n Module,\n Node,\n onTelemetryClick\n} from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { INavigationMenuViewProps } from './navigation-menu';\nimport { IMenuItemData } from './navigation-menu.data';\n\ninterface INavigationState {\n parentMenu?: number;\n activeMenu?: number;\n categoryImage?: IImageData[] | null;\n mobileViewLabelText?: string;\n categoryImageAltText: string;\n}\n\n/**\n *\n * NavigationMenuView component.\n * @extends {React.PureComponent}\n */\nexport class NavigationMenuView extends React.PureComponent {\n private static isBackTrack: boolean = false;\n\n private currentLevel: number = 0;\n\n private readonly menuNode: React.RefObject;\n\n private readonly menuItemRef: React.RefObject;\n\n private readonly telemetryContent: ITelemetryContent;\n\n private readonly payLoad: IPayLoad;\n\n constructor(props: INavigationMenuViewProps) {\n super(props);\n this.menuNode = React.createRef();\n this.menuItemRef = React.createRef();\n this.state = { activeMenu: undefined, mobileViewLabelText: '', parentMenu: undefined, categoryImageAltText: '' };\n this._closeSubmenu = this._closeSubmenu.bind(this);\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n this.payLoad = getPayloadObject('click', this.telemetryContent, '', '');\n }\n\n public componentDidMount(): void {\n if (MsDyn365.isBrowser) {\n document.body.addEventListener('mousedown', this._handleClickOutside);\n document.body.addEventListener('focusout', this._handleFocusOutside);\n }\n }\n\n public componentDidUpdate(): void {\n if (this.menuItemRef.current?.children[0] && this.props.isMobileView) {\n (this.menuItemRef.current.children[0] as HTMLElement).focus();\n }\n }\n\n public componentWillUnmount(): void {\n if (MsDyn365.isBrowser) {\n document.body.removeEventListener('mousedown', this._handleClickOutside, false);\n document.body.removeEventListener('focusout', this._handleFocusOutside, false);\n }\n }\n\n public render(): JSX.Element | null {\n const { isMobileView, MenuList, MobileBackButton, MobileDescriptionContainer, MobileDescriptionLabel, Navigation } = this.props;\n\n this.currentLevel = 1;\n return (\n \n \n {isMobileView && this.state.activeMenu !== undefined && (\n \n \n {this.state.mobileViewLabelText}\n \n )}\n {this._renderDisplay()}\n \n \n );\n }\n\n private _renderDisplay(): JSX.Element[] {\n const { ListItem, menuItemData, isMobileView } = this.props;\n const { activeMenu } = this.state;\n const menuItemList: JSX.Element[] = [];\n\n if (isMobileView && activeMenu !== undefined && menuItemData.length > 0) {\n let menuItem: IMenuItemData = {};\n for (const menuItemDatum of menuItemData) {\n if (menuItemDatum && menuItemDatum.id === activeMenu) {\n menuItem = menuItemDatum;\n !NavigationMenuView.isBackTrack\n ? this.setState({ parentMenu: undefined })\n : this.setState({ parentMenu: undefined, mobileViewLabelText: menuItemDatum.linkText });\n break;\n }\n menuItem = this._getFromSubMenu(menuItemDatum) as IMenuItemData;\n if (menuItem && menuItem.id === activeMenu) {\n break;\n }\n }\n\n menuItem &&\n menuItemList.push(\n \n {' '}\n {this._createMenuItemList(menuItem)}{' '}\n \n );\n } else {\n menuItemData.forEach((item: IMenuItemData, index: number) => {\n menuItemList.push(\n \n {this._createMenuItemList(item)}\n \n );\n });\n }\n\n return menuItemList;\n }\n\n private _getFromSubMenu(item?: IMenuItemData): IMenuItemData | null {\n const subMenus = item && item.subMenu;\n if (subMenus && subMenus.length > 0) {\n for (let i = 0; i <= subMenus.length - 1; i++) {\n if (subMenus[i].id === this.state.activeMenu) {\n !NavigationMenuView.isBackTrack\n ? this.setState({ parentMenu: item?.id })\n : this.setState({ parentMenu: item && item.id, mobileViewLabelText: subMenus[i].linkText });\n return subMenus[i];\n }\n const found = this._getFromSubMenu(subMenus[i]);\n if (found) {\n return found;\n }\n }\n }\n this.props.context.telemetry.error('Submenu content is empty, module wont render.');\n return null;\n }\n\n private _createMenuItemList(menuItemData: IMenuItemData): JSX.Element | null {\n if (menuItemData && menuItemData.subMenu && menuItemData.subMenu.length > 0) {\n if (this.props.isMobileView && this.state.activeMenu !== undefined) {\n return this._renderSubMenu(menuItemData.subMenu, menuItemData.id, false);\n }\n return (\n <>\n {this._renderButtonMenuItem(menuItemData)}\n {this._renderSubMenu(menuItemData.subMenu, menuItemData.id, false)}\n \n );\n } else if (menuItemData && menuItemData.linkText && menuItemData.linkURL && menuItemData.linkURL.length > 0) {\n return this._renderLinkMenuItem(menuItemData, menuItemData.id, false, true);\n } else if (menuItemData && menuItemData.linkText && !menuItemData.linkURL) {\n return this._renderSpanMenuItem(menuItemData, menuItemData.id, true);\n }\n this.props.context.telemetry.error('Navigation menu content is empty, module wont render.');\n return null;\n }\n\n private _renderSubMenu(subMenus?: IMenuItemData[], activeMenu?: number, IsSubMenu?: boolean): JSX.Element | null {\n const { isMobileView, ListItem } = this.props;\n const enableMultiSupportMenu = this.props.config.enableMultilevelMenu || false;\n const multiLevelSupportedMenu = this.props.config.menuLevelSupport || 3;\n\n // Const isParentMenu:boolean= false;\n if (activeMenu && this.state.activeMenu !== activeMenu) {\n this.props.context.telemetry.error('Navigation Active menu content is empty, module wont render.');\n return null;\n }\n\n if (!subMenus || subMenus.length === 0) {\n this.props.context.telemetry.error('Navigation Submenu content is empty, module wont render.');\n return null;\n }\n\n let levelClassName: string = '';\n const menuOptions =\n subMenus &&\n subMenus.map((option: IMenuItemData, idx: number) => {\n const hasOptions = option.subMenu && option.subMenu.length > 0;\n let menuItem: JSX.Element | null;\n if (hasOptions && isMobileView) {\n menuItem = this._renderButtonMenuItem(option, activeMenu, idx);\n } else {\n menuItem = option.linkURL ? this._renderLinkMenuItem(option, idx) : this._renderSpanMenuItem(option);\n }\n\n let subMenu;\n const haveSubmenu = hasOptions && enableMultiSupportMenu && this.currentLevel <= Math.round(multiLevelSupportedMenu) - 1;\n if (haveSubmenu) {\n this.currentLevel++;\n levelClassName = enableMultiSupportMenu ? `level-${this.currentLevel.toString()}` : '';\n subMenu = this._renderSubMenu(option.subMenu, isMobileView ? option.id : undefined, true);\n }\n return (\n \n {menuItem}\n {subMenu}\n \n );\n });\n return this._renderMenu(levelClassName, menuOptions, activeMenu, IsSubMenu);\n }\n\n private _renderButtonMenuItem(option: IMenuItemData, activeMenu?: number, index?: number): JSX.Element | null {\n const { Button } = this.props;\n return (\n \n {option.linkText}\n \n );\n }\n\n private _renderLinkMenuItem(\n option: IMenuItemData,\n index?: number,\n hoverEffect: boolean = true,\n isParent: boolean = false\n ): JSX.Element | null {\n const { Link } = this.props;\n const linkText = option.linkText ? option.linkText : '';\n const imagesource = option.imageSource ? option.imageSource : '';\n this.payLoad.contentAction.etext = linkText;\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n return (\n \n {option.linkText}\n \n );\n }\n\n private _renderPromotionalLink(linkText?: string, linkUrl?: string): JSX.Element | null {\n const { Link } = this.props;\n this.payLoad.contentAction.etext = linkText;\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n if (linkText && linkUrl) {\n return (\n \n {linkText}\n \n );\n }\n return null;\n }\n\n private _renderSpanMenuItem(option: IMenuItemData, index?: number, isParent: boolean = false): JSX.Element | null {\n const { Span } = this.props;\n return (\n \n {option.linkText}\n \n );\n }\n\n private _renderMenu(level: string, menuOptions: JSX.Element[], currentItem?: number, submenu?: boolean): JSX.Element | null {\n const { DivContainer, MenuList, ImageDivContainer, showCategoryImage, showPromotionalContent, isMobileView } = this.props;\n const categoryImageDisplay =\n !isMobileView &&\n (showCategoryImage || showPromotionalContent) &&\n !ArrayExtensions.hasElements(this.state.categoryImage) &&\n !submenu;\n const promotionalContentDisplay =\n !isMobileView && showPromotionalContent && ArrayExtensions.hasElements(this.state.categoryImage) && !submenu;\n const DivContainerClass = this.currentLevel > 2 || categoryImageDisplay ? DivContainer!.className : 'ms-nav__deafult';\n this.currentLevel = 1;\n return (\n \n 2 &&\n 'navmenu-multi-level'\n )}\n >\n {menuOptions}\n \n {categoryImageDisplay &&\n this.state.categoryImage &&\n this.state.categoryImage.map(item => (\n \n {this.state.categoryImage && this._getCategoryImage(item)}\n {promotionalContentDisplay && this._renderPromotionalLink(item.altText, item.additionalProperties?.linkUrl)}\n \n ))}\n \n );\n }\n\n private readonly _updateCategoryImage = (categoryImageSrc: string, option: IMenuItemData) => () => {\n const linkText = option && option.linkText ? option.linkText : '';\n const promotionalImage: IImageData[] = [{ src: categoryImageSrc, altText: linkText }];\n\n // Read category and promotional image in one array\n if (ArrayExtensions.hasElements(option.promotionalContent)) {\n option.promotionalContent.map(item => {\n if (item && item.image) {\n const imageSrc = item.image.src;\n const promotionalItemImageSettings = item.image.imageSettings;\n promotionalImage.push({\n src: imageSrc,\n altText: item.text,\n imageSettings: promotionalItemImageSettings,\n additionalProperties: { linkUrl: item.linkUrl.destinationUrl }\n });\n }\n });\n }\n this.setState({\n categoryImage: promotionalImage.length > 0 ? promotionalImage : [{ src: 'empty' }],\n categoryImageAltText: linkText\n });\n };\n\n private readonly _handleDropdownToggle = (data: IMenuItemData, parentId?: number) => () => {\n if (!this.props.isMobileView) {\n this.setState({\n activeMenu: this.state.activeMenu && this.state.activeMenu === data.id! ? undefined : data.id!,\n parentMenu: parentId\n });\n if (this.props.showCategoryImage) {\n this._updateCategoryImage(data.imageSource!, data)();\n }\n } else {\n NavigationMenuView.isBackTrack = false;\n this.setState({\n activeMenu: data.id,\n mobileViewLabelText: data.linkText!,\n parentMenu: parentId\n });\n }\n };\n\n private readonly _handleGoBack = () => () => {\n NavigationMenuView.isBackTrack = true;\n this.setState({ activeMenu: this.state.parentMenu });\n };\n\n /**\n * Method to handle click outside of menu.\n * @param event -HTML event.\n */\n private readonly _handleClickOutside = (event: MouseEvent) => {\n if (this.menuNode.current && !this.menuNode.current.contains(event.target as Node)) {\n this.setState({\n activeMenu: undefined,\n mobileViewLabelText: '',\n categoryImage: null\n });\n }\n };\n\n /**\n * Method to handle click outside of menu.\n * @param event -HTML event.\n */\n private readonly _handleFocusOutside = (event: FocusEvent) => {\n if (this.menuNode.current && !this.menuNode.current.contains(event.relatedTarget as Node)) {\n this._closeSubmenu();\n }\n };\n\n /**\n * Checks to assign a ref for focus.\n * @param index -Sub menu list index.\n * @param mobileViewLabelText -Parent user clicked Sub menu list.\n * @param optionLinkText -Sub menu list.\n * @returns Ref.\n */\n private readonly _shouldAddFocusMenuRef = (index: number, mobileViewLabelText?: string, optionLinkText?: string) => {\n if (!NavigationMenuView.isBackTrack && index === 0) {\n return true;\n }\n if (!optionLinkText || !mobileViewLabelText) {\n return false;\n }\n return mobileViewLabelText === optionLinkText;\n };\n\n private _closeSubmenu(): void {\n if (!this.props.isMobileView) {\n this.setState({ activeMenu: undefined, categoryImage: null, mobileViewLabelText: '' });\n }\n }\n\n private readonly _getCategoryImage = (categoryImage?: IImageData): React.ReactNode | null => {\n if (!categoryImage || !categoryImage.src) {\n return null;\n }\n\n const categoryImageUrl = generateImageUrl(`${categoryImage.src}`, this.props.context.actionContext.requestContext.apiSettings);\n const defaultImageSettings: IImageSettings = {\n viewports: {\n xs: { q: 'w=300&h=250&m=8', w: 0, h: 0 },\n sm: { q: 'w=300&h=250&m=8', w: 0, h: 0 },\n md: { q: 'w=300&h=250&m=8', w: 0, h: 0 },\n lg: { q: 'w=300&h=250&m=8', w: 0, h: 0 }\n },\n lazyload: true\n };\n if (categoryImageUrl !== undefined) {\n return (\n \n );\n }\n return null;\n };\n}\n\nexport default NavigationMenuView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as Msdyn365 from '@msdyn365-commerce/core';\nimport { INavigationMenuViewProps } from '@msdyn365-commerce-modules/navigation-menu';\nimport { generateImageUrl } from '@msdyn365-commerce-modules/retail-actions';\nimport * as React from 'react';\n\nimport { INavigationMenuProps } from '../../definition-extensions/navigation-menu.ext.props.autogenerated';\n\n/**\n * INavigationMenuViewRootProps.\n */\nexport interface INavigationMenuViewRootProps {\n navProps: INavigationMenuViewProps & INavigationMenuProps<{}>;\n}\n\n/**\n * Represent navigation menu state interface.\n */\nexport interface INavigationState {\n parentMenu?: number;\n activeMenu?: number;\n categoryImage?: Msdyn365.IImageData[] | null;\n mobileViewLabelText?: string;\n drawerKeyValue: Msdyn365.IDictionary;\n isOnlyMobile: boolean;\n isNavOpen: boolean;\n}\n\n/**\n * NavMenuConstants enum.\n */\nexport enum NavMenuConstants {\n zero = 0,\n one = 1,\n two = 2,\n three = 3,\n four = 4,\n escapeKey = 27,\n rootMenu = 1\n}\n\n/**\n * GridSizes.\n */\nexport type GridSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n\n/**\n * Get category image.\n * @param props - Navigation menu props.\n * @param categoryImage - Category Image.\n * @param alttext - AltText String.\n * @returns Returns Node.\n */\nexport const getCategoryImage = (props: INavigationMenuViewRootProps, categoryImage: string, alttext: string): React.ReactNode | null => {\n const categoryImageUrl = generateImageUrl(`${categoryImage}`, props.navProps.context.actionContext.requestContext.apiSettings);\n const defaultImageSettings: Msdyn365.IImageSettings = {\n viewports: {\n xs: { q: 'w=162&h=162&m=8', w: 0, h: 0 },\n sm: { q: 'w=162&h=162&m=8', w: 0, h: 0 },\n md: { q: 'w=203&h=203&m=8', w: 0, h: 0 },\n lg: { q: 'w=203&h=203&m=8', w: 0, h: 0 }\n },\n lazyload: true\n };\n if (categoryImageUrl !== undefined) {\n const imageData: Msdyn365.IImageData = { src: categoryImageUrl };\n return (\n \n );\n }\n return null;\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as Msdyn365 from '@msdyn365-commerce/core';\nimport { IMenuItemData, MenuTypeIndexId } from '@msdyn365-commerce-modules/navigation-menu';\nimport { ArrayExtensions, StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n addThrottledEvent,\n Button,\n Collapse,\n Drawer,\n getPayloadObject,\n getTelemetryAttributes,\n getTelemetryObject,\n ICollapseProps,\n IPayLoad,\n isMobile,\n ITelemetryContent,\n Module,\n Node,\n onTelemetryClick,\n VariantType\n} from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport { computed } from 'mobx';\nimport * as React from 'react';\n\nimport { getCategoryImage, INavigationMenuViewRootProps, INavigationState, NavMenuConstants } from './navigation-menu-utilities';\n\n/**\n *\n * NavigationMenuRootDisabled component.\n * @extends {React.PureComponent}\n */\nexport class NavigationMenuRootDisabled extends React.PureComponent {\n private static isBackTrack: boolean = false;\n\n private readonly supportedLevel: number = NavMenuConstants.four;\n\n private currentLevel: number = NavMenuConstants.zero;\n\n private readonly menuNode: React.RefObject;\n\n private readonly menuItemRef: React.RefObject;\n\n private readonly escapeKey: number = NavMenuConstants.escapeKey;\n\n private readonly telemetryContent: ITelemetryContent;\n\n private readonly promotionalImage: Msdyn365.IImageData[] = [];\n\n private readonly payLoad: IPayLoad;\n\n private readonly attributes?: Msdyn365.IDictionary;\n\n private customResizeThrottledEventHandler?: (event: Event) => void;\n\n public constructor(props: INavigationMenuViewRootProps) {\n super(props);\n this.menuNode = React.createRef();\n this.menuItemRef = React.createRef();\n const { menuItemData } = this.props.navProps;\n if (ArrayExtensions.hasElements(menuItemData) && ArrayExtensions.hasElements(menuItemData[0].subMenu)) {\n const imagesource = menuItemData[0].subMenu[0].imageSource ? menuItemData[0].subMenu[0].imageSource : '';\n const linkText = menuItemData[0].subMenu[0].linkText ? menuItemData[0].subMenu[0].linkText : '';\n this.promotionalImage = [{ src: imagesource, altText: linkText }];\n\n // Read category and promotional image in one array\n if (ArrayExtensions.hasElements(menuItemData[0].subMenu[0].promotionalContent)) {\n menuItemData[0].subMenu[0].promotionalContent.map(item => {\n const imageSource = item.image.src;\n this.promotionalImage.push({\n src: imageSource,\n altText: item.text,\n additionalProperties: { linkUrl: item.linkUrl.destinationUrl }\n });\n return null;\n });\n }\n }\n\n this.state = {\n activeMenu: 1,\n mobileViewLabelText: '',\n parentMenu: undefined,\n drawerKeyValue: {},\n isOnlyMobile: this.isOnlyMobile,\n categoryImage: this.promotionalImage,\n isNavOpen: false\n };\n this.telemetryContent = getTelemetryObject(\n this.props.navProps.context.request.telemetryPageName!,\n this.props.navProps.friendlyName,\n this.props.navProps.telemetry\n );\n this.payLoad = getPayloadObject('click', this.telemetryContent, '', '');\n this.attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n }\n\n @computed public get isOnlyMobile(): boolean {\n return isMobile({ variant: VariantType.Browser, context: this.props.navProps.context.request }) === 'xs';\n }\n\n public componentDidMount(): void {\n this.customResizeThrottledEventHandler = addThrottledEvent(window, 'resize', this._customUpdateViewport as EventListener);\n document.addEventListener('keydown', (this._escFunction as unknown) as EventListener, false);\n this._customUpdateViewport();\n document.body.addEventListener('mousedown', this._handleClickOutside);\n }\n\n public componentDidUpdate(): void {\n if (this.menuItemRef.current?.children[0] && this.props.navProps.isMobileView) {\n (this.menuItemRef.current.children[0] as HTMLElement).focus();\n }\n }\n\n public componentWillUnmount(): void {\n window.removeEventListener('resize', this.customResizeThrottledEventHandler!, false);\n document.body.removeEventListener('mousedown', this._handleClickOutside, false);\n }\n\n public render(): JSX.Element | null {\n this.currentLevel = 1;\n const navbarKey = 'header-nav-mobile';\n return (\n \n {this.state.isOnlyMobile ? (\n this._renderMobileMenu()\n ) : (\n <>\n \n {this._renderCollapseMenu()}\n \n )}\n \n );\n }\n\n /**\n * Function to handle nav bar toggle.\n */\n private readonly _toggleNavBar = (): void => {\n this.setState(previousState => ({\n activeMenu: 1,\n isNavOpen: !previousState.isNavOpen\n }));\n };\n\n private _renderCollapseMenu(): JSX.Element | null {\n return (\n \n {this.state.isOnlyMobile ? this._renderMobileMenu() : this._renderDesktopMenu()}\n \n );\n }\n\n private _renderMobileMenu(): JSX.Element {\n const { MenuList, MobileBackButton, MobileDescriptionContainer, MobileDescriptionLabel, Navigation } = this.props.navProps;\n\n this.currentLevel = 1;\n return (\n \n \n {this.state.isOnlyMobile && this.state.activeMenu !== undefined && (\n \n \n {this.state.mobileViewLabelText}\n \n )}\n {this._renderDisplay()}\n \n \n );\n }\n\n private _renderDesktopMenu(): JSX.Element {\n const { MenuList, Navigation } = this.props.navProps;\n\n return (\n \n \n {this._renderDisplay()}\n
\n
\n
\n
\n );\n }\n\n private _renderDrawerLink(item: IMenuItemData): JSX.Element | null {\n if (item.linkURL && !StringExtensions.isNullOrWhitespace(item.linkURL)) {\n return this._renderLinkMenuItem(item);\n } else if (!item.linkURL) {\n return this._renderSpanMenuItem(item);\n }\n return null;\n }\n\n private _renderDisplay(): JSX.Element[] {\n const { ListItem } = this.props.navProps;\n const menuItemData: IMenuItemData[] = this.props.navProps.menuItemData;\n const { activeMenu } = this.state;\n const menuItemList: JSX.Element[] = [];\n\n if (ArrayExtensions.hasElements(menuItemData)) {\n menuItemData[0].id = 1;\n }\n\n if (this.state.isOnlyMobile && activeMenu !== undefined && ArrayExtensions.hasElements(menuItemData)) {\n const menuItem = this._getFromSubMenu(undefined, menuItemData);\n\n if (menuItem) {\n menuItemList.push(\n \n {` `}\n {this._createMenuItemList(menuItem)} {` `}\n \n );\n }\n } else {\n for (const [index, item] of menuItemData.entries()) {\n menuItemList.push(\n \n {this._createMenuItemList(item)}\n
\n );\n }\n }\n\n return menuItemList;\n }\n\n private _getFromSubMenu(parentMenuId?: number, menu?: IMenuItemData[]): IMenuItemData | null {\n if (!menu) {\n return null;\n }\n\n for (let index = 0; index <= menu.length - NavMenuConstants.one; index++) {\n const item: IMenuItemData = menu[Number(index)];\n\n if (item.id === this.state.activeMenu) {\n if (!NavigationMenuRootDisabled.isBackTrack) {\n this.setState({ parentMenu: parentMenuId });\n } else {\n this.setState({ parentMenu: parentMenuId, mobileViewLabelText: item.linkText });\n }\n return item;\n }\n const found = this._getFromSubMenu(item.id, item.subMenu);\n if (found) {\n return found;\n }\n }\n return null;\n }\n\n private _createMenuItemList(menuItemData: IMenuItemData): JSX.Element | null {\n if (ArrayExtensions.hasElements(menuItemData.subMenu)) {\n if (this.state.isOnlyMobile && this.state.activeMenu !== undefined) {\n return this._renderSubMenu(menuItemData.subMenu, menuItemData.id, false);\n }\n\n return (\n <>\n {this._renderButtonMenuItem(menuItemData)}\n {this._renderSubMenu(menuItemData.subMenu, menuItemData.id)}\n \n );\n } else if (menuItemData.linkURL && !StringExtensions.isNullOrWhitespace(menuItemData.linkURL)) {\n return this._renderLinkMenuItem(menuItemData, menuItemData.id);\n } else if (!menuItemData.linkURL && !(this.state.isOnlyMobile && this.state.activeMenu !== undefined)) {\n return this._renderSpanMenuItem(menuItemData);\n }\n\n return null;\n }\n\n private _renderSubMenu(subMenuArray?: IMenuItemData[], activeMenu?: number, isSubMenu?: boolean): JSX.Element | null {\n let subMenus: IMenuItemData[] | undefined = subMenuArray;\n if (activeMenu === NavMenuConstants.rootMenu) {\n subMenus = subMenuArray!.filter(subMenuItem => subMenuItem.id && subMenuItem.id >= MenuTypeIndexId.Retail);\n }\n\n const { ListItem } = this.props.navProps;\n const isEnableMultiSupportMenu = this.props.navProps.config.enableMultilevelMenu ?? false;\n const multiLevelSupportedMenu = this.props.navProps.config.menuLevelSupport ?? NavMenuConstants.three;\n\n if (activeMenu && this.state.activeMenu !== activeMenu) {\n this.props.navProps.context.telemetry.error('Navigation Active menu content is empty, module wont render.');\n return null;\n }\n\n if (!subMenus || !ArrayExtensions.hasElements(subMenus)) {\n this.props.navProps.context.telemetry.error('Navigation Submenu content is empty, module wont render.');\n return null;\n }\n\n let levelClassName: string = '';\n const menuOptions = subMenus.map((option: IMenuItemData, index: number) => {\n const hasOptions = option.subMenu && ArrayExtensions.hasElements(option.subMenu);\n let menuItem: JSX.Element | null;\n if (hasOptions && this.state.isOnlyMobile) {\n menuItem = this._renderButtonMenuItem(option, activeMenu, index);\n } else if (this.currentLevel === NavMenuConstants.one || !hasOptions) {\n menuItem = this.getMenuItem(option, index);\n } else {\n menuItem = null;\n }\n let subMenu;\n const isHavingSubmenu =\n hasOptions && isEnableMultiSupportMenu && this.currentLevel <= Math.round(multiLevelSupportedMenu) - NavMenuConstants.one;\n\n if (hasOptions && !this.state.isOnlyMobile) {\n if (this.currentLevel >= NavMenuConstants.two) {\n subMenu = this._renderSubMenuDrawer(option);\n } else if (this.currentLevel <= this.supportedLevel) {\n this.currentLevel++;\n levelClassName = `level-${this.currentLevel.toString()}`;\n subMenu = this._renderSubMenu(option.subMenu, undefined, true);\n }\n }\n\n if (isHavingSubmenu && this.state.isOnlyMobile) {\n this.currentLevel++;\n levelClassName = isEnableMultiSupportMenu ? `level-${this.currentLevel.toString()}` : '';\n subMenu = this._renderSubMenu(option.subMenu, option.id, true);\n }\n const imagesource = option.imageSource ? option.imageSource : '';\n return (\n \n {menuItem}\n {subMenu}\n \n );\n });\n return this._renderMenu(levelClassName, menuOptions, isSubMenu);\n }\n\n private getMenuItem(option: IMenuItemData, index: number): JSX.Element | null {\n let menuItem: JSX.Element | null;\n if (this.currentLevel === NavMenuConstants.one) {\n menuItem = option.linkURL ? this._renderLinkMenuItemLevelOne(option, index) : this._renderSpanMenuItem(option);\n } else {\n menuItem = option.linkURL ? this._renderLinkMenuItem(option, index) : this._renderSpanMenuItem(option);\n }\n return menuItem;\n }\n\n private _renderSubMenuDrawer(menuItem: IMenuItemData): JSX.Element | null {\n const levelClassName = `level-${this.currentLevel.toString()}`;\n const toggleButtonText = menuItem.linkText;\n const keyValue = this.state.drawerKeyValue;\n const buttonText = toggleButtonText !== undefined ? toggleButtonText : '';\n const keys = keyValue;\n const multiLevelSupportedMenu = this.props.navProps.config.menuLevelSupport ?? NavMenuConstants.three;\n\n let isDrawerOpen = false;\n if (keys[menuItem.id!]) {\n isDrawerOpen = true;\n }\n const colProps: ICollapseProps = { timeout: 0, isOpen: isDrawerOpen };\n\n return (\n \n
\n {menuItem.subMenu!.map((menuSubItem: IMenuItemData) => {\n if (ArrayExtensions.hasElements(menuSubItem.subMenu)) {\n this.currentLevel++;\n if (this.currentLevel < multiLevelSupportedMenu) {\n return this._renderSubMenuDrawer(menuSubItem);\n }\n }\n return this._renderDrawerLink(menuSubItem);\n })}\n
\n \n );\n }\n\n /**\n * Method to handle escape key event.\n * @param menuId -Number.\n * @param isDrawerOpen -Boolean.\n * @returns Void.\n */\n private readonly _bindDesktopCategoryClick = (menuId: number | undefined, isDrawerOpen: boolean) => (): void => {\n const { drawerKeyValue } = this.state;\n const newPair = { [menuId!]: !isDrawerOpen };\n this.setState({ drawerKeyValue: { ...drawerKeyValue, ...newPair } });\n };\n\n private _renderButtonMenuItem(option: IMenuItemData, activeMenu?: number, index?: number): JSX.Element | null {\n return (\n \n {option.linkText}\n \n );\n }\n\n private _renderLinkMenuItem(option: IMenuItemData, index?: number): JSX.Element | null {\n const { Link } = this.props.navProps;\n const linkText = option.linkText ? option.linkText : '';\n this.payLoad.contentAction.etext = linkText;\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n return (\n \n {option.linkText}\n \n );\n }\n\n private _renderLinkMenuItemLevelOne(option: IMenuItemData, index?: number, isHoverEffect: boolean = true): JSX.Element | null {\n const { Link } = this.props.navProps;\n const linkText = option.linkText ? option.linkText : '';\n const imagesource = option.imageSource ? option.imageSource : '';\n this.payLoad.contentAction.etext = linkText;\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n return (\n \n {option.linkText}\n \n );\n }\n\n private _renderPromotionalLink(linkText?: string, linkUrl?: string): JSX.Element | null {\n const { Link } = this.props.navProps;\n this.payLoad.contentAction.etext = linkText;\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n if (linkText && linkUrl) {\n return (\n \n {linkText}\n \n );\n }\n return null;\n }\n\n private _renderSpanMenuItem(option: IMenuItemData, index?: number): JSX.Element | null {\n const { Span } = this.props.navProps;\n return (\n \n {option.linkText}\n \n );\n }\n\n private _renderMenu(level: string, menuOptions: JSX.Element[], isSubmenu?: boolean): JSX.Element | null {\n const { DivContainer, MenuList, ImageDivContainer, showCategoryImage, showPromotionalContent } = this.props.navProps;\n const isCategoryImageDisplay =\n !this.state.isOnlyMobile &&\n showCategoryImage &&\n this.state.categoryImage !== null &&\n this.state.categoryImage !== undefined &&\n !isSubmenu;\n const isPromotionalContentDisplay =\n !this.state.isOnlyMobile && showPromotionalContent && ArrayExtensions.hasElements(this.state.categoryImage) && !isSubmenu;\n const divContainerClass =\n this.currentLevel > NavMenuConstants.two || isCategoryImageDisplay ? DivContainer!.className : 'ms-nav__deafult';\n this.currentLevel = NavMenuConstants.one;\n const menuLevelSupportClassName =\n isCategoryImageDisplay &&\n this.props.navProps.config.menuLevelSupport &&\n this.props.navProps.config.menuLevelSupport > NavMenuConstants.two &&\n 'navmenu-multi-level';\n\n const categoryImages = this.state.categoryImage?.filter(image => !StringExtensions.isNullOrWhitespace(image.src));\n const imagesContainerKey = categoryImages?.map(item => item.src).join('-');\n return (\n \n \n {menuOptions}\n \n
\n {isCategoryImageDisplay &&\n ArrayExtensions.hasElements(categoryImages) &&\n categoryImages.map(item => (\n \n {getCategoryImage(this.props, item.src ?? '', item.altText!.toString())}\n {isPromotionalContentDisplay &&\n this._renderPromotionalLink(item.altText, item.additionalProperties?.linkUrl)}\n \n ))}\n
\n \n );\n }\n\n /**\n * Handle Category image update.\n * @param categoryImageSource - Image source.\n * @param option - Menu Item data.\n * @returns Returns empty.\n */\n private readonly _updateCategoryImage = (categoryImageSource: string, option: IMenuItemData) => () => {\n const linkText = option.linkText ? option.linkText : '';\n const promotionalImage: Msdyn365.IImageData[] = [{ src: categoryImageSource, altText: linkText }];\n\n // Read category and promotional image in one array\n if (ArrayExtensions.hasElements(option.promotionalContent)) {\n for (const item of option.promotionalContent) {\n const imageSource = item.image.src;\n promotionalImage.push({\n src: imageSource,\n altText: item.text,\n additionalProperties: { linkUrl: item.linkUrl.destinationUrl }\n });\n }\n }\n this.setState({\n categoryImage: ArrayExtensions.hasElements(promotionalImage) ? promotionalImage : [{ src: 'empty' }]\n });\n };\n\n /**\n * Handle dropdown toggle.\n * @param data - Menu Item data.\n * @param parentId - Number.\n * @returns Returns empty.\n */\n private readonly _handleDropdownToggle = (data: IMenuItemData, parentId?: number) => () => {\n if (!this.state.isOnlyMobile) {\n this.setState({\n activeMenu: data.id,\n parentMenu: parentId\n });\n if (this.props.navProps.showCategoryImage) {\n this._updateCategoryImage(data.imageSource!, data)();\n }\n } else {\n NavigationMenuRootDisabled.isBackTrack = false;\n this.setState({\n activeMenu: data.id,\n mobileViewLabelText: data.linkText!,\n parentMenu: parentId\n });\n }\n };\n\n /**\n * Handle back navigation for menu items for mobile view.\n * @returns Returns empty.\n */\n private readonly _handleGoBack = () => () => {\n NavigationMenuRootDisabled.isBackTrack = true;\n this.setState(previousState => ({ activeMenu: previousState.parentMenu }));\n };\n\n /**\n * Function to close the nav menu on click on body.\n * @param event - MouseEvent.\n */\n private readonly _handleClickOutside = (event: MouseEvent) => {\n if (this.menuNode.current && !this.menuNode.current.contains(event.target as Node)) {\n if (!this.state.isOnlyMobile) {\n this.setState({ activeMenu: 1, mobileViewLabelText: '', isNavOpen: false });\n } else {\n this.setState({ activeMenu: undefined, mobileViewLabelText: '', isNavOpen: false });\n }\n }\n };\n\n /**\n * Checks to assign a ref for focus.\n * @param index -Sub menu list index.\n * @param mobileViewLabelText -Mobile view label text.\n * @param optionLinkText -Sub menu item link text.\n * @returns Boolean.\n */\n private readonly _shouldAddFocusMenuRef = (index: number, mobileViewLabelText?: string, optionLinkText?: string) => {\n const firstIndex: number = 0;\n if (!NavigationMenuRootDisabled.isBackTrack && index === firstIndex) {\n return true;\n }\n if (!optionLinkText || !mobileViewLabelText) {\n return false;\n }\n return mobileViewLabelText === optionLinkText;\n };\n\n /**\n * Function to handle nav menu close.\n */\n private readonly _closeNavMenu = (): void => {\n if (!this.state.isOnlyMobile) {\n this.setState({ activeMenu: 1, mobileViewLabelText: '', isNavOpen: false });\n } else {\n this.setState({ activeMenu: undefined, mobileViewLabelText: '', isNavOpen: false });\n }\n (this.menuNode.current?.children[0] as HTMLElement).focus();\n };\n\n /**\n * Function to close the nav menu on esc key.\n * @param event - Event.\n */\n private readonly _escFunction = (event: React.KeyboardEvent) => {\n if (event.keyCode === this.escapeKey && !this.state.isOnlyMobile && this.state.isNavOpen) {\n this.setState({ activeMenu: 1, mobileViewLabelText: '', isNavOpen: false });\n (this.menuNode.current?.children[0] as HTMLElement).focus();\n }\n };\n\n /**\n * Custom update viewport.\n */\n private readonly _customUpdateViewport = (): void => {\n this.setState({ isOnlyMobile: this.isOnlyMobile });\n };\n}\n\nexport default NavigationMenuRootDisabled;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as Msdyn365 from '@msdyn365-commerce/core';\nimport { IMenuItemData, MenuSource, MenuTypeIndexId } from '@msdyn365-commerce-modules/navigation-menu';\nimport { ArrayExtensions, StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n addThrottledEvent,\n Button,\n Collapse,\n Drawer,\n getPayloadObject,\n getTelemetryAttributes,\n getTelemetryObject,\n ICollapseProps,\n IPayLoad,\n isMobile,\n ITelemetryContent,\n Module,\n Node,\n onTelemetryClick,\n VariantType\n} from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport { computed } from 'mobx';\nimport * as React from 'react';\n\nimport { getCategoryImage, INavigationMenuViewRootProps, INavigationState, NavMenuConstants } from './navigation-menu-utilities';\n\n/**\n *\n * NavigationMenuRootEnabled component.\n * @extends {React.PureComponent}\n */\nexport class NavigationMenuRootEnabled extends React.PureComponent {\n private static isBackTrack: boolean = false;\n\n private readonly supportedLevel: number = NavMenuConstants.four;\n\n private currentLevel: number = NavMenuConstants.zero;\n\n private readonly menuNode: React.RefObject;\n\n private readonly menuItemRef: React.RefObject;\n\n private readonly escapeKey: number = NavMenuConstants.escapeKey;\n\n private readonly telemetryContent: ITelemetryContent;\n\n private readonly promotionalImage: Msdyn365.IImageData[] = [];\n\n private menuItemData: IMenuItemData[] = [];\n\n private readonly payLoad: IPayLoad;\n\n private readonly attributes?: Msdyn365.IDictionary;\n\n private customResizeThrottledEventHandler?: (event: Event) => void;\n\n public constructor(props: INavigationMenuViewRootProps) {\n super(props);\n this.menuNode = React.createRef();\n this.menuItemRef = React.createRef();\n const { menuItemData } = this.props.navProps;\n if (ArrayExtensions.hasElements(menuItemData) && ArrayExtensions.hasElements(menuItemData[0].subMenu)) {\n const imagesource = menuItemData[0].subMenu[0].imageSource ? menuItemData[0].subMenu[0].imageSource : '';\n const linkText = menuItemData[0].subMenu[0].linkText ? menuItemData[0].subMenu[0].linkText : '';\n this.promotionalImage = [{ src: imagesource, altText: linkText }];\n\n // Read category and promotional image in one array\n if (ArrayExtensions.hasElements(menuItemData[0].subMenu[0].promotionalContent)) {\n menuItemData[0].subMenu[0].promotionalContent.map(item => {\n const imageSource = item.image.src;\n this.promotionalImage.push({\n src: imageSource,\n altText: item.text,\n additionalProperties: { linkUrl: item.linkUrl.destinationUrl }\n });\n return null;\n });\n }\n }\n this.state = {\n activeMenu: NavMenuConstants.rootMenu,\n mobileViewLabelText: '',\n parentMenu: undefined,\n drawerKeyValue: {},\n isOnlyMobile: this.isOnlyMobile,\n categoryImage: this.promotionalImage,\n isNavOpen: false\n };\n\n this.telemetryContent = getTelemetryObject(\n this.props.navProps.context.request.telemetryPageName!,\n this.props.navProps.friendlyName,\n this.props.navProps.telemetry\n );\n this.payLoad = getPayloadObject('click', this.telemetryContent, '', '');\n this.attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n }\n\n @computed public get isOnlyMobile(): boolean {\n return isMobile({ variant: VariantType.Browser, context: this.props.navProps.context.request }) === 'xs';\n }\n\n public componentDidMount(): void {\n this.customResizeThrottledEventHandler = addThrottledEvent(window, 'resize', this._customUpdateViewport as EventListener);\n document.addEventListener('keydown', (this._escFunction as unknown) as EventListener, false);\n this._customUpdateViewport();\n document.body.addEventListener('mousedown', this._handleClickOutside);\n this._addShopAllLink();\n }\n\n public componentDidUpdate(): void {\n if (this.menuItemRef.current?.children[0] && this.props.navProps.isMobileView) {\n (this.menuItemRef.current.children[0] as HTMLElement).focus();\n }\n }\n\n public componentWillUnmount(): void {\n window.removeEventListener('resize', this.customResizeThrottledEventHandler!, false);\n document.body.removeEventListener('mousedown', this._handleClickOutside, false);\n }\n\n public render(): JSX.Element | null {\n this.currentLevel = NavMenuConstants.one;\n const navbarKey = 'header-nav-mobile';\n return (\n \n {this.state.isOnlyMobile ? (\n this._renderMobileMenu()\n ) : (\n <>\n \n {this._renderCollapseMenu()}\n \n )}\n \n );\n }\n\n /**\n * Function to handle nav bar toggle.\n */\n private readonly _toggleNavBar = (): void => {\n this.setState(previousState => ({\n activeMenu: NavMenuConstants.rootMenu,\n isNavOpen: !previousState.isNavOpen\n }));\n };\n\n private _renderCollapseMenu(): JSX.Element | null {\n return (\n \n {this.state.isOnlyMobile ? this._renderMobileMenu() : this._renderDesktopMenu()}\n \n );\n }\n\n private _renderMobileMenu(): JSX.Element {\n const { MobileBackButton, MobileDescriptionContainer, MobileDescriptionLabel, Navigation } = this.props.navProps;\n\n this.currentLevel = NavMenuConstants.one;\n return (\n \n \n {this.state.isOnlyMobile && this.state.activeMenu !== undefined && (\n \n \n {this.state.mobileViewLabelText}\n \n )}\n {this._renderDisplay()}\n \n \n );\n }\n\n private _renderDesktopMenu(): JSX.Element {\n const { Navigation } = this.props.navProps;\n return (\n \n \n {this._renderDisplay()}\n
\n
\n
\n
\n );\n }\n\n private _renderDrawerLink(item: IMenuItemData): JSX.Element | null {\n if (item.linkURL && !StringExtensions.isNullOrWhitespace(item.linkURL)) {\n return this._renderLinkMenuItem(item);\n } else if (!item.linkURL) {\n return this._renderSpanMenuItem(item);\n }\n return null;\n }\n\n private _renderDisplay(): JSX.Element[] {\n const { ListItem } = this.props.navProps;\n let menuItemData: IMenuItemData[] = [];\n if (this.state.isOnlyMobile) {\n menuItemData = this.menuItemData;\n } else {\n menuItemData = this.props.navProps.menuItemData;\n }\n const { activeMenu } = this.state;\n const menuItemList: JSX.Element[] = [];\n let cmsMenuData: IMenuItemData[] | undefined = [];\n let retailMenuItemData: IMenuItemData[] | undefined = [];\n const retailMenuData = JSON.parse(JSON.stringify(menuItemData)) as IMenuItemData[];\n\n for (const item of retailMenuData) {\n retailMenuItemData = item.subMenu!.filter(subMenuItem => subMenuItem.id && subMenuItem.id >= MenuTypeIndexId.Retail);\n item.subMenu = retailMenuItemData;\n }\n\n for (const item of menuItemData) {\n cmsMenuData = item.subMenu!.filter(subMenuItem => subMenuItem.id && subMenuItem.id < MenuTypeIndexId.Retail);\n }\n\n if (this.state.isOnlyMobile && activeMenu !== undefined && ArrayExtensions.hasElements(menuItemData)) {\n let menuItem: IMenuItemData | null = {};\n for (const menuItemDatum of menuItemData) {\n if (menuItemDatum.id === activeMenu) {\n menuItem = menuItemDatum;\n if (!NavigationMenuRootEnabled.isBackTrack) {\n this.setState({\n parentMenu: undefined\n });\n } else {\n this.setState({\n parentMenu: undefined,\n mobileViewLabelText: menuItemDatum.linkText\n });\n }\n break;\n }\n menuItem = this._getFromSubMenu(menuItemDatum);\n if (menuItem && menuItem.id === activeMenu) {\n break;\n }\n }\n\n if (menuItem) {\n menuItemList.push(\n \n {` `}\n {this._createMenuItemList(menuItem)} {` `}\n \n );\n }\n } else {\n for (const [index, item] of retailMenuData.entries()) {\n menuItemList.push(\n \n {this._createMenuItemList(item)}\n
\n );\n }\n\n for (const [index, item] of cmsMenuData.entries()) {\n menuItemList.push(\n \n {this._createMenuItemList(item)}\n \n );\n }\n }\n\n return menuItemList;\n }\n\n private _getFromSubMenu(item?: IMenuItemData): IMenuItemData | null {\n const subMenus = item?.subMenu;\n if (subMenus && ArrayExtensions.hasElements(subMenus)) {\n for (let index = 0; index <= subMenus.length - NavMenuConstants.one; index++) {\n const subMenu: IMenuItemData = subMenus[Number(index)];\n let parentMenuId = item?.id;\n\n if (subMenu.id === this.state.activeMenu) {\n if (parentMenuId === NavMenuConstants.rootMenu && subMenu.id! < MenuTypeIndexId.Retail) {\n parentMenuId = undefined;\n }\n\n if (!NavigationMenuRootEnabled.isBackTrack) {\n this.setState({ parentMenu: parentMenuId });\n } else {\n this.setState({ parentMenu: parentMenuId, mobileViewLabelText: subMenu.linkText });\n }\n return subMenu;\n }\n const found = this._getFromSubMenu(subMenu);\n if (found) {\n return found;\n }\n }\n }\n return null;\n }\n\n private _createMenuItemList(menuItemData: IMenuItemData): JSX.Element | null {\n if (ArrayExtensions.hasElements(menuItemData.subMenu)) {\n if (this.state.isOnlyMobile && this.state.activeMenu !== undefined) {\n return this._renderSubMenu(menuItemData.subMenu, menuItemData.id, false);\n }\n return (\n <>\n {this._renderButtonMenuItem(menuItemData)}\n {this._renderSubMenu(menuItemData.subMenu, menuItemData.id)}\n \n );\n } else if (menuItemData.linkURL && !StringExtensions.isNullOrWhitespace(menuItemData.linkURL)) {\n return this._renderLinkMenuItem(menuItemData, menuItemData.id);\n } else if (!menuItemData.linkURL) {\n return this._renderSpanMenuItem(menuItemData);\n }\n\n return null;\n }\n\n private _renderSubMenu(subMenuArray?: IMenuItemData[], activeMenu?: number, isSubMenu?: boolean): JSX.Element | null {\n let subMenus: IMenuItemData[] | undefined = subMenuArray;\n if (activeMenu === NavMenuConstants.rootMenu) {\n subMenus = subMenuArray!.filter(subMenuItem => subMenuItem.id && subMenuItem.id >= MenuTypeIndexId.Retail);\n }\n\n const { ListItem } = this.props.navProps;\n const isEnableMultiSupportMenu = this.props.navProps.config.enableMultilevelMenu ?? false;\n const multiLevelSupportedMenu = this.props.navProps.config.menuLevelSupport ?? NavMenuConstants.three;\n\n if (activeMenu && this.state.activeMenu !== activeMenu) {\n this.props.navProps.context.telemetry.error('Navigation Active menu content is empty, module wont render.');\n return null;\n }\n\n if (!subMenus || !ArrayExtensions.hasElements(subMenus)) {\n this.props.navProps.context.telemetry.error('Navigation Submenu content is empty, module wont render.');\n return null;\n }\n\n let levelClassName: string = '';\n const menuOptions = subMenus.map((option: IMenuItemData, index: number) => {\n const hasOptions = option.subMenu && ArrayExtensions.hasElements(option.subMenu);\n let menuItem: JSX.Element | null;\n if (hasOptions && this.state.isOnlyMobile) {\n menuItem = this._renderButtonMenuItem(option, activeMenu, index);\n } else if (this.currentLevel === NavMenuConstants.one || !hasOptions) {\n menuItem = this.getMenuItem(option, index);\n } else {\n menuItem = null;\n }\n let subMenu;\n const isHavingSubmenu =\n hasOptions && isEnableMultiSupportMenu && this.currentLevel <= Math.round(multiLevelSupportedMenu) - NavMenuConstants.one;\n\n if (hasOptions && !this.state.isOnlyMobile) {\n if (this.currentLevel >= NavMenuConstants.two) {\n subMenu = this._renderSubMenuDrawer(option);\n } else if (this.currentLevel <= this.supportedLevel - NavMenuConstants.one) {\n this.currentLevel++;\n levelClassName = `level-${this.currentLevel.toString()}`;\n subMenu = this._renderSubMenu(option.subMenu, undefined, true);\n }\n }\n if (isHavingSubmenu && this.state.isOnlyMobile) {\n this.currentLevel++;\n levelClassName = isEnableMultiSupportMenu ? `level-${this.currentLevel.toString()}` : '';\n subMenu = this._renderSubMenu(option.subMenu, option.id, true);\n }\n const imagesource = option.imageSource ? option.imageSource : '';\n return (\n \n {menuItem}\n {subMenu}\n \n );\n });\n return this._renderMenu(levelClassName, menuOptions, isSubMenu);\n }\n\n private getMenuItem(option: IMenuItemData, index: number): JSX.Element | null {\n let menuItem: JSX.Element | null;\n if (this.currentLevel === NavMenuConstants.one) {\n menuItem = option.linkURL ? this._renderLinkMenuItemLevelOne(option, index) : this._renderSpanMenuItem(option);\n } else {\n menuItem = option.linkURL ? this._renderLinkMenuItem(option, index) : this._renderSpanMenuItem(option);\n }\n return menuItem;\n }\n\n private _renderSubMenuDrawer(menuItem: IMenuItemData): JSX.Element | null {\n const levelClassName = `level-${this.currentLevel.toString()}`;\n const toggleButtonText = menuItem.linkText;\n const keyValue = this.state.drawerKeyValue;\n const buttonText = toggleButtonText !== undefined ? toggleButtonText : '';\n const keys = keyValue;\n const multiLevelSupportedMenu = this.props.navProps.config.menuLevelSupport ?? NavMenuConstants.three;\n\n let isDrawerOpen = false;\n if (keys[menuItem.id!]) {\n isDrawerOpen = true;\n }\n const colProps: ICollapseProps = { timeout: 0, isOpen: isDrawerOpen };\n return (\n \n
\n {menuItem.subMenu!.map((menuSubItem: IMenuItemData) => {\n if (ArrayExtensions.hasElements(menuSubItem.subMenu)) {\n this.currentLevel++;\n if (this.currentLevel < multiLevelSupportedMenu) {\n return this._renderSubMenuDrawer(menuSubItem);\n }\n }\n return this._renderDrawerLink(menuSubItem);\n })}\n
\n \n );\n }\n\n /**\n * Method to handle escape key event.\n * @param menuId -Number.\n * @param isDrawerOpen -Boolean.\n * @returns Void.\n */\n private readonly _bindDesktopCategoryClick = (menuId: number | undefined, isDrawerOpen: boolean) => (): void => {\n const { drawerKeyValue } = this.state;\n const newPair = { [menuId!]: !isDrawerOpen };\n this.setState({ drawerKeyValue: { ...drawerKeyValue, ...newPair } });\n };\n\n private _renderButtonMenuItem(option: IMenuItemData, activeMenu?: number, index?: number): JSX.Element | null {\n return (\n \n {option.linkText}\n \n );\n }\n\n private _renderLinkMenuItem(option: IMenuItemData, index?: number): JSX.Element | null {\n const { Link } = this.props.navProps;\n const linkText = option.linkText ? option.linkText : '';\n this.payLoad.contentAction.etext = linkText;\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n return (\n \n {option.linkText}\n \n );\n }\n\n private _renderLinkMenuItemLevelOne(option: IMenuItemData, index?: number, isHoverEffect: boolean = true): JSX.Element | null {\n const { Link } = this.props.navProps;\n const linkText = option.linkText ? option.linkText : '';\n const imagesource = option.imageSource ? option.imageSource : '';\n this.payLoad.contentAction.etext = linkText;\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n return (\n \n {option.linkText}\n \n );\n }\n\n private _renderPromotionalLink(linkText?: string, linkUrl?: string): JSX.Element | null {\n const { Link } = this.props.navProps;\n this.payLoad.contentAction.etext = linkText;\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n if (linkText && linkUrl) {\n return (\n \n {linkText}\n \n );\n }\n return null;\n }\n\n private _renderSpanMenuItem(option: IMenuItemData, index?: number): JSX.Element | null {\n const { Span } = this.props.navProps;\n return (\n \n {option.linkText}\n \n );\n }\n\n private _renderMenu(level: string, menuOptions: JSX.Element[], isSubmenu?: boolean): JSX.Element | null {\n const { DivContainer, ImageDivContainer, showCategoryImage, showPromotionalContent } = this.props.navProps;\n const isCategoryImageDisplay =\n !this.state.isOnlyMobile &&\n showCategoryImage &&\n this.state.categoryImage !== null &&\n this.state.categoryImage !== undefined &&\n !isSubmenu;\n const isPromotionalContentDisplay =\n !this.state.isOnlyMobile && showPromotionalContent && ArrayExtensions.hasElements(this.state.categoryImage) && !isSubmenu;\n const divContainerClass =\n this.currentLevel > NavMenuConstants.two || isCategoryImageDisplay ? DivContainer!.className : 'ms-nav__deafult';\n this.currentLevel = NavMenuConstants.one;\n const menuLevelSupportClassName =\n isCategoryImageDisplay &&\n this.props.navProps.config.menuLevelSupport &&\n this.props.navProps.config.menuLevelSupport > NavMenuConstants.two &&\n 'navmenu-multi-level';\n\n const categoryImages = this.state.categoryImage?.filter(image => !StringExtensions.isNullOrWhitespace(image.src));\n const imagesContainerKey = categoryImages?.map(item => item.src).join('-');\n return (\n \n \n {menuOptions}\n \n
\n {isCategoryImageDisplay &&\n ArrayExtensions.hasElements(categoryImages) &&\n categoryImages.map(item => (\n \n {getCategoryImage(this.props, item.src ?? '', item.altText!.toString())}\n {isPromotionalContentDisplay &&\n this._renderPromotionalLink(item.altText, item.additionalProperties?.linkUrl)}\n \n ))}\n
\n \n );\n }\n\n /**\n * Handle Category image update.\n * @param categoryImageSource - Image source.\n * @param option - Menu Item data.\n * @returns Returns empty.\n */\n private readonly _updateCategoryImage = (categoryImageSource: string, option: IMenuItemData) => () => {\n const linkText = option.linkText ? option.linkText : '';\n const promotionalImage: Msdyn365.IImageData[] = [{ src: categoryImageSource, altText: linkText }];\n\n // Read category and promotional image in one array\n if (ArrayExtensions.hasElements(option.promotionalContent)) {\n for (const item of option.promotionalContent) {\n const imageSource = item.image.src;\n promotionalImage.push({\n src: imageSource,\n altText: item.text,\n additionalProperties: { linkUrl: item.linkUrl.destinationUrl }\n });\n }\n }\n this.setState({\n categoryImage: ArrayExtensions.hasElements(promotionalImage) ? promotionalImage : [{ src: 'empty' }]\n });\n };\n\n /**\n * Handle dropdown toggle.\n * @param data - Menu Item data.\n * @param parentId - Number.\n * @returns Returns empty.\n */\n private readonly _handleDropdownToggle = (data: IMenuItemData, parentId?: number) => () => {\n if (!this.state.isOnlyMobile) {\n this.setState({\n activeMenu: data.id,\n parentMenu: parentId\n });\n if (this.props.navProps.showCategoryImage) {\n this._updateCategoryImage(data.imageSource!, data)();\n }\n } else {\n NavigationMenuRootEnabled.isBackTrack = false;\n this.setState({\n activeMenu: data.id,\n mobileViewLabelText: data.linkText!,\n parentMenu: parentId\n });\n }\n };\n\n /**\n * Handle back navigation for menu items for mobile view.\n * @returns Returns empty.\n */\n private readonly _handleGoBack = () => () => {\n NavigationMenuRootEnabled.isBackTrack = true;\n this.setState(previousState => ({ activeMenu: previousState.parentMenu }));\n };\n\n /**\n * Function to close the nav menu on click on body.\n * @param event - MouseEvent.\n */\n private readonly _handleClickOutside = (event: MouseEvent) => {\n if (this.menuNode.current && !this.menuNode.current.contains(event.target as Node)) {\n if (!this.state.isOnlyMobile) {\n this.setState({ activeMenu: NavMenuConstants.rootMenu, mobileViewLabelText: '', isNavOpen: false });\n } else {\n this.setState({ activeMenu: undefined, mobileViewLabelText: '', isNavOpen: false });\n }\n }\n };\n\n /**\n * Add shop all link for Mobile submenu.\n */\n private readonly _addShopAllLink = (): void => {\n const { menuItemData } = this.props.navProps;\n this.menuItemData = menuItemData;\n if (ArrayExtensions.hasElements(menuItemData) && ArrayExtensions.hasElements(menuItemData[0].subMenu)) {\n this.menuItemData[0].subMenu?.map(item => {\n const shopAllObject = {};\n Object.assign(shopAllObject, { imageSource: item.imageSource });\n Object.assign(shopAllObject, { linkText: this.props.navProps.resources.allCategoryMenuText });\n Object.assign(shopAllObject, { linkURL: item.linkURL });\n if (ArrayExtensions.hasElements(item.subMenu) && item.menuSource === MenuSource.Retail) {\n item.subMenu.unshift(shopAllObject);\n }\n return item;\n });\n }\n };\n\n /**\n * Checks to assign a ref for focus.\n * @param index -Sub menu list index.\n * @param mobileViewLabelText -Mobile view label text.\n * @param optionLinkText -Sub menu item link text.\n * @returns Boolean.\n */\n private readonly _shouldAddFocusMenuRef = (index: number, mobileViewLabelText?: string, optionLinkText?: string) => {\n const firstIndex: number = 0;\n if (!NavigationMenuRootEnabled.isBackTrack && index === firstIndex) {\n return true;\n }\n if (!optionLinkText || !mobileViewLabelText) {\n return false;\n }\n return mobileViewLabelText === optionLinkText;\n };\n\n /**\n * Function to handle nav menu close.\n */\n private readonly _closeNavMenu = (): void => {\n if (!this.state.isOnlyMobile) {\n this.setState({ activeMenu: NavMenuConstants.rootMenu, mobileViewLabelText: '', isNavOpen: false });\n } else {\n this.setState({ activeMenu: undefined, mobileViewLabelText: '', isNavOpen: false });\n }\n };\n\n /**\n * Function to close the nav menu on esc key.\n * @param event - Event.\n */\n private readonly _escFunction = (event: React.KeyboardEvent) => {\n if (event.keyCode === this.escapeKey && !this.state.isOnlyMobile && this.state.isNavOpen) {\n this.setState({ activeMenu: NavMenuConstants.rootMenu, mobileViewLabelText: '', isNavOpen: false });\n }\n };\n\n /**\n * Custom update viewport.\n */\n private readonly _customUpdateViewport = (): void => {\n this.setState({ isOnlyMobile: this.isOnlyMobile });\n };\n}\n\nexport default NavigationMenuRootEnabled;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { INavigationMenuViewProps } from '@msdyn365-commerce-modules/navigation-menu';\nimport * as React from 'react';\n\nimport { INavigationMenuProps } from '../definition-extensions/navigation-menu.ext.props.autogenerated';\nimport NavigationMenuRootDisabled from './components/navigation-menu-root-disabled';\nimport NavigationMenuRootEnabled from './components/navigation-menu-root-enabled';\n\n/**\n * Render the Navigation menu.\n * @param props - The navigation menu view props.\n * @returns Return HTML having INavigationMenuViewProps props with navigation menu.\n */\nconst navigationMenuView = (props: INavigationMenuViewProps & INavigationMenuProps<{}>): JSX.Element => {\n if (props.config.enabletopMenu) {\n return ;\n }\n\n return ;\n};\n\nexport default navigationMenuView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport {\n IGroup,\n IGroupDelivery,\n IGroups,\n IHelp,\n IOrderDetailsViewProps,\n IOrderInformation,\n IOrderSummary,\n IPaymentMethods,\n ISalesLine\n} from '@msdyn365-commerce-modules/order-management';\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nexport const OrderInfomation: React.FC = ({\n orderInformationProps,\n salesId,\n receiptId,\n createdDate,\n count,\n amount,\n channelReferenceId,\n channelName,\n channelAddress\n}) => (\n \n {channelName}\n {channelAddress}\n {salesId}\n {receiptId}\n {createdDate}\n {count}\n {amount}\n {channelReferenceId}\n \n);\n\nexport const SalesLine: React.FC = ({ salesLineProps, salesLine, buyAgainButton, errors }) => (\n \n {salesLine}\n {buyAgainButton}\n {errors}\n \n);\n\nexport const GroupDelivery: React.FC = ({ deliveryProps, heading, count }) => (\n \n {heading}\n {count}\n \n);\n\nexport const Group: React.FC = ({ groupProps, delivery, address, salesLinesProps, salesLines, isCashAndCarryTransaction }) => (\n \n {delivery && }\n \n {salesLines && (\n \n {salesLines.map(salesLine => (\n \n {!isCashAndCarryTransaction && salesLine.salesStatus}\n {salesLine.data.deliveryType === 'ship' && salesLine.data.shipment ? salesLine.trackingInfo : null}\n \n \n ))}\n \n )}\n {!delivery.showTimeslot && address}\n {delivery.showTimeslot && (\n \n {address}\n {delivery.pickupDateTimeslot}\n \n )}\n \n \n);\n\nexport const Groups: React.FC = ({ groupsProps, groups }) => (\n \n {groups.map((group, index) => (\n \n ))}\n \n);\n\nexport const OrderSummary: React.FC = ({\n orderSummaryProps,\n heading,\n subtotal,\n shipping,\n tax,\n totalAmount,\n earnedPoints\n}) => (\n \n {heading}\n {subtotal}\n {shipping}\n {tax}\n {totalAmount}\n {earnedPoints}\n \n);\n\nexport const Payment: React.FC = ({ paymentMethodsProps, title, methods }) => (\n \n {title}\n {methods}\n \n);\n\nexport const Help: React.FC = ({ helpProps, needHelpLabel, helpLineNumberLabel, contactNumber }) => (\n \n {needHelpLabel}\n {helpLineNumberLabel}\n {contactNumber}\n \n);\n\nconst OrderDetailsView: React.FC = ({\n moduleProps,\n viewModes,\n tableViewActions,\n table,\n placedBy,\n heading,\n alert,\n loading,\n orderInfomation,\n orderSummary,\n payment,\n help,\n groups\n}) => {\n return (\n \n {placedBy}\n {heading}\n {alert}\n {loading}\n {orderInfomation && }\n {tableViewActions}\n {viewModes}\n {table}\n {groups && }\n \n {orderSummary && }\n {payment && }\n \n {help && }\n \n );\n};\n\nexport default OrderDetailsView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IImageSettings, Image, RichTextComponent } from '@msdyn365-commerce/core';\nimport { IWriteReviewData, IWriteReviewViewProps } from '@msdyn365-commerce-modules/ratings-reviews';\nimport { generateImageUrl } from '@msdyn365-commerce-modules/retail-actions';\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IWriteReviewProps } from '../definition-extensions/write-review.ext.props.autogenerated';\n\n/**\n * Render Product Image.\n * @param props - WriteReview ViewProps.\n * @returns JSX Element.\n */\nconst renderProductImage = (props: IWriteReviewViewProps & IWriteReviewProps): JSX.Element => {\n const primaryImageSource = props.data.product.result?.PrimaryImageUrl;\n const imageUrl = generateImageUrl(primaryImageSource, props.context.request.apiSettings);\n const defaultImageSettings: IImageSettings = {\n viewports: {\n xs: { q: 'w=111&h=111&m=6', w: 111, h: 111 },\n sm: { q: 'w=130&h=130&m=6', w: 130, h: 130 },\n md: { q: 'w=130&h=130&m=6', w: 130, h: 130 },\n lg: { q: 'w=130&h=130&m=6', w: 130, h: 130 },\n xl: { q: 'w=130&h=130&m=6', w: 130, h: 130 }\n },\n lazyload: true,\n cropFocalRegion: true\n };\n\n return (\n \n );\n};\n\n/**\n * Render Product Description.\n * @param props - WriteReview ViewProps.\n * @returns JSX Element.\n */\nconst renderProductDescription = (props: IWriteReviewViewProps & IWriteReviewProps): JSX.Element => {\n const product = props.data.product.result;\n return (\n \n
{renderProductImage(props)}
\n
\n
{product?.Name}
\n
{product?.ItemId}
\n
\n
\n );\n};\n\n/**\n * Create Write Review Modal.\n * @param props - WriteReview ViewProps.\n * @returns JSX Element.\n */\nconst createReviewModal = (props: IWriteReviewViewProps & IWriteReviewProps): JSX.Element => {\n const { resources, moduleProps, reviewModal } = props;\n\n return (\n \n {reviewModal.modalHeader}\n \n \n \n {renderProductDescription(props)}\n \n
{resources.selectRatingLabel}
\n {reviewModal.rating}\n
\n
\n \n {resources.reviewTitleLabel}\n {reviewModal.titleInput}\n \n \n {resources.reviewTextLabel}\n {reviewModal.textInput}\n \n {reviewModal.privacyPolicyUrl}\n {reviewModal.error}\n
\n
\n \n {reviewModal.submitButton}\n {reviewModal.cancelButton}\n \n
\n );\n};\n\n/**\n * WriteReview view.\n * @param props - WriteReview ViewProps.\n * @returns WriteReview view module.\n */\nconst WriteReviewView: React.FC> = props => {\n const { config, heading, signInMessage, signInButton, modalToggle, moduleProps } = props;\n const { paragraph } = config;\n const isAuthenticated = props.context.request.user.isAuthenticated;\n const text = paragraph && ;\n\n return (\n \n {heading}\n {!isAuthenticated ? (\n <>\n {signInMessage}\n {signInButton}\n \n ) : (\n <>\n {text}\n {modalToggle}\n {createReviewModal(props)}\n \n )}\n \n );\n};\n\nexport default WriteReviewView;\n"],"names":["_ref","id","className","text","ariaLabel","disabled","onClick","React","Button","type","message","errorClassName","classnames","role","GetMaxLength","maxLength","parsedMaxLength","Number","parseInt","isNaN","value","pattern","readOnly","onChange","undefined","forId","htmlFor","successClassName","SignUp","constructor","props","super","moduleClassName","handleHeadingChange","event","this","config","heading","target","handleParagraphChange","disclaimer","_onInit","_updateErrorMessage","_prePopulateData","initializationTimer","setInterval","_isInitializationSuccessful","setTimeout","clearInterval","window","isInitialized","resources","map","obj","PRE","_htmlDecode","ID","toLowerCase","isEmailVerificationRequried","templateVersion","email","emailRegex","PAT","VERIFY","isGivenNameVerificationRequried","givenName","surname","isSurnameVerificationRequried","UX_INPUT_TYPE","PAT_DESC","invalidEmailAddressError","errorMessages","required_field","requiredFieldMissingError","Object","assign","getValue","v1Value","v2Value","EmailRegex","defaultRegex","source","componentDidMount","componentDidUpdate","shouldComponentUpdate","nextProps","nextState","state","data","render","viewProps","_objectSpread","viewState","isShowLoading","signUp","moduleProps","loading","modal","tag","Modal","isOpen","modalBody","ModalBody","icon","SignUpLoadingIconComponent","SignUpLoadingMessageComponent","loadingMessage","defaultAADConainer","style","display","aadConainer","Msdyn365","editProps","onEdit","requestContext","context","request","signUpLocalAccount","_renderLocalAccount","renderView","str","e","document","createElement","innerHTML","childNodes","length","nodeValue","localAccount","items","_renderInput","firstNameLabelText","firstNameMaxLength","lastNameLabelText","lastNameMaxLength","emailAddressLabelText","emailVerification","isRequired","verificationCodeLabelText","verificationControlWrapper","buttonWrapper","buttons","SignUpButtonComponent","key","sendCodeButtonAriaLabel","sendCodeButtonText","verifyCodeButtonAriaLabel","verifyCodeButtonText","resendCodeButtonAriaLabel","resendCodeButtonText","changeEmailButtonAriaLabel","changeEmailButtonText","successMessage","SignUpSuccessComponent","verificationCodeSendSuccess","emailAddressVerifiedSuccess","errorMessage","SignUpErrorComponent","retryError","retryNotAllowedError","throttledError","codeExpiredError","serverError","invalidEmailError","givenNameVerification","requiredFieldMissingSummaryError","surnameVerification","signUpButtonArialabel","signUpButtonText","cancelButtonArialabel","cancelButtonText","fieldIncorrectError","labelText","cssClassName","wrapper","label","SignUpLabelComponent","input","SignUpInputComponent","__decorate","observable","observer","SignUpItem","Node","SignUpEmailVerification","_ref2","button","SignUpGivenNameVerificationComponent","_ref3","SignUpSurnameVerificationComponent","_ref4","SignUpLoading","_ref6","Module","_ref5","item","error","index","LocalAccount","NavMenuConstants","getCategoryImage","categoryImage","alttext","categoryImageUrl","generateImageUrl","navProps","actionContext","apiSettings","defaultImageSettings","viewports","xs","q","w","h","sm","md","lg","lazyload","_props$navProps$confi","imageData","src","gridSettings","imageSettings","categoryImageSettings","loadFailureBehavior","altText","NavigationMenuRootDisabled","supportedLevel","four","currentLevel","zero","escapeKey","promotionalImage","_toggleNavBar","setState","previousState","activeMenu","isNavOpen","_createDesktopHeaderLinks","_this$props$navProps","menuItemData","link","_link$subMenu","subMenu","menuItemId","linkText","_createLink","editableLink","linkUrl","linkURL","openInNewTab","_bindDesktopCategoryClick","menuId","isDrawerOpen","drawerKeyValue","newPair","_updateCategoryImage","categoryImageSource","option","ArrayExtensions","hasElements","promotionalContent","imageSource","image","push","additionalProperties","destinationUrl","_handleDropdownToggle","parentId","isOnlyMobile","isBackTrack","mobileViewLabelText","parentMenu","showCategoryImage","_handleGoBack","_handleClickOutside","menuNode","current","contains","_shouldAddFocusMenuRef","optionLinkText","_closeNavMenu","_this$menuNode$curren","children","focus","_escFunction","_this$menuNode$curren2","keyCode","_customUpdateViewport","menuItemRef","imagesource","telemetryContent","getTelemetryObject","telemetryPageName","friendlyName","telemetry","payLoad","getPayloadObject","screenMode","isMobile","variant","VariantType","Browser","customResizeThrottledEventHandler","addThrottledEvent","addEventListener","body","_this$menuItemRef$cur","isMobileView","componentWillUnmount","removeEventListener","ref","title","hamburgerAriaLabel","attributes","_renderCollapseMenu","Collapse","_renderMobileMenu","_renderDesktopMenu","MenuList","MobileBackButton","MobileDescriptionContainer","MobileDescriptionLabel","Navigation","tabIndex","_renderDisplay","_renderDrawerLink","StringExtensions","isNullOrWhitespace","_renderLinkMenuItem","_renderSpanMenuItem","ListItem","menuItemList","menuItem","_getFromSubMenu","_createMenuItemList","entries","_menuItem$subMenu","subMenuItem","parentMenuId","menu","one","found","_renderSubMenu","_renderButtonMenuItem","subMenuArray","isSubMenu","_this$props$navProps$","_this$props$navProps$2","subMenus","rootMenu","filter","MenuTypeIndexId","Retail","isEnableMultiSupportMenu","enableMultilevelMenu","multiLevelSupportedMenu","menuLevelSupport","three","levelClassName","menuOptions","hasOptions","getMenuItem","isHavingSubmenu","Math","round","two","_renderSubMenuDrawer","toString","onMouseOver","_renderMenu","_renderLinkMenuItemLevelOne","_this$props$navProps$3","toggleButtonText","buttonText","keys","colProps","timeout","Drawer","collapseProps","openGlyph","closeGlyph","glyphPlacement","onToggle","menuSubItem","Link","contentAction","etext","getTelemetryAttributes","href","shouldOpenNewTab","onTelemetryClick","isHoverEffect","arguments","_renderPromotionalLink","Span","level","isSubmenu","_this$state$categoryI","DivContainer","ImageDivContainer","showPromotionalContent","isCategoryImageDisplay","isPromotionalContentDisplay","divContainerClass","menuLevelSupportClassName","categoryImages","imagesContainerKey","join","_item$src","_item$additionalPrope","computed","NavigationMenuRootEnabled","_addShopAllLink","_this$menuItemData$0$","shopAllObject","allCategoryMenuText","menuSource","MenuSource","unshift","cmsMenuData","retailMenuItemData","retailMenuData","JSON","parse","stringify","menuItemDatum","enabletopMenu","html5EmailRegex","SignUpText","LoyaltySignUp","handleMemberHeadingChange","memberHeading","_issueLoyalty","user","isAuthenticated","clicked","IssueLoyaltyInput","issueLoyalty","then","MsDyn365","isBrowser","location","catch","debug","TelemetryConstant","SignIn","loyaltySignInAttributes","loyaltySignUpAttributes","LoyaltyDetailLink","loyaltyDetailsLinkAttributes","LoyaltyTermsLink","loyaltyTermsLinkAttributes","_data$customerInforma","_this$props$context$a","signInUrl","termsUrl","loyaltyJoinUrl","origin","signInurl","completeClass","classname","loyaltyCard","hasLoyaltyAccount","result","CardTenderTypeValue","customerInformation","invalidAsyncCustomerState","app","canRenderAsyncCustomerDataAsUnmodifiable","IsAsyncCustomer","infoMessageBar","accountProcessingPendingInfoMessage","params","isEditor","status","signInLink","joinLoyaltyButtonText","signUpText","loyaltyProgramText","signUpButton","detailsLink","viewLoyaltyPageText","termsLink","loyaltyTermsLinkText","LoyaltyTermsModal","LoyaltyTermsCancel","loyaltyTermCancelAttributes","LoyaltyTermsSubmit","loyaltyTermSubmitAttributes","LoyaltyTermsAgree","loyaltyTermCheckboxAttributes","toggle","applicationNode","returnFocusRef","returnRef","modalHeader","ModalHeader","modalFooter","ModalFooter","cancelButton","cancelLoyaltyTermsText","submitButton","onSubmit","checked","joinLoyaltyTermsText","loyaltyTermsHeading","terms","agreeSection","checkbox","onCheck","agreeText","loyaltyAgreeToTerms","LoyaltyTerms","_toggle","bind","_submit","_checkboxChecked","toggleRef","search","url","requestUrl","isJoining","substring","qsps","split","qsp","splitQsp","isModalOpen","hideToggle","slots","serviceTerms","modalToggle","innerRef","joinLoyaltytermsToggleText","CardNumber","card","redirectToLoyalty","getUrlSync","getLoyaltyCardAsync","callerContext","fullCard","update","GetLoyaltyCardInput","PvaChatConnector","isOboRequest","botFrameworkCDNURL","pvaChatConnectorBotFrameworkCDNURL","script","async","crossOrigin","appendChild","getRandomValues","rnds8","Uint8Array","rng","crypto","msCrypto","Error","uuid","REGEX","test","byteToHex","i","substr","arr","offset","validate","TypeError","options","buf","rnds","random","CartAmountTrigger","ProactiveChatTrigger","totalInCart","min","proactiveOnCartAmountMin","max","proactiveOnCartAmountMax","name","cart","_getCart","isEmpty","TotalAmount","retVal","getContextProvider","eCommerceCustIsProactiveChat","eCommerceCustProactiveType","eCommerceCustProactiveShoppingCartAmount","getMessage","proactiveOnCartAmountMessage","proactiveDefaultMessage","getCartState","CartNumberOfItemsTrigger","numberOfItems","proactiveOnCartNoOfItemsMin","proactiveOnCartNoOfItemsMax","TotalItems","eCommerceCustProactiveShoppingCartNumberOfItems","proactiveOnCartNoOfItemsMessage","CartSpecificProductTrigger","product","isValid","CartLines","_cart$cart$CartLines","_cart$cart$CartLines2","proactiveOnCartSpecificProductList","_this$props$config$pr","j","_this$props$config$pr2","ItemId","eCommerceCustProactiveShoppingCartSpecificProduct","proactiveOnCartSpecificProductMessage","ProactiveChatNames","DateRangeTrigger","start","_toDate","proactiveOnDateRangeStart","end","proactiveOnDateRangeEnd","now","Date","setHours","getTime","DateRange","eCommerceCustProactiveFromDate","toUTCString","eCommerceCustProactiveToDate","proactiveOnDateRangeMessage","date","dateParts","FromSpecificPageTrigger","proactiveOnFromSpecificPageList","fromSpecificPageTrimmed","trim","referrer","indexOf","FromSpecificPage","eCommerceCustProactiveCameFromPage","proactiveOnFromSpecificPageMessage","PageVisitTrigger","visits","cookieName","cookies","expdate","setTime","isConsentGiven","setConsentCookie","_updateVisitCounter","proactiveOnPageVisitNumber","clear","set","domain","hostname","path","pathname","expires","PageVisits","eCommerceCustProactiveNumberOfVisits","proactiveOnPageVisitMessage","get","SpecificCountryRegionTrigger","customerCountryCode","suggestedMarket","proactiveOnSpecificLocation","eCommerceCustProactiveCountryCode","SpecificLocation","proactiveOnSpecificCountryRegionMessage","SpecificPageTrigger","proactiveOnSpecificPageList","specificPageTrimmed","SpecificPage","proactiveOnSpecificPageMessage","WaitOnTimeTrigger","proactiveOnWaitTimeSeconds","waitTimeInMilliseconds","triggerTime","WaitOnTime","eCommerceCustProactiveTimeOnPage","proactiveOnWaitTimeMessage","ProactiveTriggers","userId","uuidv4","_getContext","enabled","_proactiveCheck","exception","provider","_getProvider","_this$props$context$r","eCommerceOperatingUnitNumber","oun","eCommerceBaseUrl","baseUrl","eCommerceDataAreaId","channel","InventLocationDataAreaId","UserId","AccountNumber","customerAccountNumber","Email","emailAddress","FirstName","firstName","anonymousUserName","LastName","lastName","Name","eCommerceCustPageURL","eCommerceCustChatType","proactiveChatEnabled","proactive","_isProactive","getChatWrapperStyle","position","top","right","bottom","left","zIndex","justifyContent","getMaximizedChatWrapperStyle","isMobileDevice","height","width","padding","chatHeight","chatWidth","getChatButtonStyle","alignItems","backgroundColor","startChatButtonBackgroundColor","color","startChatButtonTextColor","borderColor","startChatButtonBorderColor","borderRadius","startChatButtonBorderRadius","borderStyle","startChatButtonBorderStyle","borderWidth","startChatButtonBorderWidth","storeLogoURL","cursor","outlineStyle","alignSelf","boxShadow","WebkitBoxShadow","MozBoxShadow","getButtonStoreLogoStyle","headerBackgroundColor","headerTextColor","marginRight","boxSizing","getChatStoreLogoStyle","margin","getChatMessagesStyle","minimized","getChatMessageHeader","chatHeaderHeight","backgroundImage","headerBackgroundImageURL","backgroundRepeat","flexDirection","chatBorderStyle","chatBorderWidth","getMinimizeButtonStyle","borderTop","borderLeft","borderRight","borderBottom","marginTop","getCloseButtonStyle","border","getChatMessageContent","chatBorderColor","getProactiveWrapperStyle","getProactiveMessageHeader","getProactiveMessageContent","getProactiveButtonStyle","outline","fontFormat","font","CommerceChatStore","setNewMessage","setNewMessageAction","powervaDirectlineTokenURL","botID","tenantID","fetch","method","r","json","token","pvaChatConnectorPowervaDirectlineTokenURL","pvaChatConnectorBotID","pvaChatConnectorTenantID","dispatch","next","action","payload","language","navigator","_activity$from","activity","from","triggerQuery","ReactWebChat","WebChat","setUserId","useState","useMemo","ctx","directLine","createDirectLine","directLineToken","commerceChatStore","store","createStore","actionHandler","styleOptions","bubbleStyling","bubbleBackground","bubbleTextColor","bubbleBorderColor","bubbleBorderRadius","bubbleBorderStyle","bubbleBorderWidth","bubbleFromUserBackground","bubbleFromUserTextColor","bubbleFromUserBorderColor","bubbleFromUserBorderRadius","bubbleFromUserBorderStyle","bubbleFromUserBorderWidth","getBubbleStyling","avatarStyling","avatarBorderRadius","avatarSize","botAvatarBackgroundColor","botAvatarImage","botAvatarInitials","userAvatarBackgroundColor","userAvatarImage","userAvatarInitials","showAvatarInGroup","getAvatarStyling","suggestedActionStyling","suggestedActionLayout","suggestedActionBackground","suggestedActionTextColor","suggestedActionBorderColor","suggestedActionBorderRadius","suggestedActionBorderStyle","suggestedActionBorderWidth","suggestedActionDisabledBorderStyle","suggestedActionDisabledBorderWidth","suggestedActionDisabledTextColor","suggestedActionHeight","suggestedActionImageHeight","suggestedActionsCarouselFlipperCursor","suggestedActionsCarouselFlipperBoxWidth","suggestedActionsCarouselFlipperSize","suggestedActionsFlowMaxHeight","suggestedActionsStackedHeight","suggestedActionsStackedOverflow","suggestedActionsStackedLayoutButtonMaxHeight","suggestedActionsStackedLayoutButtonTextWrap","getSuggestedActionStyling","otherStyling","groupTimestamp","sendTimeout","sendTimeoutForAttachments","timestampColor","timestampFormat","notificationDebounceTimeout","hideToaster","toasterHeight","toasterMaxHeight","toasterSingularMaxHeight","toastFontSize","toastIconWidth","toastSeparatorColor","toastTextPadding","toastErrorBackgroundColor","toastErrorColor","toastInfoBackgroundColor","toastInfoColor","toastSuccessBackgroundColor","toastSuccessColor","toastWarnBackgroundColor","toastWarnColor","typingAnimationBackgroundImage","typingAnimationDuration","typingAnimationHeight","typingAnimationWidth","videoHeight","markdownExternalLinkIconImage","markdownRespectCRLF","internalLiveRegionFadeAfter","accent","subtle","getOtherStyling","hideUploadButton","primaryFont","getChatStyleOptions","userID","INVALID_TOKEN","loaded","setLoaded","setMinimized","newMessage","setToken","isProactive","setIsProactive","proactiveMessage","setProactiveMessage","closed","setClosed","setProvider","Viewport","chatStyle","getChatStyling","ChatWrapperStyle","MaximizedChatWrapperStyle","ChatButtonStyle","ButtonStoreLogoStyle","ChatStoreLogoStyle","ChatMessagesStyle","ChatMessageHeader","MinimizeButtonStyle","CloseButtonStyle","ChatMessageContent","ProactiveWrapperStyle","ProactiveMessageHeader","ProactiveMessageContent","ProactiveButtonStyle","RedDotStyle","background","handleMaximizeButtonClick","useEffect","getDirectLineToken","contextProvider","ContextProvider","prov","init","isValidToken","alt","fontWeight","fontSize","chatButtonHeader","chatButtonText","flexGrow","handleMinimizeButtonClick","handleCloseButtonClick","version","viewBox","xmlSpace","d","fill","ChatCore","unableToLoadChatMessage","p","interval","Chat","CookieComplianceAcceptButton","acceptCookiesButtonText","acceptCookiesButtonAriaLabel","onClose","CookieComplianceLinks","_mapEditableLinks","linkdata","editableLinks","forEach","links","onTextChange","CookieCompliance","handleLinkTextChange","linkIndex","_this$props$config$ac","actionLinks","handleContentChange","content","visible","cookieRef","_onDismiss","acceptCookiesAriaLabel","moduleConfig","onDismiss","CookieComplianceBanner","AlertProps","fade","Content","acceptButton","reload","Alert","NavigationMenu","isRetail","isCMS","_setNavigationSource","sourceType","_updateViewport","viewport","device","Type","navigationMenuSource","locale","nameTranslations","nameTranslation","find","Language","Text","resizeThrottledEventHandler","_this$props$config$di","_this$props$config$di2","_mapData","isEmptyOrNullObject","xl","displayCategoryImage","displayPromotionalImage","ImageContainer","backButtonAriaLabel","mergedData","categories","_constructMenuItemData","cmsNavItems","idx","_constructTopMenuItemData","_this$props$config$en","_this$props$config$ro","mergedRootMenuData","topMenu","rootMenuNavigation","retailItem","cmsItem","addedAllMenu","categoryPromotionalContent","cmsItemText","menuAriaLabel","promotionalData","promoItem","_promoItem$categoryNa","_retailItem$Name","categoryName","_NavigationMenu$getFr","_NavigationMenu$getFr2","Images","Uri","RSItemIdInit","getFriendlyName","NameTranslations","Url","_getNestedChildren","CMSItemIdInit","imageDestinationURL","imageLink","_getCMSNestedChildren","Cms","category","imageSourceUrl","nestedChildren","Children","getCategoryUrl","_getViewport","innerWidth","NavigationMenuView","categoryImageSrc","imageSrc","promotionalItemImageSettings","categoryImageAltText","_handleFocusOutside","relatedTarget","_closeSubmenu","_getCategoryImage","_categoryImage$imageS","Image","IsSubMenu","enableMultiSupportMenu","haveSubmenu","onFocus","hoverEffect","isParent","currentItem","submenu","categoryImageDisplay","promotionalContentDisplay","DivContainerClass","OrderInfomation","orderInformationProps","salesId","receiptId","createdDate","count","amount","channelReferenceId","channelName","channelAddress","SalesLine","salesLineProps","salesLine","buyAgainButton","errors","GroupDelivery","deliveryProps","Group","groupProps","delivery","address","salesLinesProps","salesLines","isCashAndCarryTransaction","LineId","salesStatus","deliveryType","shipment","trackingInfo","showTimeslot","pickupProps","pickupDateTimeslot","Groups","groupsProps","groups","group","OrderSummary","orderSummaryProps","subtotal","shipping","tax","totalAmount","earnedPoints","Payment","_ref7","paymentMethodsProps","methods","Help","_ref8","helpProps","needHelpLabel","helpLineNumberLabel","contactNumber","_ref9","viewModes","tableViewActions","table","placedBy","alert","orderInfomation","orderSummary","payment","help","renderProductDescription","_props$data$product$r","primaryImageSource","PrimaryImageUrl","imageUrl","fallBackSrc","cropFocalRegion","renderProductImage","signInMessage","signInButton","paragraph","RichTextComponent","reviewModal","form","inputRow","selectRatingLabel","rating","reviewTitleLabel","titleInput","reviewTextLabel","textInput","privacyPolicyUrl","createReviewModal"],"sourceRoot":""}