{"version":3,"file":"static/js/12.57b204307d570a22fac3.chunk.js","mappings":";oKAakBA,yHAAlB,SAAkBA,GACdA,EAAA,0BACAA,EAAA,kBACAA,EAAA,kBACAA,EAAA,YAJJ,CAAkBA,IAAAA,EAAc,KAU1B,MAAOC,EAOTC,YAAYC,EAAqBC,EAAcC,EAAyBC,EAAoBC,GAQrF,KAAAC,YAAc,IAAM,+BACpB,KAAAC,mBAAqB,IAAM,+BAC3B,KAAAC,cAAgB,IAAiB,OATpCC,KAAKC,YAAcT,EACnBQ,KAAKE,gBAAkBT,EACvBO,KAAKN,eAAiBA,EACtBM,KAAKL,UAAYA,EACjBK,KAAKJ,UAAYA,GA+BzBO,eAAeC,EACXC,EACAC,EACAC,GAEA,MAAMC,EAA2C,CAC7CC,sBAAuB,CACnBC,gBAAiBL,EAAMJ,aAAeI,EAAMJ,YAAYU,OAAS,EAAIN,EAAMJ,YAAc,GACzFW,QAAS,CACLC,WAAYN,EAAIO,eAAeC,YAAYC,UAC3CC,WAAYV,EAAIO,eAAeC,YAAYG,YAGnDC,UAAWd,EAAMV,UACjByB,UAAWf,EAAMT,UACjBP,eAAgBgB,EAAMX,gBAGpB2B,QAA0BC,EAAAA,EAAAA,2BAC5B,CAAEC,cAAehB,EAAKiB,oBAAqB,CAAEC,OAAQ,CAAEC,IAAKrB,EAAMH,mBAClEM,GAGAa,GAAqBA,EAAkBV,OAAS,GAEhDU,EAAkBM,KACbC,GACIA,EAAKC,SAAWD,EAAKC,UAAWC,EAAAA,EAAAA,kBAAiBF,EAAKC,SAAUtB,EAAIO,eAAeC,aAAe,KAG3GT,EAAYyB,iBAAmBV,GAE/Bd,EAAIyB,UAAUC,MAAM,4FAA4FzB,EAAenB,kBAIvI,SAAe6C,EAAAA,EAAAA,IAA2B,CACtCC,GAAI,iEACJC,OAtDGjC,eAA0CE,EAAyBE,GAEtE,IAAKF,IAAUA,EAAMJ,YACjB,MAAM,IAAIoC,MAAM,oEAGpB,MAAM/B,EAA+B,GAE/BgC,EAAsB,CACxBlC,EAAgBC,EAAOC,EAAaC,IAExC,OAAOgC,QAAQC,IAAIF,GAAqBG,MAAK,IAClCnC,KA2CXD,MA9DiBqC,GACV,IAAIpD,oCCbf,IAAIqD,EAMG,MAAMC,EAA+BC,IACxC,MAAM,YACFC,EAAW,UACXnD,EAAS,UACTC,GACAiD,EAEJ,IAAKC,EACD,OAGJH,GAAUI,EAAAA,EAAAA,kBAAiB,QAASF,EAAMG,iBAAmB,IAE7D,MAAMC,EAAgC,GAMtC,OAJAH,EAAYnB,KAAIC,IACZqB,EAAWC,KAAKC,EAAcvB,EAAMjC,EAAWC,EAAWiD,OAGvD,CAAEO,KAAMH,IAGbE,EAAgBA,CAACvB,EAAwBjC,EAAmBC,EAAmBiD,KACjF,MAAMQ,EAAYzB,EAAK0B,OACtB1B,EAAK0B,MAAOC,QAAQ,IAAIC,OAAO,IAAI7D,KAAc,MAAO,IAAI4D,QAAQ,IAAIC,OAAO,IAAI5D,KAAc,MAAO,IACzG+C,EAAQc,cAAcC,MAAQL,EAC9B,MAAMM,GAAYC,EAAAA,EAAAA,wBAAuBf,EAAMG,iBAAmBL,GAClE,OACIkB,EAAAA,cAAA,MAAIC,UAAU,uCAAuCC,IAAKnC,EAAKoC,IAC3DH,EAAAA,cAAA,IAAAI,OAAAC,OAAA,cACgBb,EACZc,KAAMC,EAAcxC,EAAMjC,EAAWC,EAAWiD,IAC5Cc,GAEHS,EAAcxC,EAAMjC,EAAWC,EAAWiD,IACvCwB,EAAoBzC,EAAK0B,MAAQ1B,EAAK0B,MAAQ,GAAI3D,EAAWC,MAM3EwE,EAAgBA,CAACE,EAA8B3E,EAAmBC,EAAmBiD,KACvF,MAAM,cAAE0B,EAAa,UAAEC,GAAc3B,EAE/B4B,EAAiBH,EAAWhB,MAC7BC,QAAQ,IAAIC,OAAO,IAAI7D,KAAc,MAAO,IAC5C4D,QAAQ,IAAIC,OAAO,IAAI5D,KAAc,MAAO,IAC3C8E,EAAQH,GAAiB,GAC/B,OAAOE,GAAiBA,EAAc9D,OAAS,EACzC,GAAG+D,KAAgC,IAAxBA,EAAMC,QAAQ,KAAc,IAAM,MAAMH,KAAaC,IAChEC,GAGJL,EAAsBA,CAACC,EAAoB3E,EAAmBC,KAChE,MAAMgF,EAAgBN,EACjBf,QAAQ,IAAIC,OAAO,IAAI7D,KAAc,MAAO,YAC5C4D,QAAQ,IAAIC,OAAO,IAAI5D,KAAc,MAAO,aAGjD,OAAOiE,EAAAA,cAAA,QAAMgB,yBAAyBC,EAAAA,EAAAA,IAAgBF,kPClD1D,IAAIjC,EACAK,EAMG,MAAM+B,EAA+BlC,IACxC,MAAM,YACFC,EAAW,UACXlD,EAAS,UACTD,EACAqF,kBACIC,SAAS,cAAEC,GACXC,WAAW,yBAAEC,IAChB,WACDC,EAAU,SACVC,GACAzC,EACEI,EAA4C,GAIlD,GAHAD,EAAmBH,EAAMG,iBACzBL,GAAUI,EAAAA,EAAAA,kBAAiB,QAASF,EAAMG,iBAAmB,KAExDF,EACD,OAGJA,EAAYnB,KAAIC,IACZqB,EAAWC,KAAKC,EAAcvB,EAAMjC,EAAWC,EAAWsF,EAAerC,EAAOwC,EAAYC,OAKhG,MAAO,CAAEC,MAFSC,EAAaJ,GAEJK,MAAOxC,IAGhCuC,EAAgBJ,IAClB,MAAMM,EAA+BN,GAAsD,iBAE3F,OAAOvB,EAAAA,cAAA,MAAIC,UAAU,yCAAyC4B,IAG5DvC,EAAgBA,CAClBvB,EACAjC,EACAC,EACAsF,EACArC,EACAwC,EACAC,KAEA,MAAMK,EACF/D,EAAK0B,OACJ1B,EAAK0B,MAAOC,QAAQ,IAAIC,OAAO,IAAI7D,KAAc,MAAO,IAAI4D,QAAQ,IAAIC,OAAO,IAAI5D,KAAc,MAAO,IAE7G,MAAO,CACHwD,KAAMiB,EAAoBzC,EAAK0B,MAAQ1B,EAAK0B,MAAQ,GAAI3D,EAAWC,GACnEgG,UAAWC,EAAiBjE,EAAM+D,GAAoB,GAAI9C,GAC1DiD,MACIlE,EAAKoC,IACLpC,EAAKmE,QACLnE,EAAKmE,OAAOzC,OACZ1B,EAAKmE,OAAOzC,MAAM0C,cAClBC,EAAarE,EAAKmE,OAAOzC,MAAM0C,aAAcpE,EAAKmE,OAAOzC,MAAM0C,aAAcV,EAAUD,EAAYxC,GACvGqD,UAAWC,IACXC,SAAUC,EAAazE,EAAMjC,EAAWC,EAAWsF,GACnD/C,GAAIP,EAAKoC,KAIXmC,EAAgBA,KACX,CACHrC,UAAW,uCACXwC,IAAK,OAIPD,EAAeA,CAACzE,EAAwBjC,EAAmBC,EAAmBsF,KAChF,MAAM7B,EAAYzB,EAAK0B,OAClB1B,EAAK0B,MAAOC,QAAQ,IAAIC,OAAO,IAAI7D,KAAc,MAAO,IAAI4D,QAAQ,IAAIC,OAAO,IAAI5D,KAAc,MAAO,IAE7G+C,EAAQc,cAAc8C,MAAQ3E,EAAKoC,GACnC,MAAML,GAAYC,EAAAA,EAAAA,wBAAuBZ,EAAmBL,GAE5D,4WAAA6D,CAAA,CACI1C,UAAW,uCACXwC,IAAK,IACL,aAAcjD,EACdc,KAAMC,EAAcxC,EAAMjC,EAAWC,EAAWsF,IAC7CvB,IAILS,EAAgBA,CAACE,EAA8B3E,EAAmBC,EAAmBsF,KACvF,MAAMT,EAAiBH,EAAWhB,MAAiBC,QAAQ,IAAIC,OAAO,IAAI7D,KAAc,MAAO,IAAI4D,QAAQ,IAAIC,OAAO,IAAI5D,KAAc,MAAO,IAC/I,OAAO0E,EAAWhB,OAASgB,EAAWN,IAClCyC,EAAAA,EAAAA,uBAAsBhC,EAAcH,EAAWN,GAAyBkB,OAAewB,GAAa,IAGtGrC,EAAsBA,CAACC,EAAoB3E,EAAmBC,KAChE,MAAMgF,EAAgBN,EACjBf,QAAQ,IAAIC,OAAO,IAAI7D,KAAc,MAAO,YAC5C4D,QAAQ,IAAIC,OAAO,IAAI5D,KAAc,MAAO,aAGjD,OAAOiE,EAAAA,cAAA,QAAMC,UAAU,sDAAuDe,yBAAyBC,EAAAA,EAAAA,IAAgBF,MAGrHqB,EAAeA,CAACU,EAAuBC,EAAmBtB,EAAkBD,EAAoBxC,KAClG,MACImC,kBAAkB,QAAEC,IACpBpC,EAEJ,OACIgB,EAAAA,cAACgD,EAAAA,eAAc,CACX1E,GAAImD,EACJwB,SAAUzB,EACVJ,QAASA,EACT8B,KAAM,CACFjB,MAAO,CACHkB,wBAAyBL,EACzBM,UAAWL,IAGnB9C,UAAU,gDAKhB+B,EAAmBA,CAACvB,EAA8BqB,EAAiB9C,KACrE,MACImC,kBACIC,SACIiC,SAAS,aAAEC,IAEfC,QAAQ,cAAEC,KAEdxE,EAKJ,GAJGwE,IACCA,EAAcC,iBAAkB,IAG/BhD,IAAeA,EAAWzC,SAE3B,OADAgB,EAAMb,UAAUC,MAAM,2DACf,KAGX,MAAMsF,EAAuC,CACzCC,UAAW,CACPC,GAAI,CAAEC,EAAG,gBAAiBC,EAAG,EAAGC,EAAG,GACnCC,GAAI,CAAEH,EAAG,gBAAiBC,EAAG,EAAGC,EAAG,GACnCE,GAAI,CAAEJ,EAAG,gBAAiBC,EAAG,EAAGC,EAAG,IAEvCG,UAAU,EACVT,iBAAiB,GAGrB,OACIzD,EAAAA,cAACmE,EAAAA,GAAK,CACFrC,QAASA,EACT7B,UAAU,2CACVmE,IAAK3D,EAAWzC,SAChBsF,aAAcA,EACdE,cAAeA,GAAgCE,EAC/CW,oBAAoB,gBCjLhC,IAAIvF,EAMG,MAAMwF,EAAgCtF,IACzC,MAAM,YACFC,EAAW,WACXtD,EACAwF,kBACIG,WAAW,0BAAEiD,KAEjBvF,EAEJ,IAAKC,EACD,OAGJ,MAAMG,EAAgC,GACtCN,GAAUI,EAAAA,EAAAA,kBAAiB,QAASF,EAAMG,iBAAmB,IAE7DF,EAAYnB,KAAIC,IACZqB,EAAWC,KAAKC,EAAcvB,EAAMiB,OAKxC,MAAO,CAAE0C,MAFSC,EAAa4C,EAA2B5I,GAE/B4D,KAAMH,IAG/BuC,EAAeA,CAAC4C,EAAmC5I,KACrD,MAAM6I,EAAgCD,GAChCE,EAAAA,EAAAA,QAAOF,EAA2B5I,GAClC,WAAWA,mBAEjB,OAAOqE,EAAAA,cAAA,MAAIC,UAAU,0CAA0CuE,IAG7DlF,EAAgBA,CAACvB,EAAwBiB,KAC3C,MAAM,WAAErD,EAAU,UAAEG,EAAS,UAAEC,GAAciD,EAEvC0F,EAAa3G,EAAK0B,OAAS1B,EAAK0B,MAAMkF,MAAM,KAAKC,MACjDpF,EAAYkF,EACZA,EAAWhF,QAAQ,IAAIC,OAAO,IAAI7D,KAAc,MAAO,IAAI4D,QAAQ,IAAIC,OAAO,IAAI5D,KAAc,MAAO,IACvGgC,EAAK0B,OAAS1B,EAAK0B,MAAMC,QAAQ,IAAIC,OAAO,IAAI7D,KAAc,MAAO,IAAI4D,QAAQ,IAAIC,OAAO,IAAI5D,KAAc,MAAO,IAC3H+C,EAAQc,cAAcC,MAAQ9B,EAAK0B,MACnC,MAAMK,GAAYC,EAAAA,EAAAA,wBAAuBf,EAAMG,iBAAmBL,GAClE,OACIkB,EAAAA,cAAA,MAAIC,UAAU,wCAAwCC,IAAKnC,EAAKoC,IAC5DH,EAAAA,cAAA,IAAAI,OAAAC,OAAA,cAAeb,EAAWc,KAAMC,EAAcxC,EAAMpC,EAAYqD,IAAYc,GACvES,EAAcxC,EAAMpC,EAAYqD,IAAUwB,EAAoBzC,EAAK0B,MAAQ1B,EAAK0B,MAAQ,GAAI3D,EAAWC,MAMlHwE,EAAgBA,CAACE,EAA8B9E,EAAoBqD,IAC9DyB,GAAcA,EAAWN,GAAK0E,EAAiBpE,EAAWN,GAAIxE,EAAYqD,GAAS,GAGxF6F,EAAmBA,CAACvG,EAAY3C,EAAoBqD,KACtD,MAAM,cAAE0B,EAAa,UAAEC,EAAS,eAAEmE,GAAmB9F,EAE/C6B,EAAQH,GAAiB,GACzBqE,EAAU,GAAGlE,KAAgC,IAAxBA,EAAMC,QAAQ,KAAc,IAAM,MAAMH,KAAahF,IAC1EqJ,EACFF,GACAA,EAAeG,MAAKC,GACY,aAArBA,EAASC,UAElBC,EACFJ,GACAA,EAAiBK,QACjBL,EAAiBK,OAAOJ,MAAKlH,GAClBA,EAAKuH,kBAAoBC,SAASjH,EAAI,MAG/CkH,EAAiBJ,GAAWK,mBAAmBC,KAAKC,UAAUC,EAAiB,CAACR,MAEtF,OAAOI,EAAiB,GAAGT,cAAoBS,IAAmBT,GAGhEvE,EAAsBA,CAACC,EAAoB3E,EAAmBC,KAChE,IAAIgF,EAAgBN,EACff,QAAQ,IAAIC,OAAO,IAAI7D,KAAc,MAAO,YAC5C4D,QAAQ,IAAIC,OAAO,IAAI5D,KAAc,MAAO,aAIjD,OAHAgF,EAAgBA,EAAc4D,MAAM,KAAKC,OAAS,GAG3C5E,EAAAA,cAAA,QAAMgB,yBAAyBC,EAAAA,EAAAA,IAAgBF,MAKpD8E,EAAwB,CAAC,gBAAiB,uBAAwB,kBAAmB,qBAAsB,wBAAyB,YAMpID,EAAoBV,IACtB,MAAMY,EAA4C,GAWlD,OATAZ,EAASa,SAASX,IACd,MAAMY,EAAyC,GAC/CH,EAAsBE,SAASE,IAE3BD,EAAkB3G,KAAK+F,EAAQa,OAEnCH,EAAmBzG,KAAK2G,MAGrBF,GCjHEI,EAAiBlH,IAC1B,MAAM,UACF2B,EAAS,kBACTwF,EAAiB,gBACjBC,EAAe,qBACfC,EAAoB,gBACpBC,EAAe,kBACfC,EAAiB,SACjBC,EAAQ,oBACRC,EAAmB,yBACnBC,EAAwB,MACxBC,EAAK,gBACLC,EAAe,gBACfC,EAAe,gBACfC,GACA9H,EAEE+H,EAAiBC,IACnBT,EAAkBS,EAAEC,OAAOC,OAAS,KAGlCC,EAAYnH,EAAAA,cAAA,SAAOoH,QAASzG,EAAWV,UAAU,WAAWkG,GAE5DkB,EAAajB,EAcfpG,EAAAA,cAAA,SACI1B,GAAIqC,EACJV,UAAU,0BACVqH,KAAK,OAAM,aACCT,EACZU,KAAM5G,EACN6G,YAAarB,EACbsB,IAAKnB,EACLoB,SAAUX,EACVG,MAAOP,IAtBX3G,EAAAA,cAAA,SACI1B,GAAIqC,EACJV,UAAU,0BACVqH,KAAK,OAAM,aACCjB,EAAuB,kBAAoB,mBACvDkB,KAAM5G,EACN6G,YAAarB,EACbsB,IAAKnB,EACLoB,SAAUX,EACVY,UAAWnB,EACXU,MAAOP,IAgBTiB,GAAiBnB,GACnBzG,EAAAA,cAAC6H,EAAAA,OAAM,CAAC5H,UAAU,+BAA8B,aAAa6G,IAYjE,MAAO,CAACgB,MAAOX,EAAW3K,MAAO6K,EAAWU,UAR5C/H,EAAAA,cAAC6H,EAAAA,OAAM,CACH5H,UAAYwG,EAAuD,uCAAjC,+BAAuE,aAC7FG,EACZoB,QAAStB,EACTY,KAAK,WAI6DW,UAAWL,IC5ExEM,EAAkBlJ,IAC3B,MAAM,iBAAEmJ,EAAgB,qBAAE9B,EAAoB,WAAE+B,EAAU,qBAAEC,EAAoB,gBAAEjC,EAAe,yBAAEM,EAAwB,iBAAEvH,GAAoBH,EAC3IF,GAAUI,EAAAA,EAAAA,kBAAiB,QAASC,EAAkBiJ,EAAY,IAClEE,GAAavI,EAAAA,EAAAA,wBAAuBZ,EAAkBL,GAE5D,OACIkB,EAAAA,cAAA,OAAKC,UAAWkI,GACZnI,EAAAA,cAAC6H,EAAAA,OAAMzH,OAAAC,OAAA,CACHJ,UAAU,kBAAiB,gBACZoG,EAAoB,aACvB,mBACZ2B,QAAStB,EACT6B,SAAUF,GACNC,IAEFlC,GAAmBpG,EAAAA,cAAA,QAAMC,UAAU,uBAAsB,eAAc,GAAOmI,2kBCqChG,MAAMI,UAAexI,EAAAA,UAkBjBtE,YAAYsD,GACRyJ,MAAMzJ,GAZF,KAAAlD,UAAoB,IACpB,KAAAC,UAAoB,IACpB,KAAA2M,SAAmB,IA8OnB,KAAAC,gBAAmB3B,IACvB,MAAM,YAAE/H,GAAgB9C,KAAKyM,MAGzB3J,GACAA,EAAYf,kBACuB,OAAnC8I,EAAEC,OAAO4B,QAAQ,eAEjB1M,KAAK2M,0BAIL,KAAAC,OAAU/B,IACd,MAAM,YAAE/H,GAAgB9C,KAAKyM,MAEzB3J,GAAeA,EAAYf,kBAAoB8I,EAAEgC,UAAYC,EAAAA,SAASC,OACtE/M,KAAK2M,yBACC3M,KAAKyM,MAAMvC,sBAAwBW,EAAEgC,UAAYC,EAAAA,SAASC,QAC7D/M,KAAKyM,MAAMvC,sBACVlK,KAAKgN,SAAS,CAAE9C,sBAAsB,IAIvClK,KAAKiN,cAAcC,SAAWlN,KAAKiN,cAAcC,QAAQC,SAAStC,EAAEC,SAC1E9K,KAAKoN,qBAAqBF,SAAWlN,KAAKoN,qBAAqBF,QAAQC,SAAStC,EAAEC,UAC3EhI,GAAeA,EAAYf,kBAC3B/B,KAAK2M,yBAGN3M,KAAKyM,MAAMvC,sBACVlK,KAAKgN,SAAS,CAAE9C,sBAAsB,MAK1C,KAAAyC,uBAAyB,KAC7B,MACI1H,SAAS,cAAEC,GACX6B,MAAM,YAAEsG,IACRrN,KAAK6C,MAEL7C,KAAKmK,gBAAgB+C,SAAWlN,KAAKmK,gBAAgB+C,QAAQnC,MAAMpK,OAAS,IAC5E0M,EAAY7N,WAAa,GACzB6N,EAAYC,sBAAwB,GACpCD,EAAYE,2BAA6B,GACzCrI,GAAgBA,EAAcsI,QAAOC,EAAAA,EAAAA,IAAuBJ,GAAcA,GAC1ErN,KAAKmK,gBAAgB+C,QAAQnC,MAAQ,IAGzC/K,KAAKgN,SAAS,CAAExN,WAAY,GAAIsD,iBAAa4D,EAAWiC,oBAAgBjC,KAGpE,KAAAgH,mBAAsBlD,MACrBA,GAASA,EAAM7J,OAASX,KAAKqK,WAC9BrK,KAAKgN,SAAS,CAAExN,WAAYgL,IAG5BxK,KAAK2N,qBACL3N,KAAK2N,oBAAoBC,SAG7B,MAAM,UACF5L,EAAS,QACTiD,EACA8B,MAAM,YAAEsG,IACRrN,KAAK6C,MAET,GAAIoC,EAAS,CACT,GAAIuF,GAASA,EAAM7J,OAAS,EAAG,CAC3B,GAAI6J,EAAM7J,OAASX,KAAKqK,SACpB,OAGJrK,KAAK2N,oBAAsBE,GAAAA,EAAS,KAChCC,EACI,IAAIxO,EACAkL,EACAxK,KAAKE,gBACLF,KAAK+N,mBAAmB/N,KAAKgO,qBAC7BhO,KAAKL,UACLK,KAAKJ,WAETqF,EAAQC,eAEPzC,MAAKwL,IACFjO,KAAKkO,mBAAmB1D,GACnB/H,MAAKsG,IACF/I,KAAKgN,SAAS,CAAElK,YAAamL,EAAStF,eAAgBI,EAClDoF,qBAAsBnO,KAAKoO,2BAA2BH,QAE7DI,OAAMpM,IACHjC,KAAKgN,SAAS,CAAElK,YAAamL,EAAStF,oBAAgBjC,EAClDyH,qBAAsBnO,KAAKoO,2BAA2BH,KAC1DjM,EAAUsM,UAAUrM,GACpBD,EAAUuM,MAAM,wCAG3BF,OAAMpM,IACHjC,KAAKgN,SAAS,CAAElK,iBAAa4D,EAAWiC,oBAAgBjC,EACpDyH,qBAAsBnO,KAAKoO,+BAC/BpM,EAAUsM,UAAUrM,GACpBD,EAAUuM,MAAM,2CAEQvO,KAAKuM,UAEzCiC,YAAW,KACPxO,KAAK2N,wBACE,GAEXN,EAAY7N,WAAagL,OAEzBxK,KAAKgN,SAAS,CAAElK,iBAAa4D,EAAWiC,oBAAgBjC,IACxD2G,EAAY7N,WAAa,GAE7ByF,EAAQC,cAAcsI,QAAOC,EAAAA,EAAAA,IAAuBJ,GAAcA,KAIlE,KAAAU,mBAAsBU,IAC1B,GAAIA,GAAmBA,EAAgB9N,OAAS,EAAG,CAC/C,MAAM+N,EAAoC,GAI1C,OAHAD,GAAmBA,EAAgB7E,SAAQ,CAAC+E,EAAoBC,KAC5DD,EAAmBtP,gBAAkBqP,EAAwBxL,KAAKyL,EAAmBtP,eAAewP,OAAO,GAAGC,cAAgBH,EAAmBtP,eAAe0P,MAAM,OAEnKL,EAAwBM,KAAK,KAExC,MAAO,oCAiBH,KAAAC,cACJpE,IAEA,MACIzD,QAAQ,oBAAEkD,GACVrF,SAAS,cACLC,EACAgK,KACI9H,QAAQ,2BAAEmG,MAGlBvN,KAAK6C,MAEH2H,EAAQxK,KAAKmK,gBAAgB+C,SAAWlN,KAAKmK,gBAAgB+C,QAAQnC,MAG3E,GAFAF,EAAEsE,kBAEG3E,GAAUA,GAA0B,IAAjBA,EAAM7J,QAAiB2J,EAC3CtK,KAAKmK,iBAAmBnK,KAAKmK,gBAAgB+C,SAAWlN,KAAKmK,gBAAgB+C,QAAQkC,YAClF,CACH,MAAM5K,EAAY+I,GAA8B,IAC1C8B,EAAYrP,KAAKsP,oBAAmBC,EAAAA,EAAAA,IAAW,SAAUrK,IAAkB,GAAIsF,EAAOhG,GAC5FgL,SAASC,SAAStL,KAAOkL,IAIzB,KAAAK,0BAA4B,KAChC,MAAM,qBAAExF,EAAoB,YAAEpH,GAAgB9C,KAAKyM,MAE9CvC,GAOGpH,GAAeA,EAAYf,kBAC3B/B,KAAK2M,yBAGT3M,KAAKgN,SAAS,CAAE9C,sBAAsB,KAVtClK,KAAKgN,SAAS,CACV9C,sBAAsB,EACtB1K,WAAY,GACZmQ,gBAAgB,KAWpB,KAAAL,mBAAqB,CAAC5K,EAAe8F,EAAeoF,IACpDlL,GAASA,EAAM/D,OAAS,EACjB6J,GAASA,EAAM7J,OAAS,EAAI,GAAG+D,KAAgC,IAAxBA,EAAMC,QAAQ,KAAc,IAAM,MAAMiL,KAAOpF,IAAU9F,EAEpG,GAGH,KAAA0J,2BAA8ByB,IAA4B,IAAAC,EAC9D,MAAMC,EAAYF,MAAAA,GAAwB,QAAlBC,EAAND,EAAQ9N,wBAAgB,IAAA+N,OAAA,EAAxBA,EAA0BE,QAAOC,GAAGA,EAAE5Q,iBAAmBA,EAAe6Q,UAC1F,GAAsD,OAAlDlQ,KAAKmQ,iCAAiCjD,QAAkB,CACxD,MAAMkD,EAAiBpQ,KAAKmQ,iCAAiCjD,QACvDmD,EAAsB,GAAGrQ,KAAK6C,MAAMsC,UAAUmL,gCAAgCP,MAAAA,OAAS,EAATA,EAAWpP,iBACzF4P,EAAoBvQ,KAAK6C,MAAMsC,UAAUqL,wBAG/C,OAFAJ,EAAeK,UAAYZ,GAAWA,EAAO9N,kBAAoB8N,EAAO9N,iBAAiBpB,OAAS,EAAK0P,EAAsBE,EAC7HH,EAAeM,aAAa,YAAY,aACjCN,EAAeK,UAEtB,MAAO,IA9aXzQ,KAAKmK,gBAAkBtG,EAAAA,YACvB7D,KAAKkM,qBAAuBrI,EAAAA,YAC5B7D,KAAKmQ,iCAAmCtM,EAAAA,YACxC7D,KAAKoN,qBAAuBvJ,EAAAA,YAC5B7D,KAAKiN,cAAgBpJ,EAAAA,YACrB7D,KAAKyM,MAAQ,CACTvC,sBAAsB,EACtB1K,WAAY,GACZmR,0BAA2B,kCAC3BC,0BAA2B,kCAC3BC,2BAA4B,mCAC5B/N,iBAAa4D,EACbiC,oBAAgBjC,EAChByH,qBAAsB,GACtBwB,gBAAgB,GAEpB3P,KAAKqK,SACArK,KAAK6C,MAAMoC,SACRjF,KAAK6C,MAAMoC,QAAQiK,KACnBlP,KAAK6C,MAAMoC,QAAQiK,IAAI9H,QACvBpH,KAAK6C,MAAMoC,QAAQiK,IAAI9H,OAAO0J,sBAClC,GACJ9Q,KAAKgO,oBAAsBhO,KAAK6C,MAAMuE,QAAUpH,KAAK6C,MAAMuE,OAAO2J,wBAClE/Q,KAAKE,gBAAkBF,KAAK6C,MAAMuE,QAAUpH,KAAK6C,MAAMuE,OAAOlH,gBAAkBF,KAAK6C,MAAMuE,OAAOlH,gBAAkB,EACpHF,KAAKgR,gBAAkB,kBACvBhR,KAAKgM,iBAAmB,mBACxBhM,KAAKgD,kBAAmBiO,EAAAA,EAAAA,oBAAmBjR,KAAK6C,MAAMoC,QAAQiC,QAAQgK,kBAAoBlR,KAAK6C,MAAMsO,aAAcnR,KAAK6C,MAAMb,WAG3H,0BACHwN,SAAS4B,MAAQ5B,SAAS4B,KAAKC,iBAAiB,YAAarR,KAAKwM,iBAClE8E,QAAUA,OAAOD,iBAAiB,QAASrR,KAAK4M,QAG7C2E,uBACH/B,SAAS4B,MAAQ5B,SAAS4B,KAAKI,oBAAoB,YAAaxR,KAAKwM,iBAAiB,GACtF8E,QAAUA,OAAOE,oBAAoB,QAASxR,KAAK4M,QAAQ,GAGxD6E,qBACH,MACIrK,QAAQ,gBAAE6C,IACVjK,KAAK6C,OACH,qBAAEqH,EAAoB,eAAEyF,GAAmB3P,KAAKyM,MAEjDzM,KAAK6C,MAAMoC,QAAQiC,QAAQwK,OAAOC,YAC9B1H,GAAmBC,EACpBlK,KAAKmK,iBAAmBnK,KAAKmK,gBAAgB+C,SAAWlN,KAAKmK,gBAAgB+C,QAAQkC,QAC7EO,GACR3P,KAAKkM,sBAAwBlM,KAAKkM,qBAAqBgB,SAAWlN,KAAKkM,qBAAqBgB,QAAQkC,SAMzGwC,SACH,MAAM,QACF3M,EACAE,WAAW,WAAE8G,EAAU,sBAAE4F,EAAqB,mBAAEC,EAAkB,mBAAEC,EAAkB,mBAAEC,GACxF5K,QAAQ,gBAAE6C,EAAe,oBAAEK,EAAmB,sBAAE2H,EAAqB,UAAEnO,EAAY,KACnF9D,KAAK6C,OAEH,qBACFqH,EAAoB,WACpB1K,EAAU,0BACVmR,EAAyB,0BACzBC,EAAyB,2BACzBC,EAA0B,YAC1B/N,EAAW,eACX6F,GACA3I,KAAKyM,MAEHjI,EAAaS,GAAWA,EAAQiK,KAAOjK,EAAQiK,IAAI9H,QAAUnC,EAAQiK,IAAI9H,OAAOmG,4BAA+B,IAC/GhJ,GAAgBgL,EAAAA,EAAAA,IAAW,SAAUtK,GAAWA,EAAQC,gBAAkB,GAC1EmK,EAAYrP,KAAKsP,mBAAmB/K,EAAe/E,EAAYgF,GAC/DwF,EAAoBiI,GAAyBA,EAAsBtR,OAAS,EAAIsR,EAAwB,qBAExGC,EACFpP,GACAA,EAAYf,kBACZe,EAAYf,iBAAiBiO,QACzBC,GAAKA,EAAE5Q,iBAAmBA,EAAe8S,SAAWlC,EAAE5Q,iBAAmBA,EAAe+S,OAE1FC,EACFvP,GACAA,EAAYf,kBACZe,EAAYf,iBAAiBiO,QAAOC,GAAKA,EAAE5Q,iBAAmBA,EAAe6Q,UAC3EoC,EACFxP,GACAA,EAAYf,kBACZe,EAAYf,iBAAiBiO,QAAOC,GAAKA,EAAE5Q,iBAAmBA,EAAekT,WAE3EC,EAAShM,EAAAA,EAAA,GACPxG,KAAK6C,OAA2C,IAEpDwJ,OAAQ,CACJoG,YAAazS,KAAK6C,MAClBiB,UAAW,GAAG4O,GAAAA,CAAW,YAAa5O,MAAcwG,EAAsB,YAAc,iBAE5FqI,qBAAsB,CAClBrM,IAAK,MACLxC,UAAW,iCACX,YAAa,YACbwH,IAAKtL,KAAKmQ,kCAEdyC,yBAA0B5S,KAAKyM,MAAM0B,qBACrC3O,WAAYQ,KAAKyM,MAAMjN,WACvBqT,YAAa,CACTvH,IAAKtL,KAAKoN,qBACVtJ,UAAW,0BAEfgP,eAAgB,CACZhP,UAAW6M,GAEfoC,eAAgB,CACZjP,UAAW8M,GAEfoC,gBAAiB,CACblP,UAAW+M,GAEfoC,WAAY,CACRnP,UAAW,GAAG9D,KAAKgR,mBAAmB9G,EAAuB,UAAY,YAAY/H,GAAG,mBAE5F+Q,YAAa,CACT5M,IAAK,OACLgF,IAAKtL,KAAKiN,cACVnJ,UAAW,wBACX,aAAc,SACdsH,KAAM,aACN+H,KAAM,SACN/Q,OAAQiN,EACR+D,aAAc,MACdC,SAAUrT,KAAKiP,eAEnBqE,UAAW,CACPhN,IAAK,KACLxC,UAAW4O,GAAAA,CAAW,wCAAyC5O,IAEnEyP,UAAW,CACPjN,IAAK,KACLxC,UAAW4O,GAAAA,CAAW,wCAAyC5O,IAEnE0P,WAAY,CACRlN,IAAK,KACLxC,UAAW4O,GAAAA,CAAW,yCAA0C5O,IAEpE6H,MAAMI,EAAe,CACjB7B,qBAAsBA,EACtB8B,iBAAkB,GAAGhM,KAAKgM,oBAAoB9B,EAAuB,UAAY,YACjF+B,WAAYA,EACZ4F,sBAAuBA,EACvB3F,qBAAsBlM,KAAKkM,qBAC3BjC,gBAAiBA,EACjBM,yBAA0BvK,KAAK0P,0BAC/B1M,iBAAkBhD,KAAKgD,mBAE3ByQ,KAAM1J,EAAc,CAChBU,gBAAiBqH,EACjBpH,gBAAiBqH,EACjBpH,gBAAiBqH,EACjB/H,gBAAiBA,EACjBE,gBAAiBnK,KAAKmK,gBACtBD,qBAAsBA,EACtBI,oBAAqBA,EACrBF,kBAAmBpK,KAAK0N,mBACxBnD,yBAA0BvK,KAAK0P,0BAC/BrF,SAAUrK,KAAKqK,SACf7F,UAAWA,EACXwF,kBAAmBA,EACnBQ,MAAOhL,IAEXkU,mBACIlU,GAAcA,EAAWmB,OAAS,GAAKuR,GAAsBA,EAAmBvR,OAAS,EACnFiC,EAA4B,CACxB+N,0BAA2BA,EAC3BpM,cAAeA,EACfC,UAAWA,EACX7E,UAAWK,KAAKL,UAChBC,UAAWI,KAAKJ,UAChBoF,iBAAkBhF,KAAK6C,MACvBrD,WAAYA,EACZsD,YAAaoP,EACblP,iBAAkBhD,KAAKgD,wBAE3B0D,EACViN,mBACInU,GAAcA,EAAWmB,OAAS,GAAK0R,GAAsBA,EAAmB1R,OAAS,EACnFoE,EAA4B,CACxB6L,0BAA2BA,EAC3BrM,cAAeA,EACfC,UAAWA,EACX7E,UAAWK,KAAKL,UAChBC,UAAWI,KAAKJ,UAChBoF,iBAAkBhF,KAAK6C,MACvBrD,WAAYA,EACZsD,YAAauP,EACbrQ,UAAWhC,KAAK6C,MAAMb,UACtBqD,WAAYrF,KAAK6C,MAAMiE,SACvBxB,SAAUtF,KAAK6C,MAAMV,GACrBa,iBAAkBhD,KAAKgD,wBAE3B0D,EACVkN,oBACIpU,GAAcA,EAAWmB,OAAS,GAAK2R,GAAuBA,EAAoB3R,OAAS,EACrFwH,EAA6B,CACzB0I,2BAA4BA,EAC5BtM,cAAeA,EACfC,UAAWA,EACX7E,UAAWK,KAAKL,UAChBC,UAAWI,KAAKJ,UAChBoF,iBAAkBhF,KAAK6C,MACvBrD,WAAYA,EACZsD,YAAawP,EACb3J,eAAgBA,EAChB3F,iBAAkBhD,KAAKgD,wBAE3B0D,EACVmN,UAAW,CACPtJ,yBAA0BvK,KAAK0P,2BAEnCxF,qBAAsBlK,KAAKyM,MAAMvC,uBAGrC,OAAOlK,KAAK6C,MAAMiR,WAAWtB,GAqIzB,yBAAyBhT,GAC7B,MAAQ0F,cAAe3E,GAAQP,KAAK6C,MAAMoC,QAC1C,OAAO8O,EAAAA,EAAAA,+BACH,CAAExS,cAAehB,GACjB,CACIG,gBAAiBlB,EACjBoB,QAAS,CACLC,WAAYN,EAAIO,eAAeC,YAAYC,UAC3CC,WAAYV,EAAIO,eAAeC,YAAYG,cAuE/D,kGCpgBA,MAsCM8S,EAAcA,CAACP,EAA4BR,EAAwBC,IAEjErP,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK+O,GACNpP,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKgP,GACLO,EAAK3H,UACL2H,EAAK9H,MACL8H,EAAKpT,MACLoT,EAAK7H,YAMhBsI,EAA4BA,CAC9BpB,EACAQ,EACApB,IAGIA,GACIrO,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK4O,GACNjP,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKoP,GACLpB,EAAmB9O,KAAKzB,KAAIyB,GAClBA,MAQzB+Q,EAA4BA,CAC9BpB,EACAQ,EACAlB,IAGIA,GACIxO,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK6O,GACNlP,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKqP,GACLlB,EAAmB9M,MACnB8M,EAAmB5M,MAAM9D,KAAI,CAACC,EAAMgN,IAE7B/K,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKtC,EAAKsE,UAAS,CAAEnC,IAAKnC,EAAKO,IAAMyM,IACtC/K,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKtC,EAAKwE,UACVxE,EAAKgE,UACLhE,EAAKwB,KACLxB,EAAKkE,YAWpCsO,EAA6BA,CAC/BpB,EACAQ,EACAlB,IAGIA,GACIzO,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK8O,GACNnP,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKsP,GACLlB,EAAoB/M,MACpB+M,EAAoBlP,KAAKzB,KAAIyB,GACnBA,MAQ/B,EAnH+CP,IAC3C,MAAM,OACFwJ,EAAM,qBACNsG,EAAoB,yBACpBC,EAAwB,WACxBpT,EAAU,YACVqT,EAAW,eACXC,EAAc,eACdC,EAAc,gBACdC,EAAe,UACfM,EAAS,UACTC,EAAS,WACTC,EAAU,KACVC,EAAI,oBACJG,EAAmB,mBACnBF,EAAkB,mBAClBC,EAAkB,WAClBV,EAAU,YACVC,EAAW,MACXvH,GACA9I,EAEJ,OACIgB,EAAAA,cAACwQ,EAAAA,OAAMpQ,OAAAC,OAAA,GAAKmI,GACPV,EACAqI,EAAYP,EAA8BR,EAAYC,GACvDrP,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK2O,GACLrT,GAAcA,EAAWmB,OAAS,EAC/BkD,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKyO,GAAuBC,GAAmC,GAEvEsB,EAA0BpB,EAAgBQ,EAAWI,GACrDS,EAA0BpB,EAAgBQ,EAAWI,GACrDS,EAA2BpB,EAAiBQ,EAAYI,8FChCzE,MAwCMI,EAAcA,CAACP,EAA4BP,IAEzCrP,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKgP,GACLO,EAAK3H,UACNjI,EAAAA,cAAA,OAAKC,UAAU,gCACfD,EAAAA,cAAA,OAAKC,UAAU,6BACV2P,EAAK9H,MACL8H,EAAKpT,OAEToT,EAAK7H,WAKZsI,EAA4BA,CAC9BpB,EACAQ,EACApB,IAGIA,GACIrO,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK4O,GACNjP,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKoP,GACLpB,EAAmB9O,KAAKzB,KAAIyB,GAClBA,MAQzB+Q,EAA4BA,CAC9BpB,EACAQ,EACAlB,IAGIA,GACIxO,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK6O,GACNlP,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKqP,GACLlB,EAAmB9M,MACnB8M,EAAmB5M,MAAM9D,KAAI,CAACC,EAAMgN,IAE7B/K,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKtC,EAAKsE,UAAS,CAAEnC,IAAKnC,EAAKO,IAAMyM,IACtC/K,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKtC,EAAKwE,UACVxE,EAAKgE,UACLhE,EAAKwB,KACNS,EAAAA,cAAA,QAAMC,UAAU,8CAA8ClC,EAAKkE,aAWjGsO,EAA6BA,CAC/BpB,EACAQ,EACAlB,IAGIA,GACIzO,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK8O,GACNnP,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKsP,GACLlB,EAAoB/M,MACpB+M,EAAoBlP,KAAKzB,KAAIyB,GACnBA,MAQ/B,EAtH+CP,IAC3C,MAAM,OACFwJ,EAAM,qBACNsG,EAAoB,yBACpBC,EAAwB,WACxBpT,EAAU,YACVqT,EAAW,eACXC,EAAc,eACdC,EAAc,gBACdC,EAAe,UACfM,EAAS,UACTC,EAAS,WACTC,EAAU,KACVC,EAAI,oBACJG,EAAmB,mBACnBF,EAAkB,mBAClBC,EAAkB,WAClBV,EAAU,YACVC,EAAW,MACXvH,GACA9I,EAEJ,OACIgB,EAAAA,cAACwQ,EAAAA,OAAMpQ,OAAAC,OAAA,GAAKmI,GACPV,EACD9H,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK+O,GACLe,EAAYP,EAA8BP,GAC3CrP,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK2O,GACLrT,GAAcA,EAAWmB,OAAS,EAC/BkD,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKyO,GAAuBC,GAAmC,GAEvEsB,EAA0BpB,EAAgBQ,EAAWI,GACrDS,EAA0BpB,EAAgBQ,EAAWI,GACrDS,EAA2BpB,EAAiBQ,EAAYI,+FCjC7E,MAsCMI,EAAcA,CAACP,EAA4BR,EAAwBC,IAEjErP,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK+O,GACNpP,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKgP,GACLO,EAAK3H,UACL2H,EAAK9H,MACL8H,EAAKpT,MACLoT,EAAK7H,YAMhBsI,EAA4BA,CAC9BpB,EACAQ,EACApB,IAGIA,GACIrO,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK4O,GACNjP,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKoP,GACLpB,EAAmB9O,KAAKzB,KAAIyB,GAClBA,MAQzB+Q,EAA4BA,CAC9BpB,EACAQ,EACAlB,IAGIA,GACIxO,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK6O,GACNlP,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKqP,GACLlB,EAAmB9M,MACnB8M,EAAmB5M,MAAM9D,KAAI,CAACC,EAAMgN,IAE7B/K,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKtC,EAAKsE,UAAS,CAAEnC,IAAKnC,EAAKO,IAAMyM,IACtC/K,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKtC,EAAKwE,UACVxE,EAAKgE,UACLhE,EAAKwB,KACU,IAAfxB,EAAKkE,OAAgBjC,EAAAA,cAAA,OAAKC,UAAU,wBAAwBlC,EAAKkE,aAWhGsO,EAA6BA,CAC/BpB,EACAQ,EACAlB,IAGIA,GACIzO,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK8O,GACNnP,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKsP,GACLlB,EAAoB/M,MACpB+M,EAAoBlP,KAAKzB,KAAIyB,GACnBA,MAQ/B,EAnH+CP,IAC3C,MAAM,OACFwJ,EAAM,qBACNsG,EAAoB,yBACpBC,EAAwB,WACxBpT,EAAU,YACVqT,EAAW,eACXC,EAAc,eACdC,EAAc,gBACdC,EAAe,UACfM,EAAS,UACTC,EAAS,WACTC,EAAU,KACVC,EAAI,oBACJG,EAAmB,mBACnBF,EAAkB,mBAClBC,EAAkB,WAClBV,EAAU,YACVC,EAAW,MACXvH,GACA9I,EAEJ,OACIgB,EAAAA,cAACwQ,EAAAA,OAAMpQ,OAAAC,OAAA,GAAKmI,GACPV,EACAqI,EAAYP,EAA8BR,EAAYC,GACvDrP,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK2O,GACLrT,GAAcA,EAAWmB,OAAS,EAC/BkD,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKyO,GAAuBC,GAAmC,GAEvEsB,EAA0BpB,EAAgBQ,EAAWI,GACrDS,EAA0BpB,EAAgBQ,EAAWI,GACrDS,EAA2BpB,EAAiBQ,EAAYI,8FChCzE,MAsCMI,EAAcA,CAACP,EAA4BR,EAAwBC,IAEjErP,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK+O,GACNpP,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKgP,GACLO,EAAK3H,UACL2H,EAAK9H,MACL8H,EAAKpT,MACLoT,EAAK7H,YAMhBsI,EAA4BA,CAC9BpB,EACAQ,EACApB,IAGIA,GACIrO,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK4O,GACNjP,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKoP,GACLpB,EAAmB9O,KAAKzB,KAAIyB,GAClBA,MAQzB+Q,EAA4BA,CAC9BpB,EACAQ,EACAlB,IAGIA,GACIxO,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK6O,GACNlP,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKqP,GACLlB,EAAmB9M,MACnB8M,EAAmB5M,MAAM9D,KAAI,CAACC,EAAMgN,IAE7B/K,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKtC,EAAKsE,UAAS,CAAEnC,IAAKnC,EAAKO,IAAMyM,IACtC/K,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKtC,EAAKwE,UACVxE,EAAKgE,UACLhE,EAAKwB,KACU,IAAfxB,EAAKkE,OAAgBjC,EAAAA,cAAA,OAAKC,UAAU,wBAAwBlC,EAAKkE,aAWhGsO,EAA6BA,CAC/BpB,EACAQ,EACAlB,IAGIA,GACIzO,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK8O,GACNnP,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKsP,GACLlB,EAAoB/M,MACpB+M,EAAoBlP,KAAKzB,KAAIyB,GACnBA,MAQ/B,EAnH+CP,IAC3C,MAAM,OACFwJ,EAAM,qBACNsG,EAAoB,yBACpBC,EAAwB,WACxBpT,EAAU,YACVqT,EAAW,eACXC,EAAc,eACdC,EAAc,gBACdC,EAAe,UACfM,EAAS,UACTC,EAAS,WACTC,EAAU,KACVC,EAAI,oBACJG,EAAmB,mBACnBF,EAAkB,mBAClBC,EAAkB,WAClBV,EAAU,YACVC,EAAW,MACXvH,GACA9I,EAEJ,OACIgB,EAAAA,cAACwQ,EAAAA,OAAMpQ,OAAAC,OAAA,GAAKmI,GACPV,EACAqI,EAAYP,EAA8BR,EAAYC,GACvDrP,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK2O,GACLrT,GAAcA,EAAWmB,OAAS,EAC/BkD,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKyO,GAAuBC,GAAmC,GAEvEsB,EAA0BpB,EAAgBQ,EAAWI,GACrDS,EAA0BpB,EAAgBQ,EAAWI,GACrDS,EAA2BpB,EAAiBQ,EAAYI,8FChCzE,MAsCMI,EAAcA,CAACP,EAA4BR,EAAwBC,IAEjErP,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK+O,GACNpP,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKgP,GACLO,EAAK3H,UACL2H,EAAK9H,MACL8H,EAAKpT,MACLoT,EAAK7H,YAMhBsI,EAA4BA,CAC9BpB,EACAQ,EACApB,IAGIA,GACIrO,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK4O,GACNjP,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKoP,GACLpB,EAAmB9O,KAAKzB,KAAIyB,GAClBA,MAQzB+Q,EAA4BA,CAC9BpB,EACAQ,EACAlB,IAGIA,GACIxO,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK6O,GACNlP,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKqP,GACLlB,EAAmB9M,MACnB8M,EAAmB5M,MAAM9D,KAAI,CAACC,EAAMgN,IAE7B/K,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKtC,EAAKsE,UAAS,CAAEnC,IAAKnC,EAAKO,IAAMyM,IACtC/K,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKtC,EAAKwE,UACVxE,EAAKgE,UACLhE,EAAKwB,KACU,IAAfxB,EAAKkE,OAAgBjC,EAAAA,cAAA,OAAKC,UAAU,wBAAwBlC,EAAKkE,aAWhGsO,EAA6BA,CAC/BpB,EACAQ,EACAlB,IAGIA,GACIzO,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK8O,GACNnP,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKsP,GACLlB,EAAoB/M,MACpB+M,EAAoBlP,KAAKzB,KAAIyB,GACnBA,MAQ/B,EAnH+CP,IAC3C,MAAM,OACFwJ,EAAM,qBACNsG,EAAoB,yBACpBC,EAAwB,WACxBpT,EAAU,YACVqT,EAAW,eACXC,EAAc,eACdC,EAAc,gBACdC,EAAe,UACfM,EAAS,UACTC,EAAS,WACTC,EAAU,KACVC,EAAI,oBACJG,EAAmB,mBACnBF,EAAkB,mBAClBC,EAAkB,WAClBV,EAAU,YACVC,EAAW,MACXvH,GACA9I,EAEJ,OACIgB,EAAAA,cAACwQ,EAAAA,OAAMpQ,OAAAC,OAAA,GAAKmI,GACPV,EACAqI,EAAYP,EAA8BR,EAAYC,GACvDrP,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK2O,GACLrT,GAAcA,EAAWmB,OAAS,EAC/BkD,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKyO,GAAuBC,GAAmC,GAEvEsB,EAA0BpB,EAAgBQ,EAAWI,GACrDS,EAA0BpB,EAAgBQ,EAAWI,GACrDS,EAA2BpB,EAAiBQ,EAAYI,8FChCzE,MAsCMI,EAAcA,CAACP,EAA4BR,EAAwBC,IAEjErP,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK+O,GACNpP,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKgP,GACLO,EAAK3H,UACL2H,EAAK9H,MACL8H,EAAKpT,MACLoT,EAAK7H,YAMhBsI,EAA4BA,CAC9BpB,EACAQ,EACApB,IAGIA,GACIrO,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK4O,GACNjP,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKoP,GACLpB,EAAmB9O,KAAKzB,KAAIyB,GAClBA,MAQzB+Q,EAA4BA,CAC9BpB,EACAQ,EACAlB,IAGIA,GACIxO,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK6O,GACNlP,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKqP,GACLlB,EAAmB9M,MACnB8M,EAAmB5M,MAAM9D,KAAI,CAACC,EAAMgN,IAE7B/K,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKtC,EAAKsE,UAAS,CAAEnC,IAAKnC,EAAKO,IAAMyM,IACtC/K,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKtC,EAAKwE,UACVxE,EAAKgE,UACLhE,EAAKwB,KACU,IAAfxB,EAAKkE,OAAgBjC,EAAAA,cAAA,OAAKC,UAAU,wBAAwBlC,EAAKkE,aAWhGsO,EAA6BA,CAC/BpB,EACAQ,EACAlB,IAGIA,GACIzO,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK8O,GACNnP,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKsP,GACLlB,EAAoB/M,MACpB+M,EAAoBlP,KAAKzB,KAAIyB,GACnBA,MAQ/B,EAnH+CP,IAC3C,MAAM,OACFwJ,EAAM,qBACNsG,EAAoB,yBACpBC,EAAwB,WACxBpT,EAAU,YACVqT,EAAW,eACXC,EAAc,eACdC,EAAc,gBACdC,EAAe,UACfM,EAAS,UACTC,EAAS,WACTC,EAAU,KACVC,EAAI,oBACJG,EAAmB,mBACnBF,EAAkB,mBAClBC,EAAkB,WAClBV,EAAU,YACVC,EAAW,MACXvH,GACA9I,EAEJ,OACIgB,EAAAA,cAACwQ,EAAAA,OAAMpQ,OAAAC,OAAA,GAAKmI,GACPV,EACAqI,EAAYP,EAA8BR,EAAYC,GACvDrP,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK2O,GACLrT,GAAcA,EAAWmB,OAAS,EAC/BkD,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKyO,GAAuBC,GAAmC,GAEvEsB,EAA0BpB,EAAgBQ,EAAWI,GACrDS,EAA0BpB,EAAgBQ,EAAWI,GACrDS,EAA2BpB,EAAiBQ,EAAYI,wGCrCzE,MA2BA,EA3BwE/Q,GACpEgB,EAAAA,cAACA,EAAAA,SAAc,KACXA,EAAAA,cAACyQ,EAAAA,SAAQ,CACDxQ,UAAW4O,GAAAA,CAAW7P,EAAM0R,gBAC5BC,YAAa3R,EAAM2R,YACnBC,KAAM5R,EAAM4R,KACZC,SAAU7R,EAAM6R,SAChBC,QAAO9R,EAAMuE,OAAOwN,cAAe,QACnCC,KAAMhS,EAAMuE,OAAO0N,SAAW,gBAAapO,EAC3CoO,SAAUjS,EAAMuE,OAAO0N,SACvBC,SAAUlS,EAAMuE,OAAO2N,SACvBC,eAAiBnS,EAAMuE,OAAO4N,eAAkBnS,EAAMuE,OAAO4N,oBAAiBtO,EAC9EjB,MAAO5C,EAAMoS,OAASpS,EAAMoS,MAAMC,SAAWrS,EAAMoS,MAAMC,QAAQvU,OAASkC,EAAMoS,MAAMC,QAAU,GAChGC,YAAatS,EAAMuE,OAAO+N,YAC1BC,eAAgBvS,EAAMuE,OAAOgO,eAC7BC,yBAA0BxS,EAAMwS,yBAChCC,sBAAuBzS,EAAMyS,sBAC7BC,wBAAyB1S,EAAMsC,WAAatC,EAAMsC,UAAUqQ,0BAC5DC,kBAAmB5S,EAAMsC,WAAatC,EAAMsC,UAAUuQ,kBACtDC,kBAAmB9S,EAAMsC,WAAatC,EAAMsC,UAAUyQ,gBACtDC,kBAAmBhT,EAAMsC,WAAatC,EAAMsC,UAAU2Q,YACtDC,eAAgBlT,EAAMkT,eACtBC,gBAAiBnT,EAAMmT,2GCjBvC,MAsCMhC,EAAcA,CAACP,EAA4BR,EAAwBC,IAEjErP,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK+O,GACNpP,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKgP,GACLO,EAAK3H,UACL2H,EAAK9H,MACL8H,EAAKpT,MACLoT,EAAK7H,YAMhBsI,EAA4BA,CAC9BpB,EACAQ,EACApB,IAGIA,GACIrO,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK4O,GACNjP,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKoP,GACLpB,EAAmB9O,KAAKzB,KAAIyB,GAClBA,MAQzB+Q,EAA4BA,CAC9BpB,EACAQ,EACAlB,IAGIA,GACIxO,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK6O,GACNlP,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKqP,GACLlB,EAAmB9M,MACnB8M,EAAmB5M,MAAM9D,KAAI,CAACC,EAAMgN,IAE7B/K,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKtC,EAAKsE,UAAS,CAAEnC,IAAKnC,EAAKO,IAAMyM,IACtC/K,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKtC,EAAKwE,UACVxE,EAAKgE,UACLhE,EAAKwB,KACU,IAAfxB,EAAKkE,OAAgBjC,EAAAA,cAAA,OAAKC,UAAU,wBAAwBlC,EAAKkE,aAWhGsO,EAA6BA,CAC/BpB,EACAQ,EACAlB,IAGIA,GACIzO,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK8O,GACNnP,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKsP,GACLlB,EAAoB/M,MACpB+M,EAAoBlP,KAAKzB,KAAIyB,GACnBA,MAQ/B,EAnH+CP,IAC3C,MAAM,OACFwJ,EAAM,qBACNsG,EAAoB,yBACpBC,EAAwB,WACxBpT,EAAU,YACVqT,EAAW,eACXC,EAAc,eACdC,EAAc,gBACdC,EAAe,UACfM,EAAS,UACTC,EAAS,WACTC,EAAU,KACVC,EAAI,oBACJG,EAAmB,mBACnBF,EAAkB,mBAClBC,EAAkB,WAClBV,EAAU,YACVC,EAAW,MACXvH,GACA9I,EAEJ,OACIgB,EAAAA,cAACwQ,EAAAA,OAAMpQ,OAAAC,OAAA,GAAKmI,GACPV,EACAqI,EAAYP,EAA8BR,EAAYC,GACvDrP,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK2O,GACLrT,GAAcA,EAAWmB,OAAS,EAC/BkD,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKyO,GAAuBC,GAAmC,GAEvEsB,EAA0BpB,EAAgBQ,EAAWI,GACrDS,EAA0BpB,EAAgBQ,EAAWI,GACrDS,EAA2BpB,EAAiBQ,EAAYI,8FChCzE,MAsCMI,EAAcA,CAACP,EAA4BR,EAAwBC,IAEjErP,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK+O,GACNpP,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKgP,GACLO,EAAK3H,UACL2H,EAAK9H,MACL8H,EAAKpT,MACLoT,EAAK7H,YAMhBsI,EAA4BA,CAC9BpB,EACAQ,EACApB,IAGIA,GACIrO,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK4O,GACNjP,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKoP,GACLpB,EAAmB9O,KAAKzB,KAAIyB,GAClBA,MAQzB+Q,EAA4BA,CAC9BpB,EACAQ,EACAlB,IAGIA,GACIxO,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK6O,GACNlP,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKqP,GACLlB,EAAmB9M,MACnB8M,EAAmB5M,MAAM9D,KAAI,CAACC,EAAMgN,IAE7B/K,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKtC,EAAKsE,UAAS,CAAEnC,IAAKnC,EAAKO,IAAMyM,IACtC/K,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKtC,EAAKwE,UACVxE,EAAKgE,UACLhE,EAAKwB,KACU,IAAfxB,EAAKkE,OAAgBjC,EAAAA,cAAA,OAAKC,UAAU,wBAAwBlC,EAAKkE,aAWhGsO,EAA6BA,CAC/BpB,EACAQ,EACAlB,IAGIA,GACIzO,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK8O,GACNnP,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKsP,GACLlB,EAAoB/M,MACpB+M,EAAoBlP,KAAKzB,KAAIyB,GACnBA,MAQ/B,EAnH+CP,IAC3C,MAAM,OACFwJ,EAAM,qBACNsG,EAAoB,yBACpBC,EAAwB,WACxBpT,EAAU,YACVqT,EAAW,eACXC,EAAc,eACdC,EAAc,gBACdC,EAAe,UACfM,EAAS,UACTC,EAAS,WACTC,EAAU,KACVC,EAAI,oBACJG,EAAmB,mBACnBF,EAAkB,mBAClBC,EAAkB,WAClBV,EAAU,YACVC,EAAW,MACXvH,GACA9I,EAEJ,OACIgB,EAAAA,cAACwQ,EAAAA,OAAMpQ,OAAAC,OAAA,GAAKmI,GACPV,EACAqI,EAAYP,EAA8BR,EAAYC,GACvDrP,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK2O,GACLrT,GAAcA,EAAWmB,OAAS,EAC/BkD,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKyO,GAAuBC,GAAmC,GAEvEsB,EAA0BpB,EAAgBQ,EAAWI,GACrDS,EAA0BpB,EAAgBQ,EAAWI,GACrDS,EAA2BpB,EAAiBQ,EAAYI,8FChCzE,MAsCMI,EAAcA,CAACP,EAA4BR,EAAwBC,IAEjErP,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK+O,GACNpP,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKgP,GACLO,EAAK3H,UACL2H,EAAK9H,MACL8H,EAAKpT,MACLoT,EAAK7H,YAMhBsI,EAA4BA,CAC9BpB,EACAQ,EACApB,IAGIA,GACIrO,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK4O,GACNjP,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKoP,GACLpB,EAAmB9O,KAAKzB,KAAIyB,GAClBA,MAQzB+Q,EAA4BA,CAC9BpB,EACAQ,EACAlB,IAGIA,GACIxO,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK6O,GACNlP,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKqP,GACLlB,EAAmB9M,MACnB8M,EAAmB5M,MAAM9D,KAAI,CAACC,EAAMgN,IAE7B/K,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKtC,EAAKsE,UAAS,CAAEnC,IAAKnC,EAAKO,IAAMyM,IACtC/K,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKtC,EAAKwE,UACVxE,EAAKgE,UACLhE,EAAKwB,KACU,IAAfxB,EAAKkE,OAAgBjC,EAAAA,cAAA,OAAKC,UAAU,wBAAwBlC,EAAKkE,aAWhGsO,EAA6BA,CAC/BpB,EACAQ,EACAlB,IAGIA,GACIzO,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK8O,GACNnP,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKsP,GACLlB,EAAoB/M,MACpB+M,EAAoBlP,KAAKzB,KAAIyB,GACnBA,MAQ/B,EAnH+CP,IAC3C,MAAM,OACFwJ,EAAM,qBACNsG,EAAoB,yBACpBC,EAAwB,WACxBpT,EAAU,YACVqT,EAAW,eACXC,EAAc,eACdC,EAAc,gBACdC,EAAe,UACfM,EAAS,UACTC,EAAS,WACTC,EAAU,KACVC,EAAI,oBACJG,EAAmB,mBACnBF,EAAkB,mBAClBC,EAAkB,WAClBV,EAAU,YACVC,EAAW,MACXvH,GACA9I,EAEJ,OACIgB,EAAAA,cAACwQ,EAAAA,OAAMpQ,OAAAC,OAAA,GAAKmI,GACPV,EACAqI,EAAYP,EAA8BR,EAAYC,GACvDrP,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK2O,GACLrT,GAAcA,EAAWmB,OAAS,EAC/BkD,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKyO,GAAuBC,GAAmC,GAEvEsB,EAA0BpB,EAAgBQ,EAAWI,GACrDS,EAA0BpB,EAAgBQ,EAAWI,GACrDS,EAA2BpB,EAAiBQ,EAAYI,wGCjCzE,MA2BA,EA3BmD/Q,GAC/CgB,EAAAA,cAACA,EAAAA,SAAc,KACXA,EAAAA,cAACyQ,EAAAA,SAAQ,CACLxQ,UAAW4O,GAAAA,CAAW7P,EAAM0R,eAAgB1R,EAAMuE,OAAOtD,WACzD0Q,YAAa3R,EAAM2R,YACnBC,KAAM5R,EAAM4R,KACZC,SAAU7R,EAAM6R,SAChBC,QAAO9R,EAAMuE,OAAOwN,cAAe,QACnCC,KAAMhS,EAAMuE,OAAO0N,SAAW,gBAAapO,EAC3CoO,SAAUjS,EAAMuE,OAAO0N,SACvBC,SAAUlS,EAAMuE,OAAO2N,SACvBC,eAAiBnS,EAAMuE,OAAO4N,eAAkBnS,EAAMuE,OAAO4N,oBAAiBtO,EAC9EjB,MAAO5C,EAAMoS,OAASpS,EAAMoS,MAAMC,SAAWrS,EAAMoS,MAAMC,QAAQvU,OAASkC,EAAMoS,MAAMC,QAAU,GAChGC,YAAatS,EAAMuE,OAAO+N,YAC1BC,eAAgBvS,EAAMuE,OAAOgO,eAC7BC,yBAA0BxS,EAAMwS,yBAChCC,sBAAuBzS,EAAMyS,sBAC7BC,wBAAyB1S,EAAMsC,WAAatC,EAAMsC,UAAUqQ,0BAC5DC,kBAAmB5S,EAAMsC,WAAatC,EAAMsC,UAAUuQ,kBACtDC,kBAAmB9S,EAAMsC,WAAatC,EAAMsC,UAAUyQ,gBACtDC,kBAAmBhT,EAAMsC,WAAatC,EAAMsC,UAAU2Q,YACtDC,eAAgBlT,EAAMkT,eACtBC,gBAAiBnT,EAAMmT,2GCrBnC,MAuBMC,EAAiBpL,IAEnB,GADkB2E,SAAS0G,uBAAuB,2BACnC,CAEX,MAAMC,EAAY3G,SAAS4G,eAAe,mBACpCC,EAAWF,MAAAA,OAAS,EAATA,EAAWG,iBAAiB,2EACvCC,EAAiBF,EAAS,GAC1BG,EAAgBH,EAASA,EAAS1V,OAAS,GAEjD,GAAIkK,EAAE4L,SAAW5L,EAAE6L,OACf,OAGJ,MAAMC,EAAO,CACTC,EAAG,KACK/L,EAAEgM,UAAYhM,EAAEC,SAAWyL,IAC3BC,EAAcpH,QACd0H,QAAQC,IAAI,kBACZlM,EAAEsE,kBAGFtE,EAAEC,SAAW0L,IACbD,EAAenH,QACf0H,QAAQC,IAAI,mBACZlM,EAAEsE,oBAIVwH,EAAK9L,EAAEgC,UACP8J,EAAK9L,EAAEgC,aAKbmH,EAAcA,CAACP,EAA4BP,EAAyBrQ,KACtE,MAAM,qBACF8P,EAAoB,yBACpBC,EAAwB,WACxBpT,EAAU,YACVqT,EAAW,eACXC,EAAc,eACdC,EAAc,gBACdC,EAAe,UACfM,EAAS,UACTC,EAAS,WACTC,EAAU,oBACVI,EAAmB,mBACnBF,EAAkB,mBAClBC,GACA9Q,EACJ,OACIgB,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKgP,GACLO,EAAK3H,UACNjI,EAAAA,cAAA,OAAKC,UAAU,gCACfD,EAAAA,cAAA,OAAKC,UAAU,6BACV2P,EAAK9H,MACL8H,EAAKpT,MACNwD,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK2O,GACLrT,GAAcA,EAAWmB,OAAS,EAC/BkD,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKyO,GAAuBC,GAAmC,GAEvEsB,EAA0BpB,EAAgBQ,EAAWI,GACrDS,EAA0BpB,EAAgBQ,EAAWI,GACrDS,EAA2BpB,EAAiBQ,EAAYI,KAGhEH,EAAK7H,YAKZsI,EAA4BA,CAC9BpB,EACAQ,EACApB,IAGIA,GACIrO,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK4O,GACNjP,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKoP,GACLpB,EAAmB9O,KAAKzB,KAAIyB,GAClBA,MAQzB+Q,EAA4BA,CAC9BpB,EACAQ,EACAlB,IAGIA,GAEIxO,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK6O,GACNlP,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKqP,GACLlB,EAAmB9M,MACnB8M,EAAmB5M,MAAM9D,KAAI,CAACC,EAAMgN,IAE7B/K,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKtC,EAAKsE,UAAS,CAAEnC,IAAKnC,EAAKO,IAAMyM,IACtC/K,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKtC,EAAKwE,UACVxE,EAAKgE,UACLhE,EAAKwB,KACNS,EAAAA,cAAA,QAAMC,UAAU,8CAA8ClC,EAAKkE,aAWjGsO,EAA6BA,CAC/BpB,EACAQ,EACAlB,IAGIA,GACIzO,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK8O,GACNnP,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKsP,GACLlB,EAAoB/M,MACpB+M,EAAoBlP,KAAKzB,KAAIyB,GACnBA,MAQ/B,EA/J+CP,IAC3C,MAAM,OACFwJ,EAAM,KACNoH,EAAI,WACJR,EAAU,YACVC,EAAW,MACXvH,GACA9I,EAMJ,OAJAgB,EAAAA,WAAgB,KACZ2L,SAAS4B,KAAKC,iBAAiB,WAAYxG,GAAWoL,EAAcpL,QAIpEhH,EAAAA,cAACwQ,EAAAA,OAAMpQ,OAAAC,OAAA,GAAKmI,GACPV,EACD9H,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK+O,GACLe,EAAYP,EAA8BP,EAAarQ,8FCjBxE,MAsCMmR,EAAcA,CAACP,EAA4BR,EAAwBC,IAEjErP,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK+O,GACNpP,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKgP,GACLO,EAAK3H,UACL2H,EAAK9H,MACL8H,EAAKpT,MACLoT,EAAK7H,YAMhBsI,EAA4BA,CAC9BpB,EACAQ,EACApB,IAGIA,GACIrO,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK4O,GACNjP,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKoP,GACLpB,EAAmB9O,KAAKzB,KAAIyB,GAClBA,MAQzB+Q,EAA4BA,CAC9BpB,EACAQ,EACAlB,IAGIA,GACIxO,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK6O,GACNlP,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKqP,GACLlB,EAAmB9M,MACnB8M,EAAmB5M,MAAM9D,KAAI,CAACC,EAAMgN,IAE7B/K,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKtC,EAAKsE,UAAS,CAAEnC,IAAKnC,EAAKO,IAAMyM,IACtC/K,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKtC,EAAKwE,UACVxE,EAAKgE,UACLhE,EAAKwB,KACU,IAAfxB,EAAKkE,OAAgBjC,EAAAA,cAAA,OAAKC,UAAU,wBAAwBlC,EAAKkE,aAWhGsO,EAA6BA,CAC/BpB,EACAQ,EACAlB,IAGIA,GACIzO,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK8O,GACNnP,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKsP,GACLlB,EAAoB/M,MACpB+M,EAAoBlP,KAAKzB,KAAIyB,GACnBA,MAQ/B,EAnH+CP,IAC3C,MAAM,OACFwJ,EAAM,qBACNsG,EAAoB,yBACpBC,EAAwB,WACxBpT,EAAU,YACVqT,EAAW,eACXC,EAAc,eACdC,EAAc,gBACdC,EAAe,UACfM,EAAS,UACTC,EAAS,WACTC,EAAU,KACVC,EAAI,oBACJG,EAAmB,mBACnBF,EAAkB,mBAClBC,EAAkB,WAClBV,EAAU,YACVC,EAAW,MACXvH,GACA9I,EAEJ,OACIgB,EAAAA,cAACwQ,EAAAA,OAAMpQ,OAAAC,OAAA,GAAKmI,GACPV,EACAqI,EAAYP,EAA8BR,EAAYC,GACvDrP,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK2O,GACLrT,GAAcA,EAAWmB,OAAS,EAC/BkD,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKyO,GAAuBC,GAAmC,GAEvEsB,EAA0BpB,EAAgBQ,EAAWI,GACrDS,EAA0BpB,EAAgBQ,EAAWI,GACrDS,EAA2BpB,EAAiBQ,EAAYI,8FChCzE,MAsCMI,EAAcA,CAACP,EAA4BR,EAAwBC,IAEjErP,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK+O,GACNpP,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKgP,GACLO,EAAK3H,UACL2H,EAAK9H,MACL8H,EAAKpT,MACLoT,EAAK7H,YAMhBsI,EAA4BA,CAC9BpB,EACAQ,EACApB,IAGIA,GACIrO,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK4O,GACNjP,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKoP,GACLpB,EAAmB9O,KAAKzB,KAAIyB,GAClBA,MAQzB+Q,EAA4BA,CAC9BpB,EACAQ,EACAlB,IAGIA,GACIxO,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK6O,GACNlP,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKqP,GACLlB,EAAmB9M,MACnB8M,EAAmB5M,MAAM9D,KAAI,CAACC,EAAMgN,IAE7B/K,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKtC,EAAKsE,UAAS,CAAEnC,IAAKnC,EAAKO,IAAMyM,IACtC/K,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKtC,EAAKwE,UACVxE,EAAKgE,UACLhE,EAAKwB,KACU,IAAfxB,EAAKkE,OAAgBjC,EAAAA,cAAA,OAAKC,UAAU,wBAAwBlC,EAAKkE,aAWhGsO,EAA6BA,CAC/BpB,EACAQ,EACAlB,IAGIA,GACIzO,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK8O,GACNnP,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKsP,GACLlB,EAAoB/M,MACpB+M,EAAoBlP,KAAKzB,KAAIyB,GACnBA,MAQ/B,EAnH+CP,IAC3C,MAAM,OACFwJ,EAAM,qBACNsG,EAAoB,yBACpBC,EAAwB,WACxBpT,EAAU,YACVqT,EAAW,eACXC,EAAc,eACdC,EAAc,gBACdC,EAAe,UACfM,EAAS,UACTC,EAAS,WACTC,EAAU,KACVC,EAAI,oBACJG,EAAmB,mBACnBF,EAAkB,mBAClBC,EAAkB,WAClBV,EAAU,YACVC,EAAW,MACXvH,GACA9I,EAEJ,OACIgB,EAAAA,cAACwQ,EAAAA,OAAMpQ,OAAAC,OAAA,GAAKmI,GACPV,EACAqI,EAAYP,EAA8BR,EAAYC,GACvDrP,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK2O,GACLrT,GAAcA,EAAWmB,OAAS,EAC/BkD,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKyO,GAAuBC,GAAmC,GAEvEsB,EAA0BpB,EAAgBQ,EAAWI,GACrDS,EAA0BpB,EAAgBQ,EAAWI,GACrDS,EAA2BpB,EAAiBQ,EAAYI,8FChCzE,MAsCMI,EAAcA,CAACP,EAA4BR,EAAwBC,IAEjErP,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK+O,GACNpP,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKgP,GACLO,EAAK3H,UACL2H,EAAK9H,MACL8H,EAAKpT,MACLoT,EAAK7H,YAMhBsI,EAA4BA,CAC9BpB,EACAQ,EACApB,IAGIA,GACIrO,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK4O,GACNjP,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKoP,GACLpB,EAAmB9O,KAAKzB,KAAIyB,GAClBA,MAQzB+Q,EAA4BA,CAC9BpB,EACAQ,EACAlB,IAGIA,GACIxO,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK6O,GACNlP,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKqP,GACLlB,EAAmB9M,MACnB8M,EAAmB5M,MAAM9D,KAAI,CAACC,EAAMgN,IAE7B/K,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKtC,EAAKsE,UAAS,CAAEnC,IAAKnC,EAAKO,IAAMyM,IACtC/K,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKtC,EAAKwE,UACVxE,EAAKgE,UACLhE,EAAKwB,KACU,IAAfxB,EAAKkE,OAAgBjC,EAAAA,cAAA,OAAKC,UAAU,wBAAwBlC,EAAKkE,aAWhGsO,EAA6BA,CAC/BpB,EACAQ,EACAlB,IAGIA,GACIzO,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK8O,GACNnP,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKsP,GACLlB,EAAoB/M,MACpB+M,EAAoBlP,KAAKzB,KAAIyB,GACnBA,MAQ/B,EAnH+CP,IAC3C,MAAM,OACFwJ,EAAM,qBACNsG,EAAoB,yBACpBC,EAAwB,WACxBpT,EAAU,YACVqT,EAAW,eACXC,EAAc,eACdC,EAAc,gBACdC,EAAe,UACfM,EAAS,UACTC,EAAS,WACTC,EAAU,KACVC,EAAI,oBACJG,EAAmB,mBACnBF,EAAkB,mBAClBC,EAAkB,WAClBV,EAAU,YACVC,EAAW,MACXvH,GACA9I,EAEJ,OACIgB,EAAAA,cAACwQ,EAAAA,OAAMpQ,OAAAC,OAAA,GAAKmI,GACPV,EACAqI,EAAYP,EAA8BR,EAAYC,GACvDrP,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK2O,GACLrT,GAAcA,EAAWmB,OAAS,EAC/BkD,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKyO,GAAuBC,GAAmC,GAEvEsB,EAA0BpB,EAAgBQ,EAAWI,GACrDS,EAA0BpB,EAAgBQ,EAAWI,GACrDS,EAA2BpB,EAAiBQ,EAAYI,8FChCzE,MAsCMI,EAAcA,CAACP,EAA4BR,EAAwBC,IAEjErP,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK+O,GACNpP,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKgP,GACLO,EAAK3H,UACL2H,EAAK9H,MACL8H,EAAKpT,MACLoT,EAAK7H,YAMhBsI,EAA4BA,CAC9BpB,EACAQ,EACApB,IAGIA,GACIrO,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK4O,GACNjP,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKoP,GACLpB,EAAmB9O,KAAKzB,KAAIyB,GAClBA,MAQzB+Q,EAA4BA,CAC9BpB,EACAQ,EACAlB,IAGIA,GACIxO,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK6O,GACNlP,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKqP,GACLlB,EAAmB9M,MACnB8M,EAAmB5M,MAAM9D,KAAI,CAACC,EAAMgN,IAE7B/K,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKtC,EAAKsE,UAAS,CAAEnC,IAAKnC,EAAKO,IAAMyM,IACtC/K,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKtC,EAAKwE,UACVxE,EAAKgE,UACLhE,EAAKwB,KACU,IAAfxB,EAAKkE,OAAgBjC,EAAAA,cAAA,OAAKC,UAAU,wBAAwBlC,EAAKkE,aAWhGsO,EAA6BA,CAC/BpB,EACAQ,EACAlB,IAGIA,GACIzO,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK8O,GACNnP,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKsP,GACLlB,EAAoB/M,MACpB+M,EAAoBlP,KAAKzB,KAAIyB,GACnBA,MAQ/B,EAnH+CP,IAC3C,MAAM,OACFwJ,EAAM,qBACNsG,EAAoB,yBACpBC,EAAwB,WACxBpT,EAAU,YACVqT,EAAW,eACXC,EAAc,eACdC,EAAc,gBACdC,EAAe,UACfM,EAAS,UACTC,EAAS,WACTC,EAAU,KACVC,EAAI,oBACJG,EAAmB,mBACnBF,EAAkB,mBAClBC,EAAkB,WAClBV,EAAU,YACVC,EAAW,MACXvH,GACA9I,EAEJ,OACIgB,EAAAA,cAACwQ,EAAAA,OAAMpQ,OAAAC,OAAA,GAAKmI,GACPV,EACAqI,EAAYP,EAA8BR,EAAYC,GACvDrP,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK2O,GACLrT,GAAcA,EAAWmB,OAAS,EAC/BkD,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKyO,GAAuBC,GAAmC,GAEvEsB,EAA0BpB,EAAgBQ,EAAWI,GACrDS,EAA0BpB,EAAgBQ,EAAWI,GACrDS,EAA2BpB,EAAiBQ,EAAYI,8FChCzE,MAsCMI,EAAcA,CAACP,EAA4BR,EAAwBC,IAEjErP,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK+O,GACNpP,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKgP,GACLO,EAAK3H,UACL2H,EAAK9H,MACL8H,EAAKpT,MACLoT,EAAK7H,YAMhBsI,EAA4BA,CAC9BpB,EACAQ,EACApB,IAGIA,GACIrO,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK4O,GACNjP,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKoP,GACLpB,EAAmB9O,KAAKzB,KAAIyB,GAClBA,MAQzB+Q,EAA4BA,CAC9BpB,EACAQ,EACAlB,IAGIA,GACIxO,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK6O,GACNlP,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKqP,GACLlB,EAAmB9M,MACnB8M,EAAmB5M,MAAM9D,KAAI,CAACC,EAAMgN,IAE7B/K,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKtC,EAAKsE,UAAS,CAAEnC,IAAKnC,EAAKO,IAAMyM,IACtC/K,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKtC,EAAKwE,UACVxE,EAAKgE,UACLhE,EAAKwB,KACU,IAAfxB,EAAKkE,OAAgBjC,EAAAA,cAAA,OAAKC,UAAU,wBAAwBlC,EAAKkE,aAWhGsO,EAA6BA,CAC/BpB,EACAQ,EACAlB,IAGIA,GACIzO,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK8O,GACNnP,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKsP,GACLlB,EAAoB/M,MACpB+M,EAAoBlP,KAAKzB,KAAIyB,GACnBA,MAQ/B,EAnH+CP,IAC3C,MAAM,OACFwJ,EAAM,qBACNsG,EAAoB,yBACpBC,EAAwB,WACxBpT,EAAU,YACVqT,EAAW,eACXC,EAAc,eACdC,EAAc,gBACdC,EAAe,UACfM,EAAS,UACTC,EAAS,WACTC,EAAU,KACVC,EAAI,oBACJG,EAAmB,mBACnBF,EAAkB,mBAClBC,EAAkB,WAClBV,EAAU,YACVC,EAAW,MACXvH,GACA9I,EAEJ,OACIgB,EAAAA,cAACwQ,EAAAA,OAAMpQ,OAAAC,OAAA,GAAKmI,GACPV,EACAqI,EAAYP,EAA8BR,EAAYC,GACvDrP,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK2O,GACLrT,GAAcA,EAAWmB,OAAS,EAC/BkD,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKyO,GAAuBC,GAAmC,GAEvEsB,EAA0BpB,EAAgBQ,EAAWI,GACrDS,EAA0BpB,EAAgBQ,EAAWI,GACrDS,EAA2BpB,EAAiBQ,EAAYI,8FChCzE,MAsCMI,EAAcA,CAACP,EAA4BR,EAAwBC,IAEjErP,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK+O,GACNpP,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKgP,GACLO,EAAK3H,UACL2H,EAAK9H,MACL8H,EAAKpT,MACLoT,EAAK7H,YAMhBsI,EAA4BA,CAC9BpB,EACAQ,EACApB,IAGIA,GACIrO,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK4O,GACNjP,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKoP,GACLpB,EAAmB9O,KAAKzB,KAAIyB,GAClBA,MAQzB+Q,EAA4BA,CAC9BpB,EACAQ,EACAlB,IAGIA,GACIxO,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK6O,GACNlP,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKqP,GACLlB,EAAmB9M,MACnB8M,EAAmB5M,MAAM9D,KAAI,CAACC,EAAMgN,IAE7B/K,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKtC,EAAKsE,UAAS,CAAEnC,IAAKnC,EAAKO,IAAMyM,IACtC/K,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKtC,EAAKwE,UACVxE,EAAKgE,UACLhE,EAAKwB,KACU,IAAfxB,EAAKkE,OAAgBjC,EAAAA,cAAA,OAAKC,UAAU,wBAAwBlC,EAAKkE,aAWhGsO,EAA6BA,CAC/BpB,EACAQ,EACAlB,IAGIA,GACIzO,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK8O,GACNnP,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKsP,GACLlB,EAAoB/M,MACpB+M,EAAoBlP,KAAKzB,KAAIyB,GACnBA,MAQ/B,EAnH+CP,IAC3C,MAAM,OACFwJ,EAAM,qBACNsG,EAAoB,yBACpBC,EAAwB,WACxBpT,EAAU,YACVqT,EAAW,eACXC,EAAc,eACdC,EAAc,gBACdC,EAAe,UACfM,EAAS,UACTC,EAAS,WACTC,EAAU,KACVC,EAAI,oBACJG,EAAmB,mBACnBF,EAAkB,mBAClBC,EAAkB,WAClBV,EAAU,YACVC,EAAW,MACXvH,GACA9I,EAEJ,OACIgB,EAAAA,cAACwQ,EAAAA,OAAMpQ,OAAAC,OAAA,GAAKmI,GACPV,EACAqI,EAAYP,EAA8BR,EAAYC,GACvDrP,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK2O,GACLrT,GAAcA,EAAWmB,OAAS,EAC/BkD,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKyO,GAAuBC,GAAmC,GAEvEsB,EAA0BpB,EAAgBQ,EAAWI,GACrDS,EAA0BpB,EAAgBQ,EAAWI,GACrDS,EAA2BpB,EAAiBQ,EAAYI,wGCjCzE,MA2BA,EA3BmD/Q,GAC/CgB,EAAAA,cAACA,EAAAA,SAAc,KACXA,EAAAA,cAACyQ,EAAAA,SAAQ,CACLxQ,UAAW4O,GAAAA,CAAW7P,EAAM0R,eAAgB1R,EAAMuE,OAAOtD,WACzD0Q,YAAa3R,EAAM2R,YACnBC,KAAM5R,EAAM4R,KACZC,SAAU7R,EAAM6R,SAChBC,QAAO9R,EAAMuE,OAAOwN,cAAe,QACnCC,KAAMhS,EAAMuE,OAAO0N,SAAW,gBAAapO,EAC3CoO,SAAUjS,EAAMuE,OAAO0N,SACvBC,SAAUlS,EAAMuE,OAAO2N,SACvBC,eAAiBnS,EAAMuE,OAAO4N,eAAkBnS,EAAMuE,OAAO4N,oBAAiBtO,EAC9EjB,MAAO5C,EAAMoS,OAASpS,EAAMoS,MAAMC,SAAWrS,EAAMoS,MAAMC,QAAQvU,OAASkC,EAAMoS,MAAMC,QAAU,GAChGC,YAAatS,EAAMuE,OAAO+N,YAC1BC,eAAgBvS,EAAMuE,OAAOgO,eAC7BC,yBAA0BxS,EAAMwS,yBAChCC,sBAAuBzS,EAAMyS,sBAC7BC,wBAAyB1S,EAAMsC,WAAatC,EAAMsC,UAAUqQ,0BAC5DC,kBAAmB5S,EAAMsC,WAAatC,EAAMsC,UAAUuQ,kBACtDC,kBAAmB9S,EAAMsC,WAAatC,EAAMsC,UAAUyQ,gBACtDC,kBAAmBhT,EAAMsC,WAAatC,EAAMsC,UAAU2Q,YACtDC,eAAgBlT,EAAMkT,eACtBC,gBAAiBnT,EAAMmT,2GCrBnC,MAwCMhC,EAAcA,CAACP,EAA4BP,IAEzCrP,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKgP,GACLO,EAAK3H,UACNjI,EAAAA,cAAA,OAAKC,UAAU,gCACfD,EAAAA,cAAA,OAAKC,UAAU,6BACV2P,EAAK9H,MACL8H,EAAKpT,OAEToT,EAAK7H,WAKZsI,EAA4BA,CAC9BpB,EACAQ,EACApB,IAGIA,GACIrO,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK4O,GACNjP,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKoP,GACLpB,EAAmB9O,KAAKzB,KAAIyB,GAClBA,MAQzB+Q,EAA4BA,CAC9BpB,EACAQ,EACAlB,IAGIA,GACIxO,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK6O,GACNlP,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKqP,GACLlB,EAAmB9M,MACnB8M,EAAmB5M,MAAM9D,KAAI,CAACC,EAAMgN,IAE7B/K,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKtC,EAAKsE,UAAS,CAAEnC,IAAKnC,EAAKO,IAAMyM,IACtC/K,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKtC,EAAKwE,UACVxE,EAAKgE,UACLhE,EAAKwB,KACNS,EAAAA,cAAA,QAAMC,UAAU,8CAA8ClC,EAAKkE,aAWjGsO,EAA6BA,CAC/BpB,EACAQ,EACAlB,IAGIA,GACIzO,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK8O,GACNnP,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKsP,GACLlB,EAAoB/M,MACpB+M,EAAoBlP,KAAKzB,KAAIyB,GACnBA,MAQ/B,EAtH+CP,IAC3C,MAAM,OACFwJ,EAAM,qBACNsG,EAAoB,yBACpBC,EAAwB,WACxBpT,EAAU,YACVqT,EAAW,eACXC,EAAc,eACdC,EAAc,gBACdC,EAAe,UACfM,EAAS,UACTC,EAAS,WACTC,EAAU,KACVC,EAAI,oBACJG,EAAmB,mBACnBF,EAAkB,mBAClBC,EAAkB,WAClBV,EAAU,YACVC,EAAW,MACXvH,GACA9I,EAEJ,OACIgB,EAAAA,cAACwQ,EAAAA,OAAMpQ,OAAAC,OAAA,GAAKmI,GACPV,EACD9H,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK+O,GACLe,EAAYP,EAA8BP,GAC3CrP,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK2O,GACLrT,GAAcA,EAAWmB,OAAS,EAC/BkD,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKyO,GAAuBC,GAAmC,GAEvEsB,EAA0BpB,EAAgBQ,EAAWI,GACrDS,EAA0BpB,EAAgBQ,EAAWI,GACrDS,EAA2BpB,EAAiBQ,EAAYI,+FClC7E,MAsCMI,EAAcA,CAACP,EAA4BR,EAAwBC,IAEjErP,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK+O,GACNpP,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKgP,GACLO,EAAK3H,UACL2H,EAAK9H,MACL8H,EAAKpT,MACLoT,EAAK7H,YAMhBsI,EAA4BA,CAC9BpB,EACAQ,EACApB,IAGIA,GACIrO,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK4O,GACNjP,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKoP,GACLpB,EAAmB9O,KAAKzB,KAAIyB,GAClBA,MAQzB+Q,EAA4BA,CAC9BpB,EACAQ,EACAlB,IAGIA,GACIxO,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK6O,GACNlP,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKqP,GACLlB,EAAmB9M,MACnB8M,EAAmB5M,MAAM9D,KAAI,CAACC,EAAMgN,IAE7B/K,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKtC,EAAKsE,UAAS,CAAEnC,IAAKnC,EAAKO,IAAMyM,IACtC/K,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKtC,EAAKwE,UACVxE,EAAKgE,UACLhE,EAAKwB,KACU,IAAfxB,EAAKkE,OAAgBjC,EAAAA,cAAA,OAAKC,UAAU,wBAAwBlC,EAAKkE,aAWhGsO,EAA6BA,CAC/BpB,EACAQ,EACAlB,IAGIA,GACIzO,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK8O,GACNnP,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKsP,GACLlB,EAAoB/M,MACpB+M,EAAoBlP,KAAKzB,KAAIyB,GACnBA,MAQ/B,EAnH+CP,IAC3C,MAAM,OACFwJ,EAAM,qBACNsG,EAAoB,yBACpBC,EAAwB,WACxBpT,EAAU,YACVqT,EAAW,eACXC,EAAc,eACdC,EAAc,gBACdC,EAAe,UACfM,EAAS,UACTC,EAAS,WACTC,EAAU,KACVC,EAAI,oBACJG,EAAmB,mBACnBF,EAAkB,mBAClBC,EAAkB,WAClBV,EAAU,YACVC,EAAW,MACXvH,GACA9I,EAEJ,OACIgB,EAAAA,cAACwQ,EAAAA,OAAMpQ,OAAAC,OAAA,GAAKmI,GACPV,EACAqI,EAAYP,EAA8BR,EAAYC,GACvDrP,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK2O,GACLrT,GAAcA,EAAWmB,OAAS,EAC/BkD,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKyO,GAAuBC,GAAmC,GAEvEsB,EAA0BpB,EAAgBQ,EAAWI,GACrDS,EAA0BpB,EAAgBQ,EAAWI,GACrDS,EAA2BpB,EAAiBQ,EAAYI,wGChCzE,MA2BA,EA3BmD/Q,GAC/CgB,EAAAA,cAACA,EAAAA,SAAc,KACXA,EAAAA,cAACyQ,EAAAA,SAAQ,CACLxQ,UAAW4O,GAAAA,CAAW7P,EAAM0R,eAAgB1R,EAAMuE,OAAOtD,WACzD0Q,YAAa3R,EAAM2R,YACnBC,KAAM5R,EAAM4R,KACZC,SAAU7R,EAAM6R,SAChBC,QAAO9R,EAAMuE,OAAOwN,cAAe,QACnCC,KAAMhS,EAAMuE,OAAO0N,SAAW,gBAAapO,EAC3CoO,SAAUjS,EAAMuE,OAAO0N,SACvBC,SAAUlS,EAAMuE,OAAO2N,SACvBC,eAAiBnS,EAAMuE,OAAO4N,eAAkBnS,EAAMuE,OAAO4N,oBAAiBtO,EAC9EjB,MAAO5C,EAAMoS,OAASpS,EAAMoS,MAAMC,SAAWrS,EAAMoS,MAAMC,QAAQvU,OAASkC,EAAMoS,MAAMC,QAAU,GAChGC,YAAatS,EAAMuE,OAAO+N,YAC1BC,eAAgBvS,EAAMuE,OAAOgO,eAC7BC,yBAA0BxS,EAAMwS,yBAChCC,sBAAuBzS,EAAMyS,sBAC7BC,wBAAyB1S,EAAMsC,WAAatC,EAAMsC,UAAUqQ,0BAC5DC,kBAAmB5S,EAAMsC,WAAatC,EAAMsC,UAAUuQ,kBACtDC,kBAAmB9S,EAAMsC,WAAatC,EAAMsC,UAAUyQ,gBACtDC,kBAAmBhT,EAAMsC,WAAatC,EAAMsC,UAAU2Q,YACtDC,eAAgBlT,EAAMkT,eACtBC,gBAAiBnT,EAAMmT,2GCrBnC,MAuBMC,EAAiBpL,IAEnB,GADkB2E,SAAS0G,uBAAuB,2BACnC,CAEX,MAAMC,EAAY3G,SAAS4G,eAAe,mBACpCC,EAAWF,MAAAA,OAAS,EAATA,EAAWG,iBAAiB,2EACvCC,EAAiBF,EAAS,GAC1BG,EAAgBH,EAASA,EAAS1V,OAAS,GAEjD,GAAIkK,EAAE4L,SAAW5L,EAAE6L,OACf,OAGJ,MAAMC,EAAO,CACTC,EAAG,KACK/L,EAAEgM,UAAYhM,EAAEC,SAAWyL,IAC3BC,EAAcpH,QACd0H,QAAQC,IAAI,kBACZlM,EAAEsE,kBAGFtE,EAAEC,SAAW0L,IACbD,EAAenH,QACf0H,QAAQC,IAAI,mBACZlM,EAAEsE,oBAIVwH,EAAK9L,EAAEgC,UACP8J,EAAK9L,EAAEgC,aAKbmH,EAAcA,CAACP,EAA4BP,EAAyBrQ,KACtE,MAAM,qBACF8P,EAAoB,yBACpBC,EAAwB,WACxBpT,EAAU,YACVqT,EAAW,eACXC,EAAc,eACdC,EAAc,gBACdC,EAAe,UACfM,EAAS,UACTC,EAAS,WACTC,EAAU,oBACVI,EAAmB,mBACnBF,EAAkB,mBAClBC,GACA9Q,EACJ,OACIgB,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKgP,GACLO,EAAK3H,UACNjI,EAAAA,cAAA,OAAKC,UAAU,gCACfD,EAAAA,cAAA,OAAKC,UAAU,6BACV2P,EAAK9H,MACL8H,EAAKpT,MACNwD,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK2O,GACLrT,GAAcA,EAAWmB,OAAS,EAC/BkD,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKyO,GAAuBC,GAAmC,GAEvEsB,EAA0BpB,EAAgBQ,EAAWI,GACrDS,EAA0BpB,EAAgBQ,EAAWI,GACrDS,EAA2BpB,EAAiBQ,EAAYI,KAGhEH,EAAK7H,YAKZsI,EAA4BA,CAC9BpB,EACAQ,EACApB,IAGIA,GACIrO,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK4O,GACNjP,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKoP,GACLpB,EAAmB9O,KAAKzB,KAAIyB,GAClBA,MAQzB+Q,EAA4BA,CAC9BpB,EACAQ,EACAlB,IAGIA,GAEIxO,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK6O,GACNlP,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKqP,GACLlB,EAAmB9M,MACnB8M,EAAmB5M,MAAM9D,KAAI,CAACC,EAAMgN,IAE7B/K,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKtC,EAAKsE,UAAS,CAAEnC,IAAKnC,EAAKO,IAAMyM,IACtC/K,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKtC,EAAKwE,UACVxE,EAAKgE,UACLhE,EAAKwB,KACNS,EAAAA,cAAA,QAAMC,UAAU,8CAA8ClC,EAAKkE,aAWjGsO,EAA6BA,CAC/BpB,EACAQ,EACAlB,IAGIA,GACIzO,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK8O,GACNnP,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKsP,GACLlB,EAAoB/M,MACpB+M,EAAoBlP,KAAKzB,KAAIyB,GACnBA,MAQ/B,EA/J+CP,IAC3C,MAAM,OACFwJ,EAAM,KACNoH,EAAI,WACJR,EAAU,YACVC,EAAW,MACXvH,GACA9I,EAMJ,OAJAgB,EAAAA,WAAgB,KACZ2L,SAAS4B,KAAKC,iBAAiB,WAAYxG,GAAWoL,EAAcpL,QAIpEhH,EAAAA,cAACwQ,EAAAA,OAAMpQ,OAAAC,OAAA,GAAKmI,GACPV,EACD9H,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK+O,GACLe,EAAYP,EAA8BP,EAAarQ,4uBC0BjE,MAAMmU,UAAqBnT,EAAAA,cAM9BtE,YAAmBsD,GACfyJ,MAAMzJ,GALO,KAAAoU,eAAyB,SACzB,KAAAC,oBAA8B,8BAC9B,KAAAC,YAAyCtT,EAAAA,YAsDlD,KAAAuT,yBAA2B,KAAK,IAAAC,EACZ,QAAxBA,EAAArX,KAAKmX,YAAYjK,eAAO,IAAAmK,GAAxBA,EAA0BC,oBA8DtB,KAAAC,gBAAmBC,IACvBxX,KAAKgN,SAAS,CACVyK,aAAc,CACVC,YAAaF,EACbG,gBAAiB3X,KAAKiX,eACtBW,aAAc5X,KAAKkX,oBACnBW,QAAQ,MAQH,KAAAC,gBAAkB,KAC/B9X,KAAKgN,UAASP,IAAK,CACfsL,YAAatL,EAAMsL,gBAhIvB/X,KAAKyM,MAAQ,CACTsL,YAAY,GAIbnG,SAAM,IAAAoG,EACT,MAAMC,EAAuBC,EAAAA,gBAAgBC,YAAYnY,KAAK6C,MAAMuV,mBAC9DC,EAAsBH,EAAAA,gBAAgBC,YAA6C,QAAlCH,EAAChY,KAAK6C,MAAMkE,KAAKqR,yBAAiB,IAAAJ,OAAA,EAAjCA,EAAmCnI,QAC3F,IAAKoI,IAAyBI,EAC1B,OAAO,KAGX,MAAM7F,EAAShM,EAAAA,EAAA,GACRxG,KAAK6C,OAAK,IACbyV,UAAW,CACP7F,YAAazS,KAAK6C,MAClBiB,UAAW4O,GAAAA,CAAWsE,EAAalT,UAAW9D,KAAK6C,MAAMuE,OAAOtD,YAEpEoR,QAASlV,KAAKuY,uBAAuB,GAAGvB,EAAalT,wBAGzD,OAAO9D,KAAK6C,MAAMiR,WAAWtB,GAGzB+F,uBAAuBzU,GAC3B,OACID,EAAAA,cAAA,OAAKC,UAAWA,GACX9D,KAAKwY,sBAAsB,GAAG1U,sBAC9B9D,KAAKyY,gBAAgB,GAAG3U,gBAK7B0U,sBAAsB1U,GAC1B,OACID,EAAAA,cAAC6H,EAAAA,OAAM,CACH5H,UAAWA,EACX+H,QAAS7L,KAAK8X,gBAAe,gBACd9X,KAAKyM,MAAMsL,WAC1BxS,MAAOvF,KAAK6C,MAAMsC,UAAUuT,yBAE3B1Y,KAAK6C,MAAMsC,UAAUuT,yBAY1BD,gBAAgB3U,GACpB,OACID,EAAAA,cAAC8U,EAAAA,SAAQ,CAAC7U,UAAWA,EAAW+T,OAAQ7X,KAAKyM,MAAMsL,WAAYzM,IAAKtL,KAAKmX,aACpEnX,KAAK4Y,mBAAmB,GAAG9U,oBAKhC8U,mBAAmB9U,GACvB,MAAM+U,EAAsG,QAArFC,EAAAA,EAAAA,UAAS,CAAEC,QAASC,EAAAA,YAAYC,SAAUhU,QAASjF,KAAK6C,MAAMoC,QAAQiC,UAEvFgS,EAAkBlZ,KAAKyM,MAAMgL,aAC/B5T,EAAAA,cAACsV,EAAAA,MAAK,CAACC,MAAOpZ,KAAKyM,MAAMgL,aAAaE,gBAAiBE,OAAQ7X,KAAKyM,MAAMgL,aAAaI,QACnFhU,EAAAA,cAAA,QAAMC,UAAW9D,KAAKyM,MAAMgL,aAAaG,eACzC/T,EAAAA,cAAA,YAAO7D,KAAKyM,MAAMgL,aAAaC,mBAGnChR,EAGJ,OACI7C,EAAAA,cAAA,OAAKC,UAAWA,IACV+U,GACEhV,EAAAA,cAAA,OAAKC,UAAW,GAAGA,kBACfD,EAAAA,cAACwV,EAAAA,GAAiB,CAACjW,KAAMpD,KAAK6C,MAAMsC,UAAUmU,+BAGrDJ,EACAlZ,KAAKuZ,cAAc,GAAGzV,wBAK3ByV,cAAczV,GAAiB,IAAA0V,EAAAC,EAAAC,EACnC,MAAMzB,EAAuBC,EAAAA,gBAAgBC,YAAYnY,KAAK6C,MAAMuV,oBAE9D,aAAEuB,GAAiB3Z,KAAK6C,MAAMkE,KAC9B6S,GACFD,MAAAA,GAAoB,QAARH,EAAZG,EAAc9J,cAAM,IAAA2J,GAA4E,QAA5EA,EAApBA,EAAsB1Q,MAAMlH,GAHO,2DAGgBA,EAAKiY,cAAwC,IAAAL,OAAA,EAAhGA,EAAkGM,aAAa,EAC7G5Y,GAAY6Y,EAAAA,EAAAA,IAAa/Z,KAAK6C,MAAMoC,QAAQiC,SAElD,OADA8S,EAAAA,EAAAA,mBAAkB9Y,GAEd2C,EAAAA,cAACoW,EAAAA,wBAAuB,CACpBnW,UAAWA,EACXmB,QAASjF,KAAK6C,MAAMoC,QACpB8B,KAAM,CACFmT,WAAYjC,EAAuBjY,KAAK6C,MAAMuV,kBAAqBpY,KAAK6C,MAAMkE,KAAKqR,kBAAmBvI,OACtGsK,eAA8C,QAAhCV,EAAEzZ,KAAK6C,MAAMkE,KAAKoT,sBAAc,IAAAV,OAAA,EAA9BA,EAAgC5J,OAChDuK,oBAAwD,QAArCV,EAAE1Z,KAAK6C,MAAMkE,KAAKqT,2BAAmB,IAAAV,OAAA,EAAnCA,EAAqC7J,QAE9D1K,UAAWnF,KAAK6C,MAAMsC,UACtBkV,kBAAmBra,KAAKoX,yBACxBkD,eAAgBta,KAAKuX,gBACrBgD,oCAAqCX,EACrC1Y,UAAWA,KAnHA8V,EAAAlT,UAAY,mBA6IvC,kICrLO,MAAM0W,EAA8D3X,GAChEgB,EAAAA,cAACwQ,EAAAA,OAAMpQ,OAAAC,OAAA,GAAKrB,EAAMyV,WAAYzV,EAAMqS,SAG/C,urBCWA,MAAMuF,UAAuB5W,EAAAA,cAKzBtE,YAAYsD,EAAsC4J,GAC9CH,MAAMzJ,GAmDO,KAAA6X,uBAAyB,KAClC1a,KAAK6C,MAAMoC,SAAWjF,KAAK6C,MAAMoC,QAAQiC,SAAWlH,KAAK6C,MAAMoC,QAAQiC,QAAQyT,UAC/E3a,KAAK6C,MAAMoC,QAAQiC,QAAQyT,QAAQC,IAAI,mBAAmB5a,KAAK6C,MAAMV,KAAM,QAC3EnC,KAAKgN,SAAS,CAAE6N,iBAAiB,MAOxB,KAAAC,MAAQ,KACrB,MAAM,MAAE7F,GAAUjV,KAAK6C,MACjBkY,EAAY/a,KAAKyM,MAAM+H,eAAiBS,GAASA,EAAMC,SAAWD,EAAMC,QAAQvU,OAAS,GAAK,EAAIX,KAAKyM,MAAM+H,YAAc,EAE7HxU,KAAKgb,UACLhb,KAAKgN,SAAS,CAAEiO,UAAU,EAAMzG,YAAauG,IAE7C/a,KAAKgN,SAAS,CAAEwH,YAAauG,KAOpB,KAAAG,UAAY,KACzB,MAAMjG,EAAQjV,KAAK6C,MAAMoS,OAASjV,KAAK6C,MAAMoS,MAAMC,QAC7C6F,EAAuC,IAA3B/a,KAAKyM,MAAM+H,YAAqBS,EAAQA,EAAMtU,OAAS,EAAI,EAAKX,KAAKyM,MAAM+H,YAAc,EAEvGxU,KAAKgb,UACLhb,KAAKgN,SAAS,CAAEiO,UAAU,EAAMzG,YAAauG,IAE7C/a,KAAKgN,SAAS,CAAEwH,YAAauG,KAIpB,KAAAI,WAAa,KAC1Bnb,KAAKgb,WAAY,GAGJ,KAAAI,UAAY,KACzBpb,KAAKgb,WAAY,EACjBhb,KAAKgN,SAAS,CAAEiO,UAAU,KAOb,KAAAI,WAAcC,IACvBtb,KAAKgb,WAGThb,KAAKgN,SAAS,CAAEwH,YAAa8G,KAtG7Btb,KAAKyM,MAAQ,CAAE+H,YAAa,EAAGyG,UAAU,EAAOJ,iBAAiB,GACjE7a,KAAKgb,WAAY,EACjBhb,KAAKgD,kBAAmBiO,EAAAA,EAAAA,oBACpBjR,KAAK6C,MAAMoC,QAAQiC,QAAQgK,kBAC3BlR,KAAK6C,MAAMsO,aACXnR,KAAK6C,MAAMb,WAIZuZ,oBACCvb,KAAK6C,MAAMoC,SAAWjF,KAAK6C,MAAMoC,QAAQiC,SAAWlH,KAAK6C,MAAMoC,QAAQiC,QAAQyT,cACIjU,IAA/E1G,KAAK6C,MAAMoC,QAAQiC,QAAQyT,QAAQa,IAAI,mBAAmBxb,KAAK6C,MAAMV,QACrEnC,KAAK6C,MAAMoC,QAAQiC,QAAQyT,QAAQC,IAAI,mBAAmB5a,KAAK6C,MAAMV,KAAM,SAC3EnC,KAAKgN,SAAS,CAAE6N,iBAAiB,KAKtCjJ,SACH,GAAI5R,KAAKyM,MAAMoO,gBACX,OAAO,KAGX,MAAM,UAAE/W,GAAc9D,KAAK6C,MAAMuE,OAE3BoL,EAAShM,EAAAA,EAAAA,EAAA,GAGRxG,KAAK6C,OACL7C,KAAKyM,OAAK,IACbzJ,iBAAkBhD,KAAKgD,iBACvByY,kBAAmB,CACfhJ,YAAazS,KAAK6C,MAClBiB,UAAW4O,GAAAA,CAAW,cAAe5O,IAEzCyQ,eAAgBvU,KAAKyM,MAAMwO,SAAW,YAAc,GACpDxG,KAAMzU,KAAK8a,MACXpG,SAAU1U,KAAKkb,UACf7F,yBAA0BrV,KAAKqb,WAC/B/F,sBAAuBtV,KAAK0a,uBAC5B3E,eAAgB/V,KAAKob,UACrBpF,gBAAiBhW,KAAKmb,aAG1B,OAAOnb,KAAK6C,MAAMiR,WAAWtB,IA8DrC,6HC9HA,MAAMkJ,EAAiB7Y,IACnB,IAAI4C,EAAQ,GAEZ,OADAA,EAAQ5C,EAAMoS,OAASpS,EAAMoS,MAAMC,SAAWrS,EAAMoS,MAAMC,QAAQvU,OAAS,EAAIkC,EAAMoS,MAAMC,QAAU,GAC9FzP,GA+BX,EA7BmD5C,GAC/CgB,EAAAA,cAACwQ,EAAAA,OAAMpQ,OAAAC,OAAA,GAAKrB,EAAM4Y,kBAAuB5Y,EAAM8Y,uBAAuB9Y,IAClEgB,EAAAA,cAACyQ,EAAAA,SAAQ,CACLxQ,UAAW4O,GAAAA,CAAW7P,EAAM0R,gBAC5BC,YAAa3R,EAAM2R,YACnBC,KAAM5R,EAAM4R,KACZC,SAAU7R,EAAM6R,SAChBC,QAAO9R,EAAMuE,OAAOwN,cAAe,QACnCC,KAAMhS,EAAMuE,OAAO0N,SAAW,gBAAapO,EAC3CoO,SAAUjS,EAAMuE,OAAO0N,SACvBC,SAAUlS,EAAMuE,OAAO2N,SACvBC,eAAgBnS,EAAMuE,OAAO4N,eAAiBnS,EAAMuE,OAAO4N,oBAAiBtO,EAC5EjB,MAAOiW,EAAc7Y,GACrBsS,YAAatS,EAAMuE,OAAO+N,YAC1BC,eAAgBvS,EAAMuE,OAAOgO,eAC7BC,yBAA0BxS,EAAMwS,yBAChCC,sBAAuBzS,EAAMyS,sBAC7BC,wBAAyB1S,EAAMsC,WAAatC,EAAMsC,UAAUqQ,0BAC5DC,kBAAmB5S,EAAMsC,WAAatC,EAAMsC,UAAUuQ,kBACtDC,kBAAmB9S,EAAMsC,WAAatC,EAAMsC,UAAUyQ,gBACtDC,kBAAmBhT,EAAMsC,WAAatC,EAAMsC,UAAU2Q,YACtDC,eAAgBlT,EAAMkT,eACtBC,gBAAiBnT,EAAMmT,gBACvBhT,iBAAkBH,EAAMG,iBACxB4Y,SAAU/Y,EAAMuE,OAAOwU,iGClB5Bzb,eAAe0b,EAClBC,EACA9Z,EACA+Z,GAC2B,IAEvBC,EACAC,EAHJC,IAAAC,UAAAxb,OAAA,QAAA+F,IAAAyV,UAAA,KAAAA,UAAA,GAIA,IACIH,QAAmBF,EACnBG,EAAcD,EAAWF,KAAKM,QAChC,MAAOna,GAGL,OAFAD,EAAUqa,QAAQpa,GAClBD,EAAUuM,MAAM,uCACT+N,EAAAA,YAAYC,UAGvB,IAAIN,EAmCA,OADAja,EAAUqa,QAAQ,uDACXC,EAAAA,YAAYC,UAlCnB,IAAK,IAADC,EACA,MAAMC,QAAoDC,EAAAA,iBAAAA,yBACtD,CAAEnb,cAAewa,EAAa7W,cAAeyX,YAAa,QAC1DX,EAAWF,KAAK9X,GAChBiY,GAGJ,aAAaK,EAAAA,YAAYC,QAAkD,QAA3CC,EAACC,EAAiBG,iCAAyB,IAAAJ,EAAAA,OAAI9V,GACjF,MAAOzE,GAEL,GAAIia,GAA8B,2DAAfja,EAAMmJ,KAAmE,CACxF,UACU4Q,EAAWa,YAAY,IAC/B,MAAOC,GAGL,OAFA9a,EAAUqa,QAAQS,GAClB9a,EAAUuM,MAAM,0BACT+N,EAAAA,YAAYC,UAEvB,IAEI,aADMV,EAAkBC,EAAM9Z,EAAW+Z,GAAc,GAChDO,EAAAA,YAAYC,UACrB,MAAOQ,GAGL,OAFA/a,EAAUqa,QAAQU,GAClB/a,EAAUuM,MAAM,2BACT+N,EAAAA,YAAYC,WAM3B,OAFAva,EAAUqa,QAAQpa,GAClBD,EAAUuM,MAAM,2BACT+N,EAAAA,YAAYC,WAiExBpc,eAAe6c,EAClBC,EACAjB,EACAha,EACAkb,EACAC,EACAC,GAEA,GAAIpB,EAAY,CACZ,IAAIqB,GAA0C,EAC9C,GAAInF,EAAAA,gBAAgBC,YAAY+E,IAAaD,EAAgC,CAAC,IAADK,EACzE,MAAMC,EAA6CL,EAASpU,MACvD0U,GAA2BA,EAAQC,WAAaN,EAAiBO,YAEtEL,IAAmCE,KAA6C,QAAzBD,EAACC,EAAgBI,gBAAQ,IAAAL,IAAxBA,EAA0BM,sBAElFP,GAAiC,EAGrC,MAAMhd,EAAQ,CACVwd,WAAYV,EAAiBW,OAAQC,WACrCC,YAAaZ,EACba,qBAAsB,CAAEZ,+BAAAA,IAG5B,IACI,MAAMa,QAA4ClC,EAAWmC,uBAAuB9d,GACpF,aAAaic,EAAAA,YAAYC,QAAQ2B,GACnC,MAAOjc,GACLD,EAAUqa,QAASpa,EAAgBmc,SACnCpc,EAAUuM,MAAM,wCAIxB,OAAO+N,EAAAA,YAAYC,4EChKhB,SAAS8B,EAAsBC,EAA+BpB,GACjE,QAAkBxW,IAAd4X,GAA2BpG,EAAAA,gBAAgBC,YAAY+E,GACvD,OAAOA,EAASpU,MAAK0U,GACVc,IAAcd,EAAQC,WAelC,SAASc,EACZD,EACApB,EACAsB,EACAC,GAEA,MAAMC,EAAuBF,MAAAA,EAAAA,EAAeC,MAAAA,OAAS,EAATA,EAAW3C,KAAK6C,YAE5D,QAAkBjY,IAAd4X,GAA2BpG,EAAAA,gBAAgBC,YAAY+E,GACvD,OAAOA,EAASpU,MAAK0U,IAAU,IAAAoB,EAC3B,OAAON,IAAcd,EAAQC,WAA4B,QAAhBmB,EAAApB,EAAQG,gBAAQ,IAAAiB,OAAA,EAAhBA,EAAkBC,uBAAwBH,gRCoC/F,MA8IMI,EAA0BA,CAACC,EAAuClc,KACpE,IAAImc,EACJ,GAAID,GAAYA,EAASE,mBAAoB,CAAC,IAADC,EACzC,MAAMC,EAAcC,EAAgBL,EAASE,mBAAoBpc,EAAMwc,kBAEvE,IAAIC,EACAzc,EAAM0c,wBAA0B1c,EAAM0c,uBAAuB5e,OAAS,IACtE2e,EAA6Bzc,EAAM0c,uBAAuBzW,MAAK0W,GACpDA,GAAkBA,EAAe9B,YAAcqB,EAASrB,aAGvE,MAAM+B,EAAqC,QAA7BP,EAAGI,SAA0B,IAAAJ,GAAiB,QAAjBA,EAA1BA,EAA4BQ,uBAAe,IAAAR,OAAA,EAA3CA,EAA6CpW,MAAK6W,GAAUA,EAAOC,OAASb,EAASc,eAChGpQ,EAAWgQ,MAAAA,OAAQ,EAARA,EAAUK,YAIvBd,EADAvP,EACmB,GAAGA,MAAa0P,IAEhB,GAAGA,SAG1BH,EAAmBnc,EAAMsC,UAAU4a,aAEvC,OAAOf,GAGLgB,EAAuBA,CAACjB,EAAuClc,KACjE,GAAIkc,GAAYA,EAASE,mBAAoB,CACzC,MAAME,EAAcC,EAAgBL,EAASE,mBAAoBpc,EAAMwc,kBAEvE,GAAIF,EACA,OACItb,EAAAA,cAAA,OAAKC,UAAU,+BACXD,EAAAA,cAAA,QAAMC,UAAU,WAAWqb,IAM3C,OAAO,MAGLC,EAAkBA,CAACa,EAAwCZ,KAC7D,IAAKA,IAAqBY,GAAkD,IAA5BZ,EAAiB1e,OAC7D,MAAO,GAGX,MAAMuf,EAAgBb,EAAiBvW,MAAKqX,GACjCA,EAAgBC,gBAAkBH,IAG7C,OAAIC,EACOA,EAAcG,YAElBJ,GAGLK,EAAqBA,CACvBC,EACArD,EACAra,KAEA,MAAMI,EAA6C,GAEnD,OAAKia,GAAgC,IAApBA,EAASvc,QAK1B4f,EAAU5e,KAAI,CAAC6e,EAAU5R,KACrB,IAAI4O,EAQAiD,EAMAnB,EAMU,IAADoB,GAhBTlD,EAHA3a,EAAMoa,gCAGIsB,EAAAA,EAAAA,GAAkCiC,EAAS9C,UAAWR,EAAUsD,EAAS7B,YAAa9b,EAAM4b,YAE5FJ,EAAAA,EAAAA,GAAsBmC,EAAS9C,UAAWR,GAGpDra,EAAM8d,sBAAwB9d,EAAM8d,qBAAqBhgB,OAAS,IAClE8f,EAA2B5d,EAAM8d,qBAAqB7X,MAAK8X,IAAsB,IAAAC,EAC7E,OAAmD,QAA5CA,EAAAD,EAAoBE,gCAAwB,IAAAD,OAAA,EAA5CA,EAA8CnD,aAAe8C,EAAS9C,cAIjF7a,EAAM0c,wBAA0B1c,EAAM0c,uBAAuB5e,OAAS,IACtE2e,EAA6Bzc,EAAM0c,uBAAuBzW,MAAK0W,GACpDA,GAAkBA,EAAe9B,YAAc8C,EAAS9C,aAGnEF,IACAva,EAAWC,KAhLDC,EAClBqd,EACAhD,EACA3a,EACA+L,EACA6R,EACAM,KAC8B,IAAAnC,EAC9B,MAAM,cAAEvX,EAAa,aAAEF,EAAY,GAAEhF,EAAE,SAAE2E,EAAQ,QAAE7B,EAAO,UAAEE,EAAS,iBAAE6b,EAAgB,uBAAEC,GAA2Bpe,EAE9Gqe,GAlENC,EAmEIte,EAAMse,oBAlEVC,EAmEIve,EAAMue,oBAlEVR,EAmEIH,EAjEAU,GAEKP,IACAA,EAAoBS,mBACrBT,EAAoBS,mBAAqB,GACzCT,EAAoBS,mBAAqBD,EAElC,EAEJR,EAAoBS,kBAAoBD,EAG5C,GAjB2BE,IAClCH,EACAC,EACAR,EAqEA,MAAMW,EACF/D,GArDwBgE,EAC5BC,EACAN,EACAD,EACAjE,EACAyE,KAEA,GAAIzE,EAAgC,CAChC,IAAI0E,EAAmCD,EAQvC,OAJKA,IACDC,EAAmCF,GAAuB,IAGvDN,EACDQ,EAAmCT,EAC/BS,EACAT,EACJS,EAEV,OAAIR,GACOD,EAA2BO,EAAsBP,EAErDO,GA6BHD,CACI3e,EAAM+e,oBACN/e,EAAMse,oBACND,EACAre,EAAMoa,gCACNO,MAAAA,GAAiB,QAAVoB,EAAPpB,EAASG,gBAAQ,IAAAiB,OAAA,EAAjBA,EAAmBhB,kBAAmB,GAIxCiE,EAAgBrE,EAAQsE,gBAAkBC,EAAAA,oBAAoBC,QAE9DC,EA/BoBC,EAACjB,EAA8DT,IAAuB,KAChHS,EAAuBT,IA8BM0B,CAAsBjB,EAAwBT,GACrE7d,GAAUI,EAAAA,EAAAA,kBAAiB,QAASF,EAAMG,iBAAmBmf,EAAAA,kBAAkBC,gBAC/EC,GAA0Bze,EAAAA,EAAAA,wBAAuBf,EAAMG,iBAAmBL,GAEhF,IAAI2f,GAAaC,EAAAA,EAAAA,mBAAkB/E,EAAS3a,EAAMoC,QAAQC,mBAAewB,GACzE,GAAI8b,EAAAA,GAASC,YAAaC,EAAAA,EAAAA,IAAiB7f,EAAMoC,QAAQC,cAAcpE,gBAAiB,CAAC,IAAD6hB,EACpF,MAAMC,EAAU,IAAIC,IAAIP,EAAYhR,OAAO7B,SAAStL,MACpDye,EAAQE,aAAalI,IAAI,YAAa,GAAqB,QAArB+H,EAAGnC,EAASvf,iBAAS,IAAA0hB,EAAAA,EAAI,KAC/DL,EAAaM,EAAQze,KAGzB,MAAO,CACH4C,KAAM,CACFyW,QAAAA,EACAgD,SAAAA,GAEJuC,WAAWlB,IAAiBhf,EAAMse,sBAAsBX,EAASwC,SAAYzB,EAC7Ef,SACI3c,EAAAA,cAACof,EAAAA,sBAAqB,CAClBlc,KAAM,CACFgY,SAAUyB,EACVhD,QAAAA,EACA0F,SAAUrgB,EAAMqgB,UAEpBC,gBAAiB3C,EAASwC,SAC1BzB,YAAaA,EACb6B,eAAevB,IAAiBhf,EAAMse,sBAAsBD,GAA4B,EACxF/Z,aAAcA,EACdE,cAAeA,EACflF,GAAIA,EACJ2E,SAAUA,EACVwb,WAAYA,EACZrd,QAASA,EACTE,UAAWA,EACXpB,IAAK,GAAG6K,KAAS0T,IACjBe,oBAAoB,EACpBC,gBAAiB9F,EAAQ+F,gBACzBC,YAAY,UACZxgB,iBAAkBH,EAAMG,iBACxBygB,4BAA6B5gB,EAAM4gB,4BACnCC,iBAAkB5E,EAAwB0B,EAAU3d,KAG5D8gB,OACI9f,EAAAA,cAAC6H,EAAAA,OAAMzH,OAAAC,OAAA,CACHJ,UAAU,6BACV+H,QAASoW,EACT1c,MAAOyb,GACHqB,GAEHrB,GAGT4C,cAAe5D,EAAqBQ,EAAU3d,KAgGtCM,CACIqd,EACAhD,EACA3a,EACA+L,EACwB,QADnB8R,EACLD,SAAwB,IAAAC,OAAA,EAAxBA,EAA0BI,8BAOnC7d,IAvCHJ,EAAMoC,QAAQjD,UAAUC,MAAM,kDACvB,OC3PR9B,eAAe0jB,EAAgBtjB,EAAqBke,GACvD,MAAMqF,EAA8B,GAE9BhI,EAAO2C,EAAU3C,KAuCvB,OAnCIA,GAAQA,EAAKiI,WAAajI,EAAKiI,UAAUpjB,OAAS,IAAM8d,EAAUuF,uBAC5DC,EAAAA,EAAAA,6BAA4B,IAAIC,EAAAA,wBAA2B3jB,GAC5DkC,MAAKya,IACEA,IACA4G,EAAa5G,SAAWA,MAG/B7O,OAAMpM,IAEH,MADA1B,EAAIyB,UAAUsM,UAAUrM,GAClB,IAAII,MAAM,uFAGlB8hB,EAAAA,EAAAA,mCAAkC,IAAIC,EAAAA,sCAAsC7jB,EAAIO,eAAeC,aAAcR,GAC9GkC,MAAK4hB,IACEA,IACAP,EAAanD,qBAAuB0D,MAG3ChW,OAAMpM,IAEH,MADA1B,EAAIyB,UAAUsM,UAAUrM,GAClB,IAAII,MAAM,uFAGlBiiB,EAAAA,EAAAA,oCAAmC,IAAIC,EAAAA,uCAAuChkB,EAAIO,eAAeC,aAAcR,GAChHkC,MAAK+hB,IACEA,IACAV,EAAaU,gBAAkBA,MAGtCnW,OAAMpM,IAEH,MADA1B,EAAIyB,UAAUsM,UAAUrM,GAClB,IAAII,MAAM,kFAIrByhB,ukBCRX,IAAMW,EAAN,cAAuB5gB,IAAAA,UAenBtE,YAAYsD,GACRyJ,MAAMzJ,GAPF,KAAA6hB,mCAA8C,EAgPrC,KAAAC,mBAAqB,CAACpE,EAAuBqE,KAC1D,MAAMC,EAAoB,IAAItE,GAG9B,MAAa,eAATqE,EACOC,EAAMC,MAAK,CAACC,EAAOC,KAAK,IAAAC,EAAAC,EAAA,OAAsB,QAAjBD,EAACD,EAAMG,kBAAU,IAAAF,EAAAA,EAHpC,IAGiE,QAArBC,EAAKH,EAAMI,kBAAU,IAAAD,EAAAA,EAHjE,MAKdL,EAAMC,MAAK,CAACC,EAAOC,KAAK,IAAAI,EAAAC,EAAA,OAAsB,QAAjBD,EAACL,EAAMI,kBAAU,IAAAC,EAAAA,EALhC,IAK6D,QAArBC,EAAKL,EAAMG,kBAAU,IAAAE,EAAAA,EAL7D,OAoER,KAAAC,kBAAqBje,GAE9BA,GAAiB,CACbG,UAAW,CACPC,GAAI,CAAEC,EAAG,gBAAiBC,EAAG,EAAGC,EAAG,GACnC2d,GAAI,CAAE7d,EAAG,kBAAmBC,EAAG,EAAGC,EAAG,GACrCC,GAAI,CAAEH,EAAG,kBAAmBC,EAAG,EAAGC,EAAG,IAEzCG,UAAU,GAKL,KAAAyd,2BAA8BC,IAC3C,GAAIzlB,KAAK6C,MAAMkE,KAAK+U,KAAKjM,OAAQ,CAC7B,MAAMxP,EAAQ,CACVqlB,YAAa,CAACD,EAAiB3H,OAAQC,aAE3C/d,KAAK6C,MAAMkE,KAAK+U,KAAKjM,OAAO8V,gBAAgBtlB,GAAOgO,OAAMpM,IACrDjC,KAAK6C,MAAMb,UAAUqa,QAAQpa,GAC7BjC,KAAK6C,MAAMb,UAAUuM,MAAM,mCAlUnCvO,KAAKyM,MAAQ,CACTqX,aAAc,GACd8B,aAAa,EACb3I,gCAAgC,GAEpCjd,KAAKgD,kBAAmBiO,EAAAA,EAAAA,oBACpBjR,KAAK6C,MAAMoC,QAAQiC,QAAQgK,kBAC3BlR,KAAK6C,MAAMsO,aACXnR,KAAK6C,MAAMb,WAEf,MAAM6jB,GAAU9iB,EAAAA,EAAAA,kBAAiB+iB,EAAAA,GAAeC,SAAU/lB,KAAKgD,iBAAkBmf,EAAAA,kBAAkB6D,UACnGhmB,KAAKimB,4BAA6BriB,EAAAA,EAAAA,wBAAuB5D,KAAKgD,iBAAkB6iB,GAEhFA,EAAQpiB,cAAcC,MAAQye,EAAAA,kBAAkB+D,cAChDlmB,KAAKmmB,2BAA4BviB,EAAAA,EAAAA,wBAAuB5D,KAAKgD,iBAAkB6iB,GAE/EA,EAAQpiB,cAAcC,MAAQye,EAAAA,kBAAkBiE,gBAChDpmB,KAAKqmB,2BAA4BziB,EAAAA,EAAAA,wBAAuB5D,KAAKgD,iBAAkB6iB,GAG5E,0BAAuB,IAAAS,EAC1B,MAAMrhB,EAAUjF,KAAK6C,MAAMoC,QAAQC,eAEnCqhB,EAAAA,EAAAA,KACI,SAAAC,EAAA,OAAiC,QAAjCA,EAAMxmB,KAAK6C,MAAMkE,KAAK+U,KAAKjM,cAAM,IAAA2W,OAAA,EAA3BA,EAA6B1K,KAAKiI,aACxC5jB,UACIH,KAAKgN,SAAS,CACV8W,mBAAoBD,EAAgB5e,EAASjF,KAAK6C,MAAMkE,KAAK+U,KAAKjM,mBAIxE7P,KAAKymB,gCAEXzmB,KAAKgN,SAAS,CACVqS,iBAAkD,QAAlCiH,EAAEtmB,KAAK6C,MAAMkE,KAAKsY,wBAAgB,IAAAiH,OAAA,EAAhCA,EAAkCzW,SAGxD7P,KAAK0mB,gBAGFjV,mBAAmBkV,GACtB3mB,KAAK0mB,gBAGFE,sBAAsBC,EAA0CC,GACnE,OAAI9mB,KAAKyM,QAAUqa,GAAa9mB,KAAK6C,MAAMkE,OAAS8f,EAAU9f,KAO3D6K,SAAM,IAAAmV,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EACT,MAAM,GACFjlB,EAAE,SACF2E,EACAM,QAAQ,gBAAEigB,EAAe,oBAAEC,GAC3BriB,SACIiC,SACIqgB,MAAM,gBAAEC,EAAe,UAAEC,KAEhC,QACDxiB,EAAO,UACPE,GACAnF,KAAK6C,MAEHiZ,EAAQ9b,KAAK6C,MAAMkE,KAAK+U,MAAQ9b,KAAK6C,MAAMkE,KAAK+U,KAAKjM,aAAWnJ,EAChEghB,GAAmBnY,EAAAA,EAAAA,IAAW,WAAYvP,KAAK6C,MAAMoC,QAAQC,gBAAkB,GAC/EyiB,GAAUpY,EAAAA,EAAAA,IAAW,OAAQvP,KAAK6C,MAAMoC,QAAQC,gBAAkB,GAClE0iB,EAAc5nB,KAAK6nB,gBAAgBL,EAAiBE,EAAkBD,GAAa,IACnFK,EAAchM,GAAQA,EAAKA,KAAKiI,WAA4C,IAA/BjI,EAAKA,KAAKiI,UAAUpjB,OAEjEonB,GACFjM,MAAAA,OAAI,EAAJA,EAAMkM,uBAAwBhoB,KAAK6C,MAAMoC,QAAQiK,IAAI9H,OAAO6gB,oBAAsBC,EAAAA,kBAAkBC,aAClGnE,EAAiBlI,MAAAA,OAAI,EAAJA,EAAMkI,eACvBoE,EAA0D,QAArCrB,EAAG/mB,KAAK6C,MAAMoC,QAAQiC,QAAQmhB,eAAO,IAAAtB,OAAA,EAAlCA,EAAoCuB,sBAC5DC,EAAYvoB,KAAKwoB,gBACjBC,GAAgCC,EAAAA,EAAAA,4BACd,QADwC1B,EAC5DlL,MAAAA,OAAI,EAAJA,EAAMA,KAAKiI,iBAAS,IAAAiD,EAAAA,EAAI,GACoB,QADlBC,EAC1BjnB,KAAKyM,MAAMqX,aAAanD,4BAAoB,IAAAsG,EAAAA,EAAI,GAChDjnB,KAAK6C,MAAMoC,QAAQC,cACa,QADAgiB,EAChClnB,KAAKyM,MAAMqX,aAAa5G,gBAAQ,IAAAgK,EAAAA,EAAI,GACpCkB,GAEErF,IACD0F,MAAAA,GAAAA,EAA+BE,WAC9BF,IAAkCzoB,KAAKyM,MAAMmZ,eAC9C2C,GAAYA,EAAUK,MAAKpI,GAAYA,EAASuC,WAC/C8F,EAAgB7oB,KAAK6C,MAAMkE,KAAK+U,MAAwC,YAAhC9b,KAAK6C,MAAMkE,KAAK+U,KAAKgN,QAAwBzB,EACrF0B,EAAmBjN,MAAAA,GAAAA,EAAMiN,iBAAmBjN,EAAKiN,iBAAmB,EACpEC,EAAqB7jB,EAAU8jB,oBAAoB1lB,QAAQ,UAAWwlB,EAAiBhL,YACvFmL,EAAc/jB,EAAU+jB,YACxBC,EAAgB,CAClB7iB,IAAK8iB,EAAAA,oBACLrB,mBAAAA,EACAsB,UAAW,aACXC,WAAW,EACXxlB,UAAW,iCACXylB,QAAS,QACT/F,YAAa,SACb1Y,OAAQ3I,EACRqnB,uBAAuB,EACvBC,YAAa9B,EACb+B,gBAAgB,GAId5jB,EAASgW,IAASA,EAAKkI,gBAAkBlI,EAAKA,KAAK6N,kBAAgBjjB,EACnEkjB,EAAc9jB,EACdX,EAAU0kB,uBAAuBtmB,QAAQ,UAAW0B,EAAQ6kB,iBAAiBC,eAAejkB,IAC5F,GAEN9F,KAAKyjB,4BAAyE,QAA9C0D,EAAGnnB,KAAK6C,MAAMkE,KAAK0c,mCAA2B,IAAA0D,OAAA,EAA3CA,EAA6CtX,OAChF7P,KAAK0kB,kCAAgE,QAA/B0C,EAAGpnB,KAAK6C,MAAMkE,KAAK4S,oBAAY,IAAAyN,GAAQ,QAARA,EAA5BA,EAA8BvX,cAAM,IAAAuX,GAE5E,QAF4EA,EAApCA,EAAsCte,MAC3EkhB,GAHkC,oEAGvBA,EAAQnQ,cACtB,IAAAuN,OAAA,EAFwCA,EAEtCtN,UAEH,MAAMtH,EAAShM,EAAAA,EAAA,GACRxG,KAAK6C,OAAK,IACbonB,SACIpmB,IAAAA,cAACqmB,EAAAA,kBAAiB,CACdC,UAAWhlB,EAAUglB,UACrBC,aAAcjlB,EAAUilB,aACxBnlB,QAASA,EACT9C,GAAIA,EACJ2E,SAAUA,EACVC,KAAM,CAAE+U,KAAAA,GACR9Y,iBAAkBhD,KAAKgD,mBAG/Bud,UAAWgI,EACX8B,gBAAiBxB,EAAgBM,OAAgBziB,EACjD4jB,iBAAkB,CACdxmB,UAAW,4BAEfymB,gBAAiB,CACbzmB,UAAW4O,GAAAA,CAAW,gBACtBvQ,GAAInC,KAAK6C,MAAMV,IAEnBqoB,oBAAqB,CACjB1mB,UAAW4O,GAAAA,CAAW,wBAM1B+X,2BACK3C,GAAgB9D,GAAoBsD,IAAuBE,EAUxD,KATA3jB,IAAAA,cAAC6H,EAAAA,OAAMzH,OAAAC,OAAA,CACHwmB,SAAU3H,EACVjf,UAAU,6BACVK,KAAMyjB,EACNriB,MAAOJ,EAAUwlB,qBACb3qB,KAAKimB,4BAER9gB,EAAUwlB,qBAGvBC,uBACItD,GAAwBQ,GAAgBN,EAUpC,KATA3jB,IAAAA,cAAC6H,EAAAA,OAAMzH,OAAAC,OAAA,CACHwmB,SAAU3H,EACVjf,UAAU,kCACVK,KAAMujB,EACNniB,MAAOJ,EAAU0lB,0BACb7qB,KAAKmmB,2BAERhhB,EAAU0lB,0BAGvBC,eACIjnB,IAAAA,cAAC6H,EAAAA,OAAMzH,OAAAC,OAAA,CACHJ,UAAU,6BACVK,KAAMwjB,EACNpiB,MAAOyjB,GACHhpB,KAAKqmB,2BAER2C,GAGT+B,qCAAsC,KACtC7B,YAAarlB,IAAAA,cAAA,QAAMC,UAAU,8BAA8BolB,GAC3D8B,WAAYnnB,IAAAA,cAAA,OAAKC,UAAU,0BAA0B8lB,KAGzD,OAAO5pB,KAAK6C,MAAMiR,WAAWtB,GAGzBkU,gBAAa,IAAAuE,EAAAC,EACjB,MACInkB,MAAM,KAAE+U,IACR9b,KAAK6C,MACHoZ,EAAwC,QAA7BgP,EAAc,QAAdC,EAAGpP,EAAKjM,cAAM,IAAAqb,GAAM,QAANA,EAAXA,EAAapP,YAAI,IAAAoP,OAAA,EAAjBA,EAAmB9O,eAAO,IAAA6O,EAAAA,OAAIvkB,EAC9C1G,KAAKmrB,2BAA6BlP,IAItCjc,KAAKmrB,yBAA2BlP,EAE5Bjc,KAAKyM,MAAMwQ,gCACXpB,EAAAA,EAAAA,IAAkBC,EAAM9b,KAAK6C,MAAMb,UAAWhC,KAAK6C,MAAMoC,SACpDxC,MAAMoN,IACH7P,KAAKgN,SAAS,CAAE4Y,aAAc1N,EAAAA,gBAAgBC,YAAYtI,MAAAA,OAAM,EAANA,EAAQub,6BAErE/c,OAAM,KACHrO,KAAKgN,SAAS,CAAE4Y,aAAa,OAGrC5lB,KAAKgN,SAAS,CAAE4Y,aAAa,KAI7BiC,gBAAgBL,EAA0BE,EAA0BD,GACxE,GAAID,EACA,OAAOE,EAGX,MAAM2D,GAAgBC,EAAAA,EAAAA,UAAS5D,GAC/B,IAAI6D,EAAY7D,EAKhB,OAJI8D,EAAAA,GAAiB/I,YAAc4I,IAC/BE,EAAY,GAAGja,OAAO7B,SAASgc,SAAS/D,KAGrC,GAAGD,IAAaA,EAAUiE,SAAS,KAAa,IAAN,SAAeH,IAmB5D/C,gBAAa,IAAAmD,EACjB,MACI1mB,SACIiC,SAAWmhB,SAAS,uBAAEuD,GAA2B,CAAEA,4BAAwBllB,KAC9E,OACDU,EAAM,UACNpF,EAAS,UACTmD,GACAnF,KAAK6C,MAEHwE,EAAgBrH,KAAKslB,kBAAkBle,EAAOC,eAC9CyU,EAAO9b,KAAK6C,MAAMkE,KAAK+U,MAAQ9b,KAAK6C,MAAMkE,KAAK+U,KAAKjM,OAI1D,OAAO7P,KAAKyM,MAAMqX,aAAa5G,UAAYpB,GAAQA,EAAKA,KAAKiI,WAAajI,EAAKA,KAAKiI,UAAUpjB,OAAS,EFZ3EkC,CAAAA,IAChC,MAAM,SAAEqa,EAAQ,UAAEqD,GAAc1d,EAChC,OAAOyd,EAAmBC,EAAWrD,EAAUra,IEWrCgpB,CAAoB,CAChBtL,UAAWvgB,KAAK2kB,mBAAmB7I,EAAKA,KAAKiI,UAAW3c,EAAO0kB,oBAC/D5O,SAAUld,KAAKyM,MAAMqX,aAAa5G,SAClCyD,qBAAsB3gB,KAAKyM,MAAMqX,aAAanD,qBAC9CpB,uBAAwBvf,KAAKyM,MAAMqX,aAAaU,gBAChDnd,cAAAA,EACA+Z,oBAAqBphB,KAAK6C,MAAMoC,QAAQiK,IAAI9H,OAAOga,qBAAuB,EAC1ED,oBAAqBnhB,KAAK6C,MAAMoC,QAAQiK,IAAI9H,OAAO2kB,mBAAoB,EACvEnK,qBAAqBoK,EAAAA,EAAAA,kCAAiChsB,KAAK6C,MAAMoC,QAAQiK,IAAI9H,OAAO6kB,4BACpF9kB,aAAcnH,KAAK6C,MAAMoC,QAAQiC,QAAQC,aACzClC,QAASjF,KAAK6C,MAAMoC,QACpB6B,SAAU9G,KAAK6C,MAAMiE,SACrB3E,GAAInC,KAAK6C,MAAMV,GACfgD,UAAW,CACP+mB,WAAY/mB,EAAUgnB,yBACtBC,YAAajnB,EAAUknB,0BACvBC,aAAcnnB,EAAUonB,kCACxBC,YAAarnB,EAAUsnB,0BACvBC,sBAAuBvnB,EAAUwnB,oBACjCC,0BAA2BznB,EAAUynB,0BACrCC,uBAAwB,GACxBC,mBAAoB,GACpBC,kBAAmB,GACnBC,iBAAkB,GAClBC,oBAAqB,GACrBlN,aAAc5a,EAAU4a,cAE5B/d,UAAAA,EACAgf,iBAAkB7b,EAAU+nB,qBAC5BC,eAAgB,GAChBC,kBAAmB,GACnBC,qBAAsB,GACtB5O,UAAW3C,EACXuD,iBAAkBrf,KAAKyM,MAAM4S,iBAC7B4B,uBAAwBjhB,KAAKwlB,2BAC7B8H,uBAAwB1B,EACxB5oB,iBAAkBhD,KAAKgD,iBACvBygB,4BAA6BzjB,KAAK0kB,kCAAoC1kB,KAAKyjB,iCAA8B/c,EACzGuW,+BAAgCjd,KAAKyM,MAAMwQ,+BAC3CiG,SAAkC,QAA1ByI,EAAE3rB,KAAK6C,MAAMkE,KAAKmc,gBAAQ,IAAAyI,OAAA,EAAxBA,EAA0B9b,SAExC,KA4BF,sCAAmC,IAAA0d,EAAAC,EACvC,MAAMC,QAAwBztB,KAAK6C,MAAMkE,KAAK4S,aAM9C,IAHI8T,MAAAA,GAEC,QAFcF,EAAfE,EAAiB3kB,MACb6Q,GAAsC,wEAAtBA,EAAaE,cAChC,IAAA0T,OAAA,EAFDA,EAEGzT,aAAa,EAGhB,YADA9Z,KAAKgN,SAAS,CAAEiQ,gCAAgC,IAQpD,GAJ+BwQ,MAAAA,GAE9B,QAF6CD,EAAfC,EAAiB3kB,MAC5C6Q,GAAsC,mDAAtBA,EAAaE,cAChC,IAAA2T,OAAA,EAF8BA,EAE5B1T,UAEyB,CAAC,IAAD4T,EACxB,MAAMC,EAA4D,QAArBD,EAAG1tB,KAAK6C,MAAMoC,eAAO,IAAAyoB,GAAS,QAATA,EAAlBA,EAAoBxmB,eAAO,IAAAwmB,GAAK,QAALA,EAA3BA,EAA6Bxe,WAAG,IAAAwe,GAAU,QAAVA,EAAhCA,EAAkCE,gBAAQ,IAAAF,OAAA,EAA1CA,EAA4CG,iCAC5F,IAAKF,GAAuF,SAA5CA,EAE5C,YADA3tB,KAAKgN,SAAS,CAAEiQ,gCAAgC,IAIpD,IAAK,IAAD6Q,EACA,MAAML,QAAwBztB,KAAK6C,MAAMkE,KAAK4S,aAK9C,MAHI8T,MAAAA,GAEC,QAFcK,EAAfL,EAAiB3kB,MACb6Q,GAAsC,oEAAtBA,EAAaE,cAChC,IAAAiU,OAAA,EAFDA,EAEGhU,aAAa,GAGhB,YADA9Z,KAAKgN,SAAS,CAAEiQ,gCAAgC,IAGtD,MAAOhb,GAIL,OAHAjC,KAAK6C,MAAMb,UAAUqa,QAAQpa,GAC7BjC,KAAK6C,MAAMb,UAAUuM,MAAM,qCAC3BvO,KAAKgN,SAAS,CAAEiQ,gCAAgC,IAGJ,QAA5C0Q,EACA3tB,KAAKgN,SAAS,CAAEiQ,gCAAgC,IAEhDjd,KAAK6C,MAAMkE,KAAKqT,oBACX3X,MAAKsrB,IACF,MAAMle,IACAke,IAC4C,QAA5CJ,GAAqDI,EAAaC,OACnB,QAA5CL,IAAsDI,EAAaC,OAC5EhuB,KAAKgN,SAAS,CAAEiQ,+BAAgCpN,OAEnDxB,OAAMpM,IACHjC,KAAK6C,MAAMb,UAAUqa,QAAQpa,GAC7BjC,KAAK6C,MAAMb,UAAUuM,MAAM,sCApC3C,CAuCQ,IAAD0f,EACH,MAAMC,QAA0BluB,KAAK6C,MAAMkE,KAAKmnB,kBAChDluB,KAAKgN,SAAS,CAAEiQ,iCAAwE,QAAxCgR,EAAEC,MAAAA,OAAiB,EAAjBA,EAAmBC,2BAAmB,IAAAF,GAAAA,QAjZ9FxJ,GAAQ2J,EAAAA,EAAAA,IAAA,CADbC,EAAAA,IACK5J,GAuZN,kGCldA,MAmCA,EAnBoD5hB,GAChDgB,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKrB,EAAM0nB,gBAAqB1nB,EAAM8Y,uBAAuB9Y,IAC7DA,EAAMonB,WACNpnB,EAAMwnB,iBACHxmB,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKrB,EAAMwnB,iBACXxnB,EAAMqmB,YACNrmB,EAAMkoB,qCACPlnB,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKrB,EAAMynB,kBAvBPgE,EAAC/F,EAAuD1lB,IACxE0lB,EAIEA,EAAU5mB,KAAI,CAACod,EAAUnQ,IAExB/K,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKrB,EAAM2nB,oBAAmB,CAAEzmB,IAAK6K,IACrCmQ,EAASyB,SACTzB,EAAS6E,cACT7E,EAAS4E,WARlB9gB,EAAMoC,QAAQjD,UAAUC,MAAM,kDACvB,MAoBoCqsB,CAAiBzrB,EAAM0d,UAAW1d,IACpEA,EAAMmoB,WACNnoB,EAAM4nB,2BACN5nB,EAAM+nB,sBACN/nB,EAAMioB,0PCrBvB,MAQA,EAR+FyD,IAAoB,IAAnB,YAAEC,GAAaD,EAC3G,OAAKC,EAIE3qB,EAAAA,cAAA,QAAMC,UAAU,6CAA6C0qB,GAHzD,MCMf,EARiGD,IAAgB,IAAf,QAAEnQ,GAASmQ,EACzG,OAAKnQ,EAIEva,EAAAA,cAAA,KAAGC,UAAU,+CAA+Csa,GAHxD,MCMf,EAR6FmQ,IAAc,IAAb,MAAEhpB,GAAOgpB,EACnG,OAAKhpB,EAIE1B,EAAAA,cAAA,KAAGC,UAAU,6CAA6CyB,GAHtD,MC4Cf,EAjC+FgpB,IAQ1F,IAR2F,UAC5FE,EAAS,MACT1jB,EAAK,YACL2jB,EAAW,aACXC,EAAY,UACZtrB,EAAS,iBACTL,EAAgB,SAChBuI,GACHgjB,EACG,IAAKxjB,EACD,OAAO,KAGX,MAAMpI,GAAUI,EAAAA,EAAAA,kBAAiB,QAASC,EAAmBmf,EAAAA,kBAAkBzC,iBACzEvT,GAAavI,EAAAA,EAAAA,wBAAuBZ,EAAmBL,GAE7D,OACIkB,EAAAA,cAAA,QAAAI,OAAAC,OAAA,CACIJ,UAAU,4CACV8qB,QAASH,EAAS,eACJA,EACdtjB,KAAK,QAAO,eACEujB,EAAW,gBACVC,EAAY,aACfhsB,EAAQc,cAAcC,OAASL,EAAY,GAAGA,KAAaV,EAAQc,cAAcC,QAAUL,EACvG0H,MAAOA,EACPK,KAAK,mBACDe,EAAU,CACdZ,SAAUA,ylBCwCtB,IAAMsjB,EAAN,cAAsChrB,EAAAA,UAsClCtE,YAAmBsD,GACfyJ,MAAMzJ,GAtCU,KAAAisB,eAAyB,GAEzB,KAAAtK,gBAAoC,GAEpC,KAAAuK,WAAqB,EAuBjC,KAAArK,mCAA8C,EAQrC,KAAAsK,iBAAiDnrB,EAAAA,YA4IjD,KAAAorB,KAAO9uB,UACpBH,KAAK6C,MAAMqsB,YAAYD,KAAK,CACxBE,OAAQnvB,KAAKovB,kCAA+B1oB,EAAY1G,KAAKmvB,OAC7DE,SAAUrvB,KAAKovB,kCAA+B1oB,EAAY1G,KAAKqvB,SAC/Dhc,SAAUrT,KAAKovB,kCAA+B1oB,EAAY1G,KAAKqT,SAC/DyV,OACgD,qCAA1C9oB,KAAK6C,MAAMuE,OAAOkoB,0BACpBtvB,KAAKuvB,UACC,WACA,aAGdvvB,KAAKwvB,iBAAmBxvB,KAAKyvB,+BACvBzvB,KAAK0vB,uBAGE,KAAAH,QAAU,KAAc,IAAAI,EAErC,QADkD,QAAlCA,EAAG3vB,KAAK6C,MAAMkE,KAAK6oB,SAAS/f,cAAM,IAAA8f,OAAA,EAA/BA,EAAiCE,aAAa7L,iBAC3ChkB,KAAK8vB,0BAA0BnvB,OAAS,GAGjD,KAAAovB,qBAAwBC,MACjCA,IACIhwB,KAAKwkB,gBAAgB1b,MAAK0W,GAAkBA,EAAeI,OAASoQ,KAO/D,KAAAC,0BAA4B,KACzC,MAAMC,EAAelwB,KAAKwkB,gBAAgB1b,MAAK0W,GAAkBA,EAAeI,OAAS5f,KAAK8uB,iBAC9F,IAAKoB,EAED,OADAlwB,KAAK6C,MAAMoC,QAAQjD,UAAUC,MAAM,kEAC5B,KAGX,MAAM,GAAEE,EAAE,SAAE2E,EAAQ,QAAE7B,GAAYjF,KAAK6C,OACjC,UAAEstB,GAAcnwB,KAAK6C,MAAMsC,UAC3BW,EAAQ0V,GAAAA,CAAI0U,EAAc,uBAAwB,GAClDE,EAAgBpwB,KAAK6C,MAAMoC,QAAQiC,QAAQmhB,QACjD,MAAO,CACHgI,eAAgB,CAAEvsB,UAAW,iDAC7B0qB,YAAa3qB,EAAAA,cAACysB,EAAoBrsB,OAAAC,OAAA,GAAK,CAAEsqB,YAAa0B,EAAapQ,eACnEha,MACIjC,EAAAA,cAACgD,EAAAA,eAAc,CACX1E,GAAIA,EACJ2E,SAAUA,EACV7B,QAASA,EACTnB,UAAU,sCACViD,KAAM,CAAEjB,MAAO,CAAEkB,wBAAyBlB,IAC1CyqB,cAAeJ,EACfK,aAAcJ,MAAAA,OAAa,EAAbA,EAAeK,aAM5B,KAAAC,gBAAkB,KAC/B,MAAM,kBAAEC,GAAsB3wB,KAAK6C,MAAMsC,UACzC,MAAO,CAEHyrB,6BAA8B,CAAEtqB,IAAK,OAAQxC,UAAW,yBAA0BqP,KAAM,QAAS,YAAa,aAC9G5N,MAAO1B,EAAAA,cAACgtB,EAAmB5sB,OAAAC,OAAA,GAAK,CAAEqB,MAAOorB,KACzCvS,QAASva,EAAAA,cAACitB,EAAqB7sB,OAAAC,OAAA,GAAK,CAAEka,QAASpe,KAAKwX,kBAI3C,KAAAuZ,sBAAwB,KACrC,MAAMC,EAAQhxB,KAAKwkB,gBAAgB7jB,QAC7B,UAAEwvB,GAAcnwB,KAAK6C,MAAMsC,WAC3B,GAAEhD,EAAE,SAAE2E,EAAQ,QAAE7B,GAAYjF,KAAK6C,MACjCutB,EAAgBpwB,KAAK6C,MAAMoC,QAAQiC,QAAQmhB,QAEjD,OAAOroB,KAAKwkB,gBAAgB7iB,KAAI,CAAC6d,EAAgC5Q,KACtD,CACHyhB,eAAgB,CAAEvsB,UAAW,uCAAwCqP,KAAM,YAC3E8d,KAAMzR,EAAeI,MAAQ,GAC7BsR,YACIrtB,EAAAA,cAACstB,EAAoBltB,OAAAC,OAAA,GACb,CACAuqB,UAAWjP,EAAeI,OAAS5f,KAAK8uB,eACxC/jB,MAAOyU,EAAeI,KACtB8O,YAAasC,EACbrC,aAAc/f,EAAQ,EACtBvL,UAAW,GAAGmc,EAAeM,cAC7BvU,SAAUvL,KAAKoxB,uBACfpuB,iBAAkBhD,KAAKgD,oBAInCwrB,YACI3qB,EAAAA,cAACysB,EAAoBrsB,OAAAC,OAAA,GACb,CACAsqB,YAAahP,EAAeM,eAIxCha,MACIjC,EAAAA,cAACgD,EAAAA,eAAc,CACX1E,GAAIA,EACJ2E,SAAUA,EACV7B,QAASA,EACTnB,UAAU,sCACViD,KAAM,CAAEjB,MAAO,CAAEkB,wBAAyBwU,GAAAA,CAAIgE,EAAgB,uBAAwB,KACtF+Q,cAAeJ,EACfK,aAAcJ,MAAAA,OAAa,EAAbA,EAAeK,gBAOhC,KAAAY,cAAgB,KAC7B,MAAM,aAAEC,EAAe,QAAWtxB,KAAK6C,MAAMsC,UAC7C,OACItB,EAAAA,cAAC6H,EAAAA,OAAM,CACH5H,UAAU,yCACVyB,MAAO+rB,EACPlY,MAAM,UACNsR,UAAW1qB,KAAK8uB,eAChBjjB,QAAS7L,KAAKuxB,QAEbD,IAKI,KAAAE,cAAgB,KAC7B,MAAM,aAAEC,EAAe,UAAazxB,KAAK6C,MAAMsC,UAC/C,OACItB,EAAAA,cAAC6H,EAAAA,OAAM,CAAC5H,UAAU,yCAAyCyB,MAAOksB,EAAcrY,MAAM,UAAUvN,QAAS7L,KAAKmvB,QACzGsC,IAKI,KAAAC,gBAAkB,KAC/B,MAAM,eAAEC,EAAiB,UAAa3xB,KAAK6C,MAAMsC,UACjD,OACItB,EAAAA,cAAC6H,EAAAA,OAAM,CAAC5H,UAAU,2CAA2CyB,MAAOosB,EAAgBvY,MAAM,YAAYvN,QAAS7L,KAAKqvB,UAC/GsC,IAKI,KAAAC,SAAYpa,IACzBxX,KAAK6C,MAAMb,UAAUC,MAAMuV,GAC3BxX,KAAK6C,MAAMqsB,YAAY2C,aAAY,GACnC7xB,KAAK6C,MAAMqsB,YAAY4C,aACvB9xB,KAAKwX,aAAeA,GAGP,KAAAua,WAAa,KAC1B/xB,KAAK6C,MAAMqsB,YAAY2C,aAAY,GACnC7xB,KAAKwX,kBAAe9Q,GAGP,KAAA6qB,OAASpxB,gBAChBH,KAAKqT,YAGE,KAAA8b,OAAShvB,UAA0B,IAAA6xB,EAChDhyB,KAAK6C,MAAMb,UAAUiwB,YAAY,sCAEjCjyB,KAAK+xB,aACL/xB,KAAK8xB,mBACgC,QAArCE,EAAMhyB,KAAK6C,MAAMkE,KAAK6oB,SAAS/f,cAAM,IAAAmiB,OAAA,EAA/BA,EAAiCE,mCAAmC,CAAEC,iCAAiC,MAGhG,KAAA9e,SAAWlT,UAA0B,IAAAiyB,EAClDpyB,KAAK6C,MAAMb,UAAUiwB,YAAY,8CAE3BjyB,KAAKqyB,gCAAgCryB,KAAK8uB,sBACX,QAArCsD,EAAMpyB,KAAK6C,MAAMkE,KAAK6oB,SAAS/f,cAAM,IAAAuiB,OAAA,EAA/BA,EAAiCF,mCAAmC,CAAEC,iCAAiC,MAGhG,KAAA9C,SAAWlvB,UACxBH,KAAK6C,MAAMb,UAAUiwB,YAAY,wCAGjC,MAAMK,EAAsBtyB,KAAKyvB,yBACP,IAAD8C,EAArBD,GACAtyB,KAAK8uB,eAAiBwD,EACtBtyB,KAAKwyB,gBAEgC,QAArCD,EAAMvyB,KAAK6C,MAAMkE,KAAK6oB,SAAS/f,cAAM,IAAA0iB,OAAA,EAA/BA,EAAiCL,mCAAmC,CAAEC,iCAAiC,MAE7GnyB,KAAK8xB,cAII,KAAArC,uBAAyB,KACtC,MAAMgD,EAAuBzyB,KAAK8vB,0BAClC,OAAO2C,EAAqB,IAAMA,EAAqB,GAAG5S,cAG7C,KAAAwS,gCAAkClyB,MAAAA,IAC/C,GAA8B,KAA1BuyB,EAAeC,OACf,OAGJ,MAAM,UAAExtB,GAAcnF,KAAK6C,MACrB+vB,EAAgB5yB,KAAK6C,MAAMkE,KAAK6oB,SAAS/f,OACzCgjB,EAAuC,CACzCH,eAAAA,EACAI,gBAAiBF,EAAcE,gBAC/BrP,4BAA6BzjB,KAAK0kB,kCAAoC1kB,KAAKyjB,iCAA8B/c,GAG7G1G,KAAK+xB,aACL/xB,KAAK+yB,kBAECH,EAAc/C,aACfwC,gCAAgCQ,GAChCpwB,MAAKuwB,IACF,GAAwB,WAApBA,EAASlK,OAAqB,CAAC,IAADmK,EAC9B,MAAMzb,EAAe,GAAwB,QAAxByb,EAAGD,EAASE,oBAAY,IAAAD,OAAA,EAArBA,EAAuBE,mBAC/CnzB,KAAK4xB,SAASwB,EAAAA,iBAAiBC,cAAc7b,GAAgBrS,EAAUmuB,oBAAsB9b,GAGjGxX,KAAKwyB,UACLxyB,KAAK6C,MAAMqsB,YAAYqE,kBAAiB,MAE3CllB,OAAM,KACHrO,KAAK4xB,SAASzsB,EAAUmuB,yBAInB,KAAAxD,wBAA0B,KACvC,MAAM,QAAE5oB,GAAYlH,KAAK6C,MAAMoC,QACzBqoB,EAAyBpmB,GAAWA,EAAQmhB,SAAWnhB,EAAQmhB,QAAQuD,uBACvExD,EAAwBlhB,GAAWA,EAAQmhB,SAAWnhB,EAAQmhB,QAAQC,sBAE5E,OAAOtoB,KAAK0kB,mCACJ1kB,KAAK6C,MAAMkE,KAAK6oB,SAAS/f,QAAU7P,KAAK6C,MAAMkE,KAAK6oB,SAAS/f,OAAOggB,aAAa/T,KAAKiI,WAAc,IAAI/T,QAAO+O,IAAQ,IAAAyU,EAAA,OACpHzU,EAASc,cAA0C,KAA1Bd,EAASc,aAC5Bd,EAASc,gBAC2B,QADf2T,EACjBxzB,KAAKyjB,mCAA2B,IAAA+P,GAAyB,QAAzBA,EAAhCA,EAAkCC,+BAAuB,IAAAD,OAAA,EAAzDA,EAA2D1qB,MACvDknB,GAAgBA,IAAiBjR,EAASc,iBACzCd,EAASc,eAAiBuI,EACnCrJ,MAER/e,KAAK6C,MAAMkE,KAAK6oB,SAAS/f,QAAU7P,KAAK6C,MAAMkE,KAAK6oB,SAAS/f,OAAOggB,aAAa/T,KAAKiI,WAAc,IAAI/T,QAAO+O,GAC5GA,EAASc,cAA0C,KAA1Bd,EAASc,aAC5Bd,EAASc,eAAiByN,GAA0BvO,EAASc,eAAiBuI,EAC9ErJ,KAIH,KAAA2U,mBAAqBvzB,MAAAA,IAAkD,IAAAwzB,EACpF,IAAK3zB,KAAK6C,MAAMkE,KAAK6oB,SAAS/f,OAC1B,OAGJ,MAAM,QAAE5K,EAAO,UAAEE,EAAS,OAAEiC,GAAWpH,KAAK6C,MACtC4b,EAA2C,QAAlCkV,EAAG3zB,KAAK6C,MAAMkE,KAAK6oB,SAAS/f,cAAM,IAAA8jB,OAAA,EAA/BA,EAAiC9D,aAC7C+D,EAAUnV,EAAU3C,KAAc9X,GAExC,GAAIiB,EAAS,CACTjF,KAAK+uB,WAAY,EACjB/uB,KAAKwkB,gBAAkB,GACvBxkB,KAAK8uB,eAAiB,GACtB9uB,KAAK+xB,aAEL,IACI,IAAI8B,EAA+B,GACnC,MAAMC,EAAoB9zB,KAAK8vB,0BACzBiE,EAA2BD,GAAqBA,EAAkBnzB,OAAS,GAAKmzB,EAAkB,GAAGjU,aAC3G,GAAIkU,EAA0B,CAE1BF,EAAuBC,EAAkB,GAAGjU,cAAgB,GAG5D,MAAM/D,EAAO2C,EAAU3C,WACjB2C,EAAUuV,kCAAkC,CAC9ClY,KAAAA,EACAmY,mCAAoCj0B,KAAKyjB,8BAKjD,IAAIyQ,EACJ,OAAQ9sB,EAAO+sB,0BACX,IAAI,OACAD,EAAuBE,EAAAA,yBAAyBhiB,KAChD,MACJ,IAAI,kCACA8hB,EAAuBE,EAAAA,yBAAyBC,gCAChD,MACJ,QACIH,EAAuBE,EAAAA,yBAAyBC,gCAExD,MAAMrB,QAAiBsB,EAAAA,EAAAA,yBACnB,CACI/yB,cAAe0D,EAAQC,cACvB1D,oBAAqB+yB,EAAAA,yBAAyBC,qCAAqCvvB,EAAQC,gBAE/F0uB,EACAd,EACA,GACAoB,GACA,GAGAH,SACM/zB,KAAKqyB,gCAAgCwB,GAG3Cb,GAAYA,EAASryB,OAAS,IAC9BX,KAAKwkB,gBAAkBwO,GAE7B,MAAAyB,GACEz0B,KAAK4xB,SAASzsB,EAAUmuB,qBAG5B,GAAoC,IAAhCtzB,KAAKwkB,gBAAgB7jB,OACrBX,KAAK4xB,SAASzsB,EAAUuvB,8BACrB,GAAI10B,KAAKwvB,kBAAoBxvB,KAAK+vB,qBAAqB/vB,KAAKwvB,kBAAmB,CAAC,IAADmF,EAAAC,EAClF50B,KAAK8uB,eAAiB9uB,KAAKwvB,iBAC3BxvB,KAAKwvB,sBAAmB9oB,EACxB1G,KAAKwyB,UAG0B,QAA/BmC,EAAA30B,KAAK6C,MAAMkE,KAAK6oB,SAAS/f,cAAM,IAAA8kB,GAA/BA,EAAiCE,0BAA0B,CAAEC,wBAAwB,IAEjD,QAAhCF,EAAC50B,KAAK6C,MAAMkE,KAAK6oB,SAAS/f,cAAM,IAAA+kB,GAA/BA,EAAiCG,wCAC5B/0B,KAAK6C,MAAMkE,KAAK6oB,SAAS/f,OAAOqiB,mCAAmC,CAAEC,iCAAiC,QAE7G,CAAC,IAAD6C,EACHh1B,KAAK8xB,aACL9xB,KAAK8uB,eAAiB9uB,KAAKwkB,gBAAgB7jB,OAAS,GAAIX,KAAKwkB,gBAAgB,GAAG5E,MAAa,GAG9D,QAA/BoV,EAAAh1B,KAAK6C,MAAMkE,KAAK6oB,SAAS/f,cAAM,IAAAmlB,GAA/BA,EAAiCH,0BAA0B,CAAEC,yBAA0B90B,KAAKovB,+BAGhGpvB,KAAK+uB,WAAY,IAIR,KAAAkG,yBAA2B90B,UACxC,IAAKH,KAAK6C,MAAMkE,KAAK6oB,SAAS/f,OAC1B,OAGJ,MAAM,QAAE5K,GAAYjF,KAAK6C,MACnB4b,EAAYze,KAAK6C,MAAMkE,KAAK6oB,SAAS/f,OAAOggB,aAElD,GAAI5qB,EAAS,CACTjF,KAAK+uB,WAAY,EACjB/uB,KAAKwkB,gBAAkB,GACvBxkB,KAAK8uB,eAAiB,GACtB9uB,KAAK+xB,aAEL,IAAI8B,EAA+B,GACnC,MAAMC,EAAoB9zB,KAAK8vB,0BACzBiE,EAA2BD,GAAqBA,EAAkBnzB,OAAS,GAAKmzB,EAAkB,GAAGjU,aAC3G,GAAIkU,EAA0B,CAE1BF,EAAuBC,EAAkB,GAAGjU,cAAgB,GAG5D,MAAM/D,EAAO2C,EAAU3C,WACjB2C,EAAUuV,kCAAkC,CAC9ClY,KAAAA,EACAmY,mCAAoCj0B,KAAKyjB,8BAEzCsQ,SACM/zB,KAAKqyB,gCAAgCwB,GAIvB,IAADqB,EAA3B,GAAIl1B,KAAKwvB,iBACLxvB,KAAK8uB,eAAiB9uB,KAAKwvB,iBAC3BxvB,KAAKwvB,sBAAmB9oB,EACxB1G,KAAKwyB,UAG0B,QAA/B0C,EAAAl1B,KAAK6C,MAAMkE,KAAK6oB,SAAS/f,cAAM,IAAAqlB,GAA/BA,EAAiCL,0BAA0B,CAAEC,wBAAwB,IAEhF90B,KAAK6C,MAAMkE,KAAK6oB,SAAS/f,OAAOklB,wCAC3B/0B,KAAK6C,MAAMkE,KAAK6oB,SAAS/f,OAAOqiB,mCAAmC,CAAEC,iCAAiC,IAIpHnyB,KAAK+uB,WAAY,IAIR,KAAAW,oBAAsBvvB,UAA0B,IAAAg1B,EAC7D,MAAMrC,EAAiD,QAAlCqC,EAAGn1B,KAAK6C,MAAMkE,KAAK6oB,SAAS/f,cAAM,IAAAslB,OAAA,EAA/BA,EAAiCrC,gBAEjB,IAADsC,EAAAC,EAAAC,EAAAC,EAAnCv1B,KAAKuvB,WAAauD,KAEkB,QAAhCsC,EAACp1B,KAAK6C,MAAMkE,KAAK6oB,SAAS/f,cAAM,IAAAulB,IAA/BA,EAAiCL,kCAClC/0B,KAAKovB,8BAC0B,QADEiG,EACjCr1B,KAAK6C,MAAMkE,KAAK6oB,SAAS/f,cAAM,IAAAwlB,GAA/BA,EAAiCG,iCAE3Bx1B,KAAK0zB,mBAAmBZ,GAGC,QAAnCwC,EAAIt1B,KAAK6C,MAAMkE,KAAK6oB,SAAS/f,cAAM,IAAAylB,GAA/BA,EAAiCP,wCAC3B/0B,KAAKi1B,4BAIXj1B,KAAKovB,8BAC0B,QADEmG,EACjCv1B,KAAK6C,MAAMkE,KAAK6oB,SAAS/f,cAAM,IAAA0lB,GAA/BA,EAAiCC,0BACjCx1B,KAAKy1B,oCAELz1B,KAAKqT,aAKA,KAAA+d,uBAA0BsE,IACvC,MAAMhD,EAAiBgD,EAAMC,cAAc5qB,MAC3C/K,KAAK8uB,eAAiB4D,GAGT,KAAAF,QAAU,KACyB,qCAA1CxyB,KAAK6C,MAAMuE,OAAOkoB,0BACpBtvB,KAAK6C,MAAMqsB,YAAYsD,WAId,KAAAV,WAAa,KACsB,qCAA1C9xB,KAAK6C,MAAMuE,OAAOkoB,0BACpBtvB,KAAK6C,MAAMqsB,YAAY4C,cAId,KAAAiB,UAAY,KACpB/yB,KAAKovB,8BACNpvB,KAAK6C,MAAMqsB,YAAY6D,aA3jB3B/yB,KAAKgD,kBAAmBiO,EAAAA,EAAAA,oBACpBjR,KAAK6C,MAAMoC,QAAQiC,QAAQgK,kBAC3BlR,KAAK6C,MAAMsO,aACXnR,KAAK6C,MAAMb,WAEfhC,KAAKovB,6BACDpvB,KAAK6C,MAAMuE,OAAOkoB,0BAAsE,SAA1CtvB,KAAK6C,MAAMuE,OAAOkoB,yBArC9D,kBACN,MAAgF,aAAxEtvB,KAAK6C,MAAMkE,KAAK6oB,SAAS/f,QAAU7P,KAAK6C,MAAMkE,KAAK6oB,SAAS9G,QAGxE,wCAA4C,IAAAtC,EAAAoP,EAExC,MAAMC,EAEe,QAFLrP,EACQ,QADRoP,EACZ51B,KAAK6C,MAAMkE,KAAK+U,YAAI,IAAA8Z,GAAQ,QAARA,EAApBA,EAAsB/lB,cAAM,IAAA+lB,GAAM,QAANA,EAA5BA,EAA8B9Z,YAAI,IAAA8Z,GAAqB,QAArBA,EAAlCA,EAAoCE,2BAAmB,IAAAF,GAA4D,QAA5DA,EAAvDA,EAAyD9sB,MAAKitB,GAA6B,0BAAjBA,EAASC,aAAgC,IAAAJ,GAAO,QAAPA,EAAnHA,EAAqHtyB,aAAK,IAAAsyB,OAAA,EAA1HA,EACMK,mBAAW,IAAAzP,EAAAA,EAAI,GAEzB,OAAOqP,EAAatsB,KAAK2sB,MAAML,GAAc,KAGjD,wCAA4C,IAAAM,EAAAC,EACxC,OAAiF,QAAjFD,EAA6C,QAA7CC,EAAOp2B,KAAKq2B,yCAAiC,IAAAD,OAAA,EAAtCA,EAAwCE,0CAAkC,IAAAH,GAAAA,EA0B9E,0BAAuB,IAAAI,GAC1BC,EAAAA,EAAAA,KACI,IAAMx2B,KAAKy2B,cACXt2B,gBACUH,KAAKivB,WAInB1I,EAAAA,EAAAA,KACI,SAAAmQ,EAAA,OAAqC,QAArCA,EAAM12B,KAAK6C,MAAMkE,KAAK6oB,SAAS/f,cAAM,IAAA6mB,OAAA,EAA/BA,EAAiC5D,mBACvC3yB,UAAW,IAAAw2B,QACD32B,KAAK0vB,sBACX1vB,KAAK6C,MAAMqsB,YAAYqE,kBAAiB,SAEH,QAArCoD,EAAM32B,KAAK6C,MAAMkE,KAAK6oB,SAAS/f,cAAM,IAAA8mB,OAAA,EAA/BA,EAAiCzE,mCAAmC,CAAEC,iCAAiC,SAIrH5L,EAAAA,EAAAA,KACI,SAAAqQ,EAAA,OAAqC,QAArCA,EAAM52B,KAAK6C,MAAMkE,KAAK6oB,SAAS/f,cAAM,IAAA+mB,OAAA,EAA/BA,EAAiCpB,4BACvCr1B,MAAAA,IACgG,IAAD02B,EAAvFrB,GAA4Bx1B,KAAKuvB,YAAcvvB,KAAKy1B,0CAC9Cz1B,KAAK0vB,sBACX1vB,KAAK6C,MAAMqsB,YAAYqE,kBAAiB,SAEH,QAArCsD,EAAM72B,KAAK6C,MAAMkE,KAAK6oB,SAAS/f,cAAM,IAAAgnB,OAAA,EAA/BA,EAAiC3E,mCAAmC,CAAEC,iCAAiC,SAKtF,QAAnCoE,EAAIv2B,KAAK6C,MAAMkE,KAAK6oB,SAAS/f,cAAM,IAAA0mB,GAA/BA,EAAiCO,6CACjCvQ,EAAAA,EAAAA,KACI,SAAAwQ,EAAA,OAAqC,QAArCA,EAAM/2B,KAAK6C,MAAMkE,KAAK6oB,SAAS/f,cAAM,IAAAknB,OAAA,EAA/BA,EAAiCC,iBACvCA,IAEQA,GACAA,EAAcC,gBAAkBC,EAAAA,cAAcrI,yBAC9CmI,EAAcxf,cAEdxX,KAAK4xB,SAASoF,EAAcxf,kBAKxC+O,EAAAA,EAAAA,KACI,SAAA4Q,EAAA,OAAqC,QAArCA,EAAMn3B,KAAK6C,MAAMkE,KAAK6oB,SAAS/f,cAAM,IAAAsnB,OAAA,EAA/BA,EAAiCC,sBACvCA,IACQA,IAAuBC,EAAAA,eAAexI,0BACtCyI,EAAAA,EAAAA,IAAqBt3B,KAAKgvB,iBAAkBhvB,KAAK6C,MAAMoC,QAAQC,mBAO5E0hB,sBAAsBC,EAAgDC,GACzE,OAAI9mB,KAAKyM,QAAUqa,GAAa9mB,KAAK6C,MAAMkE,OAAS8f,EAAU9f,KAM3D6K,SAAM,IAAAuV,EAAAC,EAOT,GALApnB,KAAKyjB,4BAAyE,QAA9C0D,EAAGnnB,KAAK6C,MAAMkE,KAAK0c,mCAA2B,IAAA0D,OAAA,EAA3CA,EAA6CtX,OAChF7P,KAAK0kB,kCAAgE,QAA/B0C,EAAGpnB,KAAK6C,MAAMkE,KAAK4S,oBAAY,IAAAyN,GAAQ,QAARA,EAA5BA,EAA8BvX,cAAM,IAAAuX,GAE5E,QAF4EA,EAApCA,EAAsCte,MAC3EkhB,GAHkC,oEAGvBA,EAAQnQ,cACtB,IAAAuN,OAAA,EAFwCA,EAEtCtN,WAEE9Z,KAAKuvB,UAEN,OADAvvB,KAAK6C,MAAMoC,QAAQjD,UAAUC,MAAM,kEAC5B,KAGX,MACIitB,aAAa,QAAEqI,EAAO,WAAEC,EAAU,SAAEzU,IACpC/iB,KAAK6C,MACH40B,GAAWz3B,KAAK+uB,WAAahM,EAC7B2U,GAAc13B,KAAK+uB,YAAchM,GAAYyU,IAAex3B,KAAKovB,6BACjEuI,GAAkB33B,KAAK+uB,YAAchM,GAAYwU,GACjD,kBAAE5G,EAAiB,wBAAEiH,GAA4B53B,KAAK6C,MAAMsC,UAE5DqN,EAAShM,EAAAA,EAAA,GACRxG,KAAK6C,OAAK,IACbuuB,uBAAwBpxB,KAAKoxB,uBAC7BtC,eAAgB9uB,KAAK8uB,eACrB+I,oBAAqB73B,KAAKwkB,gBAC1BuK,UAAW/uB,KAAK+uB,UAChB+I,MAAO93B,KAAKwX,cAAgB3T,EAAAA,cAACk0B,EAAAA,EAAc9zB,OAAAC,OAAA,GAAK,CAAEqB,MAAOorB,EAAmBvS,QAASpe,KAAKwX,gBAC1FwgB,iBAAkBh4B,KAAKwX,aACvBygB,UAAW,CACPlJ,UAAW/uB,KAAK+uB,UAChB0I,QAAAA,EACAC,WAAAA,EACAC,eAAAA,EACAO,iBAAkBR,IAAe13B,KAAK6C,MAAMqsB,YAAYiJ,uBACxDC,iBAAkBT,IAAmB33B,KAAK6C,MAAMqsB,YAAYiJ,uBAC5DE,mBAAoBX,IAAe13B,KAAK6C,MAAMqsB,YAAYiJ,0BAA4Bn4B,KAAKyvB,0BAE/FZ,wBAAyB,CACrBpc,YAAazS,KAAK6C,MAClBiB,UAAWw0B,GAAAA,CAAU,+BAAgCt4B,KAAK6C,MAAMuE,OAAOtD,YAE3E0gB,gBAAiB,CACb+T,oBAAqB,CACjBz0B,UAAW,qCACXqP,KAAM,OACN,aAAcykB,GAElBY,KAAMx4B,KAAK+wB,yBAEf0H,uBAAwBz4B,KAAKiwB,4BAC7BzY,aAAcxX,KAAK0wB,kBACnBgI,QAAS70B,EAAAA,cAAC80B,EAAAA,QAAO,MACjB3J,iBAAkBhvB,KAAKgvB,iBACvB4J,WAAY54B,KAAKqxB,gBACjBwH,WAAY74B,KAAKwxB,gBACjBsH,aAAc94B,KAAK0xB,kBACnBH,OAAQvxB,KAAKuxB,OACbpC,OAAQnvB,KAAKmvB,OACbE,SAAUrvB,KAAKqvB,WAGnB,OAAOrvB,KAAK6C,MAAMiR,WAAWtB,MA3KrB4b,EAAAA,EAAAA,IAAA,CAAX2K,EAAAA,IAAU,sCAEC3K,EAAAA,EAAAA,IAAA,CAAX2K,EAAAA,IAAU,uCAEC3K,EAAAA,EAAAA,IAAA,CAAX2K,EAAAA,IAAU,iCAEC3K,EAAAA,EAAAA,IAAA,CAAX2K,EAAAA,IAAU,oCAED3K,EAAAA,EAAAA,IAAA,CAAT4K,EAAAA,IAAQ,iCAuKT5K,EAAAA,EAAAA,IAAA,CADChsB,EAAAA,IAAM,2BA/KLysB,GAAuBT,EAAAA,EAAAA,IAAA,CAF5B6K,EAAAA,gBACA5K,EAAAA,IACKQ,GAwmBN,yGC3rBA,MAAMqK,EAA6D3K,IAAkC,IAAjC,oBAAEgK,EAAmB,KAAEC,GAAMjK,EAC7F,OAAKiK,GAAwB,IAAhBA,EAAK73B,OAKdkD,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKq0B,GACLC,EAAK72B,KAAK6d,GAEH3b,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKsb,EAAe6Q,eAAc,CAAEtsB,IAAKyb,EAAeyR,KAAI,aAAa,qCACzEzR,EAAe0R,YACf1R,EAAegP,YACfhP,EAAe1Z,UAVzB,MAkBTqzB,EAA4DC,IAA2C,IAA1C,eAAE/I,EAAc,YAAE7B,EAAW,MAAE1oB,GAAOszB,EACrG,OACIv1B,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKmsB,GACL7B,EACA1oB,IAiCb,EA5BiFjD,IAC7E,MAAM,wBACFgsB,EAAuB,iBACvBG,EAAgB,UAChBiJ,EAAS,gBACTzT,EAAe,uBACfiU,EAAsB,MACtBX,EAAK,QACLY,EAAO,WACPE,EAAU,WACVC,EAAU,aACVC,GACAj2B,EAEJ,OAEIgB,EAAAA,cAACwQ,EAAAA,OAAMpQ,OAAAC,OAAA,GAAK2qB,EAAuB,CAAEvjB,IAAK0jB,IACrCiJ,EAAUlJ,WAAa2J,EACvBT,EAAUR,SAAWK,EACrBG,EAAUP,YAAclT,GAAmB3gB,EAAAA,cAACq1B,EAAkBj1B,OAAAC,OAAA,GAAKsgB,IACnEyT,EAAUN,gBAAkBc,GAA0B50B,EAAAA,cAACs1B,EAAsBl1B,OAAAC,OAAA,GAAKu0B,IAClFR,EAAUC,kBAAoBU,EAC9BX,EAAUG,kBAAoBS,EAC9BZ,EAAUI,oBAAsBS,2SCJ7C,MAAMO,EAAkBC,GAAyCn5B,MAAAA,IAC7Du1B,EAAMvmB,uBACAmqB,KAQJC,EAAyBC,GAA6D9D,IACxF,MAAM3qB,GAAS2qB,EAAM5qB,OAAOC,OAAS,IAAIxH,QAAQ,IAAIC,OAAO,OAAQ,MAAO,IAC3Eg2B,EAAsBzuB,IAQpB0uB,EAAsBC,GAAuDhE,IAC/E,MAAM3qB,GAAS2qB,EAAM5qB,OAAOC,OAAS,IAAIxH,QAAQ,IAAIC,OAAO,OAAQ,MAAO,IAC3Ek2B,EAAmB3uB,IASjB4uB,EAAsBC,GAAuDlE,IAC/E,MAAM3qB,GAAS2qB,EAAM5qB,OAAOC,OAAS,IAAIxH,QAAQ,IAAIC,OAAO,OAAQ,MAAO,IAC3Eo2B,EAAmB7uB,IAGV8uB,EAAWC,IACpB,MAAM,aACFtiB,EAAY,SACZuiB,EAAQ,YACRC,EAAW,YACXC,EAAW,eACXC,EAAc,YACdC,EAAW,YACXC,EAAW,sBACXZ,EAAqB,mBACrBE,EAAkB,mBAClBE,EAAkB,gBAClBN,EAAe,wBACfe,EAAuB,iBACvBC,EAAgB,mBAChBC,EACAp1B,WAAW,oBACPq1B,EAAmB,kBACnBC,EAAiB,oBACjBC,EAAmB,iBACnBC,EAAgB,iBAChBC,EAAgB,mBAChBC,EAAkB,2BAClBC,EAA0B,2BAC1BC,IAEJjB,EAEEkB,EAAY,CACdl3B,UAAW4O,GAAAA,CAAW,8BAA+B,CAAE,eAAgB8E,IACvEnE,SAAUgmB,EAAeC,GACzBhzB,IAAK,QAGHqF,EACF9H,EAAAA,cAAA,SAAO1B,GAAG,+BAA+B2B,UAAU,sCAC9C22B,GAIHQ,EACFp3B,EAAAA,cAAA,SAAO1B,GAAG,yCAAyC2B,UAAU,0CACxD62B,GAIHO,EACFr3B,EAAAA,cAAA,SAAO1B,GAAG,yCAAyC2B,UAAU,0CACxD82B,GAIHO,EACFt3B,EAAAA,cAAA,SAAO1B,GAAG,qCAAqC2B,UAAU,4CACpD+2B,GAIH/C,EACFj0B,EAAAA,cAACsV,EAAAA,MAAK,CACF7S,IAAI,OACJnE,GAAG,+BACH2B,UAAU,qCACVqP,KAAK,QACLioB,WAAW,EACXC,MAAM,EACNC,mBAAmB,EACnBzjB,SAAUL,GAETA,GAoBH+jB,EACF13B,EAAAA,cAAA,SACIyH,IAAKyuB,EACL5uB,KAAK,OACLrH,UAAU,iDAAgD,aAC9C42B,EACZnvB,SAAUguB,EAAsBC,GAChCzuB,MAAOmvB,EAAc,kBACL,8DAIlBsB,EACF33B,EAAAA,cAAA,SACIyH,IAAK0uB,EACL7uB,KAAK,OACLrH,UAAU,oDAAmD,aACjD62B,EACZtvB,YAAayvB,EACbvvB,SAAUkuB,EAAmBC,GAC7B3uB,MAAOovB,EAAW,kBACF,8DAIlBsB,EACF53B,EAAAA,cAAA,SACIyH,IAAK2uB,EACL9uB,KAAK,OACLrH,UAAU,oDAAmD,aACjD,GAAG82B,KAAoBG,IACnC1vB,YAAa0vB,EACbxvB,SAAUouB,EAAmBC,GAC7B7uB,MAAOqvB,EAAW,mBACD,8DAInBsB,EACF73B,EAAAA,cAAC6H,EAAAA,OAAM,CACH5H,UAAU,mCACV+H,QAASwtB,EAAeC,GAAgB,aAC5BkB,EACZ9P,SAAU6P,IAAuBL,GAEhCM,GAIT,IAAImB,GAAuB,EACvBC,GAAuB,EAE3B,OAAQtB,GACJ,IAAI,MACAqB,GAAuB,EACvB,MACJ,IAAI,iBACAC,GAAuB,EACvB,MACJ,IAAI,uBACAD,GAAuB,EACvBC,GAAuB,EAK/B,MAAO,CACHZ,UAAAA,EACArvB,MAAAA,EACAsvB,cAAAA,EACAC,cAAAA,EACApD,MAAAA,EACA+D,WAxFe,CACf/3B,UAAW,uCAwFXg4B,cArFkB,CAClBh4B,UAAW,2CAqFXi4B,cAlFkB,CAClBj4B,UAAW,2CAkFXk4B,cA/EkB,CAClBl4B,UAAW,2CA+EXy3B,YAAAA,EACAC,SAAAA,EACAC,SAAAA,EACAC,YAAAA,EACArB,wBAAAA,EACAsB,qBAAAA,EACAC,qBAAAA,EACAT,gBAAAA,IC7OFc,EAAkBA,CAACC,EAAoDC,IAA8B,KAAW,IAAAC,EAClHF,EAA4B,QAAZE,EAACD,EAASn4B,UAAE,IAAAo4B,EAAAA,EAAI,KAgBvBC,EAAU9N,IAMI,IANH,SACpB4N,EAAQ,kBACRG,EAAiB,UACjBC,EAAS,iBACTL,EACA/2B,WAAW,qBAAEq3B,EAAoB,8BAAEC,EAA6B,qBAAEC,IACtDnO,EACZ,MAAMoO,EAAUL,EAAkBH,EAASS,QAAST,EAASU,kBACvDC,GAAsBX,EAASn4B,IAAM,IAAI+4B,QAAQ,GAMjDC,EACFn5B,EAAAA,cAAA,QAAMC,UAAU,oCACX04B,EACA,IACAM,EACA,KACAL,EACA,IACD54B,EAAAA,cAAA,QAAMC,UAAU,kCAAkC64B,GACjD,KAIHM,EAAeV,GACjB14B,EAAAA,cAAC6H,EAAAA,OAAM,CAAC5H,UAAU,oCAAoC+H,QAASowB,EAAgBC,EAAkBC,IAC5FO,GAIT,MAAO,CACHQ,UAxBc,CACdp5B,UAAW,+BAwBX3B,GAAIg6B,EAASn4B,GACbg5B,iBAAAA,EACAC,aAAAA,IC7DKE,EAAU5O,IAA+G,IAA9G,UAAE6O,EAAS,UAAEb,EAAS,UAAEp3B,EAAS,kBAAEm3B,EAAiB,iBAAEJ,GAAiC3N,EAC3G,IAAK6O,GAAkC,IAArBA,EAAUz8B,OACxB,OAiBJ,MAAO,CACH08B,UAfc,CACdv5B,UAAW,+BAeX00B,KAZS4E,EAAUz7B,KAAIw6B,GACvBE,EAAQ,CACJE,UAAAA,EACAD,kBAAAA,EACAH,SAAAA,EACAD,iBAAAA,EACA/2B,UAAAA,QC7BZ,EAFqDopB,IAAA,IAAC,MAAEhpB,GAAOgpB,EAAA,OAAK1qB,EAAAA,cAAA,SAAOC,UAAU,gCAAgCyB,QCkChH+3B,klBAAL,SAAKA,GACDA,EAAA,oBACAA,EAAA,oBACAA,EAAA,YAHJ,CAAKA,IAAAA,EAAqB,KA4C1B,IAAaC,EAAb,cAAsC15B,EAAAA,UAAtCtE,cAAA,IAAAi+B,EAAA,2BACW,KAAA/wB,MAAgC,CACnCgxB,oBAAoB,EACpBjmB,aAAc,GACd0iB,eAAgB,GAChBC,YAAa,GACbC,YAAa,IAGA,KAAAL,SAA8Cl2B,EAAAA,YAE9C,KAAAm2B,YAAiDn2B,EAAAA,YAEjD,KAAAo2B,YAAiDp2B,EAAAA,YAEjD,KAAAmrB,iBAAiDnrB,EAAAA,YAqLjD,KAAAorB,KAAO,KAAW,IAAAU,EAAAqC,EAC/BhyB,KAAK6C,MAAMqsB,YAAYD,KAAIzoB,EAAC,CACxB2oB,OAAQnvB,KAAKmvB,OACbE,SAAUrvB,KAAKqvB,SACfhc,SAAUrT,KAAKqT,SACfqqB,YAAY,IACP19B,KAAK29B,aAAe,CAAE7U,OAAQ,cAGvC,MAAMsU,EAA2C,QAAlCzN,EAAG3vB,KAAK6C,MAAMkE,KAAK6oB,SAAS/f,cAAM,IAAA8f,OAAA,EAA/BA,EAAiCiO,gBAC/CR,GAAaA,EAAUz8B,OAAS,EAChCX,KAAK6C,MAAMqsB,YAAYsD,UACe,QAAnCR,EAAIhyB,KAAK6C,MAAMkE,KAAK6oB,SAAS/f,cAAM,IAAAmiB,GAA/BA,EAAiC+C,kCACxC/0B,KAAK6C,MAAMqsB,YAAY2O,UAId,KAAAC,oBAAsB,KAAc,IAAA1L,EACjD,MAAMtW,EAAO9b,KAAK6C,MAAMkE,KAAK6oB,SAAS/f,OAAqD,QAA/CuiB,EAAGpyB,KAAK6C,MAAMkE,KAAK6oB,SAAS/f,OAAOggB,oBAAY,IAAAuC,OAAA,EAA5CA,EAA8CtW,UAAOpV,EACpG,QAAKoV,IAKGA,EAAK6N,aAAe,GAAK,GAGpB,KAAAgU,UAAY,OAEpB39B,KAAK6C,MAAMoC,QAAQiC,QAAQqgB,KAAKC,iBACjCxnB,KAAK6C,MAAMoC,QAAQiK,IAAI9H,OAAO22B,oBAAsBT,EAAsBU,WACzEh+B,KAAK6C,MAAMuE,OAAO62B,0BAIhBj+B,KAAK89B,sBAGC,KAAA3O,OAAS,KACtBnvB,KAAK6C,MAAMb,UAAUiwB,YAAY,+CAGjCjyB,KAAK6C,MAAMqsB,YAAY4C,cAGV,KAAAzC,SAAW,KACxBrvB,KAAK6C,MAAMb,UAAUiwB,YAAY,iDAEjCjyB,KAAKk+B,wBAGQ,KAAA7qB,SAAW,KACxBrT,KAAK6C,MAAMb,UAAUiwB,YAAY,iDAEjCjyB,KAAKk+B,wBAGQ,KAAAA,qBAAuB,KAChCl+B,KAAKm+B,gBAELn+B,KAAK6C,MAAMqsB,YAAYsD,UAGvBxyB,KAAK6C,MAAMqsB,YAAY2O,UAId,KAAAvB,kBAAoB,WAA4D,IAA3Dx2B,EAAAqW,UAAAxb,OAAA,QAAA+F,IAAAyV,UAAA,GAAAA,UAAA,GAAgB,EAAGqU,EAAArU,UAAAxb,OAAA,QAAA+F,IAAAyV,UAAA,GAAAA,UAAA,GAAuB,MAC5E,OAAOqhB,EAAK36B,MAAMoC,QAAQ6kB,iBAAiBC,eAAejkB,EAAO0qB,IAGpD,KAAA4N,oBAAuBlE,IACpCl6B,KAAKgN,SAAS,CACVktB,eAAAA,IAEJl6B,KAAK+xB,cAGQ,KAAAsM,iBAAoBlE,IACjCn6B,KAAKgN,SAAS,CACVmtB,YAAAA,IAEJn6B,KAAK+xB,cAGQ,KAAAuM,iBAAoBlE,IACjCp6B,KAAKgN,SAAS,CACVotB,YAAAA,IAEJp6B,KAAK+xB,cAGQ,KAAAH,SAAYpa,IACzBxX,KAAK6C,MAAMb,UAAUC,MAAM,QAASuV,GACpCxX,KAAK6C,MAAMb,UAAUuM,MAAM,QAASiJ,GACpCxX,KAAK6C,MAAMqsB,YAAY2C,aAAY,GACnC7xB,KAAKgN,SAAS,CACVwK,aAAAA,KAIS,KAAAua,WAAa,KAC1B/xB,KAAK6C,MAAMqsB,YAAY2C,aAAY,GACnC7xB,KAAKgN,SAAS,CACVwK,aAAc,MAIL,KAAA+mB,eAAiBp+B,MAAAA,IAC9BH,KAAK6C,MAAMb,UAAUiwB,YAAY,+CAEjC,MAAMW,EAAgB5yB,KAAK6C,MAAMkE,KAAK6oB,SAAS/f,OAC1C+iB,SAICA,EAAc2L,eAAe,CAAErE,eAAAA,KAGxB,KAAAsE,cAAgBr+B,UAG7B,GAFAH,KAAK6C,MAAMb,UAAUiwB,YAAY,8CAE7BjyB,KAAKyM,MAAMgxB,mBACX,OAEJz9B,KAAKgN,SAAS,CACVywB,oBAAoB,IAGxB,MAAM7K,EAAgB5yB,KAAK6C,MAAMkE,KAAK6oB,SAAS/f,OACzCqqB,EAAiBl6B,KAAKyM,MAAMytB,eAAevH,OAC3CwH,EAAcn6B,KAAKyM,MAAM0tB,YAAYxH,OACrCyH,EAAcp6B,KAAKyM,MAAM2tB,YAAYzH,OAErC8L,QAAsBz+B,KAAK0+B,iBAAiBxE,GAC5CyE,EAAeF,GAAiBA,EAAc,GAC9CG,EAAgBD,GAAgBA,EAAaE,cAC7CC,EAAgBH,GAAgBA,EAAaI,yBAC7CC,EAAeL,GAAgBA,EAAaM,gBAC5C9C,QAAiBn8B,KAAKk/B,YAAYhF,EAAgBC,EAAaC,EAAawE,EAAeE,EAAeE,GAEhH,GAAIpM,GAAiBuJ,EAYjB,aAXMvJ,EAAcuM,YAAY,CAC5BhD,SAAAA,EACAle,qBAAsB,CAAEmhB,IAAKjF,EAAakF,eAAgBjF,EAAakF,aAAcN,KAEzFh/B,KAAK+xB,aACL/xB,KAAKgN,SAAS,CACVktB,eAAgB,GAChBC,YAAa,GACbC,YAAa,GACbqD,oBAAoB,IAEjBl7B,QAAQga,UAEnB,MAAMlc,EAAQL,KAAK+5B,UAAY/5B,KAAK+5B,SAAS7sB,SAAWlN,KAAK+5B,SAAS7sB,QAAQkC,OAAUpP,KAAK+5B,SAAS7sB,QACtG7M,GAASA,EAAM+O,QACfpP,KAAKgN,SAAS,CACVywB,oBAAoB,IAExBz9B,KAAK6C,MAAMb,UAAUiwB,YAAY,kDAGpB,KAAAsN,wBAA0B,CACvCC,EACAC,EACAC,KAEA,IAAIC,EAEJ,OAAQD,GACJ,KAAKpC,EAAsBsC,SACvBD,EAAqBH,EAAYxvB,QAC7B6vB,GAAcA,EAAWC,cAAgBL,GAA0C,KAA3BI,EAAWE,cAEvE,MACJ,KAAKzC,EAAsBU,SACvB2B,EAAqBH,EAAYxvB,QAC7B6vB,GAAcA,EAAWC,cAAgBL,GAA0C,KAA3BI,EAAWE,cAEvE,MACJ,QACI,MAAM,IAAI19B,MAAM,0BAGxB,GAAIs9B,EACA,OAAOA,EAAmBh+B,KAAIk+B,GAAcA,EAAWP,cAAgB,MAK9D,KAAAJ,YAAc/+B,MAC3B+5B,EACAC,EACAC,EACAwE,EACAE,EACAE,KAEA,MACI75B,WAAW,eAAE66B,EAAc,qBAAEC,EAAoB,qBAAEC,EAAoB,eAAEC,EAAc,eAAEC,IACzFpgC,KAAK6C,MAEHw9B,EAAwBrgC,KAAK6C,MAAMoC,QAAQiK,IAAI9H,OAAO22B,kBAE5D,IAAKiB,EACD,OAGJ,MAAMQ,QAAoBc,EAAAA,EAAAA,qBAAoB,CAAE/+B,cAAevB,KAAK6C,MAAMoC,QAAQC,cAAe1D,oBAAqB,KAAM6M,OACxHpM,IACI,MAAMA,KAId,IAAKu9B,EACD,MAAM,IAAIn9B,MAAM,qCAEpB,MAAMk+B,EAA8BvgC,KAAKu/B,wBACrCC,EACAgB,EAAAA,WAAWC,mBACXnD,EAAsBsC,UAEpBc,EAA8B1gC,KAAKu/B,wBACrCC,EACAgB,EAAAA,WAAWC,mBACXnD,EAAsBU,UAG1B,OAAQqC,GACJ,UAAK35B,EACL,KAAK42B,EAAsBsC,SACvB,GAAKW,MAAAA,IAAAA,EAA6B7U,SAASsT,GAEvC,YADAh/B,KAAK4xB,SAASsO,GAGlB,MACJ,KAAK5C,EAAsBU,SACvB,GAAK0C,MAAAA,IAAAA,EAA6BhV,SAASsT,GAEvC,YADAh/B,KAAK4xB,SAASsO,GAGlB,MACJ,KAAK5C,EAAsBqD,KACvB,KAAKJ,MAAAA,GAAAA,EAA6B7U,SAASsT,IAAkB0B,MAAAA,GAAAA,EAA6BhV,SAASsT,IAE/F,YADAh/B,KAAK4xB,SAASsO,GAGlB,MACJ,QACI,MAAM,IAAI79B,MAAM,8BAGxB,GAAIu8B,GAAiC,KAAhBzE,EAEjB,YADAn6B,KAAK4xB,SAASuO,GAIlB,GAAIrB,GAAiC,KAAhB1E,EAEjB,YADAp6B,KAAK4xB,SAASwO,GAIlB,MAAMQ,EAAQC,OAAOz3B,SAASgxB,EAAY5xB,MAAM,KAAK,GAAI,IACnDs4B,EAAOD,OAAOz3B,SAASgxB,EAAY5xB,MAAM,KAAK,GAAI,IAExD,OAAOu4B,EAAAA,EAAAA,kBAAiB,CAAEx/B,cAAevB,KAAK6C,MAAMoC,QAAQC,eAAiBg1B,EAAgB8E,EAAc7E,EAAayG,EAAOE,GAC1Hr+B,MAAKu+B,IACF,GAAKA,EAAepE,SAAsC,IAA3BoE,EAAepE,QAI9C,OAAOoE,EAHHhhC,KAAK4xB,SAASoO,MAKrB3xB,OAAMpM,IACHjC,KAAK4xB,SAASqO,OAKT,KAAAvB,iBAAmBv+B,MAAAA,IAChC,MACIgF,WAAW,gBAAE87B,EAAe,oBAAEC,EAAmB,iBAAEC,GACnDp6B,MAAM,SAAE6oB,IACR5vB,KAAK6C,MAET,IAAKq3B,EAED,YADAl6B,KAAK4xB,SAASqP,GAKlB,IADqBrR,EAAS/f,SAAU+f,EAAS/f,OAAO+tB,gBAAgBhV,MAAMwY,GAAmBA,EAAKp9B,KAAOk2B,IAM7G,OAAOmH,EAAAA,EAAAA,uBAAsB,CAAE9/B,cAAevB,KAAK6C,MAAMoC,QAAQC,eAAiBg1B,EAAgBoH,EAAAA,SAASC,UACtG9+B,MAAKg8B,IACF,GAAKA,GAA0C,IAAzBA,EAAc99B,aAAqC+F,IAArB+3B,EAAc,GAIlE,OAAOA,EAHHz+B,KAAK4xB,SAASuP,MAKrB9yB,OAAMpM,IACHjC,KAAK4xB,SAASuP,MAblBnhC,KAAK4xB,SAASsP,IAxdZ,kBACN,MAAgF,aAAxElhC,KAAK6C,MAAMkE,KAAK6oB,SAAS/f,QAAU7P,KAAK6C,MAAMkE,KAAK6oB,SAAS9G,QAG9D,uBACN,MAAM8J,EAAgB5yB,KAAK6C,MAAMkE,KAAK6oB,SAAS/f,OAC/C,OAAK+iB,GAAkBA,EAAc4O,cAG9B5O,EAAc4O,cAFV,EAKL,+BACN,MAAM5O,EAAgB5yB,KAAK6C,MAAMkE,KAAK6oB,SAAS/f,OAC/C,OAAO+iB,GAAiBA,EAAc6O,sBAAwB7O,EAAc6O,sBAAwB,EAG9F,6BACN,MAAM7O,EAAgB5yB,KAAK6C,MAAMkE,KAAK6oB,SAAS/f,OAC/C,OAAK+iB,GAAkBA,EAAcgL,gBAG9BhL,EAAcgL,gBAAgB8D,QAAO,CAAC1Q,EAAemL,IAEjDnL,GADiBmL,EAASS,SAAW,IAE7C,GALQ,EAQL,yBACN,MAAM9gB,EAAO9b,KAAK6C,MAAMkE,KAAK6oB,SAAS/f,OAAS7P,KAAK6C,MAAMkE,KAAK6oB,SAAS/f,OAAOggB,aAAa/T,UAAOpV,EACnG,OAAKoV,IAGGA,EAAK6N,aAAe,GAAK3pB,KAAK2hC,iBAAmB3hC,KAAK4hC,wBAA0B,EAGlF,wBACN,MAAM9lB,EAAO9b,KAAK6C,MAAMkE,KAAK6oB,SAAS/f,OAAS7P,KAAK6C,MAAMkE,KAAK6oB,SAAS/f,OAAOggB,aAAa/T,UAAOpV,EACnG,IAAKoV,EACD,OAAO,EAKX,OADmBA,EAAK6N,aAAe,GAAK3pB,KAAK2hC,iBAAmB3hC,KAAK6hC,yBACtD,EAGb,sBACN,MACI96B,MAAM,SAAE6oB,IACR5vB,KAAK6C,MACHu6B,EAAYxN,EAAS/f,QAAU+f,EAAS/f,OAAO+tB,gBACrD,QAASR,GAAaA,EAAUz8B,OAAS,EAGtC4a,oBAAiB,IAAAgX,GACpBiE,EAAAA,EAAAA,KACI,IAAMx2B,KAAKy2B,cACX,KACIz2B,KAAKivB,UAIsB,QAAnCsD,EAAIvyB,KAAK6C,MAAMkE,KAAK6oB,SAAS/f,cAAM,IAAA0iB,GAA/BA,EAAiCuE,6CACjCvQ,EAAAA,EAAAA,KACI,SAAAoN,EAAA,OAAqC,QAArCA,EAAM3zB,KAAK6C,MAAMkE,KAAK6oB,SAAS/f,cAAM,IAAA8jB,OAAA,EAA/BA,EAAiCqD,iBACvCA,IACQA,GAAiBA,EAAcC,gBAAkBC,EAAAA,cAAcqG,kBAAoBvG,EAAcxf,cACjGxX,KAAK4xB,SAASoF,EAAcxf,kBAKxC+O,EAAAA,EAAAA,KACI,SAAAoO,EAAA,OAAqC,QAArCA,EAAM30B,KAAK6C,MAAMkE,KAAK6oB,SAAS/f,cAAM,IAAA8kB,OAAA,EAA/BA,EAAiCyC,sBACvCA,IACQA,IAAuBC,EAAAA,eAAekG,mBACtCjG,EAAAA,EAAAA,IAAqBt3B,KAAKgvB,iBAAkBhvB,KAAK6C,MAAMoC,QAAQC,mBAO5E0hB,sBAAsBC,EAAyCC,GAClE,OAAI9mB,KAAKyM,QAAUqa,GAAa9mB,KAAK6C,MAAMkE,OAAS8f,EAAU9f,KAM3D6K,SACH,MACIsd,aAAa,QAAEqI,GACfxwB,MAAM,SAAE6oB,GACRxoB,QAAQ,UAAEtD,EAAS,qBAAEg+B,GAAsB,UAC3C38B,GACAnF,KAAK6C,OACH,aAAE2U,EAAY,eAAE0iB,EAAc,YAAEC,EAAW,YAAEC,GAAgBp6B,KAAKyM,MAClE2wB,EAAYxN,EAAS/f,QAAU+f,EAAS/f,OAAO+tB,gBAC/CtD,EAAmBwH,EACnBzB,EAAwBrgC,KAAK6C,MAAMoC,QAAQiK,IAAI9H,OAAO22B,kBAE5D,IAAK/9B,KAAK29B,cAAiB39B,KAAK+hC,oBAAsBxK,EAElD,OADAv3B,KAAK6C,MAAMoC,QAAQjD,UAAUC,MAAM,0DAC5B,KAGX,GAAIjC,KAAK6C,MAAMoC,QAAQiC,QAAQqgB,KAAKya,cAAmD,IAAnCC,EAAAA,sBAAsBV,SAEtE,OADAvhC,KAAK6C,MAAMoC,QAAQjD,UAAUiwB,YAAY,kEAClC,KAGX,MAAMoI,EAA0BgG,IAA0B/C,EAAsBsC,SAE1EsC,EAAkB5J,GAAAA,CAAU,wBAAyBx0B,EAAWyzB,EAAU,OAAS,OAEnF/kB,EAAShM,EAAAA,EAAAA,EAAA,GACRxG,KAAK6C,OACL7C,KAAKyM,OAAK,IACb3I,UAAWo+B,EACXlT,iBAAkBhvB,KAAKgvB,iBAEvBmT,sBAAuB,CAAE1vB,YAAazS,KAAK6C,MAAOiB,UAAWo+B,GAC7DpE,oBAAqB99B,KAAK89B,sBAC1BH,UAAW39B,KAAK29B,YAChBxO,OAAQnvB,KAAKmvB,OACbE,SAAUrvB,KAAKqvB,SACfhc,SAAUrT,KAAKqT,SACf+qB,oBAAqBp+B,KAAKo+B,oBAC1BC,iBAAkBr+B,KAAKq+B,iBACvBC,iBAAkBt+B,KAAKs+B,iBACvBC,eAAgBv+B,KAAKu+B,eACrBC,cAAex+B,KAAKw+B,cACpB4D,aAAc7K,EACR,CACIhyB,MAAO1B,EAAAA,cAACw+B,EAAa,CAAC98B,MAAOJ,EAAUs1B,oBACvCjC,KAAM2E,EAAQ,CACVZ,WAAW,EACXD,kBAAmBt8B,KAAKs8B,kBACxBc,UAAWA,GAAa,IAAIA,GAC5BlB,iBAAkBl8B,KAAKu+B,eACvBp5B,UAAAA,UAGRuB,EACNy4B,YAAc5H,OA2BR7wB,EA1BA,CACI+M,KAAMomB,EAAQ,CACVriB,aAAAA,EACA0iB,eAAAA,EACAC,YAAAA,EACAC,YAAAA,EACAL,SAAU/5B,KAAK+5B,SACfC,YAAah6B,KAAKg6B,YAClBC,YAAaj6B,KAAKi6B,YAClB90B,UAAAA,EACAq0B,sBAAuBx5B,KAAKo+B,oBAC5B1E,mBAAoB15B,KAAKq+B,iBACzBzE,mBAAoB55B,KAAKs+B,iBACzBhF,gBAAiBt5B,KAAKw+B,cACtBnE,wBAAAA,EACAC,iBAAAA,EACAC,mBAAoBv6B,KAAKu6B,qBAE7B/B,KAAM2E,EAAQ,CACVZ,WAAW,EACXD,kBAAmBt8B,KAAKs8B,kBACxBc,UAAWA,GAAa,IAAIA,GAC5BlB,iBAAkBl8B,KAAKu+B,eACvBp5B,UAAAA,OAMlB,OAAOnF,KAAK6C,MAAMiR,WAAWtB,MAhLvB4b,EAAAA,EAAAA,IAAA,CAAT4K,EAAAA,IAAQ,iCAIC5K,EAAAA,EAAAA,IAAA,CAAT4K,EAAAA,IAAQ,sCAQC5K,EAAAA,EAAAA,IAAA,CAAT4K,EAAAA,IAAQ,8CAKC5K,EAAAA,EAAAA,IAAA,CAAT4K,EAAAA,IAAQ,4CAWC5K,EAAAA,EAAAA,IAAA,CAAT4K,EAAAA,IAAQ,wCAQC5K,EAAAA,EAAAA,IAAA,CAAT4K,EAAAA,IAAQ,uCAWC5K,EAAAA,EAAAA,IAAA,CAAT4K,EAAAA,IAAQ,oCAhEAuE,GAAgBnP,EAAAA,EAAAA,IAAA,CAD5BC,EAAAA,IACYkP,GA4fb,SAAetE,EAAAA,EAAAA,iBAAgBsE,+MC3kBlB+E,EAAwB/T,IAAA,IAAC,UAClCyM,EAAS,MACTrvB,EAAK,cACLsvB,EAAa,cACbC,EAAa,MACbpD,EAAK,WACL+D,EAAU,cACVC,EAAa,cACbC,EAAa,cACbC,EAAa,YACbT,EAAW,SACXC,EAAQ,SACRC,EAAQ,YACRC,EAAW,wBACXrB,EAAuB,qBACvBsB,EAAoB,qBACpBC,EAAoB,gBACpBT,GACH5M,EAAA,OACG1qB,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK82B,GACLlD,EACAuC,EACGx2B,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK23B,GACNh4B,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK43B,GACLnwB,EACA4vB,GAEJI,GACG93B,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK63B,GACLd,EACAO,GAGRI,GACG/3B,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK83B,GACLd,EACAO,IAGPE,GAAwBC,IAAyBT,GAGvDt3B,EAAAA,cAAAA,EAAAA,SAAA,KACK8H,EACA4vB,GAGRG,IAII6G,EAAoCnJ,IAAA,IAAC,UAAE8D,EAAS,iBAAEF,EAAgB,aAAEC,GAAc7D,EAAA,OAC3Fv1B,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,CAACiP,KAAK,QAAO,YAAW,aAAgB+pB,GACxCF,EACAC,IAIIuF,EAAgCC,IAAA,IAAC,UAAEpF,EAAS,KAAE7E,GAAMiK,EAAA,OAC7D5+B,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKm5B,GACL7E,EAAK72B,KAAI+gC,IAAA,IAAC,GAAEvgC,GAAaugC,EAAN9gC,GAAI+gC,EAAAA,EAAAA,GAAAD,EAAAE,GAAA,OACpB/+B,EAAAA,cAAC0+B,EAAgBt+B,OAAAC,OAAA,CAACH,IAAK5B,GAAQP,SAK9BihC,EAAsCC,IAAA,IAAC,KAAErvB,EAAI,KAAE+kB,GAAMsK,EAAA,OAC9Dj/B,EAAAA,cAAAA,EAAAA,SAAA,KACK4P,GAAQ5P,EAAAA,cAACy+B,EAAIr+B,OAAAC,OAAA,GAAKuP,IAClB+kB,GAAQ30B,EAAAA,cAAC2+B,EAAYv+B,OAAAC,OAAA,GAAKs0B,MAItBuK,EAAwCC,IAAA,IAAC,MAAEz9B,EAAK,KAAEizB,GAAMwK,EAAA,OACjEn/B,EAAAA,cAAAA,EAAAA,SAAA,KACK0B,EACAizB,GAAQ30B,EAAAA,cAAC2+B,EAAYv+B,OAAAC,OAAA,GAAKs0B,MAcnC,EAVmE31B,IAC/D,MAAM,sBAAEs/B,EAAqB,iBAAEnT,EAAgB,aAAEoT,EAAY,YAAEjD,GAAgBt8B,EAC/E,OACIgB,EAAAA,cAACwQ,EAAAA,OAAMpQ,OAAAC,OAAA,GAAKi+B,EAAqB,CAAE72B,IAAK0jB,IACnCoT,GAAgBv+B,EAAAA,cAACk/B,EAAY9+B,OAAAC,OAAA,GAAKk+B,IAClCjD,GAAet7B,EAAAA,cAACg/B,EAAW5+B,OAAAC,OAAA,GAAKi7B,kOCzE7C,MA8BA,EA9BqD5Q,IAAA,IAAC,UAClDzqB,EAAS,KACTqH,EAAI,MACJJ,EAAK,IACLk4B,EAAG,IACHC,EAAG,KACHC,EAAI,aACJC,EAAY,aACZC,EAAY,aACZC,EAAY,SACZ/3B,EAAQ,OACRg4B,EAAM,GACNphC,GACHosB,EAAA,OACG1qB,EAAAA,cAAA,SACIC,UAAWA,EACXqH,KAAMA,EACNJ,MAAOA,EACPk4B,IAAKA,EACLC,IAAKA,EACLC,KAAMA,EAAI,gBACKC,EAAY,gBACZC,EAAY,gBACZC,EACf/3B,SAAUA,EACVg4B,OAAQA,EACRphC,GAAIA,KCnBZ,EARmEosB,IAAiC,IAAhC,UAAEzqB,EAAS,KAAEV,EAAI,QAAE6H,GAASsjB,EAC5F,OACI1qB,EAAAA,cAAA,SAAOC,UAAWA,EAAWmH,QAASA,GACjC7H,ICGb,EARiEmrB,IAAwB,IAAvB,UAAEzqB,EAAS,KAAEV,GAAMmrB,EACjF,OAAKnrB,EAIES,EAAAA,cAAA,QAAMC,UAAWA,GAAYV,GAHzB,mmBCoEf,IAAMogC,EAAN,cAA8B3/B,EAAAA,UAS1BtE,YAAYsD,GACRyJ,MAAMzJ,GAPO,KAAAq/B,gBAA0B,sBAE1B,KAAAuB,sBAAgC,EAEhC,KAAAzU,iBAAiDnrB,EAAAA,YA6RjD,KAAAorB,KAAO9uB,UAA0B,IAAAwvB,EAAAqC,EAC9ChyB,KAAK6C,MAAMqsB,YAAYD,KAAIzoB,EAAC,CACxB2oB,OAAQnvB,KAAKmvB,OACbE,SAAUrvB,KAAKqvB,SACfhc,SAAUrT,KAAKqT,SACfqqB,YAAY,IACP19B,KAAK29B,aAAe,CAAE7U,OAAQ,eAGmB,QAAlC6G,EAAG3vB,KAAK6C,MAAMkE,KAAK6oB,SAAS/f,cAAM,IAAA8f,OAAA,EAA/BA,EAAiC6R,eAExDxhC,KAAK6C,MAAMqsB,YAAYsD,UACe,QAAnCR,EAAIhyB,KAAK6C,MAAMkE,KAAK6oB,SAAS/f,cAAM,IAAAmiB,GAA/BA,EAAiC+C,iCACxC/0B,KAAK6C,MAAMqsB,YAAY2O,SAEvB79B,KAAK6C,MAAMkE,KAAK28B,YAAY7zB,QAC5B7P,KAAK6C,MAAMkE,KAAK6oB,SAAS/f,QACzB7P,KAAK6C,MAAMkE,KAAK28B,YAAY7zB,OAAO8zB,aAAe3jC,KAAK6C,MAAMkE,KAAK6oB,SAAS/f,OAAOggB,aAAa/T,KAAK8nB,eAEpG5jC,KAAK6C,MAAMkE,KAAK6oB,SAAS/f,OAAOggB,aAC3BgU,oBAAoB,CAAEC,kBAAmB9jC,KAAK6C,MAAMkE,KAAK28B,YAAY7zB,OAAO8zB,aAC5Et1B,OAAMpM,IACCjC,KAAKiF,QAAQjD,YACbhC,KAAKiF,QAAQjD,UAAUqa,QAAQpa,GAC/BjC,KAAKiF,QAAQjD,UAAUuM,MAAM,0CAMhC,KAAA4gB,OAAS,KACtBnvB,KAAK6C,MAAMb,UAAUiwB,YAAY,6CAEjCjyB,KAAK6C,MAAMqsB,YAAY4C,cAGV,KAAAzC,SAAW,KACxBrvB,KAAK6C,MAAMb,UAAUiwB,YAAY,+CAEjCjyB,KAAKk+B,wBAGQ,KAAA7qB,SAAW,KACxBrT,KAAK6C,MAAMb,UAAUiwB,YAAY,+CAEjCjyB,KAAKk+B,wBAGQ,KAAAA,qBAAuB,KACpC,MAAMtL,EAAgB5yB,KAAK6C,MAAMkE,KAAK6oB,SAAS/f,OAC3C+iB,GAAiBA,EAAc4O,cAAgB,EAE/CxhC,KAAK6C,MAAMqsB,YAAYsD,UAGvBxyB,KAAK6C,MAAMqsB,YAAY2O,UAId,KAAAF,UAAY,IAErB39B,KAAK6C,MAAMoC,QAAQiC,QAAQqgB,KAAKC,iBAChCxnB,KAAK6C,MAAMkE,KAAK28B,YAAY7zB,QAC5B7P,KAAK6C,MAAMkE,KAAK28B,YAAY7zB,OAAO8zB,YACnC3jC,KAAK+jC,iBA6FI,KAAAC,iBAAoBxsB,IACjCxX,KAAK6C,MAAMb,UAAUC,MAAMuV,GAC3BxX,KAAK6C,MAAMqsB,YAAY2C,aAAY,GACnC7xB,KAAK6C,MAAMqsB,YAAY4C,aACvB9xB,KAAKgN,SAAS,CACVwK,aAAAA,KAIS,KAAAysB,YAAc,KAC3BjkC,KAAK6C,MAAMqsB,YAAY2C,aAAY,GACnC7xB,KAAKgN,SAAS,CACVwK,aAAc,MAlclBxX,KAAKkkC,iBAAmBrgC,EAAAA,YACxB7D,KAAKmkC,oBAAsBnkC,KAAKmkC,oBAAoBC,KAAKpkC,MACzDA,KAAKqkC,qBAAuBrkC,KAAKqkC,qBAAqBD,KAAKpkC,MAC3DA,KAAKskC,eAAiBtkC,KAAKskC,eAAeF,KAAKpkC,MAC/CA,KAAKukC,QAAUvkC,KAAKukC,QAAQH,KAAKpkC,MACjCA,KAAKyM,MAAQ,CAAE+3B,eAAgBxkC,KAAKykC,WAAYC,uBAAuB,GAGjE,uBACN,MAAM5oB,EAAO9b,KAAK6C,MAAMkE,KAAK6oB,SAAS/f,OAAS7P,KAAK6C,MAAMkE,KAAK6oB,SAAS/f,OAAOggB,aAAa/T,UAAOpV,EACnG,IAAKoV,EACD,OAAO,EAKX,OADkBA,EAAK6N,aAAe,GACnB,EAGb,kBACN,MAC6E,aAAxE3pB,KAAK6C,MAAMkE,KAAK6oB,SAAS/f,QAAU7P,KAAK6C,MAAMkE,KAAK6oB,SAAS9G,SACW,aAAvE9oB,KAAK6C,MAAMkE,KAAK28B,aAAe1jC,KAAK6C,MAAMkE,KAAK28B,YAAY5a,SAC8C,aAAzG9oB,KAAK6C,MAAMkE,KAAK49B,8BAAgC3kC,KAAK6C,MAAMkE,KAAK49B,6BAA6B7b,QAI5F,iBACN,OAAO9oB,KAAK6C,MAAMkE,KAAK49B,6BAA6B90B,QAChD7P,KAAK6C,MAAMkE,KAAK49B,6BAA6B90B,OAAO+0B,gCAClD5kC,KAAK6C,MAAMkE,KAAK49B,6BAA6B90B,OAAO+0B,gCACpD,EAGH,0BAAuB,IAAAxS,GAC1BoE,EAAAA,EAAAA,KACI,IAAMx2B,KAAKy2B,cACXt2B,gBACUH,KAAKivB,WAInB1I,EAAAA,EAAAA,KACI,IAAMvmB,KAAK6C,MAAMkE,KAAK6oB,SAAS/f,QAAU7P,KAAK6C,MAAMkE,KAAK6oB,SAAS/f,OAAOggB,aAAa/T,OACtF3b,UACIH,KAAK6kC,sBAIbte,EAAAA,EAAAA,KACI,IAAMvmB,KAAK6C,MAAMkE,KAAK28B,YAAY7zB,SAClC1P,UACIH,KAAK8kC,oBAIsB,QAAnC1S,EAAIpyB,KAAK6C,MAAMkE,KAAK6oB,SAAS/f,cAAM,IAAAuiB,GAA/BA,EAAiC0E,6CACjCvQ,EAAAA,EAAAA,KACI,SAAAgM,EAAA,OAAqC,QAArCA,EAAMvyB,KAAK6C,MAAMkE,KAAK6oB,SAAS/f,cAAM,IAAA0iB,OAAA,EAA/BA,EAAiCyE,iBACvCA,IACQA,GAAiBA,EAAcC,gBAAkBC,EAAAA,cAAcsM,iBAAmBxM,EAAcxf,cAChGxX,KAAKgkC,iBAAiBhN,EAAcxf,kBAKhD+O,EAAAA,EAAAA,KACI,SAAAoN,EAAA,OAAqC,QAArCA,EAAM3zB,KAAK6C,MAAMkE,KAAK6oB,SAAS/f,cAAM,IAAA8jB,OAAA,EAA/BA,EAAiCyD,sBACvCA,IACQA,IAAuBC,EAAAA,eAAemM,kBACtClM,EAAAA,EAAAA,IAAqBt3B,KAAKgvB,iBAAkBhvB,KAAK6C,MAAMoC,QAAQC,mBAO5E0hB,sBAAsBC,EAAwCC,GACjE,OAAI9mB,KAAKyM,QAAUqa,GAAa9mB,KAAK6C,MAAMkE,OAAS8f,EAAU9f,KAM3D6K,SACH,MAAM,UACFzM,EAAS,WACT2O,EACAob,aAAa,SAAEnM,EAAQ,QAAEwU,IACzBv3B,KAAK6C,MAET,GAAI7C,KAAK6C,MAAMoC,QAAQiC,QAAQqgB,KAAKya,cAAkD,IAAlCC,EAAAA,sBAAsB8C,QAEtE,OADA/kC,KAAK6C,MAAMoC,QAAQjD,UAAUiwB,YAAY,gEAClC,KAGX,GACIjyB,KAAK6C,MAAMkE,KAAK28B,aAChB1jC,KAAK6C,MAAMkE,KAAK28B,YAAY7zB,QAC5B7P,KAAK6C,MAAMkE,KAAK28B,YAAY7zB,OAAO8zB,YACnC3jC,KAAK+jC,iBACP,CACE,MAAML,EAAc1jC,KAAK6C,MAAMkE,KAAK28B,YAAY7zB,OAC1C+iB,EAAgB5yB,KAAK6C,MAAMkE,KAAK6oB,SAAS/f,OAC/C,IAAIm1B,GAAgB,EACpB,MAAMxtB,EAAexX,KAAKyM,MAAM+K,aAEhC,GAAI+f,EAAS,CACT,IAAK3E,GAAiD,IAAhCA,EAAc4O,cAChC,OAAO,KAEXwD,GAAgB,EAEpB,MAAM5U,EAAgBpwB,KAAK6C,MAAMoC,QAAQiC,QAAQmhB,QAwHjD,OAAOvU,EAvHQtN,EAAAA,EAAA,GACRxG,KAAK6C,OAAK,IACbmsB,iBAAkBhvB,KAAKgvB,iBACvBiJ,UAAW,CACP+M,cAAAA,EACAC,kBAAmB1N,GAEvBO,MAAO/U,GAAYvL,GAAgB3T,EAAAA,cAACk0B,EAAAA,EAAc9zB,OAAAC,OAAA,GAAK,CAAEqB,MAAOJ,EAAUwrB,kBAAmBvS,QAAS5G,KACtG0tB,gBAAiB,CACbzyB,YAAazS,KAAK6C,MAClBiB,UAAW4O,GAAAA,CACP1S,KAAKkiC,gBACL,CAAE,CAAC,GAAGliC,KAAKkiC,4BAA6B8C,GACxChlC,KAAK6C,MAAMuE,OAAOtD,YAG1BqhC,YAAa,CACTC,QAASvhC,EAAAA,cAACwhC,EAAAA,QAAO,CAACC,WAAW,KAAKxhC,UAAW,GAAG9D,KAAKkiC,2BAA4B9+B,KAAM+B,EAAUogC,qBACjGC,kBACI3hC,EAAAA,cAAC4hC,EAAa,CAAC3hC,UAAW,GAAG9D,KAAKkiC,wBAAyB9+B,KAAM+B,EAAUugC,2BAE/EC,OACI9hC,EAAAA,cAACgD,EAAAA,eAAc,CACX/C,UAAW,GAAG9D,KAAKkiC,iCACnB//B,GAAInC,KAAK6C,MAAMV,GACf2E,SAAU9G,KAAK6C,MAAMiE,SACrB7B,QAASjF,KAAK6C,MAAMoC,QACpB8B,KAAM,CAAEjB,MAAO,CAAEkB,wBAAyB4rB,GAAiBA,EAAc4O,gBACzEhR,cAAcJ,MAAAA,OAAa,EAAbA,EAAeK,WAAY,MAIrDmV,WAAY,CACRR,QAASvhC,EAAAA,cAACwhC,EAAAA,QAAO,CAACC,WAAW,KAAKxhC,UAAW,GAAG9D,KAAKkiC,2BAA4B9+B,KAAM+B,EAAUogC,qBACjGM,OAAQ,CACJv/B,IAAKw/B,EAAAA,OACLhiC,UAAW,GAAG9D,KAAKkiC,0BACnB6D,iBAAkB/lC,KAAKgmC,gBACvBC,UAAW,GAAGjmC,KAAKkiC,+BACnBgE,WAAY,GAAGlmC,KAAKkiC,gCACpBiE,eAAgB,OAEpBC,WAAYviC,EAAAA,cAAC4hC,EAAa,CAAC3hC,UAAW,GAAG9D,KAAKkiC,+BAAgC9+B,KAAMsgC,EAAYC,YAAc,KAC9G0C,aACI3C,EAAY4C,cACZ5C,EAAY4C,aAAa3kC,KAAI,CAAC4kC,EAAQ33B,IAC3B5O,KAAKwmC,oBAAoBD,EAAQphC,EAAUshC,qBAAsBthC,EAAUuhC,8BAE1FC,uBAAwB,CACpB7iC,UAAW,GAAG9D,KAAKkiC,2BAEvB0E,8BAA+B,CAC3B9iC,UAAW,GAAG9D,KAAKkiC,mCAEvB2E,mBACIhjC,EAAAA,cAACkI,EAAc,CACXjI,UAAW,GAAG9D,KAAKkiC,gCACnB9+B,KAAM+B,EAAU2hC,0BAChB77B,QAAS,GAAGjL,KAAK6C,MAAMV,aAG/B4kC,mBACIljC,EAAAA,cAACmjC,EAAc,CACXljC,UAAW,GAAG9D,KAAKkiC,gCACnB32B,SAAUvL,KAAKskC,eACff,OAAQvjC,KAAKukC,QACbp5B,KAAK,SACLg4B,KAAK,MACLp4B,MAAO/K,KAAKyM,MAAM+3B,eAClBvB,IAAK,EACLC,IAAKljC,KAAKykC,WACVrB,aAAcpjC,KAAKykC,WACnBpB,aAAc,EACdC,aAActjC,KAAKyM,MAAM+3B,eACzBriC,GAAI,GAAGnC,KAAK6C,MAAMV,aAG1B8kC,yBACIpjC,EAAAA,cAAC6H,EAAAA,OAAM,CACH5H,UAAW,GAAG9D,KAAKkiC,iCACnB38B,MAAOvF,KAAK6C,MAAMsC,UAAU+hC,gCAC5Br7B,QAAS7L,KAAKmkC,oBACdzZ,SACI1qB,KAAKyM,MAAM+3B,eAAiBxkC,KAAKykC,YACjCzkC,KAAKyM,MAAM+3B,gBAAkB,GAC7B2C,MAAMnnC,KAAKyM,MAAM+3B,iBACjBxkC,KAAKyM,MAAMi4B,uBAGd1kC,KAAK6C,MAAMsC,UAAU+hC,iCAG9BE,kBAAmBxU,GAAiBA,EAAc4O,cAAgB,EAClE6F,yBACIxjC,EAAAA,cAAC4hC,EAAa,CAAC3hC,UAAW,GAAG9D,KAAKkiC,gCAAiC9+B,KAAM+B,EAAUugC,2BAEvF4B,0BACIzjC,EAAAA,cAACgD,EAAAA,eAAc,CACX/C,UAAW,GAAG9D,KAAKkiC,iCACnB//B,GAAInC,KAAK6C,MAAMV,GACf2E,SAAU9G,KAAK6C,MAAMiE,SACrB7B,QAASjF,KAAK6C,MAAMoC,QACpB8B,KAAM,CAAEjB,MAAO,CAAEkB,wBAAyB4rB,GAAiBA,EAAc4O,gBACzEhR,cAAcJ,MAAAA,OAAa,EAAbA,EAAeK,WAAY,KAGjD8W,0BACI1jC,EAAAA,cAAC6H,EAAAA,OAAM,CACH5H,UAAU,iCACVyB,MAAOvF,KAAK6C,MAAMsC,UAAUqiC,iCAC5B37B,QAAS7L,KAAKqkC,qBACdj4B,SAAUpM,KAAKkkC,kBAEdlkC,KAAK6C,MAAMsC,UAAUqiC,sCAS1C,OADAxnC,KAAK6C,MAAMoC,QAAQjD,UAAUC,MAAM,yDAC5B,KAGH+jC,gBACJ,MAAM5V,EAAgBpwB,KAAK6C,MAAMoC,QAAQiC,QAAQmhB,QACjD,OACIxkB,EAAAA,cAAAA,EAAAA,SAAA,KACIA,EAAAA,cAAA,KAAGC,UAAW,GAAG9D,KAAKkiC,iCAAkCliC,KAAK6C,MAAMsC,UAAUugC,0BAC7E7hC,EAAAA,cAACgD,EAAAA,eAAc,CACX/C,UAAW,GAAG9D,KAAKkiC,iCACnB//B,GAAInC,KAAK6C,MAAMV,GACf2E,SAAU9G,KAAK6C,MAAMiE,SACrB7B,QAASjF,KAAK6C,MAAMoC,QACpB8B,KAAM,CAAEjB,MAAO,CAAEkB,wBAAyBhH,KAAKykC,aAC/CjU,cAAcJ,MAAAA,OAAa,EAAbA,EAAeK,WAAY,MAMjD+V,oBACJiB,EACA/B,EACAgB,GAEA,MAAO,CACH3iC,IAAK0jC,EAAMC,eAAiB,GAC5BC,2BAA4B,CACxB7jC,UAAW,GAAG9D,KAAKkiC,4BAEvB38B,MAAO1B,EAAAA,cAAC4hC,EAAa,CAAC3hC,UAAW,GAAG9D,KAAKkiC,iCAAkC9+B,KAAMqkC,EAAM3nB,cACvF8nB,oBAAqB/jC,EAAAA,cAAC4hC,EAAa,CAAC3hC,UAAW,GAAG9D,KAAKkiC,qCAAsC9+B,KAAMsiC,IACnGmC,aACIhkC,EAAAA,cAAC4hC,EAAa,CAAC3hC,UAAW,GAAG9D,KAAKkiC,kCAAmC9+B,MAAOqkC,GAASA,EAAMK,cAAe/pB,aAE9GgqB,mBAAoBlkC,EAAAA,cAAC4hC,EAAa,CAAC3hC,UAAW,GAAG9D,KAAKkiC,oCAAqC9+B,KAAMsjC,IACjGsB,eACInkC,EAAAA,cAAC4hC,EAAa,CACV3hC,UAAW,GAAG9D,KAAKkiC,kCACnB9+B,MAAOqkC,GAASA,EAAMQ,oBAAqBlqB,cA0EnD,4BACJ/d,KAAK6C,MAAMb,UAAUiwB,YAAY,2DAEjC,MAAMW,EAAgB5yB,KAAK6C,MAAMkE,KAAK6oB,SAAS/f,OAE1C+iB,IAIL5yB,KAAKikC,oBACCrR,EAAcsV,oBAAoB,CAAEC,UAAWtH,OAAOuH,WAAWpoC,KAAKyM,MAAM+3B,eAAezmB,cACjG/d,KAAKgN,SAAS,CACV03B,uBAAuB,KAIvB,6BACJ1kC,KAAK6C,MAAMb,UAAUiwB,YAAY,4DAEjC,MAAMW,EAAgB5yB,KAAK6C,MAAMkE,KAAK6oB,SAAS/f,OAE1C+iB,IAIL5yB,KAAKikC,oBACCrR,EAAcsV,oBAAoB,CAAEC,UAAW,IACrDnoC,KAAKgN,SAAS,CACVw3B,eAAgB,KAIhBF,eAAe5O,GACnB,MAAM3qB,EAAQ2qB,EAAMC,cAAc5qB,MAClC/K,KAAKgN,SAAS,CAAEw3B,eAAgBz5B,EAAMpK,OAAS,EAAIkgC,OAAO91B,GAAS81B,OAAOuH,WAAWr9B,GAAQ25B,uBAAuB,IAGhHH,QAAQ7O,GACZ,MAAM2S,EAAMxH,OAAOuH,WAAW1S,EAAMC,cAAc5qB,OAAOu9B,QAAQ,GAC3DC,EAAU/4B,SAAS4G,eAAe,GAAGpW,KAAK6C,MAAMV,YAClDomC,GAAWF,IACXE,EAAQx9B,MAAQs9B,EAChBroC,KAAKgN,SAAS,CAAEw3B,eAAgB3D,OAAOuH,WAAWC,MAIlDvD,iBACA9kC,KAAK6C,MAAMqsB,YAAYsZ,YAAcxoC,KAAK29B,cAC1C39B,KAAK6kC,kBACL7kC,KAAK6C,MAAMqsB,YAAY4C,cAIvB+S,kBACJ,MAAMzD,EAAOphC,KAAK6C,MAAMkE,KAAK28B,YAAY7zB,OACnC+f,EAAW5vB,KAAK6C,MAAMkE,KAAK6oB,SAAS/f,OACpCiM,EAAO9b,KAAK6C,MAAMkE,KAAK6oB,SAAS/f,OAAS7P,KAAK6C,MAAMkE,KAAK6oB,SAAS/f,OAAOggB,aAAa/T,UAAOpV,EAC7F0pB,EAAgBpwB,KAAK6C,MAAMoC,QAAQiC,QAAQmhB,QACjD,GAAI+Y,GAAQA,EAAKuC,YAAc7nB,GAAQsU,EAAe,CAClD,MAAMI,EAAeJ,EAAcK,UAAY,GACzCgY,GAAqBC,EAAAA,EAAAA,6DAA4D5sB,EAAK9X,GAAIo9B,EAAKuC,WAAYnT,GAIjHiY,EAAmBE,OAAO7O,QAAQnd,YAAc,OAEhDisB,EAAAA,EAAAA,qBAAoDH,EAAoBzoC,KAAK6C,MAAMoC,QAAQC,eACtFzC,MAAKtC,MAAAA,IAAe,IAAA0oC,EACjB7oC,KAAK6C,MAAMoC,QAAQC,cAAcsI,OAC7B,IAAIs7B,EAAAA,qCAAqC9oC,KAAK6C,MAAMoC,QAAQiC,QAAQnG,aACpEwlC,GAEJ,MAAMwC,EAAqD,QAAzCF,EAAGtC,EAAO3B,uCAA+B,IAAAiE,EAAAA,EAAI7oC,KAAKyjC,sBAGhE7T,GAAYA,EAAS4R,cAAgBuH,SAC/BnZ,EAASsY,oBAAoB,CAAEC,UAAWY,IAGpD/oC,KAAKgN,SAAS,CAAEw3B,eAAgBuE,EAAcrE,uBAAuB,OAExEr2B,OAAMpM,IACHjC,KAAK6C,MAAMoC,QAAQC,cAAclD,UAAUsM,UAAUrM,GACrDjC,KAAK6C,MAAMoC,QAAQC,cAAclD,UAAUuM,MAAM,0DAxavD6f,EAAAA,EAAAA,IAAA,CAAT4K,EAAAA,IAAQ,sCAWC5K,EAAAA,EAAAA,IAAA,CAAT4K,EAAAA,IAAQ,iCAQC5K,EAAAA,EAAAA,IAAA,CAAT4K,EAAAA,IAAQ,gCA2ZT5K,EAAAA,EAAAA,IAAA,CADChsB,EAAAA,IAAM,uCAhcLohC,GAAepV,EAAAA,EAAAA,IAAA,CAFpB6K,EAAAA,gBACA5K,EAAAA,IACKmV,GAkdN,kGCjiBA,MAAMwF,EAAoDza,IAcrD,IAdsD,QACvD6W,EAAO,WACPgB,EAAU,OACVP,EAAM,aACNQ,EAAY,uBACZM,EAAsB,8BACtBC,EAA6B,mBAC7BC,EAAkB,mBAClBE,EAAkB,yBAClBE,EAAwB,kBACxBG,EAAiB,yBACjBC,EAAwB,0BACxBC,EAAyB,0BACzBC,GACHhZ,EACG,OACI1qB,EAAAA,cAAAA,EAAAA,SAAA,KACKuhC,EACAgB,EACDviC,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK2hC,GACLQ,EAAa1kC,KAAKsnC,GAEXplC,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK+kC,EAAYtB,2BAA0B,CAAE5jC,IAAKklC,EAAYllC,MAC9DklC,EAAY1jC,MACZ0jC,EAAYrB,oBACZqB,EAAYpB,aACZoB,EAAYlB,mBACZkB,EAAYjB,mBAK7BnkC,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKyiC,GACLE,EACAE,EACAE,EACAG,GACGvjC,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK0iC,GACLS,EACAC,EACAC,MAQnB2B,EAAsD9P,IAA2C,IAA1C,QAAEgM,EAAO,kBAAEI,EAAiB,OAAEG,GAAQvM,EAC/F,OACIv1B,EAAAA,cAAAA,EAAAA,SAAA,KACKuhC,EACAI,EACAG,IAiBb,EAZiE9iC,IAC7D,MAAM,gBAAEqiC,EAAe,iBAAElW,EAAgB,MAAE8I,EAAK,UAAEG,EAAS,YAAEkN,EAAW,WAAES,GAAe/iC,EAEzF,OACIgB,EAAAA,cAACwQ,EAAAA,OAAMpQ,OAAAC,OAAA,GAAKghC,EAAe,CAAE55B,IAAK0jB,IAC7B8I,EACAG,EAAU+M,eAAiBnhC,EAAAA,cAACqlC,EAAmBjlC,OAAAC,OAAA,GAAKihC,IACpDlN,EAAUgN,kBAAoBphC,EAAAA,cAACmlC,EAAkB/kC,OAAAC,OAAA,GAAK0hC,g8BC6DnE,IAAM5f,EAAN,cAAuBniB,EAAAA,cAAvBtE,cAAA,IAAAi+B,EAAA,2BAiEW,KAAA/wB,MAAwB,CAC3B+K,aAAc,GACd2xB,oBAAoB,EACpBC,qBAAqB,EACrBC,qBAAqB,GAGR,KAAArmC,kBAAsCiO,EAAAA,EAAAA,oBACnDjR,KAAK6C,MAAMoC,QAAQiC,QAAQgK,kBAC3BlR,KAAK6C,MAAMsO,aACXnR,KAAK6C,MAAMb,WAGE,KAAAgtB,iBAAiDnrB,EAAAA,YA8c3D,KAAAylC,4BAA+B5T,GACjC11B,KAAK6C,MAAMuE,OAAOmiC,gBAAiBnmC,KAAOsyB,EAAM5qB,OAAOC,MAM3C,KAAAgkB,UAAY,KACjB/uB,KAAKwpC,YAAkC,YAApBxpC,KAAKwpC,YAA4BxpC,KAAKypC,cAAgBzpC,KAAKyM,MAAM08B,mBAQ/E,KAAAO,aAAgB3lC,IAC7B,MAAM,MAAEkR,GAAUjV,KAAK6C,MACvB,OAAOoS,GAASA,EAAMlR,IAAQkR,EAAMlR,GAAKpD,OAAS,EAAIsU,EAAMlR,QAAO2C,GAMtD,KAAAijC,6BAA+BxpC,UAA0B,IAAAwvB,EACtE3vB,KAAKgN,SAAS,CAAEo8B,qBAAqB,UAEA,QAArCzZ,EAAM3vB,KAAK6C,MAAMkE,KAAK6oB,SAAS/f,cAAM,IAAA8f,OAAA,EAA/BA,EAAiCia,yCAAyC,CAC5EC,uCAAwC7pC,KAAK6C,MAAMkE,KAAK6oB,SAAS/f,OAAOi6B,uCAQ/D,KAAAC,aAAe5pC,UAA0B,IAAA6xB,EACtD,MACI7sB,WAAW,+BAAE6kC,GACb/kC,SAAS,cACLC,EACAgK,KACI9H,QAAQ,iBAAE2kB,GAAmB,KAGrC9W,OAAO,kBAAEg1B,GACTljC,MAAM,SAAE6oB,EAAQ,SAAE1S,IAClBld,KAAK6C,MAMT,GAJA7C,KAAK6C,MAAMb,UAAUiwB,YAAY,oCACjCjyB,KAAKgN,SAAS,CAAEq8B,qBAAqB,IAID,QAAhCrX,EAAChyB,KAAK6C,MAAMkE,KAAK6oB,SAAS/f,cAAM,IAAAmiB,GAA/BA,EAAiCnC,aAAa7L,iBAC/C+H,UACO/rB,KAAKkqC,yBAAyBta,GAAUC,aAAa/T,WAAYoB,GAMrE,CAAC,IAADkV,EAAAG,EAAA4X,EACH,MAAMC,EAAuBH,GAAqBA,EAAkBtpC,OAAS,EAEvE0pC,QAA2BrqC,KAAKsqC,4BAA0D,QAA/BlY,EAAApyB,KAAK6C,MAAMkE,KAAK6oB,SAAS/f,cAAM,IAAAuiB,OAAA,EAA/BA,EAAiCmY,qBAAsB,UAElHC,EAAAA,EAAAA,GACFtlC,EACAlF,KAAK6C,MAAMkE,KAAK6oB,SAAS/f,OACzB7P,KAAK6C,MAAMkE,KAAKmW,SAASrN,QACxBu6B,EACDC,EAC+B,QADb9X,EAClBvyB,KAAK6C,MAAMkE,KAAK6oB,SAAS/f,cAAM,IAAA0iB,OAAA,EAA/BA,EAAiCwC,kCACnC1mB,OAAMpM,IACJjC,KAAKyqC,oBAAoBxoC,YAGR,QAArBkoC,EAAMva,EAAS/f,cAAM,IAAAs6B,OAAA,EAAfA,EAAiBO,qCAAqC,CAAEC,mCAAmC,UApBjG3qC,KAAKgN,SAAS,CACVwK,aAAcwyB,IAElBhqC,KAAK6C,MAAMoC,QAAQjD,UAAUC,MAAM+nC,IA0B1B,KAAAM,2BAA6BnqC,MAAAA,IAAqE,IAAA4mB,EAAA4M,EAC/G,MAAMvL,EAA0D,QAArCrB,EAAG/mB,KAAK6C,MAAMoC,QAAQiC,QAAQmhB,eAAO,IAAAtB,OAAA,EAAlCA,EAAoCuB,sBAE5DsiB,EAAwD,QAAlCjX,EAAG3zB,KAAK6C,MAAMkE,KAAK6oB,SAAS/f,cAAM,IAAA8jB,GAA6B,QAA7BA,EAA/BA,EAAiC9D,aAAa/T,KAAKiI,iBAAS,IAAA4P,OAAA,EAA5DA,EAA8D3jB,QACzF+O,GAAYA,EAASc,cAA0C,KAA1Bd,EAASc,cAAuBd,EAASc,eAAiBuI,IAGnG,IAAIiiB,EACJ,GAAIO,GAA0BA,EAAuBjqC,OAAS,EAAG,CAC7D,MAAMkqC,EAA0DD,EAAuBjpC,KAAImpC,IAChF,CACHhtB,OAAQgtB,EAAKhtB,OACbitB,sBAAuB,CACnBC,eAAgB5iB,EAChB6iB,4BAA6BC,EAAAA,uBAAuBC,mBACpDC,+BAAgCC,aAKtCC,EAAAA,EAAAA,uCACF,CAAE/pC,cAAevB,KAAK6C,MAAMoC,QAAQC,sBAC7BlF,KAAK6C,MAAMkE,KAAK6oB,UAAUC,aAAa/T,KAAK9X,GACnD6mC,GAECpoC,MAAK8oC,IACFlB,EAAqBkB,EAAYnvB,WAEpC/N,OAAMpM,IAEH,MADAjC,KAAK6C,MAAMoC,QAAQC,cAAclD,UAAUsM,UAAUrM,GAC/C,IAAII,MAAM,yGAI5B,OAAOgoC,GASM,KAAAH,kBAAoB/pC,MAAO2b,EAAYoB,KAA+C,IAAAsuB,EACnG,IAAItB,GAAoB,EACxB,MAAM9hB,EAA0D,QAArCojB,EAAGxrC,KAAK6C,MAAMoC,QAAQiC,QAAQmhB,eAAO,IAAAmjB,OAAA,EAAlCA,EAAoCljB,sBA4ClE,aA1CMnE,EAAAA,EAAAA,mCACF,IAAIC,EAAAA,sCAAsCpkB,KAAK6C,MAAMoC,QAAQC,cAAcpE,eAAeC,aAC1Ff,KAAK6C,MAAMoC,QAAQC,eAElBzC,MAAKgpC,IAA8B,IAAAC,EAAAC,EAChC,MAAMC,EAAsE,GAE9D,QAAdF,EAAA5vB,EAAKiI,iBAAS,IAAA2nB,GAAdA,EAAgB/pC,KAAI6e,IAAW,IAAAqrB,EAC3B,MAAMC,EAAkB5uB,EAASpU,MAAK0U,GAAWA,EAAQC,WAAa+C,EAAS9C,YAGzEquB,EAAgBD,MAAAA,GAAyB,QAAVD,EAAfC,EAAiBnuB,gBAAQ,IAAAkuB,OAAA,EAAzBA,EAA2BG,iBAC3CC,KACFzrB,EAASX,cAA0C,KAA1BW,EAASX,eAAsBW,EAASX,eAAiBuI,EAEtF,MADkC2jB,GAAiBE,IAClB/zB,EAAAA,gBAAgBC,YAAYszB,GAA8B,CACvF,MAAMhrB,EAA2BgrB,EAA4B3iC,MAAKojC,IAAmB,IAAAC,EACjF,OAAgD,QAAzCA,EAAAD,EAAiBprB,gCAAwB,IAAAqrB,OAAA,EAAzCA,EAA2CzuB,aAAe8C,EAAS9C,aAE1E+C,GACAmrB,EAAoC1oC,KAAKud,OAKrD,MAAM2rB,GAA+B1jB,EAAAA,EAAAA,4BACnB,QAD6CijB,EAC3D7vB,EAAKiI,iBAAS,IAAA4nB,EAAAA,EAAI,GAClBC,EACA5rC,KAAK6C,MAAMoC,QAAQC,cACnBgY,EACAkL,GAKJ,OADA8hB,GAAqBkC,EAA6BzjB,QAC3CuhB,KAEV77B,OAAMpM,IAEH,MADAjC,KAAK6C,MAAMoC,QAAQC,cAAclD,UAAUsM,UAAUrM,GAC/C,IAAII,MAAM,qGAGjB6nC,GAOM,KAAAmC,2BAA6B,KAC1C,MAAM,SAAEC,EAAQ,UAAEC,GAAcvsC,KAAK6C,MAAMqsB,YAC3C,OAAOod,EACF3qC,IAAI4qC,GACJv8B,QAAQvD,KAA0CA,IAAUA,EAAM+7B,YAAc/7B,EAAM+/B,kBAM9E,KAAAC,iBAAmB,KAChCzsC,KAAK6C,MAAMb,UAAUiwB,YAAY,wCAEjCjyB,KAAKqsC,6BAA6BziC,SAAQ6C,IACtCA,EAAM8qB,SAAW9qB,EAAMggC,kBAAoBhgC,EAAMggC,uBAQxC,KAAAC,mBAAsBC,IACnC,MAAMC,EAAeC,EAAAA,GAAoB,OAAQ7sC,KAAK6C,MAAMoC,QAAQC,gBAAkB,GAClFoM,QAAUs7B,EACVt7B,OAAO7B,SAASvL,OAAO0oC,IAEvB5sC,KAAKgN,SAAS,CACVwK,aAAcxX,KAAK6C,MAAMsC,UAAUmuB,sBAEvCtzB,KAAK6C,MAAMoC,QAAQjD,UAAUC,MAAM0qC,KAQ1B,KAAAG,oBAAsB,WAAgC,IAA/BC,IAAA5wB,UAAAxb,OAAA,QAAA+F,IAAAyV,UAAA,KAAAA,UAAA,GACpC,MAAMwwB,EAA8B,0DAC9B7wB,EAAO0hB,EAAK36B,MAAMkE,KAAK6oB,SAAS/f,OAAQggB,aAAa/T,MACrD,GAAE9X,EAAE,QAAEoY,GAAYN,EACpB0hB,EAAKwP,gCACD5wB,GAAWpY,GACXipC,EAAAA,EAAAA,0BAAyB,CAAE1rC,cAAei8B,EAAK36B,MAAMoC,QAAQC,cAAeyX,YAAa,QAAU3Y,EAAIoY,GAClG3Z,MAAMoN,IAAqC,IAAAq9B,EACa,KAAb,QAApCA,EAAAr9B,EAAOs9B,qCAA6B,IAAAD,OAAA,EAApCA,EAAsCvsC,QACtC68B,EAAKkP,mBAAmBC,GAExBnP,EAAKxwB,SAAS,CAAEm8B,oBAAoB,OAG3C96B,OAAMpM,IAGH,GAFAu7B,EAAK36B,MAAMb,UAAUqa,QAAQpa,GAC7Bu7B,EAAK36B,MAAMb,UAAUuM,MAAM,2BACvBw+B,GAAwB,2DAAf9qC,EAAMmJ,KAAmE,CAAC,IAADupB,EAClF,MAAMlW,EAA2C,QAAlCkW,EAAG6I,EAAK36B,MAAMkE,KAAK6oB,SAAS/f,cAAM,IAAA8kB,OAAA,EAA/BA,EAAiC9E,aACnDpR,MAAAA,GAAAA,EACM5B,YAAY,IACbpa,MAAK,KACF+6B,EAAKsP,qBAAoB,MAE5Bz+B,OAAOyO,IACJ0gB,EAAK36B,MAAMb,UAAUqa,QAAQS,EAAasB,SAC1Cof,EAAK36B,MAAMb,UAAUuM,MAAM,kCAGnCivB,EAAKkP,mBAAmBC,MAIpCnP,EAAKkP,mBAAmBC,GAG5BnP,EAAKxwB,SAAS,CAAEm8B,oBAAoB,KAK3B,KAAAnF,iBAAoBxsB,IACjCxX,KAAK6C,MAAMb,UAAUC,MAAMuV,GAC3BxX,KAAK6C,MAAMqsB,YAAY2C,aAAY,GACnC7xB,KAAK6C,MAAMqsB,YAAY4C,aACvB9xB,KAAKgN,SAAS,CACVwK,aAAAA,KAIS,KAAAw1B,8BAAgC,KAAc,IAAAzf,EAAAC,EAAAM,EAC3D,MAAML,EAAkBztB,KAAK6C,MAAMkE,KAAK4S,aAAa9J,OAMrD,IAJI4d,MAAAA,GAEC,QAFcF,EAAfE,EAAiB3kB,MACb6Q,GAAsC,wEAAtBA,EAAaE,cAChC,IAAA0T,OAAA,EAFDA,EAEGzT,aAAa,EAGhB,OAAO,EAOX,MAHI2T,MAAAA,GAA8H,QAA/GD,EAAfC,EAAiB3kB,MAAK6Q,GAAsC,oEAAtBA,EAAaE,cAA2E,IAAA2T,OAAA,EAA9HA,EACM1T,aAAa,GAGnB,OAAO,EAOX,GAJ+B2T,MAAAA,GAE9B,QAF6CK,EAAfL,EAAiB3kB,MAC5C6Q,GAAsC,mDAAtBA,EAAaE,cAChC,IAAAiU,OAAA,EAF8BA,EAE5BhU,UAEyB,CAAC,IAAD4T,EACxB,MAAMC,EAA4D,QAArBD,EAAG1tB,KAAK6C,MAAMoC,eAAO,IAAAyoB,GAAS,QAATA,EAAlBA,EAAoBxmB,eAAO,IAAAwmB,GAAK,QAALA,EAA3BA,EAA6Bxe,WAAG,IAAAwe,GAAU,QAAVA,EAAhCA,EAAkCE,gBAAQ,IAAAF,OAAA,EAA1CA,EAA4CG,iCACtFE,EAAe/tB,KAAK6C,MAAMkE,KAAKqT,oBAAoBvK,OACnDu9B,GAAY1qB,EAAAA,EAAAA,IAAiB1iB,KAAK6C,MAAMoC,QAAQC,cAAcpE,gBAE9DusC,EAC0C,QAA5C1f,GACCI,IACiD,QAA5CJ,GAAqDyf,GACN,QAA5Czf,IAAsDyf,GAEnE,OAAOC,MAAAA,GAAAA,EACJ,CAAC,IAAD7mB,EAAAyH,EACH,MAAMC,EAAqD,QAApC1H,EAAGxmB,KAAK6C,MAAMkE,KAAKmnB,yBAAiB,IAAA1H,OAAA,EAAjCA,EAAmC3W,OAC7D,QAA+C,QAAxCoe,EAAEC,MAAAA,OAAiB,EAAjBA,EAAmBC,2BAAmB,IAAAF,GAAAA,KAQtC,KAAAqf,+BAAiCntC,MAAAA,IAC9C,MAAMyyB,EAAgB5yB,KAAK6C,MAAMkE,KAAK6oB,SAAS/f,OAG/C,GAAI+iB,GAAiB2a,GAAwBA,EAAqBC,IAAK,CACnE,MAAMC,EAAmBztC,KAAK0tC,oCAAoCH,SAE5D3a,EAAc+a,wCAAwC,CAAEC,qCAAsCH,UAC9F7a,EAAcib,yCAAyC,CAAEC,sCAAuCL,MAS7F,KAAAC,oCAAuCH,IAC3B,CACrBQ,uBAAwBR,EAAqBS,QAC7Cn0B,KAAM0zB,EAAqBU,WAC3BC,OAAQX,EAAqBY,SAC7BC,aAAcb,EAAqBc,SACnCC,KAAMf,EAAqBe,KAC3BC,MAAOhB,EAAqBgB,MAC5BC,QAASjB,EAAqBC,IAC9BiB,MAAOlB,EAAqBkB,QAWnB,KAAAhE,oBAAuBxoC,IAEpC,MACIkD,WAAW,oBACPmuB,EAAmB,+BACnBob,EAA8B,2CAC9BC,EAA0C,+BAC1CC,GAEJ3pC,SAAS,cAAEC,IACXlF,KAAK6C,MACHgsC,EAAiB7uC,KAAK6C,MAAMkE,KAAK6oB,SAAS/f,OAC1Ci/B,EAAW7sC,GAASA,EAAMmc,QAChC,GAA0B,OAAtBnc,MAAAA,OAAK,EAALA,EAAO8sC,YAAoB,CAC3B,MAAMv3B,EAAeo3B,EAMrB,OALA5uC,KAAKgN,SAAS,CACVwK,aAAAA,IAEJxX,KAAK6C,MAAMb,UAAUsM,UAAUrM,QAC/BjC,KAAKgN,SAAS,CAAEo8B,qBAAqB,IAGzC,GAAIyF,GAAkBA,EAAe/X,0CAA2C,CAC5E,MAAMkY,EAAY/sC,GAASA,EAAMmJ,KAAOnJ,EAAMmJ,KAAO,IAErD6jC,EAAAA,EAAAA,IAAkBD,EAAWhvC,KAAK6C,MAAMsC,YAAa0pC,EAAerZ,yBAA0BtwB,EAAe4pC,OAC1G,CAAC,IAADla,EAAAsa,EAAAla,EACH,IAAIxd,EAAe8b,EAcnB,GAbAtzB,KAAKgN,SAAS,CAAEq8B,qBAAqB,IAEjCpnC,GAAwB,2DAAfA,EAAMmJ,KACfoM,EAAek3B,EAERzsC,GAAwB,uEAAfA,EAAMmJ,KACtBoM,EAAem3B,EACR1sC,GAAwB,uFAAfA,EAAMmJ,OAEtBoM,EAAes3B,GAAYxb,GAKI,QAA/BsB,EAAA50B,KAAK6C,MAAMkE,KAAK6oB,SAAS/f,cAAM,IAAA+kB,GAA/BA,EAAiCua,gDACvB,QADqED,EAC/EjtC,EAAM8E,YAAI,IAAAmoC,GAAVA,EAAYE,oBACoB,QAAhCpa,EAACh1B,KAAK6C,MAAMkE,KAAK6oB,SAAS/f,cAAM,IAAAmlB,IAA/BA,EAAiCD,kCAElC,OAGJ/0B,KAAKgN,SAAS,CACVwK,aAAAA,IAEJxX,KAAK6C,MAAMb,UAAUsM,UAAUrM,KAh7B7B,iBAAc,IAAAizB,EACpB,OAA+B,QAA/BA,EAAOl1B,KAAK6C,MAAMkE,KAAK6oB,gBAAQ,IAAAsF,OAAA,EAAxBA,EAA0BpM,OAG3B,kBAAe,IAAAqM,EACrB,GAAIn1B,KAAKqvC,gBAEL,OAAO,EAEX,MAAMvzB,EAA+B,QAA3BqZ,EAAGn1B,KAAK6C,MAAMkE,KAAK6oB,gBAAQ,IAAAuF,GAAQ,QAARA,EAAxBA,EAA0BtlB,cAAM,IAAAslB,GAAc,QAAdA,EAAhCA,EAAkCtF,oBAAY,IAAAsF,OAAA,EAA9CA,EAAgDrZ,KAC7D,QAA2B,YAApB9b,KAAKwpC,aAA8B1tB,GAASwzB,GAAAA,CAAQxzB,IAAWA,EAAKiI,WAAuC,IAA1BjI,EAAKiI,UAAUpjB,QAGjG,eAAY,IAAAy0B,EAClB,MAAMtZ,EAA+B,QAA3BsZ,EAAGp1B,KAAK6C,MAAMkE,KAAK6oB,gBAAQ,IAAAwF,GAAQ,QAARA,EAAxBA,EAA0BvlB,cAAM,IAAAulB,GAAc,QAAdA,EAAhCA,EAAkCvF,oBAAY,IAAAuF,OAAA,EAA9CA,EAAgDtZ,KAC7D,MAA2B,WAApB9b,KAAKwpC,YAAgD,YAApBxpC,KAAKwpC,cAA8B1tB,GAAQwzB,GAAAA,CAAQxzB,IAGrF,sBACN,OAAO9b,KAAK6C,MAAMoC,QAAQiC,QAAQwK,OAAOC,SAGnC,oBAAiB,IAAA0jB,EAAAC,EAAAC,EAAAmB,EAAAC,EACvB,MAAM4Y,EAA8BvvC,KAAK6C,MAAMkE,KAAK6oB,SAAS/f,SAAyC,QAAnCwlB,EAAIr1B,KAAK6C,MAAMkE,KAAK6oB,SAAS/f,cAAM,IAAAwlB,OAAA,EAA/BA,EAAiCka,6BAElGJ,EAC6E,QAD/B7Z,EACjB,QADiBC,EAChDv1B,KAAK6C,MAAMkE,KAAK6oB,SAAS/f,cAAM,IAAA0lB,OAAA,EAA/BA,EAAiC4Z,sDAA8C,IAAA7Z,GAAAA,EAE7Eka,EAAgB3C,EAAAA,GAAsB7sC,KAAK6C,MAAMoC,QAAQiC,WAAalH,KAAKyvC,2BAGjF,OACIzvC,KAAK6C,MAAMqsB,YAAYqI,eACU7wB,IAAhC6oC,GAA6CA,GAA+BJ,KAChD,KAA5BnvC,KAAKyM,MAAM+K,cACR23B,GACkE,QADpBzY,EACd,QADcC,EAC7C32B,KAAK6C,MAAMkE,KAAK6oB,SAAS/f,cAAM,IAAA8mB,OAAA,EAA/BA,EAAiC5B,wCAAgC,IAAA2B,GAAAA,MACpEyY,GAAkDK,GAIlD,iCAA8B,IAAA5Y,EAAAC,EAAAN,EAAAQ,EACpC,MAAM2Y,EAA0E,QAAjE9Y,EAAkC,QAAlCC,EAAG72B,KAAK6C,MAAMkE,KAAK6oB,SAAS/f,cAAM,IAAAgnB,OAAA,EAA/BA,EAAiChH,aAAa/T,KAAK6N,mBAAW,IAAAiN,EAAAA,EAAI,EAGpF,OAFoF,QAAzDL,EAAkC,QAAlCQ,EAAG/2B,KAAK6C,MAAMkE,KAAK6oB,SAAS/f,cAAM,IAAAknB,OAAA,EAA/BA,EAAiC0K,6BAAqB,IAAAlL,EAAAA,EAAI,KAEvDmZ,EAG3B,kBAAe,IAAAvY,EACrB,QACqC,QAAhCA,EAACn3B,KAAK6C,MAAMkE,KAAK6oB,SAAS/f,cAAM,IAAAsnB,GAAc,QAAdA,EAA/BA,EAAiCtH,oBAAY,IAAAsH,IAA7CA,EAA+Crb,OACF,YAA/C9b,KAAK6C,MAAMkE,KAAKqT,oBAAoB0O,QACI,YAAxC9oB,KAAK6C,MAAMkE,KAAK4S,aAAamP,OAIrC,wCAA4C,IAAA6mB,EAAAC,EACxC,MAAM/Z,EAGmB,QAHT8Z,EACY,QADZC,EACZ5vC,KAAK6C,MAAMkE,KAAK6oB,gBAAQ,IAAAggB,GAAQ,QAARA,EAAxBA,EAA0B//B,cAAM,IAAA+/B,GAAc,QAAdA,EAAhCA,EAAkC/f,oBAAY,IAAA+f,GAAM,QAANA,EAA9CA,EAAgD9zB,YAAI,IAAA8zB,GAAqB,QAArBA,EAApDA,EAAsD9Z,2BAAmB,IAAA8Z,GAExE,QAFwEA,EAAzEA,EAA2E9mC,MACvEitB,GAA6B,0BAAjBA,EAASC,aACxB,IAAA4Z,GAAO,QAAPA,EAFDA,EAEGtsC,aAAK,IAAAssC,OAAA,EAFRA,EAEU3Z,mBAAW,IAAA0Z,EAAAA,EAAI,GAC7B,OAAO9Z,EAActsB,KAAK2sB,MAAML,GAAyC,KAkBtEta,oBACH,MACIpW,WAAW,oBAAEmuB,IACbtzB,KAAK6C,OAET2zB,EAAAA,EAAAA,KACI,IAAMx2B,KAAK6vC,oBAAsBC,EAAAA,sBAAsBC,UACvD5vC,UACI,GAAIH,KAAKq2B,kCAAmC,CAAC,IAAD2Z,EAAAC,EACxC,MAAM,MACFC,EAAK,WACLC,EAAU,qBACV5C,EACA6C,kBAAmBC,EAA6B,mCAChD/Z,EAAkC,kCAClCga,EAAiC,wBACjCC,EAAuB,QACvB9C,GACAztC,KAAKq2B,kCAY0C,IAADma,EAAAC,EAAlD,GAV+B,QAA/BT,EAAAhwC,KAAK6C,MAAMkE,KAAK6oB,SAAS/f,cAAM,IAAAmgC,GAA/BA,EAAiCU,6BAA6B,CAC1DC,mCAAoCT,MAAAA,EAAAA,EAAS,GAC7CU,cAAeT,EACfU,wBAAyBtD,EACzBuD,qBAAsBT,EACtBU,4BAA6Bza,EAC7B0a,2BAA4BV,EAC5BW,2BAA4BV,IAG5BD,GAAqC7C,EACN,QAA/B+C,EAAAxwC,KAAK6C,MAAMkE,KAAK6oB,SAAS/f,cAAM,IAAA2gC,GAA/BA,EAAiC7C,wCAAwC,CACrEC,qCAAsCH,IAEX,QAA/BgD,EAAAzwC,KAAK6C,MAAMkE,KAAK6oB,SAAS/f,cAAM,IAAA4gC,GAA/BA,EAAiC5C,yCAAyC,CACtEC,sCAAuCL,SAGtCztC,KAAKstC,+BAA+BC,GAGd,QAA/B0C,EAAAjwC,KAAK6C,MAAMkE,KAAK6oB,SAAS/f,cAAM,IAAAogC,GAA/BA,EAAiCpgB,aAAaqhB,0BAA0B,CACpEC,uBAAwB,CACpB,CACInb,IAAK,wBACL1yB,MAAO,CAAE2yB,YAAa,aAQ9CO,EAAAA,EAAAA,KACI,IAAMx2B,KAAK+iB,WACX,KACI/iB,KAAKgN,SAAS,CACVwK,aAAc8b,IAElBtzB,KAAK6C,MAAMoC,QAAQjD,UAAUC,MAAM,0BAI3Cu0B,EAAAA,EAAAA,KACI,IACWx2B,KAAKypC,cAEhB,KACIzpC,KAAK0sC,mBAAmB,gDAIhClW,EAAAA,EAAAA,KACI,IAAMx2B,KAAKoxC,cACX,KACIpxC,KAAK8sC,0BAIbvmB,EAAAA,EAAAA,KACI,IAAMvmB,KAAK6C,MAAMqsB,YAAYqI,UAC7B,KACIv3B,KAAKysC,uBAKblmB,EAAAA,EAAAA,KACI,SAAA8qB,EAAA,OAAqC,QAArCA,EAAMrxC,KAAK6C,MAAMkE,KAAK6oB,SAAS/f,cAAM,IAAAwhC,OAAA,EAA/BA,EAAiCC,kCACvCnxC,MAAAA,IAAgB,IAAAoxC,EAAAC,EAAAC,EAAAC,EAEuB,QAA/BH,EAAAvxC,KAAK6C,MAAMkE,KAAK6oB,SAAS/f,cAAM,IAAA0hC,IAA/BA,EAAiCpC,iDACjC5X,GACgC,QAAhCia,EAACxxC,KAAK6C,MAAMkE,KAAK6oB,SAAS/f,cAAM,IAAA2hC,GAA/BA,EAAiCG,2BACD,QAAhCF,EAACzxC,KAAK6C,MAAMkE,KAAK6oB,SAAS/f,cAAM,IAAA4hC,GAA/BA,EAAiCjc,2BACA,QADwBkc,EACvD1xC,KAAK6C,MAAMkE,KAAK6oB,SAAS/f,cAAM,IAAA6hC,IAA/BA,EAAiC3c,oCAEhC/0B,KAAKyM,MAAM28B,qBACZppC,KAAKgN,SAAS,CAAEo8B,qBAAqB,IAGzCppC,KAAK6C,MAAMb,UAAUiwB,YACjB,+GAGEjyB,KAAK+pC,eAGN/pC,KAAK6C,MAAMkE,KAAK6oB,SAAS/f,OAAO+hC,+BACjC5xC,KAAKgN,SAAS,CAAEo8B,qBAAqB,SAOrD7iB,EAAAA,EAAAA,KACI,SAAAsrB,EAAA,OAAqC,QAArCA,EAAM7xC,KAAK6C,MAAMkE,KAAK6oB,SAAS/f,cAAM,IAAAgiC,OAAA,EAA/BA,EAAiCC,qCACvC/uB,IAAW,IAAAgvB,EAC4B,QAA/BA,EAAA/xC,KAAK6C,MAAMkE,KAAK6oB,SAAS/f,cAAM,IAAAkiC,GAA/BA,EAAiC5C,gDAAkDpsB,GACnF/iB,KAAKgN,SAAS,CAAEo8B,qBAAqB,IAErCppC,KAAK6C,MAAMb,UAAUiwB,YACjB,6HAGJjyB,KAAK6C,MAAMb,UAAUiwB,YACjB,0GAMhB1L,EAAAA,EAAAA,KACI,SAAAyrB,EAAA,OAAqC,QAArCA,EAAMhyC,KAAK6C,MAAMkE,KAAK6oB,SAAS/f,cAAM,IAAAmiC,OAAA,EAA/BA,EAAiCC,4BACvClvB,IAAW,IAAAmvB,EAC0FC,EAA9D,QAA/BD,EAAAlyC,KAAK6C,MAAMkE,KAAK6oB,SAAS/f,cAAM,IAAAqiC,GAA/BA,EAAiC/C,gDAAkDpsB,GACnF/iB,KAAKgN,SAAS,CAAEo8B,qBAAqB,IAEN,QAA/B+I,EAAAnyC,KAAK6C,MAAMkE,KAAK6oB,SAAS/f,cAAM,IAAAsiC,GAA/BA,EAAiCC,+BAA+B,CAAEC,6BAA6B,IAE/FryC,KAAK6C,MAAMb,UAAUiwB,YACjB,oHAGJjyB,KAAK6C,MAAMb,UAAUiwB,YACjB,iGAOhB1L,EAAAA,EAAAA,KACI,IAAMvmB,KAAKsyC,gBACXnyC,UAAW,IAAAoyC,EACoGC,EAAxE,QAA/BD,EAAAvyC,KAAK6C,MAAMkE,KAAK6oB,SAAS/f,cAAM,IAAA0iC,GAA/BA,EAAiCpD,gDAAkDnvC,KAAKsyC,cACrD,QAAnCE,EAAIxyC,KAAK6C,MAAMkE,KAAK6oB,SAAS/f,cAAM,IAAA2iC,GAA/BA,EAAiCzd,wCAC3B/0B,KAAK6C,MAAMkE,KAAK6oB,SAAS/f,OAAO4iC,uCAAuC,CACzEC,qCAAqC,IAGzC1yC,KAAK6C,MAAMb,UAAUiwB,YACjB,6HAGJjyB,KAAK6C,MAAMb,UAAUiwB,YACjB,4HAEJjyB,KAAK6C,MAAMb,UAAUiwB,YACjB,mBAAmB4a,EAAAA,GAAsB7sC,KAAK6C,MAAMoC,QAAQiC,iCACxDlH,KAAKsyC,mBAKjBtyC,KAAK6C,MAAMb,UAAUiwB,YAAY,sFAM7C1L,EAAAA,EAAAA,KACI,SAAAosB,EAAA,OAAqC,QAArCA,EAAM3yC,KAAK6C,MAAMkE,KAAK6oB,SAAS/f,cAAM,IAAA8iC,OAAA,EAA/BA,EAAiC3b,iBACvCA,IAAgB,IAAA4b,EACZ,MAAMC,GAAiC7b,MAAAA,OAAa,EAAbA,EAAeC,iBAAkBC,EAAAA,cAAclR,SAEhF8sB,GACF9b,MAAAA,OAAa,EAAbA,EAAegY,aAAc+D,EAAAA,UAAUC,6DACjChc,EAAcC,gBAAkBC,EAAAA,cAAc+b,0BAC9CJ,EAEyB,QAA/BD,EAAA5yC,KAAK6C,MAAMkE,KAAK6oB,SAAS/f,cAAM,IAAA+iC,GAA/BA,EAAiC9b,2CACjCE,GACAA,EAAcxf,eACbq7B,GAAgDC,IAEjD9yC,KAAKgkC,iBAAiBhN,EAAcxf,iBAM7C/F,qBAAkB,IAAAyhC,EAAAC,EAEc,QAA/BD,EAAAlzC,KAAK6C,MAAMkE,KAAK6oB,SAAS/f,cAAM,IAAAqjC,GAA/BA,EAAiCpc,2CACF,QAD2Cqc,EAC1EnzC,KAAK6C,MAAMkE,KAAK6oB,SAAS/f,cAAM,IAAAsjC,GAA/BA,EAAiCC,4BACjCpzC,KAAKyM,MAAM+K,eAEX8f,EAAAA,EAAAA,IAAqBt3B,KAAKgvB,iBAAkBhvB,KAAK6C,MAAMoC,QAAQC,eAKhE0M,SAAM,IAAAyhC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EACT,MAAM,YACFllB,EACA9nB,QAAQ,UAAEtD,EAAS,gBAAEylC,EAAe,0BAAE8K,GAA2B,UACjElvC,EACAF,SACIiC,SACIqgB,MAAM,gBAAEC,MAGhBxnB,KAAK6C,OACH,aAAE2U,GAAiBxX,KAAKyM,OACxB,eAAE6nC,EAAc,eAAEC,EAAc,mBAAEC,EAAkB,6BAAEC,EAA4B,oBAAEnhB,GAAwBnuB,EAC5GuvC,EAAgBhiC,GAAAA,CAAW,cAAe5O,GAC1C6wC,EAAyB30C,KAAK0pC,aAAa,uBAG3CkL,EAAsBD,MAAAA,OAAsB,EAAtBA,EAAwB3kC,QAAO6kC,KAASA,MAAAA,GAAAA,EAAM9wC,IAAI2nB,SAAS,sBAGjFopB,EAAkCH,MAAAA,OAAsB,EAAtBA,EAAwB7rC,MAAK+rC,GAAQA,MAAAA,OAAI,EAAJA,EAAM9wC,IAAI2nB,SAAS,qBAE1FqpB,EACF/0C,KAAK6C,MAAMoC,QAAQiC,SACnBlH,KAAK6C,MAAMoC,QAAQiC,QAAQyT,SAC3B3a,KAAK6C,MAAMoC,QAAQiC,QAAQyT,QAAQo6B,gBACnC/0C,KAAK6C,MAAMoC,QAAQiC,QAAQyT,QAAQo6B,iBAEjCj8B,EACF9Y,KAAK6C,MAAMoC,QAAQiC,SACnBlH,KAAK6C,MAAMoC,QAAQiC,QAAQ8tC,QACgC,WAA1Dh1C,KAAK6C,MAAMoC,QAAQiC,QAAQ8tC,OAAOC,KAEjCC,EAAoBrI,EAAAA,GAAoB,OAAQ7sC,KAAK6C,MAAMoC,QAAQC,gBAAkB,GACrF0nC,EAAeC,EAAAA,GAAoB,OAAQ7sC,KAAK6C,MAAMoC,QAAQC,gBAAkB,GAEhFiwC,EACFn1C,KAAK6C,MAAMoS,MAAMkgC,oBAAsBn1C,KAAK6C,MAAMoS,MAAMkgC,mBAAmBx0C,OAAS,GAAKX,KAAK6C,MAAMoS,MAAMkgC,mBAAmB,GAE3HxyC,GAAUI,EAAAA,EAAAA,kBAAiB,QAAS/C,KAAKgD,iBAAkBmf,EAAAA,kBAAkBizB,gBAC7EC,GAA2BzxC,EAAAA,EAAAA,wBAAuB5D,KAAKgD,iBAAkBL,GAEzEqhB,EAAiBhkB,KAAK6C,MAAMkE,KAAK6oB,WAA2C,QAAnCyjB,EAAIrzC,KAAK6C,MAAMkE,KAAK6oB,SAAS/f,cAAM,IAAAwjC,OAAA,EAA/BA,EAAiCxjB,aAAa7L,gBAC3FsxB,EAAkBtxB,EAAiBwwB,EAAqBD,EAGxDpF,EAC8E,QADhCmE,EACxB,QADwBC,EAChDvzC,KAAK6C,MAAMkE,KAAK6oB,gBAAQ,IAAA2jB,GAAQ,QAARA,EAAxBA,EAA0B1jC,cAAM,IAAA0jC,OAAA,EAAhCA,EAAkCpE,sDAA8C,IAAAmE,GAAAA,EAG9E9d,EAAqF,QAA7Dge,EAA2B,QAA3BC,EAAGzzC,KAAK6C,MAAMkE,KAAK6oB,gBAAQ,IAAA6jB,GAAQ,QAARA,EAAxBA,EAA0B5jC,cAAM,IAAA4jC,OAAA,EAAhCA,EAAkCje,gCAAwB,IAAAge,GAAAA,EAGrF+B,GAA6C,QAA3B7B,EAAG1zC,KAAK6C,MAAMkE,KAAK6oB,gBAAQ,IAAA8jB,GAAQ,QAARA,EAAxBA,EAA0B7jC,cAAM,IAAA6jC,OAAA,EAAhCA,EAAkC6B,mBAGvDC,GAA8C,QAA3B7B,EAAG3zC,KAAK6C,MAAMkE,KAAK6oB,gBAAQ,IAAA+jB,GAAQ,QAARA,EAAxBA,EAA0B9jC,cAAM,IAAA8jC,OAAA,EAAhCA,EAAkC6B,oBAGxDC,GAAgD,QAA3B7B,EAAG5zC,KAAK6C,MAAMkE,KAAK6oB,gBAAQ,IAAAgkB,GAAQ,QAARA,EAAxBA,EAA0B/jC,cAAM,IAAA+jC,OAAA,EAAhCA,EAAkC6B,sBAG1DlG,GAAsD,QAA3BsE,EAAG7zC,KAAK6C,MAAMkE,KAAK6oB,gBAAQ,IAAAikB,GAAQ,QAARA,EAAxBA,EAA0BhkC,cAAM,IAAAgkC,OAAA,EAAhCA,EAAkCtE,4BAGhExa,GAAqG,QAArE+e,EAA2B,QAA3BC,EAAG/zC,KAAK6C,MAAMkE,KAAK6oB,gBAAQ,IAAAmkB,GAAQ,QAARA,EAAxBA,EAA0BlkC,cAAM,IAAAkkC,OAAA,EAAhCA,EAAkChf,wCAAgC,IAAA+e,GAAAA,EAGrGhd,GACyE,QADhCkd,EACnB,QADmBC,EAC3Cj0C,KAAK6C,MAAMkE,KAAK6oB,gBAAQ,IAAAqkB,GAAQ,QAARA,EAAxBA,EAA0BpkC,cAAM,IAAAokC,OAAA,EAAhCA,EAAkCnd,iDAAyC,IAAAkd,GAAAA,EAGzEZ,GAAqD,QAA3Bc,EAAGl0C,KAAK6C,MAAMkE,KAAK6oB,gBAAQ,IAAAskB,GAAQ,QAARA,EAAxBA,EAA0BrkC,cAAM,IAAAqkC,OAAA,EAAhCA,EAAkCd,2BAErE,IAAIsC,IAA6B,EAGX,oBAAXpkC,QACmH,MAAjH,QAAR6iC,EAAA3kC,gBAAQ,IAAA2kC,GAA6F,QAA7FA,EAARA,EAAUj+B,uBA9XgB,iCA8XyE,UAAE,IAAAi+B,OAAA,EAArGA,EAAuGwB,MAAMC,WAE9GF,IAA6B,GAGjC,IAAIljC,GAAShM,EAAAA,EAAA,GACNxG,KAAK6C,OAAK,IACbiB,UAAW4wC,EACX1lB,iBAAkBhvB,KAAKgvB,iBACvBya,YAAazpC,KAAKypC,YAClBsL,eAAAA,EACAhyB,SAAU/iB,KAAK+iB,SACfgS,iCAA0D,QAA1Bqf,EAAEp0C,KAAK6C,MAAMkE,KAAK6oB,gBAAQ,IAAAwkB,GAAQ,QAARA,EAAxBA,EAA0BvkC,cAAM,IAAAukC,OAAA,EAAhCA,EAAkCrf,iCACpEoa,+CAAAA,EACA0G,cACI71C,KAAK6C,MAAMkE,KAAK6oB,eACoBlpB,IAApC1G,KAAK6C,MAAMkE,KAAK6oB,SAAS/f,aACsBnJ,IAA/C1G,KAAK6C,MAAMkE,KAAK6oB,SAAS/f,OAAOimC,WACpC9xB,eAAAA,EACAwlB,WAAYxpC,KAAKwpC,WACjB1wB,SAAAA,EACAo8B,kBAAAA,EACAtI,aAAAA,EACAyC,gBAAiBrvC,KAAKqvC,gBACtBpF,kBACIjqC,KAAK6C,MAAMoS,MAAMg1B,mBAAqBjqC,KAAK6C,MAAMoS,MAAMg1B,kBAAkBtpC,OAAS,EAC5EX,KAAK6C,MAAMoS,MAAMg1B,kBAAkB,QACnCvjC,EACVqvC,cAAe,CAAEtjC,YAAazS,KAAK6C,MAAOiB,UAAW4wC,GACrDsB,YAAa,CAAElyC,UAAW,qBAC1BmyC,UAAW,CAAEnyC,UAAW,qBACxBoyC,UAAW,CAAEpyC,UAAW,qBACxBqyC,iBAAkB,CAAEryC,UAAW,6BAC/BsyC,UAAW,CAAEtyC,UAAW4xC,GAA6B,gCAAkC,qBACvFW,sBAAuB,CAAEvyC,UAAW,mCACpCwyC,uBAAwB,CAAExyC,UAAW,oCACrCyyC,wBAAyB,CAAEzyC,UAAW,qCACtCyB,MAAOgkC,GAAmBvpC,KAAKw2C,mBAAmBjN,GAClDuL,gCAAAA,IAGJ,IAAKC,GAAkBvtB,EACnBhV,GAAShM,EAAAA,EAAA,GACFgM,IAAS,IACZslB,MAAOj0B,EAAAA,cAAC4yC,EAAAA,EAAcxyC,OAAAC,OAAA,GAAK,CAAEka,QAASq2B,YAEvC,GAAIz0C,KAAK+uB,YACZvc,GAAShM,EAAAA,EAAA,GACFgM,IAAS,IACZkkC,QAAS7yC,EAAAA,cAAC80B,EAAAA,QAAO,CAAC70B,UAAU,+CAE7B,GAAI9D,KAAK+iB,SACZvQ,GAAShM,EAAAA,EAAA,GACFgM,IAAS,IACZslB,MAAOj0B,EAAAA,cAAC4yC,EAAAA,EAAcxyC,OAAAC,OAAA,GAAK,CAAEka,QAASkV,WAEvC,CAAC,IAADqjB,GAAAC,GACHpkC,GAAShM,EAAAA,EAAA,GACFgM,IAAS,IACZslB,MAAOtgB,GAAgB3T,EAAAA,cAAC4yC,EAAAA,EAAcxyC,OAAAC,OAAA,GAAK,CAAEka,QAAS5G,KACtDq/B,SAAS,EACTC,WAAYlC,EACR/wC,EAAAA,cAACkzC,EAAAA,EAAmB9yC,OAAAC,OAAA,GACZ,CACAuB,MAAOmvC,EACP1lB,YAAAA,EACAmlB,0BAAAA,EACA2C,SAAU7xC,EACVrE,eAAgBd,KAAK6C,MAAMoC,QAC3B6T,SAAAA,EACAnH,SAAU3R,KAAKqvC,gBACfrsC,iBAAkBhD,KAAKgD,iBACvB+xB,iCAA0D,QAA1B4hB,GAAE32C,KAAK6C,MAAMkE,KAAK6oB,gBAAQ,IAAA+mB,IAAQ,QAARA,GAAxBA,GAA0B9mC,cAAM,IAAA8mC,QAAA,EAAhCA,GAAkC5hB,iCACpEoa,+CAAAA,EACApsB,WAAYvL,EACZ+9B,mBAAAA,GACAC,oBAAAA,GACAC,sBAAAA,GACAlG,4BAAAA,GACAzY,0CAAAA,GACAsc,2BAAAA,WAIR1sC,EAEJuwC,cAAcC,EAAAA,EAAAA,GAAgBl3C,KAAK6C,OACnCs0C,uBAAuBC,EAAAA,EAAAA,GAAyBp3C,KAAK6C,OACrDw0C,UAAWrzB,OAAiBtd,GAAY4wC,EAAAA,EAAAA,GAAat3C,KAAK6C,MAAO7C,KAAKgD,kBACtEu0C,iBACI1zC,EAAAA,cAAC2zC,EAAAA,EAAyBvzC,OAAAC,OAAA,GAClB,CACAoxC,gBAAAA,EACA9K,YACKhV,GAA4B2Z,EACvBnvC,KAAK2pC,6BACL3pC,KAAK+pC,aAEfuI,cAAetyC,KAAKsyC,cACpBtvC,iBAAkBhD,KAAKgD,iBACvBmsC,+CAA+E,QAAjCyH,GAAE52C,KAAK6C,MAAMkE,KAAK6oB,SAAS/f,cAAM,IAAA+mC,QAAA,EAA/BA,GAC1CzH,+CACN/F,oBAAqBppC,KAAKyM,MAAM28B,oBAChC5T,yBAAAA,EACAT,iCAAAA,MAIZogB,mBAAAA,EACAsC,mBAAoBvC,GAChBrxC,EAAAA,cAAC6H,EAAAA,OAAMzH,OAAAC,OAAA,CACHJ,UAAU,yCACVyB,MAAO+uC,EACPl7B,MAAM,YACNjV,KAAM+wC,GACFG,EAAwB,CAC5B3qB,SAAU1qB,KAAKyM,MAAM48B,sBAEpBiL,KAMjB,OAAOt0C,KAAK6C,MAAMiR,WAAWtB,IAGvB,wBAEN,GADkBvO,OAAOyzC,OAAO13C,KAAK6C,MAAMkE,MAAM6hB,MAAK7hB,IAAQyU,EAAAA,EAAAA,IAAIzU,EAAM,YAAc+oC,EAAAA,sBAAsBC,UAExG,OAAOD,EAAAA,sBAAsBC,QAIjC,GADkB9rC,OAAOyzC,OAAO13C,KAAK6C,MAAMkE,MAAM4wC,OAAM5wC,IAAQyU,EAAAA,EAAAA,IAAIzU,EAAM,YAAc+oC,EAAAA,sBAAsB8H,UAEzG,OAAO9H,EAAAA,sBAAsB8H,QAIjC,OADiB3zC,OAAOyzC,OAAO13C,KAAK6C,MAAMkE,MAAM6hB,MAAK7hB,IAAQyU,EAAAA,EAAAA,IAAIzU,EAAM,YAAc+oC,EAAAA,sBAAsB+H,SAEhG/H,EAAAA,sBAAsB+H,YADjC,EAYGrB,mBAAmBjN,GACtB,OACI1lC,EAAAA,cAACgpC,EAAAA,GAAa5oC,OAAAC,OAAA,GACNqlC,EAAe,CACnBjjC,IAAKijC,EAAgBjjC,KAAO,KAC5BxC,UAAU,qBACVV,KAAMmmC,EAAgBnmC,KACtB00C,UAAW,CAAE3oB,OAAQnvB,KAAKspC,4BAA6BxoC,eAAgBd,KAAK6C,MAAMoC,QAAQiC,eAjhB5FknB,EAAAA,EAAAA,IAAA,CAAT4K,EAAAA,IAAQ,gCAIC5K,EAAAA,EAAAA,IAAA,CAAT4K,EAAAA,IAAQ,iCASC5K,EAAAA,EAAAA,IAAA,CAAT4K,EAAAA,IAAQ,8BAKC5K,EAAAA,EAAAA,IAAA,CAAT4K,EAAAA,IAAQ,qCAIC5K,EAAAA,EAAAA,IAAA,CAAT4K,EAAAA,IAAQ,mCAmBC5K,EAAAA,EAAAA,IAAA,CAAT4K,EAAAA,IAAQ,gDAOC5K,EAAAA,EAAAA,IAAA,CAAT4K,EAAAA,IAAQ,iCAkcC5K,EAAAA,EAAAA,IAAA,CAAT4K,EAAAA,IAAQ,uCA+ST5K,EAAAA,EAAAA,IAAA,CADChsB,EAAAA,IAAM,uCAjyBL4jB,GAAQoI,EAAAA,EAAAA,IAAA,CAFb6K,EAAAA,gBACA5K,EAAAA,IACKrI,GAs7BN,8XC3iCO,MAAM+xB,EAAmDxpB,IAAA,IAAC,cAAEypB,EAAa,MAAErsC,EAAK,SAAE8D,GAAU8e,EAAA,OAC/F1qB,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK8zC,GACLrsC,EACA8D,IAIIwoC,EAAmD7e,IAAA,IAAC,cAAE8e,EAAa,MAAEvsC,GAAOytB,EAAA,OAAKv1B,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKg0C,GAAgBvsC,IAE3GwsC,EAAyC1V,IAAA,IAAC,SAAE2V,EAAQ,KAAEx2C,EAAI,cAAEy2C,EAAa,cAAEC,GAAe7V,EAAA,OACnG5+B,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKk0C,GACLx2C,EACAy2C,GAAiBx0C,EAAAA,cAACk0C,EAAsB9zC,OAAAC,OAAA,GAAKm0C,IAC7CC,GAAiBz0C,EAAAA,cAACo0C,EAAsBh0C,OAAAC,OAAA,GAAKo0C,MAIzCC,EAA2D7V,IAAA,IAAC,sBAAE8V,EAAqB,aAAEC,EAAY,QAAErT,EAAO,UAAEiS,GAAW3U,EAAA,OAChI7+B,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKs0C,GACLpT,EACDvhC,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKu0C,GACLpB,EAAU11C,KAAI+2C,GACX70C,EAAAA,cAACs0C,EAAiBl0C,OAAAC,OAAA,CAACH,IAAK20C,EAAS56B,QAAY46B,SAMhDC,EAA6E7V,IAAA,IAAC,sBACvF0V,EAAqB,aACrBC,EAAY,QACZrT,EAAO,UACPiS,EAAS,eACTuB,EAAc,mBACdC,GACH/V,EAAA,OACGj/B,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKs0C,GACLK,EACAD,EACAxT,EACDvhC,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKu0C,GACLpB,EAAU11C,KAAI+2C,GACX70C,EAAAA,cAACi1C,EAAmC70C,OAAAC,OAAA,CAACH,IAAK20C,EAAS56B,QAAY46B,SAMlEI,EAA2D9V,IAAA,IAAC,SAAEoV,EAAQ,KAAEx2C,EAAI,cAAEy2C,EAAa,cAAEC,GAAetV,EAAA,OACrHn/B,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKk0C,GACLx2C,EACA02C,GAAiBz0C,EAAAA,cAACo0C,EAAsBh0C,OAAAC,OAAA,GAAKo0C,MAIzCS,EAAqEC,IAAA,IAAC,cAAEhB,EAAa,MAAErsC,EAAK,SAAE8D,GAAUupC,EAAA,OACjHn1C,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK8zC,GACLrsC,EACA8D,IAIIwpC,EAA2CC,IAAA,IAAC,UACrDC,EAAS,OACTC,EAAM,QACNhU,EAAO,SACPiU,EAAQ,eACRC,EAAc,aACdC,EAAY,cACZC,EAAa,iCACbC,GACHP,EAAA,OACGr1C,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKi1C,GACNt1C,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKk1C,GACLhU,EACAiU,QAEiC3yC,IAArC+yC,GAAkDH,GAAkBz1C,EAAAA,cAAC00C,EAAsBt0C,OAAAC,OAAA,GAAKo1C,SAC3D5yC,IAArC+yC,GAAkDD,GAAiB31C,EAAAA,cAAC00C,EAAsBt0C,OAAAC,OAAA,GAAKs1C,SAC1D9yC,IAArC+yC,GAAkDF,GAAgB11C,EAAAA,cAAC00C,EAAsBt0C,OAAAC,OAAA,GAAKq1C,SACzD7yC,IAArC+yC,EACKA,EAAiC93C,KAAI,CAACC,EAAMgN,IACjC/K,EAAAA,cAAC80C,EAAwC10C,OAAAC,OAAA,GAAKtC,EAAI,CAAEmC,IAAK6K,OAEpE,OAIR8qC,EAAiDC,IAAA,IAAC,QAAEvU,EAAO,MAAEvgB,GAAO80B,EAAA,OACtE91C,EAAAA,cAAA,OAAKC,UAAU,6BACVshC,EACDvhC,EAAAA,cAAA,OAAKC,UAAU,4BACV+gB,GACGhhB,EAAAA,cAAAA,EAAAA,SAAA,KACKghB,EAAM+0B,SACN/0B,EAAMg1B,SACNh1B,EAAMi1B,YACNj1B,EAAMk1B,IACNl1B,EAAMm1B,eACNn1B,EAAMo1B,QACNp1B,EAAMq1B,gBACNr1B,EAAMsX,SACNtX,EAAMs1B,eAOrBC,EAA4DC,IAAA,IAAC,QAAEjV,EAAO,MAAEvgB,GAAOw1B,EAAA,OACjFx2C,EAAAA,cAAA,OAAKC,UAAU,+BACVshC,EACDvhC,EAAAA,cAAA,OAAKC,UAAU,8BACV+gB,GACGhhB,EAAAA,cAAAA,EAAAA,SAAA,KACKghB,EAAMy1B,SACNz1B,EAAMsX,SACNtX,EAAMo1B,QACNp1B,EAAMs1B,eAqF3B,EA9EmDt3C,IAC/C,MAAM,iCACFkyB,EAAgC,+CAChCoa,EAA8C,QAC9C0H,EAAO,cACPd,EAAa,YACbC,EAAW,cACXH,EAAa,eACb7xB,EAAc,UACdiyB,EAAS,UACTC,EAAS,iBACTC,EAAgB,UAChBC,EAAS,sBACTC,EAAqB,uBACrBC,EAAsB,wBACtBC,EAAuB,kBACvBtM,EAAiB,QACjByM,EAAO,MACP5e,EAAK,MACLvyB,EAAK,WACLuxC,EAAU,aACVG,EAAY,sBACZE,EAAqB,UACrBE,EAAS,iBACTE,EAAgB,mBAChBpC,EAAkB,mBAClBsC,EAAkB,gCAClB3C,EAA+B,iBAC/B9lB,GACAnsB,EAEJ,OACIgB,EAAAA,cAACwQ,EAAAA,OAAMpQ,OAAAC,OAAA,GAAK6xC,EAAa,CAAEzqC,IAAK0jB,KAC1B6mB,IAAkBf,GAAmCjxC,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK8xC,GAAczwC,IAC7EswC,GAAiB9gB,GAAoCoa,IAAmDrX,IAAU4e,GAChH7yC,EAAAA,cAAC80B,EAAAA,QAAO,CAAC70B,UAAU,yCAErB+xC,GACEhyC,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK+xC,GACLS,EACA5e,EACA+e,GACGhzC,EAAAA,cAAAA,EAAAA,SAAA,KACIA,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKgyC,GACLpB,EACAA,GAAmCjxC,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK8xC,GAAczwC,GAC3DuxC,EACDjzC,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKqyC,GAA0BpB,GACpCtxC,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKiyC,GACLoB,EACAE,IAGT5zC,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKkyC,GACJpyB,EAEImzB,GAAyBtzC,EAAAA,cAACu2C,EAAuBn2C,OAAAC,OAAA,GAAKizC,IADtDF,GAAgBpzC,EAAAA,cAAC61C,EAAqBz1C,OAAAC,OAAA,GAAK+yC,IAEjDpzC,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKmyC,GACNxyC,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKqyC,GAA0BpB,GACnCoC,EACAE,GAEJJ,GAAaxzC,EAAAA,cAACo1C,EAAkBh1C,OAAAC,OAAA,GAAKmzC,IACtCxzC,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKoyC,GACNzyC,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKqyC,GAA0BpB,GACnCoC,EACAE,MAOxB5B,GAAiB5L,8DC9M9B,MAMA,EAN6C1b,IAAA,IAAC,QAAEnQ,GAASmQ,EAAA,OACrD1qB,EAAAA,cAAA,KAAGC,UAAU,6BAA6BqP,KAAK,QAAO,YAAW,aAC5DiL,yFCGF,MAAMg5B,EAA4B/2C,IACrC,MACI0G,MAAM,SAAE6oB,GACRzqB,WAAW,iBAAEo1C,EAAgB,aAAEC,EAAY,oBAAEC,GAAqB,QAClEx1C,EAAO,SACP6B,EAAQ,GACR3E,EAAE,UACFH,GACA3B,EAEEwvB,EAAerU,GAAAA,CAAIoU,EAAU,uBAC7B9T,EAAON,GAAAA,CAAIoU,EAAU,4BAE3B,MAAO,CACHwV,QAASvhC,EAAAA,cAAA,MAAIC,UAAU,gCAAgC22C,GACvD51B,MAAOgL,MAAAA,GAAAA,EAAc7L,gBACf02B,EAAAA,EAAAA,GAAe,CACXC,gBAAiBJ,EACjBC,aAAAA,EACA1+B,KAAAA,EACA7W,QAAAA,EACA6B,SAAAA,EACA9E,UAAAA,EACAG,GAAAA,EACAywB,cAAehD,EAAS/f,cAE5BnJ,yMCyBP,MAAM4wC,EAAeA,CAACj3C,EAAsC2C,KAAgE,IAAAwW,EAC/H,MAAM8T,EAAyB9R,GAAAA,CAAInb,EAAO,kDACpC+nB,EAAwB5M,GAAAA,CAAInb,EAAO,kDAEnC,4BAAEojB,EAA2B,aAAE9J,GAAiBtZ,EAAM0G,KACtD2d,EAAoC/K,MAAAA,GAAoB,QAARH,EAAZG,EAAc9J,cAAM,IAAA2J,GAAiE,QAAjEA,EAApBA,EAAsB1Q,MAAKkhB,GAF/B,oEAE0CA,EAAQnQ,cAAuC,IAAAL,OAAA,EAArFA,EACpCM,UAEA8gC,EAAwB77B,IAC1B,MAAMM,EAAmB7D,GAAAA,CAAInb,EAAO,gCACpC,IAAK0e,EAASE,qBAAuBI,EACjC,MAAO,GAGX,MAAMw7B,GAAiBx7B,GAAoB,IAAIvW,MAAM2G,GAC1CA,EAAS2Q,gBAAkBrB,EAASE,qBAG/C,OAAO47B,GAAiBA,EAAcx6B,aAUpCy6B,EAAyB/7B,IAA+C,IAAAg8B,EAC1E,MAAMv9B,EAAUuB,EAASrB,YARRY,EAQiCS,EAASrB,WAP1ClC,GAAAA,CAAInb,EAAO,yBAA2B,IACvCyI,MAAMkyC,GACX18B,IAAc08B,EAASv9B,YAHjBa,IAAAA,EASjB,MAAM,GACFnc,EAAE,SACF2E,EAAQ,QACR7B,EACAmC,QAAQ,cAAEC,EAAa,gCAAE4zC,GACzB91C,WAAW,sBACPunB,EAAqB,0BACrBL,EAAyB,yBACzBF,EAAwB,0BACxBM,EAAyB,2BACzByuB,EAA0B,aAC1B5uB,EAAY,uBACZO,EAAsB,mBACtBC,EAAkB,gBAClBquB,GAEJl2C,SACIiC,SAAS,aAAEC,KAEf9G,EACE6iB,EAA8B,QAAtB63B,EAAG16C,EAAM0G,KAAKmc,gBAAQ,IAAA63B,OAAA,EAAnBA,EAAqBlrC,OACtC,IAAK2N,EACD,OAGJ,IAAI8E,GAAaC,EAAAA,EAAAA,mBAAkB/E,EAASvY,EAAQC,mBAAewB,GACnE,GAAI8b,EAAAA,GAASC,YAAaC,EAAAA,EAAAA,IAAiBzd,EAAQC,cAAcpE,gBAAiB,CAAC,IAADs6C,EAC9E,MAAMx4B,EAAU,IAAIC,IAAIP,EAAYhR,OAAO7B,SAAStL,MACpDye,EAAQE,aAAalI,IAAI,YAAa,GAAqB,QAArBwgC,EAAGr8B,EAAS9d,iBAAS,IAAAm6C,EAAAA,EAAI,KAC/D94B,EAAaM,EAAQze,KAEzB,MAAMqsB,EAAehV,GAAAA,CAAInb,EAAO,oCAChC,OACIwD,EAAAA,cAACof,EAAAA,sBAAqB,CAClB9gB,GAAIA,EACJ2E,SAAUA,EACV7B,QAASA,EACTE,UAAW,CACP+mB,WAAYC,EACZC,YAAaC,EACbG,YAAaC,EACb4uB,aAAcH,EACdxuB,sBAAAA,EACAJ,aAAAA,EACAO,uBAAAA,EACAC,mBAAAA,EACAC,kBAAmB,GACnBC,iBAAkB,GAClBC,oBAAqBkuB,EACrBvuB,0BAA2B,0BAE/BvJ,oBAAoB,EACpBhc,cAAeA,EACfF,aAAcA,EACdmb,WAAYA,EACZgB,gBAAiB9F,EAAQ+F,gBACzBxc,KAAM,CACFgY,SAAAA,EACAvB,QAAAA,EACA0F,SAAAA,GAEJ+3B,gCAAiCA,EACjCj4C,iBAAkBA,EAClBygB,4BAA6BA,MAAAA,OAA2B,EAA3BA,EAA6B5T,OAC1DyrC,cAAe9qB,KAKrB+qB,EAA+BC,IACjC,MACIr2C,WAAW,8BAAEs2C,IACbp7C,EAEJ,MAAO,CACH23C,cAAe,CAAEl0C,UAAW,iCAC5B6H,MAAO9H,EAAAA,cAAA,QAAMC,UAAU,4BAA4B23C,GACnDhsC,SAAU5L,EAAAA,cAAA,OAAKC,UAAU,+BAA+B03C,KAI1DE,EAA8BA,KAChC,MACIv2C,WAAW,kBAAEw2C,IACbt7C,EAEJ,MAAO,CACH63C,cAAe,CAAEp0C,UAAW,+BAC5B6H,MAAO9H,EAAAA,cAAA,QAAMC,UAAU,4BAA4B63C,KAIrDC,EAA2Bn2C,GACtBA,EAAM9D,KAAIod,IACb,MAAMy8B,EAAyBZ,EAAqB77B,GAC9C88B,EAAWC,EAAyB/8B,GACpCktB,KACFltB,EAASc,cAA0C,KAA1Bd,EAASc,eAAsBd,EAASc,eAAiBuI,EACtF,MAAO,CACHtK,OAAQiB,EAASjB,QAAU,GAC3Bs6B,SAAU,CAAEt0C,UAAW,0BACvBlC,KAAMk5C,EAAsB/7B,GAC5Bs5B,cAAewD,EAAWN,EAA4BC,QAA0B90C,EAChF4xC,cAAerM,EAAkByP,SAAgCh1C,MAKvEo1C,EAA4BC,IAAmC,IAAAC,EACjE,OAAQ5oB,EAAAA,iBAAiB6oB,mBAAmBF,EAAal8B,gBACnD6E,EACIq3B,EAAal8B,gBACb4D,MAAAA,GAAmC,QAARu4B,EAA3Bv4B,EAA6B5T,cAAM,IAAAmsC,GAAyB,QAAzBA,EAAnCA,EAAqCvoB,+BAAuB,IAAAuoB,OAAA,EAA5DA,EAA8DlzC,MAC1DknB,GAAgBA,IAAiB+rB,EAAal8B,gBAElDk8B,EAAal8B,eAAiByN,IAuCtC4uB,EAAez2C,GACVA,EAAMi8B,QAAO,CAAC1Q,EAAOpvB,IACjBovB,GAASpvB,EAAKohB,UAAY,IAClC,GAGDm5B,EAA8BhxC,IAChC,MAAM2Q,EAAON,GAAAA,CAAInb,EAAO,0CACxB,MAAa,SAAT8K,EACO2Q,EAAKiI,UAAU/T,QAAQ+O,IAC1BA,OAAAA,EAASc,cAA0C,KAA1Bd,EAASc,cA7CZk8B,EA8CSh9B,GA7C/BqU,EAAAA,iBAAiB6oB,mBAAmBF,EAAal8B,gBACnD6E,EACIq3B,EAAal8B,gBACb4D,MAAAA,GAAmC,QAAR24B,EAA3B34B,EAA6B5T,cAAM,IAAAusC,GAAyB,QAAzBA,EAAnCA,EAAqC3oB,+BAAuB,IAAA2oB,OAAA,EAA5DA,EAA8DtzC,MAC1DknB,GAAgBA,IAAiB+rB,EAAal8B,gBAElDk8B,EAAal8B,eAAiByN,IAuCYvO,EAASc,eAAiBuI,GAChErJ,EA/CgBg9B,IAAAA,EAAmCK,KAiD7C,WAATjxC,EACA2Q,EAAKiI,UAAU/T,QAAQ+O,GAC1BA,EAASc,cAA0C,KAA1Bd,EAASc,aAAsBi8B,EAAyB/8B,GAAY,OAG9FjD,EAAKiI,UAAU/T,QAAQ+O,GAAuBA,EAASc,eAAiBuI,KAG7Ei0B,EAA+BlxC,IACjC,KAAgC,KAA3BmiB,QAA4D5mB,IAA3B4mB,GAAmD,WAATniB,GAA8B,UAATA,GACjG,OAGJ,MAAM1F,EAAQ02C,EAA2BhxC,GAEzC,GAAqB,IAAjB1F,EAAM9E,OACN,OAGJ,MACM4E,EA1DsB+2C,EAACtrB,EAAe7lB,KAA8B,IAAAoxC,EAC1E,MACIp3C,WAAW,UAAEq3C,EAAS,WAAEC,EAAU,mBAAEC,EAAkB,8BAAEC,IACxDt8C,EAEJ,IAAIu8C,EAAgC,GAEH,QAAjCL,EAAAl8C,EAAM0G,KAAKyd,gBAAgB3U,cAAM,IAAA0sC,GAAjCA,EAAmCzzC,MAAKyW,IAAyB,IAAAs9B,EAC7DD,EAAwBA,IAEoB,QADjBC,EACrBt9B,EAAuBG,uBAAe,IAAAm9B,GAAuE,QAAvEA,EAAtCA,EAAwC/zC,MAAK0W,GAAkBA,EAAeI,OAASwI,WAAsB,IAAAy0B,OAAA,EAA7GA,EACM/8B,gBAGhB,MAAMg9B,EAAS9rB,EAAQ,EAAIyrB,EAAaD,EAOxC,OALa,SAATrxC,EACMwxC,EACS,WAATxxC,EACAuxC,EACA,GAAGE,MAA0B5rB,KAAS8rB,MACnCv5C,QAAQ,UAAWytB,EAAMjT,YAAYxa,QAAQ,WAAYu5C,IAqCxDR,CADAJ,EAAYz2C,GACmB0F,GAE7C,MAAO,CACHqtC,sBAAuB,CAAE10C,UAAW4O,GAAAA,CAAW,yCAA0CvH,IACzFstC,aAAc,CAAE30C,UAAW,gCAC3BshC,QAASvhC,EAAAA,cAAA,OAAKC,UAAU,uCAAuCyB,GAC/D8xC,UAAWuE,EAAwBn2C,KAoDrCs3C,EAA+BrnB,IACjC,MACItuB,QAAQ,iBAAE41C,IACV38C,EACA28C,IACAA,EAAiB55C,KAAOsyB,EAAM5qB,OAAOC,QAmEvCkyC,EAAoDA,KACtD,GAA+B,KAA3B3vB,QAA4D5mB,IAA3B4mB,EACjC,OAGJ,MACInoB,WAAW,oBAAE+3C,EAAmB,cAAEC,IAClC98C,EAEEoF,EAnC+B23C,MACrC,MAAMthC,EAAON,GAAAA,CAAInb,EAAO,0CAClBg9C,EAAyB53C,GAAsB63C,GAAAA,CAAQ73C,GAAO7D,GAAQA,EAAKqd,qBAE3Es+B,GADsB93C,EACaqW,EAAKiI,UADIu5B,GAAAA,CAAQ73C,GAAO7D,GAAQA,EAAKie,gBAAlDpa,IAAAA,EAE5B,MAAM+3C,EAA6B,GAC7BC,EAA6B,GAiBnC,OAdAx5C,OAAOy5C,QAAQH,GAAe3zC,SAAQ2kB,IAAwC,IAAtCyB,EAAc2tB,GAAoBpvB,EAEtEgvB,EAAcvtB,GAAgBqtB,EAAsBM,GACpDH,EAAet6C,KAAKm6C,EAAsBM,OAG9C15C,OAAO0S,KAAK6mC,GAAgB5zC,SAAQ7F,IAChC,MAAMwkB,EAAYi1B,EAAez5C,GACjCE,OAAO0S,KAAK4R,GAAW3e,SAAQgF,IAC3B,MAAMmQ,EAAWwJ,EAAU3Z,GAC3B6uC,EAAav6C,KAAK6b,SAInB0+B,GAYOL,GAEd,GAAqB,IAAjB33C,EAAM9E,OACN,OAGJ,MAAMi9C,EAAkD,GA0BxD,OAzBAn4C,EAAM9D,KAAIC,IACN,MAAMovB,EAAQkrB,EAAYt6C,GACpBmd,EAAWnd,EAAK,GAChB45C,EAAyBZ,EAAqB77B,GAC9C5T,EACF4T,EAASE,oBAAsBF,EAASc,aAClC,SACgC,KAAhCd,EAASE,oBACTF,EAASc,eAAiBuI,GACzBgL,EAAAA,iBAAiBC,cAAcjL,GAEhC,OADA,QAEJ7iB,EA3FoCs4C,EAC9C7sB,EACA7lB,EACA6kB,EACA8tB,KACQ,IAAAC,EAAAC,EACR,MACI74C,WAAW,UAAEq3C,EAAS,WAAEC,IACxBp8C,EAEJ,IAAIu8C,EAAgC,GAChCqB,EAAiC,GAEJ,QAAjCF,EAAA19C,EAAM0G,KAAKyd,gBAAgB3U,cAAM,IAAAkuC,GAAjCA,EAAmCj1C,MAAKyW,IAAyB,IAAA2+B,EAC7DtB,EAAwBA,IAEoB,QADjBsB,EACrB3+B,EAAuBG,uBAAe,IAAAw+B,GAAuE,QAAvEA,EAAtCA,EAAwCp1C,MAAK0W,GAAkBA,EAAeI,OAASwI,WAAsB,IAAA81B,OAAA,EAA7GA,EACMp+B,gBAGiB,QAAjCk+B,EAAA39C,EAAM0G,KAAKyd,gBAAgB3U,cAAM,IAAAmuC,GAAjCA,EAAmCl1C,MAAKyW,IAAyB,IAAA4+B,EAC7DF,EAAyBA,IAEmB,QADhBE,EACtB5+B,EAAuBG,uBAAe,IAAAy+B,GAA8D,QAA9DA,EAAtCA,EAAwCr1C,MAAK0W,GAAkBA,EAAeI,OAASoQ,WAAa,IAAAmuB,OAAA,EAApGA,EAAsGr+B,gBAGhH,MACMg9B,EAAS9rB,EAAQ,EAAIyrB,EAAaD,EAOxC,OALa,SAATrxC,EACM,IAAI6lB,KAAS8rB,KACJ,WAAT3xC,EACA,GANqB8yC,MAA2BH,MAM7B9sB,KAAS8rB,KAC5B,GAAGF,MAA0B5rB,KAAS8rB,MACnCv5C,QAAQ,UAAWytB,EAAMjT,YAAYxa,QAAQ,WAAYu5C,IAyDpDe,CAA0C7sB,EAAO7lB,EAAM4T,EAASc,aAAc27B,GACtF4C,EAAsB,WAATjzC,EAAoB+xC,EAA+B,SAAT/xC,EAAkBgyC,EAAgB,QACzFkB,EAAY,uDAAuDlzC,QACzEyyC,EAAsB16C,KAAK,CACvBs1C,sBAAuB,CAAE10C,UAAW4O,GAAAA,CAAW,yDAA0DvH,IACzGstC,aAAc,CAAE30C,UAAW,gCAC3B+0C,mBAAoBh1C,EAAAA,cAAA,OAAKC,UAAWu6C,IACpCzF,eAAgB/0C,EAAAA,cAAA,OAAKC,UAAU,+DAA+Ds6C,GAC9FhZ,QAASvhC,EAAAA,cAAA,OAAKC,UAAU,kEAAkEyB,GAC1F8xC,UAAWuE,EAAwBh6C,QAIpCg8C,GAGX,MApKsBU,MAClB,MAAM,QACFr5C,EACAmC,QAAQ,iBAAE41C,GACVj2C,MAAM,SAAEmW,GACR/X,WAAW,aAAEo5C,IACbl+C,EAEEsC,GAAUI,EAAAA,EAAAA,kBAAiB,QAASC,EAAmBmf,EAAAA,kBAAkBq8B,UACzE76C,GAAYC,EAAAA,EAAAA,wBAAuBZ,EAAmBL,GACtDmZ,EAAON,GAAAA,CAAInb,EAAO,0CAClBo+C,EAAa/5B,EAAoC,2BAA6B,GACpF,GAAK5I,GAASA,EAAKiI,WAAuC,IAA1BjI,EAAKiI,UAAUpjB,QAAiBuc,EAIhE,MAAO,CACHi8B,UAAW,CAAEr1C,UAAW,0BAA0B26C,KAClDrF,OAAQ,CAAEt1C,UAAW,kCACrBshC,QAAS4X,GAAoBA,EAAiB55C,MAC1CS,EAAAA,cAACgpC,EAAAA,GAAa5oC,OAAAC,OAAA,CACVJ,UAAU,mCACNk5C,EAAgB,CACpB12C,IAAK02C,EAAiB12C,KAAO,KAC7BlD,KAAM45C,EAAiB55C,KACvB00C,UAAW,CAAE3oB,OAAQ4tB,EAA6Bj8C,eAAgBmE,EAAQiC,YAGlFmyC,SACIx1C,EAAAA,cAAC6H,EAAAA,OAAMzH,OAAAC,OAAA,CACHJ,UAAU,yCACVyB,MAAOg5C,EACPnlC,MAAM,OACNjV,KAAM0oC,EAAAA,GAAoB,OAAQ5nC,EAAQC,gBAAkB,IACxDvB,GAEH46C,GAGTjF,eAAgB+C,EAA4B,UAC5C9C,aAAc8C,EAA4B,QAC1C7C,cAAe6C,EAA4B,SAC3C5C,iCAAkC/0B,EAC5Bu4B,SACAv2C,IAwHP43C,uGCxbJ,MAAMpH,EAAmB72C,IAAuD,IAAAmZ,EACnF,MACIpS,QAAQ,oBAAEs3C,GACV33C,MAAM,SAAE6oB,GACRzqB,WAAW,cACPw5C,EAAa,cACbC,EAAa,SACbC,EAAQ,gBACRlE,EAAe,aACfmE,EAAY,cACZC,EAAa,oBACbC,EAAmB,SACnBC,EAAQ,mBACRC,EAAkB,aAClBC,EAAY,qBACZC,GACH,QACDn6C,EAAO,SACP6B,EAAQ,GACR3E,EAAE,UACFH,GACA3B,EAEEuyB,EAAgBpX,GAAAA,CAAIoU,EAAU,UAC9B9T,EAAON,GAAAA,CAAIoU,EAAU,4BACrByvB,EAAgBvjC,EAAKiI,WAAajI,EAAKiI,UAAUpjB,OAAS,EAC1D2+C,EAAuBr6C,EAAQiC,QAAQmhB,SAEvC,4BAAE5E,EAA2B,aAAE9J,GAAiBtZ,EAAM0G,KACtD2d,EAAoC/K,MAAAA,GAAoB,QAARH,EAAZG,EAAc9J,cAAM,IAAA2J,GAAiE,QAAjEA,EAApBA,EAAsB1Q,MAAKkhB,GAF/B,oEAE0CA,EAAQnQ,cAAuC,IAAAL,OAAA,EAArFA,EACpCM,UAEAylC,GAAmG,IAA1Et6C,EAAQiC,QAAQgI,IAAI9H,OAAOo4C,2CAW1D,MAAO,CACHC,kBAAmB,CAAE37C,UAAW,4CAChCshC,QAASsZ,GAAuBA,EAAoBt7C,MAChDS,EAAAA,cAACgpC,EAAAA,GAAa5oC,OAAAC,OAAA,CACVJ,UAAU,8BACN46C,EAAmB,CACvBp4C,IAAKo4C,EAAoBp4C,KAAO,KAChClD,KAAMs7C,EAAoBt7C,KAC1B00C,UAAW,CAAE3oB,OAjBgBuG,IACrC,MACItuB,QAAQ,oBAAEs3C,IACVr+C,EACAq+C,IACAA,EAAoBt7C,KAAOsyB,EAAM5qB,OAAOC,QAYkBjK,eAAgBmE,EAAQiC,YAGtF2d,MAAOw6B,GACDK,EAAAA,EAAAA,GAAa,CACT9sB,cAAAA,EACA9W,KAAAA,EACA6iC,cAAAA,EACAC,cAAAA,EACAC,SAAAA,EACAlE,gBAAAA,EACAmE,aAAAA,EACAC,cAAAA,EACAC,oBAAAA,EACAC,SAAAA,EACAC,mBAAAA,EACAj6C,QAAAA,EACA6B,SAAAA,EACA3E,GAAAA,EACAm9C,qBAAAA,EACAt9C,UAAAA,EACA29C,iBAAkBR,EAClBz6B,kCAAAA,EACAjB,4BAA6BA,MAAAA,OAA2B,EAA3BA,EAA6B5T,OAE1D+vC,qBAAsB9jC,EAAK+jC,qBAC3BC,iBAAkBP,EAClBH,qBAAAA,SAEJ14C,gICvCd,MAAMq5C,UAA2Bl8C,EAAAA,cAO7BtE,YAAYsD,GACRyJ,MAAMzJ,GAPO,KAAAm9C,cAAoDn8C,EAAAA,YAEpD,KAAAo8C,YAA+Cp8C,EAAAA,YA8H/C,KAAAq8C,aAAe,KAC5B,MAAM,SAAEC,EAAQ,QAAE5oB,EAAO,aAAE6oB,EAAY,gBAAEC,EAAe,gBAAEC,EAAe,SAAEjxB,EAAQ,SAAEhc,EAAQ,SAAE2jC,GAAah3C,KAAK6C,OAC3G,aAAEyuB,EAAY,eAAEK,EAAc,wBAAE4uB,GAA4BvJ,EAE5DwJ,GAAajpB,GAAWlkB,EACxBotC,GAAalpB,GAAW4oB,GAAYE,GAAmBhxB,EAE7D,IAAKixB,IAAqBE,IAAcC,EACpC,OAAO,KAGXzgD,KAAK2C,QAAQc,cAAcC,MAAQy8C,EAAWh+B,EAAAA,kBAAkBu+B,KAAOv+B,EAAAA,kBAAkBw+B,aACzF,MAAMC,GAAoBh9C,EAAAA,EAAAA,wBAAuB5D,KAAK6C,MAAMG,iBAAmBhD,KAAK2C,SACpF3C,KAAK2C,QAAQc,cAAcC,MAAQye,EAAAA,kBAAkB0+B,OACrD,MAAMC,GAAsBl9C,EAAAA,EAAAA,wBAAuB5D,KAAK6C,MAAMG,iBAAmBhD,KAAK2C,SAEtF,OACIkB,EAAAA,cAAA,OAAKC,UAAU,mCACV08C,GACG38C,EAAAA,cAAC6H,EAAAA,OAAMzH,OAAAC,OAAA,CACHJ,UAAWw0B,GAAAA,CAAU,oCAAqC,CAAE,gBAAiB8nB,IAC7E76C,MAAO46C,EAAW7uB,EAAeivB,EACjCnnC,MAAM,UACNsR,SAAU01B,EACVv0C,QAASwH,GACLutC,GAEHT,GAAYE,EAAkB/uB,EAAeivB,GAGrDE,GACG58C,EAAAA,cAAC6H,EAAAA,OAAMzH,OAAAC,OAAA,CACHJ,UAAU,sCACVyB,MAAOosB,EACPvY,MAAM,YACNvN,QAASwjB,GACLyxB,GAEHnvB,KAOJ,KAAAovB,6BAA+B,KAC5C,MAAMC,EAAOhhD,KAAKigD,YAAY/yC,QAcxB+zC,EAAQD,GAAQA,EAAKE,eAAkBF,EAAKE,cAbvB,6dAc3BD,GAASA,EAAM7xC,OAAS6xC,EAAM7xC,SAGjB,KAAA+xC,kBAAoB,KAEjC,MAAMtoB,EACF74B,KAAKggD,eACLhgD,KAAKggD,cAAc9yC,SACnBlN,KAAKggD,cAAc9yC,QAAQkC,OAC1BpP,KAAKggD,cAAc9yC,QACxB2rB,GAAcA,EAAWzpB,SAGZ,KAAAgyC,cAAgB,KAE7B,MAAMC,EAAWrhD,KAAK6C,MAAMiW,UAAY9Y,KAAKigD,aAAejgD,KAAKigD,YAAY/yC,SAAYlN,KAAKigD,YAAY/yC,QAC1Gm0C,GAAYA,EAASC,kBAGR,KAAAC,SAAW,KACxB,MAAM,KAAEpe,EAAI,MAAE59B,GAAUvF,KAAK6C,OACrByiC,WAAYkc,EAAM,KAAI,KAAEp+C,EAAO,IAAOmC,GAAS,GACvD,OACI1B,EAAAA,cAAC29C,EAAG,CAAC19C,UAAU,kCACXD,EAAAA,cAAA,QAAMC,UAAU,uCACXq/B,EAAO,EAAC,KAAI,KAEhB//B,GAAQS,EAAAA,cAAA,QAAMC,UAAU,uCAAuCV,KAM3D,KAAAq+C,YAAe7/C,GACrB4Z,GAAAA,CAAI5Z,EAAM,0BAA4B,GAGhC,KAAA8/C,OAAU9/C,GAChB4Z,GAAAA,CAAI5Z,EAAM,OAAS,GA3N1B5B,KAAK2C,SAAUI,EAAAA,EAAAA,kBAAiB,QAASF,EAAMG,iBAAmB,IAG/DyO,mBAAmBkV,GAItB,MAAM,SAAEg7B,EAAQ,QAAEpqB,EAAO,OAAEqqB,EAAM,SAAEzB,EAAQ,OAAEhxB,EAAM,YAAE0yB,EAAW,SAAEC,EAAQ,YAAE5yB,EAAW,cAAEhqB,GAAkBlF,KAAK6C,MAG5G8+C,GAAYpqB,GACZqqB,IAmBJ,KAdoBj7B,EAAU4Q,SAAW5Q,EAAUw5B,YAAcx5B,EAAUwI,UAC3DoI,GAAW4oB,KAAchxB,KAErCnvB,KAAKmhD,oBACLnhD,KAAKohD,iBAKLz6B,EAAU4Q,UAAYA,GACtBv3B,KAAK+gD,+BAILc,GAAe38C,EAAe,CAC9B,MAAM68C,EAAkB/hD,KAAKyhD,YAAYK,GAGzC,GAAIC,EAAgBphD,OAAS,EACzB,IAAK,MAAMqhD,KAAeD,EAAiB,CACvC,MAAME,EAAUjiD,KAAK0hD,OAAOM,GACtBE,EAAahzB,MAAAA,OAAW,EAAXA,EAAaqd,UAAU0V,GAE1C,GAAIC,MAAAA,GAAAA,EAAYn/B,SAEZ,YADAo/B,EAAAA,EAAAA,IAAsBF,EAAS/8C,QAKvCoyB,EAAAA,EAAAA,IAAqBt3B,KAAKigD,YAAa/6C,IAK5C0M,SACH,MAAM,MACFrM,EAAK,SACLmlB,EAAQ,WACR3S,EAAU,SACV4pC,EAAQ,SACRxB,EAAQ,SACR2B,EAAQ,QACRvqB,EAAO,UACP6qB,EAAS,WACT5qB,EAAU,eACV6qB,EAAc,gBACd/B,EAAe,OACfnxB,EAAM,SACN6nB,GACAh3C,KAAK6C,OACH,eAAEy/C,GAAmBtL,EAE3Bh3C,KAAK2C,QAAQc,cAAcC,MAAQye,EAAAA,kBAAkBogC,eACrD,MAAMC,GAAsB5+C,EAAAA,EAAAA,wBAAuB5D,KAAK6C,MAAMG,iBAAmBhD,KAAK2C,SAChF8/C,EAAUnC,GAAmB/oB,GAAW4oB,GAAYhxB,EAE1D,OACItrB,EAAAA,cAAA,OACIC,UAAWw0B,GAAAA,CAAU,2BAA4B,CAC7CoqB,OAAQf,EACRgB,SAAU5qC,EACV6qC,QAAS7qC,EACT8qC,OAAQ1C,EACR2C,OAAQp4B,EACRq4B,YAAaV,EACb33B,SAAAA,EACAs4B,MAAOzrB,EACP0rB,QAASb,EACTc,SAAU1rB,IAEdlsB,IAAKtL,KAAKigD,aAEVp8C,EAAAA,cAAA,OAAKC,UAAU,mCACV9D,KAAKuhD,WAELkB,GACG5+C,EAAAA,cAAC6H,EAAAA,OAAMzH,OAAAC,OAAA,CACHkI,SAAUpM,KAAKggD,cACfl8C,UAAU,oCACVyB,MAAO+8C,EACPlpC,MAAM,OACNvN,QAASsjB,EACThc,KAAK,SAAQ,aACD5N,GAASA,EAAMnC,KAAO,GAAGk/C,KAAkB/8C,EAAMnC,OAAS,IAClEo/C,GAEHF,IAKbz+C,EAAAA,cAAA,OACIC,UAAWw0B,GAAAA,CAAU,gCAAiC,CAClDwqB,QAAS/qC,KAGblU,EAAAA,cAAA,OAAKC,UAAU,oCAAoCg+C,GAElD9hD,KAAKkgD,kBA6G1B,0ICrPA,MAAMiD,EAA4B,qBAQlC,IAAMC,EAAN,cAAiCv/C,EAAAA,cAAjCtE,cAAA,oBAgCW,KAAAkN,MAAkC,CACrC42C,YAAa,GA0FA,KAAAC,kBAAoB,KACjC,MACIp0B,aAAa,SAAEod,EAAQ,UAAEC,IACzBvsC,KAAK6C,MACT,OAAOypC,EAASt8B,QAAQiyC,IACpB,MAAMx1C,EAAQ8/B,EAAU0V,GACxB,QAASx1C,IAAUA,EAAM+7B,eAUhB,KAAA+a,mBAAqB,KAClC,MAAMjX,EAAqBtsC,KAAK6C,MAAM4C,MAAM9D,KAAKC,GAA0B4Z,GAAAA,CAAI5Z,EAAM,cAAaoO,OAAOwzC,SACzG,IAAIrhD,EAAa,GACjB,IAAK,IAAI8N,EAAI,EAAGA,EAAIq8B,EAAS3rC,OAAS,EAAGsP,IAAK,CAC1C,MAAMgyC,EAAU3V,EAASr8B,GACnBwzC,EAAcnX,EAASr8B,EAAI,GAC7BjQ,KAAK0jD,2BAA2BzB,IAAYwB,IAC5CthD,EAAKshD,GAGb,OAAOthD,GAQM,KAAAuhD,2BAA8Bp+C,IAA6B,IAAAq+C,EACxE,MAAMC,EAAe5jD,KAAK6C,MAAMqsB,YAAYqd,UAAUjnC,GAMtD,QALkC4S,EAAAA,gBAAgBC,YAEzB,QAFoCwrC,EAEzDC,EAAatX,gBAAQ,IAAAqX,OAAA,EAArBA,EAAuB3zC,QAAO6zC,GAAaA,MAAAA,OAAS,EAATA,EAAWn4B,SAASy3B,OAStD,KAAAW,QAAW3hD,GACjBnC,KAAKsjD,oBAAoB3+C,QAAQxC,GAG3B,KAAA4hD,MAASniD,GACf4Z,GAAAA,CAAI5Z,EAAM,aAAe,GAGnB,KAAAoiD,WAAcpiD,GACpB4Z,GAAAA,CAAI5Z,EAAM,yBAA2B,GAG/B,KAAAmW,WAAa,CAACorB,EAAc8gB,EAAuBhC,MAC5DjiD,KAAK6C,MAAM8O,cAIX3R,KAAK6C,MAAMssC,gDAAkD8U,IAAkBhC,IAG5E9e,GAAQ,GAAKA,GAAQnjC,KAAKyM,MAAM42C,aAG1B,KAAA1B,SAAYxe,GAClBA,IAASnjC,KAAKyM,MAAM42C,YAGd,KAAAlD,SAAYhd,GAClBA,GAAQ,GAAKA,EAAOnjC,KAAKyM,MAAM42C,YAGzB,KAAAzB,OAAS,KACtB5hD,KAAKgN,SAAS,CACVq2C,YAAarjD,KAAKyM,MAAM42C,YAAc,KA1MpC,qBACN,OACsC,IAAlCrjD,KAAK6C,MAAM0yC,qBACwB,IAAnCv1C,KAAK6C,MAAM2yC,sBAC0B,IAArCx1C,KAAK6C,MAAM4yC,wBACgC,IAA3Cz1C,KAAK6C,MAAM0sC,4BAQT,oBACN,IAAK,MAAM3tC,KAAQ5B,KAAK6C,MAAM4C,MAAO,CAAC,IAADy+C,EACjC,MAAMjC,EAAUjiD,KAAK+jD,MAAMniD,GACrB6K,EAAQzM,KAAK6C,MAAMqsB,YAAYqd,UAAU0V,GAO/C,IALkC/pC,EAAAA,gBAAgBC,YAEhC,QAF2C+rC,EAEzDz3C,EAAM6/B,gBAAQ,IAAA4X,OAAA,EAAdA,EAAgBl0C,QAAO6zC,GAAaA,MAAAA,OAAS,EAATA,EAAWn4B,SAASy3B,QAGzB12C,EAAM+7B,YAAc/7B,EAAMsW,SACzD,OAAO,EAIf,OAAO,EAOJxH,oBAIH,MAAM+wB,EAAWtsC,KAAK6C,MAAM4C,MAAM9D,KAAKC,GAA0B4Z,GAAAA,CAAI5Z,EAAM,cAC3E5B,KAAK6C,MAAMqsB,YAAYD,KAAK,CAAEqd,SAAAA,IAG3B16B,SACH,MAAM,YAAEsd,EAAW,MAAEzpB,EAAK,SAAEuxC,GAAah3C,KAAK6C,MAC9C,IAAK4C,IAAUypB,EACX,OAAO,KAGX,MAAMi1B,EACFnkD,KAAK6C,MAAMkyB,kCACX/0B,KAAK6C,MAAMssC,iDACVnvC,KAAK6C,MAAMkgB,WACX/iB,KAAKokD,iBACLpkD,KAAKqkD,cAEV,IAAIC,GAAyB,EAC7B,MAAMtC,EAAchiD,KAAKujD,qBACzB,OACI1/C,EAAAA,cAAA,OAAKC,UAAU,4BACV2B,EAAM9D,KAAKC,IAAyB,IAAA2iD,EACjC,MAAMtC,EAAUjiD,KAAK+jD,MAAMniD,GACrBuhC,EAAOnjC,KAAK8jD,QAAQ7B,GACpB18C,EAAQvF,KAAKgkD,WAAWpiD,GACxB6K,EAAQzM,KAAK6C,MAAMqsB,YAAYqd,UAAU0V,IACzC,QACF1qB,EAAO,UACP6qB,EAAS,WACT5qB,EAAU,WACVgR,EAAU,gBACV6X,EAAe,OACflxB,EAAM,SACNE,EAAQ,SACRhc,EAAQ,eACRm5B,EAAc,eACd6V,EAAc,SACdt/B,GACAtW,GAAU,GAEd,IAAIo1C,IACE7hD,KAAK6C,MAAMi0B,6CACX92B,KAAK6C,MAAMuwC,6BACZkR,GACDvhC,EAGJ,OAFAuhC,EAAyBA,GAA0BzC,EAG/Ch+C,EAAAA,cAAC2gD,EAAAA,EAAU,CACPriD,GAAInC,KAAK+jD,MAAMniD,GACfmC,IAAKk+C,EACL9e,KAAMA,EACN59B,MAAOA,EACPyxC,SAAUA,EACVtsB,UAAW8hB,GAAkBhE,EAC7BmZ,UAAWwC,GAA+BnkD,KAAK2hD,SAASxe,GACxDgd,UAAWgE,GAA+BnkD,KAAKmgD,SAAShd,GACxDprB,YAAaosC,GAA+BnkD,KAAK+X,WAAWorB,EAAM6e,EAAaC,GAC/E7B,aAAcgC,EACdtpC,SAAU9Y,KAAK6C,MAAMiW,SACrBspC,UAAWA,EACX5qB,WAAYA,EACZ6qB,eAAgBA,EAChB9qB,QAASA,EACT8oB,gBAAiBA,EACjBhtC,SAAUA,EACVgc,SAAUA,EACVF,OAAQA,EACRyyB,OAAQ5hD,KAAK4hD,OACbtB,iBAAkBtgD,KAAK6C,MAAMwxC,2BAA6BgO,EAC1Dr/C,iBAAkBhD,KAAK6C,MAAMG,iBAC7BksB,YAAaA,EACbhqB,cAAwC,QAA3Bq/C,EAAEvkD,KAAK6C,MAAM/B,sBAAc,IAAAyjD,OAAA,EAAzBA,EAA2Br/C,cAC1C28C,YAAaA,GAEZh+C,EAAAA,aAAmBjC,EAA4B,CAAE6iD,eAAe,YAlH/Er2B,EAAAA,EAAAA,IAAA,CAAT4K,EAAAA,IAAQ,oCAaC5K,EAAAA,EAAAA,IAAA,CAAT4K,EAAAA,IAAQ,kCAdPoqB,GAAkBh1B,EAAAA,EAAAA,IAAA,CADvBC,EAAAA,IACK+0B,GAgNN,gIClPA,MAAMsB,EAAiE,GASjEC,EAAsBA,CAACC,EAAiBtS,EAAwB9H,IAAoCrqC,WAClGykD,GAAWtS,IAGfoS,EAAc/iD,KAAIkjD,IACdA,GAAe,IACR,WAELra,MA+CV,EA5C2Ejc,IAStE,IATuE,gBACxE+mB,EAAe,cACfhD,EAAa,WACb9H,EAAU,iBACVxnC,EAAgB,+CAChBmsC,EAA8C,oBAC9C/F,EAAmB,yBACnB5T,EAAwB,iCACxBT,GACHxG,EACG,MAAOq2B,EAAQE,IAAaC,EAAAA,EAAAA,WAAS,GACrCL,EAAcxhD,KAAK4hD,GACnB,MAAMj/B,GAAU9iB,EAAAA,EAAAA,kBAAiB+iB,EAAAA,GAAek/B,SAAUhiD,EAAmBsyC,EAAiB,IACxFnpC,GAAavI,EAAAA,EAAAA,wBAAuBZ,EAAmB6iB,GAE7D,OAAIspB,GAAoD3Z,IAA4BT,EAgBhFlxB,IAAAA,cAAC6H,EAAAA,OAAMzH,OAAAC,OAAA,CACHJ,UAAW4O,GAAAA,CAAW,+BAAgC,CAAE,UAAWkyC,IACnExrC,MAAM,UACNvN,QAAS84C,EAAoBC,EAAQtS,EAAe9H,GACpDjlC,MAAO+vC,GACHnpC,EAAU,CACdue,UAAW4nB,GAAiBsS,IAE3BtP,GAtBDzxC,IAAAA,cAAC6H,EAAAA,OAAMzH,OAAAC,OAAA,CACHJ,UAAW4O,GAAAA,CAAW,+BAAgC,CAAE,UAAW02B,MAAAA,GAAAA,IACnEhwB,MAAM,UACNvN,QAAS2+B,EACTjlC,MAAO+vC,GACHnpC,EAAU,CACdue,UAAW4nB,GAAiBlJ,IAE3BkM,uKCzDV,MAAM9U,EAAa,CACtBykB,QAAS,IACTxkB,mBAAoB,IACpBykB,WAAY,IACZC,mBAAoB,sFCHxB,cACI5kD,EACAqyB,EACAwyB,EACAC,EACAhb,EACAtV,KAEOuwB,EAAAA,EAAAA,GAAW/kD,EAAKqyB,EAAewyB,EAAiBC,EAAUhb,EAAoBtV,yNC4CzF,MAAMsE,EAAkBC,GAAyCn5B,MAAAA,IAC7Du1B,EAAMvmB,uBACAmqB,KAQJC,EAAyBC,GAA6D9D,IACxF,MAAM3qB,GAAS2qB,EAAM5qB,OAAOC,OAAS,IAAIxH,QAAQ,IAAIC,OAAO,OAAQ,MAAO,IAC3Eg2B,EAAsBzuB,IAQpB0uB,EAAsBC,GAAuDhE,IAC/E,MAAM3qB,GAAS2qB,EAAM5qB,OAAOC,OAAS,IAAIxH,QAAQ,IAAIC,OAAO,OAAQ,MAAO,IAC3Ek2B,EAAmB3uB,IAQjB4uB,EAAsBC,GAAuDlE,IAC/E,MAAM3qB,GAAS2qB,EAAM5qB,OAAOC,OAAS,IAAIxH,QAAQ,IAAIC,OAAO,OAAQ,MAAO,IAC3Eo2B,EAAmB7uB,IAGV8uB,EAAWC,IACpB,MAAM,aACFtiB,EAAY,SACZuiB,EAAQ,YACRC,EAAW,YACXC,EAAW,eACXC,EAAc,YACdC,EAAW,YACXC,EAAW,sBACXZ,EAAqB,mBACrBE,EAAkB,mBAClBE,EAAkB,gBAClBN,EAAe,wBACfe,EAAuB,iBACvBC,EACAn1B,WAAW,mBACPogD,EAAkB,kBAClB9qB,EAAiB,oBACjBC,EAAmB,iBACnBC,EAAgB,iBAChBC,EAAgB,mBAChBC,EAAkB,2BAClBC,EAA0B,2BAC1BC,IAEJjB,EAEEkB,EAAY,CACdl3B,UAAW4O,GAAAA,CAAW,mCAAoC,CAAE,eAAgB8E,IAC5EnE,SAAUgmB,EAAeC,GACzBhzB,IAAK,QAGHqF,EACF9H,EAAAA,cAAA,SAAO1B,GAAG,oCAAoC2B,UAAU,2CACnD22B,GAIHQ,EACFp3B,EAAAA,cAAA,SAAO1B,GAAG,8CAA8C2B,UAAU,+CAC7D62B,GAIHO,EACFr3B,EAAAA,cAAA,SAAO1B,GAAG,8CAA8C2B,UAAU,+CAC7D82B,GAIHO,EACFt3B,EAAAA,cAAA,SAAO1B,GAAG,0CAA0C2B,UAAU,iDACzD+2B,GAIH/C,EACFj0B,EAAAA,cAACsV,EAAAA,MAAK,CACF7S,IAAI,OACJnE,GAAG,oCACH2B,UAAU,0CACVqP,KAAK,QACLioB,WAAW,EACXC,MAAM,EACNC,mBAAmB,EACnBzjB,SAAUL,GAETA,GAoBH+jB,EACF13B,EAAAA,cAAA,SACIyH,IAAKyuB,EACL5uB,KAAK,OACLrH,UAAU,sDAAqD,aACnD42B,EACZnvB,SAAUguB,EAAsBC,GAChCzuB,MAAOmvB,EAAc,kBACL,wEAIlBsB,EACF33B,EAAAA,cAAA,SACIyH,IAAK0uB,EACL7uB,KAAK,OACLrH,UAAU,yDAAwD,aACtD62B,EACZtvB,YAAayvB,EACbvvB,SAAUkuB,EAAmBC,GAC7B3uB,MAAOovB,EAAW,kBACF,wEAIlBsB,EACF53B,EAAAA,cAAA,SACIyH,IAAK2uB,EACL9uB,KAAK,OACLrH,UAAU,yDAAwD,aACtD82B,EACZvvB,YAAa0vB,EACbxvB,SAAUouB,EAAmBC,GAC7B7uB,MAAOqvB,EAAW,kBACF,wEAIlBsB,EACF73B,EAAAA,cAAC6H,EAAAA,OAAM,CACH5H,UAAU,wCACV+H,QAASwtB,EAAeC,GAAgB,aAC5BisB,EACZ76B,UAAWwP,GAEVqrB,GAIT,IAAI5pB,GAAuB,EACvBC,GAAuB,EAE3B,OAAQtB,GACJ,IAAI,MACAqB,GAAuB,EACvB,MACJ,IAAI,iBACAC,GAAuB,EACvB,MACJ,IAAI,uBACAD,GAAuB,EACvBC,GAAuB,EAK/B,MAAO,CACHZ,UAAAA,EACArvB,MAAAA,EACAsvB,cAAAA,EACAC,cAAAA,EACApD,MAAAA,EACA+D,WAxFe,CACf/3B,UAAW,4CAwFXg4B,cArFkB,CAClBh4B,UAAW,gDAqFXi4B,cAlFkB,CAClBj4B,UAAW,gDAkFXk4B,cA/EkB,CAClBl4B,UAAW,gDA+EXy3B,YAAAA,EACAC,SAAAA,EACAC,SAAAA,EACAC,YAAAA,EACArB,wBAAAA,EACAsB,qBAAAA,EACAC,qBAAAA,EACAT,gBAAAA,ICzOKkB,EAAU9N,IAII,IAJH,SACpB4N,EAAQ,kBACRG,EACAn3B,WAAW,qBAAEq3B,EAAoB,8BAAEC,IACvBlO,EACZ,MAAMoO,EAAUL,EAAkBH,EAASS,QAAST,EAASU,kBACvDC,GAAsBX,EAASn4B,IAAM,IAAI+4B,QAAQ,GAMjDC,EACFn5B,EAAAA,cAAA,QAAMC,UAAU,yCACX04B,EACA,IACAM,EACA,IAAG,IAAGL,EACN,IACD54B,EAAAA,cAAA,QAAMC,UAAU,uCAAuC64B,GAAe,KAI9E,MAAO,CACHO,UAhBc,CACdp5B,UAAW,oCAgBX3B,GAAIg6B,GAAYA,EAASn4B,GACzBg5B,iBAAAA,ykBC1BR,IAAKM,GAAL,SAAKA,GACDA,EAAA,oBACAA,EAAA,oBACAA,EAAA,YAHJ,CAAKA,IAAAA,EAAqB,KA2BnB,MAAMkoB,UAA6B3hD,EAAAA,UAA1CtE,cAAA,IAAAi+B,EAAA,2BACW,KAAA/wB,MAAoC,CACvCgxB,oBAAoB,EACpBjmB,aAAc,GACd0iB,eAAgB,GAChBC,YAAa,GACbC,YAAa,IAGA,KAAAL,SAA8Cl2B,EAAAA,YAE9C,KAAAm2B,YAAiDn2B,EAAAA,YAEjD,KAAAo2B,YAAiDp2B,EAAAA,YAkEjD,KAAA4hD,WAAa,OAErBzlD,KAAK6C,MAAMoC,QAAQiC,QAAQqgB,KAAKC,iBACjCxnB,KAAK6C,MAAMoC,QAAQiK,IAAI9H,OAAO22B,oBAAsBT,EAAsBU,WACzEh+B,KAAK6C,MAAMuE,OAAO62B,yBAOV,KAAAynB,mBAAqB,WAA4D,IAA3D5/C,EAAAqW,UAAAxb,OAAA,QAAA+F,IAAAyV,UAAA,GAAAA,UAAA,GAAgB,EAAGqU,EAAArU,UAAAxb,OAAA,QAAA+F,IAAAyV,UAAA,GAAAA,UAAA,GAAuB,MAC7E,OAAOqhB,EAAK36B,MAAMoC,QAAQ6kB,iBAAiBC,eAAejkB,EAAO0qB,IAGpD,KAAAm1B,qBAAwBzrB,IACrCl6B,KAAKgN,SAAS,CACVktB,eAAAA,IAEJl6B,KAAKikC,eAGQ,KAAA2hB,kBAAqBzrB,IAClCn6B,KAAKgN,SAAS,CACVmtB,YAAAA,IAEJn6B,KAAKikC,eAGQ,KAAA4hB,kBAAqBzrB,IAClCp6B,KAAKgN,SAAS,CACVotB,YAAAA,IAEJp6B,KAAKikC,eAGQ,KAAAA,YAAc,KAC3BjkC,KAAKgN,SAAS,CACVwK,aAAc,MAIL,KAAAsuC,UAAatuC,IAC1BxX,KAAK6C,MAAMb,UAAUC,MAAM,QAASuV,GACpCxX,KAAK6C,MAAMb,UAAUuM,MAAM,QAASiJ,GACpCxX,KAAKgN,SAAS,CACVwK,aAAAA,KAIS,KAAAuuC,eAAiB5lD,UAC9B,GAAIH,KAAKyM,MAAMgxB,mBACX,OAEJz9B,KAAKgN,SAAS,CACVywB,oBAAoB,IAGxB,MAAMvD,EAAiBl6B,KAAKyM,MAAMytB,eAAevH,OAC3CwH,EAAcn6B,KAAKyM,MAAM0tB,YAAYxH,OACrCyH,EAAcp6B,KAAKyM,MAAM2tB,YAAYzH,OAErC8L,QAAsBz+B,KAAKgmD,kBAAkB9rB,GAC7CyE,EAAeF,GAAiBA,EAAc,GAC9CG,EAAgBD,GAAgBA,EAAaE,cAC7CC,EAAgBH,GAAgBA,EAAaI,yBAC7CC,EAAeL,GAAgBA,EAAaM,gBAC5C9C,QAAiBn8B,KAAKimD,aAAa/rB,EAAgBC,EAAaC,EAAawE,EAAeE,EAAeE,GAEjH,GAAI7C,EASA,OARAn8B,KAAKikC,cACLjkC,KAAKgN,SAAS,CACVktB,eAAgB,GAChBC,YAAa,GACbC,YAAa,GACbqD,oBAAoB,EACpBtB,SAAAA,IAEG55B,QAAQga,UAEnB,MAAMlc,EAAQL,KAAK+5B,UAAY/5B,KAAK+5B,SAAS7sB,SAAWlN,KAAK+5B,SAAS7sB,QAAQkC,OAAUpP,KAAK+5B,SAAS7sB,QACtG7M,GAASA,EAAM+O,QACfpP,KAAKgN,SAAS,CACVywB,oBAAoB,EACpBtB,cAAUz1B,KAID,KAAAw/C,yBAA2B,CACxC1mB,EACAC,EACAC,KAEA,IAAIC,EAEJ,OAAQD,GACJ,KAAKpC,EAAsBsC,SACvBD,EAAqBH,EAAYxvB,QAC7B6vB,GAAcA,EAAWC,cAAgBL,GAA0C,KAA3BI,EAAWE,cAEvE,MACJ,KAAKzC,EAAsBU,SACvB2B,EAAqBH,EAAYxvB,QAC7B6vB,GAAcA,EAAWC,cAAgBL,GAA0C,KAA3BI,EAAWE,cAEvE,MACJ,QACI,MAAM,IAAI19B,MAAM,0BAGxB,GAAIs9B,EACA,OAAOA,EAAmBh+B,KAAIk+B,GAAcA,EAAWP,cAAgB,MAK9D,KAAA2mB,aAAe9lD,MAC5B+5B,EACAC,EACAC,EACAwE,EACAE,EACAE,KAEA,MACI75B,WAAW,qBAAE+6B,EAAoB,eAAEF,EAAc,qBAAEC,EAAoB,eAAEE,EAAc,eAAEC,IACzFpgC,KAAK6C,MAEHw9B,EAAwBrgC,KAAK6C,MAAMoC,QAAQiK,IAAI9H,OAAO22B,kBAE5D,IAAKiB,EACD,OAGJ,MAAMQ,QAAoBc,EAAAA,EAAAA,qBAAoB,CAAE/+B,cAAevB,KAAK6C,MAAMoC,QAAQC,cAAe1D,oBAAqB,KAAM6M,OACxHpM,IACI,MAAMA,KAId,IAAKu9B,EACD,MAAM,IAAIn9B,MAAM,qCAGpB,MAAMk+B,EAA8BvgC,KAAKkmD,yBACrC1mB,EACAgB,EAAAA,WAAWC,mBACXnD,EAAsBsC,UAEpBc,EAA8B1gC,KAAKkmD,yBACrC1mB,EACAgB,EAAAA,WAAWC,mBACXnD,EAAsBU,UAG1B,OAAQqC,GACJ,UAAK35B,EACL,KAAK42B,EAAsBsC,SACvB,GAAKW,MAAAA,IAAAA,EAA6B7U,SAASsT,GAEvC,YADAh/B,KAAK8lD,UAAU5lB,GAGnB,MACJ,KAAK5C,EAAsBU,SACvB,GAAK0C,MAAAA,IAAAA,EAA6BhV,SAASsT,GAEvC,YADAh/B,KAAK8lD,UAAU5lB,GAGnB,MACJ,KAAK5C,EAAsBqD,KACvB,KAAKJ,MAAAA,GAAAA,EAA6B7U,SAASsT,IAAkB0B,MAAAA,GAAAA,EAA6BhV,SAASsT,IAE/F,YADAh/B,KAAK8lD,UAAU5lB,GAGnB,MACJ,QACI,MAAM,IAAI79B,MAAM,8BAGxB,IAAKrC,KAAK6C,MAAMoC,QAAQiC,QAAQqgB,KAAKC,iBAAjC,MAAoD+Y,GAAAA,EAA6B7U,SAASsT,GAE1F,YADAh/B,KAAK8lD,UAAU5lB,GAInB,GAAItB,GAAiC,KAAhBzE,EAEjB,YADAn6B,KAAK8lD,UAAU3lB,GAInB,GAAIrB,GAAiC,KAAhB1E,EAEjB,YADAp6B,KAAK8lD,UAAU1lB,GAInB,MAAMQ,EAAQC,OAAOz3B,SAASgxB,EAAY5xB,MAAM,KAAK,GAAI,IACnDs4B,EAAOD,OAAOz3B,SAASgxB,EAAY5xB,MAAM,KAAK,GAAI,IAExD,OAAOu4B,EAAAA,EAAAA,kBAAiB,CAAEx/B,cAAevB,KAAK6C,MAAMoC,QAAQC,eAAiBg1B,EAAgB8E,EAAc7E,EAAayG,EAAOE,GAC1Hr+B,MAAKu+B,IACF,GAAKA,EAAepE,SAAsC,IAA3BoE,EAAepE,QAI9C,OAAOoE,EAHHhhC,KAAK8lD,UAAU9lB,MAKtB3xB,OAAMpM,IACHjC,KAAK8lD,UAAU7lB,OAKV,KAAA+lB,kBAAoB7lD,MAAAA,IACjC,MACIgF,WAAW,gBAAE87B,EAAe,iBAAEE,IAC9BnhC,KAAK6C,MAET,GAAKq3B,EAKL,OAAOmH,EAAAA,EAAAA,uBAAsB,CAAE9/B,cAAevB,KAAK6C,MAAMoC,QAAQC,eAAiBg1B,EAAgBoH,EAAAA,SAASC,UACtG9+B,MAAKg8B,IACF,GAAKA,GAA0C,IAAzBA,EAAc99B,aAAqC+F,IAArB+3B,EAAc,GAIlE,OAAOA,EAHHz+B,KAAK8lD,UAAU3kB,MAKtB9yB,OAAMpM,IACHjC,KAAK8lD,UAAU3kB,MAbnBnhC,KAAK8lD,UAAU7kB,IAzRhBra,sBAAsBC,EAA6CC,GACtE,OAAI9mB,KAAKyM,QAAUqa,GAAa9mB,KAAK6C,MAAMkE,OAAS8f,EAAU9f,KAM3D6K,SACH,MACIxK,QAAQ,UAAEtD,EAAS,qBAAEg+B,GAAsB,UAC3C38B,GACAnF,KAAK6C,OACH,aAAE2U,EAAY,eAAE0iB,EAAc,YAAEC,EAAW,YAAEC,GAAgBp6B,KAAKyM,MAElE4zB,EAAwBrgC,KAAK6C,MAAMoC,QAAQiK,IAAI9H,OAAO22B,kBAE5D,IAAK/9B,KAAKylD,aAEN,OADAzlD,KAAK6C,MAAMoC,QAAQjD,UAAUC,MAAM,gEAC5B,KAGX,MAAMo4B,EAA0BgG,IAA0B/C,EAAsBsC,SAE1EsC,EAAkB5J,GAAAA,CAAU,6BAA8Bx0B,GAE1D0O,EAAShM,EAAAA,EAAAA,EAAA,GACRxG,KAAK6C,OACL7C,KAAKyM,OAAK,IACb3I,UAAWo+B,EACXikB,0BAA2B,CAAE1zC,YAAazS,KAAK6C,MAAOiB,UAAWo+B,GAEjE9D,oBAAqBp+B,KAAK2lD,qBAC1BtnB,iBAAkBr+B,KAAK4lD,kBACvBtnB,iBAAkBt+B,KAAK6lD,kBACvBrnB,cAAex+B,KAAK+lD,eAEpBtyC,KAAMomB,EAAQ,CACVriB,aAAAA,EACA0iB,eAAAA,EACAC,YAAAA,EACAC,YAAAA,EACAL,SAAU/5B,KAAK+5B,SACfC,YAAah6B,KAAKg6B,YAClBC,YAAaj6B,KAAKi6B,YAClB90B,UAAAA,EACAk1B,wBAAAA,EACAC,iBAAkBwH,EAClBtI,sBAAuBx5B,KAAK2lD,qBAC5BjsB,mBAAoB15B,KAAK4lD,kBACzBhsB,mBAAoB55B,KAAK6lD,kBACzBvsB,gBAAiBt5B,KAAK+lD,iBAE1BnkD,KACI5B,KAAKyM,MAAM0vB,UACXE,EAAQ,CACJF,SAAUn8B,KAAKyM,MAAM0vB,SACrBG,kBAAmBt8B,KAAK0lD,mBACxBvgD,UAAAA,MAIZ,OAAOnF,KAAK6C,MAAMiR,WAAWtB,IA+OrC,wHC/WO,MAAM4zC,EAAwB73B,IAAA,IAAC,UAClCyM,EAAS,MACTrvB,EAAK,cACLsvB,EAAa,cACbC,EAAa,MACbpD,EAAK,WACL+D,EAAU,cACVC,EAAa,cACbC,EAAa,cACbC,EAAa,YACbT,EAAW,SACXC,EAAQ,SACRC,EAAQ,YACRC,EAAW,wBACXrB,EAAuB,qBACvBsB,EAAoB,qBACpBC,EAAoB,gBACpBT,GACH5M,EAAA,OACG1qB,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK82B,GACLlD,EACAuC,EACGx2B,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK23B,GACNh4B,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK43B,GACLnwB,EACA4vB,GAEJI,GACG93B,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK63B,GACLd,EACAO,GAGRI,GACG/3B,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK83B,GACLd,EACAO,IAGPE,GAAwBC,IAAyBT,GAGvDt3B,EAAAA,cAAAA,EAAAA,SAAA,KACK8H,EACA4vB,GAGRG,IAII2qB,EAAwBjtB,IAAA,IAAC,UAAE8D,EAAS,iBAAEF,GAAkB5D,EAAA,OAAKv1B,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKg5B,GAAYF,IAYhG,EAV2En6B,IACvE,MAAM,0BAAEsjD,EAAyB,KAAE1yC,EAAI,KAAE7R,GAASiB,EAClD,OACIgB,EAAAA,cAACwQ,EAAAA,OAAMpQ,OAAAC,OAAA,GAAKiiD,GACP1yC,GAAQ5P,EAAAA,cAACuiD,EAAIniD,OAAAC,OAAA,GAAKuP,IAClB7R,GAAQiC,EAAAA,cAACwiD,EAAIpiD,OAAAC,OAAA,GAAKtC,6ICsK/B,MAAM0kD,EAAmDzjD,IACrD,MAAM3B,EAAY2B,EAAMkE,KAAKgY,SAAS9d,UAGtC,IAFA+Y,EAAAA,EAAAA,mBAAkB9Y,IAEb2B,EAAMoC,QAAQiC,QAAQqgB,KAAKg/B,QAAUrlD,IAAcgX,EAAAA,gBAAgBC,YAAYtV,EAAMkE,KAAKmc,UAC3F,OAAO,KAGX,MAAMsjC,EAAU3jD,EAAMkE,KAAKmc,SAASpa,MAAKlH,GAAQA,EAAK6b,WAAavc,IAEnE,OAAKslD,GAAYA,EAAQ3sC,KAIlBhW,EAAAA,cAAA,OAAKC,UAAU,gCAAgC0iD,EAAQ3sC,MAHnD,MAMT4sC,EACuBC,CAACx2C,EAAwBy2C,IACzCz2C,GAAYA,EAAQ02C,WAIlB12C,EAAQ02C,WAAWjlD,KAAIklD,GACkB,IAAxCA,EAAiBC,mBAEbjjD,EAAAA,cAAA,OAAKE,IAAK,GAAGmM,EAAQuN,6BAA8B3Z,UAAU,uCACzDD,EAAAA,cAAA,QAAMC,UAAU,wCACX6iD,EAAiBv6B,YAAW,IAC7BvoB,EAAAA,cAAA,QAAMC,UAAU,QAAQ+iD,EAAiBE,gBAAkBF,EAAiBE,eAAezjD,SAM/D,IAAxCujD,EAAiBC,mBAEbjjD,EAAAA,cAAA,OAAKE,IAAK,GAAGmM,EAAQuN,6BAA8B3Z,UAAU,uCACzDD,EAAAA,cAAA,QAAMC,UAAU,wCACX6iD,EAAiBr6B,aAAY,IAC9BzoB,EAAAA,cAAA,QAAMC,UAAU,QAAQ+iD,EAAiBE,gBAAkBF,EAAiBE,eAAezjD,SAM/D,IAAxCujD,EAAiBC,mBAEbjjD,EAAAA,cAAA,OAAKE,IAAK,GAAGmM,EAAQuN,6BAA8B3Z,UAAU,uCACzDD,EAAAA,cAAA,QAAMC,UAAU,uCACX6iD,EAAiBz6B,WAAU,IAC5BroB,EAAAA,cAAA,QAAMC,UAAU,QAAQ+iD,EAAiBE,gBAAkBF,EAAiBE,eAAezjD,SAM/D,IAAxCujD,EAAiBC,mBAEbjjD,EAAAA,cAAA,OAAKE,IAAK,GAAGmM,EAAQuN,6BAA8B3Z,UAAU,uCACzDD,EAAAA,cAAA,QAAMC,UAAU,wCACXoM,EAAQ82C,WAAaL,EAAiBtL,aAAesL,EAAiBn6B,YAAW,IAClF3oB,EAAAA,cAAA,QAAMC,UAAU,QAAQ+iD,EAAiBE,gBAAkBF,EAAiBE,eAAezjD,SAKpG,OA/CA,GAHbmjD,EAsDoB5jD,GACbA,EAAMkE,KAAKgY,SAASkoC,eAA8D,IAA7CpkD,EAAMkE,KAAKgY,SAASkoC,cAActmD,OAIrEkC,EAAMkE,KAAKgY,SAASkoC,cAActlD,KAAI,CAACulD,EAAct4C,IAEpD/K,EAAAA,cAAA,OAAKE,IAAKmjD,EAAaC,SAAWv4C,EAAO9K,UAAU,uCAC/CD,EAAAA,cAAA,YACKqjD,EAAaE,UAAYF,EAAaE,UAAY,GAAE,IAAG,IAAIvkD,EAAMsC,UAAU2nB,oBAAsB,eAEtGjpB,EAAAA,cAAA,QAAMC,UAAU,yCACZD,EAAAA,cAACgD,EAAAA,eAAc,CACXE,KACIlE,EAAMwkD,YACA,CACIvhD,MAAO,CAEHkB,wBAAyBnE,EAAMkE,KAAKgY,SAASuoC,mBAGrD,CACIxhD,MAAO,CACHkB,wBAAyBkgD,EAAaK,gBACtCtgD,UAAWigD,EAAaK,kBAI1CtiD,QAASpC,EAAMoC,QACf9C,GAAIU,EAAMV,GACV2E,SAAUjE,EAAMiE,SAChB0pB,aAAc3tB,EAAMy4C,iBAG5Bz3C,EAAAA,cAAA,YAAO,UAA0C6C,IAArCwgD,EAAaM,oBAAoCN,EAAaM,oBAAsB,WAhCjG,KAxDbf,EA6FqB5jD,IACnB,IAAKA,EAAM4kD,0BACP,OAAO,KAEX,MAAMC,EAAmB7kD,EAAM8kD,wBACzB,0CAA0C9kD,EAAM8kD,0BAChD,yCACN,OAAO9jD,EAAAA,cAAA,QAAMC,UAAW4jD,GAAmB7kD,EAAM4kD,4BApGnDhB,EA4GoB5jD,IAClB,GAAIA,EAAMkE,KAAKgY,SAAS6oC,cACpB,OAAO,KAIX,IAAK/kD,EAAMoC,QAAQiK,IAAI9H,OAAOygD,0BAAkF,SAAtDhlD,EAAMoC,QAAQiK,IAAI9H,OAAOygD,yBAC/E,OAGJ,MAAMrqC,EAAU3a,EAAMkE,KAAKyW,QAC3B,OAAKA,GAAYA,EAAQsqC,qBAKrBjkD,EAAAA,cAAA,OAAKC,UAAU,yCACXD,EAAAA,cAAA,YAAO2Z,EAAQsqC,4BANvB,GAvHFrB,EAiIoB5jD,IAAyB,IAAAklD,EAC3C,MAAMz6B,EAAsD,QAAhCy6B,EAAGllD,EAAMoC,QAAQiC,QAAQmhB,eAAO,IAAA0/B,OAAA,EAA7BA,EAA+Bn8B,uBACxDnI,EAA8B5gB,EAAM4gB,4BACpCjD,EAAW3d,EAAMkE,KAAKgY,SAC5B,IAAIipC,GAAoB,EACwB,IAADhM,OAAXt1C,IAAhC+c,EACAukC,KACIxnC,EAASX,cAC0C,QAD9Bm8B,EACrBv4B,EAA4BgQ,+BAAuB,IAAAuoB,IAAnDA,EAAqDpzB,MAAKoH,GAAgBA,IAAiBxP,EAASX,gBAGxGmoC,KAAuBxnC,EAASX,cAAgBW,EAASX,eAAiByN,GAE9E,IAAK06B,EACD,OAGJ,MAAMC,GAAuBznC,EAAS0nC,aAAe,IAAIl4C,QAAOm4C,GAAcA,EAAWC,aAEzF,GAAmC,IAA/BH,EAAoBtnD,OACpB,OAGJ,MAAM0nD,EAAaJ,EAAoBvmB,QAAO,CAAC4mB,EAAaH,IACjDG,GAAeH,EAAWI,kBAAoB,IACtD,GAEGC,EACF3kD,EAAAA,cAACgD,EAAAA,eAAc,CACXE,KAAM,CACFjB,MAAO,CACHkB,wBAAyBqhD,IAGjC93B,cAAc,OACdtrB,QAASpC,EAAMoC,QACf9C,GAAIU,EAAMV,GACV2E,SAAUjE,EAAMiE,SAChBhD,UAAU,gCACV0sB,aAAc3tB,EAAMy4C,gBAG5B,OACIz3C,EAAAA,cAAAA,EAAAA,SAAA,KACIA,EAAAA,cAAA,SAAOC,UAAU,gCAAgC,GAAGjB,EAAMsC,UAAU8nB,wBACpEppB,EAAAA,cAAA,QAAMC,UAAU,kBAAkB0kD,KA9K5C/B,EAkLmB5jD,IAAyB,IAAA4lD,EAC1C,MACMtJ,EAAmC,QAAvBsJ,EADD5lD,EAAMkE,KAAKgY,SACEmpC,mBAAW,IAAAO,OAAA,EAApBA,EAAsBz4C,QAAO04C,IAAeA,EAAWN,aAE5E,OACKjJ,GACGA,EAAax9C,KAAI,CAACm4C,EAAa/1C,IACpB+1C,GAAeA,EAAYyO,iBAC9B1kD,EAAAA,cAAA,OAAKC,UAAU,+BAA+BC,IAAKA,GAC/CF,EAAAA,cAAA,SAAOC,UAAU,sCAAsC,GAAGg2C,EAAYh6B,gBACtEjc,EAAAA,cAAA,QAAMC,UAAU,sBACZD,EAAAA,cAACgD,EAAAA,eAAc,CACXE,KAAM,CACFjB,MAAO,CACHkB,wBAAyB8yC,EAAYyO,mBAG7CtjD,QAASpC,EAAMoC,QACf9C,GAAIU,EAAMV,GACV2E,SAAUjE,EAAMiE,SAChBhD,UAAU,sCACV0sB,aAAc3tB,EAAMy4C,kBAKhC,WAGZ50C,GA/MN+/C,EAwN2B5jD,GAC8B,IAAnDA,EAAMkE,KAAKgY,SAAS4pC,2BACb,KAEJ9kD,EAAAA,cAAA,OAAKC,UAAU,yCAAyCjB,EAAMsC,UAAUynB,2BA4OvF,EAvO4C/pB,IAAyB,IAAA+lD,EAAAC,EACjE,MAAM,YAAExB,EAAW,WAAE/kC,EAAU,UAAEnd,GAActC,GACzC,QAAE2a,EAAO,SAAEuB,GAAalc,EAAMkE,KAE9B+hD,EAA2B,CAC7B58B,WAAY/mB,EAAU+mB,WACtBE,YAAajnB,EAAUinB,YACvBI,YAAarnB,EAAUqnB,YACvBF,aAAcnnB,EAAUmnB,aACxB+uB,aAAcl2C,EAAUk2C,cAGtB0N,EACFvrC,IACAwrC,EAAAA,EAAAA,qBACIxrC,EAAQyrC,OACRpmD,EAAMoC,QAAQC,cAAcpE,eAAeC,YAClB,QAD6B6nD,EACtD/lD,EAAMoC,QAAQiC,QAAQgI,WAAG,IAAA05C,GAAQ,QAARA,EAAzBA,EAA2BxhD,cAAM,IAAAwhD,OAAA,EAAjCA,EAAmCM,kBAErC9wC,EAAoBoF,GAAWipC,EAA8CjpC,EAASsrC,GACtFzhD,EAAgBxE,EAAMwE,cACxBA,IACAA,EAAcC,iBAAkB,GAEpC,MAAM6hD,EAAqB1C,EAA0C5jD,GAC/DumD,EAAuB3C,EAA2C5jD,GAClEwmD,EAAsB5C,EAA0C5jD,GAChEymD,EAAsB7C,EAA0C5jD,GAChE0mD,EAAqB9C,EAAyC5jD,GAC9D2mD,EAA6B/C,EAAiD5jD,GAC9EF,GAAUI,EAAAA,EAAAA,kBAAiB,QAASF,EAAMG,iBAAmB,GAAIwa,MAAAA,OAAO,EAAPA,EAASC,SAASM,YACnF0rC,GAAmB7lD,EAAAA,EAAAA,wBAAuBf,EAAMG,iBAAmBL,GACnE+mD,GAAclsC,MAAAA,OAAO,EAAPA,EAAS3D,OAAQkF,EAASe,YACxC6pC,EAAgB9mD,EAAMkE,KAAKgY,SAAS6oC,cAAgB,+BAAiC,+BAErFr8C,EAAYq+C,IACV/mD,EAAMgnD,kBACChnD,EAAMgnD,iBAAiBhnD,EAAMkE,KAAKgY,SAAU6qC,EAAU/mD,EAAMinD,WAsH3E,OACIjmD,EAAAA,cAAAA,EAAAA,SAAA,KACIA,EAAAA,cAAA,OAAKC,UAAU,iBACXD,EAAAA,cAAA,OAAKC,UAAW6lD,GACZ9lD,EAAAA,cAACmE,EAAAA,GAAK,CACFlH,eAAgB+B,EAAMoC,QAAQC,cAAcpE,eAC5CmH,IAA0B,QAAvB4gD,EAAEhmD,EAAMygB,uBAAe,IAAAulC,EAAAA,EAAI,QAC9BkB,YAAahB,EACbpjD,QAAS+jD,EACTviD,aAActE,EAAMsE,aACpBE,cAAeA,EACfa,oBAAoB,WAG5BrE,EAAAA,cAAA,OAAKC,UAAU,0BACXD,EAAAA,cAAA,OAAKC,UAAU,0BACXD,EAAAA,cAACyiD,EAAqBriD,OAAAC,OAAA,GAAKrB,IAC1B2f,EAAAA,GAASC,UACN5e,EAAAA,cAAA,IAAAI,OAAAC,OAAA,CAAGJ,UAAU,gCAAmC2lD,EAAgB,CAAEtlD,KAAMme,EAAYve,IAAKue,IACpFonC,GAEL,KACHxxC,EAAAA,gBAAgBC,YAAYC,GACzBvU,EAAAA,cAAA,OAAKC,UAAU,mCAAmCsU,GAElD,GAEHixC,EACDxlD,EAAAA,cAAA,OAAKC,UAAU,gCACXD,EAAAA,cAACgD,EAAAA,eAAc,CACXE,KACIsgD,EACM,CACIvhD,MAAO,CACHkB,wBAA0BnE,EAAMkE,KAAKgY,SAAuBirC,6BAC5D/iD,UAAYpE,EAAMkE,KAAKgY,SAAuBkrC,cAGtD,CACInkD,MAAO,CACHkB,wBAA0BnE,EAAMkE,KAAKgY,SAAsBmrC,cAC3DjjD,UAAWpE,EAAMkE,KAAKgY,SAASorC,WAIjDllD,QAASpC,EAAMoC,QACf9C,GAAIU,EAAMV,GACV2E,SAAUjE,EAAMiE,SAChBhD,UAAU,iBACVsmD,qBAAsBvnD,EAAMkE,KAAKgY,SAAS4pC,2BAC1Cn4B,aAAc3tB,EAAMy4C,iBAG3B6N,EACAC,EACAvmD,EAAMo4C,iCAAmCp3C,EAAAA,cAAA,OAAKC,UAAU,0BAA0BwlD,GAClFC,EACAC,GA7Jaa,MAC9B,MAAMC,EAAQ,GACd,OAAIznD,EAAMugB,aACC,MAINvgB,EAAMkE,KAAKgY,SAAS6oC,gBACjB/kD,EAAMkE,KAAKyW,SAAW3a,EAAMwgB,mBAC5BinC,EAAMpnD,KACFW,EAAAA,cAAA,OAAKC,UAAU,mCACXD,EAAAA,cAAA,OAAKC,UAAU,yCAAyCqB,EAAUunB,uBAClE7oB,EAAAA,cAAC0mD,EAAAA,oBAAmB,CAChBpoD,GAAI,2BAA2BU,EAAMkE,KAAKyW,QAAQC,YAAY5a,EAAMkE,KAAKgY,SAASc,gBAAgBhd,EAAMkE,KAAKgY,SAASjB,SACtHolB,IAAKrgC,EAAM0e,aAAe,GAC1BipC,aAAc3nD,EAAMsgB,gBACpB5X,SAAUA,EACVshB,uBAAwB1nB,EAAU0nB,uBAClC49B,yBAA0BtlD,EAAUslD,yBACpCC,yBAA0BvlD,EAAUulD,yBACpC3mD,IAAKlB,EAAMkE,KAAKgY,SAASjB,OACzB4M,UAAW7nB,EAAM8nD,iBACjBC,WAAY/nD,EAAMkE,KAAKyW,QAAQwpC,WAC/BhkD,iBAAkBH,EAAMG,qBAKpCsnD,EAAMpnD,KACFW,EAAAA,cAAA,OAAKC,UAAW+mD,GAAAA,CAAW,0BAA2B,CAAE,kBAAoD,IAAjChoD,EAAMkE,KAAKgY,SAASiE,YAC3Fnf,EAAAA,cAAA,SAAOC,UAAU,kBAAkBqB,EAAUunB,sBAAqB,KAClE7oB,EAAAA,cAAA,QAAMC,UAAU,kBAAkBjB,EAAMkE,KAAKgY,SAASiE,aAMtEsnC,EAAMpnD,KACFW,EAAAA,cAAA,OAAKC,UAAU,kCACXD,EAAAA,cAACgD,EAAAA,eAAc,CACXE,KACIsgD,EACM,CACIvhD,MAAO,CACHkB,wBAA0BnE,EAAMkE,KAAKgY,SAAuBirC,6BAC5D/iD,UAAYpE,EAAMkE,KAAKgY,SAAuBkrC,cAGtD,CACInkD,MAAO,CACHkB,wBAA0BnE,EAAMkE,KAAKgY,SAAsBmrC,cAC3DjjD,UAAWpE,EAAMkE,KAAKgY,SAASorC,WAIjDllD,QAASpC,EAAMoC,QACf9C,GAAIU,EAAMV,GACV2E,SAAUjE,EAAMiE,SAChBhD,UAAU,wCACVipB,kBAAmB5nB,EAAU4nB,kBAC7BC,iBAAkB7nB,EAAU6nB,iBAC5BwD,aAAc3tB,EAAMy4C,gBAEtBz4C,EAAMkE,KAAKgY,SAAS+rC,gBAAkBjoD,EAAMkE,KAAKgY,SAAS+rC,eAAiB,GACzEjnD,EAAAA,cAAAA,EAAAA,SAAA,KACIA,EAAAA,cAAA,QAAMC,UAAU,wCACX,IAAIjB,EAAMsC,UAAU2nB,oBAAsB,eAE/CjpB,EAAAA,cAACgD,EAAAA,eAAc,CACXE,KACIlE,EAAMwkD,YACA,CACIvhD,MAAO,CAEHkB,wBAAyBnE,EAAMkE,KAAKgY,SAASuoC,mBAGrD,CACIxhD,MAAO,CACHkB,wBAAyBnE,EAAMkE,KAAKgY,SAAS+rC,eAC7C7jD,UAAWpE,EAAMkE,KAAKgY,SAAS+rC,iBAIjD7lD,QAASpC,EAAMoC,QACf9C,GAAIU,EAAMV,GACV2E,SAAUjE,EAAMiE,SAChBhD,UAAU,sCACVsmD,qBAAsBvnD,EAAMkE,KAAKgY,SAAS4pC,2BAC1Cn4B,aAAc3tB,EAAMy4C,kBAI5B,OAILgP,IA8DMD,GACAxnD,EAAMkE,KAAKgY,SAAS6oC,eAAiB/kD,EAAMkE,KAAK0X,WAAa5b,EAAMsC,UAAU4lD,sBAC1ElnD,EAAAA,cAACmnD,EAAAA,oBAAmB,CAChBlnD,UAAU,wCACVmB,QAASpC,EAAMoC,QACfE,UAAWtC,EAAMsC,UAAU4lD,qBAC3BtsC,UAAW5b,EAAMkE,KAAK0X,UACtBM,SAAUlc,EAAMkE,KAAKgY,aAlLrClc,EAAM2U,aAEF3T,EAAAA,cAAA,OAAKC,UAAU,kDACXD,EAAAA,cAAA,QAAMC,UAAU,6BAChBD,EAAAA,cAAA,YAAOhB,EAAM2U,eAKlB,qNChgBf,IAAayzC,EAAb,cAA0CpnD,EAAAA,cAA1CtE,cAAA,oBACqB,KAAA2rD,oBAA0DrnD,EAAAA,YAMpE,KAAAsnD,YAAc,IACVnrD,KAAKorD,2BAA2BprD,KAAK6C,OAGzC+O,SACH,MACI7K,MACIskD,2BAA6Bx7C,OAAQw7C,IACxC,MACDp2C,EAAK,UACL9P,GACAnF,KAAK6C,MAGT,GAAIqV,EAAAA,gBAAgBC,YAAYlD,MAAAA,OAAK,EAALA,EAAOq2C,eAAgB,CACnD,MAAMC,EACFF,MAAAA,GAAAA,EAA2BG,gBAAkBH,EAA0BG,eAAeC,UAChFJ,EAA0BG,eAAeC,UACzCtmD,EAAUumD,yBAEpB,OACI7nD,EAAAA,cAAA,OAAKC,UAAU,wCACXD,EAAAA,cAAA,UACIC,UAAU,yCACVsV,MAAM,YAAW,aACLjU,EAAUwmD,8BACtB9/C,QAAS7L,KAAKmrD,YACd7/C,IAAKtL,KAAKkrD,qBAEVrnD,EAAAA,cAAA,QAAMC,UAAU,mCAAmCynD,IAEtDt2C,EAAMq2C,gBAQf,iCAAiCzoD,GACrC,MACIkE,MACIskD,2BAA6Bx7C,OAAQw7C,IACxC,QACDO,GACA/oD,EACJ,IAAKwoD,EACD,OAEJ,IAAIQ,EAA0B,GAC1BD,GAAW3nD,OAAO0S,KAAKi1C,GAASjrD,OAAS,GAAKuX,EAAAA,gBAAgBC,YAAYyzC,EAAQN,iBAClFO,EAAkBD,EAAQN,cAAc,GAAGnpD,UAEzCkpD,EACDS,WAAW,CACR3pD,GAAI0pD,EACJE,iBAAiB,EACjBC,iBAAkBhsD,KAAKkrD,oBACvBe,mBAAoB9rC,GACT5d,QAAQga,YAGtBlO,OAAOpM,IACAY,EAAMb,YACNa,EAAMb,UAAUC,MAAMA,EAAMmc,SAC5Bvb,EAAMb,UAAUuM,MAAM,uCAxE7B08C,GAAoB78B,EAAAA,EAAAA,IAAA,CADhCC,EAAAA,IACY48B,GCeN,MAAMiB,UAAaroD,EAAAA,cAGtBtE,YAAYsD,GACRyJ,MAAMzJ,GACN,MAAMF,GAAUI,EAAAA,EAAAA,kBAAiB,QAASF,EAAMG,iBAAmBmf,EAAAA,kBAAkB+pC,MACrFlsD,KAAKmM,YAAavI,EAAAA,EAAAA,wBAAuBf,EAAMG,iBAAmBL,GAG/DiP,SACH,OAAO/N,EAAAA,cAAA,OAAKC,UAAW9D,KAAK6C,MAAMiB,WAAY9D,KAAKmsD,YAAYnsD,KAAK6C,QAGhEspD,YAAY/kD,GAChB,OAAIA,EAAOglD,MAAQhlD,EAAOglD,KAAKC,QAAQC,eAE/BzoD,EAAAA,cAAA,IAAAI,OAAAC,OAAA,CACIC,KAAMiD,EAAOglD,KAAKC,QAAQC,eAAc,aAC5BllD,EAAOglD,KAAK/oD,UACxByH,OAAQ1D,EAAOglD,KAAKG,aAAe,cAAW7lD,EAC9C8lD,IAAI,uBACAxsD,KAAKmM,YAERnM,KAAKysD,aAAarlD,IAIxBpH,KAAKysD,aAAarlD,GAGrBqlD,aAAarlD,GASjB,OACIvD,EAAAA,cAACgpC,EAAAA,GAAc5oC,OAAAC,OAAA,GACPkD,EAAOslD,MAAK,CAChB5rD,eAAgBd,KAAK6C,MAAM/B,eAC3BqG,aAAcnH,KAAK6C,MAAMsE,aACzBE,cAAgBD,GAAUA,EAAOslD,OAAStlD,EAAOslD,MAAMrlD,eAbT,CAClDG,UAAW,CACPC,GAAI,CAAEC,EAAG,iBAAkBC,EAAG,EAAGC,EAAG,GACpCC,GAAI,CAAEH,EAAG,iBAAkBC,EAAG,EAAGC,EAAG,IAExCG,UAAU,GASNG,oBAAoB,UACpB4vC,UAAW,CACP/zC,IAAKqD,EAAOslD,OAAS,GACrB5rD,eAAgBd,KAAK6C,MAAM/B,eAC3BuE,WAAYrF,KAAK6C,MAAMiE,SACvB6lD,kBAAmB,SAEvBC,uBAAqB,MClDrC,IAAaC,EAAb,cAA6BhpD,EAAAA,cAGzBtE,YAAYsD,GACRyJ,MAAMzJ,GACN,MAAMF,GAAUI,EAAAA,EAAAA,kBAAiB,QAASF,EAAMG,iBAAmBmf,EAAAA,kBAAkB0qC,SACrF7sD,KAAKmM,YAAavI,EAAAA,EAAAA,wBAAuBf,EAAMG,iBAAmBL,GAG/DiP,SACH,OACI/N,EAAAA,cAAC6H,EAAAA,OAAMzH,OAAAC,OAAA,CACHJ,UAAU,sBACV+H,QAAS7L,KAAK6C,MAAMiqD,aACpBvnD,MAAOvF,KAAK6C,MAAMsC,UAAU4nD,yBAAwB,aACxC/sD,KAAK6C,MAAMsC,UAAU4nD,yBAAwB,gBAC1C/sD,KAAK6C,MAAMkV,WAAU,gBACrB/X,KAAK6C,MAAMmqD,UACtBhtD,KAAKmM,olBAlBZ0gD,GAAOz+B,EAAAA,EAAAA,IAAA,CADnBC,EAAAA,IACYw+B,GCiDb,IAAMzT,EAAN,cAAqBv1C,EAAAA,cAqCjBtE,YAAmBsD,GACfyJ,MAAMzJ,GA/BF,KAAAuqC,WAAqB,EA2QtB,KAAA6f,qBAAwBC,GAAuBx3B,IAA8C,IAAAy3B,EAC5D,QAApCA,EAAIntD,KAAK6C,MAAMuE,OAAOgmD,sBAAc,IAAAD,GAAhCA,EAAmCD,KACnCltD,KAAK6C,MAAMuE,OAAOgmD,eAAeF,GAAWG,SAAW33B,EAAM5qB,OAAOC,QA7OxE/K,KAAKstD,WAAazpD,EAAAA,YAClB7D,KAAKutD,cAAgBvtD,KAAKutD,cAAcnpB,KAAKpkC,MAC7CA,KAAKwtD,eAAiBxtD,KAAKwtD,eAAeppB,KAAKpkC,MAC/CA,KAAKytD,SAAWztD,KAAKytD,SAASrpB,KAAKpkC,MACnCA,KAAKyM,MAAQ,CACTihD,qBAAqB,EACrBC,mBAAmB,EACnBC,gBAAgB,GAEpB5tD,KAAKgD,kBAAmBiO,EAAAA,EAAAA,oBACpBjR,KAAK6C,MAAMoC,QAAQiC,QAAQgK,kBAC3BlR,KAAK6C,MAAMsO,aACXnR,KAAK6C,MAAMb,WAEfhC,KAAKotC,WAAY1qB,EAAAA,EAAAA,IAAiB1iB,KAAK6C,MAAMoC,QAAQiC,SAzC/C,kBAAsB,IAAA6f,EAC5B,OACKvE,EAAAA,GAAsBxiB,KAAK6C,MAAMoC,QAAQiC,SAAWlH,KAAK6tD,WAAa7tD,KAAK8tD,gBAClD,QAD8D/mC,EACxF/mB,KAAK6C,MAAMoC,QAAQiC,eAAO,IAAA6f,GAAM,QAANA,EAA1BA,EAA4BQ,YAAI,IAAAR,OAAA,EAAhCA,EAAkC3b,MAOhC,iBAAqB,IAAA2iD,EAC3B,MAAMC,EAAiC,QAA3BD,EAAG/tD,KAAK6C,MAAMkE,KAAKknD,gBAAQ,IAAAF,OAAA,EAAxBA,EAA0Bl+C,OACzC,OAAOm+C,MAAAA,OAAM,EAANA,EAAQn0C,KAGT,mBAAuB,IAAAq0C,EAC7B,MAAMC,EAA6C,QAArCD,EAAGluD,KAAK6C,MAAMkE,KAAKqnD,0BAAkB,IAAAF,OAAA,EAAlCA,EAAoCr+C,OACrD,OAAI2S,EAAAA,GAAsBxiB,KAAK6C,MAAMoC,QAAQiC,SAElCinD,EAAWA,EAASt0C,UAAOnT,EAE3BynD,EAAWA,EAASE,WAAaF,EAASt0C,UAAOnT,EAuBzD6U,oBACCiH,EAAAA,GAA0BC,WAC1BnR,OAAOD,iBAAiB,UAAWrR,KAAKytD,WAE5ClnC,EAAAA,EAAAA,KACI,KACIvmB,KAAK6C,MAAMkE,KAAK+U,KAAKjM,UAEzB,KACI7P,KAAK8b,KAAO9b,KAAK6C,MAAMkE,KAAK+U,KAAKjM,UAIzC,MACI5K,SACIiC,SAAS,KAAEqgB,IAEfpiB,WAAW,4BACPmpD,EAA2B,iCAC3BC,EAAgC,iCAChCC,EAAgC,uBAChCC,IAEJzuD,KAAK6C,MAEH6rD,EAA0B1uD,KAAK2uD,uBACjCpnC,EACAgnC,EACAD,EACAE,QAE4B9nD,IAA5BgoD,IAAuE,IAA9B1uD,KAAKyM,MAAMmhD,gBAEpDgB,EAAAA,qBAAqBC,WAAWC,gBAAgB,IAAIC,EAAAA,kBAAkBL,EAAyBD,IAIhGl9C,uBACCiR,EAAAA,GAA0BC,WAC1BnR,OAAOE,oBAAoB,UAAWxR,KAAKytD,UAAU,GAItD77C,SACH,MAAM,GACFzP,EAAE,SACF2E,EACAC,MAAM,mBAAEqnD,EAAkB,UAAEY,GAC5B/pD,SACIiC,SAAS,KAAEqgB,IACd,QACDtiB,EACAE,WAAW,UAAEglB,EAAS,aAAEC,IACxBpqB,KAAK6C,OACH,SAAEosD,EAAQ,UAAEC,EAAS,wBAAEC,GAA4BnvD,KAAK6C,MAAMuE,OAG9DgoD,EAAiBpvD,KAAK6C,MAAMoC,QAAQiK,IAAI9H,OAAOgoD,iBAAkB,EACjEC,EAAoBrvD,KAAKyM,MAAMihD,oBAAsB,GAAK,iBAC1D4B,EAAkB58C,GAAAA,CAAW,YAAa1S,KAAK6C,MAAMuE,OAAOtD,UAAWurD,GACvEE,EAAY,oBACZpB,EAAWC,GAAsBA,EAAmBv+C,OACpD2/C,EAAexvD,KAAKyvD,SAAS,YAC7BC,EAAc1vD,KAAKyvD,SAAS,WAC5BE,EAAa3vD,KAAKyvD,SAAS,UACjC,IAAIG,EAAgB,EACpB,MAAMC,EAAkB7vD,KAAKyvD,SAAS,eAChCK,EAAqB9vD,KAAKyvD,SAAS,iBACnCM,EAAyB/vD,KAAKyvD,SAAS,4BAC3B/oD,IAAdsoD,IASIY,EAPCZ,EAAUn/C,QACVqI,EAAAA,gBAAgBC,YAAY62C,EAAUn/C,SACtCm/C,EAAUn/C,OAAO,GAAGmgD,mBACpB93C,EAAAA,gBAAgBC,YAAY62C,EAAUn/C,OAAO,GAAGmgD,mBAIjChB,EAAUn/C,OAAO,GAAGmgD,kBAAkBrvD,OAFtC,GAKxB,MAAM6R,EAAShM,EAAAA,EAAAA,EAAA,GACPxG,KAAK6C,OACN7C,KAAKyM,OAAK,IACbwjD,KACIpsD,EAAAA,cAACqoD,EAAIjoD,OAAAC,OAAA,GACG,CACAkoD,KAAM6C,EACNvC,MAAOwC,EACPprD,UAAW,kBACXqD,aAAcnH,KAAK6C,MAAMoC,QAAQiC,QAAQC,aACzCrG,eAAgBd,KAAK6C,MAAMoC,QAAQiC,QACnClE,iBAAkBhD,KAAKgD,iBACvB8D,SAAU9G,KAAK6C,MAAMiE,YAIjCopD,oBACIrsD,EAAAA,cAACssD,EAAAA,sBAAqB,CAClBrsD,UAAU,8BACVssD,mBAAoBhB,EACpBiB,oBAAqBrwD,KAAK6C,MAAMsC,UAAUkrD,oBAC1CprD,QAASA,EACT9C,GAAIA,EACJ2E,SAAUA,EACV9D,iBAAkBhD,KAAKgD,iBACvB+D,KAAM,GACN6oD,cAAeA,EACfU,mBAAoBtwD,KAAK6C,MAAMsC,UAAUmrD,mBACzCC,sBAAuBpB,IAG/BqB,mBACI3sD,EAAAA,cAACssD,EAAAA,sBAAqB,CAClBrsD,UAAU,6BACVssD,mBAAoBhB,EACpBiB,oBAAqBrwD,KAAK6C,MAAMsC,UAAUkrD,oBAC1CprD,QAASA,EACT9C,GAAIA,EACJ2E,SAAUA,EACV9D,iBAAkBhD,KAAKgD,iBACvB+D,KAAM,GACN6oD,cAAeA,EACfU,mBAAoBtwD,KAAK6C,MAAMsC,UAAUmrD,mBACzCC,sBAAuBpB,IAG/BllC,SAAU/R,EAAAA,gBAAgBC,YAAYq3C,GAClCA,EAAa,GAEb3rD,EAAAA,cAACqmB,EAAAA,kBAAiB,CACdC,UAAWA,EACXC,aAAcA,EACdnlB,QAASA,EACT9C,GAAIA,EACJ2E,SAAUA,EACV9D,iBAAkBhD,KAAKgD,iBACvB+D,KAAM,CAAE+U,KAAM9b,KAAK8b,QAG3B20C,QACI5sD,EAAAA,cAACgpD,EAAO5oD,OAAAC,OAAA,GACA,CACAiB,UAAWnF,KAAK6C,MAAMsC,UACtB4S,YAAa/X,KAAKyM,MAAMihD,oBACxBV,SAAUuC,EACVzC,aAAc9sD,KAAKutD,cACnBvqD,iBAAkBhD,KAAKgD,oBAInC0tD,QAASx4C,EAAAA,gBAAgBC,YAAYu3C,GAAeA,EAAc,GAClEiB,OAAQz4C,EAAAA,gBAAgBC,YAAYw3C,GAAcA,EAAa,GAC/DiB,YAAa14C,EAAAA,gBAAgBC,YAAY03C,GAAmBA,EAAkB,GAC9E/rD,UAAWwrD,EACXuB,UAAW,CACPp+C,YAAazS,KAAK6C,MAClBiB,UAAW4O,GAAAA,CAAW48C,GACtB,aAActvD,KAAK6C,MAAMsC,UAAU2rD,gBACnCxqD,IAAK,UAETyqD,gBAAiB,CACbjtD,UAAW4O,GAAAA,CAAW,yBAE1Bs+C,sBAAuB,CACnBltD,UAAW4O,GAAAA,CAAW,sBAE1Bu+C,QAAS,CACLntD,UAAW4O,GAAAA,CAAW,uBAE1Bw+C,oBAAqB,CACjB5qD,IAAK6qD,EAAAA,MACLhvD,GAAIotD,EACJzrD,UAAW,8BACX+T,QAAS7X,KAAKyM,MAAMihD,oBACpB0D,cAAe,mBACfC,OAAQrxD,KAAKutD,eAEjB+D,iBAAkBztD,EAAAA,cAAC0tD,EAAAA,YAAW,CAACztD,UAAU,0CAA0CutD,OAAQrxD,KAAKutD,gBAChGiE,wBAAyB,CACrBlrD,IAAKmrD,EAAAA,UACL3tD,UAAW,yCAEf4tD,yBAA0B,CACtB5tD,UAAW,0CAEf6tD,mCAAoC,CAChC7tD,UAAW,2BAEf8tD,0CAA2C5xD,KAAK6xD,YAC1C,CACIvrD,IAAKwrD,EAAAA,QACL3vD,GAAI,mBACJ2B,UAAW,kCACXulB,UAAW,SACXxR,OAAQ7X,KAAKyM,MAAMkhD,kBACnB7iD,OAAQ9K,KAAKstD,WACb+D,OAAQrxD,KAAKwtD,qBAEjB9mD,EACNqrD,WAAY/xD,KAAKgyD,iBAAiBzqC,EAAMvnB,KAAK6C,MAAMsC,WACnD8sD,YAAajyD,KAAKkyD,kBAAkB3qC,EAAMvnB,KAAK6C,MAAMsC,WACrD68B,aAAcxf,EAAAA,GAAsBxiB,KAAK6C,MAAMoC,QAAQiC,SACvDirD,mBAAoBnyD,KAAKoyD,yBAAyB7qC,EAAMvnB,KAAK6C,MAAMsC,WACnEktD,0BAA2BryD,KAAKsyD,8BAA8B/qC,EAAMvnB,KAAK6C,MAAMsC,WAC/EotD,aAAcvyD,KAAKwyD,iBAAiBrE,GACpC3C,eAAgBtzC,EAAAA,gBAAgBC,YAAY23C,IAAuBjsD,EAAAA,cAAConD,EAAoBhnD,OAAAC,OAAA,GAAKlE,KAAK6C,QAClG4vD,mBAAoBzyD,KAAKotC,WAAal1B,EAAAA,gBAAgBC,YAAY43C,GAA0BA,OAAyBrpD,IAGzH,OAAO1G,KAAK6C,MAAMiR,WAAWtB,GAmBzBi9C,SAASiD,GACb,MAAM,MAAEz9C,GAAUjV,KAAK6C,MACvB,OAAQoS,GAASA,EAAMy9C,IAAaz9C,EAAMy9C,GAAU/xD,QAAUsU,EAAMy9C,IAAc,KAS9EV,iBAAiBzqC,EAAgDpiB,GACrE,MAAMxC,GAAUI,EAAAA,EAAAA,kBAAiB,QAAS/C,KAAKgD,iBAAkBmf,EAAAA,kBAAkBwwC,QAC7ExmD,GAAavI,EAAAA,EAAAA,wBAAuB5D,KAAKgD,iBAAkBL,GACjE,OACK3C,KAAK6xD,aACFhuD,EAAAA,cAAC6H,EAAAA,OAAMzH,OAAAC,OAAA,CACHJ,UAAU,2BACVyB,MAAOJ,EAAUytD,eACjBzuD,KAAMojB,MAAAA,OAAI,EAAJA,EAAME,UAAS,aACTtiB,EAAU0tD,mBACtBhnD,SAASinD,EAAAA,EAAAA,kBAAiB9yD,KAAKgD,iBAAkBL,EAAS,YACtDwJ,GAEJtI,EAAAA,cAAA,QAAMC,UAAU,gCAA+B,kBAC1CqB,EAAUytD,iBAavBV,kBAAkB3qC,EAAgDpiB,GAA2B,IAAA4tD,EACjG,MAAMpwD,GAAUI,EAAAA,EAAAA,kBAAiB,QAAS/C,KAAKgD,iBAAkBmf,EAAAA,kBAAkB6wC,SAC7E7mD,GAAavI,EAAAA,EAAAA,wBAAuB5D,KAAKgD,iBAAkBL,GACjE,OACI3C,KAAK6xD,aACDhuD,EAAAA,cAAC6H,EAAAA,OAAMzH,OAAAC,OAAA,CACHJ,UAAU,4BACVyB,MAAOJ,EAAU8tD,gBACjB9uD,KAAsB,QAAlB4uD,EAAExrC,MAAAA,OAAI,EAAJA,EAAM2rC,kBAAU,IAAAH,EAAAA,EAAI,GAAE,aAChB5tD,EAAUguD,oBACtBtnD,SAASinD,EAAAA,EAAAA,kBAAiB9yD,KAAKgD,iBAAkBL,EAAS,aACtDwJ,GAEJtI,EAAAA,cAAA,QAAMC,UAAU,iCAAgC,kBAC3CqB,EAAU8tD,kBAavBb,yBACJ7qC,EACApiB,GAEA,MAAMxC,GAAUI,EAAAA,EAAAA,kBAAiB,QAAS/C,KAAKgD,iBAAkBmf,EAAAA,kBAAkBixC,gBAC7EjnD,GAAavI,EAAAA,EAAAA,wBAAuB5D,KAAKgD,iBAAkBL,GAC3D0wD,EACF7wC,EAAAA,GAAsBxiB,KAAK6C,MAAMoC,QAAQiC,UAAYlH,KAAK6C,MAAMoC,QAAQiC,QAAQyT,QAAQ24C,4BAC5F,OACItzD,KAAK6xD,aACLwB,GACIxvD,EAAAA,cAAA,IAAAI,OAAAC,OAAA,cACgBiB,EAAUouD,2BACtBzvD,UAAU,sCACVyB,MAAOJ,EAAUquD,uBACjBrvD,KAAMnE,KAAKyzD,iCACXtgD,KAAK,OACLtH,QAASA,IAAM7L,KAAK6C,MAAMoC,QAAQiC,QAAQyT,QAAQ+4C,gCAC9CvnD,GAEJtI,EAAAA,cAAA,OAAKC,UAAU,yCACXD,EAAAA,cAAA,OAAKC,UAAU,+BAA8BwE,EAAAA,EAAAA,QAAOnD,EAAUwuD,eAAgB3zD,KAAK8tD,eACnFjqD,EAAAA,cAAA,WAAMsB,EAAUquD,0BAO5BC,iCACJ,MAAM/uD,EAAQ8d,EAAAA,GAAoB,2BAA4BxiB,KAAK6C,MAAMoC,QAAQC,eACjF,IAAKR,IAAU8d,EAAAA,GAA0BC,UACrC,OAKJ,MACMmxC,EAAM,IAAI/wC,IAAIne,EAAO4M,OAAO7B,SAAStL,MAE3C,MAH+B,CAAC,aAETyF,SAAQiqD,GAASD,EAAI9wC,aAAagxC,OAAOD,KACzDD,EAAIzvD,KAGPwqD,uBACJpnC,EACAgnC,EACAD,EACAE,GAEA,GAAKjnC,MAAAA,IAAAA,EAAMwsC,sBACP,OAGJ,MAAM,uBAAEC,EAAsB,4BAAEC,EAA2B,4BAAEC,GAAgCl0D,KAAK6C,MAAMuE,OAKxG,MAJsB,0EAIlBmgB,MAAAA,OAAI,EAAJA,EAAMwsC,4BAC4BrtD,IAA3BstD,EAAuCA,EAAyB1F,EAJ9C,2FAKlB/mC,MAAAA,OAAI,EAAJA,EAAMwsC,4BAC0BrtD,IAAhCutD,EAA4CA,EAA8B1F,EALnD,6DAMvBhnC,MAAAA,OAAI,EAAJA,EAAMwsC,4BAC0BrtD,IAAhCwtD,EAA4CA,EAA8B1F,EAE9EjnC,MAAAA,OAAI,EAAJA,EAAM4sC,yBAGT7B,8BACJ/qC,EACApiB,GAEA,MAAMxC,GAAUI,EAAAA,EAAAA,kBAAiB,QAAS/C,KAAKgD,iBAAkBmf,EAAAA,kBAAkBiyC,WAC7EjoD,GAAavI,EAAAA,EAAAA,wBAAuB5D,KAAKgD,iBAAkBL,GACjE,OACI3C,KAAK6xD,aACDhuD,EAAAA,cAAC6H,EAAAA,OAAMzH,OAAAC,OAAA,CACHkI,SAAUpM,KAAKstD,WACfxpD,UAAU,4BAA2B,mBACpB,mBACjB+H,QAAS7L,KAAKwtD,eACdp0C,MAAM,OAAM,aACApZ,KAAK6xD,YAAW,gBACb7xD,KAAKyM,MAAMkhD,mBACtBxhD,GAEJtI,EAAAA,cAAA,OAAKC,UAAU,0BACXD,EAAAA,cAAA,WAAM7D,KAAK6xD,aACVrvC,EAAAA,GAAsBxiB,KAAK6C,MAAMoC,QAAQiC,UAAYlH,KAAK8tD,cACvDjqD,EAAAA,cAAA,YAAMyE,EAAAA,EAAAA,QAAOnD,EAAUwuD,eAAgB3zD,KAAK8tD,iBAQ5D0E,iBAAiBrE,GACrB,MAAM,eAAEf,GAAmBptD,KAAK6C,MAAMuE,OAChCzE,GAAUI,EAAAA,EAAAA,kBAAiB,QAAS/C,KAAKgD,iBAAkB,IACjE,GAAKhD,KAAK6xD,aAAgBzE,GAAmBl1C,EAAAA,gBAAgBC,YAAYi1C,GAGzE,OAAOA,EAAezrD,KAAI,CAAC0yD,EAA0BzlD,KACjDjM,EAAQc,cAAcC,MAAQ2wD,EAAIhH,SAClC,MAAMlhD,GAAavI,EAAAA,EAAAA,wBAAuB5D,KAAKgD,iBAAkBL,GAC3D2xD,EAAoC,CACtCjxD,UAAWgxD,EAAIhxD,UACfS,UAAW,sCACXupD,SAAUgH,EAAIhH,SACdhB,QAASgI,EAAIhI,QAAQC,eACrBC,aAAc8H,EAAI9H,aAClBp5C,KAAM,OACN8K,qBAAsB9R,GAG1B,OACItI,EAAAA,cAAC2e,EAAAA,GAAa,CACVze,IAAK6K,EACLw9C,KAAMkI,EACNxc,UAAW,CAAEyc,aAAcv0D,KAAKitD,qBAAqBr+C,GAAQ9N,eAAgBd,KAAK6C,MAAMoC,QAAQiC,cAMxGqmD,gBACJvtD,KAAKgN,SAAS,CACV0gD,qBAAsB1tD,KAAKyM,MAAMihD,sBAIjCF,iBACJxtD,KAAKgN,SAAS,CACV2gD,mBAAoB3tD,KAAKyM,MAAMkhD,oBAI/BF,SAAS/3B,GACTA,EAAM7oB,UAAYC,EAAAA,SAASC,QAC3B/M,KAAKgN,SAAS,CAAE0gD,qBAAqB,OA9dnCt/B,EAAAA,EAAAA,IAAA,CAAT4K,EAAAA,IAAQ,iCAUC5K,EAAAA,EAAAA,IAAA,CAAT4K,EAAAA,IAAQ,gCAKC5K,EAAAA,EAAAA,IAAA,CAAT4K,EAAAA,IAAQ,iCA3BPogB,GAAMhrB,EAAAA,EAAAA,IAAA,CADXC,EAAAA,IACK+qB,GA+eN,+GC9eA,SAASob,EAAqB/uD,GAC1B,OACI5B,EAAAA,cAAAA,EAAAA,SAAA,KACK4B,GAASA,EAAM9E,OAAS,EACnB8E,EAAM9D,KAAI,CAAC8yD,EAAuB7lD,IACvB/K,EAAAA,cAACA,EAAAA,SAAc,CAACE,IAAK6K,GAAQ6lD,KAExC,MAKlB,QArF+C5xD,IAC3C,MAAM,UACFguD,EAAS,gBACTE,EAAe,sBACfC,EAAqB,oBACrBE,EAAmB,wBACnBM,EAAuB,yBACvBE,EAAwB,QACxBT,GACApuD,EACJ,OACIgB,EAAAA,cAACwQ,EAAAA,OAAMpQ,OAAAC,OAAA,GAAK2sD,GACRhtD,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK6sD,GACNltD,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK8sD,GACLnuD,EAAM4tD,QACN5tD,EAAMotD,KACNuE,EAAqB3xD,EAAM8tD,QAC3B9tD,EAAM2oD,eACN3oD,EAAM4vD,mBA0B3B,SAAoC5vD,GAChC,MAAM,mCACF8uD,EAAkC,0CAClCC,EAAyC,0BACzCS,EAAyB,YACzBJ,EAAW,WACXF,EAAU,aACVQ,GACA1vD,EAEJ,GAAI8uD,EAAoC,CACpC,GAAIC,EACA,OACI/tD,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKytD,GACLU,EACDxuD,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK0tD,KACLW,GAAeA,EAAa5wD,KAAIyqD,GAAQA,IACxC6F,IAIV,GAAIF,EACP,OAAOluD,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKytD,GAAqCI,GAI9D,OADAlvD,EAAMoC,QAAQjD,UAAUC,MAAM,gDACvB,KAnDUyyD,CAA2B7xD,GAC3BA,EAAMqtD,oBACPrsD,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK+sD,IACTpuD,EAAMonB,SACNuqC,EAAqB3xD,EAAM+tD,cAEhC/sD,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKgtD,GACNrtD,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKstD,GACL3uD,EAAMyuD,iBACNkD,EAAqB3xD,EAAM6tD,SAC5B7sD,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKwtD,KACL7uD,EAAM0vD,cAAe1vD,EAAM0vD,aAAa5wD,KAAIyqD,GAAQA,IACpDvpD,EAAM+tD,YACN/tD,EAAM2tD,mBACN3tD,EAAMkvD,WACNlvD,EAAMovD,eAIlBuC,EAAqB3xD,EAAM6tD,2qBCF5C,MAAMiE,EAAyDpmC,IAS1D,IAT2D,MAC5DzoB,EAAK,MACL6F,EAAK,QACL1G,EAAO,GACP9C,EAAE,SACF2E,EAAQ,mBACRo4C,EAAkB,SAClBD,EAAQ,SACR2V,GACHrmC,EACG,OACI1qB,EAAAA,cAAA,KAAGC,UAAW,6BAA6B8wD,KACvC/wD,EAAAA,cAAA,QAAMC,UAAU,8BAA8B6H,GAC7C7F,GAAmB,IAAVA,EACNjC,EAAAA,cAACgD,EAAAA,eAAc,CACXE,KAAM,CACFjB,MAAO,CAAEkB,wBAAyBlB,IAEtCyqB,cAAe0uB,EACfh6C,QAASA,EACT9C,GAAIA,EACJ2E,SAAUA,EACVhD,UAAU,+BAGdD,EAAAA,cAAA,QAAMC,UAAU,8BAA8Bo7C,KAMxD2V,EAA8BA,CAChChyD,EACAiD,EACA6F,EACAipD,IAGI/wD,EAAAA,cAAC8wD,EAAkB,CACf7uD,MAAOA,EACP6F,MAAOA,EACP1G,QAASpC,EAAMoC,QACf9C,GAAIU,EAAMV,GACV2E,SAAUjE,EAAMiE,SAChBo4C,mBAAoBr8C,EAAMq8C,mBAC1BD,SAAUp8C,EAAMo8C,SAChBj9C,UAAWa,EAAMb,UACjB4yD,SAAUA,IAKhBE,EAA0BliC,GACpBA,GAAiBA,EAAc4O,eAAkB,EAYhDkZ,EAAkB73C,IAC3B,MAAM,YAAE8mB,EAAW,UAAE5F,GAAclhB,EAAMiZ,KACnCi5C,EAAehxC,MAAAA,OAAS,EAATA,EAAW/T,QAAO+O,GAAYA,EAAS6oC,gBACtD3kD,EAAmC,CACrCq3C,SAAUya,MAAAA,OAAY,EAAZA,EAAcpzD,KAAKqzD,GAClBH,EACHhyD,EACAmyD,EAAYC,eACZ3sD,EAAAA,EAAAA,QAAOzF,EAAM23C,aAAcwa,EAAYE,WACvC,aAGR/a,WAAY0a,EAA4BhyD,EAAO8mB,EAAa9mB,EAAM83C,gBAAiB,UAGvF,GAAI93C,EAAM+vB,cAAe,CACrB,MAAMuiC,EAzBiBC,EAACxiC,EAA+B9W,KAC3D,MAGMu5C,GAAsBziC,EAAcgL,iBAAmB,IAAI8D,QAHzC4zB,CAACtkC,EAAemL,IAC7BnL,GAASmL,EAASS,SAAW,IAEiD,GACnF+I,GAAU7pB,EAAK6N,aAAe,GAAKmrC,EAAuBliC,GAChE,OAAO2iC,KAAKtyB,IAAIoyB,EAAoB1vB,IAmBTyvB,CAAuBvyD,EAAM+vB,cAAe/vB,EAAMiZ,MACnE0lB,EAAgBszB,EAAuBjyD,EAAM+vB,eAC7C4iC,GAA4B7rC,GAAe,GAAKwrC,EAAiB3zB,EAEnEA,EAAgB,IAChBv+B,EAAWg3C,QAAU4a,EAA4BhyD,GAAQ2+B,EAAe3+B,EAAMi8C,cAAgB,iBAAkB,YAGhHqW,EAAiB,IACjBlyD,EAAWk5B,SAAW04B,EAClBhyD,GACCsyD,EACDtyD,EAAMk8C,eAAiB,mBACvB,cAIR97C,EAAWk3C,WAAa0a,EAA2BruD,EAAAA,EAAC,GAC3C3D,GAAK,IAAEo8C,cAAUv4C,IACtB8uD,EACA3yD,EAAM83C,gBACN,SAIR,OAAO13C,kECjJCwyD,6HA+BL,SAASC,EACZzwD,EACA0wD,EACAjM,EACAkM,GAAqB,IAAAC,EAErB,OAAK5wD,MAAAA,GAAY,QAAL4wD,EAAP5wD,EAASiK,WAAG,IAAA2mD,GAAQ,QAARA,EAAZA,EAAczuD,cAAM,IAAAyuD,GAApBA,EAAsB3M,kBAGvByM,EACOC,EAHAlM,ECvBfvpD,eAAe21D,EAA2BC,GACtC,MAAMC,EAAwB,CAC1B/tD,IAAK8tD,EAAcE,KAAO,GAC1BtwD,QAASowD,EAAcG,SAAW,IAMtC,OAJIH,EAAcI,+BACdH,EAAU/3C,qBAAuB,CAAEm4C,6BAA8B,SAG/C,KAAlBJ,EAAU/tD,IACH,CAAC+tD,GAAW,GAGhB,IAAIzzD,SAA+Bga,IACtC,IACI,MAAM85C,EAAO,IAAIC,eACjBD,EAAKE,KAAK,OAAQP,EAAU/tD,KAAM,GAElCouD,EAAKhlD,iBAAiB,QAAQ,KAC1BkL,EAAQ,CAACy5C,EAA2B,MAAhBK,EAAKvtC,QAAkC,MAAhButC,EAAKvtC,YAGpDutC,EAAKhlD,iBAAiB,SAAS,KAC3BkL,EAAQ,CAACy5C,GAAW,OAGxBK,EAAKG,OACP,MAAA/hC,GACElY,EAAQ,CAACy5C,GAAW,QAKzB71D,eAAes2D,EAClBn4C,EACAtd,EACAkE,EACAmC,EACAqvD,GAEA,MAAMx1D,GAAY6Y,EAAAA,EAAAA,IAAa7U,EAAcpE,gBACvC61D,EAAc,IAAIC,EAAAA,sCAAsCt4C,EAAWtd,EAAW01D,EAAiBx1D,GAErG,OAAO21D,EAAAA,EAAAA,qCAAoCF,EAAazxD,GACnDzC,MAAKq0D,GACEA,EACOv0D,QAAQC,IAAIs0D,EAAen1D,KAAIo0D,GAAiBD,EAA2BC,MAAiBtzD,MAAKs0D,GAC7FA,EAAM/mD,QAAOgnD,GAAQA,EAAK,KAAIr1D,KAAIq1D,GAAQA,EAAK,OAIvD,KAEV3oD,OAAMpM,IACHiD,EAAclD,UAAUsM,UAAUrM,GAClCiD,EAAclD,UAAUuM,MAAM,sDACvB,MA+EZpO,eAAe82D,EAClBH,EACA5xD,EACAmC,GAEA,OAAO9E,QAAQC,IAAIs0D,EAAen1D,KAAIo0D,GAAiBD,EAA2BC,MAC7EtzD,MAAKs0D,GACKA,EAAM/mD,QAAOgnD,GAAQA,EAAK,KAAIr1D,KAAIq1D,GAAQA,EAAK,OAEzD3oD,OAAMpM,IACHiD,EAAclD,UAAUsM,UAAUrM,GAClCiD,EAAclD,UAAUuM,MAAM,qCACvB,4kBDlKnB,SAAYknD,GAIRA,EAAAA,EAAA,eAIAA,EAAAA,EAAA,iBAIAA,EAAAA,EAAA,iBAIAA,EAAAA,EAAA,eAhBJ,CAAYA,IAAAA,EAAS,KE4FrB,MAAMyB,UAAqBrzD,EAAAA,UA6BvBtE,YAAmBsD,GAA4C,IAAA26B,EAAAjP,EAAA4oC,EAC3D7qD,MAAMzJ,GAAM26B,EAAAx9B,KA7BC,KAAAo3D,kBAAiD,IAAIC,IAErD,KAAAC,2BAAqFzzD,EAAAA,YACrF,KAAA0zD,OAAkC1zD,EAAAA,YAGlC,KAAA2zD,4BAA8C,CAC3DhwD,UAAW,CACPC,GAAI,CAAEC,EAAG,kBAAmBC,EAAG,EAAGC,EAAG,GACrC2d,GAAI,CAAE7d,EAAG,kBAAmBC,EAAG,EAAGC,EAAG,GACrC6vD,GAAI,CAAE/vD,EAAG,kBAAmBC,EAAG,EAAGC,EAAG,GACrCC,GAAI,CAAEH,EAAG,YAAaC,EAAG,EAAGC,EAAG,IAEnCG,UAAU,EACVT,iBAAiB,GAGJ,KAAAowD,8BAAgD,CAC7DlwD,UAAW,CACPC,GAAI,CAAEC,EAAG,YAAaC,EAAG,IAAKC,EAAG,GACjCC,GAAI,CAAEH,EAAG,YAAaC,EAAG,IAAKC,EAAG,IAErCG,UAAU,EACVT,iBAAiB,GA2MJ,KAAAqwD,UAAY,KACzB33D,KAAKgN,SAAS,CAAEgO,WAAW,KAGd,KAAA48C,SAAW,KACxB53D,KAAKgN,SAAS,CAAEgO,WAAW,KAMd,KAAAvG,KAAO,KAEpB,IADAojD,EAAAA,EAAAA,8BAC0BnxD,IAAtB1G,KAAK83D,aACL,OAGJ,MAAM/8C,EAAY/a,KAAK83D,aAAe,EAAI93D,KAAKyM,MAAM+H,YAAc,EACnExU,KAAK+3D,UAAUh9C,GAEf/a,KAAKg4D,uBAMQ,KAAAtjD,SAAW,MACxBmjD,EAAAA,EAAAA,yBACA,MAAMI,EAASj4D,KAAKyM,MAAMyrD,kBACpBn9C,EAAY/a,KAAKm4D,cAAiBF,EAASA,EAAOt3D,OAAS,EAAI,EAAKX,KAAKyM,MAAM+H,YAAc,EACnGxU,KAAK+3D,UAAUh9C,GACf/a,KAAKg4D,uBAGQ,KAAAD,UAAanpD,IAC1B,MAAM,SAAEkG,GAAa9U,KAAK6C,MAAMuE,OAC1BgxD,EAAep4D,KAAKyM,MAAM+H,YAC1B6jD,EAAar4D,KAAKyM,MAAMyrD,kBACD,IAADI,EACwCC,EADpE,GAAIzjD,GAAYujD,EACZ,IAA0B,QAAtBC,EAAAD,EAAW,GAAGzpD,YAAQ,IAAA0pD,OAAA,EAAtBA,EAAwBE,kBAAmB/C,EAAAA,UAAUgD,MAClC,QAAnBF,EAAAv4D,KAAKu3D,OAAOrqD,eAAO,IAAAqrD,GAAnBA,EAAqBG,YAClB,GAAIL,EAAW,GAAGD,KAAgBI,iBAAmB/C,EAAAA,UAAUgD,MAAO,CAAC,IAADE,EACtD,QAAnBA,EAAA34D,KAAKu3D,OAAOrqD,eAAO,IAAAyrD,GAAnBA,EAAqBhkD,QAG7B3U,KAAKgN,SAAS,CAAEwH,YAAa5F,KAiDzB,KAAAgqD,cAAgB,KAAmB,IAAA7xC,EACvC,GAAI/mB,KAAK6C,MAAMuE,OAAOyxD,qBAAqD,QAAlC9xC,EAAI/mB,KAAK6C,MAAMoC,QAAQiC,QAAQgI,WAAG,IAAA6X,GAAQ,QAARA,EAA9BA,EAAgC3f,cAAM,IAAA2f,GAAtCA,EAAwCmiC,iBAAkB,CAAC,IAAD4P,EAAAC,EACnG,MAAMC,EAAsC,QAAhCF,EAAG94D,KAAK6C,MAAMuE,OAAO6xD,mBAAW,IAAAH,EAAAA,EAAA,cAC5C,IAAIb,EAAuB,GACvBnB,EAAkC,GAC5B,gBAANkC,GAAsCh5D,KAAK6C,MAAMkE,KAAKmyD,iCAAiCrpD,OACvFinD,EAAiB92D,KAAK6C,MAAMkE,KAAKmyD,iCAAiCrpD,OACrD,cAANmpD,GAAoCh5D,KAAK6C,MAAMkE,KAAK+vD,eAAejnD,SAC1EinD,EAAiB92D,KAAK6C,MAAMkE,KAAK+vD,eAAejnD,QAEpDooD,EAASnB,EAAen1D,KAAIo0D,IAAgB,IAAAoD,EAAAnhD,EACxC,MAAO,CACH/P,IAAsB,QAAnBkxD,EAAEpD,EAAcE,WAAG,IAAAkD,EAAAA,EAAI,GAC1BxzD,QAAS+vD,EACL11D,KAAK6C,MAAMoC,QAAQC,cAAcpE,eACjCd,KAAK21D,sBACyB,QADJ39C,EAC1BhY,KAAK6C,MAAMkE,KAAKyW,QAAQ3N,cAAM,IAAAmI,OAAA,EAA9BA,EAAgC6B,KAChCk8C,EAAcG,SAElBj4C,qBAAsB83C,EAAcI,6BAC9B,CACIC,6BAA8B,aAElC1vD,MAGd,MAAM0yD,EAAwC,QAA3BL,EAAG/4D,KAAK6C,MAAMuE,OAAO6wD,cAAM,IAAAc,EAAAA,EAAI,GAElD,MAAO,IAAI/4D,KAAKq5D,8BAA8BpB,MAAYmB,GAE9D,MAAO,IAiJM,KAAAE,yBAA2B,CAACC,EAAuB3qD,EAAevH,KAC/E,MAAMmyD,EAAYD,EAAUC,UAC5B,GAAIA,EAAW,CAAC,IAADC,EACX,MAAM3/B,EAA0B95B,KAAK6C,MAAMuE,OACrCsyD,EAAkB15D,KAAK6C,MAAMsC,UAC7Bw0D,EAAgC,GACtCA,EAAcC,QAAUJ,EAAUr3D,GAClCw3D,EAAcp0D,MAAQi0D,EAAUj0D,MAChCo0D,EAAcE,SAAWL,EAAUM,SAC/BN,EAAU5zD,YACV+zD,EAAcI,eAAiBP,EAAU5zD,UAAUqC,KAEnC,QAApBwxD,EAAID,EAAUQ,cAAM,IAAAP,GAAhBA,EAAkBQ,mBAClBN,EAAcO,sBAAwBV,EAAUQ,OAAOC,kBAE3D,MAAME,EAA+B,CAAErgC,QAAAA,EAASsgC,SAAUT,GACpDxtD,EAAa,CACfhK,GAAI,GAAGnC,KAAK6C,MAAMV,sBAAsByM,KAE5C,OACI/K,EAAAA,cAAC40D,EAAAA,GAAK,CAAC30D,UAAU,2BAA2Bg0C,UAAW,CAAE/zC,IAAKy1D,EAAW14D,eAAgBd,KAAK6C,MAAMoC,QAAQiC,UACxGrD,EAAAA,cAACw2D,EAAAA,OAAMp2D,OAAAC,OAAA,CACHoH,IAAKtL,KAAKu3D,OACV+C,WAAYH,EACZxoD,SAAU3R,KAAK6C,MAAMoC,QAAQiC,QAAQwK,OAAOC,SAC5C+nD,gBAAiBA,GACbvtD,KAKpB,OAAOnM,KAAKu6D,kBAAkBlzD,IAGjB,KAAAmzD,iBAAmB,SAChC9N,EACArlD,EACAuH,GAAa,IAAA48B,EAAA,IACbivB,EAAAt+C,UAAAxb,OAAA,QAAA+F,IAAAyV,UAAA,IAAAA,UAAA,GAA0B,OAE1BtY,EAAAA,cAACmE,EAAAA,GAAK/D,OAAAC,OAAA,CACFpD,eAAgB08B,EAAK36B,MAAMoC,QAAQC,cAAcpE,eACjDgD,UAAU,0BACN4oD,EAAK,CACT3C,YAA2C,QAA9Bve,EAAAhO,EAAK36B,MAAMoC,QAAQiC,QAAQgI,WAAG,IAAAs8B,GAAQ,QAARA,EAA9BA,EAAgCpkC,cAAM,IAAAokC,GAAtCA,EAAwC0d,iBAAmB,GAAe,IAAVt6C,EAAc4uB,EAAKk9B,cAAgBhO,EAAMzkD,IACtHd,aAAcq2B,EAAK36B,MAAMoC,QAAQiC,QAAQC,aACzCE,cAAeA,EACfa,oBAAoB,OACpB/F,GAAI,GAAGq7B,EAAK36B,MAAMV,sBAAsByM,IACxCg+C,sBAAuB6N,EACvBE,oBAA+B,IAAV/rD,MAIZ,KAAAgsD,kBAAoB,CACjClO,EACArlD,EACAuH,EACAisD,KAOO,CACHC,4BAA6B,CACzBx0D,IAAK,KACLxC,UARQ4O,GAAAA,CACZ,mCACAmoD,IAAwBjsD,EAAQ,0CAA4C,IAOxEuE,KAAM,MACN4nD,SAAU,EACVh3D,IAAK6K,EACL,aAAc89C,EAAM/mD,QACpB,gBAAiBk1D,IAAwBjsD,EACzC/C,QAAS7L,KAAKg7D,0BAA0BpsD,GACxCqsD,UAAWj7D,KAAKk7D,4BAA4BtsD,IAEhDusD,QACIt3D,EAAAA,cAACmE,EAAAA,GAAK/D,OAAAC,OAAA,CACFpD,eAAgBd,KAAK6C,MAAMoC,QAAQC,cAAcpE,eACjDgD,UAAU,+BACN4oD,EAAK,CACT3C,YAAuB,IAAVn7C,EAAc5O,KAAK06D,cAAgBhO,EAAMzkD,IACtDd,aAAcnH,KAAK6C,MAAMoC,QAAQiC,QAAQC,aACzCE,cAAeA,EACfa,oBAAoB,OACpBkzD,sBAAuBp7D,KAAKyM,MAAM4uD,wBAClCV,oBAA+B,IAAV/rD,OAWpB,KAAA0sD,sBAAwB,CACrC/B,EACAlyD,EACAuH,EACAisD,KAEA,MAAMU,EAAU7oD,GAAAA,CACZ,mCACAmoD,IAAwBjsD,EAAQ,0CAA4C,IAG1E4qD,EAAYD,EAAUC,UAC5B,IAAI9M,EASJ,OAPIA,EADA8M,MAAAA,GAAAA,EAAW5zD,UACH4zD,EAAU5zD,UAEV,CACJqC,IAAK,SAIN,CACH6yD,4BAA6B,CACzBx0D,IAAK,KACLxC,UAAWy3D,EACXpoD,KAAM,MACN4nD,SAAU,EACVh3D,IAAK6K,EACL,aAAc89C,EAAM/mD,QACpB,gBAAiBk1D,IAAwBjsD,EACzC/C,QAAS7L,KAAKg7D,0BAA0BpsD,GACxCqsD,UAAWj7D,KAAKk7D,4BAA4BtsD,IAEhDusD,QACIt3D,EAAAA,cAACmE,EAAAA,GAAK/D,OAAAC,OAAA,CACFpD,eAAgBd,KAAK6C,MAAMoC,QAAQC,cAAcpE,eACjDgD,UAAU,+BACN4oD,EAAK,CACT3C,YAAa2C,EAAMzkD,IACnBd,aAAcnH,KAAK6C,MAAMoC,QAAQiC,QAAQC,aACzCE,cAAeA,EACfa,oBAAoB,OACpBkzD,sBAAuBp7D,KAAKyM,MAAM4uD,wBAClCV,oBAA+B,IAAV/rD,OAWpB,KAAA4sD,YAAe5sD,GAAmB6sD,IAC/Cz7D,KAAKo3D,kBAAkBx8C,IAAIhM,EAAO6sD,IAGrB,KAAAP,4BAA+BtsD,GACpC8mB,IACAA,EAAMgmC,QAAU5uD,EAAAA,SAAS6uD,OAASjmC,EAAMgmC,QAAU5uD,EAAAA,SAAS8uD,QAC3DlmC,EAAMvmB,iBAENnP,KAAK+3D,UAAUnpD,KAKV,KAAAosD,0BAA6BpsD,GAClC8mB,IACJA,EAAMvmB,iBAENnP,KAAK+3D,UAAUnpD,IA0LN,KAAAitD,sBAAwB,CAACtC,EAAuB3qD,EAAevH,KAC5E,MAAMmyD,EAAYD,EAAUC,UAC5B,IAAI9M,EASJ,OAPIA,EADA8M,MAAAA,GAAAA,EAAW5zD,UACH4zD,EAAU5zD,UAEV,CACJqC,IAAK,SAKTpE,EAAAA,cAAA,OAAKC,UAAU,yBACXD,EAAAA,cAACmE,EAAAA,GAAK/D,OAAAC,OAAA,CACFpD,eAAgBd,KAAK6C,MAAMoC,QAAQC,cAAcpE,eACjDgD,UAAU,gCACN4oD,EAAK,CACT3C,YAAa2C,EAAMzkD,IACnBd,aAAcnH,KAAK6C,MAAMoC,QAAQiC,QAAQC,aACzCE,cAAeA,EACfa,oBAAoB,OACpBkzD,sBAAuBp7D,KAAKyM,MAAM4uD,wBAClCV,oBAA+B,IAAV/rD,KAEzB/K,EAAAA,cAAA,OAAKC,UAAU,wCAEXD,EAAAA,cAAA,UACI0B,MAAOvF,KAAK6C,MAAMsC,UAAU22D,oBAC5B3oD,KAAK,SACL7H,IAAKtL,KAAKs3D,2BACVzrD,QAAS7L,KAAK+7D,gBACdj4D,UAAU,8CA8Db,KAAAq0D,YAAc,IAAiC,IAA3Bn4D,KAAKyM,MAAM+H,YAE/B,KAAAsjD,WAAa,KAC1B,MAAMG,EAASj4D,KAAKyM,MAAMyrD,kBAC1B,OAAOD,GAAUj4D,KAAKyM,MAAM+H,cAAgByjD,EAAOt3D,OAAS,GAG/C,KAAAo7D,gBAAkB,KAC/B/7D,KAAKg8D,gBAyBQ,KAAAC,iBAAoBC,IACjC,MACIn1D,MACIyW,SAAW3N,OAAQ2N,IACtB,UACDrY,GACAnF,KAAK6C,MACT,IAAIq1D,EAAoBl4D,KAAKyM,MAAMyrD,mBAE9BA,GAAqB16C,IACtB06C,EAAoB,CAACl4D,KAAKm8D,uBAAuB3+C,KAErD,MAAM4+C,EAAgB,CAClB91D,IAAKgO,EAAAA,SACLxQ,UAAW,6BACX2B,MACIyyD,GACAA,EAAkBv2D,KAAI,CAACC,EAAkBgN,IACrC5O,KAAKq8D,6BAA6BH,EAAUt6D,EAAM5B,KAAKs8D,qBAAsB1tD,GAAO,KAE5F4F,YAAaxU,KAAKyM,MAAM+H,YACxBC,KAAMzU,KAAKyU,KACXC,SAAU1U,KAAK0U,SACfK,UAAU,EACVY,kBAAmBxQ,EAAUo3D,8BAC7B1mD,kBAAmB1Q,EAAUq3D,0BAC7BnnD,yBAA0BrV,KAAK+3D,UAC/B0E,uBAAuB,EACvBC,eAAe,EACf9gD,UAAU,EACV7F,eAAgB/V,KAAK43D,SACrB5hD,gBAAiBhW,KAAK23D,UACtBgF,wBAAyB38D,KAAKyM,MAAMmwD,qBAElCC,EAAWh5D,EAAAA,cAACyQ,EAAAA,SAAQrQ,OAAAC,OAAA,GAAKk4D,IAEzBU,EAAyC,CAC3CC,YAAa/8D,KAAKyM,MAAMswD,YACxBC,SAAUh9D,KAAKg8D,aACfiB,gBAAiBJ,EACjBhS,WAAYn4C,GAAAA,CAAW,0BAA2B,6BAEtD,OAAOwqD,EAAAA,EAAAA,eAAcJ,IAGjB,KAAAnH,oBAAsB,IACc,YAApC31D,KAAK6C,MAAMuE,OAAO+1D,cAj+BtBn9D,KAAKg8D,aAAeh8D,KAAKg8D,aAAa53B,KAAKpkC,MAC3C,MAAMo9D,EAAqBp9D,KAAK44D,gBAChC54D,KAAKyM,MAAQ,CACT+H,YAAa,EACbwG,WAAW,EACXqiD,eAAe,EACfN,aAAa,EACbO,eAAe,EACfjC,0BAA2Br7D,KAAK6C,MAAMuE,OAAOyxD,oBAC7CX,kBAAmBkF,GAGvBp9D,KAAKs8D,qBACoE,QADhD/tC,EACW,QADX4oC,EACrBt0D,EAAMuE,OAAOm2D,2BAAmB,IAAApG,EAAAA,EAAIt0D,EAAMuE,OAAOo2D,4BAAoB,IAAAjvC,EAAAA,EAAIvuB,KAAKw3D,4BAElFx3D,KAAKy9D,iBAAmBz9D,KAAKy9D,iBAAiBr5B,KAAKpkC,MACnDA,KAAK09D,wBAA0B19D,KAAK09D,wBAAwBt5B,KAAKpkC,MACjEA,KAAK29D,oBAAsB39D,KAAK29D,oBAAoBv5B,KAAKpkC,MACzDA,KAAK49D,2BAA6B59D,KAAK49D,2BAA2Bx5B,KAAKpkC,MACvEA,KAAK69D,yBAA2B79D,KAAK69D,yBAAyBz5B,KAAKpkC,MAGhE8Y,WAEH,MAAgB,QADHA,EAAAA,EAAAA,UAAS,CAAEC,QAASC,EAAAA,YAAYC,SAAUhU,QAASjF,KAAK6C,MAAMoC,QAAQiC,UAIhF,0BAAuB,IAAA42D,EAAAC,EAC1B,MAAM/E,EAAsC,QAAhC8E,EAAG99D,KAAK6C,MAAMuE,OAAO6xD,mBAAW,IAAA6E,EAAAA,EAAA,cACtCE,EAA0Ch+D,KAAK6C,MAAMuE,OAAO42D,wCAElE,GADAh+D,KAAKi+D,kBAC8B,QAA/BF,EAAC/9D,KAAK6C,MAAMoC,QAAQiC,QAAQgI,WAAG,IAAA6uD,GAAQ,QAARA,EAA9BA,EAAgC32D,cAAM,IAAA22D,IAAtCA,EAAwC7U,mBAC/B,gBAAN8P,EACA,QAAqCtyD,IAAjC1G,KAAKyM,MAAMyrD,mBAAmCl4D,KAAK6C,MAAMkE,KAAKmyD,iCAAiCrpD,OAAQ,CAAC,IAADquD,EACvG,MAAMjG,QAAehB,EACjBj3D,KAAK6C,MAAMkE,KAAKmyD,iCAAiCrpD,OACjD7P,KAAK6C,MAAMoC,QAAQC,cACqB,QADRg5D,EAChCl+D,KAAK6C,MAAMuE,OAAO+2D,8BAAsB,IAAAD,GAAIl+D,KAAK03D,qCAE/C13D,KAAKo+D,WAAWnG,QACnB,QAAqCvxD,IAAjC1G,KAAKyM,MAAMyrD,mBAAmCl4D,KAAK6C,MAAMkE,KAAKyW,QAAQ3N,OAAQ,CAAC,IAADwuD,EACrF,MAAM7gD,EAAUxd,KAAK6C,MAAMkE,KAAKyW,QAAQ3N,OAClCooD,QAAexB,EACjBj5C,EAAQC,UACPzd,KAAK6C,MAAMoC,QAAQiC,QAAQnG,YAAYC,UACxChB,KAAK6C,MAAMoC,QAAQC,cACqB,QADRm5D,EAChCr+D,KAAK6C,MAAMuE,OAAO+2D,8BAAsB,IAAAE,GAAIr+D,KAAK03D,8BACjDl6C,EAAQ8gD,sBAGNt+D,KAAKo+D,WAAWnG,cAEhBj4D,KAAKo+D,WAAW,IAgDlC,IA3CA73C,EAAAA,EAAAA,KACI,KAAK,IAAAg4C,EACD,MAAM/gD,EAAUxd,KAAK6C,MAAMkE,KAAKyW,QAAQ3N,OACxC,OAAK2N,EAIAwgD,GAAkE,QAAvBO,EAAC/gD,EAAQ8gD,sBAAc,IAAAC,GAAtBA,EAAwB9gD,SAIlE,GAAGD,EAAQC,YAAYD,EAAQ8gD,eAAe7gD,WAH1C,GAAGD,EAAQC,WAJX,QASftd,UACI,MAAMqd,EAAUxd,KAAK6C,MAAMkE,KAAKyW,QAAQ3N,OACxC,IAAIooD,EAAuB,GAC3B,GAAIz6C,EAAS,CAAC,IAADghD,EAUFC,EATP,GAA0B,QAA1BD,EAAIx+D,KAAK6C,MAAMoC,QAAQiK,WAAG,IAAAsvD,GAAQ,QAARA,EAAtBA,EAAwBp3D,cAAM,IAAAo3D,GAA9BA,EAAgCtV,iBAChC+O,QDhHjB93D,eACHme,EACAq3C,EACA30D,EACAkE,EACAwkD,EACAgN,GAA+B,IAAAgI,EAE/B,MAAMx9D,GAAY6Y,EAAAA,EAAAA,IAAa7U,EAAcpE,gBAC7C,GAAgC,QAAhC49D,EAAIx5D,EAAcpE,sBAAc,IAAA49D,GAAQ,QAARA,EAA5BA,EAA8BhtD,cAAM,IAAAgtD,GAApCA,EAAsCC,UAAW,CACjD,MAAM3rC,QAAiB4rC,EAAAA,EAAAA,IAAmB15D,EAAcpE,eAAgB,iCAAkC,OAAQ,CAC9Gwd,UAAWA,EACXtd,UAAWA,EACXE,UAAWA,IAEf,GAAwB,MAApB8xB,EAASlK,OAET,OADA5jB,EAAclD,UAAUuM,MAAM,2EACvB,GAEX,MAAMswD,EAAmB7rC,MAAAA,OAAQ,EAARA,EAAUjsB,KACnC,OAAI83D,EACOA,EAAiBl9D,KAAIo0D,IAAgB,IAAAoD,EACxC,MAAO,CACHlxD,IAAsB,QAAnBkxD,EAAEpD,EAAcE,WAAG,IAAAkD,EAAAA,EAAI,GAC1BxzD,QAAS+vD,EAAWxwD,EAAcpE,eAAgB60D,EAAqBjM,EAAaqM,EAAcG,SAClG4I,aAAc/I,EAAcgJ,aAC5BvG,eAAgBzC,EAAciJ,eAC9B/gD,qBAAsB83C,EAAcI,6BAC9B,CACIC,6BAA8B,aAElC1vD,MAIX,GAEX,MAAMiwD,EAAc,IAAIC,EAAAA,sCAAsCt4C,EAAWtd,EAAW01D,EAAiBx1D,GACrG,OAAO21D,EAAAA,EAAAA,qCAAoCF,EAAazxD,GACnDzC,MAAKq0D,GACEA,EACOA,EAAen1D,KAAIo0D,IAAgB,IAAAkJ,EACtC,MAAO,CACHh3D,IAAsB,QAAnBg3D,EAAElJ,EAAcE,WAAG,IAAAgJ,EAAAA,EAAI,GAC1Bt5D,QAAS+vD,EAAWxwD,EAAcpE,eAAgB60D,EAAqBjM,EAAaqM,EAAcG,SAClG4I,aAAc/I,EAAcgJ,aAC5BvG,eAAgBzC,EAAciJ,eAC9B/gD,qBAAsB83C,EAAcI,6BAC9B,CACIC,6BAA8B,aAElC1vD,MAIX,KAEV2H,OAAMpM,IACHiD,EAAclD,UAAUsM,UAAUrM,GAClCiD,EAAclD,UAAUuM,MAAM,sDACvB,MCoDoB2wD,CACX1hD,EAAQC,SACRzd,KAAK21D,uBACJ31D,KAAK6C,MAAMoC,QAAQiC,QAAQnG,YAAYC,UACxChB,KAAK6C,MAAMoC,QAAQC,cACnBsY,EAAQ3D,KACRmkD,EAA0CxgD,EAAQ8gD,oBAAiB53D,QAGvEuxD,QAAexB,EACXj5C,EAAQC,UACPzd,KAAK6C,MAAMoC,QAAQiC,QAAQnG,YAAYC,UACxChB,KAAK6C,MAAMoC,QAAQC,cACqB,QADRu5D,EAChCz+D,KAAK6C,MAAMuE,OAAO+2D,8BAAsB,IAAAM,GAAIz+D,KAAK03D,8BACjDsG,EAA0CxgD,EAAQ8gD,oBAAiB53D,SAGrE1G,KAAKo+D,WAAWnG,cAEhBj4D,KAAKo+D,WAAW,MAG9B,CAAEe,iBAAiB,IAGb,cAANnG,GAAoCh5D,KAAK6C,MAAMkE,KAAK+vD,eAAejnD,OAAQ,CAAC,IAADuvD,EAC3E,MAAMnH,QAAehB,EACjBj3D,KAAK6C,MAAMkE,KAAK+vD,eAAejnD,OAC/B7P,KAAK6C,MAAMoC,QAAQC,cACqB,QADRk6D,EAChCp/D,KAAK6C,MAAMuE,OAAO+2D,8BAAsB,IAAAiB,GAAIp/D,KAAK03D,qCAE/C13D,KAAKo+D,WAAWnG,IAIvBrxC,sBAAsBC,EAAkDC,GAC3E,OAAI9mB,KAAKyM,QAAUqa,GAAa9mB,KAAK6C,MAAMkE,OAAS8f,EAAU9f,KAM3D6K,SAAM,IAAAytD,EACT,MAAM,GAAEl9D,EAAE,OAAEiF,EAAM,UAAEjC,GAAcnF,KAAK6C,OAEjC,UAAEiB,EAAS,sBAAE24D,GAA0Br1D,EAEvCk4D,EAAkD,aAA5Bl4D,EAAOm4D,sBAE7BC,EAA+Bx/D,KAAK8Y,YAAc1R,EAAOq4D,kBAAmB,EAC5EC,EACc,WAAhBt4D,EAAOu4D,UAAgC,SAAoC,cAAhBv4D,EAAOu4D,UAAmC,YAAuB,GAE1HC,EAAqD,QAAhCP,EAAGr/D,KAAK6C,MAAMoC,QAAQiK,IAAI9H,cAAM,IAAAi4D,OAAA,EAA7BA,EAA+BQ,qBACxB,IAADC,EAAhC9/D,KAAK6C,MAAMkE,KAAKyW,QAAQ3N,SACxB7P,KAAK06D,eAAgB1R,EAAAA,EAAAA,qBACjBhpD,KAAK6C,MAAMkE,KAAKyW,QAAQ3N,OAAOo5C,OAC/BjpD,KAAK6C,MAAMoC,QAAQiC,QAAQnG,YACG,QADQ++D,EACtC9/D,KAAK6C,MAAMoC,QAAQiC,QAAQgI,WAAG,IAAA4wD,GAAQ,QAARA,EAA9BA,EAAgC14D,cAAM,IAAA04D,OAAA,EAAtCA,EAAwC5W,mBAG5C0W,GAAyB5/D,KAAK06D,gBAC9B16D,KAAK06D,cAAgB,GAAG16D,KAAK06D,iBAAiBkF,KAGlD,MAAMG,EAA4B//D,KAAKggE,sBAAsBR,EAAqBE,GAC5EO,EAAqCjgE,KAAKkgE,iCAC1C1tD,EAAShM,EAAAA,EAAA,GACPxG,KAAK6C,OAA+C,IACxD4J,MAAOzM,KAAKyM,MACZyqD,aAAc,CACVzkD,YAAazS,KAAK6C,MAClBiB,UAAW4O,GAAAA,CAAW,qBAAoB4sD,EAAa,WAAa,IAAMx7D,IAE9EqtD,MAAOqO,EAAsBx/D,KAAKi8D,iBAAiByD,GAAgB,KACnES,eAAgBngE,KAAK+7D,gBACrBqE,uBAAwBpgE,KAAKg7D,0BAC7BqF,yBAA0BrgE,KAAKk7D,4BAC/BoF,cAAe,CACXh6D,IAAKgO,EAAAA,SACLxQ,UAAW,6BACX2B,MAAOs6D,EAA0Bt6D,MACjC+O,YAAaxU,KAAKyM,MAAM+H,YACxBC,KAAMzU,KAAKyU,KACXC,SAAU1U,KAAK0U,SACfK,UAAU,EACVY,kBAAmBxQ,EAAUo3D,8BAC7B1mD,kBAAmB1Q,EAAUq3D,0BAC7BnnD,yBAA0BrV,KAAK+3D,UAC/B0E,uBAAiD,IAA1BA,EACvBhnD,kBAAmBtQ,EAAUuQ,kBAC7BK,eAAgB/V,KAAK43D,SACrB5hD,gBAAiBhW,KAAK23D,UACtB5zD,IAAKg8D,EAA0BppD,MAEnC4pD,WAAY,CACRC,yBAA0B,CAAE18D,UAAW,0CACvC28D,kCAAmC,CAC/Bn6D,IAAKo6D,EAAAA,oBACL58D,UAAW,+BACX68D,SAAUrB,EACVsB,iBAAkBz7D,EAAUo3D,8BAC5BsE,iBAAkB17D,EAAUq3D,0BAC5BsE,SAAU3+D,EACV4+D,YAAY,EACZh9D,IAAKwF,KAAKC,UAAUy2D,EAAmCtpD,OAE3DlR,MAAOw6D,EAAmCx6D,SAIlD,OAAOzF,KAAK6C,MAAMiR,WAAWtB,GAM1BwlD,sBACHh4D,KAAKgN,SAAS,CAAEqwD,eAAe,IAmD3B6C,iCACJ,MAAMhI,EAAoBl4D,KAAKyM,MAAMyrD,kBAC/BiG,EAAyBn+D,KAAK6C,MAAMuE,OAAO+2D,uBAC7CA,IACAA,EAAuB72D,iBAAkB,GAK7C,IAF6B4Q,EAAAA,gBAAgBC,YAAY+/C,GAE9B,CACvB,GAAIl4D,KAAKyM,MAAMu0D,WAAY,CACvB,MAAMC,EAAa,EACnB,MAAO,CACHx7D,MAAO,CAACzF,KAAKkhE,uBAAuB/C,EAAwB8C,EAAYjhE,KAAKyM,MAAM+H,cACnFmC,KAAM,CAAC,UAGf,MAAO,CAAElR,MAAO,GAAIkR,KAAM,IAG9B,MAAO,CACHlR,MAAO,IAEAyyD,EAAmBv2D,KAAI,CAACC,EAAkBgN,IACrChN,EAAK42D,iBAAmB/C,EAAAA,UAAUgD,MAC3Bz4D,KAAKs7D,sBACR15D,EACAu8D,MAAAA,EAAAA,EAA0Bn+D,KAAK03D,8BAC/B9oD,EACA5O,KAAKyM,MAAM+H,aAGRxU,KAAK46D,kBACRh5D,EACAu8D,MAAAA,EAAAA,EAA0Bn+D,KAAK03D,8BAC/B9oD,EACA5O,KAAKyM,MAAM+H,gBAM3BmC,KAAM,IAAIuhD,EAAmBv2D,KAAIC,GAAQA,EAAKqG,QAqC9C+3D,sBAAsBR,EAA8BE,GACxD,MAAMxH,EAAoBl4D,KAAKyM,MAAMyrD,kBAC/BsF,EAAuBx9D,KAAK6C,MAAMuE,OAAOo2D,qBAC3CA,IACAA,EAAqBl2D,iBAAkB,GAG3C,MAAM65D,EAAW3B,EAAsB,aAAeE,EAItD,OAF6BxnD,EAAAA,gBAAgBC,YAAY+/C,GASlD,CACHzyD,MAAO,IAEAyyD,EAAmBv2D,KAAI,CAACC,EAAkBgN,IAClC5O,KAAKq8D,6BACR8E,EACAv/D,EACA47D,MAAAA,EAAAA,EAAwBx9D,KAAKw3D,4BAC7B5oD,MAKZ+H,KAAM,IAAIuhD,EAAmBv2D,KAAIC,GAAQA,EAAKqG,QAnB1CjI,KAAKyM,MAAMu0D,WACJ,CAAEv7D,MAAO,CAACzF,KAAKu6D,kBAAkBiD,IAAwB7mD,KAAM,CAAC,UAEpE,CAAElR,MAAO,GAAIkR,KAAM,IAoB1B,iBAAiBshD,GACrB,MAAMmJ,EAAephE,KAAK6C,MAAMuE,OAAO6wD,QAAU,GAC3CoJ,EAA2BrhE,KAAKq5D,8BAA8BpB,GAE/D11D,QAAQC,IACT6+D,EAAW1/D,KAAIxB,MAAAA,IACX,GAAIo5D,EAAUf,iBAAmB/C,EAAAA,UAAUgD,OAASc,EAAUtxD,IAC1D,IACI,MACM2xD,EADM,IAAI/2C,IAAI02C,EAAUtxD,KACV6a,aAAatH,IAAI,QACjCo+C,IACAL,EAAUC,gBDhU/Br5D,eAAuCy5D,EAAiB10D,GAC3D,IAAIi1D,EACJ,GAAIP,EAAS,CACT,MAAM5mC,QAAiBsuC,EAAAA,EAAAA,IAA6Bp8D,EAAcpE,eAAgB,CAAC84D,IAEnF,GAAwB,MAApB5mC,EAASlK,OAET,YADA5jB,EAAclD,UAAUuM,MAAM,6CAA6CqrD,KAI/E,MAAMJ,EAAYxmC,EAASjsB,KACvByyD,GAAathD,EAAAA,gBAAgBC,YAAYqhD,KACzCW,EAAkBX,EAAU,IAGpC,OAAOW,ECiT6CoH,CAAwB3H,EAAS55D,KAAK6C,MAAMoC,QAAQC,gBAEtF,MAAOjD,GACDjC,KAAK6C,MAAMb,WACXhC,KAAK6C,MAAMb,UAAUuM,MAAM,gCAIvC,OAAOgrD,MAEb92D,MAAK82D,IACH,MAAMlB,EAAakB,EAAUvpD,QAAOu4B,GAE5BA,EAAQiwB,iBAAmB/C,EAAAA,UAAUgD,OACpClwB,EAAQiwB,iBAAmB/C,EAAAA,UAAUgD,YAA+B/xD,IAAtB6hC,EAAQixB,YAI/Dx5D,KAAKgN,SAAS,CACVkrD,kBAAmB,IAAIG,KAAe+I,GACtC5sD,YAAa,EACbwsD,WAAYQ,KAAKC,MACjBpG,yBAAyB,OAIjCr7D,KAAKgN,SAAS,CACVkrD,kBAAmB,IAAImJ,KAAeD,GACtC5sD,YAAa,EACbwsD,WAAYQ,KAAKC,MACjBpG,yBAAyB,IAIzB4C,iBACJj+D,KAAKgN,SAAS,CACVswD,eAAe,IAIfjB,6BACJ8E,EACAO,EACAr6D,EACAuH,GAC0B,IAA1B6rD,EAAAt+C,UAAAxb,OAAA,QAAA+F,IAAAyV,UAAA,IAAAA,UAAA,GAEA,GAAIulD,EAAMlJ,iBAAmB/C,EAAAA,UAAUgD,MACnC,OAAIgC,GAA0B,eAAb0G,EACNt9D,EAAAA,cAAAA,EAAAA,SAAA,KAAG7D,KAAKs5D,yBAAyBoI,EAAO9yD,EAAOvH,IAEnDxD,EAAAA,cAAAA,EAAAA,SAAA,KAAG7D,KAAK67D,sBAAsB6F,EAAO9yD,EAAOvH,IAEnD,GAAIrH,KAAK8Y,WACL,OAAI2hD,EACOz6D,KAAK2hE,8BAA8BD,EAAO1hE,KAAKs8D,qBAAsB1tD,GAEzE5O,KAAK4hE,6BAA6BF,EAAOr6D,EAAeuH,GAGnE,OAAQuyD,GACJ,IAAK,YACD,OAAOnhE,KAAK2hE,8BAA8BD,EAAO1hE,KAAKs8D,qBAAsB1tD,GAEhF,IAAK,SACD,OAAO5O,KAAK6hE,yBAAyBH,EAAO1hE,KAAKs8D,qBAAsB1tD,GAE3E,IAAK,aACD,OAAO5O,KAAK4hE,6BAA6BF,EAAOr6D,EAAeuH,GAKvE,OAAO/K,EAAAA,cAAAA,EAAAA,SAAA,KAAG7D,KAAKw6D,iBAAiBkH,EAAOr6D,EAAeuH,EAAO6rD,IAI7DpB,8BAA8BpB,GAAqB,IAAA6J,EAAAC,EAAAC,EAAAC,EACvD,MAAMC,EAAmF,QAA5DJ,EAAG9hE,KAAK6C,MAAMuE,OAAO+6D,+CAAuC,IAAAL,GAAAA,EACzF,IAAIM,EAAgBnK,MAAAA,EAAAA,EAAU,GAC9B,MAAMoK,GACDC,EAAAA,iBAAiBC,kBAAgD,QAA/BR,EAAC/hE,KAAK6C,MAAMkE,KAAKyW,QAAQ3N,cAAM,IAAAkyD,OAAA,EAA9BA,EAAgCS,mBACnEF,EAAAA,iBAAiBC,kBAAgD,QAA/BP,EAAChiE,KAAK6C,MAAMkE,KAAKyW,QAAQ3N,cAAM,IAAAmyD,OAAA,EAA9BA,EAAgC1D,gBAClEmE,EAAuC,QAAjCR,EAAGjiE,KAAK6C,MAAMkE,KAAKyW,QAAQ3N,cAAM,IAAAoyD,OAAA,EAA9BA,EAAgChZ,OAU/C,OATIiZ,GAA2BG,GAAoBI,IAC/CL,EAAgBA,EAAcpyD,QAAOpO,IAAO,IAAA8gE,EAExC,QAD8D,QAA5BA,EAAG9gE,EAAKqc,4BAAoB,IAAAykD,OAAA,EAAzBA,EAA2BtM,iCAG/Dl+C,EAAAA,gBAAgBC,YAAYiqD,KAC7BA,EAAgBnK,MAAAA,EAAAA,EAAU,KAG3BmK,EAiLHP,yBAAyBnV,EAAmBrlD,EAA+BuH,GAAa,IAAA+zD,EAC5F,OACI9+D,EAAAA,cAAA,OACIC,UAAW,mBAAkB9D,KAAKyM,MAAM4wD,cAAgB,SAAW,IACnE/xD,IAAKtL,KAAKw7D,YAAY5sD,GAAM,aACW,QADX+zD,EAChB3iE,KAAK6C,MAAMuE,OAAOw7D,iBAAS,IAAAD,EAAAA,EAAIE,EAAAA,kBAE3Ch/D,EAAAA,cAACmE,EAAAA,GAAK/D,OAAAC,OAAA,CACFpD,eAAgBd,KAAK6C,MAAMoC,QAAQC,cAAcpE,eACjDgD,UAAU,0BACN4oD,EAAK,CACT3C,YAAuB,IAAVn7C,EAAc5O,KAAK06D,cAAgBhO,EAAMzkD,IACtDd,aAAcnH,KAAK6C,MAAMoC,QAAQiC,QAAQC,aACzCE,cAAeA,EACfa,oBAAoB,OACpB2D,QAAS7L,KAAK29D,oBACdmF,YAAc9iE,KAAKyM,MAAM4wD,eAAiBr9D,KAAK09D,8BAA4Bh3D,EAC3EvE,GAAI,GAAGnC,KAAK6C,MAAMV,sBAAsByM,IACxCg+C,uBAAqB,EACrBwO,sBAAuBp7D,KAAKyM,MAAM4uD,0BAA4Br7D,KAAK6C,MAAMuE,OAAOq4D,gBAChF9E,oBAA+B,IAAV/rD,KAEzB/K,EAAAA,cAACmE,EAAAA,GAAK/D,OAAAC,OAAA,CACFiP,KAAK,eACLrS,eAAgBd,KAAK6C,MAAMoC,QAAQC,cAAcpE,eACjDgD,UAAU,6BACN4oD,EAAK,CACT3C,YAAuB,IAAVn7C,EAAc5O,KAAK06D,cAAgBhO,EAAMzkD,IACtD4D,QAAS7L,KAAKy9D,iBACdt2D,aAAcnH,KAAK6C,MAAMoC,QAAQiC,QAAQC,aACzCE,cAAeA,EACfa,oBAAoB,OACpB/F,GAAI,GAAGnC,KAAK6C,MAAMV,aAAayM,IAC/Bm0D,YAAc/iE,KAAKyM,MAAM4wD,eAAiB2F,EAAAA,iCAA+Bt8D,EACzEkmD,uBAAqB,EACrBwO,sBAAuBp7D,KAAKyM,MAAM4uD,0BAA4Br7D,KAAK6C,MAAMuE,OAAOq4D,gBAChF9E,oBAA+B,IAAV/rD,MAM7B8uD,wBAAwBhoC,GAAyC,IAAAutC,GACrEC,EAAAA,EAAAA,wBAAuBxtC,EAAkC,QAA7ButC,EAAEjjE,KAAK6C,MAAMuE,OAAOw7D,iBAAS,IAAAK,EAAAA,EAAIE,OAAON,EAAAA,mBAGhEO,kCAAkC1tC,GACtC,MAAM5qB,EAAS9K,KAAKyM,MAAM4uD,wBAA2B3lC,EAAM5qB,OAA8B4qB,EAAMC,cACzF0tC,EAA+B,uBACrC,GAAKrjE,KAAKyM,MAAMmwD,oBAiBZ9xD,EAAO6qC,MAAM2tB,UAAY,GACzBx4D,EAAOy4D,UAAU5/C,OAAO0/C,GACxBv4D,EAAO04D,cAAe7tB,MAAM8tB,SAAW,GACvCzjE,KAAKgN,SAAS,CACV4vD,qBAAqB,QArBQ,CAAC,IAAD8G,EACjC,MAAMC,EAAS74D,EAAO84D,wBAChBhB,EAAY/hC,OAAkC,QAA5B6iC,EAAC1jE,KAAK6C,MAAMuE,OAAOw7D,iBAAS,IAAAc,EAAAA,EAAIb,EAAAA,kBAElDgB,EAAYnuC,EAAMouC,QAAUH,EAAOI,KACnCC,EAAYtuC,EAAMuuC,QAAUN,EAAOlkE,IACnCykE,EAAkBL,EAAYjB,EAC9BuB,EAAkBH,EAAYpB,EAEpC93D,EAAO6qC,MAAM2tB,UAAY,SAASV,KAClC93D,EAAOy4D,UAAUa,IAAIf,GACrBv4D,EAAO04D,cAAe7tB,MAAM8tB,SAAW,OACvC34D,EAAO04D,cAAea,SAASH,EAAkBL,EAAWM,EAAkBH,GAC9EhkE,KAAKgN,SAAS,CACV4vD,qBAAqB,KAYzBe,oBAAoBjoC,GAAyC,IAAA4uC,EAC7DhzD,OAAOizD,YAAc,IAErBvkE,KAAKojE,kCAAkC1tC,KAG3C8uC,EAAAA,EAAAA,qBAAoB9uC,EAAkC,QAA7B4uC,EAAEtkE,KAAK6C,MAAMuE,OAAOw7D,iBAAS,IAAA0B,EAAAA,EAAInB,OAAON,EAAAA,mBACjE7iE,KAAKgN,SAAS,CACVqwD,eAAe,KAIfI,iBAAiB/nC,IACrB+uC,EAAAA,EAAAA,2BAA0B/uC,GAC1B11B,KAAKgN,SAAS,CACVqwD,eAAe,IAIfO,2BAA2BloC,GAC3BpkB,OAAOizD,YAAc,IAErBvkE,KAAKojE,kCAAkC1tC,KAI3CgvC,EAAAA,EAAAA,qBAAoBhvC,GAEpB11B,KAAKgN,SAAS,CACVqwD,eAAe,KAIfQ,yBAAyBnoC,IAC7BivC,EAAAA,EAAAA,yBAAwBjvC,GAExB11B,KAAKgN,SAAS,CACVqwD,eAAe,IAIfsE,8BAA8BjV,EAAmBrlD,EAA+BuH,GAAa,IAAAg2D,EACjG,OACI/gE,EAAAA,cAAA,OAAKC,UAAU,+BACXD,EAAAA,cAAA,oBAC2C,QAD3C+gE,EACgB5kE,KAAK6C,MAAMuE,OAAOw7D,iBAAS,IAAAgC,EAAAA,EAAI/B,EAAAA,iBAC3C/+D,UAAU,8BACVqP,KAAK,eACL0xD,WAAY7kE,KAAK69D,yBACjBhyD,QAAS7L,KAAK69D,yBACdkF,YAAc/iE,KAAKyM,MAAM4wD,eAAiByH,EAAAA,+BAA6Bp+D,IAE3E7C,EAAAA,cAACmE,EAAAA,GAAK/D,OAAAC,OAAA,CACFpD,eAAgBd,KAAK6C,MAAMoC,QAAQC,cAAcpE,eACjDgD,UAAU,0BACN4oD,EAAK,CACT3C,YAAuB,IAAVn7C,EAAc5O,KAAK06D,cAAgBhO,EAAMzkD,IACtDd,aAAcnH,KAAK6C,MAAMoC,QAAQiC,QAAQC,aACzC0E,QAAS7L,KAAK49D,2BACdv2D,cAAeA,EACfa,oBAAoB,OACpB46D,YAAc9iE,KAAKyM,MAAM4wD,eAAiB0H,EAAAA,gCAA8Br+D,EACxEvE,GAAI,GAAGnC,KAAK6C,MAAMV,sBAAsByM,IACxCg+C,uBAAqB,EACrBwO,sBAAuBp7D,KAAKyM,MAAM4uD,0BAA4Br7D,KAAK6C,MAAMuE,OAAOq4D,gBAChF9E,oBAA+B,IAAV/rD,MAM7BgzD,6BAA6BlV,EAAmBrlD,EAA+BuH,GACnF,OACI/K,EAAAA,cAAA,OAAKC,UAAU,yBACXD,EAAAA,cAACmE,EAAAA,GAAK/D,OAAAC,OAAA,CACFpD,eAAgBd,KAAK6C,MAAMoC,QAAQC,cAAcpE,eACjDgD,UAAU,0BACN4oD,EAAK,CACT3C,YAAuB,IAAVn7C,EAAc5O,KAAK06D,cAAgBhO,EAAMzkD,IACtDd,aAAcnH,KAAK6C,MAAMoC,QAAQiC,QAAQC,aACzCE,cAAeA,EACfa,oBAAoB,OACpBkzD,sBAAuBp7D,KAAKyM,MAAM4uD,wBAClCV,oBAA+B,IAAV/rD,KAEzB/K,EAAAA,cAAA,OAAKC,UAAU,kCAEXD,EAAAA,cAAA,KACIM,KAAK,sBACLoB,MAAOvF,KAAK6C,MAAMsC,UAAU22D,oBAC5B3oD,KAAK,SACL7H,IAAKtL,KAAKs3D,2BACVzrD,QAAS7L,KAAK+7D,gBACdj4D,UAAU,mDAoDtBq4D,uBAAuB3+C,GAAsB,IAAAwnD,EACjD,MAAO,CACH/8D,IAA4B,QAAzB+8D,EAAExnD,EAAQ+F,uBAAe,IAAAyhD,EAAAA,EAAI,IAIhCzK,kBAAkBlzD,GACtB,OACIxD,EAAAA,cAAA,OAAKC,UAAU,0BACXD,EAAAA,cAACmE,EAAAA,GAAK,CACFlH,eAAgBd,KAAK6C,MAAMoC,QAAQC,cAAcpE,eACjDgD,UAAU,gCACVmE,IAAI,QACJd,aAAcnH,KAAK6C,MAAMoC,QAAQiC,QAAQC,aACzCE,cAAeA,MAAAA,EAAAA,EAAiBrH,KAAKw3D,4BACrCtvD,oBAAoB,WAM5Bg5D,uBACJ75D,EACAuH,EACAisD,GAMA,MAAO,CACHC,4BAA6B,CACzBx0D,IAAK,KACLxC,UAPQ4O,GAAAA,CACZ,mCACAmoD,IAAwBjsD,EAAQ,0CAA4C,IAMxEuE,KAAM,MACN4nD,SAAU,EACVh3D,IAAK,QACL,aAAc,GACd,gBAAiB82D,IAAwBjsD,EACzC/C,QAAS7L,KAAKg7D,0BAA0BpsD,GACxCqsD,UAAWj7D,KAAKk7D,4BAA4BtsD,IAEhDusD,QACIt3D,EAAAA,cAACmE,EAAAA,GAAK,CACFlH,eAAgBd,KAAK6C,MAAMoC,QAAQC,cAAcpE,eACjDgD,UAAU,0CACVmE,IAAI,QACJd,aAAcnH,KAAK6C,MAAMoC,QAAQiC,QAAQC,aACzCE,cAAeA,MAAAA,EAAAA,EAAiBrH,KAAK03D,8BACrCxvD,oBAAoB,WAiB5B8zD,eACJ,GAAIh8D,KAAKyM,MAAMswD,YAAa,CAAC,IAADkI,EACe,QAAvCA,EAAAjlE,KAAKs3D,2BAA2BpqD,eAAO,IAAA+3D,GAAvCA,EAAyC71D,QACzC,MAAM81D,EAAYllE,KAAKo3D,kBAAkB57C,IAAIxb,KAAKyM,MAAM+H,aACxD,GAAI0wD,GAAaA,EAAUpjB,UAAYojB,EAAUpjB,SAASnhD,QAAU,EAAG,CACnE,MAAM+rD,EAAQwY,EAAUpjB,SAAS,GAAGZ,cAAc,OAC9CwL,GACAA,EAAMyY,gBAAgB,SAG9BnlE,KAAKgN,SAAS,CACVqwD,eAAe,IAGvBr9D,KAAKgN,SAAS,CACVqwD,eAAe,EACfN,aAAc/8D,KAAKyM,MAAMswD,eAE7BlF,EAAAA,EAAAA,0BACAuN,EAAAA,EAAAA,6BAyDR,kGCjmCA,MAYMC,EAAqBC,IACvB,MAAM,yBAAE9E,EAAwB,kCAAEC,EAAiC,MAAEh7D,GAAU6/D,EAE/E,OACIzhE,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKs8D,GACN38D,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKu8D,GAAoCh7D,GAASA,EAAM9D,IAAI4jE,MAKvEA,EAAwB3/D,IAC1B,MAAM,4BAAEk1D,EAA2B,QAAEK,GAAYv1D,EAEjD,OAAO/B,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK42D,GAA8BK,IAGnD,EA5B2Dt4D,IACvD,MAAM,cAAEy9D,EAAa,WAAEC,EAAU,aAAErJ,EAAY,MAAE/F,GAAUtuD,EAE3D,OACIgB,EAAAA,cAACwQ,EAAAA,OAAMpQ,OAAAC,OAAA,GAAKgzD,GACRrzD,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKo8D,IACTnP,EACAkU,EAAkB9E,0pBCqD/B,MAAMiF,EAAqDj3C,IAUtD,IAVuD,MACxDzoB,EAAK,MACL6F,EAAK,QACL1G,EAAO,GACP9C,EAAE,SACF2E,EAAQ,mBACRo4C,EAAkB,SAClBD,EAAQ,SACR2V,EAAQ,cACRtZ,GACH/sB,EACG,OACI1qB,EAAAA,cAAA,KAAGC,UAAW,2BAA2B8wD,KACrC/wD,EAAAA,cAAA,QAAMC,UAAU,4BAA4B6H,GAC3C7F,GAAmB,IAAVA,EACNjC,EAAAA,cAACgD,EAAAA,eAAc,CACXE,KAAM,CACFjB,MAAO,CAAEkB,wBAAyBlB,IAEtCyqB,cAAe0uB,EACfh6C,QAASA,EACT9C,GAAIA,EACJ2E,SAAUA,EACVhD,UAAU,2BACV0sB,aAAc8qB,IAGlBz3C,EAAAA,cAAA,QAAMC,UAAU,4BAA4Bo7C,KAMtDumB,EAA4B,SAC9B5iE,EACAiD,EACA8uD,GAEiB,IADjBjpD,EAAAwQ,UAAAxb,OAAA,QAAA+F,IAAAyV,UAAA,GAAAA,UAAA,GAAgB,GAEhB,OACItY,EAAAA,cAAC2hE,EAAgB,CACb1/D,MAAOA,EACP6F,MAAOA,EACP1G,QAASpC,EAAMoC,QACf9C,GAAIU,EAAMV,GACV2E,SAAUjE,EAAMiE,SAChBo4C,mBAAoBr8C,EAAMq8C,mBAC1BD,SAAUp8C,EAAMo8C,SAChBj9C,UAAWa,EAAMb,UACjB4yD,SAAUA,EACVtZ,cAAez4C,EAAMy8C,qBAAqB7uB,YAKhDqkC,EAA0BliC,GACpBA,GAAiBA,EAAc4O,eAAkB,EAmEvDkkC,EAAkB,SACpB11C,GAIA,IAAAgsB,EAAA,IAHA2pB,EAAAxpD,UAAAxb,OAAA,QAAA+F,IAAAyV,UAAA,IAAAA,UAAA,GACAsH,EAAgEtH,UAAAxb,OAAA,EAAAwb,UAAA,QAAAzV,EAChEk/D,EAA2BzpD,UAAAxb,OAAA,EAAAwb,UAAA,QAAAzV,EAE3B,OAAKi/D,EAGEliD,MAAAA,GAAoD,QAAzBu4B,EAA3Bv4B,EAA6BgQ,+BAAuB,IAAAuoB,OAAA,EAApDA,EAAsDlzC,MAAK+8D,GAAMA,IAAO71C,IAFpE41C,GAMFlmB,EAAgB78C,IACzB,MAAM,eACFijE,EAAc,yBAEdC,EAAwB,UACxBC,EAAS,wBAETC,EAAuB,eACvBnb,EAAiB,EAAC,YAClBnhC,EAAW,kBACXu8C,GACArjE,EAAMiZ,MAEJ,QAAEyT,EAAO,kBAAE42C,EAAiB,kBAAEne,EAAiB,WAAEK,GA7E1B+d,EAC7BtqD,EACAwjC,EACA77B,EACAiB,EACAk7B,EACAE,KAEA,MAAMxyB,EAAyBgyB,GAAwBA,EAAqB1zB,uBACtExD,EAAwBk3B,GAAwBA,EAAqBh3B,sBAErE+9C,GADYvqD,EAAKiI,WAAa,IACJpiB,KAAIod,GAAYA,EAASc,eACnDymD,OAAmD5/D,IAA7BoV,EAAKyqD,oBAAoCzqD,EAAKyqD,oBAAsB,EAC1FC,OAAqD9/D,IAA9BoV,EAAK2qD,qBAAqC3qD,EAAK2qD,qBAAuB,EAOnG,IAAIpe,EAAiC,EAuBrC,OArBIA,OADyB3hD,IAAzBk5C,QAA2Dl5C,IAArBo5C,EACzBhkC,EAAK2qD,qBAEL7mB,IAAyBE,EAAmB0mB,EAAuBF,EAAsBxqD,EAAK2qD,qBAmBxG,CACHl3C,QAlBY82C,EAAcz9C,MAC1BoH,KAEyB,KAAjBA,IACCA,IACG01C,EAAgB11C,EAActL,EAAmCjB,EAA6B6J,IAC9F0C,IAAiB5H,MAa7B+9C,kBAVsBE,EAAcz9C,MAAKoH,KAAkBA,GAAgBA,IAAiB5H,IAW5F4/B,kBAVsBqe,EAAcz9C,MACpCoH,KACMA,GACFA,IACI01C,EAAgB11C,EAActL,EAAmCjB,EAA6B6J,IAClG0C,IAAiB5H,IAMrBigC,WAAAA,IA8BkE+d,CAClEvjE,EAAMiZ,KACNjZ,EAAMy8C,qBACNz8C,EAAM4gB,4BACN5gB,EAAM6hB,kCACN7hB,EAAM+8C,qBACN/8C,EAAMi9C,kBAGV,IAAI78C,EAEJ,QAAmCyD,IAA/B7D,EAAM+8C,2BAAiEl5C,IAA3B7D,EAAMi9C,iBAClD78C,EAAa,CACT22C,SAAU6rB,EAA0B5iE,EAAOijE,EAAgB,YAAajjE,EAAM87C,eAC9E5E,IAAK0rB,EAA0B5iE,EAAOsjE,EAAoBH,OAAYt/D,EAAW,aAAc7D,EAAMg8C,UACrG1E,WAAYsrB,EAA0B5iE,EAAO8mB,EAAa,QAAS9mB,EAAM83C,iBACzEb,YACKosB,GAAqBT,EAA0B5iE,EAAOqjE,EAAmB,gBAAiBrjE,EAAM88C,wBACjGj5C,OAEL,CACH,MAAMggE,OAA0ChgE,IAAtBw/D,EAAkCA,EAAoB,EAC1ES,OAAsDjgE,IAA5Bu/D,EAAwCA,EAA0B,EAC5FW,OAAqClgE,IAAds/D,GAA2BA,EAAY,EAM9Da,EACFhkE,EAAM+8C,uBAAyB/8C,EAAMi9C,iBAAmB4mB,EAAoBC,EAA0BD,EAEpGI,EAAuBjkE,EAAM+8C,sBAAwB/8C,EAAMi9C,iBAAmBimB,EAA2BD,EAE/G7iE,EAAa,CACT22C,SAAU6rB,EAA0B5iE,EAAOikE,EAAsB,YAAajkE,EAAM87C,eACpF5E,IAAKl3C,EAAMi9C,iBACL2lB,EACI5iE,EACAsjE,GAAqBS,EAAuBZ,OAAYt/D,EACxD,aACA7D,EAAMg8C,UAEV,GACN1E,WAAYsrB,EAA0B5iE,EAAO8mB,EAAa,QAAS9mB,EAAM83C,iBACzEb,YACKosB,GAAqBT,EAA0B5iE,EAAOgkE,EAAwB,gBAAiBhkE,EAAM88C,wBACtGj5C,GAMZ,GAHI6oB,IACAtsB,EAAW42C,SAAW4rB,EAA0B5iE,EAAOmlD,EAAoBK,OAAa3hD,EAAW,WAAY7D,EAAM+7C,gBAErH/7C,EAAM+vB,cAAe,CACrB,MAAMuiC,EA5IiBC,EAACxiC,EAA+B9W,KAC3D,MAGMu5C,GAAsBziC,EAAcgL,iBAAmB,IAAI8D,QAHzC4zB,CAACtkC,EAAemL,IAC7BnL,GAASmL,EAASS,SAAW,IAEiD,GACnF+I,GAAU7pB,EAAK6N,aAAe,GAAKmrC,EAAuBliC,GAChE,OAAO2iC,KAAKtyB,IAAIoyB,EAAoB1vB,IAsITyvB,CAAuBvyD,EAAM+vB,cAAe/vB,EAAMiZ,MACnE0lB,EAAgBszB,EAAuBjyD,EAAM+vB,eAC7C6O,GAlJ0B7O,EAkJ6B/vB,EAAM+vB,gBAjJ9CA,EAAc6O,uBAA0B,EAkJvD+zB,GAA4B7rC,GAAe,GAAKwrC,EAAiB3zB,EAAgBC,EAEnFD,EAAgB,IAChBv+B,EAAWg3C,QAAUwrB,EAA0B5iE,GAAQ2+B,EAAe,UAAW3+B,EAAMi8C,cAAgB,mBAGvGqW,EAAiB,IACjBlyD,EAAWk5B,SAAWspC,EAA0B5iE,GAAQsyD,EAAgB,YAAatyD,EAAMk8C,eAAiB,qBAG5Gtd,EAAwB,IACxBx+B,EAAWi3C,gBAAkBurB,EACzB5iE,GACC4+B,EACD,yBACA5+B,EAAMu8C,sBAAwB,2BAItCn8C,EAAWk3C,WAAasrB,EAAyBj/D,EAAAA,EAAC,GACzC3D,GAAK,IAAEo8C,cAAUv4C,IACtB8uD,EACA,QACA3yD,EAAM83C,iBA1KsB/nB,IAAAA,EAkLpC,OAJIk4B,EAAiB,IACjB7nD,EAAW+2C,eAAiByrB,EAA0B5iE,GAAQioD,EAAgB,kBAAmBjoD,EAAMm8C,sBAGpG/7C,wvBClPX,MAAM8jE,UAA0BljE,EAAAA,cAK5BtE,YAAYsD,GACRyJ,MAAMzJ,GAoFH,KAAAmkE,oBAAuBtxC,GAA0C11B,KAAK6C,MAAMuE,OAAOg+B,QAAShiC,KAAOsyB,EAAM5qB,OAAOC,MAOtG,KAAAk8D,qCAAuC9mE,MAAAA,IACpD,MAAM8E,EAAUjF,KAAK6C,MAAMoC,QACrBiiE,EAAmCjiE,EAAQiK,IAAI9H,OAAO+/D,wBACtDC,EAA8BniE,EAAQiK,IAAI9H,OAAOigE,uBACjDC,EAAgBpvD,EAAAA,gBAAgBqvD,YAAYrqD,GAClD,GACIhF,EAAAA,gBAAgBC,YAAYmvD,IAC5BpvD,EAAAA,gBAAgBC,YAAY+uD,KAC3BA,EAAiCx7C,SAAS87C,EAAAA,eAAeC,OAC1DvvD,EAAAA,gBAAgBC,YAAYivD,KAC3BA,EAA4B17C,SAAS87C,EAAAA,eAAeC,MACvD,CACE,MAAMC,QAAwCC,EAAAA,EAAAA,wDAC1C,IAAIC,EAAAA,mDACAN,EACAtnE,KAAK6C,MAAMoC,QACX4iE,EAAAA,4BAA4BC,aAEhC9nE,KAAK6C,MAAMoC,QAAQC,eAGnBgT,EAAAA,gBAAgBC,YAAYuvD,IAC5B1nE,KAAKgN,SAAS,CAAE06D,gCAAAA,MASX,KAAAK,iBAAmB5nE,MAAAA,IAChC,IAAI+c,EAAWld,KAAKyM,MAAMyQ,SACtB8qD,EAAgBhoE,KAAKyM,MAAMu7D,cAC/B,MAAMC,EAA4BC,EAAkBhrD,UAC/ChF,EAAAA,gBAAgBC,YAAY+E,IAAahF,EAAAA,gBAAgBC,YAAY8vD,IAItE/vD,EAAAA,gBAAgBC,YAAY+E,IAC5BhF,EAAAA,gBAAgBC,YAAY8vD,KAC3B/vD,EAAAA,gBAAgBiwD,OAAOjrD,EAAU+qD,IALlC/qD,EAAW+qD,EACXjoE,KAAKgN,SAAS,CAAEkQ,SAAAA,UAQqBxW,IAA9BuhE,GAA2C/vD,EAAAA,gBAAgBC,YAAYnY,KAAKyM,MAAMyQ,YACzFA,EAAW,GACXld,KAAKgN,SAAS,CAAEkQ,SAAUA,KAG1B2vB,EAAAA,GAA0BpqB,YAAcvK,EAAAA,gBAAgBC,YAAYnY,KAAKyM,MAAMi7D,wCACzE1nE,KAAKinE,qCAAqC/pD,GAGC,gBAAjDld,KAAK6C,MAAMuE,OAAO8gE,kBAAkBE,WACpCJ,QAAsBK,EAAAA,EAAAA,oCAClB,IAAIC,EAAAA,qCAAqCprD,EAASvb,KAAI4mE,GAAKA,EAAE9qD,YAC7Dzd,KAAK6C,MAAMoC,QAAQC,eAEvBlF,KAAKgN,SAAS,CAAEg7D,cAAeA,MAItB,KAAAQ,YAAc,CAC3BhrD,EACA5O,EACA65D,KACmC,IAAArhD,EAAAshD,EACnC,IAAKlrD,IAAYA,EAAQ3D,KAErB,OADA7Z,KAAK6C,MAAMb,UAAU2mE,MAAM,wDACpB,KAEX,MAAM3lE,GAAmBiO,EAAAA,EAAAA,oBACrBjR,KAAK6C,MAAMoC,QAAQiC,QAAQgK,kBAC3BlR,KAAK6C,MAAMsO,aACXnR,KAAK6C,MAAMb,YAET,cAAEqF,EAAa,oBAAEuhE,GAAwB5oE,KAAK6C,MAAMuE,OACpDjC,EAAYnF,KAAK6C,MAAMsC,UACvB0jE,EAAgB7oE,KAAK6C,MAAMoC,QAAQiK,IAAI9H,OAAO0hE,eAC9CC,EAAYH,IAA0C,SAAlBC,GAA8C,oBAAlBA,GAChEG,EACFhpE,KAAK6C,MAAMoS,OAASjV,KAAK6C,MAAMoS,MAAMg0D,WAAajpE,KAAK6C,MAAMoS,MAAMg0D,UAAUtoE,OAAS,EAAIX,KAAK6C,MAAMoS,MAAMg0D,UAAU,GAAK,KACxHC,EAA8BhxD,EAAAA,gBAAgBC,YAAYnY,KAAK6C,MAAMoS,MAAMk0D,yBAC3EnpE,KAAK6C,MAAMoS,MAAMk0D,wBAAwB,GACzC,KAIAC,EADqBvoC,OAAOrjB,EAAQ6rD,cADtB,EAGmBlkE,EAAUmkE,qBAAuBnkE,EAAUokE,+BAC5EC,EAA0D,QAAtCpiD,EAAGpnB,KAAK6C,MAAMkE,KAAK4S,aAAa9J,cAAM,IAAAuX,OAAA,EAAnCA,EAAqCte,MAC9D6Q,GAAsC,0DAAtBA,EAAaE,OAE3B4vD,EAA2C,CAC7CC,oBAAqBvkE,EAAUukE,qBAEnC,MAAO,CACHC,iBAAkB,CACdrjE,IAAK,KACLxC,UAAW,8BACXqP,KAAM,WACNpP,IAAK6K,GAETg7D,iBACI/lE,EAAAA,cAACgmE,EAAAA,iBAAgB,CACb5kE,QAASjF,KAAK6C,MAAMoC,QACpBjC,iBAAkBA,EAClBqE,cAAeA,EACfkpB,cAAeprB,EAAUgrB,UACzBpD,kBAAmB5nB,EAAU4nB,kBAC7BC,iBAAkB7nB,EAAU6nB,iBAC5B88C,gBAAiB3kE,EAAU2kE,gBAC3BR,qBAAsBF,EACtBL,UAAWA,EACX5mE,GAAInC,KAAK6C,MAAMV,GACf2E,SAAU9G,KAAK6C,MAAMiE,SACrBC,KAAM,CAAEyW,QAAAA,EAASirD,aAAAA,GACjBsB,gBAAiBf,EACjBG,wBAAyBD,EACzBM,qBAAsBA,MAAAA,OAAoB,EAApBA,EAAsB1vD,UAC5C2vD,eAAgBA,EAChBO,wBAAmE,QAA5CtB,EAAE1oE,KAAKyM,MAAMi7D,uCAA+B,IAAAgB,OAAA,EAA1CA,EAA4C5/D,MACjEmhE,IAAqB,IAAAC,EAAA,OACjBhyD,EAAAA,gBAAgBC,YAAY8xD,IAC5BA,EAAsB,GAAGE,mBAA4C,QAA7BD,EAAM1sD,EAAQglD,uBAAe,IAAA0H,EAAAA,EAAI1sD,EAAQC,iBAUxF,KAAA2sD,gBAAkBjqE,UAC/B,MAAMkqE,EAAerqE,KAAKyM,MAAMyQ,SAC1BA,QAAiBotD,EAAAA,EAAAA,gCACnB,IAAIC,EAAAA,iCAAiCF,GACrCrqE,KAAK6C,MAAMoC,QAAQC,eAEnB2nC,EAAAA,GAA0BpqB,iBACpBziB,KAAKinE,qCAAqC/pD,GAGpDld,KAAKgN,SAAS,CAAEkQ,SAAAA,KAUH,KAAAstD,iBAAmB,CAACC,EAAsBC,EAAyBC,KAChF,IAAK99B,EAAAA,GAA0BpqB,UAC3B,OAAO,KAGX,IAAKioD,IAAmBC,EACpB,OAAO,KAGX,MAAMzpE,GAAY6Y,EAAAA,EAAAA,IAAa/Z,KAAK6C,MAAMoC,QAAQiC,UAClD8S,EAAAA,EAAAA,mBAAkB9Y,GAClB,MAAM0pE,GAAiBr7D,EAAAA,EAAAA,IAAW,SAAUvP,KAAK6C,MAAMoC,QAAQC,eAC/D,IAAK0lE,EACD,OAAO,KAGX,MAAMhX,EAAM,IAAI/wC,IAAI+nD,EAAgBt5D,OAAO7B,SAAStL,MAcpD,OAZIwmE,GAEA/W,EAAI9wC,aAAalI,IAAI,cAAe+vD,EAAY5sD,YAChD61C,EAAI9wC,aAAalI,IAAI,QAAS6vD,GAC9B7W,EAAI9wC,aAAalI,IAAI,YAAa,GAAG1Z,MAC9BwpE,IAEP9W,EAAI9wC,aAAalI,IAAI,iBAAkB8vD,GACvC9W,EAAI9wC,aAAalI,IAAI,QAAS6vD,GAC9B7W,EAAI9wC,aAAalI,IAAI,YAAa,GAAG1Z,MAIrC2C,EAAAA,cAAC6H,EAAAA,OAAM,CACH5H,UAAU,sDACVyB,MAAOvF,KAAK6C,MAAMsC,UAAU0lE,iBAC5B1mE,KAAMyvD,EAAIzvD,MAETnE,KAAK6C,MAAMsC,UAAU0lE,mBAzR9B7qE,KAAKgoE,cAAgB,GACrBhoE,KAAKyM,MAAQ,CACTyQ,SAAUld,KAAK6C,MAAMuE,OAAO8gE,kBAAkBhrD,UAAY,GAC1D8qD,cAAehoE,KAAKgoE,eAAiB,IAEzChoE,KAAKgD,kBAAmBiO,EAAAA,EAAAA,oBACpBjR,KAAK6C,MAAMoC,QAAQiC,QAAQgK,kBAC3BlR,KAAK6C,MAAMsO,aACXnR,KAAK6C,MAAMb,WAIZ,0BACChC,KAAK6C,MAAMuE,OAAO0jE,+BAAiC9qE,KAAK6C,MAAMoC,QAAQC,cAAcpE,eAAeymB,KAAKC,uBAClGxnB,KAAKoqE,kBAIZx4D,SACH,MAAM,QAAEwzB,EAAO,UAAEthC,EAAS,0BAAEinE,GAA8B/qE,KAAK6C,MAAMuE,QAC/D,UAAEjC,GAAcnF,KAAK6C,MACrB6nE,EAAiB1qE,KAAK6C,MAAMuE,OAAO8gE,kBAAkB8C,qBACrDL,EAAc3qE,KAAK6C,MAAMuE,OAAO8gE,kBAAkByC,YAIxD3qE,KAAK+nE,iBAAiB/nE,KAAK6C,MAAMuE,OAAO8gE,mBAExC,MAAMhrD,EAAWld,KAAKyM,MAAMyQ,SACtB8qD,EAAgBhoE,KAAKyM,MAAMu7D,cAE3BiD,EAAqC,aAAxBjrE,KAAK6C,MAAMuE,OAAO8jE,OAC/BT,EAAerlC,EAAUA,EAAQhiC,KAAO,GACxC+nE,EAAmB/lC,GACrBvhC,EAAAA,cAACgpC,EAAAA,GAAa,CACV/oC,UAAU,iCACVwC,IAAK8+B,EAAQ9+B,KAAO,KACpBlD,KAAMqnE,EACN3yB,UAAW,CAAE3oB,OAAQnvB,KAAKgnE,oBAAqBlmE,eAAgBd,KAAK6C,MAAMoC,QAAQiC,WAKpFkkE,EAAkBluD,MAAAA,OAAQ,EAARA,EAAUvb,KAAI,CAACC,EAA2BgN,KAC9D,MAAMy8D,EAAiBrrE,KAAKwoE,YAAY5mE,EAAMgN,EAAOo5D,EAAgBA,EAAcsD,GAAG18D,QAASlI,GAC/F,OAAQ47D,EAAAA,iBAAiBC,kBAAkB8I,QAAmC3kE,EAAjB2kE,KAG3DE,EAA0B/kE,EAAAA,EAAA,GACzBxG,KAAK6C,OAAK,IACbuiC,QAAS+lC,EACT1K,kCAAmC,CAC/Bn6D,IAAKo6D,EAAAA,oBACL58D,UAAW,GACX88D,iBAAkB,GAAG6J,KAAgBtlE,EAAUyQ,kBAC/CirD,iBAAkB,GAAG4J,KAAgBtlE,EAAU2Q,cAC/CgrD,SAAU9gE,KAAK6C,MAAMV,GACrBa,iBAAkBhD,KAAKgD,kBAE3BwoE,2BAA4B,CACxB/4D,YAAazS,KAAK6C,MAClBiB,UAAW4O,GAAAA,CAAW,wBAAyB5O,IAEnD2nE,mBAAoB,CAChBnlE,IAAK,KACLxC,UAAW,gCAEfmnE,WAAAA,EAEA/tD,SACIhF,EAAAA,gBAAgBC,YAAYizD,IAC5BA,EAAgBp7D,QAAOpO,QACH8E,IAAT9E,IAEfomE,cAAehoE,KAAKgoE,cACpB0D,cACKhB,GAAkBC,IAAgBI,GAA6B7yD,EAAAA,gBAAgBC,YAAYizD,GACtFprE,KAAKwqE,iBAAiBC,EAAcC,EAAgBC,QACpDjkE,IAEd,OAAO1G,KAAK6C,MAAMiR,WAAWy3D,IA+MrC,kGC7VA,MAwBMI,EAAkBA,CAAClwD,EAA+BhW,IAC7C5B,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKuX,GAAoBhW,GAASA,EAAM9D,IAAIiqE,IAGtDC,EAAcA,CAACC,EAA2BrmE,IACrC5B,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK4nE,GAAgBrmE,GAASA,EAAM9D,IAAIiqE,IAGlDA,EAAkBpuD,IACpB,MAAM,iBAAEmsD,EAAgB,iBAAEC,GAAqBpsD,EAE/C,OAAO3Z,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKylE,GAAmBC,IAGxC,EAtCqE/mE,IACjE,MAAM,QACFuiC,EAAO,2BACPomC,EAA0B,SAC1BtuD,EAAQ,kCACRujD,EAAiC,mBACjCgL,EAAkB,WAClBR,EAAU,aACVS,GACA7oE,EAEJ,OAAIqa,EAEIrZ,EAAAA,cAACwQ,EAAAA,OAAMpQ,OAAAC,OAAA,GAAKsnE,GACPpmC,EACAsmC,EACAT,EAAaU,EAAgBlL,EAAmCvjD,GAAY2uD,EAAYJ,EAAoBvuD,KAIzHra,EAAMoC,QAAQjD,UAAUC,MAAM,4DACvB,6IChBJ,MAAM8pE,EAA4Dx9C,IAA+D,IAA9D,qBAAEy9C,EAAoB,MAAErgE,EAAK,iBAAE3I,EAAgB,QAAEipE,GAAS19C,EAChI,MAAM5rB,GAAUI,EAAAA,EAAAA,kBAAiB,QAASC,EAAmBmf,EAAAA,kBAAkB+pD,kBACzE//D,GAAavI,EAAAA,EAAAA,wBAAuBZ,EAAmBL,GAC7D,OACIkB,EAAAA,cAAA,SAAAI,OAAAC,OAAA,CAAQJ,UAAU,gCAA+B,aAAakoE,EAAsBngE,QAASogE,GAAa9/D,GACtGtI,EAAAA,cAAA,QAAMC,UAAU,uCAAsC,kBACjD6H,gBCHV,MAAMwgE,EAAgD59C,IAA8D,IAA7D,MAAE69C,EAAK,eAAEtrE,EAAc,aAAEyzD,EAAY,iBAAEvxD,GAAkBurB,EACnH,MAAM89C,EAAgBC,EAAkBF,EAAOppE,GAC/C,OACIa,EAAAA,cAAA,QAAMC,UAAU,0BACXuoE,GAAiBA,EAAc1rE,OAAS,EACrCkD,EAAAA,cAACgpC,EAAAA,GAAc,CAACu/B,MAAOC,EAAev0B,UAAW,CAAEyc,aAAAA,EAAczzD,eAAAA,KACjE,OAKVwrE,EAAoBA,CAACC,EAAwBvpE,KAC/C,IAAKupE,GAAgC,IAApBA,EAAS5rE,OACtB,OAAO,KAEX,MAAM0rE,EAAuC,GAoB7C,OAnBAE,EAAS3iE,SAAQ,CAACwiD,EAAMx9C,KAEpB,MAAMjM,GAAUI,EAAAA,EAAAA,kBAAiB,QAASC,EAAkB,GAAI,IAC1DqqD,EAAWjB,EAAKiB,SAAWjB,EAAKiB,SAAW,GACjD1qD,EAAQc,cAAcC,MAAQ2pD,EAC9B,MAAMlhD,GAAavI,EAAAA,EAAAA,wBAAuBZ,EAAkBL,GACtD2xD,EAAoC,CACtCjxD,UAAW+oD,EAAK/oD,UAChBS,UAAW,wBACXupD,SAAUjB,EAAKiB,SACfhB,QAASD,EAAKC,QAAQC,eACtBC,aAAcH,EAAKG,aACnBp5C,KAAM,OACN8K,qBAAsB9R,EACtBN,SAASinD,EAAAA,EAAAA,kBAAiB9vD,EAAkBL,EAAS0qD,IAEzDgf,EAAcnpE,KAAKoxD,MAGhB+X,GCvCEG,EAA8Cj+C,IAA2C,IAA1C,KAAEnrB,EAAI,aAAEmxD,EAAY,eAAEzzD,GAAgBytB,EAC9F,OAAO1qB,EAAAA,cAACgpC,EAAAA,GAAa,CAAC/oC,UAAU,wBAAwBwC,IAAI,OAAOlD,KAAMA,EAAM00C,UAAW,CAAE3oB,OAAQolC,EAAczzD,eAAAA,2kBC0BtH,MAAM2rE,UAAoB5oE,EAAAA,cAA1BtE,cAAA,oBACW,KAAAkN,MAA2B,CAC9BuO,WAAW,EACX0xD,WAAW,EACXl4D,YAAa,GAGA,KAAAxR,kBAAsCiO,EAAAA,EAAAA,oBACnDjR,KAAK6C,MAAMoC,QAAQiC,QAAQgK,kBAC3BlR,KAAK6C,MAAMsO,aACXnR,KAAK6C,MAAMb,WAmER,KAAA2qE,iBAAoBj3C,IACnB11B,KAAK6C,MAAMuE,OAAOwlE,gBAAkB5sE,KAAK6C,MAAMuE,OAAOwlE,eAAe,KACrE5sE,KAAK6C,MAAMuE,OAAOwlE,eAAe,GAAGxpE,KAAOsyB,EAAM5qB,OAAOC,QAIzD,KAAAkiD,qBAAwBC,GAAuBx3B,IAClD,GAAI11B,KAAK6C,MAAMuE,OAAOwlE,gBAAkB5sE,KAAK6C,MAAMuE,OAAOwlE,eAAe,GAAI,CACzE,MAAMR,EAAQpsE,KAAK6C,MAAMuE,OAAOwlE,eAAe,GAAGR,MAC9CA,IACAA,EAAMlf,GAAWG,SAAW33B,EAAM5qB,OAAOC,SAKpC,KAAA+P,MAAQ,KACrB,MAAMC,EAAY/a,KAAK6sE,cAAgB,EAAI7sE,KAAKyM,MAAM+H,YAAc,EACpExU,KAAKqb,WAAWN,IAGH,KAAAG,UAAY,KACzB,MAAMH,EAAY/a,KAAK8sE,eACjB9sE,KAAK6C,MAAMuE,OAAOwlE,eACd5sE,KAAK6C,MAAMuE,OAAOwlE,eAAejsE,OAAS,EAC1C,EACJX,KAAKyM,MAAM+H,YAAc,EAC/BxU,KAAKqb,WAAWN,IAGH,KAAAM,WAAczM,IACvB5O,KAAKyM,MAAMuO,WAGfhb,KAAKgN,SAAS,CAAEwH,YAAa5F,KAGhB,KAAAk+D,aAAe,IAAiC,IAA3B9sE,KAAKyM,MAAM+H,YAEhC,KAAAq4D,YAAc,IAC3B7sE,KAAK6C,MAAMuE,OAAOwlE,gBAAkB5sE,KAAKyM,MAAM+H,cAAgBxU,KAAK6C,MAAMuE,OAAOwlE,eAAejsE,OAAS,EAE5F,KAAAosE,WAAa,KAC1B/sE,KAAKgN,SAAS,CAAE0/D,WAAW,KA1GxB96D,SACH,MAAM,eAAEg7D,EAAc,eAAEx3D,EAAc,SAAEL,EAAQ,YAAEI,EAAW,SAAEL,EAAQ,UAAEhR,EAAY,IAAO9D,KAAK6C,MAAMuE,QACjG,qBAAE4kE,EAAoB,iBAAEgB,EAAgB,WAAEC,EAAU,gBAAEC,GAAoBltE,KAAK6C,MAAMsC,WACrF,UAAEunE,EAAS,YAAEl4D,GAAgBxU,KAAKyM,MAExC,IAAKigE,EAED,OADA1sE,KAAK6C,MAAMoC,QAAQjD,UAAUC,MAAM,sDAC5B,KAGX,MAAMuQ,EAAShM,EAAAA,EAAA,GAGRxG,KAAK6C,OAAK,IACbiB,UAAW4O,GAAAA,CAAW,kBAAmB5O,GACzC4oE,UAAAA,EACAS,UAAWntE,KAAK+sE,WAChBK,YAAaptE,KAAKitD,qBAClBogB,WAAYrtE,KAAK2sE,iBAEjBW,iBAAkB,CACdxpE,UAAW4O,GAAAA,CAAW,kBAAmB5O,GACzC2O,YAAazS,KAAK6C,MAClBsQ,KAAM,SACN,aAAc+5D,GAElBK,qBAAsB,CAClBjnE,IAAKkmE,GAETgB,sBAAuB,CACnBlnE,IAAK6lE,EACLnpE,iBAAkBhD,KAAKgD,kBAE3ByqE,aAAc,CAAE3pE,UAAW,4BAC3B4pE,gBAAiBT,EACjBL,eAAAA,EACAp4D,YAAAA,EACAm5D,cAAe,CACXrnE,IAAKgO,EAAAA,SACLxQ,UAAW,4BACX0Q,YAAAA,EACAC,KAAMzU,KAAK8a,MACXpG,SAAU1U,KAAKkb,UACf7F,yBAA0BrV,KAAKqb,WAC/BqhD,cAAevnD,EACfJ,SAAAA,EACAI,YAAAA,EACAL,SAAAA,GAEJ84D,YAAax4D,GACTvR,EAAAA,cAACkoE,EAAsB9nE,OAAAC,OAAA,GACf,CACA+nE,QAASjsE,KAAK+sE,WACdphE,MAAOqhE,EACPhB,qBAAAA,EACAhpE,iBAAkBhD,KAAKgD,sBAMvC,OAAOhD,KAAK6C,MAAMiR,WAAWtB,IAiDrC,kGC1JA,MAmCA,EAnCyD3P,IACrD,MAAM,iBACFyqE,EAAgB,aAChBG,EAAY,YACZG,EAAW,eACXhB,EAAc,qBACdW,EAAoB,sBACpBC,EAAqB,cACrBG,EAAa,gBACbD,EAAe,YACfN,EAAW,WACXC,GACAxqE,EAEEgrE,EACFjB,GACAA,EAAejrE,KAAI,CAACyc,EAASxP,IAErB/K,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKupE,EAAY,CAAE1pE,IAAK6K,EAAK,YAAY,MAAMuE,KAAK,YACrDtP,EAAAA,cAAA,QAAMC,UAAU,WAAW4pE,GAC1BtvD,EAAQhb,MAAQS,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKqpE,EAAoB,CAAEnqE,KAAMgb,EAAQhb,KAAMyI,QAASwhE,KAC7EjvD,EAAQguD,OAAShuD,EAAQguD,MAAMzrE,OAAS,GACrCkD,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKspE,EAAqB,CAAEpB,MAAOhuD,EAAQguD,MAAOvgE,QAASuhE,QAMpF,OACIvpE,EAAAA,cAACwQ,EAAAA,OAAMpQ,OAAAC,OAAA,GAAKopE,GACRzpE,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKypE,EAAa,CAAEloE,MAAOooE,KAC/BD,sOCeN,MAyCME,EAAoEjrE,IAAsD,IAAAkrE,EAAAC,EACnI,MACIjnE,MAAM,mBAAEknE,IACRprE,EAEJ,QAAmF6D,KAA/EunE,MAAAA,GAA0D,QAAxCF,EAAlBE,EAAoBC,wBAAwB,GAAGC,mBAAW,IAAAJ,OAAA,EAA1DA,EAA4DK,gBAC5D,OAAO,KAEX,MAAMhxD,EAAW6wD,EAAmBC,wBAAwB,GAAGG,gBAAgBrrD,SACzEsrD,EAAczrE,EAAMsC,UAAUopE,oCAC9BC,EAAkB3rE,EAAMsC,UAAUspE,yCAClCC,EApDuB7rE,CAAAA,IAAuD,IAAA8rE,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EACpF,MAAO,CACHC,aAAwD,QAA5Cb,EAAE9rE,EAAMsC,UAAUsqE,kCAA0B,IAAAd,EAAAA,EAAI,GAC5De,qBAAmE,QAA/Cd,EAAE/rE,EAAMsC,UAAUwqE,qCAA6B,IAAAf,EAAAA,EAAI,GACvEngB,uBAA4G,QAAtFogB,EAAEhsE,EAAMsC,UAAUyqE,4EAAoE,IAAAf,EAAAA,EAAI,GAChHgB,kBAA+D,QAA9Cf,EAAEjsE,EAAMsC,UAAU2qE,oCAA4B,IAAAhB,EAAAA,EAAI,GACnEiB,qBAA2E,QAAvDhB,EAAElsE,EAAMsC,UAAU6qE,6CAAqC,IAAAjB,EAAAA,EAAI,GAC/EkB,sBAAyE,QAApDjB,EAAEnsE,EAAMsC,UAAU+qE,0CAAkC,IAAAlB,EAAAA,EAAI,GAC7EmB,kBAAkE,QAAjDlB,EAAEpsE,EAAMsC,UAAUirE,uCAA+B,IAAAnB,EAAAA,EAAI,GACtE1+C,cAA4C,QAA/B2+C,EAAErsE,EAAMsC,UAAUorB,qBAAa,IAAA2+C,EAAAA,EAAI,GAChDniD,kBAAoD,QAAnCoiD,EAAEtsE,EAAMsC,UAAU4nB,yBAAiB,IAAAoiD,EAAAA,EAAI,GACxDniD,iBAAkD,QAAlCoiD,EAAEvsE,EAAMsC,UAAU6nB,wBAAgB,IAAAoiD,EAAAA,EAAI,GACtDiB,kBAAoD,QAAnChB,EAAExsE,EAAMsC,UAAUkrE,yBAAiB,IAAAhB,EAAAA,EAAI,GACxDiB,0BAAsG,QAA7EhB,EAAEzsE,EAAMsC,UAAUorE,mEAA2D,IAAAjB,EAAAA,EAAI,GAC1GkB,mCAAwH,QAAtFjB,EAAE1sE,EAAMsC,UAAUyqE,4EAAoE,IAAAL,EAAAA,EAAI,KAsCrFkB,CAAiB5tE,GAEtD6tE,EA/BsBC,CAAAA,IAC5B,MAAMC,EAAsC,GAC5C,IAAK,MAAMC,KAAaF,EAAWzC,wBAAyB,CAAC,IAAD4C,EACxD,MACMC,EAAuB,CACzB/tD,SAFa6tD,EAAUxC,gBAAgBrrD,UAIrC9F,EAAW,IAAI8zD,EAAAA,oBAAoBD,EAAgC,QAAvBD,EAAED,EAAU1C,mBAAW,IAAA2C,OAAA,EAArBA,EAAuB1C,gBAC3EwC,EAAa1tE,KAAKga,GAEtB,OAAO0zD,GAqBqBK,CAAgBhD,GAC5C,OACIpqE,IAAAA,cAACqtE,EAAAA,mBAAkB,CACfC,cAAe7C,MAAAA,EAAAA,EAAe,GAC9BnhD,eAAe,GACfikD,oBAAqB5C,EACrBpxD,SAAUA,EACVjb,GAAIU,EAAMV,GACV2E,SAAUjE,EAAMiE,SAChBhD,UAAWjB,EAAMiB,UACjButE,eAAe9hE,EAAAA,EAAAA,IAAW,OAAQ1M,EAAMoC,QAAQC,eAChD6B,KAAM,CAAEyW,QAAkE,QAA3DwwD,EAAEC,EAAmBC,wBAAwB,GAAGC,mBAAW,IAAAH,OAAA,EAAzDA,EAA2DI,gBAC5EnpE,QAASpC,EAAMoC,QACfypE,cAAeA,EACf4C,wBAfgC,EAgBhCC,qBAAsBb,EACtBc,QAAS3uE,EAAM2uE,WCrDrBC,EAAoC5uE,IACtC,MACIkE,MAAM,mBAAEknE,GAAoB,QAC5BhpE,EAAO,gBACPi9B,EAAe,UACf/8B,EAAS,SACT2B,GACAjE,EAEJ,OACIgB,EAAAA,cAACiqE,EAA6B,CAC1BhqE,UAAW,GAAGo+B,qCACd//B,GAJS,mBAKT2E,SAAUA,EACVC,KAAM,CAAEknE,mBAAAA,GACRhpE,QAASA,EACTE,UAAWA,EACXqsE,QAAU3hE,IAAgB,IAAA6hE,EACK,QAA3BA,EAAI7hE,EAAO8hE,wBAAgB,IAAAD,GAAc,QAAdA,EAAvBA,EAAyBx+C,oBAAY,IAAAw+C,GAArCA,EAAuCv+C,kBACvCtwB,EAAM+uE,SAASt3D,eAAezK,EAAO8hE,iBAAiBz+C,aAAaC,sBAYjF0+C,EAAuBhvE,GAAuC,KAhDtCA,CAAAA,IAC1B,MACIkE,MAAM,mBAAEknE,GAAoB,SAC5B2D,GACA/uE,GACE,kBAAEivE,GAAsBF,EAE1B3D,GAAsBA,EAAmB8D,YAAY/tE,IACrD8tE,EAAkB7D,EAAmB8D,YAAY/tE,KAyCrDguE,CAAqBnvE,yOC9ElB,MAAMovE,UAA6BpuE,EAAAA,UAStCtE,YAAmBsD,GAAiC,IAAAqvE,EAAAC,EAChD7lE,MAAMzJ,GAkBH,KAAAwuD,OAAU37B,IACbA,EAAMvmB,iBACNnP,KAAKoyE,oBAAqB,EACtBpyE,KAAK6C,MAAMwvE,UACXryE,KAAKgN,UAASslE,IAAa,CAAOz6D,QAASy6D,EAAcz6D,WACzD7X,KAAK6C,MAAMwvE,SAASryE,KAAKyM,QAEzBzM,KAAKgN,UAASslE,IAAa,CAAOz6D,QAASy6D,EAAcz6D,YAxB7D7X,KAAKoyE,oBAAqB,EAC1BpyE,KAAKyM,MAAQ,CAAEoL,OAAmC,QAA7Bq6D,EAAqB,QAArBC,EAAEtvE,EAAM0vE,qBAAa,IAAAJ,OAAA,EAAnBA,EAAqBt6D,cAAM,IAAAq6D,GAAAA,GAClDlyE,KAAKwyE,kBAAoB9/D,GAAAA,CAAW,gBAAiB1S,KAAK6C,MAAM4vE,qBAAuBzyE,KAAK6C,MAAM4vE,qBAAuB,IACzH,MAAMvsC,EAAalmC,KAAK6C,MAAMqjC,WAAalmC,KAAK6C,MAAMqjC,WAAa,GAC/DlmC,KAAK6C,MAAM6vE,gBACX1yE,KAAK2yE,iBAAmBjgE,GAAAA,CAAW1S,KAAKwyE,kBAAmBxyE,KAAK6C,MAAMojC,UAAYjmC,KAAK6C,MAAMojC,UAAYC,GACzGlmC,KAAK4yE,kBAAoB5yE,KAAK2yE,mBAE9B3yE,KAAK2yE,iBAAmBjgE,GAAAA,CAAW1S,KAAKwyE,kBAAmBxyE,KAAK6C,MAAMojC,UAAYjmC,KAAK6C,MAAMojC,UAAY,IACzGjmC,KAAK4yE,kBAAoBlgE,GAAAA,CAAW1S,KAAKwyE,kBAAmBtsC,IAmB7Dtf,sBAAsBC,EAAuCC,GAChE,OAAI9mB,KAAKyM,QAAUqa,GAAa9mB,KAAK6C,QAAUgkB,EAM5CjV,SACH,MAAM2gE,uWAAa/rE,CAAA,GAAwBxG,KAAK6C,MAAM0vE,qBAGzB7rE,IAAzB6rE,EAAc16D,QAAwB7X,KAAKoyE,sBAC3CG,EAAc16D,OAAS7X,KAAKyM,MAAMoL,QAEtC06D,EAAczwB,SAAW9hD,KAAK6C,MAAMi/C,SACpC,MAAM+wB,EAAcngE,GAAAA,CAAW,SAAU1S,KAAK6C,MAAMiB,WAC9CgvE,EAAwB,GAAG9yE,KAAK6C,MAAMiB,UAAY9D,KAAK6C,MAAMiB,UAAY,aAE/E,OADA9D,KAAKoyE,oBAAqB,EAEtBvuE,EAAAA,cAAA,OAAKC,UAAW+uE,GACZhvE,EAAAA,cAAC6H,EAAAA,OAAMzH,OAAAC,OAAA,GACClE,KAAK6C,MAAMkwE,kBAAiB,CAChClnE,QAAS7L,KAAKqxD,OAAM,gBACLkhB,EAAc16D,OAC7Bm7D,OAAK,EACLtoD,SAAU1qB,KAAK6C,MAAM2lC,WACrB1kC,UAAWgvE,EACX15D,MAAM,cAELpZ,KAAKizE,iCAAiCV,EAAc16D,OAAQg7D,IAEjEhvE,EAAAA,cAAC8U,EAAAA,SAAQ1U,OAAAC,OAAA,GAAKquE,KAKlBU,iCAAiCC,EAA0BL,GAC/D,MAAMM,EAAwBzgE,GAAAA,CAC1B,qBACA1S,KAAK6C,MAAMuwE,sBAAwBpzE,KAAK6C,MAAMuwE,sBAAwB,IAEpEC,EAAqB,GAAGR,YACxBS,EAAyB,GAAGT,gBAClC,OACIhvE,EAAAA,cAAAA,EAAAA,SAAA,KACIA,EAAAA,cAAA,MAAIC,UAAW4O,GAAAA,CAAWygE,EAAuBE,IAAsBrzE,KAAK6C,MAAM0wE,mBAClF1vE,EAAAA,cAAA,QAAMC,UAAW4O,GAAAA,CAAWygE,EAAuBG,IAA0BtzE,KAAK6C,MAAM2wE,uBACvFxzE,KAAKyzE,qBAAqB,qBAAsBP,IAKrDO,qBAAqBhkE,EAAkByjE,GAC3C,IAAIQ,EAAaR,EAAkBlzE,KAAK2yE,iBAAmB3yE,KAAK4yE,kBAEhE,OADAc,EAAa,GAAGA,KAAcjkE,IACvB5L,EAAAA,cAAA,QAAMC,UAAW4vE,KC5EhC,MAkBaC,EAA+B9wE,IACxC,MAAM,gBACFq/B,EAAe,iBACf0xC,EAAgB,kBAChBC,EAAiB,oBACjBC,EAAmB,SACnBzpE,EAAQ,YACR0pE,EAAW,YACXxyD,EAAW,oBACXyyD,EAAmB,kBACnBC,EAAiB,iBACjBC,EAAgB,mBAChBC,EAAkB,qBAClBC,EAAoB,kBACpBhqE,EAAiB,0BACjBiqE,GACAxxE,EAEE+H,EApCqBR,CAAAA,GAAgDsrB,IAC3EtrB,EAAkBsrB,EAAM5qB,OAAOC,OAAS,KAmClBupE,CAAsBlqE,GAEtCmqE,EA7BwBH,CAAAA,GAAmD1+C,IACjF0+C,EAAqB1+C,EAAM5qB,OAAOC,OAAS,KA4BbypE,CAAyBJ,GAEjDK,EACF5wE,EAAAA,cAAA,OAAKC,UAAW,GAAGo+B,gCACfr+B,EAAAA,cAAA,MAAIC,UAAW,GAAGo+B,qCAAkD,aAAcgyC,GAC7EA,GAELrwE,EAAAA,cAAA,SACIC,UAAW,GAAGo+B,qCACd/2B,KAAK,OAAM,aACC+oE,EACZ5oE,IAAKsoE,EACLroE,SAAUX,KAKhB8pE,EACF7wE,EAAAA,cAAA,OAAKC,UAAW,GAAGo+B,iCACfr+B,EAAAA,cAAA,MAAIC,UAAW,GAAGo+B,sCAAmD,aAAc+xC,GAC9EA,GAELpwE,EAAAA,cAAA,SACIC,UAAW,GAAGo+B,sCACdyyC,QAAQ,SACRrpE,IAAKuoE,EACLtoE,SAAUgpE,EACV/oE,UAAWnB,EACXc,KAAK,SAAQ,YACH,SAAQ,aACN8oE,EAAiB,gBACdF,EAAW,gBACXxyD,EAAW,gBACXuyD,EAAoB12D,YA2B/C,MAAO,CACHI,QAASi3D,EACTG,aAvBA/wE,EAAAA,cAAA,OAAKC,UAAW,GAAGo+B,4CACfr+B,EAAAA,cAAC6H,EAAAA,OAAM,CACH5H,UAAW,GAAGo+B,kDACdxX,SAAUspD,EAAmB,aACjBG,EACZtoE,QAASwoE,GAERF,IAiBT/2D,SAAUs3D,EACVG,YAboBf,EAAoBr8D,aACxC5T,EAAAA,cAACsV,EAAAA,MAAK,CAACC,MAAO06D,EAAoBr8D,aAAaE,gBAAiBE,OAAQi8D,EAAoBr8D,aAAaI,QACrGhU,EAAAA,cAAA,QAAMC,UAAWgwE,EAAoBr8D,aAAaG,eAClD/T,EAAAA,cAAA,YAAOiwE,EAAoBr8D,aAAaC,mBAG5ChR,ICjID,MAAMouE,EAMTv1E,YAAmBw1E,GACf/0E,KAAK+0E,YAAcA,EACnB/0E,KAAKg1E,YAAa,IANtB5mD,EAAAA,EAAAA,IAAA,CADC2K,EAAAA,IAAU,iCC8Bf,MAAMk8C,EAAwFpyE,IAC1F,MAAM,UAAEsC,GAActC,EAChBqyE,EAA4B,GAAGryE,EAAMiB,qCAC3C,OACID,IAAAA,cAAAA,IAAAA,SAAA,KACIA,IAAAA,cAAA,UACIA,IAAAA,cAAA,QAAMC,UAAW4O,GAAAA,CAAW,GAAG7P,EAAMiB,6BAEzCD,IAAAA,cAAA,UAAKsB,EAAUgwE,iCACftxE,IAAAA,cAAA,UAAKsB,EAAUiwE,2BACfvxE,IAAAA,cAAA,MAAIC,UAAWoxE,GAA4B/vE,EAAUkwE,6BACrDxxE,IAAAA,cAAA,UAAKsB,EAAUmwE,iCACfzxE,IAAAA,cAAA,MAAIC,UAAWoxE,GAA4B/vE,EAAUowE,4BACrD1xE,IAAAA,cAAA,UAAKsB,EAAUqwE,6BAUrBC,EAAuF5yE,IACzF,MAAM,UAAEsC,GAActC,EACtB,OACIgB,IAAAA,cAAAA,IAAAA,SAAA,KACIA,IAAAA,cAAA,MAAIC,UAAW4O,GAAAA,CAAW,GAAG7P,EAAMiB,4BACnCD,IAAAA,cAAA,UAAKsB,EAAUgwE,iCACftxE,IAAAA,cAAA,aAUC6xE,EAAiF7yE,IAC1F,MAAM8yE,EAAe,GAAG9yE,EAAMiB,iBAE9B,IAAI8xE,EAOJ,OALIA,EADA/yE,EAAMiW,SACQjV,IAAAA,cAAC4xE,EAAwCxxE,OAAAC,OAAA,GAAKrB,IAE9CgB,IAAAA,cAACoxE,EAAyChxE,OAAAC,OAAA,GAAKrB,IAI7DgB,IAAAA,cAAA,SAAOC,UAAWjB,EAAMiB,WACpBD,IAAAA,cAAA,MAAIC,UAAW6xE,GAAeC,KC/BpCruE,EAAuC,CACzCC,UAAW,CACPC,GAAI,CAAEC,EAAG,gBAAiBC,EAAG,EAAGC,EAAG,GACnCC,GAAI,CAAEH,EAAG,kBAAmBC,EAAG,EAAGC,EAAG,IAEzCG,UAAU,EACVT,iBAAiB,GAQfuuE,EAAuFhzE,IAAuC,IAAAizE,EAAA/tB,EAAAid,EAAA+Q,EAChI,MAAMv4D,EAAoD,QAA7Cs4D,EAAGjzE,EAAMkE,KAAKyW,QAAQu3D,YAAY5G,mBAAW,IAAA2H,OAAA,EAA1CA,EAA4C1H,eACtDrlB,GAAmBC,EAAAA,EAAAA,qBACrBxrC,MAAAA,OAAO,EAAPA,EAASyrC,OACTpmD,EAAMoC,QAAQC,cAAcpE,eAAeC,YAClB,QAD6BgnD,EACtDllD,EAAMoC,QAAQiC,QAAQgI,WAAG,IAAA64C,GAAQ,QAARA,EAAzBA,EAA2B3gD,cAAM,IAAA2gD,OAAA,EAAjCA,EAAmCmB,kBAGjC8sB,EAAqB,GAAGnzE,EAAMiB,qCAEpC,OACID,IAAAA,cAAA,OAAKC,UAAWkyE,GACZnyE,IAAAA,cAACmE,EAAAA,GAAK,CACFlH,eAAgB+B,EAAMoC,QAAQC,cAAcpE,eAC5CgD,UAAW,GAAGkyE,mBACdrwE,QAAS6X,MAAAA,OAAO,EAAPA,EAAS3D,KAClB5R,IAA6B,QAA1B+8D,EAAExnD,MAAAA,OAAO,EAAPA,EAAS+F,uBAAe,IAAAyhD,EAAAA,EAAI,GACjCjb,YAAahB,EACb5hD,aAActE,EAAMoC,QAAQiC,QAAQC,aACpCE,cAAkC,QAArB0uE,EAAElzE,EAAMwE,qBAAa,IAAA0uE,EAAAA,EAAIxuE,EACtCW,oBAAoB,YAMpC,IAAI+tE,EAOJ,MA8CMC,EAAkBA,CACpBC,EAKAC,EACAvzE,IACE+mD,IACFusB,EAAiBC,EAASxsB,EAAU/mD,IAC7B,GAULo5B,EAAkBA,CACpBo6C,EACAC,EACAzzE,IACC,KACDwzE,EAAaC,EAA0BzzE,IAQrC0zE,EACF1zE,IACoB,IAAA2zE,EACpB,MACIrxE,WAAW,yCAAEsxE,EAAwC,oCAAEC,IACvD7zE,EACE2a,EAAoD,QAA7Cg5D,EAAG3zE,EAAMkE,KAAKyW,QAAQu3D,YAAY5G,mBAAW,IAAAqI,OAAA,EAA1CA,EAA4CpI,gBACrDuI,EAAmBC,IAAkB7xB,EAAAA,EAAAA,WAAS,GACrD,IAAIziC,EAAa,GACjB,QAAgB5b,IAAZ8W,EACA,OAAO,KAEN4V,EAAAA,iBAAiB6oB,mBAAmBz+B,EAAQ3D,OAAUyoD,EAAAA,iBAAiBC,kBAAkB/kD,EAAQC,YAClG6E,GAAa7b,EAAAA,EAAAA,uBAAsB+W,EAAQ3D,KAAO2D,EAAQC,SAAU5a,EAAMoC,QAAQC,gBAGtF,MAAM2xE,EAAqBhzE,IAAAA,aAAkB,KACrC2e,EAAAA,GAASC,YACTnR,OAAO7B,SAAStL,KAAOme,KAE5B,CAACA,IAEE+uC,EAASxtD,IAAAA,aAAkB,KAC7B,MAAMizE,GAA6BH,EAC/BG,GACIb,GACAA,GAAuB,GAE3BW,EAAeE,GACfb,EAAyBW,IAEzBX,OAAyBvvE,EACzBkwE,EAAeE,MAEpB,CAACH,EAAmBC,IAEvB,GAAIxjD,EAAAA,iBAAiB6oB,mBAAmB35B,GACpC,OAAO,KAGX,MAAMxe,EAAY,GAAGjB,EAAMiB,gCACrBizE,EAA4B,GAAGjzE,uBAErC,OACID,IAAAA,cAAA,OAAKC,UAAWA,GACZD,IAAAA,cAAC6H,EAAAA,OAAM,CAAC5H,UAAW,GAAGA,YAAqB+H,QAASwlD,IACnDslB,GACG9yE,IAAAA,cAAA,OAAKC,UAAWizE,GACZlzE,IAAAA,cAAC6H,EAAAA,OAAM,CACH5H,UAAW,GAAGizE,kBACdlrE,QAASgrE,EAAkB,aACfJ,GAEXC,GAEL7yE,IAAAA,cAAC6H,EAAAA,OAAM,CACH5H,UAAW,GAAGjB,EAAMiB,4BAA2B,aACnCjB,EAAMsC,UAAU6xE,yCAE3Bn0E,EAAMsC,UAAU6xE,4CAa5BC,EAAsFp0E,IAAuC,IAAAq0E,EACtI,MAAM15D,EAAoD,QAA7C05D,EAAGr0E,EAAMkE,KAAKyW,QAAQu3D,YAAY5G,mBAAW,IAAA+I,OAAA,EAA1CA,EAA4C9I,eACtDC,EAAkBxrE,EAAMkE,KAAKyW,QAAQu3D,YAAY1G,iBACjD,IAAEprC,EAAG,IAAEC,EAAG,SAAE9lB,GAAava,EACzBqyE,EAA4B,GAAGryE,EAAMiB,gCAC3C,QAAgB4C,IAAZ8W,EAAuB,CAAC,IAAD25D,EAAAC,EACvB,IAAI90D,EAAa,GAKjB,OAJK8Q,EAAAA,iBAAiB6oB,mBAAmBz+B,EAAQ3D,OAAUyoD,EAAAA,iBAAiBC,kBAAkB/kD,EAAQC,YAClG6E,GAAa7b,EAAAA,EAAAA,uBAAsB+W,EAAQ3D,KAAO2D,EAAQC,SAAU5a,EAAMoC,QAAQC,gBAIlFrB,IAAAA,cAAAA,IAAAA,SAAA,KACIA,IAAAA,cAAA,UACIA,IAAAA,cAACgyE,EAA2C5xE,OAAAC,OAAA,GAAKrB,KAErDgB,IAAAA,cAAA,UAAK2Z,EAAQyrC,QACbplD,IAAAA,cAAA,UACIA,IAAAA,cAAA,OAAKC,UAAW,GAAGjB,EAAMiB,2BACrBD,IAAAA,cAAA,KAAGC,UAAW,GAAGjB,EAAMiB,0BAA2BK,KAAMme,GACnD9E,EAAQ3D,MAEbhW,IAAAA,cAAA,QAAMC,UAAW,GAAGjB,EAAMiB,iCACH,QADkCqzE,EACpD35D,EAAQopC,kBAAU,IAAAuwB,OAAA,EAAlBA,EAAoBx1E,KAAI01E,IAAS,IAAAC,EAAA,OAA4B,QAA5BA,EAAID,EAAUtwB,sBAAc,IAAAuwB,OAAA,EAAxBA,EAA0Bh0E,SAC3D0M,QAAOunE,IAAmBnkD,EAAAA,iBAAiB6oB,mBAAmBs7B,KAC9DvoE,KAAKnM,EAAMsC,UAAUqyE,6CAItC3zE,IAAAA,cAAA,MAAIC,UAAWoxE,GApLHryE,CAAAA,IACxB,MAAM,QAAEoC,EAAO,SAAEK,EAAQ,eAAEmyE,EAAc,UAAEtyE,GAActC,EACnDiD,EAAQjD,EAAMiD,MAEpB,OAAIA,EAEIjC,IAAAA,cAACgD,EAAAA,eAAc,CACX1E,GAAImD,EACJwB,SAAU2wE,EACV1wE,KAAM,CAAEjB,MAAAA,GACRhC,UAAU,yCACVysB,cAAeprB,EAAUorB,cACzBxD,kBAAmB5nB,EAAU4nB,kBAC7BC,iBAAkB7nB,EAAU6nB,iBAC5B/nB,QAASA,IAId,MAkKgDyyE,CAAmB70E,IAC9DgB,IAAAA,cAAA,UA3JahB,CAAAA,IACzB,MAAMiD,EAAQjD,EAAMiD,MAEpB,OAAIA,EAEIjC,IAAAA,cAAA,OAAKC,UAAU,oDACVsvB,EAAAA,iBAAiBC,cAAcxwB,EAAMwrE,gBAAgBsJ,gBAAkB7xE,EAAM6xE,eAInF,MAiJUtuB,CAAoBxmD,IACzBgB,IAAAA,cAAA,MAAIC,UAAW,GAAGjB,EAAMiB,+BACpBD,IAAAA,cAAC0mD,EAAAA,oBAAmB,CAChBpoD,GAAI,sCAAsCqb,EAAQC,YAAkC,QAA1B25D,EAAI/I,EAAgBvwD,cAAM,IAAAs5D,EAAAA,EAAI,KACxFn0C,IAAKA,EACLC,IAAKA,EACLsnB,aAAcptC,EACdyP,uBAAwBhqB,EAAMsC,UAAUyyE,qCACxCntB,yBAA0B5nD,EAAMsC,UAAU0yE,uCAC1CntB,yBAA0B7nD,EAAMsC,UAAU2yE,uCAC1C/zE,IAAKsqE,EAAgBvwD,OACrB8sC,WAAYptC,EAAQwpC,WACpBz7C,SAAU2qE,EAAgBrzE,EAAMgR,UAAUsiE,iBAAkB9H,EAAgBvwD,OAAQjb,MAG5FgB,IAAAA,cAAA,UACIA,IAAAA,cAAC6H,EAAAA,OAAM,CACH5H,UAAW,GAAGjB,EAAMiB,4BAA2B,aACnCjB,EAAMsC,UAAU6xE,wCAC5BnrE,QAASowB,EAAgBp5B,EAAMgR,UAAUwiE,aAAcxzE,EAAMkE,KAAKyW,QAAS3a,OAO/F,OAAO,MAQEk1E,EAAqFl1E,IAAuC,IAAAm1E,EACrI,MAAMx6D,EAAoD,QAA7Cw6D,EAAGn1E,EAAMkE,KAAKyW,QAAQu3D,YAAY5G,mBAAW,IAAA6J,OAAA,EAA1CA,EAA4C5J,eACtDC,EAAkBxrE,EAAMkE,KAAKyW,QAAQu3D,YAAY1G,iBACjD,IAAEprC,EAAG,IAAEC,EAAG,SAAE9lB,GAAava,EACH,IAADo1E,EAA3B,YAAgBvxE,IAAZ8W,EAEI3Z,IAAAA,cAAAA,IAAAA,SAAA,KACIA,IAAAA,cAAA,UACIA,IAAAA,cAACgyE,EAA2C5xE,OAAAC,OAAA,GAAKrB,KAErDgB,IAAAA,cAAA,UACIA,IAAAA,cAAA,OAAKC,UAAW,GAAGjB,EAAMiB,2BACrBD,IAAAA,cAAA,QAAMC,UAAW,GAAGjB,EAAMiB,2BAA4B0Z,EAAQC,UAC9D5Z,IAAAA,cAAA,QAAMC,UAAW,GAAGjB,EAAMiB,+BACtBD,IAAAA,cAAC0mD,EAAAA,oBAAmB,CAChBpoD,GAAI,sCAAsCqb,EAAQC,YAAkC,QAA1Bw6D,EAAI5J,EAAgBvwD,cAAM,IAAAm6D,EAAAA,EAAI,KACxFh1C,IAAKA,EACLC,IAAKA,EACLsnB,aAAcptC,EACdyP,uBAAwBhqB,EAAMsC,UAAUyyE,qCACxCntB,yBAA0B5nD,EAAMsC,UAAU0yE,uCAC1CntB,yBAA0B7nD,EAAMsC,UAAU2yE,uCAC1C/zE,IAAKsqE,EAAgBvwD,OACrB8sC,WAAYptC,EAAQwpC,WACpBz7C,SAAU2qE,EAAgBrzE,EAAMgR,UAAUsiE,iBAAkB9H,EAAgBvwD,OAAQjb,QAKpGgB,IAAAA,cAAA,UACIA,IAAAA,cAAC0yE,EAAwCtyE,OAAAC,OAAA,GAAKrB,MAKvD,MAQEq1E,EAA2Er1E,IACpF,MAAM8yE,EAAe,GAAG9yE,EAAMiB,iBAE9B,IAAI8xE,EAOJ,OALIA,EAHiG,QAAhF98D,EAAAA,EAAAA,UAAS,CAAEC,QAASC,EAAAA,YAAYC,SAAUhU,QAASpC,EAAMoC,QAAQiC,UAGpErD,IAAAA,cAACk0E,EAAyC9zE,OAAAC,OAAA,GAAKrB,IAE/CgB,IAAAA,cAACozE,EAA0ChzE,OAAAC,OAAA,GAAKrB,IAI9DgB,IAAAA,cAAA,SAAOC,UAAWjB,EAAMiB,WACpBD,IAAAA,cAAA,MAAIC,UAAW6xE,GAAeC,KCnU7BuC,EAAqEt1E,IAC9E,MAAOiW,EAAUs/D,GAAev0E,IAAAA,SAAehB,EAAMw1E,cAC/CC,EAAyBz1E,EAAMkE,KAAKuxE,uBACpCC,EAAsC11E,EAAMkE,KAAKwxE,oCAKjDC,EAAiBA,KACnBJ,EAAYv1E,EAAMw1E,eAGlB71D,EAAAA,GAASC,WACTnR,OAAOD,iBAAiB,SAAUmnE,GAGtC,MAAMlpB,EAAkB,GAAGzsD,EAAMiB,oBAC3B6xE,EAAe,GAAG9yE,EAAMiB,iBAE9B,OACID,IAAAA,cAAA,SAAOC,UAAWjB,EAAMiB,WACpBD,IAAAA,cAAC6xE,EAAkC,CAC/BzwE,QAASpC,EAAMoC,QACf6B,SAAUjE,EAAMiE,SAChB3E,GAAImtD,EACJxrD,UAAWwrD,EACXx2C,SAAUA,EACV3T,UAAWtC,EAAMsC,UACjB4B,KAAM,KAETuxE,EAAuB32E,KAAI,CAAC82E,EAAmB7pE,KAAS,IAAA8pE,EAAAC,EAAAC,EACrD,IAAIx7D,EAAWq7D,EAAkB1D,YAAY1G,gBAAgBrrD,SAC7D,MAAMxF,EAAUi7D,EAAkB1D,YAAY5G,YAC9C,IAAIlrC,EAAc,EACdC,EAAc,GAClB,MAAM21C,EAAWr7D,MAAAA,GAAuB,QAAhBk7D,EAAPl7D,EAAS4wD,sBAAc,IAAAsK,OAAA,EAAvBA,EAAyB/6D,SACtC46D,IAAwCjW,EAAAA,iBAAiBC,kBAAkBsW,KACvEA,EAASC,iBAAmBD,EAASC,gBAAkB,IACvD71C,EAAM41C,EAASC,iBAEfD,EAASj7D,iBAAmBi7D,EAASj7D,gBAAkB,IACvDslB,EAAM21C,EAASj7D,iBAEnBR,EAAWm4C,KAAKryB,IAAI9lB,EAAU6lB,IAElC,MAAMn9B,EAAiD,QAA5C6yE,EAAGF,EAAkB1D,YAAY5G,mBAAW,IAAAwK,OAAA,EAAzCA,EAA2CI,aACzD,OACIl1E,IAAAA,cAACq0E,EAA+B,CAC5BjzE,QAASpC,EAAMoC,QACf6B,SAAUjE,EAAMiE,SAChB3E,GAAI,GAAGwzE,KAAgB/mE,IACvB7K,IAA8C,QAA3C60E,EAAEH,EAAkB1D,YAAY5G,mBAAW,IAAAyK,OAAA,EAAzCA,EAA2CxK,eAAe3wD,SAC/D3Z,UAAW6xE,EACXxwE,UAAWtC,EAAMsC,UACjB2T,SAAUA,EACVhT,MAAOA,EACPR,SAAUzC,EAAMyC,SAChBmyE,eAAgB50E,EAAM40E,eACtBx0C,IAAKA,EACLC,IAAKA,EACL9lB,SAAUA,EACVxO,MAAOA,EACPvH,cAAexE,EAAMwE,cACrBgnE,gBAAiBoK,EAAkB1D,YAAY1G,gBAC/Cx6D,UAAWhR,EAAMm2E,UACjBjyE,KAAM,CACFyW,QAASi7D,imBCnBrC,MAAMQ,UAAuBp1E,EAAAA,cA4GzBtE,YAAmBsD,GAAgD,IAAAukB,EAAA8xD,EAAAC,EAAAC,EAAAC,EAAAC,EAC/DhtE,MAAMzJ,GAxGO,KAAA02E,UAAoB,IAEpB,KAAAC,+BAAyC,EAEzC,KAAAviE,eAAyB,SAEzB,KAAAC,oBAA8B,8BAU9B,KAAAuiE,sBAA6C,IAAIC,EAAAA,mBAAyB15E,KAAKw5E,gCAExF,KAAAG,YAAwC,GAExC,KAAAC,uBAAsC,IAAIC,IAEjC,KAAAC,uBAAiC,yCAEjC,KAAAC,WAAqB,sBAK9B,KAAAC,sCAAgD,EAEhD,KAAAC,gCAA0C,EAE1C,KAAAC,uCAAiD,EAExC,KAAAC,yBAAuD,CACpEC,oBAAsBC,IACdA,GACAr6E,KAAK45E,uBAAuBxV,IAAIiW,IASxCC,uBAAwBn6E,MAAOo6E,EAA6BC,KAAmD,IAAAC,EAG3G,GAFAz6E,KAAK25E,YAAYY,GAAuBC,EAEpCx6E,KAAK45E,uBAAuBc,QAAqC,QAAjCD,EAAKz6E,KAAKyM,MAAM2L,yBAAiB,IAAAqiE,OAAA,EAA5BA,EAA8B95E,QACnE,OAAOX,KAAKy5E,sBACPkB,SAAQx6E,SACEH,KAAK46E,sBAEfvsE,OAAOpM,IAEJ,GAAIA,IAAU44E,EAAAA,wBAAwBC,gCAClC,MAAM,IAAIz4E,MAAMJ,OAYpC84E,gBAAiBA,CAACC,EAAuB71E,IAC9BnF,KAAKi7E,iBAAiBD,EAAe71E,GAOhD+1E,wBAA0BC,IACtBn7E,KAAKgN,SAAS,CAAEmuE,oBAAAA,MAIP,KAAAC,4BAA2D,CAKxE/E,aAAevrC,IACX9qC,KAAKq7E,wBAAwBvwC,EAAKiqC,cAStCoB,iBAAkBA,CAACmF,EAAuCl+D,IAC/Cpd,KAAKu7E,mBAAmBD,EAAmBl+D,IA2RzC,KAAAo+D,mBAAqB,KAClC,MAAM,QAAEv2E,EAAO,KAAE8B,EAAI,UAAE/E,EAAS,UAAEmD,GAAcnF,KAAK6C,OAC/C,mBAAEorE,GAAuBlnE,EACb9B,EAAQiC,QAAQqgB,KAAKC,iBAAmBviB,EAAQiC,QAAQqgB,KAAKk0D,OAC9DxN,GAAsBA,EAAmBp+D,OACtD6rE,EAAAA,wBAAAA,YAAoC,CAAEn6E,cAAe0D,EAAQC,eAAiB+oE,EAAmBp+D,OAAOkiE,aACnGtvE,MAAK,KACF6O,OAAO7B,SAASksE,YAEnBttE,OAAOpM,IACJD,EAAUqa,QAAQ,qDAClBra,EAAUC,MAAMA,GAChBjC,KAAK47E,mBACDz2E,EAAU02E,0CACV77E,KAAKiX,eACLjX,KAAKkX,qBACL,MAIZlV,EAAUqa,QAAQ,iFA0FT,KAAA3O,mBAAsBlD,MAE9BA,GAASA,EAAM7J,OADG,KAEnBX,KAAKgN,SAAS,CAAEoQ,SAAU,EAAGhF,kBAAmB,GAAI0jE,qBAAiBp1E,IACrE1G,KAAK47E,mBAAmB,GAAI,GAAI,IAAI,IAEpC57E,KAAK+7E,sBAEL/7E,KAAK+7E,qBAAqBnuE,SAG9B,MAAM,UAAE5L,EAAS,QAAEiD,GAAYjF,KAAK6C,MAE/BuwB,EAAAA,iBAAiBC,cAAc7oB,GAgChCxK,KAAKgN,SAAS,CAAE8uE,qBAAiBp1E,EAAWs1E,8BAA8B,KA/B1Eh8E,KAAK+7E,qBAAuBluE,GAAAA,EAAS,MACjCouE,EAAAA,EAAAA,eACI,IAAIC,EAAAA,mBACAj3E,EAAQC,cAAcpE,eAAeC,YACrCyJ,EACAvF,EAAQC,cAAcpE,eAAeC,YAAYC,WAErDhB,KAAK6C,MAAMoC,QAAQC,eAElBzC,MAAKwL,IACFjO,KAAKgN,SAAS,CACV8uE,gBAAiB7tE,MAAAA,OAAO,EAAPA,EAASiC,QAC1BkI,kBAAmBnK,MAAAA,OAAO,EAAPA,EAASkuE,qBAC5BH,8BAA8B,IAE9B/tE,MAAAA,GAAAA,EAASiC,SACTlQ,KAAKo8E,yBAAyBnuE,EAAQiC,YAG7C7B,OAAOpM,IACJD,EAAUsM,UAAUrM,GACpBD,EAAUuM,MAAM,mCAEzBvO,KAAKu5E,WAER/qE,YAAW,KAEPxO,KAAK+7E,yBA7BM,GA+Bf/7E,KAAKgN,SAAS,CAAEgvE,8BAA8B,MAUrC,KAAAK,sBAAyBtxE,IAAuB,IAAAuxE,EAC7D,IAAIC,EAAe17C,OAAOz3B,SAAS2B,EAAO,IAC1C,MAAMyxE,EAAex8E,KAAKy8E,eAAevvE,mBAAmBwvE,kBAAoB18E,KAAKy8E,eAAevvE,QAEpG,IAAIyvE,EAAkB,EAClBC,GAA+B,EACnC,GAAI58E,KAAKg6E,uCAAyC1X,EAAAA,iBAAiBC,kBAA4C,QAA3B+Z,EAACt8E,KAAKyM,MAAMqvE,uBAAe,IAAAQ,OAAA,EAA1BA,EAA4B3+D,UAAW,CAAC,IAADk/D,EACxH,MAAMhE,EAAW74E,KAAKyM,MAAMqvE,gBAAiBn+D,SAC7Cg/D,EAA2C,QAA5BE,EAAGhE,MAAAA,OAAQ,EAARA,EAAUC,uBAAe,IAAA+D,EAAAA,EAAI,EAC/C,MAAMC,EAAkBvnB,KAAKryB,IAAIq5C,EAAcI,GAC3CG,IAAoBP,IACpBK,GAAsB,GAE1BL,EAAeO,EAGnB98E,KAAKgN,SAAS,CAAEoQ,SAAUm/D,IAAgB,KACtC1uE,GAAAA,EAAS,KACD+uE,IAAwB/7C,OAAOsG,MAAMnnC,KAAKyM,MAAM2Q,WAAao/D,IAC7DA,EAAa9rE,aAAa,gBAAiB6rE,EAAax+D,YACxDy+D,EAAazxE,MAAQwxE,EAAax+D,cAjBR,IAclClQ,OAeS,KAAAotE,iBAAmB,CAACD,EAAuB71E,KAA0D,IAAA43E,EAClH,MAAMnyB,EAAuC,QAA7BmyB,EAAG/8E,KAAKyM,MAAMqvE,uBAAe,IAAAiB,OAAA,EAA1BA,EAA4B/1B,WAE/C,OAAQg0B,GACJ,KAAKgC,EAAAA,qBAAqBC,MACtB,OAAO93E,EAAUknB,0BACrB,KAAK2wD,EAAAA,qBAAqBE,cACtB,OAAO/3E,EAAUonB,kCACrB,KAAKywD,EAAAA,qBAAqBG,KACtB,OAAOh4E,EAAUgnB,yBACrB,KAAK6wD,EAAAA,qBAAqBI,MACtB,OAAOxyB,EAAazlD,EAAU+1C,2BAA6B/1C,EAAUsnB,0BACzE,QACI,MAAO,KAOF,KAAAmuD,kBAAoBz6E,UACjC,MACI8E,SAAS,cACLC,EACAgC,SACInG,aAAa,UAAEC,MAGvBhB,KAAK6C,OACH,kBAAEuV,EAAiB,gBAAE0jE,GAAoB97E,KAAKyM,MAC9C4wE,EAAuBnlE,EAAAA,gBAAgBC,YAAYC,GACzD,IAAK0jE,IAAoBuB,EACrB,OAGJ,MAAMC,EAAkB92E,EAAA,GAAkCxG,KAAK25E,aAO/D,GANA35E,KAAKgN,SAAS,CAAEmuE,qBAAqB,IAGrCrkE,QAAQC,IAAI/W,KAAKyM,MAAM0uE,qBAGnBn7E,KAAKyM,MAAM8wE,2BAA2BC,WAAY,CAElD,MAAMC,EAAoBj3E,EAAA,GAAQxG,KAAKyM,MAAM8wE,4BAC7CE,EAAqBD,gBAAa92E,EAClC1G,KAAKgN,SAAS,CAAEuwE,2BAA4BE,IAIhD,IAAK,MAAMC,KAAgBz5E,OAAO0S,KAAK2mE,GACnC,GAAIt9E,KAAKyM,MAAM8wE,2BAA2BI,gBAAgBD,GAAe,CAErE,MAAME,EAAUp3E,EAAA,GAAQxG,KAAKyM,MAAM8wE,4BACnCK,EAAWD,gBAAgBD,QAAgBh3E,EAE3C1G,KAAKgN,SAAS,CAAEuwE,2BAA4BK,IAMpD,MAAMC,EAAmBzlE,MAAAA,OAAiB,EAAjBA,EACnBzW,KAAI01E,IAAY,IAAAyG,EACd,MAAO,CACHh3B,mBAAoBuwB,EAAUvwB,mBAC9BC,eAC2F,QAD7E+2B,EACV99E,KAAK+9E,sBAAsB1G,EAAWiG,EAAmBjG,EAAUvwB,4BAAoB,IAAAg3B,EAAAA,EAAIzG,EAAUtwB,eACzGjxB,oBAAqBuhD,EAAUvhD,wBAGtC9lB,QAAOqnE,GACGA,EAAUtwB,iBAMnB2P,EAAkB,IAAIn0D,SAA8BpC,MAAAA,IACtD,MAAM69E,QAAmBC,EAAAA,EAAAA,oBACrB,IAAIC,EAAAA,qBACApC,EAAgBtZ,gBAAkBsZ,EAAgBtZ,gBAAkBsZ,EAAgBr+D,SACpFzc,EACA68E,OACAn3E,EACA1G,KAAK6C,MAAMoC,QAAQiC,SAEvBhC,GAEA84E,SACMG,EAAAA,EAAAA,iCACF,IAAIC,EAAAA,qCACAJ,EAAWxb,gBAAkBwb,EAAWxb,gBAAkBwb,EAAWvgE,SACrEzc,EACA68E,EACA79E,KAAK6C,MAAMoC,QAAQiC,SAEvBhC,GAIRqX,EAAQyhE,MAGNK,QAAuB3nB,EAC7B12D,KAAKgN,SAAS,CAAE8uE,gBAAoC,OAAnBuC,EAA0BA,OAAiB33E,KAS/D,KAAAq3E,sBAAwB,CACrCO,EACAC,KAEA,GAAIA,GAAcD,EAAqBE,gBACnC,OAAOF,EAAqBE,gBAAgB11E,MAAKuuE,GAAaA,EAAU55D,YAAc8gE,KAa7E,KAAAE,yBAA2B,CACxCC,EACAv5E,EACAylD,KAEA,MAAM+zB,EAAqBx5E,EAAUy5E,qDAErC,OAAQF,GACJ,KAAK1B,EAAAA,qBAAqBC,MACtB,OAAO93E,EAAU05E,oDACrB,KAAK7B,EAAAA,qBAAqBE,cACtB,OAAO/3E,EAAU25E,4DACrB,KAAK9B,EAAAA,qBAAqBG,KACtB,OAAOh4E,EAAU45E,mDACrB,KAAK/B,EAAAA,qBAAqBI,MACtB,OAAOxyB,EAAa+zB,EAAqBx5E,EAAU65E,oDACvD,QACI,MAAO,KAUF,KAAAt4D,cAAgB,CAACo1D,EAAgC1+D,KAA6B,IAAA6hE,EAE3F,MAAMC,EAA8C,QAA7BD,EAAGnD,EAAgBl1B,kBAAU,IAAAq4B,OAAA,EAA1BA,EAA4BjvE,QAClDqnE,KAAeA,EAAUtwB,gBAAkBswB,EAAUtwB,eAAezjD,SAGxE,GAAI4U,EAAAA,gBAAgBC,YAAY+mE,GAAoB,CAChD,MAAMrK,EAAc70E,KAAKm/E,oBAAoBD,GAAmB,GAEhE,GAAIl/E,KAAKyM,MAAM8wE,2BAA2BI,gBAAiB,CAEvD,MAAMC,EAAUp3E,EAAA,GAAQxG,KAAKyM,MAAM8wE,4BAInC,OAHAK,EAAWD,gBAAkB9I,EAE7B70E,KAAKgN,SAAS,CAAEuwE,2BAA4BK,KACrC,GAIf,GAAIxgE,GAdoB,EAcS,CAC7B,MAAMjY,EAAYnF,KAAK6C,MAAMsC,UAE7B,OADAnF,KAAK47E,mBAAmBz2E,EAAUi6E,oCAAqCp/E,KAAKiX,eAAgBjX,KAAKkX,qBAAqB,IAC/G,EAEX,OAAO,GA8BM,KAAAqkE,mBAAqB,CAACnF,EAA6Bh5D,KAChE,MAAM,QAAEnY,EAAO,KAAE8B,EAAI,UAAE/E,GAAchC,KAAK6C,OACpC,mBAAEorE,GAAuBlnE,EAC/B,GAAIknE,MAAAA,GAAAA,EAAoBp+D,OAAQ,CAC5B,MAAMwvE,EAA8BpR,EAAmBp+D,OAAOq+D,wBAC9D,GAAIh2D,EAAAA,gBAAgBC,YAAYknE,GAA8B,CAC1D,MAAMC,EAAiBD,EAA4BE,WAC9C16D,GAAkCA,EAAMwpD,gBAAgBvwD,SAAWs4D,IAElEoJ,EAAkBh5E,EAAA,GAAQ64E,EAA4BC,IAC5D,GAAID,EAA4BC,GAAgBjR,gBAAgBrrD,WAAa5F,EACzE,OAAO,EAEX,MAAMqiE,EAAmBD,EAAmBnR,gBAAgBrrD,SAC5Dw8D,EAAmBnR,gBAAgBrrD,SAAW5F,EAC9C,MAAM,YAAE+wD,GAAyBqR,EAAT10C,GAAInI,EAAAA,EAAAA,GAAK68C,EAAkB58C,GAEnD84C,EAAAA,wBAAAA,4BACI,CAAEn6E,cAAe0D,EAAQC,eACzB+oE,EAAmBp+D,OAAOkiE,YAAY/tE,GACtC,CAAC8mC,EAAKujC,kBAEL5rE,MAAK+1B,IACF,GAAItgB,EAAAA,gBAAgBC,YAAYqgB,GAAO,CACnC,MAAMknD,EAAUlnD,EAAK1vB,MAAK+b,GAASA,EAAM/G,SAAWs4D,IACpDiJ,EAA4BC,GAAgBjR,gBAAkBqR,EAC9D,MAAMC,EAAe,IAAIN,GACzBM,EAAaL,GAAkB,CAAEnR,YAAAA,EAAaE,gBAAiBqR,GAC/D,MAAME,EAAkBp5E,EAAAA,EAAA,GAAQynE,EAAmBp+D,QAAM,IAAEgwE,iBAAkBF,IAK7E,OAJA16E,EAAQC,cAAcsI,OAClB,IAAIsyE,EAAAA,uBAAuB76E,EAAQC,cAAcpE,gBACjD8+E,IAEG,EAGX,OAAO,KAEVvxE,OAAOpM,IACJD,EAAUqa,QAAQ,yDAClBra,EAAUC,MAAMA,EAAMmc,SAItB,OAFAohE,EAAmBnR,gBAAgBrrD,SAAWy8D,EAC9Cz/E,KAAK47E,mBAFe,mCAEiB57E,KAAKiX,eAAgBjX,KAAKkX,qBAAqB,IAC7E,KAGnB,OAAO,EAGX,OAAO,GAOM,KAAAmkE,wBAA2BvwC,IACxC,MAAM,QAAE7lC,EAAO,KAAE8B,EAAI,UAAE/E,GAAchC,KAAK6C,OACpC,mBAAEorE,GAAuBlnE,EAE/B,GAAIknE,MAAAA,GAAAA,EAAoBp+D,OAAQ,CACV5K,EAAQiC,QAAQqgB,KAAKC,iBAAmBviB,EAAQiC,QAAQqgB,KAAKk0D,MAE3EC,EAAAA,wBAAAA,4BACI,CAAEn6E,cAAe0D,EAAQC,eACzB4lC,EAAKujC,gBAAgB0R,cACrB,CAACj1C,EAAKujC,kBAEL5rE,MAAK,KACF6O,OAAO7B,SAASksE,QAAO,MAE1BttE,OAAOpM,IACJD,EAAUqa,QAAQ,gEAClBra,EAAUC,MAAMA,EAAMmc,YAG9Bpc,EAAUqa,QAAQ,4FAQb,KAAA2jE,0BAA4B7/E,UACzC,MACI8E,SAAS,cAAEC,GAAe,UAC1BC,EAAS,UACTnD,GACAhC,KAAK6C,OACH,wCACFo9E,EAAuC,wCACvCC,EAAuC,wCACvCC,GACAh7E,GACE,gBAAE22E,EAAe,SAAE1+D,EAAQ,cAAEgjE,GAAkBpgF,KAAKyM,MAI1D,GAFAzM,KAAK47E,mBAAmB,GAAI,GAAI,IAAI,QAEZl1E,IAApBo1E,GAAiC97E,KAAK0mB,cAAco1D,EAAiB1+D,GAAW,CAAC,IAADijE,EAKhF,GAJIjtD,EAAAA,iBAAiB6oB,mBAAmBmkC,UAC9BpgF,KAAKsgF,qBAGXltD,EAAAA,iBAAiB6oB,mBAAmBj8C,KAAKyM,MAAM2zE,eAE/C,YADApgF,KAAK47E,mBAAmBsE,EAAyClgF,KAAKiX,eAAgBjX,KAAKkX,qBAAqB,GAGpH,MAAM7W,EAAQ,IAAIkgF,EAAAA,0BACdvgF,KAAKyM,MAAM2zE,cACXtE,EAAgBr+D,SAChBL,EACoC,QAD5BijE,EACRvE,EAAgBh0B,4BAAoB,IAAAu4B,EAAAA,EAAI,YAGtCG,EAAAA,EAAAA,4BAA2BngF,EAAO6E,GACnCzC,MAAKoN,IACEA,EAAOkwE,gBACP//E,KAAK47E,mBAAmBqE,EAAyC,UAAW,gBAAgB,GAC5F3uE,OAAO7B,SAASksE,SAChB37E,KAAKgN,SAAS,QAGrBqB,OAAOpM,IACJD,EAAUuM,MAAM,iFACG,wDAAftM,EAAMmJ,KACNpL,KAAK47E,mBACDuE,EACAngF,KAAKiX,eACLjX,KAAKkX,qBACL,GAGJlX,KAAK47E,mBACDsE,EACAlgF,KAAKiX,eACLjX,KAAKkX,qBACL,QAWhB,KAAAopE,mBAAqBngF,UACzB,MACI8E,SAAS,cAAEC,GAAe,UAC1BlD,EAAS,UACTmD,GACAnF,KAAK6C,OACH,cAAEu9E,GAAkBpgF,KAAKyM,OACzB,wCAAEyzE,GAA4C/6E,EAEpD,GAAIiuB,EAAAA,iBAAiB6oB,mBAAmBmkC,GAAgB,CACpD,MAAM//E,EAAQ,IAAIogF,EAAAA,uBAAuB,GAAIC,EAAAA,gBAAgBC,YAgB7D,aAdMC,EAAAA,EAAAA,mBAAkBvgF,EAAO6E,GAC1BzC,MAAKoN,GACGujB,EAAAA,iBAAiB6oB,mBAAmBpsC,EAAO7L,IAIzC,IAHHhE,KAAKgN,SAAS,CAAEozE,cAAevwE,EAAO7L,KAC/B6L,EAAO7L,MAIrBqK,OAAOpM,IACJD,EAAUuM,MAAM,0EAChBvM,EAAUC,MAAMA,EAAMmc,SACtBpe,KAAK47E,mBAAmBsE,EAAyClgF,KAAKiX,eAAgBjX,KAAKkX,qBAAqB,GACzG,MAER,GAGX,OAAOkpE,GAUM,KAAAxE,mBAAqB,CAAClkE,EAAqBC,EAAyBC,EAAsBC,KACvG7X,KAAKgN,SAAS,CAEVyK,aAAc,CACVC,YAAAA,EACAC,gBAAAA,EACAC,aAAAA,EACAC,OAAAA,MAh3BR7X,KAAK6gF,kBAAoBh9E,EAAAA,YACzB7D,KAAKy8E,eAAiB54E,EAAAA,YAEtB7D,KAAK8gF,mBAAoB7vE,EAAAA,EAAAA,oBACrBjR,KAAK6C,MAAMoC,QAAQiC,QAAQgK,kBAC3BlR,KAAK6C,MAAMsO,aACXnR,KAAK6C,MAAMb,WAEfhC,KAAKyM,MAAQ,CACTuvE,8BAA8B,EAC9B/4C,IAAK,EACLC,IAAK,GACL9lB,SAAU,EACV0+D,qBAAiBp1E,EACjB0R,uBAAmB1R,EACnB62E,2BAA4B,CACxBI,gBAAiB,IAErB7kE,SAAU9Y,KAAK8Y,SACfoE,SAAU,GACVi+D,qBAAqB,EACrBiF,cAAe,IAGnBpgF,KAAK+gF,yBAA2B,oCAChC/gF,KAAKghF,kCAAoC,yCACzChhF,KAAKihF,8BAAgC,wCAErCjhF,KAAKg6E,qCAEc,QAFsB5yD,EACF,QADE8xD,EACrCl5E,KAAK6C,MAAMkE,KAAK4S,aAAa9J,cAAM,IAAAqpE,GAAyF,QAAzFA,EAAnCA,EAAqCpwE,MAAK6Q,GClLa,oEDkLGA,EAAaE,cAAqD,IAAAq/D,OAAA,EAA5HA,EACMp/D,iBAAS,IAAAsN,GAAAA,EAEnBpnB,KAAKi6E,+BAEc,QAFgBd,EACI,QADJC,EAC/Bp5E,KAAK6C,MAAMkE,KAAK4S,aAAa9J,cAAM,IAAAupE,GAA6F,QAA7FA,EAAnCA,EAAqCtwE,MAAK6Q,GCnLlD,wEDmLkEA,EAAaE,cAAyD,IAAAu/D,OAAA,EAAhIA,EACMt/D,iBAAS,IAAAq/D,GAAAA,EAEnB,MAAMjrD,EAAoBluB,KAAK6C,MAAMkE,KAAKmnB,kBAC1CluB,KAAKk6E,sCAAsG,QAAjEb,EAAGnrD,MAAAA,GAAyB,QAARorD,EAAjBprD,EAAmBre,cAAM,IAAAypE,OAAA,EAAzBA,EAA2B4H,2CAAmC,IAAA7H,GAAAA,EAGrG,eAEN,MAAgB,QADHvgE,EAAAA,EAAAA,UAAS,CAAEC,QAASC,EAAAA,YAAYC,SAAUhU,QAASjF,KAAK6C,MAAMoC,QAAQiC,UAIhF0K,SAAM,IAAAuvE,EAAAC,EACT,MAAM,KAAEr6E,GAAS/G,KAAK6C,MACtB,IAAKkE,EAAKqT,oBAAoBvK,OAC1B,OAAO,KAEX,MAAMo+D,EAAqBlnE,EAAKknE,wBAEGvnE,KAA/BunE,MAAAA,OAAkB,EAAlBA,EAAoBp+D,SACpB7P,KAAKgN,SAAS,CACVkQ,SAAU+wD,EAAmBp+D,OAAOq+D,wBACpCkS,cAAenS,EAAmBp+D,OAAOkiE,YAAY/tE,KAG7D,MAAM,UAAEF,EAAY,GAAE,YAAEyd,GAAgBvhB,KAAK6C,MAAMuE,OAC7C2mB,EAAe/tB,KAAK6C,MAAMkE,KAAKqT,oBAAoBvK,QACnD,4BACFwxE,EAA2B,gCAC3BC,EAA+B,wBAC/BC,EAAuB,wCACvBC,EAAuC,gCACvCC,EAA+B,wCAC/BC,EAAuC,gDACvCC,EAA+C,0CAC/CC,EAAyC,uCACzCC,EAAsC,wCACtCC,EAAuC,yCACvCC,EAAwC,gCACxCC,GACAhiF,KAAK6C,MAAMsC,UAET88E,EAAiE,CACnEC,4BAA6BN,EAC7Bv1D,0BAA2Bq1D,EAC3Bn1D,kCAAmCo1D,EACnCx1D,yBAA0B01D,EAC1Bp1D,0BAA2Bq1D,EAC3B5mC,2BAA4B6mC,IAG1B,6BAAE/F,EAA4B,2BAAEuB,EAA0B,gBAAEzB,EAAe,kBAAE1jE,GAAsBpY,KAAKyM,MAExG6iD,EAAkB,GAAGtvD,KAAK+5E,qBAE1BoI,EACFt+E,EAAAA,cAAA,OAAKC,UAAWwrD,GACZzrD,EAAAA,cAACwhC,EAAAA,QAAO,CAACvhC,UAAW,GAAGwrD,YAA2BlsD,KAAM4+E,KAI1DxvE,EAAShM,EAAAA,EAAA,GACPxG,KAAK6C,OAAmD,IAE5Du/E,oBAAqB,CAAEt+E,UAAW4O,GAAAA,CAAW,sBAAuB5O,GAAY2O,YAAazS,KAAK6C,OAClG4qE,aAAc,CAAE3pE,UAAW,gCAC3Bu+E,cAAet0D,MAAAA,OAAY,EAAZA,EAAcC,MAC7Bm0D,OAAAA,EACAG,QAAS,CACLx+E,UAAW,GAAG9D,KAAK+5E,wBACnBzzE,IAAK,OAETu/B,OAAQ,CACJv/B,IAAK2rE,EACLnuE,UAAW,GAAG9D,KAAK+5E,qBACnBxH,cAAe,CAAE16D,OAAQ7X,KAAKyM,MAAMuvE,8BACpCzI,kBAAmB8N,EACnB7N,sBAAuB8N,EACvBxgF,eAAgBd,KAAK6C,MAAMoC,QAAQiC,QACnClE,iBAAkBhD,KAAK8gF,mBAE3ByB,aAAcviF,KAAKwiF,sBACnBC,mBAAoB,CAChB3+E,UAAW,GAAG9D,KAAK+gF,4BAA4B/E,EAA+B,UAAY,aAE9F0G,iCAAkC,CAC9B5+E,UAAW9D,KAAKghF,mCAEpB2B,6BAA8B,CAC1B7+E,UAAW9D,KAAKihF,+BAEpBxtE,KAAMkgE,EAA4B,CAC9BC,iBAAkB5zE,KAAK6gF,kBACvBhN,kBAAmB7zE,KAAKy8E,eACxBzI,qBAAsB8H,EACtB3H,mBAAoBoN,EACpBrN,iBAAkBuN,EAClBxN,kBAAmBuN,EACnBn3E,SAAU,GACV0pE,YAA2B,QAAhBoN,EAAEnhF,KAAKyM,MAAMw2B,WAAG,IAAAk+C,EAAAA,EAAI,EAC/B5/D,YAA2B,QAAhB6/D,EAAEphF,KAAKyM,MAAMy2B,WAAG,IAAAk+C,EAAAA,EAAI7/D,EAC/B2gB,gBAAiBliC,KAAK+5E,WACtBjG,oBAAqB9zE,KAAKyM,MAC1BrC,kBAAmBpK,KAAK0N,mBACxB0mE,qBAAsBp0E,KAAKq8E,sBAC3BhI,0BAA2Br0E,KAAKggF,4BAEpC4C,UACI9G,GAAmB1jE,GACbyqE,EAAAA,EAAAA,qBACI7iF,KAAK85E,uBACL95E,KAAK6C,MAAMoC,QACXjF,KAAK6C,MAAMsO,aACXnR,KAAK6C,MAAMb,UACX4/E,EACAK,EACAjiF,KAAKm6E,yBACL2B,EACA1jE,EACAmlE,QAEJ72E,EACVs1E,6BAA8Bh8E,KAAKyM,MAAMuvE,6BACzC3D,aAAcr4E,KAAKyM,MAAMqM,SACzBR,UAAWJ,EAAAA,gBAAgBC,YAAYnY,KAAKyM,MAAMyQ,UAAYld,KAAK8iF,4BAAyBp8E,EAC5Fq8E,aAAc/iF,KAAKgjF,6BAA6B/U,MAAAA,OAAkB,EAAlBA,EAAoBp+D,UAGxE,OAAO7P,KAAK6C,MAAMiR,WAAWtB,GAGzBwwE,6BAA6B/U,GACjC,MAAM,SAAEnnE,EAAQ,QAAE7B,EAAO,UAAEE,GAAcnF,KAAK6C,OACxC,+BACFogF,EAA8B,oCAC9B1U,EAAmC,yCACnCE,EAAwC,4DACxC8B,EAA2D,qEAC3DX,EAAoE,2BACpEH,EAA0B,8BAC1BE,EAA6B,6BAC7BG,EAA4B,sCAC5BE,EAAqC,mCACrCE,EAAkC,gCAClCE,EAA+B,kBAC/BC,EAAiB,kBACjBtjD,EAAiB,iBACjBC,EAAgB,cAChBuD,GACAprB,EACJ,GAAI+S,EAAAA,gBAAgBC,YAAY81D,MAAAA,OAAkB,EAAlBA,EAAoBC,yBAA0B,CAuC1E,MPjU8BrrE,CAAAA,IACtC,MAAM,gBAAEq/B,EAAe,oBAAE4xC,EAAmB,UAAE3uE,GAActC,GACtD,+BAAEogF,GAAmC99E,EAErC+T,EAAkB46D,EAAoBoP,gBACxCr/E,EAAAA,cAACsV,EAAAA,MAAK,CAACC,MAAO06D,EAAoBoP,gBAAgBvrE,gBAAiBE,OAAQi8D,EAAoBoP,gBAAgBrrE,QAC3GhU,EAAAA,cAAA,QAAMC,UAAWgwE,EAAoBoP,gBAAgBtrE,eACrD/T,EAAAA,cAAA,YAAOiwE,EAAoBoP,gBAAgBxrE,mBAG/ChR,EAGJ,MAAO,CACHy8E,oBAAqB1R,EAAiC5uE,GACtDivE,kBACIjuE,EAAAA,cAAC6H,EAAAA,OAAM,CAAC5H,UAAW,GAAGo+B,mCAAkDr2B,QAASgmE,EAAoBhvE,IAChGogF,GAGTpO,YAAa37D,IO6SFkqE,CAtCoD,CACvDr8E,KAAM,CAAEknE,mBAAAA,GACR/rC,gBAAiBliC,KAAK+5E,WACtB53E,GAAI,mBACJ2E,SAAAA,EACA7B,QAAAA,EACA2sE,SAAU,CACNE,kBAAmB9xE,KAAKw7E,mBACxBlhE,eAAiB8D,GACbpe,KAAKgN,SAAS,CACVk2E,gBAAiB,CACbxrE,YAAa0G,EACbzG,gBAAiB3X,KAAKiX,eACtBW,aAAc5X,KAAKkX,oBACnBW,QAAQ,MAIxBi8D,oBAAqB9zE,KAAKyM,MAC1BtH,UAAW,CACP89E,+BAAAA,EACA1U,oCAAAA,EACAE,yCAAAA,EACA8B,4DAAAA,EACAX,qEAAAA,EACAH,2BAAAA,EACAE,8BAAAA,EACAG,6BAAAA,EACAE,sCAAAA,EACAE,mCAAAA,EACAE,gCAAAA,EACAC,kBAAAA,EACAtjD,kBAAAA,EACAC,iBAAAA,EACAuD,cAAAA,KAMZ,OAAO,KAOHiyD,sBAEJ,IAAKxiF,KAAK6C,MAAMoC,QAAQiK,IAAI9H,OAAOi8E,sBAC/B,OAAO,KAGX,IAAKnrE,EAAAA,gBAAgBC,YAAYnY,KAAK6C,MAAMoS,MAAMquE,mBAC9C,OAAO,KAGX,MAAMC,EAAiB,GAAGvjF,KAAK+5E,4BAC/B,OACIl2E,EAAAA,cAAA,OAAKC,UAAWy/E,GACX1/E,EAAAA,aAAmB7D,KAAK6C,MAAMoS,MAAMquE,kBAAkB,GAA0B,CAC7ElrE,kBAAmBpY,KAAKyM,MAAM2L,qBAUtC0qE,uBACJ,MAAMS,EAAiB,GAAGvjF,KAAK+5E,4BAC/B,OAAOl2E,EAAAA,cAAA,OAAKC,UAAWy/E,GAAiBvjF,KAAKwjF,uBAAuBxjF,KAAK+5E,aAOrE0J,8BACJ,MAEMC,EAFqC1jF,KAAKyM,MAAMyQ,SAEUvb,KAAK6b,GAC1D,IAAIs3D,EAAsBt3D,KAGrC,OAAOtF,EAAAA,gBAAgBqvD,YAAYmc,GAmC/BF,uBAAuB1/E,GAC3B,MAAM6/E,EAAiB,GAAG7/E,gBAE1B,OACID,EAAAA,cAACs0E,EAA4B,CACzBh2E,GAAIwhF,EACJr+E,SAAUtF,KAAK6C,MAAMV,GACrBs1E,eAAgBz3E,KAAK6C,MAAMiE,SAC3BA,SAAU9G,KAAK6C,MAAMiE,SACrB/C,IAAK4/E,EACL7/E,UAAW6/E,EACX58E,KAAM,CACFuxE,uBAAwBt4E,KAAKyjF,8BAC7BlL,oCAAqCv4E,KAAKg6E,sCAE9C/0E,QAASjF,KAAK6C,MAAMoC,QACpBE,UAAWnF,KAAK6C,MAAMsC,UACtBkzE,aAAcr4E,KAAKyM,MAAMqM,SACzBkgE,UAAWh5E,KAAKo7E,8BAKpBgB,yBAAyB5+D,GAC7B,MAAMylB,EAAcjjC,KAAK4jF,+BAA+B5jF,KAAKg6E,qCAAsCx8D,GAC7F0lB,EAAcljC,KAAK6jF,+BACrB7jF,KAAKi6E,gCAAkCj6E,KAAKg6E,qCAC5Cx8D,GAEJ,IAAIJ,EAAmBpd,KAAK8jF,aACxB9jF,KAAKg6E,qCACLh6E,KAAKk6E,sCACL18D,GAEJJ,EAAWm4C,KAAKryB,IAAI9lB,EAAU6lB,GAE9BjjC,KAAKgN,SAAS,CACVi2B,IAAAA,EACAC,IAAAA,EACA9lB,SAAAA,IAIAwmE,+BAA+BrL,EAA8C/6D,GAAsB,IAAAoB,EACvG,OAAI25D,GAAAA,MAAuC/6D,GAAiB,QAAVoB,EAAPpB,EAASG,gBAAQ,IAAAiB,GAAjBA,EAAmBk6D,iBAAmBt7D,EAAQG,SAASm7D,gBAAkB,EACzGt7D,EAAQG,SAASm7D,gBAGrB,EAGH+K,+BAA+B5mE,EAAyCO,GAAsB,IAAAumE,EAClG,OAAI9mE,GAAAA,MAAkCO,GAAiB,QAAVumE,EAAPvmE,EAASG,gBAAQ,IAAAomE,GAAjBA,EAAmBnmE,iBAAmBJ,EAAQG,SAASC,gBAAkB,EACpGJ,EAAQG,SAASC,gBAGrB5d,KAAK6C,MAAMoC,QAAQiK,IAAI9H,OAAO6kB,2BAGjC63D,aACJvL,EACAyL,EACAxmE,GAAsB,IAAAymE,EAEtB,IAAIC,EAAkB,EAEtB,OAAK3L,GAAwCyL,GAIzCxmE,MAAAA,GAAiB,QAAVymE,EAAPzmE,EAASG,gBAAQ,IAAAsmE,GAAjBA,EAAmBE,iBAAmB3mE,EAAQG,SAASwmE,gBAAkB,IACzED,EAAkB1mE,EAAQG,SAASwmE,iBAGhCD,GAPIA,EAmSP/E,oBACJtvE,EACA+6C,GAEA,IAAK/6C,EACD,MAAO,GAEX,MAAMqK,EAA4D,GAC5D/U,EAAYnF,KAAK6C,MAAMsC,UAC7B,IAAK,MAAMkyE,KAAaxnE,EACpBqK,EAAWm9D,EAAUvwB,oBAAsB9mD,KAAKy+E,yBAAyBpH,EAAUvwB,mBAAoB3hD,EAAWylD,GAEtH,OAAO1wC,IA5nBDkU,EAAAA,EAAAA,IAAA,CAAT4K,EAAAA,IAAQ,6BA60Bb,kGE1jCA,MAAMorD,EAA2BC,IAC7B,MAAM,eAAEC,EAAc,oBAAEC,EAAmB,QAAEn/C,EAAO,OAAEo/C,EAAM,OAAEC,GAAWJ,EAEzE,OACIxgF,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKogF,GACNzgF,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKqgF,GAAsBn/C,GAC/Bo/C,EACAC,IAUPC,EAAmB9B,IACrB,QAAkBl8E,IAAdk8E,EAAyB,CACzB,MAAM,eAAE0B,EAAc,UAAEK,GAAc/B,EAEtC,OAAO/+E,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKogF,GAAiBK,EAAUhjF,IAAIyiF,IAEpD,OAAO,MA8FX,EA7C+DvhF,IAC3D,MAAM,oBACFu/E,EAAmB,aACnB3U,EAAY,KACZh6D,EAAI,mBACJgvE,EAAkB,OAClB58C,EAAM,UACN+8C,EAAS,iCACTF,EAAgC,6BAChCC,EAA4B,aAC5BtK,EAAY,OACZ8J,EAAM,UACN7pE,EAAS,QACTgqE,EAAO,aACPS,GACAlgF,EAEJ,OACIgB,EAAAA,cAACwQ,EAAAA,OAAMpQ,OAAAC,OAAA,GAAKk+E,GACPD,EACAG,GACGz+E,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKo+E,GACLS,MAAAA,OAAY,EAAZA,EAAclO,YACdkO,MAAAA,OAAY,EAAZA,EAAcI,oBACdJ,MAAAA,OAAY,EAAZA,EAAcjR,mBAGvBjuE,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK2hC,GACNhiC,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKupE,GAhEPmX,EACfnxE,EACA4kE,EACAwM,EACAC,EACAC,EACAnC,IAEOvK,EACHx0E,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK2gF,GACNhhF,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK4gF,GACLrxE,EAAK+J,QACLknE,EAAgB9B,GAChBnvE,EAAK2J,SACNvZ,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK6gF,GAA2BtxE,EAAKohE,aACzCphE,EAAKmhE,eAId/wE,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK2gF,GACNhhF,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK6gF,GAA2BtxE,EAAKohE,aAC1ChxE,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK4gF,GACLrxE,EAAK+J,QACLknE,EAAgB9B,GAChBnvE,EAAK2J,SACL3J,EAAKmhE,eAwCDgQ,CACGnxE,EACA4kE,EACAoK,EACAC,EACAC,EACAC,GAEH//E,EAAM0/E,eAGdjqE,8bC1GE,MAAM0sE,UAAyBnhF,EAAAA,UAW1CtE,YAAYsD,GACRyJ,MAAMzJ,GACN7C,KAAKilF,QAAUjlF,KAAKilF,QAAQ7gD,KAAKpkC,MACjCA,KAAKklF,mBAAoB,EACzBllF,KAAKyM,MAAQ,CAAEoL,OAAShV,EAAM0vE,eAAiB1vE,EAAM0vE,cAAc16D,SAAW,GAC9E7X,KAAKmlF,iBAAmBzyE,GAAAA,CAAW,gBAAiB1S,KAAK6C,MAAM4vE,qBAAuBzyE,KAAK6C,MAAM4vE,qBAAuB,IAEpHzyE,KAAK6C,MAAMuiF,cACXplF,KAAKqlF,gBAAkB3yE,GAAAA,CACnB1S,KAAKmlF,iBACLnlF,KAAK6C,MAAMojC,UAAYjmC,KAAK6C,MAAMojC,UAAYjmC,KAAK6C,MAAMqjC,WAAalmC,KAAK6C,MAAMqjC,WAAa,IAElGlmC,KAAKslF,iBAAmBtlF,KAAKqlF,kBAE7BrlF,KAAKqlF,gBAAkB3yE,GAAAA,CAAW1S,KAAKmlF,iBAAkBnlF,KAAK6C,MAAMojC,UAAYjmC,KAAK6C,MAAMojC,UAAY,IACvGjmC,KAAKslF,iBAAmB5yE,GAAAA,CAAW1S,KAAKmlF,iBAAkBnlF,KAAK6C,MAAMqjC,WAAalmC,KAAK6C,MAAMqjC,WAAa,KAI3Gtf,sBAAsBC,EAAmCC,GAC5D,OAAI9mB,KAAKyM,QAAUqa,GAAa9mB,KAAK6C,QAAUgkB,EAM5CjV,SACH,MAAM2gE,uWAAa/rE,CAAA,GAAQxG,KAAK6C,MAAM0vE,oBAGT7rE,IAAzB6rE,EAAc16D,QAAwB7X,KAAKklF,kBAC3C3S,EAAc16D,OAAS7X,KAAKyM,MAAMoL,OAGlC7X,KAAKyM,MAAMoL,OAAS06D,EAAc16D,OAEtC06D,EAAczwB,SAAW9hD,KAAK6C,MAAMi/C,SACpC,MAAM+wB,EAAcngE,GAAAA,CAAW,SAAU1S,KAAK6C,MAAMiB,UAAY9D,KAAK6C,MAAMiB,UAAY,IAEvF,OADA9D,KAAKklF,mBAAoB,EAErBrhF,EAAAA,cAAA,OAAKC,UAAW+uE,GACZhvE,EAAAA,cAAC6H,EAAAA,OAAMzH,OAAAC,OAAA,GACClE,KAAK6C,MAAMkwE,kBAAiB,CAChClnE,QAAS7L,KAAKilF,QAAO,gBACN1S,EAAc16D,OAC7Bm7D,OAAK,EACLtoD,SAAU1qB,KAAK6C,MAAM6nB,SACrB5mB,UAAU,iBACVsV,MAAM,cAELpZ,KAAKizE,iCAAiCV,EAAc16D,SAEzDhU,EAAAA,cAAC8U,EAAAA,SAAQ1U,OAAAC,OAAA,GAAKquE,KAKlBU,iCAAiCsS,GACrC,MAAMpS,EAAwBzgE,GAAAA,CAC1B,qBACA1S,KAAK6C,MAAMuwE,sBAAwBpzE,KAAK6C,MAAMuwE,sBAAwB,IAE1E,OACIvvE,EAAAA,cAAAA,EAAAA,SAAA,KACIA,EAAAA,cAAA,MAAIC,UAAW4O,GAAAA,CAAWygE,EAAuB,oCAAqCnzE,KAAK6C,MAAM0wE,mBACjG1vE,EAAAA,cAAA,QAAMC,UAAW4O,GAAAA,CAAWygE,EAAuB,wCAC9CnzE,KAAK6C,MAAM2wE,uBAEfxzE,KAAKyzE,qBAAqB,qBAAsB8R,IAKrD9R,qBAAqBhkE,EAAkB81E,GAC3C,IAAI7R,EAAa6R,EAAgBvlF,KAAKqlF,gBAAkBrlF,KAAKslF,iBAE7D,OADA5R,EAAa,GAAGA,KAAcjkE,IACvB5L,EAAAA,cAAA,QAAMC,UAAW4vE,IAGpBuR,QAAQp6E,GACZA,EAAEsE,iBACFnP,KAAKgN,SAAS,CAAE6K,QAAS7X,KAAKyM,MAAMoL,SACpC7X,KAAKklF,mBAAoB,EACrBllF,KAAK6C,MAAMwvE,UACXryE,KAAK6C,MAAMwvE,SAASryE,KAAKyM,QC/ErC,MAaa+4E,EAA2B3iF,IACpC,MAAM,iBACF+wE,EAAgB,kBAChBC,EAAiB,gBACjB4R,EAAe,SACfp7E,EAAQ,YACRkX,EAAW,iBACXmkE,EAAgB,kBAChBzR,EAAiB,iBACjBC,EAAgB,mBAChBC,EAAkB,2BAClBwR,EAA0B,qBAC1BvR,EAAoB,kBACpBhqE,EAAiB,qBACjBw7E,GACA/iF,EAEE+H,EA9BqBR,CAAAA,GAAgDsrB,IAC3EtrB,EAAkBsrB,EAAM5qB,OAAOC,OAAS,KA6BlBupE,CAAsBlqE,GAEtCmqE,EAvBwBH,CAAAA,GAAmD1+C,IACjF0+C,EAAqB1+C,EAAM5qB,OAAOC,OAAS,KAsBbypE,CAAyBJ,GAEjDK,EACF5wE,EAAAA,cAAA,OAAKC,UAAU,6CACXD,EAAAA,cAAA,MAAIC,UAAU,kDAAiD,aAAaowE,GACvEA,GAELrwE,EAAAA,cAAA,SACIC,UAAU,kDACVqH,KAAK,OAAM,aACC+oE,EACZ5oE,IAAKsoE,EACLroE,SAAUX,KAKhB8pE,EACF7wE,EAAAA,cAAA,OAAKC,UAAU,8CACXD,EAAAA,cAAA,MAAIC,UAAU,mDAAkD,aAAamwE,GACxEA,GAELpwE,EAAAA,cAAA,SACIC,UAAU,mDACV6wE,QAAQ,SACRrpE,IAAKuoE,EACLtoE,SAAUgpE,EACV/oE,UAAWnB,EACXc,KAAK,SAAQ,YACH,SAAQ,aACN8oE,EAAiB,gBACd,EAAC,gBACD1yD,EAAW,gBACXkkE,EAAgBroE,SAC/B/R,YAAas6E,KA4BzB,MAAO,CACHnoE,QAASi3D,EACToR,aAxBAhiF,EAAAA,cAAA,OAAKC,UAAU,+CACXD,EAAAA,cAAC6H,EAAAA,OAAM,CACH5H,UAAU,qDACV4mB,SAAUg7D,EAAgB,aACdvR,EACZtoE,QAAS+5E,GAERzR,IAkBT/2D,SAAUs3D,EACVG,YAbA4Q,GAAmBA,EAAgBhuE,aAC/B5T,EAAAA,cAACsV,EAAAA,MAAK,CAACC,MAAOqsE,EAAgBhuE,aAAaE,gBAAiBE,OAAQ4tE,EAAgBhuE,aAAaI,QAC7FhU,EAAAA,cAAA,QAAMC,UAAW2hF,EAAgBhuE,aAAaG,eAC9C/T,EAAAA,cAAA,YAAO4hF,EAAgBhuE,aAAaC,mBAGxChR,ICtHL,MAAMo/E,EAQTvmF,YAAmBwf,EAAoBgnE,GACnC/lF,KAAK+e,SAAWA,EAChB/e,KAAK+lF,cAAgBA,EACrB/lF,KAAKg1E,YAAa,IATtB5mD,EAAAA,EAAAA,IAAA,CADC2K,EAAAA,IAAU,4CC+Bf,MAAMitD,EAAgFnjF,IAClF,MAAM,UAAEsC,GAActC,EAChBqyE,EAA4B,GAAGryE,EAAMiB,qCAC3C,OACID,IAAAA,cAAAA,IAAAA,SAAA,KACIA,IAAAA,cAAA,UACIA,IAAAA,cAAA,QAAMC,UAAW4O,GAAAA,CAAW,GAAG7P,EAAMiB,6BAEzCD,IAAAA,cAAA,UAAKsB,EAAU8gF,6BACfpiF,IAAAA,cAAA,UAAKsB,EAAU+gF,uBACfriF,IAAAA,cAAA,MAAIC,UAAWoxE,GAA4B/vE,EAAUghF,yBACrDtiF,IAAAA,cAAA,UAAKsB,EAAUihF,6BACfviF,IAAAA,cAAA,MAAIC,UAAWoxE,GAA4B/vE,EAAUkhF,wBACrDxiF,IAAAA,cAAA,MAAIC,UAAWoxE,GAA4B/vE,EAAUmhF,qBACrDziF,IAAAA,cAAA,UAAKsB,EAAUohF,yBAUrBC,EAA+E3jF,IACjF,MAAM,UAAEsC,GAActC,EACtB,OACIgB,IAAAA,cAAAA,IAAAA,SAAA,KACIA,IAAAA,cAAA,MAAIC,UAAW4O,GAAAA,CAAW,GAAG7P,EAAMiB,4BACnCD,IAAAA,cAAA,UAAKsB,EAAU8gF,6BACfpiF,IAAAA,cAAA,aAUC4iF,EAAyE5jF,IAClF,MAAM8yE,EAAe,GAAG9yE,EAAMiB,iBAE9B,IAAI8xE,EAOJ,OALIA,EADA/yE,EAAMiW,SACQjV,IAAAA,cAAC2iF,EAAoCviF,OAAAC,OAAA,GAAKrB,IAE1CgB,IAAAA,cAACmiF,EAAqC/hF,OAAAC,OAAA,GAAKrB,IAIzDgB,IAAAA,cAAA,SAAOC,UAAWjB,EAAMiB,WACpBD,IAAAA,cAAA,MAAIC,UAAW6xE,GAAeC,gBC/C1C,MAAMruE,EAAuC,CACzCC,UAAW,CACPC,GAAI,CAAEC,EAAG,gBAAiBC,EAAG,EAAGC,EAAG,GACnCC,GAAI,CAAEH,EAAG,kBAAmBC,EAAG,EAAGC,EAAG,IAEzCG,UAAU,EACVT,iBAAiB,GAQfo/E,EAA+E7jF,IAAmC,IAAAklD,EAAA4+B,EAAA5Q,EACpH,MAAMhtB,GAAmBC,EAAAA,EAAAA,qBACrBnmD,EAAMkE,KAAKyW,QAAQyrC,OACnBpmD,EAAMoC,QAAQC,cAAcpE,eAAeC,YAClB,QAD6BgnD,EACtDllD,EAAMoC,QAAQiC,QAAQgI,WAAG,IAAA64C,GAAQ,QAARA,EAAzBA,EAA2B3gD,cAAM,IAAA2gD,OAAA,EAAjCA,EAAmCmB,kBAGjC8sB,EAAqB,GAAGnzE,EAAMiB,qCAEpC,OACID,IAAAA,cAAA,OAAKC,UAAWkyE,GACZnyE,IAAAA,cAACmE,EAAAA,GAAK,CACFlH,eAAgB+B,EAAMoC,QAAQC,cAAcpE,eAC5CgD,UAAW,GAAGkyE,mBACdrwE,QAAS9C,EAAMkE,KAAKyW,QAAQ3D,KAC5B5R,IAAuC,QAApC0+E,EAAE9jF,EAAMkE,KAAKyW,QAAQ+F,uBAAe,IAAAojE,EAAAA,EAAI,GAC3C58B,YAAahB,EACb5hD,aAActE,EAAMoC,QAAQiC,QAAQC,aACpCE,cAAkC,QAArB0uE,EAAElzE,EAAMwE,qBAAa,IAAA0uE,EAAAA,EAAIxuE,EACtCW,oBAAoB,YAW9B0+E,EAA4E/jF,IAC9E,MAAM2a,EAAyB3a,EAAMkE,KAAKyW,QAE1C,IAAI8E,EAAa,GAKjB,GAJK8Q,EAAAA,iBAAiB6oB,mBAAmBz+B,EAAQ3D,OAAUyoD,EAAAA,iBAAiBC,kBAAkB/kD,EAAQC,YAClG6E,GAAa7b,EAAAA,EAAAA,uBAAsB+W,EAAQ3D,KAAO2D,EAAQC,SAAU5a,EAAMoC,QAAQC,gBAGlFkuB,EAAAA,iBAAiB6oB,mBAAmB35B,GACpC,OAAO,KAGX,MAAMxe,EAAY,GAAGjB,EAAMiB,gCAE3B,OACID,IAAAA,cAAA,OAAKC,UAAWA,GACZD,IAAAA,cAAC6H,EAAAA,OAAM,CAAC5H,UAAW,GAAGA,gBAUrB+iF,EAA8EhkF,IAAmC,IAAAs0E,EAAA2P,EAC1H,MAAMtpE,EAAyB3a,EAAMkE,KAAKyW,QACpCuB,EAAqBlc,EAAMkE,KAAKgY,SAChCm2D,EAA4B,GAAGryE,EAAMiB,gCAE3C,IAAIwe,EAAa,GAKjB,OAJK8Q,EAAAA,iBAAiB6oB,mBAAmBz+B,EAAQ3D,OAAUyoD,EAAAA,iBAAiBC,kBAAkB/kD,EAAQC,YAClG6E,GAAa7b,EAAAA,EAAAA,uBAAsB+W,EAAQ3D,KAAO2D,EAAQC,SAAU5a,EAAMoC,QAAQC,gBAIlFrB,IAAAA,cAAAA,IAAAA,SAAA,KACIA,IAAAA,cAAA,UACIA,IAAAA,cAAC6iF,EAAuCziF,OAAAC,OAAA,GAAKrB,KAEjDgB,IAAAA,cAAA,UAAK2Z,EAAQyrC,QACbplD,IAAAA,cAAA,UACIA,IAAAA,cAAA,OAAKC,UAAW,GAAGjB,EAAMiB,2BACrBD,IAAAA,cAAA,KAAGC,UAAW,GAAGjB,EAAMiB,0BAA2BK,KAAMme,GACnD9E,EAAQ3D,MAEbhW,IAAAA,cAAA,QAAMC,UAAW,GAAGjB,EAAMiB,iCACH,QADkCqzE,EACpD35D,EAAQopC,kBAAU,IAAAuwB,OAAA,EAAlBA,EAAoBx1E,KAAI01E,IAAS,IAAAC,EAAA,OAA4B,QAA5BA,EAAID,EAAUtwB,sBAAc,IAAAuwB,OAAA,EAAxBA,EAA0Bh0E,SAC3D0M,QAAOunE,IAAmBnkD,EAAAA,iBAAiB6oB,mBAAmBs7B,KAC9DvoE,KAAKnM,EAAMsC,UAAU4hF,yCAItCljF,IAAAA,cAAA,MAAIC,UAAWoxE,GAA4Bn2D,EAASioE,OACpDnjF,IAAAA,cAAA,UAAKkb,EAASkoE,qBACdpjF,IAAAA,cAAA,MAAIC,UAAW,GAAGjB,EAAMiB,+BACpBD,IAAAA,cAAC0mD,EAAAA,oBAAmB,CAChBpoD,GAAI,6BAA6Bqb,EAAQC,YAA2B,QAAnBqpE,EAAI/nE,EAASjB,cAAM,IAAAgpE,EAAAA,EAAI,KACxE5jD,IAAK,GACLsnB,aAAczrC,EAASiE,SACvB6J,uBAAwBhqB,EAAMsC,UAAU+hF,iCACxCz8B,yBAA0B5nD,EAAMsC,UAAUgiF,mCAC1Cz8B,yBAA0B7nD,EAAMsC,UAAUiiF,mCAC1CrjF,IAAKgb,EAASjB,OACd8sC,WAAYptC,EAAQwpC,cAG5BnjD,IAAAA,cAAA,MAAIC,UAAWoxE,GAA4Bn2D,EAAS4K,aACpD9lB,IAAAA,cAAA,UACIA,IAAAA,cAAC6H,EAAAA,OAAM,CAAC5H,UAAW,GAAGjB,EAAMiB,4BAA2B,aAAcjB,EAAMsC,UAAUkiF,yCAWxFC,EAA6EzkF,IACtF,MAAM2a,EAAyB3a,EAAMkE,KAAKyW,QACpCuB,EAAqBlc,EAAMkE,KAAKgY,SAEtC,OACIlb,IAAAA,cAAAA,IAAAA,SAAA,KACIA,IAAAA,cAAA,UACIA,IAAAA,cAAC6iF,EAAuCziF,OAAAC,OAAA,GAAKrB,KAEjDgB,IAAAA,cAAA,UACIA,IAAAA,cAAA,OAAKC,UAAW,GAAGjB,EAAMiB,2BACrBD,IAAAA,cAAA,QAAMC,UAAW,GAAGjB,EAAMiB,2BAA4B0Z,EAAQyrC,QAC9DplD,IAAAA,cAAA,QAAMC,UAAW,GAAGjB,EAAMiB,gCACrBwE,EAAAA,EAAAA,QAAOzF,EAAMsC,UAAUoiF,6BAA8BxoE,EAASiE,aAI3Enf,IAAAA,cAAA,UACIA,IAAAA,cAAC+iF,EAAoC3iF,OAAAC,OAAA,GAAKrB,OAW7C2kF,EAAmE3kF,IAC5E,MAAM8yE,EAAe,GAAG9yE,EAAMiB,iBAE9B,IAAI8xE,EAOJ,OALIA,EADA/yE,EAAMiW,SACQjV,IAAAA,cAACyjF,EAAqCrjF,OAAAC,OAAA,GAAKrB,IAE3CgB,IAAAA,cAACgjF,EAAsC5iF,OAAAC,OAAA,GAAKrB,IAI1DgB,IAAAA,cAAA,SAAOC,UAAWjB,EAAMiB,WACpBD,IAAAA,cAAA,MAAIC,UAAW6xE,GAAeC,KCzK7B6R,EAA6D5kF,IACtE,MAAOiW,EAAUs/D,GAAev0E,IAAAA,SAAehB,EAAMw1E,cAC/CqP,EAAqB7kF,EAAMkE,KAAK2gF,mBAKhClP,EAAiBA,KACnBJ,EAAYv1E,EAAMw1E,eAElB71D,EAAAA,GAASC,WACTnR,OAAOD,iBAAiB,SAAUmnE,GAGtC,MAAMlpB,EAAkB,GAAGzsD,EAAMiB,oBAC3B6xE,EAAe,GAAG9yE,EAAMiB,iBAE9B,OACID,IAAAA,cAAA,SAAOC,UAAWjB,EAAMiB,WACpBD,IAAAA,cAAC4iF,EAA8B,CAC3BxhF,QAASpC,EAAMoC,QACf6B,SAAUjE,EAAMiE,SAChB3E,GAAImtD,EACJxrD,UAAWwrD,EACXx2C,SAAUA,EACV3T,UAAWtC,EAAMsC,UACjB4B,KAAM,KAET2gF,EAAmB/lF,KAAI,CAAC82E,EAAmB7pE,IAEpC/K,IAAAA,cAAC2jF,EAA2B,CACxBviF,QAASpC,EAAMoC,QACf6B,SAAUjE,EAAMiE,SAChB3E,GAAI,GAAGwzE,KAAgB/mE,IACvB7K,IAAK00E,EAAkBsN,cAAc98B,OACrCnlD,UAAW6xE,EACXxwE,UAAWtC,EAAMsC,UACjB2T,SAAUA,EACV/R,KAAM,CACFgY,SAAU05D,EAAkB15D,SAC5BvB,QAASi7D,EAAkBsN,0lBCqBvD,MAAMpF,UAAmB98E,EAAAA,cA8ErBtE,YAAmBsD,GACfyJ,MAAMzJ,GAvEO,KAAA0J,SAAmB,IAUnB,KAAAo7E,qBAA4C,IAAIjO,EAAAA,mBAAyB,GAElF,KAAAx/D,WAAuC,GAEvC,KAAA0tE,sBAAqC,IAAI/N,IAEhC,KAAAgO,sBAAgC,oCAKhC,KAAAC,oBAAkD,CAC/D1N,oBAAsBC,IACdA,GACAr6E,KAAK4nF,sBAAsBxjB,IAAIiW,IAUvCC,uBAAwBn6E,MAAOo6E,EAA6BC,KAAmD,IAAAC,EAG3G,GAFAz6E,KAAKka,WAAWqgE,GAAuBC,EAEnCx6E,KAAK4nF,sBAAsBlN,QAAqC,QAAjCD,EAAKz6E,KAAKyM,MAAM2L,yBAAiB,IAAAqiE,OAAA,EAA5BA,EAA8B95E,QAClE,OAAOX,KAAK2nF,qBACPhN,SAAQx6E,SACEH,KAAK46E,sBAEfvsE,OAAOpM,IAEJ,GAAIA,IAAU44E,EAAAA,wBAAwBC,gCAClC,MAAM74E,MAY1B84E,gBAAiBA,CAACC,EAAuB71E,IAC9BnF,KAAKi7E,iBAAiBD,EAAe71E,GAOhD+1E,wBAA0BC,IACtBn7E,KAAKgN,SAAS,CAAEmuE,oBAAAA,MA6LP,KAAAztE,mBAAsBlD,IACnC,GAAKA,KAASA,EAAM7J,OAAS,GAezB,OAf4B,CAC5BX,KAAKgN,SAAS,CAAE+6E,YAAav9E,EAAO4S,SAAU,EAAG0+D,qBAAiBp1E,EAAW0R,kBAAmB,KAChGpY,KAAKgN,SAAS,CACVyK,aAAc,CACVC,YAAa,GACbC,gBAAiB,GACjBC,aAAc,GACdC,QAAQ,KAGhB,MAAMmwE,EAAoBhoF,KAAKioF,cAAc/6E,mBAAmBwvE,kBAAoB18E,KAAKioF,cAAc/6E,QACnG86E,IACAA,EAAkBj9E,MAAQ,KAM9B/K,KAAKkoF,qBAELloF,KAAKkoF,oBAAoBt6E,SAG7B,MAAM,UAAE5L,EAAS,QAAEiD,GAAYjF,KAAK6C,MAEpC,GAAIoC,EACA,GAAKmuB,EAAAA,iBAAiB6oB,mBAAmBzxC,GAkCrCxK,KAAKgN,SAAS,CAAE+6E,YAAa,GAAIjM,qBAAiBp1E,EAAWyhF,0BAA0B,QAlC1C,CAC7C,GAAI39E,EAAM7J,OAHF,GAIJ,OAGJX,KAAKkoF,oBAAsBr6E,GAAAA,EAAS,MAChCouE,EAAAA,EAAAA,eACI,IAAIC,EAAAA,mBACAj3E,EAAQC,cAAcpE,eAAeC,YACrCyJ,EACAvF,EAAQC,cAAcpE,eAAeC,YAAYC,WAErDhB,KAAK6C,MAAMoC,QAAQC,eAElBzC,MAAKwL,IACFjO,KAAKgN,SAAS,CACV8uE,gBAAiB7tE,MAAAA,OAAO,EAAPA,EAASiC,QAC1BkI,kBAAmBnK,MAAAA,OAAO,EAAPA,EAASkuE,qBAC5BgM,0BAA0B,OAGjC95E,OAAMpM,IACHjC,KAAKgN,SAAS,CAAE+6E,YAAa,KAC7B/lF,EAAUsM,UAAUrM,GACpBD,EAAUuM,MAAM,mCAEzBvO,KAAKuM,UAERiC,YAAW,KAEPxO,KAAKkoF,wBACN,GACHloF,KAAKgN,SAAS,CAAE+6E,YAAav9E,EAAO29E,0BAA0B,MAWzD,KAAAC,eAAiBjoF,UAC9B,MAAM,QAAE8E,EAAO,KAAE8B,EAAI,UAAE5B,EAAS,UAAEnD,GAAchC,KAAK6C,OAC/C,KAAEiZ,GAAS/U,GACX,oCAAEshF,EAAmC,oCAAEC,GAAwCnjF,GAC/E,gBAAE22E,EAAe,SAAE1+D,GAAapd,KAAKyM,MAC3CzM,KAAKgN,SAAS,CACVyK,aAAc,CACVC,YAAa,GACbC,gBAAiB,GACjBC,aAAc,GACdC,QAAQ,KAKhB,GADoBikE,SAA0B97E,KAAK0mB,cAAco1D,EAAiB1+D,IAC/DtB,EAAKjM,aAA8BnJ,IAApBo1E,EAA+B,CAAC,IAADtd,EAE7D,MAAMh6C,QAAwB8P,EAAAA,EAAAA,yBAC1B,CACI/yB,cAAevB,KAAK6C,MAAMoC,QAAQC,cAClC1D,oBAAqB+yB,EAAAA,yBAAyBC,qCAAqCx0B,KAAK6C,MAAMoC,QAAQC,gBAE1G,CAAC42E,EAAgBr+D,WAEf2K,EAA+E,QAA1Do2C,EAAGx+D,KAAK6C,MAAMoC,QAAQC,cAAcpE,eAAeunB,eAAO,IAAAm2C,OAAA,EAAvDA,EAAyDl2C,sBACjFigE,EACFrwE,EAAAA,gBAAgBC,YAAYqM,IAAoBtM,EAAAA,gBAAgBC,YAAYqM,EAAgB,GAAG9E,iBACzF8E,EAAgB,GAAG9E,gBAAgB,GAAGE,UACtClZ,OAEkCA,IAAxC1G,KAAKyM,MAAM+7E,gCACLxoF,KAAKyoF,sBAEf,MAAMC,EAAwC1oF,KAAKgtC,iCAC7C,yBAAEw7C,GAA6BxoF,KAAKyM,MACpCk8E,EAAwB,CAC1BnrE,QAASs+D,EACT9qD,MAAO5T,EAEP2O,iBAAkB9mB,EAAQiK,IAAI9H,OAAO2kB,iBACrC1H,kBAAmBmkE,EAA2BA,EAAyB1nE,yBAAyBO,kBAAoB,EACpHpD,qBAAsB,CAAE2qE,oCAAqCF,GAC7DG,kCAAwDniF,IAA1B6hF,GAAuCA,IAA0BngE,EAC/F4H,aAAcu4D,GAGlBzsE,EAAKjM,OACAi5E,iBAAiBH,GACjBlmF,MAAKtC,MAAAA,IACF,GAAsB,YAAlB0P,EAAOiZ,OAAsB,CAC7B9oB,KAAK6C,MAAMb,UAAUuM,MAAM,8BAC3B,MAAMw6E,EAAmB/oF,KAAK4zE,iBAAiB1mE,mBAAmBwvE,kBAAoB18E,KAAK4zE,iBAAiB1mE,QACtG86E,EAAoBhoF,KAAKioF,cAAc/6E,mBAAmBwvE,kBAAoB18E,KAAKioF,cAAc/6E,QACnG67E,IACAA,EAAiBh+E,MAAQ,IAEzBi9E,IACAA,EAAkBj9E,MAAQ,KAG9B/K,KAAKka,WAAa,GAClBla,KAAKgN,SAAS,CACV+6E,YAAa,GACb3qE,SAAU,EACV0+D,qBAAiBp1E,EACjB0R,kBAAmB,GACnBX,aAAc,CACVC,YAAa2wE,EACb1wE,gBAAiB,UACjBC,aAAc,eACdC,QAAQ,UAGb,GAAyB,gBAArBhI,EAAOm5E,UAA6B,CAC3ChpF,KAAK6C,MAAMb,UAAUuM,MAAM,gEAAiE6O,GAC5F,MAAM6rE,EAA4BjpF,KAAKkpF,kBAAkBV,EAA0BprE,GAEnFpd,KAAKgN,SAAS,CACVyK,aAAc,CACVC,YAAauxE,EACbtxE,gBAAiB,SACjBC,aAAc,8BACdC,QAAQ,UAGb,GAAyB,mBAArBhI,EAAOm5E,WAAkCN,EAA8B,CAAC,IAADS,EAC9E,MAAMF,EAA+C,QAAtBE,EAAGt5E,EAAOqjB,oBAAY,IAAAi2D,OAAA,EAAnBA,EAAqBh2D,iBACvDnzB,KAAK6C,MAAMb,UAAUuM,MACjB,gEACA06E,GAGJjpF,KAAKgN,SAAS,CACVyK,aAAc,CACVC,YAAauxE,GAA6BX,EAC1C3wE,gBAAiB,SACjBC,aAAc,8BACdC,QAAQ,UAIhB7X,KAAK6C,MAAMb,UAAUuM,MAAM,iEAE3BvO,KAAKgN,SAAS,CACVyK,aAAc,CACVC,YAAa4wE,EACb3wE,gBAAiB,SACjBC,aAAc,8BACdC,QAAQ,QAKvBxJ,OAAMpM,IACHD,EAAUqa,QAAQpa,GAClBD,EAAUuM,MAAM,uEAEhBvO,KAAKgN,SAAS,CACVyK,aAAc,CACVC,YAAa4wE,EACb3wE,gBAAiB,SACjBC,aAAc,8BACdC,QAAQ,UAOf,KAAAm1B,8BAAgC,KAAc,IAAAzf,EAAAC,EAAAM,EAC3D,MAAML,EAAkBztB,KAAK6C,MAAMkE,KAAK4S,aAAa9J,OAMrD,IAJI4d,MAAAA,GAEC,QAFcF,EAAfE,EAAiB3kB,MACb6Q,GAAsC,wEAAtBA,EAAaE,cAChC,IAAA0T,OAAA,EAFDA,EAEGzT,aAAa,EAGhB,OAAO,EAOX,MAHI2T,MAAAA,GAA8H,QAA/GD,EAAfC,EAAiB3kB,MAAK6Q,GAAsC,oEAAtBA,EAAaE,cAA2E,IAAA2T,OAAA,EAA9HA,EACM1T,aAAa,GAGnB,OAAO,EAOX,GAJ+B2T,MAAAA,GAE9B,QAF6CK,EAAfL,EAAiB3kB,MAC5C6Q,GAAsC,mDAAtBA,EAAaE,cAChC,IAAAiU,OAAA,EAF8BA,EAE5BhU,UAEyB,CAAC,IAADiN,EACxB,MAAM4G,EAAiF,QAA1C5G,EAAG/mB,KAAK6C,MAAMoC,QAAQiC,QAAQgI,IAAI0e,gBAAQ,IAAA7G,OAAA,EAAvCA,EAAyC8G,iCACnFE,EAAe/tB,KAAK6C,MAAMkE,KAAKqT,oBAAoBvK,OAEnDw9B,EAC0C,QAA5C1f,GACCI,IACiD,QAA5CJ,GAAqDI,EAAaC,OACnB,QAA5CL,IAAsDI,EAAaC,OAEhF,OAAOqf,MAAAA,GAAAA,EACJ,CAAC,IAAD7mB,EAAAyH,EACH,MAAMC,EAAqD,QAApC1H,EAAGxmB,KAAK6C,MAAMkE,KAAKmnB,yBAAiB,IAAA1H,OAAA,EAAjCA,EAAmC3W,OAC7D,QAA+C,QAAxCoe,EAAEC,MAAAA,OAAiB,EAAjBA,EAAmBC,2BAAmB,IAAAF,GAAAA,KAoCtC,KAAAm7D,8BAAgC,CAACjmE,EAAyB5B,KACvE,MAAM,+BAAE8nE,EAA8B,kCAAEC,GAAsCtpF,KAAK6C,MAAMsC,UAEzF,MAAwB,MAApBge,EAEImmE,EAAkC/lF,QAAQ,gBAAiB4f,GAC3DkmE,EAA+B9lF,QAAQ,gBAAiBge,GAIzD8nE,EAA+B9lF,QAAQ,gBAAiBge,IAOlD,KAAA86D,sBAAyBtxE,IACtC,IAAIwxE,EAAe17C,OAAOz3B,SAAS2B,EAAO,IAC1C,MAAMyxE,EAAex8E,KAAKioF,cAAc/6E,mBAAmBwvE,kBAAoB18E,KAAKioF,cAAc/6E,QAE9Fi6B,MAAMo1C,KACNA,EAAe,GAGnBv8E,KAAKgN,SAAS,CAAEoQ,SAAUm/D,IAAgB,KACtC1uE,GAAAA,EAAS,MACAs5B,MAAMnnC,KAAKyM,MAAM2Q,WAAapd,KAAKyM,MAAM2Q,UAAY,GAAKo/D,IAC3DA,EAAa9rE,aAAa,gBAAiB6rE,EAAax+D,YACxDy+D,EAAa9rE,aAAa,QAAS6rE,EAAax+D,eAErD,IALHlQ,OASS,KAAAkwE,sBAAwB,CACrCO,EACAC,KAEA,GAAIA,GAAcD,EAAqBE,gBACnC,OAAOF,EAAqBE,gBAAgB11E,MAAKuuE,GAAaA,EAAU55D,YAAc8gE,KAM7E,KAAAtD,iBAAmB,CAACD,EAAuB71E,KAA0D,IAAAm3E,EAClH,MAAM1xB,EAAuC,QAA7B0xB,EAAGt8E,KAAKyM,MAAMqvE,uBAAe,IAAAQ,OAAA,EAA1BA,EAA4Bt1B,WAE/C,OAAQg0B,GACJ,KAAK,EACD,OAAO71E,EAAUknB,0BACrB,KAAK,EACD,OAAOlnB,EAAUonB,kCACrB,KAAK,EACD,OAAOpnB,EAAUgnB,yBACrB,KAAK,EACD,OAAOy+B,EAAazlD,EAAU+1C,2BAA6B/1C,EAAUsnB,0BACzE,QACI,MAAO,KAOF,KAAAmuD,kBAAoBz6E,UACjC,MACI8E,SAAS,cACLC,EACAgC,SACInG,aAAa,UAAEC,MAGvBhB,KAAK6C,OACH,kBAAEuV,EAAiB,gBAAE0jE,GAAoB97E,KAAKyM,MACpD,IAAKqvE,IAAoB1jE,EACrB,OAGJ,MAAMklE,EAAkB92E,EAAA,GAAkCxG,KAAKka,YAI/D,GAHAla,KAAKgN,SAAS,CAAEmuE,qBAAqB,IAGjCn7E,KAAKyM,MAAM8wE,2BAA2BC,WAAY,CAClD,MAAMC,EAAoBj3E,EAAA,GAAQxG,KAAKyM,MAAM8wE,4BAC7CE,EAAqBD,gBAAa92E,EAClC1G,KAAKgN,SAAS,CAAEuwE,2BAA4BE,IAIhD,IAAK,MAAM15E,KAAOE,OAAO0S,KAAK2mE,GAC1B,GAAIt9E,KAAKyM,MAAM8wE,2BAA2BI,gBAAgB55E,GAAM,CAC5D,MAAM65E,EAAUp3E,EAAA,GAAQxG,KAAKyM,MAAM8wE,4BACnCK,EAAWD,gBAAgB55E,QAAO2C,EAElC1G,KAAKgN,SAAS,CAAEuwE,2BAA4BK,IAMpD,MAAMC,EAAmBzlE,EACpBzW,KAAI01E,IACM,CACHvwB,mBAAoBuwB,EAAUvwB,mBAC9BC,eACI/mD,KAAK+9E,sBAAsB1G,EAAWiG,EAAmBjG,EAAUvwB,sBAAwBuwB,EAAUtwB,eACzGjxB,oBAAqBuhD,EAAUvhD,wBAGtC9lB,QAAOqnE,GACGA,EAAUtwB,iBAKnB2P,EAAkB,IAAIn0D,SAA8BpC,MAAOoc,EAASgtE,KACtE,MAAMvL,QAAmBC,EAAAA,EAAAA,oBACrB,IAAIC,EAAAA,qBACApC,EAAgBtZ,gBAAkBsZ,EAAgBtZ,gBAAkBsZ,EAAgBr+D,SACpFzc,EACA68E,OACAn3E,EACA1G,KAAK6C,MAAMoC,QAAQiC,SAEvBhC,GAEA84E,SACMG,EAAAA,EAAAA,iCACF,IAAIC,EAAAA,qCACAJ,EAAWxb,gBAAkBwb,EAAWxb,gBAAkBwb,EAAWvgE,SACrEzc,EACA68E,EACA79E,KAAK6C,MAAMoC,QAAQiC,SAEvBhC,GAIRqX,EAAQyhE,MAGNK,QAAuB3nB,EAE7B,GADA12D,KAAKgN,SAAS,CAAE8uE,gBAAoC,OAAnBuC,EAA0BA,OAAiB33E,IACxE23E,EAAgB,CAGhB,MAAMmL,QAA6BC,EAAAA,EAAAA,4CAC/B,IAAIC,EAAAA,6CAA6CrL,EAAe5gE,SAAUzc,GAC1EkE,GAGAskF,GAAwBA,EAAqB7oF,OAAS,EACtDX,KAAKgN,SAAS,CAAEw7E,yBAA0BgB,EAAqB,KAE/DxpF,KAAKgN,SAAS,CAAEw7E,8BAA0B9hF,MAQrC,KAAA+hF,oBAAsBtoF,UACnC,MACI8E,SAAS,cACLC,EACAgC,SACInG,aAAa,UAAEC,MAGvBhB,KAAK6C,OACH,gBAAEi5E,GAAoB97E,KAAKyM,MACjC,IAAKqvE,EACD,OAGJ,IAAI6N,QACEF,EAAAA,EAAAA,4CACF,IAAIC,EAAAA,6CAA6C5N,EAAgBr+D,SAAUzc,GAC3EkE,GACFzC,MAAKoN,IACCqI,EAAAA,gBAAgBC,YAAYtI,GAC5B85E,EAAmB95E,EAAO/G,MAAKsU,GAAYA,EAAS0D,yBAAyBpD,YAAco+D,EAAgBr+D,WAE3Gzd,KAAKgN,SAAS,CAAEw7E,8BAA0B9hF,IAE9C1G,KAAKgN,SAAS,CAAEw7E,yBAA0BmB,QAWjC,KAAAlL,yBAA2B,CACxCC,EACAv5E,EACAylD,KAEA,OAAQ8zB,GACJ,KAAK,EACD,OAAOv5E,EAAUykF,gDACrB,KAAK,EACD,OAAOzkF,EAAU0kF,wDACrB,KAAK,EACD,OAAO1kF,EAAU2kF,+CACrB,KAAK,EACD,OAAOl/B,EACDzlD,EAAU4kF,iDACV5kF,EAAU6kF,gDACpB,QACI,MAAO,KAIF,KAAAC,2BAA6B9pF,eACEuG,IAAxC1G,KAAKyM,MAAM+7E,gCACLxoF,KAAKyoF,uBAUF,KAAA/hE,cAAgBvmB,MAAO27E,EAAgC1+D,KAAsC,IAAA6hE,EAC1G,MAAMC,EAA8C,QAA7BD,EAAGnD,EAAgBl1B,kBAAU,IAAAq4B,OAAA,EAA1BA,EAA4BjvE,QAAQqnE,IAA2B,IAAAC,EAAA,QAA8B,QAAzBA,EAACD,EAAUtwB,sBAAc,IAAAuwB,GAAxBA,EAA0Bh0E,UACzH,GAAI47E,GAAqBA,EAAkBv+E,OAAS,EAAG,CACnD,MAAMk0E,EAAc70E,KAAKm/E,oBAAoBD,GAAmB,GAChE,GAAIl/E,KAAKyM,MAAM8wE,2BAA2BI,gBAAiB,CACvD,MAAMC,EAAUp3E,EAAA,GAAQxG,KAAKyM,MAAM8wE,4BAInC,OAHAK,EAAWD,gBAAkB9I,EAE7B70E,KAAKgN,SAAS,CAAEuwE,2BAA4BK,KACrC,GAIf,GAAIxgE,GAAY,EAAG,CACf,MAAMjY,EAAYnF,KAAK6C,MAAMsC,UAS7B,OARAnF,KAAKgN,SAAS,CACVyK,aAAc,CACVC,YAAavS,EAAU+kF,gCACvBvyE,gBAAiB,SACjBC,aAAc,8BACdC,QAAQ,MAGT,EAIX,MAAM,QAAE5S,GAAYjF,KAAK6C,MACzB,IAAKoC,EAAQiK,IAAI9H,OAAO2kB,iBACpB,OAAO,QAGL/rB,KAAKiqF,6BACX,MAAM,yBAAEzB,GAA6BxoF,KAAKyM,MACpC4X,EAAoBmkE,EAA2BA,EAAyB1nE,yBAAyBO,kBAAoB,EAC3H,aAA0B3a,IAAtB2d,GAAmCA,GAAqB,KACxDrkB,KAAKgN,SAAS,CACVyK,aAAc,CACVC,YAAa1X,KAAK6C,MAAMsC,UAAUglF,6BAClCxyE,gBAAiB,SACjBC,aAAc,8BACdC,QAAQ,MAGT,IA1tBX7X,KAAK4zE,iBAAmB/vE,EAAAA,YACxB7D,KAAKioF,cAAgBpkF,EAAAA,YACrB7D,KAAKoqF,SAAiD,WAAtCvnF,EAAMoC,QAAQiC,QAAQ8tC,OAAOC,KAAoB,KAAO,KAExEj1C,KAAKgD,kBAAmBiO,EAAAA,EAAAA,oBACpBjR,KAAK6C,MAAMoC,QAAQiC,QAAQgK,kBAC3BlR,KAAK6C,MAAMsO,aACXnR,KAAK6C,MAAMb,WAEfhC,KAAKyM,MAAQ,CACTs7E,YAAa,GACbI,0BAA0B,EAC1BK,8BAA0B9hF,EAC1B0W,SAAU,EACV0+D,qBAAiBp1E,EACjB0R,uBAAmB1R,EACnB62E,2BAA4B,CACxBI,gBAAiB,IAErB7kE,SAAU9Y,KAAK8Y,SACfoE,SAAU,IAEdld,KAAK0N,mBAAqB1N,KAAK0N,mBAAmB02B,KAAKpkC,MACvDA,KAAKq8E,sBAAwBr8E,KAAKq8E,sBAAsBj4C,KAAKpkC,MAC7DA,KAAKqqF,oBAAsB,+BAC3BrqF,KAAKsqF,6BAA+B,oCACpCtqF,KAAKuqF,yBAA2B,mCAG1B,eACN,MAAyB,OAAlBvqF,KAAKoqF,UAAuC,OAAlBpqF,KAAKoqF,SAGnCx4E,SACH,MAAM,KAAE7K,GAAS/G,KAAK6C,MACtB,IAAKkE,EAAKqT,oBAAoBvK,OAC1B,OAAO,KAGX,MAAM,UAAE/L,EAAY,GAAE,YAAEyd,GAAgBvhB,KAAK6C,MAAMuE,OAC7C2mB,EAAe/tB,KAAK6C,MAAMkE,KAAKqT,oBAAoBvK,QACnD,wBACF26E,EAAuB,4BACvBC,EAA2B,mBAC3BC,EAAkB,oCAClBC,EAAmC,4BACnCC,EAA2B,oCAC3BC,EAAmC,4CACnCC,EAA2C,sCAC3CC,EAAqC,mCACrCC,EAAkC,oCAClCC,EAAmC,qCACnCC,EAAoC,gCACpCC,GACAnrF,KAAK6C,MAAMsC,UAET88E,EAAiE,CACnEC,4BAA6B6I,EAC7B1+D,0BAA2Bw+D,EAC3Bt+D,kCAAmCu+D,EACnC3+D,yBAA0B6+D,EAC1Bv+D,0BAA2Bw+D,EAC3B/vC,2BAA4BgwC,IAG1B,yBAAE/C,EAAwB,YAAEJ,EAAW,2BAAExK,EAA0B,gBAAEzB,EAAe,kBAAE1jE,GAAsBpY,KAAKyM,MAIjH+F,EAAShM,EAAAA,EAAA,GACPxG,KAAK6C,OAA2C,IAEpDuoF,gBAAiB,CAAEtnF,UAAW4O,GAAAA,CAAW,iBAAkB5O,GAAY2O,YAAazS,KAAK6C,OACzF4qE,aAAc,CAAE3pE,UAAW,2BAC3BunF,MAAOt9D,MAAAA,OAAY,EAAZA,EAAcC,MACrB6X,OAAQ,CACJv/B,IAAK0+E,EACLlhF,UAAW,yBACXyuE,cAAe,CAAE16D,OAAQ7X,KAAKyM,MAAM07E,0BACpC5U,kBAAmBiX,EACnBhX,sBAAuBiX,EACvB3pF,eAAgBd,KAAK6C,MAAMoC,QAAQiC,QACnClE,iBAAkBhD,KAAKgD,kBAE3B6hF,eAAgB,CACZ/gF,UAAW,GAAG9D,KAAKqqF,uBAAuBlC,EAA2B,UAAY,aAErFmC,6BAA8B,CAC1BxmF,UAAW9D,KAAKsqF,8BAEpBC,yBAA0B,CACtBzmF,UAAW9D,KAAKuqF,0BAEpBxC,YAAAA,EACAuD,eAAgBpzE,EAAAA,gBAAgBC,YAAYnY,KAAKyM,MAAMyQ,UAAYld,KAAKwjF,uBAAuB,uBAAoB98E,EACnH+M,KAAM+xE,EAAwB,CAC1B5R,iBAAkB5zE,KAAK4zE,iBACvBC,kBAAmB7zE,KAAKioF,cACxBvC,kBAAmB5J,EACnB3H,mBAAoBuW,EACpBxW,iBAAkB0W,EAClB3W,kBAAmB0W,EACnBhF,2BAA4BwF,EAC5B9gF,SAAU,GACVkX,YAAAA,EACAkkE,gBAAiBzlF,KAAKyM,MACtBrC,kBAAmBpK,KAAK0N,mBACxBk4E,qBAAsB5lF,KAAKooF,eAC3BhU,qBAAsBp0E,KAAKq8E,wBAE/BuG,UACI9G,GAAmB1jE,GACbyqE,EAAAA,EAAAA,qBACI7iF,KAAK6nF,sBACL7nF,KAAK6C,MAAMoC,QACXjF,KAAK6C,MAAMsO,aACXnR,KAAK6C,MAAMb,UACX+oF,EACA9I,EACAjiF,KAAK8nF,oBACLhM,EACA1jE,EACAmlE,QAEJ72E,EACVyhF,yBAA0BnoF,KAAKyM,MAAM07E,yBACrC9P,aAAcr4E,KAAKyM,MAAMqM,WAG7B,OAAO9Y,KAAK6C,MAAMiR,WAAWtB,GAOzB+4E,0BAAuB,IAAAvkE,EAC3B,MACIjgB,MACI+U,MAAQjM,OAAQiM,KAEpB9b,KAAK6C,MAEHqa,EAA4Bld,KAAKyM,MAAMyQ,SAEvCwqE,EAAqB5rE,MAAAA,GAAoB,QAAhBkL,EAAJlL,EAAMA,KAAKiI,iBAAS,IAAAiD,OAAA,EAApBA,EAAsBrlB,KAAKod,IAClD,MAAM05D,EAAoBv7D,EAASpU,MAAK0U,GAAWA,EAAQC,WAAasB,EAASrB,YACjF,IAAI4kD,EAAAA,iBAAiBC,kBAAkBkW,GAIvC,OAAO,IAAIqN,EAAkB/mE,EAAU05D,MAG3C,OAAOvgE,EAAAA,gBAAgBqvD,YAAYmgB,GAQ/BlE,uBAAuB1/E,GAC3B,MAAM6/E,EAAiB,GAAG7/E,gBAE1B,OACID,EAAAA,cAAC4jF,EAAwB,CACrBtlF,GAAIwhF,EACJ78E,SAAU9G,KAAK6C,MAAMiE,SACrB/C,IAAK4/E,EACL7/E,UAAW6/E,EACX58E,KAAM,CAAE2gF,mBAAoB1nF,KAAKurF,2BACjCtmF,QAASjF,KAAK6C,MAAMoC,QACpBE,UAAWnF,KAAK6C,MAAMsC,UACtBkzE,aAAcr4E,KAAKyM,MAAMqM,WAwP7BowE,kBAAkBsC,EAAgEroE,GAAuB,IAAA+H,EAC7G,MAAM,QAAEjmB,EAAO,KAAE8B,GAAS/G,KAAK6C,OACzB,KAAEiZ,GAAS/U,EAGX0kF,GAAyBz/D,EAAAA,EAAAA,kCAAiC/mB,EAAQiK,IAAI9H,OAAO6kB,4BAE7Ey/D,GACS,QAAXxgE,EAAApP,EAAKjM,cAAM,IAAAqb,GAAgB,QAAhBA,EAAXA,EAAapP,KAAKiI,iBAAS,IAAAmH,GAE1B,QAF0BA,EAA3BA,EAA6BpiB,MACzBlH,IAAI,IAAA+pF,EAAA5O,EAAA,OAAe,QAAX4O,EAAA/pF,EAAKqnD,cAAM,IAAA0iC,OAAA,EAAXA,EAAa5tE,cAAe/d,KAAKyM,MAAMs7E,aAAenmF,EAAK8b,aAAwC,QAA/Bq/D,EAAK/8E,KAAKyM,MAAMqvE,uBAAe,IAAAiB,OAAA,EAA1BA,EAA4Bt/D,oBAChH,IAAAyN,OAAA,EAFDA,EAEGlI,WAAY,EAGnB,IACKwoE,IACAA,EAAqB1qE,yBAAyBO,oBAC9Cpc,EAAQiK,IAAI9H,OAAO2kB,iBAEpB,OAAO/rB,KAAKopF,8BAA8BsC,EAAc3tE,WAAY0tE,EAAuB1tE,YAG/F,MAAM6tE,EAAer2B,KAAKtyB,IAAIwoD,EAAwBD,EAAqB1qE,yBAAyBO,mBAEpG,OAAOrhB,KAAKopF,8BAA8BsC,EAAc3tE,WAAY6tE,EAAa7tE,YAwS7EohE,oBACJtvE,EACA+6C,GAEA,IAAK/6C,EACD,MAAO,GAEX,MAAMqK,EAA4D,GAC5D/U,EAAYnF,KAAK6C,MAAMsC,UAC7B,IAAK,MAAMkyE,KAAaxnE,EACpBqK,EAAWm9D,EAAUvwB,oBAAsB9mD,KAAKy+E,yBAAyBpH,EAAUvwB,mBAAoB3hD,EAAWylD,GAEtH,OAAO1wC,IA/zBXkU,EAAAA,EAAAA,IAAA,CADC2K,EAAAA,IAAU,gCA4GD3K,EAAAA,EAAAA,IAAA,CAAT4K,EAAAA,IAAQ,6BAwtBb,kGC/5BA,MAAM0rD,EAAmB9B,IACrB,QAAkBl8E,IAAdk8E,EAAyB,CACzB,MAAM,eAAE0B,EAAc,UAAEK,GAAc/B,EAEtC,OAAO/+E,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKogF,GAAiBK,EAAUhjF,IAAIyiF,IAEpD,OAAO,MAQLA,EAA2BC,IAC7B,MAAM,eAAEC,EAAc,oBAAEC,EAAmB,QAAEn/C,EAAO,OAAEo/C,EAAM,OAAEC,GAAWJ,EAEzE,OACIxgF,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKogF,GACNzgF,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKqgF,GAAsBn/C,GAC/Bo/C,EACAC,IAqEb,EAjCuD5hF,IACnD,MAAM,gBACFuoF,EAAe,aACf3d,EAAY,KACZh6D,EAAI,eACJoxE,EAAc,OACdh/C,EAAM,UACN+8C,EAAS,6BACT0H,EAA4B,yBAC5BC,EAAwB,eACxBe,EAAc,aACdjT,GACAx1E,EAEJ,OACIgB,EAAAA,cAACwQ,EAAAA,OAAMpQ,OAAAC,OAAA,GAAKknF,GACRvnF,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK2hC,GACNhiC,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKupE,GAhDPmX,EACfnxE,EACA4kE,EACAwM,EACAC,EACA+G,EACAjJ,IAEOvK,EACHx0E,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK2gF,GACNhhF,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK4gF,GACLrxE,EAAK+J,QACLknE,EAAgB9B,GAChBnvE,EAAK2J,SACNvZ,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK2nF,GAAuBp4E,EAAKohE,aACrCphE,EAAKoyE,eAIdhiF,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK2gF,GACNhhF,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK2nF,GAAuBp4E,EAAKohE,aACtChxE,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK4gF,GACLrxE,EAAK+J,QACLknE,EAAgB9B,GAChBnvE,EAAK2J,SACL3J,EAAKoyE,eAwBDjB,CACGnxE,EACA4kE,EACAwM,EACAyF,EACAC,EACA3H,KAKX0I,uGCpFDQ,EAmDAC,EA8BAC,quBAwDL,SAASC,EAAYC,GACxB,OACIA,IAAkBC,EAAAA,kBAAkB17D,UACpCy7D,IAAkBC,EAAAA,kBAAkBC,SACpCF,IAAkBC,EAAAA,kBAAkBE,QASrC,SAASC,EACZC,EACAC,GAGA,OAAOA,EAAmB1jF,MAAM2jF,GAC5BC,EAA8BH,EAAqBE,KAUpD,SAASC,EAA8BH,EAA0CE,GAEpF,OACIA,EAAoBtjF,kBAAoBojF,EAAoBpjF,iBAC5DsjF,EAAoBE,qBAAuBJ,EAAoBI,oBAC/DF,EAAoBG,gBAAkBL,EAAoBK,gBACzDX,EAAYQ,EAAoBG,gBAC7BH,EAAoBI,uBAAyBN,EAAoBM,sBAItE,SAASC,EACZC,EACAC,GAEA,MAAMC,EAAmD,GACzD,IAAIC,GAAmB,EAsBvB,GArBAF,EAA0BpjF,SAASujF,IAC/B,GAAIT,EAA8BK,EAAuBR,oBAAqBY,IAE1E,GADAD,GAAmB,EACfH,EAAuBK,YAAa,CACpC,MAAM34E,EAAIjO,EAAAA,EAAA,GACH2mF,GAAiB,IACpBN,0BAC2CnmF,IAAtCqmF,EAAuBM,YAA4B,GAAGN,EAAuBM,cAC9EF,EAAkBN,qBACtBS,2BACyC5mF,IAApCqmF,EAAuBQ,UAA0B,GAAGR,EAAuBQ,YAC5EJ,EAAkBG,wBAE1BL,EAA0B/pF,KAAKuR,SAInCw4E,EAA0B/pF,KAAKiqF,OAIlCD,EAAkB,CACnB,MAAMz4E,EAAIjO,EAAAA,EAAA,GACHumF,EAAuBR,qBAAmB,IAC7CM,0BAC2CnmF,IAAtCqmF,EAAuBM,YAA4B,GAAGN,EAAuBM,cAC9EN,EAAuBR,oBAAoBM,qBAC/CS,2BACyC5mF,IAApCqmF,EAAuBQ,UAA0B,GAAGR,EAAuBQ,YAC5ER,EAAuBR,oBAAoBe,wBAEnDL,EAA0B/pF,KAAKuR,GAI1Bs4E,EAAuBR,oBAAoBK,gBAAkBT,EAAAA,kBAAkBqB,MAC5ET,EAAuBR,oBAAoBK,gBAAkBT,EAAAA,kBAAkBsB,WACnFV,EAAuBW,8BAA8BC,mBAAqBC,EAAAA,YAAYC,cAEtFd,EAAuBW,8BAA8BxkF,OAAOU,SAASq3C,IACjE,GAAIA,EAAM93C,kBAAoBsL,EAAKtL,iBAAmB83C,EAAM4rC,uBAAyBp4E,EAAKo4E,0BAEnF,CACH,MAAMiB,EAAgBb,EAA0B1N,WAAWwO,GACvDrB,EAA8BzrC,EAAO8sC,KAErCD,GAAiB,GACjBb,EAA0Be,OAAOF,EAAe,OAOpE,OAAOb,GA7OX,SAAYnB,GASRA,EAAAA,EAAA,iBAWAA,EAAAA,EAAA,2BAUAA,EAAAA,EAAA,eAUAA,EAAAA,EAAA,qBAxCJ,CAAYA,IAAAA,EAAgC,KAmD5C,SAAYC,GASRA,EAAAA,EAAA,mBAUAA,EAAAA,EAAA,iBAnBJ,CAAYA,IAAAA,EAAuB,KA8BnC,SAAYC,GASRA,EAAAA,EAAA,eAUAA,EAAAA,EAAA,yBAUAA,EAAAA,EAAA,uBAUAA,EAAAA,EAAA,iBAUAA,EAAAA,EAAA,mBAjDJ,CAAYA,IAAAA,EAAoB,KCzEhC,IAAqBiC,EAArB,cAA2CpqF,EAAAA,cA0BvCtE,YAAYsD,GACRyJ,MAAMzJ,GA1BO,KAAAqrF,iBAA2B,gBA2I3B,KAAAC,SAAYtjF,IACzBA,EAAEsE,iBACFtE,EAAEujF,kBAEF,MAAMtjF,EAASD,EAAE8qB,cACX04D,EAAWvjF,EAAOwjF,aAAa,SAAU5iE,SAAS,6BAClD6iE,EAAkBF,OAAW3nF,EAAY1G,KAAKwuF,0BAA0B1jF,GAE1E9K,KAAK6C,MAAM4rF,iBACXzuF,KAAK6C,MAAM4rF,gBAAgB,CACvBJ,SAAAA,EACAK,YAAa5jF,EACb6jF,cAAeJ,EACfK,gBAAiB9jF,EAAO+jF,eA7HhC7uF,KAAK2C,SAAUI,EAAAA,EAAAA,kBAAiB,QAAS/C,KAAK6C,MAAMG,iBAAmB,IAvBjE,0BAAuB,IAAA0qB,EAC7B,IAAI,gBAAEohE,GAAoB9uF,KAAK6C,MAC/B,MAAM,gCAAEksF,EAA+B,iBAAEC,GAAqBhvF,KAAK6C,MAWnE,OATsB,QAAlB6qB,EAAA1tB,KAAK6C,MAAMoC,eAAO,IAAAyoB,OAAA,EAAlBA,EAAoBxe,IAAI9H,OAAO6nF,+BAAgCC,EAAAA,GAAqCC,UACpGL,EAAkBA,EAAgB9+E,QAAOo/E,IACrC,MAAMC,EAASL,EAAiBlmF,MAC3BwmF,KACKA,EAAUpmF,OAAOJ,MAAMiC,GAA+B2hF,EAA8B3hF,EAAOqkF,OAErG,OAAOC,GAAUA,EAAO5xE,WAAasxE,MAGtCD,EAAgBntF,KAAI,CAAC4sF,EAAsC3/E,KACvD,CACH7K,IAAK/D,KAAKuvF,uBAAuBhB,EAAiB3/E,EAAMmP,YACxDhT,MAAOwjF,MAUZ38E,SACH,MAAM,aAAE49E,EAAY,MAAE7jF,EAAK,WAAEk/C,EAAU,gBAAE4kC,EAAe,eAAEC,GAAmB1vF,KAAK6C,MAC5E4C,EAAQzF,KAAK2vF,oBACnB3vF,KAAK2C,QAAQc,cAAcC,MAAQ8rF,EACnC,MAAMI,GAAqBhsF,EAAAA,EAAAA,wBAAuB5D,KAAK6C,MAAMG,iBAAmBhD,KAAK2C,SACrF,OACIkB,EAAAA,cAAA,OAAKC,UAAU,sBACV2B,EAAM9E,OAAS,GAAKgL,GAAS9H,EAAAA,cAAA,QAAMC,UAAU,6BAA6B6H,GAC3E9H,EAAAA,cAAA,MAAIC,UAAW4O,GAAAA,CAAWm4C,EAAY,2BAA4B,kBAC7DplD,EAAM9D,KAAKC,IACR5B,KAAK2C,QAAQc,cAAcC,MAAQ9B,EAAKmC,IACxC,MAAMJ,GAAYC,EAAAA,EAAAA,wBAAuB5D,KAAK6C,MAAMG,iBAAmBhD,KAAK2C,SAE5E,OACIkB,EAAAA,cAAA,MAAIC,UAAU,gCAAgCC,IAAKnC,EAAKmC,KACpDF,EAAAA,cAAA,IAAAI,OAAAC,OAAA,CACIJ,UAAU,2BACVK,KAAMnE,KAAK6C,MAAMgtF,WAAWjuF,EAAKmJ,OAAO,GAAM,aAClC,GAAGnJ,EAAKmJ,MAAM8hF,wBAAwB4C,IAClD5jF,QAAS7L,KAAKmuF,SACdh7E,KAAK,SACLhR,GAAIP,EAAKmC,KACLJ,GAEH/B,EAAKmJ,MAAM8hF,sBAAqE,KAA7CjrF,EAAKmJ,MAAM+kF,gCAExCluF,EAAKmJ,MAAM+kF,oCACqCppF,IAA7C9E,EAAKmJ,MAAM+kF,+BACgB,IAA/BluF,EAAKmJ,MAAM5B,gBAHXvH,EAAKmJ,MAAM8hF,qBAIXjrF,EAAKmC,IAEXF,EAAAA,cAAA,QACIC,UAAW,GAAG9D,KAAKkuF,6CACnB/6E,KAAK,SAAQ,aACDu8E,UAOnCjqF,EAAM9E,OAAS,GAAK6uF,GACjB3rF,EAAAA,cAAA,IAAAI,OAAAC,OAAA,CACIC,KAAMnE,KAAK6C,MAAMgtF,WAAW,IAAI,GAChC/rF,UAAU,iCACN8rF,EAAkB,CACtB/jF,QAAS7L,KAAKmuF,WAEbqB,IAObD,uBAAuBhD,EAA0C39E,GACrE,MAAM,aAAEmhF,EAAY,uBAAEC,EAAsB,iBAAEhB,EAAgB,UAAEhtF,EAAS,cAAEiuF,GAAkBjwF,KAAK6C,MAC5FqtF,EAAgBH,GAAgB,MAChCI,EAAcH,EACpB,IAcII,EAdAC,EAAc,GAClB,GAAIrB,GAAoBA,EAAiBlmF,KAAM,CAC3C,MAAMumF,EAASL,EAAiBlmF,MAC3BwmF,KACKA,EAAUpmF,OAAOJ,MAAMiC,GAA+B2hF,EAA8B3hF,EAAOwhF,OAGhG8C,EAGDgB,EAAchB,EAAOrmF,SAAW,GAFhChH,EAAUqa,QAAQ,oEAO1B,GAAI4vE,EAAYM,EAAoBK,eAChCwD,EAAmBD,EACd5sF,QAAQ,MAAOvD,KAAKswF,aAAa/D,EAAoBM,qBAAsBN,EAAoBgE,WAC/FhtF,QAAQ,MAAOvD,KAAKswF,aAAa/D,EAAoBe,sBAAuBf,EAAoBgE,gBAClG,GAA4C,IAAxChE,EAAoBpjF,gBAAuB,CAClD,MAAMqnF,EAAcP,MAAAA,OAAa,EAAbA,EAAe/mF,OAAOJ,MACtCG,GAAWA,EAAQ4jF,uBAAyBN,EAAoBM,uBAEpEuD,GAAoBI,EAAcA,EAAYV,8BAAgCvD,EAAoBM,uBAAyB,QAE3HuD,EAAmB7D,EAAoBuD,+BAAiCvD,EAAoBM,sBAAwB,GAGxH,MAAoB,WAAhBwD,GAA4C,UAAhBA,EACrBH,EAAc3sF,QAAQ,MAAO8sF,GAAa9sF,QAAQ,MAAO,GAAG6sF,KAEhEF,EAAc3sF,QAAQ,MAAO8sF,GAAa9sF,QAAQ,MAAO,GAAG6sF,KAAoBC,KAAezhF,KAGlG0hF,aAAa3qD,EAA4B8qD,GAC7C,IAAK9qD,IAAW8qD,EAEZ,OADAzwF,KAAK6C,MAAMb,UAAU2mE,MAAM,2CACpBhjC,GAAU,GAErB,IAAI91B,EAAS81B,EAEb,IACI91B,EAAS7P,KAAK6C,MAAMoC,QAAS6kB,iBAAiBC,eAAe8W,OAAO8E,GAAS8qD,GAC/E,MAAOxuF,GACLjC,KAAK6C,MAAMb,UAAUqa,QAAQ,8BAA8BxM,MAAW5N,KAG1E,OAAO4N,EAqBH2+E,0BAA0BE,GAC9B,MAAM7+E,EAAS7P,KAAK2vF,oBAAoB7mF,MAAK4nF,GAAYhC,EAAYvsF,KAAOuuF,EAAS3sF,MACrF,OAAQ8L,GAAUA,EAAO9E,YAAUrE,KA3J7B0nB,EAAAA,EAAAA,IAAA,CAAT4K,EAAAA,IAAQ,wCALQi1D,GAAa7/D,EAAAA,EAAAA,IAAA,CADjCC,EAAAA,IACoB4/D,GAkKpB,kBCjLM,MAAM0C,EAAwCpiE,IAAa,IAAZ,KAAEnrB,GAAMmrB,EAC1D,OACI1qB,EAAAA,cAAA,QAAMC,UAAU,kDACZD,EAAAA,cAAA,MAAIC,UAAU,cACT,IACAV,EACA,OCSJwtF,EAA8DriE,IAOtE,IAAAsiE,EAAA,IAPuE,QACxErzE,EAAO,QACPvY,EAAO,cACPoC,EAAa,UACblC,EAAS,iBACTnC,EAAgB,eAChB0nE,GACHn8C,EACG,GAAgB,OAAZ/Q,EACA,OAAO,KAGX,MAAMksC,EAAclsC,EAAQ3D,KACtBi3E,EAAkBtzE,GAAWA,EAAQC,SAAWD,EAAQC,SAAW,EACnE6E,GAAa7b,EAAAA,EAAAA,uBAAsB+W,EAAQ3D,MAAQ,GAAIi3E,EAAiB7rF,GAAWA,EAAQC,mBAAewB,GAC1Gg0D,GAAgB1R,EAAAA,EAAAA,qBAClBxrC,EAAQyrC,OACRhkD,EAAQC,cAAcpE,eAAeC,YAClB,QAD6B8vF,EAChD5rF,EAAQiC,QAAQgI,WAAG,IAAA2hF,GAAQ,QAARA,EAAnBA,EAAqBzpF,cAAM,IAAAypF,OAAA,EAA3BA,EAA6B3nC,kBAE3B9jB,EACFslC,GAAqC,iBAAnBA,EAAoCvlE,EAAU4rF,+BAAiC5rF,EAAU6rF,yBAGzGruF,GAAUI,EAAAA,EAAAA,kBAAiB,QAASC,EAAmB0mD,EAAconC,EAAgB/yE,YAErFpa,GAAYC,EAAAA,EAAAA,wBAAuBZ,EAAmBL,GAC5D,OACIkB,EAAAA,cAAA,OAAKC,UAAU,kCACXD,EAAAA,cAAA,IAAAI,OAAAC,OAAA,CACIC,KAAMme,EACNzW,SAASinD,EAAAA,EAAAA,kBAAiB9vD,EAAmBL,EAAS6a,EAAQ3D,OAC1DlW,EAAS,cACD6Z,EAAQ3D,OAEpBhW,EAAAA,cAAA,OAAKC,UAAU,0CAmB/B,SACIuD,EACAF,EACA8pF,EACAtrF,EACA+0D,EACAz1D,GAEA,IAAKgsF,IAAa9pF,IAAiBE,EAC/B,OAAO,KAEX,MAAM6pF,EAAkB,CACpBjpF,IAAKgpF,EACLtrF,QAASA,GAAoB,IAE3BwrF,EAAa,CACfhqF,aAAAA,EACAE,cAAAA,EACA0iD,YAAa2Q,GAEjB,OAAO72D,EAAAA,cAACmE,EAAAA,GAAK/D,OAAAC,OAAA,GAAKgtF,EAASC,EAAU,CAAEjpF,oBAAoB,QAAQpH,eAAgBmE,KAtClEmsF,CACG/pF,EACApC,EAAQiC,QAAQC,aAChBqW,EAAQ+F,gBACR/F,EAAQ3D,KACR6gD,EACAz1D,EAAQC,cAAcpE,kBAIlC+C,EAAAA,cAAA,OAAKC,UAAU,2CACXD,EAAAA,cAAA,KAAGC,UAAU,4CAA4CshC,IA8B7C7/B,EA7BQiY,MAAAA,OAAO,EAAPA,EAAS3D,KA8BlChW,EAAAA,cAAA,MAAIC,UAAU,kDAAkDyB,MAD3E,IAA4BA,GCzFrB,MAAM8rF,EAAwB9iE,IAAA,IAAC,KAAEnrB,EAAI,UAAEU,EAAS,KAAEK,EAAI,UAAEd,GAAWkrB,EAAA,OACtE1qB,EAAAA,cAAA,KAAGC,UAAWA,EAAWK,KAAMA,EAAI,aAAcd,GAC5C,IACAD,EAAM,MCkBFkuF,EAA4CzuF,IACrD,MAAM,KAAEO,EAAI,QAAEyI,EAAO,UAAExI,EAAS,SAAE+I,EAAQ,GAAEjK,GAAOU,EACnD,OACIgB,IAAAA,cAAA,UAAQ1B,GAAIA,EAAI2B,UAAU,aAAY,aAAaT,EAAWwI,QAASA,EAASP,IAAKc,GAChFhJ,IAcPmuF,EAAa1uF,GAEXgB,IAAAA,cAACstD,EAAAA,MAAK,CACFqgC,WAAS,EACTC,gBAAgB,aAChBC,eAAgB7uF,EAAM8uF,UACtB95E,OAAQhV,EAAMgV,OACdw5C,OAAQxuD,EAAM+uF,cACd9tF,UAAU,0BACV+tF,OAAQ,OAKdC,EAAmBjvF,GACdgB,IAAAA,cAAC0tD,EAAAA,YAAW,CAACF,OAAQxuD,EAAM+uF,eAAgB/uF,EAAMsC,UAAU4sF,YAGhEC,EAAmBnvF,GAEjBgB,IAAAA,cAACouF,EAAAA,YAAW,KACRpuF,IAAAA,cAAC6H,EAAAA,OAAM,CAACG,QAAShJ,EAAM+uF,cAAe9tF,UAAU,kCAC3CjB,EAAMsC,UAAU+sF,qCCtC1B,SAASC,EAAkBpD,EAAqDvxE,GACnF,IAAKuxE,IAAoC72E,EAAAA,gBAAgBC,YAAYqF,EAAQ40E,iBACzE,OAEJ,MAAMC,EAAqB70E,EAAQ40E,gBAAgBtpF,MAAKnF,GAAaA,EAAU8Z,WAAasxE,IAC5F,OAAIsD,EACOA,EAAmBC,eAD9B,EAMG,MAAMC,EAAgEhkE,IAcxE,IAdyE,SAC1ErR,EAAQ,QACRjY,EAAO,cACPoC,EAAa,UACblC,EAAS,WACTE,EAAU,SACVC,EAAQ,oBACRsjE,EAAmB,iBACnB5lE,EAAgB,cAChBgmE,EAAa,wBACbG,EAAuB,gCACvB4lB,EAA+B,qBAC/BvlB,EAAoB,gCACpB9B,GACHn5C,EACG,MAAMk7C,EAA2C,CAC7CC,oBAAqBvkE,EAAUukE,qBAEnC,OACI7lE,EAAAA,cAAA,MAAIC,UAAU,iBACToZ,EAASvb,KAAI,CAAC6b,EAA8B5O,IACzC/K,EAAAA,cAAA,MAAIC,UAAU,iCAAiCC,IAAK6K,GAChD/K,EAAAA,cAACgmE,EAAAA,iBAAgB,CACb5kE,QAASA,EACTjC,iBAAkBA,EAClBqE,cAAeA,EACfkpB,cAAeprB,EAAUgrB,UACzBpD,kBAAmB5nB,EAAU4nB,kBAC7BC,iBAAkB7nB,EAAU6nB,iBAC5B88C,gBAAiB3kE,EAAU2kE,gBAC3Bf,UAAWH,EACXzmE,GAAImD,EACJvB,IAAKyZ,EAAQC,SACb3W,SAAUzB,EACV0B,KAAM,CAAEyW,QAAAA,GACRusD,gBAAiBf,EACjBG,wBAAyBA,EACzBqpB,eAAgBL,EAAkBpD,EAAiCvxE,GACnEgsD,qBAAsBA,EACtBC,eAAgBA,EAChBgpB,oBAAqBttF,EAAUstF,oBAC/BzoB,wBAAyBtC,MAAAA,OAA+B,EAA/BA,EAAiC5+D,MACtDmhE,GACI/xD,EAAAA,gBAAgBC,YAAY8xD,IAC5BA,EAAsB,GAAGE,kBAAoB3sD,EAAQglD,oDC5CrF,IAAqBkwB,EAArB,cAA6C7uF,EAAAA,UAWzCtE,YAAmBsD,GAA4B,IAAA8vF,EAAApkE,EAAAqkE,EAAAC,EAAAz5D,EAAA05D,EAAAC,EAC3CzmF,MAAMzJ,GAXO,KAAAmwF,6BAAoD,IAAI37B,IA0IxD,KAAA47B,UAAY,CAACC,EAAkBC,EAAkBC,IACvD,CACH,CACIC,QAAS,GAAGH,UACZI,YAAa,GAAGH,IAChBI,iBAAkB,SAEtB,CACIF,QAAS,GAAGH,QACZI,YAAa,GAAGF,IAChBG,iBAAkB,QAgBb,KAAAC,gBAAkB,CAC/BN,EACAO,EACAC,EACAC,EACAC,EACAC,EACAT,KACqB,IAAAU,EAAAC,EAErB,MAAO,CACH,CACI5xF,GAAI,GAAG+wF,IAAWO,uBAClB1oF,MAAQ2oF,GAAe7yD,OAAO6yD,IAJN,EAKxBrwF,UAAW,GAA0C,QAA1CywF,EAAG9zF,KAAK6C,MAAMmxF,oCAA4B,IAAAF,EAAAA,EAAI,MAAM9zF,KAAKwwB,eACpEyjE,cAAe,GAAGN,KAEtB,CACIxxF,GAAI,GAAG+wF,IAAWO,qBAClB1oF,MAAO81B,OAAO+yD,IAAgB/yD,OAAOuyD,GACrC/vF,UAAW,GAA0C,QAA1C0wF,EAAG/zF,KAAK6C,MAAMqxF,oCAA4B,IAAAH,EAAAA,EAAI,MAAM/zF,KAAKwwB,eACpEyjE,cAAe,GAAGJ,OA7K1B7zF,KAAKm0F,eAAiBn0F,KAAKm0F,eAAe/vD,KAAKpkC,MAC/CA,KAAKo0F,kBAAoBp0F,KAAKo0F,kBAAkBhwD,KAAKpkC,MACrDA,KAAKq0F,wBAA0Br0F,KAAKq0F,wBAAwBjwD,KAAKpkC,MACjEA,KAAKs0F,WAAat0F,KAAKs0F,WAAWlwD,KAAKpkC,MACvCA,KAAKu0F,WAAav0F,KAAKu0F,WAAWnwD,KAAKpkC,MACvCA,KAAKw0F,iBAAmBx0F,KAAKw0F,iBAAiBpwD,KAAKpkC,MACnDA,KAAKy0F,iBAAmBz0F,KAAKy0F,iBAAiBrwD,KAAKpkC,MAEnDA,KAAK00F,SAAW7wF,EAAAA,YAChB7D,KAAK20F,SAAW9wF,EAAAA,YAEhB,MAAM,4BAAE+wF,GAAgC50F,KAAK6C,MACvCgyF,EAA8D,QAApDlC,EAAGiC,MAAAA,OAA2B,EAA3BA,EAA6B/H,4BAAoB,IAAA8F,EAAAA,EAAI,IAClEmC,EAAaF,MAAAA,OAA2B,EAA3BA,EAA6BtH,sBAC1C4F,EAAW,UAAU/vB,OAAOnjE,KAAK6C,MAAM6qF,8BAA8BjwE,aAAa0lD,OACpFnjE,KAAK6C,MAAM0pF,oBAAoBpjF,mBAE7B4rF,EAAW/0F,KAAK6C,MAAM0pF,oBAAoBM,qBAC1CmI,EAAWh1F,KAAK6C,MAAM0pF,oBAAoBe,sBAC1C6F,EAAWnzF,KAAKswF,aAAayE,GAC7B3B,EAAWpzF,KAAKswF,aAAa0E,GAC7BC,EAAyBj1F,KAAKizF,UAAUC,EAAUC,EAAUC,GAC5DM,EACiH,QADtGnlE,EAC+C,QAD/CqkE,EACyB,QADzBC,EACb7yF,KAAK6C,MAAM+xF,mCAA2B,IAAA/B,OAAA,EAAtCA,EAAwChG,4BAAoB,IAAA+F,EAAAA,EAAI5yF,KAAK6C,MAAM0pF,oBAAoBM,4BAAoB,IAAAt+D,EAAAA,EAAI,IACrHqlE,EAEkD,QAFvCx6D,EACgD,QADhD05D,EACyB,QADzBC,EACb/yF,KAAK6C,MAAM+xF,mCAA2B,IAAA7B,OAAA,EAAtCA,EAAwCzF,6BAAqB,IAAAwF,EAAAA,EAC7D9yF,KAAK6C,MAAM0pF,oBAAoBe,6BAAqB,IAAAl0D,EAAAA,EACpD47D,EACErB,EAAmB3zF,KAAKswF,aAAaoD,GACrCG,EAAmB7zF,KAAKswF,aAAasD,GACrCsB,EAAkBl1F,KAAK6C,MAAM4wF,UAAY,IAAItwB,OAAOnjE,KAAK6C,MAAM4wF,aAAe,GAC9E0B,EAAoCn1F,KAAKwzF,gBAC3CN,EACAgC,EACAxB,EACAC,EACAC,EACAC,EACAT,GAEJpzF,KAAKyM,MAAQ,CACTgiB,WAAW,EACX2mE,wBAAoB1uF,EACpB2uF,wBAAoB3uF,EACpBgtF,YAAamB,EACbjB,YAAakB,EACbQ,YAAY,EACZC,YAAY,EACZrC,SAAAA,EACA6B,SAAAA,EACAC,SAAAA,EACAC,OAAAA,EACAE,aAAAA,GA1DE,mBACN,OAAOn1F,KAAK6C,MAAM0pF,oBAAoBgE,UAAY,GA6D/C3pE,sBAAsBC,EAAkCC,GAC3D,OAAI9mB,KAAKyM,QAAUqa,GAAa9mB,KAAK6C,QAAUgkB,EAM5CpV,mBAAmB+jF,GAClBA,IAAkBx1F,KAAK6C,OACvB7C,KAAKy1F,oBAIN7jF,SACH,MAAM,oBAAE26E,EAAmB,8BAAEmB,EAA6B,sBAAEgI,GAA0B11F,KAAK6C,MAE3F,GAAK0pF,GAAwBmB,EAO7B,MAA6B,UAAzB1tF,KAAK6C,MAAM8yF,UACJ31F,KAAK41F,qBAGT51F,KAAK61F,gBAVRH,EAAsB1zF,UAAUC,MAC5B,kGAeJwzF,oBAAiB,IAAAhzD,EAAAqzD,EAAAC,EAAArzD,EAAAszD,EAAAC,EACrB,MAAM/C,EAAW,UAAU/vB,OAAOnjE,KAAK6C,MAAM6qF,8BAA8BjwE,aAAa0lD,OACpFnjE,KAAK6C,MAAM0pF,oBAAoBpjF,mBAE7B4rF,EAAW/0F,KAAK6C,MAAM0pF,oBAAoBM,qBAC1CmI,EAAWh1F,KAAK6C,MAAM0pF,oBAAoBe,sBAC1C6F,EAAWnzF,KAAKswF,aAAayE,GAC7B3B,EAAWpzF,KAAKswF,aAAa0E,GAC7BC,EAAyBj1F,KAAKizF,UAAUC,EAAUC,EAAUC,GAC5DM,EACiH,QADtGjxD,EAC+C,QAD/CqzD,EACyB,QADzBC,EACb/1F,KAAK6C,MAAM+xF,mCAA2B,IAAAmB,OAAA,EAAtCA,EAAwClJ,4BAAoB,IAAAiJ,EAAAA,EAAI91F,KAAK6C,MAAM0pF,oBAAoBM,4BAAoB,IAAApqD,EAAAA,EAAI,IACrHmxD,EAEkD,QAFvClxD,EACgD,QADhDszD,EACyB,QADzBC,EACbj2F,KAAK6C,MAAM+xF,mCAA2B,IAAAqB,OAAA,EAAtCA,EAAwC3I,6BAAqB,IAAA0I,EAAAA,EAC7Dh2F,KAAK6C,MAAM0pF,oBAAoBe,6BAAqB,IAAA5qD,EAAAA,EACpDsyD,EACErB,EAAmB3zF,KAAKswF,aAAaoD,GACrCG,EAAmB7zF,KAAKswF,aAAasD,GACrCsB,EAAkBl1F,KAAK6C,MAAM4wF,UAAY,IAAItwB,OAAOnjE,KAAK6C,MAAM4wF,aAAe,GAC9E0B,EAAoCn1F,KAAKwzF,gBAC3CN,EACAgC,EACAxB,EACAC,EACAC,EACAC,EACAT,GAEJpzF,KAAKgN,SAAS,CAAEkmF,SAAAA,EAAU6B,SAAAA,EAAUC,SAAAA,EAAUC,OAAAA,EAAQE,aAAAA,IA8DlDS,qBACJ,MAAM,WAAEptD,EAAU,8BAAEklD,EAA6B,sBAAEgI,GAA0B11F,KAAK6C,OAC5E,YAAE6wF,EAAW,YAAEE,EAAW,WAAE0B,EAAU,WAAEC,EAAU,mBAAEH,EAAkB,mBAAEC,GAAuBr1F,KAAKyM,MAGpGypF,EAAY,CACd,cAFoBR,EAAsBS,iBAAmB,OAAO5yF,QAAQ,MAAOmqF,EAA8B1kF,SAAW,IAG5H,gBAAiBw/B,GAOf4tD,EAAoB,mEACtBhB,EAAqB,qCAAuC,IAE1DiB,EAAoB,mEACtBhB,EAAqB,qCAAuC,IAI1DiB,EAAuBt2F,KAAKu2F,2BAA2B7C,EAAa4B,EAAYF,GAChFoB,EAAuBx2F,KAAKu2F,2BAA2B3C,EAAa2B,EAAYF,GACtF,OACIxxF,EAAAA,cAAA,OAAAI,OAAAC,OAAA,CAAMJ,UAAU,0CAA6CoyF,GACzDryF,EAAAA,cAAA,SAAOC,UANW,8EAOb4xF,EAAsBe,SACvB5yF,EAAAA,cAAA,SACIC,UAAWsyF,EACX7qF,SAAUvL,KAAKs0F,WACfoC,QAAS12F,KAAKs0F,WACd/wD,OAAQvjC,KAAKw0F,iBACbzpF,MAAOurF,EACPhrF,IAAKtL,KAAK00F,YAGlB7wF,EAAAA,cAAA,SAAOC,UAhBW,8EAiBb4xF,EAAsBiB,SACvB9yF,EAAAA,cAAA,SACIC,UAAWuyF,EACXhrF,YAAamrF,OAAuB9vF,EAAYgvF,EAAsBkB,mBACtErrF,SAAUvL,KAAKu0F,WACfmC,QAAS12F,KAAKu0F,WACdhxD,OAAQvjC,KAAKy0F,iBACb1pF,MAAOyrF,EACPlrF,IAAKtL,KAAK20F,YAGjBS,GACGvxF,EAAAA,cAAA,QAAMC,UAAU,wFACXsxF,GAGRC,GAAsBD,IAAuBC,GAC1CxxF,EAAAA,cAAA,QAAMC,UAAU,wFACXuxF,IAObQ,gBACJ,MAAM,WAAErtD,EAAU,UAAEirD,GAAczzF,KAAK6C,MACjCg0F,EAAiB,CACnB,gBAAiBruD,GAGrB,OACI3kC,EAAAA,cAACizF,EAAAA,OAAM7yF,OAAAC,OAAA,CACHJ,UAAU,mCACVC,IAAK/D,KAAKyM,MAAMymF,SAChBO,UAAWA,EACXtxF,GAAInC,KAAKyM,MAAMymF,SACf6D,QAAQ,EACR9zD,IAAMjjC,KAAKyM,MAAMsoF,UAAYl0D,OAAO7gC,KAAKyM,MAAMsoF,gBAAcruF,EAC7Dw8B,IAAMljC,KAAKyM,MAAMuoF,UAAYn0D,OAAO7gC,KAAKyM,MAAMuoF,gBAActuF,EAC7Dy8B,KAAM,EACN6zD,YAAY,aACZ/B,OAAQj1F,KAAKyM,MAAMwoF,OACnBgC,YAAU,EACVC,aAAW,EACX/B,aAAcn1F,KAAKyM,MAAM0oF,aACzBgC,YAAan3F,KAAKo0F,kBAClB7oF,SAAU6rF,GAAAA,CAASp3F,KAAKm0F,eAAgB,KACxCkD,kBAAmBr3F,KAAKq0F,yBACpBwC,IAKRvC,WAAW5+D,GACf11B,KAAKs3F,aAAa5hE,EAAO,OAGrB6+D,WAAW7+D,GACf11B,KAAKs3F,aAAa5hE,EAAO,OAGrB4hE,aAAa5hE,EAA2C6hE,GAC5D,MAAMC,EAAc,WAAWD,IACzBE,EAAa,UAAUF,IAC7Bv3F,KAAKgN,SAAS,CACV,CAACwqF,GAAcx3F,KAAK03F,2BAA2BhiE,EAAMC,cAAc5qB,OACnE,CAAC0sF,IAAa,IAIdjD,iBAAiB9+D,GACrB,MAAMiiE,EAAmB33F,KAAK03F,2BAA2BhiE,EAAMC,cAAc5qB,OAC7E/K,KAAKgN,SAAS,CACV0mF,YAAaiE,EACbC,YAAY,IAEhB,MAAMlD,EAAW7zD,OAAO82D,IAClB,SACFtlB,EAAQ,8BACRqb,EAA6B,oBAC7BnB,EAAmB,sBACnBmJ,EAAqB,4BACrBd,GACA50F,KAAK6C,MACHqgC,EAAO0xD,GAA+BA,EAA4BtH,4BAA0B5mF,EAE5FmxF,EAAS30D,EAAMrC,OAAOqC,QAAOx8B,EAEnC,OAAIygC,MAAMutD,IACN10F,KAAKgN,SAAS,CAAEooF,mBAAoBM,EAAsBoC,qBAC1D93F,KAAK+3F,OAAO,QACL,GAGP/3F,KAAKg4F,eAAetD,EAAUmD,IAC9BxlB,EAAS,CACLqb,8BAAAA,EACAnB,oBAAAA,EACAa,aAAa,EACbC,WAAYqH,EACZnH,SAAUsK,KAEP,IAEX73F,KAAK+3F,OAAO,QAEL,GAGHtD,iBAAiB/+D,GACrB,MAAMuiE,EAAmBj4F,KAAK03F,2BAA2BhiE,EAAMC,cAAc5qB,OAC7E/K,KAAKgN,SAAS,CACV4mF,YAAaqE,EACbC,YAAY,IAEhB,MAAMvD,EAAW9zD,OAAOo3D,IAClB,SACF5lB,EAAQ,8BACRqb,EAA6B,oBAC7BnB,EAAmB,sBACnBmJ,EAAqB,4BACrBd,GACA50F,KAAK6C,MACHogC,EAAO2xD,GAA+BA,EAA4B/H,sBAAyB,IAE3FsL,EAASt3D,OAAOoC,GAEtB,OAAIkE,MAAMwtD,IACN30F,KAAKgN,SAAS,CAAEqoF,mBAAoBK,EAAsBoC,qBAC1D93F,KAAK+3F,OAAO,QACL,KAGP/3F,KAAKg4F,eAAeG,EAAQxD,KACxBpI,EACAla,EAAS,CACLqb,8BAAAA,EACAnB,oBAAAA,EACAa,aAAa,EACbC,WAAY8K,EACZ5K,SAAUoH,IAGd30F,KAAK+3F,OAAO,QAET,GAMPA,OAAOR,GACX,MAAMjsF,EAAoB,QAAdisF,EAAsBv3F,KAAK20F,SAAW30F,KAAK00F,SAEvDlmF,YAAW,KACHlD,GAAOA,EAAI4B,SACX5B,EAAI4B,QAAQkC,UAEjB,IAGCmnF,2BACJ7F,EACA0H,EACAC,GAEA,OAAID,GAAWC,QAAgC3xF,IAAbgqF,EACvBA,EAEJ1wF,KAAKswF,aAAaI,GAGrBsH,eAAe/0D,EAAaC,GAChC,MAAM,sBAAEwyD,GAA0B11F,KAAK6C,MACvC,YAAY6D,IAARw8B,MAIAD,EAAMC,KACNljC,KAAKgN,SAAS,CACVooF,mBAAoBM,EAAsB4C,qBAC1CjD,mBAAoBK,EAAsB4C,wBAEvC,IAMPhI,aAAa3qD,GACjB,GAAuD,IAAnD3lC,KAAK6C,MAAM0pF,oBAAoBpjF,gBAAuB,CAEtD,OADenJ,KAAK6C,MAAMoC,QAAQ6kB,iBAAiBC,eAAe8W,OAAO8E,GAAS3lC,KAAKwwB,cAG3F,OAAOmV,GAAU,GAGb+xD,2BAA2Br3F,GAE/B,MAAMk4F,EAAa13D,OAAOxgC,GAC1B,IAAK8mC,MAAMoxD,GACP,OAAOl4F,EAKX,OAD4BL,KAAKgzF,6BAA6Bx3E,IAAInb,IACpCA,EAK1B8zF,eAAeqE,GAEnB,GAA2C,cAAvCA,EAAyBC,UAA2B,CACpD,MAAM,SAAEpmB,EAAQ,8BAAEqb,EAA6B,oBAAEnB,GAAwBvsF,KAAK6C,MAC1E0pF,GAAuBiM,IACvBnmB,EAAS,CACLqb,8BAAAA,EACAnB,oBAAAA,EACAa,aAAa,EACbC,WAAYmL,EAAyBE,gBACrCnL,SAAUiL,EAAyBG,mBAGvC34F,KAAK44F,oBAAoBJ,KAM7BpE,kBAAkBoE,GACtB,MAAM,SAAEnmB,EAAQ,8BAAEqb,EAA6B,oBAAEnB,GAAwBvsF,KAAK6C,MAC1E0pF,GAAuBiM,IACvBnmB,EAAS,CACLqb,8BAAAA,EACAnB,oBAAAA,EACAa,aAAa,EACbC,WAAYmL,EAAyBE,gBACrCnL,SAAUiL,EAAyBG,mBAGvC34F,KAAK44F,oBAAoBJ,IAKzBI,oBAAoBJ,GACxB,GAAIA,EAAyBr2F,GAAI,CAC7B,MAAMomC,EAAU/4B,SAAS4G,eAAe,GAAGoiF,EAAyBr2F,WAChEomC,GACA/5B,YAAW,KACP+5B,EAAQn5B,UACT,IAKPilF,wBAAwBwE,GAC5B,OAAO74F,KAAKswF,aAAa,GAAGuI,QAjetBzqE,EAAAA,EAAAA,IAAA,CAAT4K,EAAAA,IAAQ,iCAPQ05D,GAAetkE,EAAAA,EAAAA,IAAA,CADnCC,EAAAA,IACoBqkE,GA0epB,8TClec,MAAMoG,UAAmBj1F,EAAAA,UAKpCtE,YAAmBsD,GACfyJ,MAAMzJ,GAmKO,KAAAsrF,SAAYtjF,IACzBA,EAAEsE,iBAEF,MAAM,8BAAEu+E,EAA6B,oBAAEnB,EAAmB,4BAAEqI,GAAgC50F,KAAK6C,MAC7F0pF,IACAvsF,KAAK6C,MAAMwvE,SAAS,CAChBqb,8BAAAA,EACAnB,oBAAAA,EACAa,aAAcwH,IAGlBpmF,YAAW,KACPxO,KAAK+4F,WAAW7rF,SAAWlN,KAAK+4F,WAAW7rF,QAAQkC,UACpD,KA/KPpP,KAAKmuF,SAAWnuF,KAAKmuF,SAAS/pD,KAAKpkC,MACnCA,KAAKyM,MAAQ,CACTgiB,YAAazuB,KAAK6C,MAAM+xF,6BAE5B50F,KAAK+4F,WAAal1F,EAAAA,YAClB7D,KAAK2C,SAAUI,EAAAA,EAAAA,kBAAiB,QAAS/C,KAAK6C,MAAMG,iBAAmB,IAGpE4jB,sBAAsBC,EAA6BC,GACtD,OAAI9mB,KAAKyM,QAAUqa,GAAa9mB,KAAK6C,QAAUgkB,EAM5CjV,SAAM,IAAAonF,EAAAC,EAAAC,EACT,MAAAC,EAgBIn5F,KAAK6C,OAhBH,WACF2lC,EAAU,sBACVktD,EAAqB,8BACrBhI,EAA6B,oBAC7BnB,EAAmB,4BACnBqI,EAA2B,sBAC3BwE,EAAqB,4BACrBC,EAA2B,MAC3BzqF,EAAK,SACLkzC,EAAQ,SACRuwB,EAAQ,QACRptE,EAAO,iBACPjC,EAAgB,oBAChBs2F,EAAmB,qBACnBC,GAEHJ,EADMK,GAAK72D,EAAAA,EAAAA,GAAAw2D,EAAAv2D,GAEZ,IAAK2pD,EAED,YADAmJ,EAAsB1zF,UAAUC,MAAM,sEAGrCsqF,EAAoBM,sBACrB6I,EAAsB1zF,UAAUqa,QAC5B,2DAA2D9S,KAAKC,UAAU+iF,MAGlF,MAAMkN,EAAiB/L,EAA8BC,mBAAqBC,EAAAA,YAAYC,aACtF,IAAI6L,EAAoBD,EAAiB,gBAAkB,eAC3DC,EAAoB,0BAA0BA,IAC9C,MAAMnC,EAAYkC,EAAiB,QAAU,WACvChrE,IAAcmmE,EAEpB,GADA8E,EAAoBjrE,EAAY,GAAGirE,YAA8BA,EAC7DhM,EAA8BiM,cAAgB3N,EAAAA,qBAAqB4N,OACnE,OAAO55F,KAAK65F,cACRtN,EACAmB,EACAj/D,EACAxpB,EACA2J,EACA5L,EACAo2F,EACAC,GAGRr5F,KAAK2C,QAAQc,cAAcC,MAAyD,QAApDs1F,EAAGzM,EAAoBuD,qCAA6B,IAAAkJ,EAAAA,EAAIzM,EAAoBM,qBAC5G,MAAMlpF,GAAYC,EAAAA,EAAAA,wBAAuBZ,EAAmBhD,KAAK2C,SAE3DolF,EAAcwE,EAAoBuD,+BAAiCvD,EAAoBM,sBAAwB,GAE/GiN,EAAevN,EAAoBwN,OAAS,EAClD,IAAIC,EAEAA,EADiB,IAAjBF,EAC0BR,GACpBhxF,EAAAA,EAAAA,QAAOgxF,EAAqB5L,EAA8B1kF,QAAS++E,GACnE,GAEoBwR,GACpBjxF,EAAAA,EAAAA,QAAOixF,EAAsB7L,EAA8B1kF,QAAS++E,EAAa+R,GACjF,GAGV,MAAM9e,EAAsF,QAAzEie,EAAoD,QAApDC,EAAIl5F,KAAK6C,MAAM6qF,8BAA8B1kF,eAAO,IAAAkwF,OAAA,EAAhDA,EAAkDe,2BAAmB,IAAAhB,EAAAA,EAAI,GAC1FiB,EAAwBl6F,KAAKm6F,0BAA0Bnf,GAE7D,IAAIl3E,EAAY,yBACZo2F,IACAp2F,EAAY4O,GAAAA,CAAW5O,EAAW,sCAAsCk3E,MAK5E,MAAMof,GAAYhnE,EAAAA,iBAAiB6oB,mBAAmBswC,EAAoB8N,oBACpEC,GAAYlnE,EAAAA,iBAAiB6oB,mBAAmBswC,EAAoBgO,gBACpEC,EAAmBJ,GAAYE,EAErC,OACIz2F,EAAAA,cAAA,MAAIC,UAAWA,EAAW3B,GAAI,GAAGurF,EAA8B1kF,WAAY4F,KACvE/K,EAAAA,cAAA,IAAAI,OAAAC,OAAA,CACIH,IAAK6wF,EAA8B,OAAS,QAC5CtpF,IAAKtL,KAAK+4F,WACV50F,KAAMnE,KAAKy6F,iBACX1/B,SAAUq/B,GAAY,EAAI,EAC1BvuF,QAAS7L,KAAKmuF,SACdrqF,UAAW41F,EACXvmF,KAAMokF,EAAS,aACHyC,EAAuB,iBACnBpF,GACZjxF,EACA61F,GAEHgB,GAAoBN,GAAyBl6F,KAAK06F,cAAc1f,GACjEn3E,EAAAA,cAAA,QAAMC,UAAU,gCAA+B,cAAa,QAEvDyoF,EAAoBuD,+BAAiCvD,EAAoBM,0BAC3CnmF,IAA9B6lF,EAAoBwN,OAAuB,KAAKxN,EAAoBwN,YAOjFI,0BAA0Bnf,GAE9B,OAD8B2f,EAAAA,EAAAA,8BAA6B3f,EAAeh7E,KAAK6C,MAAMoC,SAIjFy1F,cAAc1f,GAA6B,IAAA4f,EAC/C,MAAMrO,EAAsBvsF,KAAK6C,MAAM0pF,oBAGjCnpF,EAAOmpF,EAAoBuD,+BAAiCvD,EAAoBM,sBAAwB,GACxGgO,EAAc,CAChB,CACIp4B,OAAQ,GAAsC,QAAtCm4B,EAAGrO,EAAoBpjF,uBAAe,IAAAyxF,EAAAA,EAAI,MAAM5f,KAAiB53E,IACzE2H,MAAO3H,EACP43E,cAAAA,EACA8f,aAAcvO,EAAoB8N,mBAClCpJ,SAAU1E,EAAoBgO,iBAItC,OACI12F,EAAAA,cAACk3F,EAAAA,gBAAe,CACZj3F,UAAU,iCACV/C,YAAaf,KAAK6C,MAAMoC,QAAQiC,QAAQnG,YACxCy3B,KAAMqiE,EACNG,oBAAoB,EACpBC,cAAY,IAKhBR,iBACJ,MAAM,WAAE5K,EAAU,8BAAEnC,EAA6B,oBAAEnB,EAAmB,4BAAEqI,GAAgC50F,KAAK6C,MAE7G,OAAI0pF,EACOsD,EAAW,CACdnC,8BAAAA,EACAnB,oBAAAA,EACAa,aAAcwH,IAIf,GAoBHiF,cACJtN,EACAmB,EACAj/D,EACAxpB,EACA2J,EACA5L,EACAk4F,EACAC,GAEA,GAAI5O,EAAoBM,qBAAsB,CAAC,IAAD+F,EAAAwI,EAC1Cp7F,KAAK2C,QAAQc,cAAcC,MAAQ6oF,EAAoBuD,8BACvD,MAAMnsF,GAAYC,EAAAA,EAAAA,wBAAuBZ,EAAmBhD,KAAK2C,SAC3D04F,EAAgBx6D,OAAOz3B,SAASmjF,EAAoBM,qBAAsB,IAC1EyO,EAAgD,QAAnC1I,EAAG5yF,KAAK6C,MAAM04F,6BAAqB,IAAA3I,OAAA,EAAhCA,EAAkC9pF,MACpDiC,GAASA,EAAM6hF,gBAAkBL,EAAoBK,gBAGnD4O,EAAiB36D,OAAOz3B,UAASkyF,MAAAA,OAAa,EAAbA,EAAezO,uBAAwB,IAAK,IAC7E4O,EAAyB,EAC/B,IAAIC,EAA+B,sBAE/BA,EADAL,EAAgBG,EACO,GAAGE,QACnBL,EAAgBG,EACA,GAAGE,UAEH,GAAGA,aAE9B,MAAMC,OAC4Bj1F,IAA9B6lF,EAAoBwN,OAAuBxN,EAAoBwN,QAAU0B,EACnEN,IAAkC7yF,EAAAA,EAAAA,QAAO6yF,EAAgC5O,EAAoBwN,OAC7FmB,IAA4B5yF,EAAAA,EAAAA,QAAO4yF,EAA0B3O,EAAoBwN,OAC3F,OACIl2F,EAAAA,cAAA,MACIC,UAAU,wDACVqP,KAAOnT,KAAK6C,MAAMw1E,kBAAgC3xE,EAAjB,eACjCvE,GAAI,GAAGurF,EAA8B1kF,WAAY4F,KAEjD/K,EAAAA,cAAA,IAAAI,OAAAC,OAAA,CACIC,KAAMnE,KAAKy6F,iBACXtnF,KAAK,SAAQ,gBACEsb,EAAS,aACZ,GAAGi/D,EAA8B1kF,WAAYujF,EAAoBuD,0DAC3E6L,IACF9vF,QAAS7L,KAAKmuF,UACVxqF,GAEJE,EAAAA,cAAC+3F,EAAAA,gBAAe,CACZ93F,UAAW43F,EACXG,UAAWR,EACXS,YAA8D,QAAnDV,EAAE7O,EAAoBuD,qCAA6B,IAAAsL,EAAAA,EAAI7O,EAAoBM,qBACtFkP,WAAW,EACXC,UAAQ,EACR34F,UAAU,GACV4B,QAASA,EACT9C,GAAInC,KAAK6C,MAAMyC,SACfwB,SAAU9G,KAAK6C,MAAM40E,eACrB1wE,KAAM,KAEVlD,EAAAA,cAAA,QAAMC,UAAU,8BAA6B,cAAc9D,KAAK6C,MAAMw1E,aAAe,YAAS3xE,QAC3DA,IAA9B6lF,EAAoBwN,OAAuB,IAAIxN,EAAoBwN,8BClPhG,MAAMkC,UAAsBp4F,EAAAA,UACxBtE,YAAYsD,GACRyJ,MAAMzJ,GAEN7C,KAAKk8F,cAAgBl8F,KAAKk8F,cAAc93D,KAAKpkC,MAC7CA,KAAKm8F,iBAAmBn8F,KAAKm8F,iBAAiB/3D,KAAKpkC,MAEnD,MAAM+X,EAAa/X,KAAK6C,MAAMu5F,wBAM9Bp8F,KAAKyM,MAAQ,CACTk2C,SAAU5qC,GAIX6O,sBAAsBC,EAAgCC,GACzD,OAAI9mB,KAAKyM,QAAUqa,GAAa9mB,KAAK6C,QAAUgkB,EAM5CjV,SACH,MAAM,wBAAEyqF,EAAuB,sBAAE3G,GAA0B11F,KAAK6C,MAMhE,GAJKw5F,GACD3G,EAAsB1zF,UAAUC,MAAM,wDAGtCo6F,EAAwB1C,cAAgB3N,EAAAA,qBAAqB4N,QAAU55F,KAAK6C,MAAMoC,QAAQiK,IAAI9H,OAAOk1F,WACrG,OAAO,KAGX,MAAMx4F,EAAY4O,GAAAA,CACd,oBACA,aACA2pF,EAAwBrzF,SAG5B,OACInF,EAAAA,cAAA,OAAKC,UAAWA,GACZD,EAAAA,cAAC6H,EAAAA,OAAM,CACH5H,UAAW9D,KAAKyM,MAAMk2C,SAAW,qCAAuC,sCAAqC,aACjG05C,EAAwBrzF,QACpC6C,QAAS7L,KAAKm8F,iBAAgB,gBACfn8F,KAAKyM,MAAMk2C,UAEzB05C,EAAwBrzF,SAE7BnF,EAAAA,cAAC8U,EAAAA,SAAQ,CAACd,OAAQ7X,KAAKyM,MAAMk2C,SAAU45C,QAAS,KAC3Cv8F,KAAKw8F,kBAAkBH,KAMhCG,kBAAkBH,GACtB,OAAIpQ,EAAYoQ,EAAwBzP,eAC7B5sF,KAAKy8F,aAAaJ,GAEtBr8F,KAAK08F,yBAAyBL,GAGjCK,yBAAyBL,GAC7B,MAAM,WACF7zD,EAAU,sBACVktD,EAAqB,sBACrB6F,EAAqB,QACrBt2F,EAAO,sBACPm0F,EAAqB,4BACrBC,EAA2B,oBAC3BC,EAAmB,qBACnBC,EAAoB,SACpBzgF,GACA9Y,KAAK6C,MAIHsQ,EAFFkpF,EAAwB1O,mBAAqBC,EAAAA,YAAYC,cACzDwO,EAAwB1C,cAAgB3N,EAAAA,qBAAqB4N,OACnC,CAAEzmF,KAAM,gBAAczM,EAC9Ci2F,EAAoBN,EAAwBnzF,QAAU,GACtD0zF,EAAYD,EAAkBh7F,KAAI,CAACs/C,EAA4BryC,KACjE,IAAKqyC,EAID,OAHAy0C,EAAsB1zF,UAAUC,MAC5B,6DAA6Do6F,EAAwB5+E,aAAa4+E,EAAwBrzF,YAEvH,KAGX,MAAM4rF,EAA8BtI,EAAgCrrC,EAAOs6C,GAE3E,OACI13F,EAAAA,cAACi1F,EAAU,CACPpL,8BAA+B2O,EAC/B9P,oBAAqBtrC,EACrB2zC,4BAA6BA,EAC7B2G,sBAAuBA,EAAsBvrF,QAAO6sF,GAChDF,EAAkB7zF,MAAKiC,GAASA,EAAM5B,kBAAoB0zF,EAAc1zF,oBAE5EusF,sBAAuBA,EACvBrjB,SAAUryE,KAAKk8F,cACfrM,WAAY7vF,KAAK6C,MAAMgtF,WACvBrnD,WAAYA,EACZzkC,IAAK6K,EACLA,MAAOA,EACP3J,QAASA,EACTK,SAAUtF,KAAK6C,MAAMyC,SACrBmyE,eAAgBz3E,KAAK6C,MAAM40E,eAC3Bz0E,iBAAkBhD,KAAK6C,MAAMG,iBAC7Bo2F,sBAAuBA,EACvBE,oBAAqBA,EACrBC,qBAAsBA,EACtBF,4BAA6BA,EAC7BhhB,aAAcv/D,OAI1B,OACIjV,EAAAA,cAAA,KAAAI,OAAAC,OAAA,CACIJ,UAAW,2BAA2Bu4F,EAAwBrzF,WAC1DmK,EAAI,cACIkpF,EAAwBrzF,UAEnC4zF,GAKLE,cAAcT,GAClB,OACIA,EAAwBU,uBAAyBC,EAAAA,gBAAgBC,OACjEZ,EAAwBU,uBAAyBC,EAAAA,gBAAgBlG,QACjEuF,EAAwBU,uBAAyBC,EAAAA,gBAAgBE,eAE1D,SAEJ,QAGHT,aAAaJ,GACjB,MAAM,WACF7zD,EAAU,sBACVktD,EAAqB,sBACrB6F,EAAqB,QACrBt2F,EAAO,6BACP+uF,EAA4B,6BAC5BE,GACAl0F,KAAK6C,MAGH+5F,GADoBP,EAAwBnzF,QAAU,IACxBvH,KAAI,CAACs/C,EAA4BryC,KACjE,IAAKqyC,EAID,OAHAy0C,EAAsB1zF,UAAUC,MAC5B,4CAA4Co6F,EAAwB5+E,aAAa4+E,EAAwBrzF,YAEtG,KAGX,MAAM4rF,EAA8BtI,EAAgCrrC,EAAOs6C,GAErE5F,EAAY31F,KAAK88F,cAAcT,GAC/Bt4F,EAAM6wF,EACN,GAAGA,EAA4B/H,wBAAwB+H,EAA4BtH,wBACnF,gBAAgB1+E,IACtB,OACI/K,EAAAA,cAAA,MAAIC,UAAW,sEAAoCC,IAAK6K,GACpD/K,EAAAA,cAAC6uF,EAAe,CACZhF,8BAA+B2O,EAC/B9P,oBAAqBtrC,EACrB2zC,4BAA6BA,EAC7Bc,sBAAuBA,EACvBrjB,SAAUryE,KAAKk8F,cACfrM,WAAY7vF,KAAK6C,MAAMgtF,WACvBrnD,WAAYA,EACZmtD,UAAWA,EACX5xF,IAAKA,EACL0vF,UAAW1vF,EACXkB,QAASA,EACT+uF,6BAA8BA,EAC9BE,6BAA8BA,EAC9B5uF,SAAUtF,KAAK6C,MAAMyC,SACrBmyE,eAAgBz3E,KAAK6C,MAAM40E,qBAK3C,OAAO5zE,EAAAA,cAAA,MAAIC,UAAW,yCAAyCu4F,EAAwBrzF,WAAY4zF,GAG/FV,cAAcnP,GAClB/sF,KAAK6C,MAAMs6F,iBAAiBpQ,GAGxBoP,mBACJn8F,KAAKgN,UAASowF,IAAS,CACnBz6C,UAAWy6C,EAAUz6C,cAKjC,UC3Pa06C,EAAkC9uE,IAAA,IAAC,UAAE+uE,GAAW/uE,EAAA,OACzD1qB,EAAAA,cAAA,YACK,IACAy5F,EACA,MCHIC,EAA0BhvE,IAAA,IAAC,KAAEnrB,EAAI,UAAEU,GAAWyqB,EAAA,OACvD1qB,EAAAA,cAAA,QAAMC,UAAWA,GACZ,IACAV,EACA,ilBC8IT,IAAqBo6F,EAAqBC,EAA1C,cAAmD55F,EAAAA,cAsD/CtE,YAAmBsD,EAAgE4J,GAAkC,IAAAs7C,EACjHz7C,MAAMzJ,GA/CO,KAAA66F,sBAAkD,CAC/D,CAAE35F,IAAK45F,EAAAA,GAAYC,0BAA2B7yF,MAAO/K,KAAK6C,MAAMsC,UAAUy4F,2BAC1E,CAAE75F,IAAK45F,EAAAA,GAAYE,oBAAqB9yF,MAAO/K,KAAK6C,MAAMsC,UAAU04F,qBACpE,CAAE95F,IAAK45F,EAAAA,GAAYG,qBAAsB/yF,MAAO/K,KAAK6C,MAAMsC,UAAU24F,sBACrE,CAAE/5F,IAAK45F,EAAAA,GAAYI,qBAAsBhzF,MAAO/K,KAAK6C,MAAMsC,UAAU44F,sBACrE,CAAEh6F,IAAK45F,EAAAA,GAAYK,sBAAuBjzF,MAAO/K,KAAK6C,MAAMsC,UAAU64F,uBACtE,CAAEj6F,IAAK45F,EAAAA,GAAYM,uBAAwBlzF,MAAO/K,KAAK6C,MAAMsC,UAAU84F,wBACvE,CAAEl6F,IAAK45F,EAAAA,GAAYO,wBAAyBnzF,MAAO/K,KAAK6C,MAAMsC,UAAU+4F,yBACxE,CAAEn6F,IAAK45F,EAAAA,GAAYQ,qBAAsBpzF,MAAO/K,KAAK6C,MAAMsC,UAAUg5F,sBACrE,CAAEp6F,IAAK45F,EAAAA,GAAYS,0BAA2BrzF,MAAO/K,KAAK6C,MAAMsC,UAAUi5F,4BAK7D,KAAAC,UAAgCr+F,KAAK6C,MAAMoC,QAAQiC,QAAQo3F,UAAUC,SAG9E,KAAAC,UAAsB,KAMtB,KAAAC,mBAAyC,EAMhC,KAAAC,kBAAoB,EAEpB,KAAAx9F,WAAY6Y,EAAAA,EAAAA,IAAa/Z,KAAK6C,MAAMoC,QAAQiC,SAErD,KAAAy3F,wBAAkC,EAElC,KAAAC,YAAsB,EA6Pb,KAAAC,2BAA6B1+F,UAC1C,MAAM8E,EAAUjF,KAAK6C,MAAMoC,QACrBiiE,EAAmCjiE,EAAQiK,IAAI9H,OAAO+/D,wBACtDC,EAA8BniE,EAAQiK,IAAI9H,OAAOigE,uBAEnDnvD,EAAAA,gBAAgBC,YAAY+uD,KAC3BA,EAAiCx7C,SAAS87C,EAAAA,eAAeC,OAC1DvvD,EAAAA,gBAAgBC,YAAYivD,KAC3BA,EAA4B17C,SAAS87C,EAAAA,eAAeC,OACrDznE,KAAK6C,MAAMuE,OAAO03F,yBAEZ9+F,KAAKinE,wCASF,KAAA83B,qBAAuB,CAACC,EAA8B9hF,KAAuD,IAAA6J,EAAAk4E,EAAAC,EAAA1zD,EAC1H,IAAI2zD,EAA6B,GAsBjC,GAnBuB,aAAnBn/F,KAAKq+F,UACLW,EAAcT,SAAW,WAEzBS,EAAcT,SAAW,SAGO,QAApCx3E,EAAI/mB,KAAK6C,MAAMoC,QAAQiC,QAAQsD,aAAK,IAAAuc,GAAhCA,EAAkCq4E,UAClCD,EAAe51F,KAAK2sB,MAAMmpE,mBAAmBr/F,KAAK6C,MAAMoC,QAAQiC,QAAQsD,MAAM40F,WAGlFJ,EAAcM,kBACTt/F,KAAK6C,MAAMoC,QAAQiC,QAAQsD,QACvBxK,KAAK6C,MAAMoC,QAAQiC,QAAQsD,MAAM+0F,MAAsC,QAAlCN,EAAIj/F,KAAK6C,MAAMuE,OAAOo4F,oBAAY,IAAAP,EAAAA,EAd9C,KAe9B,EACJD,EAAcS,eAAiB,CAAEC,QAASP,GAC1CH,EAAcW,SAAyC,QAAjCT,EAAGl/F,KAAK6C,MAAMuE,OAAOo4F,oBAAY,IAAAN,EAAAA,EAjBrB,GAkBlCF,EAAcY,eAAiB1iF,EAASA,SACxC8hF,EAAca,kBAAoB3iF,EAAS8T,MAC3CguE,EAAcc,eAAgBC,EAAAA,EAAAA,IAAuB//F,KAAK6C,MAAMoC,QAAQiC,UAAY,GAChD,QAApCskC,EAAIxrC,KAAK6C,MAAMoC,QAAQiC,QAAQsD,aAAK,IAAAghC,GAAhCA,EAAkCltB,UAAW,CAC7C,MAAM0hF,EAAiBhgG,KAAK6C,MAAMkE,KAAKi5F,eAAenwF,OAClDmwF,IACAhB,EAAcgB,eAAiBA,KAS1B,KAAA/4B,qCAAuC9mE,UAA0B,IAAA8/F,EAAAC,EAC9E,MAAM71B,EAAmE,QAAvD41B,EAAuC,QAAvCC,EAAGlgG,KAAK6C,MAAMkE,KAAKi4F,cAAcnvF,cAAM,IAAAqwF,OAAA,EAApCA,EAAsCN,sBAAc,IAAAK,EAAAA,EAAI,GAEvEv4B,QAAwCC,EAAAA,EAAAA,wDAC1C,IAAIC,EAAAA,mDACAyC,EACArqE,KAAK6C,MAAMoC,QACX4iE,EAAAA,4BAA4BC,aAEhC9nE,KAAK6C,MAAMoC,QAAQC,eAGnBgT,EAAAA,gBAAgBC,YAAYuvD,IAC5B1nE,KAAKgN,SAAS,CAAE06D,gCAAAA,KAOP,KAAA0C,gBAAkBjqE,UAA0B,IAAAggG,EAAAC,EACzD,MAAM/1B,EAAmE,QAAvD81B,EAAuC,QAAvCC,EAAGpgG,KAAK6C,MAAMkE,KAAKi4F,cAAcnvF,cAAM,IAAAuwF,OAAA,EAApCA,EAAsCR,sBAAc,IAAAO,EAAAA,EAAI,GACvEjjF,QAAiBotD,EAAAA,EAAAA,gCACnB,IAAIC,EAAAA,iCAAiCF,GACrCrqE,KAAK6C,MAAMoC,QAAQC,sBAGKlF,KAAK6C,MAAMkE,KAAKi4F,eAC9BY,eAAiB1iF,GAGlB,KAAAmjF,sBAAwB,KACrC,MAAM,UAAEl7F,GAAcnF,KAAK6C,MAC3B,MPlf0BA,CAAAA,IACvB,CACHy9F,MAAO/O,EAAU1uF,GACjB09F,YAAazO,EAAgBjvF,GAC7B29F,YAAaxO,EAAgBnvF,GAC7B49F,UAAW58F,IAAAA,cAAC4tD,EAAAA,UAAS,CAAC3tD,UAAU,4BO6ezB48F,CAAkB,CACrBv7F,UAAW,CACP+sF,qBAAsB/sF,EAAU+sF,qBAChCH,WAAY5sF,EAAU4sF,YAE1Bl6E,OAAQ7X,KAAKyM,MAAMswD,YACnB40B,UAAW3xF,KAAK2gG,gBAChB/O,cAAe5xF,KAAKg8D,gBAIX,KAAA4kC,oBAAsB,KACnC,MAAM,KAAE75F,EAAI,QAAE9B,EAAO,UAAEE,GAAcnF,KAAK6C,MAE1C,IAAIg+F,EAAsC,GAGlC,IAAD9iC,EAFH94D,GAAWA,EAAQiC,SAAWjC,EAAQiC,QAAQsD,OAASvF,EAAQiC,QAAQsD,MAAM9C,EAC7Em5F,EAAkB,IAAI57F,EAAQiC,QAAQsD,MAAM9C,KAE5Cm5F,EACK95F,EAAK+5F,SAASjxF,QACX4tF,EAAsBsD,gBAAgB97F,EAAQiC,QAAQ85F,OAAQj6F,EAAK+5F,SAASjxF,OAAOoxF,mBACtFl6F,EAAK+5F,SAASjxF,QAAU9I,EAAK+5F,SAASjxF,OAAOgK,OACd,QADmBkkD,EACnD/9D,KAAK6C,MAAMoC,QAAQiC,QAAQsD,aAAK,IAAAuzD,OAAA,EAAhCA,EAAkCx4D,QAClC,GAER,IACI27F,EADAC,EAAmB,GAEnBp6F,EAAKi4F,eAAiBj4F,EAAKi4F,cAAcnvF,aAA0DnJ,IAAhDK,EAAKi4F,cAAcnvF,OAAOgwF,kBAC7EqB,EAAqBn6F,EAAKi4F,cAAcnvF,OAAOgwF,kBACxC94F,EAAKmW,UAAYnW,EAAKmW,SAASrN,SACtCqxF,EAAqBn6F,EAAKmW,SAASrN,OAAOmhB,OAI1CmwE,EADAD,GAA6C,IAAvBA,EAEK,IAAvBA,GACM54F,EAAAA,EAAAA,QAAOtI,KAAK6C,MAAMsC,UAAUi8F,iBAAkBF,GAC9ClhG,KAAK6C,MAAMsC,UAAUk8F,YAEZ/4F,EAAAA,EAAAA,QAAOtI,KAAK6C,MAAMsC,UAAUi8F,iBAAkB,GAOrE,MAAO,CACHE,eAAgB,CAAEx9F,UAAW,qCANhBmB,EAAQiC,QAAQgK,kBAAoB,gBAAgBjM,EAAQiC,QAAQgK,kBAAkBqwF,gBAAkB,MAOrHh8F,MAAO,CACHi8F,YAPY39F,EAAAA,cAAC05F,EAAK,CAACz5F,UAAU,4CAA4CV,KAAM+B,EAAUs8F,mBAQzFC,UAPUb,GAAmBh9F,EAAAA,cAAC05F,EAAK,CAACz5F,UAAU,0CAA0CV,KAAMy9F,IAQ9Fc,WAPW99F,EAAAA,cAAC05F,EAAK,CAACz5F,UAAU,2CAA2CV,KAAM+9F,OAYxE,KAAAS,sBAAwB,KACrC,MAAM,KAAE76F,GAAS/G,KAAK6C,MAChBg/F,EAAoB96F,EAAK86F,kBAAkBhyF,OAejD,MAAO,CACHiyF,2BAA4B,CAAEx7F,IAAK,MAAOxC,UAAW,kDACrDi+F,sBAfAF,GACAA,EAAkBlgG,KAAI,CAACoJ,EAA8B6D,IAE7C/K,EAAAA,cAACwtF,EAAI,CACDttF,IAAK6K,EACLxL,KAAM2H,EAAM8O,KACZxW,UAAW,GAAGrD,KAAK6C,MAAMsC,UAAU68F,yBAAyBj3F,EAAM8O,OAClE1V,KAAM4G,EAAMk3F,QASxBC,2BAL0Br+F,EAAAA,cAACw5F,EAAS,CAACC,UAAU,QAStC,KAAA6E,oBAAsB,KACnC,MAAM,UAAEh9F,GAAcnF,KAAK6C,MACrBu/F,EAAiBpiG,KAAKqiG,+BAAiCriG,KAAKyM,MAAM61F,aAAaC,qBACrF,IAAIC,EAAkBxiG,KAAKyiG,uBAEvBziG,KAAK6C,MAAMoC,QAAQiK,IAAI9H,OAAOk1F,aAC9BkG,EAAkBA,EAAgBxyF,QAAO0yF,GAAkBA,EAAe3+F,MAAQ45F,EAAAA,GAAYM,0BAgBlG,MAAO,CACH0E,iBAAkB,CAAE7+F,UAAW,gDAC/B8+F,eAdA/+F,EAAAA,cAACg/F,EAAAA,gBAAe,CACZC,eAAe,uBACfC,UAAW59F,EAAU69F,oBACrBC,WAAW,yBACXC,kBAAkB,wBAClBC,YAAY,OACZX,gBAAiBA,EACjBY,eAAgBhB,EAChBiB,eAAgBrjG,KAAKsjG,sBACrBh4F,IAAKtL,KAAKujG,+BASL,KAAAC,eAAiB,KAC9B,MAAM,OAAEp8F,EAAM,QAAEnC,EAAO,KAAE8B,EAAI,UAAE5B,GAAcnF,KAAK6C,MAC5Cm8F,EAAgBj4F,EAAKi4F,cAAcnvF,OACnC+S,GAAU6gF,EAAAA,EAAAA,IAAcx+F,EAAQiC,SAChCs4F,EAAep4F,EAAOo4F,cAAgB,GAEtCkE,EAAY1E,MAAAA,GAAAA,EAAeM,kBAC3BN,EAAcM,mBAAqBt/F,KAAK6C,MAAMuE,OAAOo4F,cAAgB,IACpEx/F,KAAK6C,MAAMoC,QAAQiC,QAAQsD,QAAUxK,KAAK6C,MAAMoC,QAAQiC,QAAQsD,MAAM+0F,MAAS,EAChFoE,GAAa3E,MAAAA,OAAa,EAAbA,EAAea,oBAAqB,EACjD+D,EAAez+F,EAAUyQ,gBACzBiuF,EAAW1+F,EAAU2Q,YAE3B,OAAI6tF,GAAcnE,EACP,KAGP37F,EAAAA,cAACigG,EAAAA,uBAAsB,CACnBhgG,UAAU,yCACVqP,KAAK,aAAY,aACLhO,EAAU4+F,oBACtBnwC,IAAKhxC,EAAQze,KACbyL,IAAI,OACJnK,MAAOk+F,EACPnE,aAAcA,EACdwE,aAAcN,EACdE,aAAc5jG,KAAKikG,YAAYL,GAC/BC,SAAU7jG,KAAKkkG,YAAYL,GAC3BM,kBAAmBP,EACnBQ,cAAeP,EACf7gG,iBAAkBhD,KAAKgD,oBAKlB,KAAAqhG,eAAiB,KAC9B,MAAM,KAAEt9F,EAAI,QAAE9B,EAAO,OAAEmC,GAAWpH,KAAK6C,MACjCyhG,EAAoBr/F,EAAQiC,QAAQsD,OAASvF,EAAQiC,QAAQsD,MAAM+5F,WAAa,QAAU,SAC1FC,EACFxkG,KAAK6C,MAAMuE,OAAOq9F,oBAAsBvsF,EAAAA,gBAAgBC,YAAYnY,KAAKyM,MAAM1D,UACzE/I,KAAKyM,MAAM1D,SAASiH,QAAO/G,GAChBiP,EAAAA,gBAAgBC,YAAYlP,EAAQC,UAAYlJ,KAAK0kG,wBAAwBz7F,KAExFlC,EAAKgC,SAAS8G,QACd9I,EAAKgC,SAAS8G,OAAOG,QAAO/G,GACjBiP,EAAAA,gBAAgBC,YAAYlP,EAAQC,UAAYlJ,KAAK0kG,wBAAwBz7F,KAG5F07F,EAAkB59F,EAAKi4F,cAAcnvF,QAAU9I,EAAKi4F,cAAcnvF,OAAOiwF,eAAkB,GAEjG9/F,KAAK4kG,uBAAuBJ,GAAiBA,EAAc7jG,OAAQyG,EAAOy9F,qBAC1E,MAAMC,EAAmB9kG,KAAKy+F,mBA8B9B,MAAO,CACHsG,oBAAqB,CAAEjhG,UAAW,2CAClCkhG,wBAAyB,CAAElhG,UAAW,+CACtCiF,SA/BAy7F,GACAA,EAAc7iG,KAAI,CAAC06F,EAAmDztF,IAE9D/K,EAAAA,cAACo4F,EAAa,CACVI,wBAAyBA,EACzBd,sBAAuBoJ,EACvBjP,sBAAuB11F,KAAKilG,uBAC5BjR,6BAA8Bh0F,KAAK6C,MAAMsC,UAAU6uF,6BACnDE,6BAA8Bl0F,KAAK6C,MAAMsC,UAAU+uF,6BACnDnwF,IAAK6K,EACLuuF,iBAAkBn9F,KAAKklG,kBACvBrV,WAAY7vF,KAAKmlG,iBACjB38D,YAAY,EACZ4zD,2BAA4B0I,GAAoBA,EAAmBl2F,GACnE01F,kBAAmBA,EACnBr/F,QAASA,EACTK,SAAUtF,KAAK6C,MAAMV,GACrBs1E,eAAgBz3E,KAAK6C,MAAMiE,SAC3B9D,iBAAkBhD,KAAKgD,iBACvBo2F,sBAAuBp5F,KAAK6C,MAAMsC,UAAUi0F,sBAC5CE,oBAAqBt5F,KAAK6C,MAAMsC,UAAUm0F,oBAC1CC,qBAAsBv5F,KAAK6C,MAAMsC,UAAUo0F,qBAC3CF,4BAA6Br5F,KAAK6C,MAAMsC,UAAUk0F,4BAClDvgF,SAAU9Y,KAAK8Y,eAiBlB,KAAA4rF,wBAA2Bz7F,IAA8C,IAAA+O,EAAA+pD,EAAAC,EAAAC,EACtF,MAAM,8BAAEmjC,GAAkCplG,KAAKyM,MACzC44F,EACsE,KAAxC,QAA/BrtF,EAAAhY,KAAK6C,MAAMkE,KAAKmW,SAASrN,cAAM,IAAAmI,OAAA,EAA/BA,EAAiCstF,oCAC9Br8F,EAAQwU,YAA4C,QAApCskD,EAAK/hE,KAAK6C,MAAMkE,KAAKmW,SAASrN,cAAM,IAAAkyD,OAAA,EAA/BA,EAAiCujC,oCACuB,KAAhFF,MAAAA,OAA6B,EAA7BA,EAA+BG,+CAC5Bt8F,EAAQwU,YAAa2nF,MAAAA,OAA6B,EAA7BA,EAA+BG,8CAEtDC,EACoE,KAAtC,QAA/BxjC,EAAAhiE,KAAK6C,MAAMkE,KAAKmW,SAASrN,cAAM,IAAAmyD,OAAA,EAA/BA,EAAiC+sB,kCAC9B9lF,EAAQwU,YAA4C,QAApCwkD,EAAKjiE,KAAK6C,MAAMkE,KAAKmW,SAASrN,cAAM,IAAAoyD,OAAA,EAA/BA,EAAiC8sB,kCACY,KAArEqW,MAAAA,OAA6B,EAA7BA,EAA+BK,oCAC5Bx8F,EAAQwU,YAAa2nF,MAAAA,OAA6B,EAA7BA,EAA+BK,mCAG5D,OACIJ,GACCrlG,KAAK6C,MAAMoC,QAAQiK,IAAI9H,OAAO6nF,8BAAgCC,EAAAA,GAAqCC,SAChGqW,GAIK,KAAAE,kBAAoB,KAAsB,IAAAC,EACvD,MAAM,UAAExgG,EAAS,KAAE4B,EAAI,UAAE/E,GAAchC,KAAK6C,OACtC,8BAAEuiG,GAAkCplG,KAAKyM,MACzCm5F,EAAoB7+F,EAAKi4F,cAAcnvF,QAAU9I,EAAKi4F,cAAcnvF,OAAOiwF,eAAkB,GAC7F1P,EAAkD,QAAlCuV,EAAG3lG,KAAK6C,MAAMkE,KAAKgC,SAAS8G,cAAM,IAAA81F,OAAA,EAA/BA,EAAiC78F,MAAK+8F,GAA6B,WAAnBA,EAAO78F,UAChF,OACInF,EAAAA,cAACoqF,EAAa,CACVpjC,WAAW,gCACX2kC,aAAcrqF,EAAUqqF,aACxB7jF,MAAOxG,EAAU2gG,mBACjBpW,eAAgBvqF,EAAUuqF,eAC1BZ,gBAAiB8W,EAEjB5W,iBAAkBjoF,EAAKgC,SAAS8G,OAChCkgF,aAAc5qF,EAAU4qF,aACxBC,uBAAwB7qF,EAAU6qF,uBAClChuF,UAAWA,EACXysF,gBAAiBzuF,KAAK+lG,iBACtBlW,WAAY7vF,KAAKgmG,iCACjBvW,gBAAiBtqF,EAAUsqF,gBAC3BzsF,iBAAkBhD,KAAKgD,iBACvBiC,QAASjF,KAAK6C,MAAMoC,QACpB8pF,gCAAiCqW,MAAAA,OAA6B,EAA7BA,EAA+BK,kCAChExV,cAAeG,KASV,KAAA6V,aAAe,KAAkB,IAAAC,EAAA9+E,EAAA++E,EAC9C,MACI/+F,QAAQ,cAAEC,EAAeuhE,oBAAqBw9B,IAC9CpmG,KAAK6C,OACH,UAAEsC,GAAcnF,KAAK6C,MAErBwjG,EAAyBrmG,KAAK6C,MAAMoC,QAAQiK,IAAI9H,OAAO0hE,eACvDw9B,EAAkBF,IAAiD,SAAnBC,GAAgD,oBAAnBA,GAE7EnpF,EAAYld,KAAK6C,MAAMkE,KAAKi4F,cAAcnvF,QAAU7P,KAAK6C,MAAMkE,KAAKi4F,cAAcnvF,OAAO+vF,gBAAmB,GAC5G52B,EAAgC,QAAnBk9B,EAAGlmG,KAAK6C,MAAMoS,aAAK,IAAAixF,GAAW,QAAXA,EAAhBA,EAAkBj9B,iBAAS,IAAAi9B,OAAA,EAA3BA,EAA8B,GAC9C/8B,EAA0BjxD,EAAAA,gBAAgBC,YAAYnY,KAAK6C,MAAMoS,MAAMk0D,yBACvEnpE,KAAK6C,MAAMoS,MAAMk0D,wBAAwB,GACzC,KAEAo9B,EAA+D,QAAtCn/E,EAAGpnB,KAAK6C,MAAMkE,KAAK4S,aAAa9J,cAAM,IAAAuX,OAAA,EAAnCA,EAAqCte,MACnE6Q,GAAsC,0DAAtBA,EAAaE,OAEjC,OACIhW,EAAAA,cAAC0uF,EAAwB,CACrBr1E,SAAUA,EACVjY,QAASjF,KAAK6C,MAAMoC,QACpBoC,cAAeA,EACflC,UAAWA,EACXE,WAAYrF,KAAK6C,MAAMiE,SACvBxB,SAAUtF,KAAK6C,MAAMV,GACrBymE,oBAAqB09B,EACrBtjG,iBAAkBhD,KAAKgD,iBACvBgmE,cAAeA,EACfG,wBAAyBA,EACzB4lB,gCAAgE,QAAjCoX,EAAEnmG,KAAK6C,MAAMkE,KAAKmW,SAASrN,cAAM,IAAAs2F,OAAA,EAA/BA,EAAiCpX,gCAClEvlB,qBAAsB+8B,MAAAA,OAAyB,EAAzBA,EAA2BzsF,UACjD4tD,gCAAiC1nE,KAAKyM,MAAMi7D,mCAKvC,KAAA47B,sBAAyBkD,IACtC,MACIvhG,SAAWiC,QAASpG,EAAc,cAAEoE,IACpClF,KAAK6C,MAET,GAAK/B,GAAmBoE,GAAkBlF,KAAK6C,MAAMkE,KAAKi4F,cAAcnvF,OASxEyB,OAAOm1F,QAAQC,UACX,GACA,IACAC,EAAAA,EAAAA,KACIlD,EAAAA,EAAAA,IAAczjG,KAAK6C,MAAMoC,QAAQiC,cACjCR,EACA,CAAC1G,KAAK4mG,iCAAiCJ,EAAapD,sBACpD18F,KAGRmgG,EAAAA,EAAAA,KAAY,KACR7mG,KAAK6C,MAAMkE,KAAKi4F,cAAcnvF,OAAQyvF,kBAAoB,EAC1Dt/F,KAAK6C,MAAMkE,KAAKi4F,cAAcnvF,OAAQ4vF,eAAiB,CACnDC,QAAS,CAAC1/F,KAAK4mG,iCAAiCJ,EAAapD,yBAtBrE,CAEI,MAAMnhG,EAAQ,mDAAoDnB,EAAqC,GAApB,qBAC9EoE,EAAmC,GAAnB,sCAErBlF,KAAK6C,MAAMb,UAAUqa,QAAQpa,KAsBpB,KAAA2kG,iCAAoCjnF,IACjD,MAAM,KAAE5Y,GAAS/G,KAAK6C,MAEtB,IAAKkE,EAAK+/F,oBAAoBj3F,OAC1B,MAAO,GAGX,MAAMk3F,EAAsBhgG,EAAK+/F,oBAAoBj3F,OAAO/G,MAAKg+F,GACtDA,EAAoB/iG,MAAQ4b,EAAO5b,MAG9C,OAAIgjG,EACOA,EAAoBC,WAGxB,IAOM,KAAAC,uBAAyB,KAA6B,IAAAC,EACnE,MAAMC,EAAmD,QAAvCD,EAAGlnG,KAAK6C,MAAMkE,KAAKi4F,cAAcnvF,cAAM,IAAAq3F,OAAA,EAApCA,EAAsCzH,eAC3D,GAAIvnF,EAAAA,gBAAgBC,YAAYgvF,MAAAA,OAAY,EAAZA,EAAczH,SAC1C,OAAOyH,EAAczH,QAAQ,GAGjC,MAAM0H,GAAeC,EAAAA,EAAAA,IAA8B,UAAWrnG,KAAK6C,MAAMoC,QAAQiC,SACjF,OAAIgR,EAAAA,gBAAgBC,YAAYivF,GACrBA,EAAa,QADxB,GAWa,KAAA3E,qBAAuB,KACpC,MAAMqE,EAAsB9mG,KAAK6C,MAAMkE,KAAK+/F,oBAAoBj3F,OAEhE,IAAKi3F,EACD,MAAO,GAGX,MAAMQ,EAA4BtnG,KAAK09F,sBAAsB1tF,QAAOu3F,GAChET,EAAoBh+F,MAAKlH,GAAQ2lG,EAAmBxjG,MAAQnC,EAAKmC,QAGrE,OAAOmU,EAAAA,gBAAgBqvD,YAAY+/B,IAOtB,KAAAjF,4BAA8B,KAC3C,MAAMmF,EAAmBxnG,KAAKinG,yBAExBH,EAAsB9mG,KAAK6C,MAAMkE,KAAK+/F,oBAAoBj3F,OAEhE,IAAK23F,IAAqBV,EACtB,OAGJ,MAAMW,EAAqBX,EAAoBh+F,MAC3Cy+F,GACIA,EAAmBP,WAAWU,aAAeF,EAAiBE,YAC9DH,EAAmBP,WAAWW,eAAiBH,EAAiBG,eAExE,OAAKF,EAIEznG,KAAK09F,sBAAsB50F,MAAK45F,GAAkBA,EAAe3+F,MAAQ0jG,EAAmB1jG,WAJnG,GAOa,KAAAmhG,kBAAqBnY,IAA+D,IAAA6a,EACjG,MACI3iG,SAAWiC,QAASpG,EAAc,cAAEoE,IACpClF,KAAK6C,MAET,IAAK/B,IAAmBoE,IAAkBlF,KAAK6C,MAAMkE,KAAKi4F,cAAcnvF,OAAQ,CAC5E,MAAM5N,EAAQ,gEACPnB,EAAqC,GAApB,qBAA2BoE,EAAmC,GAAnB,sCAEnE,YADAlF,KAAK6C,MAAMb,UAAUqa,QAAQpa,GAKjC,MAAMgrF,EAA4BH,EAC9BC,GACoC,QAApC6a,EAAA5nG,KAAK6C,MAAMkE,KAAKi4F,cAAcnvF,cAAM,IAAA+3F,OAAA,EAApCA,EAAsC9H,gBAAiB,IAG3DxuF,OAAOm1F,QAAQC,UAAU,GAAI,IAAIC,EAAAA,EAAAA,KAAiBlD,EAAAA,EAAAA,IAAczjG,KAAK6C,MAAMoC,QAAQiC,SAAU+lF,KAC7F4Z,EAAAA,EAAAA,KAAY,KACR7mG,KAAK6C,MAAMkE,KAAKi4F,cAAcnvF,OAAQyvF,kBAAoB,EAC1Dt/F,KAAK6C,MAAMkE,KAAKi4F,cAAcnvF,OAAQiwF,cAAgB7S,MAI7C,KAAAkY,iBAAoBpY,IACjC,GAAI/sF,KAAK6C,MAAMkE,KAAKi4F,cAAcnvF,OAAQ,CACtC,MAAMg4F,EAAwB/a,EAC1BC,EACA/sF,KAAK6C,MAAMkE,KAAKi4F,cAAcnvF,OAAOiwF,eAAiB,IAG1D,OAAO6G,EAAAA,EAAAA,KAAiBlD,EAAAA,EAAAA,IAAczjG,KAAK6C,MAAMoC,QAAQiC,SAAU2gG,GAGvE,OADA7nG,KAAK6C,MAAMb,UAAUqa,QAAQ,uFACtB,IAGM,KAAA0pF,iBAAoBS,IACjC,MAAM,KAAEz/F,EAAI,UAAE/E,GAAchC,KAAK6C,MAEjC,IAAKkE,EAAKi4F,cAAcnvF,OAEpB,YADA7N,EAAUqa,QAAQ,sGAItB,IAAI2wE,EAA6BjmF,EAAKi4F,cAAcnvF,QAAU9I,EAAKi4F,cAAcnvF,OAAOiwF,eAAkB,GAE1G,GAAK0G,EAAanY,SASX,CACHrB,EAA4B,GAG5B,MAAM8a,EAAoB9nG,KAAKujG,2BAA2Br2F,SAAWlN,KAAKujG,2BAA2Br2F,QAAQrK,MAAMogG,WAC7G8E,EAAkBD,GAAqBt4F,SAAS4G,eAAe0xF,GACrEt5F,YAAW,KACPu5F,GAAmBA,EAAgB34F,UACpC,QAjBqB,CACxB,MAAM44F,EAAiBxB,EAAa7X,cACpC,IAAKqZ,EAED,YADAhmG,EAAUqa,QAAQ,gFAGtB2wE,EAA4BA,EAA0Bh9E,QACjDm9E,IAA4CT,EAA8Bsb,EAAgB7a,KAanG,MAAMvqE,GAAU6gF,EAAAA,EAAAA,IAAczjG,KAAK6C,MAAMoC,QAAQiC,SACjDoK,OAAOm1F,QAAQC,UAAU,GAAI,IAAIC,EAAAA,EAAAA,IAAiB/jF,EAASoqE,IAC3DjmF,EAAKi4F,cAAcnvF,OAAOyvF,kBAAoB,EAC9Cv4F,EAAKi4F,cAAcnvF,OAAOiwF,cAAgB9S,GAG7B,KAAAgZ,iCAAmC,CAACzX,EAAsC0Z,KACvF,MAAM,KAAElhG,EAAI,UAAE/E,GAAchC,KAAK6C,MAC3B+f,GAAU6gF,EAAAA,EAAAA,IAAczjG,KAAK6C,MAAMoC,QAAQiC,SAEjD,IAAKH,EAAKi4F,cAAcnvF,OAEpB,OADA7N,EAAUqa,QAAQ,yGACXuG,EAAQze,KAGnB,IAAI6oF,EAA6BjmF,EAAKi4F,cAAcnvF,QAAU9I,EAAKi4F,cAAcnvF,OAAOiwF,eAAkB,GAE1G,GAAKmI,EASDjb,EAA4B,OATf,CACb,IAAKuB,EAED,OADAvsF,EAAUqa,QAAQ,wFACXuG,EAAQze,KAEnB6oF,EAA4BA,EAA0Bh9E,QACjDm9E,IAA4CT,EAA8B6B,EAAiBpB,KAMpG,OAAOwZ,EAAAA,EAAAA,IAAiB/jF,EAASoqE,IAwBpB,KAAA4X,uBAAyB,CAACJ,EAAwB0D,KAC/D,OAAQA,GACJ,IAAI,MACAloG,KAAKy+F,mBAAqB+F,EAC1B,MACJ,IAAI,MACAxkG,KAAKy+F,mBAAqB,EAC1B,MACJ,IAAI,MACAz+F,KAAKy+F,mBAAqB,EAC1B,MACJ,IAAI,QACAz+F,KAAKy+F,mBAAqB,EAC1B,MACJ,IAAI,OACAz+F,KAAKy+F,mBAAqB,EAC1B,MACJ,QACIz+F,KAAKy+F,mBAAqB,IASrB,KAAAwF,YAAekE,GAExBtkG,EAAAA,cAAA,OAAKC,UAAU,wBACXD,EAAAA,cAAA,QAAMC,UAAU,oCAAmC,cAAa,SAChED,EAAAA,cAAA,QAAMC,UAAU,aAAaqkG,IAUxB,KAAAjE,YAAekE,GAExBvkG,EAAAA,cAAA,OAAKC,UAAU,wBACXD,EAAAA,cAAA,QAAMC,UAAU,aAAaskG,GAC7BvkG,EAAAA,cAAA,QAAMC,UAAU,qCAAoC,cAAa,UAh4BzE9D,KAAKw+F,UAAoD,YAAnB,QAArBz2C,EAAAllD,EAAMoC,QAAQiC,eAAO,IAAA6gD,GAAQ,QAARA,EAArBA,EAAuB/S,cAAM,IAAA+S,OAAA,EAA7BA,EAA+B9S,MAAoB,KAAO,KAC3Ej1C,KAAK2gG,gBAAkB98F,EAAAA,YACvB7D,KAAKujG,2BAA6B1/F,EAAAA,YAClC7D,KAAKg8D,aAAeh8D,KAAKg8D,aAAa53B,KAAKpkC,MAC3CA,KAAKqoG,gBAAkBroG,KAAKqoG,gBAAgBjkE,KAAKpkC,MACjDA,KAAKgoE,cAAgB,GACrBhoE,KAAKyM,MAAQ,CACT61F,aAAc,CACVr/C,SAAS,EACTs/C,qBAAsBviG,KAAK09F,sBAAsB,IAErD3gC,aAAa,EACbh0D,SAAU,GACVq8F,mCAA+B1+F,GAEnC,MAAM,mBAAEkwF,EAAkB,SAAEH,EAAQ,SAAEE,EAAQ,gBAAER,GAAoBn2F,KAAK6C,MAAMsC,UAEzE67F,EAAShhG,KAAK6C,MAAMoC,QAAQiC,QAAQ85F,OACpCh/F,EAAYhC,KAAK6C,MAAMb,UACvB81F,EAAqB93F,KAAK6C,MAAMsC,UAAUmjG,yBAC1ChQ,EAAuBt4F,KAAK6C,MAAMsC,UAAUojG,wBAClDvoG,KAAKilG,uBAAyB,CAC1BjjG,UAAAA,EACAg/F,OAAAA,EACApK,mBAAAA,EACAH,SAAAA,EACAE,SAAAA,EACAR,gBAAAA,EACA2B,mBAAAA,EACAQ,qBAAAA,GAEJt4F,KAAKgD,kBAAmBiO,EAAAA,EAAAA,oBACpBjR,KAAK6C,MAAMoC,QAAQiC,QAAQgK,kBAC3BlR,KAAK6C,MAAMsO,aACXnR,KAAK6C,MAAMb,WAEfhC,KAAKqoG,kBAzFC,eACN,MAA0B,OAAnBroG,KAAKw+F,WAAyC,OAAnBx+F,KAAKw+F,UAwCpC,uBAAuBwC,EAAgBwH,GAAyC,IAAAC,EACnF,IAAIC,EAKJ,OAJI1H,GAAUwH,GAAoBtwF,EAAAA,gBAAgBC,YAAYqwF,KAC1DE,EAAkBF,EAAiB1/F,MAAKlH,GAAQA,EAAK+mG,SAAUpH,gBAAkBP,EAAOO,iBAGtE,QAAtBkH,EAAOC,SAAe,IAAAD,OAAA,EAAfA,EAAiBjb,KA4CrB,0BAAuB,IAAAnuB,EAC1Br/D,KAAK4+F,YAAa,EACdp8E,EAAAA,GAASC,WAAanR,OAAOD,mBAC7BC,OAAOD,iBAAiB,SAAUrR,KAAKqoG,iBACvCroG,KAAKqoG,mBAGT,MAAMrJ,QAAsBh/F,KAAK6C,MAAMkE,KAAKi4F,cACtC9hF,QAAiBld,KAAK6C,MAAMkE,KAAKmW,SACjCkoF,QAAsCwD,EAAAA,2BAAAA,+BAA0D,CAClGrnG,cAAevB,KAAK6C,MAAMoC,QAAQC,gBAElClF,KAAK4+F,YACL5+F,KAAKgN,SAAS,CAAEo4F,8BAAAA,IAGpBplG,KAAK++F,qBAAqBC,EAAe9hF,IAGzCqJ,EAAAA,EAAAA,KACI,KAAK,IAAAsiF,EAAAC,EACD,MAAO,CACwB,QADxBD,EACH7J,EAAcc,qBAAa,IAAA+I,OAAA,EAA3BA,EAA6BloG,OAC7Bq+F,EAAcM,kBACdpnF,EAAAA,gBAAgBC,YAAwC,QAA7B2wF,EAAC9J,EAAcS,sBAAc,IAAAqJ,OAAA,EAA5BA,EAA8BpJ,aAGlEv/F,UAAW,IAAA4oG,EAAAC,EAAAC,EAAAnpC,EAAAopC,EAAAC,EAAAhQ,EAAA36B,EACP,MAAM4qC,QAAyBppG,KAAK6C,MAAMkE,KAAKi4F,cACzC3+F,EAAQ,IAAIgpG,EAAAA,GACdD,EAAiB7K,SACjBv+F,KAAK6C,MAAMoC,QAAQiC,QAAQnG,YAC3B,CACIU,OAAQ,CACJC,IAAK1B,KAAK6C,MAAMuE,OAAOo4F,aACvB8J,KAAM/zC,KAAKryB,IAAIkmE,EAAiBzJ,UAA8C,QAAtCoJ,EAAIK,EAAiB9J,yBAAiB,IAAAyJ,EAAAA,EAAI,GAAI,IAE1F/3E,OAAO,EACPu4E,QAAwC,QAAjCP,EAAEI,EAAiB3J,sBAAc,IAAAuJ,EAAAA,EAAI,IAElB,QAD7BC,EACDG,EAAiBtJ,qBAAa,IAAAmJ,EAAAA,EAAI,KAEhCjpG,KAAK6C,MAAMoC,QAAQiC,QAAQo3F,UAAUkL,UAAY,GAGnB,QAAhC1pC,EAAA9/D,KAAK6C,MAAMoC,QAAQiC,QAAQsD,aAAK,IAAAs1D,GAAhCA,EAAkCp4D,EAC5B1H,KAAK6C,MAAMoC,QAAQiC,QAAQsD,MAAM9C,EACjC6B,KAAKC,UAAU,CACXkU,UAA2C,QAAlCwrF,EAAElpG,KAAK6C,MAAMoC,QAAQiC,QAAQsD,aAAK,IAAA0+F,OAAA,EAAhCA,EAAkC5qF,UAC7CmrF,eAAgD,QAAlCN,EAAEnpG,KAAK6C,MAAMoC,QAAQiC,QAAQsD,aAAK,IAAA2+F,OAAA,EAAhCA,EAAkCz+B,mBAGhD,QAAXyuB,EAACn5F,KAAK6C,aAAK,IAAAs2F,GAAQ,QAARA,EAAVA,EAAY/xF,cAAM,IAAA+xF,IAAlBA,EAAoB2F,mBACtB9+F,KAAK6C,MAAMuE,OAAOq9F,mBAClBzkG,KAAK6C,MAAMoC,QAAQiC,QAAQ85F,OAC3BhhG,KAAKkB,UACLkkG,GAGEsE,QAAuBC,EAAAA,EAAAA,IAAsBtpG,EAAOL,KAAK6C,MAAMoC,QAAQC,eAe7E,GAdAkkG,EAAiBvJ,kBAAoB6J,EAAe14E,MACpDo4E,EAAiBxJ,eAAiB8J,EAAexsF,SAI7Cld,KAAK6C,MAAMuE,OAAO0jE,+BAC6B,QADAtM,EAC/Cx+D,KAAK6C,MAAMoC,QAAQC,cAAcpE,sBAAc,IAAA09D,GAAM,QAANA,EAA/CA,EAAiDj3C,YAAI,IAAAi3C,GAArDA,EAAuDh3C,iBAGvDxnB,KAAKoqE,wBAGHpqE,KAAK6+F,6BAEP7+F,KAAK6C,MAAMuE,OAAOq9F,mBAAoB,CAAC,IAADmF,EAAAC,EAAAC,EAAAC,EAAAC,EACtC,MAAMC,EAAe,IAAIC,EAAAA,GACrBd,EAAiB7K,SACjBv+F,KAAK6C,MAAMoC,QAAQiC,QAAQnG,YAC3B,CACIU,OAAQ,CACJC,IAAK1B,KAAK6C,MAAMuE,OAAOo4F,aACvB8J,KAAM/zC,KAAKryB,IACPkmE,EAAiBzJ,UAA8C,QAAtCiK,EAAIR,EAAiB9J,yBAAiB,IAAAsK,EAAAA,EAAI5pG,KAAK0+F,mBACxE1+F,KAAK0+F,oBAGb1tE,OAAO,EACPu4E,QAAwC,QAAjCM,EAAET,EAAiB3J,sBAAc,IAAAoK,EAAAA,EAAI,IAElB,QAD7BC,EACDV,EAAiBtJ,qBAAa,IAAAgK,EAAAA,EAAI,KAEhC9pG,KAAK6C,MAAMoC,QAAQiC,QAAQo3F,UAAUkL,UAAY,GACnB,QAAhCO,EAAA/pG,KAAK6C,MAAMoC,QAAQiC,QAAQsD,aAAK,IAAAu/F,GAAhCA,EAAkCriG,EAC5B1H,KAAK6C,MAAMoC,QAAQiC,QAAQsD,MAAM9C,EACD,QADEsiG,EAClChqG,KAAK6C,MAAMoC,QAAQiC,QAAQsD,aAAK,IAAAw/F,OAAA,EAAhCA,EAAkC1rF,WACxC,EACAte,KAAK6C,MAAMuE,OAAOq9F,wBAClB/9F,EACA1G,KAAKkB,UACLkkG,GAGEr8F,QAAiBohG,EAAAA,EAAAA,IAA4BF,EAAcjqG,KAAK6C,MAAMoC,QAAQC,eACpFlF,KAAKgN,SAAS,CAAEjE,SAAAA,QAMxB/I,KAAK6C,MAAMuE,OAAO0jE,+BAE6B,QAFAzL,EAE/Cr/D,KAAK6C,MAAMoC,QAAQC,cAAcpE,sBAAc,IAAAu+D,GAAM,QAANA,EAA/CA,EAAiD93C,YAAI,IAAA83C,GAArDA,EAAuD73C,iBAGvDxnB,KAAKoqE,wBAEHpqE,KAAK6+F,6BAGRttF,uBACHvR,KAAK4+F,YAAa,EACdp8E,EAAAA,GAASC,WAAanR,OAAOE,qBAC7BF,OAAOE,oBAAoB,SAAUxR,KAAKqoG,iBAI3Cz2F,SAAM,IAAA2c,EAAA67E,EAAAC,EAAAC,EAAAC,EAAAC,EACT,MACIpjG,QAAQ,cAAEC,EAAa,UAAEvD,GAAW,UACpCqB,EACA4B,MAAM,cAAEi4F,EAAe9hF,SAAUgrD,EAAiB,eAAE83B,IACpDhgG,KAAK6C,OAEJ7C,KAAK2+F,wBAA0BK,EAAcnvF,QAAUq4D,EAAkBr4D,SAC1E7P,KAAK++F,qBAAqBC,EAAcnvF,OAAQq4D,EAAkBr4D,QAClE7P,KAAK2+F,wBAAyB,GAGlC,MAAMzhF,EAAYld,KAAK6C,MAAMkE,KAAKi4F,cAAcnvF,QAAU7P,KAAK6C,MAAMkE,KAAKi4F,cAAcnvF,OAAO+vF,gBAAmB,GAC5G6K,EAA6E,QAAhEl8E,EAAuC,QAAvC67E,EAAuB,QAAvBC,EAAGrL,EAAcnvF,cAAM,IAAAw6F,OAAA,EAApBA,EAAsBrK,sBAAc,IAAAoK,EAAAA,EAAIpK,EAAenwF,cAAM,IAAA0e,EAAAA,EAAI,KACvF,IAAIm8E,EAAY,GACXxyF,EAAAA,gBAAgBC,YAAY+E,KAC7BwtF,EAA+B,aAAnB1qG,KAAKq+F,UAA2Bl5F,EAAUwlG,2BAA6BxlG,EAAUylG,0BAEjG,MAAMC,EAAoB7qG,KAAKimG,eACzB6E,EACFjnG,EAAAA,cAAC+sF,EAAuB,CACpBpzE,QAASitF,EACTxlG,QAASjF,KAAK6C,MAAMoC,QACpBoC,cAAeA,EACflC,UAAWA,EACXE,WAAYrF,KAAK6C,MAAMiE,SACvBxB,SAAUtF,KAAK6C,MAAMV,GACrBa,iBAAkBhD,KAAKgD,iBACvB0nE,eAAgD,QAAlC4/B,EAAEtqG,KAAK6C,MAAMoC,QAAQiC,QAAQsD,aAAK,IAAA8/F,OAAA,EAAhCA,EAAkC5/B,iBAIpDqgC,EAA8BvkG,EAAAA,EAAA,GAC7BxG,KAAK6C,OAAK,IACbqa,SAAU2tF,EACVG,eAAgBhrG,KAAK4gG,sBACrBiB,mBAAoB7hG,KAAK6C,MAAMuE,OAAO6jG,kBAAoBjrG,KAAK4hG,wBAC/DsJ,WAAYlrG,KAAKqkG,iBACjBvgG,UAAW4O,GAAAA,CAAW,6BAA8B5O,GACpD05F,sBAAuB,CACnB/qF,YAAazS,KAAK6C,MAClBiB,UAAW4O,GAAAA,CAAW,6BAA8B5O,IAExDqnG,cAA2E,KAAxB,QAApCZ,EAAAvqG,KAAK6C,MAAMkE,KAAKi4F,cAAcnvF,cAAM,IAAA06F,OAAA,EAApCA,EAAsC1K,mBAA0B7/F,KAAKmiG,sBAAwB,KAC5GiJ,WAAYprG,KAAKwjG,iBACjB6H,kBAAmB,CAAEvnG,UAAW,wCAChCwnG,wBAAyB,CAAExnG,UAAW,+CACtCynG,qBAAsB,CAAEznG,UAAW,oDACnC0nG,iCAAkC,CAAE1nG,UAAW,sDAC/C2nG,cAAezrG,KAAK0lG,oBACpBgG,YACgE,KAAxB,QAApClB,EAAAxqG,KAAK6C,MAAMkE,KAAKi4F,cAAcnvF,cAAM,IAAA26F,OAAA,EAApCA,EAAsC3K,mBAClCh8F,EAAAA,cAACytF,EAAW,CACRluF,KAAM+B,EAAU4sF,WAChB1uF,UAAW8B,EAAU4sF,WACrB3lF,SAAUpM,KAAK2gG,gBACf90F,QAAS7L,KAAKg8D,aACd75D,GAAG,wBAEP,KACRwpG,kBAAmB3rG,KAAKqgG,wBACxBvnF,SAAU9Y,KAAK8Y,SACftB,aAAckzF,GAAa7mG,EAAAA,cAAC8sF,EAAY,CAACvtF,KAAMsnG,IAC/CkB,uBAAwB,CAAE9nG,UAAW,4BACrC+nG,mBAAoBpB,EAAgBK,EAAmB,KACvD9iC,cAAehoE,KAAKgoE,cACpBN,gCAAiC1nE,KAAKyM,MAAMi7D,kCAEhD,OAAO1nE,KAAK6C,MAAMiR,WAAWi3F,GAslBzBe,eACJ,OAAItpF,EAAAA,GAASC,WACF3J,EAAAA,EAAAA,UAAS,CAAEC,QAASC,EAAAA,YAAY+yF,QAAS9mG,QAASjF,KAAK6C,MAAMoC,QAAQiC,WAEzE4R,EAAAA,EAAAA,UAAS,CAAEC,QAASC,EAAAA,YAAYC,SAAUhU,QAASjF,KAAK6C,MAAMoC,QAAQiC,UAGzE80D,eACJh8D,KAAKgN,SAAS,CACV+vD,aAAc/8D,KAAKyM,MAAMswD,cAIzBsrC,kBACJroG,KAAKw+F,UAAYx+F,KAAK8rG,eAElB9rG,KAAKyM,MAAMswD,cAAgB/8D,KAAK8Y,UAChC9Y,KAAKg8D,kBAp4BH5tC,EAAAA,EAAAA,IAAA,CAAT4K,EAAAA,IAAQ,8BAqBT5K,EAAAA,EAAAA,IAAA,CADC2K,EAAAA,IAAU,gCAxBMykE,EAAqBC,GAAArvE,EAAAA,EAAAA,IAAA,CADzCC,EAAAA,IACoBmvE,GA67BpB,kGC1kCD,MA+DMwO,EAA0BA,CAC5BC,EACAf,EACAtI,EACAsJ,IAEOroG,EAAAA,aACHooG,EAAW3L,MACX,GACA2L,EAAW1L,YACX4L,EAAgBF,EAAYf,EAAYtI,EAAgBsJ,GACxDD,EAAWzL,aAIb2L,EAAkBA,CACpBtpG,EACAqoG,EACAtI,EACAsJ,IAEItJ,EACO/+F,EAAAA,aAAmBhB,EAAM49F,UAAW,GAAI2L,EAAWxJ,EAAgBsJ,GAAmBG,EAAcnB,IAExG,KAGLmB,EAAiBxpG,IACnB,MAAM,SAAEkG,EAAQ,oBAAEg8F,EAAmB,wBAAEC,GAA4BniG,EACnE,OAAIkG,EAEIlF,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK8gG,GACNnhG,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK6gG,GACLh8F,EAASpH,KAAI,CAAC2qG,EAAS19F,IACpB/K,EAAAA,cAACA,EAAAA,SAAc,CAACE,IAAK6K,GAAQ09F,OAM1C,MAGLF,EAAaA,CAACvpG,EAAyBqpG,KACzC,MAAM,iBAAEvJ,EAAgB,eAAEC,GAAmB//F,EAC7C,OAAI+/F,IAAmBsJ,EACZroG,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKy+F,GAAmBC,GAEjC,MAGL2J,EAA2B1pG,IAC7B,MAAM,2BAAEi/F,EAA0B,sBAAEC,EAAqB,2BAAEG,GAA+Br/F,EAC1F,OAAIk/F,EAEIl+F,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK49F,GACLC,EAAsBpgG,KAAI,CAACm/F,EAAUlyF,IAClC/K,EAAAA,cAACA,EAAAA,SAAc,CAACE,IAAK6K,GAChBkyF,EACAiB,GAAyBA,EAAsBnzF,EAAQ,IAAMszF,MAO3E,MAGLsK,EAAe3pG,IACjB,MAAM,MAAE0C,EAAK,eAAE+7F,GAAmBz+F,EAClC,OAAI0C,EAEI1B,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKo9F,GACNz9F,EAAAA,cAAA,UACK0B,EAAMi8F,YACNj8F,EAAMm8F,YAKhB,MAGL+K,EAAoB5pG,IACtB,MAAM,MAAE0C,EAAK,eAAE+7F,GAAmBz+F,EAClC,OAAI0C,EAEI1B,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKo9F,GACNz9F,EAAAA,cAAA,UAAK0B,EAAMo8F,aAIhB,MAGX,EA/J6E9+F,IAAQ,IAAA6pG,EACjF,MAAM,sBACFlP,EAAqB,SACrBtgF,EAAQ,WACRkuF,EAAU,kBACVC,EAAiB,wBACjBC,EAAuB,cACvBG,EAAa,SACb3yF,EAAQ,YACR4yF,EAAW,kBACXC,EAAiB,eACjBX,EAAc,WACdE,EAAU,kBACVrJ,EAAiB,cACjBsJ,EAAa,qBACbI,EAAoB,iCACpBC,EAAgC,aAChCh0F,EAAY,uBACZo0F,EAAsB,mBACtBC,GACAhpG,EACEqpG,EAAmE,QAAnDQ,EAAG7pG,EAAMoC,QAAQC,cAAcpE,eAAe0J,aAAK,IAAAkiG,OAAA,EAAhDA,EAAkDhiC,eAC3E,OAAI5xD,EAEIjV,EAAAA,cAACwQ,EAAAA,OAAMpQ,OAAAC,OAAA,GAAKs5F,GACP+O,EAAwB1K,GACxB2K,EAAYxB,GACZS,EACAC,EACAM,EAAwBL,EAAmBT,EAAYC,EAAee,GACvEroG,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK0nG,GAAyBC,GACnChoG,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKmnG,GACL7zF,EACA0F,GAEJkuF,GAKTvnG,EAAAA,cAACwQ,EAAAA,OAAMpQ,OAAAC,OAAA,GAAKs5F,GACR35F,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKqnG,GACL1J,GAAqB0K,EAAwB1K,GAC7CmJ,GAAkByB,EAAiBzB,IAExCnnG,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKsnG,GACLN,GAAcmB,EAAcnB,GAC7BrnG,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKonG,GACLN,GAAkBwB,EAAYxB,GAC9BS,EACAN,IAAkBe,GAAoBE,EAAWjB,GAClDtnG,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK0nG,GAAyBC,GACnChoG,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKmnG,GACL7zF,EACA0F,GAEJkuF,yGC/Dd,MAAMuB,IACGv+E,EAAAA,EAAAA,IAAA,CAAX2K,EAAAA,IAAU,kCAEC3K,EAAAA,EAAAA,IAAA,CAAX2K,EAAAA,IAAU,6CAEC3K,EAAAA,EAAAA,IAAA,CAAX2K,EAAAA,IAAU,iHCeH15B,EAUA6vF,kuBAVZ,SAAY7vF,GACRA,EAAA,0BACAA,EAAA,kBACAA,EAAA,kBACAA,EAAA,YAJJ,CAAYA,IAAAA,EAAc,KAU1B,SAAY6vF,GAIRA,EAAA,kBAKAA,EAAA,kBAKAA,EAAA,kBAdJ,CAAYA,IAAAA,EAAoC,KAoBzC,MAAM5vF,EAWTC,YAAmBC,EAAqBC,EAAcC,EAAyBC,EAAoBC,GAQ5F,KAAAC,YAAc,IAAM,+BAEpB,KAAAC,mBAAqB,IAAM,+BAE3B,KAAAC,cAAgB,IAAiB,OAXpCC,KAAKC,YAAcT,EACnBQ,KAAKE,gBAAkBT,EACvBO,KAAKN,eAAiBA,EACtBM,KAAKL,UAAYA,EACjBK,KAAKJ,UAAYA,GA2DzBO,eAAeC,EAAgBC,EAAyBC,EAA8BC,GAAmB,IAAAqsG,EACrG,MAAM1rG,GAAY6Y,EAAAA,EAAAA,IAAaxZ,EAAIO,gBACnC,IAAI+rG,EAA+C,CAC/CnsG,gBAAiBL,EAAMJ,aAAeI,EAAMJ,YAAYU,OAAS,EAAIN,EAAMJ,YAAc,GACzFW,QAAS,CACLC,WAAYN,EAAIO,eAAeC,YAAYC,UAC3CC,UAAWC,IAInB,IAAiC,QAA7B0rG,EAAArsG,EAAIO,eAAeoO,IAAI9H,cAAM,IAAAwlG,OAAA,EAA7BA,EAA+B3d,+BAAgCC,EAAqCC,QAAS,CAC7G,MAEM2d,EAjC2BC,EACrC3H,EACA4H,KAEA,GAAI5H,GAAiCA,EAA8BG,6CAC/D,MAAO,CACHp8F,gBAAiBi8F,EAA8BG,6CAC/C3Y,cAAeT,EAAAA,kBAAkBsB,UACjCZ,qBAAsBmgB,EAAY,OAAS,QAC3C1f,sBAAuB0f,EAAY,OAAS,QAC5Czc,SAAU,GACV0c,UAAW,EACXlT,MAAO,EACPjkE,oBAAqB,GACrB62D,mBAAoBX,EAAAA,qBAAqBkhB,YAmBfH,OAFcI,EAAAA,EAAAA,gCAA+B,CAAE5rG,cAAehB,KACnE,GAGrBusG,IACAD,EAAqBrmG,EAAAA,EAAA,GACdqmG,GAAqB,IACxBO,WAAY,CAACN,MAKzB,MAAMtsG,EAA2C,CAC7CC,sBAAuBosG,EACvB1rG,UAAWd,EAAMV,UACjByB,UAAWf,EAAMT,UACjBP,eAAgBgB,EAAMX,gBAGpB2B,QAA0BC,EAAAA,EAAAA,2BAC5B,CAAEC,cAAehB,EAAKiB,oBAAqB,CAAEC,OAAQ,CAAEC,IAAKrB,EAAMH,mBAClEM,GAGAa,GAAqBA,EAAkBV,OAAS,GAEhDU,EAAkBM,KACbC,GACIA,EAAKC,SAAWD,EAAKC,UAAWC,EAAAA,EAAAA,kBAAiBF,EAAKC,SAAUtB,EAAIO,eAAeC,aAAe,KAG3GT,EAAYyB,iBAAmBV,GAE/Bd,EAAIyB,UAAUC,MACV,4FAA4FzB,EAAenB,kBAKhH,MAMP,GANoD6C,EAAAA,EAAAA,IAA2B,CAC3EC,GAAI,iEACJC,OA5FGjC,eAA0CE,EAAyBE,GAEtE,IAAKF,IAAUA,EAAMJ,YACjB,MAAM,IAAIoC,MAAM,oEAGpB,MAAM/B,EAA+B,GAE/BgC,EAAsB,CAAClC,EAAgBC,EAAOC,EAAaC,IACjE,OAAOgC,QAAQC,IAAIF,GAAqBG,MAAK,IAClCnC,KAmFXD,MAtGiBqC,GACV,IAAIpD,0CCvDf,IAAIqD,EAMG,MAAMwF,EAAgCtF,IACzC,MAAM,YACFC,EAAW,WACXtD,EACAwF,kBACIG,WAAW,0BAAEiD,KAEjBvF,EAEEI,EAAgC,GACtCN,GAAUI,EAAAA,EAAAA,kBAAiB,QAASF,EAAMG,iBAAmB,IAE7DF,MAAAA,GAAAA,EAAanB,KAAIC,IACbqB,EAAWC,KAAKC,EAAcvB,EAAMiB,OAKxC,MAAO,CAAE0C,MAFSC,EAAa4C,EAA2B5I,GAE/B4D,KAAMH,IAG/BuC,EAAeA,CAAC4C,EAAmC5I,KACrD,MAAM6I,EAAgCD,GAChCE,EAAAA,EAAAA,QAAOF,EAA2B5I,GAClC,WAAWA,mBAEjB,OAAOqE,EAAAA,cAAA,MAAIC,UAAU,0CAA0CuE,IAG7DlF,EAAgBA,CAACvB,EAAwBiB,KAC3C,MAAM,WAAErD,EAAU,UAAEG,EAAS,UAAEC,EAAS,mBAAEytG,GAAuBxqG,EAE3D0F,EAAa8kG,EAAqBzrG,EAAK0B,MAAQ1B,EAAK0B,OAAS1B,EAAK0B,MAAMkF,MAAM,KAAKC,MACnFpF,EAAYkF,EACZA,EAAWhF,QAAQ,IAAIC,OAAO,IAAI7D,KAAc,MAAO,IAAI4D,QAAQ,IAAIC,OAAO,IAAI5D,KAAc,MAAO,IACvGgC,EAAK0B,OAAS1B,EAAK0B,MAAMC,QAAQ,IAAIC,OAAO,IAAI7D,KAAc,MAAO,IAAI4D,QAAQ,IAAIC,OAAO,IAAI5D,KAAc,MAAO,IAC3H+C,EAAQc,cAAcC,MAAQ9B,EAAK0B,MACnC,MAAMK,GAAYC,EAAAA,EAAAA,wBAAuBf,EAAMG,iBAAmBL,GAClE,OACIkB,EAAAA,cAAA,MAAIC,UAAU,wCAAwCC,IAAKnC,EAAKoC,IAC5DH,EAAAA,cAAA,IAAAI,OAAAC,OAAA,cAAeb,EAAWc,KAAMC,EAAcxC,EAAMpC,EAAYqD,IAAYc,GACvES,EAAcxC,EAAMpC,EAAYqD,IAAUwB,EAAoBkE,GAA0B,GAAI5I,EAAWC,MAMlHwE,EAAgBA,CAACE,EAA8B9E,EAAoBqD,IAC9DyB,GAAcA,EAAWN,GAAK0E,EAAiBpE,EAAWN,GAAIxE,EAAYqD,GAAS,GAGxF6F,EAAmBA,CAACvG,EAAY3C,EAAoBqD,KAA8C,IAAAyqG,EACpG,MAAM,cAAE/oG,EAAa,UAAEC,EAAS,eAAEmE,GAAmB9F,EAErD,IAAK2f,EAAAA,GAASC,UACV,MAAO,GAGX,MAAM8qF,EAAW,IAAI1qF,IAAIte,EAAe+M,OAAO7B,SAAStL,MAEpDK,GAAahF,GACb+tG,EAASzqF,aAAalI,IAAIpW,EAAWhF,GAGzC,MAAMqJ,EAAmBF,MAAAA,OAAc,EAAdA,EAAgBG,MAAKC,GACnCA,EAAS4wF,cAAgB3N,EAAAA,qBAAqBz5E,WAEnDtJ,EAAUJ,MAAAA,GAAwB,QAARykG,EAAhBzkG,EAAkBK,cAAM,IAAAokG,OAAA,EAAxBA,EAA0BxkG,MAAKlH,GACpCA,EAAKuH,kBAAoB03B,OAAOz3B,SAASjH,EAAI,MAGlDkH,EAAiBJ,GAAWM,KAAKC,UAAUC,EAAiB,CAACR,KAKnE,OAJII,GACAkkG,EAASzqF,aAAalI,IAAI,WAAYvR,GAGnCkkG,EAASppG,MAGdE,EAAsBA,CAACC,EAAoB3E,EAAmBC,KAChE,MAAMgF,EAAgBN,EACjBf,QAAQ,IAAIC,OAAO,IAAI7D,KAAc,MAAO,YAC5C4D,QAAQ,IAAIC,OAAO,IAAI5D,KAAc,MAAO,aAGjD,OAAOiE,EAAAA,cAAA,QAAMgB,yBAAyBC,EAAAA,EAAAA,IAAgBF,MAKpD8E,EAAwB,CAC1B,gBACA,uBACA,kBACA,qBACA,wBACA,YAOED,EAAoBV,IACtB,MAAMY,EAA4C,GAUlD,OARAZ,EAASa,SAAQX,IACb,MAAMY,EAAyC,GAC/CH,EAAsBE,SAAQE,IAC1BD,EAAkB3G,KAAK+F,EAAQa,OAEnCH,EAAmBzG,KAAK2G,MAGrBF,GClHEI,EAAiBlH,IAC1B,MAAM,UACF2B,EAAS,kBACTwF,EAAiB,gBACjBC,EAAe,gBACfE,EAAe,kBACfC,EAAiB,SACjBC,EAAQ,oBACRC,EAAmB,yBACnBC,EAAwB,MACxBC,EAAK,gBACLC,EAAe,gBACfC,EAAe,gBACfC,GACA9H,EAEE+H,EAnBqBR,CAAAA,GAAgDsrB,IAC3EtrB,EAAkBsrB,EAAM5qB,OAAOC,OAAS,KAkBlBupE,CAAsBlqE,GAEtCc,EAAajB,EAafpG,EAAAA,cAAA,SACIC,UAAU,0BACVqH,KAAK,OAAM,aACCT,EACZU,KAAM5G,EACN6G,YAAarB,EACbsB,IAAKnB,EACLoB,SAAUX,EACVG,MAAOP,IApBX3G,EAAAA,cAAA,SACIC,UAAU,0BACVqH,KAAK,OAAM,aACCT,EACZU,KAAM5G,EACN6G,YAAarB,EACbsB,IAAKnB,EACLoB,SAAUX,EACVY,UAAWnB,EACXU,MAAOP,IAeTiB,GAAiBnB,GAAuBzG,EAAAA,cAAC6H,EAAAA,OAAM,CAAC5H,UAAU,+BAA8B,aAAa6G,IAW3G,MAAO,CAAEtK,MAAO6K,EAAWU,UARvB/H,EAAAA,cAAC6H,EAAAA,OAAM,CACH5H,UAAYwG,EAAuD,uCAAjC,+BAAuE,aAC7FG,EACZoB,QAAStB,EACTY,KAAK,WAIwCW,UAAWL,IC/DpE,IAAI9I,EAMG,MAAMC,EAA+BC,IACxC,MAAM,YAAEC,EAAW,UAAEnD,EAAS,UAAEC,GAAciD,EAE9CF,GAAUI,EAAAA,EAAAA,kBAAiB,QAASF,EAAMG,iBAAmB,IAE7D,MAAMC,EAAgC,GAMtC,OAJAH,MAAAA,GAAAA,EAAanB,KAAIC,IACbqB,EAAWC,KAAKC,EAAcvB,EAAMjC,EAAWC,EAAWiD,OAGvD,CAAEO,KAAMH,IAGbE,EAAgBA,CAACvB,EAAwBjC,EAAmBC,EAAmBiD,KACjF,MAAMQ,EACFzB,EAAK0B,OAAS1B,EAAK0B,MAAMC,QAAQ,IAAIC,OAAO,IAAI7D,KAAc,MAAO,IAAI4D,QAAQ,IAAIC,OAAO,IAAI5D,KAAc,MAAO,IACzH+C,EAAQc,cAAcC,MAAQL,EAC9B,MAAMM,GAAYC,EAAAA,EAAAA,wBAAuBf,EAAMG,iBAAmBL,GAClE,OACIkB,EAAAA,cAAA,MAAIC,UAAU,uCAAuCC,IAAKnC,EAAKoC,IAC3DH,EAAAA,cAAA,IAAAI,OAAAC,OAAA,cAAeb,EAAWc,KAAMC,EAAcxC,EAAMjC,EAAWC,EAAWiD,IAAYc,GACjFS,EAAcxC,EAAMjC,EAAWC,EAAWiD,IACvCwB,EAAoBzC,EAAK0B,MAAQ1B,EAAK0B,MAAQ,GAAI3D,EAAWC,MAM3EwE,EAAgBA,CAACE,EAA8B3E,EAAmBC,EAAmBiD,KACvF,MAAM,cAAE0B,EAAa,UAAEC,GAAc3B,EAE/B4B,EAAiBH,EAAWhB,MAC7BC,QAAQ,IAAIC,OAAO,IAAI7D,KAAc,MAAO,IAC5C4D,QAAQ,IAAIC,OAAO,IAAI5D,KAAc,MAAO,IAEjD,IAAK4iB,EAAAA,GAASC,UACV,MAAO,GAGX,MAAM8qF,EAAW,IAAI1qF,IAAIte,EAAe+M,OAAO7B,SAAStL,MAKxD,OAJIK,GAAaC,GACb8oG,EAASzqF,aAAalI,IAAIpW,EAAWC,GAGlC8oG,EAASppG,MAGdE,EAAsBA,CAACC,EAAoB3E,EAAmBC,KAChE,MAAMgF,EAAgBN,EACjBf,QAAQ,IAAIC,OAAO,IAAI7D,KAAc,MAAO,YAC5C4D,QAAQ,IAAIC,OAAO,IAAI5D,KAAc,MAAO,aAGjD,OAAOiE,EAAAA,cAAA,QAAMgB,yBAAyBC,EAAAA,EAAAA,IAAgBF,MCtE7CmH,EAAkBlJ,IAC3B,MAAM,iBACFmJ,EAAgB,sBAChB6F,EAAqB,qBACrB3H,EAAoB,WACpB+B,EAAU,qBACVC,EAAoB,gBACpBjC,EAAe,yBACfM,EAAwB,iBACxBvH,GACAH,EACEF,GAAUI,EAAAA,EAAAA,kBAAiB,QAASC,EAAkBiJ,EAAY,IAClEE,GAAavI,EAAAA,EAAAA,wBAAuBZ,EAAkBL,GAE5D,OACIkB,EAAAA,cAAA,OAAKC,UAAWkI,GACZnI,EAAAA,cAAC6H,EAAAA,OAAMzH,OAAAC,OAAA,CACHJ,UAAU,kBAAiB,gBACZoG,EAAoB,aACvB2H,EACZhG,QAAStB,EACT6B,SAAUF,GACNC,IAEFlC,GACEpG,EAAAA,cAAA,QAAMC,UAAU,uBAAsB,kBACjCmI,kPCczB,IAAItJ,EACAK,EAMG,MAAM+B,EAA+BlC,IACxC,MAAM,YACFC,EAAW,UACXlD,EAAS,UACTD,EACAqF,kBACIC,SAAS,cAAEC,GACXC,WAAW,yBAAEC,IAChB,WACDC,EAAU,SACVC,GACAzC,EACEI,EAA4C,GAClDD,EAAmBH,EAAMG,iBACzBL,GAAUI,EAAAA,EAAAA,kBAAiB,QAASF,EAAMG,iBAAmB,IAE7DF,MAAAA,GAAAA,EAAanB,KAAIC,IACbqB,EAAWC,KAAKC,EAAcvB,EAAMjC,EAAWC,EAAWsF,EAAerC,EAAOwC,EAAYC,OAKhG,MAAO,CAAEC,MAFSC,EAAaJ,GAEJK,MAAOxC,IAGhCuC,EAAgBJ,IAClB,MAAMM,EAA+BN,GAAsD,iBAE3F,OAAOvB,EAAAA,cAAA,MAAIC,UAAU,yCAAyC4B,IAG5DvC,EAAgBA,CAClBvB,EACAjC,EACAC,EACAsF,EACArC,EACAwC,EACAC,KAC6B,IAAAkoG,EAC7B,MAAM7nG,EACF/D,EAAK0B,OAAS1B,EAAK0B,MAAMC,QAAQ,IAAIC,OAAO,IAAI7D,KAAc,MAAO,IAAI4D,QAAQ,IAAIC,OAAO,IAAI5D,KAAc,MAAO,IAEnHkG,EAAmB,QAAd0nG,EAAG5rG,EAAKmE,cAAM,IAAAynG,GAAO,QAAPA,EAAXA,EAAalqG,aAAK,IAAAkqG,OAAA,EAAlBA,EAAoBxnG,aAClC,MAAO,CACH5C,KAAMiB,EAAoBzC,EAAK0B,MAAQ1B,EAAK0B,MAAQ,GAAI3D,EAAWC,GACnEgG,UAAWC,EAAiBjE,EAAM+D,GAAoB,GAAI9C,GAC1DiD,OAAQw8D,EAAAA,iBAAiBC,kBAAkBz8D,IAAUG,EAAaH,EAAOA,EAAOR,EAAUD,EAAYxC,GACtGqD,UAAWC,IACXC,SAAUC,EAAazE,EAAMjC,EAAWC,EAAWsF,EAAerC,GAClEV,GAAIP,EAAKoC,KAIXmC,EAAgBA,KACX,CACHrC,UAAW,uCACXwC,IAAK,OAIPD,EAAeA,CACjBzE,EACAjC,EACAC,EACAsF,EACArC,KAEA,MACImC,kBAAkB,QAAEC,IACpBpC,EACEQ,EACFzB,EAAK0B,OAAS1B,EAAK0B,MAAMC,QAAQ,IAAIC,OAAO,IAAI7D,KAAc,MAAO,IAAI4D,QAAQ,IAAIC,OAAO,IAAI5D,KAAc,MAAO,IAEzH+C,EAAQc,cAAc8C,MAAQ3E,EAAKoC,GACnC,MAAML,GAAYC,EAAAA,EAAAA,wBAAuBZ,EAAmBL,GAG5D,4WAAA6D,CAAA,CACI1C,UAAW,uCACXwC,IAAK,IACL,aAAc,GAAGjD,KALA4B,EAAQ6kB,iBAAiBC,eAAenoB,EAAKmE,OAAQzC,MAAO0C,gBAM7E7B,KAAMC,EAAcxC,EAAMjC,EAAWC,EAAWsF,IAC7CvB,IAILS,EAAgBA,CAACE,EAA8B3E,EAAmBC,EAAmBsF,KACvF,MAAMT,EAAiBH,EAAWhB,MAC7BC,QAAQ,IAAIC,OAAO,IAAI7D,KAAc,MAAO,IAC5C4D,QAAQ,IAAIC,OAAO,IAAI5D,KAAc,MAAO,IACjD,OAAO0E,EAAWhB,OAASgB,EAAWN,IAChCyC,EAAAA,EAAAA,uBAAsBhC,EAAgBH,EAAWN,GAA0BkB,OAAewB,GAC1F,IAGJrC,EAAsBA,CAACC,EAAoB3E,EAAmBC,KAChE,MAAMgF,EAAgBN,EACjBf,QAAQ,IAAIC,OAAO,IAAI7D,KAAc,MAAO,YAC5C4D,QAAQ,IAAIC,OAAO,IAAI5D,KAAc,MAAO,aAEjD,OAEIiE,EAAAA,cAAA,QAAMC,UAAU,sDAAsDe,yBAAyBC,EAAAA,EAAAA,IAAgBF,MAIjHqB,EAAeA,CACjBU,EACAC,EACAtB,EACAD,EACAxC,KACoB,IAAA4qG,EACpB,MACIzoG,kBAAkB,QAAEC,IACpBpC,EAEJ,OACIgB,EAAAA,cAACgD,EAAAA,eAAc,CACX1E,GAAImD,EACJwB,SAAUzB,EACVJ,QAASA,EACT8B,KAAM,CACFjB,MAAO,CACHkB,wBAAyBL,EACzBM,UAAWL,IAGnB9C,UAAU,6CACVysB,cAA8B,QAAjBk9E,EAAE5qG,EAAMsC,iBAAS,IAAAsoG,OAAA,EAAfA,EAAiBl9E,iBAKtC1qB,EAAmBA,CAACvB,EAA8BqB,EAAiB9C,KACrE,MACImC,kBACIC,SACIiC,SAAS,aAAEC,IAEfC,QAAQ,cAAEC,KAEdxE,EAKJ,GAJIwE,IACAA,EAAcC,iBAAkB,IAG/BhD,IAAeA,EAAWzC,SAE3B,OADAgB,EAAMb,UAAUC,MAAM,2DACf,KAaX,OACI4B,EAAAA,cAACmE,EAAAA,GAAK,CACFlH,eAAgB+B,EAAMmC,iBAAiBC,QAAQC,cAAcpE,eAC7D6E,QAASA,EACT7B,UAAU,2CACVmE,IAAK3D,EAAWzC,SAChBsF,aAAcA,EACdE,cAAeA,GAjBsB,CACzCG,UAAW,CACPC,GAAI,CAAEC,EAAG,gBAAiBC,EAAG,EAAGC,EAAG,GACnCC,GAAI,CAAEH,EAAG,gBAAiBC,EAAG,EAAGC,EAAG,GACnCE,GAAI,CAAEJ,EAAG,gBAAiBC,EAAG,EAAGC,EAAG,IAEvCG,UAAU,EACVT,iBAAiB,GAWbY,oBAAoB,ilBCjKhC,MAAMmE,WAAexI,EAAAA,UAkCjBtE,YAAmBsD,GACfyJ,MAAMzJ,GAxBO,KAAAlD,UAAoB,IAEpB,KAAAC,UAAoB,IAEpB,KAAA2M,SAAmB,IAgTnB,KAAAmhG,eAAiB,KAC9B,MAAMC,EAAc3tG,KAAK6C,MAAMsC,UAAUyoG,gCACzC,OAAO/pG,EAAAA,cAACgqG,EAAAA,EAAO,CAAC/pG,UAAU,iCAAiC6H,MAAOgiG,EAAajzB,KAAMozB,EAAAA,EAAYC,OAAQC,cAAc,WAI1G,KAAAxhG,gBAAmB3B,IAChC,MAAM,YAAE/H,GAAgB9C,KAAKyM,MAEzB3J,GAAeA,EAAYf,kBAAuD,OAAnC8I,EAAEC,OAAO4B,QAAQ,eAChE1M,KAAK2M,0BAII,KAAAC,OAAU/B,IACvB,MAAM,YAAE/H,GAAgB9C,KAAKyM,MAEzB3J,GAAeA,EAAYf,kBAAoB8I,EAAEgC,UAAYC,EAAAA,SAASC,OACtE/M,KAAK2M,yBACE3M,KAAKyM,MAAMvC,sBAAwBW,EAAEgC,UAAYC,EAAAA,SAASC,QAC7D/M,KAAKyM,MAAMvC,sBACXlK,KAAKgN,SAAS,CAAE9C,sBAAsB,IAMrClK,KAAKiN,cAAcC,SAAWlN,KAAKiN,cAAcC,QAAQC,SAAUtC,EAAEC,SACrE9K,KAAKoN,qBAAqBF,SAAWlN,KAAKoN,qBAAqBF,QAAQC,SAAUtC,EAAEC,UAGpFhI,GAAeA,EAAYf,kBAC3B/B,KAAK2M,yBAGL3M,KAAKyM,MAAMvC,sBACXlK,KAAKgN,SAAS,CAAE9C,sBAAsB,MAKjC,KAAAyC,uBAAyB,KACtC,MACI1H,SAAS,cAAEC,GACX6B,MAAM,YAAEsG,IACRrN,KAAK6C,MAEL7C,KAAKmK,gBAAgB+C,SAAWlN,KAAKmK,gBAAgB+C,QAAQnC,MAAMpK,OAAS,IAC5E0M,EAAY7N,WAAa,GACzB6N,EAAYC,sBAAwB,GACpCD,EAAYE,2BAA6B,GACzCrI,GAAgBA,EAAcsI,QAAOC,EAAAA,EAAAA,IAAuBJ,GAAcA,GAC1ErN,KAAKmK,gBAAgB+C,QAAQnC,MAAQ,IAGzC/K,KAAKgN,SAAS,CAAExN,WAAY,GAAIsD,iBAAa4D,EAAWiC,oBAAgBjC,KA4D3D,KAAAgH,mBAAsBlD,MAC9BA,GAASA,EAAM7J,QAAUX,KAAKqK,WAC/BrK,KAAKgN,SAAS,CAAExN,WAAYgL,IAG5BxK,KAAK2N,qBACL3N,KAAK2N,oBAAoBC,SAG7B,MAAM,QACF3I,EACA8B,MAAM,YAAEsG,IACRrN,KAAK6C,MAET,GAAIoC,EAAS,CACT,GAAIuF,GAASA,EAAM7J,OAAS,EAAG,CAC3B,GAAI6J,EAAM7J,OAASX,KAAKqK,SACpB,OAGA6N,EAAAA,gBAAgBC,YAAYnY,KAAKgO,sBACjChO,KAAKiuG,iBAAiBzjG,GAG1B6C,EAAY7N,WAAagL,OAEzBxK,KAAKgN,SAAS,CAAElK,iBAAa4D,EAAWiC,oBAAgBjC,IACxD2G,EAAY7N,WAAa,GAE7ByF,EAAQC,cAAcsI,QAAOC,EAAAA,EAAAA,IAAuBJ,GAAcA,KA2BzD,KAAA4B,cACbpE,IAEA,MACIzD,QAAQ,oBAAEkD,GACVrF,SAAS,cACLC,EACAgK,KACI9H,QAAQ,2BAAEmG,MAGlBvN,KAAK6C,MAEH2H,EAAQxK,KAAKmK,gBAAgB+C,SAAWlN,KAAKmK,gBAAgB+C,QAAQnC,MAG3E,GAFAF,EAAEsE,kBAEG3E,GAAUA,GAA0B,IAAjBA,EAAM7J,QAAiB2J,EAC3CtK,KAAKmK,iBAAmBnK,KAAKmK,gBAAgB+C,SAAWlN,KAAKmK,gBAAgB+C,QAAQkC,YAClF,CACH,MAAM5K,EAAY+I,GAA8B,IAC1C8B,EAAYrP,KAAKsP,oBAAmBC,EAAAA,EAAAA,IAAW,SAAUrK,IAAkB,GAAIsF,EAAOhG,GAC5FgL,SAASC,SAAStL,KAAOkL,IAIhB,KAAAK,0BAA4B,KACzC,MAAM,qBAAExF,EAAoB,YAAEpH,GAAgB9C,KAAKyM,MAE9CvC,GAOGpH,GAAeA,EAAYf,kBAC3B/B,KAAK2M,yBAET3M,KAAKgN,SAAS,CAAE9C,sBAAsB,KATtClK,KAAKgN,SAAS,CACV9C,sBAAsB,EACtB1K,WAAY,GACZmQ,gBAAgB,KAUX,KAAAu+F,2BAA6B,KAC1C,MAAM,YAAEprG,GAAgB9C,KAAKyM,MACvB3J,GAAeA,EAAYf,mBAC7B/B,KAAK2M,yBACL3M,KAAKgN,SAAS,CAAE9C,sBAAsB,MAI7B,KAAAoF,mBAAqB,CAAC5K,EAAe8F,EAAeoF,KACjE,IAAK4S,EAAAA,GAASC,UACV,MAAO,GAGX,MAAM8qF,EAAW,IAAI1qF,IAAIne,EAAO4M,OAAO7B,SAAStL,MAKhD,OAJIyL,GAAOpF,GACP+iG,EAASzqF,aAAalI,IAAIhL,EAAKpF,GAG5B+iG,EAASppG,MAGH,KAAAiK,2BAA8ByB,IAC3C,GAAsD,OAAlD7P,KAAKmQ,iCAAiCjD,QAAkB,CACxD,MAAMkD,EAAiBpQ,KAAKmQ,iCAAiCjD,QACvDmD,EAAsBrQ,KAAK6C,MAAMsC,UAAUmL,wBAC3CC,EAAoBvQ,KAAK6C,MAAMsC,UAAUqL,wBAI/C,OAHAJ,EAAeK,UACXZ,GAAUA,EAAO9N,kBAAoB8N,EAAO9N,iBAAiBpB,OAAS,EAAI0P,EAAsBE,EACpGH,EAAeM,aAAa,YAAa,aAClCN,EAAeK,UAE1B,MAAO,IA/gBPzQ,KAAKmK,gBAAkBtG,EAAAA,YACvB7D,KAAKkM,qBAAuBrI,EAAAA,YAC5B7D,KAAKmQ,iCAAmCtM,EAAAA,YACxC7D,KAAKoN,qBAAuBvJ,EAAAA,YAC5B7D,KAAKiN,cAAgBpJ,EAAAA,YACrB7D,KAAKyM,MAAQ,CACTvC,sBAAsB,EACtB1K,WAAY,GACZmR,0BAA2B,kCAC3BC,0BAA2B,kCAC3BC,2BAA4B,mCAC5B/N,iBAAa4D,EACbiC,oBAAgBjC,EAChByH,qBAAsB,GACtBwB,gBAAgB,EAChBw+F,sBAAsB,GAE1BnuG,KAAKqK,SACArK,KAAK6C,MAAMoC,SACRjF,KAAK6C,MAAMoC,QAAQiK,KACnBlP,KAAK6C,MAAMoC,QAAQiK,IAAI9H,QACvBpH,KAAK6C,MAAMoC,QAAQiK,IAAI9H,OAAO0J,sBAClC,GAEJ9Q,KAAKgO,oBAAsB,GAC3BhO,KAAKE,gBAAkBF,KAAK6C,MAAMuE,QAAUpH,KAAK6C,MAAMuE,OAAOlH,gBAAkBF,KAAK6C,MAAMuE,OAAOlH,gBAAkB,EACpHF,KAAKgR,gBAAkB,kBACvBhR,KAAKgM,iBAAmB,mBACxBhM,KAAKgD,kBAAmBiO,EAAAA,EAAAA,oBACpBjR,KAAK6C,MAAMoC,QAAQiC,QAAQgK,kBAC3BlR,KAAK6C,MAAMsO,aACXnR,KAAK6C,MAAMb,WAGfhC,KAAKouG,uBAGF,0BACH5+F,SAAS4B,MAAQ5B,SAAS4B,KAAKC,iBAAiB,YAAarR,KAAKwM,iBAClE8E,QAAUA,OAAOD,iBAAiB,QAASrR,KAAK4M,QAG7C2E,uBACH/B,SAAS4B,MAAQ5B,SAAS4B,KAAKI,oBAAoB,YAAaxR,KAAKwM,iBAAiB,GACtF8E,QAAUA,OAAOE,oBAAoB,QAASxR,KAAK4M,QAAQ,GAGxD6E,qBACH,MACIrK,QAAQ,gBAAE6C,IACVjK,KAAK6C,OACH,qBAAEqH,EAAoB,eAAEyF,GAAmB3P,KAAKyM,MAEjDzM,KAAK6C,MAAMoC,QAAQiC,QAAQwK,OAAOC,YAC9B1H,GAAmBC,EACpBlK,KAAKmK,iBAAmBnK,KAAKmK,gBAAgB+C,SAAWlN,KAAKmK,gBAAgB+C,QAAQkC,QAC7EO,GACR3P,KAAKkM,sBAAwBlM,KAAKkM,qBAAqBgB,SAAWlN,KAAKkM,qBAAqBgB,QAAQkC,SAKzGwX,sBAAsBC,EAAsCC,GAC/D,OAAI9mB,KAAKyM,QAAUqa,GAAa9mB,KAAK6C,QAAUgkB,EAO5CjV,SAAM,IAAAy8F,EAAAC,EAAAC,EACT,MAAM,QACFtpG,EACAE,WAAW,WAAE8G,EAAU,sBAAE4F,EAAqB,mBAAEC,EAAkB,mBAAEC,EAAkB,mBAAEC,GACxF5K,QAAQ,gBAAE6C,EAAe,oBAAEK,EAAmB,sBAAE2H,EAAqB,2BAAEu8F,EAA0B,UAAE1qG,EAAY,KAC/G9D,KAAK6C,OAEH,qBACFqH,EAAoB,WACpB1K,EAAU,0BACVmR,EAAyB,0BACzBC,EAAyB,2BACzBC,EAA0B,YAC1B/N,EAAW,eACX6F,EAAc,qBACdwlG,GACAnuG,KAAKyM,MAEHjI,EAAaS,GAAWA,EAAQiK,KAAOjK,EAAQiK,IAAI9H,QAAUnC,EAAQiK,IAAI9H,OAAOmG,4BAA+B,IAC/GhJ,GAAgBgL,EAAAA,EAAAA,IAAW,SAAUtK,GAAWA,EAAQC,gBAAkB,GAC1EmK,EAAYrP,KAAKsP,mBAAmB/K,EAAe/E,EAAYgF,GAC/DwF,EAAoBiI,GAAyBA,EAAsBtR,OAAS,EAAIsR,EAAwB,qBAExGC,EAAqBpP,MAAAA,GAA6B,QAAlBurG,EAAXvrG,EAAaf,wBAAgB,IAAAssG,OAAA,EAA7BA,EAA+Br+F,QACtD1L,GAAcA,EAAWjF,iBAAmBA,EAAe8S,SAAW7N,EAAWjF,iBAAmBA,EAAe+S,OAEjHC,EAAqBvP,MAAAA,GAA6B,QAAlBwrG,EAAXxrG,EAAaf,wBAAgB,IAAAusG,OAAA,EAA7BA,EAA+Bt+F,QACtD1L,GAAcA,EAAWjF,iBAAmBA,EAAe6Q,UAEzDrH,EAAmBF,MAAAA,OAAc,EAAdA,EAAgBG,MAAKG,GACnCA,EAAQ0wF,cAAgB3N,EAAAA,qBAAqBz5E,WAElDD,EAAsBxP,MAAAA,GAA6B,QAAlByrG,EAAXzrG,EAAaf,wBAAgB,IAAAwsG,OAAA,EAA7BA,EAA+Bv+F,QAAO1L,IAAa,IAAAgpG,EAC3E,GAAIhpG,EAAWjF,iBAAmBA,EAAekT,SAC7C,OAAO,EAEX,MAAMtJ,EAAUJ,MAAAA,GAAwB,QAARykG,EAAhBzkG,EAAkBK,cAAM,IAAAokG,OAAA,EAAxBA,EAA0BxkG,MAAKlH,IAAO,IAAA6sG,EAClD,MAAO,GAAuB,QAAvBA,EAAG7sG,EAAKuH,uBAAe,IAAAslG,EAAAA,EAAI,MAAQnqG,EAAWN,MAGzD,OAAQs+D,EAAAA,iBAAiBC,kBAAkBt5D,MAGzCuJ,EAAShM,GAAAA,GAAA,GACPxG,KAAK6C,OAAmC,IAE5CwJ,OAAQ,CACJoG,YAAazS,KAAK6C,MAClBiB,UAAW,GAAG4O,GAAAA,CAAW,YAAa5O,MAAcwG,EAAsB,YAAc,iBAE5FqI,qBAAsB,CAClBrM,IAAK,MACLxC,UAAW,iCACX,YAAa,YACbwH,IAAKtL,KAAKmQ,kCAEdyC,yBAA0B5S,KAAKyM,MAAM0B,qBACrC3O,WAAYQ,KAAKyM,MAAMjN,WACvBqT,YAAa,CACTvH,IAAKtL,KAAKoN,qBACVtJ,UAAW,0BAEfgP,eAAgB,CACZhP,UAAW6M,GAEfoC,eAAgB,CACZjP,UAAW8M,GAEfoC,gBAAiB,CACblP,UAAW+M,GAEfoC,WAAY,CACRnP,UAAW,GAAG9D,KAAKgR,mBAAmB9G,EAAuB,UAAY,aAE7EgJ,YAAa,CACT5M,IAAK,OACLgF,IAAKtL,KAAKiN,cACVnJ,UAAW,wBACX,aAAc,SACdsH,KAAM,aACN+H,KAAM,SACN/Q,OAAQiN,EACR+D,aAAc,MACdC,SAAUrT,KAAKiP,eAEnBqE,UAAW,CACPhN,IAAK,KACLxC,UAAW4O,GAAAA,CAAW,wCAAyC5O,IAEnEyP,UAAW,CACPjN,IAAK,KACLxC,UAAW4O,GAAAA,CAAW,wCAAyC5O,IAEnE0P,WAAY,CACRlN,IAAK,KACLxC,UAAW4O,GAAAA,CAAW,yCAA0C5O,IAEpE6H,MAAOI,EAAe,CAClB7B,qBAAAA,EACA8B,iBAAkB,GAAGhM,KAAKgM,oBAAoB9B,EAAuB,UAAY,YACjF+B,WAAAA,EACA4F,sBAAAA,EACA3F,qBAAsBlM,KAAKkM,qBAC3BjC,gBAAAA,EACAM,yBAA0BvK,KAAK0P,0BAC/B1M,iBAAkBhD,KAAKgD,mBAE3ByQ,KAAM1J,EAAc,CAChBU,gBAAiBqH,EACjBpH,gBAAiBqH,EACjBpH,gBAAiBqH,EACjB/H,gBAAAA,EACAE,gBAAiBnK,KAAKmK,gBACtBG,oBAAAA,EACAF,kBAAmBpK,KAAK0N,mBACxBnD,yBAA0BvK,KAAK0P,0BAC/BrF,SAAUrK,KAAKqK,SACf7F,UAAAA,EACAwF,kBAAAA,EACAQ,MAAOhL,IAEXkU,mBACIlU,GACAA,EAAWmB,OAAS,IACnBwtG,GAAyBj8F,GAAsBgG,EAAAA,gBAAgBC,YAAYjG,IACtEtP,EAA4B,CACxB+N,0BAAAA,EACApM,cAAAA,EACAC,UAAAA,EACA7E,UAAWK,KAAKL,UAChBC,UAAWI,KAAKJ,UAChBoF,iBAAkBhF,KAAK6C,MACvBrD,WAAAA,EACAsD,YAAaoP,EACblP,iBAAkBhD,KAAKgD,wBAE3B0D,EACViN,mBACInU,GACAA,EAAWmB,OAAS,IACnBwtG,GAAyB97F,GAAsB6F,EAAAA,gBAAgBC,YAAY9F,IACtEtN,EAA4B,CACxB6L,0BAAAA,EACArM,cAAAA,EACAC,UAAAA,EACA7E,UAAWK,KAAKL,UAChBC,UAAWI,KAAKJ,UAChBoF,iBAAkBhF,KAAK6C,MACvBrD,WAAAA,EACAsD,YAAauP,EACbrQ,UAAWhC,KAAK6C,MAAMb,UACtBqD,WAAYrF,KAAK6C,MAAMiE,SACvBxB,SAAUtF,KAAK6C,MAAMV,GACrBa,iBAAkBhD,KAAKgD,iBACvBmC,UAAWnF,KAAK6C,MAAMsC,iBAE1BuB,EACVkN,oBACIpU,GACAA,EAAWmB,OAAS,IACnBwtG,GAAyB77F,GAAuB4F,EAAAA,gBAAgBC,YAAY7F,IACvEnK,EAA6B,CACzB0I,2BAAAA,EACAtM,cAAAA,EACAC,UAAAA,EACA7E,UAAWK,KAAKL,UAChBC,UAAWI,KAAKJ,UAChBoF,iBAAkBhF,KAAK6C,MACvBrD,WAAAA,EACAsD,YAAawP,EACb3J,eAAAA,EACA3F,iBAAkBhD,KAAKgD,iBACvBqqG,mBAAoBmB,SAExB9nG,EACVmN,UAAW,CACPtJ,yBAA0BvK,KAAK0P,0BAC/Bg/F,0BAA2B1uG,KAAKkuG,4BAEpChkG,qBAAsBlK,KAAKyM,MAAMvC,qBACjCikG,qBAAAA,EACAQ,cAAe3uG,KAAK0tG,mBAGxB,OAAO1tG,KAAK6C,MAAMiR,WAAWtB,GAGzB47F,uBACJ,MAAM3/F,EAAkBzO,KAAK6C,MAAMuE,OAAO2J,wBAEpCjO,EAAcoV,EAAAA,gBAAgB02F,OAAO12F,EAAAA,gBAAgBqvD,YAAY94D,IACvE,IAAKyJ,EAAAA,gBAAgBC,YAAYrV,GAM7B,YALA9C,KAAKgO,oBAAsB,CACvB,CAAE3O,eAAe,WACjB,CAAEA,eAAe,WACjB,CAAEA,eAAe,oBAKzB,MAAMwvG,EAAmB/rG,EAAYkN,QAAO1L,GAAcA,EAAWjF,iBACjE6Y,EAAAA,gBAAgBC,YAAY02F,GAC5B7uG,KAAKgO,oBAAsB6gG,EAI/B7uG,KAAKgO,oBAAsB,GAiEvB,4BAA4B8gG,EAAkCtkG,GAClE,IACI,MAAMnJ,QAA0ByM,EAC5B,IAAIxO,EAAiBkL,EAAOxK,KAAKE,gBAAiBF,KAAK+N,qBAAsB/N,KAAKL,UAAWK,KAAKJ,WAClGI,KAAK6C,MAAMoC,QAAQC,eAEvB,GAAI4pG,IAA6B9uG,KAAK8uG,yBAClC,OAEJ,OAAOztG,EACT,MAAOY,GACL,GAAI6sG,IAA6B9uG,KAAK8uG,yBAClC,OAKJ,OAHA9uG,KAAKgN,SAAS,CAAElK,iBAAa4D,EAAWiC,oBAAgBjC,EAAWyH,qBAAsBnO,KAAKoO,+BAC9FpO,KAAK6C,MAAMb,UAAUsM,UAAUrM,QAC/BjC,KAAK6C,MAAMb,UAAUuM,MAAM,uCAK3B,4BAA4BugG,EAAkCtkG,EAAe1H,GACjF,IACI,MAAMiG,QAAiB/I,KAAKkO,mBAAmB1D,GAC/C,GAAIskG,IAA6B9uG,KAAK8uG,yBAClC,OAEJ9uG,KAAKgN,SAAS,CACVlK,YAAAA,EACA6F,eAAgBI,EAChBoF,qBAAsBnO,KAAKoO,2BAA2BtL,GACtDqrG,sBAAsB,IAE5B,MAAOlsG,GACL,GAAI6sG,IAA6B9uG,KAAK8uG,yBAClC,OAEJ9uG,KAAKgN,SAAS,CAAElK,YAAAA,EAAa6F,oBAAgBjC,EAAWyH,qBAAsBnO,KAAKoO,2BAA2BtL,KAC9G9C,KAAK6C,MAAMb,UAAUsM,UAAUrM,GAC/BjC,KAAK6C,MAAMb,UAAUuM,MAAM,mCAI3B0/F,iBAAiBzjG,GACrBxK,KAAK2N,oBAAsBE,GAAAA,EAAS1N,UAChCH,KAAKgN,SAAS,CAAEmhG,sBAAsB,IACtC,MAAMW,EAA2BC,EAAAA,OAAOC,KAAKC,eAC7CjvG,KAAK8uG,yBAA2BA,EAChC,MAAMztG,QAA0BrB,KAAKkvG,sBAAsBJ,EAA0BtkG,SAC/ExK,KAAKmvG,sBAAsBL,EAA0BtkG,EAAOnJ,KACnErB,KAAKuM,UAERiC,YAAW,KACPxO,KAAK2N,wBACN,GAoCCI,qBAIJ,OAH0C/N,KAAKgO,oBAAoBrM,KAC/DgN,GAAsBA,EAAmBtP,eAAgBwP,OAAO,GAAGC,cAAgBH,EAAmBtP,eAAgB0P,MAAM,KAEjGC,KAAK,KAGhC,yBAAyBxP,GAC7B,MAAQ0F,cAAe3E,GAAQP,KAAK6C,MAAMoC,QACpC/D,GAAY6Y,EAAAA,EAAAA,IAAaxZ,EAAIO,gBAEnC,OADAkZ,EAAAA,EAAAA,mBAAkB9Y,GACXkuG,EAAAA,oBAAAA,8BACH,CAAE7tG,cAAehB,GACjB,CACIG,gBAAiBlB,EACjBoB,QAAS,CACLC,WAAYN,EAAIO,eAAeC,YAAYC,UAC3CC,UAAWC,MAmF/B,oGCxnBA,MAsCM8S,EAAcA,CAACP,EAA4BR,EAAwBC,IAEjErP,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK+O,GACNpP,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKgP,GACLO,EAAKpT,MACLoT,EAAK7H,UACL6H,EAAK3H,YAMhBoI,EAA4BA,CAC9BpB,EACAQ,EACApB,EACAi8F,EACAQ,IAGIz8F,GACIrO,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK4O,GACNjP,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKoP,GACL66F,GAAwBQ,GACvBR,GACEj8F,EAAmB9O,KAAKzB,KAAIyB,GACjBA,MAQ7B+Q,EAA4BA,CAC9BpB,EACAQ,EACAlB,EACA87F,EACAQ,IAGIt8F,GACIxO,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK6O,GACNlP,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKqP,GACLlB,EAAmB9M,MACnB4oG,GAAwBQ,GACvBR,GACE97F,EAAmB5M,MAAM9D,KAAI,CAACC,EAAMgN,IAE5B/K,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKtC,EAAKsE,UAAS,CAAEnC,IAAKnC,EAAKO,IAAMyM,IACtC/K,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKtC,EAAKwE,UACVxE,EAAKgE,UACLhE,EAAKwB,KACLxB,EAAKkE,YAWxCsO,EAA6BA,CAC/BpB,EACAQ,EACAlB,EACA67F,EACAQ,IAGIr8F,GACIzO,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK8O,GACNnP,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKsP,GACLlB,EAAoB/M,MACpB4oG,GAAwBQ,GACvBR,GACE77F,EAAoBlP,KAAKzB,KAAIyB,GAClBA,MAQnC,EA9H+CP,IAC3C,MAAM,OACFwJ,EAAM,qBACNsG,EAAoB,yBACpBC,EAAwB,WACxBpT,EAAU,YACVqT,EAAW,eACXC,EAAc,eACdC,EAAc,gBACdC,EAAe,UACfM,EAAS,UACTC,EAAS,WACTC,EAAU,KACVC,EAAI,oBACJG,EAAmB,mBACnBF,EAAkB,mBAClBC,EAAkB,WAClBV,EAAU,YACVC,EAAW,MACXvH,EAAK,qBACLwiG,EAAoB,cACpBQ,GACA9rG,EAEJ,OACIgB,EAAAA,cAACwQ,EAAAA,OAAMpQ,OAAAC,OAAA,GAAKmI,GACPV,EACAqI,EAAYP,EAA8BR,EAAYC,GACvDrP,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAK2O,GACLrT,GAAcA,EAAWmB,OAAS,EAAIkD,EAAAA,cAACoQ,EAAAA,KAAIhQ,OAAAC,OAAA,GAAKyO,GAAuBC,GAAmC,GAC1GsB,EAA0BpB,EAAgBQ,EAAWI,EAAoBy6F,EAAsBQ,GAC/Fx6F,EAA0BpB,EAAgBQ,EAAWI,EAAoBw6F,EAAsBQ,GAC/Fv6F,EAA2BpB,EAAiBQ,EAAYI,EAAqBu6F,EAAsBQ,+qBCrBpH,MAAMU,UAAwBxrG,EAAAA,cAC1BtE,YAAYsD,GACRyJ,MAAMzJ,GAEN7C,KAAKsvG,oBAAsBtvG,KAAKsvG,oBAAoBlrE,KAAKpkC,MAGtD4R,SACH,MAAM29F,EAAS/oG,EAAAA,EAAA,GACRxG,KAAK6C,OAAK,IACbwsG,gBAAiB,CACb58F,YAAazS,KAAK6C,MAClBiB,UAAW,wBAEf0rG,uBAAwBxvG,KAAKsvG,wBAGjC,OAAOtvG,KAAK6C,MAAMiR,WAAWy7F,GAGzBD,sBACJ,MAAMrnG,EAAMjI,KAAK6C,MAAMuE,OAAOqoG,KAC9B,GAAIjtF,EAAAA,GAASC,UACT,OAAQziB,KAAK6C,MAAMuE,OAAOsoG,aACtB,IAAI,WACA,OACI7rG,EAAAA,cAAC8rG,EAAAA,qBAAoB,CACjBD,YAAaE,EAAAA,YAAYC,SACzBC,QAAStgG,SAASqT,IAClB5d,QAASjF,KAAKiF,QACd9C,GAAI,GAAGnC,KAAK6C,MAAMV,cAClB2E,SAAU9G,KAAK6C,MAAMiE,SACrBC,KAAM,GACNkB,IAAKA,IAGjB,IAAI,UACA,OACIpE,EAAAA,cAAC8rG,EAAAA,qBAAoB,CACjBD,YAAaE,EAAAA,YAAYG,QACzBD,QAAStgG,SAASqT,IAClB5d,QAASjF,KAAKiF,QACd9C,GAAI,GAAGnC,KAAK6C,MAAMV,aAClB2E,SAAU9G,KAAK6C,MAAMiE,SACrBC,KAAM,GACNkB,IAAKA,IAGjB,IAAI,YACA,OACIpE,EAAAA,cAAC8rG,EAAAA,qBAAoB,CACjBD,YAAaE,EAAAA,YAAYI,UACzBF,QAAStgG,SAASqT,IAClB5d,QAASjF,KAAKiF,QACd9C,GAAI,GAAGnC,KAAK6C,MAAMV,eAClB2E,SAAU9G,KAAK6C,MAAMiE,SACrBC,KAAM,GACNkB,IAAKA,IAGjB,IAAI,WACA,OACIpE,EAAAA,cAAC8rG,EAAAA,qBAAoB,CACjBD,YAAaE,EAAAA,YAAYK,SACzBH,QAAStgG,SAASqT,IAClB5d,QAASjF,KAAKiF,QACd9C,GAAI,GAAGnC,KAAK6C,MAAMV,cAClB2E,SAAU9G,KAAK6C,MAAMiE,SACrBC,KAAM,GACNkB,IAAKA,IAGjB,IAAI,OACA,OACIpE,EAAAA,cAAC8rG,EAAAA,qBAAoB,CACjBD,YAAaE,EAAAA,YAAYM,KACzBJ,QAAStgG,SAASqT,IAClB5d,QAASjF,KAAKiF,QACd9C,GAAI,GAAGnC,KAAK6C,MAAMV,UAClB2E,SAAU9G,KAAK6C,MAAMiE,SACrBC,KAAM,GACNkB,IAAKA,IAGjB,QACI,OAAO,KAGnB,OAAO,MAIf,qICxGO,MAAMkoG,EAA2DttG,IACpE,MAAM,gBAAEwsG,EAAe,uBAAEG,GAA2B3sG,EAEpD,OAAK2sG,EAIE3rG,IAAAA,cAACwQ,EAAAA,OAAMpQ,OAAAC,OAAA,GAAKmrG,GAAkBG,IAHjC3sG,EAAMoC,QAAQjD,UAAUC,MAAM,iDACvB,OAKf","sources":["webpack://msdyn365.commerce.online/./src/modules/smwe-search/actions/get-auto-suggest-suggestions.ts?511b","webpack://msdyn365.commerce.online/./src/modules/smwe-search/components/smwe-search.keywordsuggest.tsx?378f","webpack://msdyn365.commerce.online/./src/modules/smwe-search/components/smwe-search.productsuggest.tsx?3dda","webpack://msdyn365.commerce.online/./src/modules/smwe-search/components/smwe-search.categorysuggest.tsx?c893","webpack://msdyn365.commerce.online/./src/modules/smwe-search/components/smwe-search.form.tsx?b365","webpack://msdyn365.commerce.online/./src/modules/smwe-search/components/smwe-search.label.tsx?6de6","webpack://msdyn365.commerce.online/./src/modules/smwe-search/smwe-search.tsx?d385","webpack://msdyn365.commerce.online/./src/modules/smwe-search/smwe-search.view.tsx?12de","webpack://msdyn365.commerce.online/./src/themes/blend/views/smwe-search.view.tsx?7dc6","webpack://msdyn365.commerce.online/./src/themes/colsolare/views/smwe-search.view.tsx?6357","webpack://msdyn365.commerce.online/./src/themes/columbiacrest/views/smwe-search.view.tsx?353b","webpack://msdyn365.commerce.online/./src/themes/conn-creek/views/smwe-search.view.tsx?1efd","webpack://msdyn365.commerce.online/./src/themes/elicit/views/smwe-search.view.tsx?c5b3","webpack://msdyn365.commerce.online/./src/themes/emp/views/carousel.view.tsx?0665","webpack://msdyn365.commerce.online/./src/themes/emp/views/smwe-search.view.tsx?8bf9","webpack://msdyn365.commerce.online/./src/themes/enoteca/views/smwe-search.view.tsx?81b8","webpack://msdyn365.commerce.online/./src/themes/erath/views/smwe-search.view.tsx?4746","webpack://msdyn365.commerce.online/./src/themes/fth/views/carousel.view.tsx?2705","webpack://msdyn365.commerce.online/./src/themes/fth/views/smwe-search.view.tsx?3d00","webpack://msdyn365.commerce.online/./src/themes/generazioni/views/smwe-search.view.tsx?c1ed","webpack://msdyn365.commerce.online/./src/themes/intrinsic-wine-co/views/smwe-search.view.tsx?9431","webpack://msdyn365.commerce.online/./src/themes/north-star/views/smwe-search.view.tsx?b6a2","webpack://msdyn365.commerce.online/./src/themes/patzhall/views/smwe-search.view.tsx?7d90","webpack://msdyn365.commerce.online/./src/themes/spring-valley-vineyard/views/smwe-search.view.tsx?93ce","webpack://msdyn365.commerce.online/./src/themes/stagsleap/views/smwe-search.view.tsx?f319","webpack://msdyn365.commerce.online/./src/themes/stemichelle-new/views/carousel.view.tsx?a805","webpack://msdyn365.commerce.online/./src/themes/stemichelle-new/views/smwe-search.view.tsx?cf97","webpack://msdyn365.commerce.online/./src/themes/stemichelle/views/smwe-search.view.tsx?d041","webpack://msdyn365.commerce.online/./src/themes/wine-estates/views/carousel.view.tsx?a040","webpack://msdyn365.commerce.online/./src/themes/wine-estates/views/smwe-search.view.tsx?c04d","webpack://msdyn365.commerce.online/./src/modules/bulk-purchase/bulk-purchase.tsx?9fd5","webpack://msdyn365.commerce.online/./src/modules/bulk-purchase/bulk-purchase.view.tsx?feac","webpack://msdyn365.commerce.online/./src/modules/carousel/carousel.tsx?80d4","webpack://msdyn365.commerce.online/./src/modules/carousel/carousel.view.tsx?d82f","webpack://msdyn365.commerce.online/./src/validate-cart.ts?cd50","webpack://msdyn365.commerce.online/./src/Common/get-product.ts?0a21","webpack://msdyn365.commerce.online/./src/modules/cart-icon/components/flyout-cart-line-items.tsx?f2c4","webpack://msdyn365.commerce.online/./src/modules/cart-icon/utils/get-products-in-mini-cart.ts?3c15","webpack://msdyn365.commerce.online/./src/modules/cart-icon/cart-icon.tsx?4ae8","webpack://msdyn365.commerce.online/./src/modules/cart-icon/cart-icon.view.tsx?f9dd","webpack://msdyn365.commerce.online/./src/modules/checkout-delivery-options/components/checkout-delivery-options.description.tsx?840c","webpack://msdyn365.commerce.online/./src/modules/checkout-delivery-options/components/checkout-delivery-options.error-message.tsx?8ca3","webpack://msdyn365.commerce.online/./src/modules/checkout-delivery-options/components/checkout-delivery-options.error-title.tsx?f7e7","webpack://msdyn365.commerce.online/./src/modules/checkout-delivery-options/components/checkout-delivery-options.radio-button.tsx?9df9","webpack://msdyn365.commerce.online/./src/modules/checkout-delivery-options/checkout-delivery-options.tsx?6764","webpack://msdyn365.commerce.online/./src/modules/checkout-delivery-options/checkout-delivery-options.view.tsx?1e75","webpack://msdyn365.commerce.online/./src/modules/checkout-gift-card/components/get-form.tsx?4540","webpack://msdyn365.commerce.online/./src/modules/checkout-gift-card/components/get-item.tsx?d186","webpack://msdyn365.commerce.online/./src/modules/checkout-gift-card/components/get-list.tsx?a3f3","webpack://msdyn365.commerce.online/./src/modules/checkout-gift-card/components/title.tsx?3b2f","webpack://msdyn365.commerce.online/./src/modules/checkout-gift-card/checkout-gift-card.tsx?8fc3","webpack://msdyn365.commerce.online/./src/modules/checkout-gift-card/checkout-gift-card.view.tsx?d99f","webpack://msdyn365.commerce.online/./src/modules/checkout-loyalty/components/checkout-loyalty-input.tsx?cadb","webpack://msdyn365.commerce.online/./src/modules/checkout-loyalty/components/checkout-loyalty-label.tsx?e02b","webpack://msdyn365.commerce.online/./src/modules/checkout-loyalty/components/checkout-loyalty-text.tsx?895a","webpack://msdyn365.commerce.online/./src/modules/checkout-loyalty/checkout-loyalty.tsx?8b4b","webpack://msdyn365.commerce.online/./src/modules/checkout-loyalty/checkout-loyalty.view.tsx?b79f","webpack://msdyn365.commerce.online/./src/modules/checkout/checkout.tsx?6737","webpack://msdyn365.commerce.online/./src/modules/checkout/checkout.view.tsx?e4cc","webpack://msdyn365.commerce.online/./src/modules/checkout/components/alert.tsx?cb1e","webpack://msdyn365.commerce.online/./src/modules/checkout/components/get-invoice-payment-summary.tsx?9549","webpack://msdyn365.commerce.online/./src/modules/checkout/components/get-line-items.tsx?92f8","webpack://msdyn365.commerce.online/./src/modules/checkout/components/get-order-summary.tsx?4a81","webpack://msdyn365.commerce.online/./src/modules/checkout/components/guided-card.tsx?58e0","webpack://msdyn365.commerce.online/./src/modules/checkout/components/guided-form.tsx?f018","webpack://msdyn365.commerce.online/./src/modules/checkout/components/place-order-button.tsx?9b41","webpack://msdyn365.commerce.online/./src/modules/checkout/methods/checkout.ts?7b6b","webpack://msdyn365.commerce.online/./src/modules/checkout/methods/place-order.ts?5aa0","webpack://msdyn365.commerce.online/./src/modules/gift-card-balance-check/components/get-form.tsx?e249","webpack://msdyn365.commerce.online/./src/modules/gift-card-balance-check/components/get-item.tsx?4862","webpack://msdyn365.commerce.online/./src/modules/gift-card-balance-check/gift-card-balance-check.tsx?d1f8","webpack://msdyn365.commerce.online/./src/modules/gift-card-balance-check/gift-card-balance-check.view.tsx?a0c9","webpack://msdyn365.commerce.online/./src/modules/fabrikam/views/components/cartlineitem.component.tsx?eb8c","webpack://msdyn365.commerce.online/./src/modules/header/components/header-preferred-store.tsx?ee9c","webpack://msdyn365.commerce.online/./src/modules/header/components/logo.tsx?f27e","webpack://msdyn365.commerce.online/./src/modules/header/components/nav-icon.tsx?2475","webpack://msdyn365.commerce.online/./src/modules/header/header.tsx?e91a","webpack://msdyn365.commerce.online/./src/modules/header/header.view.tsx?cf0f","webpack://msdyn365.commerce.online/./src/invoice-summary-lineitem.tsx?5f61","webpack://msdyn365.commerce.online/./src/modules/media-gallery/utils/helper.ts?b895","webpack://msdyn365.commerce.online/./src/modules/media-gallery/utils/get-valid-product-images.ts?a364","webpack://msdyn365.commerce.online/./src/modules/media-gallery/media-gallery.tsx?24d7","webpack://msdyn365.commerce.online/./src/modules/media-gallery/media-gallery.view.tsx?5061","webpack://msdyn365.commerce.online/./src/order-summary-lineitem.tsx?8a98","webpack://msdyn365.commerce.online/./src/modules/product-collection/product-collection.tsx?4008","webpack://msdyn365.commerce.online/./src/modules/product-collection/product-collection.view.tsx?5d36","webpack://msdyn365.commerce.online/./src/modules/promo-banner/components/close-button.tsx?063b","webpack://msdyn365.commerce.online/./src/modules/promo-banner/components/links.tsx?2587","webpack://msdyn365.commerce.online/./src/modules/promo-banner/components/text.tsx?782b","webpack://msdyn365.commerce.online/./src/modules/promo-banner/promo-banner.tsx?9ee9","webpack://msdyn365.commerce.online/./src/modules/promo-banner/promo-banner.view.tsx?7f77","webpack://msdyn365.commerce.online/./src/modules/quick-order-grid/components/add-to-list/add-to-cart-selected-items.tsx?de21","webpack://msdyn365.commerce.online/./src/modules/quick-order-grid/components/quick-order-grid-actions.tsx?ca97","webpack://msdyn365.commerce.online/./src/modules/quick-order-grid/components/quick-order-grid-drawer.tsx?8701","webpack://msdyn365.commerce.online/./src/modules/quick-order-grid/components/quick-order-grid-form.tsx?5cbb","webpack://msdyn365.commerce.online/./src/modules/quick-order-grid/components/quick-order-grid-product.ts?187e","webpack://msdyn365.commerce.online/./src/modules/quick-order-grid/components/quick-order-grid-table/components/quick-order-grid-table-header-component.tsx?69b3","webpack://msdyn365.commerce.online/./src/modules/quick-order-grid/components/quick-order-grid-table/components/quick-order-grid-table-row-component.tsx?cd92","webpack://msdyn365.commerce.online/./src/modules/quick-order-grid/components/quick-order-grid-table/quick-order-grid-table-component.tsx?7cbc","webpack://msdyn365.commerce.online/./src/modules/quick-order-grid/quick-order-grid.tsx?fddf","webpack://msdyn365.commerce.online/./src/modules/quick-order-grid/components/utilities.ts?1806","webpack://msdyn365.commerce.online/./src/modules/quick-order-grid/quick-order-grid.view.tsx?f941","webpack://msdyn365.commerce.online/./src/modules/quick-order/components/quick-order-drawer.tsx?f8b4","webpack://msdyn365.commerce.online/./src/modules/quick-order/components/quick-order-form.tsx?eb54","webpack://msdyn365.commerce.online/./src/modules/quick-order/components/quick-order-product.ts?7702","webpack://msdyn365.commerce.online/./src/modules/quick-order/components/quick-order-table/components/quick-order-table-header-component.tsx?49e7","webpack://msdyn365.commerce.online/./src/modules/quick-order/components/quick-order-table/components/quick-order-table-row-component.tsx?e487","webpack://msdyn365.commerce.online/./src/modules/quick-order/components/quick-order-table/quick-order-table-component.tsx?46c1","webpack://msdyn365.commerce.online/./src/modules/quick-order/quick-order.tsx?ef21","webpack://msdyn365.commerce.online/./src/modules/quick-order/quick-order.view.tsx?a96d","webpack://msdyn365.commerce.online/./src/modules/search-result-container/components/utilities.ts?8569","webpack://msdyn365.commerce.online/./src/modules/search-result-container/components/choice-summary.tsx?3f71","webpack://msdyn365.commerce.online/./src/modules/search-result-container/components/error-message.tsx?6302","webpack://msdyn365.commerce.online/./src/modules/search-result-container/components/feature-search-result-item.tsx?71fa","webpack://msdyn365.commerce.online/./src/modules/search-result-container/components/link.tsx?52c2","webpack://msdyn365.commerce.online/./src/modules/search-result-container/components/modal.tsx?d78e","webpack://msdyn365.commerce.online/./src/modules/search-result-container/components/product-search-result-items.tsx?5174","webpack://msdyn365.commerce.online/./src/modules/search-result-container/components/range-refine-item.tsx?6288","webpack://msdyn365.commerce.online/./src/modules/search-result-container/components/refine-item.tsx?a594","webpack://msdyn365.commerce.online/./src/modules/search-result-container/components/refine-submenu.tsx?1292","webpack://msdyn365.commerce.online/./src/modules/search-result-container/components/separator.tsx?4ea6","webpack://msdyn365.commerce.online/./src/modules/search-result-container/components/title.tsx?c269","webpack://msdyn365.commerce.online/./src/modules/search-result-container/search-result-container.tsx?7500","webpack://msdyn365.commerce.online/./src/modules/search-result-container/search-result-container.view.tsx?b779","webpack://msdyn365.commerce.online/./src/search-state.ts?dd10","webpack://msdyn365.commerce.online/./src/modules/search/actions/get-auto-suggest-suggestions.ts?4735","webpack://msdyn365.commerce.online/./src/modules/search/components/search.categorysuggest.tsx?c65d","webpack://msdyn365.commerce.online/./src/modules/search/components/search.form.tsx?25a5","webpack://msdyn365.commerce.online/./src/modules/search/components/search.keywordsuggest.tsx?297c","webpack://msdyn365.commerce.online/./src/modules/search/components/search.label.tsx?0c17","webpack://msdyn365.commerce.online/./src/modules/search/components/search.productsuggest.tsx?2af9","webpack://msdyn365.commerce.online/./src/modules/search/search.tsx?72fb","webpack://msdyn365.commerce.online/./src/modules/search/search.view.tsx?1505","webpack://msdyn365.commerce.online/./src/modules/social-share-item/social-share-item.tsx?bbcb","webpack://msdyn365.commerce.online/./src/modules/social-share-item/social-share-item.view.tsx?2d3e"],"sourcesContent":["/* eslint-disable no-duplicate-imports */\r\nimport { generateImageUrl } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { Autosuggestions } from '@msdyn365-commerce/commerce-entities';\r\nimport {\r\n CacheType, createObservableDataAction, IAction, IActionContext, IActionInput,\r\n ICreateActionContext\r\n} from '@msdyn365-commerce/core';\r\nimport { SearchSuggestion, SearchSuggestionCriteria } from '@msdyn365-commerce/retail-proxy';\r\nimport {\r\n getSearchSuggestionsAsync\r\n} from '@msdyn365-commerce/retail-proxy/dist/DataActions/StoreOperationsDataActions.g';\r\n\r\n// @ts-ignore\r\nexport const enum SuggestionType {\r\n Category = 'ScopedCategory',\r\n Keyword = 'Keyword',\r\n Product = 'Product',\r\n None = 'None'\r\n}\r\n\r\n/**\r\n * Input class for auto suggest search input\r\n */\r\nexport class AutoSuggestInput implements IActionInput {\r\n public searchQuery?: string;\r\n public topResultsCount?: number;\r\n public suggestionType?: string;\r\n public hitPrefix?: string;\r\n public hitSuffix?: string;\r\n\r\n constructor(searchText?: string, top?: number, suggestionType?: string, hitPrefix?: string, hitSuffix?: string) {\r\n this.searchQuery = searchText;\r\n this.topResultsCount = top;\r\n this.suggestionType = suggestionType;\r\n this.hitPrefix = hitPrefix;\r\n this.hitSuffix = hitSuffix;\r\n }\r\n\r\n public getCacheKey = () => `AutoSuggestSearchSuggestions`;\r\n public getCacheObjectType = () => 'AutoSuggestSearchSuggestions';\r\n public dataCacheType = (): CacheType => 'none';\r\n}\r\n\r\nconst createInput = (inputData: ICreateActionContext) => {\r\n return new AutoSuggestInput();\r\n};\r\n\r\n/**\r\n * Calls the Retail API and returns a auto-suggest suggestions\r\n */\r\nexport async function getSearchSuggestionsAction(input: AutoSuggestInput, ctx: IActionContext): Promise {\r\n // If no input is provided fail out\r\n if (!input || !input.searchQuery) {\r\n throw new Error('[getSearchSuggestionsAction]No valid Input was provided, failing');\r\n }\r\n\r\n const autosuggest: Autosuggestions = {};\r\n\r\n const autoSuggestPromises = [\r\n _getAutoSuggest(input, autosuggest, ctx),\r\n ];\r\n return Promise.all(autoSuggestPromises).then(() => {\r\n return autosuggest;\r\n });\r\n}\r\n\r\nasync function _getAutoSuggest(\r\n input: AutoSuggestInput,\r\n autosuggest: Autosuggestions,\r\n ctx: IActionContext\r\n): Promise {\r\n const searchCriteria: SearchSuggestionCriteria = {\r\n ProductSearchCriteria: {\r\n SearchCondition: input.searchQuery && input.searchQuery.length > 0 ? input.searchQuery : '',\r\n Context: {\r\n ChannelId: +ctx.requestContext.apiSettings.channelId,\r\n CatalogId: +ctx.requestContext.apiSettings.catalogId\r\n }\r\n },\r\n HitPrefix: input.hitPrefix,\r\n HitSuffix: input.hitSuffix,\r\n SuggestionType: input.suggestionType\r\n };\r\n\r\n const searchSuggestions = await getSearchSuggestionsAsync(\r\n { callerContext: ctx, queryResultSettings: { Paging: { Top: input.topResultsCount } } },\r\n searchCriteria\r\n );\r\n\r\n if (searchSuggestions && searchSuggestions.length > 0) {\r\n // Generate image url\r\n searchSuggestions.map(\r\n (item: SearchSuggestion) =>\r\n (item.ImageUrl = item.ImageUrl ? generateImageUrl(item.ImageUrl, ctx.requestContext.apiSettings) : '')\r\n );\r\n\r\n autosuggest.AllSearchResults = searchSuggestions;\r\n } else {\r\n ctx.telemetry.error(`[getSearchSuggestionsAction] unable to get availabilites for search with suggestion type ${searchCriteria.SuggestionType}`);\r\n }\r\n}\r\n\r\nexport default createObservableDataAction({\r\n id: '@msdyn365-commerce-modules/search/get-auto-suggest-suggestions',\r\n action: >getSearchSuggestionsAction,\r\n input: createInput\r\n});\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport * as React from 'react';\r\n\r\nimport { getPayloadObject, getTelemetryAttributes, IPayLoad, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\r\nimport { getRichTextHtml } from '@msdyn365-commerce/core';\r\nimport { SearchSuggestion } from '@msdyn365-commerce/retail-proxy';\r\n\r\nimport { ISmweSearchData } from '../smwe-search.data';\r\nimport { ISmweSearchProps } from '../smwe-search.props.autogenerated';\r\n\r\nexport interface ISearchKeywordSuggestProps {\r\n searchKeywordSuggestClass: string;\r\n searchPageURL: string;\r\n searchQsp: string | undefined;\r\n hitPrefix: string;\r\n hitSuffix: string;\r\n autoSuggestProps: ISmweSearchProps;\r\n searchText: string;\r\n suggestions: SearchSuggestion[] | undefined;\r\n telemetryContent?: ITelemetryContent;\r\n}\r\n\r\nexport interface ISearchKeywordViewProps {\r\n text: React.ReactNode[];\r\n}\r\n\r\nlet payLoad: IPayLoad;\r\n\r\n/**\r\n *\r\n * KeywordSuggestionsComponent\r\n */\r\nexport const KeywordSuggestionsComponent = (props: ISearchKeywordSuggestProps): ISearchKeywordViewProps | undefined => {\r\n const {\r\n suggestions,\r\n hitPrefix,\r\n hitSuffix\r\n } = props;\r\n\r\n if (!suggestions) {\r\n return undefined;\r\n }\r\n\r\n payLoad = getPayloadObject('click', props.telemetryContent!, '');\r\n\r\n const reactNodes: React.ReactNode[] = [];\r\n\r\n suggestions.map(item => {\r\n reactNodes.push(_assembleNode(item, hitPrefix, hitSuffix, props));\r\n });\r\n\r\n return { text: reactNodes };\r\n};\r\n\r\nconst _assembleNode = (item: SearchSuggestion, hitPrefix: string, hitSuffix: string, props: ISearchKeywordSuggestProps) => {\r\n const ariaLabel = item.Value &&\r\n (item.Value).replace(new RegExp(`[${hitPrefix}]`, 'gi'), '').replace(new RegExp(`[${hitSuffix}]`, 'gi'), '');\r\n payLoad.contentAction.etext = ariaLabel;\r\n const attribute = getTelemetryAttributes(props.telemetryContent!, payLoad);\r\n return (\r\n
  • \r\n \r\n {_generateLink(item, hitPrefix, hitSuffix, props) &&\r\n _getHighlightedText(item.Value ? item.Value : '', hitPrefix, hitSuffix)}\r\n \r\n
  • \r\n );\r\n};\r\n\r\nconst _generateLink = (suggestion: SearchSuggestion, hitPrefix: string, hitSuffix: string, props: ISearchKeywordSuggestProps): string => {\r\n const { searchPageURL, searchQsp } = props;\r\n\r\n const formattedLink = (suggestion.Value as string)\r\n .replace(new RegExp(`[${hitPrefix}]`, 'gi'), '')\r\n .replace(new RegExp(`[${hitSuffix}]`, 'gi'), '');\r\n const route = searchPageURL || '';\r\n return formattedLink && formattedLink.length > 0\r\n ? `${route}${route.indexOf('?') === -1 ? '?' : '&'}${searchQsp}=${formattedLink}`\r\n : route;\r\n};\r\n\r\nconst _getHighlightedText = (suggestion: string, hitPrefix: string, hitSuffix: string): JSX.Element => {\r\n const formattedText = suggestion\r\n .replace(new RegExp(`[${hitPrefix}]`, 'gi'), '')\r\n .replace(new RegExp(`[${hitSuffix}]`, 'gi'), '');\r\n\r\n // tslint:disable:react-no-dangerous-html\r\n return ;\r\n};\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport * as React from 'react';\r\n\r\nimport { PriceComponent } from '@msdyn365-commerce/components';\r\nimport { getRichTextHtml, IActionContext, IImageSettings, Image, ITelemetry } from '@msdyn365-commerce/core';\r\nimport { SearchSuggestion } from '@msdyn365-commerce/retail-proxy';\r\n\r\nimport { getProductPageUrlSync } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { getPayloadObject, getTelemetryAttributes, INodeProps, IPayLoad, ITelemetryContent, NodeTag } from '@msdyn365-commerce-modules/utilities';\r\nimport { ISmweSearchData } from '../smwe-search.data';\r\nimport { ISmweSearchProps } from '../smwe-search.props.autogenerated';\r\n\r\nexport interface ISearchProductSuggestProps {\r\n searchProductSuggestClass: string;\r\n searchPageURL: string;\r\n searchQsp: string | undefined;\r\n hitPrefix: string;\r\n hitSuffix: string;\r\n autoSuggestProps: ISmweSearchProps;\r\n searchText: string;\r\n suggestions: SearchSuggestion[] | undefined;\r\n telemetry: ITelemetry;\r\n moduleType: string;\r\n moduleId: string;\r\n telemetryContent?: ITelemetryContent;\r\n}\r\n\r\nexport interface ISearchProductViewProps {\r\n title: React.ReactNode;\r\n items: ISearchProductItemViewProps[];\r\n}\r\n\r\nexport interface ISearchProductItemViewProps {\r\n text: React.ReactNode;\r\n thumbnail: React.ReactNode;\r\n price: React.ReactNode;\r\n LiProduct: INodeProps;\r\n AProduct: INodeProps;\r\n id: string | undefined;\r\n}\r\n\r\nlet payLoad: IPayLoad;\r\nlet telemetryContent: ITelemetryContent | undefined;\r\n\r\n/**\r\n *\r\n * ProductSuggestionsComponent\r\n */\r\nexport const ProductSuggestionsComponent = (props: ISearchProductSuggestProps): ISearchProductViewProps | undefined => {\r\n const {\r\n suggestions,\r\n hitSuffix,\r\n hitPrefix,\r\n autoSuggestProps: {\r\n context: { actionContext },\r\n resources: { productSuggestionHeading }\r\n },\r\n moduleType,\r\n moduleId\r\n } = props;\r\n const reactNodes: ISearchProductItemViewProps[] = [];\r\n telemetryContent = props.telemetryContent;\r\n payLoad = getPayloadObject('click', props.telemetryContent!, '');\r\n\r\n if (!suggestions) {\r\n return undefined;\r\n }\r\n\r\n suggestions.map(item => {\r\n reactNodes.push(_assembleNode(item, hitPrefix, hitSuffix, actionContext, props, moduleType, moduleId));\r\n });\r\n\r\n const titleNode = _renderTitle(productSuggestionHeading);\r\n\r\n return { title: titleNode, items: reactNodes };\r\n};\r\n\r\nconst _renderTitle = (productSuggestionHeading: string) => {\r\n const productAutoSuggestionHeading = productSuggestionHeading ? productSuggestionHeading : 'Go to products';\r\n\r\n return
  • {productAutoSuggestionHeading}
  • ;\r\n};\r\n\r\nconst _assembleNode = (\r\n item: SearchSuggestion,\r\n hitPrefix: string,\r\n hitSuffix: string,\r\n actionContext: IActionContext,\r\n props: ISearchProductSuggestProps,\r\n moduleType: string,\r\n moduleId: string\r\n): ISearchProductItemViewProps => {\r\n const altText =\r\n item.Value &&\r\n (item.Value).replace(new RegExp(`[${hitPrefix}]`, 'gi'), '').replace(new RegExp(`[${hitSuffix}]`, 'gi'), '');\r\n\r\n return {\r\n text: _getHighlightedText(item.Value ? item.Value : '', hitPrefix, hitSuffix),\r\n thumbnail: _renderThumbnail(item, altText ? altText : '', props),\r\n price:\r\n item.Id &&\r\n item.Value3 &&\r\n item.Value3.Value &&\r\n item.Value3.Value.DecimalValue &&\r\n _renderPrice(item.Value3.Value.DecimalValue, item.Value3.Value.DecimalValue, moduleId, moduleType, props),\r\n LiProduct: _getLiWrapper(),\r\n AProduct: _getAWrapper(item, hitPrefix, hitSuffix, actionContext),\r\n id: item.Id\r\n };\r\n};\r\n\r\nconst _getLiWrapper = () => {\r\n return {\r\n className: 'msc-autoSuggest__productResults-item',\r\n tag: 'li' as NodeTag\r\n };\r\n};\r\n\r\nconst _getAWrapper = (item: SearchSuggestion, hitPrefix: string, hitSuffix: string, actionContext: IActionContext) => {\r\n const ariaLabel = item.Value &&\r\n (item.Value).replace(new RegExp(`[${hitPrefix}]`, 'gi'), '').replace(new RegExp(`[${hitSuffix}]`, 'gi'), '');\r\n\r\n payLoad.contentAction.recid = item.Id;\r\n const attribute = getTelemetryAttributes(telemetryContent!, payLoad);\r\n\r\n return {\r\n className: 'msc-autoSuggest__productResults-item',\r\n tag: 'a' as NodeTag,\r\n 'aria-label': ariaLabel,\r\n href: _generateLink(item, hitPrefix, hitSuffix, actionContext),\r\n ...attribute\r\n };\r\n};\r\n\r\nconst _generateLink = (suggestion: SearchSuggestion, hitPrefix: string, hitSuffix: string, actionContext: IActionContext) => {\r\n const formattedLink = (suggestion.Value as string).replace(new RegExp(`[${hitPrefix}]`, 'gi'), '').replace(new RegExp(`[${hitSuffix}]`, 'gi'), '');\r\n return suggestion.Value && suggestion.Id ?\r\n getProductPageUrlSync(formattedLink,suggestion.Id as unknown as number, actionContext, undefined) : '';\r\n};\r\n\r\nconst _getHighlightedText = (suggestion: string, hitPrefix: string, hitSuffix: string): JSX.Element => {\r\n const formattedText = suggestion\r\n .replace(new RegExp(`[${hitPrefix}]`, 'gi'), '')\r\n .replace(new RegExp(`[${hitSuffix}]`, 'gi'), '');\r\n\r\n // tslint:disable:react-no-dangerous-html\r\n return ;\r\n};\r\n\r\nconst _renderPrice = (adjustedPrice: number, basePrice: number, moduleId: string, moduleType: string, props: ISearchProductSuggestProps): JSX.Element | null => {\r\n const {\r\n autoSuggestProps: { context }\r\n } = props;\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nconst _renderThumbnail = (suggestion: SearchSuggestion, altText: string, props: ISearchProductSuggestProps): JSX.Element | null => {\r\n const {\r\n autoSuggestProps: {\r\n context: {\r\n request: { gridSettings }\r\n },\r\n config: { imageSettings }\r\n }\r\n } = props;\r\n if(imageSettings) {\r\n imageSettings.cropFocalRegion = true;\r\n }\r\n\r\n if (!suggestion || !suggestion.ImageUrl) {\r\n props.telemetry.error('Search suggestion content is empty, module wont render.');\r\n return null;\r\n }\r\n\r\n const defaultImageSettings: IImageSettings = {\r\n viewports: {\r\n xs: { q: `w=40&h=40&m=6`, w: 0, h: 0 },\r\n lg: { q: `w=40&h=40&m=6`, w: 0, h: 0 },\r\n xl: { q: `w=40&h=40&m=6`, w: 0, h: 0 }\r\n },\r\n lazyload: true,\r\n cropFocalRegion: true\r\n };\r\n\r\n return (\r\n \r\n );\r\n};\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport * as React from 'react';\r\n\r\nimport { getRichTextHtml } from '@msdyn365-commerce/core';\r\nimport { ProductRefiner, ProductRefinerValue, SearchSuggestion } from '@msdyn365-commerce/retail-proxy';\r\n\r\nimport { format, getPayloadObject, getTelemetryAttributes, IPayLoad, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\r\nimport { ISmweSearchData } from '../smwe-search.data';\r\nimport { ISmweSearchProps } from '../smwe-search.props.autogenerated';\r\n\r\nexport interface ISearchCategorySuggestProps {\r\n searchCategorySuggestClass: string;\r\n searchPageURL: string;\r\n searchQsp: string | undefined;\r\n hitPrefix: string;\r\n hitSuffix: string;\r\n autoSuggestProps: ISmweSearchProps;\r\n searchText: string;\r\n searchRefiners: ProductRefiner[] | undefined;\r\n suggestions: SearchSuggestion[] | undefined;\r\n telemetryContent?: ITelemetryContent;\r\n}\r\n\r\nexport interface ISearchCategoryViewProps {\r\n title: React.ReactNode;\r\n text: React.ReactNode[];\r\n}\r\n\r\nlet payLoad: IPayLoad;\r\n\r\n/**\r\n *\r\n * CategorySuggestionsComponent\r\n */\r\nexport const CategorySuggestionsComponent = (props: ISearchCategorySuggestProps): ISearchCategoryViewProps | undefined => {\r\n const {\r\n suggestions,\r\n searchText,\r\n autoSuggestProps: {\r\n resources: { categorySuggestionHeading }\r\n }\r\n } = props;\r\n\r\n if (!suggestions) {\r\n return undefined;\r\n }\r\n\r\n const reactNodes: React.ReactNode[] = [];\r\n payLoad = getPayloadObject('click', props.telemetryContent!, '');\r\n\r\n suggestions.map(item => {\r\n reactNodes.push(_assembleNode(item, props));\r\n });\r\n\r\n const titleNode = _renderTitle(categorySuggestionHeading, searchText);\r\n\r\n return { title: titleNode, text: reactNodes };\r\n};\r\n\r\nconst _renderTitle = (categorySuggestionHeading: string, searchText: string) => {\r\n const categoryAutoSuggestionHeading = categorySuggestionHeading\r\n ? format(categorySuggestionHeading, searchText)\r\n : `Search \"${searchText}\" in categories`;\r\n\r\n return
  • {categoryAutoSuggestionHeading}
  • ;\r\n};\r\n\r\nconst _assembleNode = (item: SearchSuggestion, props: ISearchCategorySuggestProps) => {\r\n const { searchText, hitPrefix, hitSuffix } = props;\r\n\r\n const splitValue = item.Value && item.Value.split('|').pop();\r\n const ariaLabel = splitValue\r\n ? splitValue.replace(new RegExp(`[${hitPrefix}]`, 'gi'), '').replace(new RegExp(`[${hitSuffix}]`, 'gi'), '')\r\n : item.Value && item.Value.replace(new RegExp(`[${hitPrefix}]`, 'gi'), '').replace(new RegExp(`[${hitSuffix}]`, 'gi'), '');\r\n payLoad.contentAction.etext = item.Value;\r\n const attribute = getTelemetryAttributes(props.telemetryContent!, payLoad);\r\n return (\r\n
  • \r\n \r\n {_generateLink(item, searchText, props) && _getHighlightedText(item.Value ? item.Value : '', hitPrefix, hitSuffix)}\r\n \r\n
  • \r\n );\r\n};\r\n\r\nconst _generateLink = (suggestion: SearchSuggestion, searchText: string, props: ISearchCategorySuggestProps): string => {\r\n return suggestion && suggestion.Id ? _getCategoryLink(suggestion.Id, searchText, props) : '';\r\n};\r\n\r\nconst _getCategoryLink = (id: string, searchText: string, props: ISearchCategorySuggestProps): string => {\r\n const { searchPageURL, searchQsp, searchRefiners } = props;\r\n\r\n const route = searchPageURL || '';\r\n const urlPath = `${route}${route.indexOf('?') === -1 ? '?' : '&'}${searchQsp}=${searchText}`;\r\n const categoryRefiners =\r\n searchRefiners &&\r\n searchRefiners.find(refiners => {\r\n return refiners.KeyName === 'Category';\r\n });\r\n const refiner =\r\n categoryRefiners &&\r\n categoryRefiners.Values &&\r\n categoryRefiners.Values.find(item => {\r\n return item.RefinerRecordId === parseInt(id, 10);\r\n });\r\n\r\n const encodedRefiner = refiner && encodeURIComponent(JSON.stringify(compressRefiners([refiner])));\r\n\r\n return encodedRefiner ? `${urlPath}&refiners=${encodedRefiner}` : urlPath;\r\n};\r\n\r\nconst _getHighlightedText = (suggestion: string, hitPrefix: string, hitSuffix: string): JSX.Element => {\r\n let formattedText = suggestion\r\n .replace(new RegExp(`[${hitPrefix}]`, 'gi'), '')\r\n .replace(new RegExp(`[${hitSuffix}]`, 'gi'), '');\r\n formattedText = formattedText.split('|').pop() || '';\r\n\r\n // tslint:disable:react-no-dangerous-html\r\n return ;\r\n};\r\n\r\n// TODO: This code is currently duplicated in categoryautosuggest need to either remove one of these files\r\n// or move this code to a common place\r\nconst compressedRefinerKeys = ['DataTypeValue', 'LeftValueBoundString', 'RefinerRecordId', 'RefinerSourceValue', 'RightValueBoundString', 'UnitText'];\r\n\r\n/**\r\n * Compressed a list of refiners for use in URLs\r\n * @param refiners The uncompressed refiners\r\n */\r\nconst compressRefiners = (refiners: ProductRefinerValue[]) => {\r\n const compressedRefiners: (string | number)[][] = [];\r\n\r\n refiners.forEach((refiner) => {\r\n const compressedRefiner: (string | number)[] = [];\r\n compressedRefinerKeys.forEach((refinerKey) => {\r\n // @ts-ignore: This line is intentionally not typesafe\r\n compressedRefiner.push(refiner[refinerKey]);\r\n });\r\n compressedRefiners.push(compressedRefiner);\r\n });\r\n\r\n return compressedRefiners;\r\n};\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport { Button } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nexport interface ISearchFormProps {\r\n hideSearchLabel: boolean | undefined;\r\n isSearchFormExpanded: boolean | undefined;\r\n disableSubmitSearch: boolean | undefined;\r\n searchTextInput: React.RefObject;\r\n maxChars: number;\r\n searchQsp: string;\r\n searchPlaceholder: string;\r\n query: string;\r\n ariaLabelCancel: string;\r\n ariaLabelSearch: string;\r\n ariaLabelSubmit: string;\r\n handleCancelSearchChange(): void;\r\n handleInputChange(query: string): void;\r\n}\r\n\r\nexport interface ISearchFormViewProps {\r\n label: React.ReactNode;\r\n input: React.ReactNode;\r\n submitBtn: React.ReactNode;\r\n cancelBtn: React.ReactNode;\r\n\r\n}\r\n\r\nexport const FormComponent = (props: ISearchFormProps): ISearchFormViewProps => {\r\n const {\r\n searchQsp,\r\n searchPlaceholder,\r\n hideSearchLabel,\r\n isSearchFormExpanded,\r\n searchTextInput,\r\n handleInputChange,\r\n maxChars,\r\n disableSubmitSearch,\r\n handleCancelSearchChange,\r\n query,\r\n ariaLabelCancel,\r\n ariaLabelSearch,\r\n ariaLabelSubmit\r\n } = props;\r\n\r\n const onInputChange = (e: React.ChangeEvent): void => {\r\n handleInputChange(e.target.value || '');\r\n };\r\n\r\n const labelNode = ;\r\n\r\n const inputNode = !hideSearchLabel ? (\r\n \r\n ) : (\r\n \r\n );\r\n\r\n const submitBtnNode = !disableSubmitSearch && (\r\n \r\n \r\n );\r\n};\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport { createSearchStateInput } from '@msdyn365-commerce-modules/search-utilities';\r\nimport { getTelemetryObject, IModuleProps, INodeProps, ITelemetryContent, KeyCodes } from '@msdyn365-commerce-modules/utilities';\r\nimport { Autosuggestions } from '@msdyn365-commerce/commerce-entities';\r\nimport { getUrlSync } from '@msdyn365-commerce/core';\r\nimport { ProductRefiner } from '@msdyn365-commerce/retail-proxy';\r\nimport { getProductSearchRefinersAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductsDataActions.g';\r\nimport classnames from 'classnames';\r\nimport { debounce } from 'lodash';\r\nimport * as React from 'react';\r\n\r\nimport getSearchSuggestionsAction, { AutoSuggestInput, SuggestionType } from './actions/get-auto-suggest-suggestions';\r\nimport {\r\n CategorySuggestionsComponent,\r\n FormComponent,\r\n ISearchCategoryViewProps,\r\n ISearchKeywordViewProps,\r\n ISearchProductViewProps,\r\n KeywordSuggestionsComponent,\r\n LabelComponent,\r\n ProductSuggestionsComponent\r\n} from './components';\r\nimport { ISmweSearchData } from './smwe-search.data';\r\nimport { ISmweSearchProps, ISuggestionTypeCriterionData } from './smwe-search.props.autogenerated';\r\n\r\nexport interface ISearchState {\r\n isSearchFormExpanded: boolean;\r\n searchText: string;\r\n searchKeywordSuggestClass: string;\r\n searchProductSuggestClass: string;\r\n searchCategorySuggestClass: string;\r\n suggestions: Autosuggestions | undefined;\r\n searchRefiners?: ProductRefiner[] | undefined;\r\n autoSuggestAriaLabel: string;\r\n isInitialState: boolean;\r\n}\r\n\r\nexport interface ISearchViewProps extends ISmweSearchProps {\r\n Search: IModuleProps;\r\n AutoSuggestAriaLabel: INodeProps;\r\n AutoSuggestAriaLabelText: string;\r\n searchText: string;\r\n AutoSuggest: INodeProps;\r\n KeywordSuggest: INodeProps;\r\n ProductSuggest: INodeProps;\r\n CategorySuggest: INodeProps;\r\n SearchForm: INodeProps;\r\n FormWrapper: INodeProps;\r\n UlKeyword: INodeProps;\r\n UlProduct: INodeProps;\r\n UlCategory: INodeProps;\r\n label: React.ReactNode;\r\n form: React.ReactNode;\r\n autosuggestKeyword?: ISearchKeywordViewProps;\r\n autosuggestProduct?: ISearchProductViewProps;\r\n autosuggestCategory?: ISearchCategoryViewProps;\r\n callbacks: {\r\n handleCancelSearchChange(): void;\r\n };\r\n isSearchFormExpanded: boolean;\r\n}\r\n\r\n/**\r\n *\r\n * Search module\r\n * @extends {React.Component, ISearchState>}\r\n */\r\nclass Search extends React.Component, ISearchState> {\r\n private searchTextInput: React.RefObject;\r\n private searchCollapsedLabel: React.RefObject;\r\n private formReference: React.RefObject;\r\n private maxChars: number;\r\n private inputSuggestionType?: ISuggestionTypeCriterionData[];\r\n private topResultsCount?: number;\r\n private hitPrefix: string = '{';\r\n private hitSuffix: string = '}';\r\n private waitTime: number = 500;\r\n private autoSuggestResultScreenReaderDiv: React.RefObject;\r\n private autoSuggestResultDiv: React.RefObject;\r\n private searchFormClass: string;\r\n private searchLabelClass: string;\r\n private telemetryContent: ITelemetryContent;\r\n // @ts-ignore\r\n private cancellabelDebounce: debounce;\r\n\r\n constructor(props: ISmweSearchProps) {\r\n super(props);\r\n this.searchTextInput = React.createRef();\r\n this.searchCollapsedLabel = React.createRef();\r\n this.autoSuggestResultScreenReaderDiv = React.createRef();\r\n this.autoSuggestResultDiv = React.createRef();\r\n this.formReference = React.createRef();\r\n this.state = {\r\n isSearchFormExpanded: false,\r\n searchText: '',\r\n searchKeywordSuggestClass: 'ms-search__autoSuggest__keyword',\r\n searchProductSuggestClass: 'ms-search__autoSuggest__product',\r\n searchCategorySuggestClass: 'ms-search__autoSuggest__category',\r\n suggestions: undefined,\r\n searchRefiners: undefined,\r\n autoSuggestAriaLabel: '',\r\n isInitialState: true\r\n };\r\n this.maxChars =\r\n (this.props.context &&\r\n this.props.context.app &&\r\n this.props.context.app.config &&\r\n this.props.context.app.config.searchInputMaxLength) ||\r\n 50;\r\n this.inputSuggestionType = this.props.config && this.props.config.suggestionTypeCriterion;\r\n this.topResultsCount = this.props.config && this.props.config.topResultsCount ? this.props.config.topResultsCount : 5;\r\n this.searchFormClass = 'ms-search__form';\r\n this.searchLabelClass = 'ms-search__label';\r\n this.telemetryContent = getTelemetryObject(this.props.context.request.telemetryPageName!, this.props.friendlyName, this.props.telemetry);\r\n }\r\n\r\n public async componentDidMount(): Promise {\r\n document.body && document.body.addEventListener('mousedown', this._focusOutTarget);\r\n window && window.addEventListener('keyup', this._keyup);\r\n }\r\n\r\n public componentWillUnmount(): void {\r\n document.body && document.body.removeEventListener('mousedown', this._focusOutTarget, false);\r\n window && window.removeEventListener('keyup', this._keyup, false);\r\n }\r\n\r\n public componentDidUpdate(): void {\r\n const {\r\n config: { hideSearchLabel }\r\n } = this.props;\r\n const { isSearchFormExpanded, isInitialState } = this.state;\r\n\r\n if (!this.props.context.request.params.isEditor) {\r\n if (!hideSearchLabel && isSearchFormExpanded) {\r\n this.searchTextInput && this.searchTextInput.current && this.searchTextInput.current.focus();\r\n } else if (!isInitialState) {\r\n this.searchCollapsedLabel && this.searchCollapsedLabel.current && this.searchCollapsedLabel.current.focus();\r\n }\r\n }\r\n }\r\n\r\n // tslint:disable-next-line: cyclomatic-complexity max-func-body-length\r\n public render(): JSX.Element {\r\n const {\r\n context,\r\n resources: { searchtext, searchLabelArialLabel, cancelBtnAriaLabel, searchBtnAriaLabel, submitBtnAriaLabel},\r\n config: { hideSearchLabel, disableSubmitSearch, searchplaceholderText, className = '' }\r\n } = this.props;\r\n\r\n const {\r\n isSearchFormExpanded,\r\n searchText,\r\n searchKeywordSuggestClass,\r\n searchProductSuggestClass,\r\n searchCategorySuggestClass,\r\n suggestions,\r\n searchRefiners\r\n } = this.state;\r\n\r\n const searchQsp = (context && context.app && context.app.config && context.app.config.searchQueryStringParameter) || 'q';\r\n const searchPageURL = getUrlSync('search', context && context.actionContext) || '';\r\n const searchURL = this._appendQueryParams(searchPageURL, searchText, searchQsp);\r\n const searchPlaceholder = searchplaceholderText && searchplaceholderText.length > 0 ? searchplaceholderText : 'Search in Fabrikam';\r\n\r\n const keywordSuggestions =\r\n suggestions &&\r\n suggestions.AllSearchResults &&\r\n suggestions.AllSearchResults.filter(\r\n i => i.SuggestionType === SuggestionType.Keyword || i.SuggestionType === SuggestionType.None\r\n );\r\n const productSuggestions =\r\n suggestions &&\r\n suggestions.AllSearchResults &&\r\n suggestions.AllSearchResults.filter(i => i.SuggestionType === SuggestionType.Product);\r\n const categorySuggestions =\r\n suggestions &&\r\n suggestions.AllSearchResults &&\r\n suggestions.AllSearchResults.filter(i => i.SuggestionType === SuggestionType.Category);\r\n\r\n const viewProps: ISearchViewProps = {\r\n ...(this.props as ISmweSearchProps),\r\n\r\n Search: {\r\n moduleProps: this.props,\r\n className: `${classnames('ms-search', className)} ${disableSubmitSearch ? 'no-submit' : 'with-submit'}`,\r\n },\r\n AutoSuggestAriaLabel: {\r\n tag: 'div',\r\n className: 'msc-autoSuggest__screen-reader',\r\n 'aria-live': 'assertive',\r\n ref: this.autoSuggestResultScreenReaderDiv\r\n },\r\n AutoSuggestAriaLabelText: this.state.autoSuggestAriaLabel,\r\n searchText: this.state.searchText,\r\n AutoSuggest: {\r\n ref: this.autoSuggestResultDiv,\r\n className: 'ms-search__autoSuggest'\r\n },\r\n KeywordSuggest: {\r\n className: searchKeywordSuggestClass\r\n },\r\n ProductSuggest: {\r\n className: searchProductSuggestClass\r\n },\r\n CategorySuggest: {\r\n className: searchCategorySuggestClass\r\n },\r\n SearchForm: {\r\n className: `${this.searchFormClass} ${isSearchFormExpanded ? 'bx-show' : 'bx-hide'}`,id:'SearchFormModal'\r\n },\r\n FormWrapper: {\r\n tag: 'form',\r\n ref: this.formReference,\r\n className: 'ms-search__searchForm',\r\n 'aria-label': 'Search',\r\n name: 'searchForm',\r\n role: 'search',\r\n action: searchURL,\r\n autoComplete: 'off',\r\n onSubmit: this._handleSubmit\r\n },\r\n UlKeyword: {\r\n tag: 'ul',\r\n className: classnames('msc-autoSuggest__keywordResults-items', className)\r\n },\r\n UlProduct: {\r\n tag: 'ul',\r\n className: classnames('msc-autoSuggest__productResults-items', className)\r\n },\r\n UlCategory: {\r\n tag: 'ul',\r\n className: classnames('msc-autoSuggest__categoryResults-items', className)\r\n },\r\n label:LabelComponent({\r\n isSearchFormExpanded: isSearchFormExpanded,\r\n searchLabelClass: `${this.searchLabelClass} ${isSearchFormExpanded ? 'bx-hide' : 'bx-show'}`,\r\n searchtext: searchtext,\r\n searchLabelArialLabel: searchLabelArialLabel,\r\n searchCollapsedLabel: this.searchCollapsedLabel,\r\n hideSearchLabel: hideSearchLabel,\r\n handleCancelSearchChange: this._handleCancelSearchChange,\r\n telemetryContent: this.telemetryContent\r\n }),\r\n form: FormComponent({\r\n ariaLabelCancel: cancelBtnAriaLabel,\r\n ariaLabelSearch: searchBtnAriaLabel,\r\n ariaLabelSubmit: submitBtnAriaLabel,\r\n hideSearchLabel: hideSearchLabel,\r\n searchTextInput: this.searchTextInput,\r\n isSearchFormExpanded: isSearchFormExpanded,\r\n disableSubmitSearch: disableSubmitSearch,\r\n handleInputChange: this._handleInputChange,\r\n handleCancelSearchChange: this._handleCancelSearchChange,\r\n maxChars: this.maxChars,\r\n searchQsp: searchQsp,\r\n searchPlaceholder: searchPlaceholder,\r\n query: searchText\r\n }),\r\n autosuggestKeyword:\r\n searchText && searchText.length > 0 && keywordSuggestions && keywordSuggestions.length > 0\r\n ? KeywordSuggestionsComponent({\r\n searchKeywordSuggestClass: searchKeywordSuggestClass,\r\n searchPageURL: searchPageURL,\r\n searchQsp: searchQsp,\r\n hitPrefix: this.hitPrefix,\r\n hitSuffix: this.hitSuffix,\r\n autoSuggestProps: this.props,\r\n searchText: searchText,\r\n suggestions: keywordSuggestions,\r\n telemetryContent: this.telemetryContent\r\n })\r\n : undefined,\r\n autosuggestProduct:\r\n searchText && searchText.length > 0 && productSuggestions && productSuggestions.length > 0\r\n ? ProductSuggestionsComponent({\r\n searchProductSuggestClass: searchProductSuggestClass,\r\n searchPageURL: searchPageURL,\r\n searchQsp: searchQsp,\r\n hitPrefix: this.hitPrefix,\r\n hitSuffix: this.hitSuffix,\r\n autoSuggestProps: this.props,\r\n searchText: searchText,\r\n suggestions: productSuggestions,\r\n telemetry: this.props.telemetry,\r\n moduleType: this.props.typeName,\r\n moduleId: this.props.id,\r\n telemetryContent: this.telemetryContent\r\n })\r\n : undefined,\r\n autosuggestCategory:\r\n searchText && searchText.length > 0 && categorySuggestions && categorySuggestions.length > 0\r\n ? CategorySuggestionsComponent({\r\n searchCategorySuggestClass: searchCategorySuggestClass,\r\n searchPageURL: searchPageURL,\r\n searchQsp: searchQsp,\r\n hitPrefix: this.hitPrefix,\r\n hitSuffix: this.hitSuffix,\r\n autoSuggestProps: this.props,\r\n searchText: searchText,\r\n suggestions: categorySuggestions,\r\n searchRefiners: searchRefiners,\r\n telemetryContent: this.telemetryContent\r\n })\r\n : undefined,\r\n callbacks: {\r\n handleCancelSearchChange: this._handleCancelSearchChange\r\n },\r\n isSearchFormExpanded: this.state.isSearchFormExpanded\r\n };\r\n\r\n return this.props.renderView(viewProps) as React.ReactElement;\r\n }\r\n\r\n // tslint:disable-next-line:no-any\r\n private _focusOutTarget = (e: any): void => {\r\n const { suggestions } = this.state;\r\n\r\n if (\r\n suggestions &&\r\n suggestions.AllSearchResults &&\r\n e.target.closest('.ms-search') === null\r\n ) {\r\n this._clearAutoSuggestState();\r\n }\r\n };\r\n\r\n private _keyup = (e: KeyboardEvent): void => {\r\n const { suggestions } = this.state;\r\n\r\n if (suggestions && suggestions.AllSearchResults && e.keyCode === KeyCodes.Escape) {\r\n this._clearAutoSuggestState();\r\n } else if(this.state.isSearchFormExpanded && e.keyCode === KeyCodes.Escape) {\r\n if(this.state.isSearchFormExpanded) {\r\n this.setState({ isSearchFormExpanded: false });\r\n }\r\n }\r\n\r\n if (!((this.formReference.current && this.formReference.current.contains(e.target as unknown as Node)) ||\r\n (this.autoSuggestResultDiv.current && this.autoSuggestResultDiv.current.contains(e.target as unknown as Node)))) {\r\n if (suggestions && suggestions.AllSearchResults) {\r\n this._clearAutoSuggestState();\r\n }\r\n\r\n if(this.state.isSearchFormExpanded) {\r\n this.setState({ isSearchFormExpanded: false });\r\n }\r\n }\r\n };\r\n\r\n private _clearAutoSuggestState = (): void => {\r\n const {\r\n context: { actionContext },\r\n data: { searchState }\r\n } = this.props;\r\n\r\n if (this.searchTextInput.current && this.searchTextInput.current.value.length > 0) {\r\n searchState.searchText = '';\r\n searchState.defaultBasicSearchUrl = '';\r\n searchState.searchQueryStringParameter = '';\r\n actionContext ? actionContext.update(createSearchStateInput(searchState), searchState) : null;\r\n this.searchTextInput.current.value = '';\r\n }\r\n\r\n this.setState({ searchText: '', suggestions: undefined, searchRefiners: undefined });\r\n };\r\n\r\n private _handleInputChange = (query: string): void => {\r\n if (!query || query.length < this.maxChars) {\r\n this.setState({ searchText: query });\r\n }\r\n\r\n if (this.cancellabelDebounce) {\r\n this.cancellabelDebounce.cancel();\r\n }\r\n\r\n const {\r\n telemetry,\r\n context,\r\n data: { searchState }\r\n } = this.props;\r\n\r\n if (context) {\r\n if (query && query.length > 0) {\r\n if (query.length > this.maxChars) {\r\n return;\r\n }\r\n\r\n this.cancellabelDebounce = debounce(() => {\r\n getSearchSuggestionsAction(\r\n new AutoSuggestInput(\r\n query,\r\n this.topResultsCount,\r\n this._getSuggestionType(this.inputSuggestionType),\r\n this.hitPrefix,\r\n this.hitSuffix\r\n ),\r\n context.actionContext\r\n )\r\n .then(results => {\r\n this._getSearchRefiners(query)\r\n .then(refiners => {\r\n this.setState({ suggestions: results, searchRefiners: refiners,\r\n autoSuggestAriaLabel: this._setAutoSuggestResultCount(results) });\r\n })\r\n .catch(error => {\r\n this.setState({ suggestions: results, searchRefiners: undefined,\r\n autoSuggestAriaLabel: this._setAutoSuggestResultCount(results) });\r\n telemetry.exception(error);\r\n telemetry.debug('Unable to get refiners results');\r\n });\r\n })\r\n .catch(error => {\r\n this.setState({ suggestions: undefined, searchRefiners: undefined,\r\n autoSuggestAriaLabel: this._setAutoSuggestResultCount() });\r\n telemetry.exception(error);\r\n telemetry.debug('Unable to get auto suggest results');\r\n });\r\n }, this.waitTime);\r\n\r\n setTimeout(() => {\r\n this.cancellabelDebounce();\r\n }, 0);\r\n\r\n searchState.searchText = query;\r\n } else {\r\n this.setState({ suggestions: undefined, searchRefiners: undefined });\r\n searchState.searchText = '';\r\n }\r\n context.actionContext.update(createSearchStateInput(searchState), searchState);\r\n }\r\n };\r\n\r\n private _getSuggestionType = (suggestionTypes?: ISuggestionTypeCriterionData[]): string => {\r\n if (suggestionTypes && suggestionTypes.length > 0) {\r\n const distinctSuggestionTypes: string[] = [];\r\n suggestionTypes && suggestionTypes.forEach((suggestionTypeItem, index) => {\r\n suggestionTypeItem.SuggestionType && distinctSuggestionTypes.push(suggestionTypeItem.SuggestionType.charAt(0).toUpperCase() + suggestionTypeItem.SuggestionType.slice(1));\r\n });\r\n return distinctSuggestionTypes.join(',');\r\n }\r\n return 'Keyword, Product, ScopedCategory';\r\n };\r\n\r\n private async _getSearchRefiners(searchText: string): Promise {\r\n const { actionContext: ctx } = this.props.context;\r\n return getProductSearchRefinersAsync(\r\n { callerContext: ctx },\r\n {\r\n SearchCondition: searchText,\r\n Context: {\r\n ChannelId: +ctx.requestContext.apiSettings.channelId,\r\n CatalogId: +ctx.requestContext.apiSettings.catalogId\r\n }\r\n }\r\n );\r\n }\r\n\r\n private _handleSubmit = (\r\n e: React.MouseEvent | React.KeyboardEvent | React.FormEvent\r\n ): void => {\r\n const {\r\n config: { disableSubmitSearch },\r\n context: {\r\n actionContext,\r\n app: {\r\n config: { searchQueryStringParameter }\r\n }\r\n }\r\n } = this.props;\r\n\r\n const query = this.searchTextInput.current && this.searchTextInput.current.value;\r\n e.preventDefault();\r\n\r\n if (!query || (query && query.length === 0) || disableSubmitSearch) {\r\n this.searchTextInput && this.searchTextInput.current && this.searchTextInput.current.focus();\r\n } else {\r\n const searchQsp = searchQueryStringParameter || 'q';\r\n const searchURL = this._appendQueryParams(getUrlSync('search', actionContext) || '', query, searchQsp);\r\n document.location.href = searchURL;\r\n }\r\n };\r\n\r\n private _handleCancelSearchChange = (): void => {\r\n const { isSearchFormExpanded, suggestions } = this.state;\r\n\r\n if (!isSearchFormExpanded) {\r\n this.setState({\r\n isSearchFormExpanded: true,\r\n searchText: '',\r\n isInitialState: false\r\n });\r\n } else {\r\n if (suggestions && suggestions.AllSearchResults) {\r\n this._clearAutoSuggestState();\r\n }\r\n\r\n this.setState({ isSearchFormExpanded: false });\r\n }\r\n };\r\n\r\n private _appendQueryParams = (route: string, query: string, qsp: string): string => {\r\n if (route && route.length > 0) {\r\n return query && query.length > 0 ? `${route}${route.indexOf('?') === -1 ? '?' : '&'}${qsp}=${query}` : route;\r\n }\r\n return '';\r\n };\r\n\r\n private _setAutoSuggestResultCount = (result?: Autosuggestions) => {\r\n const itemCount = result?.AllSearchResults?.filter(i=>i.SuggestionType === SuggestionType.Product);\r\n if (this.autoSuggestResultScreenReaderDiv.current !== null) {\r\n const ariaLiveRegion = this.autoSuggestResultScreenReaderDiv.current;\r\n const suggestResultString = `${this.props.resources.autoSuggestFoundMessage} with ${itemCount?.length} results`;\r\n const emptyResultString = this.props.resources.noAutoSuggestionMessage;\r\n ariaLiveRegion.innerText = result && (result.AllSearchResults && result.AllSearchResults.length > 0) ? suggestResultString : emptyResultString;\r\n ariaLiveRegion.setAttribute('aria-live','assertive');\r\n return ariaLiveRegion.innerText;\r\n } else {\r\n return '';\r\n }\r\n };\r\n}\r\n\r\nexport default Search;\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport { INodeProps, Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\nimport { ISearchCategoryViewProps, ISearchFormViewProps, ISearchKeywordViewProps, ISearchProductViewProps } from './components';\r\nimport { ISearchViewProps } from './smwe-search';\r\n\r\nconst SearchView: React.FC = props => {\r\n const {\r\n Search,\r\n AutoSuggestAriaLabel,\r\n AutoSuggestAriaLabelText,\r\n searchText,\r\n AutoSuggest,\r\n KeywordSuggest,\r\n ProductSuggest,\r\n CategorySuggest,\r\n UlKeyword,\r\n UlProduct,\r\n UlCategory,\r\n form,\r\n autosuggestCategory,\r\n autosuggestKeyword,\r\n autosuggestProduct,\r\n SearchForm,\r\n FormWrapper,\r\n label\r\n } = props;\r\n\r\n return (\r\n \r\n {label}\r\n {_renderForm(form as ISearchFormViewProps, SearchForm, FormWrapper)}\r\n \r\n {searchText && searchText.length > 0 ?\r\n {AutoSuggestAriaLabelText} : ''\r\n }\r\n {_renderKeywordSuggestions(KeywordSuggest, UlKeyword, autosuggestKeyword)}\r\n {_renderProductSuggestions(ProductSuggest, UlProduct, autosuggestProduct)}\r\n {_renderCategorySuggestions(CategorySuggest, UlCategory, autosuggestCategory)}\r\n \r\n \r\n );\r\n};\r\n\r\nconst _renderForm = (form: ISearchFormViewProps, SearchForm: INodeProps, FormWrapper: INodeProps) => {\r\n return (\r\n \r\n \r\n {form.submitBtn}\r\n {form.label}\r\n {form.input}\r\n {form.cancelBtn}\r\n \r\n \r\n );\r\n};\r\n\r\nconst _renderKeywordSuggestions = (\r\n KeywordSuggest: INodeProps,\r\n UlKeyword: INodeProps,\r\n keywordSuggestions?: ISearchKeywordViewProps\r\n) => {\r\n return (\r\n keywordSuggestions && (\r\n \r\n \r\n {keywordSuggestions.text.map(text => {\r\n return text;\r\n })}\r\n \r\n \r\n )\r\n );\r\n};\r\n\r\nconst _renderProductSuggestions = (\r\n ProductSuggest: INodeProps,\r\n UlProduct: INodeProps,\r\n productSuggestions?: ISearchProductViewProps\r\n) => {\r\n return (\r\n productSuggestions && (\r\n \r\n \r\n {productSuggestions.title}\r\n {productSuggestions.items.map((item, index) => {\r\n return (\r\n \r\n \r\n {item.thumbnail}\r\n {item.text}\r\n {item.price}\r\n \r\n \r\n );\r\n })}\r\n \r\n \r\n )\r\n );\r\n};\r\n\r\nconst _renderCategorySuggestions = (\r\n CategorySuggest: INodeProps,\r\n UlCategory: INodeProps,\r\n categorySuggestions?: ISearchCategoryViewProps\r\n) => {\r\n return (\r\n categorySuggestions && (\r\n \r\n \r\n {categorySuggestions.title}\r\n {categorySuggestions.text.map(text => {\r\n return text;\r\n })}\r\n \r\n \r\n )\r\n );\r\n};\r\n\r\nexport default SearchView;","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n\r\n\r\nimport { INodeProps, Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\nimport { ISearchCategoryViewProps, ISearchFormViewProps, ISearchKeywordViewProps, ISearchProductViewProps } from '../../../modules/smwe-search/./components';\r\nimport { ISearchViewProps } from '../../../modules/smwe-search/./smwe-search';\r\n\r\nconst SearchView: React.FC = props => {\r\n const {\r\n Search,\r\n AutoSuggestAriaLabel,\r\n AutoSuggestAriaLabelText,\r\n searchText,\r\n AutoSuggest,\r\n KeywordSuggest,\r\n ProductSuggest,\r\n CategorySuggest,\r\n UlKeyword,\r\n UlProduct,\r\n UlCategory,\r\n form,\r\n autosuggestCategory,\r\n autosuggestKeyword,\r\n autosuggestProduct,\r\n SearchForm,\r\n FormWrapper,\r\n label\r\n } = props;\r\n\r\n return (\r\n \r\n {label}\r\n \r\n {_renderForm(form as ISearchFormViewProps, FormWrapper)}\r\n \r\n {searchText && searchText.length > 0 ?\r\n {AutoSuggestAriaLabelText} : ''\r\n }\r\n {_renderKeywordSuggestions(KeywordSuggest, UlKeyword, autosuggestKeyword)}\r\n {_renderProductSuggestions(ProductSuggest, UlProduct, autosuggestProduct)}\r\n {_renderCategorySuggestions(CategorySuggest, UlCategory, autosuggestCategory)}\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst _renderForm = (form: ISearchFormViewProps, FormWrapper: INodeProps) => {\r\n return (\r\n \r\n {form.submitBtn}\r\n
    \r\n
    \r\n {form.label}\r\n {form.input}\r\n
    \r\n {form.cancelBtn}\r\n \r\n );\r\n};\r\n\r\nconst _renderKeywordSuggestions = (\r\n KeywordSuggest: INodeProps,\r\n UlKeyword: INodeProps,\r\n keywordSuggestions?: ISearchKeywordViewProps\r\n) => {\r\n return (\r\n keywordSuggestions && (\r\n \r\n \r\n {keywordSuggestions.text.map(text => {\r\n return text;\r\n })}\r\n \r\n \r\n )\r\n );\r\n};\r\n\r\nconst _renderProductSuggestions = (\r\n ProductSuggest: INodeProps,\r\n UlProduct: INodeProps,\r\n productSuggestions?: ISearchProductViewProps\r\n) => {\r\n return (\r\n productSuggestions && (\r\n \r\n \r\n {productSuggestions.title}\r\n {productSuggestions.items.map((item, index) => {\r\n return (\r\n \r\n \r\n {item.thumbnail}\r\n {item.text}\r\n {item.price}\r\n \r\n \r\n );\r\n })}\r\n \r\n \r\n )\r\n );\r\n};\r\n\r\nconst _renderCategorySuggestions = (\r\n CategorySuggest: INodeProps,\r\n UlCategory: INodeProps,\r\n categorySuggestions?: ISearchCategoryViewProps\r\n) => {\r\n return (\r\n categorySuggestions && (\r\n \r\n \r\n {categorySuggestions.title}\r\n {categorySuggestions.text.map(text => {\r\n return text;\r\n })}\r\n \r\n \r\n )\r\n );\r\n};\r\n\r\nexport default SearchView;\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n\r\n\r\nimport { INodeProps, Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\nimport { ISearchCategoryViewProps, ISearchFormViewProps, ISearchKeywordViewProps, ISearchProductViewProps } from '../../../modules/smwe-search/./components';\r\nimport { ISearchViewProps } from '../../../modules/smwe-search/./smwe-search';\r\n\r\nconst SearchView: React.FC = props => {\r\n const {\r\n Search,\r\n AutoSuggestAriaLabel,\r\n AutoSuggestAriaLabelText,\r\n searchText,\r\n AutoSuggest,\r\n KeywordSuggest,\r\n ProductSuggest,\r\n CategorySuggest,\r\n UlKeyword,\r\n UlProduct,\r\n UlCategory,\r\n form,\r\n autosuggestCategory,\r\n autosuggestKeyword,\r\n autosuggestProduct,\r\n SearchForm,\r\n FormWrapper,\r\n label\r\n } = props;\r\n\r\n return (\r\n \r\n {label}\r\n {_renderForm(form as ISearchFormViewProps, SearchForm, FormWrapper)}\r\n \r\n {searchText && searchText.length > 0 ?\r\n {AutoSuggestAriaLabelText} : ''\r\n }\r\n {_renderKeywordSuggestions(KeywordSuggest, UlKeyword, autosuggestKeyword)}\r\n {_renderProductSuggestions(ProductSuggest, UlProduct, autosuggestProduct)}\r\n {_renderCategorySuggestions(CategorySuggest, UlCategory, autosuggestCategory)}\r\n \r\n \r\n );\r\n};\r\n\r\nconst _renderForm = (form: ISearchFormViewProps, SearchForm: INodeProps, FormWrapper: INodeProps) => {\r\n return (\r\n \r\n \r\n {form.submitBtn}\r\n {form.label}\r\n {form.input}\r\n {form.cancelBtn}\r\n \r\n \r\n );\r\n};\r\n\r\nconst _renderKeywordSuggestions = (\r\n KeywordSuggest: INodeProps,\r\n UlKeyword: INodeProps,\r\n keywordSuggestions?: ISearchKeywordViewProps\r\n) => {\r\n return (\r\n keywordSuggestions && (\r\n \r\n \r\n {keywordSuggestions.text.map(text => {\r\n return text;\r\n })}\r\n \r\n \r\n )\r\n );\r\n};\r\n\r\nconst _renderProductSuggestions = (\r\n ProductSuggest: INodeProps,\r\n UlProduct: INodeProps,\r\n productSuggestions?: ISearchProductViewProps\r\n) => {\r\n return (\r\n productSuggestions && (\r\n \r\n \r\n {productSuggestions.title}\r\n {productSuggestions.items.map((item, index) => {\r\n return (\r\n \r\n \r\n {item.thumbnail}\r\n {item.text}\r\n {item.price !== 0 && (
    {item.price}
    )}\r\n
    \r\n
    \r\n );\r\n })}\r\n
    \r\n
    \r\n )\r\n );\r\n};\r\n\r\nconst _renderCategorySuggestions = (\r\n CategorySuggest: INodeProps,\r\n UlCategory: INodeProps,\r\n categorySuggestions?: ISearchCategoryViewProps\r\n) => {\r\n return (\r\n categorySuggestions && (\r\n \r\n \r\n {categorySuggestions.title}\r\n {categorySuggestions.text.map(text => {\r\n return text;\r\n })}\r\n \r\n \r\n )\r\n );\r\n};\r\n\r\nexport default SearchView;","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n\r\n\r\nimport { INodeProps, Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\nimport { ISearchCategoryViewProps, ISearchFormViewProps, ISearchKeywordViewProps, ISearchProductViewProps } from '../../../modules/smwe-search/./components';\r\nimport { ISearchViewProps } from '../../../modules/smwe-search/./smwe-search';\r\n\r\nconst SearchView: React.FC = props => {\r\n const {\r\n Search,\r\n AutoSuggestAriaLabel,\r\n AutoSuggestAriaLabelText,\r\n searchText,\r\n AutoSuggest,\r\n KeywordSuggest,\r\n ProductSuggest,\r\n CategorySuggest,\r\n UlKeyword,\r\n UlProduct,\r\n UlCategory,\r\n form,\r\n autosuggestCategory,\r\n autosuggestKeyword,\r\n autosuggestProduct,\r\n SearchForm,\r\n FormWrapper,\r\n label\r\n } = props;\r\n\r\n return (\r\n \r\n {label}\r\n {_renderForm(form as ISearchFormViewProps, SearchForm, FormWrapper)}\r\n \r\n {searchText && searchText.length > 0 ?\r\n {AutoSuggestAriaLabelText} : ''\r\n }\r\n {_renderKeywordSuggestions(KeywordSuggest, UlKeyword, autosuggestKeyword)}\r\n {_renderProductSuggestions(ProductSuggest, UlProduct, autosuggestProduct)}\r\n {_renderCategorySuggestions(CategorySuggest, UlCategory, autosuggestCategory)}\r\n \r\n \r\n );\r\n};\r\n\r\nconst _renderForm = (form: ISearchFormViewProps, SearchForm: INodeProps, FormWrapper: INodeProps) => {\r\n return (\r\n \r\n \r\n {form.submitBtn}\r\n {form.label}\r\n {form.input}\r\n {form.cancelBtn}\r\n \r\n \r\n );\r\n};\r\n\r\nconst _renderKeywordSuggestions = (\r\n KeywordSuggest: INodeProps,\r\n UlKeyword: INodeProps,\r\n keywordSuggestions?: ISearchKeywordViewProps\r\n) => {\r\n return (\r\n keywordSuggestions && (\r\n \r\n \r\n {keywordSuggestions.text.map(text => {\r\n return text;\r\n })}\r\n \r\n \r\n )\r\n );\r\n};\r\n\r\nconst _renderProductSuggestions = (\r\n ProductSuggest: INodeProps,\r\n UlProduct: INodeProps,\r\n productSuggestions?: ISearchProductViewProps\r\n) => {\r\n return (\r\n productSuggestions && (\r\n \r\n \r\n {productSuggestions.title}\r\n {productSuggestions.items.map((item, index) => {\r\n return (\r\n \r\n \r\n {item.thumbnail}\r\n {item.text}\r\n {item.price !== 0 && (
    {item.price}
    )}\r\n
    \r\n
    \r\n );\r\n })}\r\n
    \r\n
    \r\n )\r\n );\r\n};\r\n\r\nconst _renderCategorySuggestions = (\r\n CategorySuggest: INodeProps,\r\n UlCategory: INodeProps,\r\n categorySuggestions?: ISearchCategoryViewProps\r\n) => {\r\n return (\r\n categorySuggestions && (\r\n \r\n \r\n {categorySuggestions.title}\r\n {categorySuggestions.text.map(text => {\r\n return text;\r\n })}\r\n \r\n \r\n )\r\n );\r\n};\r\n\r\nexport default SearchView;","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n\r\n\r\nimport { INodeProps, Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\nimport { ISearchCategoryViewProps, ISearchFormViewProps, ISearchKeywordViewProps, ISearchProductViewProps } from '../../../modules/smwe-search/./components';\r\nimport { ISearchViewProps } from '../../../modules/smwe-search/./smwe-search';\r\n\r\nconst SearchView: React.FC = props => {\r\n const {\r\n Search,\r\n AutoSuggestAriaLabel,\r\n AutoSuggestAriaLabelText,\r\n searchText,\r\n AutoSuggest,\r\n KeywordSuggest,\r\n ProductSuggest,\r\n CategorySuggest,\r\n UlKeyword,\r\n UlProduct,\r\n UlCategory,\r\n form,\r\n autosuggestCategory,\r\n autosuggestKeyword,\r\n autosuggestProduct,\r\n SearchForm,\r\n FormWrapper,\r\n label\r\n } = props;\r\n\r\n return (\r\n \r\n {label}\r\n {_renderForm(form as ISearchFormViewProps, SearchForm, FormWrapper)}\r\n \r\n {searchText && searchText.length > 0 ?\r\n {AutoSuggestAriaLabelText} : ''\r\n }\r\n {_renderKeywordSuggestions(KeywordSuggest, UlKeyword, autosuggestKeyword)}\r\n {_renderProductSuggestions(ProductSuggest, UlProduct, autosuggestProduct)}\r\n {_renderCategorySuggestions(CategorySuggest, UlCategory, autosuggestCategory)}\r\n \r\n \r\n );\r\n};\r\n\r\nconst _renderForm = (form: ISearchFormViewProps, SearchForm: INodeProps, FormWrapper: INodeProps) => {\r\n return (\r\n \r\n \r\n {form.submitBtn}\r\n {form.label}\r\n {form.input}\r\n {form.cancelBtn}\r\n \r\n \r\n );\r\n};\r\n\r\nconst _renderKeywordSuggestions = (\r\n KeywordSuggest: INodeProps,\r\n UlKeyword: INodeProps,\r\n keywordSuggestions?: ISearchKeywordViewProps\r\n) => {\r\n return (\r\n keywordSuggestions && (\r\n \r\n \r\n {keywordSuggestions.text.map(text => {\r\n return text;\r\n })}\r\n \r\n \r\n )\r\n );\r\n};\r\n\r\nconst _renderProductSuggestions = (\r\n ProductSuggest: INodeProps,\r\n UlProduct: INodeProps,\r\n productSuggestions?: ISearchProductViewProps\r\n) => {\r\n return (\r\n productSuggestions && (\r\n \r\n \r\n {productSuggestions.title}\r\n {productSuggestions.items.map((item, index) => {\r\n return (\r\n \r\n \r\n {item.thumbnail}\r\n {item.text}\r\n {item.price !== 0 && (
    {item.price}
    )}\r\n
    \r\n
    \r\n );\r\n })}\r\n
    \r\n
    \r\n )\r\n );\r\n};\r\n\r\nconst _renderCategorySuggestions = (\r\n CategorySuggest: INodeProps,\r\n UlCategory: INodeProps,\r\n categorySuggestions?: ISearchCategoryViewProps\r\n) => {\r\n return (\r\n categorySuggestions && (\r\n \r\n \r\n {categorySuggestions.title}\r\n {categorySuggestions.text.map(text => {\r\n return text;\r\n })}\r\n \r\n \r\n )\r\n );\r\n};\r\n\r\nexport default SearchView;","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n\r\n\r\nimport { INodeProps, Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\nimport { ISearchCategoryViewProps, ISearchFormViewProps, ISearchKeywordViewProps, ISearchProductViewProps } from '../../../modules/smwe-search/./components';\r\nimport { ISearchViewProps } from '../../../modules/smwe-search/./smwe-search';\r\n\r\nconst SearchView: React.FC = props => {\r\n const {\r\n Search,\r\n AutoSuggestAriaLabel,\r\n AutoSuggestAriaLabelText,\r\n searchText,\r\n AutoSuggest,\r\n KeywordSuggest,\r\n ProductSuggest,\r\n CategorySuggest,\r\n UlKeyword,\r\n UlProduct,\r\n UlCategory,\r\n form,\r\n autosuggestCategory,\r\n autosuggestKeyword,\r\n autosuggestProduct,\r\n SearchForm,\r\n FormWrapper,\r\n label\r\n } = props;\r\n\r\n return (\r\n \r\n {label}\r\n {_renderForm(form as ISearchFormViewProps, SearchForm, FormWrapper)}\r\n \r\n {searchText && searchText.length > 0 ?\r\n {AutoSuggestAriaLabelText} : ''\r\n }\r\n {_renderKeywordSuggestions(KeywordSuggest, UlKeyword, autosuggestKeyword)}\r\n {_renderProductSuggestions(ProductSuggest, UlProduct, autosuggestProduct)}\r\n {_renderCategorySuggestions(CategorySuggest, UlCategory, autosuggestCategory)}\r\n \r\n \r\n );\r\n};\r\n\r\nconst _renderForm = (form: ISearchFormViewProps, SearchForm: INodeProps, FormWrapper: INodeProps) => {\r\n return (\r\n \r\n \r\n {form.submitBtn}\r\n {form.label}\r\n {form.input}\r\n {form.cancelBtn}\r\n \r\n \r\n );\r\n};\r\n\r\nconst _renderKeywordSuggestions = (\r\n KeywordSuggest: INodeProps,\r\n UlKeyword: INodeProps,\r\n keywordSuggestions?: ISearchKeywordViewProps\r\n) => {\r\n return (\r\n keywordSuggestions && (\r\n \r\n \r\n {keywordSuggestions.text.map(text => {\r\n return text;\r\n })}\r\n \r\n \r\n )\r\n );\r\n};\r\n\r\nconst _renderProductSuggestions = (\r\n ProductSuggest: INodeProps,\r\n UlProduct: INodeProps,\r\n productSuggestions?: ISearchProductViewProps\r\n) => {\r\n return (\r\n productSuggestions && (\r\n \r\n \r\n {productSuggestions.title}\r\n {productSuggestions.items.map((item, index) => {\r\n return (\r\n \r\n \r\n {item.thumbnail}\r\n {item.text}\r\n {item.price !== 0 && (
    {item.price}
    )}\r\n
    \r\n
    \r\n );\r\n })}\r\n
    \r\n
    \r\n )\r\n );\r\n};\r\n\r\nconst _renderCategorySuggestions = (\r\n CategorySuggest: INodeProps,\r\n UlCategory: INodeProps,\r\n categorySuggestions?: ISearchCategoryViewProps\r\n) => {\r\n return (\r\n categorySuggestions && (\r\n \r\n \r\n {categorySuggestions.title}\r\n {categorySuggestions.text.map(text => {\r\n return text;\r\n })}\r\n \r\n \r\n )\r\n );\r\n};\r\n\r\nexport default SearchView;","import { ICarouselViewProps } from '@msdyn365-commerce-modules/carousel/dist/types/modules/carousel/carousel';\r\nimport { Carousel } from '@msdyn365-commerce/components';\r\nimport classnames from 'classnames';\r\nimport * as React from 'react';\r\nimport { ICarouselProps } from '../definition-extensions/carousel.ext.props.autogenerated';\r\n\r\nconst CarouselView: React.FC> = props => (\r\n \r\n \r\n \r\n);\r\n\r\nexport default CarouselView;\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n\r\n\r\nimport { INodeProps, Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\nimport { ISearchCategoryViewProps, ISearchFormViewProps, ISearchKeywordViewProps, ISearchProductViewProps } from '../../../modules/smwe-search/./components';\r\nimport { ISearchViewProps } from '../../../modules/smwe-search/./smwe-search';\r\n\r\nconst SearchView: React.FC = props => {\r\n const {\r\n Search,\r\n AutoSuggestAriaLabel,\r\n AutoSuggestAriaLabelText,\r\n searchText,\r\n AutoSuggest,\r\n KeywordSuggest,\r\n ProductSuggest,\r\n CategorySuggest,\r\n UlKeyword,\r\n UlProduct,\r\n UlCategory,\r\n form,\r\n autosuggestCategory,\r\n autosuggestKeyword,\r\n autosuggestProduct,\r\n SearchForm,\r\n FormWrapper,\r\n label\r\n } = props;\r\n\r\n return (\r\n \r\n {label}\r\n {_renderForm(form as ISearchFormViewProps, SearchForm, FormWrapper)}\r\n \r\n {searchText && searchText.length > 0 ?\r\n {AutoSuggestAriaLabelText} : ''\r\n }\r\n {_renderKeywordSuggestions(KeywordSuggest, UlKeyword, autosuggestKeyword)}\r\n {_renderProductSuggestions(ProductSuggest, UlProduct, autosuggestProduct)}\r\n {_renderCategorySuggestions(CategorySuggest, UlCategory, autosuggestCategory)}\r\n \r\n \r\n );\r\n};\r\n\r\nconst _renderForm = (form: ISearchFormViewProps, SearchForm: INodeProps, FormWrapper: INodeProps) => {\r\n return (\r\n \r\n \r\n {form.submitBtn}\r\n {form.label}\r\n {form.input}\r\n {form.cancelBtn}\r\n \r\n \r\n );\r\n};\r\n\r\nconst _renderKeywordSuggestions = (\r\n KeywordSuggest: INodeProps,\r\n UlKeyword: INodeProps,\r\n keywordSuggestions?: ISearchKeywordViewProps\r\n) => {\r\n return (\r\n keywordSuggestions && (\r\n \r\n \r\n {keywordSuggestions.text.map(text => {\r\n return text;\r\n })}\r\n \r\n \r\n )\r\n );\r\n};\r\n\r\nconst _renderProductSuggestions = (\r\n ProductSuggest: INodeProps,\r\n UlProduct: INodeProps,\r\n productSuggestions?: ISearchProductViewProps\r\n) => {\r\n return (\r\n productSuggestions && (\r\n \r\n \r\n {productSuggestions.title}\r\n {productSuggestions.items.map((item, index) => {\r\n return (\r\n \r\n \r\n {item.thumbnail}\r\n {item.text}\r\n {item.price !== 0 && (
    {item.price}
    )}\r\n
    \r\n
    \r\n );\r\n })}\r\n
    \r\n
    \r\n )\r\n );\r\n};\r\n\r\nconst _renderCategorySuggestions = (\r\n CategorySuggest: INodeProps,\r\n UlCategory: INodeProps,\r\n categorySuggestions?: ISearchCategoryViewProps\r\n) => {\r\n return (\r\n categorySuggestions && (\r\n \r\n \r\n {categorySuggestions.title}\r\n {categorySuggestions.text.map(text => {\r\n return text;\r\n })}\r\n \r\n \r\n )\r\n );\r\n};\r\n\r\nexport default SearchView;","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n\r\n\r\nimport { INodeProps, Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\nimport { ISearchCategoryViewProps, ISearchFormViewProps, ISearchKeywordViewProps, ISearchProductViewProps } from '../../../modules/smwe-search/./components';\r\nimport { ISearchViewProps } from '../../../modules/smwe-search/./smwe-search';\r\n\r\nconst SearchView: React.FC = props => {\r\n const {\r\n Search,\r\n AutoSuggestAriaLabel,\r\n AutoSuggestAriaLabelText,\r\n searchText,\r\n AutoSuggest,\r\n KeywordSuggest,\r\n ProductSuggest,\r\n CategorySuggest,\r\n UlKeyword,\r\n UlProduct,\r\n UlCategory,\r\n form,\r\n autosuggestCategory,\r\n autosuggestKeyword,\r\n autosuggestProduct,\r\n SearchForm,\r\n FormWrapper,\r\n label\r\n } = props;\r\n\r\n return (\r\n \r\n {label}\r\n {_renderForm(form as ISearchFormViewProps, SearchForm, FormWrapper)}\r\n \r\n {searchText && searchText.length > 0 ?\r\n {AutoSuggestAriaLabelText} : ''\r\n }\r\n {_renderKeywordSuggestions(KeywordSuggest, UlKeyword, autosuggestKeyword)}\r\n {_renderProductSuggestions(ProductSuggest, UlProduct, autosuggestProduct)}\r\n {_renderCategorySuggestions(CategorySuggest, UlCategory, autosuggestCategory)}\r\n \r\n \r\n );\r\n};\r\n\r\nconst _renderForm = (form: ISearchFormViewProps, SearchForm: INodeProps, FormWrapper: INodeProps) => {\r\n return (\r\n \r\n \r\n {form.submitBtn}\r\n {form.label}\r\n {form.input}\r\n {form.cancelBtn}\r\n \r\n \r\n );\r\n};\r\n\r\nconst _renderKeywordSuggestions = (\r\n KeywordSuggest: INodeProps,\r\n UlKeyword: INodeProps,\r\n keywordSuggestions?: ISearchKeywordViewProps\r\n) => {\r\n return (\r\n keywordSuggestions && (\r\n \r\n \r\n {keywordSuggestions.text.map(text => {\r\n return text;\r\n })}\r\n \r\n \r\n )\r\n );\r\n};\r\n\r\nconst _renderProductSuggestions = (\r\n ProductSuggest: INodeProps,\r\n UlProduct: INodeProps,\r\n productSuggestions?: ISearchProductViewProps\r\n) => {\r\n return (\r\n productSuggestions && (\r\n \r\n \r\n {productSuggestions.title}\r\n {productSuggestions.items.map((item, index) => {\r\n return (\r\n \r\n \r\n {item.thumbnail}\r\n {item.text}\r\n {item.price !== 0 && (
    {item.price}
    )}\r\n
    \r\n
    \r\n );\r\n })}\r\n
    \r\n
    \r\n )\r\n );\r\n};\r\n\r\nconst _renderCategorySuggestions = (\r\n CategorySuggest: INodeProps,\r\n UlCategory: INodeProps,\r\n categorySuggestions?: ISearchCategoryViewProps\r\n) => {\r\n return (\r\n categorySuggestions && (\r\n \r\n \r\n {categorySuggestions.title}\r\n {categorySuggestions.text.map(text => {\r\n return text;\r\n })}\r\n \r\n \r\n )\r\n );\r\n};\r\n\r\nexport default SearchView;","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n\r\n\r\nimport { INodeProps, Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\nimport { ISearchCategoryViewProps, ISearchFormViewProps, ISearchKeywordViewProps, ISearchProductViewProps } from '../../../modules/smwe-search/./components';\r\nimport { ISearchViewProps } from '../../../modules/smwe-search/./smwe-search';\r\n\r\nconst SearchView: React.FC = props => {\r\n const {\r\n Search,\r\n AutoSuggestAriaLabel,\r\n AutoSuggestAriaLabelText,\r\n searchText,\r\n AutoSuggest,\r\n KeywordSuggest,\r\n ProductSuggest,\r\n CategorySuggest,\r\n UlKeyword,\r\n UlProduct,\r\n UlCategory,\r\n form,\r\n autosuggestCategory,\r\n autosuggestKeyword,\r\n autosuggestProduct,\r\n SearchForm,\r\n FormWrapper,\r\n label\r\n } = props;\r\n\r\n return (\r\n \r\n {label}\r\n {_renderForm(form as ISearchFormViewProps, SearchForm, FormWrapper)}\r\n \r\n {searchText && searchText.length > 0 ?\r\n {AutoSuggestAriaLabelText} : ''\r\n }\r\n {_renderKeywordSuggestions(KeywordSuggest, UlKeyword, autosuggestKeyword)}\r\n {_renderProductSuggestions(ProductSuggest, UlProduct, autosuggestProduct)}\r\n {_renderCategorySuggestions(CategorySuggest, UlCategory, autosuggestCategory)}\r\n \r\n \r\n );\r\n};\r\n\r\nconst _renderForm = (form: ISearchFormViewProps, SearchForm: INodeProps, FormWrapper: INodeProps) => {\r\n return (\r\n \r\n \r\n {form.submitBtn}\r\n {form.label}\r\n {form.input}\r\n {form.cancelBtn}\r\n \r\n \r\n );\r\n};\r\n\r\nconst _renderKeywordSuggestions = (\r\n KeywordSuggest: INodeProps,\r\n UlKeyword: INodeProps,\r\n keywordSuggestions?: ISearchKeywordViewProps\r\n) => {\r\n return (\r\n keywordSuggestions && (\r\n \r\n \r\n {keywordSuggestions.text.map(text => {\r\n return text;\r\n })}\r\n \r\n \r\n )\r\n );\r\n};\r\n\r\nconst _renderProductSuggestions = (\r\n ProductSuggest: INodeProps,\r\n UlProduct: INodeProps,\r\n productSuggestions?: ISearchProductViewProps\r\n) => {\r\n return (\r\n productSuggestions && (\r\n \r\n \r\n {productSuggestions.title}\r\n {productSuggestions.items.map((item, index) => {\r\n return (\r\n \r\n \r\n {item.thumbnail}\r\n {item.text}\r\n {item.price !== 0 && (
    {item.price}
    )}\r\n
    \r\n
    \r\n );\r\n })}\r\n
    \r\n
    \r\n )\r\n );\r\n};\r\n\r\nconst _renderCategorySuggestions = (\r\n CategorySuggest: INodeProps,\r\n UlCategory: INodeProps,\r\n categorySuggestions?: ISearchCategoryViewProps\r\n) => {\r\n return (\r\n categorySuggestions && (\r\n \r\n \r\n {categorySuggestions.title}\r\n {categorySuggestions.text.map(text => {\r\n return text;\r\n })}\r\n \r\n \r\n )\r\n );\r\n};\r\n\r\nexport default SearchView;","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n\r\nimport { ICarouselViewProps } from '@msdyn365-commerce-modules/carousel/src/modules/carousel/./carousel';\r\nimport { Carousel } from '@msdyn365-commerce/components';\r\nimport classnames from 'classnames';\r\nimport * as React from 'react';\r\n\r\nconst CarouselView: React.FC = props => (\r\n \r\n \r\n \r\n);\r\n\r\nexport default CarouselView;\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n\r\n\r\nimport { INodeProps, Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\nimport { ISearchCategoryViewProps, ISearchFormViewProps, ISearchKeywordViewProps, ISearchProductViewProps } from '../../../modules/smwe-search/./components';\r\nimport { ISearchViewProps } from '../../../modules/smwe-search/./smwe-search';\r\n\r\nconst SearchView: React.FC = props => {\r\n const {\r\n Search,\r\n form,\r\n SearchForm,\r\n FormWrapper,\r\n label\r\n } = props;\r\n\r\n React.useEffect(() => {\r\n document.body.addEventListener('keydown', (e: any) => handleKeyDown(e));\r\n });\r\n\r\n return (\r\n \r\n {label}\r\n \r\n {_renderForm(form as ISearchFormViewProps, FormWrapper, props)}\r\n \r\n \r\n );\r\n};\r\n\r\nconst handleKeyDown = (e: React.KeyboardEvent): void => {\r\n const showClass = document.getElementsByClassName('ms-search__form bx-show');\r\n if (showClass) {\r\n //Fetch node list from which required elements could be grabbed as needed.\r\n const focusable = document.getElementById('SearchFormModal');\r\n const elements = focusable?.querySelectorAll('input, a, select, textarea, li, [tabindex]:not([tabindex=\"-1\"]), button') as NodeListOf;\r\n const firstFocusable = elements[0];\r\n const lastFocusable = elements[elements.length - 1];\r\n\r\n if (e.ctrlKey || e.altKey) {\r\n return;\r\n }\r\n\r\n const keys = {\r\n 9: () => { //9 = TAB\r\n if (e.shiftKey && e.target === firstFocusable) {\r\n lastFocusable.focus();\r\n console.log('Last Focusable');\r\n e.preventDefault();\r\n }\r\n\r\n if (e.target === lastFocusable) {\r\n firstFocusable.focus();\r\n console.log('First Focusable');\r\n e.preventDefault();\r\n }\r\n }\r\n };\r\n if (keys[e.keyCode]) {\r\n keys[e.keyCode]();\r\n }\r\n }\r\n};\r\n\r\nconst _renderForm = (form: ISearchFormViewProps, FormWrapper: INodeProps, props: ISearchViewProps) => {\r\n const {\r\n AutoSuggestAriaLabel,\r\n AutoSuggestAriaLabelText,\r\n searchText,\r\n AutoSuggest,\r\n KeywordSuggest,\r\n ProductSuggest,\r\n CategorySuggest,\r\n UlKeyword,\r\n UlProduct,\r\n UlCategory,\r\n autosuggestCategory,\r\n autosuggestKeyword,\r\n autosuggestProduct,\r\n } = props;\r\n return (\r\n \r\n {form.submitBtn}\r\n
    \r\n
    \r\n {form.label}\r\n {form.input}\r\n \r\n {searchText && searchText.length > 0 ?\r\n {AutoSuggestAriaLabelText} : ''\r\n }\r\n {_renderKeywordSuggestions(KeywordSuggest, UlKeyword, autosuggestKeyword)}\r\n {_renderProductSuggestions(ProductSuggest, UlProduct, autosuggestProduct)}\r\n {_renderCategorySuggestions(CategorySuggest, UlCategory, autosuggestCategory)}\r\n \r\n
    \r\n {form.cancelBtn}\r\n \r\n );\r\n};\r\n\r\nconst _renderKeywordSuggestions = (\r\n KeywordSuggest: INodeProps,\r\n UlKeyword: INodeProps,\r\n keywordSuggestions?: ISearchKeywordViewProps\r\n) => {\r\n return (\r\n keywordSuggestions && (\r\n \r\n \r\n {keywordSuggestions.text.map(text => {\r\n return text;\r\n })}\r\n \r\n \r\n )\r\n );\r\n};\r\n\r\nconst _renderProductSuggestions = (\r\n ProductSuggest: INodeProps,\r\n UlProduct: INodeProps,\r\n productSuggestions?: ISearchProductViewProps\r\n) => {\r\n return (\r\n productSuggestions && (\r\n /* eslint-disable react/no-unknown-property */\r\n \r\n \r\n {productSuggestions.title}\r\n {productSuggestions.items.map((item, index) => {\r\n return (\r\n \r\n \r\n {item.thumbnail}\r\n {item.text}\r\n {item.price}\r\n \r\n \r\n );\r\n })}\r\n \r\n \r\n )\r\n );\r\n};\r\n\r\nconst _renderCategorySuggestions = (\r\n CategorySuggest: INodeProps,\r\n UlCategory: INodeProps,\r\n categorySuggestions?: ISearchCategoryViewProps\r\n) => {\r\n return (\r\n categorySuggestions && (\r\n \r\n \r\n {categorySuggestions.title}\r\n {categorySuggestions.text.map(text => {\r\n return text;\r\n })}\r\n \r\n \r\n )\r\n );\r\n};\r\n\r\nexport default SearchView;","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n\r\n\r\nimport { INodeProps, Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\nimport { ISearchCategoryViewProps, ISearchFormViewProps, ISearchKeywordViewProps, ISearchProductViewProps } from '../../../modules/smwe-search/./components';\r\nimport { ISearchViewProps } from '../../../modules/smwe-search/./smwe-search';\r\n\r\nconst SearchView: React.FC = props => {\r\n const {\r\n Search,\r\n AutoSuggestAriaLabel,\r\n AutoSuggestAriaLabelText,\r\n searchText,\r\n AutoSuggest,\r\n KeywordSuggest,\r\n ProductSuggest,\r\n CategorySuggest,\r\n UlKeyword,\r\n UlProduct,\r\n UlCategory,\r\n form,\r\n autosuggestCategory,\r\n autosuggestKeyword,\r\n autosuggestProduct,\r\n SearchForm,\r\n FormWrapper,\r\n label\r\n } = props;\r\n\r\n return (\r\n \r\n {label}\r\n {_renderForm(form as ISearchFormViewProps, SearchForm, FormWrapper)}\r\n \r\n {searchText && searchText.length > 0 ?\r\n {AutoSuggestAriaLabelText} : ''\r\n }\r\n {_renderKeywordSuggestions(KeywordSuggest, UlKeyword, autosuggestKeyword)}\r\n {_renderProductSuggestions(ProductSuggest, UlProduct, autosuggestProduct)}\r\n {_renderCategorySuggestions(CategorySuggest, UlCategory, autosuggestCategory)}\r\n \r\n \r\n );\r\n};\r\n\r\nconst _renderForm = (form: ISearchFormViewProps, SearchForm: INodeProps, FormWrapper: INodeProps) => {\r\n return (\r\n \r\n \r\n {form.submitBtn}\r\n {form.label}\r\n {form.input}\r\n {form.cancelBtn}\r\n \r\n \r\n );\r\n};\r\n\r\nconst _renderKeywordSuggestions = (\r\n KeywordSuggest: INodeProps,\r\n UlKeyword: INodeProps,\r\n keywordSuggestions?: ISearchKeywordViewProps\r\n) => {\r\n return (\r\n keywordSuggestions && (\r\n \r\n \r\n {keywordSuggestions.text.map(text => {\r\n return text;\r\n })}\r\n \r\n \r\n )\r\n );\r\n};\r\n\r\nconst _renderProductSuggestions = (\r\n ProductSuggest: INodeProps,\r\n UlProduct: INodeProps,\r\n productSuggestions?: ISearchProductViewProps\r\n) => {\r\n return (\r\n productSuggestions && (\r\n \r\n \r\n {productSuggestions.title}\r\n {productSuggestions.items.map((item, index) => {\r\n return (\r\n \r\n \r\n {item.thumbnail}\r\n {item.text}\r\n {item.price !== 0 && (
    {item.price}
    )}\r\n
    \r\n
    \r\n );\r\n })}\r\n
    \r\n
    \r\n )\r\n );\r\n};\r\n\r\nconst _renderCategorySuggestions = (\r\n CategorySuggest: INodeProps,\r\n UlCategory: INodeProps,\r\n categorySuggestions?: ISearchCategoryViewProps\r\n) => {\r\n return (\r\n categorySuggestions && (\r\n \r\n \r\n {categorySuggestions.title}\r\n {categorySuggestions.text.map(text => {\r\n return text;\r\n })}\r\n \r\n \r\n )\r\n );\r\n};\r\n\r\nexport default SearchView;","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n\r\n\r\nimport { INodeProps, Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\nimport { ISearchCategoryViewProps, ISearchFormViewProps, ISearchKeywordViewProps, ISearchProductViewProps } from '../../../modules/smwe-search/./components';\r\nimport { ISearchViewProps } from '../../../modules/smwe-search/./smwe-search';\r\n\r\nconst SearchView: React.FC = props => {\r\n const {\r\n Search,\r\n AutoSuggestAriaLabel,\r\n AutoSuggestAriaLabelText,\r\n searchText,\r\n AutoSuggest,\r\n KeywordSuggest,\r\n ProductSuggest,\r\n CategorySuggest,\r\n UlKeyword,\r\n UlProduct,\r\n UlCategory,\r\n form,\r\n autosuggestCategory,\r\n autosuggestKeyword,\r\n autosuggestProduct,\r\n SearchForm,\r\n FormWrapper,\r\n label\r\n } = props;\r\n\r\n return (\r\n \r\n {label}\r\n {_renderForm(form as ISearchFormViewProps, SearchForm, FormWrapper)}\r\n \r\n {searchText && searchText.length > 0 ?\r\n {AutoSuggestAriaLabelText} : ''\r\n }\r\n {_renderKeywordSuggestions(KeywordSuggest, UlKeyword, autosuggestKeyword)}\r\n {_renderProductSuggestions(ProductSuggest, UlProduct, autosuggestProduct)}\r\n {_renderCategorySuggestions(CategorySuggest, UlCategory, autosuggestCategory)}\r\n \r\n \r\n );\r\n};\r\n\r\nconst _renderForm = (form: ISearchFormViewProps, SearchForm: INodeProps, FormWrapper: INodeProps) => {\r\n return (\r\n \r\n \r\n {form.submitBtn}\r\n {form.label}\r\n {form.input}\r\n {form.cancelBtn}\r\n \r\n \r\n );\r\n};\r\n\r\nconst _renderKeywordSuggestions = (\r\n KeywordSuggest: INodeProps,\r\n UlKeyword: INodeProps,\r\n keywordSuggestions?: ISearchKeywordViewProps\r\n) => {\r\n return (\r\n keywordSuggestions && (\r\n \r\n \r\n {keywordSuggestions.text.map(text => {\r\n return text;\r\n })}\r\n \r\n \r\n )\r\n );\r\n};\r\n\r\nconst _renderProductSuggestions = (\r\n ProductSuggest: INodeProps,\r\n UlProduct: INodeProps,\r\n productSuggestions?: ISearchProductViewProps\r\n) => {\r\n return (\r\n productSuggestions && (\r\n \r\n \r\n {productSuggestions.title}\r\n {productSuggestions.items.map((item, index) => {\r\n return (\r\n \r\n \r\n {item.thumbnail}\r\n {item.text}\r\n {item.price !== 0 && (
    {item.price}
    )}\r\n
    \r\n
    \r\n );\r\n })}\r\n
    \r\n
    \r\n )\r\n );\r\n};\r\n\r\nconst _renderCategorySuggestions = (\r\n CategorySuggest: INodeProps,\r\n UlCategory: INodeProps,\r\n categorySuggestions?: ISearchCategoryViewProps\r\n) => {\r\n return (\r\n categorySuggestions && (\r\n \r\n \r\n {categorySuggestions.title}\r\n {categorySuggestions.text.map(text => {\r\n return text;\r\n })}\r\n \r\n \r\n )\r\n );\r\n};\r\n\r\nexport default SearchView;","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n\r\n\r\nimport { INodeProps, Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\nimport { ISearchCategoryViewProps, ISearchFormViewProps, ISearchKeywordViewProps, ISearchProductViewProps } from '../../../modules/smwe-search/./components';\r\nimport { ISearchViewProps } from '../../../modules/smwe-search/./smwe-search';\r\n\r\nconst SearchView: React.FC = props => {\r\n const {\r\n Search,\r\n AutoSuggestAriaLabel,\r\n AutoSuggestAriaLabelText,\r\n searchText,\r\n AutoSuggest,\r\n KeywordSuggest,\r\n ProductSuggest,\r\n CategorySuggest,\r\n UlKeyword,\r\n UlProduct,\r\n UlCategory,\r\n form,\r\n autosuggestCategory,\r\n autosuggestKeyword,\r\n autosuggestProduct,\r\n SearchForm,\r\n FormWrapper,\r\n label\r\n } = props;\r\n\r\n return (\r\n \r\n {label}\r\n {_renderForm(form as ISearchFormViewProps, SearchForm, FormWrapper)}\r\n \r\n {searchText && searchText.length > 0 ?\r\n {AutoSuggestAriaLabelText} : ''\r\n }\r\n {_renderKeywordSuggestions(KeywordSuggest, UlKeyword, autosuggestKeyword)}\r\n {_renderProductSuggestions(ProductSuggest, UlProduct, autosuggestProduct)}\r\n {_renderCategorySuggestions(CategorySuggest, UlCategory, autosuggestCategory)}\r\n \r\n \r\n );\r\n};\r\n\r\nconst _renderForm = (form: ISearchFormViewProps, SearchForm: INodeProps, FormWrapper: INodeProps) => {\r\n return (\r\n \r\n \r\n {form.submitBtn}\r\n {form.label}\r\n {form.input}\r\n {form.cancelBtn}\r\n \r\n \r\n );\r\n};\r\n\r\nconst _renderKeywordSuggestions = (\r\n KeywordSuggest: INodeProps,\r\n UlKeyword: INodeProps,\r\n keywordSuggestions?: ISearchKeywordViewProps\r\n) => {\r\n return (\r\n keywordSuggestions && (\r\n \r\n \r\n {keywordSuggestions.text.map(text => {\r\n return text;\r\n })}\r\n \r\n \r\n )\r\n );\r\n};\r\n\r\nconst _renderProductSuggestions = (\r\n ProductSuggest: INodeProps,\r\n UlProduct: INodeProps,\r\n productSuggestions?: ISearchProductViewProps\r\n) => {\r\n return (\r\n productSuggestions && (\r\n \r\n \r\n {productSuggestions.title}\r\n {productSuggestions.items.map((item, index) => {\r\n return (\r\n \r\n \r\n {item.thumbnail}\r\n {item.text}\r\n {item.price !== 0 && (
    {item.price}
    )}\r\n
    \r\n
    \r\n );\r\n })}\r\n
    \r\n
    \r\n )\r\n );\r\n};\r\n\r\nconst _renderCategorySuggestions = (\r\n CategorySuggest: INodeProps,\r\n UlCategory: INodeProps,\r\n categorySuggestions?: ISearchCategoryViewProps\r\n) => {\r\n return (\r\n categorySuggestions && (\r\n \r\n \r\n {categorySuggestions.title}\r\n {categorySuggestions.text.map(text => {\r\n return text;\r\n })}\r\n \r\n \r\n )\r\n );\r\n};\r\n\r\nexport default SearchView;","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n\r\n\r\nimport { INodeProps, Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\nimport { ISearchCategoryViewProps, ISearchFormViewProps, ISearchKeywordViewProps, ISearchProductViewProps } from '../../../modules/smwe-search/./components';\r\nimport { ISearchViewProps } from '../../../modules/smwe-search/./smwe-search';\r\n\r\nconst SearchView: React.FC = props => {\r\n const {\r\n Search,\r\n AutoSuggestAriaLabel,\r\n AutoSuggestAriaLabelText,\r\n searchText,\r\n AutoSuggest,\r\n KeywordSuggest,\r\n ProductSuggest,\r\n CategorySuggest,\r\n UlKeyword,\r\n UlProduct,\r\n UlCategory,\r\n form,\r\n autosuggestCategory,\r\n autosuggestKeyword,\r\n autosuggestProduct,\r\n SearchForm,\r\n FormWrapper,\r\n label\r\n } = props;\r\n\r\n return (\r\n \r\n {label}\r\n {_renderForm(form as ISearchFormViewProps, SearchForm, FormWrapper)}\r\n \r\n {searchText && searchText.length > 0 ?\r\n {AutoSuggestAriaLabelText} : ''\r\n }\r\n {_renderKeywordSuggestions(KeywordSuggest, UlKeyword, autosuggestKeyword)}\r\n {_renderProductSuggestions(ProductSuggest, UlProduct, autosuggestProduct)}\r\n {_renderCategorySuggestions(CategorySuggest, UlCategory, autosuggestCategory)}\r\n \r\n \r\n );\r\n};\r\n\r\nconst _renderForm = (form: ISearchFormViewProps, SearchForm: INodeProps, FormWrapper: INodeProps) => {\r\n return (\r\n \r\n \r\n {form.submitBtn}\r\n {form.label}\r\n {form.input}\r\n {form.cancelBtn}\r\n \r\n \r\n );\r\n};\r\n\r\nconst _renderKeywordSuggestions = (\r\n KeywordSuggest: INodeProps,\r\n UlKeyword: INodeProps,\r\n keywordSuggestions?: ISearchKeywordViewProps\r\n) => {\r\n return (\r\n keywordSuggestions && (\r\n \r\n \r\n {keywordSuggestions.text.map(text => {\r\n return text;\r\n })}\r\n \r\n \r\n )\r\n );\r\n};\r\n\r\nconst _renderProductSuggestions = (\r\n ProductSuggest: INodeProps,\r\n UlProduct: INodeProps,\r\n productSuggestions?: ISearchProductViewProps\r\n) => {\r\n return (\r\n productSuggestions && (\r\n \r\n \r\n {productSuggestions.title}\r\n {productSuggestions.items.map((item, index) => {\r\n return (\r\n \r\n \r\n {item.thumbnail}\r\n {item.text}\r\n {item.price !== 0 && (
    {item.price}
    )}\r\n
    \r\n
    \r\n );\r\n })}\r\n
    \r\n
    \r\n )\r\n );\r\n};\r\n\r\nconst _renderCategorySuggestions = (\r\n CategorySuggest: INodeProps,\r\n UlCategory: INodeProps,\r\n categorySuggestions?: ISearchCategoryViewProps\r\n) => {\r\n return (\r\n categorySuggestions && (\r\n \r\n \r\n {categorySuggestions.title}\r\n {categorySuggestions.text.map(text => {\r\n return text;\r\n })}\r\n \r\n \r\n )\r\n );\r\n};\r\n\r\nexport default SearchView;","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n\r\n\r\nimport { INodeProps, Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\nimport { ISearchCategoryViewProps, ISearchFormViewProps, ISearchKeywordViewProps, ISearchProductViewProps } from '../../../modules/smwe-search/./components';\r\nimport { ISearchViewProps } from '../../../modules/smwe-search/./smwe-search';\r\n\r\nconst SearchView: React.FC = props => {\r\n const {\r\n Search,\r\n AutoSuggestAriaLabel,\r\n AutoSuggestAriaLabelText,\r\n searchText,\r\n AutoSuggest,\r\n KeywordSuggest,\r\n ProductSuggest,\r\n CategorySuggest,\r\n UlKeyword,\r\n UlProduct,\r\n UlCategory,\r\n form,\r\n autosuggestCategory,\r\n autosuggestKeyword,\r\n autosuggestProduct,\r\n SearchForm,\r\n FormWrapper,\r\n label\r\n } = props;\r\n\r\n return (\r\n \r\n {label}\r\n {_renderForm(form as ISearchFormViewProps, SearchForm, FormWrapper)}\r\n \r\n {searchText && searchText.length > 0 ?\r\n {AutoSuggestAriaLabelText} : ''\r\n }\r\n {_renderKeywordSuggestions(KeywordSuggest, UlKeyword, autosuggestKeyword)}\r\n {_renderProductSuggestions(ProductSuggest, UlProduct, autosuggestProduct)}\r\n {_renderCategorySuggestions(CategorySuggest, UlCategory, autosuggestCategory)}\r\n \r\n \r\n );\r\n};\r\n\r\nconst _renderForm = (form: ISearchFormViewProps, SearchForm: INodeProps, FormWrapper: INodeProps) => {\r\n return (\r\n \r\n \r\n {form.submitBtn}\r\n {form.label}\r\n {form.input}\r\n {form.cancelBtn}\r\n \r\n \r\n );\r\n};\r\n\r\nconst _renderKeywordSuggestions = (\r\n KeywordSuggest: INodeProps,\r\n UlKeyword: INodeProps,\r\n keywordSuggestions?: ISearchKeywordViewProps\r\n) => {\r\n return (\r\n keywordSuggestions && (\r\n \r\n \r\n {keywordSuggestions.text.map(text => {\r\n return text;\r\n })}\r\n \r\n \r\n )\r\n );\r\n};\r\n\r\nconst _renderProductSuggestions = (\r\n ProductSuggest: INodeProps,\r\n UlProduct: INodeProps,\r\n productSuggestions?: ISearchProductViewProps\r\n) => {\r\n return (\r\n productSuggestions && (\r\n \r\n \r\n {productSuggestions.title}\r\n {productSuggestions.items.map((item, index) => {\r\n return (\r\n \r\n \r\n {item.thumbnail}\r\n {item.text}\r\n {item.price !== 0 && (
    {item.price}
    )}\r\n
    \r\n
    \r\n );\r\n })}\r\n
    \r\n
    \r\n )\r\n );\r\n};\r\n\r\nconst _renderCategorySuggestions = (\r\n CategorySuggest: INodeProps,\r\n UlCategory: INodeProps,\r\n categorySuggestions?: ISearchCategoryViewProps\r\n) => {\r\n return (\r\n categorySuggestions && (\r\n \r\n \r\n {categorySuggestions.title}\r\n {categorySuggestions.text.map(text => {\r\n return text;\r\n })}\r\n \r\n \r\n )\r\n );\r\n};\r\n\r\nexport default SearchView;","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n\r\n\r\nimport { INodeProps, Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\nimport { ISearchCategoryViewProps, ISearchFormViewProps, ISearchKeywordViewProps, ISearchProductViewProps } from '../../../modules/smwe-search/./components';\r\nimport { ISearchViewProps } from '../../../modules/smwe-search/./smwe-search';\r\n\r\nconst SearchView: React.FC = props => {\r\n const {\r\n Search,\r\n AutoSuggestAriaLabel,\r\n AutoSuggestAriaLabelText,\r\n searchText,\r\n AutoSuggest,\r\n KeywordSuggest,\r\n ProductSuggest,\r\n CategorySuggest,\r\n UlKeyword,\r\n UlProduct,\r\n UlCategory,\r\n form,\r\n autosuggestCategory,\r\n autosuggestKeyword,\r\n autosuggestProduct,\r\n SearchForm,\r\n FormWrapper,\r\n label\r\n } = props;\r\n\r\n return (\r\n \r\n {label}\r\n {_renderForm(form as ISearchFormViewProps, SearchForm, FormWrapper)}\r\n \r\n {searchText && searchText.length > 0 ?\r\n {AutoSuggestAriaLabelText} : ''\r\n }\r\n {_renderKeywordSuggestions(KeywordSuggest, UlKeyword, autosuggestKeyword)}\r\n {_renderProductSuggestions(ProductSuggest, UlProduct, autosuggestProduct)}\r\n {_renderCategorySuggestions(CategorySuggest, UlCategory, autosuggestCategory)}\r\n \r\n \r\n );\r\n};\r\n\r\nconst _renderForm = (form: ISearchFormViewProps, SearchForm: INodeProps, FormWrapper: INodeProps) => {\r\n return (\r\n \r\n \r\n {form.submitBtn}\r\n {form.label}\r\n {form.input}\r\n {form.cancelBtn}\r\n \r\n \r\n );\r\n};\r\n\r\nconst _renderKeywordSuggestions = (\r\n KeywordSuggest: INodeProps,\r\n UlKeyword: INodeProps,\r\n keywordSuggestions?: ISearchKeywordViewProps\r\n) => {\r\n return (\r\n keywordSuggestions && (\r\n \r\n \r\n {keywordSuggestions.text.map(text => {\r\n return text;\r\n })}\r\n \r\n \r\n )\r\n );\r\n};\r\n\r\nconst _renderProductSuggestions = (\r\n ProductSuggest: INodeProps,\r\n UlProduct: INodeProps,\r\n productSuggestions?: ISearchProductViewProps\r\n) => {\r\n return (\r\n productSuggestions && (\r\n \r\n \r\n {productSuggestions.title}\r\n {productSuggestions.items.map((item, index) => {\r\n return (\r\n \r\n \r\n {item.thumbnail}\r\n {item.text}\r\n {item.price !== 0 && (
    {item.price}
    )}\r\n
    \r\n
    \r\n );\r\n })}\r\n
    \r\n
    \r\n )\r\n );\r\n};\r\n\r\nconst _renderCategorySuggestions = (\r\n CategorySuggest: INodeProps,\r\n UlCategory: INodeProps,\r\n categorySuggestions?: ISearchCategoryViewProps\r\n) => {\r\n return (\r\n categorySuggestions && (\r\n \r\n \r\n {categorySuggestions.title}\r\n {categorySuggestions.text.map(text => {\r\n return text;\r\n })}\r\n \r\n \r\n )\r\n );\r\n};\r\n\r\nexport default SearchView;","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n\r\nimport { ICarouselViewProps } from '@msdyn365-commerce-modules/carousel/src/modules/carousel/./carousel';\r\nimport { Carousel } from '@msdyn365-commerce/components';\r\nimport classnames from 'classnames';\r\nimport * as React from 'react';\r\n\r\nconst CarouselView: React.FC = props => (\r\n \r\n \r\n \r\n);\r\n\r\nexport default CarouselView;\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n\r\n\r\nimport { INodeProps, Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\nimport { ISearchCategoryViewProps, ISearchFormViewProps, ISearchKeywordViewProps, ISearchProductViewProps } from '../../../modules/smwe-search/./components';\r\nimport { ISearchViewProps } from '../../../modules/smwe-search/./smwe-search';\r\n\r\nconst SearchView: React.FC = props => {\r\n const {\r\n Search,\r\n AutoSuggestAriaLabel,\r\n AutoSuggestAriaLabelText,\r\n searchText,\r\n AutoSuggest,\r\n KeywordSuggest,\r\n ProductSuggest,\r\n CategorySuggest,\r\n UlKeyword,\r\n UlProduct,\r\n UlCategory,\r\n form,\r\n autosuggestCategory,\r\n autosuggestKeyword,\r\n autosuggestProduct,\r\n SearchForm,\r\n FormWrapper,\r\n label\r\n } = props;\r\n\r\n return (\r\n \r\n {label}\r\n \r\n {_renderForm(form as ISearchFormViewProps, FormWrapper)}\r\n \r\n {searchText && searchText.length > 0 ?\r\n {AutoSuggestAriaLabelText} : ''\r\n }\r\n {_renderKeywordSuggestions(KeywordSuggest, UlKeyword, autosuggestKeyword)}\r\n {_renderProductSuggestions(ProductSuggest, UlProduct, autosuggestProduct)}\r\n {_renderCategorySuggestions(CategorySuggest, UlCategory, autosuggestCategory)}\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst _renderForm = (form: ISearchFormViewProps, FormWrapper: INodeProps) => {\r\n return (\r\n \r\n {form.submitBtn}\r\n
    \r\n
    \r\n {form.label}\r\n {form.input}\r\n
    \r\n {form.cancelBtn}\r\n \r\n );\r\n};\r\n\r\nconst _renderKeywordSuggestions = (\r\n KeywordSuggest: INodeProps,\r\n UlKeyword: INodeProps,\r\n keywordSuggestions?: ISearchKeywordViewProps\r\n) => {\r\n return (\r\n keywordSuggestions && (\r\n \r\n \r\n {keywordSuggestions.text.map(text => {\r\n return text;\r\n })}\r\n \r\n \r\n )\r\n );\r\n};\r\n\r\nconst _renderProductSuggestions = (\r\n ProductSuggest: INodeProps,\r\n UlProduct: INodeProps,\r\n productSuggestions?: ISearchProductViewProps\r\n) => {\r\n return (\r\n productSuggestions && (\r\n \r\n \r\n {productSuggestions.title}\r\n {productSuggestions.items.map((item, index) => {\r\n return (\r\n \r\n \r\n {item.thumbnail}\r\n {item.text}\r\n {item.price}\r\n \r\n \r\n );\r\n })}\r\n \r\n \r\n )\r\n );\r\n};\r\n\r\nconst _renderCategorySuggestions = (\r\n CategorySuggest: INodeProps,\r\n UlCategory: INodeProps,\r\n categorySuggestions?: ISearchCategoryViewProps\r\n) => {\r\n return (\r\n categorySuggestions && (\r\n \r\n \r\n {categorySuggestions.title}\r\n {categorySuggestions.text.map(text => {\r\n return text;\r\n })}\r\n \r\n \r\n )\r\n );\r\n};\r\n\r\nexport default SearchView;","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n\r\nimport { INodeProps, Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\nimport { ISearchCategoryViewProps, ISearchFormViewProps, ISearchKeywordViewProps, ISearchProductViewProps } from '../../../modules/smwe-search/./components';\r\nimport { ISearchViewProps } from '../../../modules/smwe-search/./smwe-search';\r\n\r\nconst SearchView: React.FC = props => {\r\n const {\r\n Search,\r\n AutoSuggestAriaLabel,\r\n AutoSuggestAriaLabelText,\r\n searchText,\r\n AutoSuggest,\r\n KeywordSuggest,\r\n ProductSuggest,\r\n CategorySuggest,\r\n UlKeyword,\r\n UlProduct,\r\n UlCategory,\r\n form,\r\n autosuggestCategory,\r\n autosuggestKeyword,\r\n autosuggestProduct,\r\n SearchForm,\r\n FormWrapper,\r\n label\r\n } = props;\r\n\r\n return (\r\n \r\n {label}\r\n {_renderForm(form as ISearchFormViewProps, SearchForm, FormWrapper)}\r\n \r\n {searchText && searchText.length > 0 ?\r\n {AutoSuggestAriaLabelText} : ''\r\n }\r\n {_renderKeywordSuggestions(KeywordSuggest, UlKeyword, autosuggestKeyword)}\r\n {_renderProductSuggestions(ProductSuggest, UlProduct, autosuggestProduct)}\r\n {_renderCategorySuggestions(CategorySuggest, UlCategory, autosuggestCategory)}\r\n \r\n \r\n );\r\n};\r\n\r\nconst _renderForm = (form: ISearchFormViewProps, SearchForm: INodeProps, FormWrapper: INodeProps) => {\r\n return (\r\n \r\n \r\n {form.submitBtn}\r\n {form.label}\r\n {form.input}\r\n {form.cancelBtn}\r\n \r\n \r\n );\r\n};\r\n\r\nconst _renderKeywordSuggestions = (\r\n KeywordSuggest: INodeProps,\r\n UlKeyword: INodeProps,\r\n keywordSuggestions?: ISearchKeywordViewProps\r\n) => {\r\n return (\r\n keywordSuggestions && (\r\n \r\n \r\n {keywordSuggestions.text.map(text => {\r\n return text;\r\n })}\r\n \r\n \r\n )\r\n );\r\n};\r\n\r\nconst _renderProductSuggestions = (\r\n ProductSuggest: INodeProps,\r\n UlProduct: INodeProps,\r\n productSuggestions?: ISearchProductViewProps\r\n) => {\r\n return (\r\n productSuggestions && (\r\n \r\n \r\n {productSuggestions.title}\r\n {productSuggestions.items.map((item, index) => {\r\n return (\r\n \r\n \r\n {item.thumbnail}\r\n {item.text}\r\n {item.price !== 0 && (
    {item.price}
    )}\r\n
    \r\n
    \r\n );\r\n })}\r\n
    \r\n
    \r\n )\r\n );\r\n};\r\n\r\nconst _renderCategorySuggestions = (\r\n CategorySuggest: INodeProps,\r\n UlCategory: INodeProps,\r\n categorySuggestions?: ISearchCategoryViewProps\r\n) => {\r\n return (\r\n categorySuggestions && (\r\n \r\n \r\n {categorySuggestions.title}\r\n {categorySuggestions.text.map(text => {\r\n return text;\r\n })}\r\n \r\n \r\n )\r\n );\r\n};\r\n\r\nexport default SearchView;","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n\r\nimport { ICarouselViewProps } from '@msdyn365-commerce-modules/carousel/src/modules/carousel/./carousel';\r\nimport { Carousel } from '@msdyn365-commerce/components';\r\nimport classnames from 'classnames';\r\nimport * as React from 'react';\r\n\r\nconst CarouselView: React.FC = props => (\r\n \r\n \r\n \r\n);\r\n\r\nexport default CarouselView;\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n\r\n\r\nimport { INodeProps, Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\nimport { ISearchCategoryViewProps, ISearchFormViewProps, ISearchKeywordViewProps, ISearchProductViewProps } from '../../../modules/smwe-search/./components';\r\nimport { ISearchViewProps } from '../../../modules/smwe-search/./smwe-search';\r\n\r\nconst SearchView: React.FC = props => {\r\n const {\r\n Search,\r\n form,\r\n SearchForm,\r\n FormWrapper,\r\n label\r\n } = props;\r\n\r\n React.useEffect(() => {\r\n document.body.addEventListener('keydown', (e: any) => handleKeyDown(e));\r\n });\r\n\r\n return (\r\n \r\n {label}\r\n \r\n {_renderForm(form as ISearchFormViewProps, FormWrapper, props)}\r\n \r\n \r\n );\r\n};\r\n\r\nconst handleKeyDown = (e: React.KeyboardEvent): void => {\r\n const showClass = document.getElementsByClassName('ms-search__form bx-show');\r\n if (showClass) {\r\n //Fetch node list from which required elements could be grabbed as needed.\r\n const focusable = document.getElementById('SearchFormModal');\r\n const elements = focusable?.querySelectorAll('input, a, select, textarea, li, [tabindex]:not([tabindex=\"-1\"]), button') as NodeListOf;\r\n const firstFocusable = elements[0];\r\n const lastFocusable = elements[elements.length - 1];\r\n\r\n if (e.ctrlKey || e.altKey) {\r\n return;\r\n }\r\n\r\n const keys = {\r\n 9: () => { //9 = TAB\r\n if (e.shiftKey && e.target === firstFocusable) {\r\n lastFocusable.focus();\r\n console.log('Last Focusable');\r\n e.preventDefault();\r\n }\r\n\r\n if (e.target === lastFocusable) {\r\n firstFocusable.focus();\r\n console.log('First Focusable');\r\n e.preventDefault();\r\n }\r\n }\r\n };\r\n if (keys[e.keyCode]) {\r\n keys[e.keyCode]();\r\n }\r\n }\r\n};\r\n\r\nconst _renderForm = (form: ISearchFormViewProps, FormWrapper: INodeProps, props: ISearchViewProps) => {\r\n const {\r\n AutoSuggestAriaLabel,\r\n AutoSuggestAriaLabelText,\r\n searchText,\r\n AutoSuggest,\r\n KeywordSuggest,\r\n ProductSuggest,\r\n CategorySuggest,\r\n UlKeyword,\r\n UlProduct,\r\n UlCategory,\r\n autosuggestCategory,\r\n autosuggestKeyword,\r\n autosuggestProduct,\r\n } = props;\r\n return (\r\n \r\n {form.submitBtn}\r\n
    \r\n
    \r\n {form.label}\r\n {form.input}\r\n \r\n {searchText && searchText.length > 0 ?\r\n {AutoSuggestAriaLabelText} : ''\r\n }\r\n {_renderKeywordSuggestions(KeywordSuggest, UlKeyword, autosuggestKeyword)}\r\n {_renderProductSuggestions(ProductSuggest, UlProduct, autosuggestProduct)}\r\n {_renderCategorySuggestions(CategorySuggest, UlCategory, autosuggestCategory)}\r\n \r\n
    \r\n {form.cancelBtn}\r\n \r\n );\r\n};\r\n\r\nconst _renderKeywordSuggestions = (\r\n KeywordSuggest: INodeProps,\r\n UlKeyword: INodeProps,\r\n keywordSuggestions?: ISearchKeywordViewProps\r\n) => {\r\n return (\r\n keywordSuggestions && (\r\n \r\n \r\n {keywordSuggestions.text.map(text => {\r\n return text;\r\n })}\r\n \r\n \r\n )\r\n );\r\n};\r\n\r\nconst _renderProductSuggestions = (\r\n ProductSuggest: INodeProps,\r\n UlProduct: INodeProps,\r\n productSuggestions?: ISearchProductViewProps\r\n) => {\r\n return (\r\n productSuggestions && (\r\n /* eslint-disable react/no-unknown-property */\r\n \r\n \r\n {productSuggestions.title}\r\n {productSuggestions.items.map((item, index) => {\r\n return (\r\n \r\n \r\n {item.thumbnail}\r\n {item.text}\r\n {item.price}\r\n \r\n \r\n );\r\n })}\r\n \r\n \r\n )\r\n );\r\n};\r\n\r\nconst _renderCategorySuggestions = (\r\n CategorySuggest: INodeProps,\r\n UlCategory: INodeProps,\r\n categorySuggestions?: ISearchCategoryViewProps\r\n) => {\r\n return (\r\n categorySuggestions && (\r\n \r\n \r\n {categorySuggestions.title}\r\n {categorySuggestions.text.map(text => {\r\n return text;\r\n })}\r\n \r\n \r\n )\r\n );\r\n};\r\n\r\nexport default SearchView;","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IProductDimensionsWithAvailabilitiesFull } from '@msdyn365-commerce/commerce-entities';\nimport { ProductDimensionsMatrix } from '@msdyn365-commerce/components';\nimport { RichTextComponent } from '@msdyn365-commerce/core';\nimport { ICoreContext, getCatalogId } from '@msdyn365-commerce/core-internal';\nimport { ArrayExtensions, IDimensionsApp, validateCatalogId } from '@msdyn365-commerce-modules/retail-actions';\nimport { Alert, Button, Collapse, IModuleProps, isMobile, VariantType } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { FeatureState } from '@msdyn365-commerce/retail-proxy';\nimport { IBulkPurchaseData } from './bulk-purchase.data';\nimport { IBulkPurchaseProps } from './bulk-purchase.props.autogenerated';\n\n/**\n * Additional optional props for the bulk purchase.\n */\nexport interface IBulkPurchaseExtendedProps extends IBulkPurchaseProps {\n productDimensions?: IProductDimensionsWithAvailabilitiesFull[];\n}\n\n/**\n * View for the bulk purchase module.\n */\nexport interface IBulkPurchaseViewProps extends IBulkPurchaseProps {\n container: IModuleProps;\n content: React.ReactElement;\n}\n\n/**\n * BulkPurchase state message Interface.\n */\nexport interface IBulkPurchaseStateMessage {\n isOpen: boolean;\n messageGlyph: string;\n messageText: string;\n statusCssString: string;\n}\n\n/**\n * View for the bulk purchase module.\n */\nexport interface IBulkPurchaseState {\n isExpanded: boolean;\n stateMessage?: IBulkPurchaseStateMessage;\n}\n\n/**\n * Bulk-purchase module.\n */\nexport class BulkPurchase extends React.PureComponent {\n public static readonly className = 'ms-bulk-purchase';\n private readonly _errorCssClass: string = 'danger';\n private readonly _errorCssGlyphClass: string = 'fas fa-exclamation-triangle';\n private readonly collapseRef: React.RefObject = React.createRef();\n\n public constructor(props: IBulkPurchaseExtendedProps) {\n super(props);\n\n this.state = {\n isExpanded: false\n };\n }\n\n public render(): React.ReactElement | null {\n const hasDimensionsInProps = ArrayExtensions.hasElements(this.props.productDimensions);\n const hasDimensionsInData = ArrayExtensions.hasElements(this.props.data.productDimensions?.result);\n if (!hasDimensionsInProps && !hasDimensionsInData) {\n return null;\n }\n\n const viewProps: IBulkPurchaseViewProps = {\n ...this.props,\n container: {\n moduleProps: this.props,\n className: classnames(BulkPurchase.className, this.props.config.className)\n },\n content: this._renderCollapseContent(`${BulkPurchase.className}__content`)\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n private _renderCollapseContent(className: string): React.ReactElement {\n return (\n
    \n {this._renderCollapseButton(`${className}__collapse-button`)}\n {this._renderCollapse(`${className}__collapse`)}\n
    \n );\n }\n\n private _renderCollapseButton(className: string): React.ReactElement {\n return (\n \n {this.props.resources.bulkPurchaseHeaderTitle}\n \n );\n }\n\n /**\n *This function is being used to handel variant change dropdown.\n */\n private _dimensionDropDownChange = () => {\n this.collapseRef.current?.reEvaluateHeight();\n };\n\n private _renderCollapse(className: string): React.ReactElement {\n return (\n \n {this._renderMainContent(`${className}__main-content`)}\n \n );\n }\n\n private _renderMainContent(className: string): React.ReactElement {\n const isMobileDevice = isMobile({ variant: VariantType.Viewport, context: this.props.context.request }) === 'xs';\n\n const userMessageNode = this.state.stateMessage ? (\n \n \n {this.state.stateMessage.messageText}\n \n ) : (\n undefined\n );\n\n return (\n
    \n {!isMobileDevice && (\n
    \n \n
    \n )}\n {userMessageNode}\n {this._renderMatrix(`${className}__matrix-container`)}\n
    \n );\n }\n\n private _renderMatrix(className: string): React.ReactElement {\n const hasDimensionsInProps = ArrayExtensions.hasElements(this.props.productDimensions);\n const channelMultipleCatalogsFeature = 'Dynamics.AX.Application.ChannelMultipleCatalogsFeature';\n const { featureState } = this.props.data;\n const isMultipleCatalogsFeatureEnabled =\n featureState?.result?.find((item: FeatureState) => item.Name === channelMultipleCatalogsFeature)?.IsEnabled || false;\n const catalogId = getCatalogId(this.props.context.request);\n validateCatalogId(catalogId);\n return (\n }\n data={{\n dimensions: hasDimensionsInProps ? this.props.productDimensions! : this.props.data.productDimensions!.result!,\n orderTemplates: this.props.data.orderTemplates?.result,\n customerInformation: this.props.data.customerInformation?.result\n }}\n resources={this.props.resources}\n dimensionOnChange={this._dimensionDropDownChange}\n onErrorMessage={this._onErrorMessage}\n isMultipleCatalogFeatureEnabledInHq={isMultipleCatalogsFeatureEnabled}\n catalogId={catalogId}\n />\n );\n }\n\n private _onErrorMessage = (errorMessage: string) => {\n this.setState({\n stateMessage: {\n messageText: errorMessage,\n statusCssString: this._errorCssClass,\n messageGlyph: this._errorCssGlyphClass,\n isOpen: true\n }\n });\n };\n\n /**\n * Callback which toggles collapse mode.\n */\n private readonly _toggleCollapse = () => {\n this.setState(state => ({\n isExpanded: !state.isExpanded\n }));\n };\n}\n\nexport default BulkPurchase;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Module } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IBulkPurchaseViewProps } from './bulk-purchase';\n\n/**\n * Bulk purchase view.\n * @param props - Bulk purchase view props.\n * @returns React node with a module.\n */\nexport const BulkPurchaseViewComponent: React.FC = props => {\n return {props.content};\n};\n\nexport default BulkPurchaseViewComponent;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { getTelemetryObject, IModuleProps, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { ICarouselData } from './carousel.data';\nimport { ICarouselProps } from './carousel.props.autogenerated';\nimport { ICarouselState } from './carousel.state';\n\nexport interface ICarouselViewProps extends ICarouselProps<{}>, ICarouselState {\n closeAnimation: string;\n carouselContainer: IModuleProps;\n telemetryContent: ITelemetryContent;\n next(): void;\n previous(): void;\n onIndicatorsClickHandler(): void;\n handleDismissCarousel(): void;\n handleOnExited(): void;\n handleOnExiting(): void;\n}\n\n/**\n *\n * CarouselModule component.\n * @extends {React.PureComponent>}\n */\nclass CarouselModule extends React.PureComponent, ICarouselState> {\n private animating: boolean;\n\n private readonly telemetryContent: ITelemetryContent;\n\n constructor(props: ICarouselProps, state: ICarouselState) {\n super(props);\n this.state = { activeIndex: 0, closeNow: false, dismissCarousel: false };\n this.animating = false;\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n }\n\n public componentDidMount(): void {\n if (this.props.context && this.props.context.request && this.props.context.request.cookies) {\n if (this.props.context.request.cookies.get(`CarouselDismiss_${this.props.id}`) === undefined) {\n this.props.context.request.cookies.set(`CarouselDismiss_${this.props.id}`, 'false');\n this.setState({ dismissCarousel: false });\n }\n }\n }\n\n public render(): JSX.Element | null {\n if (this.state.dismissCarousel) {\n return null;\n }\n\n const { className } = this.props.config;\n\n const viewProps = {\n // Context for telemetry and raw data for C1 to do customization\n // Including computed data, state data and methods\n ...this.props,\n ...this.state,\n telemetryContent: this.telemetryContent,\n carouselContainer: {\n moduleProps: this.props,\n className: classnames('ms-carousel', className)\n },\n closeAnimation: this.state.closeNow ? 'close-now' : '',\n next: this._next,\n previous: this._previous,\n onIndicatorsClickHandler: this._goToIndex,\n handleDismissCarousel: this._handleDismissCarousel,\n handleOnExited: this._onExited,\n handleOnExiting: this._onExiting\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n /**\n * Function implementation to dismiss the Carousel.\n */\n private readonly _handleDismissCarousel = (): void => {\n if (this.props.context && this.props.context.request && this.props.context.request.cookies) {\n this.props.context.request.cookies.set(`CarouselDismiss_${this.props.id}`, 'true');\n this.setState({ dismissCarousel: true });\n }\n };\n\n /**\n * Function implementation to move to next slide.\n */\n private readonly _next = (): void => {\n const { slots } = this.props;\n const nextIndex = this.state.activeIndex === (slots && slots.content && slots.content.length - 1) ? 0 : this.state.activeIndex + 1;\n\n if (this.animating) {\n this.setState({ closeNow: true, activeIndex: nextIndex });\n } else {\n this.setState({ activeIndex: nextIndex });\n }\n };\n\n /**\n * Function implementation to move to previous slide.\n */\n private readonly _previous = (): void => {\n const slots = this.props.slots && this.props.slots.content;\n const nextIndex = this.state.activeIndex === 0 ? (slots ? slots.length - 1 : 0) : this.state.activeIndex - 1;\n\n if (this.animating) {\n this.setState({ closeNow: true, activeIndex: nextIndex });\n } else {\n this.setState({ activeIndex: nextIndex });\n }\n };\n\n private readonly _onExiting = (): void => {\n this.animating = true;\n };\n\n private readonly _onExited = (): void => {\n this.animating = false;\n this.setState({ closeNow: false });\n };\n\n /**\n * Function implementation to move to a given slide.\n * @param newIndex\n */\n private readonly _goToIndex = (newIndex: number): void => {\n if (this.animating) {\n return;\n }\n this.setState({ activeIndex: newIndex });\n };\n}\n\nexport default CarouselModule;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Carousel } from '@msdyn365-commerce/components';\nimport { Module } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { ICarouselViewProps } from './carousel';\n\n/**\n * Returns item slots.\n * @returns Array of item slots.\n * @param props -Props.\n */\nconst retrieveItems = (props: ICarouselViewProps): React.ReactNode[] => {\n let items = [];\n items = props.slots && props.slots.content && props.slots.content.length > 0 ? props.slots.content : [];\n return items;\n};\nconst CarouselView: React.FC = props => (\n \n \n \n);\n\nexport default CarouselView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ICoreContext } from '@msdyn365-commerce/core';\nimport { ICartActionResult, ICartState } from '@msdyn365-commerce/global-state';\nimport {\n AsyncResult,\n CartLine,\n CartLineValidationResults,\n CartLineValidationResultsByLineId,\n CartsDataActions,\n SimpleProduct\n} from '@msdyn365-commerce/retail-proxy';\n\nimport { ITelemetry } from '@msdyn365-commerce/telemetry-internal';\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\n\n/**\n * Validate the cart.\n * @param isQuantityLimitsFeatureEnabled -- Is the quantity limits feature enabled.\n * @param cart -- The cart state to validate.\n * @param telemetry -- The telemetry.\n * @param propsContext -- The props context.\n * @param shouldRetry -- Should retry.\n * @returns A list of line data validation failures.\n */\nexport async function validateCartAsync(\n cart: AsyncResult,\n telemetry: ITelemetry,\n propsContext: ICoreContext,\n shouldRetry: boolean = true\n): Promise {\n let cartResult: ICartState;\n let cartVersion: number | undefined;\n try {\n cartResult = await cart;\n cartVersion = cartResult.cart.Version;\n } catch (error) {\n telemetry.warning(error);\n telemetry.debug('Unable to get cart or cart version.');\n return AsyncResult.resolve();\n }\n\n if (cartVersion) {\n try {\n const validationResult: CartLineValidationResults = await CartsDataActions.validateForCheckoutAsync(\n { callerContext: propsContext.actionContext, bypassCache: 'none' },\n cartResult.cart.Id,\n cartVersion\n );\n\n return await AsyncResult.resolve(validationResult.ValidationResultsByLineId ?? undefined);\n } catch (error) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- error type is not defined.\n if (shouldRetry && error.name === 'Microsoft_Dynamics_Commerce_Runtime_InvalidCartVersion') {\n try {\n await cartResult.refreshCart({});\n } catch (refreshError) {\n telemetry.warning(refreshError);\n telemetry.debug('Unable to refresh Cart');\n return AsyncResult.resolve();\n }\n try {\n await validateCartAsync(cart, telemetry, propsContext, false);\n return AsyncResult.resolve();\n } catch (validateError) {\n telemetry.warning(validateError);\n telemetry.debug('Unable to validate Cart');\n return AsyncResult.resolve();\n }\n }\n\n telemetry.warning(error);\n telemetry.debug('Unable to validate Cart');\n return AsyncResult.resolve();\n }\n } else {\n telemetry.warning('Cart version not found for Cart validation request.');\n return AsyncResult.resolve();\n }\n}\n\n/**\n * Check if cart line quantity update is success.\n * @param isQuantityLimitsFeatureEnabled -- Is quantity limits feature enabled.\n * @param cartResult -- The cart result.\n * @param telemetry -- The telemetry.\n * @param products -- The products.\n * @param cartLineToUpdate -- The cart line to update.\n * @param quantity -- The quantity.\n * @returns Boolean to indicate if the cart line quantity is updated.\n */\nexport async function isCartLineQuantityUpdatedAsync(\n isQuantityLimitsFeatureEnabled: boolean | undefined,\n cartResult: ICartState | undefined,\n telemetry: ITelemetry,\n products: SimpleProduct[] | undefined,\n cartLineToUpdate: CartLine,\n quantity: number\n): Promise {\n if (cartResult) {\n let isUsingDefaultOrderSettingsMax: boolean = false;\n if (ArrayExtensions.hasElements(products) && isQuantityLimitsFeatureEnabled) {\n const modifiedProduct: SimpleProduct | undefined = products.find(\n (product: SimpleProduct) => product.RecordId === cartLineToUpdate.ProductId\n );\n isUsingDefaultOrderSettingsMax = !!modifiedProduct && !!modifiedProduct.Behavior?.MaximumQuantity;\n } else {\n isUsingDefaultOrderSettingsMax = false;\n }\n\n const input = {\n cartLineId: cartLineToUpdate.LineId!.toString(),\n newQuantity: quantity,\n additionalProperties: { isUsingDefaultOrderSettingsMax }\n };\n\n try {\n const updateLineResult: ICartActionResult = await cartResult.updateCartLineQuantity(input);\n return await AsyncResult.resolve(updateLineResult.status === 'SUCCESS');\n } catch (error) {\n telemetry.warning((error as Error).message);\n telemetry.debug('Unable to update Cart Line quantity');\n }\n }\n\n return AsyncResult.resolve(false);\n}\n\n/**\n * Update cart line with cart action result.\n * @param isQuantityLimitsFeatureEnabled -- Is quantity limits feature enabled.\n * @param cartResult -- The cart result.\n * @param telemetry -- The telemetry.\n * @param products -- The products.\n * @param cartLineToUpdate -- The cart line to update.\n * @param quantity -- The quantity.\n * @returns Boolean to indicate if the cart line quantity is updated.\n */\nexport async function cartLineQuantityUpdatedAsync(\n isQuantityLimitsFeatureEnabled: boolean | undefined,\n cartResult: ICartState | undefined,\n telemetry: ITelemetry,\n products: SimpleProduct[] | undefined,\n cartLineToUpdate: CartLine,\n quantity: number\n): Promise {\n if (cartResult) {\n let isUsingDefaultOrderSettingsMax: boolean = false;\n if (ArrayExtensions.hasElements(products) && isQuantityLimitsFeatureEnabled) {\n const modifiedProduct: SimpleProduct | undefined = products.find(\n (product: SimpleProduct) => product.RecordId === cartLineToUpdate.ProductId\n );\n isUsingDefaultOrderSettingsMax = !!modifiedProduct && !!modifiedProduct.Behavior?.MaximumQuantity;\n } else {\n isUsingDefaultOrderSettingsMax = false;\n }\n\n const input = {\n cartLineId: cartLineToUpdate.LineId!.toString(),\n newQuantity: quantity,\n additionalProperties: { isUsingDefaultOrderSettingsMax }\n };\n\n try {\n const updateLineResult: ICartActionResult = await cartResult.updateCartLineQuantity(input);\n return await AsyncResult.resolve(updateLineResult);\n } catch (error) {\n telemetry.warning((error as Error).message);\n telemetry.debug('Unable to update Cart Line quantity');\n }\n }\n\n return AsyncResult.resolve();\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ICartState } from '@msdyn365-commerce/global-state';\nimport { SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\n\n/**\n * Find the product in array of products considering product id.\n * @param productId - The searched product id.\n * @param products - The array of products in which search is executed.\n * @returns - The found product.\n */\nexport function getProductByProductId(productId: number | undefined, products?: SimpleProduct[]): SimpleProduct | undefined {\n if (productId !== undefined && ArrayExtensions.hasElements(products)) {\n return products.find(product => {\n return productId === product.RecordId;\n });\n }\n\n return undefined;\n}\n\n/**\n * Find the product in array of products considering product id and product behavior's warehouse.\n * @param productId - The searched product id.\n * @param products - The array of products in which search is executed.\n * @param warehouseId - Warehouse id of cartLine.\n * @param cartState - The cart start in case cart line has no warehouse.\n * @returns - The found product.\n */\nexport function getProductByProductIdAndWarehouse(\n productId: number | undefined,\n products?: SimpleProduct[],\n warehouseId?: string,\n cartState?: ICartState\n): SimpleProduct | undefined {\n const targetWarehouseValue = warehouseId ?? cartState?.cart.WarehouseId;\n\n if (productId !== undefined && ArrayExtensions.hasElements(products)) {\n return products.find(product => {\n return productId === product.RecordId && product.Behavior?.InventoryLocationId === targetWarehouseValue;\n });\n }\n\n return undefined;\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { CartLineItemComponent, ICartlineResourceString } from '@msdyn365-commerce/components';\nimport MsDyn365, { ICoreContext, IGridSettings, IImageSettings, ITelemetry, isChannelTypeB2B } from '@msdyn365-commerce/core';\nimport { ICartState } from '@msdyn365-commerce/global-state';\nimport {\n CartLine,\n ChannelDeliveryOptionConfiguration,\n OrgUnitLocation,\n ProductAvailableQuantity,\n ProductDeliveryOptions,\n SimpleProduct\n} from '@msdyn365-commerce/retail-proxy';\nimport { ProductCatalog, ReleasedProductType } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { getProductUrlSync, IProductInventoryInformation } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n Button,\n getPayloadObject,\n getTelemetryAttributes,\n ITelemetryContent,\n TelemetryConstant\n} from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { getProductByProductId, getProductByProductIdAndWarehouse } from '../../../Common/get-product';\n\nexport interface IFlyoutCartLineItemsProps {\n cartlines: CartLine[];\n cartState: ICartState | undefined;\n orgUnitLocations: OrgUnitLocation[] | undefined;\n resources: ICartlineResourceString;\n productAvailabilites: IProductInventoryInformation[] | undefined;\n products: SimpleProduct[] | undefined;\n productDeliveryOptions: ProductDeliveryOptions[] | undefined;\n pickupDeliveryModeCode?: string;\n catalogs?: ProductCatalog[];\n\n /**\n * GridSettings for the product image in cartline\n */\n gridSettings: IGridSettings;\n\n /**\n * ImageSettings for the product image in cartline\n */\n imageSettings: IImageSettings;\n id: string;\n typeName: string;\n context: ICoreContext;\n telemetry: ITelemetry;\n removeButtonText: string;\n outOfStockText: string;\n outOfRangeOneText: string;\n outOfRangeFormatText: string;\n maxCartlineQuantity: number;\n channelDeliveryOptionConfig?: ChannelDeliveryOptionConfiguration;\n isQuantityLimitsFeatureEnabled: boolean;\n\n outOfStockThreshold: number;\n isStockCheckEnabled: boolean;\n telemetryContent?: ITelemetryContent;\n removeItemClickHandler(cartlineToRemove: CartLine): void;\n}\n\nexport interface IFlyoutCartLineItemViewProps {\n cartline: React.ReactNode;\n remove: React.ReactNode;\n storeLocation: React.ReactNode;\n hasError: boolean;\n\n data: {\n product: SimpleProduct;\n cartline: CartLine;\n };\n}\n\nconst _getCartItemAvailableQuantity = (\n isStockCheckEnabled: boolean,\n outOfStockThreshold: number,\n productAvailability?: ProductAvailableQuantity\n): number => {\n if (isStockCheckEnabled) {\n if (\n !productAvailability ||\n !productAvailability.AvailableQuantity ||\n productAvailability.AvailableQuantity <= 0 ||\n productAvailability.AvailableQuantity <= outOfStockThreshold\n ) {\n return 0;\n }\n return productAvailability.AvailableQuantity - outOfStockThreshold;\n }\n\n return 0;\n};\n\nconst _getCartItemMaxQuantity = (\n maxQuantityByConfig: number,\n isStockCheckEnabled: boolean,\n availableQuantityInStock: number,\n isQuantityLimitsFeatureEnabled: boolean,\n maxByQuantityLimitsFeature: number\n) => {\n if (isQuantityLimitsFeatureEnabled) {\n let maxByQuantityLimitsFeatureResult = maxByQuantityLimitsFeature;\n\n // If max by feature in not defined when feature is on then we suggest that there is no max by feature\n // and consider available qty if stock check enabled and max from config in site settings.\n if (!maxByQuantityLimitsFeature) {\n maxByQuantityLimitsFeatureResult = maxQuantityByConfig || 10;\n }\n\n return isStockCheckEnabled\n ? maxByQuantityLimitsFeatureResult < availableQuantityInStock\n ? maxByQuantityLimitsFeatureResult\n : availableQuantityInStock\n : maxByQuantityLimitsFeatureResult;\n }\n if (isStockCheckEnabled) {\n return availableQuantityInStock < maxQuantityByConfig ? availableQuantityInStock : maxQuantityByConfig;\n }\n return maxQuantityByConfig;\n};\n\n/**\n * On Remove Click functionality.\n * @param removeItemClickHandler -Remove item click function.\n * @param cartline -CartLine.\n * @returns Remove change value.\n */\nconst onRemoveClickFunction = (removeItemClickHandler: (cartlineToRemove: CartLine) => void, cartline: CartLine) => () => {\n removeItemClickHandler(cartline);\n};\nconst _assembleNode = (\n cartline: CartLine,\n product: SimpleProduct,\n props: IFlyoutCartLineItemsProps,\n index: number,\n foundProductAvailability?: ProductAvailableQuantity,\n foundProductDeliveryOptions?: ProductDeliveryOptions\n): IFlyoutCartLineItemViewProps => {\n const { imageSettings, gridSettings, id, typeName, context, resources, removeButtonText, removeItemClickHandler } = props;\n\n const availableQuantityInStock = _getCartItemAvailableQuantity(\n props.isStockCheckEnabled,\n props.outOfStockThreshold,\n foundProductAvailability\n );\n const maxQuantity =\n product &&\n _getCartItemMaxQuantity(\n props.maxCartlineQuantity,\n props.isStockCheckEnabled,\n availableQuantityInStock,\n props.isQuantityLimitsFeatureEnabled,\n product?.Behavior?.MaximumQuantity || 0\n );\n\n // Check if the product is service or not by product type\n const isServiceItem = product.ItemTypeValue === ReleasedProductType.Service;\n\n const onRemoveClickHandler = onRemoveClickFunction(removeItemClickHandler, cartline);\n const payLoad = getPayloadObject('click', props.telemetryContent!, TelemetryConstant.RemoveCartItem);\n const removeCartItemAttribute = getTelemetryAttributes(props.telemetryContent!, payLoad);\n\n let productUrl = getProductUrlSync(product, props.context.actionContext, undefined);\n if (MsDyn365.isBrowser && isChannelTypeB2B(props.context.actionContext.requestContext)) {\n const fullUrl = new URL(productUrl, window.location.href);\n fullUrl.searchParams.set('catalogid', `${cartline.CatalogId ?? 0}`);\n productUrl = fullUrl.href;\n }\n\n return {\n data: {\n product,\n cartline\n },\n hasError: !isServiceItem && props.isStockCheckEnabled ? cartline.Quantity! > maxQuantity : false,\n cartline: (\n \n ),\n remove: (\n \n {removeButtonText}\n \n ),\n storeLocation: _renderStoreLocation(cartline, props)\n };\n};\n\nconst _renderDeliveryLocation = (cartLine: CartLine | null | undefined, props: IFlyoutCartLineItemsProps): string | undefined => {\n let deliverylocation;\n if (cartLine && cartLine.FulfillmentStoreId) {\n const orgUnitName = _getOrgUnitName(cartLine.FulfillmentStoreId, props.orgUnitLocations);\n\n let foundProductDeliveryOption;\n if (props.productDeliveryOptions && props.productDeliveryOptions.length > 0) {\n foundProductDeliveryOption = props.productDeliveryOptions.find(deliveryOption => {\n return deliveryOption && deliveryOption.ProductId === cartLine.ProductId;\n });\n }\n const delivery = foundProductDeliveryOption?.DeliveryOptions?.find(option => option.Code === cartLine.DeliveryMode);\n const location = delivery?.Description;\n\n // eslint-disable-next-line @typescript-eslint/restrict-plus-operands\n if (location) {\n deliverylocation = `${location}, ${orgUnitName}`;\n } else {\n deliverylocation = `${orgUnitName}`;\n }\n } else {\n deliverylocation = props.resources.shippingText;\n }\n return deliverylocation;\n};\n\nconst _renderStoreLocation = (cartLine: CartLine | null | undefined, props: IFlyoutCartLineItemsProps): JSX.Element | null => {\n if (cartLine && cartLine.FulfillmentStoreId) {\n const orgUnitName = _getOrgUnitName(cartLine.FulfillmentStoreId, props.orgUnitLocations);\n\n if (orgUnitName) {\n return (\n
    \n {orgUnitName}\n
    \n );\n }\n }\n\n return null;\n};\n\nconst _getOrgUnitName = (fulfillmentStoreId: string | undefined, orgUnitLocations: OrgUnitLocation[] | undefined) => {\n if (!orgUnitLocations || !fulfillmentStoreId || orgUnitLocations.length === 0) {\n return '';\n }\n\n const foundLocation = orgUnitLocations.find(orgUnitLocation => {\n return orgUnitLocation.OrgUnitNumber === fulfillmentStoreId;\n });\n\n if (foundLocation) {\n return foundLocation.OrgUnitName;\n }\n return fulfillmentStoreId;\n};\n\nconst _assembleCartlines = (\n cartlines: CartLine[],\n products: SimpleProduct[] | undefined,\n props: IFlyoutCartLineItemsProps\n): IFlyoutCartLineItemViewProps[] | null => {\n const reactNodes: IFlyoutCartLineItemViewProps[] = [];\n\n if (!products || products.length === 0) {\n props.context.telemetry.error('Cartlines content is empty, module wont render');\n return null;\n }\n\n cartlines.map((cartline, index) => {\n let product;\n if (props.isQuantityLimitsFeatureEnabled) {\n // When feature is enabled the same products could have different quantity limits in Behavior so we need\n // to check productId and WarehouseId for identification.\n product = getProductByProductIdAndWarehouse(cartline.ProductId, products, cartline.WarehouseId, props.cartState);\n } else {\n product = getProductByProductId(cartline.ProductId, products);\n }\n let foundProductAvailability;\n if (props.productAvailabilites && props.productAvailabilites.length > 0) {\n foundProductAvailability = props.productAvailabilites.find(productAvailability => {\n return productAvailability.ProductAvailableQuantity?.ProductId! === cartline.ProductId;\n });\n }\n let foundProductDeliveryOption;\n if (props.productDeliveryOptions && props.productDeliveryOptions.length > 0) {\n foundProductDeliveryOption = props.productDeliveryOptions.find(deliveryOption => {\n return deliveryOption && deliveryOption.ProductId === cartline.ProductId;\n });\n }\n if (product) {\n reactNodes.push(\n _assembleNode(\n cartline,\n product,\n props,\n index,\n foundProductAvailability?.ProductAvailableQuantity,\n foundProductDeliveryOption\n )\n );\n }\n });\n\n return reactNodes;\n};\n\n/**\n * CartLineItems component.\n */\n\nexport const FlyoutCartLineItems = (props: IFlyoutCartLineItemsProps) => {\n const { products, cartlines } = props;\n return _assembleCartlines(cartlines, products, props);\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IActionContext } from '@msdyn365-commerce/core';\nimport { ICartState } from '@msdyn365-commerce/global-state';\nimport { ProductDeliveryOptions, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport {\n ActiveCartProductsInput,\n getActiveCartProductsAction,\n getAvailabilitiesForCartLineItems,\n getDeliveryOptionsForCartLineItems,\n IProductInventoryInformation,\n ProductAvailabilitiesForCartLineItems,\n ProductDeliveryOptionsForCartLineItems\n} from '@msdyn365-commerce-modules/retail-actions';\n\n/**\n * IMiniCartData entity interface.\n */\nexport interface IMiniCartData {\n products?: SimpleProduct[];\n productAvailabilites?: IProductInventoryInformation[];\n deliveryOptions?: ProductDeliveryOptions[];\n}\n\nexport const createInput = () => {\n return new ActiveCartProductsInput();\n};\n\n/**\n * Calls the Retail API and returns a mini cart data.\n * @param ctx\n * @param cartState\n */\nexport async function getMiniCartData(ctx: IActionContext, cartState: ICartState): Promise {\n const miniCartData: IMiniCartData = {};\n\n const cart = cartState.cart;\n\n // If there are cart lines, make call to get products\n // If there are invocie linese, then there is no products, so don't make call to get products\n if (cart && cart.CartLines && cart.CartLines.length > 0 && !cartState.hasInvoiceLine) {\n await getActiveCartProductsAction(new ActiveCartProductsInput(), ctx)\n .then(products => {\n if (products) {\n miniCartData.products = products;\n }\n })\n .catch(error => {\n ctx.telemetry.exception(error);\n throw new Error('[getActiveCartWithProdcuts]Unable to hydrate cart with product information');\n });\n\n await getAvailabilitiesForCartLineItems(new ProductAvailabilitiesForCartLineItems(ctx.requestContext.apiSettings), ctx)\n .then(availableQuantity => {\n if (availableQuantity) {\n miniCartData.productAvailabilites = availableQuantity;\n }\n })\n .catch(error => {\n ctx.telemetry.exception(error);\n throw new Error('[getActiveCartWithProdcuts]Unable to hydrate cart with product information');\n });\n\n await getDeliveryOptionsForCartLineItems(new ProductDeliveryOptionsForCartLineItems(ctx.requestContext.apiSettings), ctx)\n .then(deliveryOptions => {\n if (deliveryOptions) {\n miniCartData.deliveryOptions = deliveryOptions;\n }\n })\n .catch(error => {\n ctx.telemetry.exception(error);\n throw new Error('[getActiveCartWithProdcuts]Unable to hydrate cart with product information');\n });\n }\n\n return miniCartData;\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { AddToCartBehavior, CartIconComponent } from '@msdyn365-commerce/components';\nimport { getUrlSync, IDictionary, IImageSettings, msdyn365Commerce, TelemetryEvent } from '@msdyn365-commerce/core';\nimport {\n CartLine,\n ChannelDeliveryOptionConfiguration,\n CartLineValidationResultsByLineId,\n OrgUnitLocation\n} from '@msdyn365-commerce/retail-proxy';\nimport { validateCartAsync } from '@msdyn365-commerce-modules/cart-utilities';\nimport { ArrayExtensions, validateCartLinesInventory } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n Button,\n getPayloadObject,\n getTelemetryAttributes,\n getTelemetryObject,\n INodeProps,\n ITelemetryContent,\n TelemetryConstant,\n UncontrolledTooltip,\n updateMaxQuantityForCartLineItem,\n urlCheck\n} from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport { reaction } from 'mobx';\nimport { observer } from 'mobx-react';\nimport React from 'react';\n\nimport { ICartIconData } from './cart-icon.data';\nimport { cartLinesSortOrder, ICartIconProps } from './cart-icon.props.autogenerated';\nimport { FlyoutCartLineItems, IFlyoutCartLineItemViewProps } from './components/flyout-cart-line-items';\nimport { getMiniCartData, IMiniCartData } from './utils/get-products-in-mini-cart';\n\nexport interface IMiniCartState {\n miniCartData: IMiniCartData;\n orgUnitLocations?: OrgUnitLocation[];\n isQuantityLimitsFeatureEnabled: boolean;\n isCartValid: boolean;\n}\n\nexport interface ICartIconViewProps extends ICartIconProps {\n className: string;\n cartIcon: React.ReactNode;\n FlyoutContainer?: INodeProps;\n CartlinesWrapper: INodeProps;\n miniCartWrapper: INodeProps;\n miniCartItemWrapper: INodeProps;\n cartlines?: IFlyoutCartLineItemViewProps[];\n flyoutTitle: React.ReactNode;\n totalPrice: React.ReactNode;\n checkoutAsGuestButton?: React.ReactNode;\n checkoutAsSignInUserButton?: React.ReactNode;\n goToCartButton?: React.ReactNode;\n waitingComponent?: React.ReactNode;\n isCartLoading: boolean;\n checkoutBlockedDueToUnavailableFunds?: React.ReactNode;\n\n removeItemClickHandler(cartlineToRemove: CartLine): void;\n}\n\n/**\n *\n * Cart component.\n * @extends {React.PureComponent>}\n */\n@observer\nclass CartIcon extends React.Component, IMiniCartState> {\n private readonly telemetryContent: ITelemetryContent;\n\n private readonly checkoutBySignInAttributes: IDictionary | undefined;\n\n private readonly checkoutByGuestAttributes: IDictionary | undefined;\n\n private readonly viewShoppingBagAttributes: IDictionary | undefined;\n\n private retailMultiplePickUpOptionEnabled?: boolean = false;\n\n private channelDeliveryOptionConfig?: ChannelDeliveryOptionConfiguration;\n\n private lastValidatedCartVersion: number | undefined;\n\n constructor(props: ICartIconProps) {\n super(props);\n this.state = {\n miniCartData: {},\n isCartValid: true,\n isQuantityLimitsFeatureEnabled: false\n };\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n const payload = getPayloadObject(TelemetryEvent.CheckOut, this.telemetryContent, TelemetryConstant.Checkout);\n this.checkoutBySignInAttributes = getTelemetryAttributes(this.telemetryContent, payload);\n\n payload.contentAction.etext = TelemetryConstant.GuestCheckout;\n this.checkoutByGuestAttributes = getTelemetryAttributes(this.telemetryContent, payload);\n\n payload.contentAction.etext = TelemetryConstant.ViewShoppingBag;\n this.viewShoppingBagAttributes = getTelemetryAttributes(this.telemetryContent, payload);\n }\n\n public async componentDidMount(): Promise {\n const context = this.props.context.actionContext;\n\n reaction(\n () => this.props.data.cart.result?.cart.CartLines,\n async () => {\n this.setState({\n miniCartData: await getMiniCartData(context, this.props.data.cart.result!)\n });\n }\n );\n await this._setQuantityLimitsFeatureFlag();\n\n this.setState({\n orgUnitLocations: this.props.data.orgUnitLocations?.result\n });\n\n this._validateCart();\n }\n\n public componentDidUpdate(prevProps: ICartIconProps): void {\n this._validateCart();\n }\n\n public shouldComponentUpdate(nextProps: ICartIconProps, nextState: IMiniCartState): boolean {\n if (this.state === nextState && this.props.data === nextProps.data) {\n return false;\n }\n return true;\n }\n\n // eslint-disable-next-line complexity -- disabling the complexity for this method for now as its causing lot of other warnings\n public render(): JSX.Element | null {\n const {\n id,\n typeName,\n config: { enableHoverCart, isAnonymousCheckout },\n context: {\n request: {\n user: { isAuthenticated, signInUrl }\n }\n },\n context,\n resources\n } = this.props;\n\n const cart = (this.props.data.cart && this.props.data.cart.result) || undefined;\n const guestCheckoutUrl = getUrlSync('checkout', this.props.context.actionContext) || '';\n const cartUrl = getUrlSync('cart', this.props.context.actionContext) || '';\n const checkoutURL = this._getCheckoutURL(isAuthenticated, guestCheckoutUrl, signInUrl || '');\n const isCartEmpty = cart && cart.cart.CartLines && cart.cart.CartLines.length === 0;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- check config.\n const shouldShowMiniCart =\n cart?.isProductAddedToCart && this.props.context.app.config.addToCartBehavior === AddToCartBehavior.showMiniCart;\n const hasInvoiceLine = cart?.hasInvoiceLine;\n const emailDeliveryModeCode = this.props.context.request.channel?.EmailDeliveryModeCode;\n const cartLines = this._getCartLines();\n const validInventoryAcrossCartLines = validateCartLinesInventory(\n cart?.cart.CartLines ?? [],\n this.state.miniCartData.productAvailabilites ?? [],\n this.props.context.actionContext,\n this.state.miniCartData.products ?? [],\n emailDeliveryModeCode\n );\n const hasError =\n !validInventoryAcrossCartLines?.isValid ||\n (!validInventoryAcrossCartLines && !this.state.isCartValid) ||\n (cartLines ? cartLines.some(cartline => cartline.hasError) : false);\n const includeFlyout = this.props.data.cart && this.props.data.cart.status === 'SUCCESS' && enableHoverCart;\n const totalItemsInCart = cart?.totalItemsInCart ? cart.totalItemsInCart : 0;\n const goToCartButtonText = resources.goToCartButtonTitle.replace('{count}', totalItemsInCart.toString());\n const flyoutTitle = resources.flyoutTitle;\n const flyoutTooltip = {\n tag: UncontrolledTooltip,\n shouldShowMiniCart,\n placement: 'bottom-end',\n hideArrow: true,\n className: 'ms-cart-icon__flyout-container',\n trigger: 'hover',\n displayMode: 'FLYOUT',\n target: id,\n shouldShowCloseButton: true,\n cartPageUrl: cartUrl,\n hideAriaHidden: true\n };\n\n // If there are invoice lines, don't update mini cart price\n const price = (cart && !cart.hasInvoiceLine && cart.cart.TotalAmount) || undefined;\n const priceString = price\n ? resources.totalPriceFormatString.replace('{price}', context.cultureFormatter.formatCurrency(price))\n : '';\n const multiplePickupStoreSwitchName = 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature';\n this.channelDeliveryOptionConfig = this.props.data.channelDeliveryOptionConfig?.result;\n this.retailMultiplePickUpOptionEnabled = this.props.data.featureState?.result?.find(\n feature => feature.Name === multiplePickupStoreSwitchName\n )?.IsEnabled;\n\n const viewProps = {\n ...this.props,\n cartIcon: (\n \n ),\n cartlines: cartLines,\n FlyoutContainer: includeFlyout ? flyoutTooltip : undefined,\n CartlinesWrapper: {\n className: 'ms-cart-icon__cart-lines'\n },\n miniCartWrapper: {\n className: classnames('ms-cart-icon'),\n id: this.props.id\n },\n miniCartItemWrapper: {\n className: classnames('msc-cart-lines-item')\n },\n\n // If there are invoice lines, don't update mini cart checkout button\n // Checkout button will display by default to maintain backward compatibility. When Anonymous user checkout is enabled &&\n // user is authenticated then we will show the checkout button otherwise we will show the guest checkout button.\n checkoutAsSignInUserButton:\n !isCartEmpty && !hasInvoiceLine && (!isAnonymousCheckout || isAuthenticated) ? (\n \n {resources.checkoutButtonTitle}\n \n ) : null,\n checkoutAsGuestButton:\n isAnonymousCheckout && !isCartEmpty && !isAuthenticated ? (\n \n {resources.guestCheckoutButtonTitle}\n \n ) : null,\n goToCartButton: (\n \n {goToCartButtonText}\n \n ),\n checkoutBlockedDueToUnavailableFunds: null,\n flyoutTitle: {flyoutTitle},\n totalPrice:
    {priceString}
    \n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n private _validateCart(): void {\n const {\n data: { cart }\n } = this.props;\n const cartVersion = cart.result?.cart?.Version ?? undefined;\n if (this.lastValidatedCartVersion === cartVersion) {\n return;\n }\n\n this.lastValidatedCartVersion = cartVersion; // This field is populated to block concurrent requests\n\n if (this.state.isQuantityLimitsFeatureEnabled) {\n validateCartAsync(cart, this.props.telemetry, this.props.context)\n .then((result: CartLineValidationResultsByLineId | undefined) => {\n this.setState({ isCartValid: !ArrayExtensions.hasElements(result?.ValidationResultsPairs) });\n })\n .catch(() => {\n this.setState({ isCartValid: false });\n });\n } else {\n this.setState({ isCartValid: true });\n }\n }\n\n private _getCheckoutURL(isAuthenticated: boolean, guestCheckoutUrl: string, signInUrl: string): string {\n if (isAuthenticated) {\n return guestCheckoutUrl;\n }\n\n const isAbsoluteUrl = urlCheck(guestCheckoutUrl);\n let returnURL = guestCheckoutUrl;\n if (msdyn365Commerce.isBrowser && !isAbsoluteUrl) {\n returnURL = `${window.location.origin}${guestCheckoutUrl}`;\n }\n\n return `${signInUrl}${!signInUrl.includes('?') ? '?' : '&'}ru=${returnURL}`;\n }\n\n /**\n * Sort cartline items.\n * @param cartlines - Cartlines to be sorted.\n * @param sortOrder - Ascending or descending.\n * @returns - Sorted cartlines.\n */\n private readonly getSortedCartLines = (cartlines: CartLine[], sortOrder?: cartLinesSortOrder): CartLine[] => {\n const lines: CartLine[] = [...cartlines];\n const zero: number = 0;\n\n if (sortOrder === cartLinesSortOrder.descending) {\n return lines.sort((item1, item2) => (item2.LineNumber ?? zero) - (item1.LineNumber ?? zero));\n }\n return lines.sort((item1, item2) => (item1.LineNumber ?? zero) - (item2.LineNumber ?? zero));\n };\n\n private _getCartLines(): IFlyoutCartLineItemViewProps[] | null {\n const {\n context: {\n request: { channel: { PickupDeliveryModeCode } = { PickupDeliveryModeCode: undefined } }\n },\n config,\n telemetry,\n resources\n } = this.props;\n\n const imageSettings = this._getImageSettings(config.imageSettings);\n const cart = this.props.data.cart && this.props.data.cart.result;\n\n // Cart-icon could be placed in each page\n // so we check cart content to reduce number of RS calls\n return this.state.miniCartData.products && cart && cart.cart.CartLines && cart.cart.CartLines.length > 0\n ? FlyoutCartLineItems({\n cartlines: this.getSortedCartLines(cart.cart.CartLines, config.cartLinesSortOrder),\n products: this.state.miniCartData.products,\n productAvailabilites: this.state.miniCartData.productAvailabilites,\n productDeliveryOptions: this.state.miniCartData.deliveryOptions,\n imageSettings,\n outOfStockThreshold: this.props.context.app.config.outOfStockThreshold || 0,\n isStockCheckEnabled: this.props.context.app.config.enableStockCheck || false,\n maxCartlineQuantity: updateMaxQuantityForCartLineItem(this.props.context.app.config.maxQuantityForCartLineItem),\n gridSettings: this.props.context.request.gridSettings!,\n context: this.props.context,\n typeName: this.props.typeName,\n id: this.props.id,\n resources: {\n sizeString: resources.productDimensionTypeSize,\n colorString: resources.productDimensionTypeColor,\n configString: resources.productDimensionTypeConfiguration,\n styleString: resources.productDimensionTypeStyle,\n quantityDisplayString: resources.quantityDisplayText,\n salesAgreementPricePrompt: resources.salesAgreementPricePrompt,\n inputQuantityAriaLabel: '', // Not used\n discountStringText: '', // Not used\n originalPriceText: '',\n currentPriceText: '',\n shippingChargesText: '',\n shippingText: resources.shippingText\n },\n telemetry,\n removeButtonText: resources.removeCartButtonText,\n outOfStockText: '', // Not used\n outOfRangeOneText: '', // Not used\n outOfRangeFormatText: '', // Not used\n cartState: cart,\n orgUnitLocations: this.state.orgUnitLocations,\n removeItemClickHandler: this._removeItemFromCartHandler,\n pickupDeliveryModeCode: PickupDeliveryModeCode,\n telemetryContent: this.telemetryContent,\n channelDeliveryOptionConfig: this.retailMultiplePickUpOptionEnabled ? this.channelDeliveryOptionConfig : undefined,\n isQuantityLimitsFeatureEnabled: this.state.isQuantityLimitsFeatureEnabled,\n catalogs: this.props.data.catalogs?.result\n })\n : null;\n }\n\n private readonly _getImageSettings = (imageSettings: IImageSettings | undefined): IImageSettings => {\n return (\n imageSettings || {\n viewports: {\n xs: { q: 'w=80&h=94&m=6', w: 0, h: 0 },\n sm: { q: 'w=148&h=174&m=6', w: 0, h: 0 },\n lg: { q: 'w=148&h=174&m=6', w: 0, h: 0 }\n },\n lazyload: true\n }\n );\n };\n\n private readonly _removeItemFromCartHandler = (cartlineToRemove: CartLine) => {\n if (this.props.data.cart.result) {\n const input = {\n cartLineIds: [cartlineToRemove.LineId!.toString()]\n };\n this.props.data.cart.result.removeCartLines(input).catch(error => {\n this.props.telemetry.warning(error);\n this.props.telemetry.debug('Unable to Remove Cart Line');\n });\n }\n };\n\n private async _setQuantityLimitsFeatureFlag(): Promise {\n const featureStatuses = await this.props.data.featureState;\n\n const isChannelQuantityLimitsFeatureEnabledInHq =\n featureStatuses?.find(\n featureState => featureState.Name === 'Dynamics.AX.Application.EcommerceQuantityLimitConfigurationsFeature'\n )?.IsEnabled || false;\n if (isChannelQuantityLimitsFeatureEnabledInHq) {\n this.setState({ isQuantityLimitsFeatureEnabled: true });\n return;\n }\n\n const useSiteBuilderSettings = featureStatuses?.find(\n featureState => featureState.Name === 'RevertToSiteBuilderOrderQuantityLimitsSettings'\n )?.IsEnabled;\n\n if (useSiteBuilderSettings) {\n const defaultOrderQuantityLimitsFeatureConfig = this.props.context?.request?.app?.platform?.enableDefaultOrderQuantityLimits;\n if (!defaultOrderQuantityLimitsFeatureConfig || defaultOrderQuantityLimitsFeatureConfig === 'none') {\n this.setState({ isQuantityLimitsFeatureEnabled: false });\n return;\n }\n\n try {\n const featureStatuses = await this.props.data.featureState;\n const isQuantityLimitsFeatureEnabledInHq =\n featureStatuses?.find(\n featureState => featureState.Name === 'Dynamics.AX.Application.RetailDefaultOrderQuantityLimitsFeature'\n )?.IsEnabled || false;\n if (!isQuantityLimitsFeatureEnabledInHq) {\n this.setState({ isQuantityLimitsFeatureEnabled: false });\n return;\n }\n } catch (error) {\n this.props.telemetry.warning(error);\n this.props.telemetry.debug('Unable to get feature states');\n this.setState({ isQuantityLimitsFeatureEnabled: false });\n return;\n }\n if (defaultOrderQuantityLimitsFeatureConfig === 'all') {\n this.setState({ isQuantityLimitsFeatureEnabled: true });\n } else {\n this.props.data.customerInformation\n .then(customerInfo => {\n const result =\n !!customerInfo &&\n ((defaultOrderQuantityLimitsFeatureConfig === 'b2b' && customerInfo.IsB2b) ||\n (defaultOrderQuantityLimitsFeatureConfig === 'b2c' && !customerInfo.IsB2b));\n this.setState({ isQuantityLimitsFeatureEnabled: result });\n })\n .catch(error => {\n this.props.telemetry.warning(error);\n this.props.telemetry.debug('Unable to get customer info');\n });\n }\n } else {\n const cartConfiguration = await this.props.data.cartConfiguration;\n this.setState({ isQuantityLimitsFeatureEnabled: !(cartConfiguration?.IgnoreOrderSettings ?? false) });\n return;\n }\n }\n}\n\nexport default CartIcon;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ICartIconViewProps } from './cart-icon';\nimport { IFlyoutCartLineItemViewProps } from './components/flyout-cart-line-items';\n\nconst _renderCartlines = (cartLines: IFlyoutCartLineItemViewProps[] | undefined, props: ICartIconViewProps): JSX.Element[] | null => {\n if (!cartLines) {\n props.context.telemetry.error('Cartlines content is empty, module wont render');\n return null;\n }\n return cartLines.map((cartLine, index) => {\n return (\n \n {cartLine.cartline}\n {cartLine.storeLocation}\n {cartLine.remove}\n \n );\n });\n};\n\nconst CartIconView: React.FC = (props: ICartIconViewProps) => (\n \n {props.cartIcon}\n {props.FlyoutContainer ? (\n \n {props.flyoutTitle}\n {props.checkoutBlockedDueToUnavailableFunds}\n {_renderCartlines(props.cartlines, props)}\n {props.totalPrice}\n {props.checkoutAsSignInUserButton}\n {props.checkoutAsGuestButton}\n {props.goToCartButton}\n \n ) : (\n false\n )}\n \n);\n\nexport default CartIconView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as React from 'react';\n\nexport interface ICheckoutDeliveryOptionsDescriptionProps {\n description?: string;\n}\n\n/**\n * AddPaymentForm SFC.\n * @param root0\n * @param root0.description\n * @extends {React.FC}\n */\nconst CheckoutDeliveryOptionsDescription: React.FC = ({ description }) => {\n if (!description) {\n return null;\n }\n\n return {description};\n};\n\nexport default CheckoutDeliveryOptionsDescription;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as React from 'react';\n\nexport interface ICheckoutDeliveryOptionsErrorMessageProps {\n message?: string;\n}\n\n/**\n * AddPaymentForm SFC.\n * @param root0\n * @param root0.message\n * @extends {React.FC}\n */\nconst CheckoutDeliveryOptionsErrorMessage: React.FC = ({ message }) => {\n if (!message) {\n return null;\n }\n\n return

    {message}

    ;\n};\n\nexport default CheckoutDeliveryOptionsErrorMessage;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as React from 'react';\n\nexport interface ICheckoutDeliveryOptionsErrorTitleProps {\n title?: string;\n}\n\n/**\n * AddPaymentForm SFC.\n * @param root0\n * @param root0.title\n * @extends {React.FC}\n */\nconst CheckoutDeliveryOptionsErrorTitle: React.FC = ({ title }) => {\n if (!title) {\n return null;\n }\n\n return

    {title}

    ;\n};\n\nexport default CheckoutDeliveryOptionsErrorTitle;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { getPayloadObject, getTelemetryAttributes, ITelemetryContent, TelemetryConstant } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nexport interface ICheckoutDeliveryOptionsRadioButtonProps {\n isChecked: boolean;\n value?: string;\n ariaSetSize: number;\n ariaPosInSet: number;\n ariaLabel?: string;\n telemetryContent?: ITelemetryContent;\n onChange(event: React.ChangeEvent): void;\n}\n\n/**\n * AddPaymentForm SFC.\n * @param root0\n * @param root0.isChecked\n * @param root0.value\n * @param root0.ariaSetSize\n * @param root0.ariaPosInSet\n * @param root0.ariaLabel\n * @param root0.telemetryContent\n * @param root0.onChange\n * @extends {React.FC}\n */\nconst CheckoutDeliveryOptionsRadioButton: React.FC = ({\n isChecked,\n value,\n ariaSetSize,\n ariaPosInSet,\n ariaLabel,\n telemetryContent,\n onChange\n}) => {\n if (!value) {\n return null;\n }\n\n const payLoad = getPayloadObject('click', telemetryContent!, TelemetryConstant.DeliveryOptions);\n const attributes = getTelemetryAttributes(telemetryContent!, payLoad);\n\n return (\n \n );\n};\n\nexport default CheckoutDeliveryOptionsRadioButton;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { PriceComponent } from '@msdyn365-commerce/components';\nimport { CheckoutModule, ErrorLocation, ICheckoutState } from '@msdyn365-commerce/global-state';\nimport { Cart, ChannelDeliveryOptionConfiguration, FilterDeliveryModeOption } from '@msdyn365-commerce/retail-proxy';\nimport { getDeliveryOptionsAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/CartsDataActions.g';\nimport { Address, CartLine, DeliveryOption } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { IModuleStateProps, withModuleState } from '@msdyn365-commerce-modules/checkout-utilities';\nimport { QueryResultSettingsProxy, StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport { Button, getTelemetryObject, IModuleProps, INodeProps, ITelemetryContent, Waiting } from '@msdyn365-commerce-modules/utilities';\nimport classname from 'classnames';\nimport get from 'lodash/get';\nimport { action, computed, observable, reaction, when } from 'mobx';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { ErrorComponent } from '../../common/error';\nimport { ICheckoutDeliveryOptionsData } from './checkout-delivery-options.data';\nimport {\n filterDeliveryModeOption,\n ICheckoutDeliveryOptionsProps,\n useDefaultDeliveryOption\n} from './checkout-delivery-options.props.autogenerated';\nimport DescriptionComponent from './components/checkout-delivery-options.description';\nimport ErrorMessageComponent from './components/checkout-delivery-options.error-message';\nimport ErrorTitleComponent from './components/checkout-delivery-options.error-title';\nimport RadioButtonComponent from './components/checkout-delivery-options.radio-button';\nimport { focusOnCheckoutError } from '../../checkout-errors';\n\nexport interface ICheckoutDeliveryOptionsModuleProps\n extends ICheckoutDeliveryOptionsProps,\n IModuleStateProps {}\n\nexport interface ICheckoutDeliveryOption {\n DeliveryOption: INodeProps;\n description?: React.ReactNode;\n price?: React.ReactNode;\n}\n\nexport interface ICheckoutDeliveryOptionEdit extends ICheckoutDeliveryOption {\n code: string;\n radioButton?: React.ReactNode;\n}\n\nexport interface ICheckoutDeliveryOptionsList {\n DeliveryOptionsList: INodeProps;\n list: ICheckoutDeliveryOptionEdit[];\n}\n\nexport interface ICheckoutDeliveryOptionsError {\n Error: INodeProps;\n title: React.ReactNode;\n message: React.ReactNode;\n}\n\nexport interface ICheckoutDeliveryOptionsViewState {\n isLoading: boolean;\n isError: boolean;\n isShowList: boolean;\n isShowSelected: boolean;\n isShowSaveButton: boolean;\n isShowEditButton: boolean;\n isShowCancelButton: boolean;\n}\n\nexport interface ICheckoutDeliveryOptionsViewProps extends ICheckoutDeliveryOptionsProps<{}> {\n CheckoutDeliveryOptions: IModuleProps;\n selectedItemId: string;\n deliveryOptionsData: DeliveryOption[];\n isLoading: boolean;\n errorMessageData: string;\n viewState: ICheckoutDeliveryOptionsViewState;\n deliveryOptions?: ICheckoutDeliveryOptionsList;\n deliveryOptionSelected?: ICheckoutDeliveryOption;\n errorMessage?: ICheckoutDeliveryOptionsError;\n waiting?: React.ReactNode;\n saveButton?: React.ReactNode;\n editButton?: React.ReactNode;\n cancelButton?: React.ReactNode;\n alert?: React.ReactNode;\n checkoutErrorRef?: React.RefObject;\n onDeliveryOptionChange(event: React.ChangeEvent): void;\n onSave(): void;\n onEdit(): void;\n onCancel(): void;\n}\n\n/**\n *\n * CheckoutDeliveryOptions component.\n * @extends {React.Component>}\n */\n// @ts-expect-error\n@withModuleState\n@observer\nclass CheckoutDeliveryOptions extends React.Component {\n @observable private selectedItemId: string = '';\n\n @observable private deliveryOptions: DeliveryOption[] = [];\n\n @observable private isLoading: boolean = false;\n\n @observable private errorMessage?: string;\n\n @computed private get isDataReady(): boolean {\n return (this.props.data.checkout.result && this.props.data.checkout.status) === 'SUCCESS';\n }\n\n public get expressPaymentDetailsFromCartPage() {\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check for null/undefined.\n const properties =\n this.props.data.cart?.result?.cart?.ExtensionProperties?.find(property => property.Key === 'expressPaymentDetails')?.Value\n ?.StringValue ?? '';\n\n return properties ? JSON.parse(properties) : null;\n }\n\n public get isExpressPaymentAppliedInCartPage(): boolean {\n return this.expressPaymentDetailsFromCartPage?.isExpressCheckoutAppliedInCartPage ?? false;\n }\n\n private cartDeliveryMode?: string;\n\n private retailMultiplePickUpOptionEnabled?: boolean = false;\n\n private channelDeliveryOptionConfig?: ChannelDeliveryOptionConfiguration;\n\n private readonly telemetryContent?: ITelemetryContent;\n\n private readonly isSelectDefaultOptionEnabled?: boolean;\n\n private readonly checkoutErrorRef: React.RefObject = React.createRef();\n\n public constructor(props: ICheckoutDeliveryOptionsModuleProps) {\n super(props);\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n this.isSelectDefaultOptionEnabled =\n this.props.config.useDefaultDeliveryOption && this.props.config.useDefaultDeliveryOption !== useDefaultDeliveryOption.none;\n }\n\n public async componentDidMount(): Promise {\n when(\n () => this.isDataReady,\n async () => {\n await this.init();\n }\n );\n\n reaction(\n () => this.props.data.checkout.result?.shippingAddress,\n async () => {\n await this.loadDeliveryOptions();\n this.props.moduleState.setIsCancellable(false);\n\n await this.props.data.checkout.result?.updateShouldCollapsePaymentSection({ newShouldCollapsePaymentSection: true });\n }\n );\n\n reaction(\n () => this.props.data.checkout.result?.isExpressCheckoutApplied,\n async isExpressCheckoutApplied => {\n if (isExpressCheckoutApplied && this.canShip() && !this.isExpressPaymentAppliedInCartPage) {\n await this.loadDeliveryOptions();\n this.props.moduleState.setIsCancellable(false);\n\n await this.props.data.checkout.result?.updateShouldCollapsePaymentSection({ newShouldCollapsePaymentSection: true });\n }\n }\n );\n\n if (this.props.data.checkout.result?.shouldEnableCheckoutErrorDisplayMessaging) {\n reaction(\n () => this.props.data.checkout.result?.checkoutError,\n checkoutError => {\n if (\n checkoutError &&\n checkoutError.errorLocation === ErrorLocation.CheckoutDeliveryOptions &&\n checkoutError.errorMessage\n ) {\n this.setError(checkoutError.errorMessage);\n }\n }\n );\n\n reaction(\n () => this.props.data.checkout.result?.checkoutErrorFocus,\n checkoutErrorFocus => {\n if (checkoutErrorFocus === CheckoutModule.CheckoutDeliveryOptions) {\n focusOnCheckoutError(this.checkoutErrorRef, this.props.context.actionContext);\n }\n }\n );\n }\n }\n\n public shouldComponentUpdate(nextProps: ICheckoutDeliveryOptionsModuleProps, nextState: ICheckoutDeliveryOptionsViewState): boolean {\n if (this.state === nextState && this.props.data === nextProps.data) {\n return false;\n }\n return true;\n }\n\n public render(): JSX.Element | null {\n const multiplePickupStoreSwitchName = 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature';\n this.channelDeliveryOptionConfig = this.props.data.channelDeliveryOptionConfig?.result;\n this.retailMultiplePickUpOptionEnabled = this.props.data.featureState?.result?.find(\n feature => feature.Name === multiplePickupStoreSwitchName\n )?.IsEnabled;\n\n if (!this.canShip()) {\n this.props.context.telemetry.error('Checkout delivery options content is empty, module wont render');\n return null;\n }\n\n const {\n moduleState: { isReady, isUpdating, hasError }\n } = this.props;\n const isError = !this.isLoading && hasError;\n const isShowList = !this.isLoading && !hasError && isUpdating && !this.isSelectDefaultOptionEnabled;\n const isShowSelected = !this.isLoading && !hasError && isReady;\n const { errorMessageTitle, deliveryOptionAriaLabel } = this.props.resources;\n\n const viewProps = {\n ...this.props,\n onDeliveryOptionChange: this.onDeliveryOptionChange,\n selectedItemId: this.selectedItemId,\n deliveryOptionsData: this.deliveryOptions,\n isLoading: this.isLoading,\n alert: this.errorMessage && ,\n errorMessageData: this.errorMessage,\n viewState: {\n isLoading: this.isLoading,\n isError,\n isShowList,\n isShowSelected,\n isShowSaveButton: isShowList && !this.props.moduleState.hasExternalSubmitGroup,\n isShowEditButton: isShowSelected && !this.props.moduleState.hasExternalSubmitGroup,\n isShowCancelButton: isShowList && !this.props.moduleState.hasExternalSubmitGroup && !!this.getSavedDeliveryOption()\n },\n CheckoutDeliveryOptions: {\n moduleProps: this.props,\n className: classname('ms-checkout-delivery-options', this.props.config.className)\n },\n deliveryOptions: {\n DeliveryOptionsList: {\n className: 'ms-checkout-delivery-options__list',\n role: 'list',\n 'aria-label': deliveryOptionAriaLabel\n },\n list: this.getDeliveryOptionList()\n },\n deliveryOptionSelected: this.getDeliveryOptionSelected(),\n errorMessage: this.getErrorMessage(),\n waiting: ,\n checkoutErrorRef: this.checkoutErrorRef,\n saveButton: this.getSaveButton(),\n editButton: this.getEditButton(),\n cancelButton: this.getCancelButton(),\n onSave: this.onSave,\n onEdit: this.onEdit,\n onCancel: this.onCancel\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n @action\n private readonly init = async (): Promise => {\n this.props.moduleState.init({\n onEdit: this.isSelectDefaultOptionEnabled ? undefined : this.onEdit,\n onCancel: this.isSelectDefaultOptionEnabled ? undefined : this.onCancel,\n onSubmit: this.isSelectDefaultOptionEnabled ? undefined : this.onSubmit,\n status:\n !(this.props.config.useDefaultDeliveryOption === useDefaultDeliveryOption.notDisplaySelectedDeliveryOption) &&\n this.canShip()\n ? 'updating'\n : 'disabled'\n });\n\n this.cartDeliveryMode = this.getSavedDeliveryOption();\n await this.loadDeliveryOptions();\n };\n\n private readonly canShip = (): boolean => {\n const hasInvoice = this.props.data.checkout.result?.checkoutCart.hasInvoiceLine;\n return !hasInvoice && this.getCartLinesForShipping().length > 0;\n };\n\n private readonly isDeliveryModeExists = (deliveryMode: string | undefined): boolean => {\n if (deliveryMode) {\n if (this.deliveryOptions.find(deliveryOption => deliveryOption.Code === deliveryMode)) {\n return true;\n }\n }\n return false;\n };\n\n private readonly getDeliveryOptionSelected = (): ICheckoutDeliveryOption | null => {\n const selectedItem = this.deliveryOptions.find(deliveryOption => deliveryOption.Code === this.selectedItemId);\n if (!selectedItem) {\n this.props.context.telemetry.error('Checkout delivery options content is empty, module wont render');\n return null;\n }\n\n const { id, typeName, context } = this.props;\n const { priceFree } = this.props.resources;\n const price = get(selectedItem, 'ShippingChargeAmount', 0);\n const channelConfig = this.props.context.request.channel;\n return {\n DeliveryOption: { className: 'ms-checkout-delivery-options__option-selected' },\n description: ,\n price: (\n \n )\n };\n };\n\n private readonly getErrorMessage = (): ICheckoutDeliveryOptionsError => {\n const { errorMessageTitle } = this.props.resources;\n return {\n // @ts-expect-error\n CheckoutDeliveryOptionsError: { tag: 'span', className: 'ms-address-form__error', role: 'alert', 'aria-live': 'assertive' },\n title: ,\n message: \n };\n };\n\n private readonly getDeliveryOptionList = (): ICheckoutDeliveryOptionEdit[] => {\n const count = this.deliveryOptions.length;\n const { priceFree } = this.props.resources;\n const { id, typeName, context } = this.props;\n const channelConfig = this.props.context.request.channel;\n\n return this.deliveryOptions.map((deliveryOption: DeliveryOption, index: number) => {\n return {\n DeliveryOption: { className: 'ms-checkout-delivery-options__option', role: 'listitem' },\n code: deliveryOption.Code || '',\n radioButton: (\n \n ),\n description: (\n \n ),\n price: (\n \n )\n };\n });\n };\n\n private readonly getSaveButton = (): React.ReactNode => {\n const { saveBtnLabel = 'Save' } = this.props.resources;\n return (\n \n {saveBtnLabel}\n \n );\n };\n\n private readonly getEditButton = (): React.ReactNode => {\n const { editBtnLabel = 'Change' } = this.props.resources;\n return (\n \n );\n };\n\n private readonly getCancelButton = (): React.ReactNode => {\n const { cancelBtnLabel = 'Cancel' } = this.props.resources;\n return (\n \n );\n };\n\n private readonly setError = (errorMessage: string): void => {\n this.props.telemetry.error(errorMessage);\n this.props.moduleState.setHasError(true);\n this.props.moduleState.onUpdating();\n this.errorMessage = errorMessage;\n };\n\n private readonly clearError = (): void => {\n this.props.moduleState.setHasError(false);\n this.errorMessage = undefined;\n };\n\n private readonly onSave = async (): Promise => {\n await this.onSubmit();\n };\n\n private readonly onEdit = async (): Promise => {\n this.props.telemetry.information('Delivery options onEdit is called.');\n\n this.clearError();\n this.onUpdating();\n await this.props.data.checkout.result?.updateShouldCollapsePaymentSection({ newShouldCollapsePaymentSection: true });\n };\n\n private readonly onSubmit = async (): Promise => {\n this.props.telemetry.information('Delivery options onSubmit is called.');\n\n await this.updateCartDeliverySpecification(this.selectedItemId);\n await this.props.data.checkout.result?.updateShouldCollapsePaymentSection({ newShouldCollapsePaymentSection: false });\n };\n\n private readonly onCancel = async (): Promise => {\n this.props.telemetry.information('Delivery options onCancel is called.');\n\n // Reset to the saved value\n const savedDeliveryOption = this.getSavedDeliveryOption();\n if (savedDeliveryOption) {\n this.selectedItemId = savedDeliveryOption;\n this.onReady();\n\n await this.props.data.checkout.result?.updateShouldCollapsePaymentSection({ newShouldCollapsePaymentSection: false });\n } else {\n this.onUpdating();\n }\n };\n\n private readonly getSavedDeliveryOption = (): string | undefined => {\n const cartLinesForShipping = this.getCartLinesForShipping();\n return cartLinesForShipping[0] && cartLinesForShipping[0].DeliveryMode;\n };\n\n private readonly updateCartDeliverySpecification = async (deliveryModeId: string): Promise => {\n if (deliveryModeId.trim() === '') {\n return;\n }\n\n const { resources } = this.props;\n const checkoutState = this.props.data.checkout.result as ICheckoutState;\n const updateCartDeliverySpecificationInput = {\n deliveryModeId,\n shippingAddress: checkoutState.shippingAddress,\n channelDeliveryOptionConfig: this.retailMultiplePickUpOptionEnabled ? this.channelDeliveryOptionConfig : undefined\n };\n\n this.clearError();\n this.onPending();\n\n await checkoutState.checkoutCart\n .updateCartDeliverySpecification(updateCartDeliverySpecificationInput)\n .then(response => {\n if (response.status === 'FAILED') {\n const errorMessage = `${response.errorDetails?.LocalizedMessage}`;\n this.setError(StringExtensions.isNullOrEmpty(errorMessage) ? resources.genericErrorMessage : errorMessage);\n }\n\n this.onReady();\n this.props.moduleState.setIsCancellable(true);\n })\n .catch(() => {\n this.setError(resources.genericErrorMessage);\n });\n };\n\n private readonly getCartLinesForShipping = (): CartLine[] => {\n const { request } = this.props.context;\n const pickupDeliveryModeCode = request && request.channel && request.channel.PickupDeliveryModeCode;\n const emailDeliveryModeCode = request && request.channel && request.channel.EmailDeliveryModeCode;\n\n return this.retailMultiplePickUpOptionEnabled\n ? ((this.props.data.checkout.result && this.props.data.checkout.result.checkoutCart.cart.CartLines) || []).filter(cartLine =>\n cartLine.DeliveryMode && cartLine.DeliveryMode !== ''\n ? cartLine.DeliveryMode !==\n this.channelDeliveryOptionConfig?.PickupDeliveryModeCodes?.find(\n deliveryMode => deliveryMode === cartLine.DeliveryMode\n ) && cartLine.DeliveryMode !== emailDeliveryModeCode\n : cartLine\n )\n : ((this.props.data.checkout.result && this.props.data.checkout.result.checkoutCart.cart.CartLines) || []).filter(cartLine =>\n cartLine.DeliveryMode && cartLine.DeliveryMode !== ''\n ? cartLine.DeliveryMode !== pickupDeliveryModeCode && cartLine.DeliveryMode !== emailDeliveryModeCode\n : cartLine\n );\n };\n\n private readonly getDeliveryOptions = async (shippingAddress: Address): Promise => {\n if (!this.props.data.checkout.result) {\n return;\n }\n\n const { context, resources, config } = this.props;\n const cartState = this.props.data.checkout.result?.checkoutCart;\n const cartId = (cartState.cart as Cart).Id;\n\n if (context) {\n this.isLoading = true;\n this.deliveryOptions = [];\n this.selectedItemId = '';\n this.clearError();\n\n try {\n let originalDeliveryMode: string = '';\n const shippingCartLines = this.getCartLinesForShipping();\n const hasShippingDeliveryLines = shippingCartLines && shippingCartLines.length > 0 && shippingCartLines[0].DeliveryMode;\n if (hasShippingDeliveryLines) {\n // First store the delivery mode, so that we can restore the shipping information.\n originalDeliveryMode = shippingCartLines[0].DeliveryMode || '';\n\n // Clear the delivery information on retail server, so GetDeliveryOptions charge calculation works correctly\n const cart = cartState.cart;\n await cartState.clearCartLinesDeliveryInformation({\n cart,\n channelDeliveryOptionConfiguration: this.channelDeliveryOptionConfig\n });\n }\n\n // TODO: Check if we can move this getDeliveryOptions to checkout state\n let deliveryOptionFilter: FilterDeliveryModeOption;\n switch (config.filterDeliveryModeOption) {\n case filterDeliveryModeOption.none:\n deliveryOptionFilter = FilterDeliveryModeOption.None;\n break;\n case filterDeliveryModeOption.filterOutNonCarrierDeliveryMode:\n deliveryOptionFilter = FilterDeliveryModeOption.FilterOutNonCarrierDeliveryMode;\n break;\n default:\n deliveryOptionFilter = FilterDeliveryModeOption.FilterOutNonCarrierDeliveryMode;\n }\n const response = await getDeliveryOptionsAsync(\n {\n callerContext: context.actionContext,\n queryResultSettings: QueryResultSettingsProxy.getPagingFromInputDataOrDefaultValue(context.actionContext)\n },\n cartId,\n shippingAddress,\n [],\n deliveryOptionFilter,\n true\n );\n\n if (hasShippingDeliveryLines) {\n await this.updateCartDeliverySpecification(originalDeliveryMode);\n }\n\n if (response && response.length > 0) {\n this.deliveryOptions = response;\n }\n } catch {\n this.setError(resources.genericErrorMessage);\n }\n\n if (this.deliveryOptions.length === 0) {\n this.setError(resources.deliveryOptionsNotFound);\n } else if (this.cartDeliveryMode && this.isDeliveryModeExists(this.cartDeliveryMode)) {\n this.selectedItemId = this.cartDeliveryMode;\n this.cartDeliveryMode = undefined;\n this.onReady();\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check for null/undefined.\n this.props.data.checkout.result?.updateHasCartDeliveryMode({ newHasCartDeliveryMode: true });\n\n if (!this.props.data.checkout.result?.isPaymentVerificationRedirection) {\n await this.props.data.checkout.result.updateShouldCollapsePaymentSection({ newShouldCollapsePaymentSection: false });\n }\n } else {\n this.onUpdating();\n this.selectedItemId = this.deliveryOptions.length > 0 ? this.deliveryOptions[0].Code || '' : ''; // By default, select first delivery\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check for null/undefined.\n this.props.data.checkout.result?.updateHasCartDeliveryMode({ newHasCartDeliveryMode: !!this.isSelectDefaultOptionEnabled });\n }\n\n this.isLoading = false;\n }\n };\n\n private readonly getStoredDeliveryOptions = async (): Promise => {\n if (!this.props.data.checkout.result) {\n return;\n }\n\n const { context } = this.props;\n const cartState = this.props.data.checkout.result.checkoutCart;\n\n if (context) {\n this.isLoading = true;\n this.deliveryOptions = [];\n this.selectedItemId = '';\n this.clearError();\n\n let originalDeliveryMode: string = '';\n const shippingCartLines = this.getCartLinesForShipping();\n const hasShippingDeliveryLines = shippingCartLines && shippingCartLines.length > 0 && shippingCartLines[0].DeliveryMode;\n if (hasShippingDeliveryLines) {\n // First store the delivery mode, so that we can restore the shipping information.\n originalDeliveryMode = shippingCartLines[0].DeliveryMode || '';\n\n // Clear the delivery information on retail server, so GetDeliveryOptions charge calculation works correctly\n const cart = cartState.cart;\n await cartState.clearCartLinesDeliveryInformation({\n cart,\n channelDeliveryOptionConfiguration: this.channelDeliveryOptionConfig\n });\n if (hasShippingDeliveryLines) {\n await this.updateCartDeliverySpecification(originalDeliveryMode);\n }\n }\n\n if (this.cartDeliveryMode) {\n this.selectedItemId = this.cartDeliveryMode;\n this.cartDeliveryMode = undefined;\n this.onReady();\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check for null/undefined.\n this.props.data.checkout.result?.updateHasCartDeliveryMode({ newHasCartDeliveryMode: true });\n\n if (!this.props.data.checkout.result.isPaymentVerificationRedirection) {\n await this.props.data.checkout.result.updateShouldCollapsePaymentSection({ newShouldCollapsePaymentSection: false });\n }\n }\n\n this.isLoading = false;\n }\n };\n\n private readonly loadDeliveryOptions = async (): Promise => {\n const shippingAddress = this.props.data.checkout.result?.shippingAddress;\n\n if (this.canShip() && shippingAddress) {\n if (\n !this.props.data.checkout.result?.isPaymentVerificationRedirection ||\n this.isSelectDefaultOptionEnabled ||\n this.props.data.checkout.result?.isExpressCheckoutApplied\n ) {\n await this.getDeliveryOptions(shippingAddress);\n }\n\n if (this.props.data.checkout.result?.isPaymentVerificationRedirection) {\n await this.getStoredDeliveryOptions();\n }\n\n if (\n this.isSelectDefaultOptionEnabled ||\n this.props.data.checkout.result?.isExpressCheckoutApplied ||\n this.isExpressPaymentAppliedInCartPage\n ) {\n this.onSubmit();\n }\n }\n };\n\n private readonly onDeliveryOptionChange = (event: React.ChangeEvent) => {\n const deliveryModeId = event.currentTarget.value;\n this.selectedItemId = deliveryModeId;\n };\n\n private readonly onReady = () => {\n if (!(this.props.config.useDefaultDeliveryOption === useDefaultDeliveryOption.notDisplaySelectedDeliveryOption)) {\n this.props.moduleState.onReady();\n }\n };\n\n private readonly onUpdating = () => {\n if (!(this.props.config.useDefaultDeliveryOption === useDefaultDeliveryOption.notDisplaySelectedDeliveryOption)) {\n this.props.moduleState.onUpdating();\n }\n };\n\n private readonly onPending = () => {\n if (!this.isSelectDefaultOptionEnabled) {\n this.props.moduleState.onPending();\n }\n };\n}\n\nexport default CheckoutDeliveryOptions;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport {\n ICheckoutDeliveryOption,\n ICheckoutDeliveryOptionEdit,\n ICheckoutDeliveryOptionsList,\n ICheckoutDeliveryOptionsViewProps\n} from './checkout-delivery-options';\n\nconst DeliveryOptionList: React.FC = ({ DeliveryOptionsList, list }) => {\n if (!list || list.length === 0) {\n return null;\n }\n\n return (\n \n {list.map((deliveryOption: ICheckoutDeliveryOptionEdit) => {\n return (\n \n {deliveryOption.radioButton}\n {deliveryOption.description}\n {deliveryOption.price}\n \n );\n })}\n \n );\n};\n\nconst DeliveryOptionSelected: React.FC = ({ DeliveryOption, description, price }) => {\n return (\n \n {description}\n {price}\n \n );\n};\n\nconst CheckoutDeliveryOptionsView: React.FC = props => {\n const {\n CheckoutDeliveryOptions,\n checkoutErrorRef,\n viewState,\n deliveryOptions,\n deliveryOptionSelected,\n alert,\n waiting,\n saveButton,\n editButton,\n cancelButton\n } = props;\n\n return (\n // TODO: All wrapper div should be provided by viewProps. Once SDK provide the sln, update markup.\n \n {viewState.isLoading && waiting}\n {viewState.isError && alert}\n {viewState.isShowList && deliveryOptions && }\n {viewState.isShowSelected && deliveryOptionSelected && }\n {viewState.isShowSaveButton && saveButton}\n {viewState.isShowEditButton && editButton}\n {viewState.isShowCancelButton && cancelButton}\n \n );\n};\n\nexport default CheckoutDeliveryOptionsView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Alert, Button, INodeProps, NodeTag } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { showAdditionalFields } from '../checkout-gift-card.props.autogenerated';\n\nexport interface IGetFormInput {\n errorMessage: string;\n giftCardNumber: string;\n giftCardPin: string;\n giftCardExp: string;\n inputRef?: React.RefObject;\n inputPinRef?: React.RefObject;\n inputExpRef?: React.RefObject;\n supportExternalGiftCard?: boolean;\n additionalFields?: showAdditionalFields;\n disableAddGiftCard?: boolean;\n resources: {\n applyGiftCardButton: string;\n giftCardFormLabel: string;\n giftCardNumberLabel: string;\n giftCardPinLabel: string;\n giftCardExpLabel: string;\n giftCardAlertLabel: string;\n giftCardPinPlaceholderText: string;\n giftCardExpPlaceholderText: string;\n };\n onEnterGiftCardNumber(giftCardNumber: string): void;\n onEnterGiftCardPin(giftCardPin: string): void;\n onEnterGiftCardExp(giftCardExp: string): void;\n onApplyGiftCard(): Promise;\n}\n\nexport interface IForm {\n formProps: INodeProps;\n label: React.ReactNode;\n inputPinLabel: React.ReactNode;\n inputExpLabel: React.ReactNode;\n alert: React.ReactNode;\n inputProps: INodeProps;\n inputNumProps: INodeProps;\n inputPinProps: INodeProps;\n inputExpProps: INodeProps;\n inputNumber: React.ReactNode;\n inputPin: React.ReactNode;\n inputExp: React.ReactNode;\n applyButton: React.ReactNode;\n supportExternalGiftCard: boolean | undefined;\n showGiftCardPinInput: boolean | undefined;\n showGiftCardExpInput: boolean | undefined;\n alertFieldLabel: React.ReactNode;\n}\n\n/**\n * On Apply Function.\n * @param onApplyGiftCard -On Apply Gift Card Function.\n * @returns Call of Apply Gift Card Function.\n */\nconst onApplyHandler = (onApplyGiftCard: () => Promise) => async (event: React.SyntheticEvent): Promise => {\n event.preventDefault();\n await onApplyGiftCard();\n};\n\n/**\n * On change number Function.\n * @param onEnterGiftCardNumber -On enter gift card number Function.\n * @returns Call of on enter gift card number Function.\n */\nconst onChangeNumberHandler = (onEnterGiftCardNumber: (giftCardNumber: string) => void) => (event: React.ChangeEvent) => {\n const value = (event.target.value || '').replace(new RegExp('[<>]', 'gi'), '');\n onEnterGiftCardNumber(value);\n};\n\n/**\n * On Change pin event.\n * @param onEnterGiftCardPin -On enter gift card pin Function.\n * @returns Call of on enter gift card pin Function.\n */\nconst onChangePinHandler = (onEnterGiftCardPin: (giftCardPin: string) => void) => (event: React.ChangeEvent) => {\n const value = (event.target.value || '').replace(new RegExp('[<>]', 'gi'), '');\n onEnterGiftCardPin(value);\n};\n\n/**\n * On Change Event.\n * @param onEnterGiftCardExp -On enter gift card function.\n * @returns Call of On enter gift card function.\n */\n// Need to filter out the month and year\nconst onChangeExpHandler = (onEnterGiftCardExp: (giftCardExp: string) => void) => (event: React.ChangeEvent) => {\n const value = (event.target.value || '').replace(new RegExp('[<>]', 'gi'), '');\n onEnterGiftCardExp(value);\n};\n\nexport const getForm = (options: IGetFormInput): IForm => {\n const {\n errorMessage,\n inputRef,\n inputPinRef,\n inputExpRef,\n giftCardNumber,\n giftCardPin,\n giftCardExp,\n onEnterGiftCardNumber,\n onEnterGiftCardPin,\n onEnterGiftCardExp,\n onApplyGiftCard,\n supportExternalGiftCard,\n additionalFields,\n disableAddGiftCard,\n resources: {\n applyGiftCardButton,\n giftCardFormLabel,\n giftCardNumberLabel,\n giftCardPinLabel,\n giftCardExpLabel,\n giftCardAlertLabel,\n giftCardPinPlaceholderText,\n giftCardExpPlaceholderText\n }\n } = options;\n\n const formProps = {\n className: classnames('ms-checkout-gift-card__form', { 'is-invalid': !!errorMessage }),\n onSubmit: onApplyHandler(onApplyGiftCard),\n tag: 'form' as NodeTag\n };\n\n const label = (\n \n );\n\n const inputPinLabel = (\n \n );\n\n const inputExpLabel = (\n \n );\n\n const alertFieldLabel = (\n \n );\n\n const alert = (\n \n {errorMessage}\n \n );\n\n const inputProps = {\n className: 'ms-checkout-gift-card__input-fields'\n };\n\n const inputNumProps = {\n className: 'ms-checkout-gift-card__input-num-fields'\n };\n\n const inputPinProps = {\n className: 'ms-checkout-gift-card__input-pin-fields'\n };\n\n const inputExpProps = {\n className: 'ms-checkout-gift-card__input-exp-fields'\n };\n\n const inputNumber = (\n \n );\n\n const inputPin = (\n \n );\n\n const inputExp = (\n \n );\n\n const applyButton = (\n \n {applyGiftCardButton}\n \n );\n\n let showGiftCardPinInput = false;\n let showGiftCardExpInput = false;\n\n switch (additionalFields) {\n case showAdditionalFields.pin:\n showGiftCardPinInput = true;\n break;\n case showAdditionalFields.expirationDate:\n showGiftCardExpInput = true;\n break;\n case showAdditionalFields.pinAndExpirationDate:\n showGiftCardPinInput = true;\n showGiftCardExpInput = true;\n break;\n default:\n }\n\n return {\n formProps,\n label,\n inputPinLabel,\n inputExpLabel,\n alert,\n inputProps,\n inputNumProps,\n inputPinProps,\n inputExpProps,\n inputNumber,\n inputPin,\n inputExp,\n applyButton,\n supportExternalGiftCard,\n showGiftCardPinInput,\n showGiftCardExpInput,\n alertFieldLabel\n };\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IGiftCardExtend } from '@msdyn365-commerce/global-state';\nimport { Button, INodeProps } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nexport interface IGetItemInput {\n giftCard: IGiftCardExtend;\n canRemove: boolean;\n resources: {\n enteredGiftCardLabel: string;\n giftCardAvailableBalanceLabel: string;\n removeGiftCardButton: string;\n };\n getFormattedPrice(price?: number, currencyCode?: string): string;\n onRemoveGiftCard(giftCardNumber: string): void;\n}\n\nexport interface IItem {\n itemProps: INodeProps;\n id?: string;\n selectedGiftCard: React.ReactNode;\n removeButton?: React.ReactNode;\n}\n\n/**\n * On remove function.\n * @param onRemoveGiftCard -Gift card number function.\n * @param giftCard -Gift card values.\n * @returns Call of onRemoveGiftCard function.\n */\nconst onRemoveHandler = (onRemoveGiftCard: (giftCardNumber: string) => void, giftCard: IGiftCardExtend) => (): void => {\n onRemoveGiftCard(giftCard.Id ?? '');\n};\n\n/**\n * GiftCardItem component.\n * @param root0\n * @param root0.giftCard\n * @param root0.getFormattedPrice\n * @param root0.canRemove\n * @param root0.onRemoveGiftCard\n * @param root0.resources\n * @param root0.resources.enteredGiftCardLabel\n * @param root0.resources.giftCardAvailableBalanceLabel\n * @param root0.resources.removeGiftCardButton\n * @extends {React.PureComponent}\n */\nexport const getItem = ({\n giftCard,\n getFormattedPrice,\n canRemove,\n onRemoveGiftCard,\n resources: { enteredGiftCardLabel, giftCardAvailableBalanceLabel, removeGiftCardButton }\n}: IGetItemInput): IItem => {\n const balance = getFormattedPrice(giftCard.Balance, giftCard.CardCurrencyCode);\n const giftCardLast4Digit = (giftCard.Id || '').substr(-4);\n\n const itemProps = {\n className: 'ms-checkout-gift-card__item'\n };\n\n const selectedGiftCard = (\n \n {enteredGiftCardLabel}\n {` `}\n {giftCardLast4Digit}\n {' ('}\n {giftCardAvailableBalanceLabel}\n {` `}\n {balance}\n {')'}\n \n );\n\n const removeButton = canRemove && (\n \n );\n\n return {\n itemProps,\n id: giftCard.Id,\n selectedGiftCard,\n removeButton\n };\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IGiftCardExtend } from '@msdyn365-commerce/global-state';\nimport { INodeProps } from '@msdyn365-commerce-modules/utilities';\n\nimport { getItem, IItem } from './get-item';\n\ninterface IGetListInput {\n giftCards?: IGiftCardExtend[];\n canRemove: boolean;\n resources: {\n enteredGiftCardLabel: string;\n giftCardAvailableBalanceLabel: string;\n removeGiftCardButton: string;\n };\n getFormattedPrice(price?: number, currencyCode?: string): string;\n onRemoveGiftCard(giftCardNumber: string): void;\n}\n\nexport interface IList {\n listProps: INodeProps;\n list: IItem[];\n}\n\nexport const getList = ({ giftCards, canRemove, resources, getFormattedPrice, onRemoveGiftCard }: IGetListInput): IList | undefined => {\n if (!giftCards || giftCards.length === 0) {\n return undefined;\n }\n\n const listProps = {\n className: 'ms-checkout-gift-card__list'\n };\n\n const list = giftCards.map(giftCard =>\n getItem({\n canRemove,\n getFormattedPrice,\n giftCard,\n onRemoveGiftCard,\n resources\n })\n );\n\n return {\n listProps,\n list\n };\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as React from 'react';\n\ninterface IGiftCardTitleProps {\n title: string;\n}\n\nconst GiftCardTitle: React.FC = ({ title }) => ;\n\nexport default GiftCardTitle;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { CheckoutModule, ErrorLocation, IGiftCardExtend } from '@msdyn365-commerce/global-state';\nimport {\n getGiftCardAsync,\n getTenderTypesAsync,\n resolveCardTypesAsync\n} from '@msdyn365-commerce/retail-proxy/dist/DataActions/StoreOperationsDataActions.g';\nimport {\n CardType,\n CardTypeInfo,\n GiftCard,\n RetailOperation,\n TenderType\n} from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { IModuleStateProps, withModuleState, EnabledPaymentsForOBO } from '@msdyn365-commerce-modules/checkout-utilities';\nimport { IModuleProps } from '@msdyn365-commerce-modules/utilities';\nimport classname from 'classnames';\nimport { computed, reaction, when } from 'mobx';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { OPERATIONS } from '../checkout';\nimport { ICheckoutGiftCardData } from './checkout-gift-card.data';\nimport { ICheckoutGiftCardProps } from './checkout-gift-card.props.autogenerated';\nimport { getForm, IForm } from './components/get-form';\nimport { getList, IList } from './components/get-list';\nimport TitleCompoent from './components/title';\nimport { focusOnCheckoutError } from '../../checkout-errors';\n\nexport * from './components/get-form';\nexport * from './components/get-item';\nexport * from './components/get-list';\n\ninterface ICheckoutGiftCardState {\n isFetchingGiftCard: boolean;\n errorMessage: string;\n giftCardNumber: string;\n giftCardPin: string;\n giftCardExp: string;\n}\n\nenum SupportedGiftCardType {\n Internal = 'internal',\n External = 'external',\n Both = 'both'\n}\n\nexport interface ICheckoutGiftCardModuleProps extends ICheckoutGiftCardProps, IModuleStateProps {}\n\nexport interface IShowResource {\n title: React.ReactNode;\n list?: IList;\n}\n\nexport interface IAddResource {\n form: IForm;\n list?: IList;\n}\n\nexport interface ICheckoutGiftCardViewProps extends ICheckoutGiftCardProps<{}>, ICheckoutGiftCardState {\n className?: string;\n\n showGiftCard?: IShowResource;\n addGiftCard?: IAddResource;\n\n checkoutGiftCardProps: IModuleProps;\n couldPaidByGiftCard?: boolean;\n isEnabled?: boolean;\n checkoutErrorRef?: React.RefObject;\n onEdit?(): void;\n onCancel?(): void;\n onSubmit?(): void;\n enterGiftCardNumber?(giftCardNumber: string): void;\n enterGiftCardPin?(giftCardNumber: string): void;\n enterGiftCardExp?(giftCardNumber: string): void;\n removeGiftCard?(giftCardNumber: string): void;\n applyGiftCard?(): void;\n}\n\n/**\n *\n * CheckoutGiftCard component.\n * @extends {React.Component, ICheckoutGiftCardState>}\n */\n@observer\nexport class CheckoutGiftCard extends React.Component {\n public state: ICheckoutGiftCardState = {\n isFetchingGiftCard: false,\n errorMessage: '',\n giftCardNumber: '',\n giftCardPin: '',\n giftCardExp: ''\n };\n\n private readonly inputRef: React.RefObject = React.createRef();\n\n private readonly inputPinRef: React.RefObject = React.createRef();\n\n private readonly inputExpRef: React.RefObject = React.createRef();\n\n private readonly checkoutErrorRef: React.RefObject = React.createRef();\n\n @computed get isDataReady(): boolean {\n return (this.props.data.checkout.result && this.props.data.checkout.status) === 'SUCCESS';\n }\n\n @computed get getLoyaltyAmount(): number {\n const checkoutState = this.props.data.checkout.result;\n if (!checkoutState || !checkoutState.loyaltyAmount) {\n return 0;\n }\n return checkoutState.loyaltyAmount;\n }\n\n @computed get getCustomerAccountAmount(): number {\n const checkoutState = this.props.data.checkout.result;\n return checkoutState && checkoutState.customerAccountAmount ? checkoutState.customerAccountAmount : 0;\n }\n\n @computed get getGiftCardTotalAmount(): number {\n const checkoutState = this.props.data.checkout.result;\n if (!checkoutState || !checkoutState.giftCardExtends) {\n return 0;\n }\n return checkoutState.giftCardExtends.reduce((count: number, giftCard: IGiftCardExtend) => {\n const balance: number = giftCard.Balance || 0;\n return count + balance;\n }, 0);\n }\n\n @computed get disableAddGiftCard(): boolean {\n const cart = this.props.data.checkout.result ? this.props.data.checkout.result.checkoutCart.cart : undefined;\n if (!cart) {\n return true;\n }\n return (cart.TotalAmount || 0) - this.getLoyaltyAmount - this.getGiftCardTotalAmount <= 0;\n }\n\n @computed get shouldPayGiftCard(): boolean {\n const cart = this.props.data.checkout.result ? this.props.data.checkout.result.checkoutCart.cart : undefined;\n if (!cart) {\n return false;\n }\n\n // Use gift card card when loyalty points do not cover the total amount\n const amountDue = (cart.TotalAmount || 0) - this.getLoyaltyAmount - this.getCustomerAccountAmount;\n return amountDue > 0;\n }\n\n @computed get hasSelectedItem(): boolean {\n const {\n data: { checkout }\n } = this.props;\n const giftCards = checkout.result && checkout.result.giftCardExtends;\n return !!giftCards && giftCards.length > 0;\n }\n\n public componentDidMount(): void {\n when(\n () => this.isDataReady,\n () => {\n this.init();\n }\n );\n\n if (this.props.data.checkout.result?.shouldEnableCheckoutErrorDisplayMessaging) {\n reaction(\n () => this.props.data.checkout.result?.checkoutError,\n checkoutError => {\n if (checkoutError && checkoutError.errorLocation === ErrorLocation.CheckoutGiftCard && checkoutError.errorMessage) {\n this.setError(checkoutError.errorMessage);\n }\n }\n );\n\n reaction(\n () => this.props.data.checkout.result?.checkoutErrorFocus,\n checkoutErrorFocus => {\n if (checkoutErrorFocus === CheckoutModule.CheckoutGiftCard) {\n focusOnCheckoutError(this.checkoutErrorRef, this.props.context.actionContext);\n }\n }\n );\n }\n }\n\n public shouldComponentUpdate(nextProps: ICheckoutGiftCardModuleProps, nextState: ICheckoutGiftCardState): boolean {\n if (this.state === nextState && this.props.data === nextProps.data) {\n return false;\n }\n return true;\n }\n\n public render(): JSX.Element | null {\n const {\n moduleState: { isReady },\n data: { checkout },\n config: { className, showAdditionalFields },\n resources\n } = this.props;\n const { errorMessage, giftCardNumber, giftCardPin, giftCardExp } = this.state;\n const giftCards = checkout.result && checkout.result.giftCardExtends;\n const additionalFields = showAdditionalFields;\n const supportedGiftCardType = this.props.context.app.config.giftCardSupported;\n\n if (!this.isEnabled() || (!this.shouldPayGiftCard && !isReady)) {\n this.props.context.telemetry.error('Checkout giftcard content is empty, module wont render');\n return null;\n }\n\n if (this.props.context.request.user.isOBORequest && EnabledPaymentsForOBO.GiftCard === 0) {\n this.props.context.telemetry.information('isOBORequest is enabled, Checkout gift card module wont render');\n return null;\n }\n\n const supportExternalGiftCard = supportedGiftCardType !== SupportedGiftCardType.Internal;\n\n const moduleClassName = classname('ms-checkout-gift-card', className, isReady ? 'show' : 'add');\n\n const viewProps: ICheckoutGiftCardViewProps = {\n ...this.props,\n ...this.state,\n className: moduleClassName,\n checkoutErrorRef: this.checkoutErrorRef,\n\n checkoutGiftCardProps: { moduleProps: this.props, className: moduleClassName },\n couldPaidByGiftCard: this.couldPaidByGiftCard(),\n isEnabled: this.isEnabled(),\n onEdit: this.onEdit,\n onCancel: this.onCancel,\n onSubmit: this.onSubmit,\n enterGiftCardNumber: this.enterGiftCardNumber,\n enterGiftCardPin: this.enterGiftCardPin,\n enterGiftCardExp: this.enterGiftCardExp,\n removeGiftCard: this.removeGiftCard,\n applyGiftCard: this.applyGiftCard,\n showGiftCard: isReady\n ? {\n title: ,\n list: getList({\n canRemove: false,\n getFormattedPrice: this.getFormattedPrice,\n giftCards: giftCards && [...giftCards], // Note: ReadOnly Checkout State GiftCard[] is not assignable to GiftCard[] type\n onRemoveGiftCard: this.removeGiftCard,\n resources\n })\n }\n : undefined,\n addGiftCard: !isReady\n ? {\n form: getForm({\n errorMessage,\n giftCardNumber,\n giftCardPin,\n giftCardExp,\n inputRef: this.inputRef,\n inputPinRef: this.inputPinRef,\n inputExpRef: this.inputExpRef,\n resources,\n onEnterGiftCardNumber: this.enterGiftCardNumber,\n onEnterGiftCardPin: this.enterGiftCardPin,\n onEnterGiftCardExp: this.enterGiftCardExp,\n onApplyGiftCard: this.applyGiftCard,\n supportExternalGiftCard,\n additionalFields,\n disableAddGiftCard: this.disableAddGiftCard\n }),\n list: getList({\n canRemove: true,\n getFormattedPrice: this.getFormattedPrice,\n giftCards: giftCards && [...giftCards], // Note: ReadOnly Checkout State GiftCard[] is not assignable to GiftCard[] type\n onRemoveGiftCard: this.removeGiftCard,\n resources\n })\n }\n : undefined\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n private readonly init = (): void => {\n this.props.moduleState.init({\n onEdit: this.onEdit,\n onCancel: this.onCancel,\n onSubmit: this.onSubmit,\n isRequired: false,\n ...(!this.isEnabled() && { status: 'disabled' })\n });\n\n const giftCards = this.props.data.checkout.result?.giftCardExtends;\n if (giftCards && giftCards.length > 0) {\n this.props.moduleState.onReady();\n } else if (this.props.data.checkout.result?.isPaymentVerificationRedirection) {\n this.props.moduleState.onSkip();\n }\n };\n\n private readonly couldPaidByGiftCard = (): boolean => {\n const cart = this.props.data.checkout.result ? this.props.data.checkout.result.checkoutCart?.cart : undefined;\n if (!cart) {\n return false;\n }\n\n // Use gift card when it is not free\n return (cart.TotalAmount || 0) > 0;\n };\n\n private readonly isEnabled = (): boolean => {\n if (\n !this.props.context.request.user.isAuthenticated &&\n this.props.context.app.config.giftCardSupported !== SupportedGiftCardType.External &&\n !this.props.config.shouldBeEnabledForGuest\n ) {\n return false;\n }\n return this.couldPaidByGiftCard();\n };\n\n private readonly onEdit = (): void => {\n this.props.telemetry.information('Payment section gift card onEdit is called.');\n\n // Show add gift card form\n this.props.moduleState.onUpdating();\n };\n\n private readonly onCancel = (): void => {\n this.props.telemetry.information('Payment section gift card onCancel is called.');\n\n this.handleCancelOrSubmit();\n };\n\n private readonly onSubmit = (): void => {\n this.props.telemetry.information('Payment section gift card onSubmit is called.');\n\n this.handleCancelOrSubmit();\n };\n\n private readonly handleCancelOrSubmit = () => {\n if (this.hasSelectedItem) {\n // Show summary screen\n this.props.moduleState.onReady();\n } else {\n // Skip the module\n this.props.moduleState.onSkip();\n }\n };\n\n private readonly getFormattedPrice = (price: number = 0, currencyCode: string = 'USD'): string => {\n return this.props.context.cultureFormatter.formatCurrency(price, currencyCode);\n };\n\n private readonly enterGiftCardNumber = (giftCardNumber: string): void => {\n this.setState({\n giftCardNumber\n });\n this.clearError();\n };\n\n private readonly enterGiftCardPin = (giftCardPin: string): void => {\n this.setState({\n giftCardPin\n });\n this.clearError();\n };\n\n private readonly enterGiftCardExp = (giftCardExp: string): void => {\n this.setState({\n giftCardExp\n });\n this.clearError();\n };\n\n private readonly setError = (errorMessage: string): void => {\n this.props.telemetry.error('Error', errorMessage);\n this.props.telemetry.debug('Error', errorMessage);\n this.props.moduleState.setHasError(true);\n this.setState({\n errorMessage\n });\n };\n\n private readonly clearError = (): void => {\n this.props.moduleState.setHasError(false);\n this.setState({\n errorMessage: ''\n });\n };\n\n private readonly removeGiftCard = async (giftCardNumber: string): Promise => {\n this.props.telemetry.information('Payment section gift card remove is called.');\n\n const checkoutState = this.props.data.checkout.result;\n if (!checkoutState) {\n return;\n }\n\n await checkoutState.removeGiftCard({ giftCardNumber });\n };\n\n private readonly applyGiftCard = async (): Promise => {\n this.props.telemetry.information('Payment section gift card apply is called.');\n\n if (this.state.isFetchingGiftCard) {\n return;\n }\n this.setState({\n isFetchingGiftCard: true\n });\n\n const checkoutState = this.props.data.checkout.result;\n const giftCardNumber = this.state.giftCardNumber.trim();\n const giftCardPin = this.state.giftCardPin.trim();\n const giftCardExp = this.state.giftCardExp.trim();\n\n const giftCardTypes = await this.getGiftCardTypes(giftCardNumber);\n const giftCardType = giftCardTypes && giftCardTypes[0];\n const isPinRequired = giftCardType && giftCardType.IsPinRequired;\n const isExpRequired = giftCardType && giftCardType.IsExpirationDateRequired;\n const tenderTypeId = giftCardType && giftCardType.PaymentMethodId;\n const giftCard = await this.getGiftCard(giftCardNumber, giftCardPin, giftCardExp, isPinRequired, isExpRequired, tenderTypeId);\n\n if (checkoutState && giftCard) {\n await checkoutState.addGiftCard({\n giftCard,\n additionalProperties: { Pin: giftCardPin, ExpirationDate: giftCardExp, TenderTypeId: tenderTypeId }\n });\n this.clearError();\n this.setState({\n giftCardNumber: '',\n giftCardPin: '',\n giftCardExp: '',\n isFetchingGiftCard: false\n });\n return Promise.resolve();\n }\n const input = this.inputRef && this.inputRef.current && this.inputRef.current.focus && (this.inputRef.current as HTMLElement);\n input && input.focus();\n this.setState({\n isFetchingGiftCard: false\n });\n this.props.telemetry.information('Payment section fetching gift card is failed.');\n };\n\n private readonly findGiftcardTenderTypes = (\n tenderTypes: TenderType[],\n operationId: RetailOperation,\n giftcardType: string\n ): string[] | undefined => {\n let matchedTenderTypes: TenderType[] | undefined;\n\n switch (giftcardType) {\n case SupportedGiftCardType.Internal:\n matchedTenderTypes = tenderTypes.filter(\n tenderType => tenderType.OperationId === operationId && tenderType.ConnectorId === ''\n );\n break;\n case SupportedGiftCardType.External:\n matchedTenderTypes = tenderTypes.filter(\n tenderType => tenderType.OperationId === operationId && tenderType.ConnectorId !== ''\n );\n break;\n default:\n throw new Error('Invalid gift card type');\n }\n\n if (matchedTenderTypes) {\n return matchedTenderTypes.map(tenderType => tenderType.TenderTypeId || '');\n }\n return;\n };\n\n private readonly getGiftCard = async (\n giftCardNumber: string,\n giftCardPin: string,\n giftCardExp: string,\n isPinRequired: boolean | undefined,\n isExpRequired: boolean | undefined,\n tenderTypeId: string | undefined\n ): Promise => {\n const {\n resources: { noBalanceError, invalidCardInfoError, invalidCardTypeError, noCardPinError, noCardExpError }\n } = this.props;\n\n const supportedGiftCardType = this.props.context.app.config.giftCardSupported;\n\n if (!tenderTypeId) {\n return undefined;\n }\n\n const tenderTypes = await getTenderTypesAsync({ callerContext: this.props.context.actionContext, queryResultSettings: {} }).catch(\n error => {\n throw error;\n }\n );\n\n if (!tenderTypes) {\n throw new Error('Fail to get gift card tender line');\n }\n const internalGiftcardTenderTypes = this.findGiftcardTenderTypes(\n tenderTypes,\n OPERATIONS.PayGiftCertificate,\n SupportedGiftCardType.Internal\n );\n const externalGiftcardTenderTypes = this.findGiftcardTenderTypes(\n tenderTypes,\n OPERATIONS.PayGiftCertificate,\n SupportedGiftCardType.External\n );\n\n switch (supportedGiftCardType) {\n case undefined:\n case SupportedGiftCardType.Internal:\n if (!internalGiftcardTenderTypes?.includes(tenderTypeId)) {\n this.setError(invalidCardTypeError);\n return undefined;\n }\n break;\n case SupportedGiftCardType.External:\n if (!externalGiftcardTenderTypes?.includes(tenderTypeId)) {\n this.setError(invalidCardTypeError);\n return undefined;\n }\n break;\n case SupportedGiftCardType.Both:\n if (!internalGiftcardTenderTypes?.includes(tenderTypeId) && !externalGiftcardTenderTypes?.includes(tenderTypeId)) {\n this.setError(invalidCardTypeError);\n return undefined;\n }\n break;\n default:\n throw new Error('Unsupported gift card type');\n }\n\n if (isPinRequired && giftCardPin === '') {\n this.setError(noCardPinError);\n return undefined;\n }\n\n if (isExpRequired && giftCardExp === '') {\n this.setError(noCardExpError);\n return undefined;\n }\n\n const month = Number.parseInt(giftCardExp.split('/')[0], 10);\n const year = Number.parseInt(giftCardExp.split('/')[1], 10);\n\n return getGiftCardAsync({ callerContext: this.props.context.actionContext }, giftCardNumber, tenderTypeId, giftCardPin, month, year)\n .then(activeGiftCard => {\n if (!activeGiftCard.Balance || activeGiftCard.Balance === 0) {\n this.setError(noBalanceError);\n return;\n }\n return activeGiftCard;\n })\n .catch(error => {\n this.setError(invalidCardInfoError);\n return undefined;\n });\n };\n\n private readonly getGiftCardTypes = async (giftCardNumber: string): Promise => {\n const {\n resources: { emptyInputError, duplicatedCodeError, invalidCodeError },\n data: { checkout }\n } = this.props;\n\n if (!giftCardNumber) {\n this.setError(emptyInputError);\n return undefined;\n }\n\n const isDuplicated = checkout.result && checkout.result.giftCardExtends.some((card: GiftCard) => card.Id === giftCardNumber);\n if (isDuplicated) {\n this.setError(duplicatedCodeError);\n return undefined;\n }\n\n return resolveCardTypesAsync({ callerContext: this.props.context.actionContext }, giftCardNumber, CardType.GiftCard)\n .then(giftCardTypes => {\n if (!giftCardTypes || giftCardTypes.length === 0 || giftCardTypes[0] === undefined) {\n this.setError(invalidCodeError);\n return;\n }\n return giftCardTypes;\n })\n .catch(error => {\n this.setError(invalidCodeError);\n return undefined;\n });\n };\n}\n\nexport default withModuleState(CheckoutGiftCard);\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IAddResource, ICheckoutGiftCardViewProps, IForm, IItem, IList, IShowResource } from './checkout-gift-card';\n\nexport const From: React.FC = ({\n formProps,\n label,\n inputPinLabel,\n inputExpLabel,\n alert,\n inputProps,\n inputNumProps,\n inputPinProps,\n inputExpProps,\n inputNumber,\n inputPin,\n inputExp,\n applyButton,\n supportExternalGiftCard,\n showGiftCardPinInput,\n showGiftCardExpInput,\n alertFieldLabel\n}) => (\n \n {alert}\n {supportExternalGiftCard ? (\n \n \n {label}\n {inputNumber}\n \n {showGiftCardPinInput && (\n \n {inputPinLabel}\n {inputPin}\n \n )}\n {showGiftCardExpInput && (\n \n {inputExpLabel}\n {inputExp}\n \n )}\n {(showGiftCardPinInput || showGiftCardExpInput) && alertFieldLabel}\n \n ) : (\n <>\n {label}\n {inputNumber}\n \n )}\n {applyButton}\n \n);\n\nexport const SelectedGiftCard: React.FC = ({ itemProps, selectedGiftCard, removeButton }) => (\n \n {selectedGiftCard}\n {removeButton}\n \n);\n\nexport const GiftCardList: React.FC = ({ listProps, list }) => (\n \n {list.map(({ id, ...item }) => (\n \n ))}\n \n);\n\nexport const AddResource: React.FC = ({ form, list }) => (\n <>\n {form && }\n {list && }\n \n);\n\nexport const ShowResource: React.FC = ({ title, list }) => (\n <>\n {title}\n {list && }\n \n);\n\nconst CheckoutGiftCardView: React.FC = props => {\n const { checkoutGiftCardProps, checkoutErrorRef, showGiftCard, addGiftCard } = props;\n return (\n \n {showGiftCard && }\n {addGiftCard && }\n \n );\n};\n\nexport default CheckoutGiftCardView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as React from 'react';\n\nexport interface ICheckoutLoyaltyInput {\n className: string;\n type: string;\n value: string | number;\n min: number;\n max: number;\n ariaValueMax: number;\n ariaValueMin: number;\n ariaValueNow: number;\n id: string;\n step: string;\n onChange(event: React.ChangeEvent): void;\n onBlur(event: React.FocusEvent): void;\n}\n\nconst AdressInput: React.FC = ({\n className,\n type,\n value,\n min,\n max,\n step,\n ariaValueMax,\n ariaValueMin,\n ariaValueNow,\n onChange,\n onBlur,\n id\n}) => (\n \n);\n\nexport default AdressInput;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as React from 'react';\n\nexport interface ICheckoutLoyaltyLabelProps {\n className: string;\n text: string;\n htmlFor: string;\n}\n\n/**\n * AddPaymentForm SFC.\n * @param root0\n * @param root0.className\n * @param root0.text\n * @param root0.htmlFor\n * @extends {React.FC}\n */\nconst CheckoutLoyaltyLabel: React.FC = ({ className, text, htmlFor }) => {\n return (\n \n );\n};\n\nexport default CheckoutLoyaltyLabel;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as React from 'react';\n\nexport interface ICheckoutLoyaltyTextProps {\n className: string;\n text?: string;\n}\n\n/**\n * AddPaymentForm SFC.\n * @param root0\n * @param root0.className\n * @param root0.text\n * @extends {React.FC}\n */\nconst CheckoutLoyaltyText: React.FC = ({ className, text }) => {\n if (!text) {\n return null;\n }\n\n return {text};\n};\n\nexport default CheckoutLoyaltyText;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { PriceComponent } from '@msdyn365-commerce/components';\nimport { callActionOrExecute } from '@msdyn365-commerce/retail-proxy';\nimport { createGetMaxLoyaltyPointsToRedeemForTransactionBalanceInput } from '@msdyn365-commerce/retail-proxy/dist/DataActions/CartsDataActions.g';\nimport { LoyaltyPointRedemptionEstimate, LoyaltyRewardPoint } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { IModuleStateProps, withModuleState, EnabledPaymentsForOBO } from '@msdyn365-commerce-modules/checkout-utilities';\nimport { GetLoyaltyTransactionEstimationInput } from '@msdyn365-commerce-modules/retail-actions';\nimport { Button, Drawer, Heading, IModuleProps, INodeProps } from '@msdyn365-commerce-modules/utilities';\nimport { CheckoutModule, ErrorLocation } from '@msdyn365-commerce/global-state';\nimport classnames from 'classnames';\nimport { action, computed, reaction, when } from 'mobx';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { ICheckoutLoyaltyData } from './checkout-loyalty.data';\nimport { ICheckoutLoyaltyProps } from './checkout-loyalty.props.autogenerated';\nimport InputComponent from './components/checkout-loyalty-input';\nimport LabelComponent from './components/checkout-loyalty-label';\nimport TextComponent from './components/checkout-loyalty-text';\nimport { ErrorComponent } from '../../common/error';\nimport { focusOnCheckoutError } from '../../checkout-errors';\n\nexport interface ICheckoutLoyaltyState {\n dollarsApplied: number;\n isFetchingLoyaltyCard: boolean;\n errorMessage?: string;\n}\n\nexport interface ICheckoutLoyaltyModuleProps extends ICheckoutLoyaltyProps, IModuleStateProps {}\n\nexport interface ICheckoutLoyaltyViewState {\n isShowLoyalty: boolean;\n isShowAddLoyalty: boolean;\n}\n\nexport interface ICheckoutLoyaltyShow {\n heading: React.ReactNode;\n coveredAmountText: React.ReactNode;\n amount: React.ReactNode;\n}\n\nexport interface ICheckoutLoyaltyRewardPoint {\n checkoutLoyaltyRewardPoint: INodeProps;\n key: string;\n title: React.ReactNode;\n availablePointsText: React.ReactNode;\n activePoints: React.ReactNode;\n expiringPointsText: React.ReactNode;\n expiringPoints: React.ReactNode;\n}\n\nexport interface ICheckoutLoyaltyAdd {\n heading: React.ReactNode;\n cardNumber: React.ReactNode;\n drawer: INodeProps;\n rewardPoints: ICheckoutLoyaltyRewardPoint[];\n loyaltyAmountContainer: INodeProps;\n appliedLoyaltyAmountContainer: INodeProps;\n loyaltyAmountLabel: React.ReactNode;\n loyaltyAmountInput: React.ReactNode;\n loyaltyAmountApplyButton: React.ReactNode;\n showAppliedAmount: boolean;\n loyaltyAmountAppliedText: React.ReactNode;\n loyaltyAmountAppliedPrice: React.ReactNode;\n loyaltyAmountRemoveButton: React.ReactNode;\n}\n\nexport interface ICheckoutLoyaltyViewProps extends ICheckoutLoyaltyModuleProps {\n checkoutLoyalty: IModuleProps;\n viewState: ICheckoutLoyaltyViewState;\n showLoyalty: ICheckoutLoyaltyShow;\n addLoyalty: ICheckoutLoyaltyAdd;\n alert?: React.ReactNode;\n checkoutErrorRef?: React.RefObject;\n}\n\n/**\n *\n * CheckoutLoyalty component.\n * @extends {React.Component>}\n */\n// @ts-expect-error\n\n@withModuleState\n@observer\nclass CheckoutLoyalty extends React.Component {\n private readonly _dialogToggleRef: React.RefObject | undefined;\n\n private readonly moduleClassName: string = 'ms-checkout-loyalty';\n\n private readonly _defaultLoyaltyPoints: number = 0;\n\n private readonly checkoutErrorRef: React.RefObject = React.createRef();\n\n constructor(props: ICheckoutLoyaltyModuleProps) {\n super(props);\n this._dialogToggleRef = React.createRef();\n this._applyLoyaltyPoints = this._applyLoyaltyPoints.bind(this);\n this._removeLoyaltyPoints = this._removeLoyaltyPoints.bind(this);\n this._onInputChange = this._onInputChange.bind(this);\n this._onBlur = this._onBlur.bind(this);\n this.state = { dollarsApplied: this.maxDollars, isFetchingLoyaltyCard: false };\n }\n\n @computed get shouldPayLoyalty(): boolean {\n const cart = this.props.data.checkout.result ? this.props.data.checkout.result.checkoutCart.cart : undefined;\n if (!cart) {\n return false;\n }\n\n // Use loyalty when cart is not full of free items\n const amountDue = cart.TotalAmount || 0;\n return amountDue > 0;\n }\n\n @computed get isDataReady(): boolean {\n return (\n (this.props.data.checkout.result && this.props.data.checkout.status) === 'SUCCESS' &&\n (this.props.data.loyaltyCard && this.props.data.loyaltyCard.status) !== 'LOADING' &&\n (this.props.data.loyaltyTransactionEstimation && this.props.data.loyaltyTransactionEstimation.status) !== 'LOADING'\n );\n }\n\n @computed get maxDollars(): number {\n return this.props.data.loyaltyTransactionEstimation.result &&\n this.props.data.loyaltyTransactionEstimation.result.MaxCurrencyValueOfLoyaltyPoints\n ? this.props.data.loyaltyTransactionEstimation.result.MaxCurrencyValueOfLoyaltyPoints\n : 0;\n }\n\n public async componentDidMount(): Promise {\n when(\n () => this.isDataReady,\n async () => {\n await this.init();\n }\n );\n\n reaction(\n () => this.props.data.checkout.result && this.props.data.checkout.result.checkoutCart.cart,\n async () => {\n this._updateEstimate();\n }\n );\n\n reaction(\n () => this.props.data.loyaltyCard.result,\n async () => {\n this._updateLoyalty();\n }\n );\n\n if (this.props.data.checkout.result?.shouldEnableCheckoutErrorDisplayMessaging) {\n reaction(\n () => this.props.data.checkout.result?.checkoutError,\n checkoutError => {\n if (checkoutError && checkoutError.errorLocation === ErrorLocation.CheckoutLoyalty && checkoutError.errorMessage) {\n this._setErrorMessage(checkoutError.errorMessage);\n }\n }\n );\n\n reaction(\n () => this.props.data.checkout.result?.checkoutErrorFocus,\n checkoutErrorFocus => {\n if (checkoutErrorFocus === CheckoutModule.CheckoutLoyalty) {\n focusOnCheckoutError(this.checkoutErrorRef, this.props.context.actionContext);\n }\n }\n );\n }\n }\n\n public shouldComponentUpdate(nextProps: ICheckoutLoyaltyModuleProps, nextState: ICheckoutLoyaltyState): boolean {\n if (this.state === nextState && this.props.data === nextProps.data) {\n return false;\n }\n return true;\n }\n\n public render(): JSX.Element | null {\n const {\n resources,\n renderView,\n moduleState: { hasError, isReady }\n } = this.props;\n\n if (this.props.context.request.user.isOBORequest && EnabledPaymentsForOBO.Loyalty === 0) {\n this.props.context.telemetry.information('isOBORequest is enabled, Checkout loyalty module wont render');\n return null;\n }\n\n if (\n this.props.data.loyaltyCard &&\n this.props.data.loyaltyCard.result &&\n this.props.data.loyaltyCard.result.CardNumber &&\n this.shouldPayLoyalty\n ) {\n const loyaltyCard = this.props.data.loyaltyCard.result;\n const checkoutState = this.props.data.checkout.result;\n let isShowLoyalty = false;\n const errorMessage = this.state.errorMessage;\n\n if (isReady) {\n if (!checkoutState || checkoutState.loyaltyAmount === 0) {\n return null;\n }\n isShowLoyalty = true;\n }\n const channelConfig = this.props.context.request.channel;\n const viewProps = {\n ...this.props,\n checkoutErrorRef: this.checkoutErrorRef,\n viewState: {\n isShowLoyalty,\n isShowAddLoyalty: !isReady\n },\n alert: hasError && errorMessage && ,\n checkoutLoyalty: {\n moduleProps: this.props,\n className: classnames(\n this.moduleClassName,\n { [`${this.moduleClassName}__applied`]: isShowLoyalty },\n this.props.config.className\n )\n },\n showLoyalty: {\n heading: ,\n coveredAmountText: (\n \n ),\n amount: (\n \n )\n },\n addLoyalty: {\n heading: ,\n drawer: {\n tag: Drawer,\n className: `${this.moduleClassName}__drawer`,\n toggleButtonText: this._drawerHeader(),\n openGlyph: `${this.moduleClassName}__drawer-open`,\n closeGlyph: `${this.moduleClassName}__drawer-close`,\n glyphPlacement: 'end'\n },\n cardNumber: ,\n rewardPoints:\n loyaltyCard.RewardPoints &&\n loyaltyCard.RewardPoints.map((points, index) => {\n return this._renderPointSection(points, resources.availablePointsLabel, resources.expiringLoyaltyPointsLabel);\n }),\n loyaltyAmountContainer: {\n className: `${this.moduleClassName}__amount`\n },\n appliedLoyaltyAmountContainer: {\n className: `${this.moduleClassName}__applied-amount`\n },\n loyaltyAmountLabel: (\n \n ),\n loyaltyAmountInput: (\n \n ),\n loyaltyAmountApplyButton: (\n this.maxDollars ||\n this.state.dollarsApplied <= 0 ||\n isNaN(this.state.dollarsApplied) ||\n this.state.isFetchingLoyaltyCard\n }\n >\n {this.props.resources.applyCheckoutLoyaltyPaymentText}\n \n ),\n showAppliedAmount: checkoutState && checkoutState.loyaltyAmount > 0,\n loyaltyAmountAppliedText: (\n \n ),\n loyaltyAmountAppliedPrice: (\n \n ),\n loyaltyAmountRemoveButton: (\n \n {this.props.resources.removeCheckoutLoyaltyPaymentText}\n \n )\n }\n };\n\n return renderView(viewProps) as React.ReactElement;\n }\n this.props.context.telemetry.error('Checkout loyalty content is empty, module wont render');\n return null;\n }\n\n private _drawerHeader(): JSX.Element {\n const channelConfig = this.props.context.request.channel;\n return (\n <>\n

    {this.props.resources.loyaltyCoveredAmountText}

    \n \n \n );\n }\n\n private _renderPointSection(\n point: LoyaltyRewardPoint,\n loyaltyCoveredAmountText: string,\n expiringLoyaltyPointsLabel: string\n ): ICheckoutLoyaltyRewardPoint {\n return {\n key: point.RewardPointId || '',\n checkoutLoyaltyRewardPoint: {\n className: `${this.moduleClassName}__program`\n },\n title: ,\n availablePointsText: ,\n activePoints: (\n \n ),\n expiringPointsText: ,\n expiringPoints: (\n \n )\n };\n }\n\n private readonly init = async (): Promise => {\n this.props.moduleState.init({\n onEdit: this.onEdit,\n onCancel: this.onCancel,\n onSubmit: this.onSubmit,\n isRequired: false,\n ...(!this.isEnabled() && { status: 'disabled' })\n });\n\n const savedLoyaltyAmount = this.props.data.checkout.result?.loyaltyAmount;\n if (savedLoyaltyAmount) {\n this.props.moduleState.onReady();\n } else if (this.props.data.checkout.result?.isPaymentVerificationRedirection) {\n this.props.moduleState.onSkip();\n } else if (\n this.props.data.loyaltyCard.result &&\n this.props.data.checkout.result &&\n this.props.data.loyaltyCard.result.CardNumber !== this.props.data.checkout.result.checkoutCart.cart.LoyaltyCardId\n ) {\n this.props.data.checkout.result.checkoutCart\n .updateLoyaltyCardId({ loyaltyCardNumber: this.props.data.loyaltyCard.result.CardNumber })\n .catch(error => {\n if (this.context.telemetry) {\n this.context.telemetry.warning(error);\n this.context.telemetry.debug('Unable to update the loyalty card');\n }\n });\n }\n };\n\n private readonly onEdit = () => {\n this.props.telemetry.information('Payment section loyalty onEdit is called.');\n\n this.props.moduleState.onUpdating();\n };\n\n private readonly onCancel = () => {\n this.props.telemetry.information('Payment section loyalty onCancel is called.');\n\n this.handleCancelOrSubmit();\n };\n\n private readonly onSubmit = () => {\n this.props.telemetry.information('Payment section loyalty onSubmit is called.');\n\n this.handleCancelOrSubmit();\n };\n\n private readonly handleCancelOrSubmit = () => {\n const checkoutState = this.props.data.checkout.result;\n if (checkoutState && checkoutState.loyaltyAmount > 0) {\n // Show summary screen\n this.props.moduleState.onReady();\n } else {\n // Skip the module\n this.props.moduleState.onSkip();\n }\n };\n\n private readonly isEnabled = () => {\n return (\n this.props.context.request.user.isAuthenticated &&\n this.props.data.loyaltyCard.result &&\n this.props.data.loyaltyCard.result.CardNumber &&\n this.shouldPayLoyalty\n );\n };\n\n private async _applyLoyaltyPoints(): Promise {\n this.props.telemetry.information('Payment section loyalty apply button onClick is called.');\n\n const checkoutState = this.props.data.checkout.result;\n\n if (!checkoutState) {\n return;\n }\n\n this._clearError();\n await checkoutState.updateLoyaltyAmount({ newAmount: Number.parseFloat(this.state.dollarsApplied.toString()) });\n this.setState({\n isFetchingLoyaltyCard: true\n });\n }\n\n private async _removeLoyaltyPoints(): Promise {\n this.props.telemetry.information('Payment section loyalty remove button onClick is called.');\n\n const checkoutState = this.props.data.checkout.result;\n\n if (!checkoutState) {\n return;\n }\n\n this._clearError();\n await checkoutState.updateLoyaltyAmount({ newAmount: 0 });\n this.setState({\n dollarsApplied: 0\n });\n }\n\n private _onInputChange(event: React.ChangeEvent): void {\n const value = event.currentTarget.value;\n this.setState({ dollarsApplied: value.length > 0 ? Number(value) : Number.parseFloat(value), isFetchingLoyaltyCard: false });\n }\n\n private _onBlur(event: React.FocusEvent): void {\n const num = Number.parseFloat(event.currentTarget.value).toFixed(2);\n const element = document.getElementById(`${this.props.id}-label`) as HTMLInputElement;\n if (element && num) {\n element.value = num;\n this.setState({ dollarsApplied: Number.parseFloat(num) });\n }\n }\n\n private _updateLoyalty(): void {\n if (this.props.moduleState.isDisabled && this.isEnabled()) {\n this._updateEstimate();\n this.props.moduleState.onUpdating();\n }\n }\n\n private _updateEstimate(): void {\n const card = this.props.data.loyaltyCard.result;\n const checkout = this.props.data.checkout.result;\n const cart = this.props.data.checkout.result ? this.props.data.checkout.result.checkoutCart.cart : undefined;\n const channelConfig = this.props.context.request.channel;\n if (card && card.CardNumber && cart && channelConfig) {\n const currencyCode = channelConfig.Currency || '';\n const loyalPointsRequest = createGetMaxLoyaltyPointsToRedeemForTransactionBalanceInput(cart.Id, card.CardNumber, currencyCode);\n\n // @ts-expect-error\n // Due to bug 23214358, this is getting improperly cached. Need to turn on cache bypass for now to work around issue\n loyalPointsRequest._query.options.bypassCache = 'get';\n\n callActionOrExecute(loyalPointsRequest, this.props.context.actionContext)\n .then(async points => {\n this.props.context.actionContext.update(\n new GetLoyaltyTransactionEstimationInput(this.props.context.request.apiSettings),\n points\n );\n const newMaxPoints = points.MaxCurrencyValueOfLoyaltyPoints ?? this._defaultLoyaltyPoints;\n\n // If points are already applied, ensure you don't apply more points than max\n if (checkout && checkout.loyaltyAmount > newMaxPoints) {\n await checkout.updateLoyaltyAmount({ newAmount: newMaxPoints });\n }\n\n this.setState({ dollarsApplied: newMaxPoints, isFetchingLoyaltyCard: false });\n })\n .catch(error => {\n this.props.context.actionContext.telemetry.exception(error);\n this.props.context.actionContext.telemetry.debug('Error getting Loyalty Point Redemption Estimate');\n });\n }\n }\n\n @action\n private readonly _setErrorMessage = (errorMessage: string): void => {\n this.props.telemetry.error(errorMessage);\n this.props.moduleState.setHasError(true);\n this.props.moduleState.onUpdating();\n this.setState({\n errorMessage\n });\n };\n\n private readonly _clearError = (): void => {\n this.props.moduleState.setHasError(false);\n this.setState({\n errorMessage: ''\n });\n };\n}\n\nexport default CheckoutLoyalty;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ICheckoutLoyaltyAdd, ICheckoutLoyaltyRewardPoint, ICheckoutLoyaltyShow, ICheckoutLoyaltyViewProps } from './checkout-loyalty';\n\nconst AddCheckoutLoyalty: React.FC = ({\n heading,\n cardNumber,\n drawer,\n rewardPoints,\n loyaltyAmountContainer,\n appliedLoyaltyAmountContainer,\n loyaltyAmountLabel,\n loyaltyAmountInput,\n loyaltyAmountApplyButton,\n showAppliedAmount,\n loyaltyAmountAppliedText,\n loyaltyAmountAppliedPrice,\n loyaltyAmountRemoveButton\n}) => {\n return (\n <>\n {heading}\n {cardNumber}\n \n {rewardPoints.map((rewardPoint: ICheckoutLoyaltyRewardPoint) => {\n return (\n \n {rewardPoint.title}\n {rewardPoint.availablePointsText}\n {rewardPoint.activePoints}\n {rewardPoint.expiringPointsText}\n {rewardPoint.expiringPoints}\n \n );\n })}\n \n \n {loyaltyAmountLabel}\n {loyaltyAmountInput}\n {loyaltyAmountApplyButton}\n {showAppliedAmount && (\n \n {loyaltyAmountAppliedText}\n {loyaltyAmountAppliedPrice}\n {loyaltyAmountRemoveButton}\n \n )}\n \n \n );\n};\n\nconst ShowCheckoutLoyalty: React.FC = ({ heading, coveredAmountText, amount }) => {\n return (\n <>\n {heading}\n {coveredAmountText}\n {amount}\n \n );\n};\n\nconst CheckoutLoyaltyView: React.FC = props => {\n const { checkoutLoyalty, checkoutErrorRef, alert, viewState, showLoyalty, addLoyalty } = props;\n\n return (\n \n {alert}\n {viewState.isShowLoyalty && }\n {viewState.isShowAddLoyalty && }\n \n );\n};\n\nexport default CheckoutLoyaltyView;\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 { isChannelTypeB2B } from '@msdyn365-commerce/core';\nimport { AsyncResultStatus, Cart, CartLineValidationResults } from '@msdyn365-commerce/retail-proxy';\nimport {\n updateLineDeliverySpecificationsAsync,\n validateForCheckoutAsync\n} from '@msdyn365-commerce/retail-proxy/dist/DataActions/CartsDataActions.g';\nimport {\n Address,\n DeliveryPreferenceType,\n LineDeliverySpecification,\n SimpleProduct,\n TokenizedPaymentCard\n} from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { IModuleStateManager, IModuleStateProps, withModuleState } from '@msdyn365-commerce-modules/checkout-utilities';\nimport {\n ArrayExtensions,\n getAvailabilitiesForCartLineItems,\n IProductInventoryInformation,\n ProductAvailabilitiesForCartLineItems,\n validateCartLinesInventory\n} from '@msdyn365-commerce-modules/retail-actions';\nimport {\n Button,\n getPayloadObject,\n getTelemetryAttributes,\n getTelemetryObject,\n IModuleProps,\n INodeProps,\n ITelemetryContent,\n TelemetryConstant,\n Waiting\n} from '@msdyn365-commerce-modules/utilities';\nimport { ErrorCode, ErrorLocation } from '@msdyn365-commerce/global-state';\nimport classnames from 'classnames';\nimport isEmpty from 'lodash/isEmpty';\nimport { action, computed, get, reaction, when } from 'mobx';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { ICheckoutData } from './checkout.data';\nimport { ICheckoutHeadingData, ICheckoutProps } from './checkout.props.autogenerated';\nimport AlertComponent from './components/alert';\nimport { getInvoicePaymentSummary, IInvoicePaymentSummary } from './components/get-invoice-payment-summary';\nimport { getLineItems, ILineItems } from './components/get-line-items';\nimport { getOrderSummary, IOrderSummary } from './components/get-order-summary';\nimport GuidedFormComponent from './components/guided-form';\nimport PlaceOrderButtonComponent from './components/place-order-button';\nimport placeOrder from './methods/place-order';\nimport { focusOnCheckoutError, setCheckoutErrors } from '../../checkout-errors';\nimport { AsyncResultStatusCode, IExpressPaymentDetails } from '../../common';\n\nexport * from './components/get-line-items';\nexport * from './components/get-order-summary';\n\n/**\n * Device type.\n */\ntype DeviceType = 'Mobile';\n\n/**\n * The Checkout state.\n */\ninterface ICheckoutState {\n errorMessage: string;\n isValidationPassed: boolean;\n isPlaceOrderLoading?: boolean;\n isPlaceOrderClicked?: boolean;\n}\n\n/**\n * The Checkout view props.\n * @extends ICheckoutProps\n */\nexport interface ICheckoutViewProps extends ICheckoutProps {\n className: string;\n canShow?: boolean;\n isEmptyCart?: boolean;\n isConsentGiven?: boolean;\n hasError?: boolean;\n isPaymentVerificationRedirection?: boolean;\n shouldEnableSinglePaymentAuthorizationCheckout?: boolean;\n cartStatus?: string;\n isMobile?: boolean;\n isEditorialMode?: boolean;\n backToShoppingUrl?: string;\n editCartLink?: string;\n hasSalesOrder: boolean;\n hasInvoiceLine?: boolean;\n\n checkoutProps: IModuleProps;\n headerProps: INodeProps;\n bodyProps: INodeProps;\n mainProps: INodeProps;\n mainControlProps: INodeProps;\n sideProps: INodeProps;\n sideControlFirstProps: INodeProps;\n sideControlSecondProps: INodeProps;\n termsAndConditionsProps: INodeProps;\n\n guidedForm?: React.ReactNode;\n title?: React.ReactNode;\n loading?: React.ReactNode;\n alert?: React.ReactNode;\n orderSummary?: IOrderSummary;\n invoicePaymentSummary?: IInvoicePaymentSummary;\n lineItems?: ILineItems;\n placeOrderButton?: React.ReactNode;\n termsAndConditions?: React.ReactNode;\n keepShoppingButton?: React.ReactNode;\n orderConfirmation?: React.ReactNode;\n\n checkoutExpressPaymentContainer?: React.ReactNode;\n checkoutErrorRef?: React.RefObject;\n}\n\n/**\n * The checkout module props interface.\n */\nexport interface ICheckoutModuleProps extends ICheckoutProps, IModuleStateProps {}\n\nconst expressPaymentSectionClassName = 'msc-express-payment-container';\n\n/**\n *\n * CheckoutContainer component.\n * @extends {React.Component}\n */\n// @ts-expect-error\n@withModuleState\n@observer\nclass Checkout extends React.PureComponent {\n @computed get cartStatus(): Msdyn365.AsyncResultStatus {\n return this.props.data.checkout?.status;\n }\n\n @computed get isEmptyCart(): boolean {\n if (this.isEditorialMode) {\n // Editorial mode: Ignore empty cart\n return false;\n }\n const cart = this.props.data.checkout?.result?.checkoutCart?.cart;\n return this.cartStatus === 'SUCCESS' && !!cart && !isEmpty(cart) && (!cart.CartLines || cart.CartLines.length === 0);\n }\n\n @computed get hasError(): boolean {\n const cart = this.props.data.checkout?.result?.checkoutCart?.cart;\n return this.cartStatus === 'FAILED' || (this.cartStatus === 'SUCCESS' && (!cart || isEmpty(cart)));\n }\n\n @computed get isEditorialMode(): boolean {\n return this.props.context.request.params.isEditor;\n }\n\n @computed get canPlaceOrder(): boolean {\n const isTermsAndConditionAccepted = this.props.data.checkout.result && this.props.data.checkout.result?.isTermsAndConditionAccepted;\n\n const shouldEnableSinglePaymentAuthorizationCheckout =\n this.props.data.checkout.result?.shouldEnableSinglePaymentAuthorizationCheckout ?? false;\n\n const disableForOBO = Msdyn365.isOboRequest(this.props.context.request) && !this.isPaidOffByCustomerAccount;\n\n // If isTermsAndConditionAccepted is undefined means TermsAndCondition module is not added to page and we should able to place order.\n return (\n this.props.moduleState.isReady &&\n (isTermsAndConditionAccepted === undefined || isTermsAndConditionAccepted || shouldEnableSinglePaymentAuthorizationCheckout) &&\n (this.state.errorMessage === '' ||\n shouldEnableSinglePaymentAuthorizationCheckout ||\n (this.props.data.checkout.result?.isPaymentVerificationRedirection ?? false)) &&\n !(shouldEnableSinglePaymentAuthorizationCheckout && disableForOBO)\n );\n }\n\n @computed get isPaidOffByCustomerAccount(): boolean {\n const amountDue = this.props.data.checkout.result?.checkoutCart.cart.TotalAmount ?? 0;\n const customerAccountAmount = this.props.data.checkout.result?.customerAccountAmount ?? 0;\n\n return customerAccountAmount === amountDue;\n }\n\n @computed get isCartReady(): boolean {\n return (\n !!this.props.data.checkout.result?.checkoutCart?.cart &&\n this.props.data.customerInformation.status !== 'LOADING' &&\n this.props.data.featureState.status !== 'LOADING'\n );\n }\n\n public get expressPaymentDetailsFromCartPage(): IExpressPaymentDetails | null {\n const properties =\n this.props.data.checkout?.result?.checkoutCart?.cart?.ExtensionProperties?.find(\n property => property.Key === 'expressPaymentDetails'\n )?.Value?.StringValue ?? '';\n return properties ? (JSON.parse(properties) as IExpressPaymentDetails) : null;\n }\n\n public state: ICheckoutState = {\n errorMessage: '',\n isValidationPassed: false,\n isPlaceOrderLoading: false,\n isPlaceOrderClicked: false\n };\n\n private readonly telemetryContent: ITelemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n\n private readonly checkoutErrorRef: React.RefObject = React.createRef();\n\n public componentDidMount(): void {\n const {\n resources: { genericErrorMessage }\n } = this.props;\n\n when(\n () => this.asyncResultStatus !== AsyncResultStatusCode.LOADING,\n async () => {\n if (this.expressPaymentDetailsFromCartPage) {\n const {\n email,\n tenderLine,\n tokenizedPaymentCard,\n paymentTenderType: paymentTenderTypeFromCartPage,\n isExpressCheckoutAppliedInCartPage,\n isExpressAddressAppliedInCartPage,\n cardPaymentAcceptResult,\n address\n } = this.expressPaymentDetailsFromCartPage;\n\n this.props.data.checkout.result?.updateExpressCheckoutDetails({\n newEmailAddressFromExpressCheckout: email ?? '',\n newTenderLine: tenderLine,\n newTokenizedPaymentCard: tokenizedPaymentCard,\n newPaymentTenderType: paymentTenderTypeFromCartPage,\n newIsExpressCheckoutApplied: isExpressCheckoutAppliedInCartPage,\n newIsExpressAddressApplied: isExpressAddressAppliedInCartPage,\n newCardPaymentAcceptResult: cardPaymentAcceptResult\n });\n\n if (isExpressAddressAppliedInCartPage && address) {\n this.props.data.checkout.result?.updateBillingAddressFromExpressCheckout({\n newBillingAddressFromExpressCheckout: address\n });\n this.props.data.checkout.result?.updateShippingAddressFromExpressCheckout({\n newShippingAddressFromExpressCheckout: address\n });\n } else {\n void this._saveShippingAndBillingAddress(tokenizedPaymentCard);\n }\n\n this.props.data.checkout.result?.checkoutCart.updateExtensionProperties({\n newExtensionProperties: [\n {\n Key: 'expressPaymentDetails',\n Value: { StringValue: '' }\n }\n ]\n });\n }\n }\n );\n\n when(\n () => this.hasError,\n () => {\n this.setState({\n errorMessage: genericErrorMessage\n });\n this.props.context.telemetry.error('Failed to get cart');\n }\n );\n\n when(\n () => {\n return this.isEmptyCart;\n },\n () => {\n this.redirectToCartPage('Cart is empty, but no editCartLink found');\n }\n );\n\n when(\n () => this.isCartReady,\n () => {\n this.validateForCheckout();\n }\n );\n\n reaction(\n () => this.props.moduleState.isReady,\n () => {\n this.onContainerReady();\n }\n );\n\n // Reaction to call place order when isPaymentSectionContainerReady is true for new checkout flow.\n reaction(\n () => this.props.data.checkout.result?.isPaymentSectionContainerReady,\n async isReady => {\n if (\n this.props.data.checkout.result?.shouldEnableSinglePaymentAuthorizationCheckout &&\n isReady &&\n !this.props.data.checkout.result?.redirectAdditionalContext &&\n (!this.props.data.checkout.result?.isExpressCheckoutApplied ||\n this.props.data.checkout.result?.isPaymentVerificationRedirection)\n ) {\n if (!this.state.isPlaceOrderLoading) {\n this.setState({ isPlaceOrderLoading: true });\n }\n\n this.props.telemetry.information(\n 'Call onPlaceOrder as reaction when isPaymentSectionContainerReady is updated for single auth payment.'\n );\n\n await this.onPlaceOrder();\n\n // If 3D authentication redirection, don't update isPlaceOrderLoading\n if (!this.props.data.checkout.result.isPaymentVerificationRequired) {\n this.setState({ isPlaceOrderLoading: false });\n }\n }\n }\n );\n\n // Reaction to enable place order button when isPaymentSectionContainerHasError is true for new checkout flow.\n reaction(\n () => this.props.data.checkout.result?.isPaymentSectionContainerHasError,\n hasError => {\n if (this.props.data.checkout.result?.shouldEnableSinglePaymentAuthorizationCheckout && hasError) {\n this.setState({ isPlaceOrderLoading: false });\n\n this.props.telemetry.information(\n 'Enable place order button as reaction when isPaymentSectionContainerHasError is updated to true for single auth payment.'\n );\n } else {\n this.props.telemetry.information(\n 'No reaction when isPaymentSectionContainerHasError is updated to false or not single auth payment.'\n );\n }\n }\n );\n\n reaction(\n () => this.props.data.checkout.result?.isBillingAddressHasError,\n hasError => {\n if (this.props.data.checkout.result?.shouldEnableSinglePaymentAuthorizationCheckout && hasError) {\n this.setState({ isPlaceOrderLoading: false });\n\n this.props.data.checkout.result?.updateIsBillingAddressHasError({ newIsBillingAddressHasError: false });\n\n this.props.telemetry.information(\n 'Enable place order button as reaction when isBillingAddressHasError is updated to true for single auth payment.'\n );\n } else {\n this.props.telemetry.information(\n 'No reaction when isBillingAddressHasError is updated to false or not single auth payment.'\n );\n }\n }\n );\n\n // Reaction to enable place order button when redirection is true for new checkout flow.\n reaction(\n () => this.canPlaceOrder,\n async () => {\n if (this.props.data.checkout.result?.shouldEnableSinglePaymentAuthorizationCheckout && this.canPlaceOrder) {\n if (this.props.data.checkout.result?.isPaymentVerificationRedirection) {\n await this.props.data.checkout.result.updateIsPlaceOrderEnabledInRedirection({\n newIsPlaceOrderEnabledInRedirection: true\n });\n\n this.props.telemetry.information(\n 'Set isPaymentVerificationRedirection to true as reaction when canPlaceOrder is updated to true for single auth payment.'\n );\n } else {\n this.props.telemetry.information(\n 'No reaction when canPlaceOrder is updated to true but isPaymentVerificationRedirection is false for single auth payment.'\n );\n this.props.telemetry.information(\n `isOBORequest is ${Msdyn365.isOboRequest(this.props.context.request)} and canPlaceOrder is ${\n this.canPlaceOrder\n }.`\n );\n }\n } else {\n this.props.telemetry.information('No reaction when canPlaceOrder is updated to false or not single auth payment.');\n }\n }\n );\n\n // Reaction to update the error message when there is a checkout error.\n reaction(\n () => this.props.data.checkout.result?.checkoutError,\n checkoutError => {\n const checkoutErrorLocation: boolean = checkoutError?.errorLocation === ErrorLocation.Checkout;\n // If there is an Error in CheckoutPaymentInstrument module, checkout error location will be updated.\n const checkoutPaymentErrorLocation: boolean =\n checkoutError?.errorCode === ErrorCode.Microsoft_Dynamics_Commerce_Runtime_UnableToAuthorizePayment\n ? checkoutError.errorLocation === ErrorLocation.CheckoutPaymentInstrument\n : checkoutErrorLocation;\n if (\n this.props.data.checkout.result?.shouldEnableCheckoutErrorDisplayMessaging &&\n checkoutError &&\n checkoutError.errorMessage &&\n (checkoutErrorLocation ? checkoutErrorLocation : checkoutPaymentErrorLocation)\n ) {\n this._setErrorMessage(checkoutError.errorMessage);\n }\n }\n );\n }\n\n public componentDidUpdate(): void {\n if (\n this.props.data.checkout.result?.shouldEnableCheckoutErrorDisplayMessaging &&\n this.props.data.checkout.result?.shouldFocusOnCheckoutError &&\n this.state.errorMessage\n ) {\n focusOnCheckoutError(this.checkoutErrorRef, this.props.context.actionContext);\n }\n }\n\n // eslint-disable-next-line complexity -- ignore the complexity.\n public render(): JSX.Element {\n const {\n moduleState,\n config: { className, checkoutHeading, disableGuidedCheckoutFlow },\n resources,\n context: {\n request: {\n user: { isAuthenticated }\n }\n }\n } = this.props;\n const { errorMessage } = this.state;\n const { backToShopping, placeOrderText, confirmPaymentText, cookieConsentRequiredMessage, genericErrorMessage } = resources;\n const checkoutClass = classnames('ms-checkout', className);\n const allCheckoutInformation = this.getSlotItems('checkoutInformation');\n\n // @ts-expect-error - check the key of slot\n const checkoutInformation = allCheckoutInformation?.filter(info => !info?.key.includes('express-payment'));\n\n // @ts-expect-error - check the key of slot\n const checkoutExpressPaymentContainer = allCheckoutInformation?.find(info => info?.key.includes('express-payment'));\n\n const isConsentGiven =\n this.props.context.request &&\n this.props.context.request.cookies &&\n this.props.context.request.cookies.isConsentGiven &&\n this.props.context.request.cookies.isConsentGiven();\n\n const isMobile =\n this.props.context.request &&\n this.props.context.request.device &&\n (this.props.context.request.device.Type as DeviceType) === 'Mobile';\n\n const backToShoppingUrl = Msdyn365.getUrlSync('home', this.props.context.actionContext) || '';\n const editCartLink = Msdyn365.getUrlSync('cart', this.props.context.actionContext) || '';\n\n const termsAndConditions =\n this.props.slots.termsAndConditions && this.props.slots.termsAndConditions.length > 0 && this.props.slots.termsAndConditions[0];\n\n const payLoad = getPayloadObject('click', this.telemetryContent, TelemetryConstant.BackToShopping);\n const backToShoppingAttributes = getTelemetryAttributes(this.telemetryContent, payLoad);\n\n const hasInvoiceLine = this.props.data.checkout && this.props.data.checkout.result?.checkoutCart.hasInvoiceLine;\n const checkoutBtnText = hasInvoiceLine ? confirmPaymentText : placeOrderText;\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check for null/undefined.\n const shouldEnableSinglePaymentAuthorizationCheckout =\n this.props.data.checkout?.result?.shouldEnableSinglePaymentAuthorizationCheckout ?? false;\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check null/undefined.\n const isExpressCheckoutApplied = this.props.data.checkout?.result?.isExpressCheckoutApplied ?? false;\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check null/undefined.\n const hasShippingAddress = this.props.data.checkout?.result?.hasShippingAddress;\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check null/undefined.\n const hasCartDeliveryMode = this.props.data.checkout?.result?.hasCartDeliveryMode;\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check null/undefined.\n const hasGuestCheckoutEmail = this.props.data.checkout?.result?.hasGuestCheckoutEmail;\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check null/undefined.\n const isTermsAndConditionAccepted = this.props.data.checkout?.result?.isTermsAndConditionAccepted;\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check null/undefined.\n const isPaymentVerificationRedirection = this.props.data.checkout?.result?.isPaymentVerificationRedirection ?? false;\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check null/undefined.\n const shouldEnableCheckoutErrorDisplayMessaging =\n this.props.data.checkout?.result?.shouldEnableCheckoutErrorDisplayMessaging ?? false;\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check null/undefined.\n const shouldFocusOnCheckoutError = this.props.data.checkout?.result?.shouldFocusOnCheckoutError;\n\n let hasExpressPaymentContainer = false;\n\n if (\n typeof window !== 'undefined' &&\n (document?.getElementsByClassName(expressPaymentSectionClassName) as HTMLCollectionOf)[0]?.style.display === ''\n ) {\n hasExpressPaymentContainer = true;\n }\n\n let viewProps: ICheckoutViewProps = {\n ...this.props,\n className: checkoutClass,\n checkoutErrorRef: this.checkoutErrorRef,\n isEmptyCart: this.isEmptyCart,\n isConsentGiven,\n hasError: this.hasError,\n isPaymentVerificationRedirection: this.props.data.checkout?.result?.isPaymentVerificationRedirection,\n shouldEnableSinglePaymentAuthorizationCheckout,\n hasSalesOrder:\n this.props.data.checkout &&\n this.props.data.checkout.result !== undefined &&\n this.props.data.checkout.result.salesOrder !== undefined,\n hasInvoiceLine,\n cartStatus: this.cartStatus,\n isMobile,\n backToShoppingUrl,\n editCartLink,\n isEditorialMode: this.isEditorialMode,\n orderConfirmation:\n this.props.slots.orderConfirmation && this.props.slots.orderConfirmation.length > 0\n ? this.props.slots.orderConfirmation[0]\n : undefined,\n checkoutProps: { moduleProps: this.props, className: checkoutClass },\n headerProps: { className: 'ms-checkout__head' },\n bodyProps: { className: 'ms-checkout__body' },\n mainProps: { className: 'ms-checkout__main' },\n mainControlProps: { className: 'ms-checkout__main-control' },\n sideProps: { className: hasExpressPaymentContainer ? 'ms-checkout__has-express-side' : 'ms-checkout__side' },\n sideControlFirstProps: { className: 'ms-checkout__side-control-first' },\n sideControlSecondProps: { className: 'ms-checkout__side-control-second' },\n termsAndConditionsProps: { className: 'ms-checkout__terms-and-conditions' },\n title: checkoutHeading && this.renderMsdyn365Text(checkoutHeading),\n checkoutExpressPaymentContainer\n };\n\n if (!isConsentGiven && isAuthenticated) {\n viewProps = {\n ...viewProps,\n alert: \n };\n } else if (this.isLoading()) {\n viewProps = {\n ...viewProps,\n loading: \n };\n } else if (this.hasError) {\n viewProps = {\n ...viewProps,\n alert: \n };\n } else {\n viewProps = {\n ...viewProps,\n alert: errorMessage && ,\n canShow: true,\n guidedForm: checkoutInformation ? (\n \n ) : (\n undefined\n ),\n orderSummary: getOrderSummary(this.props),\n invoicePaymentSummary: getInvoicePaymentSummary(this.props),\n lineItems: hasInvoiceLine ? undefined : getLineItems(this.props, this.telemetryContent),\n placeOrderButton: (\n \n ),\n termsAndConditions,\n keepShoppingButton: backToShoppingUrl && (\n \n {backToShopping}\n \n )\n };\n }\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n @computed public get asyncResultStatus(): AsyncResultStatus | undefined {\n const isLoading = Object.values(this.props.data).some(data => get(data, 'status') === AsyncResultStatusCode.LOADING);\n if (isLoading) {\n return AsyncResultStatusCode.LOADING;\n }\n\n const isSuccess = Object.values(this.props.data).every(data => get(data, 'status') === AsyncResultStatusCode.SUCCESS);\n if (isSuccess) {\n return AsyncResultStatusCode.SUCCESS;\n }\n\n const isFailed = Object.values(this.props.data).some(data => get(data, 'status') === AsyncResultStatusCode.FAILED);\n if (isFailed) {\n return AsyncResultStatusCode.FAILED;\n }\n\n return undefined;\n }\n\n /**\n * Renders heading.\n * @param checkoutHeading - The checkout heading.\n * @returns React node.\n */\n public renderMsdyn365Text(checkoutHeading: ICheckoutHeadingData): React.ReactNode {\n return (\n \n );\n }\n\n /**\n * Event handler for heading change event.\n * @param event - The content change event in heading element.\n * @returns The new heading value.\n */\n public handleCheckoutHeadingChange = (event: Msdyn365.ContentEditableEvent) =>\n (this.props.config.checkoutHeading!.text = event.target.value);\n\n /**\n * Checks if cart is loading.\n * @returns True if is loading, false otherwise.\n */\n private readonly isLoading = (): boolean => {\n return !this.cartStatus || this.cartStatus === 'LOADING' || this.isEmptyCart || !this.state.isValidationPassed;\n };\n\n /**\n * Get slot items.\n * @param key - The slot key.\n * @returns React node or undefined.\n */\n private readonly getSlotItems = (key: string): React.ReactNode[] | undefined => {\n const { slots } = this.props;\n return slots && slots[key] && slots[key].length > 0 ? slots[key] : undefined;\n };\n\n /**\n * Trigger the payment section container submit when placing order.\n */\n private readonly triggerPaymentWithPlaceOrder = async (): Promise => {\n this.setState({ isPlaceOrderLoading: true });\n\n await this.props.data.checkout.result?.updateShouldTriggerPaymentWithPlaceOrder({\n newShouldTriggerPaymentWithPlaceOrder: !this.props.data.checkout.result.shouldTriggerPaymentWithPlaceOrder\n });\n };\n\n /**\n * On place order.\n * @returns Void promise.\n */\n private readonly onPlaceOrder = async (): Promise => {\n const {\n resources: { checkoutOutOfStockErrorMessage },\n context: {\n actionContext,\n app: {\n config: { enableStockCheck = false }\n }\n },\n slots: { orderConfirmation },\n data: { checkout, products }\n } = this.props;\n\n this.props.telemetry.information('Checkout onPlaceOrder is called.');\n this.setState({ isPlaceOrderClicked: true });\n\n // If hasInvoiceLine is true, no inventory check\n if (\n !this.props.data.checkout.result?.checkoutCart.hasInvoiceLine &&\n enableStockCheck &&\n (await this.isOverMaxQuantity((await checkout).checkoutCart.cart, await products))\n ) {\n this.setState({\n errorMessage: checkoutOutOfStockErrorMessage\n });\n this.props.context.telemetry.error(checkoutOutOfStockErrorMessage);\n } else {\n const hasOrderConfirmation = orderConfirmation && orderConfirmation.length > 0;\n\n const updatedCartVersion = await this.updateCartLineEmailAddress(this.props.data.checkout.result?.guestCheckoutEmail || '');\n\n await placeOrder(\n actionContext,\n this.props.data.checkout.result,\n this.props.data.products.result,\n !hasOrderConfirmation,\n updatedCartVersion,\n this.props.data.checkout.result?.isPaymentVerificationRedirection\n ).catch(error => {\n this.handleCheckoutError(error);\n });\n\n await checkout.result?.updateIsPaymentSectionContainerReady({ newIsPaymentSectionContainerReady: false });\n }\n };\n\n /**\n * Update receipt email address for electronic cart line.\n * @param newGuestCheckoutEmail - The guest checkout email.\n * @returns The updated cart version.\n */\n private readonly updateCartLineEmailAddress = async (newGuestCheckoutEmail: string): Promise => {\n const emailDeliveryModeCode = this.props.context.request.channel?.EmailDeliveryModeCode;\n\n const emailDeliveryCartLines = this.props.data.checkout.result?.checkoutCart.cart.CartLines?.filter(\n cartLine => cartLine.DeliveryMode && cartLine.DeliveryMode !== '' && cartLine.DeliveryMode === emailDeliveryModeCode\n );\n\n let updatedCartVersion: number | undefined;\n if (emailDeliveryCartLines && emailDeliveryCartLines.length > 0) {\n const lineDeliverySpecifications: LineDeliverySpecification[] = emailDeliveryCartLines.map(line => {\n return {\n LineId: line.LineId,\n DeliverySpecification: {\n DeliveryModeId: emailDeliveryModeCode,\n DeliveryPreferenceTypeValue: DeliveryPreferenceType.ElectronicDelivery,\n ElectronicDeliveryEmailAddress: newGuestCheckoutEmail\n }\n };\n });\n\n await updateLineDeliverySpecificationsAsync(\n { callerContext: this.props.context.actionContext },\n (await this.props.data.checkout).checkoutCart.cart.Id,\n lineDeliverySpecifications\n )\n .then(updatedCart => {\n updatedCartVersion = updatedCart.Version;\n })\n .catch(error => {\n this.props.context.actionContext.telemetry.exception(error);\n throw new Error('[updateLineDeliverySpecificationsAsync] Unable to update electronic delivery email address in cart');\n });\n }\n\n return updatedCartVersion;\n };\n\n /**\n * Return true if any product in the cart is over its max quantity.\n * @param cart -- The checkout cart.\n * @param products -- The checkout products.\n * @returns - Is any product in the cart is over max quantity.\n */\n private readonly isOverMaxQuantity = async (cart: Cart, products: SimpleProduct[]): Promise => {\n let isOverMaxQuantity = false;\n const emailDeliveryModeCode = this.props.context.request.channel?.EmailDeliveryModeCode;\n\n await getAvailabilitiesForCartLineItems(\n new ProductAvailabilitiesForCartLineItems(this.props.context.actionContext.requestContext.apiSettings),\n this.props.context.actionContext\n )\n .then(productInventoryInformation => {\n const productsThatShouldValidateInventory: IProductInventoryInformation[] = [];\n\n cart.CartLines?.map(cartline => {\n const cartlineProduct = products.find(product => product.RecordId === cartline.ProductId);\n\n // If product is non-stocked or cartline is electronic delivery, then no inventory check\n const isStockedItem = cartlineProduct?.Behavior?.IsStockedProduct;\n const isEmailDelivery =\n cartline.DeliveryMode && cartline.DeliveryMode !== '' ? cartline.DeliveryMode === emailDeliveryModeCode : false;\n const shouldSkipInventoryCheck = !isStockedItem || isEmailDelivery;\n if (!shouldSkipInventoryCheck && ArrayExtensions.hasElements(productInventoryInformation)) {\n const foundProductAvailability = productInventoryInformation.find(productInventory => {\n return productInventory.ProductAvailableQuantity?.ProductId! === cartline.ProductId;\n });\n if (foundProductAvailability) {\n productsThatShouldValidateInventory.push(foundProductAvailability);\n }\n }\n });\n\n const cartLinesInventoryValidation = validateCartLinesInventory(\n cart.CartLines ?? [],\n productsThatShouldValidateInventory,\n this.props.context.actionContext,\n products,\n emailDeliveryModeCode\n );\n\n // If is invalid then exceeds the available quantity\n isOverMaxQuantity = !cartLinesInventoryValidation.isValid;\n return isOverMaxQuantity;\n })\n .catch(error => {\n this.props.context.actionContext.telemetry.exception(error);\n throw new Error('[getAvailabilitiesForCartLineItems] Unable to get availabilities for products in checkout cart');\n });\n\n return isOverMaxQuantity;\n };\n\n /**\n * Gets active child in module state.\n * @returns - The module state manager collection.\n */\n private readonly getActiveChildModuleStates = (): IModuleStateManager[] => {\n const { childIds, getModule } = this.props.moduleState;\n return childIds\n .map(getModule)\n .filter((state): state is IModuleStateManager => !!state && !state.isDisabled && state.hasModuleState);\n };\n\n /**\n * On container ready.\n */\n private readonly onContainerReady = (): void => {\n this.props.telemetry.information('Checkout onContainerReady is called.');\n\n this.getActiveChildModuleStates().forEach(state => {\n state.isReady && state.onContainerReady && state.onContainerReady();\n });\n };\n\n /**\n * Redirects to cart page.\n * @param notFoundEditCartLinkMessage - Not found edit cart link message.\n */\n private readonly redirectToCartPage = (notFoundEditCartLinkMessage: string): void => {\n const editCartLink = Msdyn365.getUrlSync('cart', this.props.context.actionContext) || '';\n if (window && editCartLink) {\n window.location.assign(editCartLink);\n } else {\n this.setState({\n errorMessage: this.props.resources.genericErrorMessage\n });\n this.props.context.telemetry.error(notFoundEditCartLinkMessage);\n }\n };\n\n /**\n * Validates for checkout.\n * @param retry - Retry flag.\n */\n private readonly validateForCheckout = (retry: boolean = true): void => {\n const notFoundEditCartLinkMessage = \"Cart doesn't pass validation, but no editCartLink found\";\n const cart = this.props.data.checkout.result!.checkoutCart.cart;\n const { Id, Version } = cart;\n if (this._shouldValidateQuantityLimits()) {\n if (Version && Id) {\n validateForCheckoutAsync({ callerContext: this.props.context.actionContext, bypassCache: 'none' }, Id, Version)\n .then((result: CartLineValidationResults) => {\n if (result.ValidationFailuresByCartLines?.length !== 0) {\n this.redirectToCartPage(notFoundEditCartLinkMessage);\n } else {\n this.setState({ isValidationPassed: true });\n }\n })\n .catch(error => {\n this.props.telemetry.warning(error);\n this.props.telemetry.debug('Unable to validate Cart');\n if (retry && error.name === 'Microsoft_Dynamics_Commerce_Runtime_InvalidCartVersion') {\n const cartState = this.props.data.checkout.result?.checkoutCart;\n cartState\n ?.refreshCart({})\n .then(() => {\n this.validateForCheckout(false);\n })\n .catch((refreshError: Error) => {\n this.props.telemetry.warning(refreshError.message);\n this.props.telemetry.debug('Unable to refresh Cart');\n });\n } else {\n this.redirectToCartPage(notFoundEditCartLinkMessage);\n }\n });\n } else {\n this.redirectToCartPage(notFoundEditCartLinkMessage);\n }\n } else {\n this.setState({ isValidationPassed: true });\n }\n };\n\n @action\n private readonly _setErrorMessage = (errorMessage: string): void => {\n this.props.telemetry.error(errorMessage);\n this.props.moduleState.setHasError(true);\n this.props.moduleState.onUpdating();\n this.setState({\n errorMessage\n });\n };\n\n private readonly _shouldValidateQuantityLimits = (): boolean => {\n const featureStatuses = this.props.data.featureState.result;\n const isECommerceQuantityLimitsFeatureEnabledInHq =\n featureStatuses?.find(\n featureState => featureState.Name === 'Dynamics.AX.Application.EcommerceQuantityLimitConfigurationsFeature'\n )?.IsEnabled || false;\n\n if (isECommerceQuantityLimitsFeatureEnabledInHq) {\n return true;\n }\n\n const isOrderQuantityLimitsFeatureEnabledInHq =\n featureStatuses?.find(featureState => featureState.Name === 'Dynamics.AX.Application.RetailDefaultOrderQuantityLimitsFeature')\n ?.IsEnabled || false;\n\n if (!isOrderQuantityLimitsFeatureEnabledInHq) {\n return false;\n }\n\n const useSiteBuilderSettings = featureStatuses?.find(\n featureState => featureState.Name === 'RevertToSiteBuilderOrderQuantityLimitsSettings'\n )?.IsEnabled;\n\n if (useSiteBuilderSettings) {\n const defaultOrderQuantityLimitsFeatureConfig = this.props.context?.request?.app?.platform?.enableDefaultOrderQuantityLimits;\n const customerInfo = this.props.data.customerInformation.result;\n const isB2BSite = isChannelTypeB2B(this.props.context.actionContext.requestContext);\n\n const isOrderQuantityLimitsFeatureEnabledInSiteSettings =\n defaultOrderQuantityLimitsFeatureConfig === 'all' ||\n (customerInfo &&\n ((defaultOrderQuantityLimitsFeatureConfig === 'b2b' && isB2BSite) ||\n (defaultOrderQuantityLimitsFeatureConfig === 'b2c' && !isB2BSite)));\n\n return isOrderQuantityLimitsFeatureEnabledInSiteSettings ?? false;\n } else {\n const cartConfiguration = this.props.data.cartConfiguration?.result;\n return !(cartConfiguration?.IgnoreOrderSettings ?? false);\n }\n };\n\n /**\n * Save the address as Shipping and Billing address.\n * @param tokenizedPaymentCard - Tokenized payment card.\n */\n private readonly _saveShippingAndBillingAddress = async (tokenizedPaymentCard?: TokenizedPaymentCard): Promise => {\n const checkoutState = this.props.data.checkout.result;\n\n // For Paypal, the address returned in TokenizedPaymentCard will be used as both shipping and billing address.\n if (checkoutState && tokenizedPaymentCard && tokenizedPaymentCard.Zip) {\n const address: Address = this._getAddressFromTokenizedPaymentCard(tokenizedPaymentCard);\n\n await checkoutState.updateBillingAddressFromExpressCheckout({ newBillingAddressFromExpressCheckout: address });\n await checkoutState.updateShippingAddressFromExpressCheckout({ newShippingAddressFromExpressCheckout: address });\n }\n };\n\n /**\n * Get address from tokenizedPaymentCard.\n * @param tokenizedPaymentCard -- The tokenizedPaymentCard from the payment.\n * @returns The address.\n */\n private readonly _getAddressFromTokenizedPaymentCard = (tokenizedPaymentCard: TokenizedPaymentCard): Address => {\n const address: Address = {\n TwoLetterISORegionName: tokenizedPaymentCard.Country,\n Name: tokenizedPaymentCard.NameOnCard,\n Street: tokenizedPaymentCard.Address1,\n StreetNumber: tokenizedPaymentCard.Address2,\n City: tokenizedPaymentCard.City,\n State: tokenizedPaymentCard.State,\n ZipCode: tokenizedPaymentCard.Zip,\n Phone: tokenizedPaymentCard.Phone\n };\n\n return address;\n };\n\n /**\n * Handle checkout errors.\n * @param error -- The error on checkout api failure.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private readonly handleCheckoutError = (error: any) => {\n // Here checkout failure message will be shown if there is any error in checkout api except data validation.\n const {\n resources: {\n genericErrorMessage,\n invalidCartVersionErrorMessage,\n missingRequiredCartTenderLinesErrorMessage,\n checkoutApiFailureErrorMessage\n },\n context: { actionContext }\n } = this.props;\n const checkoutResult = this.props.data.checkout.result;\n const apiError = error && error.message;\n if (error?.statusCode === 500) {\n const errorMessage = checkoutApiFailureErrorMessage;\n this.setState({\n errorMessage\n });\n this.props.telemetry.exception(error);\n this.setState({ isPlaceOrderLoading: false });\n return;\n }\n if (checkoutResult && checkoutResult.shouldEnableCheckoutErrorDisplayMessaging) {\n const errorCode = error && error.name ? error.name : '';\n // apiError message will be used if errorcode resource/enums is unavailable\n setCheckoutErrors(errorCode, this.props.resources, !!checkoutResult.isExpressCheckoutApplied, actionContext, apiError);\n } else {\n let errorMessage = genericErrorMessage;\n this.setState({ isPlaceOrderClicked: false });\n\n if (error && error.name === 'Microsoft_Dynamics_Commerce_Runtime_InvalidCartVersion') {\n errorMessage = invalidCartVersionErrorMessage;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- unknown error type.\n } else if (error && error.name === 'Microsoft_Dynamics_Commerce_Runtime_MissingRequiredCartTenderLines') {\n errorMessage = missingRequiredCartTenderLinesErrorMessage;\n } else if (error && error.name === 'Microsoft_Dynamics_Commerce_Runtime_ExclusiveCouponCannotBeAppliedWithOtherCoupons') {\n // If api error is not available show generic message\n errorMessage = apiError || genericErrorMessage;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- unknown error type.\n if (\n this.props.data.checkout.result?.shouldEnableSinglePaymentAuthorizationCheckout &&\n error.data?.AdditionalContext &&\n !this.props.data.checkout.result?.isPaymentVerificationRedirection\n ) {\n return;\n }\n\n this.setState({\n errorMessage\n });\n this.props.telemetry.exception(error);\n }\n };\n}\n\nexport default Checkout;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Module, Node, Waiting } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport {\n ICheckoutViewProps,\n ILineItem,\n ILineItemDeliveryGroup,\n ILineItems,\n IOrderSummary,\n IPickUpAtStore,\n IEmailDelivery,\n IInvoicePaymentSummary\n} from './index';\n\nexport const PickUpAtStoreComponent: React.FC = ({ PickUpAtStore, label, location }) => (\n \n {label}\n {location}\n \n);\n\nexport const EmailDeliveryComponent: React.FC = ({ EmailDelivery, label }) => {label};\n\nexport const LineItemComponent: React.FC = ({ LineItem, item, pickUpAtStore, emailDelivery }) => (\n \n {item}\n {pickUpAtStore && }\n {emailDelivery && }\n \n);\n\nexport const LineItemGroupComponent: React.FC = ({ LineItemDeliveryGroup, LineItemList, heading, lineItems }) => (\n \n {heading}\n \n {lineItems.map(lineItem => (\n \n ))}\n \n \n);\n\nexport const LineItemGroupComponentWithMultiplePickUp: React.FC = ({\n LineItemDeliveryGroup,\n LineItemList,\n heading,\n lineItems,\n lineItemWraper,\n lineItemWraperIcon\n}) => (\n \n {lineItemWraperIcon}\n {lineItemWraper}\n {heading}\n \n {lineItems.map(lineItem => (\n \n ))}\n \n \n);\n\nexport const LineItemComponentWithMultiplePickUp: React.FC = ({ LineItem, item, pickUpAtStore, emailDelivery }) => (\n \n {item}\n {emailDelivery && }\n \n);\n\nexport const PickUpAtStoreComponentWithMultiplePickUp: React.FC = ({ PickUpAtStore, label, location }) => (\n \n {label}\n {location}\n \n);\n\nexport const LineItemsComponent: React.FC = ({\n LineItems,\n Header,\n heading,\n editLink,\n itemsForPickup,\n itemsForShip,\n itemsForEmail,\n itemsGroupWithMulitplePickupMode\n}) => (\n \n \n {heading}\n {editLink}\n \n {itemsGroupWithMulitplePickupMode === undefined && itemsForPickup && }\n {itemsGroupWithMulitplePickupMode === undefined && itemsForEmail && }\n {itemsGroupWithMulitplePickupMode === undefined && itemsForShip && }\n {itemsGroupWithMulitplePickupMode !== undefined\n ? itemsGroupWithMulitplePickupMode.map((item, index) => {\n return ;\n })\n : null}\n \n);\n\nconst OrderSummaryComponent: React.FC = ({ heading, lines }) => (\n
    \n {heading}\n
    \n {lines && (\n <>\n {lines.subtotal}\n {lines.shipping}\n {lines.otherCharge}\n {lines.tax}\n {lines.totalDiscounts}\n {lines.loyalty}\n {lines.customerAccount}\n {lines.giftCard}\n {lines.orderTotal}\n \n )}\n
    \n
    \n);\n\nconst PaymentSummaryComponent: React.FC = ({ heading, lines }) => (\n
    \n {heading}\n
    \n {lines && (\n <>\n {lines.invoices}\n {lines.giftCard}\n {lines.loyalty}\n {lines.orderTotal}\n \n )}\n
    \n
    \n);\n\nconst CheckoutView: React.FC = props => {\n const {\n isPaymentVerificationRedirection,\n shouldEnableSinglePaymentAuthorizationCheckout,\n canShow,\n checkoutProps,\n headerProps,\n hasSalesOrder,\n hasInvoiceLine,\n bodyProps,\n mainProps,\n mainControlProps,\n sideProps,\n sideControlFirstProps,\n sideControlSecondProps,\n termsAndConditionsProps,\n orderConfirmation,\n loading,\n alert,\n title,\n guidedForm,\n orderSummary,\n invoicePaymentSummary,\n lineItems,\n placeOrderButton,\n termsAndConditions,\n keepShoppingButton,\n checkoutExpressPaymentContainer,\n checkoutErrorRef\n } = props;\n\n return (\n \n {!hasSalesOrder && !checkoutExpressPaymentContainer && {title}}\n {!hasSalesOrder && isPaymentVerificationRedirection && shouldEnableSinglePaymentAuthorizationCheckout && !alert && !loading && (\n \n )}\n {!hasSalesOrder && (\n \n {loading}\n {alert}\n {canShow && (\n <>\n \n {checkoutExpressPaymentContainer}\n {checkoutExpressPaymentContainer && {title}}\n {guidedForm}\n {termsAndConditions}\n \n {placeOrderButton}\n {keepShoppingButton}\n \n \n \n {!hasInvoiceLine\n ? orderSummary && \n : invoicePaymentSummary && }\n \n {termsAndConditions}\n {placeOrderButton}\n {keepShoppingButton}\n \n {lineItems && }\n \n {termsAndConditions}\n {placeOrderButton}\n {keepShoppingButton}\n \n \n \n )}\n \n )}\n {hasSalesOrder && orderConfirmation}\n \n );\n};\n\nexport default CheckoutView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as React from 'react';\n\ninterface IAlertProps {\n message: string;\n}\n\nconst CheckoutAlert: React.FC = ({ message }) => (\n

    \n {message}\n

    \n);\n\nexport default CheckoutAlert;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IInvoiceSummaryLines, InvoiceSummary } from '@msdyn365-commerce-modules/invoice-payment-summary';\nimport get from 'lodash/get';\nimport * as React from 'react';\n\nimport { ICheckoutData } from '../checkout.data';\nimport { ICheckoutProps } from '../checkout.props.autogenerated';\n\nexport interface IInvoicePaymentSummary {\n heading?: React.ReactNode;\n lines?: IInvoiceSummaryLines;\n}\nexport const getInvoicePaymentSummary = (input: ICheckoutProps): IInvoicePaymentSummary => {\n const {\n data: { checkout },\n resources: { totalAmountLabel, invoiceLabel, invoiceSummaryTitle },\n context,\n typeName,\n id,\n telemetry\n } = input;\n\n const checkoutCart = get(checkout, 'result.checkoutCart');\n const cart = get(checkout, 'result.checkoutCart.cart');\n\n return {\n heading:

    {invoiceSummaryTitle}

    ,\n lines: checkoutCart?.hasInvoiceLine\n ? InvoiceSummary({\n orderTotalLabel: totalAmountLabel,\n invoiceLabel,\n cart,\n context,\n typeName,\n telemetry,\n id,\n checkoutState: checkout.result\n })\n : undefined\n };\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { CartLineItemComponent } from '@msdyn365-commerce/components';\nimport MsDyn365, * as Msdyn365 from '@msdyn365-commerce/core';\nimport { isChannelTypeB2B } from '@msdyn365-commerce/core';\nimport { CartLine, OrgUnitLocation, SimpleProduct } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { getProductUrlSync, StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n Button,\n getPayloadObject,\n getTelemetryAttributes,\n INodeProps,\n ITelemetryContent,\n TelemetryConstant\n} from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport get from 'lodash/get';\nimport groupBy from 'lodash/groupBy';\nimport * as React from 'react';\n\nimport { ICheckoutData } from '../checkout.data';\nimport { ICheckoutProps } from '../checkout.props.autogenerated';\n\ntype deliveryType = 'pickup' | 'ship' | 'email';\n\nexport interface IPickUpAtStore {\n PickUpAtStore: INodeProps;\n label: React.ReactNode;\n location: React.ReactNode;\n}\n\nexport interface IEmailDelivery {\n EmailDelivery: INodeProps;\n label: React.ReactNode;\n}\n\nexport interface ILineItem {\n LineId: string;\n LineItem: INodeProps;\n item?: React.ReactNode;\n pickUpAtStore?: IPickUpAtStore;\n emailDelivery?: IEmailDelivery;\n}\n\nexport interface ILineItemDeliveryGroup {\n LineItemDeliveryGroup: INodeProps;\n LineItemList: INodeProps;\n heading: React.ReactNode;\n lineItemWraper?: React.ReactNode;\n lineItemWraperIcon?: React.ReactNode;\n lineItems: ILineItem[];\n}\n\nexport interface ILineItems {\n LineItems: INodeProps;\n Header: INodeProps;\n heading: React.ReactNode;\n editLink: React.ReactNode;\n itemsForPickup?: ILineItemDeliveryGroup;\n itemsForShip?: ILineItemDeliveryGroup;\n itemsForEmail?: ILineItemDeliveryGroup;\n itemsGroupWithMulitplePickupMode?: ILineItemDeliveryGroup[];\n}\n\nexport const getLineItems = (input: ICheckoutProps, telemetryContent?: ITelemetryContent): ILineItems | undefined => {\n const pickupDeliveryModeCode = get(input, 'context.request.channel.PickupDeliveryModeCode');\n const emailDeliveryModeCode = get(input, 'context.request.channel.EmailDeliveryModeCode');\n const multiplePickupStoreSwitchName = 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature';\n const { channelDeliveryOptionConfig, featureState } = input.data;\n const retailMultiplePickUpOptionEnabled = featureState?.result?.find(feature => feature.Name === multiplePickupStoreSwitchName)\n ?.IsEnabled;\n\n const _getDeliveryLocation = (cartLine: CartLine): string => {\n const orgUnitLocations = get(input, 'data.orgUnitLocations.result');\n if (!cartLine.FulfillmentStoreId || !orgUnitLocations) {\n return '';\n }\n\n const locationMatch = (orgUnitLocations || []).find((location: OrgUnitLocation): boolean => {\n return location.OrgUnitNumber === cartLine.FulfillmentStoreId;\n });\n\n return locationMatch && locationMatch.OrgUnitName;\n };\n\n const _getProduct = (productId: number): SimpleProduct | undefined => {\n const products = get(input, 'data.products.result') || [];\n return products.find((_product: SimpleProduct) => {\n return productId === _product.RecordId;\n });\n };\n\n const _getLineItemComponent = (cartLine: CartLine): JSX.Element | undefined => {\n const product = cartLine.ProductId && _getProduct(cartLine.ProductId);\n const {\n id,\n typeName,\n context,\n config: { imageSettings, showShippingChargesForLineItems },\n resources: {\n quantityDisplayString,\n productDimensionTypeColor,\n productDimensionTypeSize,\n productDimensionTypeStyle,\n productDimensionTypeAmount,\n configString,\n inputQuantityAriaLabel,\n discountStringText,\n shippingCharges\n },\n context: {\n request: { gridSettings }\n }\n } = input;\n const catalogs = input.data.catalogs?.result;\n if (!product) {\n return;\n }\n\n let productUrl = getProductUrlSync(product, context.actionContext, undefined);\n if (MsDyn365.isBrowser && isChannelTypeB2B(context.actionContext.requestContext)) {\n const fullUrl = new URL(productUrl, window.location.href);\n fullUrl.searchParams.set('catalogid', `${cartLine.CatalogId ?? 0}`);\n productUrl = fullUrl.href;\n }\n const currencyCode = get(input, 'context.request.channel.Currency');\n return (\n \n );\n };\n\n const _getPickUpAtStoreComponents = (pickupDeliveryLocation: string): IPickUpAtStore => {\n const {\n resources: { pickUpAtStoreWithLocationText }\n } = input;\n\n return {\n PickUpAtStore: { className: 'ms-checkout__pick-up-at-store' },\n label: {pickUpAtStoreWithLocationText},\n location:
    {pickupDeliveryLocation}
    \n };\n };\n\n const _getEmailDeliveryComponents = (): IEmailDelivery => {\n const {\n resources: { emailDeliveryText }\n } = input;\n\n return {\n EmailDelivery: { className: 'ms-checkout__email-delivery' },\n label: {emailDeliveryText}\n };\n };\n\n const _getLineItemsComponents = (items: CartLine[]): ILineItem[] => {\n return items.map(cartLine => {\n const pickupDeliveryLocation = _getDeliveryLocation(cartLine);\n const isPickUp = _getCartPickDeliveryMode(cartLine);\n const isEmailDelivery =\n cartLine.DeliveryMode && cartLine.DeliveryMode !== '' ? cartLine.DeliveryMode === emailDeliveryModeCode : false;\n return {\n LineId: cartLine.LineId || '',\n LineItem: { className: 'ms-checkout__line-item' },\n item: _getLineItemComponent(cartLine),\n pickUpAtStore: isPickUp ? _getPickUpAtStoreComponents(pickupDeliveryLocation) : undefined,\n emailDelivery: isEmailDelivery ? _getEmailDeliveryComponents() : undefined\n };\n });\n };\n\n const _getCartPickDeliveryMode = (cartLineItem: CartLine): boolean => {\n return !StringExtensions.isNullOrWhitespace(cartLineItem.DeliveryMode)\n ? retailMultiplePickUpOptionEnabled\n ? cartLineItem.DeliveryMode ===\n channelDeliveryOptionConfig?.result?.PickupDeliveryModeCodes?.find(\n deliveryMode => deliveryMode === cartLineItem.DeliveryMode\n )\n : cartLineItem.DeliveryMode === pickupDeliveryModeCode\n : false;\n };\n\n const _getCartShipDeliveryMode = (cartLineItem: CartLine): boolean => {\n return !StringExtensions.isNullOrWhitespace(cartLineItem.DeliveryMode)\n ? retailMultiplePickUpOptionEnabled\n ? cartLineItem.DeliveryMode !==\n channelDeliveryOptionConfig?.result?.PickupDeliveryModeCodes?.find(\n deliveryMode => deliveryMode === cartLineItem.DeliveryMode\n )\n : cartLineItem.DeliveryMode !== pickupDeliveryModeCode\n : false;\n };\n\n const _getGroupTitleComponent = (count: number, type: deliveryType): string => {\n const {\n resources: { itemLabel, itemsLabel, inStorePickUpLabel, shippingCountCheckoutLineItem }\n } = input;\n\n let emailDeliveryModeDesc: string = '';\n\n input.data.deliveryOptions.result?.find(productDeliveryOptions => {\n emailDeliveryModeDesc = emailDeliveryModeDesc\n ? emailDeliveryModeDesc\n : productDeliveryOptions.DeliveryOptions?.find(deliveryOption => deliveryOption.Code === emailDeliveryModeCode)\n ?.Description!;\n });\n\n const suffix = count > 1 ? itemsLabel : itemLabel;\n const title =\n type === 'ship'\n ? shippingCountCheckoutLineItem\n : type === 'pickup'\n ? inStorePickUpLabel\n : `${emailDeliveryModeDesc} (${count} ${suffix})`;\n return title.replace('{count}', count.toString()).replace('{suffix}', suffix);\n };\n\n const _countItems = (items: CartLine[]): number => {\n return items.reduce((count, item) => {\n return count + (item.Quantity || 0);\n }, 0);\n };\n\n const _filterItemsByDiliveryType = (type: deliveryType): CartLine[] => {\n const cart = get(input, 'data.checkout.result.checkoutCart.cart');\n if (type === 'ship') {\n return cart.CartLines.filter((cartLine: CartLine) =>\n cartLine.DeliveryMode && cartLine.DeliveryMode !== ''\n ? _getCartShipDeliveryMode(cartLine) && cartLine.DeliveryMode !== emailDeliveryModeCode\n : cartLine\n );\n } else if (type === 'pickup') {\n return cart.CartLines.filter((cartLine: CartLine) =>\n cartLine.DeliveryMode && cartLine.DeliveryMode !== '' ? _getCartPickDeliveryMode(cartLine) : null\n );\n }\n return cart.CartLines.filter((cartLine: CartLine) => cartLine.DeliveryMode === emailDeliveryModeCode);\n };\n\n const _getLineItemsByDeliveryType = (type: deliveryType): ILineItemDeliveryGroup | undefined => {\n if ((pickupDeliveryModeCode === '' || pickupDeliveryModeCode === undefined) && (type === 'pickup' || type === 'email')) {\n return;\n }\n\n const items = _filterItemsByDiliveryType(type);\n\n if (items.length === 0) {\n return undefined;\n }\n\n const count = _countItems(items);\n const title = _getGroupTitleComponent(count, type);\n\n return {\n LineItemDeliveryGroup: { className: classnames('ms-checkout__line-items-delivery-group', type) },\n LineItemList: { className: 'ms-checkout__line-items-list' },\n heading:
    {title}
    ,\n lineItems: _getLineItemsComponents(items)\n };\n };\n\n const _getLineItems = (): ILineItems | undefined => {\n const {\n context,\n config: { lineItemsHeading },\n data: { products },\n resources: { editCartText }\n } = input;\n\n const payLoad = getPayloadObject('click', telemetryContent!, TelemetryConstant.EditCart);\n const attribute = getTelemetryAttributes(telemetryContent!, payLoad);\n const cart = get(input, 'data.checkout.result.checkoutCart.cart');\n const groupClass = retailMultiplePickUpOptionEnabled ? ' multiple-pickup-enabled' : '';\n if (!cart || !cart.CartLines || cart.CartLines.length === 0 || !products) {\n return undefined;\n }\n\n return {\n LineItems: { className: `ms-checkout__line-items${groupClass}` },\n Header: { className: 'ms-checkout__line-items-header' },\n heading: lineItemsHeading && lineItemsHeading.text && (\n \n ),\n editLink: (\n \n {editCartText}\n \n ),\n itemsForPickup: _getLineItemsByDeliveryType('pickup'),\n itemsForShip: _getLineItemsByDeliveryType('ship'),\n itemsForEmail: _getLineItemsByDeliveryType('email'),\n itemsGroupWithMulitplePickupMode: retailMultiplePickUpOptionEnabled\n ? _getLineItemsByDeliveryTypeWithMulitplePickupMode()\n : undefined\n };\n };\n\n const handleLineItemHeadingChange = (event: Msdyn365.ContentEditableEvent) => {\n const {\n config: { lineItemsHeading }\n } = input;\n if (lineItemsHeading) {\n lineItemsHeading.text = event.target.value;\n }\n };\n\n const _getGroupTitleComponentWithMultiplePickUp = (\n count: number,\n type: deliveryType,\n deliveryMode?: string,\n fulFillmentStoreId?: string\n ): string => {\n const {\n resources: { itemLabel, itemsLabel }\n } = input;\n\n let emailDeliveryModeDesc: string = '';\n let pickupDeliveryModeDesc: string = '';\n\n input.data.deliveryOptions.result?.find(productDeliveryOptions => {\n emailDeliveryModeDesc = emailDeliveryModeDesc\n ? emailDeliveryModeDesc\n : productDeliveryOptions.DeliveryOptions?.find(deliveryOption => deliveryOption.Code === emailDeliveryModeCode)\n ?.Description!;\n });\n\n input.data.deliveryOptions.result?.find(productDeliveryOptions => {\n pickupDeliveryModeDesc = pickupDeliveryModeDesc\n ? pickupDeliveryModeDesc\n : productDeliveryOptions.DeliveryOptions?.find(deliveryOption => deliveryOption.Code === deliveryMode)?.Description!;\n });\n\n const pickupTitle: string = `${pickupDeliveryModeDesc}, ${fulFillmentStoreId}`;\n const suffix = count > 1 ? itemsLabel : itemLabel;\n const title =\n type === 'ship'\n ? `(${count} ${suffix})`\n : type === 'pickup'\n ? `${pickupTitle} (${count} ${suffix})`\n : `${emailDeliveryModeDesc} (${count} ${suffix})`;\n return title.replace('{count}', count.toString()).replace('{suffix}', suffix);\n };\n\n const _filterItemsByMultiplePickupMode = (): CartLine[][] => {\n const cart = get(input, 'data.checkout.result.checkoutCart.cart');\n const getGroupByStorePickup = (items: CartLine[]) => groupBy(items, item => item.FulfillmentStoreId);\n const getGroupByDelivery = (items: CartLine[]) => groupBy(items, item => item.DeliveryMode);\n const groupDelivery = getGroupByDelivery(cart.CartLines);\n const cartLinesGroup: CartLine[] = [];\n const cartLinesGrp: CartLine[][] = [];\n\n // 1) Group by store and pick up mode\n Object.entries(groupDelivery).forEach(([deliveryMode, groupByDeliveryType]) => {\n // @ts-expect-error\n groupDelivery[deliveryMode] = getGroupByStorePickup(groupByDeliveryType);\n cartLinesGroup.push(getGroupByStorePickup(groupByDeliveryType));\n });\n\n Object.keys(cartLinesGroup).forEach(key => {\n const cartLines = cartLinesGroup[key];\n Object.keys(cartLines).forEach(index => {\n const cartLine = cartLines[index];\n cartLinesGrp.push(cartLine);\n });\n });\n\n return cartLinesGrp;\n };\n\n const _getLineItemsByDeliveryTypeWithMulitplePickupMode = (): ILineItemDeliveryGroup[] | undefined => {\n if (pickupDeliveryModeCode === '' || pickupDeliveryModeCode === undefined) {\n return;\n }\n\n const {\n resources: { multiplePickUpLabel, shippingLable }\n } = input;\n\n const items = _filterItemsByMultiplePickupMode();\n\n if (items.length === 0) {\n return undefined;\n }\n\n const lineItemDeliveryGroup: ILineItemDeliveryGroup[] = [];\n items.map(item => {\n const count = _countItems(item);\n const cartLine = item[0];\n const pickupDeliveryLocation = _getDeliveryLocation(cartLine);\n const type: deliveryType =\n cartLine.FulfillmentStoreId && cartLine.DeliveryMode\n ? 'pickup'\n : cartLine.FulfillmentStoreId === '' &&\n cartLine.DeliveryMode === emailDeliveryModeCode &&\n !StringExtensions.isNullOrEmpty(emailDeliveryModeCode)\n ? 'email'\n : 'ship';\n const title = _getGroupTitleComponentWithMultiplePickUp(count, type, cartLine.DeliveryMode, pickupDeliveryLocation);\n const groupTitle = type === 'pickup' ? multiplePickUpLabel : type === 'ship' ? shippingLable : 'email';\n const iconClass = `ms-checkout__line-items-group-title-multiple-pickup-${type}icon`;\n lineItemDeliveryGroup.push({\n LineItemDeliveryGroup: { className: classnames('ms-checkout__line-items-delivery-group multiple-pickup', type) },\n LineItemList: { className: 'ms-checkout__line-items-list' },\n lineItemWraperIcon:
    ,\n lineItemWraper:
    {groupTitle}
    ,\n heading:
    {title}
    ,\n lineItems: _getLineItemsComponents(item)\n });\n });\n\n return lineItemDeliveryGroup;\n };\n\n return _getLineItems();\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 { IOrderSummaryLines, OrderSummary } from '@msdyn365-commerce-modules/order-summary-utilities';\nimport { INodeProps } from '@msdyn365-commerce-modules/utilities';\nimport get from 'lodash/get';\nimport * as React from 'react';\n\nimport { ICheckoutData } from '../checkout.data';\nimport { ICheckoutProps } from '../checkout.props.autogenerated';\n\nexport interface IOrderSummary {\n orderSummaryProps: INodeProps;\n heading?: React.ReactNode;\n lines?: IOrderSummaryLines;\n}\nexport const getOrderSummary = (input: ICheckoutProps): IOrderSummary => {\n const {\n config: { orderSummaryHeading },\n data: { checkout },\n resources: {\n subTotalLabel,\n shippingLabel,\n taxLabel,\n orderTotalLabel,\n loyaltyLabel,\n giftcardLabel,\n totalDiscountsLabel,\n freeText,\n toBeCalculatedText,\n otherCharges,\n customerAccountLabel\n },\n context,\n typeName,\n id,\n telemetry\n } = input;\n\n const checkoutState = get(checkout, 'result');\n const cart = get(checkout, 'result.checkoutCart.cart');\n const showLineItems = cart.CartLines && cart.CartLines.length > 0;\n const channelConfiguration = context.request.channel!;\n const multiplePickupStoreSwitchName = 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature';\n const { channelDeliveryOptionConfig, featureState } = input.data;\n const retailMultiplePickUpOptionEnabled = featureState?.result?.find(feature => feature.Name === multiplePickupStoreSwitchName)\n ?.IsEnabled;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- app configs are of generic type\n const isShowOrHideTaxEnabled = context.request.app.config.isEnableShowOrHideSalesTaxECommerceEnabled === true;\n\n const handleOrderSummaryHeadingChange = (event: Msdyn365.ContentEditableEvent) => {\n const {\n config: { orderSummaryHeading }\n } = input;\n if (orderSummaryHeading) {\n orderSummaryHeading.text = event.target.value;\n }\n };\n\n return {\n orderSummaryProps: { className: 'ms-checkout-guest-profile__selected-item' },\n heading: orderSummaryHeading && orderSummaryHeading.text && (\n \n ),\n lines: showLineItems\n ? OrderSummary({\n checkoutState,\n cart,\n subTotalLabel,\n shippingLabel,\n taxLabel,\n orderTotalLabel,\n loyaltyLabel,\n giftcardLabel,\n totalDiscountsLabel,\n freeText,\n toBeCalculatedText,\n context,\n typeName,\n id,\n channelConfiguration,\n telemetry,\n otherChargeLabel: otherCharges,\n retailMultiplePickUpOptionEnabled,\n channelDeliveryOptionConfig: channelDeliveryOptionConfig?.result,\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- existing property.\n isTaxIncludedInPrice: cart.IsTaxIncludedInPrice,\n isShowTaxBreakup: isShowOrHideTaxEnabled,\n customerAccountLabel\n })\n : undefined\n };\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IModuleStateManager } from '@msdyn365-commerce-modules/checkout-utilities';\nimport { Heading as HeadingType } from '@msdyn365-commerce-modules/data-types';\nimport {\n Button,\n getPayloadObject,\n getTelemetryAttributes,\n IPayLoad,\n ITelemetryContent,\n TelemetryConstant\n} from '@msdyn365-commerce-modules/utilities';\nimport { IActionContext } from '@msdyn365-commerce/core';\nimport classname from 'classnames';\nimport get from 'lodash/get';\nimport * as React from 'react';\nimport { focusOnCheckoutError, setCheckoutErrorFocus } from '../../../checkout-errors';\n\nexport interface ICheckoutGuidedCardProps {\n id?: string;\n step: number;\n title?: HeadingType;\n disabled?: boolean; // Module is not available\n isActive?: boolean; // Step === currentStep\n isVisted?: boolean; // Step < currentStep\n isExpanded?: boolean;\n isReady?: boolean;\n isPending?: boolean;\n isUpdating?: boolean;\n isSubmitting?: boolean;\n isCancelAllowed?: boolean;\n isMobile?: boolean;\n hasInitialized?: boolean;\n hasControlGroup?: boolean;\n shouldFocus?: boolean;\n children: React.ReactNode;\n moduleState?: IModuleStateManager;\n actionContext?: IActionContext;\n resource: {\n checkoutStepTitleFormat: string;\n saveBtnLabel: string;\n changeBtnLabel: string;\n cancelBtnLabel: string;\n saveAndContinueBtnLabel: string;\n };\n telemetryContent?: ITelemetryContent;\n onEdit?(): void;\n onCancel?(): void;\n onSubmit?(): void;\n onNext(): void;\n}\n\n/**\n *\n * CheckoutGuidedCard component.\n * @extends {React.Component}\n */\nclass CheckoutGuidedCard extends React.PureComponent {\n private readonly editButtonRef: React.RefObject = React.createRef();\n\n private readonly formCardRef: React.RefObject = React.createRef();\n\n private readonly payLoad: IPayLoad;\n\n constructor(props: ICheckoutGuidedCardProps) {\n super(props);\n this.payLoad = getPayloadObject('click', props.telemetryContent!, '');\n }\n\n public componentDidUpdate(prevProps: ICheckoutGuidedCardProps): void {\n /**\n * Move to next step when current step is ready.\n */\n const { isActive, isReady, onNext, isVisted, onEdit, shouldFocus, children, moduleState, actionContext } = this.props;\n\n // Move to next step after completing the current step\n if (isActive && isReady) {\n onNext();\n }\n\n // Set the focus to Edit button once edit button appear\n // (It happens when current step switch to isReady status)\n const prevCanEdit = prevProps.isReady && prevProps.isVisted && !!prevProps.onEdit;\n const canEdit = isReady && isVisted && !!onEdit;\n if (!prevCanEdit && canEdit) {\n this.focusOnEditButton();\n this.scrollToTitle();\n }\n\n // Set the focus to the first focusable element\n // (It happens when current step switch to isUpdating status)\n if (prevProps.isReady && !isReady) {\n this.focusOnFirstFocusableElement();\n }\n\n // Set the focus for the checkout error\n if (shouldFocus && actionContext) {\n const childrenModules = this._getModules(children);\n\n // Set the focus for the module within the checkout section container\n if (childrenModules.length > 0) {\n for (const childModule of childrenModules) {\n const childId = this._getId(childModule);\n const childState = moduleState?.getModule(childId);\n\n if (childState?.hasError) {\n setCheckoutErrorFocus(childId, actionContext);\n return;\n }\n }\n } else {\n focusOnCheckoutError(this.formCardRef, actionContext);\n }\n }\n }\n\n public render(): JSX.Element | null {\n const {\n title,\n disabled,\n isExpanded,\n isActive,\n isVisted,\n children,\n isReady,\n isPending,\n isUpdating,\n hasInitialized,\n hasControlGroup,\n onEdit,\n resource\n } = this.props;\n const { changeBtnLabel } = resource;\n\n this.payLoad.contentAction.etext = TelemetryConstant.CheckoutChange;\n const changeBtnAttributes = getTelemetryAttributes(this.props.telemetryContent!, this.payLoad);\n const canEdit = hasControlGroup && isReady && isVisted && onEdit;\n\n return (\n \n
    \n {this.getTitle()}\n\n {canEdit && (\n \n {changeBtnLabel}\n \n )}\n
    \n\n \n
    {children}
    \n\n {this.renderFooder()}\n
    \n
    \n );\n }\n\n private readonly renderFooder = (): JSX.Element | null => {\n const { isVisted, isReady, isSubmitting, isCancelAllowed, hasControlGroup, onCancel, onSubmit, resource } = this.props;\n const { saveBtnLabel, cancelBtnLabel, saveAndContinueBtnLabel } = resource;\n\n const canSubmit = !isReady && onSubmit;\n const canCancel = !isReady && isVisted && isCancelAllowed && onCancel;\n\n if (!hasControlGroup || (!canSubmit && !canCancel)) {\n return null;\n }\n\n this.payLoad.contentAction.etext = isVisted ? TelemetryConstant.Save : TelemetryConstant.SaveContinue;\n const saveBtnAttributes = getTelemetryAttributes(this.props.telemetryContent!, this.payLoad);\n this.payLoad.contentAction.etext = TelemetryConstant.Cancel;\n const cancelBtnAttributes = getTelemetryAttributes(this.props.telemetryContent!, this.payLoad);\n\n return (\n
    \n {canSubmit && (\n \n {isVisted && isCancelAllowed ? saveBtnLabel : saveAndContinueBtnLabel}\n \n )}\n {canCancel && (\n \n {cancelBtnLabel}\n \n )}\n
    \n );\n };\n\n private readonly focusOnFirstFocusableElement = (): void => {\n const node = this.formCardRef.current as HTMLElement;\n const focussableElements = `\n a:not([disabled]),\n button:not([disabled]),\n input[type=submit]:not([disabled]),\n input[type=checkbox]:not([disabled]),\n input[type=text]:not([disabled]),\n input[type=radio]:not([disabled]),\n input[type=password]:not([disabled]),\n select:not([disabled]),\n textarea:not([disabled]),\n [tabindex]:not([disabled]):not([tabindex=\"-1\"])\n `;\n\n const child = node && node.querySelector && (node.querySelector(focussableElements) as HTMLElement);\n child && child.focus && child.focus();\n };\n\n private readonly focusOnEditButton = (): void => {\n // Focus on edit button\n const editButton =\n this.editButtonRef &&\n this.editButtonRef.current &&\n this.editButtonRef.current.focus &&\n (this.editButtonRef.current as HTMLElement);\n editButton && editButton.focus();\n };\n\n private readonly scrollToTitle = (): void => {\n // Scroll window to the title of the step that was just completed only in mobile viewport\n const formCard = this.props.isMobile && this.formCardRef && this.formCardRef.current && (this.formCardRef.current as HTMLElement);\n formCard && formCard.scrollIntoView();\n };\n\n private readonly getTitle = (): JSX.Element => {\n const { step, title } = this.props;\n const { headingTag: Tag = 'h2', text = '' } = title || {};\n return (\n \n \n {step + 1}. {` `}\n \n {text && {text}}\n \n );\n };\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private readonly _getModules = (item: React.ReactNode): any[] => {\n return get(item, 'props.modules.primary') || [];\n };\n\n private readonly _getId = (item: React.ReactNode): string => {\n return get(item, 'id') || '';\n };\n}\n\nexport default CheckoutGuidedCard;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IModuleStateManager } from '@msdyn365-commerce-modules/checkout-utilities';\nimport { Heading } from '@msdyn365-commerce-modules/data-types';\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport { ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport { ICoreContext } from '@msdyn365-commerce/core';\nimport get from 'lodash/get';\nimport { computed } from 'mobx';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport GuidedCard from './guided-card';\n\nexport interface ICheckoutGuidedFormProps {\n items: React.ReactNode[];\n moduleState: IModuleStateManager;\n disableGuidedCheckoutFlow?: boolean;\n isMobile?: boolean;\n isEditor?: boolean;\n resource: {\n checkoutStepTitleFormat: string;\n saveBtnLabel: string;\n changeBtnLabel: string;\n cancelBtnLabel: string;\n saveAndContinueBtnLabel: string;\n };\n requestContext?: ICoreContext;\n telemetryContent?: ITelemetryContent;\n isPaymentVerificationRedirection?: boolean;\n shouldEnableSinglePaymentAuthorizationCheckout?: boolean;\n hasError?: boolean;\n hasShippingAddress?: boolean | undefined;\n hasCartDeliveryMode?: boolean | undefined;\n hasGuestCheckoutEmail?: boolean | undefined;\n isTermsAndConditionAccepted?: boolean | undefined;\n shouldEnableCheckoutErrorDisplayMessaging?: boolean;\n shouldFocusOnCheckoutError?: boolean | undefined;\n}\n\ninterface ICheckoutGuidedFormState {\n currentStep: number;\n}\n\nconst paymentInstrumentModuleId = 'payment-instrument';\n\n/**\n *\n * CheckoutGuidedForm component.\n * @extends {React.Component}\n */\n@observer\nclass CheckoutGuidedForm extends React.PureComponent {\n @computed public get hasMissingInfo(): boolean {\n if (\n this.props.hasShippingAddress === false ||\n this.props.hasCartDeliveryMode === false ||\n this.props.hasGuestCheckoutEmail === false ||\n this.props.isTermsAndConditionAccepted === false\n ) {\n return true;\n }\n\n return false;\n }\n\n @computed public get hasOrderError(): boolean {\n for (const item of this.props.items) {\n const childId = this.getId(item);\n const state = this.props.moduleState.getModule(childId);\n\n const isPaymentSectionContainer = ArrayExtensions.hasElements(\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check for null/undefined.\n state.childIds?.filter(currentId => currentId?.includes(paymentInstrumentModuleId))\n );\n\n if (!isPaymentSectionContainer && !state.isDisabled && state.hasError) {\n return true;\n }\n }\n\n return false;\n }\n\n public state: ICheckoutGuidedFormState = {\n currentStep: 0\n };\n\n public componentDidMount(): void {\n /**\n * Append child modules.\n */\n const childIds = this.props.items.map((item: React.ReactNode) => get(item, 'props.id'));\n this.props.moduleState.init({ childIds });\n }\n\n public render(): JSX.Element | null {\n const { moduleState, items, resource } = this.props;\n if (!items || !moduleState) {\n return null;\n }\n\n const shouldCollapseAfterRedirect =\n this.props.isPaymentVerificationRedirection &&\n this.props.shouldEnableSinglePaymentAuthorizationCheckout &&\n !this.props.hasError &&\n !this.hasMissingInfo &&\n !this.hasOrderError;\n\n let previousModuleHasError = false;\n const childModule = this._enableAfterModule();\n return (\n
    \n {items.map((item: React.ReactNode) => {\n const childId = this.getId(item);\n const step = this.getStep(childId);\n const title = this.getHeading(item);\n const state = this.props.moduleState.getModule(childId);\n const {\n isReady,\n isPending,\n isUpdating,\n isDisabled,\n isCancelAllowed,\n onEdit,\n onCancel,\n onSubmit,\n hasModuleState,\n hasInitialized,\n hasError\n } = state || ({} as IModuleStateManager);\n\n let shouldFocus =\n !!this.props.shouldEnableCheckoutErrorDisplayMessaging &&\n !!this.props.shouldFocusOnCheckoutError &&\n !previousModuleHasError &&\n hasError;\n previousModuleHasError = previousModuleHasError || shouldFocus;\n\n return (\n \n {React.cloneElement(item as React.ReactElement, { enableControl: true })}\n \n );\n })}\n
    \n );\n }\n\n private readonly getEnabledModules = (): string[] => {\n const {\n moduleState: { childIds, getModule }\n } = this.props;\n return childIds.filter((childId: string) => {\n const state = getModule(childId);\n return !!state && !state.isDisabled;\n });\n };\n\n /**\n * Check if it is a section container with payment module.\n * @param moduleId -- The id of the module.\n * @returns If it is a section container with payment module.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private readonly _enableAfterModule = (): string => {\n const childIds: string[] = this.props.items.map((item: React.ReactNode) => get(item, 'props.id')).filter(Boolean);\n let id: string = '';\n for (let i = 0; i < childIds.length - 1; i++) {\n const childId = childIds[i];\n const nextChildId = childIds[i + 1];\n if (this._isPaymentSectionContainer(childId) && nextChildId) {\n id = nextChildId;\n }\n }\n return id;\n };\n\n /**\n * Check if it is a section container with payment module.\n * @param moduleId -- The id of the module.\n * @returns If it is a section container with payment module.\n */\n private readonly _isPaymentSectionContainer = (moduleId: string): boolean => {\n const sectionState = this.props.moduleState.getModule(moduleId);\n const isPaymentSectionContainer = ArrayExtensions.hasElements(\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check for null/undefined.\n sectionState.childIds?.filter(currentId => currentId?.includes(paymentInstrumentModuleId))\n );\n\n if (isPaymentSectionContainer) {\n return true;\n }\n return false;\n };\n\n private readonly getStep = (id: string): number => {\n return this.getEnabledModules().indexOf(id);\n };\n\n private readonly getId = (item: React.ReactNode): string => {\n return get(item, 'props.id') || '';\n };\n\n private readonly getHeading = (item: React.ReactNode): Heading => {\n return get(item, 'props.config.heading') || '';\n };\n\n private readonly isExpanded = (step: number, moduleChildId: string, childId: string): boolean => {\n if (this.props.isEditor) {\n // Editorial mode: Expand all the drawers\n return true;\n }\n if (this.props.shouldEnableSinglePaymentAuthorizationCheckout && moduleChildId === childId) {\n return true;\n }\n return step > -1 && step <= this.state.currentStep;\n };\n\n private readonly isActive = (step: number): boolean => {\n return step === this.state.currentStep;\n };\n\n private readonly isVisted = (step: number): boolean => {\n return step > -1 && step < this.state.currentStep;\n };\n\n private readonly onNext = (): void => {\n this.setState({\n currentStep: this.state.currentStep + 1\n });\n };\n}\n\nexport default CheckoutGuidedForm;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { TelemetryEvent } from '@msdyn365-commerce/core';\nimport { Button, getPayloadObject, getTelemetryAttributes, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport React, { useState } from 'react';\n\ninterface ICheckoutPlaceOrderButtonProps {\n canPlaceOrder: boolean;\n checkoutBtnText: string;\n telemetryContent?: ITelemetryContent;\n shouldEnableSinglePaymentAuthorizationCheckout?: boolean;\n isPlaceOrderLoading?: boolean;\n isExpressCheckoutApplied?: boolean;\n isPaymentVerificationRedirection?: boolean;\n placeOrder(): Promise;\n}\n\nconst buttonsStates: React.Dispatch>[] = [];\n\n/**\n * On place order function.\n * @param isBusy -Check is busy.\n * @param canPlaceOrder -Check can place order.\n * @param placeOrder -Place order function.\n * @returns Set state of button.\n */\nconst onPlaceOrderHandler = (isBusy: boolean, canPlaceOrder: boolean, placeOrder: () => Promise) => async () => {\n if (isBusy || !canPlaceOrder) {\n return;\n }\n buttonsStates.map(buttonSetState => {\n buttonSetState(true);\n return true;\n });\n await placeOrder();\n};\n\nconst CheckoutPlaceOrderButton: React.FC = ({\n checkoutBtnText,\n canPlaceOrder,\n placeOrder,\n telemetryContent,\n shouldEnableSinglePaymentAuthorizationCheckout,\n isPlaceOrderLoading,\n isExpressCheckoutApplied,\n isPaymentVerificationRedirection\n}) => {\n const [isBusy, setIsBusy] = useState(false);\n buttonsStates.push(setIsBusy);\n const payload = getPayloadObject(TelemetryEvent.Purchase, telemetryContent!, checkoutBtnText, '');\n const attributes = getTelemetryAttributes(telemetryContent!, payload);\n\n if (shouldEnableSinglePaymentAuthorizationCheckout && (!isExpressCheckoutApplied || isPaymentVerificationRedirection)) {\n return (\n \n {checkoutBtnText}\n \n );\n }\n\n return (\n \n {checkoutBtnText}\n \n );\n};\n\nexport default CheckoutPlaceOrderButton;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IActionContext } from '@msdyn365-commerce/core';\nimport { SalesOrder } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { CartCheckout } from '../../../common/checkout';\n\nexport const OPERATIONS = {\n PayCard: 201,\n PayGiftCertificate: 214,\n PayLoyalty: 207,\n PayCustomerAccount: 202\n};\n\nexport default async (\n ctx: IActionContext,\n updatedCartVersion?: number,\n isPaymentVerificationRedirection?: boolean\n): Promise => {\n return CartCheckout(ctx, updatedCartVersion, isPaymentVerificationRedirection);\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IActionContext } from '@msdyn365-commerce/core';\nimport { ICheckoutState } from '@msdyn365-commerce/global-state';\nimport { SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport { PlaceOrder } from '../../../common/place-order';\n\nexport default async (\n ctx: IActionContext,\n checkoutState: ICheckoutState | undefined,\n orderedProducts: SimpleProduct[] | undefined,\n redirect: boolean,\n updatedCartVersion?: number,\n isPaymentVerificationRedirection?: boolean\n) => {\n return PlaceOrder(ctx, checkoutState, orderedProducts, redirect, updatedCartVersion, isPaymentVerificationRedirection);\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Alert, Button, INodeProps, NodeTag } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { showAdditionalFields } from '../gift-card-balance-check.props.autogenerated';\n\nexport interface IGetFormInput {\n errorMessage: string;\n giftCardNumber: string;\n giftCardPin: string;\n giftCardExp: string;\n inputRef?: React.RefObject;\n inputPinRef?: React.RefObject;\n inputExpRef?: React.RefObject;\n supportExternalGiftCard?: boolean;\n additionalFields?: showAdditionalFields;\n resources: {\n balanceCheckButton: string;\n giftCardFormLabel: string;\n giftCardNumberLabel: string;\n giftCardPinLabel: string;\n giftCardExpLabel: string;\n giftCardAlertLabel: string;\n giftCardPinPlaceholderText: string;\n giftCardExpPlaceholderText: string;\n };\n onEnterGiftCardNumber(giftCardNumber: string): void;\n onEnterGiftCardPin(giftCardPin: string): void;\n onEnterGiftCardExp(giftCardExp: string): void;\n onApplyGiftCard(): Promise;\n}\n\nexport interface IForm {\n formProps: INodeProps;\n label: React.ReactNode;\n inputPinLabel: React.ReactNode;\n inputExpLabel: React.ReactNode;\n alert: React.ReactNode;\n inputProps: INodeProps;\n inputNumProps: INodeProps;\n inputPinProps: INodeProps;\n inputExpProps: INodeProps;\n inputNumber: React.ReactNode;\n inputPin: React.ReactNode;\n inputExp: React.ReactNode;\n applyButton: React.ReactNode;\n supportExternalGiftCard: boolean | undefined;\n showGiftCardPinInput: boolean | undefined;\n showGiftCardExpInput: boolean | undefined;\n alertFieldLabel: React.ReactNode;\n}\n\n/**\n * On apply function.\n * @param onApplyGiftCard -On apply gift card.\n * @returns Apply gift card.\n */\nconst onApplyHandler = (onApplyGiftCard: () => Promise) => async (event: React.SyntheticEvent): Promise => {\n event.preventDefault();\n await onApplyGiftCard();\n};\n\n/**\n * On change number function.\n * @param onEnterGiftCardNumber -On enter gift card number.\n * @returns On gift card enter pin function result.\n */\nconst onChangeNumberHandler = (onEnterGiftCardNumber: (giftCardNumber: string) => void) => (event: React.ChangeEvent) => {\n const value = (event.target.value || '').replace(new RegExp('[<>]', 'gi'), '');\n onEnterGiftCardNumber(value);\n};\n\n/**\n * On change pin function.\n * @param onEnterGiftCardPin -On enter gift card pin.\n * @returns On enter gift card pin function result.\n */\nconst onChangePinHandler = (onEnterGiftCardPin: (giftCardPin: string) => void) => (event: React.ChangeEvent) => {\n const value = (event.target.value || '').replace(new RegExp('[<>]', 'gi'), '');\n onEnterGiftCardPin(value);\n};\n\n/**\n * On change exp function.\n * @param onEnterGiftCardExp -On enter gift card.\n * @returns On enter gift card function result.\n */\nconst onChangeExpHandler = (onEnterGiftCardExp: (giftCardExp: string) => void) => (event: React.ChangeEvent) => {\n const value = (event.target.value || '').replace(new RegExp('[<>]', 'gi'), '');\n onEnterGiftCardExp(value);\n};\n\nexport const getForm = (options: IGetFormInput): IForm => {\n const {\n errorMessage,\n inputRef,\n inputPinRef,\n inputExpRef,\n giftCardNumber,\n giftCardPin,\n giftCardExp,\n onEnterGiftCardNumber,\n onEnterGiftCardPin,\n onEnterGiftCardExp,\n onApplyGiftCard,\n supportExternalGiftCard,\n additionalFields,\n resources: {\n balanceCheckButton,\n giftCardFormLabel,\n giftCardNumberLabel,\n giftCardPinLabel,\n giftCardExpLabel,\n giftCardAlertLabel,\n giftCardPinPlaceholderText,\n giftCardExpPlaceholderText\n }\n } = options;\n\n const formProps = {\n className: classnames('ms-gift-card-balance-check__form', { 'is-invalid': !!errorMessage }),\n onSubmit: onApplyHandler(onApplyGiftCard),\n tag: 'form' as NodeTag\n };\n\n const label = (\n \n );\n\n const inputPinLabel = (\n \n );\n\n const inputExpLabel = (\n \n );\n\n const alertFieldLabel = (\n \n );\n\n const alert = (\n \n {errorMessage}\n \n );\n\n const inputProps = {\n className: 'ms-gift-card-balance-check__input-fields'\n };\n\n const inputNumProps = {\n className: 'ms-gift-card-balance-check__input-num-fields'\n };\n\n const inputPinProps = {\n className: 'ms-gift-card-balance-check__input-pin-fields'\n };\n\n const inputExpProps = {\n className: 'ms-gift-card-balance-check__input-exp-fields'\n };\n\n const inputNumber = (\n \n );\n\n const inputPin = (\n \n );\n\n const inputExp = (\n \n );\n\n const applyButton = (\n \n {balanceCheckButton}\n \n );\n\n let showGiftCardPinInput = false;\n let showGiftCardExpInput = false;\n\n switch (additionalFields) {\n case showAdditionalFields.pin:\n showGiftCardPinInput = true;\n break;\n case showAdditionalFields.expirationDate:\n showGiftCardExpInput = true;\n break;\n case showAdditionalFields.pinAndExpirationDate:\n showGiftCardPinInput = true;\n showGiftCardExpInput = true;\n break;\n default:\n }\n\n return {\n formProps,\n label,\n inputPinLabel,\n inputExpLabel,\n alert,\n inputProps,\n inputNumProps,\n inputPinProps,\n inputExpProps,\n inputNumber,\n inputPin,\n inputExp,\n applyButton,\n supportExternalGiftCard,\n showGiftCardPinInput,\n showGiftCardExpInput,\n alertFieldLabel\n };\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { GiftCard } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { INodeProps } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nexport interface IGetItemInput {\n giftCard: GiftCard;\n resources: {\n enteredGiftCardLabel: string;\n giftCardAvailableBalanceLabel: string;\n };\n getFormattedPrice(price?: number, currencyCode?: string): string;\n}\n\nexport interface IItem {\n itemProps: INodeProps;\n id?: string;\n selectedGiftCard: React.ReactNode;\n removeButton?: React.ReactNode;\n}\n\n/**\n * GiftCardItem component.\n * @param root0\n * @param root0.giftCard\n * @param root0.getFormattedPrice\n * @param root0.resources\n * @param root0.resources.enteredGiftCardLabel\n * @param root0.resources.giftCardAvailableBalanceLabel\n * @extends {React.PureComponent}\n */\nexport const getItem = ({\n giftCard,\n getFormattedPrice,\n resources: { enteredGiftCardLabel, giftCardAvailableBalanceLabel }\n}: IGetItemInput): IItem => {\n const balance = getFormattedPrice(giftCard.Balance, giftCard.CardCurrencyCode);\n const giftCardLast4Digit = (giftCard.Id || '').substr(-4);\n\n const itemProps = {\n className: 'ms-gift-card-balance-check__item'\n };\n\n const selectedGiftCard = (\n \n {enteredGiftCardLabel}\n {` `}\n {giftCardLast4Digit}\n {` `}({giftCardAvailableBalanceLabel}\n {` `}\n {balance})\n \n );\n\n return {\n itemProps,\n id: giftCard && giftCard.Id,\n selectedGiftCard\n };\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport {\n getGiftCardAsync,\n getTenderTypesAsync,\n resolveCardTypesAsync\n} from '@msdyn365-commerce/retail-proxy/dist/DataActions/StoreOperationsDataActions.g';\nimport {\n CardType,\n CardTypeInfo,\n GiftCard,\n RetailOperation,\n TenderType\n} from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { IModuleProps } from '@msdyn365-commerce-modules/utilities';\nimport classname from 'classnames';\nimport * as React from 'react';\n\nimport { OPERATIONS } from '../checkout';\nimport { getForm, IForm } from './components/get-form';\nimport { getItem, IItem } from './components/get-item';\nimport { IGiftCardBalanceCheckProps } from './gift-card-balance-check.props.autogenerated';\n\ninterface IGiftCardBalanceCheckState {\n isFetchingGiftCard: boolean;\n errorMessage: string;\n giftCardNumber: string;\n giftCardPin: string;\n giftCardExp: string;\n giftCard?: GiftCard;\n}\n\nenum SupportedGiftCardType {\n Internal = 'internal',\n External = 'external',\n Both = 'both'\n}\n\nexport interface IGiftCardBalanceCheckModuleProps extends IGiftCardBalanceCheckProps<{}> {}\n\nexport interface IGiftCardBalanceCheckViewProps extends IGiftCardBalanceCheckProps<{}>, IGiftCardBalanceCheckState {\n className?: string;\n\n form: IForm;\n item?: IItem;\n\n giftCardBalanceCheckProps: IModuleProps;\n\n enterGiftCardNumber?(giftCardNumber: string): void;\n enterGiftCardPin?(giftCardPin: string): void;\n enterGiftCardExp?(giftCardExp: string): void;\n applyGiftCard?(): void;\n}\n\n/**\n *\n * GiftCardBalanceCheck component.\n * @extends {React.Component}\n */\nexport class GiftCardBalanceCheck extends React.Component {\n public state: IGiftCardBalanceCheckState = {\n isFetchingGiftCard: false,\n errorMessage: '',\n giftCardNumber: '',\n giftCardPin: '',\n giftCardExp: ''\n };\n\n private readonly inputRef: React.RefObject = React.createRef();\n\n private readonly inputPinRef: React.RefObject = React.createRef();\n\n private readonly inputExpRef: React.RefObject = React.createRef();\n\n public shouldComponentUpdate(nextProps: IGiftCardBalanceCheckModuleProps, nextState: IGiftCardBalanceCheckState): boolean {\n if (this.state === nextState && this.props.data === nextProps.data) {\n return false;\n }\n return true;\n }\n\n public render(): JSX.Element | null {\n const {\n config: { className, showAdditionalFields },\n resources\n } = this.props;\n const { errorMessage, giftCardNumber, giftCardPin, giftCardExp } = this.state;\n\n const supportedGiftCardType = this.props.context.app.config.giftCardSupported;\n\n if (!this._isEnabled()) {\n this.props.context.telemetry.error('Gift card balance check is not supported, module wont render');\n return null;\n }\n\n const supportExternalGiftCard = supportedGiftCardType !== SupportedGiftCardType.Internal;\n\n const moduleClassName = classname('ms-gift-card-balance-check', className);\n\n const viewProps: IGiftCardBalanceCheckViewProps = {\n ...this.props,\n ...this.state,\n className: moduleClassName,\n giftCardBalanceCheckProps: { moduleProps: this.props, className: moduleClassName },\n\n enterGiftCardNumber: this._enterGiftCardNumber,\n enterGiftCardPin: this._enterGiftCardPin,\n enterGiftCardExp: this._enterGiftCardExp,\n applyGiftCard: this._applyGiftCard,\n\n form: getForm({\n errorMessage,\n giftCardNumber,\n giftCardPin,\n giftCardExp,\n inputRef: this.inputRef,\n inputPinRef: this.inputPinRef,\n inputExpRef: this.inputExpRef,\n resources,\n supportExternalGiftCard,\n additionalFields: showAdditionalFields,\n onEnterGiftCardNumber: this._enterGiftCardNumber,\n onEnterGiftCardPin: this._enterGiftCardPin,\n onEnterGiftCardExp: this._enterGiftCardExp,\n onApplyGiftCard: this._applyGiftCard\n }),\n item:\n this.state.giftCard &&\n getItem({\n giftCard: this.state.giftCard,\n getFormattedPrice: this._getFormattedPrice,\n resources\n })\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n private readonly _isEnabled = (): boolean => {\n if (\n !this.props.context.request.user.isAuthenticated &&\n this.props.context.app.config.giftCardSupported !== SupportedGiftCardType.External &&\n !this.props.config.shouldBeEnabledForGuest\n ) {\n return false;\n }\n return true;\n };\n\n private readonly _getFormattedPrice = (price: number = 0, currencyCode: string = 'USD'): string => {\n return this.props.context.cultureFormatter.formatCurrency(price, currencyCode);\n };\n\n private readonly _enterGiftCardNumber = (giftCardNumber: string): void => {\n this.setState({\n giftCardNumber\n });\n this._clearError();\n };\n\n private readonly _enterGiftCardPin = (giftCardPin: string): void => {\n this.setState({\n giftCardPin\n });\n this._clearError();\n };\n\n private readonly _enterGiftCardExp = (giftCardExp: string): void => {\n this.setState({\n giftCardExp\n });\n this._clearError();\n };\n\n private readonly _clearError = (): void => {\n this.setState({\n errorMessage: ''\n });\n };\n\n private readonly _setError = (errorMessage: string): void => {\n this.props.telemetry.error('Error', errorMessage);\n this.props.telemetry.debug('Error', errorMessage);\n this.setState({\n errorMessage\n });\n };\n\n private readonly _applyGiftCard = async (): Promise => {\n if (this.state.isFetchingGiftCard) {\n return;\n }\n this.setState({\n isFetchingGiftCard: true\n });\n\n const giftCardNumber = this.state.giftCardNumber.trim();\n const giftCardPin = this.state.giftCardPin.trim();\n const giftCardExp = this.state.giftCardExp.trim();\n\n const giftCardTypes = await this._getGiftCardTypes(giftCardNumber);\n const giftCardType = giftCardTypes && giftCardTypes[0];\n const isPinRequired = giftCardType && giftCardType.IsPinRequired;\n const isExpRequired = giftCardType && giftCardType.IsExpirationDateRequired;\n const tenderTypeId = giftCardType && giftCardType.PaymentMethodId;\n const giftCard = await this._getGiftCard(giftCardNumber, giftCardPin, giftCardExp, isPinRequired, isExpRequired, tenderTypeId);\n\n if (giftCard) {\n this._clearError();\n this.setState({\n giftCardNumber: '',\n giftCardPin: '',\n giftCardExp: '',\n isFetchingGiftCard: false,\n giftCard\n });\n return Promise.resolve();\n }\n const input = this.inputRef && this.inputRef.current && this.inputRef.current.focus && (this.inputRef.current as HTMLElement);\n input && input.focus();\n this.setState({\n isFetchingGiftCard: false,\n giftCard: undefined\n });\n };\n\n private readonly _findGiftcardTenderTypes = (\n tenderTypes: TenderType[],\n operationId: RetailOperation,\n giftcardType: string\n ): string[] | undefined => {\n let matchedTenderTypes: TenderType[] | undefined;\n\n switch (giftcardType) {\n case SupportedGiftCardType.Internal:\n matchedTenderTypes = tenderTypes.filter(\n tenderType => tenderType.OperationId === operationId && tenderType.ConnectorId === ''\n );\n break;\n case SupportedGiftCardType.External:\n matchedTenderTypes = tenderTypes.filter(\n tenderType => tenderType.OperationId === operationId && tenderType.ConnectorId !== ''\n );\n break;\n default:\n throw new Error('Invalid gift card type');\n }\n\n if (matchedTenderTypes) {\n return matchedTenderTypes.map(tenderType => tenderType.TenderTypeId || '');\n }\n return;\n };\n\n private readonly _getGiftCard = async (\n giftCardNumber: string,\n giftCardPin: string,\n giftCardExp: string,\n isPinRequired: boolean | undefined,\n isExpRequired: boolean | undefined,\n tenderTypeId: string | undefined\n ): Promise => {\n const {\n resources: { invalidCardTypeError, noBalanceError, invalidCardInfoError, noCardPinError, noCardExpError }\n } = this.props;\n\n const supportedGiftCardType = this.props.context.app.config.giftCardSupported;\n\n if (!tenderTypeId) {\n return undefined;\n }\n\n const tenderTypes = await getTenderTypesAsync({ callerContext: this.props.context.actionContext, queryResultSettings: {} }).catch(\n error => {\n throw error;\n }\n );\n\n if (!tenderTypes) {\n throw new Error('Fail to get gift card tender line');\n }\n\n const internalGiftcardTenderTypes = this._findGiftcardTenderTypes(\n tenderTypes,\n OPERATIONS.PayGiftCertificate,\n SupportedGiftCardType.Internal\n );\n const externalGiftcardTenderTypes = this._findGiftcardTenderTypes(\n tenderTypes,\n OPERATIONS.PayGiftCertificate,\n SupportedGiftCardType.External\n );\n\n switch (supportedGiftCardType) {\n case undefined:\n case SupportedGiftCardType.Internal:\n if (!internalGiftcardTenderTypes?.includes(tenderTypeId)) {\n this._setError(invalidCardTypeError);\n return undefined;\n }\n break;\n case SupportedGiftCardType.External:\n if (!externalGiftcardTenderTypes?.includes(tenderTypeId)) {\n this._setError(invalidCardTypeError);\n return undefined;\n }\n break;\n case SupportedGiftCardType.Both:\n if (!internalGiftcardTenderTypes?.includes(tenderTypeId) && !externalGiftcardTenderTypes?.includes(tenderTypeId)) {\n this._setError(invalidCardTypeError);\n return undefined;\n }\n break;\n default:\n throw new Error('Unsupported gift card type');\n }\n\n if (!this.props.context.request.user.isAuthenticated && internalGiftcardTenderTypes?.includes(tenderTypeId)) {\n this._setError(invalidCardTypeError);\n return undefined;\n }\n\n if (isPinRequired && giftCardPin === '') {\n this._setError(noCardPinError);\n return undefined;\n }\n\n if (isExpRequired && giftCardExp === '') {\n this._setError(noCardExpError);\n return undefined;\n }\n\n const month = Number.parseInt(giftCardExp.split('/')[0], 10);\n const year = Number.parseInt(giftCardExp.split('/')[1], 10);\n\n return getGiftCardAsync({ callerContext: this.props.context.actionContext }, giftCardNumber, tenderTypeId, giftCardPin, month, year)\n .then(activeGiftCard => {\n if (!activeGiftCard.Balance || activeGiftCard.Balance === 0) {\n this._setError(noBalanceError);\n return;\n }\n return activeGiftCard;\n })\n .catch(error => {\n this._setError(invalidCardInfoError);\n return undefined;\n });\n };\n\n private readonly _getGiftCardTypes = async (giftCardNumber: string): Promise => {\n const {\n resources: { emptyInputError, invalidCodeError }\n } = this.props;\n\n if (!giftCardNumber) {\n this._setError(emptyInputError);\n return undefined;\n }\n\n return resolveCardTypesAsync({ callerContext: this.props.context.actionContext }, giftCardNumber, CardType.GiftCard)\n .then(giftCardTypes => {\n if (!giftCardTypes || giftCardTypes.length === 0 || giftCardTypes[0] === undefined) {\n this._setError(invalidCodeError);\n return;\n }\n return giftCardTypes;\n })\n .catch(error => {\n this._setError(invalidCodeError);\n return undefined;\n });\n };\n}\n\nexport default GiftCardBalanceCheck;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IForm, IItem, IGiftCardBalanceCheckViewProps } from './index';\n\nexport const Form: React.FC = ({\n formProps,\n label,\n inputPinLabel,\n inputExpLabel,\n alert,\n inputProps,\n inputNumProps,\n inputPinProps,\n inputExpProps,\n inputNumber,\n inputPin,\n inputExp,\n applyButton,\n supportExternalGiftCard,\n showGiftCardPinInput,\n showGiftCardExpInput,\n alertFieldLabel\n}) => (\n \n {alert}\n {supportExternalGiftCard ? (\n \n \n {label}\n {inputNumber}\n \n {showGiftCardPinInput && (\n \n {inputPinLabel}\n {inputPin}\n \n )}\n {showGiftCardExpInput && (\n \n {inputExpLabel}\n {inputExp}\n \n )}\n {(showGiftCardPinInput || showGiftCardExpInput) && alertFieldLabel}\n \n ) : (\n <>\n {label}\n {inputNumber}\n \n )}\n {applyButton}\n \n);\n\nexport const Item: React.FC = ({ itemProps, selectedGiftCard }) => {selectedGiftCard};\n\nconst GiftCardBalanceCheckView: React.FC = props => {\n const { giftCardBalanceCheckProps, form, item } = props;\n return (\n \n {form &&
    }\n {item && }\n \n );\n};\n\nexport default GiftCardBalanceCheckView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { CartLinePriceEditor, ICartLinePriceEditorResources, PriceComponent } from '@msdyn365-commerce/components';\nimport MsDyn365, { IComponentProps, IGridSettings, IImageSettings, Image } from '@msdyn365-commerce/core';\nimport { ICartState } from '@msdyn365-commerce/global-state';\nimport { ChannelDeliveryOptionConfiguration, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport { CartLine, ProductCatalog, SalesLine } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { ArrayExtensions, getFallbackImageUrl, validateCatalogId } from '@msdyn365-commerce-modules/retail-actions';\nimport { getPayloadObject, getTelemetryAttributes, IncrementalQuantity, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport classNames from 'classnames';\nimport * as React from 'react';\n\n/**\n * ICartlineResourceString: Interface for specifying the\n * resource strings that the component needs.\n */\nexport interface ICartlineResourceString {\n /**\n * Display string for discount label\n */\n discountStringText: string;\n\n /**\n * String for size key\n */\n sizeString: string;\n\n /**\n * String for color key\n */\n colorString: string;\n\n /**\n * String associated with the configuration product dimension\n */\n configString: string;\n\n /**\n * String for style key\n */\n styleString: string;\n\n /**\n * String for amount key\n */\n amountString?: string;\n\n /**\n * Display string for quantity label\n */\n quantityDisplayString: string;\n\n /**\n * Display string for quantity label\n */\n inputQuantityAriaLabel: string;\n\n /**\n * Aria label for the decrement button in quantity component\n */\n decrementButtonAriaLabel: string;\n\n /**\n * Aria label for the increment button in quantity component\n */\n incrementButtonAriaLabel: string;\n\n /**\n * Original text screenreader\n */\n originalPriceText: string;\n\n /**\n * Current text screenreader\n */\n currentPriceText: string;\n\n /**\n * Shipping Charges Text\n */\n shippingChargesText: string;\n\n priceEditorResources?: ICartLinePriceEditorResources;\n salesAgreementPricePrompt?: string;\n}\n\ninterface ICartLineData {\n cartLine: CartLine | SalesLine;\n cartState?: ICartState;\n product?: SimpleProduct;\n catalogs?: ProductCatalog[];\n}\n\n/**\n * ICartLineProps: The props required to render cartLineitem.\n */\nexport interface ICartLineProps extends IComponentProps {\n /**\n * The flag to change the quantity component from intractable to static.\n */\n disableQuantityInteractivity?: boolean;\n\n /**\n * The primary image url.\n */\n primaryImageUrl?: string;\n\n /**\n * The product url.\n */\n productUrl?: string;\n\n /**\n * GridSettings for the product image in cartLine.\n */\n gridSettings: IGridSettings;\n\n /**\n * ImageSettings for the product image in cartLine.\n */\n imageSettings: IImageSettings;\n\n /**\n * Boolean flag to indicate if the item is out of stock.\n */\n isOutOfStock?: boolean;\n\n /**\n * Flag to make quantity section editable.\n */\n isQuantityEditable?: boolean;\n\n /**\n * Max quantity for line item.\n */\n maxQuantity?: number;\n\n /**\n * Current quantity for line item.\n */\n currentQuantity?: number;\n\n /**\n * Resource string for the component.\n */\n resources: ICartlineResourceString;\n\n /**\n * SalesLine flag.\n */\n isSalesLine?: boolean;\n\n /**\n * Error message to show in place of quantity.\n */\n errorMessage?: string;\n\n /**\n * Inventory information label.\n */\n inventoryInformationLabel?: string;\n\n /**\n * Inventory information class name.\n */\n inventoryLabelClassName?: string;\n\n /**\n * Flag to show/hide shipping charges for line items.\n */\n showShippingChargesForLineItems?: boolean;\n\n /**\n * Boolean flag to indicate if cart state status is ready.\n */\n isCartStateReady?: boolean;\n\n /**\n * Chanel Delivery Option configuration is from api.\n */\n channelDeliveryOptionConfig?: ChannelDeliveryOptionConfiguration;\n\n /**\n * The telemetry content.\n */\n telemetryContent?: ITelemetryContent;\n\n /**\n * The cart line index.\n */\n lineIndex?: number;\n\n /**\n * Quantity onChange callback.\n */\n quantityOnChange?(cartLine: CartLine, newQuantity: number, lineIndex?: number): boolean;\n priceCurrency?: string;\n}\n\ninterface IDimensionStrings {\n /**\n * String for size key.\n */\n sizeString: string;\n\n /**\n * String for color key.\n */\n colorString: string;\n\n /**\n * String associated with the configuration product dimension.\n */\n configString: string;\n\n /**\n * String for style key.\n */\n styleString: string;\n\n /**\n * String for amount key.\n */\n amountString?: string;\n}\n\n/**\n * Renders catalog label for the cart line.\n * @param props - Cart line props.\n * @returns Catalog label.\n */\nconst CatalogLabelComponent: React.FC = (props: ICartLineProps) => {\n const catalogId = props.data.cartLine.CatalogId;\n validateCatalogId(catalogId);\n\n if (!props.context.request.user.isB2b || !catalogId || !ArrayExtensions.hasElements(props.data.catalogs)) {\n return null;\n }\n\n const catalog = props.data.catalogs.find(item => item.RecordId === catalogId);\n\n if (!catalog || !catalog.Name) {\n return null;\n }\n\n return
    {catalog.Name}
    ;\n};\n\nconst CartLineItemFunctions = {\n renderProductDimensions: (Product: SimpleProduct, DimensionStrings: IDimensionStrings) => {\n if (!Product || !Product.Dimensions) {\n return [];\n }\n\n return Product.Dimensions.map(productDimension => {\n if (productDimension.DimensionTypeValue === 1) {\n return (\n
    \n \n {DimensionStrings.colorString}:\n {productDimension.DimensionValue && productDimension.DimensionValue.Value}\n \n
    \n );\n }\n\n if (productDimension.DimensionTypeValue === 2) {\n return (\n
    \n \n {DimensionStrings.configString}:\n {productDimension.DimensionValue && productDimension.DimensionValue.Value}\n \n
    \n );\n }\n\n if (productDimension.DimensionTypeValue === 3) {\n return (\n
    \n \n {DimensionStrings.sizeString}:\n {productDimension.DimensionValue && productDimension.DimensionValue.Value}\n \n
    \n );\n }\n\n if (productDimension.DimensionTypeValue === 4) {\n return (\n
    \n \n {Product.IsGiftCard ? DimensionStrings.amountString : DimensionStrings.styleString}:\n {productDimension.DimensionValue && productDimension.DimensionValue.Value}\n \n
    \n );\n }\n return null;\n });\n },\n\n renderDiscountLines: (props: ICartLineProps) => {\n if (!props.data.cartLine.DiscountLines || props.data.cartLine.DiscountLines.length === 0) {\n return null;\n }\n\n return props.data.cartLine.DiscountLines.map((discountLine, index) => {\n return (\n
    \n \n {discountLine.OfferName ? discountLine.OfferName : ''}:{` ${props.resources.discountStringText || 'Discount'} `}\n \n \n \n \n {` (${discountLine.EffectivePercentage !== undefined ? discountLine.EffectivePercentage : ''}%)`}\n
    \n );\n });\n },\n renderInventoryLabel: (props: ICartLineProps) => {\n if (!props.inventoryInformationLabel) {\n return null;\n }\n const inventoryCssName = props.inventoryLabelClassName\n ? `msc-cart-line__product-inventory-label ${props.inventoryLabelClassName}`\n : 'msc-cart-line__product-inventory-label';\n return {props.inventoryInformationLabel};\n },\n\n /**\n * Gets the react node for product unit of measure display.\n * @param props - Icartline props.\n * @returns The node representing markup for unit of measure component.\n */\n renderUnitOfMeasure: (props: ICartLineProps) => {\n if (props.data.cartLine.IsInvoiceLine) {\n return null;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- Do not need type check for appsettings\n if (!props.context.app.config.unitOfMeasureDisplayType || props.context.app.config.unitOfMeasureDisplayType === 'none') {\n return undefined;\n }\n\n const product = props.data.product;\n if (!product || !product.DefaultUnitOfMeasure) {\n return undefined;\n }\n\n return (\n
    \n {product.DefaultUnitOfMeasure}\n
    \n );\n },\n renderShippingLabel: (props: ICartLineProps) => {\n const pickupDeliveryModeCode = props.context.request.channel?.PickupDeliveryModeCode;\n const channelDeliveryOptionConfig = props.channelDeliveryOptionConfig;\n const cartline = props.data.cartLine;\n let hasShippingMethod = false;\n if (channelDeliveryOptionConfig !== undefined) {\n hasShippingMethod = !!(\n cartline.DeliveryMode &&\n channelDeliveryOptionConfig.PickupDeliveryModeCodes?.some(deliveryMode => deliveryMode !== cartline.DeliveryMode)\n );\n } else {\n hasShippingMethod = !!(cartline.DeliveryMode && cartline.DeliveryMode !== pickupDeliveryModeCode);\n }\n if (!hasShippingMethod) {\n return undefined;\n }\n\n const shippingChargeLines = (cartline.ChargeLines || []).filter(chargeLine => chargeLine.IsShipping);\n\n if (shippingChargeLines.length === 0) {\n return undefined;\n }\n\n const freightFee = shippingChargeLines.reduce((chargeTotal, chargeLine) => {\n return chargeTotal + (chargeLine.CalculatedAmount || 0);\n }, 0);\n\n const priceComponent = (\n \n );\n return (\n <>\n \n {priceComponent}\n \n );\n },\n renderOtherCharges: (props: ICartLineProps) => {\n const cartline = props.data.cartLine;\n const otherCharges = cartline.ChargeLines?.filter(chargeline => !chargeline.IsShipping);\n\n return (\n (otherCharges &&\n otherCharges.map((otherCharge, key) => {\n return otherCharge && otherCharge.CalculatedAmount ? (\n
    \n \n \n \n \n
    \n ) : (\n ''\n );\n })) ||\n undefined\n );\n },\n\n /**\n * Render the sales agreement prompt.\n * @param props - The ICartLineProps.\n * @returns The JSX.Element.\n */\n renderSalesAgreementPrompt: (props: ICartLineProps): JSX.Element | null => {\n if (props.data.cartLine.SalesAgreementLineRecordId === 0) {\n return null;\n }\n return
    {props.resources.salesAgreementPricePrompt}
    ;\n }\n};\n\n// eslint-disable-next-line no-redeclare\nconst CartLine: React.FC = (props: ICartLineProps) => {\n const { isSalesLine, productUrl, resources } = props;\n const { product, cartLine } = props.data;\n\n const destructDimensionStrings = {\n sizeString: resources.sizeString,\n colorString: resources.colorString,\n styleString: resources.styleString,\n configString: resources.configString,\n amountString: resources.amountString\n };\n\n const fallbackImageUrl =\n product &&\n getFallbackImageUrl(\n product.ItemId,\n props.context.actionContext.requestContext.apiSettings,\n props.context.request.app?.config?.OmniChannelMedia\n );\n const productDimensions = product && CartLineItemFunctions.renderProductDimensions(product, destructDimensionStrings);\n const imageSettings = props.imageSettings;\n if (imageSettings) {\n imageSettings.cropFocalRegion = true;\n }\n const renderDisountLines = CartLineItemFunctions.renderDiscountLines(props);\n const renderInventoryLabel = CartLineItemFunctions.renderInventoryLabel(props);\n const renderUnitOfMeasure = CartLineItemFunctions.renderUnitOfMeasure(props);\n const renderShippingLabel = CartLineItemFunctions.renderShippingLabel(props);\n const renderOtherCharges = CartLineItemFunctions.renderOtherCharges(props);\n const renderSalesAgreementPrompt = CartLineItemFunctions.renderSalesAgreementPrompt(props);\n const payLoad = getPayloadObject('click', props.telemetryContent!, '', product?.RecordId.toString());\n const productAttribute = getTelemetryAttributes(props.telemetryContent!, payLoad);\n const productName = product?.Name || cartLine.Description;\n const imgeClassName = props.data.cartLine.IsInvoiceLine ? 'msc-cart-line__invoice-image' : 'msc-cart-line__product-image';\n\n const onChange = (newValue: number): boolean => {\n if (props.quantityOnChange) {\n return props.quantityOnChange(props.data.cartLine, newValue, props.lineIndex);\n }\n return true;\n };\n\n const _generateErrorMessage = (): JSX.Element | null => {\n if (props.errorMessage) {\n return (\n
    \n \n {props.errorMessage}\n
    \n );\n }\n\n return null;\n };\n\n const _generateQuantityandPrice = (): JSX.Element[] | null => {\n const nodes = [];\n if (props.isOutOfStock) {\n return null;\n }\n\n // No quantity selector for invoice line\n if (!props.data.cartLine.IsInvoiceLine) {\n if (props.data.product && props.isQuantityEditable) {\n nodes.push(\n
    \n
    {resources.quantityDisplayString}
    \n \n
    \n );\n } else {\n nodes.push(\n
    \n \n {props.data.cartLine.Quantity}\n
    \n );\n }\n }\n\n nodes.push(\n
    \n \n {(props.data.cartLine.DiscountAmount && props.data.cartLine.DiscountAmount > 0 && (\n <>\n \n {` ${props.resources.discountStringText || 'Discount'} `}\n \n \n \n )) ||\n null}\n
    \n );\n\n return nodes;\n };\n\n return (\n <>\n
    \n
    \n \n
    \n
    \n
    \n \n {MsDyn365.isBrowser ? (\n \n {productName}\n \n ) : null}\n {ArrayExtensions.hasElements(productDimensions) ? (\n
    {productDimensions}
    \n ) : (\n ''\n )}\n {renderUnitOfMeasure}\n
    \n \n
    \n {renderDisountLines}\n {renderInventoryLabel}\n {props.showShippingChargesForLineItems &&
    {renderShippingLabel}
    }\n {renderOtherCharges}\n {renderSalesAgreementPrompt}\n
    \n {_generateQuantityandPrice()}\n {props.data.cartLine.IsInvoiceLine && props.data.cartState && props.resources.priceEditorResources && (\n \n )}\n
    \n
    \n {_generateErrorMessage()}\n \n );\n};\n\nexport default CartLine;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { IHeaderData } from '../header.data';\nimport { IHeaderProps } from '../header.props.autogenerated';\n\n/**\n * The header preferred store component.\n */\n@observer\nexport class HeaderPreferredStore extends React.PureComponent> {\n private readonly modalCloseButtonRef: React.RefObject = React.createRef();\n\n /**\n * Handle click on the store selector.\n * @returns : Promise void.\n */\n public handleClick = () => {\n return this._findPreferredStoreOnClick(this.props);\n };\n\n public render(): JSX.Element | undefined {\n const {\n data: {\n storeSelectorStateManager: { result: storeSelectorStateManager }\n },\n slots,\n resources\n } = this.props;\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- slots can be undefined.\n if (ArrayExtensions.hasElements(slots?.storeSelector)) {\n const storeName =\n storeSelectorStateManager?.preferredStore && storeSelectorStateManager.preferredStore.StoreName\n ? storeSelectorStateManager.preferredStore.StoreName\n : resources.headerPreferredStoreText;\n\n return (\n
    \n \n {storeName}\n \n {slots.storeSelector}\n
    \n );\n }\n\n return undefined;\n }\n\n private async _findPreferredStoreOnClick(props: IHeaderProps): Promise {\n const {\n data: {\n storeSelectorStateManager: { result: storeSelectorStateManager }\n },\n modules\n } = props;\n if (!storeSelectorStateManager) {\n return;\n }\n let storeSelectorId: string = '';\n if (modules && Object.keys(modules).length > 0 && ArrayExtensions.hasElements(modules.storeSelector)) {\n storeSelectorId = modules.storeSelector[0].id;\n }\n await storeSelectorStateManager\n .openDialog({\n id: storeSelectorId,\n showMapViewLink: true,\n parentElementRef: this.modalCloseButtonRef,\n onLocationSelected: orgUnitLocation => {\n return Promise.resolve();\n }\n })\n .catch((error: Error) => {\n if (props.telemetry) {\n props.telemetry.error(error.message);\n props.telemetry.debug('Unable to set preferred store');\n }\n });\n }\n}\n\nexport default HeaderPreferredStore;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as Msdyn365 from '@msdyn365-commerce/core';\nimport { getPayloadObject, getTelemetryAttributes, ITelemetryContent, TelemetryConstant } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nexport interface ILogoProps {\n image: Msdyn365.IImageData;\n gridSettings?: Msdyn365.IGridSettings;\n link?: ILinkData;\n className?: string;\n telemetryContent?: ITelemetryContent;\n requestContext: Msdyn365.IRequestContext;\n typeName?: string;\n}\n\nexport interface ILinkData {\n linkUrl: Msdyn365.ILinkData;\n ariaLabel?: string;\n openInNewTab?: boolean;\n linkText?: string;\n}\n\n/**\n *\n * Logo component.\n * @extends {React.PureComponent}\n */\nexport class Logo extends React.PureComponent {\n private readonly attributes?: Msdyn365.IDictionary;\n\n constructor(props: ILogoProps) {\n super(props);\n const payLoad = getPayloadObject('click', props.telemetryContent!, TelemetryConstant.Logo);\n this.attributes = getTelemetryAttributes(props.telemetryContent!, payLoad);\n }\n\n public render(): JSX.Element {\n return
    {this._renderLogo(this.props)}
    ;\n }\n\n private _renderLogo(config: ILogoProps): JSX.Element {\n if (config.link && config.link.linkUrl.destinationUrl) {\n return (\n \n {this._renderImage(config)}\n \n );\n }\n return this._renderImage(config);\n }\n\n private _renderImage(config: ILogoProps): JSX.Element {\n const defaultImageSettings: Msdyn365.IImageSettings = {\n viewports: {\n xs: { q: 'w=132&h=28&m=6', w: 0, h: 0 },\n lg: { q: 'w=160&h=48&m=6', w: 0, h: 0 }\n },\n lazyload: true\n };\n\n return (\n \n );\n }\n}\n\nexport default Logo;\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 {\n Button,\n getPayloadObject,\n getTelemetryAttributes,\n ITelemetryContent,\n TelemetryConstant\n} from '@msdyn365-commerce-modules/utilities';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { IHeaderResources } from '../header.props.autogenerated';\n\nexport interface INavIconProps {\n resources: IHeaderResources;\n isExpanded: boolean;\n targetId: string;\n telemetryContent?: ITelemetryContent;\n toggleNavBar(): void;\n}\n\n/**\n *\n * NavIcon component.\n * @extends {React.PureComponent}\n */\n\n@observer\nexport class NavIcon extends React.PureComponent {\n private readonly attributes?: Msdyn365.IDictionary;\n\n constructor(props: INavIconProps) {\n super(props);\n const payLoad = getPayloadObject('click', props.telemetryContent!, TelemetryConstant.NavIcon);\n this.attributes = getTelemetryAttributes(props.telemetryContent!, payLoad);\n }\n\n public render(): JSX.Element {\n return (\n \n );\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { CartIconComponent, WishListIconComponent } from '@msdyn365-commerce/components';\nimport * as MsDyn365 from '@msdyn365-commerce/core';\nimport { ICartState } from '@msdyn365-commerce/global-state';\nimport { Customer } from '@msdyn365-commerce/retail-proxy';\nimport { ErrorNotification, NotificationsManager } from '@msdyn365-commerce-modules/notifications-core';\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n Button,\n format,\n getPayloadObject,\n getTelemetryAttributes,\n getTelemetryObject,\n IModuleProps,\n INodeProps,\n ITelemetryContent,\n KeyCodes,\n Modal,\n ModalBody,\n ModalHeader,\n onTelemetryClick,\n Popover,\n TelemetryConstant\n} from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport { computed, reaction } from 'mobx';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { isChannelTypeB2B } from '@msdyn365-commerce/core';\nimport { HeaderPreferredStore, Logo, NavIcon } from './components';\nimport { IHeaderData } from './header.data';\nimport { IHeaderProps, IHeaderResources, IMyAccountLinksData } from './header.props.autogenerated';\n\nexport interface IHeaderState {\n mobileMenuCollapsed: boolean;\n signinPopoverOpen: boolean;\n hasSigninerror?: boolean;\n}\n\nexport interface IHeaderViewProps extends IHeaderProps, IHeaderState {\n logo: React.ReactNode;\n wishListIconDesktop: React.ReactNode;\n wishListIconMobile: React.ReactNode;\n cartIcon: React.ReactNode;\n navIcon: React.ReactNode;\n className: string;\n menuBar: React.ReactNode[];\n search: React.ReactNode[];\n siteOptions: React.ReactNode[];\n HeaderTag: IModuleProps;\n HeaderContainer: INodeProps;\n MobileMenuContainer: INodeProps;\n MobileMenuHeader: React.ReactNode;\n MobileMenuBodyContainer: INodeProps;\n MobileMenuLinksContainer: INodeProps;\n HeaderTopBarContainer: INodeProps;\n Divider: INodeProps;\n\n AccountInfoDropdownParentContainer?: INodeProps;\n AccountInfoDropdownPopoverConentContainer?: INodeProps;\n accountInfoDropdownButton?: React.ReactNode;\n\n signOutLink?: React.ReactNode;\n signInLink?: React.ReactNode;\n switchCustomerLink?: React.ReactNode;\n isOBORequest?: boolean;\n accountLinks?: React.ReactNode[];\n preferredStore?: React.ReactNode;\n currentDistributor?: React.ReactNode;\n}\n\n/**\n *\n * Header component.\n * @extends {React.PureComponent>}\n */\n@observer\nclass Header extends React.PureComponent, IHeaderState> {\n private readonly popOverRef: React.RefObject;\n\n private readonly telemetryContent: ITelemetryContent;\n\n private cart: ICartState | undefined;\n\n private isB2BSite: boolean = false;\n\n /**\n * The signed-in user name displayed in the header bar\n */\n @computed public get displayName(): Readonly {\n return (\n (MsDyn365.isOboRequest(this.props.context.request) ? this.workerName : this.customerName) ||\n this.props.context.request?.user?.name\n );\n }\n\n /**\n * OBO scenario. The name of worker who shops on behalf of customer.\n */\n @computed public get workerName(): Readonly {\n const worker = this.props.data.employee?.result;\n return worker?.Name;\n }\n\n @computed public get customerName(): Readonly {\n const customer = this.props.data.accountInformation?.result;\n if (MsDyn365.isOboRequest(this.props.context.request)) {\n // For OBO scenario, display full customer name because multiple customers may have the same first name.\n return customer ? customer.Name : undefined;\n } else {\n return customer ? customer.FirstName || customer.Name : undefined;\n }\n }\n\n public constructor(props: IHeaderProps) {\n super(props);\n this.popOverRef = React.createRef();\n this._toggleNavbar = this._toggleNavbar.bind(this);\n this._togglePopover = this._togglePopover.bind(this);\n this._keydown = this._keydown.bind(this);\n this.state = {\n mobileMenuCollapsed: true,\n signinPopoverOpen: false,\n hasSigninerror: false\n };\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n this.isB2BSite = isChannelTypeB2B(this.props.context.request);\n }\n\n public componentDidMount(): void {\n if (MsDyn365.msdyn365Commerce.isBrowser) {\n window.addEventListener('keydown', this._keydown);\n }\n reaction(\n () => {\n this.props.data.cart.result;\n },\n () => {\n this.cart = this.props.data.cart.result;\n }\n );\n\n const {\n context: {\n request: { user }\n },\n resources: {\n signUpCustomerNotFoundTitle,\n signUpMultipleCustomerFoundTitle,\n signInCustomerNotAuthorizedTitle,\n closeNotificationLabel\n }\n } = this.props;\n\n const signinNotificationError = this._getSigninNotification(\n user,\n signUpMultipleCustomerFoundTitle,\n signUpCustomerNotFoundTitle,\n signInCustomerNotAuthorizedTitle\n );\n if (signinNotificationError !== undefined && this.state.hasSigninerror === false) {\n // For signup show simple error notification.\n NotificationsManager.instance().addNotification(new ErrorNotification(signinNotificationError, closeNotificationLabel));\n }\n }\n\n public componentWillUnmount(): void {\n if (MsDyn365.msdyn365Commerce.isBrowser) {\n window.removeEventListener('keydown', this._keydown, false);\n }\n }\n\n public render(): JSX.Element | null {\n const {\n id,\n typeName,\n data: { accountInformation, wishlists },\n context: {\n request: { user }\n },\n context,\n resources: { cartLabel, cartQtyLabel }\n } = this.props;\n const { logoLink, logoImage, shouldShowWishlistCount } = this.props.config;\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access -- app config is generic\n const disableTooltip = this.props.context.app.config.disableTooltip || false;\n const headerToggleClass = this.state.mobileMenuCollapsed ? '' : 'ms-header-open';\n const headerClassName = classnames('ms-header', this.props.config.className, headerToggleClass);\n const navbarKey = 'header-nav-mobile';\n const customer = accountInformation && accountInformation.result;\n const cartIconSlot = this._getSlot('cartIcon');\n const menuBarSlot = this._getSlot('menuBar');\n const searchSlot = this._getSlot('search');\n let wishlistCount = 0;\n const siteOptionsSlot = this._getSlot('siteOptions');\n const preferredStoreSlot = this._getSlot('storeSelector');\n const currentDistributorSlot = this._getSlot('distributorSelector');\n if (wishlists !== undefined) {\n if (\n !wishlists.result ||\n !ArrayExtensions.hasElements(wishlists.result) ||\n !wishlists.result[0].CommerceListLines ||\n !ArrayExtensions.hasElements(wishlists.result[0].CommerceListLines)\n ) {\n wishlistCount = 0;\n } else {\n wishlistCount = wishlists.result[0].CommerceListLines.length;\n }\n }\n const viewProps: IHeaderViewProps = {\n ...(this.props as IHeaderProps),\n ...this.state,\n logo: (\n \n ),\n wishListIconDesktop: (\n \n ),\n wishListIconMobile: (\n \n ),\n cartIcon: ArrayExtensions.hasElements(cartIconSlot) ? (\n cartIconSlot[0]\n ) : (\n \n ),\n navIcon: (\n \n ),\n menuBar: ArrayExtensions.hasElements(menuBarSlot) ? menuBarSlot : [],\n search: ArrayExtensions.hasElements(searchSlot) ? searchSlot : [],\n siteOptions: ArrayExtensions.hasElements(siteOptionsSlot) ? siteOptionsSlot : [],\n className: headerClassName,\n HeaderTag: {\n moduleProps: this.props,\n className: classnames(headerClassName),\n 'aria-label': this.props.resources.headerAriaLabel,\n tag: 'header'\n },\n HeaderContainer: {\n className: classnames('ms-header__container')\n },\n HeaderTopBarContainer: {\n className: classnames('ms-header__topbar')\n },\n Divider: {\n className: classnames('ms-header__divider')\n },\n MobileMenuContainer: {\n tag: Modal,\n id: navbarKey,\n className: 'ms-header__mobile-hamburger',\n isOpen: !this.state.mobileMenuCollapsed,\n wrapClassName: 'ms-header__modal',\n toggle: this._toggleNavbar\n },\n MobileMenuHeader: ,\n MobileMenuBodyContainer: {\n tag: ModalBody,\n className: 'ms-header__mobile-hamburger-menu-body'\n },\n MobileMenuLinksContainer: {\n className: 'ms-header__mobile-hamburger-menu-links'\n },\n AccountInfoDropdownParentContainer: {\n className: 'ms-header__account-info'\n },\n AccountInfoDropdownPopoverConentContainer: this.displayName\n ? {\n tag: Popover,\n id: 'myprofilePopover',\n className: 'ms-header__account-info-content',\n placement: 'bottom',\n isOpen: this.state.signinPopoverOpen,\n target: this.popOverRef,\n toggle: this._togglePopover\n }\n : undefined,\n signInLink: this._getSigninButton(user, this.props.resources),\n signOutLink: this._getSignOutButton(user, this.props.resources),\n isOBORequest: MsDyn365.isOboRequest(this.props.context.request),\n switchCustomerLink: this._getSwitchCustomerButton(user, this.props.resources),\n accountInfoDropdownButton: this._getAccountInfoDropdownButton(user, this.props.resources),\n accountLinks: this._getAccountLinks(customer),\n preferredStore: ArrayExtensions.hasElements(preferredStoreSlot) && ,\n currentDistributor: this.isB2BSite && ArrayExtensions.hasElements(currentDistributorSlot) ? currentDistributorSlot : undefined\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n /**\n * Handle link text change.\n * @param linkIndex - Link Index.\n * @returns : Void.\n */\n public handleLinkTextChange = (linkIndex: number) => (event: MsDyn365.ContentEditableEvent): void => {\n if (this.props.config.myAccountLinks?.[linkIndex]) {\n this.props.config.myAccountLinks[linkIndex].linkText = event.target.value;\n }\n };\n\n /**\n * Get the slot.\n * @param slotName - Name of the slot.\n * @returns The slot.\n */\n private _getSlot(slotName: string): React.ReactNode[] | null {\n const { slots } = this.props;\n return (slots && slots[slotName] && slots[slotName].length && slots[slotName]) || null;\n }\n\n /**\n * Renders the sign in button.\n * @param user - Request context user.\n * @param resources - Resources.\n * @returns React Node.\n */\n private _getSigninButton(user: MsDyn365.IRequestContextUser | undefined, resources: IHeaderResources): React.ReactNode | undefined {\n const payLoad = getPayloadObject('click', this.telemetryContent, TelemetryConstant.SignIn);\n const attributes = getTelemetryAttributes(this.telemetryContent, payLoad);\n return (\n !this.displayName && (\n \n \n {resources.signInLinkText}\n \n \n )\n );\n }\n\n /**\n * Renders the sign out button.\n * @param user - Request context user.\n * @param resources - Resources.\n * @returns React Node.\n */\n private _getSignOutButton(user: MsDyn365.IRequestContextUser | undefined, resources: IHeaderResources): React.ReactNode | undefined {\n const payLoad = getPayloadObject('click', this.telemetryContent, TelemetryConstant.SignOut);\n const attributes = getTelemetryAttributes(this.telemetryContent, payLoad);\n return (\n this.displayName && (\n \n \n {resources.signOutLinkText}\n \n \n )\n );\n }\n\n /**\n * Renders the sign out button.\n * @param user - Request context user.\n * @param resources - Resources.\n * @returns React Node.\n */\n private _getSwitchCustomerButton(\n user: MsDyn365.IRequestContextUser | undefined,\n resources: IHeaderResources\n ): React.ReactNode | undefined {\n const payLoad = getPayloadObject('click', this.telemetryContent, TelemetryConstant.SwitchCustomer);\n const attributes = getTelemetryAttributes(this.telemetryContent, payLoad);\n const isOBOAccountSelected =\n MsDyn365.isOboRequest(this.props.context.request) && this.props.context.request.cookies.getAccountSelectionCookie();\n return (\n this.displayName &&\n isOBOAccountSelected && (\n this.props.context.request.cookies.removeAccountSelectionCookie()}\n {...attributes}\n >\n
    \n
    {format(resources.shoppingAsText, this.customerName)}
    \n
    {resources.switchCustomerLinkText}
    \n
    \n \n )\n );\n }\n\n private getBusinessPartnerSelectionUrl(): string | undefined {\n const route = MsDyn365.getUrlSync('businessPartnerSelection', this.props.context.actionContext);\n if (!route || !MsDyn365.msdyn365Commerce.isBrowser) {\n return undefined;\n }\n\n // MsDyn365.getUrlSync persists some params in the route and remove other params.\n // Among the persisted params, we need to remove catalogid.\n const persistedParamToRemove = ['catalogid'];\n const url = new URL(route, window.location.href);\n persistedParamToRemove.forEach(param => url.searchParams.delete(param));\n return url.href;\n }\n\n private _getSigninNotification(\n user: MsDyn365.IRequestContextUser | undefined,\n signUpMultipleCustomerFoundTitle: string,\n signUpCustomerNotFoundTitle: string,\n signInCustomerNotAuthorizedTitle: string\n ): string | undefined {\n if (!user?.retailServerErrorCode) {\n return undefined;\n }\n\n const { signUpCustomerNotFound, signUpMultipleCustomerFound, signInCustomerNotAuthorized } = this.props.config;\n const notFoundError = 'Microsoft_Dynamics_Commerce_Runtime_CustomerNotFound_WhenAutoLinking';\n const multipleAccountError = 'Microsoft_Dynamics_Commerce_Runtime_MultipleCustomerAccountsFoundWithSameEmailAddress';\n const accountAuthorizationError = 'Microsoft_Dynamics_Commerce_Runtime_AuthorizationFailed';\n\n if (user?.retailServerErrorCode === notFoundError) {\n return signUpCustomerNotFound !== undefined ? signUpCustomerNotFound : signUpCustomerNotFoundTitle;\n } else if (user?.retailServerErrorCode === multipleAccountError) {\n return signUpMultipleCustomerFound !== undefined ? signUpMultipleCustomerFound : signUpMultipleCustomerFoundTitle;\n } else if (user?.retailServerErrorCode === accountAuthorizationError) {\n return signInCustomerNotAuthorized !== undefined ? signInCustomerNotAuthorized : signInCustomerNotAuthorizedTitle;\n }\n return user?.retailServerErrorMessage;\n }\n\n private _getAccountInfoDropdownButton(\n user: MsDyn365.IRequestContextUser | undefined,\n resources: IHeaderResources\n ): React.ReactNode | undefined {\n const payLoad = getPayloadObject('click', this.telemetryContent, TelemetryConstant.MyProfile);\n const attributes = getTelemetryAttributes(this.telemetryContent, payLoad);\n return (\n this.displayName && (\n \n
    \n
    {this.displayName}
    \n {MsDyn365.isOboRequest(this.props.context.request) && this.customerName && (\n
    {format(resources.shoppingAsText, this.customerName)}
    \n )}\n
    \n \n )\n );\n }\n\n private _getAccountLinks(customer: Customer | undefined): React.ReactNode[] | undefined {\n const { myAccountLinks } = this.props.config;\n const payLoad = getPayloadObject('click', this.telemetryContent, '');\n if (!this.displayName || !myAccountLinks || !ArrayExtensions.hasElements(myAccountLinks)) {\n return undefined;\n }\n return myAccountLinks.map((cta: IMyAccountLinksData, index: number) => {\n payLoad.contentAction.etext = cta.linkText;\n const attributes = getTelemetryAttributes(this.telemetryContent, payLoad);\n const editableLink: MsDyn365.ILinksData = {\n ariaLabel: cta.ariaLabel,\n className: 'ms-signin-info__account-link-button',\n linkText: cta.linkText,\n linkUrl: cta.linkUrl.destinationUrl,\n openInNewTab: cta.openInNewTab,\n role: 'link',\n additionalProperties: attributes\n };\n\n return (\n \n );\n });\n }\n\n private _toggleNavbar(): void {\n this.setState({\n mobileMenuCollapsed: !this.state.mobileMenuCollapsed\n });\n }\n\n private _togglePopover(): void {\n this.setState({\n signinPopoverOpen: !this.state.signinPopoverOpen\n });\n }\n\n private _keydown(event: KeyboardEvent): void {\n if (event.keyCode === KeyCodes.Escape) {\n this.setState({ mobileMenuCollapsed: true });\n }\n }\n}\n\nexport default Header;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IHeaderViewProps } from './header';\n\nconst headerView: React.FC = props => {\n const {\n HeaderTag,\n HeaderContainer,\n HeaderTopBarContainer,\n MobileMenuContainer,\n MobileMenuBodyContainer,\n MobileMenuLinksContainer,\n Divider\n } = props;\n return (\n \n \n \n {props.navIcon}\n {props.logo}\n {_renderReactFragment(props.search)}\n {props.preferredStore}\n {props.currentDistributor}\n {_renderDesktopAccountBlock(props)}\n {props.wishListIconDesktop}\n \n {props.cartIcon}\n {_renderReactFragment(props.siteOptions)}\n \n \n \n {props.MobileMenuHeader}\n {_renderReactFragment(props.menuBar)}\n \n {props.accountLinks ? props.accountLinks.map(link => link) : false}\n {props.siteOptions}\n {props.wishListIconMobile}\n {props.signInLink}\n {props.signOutLink}\n \n \n \n {_renderReactFragment(props.menuBar)}\n \n \n );\n};\n\nfunction _renderDesktopAccountBlock(props: IHeaderViewProps): JSX.Element | null {\n const {\n AccountInfoDropdownParentContainer,\n AccountInfoDropdownPopoverConentContainer,\n accountInfoDropdownButton,\n signOutLink,\n signInLink,\n accountLinks\n } = props;\n\n if (AccountInfoDropdownParentContainer) {\n if (AccountInfoDropdownPopoverConentContainer) {\n return (\n \n {accountInfoDropdownButton}\n \n {accountLinks ? accountLinks.map(link => link) : false}\n {signOutLink}\n \n \n );\n } else if (signInLink) {\n return {signInLink};\n }\n }\n props.context.telemetry.error('Header content is empty, module wont render.');\n return null;\n}\n\nfunction _renderReactFragment(items: React.ReactNode[]): JSX.Element | null {\n return (\n <>\n {items && items.length > 0\n ? items.map((slot: React.ReactNode, index: number) => {\n return {slot};\n })\n : null}\n \n );\n}\n\nexport default headerView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { PriceComponent } from '@msdyn365-commerce/components';\nimport { ICoreContext, ITelemetry } from '@msdyn365-commerce/core';\nimport { ICheckoutState, IGiftCardExtend } from '@msdyn365-commerce/global-state';\nimport { Cart, CartLine } from '@msdyn365-commerce/retail-proxy';\nimport { format } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nexport interface IInvoiceSummaryProps {\n orderTotalLabel: string;\n invoiceLabel: string;\n loyaltyLabel?: string;\n giftcardLabel?: string;\n context: ICoreContext;\n telemetry: ITelemetry;\n cart: Cart;\n id: string;\n typeName: string;\n freeText?: string;\n toBeCalculatedText?: string;\n checkoutState?: ICheckoutState;\n}\n\nexport interface IInvoiceSummaryLines {\n orderTotal: React.ReactNode;\n invoices: React.ReactNode;\n giftCard?: React.ReactNode;\n loyalty?: React.ReactNode;\n}\n\ninterface IInvoiceSummaryLineProps {\n label: string;\n context: ICoreContext;\n telemetry: ITelemetry;\n price?: number;\n freeText?: string;\n toBeCalculatedText?: string;\n id: string;\n typeName: string;\n cssLabel: string;\n}\n\nconst InvoiceSummaryLine: React.FC = ({\n price,\n label,\n context,\n id,\n typeName,\n toBeCalculatedText,\n freeText,\n cssLabel\n}) => {\n return (\n

    \n {label}\n {price || price === 0 ? (\n \n ) : (\n {toBeCalculatedText}\n )}\n

    \n );\n};\n\nconst _buildPaymentSummarySection = (\n props: IInvoiceSummaryProps,\n price: number | undefined,\n label: string,\n cssLabel: string\n): React.ReactNode => {\n return (\n \n );\n};\n\nconst _computedLoyaltyAmount = (checkoutState: ICheckoutState): number => {\n return (checkoutState && checkoutState.loyaltyAmount) || 0;\n};\n\nconst _computeGiftCardAmount = (checkoutState: ICheckoutState, cart: Cart): number => {\n const giftCardCounter = (count: number, giftCard: IGiftCardExtend) => {\n return count + (giftCard.Balance || 0);\n };\n const giftCardTotalValue = (checkoutState.giftCardExtends || []).reduce(giftCardCounter, 0);\n const amount = (cart.TotalAmount || 0) - _computedLoyaltyAmount(checkoutState);\n return Math.min(giftCardTotalValue, amount);\n};\n\nexport const InvoiceSummary = (props: IInvoiceSummaryProps) => {\n const { TotalAmount, CartLines } = props.cart;\n const invoiceLines = CartLines?.filter(cartLine => cartLine.IsInvoiceLine);\n const reactNodes: IInvoiceSummaryLines = {\n invoices: invoiceLines?.map((invoiceLine: CartLine) => {\n return _buildPaymentSummarySection(\n props,\n invoiceLine.InvoiceAmount,\n format(props.invoiceLabel, invoiceLine.InvoiceId),\n 'invoice'\n );\n }),\n orderTotal: _buildPaymentSummarySection(props, TotalAmount, props.orderTotalLabel, 'total')\n };\n\n if (props.checkoutState) {\n const giftCardAmount = _computeGiftCardAmount(props.checkoutState, props.cart);\n const loyaltyAmount = _computedLoyaltyAmount(props.checkoutState);\n const totalAmountAfterGiftCard = (TotalAmount || 0) - giftCardAmount - loyaltyAmount;\n\n if (loyaltyAmount > 0) {\n reactNodes.loyalty = _buildPaymentSummarySection(props, -loyaltyAmount, props.loyaltyLabel || 'Loyalty amount', 'loyalty');\n }\n\n if (giftCardAmount > 0) {\n reactNodes.giftCard = _buildPaymentSummarySection(\n props,\n -giftCardAmount,\n props.giftcardLabel || 'Gift card amount',\n 'gift-card'\n );\n }\n\n reactNodes.orderTotal = _buildPaymentSummarySection(\n { ...props, freeText: undefined },\n totalAmountAfterGiftCard,\n props.orderTotalLabel,\n 'total'\n );\n }\n\n return reactNodes;\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IImageData, IRequestContext, IVideoData } from '@msdyn365-commerce/core';\n\nexport enum MediaType {\n /**\n * The None.\n */\n None = 0,\n /**\n * The Image type.\n */\n Image = 1,\n /**\n * The video type.\n */\n Video = 2,\n /**\n * The file type.\n */\n File = 3\n}\n\nexport interface IMediaData extends IImageData {\n mediaTypeValue?: MediaType;\n displayOrder?: number;\n videoData?: IVideoData;\n}\n\n/**\n * Gets correct alt text for image based on configuration of site.\n * @param productName Product name.\n * @param context Current request context.\n * @param imageAltText Alt-text from CMS image.\n */\nexport function getAltText(\n context: IRequestContext,\n shouldUseCmsAltText: boolean,\n productName?: string,\n imageAltText?: string\n): string | undefined {\n if (!context?.app?.config?.OmniChannelMedia) {\n return productName;\n }\n if (shouldUseCmsAltText) {\n return imageAltText;\n }\n return productName;\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport {\n commerceApiRequest,\n commerceVideoMetadataRequest,\n getCatalogId,\n IActionContext,\n IImageData,\n IImageSettings,\n IVideoData\n} from '@msdyn365-commerce/core';\nimport { MediaLocation, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport {\n ArrayExtensions,\n getMediaLocationsForSelectedVariant,\n MediaLocationsForSelectedVariantInput\n} from '@msdyn365-commerce-modules/retail-actions';\nimport { getAltText } from './helper';\n\nasync function validateMediaLocationAsync(mediaLocation: MediaLocation): Promise<[IImageData, boolean]> {\n const imageData: IImageData = {\n src: mediaLocation.Uri || '',\n altText: mediaLocation.AltText || ''\n };\n if (mediaLocation.IsApplicableForChildEntities) {\n imageData.additionalProperties = { isApplicableForChildEntities: 'true' };\n }\n\n if (imageData.src === '') {\n return [imageData, false];\n }\n\n return new Promise<[IImageData, boolean]>(resolve => {\n try {\n const http = new XMLHttpRequest();\n http.open('HEAD', imageData.src!, true);\n\n http.addEventListener('load', () => {\n resolve([imageData, http.status === 200 || http.status === 201]);\n });\n\n http.addEventListener('error', () => {\n resolve([imageData, false]);\n });\n\n http.send();\n } catch {\n resolve([imageData, false]);\n }\n });\n}\n\nexport async function getValidProductImages(\n productId: number,\n channelId: number,\n actionContext: IActionContext,\n imageSettings: IImageSettings,\n selectedProduct?: SimpleProduct\n): Promise {\n const catalogId = getCatalogId(actionContext.requestContext);\n const actionInput = new MediaLocationsForSelectedVariantInput(productId, channelId, selectedProduct, catalogId);\n\n return getMediaLocationsForSelectedVariant(actionInput, actionContext)\n .then(mediaLocations => {\n if (mediaLocations) {\n return Promise.all(mediaLocations.map(mediaLocation => validateMediaLocationAsync(mediaLocation))).then(pairs => {\n return pairs.filter(pair => pair[1]).map(pair => pair[0]);\n });\n }\n\n return [];\n })\n .catch(error => {\n actionContext.telemetry.exception(error);\n actionContext.telemetry.debug('Unable to get Media Locations for Selected Variant');\n return [];\n });\n}\n\n/**\n * Gets product variant images on dimension change of buy-box module for Omni scenario.\n * @param productId Product record id.\n * @param shouldUseCmsAltText Alt-text source to use.\n * @param channelId Current channel id.\n * @param actionContext Current action context.\n * @param productName Product name.\n * @param selectedProduct Currently selected variant product.\n * @returns List of images.\n */\n\nexport async function getProductImages(\n productId: number,\n shouldUseCmsAltText: boolean,\n channelId: number,\n actionContext: IActionContext,\n productName?: string,\n selectedProduct?: SimpleProduct\n): Promise {\n const catalogId = getCatalogId(actionContext.requestContext);\n if (actionContext.requestContext?.params?.isPreview) {\n const response = await commerceApiRequest(actionContext.requestContext, 'msdyn365-ochannel-product-info', 'post', {\n productId: productId,\n channelId: channelId,\n catalogId: catalogId\n });\n if (response.status !== 200) {\n actionContext.telemetry.debug('Unable to get Media Locations for Selected Variant for preview scenario');\n return [];\n }\n const previewImageData = response?.data as MediaLocation[];\n if (previewImageData) {\n return previewImageData.map(mediaLocation => {\n return {\n src: mediaLocation.Uri ?? '',\n altText: getAltText(actionContext.requestContext, shouldUseCmsAltText, productName, mediaLocation.AltText),\n displayOrder: mediaLocation.DisplayOrder,\n mediaTypeValue: mediaLocation.MediaTypeValue,\n additionalProperties: mediaLocation.IsApplicableForChildEntities\n ? {\n isApplicableForChildEntities: 'true'\n }\n : undefined\n };\n });\n }\n return [];\n }\n const actionInput = new MediaLocationsForSelectedVariantInput(productId, channelId, selectedProduct, catalogId);\n return getMediaLocationsForSelectedVariant(actionInput, actionContext)\n .then(mediaLocations => {\n if (mediaLocations) {\n return mediaLocations.map(mediaLocation => {\n return {\n src: mediaLocation.Uri ?? '',\n altText: getAltText(actionContext.requestContext, shouldUseCmsAltText, productName, mediaLocation.AltText),\n displayOrder: mediaLocation.DisplayOrder,\n mediaTypeValue: mediaLocation.MediaTypeValue,\n additionalProperties: mediaLocation.IsApplicableForChildEntities\n ? {\n isApplicableForChildEntities: 'true'\n }\n : undefined\n };\n });\n }\n return [];\n })\n .catch(error => {\n actionContext.telemetry.exception(error);\n actionContext.telemetry.debug('Unable to get Media Locations for Selected Variant');\n return [];\n });\n}\n\nexport async function validateProductImages(\n mediaLocations: MediaLocation[],\n actionContext: IActionContext,\n imageSettings: IImageSettings\n): Promise {\n return Promise.all(mediaLocations.map(mediaLocation => validateMediaLocationAsync(mediaLocation)))\n .then(pairs => {\n return pairs.filter(pair => pair[1]).map(pair => pair[0]);\n })\n .catch(error => {\n actionContext.telemetry.exception(error);\n actionContext.telemetry.debug('Unable to validate product images');\n return [];\n });\n}\n\n/**\n * GetVideoMetadataFromAPI - Makes API call to get video metadata.\n * @param videoId: Video Id\n * @param actionContext: Action context\n * @returns: Returns the meta data of the video.\n */\nexport async function getVideoMetadataFromApi(videoId: string, actionContext: IActionContext): Promise {\n let videoPlayerData: IVideoData | undefined;\n if (videoId) {\n const response = await commerceVideoMetadataRequest(actionContext.requestContext, [videoId]);\n\n if (response.status !== 200) {\n actionContext.telemetry.debug(`Unable to get video metadata for videoId: ${videoId}`);\n return;\n }\n\n const videoData = response.data as [];\n if (videoData && ArrayExtensions.hasElements(videoData)) {\n videoPlayerData = videoData[0];\n }\n }\n return videoPlayerData;\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Carousel, ICarouselProps, Player, IPlayerData, IPlayerOptions, IVideoMetadata } from '@msdyn365-commerce/components';\nimport { IImageData, IImageSettings, Image, Video } from '@msdyn365-commerce/core';\nimport { MediaLocation, MediaType, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport { ArrayExtensions, getFallbackImageUrl, ObjectExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n defaultDataScale,\n IComponentNodeProps,\n ImagefullView,\n IModalViewProps,\n IModuleProps,\n inlineZoomImageOnHover,\n inlineZoomImageOnMouseMove,\n inlineZoomImageOnMouseOut,\n inlineZoomInitClick,\n INodeProps,\n ISingleSlideCarouselProps,\n isMobile,\n KeyCodes,\n NodeTag,\n onContainerZoomInit,\n onMouseMoveLensContainer,\n onMouseOutLensContainer,\n onMouseOverImageContainer,\n removeContainerZoomStyle,\n removeInlineZoomStyle,\n SingleSlideCarousel,\n VariantType\n} from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport { reaction } from 'mobx';\nimport * as React from 'react';\n\nimport { IMediaGalleryData } from './media-gallery.data';\nimport { imageSource, imageZoom, IMediaGalleryProps, thumbnailsOrientation } from './media-gallery.props.autogenerated';\nimport { getProductImages, getValidProductImages, getVideoMetadataFromApi, validateProductImages } from './utils';\nimport { getAltText, IMediaData } from './utils/helper';\n\n/**\n * IMediaGalleryState Interface.\n */\nexport interface IMediaGalleryState {\n animating: boolean;\n activeIndex: number;\n isImageZoomed: boolean;\n modalIsOpen: boolean;\n lastUpdate?: number;\n isMobileImageZoomed?: boolean;\n mediaGalleryItems?: IMediaData[];\n isInitialLoad?: boolean;\n shouldUseOptimizedImage?: boolean;\n}\n\n/**\n * IMediaGalleryThumbnailsViewProps Interface.\n */\nexport interface IMediaGalleryThumbnailsViewProps {\n ThumbnailsContainerProps: INodeProps;\n SingleSlideCarouselComponentProps: INodeProps;\n items?: IMediaGalleryThumbnailItemViewProps[];\n}\n\n/**\n * IMediaGalleryThumbnailItemViewProps Interface.\n */\nexport interface IMediaGalleryThumbnailItemViewProps {\n ThumbnailItemContainerProps: INodeProps;\n Picture: React.ReactElement;\n}\n\n/**\n * IMediaGalleryViewProps Interface.\n */\nexport interface IMediaGalleryViewProps extends IMediaGalleryProps {\n state: IMediaGalleryState;\n MediaGallery: IModuleProps;\n CarouselProps: INodeProps;\n Thumbnails: IMediaGalleryThumbnailsViewProps;\n Modal?: React.ReactElement | null;\n callbackToggle?(): void;\n callbackThumbnailClick?(index: number): void;\n callbackThumbnailKeyDown?(index: number): void;\n}\n\n/**\n * Props for carousel.\n */\ninterface IMediaGalleryCarouselItems {\n items: ItemType[];\n keys: (string | undefined)[];\n}\n\n/**\n * Media gallery component.\n */\nclass MediaGallery extends React.Component, IMediaGalleryState> {\n private readonly _inlineZoomDivRef: Map = new Map();\n\n private readonly fullScreenOverlayButtonRef: React.RefObject = React.createRef();\n private readonly player: React.RefObject = React.createRef();\n private fallbackImage?: string;\n\n private readonly defaultGalleryImageSettings: IImageSettings = {\n viewports: {\n xs: { q: 'w=767&h=767&m=8', w: 0, h: 0 },\n sm: { q: 'w=600&h=600&m=8', w: 0, h: 0 },\n md: { q: 'w=600&h=772&m=8', w: 0, h: 0 },\n lg: { q: 'h=772&m=8', w: 0, h: 0 }\n },\n lazyload: true,\n cropFocalRegion: true\n };\n\n private readonly defaultThumbnailImageSettings: IImageSettings = {\n viewports: {\n xs: { q: 'w=100&m=8', w: 100, h: 0 },\n lg: { q: 'w=100&m=8', w: 100, h: 0 }\n },\n lazyload: true,\n cropFocalRegion: true\n };\n\n private readonly _zoomedImageSettings: IImageSettings;\n\n public constructor(props: IMediaGalleryProps) {\n super(props);\n this._toggleModal = this._toggleModal.bind(this);\n const mediaGalleryImages = this.getImagesData();\n this.state = {\n activeIndex: 0,\n animating: false,\n isImageZoomed: false,\n modalIsOpen: false,\n isInitialLoad: true,\n shouldUseOptimizedImage: !!this.props.config.skipImageValidation,\n mediaGalleryItems: mediaGalleryImages\n };\n\n this._zoomedImageSettings =\n props.config.zoomedImageSettings ?? props.config.galleryImageSettings ?? this.defaultGalleryImageSettings;\n\n this._onImageMouseOut = this._onImageMouseOut.bind(this);\n this._inlineZoomImageOnHover = this._inlineZoomImageOnHover.bind(this);\n this._onInlineImageClick = this._onInlineImageClick.bind(this);\n this._onContainerZoomImageClick = this._onContainerZoomImageClick.bind(this);\n this._onMouseOutLensContainer = this._onMouseOutLensContainer.bind(this);\n }\n\n public isMobile(): boolean {\n const size = isMobile({ variant: VariantType.Viewport, context: this.props.context.request });\n return size === 'xs';\n }\n\n public async componentDidMount(): Promise {\n const source = this.props.config.imageSource ?? imageSource.pageContext;\n const shouldUpdateOnPartialDimensionSelection = this.props.config.shouldUpdateOnPartialDimensionSelection;\n this._setRenderType();\n if (!this.props.context.request.app?.config?.OmniChannelMedia) {\n if (source === imageSource.pageContext) {\n if (this.state.mediaGalleryItems === undefined && this.props.data.mediaLocationsForSelectedVariant.result) {\n const images = await validateProductImages(\n this.props.data.mediaLocationsForSelectedVariant.result,\n this.props.context.actionContext,\n this.props.config.thumbnailImageSettings ?? this.defaultThumbnailImageSettings\n );\n await this._setImages(images);\n } else if (this.state.mediaGalleryItems === undefined && this.props.data.product.result) {\n const product = this.props.data.product.result;\n const images = await getValidProductImages(\n product.RecordId,\n +this.props.context.request.apiSettings.channelId,\n this.props.context.actionContext,\n this.props.config.thumbnailImageSettings ?? this.defaultThumbnailImageSettings,\n product.productVariant\n );\n\n await this._setImages(images);\n } else {\n await this._setImages([]);\n }\n }\n }\n\n reaction(\n () => {\n const product = this.props.data.product.result;\n if (!product) {\n return null;\n }\n\n if (!shouldUpdateOnPartialDimensionSelection || !product.productVariant?.RecordId) {\n return `${product.RecordId}`;\n }\n\n return `${product.RecordId}-${product.productVariant.RecordId}`;\n },\n async () => {\n const product = this.props.data.product.result;\n let images: IImageData[] = [];\n if (product) {\n if (this.props.context.app?.config?.OmniChannelMedia) {\n images = await getProductImages(\n product.RecordId,\n this.shouldUseCmsAltText(),\n +this.props.context.request.apiSettings.channelId,\n this.props.context.actionContext,\n product.Name,\n shouldUpdateOnPartialDimensionSelection ? product.productVariant : undefined\n );\n } else {\n images = await getValidProductImages(\n product.RecordId,\n +this.props.context.request.apiSettings.channelId,\n this.props.context.actionContext,\n this.props.config.thumbnailImageSettings ?? this.defaultThumbnailImageSettings,\n shouldUpdateOnPartialDimensionSelection ? product.productVariant : undefined\n );\n }\n await this._setImages(images);\n } else {\n await this._setImages([]);\n }\n },\n { fireImmediately: true }\n );\n\n if (source === imageSource.productId && this.props.data.mediaLocations.result) {\n const images = await validateProductImages(\n this.props.data.mediaLocations.result,\n this.props.context.actionContext,\n this.props.config.thumbnailImageSettings ?? this.defaultThumbnailImageSettings\n );\n await this._setImages(images);\n }\n }\n\n public shouldComponentUpdate(nextProps: IMediaGalleryProps, nextState: IMediaGalleryState): boolean {\n if (this.state === nextState && this.props.data === nextProps.data) {\n return false;\n }\n return true;\n }\n\n public render(): JSX.Element {\n const { id, config, resources } = this.props;\n\n const { className, showPaginationTooltip } = config;\n\n const isVertical: boolean = config.thumbnailsOrientation === thumbnailsOrientation.vertical;\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing -- || is required.\n const isFullscreenAllowed: boolean = this.isMobile() || config.allowFullScreen || false;\n const zoomViewMode: string =\n config.imageZoom === imageZoom.inline ? imageZoom.inline : config.imageZoom === imageZoom.container ? imageZoom.container : '';\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- Site level config can be of any type.\n const emptyPlaceHolderImage = this.props.context.app.config?.placeholderImageName as string;\n if (this.props.data.product.result) {\n this.fallbackImage = getFallbackImageUrl(\n this.props.data.product.result.ItemId,\n this.props.context.request.apiSettings,\n this.props.context.request.app?.config?.OmniChannelMedia\n );\n }\n if (emptyPlaceHolderImage && this.fallbackImage) {\n this.fallbackImage = `${this.fallbackImage},${emptyPlaceHolderImage}`;\n }\n\n const mediaGalleryCarouselItems = this._getMediaGalleryItems(isFullscreenAllowed, zoomViewMode);\n const mediaGalleryThumbnailCarouselItems = this._getMediaGalleryThumbnailItems();\n const viewProps: IMediaGalleryViewProps = {\n ...(this.props as IMediaGalleryProps),\n state: this.state,\n MediaGallery: {\n moduleProps: this.props,\n className: classnames(`ms-media-gallery ${isVertical ? 'vertical' : ''}`, className)\n },\n Modal: isFullscreenAllowed ? this.imageModalSlider(zoomViewMode) : null,\n callbackToggle: this.openModalDialog,\n callbackThumbnailClick: this._generateOnThumbnailClick,\n callbackThumbnailKeyDown: this._generateOnThumbnailKeyDown,\n CarouselProps: {\n tag: Carousel,\n className: 'ms-media-gallery__carousel',\n items: mediaGalleryCarouselItems.items,\n activeIndex: this.state.activeIndex,\n next: this.next,\n previous: this.previous,\n interval: false,\n directionTextPrev: resources.previousScreenshotFlipperText,\n directionTextNext: resources.nextScreenshotFlipperText,\n onIndicatorsClickHandler: this.goToIndex,\n showPaginationTooltip: showPaginationTooltip === true,\n indicatorAriaText: resources.ariaLabelForSlide,\n handleOnExited: this.onExited,\n handleOnExiting: this.onExiting,\n key: mediaGalleryCarouselItems.keys\n } as IComponentNodeProps,\n Thumbnails: {\n ThumbnailsContainerProps: { className: 'ms-media-gallery__thumbnails-container' },\n SingleSlideCarouselComponentProps: {\n tag: SingleSlideCarousel,\n className: 'ms-media-gallery__thumbnails',\n vertical: isVertical,\n flipperPrevLabel: resources.previousScreenshotFlipperText,\n flipperNextLabel: resources.nextScreenshotFlipperText,\n parentId: id,\n useTabList: true,\n key: JSON.stringify(mediaGalleryThumbnailCarouselItems.keys)\n } as IComponentNodeProps,\n items: mediaGalleryThumbnailCarouselItems.items\n }\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n /**\n * Zoomed out image on previous/next click.\n */\n public updateZoomedInImage(): void {\n this.setState({ isImageZoomed: false });\n }\n\n private readonly onExiting = () => {\n this.setState({ animating: true });\n };\n\n private readonly onExited = () => {\n this.setState({ animating: false });\n };\n\n /**\n * On click next in carousel.\n */\n private readonly next = (): void => {\n removeInlineZoomStyle();\n if (this.isLastItem() === undefined) {\n return;\n }\n\n const nextIndex = this.isLastItem() ? 0 : this.state.activeIndex + 1;\n this.goToIndex(nextIndex);\n\n this.updateZoomedInImage();\n };\n\n /**\n * On click previous in carousel.\n */\n private readonly previous = (): void => {\n removeInlineZoomStyle();\n const images = this.state.mediaGalleryItems;\n const nextIndex = this.isFirstItem() ? (images ? images.length - 1 : 0) : this.state.activeIndex - 1;\n this.goToIndex(nextIndex);\n this.updateZoomedInImage();\n };\n\n private readonly goToIndex = (index: number): void => {\n const { autoplay } = this.props.config;\n const currentIndex = this.state.activeIndex;\n const mediaItems = this.state.mediaGalleryItems;\n if (autoplay && mediaItems) {\n if (mediaItems[`${index}`]?.mediaTypeValue === MediaType.Video) {\n this.player.current?.play();\n } else if (mediaItems[`${currentIndex}`].mediaTypeValue === MediaType.Video) {\n this.player.current?.pause();\n }\n }\n this.setState({ activeIndex: index });\n };\n\n private _getMediaGalleryThumbnailItems(): IMediaGalleryCarouselItems {\n const mediaGalleryItems = this.state.mediaGalleryItems;\n const thumbnailImageSettings = this.props.config.thumbnailImageSettings;\n if (thumbnailImageSettings) {\n thumbnailImageSettings.cropFocalRegion = true;\n }\n\n const hasMediaGalleryItems = ArrayExtensions.hasElements(mediaGalleryItems);\n\n if (!hasMediaGalleryItems) {\n if (this.state.lastUpdate) {\n const defaultKey = 0;\n return {\n items: [this._getEmptyThumbnailItem(thumbnailImageSettings, defaultKey, this.state.activeIndex)],\n keys: ['empty']\n };\n }\n return { items: [], keys: [] };\n }\n\n return {\n items: [\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion\n ...mediaGalleryItems!.map((item: IMediaData, index: number) => {\n if (item.mediaTypeValue === MediaType.Video) {\n return this.getVideoThumbNailItem(\n item,\n thumbnailImageSettings ?? this.defaultThumbnailImageSettings,\n index,\n this.state.activeIndex\n );\n } else {\n return this._getThumbnailItem(\n item,\n thumbnailImageSettings ?? this.defaultThumbnailImageSettings,\n index,\n this.state.activeIndex\n );\n }\n })\n ],\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion\n keys: [...mediaGalleryItems!.map(item => item.src)]\n };\n }\n\n private getImagesData = (): IImageData[] => {\n if (this.props.config.skipImageValidation || this.props.context.request.app?.config?.OmniChannelMedia) {\n const source = this.props.config.imageSource ?? imageSource.pageContext;\n let images: IImageData[] = [];\n let mediaLocations: MediaLocation[] = [];\n if (source === imageSource.pageContext && this.props.data.mediaLocationsForSelectedVariant.result) {\n mediaLocations = this.props.data.mediaLocationsForSelectedVariant.result;\n } else if (source === imageSource.productId && this.props.data.mediaLocations.result) {\n mediaLocations = this.props.data.mediaLocations.result;\n }\n images = mediaLocations.map(mediaLocation => {\n return {\n src: mediaLocation.Uri ?? '',\n altText: getAltText(\n this.props.context.actionContext.requestContext,\n this.shouldUseCmsAltText(),\n this.props.data.product.result?.Name,\n mediaLocation.AltText\n ),\n additionalProperties: mediaLocation.IsApplicableForChildEntities\n ? {\n isApplicableForChildEntities: 'true'\n }\n : undefined\n };\n });\n const curatedImages = this.props.config.images ?? [];\n\n return [...this._filterMasterImageFromVariant(images), ...curatedImages];\n }\n return [];\n };\n\n private _getMediaGalleryItems(isFullscreenAllowed: boolean, zoomViewMode: string): IMediaGalleryCarouselItems {\n const mediaGalleryItems = this.state.mediaGalleryItems;\n const galleryImageSettings = this.props.config.galleryImageSettings;\n if (galleryImageSettings) {\n galleryImageSettings.cropFocalRegion = true;\n }\n\n const zoomView = isFullscreenAllowed ? 'fullscreen' : zoomViewMode;\n\n const hasMediaGalleryItems = ArrayExtensions.hasElements(mediaGalleryItems);\n\n if (!hasMediaGalleryItems) {\n if (this.state.lastUpdate) {\n return { items: [this._renderEmptyImage(galleryImageSettings)], keys: ['empty'] };\n }\n return { items: [], keys: [] };\n }\n\n return {\n items: [\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion\n ...mediaGalleryItems!.map((item: IMediaData, index: number) => {\n return this._renderCarouselItemImageView(\n zoomView,\n item,\n galleryImageSettings ?? this.defaultGalleryImageSettings,\n index\n );\n })\n ],\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion\n keys: [...mediaGalleryItems!.map(item => item.src)]\n };\n }\n\n private async _setImages(images?: IMediaData[]): Promise {\n const curatedImage = this.props.config.images || [];\n const mediaToSet: IMediaData[] = this._filterMasterImageFromVariant(images);\n\n void Promise.all(\n mediaToSet.map(async mediaData => {\n if (mediaData.mediaTypeValue === MediaType.Video && mediaData.src) {\n try {\n const url = new URL(mediaData.src);\n const videoId = url.searchParams.get('CVID');\n if (videoId) {\n mediaData.videoData = await getVideoMetadataFromApi(videoId, this.props.context.actionContext);\n }\n } catch (error) {\n if (this.props.telemetry) {\n this.props.telemetry.debug('Error while fetching videoId');\n }\n }\n }\n return mediaData;\n })\n ).then(mediaData => {\n const mediaItems = mediaData.filter(element => {\n return (\n element.mediaTypeValue !== MediaType.Video ||\n (element.mediaTypeValue === MediaType.Video && element.videoData !== undefined)\n );\n });\n\n this.setState({\n mediaGalleryItems: [...mediaItems, ...curatedImage],\n activeIndex: 0,\n lastUpdate: Date.now(),\n shouldUseOptimizedImage: false\n });\n });\n\n this.setState({\n mediaGalleryItems: [...mediaToSet, ...curatedImage],\n activeIndex: 0,\n lastUpdate: Date.now(),\n shouldUseOptimizedImage: false\n });\n }\n\n private _setRenderType(): void {\n this.setState({\n isInitialLoad: false\n });\n }\n\n private _renderCarouselItemImageView(\n zoomView: string,\n media: IMediaData,\n imageSettings: IImageSettings,\n index: number,\n isInPopup: boolean = false\n ): React.ReactNode {\n if (media.mediaTypeValue === MediaType.Video) {\n if (isInPopup || zoomView !== 'fullscreen') {\n return <>{this._renderCarouselItemVideo(media, index, imageSettings)};\n }\n return <>{this._renderVideoThumbnail(media, index, imageSettings)};\n } else {\n if (this.isMobile()) {\n if (isInPopup) {\n return this._renderImageInContainerOnZoom(media, this._zoomedImageSettings, index);\n }\n return this._renderImageFullScreenOnZoom(media, imageSettings, index);\n }\n\n switch (zoomView) {\n case 'container': {\n return this._renderImageInContainerOnZoom(media, this._zoomedImageSettings, index);\n }\n case 'inline': {\n return this._renderImageInlineOnZoom(media, this._zoomedImageSettings, index);\n }\n case 'fullscreen': {\n return this._renderImageFullScreenOnZoom(media, imageSettings, index);\n }\n\n // No default\n }\n return <>{this._getCarouselItem(media, imageSettings, index, isInPopup)};\n }\n }\n\n private _filterMasterImageFromVariant(images?: IImageData[]): IImageData[] {\n const shouldHidePrimaryImages = this.props.config.shouldHideMasterProductImagesForVariant ?? true;\n let variantImages = images ?? [];\n const isVariantProduct =\n !ObjectExtensions.isNullOrUndefined(this.props.data.product.result?.MasterProductId) ||\n !ObjectExtensions.isNullOrUndefined(this.props.data.product.result?.productVariant);\n const itemId = this.props.data.product.result?.ItemId;\n if (shouldHidePrimaryImages && isVariantProduct && itemId) {\n variantImages = variantImages.filter(item => {\n const isApplicableForChildEntities = item.additionalProperties?.isApplicableForChildEntities;\n return !isApplicableForChildEntities;\n });\n if (!ArrayExtensions.hasElements(variantImages)) {\n variantImages = images ?? [];\n }\n }\n return variantImages;\n }\n\n private readonly _renderCarouselItemVideo = (mediaData: IMediaData, index: number, imageSettings: IImageSettings): React.ReactNode => {\n const videoData = mediaData.videoData;\n if (videoData) {\n const options: IPlayerOptions = this.props.config as IPlayerOptions;\n const playerResources = this.props.resources;\n const videoMetaData: IVideoMetadata = {};\n videoMetaData.videoId = videoData.id;\n videoMetaData.title = videoData.title;\n videoMetaData.duration = videoData.playTime;\n if (videoData.thumbnail) {\n videoMetaData.posterframeUrl = videoData.thumbnail.src;\n }\n if (videoData._links?.binaryReferences) {\n videoMetaData.videoBinaryReferences = videoData._links.binaryReferences;\n }\n const videoPlayerData: IPlayerData = { options, metaData: videoMetaData };\n const attributes = {\n id: `${this.props.id}__carousel-item__${index}`\n };\n return (\n \n );\n }\n return this._renderEmptyImage(imageSettings);\n };\n\n private readonly _getCarouselItem = (\n image: IImageData,\n imageSettings: IImageSettings,\n index: number,\n isInPopup: boolean = false\n ): React.ReactNode => (\n \n );\n\n private readonly _getThumbnailItem = (\n image: IImageData,\n imageSettings: IImageSettings,\n index: number,\n modifiedActiveIndex: number\n ): IMediaGalleryThumbnailItemViewProps => {\n const classes = classnames(\n 'ms-media-gallery__thumbnail-item',\n modifiedActiveIndex === index ? 'ms-media-gallery__thumbnail-item-active' : ''\n );\n\n return {\n ThumbnailItemContainerProps: {\n tag: 'li' as NodeTag,\n className: classes,\n role: 'tab',\n tabIndex: 0,\n key: index,\n 'aria-label': image.altText,\n 'aria-selected': modifiedActiveIndex === index,\n onClick: this._generateOnThumbnailClick(index),\n onKeyDown: this._generateOnThumbnailKeyDown(index)\n },\n Picture: (\n \n )\n };\n };\n\n /**\n * Gets the video thumbnail item to display media gallery.\n * @param props - The Media gallery view props from business layer.\n * @returns Return thumbnail view props which will be used to render video.\n */\n private readonly getVideoThumbNailItem = (\n mediaData: IMediaData,\n imageSettings: IImageSettings,\n index: number,\n modifiedActiveIndex: number\n ): IMediaGalleryThumbnailItemViewProps => {\n const classes = classnames(\n 'ms-media-gallery__thumbnail-item',\n modifiedActiveIndex === index ? 'ms-media-gallery__thumbnail-item-active' : ''\n );\n\n const videoData = mediaData.videoData;\n let image: IImageData;\n if (videoData?.thumbnail) {\n image = videoData.thumbnail;\n } else {\n image = {\n src: 'empty'\n };\n }\n\n return {\n ThumbnailItemContainerProps: {\n tag: 'li' as NodeTag,\n className: classes,\n role: 'tab',\n tabIndex: 0,\n key: index,\n 'aria-label': image.altText,\n 'aria-selected': modifiedActiveIndex === index,\n onClick: this._generateOnThumbnailClick(index),\n onKeyDown: this._generateOnThumbnailKeyDown(index)\n },\n Picture: (\n \n )\n };\n };\n\n /**\n * Ref Handler.\n * @param index -Remove item click function.\n * @returns Set inline zoom.\n */\n private readonly _refHandler = (index: number) => (divRef: HTMLDivElement) => {\n this._inlineZoomDivRef.set(index, divRef);\n };\n\n private readonly _generateOnThumbnailKeyDown = (index: number) => {\n return (event: React.KeyboardEvent) => {\n if (event.which === KeyCodes.Enter || event.which === KeyCodes.Space) {\n event.preventDefault();\n\n this.goToIndex(index);\n }\n };\n };\n\n private readonly _generateOnThumbnailClick = (index: number) => {\n return (event: React.MouseEvent) => {\n event.preventDefault();\n\n this.goToIndex(index);\n };\n };\n\n private _renderImageInlineOnZoom(image: IImageData, imageSettings: IImageSettings, index: number): React.ReactNode {\n return (\n \n \n \n
    \n );\n }\n\n private _inlineZoomImageOnHover(event: React.MouseEvent): void {\n inlineZoomImageOnHover(event, this.props.config.dataScale ?? String(defaultDataScale));\n }\n\n private _handleMobileViewZoomedImageClick(event: React.MouseEvent) {\n const target = this.state.shouldUseOptimizedImage ? (event.target as HTMLImageElement) : event.currentTarget;\n const mobileZoomedInImageClassName = 'msc-mobile-zoomed-in';\n if (!this.state.isMobileImageZoomed) {\n const bounds = target.getBoundingClientRect();\n const dataScale = Number(this.props.config.dataScale ?? defaultDataScale);\n\n const positionX = event.clientX - bounds.left;\n const positionY = event.clientY - bounds.top;\n const scaledPositionX = positionX * dataScale;\n const scaledPositionY = positionY * dataScale;\n\n target.style.transform = `scale(${dataScale})`;\n target.classList.add(mobileZoomedInImageClassName);\n target.parentElement!.style.overflow = 'auto';\n target.parentElement!.scrollTo(scaledPositionX - positionX, scaledPositionY - positionY);\n this.setState({\n isMobileImageZoomed: true\n });\n } else {\n target.style.transform = '';\n target.classList.remove(mobileZoomedInImageClassName);\n target.parentElement!.style.overflow = '';\n this.setState({\n isMobileImageZoomed: false\n });\n }\n }\n\n private _onInlineImageClick(event: React.MouseEvent): void {\n if (window.innerWidth <= 768) {\n // $msv-breakpoint-m\n this._handleMobileViewZoomedImageClick(event);\n return;\n }\n inlineZoomInitClick(event, this.props.config.dataScale ?? String(defaultDataScale));\n this.setState({\n isImageZoomed: true\n });\n }\n\n private _onImageMouseOut(event: React.MouseEvent): void {\n inlineZoomImageOnMouseOut(event);\n this.setState({\n isImageZoomed: false\n });\n }\n\n private _onContainerZoomImageClick(event: React.MouseEvent): void {\n if (window.innerWidth <= 768) {\n // $msv-breakpoint-m\n this._handleMobileViewZoomedImageClick(event);\n return;\n }\n\n onContainerZoomInit(event);\n\n this.setState({\n isImageZoomed: true\n });\n }\n\n private _onMouseOutLensContainer(event: React.MouseEvent): void {\n onMouseOutLensContainer(event);\n\n this.setState({\n isImageZoomed: false\n });\n }\n\n private _renderImageInContainerOnZoom(image: IImageData, imageSettings: IImageSettings, index: number): React.ReactNode {\n return (\n
    \n \n \n
    \n );\n }\n\n private _renderImageFullScreenOnZoom(image: IImageData, imageSettings: IImageSettings, index: number): React.ReactNode {\n return (\n
    \n \n
    \n {}\n \n
    \n
    \n );\n }\n\n /**\n * Render the video thumbnail in full screen.\n * @param mediaData - Media Data.\n * @param index - Index\n * @param imageSettings - Image settings.\n * @returns - JSX.Element\n */\n private readonly _renderVideoThumbnail = (mediaData: IMediaData, index: number, imageSettings: IImageSettings): React.ReactNode => {\n const videoData = mediaData.videoData;\n let image: IImageData;\n if (videoData?.thumbnail) {\n image = videoData.thumbnail;\n } else {\n image = {\n src: 'empty'\n };\n }\n\n return (\n
    \n \n
    \n {}\n \n
    \n
    \n );\n };\n\n private _mapProductToImageData(product: SimpleProduct): IImageData {\n return {\n src: product.PrimaryImageUrl ?? ''\n };\n }\n\n private _renderEmptyImage(imageSettings: IImageSettings | undefined): React.ReactNode {\n return (\n
    \n \n
    \n );\n }\n\n private _getEmptyThumbnailItem(\n imageSettings: IImageSettings | undefined,\n index: number,\n modifiedActiveIndex: number\n ): IMediaGalleryThumbnailItemViewProps {\n const classes = classnames(\n 'ms-media-gallery__thumbnail-item',\n modifiedActiveIndex === index ? 'ms-media-gallery__thumbnail-item-active' : ''\n );\n return {\n ThumbnailItemContainerProps: {\n tag: 'li' as NodeTag,\n className: classes,\n role: 'tab',\n tabIndex: 0,\n key: 'empty',\n 'aria-label': '',\n 'aria-selected': modifiedActiveIndex === index,\n onClick: this._generateOnThumbnailClick(index),\n onKeyDown: this._generateOnThumbnailKeyDown(index)\n },\n Picture: (\n \n )\n };\n }\n\n private readonly isFirstItem = () => this.state.activeIndex === 0;\n\n private readonly isLastItem = () => {\n const images = this.state.mediaGalleryItems;\n return images && this.state.activeIndex === images.length - 1;\n };\n\n private readonly openModalDialog = (): void => {\n this._toggleModal();\n };\n\n private _toggleModal(): void {\n if (this.state.modalIsOpen) {\n this.fullScreenOverlayButtonRef.current?.focus();\n const parentDiv = this._inlineZoomDivRef.get(this.state.activeIndex);\n if (parentDiv && parentDiv.children && parentDiv.children.length >= 2) {\n const image = parentDiv.children[1].querySelector('img');\n if (image) {\n image.removeAttribute('style');\n }\n }\n this.setState({\n isImageZoomed: false\n });\n }\n this.setState({\n isImageZoomed: false,\n modalIsOpen: !this.state.modalIsOpen\n });\n removeInlineZoomStyle();\n removeContainerZoomStyle();\n }\n\n private readonly imageModalSlider = (ZoomView: string): React.ReactElement => {\n const {\n data: {\n product: { result: product }\n },\n resources\n } = this.props;\n let mediaGalleryItems = this.state.mediaGalleryItems;\n\n if (!mediaGalleryItems && product) {\n mediaGalleryItems = [this._mapProductToImageData(product)];\n }\n const carouselprops = {\n tag: Carousel,\n className: 'ms-media-gallery__carousel',\n items:\n mediaGalleryItems &&\n mediaGalleryItems.map((item: IImageData, index: number) =>\n this._renderCarouselItemImageView(ZoomView, item, this._zoomedImageSettings, index, true)\n ),\n activeIndex: this.state.activeIndex,\n next: this.next,\n previous: this.previous,\n interval: false,\n directionTextPrev: resources.previousScreenshotFlipperText,\n directionTextNext: resources.nextScreenshotFlipperText,\n onIndicatorsClickHandler: this.goToIndex,\n showPaginationTooltip: true,\n hideIndicator: false,\n keyboard: false,\n handleOnExited: this.onExited,\n handleOnExiting: this.onExiting,\n isDisabledFunctionality: this.state.isMobileImageZoomed\n } as IComponentNodeProps;\n const carousel = ;\n\n const imageModalSliderProps: IModalViewProps = {\n modalIsOpen: this.state.modalIsOpen,\n ontoggle: this._toggleModal,\n galleryCarousel: carousel,\n classNames: classnames('ms-media-gallery__modal', 'msc-modal-input-required')\n };\n return ImagefullView(imageModalSliderProps) as React.ReactElement;\n };\n\n private shouldUseCmsAltText = (): boolean => {\n if (this.props.config.altTextSource === 'product') {\n return false;\n } else {\n return true;\n }\n };\n}\n\nexport default MediaGallery;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IMediaGalleryThumbnailItemViewProps, IMediaGalleryThumbnailsViewProps, IMediaGalleryViewProps } from '../..';\n\nconst MediaGalleryView: React.FC = props => {\n const { CarouselProps, Thumbnails, MediaGallery, Modal } = props;\n\n return (\n \n \n {Modal}\n {_renderThumbnails(Thumbnails)}\n \n );\n};\n\nconst _renderThumbnails = (thumbnails: IMediaGalleryThumbnailsViewProps): JSX.Element => {\n const { ThumbnailsContainerProps, SingleSlideCarouselComponentProps, items } = thumbnails;\n\n return (\n \n {items && items.map(_renderThumbnailItem)}\n \n );\n};\n\nconst _renderThumbnailItem = (thumbnail: IMediaGalleryThumbnailItemViewProps): JSX.Element => {\n const { ThumbnailItemContainerProps, Picture } = thumbnail;\n\n return {Picture};\n};\n\nexport default MediaGalleryView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { PriceComponent } from '@msdyn365-commerce/components';\nimport { ICoreContext, ITelemetry } from '@msdyn365-commerce/core';\nimport { ICheckoutState, IGiftCardExtend } from '@msdyn365-commerce/global-state';\nimport { Cart, ChannelConfiguration, ChannelDeliveryOptionConfiguration } from '@msdyn365-commerce/retail-proxy';\nimport * as React from 'react';\n\nexport interface IOrderSummaryProps {\n subTotalLabel: string;\n shippingLabel: string;\n taxLabel: string;\n orderTotalLabel: string;\n loyaltyLabel?: string;\n giftcardLabel?: string;\n totalDiscountsLabel: string;\n context: ICoreContext;\n telemetry: ITelemetry;\n cart: Cart;\n channelConfiguration: ChannelConfiguration;\n id: string;\n typeName: string;\n otherChargeLabel?: string;\n freeText?: string;\n toBeCalculatedText?: string;\n checkoutState?: ICheckoutState;\n retailMultiplePickUpOptionEnabled?: boolean;\n channelDeliveryOptionConfig?: ChannelDeliveryOptionConfiguration;\n isTaxIncludedInPrice?: boolean;\n isShowTaxBreakup?: boolean;\n customerAccountLabel?: string;\n}\n\nexport interface IOrderSummaryLines {\n subtotal: React.ReactNode;\n shipping?: React.ReactNode;\n otherCharge?: React.ReactNode;\n tax: React.ReactNode;\n orderTotal: React.ReactNode;\n totalDiscounts?: React.ReactNode;\n giftCard?: React.ReactNode;\n loyalty?: React.ReactNode;\n customerAccount?: React.ReactNode;\n}\n\ninterface IOrderSummaryLineProps {\n label: string;\n context: ICoreContext;\n telemetry: ITelemetry;\n price?: number;\n freeText?: string;\n toBeCalculatedText?: string;\n id: string;\n typeName: string;\n cssLabel: string;\n priceCurrency?: string;\n}\n\ninterface IShippingOrderLine {\n cart: Cart;\n channelConfiguration: ChannelConfiguration;\n canShip?: boolean;\n hasDeliveryMethod?: boolean;\n hasShippingMethod?: boolean;\n freightFee?: number;\n}\n\nconst OrderSummaryLine: React.FC = ({\n price,\n label,\n context,\n id,\n typeName,\n toBeCalculatedText,\n freeText,\n cssLabel,\n priceCurrency\n}) => {\n return (\n

    \n {label}\n {price || price === 0 ? (\n \n ) : (\n {toBeCalculatedText}\n )}\n

    \n );\n};\n\nconst _buildOrderSummarySection = (\n props: IOrderSummaryProps,\n price: number | undefined,\n cssLabel: string,\n label: string = ''\n): React.ReactNode => {\n return (\n \n );\n};\n\nconst _computedLoyaltyAmount = (checkoutState: ICheckoutState): number => {\n return (checkoutState && checkoutState.loyaltyAmount) || 0;\n};\n\nconst _computedCustomerAccountAmount = (checkoutState: ICheckoutState): number => {\n return (checkoutState && checkoutState.customerAccountAmount) || 0;\n};\n\nconst _computeGiftCardAmount = (checkoutState: ICheckoutState, cart: Cart): number => {\n const giftCardCounter = (count: number, giftCard: IGiftCardExtend) => {\n return count + (giftCard.Balance || 0);\n };\n const giftCardTotalValue = (checkoutState.giftCardExtends || []).reduce(giftCardCounter, 0);\n const amount = (cart.TotalAmount || 0) - _computedLoyaltyAmount(checkoutState);\n return Math.min(giftCardTotalValue, amount);\n};\n\nconst getDeliveryConfiguration = (\n cart: Cart,\n channelConfiguration: ChannelConfiguration,\n channelDeliveryOptionConfig?: ChannelDeliveryOptionConfiguration,\n retailMultiplePickUpOptionEnabled?: boolean,\n isTaxIncludedInPrice?: boolean,\n isShowTaxBreakup?: boolean\n): IShippingOrderLine => {\n const pickupDeliveryModeCode = channelConfiguration && channelConfiguration.PickupDeliveryModeCode;\n const emailDeliveryModeCode = channelConfiguration && channelConfiguration.EmailDeliveryModeCode;\n const cartLines = cart.CartLines || [];\n const deliveryModes = cartLines.map(cartLine => cartLine.DeliveryMode);\n const taxOnShippingCharge = cart.TaxOnShippingCharge !== undefined ? cart.TaxOnShippingCharge : 0;\n const shippingChargeAmount = cart.ShippingChargeAmount !== undefined ? cart.ShippingChargeAmount : 0;\n\n // isTaxIncludedInPrice isShowTaxBreakup useProperties\n // False False/True shippingChargeAmount\n // True True shippingChargeAmount\n // True false shippingChargeAmount + taxOnShippingCharge\n // if either of isTaxIncludedInPrice or isShowTaxBreakup is undefined then we will execute old logic\n let freightFee: number | undefined = 0;\n if (isTaxIncludedInPrice === undefined || isShowTaxBreakup === undefined) {\n freightFee = cart.ShippingChargeAmount;\n } else {\n freightFee = isTaxIncludedInPrice && !isShowTaxBreakup ? shippingChargeAmount + taxOnShippingCharge : cart.ShippingChargeAmount;\n }\n const canShip = deliveryModes.some(\n deliveryMode =>\n !(\n deliveryMode !== '' &&\n (deliveryMode ===\n getDeliveryMode(deliveryMode, retailMultiplePickUpOptionEnabled, channelDeliveryOptionConfig, pickupDeliveryModeCode) ||\n deliveryMode === emailDeliveryModeCode)\n )\n );\n const hasDeliveryMethod = deliveryModes.some(deliveryMode => !!deliveryMode && deliveryMode !== emailDeliveryModeCode);\n const hasShippingMethod = deliveryModes.some(\n deliveryMode =>\n !!deliveryMode &&\n deliveryMode !==\n getDeliveryMode(deliveryMode, retailMultiplePickUpOptionEnabled, channelDeliveryOptionConfig, pickupDeliveryModeCode) &&\n deliveryMode !== emailDeliveryModeCode\n );\n return {\n canShip,\n hasDeliveryMethod,\n hasShippingMethod,\n freightFee\n } as IShippingOrderLine;\n};\n\nconst getDeliveryMode = (\n deliveryMode?: string,\n featureSate: boolean = false,\n channelDeliveryOptionConfig?: ChannelDeliveryOptionConfiguration,\n pickupDeliveryMode?: string\n) => {\n if (!featureSate) {\n return pickupDeliveryMode;\n }\n return channelDeliveryOptionConfig?.PickupDeliveryModeCodes?.find(dM => dM === deliveryMode);\n};\n\n// eslint-disable-next-line complexity\nexport const OrderSummary = (props: IOrderSummaryProps) => {\n const {\n SubtotalAmount,\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Existing Property.\n SubtotalAmountWithoutTax,\n TaxAmount,\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Existing Property.\n TaxOnNonShippingCharges,\n DiscountAmount = 0,\n TotalAmount,\n OtherChargeAmount\n } = props.cart;\n\n const { canShip, hasDeliveryMethod, hasShippingMethod, freightFee } = getDeliveryConfiguration(\n props.cart,\n props.channelConfiguration,\n props.channelDeliveryOptionConfig,\n props.retailMultiplePickUpOptionEnabled,\n props.isTaxIncludedInPrice,\n props.isShowTaxBreakup\n );\n\n let reactNodes: IOrderSummaryLines;\n // if either of isTaxIncludedInPrice or isShowTaxBreakup is undefined then we will execute old logic\n if (props.isTaxIncludedInPrice === undefined || props.isShowTaxBreakup === undefined) {\n reactNodes = {\n subtotal: _buildOrderSummarySection(props, SubtotalAmount, 'sub-total', props.subTotalLabel),\n tax: _buildOrderSummarySection(props, hasDeliveryMethod ? TaxAmount : undefined, 'tax-amount', props.taxLabel),\n orderTotal: _buildOrderSummarySection(props, TotalAmount, 'total', props.orderTotalLabel),\n otherCharge:\n (OtherChargeAmount && _buildOrderSummarySection(props, OtherChargeAmount, 'other-charges', props.otherChargeLabel)) ||\n undefined\n };\n } else {\n const otherChargeAmount = OtherChargeAmount !== undefined ? OtherChargeAmount : 0;\n const taxOnNonShippingCharges = TaxOnNonShippingCharges !== undefined ? TaxOnNonShippingCharges : 0;\n const isTaxGreaterThanZero = TaxAmount !== undefined && TaxAmount > 0;\n // isTaxIncludedInPrice isShowTaxBreakup useProperties\n // False False/True otherChargeAmount\n // True True otherChargeAmount\n // True false otherChargeAmount+TaxOnNonShippingCharges\n\n const otherChargeAmountTotal =\n props.isTaxIncludedInPrice && !props.isShowTaxBreakup ? otherChargeAmount + taxOnNonShippingCharges : otherChargeAmount;\n\n const subtotalAmountActual = props.isTaxIncludedInPrice && props.isShowTaxBreakup ? SubtotalAmountWithoutTax : SubtotalAmount;\n\n reactNodes = {\n subtotal: _buildOrderSummarySection(props, subtotalAmountActual, 'sub-total', props.subTotalLabel),\n tax: props.isShowTaxBreakup\n ? _buildOrderSummarySection(\n props,\n hasDeliveryMethod || isTaxGreaterThanZero ? TaxAmount : undefined,\n 'tax-amount',\n props.taxLabel\n )\n : '',\n orderTotal: _buildOrderSummarySection(props, TotalAmount, 'total', props.orderTotalLabel),\n otherCharge:\n (OtherChargeAmount && _buildOrderSummarySection(props, otherChargeAmountTotal, 'other-charges', props.otherChargeLabel)) ||\n undefined\n };\n }\n if (canShip) {\n reactNodes.shipping = _buildOrderSummarySection(props, hasShippingMethod ? freightFee : undefined, 'shipping', props.shippingLabel);\n }\n if (props.checkoutState) {\n const giftCardAmount = _computeGiftCardAmount(props.checkoutState, props.cart);\n const loyaltyAmount = _computedLoyaltyAmount(props.checkoutState);\n const customerAccountAmount = _computedCustomerAccountAmount(props.checkoutState);\n const totalAmountAfterGiftCard = (TotalAmount || 0) - giftCardAmount - loyaltyAmount - customerAccountAmount;\n\n if (loyaltyAmount > 0) {\n reactNodes.loyalty = _buildOrderSummarySection(props, -loyaltyAmount, 'loyalty', props.loyaltyLabel || 'Loyalty amount');\n }\n\n if (giftCardAmount > 0) {\n reactNodes.giftCard = _buildOrderSummarySection(props, -giftCardAmount, 'gift-card', props.giftcardLabel || 'Gift card amount');\n }\n\n if (customerAccountAmount > 0) {\n reactNodes.customerAccount = _buildOrderSummarySection(\n props,\n -customerAccountAmount,\n 'customer-credit-amount',\n props.customerAccountLabel || 'Customer Credit amount'\n );\n }\n\n reactNodes.orderTotal = _buildOrderSummarySection(\n { ...props, freeText: undefined },\n totalAmountAfterGiftCard,\n 'total',\n props.orderTotalLabel\n );\n }\n\n if (DiscountAmount > 0) {\n reactNodes.totalDiscounts = _buildOrderSummarySection(props, -DiscountAmount, 'total-discounts', props.totalDiscountsLabel);\n }\n\n return reactNodes;\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IProductsDimensionsAvailabilities } from '@msdyn365-commerce/commerce-entities';\nimport { IPriceComponentResources, ProductComponent } from '@msdyn365-commerce/components';\nimport * as Msdyn365 from '@msdyn365-commerce/core';\nimport { getCatalogId, getUrlSync, ICoreContext } from '@msdyn365-commerce/core';\nimport { ProductPrice, ProductSearchResult } from '@msdyn365-commerce/retail-proxy';\nimport {\n ArrayExtensions,\n DimensionAvailabilitiesForProductSearchResultInput,\n DimensionTypes,\n DimensionSwatchDisplayTypes,\n getDimensionAvailabilitiesForProductSearchResultAction,\n getPriceForProductSearchResult,\n IDimensionsApp,\n ObjectExtensions,\n PriceForProductSearchResultInput,\n ProductPriceForSelectedProductsInput,\n validateCatalogId,\n getProductPriceForSelectedProducts\n} from '@msdyn365-commerce-modules/retail-actions';\nimport {\n Button,\n getTelemetryObject,\n IComponentNodeProps,\n IModuleProps,\n INodeProps,\n ISingleSlideCarouselProps,\n ITelemetryContent,\n NodeTag,\n SingleSlideCarousel\n} from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { IProductCollectionData } from './product-collection.data';\nimport { IProductCollectionProps, layout } from './product-collection.props.autogenerated';\n\nexport interface IProductCollectionViewProps extends IProductCollectionProps {\n heading?: React.ReactNode;\n ProductCollectionContainer: IModuleProps;\n SingleSlideCarouselComponentProps: INodeProps;\n GridComponentProps: INodeProps;\n products: IProductComponentViewProps[];\n isCarousel: boolean;\n productPrices?: ProductPrice[];\n seeAllButton?: React.ReactNode;\n}\n\nexport interface IProductComponentViewProps {\n ProductContainer: INodeProps;\n productComponent: React.ReactNode;\n}\nexport interface IProductComponentState {\n products: ProductSearchResult[];\n productPrices: ProductPrice[];\n productsDimensionAvailabilities?: IProductsDimensionsAvailabilities[][];\n}\n\n/**\n * ProductCollection component.\n */\nclass ProductCollection extends React.PureComponent, IProductComponentState> {\n private readonly telemetryContent: ITelemetryContent;\n\n private readonly productPrices: ProductPrice[];\n\n constructor(props: IProductCollectionProps) {\n super(props);\n this.productPrices = [];\n this.state = {\n products: this.props.config.productCollection.products || [],\n productPrices: this.productPrices || []\n };\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n }\n\n public async componentDidMount(): Promise {\n if (this.props.config.enableAffiliationBasedPricing && this.props.context.actionContext.requestContext.user.isAuthenticated) {\n await this._getActivePrice();\n }\n }\n\n public render(): JSX.Element | null {\n const { heading, className, shouldDisplaySeeAllButton } = this.props.config;\n const { resources } = this.props;\n const recommendation = this.props.config.productCollection.recommendationListId;\n const discountIds = this.props.config.productCollection.discountIds;\n\n // Initialize state in case if the products were not found during initial module render\n // eslint-disable-next-line @typescript-eslint/no-floating-promises -- Initialize data if not there.\n this.initProductState(this.props.config.productCollection);\n\n const products = this.state.products;\n const productPrices = this.state.productPrices;\n\n const isCarousel = this.props.config.layout === layout.carousel;\n const headingLabel = heading ? heading.text : '';\n const headingComponent = heading && (\n \n );\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- product check for safety.\n const updatedProducts = products?.map((item: ProductSearchResult, index: number) => {\n const getProductData = this._getProduct(item, index, productPrices ? productPrices.at(index) : undefined);\n return !ObjectExtensions.isNullOrUndefined(getProductData) ? getProductData : undefined;\n });\n\n const productCollectionViewProps = {\n ...this.props,\n heading: headingComponent,\n SingleSlideCarouselComponentProps: {\n tag: SingleSlideCarousel,\n className: '',\n flipperPrevLabel: `${headingLabel} ${resources.flipperPrevious}`,\n flipperNextLabel: `${headingLabel} ${resources.flipperNext}`,\n parentId: this.props.id,\n telemetryContent: this.telemetryContent\n } as IComponentNodeProps,\n ProductCollectionContainer: {\n moduleProps: this.props,\n className: classnames('ms-product-collection', className)\n },\n GridComponentProps: {\n tag: 'ul' as NodeTag,\n className: 'ms-product-collection__items'\n },\n isCarousel,\n\n products:\n ArrayExtensions.hasElements(updatedProducts) &&\n updatedProducts.filter(item => {\n return item !== undefined;\n }),\n productPrices: this.productPrices,\n seeAllButton:\n (recommendation || discountIds) && shouldDisplaySeeAllButton && ArrayExtensions.hasElements(updatedProducts)\n ? this._getSeeAllButton(headingLabel, recommendation, discountIds)\n : undefined\n };\n return this.props.renderView(productCollectionViewProps) as React.ReactElement;\n }\n\n public handleHeadingChange = (event: Msdyn365.ContentEditableEvent) => (this.props.config.heading!.text = event.target.value);\n\n /**\n * Get products dimension availabilities.\n * @param products - Products.\n * @returns Promise.\n */\n private readonly _getProductsDimensionsAvailabilities = async (products: ProductSearchResult[]): Promise => {\n const context = this.props.context as ICoreContext;\n const dimensionsToDisplayOnProductCard = context.app.config.dimensionsInProductCard;\n const dimensionsToDisplayAsSwatch = context.app.config.dimensionsAsSwatchType;\n const validProducts = ArrayExtensions.validValues(products);\n if (\n ArrayExtensions.hasElements(validProducts) &&\n ArrayExtensions.hasElements(dimensionsToDisplayOnProductCard) &&\n !dimensionsToDisplayOnProductCard.includes(DimensionTypes.none) &&\n ArrayExtensions.hasElements(dimensionsToDisplayAsSwatch) &&\n !dimensionsToDisplayAsSwatch.includes(DimensionTypes.none)\n ) {\n const productsDimensionAvailabilities = await getDimensionAvailabilitiesForProductSearchResultAction(\n new DimensionAvailabilitiesForProductSearchResultInput(\n validProducts,\n this.props.context as ICoreContext,\n DimensionSwatchDisplayTypes.productCard\n ),\n this.props.context.actionContext\n );\n\n if (ArrayExtensions.hasElements(productsDimensionAvailabilities)) {\n this.setState({ productsDimensionAvailabilities });\n }\n }\n };\n\n /**\n * Helper method to initialize products state.\n * @param productCollection - List of products.\n */\n private readonly initProductState = async (productCollection: Msdyn365.IProductList) => {\n let products = this.state.products;\n let productPrices = this.state.productPrices;\n const productCollectionProducts = productCollection.products;\n if (!ArrayExtensions.hasElements(products) && ArrayExtensions.hasElements(productCollectionProducts)) {\n products = productCollectionProducts;\n this.setState({ products });\n } else if (\n ArrayExtensions.hasElements(products) &&\n ArrayExtensions.hasElements(productCollectionProducts) &&\n !ArrayExtensions.equals(products, productCollectionProducts)\n ) {\n products = productCollectionProducts;\n this.setState({ products });\n } else if (productCollectionProducts === undefined && ArrayExtensions.hasElements(this.state.products)) {\n products = [];\n this.setState({ products: products });\n }\n\n if (Msdyn365.msdyn365Commerce.isBrowser && !ArrayExtensions.hasElements(this.state.productsDimensionAvailabilities)) {\n await this._getProductsDimensionsAvailabilities(products);\n }\n\n if (this.props.config.productCollection.listType === 'promotional') {\n productPrices = await getProductPriceForSelectedProducts(\n new ProductPriceForSelectedProductsInput(products.map(p => p.RecordId)),\n this.props.context.actionContext\n );\n this.setState({ productPrices: productPrices });\n }\n };\n\n private readonly _getProduct = (\n product: ProductSearchResult,\n index: number,\n productPrice?: ProductPrice\n ): IProductComponentViewProps | null => {\n if (!product || !product.Name) {\n this.props.telemetry.trace('[product-collection] Product or product name is null');\n return null;\n }\n const telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n const { imageSettings, allowBackNavigation } = this.props.config;\n const resources = this.props.resources;\n const breaCrumbType = this.props.context.app.config.breadcrumbType;\n const allowBack = allowBackNavigation && (breaCrumbType === 'back' || breaCrumbType === 'categoryAndBack');\n const quickviewSlot =\n this.props.slots && this.props.slots.quickview && this.props.slots.quickview.length > 0 ? this.props.slots.quickview[0] : null;\n const productComparisonButtonSlot = ArrayExtensions.hasElements(this.props.slots.productComparisonButton)\n ? this.props.slots.productComparisonButton[0]\n : null;\n\n const reviewCount = 1;\n const reviewTotalRatings = Number(product.TotalRatings);\n const reviewCountAriaLabelValue =\n reviewTotalRatings > reviewCount ? resources.ratingCountAriaLabel : resources.ratingCountAriaLabelSingleUser;\n const isPriceMinMaxEnabled = this.props.data.featureState.result?.find(\n featureState => featureState.Name === 'Dynamics.AX.Application.RetailSearchPriceRangeFeature'\n );\n const priceResources: IPriceComponentResources = {\n priceRangeSeparator: resources.priceRangeSeparator\n };\n return {\n ProductContainer: {\n tag: 'li' as NodeTag,\n className: 'ms-product-collection__item',\n role: 'listitem',\n key: index\n },\n productComponent: (\n \n ArrayExtensions.hasElements(dimensionAvailability) &&\n dimensionAvailability[0].masterProductId === (product.MasterProductId ?? product.RecordId)\n )}\n />\n )\n };\n };\n\n /**\n * Get the active price for products.\n */\n private readonly _getActivePrice = async (): Promise => {\n const productsList = this.state.products;\n const products = await getPriceForProductSearchResult(\n new PriceForProductSearchResultInput(productsList),\n this.props.context.actionContext\n );\n if (Msdyn365.msdyn365Commerce.isBrowser) {\n await this._getProductsDimensionsAvailabilities(products);\n }\n\n this.setState({ products });\n };\n\n /**\n * Get the see all button.\n * @param headingLabel - Heading label.\n * @param recommendation - Recommendation.\n * @param discountIds - Discount Ids.\n * @returns IProductComponentSeeAllViewProps - Product component see all view props.\n */\n private readonly _getSeeAllButton = (headingLabel: string, recommendation?: string, discountIds?: string[]): React.ReactNode => {\n if (!Msdyn365.msdyn365Commerce.isBrowser) {\n return null;\n }\n\n if (!recommendation && !discountIds) {\n return null;\n }\n\n const catalogId = getCatalogId(this.props.context.request);\n validateCatalogId(catalogId);\n const searchPageLink = getUrlSync('search', this.props.context.actionContext);\n if (!searchPageLink) {\n return null;\n }\n\n const url = new URL(searchPageLink, window.location.href);\n\n if (discountIds) {\n // see all button for promotion page\n url.searchParams.set('discountIds', discountIds.toString());\n url.searchParams.set('title', headingLabel);\n url.searchParams.set('catalogid', `${catalogId}`);\n } else if (recommendation) {\n // See all button for recommendation\n url.searchParams.set('recommendation', recommendation);\n url.searchParams.set('title', headingLabel);\n url.searchParams.set('catalogid', `${catalogId}`);\n }\n\n return (\n \n {this.props.resources.seeAllButtonText}\n \n );\n };\n}\n\nexport default ProductCollection;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { INodeProps, Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IProductCollectionViewProps, IProductComponentViewProps } from './product-collection';\n\nconst ProductCollectionView: React.FC = props => {\n const {\n heading,\n ProductCollectionContainer,\n products,\n SingleSlideCarouselComponentProps,\n GridComponentProps,\n isCarousel,\n seeAllButton\n } = props;\n\n if (products) {\n return (\n \n {heading}\n {seeAllButton}\n {isCarousel ? _renderCarousel(SingleSlideCarouselComponentProps, products) : _renderGrid(GridComponentProps, products)}\n \n );\n }\n props.context.telemetry.error('Product collection content is empty, module wont render.');\n return null;\n};\n\nconst _renderCarousel = (carouselContainer: INodeProps, items: IProductComponentViewProps[]): JSX.Element => {\n return {items && items.map(_renderProduct)};\n};\n\nconst _renderGrid = (gridContainer: INodeProps, items: IProductComponentViewProps[]): JSX.Element => {\n return {items && items.map(_renderProduct)};\n};\n\nconst _renderProduct = (product: IProductComponentViewProps): JSX.Element => {\n const { ProductContainer, productComponent } = product;\n\n return {productComponent};\n};\n\nexport default ProductCollectionView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { getPayloadObject, getTelemetryAttributes, ITelemetryContent, TelemetryConstant } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nexport interface IPromoBannerCloseButton {\n closeButtonAriaLabel?: string;\n label?: string;\n telemetryContent?: ITelemetryContent;\n onClose(): void;\n}\n\nexport const PromoBannerCloseButton: React.FC = ({ closeButtonAriaLabel, label, telemetryContent, onClose }) => {\n const payLoad = getPayloadObject('click', telemetryContent!, TelemetryConstant.PromoBannerClose);\n const attributes = getTelemetryAttributes(telemetryContent!, payLoad);\n return (\n \n );\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as Msdyn365 from '@msdyn365-commerce/core';\nimport { getPayloadObject, getTelemetryAttributes, ITelemetryContent, onTelemetryClick } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ILinksData } from '../promo-banner.props.autogenerated';\n\nexport interface IPromoBannerLinks {\n links: ILinksData[];\n requestContext: Msdyn365.IRequestContext;\n telemetryContent: ITelemetryContent;\n onTextChange?(index: number): (event: Msdyn365.ContentEditableEvent) => void;\n}\n\nexport const PromoBannerLinks: React.FC = ({ links, requestContext, onTextChange, telemetryContent }) => {\n const editableLinks = _mapEditableLinks(links, telemetryContent);\n return (\n \n {editableLinks && editableLinks.length > 0 ? (\n \n ) : null}\n \n );\n};\n\nconst _mapEditableLinks = (linkdata: ILinksData[], telemetryContent: ITelemetryContent): Msdyn365.ILinksData[] | null => {\n if (!linkdata || linkdata.length === 0) {\n return null;\n }\n const editableLinks: Msdyn365.ILinksData[] = [];\n linkdata.forEach((link, index) => {\n // Construct telemetry attribute to render\n const payLoad = getPayloadObject('click', telemetryContent, '', '');\n const linkText = link.linkText ? link.linkText : '';\n payLoad.contentAction.etext = linkText;\n const attributes = getTelemetryAttributes(telemetryContent, payLoad);\n const editableLink: Msdyn365.ILinksData = {\n ariaLabel: link.ariaLabel,\n className: 'ms-promo-banner__link',\n linkText: link.linkText,\n linkUrl: link.linkUrl.destinationUrl,\n openInNewTab: link.openInNewTab,\n role: 'link',\n additionalProperties: attributes,\n onClick: onTelemetryClick(telemetryContent, payLoad, linkText)\n };\n editableLinks.push(editableLink);\n });\n\n return editableLinks;\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 * as React from 'react';\n\nexport interface IPromoBannerText {\n text: string;\n requestContext: Msdyn365.IRequestContext;\n onTextChange(event: Msdyn365.ContentEditableEvent): void;\n}\n\nexport const PromoBannerText: React.FC = ({ text, onTextChange, requestContext }) => {\n return ;\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Carousel } from '@msdyn365-commerce/components';\nimport * as Msdyn365 from '@msdyn365-commerce/core';\nimport { getTelemetryObject, IModuleProps, INodeProps, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { PromoBannerCloseButton, PromoBannerLinks, PromoBannerText } from './components';\nimport { IBannerMessagesData, IPromoBannerProps, IPromoBannerResources } from './promo-banner.props.autogenerated';\n\nexport interface IPromoBannerState {\n animating: boolean;\n isVisible: boolean;\n activeIndex: number;\n}\n\nexport interface IPromoBannerViewProps extends IPromoBannerProps<{}>, IPromoBannerState {\n promoBannerProps: IModuleProps;\n contentProps: INodeProps;\n bannerMessages: IBannerMessagesData[];\n promoBannerTextProps: INodeProps;\n promoBannerLinksProps: INodeProps;\n carouselProps: INodeProps;\n closeButton?: React.ReactNode;\n className: string;\n promoBannerText: string;\n resources: IPromoBannerResources;\n onDismiss(): void;\n handleText(): void;\n handleLinks(): void;\n}\n\n/**\n *\n * PromoBannerModule component.\n * @extends {React.PureComponent>}\n */\nclass PromoBanner extends React.PureComponent, IPromoBannerState> {\n public state: IPromoBannerState = {\n animating: false,\n isVisible: true,\n activeIndex: 0\n };\n\n private readonly telemetryContent: ITelemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n\n public render(): JSX.Element | null {\n const { bannerMessages, dismissEnabled, interval, hideFlipper, autoplay, className = '' } = this.props.config;\n const { closeButtonAriaLabel, closeButtonLabel, bannerText, bannerAriaLabel } = this.props.resources;\n const { isVisible, activeIndex } = this.state;\n\n if (!isVisible) {\n this.props.context.telemetry.error('Promo banner content is empty, module wont render.');\n return null;\n }\n\n const viewProps = {\n // Context for telemetry and raw data for C1 to do customization\n // Including computed data, state data and methods\n ...this.props,\n className: classnames('ms-promo-banner', className),\n isVisible, // State data\n onDismiss: this._onDismiss, // Methods\n handleLinks: this.handleLinkTextChange,\n handleText: this.handleTextChange,\n\n promoBannerProps: {\n className: classnames('ms-promo-banner', className),\n moduleProps: this.props,\n role: 'banner',\n 'aria-label': bannerAriaLabel\n },\n promoBannerTextProps: {\n tag: PromoBannerText\n },\n promoBannerLinksProps: {\n tag: PromoBannerLinks,\n telemetryContent: this.telemetryContent\n },\n contentProps: { className: 'ms-promo-banner__content' },\n promoBannerText: bannerText,\n bannerMessages,\n activeIndex,\n carouselProps: {\n tag: Carousel,\n className: 'ms-promo-banner__carousel',\n activeIndex,\n next: this._next,\n previous: this._previous,\n onIndicatorsClickHandler: this._goToIndex,\n hideIndicator: hideFlipper,\n interval,\n hideFlipper,\n autoplay\n },\n closeButton: dismissEnabled && (\n \n )\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n public handleTextChange = (event: Msdyn365.ContentEditableEvent) => {\n if (this.props.config.bannerMessages && this.props.config.bannerMessages[0]) {\n this.props.config.bannerMessages[0].text = event.target.value;\n }\n };\n\n public handleLinkTextChange = (linkIndex: number) => (event: Msdyn365.ContentEditableEvent) => {\n if (this.props.config.bannerMessages && this.props.config.bannerMessages[1]) {\n const links = this.props.config.bannerMessages[1].links;\n if (links) {\n links[linkIndex].linkText = event.target.value;\n }\n }\n };\n\n private readonly _next = (): void => {\n const nextIndex = this._isLastItem() ? 0 : this.state.activeIndex + 1;\n this._goToIndex(nextIndex);\n };\n\n private readonly _previous = (): void => {\n const nextIndex = this._isFirstItem()\n ? this.props.config.bannerMessages\n ? this.props.config.bannerMessages.length - 1\n : 0\n : this.state.activeIndex - 1;\n this._goToIndex(nextIndex);\n };\n\n private readonly _goToIndex = (index: number): void => {\n if (this.state.animating) {\n return;\n }\n this.setState({ activeIndex: index });\n };\n\n private readonly _isFirstItem = () => this.state.activeIndex === 0;\n\n private readonly _isLastItem = () =>\n this.props.config.bannerMessages && this.state.activeIndex === this.props.config.bannerMessages.length - 1;\n\n private readonly _onDismiss = (): void => {\n this.setState({ isVisible: false });\n };\n}\n\nexport default PromoBanner;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IPromoBannerViewProps } from './promo-banner';\n\nconst PromoBannerView: React.FC = props => {\n const {\n promoBannerProps,\n contentProps,\n closeButton,\n bannerMessages,\n promoBannerTextProps,\n promoBannerLinksProps,\n carouselProps,\n promoBannerText,\n handleLinks,\n handleText\n } = props;\n\n const slides =\n bannerMessages &&\n bannerMessages.map((message, index) => {\n return (\n \n {promoBannerText}\n {message.text && }\n {message.links && message.links.length > 0 && (\n \n )}\n \n );\n });\n\n return (\n \n \n {closeButton}\n \n );\n};\nexport default PromoBannerView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { AddToCartComponent, IAddToCartFailureResult, IAddToCartResources, OrderDetailsProduct } from '@msdyn365-commerce/components';\nimport { getUrlSync, IComponentProps, ICoreContext } from '@msdyn365-commerce/core';\nimport { SalesLine } from '@msdyn365-commerce/retail-proxy';\nimport { QuickOrderTemplate } from '@msdyn365-commerce-modules/retail-actions';\nimport React from 'react';\n\n/**\n * The data on which the component should operate.\n */\nexport interface IAddToCartSelectedData {\n quickOrderTemplate: QuickOrderTemplate | undefined;\n}\n\n/**\n * The resources needed to render a buy selected component.\n */\nexport interface IAddToCartSelectedResources {\n quickOrderGridBuySelectedButtonText?: string;\n quickOrderGridBuySelectedButtonAriaLabel?: string;\n quickOrderGridBuySelectedAddingToCartErrorNotificationTitle?: string;\n quickOrderGridBuySelectedAddingToCartErrorNotificationCloseAriaLabel?: string;\n quickOrderGridGoToCartText?: string;\n quickOrderGridDialogCloseText?: string;\n quickOrderGridSingleItemText?: string;\n quickOrderGridMultiLineItemFormatText?: string;\n quickOrderGridMultiLinesFormatText?: string;\n quickOrderGridHeaderMessageText?: string;\n addedQuantityText?: string;\n originalPriceText?: string;\n currentPriceText?: string;\n freePriceText?: string;\n}\n\n/**\n * Configuration of a buy selected component.\n */\nexport interface IAddToCartSelectedProps extends IComponentProps {\n className: string;\n context: ICoreContext;\n\n resources: IAddToCartSelectedResources;\n\n isIcon?: boolean;\n onError?(result: IAddToCartFailureResult): void;\n}\n\n/**\n * Get the dialog strings.\n * @param props - The buy selected props.\n * @returns The add to cart resources.\n */\nexport const getDialogStrings = (props: IAddToCartSelectedProps): IAddToCartResources => {\n return {\n goToCartText: props.resources.quickOrderGridGoToCartText ?? '',\n continueShoppingText: props.resources.quickOrderGridDialogCloseText ?? '',\n closeNotificationLabel: props.resources.quickOrderGridBuySelectedAddingToCartErrorNotificationCloseAriaLabel ?? '',\n headerItemOneText: props.resources.quickOrderGridSingleItemText ?? '',\n headerItemFormatText: props.resources.quickOrderGridMultiLineItemFormatText ?? '',\n headerLinesFormatText: props.resources.quickOrderGridMultiLinesFormatText ?? '',\n headerMessageText: props.resources.quickOrderGridHeaderMessageText ?? '',\n freePriceText: props.resources.freePriceText ?? '',\n originalPriceText: props.resources.originalPriceText ?? '',\n currentPriceText: props.resources.currentPriceText ?? '',\n addedQuantityText: props.resources.addedQuantityText ?? '',\n buyAgainNotificationTitle: props.resources.quickOrderGridBuySelectedAddingToCartErrorNotificationTitle ?? '',\n buyAgainNotificationCloseAriaLabel: props.resources.quickOrderGridBuySelectedAddingToCartErrorNotificationCloseAriaLabel ?? ''\n };\n};\n\n/**\n * Get the dialog strings.\n * @param quickOrder - The buy selected props.\n * @returns The add to cart resources.\n */\nexport const getOrderDetails = (quickOrder: QuickOrderTemplate): OrderDetailsProduct[] => {\n const orderDetails: OrderDetailsProduct[] = [];\n for (const quickLine of quickOrder.quickOrderTemplateLines) {\n const quantity = quickLine.productListLine.Quantity;\n const salesLine: SalesLine = {\n Quantity: quantity\n };\n const products = new OrderDetailsProduct(salesLine, quickLine.fullProduct?.ProductDetails);\n orderDetails.push(products);\n }\n return orderDetails;\n};\n\n/**\n * Renders a button which adds given products to the cart.\n * @param props - Configuration of the component.\n * @returns A react element or null if no products were given.\n */\nexport const AddToCartProductListComponent: React.FC = (props: IAddToCartSelectedProps): JSX.Element | null => {\n const {\n data: { quickOrderTemplate }\n } = props;\n\n if (quickOrderTemplate?.quickOrderTemplateLines[0].fullProduct?.ProductDetails === undefined) {\n return null;\n }\n const quantity = quickOrderTemplate.quickOrderTemplateLines[0].productListLine.Quantity;\n const buttonLabel = props.resources.quickOrderGridBuySelectedButtonText;\n const buttonAriaLabel = props.resources.quickOrderGridBuySelectedButtonAriaLabel;\n const dialogStrings: IAddToCartResources = getDialogStrings(props);\n const shouldSkipSiteSettings: boolean = true;\n const orderDetailProducts = getOrderDetails(quickOrderTemplate);\n return (\n \n );\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IComponentProps, ICoreContext } from '@msdyn365-commerce/core';\nimport { QuickOrderTemplate } from '@msdyn365-commerce-modules/retail-actions';\nimport { Alert, Button, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { AddToCartProductListComponent } from './add-to-list';\nimport { IQuickOrderGridActionsViewProps, IQuickOrderGridState } from './utilities';\n\n/**\n * Interface for quick order grid action data.\n */\nexport interface IQuickOrderGridActionsData {\n quickOrderTemplate: QuickOrderTemplate | undefined;\n}\n\n/**\n * Interface for quick order grid action props.\n */\nexport interface IQuickOrderGridActionsProps extends IComponentProps {\n context: ICoreContext;\n telemetryContent?: ITelemetryContent;\n moduleClassName: string;\n typeName: string;\n handlers: {\n removeProductList(productListId: string): void;\n onErrorMessage(message: string): void;\n };\n quickOrderGridState: IQuickOrderGridState;\n resources: {\n quickOrderGridDeleteButtonText: string;\n quickOrderGridBuySelectedButtonText?: string;\n quickOrderGridBuySelectedButtonAriaLabel?: string;\n quickOrderGridBuySelectedAddingToCartErrorNotificationTitle?: string;\n quickOrderGridBuySelectedAddingToCartErrorNotificationCloseAriaLabel?: string;\n quickOrderGridGoToCartText?: string;\n quickOrderGridDialogCloseText?: string;\n quickOrderGridSingleItemText?: string;\n quickOrderGridMultiLineItemFormatText?: string;\n quickOrderGridMultiLinesFormatText?: string;\n quickOrderGridHeaderMessageText?: string;\n addedQuantityText?: string;\n originalPriceText?: string;\n currentPriceText?: string;\n freePriceText?: string;\n };\n}\n\n/**\n * Remove ProductList Action.\n * @param props -Quick order grid action props.\n */\nconst removeQuickOrderList = (props: IQuickOrderGridActionsProps): void => {\n const {\n data: { quickOrderTemplate },\n handlers\n } = props;\n const { removeProductList } = handlers;\n // eslint-disable-next-line @typescript-eslint/prefer-optional-chain -- Need to check data.\n if (quickOrderTemplate && quickOrderTemplate.productList.Id) {\n removeProductList(quickOrderTemplate.productList.Id);\n }\n};\n\n/**\n * Get Addtobag Button.\n * @param props -Order template action props.\n * @returns QuickOrderGrid actions view props.\n */\nconst getQuickOrderGridAddToCartDialog = (props: IQuickOrderGridActionsProps): React.ReactNode => {\n const {\n data: { quickOrderTemplate },\n context,\n moduleClassName,\n resources,\n typeName\n } = props;\n const buttonId = 'quick-order-grid';\n return (\n {\n if (result.cartActionResult?.errorDetails?.LocalizedMessage) {\n props.handlers.onErrorMessage(result.cartActionResult.errorDetails.LocalizedMessage);\n }\n }}\n />\n );\n};\n\n/**\n * Remove Quick order grid action.\n * @param props -Quick order grid action props.\n * @returns Remove order template.\n */\nconst removeActionHandler = (props: IQuickOrderGridActionsProps) => () => {\n removeQuickOrderList(props);\n};\n\n/**\n * Quick order grid action view.\n * @param props -Quick Order Grid template action props.\n * @returns QuickOrderGrid actions view props.\n */\n// eslint-disable-next-line @typescript-eslint/naming-convention -- Name needs to be this.\nexport const QuickOrderGridActionsView = (props: IQuickOrderGridActionsProps): IQuickOrderGridActionsViewProps => {\n const { moduleClassName, quickOrderGridState, resources } = props;\n const { quickOrderGridDeleteButtonText } = resources;\n\n const userMessageNode = quickOrderGridState.topStateMessage ? (\n \n \n {quickOrderGridState.topStateMessage.messageText}\n \n ) : (\n undefined\n );\n\n return {\n addProductListToBag: getQuickOrderGridAddToCartDialog(props),\n removeProductList: (\n \n ),\n userMessage: userMessageNode\n };\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Button, Collapse, ICollapseProps } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { IQuickOrderGridDrawerProps } from './quick-order-grid-drawer-props';\n\n/**\n * Interface for drawer state.\n */\nexport interface IQuickOrderGridDrawerState {\n isOpen: boolean;\n}\n\n/**\n * Placement of glyph.\n */\nexport type GlyphPlacement = 'start' | 'end';\n\n/**\n * Quick Order Grid Drawer - This is a full width uncontrolled collapse where the button glyph changes\n * when the drawer is open and closed.\n */\nexport class QuickOrderGridDrawer extends React.Component {\n private readonly _drawerOpenGlyph: string;\n\n private readonly _drawerCloseGlyph: string;\n\n private readonly _drawerGlyphClass: string;\n\n private _isManuallyToggled: boolean;\n\n public constructor(props: IQuickOrderGridDrawerProps) {\n super(props);\n this._isManuallyToggled = false;\n this.state = { isOpen: props.collapseProps?.isOpen ?? false };\n this._drawerGlyphClass = classnames('drawer__glyph', this.props.toggleGlyphClassName ? this.props.toggleGlyphClassName : '');\n const closeGlyph = this.props.closeGlyph ? this.props.closeGlyph : '';\n if (this.props.isAnimateGlyph) {\n this._drawerOpenGlyph = classnames(this._drawerGlyphClass, this.props.openGlyph ? this.props.openGlyph : closeGlyph);\n this._drawerCloseGlyph = this._drawerOpenGlyph;\n } else {\n this._drawerOpenGlyph = classnames(this._drawerGlyphClass, this.props.openGlyph ? this.props.openGlyph : '');\n this._drawerCloseGlyph = classnames(this._drawerGlyphClass, closeGlyph);\n }\n }\n\n /**\n * Method to call on click of drawer button.\n * @param event - Product DeliveryOption List.\n */\n public toggle = (event: React.MouseEvent | React.KeyboardEvent): void => {\n event.preventDefault();\n this._isManuallyToggled = true;\n if (this.props.onToggle) {\n this.setState(previousState => ({ isOpen: !previousState.isOpen }));\n this.props.onToggle(this.state);\n } else {\n this.setState(previousState => ({ isOpen: !previousState.isOpen }));\n }\n };\n\n public shouldComponentUpdate(nextProps: IQuickOrderGridDrawerProps, nextState: IQuickOrderGridDrawerState): boolean {\n if (this.state === nextState && this.props === nextProps) {\n return false;\n }\n return true;\n }\n\n public render(): JSX.Element {\n const collapseProps: ICollapseProps = { ...this.props.collapseProps };\n\n // If the drawer is manually toggled by pressing the button, then we use the internal state\n if (collapseProps.isOpen === undefined || this._isManuallyToggled) {\n collapseProps.isOpen = this.state.isOpen;\n }\n collapseProps.children = this.props.children;\n const drawerClass = classnames('drawer', this.props.className);\n const drawerButtonClassName = `${this.props.className ? this.props.className : ''}__button`;\n this._isManuallyToggled = false;\n return (\n
    \n \n {this._generateDrawerButtonInnerMarkup(collapseProps.isOpen, drawerClass)}\n \n \n
    \n );\n }\n\n private _generateDrawerButtonInnerMarkup(isCollapseState: boolean, drawerClass: string): JSX.Element {\n const drawerButtonTextClass = classnames(\n 'drawer__buttontext',\n this.props.toggleButtonClassName ? this.props.toggleButtonClassName : ''\n );\n const headingDrawerClass = `${drawerClass}-heading`;\n const descriptionDrawerClass = `${drawerClass}-description`;\n return (\n <>\n

    {this.props.moduleHeadingText}

    \n {this.props.moduleDescriptionText}\n {this._generateGlyphMarkup('drawer__glyph__end', isCollapseState)}\n \n );\n }\n\n private _generateGlyphMarkup(location: string, isCollapseState: boolean): JSX.Element {\n let glyphClass = isCollapseState ? this._drawerOpenGlyph : this._drawerCloseGlyph;\n glyphClass = `${glyphClass} ${location}`;\n return ;\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Alert, Button } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IQuickOrderGridState } from './utilities';\n\n/**\n * Interface quick order grid form props.\n */\nexport interface IQuickOrderGridFormProps {\n isAddtoListDisabled: boolean | undefined;\n productTextInput: React.RefObject;\n quantityTextInput: React.RefObject;\n maxChars: number;\n minQuantity?: number;\n maxQuantity?: number;\n moduleClassName: string;\n ariaLabelQuantity: string;\n ariaLabelProduct: string;\n ariaLabelAddtoCart: string;\n quickOrderGridState: IQuickOrderGridState;\n handleInputChange(query: string): void;\n handleQuantityChange(query: string): void;\n handleAddProductListClick(): Promise;\n}\n\n/**\n * Interface quick order grid form view props.\n */\nexport interface IQuickOrderGridFormViewProps {\n product: React.ReactNode;\n quantity: React.ReactNode;\n addToListBtn: React.ReactNode;\n userMessage?: React.ReactNode;\n}\n\n/**\n * On Input Change functionality.\n * @param handleInputChange -Input change function.\n * @returns Input change value.\n */\nconst onInputChangeFunction = (handleInputChange: (query: string) => void) => (event: React.ChangeEvent) => {\n handleInputChange(event.target.value || '');\n};\n\n/**\n * On Quantity Change functionality.\n * @param handleQuantityChange -Quantity change function.\n * @returns Quantity change value.\n */\nconst onQuantityChangeFunction = (handleQuantityChange: (query: string) => void) => (event: React.ChangeEvent) => {\n handleQuantityChange(event.target.value || '');\n};\n\n/**\n * Quick order grid form component.\n * @param props -Component form props.\n * @returns Quick order gridp view props..\n */\nexport const QuickOrderGridFormComponent = (props: IQuickOrderGridFormProps): IQuickOrderGridFormViewProps => {\n const {\n moduleClassName,\n productTextInput,\n quantityTextInput,\n quickOrderGridState,\n maxChars,\n minQuantity,\n maxQuantity,\n isAddtoListDisabled,\n ariaLabelQuantity,\n ariaLabelProduct,\n ariaLabelAddtoCart,\n handleQuantityChange,\n handleInputChange,\n handleAddProductListClick\n } = props;\n\n const onInputChange = onInputChangeFunction(handleInputChange);\n\n const onQuantityInputChange = onQuantityChangeFunction(handleQuantityChange);\n\n const productNode = (\n
    \n

    \n {ariaLabelProduct}\n

    \n \n
    \n );\n\n const quantityNode = (\n
    \n

    \n {ariaLabelQuantity}\n

    \n \n
    \n );\n\n const addToListNode = (\n
    \n \n {ariaLabelAddtoCart}\n \n
    \n );\n\n const userMessageNode = quickOrderGridState.stateMessage ? (\n \n \n {quickOrderGridState.stateMessage.messageText}\n \n ) : (\n undefined\n );\n\n return {\n product: productNode,\n addToListBtn: addToListNode,\n quantity: quantityNode,\n userMessage: userMessageNode\n };\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { QuickOrderTemplateLine } from '@msdyn365-commerce-modules/retail-actions';\nimport { observable } from 'mobx';\n\n/**\n * Represents a product for quick order grid.\n */\nexport class QuickOrderGridProduct {\n @observable\n public isSelected: boolean;\n\n public readonly productLine: QuickOrderTemplateLine;\n\n public constructor(productLine: QuickOrderTemplateLine) {\n this.productLine = productLine;\n this.isSelected = false;\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IComponent, IComponentProps, ICoreContext } from '@msdyn365-commerce/core';\nimport classnames from 'classnames';\nimport React from 'react';\n\n/**\n * Interface for quick order grid table header resources.\n */\nexport interface IQuickOrderGridTableHeaderResources {\n quickOrderGridProductNumberText: string;\n quickOrderGridProductText: string;\n quickOrderGridUnitPriceText: string;\n quickOrderGridUnitOfMeasureText: string;\n quickOrderGridQuantityText: string;\n quickOrderGridActionsText: string;\n}\n\n/**\n * Interface for quick order grid table props.\n */\nexport interface IQuickOrderGridTableHeaderProps extends IComponentProps {\n context: ICoreContext;\n className: string;\n\n isMobile: boolean;\n resources: IQuickOrderGridTableHeaderResources;\n}\n\n/**\n * Interface for quick order grid table header component.\n */\nexport interface IQuickOrderGridTableHeaderComponent extends IComponent {}\n\n/**\n * Get the quick order grid header cells for desktop.\n * @param props -- The quick order grid table header props.\n * @returns The list of cells for quick order grid header component in desktop version.\n */\nconst QuickOrderGridDesktopHeaderCellsComponent: React.FC = (props: IQuickOrderGridTableHeaderProps) => {\n const { resources } = props;\n const columnWithNumberClassName = `${props.className}__row__column-with-number`;\n return (\n <>\n \n \n \n {resources.quickOrderGridProductNumberText}\n {resources.quickOrderGridProductText}\n {resources.quickOrderGridUnitPriceText}\n {resources.quickOrderGridUnitOfMeasureText}\n {resources.quickOrderGridQuantityText}\n {resources.quickOrderGridActionsText}\n \n );\n};\n\n/**\n * Get the quick order grid header cells for mobile.\n * @param props -- The quick order grid table header props.\n * @returns The quick order grid header component in desktop version.\n */\nconst QuickOrderGridMobileHeaderCellsComponent: React.FC = (props: IQuickOrderGridTableHeaderProps) => {\n const { resources } = props;\n return (\n <>\n \n {resources.quickOrderGridProductNumberText}\n \n \n );\n};\n\n/**\n * Quick order table header component.\n * @param props - Configuration of the component.\n * @returns React node with the header.\n */\nexport const QuickOrderGridTableHeaderComponent: React.FC = (props: IQuickOrderGridTableHeaderProps) => {\n const rowClassName = `${props.className}__row`;\n\n let headerCells: JSX.Element;\n if (props.isMobile) {\n headerCells = ;\n } else {\n headerCells = ;\n }\n\n return (\n \n {headerCells}\n \n );\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { PriceComponent } from '@msdyn365-commerce/components';\nimport MsDyn365, { IComponentProps, ICoreContext, IImageSettings, Image } from '@msdyn365-commerce/core';\nimport { ProductListLine, ProductPrice } from '@msdyn365-commerce/retail-proxy';\nimport { getFallbackImageUrl, getProductPageUrlSync, ObjectExtensions, StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport { Button, IncrementalQuantity, isMobile, VariantType } from '@msdyn365-commerce-modules/utilities';\nimport React, { useState } from 'react';\n\nimport { QuickOrderGridProduct } from '../../quick-order-grid-product';\nimport { IQuickOrderGridRowCallbacks } from '../../utilities';\n\n/**\n * Data required to render each quick order grid row.\n */\nexport interface IQuickOrderGridTableRowData {\n product: QuickOrderGridProduct;\n}\n\n/**\n * Resources for quick order grid table rows.\n */\nexport interface IQuickOrderGridTableRowResources {\n quickOrderGridQuantityMobileText: string;\n quickOrderGridProductDimensionsSeparator: string;\n quickOrderGridViewDetailsButtonText: string;\n quickOrderGridViewDetailsButtonAriaLabel: string;\n quickOrderGridRemoveItemButtonAriaLabel: string;\n quickOrderGridInputQuantityAriaLabel: string;\n quickOrderGridDecrementButtonAriaLabel: string;\n quickOrderGridIncrementButtonAriaLabel: string;\n originalPriceText: string;\n currentPriceText: string;\n freePriceText: string;\n}\n\n/**\n * Interface for quick order grid table props.\n */\nexport interface IQuickOrderGridTableRowProps extends IComponentProps {\n context: ICoreContext;\n className: string;\n productListLine: ProductListLine;\n price?: ProductPrice;\n moduleId: string;\n moduleTypeName: string;\n min: number;\n max: number;\n quantity: number;\n imageSettings?: IImageSettings;\n isMobile: boolean;\n resources: IQuickOrderGridTableRowResources;\n index: number;\n callbacks: IQuickOrderGridRowCallbacks;\n}\n\n/**\n * The default image settings for quick order grid table row.\n */\nconst defaultImageSettings: IImageSettings = {\n viewports: {\n xs: { q: 'w=80&h=80&m=6', w: 0, h: 0 },\n lg: { q: 'w=147&h=147&m=6', w: 0, h: 0 }\n },\n lazyload: true,\n cropFocalRegion: true\n};\n\n/**\n * Renders product image for quick order grid row.\n * @param props - Quick order table row props.\n * @returns React element.\n */\nconst QuickOrderGridTableRowProductImageComponent: React.FC = (props: IQuickOrderGridTableRowProps) => {\n const product = props.data.product.productLine.fullProduct?.ProductDetails;\n const fallbackImageUrl = getFallbackImageUrl(\n product?.ItemId,\n props.context.actionContext.requestContext.apiSettings,\n props.context.request.app?.config?.OmniChannelMedia\n );\n\n const containerClassName = `${props.className}__product-image-container`;\n\n return (\n
    \n \n
    \n );\n};\n\nlet setShowPreviousActions: React.Dispatch> | undefined;\n\n/**\n * Renders product price.\n * @param props - Props for price component.\n * @returns React element.\n */\nconst renderProductPrice = (props: IQuickOrderGridTableRowProps): JSX.Element | null => {\n const { context, moduleId, moduleTypeName, resources } = props;\n const price = props.price;\n\n if (price) {\n return (\n \n );\n }\n return null;\n};\n\n/**\n * Renders product price.\n * @param props - Props for price component.\n * @returns React element.\n */\nconst renderUnitOfMeasure = (props: IQuickOrderGridTableRowProps): JSX.Element | null => {\n const price = props.price;\n\n if (price) {\n return (\n
    \n {StringExtensions.isNullOrEmpty(props.productListLine.UnitOfMeasure) || price.UnitOfMeasure}\n
    \n );\n }\n return null;\n};\n\n/**\n * On Change function.\n * @param onChangeQuantity -On change quantity function.\n * @param itemKey -String.\n * @param props -Order template line props.\n * @returns Set change quantity.\n */\nconst onChangeHandler = (\n onChangeQuantity: (\n orderTemplateLineId: string | undefined,\n quantity: number,\n props?: IQuickOrderGridTableRowProps | undefined\n ) => boolean,\n itemKey: string | undefined,\n props: IQuickOrderGridTableRowProps\n) => (newValue: number) => {\n onChangeQuantity(itemKey, newValue, props);\n return true;\n};\n\n/**\n * On Change function.\n * @param onRemoveItem -On change quantity function.\n * @param quickOrderGridProductKey -QuickOrderGridp Product.\n * @param props -Order template line props.\n * @returns Set change quantity.\n */\nconst onRemoveHandler = (\n onRemoveItem: (quickOrderGridProduct: QuickOrderGridProduct, props?: IQuickOrderGridTableRowProps | undefined) => void,\n quickOrderGridProductKey: QuickOrderGridProduct,\n props: IQuickOrderGridTableRowProps\n) => () => {\n onRemoveItem(quickOrderGridProductKey, props);\n};\n\n/**\n * Renders actions popup for the mobile view.\n * @param props - Configuration for popup.\n * @returns A react node with actions..\n */\nconst QuickOrderGridExtraActionsPopupComponent: React.FC = (\n props: IQuickOrderGridTableRowProps\n): JSX.Element | null => {\n const {\n resources: { quickOrderGridViewDetailsButtonAriaLabel, quickOrderGridViewDetailsButtonText }\n } = props;\n const product = props.data.product.productLine.fullProduct?.ProductDetails;\n const [shouldShowActions, setShowActions] = useState(false);\n let productUrl = '';\n if (product === undefined) {\n return null;\n }\n if (!StringExtensions.isNullOrWhitespace(product.Name) && !ObjectExtensions.isNullOrUndefined(product.RecordId)) {\n productUrl = getProductPageUrlSync(product.Name!, product.RecordId, props.context.actionContext);\n }\n\n const onClickViewDetails = React.useCallback(() => {\n if (MsDyn365.isBrowser) {\n window.location.href = productUrl;\n }\n }, [productUrl]);\n\n const toggle = React.useCallback(() => {\n const shouldShowActionsNewValue = !shouldShowActions;\n if (shouldShowActionsNewValue) {\n if (setShowPreviousActions) {\n setShowPreviousActions(false);\n }\n setShowActions(shouldShowActionsNewValue);\n setShowPreviousActions = setShowActions;\n } else {\n setShowPreviousActions = undefined;\n setShowActions(shouldShowActionsNewValue);\n }\n }, [shouldShowActions, setShowActions]);\n\n if (StringExtensions.isNullOrWhitespace(productUrl)) {\n return null;\n }\n\n const className = `${props.className}__extra-actions-cell`;\n const actionsContainerClassName = `${className}__actions-container`;\n\n return (\n
    \n \n \n {props.resources.quickOrderGridRemoveItemButtonAriaLabel}\n \n
    \n )}\n
    \n );\n};\n\n/**\n * Renders quick order grid table rows for desktop view.\n * @param props - Configuration for the rows.\n * @returns A react node with a list of quick order grid rows for desktop view.\n */\nexport const QuickOrderGridDesktopTableRowCellComponent: React.FC = (props: IQuickOrderGridTableRowProps) => {\n const product = props.data.product.productLine.fullProduct?.ProductDetails;\n const productListLine = props.data.product.productLine.productListLine;\n const { min, max, quantity } = props;\n const columnWithNumberClassName = `${props.className}__column-with-number`;\n if (product !== undefined) {\n let productUrl = '';\n if (!StringExtensions.isNullOrWhitespace(product.Name) && !ObjectExtensions.isNullOrUndefined(product.RecordId)) {\n productUrl = getProductPageUrlSync(product.Name!, product.RecordId, props.context.actionContext);\n }\n\n return (\n <>\n \n \n \n {product.ItemId}\n \n
    \n \n {product.Name}\n \n \n {product.Dimensions?.map(dimension => dimension.DimensionValue?.Value)\n .filter(dimensionValue => !StringExtensions.isNullOrWhitespace(dimensionValue))\n .join(props.resources.quickOrderGridProductDimensionsSeparator)}\n \n
    \n \n {renderProductPrice(props)}\n {renderUnitOfMeasure(props)}\n \n \n \n \n \n \n \n );\n }\n\n return null;\n};\n\n/**\n * Renders rows for mobile view.\n * @param props - Configuration for the rows.\n * @returns A react node with a list of quick order grid rows for mobile view.\n */\nexport const QuickOrderGridMobileTableRowCellComponent: React.FC = (props: IQuickOrderGridTableRowProps) => {\n const product = props.data.product.productLine.fullProduct?.ProductDetails;\n const productListLine = props.data.product.productLine.productListLine;\n const { min, max, quantity } = props;\n if (product !== undefined) {\n return (\n <>\n \n \n \n \n
    \n {product.RecordId}\n \n \n \n
    \n \n \n \n \n \n );\n }\n return null;\n};\n\n/**\n * Quick order table row component.\n * @param props - Configuration of the component.\n * @returns React node for the row.\n */\nexport const QuickOrderGridTableRowComponent: React.FC = (props: IQuickOrderGridTableRowProps) => {\n const rowClassName = `${props.className}__row`;\n const isMobileView = isMobile({ variant: VariantType.Viewport, context: props.context.request }) === 'xs';\n let headerCells: JSX.Element;\n if (isMobileView) {\n headerCells = ;\n } else {\n headerCells = ;\n }\n\n return (\n \n {headerCells}\n \n );\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport MsDyn365, { IComponent, IComponentProps, ICoreContext, IImageSettings } from '@msdyn365-commerce/core';\nimport React from 'react';\n\nimport { ObjectExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport { QuickOrderGridProduct } from '../quick-order-grid-product';\nimport { IQuickOrderGridRowCallbacks } from '../utilities';\nimport {\n IQuickOrderGridTableHeaderResources,\n IQuickOrderGridTableRowResources,\n QuickOrderGridTableHeaderComponent,\n QuickOrderGridTableRowComponent\n} from './components';\n\n/**\n * Quick order table data interface.\n */\ninterface IQuickOrderGridTableData {\n quickOrderGridProducts: QuickOrderGridProduct[];\n isOrderQuantityLimitsFeatureEnabled: boolean;\n}\n\n/**\n * Quick order table resources.\n */\nexport interface IQuickOrderGridTableResources extends IQuickOrderGridTableHeaderResources, IQuickOrderGridTableRowResources {}\n\n/**\n * Quick order table props.\n */\nexport interface IQuickOrderGridTableProps extends IComponentProps {\n context: ICoreContext;\n className: string;\n moduleId: string;\n moduleTypeName: string;\n\n resources: IQuickOrderGridTableResources;\n isMobileView: boolean;\n imageSettings?: IImageSettings;\n callBacks: IQuickOrderGridRowCallbacks;\n}\n\n/**\n * Quick order table component.\n */\nexport interface IQuickOrderGridTableComponent extends IComponent {}\n\n/**\n * The quick order table.\n * @param props -- The quick order table props.\n * @returns The quick order table element.\n */\nexport const QuickOrderGridTableComponent: React.FC = (props: IQuickOrderGridTableProps) => {\n const [isMobile, setIsMobile] = React.useState(props.isMobileView);\n const quickOrderGridProducts = props.data.quickOrderGridProducts;\n const isOrderQuantityLimitsFeatureEnabled = props.data.isOrderQuantityLimitsFeatureEnabled;\n\n /**\n * Update the view port.\n */\n const updateViewport = () => {\n setIsMobile(props.isMobileView);\n };\n\n if (MsDyn365.isBrowser) {\n window.addEventListener('resize', updateViewport);\n }\n\n const headerClassName = `${props.className}__header`;\n const rowClassName = `${props.className}__row`;\n\n return (\n \n \n {quickOrderGridProducts.map((quickOrderProduct, index) => {\n let quantity = quickOrderProduct.productLine.productListLine.Quantity!;\n const product = quickOrderProduct.productLine.fullProduct;\n let min: number = 1;\n let max: number = 10;\n const behavior = product?.ProductDetails?.Behavior;\n if (isOrderQuantityLimitsFeatureEnabled && !ObjectExtensions.isNullOrUndefined(behavior)) {\n if (behavior.MinimumQuantity && behavior.MinimumQuantity > 0) {\n min = behavior.MinimumQuantity;\n }\n if (behavior.MaximumQuantity && behavior.MaximumQuantity > 0) {\n max = behavior.MaximumQuantity;\n }\n quantity = Math.max(quantity, min);\n }\n const price = quickOrderProduct.productLine.fullProduct?.ProductPrice;\n return (\n \n );\n })}\n
    \n );\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport {\n getProductConfigure,\n IProductDimensionCallbacks,\n IProductDimensionConfigureResources,\n IProductDimensionConfigureViewProps\n} from '@msdyn365-commerce/components';\nimport {\n ProductDimension,\n ProductDimensionType,\n ProductDimensionValue,\n ProductListsDataActions,\n ProductListType,\n SimpleProduct\n} from '@msdyn365-commerce/retail-proxy';\nimport {\n addItemToProductListAction,\n AddItemToProductListInput,\n ArrayExtensions,\n createProductList,\n CreateProductListInput,\n FinitePromiseQueue,\n FinitePromiseQueueError,\n getDimensionsForSelectedVariant,\n GetDimensionsForSelectedVariantInput,\n getScanResult,\n GetScanResultInput,\n getSelectedVariant,\n IDimensionForSelectedVariant,\n IPromiseQueue,\n ObjectExtensions,\n QuickOrderTemplate,\n QuickOrderTemplateLine,\n SelectedVariantInput,\n StringExtensions\n} from '@msdyn365-commerce-modules/retail-actions';\nimport {\n getTelemetryObject,\n Heading,\n IModuleProps,\n INodeProps,\n isMobile,\n ITelemetryContent,\n VariantType\n} from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport { debounce } from 'lodash';\nimport { computed } from 'mobx';\nimport * as React from 'react';\n\nimport { ActiveProductListInput } from './actions';\nimport {\n EcommerceQuantityLimitConfigurationsFeatureName,\n IQuickOrderGridActionsProps,\n IQuickOrderGridActionsViewProps,\n IQuickOrderGridRowCallbacks,\n IQuickOrderGridState,\n QuickOrderGridActionsView,\n QuickOrderGridDrawer,\n QuickOrderGridFormComponent,\n QuickOrderGridProduct,\n QuickOrderGridTableComponent,\n RetailDefaultOrderQuantityLimitsFeatureName\n} from './components';\nimport { IQuickOrderGridData } from './quick-order-grid.data';\nimport { IQuickOrderGridProps, IQuickOrderGridResources } from './quick-order-grid.props.autogenerated';\n\n/**\n * QuickOrder Grid View props.\n */\nexport interface IQuickOrderGridViewProps extends IQuickOrderGridProps {\n header: JSX.Element;\n actions?: INodeProps;\n isB2bCustomer?: boolean;\n isQuickOrderGridFormExpanded: boolean;\n contentProps: INodeProps;\n drawer: INodeProps;\n loading?: React.ReactNode;\n quickOrderGridForm: INodeProps;\n quickOrderGridFormProductContent: INodeProps;\n quickOrderGridFormMsgContent: INodeProps;\n quickOrderGridProps: IModuleProps;\n form: React.ReactNode;\n configure?: IProductDimensionConfigureViewProps;\n isMobileView: boolean;\n container?: JSX.Element;\n orderActions?: IQuickOrderGridActionsViewProps | null;\n bulkPurchase?: React.ReactNode;\n}\n\n/**\n * QuickOrder Grid View port.\n */\nexport type GridSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n\n/**\n * QuickOrderGrid component.\n * @extends {React.PureComponent>}\n */\nclass QuickOrderGrid extends React.PureComponent, IQuickOrderGridState> {\n private readonly _productTextInput: React.RefObject;\n\n private readonly _quantityInput: React.RefObject;\n\n private readonly _waitTime: number = 500;\n\n private readonly _dimensionUpdateQueueMaxLength: number = 2;\n\n private readonly _errorCssClass: string = 'danger';\n\n private readonly _errorCssGlyphClass: string = 'fas fa-exclamation-triangle';\n\n private readonly _quickOrderGridFormClass: string;\n\n private readonly _quickOrderGridFormProductContent: string;\n\n private readonly _quickOrderGridFormMsgContent: string;\n\n private readonly _telemetryContent: ITelemetryContent;\n\n private readonly _dimensionUpdateQueue: IPromiseQueue = new FinitePromiseQueue(this._dimensionUpdateQueueMaxLength);\n\n private _dimensions: { [id: number]: string } = {};\n\n private _initializedDimensions: Set = new Set();\n\n private readonly _cssClassNameConfigure: string = 'ms-quick-order_grid__content-form-main';\n\n private readonly _className: string = 'ms-quick-order-grid';\n\n // @ts-expect-error: Debouce needs to be used as type.\n private _cancellabelDebounce: debounce;\n\n private _isOrderQuantityLimitsFeatureEnabled: boolean = false;\n\n private _isChannelLimitsFeatureEnabled: boolean = false;\n\n private _applyDefaultOrderSettingsForCartLine: boolean = false;\n\n private readonly _quickOrderGridCallbacks: IProductDimensionCallbacks = {\n initializeDimension: (initializedDimension: string): void => {\n if (initializedDimension) {\n this._initializedDimensions.add(initializedDimension);\n }\n },\n /**\n * Get Dropdown name.\n * @param selectedDimensionId - Dimension type.\n * @param selectedDimensionValueId - Resources.\n * @returns Dropdown name.\n */\n dimensionSelectedAsync: async (selectedDimensionId: number, selectedDimensionValueId: string): Promise => {\n this._dimensions[selectedDimensionId] = selectedDimensionValueId;\n // Only trigger _updateDimensions when all dimensions are initialized\n if (this._initializedDimensions.size === this.state.productDimensions?.length) {\n return this._dimensionUpdateQueue\n .enqueue(async () => {\n return this._updateDimensions();\n })\n .catch((error: string) => {\n // Ignore discarded processes.\n if (error !== FinitePromiseQueueError.ProcessWasDiscardedFromTheQueue) {\n throw new Error(error);\n }\n });\n }\n },\n\n /**\n * Get Dropdown name.\n * @param dimensionType - Dimension type.\n * @param resources - Resources.\n * @returns Dropdown name.\n */\n getDropdownName: (dimensionType: number, resources: IProductDimensionConfigureResources): string => {\n return this._getDropdownName(dimensionType, resources);\n },\n\n /**\n * Method to call on dimension change.\n * @param isUpdatingDimension - Flag to update dimension.\n */\n changeUpdatingDimension: (isUpdatingDimension: boolean): void => {\n this.setState({ isUpdatingDimension });\n }\n };\n\n private readonly _quickOrderGridRowCallbacks: IQuickOrderGridRowCallbacks = {\n /**\n * Method to call remove button.\n * @param line - Grid row product.\n */\n onRemoveItem: (line: QuickOrderGridProduct): void => {\n this._removeItemRowFromTable(line.productLine);\n },\n\n /**\n * Method to call on change quantity button.\n * @param productListLineId - Grid row product list line id.\n * @param quantity - Product quantity.\n * @returns - Falg to get confirmation for action.\n */\n onChangeQuantity: (productListLineId: string | undefined, quantity: number): boolean => {\n return this._changeRowQuantity(productListLineId, quantity);\n }\n };\n\n public constructor(props: IQuickOrderGridProps) {\n super(props);\n this._productTextInput = React.createRef();\n this._quantityInput = React.createRef();\n\n this._telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n this.state = {\n isQuickOrderGridFormExpanded: false,\n min: 0,\n max: 10,\n quantity: 1,\n productResponse: undefined,\n productDimensions: undefined,\n productDimensionErrorState: {\n configureErrors: {}\n },\n isMobile: this.isMobile,\n products: [],\n isUpdatingDimension: false,\n productListId: ''\n };\n\n this._quickOrderGridFormClass = 'ms-quick-order-grid__content-form';\n this._quickOrderGridFormProductContent = 'ms-quick-order-grid__content-form-main';\n this._quickOrderGridFormMsgContent = 'ms-quick-order-grid__content-form-msg';\n\n this._isOrderQuantityLimitsFeatureEnabled =\n this.props.data.featureState.result?.find(featureState => featureState.Name === RetailDefaultOrderQuantityLimitsFeatureName)\n ?.IsEnabled ?? false;\n\n this._isChannelLimitsFeatureEnabled =\n this.props.data.featureState.result?.find(featureState => featureState.Name === EcommerceQuantityLimitConfigurationsFeatureName)\n ?.IsEnabled ?? false;\n\n const cartConfiguration = this.props.data.cartConfiguration;\n this._applyDefaultOrderSettingsForCartLine = cartConfiguration?.result?.ValidateDefaultOrderSettingsPerLine ?? false;\n }\n\n @computed public get isMobile(): boolean {\n const size = isMobile({ variant: VariantType.Viewport, context: this.props.context.request });\n return size === 'xs';\n }\n\n public render(): JSX.Element | null {\n const { data } = this.props;\n if (!data.customerInformation.result) {\n return null;\n }\n const quickOrderTemplate = data.quickOrderTemplate;\n\n if (quickOrderTemplate?.result !== undefined) {\n this.setState({\n products: quickOrderTemplate.result.quickOrderTemplateLines,\n productListId: quickOrderTemplate.result.productList.Id\n });\n }\n const { className = '', maxQuantity } = this.props.config;\n const customerInfo = this.props.data.customerInformation.result;\n const {\n quickOrderGridModuleHeading,\n quickOrderGridModuleDescription,\n quickOrderGridAddtogrid,\n quickOrderGridProductQuantityInputLabel,\n quickOrderGridProductInputLabel,\n quickOrderGridProductDimensionTypeColor,\n quickOrderGridProductDimensionTypeConfiguration,\n quickOrderGridSelectDimensionFormatString,\n quickOrderGridProductDimensionTypeSize,\n quickOrderGridProductDimensionTypeStyle,\n quickOrderGridProductDimensionTypeAmount,\n quickOrderGridModulePageHeading\n } = this.props.resources;\n\n const productConfigureResources: IProductDimensionConfigureResources = {\n selectDimensionFormatString: quickOrderGridSelectDimensionFormatString,\n productDimensionTypeColor: quickOrderGridProductDimensionTypeColor,\n productDimensionTypeConfiguration: quickOrderGridProductDimensionTypeConfiguration,\n productDimensionTypeSize: quickOrderGridProductDimensionTypeSize,\n productDimensionTypeStyle: quickOrderGridProductDimensionTypeStyle,\n productDimensionTypeAmount: quickOrderGridProductDimensionTypeAmount\n };\n\n const { isQuickOrderGridFormExpanded, productDimensionErrorState, productResponse, productDimensions } = this.state;\n\n const headerClassName = `${this._className}__header`;\n\n const header = (\n
    \n \n
    \n );\n\n const viewProps: IQuickOrderGridViewProps = {\n ...(this.props as IQuickOrderGridProps),\n\n quickOrderGridProps: { className: classnames('ms-quick-order-grid', className), moduleProps: this.props },\n contentProps: { className: 'ms-quick-order-grid__content' },\n isB2bCustomer: customerInfo?.IsB2b,\n header,\n actions: {\n className: `${this._className}-action-bar`,\n tag: 'div'\n },\n drawer: {\n tag: QuickOrderGridDrawer,\n className: `${this._className}__drawer`,\n collapseProps: { isOpen: this.state.isQuickOrderGridFormExpanded },\n moduleHeadingText: quickOrderGridModuleHeading,\n moduleDescriptionText: quickOrderGridModuleDescription,\n requestContext: this.props.context.request,\n telemetryContent: this._telemetryContent\n },\n bulkPurchase: this._renderBulkPurchase(),\n quickOrderGridForm: {\n className: `${this._quickOrderGridFormClass} ${isQuickOrderGridFormExpanded ? 'qo-show' : 'qo-hide'}`\n },\n quickOrderGridFormProductContent: {\n className: this._quickOrderGridFormProductContent\n },\n quickOrderGridFormMsgContent: {\n className: this._quickOrderGridFormMsgContent\n },\n form: QuickOrderGridFormComponent({\n productTextInput: this._productTextInput,\n quantityTextInput: this._quantityInput,\n isAddtoListDisabled: !productResponse,\n ariaLabelAddtoCart: quickOrderGridAddtogrid,\n ariaLabelProduct: quickOrderGridProductInputLabel,\n ariaLabelQuantity: quickOrderGridProductQuantityInputLabel,\n maxChars: 50,\n minQuantity: this.state.min ?? 0,\n maxQuantity: this.state.max ?? maxQuantity,\n moduleClassName: this._className,\n quickOrderGridState: this.state,\n handleInputChange: this._handleInputChange,\n handleQuantityChange: this._handleQuantityChange,\n handleAddProductListClick: this._addItemToProductListLine\n }),\n configure:\n productResponse && productDimensions\n ? getProductConfigure(\n this._cssClassNameConfigure,\n this.props.context,\n this.props.friendlyName,\n this.props.telemetry,\n quickOrderGridSelectDimensionFormatString,\n productConfigureResources,\n this._quickOrderGridCallbacks,\n productResponse,\n productDimensions,\n productDimensionErrorState\n )\n : undefined,\n isQuickOrderGridFormExpanded: this.state.isQuickOrderGridFormExpanded,\n isMobileView: this.state.isMobile,\n container: ArrayExtensions.hasElements(this.state.products) ? this._renderListContainer() : undefined,\n orderActions: this._renderQuickOrderGridActions(quickOrderTemplate?.result)\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n private _renderQuickOrderGridActions(quickOrderTemplate: QuickOrderTemplate | undefined): IQuickOrderGridActionsViewProps | null {\n const { typeName, context, resources } = this.props;\n const {\n quickOrderGridDeleteButtonText,\n quickOrderGridBuySelectedButtonText,\n quickOrderGridBuySelectedButtonAriaLabel,\n quickOrderGridBuySelectedAddingToCartErrorNotificationTitle,\n quickOrderGridBuySelectedAddingToCartErrorNotificationCloseAriaLabel,\n quickOrderGridGoToCartText,\n quickOrderGridDialogCloseText,\n quickOrderGridSingleItemText,\n quickOrderGridMultiLineItemFormatText,\n quickOrderGridMultiLinesFormatText,\n quickOrderGridHeaderMessageText,\n addedQuantityText,\n originalPriceText,\n currentPriceText,\n freePriceText\n } = resources;\n if (ArrayExtensions.hasElements(quickOrderTemplate?.quickOrderTemplateLines)) {\n const quickOrderGridActions: IQuickOrderGridActionsProps = {\n data: { quickOrderTemplate },\n moduleClassName: this._className,\n id: 'quick-order-grid',\n typeName,\n context,\n handlers: {\n removeProductList: this._removeProductList,\n onErrorMessage: (message: string) =>\n this.setState({\n topStateMessage: {\n messageText: message,\n statusCssString: this._errorCssClass,\n messageGlyph: this._errorCssGlyphClass,\n isOpen: true\n }\n })\n },\n quickOrderGridState: this.state,\n resources: {\n quickOrderGridDeleteButtonText,\n quickOrderGridBuySelectedButtonText,\n quickOrderGridBuySelectedButtonAriaLabel,\n quickOrderGridBuySelectedAddingToCartErrorNotificationTitle,\n quickOrderGridBuySelectedAddingToCartErrorNotificationCloseAriaLabel,\n quickOrderGridGoToCartText,\n quickOrderGridDialogCloseText,\n quickOrderGridSingleItemText,\n quickOrderGridMultiLineItemFormatText,\n quickOrderGridMultiLinesFormatText,\n quickOrderGridHeaderMessageText,\n addedQuantityText,\n originalPriceText,\n currentPriceText,\n freePriceText\n }\n };\n\n return QuickOrderGridActionsView(quickOrderGridActions);\n }\n return null;\n }\n\n /**\n * Renders bulk purchase module.\n * @returns Bulk purchase module react node.\n */\n private _renderBulkPurchase(): React.ReactNode {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- Temporary switch for the feature which is under development.\n if (!this.props.context.app.config.isBulkPurchaseEnabled) {\n return null;\n }\n\n if (!ArrayExtensions.hasElements(this.props.slots.bulkPurchaseSlots)) {\n return null;\n }\n\n const containerClass = `${this._className}__bulk-purchase`;\n return (\n
    \n {React.cloneElement(this.props.slots.bulkPurchaseSlots[0] as React.ReactElement, {\n productDimensions: this.state.productDimensions\n })}\n
    \n );\n }\n\n /**\n * Render list container.\n * @returns JSX element.\n */\n private _renderListContainer(): JSX.Element {\n const containerClass = `${this._className}__table-content`;\n return
    {this._renderQuickOrderTable(this._className)}
    ;\n }\n\n /**\n * Initial the products on quick order.\n * @returns List of quick order products or undefined.\n */\n private _initQuickOrderGridProducts(): QuickOrderGridProduct[] {\n const products: QuickOrderTemplateLine[] = this.state.products;\n\n const quickOrderGridProduct: QuickOrderGridProduct[] = products.map((product: QuickOrderTemplateLine) => {\n return new QuickOrderGridProduct(product);\n });\n\n return ArrayExtensions.validValues(quickOrderGridProduct);\n }\n\n /**\n * Method to call on clear button.\n */\n private readonly _removeProductList = () => {\n const { context, data, telemetry, resources } = this.props;\n const { quickOrderTemplate } = data;\n const userToken = context.request.user.isAuthenticated && context.request.user.token;\n if (userToken && quickOrderTemplate && quickOrderTemplate.result) {\n ProductListsDataActions.deleteAsync({ callerContext: context.actionContext }, quickOrderTemplate.result.productList)\n .then(() => {\n window.location.reload();\n })\n .catch((error: string) => {\n telemetry.warning('[quick-order-grid] Unable to delete product list.');\n telemetry.error(error);\n this._updateStatusState(\n resources.quickOrderGridDeleteProductListFailedText,\n this._errorCssClass,\n this._errorCssGlyphClass,\n true\n );\n });\n } else {\n telemetry.warning('[quick-order-grid] Failed to delete product list. Product List was not found');\n }\n };\n\n /**\n * Initial the products on quick order.\n * @param className - Class name.\n * @returns JSX element.\n */\n private _renderQuickOrderTable(className: string): JSX.Element {\n const tableClassName = `${className}__table-list`;\n\n return (\n \n );\n }\n\n private _updateQuantitiesInState(product: SimpleProduct): void {\n const min: number = this._getMinQuantityForCartLineItem(this._isOrderQuantityLimitsFeatureEnabled, product);\n const max: number = this._getMaxQuantityForCartLineItem(\n this._isChannelLimitsFeatureEnabled || this._isOrderQuantityLimitsFeatureEnabled,\n product\n );\n let quantity: number = this._getQuantity(\n this._isOrderQuantityLimitsFeatureEnabled,\n this._applyDefaultOrderSettingsForCartLine,\n product\n );\n quantity = Math.max(quantity, min);\n\n this.setState({\n min,\n max,\n quantity\n });\n }\n\n private _getMinQuantityForCartLineItem(isOrderQuantityLimitsFeatureEnabled: boolean, product: SimpleProduct): number {\n if (isOrderQuantityLimitsFeatureEnabled && product?.Behavior?.MinimumQuantity && product.Behavior.MinimumQuantity > 0) {\n return product.Behavior.MinimumQuantity;\n }\n\n return 1;\n }\n\n private _getMaxQuantityForCartLineItem(isQuantityLimitsFeatureEnabled: boolean, product: SimpleProduct): number {\n if (isQuantityLimitsFeatureEnabled && product?.Behavior?.MaximumQuantity && product.Behavior.MaximumQuantity > 0) {\n return product.Behavior.MaximumQuantity;\n }\n\n return this.props.context.app.config.maxQuantityForCartLineItem;\n }\n\n private _getQuantity(\n isOrderQuantityLimitsFeatureEnabled: boolean,\n applyDefaultOrderSettingsForCartLine: boolean,\n product: SimpleProduct\n ): number {\n let defaultQuantity = 1;\n\n if (!isOrderQuantityLimitsFeatureEnabled || !applyDefaultOrderSettingsForCartLine) {\n return defaultQuantity;\n }\n\n if (product?.Behavior?.DefaultQuantity && product.Behavior.DefaultQuantity > 0) {\n defaultQuantity = product.Behavior.DefaultQuantity;\n }\n\n return defaultQuantity;\n }\n\n /**\n * Method to called on product input change.\n * @param query - Product inventory info.\n */\n private readonly _handleInputChange = (query: string): void => {\n const queryMinLength = 4;\n if (!query || query.length > queryMinLength) {\n this.setState({ quantity: 0, productDimensions: [], productResponse: undefined });\n this._updateStatusState('', '', '', false);\n }\n if (this._cancellabelDebounce) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call -- existing code.\n this._cancellabelDebounce.cancel();\n }\n\n const { telemetry, context } = this.props;\n const zeroNumber = 0;\n if (!StringExtensions.isNullOrEmpty(query)) {\n this._cancellabelDebounce = debounce(() => {\n getScanResult(\n new GetScanResultInput(\n context.actionContext.requestContext.apiSettings,\n query,\n context.actionContext.requestContext.apiSettings.channelId\n ),\n this.props.context.actionContext\n )\n .then(results => {\n this.setState({\n productResponse: results?.Product,\n productDimensions: results?.ProductDimensionFull,\n isQuickOrderGridFormExpanded: true\n });\n if (results?.Product) {\n this._updateQuantitiesInState(results.Product);\n }\n })\n .catch((error: Error) => {\n telemetry.exception(error);\n telemetry.debug('Unable to get scan results');\n });\n }, this._waitTime);\n\n setTimeout(() => {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call -- Existing code.\n this._cancellabelDebounce();\n }, zeroNumber);\n this.setState({ isQuickOrderGridFormExpanded: true });\n } else {\n this.setState({ productResponse: undefined, isQuickOrderGridFormExpanded: true });\n }\n };\n\n /**\n * Method to called on quantity change.\n * @param value - Quantity value.\n */\n private readonly _handleQuantityChange = (value: string): void => {\n let currentValue = Number.parseInt(value, 10);\n const inputElement = this._quantityInput.current instanceof HTMLInputElement && this._quantityInput.current;\n const quantityChangeDebounceTimeout = 200;\n let minimumQuantity = 0;\n let needToUpdateUIValue: boolean = false;\n if (this._isOrderQuantityLimitsFeatureEnabled && !ObjectExtensions.isNullOrUndefined(this.state.productResponse?.Behavior)) {\n const behavior = this.state.productResponse!.Behavior;\n minimumQuantity = behavior?.MinimumQuantity ?? 0;\n const newCurrentValue = Math.max(currentValue, minimumQuantity);\n if (newCurrentValue !== currentValue) {\n needToUpdateUIValue = true;\n }\n currentValue = newCurrentValue;\n }\n\n this.setState({ quantity: currentValue }, () => {\n debounce(() => {\n if (needToUpdateUIValue && !Number.isNaN(this.state.quantity) && inputElement) {\n inputElement.setAttribute('aria-valuenow', currentValue.toString());\n inputElement.value = currentValue.toString();\n }\n }, quantityChangeDebounceTimeout)();\n });\n };\n\n /**\n * Method to get dropdwon name.\n * @param dimensionType - Dimension Type.\n * @param resources - String resources.\n * @returns Dropdwon label.\n */\n private readonly _getDropdownName = (dimensionType: number, resources: IProductDimensionConfigureResources): string => {\n const isGiftCard = this.state.productResponse?.IsGiftCard;\n\n switch (dimensionType) {\n case ProductDimensionType.Color: // ProductDimensionType.Color\n return resources.productDimensionTypeColor;\n case ProductDimensionType.Configuration: // ProductDimensionType.Configuration\n return resources.productDimensionTypeConfiguration;\n case ProductDimensionType.Size: // ProductDimensionType.Size\n return resources.productDimensionTypeSize;\n case ProductDimensionType.Style: // ProductDimensionType.Style\n return isGiftCard ? resources.productDimensionTypeAmount : resources.productDimensionTypeStyle;\n default:\n return '';\n }\n };\n\n /**\n * Method to update dimension and product in UI.\n */\n private readonly _updateDimensions = async (): Promise => {\n const {\n context: {\n actionContext,\n request: {\n apiSettings: { channelId }\n }\n }\n } = this.props;\n const { productDimensions, productResponse } = this.state;\n const hasProductDimensions = ArrayExtensions.hasElements(productDimensions);\n if (!productResponse || !hasProductDimensions) {\n return;\n }\n\n const dimensionsToUpdate: { [id: number]: string } = { ...this._dimensions };\n this.setState({ isUpdatingDimension: true });\n\n // eslint-disable-next-line no-console -- Testing.\n console.log(this.state.isUpdatingDimension);\n\n // Step 1: Update state to indicate which dimensions are selected\n if (this.state.productDimensionErrorState.otherError) {\n // eslint-disable-next-line react/no-access-state-in-setstate -- existing code.\n const clearOtherErrorState = { ...this.state.productDimensionErrorState };\n clearOtherErrorState.otherError = undefined;\n this.setState({ productDimensionErrorState: clearOtherErrorState });\n }\n\n // Step 2: Clear any errors indicating the dimension wasn't selected\n for (const dimensionKey of Object.keys(dimensionsToUpdate)) {\n if (this.state.productDimensionErrorState.configureErrors[dimensionKey]) {\n // eslint-disable-next-line react/no-access-state-in-setstate -- existing code.\n const errorState = { ...this.state.productDimensionErrorState };\n errorState.configureErrors[dimensionKey] = undefined;\n\n this.setState({ productDimensionErrorState: errorState });\n }\n }\n\n // Step 3, Build the actually selected dimensions, prioritizing the information in state\n // over the information in data\n const mappedDimensions = productDimensions\n ?.map(dimension => {\n return {\n DimensionTypeValue: dimension.DimensionTypeValue,\n DimensionValue:\n this._updateDimensionValue(dimension, dimensionsToUpdate[dimension.DimensionTypeValue]) ?? dimension.DimensionValue,\n ExtensionProperties: dimension.ExtensionProperties\n };\n })\n .filter(dimension => {\n return dimension.DimensionValue;\n });\n\n // Step 4. Use these dimensions hydrate the product. Wrap this in a promise\n // so that places like add to cart can await it\n // eslint-disable-next-line no-async-promise-executor -- existing code\n const selectedProduct = new Promise(async resolve => {\n const newProduct = await getSelectedVariant(\n new SelectedVariantInput(\n productResponse.MasterProductId ? productResponse.MasterProductId : productResponse.RecordId,\n channelId,\n mappedDimensions,\n undefined,\n this.props.context.request\n ),\n actionContext\n );\n if (newProduct) {\n await getDimensionsForSelectedVariant(\n new GetDimensionsForSelectedVariantInput(\n newProduct.MasterProductId ? newProduct.MasterProductId : newProduct.RecordId,\n channelId,\n mappedDimensions,\n this.props.context.request\n ),\n actionContext\n );\n }\n\n resolve(newProduct);\n });\n\n const variantProduct = await selectedProduct;\n this.setState({ productResponse: variantProduct !== null ? variantProduct : undefined });\n };\n\n /**\n * Method to get updated dimension value.\n * @param productDimensionFull - Product dimension full.\n * @param newValueId - New Dimension value.\n * @returns Dimension Value.\n */\n private readonly _updateDimensionValue = (\n productDimensionFull: IDimensionForSelectedVariant,\n newValueId: string | undefined\n ): ProductDimensionValue | undefined => {\n if (newValueId && productDimensionFull.DimensionValues) {\n return productDimensionFull.DimensionValues.find(dimension => dimension.RecordId === +newValueId);\n }\n\n return undefined;\n };\n\n /**\n * Method to get dropdwon name.\n * @param dimensionTypeValue - Dimension Type.\n * @param resources - String resources.\n * @param isGiftCard - Flag to check if its a giftcard product.\n * @returns Dropdwon error label.\n */\n private readonly _getDimensionErrorString = (\n dimensionTypeValue: number,\n resources: IQuickOrderGridResources,\n isGiftCard?: boolean\n ): string => {\n const amountErrorMessage = resources.quickOrderGridproductDimensionTypeAmountErrorMessage;\n\n switch (dimensionTypeValue) {\n case ProductDimensionType.Color: // ProductDimensionType.Color\n return resources.quickOrderGridproductDimensionTypeColorErrorMessage;\n case ProductDimensionType.Configuration: // ProductDimensionType.Configuration\n return resources.quickOrderGridproductDimensionTypeConfigurationErrorMessage;\n case ProductDimensionType.Size: // ProductDimensionType.Size\n return resources.quickOrderGridproductDimensionTypeSizeErrorMessage;\n case ProductDimensionType.Style: // ProductDimensionType.Style\n return isGiftCard ? amountErrorMessage : resources.quickOrderGridproductDimensionTypeStyleErrorMessage;\n default:\n return '';\n }\n };\n\n /**\n * Initial the products on quick order.\n * @param productResponse - Simple Product.\n * @param quantity - Product Quantity.\n * @returns Flag to validate productlistline.\n */\n private readonly _validateCart = (productResponse: SimpleProduct, quantity: number): boolean => {\n // eslint-disable-next-line @typescript-eslint/prefer-optional-chain -- existing code\n const missingDimensions = productResponse.Dimensions?.filter(\n dimension => !(dimension.DimensionValue && dimension.DimensionValue.Value)\n );\n const minimumQuantity = 0;\n if (ArrayExtensions.hasElements(missingDimensions)) {\n const userMessage = this._getConfigureErrors(missingDimensions, false);\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- existing code\n if (this.state.productDimensionErrorState.configureErrors) {\n // eslint-disable-next-line react/no-access-state-in-setstate -- existing code\n const errorState = { ...this.state.productDimensionErrorState };\n errorState.configureErrors = userMessage;\n\n this.setState({ productDimensionErrorState: errorState });\n return false;\n }\n }\n\n if (quantity <= minimumQuantity) {\n const resources = this.props.resources;\n this._updateStatusState(resources.quickOrderGridWrongQuantityErrorMsg, this._errorCssClass, this._errorCssGlyphClass, true);\n return false;\n }\n return true;\n };\n\n /**\n * Initial the products on quick order.\n * @param result - Simple Product.\n * @param isGiftCard - Product Quantity.\n * @returns Flag to validate cart.\n */\n private _getConfigureErrors(\n result: ProductDimension[] | undefined,\n isGiftCard?: boolean\n ): { [configureId: string]: string | undefined } {\n if (!result) {\n return {};\n }\n const dimensions: { [configureId: string]: string | undefined } = {};\n const resources = this.props.resources;\n for (const dimension of result) {\n dimensions[dimension.DimensionTypeValue] = this._getDimensionErrorString(dimension.DimensionTypeValue, resources, isGiftCard);\n }\n return dimensions;\n }\n\n /**\n * Method to call on quantity change in row.\n * @param itemKey - Product Key.\n * @param quantity - Product quantity.\n * @returns Flag to update status.\n */\n private readonly _changeRowQuantity = (itemKey: string | undefined, quantity: number): boolean => {\n const { context, data, telemetry } = this.props;\n const { quickOrderTemplate } = data;\n if (quickOrderTemplate?.result) {\n const quickOrderTemplateLinesData = quickOrderTemplate.result.quickOrderTemplateLines;\n if (ArrayExtensions.hasElements(quickOrderTemplateLinesData)) {\n const orderLineIndex = quickOrderTemplateLinesData.findIndex(\n (lines: QuickOrderTemplateLine) => lines.productListLine.LineId === itemKey\n );\n const newProductListLine = { ...quickOrderTemplateLinesData[orderLineIndex] };\n if (quickOrderTemplateLinesData[orderLineIndex].productListLine.Quantity === quantity) {\n return true;\n }\n const previousQuantity = newProductListLine.productListLine.Quantity;\n newProductListLine.productListLine.Quantity = quantity;\n const { fullProduct, ...line } = newProductListLine;\n\n ProductListsDataActions.updateProductListLinesAsync(\n { callerContext: context.actionContext },\n quickOrderTemplate.result.productList.Id,\n [line.productListLine]\n )\n .then(list => {\n if (ArrayExtensions.hasElements(list)) {\n const newLine = list.find(lines => lines.LineId === itemKey);\n quickOrderTemplateLinesData[orderLineIndex].productListLine = newLine!;\n const updatedLines = [...quickOrderTemplateLinesData];\n updatedLines[orderLineIndex] = { fullProduct, productListLine: newLine! };\n const updatedProductList = { ...quickOrderTemplate.result, ProductListLines: updatedLines };\n context.actionContext.update(\n new ActiveProductListInput(context.actionContext.requestContext),\n updatedProductList\n );\n return true;\n }\n\n return false;\n })\n .catch((error: Error) => {\n telemetry.warning('[quick-order-grid] Unable to update product quantity.');\n telemetry.error(error.message);\n const userMessage = 'Failed to update quantity value.';\n newProductListLine.productListLine.Quantity = previousQuantity;\n this._updateStatusState(userMessage, this._errorCssClass, this._errorCssGlyphClass, true);\n return false;\n });\n }\n return false;\n }\n\n return false;\n };\n\n /**\n * Method to call on remove item from table.\n * @param line - Order Template Line.\n */\n private readonly _removeItemRowFromTable = (line: QuickOrderTemplateLine): void => {\n const { context, data, telemetry } = this.props;\n const { quickOrderTemplate } = data;\n\n if (quickOrderTemplate?.result) {\n const userToken = context.request.user.isAuthenticated && context.request.user.token;\n if (userToken) {\n ProductListsDataActions.removeProductListLinesAsync(\n { callerContext: context.actionContext },\n line.productListLine.ProductListId!,\n [line.productListLine]\n )\n .then(() => {\n window.location.reload(false);\n })\n .catch((error: Error) => {\n telemetry.warning('[quick-order-grid] Unable remove item from product list grid');\n telemetry.error(error.message);\n });\n } else {\n telemetry.warning('[quick-order-grid] Unable remove items from product list grid user token was not found');\n }\n }\n };\n\n /**\n * Method to call on add item from form.\n */\n private readonly _addItemToProductListLine = async (): Promise => {\n const {\n context: { actionContext },\n resources,\n telemetry\n } = this.props;\n const {\n quickOrderGridAddedToGridSuccessMessage,\n quickOrderGridAddedToGridFailureMessage,\n quickOrderGridAddedToGridDuplicateError\n } = resources;\n const { productResponse, quantity, productListId } = this.state;\n\n this._updateStatusState('', '', '', false);\n\n if (productResponse !== undefined && this._validateCart(productResponse, quantity)) {\n if (StringExtensions.isNullOrWhitespace(productListId)) {\n await this._createProductList();\n }\n\n if (StringExtensions.isNullOrWhitespace(this.state.productListId)) {\n this._updateStatusState(quickOrderGridAddedToGridFailureMessage, this._errorCssClass, this._errorCssGlyphClass, true);\n return;\n }\n const input = new AddItemToProductListInput(\n this.state.productListId,\n productResponse.RecordId,\n quantity,\n productResponse.DefaultUnitOfMeasure ?? 'ea'\n );\n\n await addItemToProductListAction(input, actionContext)\n .then(result => {\n if (result.ProductListId) {\n this._updateStatusState(quickOrderGridAddedToGridSuccessMessage, 'success', 'fas fa-check', true);\n window.location.reload();\n this.setState({});\n }\n })\n .catch((error: Error) => {\n telemetry.debug('[quick-order-grid] Error trying to Update Grid Line from the quick order grid');\n if (error.name === 'Microsoft_Dynamics_Commerce_Runtime_DuplicateObject') {\n this._updateStatusState(\n quickOrderGridAddedToGridDuplicateError,\n this._errorCssClass,\n this._errorCssGlyphClass,\n true\n );\n } else {\n this._updateStatusState(\n quickOrderGridAddedToGridFailureMessage,\n this._errorCssClass,\n this._errorCssGlyphClass,\n true\n );\n }\n });\n }\n };\n\n /**\n * Method to create product list.\n * @returns - ProductListId.\n */\n private _createProductList = async (): Promise => {\n const {\n context: { actionContext },\n telemetry,\n resources\n } = this.props;\n const { productListId } = this.state;\n const { quickOrderGridAddedToGridFailureMessage } = resources;\n\n if (StringExtensions.isNullOrWhitespace(productListId)) {\n const input = new CreateProductListInput('', ProductListType.QuickOrder);\n\n await createProductList(input, actionContext)\n .then(result => {\n if (!StringExtensions.isNullOrWhitespace(result.Id)) {\n this.setState({ productListId: result.Id });\n return result.Id;\n }\n return '';\n })\n .catch((error: Error) => {\n telemetry.debug('[quick-order-grid] Error on creating productlist from quick order grid');\n telemetry.error(error.message);\n this._updateStatusState(quickOrderGridAddedToGridFailureMessage, this._errorCssClass, this._errorCssGlyphClass, true);\n return '';\n });\n return '';\n }\n\n return productListId;\n };\n\n /**\n * Method to create product list.\n * @param messageText - Message Text.\n * @param statusCssString - Css class names.\n * @param messageGlyph - Glyph string.\n * @param isOpen - Flag to show.\n */\n private readonly _updateStatusState = (messageText: string, statusCssString: string, messageGlyph: string, isOpen: boolean): void => {\n this.setState({\n // eslint-disable-next-line react/no-unused-state -- Showing user message in Form component.\n stateMessage: {\n messageText,\n statusCssString,\n messageGlyph,\n isOpen\n }\n });\n };\n}\nexport default QuickOrderGrid;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IErrorState } from '@msdyn365-commerce/components';\nimport { SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport { IDimensionForSelectedVariant, OrderTemplateLine } from '@msdyn365-commerce-modules/retail-actions';\n\nimport { QuickOrderGridProduct } from './quick-order-grid-product';\n\n/**\n * QuickOrderGrid state message Interface.\n */\nexport interface IQuickOrderGridStateMessage {\n isOpen: boolean;\n messageGlyph: string;\n messageText: string;\n statusCssString: string;\n}\n\n/**\n * QuickOrderGrid state Interface.\n */\nexport interface IQuickOrderGridState {\n isQuickOrderGridFormExpanded: boolean;\n isUpdatingDimension?: boolean;\n productResponse: SimpleProduct | undefined;\n productDimensions: IDimensionForSelectedVariant[] | undefined;\n min: number | undefined;\n max: number | undefined;\n quantity: number;\n stateMessage?: IQuickOrderGridStateMessage;\n topStateMessage?: IQuickOrderGridStateMessage;\n productDimensionErrorState: IErrorState;\n isMobile: boolean;\n products: OrderTemplateLine[];\n productListId: string;\n}\n\n/**\n * QuickOrder Grid Row view.\n */\nexport interface IQuickOrderGridRowViewModel extends OrderTemplateLine {\n isChecked: boolean;\n}\n\n/**\n * Interface for quick order callbacks.\n */\nexport interface IQuickOrderGridRowCallbacks {\n onRemoveItem(line: QuickOrderGridProduct): void;\n onChangeQuantity(orderTemplateLineId: string | undefined, quantity: number): boolean;\n}\n\n/**\n * Interface for quick order grid action view props.\n */\nexport interface IQuickOrderGridActionsViewProps {\n addProductListToBag: React.ReactNode;\n removeProductList?: React.ReactNode;\n userMessage?: React.ReactNode;\n}\n\nexport const RetailDefaultOrderQuantityLimitsFeatureName: string = 'Dynamics.AX.Application.RetailDefaultOrderQuantityLimitsFeature';\n\nexport const EcommerceQuantityLimitConfigurationsFeatureName: string =\n 'Dynamics.AX.Application.EcommerceQuantityLimitConfigurationsFeature';\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IProductDimensionConfigureDropdownViewProps, IProductDimensionConfigureViewProps } from '@msdyn365-commerce/components';\nimport { INodeProps, Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IQuickOrderGridViewProps, IQuickOrderGridFormViewProps } from './index';\n\n/**\n * Render product dimension/configure dropdown.\n * @param dropdown -- Product dimension drop down.\n * @returns Dropdown.\n */\nconst renderConfigureDropdown = (dropdown: IProductDimensionConfigureDropdownViewProps): JSX.Element => {\n const { containerProps, labelContainerProps, heading, errors, select } = dropdown;\n\n return (\n \n {heading}\n {errors}\n {select}\n \n );\n};\n\n/**\n * Render product dimension/configure container.\n * @param configure -- Product dimension configuration.\n * @returns Container to have dimension dropdown.\n */\nconst renderConfigure = (configure?: IProductDimensionConfigureViewProps): JSX.Element | null => {\n if (configure !== undefined) {\n const { containerProps, dropdowns } = configure;\n\n return {dropdowns.map(renderConfigureDropdown)};\n }\n return null;\n};\n\n/**\n * Render product dimension/configure container.\n * @param form -- Form props.\n * @param isMobileView -- Flag to check mobile view.\n * @param quickOrderForm - Form component container.\n * @param quickOrderProductContent - Form product component.\n * @param quickOrderMessageContent - Form user message component.\n * @param configure - Product Dimension component.\n * @returns Jsx element of quick order form component.\n */\nconst renderForm = (\n form: IQuickOrderGridFormViewProps,\n isMobileView: boolean,\n quickOrderForm: INodeProps,\n quickOrderProductContent: INodeProps,\n quickOrderMessageContent: INodeProps,\n configure?: IProductDimensionConfigureViewProps\n) => {\n return isMobileView ? (\n \n \n {form.product}\n {renderConfigure(configure)}\n {form.quantity}\n {form.userMessage}\n {form.addToListBtn}\n \n \n ) : (\n \n {form.userMessage}\n \n {form.product}\n {renderConfigure(configure)}\n {form.quantity}\n {form.addToListBtn}\n \n \n );\n};\n\n/**\n * Retrieves current sort criteria.\n * @param props - QuickOrder Grid view props.\n * @returns - Render View.\n */\nconst quickOrderGridView: React.FC = props => {\n const {\n quickOrderGridProps,\n contentProps,\n form,\n quickOrderGridForm,\n drawer,\n configure,\n quickOrderGridFormProductContent,\n quickOrderGridFormMsgContent,\n isMobileView,\n header,\n container,\n actions,\n orderActions\n } = props;\n\n return (\n \n {header}\n {actions && (\n \n {orderActions?.userMessage}\n {orderActions?.addProductListToBag}\n {orderActions?.removeProductList}\n \n )}\n \n \n {renderForm(\n form as IQuickOrderGridFormViewProps,\n isMobileView,\n quickOrderGridForm,\n quickOrderGridFormProductContent,\n quickOrderGridFormMsgContent,\n configure\n )}\n {props.bulkPurchase}\n \n \n {container}\n \n );\n};\n\nexport default quickOrderGridView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Button, Collapse, ICollapseProps } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { IQuickOrderDrawerProps } from './quick-order-drawer-props';\n\nexport interface IQuickOrderDrawerState {\n isOpen: boolean;\n}\n\nexport type GlyphPlacement = 'start' | 'end';\n\n/**\n * Quick Order Drawer - This is a full width uncontrolled collapse where the button glyph changes\n * when the drawer is open and closed.\n */\n\nexport default class QuickOrderDrawer extends React.Component {\n public state: IQuickOrderDrawerState;\n\n private readonly drawerOpenGlyph: string;\n\n private readonly drawerCloseGlyph: string;\n\n private readonly drawerGlyphClass: string;\n\n private isManuallyToggled: boolean;\n\n constructor(props: IQuickOrderDrawerProps) {\n super(props);\n this._toggle = this._toggle.bind(this);\n this.isManuallyToggled = false;\n this.state = { isOpen: (props.collapseProps && props.collapseProps.isOpen) || false };\n this.drawerGlyphClass = classnames('drawer__glyph', this.props.toggleGlyphClassName ? this.props.toggleGlyphClassName : '');\n\n if (this.props.animateGlyph) {\n this.drawerOpenGlyph = classnames(\n this.drawerGlyphClass,\n this.props.openGlyph ? this.props.openGlyph : this.props.closeGlyph ? this.props.closeGlyph : ''\n );\n this.drawerCloseGlyph = this.drawerOpenGlyph;\n } else {\n this.drawerOpenGlyph = classnames(this.drawerGlyphClass, this.props.openGlyph ? this.props.openGlyph : '');\n this.drawerCloseGlyph = classnames(this.drawerGlyphClass, this.props.closeGlyph ? this.props.closeGlyph : '');\n }\n }\n\n public shouldComponentUpdate(nextProps: IQuickOrderDrawerProps, nextState: IQuickOrderDrawerState): boolean {\n if (this.state === nextState && this.props === nextProps) {\n return false;\n }\n return true;\n }\n\n public render(): JSX.Element {\n const collapseProps = { ...this.props.collapseProps } as ICollapseProps;\n\n // If the drawer is manually toggled by pressing the button, then we use the internal state\n if (collapseProps.isOpen === undefined || this.isManuallyToggled) {\n collapseProps.isOpen = this.state.isOpen;\n } else {\n // eslint-disable-next-line react/no-direct-mutation-state\n this.state.isOpen = collapseProps.isOpen;\n }\n collapseProps.children = this.props.children;\n const drawerClass = classnames('drawer', this.props.className ? this.props.className : '');\n this.isManuallyToggled = false;\n return (\n
    \n \n {this._generateDrawerButtonInnerMarkup(collapseProps.isOpen)}\n \n \n
    \n );\n }\n\n private _generateDrawerButtonInnerMarkup(collapseState: boolean): JSX.Element {\n const drawerButtonTextClass = classnames(\n 'drawer__buttontext',\n this.props.toggleButtonClassName ? this.props.toggleButtonClassName : ''\n );\n return (\n <>\n

    {this.props.moduleHeadingText}

    \n \n {this.props.moduleDescriptionText}\n \n {this._generateGlyphMarkup('drawer__glyph__end', collapseState)}\n \n );\n }\n\n private _generateGlyphMarkup(location: string, collapseState: boolean): JSX.Element {\n let glyphClass = collapseState ? this.drawerOpenGlyph : this.drawerCloseGlyph;\n glyphClass = `${glyphClass} ${location}`;\n return ;\n }\n\n private _toggle(e: React.MouseEvent | React.KeyboardEvent): void {\n e.preventDefault();\n this.setState({ isOpen: !this.state.isOpen });\n this.isManuallyToggled = true;\n if (this.props.onToggle) {\n this.props.onToggle(this.state);\n }\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Alert, Button } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IQuickOrderState } from '../quick-order';\n\nexport interface IQuickOrderFormProps {\n disableAddtoCart: boolean | undefined;\n productTextInput: React.RefObject;\n quantityTextInput: React.RefObject;\n maxChars: number;\n maxQuantity?: number;\n ariaLabelQuantity: string;\n ariaLabelProduct: string;\n ariaLabelAddtoCart: string;\n addQuantityPlaceholderText: string;\n quickOrderState: IQuickOrderState;\n handleInputChange(query: string): void;\n handleQuantityChange(query: string): void;\n handleAddToCartClick(): Promise;\n}\n\nexport interface IQuickOrderFormViewProps {\n product: React.ReactNode;\n quantity: React.ReactNode;\n addToCartBtn: React.ReactNode;\n userMessage?: React.ReactNode;\n}\n\n/**\n * On Input Change functionality.\n * @param handleInputChange -Input change function.\n * @returns Input change value.\n */\nconst onInputChangeFunction = (handleInputChange: (query: string) => void) => (event: React.ChangeEvent) => {\n handleInputChange(event.target.value || '');\n};\n\n/**\n * On Quantity Change functionality.\n * @param handleQuantityChange -Quantity change function.\n * @returns Quantity change value.\n */\nconst onQuantityChangeFunction = (handleQuantityChange: (query: string) => void) => (event: React.ChangeEvent) => {\n handleQuantityChange(event.target.value || '');\n};\n\nexport const QuickOrderFormComponent = (props: IQuickOrderFormProps): IQuickOrderFormViewProps => {\n const {\n productTextInput,\n quantityTextInput,\n quickOrderState,\n maxChars,\n maxQuantity,\n disableAddtoCart,\n ariaLabelQuantity,\n ariaLabelProduct,\n ariaLabelAddtoCart,\n addQuantityPlaceholderText,\n handleQuantityChange,\n handleInputChange,\n handleAddToCartClick\n } = props;\n\n const onInputChange = onInputChangeFunction(handleInputChange);\n\n const onQuantityInputChange = onQuantityChangeFunction(handleQuantityChange);\n\n const productNode = (\n
    \n

    \n {ariaLabelProduct}\n

    \n \n
    \n );\n\n const quantityNode = (\n
    \n

    \n {ariaLabelQuantity}\n

    \n \n
    \n );\n\n const addtoCartNode = (\n
    \n \n {ariaLabelAddtoCart}\n \n
    \n );\n\n const userMessageNode =\n quickOrderState && quickOrderState.stateMessage ? (\n \n \n {quickOrderState.stateMessage.messageText}\n \n ) : (\n undefined\n );\n\n return {\n product: productNode,\n addToCartBtn: addtoCartNode,\n quantity: quantityNode,\n userMessage: userMessageNode\n };\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { CartLine, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport { observable } from 'mobx';\n\n/**\n * Represents a product for quick order.\n */\nexport class QuickOrderProduct {\n @observable\n public isSelected: boolean;\n\n public readonly cartLine: CartLine;\n\n public readonly simpleProduct: SimpleProduct;\n\n public constructor(cartLine: CartLine, simpleProduct: SimpleProduct) {\n this.cartLine = cartLine;\n this.simpleProduct = simpleProduct;\n this.isSelected = false;\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IComponent, IComponentProps, ICoreContext } from '@msdyn365-commerce/core';\nimport classnames from 'classnames';\nimport React from 'react';\n\n/**\n * Interface for quick order table header resources.\n */\nexport interface IQuickOrderTableHeaderResources {\n quickOrderProductNumberText: string;\n quickOrderProductText: string;\n quickOrderUnitPriceText: string;\n quickOrderUnitOfMeasureText: string;\n quickOrderQuantityText: string;\n quickOrderTotalText: string;\n quickOrderActionsText: string;\n}\n\n/**\n * Interface for quick order table props.\n */\nexport interface IQuickOrderTableHeaderProps extends IComponentProps {\n context: ICoreContext;\n className: string;\n\n isMobile: boolean;\n resources: IQuickOrderTableHeaderResources;\n}\n\n/**\n * Interface for quick order table header component.\n */\nexport interface IQuickOrderTableHeaderComponent extends IComponent {}\n\n/**\n * Get the quick order header cells for desktop.\n * @param props -- The quick order table header props.\n * @returns The list of cells for quick order header component in desktop version.\n */\nconst QuickOrderDesktopHeaderCellsComponent: React.FC = (props: IQuickOrderTableHeaderProps) => {\n const { resources } = props;\n const columnWithNumberClassName = `${props.className}__row__column-with-number`;\n return (\n <>\n \n \n \n {resources.quickOrderProductNumberText}\n {resources.quickOrderProductText}\n {resources.quickOrderUnitPriceText}\n {resources.quickOrderUnitOfMeasureText}\n {resources.quickOrderQuantityText}\n {resources.quickOrderTotalText}\n {resources.quickOrderActionsText}\n \n );\n};\n\n/**\n * Get the quick order header cells for mobile.\n * @param props -- The quick order table header props.\n * @returns The quick order header component in desktop version.\n */\nconst QuickOrderMobileHeaderCellsComponent: React.FC = (props: IQuickOrderTableHeaderProps) => {\n const { resources } = props;\n return (\n <>\n \n {resources.quickOrderProductNumberText}\n \n \n );\n};\n\n/**\n * Quick order table header component.\n * @param props - Configuration of the component.\n * @returns React node with the header.\n */\nexport const QuickOrderTableHeaderComponent: React.FC = (props: IQuickOrderTableHeaderProps) => {\n const rowClassName = `${props.className}__row`;\n\n let headerCells: JSX.Element;\n if (props.isMobile) {\n headerCells = ;\n } else {\n headerCells = ;\n }\n\n return (\n \n {headerCells}\n \n );\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IComponentProps, ICoreContext, IImageSettings, Image } from '@msdyn365-commerce/core';\nimport { CartLine, format, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport { getFallbackImageUrl, getProductPageUrlSync, ObjectExtensions, StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport { Button, IncrementalQuantity } from '@msdyn365-commerce-modules/utilities';\nimport React from 'react';\n\n/**\n * Data required to render each quick order row.\n */\nexport interface IQuickOrderTableRowData {\n cartLine: CartLine;\n product: SimpleProduct;\n}\n\n/**\n * Resources for quick order table rows.\n */\nexport interface IQuickOrderTableRowResources {\n quickOrderQuantityMobileText: string;\n quickOrderProductDimensionsSeparator: string;\n quickOrderViewDetailsButtonText: string;\n quickOrderViewDetailsButtonAriaLabel: string;\n quickOrderRemoveItemButtonAriaLabel: string;\n quickOrderInputQuantityAriaLabel: string;\n quickOrderDecrementButtonAriaLabel: string;\n quickOrderIncrementButtonAriaLabel: string;\n}\n\n/**\n * Interface for quick order table props.\n */\nexport interface IQuickOrderTableRowProps extends IComponentProps {\n context: ICoreContext;\n className: string;\n\n imageSettings?: IImageSettings;\n isMobile: boolean;\n resources: IQuickOrderTableRowResources;\n}\n\n/**\n * The default image settings for quick order table row.\n */\nconst defaultImageSettings: IImageSettings = {\n viewports: {\n xs: { q: 'w=80&h=80&m=6', w: 0, h: 0 },\n lg: { q: 'w=147&h=147&m=6', w: 0, h: 0 }\n },\n lazyload: true,\n cropFocalRegion: true\n};\n\n/**\n * Renders product image for quick order row.\n * @param props - Quick order table row props.\n * @returns React element.\n */\nconst QuickOrderTableRowProductImageComponent: React.FC = (props: IQuickOrderTableRowProps) => {\n const fallbackImageUrl = getFallbackImageUrl(\n props.data.product.ItemId,\n props.context.actionContext.requestContext.apiSettings,\n props.context.request.app?.config?.OmniChannelMedia\n );\n\n const containerClassName = `${props.className}__product-image-container`;\n\n return (\n
    \n \n
    \n );\n};\n\n/**\n * Renders actions popup for the mobile view.\n * @param props - Configuration for popup.\n * @returns A react node with actions..\n */\nconst QuickOrderExtraActionsPopupComponent: React.FC = (props: IQuickOrderTableRowProps): JSX.Element | null => {\n const product: SimpleProduct = props.data.product;\n\n let productUrl = '';\n if (!StringExtensions.isNullOrWhitespace(product.Name) && !ObjectExtensions.isNullOrUndefined(product.RecordId)) {\n productUrl = getProductPageUrlSync(product.Name!, product.RecordId, props.context.actionContext);\n }\n\n if (StringExtensions.isNullOrWhitespace(productUrl)) {\n return null;\n }\n\n const className = `${props.className}__extra-actions-cell`;\n\n return (\n
    \n
    \n );\n};\n\n/**\n * Renders quick order table rows for desktop view.\n * @param props - Configuration for the rows.\n * @returns A react node with a list of quick order rows for desktop view.\n */\nexport const QuickOrderDesktopTableRowCellComponent: React.FC = (props: IQuickOrderTableRowProps) => {\n const product: SimpleProduct = props.data.product;\n const cartLine: CartLine = props.data.cartLine;\n const columnWithNumberClassName = `${props.className}__column-with-number`;\n\n let productUrl = '';\n if (!StringExtensions.isNullOrWhitespace(product.Name) && !ObjectExtensions.isNullOrUndefined(product.RecordId)) {\n productUrl = getProductPageUrlSync(product.Name!, product.RecordId, props.context.actionContext);\n }\n\n return (\n <>\n \n \n \n {product.ItemId}\n \n
    \n \n {product.Name}\n \n \n {product.Dimensions?.map(dimension => dimension.DimensionValue?.Value)\n .filter(dimensionValue => !StringExtensions.isNullOrWhitespace(dimensionValue))\n .join(props.resources.quickOrderProductDimensionsSeparator)}\n \n
    \n \n {cartLine.Price}\n {cartLine.UnitOfMeasureSymbol}\n \n \n \n {cartLine.TotalAmount}\n \n \n );\n};\n\nexport const SearchResultModal = (props: ISearchResultModalProps): ISearchResultModalViewProps => {\n return {\n modal: modalNode(props),\n modalHeader: modalHeaderNode(props),\n modalFooter: modalFooterNode(props),\n modalBody: \n };\n};\n\nconst modalNode = (props: ISearchResultModalProps) => {\n return (\n \n );\n};\n\nconst modalHeaderNode = (props: ISearchResultModalProps) => {\n return {props.resources.modalTitle};\n};\n\nconst modalFooterNode = (props: ISearchResultModalProps) => {\n return (\n \n \n \n );\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IProductsDimensionsAvailabilities } from '@msdyn365-commerce/commerce-entities';\nimport { IPriceComponentResources, ProductComponent } from '@msdyn365-commerce/components';\nimport { ICoreContext, IImageSettings } from '@msdyn365-commerce/core';\nimport { ProductSearchResult } from '@msdyn365-commerce/retail-proxy';\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport { ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ISearchResultContainerResources } from '../search-result-container.props.autogenerated';\n\ninterface IProductSearchResultItems {\n products: ProductSearchResult[];\n context: ICoreContext;\n resources: ISearchResultContainerResources;\n imageSettings?: IImageSettings;\n moduleType: string;\n moduleId: string;\n allowBackNavigation?: boolean;\n telemetryContent: ITelemetryContent;\n quickviewSlot?: {} | null | undefined;\n productComparisonButton?: {} | null | undefined;\n channelInventoryConfigurationId?: number;\n isPriceMinMaxEnabled?: boolean;\n productsDimensionAvailabilities?: IProductsDimensionsAvailabilities[][];\n}\n\n/**\n * Returns the product inventory label.\n * @param channelInventoryConfigurationId - The channel configuration Id.\n * @param product - The product.\n * @returns The inventory label.\n */\nexport function getInventoryLabel(channelInventoryConfigurationId: number | undefined, product: ProductSearchResult): string | undefined {\n if (!channelInventoryConfigurationId || !ArrayExtensions.hasElements(product.AttributeValues)) {\n return undefined;\n }\n const inventoryAttribute = product.AttributeValues.find(attribute => attribute.RecordId === channelInventoryConfigurationId);\n if (inventoryAttribute) {\n return inventoryAttribute.TextValue;\n }\n return undefined;\n}\n\nexport const ProductSearchResultItems: React.FC = ({\n products,\n context,\n imageSettings,\n resources,\n moduleType,\n moduleId,\n allowBackNavigation,\n telemetryContent,\n quickviewSlot,\n productComparisonButton,\n channelInventoryConfigurationId,\n isPriceMinMaxEnabled,\n productsDimensionAvailabilities\n}) => {\n const priceResources: IPriceComponentResources = {\n priceRangeSeparator: resources.priceRangeSeparator\n };\n return (\n
      \n {products.map((product: ProductSearchResult, index: number) => (\n
    • \n \n ArrayExtensions.hasElements(dimensionAvailability) &&\n dimensionAvailability[0].masterProductId === product.MasterProductId\n )}\n />\n
    • \n ))}\n
    \n );\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ISliderLabel, ISliderThumbProps, Slider } from '@msdyn365-commerce-modules/utilities';\nimport debounce from 'lodash/debounce';\nimport { computed } from 'mobx';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { IRefineItemProps, IRefineItemState } from './refine-item';\n\ntype InputType = 'Min' | 'Max';\n\nexport type RangeRefineItemType = 'slider' | 'input';\n\n/**\n * Range refine item properties.\n */\nexport interface IRangeRefineItemProps extends IRefineItemProps {\n rangeType: RangeRefineItemType;\n minValueSliderThumbAriaLabel?: string;\n maxValueSliderThumbAriaLabel?: string;\n sliderKey?: string;\n}\n\n/**\n * Range refine item state.\n */\nexport interface IRangeRefineItemState extends IRefineItemState {\n validationErrorMin: string | undefined;\n validationErrorMax: string | undefined;\n selectedMin: string | undefined;\n selectedMax: string | undefined;\n touchedMin: boolean;\n touchedMax: boolean;\n sliderId: string;\n minValue: string | undefined;\n maxValue: string | undefined;\n labels: ISliderLabel[];\n sliderThumbs: ISliderThumbProps[];\n}\n\n/**\n * RangeRefineItem component (controlled by RefineSubmenu).\n */\n@observer\nexport default class RangeRefineItem extends React.Component {\n private readonly _formattedPriceReverseLookup: Map = new Map();\n\n private readonly minInput: React.RefObject;\n\n private readonly maxInput: React.RefObject;\n\n @computed get currencyCode(): string {\n return this.props.productRefinerValue.UnitText || '';\n }\n\n public constructor(props: IRangeRefineItemProps) {\n super(props);\n this._onRangeUpdate = this._onRangeUpdate.bind(this);\n this._onRangeUpdateEnd = this._onRangeUpdateEnd.bind(this);\n this._handleRangeTooltipText = this._handleRangeTooltipText.bind(this);\n this._changeMin = this._changeMin.bind(this);\n this._changeMax = this._changeMax.bind(this);\n this._finishChangeMin = this._finishChangeMin.bind(this);\n this._finishChangeMax = this._finishChangeMax.bind(this);\n\n this.minInput = React.createRef();\n this.maxInput = React.createRef();\n\n const { selectedRefinementCriterion } = this.props;\n const initialMin = selectedRefinementCriterion?.LeftValueBoundString ?? '0';\n const initialMax = selectedRefinementCriterion?.RightValueBoundString;\n const sliderId = `slider_${String(this.props.parentProductRefinerHierarchy.RecordId)}_${String(\n this.props.productRefinerValue.RefinerRecordId\n )}`;\n const minValue = this.props.productRefinerValue.LeftValueBoundString;\n const maxValue = this.props.productRefinerValue.RightValueBoundString;\n const minPrice = this._formatPrice(minValue);\n const maxPrice = this._formatPrice(maxValue);\n const labels: ISliderLabel[] = this.getLabels(sliderId, minPrice, maxPrice);\n const selectedMin =\n this.props.selectedRefinementCriterion?.LeftValueBoundString ?? this.props.productRefinerValue.LeftValueBoundString ?? '0';\n const selectedMax =\n this.props.selectedRefinementCriterion?.RightValueBoundString ??\n this.props.productRefinerValue.RightValueBoundString ??\n maxValue;\n const selectedMinPrice = this._formatPrice(selectedMin);\n const selectedMaxPrice = this._formatPrice(selectedMax);\n const sliderKeyString = this.props.sliderKey ? `_${String(this.props.sliderKey)}` : '';\n const sliderThumbs: ISliderThumbProps[] = this.getSliderThumbs(\n sliderId,\n sliderKeyString,\n selectedMin,\n selectedMinPrice,\n selectedMax,\n selectedMaxPrice,\n maxPrice\n );\n this.state = {\n isChecked: false,\n validationErrorMin: undefined,\n validationErrorMax: undefined,\n selectedMin: initialMin,\n selectedMax: initialMax,\n touchedMin: false,\n touchedMax: false,\n sliderId,\n minValue,\n maxValue,\n labels,\n sliderThumbs\n };\n }\n\n public shouldComponentUpdate(nextProps: IRangeRefineItemProps, nextState: IRangeRefineItemState): boolean {\n if (this.state === nextState && this.props === nextProps) {\n return false;\n }\n return true;\n }\n\n public componentDidUpdate(previousProps: IRangeRefineItemProps): void {\n if (previousProps !== this.props) {\n this.updateSliderProps();\n }\n }\n\n public render(): JSX.Element | undefined {\n const { productRefinerValue, parentProductRefinerHierarchy, refineItemCommonProps } = this.props;\n\n if (!productRefinerValue || !parentProductRefinerHierarchy) {\n refineItemCommonProps.telemetry.error(\n 'Cannot render refine value range without productRefinerValue and parentProductRefinerHierarchy'\n );\n return undefined;\n }\n\n if (this.props.rangeType === 'input') {\n return this._renderInputFields();\n }\n\n return this._renderSlider();\n }\n\n /**\n * Function to update slider props.\n */\n private updateSliderProps(): void {\n const sliderId = `slider_${String(this.props.parentProductRefinerHierarchy.RecordId)}_${String(\n this.props.productRefinerValue.RefinerRecordId\n )}`;\n const minValue = this.props.productRefinerValue.LeftValueBoundString;\n const maxValue = this.props.productRefinerValue.RightValueBoundString;\n const minPrice = this._formatPrice(minValue);\n const maxPrice = this._formatPrice(maxValue);\n const labels: ISliderLabel[] = this.getLabels(sliderId, minPrice, maxPrice);\n const selectedMin =\n this.props.selectedRefinementCriterion?.LeftValueBoundString ?? this.props.productRefinerValue.LeftValueBoundString ?? '0';\n const selectedMax =\n this.props.selectedRefinementCriterion?.RightValueBoundString ??\n this.props.productRefinerValue.RightValueBoundString ??\n maxValue;\n const selectedMinPrice = this._formatPrice(selectedMin);\n const selectedMaxPrice = this._formatPrice(selectedMax);\n const sliderKeyString = this.props.sliderKey ? `_${String(this.props.sliderKey)}` : '';\n const sliderThumbs: ISliderThumbProps[] = this.getSliderThumbs(\n sliderId,\n sliderKeyString,\n selectedMin,\n selectedMinPrice,\n selectedMax,\n selectedMaxPrice,\n maxPrice\n );\n this.setState({ sliderId, minValue, maxValue, labels, sliderThumbs });\n }\n\n /**\n * Function to create the labels for slider.\n * @param sliderId - Slider element id for the DOM.\n * @param minPrice - Slider min value.\n * @param maxPrice - Slider max value.\n * @returns Array labels.\n */\n private readonly getLabels = (sliderId: string, minPrice: string, maxPrice: string): ISliderLabel[] => {\n return [\n {\n labelId: `${sliderId}_start`,\n labelString: `${minPrice}`,\n labelPositioning: 'start'\n },\n {\n labelId: `${sliderId}_end`,\n labelString: `${maxPrice}`,\n labelPositioning: 'end'\n }\n ];\n };\n\n /**\n * Function to create the slider thumbs for slider.\n * @param sliderId - Slider element id for the DOM.\n * @param sliderKey - Unique key for slider.\n * @param selectedMin - Slider selected min value.\n * @param selectedMinPrice - Slider selected min price.\n * @param selectedMax - Slider selected max value.\n * @param selectedMaxPrice - Slider selected max price..\n * @param maxPrice - Slider max price..\n * @returns Slider Thumb Props.\n */\n private readonly getSliderThumbs = (\n sliderId: string,\n sliderKey: string,\n selectedMin: string,\n selectedMinPrice: string,\n selectedMax: string | undefined,\n selectedMaxPrice: string,\n maxPrice: string\n ): ISliderThumbProps[] => {\n const sliderThumbDefaultValue = 0;\n return [\n {\n id: `${sliderId}${sliderKey}_slider_thumb_start`,\n value: (selectedMin && Number(selectedMin)) || sliderThumbDefaultValue,\n ariaLabel: `${this.props.minValueSliderThumbAriaLabel ?? ''} ${this.currencyCode}`,\n ariaValueText: `${selectedMinPrice}`\n },\n {\n id: `${sliderId}${sliderKey}_slider_thumb_end`,\n value: Number(selectedMax) || Number(maxPrice),\n ariaLabel: `${this.props.maxValueSliderThumbAriaLabel ?? ''} ${this.currencyCode}`,\n ariaValueText: `${selectedMaxPrice}`\n }\n ];\n };\n\n private _renderInputFields(): JSX.Element | undefined {\n const { isDisabled, parentProductRefinerHierarchy, refineItemCommonProps } = this.props;\n const { selectedMin, selectedMax, touchedMin, touchedMax, validationErrorMin, validationErrorMax } = this.state;\n\n const rangeAriaLabel = (refineItemCommonProps.rangeNameFormat || '{0}').replace('{0}', parentProductRefinerHierarchy.KeyName || '');\n const formAttrs = {\n 'aria-label': rangeAriaLabel,\n 'aria-disabled': isDisabled\n };\n\n // To enable price formatting of selected fields, this is the approach:\n // initial value: min=0 formatted as price, max=undefined\n // onFocus/onChange: convert to number (unformat) and mark as touched to indicate value is being edited\n // onBlur: validate and format entered value as price\n const minInputClassName = `ms-refine-submenu__input-range refine-submenu__input-range-min ${\n validationErrorMin ? 'refine-submenu__input-range--error' : ''\n }`;\n const maxInputClassName = `ms-refine-submenu__input-range refine-submenu__input-range-max ${\n validationErrorMax ? 'refine-submenu__input-range--error' : ''\n }`;\n const minLabelClassName = 'ms-refine-submenu__input-range-label refine-submenu__input-range-label-min';\n const maxLabelClassName = 'ms-refine-submenu__input-range-label refine-submenu__input-range-label-max';\n const formattedSelectedMin = this._getFormattedSelectedValue(selectedMin, touchedMin, validationErrorMin);\n const formattedSelectedMax = this._getFormattedSelectedValue(selectedMax, touchedMax, validationErrorMax);\n return (\n \n \n \n {validationErrorMin && (\n \n {validationErrorMin}\n \n )}\n {validationErrorMax && validationErrorMin !== validationErrorMax && (\n \n {validationErrorMax}\n \n )}\n \n );\n }\n\n private _renderSlider(): JSX.Element | undefined {\n const { isDisabled, sliderKey } = this.props;\n const ariaAttributes = {\n 'aria-disabled': isDisabled\n };\n\n return (\n \n );\n }\n\n private _changeMin(event: React.FocusEvent): void {\n this._changeValue(event, 'Min');\n }\n\n private _changeMax(event: React.FocusEvent): void {\n this._changeValue(event, 'Max');\n }\n\n private _changeValue(event: React.FocusEvent, inputType: InputType): void {\n const selectedKey = `selected${inputType}`;\n const touchedKey = `touched${inputType}`;\n this.setState({\n [selectedKey]: this._getInputWithoutFormatting(event.currentTarget.value),\n [touchedKey]: true\n });\n }\n\n private _finishChangeMin(event: React.FocusEvent): boolean {\n const selectedMinValue = this._getInputWithoutFormatting(event.currentTarget.value);\n this.setState({\n selectedMin: selectedMinValue,\n minTouched: false\n });\n const minInput = Number(selectedMinValue);\n const {\n onToggle,\n parentProductRefinerHierarchy,\n productRefinerValue,\n refineItemCommonProps,\n selectedRefinementCriterion\n } = this.props;\n const max = (selectedRefinementCriterion && selectedRefinementCriterion.RightValueBoundString) || undefined;\n\n const maxNum = max ? Number(max) : undefined;\n\n if (isNaN(minInput)) {\n this.setState({ validationErrorMin: refineItemCommonProps.validationErrorNaN });\n this._focus('Min');\n return false;\n }\n\n if (this._validateRange(minInput, maxNum)) {\n onToggle({\n parentProductRefinerHierarchy,\n productRefinerValue,\n isSelecting: true,\n rangeStart: minInput,\n rangeEnd: maxNum\n });\n return true;\n }\n this._focus('Min');\n\n return false;\n }\n\n private _finishChangeMax(event: React.FocusEvent): boolean {\n const selectedMaxValue = this._getInputWithoutFormatting(event.currentTarget.value);\n this.setState({\n selectedMax: selectedMaxValue,\n maxTouched: false\n });\n const maxInput = Number(selectedMaxValue);\n const {\n onToggle,\n parentProductRefinerHierarchy,\n productRefinerValue,\n refineItemCommonProps,\n selectedRefinementCriterion\n } = this.props;\n const min = (selectedRefinementCriterion && selectedRefinementCriterion.LeftValueBoundString) || '0';\n\n const minNum = Number(min);\n\n if (isNaN(maxInput)) {\n this.setState({ validationErrorMax: refineItemCommonProps.validationErrorNaN });\n this._focus('Max');\n return false;\n }\n\n if (this._validateRange(minNum, maxInput)) {\n if (productRefinerValue) {\n onToggle({\n parentProductRefinerHierarchy,\n productRefinerValue,\n isSelecting: true,\n rangeStart: minNum,\n rangeEnd: maxInput\n });\n } else {\n this._focus('Max');\n }\n return true;\n }\n\n return false;\n }\n\n private _focus(inputType: InputType): void {\n const ref = inputType === 'Max' ? this.maxInput : this.minInput;\n\n setTimeout(() => {\n if (ref && ref.current) {\n ref.current.focus();\n }\n }, 50);\n }\n\n private _getFormattedSelectedValue(\n selected: string | undefined,\n touched: boolean,\n validationError: string | undefined\n ): string | undefined {\n if (touched || validationError || selected === undefined) {\n return selected;\n }\n return this._formatPrice(selected);\n }\n\n private _validateRange(min: number, max: number | undefined): boolean {\n const { refineItemCommonProps } = this.props;\n if (max === undefined) {\n return true;\n }\n\n if (min > max) {\n this.setState({\n validationErrorMin: refineItemCommonProps.validationErrorRange,\n validationErrorMax: refineItemCommonProps.validationErrorRange\n });\n return false;\n }\n\n return true;\n }\n\n private _formatPrice(amount: string | undefined): string {\n if (this.props.productRefinerValue.RefinerRecordId === 0) {\n const result = this.props.context.cultureFormatter.formatCurrency(Number(amount), this.currencyCode);\n return result;\n }\n return amount || '';\n }\n\n private _getInputWithoutFormatting(input: string): string {\n // First try to cast raw input to a number\n const inputAsNum = Number(input);\n if (!isNaN(inputAsNum)) {\n return input;\n }\n\n // Otherwise try a reverse lookup and fall back to the raw input if all else fails\n const reverseLookupResult = this._formattedPriceReverseLookup.get(input);\n return reverseLookupResult || input;\n }\n\n // NOTE: Fix types once Shared Components build pipeline bug fixed\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private _onRangeUpdate(sliderChangeNotification: any): void {\n // Need to filter out mousemove events as these cause errors after the menu updates and slider re-renders\n if (sliderChangeNotification.eventType !== 'mousemove') {\n const { onToggle, parentProductRefinerHierarchy, productRefinerValue } = this.props;\n if (productRefinerValue && sliderChangeNotification) {\n onToggle({\n parentProductRefinerHierarchy,\n productRefinerValue,\n isSelecting: true,\n rangeStart: sliderChangeNotification.firstThumbValue,\n rangeEnd: sliderChangeNotification.secondThumbValue\n });\n\n this._focusOnSliderThumb(sliderChangeNotification);\n }\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private _onRangeUpdateEnd(sliderChangeNotification: any): void {\n const { onToggle, parentProductRefinerHierarchy, productRefinerValue } = this.props;\n if (productRefinerValue && sliderChangeNotification) {\n onToggle({\n parentProductRefinerHierarchy,\n productRefinerValue,\n isSelecting: true,\n rangeStart: sliderChangeNotification.firstThumbValue,\n rangeEnd: sliderChangeNotification.secondThumbValue\n });\n\n this._focusOnSliderThumb(sliderChangeNotification);\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private _focusOnSliderThumb(sliderChangeNotification: any): void {\n if (sliderChangeNotification.id) {\n const element = document.getElementById(`${sliderChangeNotification.id}range`);\n if (element) {\n setTimeout(() => {\n element.focus();\n }, 0);\n }\n }\n }\n\n private _handleRangeTooltipText(tooltip: number): string {\n return this._formatPrice(`${tooltip}`);\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IProductRefinerHierarchy } from '@msdyn365-commerce/commerce-entities';\nimport { RatingComponent, SwatchComponent } from '@msdyn365-commerce/components';\nimport { IAny, ICoreContext, IGeneric } from '@msdyn365-commerce/core';\nimport { ProductRefinerSource, ProductRefinerValue, RefinerType } from '@msdyn365-commerce/retail-proxy';\nimport { checkIfShouldDisplayAsSwatch, DimensionTypes, IDimensionsApp, StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport { format, getPayloadObject, getTelemetryAttributes, IPayLoad, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { IRefineItemCommonProps } from './refine-item.props.common';\nimport { IRefineItemToggleNotification } from './refine-item-toggle-notification';\n\n/**\n * RefineItem properties.\n */\nexport interface IRefineItemProps {\n parentProductRefinerHierarchy: IProductRefinerHierarchy;\n productRefinerValue: ProductRefinerValue;\n selectedRefinementCriterion: ProductRefinerValue | undefined;\n selectedRefinerValues?: ProductRefinerValue[];\n refineItemCommonProps: IRefineItemCommonProps;\n isDisabled: boolean;\n context: ICoreContext>;\n moduleId: string;\n moduleTypeName: string;\n index?: number;\n productCountAriaLabel?: string;\n singleProductCountAriaLabel?: string;\n refineItemAriaLabel?: string;\n refineItemsAriaLabel?: string;\n isMobileView?: boolean;\n\n /**\n * The telemetry content\n */\n telemetryContent?: ITelemetryContent;\n onToggle(notfication: Readonly): void;\n urlBuilder(refiner: IRefineItemToggleNotification): string;\n}\n\n/**\n * Refine item state.\n */\nexport interface IRefineItemState extends React.ComponentState {\n isChecked: boolean;\n renderingError?: object;\n}\n\n/**\n * Single-select and multi-select refine item component (controlled by RefineSubmenu).\n */\nexport default class RefineItem extends React.Component {\n private readonly anchorType: React.RefObject;\n\n private readonly payLoad: IPayLoad;\n\n public constructor(props: IRefineItemProps) {\n super(props);\n this._onClick = this._onClick.bind(this);\n this.state = {\n isChecked: !!this.props.selectedRefinementCriterion\n };\n this.anchorType = React.createRef();\n this.payLoad = getPayloadObject('click', this.props.telemetryContent!, '');\n }\n\n public shouldComponentUpdate(nextProps: IRefineItemProps, nextState: IRefineItemState): boolean {\n if (this.state === nextState && this.props === nextProps) {\n return false;\n }\n return true;\n }\n\n public render(): JSX.Element | undefined {\n const {\n isDisabled,\n refineItemCommonProps,\n parentProductRefinerHierarchy,\n productRefinerValue,\n selectedRefinementCriterion,\n productCountAriaLabel,\n singleProductCountAriaLabel,\n index,\n children,\n onToggle,\n context,\n telemetryContent,\n refineItemAriaLabel,\n refineItemsAriaLabel,\n ...attrs\n } = this.props;\n if (!productRefinerValue) {\n refineItemCommonProps.telemetry.error('[refine-item] Cannot render refineItem without productRefinerValue');\n return undefined;\n }\n if (!productRefinerValue.LeftValueBoundString) {\n refineItemCommonProps.telemetry.warning(\n `[refine-item] RefineItem without LeftValueBoundString: ${JSON.stringify(productRefinerValue)}`\n );\n }\n const isSingleSelect = parentProductRefinerHierarchy.RefinerTypeValue === RefinerType.SingleSelect;\n let itemTypeClassName = isSingleSelect ? 'single-select' : 'multi-select';\n itemTypeClassName = `ms-refine-submenu-item ${itemTypeClassName}`;\n const inputType = isSingleSelect ? 'radio' : 'checkbox';\n const isChecked = !!selectedRefinementCriterion;\n itemTypeClassName = isChecked ? `${itemTypeClassName}-checked` : itemTypeClassName;\n if (parentProductRefinerHierarchy.SourceValue === ProductRefinerSource.Rating) {\n return this._renderRating(\n productRefinerValue,\n parentProductRefinerHierarchy,\n isChecked,\n context,\n index,\n telemetryContent,\n productCountAriaLabel,\n singleProductCountAriaLabel\n );\n }\n this.payLoad.contentAction.etext = productRefinerValue.LeftValueBoundLocalizedString ?? productRefinerValue.LeftValueBoundString;\n const attribute = getTelemetryAttributes(telemetryContent!, this.payLoad);\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing -- Replace with actual value for empty string.\n const productText = productRefinerValue.LeftValueBoundLocalizedString || productRefinerValue.LeftValueBoundString || '';\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing -- Replace with actual value for empty string.\n const productCount = productRefinerValue.Count || 0;\n let refineMenuItemAriaLabel;\n if (productCount === 1) {\n refineMenuItemAriaLabel = refineItemAriaLabel\n ? format(refineItemAriaLabel, parentProductRefinerHierarchy.KeyName, productText)\n : '';\n } else {\n refineMenuItemAriaLabel = refineItemsAriaLabel\n ? format(refineItemsAriaLabel, parentProductRefinerHierarchy.KeyName, productText, productCount)\n : '';\n }\n\n const dimensionType = (this.props.parentProductRefinerHierarchy.KeyName?.toLocaleLowerCase() ?? '') as DimensionTypes;\n const shouldDisplayAsSwatch = this._getShouldDisplayAsSwatch(dimensionType);\n\n let className = 'ms-refine-submenu-item';\n if (shouldDisplayAsSwatch) {\n className = classnames(className, `ms-refine-submenu-item__dimension__${dimensionType}`);\n }\n\n // If the swatch has no color or image specified, it should be displayed as text.\n // We don't use swatch logic to display the number of the results found together with the text.\n const hasColor = !StringExtensions.isNullOrWhitespace(productRefinerValue.SwatchColorHexCode);\n const hasImage = !StringExtensions.isNullOrWhitespace(productRefinerValue.SwatchImageUrl);\n const hasContentSwatch = hasColor || hasImage;\n\n return (\n
  • \n \n {hasContentSwatch && shouldDisplayAsSwatch && this._renderSwatch(dimensionType)}\n \n \n
  • \n );\n }\n\n private _getShouldDisplayAsSwatch(dimensionType: DimensionTypes) {\n const shouldDisplayAsSwatch = checkIfShouldDisplayAsSwatch(dimensionType, this.props.context as ICoreContext);\n return shouldDisplayAsSwatch;\n }\n\n private _renderSwatch(dimensionType: DimensionTypes): JSX.Element | null {\n const productRefinerValue = this.props.productRefinerValue;\n\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing -- Replace with actual value for empty string.\n const text = productRefinerValue.LeftValueBoundLocalizedString || productRefinerValue.LeftValueBoundString || '';\n const swatchItems = [\n {\n itemId: `${productRefinerValue.RefinerRecordId ?? ''}-${dimensionType}-${text}`,\n value: text,\n dimensionType,\n colorHexCode: productRefinerValue.SwatchColorHexCode,\n imageUrl: productRefinerValue.SwatchImageUrl\n }\n ];\n\n return (\n \n );\n }\n\n private _getRefinerUrl(): string {\n const { urlBuilder, parentProductRefinerHierarchy, productRefinerValue, selectedRefinementCriterion } = this.props;\n\n if (productRefinerValue) {\n return urlBuilder({\n parentProductRefinerHierarchy,\n productRefinerValue,\n isSelecting: !selectedRefinementCriterion\n });\n }\n\n return '';\n }\n\n private readonly _onClick = (e: React.MouseEvent): void => {\n e.preventDefault();\n\n const { parentProductRefinerHierarchy, productRefinerValue, selectedRefinementCriterion } = this.props;\n if (productRefinerValue) {\n this.props.onToggle({\n parentProductRefinerHierarchy,\n productRefinerValue,\n isSelecting: !selectedRefinementCriterion\n });\n\n setTimeout(() => {\n this.anchorType.current && this.anchorType.current.focus();\n }, 0);\n }\n };\n\n private _renderRating(\n productRefinerValue: ProductRefinerValue,\n parentProductRefinerHierarchy: IProductRefinerHierarchy,\n isChecked: boolean,\n context: ICoreContext,\n index?: number,\n telemetryContent?: ITelemetryContent,\n ratingUserCountAriaLabel?: string,\n ratingSingleUserCountAriaLabel?: string\n ): JSX.Element | undefined {\n if (productRefinerValue.LeftValueBoundString) {\n this.payLoad.contentAction.etext = productRefinerValue.LeftValueBoundLocalizedString;\n const attribute = getTelemetryAttributes(telemetryContent!, this.payLoad);\n const refinerRating = Number.parseInt(productRefinerValue.LeftValueBoundString, 10);\n const ratingRefiner = this.props.selectedRefinerValues?.find(\n value => value.DataTypeValue === productRefinerValue.DataTypeValue\n );\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing -- Replace with actual value for empty string.\n const selectedRating = Number.parseInt(ratingRefiner?.LeftValueBoundString || '0', 10);\n const defaultChkProductCount = 1;\n let ratingComponentClass: string = 'ms-rating-component';\n if (refinerRating > selectedRating) {\n ratingComponentClass = `${ratingComponentClass}__up`;\n } else if (refinerRating < selectedRating) {\n ratingComponentClass = `${ratingComponentClass}__down`;\n } else {\n ratingComponentClass = `${ratingComponentClass}__current`;\n }\n const productCountAriaLabelValue =\n productRefinerValue.Count !== undefined && productRefinerValue.Count === defaultChkProductCount\n ? ratingSingleUserCountAriaLabel && format(ratingSingleUserCountAriaLabel, productRefinerValue.Count)\n : ratingUserCountAriaLabel && format(ratingUserCountAriaLabel, productRefinerValue.Count);\n return (\n \n \n \n \n {productRefinerValue.Count !== undefined && `(${productRefinerValue.Count})`}\n \n \n \n );\n }\n return undefined;\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IProductRefinerHierarchy } from '@msdyn365-commerce/commerce-entities';\nimport { IAny, ICoreContext, IGeneric } from '@msdyn365-commerce/core';\nimport { DisplayTemplate, ProductRefinerSource, ProductRefinerValue, RefinerType } from '@msdyn365-commerce/retail-proxy';\nimport { Button, Collapse, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport RangeRefineItem, { RangeRefineItemType } from './range-refine-item';\nimport RefineItem from './refine-item';\nimport { IRefineItemCommonProps } from './refine-item.props.common';\nimport { IRefineItemToggleNotification } from './refine-item-toggle-notification';\nimport { findMatchingRefinementCriterion, isRangeType } from './utilities';\n\n/**\n * Properties associated with the RefineSubmenu component.\n */\nexport interface IRefineSubmenuProps {\n tempRangeTypeTODO: RangeRefineItemType;\n minValueSliderThumbAriaLabel?: string;\n maxValueSliderThumbAriaLabel?: string;\n productRefinerHierarchy: IProductRefinerHierarchy;\n selectedRefinerValues: ProductRefinerValue[];\n refineItemCommonProps: IRefineItemCommonProps;\n isDisabled: boolean;\n isExpandedOnInitialLoad: boolean;\n context: ICoreContext>;\n moduleId: string;\n moduleTypeName: string;\n productCountAriaLabel?: string;\n singleProductCountAriaLabel?: string;\n refineItemAriaLabel?: string;\n refineItemsAriaLabel?: string;\n isMobile?: boolean;\n\n /**\n * The telemetry content\n */\n telemetryContent?: ITelemetryContent;\n onUpdateRefiners(notfication: Readonly): void;\n urlBuilder(refiner: IRefineItemToggleNotification): string;\n}\n\n/**\n * Refine submenu state.\n */\nexport interface IRefineSubmenuState extends React.ComponentState {\n expanded: boolean;\n}\n\n/**\n *\n * The RefineSubmenu component renders the submenu category and child items.\n * This computed observes the stateful category hierarchy object.\n * @extends {React.PureComponent}\n */\nclass RefineSubmenu extends React.Component {\n constructor(props: IRefineSubmenuProps) {\n super(props);\n\n this._onToggleItem = this._onToggleItem.bind(this);\n this._onToggleSubmenu = this._onToggleSubmenu.bind(this);\n\n const isExpanded = this.props.isExpandedOnInitialLoad;\n\n // If (this.props.productRefinerHierarchy.DataTypeValue === ProductRefinerValueDataTypeValue.Range) {\n // isExpanded = true;\n // }\n\n this.state = {\n expanded: isExpanded\n };\n }\n\n public shouldComponentUpdate(nextProps: IRefineSubmenuProps, nextState: IRefineSubmenuState): boolean {\n if (this.state === nextState && this.props === nextProps) {\n return false;\n }\n return true;\n }\n\n public render(): JSX.Element | null {\n const { productRefinerHierarchy, refineItemCommonProps } = this.props;\n\n if (!productRefinerHierarchy) {\n refineItemCommonProps.telemetry.error('Cannot render submenu without refiner hierarchy data');\n }\n\n if (productRefinerHierarchy.SourceValue === ProductRefinerSource.Rating && this.props.context.app.config.hideRating) {\n return null;\n }\n\n const className = classnames(\n 'ms-refine-submenu',\n 'list-group',\n productRefinerHierarchy.KeyName // Deprecated because of the localization issues. Leaving for backward compatibility reasons.\n );\n\n return (\n
    \n \n {productRefinerHierarchy.KeyName}\n \n \n {this._renderChildItems(productRefinerHierarchy)}\n \n
    \n );\n }\n\n private _renderChildItems(productRefinerHierarchy: IProductRefinerHierarchy): JSX.Element | null {\n if (isRangeType(productRefinerHierarchy.DataTypeValue)) {\n return this._renderRange(productRefinerHierarchy);\n }\n return this._renderSingleMultiSelect(productRefinerHierarchy);\n }\n\n private _renderSingleMultiSelect(productRefinerHierarchy: IProductRefinerHierarchy): JSX.Element | null {\n const {\n isDisabled,\n refineItemCommonProps,\n selectedRefinerValues,\n context,\n productCountAriaLabel,\n singleProductCountAriaLabel,\n refineItemAriaLabel,\n refineItemsAriaLabel,\n isMobile\n } = this.props;\n const isSingleSelect =\n productRefinerHierarchy.RefinerTypeValue === RefinerType.SingleSelect &&\n productRefinerHierarchy.SourceValue === ProductRefinerSource.Rating;\n const role = isSingleSelect ? { role: 'listbox' } : undefined;\n const refinerValuesList = productRefinerHierarchy.Values || [];\n const listItems = refinerValuesList.map((child: ProductRefinerValue, index: number) => {\n if (!child) {\n refineItemCommonProps.telemetry.error(\n `[refine-submenu] Could not render refine item for refiner ${productRefinerHierarchy.RecordId} (${productRefinerHierarchy.KeyName})`\n );\n return null;\n }\n\n const selectedRefinementCriterion = findMatchingRefinementCriterion(child, selectedRefinerValues);\n\n return (\n \n refinerValuesList.find(value => value.RefinerRecordId === selectedValue.RefinerRecordId)\n )}\n refineItemCommonProps={refineItemCommonProps}\n onToggle={this._onToggleItem}\n urlBuilder={this.props.urlBuilder}\n isDisabled={isDisabled}\n key={index}\n index={index}\n context={context}\n moduleId={this.props.moduleId}\n moduleTypeName={this.props.moduleTypeName}\n telemetryContent={this.props.telemetryContent}\n productCountAriaLabel={productCountAriaLabel}\n refineItemAriaLabel={refineItemAriaLabel}\n refineItemsAriaLabel={refineItemsAriaLabel}\n singleProductCountAriaLabel={singleProductCountAriaLabel}\n isMobileView={isMobile}\n />\n );\n });\n return (\n \n {listItems}\n \n );\n }\n\n private _getRangeType(productRefinerHierarchy: IProductRefinerHierarchy): 'input' | 'slider' {\n if (\n productRefinerHierarchy.DisplayTemplateValue === DisplayTemplate.Range ||\n productRefinerHierarchy.DisplayTemplateValue === DisplayTemplate.Slider ||\n productRefinerHierarchy.DisplayTemplateValue === DisplayTemplate.SliderWithBars\n ) {\n return 'slider';\n }\n return 'input';\n }\n\n private _renderRange(productRefinerHierarchy: IProductRefinerHierarchy): JSX.Element | null {\n const {\n isDisabled,\n refineItemCommonProps,\n selectedRefinerValues,\n context,\n minValueSliderThumbAriaLabel,\n maxValueSliderThumbAriaLabel\n } = this.props;\n const submenuClassNamePrefix = 'ms-refine-submenu__item list-group-item refine-submenu__item';\n const refinerValuesList = productRefinerHierarchy.Values || [];\n const listItems = refinerValuesList.map((child: ProductRefinerValue, index: number) => {\n if (!child) {\n refineItemCommonProps.telemetry.error(\n `Could not render refine item for refiner ${productRefinerHierarchy.RecordId} (${productRefinerHierarchy.KeyName})`\n );\n return null;\n }\n\n const selectedRefinementCriterion = findMatchingRefinementCriterion(child, selectedRefinerValues);\n\n const rangeType = this._getRangeType(productRefinerHierarchy);\n const key = selectedRefinementCriterion\n ? `${selectedRefinementCriterion.LeftValueBoundString}-${selectedRefinementCriterion.RightValueBoundString}`\n : `not-selected-${index}`;\n return (\n
  • \n \n
  • \n );\n });\n return
      {listItems}
    ;\n }\n\n private _onToggleItem(itemToggleNotification: IRefineItemToggleNotification): void {\n this.props.onUpdateRefiners(itemToggleNotification);\n }\n\n private _onToggleSubmenu(): void {\n this.setState(prevState => ({\n expanded: !prevState.expanded\n }));\n }\n}\n\nexport default RefineSubmenu;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as React from 'react';\n\ninterface ISeparator {\n separator: string;\n}\n\nexport const Separator: React.FC = ({ separator }) => (\n \n {` `}\n {separator}\n {` `}\n \n);\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as React from 'react';\n\ninterface ITitle {\n className: string;\n text: string;\n}\n\nexport const Title: React.FC = ({ text, className }) => (\n \n {` `}\n {text}\n {` `}\n \n);\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport {\n CategoryHierarchy as CategoryHierarchyData,\n IProductRefinerHierarchy,\n IProductsDimensionsAvailabilities\n} from '@msdyn365-commerce/commerce-entities';\nimport MsDyn365, { getCatalogId, ICoreContext } from '@msdyn365-commerce/core';\nimport {\n ChannelInventoryConfiguration,\n format,\n ProductPrice,\n ProductRefinerValue,\n SortColumn,\n StoreOperationsDataActions,\n TextValueTranslation\n} from '@msdyn365-commerce/retail-proxy';\nimport {\n ArrayExtensions,\n DimensionAvailabilitiesForProductSearchResultInput,\n DimensionTypes,\n DimensionSwatchDisplayTypes,\n getDimensionAvailabilitiesForProductSearchResultAction,\n getPriceForProductSearchResult,\n IDimensionsApp,\n PriceForProductSearchResultInput\n} from '@msdyn365-commerce-modules/retail-actions';\nimport {\n getTelemetryObject,\n ILabeledDropdownOnChangeNotification,\n ILabeledDropdownOption,\n IModuleProps,\n INodeProps,\n isMobile,\n ITelemetryContent,\n LabeledDropdown,\n UncontrolledPagination,\n VariantType\n} from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport { computed, observable, reaction, transaction } from 'mobx';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport {\n buildListPageUrl,\n getCollectionProducts,\n getCollectionRefinersAction,\n getCurrentUrl,\n GetFullProductsByCollectionInput,\n IFullProductsSearchResultsWithCount,\n parseQueryParam,\n ProductListInventoryFilteringOptions,\n RefinersByCollectionInput,\n sortOptions\n} from './actions';\nimport { hydrateRefinersFromUrl } from './actions/url-utils';\nimport {\n ErrorMessage,\n FeatureSearchResultItem,\n getUpdatedRefinementCriteria,\n IChoiceSummaryClickNotification,\n IRefineItemCommonProps,\n IRefineItemToggleNotification,\n ISearchResultModalViewProps,\n isMatchingRefinementCriterion,\n Link,\n ModalToggle,\n ProductSearchResultItems,\n SearchResultModal,\n Separator,\n Title\n} from './components';\nimport ChoiceSummary from './components/choice-summary';\nimport RefineSubmenu from './components/refine-submenu';\nimport { ListPageState } from './list-page-state';\nimport { ISearchResultContainerData } from './search-result-container.data';\nimport { expandRefinersCount, ISearchResultContainerProps } from './search-result-container.props.autogenerated';\n\nexport interface ISearchResultContainerViewProps extends ISearchResultContainerProps {\n products?: React.ReactNode;\n className?: string;\n SearchResultContainer: IModuleProps;\n TitleViewProps: ITitleViewProps;\n categoryHierarchy: ICategoryHierarchyViewProps;\n pagination?: React.ReactNode;\n ProductsContainer: INodeProps;\n ProductSectionContainer: INodeProps;\n refineMenu: IRefineMenuViewProps;\n sortByOptions: ISortByViewProps;\n choiceSummary?: React.ReactNode;\n modalToggle: React.ReactNode;\n searchResultModal: ISearchResultModalViewProps;\n isMobile: boolean;\n CategoryNavContainer: INodeProps;\n RefineAndProductSectionContainer: INodeProps;\n errorMessage: React.ReactNode;\n FeatureSearchContainer: INodeProps;\n similarLookProduct?: React.ReactNode;\n productPrices?: ProductPrice[];\n productsDimensionAvailabilities?: IProductsDimensionsAvailabilities[][];\n}\n\nexport interface ITitleViewProps {\n TitleContainer: INodeProps;\n title: ISearchResultTitle;\n}\n\nexport interface IRefineMenuViewProps {\n RefineMenuContainer: INodeProps;\n RefinerSectionContainer: INodeProps;\n refiners?: React.ReactNode[];\n}\n\nexport interface ICategoryHierarchyViewProps {\n categoryHierarchyList?: React.ReactNode[];\n categoryHierarchySeparator?: React.ReactNode;\n CategoryHierarchyContainer: INodeProps;\n}\n\nexport interface ISortByViewProps {\n SortingContainer: INodeProps;\n sortByDropDown?: React.ReactNode;\n}\n\nexport type GridSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n\n/**\n * Title component for search result container.\n */\nexport interface ISearchResultTitle {\n titlePrefix?: React.ReactNode;\n titleText?: React.ReactNode;\n titleCount?: React.ReactNode;\n}\n\nexport interface ISearchResultContainerState {\n sortingState: ISortByCollectionState;\n modalIsOpen: boolean;\n refiners: IProductRefinerHierarchy[];\n productsDimensionAvailabilities?: IProductsDimensionsAvailabilities[][];\n channelInventoryConfiguration?: ChannelInventoryConfiguration;\n}\n\ninterface ISortByCollectionState {\n selectedSortByOption: ILabeledDropdownOption;\n pending: boolean;\n}\n\n/**\n *\n * SearchResultContainer component.\n * @extends {React.PureComponent>}\n */\n@observer\nexport default class SearchResultContainer extends React.PureComponent<\n ISearchResultContainerProps,\n ISearchResultContainerState\n> {\n @computed get isMobile(): boolean {\n return this._viewport === 'xs' || this._viewport === 'sm';\n }\n\n private readonly sortByDropdownOptions: ILabeledDropdownOption[] = [\n { key: sortOptions.sortByOptionRelevanceDesc, value: this.props.resources.sortByOptionRelevanceDesc },\n { key: sortOptions.sortByOptionNameAsc, value: this.props.resources.sortByOptionNameAsc },\n { key: sortOptions.sortByOptionNameDesc, value: this.props.resources.sortByOptionNameDesc },\n { key: sortOptions.sortByOptionPriceAsc, value: this.props.resources.sortByOptionPriceAsc },\n { key: sortOptions.sortByOptionPriceDesc, value: this.props.resources.sortByOptionPriceDesc },\n { key: sortOptions.sortByOptionRatingDesc, value: this.props.resources.sortByOptionRatingDesc },\n { key: sortOptions.sortByOptionBestSelling, value: this.props.resources.sortByOptionBestSelling },\n { key: sortOptions.sortByOptionNewScore, value: this.props.resources.sortByOptionNewScore },\n { key: sortOptions.sortByOptionTrendingScore, value: this.props.resources.sortByOptionTrendingScore }\n ];\n\n private readonly _refineItemCommonProps: IRefineItemCommonProps;\n\n private readonly _pageType: string | undefined = this.props.context.request.urlTokens.pageType;\n\n @observable\n private _viewport: GridSize = 'lg';\n\n private readonly _modalToggleRef: React.RefObject;\n\n private readonly _sortAndFilterContainerRef: React.RefObject;\n\n private expandrefinerCount: number | undefined = 0;\n\n private readonly telemetryContent: ITelemetryContent;\n\n private readonly productPrices: ProductPrice[];\n\n private readonly defaultPageNumber = 0;\n\n private readonly catalogId = getCatalogId(this.props.context.request);\n\n private isListPageStateUpdated: boolean = false;\n\n private _isMounted: boolean = false;\n\n public static getFriendlyName(locale: string, nameTranslations?: TextValueTranslation[]): string | undefined {\n let nameTranslation: TextValueTranslation | undefined;\n if (locale && nameTranslations && ArrayExtensions.hasElements(nameTranslations)) {\n nameTranslation = nameTranslations.find(item => item.Language!.toLowerCase() === locale.toLowerCase());\n }\n\n return nameTranslation?.Text;\n }\n\n public constructor(props: ISearchResultContainerProps, state: ISearchResultContainerState) {\n super(props);\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Check required.\n this._viewport = props.context.request?.device?.Type === 'Mobile' ? 'xs' : 'lg';\n this._modalToggleRef = React.createRef();\n this._sortAndFilterContainerRef = React.createRef();\n this._toggleModal = this._toggleModal.bind(this);\n this._updateViewport = this._updateViewport.bind(this);\n this.productPrices = [];\n this.state = {\n sortingState: {\n pending: false,\n selectedSortByOption: this.sortByDropdownOptions[0]\n },\n modalIsOpen: false,\n refiners: [],\n channelInventoryConfiguration: undefined\n };\n const { placeholderTextMax, minLabel, maxLabel, rangeNameFormat } = this.props.resources;\n\n const locale = this.props.context.request.locale;\n const telemetry = this.props.telemetry;\n const validationErrorNaN = this.props.resources.validationErrorNotNumber;\n const validationErrorRange = this.props.resources.validationErrorNotRange;\n this._refineItemCommonProps = {\n telemetry,\n locale,\n placeholderTextMax,\n minLabel,\n maxLabel,\n rangeNameFormat,\n validationErrorNaN,\n validationErrorRange\n };\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n this._updateViewport();\n }\n public async componentDidMount(): Promise {\n this._isMounted = true;\n if (MsDyn365.isBrowser && window.addEventListener) {\n window.addEventListener('resize', this._updateViewport);\n this._updateViewport();\n }\n\n const listPageState = await this.props.data.listPageState;\n const products = await this.props.data.products;\n const channelInventoryConfiguration = await StoreOperationsDataActions.getInventoryConfigurationAsync({\n callerContext: this.props.context.actionContext\n });\n if (this._isMounted) {\n this.setState({ channelInventoryConfiguration });\n }\n\n this._updateListPageState(listPageState, products);\n\n // Initialize reaction based on listPageState properties\n reaction(\n () => {\n return [\n listPageState.activeFilters?.length,\n listPageState.currentPageNumber,\n ArrayExtensions.hasElements(listPageState.sortingCritera?.Columns)\n ];\n },\n async () => {\n const newListPageState = await this.props.data.listPageState;\n const input = new GetFullProductsByCollectionInput(\n newListPageState.pageType,\n this.props.context.request.apiSettings,\n {\n Paging: {\n Top: this.props.config.itemsPerPage,\n Skip: Math.max(newListPageState.pageSize * (newListPageState.currentPageNumber ?? 0), 0)\n },\n count: true,\n Sorting: newListPageState.sortingCritera ?? {}\n },\n newListPageState.activeFilters ?? [],\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing -- RecordId is string. Check required.\n +(this.props.context.request.urlTokens.recordId || 0),\n\n // eslint-disable-next-line max-len -- existing code\n this.props.context.request.query?.q\n ? this.props.context.request.query.q\n : JSON.stringify({\n ProductId: this.props.context.request.query?.productId,\n Recommendation: this.props.context.request.query?.recommendation\n }),\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Required check.\n !!this.props?.config?.includeAttributes,\n this.props.config.updateRefinerPanel,\n this.props.context.request.locale,\n this.catalogId,\n channelInventoryConfiguration\n );\n\n const productResults = await getCollectionProducts(input, this.props.context.actionContext);\n newListPageState.totalProductCount = productResults.count;\n newListPageState.activeProducts = productResults.products;\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- check is required.\n if (\n this.props.config.enableAffiliationBasedPricing &&\n this.props.context.actionContext.requestContext?.user?.isAuthenticated\n ) {\n // eslint-disable-next-line @typescript-eslint/no-floating-promises -- Call api to retrieve the availabilities data without blocking the UI.\n this._getActivePrice();\n }\n\n await this._updateVariantAvailability();\n\n if (this.props.config.updateRefinerPanel) {\n const refinerInput = new RefinersByCollectionInput(\n newListPageState.pageType,\n this.props.context.request.apiSettings,\n {\n Paging: {\n Top: this.props.config.itemsPerPage,\n Skip: Math.max(\n newListPageState.pageSize * (newListPageState.currentPageNumber ?? this.defaultPageNumber),\n this.defaultPageNumber\n )\n },\n count: true,\n Sorting: newListPageState.sortingCritera ?? {}\n },\n newListPageState.activeFilters ?? [],\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing -- RecordId is string. Check required.\n +(this.props.context.request.urlTokens.recordId || 0),\n this.props.context.request.query?.q\n ? this.props.context.request.query.q\n : this.props.context.request.query?.productId,\n false,\n this.props.config.updateRefinerPanel,\n undefined,\n this.catalogId,\n channelInventoryConfiguration\n );\n\n const refiners = await getCollectionRefinersAction(refinerInput, this.props.context.actionContext);\n this.setState({ refiners });\n }\n }\n );\n\n if (\n this.props.config.enableAffiliationBasedPricing &&\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Condition required.\n this.props.context.actionContext.requestContext?.user?.isAuthenticated\n ) {\n // eslint-disable-next-line @typescript-eslint/no-floating-promises -- Call api to retrieve the availabilities data without blocking the UI.\n this._getActivePrice();\n }\n await this._updateVariantAvailability();\n }\n\n public componentWillUnmount(): void {\n this._isMounted = false;\n if (MsDyn365.isBrowser && window.removeEventListener) {\n window.removeEventListener('resize', this._updateViewport);\n }\n }\n\n public render(): JSX.Element {\n const {\n config: { imageSettings, className },\n resources,\n data: { listPageState, products: productCollection, featureProduct }\n } = this.props;\n\n if (!this.isListPageStateUpdated && listPageState.result && productCollection.result) {\n this._updateListPageState(listPageState.result, productCollection.result);\n this.isListPageStateUpdated = true;\n }\n\n const products = (this.props.data.listPageState.result && this.props.data.listPageState.result.activeProducts) || [];\n const searchProduct = listPageState.result?.featureProduct ?? featureProduct.result ?? null;\n let errorText = '';\n if (!ArrayExtensions.hasElements(products)) {\n errorText = this._pageType === 'Category' ? resources.resultCategoryNotFoundText : resources.resultSearchNotFoundText;\n }\n const productsComponent = this._getProducts();\n const featureComponent = (\n \n );\n\n const searchResultContainerViewProps = {\n ...this.props,\n products: productsComponent,\n TitleViewProps: this._getCollectionTitle(),\n categoryHierarchy: !this.props.config.disableHierarchy && this._getCategoryHierarchy(),\n refineMenu: this._getRefineMenu(),\n className: classnames('ms-search-result-container', className),\n SearchResultContainer: {\n moduleProps: this.props,\n className: classnames('ms-search-result-container', className)\n },\n sortByOptions: this.props.data.listPageState.result?.totalProductCount !== 0 ? this._getSortingDropDown() : null,\n pagination: this._getPagination(),\n ProductsContainer: { className: 'ms-search-result-container__Products' },\n ProductSectionContainer: { className: 'ms-search-result-container__product-section' },\n CategoryNavContainer: { className: 'ms-search-result-container__category-nav-section' },\n RefineAndProductSectionContainer: { className: 'ms-search-result-container__refine-product-section' },\n choiceSummary: this._getChoiceSummary(),\n modalToggle:\n this.props.data.listPageState.result?.totalProductCount !== 0 ? (\n \n ) : null,\n searchResultModal: this._getSearchResultModal(),\n isMobile: this.isMobile,\n errorMessage: errorText && ,\n FeatureSearchContainer: { className: 'ms-feature-search-result' },\n similarLookProduct: searchProduct ? featureComponent : null,\n productPrices: this.productPrices,\n productsDimensionAvailabilities: this.state.productsDimensionAvailabilities\n };\n return this.props.renderView(searchResultContainerViewProps) as React.ReactElement;\n }\n\n /**\n * Get products variants dimension availabilities.\n * @returns Void.\n */\n private readonly _updateVariantAvailability = async (): Promise => {\n const context = this.props.context as ICoreContext;\n const dimensionsToDisplayOnProductCard = context.app.config.dimensionsInProductCard;\n const dimensionsToDisplayAsSwatch = context.app.config.dimensionsAsSwatchType;\n if (\n ArrayExtensions.hasElements(dimensionsToDisplayOnProductCard) &&\n !dimensionsToDisplayOnProductCard.includes(DimensionTypes.none) &&\n ArrayExtensions.hasElements(dimensionsToDisplayAsSwatch) &&\n !dimensionsToDisplayAsSwatch.includes(DimensionTypes.none) &&\n this.props.config.includeAttributes\n ) {\n await this._getProductsDimensionsAvailabilities();\n }\n };\n\n /**\n * Update the list page state with initial data.\n * @param listPageState -- List page State.\n * @param products -- Products.\n */\n private readonly _updateListPageState = (listPageState: ListPageState, products: IFullProductsSearchResultsWithCount): void => {\n let querySorting: SortColumn[] = [];\n const defaultPageNumber: number = 10;\n\n if (this._pageType === 'Category') {\n listPageState.pageType = 'Category';\n } else {\n listPageState.pageType = 'Search';\n }\n\n if (this.props.context.request.query?.sorting) {\n querySorting = JSON.parse(decodeURIComponent(this.props.context.request.query.sorting)) as SortColumn[];\n }\n\n listPageState.currentPageNumber =\n (this.props.context.request.query &&\n +this.props.context.request.query.skip / (this.props.config.itemsPerPage ?? defaultPageNumber)) ||\n 0;\n listPageState.sortingCritera = { Columns: querySorting };\n listPageState.pageSize = this.props.config.itemsPerPage ?? defaultPageNumber;\n listPageState.activeProducts = products.products;\n listPageState.totalProductCount = products.count;\n listPageState.activeFilters = hydrateRefinersFromUrl(this.props.context.request) || [];\n if (this.props.context.request.query?.productId) {\n const featureProduct = this.props.data.featureProduct.result;\n if (featureProduct) {\n listPageState.featureProduct = featureProduct;\n }\n }\n };\n\n /**\n * Get products dimension availabilities.\n * @returns Void.\n */\n private readonly _getProductsDimensionsAvailabilities = async (): Promise => {\n const productsList = this.props.data.listPageState.result?.activeProducts ?? [];\n\n const productsDimensionAvailabilities = await getDimensionAvailabilitiesForProductSearchResultAction(\n new DimensionAvailabilitiesForProductSearchResultInput(\n productsList,\n this.props.context as ICoreContext,\n DimensionSwatchDisplayTypes.productCard\n ),\n this.props.context.actionContext\n );\n\n if (ArrayExtensions.hasElements(productsDimensionAvailabilities)) {\n this.setState({ productsDimensionAvailabilities });\n }\n };\n\n /**\n * Get the active price for the products.\n */\n private readonly _getActivePrice = async (): Promise => {\n const productsList = this.props.data.listPageState.result?.activeProducts ?? [];\n const products = await getPriceForProductSearchResult(\n new PriceForProductSearchResultInput(productsList),\n this.props.context.actionContext\n );\n\n const listPageState = await this.props.data.listPageState;\n listPageState.activeProducts = products;\n };\n\n private readonly _getSearchResultModal = (): ISearchResultModalViewProps => {\n const { resources } = this.props;\n return SearchResultModal({\n resources: {\n modalCloseButtonText: resources.modalCloseButtonText,\n modalTitle: resources.modalTitle\n },\n isOpen: this.state.modalIsOpen,\n returnRef: this._modalToggleRef,\n onModalToggle: this._toggleModal\n });\n };\n\n private readonly _getCollectionTitle = (): ITitleViewProps => {\n const { data, context, resources } = this.props;\n\n let collectionTitle: string | undefined = '';\n if (context && context.request && context.request.query && context.request.query.q) {\n collectionTitle = `\"${context.request.query.q}\"`;\n } else {\n collectionTitle =\n (data.category.result &&\n SearchResultContainer.getFriendlyName(context.request.locale, data.category.result.NameTranslations)) ||\n (data.category.result && data.category.result.Name) ||\n this.props.context.request.query?.title ||\n '';\n }\n let productCountText = '';\n let productCountNumber: number | undefined;\n if (data.listPageState && data.listPageState.result && data.listPageState.result.totalProductCount !== undefined) {\n productCountNumber = data.listPageState.result.totalProductCount;\n } else if (data.products && data.products.result) {\n productCountNumber = data.products.result.count;\n }\n\n if (productCountNumber && productCountNumber !== 0) {\n productCountText =\n productCountNumber !== 1\n ? format(this.props.resources.numberOfProducts, productCountNumber)\n : this.props.resources.oneProduct;\n } else {\n productCountText = format(this.props.resources.numberOfProducts, 0);\n }\n const pageName = context.request.telemetryPageName ? `result-count-${context.request.telemetryPageName.toLowerCase()}` : '';\n const titlePrefix = ;\n const titleText = collectionTitle && <Title className='ms-search-result__collection-title-text' text={collectionTitle} />;\n const titleCount = <Title className='ms-search-result__collection-title-count' text={productCountText} />;\n\n return {\n TitleContainer: { className: `ms-search-result-container__title ${pageName}` },\n title: {\n titlePrefix,\n titleText,\n titleCount\n }\n };\n };\n\n private readonly _getCategoryHierarchy = (): ICategoryHierarchyViewProps => {\n const { data } = this.props;\n const categoryHierarchy = data.categoryHierarchy.result;\n const categoryLinks =\n categoryHierarchy &&\n categoryHierarchy.map((value: CategoryHierarchyData, index: number) => {\n return (\n <Link\n key={index}\n text={value.Name}\n ariaLabel={`${this.props.resources.categoryLinkAriaLabel} ${value.Name}`}\n href={value.Url}\n />\n );\n });\n const categoryLinkSeparator = <Separator separator='/' />;\n\n return {\n CategoryHierarchyContainer: { tag: 'nav', className: 'ms-search-result-container__category-hierarchy' },\n categoryHierarchyList: categoryLinks,\n categoryHierarchySeparator: categoryLinkSeparator\n };\n };\n\n private readonly _getSortingDropDown = (): ISortByViewProps => {\n const { resources } = this.props;\n const activeDropdown = this._getCurrentlySelectedOption() || this.state.sortingState.selectedSortByOption;\n let dropdownOptions = this._getAllSortByOptions();\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- App config settings are of \"any\" value.\n if (this.props.context.app.config.hideRating) {\n dropdownOptions = dropdownOptions.filter(dropdownOption => dropdownOption.key !== sortOptions.sortByOptionRatingDesc);\n }\n\n const dropdown = (\n <LabeledDropdown\n labelClassname='reviews-list-sort-by'\n labelText={resources.sortByDropdownLabel}\n dropdownId='categorySortByDropdown'\n dropdownClassname='reviews-list-dropdown'\n toggleColor='link'\n dropdownOptions={dropdownOptions}\n selectedOption={activeDropdown}\n onSelectOption={this._updateSortByDropdown}\n ref={this._sortAndFilterContainerRef}\n />\n );\n return {\n SortingContainer: { className: 'ms-search-result-container__Sort-by-category' },\n sortByDropDown: dropdown\n };\n };\n\n private readonly _getPagination = (): React.ReactNode => {\n const { config, context, data, resources } = this.props;\n const listPageState = data.listPageState.result;\n const fullUrl = getCurrentUrl(context.request);\n const itemsPerPage = config.itemsPerPage || 10;\n // eslint-disable-next-line max-len -- existing code\n const skipCount = listPageState?.currentPageNumber\n ? listPageState.currentPageNumber * (this.props.config.itemsPerPage || 10)\n : (this.props.context.request.query && +this.props.context.request.query.skip) || 0;\n const totalItems = listPageState?.totalProductCount || 0;\n const previousText = resources.flipperPrevious;\n const nextText = resources.flipperNext;\n\n if (totalItems <= itemsPerPage) {\n return null;\n }\n return (\n <UncontrolledPagination\n className='ms-search-result-container__pagination'\n role='navigation'\n aria-label={resources.paginationAriaLabel}\n url={fullUrl.href}\n qsp='skip'\n items={totalItems}\n itemsPerPage={itemsPerPage}\n startingItem={skipCount}\n previousText={this._renderPrev(previousText)}\n nextText={this._renderNext(nextText)}\n previousAriaLabel={previousText}\n nextAriaLabel={nextText}\n telemetryContent={this.telemetryContent}\n />\n );\n };\n\n private readonly _getRefineMenu = (): IRefineMenuViewProps => {\n const { data, context, config } = this.props;\n const tempRangeTypeTODO = context.request.query && context.request.query.inputRange ? 'input' : 'slider';\n const validRefiners =\n this.props.config.updateRefinerPanel && ArrayExtensions.hasElements(this.state.refiners)\n ? this.state.refiners.filter(refiner => {\n return ArrayExtensions.hasElements(refiner.Values) && !this._shouldHideFromRefiners(refiner);\n })\n : data.refiners.result &&\n data.refiners.result.filter(refiner => {\n return ArrayExtensions.hasElements(refiner.Values) && !this._shouldHideFromRefiners(refiner);\n });\n\n const activeRefiners = (data.listPageState.result && data.listPageState.result.activeFilters) || [];\n\n this._getexpandRefinerCount(validRefiners && validRefiners.length, config.expandRefinersCount);\n const expandedRefiners = this.expandrefinerCount;\n const subMenus =\n validRefiners &&\n validRefiners.map((productRefinerHierarchy: IProductRefinerHierarchy, index: number) => {\n return (\n <RefineSubmenu\n productRefinerHierarchy={productRefinerHierarchy}\n selectedRefinerValues={activeRefiners}\n refineItemCommonProps={this._refineItemCommonProps}\n minValueSliderThumbAriaLabel={this.props.resources.minValueSliderThumbAriaLabel}\n maxValueSliderThumbAriaLabel={this.props.resources.maxValueSliderThumbAriaLabel}\n key={index}\n onUpdateRefiners={this._onUpdateRefiners}\n urlBuilder={this._buildRefinerUrl}\n isDisabled={false}\n isExpandedOnInitialLoad={!!(expandedRefiners && expandedRefiners > index)}\n tempRangeTypeTODO={tempRangeTypeTODO}\n context={context}\n moduleId={this.props.id}\n moduleTypeName={this.props.typeName}\n telemetryContent={this.telemetryContent}\n productCountAriaLabel={this.props.resources.productCountAriaLabel}\n refineItemAriaLabel={this.props.resources.refineItemAriaLabel}\n refineItemsAriaLabel={this.props.resources.refineItemsAriaLabel}\n singleProductCountAriaLabel={this.props.resources.singleProductCountAriaLabel}\n isMobile={this.isMobile}\n />\n );\n });\n\n return {\n RefineMenuContainer: { className: 'ms-search-result-container__refine-menu' },\n RefinerSectionContainer: { className: 'ms-search-result-container__refiner-section' },\n refiners: subMenus\n };\n };\n\n /**\n * Should hide from refiners.\n * @param refiner - The refiner.\n * @returns ShouldHideFromRefiners.\n */\n private readonly _shouldHideFromRefiners = (refiner: IProductRefinerHierarchy): boolean => {\n const { channelInventoryConfiguration } = this.state;\n const isInventorySortableAttribute =\n (this.props.data.products.result?.inventoryAwareSortableAttributeId !== 0 &&\n refiner.RecordId === this.props.data.products.result?.inventoryAwareSortableAttributeId) ||\n (channelInventoryConfiguration?.ProductAvailabilitySortableAttributeRecordId !== 0 &&\n refiner.RecordId === channelInventoryConfiguration?.ProductAvailabilitySortableAttributeRecordId);\n\n const isInventoryProductAttribute =\n (this.props.data.products.result?.channelInventoryConfigurationId !== 0 &&\n refiner.RecordId === this.props.data.products.result?.channelInventoryConfigurationId) ||\n (channelInventoryConfiguration?.InventoryProductAttributeRecordId !== 0 &&\n refiner.RecordId === channelInventoryConfiguration?.InventoryProductAttributeRecordId);\n\n // Always hide sortable attribute since it's just for sorting products in Azure search, not for customers\n return (\n isInventorySortableAttribute ||\n (this.props.context.app.config.productListInventoryDisplay === ProductListInventoryFilteringOptions.HideOOS &&\n isInventoryProductAttribute)\n );\n };\n\n private readonly _getChoiceSummary = (): React.ReactNode => {\n const { resources, data, telemetry } = this.props;\n const { channelInventoryConfiguration } = this.state;\n const selectedRefiners = (data.listPageState.result && data.listPageState.result.activeFilters) || [];\n const refinerValueName = this.props.data.refiners.result?.find(rating => rating.KeyName === 'Rating');\n return (\n <ChoiceSummary\n classNames='ms-choice-summary-by-category'\n clearAllText={resources.clearAllText}\n label={resources.choiceSummaryLabel}\n closeAriaLabel={resources.closeAriaLabel}\n selectedChoices={selectedRefiners}\n // @ts-expect-error: NOTE Type-unsafe line below, null refinersByCategoryHierarchy case not handled\n refinerHierarchy={data.refiners.result}\n choiceFormat={resources.choiceFormat}\n choiceRangeValueFormat={resources.choiceRangeValueFormat}\n telemetry={telemetry}\n onChoiceClicked={this._onChoiceClicked}\n urlBuilder={this._buildRefinerUrlForChoiceSummary}\n choiceAriaLabel={resources.choiceAriaLabel}\n telemetryContent={this.telemetryContent}\n context={this.props.context}\n channelInventoryConfigurationId={channelInventoryConfiguration?.InventoryProductAttributeRecordId}\n refinerValues={refinerValueName}\n />\n );\n };\n\n /**\n * Get Active products.\n * @returns - JSX Elements.\n */\n private readonly _getProducts = (): JSX.Element => {\n const {\n config: { imageSettings, allowBackNavigation: shouldAllowBackNavigation }\n } = this.props;\n const { resources } = this.props;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access -- Reading config value.\n const breadCrumbType: string = this.props.context.app.config.breadcrumbType;\n const shouldAllowBack = shouldAllowBackNavigation && (breadCrumbType === 'back' || breadCrumbType === 'categoryAndBack');\n\n const products = (this.props.data.listPageState.result && this.props.data.listPageState.result.activeProducts) || [];\n const quickviewSlot = this.props.slots?.quickview?.[0];\n const productComparisonButton = ArrayExtensions.hasElements(this.props.slots.productComparisonButton)\n ? this.props.slots.productComparisonButton[0]\n : null;\n\n const isPriceMinMaxFeatureState = this.props.data.featureState.result?.find(\n featureState => featureState.Name === 'Dynamics.AX.Application.RetailSearchPriceRangeFeature'\n );\n return (\n <ProductSearchResultItems\n products={products}\n context={this.props.context}\n imageSettings={imageSettings}\n resources={resources}\n moduleType={this.props.typeName}\n moduleId={this.props.id}\n allowBackNavigation={shouldAllowBack}\n telemetryContent={this.telemetryContent}\n quickviewSlot={quickviewSlot}\n productComparisonButton={productComparisonButton}\n channelInventoryConfigurationId={this.props.data.products.result?.channelInventoryConfigurationId}\n isPriceMinMaxEnabled={isPriceMinMaxFeatureState?.IsEnabled}\n productsDimensionAvailabilities={this.state.productsDimensionAvailabilities}\n />\n );\n };\n\n private readonly _updateSortByDropdown = (notification: ILabeledDropdownOnChangeNotification): void => {\n const {\n context: { request: requestContext, actionContext }\n } = this.props;\n\n if (!requestContext || !actionContext || !this.props.data.listPageState.result) {\n // eslint-disable-next-line max-len -- existing code\n const error = `[sort-by-category] cannot sort without context: ${!requestContext ? 'requestContext ' : ''} ${\n !actionContext ? 'actionContext ' : ''\n } could not be found`;\n this.props.telemetry.warning(error);\n return;\n }\n\n window.history.pushState(\n {},\n '',\n buildListPageUrl(\n getCurrentUrl(this.props.context.request),\n undefined,\n [this._getSortColumnFromSelectedOption(notification.selectedOption)],\n undefined\n )\n );\n transaction(() => {\n this.props.data.listPageState.result!.currentPageNumber = 0;\n this.props.data.listPageState.result!.sortingCritera = {\n Columns: [this._getSortColumnFromSelectedOption(notification.selectedOption)]\n };\n });\n };\n\n private readonly _getSortColumnFromSelectedOption = (option: ILabeledDropdownOption): SortColumn => {\n const { data } = this.props;\n\n if (!data.searchConfiguration.result) {\n return {};\n }\n\n const mappedConfiguration = data.searchConfiguration.result.find(searchConfiguration => {\n return searchConfiguration.key === option.key;\n });\n\n if (mappedConfiguration) {\n return mappedConfiguration.sortColumn;\n }\n\n return {};\n };\n\n /**\n * Retrieves current sort criteria.\n * @returns Sort criteria column which is currently active or undefined if it's not specified.\n */\n private readonly _getSortCriteriaColumn = (): SortColumn | undefined => {\n const sortCriteria = this.props.data.listPageState.result?.sortingCritera;\n if (ArrayExtensions.hasElements(sortCriteria?.Columns)) {\n return sortCriteria!.Columns[0];\n }\n\n const queryColumns = parseQueryParam<SortColumn[]>('sorting', this.props.context.request);\n if (ArrayExtensions.hasElements(queryColumns)) {\n return queryColumns[0];\n }\n\n return undefined;\n };\n\n /**\n * Retrieves dropdown options.\n * @returns All dropdown options.\n */\n private readonly _getAllSortByOptions = (): ILabeledDropdownOption[] => {\n const searchConfiguration = this.props.data.searchConfiguration.result;\n\n if (!searchConfiguration) {\n return [];\n }\n\n const mappedSearchConfiguration = this.sortByDropdownOptions.filter(mappedSearchConfig =>\n searchConfiguration.find(item => mappedSearchConfig.key === item.key)\n );\n\n return ArrayExtensions.validValues(mappedSearchConfiguration);\n };\n\n /**\n * Retrieves current selected dropdown option based on the sort criteria.\n * @returns Current dropdown option.\n */\n private readonly _getCurrentlySelectedOption = (): ILabeledDropdownOption | undefined => {\n const activeSortColumn = this._getSortCriteriaColumn();\n\n const searchConfiguration = this.props.data.searchConfiguration.result;\n\n if (!activeSortColumn || !searchConfiguration) {\n return undefined;\n }\n\n const activeMappedConfig = searchConfiguration.find(\n mappedSearchConfig =>\n mappedSearchConfig.sortColumn.ColumnName === activeSortColumn.ColumnName &&\n mappedSearchConfig.sortColumn.IsDescending === activeSortColumn.IsDescending\n );\n if (!activeMappedConfig) {\n return undefined;\n }\n\n return this.sortByDropdownOptions.find(dropdownOption => dropdownOption.key === activeMappedConfig.key);\n };\n\n private readonly _onUpdateRefiners = (itemToggleNotification: IRefineItemToggleNotification): void => {\n const {\n context: { request: requestContext, actionContext }\n } = this.props;\n\n if (!requestContext || !actionContext || !this.props.data.listPageState.result) {\n const error = `Refine menu cannot refine search criteria: \n ${!requestContext ? 'requestContext ' : ''} ${!actionContext ? 'actionContext ' : ''} could not be found`;\n this.props.telemetry.warning(error);\n return;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Server side the list PageState will not be called.\n const updatedRefinementCriteria = getUpdatedRefinementCriteria(\n itemToggleNotification,\n this.props.data.listPageState.result?.activeFilters || []\n );\n\n window.history.pushState({}, '', buildListPageUrl(getCurrentUrl(this.props.context.request), updatedRefinementCriteria));\n transaction(() => {\n this.props.data.listPageState.result!.currentPageNumber = 0;\n this.props.data.listPageState.result!.activeFilters = updatedRefinementCriteria;\n });\n };\n\n private readonly _buildRefinerUrl = (itemToggleNotification: IRefineItemToggleNotification): string => {\n if (this.props.data.listPageState.result) {\n const newRefinementCriteria = getUpdatedRefinementCriteria(\n itemToggleNotification,\n this.props.data.listPageState.result.activeFilters || []\n );\n\n return buildListPageUrl(getCurrentUrl(this.props.context.request), newRefinementCriteria);\n }\n this.props.telemetry.warning('[buildRefinerQueryString]List Page State Not available, unable to build refiner URL');\n return '';\n };\n\n private readonly _onChoiceClicked = (notification: IChoiceSummaryClickNotification): void => {\n const { data, telemetry } = this.props;\n\n if (!data.listPageState.result) {\n telemetry.warning('[choice-summary-by-category._onChoiceClicked]ListPageState unavailable, unable to update refiners.');\n return;\n }\n\n let currentRefinementCriteria = (data.listPageState.result && data.listPageState.result.activeFilters) || [];\n\n if (!notification.clearAll) {\n const selectedChoice = notification.choiceClicked;\n if (!selectedChoice) {\n telemetry.warning('[choice-summary-by-category._onChoiceClicked] Choice could not be determined');\n return;\n }\n currentRefinementCriteria = currentRefinementCriteria.filter(\n (selectedCriterion: ProductRefinerValue) => !isMatchingRefinementCriterion(selectedChoice, selectedCriterion)\n );\n } else {\n currentRefinementCriteria = [];\n\n // Set focus to sort and filter\n const dropdownElementId = this._sortAndFilterContainerRef.current && this._sortAndFilterContainerRef.current.props.dropdownId;\n const dropdownElement = dropdownElementId && document.getElementById(dropdownElementId);\n setTimeout(() => {\n dropdownElement && dropdownElement.focus();\n }, 50);\n }\n\n const fullUrl = getCurrentUrl(this.props.context.request);\n window.history.pushState({}, '', buildListPageUrl(fullUrl, currentRefinementCriteria));\n data.listPageState.result.currentPageNumber = 0;\n data.listPageState.result.activeFilters = currentRefinementCriteria;\n };\n\n private readonly _buildRefinerUrlForChoiceSummary = (selectedRefiner: ProductRefinerValue, isClearAll: boolean): string => {\n const { data, telemetry } = this.props;\n const fullUrl = getCurrentUrl(this.props.context.request);\n\n if (!data.listPageState.result) {\n telemetry.warning('[choice-summary-by-category._buildRefinerUrl]ListPageState unavailable, unable to create refiner URL.');\n return fullUrl.href;\n }\n\n let currentRefinementCriteria = (data.listPageState.result && data.listPageState.result.activeFilters) || [];\n\n if (!isClearAll) {\n if (!selectedRefiner) {\n telemetry.warning('[choice-summary-by-category._buildRefinerUrl] URL for Choice could not be determined');\n return fullUrl.href;\n }\n currentRefinementCriteria = currentRefinementCriteria.filter(\n (selectedCriterion: ProductRefinerValue) => !isMatchingRefinementCriterion(selectedRefiner, selectedCriterion)\n );\n } else {\n currentRefinementCriteria = [];\n }\n\n return buildListPageUrl(fullUrl, currentRefinementCriteria);\n };\n\n private _getViewport(): GridSize {\n if (MsDyn365.isBrowser) {\n return isMobile({ variant: VariantType.Browser, context: this.props.context.request });\n }\n return isMobile({ variant: VariantType.Viewport, context: this.props.context.request });\n }\n\n private _toggleModal(): void {\n this.setState({\n modalIsOpen: !this.state.modalIsOpen\n });\n }\n\n private _updateViewport(): void {\n this._viewport = this._getViewport();\n\n if (this.state.modalIsOpen && !this.isMobile) {\n this._toggleModal();\n }\n }\n\n private readonly _getexpandRefinerCount = (validRefiners?: number, refinerCount?: expandRefinersCount): void => {\n switch (refinerCount) {\n case expandRefinersCount.all:\n this.expandrefinerCount = validRefiners;\n break;\n case expandRefinersCount.one:\n this.expandrefinerCount = 1;\n break;\n case expandRefinersCount.two:\n this.expandrefinerCount = 2;\n break;\n case expandRefinersCount.three:\n this.expandrefinerCount = 3;\n break;\n case expandRefinersCount.four:\n this.expandrefinerCount = 4;\n break;\n default:\n this.expandrefinerCount = 0;\n }\n };\n\n /**\n * Renders a Pagination previous text.\n * @param paginationPreviousText - Pagination previous text from resources.\n * @returns Previous text and flipper icon.\n */\n private readonly _renderPrev = (paginationPreviousText: string) => {\n return (\n <div className='msc-pagination__prev'>\n <span className='ms-search-result__pagination-left' aria-hidden='true' />\n <span className='prev-text'>{paginationPreviousText}</span>\n </div>\n );\n };\n\n /**\n * Renders a Pagination next text.\n * @param paginationNextText - Pagination next text from resources.\n * @returns Next text and flipper icon.\n */\n private readonly _renderNext = (paginationNextText: string) => {\n return (\n <div className='msc-pagination__next'>\n <span className='next-text'>{paginationNextText}</span>\n <span className='ms-search-result__pagination-right' aria-hidden='true' />\n </div>\n );\n };\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ISearchResultModalViewProps } from './components';\nimport {\n ICategoryHierarchyViewProps,\n IRefineMenuViewProps,\n ISearchResultContainerViewProps,\n ISortByViewProps,\n ITitleViewProps\n} from './search-result-container';\n\nconst SearchResultContainerView: React.FC<ISearchResultContainerViewProps> = props => {\n const {\n SearchResultContainer,\n products,\n pagination,\n ProductsContainer,\n ProductSectionContainer,\n choiceSummary,\n isMobile,\n modalToggle,\n searchResultModal,\n TitleViewProps,\n refineMenu,\n categoryHierarchy,\n sortByOptions,\n CategoryNavContainer,\n RefineAndProductSectionContainer,\n errorMessage,\n FeatureSearchContainer,\n similarLookProduct\n } = props;\n const isRecoSearchPage = props.context.actionContext.requestContext.query?.recommendation;\n if (isMobile) {\n return (\n <Module {...SearchResultContainer}>\n {renderCategoryHierarchy(categoryHierarchy)}\n {renderTitle(TitleViewProps)}\n {choiceSummary}\n {modalToggle}\n {createSearchResultModal(searchResultModal, refineMenu, sortByOptions, isRecoSearchPage)}\n <Node {...FeatureSearchContainer}>{similarLookProduct}</Node>\n <Node {...ProductsContainer}>\n {errorMessage}\n {products}\n </Node>\n {pagination}\n </Module>\n );\n }\n return (\n <Module {...SearchResultContainer}>\n <Node {...CategoryNavContainer}>\n {categoryHierarchy && renderCategoryHierarchy(categoryHierarchy)}\n {TitleViewProps && renderTitleCount(TitleViewProps)}\n </Node>\n <Node {...RefineAndProductSectionContainer}>\n {refineMenu && renderRefiner(refineMenu)}\n <Node {...ProductSectionContainer}>\n {TitleViewProps && renderTitle(TitleViewProps)}\n {choiceSummary}\n {sortByOptions && !isRecoSearchPage && renderSort(sortByOptions)}\n <Node {...FeatureSearchContainer}>{similarLookProduct}</Node>\n <Node {...ProductsContainer}>\n {errorMessage}\n {products}\n </Node>\n {pagination}\n </Node>\n </Node>\n </Module>\n );\n};\n\nconst createSearchResultModal = (\n modalProps: ISearchResultModalViewProps,\n refineMenu: IRefineMenuViewProps,\n sortByDropDown: ISortByViewProps,\n isRecoSearchPage?: string\n): JSX.Element => {\n return React.cloneElement(\n modalProps.modal,\n {},\n modalProps.modalHeader,\n createModalBody(modalProps, refineMenu, sortByDropDown, isRecoSearchPage),\n modalProps.modalFooter\n );\n};\n\nconst createModalBody = (\n props: ISearchResultModalViewProps,\n refineMenu: IRefineMenuViewProps,\n sortByDropDown: ISortByViewProps,\n isRecoSearchPage?: string\n): JSX.Element | null => {\n if (sortByDropDown) {\n return React.cloneElement(props.modalBody, {}, renderSort(sortByDropDown, isRecoSearchPage), renderRefiner(refineMenu));\n }\n return null;\n};\n\nconst renderRefiner = (props: IRefineMenuViewProps): JSX.Element | null => {\n const { refiners, RefineMenuContainer, RefinerSectionContainer } = props;\n if (refiners) {\n return (\n <Node {...RefinerSectionContainer}>\n <Node {...RefineMenuContainer}>\n {refiners.map((submenu, index) => (\n <React.Fragment key={index}>{submenu}</React.Fragment>\n ))}\n </Node>\n </Node>\n );\n }\n return null;\n};\n\nconst renderSort = (props: ISortByViewProps, isRecoSearchPage?: string): JSX.Element | null => {\n const { SortingContainer, sortByDropDown } = props;\n if (sortByDropDown && !isRecoSearchPage) {\n return <Node {...SortingContainer}>{sortByDropDown}</Node>;\n }\n return null;\n};\n\nconst renderCategoryHierarchy = (props: ICategoryHierarchyViewProps): JSX.Element | null => {\n const { CategoryHierarchyContainer, categoryHierarchyList, categoryHierarchySeparator } = props;\n if (categoryHierarchyList) {\n return (\n <Node {...CategoryHierarchyContainer}>\n {categoryHierarchyList.map((category, index) => (\n <React.Fragment key={index}>\n {category}\n {categoryHierarchyList && categoryHierarchyList[index + 1] && categoryHierarchySeparator}\n </React.Fragment>\n ))}\n </Node>\n );\n }\n\n return null;\n};\n\nconst renderTitle = (props: ITitleViewProps): JSX.Element | null => {\n const { title, TitleContainer } = props;\n if (title) {\n return (\n <Node {...TitleContainer}>\n <h2>\n {title.titlePrefix}\n {title.titleText}\n </h2>\n </Node>\n );\n }\n return null;\n};\n\nconst renderTitleCount = (props: ITitleViewProps): JSX.Element | null => {\n const { title, TitleContainer } = props;\n if (title) {\n return (\n <Node {...TitleContainer}>\n <h5>{title.titleCount}</h5>\n </Node>\n );\n }\n return null;\n};\n\nexport default SearchResultContainerView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { observable } from 'mobx';\n\n/**\n * State information related to what is needed to succesfully perform a autosuggest.\n */\nexport class SearchState {\n @observable public searchText?: string;\n\n @observable public defaultBasicSearchUrl?: string;\n\n @observable public searchQueryStringParameter?: string;\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Autosuggestions } from '@msdyn365-commerce/commerce-entities';\nimport {\n CacheType,\n createObservableDataAction,\n getCatalogId,\n IAction,\n IActionContext,\n IActionInput,\n ICreateActionContext\n} from '@msdyn365-commerce/core';\nimport {\n AttributeDataType,\n ChannelInventoryConfiguration,\n ProductRefinerSource,\n ProductRefinerValue,\n ProductSearchCriteria,\n SearchSuggestion,\n SearchSuggestionCriteria\n} from '@msdyn365-commerce/retail-proxy';\nimport {\n getInventoryConfigurationAsync,\n getSearchSuggestionsAsync\n} from '@msdyn365-commerce/retail-proxy/dist/DataActions/StoreOperationsDataActions.g';\nimport { generateImageUrl } from '@msdyn365-commerce-modules/retail-actions';\n\nexport enum SuggestionType {\n Category = 'ScopedCategory',\n Keyword = 'Keyword',\n Product = 'Product',\n None = 'None'\n}\n\n/**\n * This setting defines inventory filtering options.\n */\nexport enum ProductListInventoryFilteringOptions {\n /**\n * Filter out all products out of stock.\n */\n HideOOS = 'hideOOS',\n\n /**\n * Sort products by availability, OOS goes last.\n */\n SortOOS = 'sortOOS',\n\n /**\n * No filtering selected.\n */\n Default = 'default'\n}\n\n/**\n * Input class for auto suggest search input.\n */\nexport class AutoSuggestInput implements IActionInput {\n public searchQuery?: string;\n\n public topResultsCount?: number;\n\n public suggestionType?: string;\n\n public hitPrefix?: string;\n\n public hitSuffix?: string;\n\n public constructor(searchText?: string, top?: number, suggestionType?: string, hitPrefix?: string, hitSuffix?: string) {\n this.searchQuery = searchText;\n this.topResultsCount = top;\n this.suggestionType = suggestionType;\n this.hitPrefix = hitPrefix;\n this.hitSuffix = hitSuffix;\n }\n\n public getCacheKey = () => 'AutoSuggestSearchSuggestions';\n\n public getCacheObjectType = () => 'AutoSuggestSearchSuggestions';\n\n public dataCacheType = (): CacheType => 'none';\n}\n\nconst createInput = (inputData: ICreateActionContext) => {\n return new AutoSuggestInput();\n};\n\n/**\n * Calls the Retail API and returns a auto-suggest suggestions.\n * @param input\n * @param ctx\n */\nexport async function getSearchSuggestionsAction(input: AutoSuggestInput, ctx: IActionContext): Promise<Autosuggestions | null> {\n // If no input is provided fail out\n if (!input || !input.searchQuery) {\n throw new Error('[getSearchSuggestionsAction]No valid Input was provided, failing');\n }\n\n const autosuggest: Autosuggestions = {};\n\n const autoSuggestPromises = [_getAutoSuggest(input, autosuggest, ctx)];\n return Promise.all(autoSuggestPromises).then(() => {\n return autosuggest;\n });\n}\n\n/**\n * Returns inventory in stock sortable refiner value.\n * @param channelInventoryConfiguration - The channelInventoryConfiguration.\n * @param isInStock - The flag indicating whether is getting in-stock refiner or out-of-stock refiner.\n * @returns Refiners.\n */\nconst getInventorySortableRefinerValue = (\n channelInventoryConfiguration: ChannelInventoryConfiguration,\n isInStock: boolean\n): ProductRefinerValue | undefined => {\n if (channelInventoryConfiguration && channelInventoryConfiguration.ProductAvailabilitySortableAttributeRecordId) {\n return {\n RefinerRecordId: channelInventoryConfiguration.ProductAvailabilitySortableAttributeRecordId,\n DataTypeValue: AttributeDataType.TrueFalse,\n LeftValueBoundString: isInStock ? 'true' : 'false',\n RightValueBoundString: isInStock ? 'true' : 'false',\n UnitText: '',\n RowNumber: 0,\n Count: 0,\n ExtensionProperties: [],\n RefinerSourceValue: ProductRefinerSource.Attribute\n };\n }\n return undefined;\n};\n\nasync function _getAutoSuggest(input: AutoSuggestInput, autosuggest: Autosuggestions, ctx: IActionContext): Promise<void> {\n const catalogId = getCatalogId(ctx.requestContext);\n let productSearchCriteria: ProductSearchCriteria = {\n SearchCondition: input.searchQuery && input.searchQuery.length > 0 ? input.searchQuery : '',\n Context: {\n ChannelId: +ctx.requestContext.apiSettings.channelId,\n CatalogId: catalogId\n }\n };\n\n if (ctx.requestContext.app.config?.productListInventoryDisplay === ProductListInventoryFilteringOptions.HideOOS) {\n const channelInventoryConfiguration = await getInventoryConfigurationAsync({ callerContext: ctx });\n const isInStockRefiner = true;\n const inventoryRefinerValue = getInventorySortableRefinerValue(channelInventoryConfiguration, isInStockRefiner);\n\n if (inventoryRefinerValue) {\n productSearchCriteria = {\n ...productSearchCriteria,\n Refinement: [inventoryRefinerValue]\n };\n }\n }\n\n const searchCriteria: SearchSuggestionCriteria = {\n ProductSearchCriteria: productSearchCriteria,\n HitPrefix: input.hitPrefix,\n HitSuffix: input.hitSuffix,\n SuggestionType: input.suggestionType\n };\n\n const searchSuggestions = await getSearchSuggestionsAsync(\n { callerContext: ctx, queryResultSettings: { Paging: { Top: input.topResultsCount } } },\n searchCriteria\n );\n\n if (searchSuggestions && searchSuggestions.length > 0) {\n // Generate image url\n searchSuggestions.map(\n (item: SearchSuggestion) =>\n (item.ImageUrl = item.ImageUrl ? generateImageUrl(item.ImageUrl, ctx.requestContext.apiSettings) : '')\n );\n\n autosuggest.AllSearchResults = searchSuggestions;\n } else {\n ctx.telemetry.error(\n `[getSearchSuggestionsAction] unable to get availabilites for search with suggestion type ${searchCriteria.SuggestionType}`\n );\n }\n}\n\nexport const getSearchSuggestionsActionDataAction = createObservableDataAction({\n id: '@msdyn365-commerce-modules/search/get-auto-suggest-suggestions',\n action: <IAction<Autosuggestions>>getSearchSuggestionsAction,\n input: createInput\n});\n\nexport default getSearchSuggestionsActionDataAction;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport MsDyn365, { getRichTextHtml } from '@msdyn365-commerce/core';\nimport { ProductRefiner, ProductRefinerSource, ProductRefinerValue, SearchSuggestion } from '@msdyn365-commerce/retail-proxy';\nimport { format, getPayloadObject, getTelemetryAttributes, IPayLoad, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ISearchData } from '../search.data';\nimport { ISearchProps } from '../search.props.autogenerated';\n\nexport interface ISearchCategorySuggestProps {\n searchCategorySuggestClass: string;\n searchPageURL: string;\n searchQsp: string | undefined;\n hitPrefix: string;\n hitSuffix: string;\n autoSuggestProps: ISearchProps<ISearchData>;\n searchText: string;\n searchRefiners: ProductRefiner[] | undefined;\n suggestions: SearchSuggestion[] | undefined;\n telemetryContent?: ITelemetryContent;\n shouldShowFullPath?: boolean;\n}\n\nexport interface ISearchCategoryViewProps {\n title: React.ReactNode;\n text: React.ReactNode[];\n}\n\nlet payLoad: IPayLoad;\n\n/**\n * CategorySuggestionsComponent.\n * @param props\n */\nexport const CategorySuggestionsComponent = (props: ISearchCategorySuggestProps): ISearchCategoryViewProps | undefined => {\n const {\n suggestions,\n searchText,\n autoSuggestProps: {\n resources: { categorySuggestionHeading }\n }\n } = props;\n\n const reactNodes: React.ReactNode[] = [];\n payLoad = getPayloadObject('click', props.telemetryContent!, '');\n\n suggestions?.map(item => {\n reactNodes.push(_assembleNode(item, props));\n });\n\n const titleNode = _renderTitle(categorySuggestionHeading, searchText);\n\n return { title: titleNode, text: reactNodes };\n};\n\nconst _renderTitle = (categorySuggestionHeading: string, searchText: string) => {\n const categoryAutoSuggestionHeading = categorySuggestionHeading\n ? format(categorySuggestionHeading, searchText)\n : `Search \"${searchText}\" in categories`;\n\n return <li className='msc-autoSuggest__categoryResults-title'>{categoryAutoSuggestionHeading}</li>;\n};\n\nconst _assembleNode = (item: SearchSuggestion, props: ISearchCategorySuggestProps) => {\n const { searchText, hitPrefix, hitSuffix, shouldShowFullPath } = props;\n\n const splitValue = shouldShowFullPath ? item.Value : item.Value && item.Value.split('|').pop();\n const ariaLabel = splitValue\n ? splitValue.replace(new RegExp(`[${hitPrefix}]`, 'gi'), '').replace(new RegExp(`[${hitSuffix}]`, 'gi'), '')\n : item.Value && item.Value.replace(new RegExp(`[${hitPrefix}]`, 'gi'), '').replace(new RegExp(`[${hitSuffix}]`, 'gi'), '');\n payLoad.contentAction.etext = item.Value;\n const attribute = getTelemetryAttributes(props.telemetryContent!, payLoad);\n return (\n <li className='msc-autoSuggest__categoryResults-item' key={item.Id}>\n <a aria-label={ariaLabel} href={_generateLink(item, searchText, props)} {...attribute}>\n {_generateLink(item, searchText, props) && _getHighlightedText(splitValue ? splitValue : '', hitPrefix, hitSuffix)}\n </a>\n </li>\n );\n};\n\nconst _generateLink = (suggestion: SearchSuggestion, searchText: string, props: ISearchCategorySuggestProps): string => {\n return suggestion && suggestion.Id ? _getCategoryLink(suggestion.Id, searchText, props) : '';\n};\n\nconst _getCategoryLink = (id: string, searchText: string, props: ISearchCategorySuggestProps): string => {\n const { searchPageURL, searchQsp, searchRefiners } = props;\n\n if (!MsDyn365.isBrowser) {\n return '';\n }\n\n const queryUrl = new URL(searchPageURL, window.location.href);\n\n if (searchQsp && searchText) {\n queryUrl.searchParams.set(searchQsp, searchText);\n }\n\n const categoryRefiners = searchRefiners?.find(refiners => {\n return refiners.SourceValue === ProductRefinerSource.Category;\n });\n const refiner = categoryRefiners?.Values?.find(item => {\n return item.RefinerRecordId === Number.parseInt(id, 10);\n });\n\n const encodedRefiner = refiner && JSON.stringify(compressRefiners([refiner]));\n if (encodedRefiner) {\n queryUrl.searchParams.set('refiners', encodedRefiner);\n }\n\n return queryUrl.href;\n};\n\nconst _getHighlightedText = (suggestion: string, hitPrefix: string, hitSuffix: string): JSX.Element => {\n const formattedText = suggestion\n .replace(new RegExp(`[${hitPrefix}]`, 'gi'), '<strong>')\n .replace(new RegExp(`[${hitSuffix}]`, 'gi'), '</strong>');\n\n // eslint-disable-next-line react/no-danger\n return <span dangerouslySetInnerHTML={getRichTextHtml(formattedText)} />;\n};\n\n// TODO: This code is currently duplicated in categoryautosuggest need to either remove one of these files\n// or move this code to a common place\nconst compressedRefinerKeys = [\n 'DataTypeValue',\n 'LeftValueBoundString',\n 'RefinerRecordId',\n 'RefinerSourceValue',\n 'RightValueBoundString',\n 'UnitText'\n];\n\n/**\n * Compressed a list of refiners for use in URLs.\n * @param refiners The uncompressed refiners.\n */\nconst compressRefiners = (refiners: ProductRefinerValue[]) => {\n const compressedRefiners: (string | number)[][] = [];\n\n refiners.forEach(refiner => {\n const compressedRefiner: (string | number)[] = [];\n compressedRefinerKeys.forEach(refinerKey => {\n compressedRefiner.push(refiner[refinerKey]);\n });\n compressedRefiners.push(compressedRefiner);\n });\n\n return compressedRefiners;\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Button } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nexport interface ISearchFormProps {\n hideSearchLabel: boolean | undefined;\n isSearchFormExpanded?: boolean | undefined;\n disableSubmitSearch: boolean | undefined;\n searchTextInput: React.RefObject<HTMLInputElement>;\n maxChars: number;\n searchQsp: string;\n searchPlaceholder: string;\n query: string;\n ariaLabelCancel: string;\n ariaLabelSearch: string;\n ariaLabelSubmit: string;\n handleCancelSearchChange(): void;\n handleInputChange(query: string): void;\n}\n\nexport interface ISearchFormViewProps {\n input: React.ReactNode;\n submitBtn: React.ReactNode;\n cancelBtn: React.ReactNode;\n}\n\n/**\n * On Input Change functionality.\n * @param handleInputChange -Input change function.\n * @returns Set updated input value.\n */\nconst onInputChangeFunction = (handleInputChange: (query: string) => void) => (event: React.ChangeEvent<HTMLInputElement>) => {\n handleInputChange(event.target.value || '');\n};\nexport const FormComponent = (props: ISearchFormProps): ISearchFormViewProps => {\n const {\n searchQsp,\n searchPlaceholder,\n hideSearchLabel,\n searchTextInput,\n handleInputChange,\n maxChars,\n disableSubmitSearch,\n handleCancelSearchChange,\n query,\n ariaLabelCancel,\n ariaLabelSearch,\n ariaLabelSubmit\n } = props;\n\n const onInputChange = onInputChangeFunction(handleInputChange);\n\n const inputNode = !hideSearchLabel ? (\n <input\n className='ms-search__form-control'\n type='text'\n aria-label={ariaLabelSearch}\n name={searchQsp}\n placeholder={searchPlaceholder}\n ref={searchTextInput}\n onChange={onInputChange}\n maxLength={maxChars}\n value={query}\n />\n ) : (\n <input\n className='ms-search__form-control'\n type='text'\n aria-label={ariaLabelSearch}\n name={searchQsp}\n placeholder={searchPlaceholder}\n ref={searchTextInput}\n onChange={onInputChange}\n value={query}\n />\n );\n\n const submitBtnNode = !disableSubmitSearch && <Button className='ms-search__form-submitSearch' aria-label={ariaLabelSubmit} />;\n\n const cancelBtNoden = (\n <Button\n className={!disableSubmitSearch ? 'ms-search__form-cancelSearch' : 'ms-search__form-cancelSearchNoSumbit'}\n aria-label={ariaLabelCancel}\n onClick={handleCancelSearchChange}\n type='button'\n />\n );\n\n return { input: inputNode, cancelBtn: cancelBtNoden, submitBtn: submitBtnNode };\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport MsDyn365, { getRichTextHtml } from '@msdyn365-commerce/core';\nimport { SearchSuggestion } from '@msdyn365-commerce/retail-proxy';\nimport { getPayloadObject, getTelemetryAttributes, IPayLoad, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ISearchData } from '../search.data';\nimport { ISearchProps } from '../search.props.autogenerated';\n\nexport interface ISearchKeywordSuggestProps {\n searchKeywordSuggestClass: string;\n searchPageURL: string;\n searchQsp: string | undefined;\n hitPrefix: string;\n hitSuffix: string;\n autoSuggestProps: ISearchProps<ISearchData>;\n searchText: string;\n suggestions: SearchSuggestion[] | undefined;\n telemetryContent?: ITelemetryContent;\n}\n\nexport interface ISearchKeywordViewProps {\n text: React.ReactNode[];\n}\n\nlet payLoad: IPayLoad;\n\n/**\n * KeywordSuggestionsComponent.\n * @param props\n */\nexport const KeywordSuggestionsComponent = (props: ISearchKeywordSuggestProps): ISearchKeywordViewProps | undefined => {\n const { suggestions, hitPrefix, hitSuffix } = props;\n\n payLoad = getPayloadObject('click', props.telemetryContent!, '');\n\n const reactNodes: React.ReactNode[] = [];\n\n suggestions?.map(item => {\n reactNodes.push(_assembleNode(item, hitPrefix, hitSuffix, props));\n });\n\n return { text: reactNodes };\n};\n\nconst _assembleNode = (item: SearchSuggestion, hitPrefix: string, hitSuffix: string, props: ISearchKeywordSuggestProps) => {\n const ariaLabel =\n item.Value && item.Value.replace(new RegExp(`[${hitPrefix}]`, 'gi'), '').replace(new RegExp(`[${hitSuffix}]`, 'gi'), '');\n payLoad.contentAction.etext = ariaLabel;\n const attribute = getTelemetryAttributes(props.telemetryContent!, payLoad);\n return (\n <li className='msc-autoSuggest__keywordResults-item' key={item.Id}>\n <a aria-label={ariaLabel} href={_generateLink(item, hitPrefix, hitSuffix, props)} {...attribute}>\n {_generateLink(item, hitPrefix, hitSuffix, props) &&\n _getHighlightedText(item.Value ? item.Value : '', hitPrefix, hitSuffix)}\n </a>\n </li>\n );\n};\n\nconst _generateLink = (suggestion: SearchSuggestion, hitPrefix: string, hitSuffix: string, props: ISearchKeywordSuggestProps): string => {\n const { searchPageURL, searchQsp } = props;\n\n const formattedLink = (suggestion.Value as string)\n .replace(new RegExp(`[${hitPrefix}]`, 'gi'), '')\n .replace(new RegExp(`[${hitSuffix}]`, 'gi'), '');\n\n if (!MsDyn365.isBrowser) {\n return '';\n }\n\n const queryUrl = new URL(searchPageURL, window.location.href);\n if (searchQsp && formattedLink) {\n queryUrl.searchParams.set(searchQsp, formattedLink);\n }\n\n return queryUrl.href;\n};\n\nconst _getHighlightedText = (suggestion: string, hitPrefix: string, hitSuffix: string): JSX.Element => {\n const formattedText = suggestion\n .replace(new RegExp(`[${hitPrefix}]`, 'gi'), '<strong>')\n .replace(new RegExp(`[${hitSuffix}]`, 'gi'), '</strong>');\n\n // eslint-disable-next-line react/no-danger\n return <span dangerouslySetInnerHTML={getRichTextHtml(formattedText)} />;\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Button, getPayloadObject, getTelemetryAttributes, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nexport interface ISearchLabelProps {\n isSearchFormExpanded: boolean;\n searchLabelClass: string;\n searchLabelArialLabel: string;\n searchtext: string;\n searchCollapsedLabel: React.RefObject<HTMLButtonElement>;\n hideSearchLabel?: boolean;\n telemetryContent: ITelemetryContent;\n handleCancelSearchChange(): void;\n}\n\nexport const LabelComponent = (props: ISearchLabelProps) => {\n const {\n searchLabelClass,\n searchLabelArialLabel,\n isSearchFormExpanded,\n searchtext,\n searchCollapsedLabel,\n hideSearchLabel,\n handleCancelSearchChange,\n telemetryContent\n } = props;\n const payLoad = getPayloadObject('click', telemetryContent, searchtext, '');\n const attributes = getTelemetryAttributes(telemetryContent, payLoad);\n\n return (\n <div className={searchLabelClass}>\n <Button\n className='ms-search__icon'\n aria-expanded={isSearchFormExpanded}\n aria-label={searchLabelArialLabel}\n onClick={handleCancelSearchChange}\n innerRef={searchCollapsedLabel}\n {...attributes}\n >\n {!hideSearchLabel && (\n <span className='ms-search__icon-text' aria-hidden>\n {searchtext}\n </span>\n )}\n </Button>\n </div>\n );\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { PriceComponent } from '@msdyn365-commerce/components';\nimport { getRichTextHtml, IActionContext, IImageSettings, Image, ITelemetry } from '@msdyn365-commerce/core';\nimport { SearchSuggestion } from '@msdyn365-commerce/retail-proxy';\nimport { getProductPageUrlSync, ObjectExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n getPayloadObject,\n getTelemetryAttributes,\n INodeProps,\n IPayLoad,\n ITelemetryContent,\n NodeTag\n} from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ISearchData } from '../search.data';\nimport { ISearchProps } from '../search.props.autogenerated';\n\n/**\n * Search product suggest resources.\n */\nexport interface ISearchProductSuggestResources {\n freePriceText: string;\n}\n\nexport interface ISearchProductSuggestProps {\n searchProductSuggestClass: string;\n searchPageURL: string;\n searchQsp: string | undefined;\n hitPrefix: string;\n hitSuffix: string;\n autoSuggestProps: ISearchProps<ISearchData>;\n searchText: string;\n suggestions: SearchSuggestion[] | undefined;\n telemetry: ITelemetry;\n moduleType: string;\n moduleId: string;\n telemetryContent?: ITelemetryContent;\n resources?: ISearchProductSuggestResources;\n}\n\nexport interface ISearchProductViewProps {\n title: React.ReactNode;\n items: ISearchProductItemViewProps[];\n}\n\nexport interface ISearchProductItemViewProps {\n text: React.ReactNode;\n thumbnail: React.ReactNode;\n price: React.ReactNode;\n LiProduct: INodeProps;\n AProduct: INodeProps;\n id: string | undefined;\n}\n\nlet payLoad: IPayLoad;\nlet telemetryContent: ITelemetryContent | undefined;\n\n/**\n * ProductSuggestionsComponent.\n * @param props\n */\nexport const ProductSuggestionsComponent = (props: ISearchProductSuggestProps): ISearchProductViewProps | undefined => {\n const {\n suggestions,\n hitSuffix,\n hitPrefix,\n autoSuggestProps: {\n context: { actionContext },\n resources: { productSuggestionHeading }\n },\n moduleType,\n moduleId\n } = props;\n const reactNodes: ISearchProductItemViewProps[] = [];\n telemetryContent = props.telemetryContent;\n payLoad = getPayloadObject('click', props.telemetryContent!, '');\n\n suggestions?.map(item => {\n reactNodes.push(_assembleNode(item, hitPrefix, hitSuffix, actionContext, props, moduleType, moduleId));\n });\n\n const titleNode = _renderTitle(productSuggestionHeading);\n\n return { title: titleNode, items: reactNodes };\n};\n\nconst _renderTitle = (productSuggestionHeading: string) => {\n const productAutoSuggestionHeading = productSuggestionHeading ? productSuggestionHeading : 'Go to products';\n\n return <li className='msc-autoSuggest__productResults-title'>{productAutoSuggestionHeading}</li>;\n};\n\nconst _assembleNode = (\n item: SearchSuggestion,\n hitPrefix: string,\n hitSuffix: string,\n actionContext: IActionContext,\n props: ISearchProductSuggestProps,\n moduleType: string,\n moduleId: string\n): ISearchProductItemViewProps => {\n const altText =\n item.Value && item.Value.replace(new RegExp(`[${hitPrefix}]`, 'gi'), '').replace(new RegExp(`[${hitSuffix}]`, 'gi'), '');\n\n const price = item.Value3?.Value?.DecimalValue;\n return {\n text: _getHighlightedText(item.Value ? item.Value : '', hitPrefix, hitSuffix),\n thumbnail: _renderThumbnail(item, altText ? altText : '', props),\n price: !ObjectExtensions.isNullOrUndefined(price) && _renderPrice(price, price, moduleId, moduleType, props),\n LiProduct: _getLiWrapper(),\n AProduct: _getAWrapper(item, hitPrefix, hitSuffix, actionContext, props),\n id: item.Id\n };\n};\n\nconst _getLiWrapper = () => {\n return {\n className: 'msc-autoSuggest__productResults-item',\n tag: 'li' as NodeTag\n };\n};\n\nconst _getAWrapper = (\n item: SearchSuggestion,\n hitPrefix: string,\n hitSuffix: string,\n actionContext: IActionContext,\n props: ISearchProductSuggestProps\n) => {\n const {\n autoSuggestProps: { context }\n } = props;\n const ariaLabel =\n item.Value && item.Value.replace(new RegExp(`[${hitPrefix}]`, 'gi'), '').replace(new RegExp(`[${hitSuffix}]`, 'gi'), '');\n\n payLoad.contentAction.recid = item.Id;\n const attribute = getTelemetryAttributes(telemetryContent!, payLoad);\n const productPrice = context.cultureFormatter.formatCurrency(item.Value3!.Value!.DecimalValue!);\n\n return {\n className: 'msc-autoSuggest__productResults-item',\n tag: 'a' as NodeTag,\n 'aria-label': `${ariaLabel!} ${productPrice}`,\n href: _generateLink(item, hitPrefix, hitSuffix, actionContext),\n ...attribute\n };\n};\n\nconst _generateLink = (suggestion: SearchSuggestion, hitPrefix: string, hitSuffix: string, actionContext: IActionContext) => {\n const formattedLink = (suggestion.Value as string)\n .replace(new RegExp(`[${hitPrefix}]`, 'gi'), '')\n .replace(new RegExp(`[${hitSuffix}]`, 'gi'), '');\n return suggestion.Value && suggestion.Id\n ? getProductPageUrlSync(formattedLink, (suggestion.Id as unknown) as number, actionContext, undefined)\n : '';\n};\n\nconst _getHighlightedText = (suggestion: string, hitPrefix: string, hitSuffix: string): JSX.Element => {\n const formattedText = suggestion\n .replace(new RegExp(`[${hitPrefix}]`, 'gi'), '<strong>')\n .replace(new RegExp(`[${hitSuffix}]`, 'gi'), '</strong>');\n\n return (\n // eslint-disable-next-line react/no-danger\n <span className='msc-price msc-autoSuggest__productResults-item-text' dangerouslySetInnerHTML={getRichTextHtml(formattedText)} />\n );\n};\n\nconst _renderPrice = (\n adjustedPrice: number,\n basePrice: number,\n moduleId: string,\n moduleType: string,\n props: ISearchProductSuggestProps\n): JSX.Element | null => {\n const {\n autoSuggestProps: { context }\n } = props;\n\n return (\n <PriceComponent\n id={moduleId}\n typeName={moduleType}\n context={context}\n data={{\n price: {\n CustomerContextualPrice: adjustedPrice,\n BasePrice: basePrice\n }\n }}\n className='msc-autoSuggest__productResults-item-price'\n freePriceText={props.resources?.freePriceText}\n />\n );\n};\n\nconst _renderThumbnail = (suggestion: SearchSuggestion, altText: string, props: ISearchProductSuggestProps): JSX.Element | null => {\n const {\n autoSuggestProps: {\n context: {\n request: { gridSettings }\n },\n config: { imageSettings }\n }\n } = props;\n if (imageSettings) {\n imageSettings.cropFocalRegion = true;\n }\n\n if (!suggestion || !suggestion.ImageUrl) {\n props.telemetry.error('Search suggestion content is empty, module wont render.');\n return null;\n }\n\n const defaultImageSettings: IImageSettings = {\n viewports: {\n xs: { q: 'w=40&h=40&m=6', w: 0, h: 0 },\n lg: { q: 'w=40&h=40&m=6', w: 0, h: 0 },\n xl: { q: 'w=40&h=40&m=6', w: 0, h: 0 }\n },\n lazyload: true,\n cropFocalRegion: true\n };\n\n return (\n <Image\n requestContext={props.autoSuggestProps.context.actionContext.requestContext}\n altText={altText}\n className='msc-autoSuggest__productResults-item-img'\n src={suggestion.ImageUrl}\n gridSettings={gridSettings!}\n imageSettings={imageSettings ? imageSettings : defaultImageSettings}\n loadFailureBehavior='empty'\n />\n );\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Autosuggestions } from '@msdyn365-commerce/commerce-entities';\nimport MsDyn365, { getCatalogId, getUrlSync } from '@msdyn365-commerce/core';\nimport { ProductRefiner, ProductRefinerSource, ProductsDataActions } from '@msdyn365-commerce/retail-proxy';\nimport { ArrayExtensions, ObjectExtensions, Random, validateCatalogId } from '@msdyn365-commerce-modules/retail-actions';\nimport { createSearchStateInput } from '@msdyn365-commerce-modules/search-utilities';\nimport { getTelemetryObject, IModuleProps, INodeProps, ITelemetryContent, KeyCodes } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport { debounce } from 'lodash';\nimport { Spinner, SpinnerSize } from 'office-ui-fabric-react';\nimport * as React from 'react';\n\nimport getSearchSuggestionsAction, { AutoSuggestInput, SuggestionType } from './actions/get-auto-suggest-suggestions';\nimport {\n CategorySuggestionsComponent,\n FormComponent,\n ISearchCategoryViewProps,\n ISearchKeywordViewProps,\n ISearchProductViewProps,\n KeywordSuggestionsComponent,\n LabelComponent,\n ProductSuggestionsComponent\n} from './components';\nimport { ISearchData } from './search.data';\nimport { ISearchProps, ISuggestionTypeCriterionData, SuggestionTypeCriterionSuggestionType } from './search.props.autogenerated';\n\nexport interface ISearchState {\n isSearchFormExpanded: boolean;\n searchText: string;\n searchKeywordSuggestClass: string;\n searchProductSuggestClass: string;\n searchCategorySuggestClass: string;\n suggestions: Autosuggestions | undefined;\n searchRefiners?: ProductRefiner[] | undefined;\n autoSuggestAriaLabel: string;\n isInitialState: boolean;\n isLoadingAutoSuggest?: boolean;\n}\n\nexport interface ISearchViewProps extends ISearchProps<ISearchData> {\n Search: IModuleProps;\n AutoSuggestAriaLabel: INodeProps;\n AutoSuggestAriaLabelText: string;\n searchText: string;\n AutoSuggest: INodeProps;\n KeywordSuggest: INodeProps;\n ProductSuggest: INodeProps;\n CategorySuggest: INodeProps;\n SearchForm: INodeProps;\n FormWrapper: INodeProps;\n UlKeyword: INodeProps;\n UlProduct: INodeProps;\n UlCategory: INodeProps;\n label: React.ReactNode;\n form: React.ReactNode;\n autosuggestKeyword?: ISearchKeywordViewProps;\n autosuggestProduct?: ISearchProductViewProps;\n autosuggestCategory?: ISearchCategoryViewProps;\n callbacks: {\n handleCancelSearchChange(): void;\n handleCancelSearchFocused?(): void;\n };\n isSearchFormExpanded: boolean;\n isLoadingAutoSuggest?: boolean;\n isLoadingNode?: React.ReactNode;\n}\n\n/**\n *\n * Search module.\n * @extends {React.Component<ISearchProps<ISearchData>, ISearchState>}\n */\nclass Search extends React.Component<ISearchProps<ISearchData>, ISearchState> {\n private readonly searchTextInput: React.RefObject<HTMLInputElement>;\n\n private readonly searchCollapsedLabel: React.RefObject<HTMLButtonElement>;\n\n private readonly formReference: React.RefObject<HTMLButtonElement>;\n\n private readonly maxChars: number;\n\n private readonly topResultsCount?: number;\n\n private readonly hitPrefix: string = '{';\n\n private readonly hitSuffix: string = '}';\n\n private readonly waitTime: number = 500;\n\n private readonly autoSuggestResultScreenReaderDiv: React.RefObject<HTMLDivElement>;\n\n private readonly autoSuggestResultDiv: React.RefObject<HTMLDivElement>;\n\n private readonly searchFormClass: string;\n\n private readonly searchLabelClass: string;\n\n private readonly telemetryContent: ITelemetryContent;\n\n private loadSuggestionsRequestId?: string;\n\n private inputSuggestionType: ISuggestionTypeCriterionData[];\n\n // @ts-expect-error\n private cancellabelDebounce: debounce;\n\n public constructor(props: ISearchProps<ISearchData>) {\n super(props);\n this.searchTextInput = React.createRef();\n this.searchCollapsedLabel = React.createRef();\n this.autoSuggestResultScreenReaderDiv = React.createRef();\n this.autoSuggestResultDiv = React.createRef();\n this.formReference = React.createRef();\n this.state = {\n isSearchFormExpanded: false,\n searchText: '',\n searchKeywordSuggestClass: 'ms-search__autoSuggest__keyword',\n searchProductSuggestClass: 'ms-search__autoSuggest__product',\n searchCategorySuggestClass: 'ms-search__autoSuggest__category',\n suggestions: undefined,\n searchRefiners: undefined,\n autoSuggestAriaLabel: '',\n isInitialState: true,\n isLoadingAutoSuggest: false\n };\n this.maxChars =\n (this.props.context &&\n this.props.context.app &&\n this.props.context.app.config &&\n this.props.context.app.config.searchInputMaxLength) ||\n 50;\n\n this.inputSuggestionType = [];\n this.topResultsCount = this.props.config && this.props.config.topResultsCount ? this.props.config.topResultsCount : 5;\n this.searchFormClass = 'ms-search__form';\n this.searchLabelClass = 'ms-search__label';\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n\n this._initSuggestionTypes();\n }\n\n public async componentDidMount(): Promise<void> {\n document.body && document.body.addEventListener('mousedown', this._focusOutTarget);\n window && window.addEventListener('keyup', this._keyup);\n }\n\n public componentWillUnmount(): void {\n document.body && document.body.removeEventListener('mousedown', this._focusOutTarget, false);\n window && window.removeEventListener('keyup', this._keyup, false);\n }\n\n public componentDidUpdate(): void {\n const {\n config: { hideSearchLabel }\n } = this.props;\n const { isSearchFormExpanded, isInitialState } = this.state;\n\n if (!this.props.context.request.params.isEditor) {\n if (!hideSearchLabel && isSearchFormExpanded) {\n this.searchTextInput && this.searchTextInput.current && this.searchTextInput.current.focus();\n } else if (!isInitialState) {\n this.searchCollapsedLabel && this.searchCollapsedLabel.current && this.searchCollapsedLabel.current.focus();\n }\n }\n }\n\n public shouldComponentUpdate(nextProps: ISearchProps<ISearchData>, nextState: ISearchState): boolean {\n if (this.state === nextState && this.props === nextProps) {\n return false;\n }\n return true;\n }\n\n // eslint-disable-next-line complexity -- ignore complexity.\n public render(): JSX.Element {\n const {\n context,\n resources: { searchtext, searchLabelArialLabel, cancelBtnAriaLabel, searchBtnAriaLabel, submitBtnAriaLabel },\n config: { hideSearchLabel, disableSubmitSearch, searchplaceholderText, shouldShowFullCategoryPath, className = '' }\n } = this.props;\n\n const {\n isSearchFormExpanded,\n searchText,\n searchKeywordSuggestClass,\n searchProductSuggestClass,\n searchCategorySuggestClass,\n suggestions,\n searchRefiners,\n isLoadingAutoSuggest\n } = this.state;\n\n const searchQsp = (context && context.app && context.app.config && context.app.config.searchQueryStringParameter) || 'q';\n const searchPageURL = getUrlSync('search', context && context.actionContext) || '';\n const searchURL = this._appendQueryParams(searchPageURL, searchText, searchQsp);\n const searchPlaceholder = searchplaceholderText && searchplaceholderText.length > 0 ? searchplaceholderText : 'Search in Fabrikam';\n\n const keywordSuggestions = suggestions?.AllSearchResults?.filter(\n suggestion => suggestion.SuggestionType === SuggestionType.Keyword || suggestion.SuggestionType === SuggestionType.None\n );\n const productSuggestions = suggestions?.AllSearchResults?.filter(\n suggestion => suggestion.SuggestionType === SuggestionType.Product\n );\n const categoryRefiners = searchRefiners?.find(refiner => {\n return refiner.SourceValue === ProductRefinerSource.Category;\n });\n const categorySuggestions = suggestions?.AllSearchResults?.filter(suggestion => {\n if (suggestion.SuggestionType !== SuggestionType.Category) {\n return false;\n }\n const refiner = categoryRefiners?.Values?.find(item => {\n return `${item.RefinerRecordId ?? 0}` === suggestion.Id;\n });\n\n return !ObjectExtensions.isNullOrUndefined(refiner);\n });\n\n const viewProps: ISearchViewProps = {\n ...(this.props as ISearchProps<ISearchData>),\n\n Search: {\n moduleProps: this.props,\n className: `${classnames('ms-search', className)} ${disableSubmitSearch ? 'no-submit' : 'with-submit'}`\n },\n AutoSuggestAriaLabel: {\n tag: 'div',\n className: 'msc-autoSuggest__screen-reader',\n 'aria-live': 'assertive',\n ref: this.autoSuggestResultScreenReaderDiv\n },\n AutoSuggestAriaLabelText: this.state.autoSuggestAriaLabel,\n searchText: this.state.searchText,\n AutoSuggest: {\n ref: this.autoSuggestResultDiv,\n className: 'ms-search__autoSuggest'\n },\n KeywordSuggest: {\n className: searchKeywordSuggestClass\n },\n ProductSuggest: {\n className: searchProductSuggestClass\n },\n CategorySuggest: {\n className: searchCategorySuggestClass\n },\n SearchForm: {\n className: `${this.searchFormClass} ${isSearchFormExpanded ? 'bx-show' : 'bx-hide'}`\n },\n FormWrapper: {\n tag: 'form',\n ref: this.formReference,\n className: 'ms-search__searchForm',\n 'aria-label': 'Search',\n name: 'searchForm',\n role: 'search',\n action: searchURL,\n autoComplete: 'off',\n onSubmit: this._handleSubmit\n },\n UlKeyword: {\n tag: 'ul',\n className: classnames('msc-autoSuggest__keywordResults-items', className)\n },\n UlProduct: {\n tag: 'ul',\n className: classnames('msc-autoSuggest__productResults-items', className)\n },\n UlCategory: {\n tag: 'ul',\n className: classnames('msc-autoSuggest__categoryResults-items', className)\n },\n label: LabelComponent({\n isSearchFormExpanded,\n searchLabelClass: `${this.searchLabelClass} ${isSearchFormExpanded ? 'bx-hide' : 'bx-show'}`,\n searchtext,\n searchLabelArialLabel,\n searchCollapsedLabel: this.searchCollapsedLabel,\n hideSearchLabel,\n handleCancelSearchChange: this._handleCancelSearchChange,\n telemetryContent: this.telemetryContent\n }),\n form: FormComponent({\n ariaLabelCancel: cancelBtnAriaLabel,\n ariaLabelSearch: searchBtnAriaLabel,\n ariaLabelSubmit: submitBtnAriaLabel,\n hideSearchLabel,\n searchTextInput: this.searchTextInput,\n disableSubmitSearch,\n handleInputChange: this._handleInputChange,\n handleCancelSearchChange: this._handleCancelSearchChange,\n maxChars: this.maxChars,\n searchQsp,\n searchPlaceholder,\n query: searchText\n }),\n autosuggestKeyword:\n searchText &&\n searchText.length > 0 &&\n (isLoadingAutoSuggest || (keywordSuggestions && ArrayExtensions.hasElements(keywordSuggestions)))\n ? KeywordSuggestionsComponent({\n searchKeywordSuggestClass,\n searchPageURL,\n searchQsp,\n hitPrefix: this.hitPrefix,\n hitSuffix: this.hitSuffix,\n autoSuggestProps: this.props,\n searchText,\n suggestions: keywordSuggestions,\n telemetryContent: this.telemetryContent\n })\n : undefined,\n autosuggestProduct:\n searchText &&\n searchText.length > 0 &&\n (isLoadingAutoSuggest || (productSuggestions && ArrayExtensions.hasElements(productSuggestions)))\n ? ProductSuggestionsComponent({\n searchProductSuggestClass,\n searchPageURL,\n searchQsp,\n hitPrefix: this.hitPrefix,\n hitSuffix: this.hitSuffix,\n autoSuggestProps: this.props,\n searchText,\n suggestions: productSuggestions,\n telemetry: this.props.telemetry,\n moduleType: this.props.typeName,\n moduleId: this.props.id,\n telemetryContent: this.telemetryContent,\n resources: this.props.resources\n })\n : undefined,\n autosuggestCategory:\n searchText &&\n searchText.length > 0 &&\n (isLoadingAutoSuggest || (categorySuggestions && ArrayExtensions.hasElements(categorySuggestions)))\n ? CategorySuggestionsComponent({\n searchCategorySuggestClass,\n searchPageURL,\n searchQsp,\n hitPrefix: this.hitPrefix,\n hitSuffix: this.hitSuffix,\n autoSuggestProps: this.props,\n searchText,\n suggestions: categorySuggestions,\n searchRefiners,\n telemetryContent: this.telemetryContent,\n shouldShowFullPath: shouldShowFullCategoryPath\n })\n : undefined,\n callbacks: {\n handleCancelSearchChange: this._handleCancelSearchChange,\n handleCancelSearchFocused: this._handleCancelSearchFocused\n },\n isSearchFormExpanded: this.state.isSearchFormExpanded,\n isLoadingAutoSuggest,\n isLoadingNode: this._isLoadingNode()\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n private _initSuggestionTypes() {\n const suggestionTypes = this.props.config.suggestionTypeCriterion;\n\n const suggestions = ArrayExtensions.unique(ArrayExtensions.validValues(suggestionTypes));\n if (!ArrayExtensions.hasElements(suggestions)) {\n this.inputSuggestionType = [\n { SuggestionType: SuggestionTypeCriterionSuggestionType.keyword },\n { SuggestionType: SuggestionTypeCriterionSuggestionType.product },\n { SuggestionType: SuggestionTypeCriterionSuggestionType.scopedCategory }\n ];\n return;\n }\n\n const validSuggestions = suggestions.filter(suggestion => suggestion.SuggestionType);\n if (ArrayExtensions.hasElements(validSuggestions)) {\n this.inputSuggestionType = validSuggestions;\n return;\n }\n\n this.inputSuggestionType = [];\n }\n\n /**\n * Function to create the ReactNode for loading Autosuggest result.\n * @returns ReachNode for loading Autosuggest result.\n */\n private readonly _isLoadingNode = (): React.ReactNode => {\n const loadingText = this.props.resources.autoSuggestResultLoadingMessage;\n return <Spinner className='msc-autoSuggest__loadingResult' label={loadingText} size={SpinnerSize.medium} labelPosition='right' />;\n };\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private readonly _focusOutTarget = (e: any): void => {\n const { suggestions } = this.state;\n\n if (suggestions && suggestions.AllSearchResults && e.target.closest('.ms-search') === null) {\n this._clearAutoSuggestState();\n }\n };\n\n private readonly _keyup = (e: KeyboardEvent): void => {\n const { suggestions } = this.state;\n\n if (suggestions && suggestions.AllSearchResults && e.keyCode === KeyCodes.Escape) {\n this._clearAutoSuggestState();\n } else if (this.state.isSearchFormExpanded && e.keyCode === KeyCodes.Escape) {\n if (this.state.isSearchFormExpanded) {\n this.setState({ isSearchFormExpanded: false });\n }\n }\n\n if (\n !(\n (this.formReference.current && this.formReference.current.contains((e.target as unknown) as Node)) ||\n (this.autoSuggestResultDiv.current && this.autoSuggestResultDiv.current.contains((e.target as unknown) as Node))\n )\n ) {\n if (suggestions && suggestions.AllSearchResults) {\n this._clearAutoSuggestState();\n }\n\n if (this.state.isSearchFormExpanded) {\n this.setState({ isSearchFormExpanded: false });\n }\n }\n };\n\n private readonly _clearAutoSuggestState = (): void => {\n const {\n context: { actionContext },\n data: { searchState }\n } = this.props;\n\n if (this.searchTextInput.current && this.searchTextInput.current.value.length > 0) {\n searchState.searchText = '';\n searchState.defaultBasicSearchUrl = '';\n searchState.searchQueryStringParameter = '';\n actionContext ? actionContext.update(createSearchStateInput(searchState), searchState) : null;\n this.searchTextInput.current.value = '';\n }\n\n this.setState({ searchText: '', suggestions: undefined, searchRefiners: undefined });\n };\n\n private async _getSearchSuggestions(loadSuggestionsRequestId: string, query: string) {\n try {\n const searchSuggestions = await getSearchSuggestionsAction(\n new AutoSuggestInput(query, this.topResultsCount, this._getSuggestionType(), this.hitPrefix, this.hitSuffix),\n this.props.context.actionContext\n );\n if (loadSuggestionsRequestId !== this.loadSuggestionsRequestId) {\n return undefined;\n }\n return searchSuggestions;\n } catch (error) {\n if (loadSuggestionsRequestId !== this.loadSuggestionsRequestId) {\n return undefined;\n }\n this.setState({ suggestions: undefined, searchRefiners: undefined, autoSuggestAriaLabel: this._setAutoSuggestResultCount() });\n this.props.telemetry.exception(error);\n this.props.telemetry.debug('Unable to get auto suggest results');\n return undefined;\n }\n }\n\n private async _updateSearchRefiners(loadSuggestionsRequestId: string, query: string, suggestions: Autosuggestions | undefined) {\n try {\n const refiners = await this._getSearchRefiners(query);\n if (loadSuggestionsRequestId !== this.loadSuggestionsRequestId) {\n return;\n }\n this.setState({\n suggestions,\n searchRefiners: refiners,\n autoSuggestAriaLabel: this._setAutoSuggestResultCount(suggestions),\n isLoadingAutoSuggest: false\n });\n } catch (error) {\n if (loadSuggestionsRequestId !== this.loadSuggestionsRequestId) {\n return;\n }\n this.setState({ suggestions, searchRefiners: undefined, autoSuggestAriaLabel: this._setAutoSuggestResultCount(suggestions) });\n this.props.telemetry.exception(error);\n this.props.telemetry.debug('Unable to get refiners results');\n }\n }\n\n private _loadSuggestions(query: string) {\n this.cancellabelDebounce = debounce(async () => {\n this.setState({ isLoadingAutoSuggest: true });\n const loadSuggestionsRequestId = Random.Guid.generateGuid();\n this.loadSuggestionsRequestId = loadSuggestionsRequestId;\n const searchSuggestions = await this._getSearchSuggestions(loadSuggestionsRequestId, query);\n await this._updateSearchRefiners(loadSuggestionsRequestId, query, searchSuggestions);\n }, this.waitTime);\n\n setTimeout(() => {\n this.cancellabelDebounce();\n }, 0);\n }\n\n private readonly _handleInputChange = (query: string): void => {\n if (!query || query.length <= this.maxChars) {\n this.setState({ searchText: query });\n }\n\n if (this.cancellabelDebounce) {\n this.cancellabelDebounce.cancel();\n }\n\n const {\n context,\n data: { searchState }\n } = this.props;\n\n if (context) {\n if (query && query.length > 0) {\n if (query.length > this.maxChars) {\n return;\n }\n\n if (ArrayExtensions.hasElements(this.inputSuggestionType)) {\n this._loadSuggestions(query);\n }\n\n searchState.searchText = query;\n } else {\n this.setState({ suggestions: undefined, searchRefiners: undefined });\n searchState.searchText = '';\n }\n context.actionContext.update(createSearchStateInput(searchState), searchState);\n }\n };\n\n private _getSuggestionType(): string {\n const distinctSuggestionTypes: string[] = this.inputSuggestionType.map(\n suggestionTypeItem => suggestionTypeItem.SuggestionType!.charAt(0).toUpperCase() + suggestionTypeItem.SuggestionType!.slice(1)\n );\n return distinctSuggestionTypes.join(',');\n }\n\n private async _getSearchRefiners(searchText: string): Promise<ProductRefiner[]> {\n const { actionContext: ctx } = this.props.context;\n const catalogId = getCatalogId(ctx.requestContext);\n validateCatalogId(catalogId);\n return ProductsDataActions.getProductSearchRefinersAsync(\n { callerContext: ctx },\n {\n SearchCondition: searchText,\n Context: {\n ChannelId: +ctx.requestContext.apiSettings.channelId,\n CatalogId: catalogId\n }\n }\n );\n }\n\n private readonly _handleSubmit = (\n e: React.MouseEvent<HTMLElement> | React.KeyboardEvent<HTMLElement> | React.FormEvent<HTMLFormElement>\n ): void => {\n const {\n config: { disableSubmitSearch },\n context: {\n actionContext,\n app: {\n config: { searchQueryStringParameter }\n }\n }\n } = this.props;\n\n const query = this.searchTextInput.current && this.searchTextInput.current.value;\n e.preventDefault();\n\n if (!query || (query && query.length === 0) || disableSubmitSearch) {\n this.searchTextInput && this.searchTextInput.current && this.searchTextInput.current.focus();\n } else {\n const searchQsp = searchQueryStringParameter || 'q';\n const searchURL = this._appendQueryParams(getUrlSync('search', actionContext) || '', query, searchQsp);\n document.location.href = searchURL;\n }\n };\n\n private readonly _handleCancelSearchChange = (): void => {\n const { isSearchFormExpanded, suggestions } = this.state;\n\n if (!isSearchFormExpanded) {\n this.setState({\n isSearchFormExpanded: true,\n searchText: '',\n isInitialState: false\n });\n } else {\n if (suggestions && suggestions.AllSearchResults) {\n this._clearAutoSuggestState();\n }\n this.setState({ isSearchFormExpanded: false });\n }\n };\n\n private readonly _handleCancelSearchFocused = (): void => {\n const { suggestions } = this.state;\n if (!(suggestions && suggestions.AllSearchResults)) {\n this._clearAutoSuggestState();\n this.setState({ isSearchFormExpanded: false });\n }\n };\n\n private readonly _appendQueryParams = (route: string, query: string, qsp: string): string => {\n if (!MsDyn365.isBrowser) {\n return '';\n }\n\n const queryUrl = new URL(route, window.location.href);\n if (qsp && query) {\n queryUrl.searchParams.set(qsp, query);\n }\n\n return queryUrl.href;\n };\n\n private readonly _setAutoSuggestResultCount = (result?: Autosuggestions) => {\n if (this.autoSuggestResultScreenReaderDiv.current !== null) {\n const ariaLiveRegion = this.autoSuggestResultScreenReaderDiv.current;\n const suggestResultString = this.props.resources.autoSuggestFoundMessage;\n const emptyResultString = this.props.resources.noAutoSuggestionMessage;\n ariaLiveRegion.innerText =\n result && result.AllSearchResults && result.AllSearchResults.length > 0 ? suggestResultString : emptyResultString;\n ariaLiveRegion.setAttribute('aria-live', 'assertive');\n return ariaLiveRegion.innerText;\n }\n return '';\n };\n}\n\nexport default Search;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { INodeProps, Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ISearchCategoryViewProps, ISearchFormViewProps, ISearchKeywordViewProps, ISearchProductViewProps } from './components';\nimport { ISearchViewProps } from './search';\n\nconst SearchView: React.FC<ISearchViewProps> = props => {\n const {\n Search,\n AutoSuggestAriaLabel,\n AutoSuggestAriaLabelText,\n searchText,\n AutoSuggest,\n KeywordSuggest,\n ProductSuggest,\n CategorySuggest,\n UlKeyword,\n UlProduct,\n UlCategory,\n form,\n autosuggestCategory,\n autosuggestKeyword,\n autosuggestProduct,\n SearchForm,\n FormWrapper,\n label,\n isLoadingAutoSuggest,\n isLoadingNode\n } = props;\n\n return (\n <Module {...Search}>\n {label}\n {_renderForm(form as ISearchFormViewProps, SearchForm, FormWrapper)}\n <Node {...AutoSuggest}>\n {searchText && searchText.length > 0 ? <Node {...AutoSuggestAriaLabel}>{AutoSuggestAriaLabelText}</Node> : ''}\n {_renderKeywordSuggestions(KeywordSuggest, UlKeyword, autosuggestKeyword, isLoadingAutoSuggest, isLoadingNode)}\n {_renderProductSuggestions(ProductSuggest, UlProduct, autosuggestProduct, isLoadingAutoSuggest, isLoadingNode)}\n {_renderCategorySuggestions(CategorySuggest, UlCategory, autosuggestCategory, isLoadingAutoSuggest, isLoadingNode)}\n </Node>\n </Module>\n );\n};\n\nconst _renderForm = (form: ISearchFormViewProps, SearchForm: INodeProps, FormWrapper: INodeProps) => {\n return (\n <Node {...SearchForm}>\n <Node {...FormWrapper}>\n {form.input}\n {form.cancelBtn}\n {form.submitBtn}\n </Node>\n </Node>\n );\n};\n\nconst _renderKeywordSuggestions = (\n KeywordSuggest: INodeProps,\n UlKeyword: INodeProps,\n keywordSuggestions?: ISearchKeywordViewProps,\n isLoadingAutoSuggest?: boolean,\n isLoadingNode?: React.ReactNode\n) => {\n return (\n keywordSuggestions && (\n <Node {...KeywordSuggest}>\n <Node {...UlKeyword}>\n {isLoadingAutoSuggest && isLoadingNode}\n {!isLoadingAutoSuggest &&\n keywordSuggestions.text.map(text => {\n return text;\n })}\n </Node>\n </Node>\n )\n );\n};\n\nconst _renderProductSuggestions = (\n ProductSuggest: INodeProps,\n UlProduct: INodeProps,\n productSuggestions?: ISearchProductViewProps,\n isLoadingAutoSuggest?: boolean,\n isLoadingNode?: React.ReactNode\n) => {\n return (\n productSuggestions && (\n <Node {...ProductSuggest}>\n <Node {...UlProduct}>\n {productSuggestions.title}\n {isLoadingAutoSuggest && isLoadingNode}\n {!isLoadingAutoSuggest &&\n productSuggestions.items.map((item, index) => {\n return (\n <Node {...item.LiProduct} key={item.id || index}>\n <Node {...item.AProduct}>\n {item.thumbnail}\n {item.text}\n {item.price}\n </Node>\n </Node>\n );\n })}\n </Node>\n </Node>\n )\n );\n};\n\nconst _renderCategorySuggestions = (\n CategorySuggest: INodeProps,\n UlCategory: INodeProps,\n categorySuggestions?: ISearchCategoryViewProps,\n isLoadingAutoSuggest?: boolean,\n isLoadingNode?: React.ReactNode\n) => {\n return (\n categorySuggestions && (\n <Node {...CategorySuggest}>\n <Node {...UlCategory}>\n {categorySuggestions.title}\n {isLoadingAutoSuggest && isLoadingNode}\n {!isLoadingAutoSuggest &&\n categorySuggestions.text.map(text => {\n return text;\n })}\n </Node>\n </Node>\n )\n );\n};\n\nexport default SearchView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { SocialMedia, SocialMediaComponent } from '@msdyn365-commerce/components';\nimport MsDyn365 from '@msdyn365-commerce/core';\nimport { IModuleProps } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ISocialShareItemConfig, ISocialShareItemProps, socialMedia } from './social-share-item.props.autogenerated';\n\nexport interface ISocialShareItemViewProps extends ISocialShareItemProps<ISocialShareItemConfig> {\n SocialShareItemElement: React.ReactNode | null;\n SocialShareItem: IModuleProps;\n}\n\n/**\n *\n * SocialShareItem component.\n * @extends {React.PureComponent<ISocialShareItemProps<ISocialShareItemConfig>>}\n */\nclass SocialShareItem extends React.PureComponent<ISocialShareItemProps<ISocialShareItemConfig>> {\n constructor(props: ISocialShareItemProps<ISocialShareItemConfig>) {\n super(props);\n\n this._getSocialShareItem = this._getSocialShareItem.bind(this);\n }\n\n public render(): JSX.Element | null {\n const viewprops = {\n ...this.props,\n SocialShareItem: {\n moduleProps: this.props,\n className: 'ms-social-share-item'\n },\n SocialShareItemElement: this._getSocialShareItem()\n };\n\n return this.props.renderView(viewprops) as React.ReactElement;\n }\n\n private _getSocialShareItem(): React.ReactNode | null {\n const src = this.props.config.icon;\n if (MsDyn365.isBrowser) {\n switch (this.props.config.socialMedia) {\n case socialMedia.facebook:\n return (\n <SocialMediaComponent\n socialMedia={SocialMedia.Facebook}\n postUrl={document.URL}\n context={this.context}\n id={`${this.props.id}_facebook`}\n typeName={this.props.typeName}\n data={{}}\n src={src}\n />\n );\n case socialMedia.twitter:\n return (\n <SocialMediaComponent\n socialMedia={SocialMedia.Twitter}\n postUrl={document.URL}\n context={this.context}\n id={`${this.props.id}_twitter`}\n typeName={this.props.typeName}\n data={{}}\n src={src}\n />\n );\n case socialMedia.pinterest:\n return (\n <SocialMediaComponent\n socialMedia={SocialMedia.Pinterest}\n postUrl={document.URL}\n context={this.context}\n id={`${this.props.id}_pinterest`}\n typeName={this.props.typeName}\n data={{}}\n src={src}\n />\n );\n case socialMedia.linkedin:\n return (\n <SocialMediaComponent\n socialMedia={SocialMedia.Linkedin}\n postUrl={document.URL}\n context={this.context}\n id={`${this.props.id}_linkedin`}\n typeName={this.props.typeName}\n data={{}}\n src={src}\n />\n );\n case socialMedia.mail:\n return (\n <SocialMediaComponent\n socialMedia={SocialMedia.Mail}\n postUrl={document.URL}\n context={this.context}\n id={`${this.props.id}_mail`}\n typeName={this.props.typeName}\n data={{}}\n src={src}\n />\n );\n default:\n return null;\n }\n }\n return null;\n }\n}\n\nexport default SocialShareItem;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Module } from '@msdyn365-commerce-modules/utilities';\nimport React from 'react';\n\nimport { ISocialShareItemViewProps } from './social-share-item';\n\nexport const SocialShareItemView: React.FC<ISocialShareItemViewProps> = props => {\n const { SocialShareItem, SocialShareItemElement } = props;\n\n if (!SocialShareItemElement) {\n props.context.telemetry.error('Social media is not valid, module wont render');\n return null;\n }\n return <Module {...SocialShareItem}>{SocialShareItemElement}</Module>;\n};\n\nexport default SocialShareItemView;\n"],"names":["SuggestionType","AutoSuggestInput","constructor","searchText","top","suggestionType","hitPrefix","hitSuffix","getCacheKey","getCacheObjectType","dataCacheType","this","searchQuery","topResultsCount","async","_getAutoSuggest","input","autosuggest","ctx","searchCriteria","ProductSearchCriteria","SearchCondition","length","Context","ChannelId","requestContext","apiSettings","channelId","CatalogId","catalogId","HitPrefix","HitSuffix","searchSuggestions","getSearchSuggestionsAsync","callerContext","queryResultSettings","Paging","Top","map","item","ImageUrl","generateImageUrl","AllSearchResults","telemetry","error","createObservableDataAction","id","action","Error","autoSuggestPromises","Promise","all","then","inputData","payLoad","KeywordSuggestionsComponent","props","suggestions","getPayloadObject","telemetryContent","reactNodes","push","_assembleNode","text","ariaLabel","Value","replace","RegExp","contentAction","etext","attribute","getTelemetryAttributes","React","className","key","Id","Object","assign","href","_generateLink","_getHighlightedText","suggestion","searchPageURL","searchQsp","formattedLink","route","indexOf","formattedText","dangerouslySetInnerHTML","getRichTextHtml","ProductSuggestionsComponent","autoSuggestProps","context","actionContext","resources","productSuggestionHeading","moduleType","moduleId","title","_renderTitle","items","productAutoSuggestionHeading","altText","thumbnail","_renderThumbnail","price","Value3","DecimalValue","_renderPrice","LiProduct","_getLiWrapper","AProduct","_getAWrapper","tag","recid","_objectSpread","getProductPageUrlSync","undefined","adjustedPrice","basePrice","PriceComponent","typeName","data","CustomerContextualPrice","BasePrice","request","gridSettings","config","imageSettings","cropFocalRegion","defaultImageSettings","viewports","xs","q","w","h","lg","xl","lazyload","Image","src","loadFailureBehavior","CategorySuggestionsComponent","categorySuggestionHeading","categoryAutoSuggestionHeading","format","splitValue","split","pop","_getCategoryLink","searchRefiners","urlPath","categoryRefiners","find","refiners","KeyName","refiner","Values","RefinerRecordId","parseInt","encodedRefiner","encodeURIComponent","JSON","stringify","compressRefiners","compressedRefinerKeys","compressedRefiners","forEach","compressedRefiner","refinerKey","FormComponent","searchPlaceholder","hideSearchLabel","isSearchFormExpanded","searchTextInput","handleInputChange","maxChars","disableSubmitSearch","handleCancelSearchChange","query","ariaLabelCancel","ariaLabelSearch","ariaLabelSubmit","onInputChange","e","target","value","labelNode","htmlFor","inputNode","type","name","placeholder","ref","onChange","maxLength","submitBtnNode","Button","label","cancelBtn","onClick","submitBtn","LabelComponent","searchLabelClass","searchtext","searchCollapsedLabel","attributes","innerRef","Search","super","waitTime","_focusOutTarget","state","closest","_clearAutoSuggestState","_keyup","keyCode","KeyCodes","Escape","setState","formReference","current","contains","autoSuggestResultDiv","searchState","defaultBasicSearchUrl","searchQueryStringParameter","update","createSearchStateInput","_handleInputChange","cancellabelDebounce","cancel","_debounce","getSearchSuggestionsAction","_getSuggestionType","inputSuggestionType","results","_getSearchRefiners","autoSuggestAriaLabel","_setAutoSuggestResultCount","catch","exception","debug","setTimeout","suggestionTypes","distinctSuggestionTypes","suggestionTypeItem","index","charAt","toUpperCase","slice","join","_handleSubmit","app","preventDefault","focus","searchURL","_appendQueryParams","getUrlSync","document","location","_handleCancelSearchChange","isInitialState","qsp","result","_result$AllSearchResu","itemCount","filter","i","Product","autoSuggestResultScreenReaderDiv","ariaLiveRegion","suggestResultString","autoSuggestFoundMessage","emptyResultString","noAutoSuggestionMessage","innerText","setAttribute","searchKeywordSuggestClass","searchProductSuggestClass","searchCategorySuggestClass","searchInputMaxLength","suggestionTypeCriterion","searchFormClass","getTelemetryObject","telemetryPageName","friendlyName","body","addEventListener","window","componentWillUnmount","removeEventListener","componentDidUpdate","params","isEditor","render","searchLabelArialLabel","cancelBtnAriaLabel","searchBtnAriaLabel","submitBtnAriaLabel","searchplaceholderText","keywordSuggestions","Keyword","None","productSuggestions","categorySuggestions","Category","viewProps","moduleProps","classnames","AutoSuggestAriaLabel","AutoSuggestAriaLabelText","AutoSuggest","KeywordSuggest","ProductSuggest","CategorySuggest","SearchForm","FormWrapper","role","autoComplete","onSubmit","UlKeyword","UlProduct","UlCategory","form","autosuggestKeyword","autosuggestProduct","autosuggestCategory","callbacks","renderView","getProductSearchRefinersAsync","_renderForm","Node","_renderKeywordSuggestions","_renderProductSuggestions","_renderCategorySuggestions","Module","Carousel","closeAnimation","activeIndex","next","previous","pause","pauseOnHover","ride","autoplay","interval","transitionType","slots","content","hideFlipper","dismissEnabled","onIndicatorsClickHandler","handleDismissCarousel","dismissCarouselAriaText","ariaLabelForDismissButton","indicatorAriaText","ariaLabelForSlide","directionTextPrev","flipperPrevious","directionTextNext","flipperNext","handleOnExited","handleOnExiting","handleKeyDown","getElementsByClassName","focusable","getElementById","elements","querySelectorAll","firstFocusable","lastFocusable","ctrlKey","altKey","keys","9","shiftKey","console","log","BulkPurchase","_errorCssClass","_errorCssGlyphClass","collapseRef","_dimensionDropDownChange","_this$collapseRef$cur","reEvaluateHeight","_onErrorMessage","errorMessage","stateMessage","messageText","statusCssString","messageGlyph","isOpen","_toggleCollapse","isExpanded","_this$props$data$prod","hasDimensionsInProps","ArrayExtensions","hasElements","productDimensions","hasDimensionsInData","container","_renderCollapseContent","_renderCollapseButton","_renderCollapse","bulkPurchaseHeaderTitle","Collapse","_renderMainContent","isMobileDevice","isMobile","variant","VariantType","Viewport","userMessageNode","Alert","color","RichTextComponent","bulkPurchaseDescriptionText","_renderMatrix","_featureState$result","_this$props$data$orde","_this$props$data$cust","featureState","isMultipleCatalogsFeatureEnabled","Name","IsEnabled","getCatalogId","validateCatalogId","ProductDimensionsMatrix","dimensions","orderTemplates","customerInformation","dimensionOnChange","onErrorMessage","isMultipleCatalogFeatureEnabledInHq","BulkPurchaseViewComponent","CarouselModule","_handleDismissCarousel","cookies","set","dismissCarousel","_next","nextIndex","animating","closeNow","_previous","_onExiting","_onExited","_goToIndex","newIndex","componentDidMount","get","carouselContainer","retrieveItems","renderModuleAttributes","keyboard","validateCartAsync","cart","propsContext","cartResult","cartVersion","shouldRetry","arguments","Version","warning","AsyncResult","resolve","_validationResult$Val","validationResult","CartsDataActions","bypassCache","ValidationResultsByLineId","refreshCart","refreshError","validateError","cartLineQuantityUpdatedAsync","isQuantityLimitsFeatureEnabled","products","cartLineToUpdate","quantity","isUsingDefaultOrderSettingsMax","_modifiedProduct$Beha2","modifiedProduct","product","RecordId","ProductId","Behavior","MaximumQuantity","cartLineId","LineId","toString","newQuantity","additionalProperties","updateLineResult","updateCartLineQuantity","message","getProductByProductId","productId","getProductByProductIdAndWarehouse","warehouseId","cartState","targetWarehouseValue","WarehouseId","_product$Behavior","InventoryLocationId","_renderDeliveryLocation","cartLine","deliverylocation","FulfillmentStoreId","_foundProductDelivery","orgUnitName","_getOrgUnitName","orgUnitLocations","foundProductDeliveryOption","productDeliveryOptions","deliveryOption","delivery","DeliveryOptions","option","Code","DeliveryMode","Description","shippingText","_renderStoreLocation","fulfillmentStoreId","foundLocation","orgUnitLocation","OrgUnitNumber","OrgUnitName","_assembleCartlines","cartlines","cartline","foundProductAvailability","_foundProductAvailabi","productAvailabilites","productAvailability","_productAvailability$","ProductAvailableQuantity","foundProductDeliveryOptions","removeButtonText","removeItemClickHandler","availableQuantityInStock","isStockCheckEnabled","outOfStockThreshold","AvailableQuantity","_getCartItemAvailableQuantity","maxQuantity","_getCartItemMaxQuantity","maxQuantityByConfig","maxByQuantityLimitsFeature","maxByQuantityLimitsFeatureResult","maxCartlineQuantity","isServiceItem","ItemTypeValue","ReleasedProductType","Service","onRemoveClickHandler","onRemoveClickFunction","TelemetryConstant","RemoveCartItem","removeCartItemAttribute","productUrl","getProductUrlSync","MsDyn365","isBrowser","isChannelTypeB2B","_cartline$CatalogId","fullUrl","URL","searchParams","hasError","Quantity","CartLineItemComponent","catalogs","currentQuantity","isOutOfStock","isQuantityEditable","primaryImageUrl","PrimaryImageUrl","displayMode","channelDeliveryOptionConfig","deliveryLocation","remove","storeLocation","getMiniCartData","miniCartData","CartLines","hasInvoiceLine","getActiveCartProductsAction","ActiveCartProductsInput","getAvailabilitiesForCartLineItems","ProductAvailabilitiesForCartLineItems","availableQuantity","getDeliveryOptionsForCartLineItems","ProductDeliveryOptionsForCartLineItems","deliveryOptions","CartIcon","retailMultiplePickUpOptionEnabled","getSortedCartLines","sortOrder","lines","sort","item1","item2","_item2$LineNumber","_item1$LineNumber","LineNumber","_item1$LineNumber2","_item2$LineNumber2","_getImageSettings","sm","_removeItemFromCartHandler","cartlineToRemove","cartLineIds","removeCartLines","isCartValid","payload","TelemetryEvent","CheckOut","Checkout","checkoutBySignInAttributes","GuestCheckout","checkoutByGuestAttributes","ViewShoppingBag","viewShoppingBagAttributes","_this$props$data$orgU","reaction","_this$props$data$cart","_setQuantityLimitsFeatureFlag","_validateCart","prevProps","shouldComponentUpdate","nextProps","nextState","_this$props$context$r","_cart$cart$CartLines","_this$state$miniCartD","_this$state$miniCartD2","_this$props$data$chan","_this$props$data$feat","enableHoverCart","isAnonymousCheckout","user","isAuthenticated","signInUrl","guestCheckoutUrl","cartUrl","checkoutURL","_getCheckoutURL","isCartEmpty","shouldShowMiniCart","isProductAddedToCart","addToCartBehavior","AddToCartBehavior","showMiniCart","emailDeliveryModeCode","channel","EmailDeliveryModeCode","cartLines","_getCartLines","validInventoryAcrossCartLines","validateCartLinesInventory","isValid","some","includeFlyout","status","totalItemsInCart","goToCartButtonText","goToCartButtonTitle","flyoutTitle","flyoutTooltip","UncontrolledTooltip","placement","hideArrow","trigger","shouldShowCloseButton","cartPageUrl","hideAriaHidden","TotalAmount","priceString","totalPriceFormatString","cultureFormatter","formatCurrency","feature","cartIcon","CartIconComponent","cartLabel","cartQtyLabel","FlyoutContainer","CartlinesWrapper","miniCartWrapper","miniCartItemWrapper","checkoutAsSignInUserButton","disabled","checkoutButtonTitle","checkoutAsGuestButton","guestCheckoutButtonTitle","goToCartButton","checkoutBlockedDueToUnavailableFunds","totalPrice","_cart$result$cart$Ver","_cart$result","lastValidatedCartVersion","ValidationResultsPairs","isAbsoluteUrl","urlCheck","returnURL","msdyn365Commerce","origin","includes","_this$props$data$cata","PickupDeliveryModeCode","FlyoutCartLineItems","cartLinesSortOrder","enableStockCheck","updateMaxQuantityForCartLineItem","maxQuantityForCartLineItem","sizeString","productDimensionTypeSize","colorString","productDimensionTypeColor","configString","productDimensionTypeConfiguration","styleString","productDimensionTypeStyle","quantityDisplayString","quantityDisplayText","salesAgreementPricePrompt","inputQuantityAriaLabel","discountStringText","originalPriceText","currentPriceText","shippingChargesText","removeCartButtonText","outOfStockText","outOfRangeOneText","outOfRangeFormatText","pickupDeliveryModeCode","_featureStatuses$find","_featureStatuses$find2","featureStatuses","_this$props$context","defaultOrderQuantityLimitsFeatureConfig","platform","enableDefaultOrderQuantityLimits","_featureStatuses$find3","customerInfo","IsB2b","_cartConfiguration$Ig","cartConfiguration","IgnoreOrderSettings","__decorate","observer","_renderCartlines","_ref","description","isChecked","ariaSetSize","ariaPosInSet","checked","CheckoutDeliveryOptions","selectedItemId","isLoading","checkoutErrorRef","init","moduleState","onEdit","isSelectDefaultOptionEnabled","onCancel","useDefaultDeliveryOption","canShip","cartDeliveryMode","getSavedDeliveryOption","loadDeliveryOptions","_this$props$data$chec","checkout","checkoutCart","getCartLinesForShipping","isDeliveryModeExists","deliveryMode","getDeliveryOptionSelected","selectedItem","priceFree","channelConfig","DeliveryOption","DescriptionComponent","freePriceText","currencyCode","Currency","getErrorMessage","errorMessageTitle","CheckoutDeliveryOptionsError","ErrorTitleComponent","ErrorMessageComponent","getDeliveryOptionList","count","code","radioButton","RadioButtonComponent","onDeliveryOptionChange","getSaveButton","saveBtnLabel","onSave","getEditButton","editBtnLabel","getCancelButton","cancelBtnLabel","setError","setHasError","onUpdating","clearError","_this$props$data$chec2","information","updateShouldCollapsePaymentSection","newShouldCollapsePaymentSection","_this$props$data$chec3","updateCartDeliverySpecification","savedDeliveryOption","_this$props$data$chec4","onReady","cartLinesForShipping","deliveryModeId","trim","checkoutState","updateCartDeliverySpecificationInput","shippingAddress","onPending","response","_response$errorDetail","errorDetails","LocalizedMessage","StringExtensions","isNullOrEmpty","genericErrorMessage","setIsCancellable","_this$channelDelivery","PickupDeliveryModeCodes","getDeliveryOptions","_this$props$data$chec5","cartId","originalDeliveryMode","shippingCartLines","hasShippingDeliveryLines","clearCartLinesDeliveryInformation","channelDeliveryOptionConfiguration","deliveryOptionFilter","filterDeliveryModeOption","FilterDeliveryModeOption","FilterOutNonCarrierDeliveryMode","getDeliveryOptionsAsync","QueryResultSettingsProxy","getPagingFromInputDataOrDefaultValue","_unused","deliveryOptionsNotFound","_this$props$data$chec6","_this$props$data$chec7","updateHasCartDeliveryMode","newHasCartDeliveryMode","isPaymentVerificationRedirection","_this$props$data$chec8","getStoredDeliveryOptions","_this$props$data$chec9","_this$props$data$chec10","_this$props$data$chec11","_this$props$data$chec12","_this$props$data$chec13","_this$props$data$chec14","isExpressCheckoutApplied","isExpressPaymentAppliedInCartPage","event","currentTarget","_this$props$data$cart2","properties","ExtensionProperties","property","Key","StringValue","parse","_this$expressPaymentD","_this$expressPaymentD2","expressPaymentDetailsFromCartPage","isExpressCheckoutAppliedInCartPage","_this$props$data$chec19","when","isDataReady","_this$props$data$chec15","_this$props$data$chec16","_this$props$data$chec17","_this$props$data$chec18","shouldEnableCheckoutErrorDisplayMessaging","_this$props$data$chec20","checkoutError","errorLocation","ErrorLocation","_this$props$data$chec21","checkoutErrorFocus","CheckoutModule","focusOnCheckoutError","isReady","isUpdating","isError","isShowList","isShowSelected","deliveryOptionAriaLabel","deliveryOptionsData","alert","ErrorComponent","errorMessageData","viewState","isShowSaveButton","hasExternalSubmitGroup","isShowEditButton","isShowCancelButton","classname","DeliveryOptionsList","list","deliveryOptionSelected","waiting","Waiting","saveButton","editButton","cancelButton","observable","computed","withModuleState","DeliveryOptionList","DeliveryOptionSelected","_ref2","onApplyHandler","onApplyGiftCard","onChangeNumberHandler","onEnterGiftCardNumber","onChangePinHandler","onEnterGiftCardPin","onChangeExpHandler","onEnterGiftCardExp","getForm","options","inputRef","inputPinRef","inputExpRef","giftCardNumber","giftCardPin","giftCardExp","supportExternalGiftCard","additionalFields","disableAddGiftCard","applyGiftCardButton","giftCardFormLabel","giftCardNumberLabel","giftCardPinLabel","giftCardExpLabel","giftCardAlertLabel","giftCardPinPlaceholderText","giftCardExpPlaceholderText","formProps","inputPinLabel","inputExpLabel","alertFieldLabel","assertive","fade","includeAlertClass","inputNumber","inputPin","inputExp","applyButton","showGiftCardPinInput","showGiftCardExpInput","inputProps","inputNumProps","inputPinProps","inputExpProps","onRemoveHandler","onRemoveGiftCard","giftCard","_giftCard$Id","getItem","getFormattedPrice","canRemove","enteredGiftCardLabel","giftCardAvailableBalanceLabel","removeGiftCardButton","balance","Balance","CardCurrencyCode","giftCardLast4Digit","substr","selectedGiftCard","removeButton","itemProps","getList","giftCards","listProps","SupportedGiftCardType","CheckoutGiftCard","_this","isFetchingGiftCard","isRequired","isEnabled","giftCardExtends","onSkip","couldPaidByGiftCard","giftCardSupported","External","shouldBeEnabledForGuest","handleCancelOrSubmit","hasSelectedItem","enterGiftCardNumber","enterGiftCardPin","enterGiftCardExp","removeGiftCard","applyGiftCard","giftCardTypes","getGiftCardTypes","giftCardType","isPinRequired","IsPinRequired","isExpRequired","IsExpirationDateRequired","tenderTypeId","PaymentMethodId","getGiftCard","addGiftCard","Pin","ExpirationDate","TenderTypeId","findGiftcardTenderTypes","tenderTypes","operationId","giftcardType","matchedTenderTypes","Internal","tenderType","OperationId","ConnectorId","noBalanceError","invalidCardInfoError","invalidCardTypeError","noCardPinError","noCardExpError","supportedGiftCardType","getTenderTypesAsync","internalGiftcardTenderTypes","OPERATIONS","PayGiftCertificate","externalGiftcardTenderTypes","Both","month","Number","year","getGiftCardAsync","activeGiftCard","emptyInputError","duplicatedCodeError","invalidCodeError","card","resolveCardTypesAsync","CardType","GiftCard","loyaltyAmount","customerAccountAmount","reduce","getLoyaltyAmount","getGiftCardTotalAmount","getCustomerAccountAmount","showAdditionalFields","shouldPayGiftCard","isOBORequest","EnabledPaymentsForOBO","moduleClassName","checkoutGiftCardProps","showGiftCard","TitleCompoent","From","SelectedGiftCard","GiftCardList","_ref3","_ref4","_objectWithoutProperties","_excluded","AddResource","_ref5","ShowResource","_ref6","min","max","step","ariaValueMax","ariaValueMin","ariaValueNow","onBlur","CheckoutLoyalty","_defaultLoyaltyPoints","loyaltyCard","CardNumber","LoyaltyCardId","updateLoyaltyCardId","loyaltyCardNumber","shouldPayLoyalty","_setErrorMessage","_clearError","_dialogToggleRef","_applyLoyaltyPoints","bind","_removeLoyaltyPoints","_onInputChange","_onBlur","dollarsApplied","maxDollars","isFetchingLoyaltyCard","loyaltyTransactionEstimation","MaxCurrencyValueOfLoyaltyPoints","_updateEstimate","_updateLoyalty","Loyalty","isShowLoyalty","isShowAddLoyalty","checkoutLoyalty","showLoyalty","heading","Heading","headingTag","loyaltyHeadingText","coveredAmountText","TextComponent","loyaltyCoveredAmountText","amount","addLoyalty","drawer","Drawer","toggleButtonText","_drawerHeader","openGlyph","closeGlyph","glyphPlacement","cardNumber","rewardPoints","RewardPoints","points","_renderPointSection","availablePointsLabel","expiringLoyaltyPointsLabel","loyaltyAmountContainer","appliedLoyaltyAmountContainer","loyaltyAmountLabel","payWithLoyaltyAmountLabel","loyaltyAmountInput","InputComponent","loyaltyAmountApplyButton","applyCheckoutLoyaltyPaymentText","isNaN","showAppliedAmount","loyaltyAmountAppliedText","loyaltyAmountAppliedPrice","loyaltyAmountRemoveButton","removeCheckoutLoyaltyPaymentText","point","RewardPointId","checkoutLoyaltyRewardPoint","availablePointsText","activePoints","ActivePoints","expiringPointsText","expiringPoints","PointsExpiringSoon","updateLoyaltyAmount","newAmount","parseFloat","num","toFixed","element","isDisabled","loyalPointsRequest","createGetMaxLoyaltyPointsToRedeemForTransactionBalanceInput","_query","callActionOrExecute","_points$MaxCurrencyVa","GetLoyaltyTransactionEstimationInput","newMaxPoints","AddCheckoutLoyalty","rewardPoint","ShowCheckoutLoyalty","isValidationPassed","isPlaceOrderLoading","isPlaceOrderClicked","handleCheckoutHeadingChange","checkoutHeading","cartStatus","isEmptyCart","getSlotItems","triggerPaymentWithPlaceOrder","updateShouldTriggerPaymentWithPlaceOrder","newShouldTriggerPaymentWithPlaceOrder","shouldTriggerPaymentWithPlaceOrder","onPlaceOrder","checkoutOutOfStockErrorMessage","orderConfirmation","isOverMaxQuantity","_checkout$result","hasOrderConfirmation","updatedCartVersion","updateCartLineEmailAddress","guestCheckoutEmail","placeOrder","handleCheckoutError","updateIsPaymentSectionContainerReady","newIsPaymentSectionContainerReady","emailDeliveryCartLines","lineDeliverySpecifications","line","DeliverySpecification","DeliveryModeId","DeliveryPreferenceTypeValue","DeliveryPreferenceType","ElectronicDelivery","ElectronicDeliveryEmailAddress","newGuestCheckoutEmail","updateLineDeliverySpecificationsAsync","updatedCart","_this$props$context$r2","productInventoryInformation","_cart$CartLines","_cart$CartLines2","productsThatShouldValidateInventory","_cartlineProduct$Beha","cartlineProduct","isStockedItem","IsStockedProduct","isEmailDelivery","productInventory","_productInventory$Pro","cartLinesInventoryValidation","getActiveChildModuleStates","childIds","getModule","hasModuleState","onContainerReady","redirectToCartPage","notFoundEditCartLinkMessage","editCartLink","Msdyn365","validateForCheckout","retry","_shouldValidateQuantityLimits","validateForCheckoutAsync","_result$ValidationFai","ValidationFailuresByCartLines","isB2BSite","isOrderQuantityLimitsFeatureEnabledInSiteSettings","_saveShippingAndBillingAddress","tokenizedPaymentCard","Zip","address","_getAddressFromTokenizedPaymentCard","updateBillingAddressFromExpressCheckout","newBillingAddressFromExpressCheckout","updateShippingAddressFromExpressCheckout","newShippingAddressFromExpressCheckout","TwoLetterISORegionName","Country","NameOnCard","Street","Address1","StreetNumber","Address2","City","State","ZipCode","Phone","invalidCartVersionErrorMessage","missingRequiredCartTenderLinesErrorMessage","checkoutApiFailureErrorMessage","checkoutResult","apiError","statusCode","errorCode","setCheckoutErrors","_error$data","shouldEnableSinglePaymentAuthorizationCheckout","AdditionalContext","isEditorialMode","isEmpty","isTermsAndConditionAccepted","disableForOBO","isPaidOffByCustomerAccount","amountDue","_this$props$data$chec22","_this$props$data$chec23","asyncResultStatus","AsyncResultStatusCode","LOADING","_this$props$data$chec24","_this$props$data$chec27","email","tenderLine","paymentTenderType","paymentTenderTypeFromCartPage","isExpressAddressAppliedInCartPage","cardPaymentAcceptResult","_this$props$data$chec25","_this$props$data$chec26","updateExpressCheckoutDetails","newEmailAddressFromExpressCheckout","newTenderLine","newTokenizedPaymentCard","newPaymentTenderType","newIsExpressCheckoutApplied","newIsExpressAddressApplied","newCardPaymentAcceptResult","updateExtensionProperties","newExtensionProperties","isCartReady","_this$props$data$chec28","isPaymentSectionContainerReady","_this$props$data$chec29","_this$props$data$chec30","_this$props$data$chec31","_this$props$data$chec32","redirectAdditionalContext","isPaymentVerificationRequired","_this$props$data$chec33","isPaymentSectionContainerHasError","_this$props$data$chec34","_this$props$data$chec35","isBillingAddressHasError","_this$props$data$chec36","_this$props$data$chec37","updateIsBillingAddressHasError","newIsBillingAddressHasError","canPlaceOrder","_this$props$data$chec38","_this$props$data$chec39","updateIsPlaceOrderEnabledInRedirection","newIsPlaceOrderEnabledInRedirection","_this$props$data$chec40","_this$props$data$chec41","checkoutErrorLocation","checkoutPaymentErrorLocation","ErrorCode","Microsoft_Dynamics_Commerce_Runtime_UnableToAuthorizePayment","CheckoutPaymentInstrument","_this$props$data$chec42","_this$props$data$chec43","shouldFocusOnCheckoutError","_this$props$data$chec44","_this$props$data$chec45","_this$props$data$chec46","_this$props$data$chec47","_this$props$data$chec48","_this$props$data$chec49","_this$props$data$chec50","_this$props$data$chec51","_this$props$data$chec52","_this$props$data$chec53","_this$props$data$chec54","_this$props$data$chec55","_this$props$data$chec56","_this$props$data$chec57","_document","_this$props$data$chec58","disableGuidedCheckoutFlow","backToShopping","placeOrderText","confirmPaymentText","cookieConsentRequiredMessage","checkoutClass","allCheckoutInformation","checkoutInformation","info","checkoutExpressPaymentContainer","isConsentGiven","device","Type","backToShoppingUrl","termsAndConditions","BackToShopping","backToShoppingAttributes","checkoutBtnText","hasShippingAddress","hasCartDeliveryMode","hasGuestCheckoutEmail","hasExpressPaymentContainer","style","display","hasSalesOrder","salesOrder","checkoutProps","headerProps","bodyProps","mainProps","mainControlProps","sideProps","sideControlFirstProps","sideControlSecondProps","termsAndConditionsProps","renderMsdyn365Text","AlertComponent","loading","_this$props$data$chec59","_this$props$data$chec60","canShow","guidedForm","GuidedFormComponent","resource","orderSummary","getOrderSummary","invoicePaymentSummary","getInvoicePaymentSummary","lineItems","getLineItems","placeOrderButton","PlaceOrderButtonComponent","keepShoppingButton","values","every","SUCCESS","FAILED","editProps","PickUpAtStoreComponent","PickUpAtStore","EmailDeliveryComponent","EmailDelivery","LineItemComponent","LineItem","pickUpAtStore","emailDelivery","LineItemGroupComponent","LineItemDeliveryGroup","LineItemList","lineItem","LineItemGroupComponentWithMultiplePickUp","lineItemWraper","lineItemWraperIcon","LineItemComponentWithMultiplePickUp","PickUpAtStoreComponentWithMultiplePickUp","_ref7","LineItemsComponent","_ref8","LineItems","Header","editLink","itemsForPickup","itemsForShip","itemsForEmail","itemsGroupWithMulitplePickupMode","OrderSummaryComponent","_ref9","subtotal","shipping","otherCharge","tax","totalDiscounts","loyalty","customerAccount","orderTotal","PaymentSummaryComponent","_ref10","invoices","totalAmountLabel","invoiceLabel","invoiceSummaryTitle","InvoiceSummary","orderTotalLabel","_getDeliveryLocation","locationMatch","_getLineItemComponent","_input$data$catalogs","_product","showShippingChargesForLineItems","productDimensionTypeAmount","shippingCharges","_cartLine$CatalogId","amountString","priceCurrency","_getPickUpAtStoreComponents","pickupDeliveryLocation","pickUpAtStoreWithLocationText","_getEmailDeliveryComponents","emailDeliveryText","_getLineItemsComponents","isPickUp","_getCartPickDeliveryMode","cartLineItem","_channelDeliveryOptio","isNullOrWhitespace","_countItems","_filterItemsByDiliveryType","_channelDeliveryOptio2","_getLineItemsByDeliveryType","_getGroupTitleComponent","_input$data$deliveryO","itemLabel","itemsLabel","inStorePickUpLabel","shippingCountCheckoutLineItem","emailDeliveryModeDesc","_productDeliveryOptio","suffix","handleLineItemHeadingChange","lineItemsHeading","_getLineItemsByDeliveryTypeWithMulitplePickupMode","multiplePickUpLabel","shippingLable","_filterItemsByMultiplePickupMode","getGroupByStorePickup","groupBy","groupDelivery","cartLinesGroup","cartLinesGrp","entries","groupByDeliveryType","lineItemDeliveryGroup","_getGroupTitleComponentWithMultiplePickUp","fulFillmentStoreId","_input$data$deliveryO2","_input$data$deliveryO3","pickupDeliveryModeDesc","_productDeliveryOptio2","_productDeliveryOptio3","groupTitle","iconClass","_getLineItems","editCartText","EditCart","groupClass","orderSummaryHeading","subTotalLabel","shippingLabel","taxLabel","loyaltyLabel","giftcardLabel","totalDiscountsLabel","freeText","toBeCalculatedText","otherCharges","customerAccountLabel","showLineItems","channelConfiguration","isShowOrHideTaxEnabled","isEnableShowOrHideSalesTaxECommerceEnabled","orderSummaryProps","OrderSummary","otherChargeLabel","isTaxIncludedInPrice","IsTaxIncludedInPrice","isShowTaxBreakup","CheckoutGuidedCard","editButtonRef","formCardRef","renderFooder","isVisted","isSubmitting","isCancelAllowed","hasControlGroup","saveAndContinueBtnLabel","canSubmit","canCancel","Save","SaveContinue","saveBtnAttributes","Cancel","cancelBtnAttributes","focusOnFirstFocusableElement","node","child","querySelector","focusOnEditButton","scrollToTitle","formCard","scrollIntoView","getTitle","Tag","_getModules","_getId","isActive","onNext","shouldFocus","children","childrenModules","childModule","childId","childState","setCheckoutErrorFocus","isPending","hasInitialized","changeBtnLabel","CheckoutChange","changeBtnAttributes","canEdit","active","expanded","closed","visted","hidden","initialized","ready","pending","updating","paymentInstrumentModuleId","CheckoutGuidedForm","currentStep","getEnabledModules","_enableAfterModule","Boolean","nextChildId","_isPaymentSectionContainer","_sectionState$childId","sectionState","currentId","getStep","getId","getHeading","moduleChildId","_state$childIds","shouldCollapseAfterRedirect","hasMissingInfo","hasOrderError","previousModuleHasError","_this$props$requestCo","GuidedCard","enableControl","buttonsStates","onPlaceOrderHandler","isBusy","buttonSetState","setIsBusy","useState","Purchase","PayCard","PayLoyalty","PayCustomerAccount","orderedProducts","redirect","PlaceOrder","balanceCheckButton","GiftCardBalanceCheck","_isEnabled","_getFormattedPrice","_enterGiftCardNumber","_enterGiftCardPin","_enterGiftCardExp","_setError","_applyGiftCard","_getGiftCardTypes","_getGiftCard","_findGiftcardTenderTypes","giftCardBalanceCheckProps","Form","Item","CatalogLabelComponent","isB2b","catalog","CartLineItemFunctions","renderProductDimensions","DimensionStrings","Dimensions","productDimension","DimensionTypeValue","DimensionValue","IsGiftCard","DiscountLines","discountLine","OfferId","OfferName","isSalesLine","PeriodicDiscount","EffectiveAmount","EffectivePercentage","inventoryInformationLabel","inventoryCssName","inventoryLabelClassName","IsInvoiceLine","unitOfMeasureDisplayType","DefaultUnitOfMeasure","_props$context$reques","hasShippingMethod","shippingChargeLines","ChargeLines","chargeLine","IsShipping","freightFee","chargeTotal","CalculatedAmount","priceComponent","_cartline$ChargeLines","chargeline","SalesAgreementLineRecordId","_props$context$reques2","_props$primaryImageUr","destructDimensionStrings","fallbackImageUrl","getFallbackImageUrl","ItemId","OmniChannelMedia","renderDisountLines","renderInventoryLabel","renderUnitOfMeasure","renderShippingLabel","renderOtherCharges","renderSalesAgreementPrompt","productAttribute","productName","imgeClassName","newValue","quantityOnChange","lineIndex","fallBackSrc","NetAmountWithAllInclusiveTax","GrossAmount","ExtendedPrice","NetPrice","salesAgreementLineId","_generateQuantityandPrice","nodes","IncrementalQuantity","currentCount","decrementButtonAriaLabel","incrementButtonAriaLabel","isCartStateReady","isGiftCard","classNames","DiscountAmount","priceEditorResources","CartLinePriceEditor","HeaderPreferredStore","modalCloseButtonRef","handleClick","_findPreferredStoreOnClick","storeSelectorStateManager","storeSelector","storeName","preferredStore","StoreName","headerPreferredStoreText","headerPreferredStoreAriaLabel","modules","storeSelectorId","openDialog","showMapViewLink","parentElementRef","onLocationSelected","Logo","_renderLogo","link","linkUrl","destinationUrl","openInNewTab","rel","_renderImage","image","imagePropertyName","shouldSkipToMainImage","NavIcon","toggleNavBar","mobileHamburgerAriaLabel","targetId","handleLinkTextChange","linkIndex","_this$props$config$my","myAccountLinks","linkText","popOverRef","_toggleNavbar","_togglePopover","_keydown","mobileMenuCollapsed","signinPopoverOpen","hasSigninerror","workerName","customerName","_this$props$data$empl","worker","employee","_this$props$data$acco","customer","accountInformation","FirstName","signUpCustomerNotFoundTitle","signUpMultipleCustomerFoundTitle","signInCustomerNotAuthorizedTitle","closeNotificationLabel","signinNotificationError","_getSigninNotification","NotificationsManager","instance","addNotification","ErrorNotification","wishlists","logoLink","logoImage","shouldShowWishlistCount","disableTooltip","headerToggleClass","headerClassName","navbarKey","cartIconSlot","_getSlot","menuBarSlot","searchSlot","wishlistCount","siteOptionsSlot","preferredStoreSlot","currentDistributorSlot","CommerceListLines","logo","wishListIconDesktop","WishListIconComponent","showButtonTooltip","wishlistTooltipText","wishlistCountLabel","isDispayWishlistCount","wishListIconMobile","navIcon","menuBar","search","siteOptions","HeaderTag","headerAriaLabel","HeaderContainer","HeaderTopBarContainer","Divider","MobileMenuContainer","Modal","wrapClassName","toggle","MobileMenuHeader","ModalHeader","MobileMenuBodyContainer","ModalBody","MobileMenuLinksContainer","AccountInfoDropdownParentContainer","AccountInfoDropdownPopoverConentContainer","displayName","Popover","signInLink","_getSigninButton","signOutLink","_getSignOutButton","switchCustomerLink","_getSwitchCustomerButton","accountInfoDropdownButton","_getAccountInfoDropdownButton","accountLinks","_getAccountLinks","currentDistributor","slotName","SignIn","signInLinkText","signInLinkAriaText","onTelemetryClick","_user$signOutUrl","SignOut","signOutLinkText","signOutUrl","signOutLinkAriaText","SwitchCustomer","isOBOAccountSelected","getAccountSelectionCookie","switchCustomerLinkAriaText","switchCustomerLinkText","getBusinessPartnerSelectionUrl","removeAccountSelectionCookie","shoppingAsText","url","param","delete","retailServerErrorCode","signUpCustomerNotFound","signUpMultipleCustomerFound","signInCustomerNotAuthorized","retailServerErrorMessage","MyProfile","cta","editableLink","onTextChange","_renderReactFragment","slot","_renderDesktopAccountBlock","InvoiceSummaryLine","cssLabel","_buildPaymentSummarySection","_computedLoyaltyAmount","invoiceLines","invoiceLine","InvoiceAmount","InvoiceId","giftCardAmount","_computeGiftCardAmount","giftCardTotalValue","giftCardCounter","Math","totalAmountAfterGiftCard","MediaType","getAltText","shouldUseCmsAltText","imageAltText","_context$app","validateMediaLocationAsync","mediaLocation","imageData","Uri","AltText","IsApplicableForChildEntities","isApplicableForChildEntities","http","XMLHttpRequest","open","send","getValidProductImages","selectedProduct","actionInput","MediaLocationsForSelectedVariantInput","getMediaLocationsForSelectedVariant","mediaLocations","pairs","pair","validateProductImages","MediaGallery","_props$config$zoomedI","_inlineZoomDivRef","Map","fullScreenOverlayButtonRef","player","defaultGalleryImageSettings","md","defaultThumbnailImageSettings","onExiting","onExited","removeInlineZoomStyle","isLastItem","goToIndex","updateZoomedInImage","images","mediaGalleryItems","isFirstItem","currentIndex","mediaItems","_mediaItems","_this$player$current","mediaTypeValue","Video","play","_this$player$current2","getImagesData","skipImageValidation","_this$props$config$im","_this$props$config$im2","source","imageSource","mediaLocationsForSelectedVariant","_mediaLocation$Uri","curatedImages","_filterMasterImageFromVariant","_renderCarouselItemVideo","mediaData","videoData","_videoData$_links","playerResources","videoMetaData","videoId","duration","playTime","posterframeUrl","_links","binaryReferences","videoBinaryReferences","videoPlayerData","metaData","Player","playerData","_renderEmptyImage","_getCarouselItem","isInPopup","fallbackImage","bypassHideOnFailure","_getThumbnailItem","modifiedActiveIndex","ThumbnailItemContainerProps","tabIndex","_generateOnThumbnailClick","onKeyDown","_generateOnThumbnailKeyDown","Picture","imageFallbackOptimize","shouldUseOptimizedImage","getVideoThumbNailItem","classes","_refHandler","divRef","which","Enter","Space","_renderVideoThumbnail","fullScreenTitleText","openModalDialog","_toggleModal","imageModalSlider","ZoomView","_mapProductToImageData","carouselprops","_renderCarouselItemImageView","_zoomedImageSettings","previousScreenshotFlipperText","nextScreenshotFlipperText","showPaginationTooltip","hideIndicator","isDisabledFunctionality","isMobileImageZoomed","carousel","imageModalSliderProps","modalIsOpen","ontoggle","galleryCarousel","ImagefullView","altTextSource","mediaGalleryImages","isImageZoomed","isInitialLoad","zoomedImageSettings","galleryImageSettings","_onImageMouseOut","_inlineZoomImageOnHover","_onInlineImageClick","_onContainerZoomImageClick","_onMouseOutLensContainer","_this$props$config$im3","_this$props$context$r3","shouldUpdateOnPartialDimensionSelection","_setRenderType","_this$props$config$th","thumbnailImageSettings","_setImages","_this$props$config$th2","productVariant","_product$productVaria","_this$props$context$a","_this$props$config$th3","_actionContext$reques","isPreview","commerceApiRequest","previewImageData","displayOrder","DisplayOrder","MediaTypeValue","_mediaLocation$Uri2","getProductImages","fireImmediately","_this$props$config$th4","_this$props$context$a2","isVertical","thumbnailsOrientation","isFullscreenAllowed","allowFullScreen","zoomViewMode","imageZoom","emptyPlaceHolderImage","placeholderImageName","_this$props$context$r4","mediaGalleryCarouselItems","_getMediaGalleryItems","mediaGalleryThumbnailCarouselItems","_getMediaGalleryThumbnailItems","callbackToggle","callbackThumbnailClick","callbackThumbnailKeyDown","CarouselProps","Thumbnails","ThumbnailsContainerProps","SingleSlideCarouselComponentProps","SingleSlideCarousel","vertical","flipperPrevLabel","flipperNextLabel","parentId","useTabList","lastUpdate","defaultKey","_getEmptyThumbnailItem","zoomView","curatedImage","mediaToSet","commerceVideoMetadataRequest","getVideoMetadataFromApi","Date","now","media","_renderImageInContainerOnZoom","_renderImageFullScreenOnZoom","_renderImageInlineOnZoom","_this$props$config$sh","_this$props$data$prod2","_this$props$data$prod3","_this$props$data$prod4","shouldHidePrimaryImages","shouldHideMasterProductImagesForVariant","variantImages","isVariantProduct","ObjectExtensions","isNullOrUndefined","MasterProductId","itemId","_item$additionalPrope","_this$props$config$da","dataScale","defaultDataScale","onMouseOver","onMouseMove","inlineZoomImageOnMouseMove","_this$props$config$da2","inlineZoomImageOnHover","String","_handleMobileViewZoomedImageClick","mobileZoomedInImageClassName","transform","classList","parentElement","overflow","_this$props$config$da3","bounds","getBoundingClientRect","positionX","clientX","left","positionY","clientY","scaledPositionX","scaledPositionY","add","scrollTo","_this$props$config$da4","innerWidth","inlineZoomInitClick","inlineZoomImageOnMouseOut","onContainerZoomInit","onMouseOutLensContainer","_this$props$config$da5","onMouseOut","onMouseMoveLensContainer","onMouseOverImageContainer","_product$PrimaryImage","_this$fullScreenOverl","parentDiv","removeAttribute","removeContainerZoomStyle","_renderThumbnails","thumbnails","_renderThumbnailItem","OrderSummaryLine","_buildOrderSummarySection","getDeliveryMode","featureSate","pickupDeliveryMode","dM","SubtotalAmount","SubtotalAmountWithoutTax","TaxAmount","TaxOnNonShippingCharges","OtherChargeAmount","hasDeliveryMethod","getDeliveryConfiguration","deliveryModes","taxOnShippingCharge","TaxOnShippingCharge","shippingChargeAmount","ShippingChargeAmount","otherChargeAmount","taxOnNonShippingCharges","isTaxGreaterThanZero","otherChargeAmountTotal","subtotalAmountActual","ProductCollection","handleHeadingChange","_getProductsDimensionsAvailabilities","dimensionsToDisplayOnProductCard","dimensionsInProductCard","dimensionsToDisplayAsSwatch","dimensionsAsSwatchType","validProducts","validValues","DimensionTypes","none","productsDimensionAvailabilities","getDimensionAvailabilitiesForProductSearchResultAction","DimensionAvailabilitiesForProductSearchResultInput","DimensionSwatchDisplayTypes","productCard","initProductState","productPrices","productCollectionProducts","productCollection","equals","listType","getProductPriceForSelectedProducts","ProductPriceForSelectedProductsInput","p","_getProduct","productPrice","_this$state$productsD","trace","allowBackNavigation","breaCrumbType","breadcrumbType","allowBack","quickviewSlot","quickview","productComparisonButtonSlot","productComparisonButton","reviewCountAriaLabelValue","TotalRatings","ratingCountAriaLabel","ratingCountAriaLabelSingleUser","isPriceMinMaxEnabled","priceResources","priceRangeSeparator","ProductContainer","productComponent","ProductComponent","ratingAriaLabel","quickViewButton","dimensionAvailabilities","dimensionAvailability","_product$MasterProduc","masterProductId","_getActivePrice","productsList","getPriceForProductSearchResult","PriceForProductSearchResultInput","_getSeeAllButton","headingLabel","recommendation","discountIds","searchPageLink","seeAllButtonText","enableAffiliationBasedPricing","shouldDisplaySeeAllButton","recommendationListId","isCarousel","layout","headingComponent","updatedProducts","getProductData","at","productCollectionViewProps","ProductCollectionContainer","GridComponentProps","seeAllButton","_renderCarousel","_renderProduct","_renderGrid","gridContainer","PromoBannerCloseButton","closeButtonAriaLabel","onClose","PromoBannerClose","PromoBannerLinks","links","editableLinks","_mapEditableLinks","linkdata","PromoBannerText","PromoBanner","isVisible","handleTextChange","bannerMessages","_isLastItem","_isFirstItem","_onDismiss","closeButtonLabel","bannerText","bannerAriaLabel","onDismiss","handleLinks","handleText","promoBannerProps","promoBannerTextProps","promoBannerLinksProps","contentProps","promoBannerText","carouselProps","closeButton","slides","AddToCartProductListComponent","_quickOrderTemplate$q","_quickOrderTemplate$q2","quickOrderTemplate","quickOrderTemplateLines","fullProduct","ProductDetails","productListLine","buttonLabel","quickOrderGridBuySelectedButtonText","buttonAriaLabel","quickOrderGridBuySelectedButtonAriaLabel","dialogStrings","_props$resources$quic","_props$resources$quic2","_props$resources$quic3","_props$resources$quic4","_props$resources$quic5","_props$resources$quic6","_props$resources$quic7","_props$resources$free","_props$resources$orig","_props$resources$curr","_props$resources$adde","_props$resources$quic8","_props$resources$quic9","goToCartText","quickOrderGridGoToCartText","continueShoppingText","quickOrderGridDialogCloseText","quickOrderGridBuySelectedAddingToCartErrorNotificationCloseAriaLabel","headerItemOneText","quickOrderGridSingleItemText","headerItemFormatText","quickOrderGridMultiLineItemFormatText","headerLinesFormatText","quickOrderGridMultiLinesFormatText","headerMessageText","quickOrderGridHeaderMessageText","addedQuantityText","buyAgainNotificationTitle","quickOrderGridBuySelectedAddingToCartErrorNotificationTitle","buyAgainNotificationCloseAriaLabel","getDialogStrings","orderDetailProducts","quickOrder","orderDetails","quickLine","_quickLine$fullProduc","salesLine","OrderDetailsProduct","getOrderDetails","AddToCartComponent","addToCartText","addToCartArialLabel","navigationUrl","shouldSkipSiteSettings","orderDetailsProducts","onError","getQuickOrderGridAddToCartDialog","_result$cartActionRes","cartActionResult","handlers","removeActionHandler","removeProductList","productList","removeQuickOrderList","QuickOrderGridDrawer","_props$collapseProps$","_props$collapseProps","_isManuallyToggled","onToggle","previousState","collapseProps","_drawerGlyphClass","toggleGlyphClassName","isAnimateGlyph","_drawerOpenGlyph","_drawerCloseGlyph","drawerClass","drawerButtonClassName","toggleButtonProps","block","_generateDrawerButtonInnerMarkup","isCollapseState","drawerButtonTextClass","toggleButtonClassName","headingDrawerClass","descriptionDrawerClass","moduleHeadingText","moduleDescriptionText","_generateGlyphMarkup","glyphClass","QuickOrderGridFormComponent","productTextInput","quantityTextInput","quickOrderGridState","minQuantity","isAddtoListDisabled","ariaLabelQuantity","ariaLabelProduct","ariaLabelAddtoCart","handleQuantityChange","handleAddProductListClick","onInputChangeFunction","onQuantityInputChange","onQuantityChangeFunction","productNode","quantityNode","pattern","addToListBtn","userMessage","QuickOrderGridProduct","productLine","isSelected","QuickOrderGridDesktopHeaderCellsComponent","columnWithNumberClassName","quickOrderGridProductNumberText","quickOrderGridProductText","quickOrderGridUnitPriceText","quickOrderGridUnitOfMeasureText","quickOrderGridQuantityText","quickOrderGridActionsText","QuickOrderGridMobileHeaderCellsComponent","QuickOrderGridTableHeaderComponent","rowClassName","headerCells","QuickOrderGridTableRowProductImageComponent","_props$data$product$p","_props$imageSettings","containerClassName","setShowPreviousActions","onChangeHandler","onChangeQuantity","itemKey","onRemoveItem","quickOrderGridProductKey","QuickOrderGridExtraActionsPopupComponent","_props$data$product$p2","quickOrderGridViewDetailsButtonAriaLabel","quickOrderGridViewDetailsButtonText","shouldShowActions","setShowActions","onClickViewDetails","shouldShowActionsNewValue","actionsContainerClassName","quickOrderGridRemoveItemButtonAriaLabel","QuickOrderGridDesktopTableRowCellComponent","_props$data$product$p3","_product$Dimensions","_productListLine$Line","dimension","_dimension$DimensionV","dimensionValue","quickOrderGridProductDimensionsSeparator","moduleTypeName","renderProductPrice","UnitOfMeasure","quickOrderGridInputQuantityAriaLabel","quickOrderGridDecrementButtonAriaLabel","quickOrderGridIncrementButtonAriaLabel","QuickOrderGridMobileTableRowCellComponent","_props$data$product$p4","_productListLine$Line2","QuickOrderGridTableRowComponent","QuickOrderGridTableComponent","setIsMobile","isMobileView","quickOrderGridProducts","isOrderQuantityLimitsFeatureEnabled","updateViewport","quickOrderProduct","_product$ProductDetai","_quickOrderProduct$pr","_quickOrderProduct$pr2","behavior","MinimumQuantity","ProductPrice","callBacks","QuickOrderGrid","_this$props$data$feat2","_this$props$data$feat3","_this$props$data$feat4","_cartConfiguration$re","_cartConfiguration$re2","_waitTime","_dimensionUpdateQueueMaxLength","_dimensionUpdateQueue","FinitePromiseQueue","_dimensions","_initializedDimensions","Set","_cssClassNameConfigure","_className","_isOrderQuantityLimitsFeatureEnabled","_isChannelLimitsFeatureEnabled","_applyDefaultOrderSettingsForCartLine","_quickOrderGridCallbacks","initializeDimension","initializedDimension","dimensionSelectedAsync","selectedDimensionId","selectedDimensionValueId","_this$state$productDi","size","enqueue","_updateDimensions","FinitePromiseQueueError","ProcessWasDiscardedFromTheQueue","getDropdownName","dimensionType","_getDropdownName","changeUpdatingDimension","isUpdatingDimension","_quickOrderGridRowCallbacks","_removeItemRowFromTable","productListLineId","_changeRowQuantity","_removeProductList","token","ProductListsDataActions","reload","_updateStatusState","quickOrderGridDeleteProductListFailedText","productResponse","_cancellabelDebounce","isQuickOrderGridFormExpanded","getScanResult","GetScanResultInput","ProductDimensionFull","_updateQuantitiesInState","_handleQuantityChange","_this$state$productRe","currentValue","inputElement","_quantityInput","HTMLInputElement","minimumQuantity","needToUpdateUIValue","_behavior$MinimumQuan","newCurrentValue","_this$state$productRe2","ProductDimensionType","Color","Configuration","Size","Style","hasProductDimensions","dimensionsToUpdate","productDimensionErrorState","otherError","clearOtherErrorState","dimensionKey","configureErrors","errorState","mappedDimensions","_this$_updateDimensio","_updateDimensionValue","newProduct","getSelectedVariant","SelectedVariantInput","getDimensionsForSelectedVariant","GetDimensionsForSelectedVariantInput","variantProduct","productDimensionFull","newValueId","DimensionValues","_getDimensionErrorString","dimensionTypeValue","amountErrorMessage","quickOrderGridproductDimensionTypeAmountErrorMessage","quickOrderGridproductDimensionTypeColorErrorMessage","quickOrderGridproductDimensionTypeConfigurationErrorMessage","quickOrderGridproductDimensionTypeSizeErrorMessage","quickOrderGridproductDimensionTypeStyleErrorMessage","_productResponse$Dime","missingDimensions","_getConfigureErrors","quickOrderGridWrongQuantityErrorMsg","quickOrderTemplateLinesData","orderLineIndex","findIndex","newProductListLine","previousQuantity","newLine","updatedLines","updatedProductList","ProductListLines","ActiveProductListInput","ProductListId","_addItemToProductListLine","quickOrderGridAddedToGridSuccessMessage","quickOrderGridAddedToGridFailureMessage","quickOrderGridAddedToGridDuplicateError","productListId","_productResponse$Defa","_createProductList","AddItemToProductListInput","addItemToProductListAction","CreateProductListInput","ProductListType","QuickOrder","createProductList","_productTextInput","_telemetryContent","_quickOrderGridFormClass","_quickOrderGridFormProductContent","_quickOrderGridFormMsgContent","ValidateDefaultOrderSettingsPerLine","_this$state$min","_this$state$max","quickOrderGridModuleHeading","quickOrderGridModuleDescription","quickOrderGridAddtogrid","quickOrderGridProductQuantityInputLabel","quickOrderGridProductInputLabel","quickOrderGridProductDimensionTypeColor","quickOrderGridProductDimensionTypeConfiguration","quickOrderGridSelectDimensionFormatString","quickOrderGridProductDimensionTypeSize","quickOrderGridProductDimensionTypeStyle","quickOrderGridProductDimensionTypeAmount","quickOrderGridModulePageHeading","productConfigureResources","selectDimensionFormatString","header","quickOrderGridProps","isB2bCustomer","actions","bulkPurchase","_renderBulkPurchase","quickOrderGridForm","quickOrderGridFormProductContent","quickOrderGridFormMsgContent","configure","getProductConfigure","_renderListContainer","orderActions","_renderQuickOrderGridActions","quickOrderGridDeleteButtonText","topStateMessage","addProductListToBag","QuickOrderGridActionsView","isBulkPurchaseEnabled","bulkPurchaseSlots","containerClass","_renderQuickOrderTable","_initQuickOrderGridProducts","quickOrderGridProduct","tableClassName","_getMinQuantityForCartLineItem","_getMaxQuantityForCartLineItem","_getQuantity","_product$Behavior2","applyDefaultOrderSettingsForCartLine","_product$Behavior3","defaultQuantity","DefaultQuantity","renderConfigureDropdown","dropdown","containerProps","labelContainerProps","errors","select","renderConfigure","dropdowns","renderForm","quickOrderForm","quickOrderProductContent","quickOrderMessageContent","QuickOrderDrawer","_toggle","isManuallyToggled","drawerGlyphClass","animateGlyph","drawerOpenGlyph","drawerCloseGlyph","collapseState","QuickOrderFormComponent","quickOrderState","disableAddtoCart","addQuantityPlaceholderText","handleAddToCartClick","addToCartBtn","QuickOrderProduct","simpleProduct","QuickOrderDesktopHeaderCellsComponent","quickOrderProductNumberText","quickOrderProductText","quickOrderUnitPriceText","quickOrderUnitOfMeasureText","quickOrderQuantityText","quickOrderTotalText","quickOrderActionsText","QuickOrderMobileHeaderCellsComponent","QuickOrderTableHeaderComponent","QuickOrderTableRowProductImageComponent","_props$data$product$P","QuickOrderExtraActionsPopupComponent","QuickOrderDesktopTableRowCellComponent","_cartLine$LineId","quickOrderProductDimensionsSeparator","Price","UnitOfMeasureSymbol","quickOrderInputQuantityAriaLabel","quickOrderDecrementButtonAriaLabel","quickOrderIncrementButtonAriaLabel","quickOrderRemoveItemButtonAriaLabel","QuickOrderMobileTableRowCellComponent","quickOrderQuantityMobileText","QuickOrderTableRowComponent","QuickOrderTableComponent","quickOrderProducts","dimensionUpdateQueue","initializedDimensions","cssClassNameConfigure","quickOrderCallbacks","productText","inputQuantityText","quantityInput","cancellableDebounce","isQuickOrderFormExpanded","_addItemToCart","quickOrderAddedToCartSuccessMessage","quickOrderAddedToCartFailureMessage","defaultDeliveryOption","productAvailableQuantity","_updateAvailability","shouldValidateQuantityLimits","addProductToCartInput","orderQuantityLimitsFeatureIsEnabled","isAddEmailDeliveryItemToCart","addProductToCart","inputProductText","substatus","maxQtyLimitReachedMessage","_getMaxQtyMessage","_result$errorDetails","_getConcatenatedMaxQtyMessage","quickOrderMaxQuantityLimitText","quickOrderAlreadyItemQuantityText","reject","newAvailableQuantity","getProductAvailabilitiesForSelectedVariant","ProductAvailabilitiesForSelectedVariantInput","productAvailable","quickOrderproductDimensionTypeColorErrorMessage","quickOrderproductDimensionTypeConfigurationErrorMessage","quickOrderproductDimensionTypeSizeErrorMessage","quickOrderproductDimensionTypeAmountErrorMessage","quickOrderproductDimensionTypeStyleErrorMessage","_updateProductAvailability","quickOrderWrongQuantityErrorMsg","quickOrderOutofStockErrorMsg","viewport","quickOrderFormClass","quickOrderFormProductContent","quickOrderFormMsgContent","quickOrderModuleHeading","quickOrderModuleDescription","quickOrderAddtobag","quickOrderProductQuantityInputLabel","quickOrderProductInputLabel","quickOrderProductDimensionTypeColor","quickOrderProductDimensionTypeConfiguration","quickOrderSelectDimensionFormatString","quickOrderProductDimensionTypeSize","quickOrderProductDimensionTypeStyle","quickOrderProductDimensionTypeAmount","quickAddQuantityPlaceholderText","quickOrderProps","isB2B","quickOrderList","_initQuickOrderProducts","productInventoryInfo","maxQuantityForLineItem","addedQuantity","_item$ItemId","minInventory","quickOrderMsgContent","ProductRefinerValueDataTypeValue","ProductRefinerTypeValue","ProductRefinerSource","isRangeType","dataTypeValue","AttributeDataType","Decimal","Integer","findMatchingRefinementCriterion","productRefinerValue","refinementCriteria","refinementCriterion","isMatchingRefinementCriterion","RefinerSourceValue","DataTypeValue","LeftValueBoundString","getUpdatedRefinementCriteria","itemToggleNotification","currentRefinementCriteria","updatedRefinementCriteria","toggledItemFound","selectedCriterion","isSelecting","rangeStart","RightValueBoundString","rangeEnd","Text","TrueFalse","parentProductRefinerHierarchy","RefinerTypeValue","RefinerType","SingleSelect","matchingIndex","criterion","splice","ChoiceSummary","closeButtonGlyph","_onClick","stopPropagation","clearAll","getAttribute","selectedRefiner","_getSelectedRefinerChoice","onChoiceClicked","itemClicked","choiceClicked","nextItemToFocus","nextSibling","selectedChoices","channelInventoryConfigurationId","refinerHierarchy","productListInventoryDisplay","ProductListInventoryFilteringOptions","HideOOS","choice","parent","hierarchy","_getKeyForRefinerValue","clearAllText","choiceAriaLabel","closeAriaLabel","selectedRefinersMap","clearAllAttributes","urlBuilder","LeftValueBoundLocalizedString","choiceFormat","choiceRangeValueFormat","refinerValues","overallFormat","rangeFormat","refinerValueName","refinerName","_formatPrice","UnitText","filterValue","currency","selected","ErrorMessage","FeatureSearchResultItem","_context$request$app","productRecordId","featureSimilarDescriptionTitle","featureSimilarLooksTitle","imageUrl","img","imageProps","renderProductPlacementImage","Link","ModalToggle","modalNode","autoFocus","applicationNode","returnFocusRef","returnRef","onModalToggle","zIndex","modalHeaderNode","modalTitle","modalFooterNode","ModalFooter","modalCloseButtonText","getInventoryLabel","AttributeValues","inventoryAttribute","TextValue","ProductSearchResultItems","inventoryLabel","swatchItemAriaLabel","RangeRefineItem","_selectedRefinementCr","_this$props$selectedR","_this$props$selectedR2","_this$props$selectedR3","_this$props$selectedR4","_formattedPriceReverseLookup","getLabels","sliderId","minPrice","maxPrice","labelId","labelString","labelPositioning","getSliderThumbs","sliderKey","selectedMin","selectedMinPrice","selectedMax","selectedMaxPrice","_this$props$minValueS","_this$props$maxValueS","minValueSliderThumbAriaLabel","ariaValueText","maxValueSliderThumbAriaLabel","_onRangeUpdate","_onRangeUpdateEnd","_handleRangeTooltipText","_changeMin","_changeMax","_finishChangeMin","_finishChangeMax","minInput","maxInput","selectedRefinementCriterion","initialMin","initialMax","minValue","maxValue","labels","sliderKeyString","sliderThumbs","validationErrorMin","validationErrorMax","touchedMin","touchedMax","previousProps","updateSliderProps","refineItemCommonProps","rangeType","_renderInputFields","_renderSlider","_this$props$selectedR5","_this$props$selectedR6","_this$props$selectedR7","_this$props$selectedR8","formAttrs","rangeNameFormat","minInputClassName","maxInputClassName","formattedSelectedMin","_getFormattedSelectedValue","formattedSelectedMax","minLabel","onFocus","maxLabel","placeholderTextMax","ariaAttributes","Slider","inForm","orientation","showLabels","showTooltip","onChangeEnd","debounce","handleTooltipText","_changeValue","inputType","selectedKey","touchedKey","_getInputWithoutFormatting","selectedMinValue","minTouched","maxNum","validationErrorNaN","_focus","_validateRange","selectedMaxValue","maxTouched","minNum","touched","validationError","validationErrorRange","inputAsNum","sliderChangeNotification","eventType","firstThumbValue","secondThumbValue","_focusOnSliderThumb","tooltip","RefineItem","anchorType","_productRefinerValue$","_this$props$parentPro","_this$props$parentPro2","_this$props","productCountAriaLabel","singleProductCountAriaLabel","refineItemAriaLabel","refineItemsAriaLabel","attrs","isSingleSelect","itemTypeClassName","SourceValue","Rating","_renderRating","productCount","Count","refineMenuItemAriaLabel","toLocaleLowerCase","shouldDisplayAsSwatch","_getShouldDisplayAsSwatch","hasColor","SwatchColorHexCode","hasImage","SwatchImageUrl","hasContentSwatch","_getRefinerUrl","_renderSwatch","checkIfShouldDisplayAsSwatch","_productRefinerValue$2","swatchItems","colorHexCode","SwatchComponent","isSelectionEnabled","isRefineItem","ratingUserCountAriaLabel","ratingSingleUserCountAriaLabel","_productRefinerValue$3","refinerRating","ratingRefiner","selectedRefinerValues","selectedRating","defaultChkProductCount","ratingComponentClass","productCountAriaLabelValue","RatingComponent","avgRating","ratingCount","hideCount","readOnly","RefineSubmenu","_onToggleItem","_onToggleSubmenu","isExpandedOnInitialLoad","productRefinerHierarchy","hideRating","timeout","_renderChildItems","_renderRange","_renderSingleMultiSelect","refinerValuesList","listItems","selectedValue","_getRangeType","DisplayTemplateValue","DisplayTemplate","Range","SliderWithBars","onUpdateRefiners","prevState","Separator","separator","Title","SearchResultContainer","SearchResultContainer_1","sortByDropdownOptions","sortOptions","sortByOptionRelevanceDesc","sortByOptionNameAsc","sortByOptionNameDesc","sortByOptionPriceAsc","sortByOptionPriceDesc","sortByOptionRatingDesc","sortByOptionBestSelling","sortByOptionNewScore","sortByOptionTrendingScore","_pageType","urlTokens","pageType","_viewport","expandrefinerCount","defaultPageNumber","isListPageStateUpdated","_isMounted","_updateVariantAvailability","includeAttributes","_updateListPageState","listPageState","_this$props$config$it","_this$props$config$it2","querySorting","sorting","decodeURIComponent","currentPageNumber","skip","itemsPerPage","sortingCritera","Columns","pageSize","activeProducts","totalProductCount","activeFilters","hydrateRefinersFromUrl","featureProduct","_this$props$data$list","_this$props$data$list2","_this$props$data$list3","_this$props$data$list4","_getSearchResultModal","modal","modalHeader","modalFooter","modalBody","SearchResultModal","_modalToggleRef","_getCollectionTitle","collectionTitle","category","getFriendlyName","locale","NameTranslations","productCountNumber","productCountText","numberOfProducts","oneProduct","TitleContainer","toLowerCase","titlePrefix","searchTextPrefix","titleText","titleCount","_getCategoryHierarchy","categoryHierarchy","CategoryHierarchyContainer","categoryHierarchyList","categoryLinkAriaLabel","Url","categoryHierarchySeparator","_getSortingDropDown","activeDropdown","_getCurrentlySelectedOption","sortingState","selectedSortByOption","dropdownOptions","_getAllSortByOptions","dropdownOption","SortingContainer","sortByDropDown","LabeledDropdown","labelClassname","labelText","sortByDropdownLabel","dropdownId","dropdownClassname","toggleColor","selectedOption","onSelectOption","_updateSortByDropdown","_sortAndFilterContainerRef","_getPagination","getCurrentUrl","skipCount","totalItems","previousText","nextText","UncontrolledPagination","paginationAriaLabel","startingItem","_renderPrev","_renderNext","previousAriaLabel","nextAriaLabel","_getRefineMenu","tempRangeTypeTODO","inputRange","validRefiners","updateRefinerPanel","_shouldHideFromRefiners","activeRefiners","_getexpandRefinerCount","expandRefinersCount","expandedRefiners","RefineMenuContainer","RefinerSectionContainer","_refineItemCommonProps","_onUpdateRefiners","_buildRefinerUrl","channelInventoryConfiguration","isInventorySortableAttribute","inventoryAwareSortableAttributeId","ProductAvailabilitySortableAttributeRecordId","isInventoryProductAttribute","InventoryProductAttributeRecordId","_getChoiceSummary","_this$props$data$refi","selectedRefiners","rating","choiceSummaryLabel","_onChoiceClicked","_buildRefinerUrlForChoiceSummary","_getProducts","_this$props$slots","_this$props$data$prod5","shouldAllowBackNavigation","breadCrumbType","shouldAllowBack","isPriceMinMaxFeatureState","notification","history","pushState","buildListPageUrl","_getSortColumnFromSelectedOption","transaction","searchConfiguration","mappedConfiguration","sortColumn","_getSortCriteriaColumn","_this$props$data$list5","sortCriteria","queryColumns","parseQueryParam","mappedSearchConfiguration","mappedSearchConfig","activeSortColumn","activeMappedConfig","ColumnName","IsDescending","_this$props$data$list6","newRefinementCriteria","dropdownElementId","dropdownElement","selectedChoice","isClearAll","refinerCount","paginationPreviousText","paginationNextText","_updateViewport","validationErrorNotNumber","validationErrorNotRange","nameTranslations","_nameTranslation","nameTranslation","Language","StoreOperationsDataActions","_listPageState$active","_listPageState$sortin","_newListPageState$cur","_newListPageState$sor","_newListPageState$act","_this$props$context$r5","_this$props$context$r6","newListPageState","GetFullProductsByCollectionInput","Skip","Sorting","recordId","Recommendation","productResults","getCollectionProducts","_newListPageState$cur2","_newListPageState$sor2","_newListPageState$act2","_this$props$context$r7","_this$props$context$r8","refinerInput","RefinersByCollectionInput","getCollectionRefinersAction","_listPageState$result","_listPageState$result2","_this$props$context$r9","_this$props$data$list7","_this$props$data$list8","searchProduct","errorText","resultCategoryNotFoundText","resultSearchNotFoundText","productsComponent","featureComponent","searchResultContainerViewProps","TitleViewProps","disableHierarchy","refineMenu","sortByOptions","pagination","ProductsContainer","ProductSectionContainer","CategoryNavContainer","RefineAndProductSectionContainer","choiceSummary","modalToggle","searchResultModal","FeatureSearchContainer","similarLookProduct","_getViewport","Browser","createSearchResultModal","modalProps","isRecoSearchPage","createModalBody","renderSort","renderRefiner","submenu","renderCategoryHierarchy","renderTitle","renderTitleCount","_props$context$action","SearchState","_ctx$requestContext$a","productSearchCriteria","inventoryRefinerValue","getInventorySortableRefinerValue","isInStock","RowNumber","Attribute","getInventoryConfigurationAsync","Refinement","shouldShowFullPath","_categoryRefiners$Val","queryUrl","_item$Value","_props$resources","_isLoadingNode","loadingText","autoSuggestResultLoadingMessage","Spinner","SpinnerSize","medium","labelPosition","_loadSuggestions","_handleCancelSearchFocused","isLoadingAutoSuggest","_initSuggestionTypes","_suggestions$AllSearc","_suggestions$AllSearc2","_suggestions$AllSearc3","shouldShowFullCategoryPath","_item$RefinerRecordId","handleCancelSearchFocused","isLoadingNode","unique","validSuggestions","loadSuggestionsRequestId","Random","Guid","generateGuid","_getSearchSuggestions","_updateSearchRefiners","ProductsDataActions","SocialShareItem","_getSocialShareItem","viewprops","SocialShareItemElement","icon","socialMedia","SocialMediaComponent","SocialMedia","Facebook","postUrl","Twitter","Pinterest","Linkedin","Mail","SocialShareItemView"],"sourceRoot":""}