{"version":3,"file":"static/js/ed407e323cf86705081d.bundle.js","mappings":";kRAoCM,MAAOA,UAA2BC,EAAAA,cAapCC,YAAYC,GACRC,MAAMD,GAXF,KAAAE,aAAuB,EAsNvB,KAAAC,wBAA0B,CAACC,EAA0BC,KACzD,IAAIC,GAAoB,EACxB,MAAQC,SAAWC,SAAS,OAAEC,KAAeC,KAAKV,MAclD,OAbAI,MAAAA,GAAAA,EAASO,KAAKC,IAA8B,IAAAC,EAAAC,EAAAC,EAAAC,EAWxC,OAV8C,YAApB,QAAtBH,EAAAD,EAAYK,kBAAU,IAAAJ,OAAA,EAAtBA,EAAwBK,gBAA8D,KAAb,QAAnBJ,EAAAF,EAAYR,eAAO,IAAAU,OAAA,EAAnBA,EAAqBK,SAAyC,UAAzBV,EAAOS,eAA6BR,KAAKV,MAAMO,QAAQC,QAAQY,IAAIC,WAAWC,SAASC,MAAM,wBAGnLC,mBAAmBd,KAAKV,MAAMO,QAAQC,QAAQY,IAAIC,WAAWC,UAAUC,MAAMlB,EAASoB,QAAQ,IAAK,KAAKP,gBAI9D,SAApB,QAAtBH,EAAAH,EAAYK,kBAAU,IAAAF,OAAA,EAAtBA,EAAwBG,gBAA2BR,KAAKV,MAAMO,QAAQC,QAAQY,IAAIC,WAAWC,SAASC,MAAyB,QAApBP,EAACJ,EAAYc,eAAO,IAAAV,OAAA,EAAnBA,EAAqBW,MAAM,KAAK,OANjJrB,GAAW,GASRA,KAEJA,GAiHM,KAAAsB,qBAAuB,CAACC,EAA0BC,IAA0B,KACzF,MAAMzB,EAAWyB,GAAUA,EAAOzB,SAAWyB,EAAOzB,SAAW,GACzD0B,EAAiC,CAAC,CAAEC,IAAKH,EAAkBI,QAAS5B,IAGtE6B,EAAAA,gBAAgBC,YAAYL,EAAOM,qBACnCN,EAAOM,mBAAmBzB,KAAI0B,IAC1B,GAAIA,GAAQA,EAAKC,MAAO,CACpB,MAAMC,EAAWF,EAAKC,MAAMN,IACtBQ,EAA+BH,EAAKC,MAAMG,cAChDV,EAAiBW,KAAK,CAClBV,IAAKO,EACLN,QAASI,EAAKM,KACdF,cAAeD,EACfI,qBAAsB,CAAEC,QAASR,EAAKQ,QAAQC,sBAK9DpC,KAAKqC,SAAS,CACVC,cAAejB,EAAiBZ,OAAS,EAAIY,EAAmB,CAAC,CAAEC,IAAK,UACxEiB,qBAAsB5C,KAIb,KAAA6C,sBAAwB,CAACC,EAAqBC,IAAsB,KAC5E1C,KAAKV,MAAMqD,cASZxD,EAAmByD,aAAc,EACjC5C,KAAKqC,SAAS,CACVQ,WAAYJ,EAAKK,GACjBC,oBAAqBN,EAAK9C,SAC1BqD,WAAYN,MAZhB1C,KAAKqC,SAAS,CACVQ,WAAY7C,KAAKiD,MAAMJ,YAAc7C,KAAKiD,MAAMJ,aAAeJ,EAAKK,QAAMI,EAAYT,EAAKK,GAC3FE,WAAYN,IAEZ1C,KAAKV,MAAM6D,mBACXnD,KAAKkB,qBAAqBuB,EAAKW,YAAcX,EAA7CzC,KAYK,KAAAqD,cAAgB,IAAM,KACnClE,EAAmByD,aAAc,EACjC5C,KAAKqC,SAAS,CAAEQ,WAAY7C,KAAKiD,MAAMD,cAO1B,KAAAM,oBAAuBC,IAChCvD,KAAKwD,SAASC,UAAYzD,KAAKwD,SAASC,QAAQC,SAASH,EAAMI,SAC/D3D,KAAKqC,SAAS,CACVQ,gBAAYK,EACZH,oBAAqB,GACrBT,cAAe,QASV,KAAAsB,oBAAuBL,IAChCvD,KAAKwD,SAASC,UAAYzD,KAAKwD,SAASC,QAAQC,SAASH,EAAMM,gBAC/D7D,KAAK8D,iBAWI,KAAAC,uBAAyB,CAACC,EAAejB,EAA8BkB,KAC/E9E,EAAmByD,aAAyB,IAAVoB,MAGlCC,IAAmBlB,IAGjBA,IAAwBkB,EASlB,KAAAC,kBAAqB5B,IAClC,IAAKA,IAAkBA,EAAchB,IACjC,OAAO,KAGX,MACM6C,EAAuC,CACzCC,UAAW,CACPC,GAAI,CAAEC,EAAG,kBAAmBC,EAAG,EAAGC,EAAG,GACrCC,GAAI,CAAEH,EAAG,kBAAmBC,EAAG,EAAGC,EAAG,GACrCE,GAAI,CAAEJ,EAAG,kBAAmBC,EAAG,EAAGC,EAAG,GACrCG,GAAI,CAAEL,EAAG,kBAAmBC,EAAG,EAAGC,EAAG,IAEzCI,UAAU,GAEsB,IAAAC,EAAAC,EAApC,YAAyB5B,KAVA6B,EAAAA,EAAAA,kBAAiB,GAAGzC,EAAchB,MAAOtB,KAAKV,MAAMO,QAAQmF,cAAcC,eAAeC,aAY1G9F,EAAAA,cAAC+F,EAAAA,GAAKC,OAAAC,OAAA,CACFJ,eAAgBjF,KAAKV,MAAMO,QAAQmF,cAAcC,eACjDK,UAAU,sBACNhD,EAAa,CACjBiD,aAAcvF,KAAKV,MAAMO,QAAQC,QAAQyF,aACzCxD,cAAqF,QAAxE8C,EAA6B,QAA7BC,EAAExC,EAAcP,qBAAa,IAAA+C,EAAAA,EAAI9E,KAAKV,MAAMkG,OAAOC,6BAAqB,IAAAZ,EAAAA,EAAIV,EACzFuB,oBAAoB,OACpBC,KAAK,WACL7C,GAAG,kCACHvB,QAASe,EAAcf,WAI5B,MAzcPvB,KAAKwD,SAAWpE,EAAAA,YAChBY,KAAK4F,YAAcxG,EAAAA,YACnBY,KAAKiD,MAAQ,CAAEJ,gBAAYK,EAAWH,oBAAqB,GAAIC,gBAAYE,EAAWX,qBAAsB,IAC5GvC,KAAK8D,cAAgB9D,KAAK8D,cAAc+B,KAAK7F,MAC7CA,KAAK8F,kBAAmBC,EAAAA,EAAAA,oBACpB/F,KAAKV,MAAMO,QAAQC,QAAQkG,kBAC3BhG,KAAKV,MAAM2G,aACXjG,KAAKV,MAAM4G,WAEflG,KAAKmG,SAAUC,EAAAA,EAAAA,kBAAiB,QAASpG,KAAK8F,iBAAkB,GAAI,IAGjEO,oBACCC,EAAAA,GAASC,YACTC,SAASC,KAAKC,iBAAiB,YAAa1G,KAAKsD,qBACjDkD,SAASC,KAAKC,iBAAiB,WAAY1G,KAAK4D,sBAIjD+C,qBAAkB,IAAAC,EACO,QAAxBA,EAAA5G,KAAK4F,YAAYnC,eAAO,IAAAmD,GAAxBA,EAA0BC,SAAS,IAAM7G,KAAKV,MAAMqD,cACnD3C,KAAK4F,YAAYnC,QAAQoD,SAAS,GAAmBC,QAIvDC,uBACCT,EAAAA,GAASC,YACTC,SAASC,KAAKO,oBAAoB,YAAahH,KAAKsD,qBAAqB,GACzEkD,SAASC,KAAKO,oBAAoB,WAAYhH,KAAK4D,qBAAqB,IAIzEqD,SACH,MAAM,aAAEtE,EAAY,SAAEuE,EAAQ,iBAAEC,EAAgB,2BAAEC,EAA0B,uBAAEC,EAAsB,WAAEC,GAAetH,KAAKV,MAG1H,OADAU,KAAKR,aAAe,EAEhBJ,EAAAA,cAACmI,EAAAA,OAAMnC,OAAAC,OAAA,GACCiC,EAAU,CACdhC,UAAWkC,GAAAA,CAAWF,EAAWhC,UAAW3C,QAA0CO,IAA1BlD,KAAKiD,MAAMJ,WAA2B,QAAU,YAE5GzD,EAAAA,cAACqI,EAAAA,KAAIrC,OAAAC,OAAA,GAAK6B,EAAQ,CAAEQ,IAAK1H,KAAKwD,SAAUmE,SAAS,OAC5ChF,QAA0CO,IAA1BlD,KAAKiD,MAAMJ,YACxBzD,EAAAA,cAACqI,EAAAA,KAAIrC,OAAAC,OAAA,GAAK+B,GACNhI,EAAAA,cAACqI,EAAAA,KAAIrC,OAAAC,OAAA,GAAK8B,EAAgB,CAAES,QAAS5H,KAAKqD,mBAC1CjE,EAAAA,cAACqI,EAAAA,KAAIrC,OAAAC,OAAA,GAAKgC,GAAyBrH,KAAKiD,MAAMF,sBAGrD/C,KAAK6H,mBAMdA,iBACJ,MAAM,SAAEC,EAAQ,aAAEC,EAAY,aAAEpF,EAAcqF,KAAOxC,QAAQ,oCAAEyC,IAAyCpI,SAAWC,SAAS,OAAEC,EAAM,SAAEmI,IAAcC,WAAW,2BAAEC,IAAiCpI,KAAKV,OACjM,WAAEuD,GAAe7C,KAAKiD,MACtBoF,EAA8B,GAE9BC,EAAqBP,EAAaQ,MAAMC,IAAuB,IAAAC,EAAAC,EAAA,MAA4C,YAApB,QAAnBD,EAAAD,EAASjI,kBAAU,IAAAkI,OAAA,EAAnBA,EAAqBjI,iBAA+C,QAAjBkI,EAAAF,EAAS7I,gBAAQ,IAAA+I,OAAA,EAAjBA,EAAmBlI,kBAAkB4H,MAAAA,OAA0B,EAA1BA,EAA4B5H,kBAC9L,GAAI8F,EAAAA,GAASC,WAAaoC,QAAUL,GAAsBL,EAAqC,CAE3F,MAAMW,EAAUN,EAAmB5I,QACnCkJ,MAAAA,GAAAA,EAAS3I,KAAK0B,IACV,IAAK,MAAMkH,KAAiBZ,EAAqC,KAAAa,EAAAC,EAAAC,EACuHC,EAApL,GAAiB,QAAjBH,EAAInH,EAAKhC,gBAAQ,IAAAmJ,GAAbA,EAAetI,cAAc0I,SAAkC,UAAzBnJ,EAAOS,cAA4BqI,MAAAA,GAA2B,QAAdE,EAAbF,EAAeM,oBAAY,IAAAJ,OAAA,EAA3BA,EAA6BvI,cAAiBqI,MAAAA,GAAsC,QAAzBG,EAAbH,EAAeO,+BAAuB,IAAAJ,OAAA,EAAtCA,EAAwCxI,eAC/JmB,EAAKX,QAAU,GAAG2H,OAAOU,SAASC,SAASpB,yBAAgCW,MAAAA,GAA2B,QAAdI,EAAbJ,EAAeM,oBAAY,IAAAF,GAAe,QAAfA,EAA3BA,EAA6BzI,qBAAa,IAAAyI,OAAA,EAA1CA,EAA4ClI,QAAQ,KAAK,KAAKA,QAAQ,IAAI,aAMrK,GAAI4B,QAA+BO,IAAfL,GAA4BkF,EAAatH,OAAS,EAAG,CACrE,IAAI+H,EAA0B,GAC9B,IAAK,MAAMe,KAAiBxB,EAAc,CACtC,GAAIwB,GAAiBA,EAAczG,KAAOD,EAAY,CAClD2F,EAAWe,EACVpK,EAAmByD,YAEd5C,KAAKqC,SAAS,CAAEW,gBAAYE,EAAWH,oBAAqBwG,EAAc5J,WAD1EK,KAAKqC,SAAS,CAAEW,gBAAYE,IAElC,MAGJ,GADAsF,EAAWxI,KAAKwJ,gBAAgBD,GAC5Bf,GAAYA,EAAS1F,KAAOD,EAC5B,MAIR2F,GACIH,EAAarG,KACT5C,EAAAA,cAACqI,EAAAA,KAAIrC,OAAAC,OAAA,CAACoE,IAAKjB,EAAS1F,IAAQgF,GACvB,IACA9H,KAAK0J,oBAAoBlB,GAAW,WAIjDT,EAAa4B,SAAQ,CAAChI,EAAqBqC,KACvCqE,EAAarG,KACT5C,EAAAA,cAACqI,EAAAA,KAAIrC,OAAAC,OAAA,CACDoE,IAAKzF,GACD8D,EAAQ,CACZJ,IAAK1H,KAAK+D,uBAAuBC,EAAOhE,KAAKiD,MAAMF,oBAAqBpB,EAAKhC,UAAYK,KAAK4F,YAAc,OAE3G5F,KAAK0J,oBAAoB/H,QAM1C,OAAO0G,EAGHmB,gBAAgB7H,GACpB,MAAMiI,EAAWjI,GAAQA,EAAKjC,QAC9B,GAAIkK,GAAYA,EAASnJ,OAAS,EAC9B,IAAK,IAAIoJ,EAAI,EAAGA,GAAKD,EAASnJ,OAAS,EAAGoJ,IAAK,CAC3C,GAAID,EAASC,GAAG/G,KAAO9C,KAAKiD,MAAMJ,WAI9B,OAHC1D,EAAmByD,YAEd5C,KAAKqC,SAAS,CAAEW,WAAYrB,GAAQA,EAAKmB,GAAIC,oBAAqB6G,EAASC,GAAGlK,WAD9EK,KAAKqC,SAAS,CAAEW,WAAYrB,MAAAA,OAAI,EAAJA,EAAMmB,KAEjC8G,EAASC,GAEpB,MAAMC,EAAQ9J,KAAKwJ,gBAAgBI,EAASC,IAC5C,GAAIC,EACA,OAAOA,EAKnB,OADA9J,KAAKV,MAAMO,QAAQqG,UAAU6D,MAAM,iDAC5B,KAGHL,oBAAoB3B,GACxB,OAAIA,GAAgBA,EAAarI,SAAWqI,EAAarI,QAAQe,OAAS,EAClET,KAAKV,MAAMqD,mBAA0CO,IAA1BlD,KAAKiD,MAAMJ,WAC/B7C,KAAKgK,eAAejC,EAAarI,QAASqI,EAAajF,IAAI,GAGlE1D,EAAAA,cAAAA,EAAAA,SAAA,KACKY,KAAKiK,sBAAsBlC,GAC3B/H,KAAKgK,eAAejC,EAAarI,QAASqI,EAAajF,IAAI,IAG7DiF,GAAgBA,EAAapI,UAAYoI,EAAa/G,SAAW+G,EAAa/G,QAAQP,OAAS,EAC/FT,KAAKkK,oBAAoBnC,EAAcA,EAAajF,IAAI,GAAO,GAC/DiF,GAAgBA,EAAapI,WAAaoI,EAAa/G,QACvDhB,KAAKmK,oBAAoBpC,EAAcA,EAAajF,IAAI,IAEnE9C,KAAKV,MAAMO,QAAQqG,UAAU6D,MAAM,yDAC5B,MAGHC,eAAeJ,EAA4B/G,EAAqBuH,GACpE,MAAM,aAAEzH,EAAY,SAAEmF,GAAa9H,KAAKV,MAClC+K,EAAyBrK,KAAKV,MAAMkG,OAAO8E,uBAAwB,EACnEC,EAA0BvK,KAAKV,MAAMkG,OAAOgF,kBAAoB,EAGtE,GAAI3H,GAAc7C,KAAKiD,MAAMJ,aAAeA,EAExC,OADA7C,KAAKV,MAAMO,QAAQqG,UAAU6D,MAAM,gEAC5B,KAGX,IAAKH,GAAgC,IAApBA,EAASnJ,OAEtB,OADAT,KAAKV,MAAMO,QAAQqG,UAAU6D,MAAM,4DAC5B,KAGX,IAAIU,EAAyB,GAC7B,MAAMC,EACFd,GACAA,EAAS3J,KAAI,CAACmB,EAAuBuJ,KACjC,MAAMC,EAAaxJ,EAAO1B,SAAW0B,EAAO1B,QAAQe,OAAS,EAC7D,IAAI+H,EAOA9I,EAHA8I,EAAWpH,EAAOJ,QAAUhB,KAAKkK,oBAAoB9I,EAAQuJ,GAAO3K,KAAKmK,oBAAoB/I,GAIjG,MAAMyJ,EAAcD,GAAcP,GAA0BrK,KAAKR,cAAgBsL,KAAKC,MAAMR,GAA2B,EAMvH,OALIM,IACA7K,KAAKR,eACLiL,EAAiBJ,EAAyB,SAASrK,KAAKR,aAAawL,aAAe,GACpFtL,EAAUM,KAAKgK,eAAe5I,EAAO1B,QAASiD,EAAevB,EAAO0B,QAAKI,GAAW,IAGpF9D,EAAAA,cAACqI,EAAAA,KAAIrC,OAAAC,OAAA,GACGyC,EAAQ,CACZ2B,IAAKrI,EAAO0B,GACZwC,UAAWkC,GAAAA,CAAWM,EAASxC,UAAWuF,GAAe,eACzDnD,IAAK1H,KAAK+D,uBAAuB4G,EAAK3K,KAAKiD,MAAMF,oBAAqB3B,EAAOzB,UAAYK,KAAK4F,YAAc,OAE3G4C,EACA9I,MAIjB,OAAOM,KAAKiL,YAAYR,EAAgBC,EAAa7H,EAAYuH,GAsB7DH,sBAAsB7I,EAAuByB,EAAqBmB,GACtE,MAAM,OAAEkH,GAAWlL,KAAKV,MACxB,OACIF,EAAAA,cAACqI,EAAAA,KAAI,CACDgC,IAAKzF,EACLmH,IAAKD,EAAOC,IACZvD,QAAS5H,KAAKwC,sBAAsBpB,EAAQyB,GAC5CuI,QAASpL,KAAK8D,cAAa,kBACV9D,KAAKiD,MAAMJ,YAAc7C,KAAKiD,MAAMJ,aAAezB,EAAO0B,IAAG,mBAC5D9C,KAAKiD,MAAMJ,YAAc7C,KAAKiD,MAAMJ,aAAezB,EAAO0B,IAAG,cAClED,EACbyC,UAAW,GAAG4F,EAAO5F,aAAatF,KAAKP,wBAAwB2B,EAAO1B,QAAU0B,EAAOzB,UAAa,SAAW,MAE9GyB,EAAOzB,UAKZuK,oBACJ9I,EACA4C,GAEyB,IAAAqH,EAAA,IADzBC,IAAAC,UAAA9K,OAAA,QAAAyC,IAAAqI,UAAA,KAAAA,UAAA,GACAC,EAAAD,UAAA9K,OAAA,QAAAyC,IAAAqI,UAAA,IAAAA,UAAA,GAEA,MAAM,KAAEE,GAASzL,KAAKV,MAChBK,EAAWyB,EAAOzB,SAAWyB,EAAOzB,SAAW,GAC/C+L,EAActK,EAAOgC,YAAchC,EAAOgC,YAAc,GAC9DpD,KAAKmG,QAAQwF,cAAcC,MAAQjM,EACnC,MAAMkM,GAAaC,EAAAA,EAAAA,wBAAuB9L,KAAK8F,iBAAkB9F,KAAKmG,SAEhEvG,EAAWI,KAAKV,MAAMO,QAAQC,QAAQY,IAAIC,WAAWC,SAASG,QAAQ,MAAO,OAAsB,QAAnBsK,EAAKjK,EAAOJ,eAAO,IAAAqK,OAAA,EAAdA,EAAgBpK,MAAM,KAAM,GAAGF,QAAQ,MAAO,KACzI,OACI3B,EAAAA,cAACqI,EAAAA,KAAIrC,OAAAC,OAAA,CACDoE,IAAKzF,EACLoH,QAASI,GAAYxL,KAAK8D,cAC1BqH,IAAKM,EAAKN,IACVxH,OAAQvC,EAAO2K,iBAAmB,cAAW7I,EAC7C8I,YAAaV,GAAetL,KAAKkB,qBAAqBwK,EAAatK,GACnE6K,KAAM7K,EAAOJ,SACT6K,EAAU,CACdjE,SAASsE,EAAAA,EAAAA,kBAAiBlM,KAAK8F,iBAAkB9F,KAAKmG,QAASxG,GAC/D2F,UAAW,GAAGmG,EAAKnG,aAAa1F,EAAW,SAAW,OAErDwB,EAAOzB,UAKZwM,uBAAuBxM,EAAmBwC,GAC9C,MAAM,KAAEsJ,GAASzL,KAAKV,MACtBU,KAAKmG,QAAQwF,cAAcC,MAAQjM,EACnC,MAAMkM,GAAaC,EAAAA,EAAAA,wBAAuB9L,KAAK8F,iBAAkB9F,KAAKmG,SACtE,OAAIxG,GAAYwC,EAER/C,EAAAA,cAACqI,EAAAA,KAAIrC,OAAAC,OAAA,GAAKoG,EAAI,CAAEQ,KAAM9J,GAAa0J,EAAU,CAAEjE,SAASsE,EAAAA,EAAAA,kBAAiBlM,KAAK8F,iBAAkB9F,KAAKmG,QAASxG,KACzGA,GAIN,KAGHwK,oBAAoB/I,EAAuB4C,GAAyC,IAAzBwH,EAAAD,UAAA9K,OAAA,QAAAyC,IAAAqI,UAAA,IAAAA,UAAA,GAC/D,MAAM,KAAEa,GAASpM,KAAKV,MACtB,OACIF,EAAAA,cAACqI,EAAAA,KAAIrC,OAAAC,OAAA,CAACoE,IAAKzF,GAAWoI,EAAI,CAAEhB,QAASI,GAAYxL,KAAK8D,gBACjD1C,EAAOzB,UAKZsL,YAAYoB,EAAe3B,EAA4B4B,EAAsB1D,GACjF,MAAM,aAAE2D,EAAY,SAAErF,EAAQ,kBAAEsF,EAAiB,kBAAErJ,EAAiB,uBAAEsJ,EAAsB,aAAE9J,GAAiB3C,KAAKV,MAC9GoN,GACD/J,IACAQ,GAAqBsJ,KACrBjL,EAAAA,gBAAgBC,YAAYzB,KAAKiD,MAAMX,iBACvCsG,EACC+D,GACDhK,GAAgB8J,GAA0BjL,EAAAA,gBAAgBC,YAAYzB,KAAKiD,MAAMX,iBAAmBsG,EACnGgE,EAAoB5M,KAAKR,aAAe,GAAKkN,EAAuBH,EAAcjH,UAAY,kBAEpG,OADAtF,KAAKR,aAAe,EAEhBJ,EAAAA,cAACqI,EAAAA,KAAIrC,OAAAC,OAAA,GAAKkH,EAAY,CAAEjH,UAAWsH,IAC/BxN,EAAAA,cAACqI,EAAAA,KAAIrC,OAAAC,OAAA,GACG6B,EAAQ,CACZ5B,UAAWkC,GAAAA,CACPN,EAAS5B,UACT+G,EACAK,GAAwB,gBACxBA,GACI1M,KAAKV,MAAMkG,OAAOgF,kBAClBxK,KAAKV,MAAMkG,OAAOgF,iBAAmB,GACrC,yBAGPE,GAEJgC,GACG1M,KAAKiD,MAAMX,eACXtC,KAAKiD,MAAMX,cAAcrC,KAAI0B,IAAI,IAAAkL,EAAA,OAC7BzN,EAAAA,cAACqI,EAAAA,KAAIrC,OAAAC,OAAA,GAAKmH,EAAiB,CAAE/C,IAAK9H,EAAKL,IAAKgE,UAAWkH,EAAmBlH,YACrEtF,KAAKiD,MAAMX,eAAiBtC,KAAKkE,kBAAkBvC,GACnDgL,GAA6B3M,KAAKmM,uBAAuBxK,EAAKJ,QAAkC,QAA3BsL,EAAElL,EAAKO,4BAAoB,IAAA2K,OAAA,EAAzBA,EAA2B1K,cAiGnH2B,gBACC9D,KAAKV,MAAMqD,cACZ3C,KAAKqC,SAAS,CAAEQ,gBAAYK,EAAWZ,cAAe,KAAMS,oBAAqB,MArb1E5D,EAAAyD,aAAuB,EA2d1C,+mBChgBA,MAAMkK,EAAU,CAAEC,QAAS,GAAIC,YAAa,IAwCvCF,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,GAGLlJ,GAAI,4FAlC4BmJ,EAACC,EAAqBC,KAUlD,GADAjB,EAAQE,YAAYc,GAAuBC,GACtCjB,EAAQE,YAAYc,GAAqBE,QAC1C,MAAM,IAAIC,MAAM,oBAAsBH,EAAsB,mCAEhEhB,EAAQE,YAAYc,GAAqBE,QAAQE,UAAUC,eAAiBL,EACxEhB,EAAQE,YAAYc,GAAqBE,QAAQE,UAAUpL,KAC3DgK,EAAQE,YAAYF,EAAQE,YAAYc,GAAqBE,QAAQE,UAAUpL,IAAMgL,IA0BzFD,CAF4B,8EACXX,EAAQ,MAMjCvE,OAAOyF,aAAezF,OAAOyF,cAAgB,GAC7CzF,OAAOyF,aAAarB,QAAOsB,EAAAA,EAAA,GACpB1F,OAAOyF,aAAarB,SAAW,IAC/BD,EAAQC,SAGXpE,OAAOyF,aAAapB,YAAWqB,EAAAA,EAAA,GAC5B1F,OAAOyF,aAAapB,aAAe,IACnCF,EAAQE,aAEY,MAAMsB,EAAiB,GAC9BA,EAAe,wEAA0E,CACjGrB,EAAGA,IAAMC,EAAQ,MACjBqB,GAAI,uCAEpBD,EAAe,yFAA2F,CAC1FrB,EAAGA,IAAMC,EAAQ,MACjBqB,GAAI,kEAEpBD,EAAe,sFAAwF,CACvFrB,EAAGA,IAAMC,EAAQ,KACjBqB,GAAI,8DAEpBD,EAAe,kGAAoG,CACnGrB,EAAGA,IAAMC,EAAQ,MACjBqB,GAAI,qEAEpB5F,OAAOyF,aAAezF,OAAOyF,cAAgB,GAC7CzF,OAAOyF,aAAaE,eAAcD,EAAAA,EAAA,GACP1F,OAAOyF,aAAaE,gBAAkB,IACtCA,6tBC1DpB,MAAMnP,UAA2BC,EAAAA,cAapCC,YAAYC,GACRC,MAAMD,GAbF,KAAAE,aAAuB,EAEd,KAAAgP,qBAA+B,EAE/B,KAAAC,UAAoB,GAqcpB,KAAAvN,qBAAuB,CAACC,EAA0BC,IAA0B,KACzF,MAAMzB,EAAWyB,GAAUA,EAAOzB,SAAWyB,EAAOzB,SAAW,GACzD0B,EAAiC,CAAC,CAAEC,IAAKH,EAAkBI,QAAS5B,IAGtE6B,EAAAA,gBAAgBC,YAAYL,EAAOM,qBACnCN,EAAOM,mBAAmBzB,KAAI0B,IAC1B,GAAIA,GAAQA,EAAKC,MAAO,CACpB,MAAMC,EAAWF,EAAKC,MAAMN,IACtBQ,EAA+BH,EAAKC,MAAMG,cAChDV,EAAiBW,KAAK,CAClBV,IAAKO,EACLN,QAASI,EAAKM,KACdF,cAAeD,EACfI,qBAAsB,CAAEC,QAASR,EAAKQ,QAAQC,sBAK9DpC,KAAKqC,SAAS,CACVC,cAAejB,EAAiBZ,OAAS,EAAIY,EAAmB,CAAC,CAAEC,IAAK,UACxEiB,qBAAsB5C,KAUb,KAAA6C,sBAAwB,CAACC,EAAqBC,IAAsB,KAC5E1C,KAAKV,MAAMqD,aASZ3C,KAAKqC,SAAS,CACVQ,WAAYJ,EAAKK,GACjBE,WAAYN,KAVhB1C,KAAKqC,SAAS,CACVQ,WAAY7C,KAAKiD,MAAMJ,YAAc7C,KAAKiD,MAAMJ,aAAeJ,EAAKK,QAAMI,EAAYT,EAAKK,GAC3FE,WAAYN,IAEZ1C,KAAKV,MAAM6D,mBACXnD,KAAKkB,qBAAqBuB,EAAKW,YAAcX,EAA7CzC,IASRA,KAAK0O,eAMQ,KAAAA,YAAc,KACvB1O,KAAKV,MAAMqD,cACXgM,YAAW,KACP3O,KAAKwD,UAAYxD,KAAKwD,SAASC,SAAWzD,KAAKwD,SAASC,QAAQqD,UACjE,IAQM,KAAAxD,oBAAuBC,IAChCvD,KAAKwD,SAASC,UAAYzD,KAAKwD,SAASC,QAAQC,SAASH,EAAMI,SAC/D3D,KAAKqC,SAAS,CACVQ,gBAAYK,EACZZ,cAAe,QASV,KAAAsB,oBAAuBL,IAChCvD,KAAKwD,SAASC,UAAYzD,KAAKwD,SAASC,QAAQC,SAASH,EAAMM,gBAC/D7D,KAAK8D,iBAiBI,KAAA8K,aAAgBrL,IAC7B,GAAIA,EAAMsL,UAAY7O,KAAKyO,UAAW,CAClC,IAAKzO,KAAKV,MAAMqD,aAAc,CAC1B,MAAMmM,EAAgBC,MAAMC,KAAKhP,KAAKwD,SAASC,QAASwL,YACxD,IAAK,MAAMtN,KAAQmN,EAAe,CAC9B,MAAMI,EAAkBvN,EAAKwN,WACyB,SAAlDD,EAAgBE,aAAa,kBAC7BF,EAAgBpI,SAI5B9G,KAAK8D,kBAII,KAAAI,kBAAqB5B,IAClC,IAAKA,IAAkBA,EAAchB,IACjC,OAAO,KAGX,MAAM+N,GAAmBtK,EAAAA,EAAAA,kBAAiBzC,EAAchB,IAAKtB,KAAKV,MAAMO,QAAQmF,cAAcC,eAAeC,aACvGf,EAAuC,CACzCC,UAAW,CACPC,GAAI,CAAEC,EAAG,kBAAmBC,EAAG,EAAGC,EAAG,GACrCC,GAAI,CAAEH,EAAG,kBAAmBC,EAAG,EAAGC,EAAG,GACrCE,GAAI,CAAEJ,EAAG,kBAAmBC,EAAG,EAAGC,EAAG,GACrCG,GAAI,CAAEL,EAAG,kBAAmBC,EAAG,EAAGC,EAAG,IAEzCI,UAAU,GAEd,QAAyB1B,IAArBmM,EAAgC,CAAC,IAADxK,EAAAC,EAChC,MAAMwK,EAAwB,CAAEhO,IAAK+N,GACrC,OACIjQ,EAAAA,cAAC+F,EAAAA,GAAKC,OAAAC,OAAA,CACFJ,eAAgBjF,KAAKV,MAAMO,QAAQmF,cAAcC,eACjDK,UAAU,sBACNgK,EAAS,CACb/J,aAAcvF,KAAKV,MAAMO,QAAQC,QAAQyF,aACzCxD,cAAqF,QAAxE8C,EAA6B,QAA7BC,EAAExC,EAAcP,qBAAa,IAAA+C,EAAAA,EAAI9E,KAAKV,MAAMkG,OAAOC,6BAAqB,IAAAZ,EAAAA,EAAIV,EACzFuB,oBAAoB,OACpBC,KAAK,WACL7C,GAAI,GAAGR,EAAchB,qBACrBC,QAASe,EAAcf,WAInC,OAAO,MAOM,KAAAgO,gBAAmBC,IAChC,MAAM,eAAEC,GAAmBzP,KAAKiD,MAE1ByM,EAAU,CAAE,MADoCxM,IAA3BsM,EAAYG,WAA2BH,EAAYG,WAAa,IAC3DH,EAAYI,QAC5C5P,KAAKqC,SAAS,CAAEoN,eAAcpB,EAAAA,EAAA,GAAOoB,GAAmBC,MArlBxD1P,KAAKwD,SAAWpE,EAAAA,YAChBY,KAAKiD,MAAQ,CAAEJ,gBAAYK,EAAWF,gBAAYE,EAAWX,qBAAsB,GAAIkN,eAAgB,IACvGzP,KAAK8D,cAAgB9D,KAAK8D,cAAc+B,KAAK7F,MAC7CA,KAAK4O,aAAe5O,KAAK4O,aAAa/I,KAAK7F,MAC3CA,KAAK8F,kBAAmBC,EAAAA,EAAAA,oBACpB/F,KAAKV,MAAMO,QAAQC,QAAQkG,kBAC3BhG,KAAKV,MAAM2G,aACXjG,KAAKV,MAAM4G,WAEflG,KAAKmG,SAAUC,EAAAA,EAAAA,kBAAiB,QAASpG,KAAK8F,iBAAkB,GAAI,IAGjEO,oBACCC,EAAAA,GAASC,YACTC,SAASC,KAAKC,iBAAiB,UAAY1G,KAAK4O,cAA2C,GAC3FpI,SAASC,KAAKC,iBAAiB,YAAa1G,KAAKsD,qBACjDkD,SAASC,KAAKC,iBAAiB,WAAY1G,KAAK4D,sBAIjDmD,uBACCT,EAAAA,GAASC,YACTC,SAASQ,oBAAoB,UAAYhH,KAAK4O,cAA2C,GACzFpI,SAASC,KAAKO,oBAAoB,YAAahH,KAAKsD,qBAAqB,GACzEkD,SAASC,KAAKO,oBAAoB,WAAYhH,KAAK4D,qBAAqB,IAIzEqD,SACH,MAAM,aAAEtE,GAAiB3C,KAAKV,MAG9B,OADAU,KAAKR,aAAe,EACbJ,EAAAA,cAAAA,EAAAA,SAAA,KAAGuD,EAAe3C,KAAK6P,oBAAsB7P,KAAK8P,sBAOrDD,oBACJ,MAAM,aAAElN,EAAY,aAAEoF,EAAY,WAAET,GAAetH,KAAKV,MACxD,OACIF,EAAAA,cAACmI,EAAAA,OAAMnC,OAAAC,OAAA,GAAKiC,EAAU,CAAEhC,UAAWkC,GAAAA,CAAWF,EAAWhC,UAAW3C,EAAe,cAAgB,kBAC9FoF,EAAa9H,KAAI,CAACuI,EAAyBuH,IACjC/P,KAAKgQ,kBAAkBxH,EAAUT,EAAatH,OAAQsP,EAAW/P,KAAKwO,yBAUrFsB,qBACJ,MAAM,SAAE5I,EAAQ,WAAEI,GAAetH,KAAKV,MACtC,OACIF,EAAAA,cAACmI,EAAAA,OAAMnC,OAAAC,OAAA,GAAKiC,EAAU,CAAEhC,UAAWkC,GAAAA,CAAWF,EAAWhC,aACrDlG,EAAAA,cAACqI,EAAAA,KAAIrC,OAAAC,OAAA,GAAK6B,EAAQ,CAAEQ,IAAK1H,KAAKwD,SAAUmE,SAAS,OAC5C3H,KAAK6H,mBAadmI,kBAAkBxH,EAAyByH,EAAiBF,GAChE,OAAIvH,GAAYA,EAAS9I,SAAW8B,EAAAA,gBAAgBC,YAAY+G,EAAS9I,SAC9DM,KAAKkQ,cAAc1H,EAAUyH,EAASF,GAE1C/P,KAAKkK,oBAAoB1B,OAAUtF,GAAW,GAAM,EAAO+M,EAASF,GAUvEG,cAAc1H,EAAyByH,EAAkBF,GAC7D,MAAMI,EAAmB3H,EAAS7I,SAC5ByQ,EAAWpQ,KAAKiD,MAAMwM,eACtBE,OAAkCzM,IAArBiN,EAAiCA,EAAmB,GACjEE,OAAoBnN,IAAbkN,EAAyBA,EAAW,IAC3C,aAAEzN,GAAiB3C,KAAKV,MAE9B,IAAIgR,GAAe,EACfD,EAAKV,KACLW,GAAe,GAEnB,MAAMC,EAA2B,CAAEX,OAAQU,GAC3C,OACIlR,EAAAA,cAACoR,EAAAA,OAAM,CACH7K,KAAK,UACL8K,kBAAmB,CACf,eAAgBR,EAChB,gBAAiBF,EACjBpK,KAAM,YAEV+K,UAAW/N,EAAe6F,EAASkI,eAAYxN,EAC/CuG,IAAKjB,EAAS1F,GACdwC,UAAU,iBACVqL,UAAU,sBACVC,SAAU5Q,KAAKuP,gBACfsB,cAAeN,EACfO,WAAW,uBACXC,eAAe,MACfZ,iBAAkBnQ,KAAKgR,gBAAgBb,EAAkBF,EAASF,IAElE3Q,EAAAA,cAAA,OAAKuG,KAAK,WACL6C,EAAS9I,QAASO,KAAI,CAACgR,EAA4BC,KAAsB,IAAAC,EAChBC,EAAtD,OAAI5P,EAAAA,gBAAgBC,YAAYwP,EAAYvR,SACjCM,KAAKkQ,cAAce,EAA6B,QAAlBG,EAAE5I,EAAS9I,eAAO,IAAA0R,OAAA,EAAhBA,EAAkB3Q,OAAQyQ,EAAalR,KAAKwO,sBAEhFxO,KAAKqR,kBAAkBJ,EAA6B,QAAlBE,EAAE3I,EAAS9I,eAAO,IAAAyR,OAAA,EAAhBA,EAAkB1Q,OAAQyQ,EAAalR,KAAKwO,2BAcnGwC,gBAAgBrR,EAA8BsQ,EAA6BF,GAC/E,OACI3Q,EAAAA,cAAA,uBAAoB6Q,EAAO,gBAAiBF,GACvCpQ,GAYL0R,kBAAkB1P,EAAqBsO,EAA6BF,GACxE,OAAIpO,GAAQA,EAAKhC,UAAYgC,EAAKX,SAAWW,EAAKX,QAAQP,OAAS,EACxDT,KAAKkK,oBAAoBvI,OAAMuB,GAAW,GAAM,EAAO+M,EAASF,GAChEpO,GAAQA,EAAKhC,WAAagC,EAAKX,QAC/BhB,KAAKmK,oBAAoBxI,GAE7B,KAOHkG,iBACJ,MAAM,SAAEC,EAAQ,aAAEC,EAAY,aAAEpF,GAAiB3C,KAAKV,OAChD,WAAEuD,GAAe7C,KAAKiD,MACtBoF,EAA8B,GAEpC,GAAI1F,QAA+BO,IAAfL,GAA4BkF,EAAatH,OAAS,EAAG,CACrE,IAAI+H,EAA0B,GAC9B,IAAK,MAAMe,KAAiBxB,EAAc,CACtC,GAAIwB,GAAiBA,EAAczG,KAAOD,EAAY,CAClD2F,EAAWe,EACXvJ,KAAKqC,SAAS,CAAEW,gBAAYE,IAC5B,MAGJ,GADAsF,EAAWxI,KAAKwJ,gBAAgBD,GAC5Bf,GAAYA,EAAS1F,KAAOD,EAC5B,MAIR2F,GACIH,EAAarG,KACT5C,EAAAA,cAACqI,EAAAA,KAAIrC,OAAAC,OAAA,CAACoE,IAAKjB,EAAS1F,IAAQgF,GACvB,IACA9H,KAAK0J,oBAAoBlB,GACzB,WAIbT,EAAa4B,SAAQ,CAAChI,EAAqBqC,KACvCqE,EAAarG,KACT5C,EAAAA,cAACqI,EAAAA,KAAIrC,OAAAC,OAAA,CAACoE,IAAKzF,GAAW8D,GACjB9H,KAAK0J,oBAAoB/H,QAM1C,OAAO0G,EAQHmB,gBAAgB7H,GACpB,MAAMiI,EAAWjI,GAAQA,EAAKjC,QAC9B,GAAIkK,GAAYA,EAASnJ,OAAS,EAC9B,IAAK,IAAIoJ,EAAI,EAAGA,GAAKD,EAASnJ,OAAS,EAAGoJ,IAAK,CAC3C,GAAID,EAASC,GAAG/G,KAAO9C,KAAKiD,MAAMJ,WAE9B,OADA7C,KAAKqC,SAAS,CAAEW,WAAYrB,MAAAA,OAAI,EAAJA,EAAMmB,KAC3B8G,EAASC,GAEpB,MAAMC,EAAQ9J,KAAKwJ,gBAAgBI,EAASC,IAC5C,GAAIC,EACA,OAAOA,EAInB,OAAO,KAQHJ,oBAAoB3B,GACxB,OAAIA,GAAgBA,EAAarI,SAAWqI,EAAarI,QAAQe,OAAS,EAClET,KAAKV,MAAMqD,mBAA0CO,IAA1BlD,KAAKiD,MAAMJ,WAC/B7C,KAAKgK,eAAejC,EAAarI,QAASqI,EAAajF,IAG9D1D,EAAAA,cAAAA,EAAAA,SAAA,KACKY,KAAKiK,sBAAsBlC,GAC3B/H,KAAKgK,eAAejC,EAAarI,QAASqI,EAAajF,KAGzDiF,GAAgBA,EAAapI,UAAYoI,EAAa/G,SAAW+G,EAAa/G,QAAQP,OAAS,EAC/FT,KAAKkK,oBAAoBnC,EAAcA,EAAajF,IAAI,GAAO,GAC/DiF,GAAgBA,EAAapI,WAAaoI,EAAa/G,QACvDhB,KAAKmK,oBAAoBpC,EAAcA,EAAajF,IAAI,GAG5D,KAGHkH,eAAeJ,EAA4B/G,EAAqBuH,GACpE,MAAM,aAAEzH,EAAY,SAAEmF,GAAa9H,KAAKV,MAClC+K,EAAyBrK,KAAKV,MAAMkG,OAAO8E,uBAAwB,EAEnEC,EAA0BvK,KAAKV,MAAMkG,OAAOgF,kBAD7B,EAIrB,GAAI3H,GAAc7C,KAAKiD,MAAMJ,aAAeA,EAExC,OADA7C,KAAKV,MAAMO,QAAQqG,UAAU6D,MAAM,gEAC5B,KAGX,IAAKH,GAAgC,IAApBA,EAASnJ,OAEtB,OADAT,KAAKV,MAAMO,QAAQqG,UAAU6D,MAAM,4DAC5B,KAGX,IAAIU,EAAyB,GAC7B,MAAMC,EACFd,GACAA,EAAS3J,KAAI,CAACmB,EAAuBuJ,KACjC,MAAMC,EAAaxJ,EAAO1B,SAAW0B,EAAO1B,QAAQe,OAAS,EAC7D,IAAI+H,EAMA9I,EAJA8I,EADAoC,GAAcjI,EACH3C,KAAKiK,sBAAsB7I,EAAQyB,EAAY8H,GAE/CvJ,EAAOJ,QAAUhB,KAAKkK,oBAAoB9I,EAAQuJ,GAAO3K,KAAKmK,oBAAoB/I,GAGjG,MAAMyJ,EAAcD,GAAcP,GAA0BrK,KAAKR,cAAgBsL,KAAKC,MAAMR,GAA2B,EAMvH,OALIM,IACA7K,KAAKR,eACLiL,EAAiBJ,EAAyB,SAASrK,KAAKR,aAAawL,aAAe,GACpFtL,EAAUM,KAAKgK,eAAe5I,EAAO1B,QAASiD,EAAevB,EAAO0B,QAAKI,GAAW,IAGpF9D,EAAAA,cAACqI,EAAAA,KAAIrC,OAAAC,OAAA,GAAKyC,EAAQ,CAAE2B,IAAKrI,EAAO0B,GAAIwC,UAAWkC,GAAAA,CAAWM,EAASxC,UAAWuF,GAAe,iBACxFrC,EACA9I,MAIjB,OAAOM,KAAKiL,YAAYR,EAAgBC,EAAa7H,EAAYuH,GAU7DH,sBAAsB7I,EAAuByB,EAAqBmB,GACtE,MAAM,OAAEkH,GAAWlL,KAAKV,MACxB,OACIF,EAAAA,cAACqI,EAAAA,KAAIrC,OAAAC,OAAA,CACDoE,IAAKzF,GACDkH,EAAM,CACVtD,QAAS5H,KAAKwC,sBAAsBpB,EAAQyB,GAC5CuI,QAASpL,KAAK8D,cAAa,kBACV9D,KAAKiD,MAAMJ,YAAc7C,KAAKiD,MAAMJ,aAAezB,EAAO0B,IAAG,mBAC5D9C,KAAKiD,MAAMJ,YAAc7C,KAAKiD,MAAMJ,aAAezB,EAAO0B,IAAG,cAClED,IAEZzB,EAAOzB,UAeZuK,oBACJ9I,EACA4C,GAIiB,IAHjBsH,IAAAC,UAAA9K,OAAA,QAAAyC,IAAAqI,UAAA,KAAAA,UAAA,GACAC,EAAAD,UAAA9K,OAAA,QAAAyC,IAAAqI,UAAA,IAAAA,UAAA,GACA0E,EAAgB1E,UAAA9K,OAAA,EAAA8K,UAAA,QAAArI,EAChB6M,EAAiBxE,UAAA9K,OAAA,EAAA8K,UAAA,QAAArI,EAEjB,MAAM,KAAEuI,EAAI,aAAE9I,GAAiB3C,KAAKV,MAC9BK,EAAWyB,EAAOzB,SAAWyB,EAAOzB,SAAW,GAC/C+L,EAActK,EAAOgC,YAAchC,EAAOgC,YAAc,GAC9DpD,KAAKmG,QAAQwF,cAAcC,MAAQjM,EACnC,MAAMkM,GAAaC,EAAAA,EAAAA,wBAAuB9L,KAAK8F,iBAAkB9F,KAAKmG,SACtE,OACI/G,EAAAA,cAACqI,EAAAA,KAAIrC,OAAAC,OAAA,gBACa1C,EAAesN,OAAU/M,EAAS,gBACjCP,EAAeoN,OAAW7M,EAAS,aACtCP,EAAevB,EAAOsP,eAAYxN,GAC1CuI,EAAI,CACRhC,IAAKzF,EACLoH,QAASI,GAAYxL,KAAK8D,cAC1BH,OAAQvC,EAAO2K,iBAAmB,cAAW7I,EAC7C8I,YAAaV,GAAetL,KAAKkB,qBAAqBwK,EAAatK,GACnE6K,KAAM7K,EAAOJ,SACT6K,EAAU,CACdjE,SAASsE,EAAAA,EAAAA,kBAAiBlM,KAAK8F,iBAAkB9F,KAAKmG,QAASxG,KAE9DyB,EAAOzB,UAWZwM,uBAAuBxM,EAAmBwC,GAC9C,MAAM,KAAEsJ,GAASzL,KAAKV,MACtBU,KAAKmG,QAAQwF,cAAcC,MAAQjM,EACnC,MAAMkM,GAAaC,EAAAA,EAAAA,wBAAuB9L,KAAK8F,iBAAkB9F,KAAKmG,SACtE,OAAIxG,GAAYwC,EAER/C,EAAAA,cAACqI,EAAAA,KAAIrC,OAAAC,OAAA,GAAKoG,EAAI,CAAEQ,KAAM9J,GAAa0J,EAAU,CAAEjE,SAASsE,EAAAA,EAAAA,kBAAiBlM,KAAK8F,iBAAkB9F,KAAKmG,QAASxG,KACzGA,GAIN,KAUHwK,oBAAoB/I,EAAuB4C,GAAyC,IAAzBwH,EAAAD,UAAA9K,OAAA,QAAAyC,IAAAqI,UAAA,IAAAA,UAAA,GAC/D,MAAM,KAAEa,GAASpM,KAAKV,MACtB,OACIF,EAAAA,cAACqI,EAAAA,KAAIrC,OAAAC,OAAA,CAACoE,IAAKzF,GAAWoI,EAAI,CAAEhB,QAASI,GAAYxL,KAAK8D,gBACjD1C,EAAOzB,UAaZsL,YAAYoB,EAAe3B,EAA4B4B,EAAsB1D,GACjF,MAAM,aAAE2D,EAAY,SAAErF,EAAQ,kBAAEsF,EAAiB,kBAAErJ,EAAiB,aAAER,EAAY,uBAAE8J,GAA2BzM,KAAKV,MAC9GoN,GACD/J,GAAgBQ,GAAkD,OAA7BnD,KAAKiD,MAAMX,oBAAuDY,IAA7BlD,KAAKiD,MAAMX,gBAAgCsG,EACpH+D,GACDhK,GAAgB8J,GAA0BjL,EAAAA,gBAAgBC,YAAYzB,KAAKiD,MAAMX,iBAAmBsG,EACnGgE,EAAoB5M,KAAKR,aAAe,GAAKkN,EAAuBH,EAAcjH,UAAY,kBAEpG,OADAtF,KAAKR,aAAe,EAEhBJ,EAAAA,cAACqI,EAAAA,KAAIrC,OAAAC,OAAA,GAAKkH,EAAY,CAAEjH,UAAWsH,IAC/BxN,EAAAA,cAACqI,EAAAA,KAAIrC,OAAAC,OAAA,GACG6B,EAAQ,CACZ5B,UAAWkC,GAAAA,CACPN,EAAS5B,UACT+G,EACAK,GAAwB,gBACxBA,GACI1M,KAAKV,MAAMkG,OAAOgF,kBAClBxK,KAAKV,MAAMkG,OAAOgF,iBAAmB,GACrC,yBAGPE,GAELtL,EAAAA,cAAA,OAAKkG,UAAU,4BACVoH,GACG1M,KAAKiD,MAAMX,eACXtC,KAAKiD,MAAMX,cAAcrC,KAAI0B,IAAI,IAAAkL,EAAA,OAC7BzN,EAAAA,cAACqI,EAAAA,KAAIrC,OAAAC,OAAA,CAACoE,IAAK9H,EAAKL,KAASkL,EAAiB,CAAElH,UAAWkH,EAAmBlH,YACrEtF,KAAKiD,MAAMX,eAAiBtC,KAAKkE,kBAAkBvC,GACnDgL,GAA6B3M,KAAKmM,uBAAuBxK,EAAKJ,QAAkC,QAA3BsL,EAAElL,EAAKO,4BAAoB,IAAA2K,OAAA,EAAzBA,EAA2B1K,eA+FvH2B,gBACC9D,KAAKV,MAAMqD,cACZ3C,KAAKqC,SAAS,CAAEQ,gBAAYK,KAqExC,yBC9mBO,IAAKoO,EASAC,2BATZ,SAAYD,GACRA,EAAAA,EAAA,eACAA,EAAAA,EAAA,qBAFJ,CAAYA,IAAAA,EAAe,KAS3B,SAAYC,GACRA,EAAA,UACAA,EAAA,gBAFJ,CAAYA,IAAAA,EAAU,4sBCUtB,MAAMC,UAAuBpS,EAAAA,cAyBzBC,YAAYC,GACRC,MAAMD,GAjBF,KAAAmS,UAAoB,EAEpB,KAAAC,OAAiB,EAmPR,KAAAC,qBAAwBC,IACrC,OAAQA,GACJ,IAAI,mBACA5R,KAAKyR,UAAW,EAChBzR,KAAK0R,OAAQ,EACb,MACJ,IAAI,UACA1R,KAAKyR,UAAW,EAChBzR,KAAK0R,OAAQ,EACb,MACJ,IAAI,MACA1R,KAAKyR,UAAW,EAChBzR,KAAK0R,OAAQ,IA/OrB1R,KAAK6R,gBAAkB7R,KAAK6R,gBAAgBhM,KAAK7F,MACjDA,KAAK8R,SACDxS,EAAMO,QAAQC,SAAWR,EAAMO,QAAQC,QAAQiS,QAAgD,WAAtCzS,EAAMO,QAAQC,QAAQiS,OAAOC,KAAoB,KAAO,KACrHhS,KAAK2R,qBAAqB3R,KAAKV,MAAMkG,QAAUxF,KAAKV,MAAMkG,OAAOyM,sBACjEjS,KAAKiD,MAAQ,CAAEiP,SAAUlS,KAAKkS,UAC9BlS,KAAKqI,aAAe,GAhBjB,uBAAuBtI,EAAgBoS,GAC1C,IAAIC,EAKJ,OAJIrS,GAAUoS,GAAoBA,EAAiB1R,OAAS,IACxD2R,EAAkBD,EAAiB5J,MAAK5G,GAAQA,EAAK0Q,SAAU7R,gBAAkBT,EAAOS,iBAGrF4R,GAAmBA,EAAgBE,KAapC,eACN,MAAyB,OAAlBtS,KAAK8R,UAAuC,OAAlB9R,KAAK8R,SAGnCzL,oBACCC,EAAAA,GAASC,YACTvG,KAAKuS,6BAA8BC,EAAAA,EAAAA,mBAAkB7J,OAAQ,SAAU3I,KAAK6R,kBAEhF7R,KAAK6R,kBAGF9K,uBACCT,EAAAA,GAASC,WACToC,OAAO3B,oBAAoB,SAAUhH,KAAKuS,6BAA8B,GAIzEtL,SAAM,IAAAwL,EAAAC,EAET,GADA1S,KAAKqI,aAAerI,KAAK2S,YACrBC,EAAAA,EAAAA,IAAoB5S,KAAKV,MAAMmD,MAE/B,OADAzC,KAAKV,MAAM4G,UAAU6D,MAAM,+BACpB,KAGX,MAQM8I,EAASxE,EAAAA,EAAAA,EAAA,GACRrO,KAAKV,OACLU,KAAKiD,OAAK,IACblB,cAXyC,CACzCqC,UAAW,CACPC,GAAI,CAAEC,EAAG,kBAAmBC,EAAG,EAAGC,EAAG,GACrCsO,GAAI,CAAExO,EAAG,kBAAmBC,EAAG,EAAGC,EAAG,IAEzCI,UAAU,GAOVW,aAAcvF,KAAKV,MAAMO,QAAQC,QAAQyF,aACzC+B,WAAY,CACRyL,YAAa/S,KAAKV,MAClBgG,UAAWkC,GAAAA,CAAW,SAAUxH,KAAKV,MAAMkG,OAAOF,UAAWtF,KAAKiD,MAAMiP,SAAW,YAAc,cACjG/G,IAAK,MACLxF,KAAM3F,KAAKkS,SAAW,UAAY,cAEtChL,SAAU,CACN5B,UAAW,eACX6F,IAAK,KACLxF,KAAM3F,KAAKkS,SAAW,UAAY,QAEtCpK,SAAU,CACNxC,UAAW,qBACXK,KAAM,eACNwF,IAAK,MAEThI,kBAAyD,QAAxCsP,EAAEzS,KAAKV,MAAMkG,OAAOwN,4BAAoB,IAAAP,GAAAA,EACzDhG,uBAAiE,QAA3CiG,EAAE1S,KAAKV,MAAMkG,OAAOyN,+BAAuB,IAAAP,GAAAA,EACjEjH,KAAM,CACFN,IAAK,IACL7F,UAAW,2BACXK,KAAM3F,KAAKkS,SAAW,SAAW,YAErC3F,aAAc,CACVpB,IAAK,MACL7F,UAAW,mBAEfkH,kBAAmB,CACfrB,IAAK,MACL7F,UAAW,iBACXK,KAAM,YAEVuF,OAAQ,CACJ5F,UAAW,6BACX6F,IAAK,SACLxF,KAAM3F,KAAKkS,SAAW,SAAW,WACjCtK,QAAS5H,KAAKV,OAElB4T,eAAgB,CACZ5N,UAAW,6BAEf8G,KAAM,CACF9G,UAAW,2BACX6F,IAAK,QAET/D,2BAA4B,CACxB9B,UAAW,mCAEf6B,iBAAkB,CACd7B,UAAW,0CACX6F,IAAK,SACL,aAAcnL,KAAKV,MAAM6I,UAAUgL,oBACnCvL,QAAS5H,KAAKV,OAElB+H,uBAAwB,CACpB/B,UAAW,wCACX6F,IAAK,QAETxI,aAAc3C,KAAKiD,MAAMiP,SACzBnK,aAAc/H,KAAKqI,aACnB/C,UAAWkC,GAAAA,CAAW,SAAUxH,KAAKV,MAAMkG,OAAOF,aAGtD,OAAOtF,KAAKV,MAAM8T,WAAWP,GAGzBF,WACJ,MAAM,KAAElQ,EAAI,OAAE+C,GAAWxF,KAAKV,MACxB+T,EAA8B,GAYpC,OAXIrT,KAAKyR,UAAYhP,GAAQA,EAAK6Q,YAAc7Q,EAAK6Q,WAAWC,QAAU9Q,EAAK6Q,WAAWC,OAAO9S,OAAS,GACtGgC,EAAK6Q,WAAWC,OAAOtT,KAAI,CAAC0B,EAAyBqC,IACjDqP,EAAWrR,KAAKhC,KAAKwT,uBAAuB7R,OAAMuB,GAAW,EAAMc,GAAO,MAI9EhE,KAAK0R,OAASlM,EAAOiO,aAAejO,EAAOiO,YAAYhT,OAAS,GAChE+E,EAAOiO,YAAYxT,KAAI,CAAC0B,EAAwBgJ,IAC5C0I,EAAWrR,KAAKhC,KAAKwT,4BAAuBtQ,EAAWvB,GAAM,EAAOgJ,EAAM,MAG3E3K,KAAK0T,0BAA0BL,GAGlCK,0BAA0BL,GAA2B,IAAAM,EAAAC,EAEzD,KAD0D,QAAlCD,EAAG3T,KAAKV,MAAMkG,OAAOqO,qBAAa,IAAAF,GAAAA,GAEtD,OAAON,EAEX,MAAMS,EAAsC,GACtCC,EAAU,CACZjR,GAAI,EACJnD,SAA8C,QAAtCiU,EAAE5T,KAAKV,MAAMkG,OAAOwO,0BAAkB,IAAAJ,EAAAA,EAAI,MAClD5S,QAAS,IACToC,iBAAaF,EACbxD,QAAS2T,GAIb,OAFAS,EAAmB9R,KAAK+R,GAEjBD,EAGHN,uBACJS,EACAC,EACAzC,EACA9G,EACAwJ,GAEA,MAAMpU,EACFC,KAAKV,MAAMO,SAAWG,KAAKV,MAAMO,QAAQC,SAAWE,KAAKV,MAAMO,QAAQC,QAAQC,OACzEC,KAAKV,MAAMO,QAAQC,QAAQC,OAC3B,SACJ,2BAAEqU,GAA+BpU,KAAKV,MAAMkG,OAC5C6O,EAAeH,GAAWA,EAAQvU,UAAa,IAC/C,cAAE2U,GAAkBtU,KAAKV,MAAM6I,UAG/BoM,EACFN,IACAG,MAAAA,OAA0B,EAA1BA,EAA4BI,QAAOC,IAAS,IAAAC,EAAAC,EAAA,OAA0B,QAAtBD,EAAAD,EAAUtL,oBAAY,IAAAuL,OAAA,EAAtBA,EAAwBlU,kBAAkByT,MAAAA,GAAgB,QAANU,EAAVV,EAAYW,YAAI,IAAAD,OAAA,EAAhBA,EAAkBnU,mBAGhH,IAAI4C,EAAsB,QAIX,IAADyR,EAAAC,EAAd,OAHItT,EAAAA,gBAAgBC,YAAYwS,MAAAA,OAAU,EAAVA,EAAYc,SAAWd,EAAYc,OAAO,GAAGC,MACzE5R,EAAc6Q,EAAYc,OAAO,GAAGC,KAEpCvD,EACO,CACH3O,GAAI0O,EAAeyD,eACnBtV,SAA8E,QAAtEkV,EAAErD,EAAe0D,gBAAgBnV,EAAQkU,MAAAA,OAAU,EAAVA,EAAYkB,yBAAiB,IAAAN,EAAAA,EAAI,GAClF7T,QAASiT,MAAAA,OAAU,EAAVA,EAAYmB,IACrBhS,YAAAA,EACA1D,QAASM,KAAKqV,mBAAmBpB,EAAY7Q,EAAa+Q,GAC1DzS,mBAAoB1B,KAAKV,MAAMkG,OAAOyN,yBAA2BsB,EACjEhU,WAAYgR,EAAAA,EAAW+D,OACvB5E,UAAW,GAAuE,QAAvEoE,EAAGtD,EAAe0D,gBAAgBnV,EAAQkU,MAAAA,OAAU,EAAVA,EAAYkB,yBAAiB,IAAAL,EAAAA,EAAI,MAAMR,KAG7F,CACHxR,GAAI0O,EAAe+D,gBACnB5V,SAAU0U,EACVrT,QAAUkT,GAAWA,EAAQ/R,SAAW+R,EAAQ/R,QAAQC,gBAAmB,GAC3EoT,oBAAsBtB,GAAWA,EAAQuB,WAAavB,EAAQuB,UAAUrT,gBAAmB,GAC3FgB,YAAc8Q,GAAWA,EAAQtS,OAASsS,EAAQtS,MAAMN,KAAQ,GAChE5B,QAASM,KAAK0V,sBAAsBxB,GACpC3T,WAAYgR,EAAAA,EAAWoE,IACvB5J,iBAAkBmI,MAAAA,OAAO,EAAPA,EAAS0B,aAC3BlF,UAAW,GAAG2D,KAAeC,KAI7Be,mBAAmBQ,EAA8BC,GAAsD,IAA7B3B,EAAA5I,UAAA9K,OAAA,QAAAyC,IAAAqI,UAAA,IAAAA,UAAA,GAC9E,MAAMwK,EAAkC,GACxC,OAAKF,GAAaA,EAASG,UAAyC,IAA7BH,EAASG,SAASvV,SAGpDT,KAAKV,MAAMkG,OAAOqO,eAAiBM,GACpC4B,EAAe/T,KAAK,CAChBrC,SAAUK,KAAKV,MAAM6I,UAAU8N,oBAC/B7S,YAAa0S,EACb9U,SAASkV,EAAAA,EAAAA,gBAAeL,EAAW7V,KAAKV,MAAMO,QAAuC,MAG7FgW,EAASG,SAAS/V,KAAI,CAAC0B,EAAyBqC,KAC5C+R,EAAe/T,KAAKhC,KAAKwT,uBAAuB7R,OAAMuB,GAAW,EAAMc,GAAO,OAE3E+R,GAZI,GAePL,sBAAsBG,GAC1B,MAAME,EAAkC,GAExC,OAAKF,GAAaA,EAASjM,UAAyC,IAA7BiM,EAASjM,SAASnJ,QAIzDoV,EAASjM,SAAS3J,KAAI,CAAC0B,EAAqBgJ,KACxCoL,EAAe/T,KAAKhC,KAAKwT,4BAAuBtQ,EAAWvB,GAAM,EAAOgJ,OAErEoL,GANI,GA2BPlE,kBACJ7R,KAAK8R,SAAW9R,KAAKmW,eACrBnW,KAAKqC,SAAS,CAAE6P,SAAUlS,KAAKkS,WAG3BiE,eACJ,MAAM,QAAEtW,GAAYG,KAAKV,MAGzB,GAAIO,EAAQC,SAAWD,EAAQC,QAAQiS,QAA0C,WAAhClS,EAAQC,QAAQiS,OAAOC,KACpE,MAAO,KAGX,GAAI1L,EAAAA,GAASC,WAAaoC,OAAOyN,WAAY,CACzC,MAAM7Q,EAAe1F,EAAQC,QAAQyF,aACrC,GAAIA,EACA,OAAIA,EAAalB,IAAMsE,OAAOyN,YAAc7Q,EAAalB,GAAGE,EACjD,KACAgB,EAAad,IAAMkE,OAAOyN,YAAc7Q,EAAad,GAAGF,EACxD,KACAgB,EAAab,IAAMiE,OAAOyN,YAAc7Q,EAAab,GAAGH,EACxD,KACAgB,EAAaZ,IAAMgE,OAAOyN,YAAc7Q,EAAaZ,GAAGJ,EACxD,KAEJ,KAIf,MAAO,MA5SIiN,EAAA+D,cAAwBjE,EAAAA,EAAgBqE,IAExCnE,EAAAyD,aAAuB3D,EAAAA,EAAgBgE,QAWtDe,EAAAA,EAAAA,IAAA,CADCC,EAAAA,IAAU,gCAsBDD,EAAAA,EAAAA,IAAA,CAATE,EAAAA,IAAQ,6BA8Qb,qJC/TO,MAAMpX,UAA2BC,EAAAA,cAapCC,YAAYC,GACRC,MAAMD,GAXF,KAAAE,aAAuB,EAmTd,KAAA0B,qBAAuB,CAACC,EAA0BC,IAA0B,KACzF,MAAMzB,EAAWyB,GAAUA,EAAOzB,SAAWyB,EAAOzB,SAAW,GACzD0B,EAAiC,CAAC,CAAEC,IAAKH,EAAkBI,QAAS5B,IAGtE6B,EAAAA,gBAAgBC,YAAYL,EAAOM,qBACnCN,EAAOM,mBAAmBzB,KAAI0B,IAC1B,GAAIA,GAAQA,EAAKC,MAAO,CACpB,MAAMC,EAAWF,EAAKC,MAAMN,IACtBQ,EAA+BH,EAAKC,MAAMG,cAChDV,EAAiBW,KAAK,CAClBV,IAAKO,EACLN,QAASI,EAAKM,KACdF,cAAeD,EACfI,qBAAsB,CAAEC,QAASR,EAAKQ,QAAQC,sBAK9DpC,KAAKqC,SAAS,CACVC,cAAejB,EAAiBZ,OAAS,EAAIY,EAAmB,CAAC,CAAEC,IAAK,UACxEiB,qBAAsB5C,KAIb,KAAA6C,sBAAwB,CAACC,EAAqBC,IAAsB,KAC5E1C,KAAKV,MAAMqD,cASZxD,EAAmByD,aAAc,EACjC5C,KAAKqC,SAAS,CACVQ,WAAYJ,EAAKK,GACjBC,oBAAqBN,EAAK9C,SAC1BqD,WAAYN,MAZhB1C,KAAKqC,SAAS,CACVQ,WAAY7C,KAAKiD,MAAMJ,YAAc7C,KAAKiD,MAAMJ,aAAeJ,EAAKK,QAAMI,EAAYT,EAAKK,GAC3FE,WAAYN,IAEZ1C,KAAKV,MAAM6D,mBACXnD,KAAKkB,qBAAqBuB,EAAKW,YAAcX,EAA7CzC,KAYK,KAAAqD,cAAgB,IAAM,KACnClE,EAAmByD,aAAc,EACjC5C,KAAKqC,SAAS,CAAEQ,WAAY7C,KAAKiD,MAAMD,cAO1B,KAAAM,oBAAuBC,IAChCvD,KAAKwD,SAASC,UAAYzD,KAAKwD,SAASC,QAAQC,SAASH,EAAMI,SAC/D3D,KAAKqC,SAAS,CACVQ,gBAAYK,EACZH,oBAAqB,GACrBT,cAAe,QASV,KAAAsB,oBAAuBL,IAChCvD,KAAKwD,SAASC,UAAYzD,KAAKwD,SAASC,QAAQC,SAASH,EAAMM,gBAC/D7D,KAAK8D,iBAWI,KAAAC,uBAAyB,CAACC,EAAejB,EAA8BkB,KAC/E9E,EAAmByD,aAAyB,IAAVoB,MAGlCC,IAAmBlB,IAGjBA,IAAwBkB,EASlB,KAAAC,kBAAqB5B,IAClC,IAAKA,IAAkBA,EAAchB,IACjC,OAAO,KAGX,MACM6C,EAAuC,CACzCC,UAAW,CACPC,GAAI,CAAEC,EAAG,kBAAmBC,EAAG,EAAGC,EAAG,GACrCC,GAAI,CAAEH,EAAG,kBAAmBC,EAAG,EAAGC,EAAG,GACrCE,GAAI,CAAEJ,EAAG,kBAAmBC,EAAG,EAAGC,EAAG,GACrCG,GAAI,CAAEL,EAAG,kBAAmBC,EAAG,EAAGC,EAAG,IAEzCI,UAAU,GAEuB,IAADC,EAAAC,EAApC,YAAyB5B,KAVA6B,EAAAA,EAAAA,kBAAiB,GAAGzC,EAAchB,MAAOtB,KAAKV,MAAMO,QAAQmF,cAAcC,eAAeC,aAY1G9F,EAAAA,cAAC+F,EAAAA,GAAKC,OAAAC,OAAA,CACFJ,eAAgBjF,KAAKV,MAAMO,QAAQmF,cAAcC,eACjDK,UAAU,sBACNhD,EAAa,CACjBiD,aAAcvF,KAAKV,MAAMO,QAAQC,QAAQyF,aACzCxD,cAAqF,QAAxE8C,EAA6B,QAA7BC,EAAExC,EAAcP,qBAAa,IAAA+C,EAAAA,EAAI9E,KAAKV,MAAMkG,OAAOC,6BAAqB,IAAAZ,EAAAA,EAAIV,EACzFuB,oBAAoB,OACpBC,KAAK,WACL7C,GAAG,kCACHvB,QAASe,EAAcf,WAI5B,MAraPvB,KAAKwD,SAAWpE,EAAAA,YAChBY,KAAK4F,YAAcxG,EAAAA,YACnBY,KAAKiD,MAAQ,CAAEJ,gBAAYK,EAAWH,oBAAqB,GAAIC,gBAAYE,EAAWX,qBAAsB,IAC5GvC,KAAK8D,cAAgB9D,KAAK8D,cAAc+B,KAAK7F,MAC7CA,KAAK8F,kBAAmBC,EAAAA,EAAAA,oBACpB/F,KAAKV,MAAMO,QAAQC,QAAQkG,kBAC3BhG,KAAKV,MAAM2G,aACXjG,KAAKV,MAAM4G,WAEflG,KAAKmG,SAAUC,EAAAA,EAAAA,kBAAiB,QAASpG,KAAK8F,iBAAkB,GAAI,IAGjEO,oBACCC,EAAAA,GAASC,YACTC,SAASC,KAAKC,iBAAiB,YAAa1G,KAAKsD,qBACjDkD,SAASC,KAAKC,iBAAiB,WAAY1G,KAAK4D,sBAIjD+C,qBAAkB,IAAAC,EACO,QAAxBA,EAAA5G,KAAK4F,YAAYnC,eAAO,IAAAmD,GAAxBA,EAA0BC,SAAS,IAAM7G,KAAKV,MAAMqD,cACnD3C,KAAK4F,YAAYnC,QAAQoD,SAAS,GAAmBC,QAIvDC,uBACCT,EAAAA,GAASC,YACTC,SAASC,KAAKO,oBAAoB,YAAahH,KAAKsD,qBAAqB,GACzEkD,SAASC,KAAKO,oBAAoB,WAAYhH,KAAK4D,qBAAqB,IAIzEqD,SACH,MAAM,aAAEtE,EAAY,SAAEuE,EAAQ,iBAAEC,EAAgB,2BAAEC,EAA0B,uBAAEC,EAAsB,WAAEC,GAAetH,KAAKV,MAG1H,OADAU,KAAKR,aAAe,EAEhBJ,EAAAA,cAACmI,EAAAA,OAAMnC,OAAAC,OAAA,GACCiC,EAAU,CACdhC,UAAWkC,GAAAA,CAAWF,EAAWhC,UAAW3C,QAA0CO,IAA1BlD,KAAKiD,MAAMJ,WAA2B,QAAU,YAE5GzD,EAAAA,cAACqI,EAAAA,KAAIrC,OAAAC,OAAA,GAAK6B,EAAQ,CAAEQ,IAAK1H,KAAKwD,SAAUmE,SAAS,OAC5ChF,QAA0CO,IAA1BlD,KAAKiD,MAAMJ,YACxBzD,EAAAA,cAACqI,EAAAA,KAAIrC,OAAAC,OAAA,GAAK+B,GACNhI,EAAAA,cAACqI,EAAAA,KAAIrC,OAAAC,OAAA,GAAK8B,EAAgB,CAAES,QAAS5H,KAAKqD,mBAC1CjE,EAAAA,cAACqI,EAAAA,KAAIrC,OAAAC,OAAA,GAAKgC,GAAyBrH,KAAKiD,MAAMF,sBAGrD/C,KAAK6H,mBAMdA,iBACJ,MAAM,SAAEC,EAAQ,aAAEC,EAAY,aAAEpF,GAAiB3C,KAAKV,OAChD,WAAEuD,GAAe7C,KAAKiD,MACtBoF,EAA8B,GAEpC,GAAI1F,QAA+BO,IAAfL,GAA4BkF,EAAatH,OAAS,EAAG,CACrE,IAAI+H,EAA0B,GAC9B,IAAK,MAAMe,KAAiBxB,EAAc,CACtC,GAAIwB,GAAiBA,EAAczG,KAAOD,EAAY,CAClD2F,EAAWe,EACVpK,EAAmByD,YAEd5C,KAAKqC,SAAS,CAAEW,gBAAYE,EAAWH,oBAAqBwG,EAAc5J,WAD1EK,KAAKqC,SAAS,CAAEW,gBAAYE,IAElC,MAGJ,GADAsF,EAAWxI,KAAKwJ,gBAAgBD,GAC5Bf,GAAYA,EAAS1F,KAAOD,EAC5B,MAIR2F,GACIH,EAAarG,KACT5C,EAAAA,cAACqI,EAAAA,KAAIrC,OAAAC,OAAA,CAACoE,IAAKjB,EAAS1F,IAAQgF,GACvB,IACA9H,KAAK0J,oBAAoBlB,GAAW,WAIjDT,EAAa4B,SAAQ,CAAChI,EAAqBqC,KACvCqE,EAAarG,KACT5C,EAAAA,cAACqI,EAAAA,KAAIrC,OAAAC,OAAA,CACDoE,IAAKzF,GACD8D,EAAQ,CACZJ,IAAK1H,KAAK+D,uBAAuBC,EAAOhE,KAAKiD,MAAMF,oBAAqBpB,EAAKhC,UAAYK,KAAK4F,YAAc,OAE3G5F,KAAK0J,oBAAoB/H,QAM1C,OAAO0G,EAGHmB,gBAAgB7H,GACpB,MAAMiI,EAAWjI,GAAQA,EAAKjC,QAC9B,GAAIkK,GAAYA,EAASnJ,OAAS,EAC9B,IAAK,IAAIoJ,EAAI,EAAGA,GAAKD,EAASnJ,OAAS,EAAGoJ,IAAK,CAC3C,GAAID,EAASC,GAAG/G,KAAO9C,KAAKiD,MAAMJ,WAI9B,OAHC1D,EAAmByD,YAEd5C,KAAKqC,SAAS,CAAEW,WAAYrB,GAAQA,EAAKmB,GAAIC,oBAAqB6G,EAASC,GAAGlK,WAD9EK,KAAKqC,SAAS,CAAEW,WAAYrB,MAAAA,OAAI,EAAJA,EAAMmB,KAEjC8G,EAASC,GAEpB,MAAMC,EAAQ9J,KAAKwJ,gBAAgBI,EAASC,IAC5C,GAAIC,EACA,OAAOA,EAKnB,OADA9J,KAAKV,MAAMO,QAAQqG,UAAU6D,MAAM,iDAC5B,KAGHL,oBAAoB3B,GACxB,OAAIA,GAAgBA,EAAarI,SAAWqI,EAAarI,QAAQe,OAAS,EAClET,KAAKV,MAAMqD,mBAA0CO,IAA1BlD,KAAKiD,MAAMJ,WAC/B7C,KAAKgK,eAAejC,EAAarI,QAASqI,EAAajF,IAAI,GAGlE1D,EAAAA,cAAAA,EAAAA,SAAA,KACKY,KAAKiK,sBAAsBlC,GAC3B/H,KAAKgK,eAAejC,EAAarI,QAASqI,EAAajF,IAAI,IAG7DiF,GAAgBA,EAAapI,UAAYoI,EAAa/G,SAAW+G,EAAa/G,QAAQP,OAAS,EAC/FT,KAAKkK,oBAAoBnC,EAAcA,EAAajF,IAAI,GAAO,GAC/DiF,GAAgBA,EAAapI,WAAaoI,EAAa/G,QACvDhB,KAAKmK,oBAAoBpC,EAAcA,EAAajF,IAAI,IAEnE9C,KAAKV,MAAMO,QAAQqG,UAAU6D,MAAM,yDAC5B,MAGHC,eAAeJ,EAA4B/G,EAAqBuH,GACpE,MAAM,aAAEzH,EAAY,SAAEmF,GAAa9H,KAAKV,MAClC+K,EAAyBrK,KAAKV,MAAMkG,OAAO8E,uBAAwB,EACnEC,EAA0BvK,KAAKV,MAAMkG,OAAOgF,kBAAoB,EAGtE,GAAI3H,GAAc7C,KAAKiD,MAAMJ,aAAeA,EAExC,OADA7C,KAAKV,MAAMO,QAAQqG,UAAU6D,MAAM,gEAC5B,KAGX,IAAKH,GAAgC,IAApBA,EAASnJ,OAEtB,OADAT,KAAKV,MAAMO,QAAQqG,UAAU6D,MAAM,4DAC5B,KAGX,IAAIU,EAAyB,GAC7B,MAAMC,EACFd,GACAA,EAAS3J,KAAI,CAACmB,EAAuBuJ,KACjC,MAAMC,EAAaxJ,EAAO1B,SAAW0B,EAAO1B,QAAQe,OAAS,EAC7D,IAAI+H,EAOA9I,EALA8I,EADAoC,GAAcjI,EACH3C,KAAKiK,sBAAsB7I,EAAQyB,EAAY8H,GAE/CvJ,EAAOJ,QAAUhB,KAAKkK,oBAAoB9I,EAAQuJ,GAAO3K,KAAKmK,oBAAoB/I,GAIjG,MAAMyJ,EAAcD,GAAcP,GAA0BrK,KAAKR,cAAgBsL,KAAKC,MAAMR,GAA2B,EAMvH,OALIM,IACA7K,KAAKR,eACLiL,EAAiBJ,EAAyB,SAASrK,KAAKR,aAAawL,aAAe,GACpFtL,EAAUM,KAAKgK,eAAe5I,EAAO1B,QAASiD,EAAevB,EAAO0B,QAAKI,GAAW,IAGpF9D,EAAAA,cAACqI,EAAAA,KAAIrC,OAAAC,OAAA,GACGyC,EAAQ,CACZ2B,IAAKrI,EAAO0B,GACZwC,UAAWkC,GAAAA,CAAWM,EAASxC,UAAWuF,GAAe,eACzDnD,IAAK1H,KAAK+D,uBAAuB4G,EAAK3K,KAAKiD,MAAMF,oBAAqB3B,EAAOzB,UAAYK,KAAK4F,YAAc,OAE3G4C,EACA9I,MAIjB,OAAOM,KAAKiL,YAAYR,EAAgBC,EAAa7H,EAAYuH,GAG7DH,sBAAsB7I,EAAuByB,EAAqBmB,GACtE,MAAM,OAAEkH,GAAWlL,KAAKV,MACxB,OACIF,EAAAA,cAACqI,EAAAA,KAAIrC,OAAAC,OAAA,CACDoE,IAAKzF,GACDkH,EAAM,CACVtD,QAAS5H,KAAKwC,sBAAsBpB,EAAQyB,GAC5CuI,QAASpL,KAAK8D,cAAa,kBACV9D,KAAKiD,MAAMJ,YAAc7C,KAAKiD,MAAMJ,aAAezB,EAAO0B,IAAG,mBAC5D9C,KAAKiD,MAAMJ,YAAc7C,KAAKiD,MAAMJ,aAAezB,EAAO0B,IAAG,cAClED,IAEZzB,EAAOzB,UAKZuK,oBACJ9I,EACA4C,GAEyB,IADzBsH,IAAAC,UAAA9K,OAAA,QAAAyC,IAAAqI,UAAA,KAAAA,UAAA,GACAC,EAAAD,UAAA9K,OAAA,QAAAyC,IAAAqI,UAAA,IAAAA,UAAA,GAEA,MAAM,KAAEE,GAASzL,KAAKV,MAChBK,EAAWyB,EAAOzB,SAAWyB,EAAOzB,SAAW,GAC/C+L,EAActK,EAAOgC,YAAchC,EAAOgC,YAAc,GAC9DpD,KAAKmG,QAAQwF,cAAcC,MAAQjM,EACnC,MAAMkM,GAAaC,EAAAA,EAAAA,wBAAuB9L,KAAK8F,iBAAkB9F,KAAKmG,SACtE,OACI/G,EAAAA,cAACqI,EAAAA,KAAIrC,OAAAC,OAAA,GACGoG,EAAI,CACRhC,IAAKzF,EACLoH,QAASI,GAAYxL,KAAK8D,cAC1BH,OAAQvC,EAAO2K,iBAAmB,cAAW7I,EAC7C8I,YAAaV,GAAetL,KAAKkB,qBAAqBwK,EAAatK,GACnE6K,KAAM7K,EAAOJ,SACT6K,EAAU,CACdjE,SAASsE,EAAAA,EAAAA,kBAAiBlM,KAAK8F,iBAAkB9F,KAAKmG,QAASxG,KAE9DyB,EAAOzB,UAKZwM,uBAAuBxM,EAAmBwC,GAC9C,MAAM,KAAEsJ,GAASzL,KAAKV,MACtBU,KAAKmG,QAAQwF,cAAcC,MAAQjM,EACnC,MAAMkM,GAAaC,EAAAA,EAAAA,wBAAuB9L,KAAK8F,iBAAkB9F,KAAKmG,SACtE,OAAIxG,GAAYwC,EAER/C,EAAAA,cAACqI,EAAAA,KAAIrC,OAAAC,OAAA,GAAKoG,EAAI,CAAEQ,KAAM9J,GAAa0J,EAAU,CAAEjE,SAASsE,EAAAA,EAAAA,kBAAiBlM,KAAK8F,iBAAkB9F,KAAKmG,QAASxG,KACzGA,GAIN,KAGHwK,oBAAoB/I,EAAuB4C,GAAyC,IAAzBwH,EAAAD,UAAA9K,OAAA,QAAAyC,IAAAqI,UAAA,IAAAA,UAAA,GAC/D,MAAM,KAAEa,GAASpM,KAAKV,MACtB,OACIF,EAAAA,cAACqI,EAAAA,KAAIrC,OAAAC,OAAA,CAACoE,IAAKzF,GAAWoI,EAAI,CAAEhB,QAASI,GAAYxL,KAAK8D,gBACjD1C,EAAOzB,UAKZsL,YAAYoB,EAAe3B,EAA4B4B,EAAsB1D,GACjF,MAAM,aAAE2D,EAAY,SAAErF,EAAQ,kBAAEsF,EAAiB,kBAAErJ,EAAiB,uBAAEsJ,EAAsB,aAAE9J,GAAiB3C,KAAKV,MAC9GoN,GACD/J,IACAQ,GAAqBsJ,KACrBjL,EAAAA,gBAAgBC,YAAYzB,KAAKiD,MAAMX,iBACvCsG,EACC+D,GACDhK,GAAgB8J,GAA0BjL,EAAAA,gBAAgBC,YAAYzB,KAAKiD,MAAMX,iBAAmBsG,EACnGgE,EAAoB5M,KAAKR,aAAe,GAAKkN,EAAuBH,EAAcjH,UAAY,kBAEpG,OADAtF,KAAKR,aAAe,EAEhBJ,EAAAA,cAACqI,EAAAA,KAAIrC,OAAAC,OAAA,GAAKkH,EAAY,CAAEjH,UAAWsH,IAC/BxN,EAAAA,cAACqI,EAAAA,KAAIrC,OAAAC,OAAA,GACG6B,EAAQ,CACZ5B,UAAWkC,GAAAA,CACPN,EAAS5B,UACT+G,EACAK,GAAwB,gBACxBA,GACI1M,KAAKV,MAAMkG,OAAOgF,kBAClBxK,KAAKV,MAAMkG,OAAOgF,iBAAmB,GACrC,yBAGPE,GAEJgC,GACG1M,KAAKiD,MAAMX,eACXtC,KAAKiD,MAAMX,cAAcrC,KAAI0B,IAAI,IAAAkL,EAAA,OAC7BzN,EAAAA,cAACqI,EAAAA,KAAIrC,OAAAC,OAAA,GAAKmH,EAAiB,CAAE/C,IAAK9H,EAAKL,IAAKgE,UAAWkH,EAAmBlH,YACrEtF,KAAKiD,MAAMX,eAAiBtC,KAAKkE,kBAAkBvC,GACnDgL,GAA6B3M,KAAKmM,uBAAuBxK,EAAKJ,QAAkC,QAA3BsL,EAAElL,EAAKO,4BAAoB,IAAA2K,OAAA,EAAzBA,EAA2B1K,cAiGnH2B,gBACC9D,KAAKV,MAAMqD,cACZ3C,KAAKqC,SAAS,CAAEQ,gBAAYK,EAAWZ,cAAe,KAAMS,oBAAqB,MAjZ1E5D,EAAAyD,aAAuB,EAub1C,4DCzbY4T,wHAAZ,SAAYA,GACRA,EAAAA,EAAA,eACAA,EAAAA,EAAA,aACAA,EAAAA,EAAA,aACAA,EAAAA,EAAA,iBACAA,EAAAA,EAAA,eACAA,EAAAA,EAAA,0BACAA,EAAAA,EAAA,uBAPJ,CAAYA,IAAAA,EAAgB,KAsBrB,MAAMC,EAAmBA,CAACnX,EAAqCgD,EAAuBoU,KACzF,MAAMrH,GAAmBtK,EAAAA,EAAAA,kBAAiB,GAAGzC,IAAiBhD,EAAMqX,SAAS9W,QAAQmF,cAAcC,eAAeC,aAC5Gf,EAAgD,CAClDC,UAAW,CACPC,GAAI,CAAEC,EAAG,kBAAmBC,EAAG,EAAGC,EAAG,GACrCC,GAAI,CAAEH,EAAG,kBAAmBC,EAAG,EAAGC,EAAG,GACrCE,GAAI,CAAEJ,EAAG,kBAAmBC,EAAG,EAAGC,EAAG,GACrCG,GAAI,CAAEL,EAAG,kBAAmBC,EAAG,EAAGC,EAAG,IAEzCI,UAAU,GAEd,QAAyB1B,IAArBmM,EAAgC,CAAC,IAADuH,EAChC,MAAMC,EAAiC,CAAEvV,IAAK+N,GAC9C,OACIjQ,EAAAA,cAAC0X,EAAAA,GAAc1R,OAAAC,OAAA,CACXJ,eAAgB3F,EAAMqX,SAAS9W,QAAQmF,cAAcC,eACrDK,UAAU,sBACNuR,EAAS,CACbtR,aAAcjG,EAAMqX,SAAS9W,QAAQC,QAAQyF,aAC7CxD,cAA0D,QAA7C6U,EAAEtX,EAAMqX,SAASnR,OAAOC,6BAAqB,IAAAmR,EAAAA,EAAIzS,EAC9DuB,oBAAoB,OACpBC,KAAK,WACLpE,QAASmV,KAIrB,OAAO,2kBC/CJ,MAAMK,UAAmC3X,EAAAA,cAuB5CC,YAAmBC,GACfC,MAAMD,GArBO,KAAA0X,eAAyBR,EAAiBS,KAEnD,KAAAzX,aAAuBgX,EAAiBU,KAM/B,KAAAzI,UAAoB+H,EAAiB/H,UAIrC,KAAApN,iBAA0C,GAmG1C,KAAA8V,cAAgB,KAC7BnX,KAAKqC,UAAS+U,IAAa,CACvBvU,WAAY,EACZwU,WAAYD,EAAcC,eA2QjB,KAAAC,0BAA4B,CAACC,EAA4BjH,IAA0B,KAChG,MAAM,eAAEb,GAAmBzP,KAAKiD,MAC1ByM,EAAU,CAAE,CAAC6H,IAAWjH,GAC9BtQ,KAAKqC,SAAS,CAAEoN,eAAcpB,EAAAA,EAAA,GAAOoB,GAAmBC,MAmI3C,KAAAxO,qBAAuB,CAACsW,EAA6BpW,IAA0B,KAC5F,MAAMzB,EAAWyB,EAAOzB,SAAWyB,EAAOzB,SAAW,GAC/C0B,EAA0C,CAAC,CAAEC,IAAKkW,EAAqBjW,QAAS5B,IAGtF,GAAI6B,EAAAA,gBAAgBC,YAAYL,EAAOM,oBACnC,IAAK,MAAMC,KAAQP,EAAOM,mBAAoB,CAC1C,MAAM0B,EAAczB,EAAKC,MAAMN,IAC/BD,EAAiBW,KAAK,CAClBV,IAAK8B,EACL7B,QAASI,EAAKM,KACdC,qBAAsB,CAAEC,QAASR,EAAKQ,QAAQC,kBAI1DpC,KAAKqC,SAAS,CACVC,cAAed,EAAAA,gBAAgBC,YAAYJ,GAAoBA,EAAmB,CAAC,CAAEC,IAAK,aAUjF,KAAAkB,sBAAwB,CAACC,EAAqBC,IAAsB,KAC5E1C,KAAKiD,MAAMwU,cASZV,EAA2BnU,aAAc,EACzC5C,KAAKqC,SAAS,CACVQ,WAAYJ,EAAKK,GACjBC,oBAAqBN,EAAK9C,SAC1BqD,WAAYN,MAZhB1C,KAAKqC,SAAS,CACVQ,WAAYJ,EAAKK,GACjBE,WAAYN,IAEZ1C,KAAKV,MAAMqX,SAASxT,mBACpBnD,KAAKkB,qBAAqBuB,EAAKW,YAAcX,EAA7CzC,KAgBK,KAAAqD,cAAgB,IAAM,KACnC0T,EAA2BnU,aAAc,EACzC5C,KAAKqC,UAAS+U,IAAa,CAAOvU,WAAYuU,EAAcpU,gBAO/C,KAAAM,oBAAuBC,IAChCvD,KAAKwD,SAASC,UAAYzD,KAAKwD,SAASC,QAAQC,SAASH,EAAMI,UAC1D3D,KAAKiD,MAAMwU,aAGZzX,KAAKqC,SAAS,CAAEQ,gBAAYK,EAAWH,oBAAqB,GAAIsU,WAAW,IAF3ErX,KAAKqC,SAAS,CAAEQ,WAAY,EAAGE,oBAAqB,GAAIsU,WAAW,MAc9D,KAAAtT,uBAAyB,CAACC,EAAejB,EAA8BkB,KAE/E8S,EAA2BnU,aADL,IACoBoB,MAG1CC,IAAmBlB,IAGjBA,IAAwBkB,EAMlB,KAAAyT,cAAgB,KAAW,IAAAC,EACnC3X,KAAKiD,MAAMwU,aAGZzX,KAAKqC,SAAS,CAAEQ,gBAAYK,EAAWH,oBAAqB,GAAIsU,WAAW,IAF3ErX,KAAKqC,SAAS,CAAEQ,WAAY,EAAGE,oBAAqB,GAAIsU,WAAW,IAIjD,QAArBM,EAAA3X,KAAKwD,SAASC,eAAO,IAAAkU,GAArBA,EAAuB9Q,SAAS,GAAmBC,SAOvC,KAAA8H,aAAgBrL,IAC8D,IAADqU,EAAtFrU,EAAMsL,UAAY7O,KAAKyO,YAAczO,KAAKiD,MAAMwU,cAAgBzX,KAAKiD,MAAMoU,YAC3ErX,KAAKqC,SAAS,CAAEQ,WAAY,EAAGE,oBAAqB,GAAIsU,WAAW,IAC7C,QAArBO,EAAA5X,KAAKwD,SAASC,eAAO,IAAAmU,GAArBA,EAAuB/Q,SAAS,GAAmBC,UAO3C,KAAA+Q,sBAAwB,KACrC7X,KAAKqC,SAAS,CAAEoV,aAAczX,KAAKyX,gBA9lBnCzX,KAAKwD,SAAWpE,EAAAA,YAChBY,KAAK4F,YAAcxG,EAAAA,YACnB,MAAM,aAAE2I,GAAiB/H,KAAKV,MAAMqX,SACpC,GAAInV,EAAAA,gBAAgBC,YAAYsG,IAAiBvG,EAAAA,gBAAgBC,YAAYsG,EAAa,GAAGrI,SAAU,CACnG,MAAMgM,EAAc3D,EAAa,GAAGrI,QAAQ,GAAG0D,YAAc2E,EAAa,GAAGrI,QAAQ,GAAG0D,YAAc,GAChGzD,EAAWoI,EAAa,GAAGrI,QAAQ,GAAGC,SAAWoI,EAAa,GAAGrI,QAAQ,GAAGC,SAAW,GAC7FK,KAAKqB,iBAAmB,CAAC,CAAEC,IAAKoK,EAAanK,QAAS5B,IAGlD6B,EAAAA,gBAAgBC,YAAYsG,EAAa,GAAGrI,QAAQ,GAAGgC,qBACvDqG,EAAa,GAAGrI,QAAQ,GAAGgC,mBAAmBzB,KAAI0B,IAC9C,MAAMyB,EAAczB,EAAKC,MAAMN,IAM/B,OALAtB,KAAKqB,iBAAiBW,KAAK,CACvBV,IAAK8B,EACL7B,QAASI,EAAKM,KACdC,qBAAsB,CAAEC,QAASR,EAAKQ,QAAQC,kBAE3C,QAKnBpC,KAAKiD,MAAQ,CACTJ,WAAY,EACZE,oBAAqB,GACrBC,gBAAYE,EACZuM,eAAgB,GAChBgI,aAAczX,KAAKyX,aACnBnV,cAAetC,KAAKqB,iBACpBgW,WAAW,GAEfrX,KAAK8F,kBAAmBC,EAAAA,EAAAA,oBACpB/F,KAAKV,MAAMqX,SAAS9W,QAAQC,QAAQkG,kBACpChG,KAAKV,MAAMqX,SAAS1Q,aACpBjG,KAAKV,MAAMqX,SAASzQ,WAExBlG,KAAKmG,SAAUC,EAAAA,EAAAA,kBAAiB,QAASpG,KAAK8F,iBAAkB,GAAI,IACpE9F,KAAK6L,YAAaC,EAAAA,EAAAA,wBAAuB9L,KAAK8F,iBAAkB9F,KAAKmG,SAG/D,mBACN,MAAoG,QAA7F+L,EAAAA,EAAAA,UAAS,CAAE4F,QAASC,EAAAA,YAAYC,QAASnY,QAASG,KAAKV,MAAMqX,SAAS9W,QAAQC,UAGlFuG,oBACHrG,KAAKiY,mCAAoCzF,EAAAA,EAAAA,mBAAkB7J,OAAQ,SAAU3I,KAAK6X,uBAClFrR,SAASE,iBAAiB,UAAY1G,KAAK4O,cAA2C,GACtF5O,KAAK6X,wBACLrR,SAASC,KAAKC,iBAAiB,YAAa1G,KAAKsD,qBAG9CqD,qBAAkB,IAAAC,EACO,QAAxBA,EAAA5G,KAAK4F,YAAYnC,eAAO,IAAAmD,GAAxBA,EAA0BC,SAAS,IAAM7G,KAAKV,MAAMqX,SAAShU,cAC5D3C,KAAK4F,YAAYnC,QAAQoD,SAAS,GAAmBC,QAIvDC,uBACH4B,OAAO3B,oBAAoB,SAAUhH,KAAKiY,mCAAoC,GAC9EzR,SAASC,KAAKO,oBAAoB,YAAahH,KAAKsD,qBAAqB,GAGtE2D,SACHjH,KAAKR,aAAe,EAEpB,OACIJ,EAAAA,cAACqI,EAAAA,KAAI,CAACnC,UAAU,qBAAqBoC,IAAK1H,KAAKwD,UAC1CxD,KAAKiD,MAAMwU,aACRzX,KAAK6P,oBAELzQ,EAAAA,cAAAA,EAAAA,SAAA,KACIA,EAAAA,cAAC8L,EAAAA,OAAM9F,OAAAC,OAAA,CACHC,UAAU,sBACVsC,QAAS5H,KAAKmX,cAAa,gBAT7B,oBAWEe,MAAOlY,KAAKV,MAAMqX,SAASxO,UAAUgQ,mBAAkB,aAC3CnY,KAAKV,MAAMqX,SAASxO,UAAUgQ,oBACtCnY,KAAK6L,aAEZ7L,KAAKoY,wBAiBlBA,sBACJ,OACIhZ,EAAAA,cAACiZ,EAAAA,SAAQ,CAAC/S,UAAU,mCAAmCsK,OAAQ5P,KAAKiD,MAAMoU,WACrErX,KAAKiD,MAAMwU,aAAezX,KAAK6P,oBAAsB7P,KAAK8P,sBAK/DD,oBACJ,MAAM,SAAE3I,EAAQ,iBAAEC,EAAgB,2BAAEC,EAA0B,uBAAEC,EAAsB,WAAEC,GAAetH,KAAKV,MAAMqX,SAGlH,OADA3W,KAAKR,aAAe,EAEhBJ,EAAAA,cAACmI,EAAAA,OAAMnC,OAAAC,OAAA,GACCiC,EAAU,CACdhC,UAAWkC,GAAAA,CACPF,EAAWhC,UACXtF,KAAKiD,MAAMwU,mBAA0CvU,IAA1BlD,KAAKiD,MAAMJ,WAA2B,QAAU,YAG/EzD,EAAAA,cAACqI,EAAAA,KAAIrC,OAAAC,OAAA,GAAK6B,EAAQ,CAAES,SAAS,OACxB3H,KAAKiD,MAAMwU,mBAA0CvU,IAA1BlD,KAAKiD,MAAMJ,YACnCzD,EAAAA,cAACqI,EAAAA,KAAIrC,OAAAC,OAAA,GAAK+B,GACNhI,EAAAA,cAACqI,EAAAA,KAAIrC,OAAAC,OAAA,GAAK8B,EAAgB,CAAES,QAAS5H,KAAKqD,mBAC1CjE,EAAAA,cAACqI,EAAAA,KAAIrC,OAAAC,OAAA,GAAKgC,GAAyBrH,KAAKiD,MAAMF,sBAGrD/C,KAAK6H,mBAMdiI,qBACJ,MAAM,SAAE5I,EAAQ,WAAEI,GAAetH,KAAKV,MAAMqX,SAE5C,OACIvX,EAAAA,cAACmI,EAAAA,OAAMnC,OAAAC,OAAA,GAAKiC,EAAU,CAAEhC,UAAWkC,GAAAA,CAAWF,EAAWhC,UAAW,8BAChElG,EAAAA,cAACqI,EAAAA,KAAIrC,OAAAC,OAAA,GAAK6B,EAAQ,CAAES,SAAS,OACxB3H,KAAK6H,iBACNzI,EAAAA,cAAA,OAAKkG,UAAU,uBACXlG,EAAAA,cAAA,UAAQkG,UAAU,qBAAoB,aAAY,QAAQsC,QAAS5H,KAAK0X,mBAOpFrG,kBAAkB1P,GACtB,OAAIA,EAAKX,UAAYsX,EAAAA,iBAAiBC,mBAAmB5W,EAAKX,SACnDhB,KAAKkK,oBAAoBvI,GACxBA,EAAKX,QAGV,KAFIhB,KAAKmK,oBAAoBxI,GAKhCkG,iBACJ,MAAM,SAAEC,GAAa9H,KAAKV,MAAMqX,SAC1B5O,EAAgC/H,KAAKV,MAAMqX,SAAS5O,cACpD,WAAElF,GAAe7C,KAAKiD,MACtBoF,EAA8B,GAMpC,GAJI7G,EAAAA,gBAAgBC,YAAYsG,KAC5BA,EAAa,GAAGjF,GAAK,GAGrB9C,KAAKiD,MAAMwU,mBAA+BvU,IAAfL,GAA4BrB,EAAAA,gBAAgBC,YAAYsG,GAAe,CAClG,MAAMS,EAAWxI,KAAKwJ,qBAAgBtG,EAAW6E,GAE7CS,GACAH,EAAarG,KACT5C,EAAAA,cAACqI,EAAAA,KAAIrC,OAAAC,OAAA,CAACoE,IAAKjB,EAAS1F,IAAQgF,GACvB,IACA9H,KAAK0J,oBAAoBlB,GAAS,IAAG,WAKlD,IAAK,MAAOxE,EAAOrC,KAASoG,EAAayQ,UACrCnQ,EAAarG,KACT5C,EAAAA,cAACqI,EAAAA,KAAIrC,OAAAC,OAAA,CACDoE,IAAK9H,EAAKmB,IACNgF,EAAQ,CACZJ,IAAK1H,KAAK+D,uBAAuBC,EAAOhE,KAAKiD,MAAMF,oBAAqBpB,EAAKhC,UAAYK,KAAK4F,YAAc,OAE3G5F,KAAK0J,oBAAoB/H,KAM1C,OAAO0G,EAGHmB,gBAAgBiP,EAAuBC,GAC3C,IAAKA,EACD,OAAO,KAGX,IAAK,IAAI1U,EAAQ,EAAGA,GAAS0U,EAAKjY,OAAS+V,EAAiBmC,IAAK3U,IAAS,CACtE,MAAMrC,EAAsB+W,EAAKE,OAAO5U,IAExC,GAAIrC,EAAKmB,KAAO9C,KAAKiD,MAAMJ,WAMvB,OALKkU,EAA2BnU,YAG5B5C,KAAKqC,SAAS,CAAEW,WAAYyV,EAAc1V,oBAAqBpB,EAAKhC,WAFpEK,KAAKqC,SAAS,CAAEW,WAAYyV,IAIzB9W,EAEX,MAAMmI,EAAQ9J,KAAKwJ,gBAAgB7H,EAAKmB,GAAInB,EAAKjC,SACjD,GAAIoK,EACA,OAAOA,EAGf,OAAO,KAGHJ,oBAAoB3B,GACxB,OAAIvG,EAAAA,gBAAgBC,YAAYsG,EAAarI,SACrCM,KAAKiD,MAAMwU,mBAA0CvU,IAA1BlD,KAAKiD,MAAMJ,WAC/B7C,KAAKgK,eAAejC,EAAarI,QAASqI,EAAajF,IAAI,GAIlE1D,EAAAA,cAAAA,EAAAA,SAAA,KACKY,KAAKiK,sBAAsBlC,GAC3B/H,KAAKgK,eAAejC,EAAarI,QAASqI,EAAajF,KAGzDiF,EAAa/G,UAAYsX,EAAAA,iBAAiBC,mBAAmBxQ,EAAa/G,SAC1EhB,KAAKkK,oBAAoBnC,EAAcA,EAAajF,IACnDiF,EAAa/G,SAAahB,KAAKiD,MAAMwU,mBAA0CvU,IAA1BlD,KAAKiD,MAAMJ,WAIrE,KAHI7C,KAAKmK,oBAAoBpC,GAMhCiC,eAAe6O,EAAgChW,EAAqBiW,GAAmB,IAAAC,EAAAC,EAC3F,IAAIpP,EAAwCiP,EACxChW,IAAe2T,EAAiByC,WAChCrP,EAAWiP,EAAcrE,QAAOtU,GAAeA,EAAY4C,IAAM5C,EAAY4C,IAAMwO,EAAAA,EAAgBgE,UAGvG,MAAM,SAAExN,GAAa9H,KAAKV,MAAMqX,SAC1BuC,EAA0E,QAAlDH,EAAG/Y,KAAKV,MAAMqX,SAASnR,OAAO8E,4BAAoB,IAAAyO,GAAAA,EAC1ExO,EAAqE,QAA9CyO,EAAGhZ,KAAKV,MAAMqX,SAASnR,OAAOgF,wBAAgB,IAAAwO,EAAAA,EAAIxC,EAAiB2C,MAEhG,GAAItW,GAAc7C,KAAKiD,MAAMJ,aAAeA,EAExC,OADA7C,KAAKV,MAAMqX,SAAS9W,QAAQqG,UAAU6D,MAAM,gEACrC,KAGX,IAAKH,IAAapI,EAAAA,gBAAgBC,YAAYmI,GAE1C,OADA5J,KAAKV,MAAMqX,SAAS9W,QAAQqG,UAAU6D,MAAM,4DACrC,KAGX,IAAIU,EAAyB,GAC7B,MAAMC,EAAcd,EAAS3J,KAAI,CAACmB,EAAuB4C,KACrD,MAAM4G,EAAaxJ,EAAO1B,SAAW8B,EAAAA,gBAAgBC,YAAYL,EAAO1B,SACxE,IAAI8I,EAQA9I,EANA8I,EADAoC,GAAc5K,KAAKiD,MAAMwU,aACdzX,KAAKiK,sBAAsB7I,EAAQyB,EAAYmB,GACnDhE,KAAKR,eAAiBgX,EAAiBmC,KAAQ/N,EAG3C,KAFA5K,KAAKoZ,YAAYhY,EAAQ4C,GAKxC,MAAMqV,EACFzO,GAAcsO,GAA4BlZ,KAAKR,cAAgBsL,KAAKC,MAAMR,GAA2BiM,EAAiBmC,IAEtH/N,IAAe5K,KAAKiD,MAAMwU,eACtBzX,KAAKR,cAAgBgX,EAAiB8C,IACtC5Z,EAAUM,KAAKuZ,qBAAqBnY,GAC7BpB,KAAKR,cAAgBQ,KAAKgX,iBACjChX,KAAKR,eACLiL,EAAiB,SAASzK,KAAKR,aAAawL,aAC5CtL,EAAUM,KAAKgK,eAAe5I,EAAO1B,aAASwD,GAAW,KAI7DmW,GAAmBrZ,KAAKiD,MAAMwU,eAC9BzX,KAAKR,eACLiL,EAAiByO,EAA2B,SAASlZ,KAAKR,aAAawL,aAAe,GACtFtL,EAAUM,KAAKgK,eAAe5I,EAAO1B,QAAS0B,EAAO0B,IAAI,IAE7D,MAAM4I,EAActK,EAAOgC,YAAchC,EAAOgC,YAAc,GAC9D,OACIhE,EAAAA,cAACqI,EAAAA,KAAIrC,OAAAC,OAAA,GACGyC,EAAQ,CACZ2B,IAAKrI,EAAO0B,GACZkJ,YAAahM,KAAKR,eAAiBgX,EAAiBmC,KAAO3Y,KAAKkB,qBAAqBwK,EAAatK,GAClGkE,UAAWkC,GAAAA,CAAWM,EAASxC,UAAW+T,GAAmB,eAC7D3R,IAAK1H,KAAK+D,uBAAuBC,EAAOhE,KAAKiD,MAAMF,oBAAqB3B,EAAOzB,UAAYK,KAAK4F,YAAc,OAE7G4C,EACA9I,MAIb,OAAOM,KAAKiL,YAAYR,EAAgBC,EAAaoO,GAGjDM,YAAYhY,EAAuB4C,GACvC,IAAIwE,EAMJ,OAJIA,EADAxI,KAAKR,eAAiBgX,EAAiBmC,IAC5BvX,EAAOJ,QAAUhB,KAAKwZ,4BAA4BpY,EAAQ4C,GAAShE,KAAKmK,oBAAoB/I,GAE5FA,EAAOJ,QAAUhB,KAAKkK,oBAAoB9I,EAAQ4C,GAAShE,KAAKmK,oBAAoB/I,GAE5FoH,EAGH+Q,qBAAqB/Q,GAAuB,IAAAiR,EAChD,MAAMhP,EAAiB,SAASzK,KAAKR,aAAawL,aAC5CmF,EAAmB3H,EAAS7I,SAE5BgQ,OAAkCzM,IAArBiN,EAAiCA,EAAmB,GACjEE,EAFWrQ,KAAKiD,MAAMwM,eAGtBlF,EAAqE,QAA9CkP,EAAGzZ,KAAKV,MAAMqX,SAASnR,OAAOgF,wBAAgB,IAAAiP,EAAAA,EAAIjD,EAAiB2C,MAEhG,IAAI7I,GAAe,EACfD,EAAK7H,EAAS1F,MACdwN,GAAe,GAEnB,MAAMC,EAA2B,CAAEmJ,QAAS,EAAG9J,OAAQU,GAEvD,OACIlR,EAAAA,cAACoR,EAAAA,OAAM,CACHK,cAAeN,EACf9G,IAAKjB,EAAS1F,GACdwC,UAAWkC,GAAAA,CAAW,yBAA0BiD,GAChDkG,UAAU,sBACVG,WAAW,uBACXC,eAAe,QACfZ,iBAAkBR,EAClBiB,SAAU5Q,KAAKsX,0BAA0B9O,EAAS1F,GAAIwN,IAEtDlR,EAAAA,cAAA,WACKoJ,EAAS9I,QAASO,KAAKgR,GAChBzP,EAAAA,gBAAgBC,YAAYwP,EAAYvR,WACxCM,KAAKR,eACDQ,KAAKR,aAAe+K,GACbvK,KAAKuZ,qBAAqBtI,GAGlCjR,KAAKqR,kBAAkBJ,OAmB1ChH,sBAAsB7I,EAAuByB,EAAqBmB,GACtE,OACI5E,EAAAA,cAACqI,EAAAA,KAAIrC,OAAAC,OAAA,CACDoE,IAAKzF,GACDhE,KAAKV,MAAMqX,SAASzL,OAAM,CAC9BtD,QAAS5H,KAAKwC,sBAAsBpB,EAAQyB,GAAW,kBACtC7C,KAAKiD,MAAMJ,YAAc7C,KAAKiD,MAAMJ,aAAezB,EAAO0B,IAAG,mBAC5D9C,KAAKiD,MAAMJ,YAAc7C,KAAKiD,MAAMJ,aAAezB,EAAO0B,IAAG,cAClED,EAAU,aACX7C,KAAKiD,MAAMwU,aAAerW,EAAOsP,eAAYxN,IAExD9B,EAAOzB,UAKZuK,oBAAoB9I,EAAuB4C,GAC/C,MAAM,KAAEyH,GAASzL,KAAKV,MAAMqX,SACtBhX,EAAWyB,EAAOzB,SAAWyB,EAAOzB,SAAW,GACrDK,KAAKmG,QAAQwF,cAAcC,MAAQjM,EACnC,MAAMkM,GAAaC,EAAAA,EAAAA,wBAAuB9L,KAAK8F,iBAAkB9F,KAAKmG,SACtE,OACI/G,EAAAA,cAACqI,EAAAA,KAAIrC,OAAAC,OAAA,GACGoG,EAAI,CACRhC,IAAKzF,EACLiI,KAAM7K,EAAOJ,SACT6K,EAAU,CACdlI,OAAQvC,EAAO2K,iBAAmB,cAAW7I,EAC7C0E,SAASsE,EAAAA,EAAAA,kBAAiBlM,KAAK8F,iBAAkB9F,KAAKmG,QAASxG,KAE9DyB,EAAOzB,UAKZ6Z,4BAA4BpY,EAAuB4C,GAA6C,IAA7B2V,IAAApO,UAAA9K,OAAA,QAAAyC,IAAAqI,UAAA,KAAAA,UAAA,GACvE,MAAM,KAAEE,GAASzL,KAAKV,MAAMqX,SACtBhX,EAAWyB,EAAOzB,SAAWyB,EAAOzB,SAAW,GAC/C+L,EAActK,EAAOgC,YAAchC,EAAOgC,YAAc,GAC9DpD,KAAKmG,QAAQwF,cAAcC,MAAQjM,EACnC,MAAMkM,GAAaC,EAAAA,EAAAA,wBAAuB9L,KAAK8F,iBAAkB9F,KAAKmG,SACtE,OACI/G,EAAAA,cAACqI,EAAAA,KAAIrC,OAAAC,OAAA,GACGoG,EAAI,CACRhC,IAAKzF,EACLgI,YAAa2N,GAAiB3Z,KAAKkB,qBAAqBwK,EAAatK,GACrE6K,KAAM7K,EAAOJ,SACT6K,EAAU,CACdjE,SAASsE,EAAAA,EAAAA,kBAAiBlM,KAAK8F,iBAAkB9F,KAAKmG,QAASxG,KAE9DyB,EAAOzB,UAKZwM,uBAAuBxM,EAAmBwC,GAC9C,MAAM,KAAEsJ,GAASzL,KAAKV,MAAMqX,SAC5B3W,KAAKmG,QAAQwF,cAAcC,MAAQjM,EACnC,MAAMkM,GAAaC,EAAAA,EAAAA,wBAAuB9L,KAAK8F,iBAAkB9F,KAAKmG,SACtE,OAAIxG,GAAYwC,EAER/C,EAAAA,cAACqI,EAAAA,KAAIrC,OAAAC,OAAA,GAAKoG,EAAI,CAAEQ,KAAM9J,GAAa0J,EAAU,CAAEjE,SAASsE,EAAAA,EAAAA,kBAAiBlM,KAAK8F,iBAAkB9F,KAAKmG,QAASxG,KACzGA,GAIN,KAGHwK,oBAAoB/I,EAAuB4C,GAC/C,MAAM,KAAEoI,GAASpM,KAAKV,MAAMqX,SAC5B,OACIvX,EAAAA,cAACqI,EAAAA,KAAIrC,OAAAC,OAAA,CAACoE,IAAKzF,GAAWoI,GACjBhL,EAAOzB,UAKZsL,YAAYoB,EAAe3B,EAA4BkP,GAAmB,IAAAC,EAC9E,MAAM,aAAEtN,EAAY,SAAErF,EAAQ,kBAAEsF,EAAiB,kBAAErJ,EAAiB,uBAAEsJ,GAA2BzM,KAAKV,MAAMqX,SACtGmD,GACD9Z,KAAKiD,MAAMwU,cACZtU,GAC6B,OAA7BnD,KAAKiD,MAAMX,oBACkBY,IAA7BlD,KAAKiD,MAAMX,gBACVsX,EACCG,GACD/Z,KAAKiD,MAAMwU,cAAgBhL,GAA0BjL,EAAAA,gBAAgBC,YAAYzB,KAAKiD,MAAMX,iBAAmBsX,EAC9GI,EACFha,KAAKR,aAAegX,EAAiB8C,KAAOQ,EAAyBvN,EAAcjH,UAAY,kBACnGtF,KAAKR,aAAegX,EAAiBmC,IACrC,MAAMsB,EACFH,GACA9Z,KAAKV,MAAMqX,SAASnR,OAAOgF,kBAC3BxK,KAAKV,MAAMqX,SAASnR,OAAOgF,iBAAmBgM,EAAiB8C,KAC/D,sBAEEY,EAAyC,QAA3BL,EAAG7Z,KAAKiD,MAAMX,qBAAa,IAAAuX,OAAA,EAAxBA,EAA0BrF,QAAO5S,IAAU0W,EAAAA,iBAAiBC,mBAAmB3W,EAAMN,OACtG6Y,EAAqBD,MAAAA,OAAc,EAAdA,EAAgBja,KAAI0B,GAAQA,EAAKL,MAAK8Y,KAAK,KACtE,OACIhb,EAAAA,cAACqI,EAAAA,KAAIrC,OAAAC,OAAA,GAAKkH,EAAY,CAAEjH,UAAW0U,IAC/B5a,EAAAA,cAACqI,EAAAA,KAAIrC,OAAAC,OAAA,GACG6B,EAAQ,CACZ5B,UAAWkC,GAAAA,CAAWN,EAAS5B,UAAW+G,EAAOyN,GAA0B,gBAAiBG,KAE3FvP,GAELtL,EAAAA,cAAA,OAAKkG,UAAU,2BAA2BmE,IAAK0Q,GAC1CL,GACGtY,EAAAA,gBAAgBC,YAAYyY,IAC5BA,EAAeja,KAAI0B,IAAI,IAAA0Y,EAAAxN,EAAA,OACnBzN,EAAAA,cAACqI,EAAAA,KAAIrC,OAAAC,OAAA,GAAKmH,EAAiB,CAAElH,UAAWkH,EAAmBlH,UAAWmE,IAAK9H,EAAKL,MAC3EmV,EAAiBzW,KAAKV,MAAe,QAAV+a,EAAE1Y,EAAKL,WAAG,IAAA+Y,EAAAA,EAAI,GAAI1Y,EAAKJ,QAASyJ,YAC3D+O,GACG/Z,KAAKmM,uBAAuBxK,EAAKJ,QAAkC,QAA3BsL,EAAElL,EAAKO,4BAAoB,IAAA2K,OAAA,EAAzBA,EAA2B1K,gBAvftF4U,EAAAnU,aAAuB,GAgE5ByT,EAAAA,EAAAA,IAAA,CAATE,EAAAA,IAAQ,iCA0jBb,+kBC3nBO,MAAM+D,UAAkClb,EAAAA,cAyB3CC,YAAmBC,GACfC,MAAMD,GAvBO,KAAA0X,eAAyBR,EAAiBS,KAEnD,KAAAzX,aAAuBgX,EAAiBU,KAM/B,KAAAzI,UAAoB+H,EAAiB/H,UAIrC,KAAApN,iBAA0C,GAEnD,KAAA0G,aAAgC,GAoGvB,KAAAoP,cAAgB,KAC7BnX,KAAKqC,UAAS+U,IAAa,CACvBvU,WAAY2T,EAAiByC,SAC7B5B,WAAYD,EAAcC,eAwTjB,KAAAC,0BAA4B,CAACC,EAA4BjH,IAA0B,KAChG,MAAM,eAAEb,GAAmBzP,KAAKiD,MAC1ByM,EAAU,CAAE,CAAC6H,IAAWjH,GAC9BtQ,KAAKqC,SAAS,CAAEoN,eAAcpB,EAAAA,EAAA,GAAOoB,GAAmBC,MAwI3C,KAAAxO,qBAAuB,CAACsW,EAA6BpW,IAA0B,KAC5F,MAAMzB,EAAWyB,EAAOzB,SAAWyB,EAAOzB,SAAW,GAC/C0B,EAA0C,CAAC,CAAEC,IAAKkW,EAAqBjW,QAAS5B,IAGtF,GAAI6B,EAAAA,gBAAgBC,YAAYL,EAAOM,oBACnC,IAAK,MAAMC,KAAQP,EAAOM,mBAAoB,CAC1C,MAAM0B,EAAczB,EAAKC,MAAMN,IAC/BD,EAAiBW,KAAK,CAClBV,IAAK8B,EACL7B,QAASI,EAAKM,KACdC,qBAAsB,CAAEC,QAASR,EAAKQ,QAAQC,kBAI1DpC,KAAKqC,SAAS,CACVC,cAAed,EAAAA,gBAAgBC,YAAYJ,GAAoBA,EAAmB,CAAC,CAAEC,IAAK,aAUjF,KAAAkB,sBAAwB,CAACC,EAAqBC,IAAsB,KAC5E1C,KAAKiD,MAAMwU,cASZ6C,EAA0B1X,aAAc,EACxC5C,KAAKqC,SAAS,CACVQ,WAAYJ,EAAKK,GACjBC,oBAAqBN,EAAK9C,SAC1BqD,WAAYN,MAZhB1C,KAAKqC,SAAS,CACVQ,WAAYJ,EAAKK,GACjBE,WAAYN,IAEZ1C,KAAKV,MAAMqX,SAASxT,mBACpBnD,KAAKkB,qBAAqBuB,EAAKW,YAAcX,EAA7CzC,KAgBK,KAAAqD,cAAgB,IAAM,KACnCiX,EAA0B1X,aAAc,EACxC5C,KAAKqC,UAAS+U,IAAa,CAAOvU,WAAYuU,EAAcpU,gBAO/C,KAAAM,oBAAuBC,IAChCvD,KAAKwD,SAASC,UAAYzD,KAAKwD,SAASC,QAAQC,SAASH,EAAMI,UAC1D3D,KAAKiD,MAAMwU,aAGZzX,KAAKqC,SAAS,CAAEQ,gBAAYK,EAAWH,oBAAqB,GAAIsU,WAAW,IAF3ErX,KAAKqC,SAAS,CAAEQ,WAAY2T,EAAiByC,SAAUlW,oBAAqB,GAAIsU,WAAW,MAUtF,KAAAkD,gBAAkB,KAC/B,MAAM,aAAExS,GAAiB/H,KAAKV,MAAMqX,SAEoE,IAAD6D,GADvGxa,KAAK+H,aAAeA,EAChBvG,EAAAA,gBAAgBC,YAAYsG,IAAiBvG,EAAAA,gBAAgBC,YAAYsG,EAAa,GAAGrI,YAC7D,QAA5B8a,EAAAxa,KAAK+H,aAAa,GAAGrI,eAAO,IAAA8a,GAA5BA,EAA8Bva,KAAI0B,IAC9B,MAAM8Y,EAAgB,GAOtB,OANArV,OAAOC,OAAOoV,EAAe,CAAErX,YAAazB,EAAKyB,cACjDgC,OAAOC,OAAOoV,EAAe,CAAE9a,SAAUK,KAAKV,MAAMqX,SAASxO,UAAU8N,sBACvE7Q,OAAOC,OAAOoV,EAAe,CAAEzZ,QAASW,EAAKX,UACzCQ,EAAAA,gBAAgBC,YAAYE,EAAKjC,UAAYiC,EAAKpB,aAAegR,EAAAA,EAAW+D,QAC5E3T,EAAKjC,QAAQgb,QAAQD,GAElB9Y,OAYF,KAAAoC,uBAAyB,CAACC,EAAejB,EAA8BkB,KAE/EqW,EAA0B1X,aADJ,IACmBoB,MAGzCC,IAAmBlB,IAGjBA,IAAwBkB,EAMlB,KAAAyT,cAAgB,KACxB1X,KAAKiD,MAAMwU,aAGZzX,KAAKqC,SAAS,CAAEQ,gBAAYK,EAAWH,oBAAqB,GAAIsU,WAAW,IAF3ErX,KAAKqC,SAAS,CAAEQ,WAAY2T,EAAiByC,SAAUlW,oBAAqB,GAAIsU,WAAW,KAUlF,KAAAzI,aAAgBrL,IACzBA,EAAMsL,UAAY7O,KAAKyO,YAAczO,KAAKiD,MAAMwU,cAAgBzX,KAAKiD,MAAMoU,WAC3ErX,KAAKqC,SAAS,CAAEQ,WAAY2T,EAAiByC,SAAUlW,oBAAqB,GAAIsU,WAAW,KAOlF,KAAAQ,sBAAwB,KACrC7X,KAAKqC,SAAS,CAAEoV,aAAczX,KAAKyX,gBAnqBnCzX,KAAKwD,SAAWpE,EAAAA,YAChBY,KAAK4F,YAAcxG,EAAAA,YACnB,MAAM,aAAE2I,GAAiB/H,KAAKV,MAAMqX,SACpC,GAAInV,EAAAA,gBAAgBC,YAAYsG,IAAiBvG,EAAAA,gBAAgBC,YAAYsG,EAAa,GAAGrI,SAAU,CACnG,MAAMgM,EAAc3D,EAAa,GAAGrI,QAAQ,GAAG0D,YAAc2E,EAAa,GAAGrI,QAAQ,GAAG0D,YAAc,GAChGzD,EAAWoI,EAAa,GAAGrI,QAAQ,GAAGC,SAAWoI,EAAa,GAAGrI,QAAQ,GAAGC,SAAW,GAC7FK,KAAKqB,iBAAmB,CAAC,CAAEC,IAAKoK,EAAanK,QAAS5B,IAGlD6B,EAAAA,gBAAgBC,YAAYsG,EAAa,GAAGrI,QAAQ,GAAGgC,qBACvDqG,EAAa,GAAGrI,QAAQ,GAAGgC,mBAAmBzB,KAAI0B,IAC9C,MAAMyB,EAAczB,EAAKC,MAAMN,IAM/B,OALAtB,KAAKqB,iBAAiBW,KAAK,CACvBV,IAAK8B,EACL7B,QAASI,EAAKM,KACdC,qBAAsB,CAAEC,QAASR,EAAKQ,QAAQC,kBAE3C,QAInBpC,KAAKiD,MAAQ,CACTJ,WAAY2T,EAAiByC,SAC7BlW,oBAAqB,GACrBC,gBAAYE,EACZuM,eAAgB,GAChBgI,aAAczX,KAAKyX,aACnBnV,cAAetC,KAAKqB,iBACpBgW,WAAW,GAGfrX,KAAK8F,kBAAmBC,EAAAA,EAAAA,oBACpB/F,KAAKV,MAAMqX,SAAS9W,QAAQC,QAAQkG,kBACpChG,KAAKV,MAAMqX,SAAS1Q,aACpBjG,KAAKV,MAAMqX,SAASzQ,WAExBlG,KAAKmG,SAAUC,EAAAA,EAAAA,kBAAiB,QAASpG,KAAK8F,iBAAkB,GAAI,IACpE9F,KAAK6L,YAAaC,EAAAA,EAAAA,wBAAuB9L,KAAK8F,iBAAkB9F,KAAKmG,SAG/D,mBACN,MAAoG,QAA7F+L,EAAAA,EAAAA,UAAS,CAAE4F,QAASC,EAAAA,YAAYC,QAASnY,QAASG,KAAKV,MAAMqX,SAAS9W,QAAQC,UAGlFuG,oBACHrG,KAAKiY,mCAAoCzF,EAAAA,EAAAA,mBAAkB7J,OAAQ,SAAU3I,KAAK6X,uBAClFrR,SAASE,iBAAiB,UAAY1G,KAAK4O,cAA2C,GACtF5O,KAAK6X,wBACLrR,SAASC,KAAKC,iBAAiB,YAAa1G,KAAKsD,qBACjDtD,KAAKua,kBAGF5T,qBAAkB,IAAAC,EACO,QAAxBA,EAAA5G,KAAK4F,YAAYnC,eAAO,IAAAmD,GAAxBA,EAA0BC,SAAS,IAAM7G,KAAKV,MAAMqX,SAAShU,cAC5D3C,KAAK4F,YAAYnC,QAAQoD,SAAS,GAAmBC,QAIvDC,uBACH4B,OAAO3B,oBAAoB,SAAUhH,KAAKiY,mCAAoC,GAC9EzR,SAASC,KAAKO,oBAAoB,YAAahH,KAAKsD,qBAAqB,GAGtE2D,SACHjH,KAAKR,aAAegX,EAAiBmC,IAErC,OACIvZ,EAAAA,cAACqI,EAAAA,KAAI,CAACnC,UAAU,qBAAqBoC,IAAK1H,KAAKwD,UAC1CxD,KAAKiD,MAAMwU,aACRzX,KAAK6P,oBAELzQ,EAAAA,cAAAA,EAAAA,SAAA,KACIA,EAAAA,cAAC8L,EAAAA,OAAM9F,OAAAC,OAAA,CACHC,UAAU,sBACVsC,QAAS5H,KAAKmX,cAAa,gBAT7B,oBAWEe,MAAOlY,KAAKV,MAAMqX,SAASxO,UAAUgQ,mBAAkB,aAC3CnY,KAAKV,MAAMqX,SAASxO,UAAUgQ,oBACtCnY,KAAK6L,aAEZ7L,KAAKoY,wBAiBlBA,sBACJ,OACIhZ,EAAAA,cAACiZ,EAAAA,SAAQ,CAAC/S,UAAU,mCAAmCsK,OAAQ5P,KAAKiD,MAAMoU,WACrErX,KAAKiD,MAAMwU,aAAezX,KAAK6P,oBAAsB7P,KAAK8P,sBAK/DD,oBACJ,MAAM,iBAAE1I,EAAgB,2BAAEC,EAA0B,uBAAEC,EAAsB,WAAEC,GAAetH,KAAKV,MAAMqX,SAGxG,OADA3W,KAAKR,aAAegX,EAAiBmC,IAEjCvZ,EAAAA,cAACmI,EAAAA,OAAMnC,OAAAC,OAAA,GACCiC,EAAU,CACdhC,UAAWkC,GAAAA,CACPF,EAAWhC,UACXtF,KAAKiD,MAAMwU,mBAA0CvU,IAA1BlD,KAAKiD,MAAMJ,WAA2B,QAAU,YAG/EzD,EAAAA,cAACqI,EAAAA,KAAIrC,OAAAC,OAAA,GAAKrF,KAAKV,MAAMqX,SAASzP,SAAQ,CAAES,SAAS,OAC5C3H,KAAKiD,MAAMwU,mBAA0CvU,IAA1BlD,KAAKiD,MAAMJ,YACnCzD,EAAAA,cAACqI,EAAAA,KAAIrC,OAAAC,OAAA,GAAK+B,GACNhI,EAAAA,cAACqI,EAAAA,KAAIrC,OAAAC,OAAA,GAAK8B,EAAgB,CAAES,QAAS5H,KAAKqD,mBAC1CjE,EAAAA,cAACqI,EAAAA,KAAIrC,OAAAC,OAAA,GAAKgC,GAAyBrH,KAAKiD,MAAMF,sBAGrD/C,KAAK6H,mBAMdiI,qBACJ,MAAM,WAAExI,GAAetH,KAAKV,MAAMqX,SAClC,OACIvX,EAAAA,cAACmI,EAAAA,OAAMnC,OAAAC,OAAA,GAAKiC,EAAU,CAAEhC,UAAWkC,GAAAA,CAAWF,EAAWhC,aACrDlG,EAAAA,cAACqI,EAAAA,KAAIrC,OAAAC,OAAA,GAAKrF,KAAKV,MAAMqX,SAASzP,SAAQ,CAAES,SAAS,OAC5C3H,KAAK6H,iBACNzI,EAAAA,cAAA,OAAKkG,UAAU,uBACXlG,EAAAA,cAAA,UAAQkG,UAAU,qBAAoB,aAAY,QAAQsC,QAAS5H,KAAK0X,mBAOpFrG,kBAAkB1P,GACtB,OAAIA,EAAKX,UAAYsX,EAAAA,iBAAiBC,mBAAmB5W,EAAKX,SACnDhB,KAAKkK,oBAAoBvI,GACxBA,EAAKX,QAGV,KAFIhB,KAAKmK,oBAAoBxI,GAKhCkG,iBACJ,MAAM,SAAEC,GAAa9H,KAAKV,MAAMqX,SAChC,IAAI5O,EAAgC,GAEhCA,EADA/H,KAAKiD,MAAMwU,aACIzX,KAAK+H,aAEL/H,KAAKV,MAAMqX,SAAS5O,aAEvC,MAAM,WAAElF,GAAe7C,KAAKiD,MACtBoF,EAA8B,GACpC,IAAIsS,EAA2C,GAC3CC,EAAkD,GACtD,MAAMC,EAAiBC,KAAKC,MAAMD,KAAKE,UAAUjT,IAEjD,IAAK,MAAMpG,KAAQkZ,EACfD,EAAqBjZ,EAAKjC,QAAS8U,QAAOtU,GAAeA,EAAY4C,IAAM5C,EAAY4C,IAAMwO,EAAAA,EAAgBgE,SAC7G3T,EAAKjC,QAAUkb,EAGnB,IAAK,MAAMjZ,KAAQoG,EACf4S,EAAchZ,EAAKjC,QAAS8U,QAAOtU,GAAeA,EAAY4C,IAAM5C,EAAY4C,GAAKwO,EAAAA,EAAgBgE,SAGzG,GAAItV,KAAKiD,MAAMwU,mBAA+BvU,IAAfL,GAA4BrB,EAAAA,gBAAgBC,YAAYsG,GAAe,CAClG,IAAIS,EAAiC,GACrC,IAAK,MAAMe,KAAiBxB,EAAc,CACtC,GAAIwB,EAAczG,KAAOD,EAAY,CACjC2F,EAAWe,EACN+Q,EAA0B1X,YAK3B5C,KAAKqC,SAAS,CACVW,gBAAYE,EACZH,oBAAqBwG,EAAc5J,WANvCK,KAAKqC,SAAS,CACVW,gBAAYE,IAQpB,MAGJ,GADAsF,EAAWxI,KAAKwJ,gBAAgBD,GAC5Bf,GAAYA,EAAS1F,KAAOD,EAC5B,MAIJ2F,GACAH,EAAarG,KACT5C,EAAAA,cAACqI,EAAAA,KAAIrC,OAAAC,OAAA,CAACoE,IAAKjB,EAAS1F,IAAQgF,GACvB,IACA9H,KAAK0J,oBAAoBlB,GAAS,IAAG,UAI/C,CACH,IAAK,MAAOxE,EAAOrC,KAASkZ,EAAerC,UACvCnQ,EAAarG,KACT5C,EAAAA,cAACqI,EAAAA,KAAIrC,OAAAC,OAAA,CACDoE,IAAK9H,EAAKmB,IACNgF,EAAQ,CACZJ,IAAK1H,KAAK+D,uBAAuBC,EAAOhE,KAAKiD,MAAMF,oBAAqBpB,EAAKhC,UAAYK,KAAK4F,YAAc,OAE3G5F,KAAK0J,oBAAoB/H,KAKtC,IAAK,MAAOqC,EAAOrC,KAASgZ,EAAYnC,UACpCnQ,EAAarG,KACT5C,EAAAA,cAACqI,EAAAA,KAAIrC,OAAAC,OAAA,CACDoE,IAAK9H,EAAKmB,IACNgF,EAAQ,CACZJ,IAAK1H,KAAK+D,uBAAuBC,EAAOhE,KAAKiD,MAAMF,oBAAqBpB,EAAKhC,UAAYK,KAAK4F,YAAc,OAE3G5F,KAAK0J,oBAAoB/H,KAM1C,OAAO0G,EAGHmB,gBAAgB7H,GACpB,MAAMiI,EAAWjI,MAAAA,OAAI,EAAJA,EAAMjC,QACvB,GAAIkK,GAAYpI,EAAAA,gBAAgBC,YAAYmI,GACxC,IAAK,IAAI5F,EAAQ,EAAGA,GAAS4F,EAASnJ,OAAS+V,EAAiBmC,IAAK3U,IAAS,CAC1E,MAAMtE,EAAyBkK,EAASgP,OAAO5U,IAC/C,IAAIyU,EAAe9W,MAAAA,OAAI,EAAJA,EAAMmB,GAEzB,GAAIpD,EAAQoD,KAAO9C,KAAKiD,MAAMJ,WAU1B,OATI4V,IAAiBjC,EAAiByC,UAAYvZ,EAAQoD,GAAMwO,EAAAA,EAAgBgE,SAC5EmD,OAAevV,GAGdoX,EAA0B1X,YAG3B5C,KAAKqC,SAAS,CAAEW,WAAYyV,EAAc1V,oBAAqBrD,EAAQC,WAFvEK,KAAKqC,SAAS,CAAEW,WAAYyV,IAIzB/Y,EAEX,MAAMoK,EAAQ9J,KAAKwJ,gBAAgB9J,GACnC,GAAIoK,EACA,OAAOA,EAInB,OAAO,KAGHJ,oBAAoB3B,GACxB,OAAIvG,EAAAA,gBAAgBC,YAAYsG,EAAarI,SACrCM,KAAKiD,MAAMwU,mBAA0CvU,IAA1BlD,KAAKiD,MAAMJ,WAC/B7C,KAAKgK,eAAejC,EAAarI,QAASqI,EAAajF,IAAI,GAGlE1D,EAAAA,cAAAA,EAAAA,SAAA,KACKY,KAAKiK,sBAAsBlC,GAC3B/H,KAAKgK,eAAejC,EAAarI,QAASqI,EAAajF,KAGzDiF,EAAa/G,UAAYsX,EAAAA,iBAAiBC,mBAAmBxQ,EAAa/G,SAC1EhB,KAAKkK,oBAAoBnC,EAAcA,EAAajF,IACnDiF,EAAa/G,QAIlB,KAHIhB,KAAKmK,oBAAoBpC,GAMhCiC,eAAe6O,EAAgChW,EAAqBiW,GAAmB,IAAAC,EAAAC,EAC3F,IAAIpP,EAAwCiP,EACxChW,IAAe2T,EAAiByC,WAChCrP,EAAWiP,EAAcrE,QAAOtU,GAAeA,EAAY4C,IAAM5C,EAAY4C,IAAMwO,EAAAA,EAAgBgE,UAGvG,MAAM,SAAExN,GAAa9H,KAAKV,MAAMqX,SAC1BuC,EAA0E,QAAlDH,EAAG/Y,KAAKV,MAAMqX,SAASnR,OAAO8E,4BAAoB,IAAAyO,GAAAA,EAC1ExO,EAAqE,QAA9CyO,EAAGhZ,KAAKV,MAAMqX,SAASnR,OAAOgF,wBAAgB,IAAAwO,EAAAA,EAAIxC,EAAiB2C,MAEhG,GAAItW,GAAc7C,KAAKiD,MAAMJ,aAAeA,EAExC,OADA7C,KAAKV,MAAMqX,SAAS9W,QAAQqG,UAAU6D,MAAM,gEACrC,KAGX,IAAKH,IAAapI,EAAAA,gBAAgBC,YAAYmI,GAE1C,OADA5J,KAAKV,MAAMqX,SAAS9W,QAAQqG,UAAU6D,MAAM,4DACrC,KAGX,IAAIU,EAAyB,GAC7B,MAAMC,EAAcd,EAAS3J,KAAI,CAACmB,EAAuB4C,KACrD,MAAM4G,EAAaxJ,EAAO1B,SAAW8B,EAAAA,gBAAgBC,YAAYL,EAAO1B,SACxE,IAAI8I,EAQA9I,EANA8I,EADAoC,GAAc5K,KAAKiD,MAAMwU,aACdzX,KAAKiK,sBAAsB7I,EAAQyB,EAAYmB,GACnDhE,KAAKR,eAAiBgX,EAAiBmC,KAAQ/N,EAG3C,KAFA5K,KAAKoZ,YAAYhY,EAAQ4C,GAKxC,MAAMqV,EACFzO,GAAcsO,GAA4BlZ,KAAKR,cAAgBsL,KAAKC,MAAMR,GAA2BiM,EAAiBmC,IAEtH/N,IAAe5K,KAAKiD,MAAMwU,eACtBzX,KAAKR,cAAgBgX,EAAiB8C,IACtC5Z,EAAUM,KAAKuZ,qBAAqBnY,GAC7BpB,KAAKR,cAAgBQ,KAAKgX,eAAiBR,EAAiBmC,MACnE3Y,KAAKR,eACLiL,EAAiB,SAASzK,KAAKR,aAAawL,aAC5CtL,EAAUM,KAAKgK,eAAe5I,EAAO1B,aAASwD,GAAW,KAG7DmW,GAAmBrZ,KAAKiD,MAAMwU,eAC9BzX,KAAKR,eACLiL,EAAiByO,EAA2B,SAASlZ,KAAKR,aAAawL,aAAe,GACtFtL,EAAUM,KAAKgK,eAAe5I,EAAO1B,QAAS0B,EAAO0B,IAAI,IAE7D,MAAM4I,EAActK,EAAOgC,YAAchC,EAAOgC,YAAc,GAC9D,OACIhE,EAAAA,cAACqI,EAAAA,KAAIrC,OAAAC,OAAA,GACGyC,EAAQ,CACZ2B,IAAKrI,EAAO0B,GACZkJ,YAAahM,KAAKR,eAAiBgX,EAAiBmC,KAAO3Y,KAAKkB,qBAAqBwK,EAAatK,GAClGkE,UAAWkC,GAAAA,CAAWM,EAASxC,UAAW+T,GAAmB,eAC7D3R,IAAK1H,KAAK+D,uBAAuBC,EAAOhE,KAAKiD,MAAMF,oBAAqB3B,EAAOzB,UAAYK,KAAK4F,YAAc,OAE7G4C,EACA9I,MAIb,OAAOM,KAAKiL,YAAYR,EAAgBC,EAAaoO,GAGjDM,YAAYhY,EAAuB4C,GACvC,IAAIwE,EAMJ,OAJIA,EADAxI,KAAKR,eAAiBgX,EAAiBmC,IAC5BvX,EAAOJ,QAAUhB,KAAKwZ,4BAA4BpY,EAAQ4C,GAAShE,KAAKmK,oBAAoB/I,GAE5FA,EAAOJ,QAAUhB,KAAKkK,oBAAoB9I,EAAQ4C,GAAShE,KAAKmK,oBAAoB/I,GAE5FoH,EAGH+Q,qBAAqB/Q,GAAuB,IAAAiR,EAChD,MAAMhP,EAAiB,SAASzK,KAAKR,aAAawL,aAC5CmF,EAAmB3H,EAAS7I,SAE5BgQ,OAAkCzM,IAArBiN,EAAiCA,EAAmB,GACjEE,EAFWrQ,KAAKiD,MAAMwM,eAGtBlF,EAAqE,QAA9CkP,EAAGzZ,KAAKV,MAAMqX,SAASnR,OAAOgF,wBAAgB,IAAAiP,EAAAA,EAAIjD,EAAiB2C,MAEhG,IAAI7I,GAAe,EACfD,EAAK7H,EAAS1F,MACdwN,GAAe,GAEnB,MAAMC,EAA2B,CAAEmJ,QAAS,EAAG9J,OAAQU,GACvD,OACIlR,EAAAA,cAACoR,EAAAA,OAAM,CACHK,cAAeN,EACf9G,IAAKjB,EAAS1F,GACdwC,UAAWkC,GAAAA,CAAW,yBAA0BiD,GAChDkG,UAAU,sBACVG,WAAW,uBACXC,eAAe,QACfZ,iBAAkBR,EAClBiB,SAAU5Q,KAAKsX,0BAA0B9O,EAAS1F,GAAIwN,IAEtDlR,EAAAA,cAAA,WACKoJ,EAAS9I,QAASO,KAAKgR,GAChBzP,EAAAA,gBAAgBC,YAAYwP,EAAYvR,WACxCM,KAAKR,eACDQ,KAAKR,aAAe+K,GACbvK,KAAKuZ,qBAAqBtI,GAGlCjR,KAAKqR,kBAAkBJ,OAmB1ChH,sBAAsB7I,EAAuByB,EAAqBmB,GACtE,OACI5E,EAAAA,cAACqI,EAAAA,KAAIrC,OAAAC,OAAA,CACDoE,IAAKzF,GACDhE,KAAKV,MAAMqX,SAASzL,OAAM,CAC9BtD,QAAS5H,KAAKwC,sBAAsBpB,EAAQyB,GAAW,kBACtC7C,KAAKiD,MAAMJ,YAAc7C,KAAKiD,MAAMJ,aAAezB,EAAO0B,IAAG,mBAC5D9C,KAAKiD,MAAMJ,YAAc7C,KAAKiD,MAAMJ,aAAezB,EAAO0B,IAAG,cAClED,EAAU,aACX7C,KAAKiD,MAAMwU,aAAerW,EAAOsP,eAAYxN,IAExD9B,EAAOzB,UAKZuK,oBAAoB9I,EAAuB4C,GAC/C,MAAM,KAAEyH,GAASzL,KAAKV,MAAMqX,SACtBhX,EAAWyB,EAAOzB,SAAWyB,EAAOzB,SAAW,GACrDK,KAAKmG,QAAQwF,cAAcC,MAAQjM,EACnC,MAAMkM,GAAaC,EAAAA,EAAAA,wBAAuB9L,KAAK8F,iBAAkB9F,KAAKmG,SACtE,OACI/G,EAAAA,cAACqI,EAAAA,KAAIrC,OAAAC,OAAA,GACGoG,EAAI,CACRhC,IAAKzF,EACLiI,KAAM7K,EAAOJ,SACT6K,EAAU,CACdlI,OAAQvC,EAAO2K,iBAAmB,cAAW7I,EAC7C0E,SAASsE,EAAAA,EAAAA,kBAAiBlM,KAAK8F,iBAAkB9F,KAAKmG,QAASxG,KAE9DyB,EAAOzB,UAKZ6Z,4BAA4BpY,EAAuB4C,GAA6C,IAA7B2V,IAAApO,UAAA9K,OAAA,QAAAyC,IAAAqI,UAAA,KAAAA,UAAA,GACvE,MAAM,KAAEE,GAASzL,KAAKV,MAAMqX,SACtBhX,EAAWyB,EAAOzB,SAAWyB,EAAOzB,SAAW,GAC/C+L,EAActK,EAAOgC,YAAchC,EAAOgC,YAAc,GAC9DpD,KAAKmG,QAAQwF,cAAcC,MAAQjM,EACnC,MAAMkM,GAAaC,EAAAA,EAAAA,wBAAuB9L,KAAK8F,iBAAkB9F,KAAKmG,SACtE,OACI/G,EAAAA,cAACqI,EAAAA,KAAIrC,OAAAC,OAAA,GACGoG,EAAI,CACRhC,IAAKzF,EACLgI,YAAa2N,GAAiB3Z,KAAKkB,qBAAqBwK,EAAatK,GACrE6K,KAAM7K,EAAOJ,SACT6K,EAAU,CACdjE,SAASsE,EAAAA,EAAAA,kBAAiBlM,KAAK8F,iBAAkB9F,KAAKmG,QAASxG,KAE9DyB,EAAOzB,UAKZwM,uBAAuBxM,EAAmBwC,GAC9C,MAAM,KAAEsJ,GAASzL,KAAKV,MAAMqX,SAC5B3W,KAAKmG,QAAQwF,cAAcC,MAAQjM,EACnC,MAAMkM,GAAaC,EAAAA,EAAAA,wBAAuB9L,KAAK8F,iBAAkB9F,KAAKmG,SACtE,OAAIxG,GAAYwC,EAER/C,EAAAA,cAACqI,EAAAA,KAAIrC,OAAAC,OAAA,GAAKoG,EAAI,CAAEQ,KAAM9J,GAAa0J,EAAU,CAAEjE,SAASsE,EAAAA,EAAAA,kBAAiBlM,KAAK8F,iBAAkB9F,KAAKmG,QAASxG,KACzGA,GAIN,KAGHwK,oBAAoB/I,EAAuB4C,GAC/C,MAAM,KAAEoI,GAASpM,KAAKV,MAAMqX,SAC5B,OACIvX,EAAAA,cAACqI,EAAAA,KAAIrC,OAAAC,OAAA,CAACoE,IAAKzF,GAAWoI,GACjBhL,EAAOzB,UAKZsL,YAAYoB,EAAe3B,EAA4BkP,GAAmB,IAAAC,EAC9E,MAAM,aAAEtN,EAAY,kBAAEC,EAAiB,kBAAErJ,EAAiB,uBAAEsJ,GAA2BzM,KAAKV,MAAMqX,SAC5FmD,GACD9Z,KAAKiD,MAAMwU,cACZtU,GAC6B,OAA7BnD,KAAKiD,MAAMX,oBACkBY,IAA7BlD,KAAKiD,MAAMX,gBACVsX,EACCG,GACD/Z,KAAKiD,MAAMwU,cAAgBhL,GAA0BjL,EAAAA,gBAAgBC,YAAYzB,KAAKiD,MAAMX,iBAAmBsX,EAC9GI,EACFha,KAAKR,aAAegX,EAAiB8C,KAAOQ,EAAyBvN,EAAcjH,UAAY,kBACnGtF,KAAKR,aAAegX,EAAiBmC,IACrC,MAAMsB,EACFH,GACA9Z,KAAKV,MAAMqX,SAASnR,OAAOgF,kBAC3BxK,KAAKV,MAAMqX,SAASnR,OAAOgF,iBAAmBgM,EAAiB8C,KAC/D,sBAEEY,EAAyC,QAA3BL,EAAG7Z,KAAKiD,MAAMX,qBAAa,IAAAuX,OAAA,EAAxBA,EAA0BrF,QAAO5S,IAAU0W,EAAAA,iBAAiBC,mBAAmB3W,EAAMN,OACtG6Y,EAAqBD,MAAAA,OAAc,EAAdA,EAAgBja,KAAI0B,GAAQA,EAAKL,MAAK8Y,KAAK,KACtE,OACIhb,EAAAA,cAACqI,EAAAA,KAAIrC,OAAAC,OAAA,GAAKkH,EAAY,CAAEjH,UAAW0U,IAC/B5a,EAAAA,cAACqI,EAAAA,KAAIrC,OAAAC,OAAA,GACGrF,KAAKV,MAAMqX,SAASzP,SAAQ,CAChC5B,UAAWkC,GAAAA,CACPxH,KAAKV,MAAMqX,SAASzP,SAAS5B,UAC7B+G,EACAyN,GAA0B,gBAC1BG,KAGHvP,GAELtL,EAAAA,cAAA,OAAKkG,UAAU,2BAA2BmE,IAAK0Q,GAC1CL,GACGtY,EAAAA,gBAAgBC,YAAYyY,IAC5BA,EAAeja,KAAI0B,IAAI,IAAA0Y,EAAAxN,EAAA,OACnBzN,EAAAA,cAACqI,EAAAA,KAAIrC,OAAAC,OAAA,GAAKmH,EAAiB,CAAElH,UAAWkH,EAAmBlH,UAAWmE,IAAK9H,EAAKL,MAC3EmV,EAAiBzW,KAAKV,MAAe,QAAV+a,EAAE1Y,EAAKL,WAAG,IAAA+Y,EAAAA,EAAI,GAAI1Y,EAAKJ,QAASyJ,YAC3D+O,GACG/Z,KAAKmM,uBAAuBxK,EAAKJ,QAAkC,QAA3BsL,EAAElL,EAAKO,4BAAoB,IAAA2K,OAAA,EAAzBA,EAA2B1K,gBA5iBtFmY,EAAA1X,aAAuB,GAkE5ByT,EAAAA,EAAAA,IAAA,CAATE,EAAAA,IAAQ,iCA+nBb,UC7sBA,EAR4BjX,GACpBA,EAAMkG,OAAOqO,cACNzU,EAAAA,cAACkb,EAAyB,CAAC3D,SAAUrX,IAGzCF,EAAAA,cAAC2X,EAA0B,CAACJ,SAAUrX,mBCrBjD,IAAI2b,EAAO,EAAQ,IACfC,EAAgC,EAAQ,KACxCC,EAAW,EAAQ,IACnBC,EAAoB,EAAQ,IAC5BC,EAAW,EAAQ,IACnBrQ,EAAW,EAAQ,IACnBsQ,EAAyB,EAAQ,IACjCC,EAAY,EAAQ,IACpBC,EAAqB,EAAQ,KAC7BC,EAAa,EAAQ,KAGzBP,EAA8B,SAAS,SAAUQ,EAAOC,EAAaC,GACnE,MAAO,CAGL,SAAeC,GACb,IAAIC,EAAIR,EAAuBtb,MAC3B+b,EAAUX,EAAkBS,QAAU3Y,EAAYqY,EAAUM,EAAQH,GACxE,OAAOK,EAAUd,EAAKc,EAASF,EAAQC,GAAK,IAAIE,OAAOH,GAAQH,GAAO1Q,EAAS8Q,KAIjF,SAAUG,GACR,IAAIC,EAAKf,EAASnb,MACdmc,EAAInR,EAASiR,GACbG,EAAMR,EAAgBD,EAAaO,EAAIC,GAE3C,GAAIC,EAAIC,KAAM,OAAOD,EAAIE,MAEzB,IAAKJ,EAAGK,OAAQ,OAAOd,EAAWS,EAAIC,GAEtC,IAAIK,EAAcN,EAAGO,QACrBP,EAAGQ,UAAY,EAIf,IAHA,IAEInJ,EAFAoJ,EAAI,GACJjP,EAAI,EAEgC,QAAhC6F,EAASkI,EAAWS,EAAIC,KAAc,CAC5C,IAAIS,EAAW5R,EAASuI,EAAO,IAC/BoJ,EAAEjP,GAAKkP,EACU,KAAbA,IAAiBV,EAAGQ,UAAYlB,EAAmBW,EAAGd,EAASa,EAAGQ,WAAYF,IAClF9O,IAEF,OAAa,IAANA,EAAU,KAAOiP,cC5C9BE,EAAOC,QAAU1d,cCAjByd,EAAOC,QAAUC","sources":["webpack://sheikh-zayed-festival/./src/themes/sheikhzayedfestival/views/navigation-menu.view.tsx?ca7c","webpack://sheikh-zayed-festival/./lib/navigation-menu/module-registration.js?7039","webpack://sheikh-zayed-festival/./src/modules/fabrikam/views/navigation-menu.view.tsx?bc23","webpack://sheikh-zayed-festival/./src/modules/navigation-menu/navigation-menu.data.ts?9815","webpack://sheikh-zayed-festival/./src/modules/navigation-menu/navigation-menu.tsx?2bef","webpack://sheikh-zayed-festival/./src/modules/navigation-menu/navigation-menu.view.tsx?c594","webpack://sheikh-zayed-festival/./src/modules/adventureworks/views/components/navigation-menu-utilities.tsx?d092","webpack://sheikh-zayed-festival/./src/modules/adventureworks/views/components/navigation-menu-root-disabled.tsx?1d68","webpack://sheikh-zayed-festival/./src/modules/adventureworks/views/components/navigation-menu-root-enabled.tsx?d5b3","webpack://sheikh-zayed-festival/./src/modules/adventureworks/views/navigation-menu.view.tsx?5304","webpack://sheikh-zayed-festival/./node_modules/@msdyn365-commerce/bootloader/node_modules/core-js/modules/es.string.match.js?a69e","webpack://sheikh-zayed-festival/external var \"React\"?0d3b","webpack://sheikh-zayed-festival/external var \"ReactDOM\"?853b"],"sourcesContent":["/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\nimport MsDyn365, { IImageData, IImageSettings, Image } from '@msdyn365-commerce/core';\r\nimport { ArrayExtensions, generateImageUrl } from '@msdyn365-commerce-modules/retail-actions';\r\nimport {\r\n getPayloadObject,\r\n getTelemetryAttributes,\r\n getTelemetryObject,\r\n IPayLoad,\r\n ITelemetryContent,\r\n Module,\r\n Node,\r\n onTelemetryClick\r\n} from '@msdyn365-commerce-modules/utilities';\r\nimport classnames from 'classnames';\r\nimport * as React from 'react';\r\n\r\nimport { INavigationMenuViewProps } from '@msdyn365-commerce-modules/navigation-menu/src/modules/navigation-menu/./navigation-menu';\r\nimport { IMenuItemData } from '@msdyn365-commerce-modules/navigation-menu/src/modules/navigation-menu/./navigation-menu.data';\r\nimport { INavigationMenuProps } from '../definition-extensions/navigation-menu.ext.props.autogenerated';\r\ninterface INavigationState {\r\n parentMenu?: number;\r\n activeMenu?: number;\r\n categoryImage?: IImageData[] | null;\r\n mobileViewLabelText?: string;\r\n categoryImageAltText: string;\r\n}\r\n\r\n/**\r\n *\r\n * NavigationMenuView component.\r\n * @extends {React.PureComponent}\r\n */\r\nexport class NavigationMenuView extends React.PureComponent, INavigationState> {\r\n private static isBackTrack: boolean = false;\r\n\r\n private currentLevel: number = 0;\r\n\r\n private readonly menuNode: React.RefObject;\r\n\r\n private readonly menuItemRef: React.RefObject;\r\n\r\n private readonly telemetryContent: ITelemetryContent;\r\n\r\n private readonly payLoad: IPayLoad;\r\n\r\n constructor(props: INavigationMenuViewProps & INavigationMenuProps<{}>) {\r\n super(props);\r\n this.menuNode = React.createRef();\r\n this.menuItemRef = React.createRef();\r\n this.state = { activeMenu: undefined, mobileViewLabelText: '', parentMenu: undefined, categoryImageAltText: '' };\r\n this._closeSubmenu = this._closeSubmenu.bind(this);\r\n this.telemetryContent = getTelemetryObject(\r\n this.props.context.request.telemetryPageName!,\r\n this.props.friendlyName,\r\n this.props.telemetry\r\n );\r\n this.payLoad = getPayloadObject('click', this.telemetryContent, '', '');\r\n }\r\n\r\n public componentDidMount(): void {\r\n if (MsDyn365.isBrowser) {\r\n document.body.addEventListener('mousedown', this._handleClickOutside);\r\n document.body.addEventListener('focusout', this._handleFocusOutside);\r\n }\r\n }\r\n\r\n public componentDidUpdate(): void {\r\n if (this.menuItemRef.current?.children[0] && this.props.isMobileView) {\r\n (this.menuItemRef.current.children[0] as HTMLElement).focus();\r\n }\r\n }\r\n\r\n public componentWillUnmount(): void {\r\n if (MsDyn365.isBrowser) {\r\n document.body.removeEventListener('mousedown', this._handleClickOutside, false);\r\n document.body.removeEventListener('focusout', this._handleFocusOutside, false);\r\n }\r\n }\r\n\r\n public render(): JSX.Element | null {\r\n const { isMobileView, MenuList, MobileBackButton, MobileDescriptionContainer, MobileDescriptionLabel, Navigation } = this.props;\r\n\r\n this.currentLevel = 1;\r\n return (\r\n \r\n \r\n {isMobileView && this.state.activeMenu !== undefined && (\r\n \r\n \r\n {this.state.mobileViewLabelText}\r\n \r\n )}\r\n {this._renderDisplay()}\r\n \r\n \r\n );\r\n }\r\n\r\n private _renderDisplay(): JSX.Element[] {\r\n const { ListItem, menuItemData, isMobileView, app: { config: { festivalActivitiesStaticSubNavItems } }, context: { request: { locale, sitePath } }, resources: { festivalNavigationMenuText } } = this.props;\r\n const { activeMenu } = this.state;\r\n const menuItemList: JSX.Element[] = [];\r\n\r\n const festivalActivities = menuItemData.find((menuItem: IMenuItemData) => menuItem.menuSource?.toLowerCase() === 'retail' && menuItem.linkText?.toLowerCase() === festivalNavigationMenuText?.toLowerCase());\r\n if (MsDyn365.isBrowser && window && festivalActivities && festivalActivitiesStaticSubNavItems) {\r\n // Access the submenu array\r\n const submenu = festivalActivities.subMenu;\r\n submenu?.map((item: IMenuItemData) => {\r\n for (const staticSubItem of festivalActivitiesStaticSubNavItems) {\r\n if (item.linkText?.toLowerCase().includes(locale.toLowerCase() !== 'ar-ae' ? staticSubItem?.categoryName?.toLowerCase()! : staticSubItem?.categoryNameTranslation?.toLowerCase()!)) {\r\n item.linkURL = `${window.location.origin}${sitePath}/festival-activities/${staticSubItem?.categoryName?.toLowerCase()?.replace(/ /g,'-').replace('&','and')}`;\r\n }\r\n }\r\n });\r\n }\r\n\r\n if (isMobileView && activeMenu !== undefined && menuItemData.length > 0) {\r\n let menuItem: IMenuItemData = {};\r\n for (const menuItemDatum of menuItemData) {\r\n if (menuItemDatum && menuItemDatum.id === activeMenu) {\r\n menuItem = menuItemDatum;\r\n !NavigationMenuView.isBackTrack\r\n ? this.setState({ parentMenu: undefined })\r\n : this.setState({ parentMenu: undefined, mobileViewLabelText: menuItemDatum.linkText });\r\n break;\r\n }\r\n menuItem = this._getFromSubMenu(menuItemDatum) as IMenuItemData;\r\n if (menuItem && menuItem.id === activeMenu) {\r\n break;\r\n }\r\n }\r\n\r\n menuItem &&\r\n menuItemList.push(\r\n \r\n {' '}\r\n {this._createMenuItemList(menuItem)}{' '}\r\n \r\n );\r\n } else {\r\n menuItemData.forEach((item: IMenuItemData, index: number) => {\r\n menuItemList.push(\r\n \r\n {this._createMenuItemList(item)}\r\n \r\n );\r\n });\r\n }\r\n\r\n return menuItemList;\r\n }\r\n\r\n private _getFromSubMenu(item?: IMenuItemData): IMenuItemData | null {\r\n const subMenus = item && item.subMenu;\r\n if (subMenus && subMenus.length > 0) {\r\n for (let i = 0; i <= subMenus.length - 1; i++) {\r\n if (subMenus[i].id === this.state.activeMenu) {\r\n !NavigationMenuView.isBackTrack\r\n ? this.setState({ parentMenu: item?.id })\r\n : this.setState({ parentMenu: item && item.id, mobileViewLabelText: subMenus[i].linkText });\r\n return subMenus[i];\r\n }\r\n const found = this._getFromSubMenu(subMenus[i]);\r\n if (found) {\r\n return found;\r\n }\r\n }\r\n }\r\n this.props.context.telemetry.error('Submenu content is empty, module wont render.');\r\n return null;\r\n }\r\n\r\n private _createMenuItemList(menuItemData: IMenuItemData): JSX.Element | null {\r\n if (menuItemData && menuItemData.subMenu && menuItemData.subMenu.length > 0) {\r\n if (this.props.isMobileView && this.state.activeMenu !== undefined) {\r\n return this._renderSubMenu(menuItemData.subMenu, menuItemData.id, false);\r\n }\r\n return (\r\n <>\r\n {this._renderButtonMenuItem(menuItemData)}\r\n {this._renderSubMenu(menuItemData.subMenu, menuItemData.id, false)}\r\n \r\n );\r\n } else if (menuItemData && menuItemData.linkText && menuItemData.linkURL && menuItemData.linkURL.length > 0) {\r\n return this._renderLinkMenuItem(menuItemData, menuItemData.id, false, true);\r\n } else if (menuItemData && menuItemData.linkText && !menuItemData.linkURL) {\r\n return this._renderSpanMenuItem(menuItemData, menuItemData.id, true);\r\n }\r\n this.props.context.telemetry.error('Navigation menu content is empty, module wont render.');\r\n return null;\r\n }\r\n\r\n private _renderSubMenu(subMenus?: IMenuItemData[], activeMenu?: number, IsSubMenu?: boolean): JSX.Element | null {\r\n const { isMobileView, ListItem } = this.props;\r\n const enableMultiSupportMenu = this.props.config.enableMultilevelMenu || false;\r\n const multiLevelSupportedMenu = this.props.config.menuLevelSupport || 3;\r\n\r\n // Const isParentMenu:boolean= false;\r\n if (activeMenu && this.state.activeMenu !== activeMenu) {\r\n this.props.context.telemetry.error('Navigation Active menu content is empty, module wont render.');\r\n return null;\r\n }\r\n\r\n if (!subMenus || subMenus.length === 0) {\r\n this.props.context.telemetry.error('Navigation Submenu content is empty, module wont render.');\r\n return null;\r\n }\r\n\r\n let levelClassName: string = '';\r\n const menuOptions =\r\n subMenus &&\r\n subMenus.map((option: IMenuItemData, idx: number) => {\r\n const hasOptions = option.subMenu && option.subMenu.length > 0;\r\n let menuItem: JSX.Element | null;\r\n // if (hasOptions && isMobileView) {\r\n // menuItem = this._renderButtonMenuItem(option, activeMenu, idx);\r\n // } else {\r\n menuItem = option.linkURL ? this._renderLinkMenuItem(option, idx) : this._renderSpanMenuItem(option);\r\n // }\r\n\r\n let subMenu;\r\n const haveSubmenu = hasOptions && enableMultiSupportMenu && this.currentLevel <= Math.round(multiLevelSupportedMenu) - 1;\r\n if (haveSubmenu) {\r\n this.currentLevel++;\r\n levelClassName = enableMultiSupportMenu ? `level-${this.currentLevel.toString()}` : '';\r\n subMenu = this._renderSubMenu(option.subMenu, isMobileView ? option.id : undefined, true);\r\n }\r\n return (\r\n \r\n {menuItem}\r\n {subMenu}\r\n \r\n );\r\n });\r\n return this._renderMenu(levelClassName, menuOptions, activeMenu, IsSubMenu);\r\n }\r\n\r\n private checkIsActiveNavigation = (subMenu: IMenuItemData[], linkText: string): boolean => {\r\n let isActive: boolean = false;\r\n const { context: { request: { locale } } } = this.props;\r\n subMenu?.map((subMenuItem: IMenuItemData) => {\r\n if (subMenuItem.menuSource?.toLowerCase() === 'retail' && subMenuItem.subMenu?.length === 0 && locale.toLowerCase() === 'ar-ae' && this.props.context.request.url.requestUrl.pathname.match('festival-activities')) {\r\n isActive = true;\r\n }\r\n else if (decodeURIComponent(this.props.context.request.url.requestUrl.pathname).match(linkText.replace(/ /, '-').toLowerCase())) {\r\n isActive = true;\r\n }\r\n // condition to match nav links from CMS\r\n else if (subMenuItem.menuSource?.toLowerCase() === 'cms' && this.props.context.request.url.requestUrl.pathname.match(subMenuItem.linkURL?.split('?')[0]!)) {\r\n isActive = true;\r\n }\r\n return isActive;\r\n });\r\n return isActive;\r\n }\r\n\r\n private _renderButtonMenuItem(option: IMenuItemData, activeMenu?: number, index?: number): JSX.Element | null {\r\n const { Button } = this.props;\r\n return (\r\n \r\n {option.linkText}\r\n \r\n );\r\n }\r\n\r\n private _renderLinkMenuItem(\r\n option: IMenuItemData,\r\n index?: number,\r\n hoverEffect: boolean = true,\r\n isParent: boolean = false\r\n ): JSX.Element | null {\r\n const { Link } = this.props;\r\n const linkText = option.linkText ? option.linkText : '';\r\n const imagesource = option.imageSource ? option.imageSource : '';\r\n this.payLoad.contentAction.etext = linkText;\r\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\r\n // compare link url to apply active class to navigation links -- replace method used to remove extra / if there at the end of url.\r\n const isActive = this.props.context.request.url.requestUrl.pathname.replace(/\\/$/, \"\") === option.linkURL?.split('?')![0].replace(/\\/$/, \"\");\r\n return (\r\n \r\n {option.linkText}\r\n \r\n );\r\n }\r\n\r\n private _renderPromotionalLink(linkText?: string, linkUrl?: string): JSX.Element | null {\r\n const { Link } = this.props;\r\n this.payLoad.contentAction.etext = linkText;\r\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\r\n if (linkText && linkUrl) {\r\n return (\r\n \r\n {linkText}\r\n \r\n );\r\n }\r\n return null;\r\n }\r\n\r\n private _renderSpanMenuItem(option: IMenuItemData, index?: number, isParent: boolean = false): JSX.Element | null {\r\n const { Span } = this.props;\r\n return (\r\n \r\n {option.linkText}\r\n \r\n );\r\n }\r\n\r\n private _renderMenu(level: string, menuOptions: JSX.Element[], currentItem?: number, submenu?: boolean): JSX.Element | null {\r\n const { DivContainer, MenuList, ImageDivContainer, showCategoryImage, showPromotionalContent, isMobileView } = this.props;\r\n const categoryImageDisplay =\r\n !isMobileView &&\r\n (showCategoryImage || showPromotionalContent) &&\r\n !ArrayExtensions.hasElements(this.state.categoryImage) &&\r\n !submenu;\r\n const promotionalContentDisplay =\r\n !isMobileView && showPromotionalContent && ArrayExtensions.hasElements(this.state.categoryImage) && !submenu;\r\n const DivContainerClass = this.currentLevel > 2 || categoryImageDisplay ? DivContainer!.className : 'ms-nav__deafult';\r\n this.currentLevel = 1;\r\n return (\r\n \r\n 2 &&\r\n 'navmenu-multi-level'\r\n )}\r\n >\r\n {menuOptions}\r\n \r\n {categoryImageDisplay &&\r\n this.state.categoryImage &&\r\n this.state.categoryImage.map(item => (\r\n \r\n {this.state.categoryImage && this._getCategoryImage(item)}\r\n {promotionalContentDisplay && this._renderPromotionalLink(item.altText, item.additionalProperties?.linkUrl)}\r\n \r\n ))}\r\n \r\n );\r\n }\r\n\r\n private readonly _updateCategoryImage = (categoryImageSrc: string, option: IMenuItemData) => () => {\r\n const linkText = option && option.linkText ? option.linkText : '';\r\n const promotionalImage: IImageData[] = [{ src: categoryImageSrc, altText: linkText }];\r\n\r\n // Read category and promotional image in one array\r\n if (ArrayExtensions.hasElements(option.promotionalContent)) {\r\n option.promotionalContent.map(item => {\r\n if (item && item.image) {\r\n const imageSrc = item.image.src;\r\n const promotionalItemImageSettings = item.image.imageSettings;\r\n promotionalImage.push({\r\n src: imageSrc,\r\n altText: item.text,\r\n imageSettings: promotionalItemImageSettings,\r\n additionalProperties: { linkUrl: item.linkUrl.destinationUrl }\r\n });\r\n }\r\n });\r\n }\r\n this.setState({\r\n categoryImage: promotionalImage.length > 0 ? promotionalImage : [{ src: 'empty' }],\r\n categoryImageAltText: linkText\r\n });\r\n };\r\n\r\n private readonly _handleDropdownToggle = (data: IMenuItemData, parentId?: number) => () => {\r\n if (!this.props.isMobileView) {\r\n this.setState({\r\n activeMenu: this.state.activeMenu && this.state.activeMenu === data.id! ? undefined : data.id!,\r\n parentMenu: parentId\r\n });\r\n if (this.props.showCategoryImage) {\r\n this._updateCategoryImage(data.imageSource!, data)();\r\n }\r\n } else {\r\n NavigationMenuView.isBackTrack = false;\r\n this.setState({\r\n activeMenu: data.id,\r\n mobileViewLabelText: data.linkText!,\r\n parentMenu: parentId\r\n });\r\n }\r\n };\r\n\r\n private readonly _handleGoBack = () => () => {\r\n NavigationMenuView.isBackTrack = true;\r\n this.setState({ activeMenu: this.state.parentMenu });\r\n };\r\n\r\n /**\r\n * Method to handle click outside of menu.\r\n * @param event -HTML event.\r\n */\r\n private readonly _handleClickOutside = (event: MouseEvent) => {\r\n if (this.menuNode.current && !this.menuNode.current.contains(event.target as Node)) {\r\n this.setState({\r\n activeMenu: undefined,\r\n mobileViewLabelText: '',\r\n categoryImage: null\r\n });\r\n }\r\n };\r\n\r\n /**\r\n * Method to handle click outside of menu.\r\n * @param event -HTML event.\r\n */\r\n private readonly _handleFocusOutside = (event: FocusEvent) => {\r\n if (this.menuNode.current && !this.menuNode.current.contains(event.relatedTarget as Node)) {\r\n this._closeSubmenu();\r\n }\r\n };\r\n\r\n /**\r\n * Checks to assign a ref for focus.\r\n * @param index -Sub menu list index.\r\n * @param mobileViewLabelText -Parent user clicked Sub menu list.\r\n * @param optionLinkText -Sub menu list.\r\n * @returns Ref.\r\n */\r\n private readonly _shouldAddFocusMenuRef = (index: number, mobileViewLabelText?: string, optionLinkText?: string) => {\r\n if (!NavigationMenuView.isBackTrack && index === 0) {\r\n return true;\r\n }\r\n if (!optionLinkText || !mobileViewLabelText) {\r\n return false;\r\n }\r\n return mobileViewLabelText === optionLinkText;\r\n };\r\n\r\n private _closeSubmenu(): void {\r\n if (!this.props.isMobileView) {\r\n this.setState({ activeMenu: undefined, categoryImage: null, mobileViewLabelText: '' });\r\n }\r\n }\r\n\r\n private readonly _getCategoryImage = (categoryImage?: IImageData): React.ReactNode | null => {\r\n if (!categoryImage || !categoryImage.src) {\r\n return null;\r\n }\r\n\r\n const categoryImageUrl = generateImageUrl(`${categoryImage.src}`, this.props.context.actionContext.requestContext.apiSettings);\r\n const defaultImageSettings: IImageSettings = {\r\n viewports: {\r\n xs: { q: 'w=300&h=250&m=8', w: 0, h: 0 },\r\n sm: { q: 'w=300&h=250&m=8', w: 0, h: 0 },\r\n md: { q: 'w=300&h=250&m=8', w: 0, h: 0 },\r\n lg: { q: 'w=300&h=250&m=8', w: 0, h: 0 }\r\n },\r\n lazyload: true\r\n };\r\n if (categoryImageUrl !== undefined) {\r\n return (\r\n \r\n );\r\n }\r\n return null;\r\n };\r\n}\r\n\r\nexport default NavigationMenuView;\r\n","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['__local__|__local__|themes|sheikhzayedfestival|views|navigation-menu'] = {\n c: () => require('partner/themes/sheikhzayedfestival/views/navigation-menu.view.tsx'),\n cn: '__local__-__local__-navigation-menu'\n };\nviewDictionary['@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","'use strict';\nvar call = require('../internals/function-call');\nvar fixRegExpWellKnownSymbolLogic = require('../internals/fix-regexp-well-known-symbol-logic');\nvar anObject = require('../internals/an-object');\nvar isNullOrUndefined = require('../internals/is-null-or-undefined');\nvar toLength = require('../internals/to-length');\nvar toString = require('../internals/to-string');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar getMethod = require('../internals/get-method');\nvar advanceStringIndex = require('../internals/advance-string-index');\nvar regExpExec = require('../internals/regexp-exec-abstract');\n\n// @@match logic\nfixRegExpWellKnownSymbolLogic('match', function (MATCH, nativeMatch, maybeCallNative) {\n return [\n // `String.prototype.match` method\n // https://tc39.es/ecma262/#sec-string.prototype.match\n function match(regexp) {\n var O = requireObjectCoercible(this);\n var matcher = isNullOrUndefined(regexp) ? undefined : getMethod(regexp, MATCH);\n return matcher ? call(matcher, regexp, O) : new RegExp(regexp)[MATCH](toString(O));\n },\n // `RegExp.prototype[@@match]` method\n // https://tc39.es/ecma262/#sec-regexp.prototype-@@match\n function (string) {\n var rx = anObject(this);\n var S = toString(string);\n var res = maybeCallNative(nativeMatch, rx, S);\n\n if (res.done) return res.value;\n\n if (!rx.global) return regExpExec(rx, S);\n\n var fullUnicode = rx.unicode;\n rx.lastIndex = 0;\n var A = [];\n var n = 0;\n var result;\n while ((result = regExpExec(rx, S)) !== null) {\n var matchStr = toString(result[0]);\n A[n] = matchStr;\n if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n n++;\n }\n return n === 0 ? null : A;\n }\n ];\n});\n","module.exports = React;","module.exports = ReactDOM;"],"names":["NavigationMenuView","React","constructor","props","super","currentLevel","checkIsActiveNavigation","subMenu","linkText","isActive","context","request","locale","this","map","subMenuItem","_subMenuItem$menuSour","_subMenuItem$subMenu","_subMenuItem$menuSour2","_subMenuItem$linkURL","menuSource","toLowerCase","length","url","requestUrl","pathname","match","decodeURIComponent","replace","linkURL","split","_updateCategoryImage","categoryImageSrc","option","promotionalImage","src","altText","ArrayExtensions","hasElements","promotionalContent","item","image","imageSrc","promotionalItemImageSettings","imageSettings","push","text","additionalProperties","linkUrl","destinationUrl","setState","categoryImage","categoryImageAltText","_handleDropdownToggle","data","parentId","isMobileView","isBackTrack","activeMenu","id","mobileViewLabelText","parentMenu","state","undefined","showCategoryImage","imageSource","_handleGoBack","_handleClickOutside","event","menuNode","current","contains","target","_handleFocusOutside","relatedTarget","_closeSubmenu","_shouldAddFocusMenuRef","index","optionLinkText","_getCategoryImage","defaultImageSettings","viewports","xs","q","w","h","sm","md","lg","lazyload","_ref","_categoryImage$imageS","generateImageUrl","actionContext","requestContext","apiSettings","Image","Object","assign","className","gridSettings","config","categoryImageSettings","loadFailureBehavior","role","menuItemRef","bind","telemetryContent","getTelemetryObject","telemetryPageName","friendlyName","telemetry","payLoad","getPayloadObject","componentDidMount","MsDyn365","isBrowser","document","body","addEventListener","componentDidUpdate","_this$menuItemRef$cur","children","focus","componentWillUnmount","removeEventListener","render","MenuList","MobileBackButton","MobileDescriptionContainer","MobileDescriptionLabel","Navigation","Module","classnames","Node","ref","tabIndex","onClick","_renderDisplay","ListItem","menuItemData","app","festivalActivitiesStaticSubNavItems","sitePath","resources","festivalNavigationMenuText","menuItemList","festivalActivities","find","menuItem","_menuItem$menuSource","_menuItem$linkText","window","submenu","staticSubItem","_item$linkText","_staticSubItem$catego","_staticSubItem$catego2","_staticSubItem$catego3","includes","categoryName","categoryNameTranslation","location","origin","menuItemDatum","_getFromSubMenu","key","_createMenuItemList","forEach","subMenus","i","found","error","_renderSubMenu","_renderButtonMenuItem","_renderLinkMenuItem","_renderSpanMenuItem","IsSubMenu","enableMultiSupportMenu","enableMultilevelMenu","multiLevelSupportedMenu","menuLevelSupport","levelClassName","menuOptions","idx","hasOptions","haveSubmenu","Math","round","toString","_renderMenu","Button","tag","onFocus","_option$linkURL","hoverEffect","arguments","isParent","Link","imagesource","contentAction","etext","attributes","getTelemetryAttributes","shouldOpenNewTab","onMouseOver","href","onTelemetryClick","_renderPromotionalLink","Span","level","currentItem","DivContainer","ImageDivContainer","showPromotionalContent","categoryImageDisplay","promotionalContentDisplay","DivContainerClass","_item$additionalPrope","binding","modules","dataActions","c","require","$type","da","name","path","runOn","iNM","ns","n","p","pdp","registerSanitizedActionPath","sanitizedActionPath","dataAction","default","Error","prototype","RegistrationId","__bindings__","_objectSpread","viewDictionary","cn","_positionInSetOffset","escapeKey","_resetFocus","setTimeout","_escFunction","keyCode","navDrawerList","Array","from","childNodes","navDrawerButton","firstChild","getAttribute","categoryImageUrl","ImageData","_onDrawerChange","drawerState","drawerKeyValue","newPair","buttonText","isOpen","_renderMobileMenu","_renderDesktopMenu","posinset","_renderDrawerMenu","setSize","_renderDrawer","toggleButtonText","keyValue","keys","isDrawerOpen","colProps","Drawer","toggleButtonProps","ariaLabel","openGlyph","onToggle","collapseProps","closeGlyph","glyphPlacement","_renderLinkText","menuSubItem","currentPos","_menuItem$subMenu2","_menuItem$subMenu","_renderDrawerLink","MenuTypeIndexId","MenuSource","NavigationMenu","isRetail","isCMS","_setNavigationSource","sourceType","_updateViewport","viewport","device","Type","navigationMenuSource","isMobile","nameTranslations","nameTranslation","Language","Text","resizeThrottledEventHandler","addThrottledEvent","_this$props$config$di","_this$props$config$di2","_mapData","isEmptyOrNullObject","viewProps","xl","moduleProps","displayCategoryImage","displayPromotionalImage","ImageContainer","backButtonAriaLabel","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","Name","_NavigationMenu$getFr","_NavigationMenu$getFr2","Images","Uri","RSItemIdInit","getFriendlyName","NameTranslations","Url","_getNestedChildren","Retail","CMSItemIdInit","imageDestinationURL","imageLink","_getCMSNestedChildren","Cms","openInNewTab","category","imageSourceUrl","nestedChildren","Children","allCategoryMenuText","getCategoryUrl","_getViewport","innerWidth","__decorate","observable","computed","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","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","call","fixRegExpWellKnownSymbolLogic","anObject","isNullOrUndefined","toLength","requireObjectCoercible","getMethod","advanceStringIndex","regExpExec","MATCH","nativeMatch","maybeCallNative","regexp","O","matcher","RegExp","string","rx","S","res","done","value","global","fullUnicode","unicode","lastIndex","A","matchStr","module","exports","ReactDOM"],"sourceRoot":""}