{"version":3,"file":"static/js/70bb88a199b54237573b.bundle.js","mappings":";gvBAAA,MAAMA,EAAU,CAAEC,QAAS,CAAC,EAAGC,YAAa,CAAC,GAwCxCF,EAAQC,QAAQ,mBAAqB,CAClCE,EAAGA,IAAMC,EAAQ,KACjBC,MAAO,gBACPC,GAAI,CAAC,CAACC,KAAK,aAAeC,KAAK,8EAA+EC,MAAO,IAErHC,KAAK,EACLC,GAAI,6BACJC,EAAG,kBACHC,EAAG,kBAEHC,IAAK,GAGLC,GAAI,4FAlC4BC,EAACC,EAAqBC,KAUlD,GADAlB,EAAQE,YAAYe,GAAuBC,GACtClB,EAAQE,YAAYe,GAAqBE,QAC1C,MAAM,IAAIC,MAAM,oBAAsBH,EAAsB,mCAEhEjB,EAAQE,YAAYe,GAAqBE,QAAQE,UAAUC,eAAiBL,EACxEjB,EAAQE,YAAYe,GAAqBE,QAAQE,UAAUE,KAC3DvB,EAAQE,YAAYF,EAAQE,YAAYe,GAAqBE,QAAQE,UAAUE,IAAMN,EAE7F,EAwBID,CAF4B,8EACXZ,EAAQ,MAMjCoB,OAAOC,aAAeD,OAAOC,cAAgB,CAAC,EAC9CD,OAAOC,aAAaxB,QAAOyB,EAAAA,EAAA,GACpBF,OAAOC,aAAaxB,SAAW,CAAC,GAChCD,EAAQC,SAGXuB,OAAOC,aAAavB,YAAWwB,EAAAA,EAAA,GAC5BF,OAAOC,aAAavB,aAAe,CAAC,GACpCF,EAAQE,aAEY,MAAMyB,EAAiB,CAAC,EAC/BA,EAAe,yFAA2F,CAClHxB,EAAGA,IAAMC,EAAQ,MACjBwB,GAAI,kEAEpBD,EAAe,sFAAwF,CACvFxB,EAAGA,IAAMC,EAAQ,KACjBwB,GAAI,8DAEpBD,EAAe,kGAAoG,CACnGxB,EAAGA,IAAMC,EAAQ,MACjBwB,GAAI,qEAEpBJ,OAAOC,aAAeD,OAAOC,cAAgB,CAAC,EAC9CD,OAAOC,aAAaE,eAAcD,EAAAA,EAAA,GACPF,OAAOC,aAAaE,gBAAkB,CAAC,GACvCA,6tBCtDpB,MAAME,UAA2BC,EAAAA,cAapCC,YAAYC,GACRC,MAAMD,GAbF,KAAAE,aAAuB,EAEd,KAAAC,qBAA+B,EAE/B,KAAAC,UAAoB,GAqcpB,KAAAC,qBAAuB,CAACC,EAA0BC,IAA0B,KACzF,MAAMC,EAAWD,GAAUA,EAAOC,SAAWD,EAAOC,SAAW,GACzDC,EAAiC,CAAC,CAAEC,IAAKJ,EAAkBK,QAASH,IAGtEI,EAAAA,gBAAgBC,YAAYN,EAAOO,qBACnCP,EAAOO,mBAAmBC,KAAIC,IAC1B,GAAIA,GAAQA,EAAKC,MAAO,CACpB,MAAMC,EAAWF,EAAKC,MAAMP,IACtBS,EAA+BH,EAAKC,MAAMG,cAChDX,EAAiBY,KAAK,CAClBX,IAAKQ,EACLP,QAASK,EAAKM,KACdF,cAAeD,EACfI,qBAAsB,CAAEC,QAASR,EAAKQ,QAAQC,iBAC/C,KAIfC,KAAKC,SAAS,CACVC,cAAenB,EAAiBoB,OAAS,EAAIpB,EAAmB,CAAC,CAAEC,IAAK,UACxEoB,qBAAsBtB,GACxB,EASW,KAAAuB,sBAAwB,CAACC,EAAqBC,IAAsB,KAC5EP,KAAK1B,MAAMkC,aASZR,KAAKC,SAAS,CACVQ,WAAYH,EAAKzC,GACjB6C,WAAYH,KAVhBP,KAAKC,SAAS,CACVQ,WAAYT,KAAKW,MAAMF,YAAcT,KAAKW,MAAMF,aAAeH,EAAKzC,QAAM+C,EAAYN,EAAKzC,GAC3F6C,WAAYH,IAEZP,KAAK1B,MAAMuC,mBACXb,KAAKrB,qBAAqB2B,EAAKQ,YAAcR,EAA7CN,IASRA,KAAKe,aAAa,EAML,KAAAA,YAAc,KACvBf,KAAK1B,MAAMkC,cACXQ,YAAW,KACPhB,KAAKiB,UAAYjB,KAAKiB,SAASC,SAAWlB,KAAKiB,SAASC,QAAQC,OAAO,GACxE,EAAG,EAQG,KAAAC,oBAAuBC,IAChCrB,KAAKiB,SAASC,UAAYlB,KAAKiB,SAASC,QAAQI,SAASD,EAAME,SAC/DvB,KAAKC,SAAS,CACVQ,gBAAYG,EACZV,cAAe,MAChB,EAQM,KAAAsB,oBAAuBH,IAChCrB,KAAKiB,SAASC,UAAYlB,KAAKiB,SAASC,QAAQI,SAASD,EAAMI,gBAC/DzB,KAAK0B,eAAgB,EAiBZ,KAAAC,aAAgBN,IAC7B,GAAIA,EAAMO,UAAY5B,KAAKtB,UAAW,CAClC,IAAKsB,KAAK1B,MAAMkC,aAAc,CAC1B,MAAMqB,EAAgBC,MAAMC,KAAK/B,KAAKiB,SAASC,QAASc,YACxD,IAAK,MAAM1C,KAAQuC,EAAe,CAC9B,MAAMI,EAAkB3C,EAAK4C,WACyB,SAAlDD,EAAgBE,aAAa,kBAC7BF,EAAgBd,OAAO,EAInCnB,KAAK0B,eAAgB,GAIZ,KAAAU,kBAAqBlC,IAClC,IAAKA,IAAkBA,EAAclB,IACjC,OAAO,KAGX,MAAMqD,GAAmBC,EAAAA,EAAAA,kBAAiBpC,EAAclB,IAAKgB,KAAK1B,MAAMiE,QAAQC,cAAcC,eAAeC,aACvGC,EAAuC,CACzCC,UAAW,CACPC,GAAI,CAAEC,EAAG,kBAAmBC,EAAG,EAAGC,EAAG,GACrCC,GAAI,CAAEH,EAAG,kBAAmBC,EAAG,EAAGC,EAAG,GACrC3F,GAAI,CAAEyF,EAAG,kBAAmBC,EAAG,EAAGC,EAAG,GACrCE,GAAI,CAAEJ,EAAG,kBAAmBC,EAAG,EAAGC,EAAG,IAEzCG,UAAU,GAEd,QAAyBvC,IAArByB,EAAgC,CAAC,IAADe,EAAAC,EAChC,MAAMC,EAAwB,CAAEtE,IAAKqD,GACrC,OACIjE,EAAAA,cAACmF,EAAAA,GAAKC,OAAAC,OAAA,CACFhB,eAAgBzC,KAAK1B,MAAMiE,QAAQC,cAAcC,eACjDiB,UAAU,sBACNJ,EAAS,CACbK,aAAc3D,KAAK1B,MAAMiE,QAAQqB,QAAQD,aACzCjE,cAAqF,QAAxE0D,EAA6B,QAA7BC,EAAEnD,EAAcR,qBAAa,IAAA2D,EAAAA,EAAIrD,KAAK1B,MAAMuF,OAAOC,6BAAqB,IAAAV,EAAAA,EAAIT,EACzFoB,oBAAoB,OACpBC,KAAK,WACLnG,GAAI,GAAGqC,EAAclB,qBACrBC,QAASiB,EAAcjB,UACzB,CAGV,OAAO,IAAI,EAOE,KAAAgF,gBAAmBC,IAChC,MAAM,eAAEC,GAAmBnE,KAAKW,MAE1ByD,EAAU,CAAE,MADoCxD,IAA3BsD,EAAYG,WAA2BH,EAAYG,WAAa,IAC3DH,EAAYI,QAC5CtE,KAAKC,SAAS,CAAEkE,eAAcnG,EAAAA,EAAA,GAAOmG,GAAmBC,IAAY,EArlBpEpE,KAAKiB,SAAW7C,EAAAA,YAChB4B,KAAKW,MAAQ,CAAEF,gBAAYG,EAAWF,gBAAYE,EAAWR,qBAAsB,GAAI+D,eAAgB,CAAC,GACxGnE,KAAK0B,cAAgB1B,KAAK0B,cAAc6C,KAAKvE,MAC7CA,KAAK2B,aAAe3B,KAAK2B,aAAa4C,KAAKvE,MAC3CA,KAAKwE,kBAAmBC,EAAAA,EAAAA,oBACpBzE,KAAK1B,MAAMiE,QAAQqB,QAAQc,kBAC3B1E,KAAK1B,MAAMqG,aACX3E,KAAK1B,MAAMsG,WAEf5E,KAAK6E,SAAUC,EAAAA,EAAAA,kBAAiB,QAAS9E,KAAKwE,iBAAkB,GAAI,GACxE,CAEOO,oBACCC,EAAAA,GAASC,YACTC,SAASC,KAAKC,iBAAiB,UAAYpF,KAAK2B,cAA2C,GAC3FuD,SAASC,KAAKC,iBAAiB,YAAapF,KAAKoB,qBACjD8D,SAASC,KAAKC,iBAAiB,WAAYpF,KAAKwB,qBAExD,CAEO6D,uBACCL,EAAAA,GAASC,YACTC,SAASI,oBAAoB,UAAYtF,KAAK2B,cAA2C,GACzFuD,SAASC,KAAKG,oBAAoB,YAAatF,KAAKoB,qBAAqB,GACzE8D,SAASC,KAAKG,oBAAoB,WAAYtF,KAAKwB,qBAAqB,GAEhF,CAEO+D,SACH,MAAM,aAAE/E,GAAiBR,KAAK1B,MAG9B,OADA0B,KAAKxB,aAAe,EACbJ,EAAAA,cAAAA,EAAAA,SAAA,KAAGoC,EAAeR,KAAKwF,oBAAsBxF,KAAKyF,qBAC7D,CAMQD,oBACJ,MAAM,aAAEhF,EAAY,aAAEkF,EAAY,WAAEC,GAAe3F,KAAK1B,MACxD,OACIF,EAAAA,cAACwH,EAAAA,OAAMpC,OAAAC,OAAA,GAAKkC,EAAU,CAAEjC,UAAWmC,IAAWF,EAAWjC,UAAWlD,EAAe,cAAgB,kBAC9FkF,EAAarG,KAAI,CAACyG,EAAyBC,IACjC/F,KAAKgG,kBAAkBF,EAAUJ,EAAavF,OAAQ4F,EAAW/F,KAAKvB,wBAI7F,CAMQgH,qBACJ,MAAM,SAAEQ,EAAQ,WAAEN,GAAe3F,KAAK1B,MACtC,OACIF,EAAAA,cAACwH,EAAAA,OAAMpC,OAAAC,OAAA,GAAKkC,EAAU,CAAEjC,UAAWmC,IAAWF,EAAWjC,aACrDtF,EAAAA,cAAC8H,EAAAA,KAAI1C,OAAAC,OAAA,GAAKwC,EAAQ,CAAEE,IAAKnG,KAAKiB,SAAUmF,SAAS,OAC5CpG,KAAKqG,kBAItB,CASQL,kBAAkBF,EAAyBQ,EAAiBP,GAChE,OAAID,GAAYA,EAASS,SAAWrH,EAAAA,gBAAgBC,YAAY2G,EAASS,SAC9DvG,KAAKwG,cAAcV,EAAUQ,EAASP,GAE1C/F,KAAKyG,oBAAoBX,OAAUlF,GAAW,GAAM,EAAO0F,EAASP,EAC/E,CASQS,cAAcV,EAAyBQ,EAAkBP,GAC7D,MAAMW,EAAmBZ,EAAShH,SAC5B6H,EAAW3G,KAAKW,MAAMwD,eACtBE,OAAkCzD,IAArB8F,EAAiCA,EAAmB,GACjEE,OAAoBhG,IAAb+F,EAAyBA,EAAW,CAAC,GAC5C,aAAEnG,GAAiBR,KAAK1B,MAE9B,IAAIuI,GAAe,EACfD,EAAKvC,KACLwC,GAAe,GAEnB,MAAMC,EAA2B,CAAExC,OAAQuC,GAC3C,OACIzI,EAAAA,cAAC2I,EAAAA,OAAM,CACH/C,KAAK,UACLgD,kBAAmB,CACf,eAAgBV,EAChB,gBAAiBP,EACjB/B,KAAM,YAEViD,UAAWzG,EAAesF,EAASmB,eAAYrG,EAC/CsG,IAAKpB,EAASjI,GACd6F,UAAU,iBACVyD,UAAU,sBACVC,SAAUpH,KAAKiE,gBACfoD,cAAeP,EACfQ,WAAW,uBACXC,eAAe,MACfb,iBAAkB1G,KAAKwH,gBAAgBd,EAAkBJ,EAASP,IAElE3H,EAAAA,cAAA,OAAK4F,KAAK,WACL8B,EAASS,QAASlH,KAAI,CAACoI,EAA4BC,KAAsB,IAAAC,EAChBC,EAAtD,OAAI1I,EAAAA,gBAAgBC,YAAYsI,EAAYlB,SACjCvG,KAAKwG,cAAciB,EAA6B,QAAlBG,EAAE9B,EAASS,eAAO,IAAAqB,OAAA,EAAhBA,EAAkBzH,OAAQuH,EAAa1H,KAAKvB,sBAEhFuB,KAAK6H,kBAAkBJ,EAA6B,QAAlBE,EAAE7B,EAASS,eAAO,IAAAoB,OAAA,EAAhBA,EAAkBxH,OAAQuH,EAAa1H,KAAKvB,qBAAqB,KAKhI,CASQ+I,gBAAgB1I,EAA8BwH,EAA6BP,GAC/E,OACI3H,EAAAA,cAAA,uBAAoBkI,EAAO,gBAAiBP,GACvCjH,EAGb,CASQ+I,kBAAkBvI,EAAqBgH,EAA6BP,GACxE,OAAIzG,GAAQA,EAAKR,UAAYQ,EAAKwI,SAAWxI,EAAKwI,QAAQ3H,OAAS,EACxDH,KAAKyG,oBAAoBnH,OAAMsB,GAAW,GAAM,EAAO0F,EAASP,GAChEzG,GAAQA,EAAKR,WAAaQ,EAAKwI,QAC/B9H,KAAK+H,oBAAoBzI,GAE7B,IACX,CAMQ+G,iBACJ,MAAM,SAAE2B,EAAQ,aAAEtC,EAAY,aAAElF,GAAiBR,KAAK1B,OAChD,WAAEmC,GAAeT,KAAKW,MACtBsH,EAA8B,GAEpC,GAAIzH,QAA+BI,IAAfH,GAA4BiF,EAAavF,OAAS,EAAG,CACrE,IAAI2F,EAA0B,CAAC,EAC/B,IAAK,MAAMoC,KAAiBxC,EAAc,CACtC,GAAIwC,GAAiBA,EAAcrK,KAAO4C,EAAY,CAClDqF,EAAWoC,EACXlI,KAAKC,SAAS,CAAES,gBAAYE,IAC5B,KAAM,CAGV,GADAkF,EAAW9F,KAAKmI,gBAAgBD,GAC5BpC,GAAYA,EAASjI,KAAO4C,EAC5B,MAIRqF,GACImC,EAAatI,KACTvB,EAAAA,cAAC8H,EAAAA,KAAI1C,OAAAC,OAAA,CAACyD,IAAKpB,EAASjI,IAAQmK,GACvB,IACAhI,KAAKoI,oBAAoBtC,GACzB,KAEP,MAENJ,EAAa2C,SAAQ,CAAC/I,EAAqBgJ,KACvCL,EAAatI,KACTvB,EAAAA,cAAC8H,EAAAA,KAAI1C,OAAAC,OAAA,CAACyD,IAAKoB,GAAWN,GACjBhI,KAAKoI,oBAAoB9I,IAEjC,IAIT,OAAO2I,CACX,CAOQE,gBAAgB7I,GACpB,MAAMiJ,EAAWjJ,GAAQA,EAAKiH,QAC9B,GAAIgC,GAAYA,EAASpI,OAAS,EAC9B,IAAK,IAAIqI,EAAI,EAAGA,GAAKD,EAASpI,OAAS,EAAGqI,IAAK,CAC3C,GAAID,EAASC,GAAG3K,KAAOmC,KAAKW,MAAMF,WAE9B,OADAT,KAAKC,SAAS,CAAES,WAAYpB,aAAI,EAAJA,EAAMzB,KAC3B0K,EAASC,GAEpB,MAAMC,EAAQzI,KAAKmI,gBAAgBI,EAASC,IAC5C,GAAIC,EACA,OAAOA,CAAK,CAIxB,OAAO,IACX,CAOQL,oBAAoB1C,GACxB,OAAIA,GAAgBA,EAAaa,SAAWb,EAAaa,QAAQpG,OAAS,EAClEH,KAAK1B,MAAMkC,mBAA0CI,IAA1BZ,KAAKW,MAAMF,WAC/BT,KAAK0I,eAAehD,EAAaa,QAASb,EAAa7H,IAG9DO,EAAAA,cAAAA,EAAAA,SAAA,KACK4B,KAAK2I,sBAAsBjD,GAC3B1F,KAAK0I,eAAehD,EAAaa,QAASb,EAAa7H,KAGzD6H,GAAgBA,EAAa5G,UAAY4G,EAAaoC,SAAWpC,EAAaoC,QAAQ3H,OAAS,EAC/FH,KAAKyG,oBAAoBf,EAAcA,EAAa7H,IAAI,GAAO,GAC/D6H,GAAgBA,EAAa5G,WAAa4G,EAAaoC,QACvD9H,KAAK+H,oBAAoBrC,EAAcA,EAAa7H,IAAI,GAG5D,IACX,CAEQ6K,eAAeH,EAA4B9H,EAAqBmI,GACpE,MAAM,aAAEpI,EAAY,SAAEwH,GAAahI,KAAK1B,MAClCuK,EAAyB7I,KAAK1B,MAAMuF,OAAOiF,uBAAwB,EAEnEC,EAA0B/I,KAAK1B,MAAMuF,OAAOmF,kBAD7B,EAIrB,GAAIvI,GAAcT,KAAKW,MAAMF,aAAeA,EAExC,OADAT,KAAK1B,MAAMiE,QAAQqC,UAAUqE,MAAM,gEAC5B,KAGX,IAAKV,GAAgC,IAApBA,EAASpI,OAEtB,OADAH,KAAK1B,MAAMiE,QAAQqC,UAAUqE,MAAM,4DAC5B,KAGX,IAAIC,EAAyB,GAC7B,MAAMC,EACFZ,GACAA,EAASlJ,KAAI,CAACR,EAAuBuK,KACjC,MAAMC,EAAaxK,EAAO0H,SAAW1H,EAAO0H,QAAQpG,OAAS,EAC7D,IAAI2F,EAMAS,EAJAT,EADAuD,GAAc7I,EACHR,KAAK2I,sBAAsB9J,EAAQ4B,EAAY2I,GAE/CvK,EAAOiJ,QAAU9H,KAAKyG,oBAAoB5H,EAAQuK,GAAOpJ,KAAK+H,oBAAoBlJ,GAGjG,MAAMyK,EAAcD,GAAcR,GAA0B7I,KAAKxB,cAAgB+K,KAAKC,MAAMT,GAA2B,EAMvH,OALIO,IACAtJ,KAAKxB,eACL0K,EAAiBL,EAAyB,SAAS7I,KAAKxB,aAAaiL,aAAe,GACpFlD,EAAUvG,KAAK0I,eAAe7J,EAAO0H,QAAS/F,EAAe3B,EAAOhB,QAAK+C,GAAW,IAGpFxC,EAAAA,cAAC8H,EAAAA,KAAI1C,OAAAC,OAAA,GAAKuE,EAAQ,CAAEd,IAAKrI,EAAOhB,GAAI6F,UAAWmC,IAAWmC,EAAStE,UAAW4F,GAAe,iBACxFxD,EACAS,EACE,IAGnB,OAAOvG,KAAK0J,YAAYR,EAAgBC,EAAa1I,EAAYmI,EACrE,CASQD,sBAAsB9J,EAAuB4B,EAAqB6H,GACtE,MAAM,OAAEqB,GAAW3J,KAAK1B,MACxB,OACIF,EAAAA,cAAC8H,EAAAA,KAAI1C,OAAAC,OAAA,CACDyD,IAAKoB,GACDqB,EAAM,CACVC,QAAS5J,KAAKK,sBAAsBxB,EAAQ4B,GAC5CoJ,QAAS7J,KAAK0B,cAAa,kBACV1B,KAAKW,MAAMF,YAAcT,KAAKW,MAAMF,aAAe5B,EAAOhB,IAAG,mBAC5DmC,KAAKW,MAAMF,YAAcT,KAAKW,MAAMF,aAAe5B,EAAOhB,IAAG,cAClE4C,IAEZ5B,EAAOC,SAGpB,CAYQ2H,oBACJ5H,EACAyJ,GAIiB,IAHjBwB,IAAAC,UAAA5J,OAAA,QAAAS,IAAAmJ,UAAA,KAAAA,UAAA,GACAC,EAAAD,UAAA5J,OAAA,QAAAS,IAAAmJ,UAAA,IAAAA,UAAA,GACAzD,EAAgByD,UAAA5J,OAAA,EAAA4J,UAAA,QAAAnJ,EAChBmF,EAAiBgE,UAAA5J,OAAA,EAAA4J,UAAA,QAAAnJ,EAEjB,MAAM,KAAEqJ,EAAI,aAAEzJ,GAAiBR,KAAK1B,MAC9BQ,EAAWD,EAAOC,SAAWD,EAAOC,SAAW,GAC/CoL,EAAcrL,EAAOiC,YAAcjC,EAAOiC,YAAc,GAC9Dd,KAAK6E,QAAQsF,cAAcC,MAAQtL,EACnC,MAAMuL,GAAaC,EAAAA,EAAAA,wBAAuBtK,KAAKwE,iBAAkBxE,KAAK6E,SACtE,OACIzG,EAAAA,cAAC8H,EAAAA,KAAI1C,OAAAC,OAAA,gBACajD,EAAe8F,OAAU1F,EAAS,gBACjCJ,EAAeuF,OAAWnF,EAAS,aACtCJ,EAAe3B,EAAOoI,eAAYrG,GAC1CqJ,EAAI,CACR/C,IAAKoB,EACLuB,QAASG,GAAYhK,KAAK0B,cAC1BH,OAAQ1C,EAAO0L,iBAAmB,cAAW3J,EAC7C4J,YAAaV,GAAe9J,KAAKrB,qBAAqBuL,EAAarL,GACnE4L,KAAM5L,EAAOiJ,SACTuC,EAAU,CACdT,SAASc,EAAAA,EAAAA,kBAAiB1K,KAAKwE,iBAAkBxE,KAAK6E,QAAS/F,KAE9DD,EAAOC,SAGpB,CAQQ6L,uBAAuB7L,EAAmBgB,GAC9C,MAAM,KAAEmK,GAASjK,KAAK1B,MACtB0B,KAAK6E,QAAQsF,cAAcC,MAAQtL,EACnC,MAAMuL,GAAaC,EAAAA,EAAAA,wBAAuBtK,KAAKwE,iBAAkBxE,KAAK6E,SACtE,OAAI/F,GAAYgB,EAER1B,EAAAA,cAAC8H,EAAAA,KAAI1C,OAAAC,OAAA,GAAKwG,EAAI,CAAEQ,KAAM3K,GAAauK,EAAU,CAAET,SAASc,EAAAA,EAAAA,kBAAiB1K,KAAKwE,iBAAkBxE,KAAK6E,QAAS/F,KACzGA,GAIN,IACX,CASQiJ,oBAAoBlJ,EAAuByJ,GAAyC,IAAzB0B,EAAAD,UAAA5J,OAAA,QAAAS,IAAAmJ,UAAA,IAAAA,UAAA,GAC/D,MAAM,KAAEa,GAAS5K,KAAK1B,MACtB,OACIF,EAAAA,cAAC8H,EAAAA,KAAI1C,OAAAC,OAAA,CAACyD,IAAKoB,GAAWsC,EAAI,CAAEf,QAASG,GAAYhK,KAAK0B,gBACjD7C,EAAOC,SAGpB,CAUQ4K,YAAYmB,EAAe1B,EAA4B2B,EAAsBC,GACjF,MAAM,aAAEC,EAAY,SAAE/E,EAAQ,kBAAEgF,EAAiB,kBAAEpK,EAAiB,aAAEL,EAAY,uBAAE0K,GAA2BlL,KAAK1B,MAC9G6M,GACD3K,GAAgBK,GAAkD,OAA7Bb,KAAKW,MAAMT,oBAAuDU,IAA7BZ,KAAKW,MAAMT,gBAAgC6K,EACpHK,GACD5K,GAAgB0K,GAA0BhM,EAAAA,gBAAgBC,YAAYa,KAAKW,MAAMT,iBAAmB6K,EACnGM,EAAoBrL,KAAKxB,aAAe,GAAK2M,EAAuBH,EAActH,UAAY,kBAEpG,OADA1D,KAAKxB,aAAe,EAEhBJ,EAAAA,cAAC8H,EAAAA,KAAI1C,OAAAC,OAAA,GAAKuH,EAAY,CAAEtH,UAAW2H,IAC/BjN,EAAAA,cAAC8H,EAAAA,KAAI1C,OAAAC,OAAA,GACGwC,EAAQ,CACZvC,UAAWmC,IACPI,EAASvC,UACTmH,EACAM,GAAwB,gBACxBA,GACInL,KAAK1B,MAAMuF,OAAOmF,kBAClBhJ,KAAK1B,MAAMuF,OAAOmF,iBAAmB,GACrC,yBAGPG,GAEL/K,EAAAA,cAAA,OAAKsF,UAAU,4BACVyH,GACGnL,KAAKW,MAAMT,eACXF,KAAKW,MAAMT,cAAcb,KAAIC,IAAI,IAAAgM,EAAA,OAC7BlN,EAAAA,cAAC8H,EAAAA,KAAI1C,OAAAC,OAAA,CAACyD,IAAK5H,EAAKN,KAASiM,EAAiB,CAAEvH,UAAWuH,EAAmBvH,YACrE1D,KAAKW,MAAMT,eAAiBF,KAAKoC,kBAAkB9C,GACnD8L,GAA6BpL,KAAK2K,uBAAuBrL,EAAKL,QAAkC,QAA3BqM,EAAEhM,EAAKO,4BAAoB,IAAAyL,OAAA,EAAzBA,EAA2BxL,SAChG,KAK/B,CAyFQ4B,gBACC1B,KAAK1B,MAAMkC,cACZR,KAAKC,SAAS,CAAEQ,gBAAYG,GAEpC,EAmEJ,yBC9mBO,IAAK2K,EASAC,2BATZ,SAAYD,GACRA,EAAAA,EAAA,eACAA,EAAAA,EAAA,oBACH,CAHD,CAAYA,IAAAA,EAAe,KAS3B,SAAYC,GACRA,EAAA,UACAA,EAAA,eACH,CAHD,CAAYA,IAAAA,EAAU,4sBCUtB,MAAMC,UAAuBrN,EAAAA,cAyBzBC,YAAYC,GACRC,MAAMD,GAjBF,KAAAoN,UAAoB,EAEpB,KAAAC,OAAiB,EAmPR,KAAAC,qBAAwBC,IACrC,OAAQA,GACJ,IAAI,mBACA7L,KAAK0L,UAAW,EAChB1L,KAAK2L,OAAQ,EACb,MACJ,IAAI,UACA3L,KAAK0L,UAAW,EAChB1L,KAAK2L,OAAQ,EACb,MACJ,IAAI,MACA3L,KAAK0L,UAAW,EAChB1L,KAAK2L,OAAQ,EAET,EAjPZ3L,KAAK8L,gBAAkB9L,KAAK8L,gBAAgBvH,KAAKvE,MACjDA,KAAK+L,SACDzN,EAAMiE,QAAQqB,SAAWtF,EAAMiE,QAAQqB,QAAQoI,QAAgD,WAAtC1N,EAAMiE,QAAQqB,QAAQoI,OAAOC,KAAoB,KAAO,KACrHjM,KAAK4L,qBAAqB5L,KAAK1B,MAAMuF,QAAU7D,KAAK1B,MAAMuF,OAAOqI,sBACjElM,KAAKW,MAAQ,CAAEwL,SAAUnM,KAAKmM,UAC9BnM,KAAKiI,aAAe,EACxB,CAjBOmE,uBAAuBC,EAAgBC,GAC1C,IAAIC,EAKJ,OAJIF,GAAUC,GAAoBA,EAAiBnM,OAAS,IACxDoM,EAAkBD,EAAiBE,MAAKlN,GAAQA,EAAKmN,SAAUC,gBAAkBL,EAAOK,iBAGrFH,GAAmBA,EAAgBI,IAC9C,CAYcR,eACV,MAAyB,OAAlBnM,KAAK+L,UAAuC,OAAlB/L,KAAK+L,QAC1C,CAEOhH,oBACCC,EAAAA,GAASC,YACTjF,KAAK4M,6BAA8BC,EAAAA,EAAAA,mBAAkB/O,OAAQ,SAAUkC,KAAK8L,kBAEhF9L,KAAK8L,iBACT,CAEOzG,uBACCL,EAAAA,GAASC,WACTnH,OAAOwH,oBAAoB,SAAUtF,KAAK4M,6BAA8B,EAEhF,CAEOrH,SAAM,IAAAuH,EAAAC,EAET,GADA/M,KAAKiI,aAAejI,KAAKgN,YACrBC,EAAAA,EAAAA,IAAoBjN,KAAK1B,MAAMgC,MAE/B,OADAN,KAAK1B,MAAMsG,UAAUqE,MAAM,+BACpB,KAGX,MAQMiE,EAASlP,EAAAA,EAAAA,EAAA,GACRgC,KAAK1B,OACL0B,KAAKW,OAAK,IACbjB,cAXyC,CACzCkD,UAAW,CACPC,GAAI,CAAEC,EAAG,kBAAmBC,EAAG,EAAGC,EAAG,GACrCmK,GAAI,CAAErK,EAAG,kBAAmBC,EAAG,EAAGC,EAAG,IAEzCG,UAAU,GAOVQ,aAAc3D,KAAK1B,MAAMiE,QAAQqB,QAAQD,aACzCgC,WAAY,CACRyH,YAAapN,KAAK1B,MAClBoF,UAAWmC,IAAW,SAAU7F,KAAK1B,MAAMuF,OAAOH,UAAW1D,KAAKW,MAAMwL,SAAW,YAAc,cACjGkB,IAAK,MACLrJ,KAAMhE,KAAKmM,SAAW,UAAY,cAEtClG,SAAU,CACNvC,UAAW,eACX2J,IAAK,KACLrJ,KAAMhE,KAAKmM,SAAW,UAAY,QAEtCnE,SAAU,CACNtE,UAAW,qBACXM,KAAM,eACNqJ,IAAK,MAETxM,kBAAyD,QAAxCiM,EAAE9M,KAAK1B,MAAMuF,OAAOyJ,4BAAoB,IAAAR,GAAAA,EACzD5B,uBAAiE,QAA3C6B,EAAE/M,KAAK1B,MAAMuF,OAAO0J,+BAAuB,IAAAR,GAAAA,EACjE9C,KAAM,CACFoD,IAAK,IACL3J,UAAW,2BACXM,KAAMhE,KAAKmM,SAAW,SAAW,YAErCnB,aAAc,CACVqC,IAAK,MACL3J,UAAW,mBAEfuH,kBAAmB,CACfoC,IAAK,MACL3J,UAAW,iBACXM,KAAM,YAEV2F,OAAQ,CACJjG,UAAW,6BACX2J,IAAK,SACLrJ,KAAMhE,KAAKmM,SAAW,SAAW,WACjCvC,QAAS5J,KAAK1B,OAElBkP,eAAgB,CACZ9J,UAAW,6BAEfkH,KAAM,CACFlH,UAAW,2BACX2J,IAAK,QAETI,2BAA4B,CACxB/J,UAAW,mCAEfgK,iBAAkB,CACdhK,UAAW,0CACX2J,IAAK,SACL,aAAcrN,KAAK1B,MAAMqP,UAAUC,oBACnChE,QAAS5J,KAAK1B,OAElBuP,uBAAwB,CACpBnK,UAAW,wCACX2J,IAAK,QAET7M,aAAcR,KAAKW,MAAMwL,SACzBzG,aAAc1F,KAAKiI,aACnBvE,UAAWmC,IAAW,SAAU7F,KAAK1B,MAAMuF,OAAOH,aAGtD,OAAO1D,KAAK1B,MAAMwP,WAAWZ,EACjC,CAEQF,WACJ,MAAM,KAAE1M,EAAI,OAAEuD,GAAW7D,KAAK1B,MACxByP,EAA8B,GAYpC,OAXI/N,KAAK0L,UAAYpL,GAAQA,EAAK0N,YAAc1N,EAAK0N,WAAWC,QAAU3N,EAAK0N,WAAWC,OAAO9N,OAAS,GACtGG,EAAK0N,WAAWC,OAAO5O,KAAI,CAACC,EAAyBgJ,IACjDyF,EAAWpO,KAAKK,KAAKkO,uBAAuB5O,OAAMsB,GAAW,EAAM0H,GAAO,MAI9EtI,KAAK2L,OAAS9H,EAAOsK,aAAetK,EAAOsK,YAAYhO,OAAS,GAChE0D,EAAOsK,YAAY9O,KAAI,CAACC,EAAwB8J,IAC5C2E,EAAWpO,KAAKK,KAAKkO,4BAAuBtN,EAAWtB,GAAM,EAAO8J,EAAM,MAG3EpJ,KAAKoO,0BAA0BL,EAC1C,CAEQK,0BAA0BL,GAA2B,IAAAM,EAAAC,EAEzD,KAD0D,QAAlCD,EAAGrO,KAAK1B,MAAMuF,OAAO0K,qBAAa,IAAAF,GAAAA,GAEtD,OAAON,EAEX,MAAMS,EAAsC,GACtCC,EAAU,CACZ5Q,GAAI,EACJiB,SAA8C,QAAtCwP,EAAEtO,KAAK1B,MAAMuF,OAAO6K,0BAAkB,IAAAJ,EAAAA,EAAI,MAClDxG,QAAS,IACThH,iBAAaF,EACb2F,QAASwH,GAIb,OAFAS,EAAmB7O,KAAK8O,GAEjBD,CACX,CAEQN,uBACJS,EACAC,EACAlD,EACAtC,EACAyF,GAEA,MAAMxC,EACFrM,KAAK1B,MAAMiE,SAAWvC,KAAK1B,MAAMiE,QAAQqB,SAAW5D,KAAK1B,MAAMiE,QAAQqB,QAAQyI,OACzErM,KAAK1B,MAAMiE,QAAQqB,QAAQyI,OAC3B,SACJ,2BAAEyC,GAA+B9O,KAAK1B,MAAMuF,OAC5CkL,EAAeH,GAAWA,EAAQ9P,UAAa,IAC/C,cAAEkQ,GAAkBhP,KAAK1B,MAAMqP,UAG/BsB,EACFN,IACAG,aAA0B,EAA1BA,EAA4BI,QAAOC,IAAS,IAAAC,EAAAC,EAAA,OAA0B,QAAtBD,EAAAD,EAAUG,oBAAY,IAAAF,OAAA,EAAtBA,EAAwB1C,kBAAkBiC,SAAgB,QAANU,EAAVV,EAAYY,YAAI,IAAAF,OAAA,EAAhBA,EAAkB3C,cAAc,KAG9H,IAAI5L,EAAsB,QAIX,IAAD0O,EAAAC,EAAd,OAHIvQ,EAAAA,gBAAgBC,YAAYwP,aAAU,EAAVA,EAAYe,SAAWf,EAAYe,OAAO,GAAGC,MACzE7O,EAAc6N,EAAYe,OAAO,GAAGC,KAEpCjE,EACO,CACH7N,GAAI4N,EAAemE,eACnB9Q,SAA8E,QAAtE0Q,EAAE/D,EAAeoE,gBAAgBxD,EAAQsC,aAAU,EAAVA,EAAYmB,yBAAiB,IAAAN,EAAAA,EAAI,GAClF1H,QAAS6G,aAAU,EAAVA,EAAYoB,IACrBjP,cACAyF,QAASvG,KAAKgQ,mBAAmBrB,EAAY7N,EAAa+N,GAC1DzP,mBAAoBY,KAAK1B,MAAMuF,OAAO0J,yBAA2B0B,EACjEgB,WAAYzE,EAAAA,EAAW0E,OACvBjJ,UAAW,GAAuE,QAAvEwI,EAAGhE,EAAeoE,gBAAgBxD,EAAQsC,aAAU,EAAVA,EAAYmB,yBAAiB,IAAAL,EAAAA,EAAI,MAAMT,KAG7F,CACHnR,GAAI4N,EAAe0E,gBACnBrR,SAAUiQ,EACVjH,QAAU8G,GAAWA,EAAQ9O,SAAW8O,EAAQ9O,QAAQC,gBAAmB,GAC3EqQ,oBAAsBxB,GAAWA,EAAQyB,WAAazB,EAAQyB,UAAUtQ,gBAAmB,GAC3Fe,YAAc8N,GAAWA,EAAQrP,OAASqP,EAAQrP,MAAMP,KAAQ,GAChEuH,QAASvG,KAAKsQ,sBAAsB1B,GACpCqB,WAAYzE,EAAAA,EAAW+E,IACvBhG,iBAAkBqE,aAAO,EAAPA,EAAS4B,aAC3BvJ,UAAW,GAAG8H,KAAeC,IAErC,CAEQgB,mBAAmBS,EAA8BC,GAAsD,IAA7B7B,EAAA9E,UAAA5J,OAAA,QAAAS,IAAAmJ,UAAA,IAAAA,UAAA,GAC9E,MAAM4G,EAAkC,GACxC,OAAKF,GAAaA,EAASG,UAAyC,IAA7BH,EAASG,SAASzQ,SAGpDH,KAAK1B,MAAMuF,OAAO0K,eAAiBM,GACpC8B,EAAehR,KAAK,CAChBb,SAAUkB,KAAK1B,MAAMqP,UAAUkD,oBAC/B/P,YAAa4P,EACb5I,SAASgJ,EAAAA,EAAAA,gBAAeL,EAAWzQ,KAAK1B,MAAMiE,QAAuC,CAAC,KAG9FkO,EAASG,SAASvR,KAAI,CAACC,EAAyBgJ,KAC5CqI,EAAehR,KAAKK,KAAKkO,uBAAuB5O,OAAMsB,GAAW,EAAM0H,GAAO,GAAO,IAElFqI,GAZI,EAaf,CAEQL,sBAAsBG,GAC1B,MAAME,EAAkC,GAExC,OAAKF,GAAaA,EAASlI,UAAyC,IAA7BkI,EAASlI,SAASpI,QAIzDsQ,EAASlI,SAASlJ,KAAI,CAACC,EAAqB8J,KACxCuH,EAAehR,KAAKK,KAAKkO,4BAAuBtN,EAAWtB,GAAM,EAAO8J,GAAK,IAE1EuH,GANI,EAOf,CAoBQ7E,kBACJ9L,KAAK+L,SAAW/L,KAAK+Q,eACrB/Q,KAAKC,SAAS,CAAEkM,SAAUnM,KAAKmM,UACnC,CAEQ4E,eACJ,MAAM,QAAExO,GAAYvC,KAAK1B,MAGzB,GAAIiE,EAAQqB,SAAWrB,EAAQqB,QAAQoI,QAA0C,WAAhCzJ,EAAQqB,QAAQoI,OAAOC,KACpE,MAAO,KAGX,GAAIjH,EAAAA,GAASC,WAAanH,OAAOkT,WAAY,CACzC,MAAMrN,EAAepB,EAAQqB,QAAQD,aACrC,GAAIA,EACA,OAAIA,EAAad,IAAM/E,OAAOkT,YAAcrN,EAAad,GAAGE,EACjD,KACAY,EAAaV,IAAMnF,OAAOkT,YAAcrN,EAAaV,GAAGF,EACxD,KACAY,EAAatG,IAAMS,OAAOkT,YAAcrN,EAAatG,GAAG0F,EACxD,KACAY,EAAaT,IAAMpF,OAAOkT,YAAcrN,EAAaT,GAAGH,EACxD,KAEJ,IAAI,CAInB,MAAO,IACX,EA7Se0I,EAAA0E,cAAwB5E,EAAAA,EAAgBgF,IAExC9E,EAAAmE,aAAuBrE,EAAAA,EAAgB2E,QAWtDe,EAAAA,EAAAA,IAAA,CADCC,EAAAA,IAAU,gCAsBDD,EAAAA,EAAAA,IAAA,CAATE,EAAAA,IAAQ,6BA8Qb,qJC/TO,MAAMhT,UAA2BC,EAAAA,cAapCC,YAAYC,GACRC,MAAMD,GAXF,KAAAE,aAAuB,EAmTd,KAAAG,qBAAuB,CAACC,EAA0BC,IAA0B,KACzF,MAAMC,EAAWD,GAAUA,EAAOC,SAAWD,EAAOC,SAAW,GACzDC,EAAiC,CAAC,CAAEC,IAAKJ,EAAkBK,QAASH,IAGtEI,EAAAA,gBAAgBC,YAAYN,EAAOO,qBACnCP,EAAOO,mBAAmBC,KAAIC,IAC1B,GAAIA,GAAQA,EAAKC,MAAO,CACpB,MAAMC,EAAWF,EAAKC,MAAMP,IACtBS,EAA+BH,EAAKC,MAAMG,cAChDX,EAAiBY,KAAK,CAClBX,IAAKQ,EACLP,QAASK,EAAKM,KACdF,cAAeD,EACfI,qBAAsB,CAAEC,QAASR,EAAKQ,QAAQC,iBAC/C,KAIfC,KAAKC,SAAS,CACVC,cAAenB,EAAiBoB,OAAS,EAAIpB,EAAmB,CAAC,CAAEC,IAAK,UACxEoB,qBAAsBtB,GACxB,EAGW,KAAAuB,sBAAwB,CAACC,EAAqBC,IAAsB,KAC5EP,KAAK1B,MAAMkC,cASZrC,EAAmBiT,aAAc,EACjCpR,KAAKC,SAAS,CACVQ,WAAYH,EAAKzC,GACjBwT,oBAAqB/Q,EAAKxB,SAC1B4B,WAAYH,MAZhBP,KAAKC,SAAS,CACVQ,WAAYT,KAAKW,MAAMF,YAAcT,KAAKW,MAAMF,aAAeH,EAAKzC,QAAM+C,EAAYN,EAAKzC,GAC3F6C,WAAYH,IAEZP,KAAK1B,MAAMuC,mBACXb,KAAKrB,qBAAqB2B,EAAKQ,YAAcR,EAA7CN,GAQD,EAIM,KAAAsR,cAAgB,IAAM,KACnCnT,EAAmBiT,aAAc,EACjCpR,KAAKC,SAAS,CAAEQ,WAAYT,KAAKW,MAAMD,YAAa,EAOvC,KAAAU,oBAAuBC,IAChCrB,KAAKiB,SAASC,UAAYlB,KAAKiB,SAASC,QAAQI,SAASD,EAAME,SAC/DvB,KAAKC,SAAS,CACVQ,gBAAYG,EACZyQ,oBAAqB,GACrBnR,cAAe,MAChB,EAQM,KAAAsB,oBAAuBH,IAChCrB,KAAKiB,SAASC,UAAYlB,KAAKiB,SAASC,QAAQI,SAASD,EAAMI,gBAC/DzB,KAAK0B,eAAgB,EAWZ,KAAA6P,uBAAyB,CAACjJ,EAAe+I,EAA8BG,KAC/ErT,EAAmBiT,aAAyB,IAAV9I,MAGlCkJ,IAAmBH,IAGjBA,IAAwBG,EASlB,KAAApP,kBAAqBlC,IAClC,IAAKA,IAAkBA,EAAclB,IACjC,OAAO,KAGX,MACM2D,EAAuC,CACzCC,UAAW,CACPC,GAAI,CAAEC,EAAG,kBAAmBC,EAAG,EAAGC,EAAG,GACrCC,GAAI,CAAEH,EAAG,kBAAmBC,EAAG,EAAGC,EAAG,GACrC3F,GAAI,CAAEyF,EAAG,kBAAmBC,EAAG,EAAGC,EAAG,GACrCE,GAAI,CAAEJ,EAAG,kBAAmBC,EAAG,EAAGC,EAAG,IAEzCG,UAAU,GAEuB,IAADC,EAAAC,EAApC,YAAyBzC,KAVA0B,EAAAA,EAAAA,kBAAiB,GAAGpC,EAAclB,MAAOgB,KAAK1B,MAAMiE,QAAQC,cAAcC,eAAeC,aAY1GtE,EAAAA,cAACmF,EAAAA,GAAKC,OAAAC,OAAA,CACFhB,eAAgBzC,KAAK1B,MAAMiE,QAAQC,cAAcC,eACjDiB,UAAU,sBACNxD,EAAa,CACjByD,aAAc3D,KAAK1B,MAAMiE,QAAQqB,QAAQD,aACzCjE,cAAqF,QAAxE0D,EAA6B,QAA7BC,EAAEnD,EAAcR,qBAAa,IAAA2D,EAAAA,EAAIrD,KAAK1B,MAAMuF,OAAOC,6BAAqB,IAAAV,EAAAA,EAAIT,EACzFoB,oBAAoB,OACpBC,KAAK,WACLnG,GAAG,kCACHoB,QAASiB,EAAcjB,WAI5B,IAAI,EAraXe,KAAKiB,SAAW7C,EAAAA,YAChB4B,KAAKyR,YAAcrT,EAAAA,YACnB4B,KAAKW,MAAQ,CAAEF,gBAAYG,EAAWyQ,oBAAqB,GAAI3Q,gBAAYE,EAAWR,qBAAsB,IAC5GJ,KAAK0B,cAAgB1B,KAAK0B,cAAc6C,KAAKvE,MAC7CA,KAAKwE,kBAAmBC,EAAAA,EAAAA,oBACpBzE,KAAK1B,MAAMiE,QAAQqB,QAAQc,kBAC3B1E,KAAK1B,MAAMqG,aACX3E,KAAK1B,MAAMsG,WAEf5E,KAAK6E,SAAUC,EAAAA,EAAAA,kBAAiB,QAAS9E,KAAKwE,iBAAkB,GAAI,GACxE,CAEOO,oBACCC,EAAAA,GAASC,YACTC,SAASC,KAAKC,iBAAiB,YAAapF,KAAKoB,qBACjD8D,SAASC,KAAKC,iBAAiB,WAAYpF,KAAKwB,qBAExD,CAEOkQ,qBAAkB,IAAAC,EACO,QAAxBA,EAAA3R,KAAKyR,YAAYvQ,eAAO,IAAAyQ,GAAxBA,EAA0BC,SAAS,IAAM5R,KAAK1B,MAAMkC,cACnDR,KAAKyR,YAAYvQ,QAAQ0Q,SAAS,GAAmBzQ,OAE9D,CAEOkE,uBACCL,EAAAA,GAASC,YACTC,SAASC,KAAKG,oBAAoB,YAAatF,KAAKoB,qBAAqB,GACzE8D,SAASC,KAAKG,oBAAoB,WAAYtF,KAAKwB,qBAAqB,GAEhF,CAEO+D,SACH,MAAM,aAAE/E,EAAY,SAAEyF,EAAQ,iBAAEyH,EAAgB,2BAAED,EAA0B,uBAAEI,EAAsB,WAAElI,GAAe3F,KAAK1B,MAG1H,OADA0B,KAAKxB,aAAe,EAEhBJ,EAAAA,cAACwH,EAAAA,OAAMpC,OAAAC,OAAA,GACCkC,EAAU,CACdjC,UAAWmC,IAAWF,EAAWjC,UAAWlD,QAA0CI,IAA1BZ,KAAKW,MAAMF,WAA2B,QAAU,YAE5GrC,EAAAA,cAAC8H,EAAAA,KAAI1C,OAAAC,OAAA,GAAKwC,EAAQ,CAAEE,IAAKnG,KAAKiB,SAAUmF,SAAS,OAC5C5F,QAA0CI,IAA1BZ,KAAKW,MAAMF,YACxBrC,EAAAA,cAAC8H,EAAAA,KAAI1C,OAAAC,OAAA,GAAKgK,GACNrP,EAAAA,cAAC8H,EAAAA,KAAI1C,OAAAC,OAAA,GAAKiK,EAAgB,CAAE9D,QAAS5J,KAAKsR,mBAC1ClT,EAAAA,cAAC8H,EAAAA,KAAI1C,OAAAC,OAAA,GAAKoK,GAAyB7N,KAAKW,MAAM0Q,sBAGrDrR,KAAKqG,kBAItB,CAEQA,iBACJ,MAAM,SAAE2B,EAAQ,aAAEtC,EAAY,aAAElF,GAAiBR,KAAK1B,OAChD,WAAEmC,GAAeT,KAAKW,MACtBsH,EAA8B,GAEpC,GAAIzH,QAA+BI,IAAfH,GAA4BiF,EAAavF,OAAS,EAAG,CACrE,IAAI2F,EAA0B,CAAC,EAC/B,IAAK,MAAMoC,KAAiBxC,EAAc,CACtC,GAAIwC,GAAiBA,EAAcrK,KAAO4C,EAAY,CAClDqF,EAAWoC,EACV/J,EAAmBiT,YAEdpR,KAAKC,SAAS,CAAES,gBAAYE,EAAWyQ,oBAAqBnJ,EAAcpJ,WAD1EkB,KAAKC,SAAS,CAAES,gBAAYE,IAElC,KAAM,CAGV,GADAkF,EAAW9F,KAAKmI,gBAAgBD,GAC5BpC,GAAYA,EAASjI,KAAO4C,EAC5B,MAIRqF,GACImC,EAAatI,KACTvB,EAAAA,cAAC8H,EAAAA,KAAI1C,OAAAC,OAAA,CAACyD,IAAKpB,EAASjI,IAAQmK,GACvB,IACAhI,KAAKoI,oBAAoBtC,GAAW,KAE3C,MAENJ,EAAa2C,SAAQ,CAAC/I,EAAqBgJ,KACvCL,EAAatI,KACTvB,EAAAA,cAAC8H,EAAAA,KAAI1C,OAAAC,OAAA,CACDyD,IAAKoB,GACDN,EAAQ,CACZ7B,IAAKnG,KAAKuR,uBAAuBjJ,EAAOtI,KAAKW,MAAM0Q,oBAAqB/R,EAAKR,UAAYkB,KAAKyR,YAAc,OAE3GzR,KAAKoI,oBAAoB9I,IAEjC,IAIT,OAAO2I,CACX,CAEQE,gBAAgB7I,GACpB,MAAMiJ,EAAWjJ,GAAQA,EAAKiH,QAC9B,GAAIgC,GAAYA,EAASpI,OAAS,EAC9B,IAAK,IAAIqI,EAAI,EAAGA,GAAKD,EAASpI,OAAS,EAAGqI,IAAK,CAC3C,GAAID,EAASC,GAAG3K,KAAOmC,KAAKW,MAAMF,WAI9B,OAHCtC,EAAmBiT,YAEdpR,KAAKC,SAAS,CAAES,WAAYpB,GAAQA,EAAKzB,GAAIwT,oBAAqB9I,EAASC,GAAG1J,WAD9EkB,KAAKC,SAAS,CAAES,WAAYpB,aAAI,EAAJA,EAAMzB,KAEjC0K,EAASC,GAEpB,MAAMC,EAAQzI,KAAKmI,gBAAgBI,EAASC,IAC5C,GAAIC,EACA,OAAOA,CAAK,CAKxB,OADAzI,KAAK1B,MAAMiE,QAAQqC,UAAUqE,MAAM,iDAC5B,IACX,CAEQb,oBAAoB1C,GACxB,OAAIA,GAAgBA,EAAaa,SAAWb,EAAaa,QAAQpG,OAAS,EAClEH,KAAK1B,MAAMkC,mBAA0CI,IAA1BZ,KAAKW,MAAMF,WAC/BT,KAAK0I,eAAehD,EAAaa,QAASb,EAAa7H,IAAI,GAGlEO,EAAAA,cAAAA,EAAAA,SAAA,KACK4B,KAAK2I,sBAAsBjD,GAC3B1F,KAAK0I,eAAehD,EAAaa,QAASb,EAAa7H,IAAI,IAG7D6H,GAAgBA,EAAa5G,UAAY4G,EAAaoC,SAAWpC,EAAaoC,QAAQ3H,OAAS,EAC/FH,KAAKyG,oBAAoBf,EAAcA,EAAa7H,IAAI,GAAO,GAC/D6H,GAAgBA,EAAa5G,WAAa4G,EAAaoC,QACvD9H,KAAK+H,oBAAoBrC,EAAcA,EAAa7H,IAAI,IAEnEmC,KAAK1B,MAAMiE,QAAQqC,UAAUqE,MAAM,yDAC5B,KACX,CAEQP,eAAeH,EAA4B9H,EAAqBmI,GACpE,MAAM,aAAEpI,EAAY,SAAEwH,GAAahI,KAAK1B,MAClCuK,EAAyB7I,KAAK1B,MAAMuF,OAAOiF,uBAAwB,EACnEC,EAA0B/I,KAAK1B,MAAMuF,OAAOmF,kBAAoB,EAGtE,GAAIvI,GAAcT,KAAKW,MAAMF,aAAeA,EAExC,OADAT,KAAK1B,MAAMiE,QAAQqC,UAAUqE,MAAM,gEAC5B,KAGX,IAAKV,GAAgC,IAApBA,EAASpI,OAEtB,OADAH,KAAK1B,MAAMiE,QAAQqC,UAAUqE,MAAM,4DAC5B,KAGX,IAAIC,EAAyB,GAC7B,MAAMC,EACFZ,GACAA,EAASlJ,KAAI,CAACR,EAAuBuK,KACjC,MAAMC,EAAaxK,EAAO0H,SAAW1H,EAAO0H,QAAQpG,OAAS,EAC7D,IAAI2F,EAOAS,EALAT,EADAuD,GAAc7I,EACHR,KAAK2I,sBAAsB9J,EAAQ4B,EAAY2I,GAE/CvK,EAAOiJ,QAAU9H,KAAKyG,oBAAoB5H,EAAQuK,GAAOpJ,KAAK+H,oBAAoBlJ,GAIjG,MAAMyK,EAAcD,GAAcR,GAA0B7I,KAAKxB,cAAgB+K,KAAKC,MAAMT,GAA2B,EAMvH,OALIO,IACAtJ,KAAKxB,eACL0K,EAAiBL,EAAyB,SAAS7I,KAAKxB,aAAaiL,aAAe,GACpFlD,EAAUvG,KAAK0I,eAAe7J,EAAO0H,QAAS/F,EAAe3B,EAAOhB,QAAK+C,GAAW,IAGpFxC,EAAAA,cAAC8H,EAAAA,KAAI1C,OAAAC,OAAA,GACGuE,EAAQ,CACZd,IAAKrI,EAAOhB,GACZ6F,UAAWmC,IAAWmC,EAAStE,UAAW4F,GAAe,eACzDnD,IAAKnG,KAAKuR,uBAAuBnI,EAAKpJ,KAAKW,MAAM0Q,oBAAqBxS,EAAOC,UAAYkB,KAAKyR,YAAc,OAE3G3L,EACAS,EACE,IAGnB,OAAOvG,KAAK0J,YAAYR,EAAgBC,EAAa1I,EAAYmI,EACrE,CAEQD,sBAAsB9J,EAAuB4B,EAAqB6H,GACtE,MAAM,OAAEqB,GAAW3J,KAAK1B,MACxB,OACIF,EAAAA,cAAC8H,EAAAA,KAAI1C,OAAAC,OAAA,CACDyD,IAAKoB,GACDqB,EAAM,CACVC,QAAS5J,KAAKK,sBAAsBxB,EAAQ4B,GAC5CoJ,QAAS7J,KAAK0B,cAAa,kBACV1B,KAAKW,MAAMF,YAAcT,KAAKW,MAAMF,aAAe5B,EAAOhB,IAAG,mBAC5DmC,KAAKW,MAAMF,YAAcT,KAAKW,MAAMF,aAAe5B,EAAOhB,IAAG,cAClE4C,IAEZ5B,EAAOC,SAGpB,CAEQ2H,oBACJ5H,EACAyJ,GAEyB,IADzBwB,IAAAC,UAAA5J,OAAA,QAAAS,IAAAmJ,UAAA,KAAAA,UAAA,GACAC,EAAAD,UAAA5J,OAAA,QAAAS,IAAAmJ,UAAA,IAAAA,UAAA,GAEA,MAAM,KAAEE,GAASjK,KAAK1B,MAChBQ,EAAWD,EAAOC,SAAWD,EAAOC,SAAW,GAC/CoL,EAAcrL,EAAOiC,YAAcjC,EAAOiC,YAAc,GAC9Dd,KAAK6E,QAAQsF,cAAcC,MAAQtL,EACnC,MAAMuL,GAAaC,EAAAA,EAAAA,wBAAuBtK,KAAKwE,iBAAkBxE,KAAK6E,SACtE,OACIzG,EAAAA,cAAC8H,EAAAA,KAAI1C,OAAAC,OAAA,GACGwG,EAAI,CACR/C,IAAKoB,EACLuB,QAASG,GAAYhK,KAAK0B,cAC1BH,OAAQ1C,EAAO0L,iBAAmB,cAAW3J,EAC7C4J,YAAaV,GAAe9J,KAAKrB,qBAAqBuL,EAAarL,GACnE4L,KAAM5L,EAAOiJ,SACTuC,EAAU,CACdT,SAASc,EAAAA,EAAAA,kBAAiB1K,KAAKwE,iBAAkBxE,KAAK6E,QAAS/F,KAE9DD,EAAOC,SAGpB,CAEQ6L,uBAAuB7L,EAAmBgB,GAC9C,MAAM,KAAEmK,GAASjK,KAAK1B,MACtB0B,KAAK6E,QAAQsF,cAAcC,MAAQtL,EACnC,MAAMuL,GAAaC,EAAAA,EAAAA,wBAAuBtK,KAAKwE,iBAAkBxE,KAAK6E,SACtE,OAAI/F,GAAYgB,EAER1B,EAAAA,cAAC8H,EAAAA,KAAI1C,OAAAC,OAAA,GAAKwG,EAAI,CAAEQ,KAAM3K,GAAauK,EAAU,CAAET,SAASc,EAAAA,EAAAA,kBAAiB1K,KAAKwE,iBAAkBxE,KAAK6E,QAAS/F,KACzGA,GAIN,IACX,CAEQiJ,oBAAoBlJ,EAAuByJ,GAAyC,IAAzB0B,EAAAD,UAAA5J,OAAA,QAAAS,IAAAmJ,UAAA,IAAAA,UAAA,GAC/D,MAAM,KAAEa,GAAS5K,KAAK1B,MACtB,OACIF,EAAAA,cAAC8H,EAAAA,KAAI1C,OAAAC,OAAA,CAACyD,IAAKoB,GAAWsC,EAAI,CAAEf,QAASG,GAAYhK,KAAK0B,gBACjD7C,EAAOC,SAGpB,CAEQ4K,YAAYmB,EAAe1B,EAA4B2B,EAAsBC,GACjF,MAAM,aAAEC,EAAY,SAAE/E,EAAQ,kBAAEgF,EAAiB,kBAAEpK,EAAiB,uBAAEqK,EAAsB,aAAE1K,GAAiBR,KAAK1B,MAC9G6M,GACD3K,IACAK,GAAqBqK,KACrBhM,EAAAA,gBAAgBC,YAAYa,KAAKW,MAAMT,iBACvC6K,EACCK,GACD5K,GAAgB0K,GAA0BhM,EAAAA,gBAAgBC,YAAYa,KAAKW,MAAMT,iBAAmB6K,EACnGM,EAAoBrL,KAAKxB,aAAe,GAAK2M,EAAuBH,EAActH,UAAY,kBAEpG,OADA1D,KAAKxB,aAAe,EAEhBJ,EAAAA,cAAC8H,EAAAA,KAAI1C,OAAAC,OAAA,GAAKuH,EAAY,CAAEtH,UAAW2H,IAC/BjN,EAAAA,cAAC8H,EAAAA,KAAI1C,OAAAC,OAAA,GACGwC,EAAQ,CACZvC,UAAWmC,IACPI,EAASvC,UACTmH,EACAM,GAAwB,gBACxBA,GACInL,KAAK1B,MAAMuF,OAAOmF,kBAClBhJ,KAAK1B,MAAMuF,OAAOmF,iBAAmB,GACrC,yBAGPG,GAEJgC,GACGnL,KAAKW,MAAMT,eACXF,KAAKW,MAAMT,cAAcb,KAAIC,IAAI,IAAAgM,EAAA,OAC7BlN,EAAAA,cAAC8H,EAAAA,KAAI1C,OAAAC,OAAA,GAAKwH,EAAiB,CAAE/D,IAAK5H,EAAKN,IAAK0E,UAAWuH,EAAmBvH,YACrE1D,KAAKW,MAAMT,eAAiBF,KAAKoC,kBAAkB9C,GACnD8L,GAA6BpL,KAAK2K,uBAAuBrL,EAAKL,QAAkC,QAA3BqM,EAAEhM,EAAKO,4BAAoB,IAAAyL,OAAA,EAAzBA,EAA2BxL,SAChG,IAI3B,CA4FQ4B,gBACC1B,KAAK1B,MAAMkC,cACZR,KAAKC,SAAS,CAAEQ,gBAAYG,EAAWV,cAAe,KAAMmR,oBAAqB,IAEzF,EAnZelT,EAAAiT,aAAuB,EAub1C,4DCzbYS,wHAAZ,SAAYA,GACRA,EAAAA,EAAA,eACAA,EAAAA,EAAA,aACAA,EAAAA,EAAA,aACAA,EAAAA,EAAA,iBACAA,EAAAA,EAAA,eACAA,EAAAA,EAAA,0BACAA,EAAAA,EAAA,sBACH,CARD,CAAYA,IAAAA,EAAgB,KAsBrB,MAAMC,EAAmBA,CAACxT,EAAqC4B,EAAuB6R,KACzF,MAAM1P,GAAmBC,EAAAA,EAAAA,kBAAiB,GAAGpC,IAAiB5B,EAAM0T,SAASzP,QAAQC,cAAcC,eAAeC,aAC5GC,EAAgD,CAClDC,UAAW,CACPC,GAAI,CAAEC,EAAG,kBAAmBC,EAAG,EAAGC,EAAG,GACrCC,GAAI,CAAEH,EAAG,kBAAmBC,EAAG,EAAGC,EAAG,GACrC3F,GAAI,CAAEyF,EAAG,kBAAmBC,EAAG,EAAGC,EAAG,GACrCE,GAAI,CAAEJ,EAAG,kBAAmBC,EAAG,EAAGC,EAAG,IAEzCG,UAAU,GAEd,QAAyBvC,IAArByB,EAAgC,CAAC,IAAD4P,EAChC,MAAMC,EAAiC,CAAElT,IAAKqD,GAC9C,OACIjE,EAAAA,cAAC+T,EAAAA,GAAc3O,OAAAC,OAAA,CACXhB,eAAgBnE,EAAM0T,SAASzP,QAAQC,cAAcC,eACrDiB,UAAU,sBACNwO,EAAS,CACbvO,aAAcrF,EAAM0T,SAASzP,QAAQqB,QAAQD,aAC7CjE,cAA0D,QAA7CuS,EAAE3T,EAAM0T,SAASnO,OAAOC,6BAAqB,IAAAmO,EAAAA,EAAItP,EAC9DoB,oBAAoB,OACpBC,KAAK,WACL/E,QAAS8S,IACX,CAGV,OAAO,IAAI,ukBC/CR,MAAMK,UAAmChU,EAAAA,cAuB5CC,YAAmBC,GACfC,MAAMD,GArBO,KAAA+T,eAAyBR,EAAiBS,KAEnD,KAAA9T,aAAuBqT,EAAiBU,KAM/B,KAAA7T,UAAoBmT,EAAiBnT,UAIrC,KAAAK,iBAA0C,GAmG1C,KAAAyT,cAAgB,KAC7BxS,KAAKC,UAASwS,IAAa,CACvBhS,WAAY,EACZiS,WAAYD,EAAcC,aAC3B,EA0QU,KAAAC,0BAA4B,CAACC,EAA4B/L,IAA0B,KAChG,MAAM,eAAE1C,GAAmBnE,KAAKW,MAC1ByD,EAAU,CAAE,CAACwO,IAAW/L,GAC9B7G,KAAKC,SAAS,CAAEkE,eAAcnG,EAAAA,EAAA,GAAOmG,GAAmBC,IAAY,EAmIvD,KAAAzF,qBAAuB,CAACkU,EAA6BhU,IAA0B,KAC5F,MAAMC,EAAWD,EAAOC,SAAWD,EAAOC,SAAW,GAC/CC,EAA0C,CAAC,CAAEC,IAAK6T,EAAqB5T,QAASH,IAGtF,GAAII,EAAAA,gBAAgBC,YAAYN,EAAOO,oBACnC,IAAK,MAAME,KAAQT,EAAOO,mBAAoB,CAC1C,MAAM0B,EAAcxB,EAAKC,MAAMP,IAC/BD,EAAiBY,KAAK,CAClBX,IAAK8B,EACL7B,QAASK,EAAKM,KACdC,qBAAsB,CAAEC,QAASR,EAAKQ,QAAQC,iBAC/C,CAGXC,KAAKC,SAAS,CACVC,cAAehB,EAAAA,gBAAgBC,YAAYJ,GAAoBA,EAAmB,CAAC,CAAEC,IAAK,WAC5F,EASW,KAAAqB,sBAAwB,CAACC,EAAqBC,IAAsB,KAC5EP,KAAKW,MAAMmS,cASZV,EAA2BhB,aAAc,EACzCpR,KAAKC,SAAS,CACVQ,WAAYH,EAAKzC,GACjBwT,oBAAqB/Q,EAAKxB,SAC1B4B,WAAYH,MAZhBP,KAAKC,SAAS,CACVQ,WAAYH,EAAKzC,GACjB6C,WAAYH,IAEZP,KAAK1B,MAAM0T,SAASnR,mBACpBb,KAAKrB,qBAAqB2B,EAAKQ,YAAcR,EAA7CN,GAQD,EAQM,KAAAsR,cAAgB,IAAM,KACnCc,EAA2BhB,aAAc,EACzCpR,KAAKC,UAASwS,IAAa,CAAOhS,WAAYgS,EAAc/R,cAAc,EAO7D,KAAAU,oBAAuBC,IAChCrB,KAAKiB,SAASC,UAAYlB,KAAKiB,SAASC,QAAQI,SAASD,EAAME,UAC1DvB,KAAKW,MAAMmS,aAGZ9S,KAAKC,SAAS,CAAEQ,gBAAYG,EAAWyQ,oBAAqB,GAAIqB,WAAW,IAF3E1S,KAAKC,SAAS,CAAEQ,WAAY,EAAG4Q,oBAAqB,GAAIqB,WAAW,IAEgB,EAY9E,KAAAnB,uBAAyB,CAACjJ,EAAe+I,EAA8BG,KAE/EY,EAA2BhB,aADL,IACoB9I,MAG1CkJ,IAAmBH,IAGjBA,IAAwBG,EAMlB,KAAAuB,cAAgB,KAAW,IAAAC,EACnChT,KAAKW,MAAMmS,aAGZ9S,KAAKC,SAAS,CAAEQ,gBAAYG,EAAWyQ,oBAAqB,GAAIqB,WAAW,IAF3E1S,KAAKC,SAAS,CAAEQ,WAAY,EAAG4Q,oBAAqB,GAAIqB,WAAW,IAIjD,QAArBM,EAAAhT,KAAKiB,SAASC,eAAO,IAAA8R,GAArBA,EAAuBpB,SAAS,GAAmBzQ,OAAO,EAO9C,KAAAQ,aAAgBN,IAC8D,IAAD4R,EAAtF5R,EAAMO,UAAY5B,KAAKtB,YAAcsB,KAAKW,MAAMmS,cAAgB9S,KAAKW,MAAM+R,YAC3E1S,KAAKC,SAAS,CAAEQ,WAAY,EAAG4Q,oBAAqB,GAAIqB,WAAW,IAC7C,QAArBO,EAAAjT,KAAKiB,SAASC,eAAO,IAAA+R,GAArBA,EAAuBrB,SAAS,GAAmBzQ,QAAQ,EAOnD,KAAA+R,sBAAwB,KACrClT,KAAKC,SAAS,CAAE6S,aAAc9S,KAAK8S,cAAe,EA9lBlD9S,KAAKiB,SAAW7C,EAAAA,YAChB4B,KAAKyR,YAAcrT,EAAAA,YACnB,MAAM,aAAEsH,GAAiB1F,KAAK1B,MAAM0T,SACpC,GAAI9S,EAAAA,gBAAgBC,YAAYuG,IAAiBxG,EAAAA,gBAAgBC,YAAYuG,EAAa,GAAGa,SAAU,CACnG,MAAM2D,EAAcxE,EAAa,GAAGa,QAAQ,GAAGzF,YAAc4E,EAAa,GAAGa,QAAQ,GAAGzF,YAAc,GAChGhC,EAAW4G,EAAa,GAAGa,QAAQ,GAAGzH,SAAW4G,EAAa,GAAGa,QAAQ,GAAGzH,SAAW,GAC7FkB,KAAKjB,iBAAmB,CAAC,CAAEC,IAAKkL,EAAajL,QAASH,IAGlDI,EAAAA,gBAAgBC,YAAYuG,EAAa,GAAGa,QAAQ,GAAGnH,qBACvDsG,EAAa,GAAGa,QAAQ,GAAGnH,mBAAmBC,KAAIC,IAC9C,MAAMwB,EAAcxB,EAAKC,MAAMP,IAM/B,OALAgB,KAAKjB,iBAAiBY,KAAK,CACvBX,IAAK8B,EACL7B,QAASK,EAAKM,KACdC,qBAAsB,CAAEC,QAASR,EAAKQ,QAAQC,kBAE3C,IAAI,GACb,CAIVC,KAAKW,MAAQ,CACTF,WAAY,EACZ4Q,oBAAqB,GACrB3Q,gBAAYE,EACZuD,eAAgB,CAAC,EACjB2O,aAAc9S,KAAK8S,aACnB5S,cAAeF,KAAKjB,iBACpB2T,WAAW,GAEf1S,KAAKwE,kBAAmBC,EAAAA,EAAAA,oBACpBzE,KAAK1B,MAAM0T,SAASzP,QAAQqB,QAAQc,kBACpC1E,KAAK1B,MAAM0T,SAASrN,aACpB3E,KAAK1B,MAAM0T,SAASpN,WAExB5E,KAAK6E,SAAUC,EAAAA,EAAAA,kBAAiB,QAAS9E,KAAKwE,iBAAkB,GAAI,IACpExE,KAAKqK,YAAaC,EAAAA,EAAAA,wBAAuBtK,KAAKwE,iBAAkBxE,KAAK6E,QACzE,CAEqBiO,mBACjB,MAAoG,QAA7F3G,EAAAA,EAAAA,UAAS,CAAEgH,QAASC,EAAAA,YAAYC,QAAS9Q,QAASvC,KAAK1B,MAAM0T,SAASzP,QAAQqB,SACzF,CAEOmB,oBACH/E,KAAKsT,mCAAoCzG,EAAAA,EAAAA,mBAAkB/O,OAAQ,SAAUkC,KAAKkT,uBAClFhO,SAASE,iBAAiB,UAAYpF,KAAK2B,cAA2C,GACtF3B,KAAKkT,wBACLhO,SAASC,KAAKC,iBAAiB,YAAapF,KAAKoB,oBACrD,CAEOsQ,qBAAkB,IAAAC,EACO,QAAxBA,EAAA3R,KAAKyR,YAAYvQ,eAAO,IAAAyQ,GAAxBA,EAA0BC,SAAS,IAAM5R,KAAK1B,MAAM0T,SAASxR,cAC5DR,KAAKyR,YAAYvQ,QAAQ0Q,SAAS,GAAmBzQ,OAE9D,CAEOkE,uBACHvH,OAAOwH,oBAAoB,SAAUtF,KAAKsT,mCAAoC,GAC9EpO,SAASC,KAAKG,oBAAoB,YAAatF,KAAKoB,qBAAqB,EAC7E,CAEOmE,SACHvF,KAAKxB,aAAe,EAEpB,OACIJ,EAAAA,cAAC8H,EAAAA,KAAI,CAACxC,UAAU,qBAAqByC,IAAKnG,KAAKiB,UAC1CjB,KAAKW,MAAMmS,aACR9S,KAAKwF,oBAELpH,EAAAA,cAAAA,EAAAA,SAAA,KACIA,EAAAA,cAACuL,EAAAA,OAAMnG,OAAAC,OAAA,CACHC,UAAU,sBACVkG,QAAS5J,KAAKwS,cAAa,gBAT7B,oBAWEe,MAAOvT,KAAK1B,MAAM0T,SAASrE,UAAU6F,mBAAkB,aAC3CxT,KAAK1B,MAAM0T,SAASrE,UAAU6F,oBACtCxT,KAAKqK,aAEZrK,KAAKyT,uBAK1B,CAYQA,sBACJ,OACIrV,EAAAA,cAACsV,EAAAA,SAAQ,CAAChQ,UAAU,mCAAmCY,OAAQtE,KAAKW,MAAM+R,WACrE1S,KAAKW,MAAMmS,aAAe9S,KAAKwF,oBAAsBxF,KAAKyF,qBAGvE,CAEQD,oBACJ,MAAM,SAAES,EAAQ,iBAAEyH,EAAgB,2BAAED,EAA0B,uBAAEI,EAAsB,WAAElI,GAAe3F,KAAK1B,MAAM0T,SAGlH,OADAhS,KAAKxB,aAAe,EAEhBJ,EAAAA,cAACwH,EAAAA,OAAMpC,OAAAC,OAAA,GACCkC,EAAU,CACdjC,UAAWmC,IACPF,EAAWjC,UACX1D,KAAKW,MAAMmS,mBAA0ClS,IAA1BZ,KAAKW,MAAMF,WAA2B,QAAU,YAG/ErC,EAAAA,cAAC8H,EAAAA,KAAI1C,OAAAC,OAAA,GAAKwC,EAAQ,CAAEG,SAAS,OACxBpG,KAAKW,MAAMmS,mBAA0ClS,IAA1BZ,KAAKW,MAAMF,YACnCrC,EAAAA,cAAC8H,EAAAA,KAAI1C,OAAAC,OAAA,GAAKgK,GACNrP,EAAAA,cAAC8H,EAAAA,KAAI1C,OAAAC,OAAA,GAAKiK,EAAgB,CAAE9D,QAAS5J,KAAKsR,mBAC1ClT,EAAAA,cAAC8H,EAAAA,KAAI1C,OAAAC,OAAA,GAAKoK,GAAyB7N,KAAKW,MAAM0Q,sBAGrDrR,KAAKqG,kBAItB,CAEQZ,qBACJ,MAAM,SAAEQ,EAAQ,WAAEN,GAAe3F,KAAK1B,MAAM0T,SAE5C,OACI5T,EAAAA,cAACwH,EAAAA,OAAMpC,OAAAC,OAAA,GAAKkC,EAAU,CAAEjC,UAAWmC,IAAWF,EAAWjC,UAAW,8BAChEtF,EAAAA,cAAC8H,EAAAA,KAAI1C,OAAAC,OAAA,GAAKwC,EAAQ,CAAEG,SAAS,OACxBpG,KAAKqG,iBACNjI,EAAAA,cAAA,OAAKsF,UAAU,uBACXtF,EAAAA,cAAA,UAAQsF,UAAU,qBAAoB,aAAY,QAAQkG,QAAS5J,KAAK+S,kBAK5F,CAEQlL,kBAAkBvI,GACtB,OAAIA,EAAKwI,UAAY6L,EAAAA,iBAAiBC,mBAAmBtU,EAAKwI,SACnD9H,KAAKyG,oBAAoBnH,GACxBA,EAAKwI,QAGV,KAFI9H,KAAK+H,oBAAoBzI,EAGxC,CAEQ+G,iBACJ,MAAM,SAAE2B,GAAahI,KAAK1B,MAAM0T,SAC1BtM,EAAgC1F,KAAK1B,MAAM0T,SAAStM,cACpD,WAAEjF,GAAeT,KAAKW,MACtBsH,EAA8B,GAMpC,GAJI/I,EAAAA,gBAAgBC,YAAYuG,KAC5BA,EAAa,GAAG7H,GAAK,GAGrBmC,KAAKW,MAAMmS,mBAA+BlS,IAAfH,GAA4BvB,EAAAA,gBAAgBC,YAAYuG,GAAe,CAClG,MAAMI,EAAW9F,KAAKmI,qBAAgBvH,EAAW8E,GAE7CI,GACAmC,EAAatI,KACTvB,EAAAA,cAAC8H,EAAAA,KAAI1C,OAAAC,OAAA,CAACyD,IAAKpB,EAASjI,IAAQmK,GACvB,IACAhI,KAAKoI,oBAAoBtC,GAAS,IAAG,KAE7C,MAGL,IAAK,MAAOwC,EAAOhJ,KAASoG,EAAamO,UACrC5L,EAAatI,KACTvB,EAAAA,cAAC8H,EAAAA,KAAI1C,OAAAC,OAAA,CACDyD,IAAK5H,EAAKzB,IACNmK,EAAQ,CACZ7B,IAAKnG,KAAKuR,uBAAuBjJ,EAAOtI,KAAKW,MAAM0Q,oBAAqB/R,EAAKR,UAAYkB,KAAKyR,YAAc,OAE3GzR,KAAKoI,oBAAoB9I,KAM1C,OAAO2I,CACX,CAEQE,gBAAgB2L,EAAuBC,GAC3C,IAAKA,EACD,OAAO,KAGX,IAAK,IAAIzL,EAAQ,EAAGA,GAASyL,EAAK5T,OAAS0R,EAAiBmC,IAAK1L,IAAS,CACtE,MAAMhJ,EAAsByU,EAAKE,OAAO3L,IAExC,GAAIhJ,EAAKzB,KAAOmC,KAAKW,MAAMF,WAMvB,OALK2R,EAA2BhB,YAG5BpR,KAAKC,SAAS,CAAES,WAAYoT,EAAczC,oBAAqB/R,EAAKR,WAFpEkB,KAAKC,SAAS,CAAES,WAAYoT,IAIzBxU,EAEX,MAAMmJ,EAAQzI,KAAKmI,gBAAgB7I,EAAKzB,GAAIyB,EAAKiH,SACjD,GAAIkC,EACA,OAAOA,CAAK,CAGpB,OAAO,IACX,CAEQL,oBAAoB1C,GACxB,OAAIxG,EAAAA,gBAAgBC,YAAYuG,EAAaa,SACrCvG,KAAKW,MAAMmS,mBAA0ClS,IAA1BZ,KAAKW,MAAMF,WAC/BT,KAAK0I,eAAehD,EAAaa,QAASb,EAAa7H,IAAI,GAIlEO,EAAAA,cAAAA,EAAAA,SAAA,KACK4B,KAAK2I,sBAAsBjD,GAC3B1F,KAAK0I,eAAehD,EAAaa,QAASb,EAAa7H,KAGzD6H,EAAaoC,UAAY6L,EAAAA,iBAAiBC,mBAAmBlO,EAAaoC,SAC1E9H,KAAKyG,oBAAoBf,EAAcA,EAAa7H,IACnD6H,EAAaoC,SAAa9H,KAAKW,MAAMmS,mBAA0ClS,IAA1BZ,KAAKW,MAAMF,WAIrE,KAHIT,KAAK+H,oBAAoBrC,EAIxC,CAEQgD,eAAewL,EAAgCzT,EAAqB0T,GAAmB,IAAAC,EAAAC,EAC3F,IAAI9L,EAAwC2L,EACxCzT,IAAeoR,EAAiByC,WAChC/L,EAAW2L,EAAchF,QAAOqF,GAAeA,EAAY1W,IAAM0W,EAAY1W,IAAM0N,EAAAA,EAAgB2E,UAGvG,MAAM,SAAElI,GAAahI,KAAK1B,MAAM0T,SAC1BwC,EAA0E,QAAlDJ,EAAGpU,KAAK1B,MAAM0T,SAASnO,OAAOiF,4BAAoB,IAAAsL,GAAAA,EAC1ErL,EAAqE,QAA9CsL,EAAGrU,KAAK1B,MAAM0T,SAASnO,OAAOmF,wBAAgB,IAAAqL,EAAAA,EAAIxC,EAAiB4C,MAEhG,GAAIhU,GAAcT,KAAKW,MAAMF,aAAeA,EAExC,OADAT,KAAK1B,MAAM0T,SAASzP,QAAQqC,UAAUqE,MAAM,gEACrC,KAGX,IAAKV,IAAarJ,EAAAA,gBAAgBC,YAAYoJ,GAE1C,OADAvI,KAAK1B,MAAM0T,SAASzP,QAAQqC,UAAUqE,MAAM,4DACrC,KAGX,IAAIC,EAAyB,GAC7B,MAAMC,EAAcZ,EAASlJ,KAAI,CAACR,EAAuByJ,KACrD,MAAMe,EAAaxK,EAAO0H,SAAWrH,EAAAA,gBAAgBC,YAAYN,EAAO0H,SACxE,IAAIT,EAQAS,EANAT,EADAuD,GAAcrJ,KAAKW,MAAMmS,aACd9S,KAAK2I,sBAAsB9J,EAAQ4B,EAAY6H,GACnDtI,KAAKxB,eAAiBqT,EAAiBmC,KAAQ3K,EAG3C,KAFArJ,KAAK0U,YAAY7V,EAAQyJ,GAKxC,MAAMqM,EACFtL,GAAcmL,GAA4BxU,KAAKxB,cAAgB+K,KAAKC,MAAMT,GAA2B8I,EAAiBmC,IAEtH3K,IAAerJ,KAAKW,MAAMmS,eACtB9S,KAAKxB,cAAgBqT,EAAiB+C,IACtCrO,EAAUvG,KAAK6U,qBAAqBhW,GAC7BmB,KAAKxB,cAAgBwB,KAAKqS,iBACjCrS,KAAKxB,eACL0K,EAAiB,SAASlJ,KAAKxB,aAAaiL,aAC5ClD,EAAUvG,KAAK0I,eAAe7J,EAAO0H,aAAS3F,GAAW,KAI7D+T,GAAmB3U,KAAKW,MAAMmS,eAC9B9S,KAAKxB,eACL0K,EAAiBsL,EAA2B,SAASxU,KAAKxB,aAAaiL,aAAe,GACtFlD,EAAUvG,KAAK0I,eAAe7J,EAAO0H,QAAS1H,EAAOhB,IAAI,IAE7D,MAAMqM,EAAcrL,EAAOiC,YAAcjC,EAAOiC,YAAc,GAC9D,OACI1C,EAAAA,cAAC8H,EAAAA,KAAI1C,OAAAC,OAAA,GACGuE,EAAQ,CACZd,IAAKrI,EAAOhB,GACZ2M,YAAaxK,KAAKxB,eAAiBqT,EAAiBmC,KAAOhU,KAAKrB,qBAAqBuL,EAAarL,GAClG6E,UAAWmC,IAAWmC,EAAStE,UAAWiR,GAAmB,eAC7DxO,IAAKnG,KAAKuR,uBAAuBjJ,EAAOtI,KAAKW,MAAM0Q,oBAAqBxS,EAAOC,UAAYkB,KAAKyR,YAAc,OAE7G3L,EACAS,EACE,IAGf,OAAOvG,KAAK0J,YAAYR,EAAgBC,EAAagL,EACzD,CAEQO,YAAY7V,EAAuByJ,GACvC,IAAIxC,EAMJ,OAJIA,EADA9F,KAAKxB,eAAiBqT,EAAiBmC,IAC5BnV,EAAOiJ,QAAU9H,KAAK8U,4BAA4BjW,EAAQyJ,GAAStI,KAAK+H,oBAAoBlJ,GAE5FA,EAAOiJ,QAAU9H,KAAKyG,oBAAoB5H,EAAQyJ,GAAStI,KAAK+H,oBAAoBlJ,GAE5FiH,CACX,CAEQ+O,qBAAqB/O,GAAuB,IAAAiP,EAChD,MAAM7L,EAAiB,SAASlJ,KAAKxB,aAAaiL,aAC5C/C,EAAmBZ,EAAShH,SAE5BuF,OAAkCzD,IAArB8F,EAAiCA,EAAmB,GACjEE,EAFW5G,KAAKW,MAAMwD,eAGtB4E,EAAqE,QAA9CgM,EAAG/U,KAAK1B,MAAM0T,SAASnO,OAAOmF,wBAAgB,IAAA+L,EAAAA,EAAIlD,EAAiB4C,MAEhG,IAAI5N,GAAe,EACfD,EAAKd,EAASjI,MACdgJ,GAAe,GAEnB,MAAMC,EAA2B,CAAEkO,QAAS,EAAG1Q,OAAQuC,GAEvD,OACIzI,EAAAA,cAAC2I,EAAAA,OAAM,CACHM,cAAeP,EACfI,IAAKpB,EAASjI,GACd6F,UAAWmC,IAAW,yBAA0BqD,GAChD/B,UAAU,sBACVG,WAAW,uBACXC,eAAe,QACfb,iBAAkBrC,EAClB+C,SAAUpH,KAAK2S,0BAA0B7M,EAASjI,GAAIgJ,IAEtDzI,EAAAA,cAAA,WACK0H,EAASS,QAASlH,KAAKoI,GAChBvI,EAAAA,gBAAgBC,YAAYsI,EAAYlB,WACxCvG,KAAKxB,eACDwB,KAAKxB,aAAeuK,GACb/I,KAAK6U,qBAAqBpN,GAGlCzH,KAAK6H,kBAAkBJ,MAKlD,CAcQkB,sBAAsB9J,EAAuB4B,EAAqB6H,GACtE,OACIlK,EAAAA,cAAC8H,EAAAA,KAAI1C,OAAAC,OAAA,CACDyD,IAAKoB,GACDtI,KAAK1B,MAAM0T,SAASrI,OAAM,CAC9BC,QAAS5J,KAAKK,sBAAsBxB,EAAQ4B,GAAW,kBACtCT,KAAKW,MAAMF,YAAcT,KAAKW,MAAMF,aAAe5B,EAAOhB,IAAG,mBAC5DmC,KAAKW,MAAMF,YAAcT,KAAKW,MAAMF,aAAe5B,EAAOhB,IAAG,cAClE4C,EAAU,aACXT,KAAKW,MAAMmS,aAAejU,EAAOoI,eAAYrG,IAExD/B,EAAOC,SAGpB,CAEQ2H,oBAAoB5H,EAAuByJ,GAC/C,MAAM,KAAE2B,GAASjK,KAAK1B,MAAM0T,SACtBlT,EAAWD,EAAOC,SAAWD,EAAOC,SAAW,GACrDkB,KAAK6E,QAAQsF,cAAcC,MAAQtL,EACnC,MAAMuL,GAAaC,EAAAA,EAAAA,wBAAuBtK,KAAKwE,iBAAkBxE,KAAK6E,SACtE,OACIzG,EAAAA,cAAC8H,EAAAA,KAAI1C,OAAAC,OAAA,GACGwG,EAAI,CACR/C,IAAKoB,EACLmC,KAAM5L,EAAOiJ,SACTuC,EAAU,CACd9I,OAAQ1C,EAAO0L,iBAAmB,cAAW3J,EAC7CgJ,SAASc,EAAAA,EAAAA,kBAAiB1K,KAAKwE,iBAAkBxE,KAAK6E,QAAS/F,KAE9DD,EAAOC,SAGpB,CAEQgW,4BAA4BjW,EAAuByJ,GAA6C,IAA7B2M,IAAAlL,UAAA5J,OAAA,QAAAS,IAAAmJ,UAAA,KAAAA,UAAA,GACvE,MAAM,KAAEE,GAASjK,KAAK1B,MAAM0T,SACtBlT,EAAWD,EAAOC,SAAWD,EAAOC,SAAW,GAC/CoL,EAAcrL,EAAOiC,YAAcjC,EAAOiC,YAAc,GAC9Dd,KAAK6E,QAAQsF,cAAcC,MAAQtL,EACnC,MAAMuL,GAAaC,EAAAA,EAAAA,wBAAuBtK,KAAKwE,iBAAkBxE,KAAK6E,SACtE,OACIzG,EAAAA,cAAC8H,EAAAA,KAAI1C,OAAAC,OAAA,GACGwG,EAAI,CACR/C,IAAKoB,EACLkC,YAAayK,GAAiBjV,KAAKrB,qBAAqBuL,EAAarL,GACrE4L,KAAM5L,EAAOiJ,SACTuC,EAAU,CACdT,SAASc,EAAAA,EAAAA,kBAAiB1K,KAAKwE,iBAAkBxE,KAAK6E,QAAS/F,KAE9DD,EAAOC,SAGpB,CAEQ6L,uBAAuB7L,EAAmBgB,GAC9C,MAAM,KAAEmK,GAASjK,KAAK1B,MAAM0T,SAC5BhS,KAAK6E,QAAQsF,cAAcC,MAAQtL,EACnC,MAAMuL,GAAaC,EAAAA,EAAAA,wBAAuBtK,KAAKwE,iBAAkBxE,KAAK6E,SACtE,OAAI/F,GAAYgB,EAER1B,EAAAA,cAAC8H,EAAAA,KAAI1C,OAAAC,OAAA,GAAKwG,EAAI,CAAEQ,KAAM3K,GAAauK,EAAU,CAAET,SAASc,EAAAA,EAAAA,kBAAiB1K,KAAKwE,iBAAkBxE,KAAK6E,QAAS/F,KACzGA,GAIN,IACX,CAEQiJ,oBAAoBlJ,EAAuByJ,GAC/C,MAAM,KAAEsC,GAAS5K,KAAK1B,MAAM0T,SAC5B,OACI5T,EAAAA,cAAC8H,EAAAA,KAAI1C,OAAAC,OAAA,CAACyD,IAAKoB,GAAWsC,GACjB/L,EAAOC,SAGpB,CAEQ4K,YAAYmB,EAAe1B,EAA4B+L,GAAmB,IAAAC,EAC9E,MAAM,aAAEnK,EAAY,SAAE/E,EAAQ,kBAAEgF,EAAiB,kBAAEpK,EAAiB,uBAAEqK,GAA2BlL,KAAK1B,MAAM0T,SACtGoD,GACDpV,KAAKW,MAAMmS,cACZjS,GAC6B,OAA7Bb,KAAKW,MAAMT,oBACkBU,IAA7BZ,KAAKW,MAAMT,gBACVgV,EACCG,GACDrV,KAAKW,MAAMmS,cAAgB5H,GAA0BhM,EAAAA,gBAAgBC,YAAYa,KAAKW,MAAMT,iBAAmBgV,EAC9GI,EACFtV,KAAKxB,aAAeqT,EAAiB+C,KAAOQ,EAAyBpK,EAActH,UAAY,kBACnG1D,KAAKxB,aAAeqT,EAAiBmC,IACrC,MAAMuB,EACFH,GACApV,KAAK1B,MAAM0T,SAASnO,OAAOmF,kBAC3BhJ,KAAK1B,MAAM0T,SAASnO,OAAOmF,iBAAmB6I,EAAiB+C,KAC/D,sBAEEY,EAAyC,QAA3BL,EAAGnV,KAAKW,MAAMT,qBAAa,IAAAiV,OAAA,EAAxBA,EAA0BjG,QAAO3P,IAAUoU,EAAAA,iBAAiBC,mBAAmBrU,EAAMP,OACtGyW,EAAqBD,aAAc,EAAdA,EAAgBnW,KAAIC,GAAQA,EAAKN,MAAK0W,KAAK,KACtE,OACItX,EAAAA,cAAC8H,EAAAA,KAAI1C,OAAAC,OAAA,GAAKuH,EAAY,CAAEtH,UAAW4R,IAC/BlX,EAAAA,cAAC8H,EAAAA,KAAI1C,OAAAC,OAAA,GACGwC,EAAQ,CACZvC,UAAWmC,IAAWI,EAASvC,UAAWmH,EAAOuK,GAA0B,gBAAiBG,KAE3FpM,GAEL/K,EAAAA,cAAA,OAAKsF,UAAU,2BAA2BwD,IAAKuO,GAC1CL,GACGlW,EAAAA,gBAAgBC,YAAYqW,IAC5BA,EAAenW,KAAIC,IAAI,IAAAqW,EAAArK,EAAA,OACnBlN,EAAAA,cAAC8H,EAAAA,KAAI1C,OAAAC,OAAA,GAAKwH,EAAiB,CAAEvH,UAAWuH,EAAmBvH,UAAWwD,IAAK5H,EAAKN,MAC3E8S,EAAiB9R,KAAK1B,MAAe,QAAVqX,EAAErW,EAAKN,WAAG,IAAA2W,EAAAA,EAAI,GAAIrW,EAAKL,QAASwK,YAC3D4L,GACGrV,KAAK2K,uBAAuBrL,EAAKL,QAAkC,QAA3BqM,EAAEhM,EAAKO,4BAAoB,IAAAyL,OAAA,EAAzBA,EAA2BxL,SACtE,KAK/B,EA7fesS,EAAAhB,aAAuB,GAgE5BH,EAAAA,EAAAA,IAAA,CAATE,EAAAA,IAAQ,iCA0jBb,+kBC3nBO,MAAMyE,UAAkCxX,EAAAA,cAyB3CC,YAAmBC,GACfC,MAAMD,GAvBO,KAAA+T,eAAyBR,EAAiBS,KAEnD,KAAA9T,aAAuBqT,EAAiBU,KAM/B,KAAA7T,UAAoBmT,EAAiBnT,UAIrC,KAAAK,iBAA0C,GAEnD,KAAA2G,aAAgC,GAoGvB,KAAA8M,cAAgB,KAC7BxS,KAAKC,UAASwS,IAAa,CACvBhS,WAAYoR,EAAiByC,SAC7B5B,WAAYD,EAAcC,aAC3B,EAuTU,KAAAC,0BAA4B,CAACC,EAA4B/L,IAA0B,KAChG,MAAM,eAAE1C,GAAmBnE,KAAKW,MAC1ByD,EAAU,CAAE,CAACwO,IAAW/L,GAC9B7G,KAAKC,SAAS,CAAEkE,eAAcnG,EAAAA,EAAA,GAAOmG,GAAmBC,IAAY,EAwIvD,KAAAzF,qBAAuB,CAACkU,EAA6BhU,IAA0B,KAC5F,MAAMC,EAAWD,EAAOC,SAAWD,EAAOC,SAAW,GAC/CC,EAA0C,CAAC,CAAEC,IAAK6T,EAAqB5T,QAASH,IAGtF,GAAII,EAAAA,gBAAgBC,YAAYN,EAAOO,oBACnC,IAAK,MAAME,KAAQT,EAAOO,mBAAoB,CAC1C,MAAM0B,EAAcxB,EAAKC,MAAMP,IAC/BD,EAAiBY,KAAK,CAClBX,IAAK8B,EACL7B,QAASK,EAAKM,KACdC,qBAAsB,CAAEC,QAASR,EAAKQ,QAAQC,iBAC/C,CAGXC,KAAKC,SAAS,CACVC,cAAehB,EAAAA,gBAAgBC,YAAYJ,GAAoBA,EAAmB,CAAC,CAAEC,IAAK,WAC5F,EASW,KAAAqB,sBAAwB,CAACC,EAAqBC,IAAsB,KAC5EP,KAAKW,MAAMmS,cASZ8C,EAA0BxE,aAAc,EACxCpR,KAAKC,SAAS,CACVQ,WAAYH,EAAKzC,GACjBwT,oBAAqB/Q,EAAKxB,SAC1B4B,WAAYH,MAZhBP,KAAKC,SAAS,CACVQ,WAAYH,EAAKzC,GACjB6C,WAAYH,IAEZP,KAAK1B,MAAM0T,SAASnR,mBACpBb,KAAKrB,qBAAqB2B,EAAKQ,YAAcR,EAA7CN,GAQD,EAQM,KAAAsR,cAAgB,IAAM,KACnCsE,EAA0BxE,aAAc,EACxCpR,KAAKC,UAASwS,IAAa,CAAOhS,WAAYgS,EAAc/R,cAAc,EAO7D,KAAAU,oBAAuBC,IAChCrB,KAAKiB,SAASC,UAAYlB,KAAKiB,SAASC,QAAQI,SAASD,EAAME,UAC1DvB,KAAKW,MAAMmS,aAGZ9S,KAAKC,SAAS,CAAEQ,gBAAYG,EAAWyQ,oBAAqB,GAAIqB,WAAW,IAF3E1S,KAAKC,SAAS,CAAEQ,WAAYoR,EAAiByC,SAAUjD,oBAAqB,GAAIqB,WAAW,IAER,EAQ9E,KAAAmD,gBAAkB,KAC/B,MAAM,aAAEnQ,GAAiB1F,KAAK1B,MAAM0T,SAEoE,IAAD8D,GADvG9V,KAAK0F,aAAeA,EAChBxG,EAAAA,gBAAgBC,YAAYuG,IAAiBxG,EAAAA,gBAAgBC,YAAYuG,EAAa,GAAGa,YAC7D,QAA5BuP,EAAA9V,KAAK0F,aAAa,GAAGa,eAAO,IAAAuP,GAA5BA,EAA8BzW,KAAIC,IAC9B,MAAMyW,EAAgB,CAAC,EAOvB,OANAvS,OAAOC,OAAOsS,EAAe,CAAEjV,YAAaxB,EAAKwB,cACjD0C,OAAOC,OAAOsS,EAAe,CAAEjX,SAAUkB,KAAK1B,MAAM0T,SAASrE,UAAUkD,sBACvErN,OAAOC,OAAOsS,EAAe,CAAEjO,QAASxI,EAAKwI,UACzC5I,EAAAA,gBAAgBC,YAAYG,EAAKiH,UAAYjH,EAAK2Q,aAAezE,EAAAA,EAAW0E,QAC5E5Q,EAAKiH,QAAQyP,QAAQD,GAElBzW,CAAI,IACZ,EAWM,KAAAiS,uBAAyB,CAACjJ,EAAe+I,EAA8BG,KAE/EoE,EAA0BxE,aADJ,IACmB9I,MAGzCkJ,IAAmBH,IAGjBA,IAAwBG,EAMlB,KAAAuB,cAAgB,KACxB/S,KAAKW,MAAMmS,aAGZ9S,KAAKC,SAAS,CAAEQ,gBAAYG,EAAWyQ,oBAAqB,GAAIqB,WAAW,IAF3E1S,KAAKC,SAAS,CAAEQ,WAAYoR,EAAiByC,SAAUjD,oBAAqB,GAAIqB,WAAW,GAEP,EAQ3E,KAAA/Q,aAAgBN,IACzBA,EAAMO,UAAY5B,KAAKtB,YAAcsB,KAAKW,MAAMmS,cAAgB9S,KAAKW,MAAM+R,WAC3E1S,KAAKC,SAAS,CAAEQ,WAAYoR,EAAiByC,SAAUjD,oBAAqB,GAAIqB,WAAW,GAAS,EAO3F,KAAAQ,sBAAwB,KACrClT,KAAKC,SAAS,CAAE6S,aAAc9S,KAAK8S,cAAe,EAnqBlD9S,KAAKiB,SAAW7C,EAAAA,YAChB4B,KAAKyR,YAAcrT,EAAAA,YACnB,MAAM,aAAEsH,GAAiB1F,KAAK1B,MAAM0T,SACpC,GAAI9S,EAAAA,gBAAgBC,YAAYuG,IAAiBxG,EAAAA,gBAAgBC,YAAYuG,EAAa,GAAGa,SAAU,CACnG,MAAM2D,EAAcxE,EAAa,GAAGa,QAAQ,GAAGzF,YAAc4E,EAAa,GAAGa,QAAQ,GAAGzF,YAAc,GAChGhC,EAAW4G,EAAa,GAAGa,QAAQ,GAAGzH,SAAW4G,EAAa,GAAGa,QAAQ,GAAGzH,SAAW,GAC7FkB,KAAKjB,iBAAmB,CAAC,CAAEC,IAAKkL,EAAajL,QAASH,IAGlDI,EAAAA,gBAAgBC,YAAYuG,EAAa,GAAGa,QAAQ,GAAGnH,qBACvDsG,EAAa,GAAGa,QAAQ,GAAGnH,mBAAmBC,KAAIC,IAC9C,MAAMwB,EAAcxB,EAAKC,MAAMP,IAM/B,OALAgB,KAAKjB,iBAAiBY,KAAK,CACvBX,IAAK8B,EACL7B,QAASK,EAAKM,KACdC,qBAAsB,CAAEC,QAASR,EAAKQ,QAAQC,kBAE3C,IAAI,GACb,CAGVC,KAAKW,MAAQ,CACTF,WAAYoR,EAAiByC,SAC7BjD,oBAAqB,GACrB3Q,gBAAYE,EACZuD,eAAgB,CAAC,EACjB2O,aAAc9S,KAAK8S,aACnB5S,cAAeF,KAAKjB,iBACpB2T,WAAW,GAGf1S,KAAKwE,kBAAmBC,EAAAA,EAAAA,oBACpBzE,KAAK1B,MAAM0T,SAASzP,QAAQqB,QAAQc,kBACpC1E,KAAK1B,MAAM0T,SAASrN,aACpB3E,KAAK1B,MAAM0T,SAASpN,WAExB5E,KAAK6E,SAAUC,EAAAA,EAAAA,kBAAiB,QAAS9E,KAAKwE,iBAAkB,GAAI,IACpExE,KAAKqK,YAAaC,EAAAA,EAAAA,wBAAuBtK,KAAKwE,iBAAkBxE,KAAK6E,QACzE,CAEqBiO,mBACjB,MAAoG,QAA7F3G,EAAAA,EAAAA,UAAS,CAAEgH,QAASC,EAAAA,YAAYC,QAAS9Q,QAASvC,KAAK1B,MAAM0T,SAASzP,QAAQqB,SACzF,CAEOmB,oBACH/E,KAAKsT,mCAAoCzG,EAAAA,EAAAA,mBAAkB/O,OAAQ,SAAUkC,KAAKkT,uBAClFhO,SAASE,iBAAiB,UAAYpF,KAAK2B,cAA2C,GACtF3B,KAAKkT,wBACLhO,SAASC,KAAKC,iBAAiB,YAAapF,KAAKoB,qBACjDpB,KAAK6V,iBACT,CAEOnE,qBAAkB,IAAAC,EACO,QAAxBA,EAAA3R,KAAKyR,YAAYvQ,eAAO,IAAAyQ,GAAxBA,EAA0BC,SAAS,IAAM5R,KAAK1B,MAAM0T,SAASxR,cAC5DR,KAAKyR,YAAYvQ,QAAQ0Q,SAAS,GAAmBzQ,OAE9D,CAEOkE,uBACHvH,OAAOwH,oBAAoB,SAAUtF,KAAKsT,mCAAoC,GAC9EpO,SAASC,KAAKG,oBAAoB,YAAatF,KAAKoB,qBAAqB,EAC7E,CAEOmE,SACHvF,KAAKxB,aAAeqT,EAAiBmC,IAErC,OACI5V,EAAAA,cAAC8H,EAAAA,KAAI,CAACxC,UAAU,qBAAqByC,IAAKnG,KAAKiB,UAC1CjB,KAAKW,MAAMmS,aACR9S,KAAKwF,oBAELpH,EAAAA,cAAAA,EAAAA,SAAA,KACIA,EAAAA,cAACuL,EAAAA,OAAMnG,OAAAC,OAAA,CACHC,UAAU,sBACVkG,QAAS5J,KAAKwS,cAAa,gBAT7B,oBAWEe,MAAOvT,KAAK1B,MAAM0T,SAASrE,UAAU6F,mBAAkB,aAC3CxT,KAAK1B,MAAM0T,SAASrE,UAAU6F,oBACtCxT,KAAKqK,aAEZrK,KAAKyT,uBAK1B,CAYQA,sBACJ,OACIrV,EAAAA,cAACsV,EAAAA,SAAQ,CAAChQ,UAAU,mCAAmCY,OAAQtE,KAAKW,MAAM+R,WACrE1S,KAAKW,MAAMmS,aAAe9S,KAAKwF,oBAAsBxF,KAAKyF,qBAGvE,CAEQD,oBACJ,MAAM,iBAAEkI,EAAgB,2BAAED,EAA0B,uBAAEI,EAAsB,WAAElI,GAAe3F,KAAK1B,MAAM0T,SAGxG,OADAhS,KAAKxB,aAAeqT,EAAiBmC,IAEjC5V,EAAAA,cAACwH,EAAAA,OAAMpC,OAAAC,OAAA,GACCkC,EAAU,CACdjC,UAAWmC,IACPF,EAAWjC,UACX1D,KAAKW,MAAMmS,mBAA0ClS,IAA1BZ,KAAKW,MAAMF,WAA2B,QAAU,YAG/ErC,EAAAA,cAAC8H,EAAAA,KAAI1C,OAAAC,OAAA,GAAKzD,KAAK1B,MAAM0T,SAAS/L,SAAQ,CAAEG,SAAS,OAC5CpG,KAAKW,MAAMmS,mBAA0ClS,IAA1BZ,KAAKW,MAAMF,YACnCrC,EAAAA,cAAC8H,EAAAA,KAAI1C,OAAAC,OAAA,GAAKgK,GACNrP,EAAAA,cAAC8H,EAAAA,KAAI1C,OAAAC,OAAA,GAAKiK,EAAgB,CAAE9D,QAAS5J,KAAKsR,mBAC1ClT,EAAAA,cAAC8H,EAAAA,KAAI1C,OAAAC,OAAA,GAAKoK,GAAyB7N,KAAKW,MAAM0Q,sBAGrDrR,KAAKqG,kBAItB,CAEQZ,qBACJ,MAAM,WAAEE,GAAe3F,KAAK1B,MAAM0T,SAClC,OACI5T,EAAAA,cAACwH,EAAAA,OAAMpC,OAAAC,OAAA,GAAKkC,EAAU,CAAEjC,UAAWmC,IAAWF,EAAWjC,aACrDtF,EAAAA,cAAC8H,EAAAA,KAAI1C,OAAAC,OAAA,GAAKzD,KAAK1B,MAAM0T,SAAS/L,SAAQ,CAAEG,SAAS,OAC5CpG,KAAKqG,iBACNjI,EAAAA,cAAA,OAAKsF,UAAU,uBACXtF,EAAAA,cAAA,UAAQsF,UAAU,qBAAoB,aAAY,QAAQkG,QAAS5J,KAAK+S,kBAK5F,CAEQlL,kBAAkBvI,GACtB,OAAIA,EAAKwI,UAAY6L,EAAAA,iBAAiBC,mBAAmBtU,EAAKwI,SACnD9H,KAAKyG,oBAAoBnH,GACxBA,EAAKwI,QAGV,KAFI9H,KAAK+H,oBAAoBzI,EAGxC,CAEQ+G,iBACJ,MAAM,SAAE2B,GAAahI,KAAK1B,MAAM0T,SAChC,IAAItM,EAAgC,GAEhCA,EADA1F,KAAKW,MAAMmS,aACI9S,KAAK0F,aAEL1F,KAAK1B,MAAM0T,SAAStM,aAEvC,MAAM,WAAEjF,GAAeT,KAAKW,MACtBsH,EAA8B,GACpC,IAAIgO,EAA2C,GAC3CC,EAAkD,GACtD,MAAMC,EAAiBC,KAAKC,MAAMD,KAAKE,UAAU5Q,IAEjD,IAAK,MAAMpG,KAAQ6W,EACfD,EAAqB5W,EAAKiH,QAAS2I,QAAOqF,GAAeA,EAAY1W,IAAM0W,EAAY1W,IAAM0N,EAAAA,EAAgB2E,SAC7G5Q,EAAKiH,QAAU2P,EAGnB,IAAK,MAAM5W,KAAQoG,EACfuQ,EAAc3W,EAAKiH,QAAS2I,QAAOqF,GAAeA,EAAY1W,IAAM0W,EAAY1W,GAAK0N,EAAAA,EAAgB2E,SAGzG,GAAIlQ,KAAKW,MAAMmS,mBAA+BlS,IAAfH,GAA4BvB,EAAAA,gBAAgBC,YAAYuG,GAAe,CAClG,IAAII,EAAiC,CAAC,EACtC,IAAK,MAAMoC,KAAiBxC,EAAc,CACtC,GAAIwC,EAAcrK,KAAO4C,EAAY,CACjCqF,EAAWoC,EACN0N,EAA0BxE,YAK3BpR,KAAKC,SAAS,CACVS,gBAAYE,EACZyQ,oBAAqBnJ,EAAcpJ,WANvCkB,KAAKC,SAAS,CACVS,gBAAYE,IAQpB,KAAM,CAGV,GADAkF,EAAW9F,KAAKmI,gBAAgBD,GAC5BpC,GAAYA,EAASjI,KAAO4C,EAC5B,MAIJqF,GACAmC,EAAatI,KACTvB,EAAAA,cAAC8H,EAAAA,KAAI1C,OAAAC,OAAA,CAACyD,IAAKpB,EAASjI,IAAQmK,GACvB,IACAhI,KAAKoI,oBAAoBtC,GAAS,IAAG,KAE7C,KAEF,CACH,IAAK,MAAOwC,EAAOhJ,KAAS6W,EAAetC,UACvC5L,EAAatI,KACTvB,EAAAA,cAAC8H,EAAAA,KAAI1C,OAAAC,OAAA,CACDyD,IAAK5H,EAAKzB,IACNmK,EAAQ,CACZ7B,IAAKnG,KAAKuR,uBAAuBjJ,EAAOtI,KAAKW,MAAM0Q,oBAAqB/R,EAAKR,UAAYkB,KAAKyR,YAAc,OAE3GzR,KAAKoI,oBAAoB9I,KAKtC,IAAK,MAAOgJ,EAAOhJ,KAAS2W,EAAYpC,UACpC5L,EAAatI,KACTvB,EAAAA,cAAC8H,EAAAA,KAAI1C,OAAAC,OAAA,CACDyD,IAAK5H,EAAKzB,IACNmK,EAAQ,CACZ7B,IAAKnG,KAAKuR,uBAAuBjJ,EAAOtI,KAAKW,MAAM0Q,oBAAqB/R,EAAKR,UAAYkB,KAAKyR,YAAc,OAE3GzR,KAAKoI,oBAAoB9I,IAEjC,CAIT,OAAO2I,CACX,CAEQE,gBAAgB7I,GACpB,MAAMiJ,EAAWjJ,aAAI,EAAJA,EAAMiH,QACvB,GAAIgC,GAAYrJ,EAAAA,gBAAgBC,YAAYoJ,GACxC,IAAK,IAAID,EAAQ,EAAGA,GAASC,EAASpI,OAAS0R,EAAiBmC,IAAK1L,IAAS,CAC1E,MAAM/B,EAAyBgC,EAAS0L,OAAO3L,IAC/C,IAAIwL,EAAexU,aAAI,EAAJA,EAAMzB,GAEzB,GAAI0I,EAAQ1I,KAAOmC,KAAKW,MAAMF,WAU1B,OATIqT,IAAiBjC,EAAiByC,UAAY/N,EAAQ1I,GAAM0N,EAAAA,EAAgB2E,SAC5E4D,OAAelT,GAGdgV,EAA0BxE,YAG3BpR,KAAKC,SAAS,CAAES,WAAYoT,EAAczC,oBAAqB9K,EAAQzH,WAFvEkB,KAAKC,SAAS,CAAES,WAAYoT,IAIzBvN,EAEX,MAAMkC,EAAQzI,KAAKmI,gBAAgB5B,GACnC,GAAIkC,EACA,OAAOA,CAAK,CAIxB,OAAO,IACX,CAEQL,oBAAoB1C,GACxB,OAAIxG,EAAAA,gBAAgBC,YAAYuG,EAAaa,SACrCvG,KAAKW,MAAMmS,mBAA0ClS,IAA1BZ,KAAKW,MAAMF,WAC/BT,KAAK0I,eAAehD,EAAaa,QAASb,EAAa7H,IAAI,GAGlEO,EAAAA,cAAAA,EAAAA,SAAA,KACK4B,KAAK2I,sBAAsBjD,GAC3B1F,KAAK0I,eAAehD,EAAaa,QAASb,EAAa7H,KAGzD6H,EAAaoC,UAAY6L,EAAAA,iBAAiBC,mBAAmBlO,EAAaoC,SAC1E9H,KAAKyG,oBAAoBf,EAAcA,EAAa7H,IACnD6H,EAAaoC,QAIlB,KAHI9H,KAAK+H,oBAAoBrC,EAIxC,CAEQgD,eAAewL,EAAgCzT,EAAqB0T,GAAmB,IAAAC,EAAAC,EAC3F,IAAI9L,EAAwC2L,EACxCzT,IAAeoR,EAAiByC,WAChC/L,EAAW2L,EAAchF,QAAOqF,GAAeA,EAAY1W,IAAM0W,EAAY1W,IAAM0N,EAAAA,EAAgB2E,UAGvG,MAAM,SAAElI,GAAahI,KAAK1B,MAAM0T,SAC1BwC,EAA0E,QAAlDJ,EAAGpU,KAAK1B,MAAM0T,SAASnO,OAAOiF,4BAAoB,IAAAsL,GAAAA,EAC1ErL,EAAqE,QAA9CsL,EAAGrU,KAAK1B,MAAM0T,SAASnO,OAAOmF,wBAAgB,IAAAqL,EAAAA,EAAIxC,EAAiB4C,MAEhG,GAAIhU,GAAcT,KAAKW,MAAMF,aAAeA,EAExC,OADAT,KAAK1B,MAAM0T,SAASzP,QAAQqC,UAAUqE,MAAM,gEACrC,KAGX,IAAKV,IAAarJ,EAAAA,gBAAgBC,YAAYoJ,GAE1C,OADAvI,KAAK1B,MAAM0T,SAASzP,QAAQqC,UAAUqE,MAAM,4DACrC,KAGX,IAAIC,EAAyB,GAC7B,MAAMC,EAAcZ,EAASlJ,KAAI,CAACR,EAAuByJ,KACrD,MAAMe,EAAaxK,EAAO0H,SAAWrH,EAAAA,gBAAgBC,YAAYN,EAAO0H,SACxE,IAAIT,EAQAS,EANAT,EADAuD,GAAcrJ,KAAKW,MAAMmS,aACd9S,KAAK2I,sBAAsB9J,EAAQ4B,EAAY6H,GACnDtI,KAAKxB,eAAiBqT,EAAiBmC,KAAQ3K,EAG3C,KAFArJ,KAAK0U,YAAY7V,EAAQyJ,GAKxC,MAAMqM,EACFtL,GAAcmL,GAA4BxU,KAAKxB,cAAgB+K,KAAKC,MAAMT,GAA2B8I,EAAiBmC,IAEtH3K,IAAerJ,KAAKW,MAAMmS,eACtB9S,KAAKxB,cAAgBqT,EAAiB+C,IACtCrO,EAAUvG,KAAK6U,qBAAqBhW,GAC7BmB,KAAKxB,cAAgBwB,KAAKqS,eAAiBR,EAAiBmC,MACnEhU,KAAKxB,eACL0K,EAAiB,SAASlJ,KAAKxB,aAAaiL,aAC5ClD,EAAUvG,KAAK0I,eAAe7J,EAAO0H,aAAS3F,GAAW,KAG7D+T,GAAmB3U,KAAKW,MAAMmS,eAC9B9S,KAAKxB,eACL0K,EAAiBsL,EAA2B,SAASxU,KAAKxB,aAAaiL,aAAe,GACtFlD,EAAUvG,KAAK0I,eAAe7J,EAAO0H,QAAS1H,EAAOhB,IAAI,IAE7D,MAAMqM,EAAcrL,EAAOiC,YAAcjC,EAAOiC,YAAc,GAC9D,OACI1C,EAAAA,cAAC8H,EAAAA,KAAI1C,OAAAC,OAAA,GACGuE,EAAQ,CACZd,IAAKrI,EAAOhB,GACZ2M,YAAaxK,KAAKxB,eAAiBqT,EAAiBmC,KAAOhU,KAAKrB,qBAAqBuL,EAAarL,GAClG6E,UAAWmC,IAAWmC,EAAStE,UAAWiR,GAAmB,eAC7DxO,IAAKnG,KAAKuR,uBAAuBjJ,EAAOtI,KAAKW,MAAM0Q,oBAAqBxS,EAAOC,UAAYkB,KAAKyR,YAAc,OAE7G3L,EACAS,EACE,IAGf,OAAOvG,KAAK0J,YAAYR,EAAgBC,EAAagL,EACzD,CAEQO,YAAY7V,EAAuByJ,GACvC,IAAIxC,EAMJ,OAJIA,EADA9F,KAAKxB,eAAiBqT,EAAiBmC,IAC5BnV,EAAOiJ,QAAU9H,KAAK8U,4BAA4BjW,EAAQyJ,GAAStI,KAAK+H,oBAAoBlJ,GAE5FA,EAAOiJ,QAAU9H,KAAKyG,oBAAoB5H,EAAQyJ,GAAStI,KAAK+H,oBAAoBlJ,GAE5FiH,CACX,CAEQ+O,qBAAqB/O,GAAuB,IAAAiP,EAChD,MAAM7L,EAAiB,SAASlJ,KAAKxB,aAAaiL,aAC5C/C,EAAmBZ,EAAShH,SAE5BuF,OAAkCzD,IAArB8F,EAAiCA,EAAmB,GACjEE,EAFW5G,KAAKW,MAAMwD,eAGtB4E,EAAqE,QAA9CgM,EAAG/U,KAAK1B,MAAM0T,SAASnO,OAAOmF,wBAAgB,IAAA+L,EAAAA,EAAIlD,EAAiB4C,MAEhG,IAAI5N,GAAe,EACfD,EAAKd,EAASjI,MACdgJ,GAAe,GAEnB,MAAMC,EAA2B,CAAEkO,QAAS,EAAG1Q,OAAQuC,GACvD,OACIzI,EAAAA,cAAC2I,EAAAA,OAAM,CACHM,cAAeP,EACfI,IAAKpB,EAASjI,GACd6F,UAAWmC,IAAW,yBAA0BqD,GAChD/B,UAAU,sBACVG,WAAW,uBACXC,eAAe,QACfb,iBAAkBrC,EAClB+C,SAAUpH,KAAK2S,0BAA0B7M,EAASjI,GAAIgJ,IAEtDzI,EAAAA,cAAA,WACK0H,EAASS,QAASlH,KAAKoI,GAChBvI,EAAAA,gBAAgBC,YAAYsI,EAAYlB,WACxCvG,KAAKxB,eACDwB,KAAKxB,aAAeuK,GACb/I,KAAK6U,qBAAqBpN,GAGlCzH,KAAK6H,kBAAkBJ,MAKlD,CAcQkB,sBAAsB9J,EAAuB4B,EAAqB6H,GACtE,OACIlK,EAAAA,cAAC8H,EAAAA,KAAI1C,OAAAC,OAAA,CACDyD,IAAKoB,GACDtI,KAAK1B,MAAM0T,SAASrI,OAAM,CAC9BC,QAAS5J,KAAKK,sBAAsBxB,EAAQ4B,GAAW,kBACtCT,KAAKW,MAAMF,YAAcT,KAAKW,MAAMF,aAAe5B,EAAOhB,IAAG,mBAC5DmC,KAAKW,MAAMF,YAAcT,KAAKW,MAAMF,aAAe5B,EAAOhB,IAAG,cAClE4C,EAAU,aACXT,KAAKW,MAAMmS,aAAejU,EAAOoI,eAAYrG,IAExD/B,EAAOC,SAGpB,CAEQ2H,oBAAoB5H,EAAuByJ,GAC/C,MAAM,KAAE2B,GAASjK,KAAK1B,MAAM0T,SACtBlT,EAAWD,EAAOC,SAAWD,EAAOC,SAAW,GACrDkB,KAAK6E,QAAQsF,cAAcC,MAAQtL,EACnC,MAAMuL,GAAaC,EAAAA,EAAAA,wBAAuBtK,KAAKwE,iBAAkBxE,KAAK6E,SACtE,OACIzG,EAAAA,cAAC8H,EAAAA,KAAI1C,OAAAC,OAAA,GACGwG,EAAI,CACR/C,IAAKoB,EACLmC,KAAM5L,EAAOiJ,SACTuC,EAAU,CACd9I,OAAQ1C,EAAO0L,iBAAmB,cAAW3J,EAC7CgJ,SAASc,EAAAA,EAAAA,kBAAiB1K,KAAKwE,iBAAkBxE,KAAK6E,QAAS/F,KAE9DD,EAAOC,SAGpB,CAEQgW,4BAA4BjW,EAAuByJ,GAA6C,IAA7B2M,IAAAlL,UAAA5J,OAAA,QAAAS,IAAAmJ,UAAA,KAAAA,UAAA,GACvE,MAAM,KAAEE,GAASjK,KAAK1B,MAAM0T,SACtBlT,EAAWD,EAAOC,SAAWD,EAAOC,SAAW,GAC/CoL,EAAcrL,EAAOiC,YAAcjC,EAAOiC,YAAc,GAC9Dd,KAAK6E,QAAQsF,cAAcC,MAAQtL,EACnC,MAAMuL,GAAaC,EAAAA,EAAAA,wBAAuBtK,KAAKwE,iBAAkBxE,KAAK6E,SACtE,OACIzG,EAAAA,cAAC8H,EAAAA,KAAI1C,OAAAC,OAAA,GACGwG,EAAI,CACR/C,IAAKoB,EACLkC,YAAayK,GAAiBjV,KAAKrB,qBAAqBuL,EAAarL,GACrE4L,KAAM5L,EAAOiJ,SACTuC,EAAU,CACdT,SAASc,EAAAA,EAAAA,kBAAiB1K,KAAKwE,iBAAkBxE,KAAK6E,QAAS/F,KAE9DD,EAAOC,SAGpB,CAEQ6L,uBAAuB7L,EAAmBgB,GAC9C,MAAM,KAAEmK,GAASjK,KAAK1B,MAAM0T,SAC5BhS,KAAK6E,QAAQsF,cAAcC,MAAQtL,EACnC,MAAMuL,GAAaC,EAAAA,EAAAA,wBAAuBtK,KAAKwE,iBAAkBxE,KAAK6E,SACtE,OAAI/F,GAAYgB,EAER1B,EAAAA,cAAC8H,EAAAA,KAAI1C,OAAAC,OAAA,GAAKwG,EAAI,CAAEQ,KAAM3K,GAAauK,EAAU,CAAET,SAASc,EAAAA,EAAAA,kBAAiB1K,KAAKwE,iBAAkBxE,KAAK6E,QAAS/F,KACzGA,GAIN,IACX,CAEQiJ,oBAAoBlJ,EAAuByJ,GAC/C,MAAM,KAAEsC,GAAS5K,KAAK1B,MAAM0T,SAC5B,OACI5T,EAAAA,cAAC8H,EAAAA,KAAI1C,OAAAC,OAAA,CAACyD,IAAKoB,GAAWsC,GACjB/L,EAAOC,SAGpB,CAEQ4K,YAAYmB,EAAe1B,EAA4B+L,GAAmB,IAAAC,EAC9E,MAAM,aAAEnK,EAAY,kBAAEC,EAAiB,kBAAEpK,EAAiB,uBAAEqK,GAA2BlL,KAAK1B,MAAM0T,SAC5FoD,GACDpV,KAAKW,MAAMmS,cACZjS,GAC6B,OAA7Bb,KAAKW,MAAMT,oBACkBU,IAA7BZ,KAAKW,MAAMT,gBACVgV,EACCG,GACDrV,KAAKW,MAAMmS,cAAgB5H,GAA0BhM,EAAAA,gBAAgBC,YAAYa,KAAKW,MAAMT,iBAAmBgV,EAC9GI,EACFtV,KAAKxB,aAAeqT,EAAiB+C,KAAOQ,EAAyBpK,EAActH,UAAY,kBACnG1D,KAAKxB,aAAeqT,EAAiBmC,IACrC,MAAMuB,EACFH,GACApV,KAAK1B,MAAM0T,SAASnO,OAAOmF,kBAC3BhJ,KAAK1B,MAAM0T,SAASnO,OAAOmF,iBAAmB6I,EAAiB+C,KAC/D,sBAEEY,EAAyC,QAA3BL,EAAGnV,KAAKW,MAAMT,qBAAa,IAAAiV,OAAA,EAAxBA,EAA0BjG,QAAO3P,IAAUoU,EAAAA,iBAAiBC,mBAAmBrU,EAAMP,OACtGyW,EAAqBD,aAAc,EAAdA,EAAgBnW,KAAIC,GAAQA,EAAKN,MAAK0W,KAAK,KACtE,OACItX,EAAAA,cAAC8H,EAAAA,KAAI1C,OAAAC,OAAA,GAAKuH,EAAY,CAAEtH,UAAW4R,IAC/BlX,EAAAA,cAAC8H,EAAAA,KAAI1C,OAAAC,OAAA,GACGzD,KAAK1B,MAAM0T,SAAS/L,SAAQ,CAChCvC,UAAWmC,IACP7F,KAAK1B,MAAM0T,SAAS/L,SAASvC,UAC7BmH,EACAuK,GAA0B,gBAC1BG,KAGHpM,GAEL/K,EAAAA,cAAA,OAAKsF,UAAU,2BAA2BwD,IAAKuO,GAC1CL,GACGlW,EAAAA,gBAAgBC,YAAYqW,IAC5BA,EAAenW,KAAIC,IAAI,IAAAqW,EAAArK,EAAA,OACnBlN,EAAAA,cAAC8H,EAAAA,KAAI1C,OAAAC,OAAA,GAAKwH,EAAiB,CAAEvH,UAAWuH,EAAmBvH,UAAWwD,IAAK5H,EAAKN,MAC3E8S,EAAiB9R,KAAK1B,MAAe,QAAVqX,EAAErW,EAAKN,WAAG,IAAA2W,EAAAA,EAAI,GAAIrW,EAAKL,QAASwK,YAC3D4L,GACGrV,KAAK2K,uBAAuBrL,EAAKL,QAAkC,QAA3BqM,EAAEhM,EAAKO,4BAAoB,IAAAyL,OAAA,EAAzBA,EAA2BxL,SACtE,KAK/B,EAljBe8V,EAAAxE,aAAuB,GAkE5BH,EAAAA,EAAAA,IAAA,CAATE,EAAAA,IAAQ,iCA+nBb,UC7sBA,EAR4B7S,GACpBA,EAAMuF,OAAO0K,cACNnQ,EAAAA,cAACwX,EAAyB,CAAC5D,SAAU1T,IAGzCF,EAAAA,cAACgU,EAA0B,CAACJ,SAAU1T,WCtBjDiY,EAAOC,QAAUpY,cCAjBmY,EAAOC,QAAUC","sources":["webpack://@msdyn365-commerce-partners/fabrikam/./lib/navigation-menu/module-registration.js?7039","webpack://@msdyn365-commerce-partners/fabrikam/./src/modules/fabrikam/views/navigation-menu.view.tsx?bc23","webpack://@msdyn365-commerce-partners/fabrikam/./src/modules/navigation-menu/navigation-menu.data.ts?9815","webpack://@msdyn365-commerce-partners/fabrikam/./src/modules/navigation-menu/navigation-menu.tsx?2bef","webpack://@msdyn365-commerce-partners/fabrikam/./src/modules/navigation-menu/navigation-menu.view.tsx?c594","webpack://@msdyn365-commerce-partners/fabrikam/./src/modules/adventureworks/views/components/navigation-menu-utilities.tsx?d092","webpack://@msdyn365-commerce-partners/fabrikam/./src/modules/adventureworks/views/components/navigation-menu-root-disabled.tsx?1d68","webpack://@msdyn365-commerce-partners/fabrikam/./src/modules/adventureworks/views/components/navigation-menu-root-enabled.tsx?d5b3","webpack://@msdyn365-commerce-partners/fabrikam/./src/modules/adventureworks/views/navigation-menu.view.tsx?5304","webpack://@msdyn365-commerce-partners/fabrikam/external var \"React\"?0d3b","webpack://@msdyn365-commerce-partners/fabrikam/external var \"ReactDOM\"?853b"],"sourcesContent":["const binding = { modules: {}, dataActions: {} };\n\n const registerActionId = (actionPath) => {\n if (binding.dataActions[actionPath] &&\n binding.dataActions[actionPath].default &&\n binding.dataActions[actionPath].default.prototype &&\n binding.dataActions[actionPath].default.prototype.id) {\n binding.dataActions[binding.dataActions[actionPath].default.prototype.id] = binding.dataActions[actionPath];\n } else {\n Object.keys(binding.dataActions[actionPath] || {}).forEach(exportName => {\n if (binding.dataActions[actionPath][exportName] &&\n binding.dataActions[actionPath][exportName].prototype &&\n binding.dataActions[actionPath][exportName].prototype.Action) {\n binding.dataActions[binding.dataActions[actionPath][exportName].prototype.id] = binding.dataActions[actionPath][exportName];\n }\n })\n }\n };\n\n const registerSanitizedActionPath = (sanitizedActionPath, dataAction) => {\n if (process.env.NODE_ENV === 'development') {\n if (!dataAction.default) {\n throw new Error('Data action path does not have a default export');\n }\n if (!(dataAction.default.prototype.id && binding.dataActions[dataAction.default.prototype.id]) || !binding.dataActions[sanitizedActionPath]) {\n binding.dataActions[sanitizedActionPath] = dataAction;\n }\n } else {\n binding.dataActions[sanitizedActionPath] = dataAction;\n if (!binding.dataActions[sanitizedActionPath].default) {\n throw new Error('Data action path ' + sanitizedActionPath + ' does not have a default export');\n }\n binding.dataActions[sanitizedActionPath].default.prototype.RegistrationId = sanitizedActionPath;\n if (binding.dataActions[sanitizedActionPath].default.prototype.id) {\n binding.dataActions[binding.dataActions[sanitizedActionPath].default.prototype.id] = sanitizedActionPath;\n }\n }\n };\n \n\n (binding.modules['navigation-menu'] = {\n c: () => require('@msdyn365-commerce-modules/navigation-menu/dist/lib/modules/navigation-menu/navigation-menu'),\n $type: 'contentModule',\n da: [{name:'categories', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-categories-hierarchy', runOn: 0}],\n \n iNM: true,\n ns: '@msdyn365-commerce-modules',\n n: 'navigation-menu',\n p: 'navigation-menu',\n \n pdp: '',\n \n \n md: 'node_modules/@msdyn365-commerce-modules/navigation-menu/dist/lib/modules/navigation-menu'\n });\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-categories-hierarchy';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-categories-hierarchy');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n \n window.__bindings__ = window.__bindings__ || {};\n window.__bindings__.modules = {\n ...window.__bindings__.modules || {},\n ...binding.modules\n };\n \n window.__bindings__.dataActions = {\n ...window.__bindings__.dataActions || {},\n ...binding.dataActions\n };\n export const viewDictionary = {};\n viewDictionary['@msdyn365-commerce-modules|fabrikam-design-kit|modules|fabrikam|views|navigation-menu'] = {\n c: () => require('@msdyn365-commerce-modules/fabrikam-design-kit/dist/lib/modules/fabrikam/views/navigation-menu.view.js'),\n cn: '@msdyn365-commerce-modules-fabrikam-design-kit-navigation-menu'\n };\nviewDictionary['@msdyn365-commerce-modules|navigation-menu|modules|navigation-menu|navigation-menu'] = {\n c: () => require('@msdyn365-commerce-modules/navigation-menu/dist/lib/modules/navigation-menu/navigation-menu.view.js'),\n cn: '@msdyn365-commerce-modules-navigation-menu-navigation-menu'\n };\nviewDictionary['@msdyn365-commerce-theme|adventureworks-theme-kit|modules|adventureworks|views|navigation-menu'] = {\n c: () => require('@msdyn365-commerce-theme/adventureworks-theme-kit/dist/lib/modules/adventureworks/views/navigation-menu.view.js'),\n cn: '@msdyn365-commerce-theme-adventureworks-theme-kit-navigation-menu'\n };\nwindow.__bindings__ = window.__bindings__ || {};\nwindow.__bindings__.viewDictionary = {\n ...window.__bindings__.viewDictionary || {},\n ...viewDictionary\n };","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport MsDyn365, { IDictionary, IImageData, IImageSettings, Image } from '@msdyn365-commerce/core';\nimport { IMenuItemData, INavigationMenuViewProps } from '@msdyn365-commerce-modules/navigation-menu';\nimport { ArrayExtensions, generateImageUrl } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n Drawer,\n getPayloadObject,\n getTelemetryAttributes,\n getTelemetryObject,\n ICollapseProps,\n IDrawerState,\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\ninterface INavigationState {\n parentMenu?: number;\n activeMenu?: number;\n categoryImage?: IImageData[] | null;\n categoryImageAltText: string;\n drawerKeyValue: IDictionary;\n}\n\n/**\n *\n * NavigationMenuView component.\n * @extends {React.PureComponent}\n */\nexport class NavigationMenuView extends React.PureComponent {\n private currentLevel: number = 0;\n\n private readonly _positionInSetOffset: number = 1;\n\n private readonly escapeKey: number = 27;\n\n private readonly menuNode: 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.state = { activeMenu: undefined, parentMenu: undefined, categoryImageAltText: '', drawerKeyValue: {} };\n this._closeSubmenu = this._closeSubmenu.bind(this);\n this._escFunction = this._escFunction.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('keydown', (this._escFunction as unknown) as EventListener, false);\n document.body.addEventListener('mousedown', this._handleClickOutside);\n document.body.addEventListener('focusout', this._handleFocusOutside);\n }\n }\n\n public componentWillUnmount(): void {\n if (MsDyn365.isBrowser) {\n document.removeEventListener('keydown', (this._escFunction as unknown) as EventListener, false);\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 } = this.props;\n\n this.currentLevel = 1;\n return <>{isMobileView ? this._renderMobileMenu() : this._renderDesktopMenu()};\n }\n\n /**\n * Method to render mobile menu.\n * @returns Jsx element.\n */\n private _renderMobileMenu(): JSX.Element {\n const { isMobileView, menuItemData, Navigation } = this.props;\n return (\n \n {menuItemData.map((menuItem: IMenuItemData, posinset: number) => {\n return this._renderDrawerMenu(menuItem, menuItemData.length, posinset + this._positionInSetOffset);\n })}\n \n );\n }\n\n /**\n * Method to render desktop menu.\n * @returns Jsx element.\n */\n private _renderDesktopMenu(): JSX.Element {\n const { MenuList, Navigation } = this.props;\n return (\n \n \n {this._renderDisplay()}\n \n \n );\n }\n\n /**\n * Method to render drawer menu.\n * @param menuItem -Menuitem data.\n * @param setSize -Setsize data.\n * @param posinset -Current position.\n * @returns Jsx element.\n */\n private _renderDrawerMenu(menuItem: IMenuItemData, setSize: number, posinset: number): JSX.Element | null {\n if (menuItem && menuItem.subMenu && ArrayExtensions.hasElements(menuItem.subMenu)) {\n return this._renderDrawer(menuItem, setSize, posinset);\n }\n return this._renderLinkMenuItem(menuItem, undefined, true, false, setSize, posinset);\n }\n\n /**\n * Method to render drawer component.\n * @param menuItem -Menuitem data.\n * @param setSize -Setsize data.\n * @param posinset -Current position.\n * @returns Jsx element.\n */\n private _renderDrawer(menuItem: IMenuItemData, setSize?: number, posinset?: number): JSX.Element | null {\n const toggleButtonText = menuItem.linkText;\n const keyValue = this.state.drawerKeyValue;\n const buttonText = toggleButtonText !== undefined ? toggleButtonText : '';\n const keys = keyValue !== undefined ? keyValue : {};\n const { isMobileView } = this.props;\n\n let isDrawerOpen = false;\n if (keys[buttonText]) {\n isDrawerOpen = true;\n }\n const colProps: ICollapseProps = { isOpen: isDrawerOpen };\n return (\n \n
\n {menuItem.subMenu!.map((menuSubItem: IMenuItemData, currentPos: number) => {\n if (ArrayExtensions.hasElements(menuSubItem.subMenu)) {\n return this._renderDrawer(menuSubItem, menuItem.subMenu?.length, currentPos + this._positionInSetOffset);\n }\n return this._renderDrawerLink(menuSubItem, menuItem.subMenu?.length, currentPos + this._positionInSetOffset);\n })}\n
\n \n );\n }\n\n /**\n * Method to render link.\n * @param linkText -Text on Menu link.\n * @param setSize -Setsize data.\n * @param posinset -Current position.\n * @returns Jsx element.\n */\n private _renderLinkText(linkText: string | undefined, setSize: number | undefined, posinset: number | undefined): JSX.Element {\n return (\n \n {linkText}\n \n );\n }\n\n /**\n * Method to render drawer link.\n * @param item -Single Menuitem.\n * @param setSize -Setsize data.\n * @param posinset -Current position.\n * @returns Jsx element.\n */\n private _renderDrawerLink(item: IMenuItemData, setSize: number | undefined, posinset: number): JSX.Element | null {\n if (item && item.linkText && item.linkURL && item.linkURL.length > 0) {\n return this._renderLinkMenuItem(item, undefined, true, false, setSize, posinset);\n } else if (item && item.linkText && !item.linkURL) {\n return this._renderSpanMenuItem(item);\n }\n return null;\n }\n\n /**\n * Method to generate menu.\n * @returns Jsx element.\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 this.setState({ parentMenu: undefined });\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 );\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 /**\n * Method to get data for submenu.\n * @param item -Single Menuitem.\n * @returns IMenuItemData.\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 this.setState({ parentMenu: item?.id });\n return subMenus[i];\n }\n const found = this._getFromSubMenu(subMenus[i]);\n if (found) {\n return found;\n }\n }\n }\n return null;\n }\n\n /**\n * Method to create item list.\n * @param menuItemData -Single Menuitem.\n * @returns Jsx element.\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);\n }\n return (\n <>\n {this._renderButtonMenuItem(menuItemData)}\n {this._renderSubMenu(menuItemData.subMenu, menuItemData.id)}\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\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 subMenuLevel = 3;\n const multiLevelSupportedMenu = this.props.config.menuLevelSupport || subMenuLevel;\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 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 /**\n * Method to render button menu item.\n * @param option -Single Menuitem.\n * @param activeMenu -Active menu number.\n * @param index -Active menu index.\n * @returns Jsx element.\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 /**\n * Method to render link menu item.\n * @param option -Single Menuitem.\n * @param index -Active menu index.\n * @param hoverEffect -Active menu effect.\n * @param isParent -Is parent menu.\n * @param setSize -Setsize data.\n * @param posinset -Current position.\n * @returns Jsx element.\n */\n private _renderLinkMenuItem(\n option: IMenuItemData,\n index?: number,\n hoverEffect: boolean = true,\n isParent: boolean = false,\n setSize?: number,\n posinset?: number\n ): JSX.Element | null {\n const { Link, isMobileView } = 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 /**\n * Method to render promotional link.\n * @param linkText -Link text.\n * @param linkUrl -Link url.\n * @returns Jsx element.\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 /**\n * Method to render span menu item.\n * @param option -Single Menu Item.\n * @param index -Index.\n * @param isParent -Is parent menu.\n * @returns Jsx element.\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 /**\n * Method to render menu.\n * @param level -Menu level.\n * @param menuOptions -Menu lists.\n * @param currentItem -Menu current.\n * @param submenu -Mneu has submenu or not.\n * @returns Jsx element.\n */\n private _renderMenu(level: string, menuOptions: JSX.Element[], currentItem?: number, submenu?: boolean): JSX.Element | null {\n const { DivContainer, MenuList, ImageDivContainer, showCategoryImage, isMobileView, showPromotionalContent } = this.props;\n const categoryImageDisplay =\n !isMobileView && showCategoryImage && this.state.categoryImage !== null && this.state.categoryImage !== undefined && !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
\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\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 /**\n * Method to handle dropdwon change.\n * @param data -Menuitem data.\n * @param parentId -Menu parent.\n * @returns Jsx element.\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 this.setState({\n activeMenu: data.id,\n parentMenu: parentId\n });\n }\n\n this._resetFocus();\n };\n\n /**\n * Method to call when focus lost from menu.\n */\n private readonly _resetFocus = () => {\n if (this.props.isMobileView) {\n setTimeout(() => {\n this.menuNode && this.menuNode.current && this.menuNode.current.focus();\n }, 0);\n }\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 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 * Method to handle close submenu event.\n */\n private _closeSubmenu(): void {\n if (!this.props.isMobileView) {\n this.setState({ activeMenu: undefined });\n }\n }\n\n /**\n * Method to handle escape key event.\n * @param event -HTML event.\n */\n private readonly _escFunction = (event: React.KeyboardEvent) => {\n if (event.keyCode === this.escapeKey) {\n if (!this.props.isMobileView) {\n const navDrawerList = Array.from(this.menuNode.current!.childNodes);\n for (const item of navDrawerList) {\n const navDrawerButton = item.firstChild as HTMLButtonElement;\n if (navDrawerButton.getAttribute('aria-expanded') === 'true') {\n navDrawerButton.focus();\n }\n }\n }\n this._closeSubmenu();\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 const ImageData: IImageData = { src: categoryImageUrl };\n return (\n \n );\n }\n return null;\n };\n\n /**\n * Method to handle escape key event.\n * @param drawerState -HTML event.\n */\n private readonly _onDrawerChange = (drawerState: IDrawerState) => {\n const { drawerKeyValue } = this.state;\n const drawerText: string = drawerState.buttonText !== undefined ? drawerState.buttonText : '';\n const newPair = { [drawerText]: drawerState.isOpen };\n this.setState({ drawerKeyValue: { ...drawerKeyValue, ...newPair } });\n };\n}\n\nexport default NavigationMenuView;\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","module.exports = React;","module.exports = ReactDOM;"],"names":["binding","modules","dataActions","c","require","$type","da","name","path","runOn","iNM","ns","n","p","pdp","md","registerSanitizedActionPath","sanitizedActionPath","dataAction","default","Error","prototype","RegistrationId","id","window","__bindings__","_objectSpread","viewDictionary","cn","NavigationMenuView","React","constructor","props","super","currentLevel","_positionInSetOffset","escapeKey","_updateCategoryImage","categoryImageSrc","option","linkText","promotionalImage","src","altText","ArrayExtensions","hasElements","promotionalContent","map","item","image","imageSrc","promotionalItemImageSettings","imageSettings","push","text","additionalProperties","linkUrl","destinationUrl","this","setState","categoryImage","length","categoryImageAltText","_handleDropdownToggle","data","parentId","isMobileView","activeMenu","parentMenu","state","undefined","showCategoryImage","imageSource","_resetFocus","setTimeout","menuNode","current","focus","_handleClickOutside","event","contains","target","_handleFocusOutside","relatedTarget","_closeSubmenu","_escFunction","keyCode","navDrawerList","Array","from","childNodes","navDrawerButton","firstChild","getAttribute","_getCategoryImage","categoryImageUrl","generateImageUrl","context","actionContext","requestContext","apiSettings","defaultImageSettings","viewports","xs","q","w","h","sm","lg","lazyload","_ref","_categoryImage$imageS","ImageData","Image","Object","assign","className","gridSettings","request","config","categoryImageSettings","loadFailureBehavior","role","_onDrawerChange","drawerState","drawerKeyValue","newPair","buttonText","isOpen","bind","telemetryContent","getTelemetryObject","telemetryPageName","friendlyName","telemetry","payLoad","getPayloadObject","componentDidMount","MsDyn365","isBrowser","document","body","addEventListener","componentWillUnmount","removeEventListener","render","_renderMobileMenu","_renderDesktopMenu","menuItemData","Navigation","Module","classnames","menuItem","posinset","_renderDrawerMenu","MenuList","Node","ref","tabIndex","_renderDisplay","setSize","subMenu","_renderDrawer","_renderLinkMenuItem","toggleButtonText","keyValue","keys","isDrawerOpen","colProps","Drawer","toggleButtonProps","ariaLabel","key","openGlyph","onToggle","collapseProps","closeGlyph","glyphPlacement","_renderLinkText","menuSubItem","currentPos","_menuItem$subMenu2","_menuItem$subMenu","_renderDrawerLink","linkURL","_renderSpanMenuItem","ListItem","menuItemList","menuItemDatum","_getFromSubMenu","_createMenuItemList","forEach","index","subMenus","i","found","_renderSubMenu","_renderButtonMenuItem","IsSubMenu","enableMultiSupportMenu","enableMultilevelMenu","multiLevelSupportedMenu","menuLevelSupport","error","levelClassName","menuOptions","idx","hasOptions","haveSubmenu","Math","round","toString","_renderMenu","Button","onClick","onFocus","hoverEffect","arguments","isParent","Link","imagesource","contentAction","etext","attributes","getTelemetryAttributes","shouldOpenNewTab","onMouseOver","href","onTelemetryClick","_renderPromotionalLink","Span","level","currentItem","submenu","DivContainer","ImageDivContainer","showPromotionalContent","categoryImageDisplay","promotionalContentDisplay","DivContainerClass","_item$additionalPrope","MenuTypeIndexId","MenuSource","NavigationMenu","isRetail","isCMS","_setNavigationSource","sourceType","_updateViewport","viewport","device","Type","navigationMenuSource","isMobile","static","locale","nameTranslations","nameTranslation","find","Language","toLowerCase","Text","resizeThrottledEventHandler","addThrottledEvent","_this$props$config$di","_this$props$config$di2","_mapData","isEmptyOrNullObject","viewProps","xl","moduleProps","tag","displayCategoryImage","displayPromotionalImage","ImageContainer","MobileDescriptionContainer","MobileBackButton","resources","backButtonAriaLabel","MobileDescriptionLabel","renderView","mergedData","categories","result","_constructMenuItemData","cmsNavItems","_constructTopMenuItemData","_this$props$config$en","_this$props$config$ro","enabletopMenu","mergedRootMenuData","topMenu","rootMenuNavigation","retailItem","cmsItem","addedAllMenu","categoryPromotionalContent","cmsItemText","menuAriaLabel","promotionalData","filter","promoItem","_promoItem$categoryNa","_retailItem$Name","categoryName","Name","_NavigationMenu$getFr","_NavigationMenu$getFr2","Images","Uri","RSItemIdInit","getFriendlyName","NameTranslations","Url","_getNestedChildren","menuSource","Retail","CMSItemIdInit","imageDestinationURL","imageLink","_getCMSNestedChildren","Cms","openInNewTab","category","imageSourceUrl","nestedChildren","Children","allCategoryMenuText","getCategoryUrl","_getViewport","innerWidth","__decorate","observable","computed","isBackTrack","mobileViewLabelText","_handleGoBack","_shouldAddFocusMenuRef","optionLinkText","menuItemRef","componentDidUpdate","_this$menuItemRef$cur","children","NavMenuConstants","getCategoryImage","alttext","navProps","_props$navProps$confi","imageData","Msdyn365","NavigationMenuRootDisabled","supportedLevel","four","zero","_toggleNavBar","previousState","isNavOpen","_bindDesktopCategoryClick","menuId","categoryImageSource","isOnlyMobile","_closeNavMenu","_this$menuNode$curren","_this$menuNode$curren2","_customUpdateViewport","variant","VariantType","Browser","customResizeThrottledEventHandler","title","hamburgerAriaLabel","_renderCollapseMenu","Collapse","StringExtensions","isNullOrWhitespace","entries","parentMenuId","menu","one","Number","subMenuArray","isSubMenu","_this$props$navProps$","_this$props$navProps$2","rootMenu","subMenuItem","isEnableMultiSupportMenu","three","getMenuItem","isHavingSubmenu","two","_renderSubMenuDrawer","_renderLinkMenuItemLevelOne","_this$props$navProps$3","timeout","isHoverEffect","isSubmenu","_this$state$categoryI","isCategoryImageDisplay","isPromotionalContentDisplay","divContainerClass","menuLevelSupportClassName","categoryImages","imagesContainerKey","join","_item$src","NavigationMenuRootEnabled","_addShopAllLink","_this$menuItemData$0$","shopAllObject","unshift","cmsMenuData","retailMenuItemData","retailMenuData","JSON","parse","stringify","module","exports","ReactDOM"],"sourceRoot":""}