{"version":3,"file":"home.9ee3625190e29905ddc0.bundle.js","mappings":"gIAAA,IAAIA,EAAM,CACT,yBAA0B,KAC1B,oBAAqB,KACrB,kBAAmB,KACnB,8BAA+B,KAC/B,8BAA+B,KAC/B,+BAAgC,KAChC,iCAAkC,KAClC,kCAAmC,KACnC,yBAA0B,IAC1B,mBAAoB,KACpB,mBAAoB,KACpB,mBAAoB,KACpB,mBAAoB,KACpB,mBAAoB,KACpB,mBAAoB,KACpB,YAAa,KACb,mBAAoB,KACpB,mBAAoB,KACpB,sBAAuB,KACvB,mBAAoB,KACpB,4BAA6B,KAC7B,oBAAqB,KACrB,2BAA4B,KAC5B,mBAAoB,KACpB,eAAgB,KAChB,cAAe,KACf,wBAAyB,MAI1B,SAASC,EAAeC,GACvB,IAAIC,EAAKC,EAAsBF,GAC/B,OAAOG,EAAoBF,EAC5B,CACA,SAASC,EAAsBF,GAC9B,IAAIG,EAAoBC,EAAEN,EAAKE,GAAM,CACpC,IAAIK,EAAI,IAAIC,MAAM,uBAAyBN,EAAM,KAEjD,MADAK,EAAEE,KAAO,mBACHF,CACP,CACA,OAAOP,EAAIE,EACZ,CACAD,EAAeS,KAAO,WACrB,OAAOC,OAAOD,KAAKV,EACpB,EACAC,EAAeW,QAAUR,EACzBS,EAAOC,QAAUb,EACjBA,EAAeE,GAAK,I,mBChDgDU,EAAOC,QAAmI,WAAW,aAAa,IAAUP,EAAE,IAAIQ,EAAE,KAAKC,EAAE,cAAcC,EAAE,SAASC,EAAE,SAASC,EAAE,OAAOC,EAAE,MAAMd,EAAE,OAAOe,EAAE,QAAQC,EAAE,UAAUC,EAAE,OAAOC,EAAE,OAAOC,EAAE,eAAeC,EAAE,6FAA6FC,EAAE,sFAAsFC,EAAE,CAACC,KAAK,KAAKC,SAAS,2DAA2DC,MAAM,KAAKC,OAAO,wFAAwFD,MAAM,KAAKE,QAAQ,SAASC,GAAG,IAAI3B,EAAE,CAAC,KAAK,KAAK,KAAK,MAAMQ,EAAEmB,EAAE,IAAI,MAAM,IAAIA,GAAG3B,GAAGQ,EAAE,IAAI,KAAKR,EAAEQ,IAAIR,EAAE,IAAI,GAAG,GAAG4B,EAAE,SAASD,EAAE3B,EAAEQ,GAAG,IAAIC,EAAEoB,OAAOF,GAAG,OAAOlB,GAAGA,EAAEqB,QAAQ9B,EAAE2B,EAAE,GAAGI,MAAM/B,EAAE,EAAES,EAAEqB,QAAQE,KAAKxB,GAAGmB,CAAC,EAAEM,EAAE,CAACtB,EAAEiB,EAAEM,EAAE,SAASP,GAAG,IAAI3B,GAAG2B,EAAEQ,YAAY3B,EAAE4B,KAAKC,IAAIrC,GAAGS,EAAE2B,KAAKE,MAAM9B,EAAE,IAAIE,EAAEF,EAAE,GAAG,OAAOR,GAAG,EAAE,IAAI,KAAK4B,EAAEnB,EAAE,EAAE,KAAK,IAAImB,EAAElB,EAAE,EAAE,IAAI,EAAEkB,EAAE,SAASD,EAAE3B,EAAEQ,GAAG,GAAGR,EAAEuC,OAAO/B,EAAE+B,OAAO,OAAOZ,EAAEnB,EAAER,GAAG,IAAIS,EAAE,IAAID,EAAEgC,OAAOxC,EAAEwC,SAAShC,EAAEiC,QAAQzC,EAAEyC,SAAS/B,EAAEV,EAAE0C,QAAQC,IAAIlC,EAAEK,GAAGH,EAAEH,EAAEE,EAAE,EAAEE,EAAEZ,EAAE0C,QAAQC,IAAIlC,GAAGE,GAAG,EAAE,GAAGG,GAAG,UAAUL,GAAGD,EAAEE,IAAIC,EAAED,EAAEE,EAAEA,EAAEF,KAAK,EAAE,EAAEG,EAAE,SAASc,GAAG,OAAOA,EAAE,EAAES,KAAKQ,KAAKjB,IAAI,EAAES,KAAKE,MAAMX,EAAE,EAAEkB,EAAE,SAASlB,GAAG,MAAM,CAACN,EAAEP,EAAEM,EAAEJ,EAAE8B,EAAE/C,EAAEkB,EAAEJ,EAAEkC,EAAE9B,EAAED,EAAEJ,EAAEgB,EAAEjB,EAAEA,EAAED,EAAEsC,GAAGvC,EAAEwC,EAAElC,GAAGY,IAAIE,OAAOF,GAAG,IAAIuB,cAAcC,QAAQ,KAAK,GAAG,EAAEvC,EAAE,SAASe,GAAG,YAAO,IAASA,CAAC,GAAGyB,EAAE,KAAKL,EAAE,CAAC,EAAEA,EAAEK,GAAG/B,EAAE,IAAIwB,EAAE,iBAAiBQ,EAAE,SAAS1B,GAAG,OAAOA,aAAa2B,MAAM3B,IAAIA,EAAEkB,GAAG,EAAEC,EAAE,SAASnB,EAAE3B,EAAEQ,EAAEC,GAAG,IAAIC,EAAE,IAAIV,EAAE,OAAOoD,EAAE,GAAG,iBAAiBpD,EAAE,CAAC,IAAIW,EAAEX,EAAEkD,cAAcH,EAAEpC,KAAKD,EAAEC,GAAGH,IAAIuC,EAAEpC,GAAGH,EAAEE,EAAEC,GAAG,IAAIC,EAAEZ,EAAEwB,MAAM,KAAK,IAAId,GAAGE,EAAEkB,OAAO,EAAE,OAAOH,EAAEf,EAAE,GAAG,KAAK,CAAC,IAAIC,EAAEb,EAAEsB,KAAKyB,EAAElC,GAAGb,EAAEU,EAAEG,CAAC,CAAC,OAAOJ,GAAGC,IAAI0C,EAAE1C,GAAGA,IAAID,GAAG2C,CAAC,EAAEG,EAAE,SAAS5B,EAAE3B,GAAG,GAAGqD,EAAE1B,GAAG,OAAOA,EAAEe,QAAQ,IAAIlC,EAAE,iBAAiBR,EAAEA,EAAE,CAAC,EAAE,OAAOQ,EAAE+B,KAAKZ,EAAEnB,EAAEgD,KAAKC,UAAU,IAAIH,EAAE9C,EAAE,EAAEkD,EAAEzB,EAAEyB,EAAExC,EAAE4B,EAAEY,EAAEhD,EAAE2C,EAAEK,EAAEZ,EAAE,SAASnB,EAAE3B,GAAG,OAAOuD,EAAE5B,EAAE,CAACgC,OAAO3D,EAAE4D,GAAGC,IAAI7D,EAAE8D,GAAGC,EAAE/D,EAAEgE,GAAGC,QAAQjE,EAAEiE,SAAS,EAAE,IAAIX,EAAE,WAAW,SAASjC,EAAEM,GAAGuC,KAAKN,GAAGd,EAAEnB,EAAEgC,OAAO,MAAK,GAAIO,KAAKC,MAAMxC,GAAGuC,KAAKF,GAAGE,KAAKF,IAAIrC,EAAEoC,GAAG,CAAC,EAAEG,KAAKrB,IAAG,CAAE,CAAC,IAAIjB,EAAEP,EAAE+C,UAAU,OAAOxC,EAAEuC,MAAM,SAASxC,GAAGuC,KAAKG,GAAG,SAAS1C,GAAG,IAAI3B,EAAE2B,EAAEY,KAAK/B,EAAEmB,EAAEkC,IAAI,GAAG,OAAO7D,EAAE,OAAO,IAAIsE,KAAKC,KAAK,GAAGb,EAAE9C,EAAEZ,GAAG,OAAO,IAAIsE,KAAK,GAAGtE,aAAasE,KAAK,OAAO,IAAIA,KAAKtE,GAAG,GAAG,iBAAiBA,IAAI,MAAMwE,KAAKxE,GAAG,CAAC,IAAIS,EAAET,EAAEyE,MAAMtD,GAAG,GAAGV,EAAE,CAAC,IAAIC,EAAED,EAAE,GAAG,GAAG,EAAEE,GAAGF,EAAE,IAAI,KAAKiE,UAAU,EAAE,GAAG,OAAOlE,EAAE,IAAI8D,KAAKA,KAAKK,IAAIlE,EAAE,GAAGC,EAAED,EAAE,IAAI,EAAEA,EAAE,IAAI,EAAEA,EAAE,IAAI,EAAEA,EAAE,IAAI,EAAEE,IAAI,IAAI2D,KAAK7D,EAAE,GAAGC,EAAED,EAAE,IAAI,EAAEA,EAAE,IAAI,EAAEA,EAAE,IAAI,EAAEA,EAAE,IAAI,EAAEE,EAAE,CAAC,CAAC,OAAO,IAAI2D,KAAKtE,EAAE,CAA3X,CAA6X2B,GAAGuC,KAAKU,MAAM,EAAEhD,EAAEgD,KAAK,WAAW,IAAIjD,EAAEuC,KAAKG,GAAGH,KAAKW,GAAGlD,EAAEmD,cAAcZ,KAAKa,GAAGpD,EAAEqD,WAAWd,KAAKe,GAAGtD,EAAEuD,UAAUhB,KAAKiB,GAAGxD,EAAEyD,SAASlB,KAAKmB,GAAG1D,EAAE2D,WAAWpB,KAAKqB,GAAG5D,EAAE6D,aAAatB,KAAKuB,GAAG9D,EAAE+D,aAAaxB,KAAKyB,IAAIhE,EAAEiE,iBAAiB,EAAEhE,EAAEiE,OAAO,WAAW,OAAOnC,CAAC,EAAE9B,EAAEkE,QAAQ,WAAW,QAAQ5B,KAAKG,GAAG0B,aAAa7E,EAAE,EAAEU,EAAEoE,OAAO,SAASrE,EAAE3B,GAAG,IAAIQ,EAAE+C,EAAE5B,GAAG,OAAOuC,KAAK+B,QAAQjG,IAAIQ,GAAGA,GAAG0D,KAAKgC,MAAMlG,EAAE,EAAE4B,EAAEuE,QAAQ,SAASxE,EAAE3B,GAAG,OAAOuD,EAAE5B,GAAGuC,KAAK+B,QAAQjG,EAAE,EAAE4B,EAAEwE,SAAS,SAASzE,EAAE3B,GAAG,OAAOkE,KAAKgC,MAAMlG,GAAGuD,EAAE5B,EAAE,EAAEC,EAAEyE,GAAG,SAAS1E,EAAE3B,EAAEQ,GAAG,OAAOkD,EAAE9C,EAAEe,GAAGuC,KAAKlE,GAAGkE,KAAKoC,IAAI9F,EAAEmB,EAAE,EAAEC,EAAE2E,KAAK,WAAW,OAAOnE,KAAKE,MAAM4B,KAAKsC,UAAU,IAAI,EAAE5E,EAAE4E,QAAQ,WAAW,OAAOtC,KAAKG,GAAGoC,SAAS,EAAE7E,EAAEqE,QAAQ,SAAStE,EAAE3B,GAAG,IAAIQ,EAAE0D,KAAKzD,IAAIiD,EAAE9C,EAAEZ,IAAIA,EAAEe,EAAE2C,EAAEb,EAAElB,GAAGT,EAAE,SAASS,EAAE3B,GAAG,IAAIU,EAAEgD,EAAEZ,EAAEtC,EAAEsD,GAAGQ,KAAKK,IAAInE,EAAEqE,GAAG7E,EAAE2B,GAAG,IAAI2C,KAAK9D,EAAEqE,GAAG7E,EAAE2B,GAAGnB,GAAG,OAAOC,EAAEC,EAAEA,EAAEwF,MAAMrF,EAAE,EAAEM,EAAE,SAASQ,EAAE3B,GAAG,OAAO0D,EAAEZ,EAAEtC,EAAEkG,SAAS/E,GAAGgF,MAAMnG,EAAEkG,OAAO,MAAMjG,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,GAAG,GAAG,GAAG,MAAMmG,MAAM5G,IAAIQ,EAAE,EAAEY,EAAE8C,KAAKiB,GAAG9D,EAAE6C,KAAKa,GAAGnD,EAAEsC,KAAKe,GAAGhD,EAAE,OAAOiC,KAAKJ,GAAG,MAAM,IAAI,OAAO/C,GAAG,KAAKC,EAAE,OAAOP,EAAES,EAAE,EAAE,GAAGA,EAAE,GAAG,IAAI,KAAKJ,EAAE,OAAOL,EAAES,EAAE,EAAEG,GAAGH,EAAE,EAAEG,EAAE,GAAG,KAAKtB,EAAE,IAAIqD,EAAEc,KAAK2C,UAAUC,WAAW,EAAE/D,GAAG3B,EAAEgC,EAAEhC,EAAE,EAAEA,GAAGgC,EAAE,OAAOlC,EAAET,EAAEmB,EAAEmB,EAAEnB,GAAG,EAAEmB,GAAG1B,GAAG,KAAKR,EAAE,KAAKI,EAAE,OAAOE,EAAEc,EAAE,QAAQ,GAAG,KAAKrB,EAAE,OAAOO,EAAEc,EAAE,UAAU,GAAG,KAAKtB,EAAE,OAAOQ,EAAEc,EAAE,UAAU,GAAG,KAAKvB,EAAE,OAAOS,EAAEc,EAAE,eAAe,GAAG,QAAQ,OAAOiC,KAAKxB,QAAQ,EAAEd,EAAEsE,MAAM,SAASvE,GAAG,OAAOuC,KAAK+B,QAAQtE,GAAE,EAAG,EAAEC,EAAEmF,KAAK,SAASpF,EAAE3B,GAAG,IAAIQ,EAAET,EAAE2D,EAAEb,EAAElB,GAAGZ,EAAE,OAAOmD,KAAKJ,GAAG,MAAM,IAAI5C,GAAGV,EAAE,CAAC,EAAEA,EAAEK,GAAGE,EAAE,OAAOP,EAAES,GAAGF,EAAE,OAAOP,EAAEM,GAAGC,EAAE,QAAQP,EAAEQ,GAAGD,EAAE,WAAWP,EAAEI,GAAGG,EAAE,QAAQP,EAAEG,GAAGI,EAAE,UAAUP,EAAEE,GAAGK,EAAE,UAAUP,EAAEC,GAAGM,EAAE,eAAeP,GAAGT,GAAGoB,EAAEpB,IAAIc,EAAEqD,KAAKe,IAAIjF,EAAEkE,KAAKiB,IAAInF,EAAE,GAAGD,IAAIe,GAAGf,IAAIiB,EAAE,CAAC,IAAII,EAAE8C,KAAKxB,QAAQ4D,IAAIrF,EAAE,GAAGG,EAAEiD,GAAGnD,GAAGC,GAAGC,EAAEwD,OAAOV,KAAKG,GAAGjD,EAAEkF,IAAIrF,EAAEmB,KAAK4E,IAAI9C,KAAKe,GAAG7D,EAAE6F,gBAAgB5C,EAAE,MAAMnD,GAAGgD,KAAKG,GAAGnD,GAAGC,GAAG,OAAO+C,KAAKU,OAAOV,IAAI,EAAEtC,EAAE0E,IAAI,SAAS3E,EAAE3B,GAAG,OAAOkE,KAAKxB,QAAQqE,KAAKpF,EAAE3B,EAAE,EAAE4B,EAAEsF,IAAI,SAASvF,GAAG,OAAOuC,KAAKR,EAAEb,EAAElB,KAAK,EAAEC,EAAEe,IAAI,SAASlC,EAAEM,GAAG,IAAIE,EAAEC,EAAEgD,KAAKzD,EAAE0G,OAAO1G,GAAG,IAAIU,EAAEuC,EAAEb,EAAE9B,GAAGK,EAAE,SAASO,GAAG,IAAI3B,EAAEuD,EAAErC,GAAG,OAAOwC,EAAEZ,EAAE9C,EAAEuC,KAAKvC,EAAEuC,OAAOH,KAAKgF,MAAMzF,EAAElB,IAAIS,EAAE,EAAE,GAAGC,IAAIL,EAAE,OAAOoD,KAAKoC,IAAIxF,EAAEoD,KAAKa,GAAGtE,GAAG,GAAGU,IAAIH,EAAE,OAAOkD,KAAKoC,IAAItF,EAAEkD,KAAKW,GAAGpE,GAAG,GAAGU,IAAIN,EAAE,OAAOO,EAAE,GAAG,GAAGD,IAAIpB,EAAE,OAAOqB,EAAE,GAAG,IAAIC,GAAGJ,EAAE,CAAC,EAAEA,EAAEN,GAAGX,EAAEiB,EAAEL,GAAGJ,EAAES,EAAEP,GAA50I,IAAi1IO,GAAGE,IAAI,EAAES,EAAEsC,KAAKG,GAAGoC,UAAUhG,EAAEY,EAAE,OAAOqC,EAAEZ,EAAElB,EAAEsC,KAAK,EAAEtC,EAAEyF,SAAS,SAAS1F,EAAE3B,GAAG,OAAOkE,KAAKvB,KAAK,EAAEhB,EAAE3B,EAAE,EAAE4B,EAAE0F,OAAO,SAAS3F,GAAG,IAAI3B,EAAEkE,KAAK1D,EAAE0D,KAAK2C,UAAU,IAAI3C,KAAK4B,UAAU,OAAOtF,EAAE+G,aAAarG,EAAE,IAAIT,EAAEkB,GAAG,uBAAuBjB,EAAEgD,EAAExB,EAAEgC,MAAMvD,EAAEuD,KAAKmB,GAAGzE,EAAEsD,KAAKqB,GAAG1E,EAAEqD,KAAKa,GAAGhF,EAAES,EAAEe,SAAST,EAAEN,EAAEiB,OAAOV,EAAEP,EAAEgH,SAASxG,EAAE,SAASW,EAAEnB,EAAEE,EAAEC,GAAG,OAAOgB,IAAIA,EAAEnB,IAAImB,EAAE3B,EAAES,KAAKC,EAAEF,GAAGoG,MAAM,EAAEjG,EAAE,EAAEM,EAAE,SAASU,GAAG,OAAO+B,EAAE/C,EAAEA,EAAE,IAAI,GAAGgB,EAAE,IAAI,EAAER,EAAEJ,GAAG,SAASY,EAAE3B,EAAEQ,GAAG,IAAIC,EAAEkB,EAAE,GAAG,KAAK,KAAK,OAAOnB,EAAEC,EAAEyC,cAAczC,CAAC,EAAE,OAAOA,EAAE0C,QAAQ/B,GAAG,SAASO,EAAElB,GAAG,OAAOA,GAAG,SAASkB,GAAG,OAAOA,GAAG,IAAI,KAAK,OAAOE,OAAO7B,EAAE6E,IAAI+B,OAAO,GAAG,IAAI,OAAO,OAAOlD,EAAE/C,EAAEX,EAAE6E,GAAG,EAAE,KAAK,IAAI,IAAI,OAAOhE,EAAE,EAAE,IAAI,KAAK,OAAO6C,EAAE/C,EAAEE,EAAE,EAAE,EAAE,KAAK,IAAI,MAAM,OAAOG,EAAER,EAAEiH,YAAY5G,EAAEC,EAAE,GAAG,IAAI,OAAO,OAAOE,EAAEF,EAAED,GAAG,IAAI,IAAI,OAAOb,EAAEiF,GAAG,IAAI,KAAK,OAAOvB,EAAE/C,EAAEX,EAAEiF,GAAG,EAAE,KAAK,IAAI,IAAI,OAAOpD,OAAO7B,EAAEmF,IAAI,IAAI,KAAK,OAAOnE,EAAER,EAAEkH,YAAY1H,EAAEmF,GAAGpF,EAAE,GAAG,IAAI,MAAM,OAAOiB,EAAER,EAAEmH,cAAc3H,EAAEmF,GAAGpF,EAAE,GAAG,IAAI,OAAO,OAAOA,EAAEC,EAAEmF,IAAI,IAAI,IAAI,OAAOtD,OAAOlB,GAAG,IAAI,KAAK,OAAO+C,EAAE/C,EAAEA,EAAE,EAAE,KAAK,IAAI,IAAI,OAAOM,EAAE,GAAG,IAAI,KAAK,OAAOA,EAAE,GAAG,IAAI,IAAI,OAAOE,EAAER,EAAEC,GAAE,GAAI,IAAI,IAAI,OAAOO,EAAER,EAAEC,GAAE,GAAI,IAAI,IAAI,OAAOiB,OAAOjB,GAAG,IAAI,KAAK,OAAO8C,EAAE/C,EAAEC,EAAE,EAAE,KAAK,IAAI,IAAI,OAAOiB,OAAO7B,EAAEyF,IAAI,IAAI,KAAK,OAAO/B,EAAE/C,EAAEX,EAAEyF,GAAG,EAAE,KAAK,IAAI,MAAM,OAAO/B,EAAE/C,EAAEX,EAAE2F,IAAI,EAAE,KAAK,IAAI,IAAI,OAAOjF,EAAE,OAAO,IAAI,CAAptB,CAAstBiB,IAAIjB,EAAEyC,QAAQ,IAAI,GAAG,GAAG,EAAEvB,EAAEO,UAAU,WAAW,OAAO,IAAIC,KAAKgF,MAAMlD,KAAKG,GAAGuD,oBAAoB,GAAG,EAAEhG,EAAEiG,KAAK,SAASpH,EAAEQ,EAAEC,GAAG,IAAIC,EAAEC,EAAE8C,KAAK7C,EAAEqC,EAAEb,EAAE5B,GAAGW,EAAE2B,EAAE9C,GAAGwB,GAAGL,EAAEO,YAAY+B,KAAK/B,aAAanC,EAAEoD,EAAEc,KAAKtC,EAAEmB,EAAE,WAAW,OAAOW,EAAE9B,EAAER,EAAEQ,EAAE,EAAE,OAAOP,GAAG,KAAKL,EAAEG,EAAE4B,IAAI,GAAG,MAAM,KAAKjC,EAAEK,EAAE4B,IAAI,MAAM,KAAKhC,EAAEI,EAAE4B,IAAI,EAAE,MAAM,KAAKhD,EAAEoB,GAAGiC,EAAEnB,GAAG,OAAO,MAAM,KAAKpB,EAAEM,GAAGiC,EAAEnB,GAAG,MAAM,MAAM,KAAKrB,EAAEO,EAAEiC,EAAE5C,EAAE,MAAM,KAAKG,EAAEQ,EAAEiC,EAAEpD,EAAE,MAAM,KAAKU,EAAES,EAAEiC,EAA18L,IAA88L,MAAM,QAAQjC,EAAEiC,EAAE,OAAOlC,EAAEC,EAAEuC,EAAE7C,EAAEM,EAAE,EAAES,EAAEqF,YAAY,WAAW,OAAO/C,KAAKgC,MAAMpF,GAAGmE,EAAE,EAAErD,EAAEiF,QAAQ,WAAW,OAAO9D,EAAEmB,KAAKN,GAAG,EAAEhC,EAAE+B,OAAO,SAAShC,EAAE3B,GAAG,IAAI2B,EAAE,OAAOuC,KAAKN,GAAG,IAAIpD,EAAE0D,KAAKxB,QAAQjC,EAAEqC,EAAEnB,EAAE3B,GAAE,GAAI,OAAOS,IAAID,EAAEoD,GAAGnD,GAAGD,CAAC,EAAEoB,EAAEc,MAAM,WAAW,OAAOgB,EAAEZ,EAAEoB,KAAKG,GAAGH,KAAK,EAAEtC,EAAE8E,OAAO,WAAW,OAAO,IAAIpC,KAAKJ,KAAKsC,UAAU,EAAE5E,EAAEkG,OAAO,WAAW,OAAO5D,KAAK4B,UAAU5B,KAAK6D,cAAc,IAAI,EAAEnG,EAAEmG,YAAY,WAAW,OAAO7D,KAAKG,GAAG0D,aAAa,EAAEnG,EAAEmE,SAAS,WAAW,OAAO7B,KAAKG,GAAG2D,aAAa,EAAE3G,CAAC,CAA/sJ,GAAmtJ4G,EAAE3E,EAAEc,UAAU,OAAOb,EAAEa,UAAU6D,EAAE,CAAC,CAAC,MAAMxH,GAAG,CAAC,KAAKC,GAAG,CAAC,KAAKC,GAAG,CAAC,KAAKC,GAAG,CAAC,KAAKC,GAAG,CAAC,KAAKC,GAAG,CAAC,KAAKE,GAAG,CAAC,KAAKC,IAAIiH,SAAS,SAASvG,GAAGsG,EAAEtG,EAAE,IAAI,SAAS3B,GAAG,OAAOkE,KAAKmC,GAAGrG,EAAE2B,EAAE,GAAGA,EAAE,GAAG,CAAC,IAAI4B,EAAE4E,OAAO,SAASxG,EAAE3B,GAAG,OAAO2B,EAAEyG,KAAKzG,EAAE3B,EAAEsD,EAAEC,GAAG5B,EAAEyG,IAAG,GAAI7E,CAAC,EAAEA,EAAEI,OAAOb,EAAES,EAAE8E,QAAQhF,EAAEE,EAAEgD,KAAK,SAAS5E,GAAG,OAAO4B,EAAE,IAAI5B,EAAE,EAAE4B,EAAE+E,GAAGvF,EAAEK,GAAGG,EAAEgF,GAAGxF,EAAEQ,EAAEV,EAAE,CAAC,EAAEU,CAAC,CAAj6NvD,E,mBCAfM,EAAOC,QAA4J,WAAW,aAAa,IAAIP,EAAE,CAACwI,IAAI,YAAYC,GAAG,SAASC,EAAE,aAAaC,GAAG,eAAeC,IAAI,sBAAsBC,KAAK,6BAA6BlH,EAAE,0FAA0FnB,EAAE,OAAOC,EAAE,QAAQC,EAAE,qBAAqBX,EAAE,CAAC,EAAEY,EAAE,SAASX,GAAG,OAAOA,GAAGA,IAAIA,EAAE,GAAG,KAAK,IAAI,EAAMa,EAAE,SAASb,GAAG,OAAO,SAAS2B,GAAGuC,KAAKlE,IAAI2B,CAAC,CAAC,EAAEZ,EAAE,CAAC,sBAAsB,SAASf,IAAIkE,KAAK4E,OAAO5E,KAAK4E,KAAK,CAAC,IAAIC,OAAO,SAAS/I,GAAG,IAAIA,EAAE,OAAO,EAAE,GAAG,MAAMA,EAAE,OAAO,EAAE,IAAI2B,EAAE3B,EAAEyE,MAAM,gBAAgBjE,EAAE,GAAGmB,EAAE,KAAKA,EAAE,IAAI,GAAG,OAAO,IAAInB,EAAE,EAAE,MAAMmB,EAAE,IAAInB,EAAEA,CAAC,CAAhI,CAAkIR,EAAE,GAAGgB,EAAE,SAAShB,GAAG,IAAI2B,EAAE5B,EAAEC,GAAG,OAAO2B,IAAIA,EAAEqH,QAAQrH,EAAEA,EAAEhB,EAAEsI,OAAOtH,EAAEZ,GAAG,EAAEH,EAAE,SAASZ,EAAE2B,GAAG,IAAInB,EAAEC,EAAEV,EAAEyH,SAAS,GAAG/G,GAAG,IAAI,IAAIC,EAAE,EAAEA,GAAG,GAAGA,GAAG,EAAE,GAAGV,EAAEgJ,QAAQvI,EAAEC,EAAE,EAAEiB,KAAK,EAAE,CAACnB,EAAEE,EAAE,GAAG,KAAK,OAAOF,EAAER,KAAK2B,EAAE,KAAK,MAAM,OAAOnB,CAAC,EAAES,EAAE,CAACiI,EAAE,CAACxI,EAAE,SAASV,GAAGkE,KAAKiF,UAAUvI,EAAEZ,GAAE,EAAG,GAAGa,EAAE,CAACH,EAAE,SAASV,GAAGkE,KAAKiF,UAAUvI,EAAEZ,GAAE,EAAG,GAAGqD,EAAE,CAAC,KAAK,SAASrD,GAAGkE,KAAKkF,aAAa,KAAKpJ,CAAC,GAAGqJ,GAAG,CAAC7I,EAAE,SAASR,GAAGkE,KAAKkF,aAAa,IAAIpJ,CAAC,GAAGsJ,IAAI,CAAC,QAAQ,SAAStJ,GAAGkE,KAAKkF,cAAcpJ,CAAC,GAAGW,EAAE,CAACF,EAAEI,EAAE,YAAY0I,GAAG,CAAC9I,EAAEI,EAAE,YAAYe,EAAE,CAACnB,EAAEI,EAAE,YAAY2I,GAAG,CAAC/I,EAAEI,EAAE,YAAY4I,EAAE,CAAChJ,EAAEI,EAAE,UAAUG,EAAE,CAACP,EAAEI,EAAE,UAAU6I,GAAG,CAACjJ,EAAEI,EAAE,UAAU8I,GAAG,CAAClJ,EAAEI,EAAE,UAAUkC,EAAE,CAACtC,EAAEI,EAAE,QAAQ+I,GAAG,CAACpJ,EAAEK,EAAE,QAAQgJ,GAAG,CAACnJ,EAAE,SAASV,GAAG,IAAI2B,EAAE5B,EAAE2B,QAAQlB,EAAER,EAAEyE,MAAM,OAAO,GAAGP,KAAK4F,IAAItJ,EAAE,GAAGmB,EAAE,IAAI,IAAIlB,EAAE,EAAEA,GAAG,GAAGA,GAAG,EAAEkB,EAAElB,GAAG0C,QAAQ,SAAS,MAAMnD,IAAIkE,KAAK4F,IAAIrJ,EAAE,GAAGY,EAAE,CAACZ,EAAEI,EAAE,UAAUkJ,GAAG,CAACvJ,EAAEK,EAAE,UAAUmJ,IAAI,CAACtJ,EAAE,SAASV,GAAG,IAAI2B,EAAEX,EAAE,UAAUR,GAAGQ,EAAE,gBAAgBW,EAAElC,KAAK,SAASO,GAAG,OAAOA,EAAE4G,MAAM,EAAE,EAAE,KAAKoC,QAAQhJ,GAAG,EAAE,GAAGQ,EAAE,EAAE,MAAM,IAAIP,MAAMiE,KAAKzB,MAAMjC,EAAE,IAAIA,CAAC,GAAGyJ,KAAK,CAACvJ,EAAE,SAASV,GAAG,IAAI2B,EAAEX,EAAE,UAAUgI,QAAQhJ,GAAG,EAAE,GAAG2B,EAAE,EAAE,MAAM,IAAI1B,MAAMiE,KAAKzB,MAAMd,EAAE,IAAIA,CAAC,GAAGuI,EAAE,CAAC,WAAWrJ,EAAE,SAASsJ,GAAG,CAAC3J,EAAE,SAASR,GAAGkE,KAAK1B,KAAK7B,EAAEX,EAAE,GAAGoK,KAAK,CAAC,QAAQvJ,EAAE,SAASwJ,EAAEtJ,EAAEuJ,GAAGvJ,GAAG,SAASD,EAAEN,GAAG,IAAIC,EAAEC,EAAED,EAAED,EAAEE,EAAEX,GAAGA,EAAEwK,QAAQ,IAAI,IAAI5J,GAAGH,EAAEC,EAAE0C,QAAQ,qCAAqC,SAASxB,EAAEnB,EAAEC,GAAG,IAAIV,EAAEU,GAAGA,EAAE+J,cAAc,OAAOhK,GAAGE,EAAED,IAAIT,EAAES,IAAIC,EAAEX,GAAGoD,QAAQ,kCAAkC,SAASnD,EAAE2B,EAAEnB,GAAG,OAAOmB,GAAGnB,EAAEoG,MAAM,EAAE,GAAG,KAAKnC,MAAM9C,GAAGd,EAAEF,EAAEmB,OAAOf,EAAE,EAAEA,EAAEF,EAAEE,GAAG,EAAE,CAAC,IAAIC,EAAEL,EAAEI,GAAGH,EAAEK,EAAED,GAAGF,EAAEF,GAAGA,EAAE,GAAGM,EAAEN,GAAGA,EAAE,GAAGD,EAAEI,GAAGG,EAAE,CAACuJ,MAAM3J,EAAE4J,OAAOxJ,GAAGF,EAAEmC,QAAQ,WAAW,GAAG,CAAC,OAAO,SAASnD,GAAG,IAAI,IAAI2B,EAAE,CAAC,EAAEnB,EAAE,EAAEC,EAAE,EAAED,EAAEK,EAAEL,GAAG,EAAE,CAAC,IAAIE,EAAEC,EAAEH,GAAG,GAAG,iBAAiBE,EAAED,GAAGC,EAAEoB,WAAW,CAAC,IAAI/B,EAAEW,EAAE+J,MAAM1J,EAAEL,EAAEgK,OAAO1J,EAAEhB,EAAE4G,MAAMnG,GAAGG,EAAEb,EAAE4K,KAAK3J,GAAG,GAAGD,EAAE6J,KAAKjJ,EAAEf,GAAGZ,EAAEA,EAAEmD,QAAQvC,EAAE,GAAG,CAAC,CAAC,OAAO,SAASZ,GAAG,IAAI2B,EAAE3B,EAAEmJ,UAAU,QAAG,IAASxH,EAAE,CAAC,IAAInB,EAAER,EAAE6K,MAAMlJ,EAAEnB,EAAE,KAAKR,EAAE6K,OAAO,IAAI,KAAKrK,IAAIR,EAAE6K,MAAM,UAAU7K,EAAEmJ,SAAS,CAAC,CAAxH,CAA0HxH,GAAGA,CAAC,CAAC,CAAC,OAAO,SAAS3B,EAAE2B,EAAEnB,GAAGA,EAAEqC,EAAEiI,mBAAkB,EAAG9K,GAAGA,EAAE+K,oBAAoBpK,EAAEX,EAAE+K,mBAAmB,IAAItK,EAAEkB,EAAEyC,UAAU1D,EAAED,EAAE0D,MAAM1D,EAAE0D,MAAM,SAASnE,GAAG,IAAI2B,EAAE3B,EAAEuC,KAAK9B,EAAET,EAAE6D,IAAIlD,EAAEX,EAAEwD,KAAKU,KAAKJ,GAAGrD,EAAE,IAAII,EAAEF,EAAE,GAAG,GAAG,iBAAiBE,EAAE,CAAC,IAAIE,GAAE,IAAKJ,EAAE,GAAGK,GAAE,IAAKL,EAAE,GAAGC,EAAEG,GAAGC,EAAEC,EAAEN,EAAE,GAAGK,IAAIC,EAAEN,EAAE,IAAIZ,EAAEmE,KAAK2C,WAAW9F,GAAGE,IAAIlB,EAAES,EAAE+H,GAAGtH,IAAIiD,KAAKG,GAAG,SAASrE,EAAE2B,EAAEnB,GAAG,IAAI,GAAG,CAAC,IAAI,KAAKwI,QAAQrH,IAAI,EAAE,OAAO,IAAI2C,MAAM,MAAM3C,EAAE,IAAI,GAAG3B,GAAG,IAAIS,EAAEK,EAAEa,EAAFb,CAAKd,GAAGU,EAAED,EAAE+B,KAAKzC,EAAEU,EAAEgC,MAAM9B,EAAEF,EAAEqJ,IAAIjJ,EAAEJ,EAAEoK,MAAM9J,EAAEN,EAAEuK,QAAQhK,EAAEP,EAAEwK,QAAQrK,EAAEH,EAAE2I,aAAanI,EAAER,EAAEqI,KAAK5H,EAAE,IAAIoD,KAAK1C,EAAEjB,IAAID,GAAGX,EAAE,EAAEmB,EAAEgE,WAAW7D,EAAEX,GAAGQ,EAAE4D,cAAcoF,EAAE,EAAExJ,IAAIX,IAAImK,EAAEnK,EAAE,EAAEA,EAAE,EAAEmB,EAAE8D,YAAY,IAAInC,EAAEhC,GAAG,EAAEoB,EAAElB,GAAG,EAAEgC,EAAE/B,GAAG,EAAEoC,EAAExC,GAAG,EAAE,OAAOK,EAAE,IAAIqD,KAAKA,KAAKK,IAAItD,EAAE6I,EAAEtI,EAAEiB,EAAEZ,EAAEc,EAAEK,EAAE,GAAGnC,EAAE8H,OAAO,MAAMvI,EAAE,IAAI8D,KAAKA,KAAKK,IAAItD,EAAE6I,EAAEtI,EAAEiB,EAAEZ,EAAEc,EAAEK,IAAI,IAAIkB,KAAKjD,EAAE6I,EAAEtI,EAAEiB,EAAEZ,EAAEc,EAAEK,EAAE,CAAC,MAAMpD,GAAG,OAAO,IAAIsE,KAAK,GAAG,CAAC,CAAzc,CAA2c3C,EAAEd,EAAEJ,GAAGyD,KAAKU,OAAO3D,IAAG,IAAKA,IAAIiD,KAAKN,GAAGM,KAAKP,OAAO1C,GAAG2C,IAAIhD,GAAGe,GAAGuC,KAAKoD,OAAOzG,KAAKqD,KAAKG,GAAG,IAAIC,KAAK,KAAKvE,EAAE,CAAC,CAAC,MAAM,GAAGc,aAAakB,MAAM,IAAI,IAAIb,EAAEL,EAAEiB,OAAOF,EAAE,EAAEA,GAAGV,EAAEU,GAAG,EAAE,CAACjB,EAAE,GAAGE,EAAEe,EAAE,GAAG,IAAIP,EAAEb,EAAEmG,MAAMzC,KAAKvD,GAAG,GAAGU,EAAEyE,UAAU,CAAC5B,KAAKG,GAAGhD,EAAEgD,GAAGH,KAAKN,GAAGvC,EAAEuC,GAAGM,KAAKU,OAAO,KAAK,CAAChD,IAAIV,IAAIgD,KAAKG,GAAG,IAAIC,KAAK,IAAI,MAAM5D,EAAEkK,KAAK1G,KAAKlE,EAAE,CAAC,CAAC,CAA3kH2B,E,mBCAfrB,EAAOC,QAAmJ,WAAW,aAAa,IAAIoB,EAAEhB,EAAEH,EAAE,IAAIE,EAAE,IAAIV,EAAE,KAAKS,EAAE,MAAMV,EAAE,sFAAsFa,EAAE,QAAQK,EAAE,OAAOJ,EAAE,sKAAsKG,EAAE,CAACkK,MAAMtK,EAAEa,OAAOR,EAAEkK,KAAK1K,EAAEoK,MAAM7K,EAAEgL,QAAQtK,EAAEuK,QAAQzK,EAAE4I,aAAa,EAAEgC,MAAM,QAAQtK,EAAE,SAASa,GAAG,OAAOA,aAAayB,CAAC,EAAErC,EAAE,SAASY,EAAEhB,EAAEH,GAAG,OAAO,IAAI4C,EAAEzB,EAAEnB,EAAEG,EAAE0K,GAAG,EAAEzJ,EAAE,SAASD,GAAG,OAAOhB,EAAEkC,EAAElB,GAAG,GAAG,EAAET,EAAE,SAASS,GAAG,OAAOA,EAAE,CAAC,EAAER,EAAE,SAASQ,GAAG,OAAOT,EAAES,GAAGS,KAAKQ,KAAKjB,GAAGS,KAAKE,MAAMX,EAAE,EAAEP,EAAE,SAASO,GAAG,OAAOS,KAAKC,IAAIV,EAAE,EAAEM,EAAE,SAASN,EAAEhB,GAAG,OAAOgB,EAAET,EAAES,GAAG,CAAC2J,UAAS,EAAGhE,OAAO,GAAGlG,EAAEO,GAAGhB,GAAG,CAAC2K,UAAS,EAAGhE,OAAO,GAAG3F,EAAEhB,GAAG,CAAC2K,UAAS,EAAGhE,OAAO,GAAG,EAAElE,EAAE,WAAW,SAASlC,EAAES,EAAEhB,EAAEH,GAAG,IAAIE,EAAEwD,KAAK,GAAGA,KAAKG,GAAG,CAAC,EAAEH,KAAKmH,GAAG7K,OAAE,IAASmB,IAAIuC,KAAKyB,IAAI,EAAEzB,KAAKqH,yBAAyB5K,EAAE,OAAOI,EAAEY,EAAEX,EAAEY,EAAEjB,IAAIuD,MAAM,GAAG,iBAAiBvC,EAAE,OAAOuC,KAAKyB,IAAIhE,EAAEuC,KAAKqH,wBAAwBrH,KAAK,GAAG,iBAAiBvC,EAAE,OAAOvB,OAAOD,KAAKwB,GAAGuG,SAAS,SAASvH,GAAGD,EAAE2D,GAAGzC,EAAEjB,IAAIgB,EAAEhB,EAAE,IAAIuD,KAAKsH,kBAAkBtH,KAAK,GAAG,iBAAiBvC,EAAE,CAAC,IAAI3B,EAAE2B,EAAE8C,MAAM5D,GAAG,GAAGb,EAAE,CAAC,IAAIS,EAAET,EAAE4G,MAAM,GAAGnH,KAAK,SAASkC,GAAG,OAAO,MAAMA,EAAEwF,OAAOxF,GAAG,CAAC,IAAI,OAAOuC,KAAKG,GAAG6G,MAAMzK,EAAE,GAAGyD,KAAKG,GAAG5C,OAAOhB,EAAE,GAAGyD,KAAKG,GAAG+G,MAAM3K,EAAE,GAAGyD,KAAKG,GAAG8G,KAAK1K,EAAE,GAAGyD,KAAKG,GAAGwG,MAAMpK,EAAE,GAAGyD,KAAKG,GAAG2G,QAAQvK,EAAE,GAAGyD,KAAKG,GAAG4G,QAAQxK,EAAE,GAAGyD,KAAKsH,kBAAkBtH,IAAI,CAAC,CAAC,OAAOA,IAAI,CAAC,IAAI9C,EAAEF,EAAEkD,UAAU,OAAOhD,EAAEoK,gBAAgB,WAAW,IAAI7J,EAAEuC,KAAKA,KAAKyB,IAAIvF,OAAOD,KAAK+D,KAAKG,IAAIoH,QAAQ,SAAS9K,EAAEH,GAAG,OAAOG,GAAGgB,EAAE0C,GAAG7D,IAAI,GAAGQ,EAAER,EAAE,GAAG,EAAE,EAAEY,EAAEmK,sBAAsB,WAAW,IAAI5J,EAAEuC,KAAKyB,IAAIzB,KAAKG,GAAG6G,MAAM/J,EAAEQ,EAAEf,GAAGe,GAAGf,EAAEsD,KAAKG,GAAG5C,OAAON,EAAEQ,EAAEV,GAAGU,GAAGV,EAAEiD,KAAKG,GAAG8G,KAAKhK,EAAEQ,EAAElB,GAAGkB,GAAGlB,EAAEyD,KAAKG,GAAGwG,MAAM1J,EAAEQ,EAAE3B,GAAG2B,GAAG3B,EAAEkE,KAAKG,GAAG2G,QAAQ7J,EAAEQ,EAAEjB,GAAGiB,GAAGjB,EAAEwD,KAAKG,GAAG4G,QAAQ9J,EAAEQ,EAAEnB,GAAGmB,GAAGnB,EAAE0D,KAAKG,GAAG+E,aAAazH,CAAC,EAAEP,EAAE2G,YAAY,WAAW,IAAIpG,EAAEM,EAAEiC,KAAKG,GAAG6G,MAAM,KAAKvK,EAAEsB,EAAEiC,KAAKG,GAAG5C,OAAO,KAAKjB,GAAG0D,KAAKG,GAAG8G,MAAM,EAAEjH,KAAKG,GAAG+G,QAAQ5K,GAAG,EAAE0D,KAAKG,GAAG+G,OAAO,IAAI1K,EAAEuB,EAAEzB,EAAE,KAAKR,EAAEiC,EAAEiC,KAAKG,GAAGwG,MAAM,KAAKpK,EAAEwB,EAAEiC,KAAKG,GAAG2G,QAAQ,KAAKjL,EAAEmE,KAAKG,GAAG4G,SAAS,EAAE/G,KAAKG,GAAG+E,eAAerJ,GAAGmE,KAAKG,GAAG+E,aAAa,IAAIrJ,EAAEqC,KAAKgF,MAAM,IAAIrH,GAAG,KAAK,IAAIa,EAAEqB,EAAElC,EAAE,KAAKkB,EAAEU,EAAE2J,UAAU3K,EAAE2K,UAAU5K,EAAE4K,UAAUtL,EAAEsL,UAAU7K,EAAE6K,UAAU1K,EAAE0K,SAASzK,EAAEb,EAAEsH,QAAQ7G,EAAE6G,QAAQ1G,EAAE0G,OAAO,IAAI,GAAGtG,GAAGC,EAAE,IAAI,IAAI,IAAIU,EAAE2F,OAAO3G,EAAE2G,OAAO5G,EAAE4G,OAAOzG,EAAEb,EAAEsH,OAAO7G,EAAE6G,OAAO1G,EAAE0G,OAAO,MAAM,MAAMtG,GAAG,OAAOA,EAAE,MAAMA,CAAC,EAAEI,EAAE0G,OAAO,WAAW,OAAO5D,KAAK6D,aAAa,EAAE3G,EAAEkG,OAAO,SAAS3F,GAAG,IAAInB,EAAEmB,GAAG,sBAAsBjB,EAAE,CAACwJ,EAAEhG,KAAKG,GAAG6G,MAAMf,GAAGxJ,EAAEA,EAAEuD,KAAKG,GAAG6G,MAAM,EAAE,KAAKd,KAAKzJ,EAAEA,EAAEuD,KAAKG,GAAG6G,MAAM,EAAE,KAAK7J,EAAE6C,KAAKG,GAAG5C,OAAOsI,GAAGpJ,EAAEA,EAAEuD,KAAKG,GAAG5C,OAAO,EAAE,KAAKsB,EAAEmB,KAAKG,GAAG8G,KAAKvB,GAAGjJ,EAAEA,EAAEuD,KAAKG,GAAG8G,KAAK,EAAE,KAAK1B,EAAEvF,KAAKG,GAAGwG,MAAMnB,GAAG/I,EAAEA,EAAEuD,KAAKG,GAAGwG,MAAM,EAAE,KAAKjJ,EAAEsC,KAAKG,GAAG2G,QAAQxB,GAAG7I,EAAEA,EAAEuD,KAAKG,GAAG2G,QAAQ,EAAE,KAAKrK,EAAEuD,KAAKG,GAAG4G,QAAQ1B,GAAG5I,EAAEA,EAAEuD,KAAKG,GAAG4G,QAAQ,EAAE,KAAK3B,IAAI3I,EAAEA,EAAEuD,KAAKG,GAAG+E,aAAa,EAAE,MAAM,OAAO5I,EAAE2C,QAAQpD,GAAG,SAAS4B,EAAEhB,GAAG,OAAOA,GAAGkB,OAAOnB,EAAEiB,GAAG,GAAG,EAAEP,EAAEsK,GAAG,SAAS/J,GAAG,OAAOuC,KAAKyB,IAAI3E,EAAEY,EAAED,GAAG,EAAEP,EAAE8F,IAAI,SAASvF,GAAG,IAAIhB,EAAEuD,KAAKyB,IAAInF,EAAEoB,EAAED,GAAG,MAAM,iBAAiBnB,EAAEG,GAAG,IAAIA,EAAE,UAAUH,EAAEW,EAAER,EAAEK,EAAER,IAAI0D,KAAKG,GAAG7D,GAAGG,GAAG,CAAC,EAAES,EAAEuB,IAAI,SAAShB,EAAEhB,EAAEH,GAAG,IAAIE,EAAE,OAAOA,EAAEC,EAAEgB,EAAEX,EAAEY,EAAEjB,IAAIG,EAAEa,GAAGA,EAAEgE,IAAI5E,EAAEY,EAAEuC,MAAMyB,IAAI5E,EAAEmD,KAAKyB,IAAIjF,GAAGF,GAAG,EAAE,GAAG0D,KAAK,EAAE9C,EAAEiG,SAAS,SAAS1F,EAAEhB,GAAG,OAAOuD,KAAKvB,IAAIhB,EAAEhB,GAAE,EAAG,EAAES,EAAEuC,OAAO,SAAShC,GAAG,IAAIhB,EAAEuD,KAAKxB,QAAQ,OAAO/B,EAAE0K,GAAG1J,EAAEhB,CAAC,EAAES,EAAEsB,MAAM,WAAW,OAAO3B,EAAEmD,KAAKyB,IAAIzB,KAAK,EAAE9C,EAAEuK,SAAS,SAAShL,GAAG,OAAOgB,IAAIgB,IAAIuB,KAAKyB,IAAI,MAAMhC,OAAOO,KAAKmH,IAAIO,SAASjL,EAAE,EAAES,EAAEoF,QAAQ,WAAW,OAAOtC,KAAK2H,gBAAgB,EAAEzK,EAAEgI,aAAa,WAAW,OAAOlF,KAAKgD,IAAI,eAAe,EAAE9F,EAAEyK,eAAe,WAAW,OAAO3H,KAAKwH,GAAG,eAAe,EAAEtK,EAAE6J,QAAQ,WAAW,OAAO/G,KAAKgD,IAAI,UAAU,EAAE9F,EAAE0K,UAAU,WAAW,OAAO5H,KAAKwH,GAAG,UAAU,EAAEtK,EAAE4J,QAAQ,WAAW,OAAO9G,KAAKgD,IAAI,UAAU,EAAE9F,EAAE2K,UAAU,WAAW,OAAO7H,KAAKwH,GAAG,UAAU,EAAEtK,EAAEyJ,MAAM,WAAW,OAAO3G,KAAKgD,IAAI,QAAQ,EAAE9F,EAAE4K,QAAQ,WAAW,OAAO9H,KAAKwH,GAAG,QAAQ,EAAEtK,EAAE+J,KAAK,WAAW,OAAOjH,KAAKgD,IAAI,OAAO,EAAE9F,EAAE6K,OAAO,WAAW,OAAO/H,KAAKwH,GAAG,OAAO,EAAEtK,EAAEgK,MAAM,WAAW,OAAOlH,KAAKgD,IAAI,QAAQ,EAAE9F,EAAE8K,QAAQ,WAAW,OAAOhI,KAAKwH,GAAG,QAAQ,EAAEtK,EAAEK,OAAO,WAAW,OAAOyC,KAAKgD,IAAI,SAAS,EAAE9F,EAAE+K,SAAS,WAAW,OAAOjI,KAAKwH,GAAG,SAAS,EAAEtK,EAAE8J,MAAM,WAAW,OAAOhH,KAAKgD,IAAI,QAAQ,EAAE9F,EAAEgL,QAAQ,WAAW,OAAOlI,KAAKwH,GAAG,QAAQ,EAAExK,CAAC,CAAtxG,GAA0xG2B,EAAE,SAASlB,EAAEhB,EAAEH,GAAG,OAAOmB,EAAEgB,IAAIhC,EAAEuK,QAAQ1K,EAAE,KAAKmC,IAAIhC,EAAEc,SAASjB,EAAE,KAAKmC,IAAIhC,EAAEwK,OAAO3K,EAAE,KAAKmC,IAAIhC,EAAEkK,QAAQrK,EAAE,KAAKmC,IAAIhC,EAAEqK,UAAUxK,EAAE,KAAKmC,IAAIhC,EAAEsK,UAAUzK,EAAE,KAAKmC,IAAIhC,EAAEyI,eAAe5I,EAAE,KAAK,EAAE,OAAO,SAASA,EAAEE,EAAEV,GAAG2B,EAAE3B,EAAEW,EAAEX,IAAI6F,SAAS7F,EAAEqM,SAAS,SAAS1K,EAAEhB,GAAG,IAAIH,EAAER,EAAE2D,SAAS,OAAO5C,EAAEY,EAAE,CAAC0J,GAAG7K,GAAGG,EAAE,EAAEX,EAAEsM,WAAWxL,EAAE,IAAIL,EAAEC,EAAE0D,UAAUzB,IAAI5C,EAAEW,EAAE0D,UAAUiD,SAAS3G,EAAE0D,UAAUzB,IAAI,SAAShB,EAAEhB,GAAG,OAAOG,EAAEa,GAAGkB,EAAEqB,KAAKvC,EAAE,GAAGlB,EAAE8L,KAAKrI,KAAPzD,CAAakB,EAAEhB,EAAE,EAAED,EAAE0D,UAAUiD,SAAS,SAAS1F,EAAEhB,GAAG,OAAOG,EAAEa,GAAGkB,EAAEqB,KAAKvC,GAAG,GAAG5B,EAAEwM,KAAKrI,KAAPnE,CAAa4B,EAAEhB,EAAE,CAAC,CAAC,CAAtpJA,E,8BCOnF,IAAI6L,EAAe,WAAc,SAASC,EAAiBC,EAAQC,GAAS,IAAK,IAAIjM,EAAI,EAAGA,EAAIiM,EAAM7K,OAAQpB,IAAK,CAAE,IAAIkM,EAAaD,EAAMjM,GAAIkM,EAAWC,WAAaD,EAAWC,aAAc,EAAOD,EAAWE,cAAe,EAAU,UAAWF,IAAYA,EAAWG,UAAW,GAAM3M,OAAO4M,eAAeN,EAAQE,EAAWK,IAAKL,EAAa,CAAE,CAAE,OAAO,SAAUM,EAAaC,EAAYC,GAAiJ,OAA9HD,GAAYV,EAAiBS,EAAY9I,UAAW+I,GAAiBC,GAAaX,EAAiBS,EAAaE,GAAqBF,CAAa,CAAG,CAA7hB,GAEfG,EAASC,EAAQ,MAEjBC,EAAUC,EAAuBH,GAIjCI,EAAcD,EAFDF,EAAQ,OAIrBI,EAASJ,EAAQ,MAIjBK,EAAiBH,EAFDF,EAAQ,OAMxBM,EAAaJ,EAFDF,EAAQ,MAMpBO,EAAaL,EAFDF,EAAQ,OAIxB,SAASE,EAAuBM,GAAO,OAAOA,GAAOA,EAAIC,WAAaD,EAAM,CAAEE,QAASF,EAAO,CAW9F,IAQIG,EAAc,yBACdC,EAAY,GACZC,EAAU,GAGVC,GAAwB,EAC5B,IACE,IAAIC,EAAOjO,OAAO4M,eAAe,CAAC,EAAG,UAAW,CAC9C9F,IAAK,WACHkH,GAAwB,CAC1B,IAEFE,OAAOC,iBAAiB,OAAQ,KAAMF,EACxC,CAAE,MAAOrO,GAAI,CAGb,IAAIwO,IAAeJ,GAAwB,CAAEK,SAAS,EAAOC,SAAS,GAwGlEC,EAAe,SAAsBC,GACvC,IAAIC,EAAOD,EAAUE,IACrB,GAAMD,aAAgBE,YAAtB,CAIA,IAAIC,GAAS,EAAIrB,EAAeK,SAASa,GAErCI,EADaL,EAAUjC,MAAMuC,UAAYF,IAAWH,EAAKM,eAAiBH,IAAWI,UAAYJ,IAAWI,SAASC,gBAvGhG,SAA8BT,EAAWI,GAClE,IAAIH,EAAOD,EAAUE,IAEjBQ,OAAY,EACZC,OAAa,EACbC,OAAe,EACfC,OAAc,EAElB,IACE,IAAIC,EAAwBV,EAAOW,wBAEnCL,EAAYI,EAAsBE,IAClCL,EAAaG,EAAsBG,KACnCL,EAAeE,EAAsBI,OACrCL,EAAcC,EAAsBK,KACtC,CAAE,MAAO/P,GACPsP,EA/CG,EAgDHC,EA7CI,EA8CJC,EA5CM,EA6CNC,EA9CK,CA+CP,CAEA,IAAIO,EAAoB1B,OAAO2B,aAAeb,SAASC,gBAAgBa,aACnEC,EAAmB7B,OAAO8B,YAAchB,SAASC,gBAAgBgB,YAGjEC,EAAkBlO,KAAKmO,IAAIjB,EAAW,GACtCkB,EAAmBpO,KAAKmO,IAAIhB,EAAY,GACxCkB,EAAqBrO,KAAK4E,IAAIgJ,EAAmBV,EAAYE,GAAgBc,EAC7EI,EAAoBtO,KAAK4E,IAAImJ,EAAkBZ,EAAaE,GAAee,EAG3EZ,OAAM,EACNC,OAAO,EACPC,OAAS,EACTC,OAAQ,EAEZ,IACE,IAAIY,EAAwB9B,EAAKc,wBAEjCC,EAAMe,EAAsBf,IAC5BC,EAAOc,EAAsBd,KAC7BC,EAASa,EAAsBb,OAC/BC,EAAQY,EAAsBZ,KAChC,CAAE,MAAO/P,GACP4P,EA5EG,EA6EHC,EA1EI,EA2EJC,EAzEM,EA0ENC,EA3EK,CA4EP,CAEA,IAAIa,EAAYhB,EAAMU,EAClBO,EAAahB,EAAOW,EAEpBM,EAAU/O,MAAMgP,QAAQnC,EAAUjC,MAAM5D,QAAU6F,EAAUjC,MAAM5D,OAAS,CAAC6F,EAAUjC,MAAM5D,OAAQ6F,EAAUjC,MAAM5D,QAExH,OAAO6H,EAAYE,EAAQ,IAAML,GAAsBG,EAAYd,EAASgB,EAAQ,IAAM,GAAKD,EAAaC,EAAQ,IAAMJ,GAAqBG,EAAad,EAAQe,EAAQ,IAAM,CACpL,CA+C6BE,CAAqBpC,EAAWI,GAxCpC,SAA4BJ,GACnD,IAAIC,EAAOD,EAAUE,IAGrB,KAAMD,EAAKoC,aAAepC,EAAKqC,cAAgBrC,EAAKsC,iBAAiBrP,QAAS,OAAO,EAErF,IAAI8N,OAAM,EACNwB,OAAgB,EAEpB,IACE,IAAIC,EAAyBxC,EAAKc,wBAElCC,EAAMyB,EAAuBzB,IAC7BwB,EAAgBC,EAAuBvB,MACzC,CAAE,MAAO9P,GACP4P,EA9GG,EA+GHwB,EA1GM,CA2GR,CAEA,IAAIpB,EAAoB1B,OAAO2B,aAAeb,SAASC,gBAAgBa,aAEnEY,EAAU/O,MAAMgP,QAAQnC,EAAUjC,MAAM5D,QAAU6F,EAAUjC,MAAM5D,OAAS,CAAC6F,EAAUjC,MAAM5D,OAAQ6F,EAAUjC,MAAM5D,QAExH,OAAO6G,EAAMkB,EAAQ,IAAMd,GAAqBJ,EAAMwB,EAAgBN,EAAQ,IAAM,CACtF,CAgBuEQ,CAAmB1C,GACpFK,EAEGL,EAAUK,UACTL,EAAUjC,MAAM4E,MAClBpD,EAAQqD,KAAK5C,GAGfA,EAAUK,SAAU,EACpBL,EAAU6C,eAED7C,EAAUjC,MAAM4E,MAAQ3C,EAAUK,UAC7CL,EAAUK,SAAU,EAChBL,EAAUjC,MAAM+E,oBAClB9C,EAAU6C,cAlBd,CAqBF,EAaIE,EAAkB,WACpB,IAAK,IAAIjR,EAAI,EAAGA,EAAIwN,EAAUpM,SAAUpB,EAAG,CACzC,IAAIkR,EAAW1D,EAAUxN,GACzBiO,EAAaiD,EACf,CAdAzD,EAAQjG,SAAQ,SAAU0G,GACxB,IAAIiD,EAAQ3D,EAAUlF,QAAQ4F,IACf,IAAXiD,GACF3D,EAAU4D,OAAOD,EAAO,EAE5B,IAEA1D,EAAU,EAUZ,EAgBI4D,OAAY,EACZC,EAAuB,KAMvBC,EAAW,SAAUC,GAGvB,SAASD,EAAStF,IAhNpB,SAAyBwF,EAAUjF,GAAe,KAAMiF,aAAoBjF,GAAgB,MAAM,IAAIkF,UAAU,oCAAwC,CAiNpJC,CAAgBnO,KAAM+N,GAEtB,IAAIK,EAjNR,SAAoCC,EAAM3H,GAAQ,IAAK2H,EAAQ,MAAM,IAAIC,eAAe,6DAAgE,OAAO5H,GAAyB,iBAATA,GAAqC,mBAATA,EAA8B2H,EAAP3H,CAAa,CAiN/N6H,CAA2BvO,MAAO+N,EAASS,WAAatS,OAAOuS,eAAeV,IAAWrH,KAAK1G,KAAMyI,IAIhH,OAFA2F,EAAMrD,SAAU,EAChBqD,EAAMM,OAASN,EAAMM,OAAOrG,KAAK+F,GAC1BA,CACT,CA2HA,OA/UF,SAAmBO,EAAUC,GAAc,GAA0B,mBAAfA,GAA4C,OAAfA,EAAuB,MAAM,IAAIV,UAAU,kEAAoEU,GAAeD,EAASzO,UAAYhE,OAAO2S,OAAOD,GAAcA,EAAW1O,UAAW,CAAE4O,YAAa,CAAEC,MAAOJ,EAAUhG,YAAY,EAAOE,UAAU,EAAMD,cAAc,KAAegG,IAAY1S,OAAO8S,eAAiB9S,OAAO8S,eAAeL,EAAUC,GAAcD,EAASH,UAAYI,EAAY,CA0M3eK,CAAUlB,EAAUC,GAYpB1F,EAAayF,EAAU,CAAC,CACtBhF,IAAK,oBACLgG,MAAO,WAGL,IAAIG,EAAa9E,OACb+E,EAAkBnP,KAAKyI,MAAM0G,gBAE7BA,GAxBiB,iBAyBNA,IACXD,EAAaA,EAAWhE,SAASkE,cAAcD,IAGnD,IAAIE,OAAwDC,IAAxBtP,KAAKyI,MAAM8G,UAAwC,aAAd1B,GAA0C,aAAdA,QAAoDyB,IAAxBtP,KAAKyI,MAAM8G,SAoB5I,GAlBIF,KACF,EAAI7F,EAAOgG,KAAKN,EAAY,SAAUpB,EAAsBxD,IAC5D,EAAId,EAAOgG,KAAKpF,OAAQ,SAAU0D,EAAsBxD,GACxDwD,EAAuB,MAGpBA,SACyBwB,IAAxBtP,KAAKyI,MAAM8G,UACbzB,GAAuB,EAAIpE,EAAWI,SAAS2D,EAAgD,iBAAxBzN,KAAKyI,MAAM8G,SAAwBvP,KAAKyI,MAAM8G,SAAW,KAChI1B,EAAY,iBACqByB,IAAxBtP,KAAKyI,MAAMgH,UACpB3B,GAAuB,EAAInE,EAAWG,SAAS2D,EAAgD,iBAAxBzN,KAAKyI,MAAMgH,SAAwBzP,KAAKyI,MAAMgH,SAAW,KAChI5B,EAAY,YAEZC,EAAuBL,GAIvBzN,KAAKyI,MAAMuC,SAAU,CACvB,IAAIF,GAAS,EAAIrB,EAAeK,SAAS9J,KAAK4K,KAC9C,GAAIE,GAAyC,mBAAxBA,EAAO4E,aAA6B,CACvD,IAAIC,GAAqB7E,EAAO4E,aAAa3F,GAAzB,EACE,IAAlB4F,GACF7E,EAAOT,iBAAiB,SAAUyD,EAAsBxD,GAE1DQ,EAAO8E,aAAa7F,EAAa4F,EACnC,CACF,MAAO,GAAyB,IAArB3F,EAAUpM,QAAgByR,EAA+B,CAClE,IAAIQ,EAAS7P,KAAKyI,MACdqH,EAASD,EAAOC,OAChBC,EAASF,EAAOE,OAGhBD,IACF,EAAItG,EAAOwG,IAAId,EAAY,SAAUpB,EAAsBxD,GAGzDyF,IACF,EAAIvG,EAAOwG,IAAI5F,OAAQ,SAAU0D,EAAsBxD,EAE3D,CAEAN,EAAUsD,KAAKtN,MACfyK,EAAazK,KACf,GACC,CACD+I,IAAK,wBACLgG,MAAO,WACL,OAAO/O,KAAK+K,OACd,GACC,CACDhC,IAAK,uBACLgG,MAAO,WACL,GAAI/O,KAAKyI,MAAMuC,SAAU,CACvB,IAAIF,GAAS,EAAIrB,EAAeK,SAAS9J,KAAK4K,KAC9C,GAAIE,GAAyC,mBAAxBA,EAAO4E,aAA6B,CACvD,IAAIC,GAAiB7E,EAAO4E,aAAa3F,GAAe,EAClC,IAAlB4F,GACF7E,EAAOmF,oBAAoB,SAAUnC,EAAsBxD,GAC3DQ,EAAOoF,gBAAgBnG,IAEvBe,EAAO8E,aAAa7F,EAAa4F,EAErC,CACF,CAEA,IAAIhC,EAAQ3D,EAAUlF,QAAQ9E,OACf,IAAX2N,GACF3D,EAAU4D,OAAOD,EAAO,GAGD,IAArB3D,EAAUpM,QAAkC,oBAAXwM,UACnC,EAAIZ,EAAOgG,KAAKpF,OAAQ,SAAU0D,EAAsBxD,IACxD,EAAId,EAAOgG,KAAKpF,OAAQ,SAAU0D,EAAsBxD,GAE5D,GACC,CACDvB,IAAK,SACLgG,MAAO,SAAgBoB,GACjBA,IACFnQ,KAAK4K,IAAMuF,EAEf,GACC,CACDpH,IAAK,SACLgG,MAAO,WACL,IAAIqB,EAAUpQ,KAAKyI,MACfmD,EAASwE,EAAQxE,OACjByE,EAAWD,EAAQC,SACnBC,EAAcF,EAAQE,YACtBC,EAAYH,EAAQG,UACpBC,EAAkBJ,EAAQI,gBAC1BC,EAAQL,EAAQK,MAGpB,OAAOpH,EAAQS,QAAQ4G,cACrB,MACA,CAAEH,UAAWC,EAAkB,YAAcD,EAAW3F,IAAK5K,KAAK0O,OAAQ+B,MAAOA,GACjFzQ,KAAK+K,QAAUsF,EAAWC,GAA4BjH,EAAQS,QAAQ4G,cAAc,MAAO,CACzFD,MAAO,CAAE7E,OAAQA,GACjB2E,UAAWC,EAAkB,iBAGnC,KAGKzC,CACT,CAvIe,CAuIb5E,EAAOwH,WAET5C,EAAS6C,UAAY,CACnBL,UAAWhH,EAAYO,QAAQ+G,OAC/BL,gBAAiBjH,EAAYO,QAAQ+G,OACrCxD,KAAM9D,EAAYO,QAAQgH,KAC1BlF,OAAQrC,EAAYO,QAAQiH,UAAU,CAACxH,EAAYO,QAAQkH,OAAQzH,EAAYO,QAAQ+G,SACvFhM,OAAQ0E,EAAYO,QAAQiH,UAAU,CAACxH,EAAYO,QAAQkH,OAAQzH,EAAYO,QAAQmH,QAAQ1H,EAAYO,QAAQkH,UACnHhG,SAAUzB,EAAYO,QAAQgH,KAC9Bf,OAAQxG,EAAYO,QAAQgH,KAC5BhB,OAAQvG,EAAYO,QAAQgH,KAC5BT,SAAU9G,EAAYO,QAAQa,KAC9B8E,SAAUlG,EAAYO,QAAQiH,UAAU,CAACxH,EAAYO,QAAQkH,OAAQzH,EAAYO,QAAQgH,OACzFvB,SAAUhG,EAAYO,QAAQiH,UAAU,CAACxH,EAAYO,QAAQkH,OAAQzH,EAAYO,QAAQgH,OACzFR,YAAa/G,EAAYO,QAAQa,KACjCwE,gBAAiB5F,EAAYO,QAAQiH,UAAU,CAACxH,EAAYO,QAAQ+G,OAAQtH,EAAYO,QAAQoH,SAChG1D,mBAAoBjE,EAAYO,QAAQgH,KACxCL,MAAOlH,EAAYO,QAAQoH,QAG7BnD,EAASoD,aAAe,CACtBZ,UAAW,GACXC,gBAAiB,WACjBnD,MAAM,EACNxI,OAAQ,EACRmG,UAAU,EACV+E,QAAQ,EACRD,QAAQ,EACRtC,oBAAoB,GAuCtBnR,EAAQ,GAAU0R,C,2BCtblB7R,OAAO4M,eAAezM,EAAS,aAAc,CAC3C0S,OAAO,IAET1S,EAAAA,QACA,SAAkB+U,EAAMC,EAAMC,GAC5B,IAAIC,OAAU,EACVjS,OAAO,EACPkS,OAAU,EACVC,OAAY,EACZC,OAAS,EAETC,EAAQ,SAASA,IACnB,IAAIC,GAAQ,IAAIxR,KAASqR,EAErBG,EAAOP,GAAQO,GAAQ,EACzBL,EAAUM,WAAWF,EAAON,EAAOO,IAEnCL,EAAU,KACLD,IACHI,EAASN,EAAK3O,MAAM+O,EAASlS,GACxBiS,IACHC,EAAU,KACVlS,EAAO,OAIf,EAEA,OAAO,WACLkS,EAAUxR,KACVV,EAAOC,UACPkS,GAAa,IAAIrR,KAEjB,IAAI0R,EAAUR,IAAcC,EAW5B,OAVKA,IACHA,EAAUM,WAAWF,EAAON,IAG1BS,IACFJ,EAASN,EAAK3O,MAAM+O,EAASlS,GAC7BkS,EAAU,KACVlS,EAAO,MAGFoS,CACT,CACF,C,4BC9CAxV,OAAO4M,eAAezM,EAAS,aAAc,CAC3C0S,OAAO,IAET1S,EAAQ2T,GAER,SAAY+B,EAAIC,EAAWC,EAAU9H,GACnCA,EAAOA,IAAQ,EACX4H,EAAG1H,iBACL0H,EAAG1H,iBAAiB2H,EAAWC,EAAU9H,GAChC4H,EAAGG,aACZH,EAAGG,YAAY,KAAOF,GAAW,SAAUlW,GACzCmW,EAASvL,KAAKqL,EAAIjW,GAAKsO,OAAO+H,MAChC,GAEJ,EAVA9V,EAAQmT,IAYR,SAAauC,EAAIC,EAAWC,EAAU9H,GACpCA,EAAOA,IAAQ,EACX4H,EAAG9B,oBACL8B,EAAG9B,oBAAoB+B,EAAWC,EAAU9H,GACnC4H,EAAGK,aACZL,EAAGK,YAAY,KAAOJ,EAAWC,EAErC,C,4BCvBA/V,OAAO4M,eAAezM,EAAS,aAAc,CAC3C0S,OAAO,IAOT1S,EAAAA,QAAkB,SAAUsO,GAC1B,KAAMA,aAAgBE,aACpB,OAAOK,SAASC,gBAOlB,IAJA,IAAIkH,EAA8C,aAAxB1H,EAAK8F,MAAM6B,SACjCC,EAAgB,gBAChBzH,EAASH,EAENG,GAAQ,CACb,IAAKA,EAAO0H,WACV,OAAO7H,EAAKM,eAAiBC,SAASC,gBAGxC,IAAIsF,EAAQrG,OAAOqI,iBAAiB3H,GAChCwH,EAAW7B,EAAM6B,SACjBtH,EAAWyF,EAAMzF,SACjB0H,EAAYjC,EAAM,cAClBkC,EAAYlC,EAAM,cAEtB,GAAiB,WAAb6B,GAAyBD,EAC3BvH,EAASA,EAAO0H,eADlB,CAKA,GAAID,EAAcjS,KAAK0K,IAAauH,EAAcjS,KAAKoS,IAAcH,EAAcjS,KAAKqS,GACtF,OAAO7H,EAGTA,EAASA,EAAO0H,UANhB,CAOF,CAEA,OAAO7H,EAAKM,eAAiBN,EAAKQ,iBAAmBD,SAASC,eAChE,C,4BCzCAjP,OAAO4M,eAAezM,EAAS,aAAc,CAC3C0S,OAAO,IAET1S,EAAAA,QAEA,SAAkBuW,EAAIC,EAAYC,GAEhC,IAAIlB,EAAMmB,EACV,OAFAF,IAAeA,EAAa,KAErB,WACL,IAAIrB,EAAUsB,GAAS9S,KAEnBgT,GAAO,IAAI5S,KACXd,EAAOC,UACPqS,GAAQoB,EAAMpB,EAAOiB,GAEvBI,aAAaF,GACbA,EAAalB,YAAW,WACtBD,EAAOoB,EACPJ,EAAGnQ,MAAM+O,EAASlS,EACpB,GAAGuT,KAEHjB,EAAOoB,EACPJ,EAAGnQ,MAAM+O,EAASlS,GAEtB,CACF,C,+LCvBO,MAAM4T,EAAwC,CACjDC,SAAU,GACVC,aAAc,GACdC,cAAe,GACfC,cAAe,GACfC,aAAc,GACdC,gBAAiB,IAGRC,EAAsD,CAC/DC,YAAa,CAAEC,SAAU,EAAAC,OAAOC,SAAU9E,MAAO,SAAU+E,KAAM,CAAC,EAAGC,QAAS,GAAIC,MAAO,IACzFC,SAAU,IAGDC,EAA+D,CACxEC,SAAU,IAGDC,EAAkB,yBAClBC,EAA4B,yBAC5BC,EAA8B,yBAC9BC,EAAiB,yBACjBC,EAAmC,yBACnCC,EAAmC,yBACnCC,EAAkC,yBAClCC,EAAmB,yBAGzB,SAASC,IACZ,IACI,OAAO,IACF5R,IAAqB,2CACrB6R,MAAMC,GACCA,EAAShB,KACFgB,EAAShB,KAEbiB,QAAQ5Y,QAAQ+W,KAE1B8B,OAAM,IAAM9B,GACrB,CAAE,MAAOpX,GACL,OAAOiZ,QAAQ5Y,QAAQ+W,EAC3B,CACJ,CAEO,SAAS+B,EAAkBC,GAC9B,IACI,OAAO,IACFlS,IAA4B,qCAAqCkS,KACjEL,MAAMC,GACCA,EAAShB,KACFgB,EAAShB,KAEbiB,QAAQ5Y,QAAQsX,KAE1BuB,OAAM,IAAMvB,GACrB,CAAE,MAAO3X,GACL,OAAOiZ,QAAQ5Y,QAAQsX,EAC3B,CACJ,CAEO,SAAS0B,IACZ,IACI,OAAOC,MAAM,+BACRP,MAAMC,GACIC,QAAQ5Y,QAAQ2Y,EAASO,UAEnCL,OAAM,IAAMd,GACrB,CAAE,MAAOpY,GACL,OAAOiZ,QAAQ5Y,QAAQ+X,EAC3B,CACJ,C,8BC/DOoB,eAAeC,I,MAClB,OAAuB,QAAnB,EAAM,OAANnL,aAAM,IAANA,YAAM,EAANA,OAAQoL,mBAAW,eAAEC,QACdV,QAAQ5Y,QAAQiO,OAAOoL,YAAYC,cAG7BL,MAAM,2CAA4C,CAC3DM,YAAa,YAEZb,MAAKC,GAAYA,EAASO,SAC1BR,MAAMf,IACH,GAAoB,OAAhBA,EAAK2B,QAAuC,OAApB3B,EAAK6B,WAAqB,CAClD,MAAMA,EAAa,IAAIvV,KAAK0T,EAAK6B,YAC3BC,EAAc,IAAIxV,KACxB,GAAIuV,EAAWpT,UAAYqT,EAAYrT,UACnC,OAAOuR,EAAK2B,MAEpB,CACA,OAAO,IAAI,IAEdT,OAAM,IAAM,MACzB,C,8CCzBOM,eAAeO,EAAmBC,GACrC,IACI,MAAMC,EAAwB,GAC1BD,EAAOE,iBAAmBF,EAAOE,gBAAgBpY,OAAS,GAC1DkY,EAAOE,gBAAgBhS,SAASiS,IAC5BF,EAAYzI,KAAK,yCAAyC2I,IAAc,IAGhF,MAAMC,EAAgBH,EAAYxa,KAAK4a,GAAQf,MAAMe,GAAKtB,MAAMC,GAAaA,EAASO,WAChFP,QAAiBC,QAAQqB,IAAIF,GACnC,OAAIpB,EAASlX,OAAS,EACXkX,EAEA,EAEf,CAAE,SACE,OAAOC,QAAQ5Y,QAAQ,GAC3B,CACJ,C,oFCrBO,SAASka,EAAYP,GASxB,IACI,IAAIK,EAAM,mBACV,MAAMG,EAAmB,GAsCzB,OApCAA,EAAiBhJ,KAAK,mBAElBwI,EAAOE,iBAAmBF,EAAOE,gBAAgBpY,OAAS,GAC1DkY,EAAOE,gBAAgBza,KAAKgb,IACxBD,EAAiBhJ,KAAK,gBAAgBiJ,IAAM,IAIhDT,EAAOU,MACPF,EAAiBhJ,KAAK,QAAQwI,EAAOU,QAGrCV,EAAOW,gBACPH,EAAiBhJ,KAAK,kBAAkBwI,EAAOW,kBAG/CX,EAAOY,4BACPJ,EAAiBhJ,KAAK,8BAA8BwI,EAAOY,8BAG3DZ,EAAOa,SACPL,EAAiBhJ,KAAK,WAAWwI,EAAOa,WAGxCb,EAAOc,SACPN,EAAiBhJ,KAAK,WAAWwI,EAAOc,WAGxCd,EAAOe,eACPP,EAAiBhJ,KAAK,iBAAiBwI,EAAOe,iBAG9CP,EAAiB1Y,SACjBuY,GAAO,IAAIG,EAAiBxY,KAAK,QAG9B,IACFkF,IAAuBmT,GACvBtB,MAAMC,GACCA,GAAYA,EAAShB,MAAQgB,EAAShB,KAAKgD,OAAShC,EAAShB,KAAKgD,MAAMlZ,OAAS,EAC1EkX,EAAShB,KAAKgD,MAElB,KAEV9B,OAAM,IAAM,IACrB,CAAE,SACE,OAAOD,QAAQ5Y,QAAQ,GAC3B,CACJ,CAWOmZ,eAAeyB,GAAsB,QACxCH,EAAO,cACPC,EAAa,QACbF,EAAO,cACPK,EAAa,aACbC,EAAY,gBACZC,IAEA,IACI,MAAMC,EAAU,mBAEVrB,EAAS,IAAIsB,gBAEnBlb,OAAOmb,QAAQ,CACXC,YAAY,EACZC,aAAa,EACbf,KAAM,EACNI,UACAC,gBACAF,UACAK,gBACAC,eACAC,oBACDlT,SAAQ,EAAEwT,EAAOzI,MACZA,SACA+G,EAAO2B,OAAOD,EAAOzI,EAAMlN,WAC/B,IAGJ,MAAMiT,QAAiBM,MAAM,GAAG+B,KAAWrB,KAE3C,IAAKhB,EAAS4C,GACV,OAAO,EAGX,MAAM5D,QAAgCgB,EAASO,OAC/C,OAAOvB,aAAI,EAAJA,EAAM6D,UACjB,CAAE,SACE,OAAO5C,QAAQ5Y,QAAQ,EAC3B,CACJ,C,4DChHO,MAAMyb,EAAmC,CAC5C,CACIC,YAAa,CACTC,wBAAyB,GACzBC,YAAa,EACbC,YAAY,EACZC,SAAU,GACVC,MAAO,GACPC,gBAAiB,EACjBC,uBAAwB,EACxBC,WAAY,GACZC,mBAAoB,EACpBC,kBAAmB,GACnBC,oBAAqB,GAEzBvC,YAAa,EACbuC,oBAAqB,EACrBC,eAAgB,KAIjBnD,eAAeoD,EAClBjD,EACAkD,EACAhC,GAEA,MAAMiC,EAAqBD,EAAa9W,WAAW5C,QAAQ,KAAM,kBACjE,IAAI4Z,EAAmBlC,EAEvB,IAAKA,EAAS,CACV,MAAM,QAAEmC,IAAY,UACpBD,EAAmBC,CACvB,CAEA,OAAIrD,EAAO7X,OAAS,GAAK+a,EAAa/a,OAAS,QAC9BwX,MACT,uCAAuCK,kBAAuBmD,aAA8BC,IAC5F,CACInD,YAAa,YAGhBb,MAAMC,GAAaA,EAASO,SAC5BR,MAAMf,GACIA,IAEVkB,OAAO+D,IACJC,QAAQC,IAAIF,GACLnB,KAGR7C,QAAQ5Y,QAAQyb,EAE/B,C,iFC7CA,MCTA,EDSgBnP,IACZ,MAAMyQ,GAAY,IAAAC,QAA0B,OACtC,SAAE9I,EAAQ,UAAE+I,EAAS,QAAEC,GAAY5Q,EAGnC6Q,EAAeC,IACjB,MAAMC,EAAkB,sBACxBD,EAAOE,UAAUhb,IAAI+a,GACrBD,EAAOlP,iBAAiB,iBAAiB,KACrCkP,EAAOG,QACPH,EAAOE,UAAUE,OAAOH,EAAgB,GAC1C,EAyCN,OAtCA,IAAAI,YAAU,K,MACN,MAAML,EAASL,EAAUW,QAeqB,QAA9C,EAAAN,aAAM,EAANA,EAAQnK,cAAc,gCAAwB,SAAE/E,iBAAiB,SAAS,KACtEiP,EAAYC,EAAO,IAIvBA,SAAAA,EAAQlP,iBAAiB,SAAS,KAC9BgP,GAAS,IAIbE,SAAAA,EAAQlP,iBAAiB,SAAUvO,IAtBF,EAACA,EAAeyd,KAC7C,MAAMO,EAAOP,EAAO9N,wBAEhBqO,EAAKpO,KAAO5P,EAAEie,SACdje,EAAEie,SAAWD,EAAKpO,IAAMoO,EAAKlO,QAC7BkO,EAAKnO,MAAQ7P,EAAEke,SACfle,EAAEke,SAAWF,EAAKnO,KAAOmO,EAAKjO,OAE9ByN,EAAYC,EAChB,EAcAU,CAAyBne,EAAGyd,EAAO,IAInCH,IACAG,SAAAA,EAAQW,YACZ,GAGD,CAACd,IAECA,EAGDA,IACI,kCAAoB,SAAS7I,UAAU,YAAY3F,IAAKsO,EAAS,WAC7D,iCACgB,oBACZiB,KAAK,SACL5J,UAAU,uBAAsB,aACrB,gBAAe,SAEzB,IAAMmJ,SAEX,gBAAKnJ,UAAU,qBAAoB,SAAEF,QAb1B,uBAgBtB,C,6DEtEU,MAAM+J,UAAsB,YACvC,WAAAtL,CAAYrG,GACR4R,MAAM5R,GACNzI,KAAKsa,MAAQ,CAAEC,UAAU,EAC7B,CAEA,+BAAOC,CAAyBC,GAC5B,MAAO,CAAEF,UAAU,EACvB,CAEA,MAAAG,GACI,OAAO1a,KAAKsa,MAAMC,UAA0D,IAA9C,WAAeI,MAAM3a,KAAKyI,MAAM4H,UAAkB,KAAOrQ,KAAKyI,MAAM4H,QACtG,E,yFCHW,MAAMuK,UAAkB,YACnC,WAAA9L,CAAYrG,GACR4R,MAAM5R,GAENzI,KAAKsa,MAAQ,CACTO,SAAS,EAEjB,CAEO,MAAAH,GACH,OACI,+BACI,iBAAKnK,UAAU,aAAY,WACvB,oBACIA,UAAW,IAAW,6BAA8BvQ,KAAKyI,MAAM8H,WAC/D7U,GAAIsE,KAAKyI,MAAM/M,GACfof,SAAU9a,KAAKyI,MAAMqS,SACrBC,QAAS,IAAM/a,KAAKgb,SAAS,CAAEH,SAAS,IACxCI,OAAQ,IAAMjb,KAAKgb,SAAS,CAAEH,SAAS,IACvC9L,MAAO/O,KAAKyI,MAAMsG,MAAK,WAEQ,IAA9B/O,KAAKyI,MAAMyS,iBAA2B,mBAAQC,UAAQ,EAACpM,MAAM,KAC7D/O,KAAKyI,MAAM2S,QAAQ7f,KAAI,EAAG8f,QAAOtM,YAC9B,mBAAoBA,MAAOA,EAAK,SAC3BsM,GADQtM,SAMrB,kBACIwB,UAAW,IAAW,qBAAsB,CACxC,kCAAmCvQ,KAAKsa,MAAMO,SAAgC,KAArB7a,KAAKyI,MAAMsG,QAExEuM,QAAStb,KAAKyI,MAAM/M,GAAE,SAErBsE,KAAKyI,MAAM4S,SAGhB,gBACI9K,UAAW,IAAW,kBAAmB,CACrC,0BAA2BvQ,KAAKsa,MAAMO,gBAM9D,E,+GCiDG,MAAM,EAAiCpS,IAC1C,MAAM,eACF8S,EAAiB,OAAM,aACvBC,EAAe,MAAK,UACpBjL,EAAS,SACT4K,GAAW,EAAK,WAChBM,EAAU,uBACVC,GAAyB,EACzBhgB,GAAIigB,EAAS,UACbC,EAAY,OAAM,WAClBC,EAAU,iBACVC,EAAgB,MAChBT,EAAK,UACLU,EAAS,KACT3e,EAAI,OACJ6d,EAAM,SACNH,EAAQ,QACRC,EAAO,QACPiB,EAAO,SACPC,GAAW,EAAK,KAChB9B,EAAO,OAAM,MACbpL,EAAK,QACLmN,GAAU,GACVzT,GAEG/M,GAAM,WAAeigB,IAAa,QAAO,IAC1CQ,EAAc,cAAczgB,IAC5B0gB,EAAe,0BAA0B1gB,IACzC2gB,EAAe,SAA+B,MAC9CC,EC3IO,EAAC1R,EAA0C2R,GAAe,KACvE,MAAOD,EAAWE,IAAY,IAAAC,UAASF,GAoBvC,OAlBA,IAAA3C,YAAU,KACN,MAAMC,EAAUjP,EAAIiP,QACdoB,EAAS,IAAMuB,GAAS,GACxBzB,EAAU,IAAMyB,GAAS,GAO/B,OALI3C,IACAA,EAAQxP,iBAAiB,OAAQ4Q,GACjCpB,EAAQxP,iBAAiB,QAAS0Q,IAG/B,KACClB,IACAA,EAAQ5J,oBAAoB,OAAQgL,GACpCpB,EAAQ5J,oBAAoB,QAAS8K,GACzC,CACH,IAGEuB,CAAS,EDsHE,CAASD,GA2B3B,OAzBA,IAAAzC,YAAU,KACN,MAAMpC,EAAQ6E,EAAaxC,QACvBrC,IACAA,EAAMnN,iBACF,QACC8H,GAAU8I,GAAUA,EAAQ9I,KAEjCqF,EAAMnN,iBACF,UACC8H,GAAU2I,GAAYA,EAAU3I,KAEzC,GACD,KAEH,IAAAyH,YAAU,KACN,MAAM8C,EAAQL,aAAY,EAAZA,EAAcxC,QACxB6C,IACIJ,IAAaT,aAAU,EAAVA,EAAYvL,aACzBoM,EAAMpM,YAAcuL,aAAU,EAAVA,EAAYvL,YAEhCoM,EAAMpM,YAAc,GAE5B,GACD,CAACgM,KAGA,iCACI,iBACI/L,UAAW,IAAWA,EAAW,iBAAkB,CAC/C,2BAA4B4K,EAC5B,0BAA2BmB,EAC3B,0BAAgD,YAArBR,EAC3B,kBAAmCxM,IAArBwM,GAAkCI,IAClD,WAEF,gDACmBT,EAAaW,OAAe9M,EAAS,mBAClCmM,EAAaW,OAAe9M,EAC9CiM,eAAgBA,EAChBC,aAAcA,EACdjL,UAAU,wBACV4K,SAAUA,EACVzf,GAAIygB,EACJP,UAAWA,EACXI,QAASA,EACTD,UAAWA,EACX3e,KAAMA,EACNwN,IAAKyR,EACLJ,SAAUA,EACV9B,KAAMA,EACNpL,MAAOA,EACPkM,OAAQA,EACRH,SAAUA,EACVC,QAASA,GACLc,IAEPC,IACG,gBAAKvL,UAAW,wBAA6BuL,EAAkB,SACrC,UAArBA,GACG,iBAAKa,QAAQ,YAAYC,MAAM,6BAA4B,cAAa,OAAM,WAC1E,iBAAM7f,EAAE,gBAAgB8f,KAAK,UAC7B,iBAAM9f,EAAE,gGAGZ,iBAAK4f,QAAQ,YAAYC,MAAM,6BAA4B,cAAa,OAAM,WAC1E,iBAAM7f,EAAE,gBAAgB8f,KAAK,UAC7B,iBAAM9f,EAAE,4DAKvBmf,IACG,gBAAKzL,MAAO,CAAEqM,UAAW,SAAUC,WAAY,SAAS,UACpD,wBAAaC,KAAK,QAAQ3B,MAAM,kBAAkB4B,KAAK,aAG/D,kBACI1M,UAAW,IAAW,qBAAsB,CACxC,kCAAmC+L,QAAwBhN,IAAVP,GAAiC,KAAVA,IAE5EuM,QAASa,EAAW,SAEnBd,KAEL,gBAAK9K,UAAW,IAAW,kBAAmB,CAAE,0BAA2B+L,SAE9Eb,GACG,gBACIlL,UAAW,IAAW,6BAA8B,CAChD,yCAA0CmL,EAC1C,6CAAmE,YAArBI,IAElDpgB,GAAI0gB,EAAY,SAEfX,IAEL,OAEX,C,gQEjPE,MAAMyB,GAAa,EACbC,GAAiB,EACjBC,GAAuB,EACvBC,GAAqB,EACrBC,EAAkB,IAClBC,GAAY,EACZC,EAAU,OACVC,EAAQ,IACRC,EAAa,GCC1B,EAP0BC,IACtB,MAAMC,EAAW1S,SAAS2S,cACtBD,GACAA,EAASE,OACb,ECkCJ,EAtCA,MAEI,WAAAhP,GAIO,KAAAiP,MAAS5L,IACZ,MAAM,QAAE6H,EAAO,QAAED,GAAY5H,EAAM6L,QAAQ,GAC3Che,KAAKie,cAAcpe,EAAIma,EACvBha,KAAKie,cAAc/gB,EAAI6c,CAAO,EAG3B,KAAAmE,KAAQ/L,IACX,MAAM,QAAE6H,EAAO,QAAED,GAAY5H,EAAM6L,QAAQ,GACrCG,EAAWnE,EACXoE,EAAWrE,EACXsE,EAASre,KAAKse,SAASF,EAAWpe,KAAKie,cAAc/gB,EAAGihB,EAAWne,KAAKie,cAAcpe,GAE1E,eADAG,KAAKue,kBAAkBF,IACPlM,EAAMqM,YACpCrM,EAAMsM,gBACV,EAjBAze,KAAKie,cAAgB,CAAEpe,EAAG,EAAG3C,EAAG,EACpC,CAmBQ,QAAAohB,CAASphB,EAAW2C,GACxB,OAAO3B,KAAKwgB,MAAMxhB,EAAG2C,IAAM,IAAM3B,KAAKygB,GAC1C,CAEQ,iBAAAJ,CAAkBK,GAGtB,OAFY1gB,KAAKC,IAAI,GAAKD,KAAKC,IAAIygB,KAExBlB,EACA,WAGJ,YACX,GCHJ,EA5ByB,EAAGC,aAAYkB,YAAWC,gBAC/C,MAAMC,ECLU,GAChBpB,aACAkB,YACAC,eACmDE,IACnD,MAAMC,EAAc/T,SAASkE,cAAc0P,GACrCI,EAAehU,SAASkE,cAAcyP,GAC1B,SAAdG,GAAwBC,GACxBA,EAAYnB,QACZH,EAAWwB,QACU,YAAdH,GAA2BE,IAClCA,EAAapB,QACbH,EAAWwB,OACf,EDRsB,CAAY,CAAExB,aAAYkB,YAAWC,cACrDM,EEOiB,GAAGzB,aAAYoB,mBACtC5M,IAEAwL,EAAW0B,QACX,MAAM,IAAEtW,EAAG,SAAEuW,GAAanN,EACpByL,EAAW1S,SAAS2S,cAEpB0B,EAAgC,OAE9B3B,GACAA,EAASnE,WACTmE,EAASnE,UAAU7b,OAAS,GAC5BggB,EAASnE,UAAU+F,SAAS,uCAOpC,OAAQzW,GACJ,IAAK,QACL,IAAK,IACL,IAAK,WACD,GAAIwW,IAAiC,MACjC3B,GAAUA,EAAS6B,QACvBtN,EAAMsM,iBACN,MACJ,IAAK,SACL,IAAK,MACDM,EAAc,WACd,MACJ,IAAK,YACL,IAAK,OACDpB,EAAW+B,KAAK,QAChB,IACA,MACJ,IAAK,aACL,IAAK,QACD/B,EAAW+B,KAAK,QAChB,IACA,MACJ,IAAK,UACL,IAAK,KACD,GAAIH,IAAiC,MACrCR,EAAc,QACd,MACJ,IAAK,YACL,IAAK,OACD,GAAIQ,IAAiC,MACrCR,EAAc,WACd,MACJ,IAAK,MACD,GAAInB,EAAU,CAEV,MAAM+B,EAlEO,CAACxP,I,QAC1B,IAAIrF,EAASqF,EAAQqC,WACrB,KAAO1H,KAAoB,QAAT,EAAAA,EAAOpP,UAAE,eAAEkkB,SAgEkC,2BA/D3D9U,EAASA,EAAO0H,WAIpB,MAAM7E,GAAkC,QAA1B,EAAA7C,aAAM,EAANA,EAAQpP,GAAG6E,MAAM,iBAAS,eAAG,KAAM,IAEjD,OAAOsf,SAASlS,EAAM,EAyDUmS,CAAqBlC,GAEzC,GAAoB,OAAhB+B,EAAsB,CACtB,MAAMI,EAAeJ,EACjBL,EACA3B,EAAW+B,KAAKK,EAAe,GAE/BpC,EAAW+B,KAAKK,EAExB,CACJ,EAGR,EF1E2C,CAAmB,CAAEpC,aAAYoB,kBACtEiB,EGNmD7N,IACzDA,EAAMsM,iBACN,GAA4B,EHK5B,IAAKd,IAAeA,EAAWsC,QAC3B,MAAO,IAAM,KAEjB,MAAM,UAAEC,GAAcvC,EAAWsC,UAC3BE,EAAWD,EAAUE,aAC3B,IAAKD,EACD,MAAO,IAAM,KAGjB,MAAME,EAAQ,IAAI,EAYlB,OAVAF,EAAS9V,iBAAiB,UAAW+U,GACrCe,EAAS9V,iBAAiB,UAAW2V,GACrCE,EAAU7V,iBAAiB,aAAcgW,EAAMtC,MAAO,CAAEvT,SAAS,IACjE0V,EAAU7V,iBAAiB,YAAagW,EAAMnC,KAAM,CAAE1T,SAAS,IACnC,KACxB2V,EAASlQ,oBAAoB,UAAWmP,GACxCe,EAASlQ,oBAAoB,UAAW+P,GACxCE,EAAUjQ,oBAAoB,aAAcoQ,EAAMtC,OAClDmC,EAAUjQ,oBAAoB,YAAaoQ,EAAMnC,KAAK,CAEhC,EIrBf,SAASoC,GAAa,SACjCC,GAAW,EAAK,UAChBL,EAAS,WACTM,GAAa,EAAK,UAClBC,EAAS,WACTvD,EAAU,MACVpG,EAAQ,EAAC,KACT4J,GAAO,EAAK,OACZC,EAAS,EAAC,aACVC,EAAY,WACZC,GAAa,EAAK,UAClBhC,EAAY,GAAE,WACdiC,GAAa,EAAK,UAClBhC,EAAY,GAAE,WACdiC,GAAa,EAAK,OAClBC,GAAS,IAET,MAAMrD,GAAa,OAAI,OAAD,QAClB4C,WACAL,YACAM,aACAC,YACA3J,QACA4J,OACAE,eACAC,aACAC,aACAG,WAAYJ,EACZK,YAAaV,EAAa,EAAI,EAC9BW,MAAOP,EACPG,aACAJ,OAAQA,EACRK,SACAI,qBAAsB,QACnB,IAGP,MAAO,CAAEzD,aAAY0D,oBADO,EAAiB,CAAE1D,aAAYkB,YAAWC,cAE1E,C,4GCfe,MAAMwC,UAAiB,YAClC,WAAAxS,CAAYrG,GACR4R,MAAM5R,GAENzI,KAAKsa,MAAQ,CACT3M,MAAO,EACP6P,QAAS,EACT+D,WAAY,EACZC,gBAAgB,EAChBC,gBAAgB,GAGpBzhB,KAAK0hB,mBAAqB1hB,KAAK0hB,mBAAmBrZ,KAAKrI,MACvDA,KAAK2hB,eAAiB3hB,KAAK2hB,eAAetZ,KAAKrI,KACnD,CAKO,iBAAA4hB,GAEH,GADA5hB,KAAK2hB,eAAe3hB,KAAKyI,MAAMrL,KAAM4C,KAAKyI,MAAMoW,WAC5C7e,KAAK6hB,YAAa,CAClB,MAAMC,EAAa9hB,KAAK6hB,YAAY5B,UACpCjgB,KAAKgb,SAAS,CACVrN,MAAOmU,EAAWnU,MAClB6P,QAASsE,EAAWtE,QACpB+D,WAAYO,EAAWP,YAE/B,CACJ,CAEO,oBAAAQ,GACC/hB,KAAK6hB,aAAa7hB,KAAK6hB,YAAYG,UACnChiB,KAAKiiB,sBAAsBjiB,KAAKiiB,sBACxC,CAEQ,cAAAN,CAAevkB,EAAcyhB,GACjC,MAAM,SAAExO,GAAarQ,KAAKyI,OACpB,WAAEkV,EAAU,oBAAE0D,IAAwB,OAAa,CACrDxC,UAAWA,EACXqB,UAAW,IAAI9iB,oBACfqjB,WAAW,EACXI,WAAY,IAAIzjB,mBAChB0jB,WAAY,IAAI1jB,mBAChB0hB,UAAW,QAAQ1hB,aACnBujB,OA/Ce,EAgDfnD,QAAS,OACT1G,MAlDe,EAmDfiK,WAAY,CACR,CAAC,MAAkB,CAAC,EACpB,CAAC,MAAmB,CAChBC,QAAQ,EACRL,OAAQ,IAEZ,EAAG,CACCK,OAAQ3Q,EAASzS,OAAS,IAAMoC,KAAKyI,MAAMyZ,gBAKvDliB,KAAK6hB,YAAclE,EACnB3d,KAAKiiB,qBAAuBZ,EACxBrhB,KAAK6hB,aACL7hB,KAAK6hB,YAAYM,OAAOnS,GAAG,eAAgBhQ,KAAK0hB,mBAExD,CAEQ,kBAAAA,CAAmBU,GACvBpiB,KAAKgb,SAAS,CAAErN,MAAOyU,EAAKzU,MAAO6P,QAAS4E,EAAK5E,QAAS+D,WAAYa,EAAKb,YAC/E,CAEQ,kBAAAc,CAAmBC,GACvB,MAAMC,EAAwBviB,KAAKsa,MAAM3M,MAAQ,EAC3C6U,EAAoBF,EAAWvQ,GAAGtG,wBAaxCzL,KAAKgb,SAAS,CACVwG,kBARJ,WACI,MACMiB,EACFD,EAAkB3iB,EAAI2iB,EAAkB3W,MAAQ,GACpD,OAAO2W,EAAkB3iB,EAAIuK,OAAO8B,YAAcuW,EAAwCrY,OAAO8B,UACrG,CAGoBwW,KAAwBJ,EAAWK,qBACnDlB,kBAZOa,EAAWM,gBAAkBN,EAAWO,YAAcN,GAYpBD,EAAWQ,sBAE5D,CAEQ,kBAAAC,IAC8B,IAA9B/iB,KAAKsa,MAAMkH,iBAAyD,IAA9BxhB,KAAKsa,MAAMmH,gBACjDzhB,KAAKgb,SAAS,CACVwG,gBAAgB,EAChBC,gBAAgB,GAG5B,CAEA,kBAAAuB,CAAmBC,GACXjjB,KAAK6hB,aAAe7hB,KAAKyI,MAAM4H,SAASzS,SAAWqlB,EAAU5S,SAASzS,QACtEoC,KAAK6hB,YAAYqB,SAEzB,CAEO,MAAAxI,GACH,MAAM,SAAErK,EAAQ,KAAEjT,EAAI,UAAEyhB,GAAc7e,KAAKyI,OACrC,eAAE+Y,EAAc,eAAEC,GAAmBzhB,KAAKsa,MAEhD,OACI,iCACI,cAAG5e,GAAI,OAAO0B,aAAiBmT,UAAU,YAAY4S,KAAMtE,EAAS,SAC/D,QAAQ7e,KAAKyI,MAAM2a,UAAYpjB,KAAKyI,MAAM2a,UAAYhmB,EAAK6B,QAAQ,KAAM,mBAE9E,gBACIsR,UAAW,IAAW,yBAA0B,CAC5C,WAAgBkR,GAAkBD,IACpC,UAEF,gBACI9lB,GAAI,GAAG0B,oBAAsB,uBACP,WAAeud,MAAMtK,GAC3CE,UAAW,IAAW,mBAAoB,CACtC,4BAA+BF,EAASzS,OAAS,IACnD,SAED,WAAerC,IAAI8U,GAAU,CAACgT,EAAyB1V,KACpD,gBACI4C,UAAU,kBAAiB,wBACJvQ,KAAKsa,MAAM3M,QAAUA,EAE5C2V,aAAenR,GACXnS,KAAKqiB,mBAAmB,CACpBO,gBAAgB,EAChBD,qBAAqB,EACrBG,qBAAqB,EACrBD,WAAYlV,EACZoE,GAAII,EAAM3J,SAGlB+a,aAAc,IAAMvjB,KAAK+iB,qBAAoB,SAE5CM,GAZI,GAAG1V,kBAkBxB,oBACIjS,GAAI,GAAG0B,mBACPmT,UAAW,IAAW,iBAAkB,CACpC,gCAAiCkR,IAErC6B,aAAenR,GACXnS,KAAKqiB,mBAAmB,CACpBO,gBAAgB,EAChBD,qBAAqB,EACrBG,qBAAqB,EACrBD,WAAY7iB,KAAKsa,MAAM3M,MACvBoE,GAAII,EAAM3J,SAGlB+a,aAAc,IAAMvjB,KAAK+iB,qBACzBS,UAAW,EAAC,WAEZ,iBAAMjT,UAAU,kBAAiB,6BACjC,iBAAKoM,QAAQ,YAAYC,MAAM,6BAA4B,cAAa,OAAM,WAC1E,iBAAM7f,EAAE,wDACR,iBAAMA,EAAE,iBAAiB8f,KAAK,gBAGtC,oBACInhB,GAAI,GAAG0B,mBACPmT,UAAW,IAAW,iBAAkB,CACpC,gCAAiCiR,IAErC8B,aAAenR,GACXnS,KAAKqiB,mBAAmB,CACpBO,gBAAgB,EAChBD,qBAAqB,EACrBG,qBAAqB,EACrBD,WAAY7iB,KAAKsa,MAAM3M,MACvBoE,GAAII,EAAM3J,SAGlB+a,aAAc,IAAMvjB,KAAK+iB,qBACzBS,UAAW,EAAC,WAEZ,iBAAMjT,UAAU,kBAAiB,yBACjC,iBAAKoM,QAAQ,YAAYC,MAAM,6BAA4B,cAAa,OAAM,WAC1E,iBAAM7f,EAAE,sDACR,iBAAMA,EAAE,kBAAkB8f,KAAK,iBAKnD,E,kIClMJ,MAAqB4G,UAA8B,YAO/C,WAAA3U,CAAYrG,GACR4R,MAAM5R,GACNzI,KAAKsa,MAAQ,CACToJ,cAAe1jB,KAAK2jB,qBACpBC,gBAAiB,IAGrB5jB,KAAK2jB,mBAAqB3jB,KAAK2jB,mBAAmBtb,KAAKrI,MACvDA,KAAK6jB,cAAgB7jB,KAAK6jB,cAAcxb,KAAKrI,KACjD,CAEQ,aAAA6jB,CAAcC,GAClB9jB,KAAKgb,UAAU+I,IAAc,CAAGH,gBAAiB,IAAIG,EAAUH,gBAAiBE,MACpF,CAEQ,kBAAAH,G,MACJ,KAA+B,QAA1B,EAAA3jB,KAAKyI,MAAMub,uBAAe,eAAEpmB,QAC7B,MAAO,GAGX,MAIM8lB,GAJoC,QACtC1jB,KAAKyI,MAAMub,iBAIVC,QAAQC,GAAuB,OAATA,IACtB3oB,KAAI,CAAC4oB,EAAuBxW,KACzB,MAAM,YAAEsI,GAA8BkO,EAEtC,OACI,gBACI5T,UAAU,kBAAiB,WAEjB,GAAG4T,EAAQ7lB,MAAQ,MAAM6lB,EAAQC,QAAQD,EAAQE,SAASF,EAAQG,OAAM,mBAChE,GAAGH,EAAQlO,cAAa,UAE1C,gBAAK1F,UAAU,sBAAqB,UAChC,SAAC,IAAc,CACX4T,QAASA,EACTI,mBAAoBvkB,KAAKyI,MAAM8b,mBAC/BC,aAAcxkB,KAAKyI,MAAM+b,aACzBC,8BACIzkB,KAAKyI,MAAMic,mCAAmC5f,QAAQmR,IAAgB,EAE1E0O,YAAa3kB,KAAKyI,MAAMkc,iBAZ3B,GAAG1O,WAAqBtI,IAgBpC,IAGT,GAAI3N,KAAKyI,MAAMmc,eAAgB,CAC3B,MAAMC,EAAWnB,EAAc9lB,OAAS,EAAI,6BAA+B,mBACrEknB,EAAa9kB,KAAKyI,MAAMsc,SAAW/kB,KAAKyI,MAAMsc,QAAQnnB,OAAS,EACrE8lB,EAAcpW,MACV,SAAC,IAAoB,CAAsBuX,SAAUA,EAAUC,WAAYA,GAAhD,gBAEnC,CAEA,OAAOpB,CACX,CAEO,kBAAAV,CAAmBC,EAAwC+B,GAC9D,MAAMC,EACFC,KAAKC,UAAUnlB,KAAKyI,MAAM2c,4BAA8BF,KAAKC,UAAUlC,EAAUmC,0BAC/EC,EACFH,KAAKC,UAAUnlB,KAAKyI,MAAMub,mBAAqBkB,KAAKC,UAAUlC,EAAUe,iBACtEsB,EACFJ,KAAKC,UAAUnlB,KAAKyI,MAAMic,sCAC1BQ,KAAKC,UAAUlC,EAAUyB,oCACvBa,EAAsBtC,EAAU7J,YAAcpZ,KAAKyI,MAAM2Q,UACzDoM,EAAsBN,KAAKC,UAAUnlB,KAAKyI,MAAMsc,WAAaG,KAAKC,UAAUlC,EAAU8B,SAExFM,GACAJ,GACAK,GACAE,EAEAxlB,KAAKgb,SACD,CACI0I,cAAe1jB,KAAK2jB,uBAExB,KACQ3jB,KAAKyI,MAAMsc,SAAW/kB,KAAKyI,MAAMsc,QAAQnnB,QAAUoC,KAAKyI,MAAMsc,QAAQ,GAAG9O,YAAc,GACvFpE,YAAW,K,MACP,MAAM4T,EAAkBva,SAASwa,eAAe,4CAC1CC,EAAsBza,SAASwa,eAAe,kBAC9CE,EAAmB5lB,KAAKsa,MAAMsJ,gBAAgBroB,KAAKsqB,GACrDA,EAAKzW,cAAc,oBAEjB0W,EAAcH,aAAmB,EAAnBA,EAAqBI,iBAA8B,mBACjEC,EAAkBF,GAAeA,EAAY,GAC7CG,EACFD,IAAyD,QAAtC,EAAAA,aAAe,EAAfA,EAAiBtW,aAAa,gBAAQ,eAAEkQ,SAAS,gBAClEsG,EAAe,KAChBC,SAAS,CAAEC,QAAQ,IACnB3nB,KAAI,IAAMknB,aAAmB,EAAnBA,EAAqBlM,UAAUhb,IAAI,+BAC7C4nB,GACGZ,EACA,CAAEtd,SAAU,IAAMyD,OAAQ,IAAK0a,KAAM,cACrCL,EAAkB,IAAM,IAE3BI,GACGrmB,KAAKsa,MAAMsJ,gBACX,CAAEzb,SAAU8d,EAAkB,IAAO,IAAMM,YAAa,GAAID,KAAM,cAClE,KAEHD,GACGrmB,KAAKsa,MAAMsJ,gBACX,CAAEzb,SAAU,KAAOoe,WAAY,EAAGC,QAAS,IAAMF,KAAM,cACvD,QAEHD,GACGrmB,KAAKsa,MAAMsJ,gBACX,CAAEzb,SAAU,IAAMyD,OAAQ,IAAK4a,QAAS,IAAMF,KAAM,cACpD,KAEHD,GACGT,EACA,CAAEzd,SAAU,GAAKse,UAAW,EAAGD,QAAS,IAAMF,KAAM,cACpD,UAEH7nB,KAAI,K,MACD,IAAKwnB,EAAiB,CAClB,MAAMS,EAAyC,QAA7B,EAAAV,aAAe,EAAfA,EAAiBha,oBAAY,QAAI,EACnD8Z,SAAAA,EAAa9hB,SAASvG,GAAOA,EAAEgT,MAAMkW,UAAY,GAAGD,OACxD,KAER,KAAKP,SAAS,CAAES,MAAO,IAAKC,OACxBX,EACA,CAAEY,SAAU,GACZ,CAAE3e,SAAU,EAAG2e,SAAU,EAAGR,KAAM,QACrC,GACF,EACP,IAIJf,GACAvlB,KAAKgb,SAAS,CACV0I,cAAe1jB,KAAK2jB,sBAIpC,CAEO,MAAAjJ,GACH,OACI,gBACIhf,GAAIsE,KAAKyI,MAAM/M,GACf6U,UAAU,qBAAoB,qBACVvQ,KAAKsa,MAAMoJ,cAAc9lB,OAAM,8BACtBoC,KAAKyI,MAAMub,gBAAgBC,QAAQC,GAASA,EAAK5M,aAAY1Z,OAAM,UAEhG,gBAAK2S,UAAU,iCAAgC,UAC3C,SAAC,IAAQ,CACLnT,KAAM,GAAG4C,KAAKyI,MAAMse,8BACpBlI,UAAU,6BACVuE,UAAWpjB,KAAKyI,MAAM2a,UAAS,SAE9BpjB,KAAKsa,MAAMoJ,mBAKhC,EAxKO,EAAAsD,YAA+C,I,kECzCnD,MAAMC,EAAkB,IAClBC,EAAmB,G,uDCDzB,MAAMC,EAA0BpY,GACtB,MAATA,EACO,KACiB,iBAAVA,EACPA,EAAQA,EAAMqY,QAAQ,GAAGnoB,QAAQ,wBAAyB,KAAO,GAEjE8P,EAAQA,EAAM9P,QAAQ,WAAY,IAAIA,QAAQ,wBAAyB,KAAO,GAIhFooB,EAAaC,GACT,MAATA,GAA0B,IAATA,EAAoBA,EAE9BA,EACFhhB,cACArH,QAAQ,KAAM,KACdA,QAAQ,KAAM,KACdA,QAAQ,KAAM,I,mGCLpB,MAAMsoB,EAAY9e,IACrB,MAAM,aAAE+e,EAAY,UAAEjX,EAAS,KAAEkX,EAAI,UAAEC,GAAcjf,EAG/Ckf,EAAwB,sBACxBC,EAAc,SAAoC,MAClDC,EAAU,SAA0B3c,SAAS4c,MAa7CC,EAAiB,eAClB5V,IACG,MAAM,IAAEpJ,GAAQoJ,EACZ,CAAC,SAAU,OAAOyN,SAAS7W,IAC3Bye,GACJ,GAEJ,CAACA,IAGL,aAAgB,KACZ3V,YAAW,KAtBM,MACjB,MAAMmW,EAAQJ,EAAY/N,QAC1BmO,IAAUA,EAAMvO,UAAU+F,SAASmI,IAA0BK,EAAMvO,UAAUhb,IAAIkpB,EAAsB,EAqBnGM,EAAc,GACf,KACH/c,SAASb,iBAAiB,UAAW0d,GAC9B,IAAM7c,SAAS+E,oBAAoB,UAAW8X,KACtD,IAEH,aAAgB,KACZ,MAAMrsB,EAAKmW,YAAW,KAzBJ,MAClB,MAAMmW,EAAQJ,EAAY/N,QAC1BmO,GAASA,EAAMvO,UAAU+F,SAASmI,IAA0BK,EAAMvO,UAAUE,OAAOgO,GACnFK,GAASA,EAAMtY,aAAa,cAAgBsY,EAAMpY,aAAa,YAAa,MAAM,EAuB9EsY,EAAe,GArCD,KAuClB,MAAO,KACHjV,aAAavX,EAAG,CACnB,GACF,CA1CmB,MA4CtB,aAAgB,KACZ,MAAMA,EAAKmW,YAAW,KAClB2V,GAAc,GA7CcW,MA+ChC,MAAO,KACHlV,aAAavX,EAAG,CACnB,GACF,CAlDiCysB,KAkDHX,IAEjC,MAAMY,GACF,2BACY,WACR7X,UAAW,IAAWA,EAAW,eAAc,YACrC,SAAQ,cACN,OACZ3F,IAAKgd,EAAW,UAEfH,IAAQ,gBAAKlX,UAAU,OAAM,SAAEkX,KAChC,gBAAKlX,UAAU,QAAO,SAAEmX,OAIhC,OAAO,eAAsBU,EAAUP,EAAQhO,QAAQ,C,mGCtEpD,MAyDDwO,EAA8B,CAChCC,WAAY,GACZvQ,YAAa,EACbwQ,WAAW,EACXxD,QAhBmC,GAiBnCyD,eAhB0B,QAmBjBC,GAAa,IAAAC,eAA2BL,GAExCM,EAAelgB,IACxB,MAAO8f,EAAWK,IAAgB,IAAAnM,WAAS,IACpCoM,EAAaL,IAAkB,IAAA/L,UAAyB,KACxDsI,EAAS+D,IAAc,IAAArM,UAAyB,KAChD1E,EAAagR,IAAkB,IAAAtM,UAAiB,IAChD6L,EAAYU,IAAiB,IAAAvM,UAAiB,IAiCrD,OA/BA,IAAA7C,YAAU,KA0BFiP,EAAYjrB,OAAS,GAzBF0X,WACnB,MAAM2T,EAAsBJ,EAAYthB,QAAO,CAACoR,EAAwBwL,IAChEA,EACO,IAAIxL,EAAcwL,EAAQlO,aAE9B0C,GACR,IAEGlD,QAAe,SACrB,GAAIA,EAAQ,CACR,MAAMyT,QAA4B,OAAuBzT,EAAQwT,GACjEH,GAAYK,GAAgB,IAAIA,KAAgBD,KAE5CA,EAAoBtrB,OAAS,GACU,OAAvCsrB,EAAoB,GAAGrR,aACgB,IAAvCqR,EAAoB,GAAGjT,aACsB,OAA7CiT,EAAoB,GAAGrR,YAAYK,QAEnC6Q,EAAeG,EAAoB,GAAGrR,YAAYE,aAClDiR,EAAcE,EAAoB,GAAGzQ,gBACrCmQ,GAAa,GAErB,GAIAQ,EACJ,GACD,CAACP,KAGA,SAACJ,EAAWY,SAAQ,CAACta,MAAK,+BAAOsZ,GAAc,CAAEC,aAAYvQ,cAAawQ,YAAWxD,UAASyD,mBAAc,SACvG/f,EAAM4H,UAEd,C,0ICvEE,MAAMiZ,GAAoB,SAAwB,CAAClnB,EAAKY,KAAQ,CACnEumB,iBAAkB,GAClBC,uBAAwB,GACxBC,cAAe,GACfC,wBAAwB,EACxBC,2BAA2B,EAC3B5E,QAAS,GACTtP,OAAQ,GACRmB,aAAStH,EACTqH,aAASrH,EACTuH,cAAe,GACf+S,QAAStU,UACL,MAAMG,QAAe,SACjBA,GACArT,EAAI,CAAEqT,UACV,EAEJoU,WAAY,KACR,MAAMjT,GAAU,UAChBxU,EAAI,CAAEwU,WAAU,EAEpBkT,WAAY,KACR,MAAMnT,GAAU,UAChBvU,EAAI,CAAEuU,WAAU,EAEpBmS,WAAYxT,MAAOqD,IAEf,MAAMoR,EAAqB,IAAIpR,MAAkB3V,IAAM+hB,SAAW,IAAIxpB,KAAKyuB,GAAQA,EAAI/T,eACjFgU,EAAqBpsB,MAAMqsB,KAAK,IAAIC,IAAIJ,IAE9C,GAAIE,EAAmBrsB,OAAS,EAAG,CAC/B,MAAMmnB,QAAgB,OAAuB/hB,IAAMyS,OAAQwU,GAAoB,WAC/E7nB,EAAI,CAAE2iB,WACV,GAEJqF,8BAA+B9U,MAAO+U,EAAiBC,GAAiB,KACpE,GAAID,EAEA,YADAjoB,EAAI,CAAEonB,uBAAwBa,IAIlCjoB,EAAI,CAAEunB,2BAA2B,UAE3B3mB,IAAM8mB,aACZ,MAAMN,QAA+B,QACjC,KACAxmB,IAAM2T,SAIN2T,IAAkBd,aAAsB,EAAtBA,EAAwB5rB,QAAS,UAC7CoF,IAAM8lB,WAAWU,EAAuBjuB,KAAI,EAAG0a,iBAAkBA,KAEvEuT,EAAuBxlB,SAASmgB,I,MAC5B,MAAMlM,EAAwB,QAAb,EAAAjV,IAAM+hB,eAAO,eAAEwF,MAAMP,GAAQA,EAAI/T,cAAgBkO,EAAQlO,cAEtEgC,IACAkM,EAAQY,QAAU9M,EACtB,KAIR7V,EAAI,CAAEonB,2BACNpnB,EAAI,CAAEunB,2BAA2B,GAAQ,EAE7Ca,iBAAkBlV,MAAOgV,GAAiB,KACtCloB,EAAI,CAAEsnB,wBAAwB,UAExB1mB,IAAM6mB,mBAGN7mB,IAAM8mB,aAGZ,MAAML,QAAsB,QAAqB,CAC7CjT,KAAM,GACNI,QAAS5T,IAAM4T,SAAW,GAC1BC,cAAe7T,IAAM6T,cACrBF,QAAS3T,IAAM2T,SAAW,KAI1B2T,IAAkBb,aAAa,EAAbA,EAAe7rB,QAAS,UACpCoF,IAAM8lB,WAAWW,EAAcluB,KAAI,EAAG0a,iBAAkBA,KAE9DwT,EAAczlB,SAASmgB,I,MACnB,MAAMlM,EAAwB,QAAb,EAAAjV,IAAM+hB,eAAO,eAAEwF,MAAMP,GAAQA,EAAI/T,cAAgBkO,EAAQlO,cAEtEgC,IACAkM,EAAQY,QAAU9M,EACtB,KAKR7V,EAAI,CAAEqnB,kBACNrnB,EAAI,CAAEsnB,wBAAwB,GAAQ,EAE1Ce,wBAAyB,CAACC,EAAoBC,KAC1CD,GAAaC,GAAqBA,GAAmB,EAEzDC,sBAAuBtV,MAAOW,IAC1B,MAAM4U,EAA4B,CAC9B1Y,MAAO,KAAoB2Y,OAAOC,MAAMC,qBACxCC,YAAa,CACT7tB,KAAM,WACNkV,SAAU2D,EAAYpU,aAG9B,KAAoBgpB,GACpB,MAAM1Y,EAAQ,IAAI+Y,YAAY,iBAAkB,CAC5CC,SAAS,EACTC,OAAQ,CACJnV,cACAhE,SAAUqD,MAAO5D,IACb,MAAMgZ,QAAkBhZ,EACxB1O,IAAMynB,wBAAwBC,GAAW,KACrCtoB,GAAKkY,IAAU,CAAGiP,iBAAkB,IAAIjP,EAAMiP,iBAAkBtT,MAAgB,GAClF,KAId/K,SAASC,gBAAgBkgB,cAAclZ,EAAM,EAEjDmZ,2BAA4BhW,MAAOW,EAAqBsV,KACpD,MAAMV,EAA4B,CAC9B1Y,MAAO,KAAoB2Y,OAAOC,MAAMS,IACxCP,YAAa,CACT7tB,KAAM,wBACNkV,SAAU2D,EAAYpU,aAG9B,KAAoBgpB,GACpB,MAAM1Y,EAAQ,IAAI+Y,YAAY,oBAAqB,CAC/CC,SAAS,EACTC,OAAQ,CACJnV,cACAhE,SAAUqD,MAAO5D,IACb,MAAMgZ,QAAkBhZ,EACxB1O,IAAMynB,wBAAwBC,GAAW,IACrCtoB,GAAKkY,IAAU,CACXiP,iBAAkBjP,EAAMiP,iBAAiBtF,QACpCwH,GAAwBA,IAAwBxV,SAG5D,KAKbsV,IAAgB,SAEhBrgB,SAASC,gBAAgBkgB,cAAclZ,EAAM,EAEjDuZ,oBAAqBpW,UACjB,MAAgCiU,IAC5BnnB,EAAI,CAAEmnB,oBAAmB,GAC3B,EAENoC,aAAcrW,MACVW,EACA2V,EACAC,KAEA,IACI,MAAM1V,EAAM,uCAAuCF,IAC7CnB,QAAiBM,MAAMe,EAAK,CAAE2V,KAAM,SAC1C,IAAIhX,EAAS4C,GAGN,MAAwB,MAApB5C,EAASiX,OACV,IAAIhwB,MAAM,aAEV,IAAIA,MAAM,0BAJhB6vB,QADmB9W,EAASO,OAOpC,CAAE,MAAOoF,GACLoR,EAAcpR,EAClB,OAKRve,OAAO8vB,OAAO5hB,OAAQ,CAAE6hB,mBAAoB3C,G,6DC/NrC,MAAM4C,EAAuD,EAAGrH,WAAUC,iBAEzE,gBAAKvU,UAAU,kBAAiB,UAC5B,gBAAKA,UAAU,sBAAqB,UAChC,gBAAKA,UAAW,8BAA8BuU,GAAc,YAAW,UACnE,iBAAKvU,UAAU,6CAA4C,WACvD,eAAIA,UAAU,sCAAqC,SAAEsU,KACrD,cAAGnpB,GAAG,oBAAoBynB,KAAK,YAAY5S,UAAU,kCAAiC,oCALjE,e,qEC0F7C,QAjGA,MACI,oBAAW4b,GACP,OACI,iBAAKvP,MAAM,6BAA6BD,QAAQ,YAAW,cAAa,OAAM,WAC1E,iBAAM5f,EAAE,iEACR,iBAAM8f,KAAK,OAAO9f,EAAE,sBAGhC,CACA,mBAAWqvB,GACP,OACI,iBAAKzP,QAAQ,YAAYC,MAAM,6BAA4B,cAAa,OAAM,WAC1E,iBAAM7f,EAAE,yCACR,iBAAMA,EAAE,gBAAgB8f,KAAK,WAGzC,CACA,uBAAWwP,GACP,OACI,iBAAK1P,QAAQ,YAAYC,MAAM,6BAA4B,cAAa,OAAM,WAC1E,iBAAM7f,EAAE,0GACR,iBAAMA,EAAE,gBAAgB8f,KAAK,WAGzC,CACA,0BAAWyP,GACP,OACI,gBAAK1P,MAAM,6BAA6B/Q,MAAM,KAAKD,OAAO,KAAK+Q,QAAQ,YAAYE,KAAK,OAAM,UAC1F,iBACI0P,SAAS,UACTC,SAAS,UACTzvB,EAAE,o/BACF8f,KAAK,kBAIrB,CACA,wBAAW4P,GACP,OACI,gBACI/wB,GAAG,qCACHkhB,MAAM,6BACN/Q,MAAM,SACND,OAAO,QACP+Q,QAAQ,mBAAkB,cACd,OACZ+P,UAAU,QAAO,UAEjB,iBACIhxB,GAAG,sCACHqB,EAAE,+ZACF4vB,UAAU,wBACV9P,KAAK,OACL+P,OAAO,OACPC,cAAc,QACdC,eAAe,QACfC,YAAY,OAI5B,CACA,uBAAWC,GACP,OACI,iBAAKpQ,MAAM,6BAA6B/Q,MAAM,KAAKD,OAAO,KAAK+Q,QAAQ,YAAW,cAAa,OAAM,WACjG,iBACI5f,EAAE,4VACF4vB,UAAU,mBACV9P,KAAK,UAET,iBACI9f,EAAE,wUACF4vB,UAAU,mBACV9P,KAAK,UAET,iBACI9f,EAAE,2UACF4vB,UAAU,mBACV9P,KAAK,UAET,iBAAM3f,EAAE,QAAQ2O,MAAM,OAAOD,OAAO,OAAOiR,KAAK,aAChD,iBAAM3f,EAAE,OAAO2O,MAAM,OAAOD,OAAO,OAAOiR,KAAK,aAC/C,iBAAMhd,EAAE,OAAO3C,EAAE,QAAQ2O,MAAM,OAAOD,OAAO,OAAOiR,KAAK,aACzD,iBACI9f,EAAE,+EACF4vB,UAAU,mBACV9P,KAAK,aAET,iBACI9f,EAAE,uFACF4vB,UAAU,mBACV9P,KAAK,cAIrB,E,kLChGG,MAAMoQ,EAAe,CACxB,CACIvxB,GAAI,GACJwxB,YAAa,SAEjB,CACIxxB,GAAI,GACJwxB,YAAa,kBAEjB,CACIxxB,GAAI,GACJwxB,YAAa,UAEjB,CACIxxB,GAAI,GACJwxB,YAAa,QAEjB,CACIxxB,GAAI,GACJwxB,YAAa,UAEjB,CACIxxB,GAAI,GACJwxB,YAAa,kBAEjB,CACIxxB,GAAI,IACJwxB,YAAa,oBAEjB,CACIxxB,GAAI,IACJwxB,YAAa,oBAEjB,CACIxxB,GAAI,IACJwxB,YAAa,gBAEjB,CACIxxB,GAAI,IACJwxB,YAAa,uBAEjB,CACIxxB,GAAI,IACJwxB,YAAa,UAEjB,CACIxxB,GAAI,IACJwxB,YAAa,uBAEjB,CACIxxB,GAAI,IACJwxB,YAAa,OAEjB,CACIxxB,GAAI,IACJwxB,YAAa,mBAEjB,CACIxxB,GAAI,IACJwxB,YAAa,6BAEjB,CACIxxB,GAAI,IACJwxB,YAAa,mBAEjB,CACIxxB,GAAI,IACJwxB,YAAa,yBAEjB,CACIxxB,GAAI,IACJwxB,YAAa,6BAEjB,CACIxxB,GAAI,IACJwxB,YAAa,mBAEjB,CACIxxB,GAAI,IACJwxB,YAAa,wBCpEfC,EAAoB,CAAC9R,EAAOtM,EAAOqe,KACjCre,GAA0B,iBAAVA,GAChBqe,EAAU9f,KAAK,CACX+N,QACAtM,SAER,EAUEse,EAAoB,CAAChS,EAAOtM,EAAOue,EAAWF,KAChD,GAAqB,iBAAVre,EAAoB,CAC3B,MAAMwe,EAActqB,OAAO8L,GAE3Bqe,EAAU9f,KAAK,CACX+N,QACAtM,MAAOue,GAAY,EAAAlqB,EAAA,GAAuBmqB,GAAeA,EAAY1rB,YAE7E,GASE2rB,EAAyB,CAACnS,EAAOtM,EAAOqe,KACtCvvB,MAAMgP,QAAQkC,IAAUA,EAAMnR,OAAS,GAAKmR,EAAM0e,OAAO1vB,GAAmB,iBAANA,KACtEqvB,EAAU9f,KAAK,CACX+N,QACAtM,MAAOA,EAAMjR,KAAK,OAE1B,EAGE4vB,EAAqB,CAAC,YACtBC,EAAgC,CAClCC,YAAa,eACbC,YAAa,gBACbC,aAAc,oBACdC,SAAU,YACVC,gBAAiB,qBACjBC,cAAe,iBACfC,iBAAkB,oBAClBC,aAAc,iBAGLC,EAAsCC,IAC/C,MAAM,KACFvG,EAAI,YACJwG,EAAW,OACXC,EAAM,MACNC,EAAK,QACLC,EAAO,UACPC,EAAS,MACTpU,EAAK,SACLqU,EAAQ,UACRC,EAAS,QACTC,EAAO,WACPC,GACAT,EAEEjB,EAAY,GAQlB,GANAD,EAAkB,OAAQrF,EAAMsF,GAChCD,EAAkB,eAAgBmB,EAAalB,GAC/CD,EAAkB,SAAUoB,EAAQnB,GACpCI,EAAuB,OAAQgB,EAAOpB,GACtCC,EAAkB,UAAWoB,GAAS,EAAMrB,GAExCsB,GAAapU,EAAO,CACpB,IAAIyU,EAAYL,GAAa,GACzBpU,IACAyU,EAAY,GAAGA,IAAYA,EAAUnxB,OAAS,KAAO,KAAK0c,KAG9D8S,EAAU9f,KAAK,CACX+N,MAAO,cACPtM,MAAOggB,GAEf,CAGA,GAFAvB,EAAuB,UAAWmB,EAAUvB,GAEvCwB,aAAS,EAATA,EAAWhxB,OAKT,CACH,MAAMoxB,EAAeJ,EAChBrzB,KAAK0zB,IACF,MAAMC,EAA0BjC,EAAa1C,MAAM4E,GAAQA,EAAIzzB,MAAQuzB,IACvE,OAAKC,EAIEA,EAAwBhC,YAHpB,IAG+B,IAE7CjJ,QAAQgL,KAASA,IAEtBzB,EAAuB,YAAawB,EAAc5B,EACtD,MAjBIA,EAAU9f,KAAK,CACX+N,MAAO,YACPtM,MAAO,SAiBf,GAAI8f,GAAWC,EAAY,CACvB,IAAIM,EAAMP,EAAUA,EAAQhtB,WAAa,GACrCitB,IACAM,EAAM,GAAGA,IAAMA,EAAM,IAAM,KAAKN,EAAWjtB,cAG/CurB,EAAU9f,KAAK,CACX+N,MAAO,mBACPtM,MAAOqgB,GAEf,CAEA,OAAOhC,CAAS,EAGPiC,EAA0BhB,IACnC,MAAM,cAAEiB,EAAa,cAAEC,GAAkBlB,EAEnCjB,EAAY,GAKlB,OAHAD,EAAkB,WAAYmC,EAAelC,GAC7CD,EAAkB,WAAYoC,EAAenC,GAEtCA,CAAS,EAGPoC,EAA0BnB,IACnC,MAAM,WACFoB,EAAU,WACVC,EAAU,aACVC,EAAY,gBACZC,EAAe,WACfC,EAAU,cACVC,EAAa,UACbC,EAAS,SACTC,EAAQ,WACRC,EAAU,aACVC,GACA7B,EAEEjB,EAAY,GASlB,GANIqC,GAAcxsB,OAAOwsB,EAAWxwB,QAAQ,WAAY,KAAO,GAC3DkuB,EAAkB,cAAesC,EAAYrC,GAGjDD,EAAkB,cAAeuC,EAAYtC,GAEzCuC,GAAgBC,EAAiB,CACjC,IAAIO,EAAcR,EAAeA,EAAa9tB,WAAa,GACvD+tB,IACAO,EAAc,GAAGA,IAAcA,EAAc,IAAM,KAAKP,EAAgB/tB,kBAG5EurB,EAAU9f,KAAK,CACX+N,MAAO,gBACPtM,MAAOohB,GAEf,CAEA,GAAIN,GAAcC,EAAe,CAC7B,IAAIM,EAAkBP,EAAaA,EAAWhuB,WAAa,GACvDiuB,IACAM,EAAkB,GAAGA,IAAkBA,EAAkB,IAAM,KAAKN,EAAcjuB,kBAGtFurB,EAAU9f,KAAK,CACX+N,MAAO,aACPtM,MAAOqhB,GAEf,CAUA,OARIL,GAA2B,MAAdA,GACb1C,EAAkB,YAAa0C,GAAW,EAAO3C,GAGrDD,EAAkB,YAAa6C,EAAU5C,GACzCD,EAAkB,cAAe8C,EAAY7C,GAC7CD,EAAkB,eAAgB+C,EAAc9C,GAEzCA,CAAS,EAGPiD,EAA8BhC,IACvC,MAAM,oBAAEiC,GAAwBjC,EAEhC,OAAKiC,GAAsD,IAA/BA,EAAoB1yB,OAIzC0yB,EAAoB/0B,KAAKsB,IAAM,CAClCwe,MAAO,KACPtM,MAAOlS,EAAEynB,WALF,EAMR,EAGMiM,EAA8BlC,IACvC,MAAM,WAAEmC,GAAenC,EAEvB,OAAKmC,EAKsBA,EACtBvM,QAAQnnB,IAAO4wB,EAAmB9N,SAAS9iB,aAAC,EAADA,EAAGkC,iBAC9CzD,KAAKuB,GAAM6wB,EAA8B7wB,aAAC,EAADA,EAAGkC,gBAAkBlC,IAEzCvB,KAAKuB,IAAM,CACjCue,MAAO,KACPtM,MAAOjS,MAVA,EAWR,EAGM2zB,EAA4BpC,IACrC,MAAM,aAAEqC,EAAY,SAAEC,GAAatC,EAEnC,IAAIjB,EAAY,GAQhB,GAPIuD,IACAvD,EAAYuD,EAASp1B,KAAKsB,IAAM,CAC5Bwe,MAAO,KACPtM,MAAOlS,OAIa,iBAAjB6zB,EAA2B,CAClC,IAAIE,EAAuB,QACvBF,EAAe,GAAKA,EAAe,EACnCE,EAAuB,gBAChBF,GAAgB,IACvBE,EAAuB,UAG3BxD,EAAUyD,QAAQ,CACdxV,MAAO,kBACPtM,MAAO,GAAG6hB,MAAyBF,MAE3C,CAEA,OAAOtD,CAAS,EAGP0D,EAAqCzC,IAC9C,MAAM,cAAE0C,EAAa,gBAAEC,GAAoB3C,EAErCjB,EAAY,GAUlB,MAR6B,iBAAlB2D,GAAgD,IAAlBA,GACrC5D,EAAkB,iBAAkB,GAAGlqB,OAAO8tB,GAAe3J,QAAQ,OAAQgG,GAG7E4D,GACA3D,EAAkB,oBAAqB2D,GAAiB,EAAM5D,GAG3DA,CAAS,ECjQd6D,EAAU,EAAGC,QAAOpa,YACtB,MAAMqa,GAAa,IAAAC,UAAQ,IAAMta,EAAMmN,QAAQoN,KAASA,EAAGhW,SAAQ,CAACvE,IAC9Dwa,GAAgB,IAAAF,UAAQ,IAAMta,EAAMmN,QAAQoN,IAAQA,EAAGhW,SAAQ,CAACvE,IAItE,OAFIA,EAAMlZ,OAAS,IAAG,wBAEI,IAAtBuzB,EAAWvzB,QAAyC,IAAzB0zB,EAAc1zB,OAClC,KAIG,iBAAVszB,GAEI,gCACI,wBAAKA,KACL,iBAAK3gB,UAAU,mBAAkB,WAC7B,yBAAMuG,EAAM,GAAGuE,SACf,yBAAMvE,EAAM,GAAG/H,YAEnB,gBAAKwB,UAAU,mBAAkB,SAC5BuG,EAAMpU,MAAM,GAAGnH,KAAI,CAAC2oB,EAAM1nB,KACvB,yBAAc0nB,EAAKnV,OAATvS,UAQ1B80B,EAAc1zB,SAAWkZ,EAAMlZ,QAE3B,gCACI,wBAAKszB,KACL,gBAAK3gB,UAAU,mBAAkB,SAC5BuG,EAAMvb,KAAI,CAAC2oB,EAAM1nB,KACd,yBAAc0nB,EAAKnV,OAATvS,WAS1B,gCACI,wBAAK00B,IACJpa,EAAMvb,KAAI,CAAC2oB,EAAM1nB,KACd,iBAAa+T,UAAU,mBAAkB,WACrC,yBAAM2T,EAAK7I,SACX,yBAAM6I,EAAKnV,UAFLvS,OAMrB,EAGQ+0B,EAAuB,EAAGnY,YAAW+K,UAASqN,yB,MACvD,OACI,SAACC,EAAA,EAAM,CAACrY,UAAWA,EAAWC,QAAS,IAAMmY,GAAmB,GAAM,UAClE,iBAAKjhB,UAAU,wBAAuB,WAClC,4CACA,iBAAKA,UAAU,eAAc,WACzB,4BACI,4BAAiBxB,MAA0B,QAAnB,EAAAoV,EAAQlO,mBAAW,eAAEpU,aAA8B,SACpEsiB,EAAQlO,gBAEnB,4BACI,4BAAiBlH,MAAOoV,EAAQuN,MAAuB,OAClDvN,EAAQuN,WAGrB,iBAAKnhB,UAAU,oBAAmB,WAC9B,SAAC0gB,EAAO,CAACC,MAAM,sBAAsBpa,MAAOsX,EAAmCjK,MAC/E,SAAC8M,EAAO,CAACC,MAAM,SAASpa,MAAOuY,EAAuBlL,MACtD,SAAC8M,EAAO,CAACC,MAAM,SAASpa,MAAO0Y,EAAuBrL,MACtD,SAAC8M,EAAO,CAACC,MAAM,eAAepa,MAAOuZ,EAA2BlM,MAChE,SAAC8M,EAAO,CAACC,MAAM,aAAapa,MAAOyZ,EAA2BpM,MAC9D,SAAC8M,EAAO,CAACC,MAAM,eAAepa,MAAO2Z,EAAyBtM,MAC9D,SAAC8M,EAAO,CAACC,MAAM,oBAAwBpa,MAAOga,EAAkC3M,YAI/F,EC5EQwN,EAAiB,EAC1BxN,UACAI,qBACAC,eACAoN,aAAY,EACZjN,kBAEA,MAAM/Z,GAAM,IAAAuO,QAAO,MACbkV,GAAM,OAAoBlK,IACzB0N,EAAgBC,IAAqB,IAAArV,WAAkB,IACvD2L,EAAU2J,IAAe,IAAAtV,UAAuD,CACnFgL,UAAMnY,EACN0iB,KAAM,GACNC,QAAQ,KAELC,EAAiBV,IAAsB,IAAA/U,WAAS,GACjD0V,GAAa,QAAgBhO,GAC7BiO,GAAa,IAAAC,YAAW5J,EAAA,IAiBxB,iBAAEc,EAAgB,sBAAEqB,EAAqB,2BAAEU,IAA+B,QAC5E,QAAYhR,IAAU,CAClBiP,iBAAkBjP,EAAMiP,iBACxBqB,sBAAuBtQ,EAAMsQ,sBAC7BU,2BAA4BhR,EAAMgR,gCAIpCrT,EAAWma,EAAWrN,QAAQwF,MAAMxtB,GAAMA,EAAEkZ,cAAgBkO,EAAQlO,cAC1E,IAAIqc,EACAra,IACAqa,EA1BgC,CAACra,IACjC,MAAM,eACFQ,EACAZ,aAAa,YAAEE,EAAW,wBAAED,EAAuB,kBAAES,EAAiB,WAAEP,EAAU,iBAAEua,IACpFta,EACJ,MAAO,CACHF,YAAaA,EACbQ,kBAAmBA,EACnB+P,WAAY7P,EACZX,wBAAyBA,EACzBE,WAAYA,EACZua,mBACH,EAcgBC,CAA4Bva,IAGjD,MAmDMwa,EAAqB,CACvBT,KAAM,SACNvK,KAAM,IAAM9N,OACZ+Y,QAAS,KACLC,IACA,MAEM9H,EAA4B,CAC9B1Y,MAFU,KAAoB2Y,OAAOC,MAAMS,IAG3CP,YAAa,CACT7tB,KALK,SAMLkV,SAAU6R,EAAQlO,YAAYpU,aAGtC+wB,EAAA,GAAoB/H,EAAQ,EAEhCta,UAAW,2BAGf,IAAAqJ,YAAU,KACNkY,EAAkBvI,EAAiB3J,SAASuE,EAAQlO,aAAa,GAClE,CAACsT,EAAkBpF,EAAQlO,cAE9B,MAAM4c,EAAmB,KACrBf,EAAkBD,GAEdA,EACAvG,EAA2BnH,EAAQlO,aAEnC2U,EAAsBzG,EAAQlO,YAClC,EAYE0c,EAA0Brd,UACxBiP,GACAA,EAAmBJ,GAEvBmH,EAA2BnH,EAAQlO,aAAa,EAAK,EAGnD6c,EAAmBxd,UACjByd,UAAUC,MACVD,UACKC,MAAM,CACH9B,MAAO,GAAGhmB,SAASgmB,SACnBc,KAAM,aAAa9mB,SAASgmB,SAC5B/a,IAAK,GAAG/L,OAAO6oB,SAASC,cAAc/O,EAAQlO,gBAEjDpB,MAAK,IAAMmE,QAAQC,IAAI,+BACvBjE,OAAOyF,GAAUzB,QAAQC,IAAI,yBAA0BwB,YAEtDsY,UAAUI,UAAUC,UAAU,GAAGhpB,OAAO6oB,SAASC,cAAc/O,EAAQlO,eAC7E8b,EAAY,CAAEtK,KAAM,IAAMuL,MAAOf,QAAQ,EAAMD,KAAM,kCACzD,EAoEJ,OAtDA,IAAApY,YAAU,KACN,MAAMyZ,EAAkBv3B,I,YAEpB,MAAMw3B,EAAyD,QAAtC,EAAwB,QAAzB,EAACx3B,EAAE0M,cAAsB,eAAE+qB,QAAQ,YAAI,eAAE9Z,UAGjE,IACI6Z,aAAe,EAAfA,EAAiB9T,SAAS,iCAC1B8T,aAAe,EAAfA,EAAiB9T,SAAS,oCAC5B,CAEE1jB,EAAE2iB,iBAEF,MAAM+U,EAA8D,QAA5C,EAAwB,QAAzB,EAAC13B,EAAE0M,cAAsB,eAAE+qB,QAAQ,kBAAU,eAAE73B,GAEhEyW,EADuBqhB,GAAiB,CAAC,aAAc,4BAA4B5T,SAAS4T,GAC7D,KAAoB1I,OAAOC,MAAM0I,oBAAsB,KAAoB3I,OAAOC,MAAMS,KAG7H,QAAU,CACNrZ,QACA8Y,YAAa,CACT7tB,KAAM,CAACixB,EAAI/vB,KAAM+vB,EAAIjK,KAAMiK,EAAIhK,MAAOgK,EAAI/J,MAAML,QAAQC,GAASA,IAAMpmB,KAAK,KAC5EwU,SAAUqS,GAId+O,gBAAiB,CACbC,sBAAuB,GAAGtF,EAAIpY,cAC9BA,YAAa,GAAGoY,EAAIpY,eAGxB7Z,OAAQ,CACJw3B,iBAAkB,eAAejP,OAKzC9S,YAAW,KACPzH,OAAO6oB,SAAS9P,KAAO,QAAQkL,EAAIpY,aAAa,GACjD,KAAoB4d,eAC3B,GAIEhO,EAAOjb,EAAIiP,QAEjB,GAAIgM,EAEA,OADAA,EAAKxb,iBAAiB,QAASgpB,GACxB,KACHxN,EAAK5V,oBAAoB,QAASojB,EAAe,CAEzD,GACD,CAAC1O,EAAa0J,EAAIpY,YAAaoY,EAAI/vB,KAAM+vB,EAAIjK,KAAMiK,EAAIhK,MAAOgK,EAAI/J,QAGjE,iBAAK1Z,IAAKA,EAAG,WACT,SAAC,KAAY,WACT,SAAC,KAAO,CACJyjB,IAAKA,EACLyF,kBAAkB,EAClBC,SAAU5P,EAAQ6P,UAClBC,eAAe,EACfC,YAAY,QAAqB/P,EAAQgQ,WAAYhQ,EAAQ7M,YAC7D8c,YAAY,WACZjC,WAAYA,EACZkC,WAAYxC,EACZyC,UAjMK,CAACnQ,IAClB,MAAMmQ,EAAY,CACd,CACItC,MAASH,EAAiB,cAAgB,UAApC,aACNpK,KAAM,IAAM8M,cACZ7B,QAAS,KACLG,GAAkB,EAEtBtiB,UAAW,6BAA4BshB,EAAiB,QAAU,KAEtE,CACIG,KAAM,QACNvK,KAAM,IAAMuL,MACZN,QAAS,KACLI,IACA,MAAMjI,EAA4B,CAC9B1Y,MAAO,KAAoB2Y,OAAOC,MAAMS,IACxCP,YAAa,CACT7tB,KAAM,QACNkV,SAAU6R,EAAQlO,YAAYpU,aAGtC+wB,EAAA,GAAoB/H,EAAQ,EAEhCta,UAAW,0BAwBnB,OApBI4T,EAAQ7J,OACRga,EAAUhnB,KAAK,CACX0kB,KAAM,mBACNvK,KAAM,IAAM+M,qBACZ9B,QAAS,KACL,MAAM7H,EAA4B,CAC9B1Y,MAAO,KAAoB2Y,OAAOC,MAAMS,IACxCP,YAAa,CACT7tB,KAAM,mBACNkV,SAAU6R,EAAQlO,YAAYpU,aAGtC+wB,EAAA,GAAoB/H,GAEpB2G,GAAmB,EAAK,EAE5BjhB,UAAW,6BAIZ+jB,CAAS,EAiJOG,CAAatQ,GACxBuQ,iBAAkBlQ,EAAeiO,OAAqBnjB,EACtDqlB,WAAY9B,EACZ+B,aAAc/B,EACdlH,aAhHa,CACzB1V,EACA2V,EACAC,IClKDvW,eACHW,EACA2V,EACAC,GAEA,IACI,MAAM1V,EAAM,uCAAuCF,IAC7C4e,QAAYzf,MAAMe,EAAK,CAAE2V,KAAM,SAC/BgJ,QAAkBD,EAAIxf,OAE5B,OADAuW,EAAgBkJ,GACTA,CACX,CAAE,MAAOra,GACLoR,EAAcpR,EAClB,CACJ,CDsJekR,CAAa1V,EAAa2V,EAAiBC,GA4GtCyG,eAAgBA,EAChBza,YAAaI,aAAQ,EAARA,EAAUJ,YACvBE,YAAaE,aAAQ,EAARA,EAAUJ,YAAYE,YACnCgd,mBAAoB5Q,EAAQ4Q,mBAC5BC,WAtFS,KACrB,MAAMnK,EAA4B,CAC9B1Y,MAAO,KAAoB2Y,OAAOC,MAAMS,IACxCP,YAAa,CACT7tB,KAAM,aACNkV,SAAU3U,OAAOwmB,EAAQlO,eAGjC2c,EAAA,GAAoB/H,EAAQ,EA+EhB+G,UAAWA,EACX3a,aAAckN,EAAQlN,aACtBge,cAAe9Q,EAAQ8Q,cACvBC,yBAAuB,OAI/B,SAAC3D,EAAoB,CACjBnY,UAAW8Y,EACX/N,QAASA,EACTqN,mBAAoBA,KAGxB,SAAC2D,EAAA,EAAyB,CACtB1N,KAAMW,EAASX,KACfwK,OAAQ7J,EAAS6J,OACjBvK,UAAWU,EAAS4J,KACpBxK,aAAc,IAAMuK,EAAY,CAAEtK,UAAMnY,EAAW2iB,QAAQ,EAAOD,KAAM,SAGnF,C,sDEvSE,MAAMoD,EAAuBC,GACzB,OAAP,wBACOA,GAAW,CACdC,WAAY,EACZ9E,WAAY,GACZ+E,aAAcF,EAAYG,eAIrBC,EAAiC,KAC1C,MAAMC,EAAmBxqB,SAASwa,eAAe,wBAC7CgQ,IACAA,EAAiBjlB,MAAMklB,QAAU,OACjC9jB,YAAW,KACP6jB,EAAiBjlB,MAAMklB,QAAU,OAAO,GACzC,MACP,C,uECTJ,MAMA,EANkC,EAAG1D,SAAQvK,YAAWD,OAAMD,kBACrDyK,GAEE,SAAC,IAAQ,CAACxK,KAAMA,EAAMlX,UAAW,gBAAiBmX,UAAWA,EAAWF,aAAcA,IAFzE,I,0ECVjB,MAAMoO,EAAY,CAAC7mB,EAAe8mB,IACjC9mB,EAGO,KAFa8mB,EAAe9mB,EAAMqY,QAAQ,GAAKrY,EAAMqY,QAAQ,IAE3CnoB,QAAQ,wBAAyB,KAEnD42B,EAAe,QAAU,KAI3BC,EAA2B/mB,GACf,iBAAVA,EACQgnB,EAAgBhnB,GAG5BA,EAGEgnB,EAAmBC,IAC5B,MACMC,EAAcC,WADNF,EACuB/2B,QAAQ,YAAa,KAC1D,MAA8B,iBAAhBg3B,GAA4BA,GAAgBA,EAAc,EAAIA,CAAW,EClB3F,IAAYE,GAAZ,SAAYA,GACR,0CACA,mCACA,6BACA,+BACA,sBACH,CAND,CAAYA,IAAAA,EAAoB,KAsCjB,MAAMC,EAcjB,WAAAtnB,CAAYunB,GACRr2B,KAAKs2B,IAAMl2B,KAAK4S,MAChBhT,KAAKu2B,MAAQF,EAAcj5B,KAC3B4C,KAAKw2B,mBAAqBH,EAAcI,kBACxCz2B,KAAK02B,gBAAkBL,EAAcM,eACrC32B,KAAK42B,aAAeP,EAActe,YAClC/X,KAAK62B,oBAAsBR,EAAcS,mBACzC92B,KAAK+2B,UAAYV,EAAcW,SAC/Bh3B,KAAKi3B,WAAa,EAClBj3B,KAAKk3B,cAAgB,EACrBl3B,KAAKm3B,YAAc,EACnBn3B,KAAKo3B,cAAgB,EACrBp3B,KAAKq3B,kBAAoBhB,EAAciB,iBAEvCt3B,KAAKu3B,0BACT,CAEA,MAAI77B,GACA,OAAOsE,KAAKs2B,GAChB,CAEA,QAAIl5B,GACA,OAAO4C,KAAKu2B,KAChB,CAEA,qBAAIE,GACA,OAAOz2B,KAAKw2B,kBAChB,CAEA,kBAAIG,GACA,OAAO32B,KAAK02B,eAChB,CAEA,eAAI3e,GACA,OAAO/X,KAAK42B,YAChB,CAEA,sBAAIE,GACA,OAAO92B,KAAK62B,mBAChB,CAEA,YAAIG,GACA,OAAOh3B,KAAK+2B,SAChB,CAEA,aAAIS,GACA,OAAOx3B,KAAKi3B,UAChB,CAEA,gBAAIQ,GACA,OAAOz3B,KAAKk3B,aAChB,CAEA,cAAIQ,GACA,OAAO13B,KAAKm3B,WAChB,CAEA,gBAAIQ,GACA,OAAO33B,KAAKo3B,aAChB,CAEQ,QAAAQ,KACF53B,KAAKs2B,GACX,CAEQ,wBAAAiB,GACJ,MAAMM,ECf6B,CACvCP,IAGA,MAAMQ,EA9BqB,CAACC,IAC5B,IAAIC,EAAsB,KAC1B,MAAMC,EAA6BF,EAAkBjB,mBAAqB,KAM1E,OAJmC,IAA/BmB,IACAD,GACK,EAAI,EAAI95B,KAAKg6B,IAAI,EAAID,EAA4BF,EAAkBf,WAAaiB,GAGrFF,EAAkBpB,gBAAkBqB,GAA4CD,EAAkBf,UAClGe,EAAkBhgB,WACrB,EAmBcogB,CDWiGn4B,MCV1Go4B,EAAgBl6B,KAAKgF,MAAM40B,GAC3BO,EAAwB,CAC1BZ,aAAc,EACdD,UAAW,GAyBf,OAG0B,IAzBGF,EAyBd15B,OAxBXy6B,EAAUZ,aAAeW,GA2BQE,EA1BKhB,EA2BxB,KADOiB,EA1BEH,IA2BJG,EAAKD,EAAI,GAAGE,QAAUF,EAAI,GAAGG,qBA1BhDJ,EAAUb,UAAYF,EAAiB,GAAGmB,qBA6B9C,SAA0BF,EAAYD,GAClC,OAAOC,EAAKD,EAAIA,EAAI16B,OAAS,GAAG86B,QAAUJ,EAAIA,EAAI16B,OAAS,GAAG66B,oBAClE,CA9BWE,CAAiBP,EAAed,IACvCe,EAAUZ,aAAeW,EACzBC,EAAUb,UAAYF,EAAiBA,EAAiB15B,OAAS,GAAG66B,sBAEpEnB,EAAiBtzB,SAAQ,CAAC40B,EAAcp8B,KACpC,GA2BR,SAA2BA,EAAW+7B,EAAYD,GAC9C,OAAOC,GAAMD,EAAI97B,GAAGg8B,QAAUF,EAAI97B,GAAGi8B,sBAAwBF,GAAMD,EAAI97B,GAAGk8B,QAAUJ,EAAI97B,GAAGi8B,oBAC/F,CA7BYI,CAAkBr8B,EAAG47B,EAAed,GAGpC,OAFAe,EAAUb,UAAYoB,EAAaH,qBACnCJ,EAAUZ,aAAeW,EAAgBC,EAAUb,UAC5Ca,GA4BnB,SAAiC77B,EAAW+7B,EAAYD,GACpD,OAAU,IAAN97B,GAII+7B,GAAMD,EAAI97B,EAAI,GAAGk8B,QAAUJ,EAAI97B,EAAI,GAAGi8B,sBACtCF,GAAMD,EAAI97B,GAAGg8B,QAAUF,EAAI97B,GAAGi8B,oBAG1C,EAnCgBK,CAAwBt8B,EAAG47B,EAAed,KAC1Ce,EAAUb,UAoC1B,SAAmCh7B,EAAW87B,GAC1C,OAAOA,EAAI97B,GAAGi8B,oBAClB,CAtCsCM,CAA0Bv8B,EAAG86B,GACnDe,EAAUZ,aAAeW,EAAgBC,EAAUb,UAE3D,KAIDa,EAMP,IAAyBE,EAAYD,CAyBrC,EDjDqC,CAAmDt4B,KAAKq3B,mBAEzFr3B,KAAKk3B,cAAgBW,EAAyBJ,aAC9Cz3B,KAAKi3B,WAAaY,EAAyBL,UAC3Cx3B,KAAKm3B,YC/BsB,CAACY,GACzBA,EAAkBN,aAAeM,EAAkBP,UD8BnC,CAA2Cx3B,MAC9DA,KAAKo3B,cC5BwB,CAACW,GAC3BA,EAAkBN,aAAeM,EAAkBP,UAAYO,EAAkBhgB,YD2B/D,CAA6C/X,KACtE,CAEO,MAAAg5B,CAAO1B,EAAmC2B,GAC7C,OAAQA,EAAgB9e,MACpB,KAAKgc,EAAqB+C,kBACtBl5B,KAAKw2B,mBAAqB74B,OAAOs7B,EAAgBlqB,OACjD,MACJ,KAAKonB,EAAqBgD,eACtBn5B,KAAK02B,gBAAkBzzB,OAAOg2B,EAAgBlqB,OAC9C,MACJ,KAAKonB,EAAqBiD,YACtBp5B,KAAK42B,aAAe3zB,OAAOg2B,EAAgBlqB,OAC3C,MACJ,KAAKonB,EAAqBkD,aACtBr5B,KAAK62B,oBAAsB5zB,OAAOg2B,EAAgBlqB,OAClD,MACJ,KAAKonB,EAAqBmD,SACtBt5B,KAAK+2B,UAAY9zB,OAAOg2B,EAAgBlqB,OACxC,MACJ,QAEI,OADAiK,QAAQC,IAAI,sCAAuCggB,EAAgB9e,MAC5Dna,KAAKs2B,IAOpB,OAJAt2B,KAAKq3B,kBAAoBC,EACzBt3B,KAAKu3B,2BACLv3B,KAAK43B,WAEE53B,KAAKs2B,GAChB,EE5JG,MAIMiD,EACJ,wB,wBCFF,MAAMC,EAAqC,CAC9CC,OAAQ,iCACRC,0BAA2B,CACvBD,OAAQ,kCACRE,cAAe,sBACfC,0BAA2B,KAC3BC,2BAA4B,KAC5BC,gBAAiB,CACb,CACIC,YAAa,kBACbC,OAAQ,8DACR3e,MAAO,QAEX,CACI0e,YAAa,gBACbC,OAAQ,4DACR3e,MAAO,UAEX,CACI0e,YAAa,SACbC,OAAQ,qDACR3e,MAAO,UAEX,CACI0e,YAAa,aACbC,OAAQ,yDACR3e,MAAO,cAEX,CACI0e,YAAa,SACbC,OAAQ,qDACR3e,MAAO,UAEX,CACI0e,YAAa,eACbC,OAAQ,2DACR3e,MAAO,gBAEX,CACI0e,YAAa,kBACbC,OAAQ,8DACR3e,MAAO,UAEX,CACI0e,YAAa,cACbC,OAAQ,0DACR3e,MAAO,eAEX,CACI0e,YAAa,iBACbC,OAAQ,6DACR3e,MAAO,UAEX,CACI0e,YAAa,oBACbC,OAAQ,gEACR3e,MAAO,QAEX,CACI0e,YAAa,UACbC,OAAQ,sDACR3e,MAAO,WAEX,CACI0e,YAAa,SACbC,OAAQ,qDACR3e,MAAO,UAEX,CACI0e,YAAa,WACbC,OAAQ,4DACR3e,MAAO,cAInB4e,oBAAqB,CACjB5e,MAAO,mBAEX6e,iBAAkB,CACd7e,MAAO,eACP8e,sBAAuB,uBAE3BC,kBAAmB,CACf/e,MAAO,gBAEXgf,mBAAoB,qBACpBC,sBAAuB,4BACvBC,iCAAkC,yBAClCC,aAAc,wBACdC,eAAgB,oBAChBC,oBAAqBtf,GACjB,8CAA8Cld,KAAKgF,MAAMkY,EAAQuf,2BAC7Dvf,EAAQrD,oBACHqD,EAAQwf,eACrBC,iBAAkB,gBC9EP,MAAMC,UAAqB,YACtC,WAAAhsB,CAAYrG,GACR4R,MAAM5R,GAENzI,KAAKsa,MAAQ,CACTygB,eAAgB,GAChBC,OAAQ,GACRC,SAAU,EACVlsB,MAAO,GACPmsB,UAAW,IAGfl7B,KAAKm7B,sBAAwBn7B,KAAKm7B,sBAAsB9yB,KAAKrI,KACjE,CAEO,iBAAA4hB,GACH,MAAMwZ,EAAap7B,KAAKyI,MAAMsG,MAAQ,EAAuC,EAAnC7Q,KAAKE,MAAM4B,KAAKyI,MAAMsG,MAAQ,GAAS,EACjF/O,KAAKq7B,aAAaD,GAClBp7B,KAAKs7B,QAAQF,EAAYp7B,KAAKyI,MAAMsG,MACxC,CAEO,kBAAAiU,CAAmBC,GAClBjjB,KAAKyI,MAAMsG,QAAUkU,EAAUlU,QAGnC/O,KAAKq7B,aAAar7B,KAAKyI,MAAMsG,OAC7B/O,KAAKs7B,QAAQrY,EAAUlU,MAAO/O,KAAKyI,MAAMsG,OAC7C,CAEO,oBAAAgT,GACC/hB,KAAKsa,MAAM2gB,UACXM,cAAcv7B,KAAKsa,MAAM2gB,SAEjC,CAEQ,YAAAI,CAAaG,GACjBx7B,KAAKgb,SAAS,CAAEkgB,UAAWl7B,KAAKyI,MAAMgzB,UAAUD,IACpD,CAEQ,OAAAF,CAAQF,EAAoBM,GAChC,MAAMV,EAASh7B,KAAK27B,qBAAqBP,EAAYM,GAEjD17B,KAAKsa,MAAM2gB,UACXM,cAAcv7B,KAAKsa,MAAM2gB,UAG7Bj7B,KAAKgb,SAAS,CACVggB,SACAC,SAAU7wB,OAAOwxB,YAAY57B,KAAKm7B,sBAAuB,IAnDtD,KAqDX,CAEQ,oBAAAQ,CAAqBP,EAAoBM,GAC7C,MAAMV,EAAS,GACTa,EAAa39B,KAAKQ,KAAK,MACvBo9B,EAAWV,EAAaM,EAE9B,IAAK,IAAIl/B,EAAI,EAAGA,GAAKq/B,EAAYr/B,GAAK,EAAG,CACrC,MAAMiB,EAAIjB,EAAIq/B,EACRvV,EAAO7oB,EAAI,GAAM,EAAIA,EAAIA,EAAS,GAAK,EAAIA,GAAKA,EAAlB,EACpCu9B,EAAO1tB,KAAKouB,EAAWI,EAAWxV,EACtC,CAEA,OAAO0U,CACX,CAEQ,qBAAAG,GACJ,GAAiC,IAA7Bn7B,KAAKsa,MAAM0gB,OAAOp9B,OAElB,YADA29B,cAAcv7B,KAAKsa,MAAM2gB,UAI7B,MAAMD,EAASh7B,KAAKsa,MAAM0gB,OACpBjsB,EAAQisB,EAAOe,MACrB,GAAqB,iBAAVhtB,EAAoB,CAC3B,MAAMgsB,EAAiB/6B,KAAKyI,MAAMgzB,UAAU1sB,GAC5C/O,KAAKgb,SAAS,CACVggB,SACAjsB,MAAOgsB,GAEf,CACJ,CAEO,MAAArgB,GACH,OACI,iCACI,6BAAe,YAAW,eAAc,EAAMnK,UAAU,kBAAiB,UACpEvQ,KAAKyI,MAAMuzB,cAAa,IAAGh8B,KAAKsa,MAAM4gB,cAE3C,gBAAK3qB,UAAU,mBAAkB,SAAEvQ,KAAKsa,MAAMvL,UAG1D,E,yCC9FJ,MAAMuS,UAAiB,YACnB,WAAAxS,CAAYrG,GACR4R,MAAM5R,GAENzI,KAAKsa,MAAQ,CACT3M,MAAO,EACP6P,QAAS,EACT+D,WAAY,GAGhBvhB,KAAK0hB,mBAAqB1hB,KAAK0hB,mBAAmBrZ,KAAKrI,KAC3D,CAKO,kBAAAgjB,CAAmBC,EAAgB+B,GAClC/B,EAAU5S,WAAarQ,KAAKyI,MAAM4H,UAAYrQ,KAAK6hB,aACnD7hB,KAAK6hB,YAAYoa,SAEzB,CAEO,iBAAAra,GACH,MAAM,KAAExkB,EAAI,UAAEyhB,GAAc7e,KAAKyI,OAC3B,WAAEkV,EAAU,oBAAE0D,IAAwB,OAAa,CACrDxC,YACAqB,UAAW,IAAI9iB,oBACfyjB,WAAY,IAAIzjB,mBAChB0jB,WAAY,IAAI1jB,mBAChB0hB,UAAW,QAAQ1hB,aACnBujB,OAAQ,EACRI,WAAY,CACR,IAAK,CACDG,YAAa,EACbpK,MAAO,IACP0G,QAAS,GAEb,IAAK,CACD1G,MAAO,IACP0G,QAAS,GAEb,IAAK,CACD0D,YAAa,EACbpK,MAAO,IACP0G,QAAS,GAEb,IAAK,CACD1G,MAAO,KAEX,IAAK,CACDA,MAAO,KAEX,IAAK,CACDA,MAAO,KAEX,IAAK,CACDA,MAAO,KAEX,IAAK,CACDA,MAAO,KAEX,EAAG,CACCoK,YAAa,GACbpK,MAAO,QAInB9W,KAAK6hB,YAAclE,EACnB3d,KAAKiiB,qBAAuBZ,EAExBrhB,KAAK6hB,aACL7hB,KAAK6hB,YAAYM,OAAOnS,GAAG,eAAgBhQ,KAAK0hB,mBAExD,CAEO,oBAAAK,GACC/hB,KAAK6hB,aAAa7hB,KAAK6hB,YAAYG,UACnChiB,KAAKiiB,sBAAsBjiB,KAAKiiB,sBACxC,CAEQ,kBAAAP,CAAmBU,GACvBpiB,KAAKgb,SAAS,CAAErN,MAAOyU,EAAKzU,MAAO6P,QAAS4E,EAAK5E,QAAS+D,WAAYa,EAAKb,YAC/E,CAEQ,cAAAE,GACJ,OAAOzhB,KAAKsa,MAAM3M,MAAQ,CAC9B,CAEQ,cAAA6T,GACJ,QAAKxhB,KAAKsa,MAAM3M,OAAU3N,KAAKsa,MAAMkD,SAAYxd,KAAKsa,MAAMiH,aAGjDvhB,KAAKsa,MAAM3M,MAA6B,IAArB3N,KAAKsa,MAAMkD,QAAgBxd,KAAKsa,MAAMiH,UAExE,CAEO,MAAA7G,GACH,MAAM,SAAErK,EAAQ,KAAEjT,EAAI,UAAEyhB,GAAc7e,KAAKyI,MAErCgZ,EAAiBzhB,KAAKyhB,iBACxBD,EAAiBxhB,KAAKwhB,iBAE1B,OACI,iCACI,eAAG9lB,GAAI,OAAO0B,aAAiBmT,UAAU,YAAY4S,KAAMtE,EAAS,kBAC1DzhB,EAAK6B,QAAQ,KAAM,KAAI,gBAEjC,iBACIsR,UAAW,IAAW,yBAA0B,CAC5C,WAAgBkR,GAAkBD,IACpC,WAEF,iBAAK9lB,GAAI,GAAG0B,oBAAwBmT,UAAU,mBAAkB,UAC3D,WAAehV,IAAI8U,GAAU,CAACgT,EAAyB1V,KACpD,gBAAK4C,UAAU,kBAAiB,SAC3B8S,GADiC,GAAG1V,cAI7C,gBAAK4C,UAAU,mBAAsB,mBAEzC,iBAAKA,UAAU,2BAA0B,WACrC,gBACIA,UAAW,IAAW,8BAA+B,CACjD,uCAA0CkR,OAGlD,oBACI/lB,GAAI,GAAG0B,mBACPmT,UAAWkR,EAAiB,4CAA8C,kBAC1E+B,UAAW,EAAC,WAEZ,iBAAMjT,UAAU,kBAAiB,6BACjC,iBAAKoM,QAAQ,YAAYC,MAAM,6BAA4B,cAAa,OAAM,WAC1E,iBAAM7f,EAAE,wDACR,iBAAMA,EAAE,iBAAiB8f,KAAK,mBAI1C,iBAAKtM,UAAU,2BAA0B,WACrC,gBACIA,UAAW,IAAW,8BAA+B,CACjD,uCAA0CiR,OAGlD,oBACI9lB,GAAI,GAAG0B,mBACPmT,UAAWiR,EAAiB,4CAA8C,kBAC1EgC,UAAW,EAAC,WAEZ,iBAAMjT,UAAU,kBAAiB,yBACjC,iBAAKoM,QAAQ,YAAYC,MAAM,6BAA4B,cAAa,OAAM,WAC1E,iBAAM7f,EAAE,sDACR,iBAAMA,EAAE,kBAAkB8f,KAAK,uBAO3D,EAGJ,UC7HA,EA1CyBpU,IAEjB,iCAEgBA,EAAMyzB,UAClB3rB,UAAW,IAAW,oBAAqB,CACvC,SAAc9H,EAAM0zB,WAExBzJ,QAAU52B,GAAW2M,EAAMiqB,QAAQjqB,EAAM2zB,aAAY,WAErD,gBACI7rB,UAAW,IAAW,iBAAkB,CACpC,0BAA2B9H,EAAM0zB,WACnC,UAEF,gBAAK5rB,UAAU,sBAAqB,UAChC,iBACIoM,QAAQ,YACR/Q,OAAO,KACPC,MAAM,KACNgR,KAAK,OAAM,cACC,OACZtM,UAAU,YAAW,WAErB,iBAAMxT,EAAE,gBAAgB8f,KAAK,UAC7B,iBAAM9f,EAAE,8DAKpB,gBACIs/B,IAAI,GACJ9rB,UAAU,yBACV+rB,IAAK7zB,EAAM2zB,YAAYpC,OACvBnuB,MAAO2tB,EAAaE,0BAA0BE,0BAC9ChuB,OAAQ4tB,EAAaE,0BAA0BG,8BAEnD,gBAAKtpB,UAAU,0BAAyB,SAAE9H,EAAM2zB,YAAY/gB,UAlCvD5S,EAAM2zB,YAAYrC,aCgCnC,EApCwCtxB,IACpC,MAAM8zB,EAAuBpiB,IACzB,MAAM2f,EAAkBrxB,EAAMqxB,gBACxB0C,EAAc/zB,EAAMqxB,gBAAgBh1B,QAAQqV,EAAK4f,aAEnDyC,GAAe,GACf/zB,EAAMqxB,gBAAgBh1B,QAAQqV,EAAK4f,aACnCD,EAAgBlsB,OAAO4uB,EAAa,IAEpC1C,EAAgBxsB,KAAK6M,EAAK4f,aAG9BtxB,EAAMg0B,wBAAwB3C,EAAgB,EAGlD,OACI,gBAAKvpB,UAAU,8CAA6C,UACxD,SAAC,EAAQ,CAACnT,KAAK,2BAA2ByhB,UAAU,6CAA4C,SAC3F2a,EAAaE,0BAA0BI,gBAAgBv+B,KAAI,CAAC4e,EAAMxM,KAC/D,MAAM+uB,EAAej0B,EAAMqxB,gBAAgBh1B,QAAQqV,EAAK4f,cAAgB,EAExE,OACI,SAAC,EAAe,CAEZoC,SAAUO,EACVN,YAAajiB,EACb+hB,UAAWvuB,EACX+kB,QAAS6J,GAJJpiB,EAAK4f,YAMjB,OAIhB,E,cCnCL,MAyBA,EAzBmCtxB,IAC/B,MAAM,kBAAEsvB,GAAsBtvB,EAE9B,OACI,iBAAK8H,UAAU,8BAA6B,WACxC,cAAGA,UAAU,iCAAgC,SLuF7C,4BKtFA,cAAGA,UAAU,sCAAqC,oCAClD,gBAAIA,UAAU,8BAA6B,WACvC,kDAC0B,EAAoBwnB,EAAkBJ,cAAa,mBAAkB,IAC1F,EAAoBI,EAAkBP,WAAU,cAAaO,EAAkBtB,kBAAmB,IAAG,4BAG1G,oCACYsB,EAAkBjB,mBAAkB,iBAAgBiB,EAAkBf,SAAQ,cAE1F,6DAEJ,cAAGzmB,UAAU,oCAAmC,UL2EtCymB,EK1EsCe,EAAkBf,SL2EtE,uTAAuTA,qKAD1S,IAACA,CKvEjB,E,cCFL,MAiPA,EAjPqB,EACjBe,oBACA+B,kBACA6C,eACAC,WACAC,gBACAJ,8BAEA,MAAOK,EAAwBC,GAA6B,YAAe,IAWrE,eACFpG,EAAc,YACd5e,EAAW,mBACX+e,EAAkB,aAClBW,EAAY,kBACZhB,EAAiB,SACjBO,GACAe,EAEEiF,EAAiBxD,EAAakB,oBAAoB,CACpDC,WAAYlD,EACZwF,WApBgC,MAChC,MAAMC,EAA+Ch/B,KAAKgF,MAAsB,GAAfu0B,EAAqB,KAKtF,OAHIA,EAAeyF,EAA+C,EACxDzF,EAAeyF,OACf5tB,CACO,EAcL6tB,GACZC,UAAWtD,EAAgBl8B,OAAS,EAAI,IAAMk8B,EAAgBh8B,KAAK,KAAO,GAC1Eia,YAAaA,EACb6iB,aAAc9D,IAGZuG,EAAgD,IAAhBtlB,EAChCulB,ENyCmC,CACzCX,IAEA,MAAMW,EAA+D,GASrE,OAPAX,EAAaY,OAAOv5B,SAAQtI,IACxB4hC,EAAyBhwB,KAAK,CAC1B+N,MAAOshB,EAAaa,KAAK9hC,GAAI2f,MAC7BtM,MAAO4tB,EAAaa,KAAK9hC,GAAIqT,OAC/B,IAGCuuB,CAAwB,EMrDEG,CAA8Bd,GAE/D,OACI,gBAAKjhC,GAAG,0BAAyB,UAC7B,iBAAK6U,UAAU,wCAAuC,WAClD,gBAAKA,UAAU,qCAAoC,UAC/C,eAAI7U,GAAG,wBAAwB6U,UAAU,wBAAuB,UAC5D,iBAAKA,UAAU,wBAAuB,oCAElC,iBAAMA,UAAU,yCAAwC,oCACxD,kBAAMA,UAAU,wCAAuC,WACnD,kBAAM,mCAMtB,gBAAK7U,GAAG,yBAAwB,UAC5B,iBACI6U,UAAU,qCAAoC,kBAC7B,iDAAiDwH,sBAAgC4e,WRgB9Fn6B,EQfAs6B,EReW4G,EQdXJ,ERejBI,EAAYC,WAAWphC,GAAyBA,EAAEwS,OAASvS,aQdnCw6B,IAAU,WAErB,iBAAKzmB,UAAU,+BAA8B,WACzC,iBAAKA,UAAU,8DAA6D,WACxE,gBAAIA,UAAU,0CAAyC,UAClDipB,EAAaE,0BAA0BD,OAAQ,QAEpD,SAAC,EAA8B,CAC3BK,gBAAiBA,EACjB2C,wBAAyBA,QAGjC,0BACI,gBAAKlsB,UAAU,2CAA0C,UACrD,iBAAKA,UAAU,wDAAuD,WAClE,oCACsB,oBAClBA,UAAU,2DAA0D,WAEpE,kBACI+K,QAAQ,4CACR/K,UAAU,wDAAuD,SAEhEipB,EAAaS,oBAAoB5e,SAEtC,kBACI3f,GAAG,4CACH6U,UAAU,kDACV4J,KAAK,OACLpL,MAAO,EAAoB4nB,GAC3B7b,SAAWhf,GACP,EAAkCA,EAAE0M,OAAOuG,QPxH5D,IO0HuB8tB,EACI/gC,EAAE0M,OAAOuG,MACTonB,EAAqBgD,gBAEzB,KAEVnd,QAAS,OACT4hB,QAAUzrB,GAAgCA,EAAMsM,uBAGxD,oCACsB,sBAClBlO,UAAU,2DAA0D,WAEpE,kBACI+K,QAAQ,yCACR/K,UAAU,wDAAuD,SAEhEipB,EAAaU,iBAAiB7e,SAEnC,kBACI3f,GAAG,yCACH6U,UAAU,kDACV4J,KAAK,OACLpL,MAAO,EAAoBgJ,GAC3B+C,SAAWhf,IACP,EAAkCA,EAAE0M,OAAOuG,QPlJ/D,KOoJ0B8tB,EACI/gC,EAAE0M,OAAOuG,MACTonB,EAAqBiD,YAErB,EAEdpd,QAAQ,SACR4hB,QAAUzrB,GAAgCA,EAAMsM,iBAChDyS,MACImM,EACM7D,EAAaU,iBAAiBC,2BAC9B7qB,KAGd,gBAAK5T,GAAG,2BAA0B,SAC7B2hC,GACG7D,EAAaU,iBAAiBC,4BAG1C,mCACsB,sBAClB5pB,UAAU,2DAA0D,UAEpE,SAACqK,EAAA,EAAS,CACNlf,GAAG,uBACH2f,MAAOme,EAAaY,kBAAkB/e,MACtCtM,MAAOpR,OAAOm5B,GACd1b,QAASkiB,EACTxiB,SAAW3I,GACP0qB,EAAc1qB,EAAM3J,OAAOuG,MAAOonB,EAAqBkD,6BAQnF,gBAAK9oB,UAAU,+BAA8B,UACzC,iBAAKA,UAAU,iCAAgC,WAC3C,iBAAKA,UAAU,6BAA4B,WACvC,eAAIA,UAAU,8BAA6B,SAAEipB,EAAaa,sBAC1D,oBACI9pB,UAAU,yCACVmiB,QAAU52B,IACNA,EAAE2iB,iBACFse,GAA0B,EAAK,EAClC,WAED,iBAAMxsB,UAAU,kBAAiB,gEAGhC,IAAMstB,oBAGf,iBAAKttB,UAAU,8BAA6B,WACxC,gBAAKA,UAAU,sBAAqB,UAChC,SAACuqB,EAAY,CACTW,UAAW,EACX1sB,MAAO0oB,EAAe,EAAI,EAAIA,EAC9BuE,cAAexC,EAAac,2BAGpC,uCAEI5+B,GAAI,GAAG89B,EAAagB,6BACpBsD,MAAM,kCACNC,MAAM,UAAS,6BACY,OAAM,kBACjB,sBAAqB,wBACf,6CAA4C,sBAC9C,OACpBrL,QAAU52B,I,OAEN,QAAU,CACNqW,MAAO,+BACP8Y,YAAa,CACT7tB,KAAM,oBACNkV,SAAU,YAEd0rB,WAAY,CACRC,oBAAqB,sBACrBC,SAAU,8CAEdC,WAAY,CACRC,QAASzgC,OAAOg5B,GAChB5e,YAAapa,OAAOoa,GACpBsmB,YAAa1gC,OAGR,QAFD,EAAA2/B,EAAyB/S,MACpB+T,GAAOA,EAAGvvB,QAAUpR,OAAOm5B,YAC/B,eAAEzb,OAEPkjB,WAAY5gC,OAAOq5B,GACnBwH,iBAAkB7gC,OAAO85B,GACzBgH,IAAK9gC,OAAOm5B,GACZxc,MAAO3c,OAAO84B,MAKtBmG,EAAS9gC,EAAGkhC,EAAe,EAC9B,SAEAxD,EAAaiB,qBAGtB,SAAChJ,EAAA,EAAM,CACHrY,UAAW0jB,EACXzjB,QAAS,IAAM0jB,GAA0B,GAAM,UAE/C,SAAC,EAAyB,CAAChF,kBAAmBA,qBR7JvD,IAACv7B,EAAWkhC,CQqKlC,ECpQCgB,EACG,kBA4DIC,EAA6C,CACtD5G,EACAT,EACAsH,EACAjC,KAEIrF,EAAiB15B,OAAS,GAAK++B,IAhDF,EACjC8B,EACAI,EACA9mB,EACA+mB,EACAC,EACApI,EACAiI,GAAiB,KAXe,IAACI,IAayB,CACtDP,MACAI,OACA9mB,cACA+mB,WACAC,WACApI,iBACAiI,iBACAK,gBAAiB,IAAI7+B,MApBzB8+B,aAAaC,QAAQT,EAA2BxZ,KAAKC,UAAU6Z,GAuBjB,EA6B1CI,CACIzhC,OAAOg/B,EAAaY,OAAOz4B,QAAQnH,OAAOo6B,EAAkBjB,sBAC5Dn5B,OAAOo6B,EAAkBf,UACzBe,EAAkBhgB,YAClBggB,EAAkBtB,kBAClBa,EACAS,EAAkBpB,eAClBiI,GCpEqB,EAC7Bx0B,EACA2tB,EACA4E,KAEA,GAAIvyB,EAAOi1B,YAAa,CACpB,MAAMC,EAA8D,CAChEC,eAAgBxH,EAAkB36B,KAClCoiC,aAAc7C,EAAaa,KAAKzF,EAAkBjB,oBAAoB15B,KACtE2a,YAAapa,OAAOo6B,EAAkBhgB,aACtC6iB,aAAcj9B,OAAOo6B,EAAkBjB,oBACvCH,eAAgBh5B,OAAOo6B,EAAkBpB,gBACzC8I,iBAAkB1H,EAAkBtB,kBACpC8H,WAAY5gC,OAAOo6B,EAAkBf,UACrCS,aAAc95B,OAAOo6B,EAAkBN,eAG3CrtB,EAAOi1B,YAAYtH,kBAAoBuH,CAC3C,GDoDII,CAAkBt1B,OAAQ2tB,EAAmB4E,GACjD,EEdJ,EA/DA,SAA2Bl0B,GAqCvB,OACI,iBAAK8H,UAAU,6CAA4C,WACvD,iBAAKA,UAAU,oCAAmC,WAC9C,gBAAKA,UAAU,8BAA8BovB,KAAK,MAAK,cAAa,UACpE,gBAAKpvB,UAAU,oCAAoCovB,KAAK,MAAK,cAAa,aAE9E,iBAAKpvB,UAAU,6BAA4B,WACvC,eAAIA,UAAU,6BAA4B,yEAG1C,uBACImiB,QA/CU,KACtB,MAAM7H,EAA4B,CAC9B1Y,MAAO,KAAoB2Y,OAAOC,MAAM6U,iBACxC3U,YAAa,CACT7tB,KAAM,wBACNkV,SAAU,YAEdutB,OAAQ,CACJC,iBAAkB,6CAI1B,QAAUjV,GAEVhZ,YAAW,KACPzH,OAAO6oB,SAAS9P,KAAO,WAAW,GACnC,IAAI,EAgCKhJ,KAAK,SACL2jB,MAAM,oCACN3a,KAAK,YAAW,oCAIpB,mBAAQuP,QAnCO52B,IACvBA,EAAE2iB,iBACF,MAAMoM,EAA4B,CAC9B1Y,MAAO,KAAoB2Y,OAAOC,MAAMS,IACxCP,YAAa,CACT7tB,KAAM,sBACNkV,SAAU,cAIlB,QAAUuY,GAEVhZ,YAAW,KACPzH,OAAO6oB,SAAS9P,KAAO1a,EAAM6f,UAAU,GACxC,IAAI,EAqBqC/X,UAAU,qCAAqC4J,KAAK,SAAQ,sCAMhH,ECnEa4lB,EAAmB,KAC5B,MAAMC,EAAmB90B,SAASkE,cAAc,8BAEvB,OAArB4wB,GACAA,EAAiBvmB,UAAUhb,IAAI,mCACnC,EAGEwhC,EAAyBC,IAC3B,IAAIC,EAAmB,GACvB,MAAMC,EAAaF,EAAW/lB,KAAK7c,MAAM,aAAaQ,KAAK,KAY3D,OAVIoiC,EAAWG,kBAAoBH,EAAWI,iBAC1CH,EAAmB,GAAGC,MAAeF,EAAWG,oBAC5CH,EAAWI,iCAEPJ,EAAWG,kBAAoBH,EAAWI,iBAClDH,EAAmB,GAAGC,QAAiBF,EAAWI,gCAC3CJ,EAAWG,mBAAqBH,EAAWI,mBAClDH,EAAmB,GAAGC,MAAeF,EAAWG,kCAG7CF,CAAgB,EAQdI,EAAqBC,IAC9B,MAAM7D,EAA8B,CAAEY,OAAQ,GAAIC,KAAM,CAAC,GAWzD,OATAgD,EAAgBx8B,SAAQk8B,IACpBvD,EAAaY,OAAOjwB,KAAK3P,OAAOuiC,EAAWO,aAC3C9D,EAAaa,KAAK0C,EAAWO,YAAc,CACvCrjC,KAAM8iC,EAAW/lB,KACjBkB,MAAO4kB,EAAsBC,GAC7BnxB,MAAOpR,OAAOuiC,EAAWO,YAC5B,IAGE9D,CAAY,E,iCCrBvB,IAAI+D,EAyBA3I,EACA4I,EACAC,EACAC,EAGJ,MA0NA,EA1N0Bp4B,IACtB,MAAM2pB,EAAa,aAAiB3J,EAAA,GCrDjB,MACnB,MAAMqY,GAAgB,IAAA3nB,SAAO,GACzB2nB,EAAcjnB,UDqDV,Mb3BkC,IAACzc,EAAcqhC,Ea4BjDh2B,EAAMk0B,eb5B6Bv/B,Ea8B/BqL,EAAMs4B,sBb9BuCtC,Ea+B7Ch2B,EAAMk0B,aAAaY,OAAO,GAF9BoD,Eb5BD,CACHvjC,KAAMA,EACNq5B,kBAAmB,GACnBE,eAAgB,IAChB5e,YAAa,KACb+e,oBAAqB2H,EACrBzH,SAAU,GACVM,iBAAkB,Ka2BlBuJ,EAAwB,GACxB,MAAMG,EAA4B9B,aAAa+B,QAAQ1H,GbxBN,IACrD2H,EACAC,EACAxE,EasBQqE,IACAH,EAAwB3b,KAAKjlB,MAAM+gC,IAGvCJ,EJtB+B,MACnC,IAAIQ,EAAgE,KACpE,MAAMpC,EAAoBE,aAAa+B,QAAQvC,GAM/C,OAJIM,IACAoC,EAAyBlc,KAAKjlB,MAAM++B,IAIpCoC,GACAA,EAAuBnC,iBA/CF,CAACoC,IAC1B,MAAMC,EAAiB,IAAIlhC,KAAKihC,GAC1BE,EAAeF,EAAUrgC,UAK/B,OAHAsgC,EAAeE,QAAQD,EA4CoD7C,IA3C7D,IAAIt+B,MAELmC,UAAY++B,EAAe/+B,SAAS,EAyC7Ck/B,CAAqB,IAAIrhC,KAAKghC,EAAuBnC,kBAE9CmC,EAGJ,IAAI,EIMmBM,GACtBd,Ib7BRM,Ea+BYN,Eb9BZO,Ea+BYR,Eb9BZhE,Ea+BYl0B,EAAMk0B,ab7BlBwE,EAA+B1K,kBAAoByK,EAA8BpC,SAExB,iBAA9CoC,EAA8BnpB,YACrCopB,EAA+BppB,YAAc9U,OACzC6yB,EAAwBoL,EAA8BnpB,cAG1DopB,EAA+BppB,YAAc9U,OAAOi+B,EAA8BnpB,aAGtFopB,EAA+BrK,mBAAqB7zB,OAChD05B,EAAaY,OACTt6B,OAAOi+B,EAA8BzC,KAAO,EAAI,EAAIx7B,OAAOi+B,EAA8BzC,OAIhG0C,EAA+B7J,iBAAuC4J,EAA8BnC,SAAS4C,MAC1G,CAAChlC,EAAG6C,IAAM7C,EAAE67B,QAAUh5B,EAAEg5B,UAGgC,iBAAjD0I,EAA8BvK,iBACrCwK,EAA+BxK,eAAiBuK,EAA8BvK,gBAGlFwK,EAA+BnK,SAAW/zB,OAAOi+B,EAA8BrC,MaEvE8B,EbADQ,GaOHpJ,EAAoB,IAAI3B,EAAkBuK,GAEtCC,GACAjC,EACI5G,EACA4I,EAA0BrJ,iBAC1BsJ,EAAwBhC,eACxBn2B,EAAMk0B,aAEd,ECpFJiF,GACAd,EAAcjnB,SAAU,EAAI,EDmD5BgoB,GAmCA,MAAOC,EAA+BC,GAAoC,WAExE,CACEC,kBAAkB,EAClBC,2BAA0BrB,GAA0BA,EAAwBhC,eAC5EsD,8BAA+B,MAE5BC,EAA2BC,GAAgC,WAEhE,CACEC,eAAgBtK,EAAkBr8B,GAClC47B,iBAAkBqJ,EAA0BrJ,oBAEzCgL,EAAwBC,GAA6B,WAE1D,CACE7mC,GAAI,EACJo+B,gBAAiB+G,KAEd2B,EAAgBC,GAAqB,YAAyD,GAkBrG/B,EAAqByB,EAA0B7K,iBAE/C,MAwEMoL,EAAwB,CAC1BjM,EACAkM,KAEA,MAAMC,EAA4B7pB,IAC9B,IACAC,QAAQyB,MAAM,yDAA0D1B,EAAI,EAG5E0d,EE3LuB,CAACnc,IAChC,IACI,OAAOuoB,EAAA,EACF7/B,IAAI,gCAAgCsX,KACpCzF,MAAMC,GACCA,EAAShB,MAAQgB,EAAShB,KAAKgD,OAAShC,EAAShB,KAAKgD,MAAMlZ,OAAS,EAC9DkX,EAAShB,KAAKgD,MAElB,KAEV9B,OAAOyF,IACJzB,QAAQyB,MAAM,yCAA0CA,GACjD,KAEnB,CAAE,MAAO3e,GACL,OAAOiZ,QAAQ5Y,QAAQ,GAC3B,GF4KQ2mC,CAAoBrM,GACf5hB,MAAMyiB,IACCA,GAAoBA,EAAiB15B,OAAS,EAC9C+kC,EAAKrL,GAELsL,EAAyBtL,EAC7B,IAEHtiB,OAAO+D,IACJ6pB,EAAyB7pB,EAAI,IAGrCC,QAAQC,IAAI,yCAChB,EAwBJ,OArBA,aAAgB,KApHuB,MACnC,MAAM9G,EAAQ,IAAI+Y,YAAY,qCAAsC,CAChEE,OAAQ,CACJuX,KAAOI,IA4DmB,IAACtM,EA3DnBsM,GAASA,EAAMC,OA2DIvM,EA1DWsM,EAAMC,QA4D3BvM,IAAsBsB,EAAkBtB,mBAG7DiM,EAAsBjM,GAAoBa,IACtC,GAAIA,EAAiB15B,OAAS,EAAG,CAC7B,MAAMykC,EAAiBtK,EAAkBiB,OAAO1B,EAAqC,CACjFnd,KAAMgc,EAAqB+C,kBAC3BnqB,MAAO0nB,IAEXkI,EACI5G,EACAoK,EAA0B7K,iBAC1BwK,EAA8BG,yBAC9Bx5B,EAAMk0B,cAGVyF,EAA6B,CACzBC,eAAgBA,EAChB/K,iBAAkBA,GAE1B,MA9EQte,QAAQC,IAAI,sCAEZwpB,GAAkB,GACtB,KAIZv3B,SAASC,gBAAgBkgB,cAAclZ,EAAM,EAuG7C8wB,GAnGyB,MACzB,MAAMC,EAAuChE,aAAa+B,QAAQ,IAA2Bl4B,KAC7F,GAAIm6B,EAAsC,CACtC,MACMC,EAD+Cje,KAAKjlB,MAAMijC,GACtB3nC,KAAK4oB,IACpC,CAAElO,YAAakO,EAAQlO,gBAElCmc,EAAW5J,gBAAe,QAAqC2a,GACnE,GA4FAC,EAAsB,GACvB,IAEH,aAAgB,KJlJyB,IAACtJ,IImJRwI,EAAuBxI,gBJlJzDoF,aAAaC,QAAQ,EAA2Cja,KAAKC,UAAU2U,GIkJN,GACtE,CAACwI,EAAuB5mC,KAE3B,aAAgB,KACRomC,EAA8BE,mBAC9BrD,EACI5G,EACAoK,EAA0B7K,iBAC1BwK,EAA8BG,yBAC9Bx5B,EAAMk0B,cAEVvyB,OAAO6oB,SAAS9P,KAAO2e,EAA8BI,8BACzD,GACD,CAACJ,EAA8BE,mBAE9BQ,GACA,IACO,MAGJpQ,EAAW9J,YAAc8J,EAAW7J,WACvC,SAAC,EAAiB,CAACD,WAAY8J,EAAW9J,cAE1C,SAAC,EAAY,CACT+Z,eAAgBF,EAA0BE,eAC1CtK,kBAAmBA,EACnB8E,cAvHkB,CACtB9tB,EACAoL,KAEA,GAAIumB,EAAmB9iC,OAAS,EAAG,CAC/B,MAAMykC,EAAiBtK,EAAkBiB,OAAO0H,EAAuC,CACnFvmB,KAAMA,EACNpL,MAAO,EAAkCA,KAG7C4vB,EACI5G,EACA2I,EACAoB,EAA8BG,yBAC9Bx5B,EAAMk0B,cAGVyF,EAA6B,CACzBC,eAAgBA,EAChB/K,iBAAkBoJ,GAE1B,GAmGI9D,SAhGa,CAACzqB,EAAYgR,KAC9BhR,EAAMsM,iBAENsjB,EAAiC,CAC7BC,kBAAkB,EAClBC,0BAA0B,EAC1BC,8BAA+B/e,GACjC,EA0FE2W,gBAAiBwI,EAAuBxI,gBACxC2C,wBAA0B4G,GACtBd,EAA0B,CAAE7mC,KAAM4mC,EAAuB5mC,GAAIo+B,gBAAiBuJ,IAElF1G,aAAcl0B,EAAMk0B,cAE3B,EG9PU,MAAM2G,UAAuB,YACxC,WAAAx0B,CAAYrG,GACR4R,MAAM5R,GAYF,KAAA86B,kBAAoB,EAVxBvjC,KAAKsa,MAAQ,CACTkpB,WAAW,EACXC,UAAW,CAAC,KAAM,QAClBC,YAAa,OACbjmB,MAAO,GAGXzd,KAAK0gB,KAAO1gB,KAAK0gB,KAAKrY,KAAKrI,KAC/B,CAIO,iBAAA4hB,GACH5hB,KAAKujC,kBAAoBn5B,OAAOu5B,sBAAsB3jC,KAAK0gB,KAC/D,CAEO,oBAAAqB,GACH3X,OAAOw5B,qBAAqB5jC,KAAKujC,kBACrC,CAEQ,IAAA7iB,GACJ,MACM8iB,EAAYxjC,KAAKsa,MAAMopB,YAAc,KAAO1jC,KAAKsa,MAAMopB,YAAc,EAE3E,IAAIjmB,EAAQzd,KAAKsa,MAAMmD,MACnBimB,EAAa1jC,KAAKsa,MAAMopB,aAAe,IAAM,IAAM1jC,KAAKsa,MAAMopB,WAC9DD,EAAYzjC,KAAKsa,MAAMopB,aAAe,IAAM,CAAC,EAAG,KAAO1jC,KAAKsa,MAAMmpB,UAEjED,GAKD/lB,GAZW,IAaXimB,GAAsB,EAARjmB,EACdgmB,EAAY,CAAEA,EAAU,IAAMhmB,EAASgmB,EAAU,IAAMhmB,KANvDA,GARW,IASXimB,GAAcjmB,EACdgmB,EAAY,CAAEA,EAAU,IAAMhmB,EAASgmB,EAAU,IAAMhmB,IAO3Dzd,KAAKgb,SAAS,CAAEyoB,YAAWC,aAAYF,YAAW/lB,UAElDzd,KAAKujC,kBAAoBn5B,OAAOu5B,sBAAsB3jC,KAAK0gB,KAC/D,CAEO,MAAAhG,GACH,MAAM,KAAEuC,EAAI,OAAErR,EAAM,UAAE2E,GAAcvQ,KAAKyI,MACzC,OACI,gBAAK8H,UAAW,GAAGA,GAAwB,KAAME,MAAO,CAAE7E,OAAQA,GAAU,QAAQ,YAAY,SAAQ,UACpG,iBACI2E,UAAW,8GAA8G0M,GACrH,WACJ0iB,KAAK,QAAO,YACF,OAAM,WAEhB,iBAAMpvB,UAAU,kBAAiB,sBACjC,gBAAKoM,QAAQ,YAAW,cAAa,OAAM,UACvC,mBACIknB,GAAG,KACHC,GAAG,KACHvnC,EAAE,KACFkU,MAAO,CACHszB,gBAAiB/jC,KAAKsa,MAAMmpB,UAAU3lC,KAAK,KAC3CkmC,iBAAkBhkC,KAAKsa,MAAMopB,oBAOzD,EC3EJ,MA6BA,EA7BmCj7B,IAC/B,MAAO+3B,EAAiByD,GAAsB,WAAe,KACtDC,EAAWC,GAAgB,YAAe,GAoBjD,OAlBA,aAAgB,KCLc,MAC9B,IACI,OAAOtB,EAAA,EACF7/B,IAAI,wBACJ6R,MAAMC,GACCA,EAAShB,MAAQgB,EAAShB,KAAKlW,OAAS,EACjCkX,EAAShB,KAEb,KAEVkB,OAAOyF,IACJzB,QAAQyB,MAAM,gDAAiDA,GACxD,KAEnB,CAAE,MAAO3e,GACL,OAAOiZ,QAAQ5Y,QAAQ,GAC3B,GDVIioC,GACKvvB,MAAK2rB,IACEA,GAAmBA,EAAgB5iC,OAAS,EAC5CqmC,EAAmBzD,IAEnB,IACAxnB,QAAQyB,MAAM,iEAAkE+lB,IAEpF2D,GAAa,EAAM,IAEtBnvB,OAAO+D,IACJ,IACAC,QAAQyB,MAAM,iEAAkE1B,GAChForB,GAAa,EAAM,GACrB,GACP,IAEID,GACH,SAACZ,EAAc,CAAC/yB,UAAU,sCAC1BiwB,GAAmBA,EAAgB5iC,OAAS,GAC5C,SAAC,EAAgB,iBAAK6K,EAAK,CAAEk0B,aAAc4D,EAAkBC,MAC7D,IAAI,E,kCEnCD6D,EAAc,kBAIdC,EAAiB,2BCMrB,SAASC,EAAU35B,EAAKmE,GAO3B,MANmB,mBAARnE,EACPA,EAAImE,GAECnE,IACLA,EAAIiP,QAAU9K,GAEXnE,CACX,CClBA,IAAI45B,EAA8C,oBAAXp6B,OAAyBq6B,EAAAA,gBAAwBA,EAAAA,UACpFC,EAAgB,IAAIC,QCFjB,IAAIC,GAAc,CACvB/4B,MAAO,MACPD,OAAQ,MACRi5B,QAAS,EACT75B,SAAU,SACVsH,SAAU,QACV5G,IAAK,MACLC,KAAM,OCsBGm5B,GAAW,WAQlB,OAPAA,GAAW5oC,OAAO8vB,QAAU,SAAkBvuB,GAC1C,IAAK,IAAIhB,EAAGD,EAAI,EAAGF,EAAIiD,UAAU3B,OAAQpB,EAAIF,EAAGE,IAE5C,IAAK,IAAImC,KADTlC,EAAI8C,UAAU/C,GACON,OAAOgE,UAAU6kC,eAAer+B,KAAKjK,EAAGkC,KAAIlB,EAAEkB,GAAKlC,EAAEkC,IAE9E,OAAOlB,CACX,EACOqnC,GAASriC,MAAMzC,KAAMT,UAChC,ECvCA,SAASylC,GAAKroC,GACV,OAAOA,CACX,CACA,SAASsoC,GAAkBC,EAAUC,QACd,IAAfA,IAAyBA,EAAaH,IAC1C,IAAII,EAAS,GACTC,GAAW,EA0Df,MAzDa,CACTC,KAAM,WACF,GAAID,EACA,MAAM,IAAItpC,MAAM,oGAEpB,OAAIqpC,EAAOxnC,OACAwnC,EAAOA,EAAOxnC,OAAS,GAE3BsnC,CACX,EACAK,UAAW,SAAUzxB,GACjB,IAAIoQ,EAAOihB,EAAWrxB,EAAMuxB,GAE5B,OADAD,EAAO93B,KAAK4W,GACL,WACHkhB,EAASA,EAAOnhB,QAAO,SAAUpkB,GAAK,OAAOA,IAAMqkB,CAAM,GAC7D,CACJ,EACAshB,iBAAkB,SAAUC,GAExB,IADAJ,GAAW,EACJD,EAAOxnC,QAAQ,CAClB,IAAI8nC,EAAMN,EACVA,EAAS,GACTM,EAAI1hC,QAAQyhC,EAChB,CACAL,EAAS,CACL93B,KAAM,SAAUzN,GAAK,OAAO4lC,EAAG5lC,EAAI,EACnCokB,OAAQ,WAAc,OAAOmhB,CAAQ,EAE7C,EACAO,aAAc,SAAUF,GACpBJ,GAAW,EACX,IAAIO,EAAe,GACnB,GAAIR,EAAOxnC,OAAQ,CACf,IAAI8nC,EAAMN,EACVA,EAAS,GACTM,EAAI1hC,QAAQyhC,GACZG,EAAeR,CACnB,CACA,IAAIS,EAAe,WACf,IAAIH,EAAME,EACVA,EAAe,GACfF,EAAI1hC,QAAQyhC,EAChB,EACIK,EAAQ,WAAc,OAAO/wB,QAAQ5Y,UAAU0Y,KAAKgxB,EAAe,EACvEC,IACAV,EAAS,CACL93B,KAAM,SAAUzN,GACZ+lC,EAAat4B,KAAKzN,GAClBimC,GACJ,EACA7hB,OAAQ,SAAUA,GAEd,OADA2hB,EAAeA,EAAa3hB,OAAOA,GAC5BmhB,CACX,EAER,EAGR,CACO,SAASW,GAAab,EAAUC,GAEnC,YADmB,IAAfA,IAAyBA,EAAaH,IACnCC,GAAkBC,EAAUC,EACvC,CDqC6BjpC,OAAO2S,OAsGX3S,OAAO2S,OEhNzB,IAAIm3B,GAAcD,GAAa,CAAC,GAAG,SAAUE,GAGlD,MAAO,CACLz9B,OAHWy9B,EAAKz9B,OAIhB09B,cAHgBD,EAAKC,cAKzB,IACWC,GAAaJ,KACbK,GAAeL,KACfM,GD6DJ,SAA6BjrB,QAChB,IAAZA,IAAsBA,EAAU,CAAC,GACrC,IAAIkrB,EAASrB,GAAkB,MAE/B,OADAqB,EAAOlrB,QAAU0pB,GAAS,CAAExvB,OAAO,EAAMixB,KAAK,GAASnrB,GAChDkrB,CACX,CClE2BE,CAAoB,CAC7ClxB,OAAO,EACPixB,IAAyB,oBAAbr7B,WCZHu7B,IAA0B/d,EAAAA,EAAAA,oBAAcpZ,GCO/Co3B,GAAa,GACbC,IAAyBC,EAAAA,EAAAA,aAAW,SAAqBn+B,EAAOo+B,GAClE,IAAIC,ENSuBC,EAAMC,EOJJC,EAAch1B,EACrCrH,EPIAs8B,EMTFC,GAAY1qB,EAAAA,EAAAA,YACd2qB,EAAeD,EAAU,GACzBE,EAAcF,EAAU,GACtBG,GAAWnuB,EAAAA,EAAAA,UACXouB,GAAWpuB,EAAAA,EAAAA,SAAO,GAClBquB,GAAyBruB,EAAAA,EAAAA,QAAO,MAElC6f,GADevc,EAAAA,EAAAA,UAAS,CAAC,GACL,GAClBpM,EAAW5H,EAAM4H,SACnBo3B,EAAkBh/B,EAAM0S,SACxBA,OAA+B,IAApBssB,GAAqCA,EAChDC,EAAuBj/B,EAAMk/B,cAC7BA,OAAyC,IAAzBD,GAA0CA,EAC1DE,EAAwBn/B,EAAMo/B,gBAC9BA,OAA4C,IAA1BD,GAA2CA,EAC7DE,EAAoBr/B,EAAMs/B,WAC1BA,OAAmC,IAAtBD,GAAsCA,EACnDE,EAAmBv/B,EAAMw/B,UACzBA,OAAiC,IAArBD,GAAqCA,EAEjDE,GADqBz/B,EAAM0/B,mBACnB1/B,EAAMy/B,OACd33B,EAAY9H,EAAM8H,UAClB63B,EAAY3/B,EAAM2/B,UAClBC,EAAqB5/B,EAAM4/B,mBAC3BC,EAAgB7/B,EAAM8/B,OACtBA,OAA2B,IAAlBD,EAA2B5B,GAAa4B,EACjDE,EAAY//B,EAAMjB,GAClBihC,OAA0B,IAAdD,EAAuB,MAAQA,EAC3CE,EAAmBjgC,EAAMkgC,UACzBC,OAAsC,IAArBF,EAA8B,CAAC,EAAIA,EACpDG,EAAUpgC,EAAMqgC,QAChBC,EAAqBtgC,EAAMugC,YAC3BC,OAA2C,IAAvBF,GAAwCA,EAC5DG,EAAezgC,EAAMygC,aACrBC,EAAuB1gC,EAAM2gC,aAC7BC,EAAyB5gC,EAAM6gC,eAE/B5tC,GADe+gB,EAAAA,EAAAA,UAAS,CAAC,GACT,GACd2sB,GAAeG,EAAAA,EAAAA,cAAY,SAAUtD,GACvC,IAAIuD,EAAsBvD,EAAKuD,oBAC/B,IAAKhC,EAAuB3tB,QAAS,CACnC,IAAI4vB,EACA5rB,EAA0C,OAAzB4rB,EAAYv+B,eAAoB,EAASu+B,EAAU5rB,cACxE2pB,EAAuB3tB,QAAUgE,EAC7BA,IAAkB3S,SAAS4c,OAC7B0f,EAAuB3tB,QAAU2vB,EAAoB3rB,GAEzD,CACIypB,EAASztB,SAAWsvB,GACtBA,EAAqB7B,EAASztB,SAEhC0tB,EAAS1tB,SAAU,EACnBmf,GACF,GAAG,CAACmQ,IACAG,GAAiBC,EAAAA,EAAAA,cAAY,WAC/BhC,EAAS1tB,SAAU,EACfwvB,GACFA,EAAuB/B,EAASztB,SAElCmf,GACF,GAAG,CAACqQ,IACAL,GAAcO,EAAAA,EAAAA,cAAY,SAAUG,GACtC,IAAIC,EAAenC,EAAuB3tB,QAC1C,GAAI8vB,EAAc,CAChB,IAAIC,GAAyC,mBAAjBD,EAA8BA,IAAiBA,IAAiBz+B,SAAS4c,KACjG+hB,EAAgD,mBAAtBZ,EAAmCA,EAAkBW,GAAiBX,EACpG,GAAIY,EAAkB,CACpB,IAAIC,EAAiD,iBAArBD,EAAgCA,OAAmBv6B,EACnFk4B,EAAuB3tB,QAAU,KAC7B6vB,EACF30B,QAAQ5Y,UAAU0Y,MAAK,WACrB,OAAO+0B,EAAc9rB,MAAMgsB,EAC7B,IAEAF,EAAc9rB,MAAMgsB,EAExB,CACF,CACF,GAAG,CAACb,IACAluB,IAAUwuB,EAAAA,EAAAA,cAAY,SAAUp3B,GAC9Bo1B,EAAS1tB,SACXmsB,GAAYT,UAAUpzB,EAE1B,GAAG,IACC8I,GAASkrB,GAAWZ,UACpBwE,IAAiBR,EAAAA,EAAAA,cAAY,SAAUS,GACrC1C,EAASztB,UAAYmwB,IACvB1C,EAASztB,QAAUmwB,EACnB3C,EAAY2C,GAEhB,GAAG,IAWCrB,IAAYsB,EAAAA,EAAAA,KAAUnD,EAAY,CAAC,GAAaxC,GAAkBnpB,GAAY,WAAY2rB,EAAUzC,GAAe6D,EAAOpB,GAAY8B,GACtIsB,IAAqC,IAAlBvC,EACnBwC,GAAmBD,IAAsC,SAAlBvC,EACvCyC,INhGuBrD,EMgGE,CAACF,EAAWkD,ICpGZ9C,EPKMD,GAAgB,KOLR/0B,EPKc,SAAUupB,GAC7D,OAAOuL,EAAK/iC,SAAQ,SAAU4G,GAAO,OAAO25B,EAAU35B,EAAK4wB,EAAW,GAC1E,GONI5wB,GAAM6R,EAAAA,EAAAA,WAAS,WAAc,MAAQ,CAErC1N,MAAOk4B,EAEPh1B,SAAUA,EAEVo4B,OAAQ,CACJ,WAAIxwB,GACA,OAAOjP,EAAImE,KACf,EACA,WAAI8K,CAAQ9K,GACR,IAAI6C,EAAOhH,EAAImE,MACX6C,IAAS7C,IACTnE,EAAImE,MAAQA,EACZnE,EAAIqH,SAASlD,EAAO6C,GAE5B,GAEJ,IAAG,IAEHK,SAAWA,EPhBXi1B,EOiBGt8B,EAAIy/B,OPbX7F,GAA0B,WACtB,IAAI8F,EAAW5F,EAAc1hC,IAAIkkC,GACjC,GAAIoD,EAAU,CACV,IAAIC,EAAa,IAAIpgB,IAAImgB,GACrBE,EAAa,IAAIrgB,IAAI4c,GACrB0D,EAAYvD,EAAYrtB,QAC5B0wB,EAAWvmC,SAAQ,SAAU4G,GACpB4/B,EAAWE,IAAI9/B,IAChB25B,EAAU35B,EAAK,KAEvB,IACA4/B,EAAWxmC,SAAQ,SAAU4G,GACpB2/B,EAAWG,IAAI9/B,IAChB25B,EAAU35B,EAAK6/B,EAEvB,GACJ,CACA/F,EAActiC,IAAI8kC,EAAaH,EACnC,GAAG,CAACA,IACGG,GMyELyD,IAAkBvZ,EAAAA,EAAAA,UAAQ,WAC5B,MAAO,CACLkW,SAAUA,EACViB,OAAQA,EACRqC,SAAUzvB,EACV0vB,OAAQtD,EAAS1tB,QAErB,GAAG,CAACsB,EAAUosB,EAAS1tB,QAAS0uB,EAAQnB,IACxC,OAAoB3C,EAAAA,cAAoBqG,EAAAA,SAAU,KAAMZ,IAAoB,CAE5EzF,EAAAA,cAAoB,MAAO,CACzB17B,IAAK,cACL,oBAAoB,EACpBya,SAAUrI,GAAY,EAAI,EAC1B1K,MAAOm0B,KACLyD,EAAkC5D,EAAAA,cAAoB,MAAO,CAC/D17B,IAAK,gBACL,oBAAoB,EACpBya,SAAUrI,GAAY,EAAI,EAC1B1K,MAAOm0B,KACJ,OAAQzpB,GAAyBspB,EAAAA,cAAoBoE,EAAS,CACjEntC,GAAIA,EACJotC,QAASzC,GACTiB,SAAUF,EACVjsB,SAAUA,EACV0sB,gBAAiBA,EACjBE,WAAYA,EACZE,UAAWA,EACXG,UAAWA,EACXG,OAAQA,EACRa,aAAcA,EACdE,eAAgBA,EAChBN,YAAaA,EACbE,aAAcA,EACdvB,cAAeA,IACAlD,EAAAA,cAAoBgE,GAAWwB,EAAAA,EAAAA,GAAS,CACvDr/B,IAAKw/B,IACJzB,GAAW,CACZp4B,UAAWA,EACX0K,OAAQA,GACRF,QAASA,KACM0pB,EAAAA,cAAoBgC,GAAWpd,SAAU,CACxDta,MAAO47B,IACNt6B,IAAY85B,IAAiC1F,EAAAA,cAAoB,MAAO,CACzE,oBAAoB,EACpBjhB,SAAUrI,GAAY,EAAI,EAC1B1K,MAAOm0B,KAEX,IACA+B,GAAU/1B,UAoBN,CAAC,EACL,Y,eE1LA,SAASm6B,GAAQlvC,GAGf,OAAOkvC,GAAU,mBAAqBC,QAAU,iBAAmBA,OAAOC,SAAW,SAAUpvC,GAC7F,cAAcA,CAChB,EAAI,SAAUA,GACZ,OAAOA,GAAK,mBAAqBmvC,QAAUnvC,EAAEiT,cAAgBk8B,QAAUnvC,IAAMmvC,OAAO9qC,UAAY,gBAAkBrE,CACpH,EAAGkvC,GAAQlvC,EACb,CCLO,IAAIqvC,GAAU,SAAUvuC,GAE3B,IADA,IAAIwuC,EAAMttC,MAAMlB,EAAEiB,QACTpB,EAAI,EAAGA,EAAIG,EAAEiB,SAAUpB,EAC5B2uC,EAAI3uC,GAAKG,EAAEH,GAEf,OAAO2uC,CACX,EACWC,GAAU,SAAUzuC,GAAK,OAAQkB,MAAMgP,QAAQlQ,GAAKA,EAAI,CAACA,EAAK,EAC9D0uC,GAAW,SAAU1uC,GAAK,OAAQkB,MAAMgP,QAAQlQ,GAAKA,EAAE,GAAKA,CAAI,ECEvE2uC,GAAgB,SAAU3gC,GAE1B,OAAOA,EAAK6H,YAAc7H,EAAK6H,WAAWmB,WAAa43B,KAAKC,uBAEpD7gC,EAAK6H,WAAWi5B,KAClB9gC,EAAK6H,UACf,EACIk5B,GAAY,SAAU/gC,GAEtB,OAAOA,IAASO,UAAaP,GAAQA,EAAKgJ,WAAa43B,KAAKI,aAChE,EAQWC,GAAkB,SAAUC,EAAiBlhC,GACpD,IAAImhC,EAASD,EAAgB7oC,IAAI2H,GACjC,QAAe2E,IAAXw8B,EACA,OAAOA,EAEX,IAAIp6B,EARgB,SAAU/G,EAAMohC,GACpC,OAAQphC,GAAQ+gC,GAAU/gC,KA5BR,SAAUA,GAG5B,GAAIA,EAAKgJ,WAAa43B,KAAKS,aACvB,OAAO,EAEX,IAAIC,EAAgB7hC,OAAOqI,iBAAiB9H,EAAM,MAClD,SAAKshC,IAAkBA,EAAcC,kBAGiB,SAA9CD,EAAcC,iBAAiB,YAA0E,WAAjDD,EAAcC,iBAAiB,cACnG,CAiByCC,CAAgBxhC,KAL3C,SAAUA,GAAQ,OAAOA,EAAKyhC,aAAa,QAAU,CAKAC,CAAQ1hC,IAASohC,EAAYT,GAAc3gC,GAC9G,CAMiB2hC,CAAkB3hC,EAAMihC,GAAgBvjC,UAAKiH,EAAWu8B,IAErE,OADAA,EAAgBzpC,IAAIuI,EAAM+G,GACnBA,CACX,EAIW66B,GAA2B,SAAUC,EAAO7hC,GACnD,IAAImhC,EAASU,EAAMxpC,IAAI2H,GACvB,QAAe2E,IAAXw8B,EACA,OAAOA,EAEX,IAAIp6B,EARyB,SAAU/G,EAAMohC,GAC7C,QAAOphC,IAAS+gC,GAAU/gC,OAAS8hC,GAAmB9hC,IAAQohC,EAAYT,GAAc3gC,GAC5F,CAMiB+hC,CAA2B/hC,EAAM4hC,GAAyBlkC,UAAKiH,EAAWk9B,IAEvF,OADAA,EAAMpqC,IAAIuI,EAAM+G,GACTA,CACX,EACWi7B,GAAa,SAAUhiC,GAE9B,OAAOA,EAAKiiC,OAChB,EAEWC,GAAqB,SAAUliC,GAAQ,MAAwB,UAAjBA,EAAKmiC,OAAqB,EACxEC,GAAiB,SAAUpiC,GAClC,OAAOkiC,GAAmBliC,IAAuB,UAAdA,EAAKwP,IAC5C,EAIWsyB,GAAqB,SAAU9hC,GACtC,IAAIqiC,EAAYriC,EAAK+E,aZ5CO,qBY6C5B,OAAQ,EAAC,EAAM,OAAQ,IAAIkQ,SAASotB,EACxC,EACWC,GAAU,SAAUtiC,GAAQ,IAAIuiC,EAAI,OAAOC,QAAQxiC,IAAqC,QAA3BuiC,EAAKP,GAAWhiC,UAA0B,IAAPuiC,OAAgB,EAASA,EAAGE,YAAc,EAC1IC,GAAc,SAAU1iC,GAAQ,OAAQsiC,GAAQtiC,EAAO,EACvD2iC,GAAY,SAAUztC,GAAK,OAAOstC,QAAQttC,EAAI,ECrE9C0tC,GAAU,SAAU5wC,EAAG6C,GAC9B,IAAIguC,EAAOtvC,KAAKmO,IAAI,EAAG1P,EAAE6mB,UACrBiqB,EAAOvvC,KAAKmO,IAAI,EAAG7M,EAAEgkB,UACrBkqB,EAAUF,EAAOC,EACjBE,EAAYhxC,EAAEgR,MAAQnO,EAAEmO,MAC5B,GAAI+/B,EAAS,CACT,IAAKF,EACD,OAAO,EAEX,IAAKC,EACD,OAAQ,CAEhB,CACA,OAAOC,GAAWC,CACtB,EAYWC,GAAkB,SAAUC,EAAOC,EAAgBC,GAC1D,OAAO7C,GAAQ2C,GACVtyC,KAAI,SAAUoP,EAAMgD,GACrB,IAAI6V,EAdM,SAAU7Y,GACxB,OAAIA,EAAK6Y,SAAW,IAIX7Y,EAAKyhC,aAAa,YACZ,EAGRzhC,EAAK6Y,QAChB,CAIuBwqB,CAAYrjC,GAC3B,MAAO,CACHA,KAAMA,EACNgD,MAAOA,EACP6V,SAAUuqB,IAA4B,IAAdvqB,GAAoB7Y,EAAKiiC,SAAW,CAAC,GAAGQ,WAAa,GAAK,EAAK5pB,EAE/F,IACKS,QAAO,SAAUnQ,GAAQ,OAAQg6B,GAAkBh6B,EAAK0P,UAAY,CAAG,IACvEme,KAAK4L,GACd,ECpCIU,GCAmB,CACnB,iBACA,iBACA,mBACA,gBAGA,UACA,aACA,UACA,SACA,SACA,QACA,kBACA,kBACA,aACA,oBACA,eDjB2BnwC,KAAK,KAChCowC,GAAsB,GAAGnpC,OAAOkpC,GAAgB,wBAChDE,GAA6B,SAAUrjC,EAAQsjC,GAC/C,OAAOlD,IAASpgC,EAAOujC,YAAcvjC,GAAQuF,UAAU9I,QAAO,SAAU+mC,EAAKjrB,GACzE,OAAOirB,EAAIvpC,OAAOse,EAAMkrB,QAAQH,EAAaF,GAAsBD,IAAkB,CAAC5qB,GAAS,GAAI8qB,GAA2B9qB,GAClI,GAAG,GACP,EASWmrB,GAAgB,SAAUC,EAASL,GAC1C,OAAOK,EAAQlnC,QAAO,SAAU+mC,EAAKxjC,GACjC,IAAIoiC,EACAwB,EAAyBP,GAA2BrjC,EAAQsjC,GAC5DO,GAAwBzB,EAAK,IAAInoC,OAAOtC,MAAMyqC,EAAIwB,EAAuBnzC,KAAI,SAAUoP,GAAQ,OAZ7E,SAAUG,EAAQsjC,GAC5C,IAAIlB,EAEJ,OAAIpiC,aAAkB8jC,oBAAwD,QAAjC1B,EAAKpiC,EAAO+jC,uBAAoC,IAAP3B,OAAgB,EAASA,EAAGplB,MACvG0mB,GAAc,CAAC1jC,EAAO+jC,gBAAgB/mB,MAAOsmB,GAEjD,CAACtjC,EACZ,CAKkHgkC,CAAwBnkC,EAAMyjC,EAAa,KACrJ,OAAOE,EAAIvpC,OAEX4pC,EAEA7jC,EAAO0H,WACD04B,GAAQpgC,EAAO0H,WAAWuT,iBAAiBkoB,KAAiBhqB,QAAO,SAAUtZ,GAAQ,OAAOA,IAASG,CAAQ,IAC7G,GACV,GAAG,GACP,EEtBWikC,GAAkB,SAAUlB,EAAOhC,GAC1C,OAAOX,GAAQ2C,GACV5pB,QAAO,SAAUtZ,GAAQ,OAAOihC,GAAgBC,EAAiBlhC,EAAO,IACxEsZ,QAAO,SAAUtZ,GAAQ,OJiDN,SAAUA,GAClC,SAAUkiC,GAAmBliC,IANA,SAAUA,GAAQ,MAAwB,WAAjBA,EAAKmiC,OAAsB,CAM3CkC,CAAoBrkC,MAAyB,WAAdA,EAAKwP,MAAqBxP,EAAKwQ,UACxG,CInDyC8zB,CAAetkC,EAAO,GAC/D,EACWukC,GAAsB,SAAUrB,EAAOrB,GAE9C,YADc,IAAVA,IAAoBA,EAAQ,IAAI2C,KAC7BjE,GAAQ2C,GAAO5pB,QAAO,SAAUtZ,GAAQ,OAAO4hC,GAAyBC,EAAO7hC,EAAO,GACjG,EAUWykC,GAAmB,SAAUC,EAAUxD,EAAiBuC,GAC/D,OAAOR,GAAgBmB,GAAgBP,GAAca,EAAUjB,GAAavC,IAAkB,EAAMuC,EACxG,EAYWkB,GAAoB,SAAUD,EAAUxD,GAC/C,OAAO+B,GAAgBmB,GAAgBP,GAAca,GAAWxD,IAAkB,EACtF,EAYWrsB,GAAW,SAAU1M,EAAO3C,GACnC,OAAI2C,EAAMu7B,WACC7uB,GAAS1M,EAAMu7B,WAAYl+B,UAGYb,IAA1CpT,OAAOuS,eAAeqE,GAAO0M,WAC7BtjB,OAAOuS,eAAeqE,GAAO0M,SAAS9Y,KAAKoM,EAAO3C,KAG/C+6B,GAAQp4B,EAAMzC,UAAUk/B,MAAK,SAAUlsB,GAC1C,IAAI6pB,EACJ,GAAI7pB,aAAiBurB,kBAAmB,CACpC,IAAIY,EAA8C,QAAhCtC,EAAK7pB,EAAMwrB,uBAAoC,IAAP3B,OAAgB,EAASA,EAAGplB,KACtF,QAAI0nB,GACOhwB,GAASgwB,EAAYr/B,EAGpC,CACA,OAAOqP,GAAS6D,EAAOlT,EAC3B,GAER,ECpEWs/B,GAAmB,SAAUC,GAEpC,QADmB,IAAfA,IAAyBA,EAAaxkC,UACrCwkC,GAAeA,EAAW7xB,cAA/B,CAGA,IAAIA,EAAgB6xB,EAAW7xB,cAC/B,OAAQA,EAAcwwB,WAChBoB,GAAiB5xB,EAAcwwB,YAC/BxwB,aAAyB+wB,mBChBZ,WACnB,IACI,ODc+E/wB,EAAc8xB,cAAczkC,QCb/G,CACA,MAAOpP,GACH,MACJ,CACJ,CDSwD8zC,GAC1CH,GAAiB5xB,EAAc8xB,cAAczkC,UAC7C2S,CANV,CAOJ,EEaIgyB,GAAe,SAAUllC,GACzB,OAAOA,EAAK6H,WAAaq9B,GAAallC,EAAK6H,YAAc7H,CAC7D,EAMWmlC,GAAsB,SAAUnlC,GAEvC,OADYygC,GAAQzgC,GACPsZ,OAAOkpB,SAAS5lC,QAAO,SAAU+mC,EAAKyB,GAC/C,IAAI7H,EAAQ6H,EAAYrgC,aAAa20B,GAIrC,OAHAiK,EAAIhhC,KAAK7K,MAAM6rC,EAAMpG,EAnCV,SAAU2F,GAGzB,IAFA,IAAImC,EAAY,IAAI7lB,IAChBntB,EAAI6wC,EAAMjwC,OACLpB,EAAI,EAAGA,EAAIQ,EAAGR,GAAK,EACxB,IAAK,IAAIyzC,EAAIzzC,EAAI,EAAGyzC,EAAIjzC,EAAGizC,GAAK,EAAG,CAC/B,IAAI39B,EAAWu7B,EAAMrxC,GAAG0zC,wBAAwBrC,EAAMoC,KAEjD39B,EAAWi5B,KAAK4E,gCAAkC,GACnDH,EAAUvxC,IAAIwxC,IAEb39B,EAAWi5B,KAAK6E,4BAA8B,GAC/CJ,EAAUvxC,IAAIjC,EAGtB,CAEJ,OAAOqxC,EAAM5pB,QAAO,SAAU7kB,EAAGuO,GAAS,OAAQqiC,EAAUtF,IAAI/8B,EAAQ,GAC5E,CAmBc0iC,CAAanF,GAAQ2E,GAAaE,GAAahqB,iBAAiB,IAAIhhB,OAAOs/B,EAAa,MAAOt/B,OAAOmjC,EAAO,YAAanjC,OAAOu/B,EAAgB,oBACjJ,CAACyL,IACAzB,CACX,GAAG,GACP,ECrCWgC,GAAc,SAAUC,EAAS1yB,GAGxC,YADsB,IAAlBA,IAA4BA,EAAgB4xB,GAAiBpE,GAASkF,GAAStlC,mBAC9E4S,GAAkBA,EAAc+uB,SAAW/uB,EAAc+uB,QAAQQ,aAG/D0C,GAAoBS,GAAShB,MAAK,SAAU5kC,GAC/C,OAAO6U,GAAS7U,EAAMkT,IAdN,SAAU0yB,EAAS1yB,GACvC,OAAOsvB,QAAQjC,GAAQqF,EAAQxqB,iBAAiB,WAAWwpB,MAAK,SAAU5kC,GAAQ,OAFnE,SAAU6lC,EAAO3yB,GAAiB,OAAO2yB,IAAU3yB,CAAe,CAEQ4yB,CAAa9lC,EAAMkT,EAAgB,IAChI,CAYgD6yB,CAAkB/lC,EAAMkT,EACpE,GACJ,ECrBW8yB,GAAU,SAAUnoC,EAAQ0gC,GAC9B1gC,IAID,UAAWA,GACXA,EAAOsV,MAAMorB,GAEb,kBAAmB1gC,GAAUA,EAAOmnC,eACpCnnC,EAAOmnC,cAAc7xB,QAE7B,ECJW8yB,GAAc,SAAUjmC,EAAMkjC,GACrC,OAAId,GAAepiC,IAASA,EAAKvN,KAPb,SAAUuN,EAAMkjC,GACpC,OAAOA,EACF5pB,OAAO8oB,IACP9oB,QAAO,SAAUlS,GAAM,OAAOA,EAAG3U,OAASuN,EAAKvN,IAAM,IACrD6mB,QAAO,SAAUlS,GAAM,OAAOA,EAAG8+B,OAAS,IAAG,IAAMlmC,CAC5D,CAGemmC,CAAkBnmC,EAAMkjC,GAE5BljC,CACX,ECXWomC,GAAiB,SAAUlD,GAClC,OAAIA,EAAM,IAAMA,EAAMjwC,OAAS,EACpBgzC,GAAY/C,EAAM,GAAIA,GAE1BA,EAAM,EACjB,EACWmD,GAAgB,SAAUnD,EAAOljC,GACxC,OAAOkjC,EAAM/oC,QAAQ8rC,GAAYjmC,EAAMkjC,GAC3C,ECNWoD,GAAY,YCaZC,GAAgB,SAAUC,EAAcC,EAAcC,GAC7D,IAd4BC,EAcxBzD,EAAQsD,EAAa51C,KAAI,SAAU2xC,GAEnC,OADWA,EAAGviC,IAElB,IACI4mC,EAAgBrC,GAAoBrB,EAAM5pB,QAlBlBqtB,EAkByCD,EAjB9D,SAAU1mC,GACb,IAAIuiC,EACAsE,EAAwC,QAA3BtE,EAAKP,GAAWhiC,UAA0B,IAAPuiC,OAAgB,EAASA,EAAGsE,UAChF,OAEA7mC,EAAK6mC,gBAEcliC,IAAdkiC,GAAyC,UAAdA,GAE5BF,EAAexsC,QAAQ6F,IAAS,CACxC,KAQA,OAAI4mC,GAAiBA,EAAc3zC,OACxBmzC,GAAeQ,GAEnBR,GAAe7B,GAAoBkC,GAC9C,ECvBIK,GAAa,SAAU9mC,EAAM8jC,GAM7B,YALgB,IAAZA,IAAsBA,EAAU,IACpCA,EAAQnhC,KAAK3C,GACTA,EAAK6H,YACLi/B,GAAW9mC,EAAK6H,WAAWi5B,MAAQ9gC,EAAK6H,WAAYi8B,GAEjDA,CACX,EAOWiD,GAAkB,SAAUC,EAAOC,GAI1C,IAHA,IAAIC,EAAWJ,GAAWE,GACtBG,EAAWL,GAAWG,GAEjBp1C,EAAI,EAAGA,EAAIq1C,EAASj0C,OAAQpB,GAAK,EAAG,CACzC,IAAIu1C,EAAgBF,EAASr1C,GAC7B,GAAIs1C,EAAShtC,QAAQitC,IAAkB,EACnC,OAAOA,CAEf,CACA,OAAO,CACX,EACWC,GAAqB,SAAUC,EAAmBC,EAAWC,GACpE,IAAIC,EAAiBhH,GAAQ6G,GACzBI,EAAcjH,GAAQ8G,GACtBr0B,EAAgBu0B,EAAe,GAC/BE,GAAY,EAgBhB,OAfAD,EAAYpuB,OAAOkpB,SAASnpC,SAAQ,SAAUuuC,GAC1CD,EAAYZ,GAAgBY,GAAaC,EAAOA,IAAUD,EAC1DH,EAAaluB,OAAOkpB,SAASnpC,SAAQ,SAAUwuC,GAC3C,IAAIC,EAASf,GAAgB7zB,EAAe20B,GACxCC,IAEIH,GADCA,GAAa9yB,GAASizB,EAAQH,GACnBG,EAGAf,GAAgBe,EAAQH,GAGhD,GACJ,IAEOA,CACX,EAMWI,GAA0B,SAAUr7B,EAASw0B,GACpD,OAAOx0B,EAAQ9P,QAAO,SAAU+mC,EAAK3jC,GAAQ,OAAO2jC,EAAIvpC,OVR1B,SAAUwrC,EAAS1E,GACjD,OAAOkD,IFbH4D,EEa2CpC,EFbtBxqB,iBAAiB,IAAIhhB,OdrB1B,wBcqB6C,MAC1DmmC,GAAQyH,GACVp3C,KAAI,SAAUoP,GAAQ,OAAO6jC,GAAc,CAAC7jC,GAAQ,IACpDpD,QAAO,SAAU+mC,EAAKT,GAAS,OAAOS,EAAIvpC,OAAO8oC,EAAQ,GAAG,KEURhC,GFdxB,IAC7B8G,CEcR,CUMmEC,CAAqBjoC,EAAMkhC,GAAmB,GAAG,GACpH,ECjCWgH,GAAc,SAAUtC,EAASuC,GACxC,IAAIj1B,EAAgB4xB,GAAiBrE,GAAQmF,GAAS3yC,OAAS,EAAIsN,SAAWmgC,GAASkF,GAAStlC,eAC5FoM,EAAUy4B,GAAoBS,GAAStsB,OAAOopB,IAC9C0F,EAAef,GAAmBn0B,GAAiB0yB,EAASA,EAASl5B,GACrEw0B,EAAkB,IAAIsD,IACtB6D,EAAe1D,GAAkBj4B,EAASw0B,GAC1CoH,EAAgBD,EAAa/uB,QAAO,SAAUipB,GAC9C,IAAIviC,EAAOuiC,EAAGviC,KACd,OAAO0iC,GAAY1iC,EACvB,IACA,GAAKsoC,EAAc,GAAnB,CAGA,IA9ByBC,EAAUC,EAC/BC,EA6BAC,EAAa/D,GAAkB,CAACyD,GAAelH,GAAiBtwC,KAAI,SAAU2xC,GAE9E,OADWA,EAAGviC,IAElB,IACI2oC,GAlCqBJ,EAkCeG,EAlCLF,EAkCiBF,EAjChDG,EAAQ,IAAIjE,IAEhBgE,EAASnvC,SAAQ,SAAUuvC,GAAU,OAAOH,EAAMhxC,IAAImxC,EAAO5oC,KAAM4oC,EAAS,IAErEL,EAAS33C,KAAI,SAAUoP,GAAQ,OAAOyoC,EAAMpwC,IAAI2H,EAAO,IAAGsZ,OAAOqpB,KA+BpEkG,EAAkBF,EAAqB/3C,KAAI,SAAU2xC,GAErD,OADWA,EAAGviC,IAElB,IACI8oC,EAAgBH,EAAqBrvB,QAAO,SAAUipB,GAEtD,OADeA,EAAG1pB,UACC,CACvB,IAAGjoB,KAAI,SAAU2xC,GAEb,OADWA,EAAGviC,IAElB,IACI+oC,EH1Cc,SAAUC,EAAYC,EAAgBP,EAAYx1B,EAAei1B,GACnF,IAAIe,EAAMF,EAAW/1C,OACjBk2C,EAAaH,EAAW,GACxBI,EAAYJ,EAAWE,EAAM,GAC7BG,EAAY/G,GAAQpvB,GAExB,KAAIA,GAAiB81B,EAAW7uC,QAAQ+Y,IAAkB,GAA1D,CAGA,IAAIo2B,OAAgC3kC,IAAlBuO,EAA8Bw1B,EAAWvuC,QAAQ+Y,IAAkB,EACjFq2B,EAAYpB,EAAWO,EAAWvuC,QAAQguC,GAAYmB,EACtDE,EAAiBrB,EAAWa,EAAW7uC,QAAQguC,IAAa,EAEhE,IAAqB,IAAjBmB,EAEA,OAAwB,IAApBE,EACOA,EAEJlD,GAGX,IAAwB,IAApBkD,EACA,OAAOlD,GAEX,IFpBgCpD,EAE5BuG,EEkBAzG,EAAYsG,EAAcC,EAC1BG,EAAiBhB,EAAWvuC,QAAQgvC,GACpCQ,EAAgBjB,EAAWvuC,QAAQivC,GACnCQ,GFvB4B1G,EEuBEwF,EFrB9Be,EAAY,IAAIjqB,IACpB0jB,EAAM7pC,SAAQ,SAAU2G,GAAQ,OAAOypC,EAAU31C,IAAImyC,GAAYjmC,EAAMkjC,GAAS,IAEzEA,EAAM5pB,QAAO,SAAUtZ,GAAQ,OAAOypC,EAAU1J,IAAI//B,EAAO,KEmB9D6pC,OAA0CllC,IAAlBuO,EAA8B02B,EAAezvC,QAAQ+Y,IAAkB,EAC/F42B,EAAyB3B,EAAWyB,EAAezvC,QAAQguC,GAAY0B,EACvEE,EAAgBH,EAAetwB,QAAO,SAAUtZ,GAAQ,OAAOA,EAAK6Y,UAAY,CAAG,IACnFmxB,OAAyCrlC,IAAlBuO,EAA8B62B,EAAc5vC,QAAQ+Y,IAAkB,EAC7F+2B,EAAwB9B,EAAW4B,EAAc5vC,QAAQguC,GAAY6B,EACrEE,EAAiBF,GAAwB,GAAKC,GAAyB,EAEnEA,EAAwBD,EAExBF,EAAyBD,EAEjC,IAAK7G,GAAawG,GAAkB,EAChC,OAAOA,EAGX,GAA8B,IAA1BP,EAAeh2C,OAIf,OAAOu2C,EAEX,IAAIW,EAAkB9D,GAAc2C,EAAYC,EAAe,IAC3DmB,EAAiB/D,GAAc2C,EAAYC,EAAeA,EAAeh2C,OAAS,IAEtF,OAAIq2C,GAAeI,GAAkBL,GAAa91C,KAAKC,IAAIwvC,GAAa,EAC7DoH,EAGPd,GAAeK,GAAiBN,GAAa91C,KAAKC,IAAIwvC,GAAa,EAC5DmH,EAGPnH,GAAazvC,KAAKC,IAAI02C,GAAkB,EACjCV,EAGPF,GAAeI,EACRU,EAGPd,EAAcK,EACPQ,EAGPnH,EACIzvC,KAAKC,IAAIwvC,GAAa,EACfwG,GAEHN,EAAMM,EAAiBxG,GAAakG,OAJhD,CAhEA,CAwEJ,CGtCgBmB,CAASxB,EAAiBC,EAAeJ,EAAYx1B,EAAei1B,GAChF,GAAIY,IAAUzC,GAAW,CACrB,IAAIgE,EAEJ/D,GAAc8B,EAAcS,EAAef,GAAwBr7B,EAASw0B,KACxEqF,GAAc8B,EAAcQ,EAAiBd,GAAwBr7B,EAASw0B,IAClF,OAAIoJ,EACO,CAAEtqC,KAAMsqC,QAGfj8B,QAAQk8B,KAAK,sDAGrB,CACA,YAAc5lC,IAAVokC,EACOA,EAEJJ,EAAqBI,EAnC5B,CAoCJ,ECvEIyB,GAAa,EACbC,IAAe,EAaRC,GAAkB,SAAU9E,EAASuC,EAAU13B,QACtC,IAAZA,IAAsBA,EAAU,CAAC,GACrC,IAAIsR,EAAYmmB,GAAYtC,EAASuC,GAErC,IAAIsC,IAGA1oB,EAAW,CAEX,GAAIyoB,GAAa,EAQb,OANAn8B,QAAQyB,MAAM,qJAEd26B,IAAe,OACfvjC,YAAW,WACPujC,IAAe,CACnB,GAAG,GAGPD,KACAxE,GAAQjkB,EAAU/hB,KAAMyQ,EAAQ8tB,cAChCiM,IACJ,CACJ,ECtCA,SAASG,GAAQvmC,GACb,IAAKA,EACD,OAAO,KAGX,GAAuB,oBAAZwmC,QACP,OAAO,WAAc,OAAOxmC,GAAS,IAAM,EAE/C,IAAInQ,EAAImQ,EAAQ,IAAIwmC,QAAQxmC,GAAS,KACrC,OAAO,WAAc,OAAQnQ,aAA6B,EAASA,EAAE42C,UAAY,IAAM,CAC3F,CACO,IAwEIhM,GAAsB,SAAUiM,GACvC,IAAIxiB,EAzE2B,SAAU9iB,GACzC,IAAKA,EACD,OAAO,KAIX,IAFA,IAAIulC,EAAQ,GACRC,EAAiBxlC,EACdwlC,GAAkBA,IAAmBzqC,SAAS4c,MACjD4tB,EAAMpoC,KAAK,CACPuM,QAASy7B,GAAQK,GACjB7qC,OAAQwqC,GAAQK,EAAeC,eAC/BjqC,KAAM2pC,GAAQK,EAAeE,wBAC7BC,MAAOR,GAAQK,EAAeI,sBAElCJ,EAAiBA,EAAeC,cAEpC,MAAO,CACHzlC,QAASmlC,GAAQnlC,GACjBulC,MAAOA,EACPzqC,cAAekF,EAAQlF,cAE/B,CAqDmB+qC,CAAsBP,GACrC,OAAO,WACH,OAtDa,SAAUxiB,GAC3B,IAAIia,EAAI+I,EAAIC,EAAIC,EAAIC,EACpB,GAAKnjB,EAKL,IAFA,IAAIyiB,EAAQziB,EAASyiB,MAAOzqC,EAAgBgoB,EAAShoB,cACjD4gC,EAAkB,IAAIsD,IACjBkH,EAAK,EAAGC,EAAUZ,EAAOW,EAAKC,EAAQ14C,OAAQy4C,IAAM,CACzD,IAAIE,EAAOD,EAAQD,GACfG,EAAkC,QAAtBtJ,EAAKqJ,EAAKzrC,cAA2B,IAAPoiC,OAAgB,EAASA,EAAGxmC,KAAK6vC,GAE/E,GAAIC,GAAYvrC,EAAcuU,SAASg3B,GAAW,CAe9C,IAdA,IAAI7qC,EAA4B,QAApBsqC,EAAKM,EAAK5qC,YAAyB,IAAPsqC,OAAgB,EAASA,EAAGvvC,KAAK6vC,GACrEE,EAAeF,EAAK18B,UACpBA,EAAU28B,EAASh3B,SAASi3B,GAAgBA,OAAennC,EAC3DwmC,EAA8B,QAArBI,EAAKK,EAAKT,aAA0B,IAAPI,OAAgB,EAASA,EAAGxvC,KAAK6vC,GACvEG,EAAatH,GAAiB,CAACoH,GAAW3K,GAC1C8K,EAMO,QAJVP,EAEwE,QAFlED,EAAKt8B,QAAyCA,EAErDlO,aAAmC,EAASA,EAAKoqC,0BAAuC,IAAPI,EAAgBA,EAEjGL,SAA0B,IAAPM,EAAgBA,EAEnCzqC,EACOgrC,GAAK,CACR,IAAK,IAAIC,EAAK,EAAGC,EAAeH,EAAYE,EAAKC,EAAaj5C,OAAQg5C,IAAM,CACxE,IAAIlqB,EAAYmqB,EAAaD,GAC7B,GAAID,aAAiC,EAASA,EAAIn3B,SAASkN,EAAU/hB,MACjE,OAAO+hB,EAAU/hB,IAEzB,CACAgsC,EAAMA,EAAIZ,kBACd,CACA,GAAIW,EAAW94C,OAEX,OAAO84C,EAAW,GAAG/rC,IAE7B,CACJ,CAGJ,CAWemsC,CAAe7jB,EAC1B,CACJ,ECnCI8jB,GAAY,SAAUC,EAAa57B,EAASqqB,QAC5B,IAAZrqB,IAAsBA,EAAU,CAAC,GACrC,IAAI67B,EATa,SAAU77B,GAC3B,OAAOlf,OAAO8vB,OAAO,CACjBlZ,MAAO5H,SAAS4c,KAChBge,OAAO,EACPoR,cAAc,GACf97B,EACP,CAGqB+7B,CAAe/7B,GAC5Bg8B,EA/C0B,SAAUjnC,EAAS2C,EAAOukC,GACxD,IAAKlnC,IAAY2C,EAEb,OADAkG,QAAQyB,MAAM,6BACP,CAAC,EAEZ,IAAI8tB,EAAS6C,GAAQt4B,GACrB,GAAIy1B,EAAO9a,OAAM,SAAU6pB,GAAS,OAAQ93B,GAAS83B,EAAOnnC,EAAU,IAElE,OADA6I,QAAQyB,MAAM,gDACP,CAAC,EAEZ,IAAIi8B,EAAaW,EACXjI,GAAiB7G,EAAQ,IAAI4G,KAC7BG,GAAkB/G,EAAQ,IAAI4G,KAChCt1B,EAAU68B,EAAW/Y,WAAU,SAAUuP,GAEzC,OADWA,EAAGviC,OACEwF,CACpB,IACA,OAAiB,IAAb0J,EAIG,CACH09B,KAAMb,EAAW78B,EAAU,GAC3B29B,KAAMd,EAAW78B,EAAU,GAC3B49B,MAAOf,EAAW,GAClB9kC,KAAM8kC,EAAWA,EAAW94C,OAAS,SARzC,CAUJ,CAoBmB85C,CAAqBV,EAAaC,EAAWnkC,MAAOmkC,EAAWC,cAC9E,GAAKE,EAAL,CAGA,IAAI5uC,EAASi9B,EAAG2R,EAAUH,EAAWnR,OACjCt9B,GACAmoC,GAAQnoC,EAAOmC,KAAMssC,EAAW/N,aAHpC,CAKJ,EAyBIyO,GAAe,SAAU7kC,EAAOsI,EAASw8B,GACzC,IAAI1K,EArDoB3E,EAAQ8O,EAC5Bj1C,EAsDAuI,GAvDoB49B,EAsDGz1B,EAtDKukC,EAsDkC,QAA/BnK,EAAK9xB,EAAQ87B,oBAAiC,IAAPhK,GAAgBA,EAlDnF,CACHuK,OAJAr1C,EAAMi1C,EACJjI,GAAiBhE,GAAQ7C,GAAS,IAAI4G,KACtCG,GAAkBlE,GAAQ7C,GAAS,IAAI4G,MAE9B,GACXv9B,KAAMxP,EAAIA,EAAIxE,OAAS,KAiDPg6C,GAChBjtC,GACAgmC,GAAQhmC,EAAKA,KAAMyQ,EAAQ8tB,aAEnC,ECjGO,SAAS2O,GAAYC,GAC1BjmC,WAAWimC,EAAQ,EACrB,CACO,IAKIC,GAAa,SAAoBntC,GAC1C,OAAOA,GAAO,YAAaA,EAAMA,EAAIiP,QAAUjP,CACjD,ECJIotC,GAAc,WAChB,OAAO9sC,UAAYA,SAAS2S,gBAAkB3S,SAAS4c,IACzD,EAIImwB,GAAiB,KACjBC,GAAkB,KAClBC,GAAkB,WACpB,OAAO,IACT,EACIC,GAAsB,KACtBC,IAAwB,EACxBC,IAAgB,EAChBC,GAAmB,WACrB,OAAO,CACT,EAaA,SAASC,GAAUC,EAAYC,EAAKC,EAAMC,GACxC,IAAIC,EAAY,KACZr8C,EAAIi8C,EACR,EAAG,CACD,IAAIv0B,EAAO00B,EAASp8C,GACpB,GAAI0nB,EAAK40B,MACH50B,EAAKvZ,KAAKiiC,QAAQmM,iBACpBF,EAAY30B,OAET,KAAIA,EAAK80B,SAMd,MALA,GAAIx8C,IAAMi8C,EACR,OAEFI,EAAY,IAGd,CACF,QAAUr8C,GAAKm8C,KAAUD,GACrBG,IACFA,EAAUluC,KAAK6Y,SAAW,EAE9B,CACA,IAMIy1B,GAAc,SAASA,EAAYC,EAAOnnC,EAAIonC,GAChD,OAAOpnC,IAAOA,EAAG05B,OAASyN,KAAWnnC,EAAG8L,eAAiBs7B,EAAS35B,SAASzN,EAAG8L,iBAAmB9L,EAAGS,YAAcymC,EAAYC,EAAOnnC,EAAGS,WAAY2mC,GACtJ,EAMIC,GAAoB,SAA2BvL,GACjD,OAAOyB,GAAkBzB,EAAO,IAAIsB,IACtC,EAMIkK,GAAe,WACjB,ICrE0C9I,EACpCl5B,EACA07B,EACAM,EACAJ,EDiB+C9iC,EA0CVxF,EAMvC+G,GAAS,EACb,GAAIumC,GAAgB,CAClB,IAAIqB,EAAkBrB,GACpB3Q,EAAWgS,EAAgBhS,SAC3BO,EAAkByR,EAAgBzR,gBAClCI,EAAYqR,EAAgBrR,UAC5BM,EAAS+Q,EAAgB/Q,OACzBR,EAAauR,EAAgBvR,WAC7BmB,EAAeoQ,EAAgBpQ,aAC/BvB,EAAgB2R,EAAgB3R,cAC9B4R,EAAcjS,GAAY8Q,IAAuBA,GAAoBoB,gBACzE,GAAIxB,MAAiBE,IAAmBA,KAAoBhtC,SAAS4c,QAC9D5c,SAAS4c,KAAKtI,SAAS04B,MAjBxBkB,GAAkB,EADiBzuC,EAkBwButC,IAjBnC1lC,aAAa+8B,MAAK,SAAUx9B,GAC1D,OAAOA,EAAGpH,OAASA,CACrB,KAeqF,CAC/E,IAAI8uC,EAAYtB,KACZsB,GACFA,EAAU37B,OAEd,CAEF,IAAID,EAAgB3S,UAAYA,SAAS2S,cACzC,GAAI07B,EAAa,CACf,IAAIG,EAAc,CAACH,GAAax0C,OAAOwjC,EAAOhtC,IAAIw8C,IAAY9zB,OAAOkpB,UAkCrE,GAtBKtvB,IA1FY,SAA0BA,GAC/C,OAAQo6B,GAAe7P,WAAamQ,IAAkB16B,EACxD,CAwF4B87B,CAAiB97B,KACjCgqB,GAZwB,WAC5B,KAAqBE,EA5ClBoF,QAAQkL,IAEgB,cAA1BA,MA0CoC1Q,IAAkBuQ,IAAmBI,GACxE,OAAO,EA/CK,IAiDVzK,EAAQuL,GAAkBM,GAC1BxF,EAAYrG,EAAMlQ,WAAU,SAAUsI,GAExC,OADWA,EAAKt7B,OACAutC,EAClB,IACA,OAAqB,IAAdhE,GAAmBA,IAAcrG,EAAMjwC,OAAS,CACzD,CAEyBg8C,MAxGtB5B,MEEkB,SAAUtI,QACd,IAAfA,IAAyBA,EAAaxkC,UAC1C,IAAI2S,EAAgB4xB,GAAiBC,GACrC,QAAK7xB,GAIEqtB,GAAQwE,EAAW3pB,iBAAiB,IAAIhhB,OlCR1B,qBkCQ8C,OAAOwqC,MAAK,SAAU5kC,GAAQ,OAAO6U,GAAS7U,EAAMkT,EAAgB,GAC3I,CFV0Bg8B,MAwGqD3B,IAAmBjQ,KACpFsR,KAAiBjJ,GAAYoJ,IAAgB77B,GAjD1C,SAAoBA,EAAe67B,GAClD,OAAOA,EAAYnK,MAAK,SAAUuK,GAChC,OAAOb,GAAYp7B,EAAei8B,EAAMA,EAC1C,GACF,CA6C4EC,CAAWl8B,EAAe67B,KAnF/CvpC,EAmFmF0N,EAlFjIu6B,IAAuBA,GAAoBoB,kBAAoBrpC,MAmFxDjF,WAAagtC,IAAmBr6B,IAAkBoqB,GAChDpqB,EAAcm8B,MAChBn8B,EAAcm8B,OAEhB9uC,SAAS4c,KAAKhK,UAEdpM,EAAS2jC,GAAgBqE,EAAaxB,GAAiB,CACrDhP,aAAcA,IAEhBkP,GAAsB,CAAC,KAG3BF,GAAkBhtC,UAAYA,SAAS2S,iBACf3S,SAAS4c,OAC/BqwB,GAAkB3O,GAAoB0O,KAExCG,IAAwB,GAGxBntC,UAAY2S,IAAkB3S,SAAS2S,eAAiB3S,SAASkE,cAAc,2BAA4B,CAC7G,IAAI6qC,EAAmB/uC,UAAYA,SAAS2S,cACxC+6B,GC7HJvhC,EAAUy4B,GAD0BS,ED8HAmJ,GC7HGz1B,OAAOopB,IAC9C0F,EAAef,GAAmBzB,EAASA,EAASl5B,GACpDg8B,EAAazF,GAAgBY,GAAc,CAACuE,IAAe,IAAO,GAAM,GACxEE,EAAgBzE,GAAcn3B,GAAS,GACpCg8B,EAAW93C,KAAI,SAAU2xC,GAC5B,IAAIviC,EAAOuiC,EAAGviC,KACd,MAAQ,CACJA,KAAMA,EACNgD,MAHwBu/B,EAAGv/B,MAI3BqrC,SAAU/F,EAAcnuC,QAAQ6F,IAAS,EACzCmuC,MAAO7L,GAAQtiC,GAEvB,KDkHQuvC,EAAetB,EAASr9C,KAAI,SAAU4+C,GAExC,OADWA,EAAMxvC,IAEnB,IAAG7F,QAAQm1C,GACPC,GAAgB,IAClBtB,EAAS30B,QAAO,SAAUm2B,GACxB,IAAItB,EAAQsB,EAAMtB,MAChBnuC,EAAOyvC,EAAMzvC,KACf,OAAOmuC,GAASnuC,EAAKiiC,QAAQmM,cAC/B,IAAG/0C,SAAQ,SAAUq2C,GAEnB,OADWA,EAAM1vC,KACLuF,gBAAgB,WAC9B,IACAsoC,GAAU0B,EAActB,EAASh7C,OAAQ,EAAIg7C,GAC7CJ,GAAU0B,GAAe,GAAI,EAAGtB,GAEpC,CACF,CACF,CACA,OAAOlnC,CACT,EACI4oC,GAAS,SAAgBnoC,GACvBknC,MAAkBlnC,IACpBA,EAAMooC,kBACNpoC,EAAMsM,iBAEV,EACIxD,GAAS,WACX,OAAO48B,GAAYwB,GACrB,EAqBImB,GAAgB,WAClBlC,IAAgB,CAClB,EACImC,GAAe,WACjBnC,IAAgB,EAChBD,GAAwB,OACxBR,IAAY,WACVQ,GAAwB,WAC1B,GACF,EAmBIqC,GAAe,CACjBrF,gBAAiBA,GACjB/E,YAAaA,GACbqK,iBFpJ4B,SAAU3D,EAAa57B,QACjC,IAAZA,IAAsBA,EAAU,CAAC,GACrC27B,GAAUC,EAAa57B,GAAS,SAAU8xB,EAAIpH,GAC1C,IAAI0R,EAAOtK,EAAGsK,KAAMC,EAAQvK,EAAGuK,MAC/B,OAAOD,GAAS1R,GAAS2R,CAC7B,GACJ,EE+IEmD,iBFzI4B,SAAU5D,EAAa57B,QACjC,IAAZA,IAAsBA,EAAU,CAAC,GACrC27B,GAAUC,EAAa57B,GAAS,SAAU8xB,EAAIpH,GAC1C,IAAIyR,EAAOrK,EAAGqK,KAAM3lC,EAAOs7B,EAAGt7B,KAC9B,OAAO2lC,GAASzR,GAASl0B,CAC7B,GACJ,EEoIEipC,kBFvH6B,SAAU/nC,EAAOsI,QAC5B,IAAZA,IAAsBA,EAAU,CAAC,GACrCu8B,GAAa7kC,EAAOsI,EAAS,QACjC,EEqHE0/B,iBFhH4B,SAAUhoC,EAAOsI,QAC3B,IAAZA,IAAsBA,EAAU,CAAC,GACrCu8B,GAAa7kC,EAAOsI,EAAS,OACjC,EE8GEouB,oBAAqBA,IA+BvBxD,GAAYR,kBAtFE,SAAiBrzB,GAC7B,IAAI4oC,EAAS5oC,EAAM3J,OACfunC,EAAc59B,EAAM+zB,cACnB6J,EAAYvwB,SAASu7B,KAhJ1B3C,GAAsB,CACpB4C,aAgJajL,EA/IbyJ,gBA+I0BuB,GAE9B,IAiFA5U,GAAWR,aAAa1qB,IACxBmrB,GAAaT,cAAa,SAAUF,GAClC,OAAOA,EAAGiV,GACZ,IACA,UG/PwBO,GH8MxB,SAA4BC,GAC1B,OAAOA,EAAUj3B,QAAO,SAAUk3B,GAEhC,OADeA,EAAMhgC,QAEvB,GACF,EGnN4CigC,GH6N5C,SAAmCC,GACjC,IAAIC,EAAOD,EAAM34C,OAAO,GAAG,GACvB44C,IAASrD,KA5Bb/sC,SAASb,iBAAiB,UAAWiwC,IACrCpvC,SAASb,iBAAiB,WAAY4Q,IACtC7Q,OAAOC,iBAAiB,QAASmwC,IACjCpwC,OAAOC,iBAAiB,OAAQowC,KA4BhC,IAAIc,EAAWtD,GACXuD,EAAWD,GAAYD,GAAQA,EAAK5/C,KAAO6/C,EAAS7/C,GACxDu8C,GAAiBqD,EACbC,IAAaC,IACfD,EAASjS,iBACJ+R,EAAMp3B,QAAO,SAAUw3B,GAE1B,OADSA,EAAM//C,KACD6/C,EAAS7/C,EACzB,IAAGkC,QACD29C,EAASvS,aAAasS,IAGtBA,GACFpD,GAAkB,KACbsD,GAAYD,EAASjU,WAAagU,EAAKhU,UAC1CgU,EAAKlS,aAAasR,IAEpBrB,KACAxB,GAAYwB,MA3CdnuC,SAAS+E,oBAAoB,UAAWqqC,IACxCpvC,SAAS+E,oBAAoB,WAAYgL,IACzC7Q,OAAO6F,oBAAoB,QAASuqC,IACpCpwC,OAAO6F,oBAAoB,OAAQwqC,IA2CjCvC,GAAkB,KAEtB,EG1OS,SAAcwD,GAOnB,IACIphC,EADAqhC,EAAmB,GAGvB,SAASC,IACPthC,EAAQ2gC,GAAmBU,EAAiBpgD,KAAI,SAAU0S,GACxD,OAAOA,EAASxF,KAClB,KACA2yC,GAA0B9gC,EAC5B,CAEA,IAAIuhC,EAA0B,SAAUC,GAGtC,SAASD,IACP,OAAOC,EAAer5C,MAAMzC,KAAMT,YAAcS,IAClD,EAJA+7C,EAAAA,GAAAA,GAAeF,EAAYC,GAO3BD,EAAWG,KAAO,WAChB,OAAO1hC,CACT,EAEA,IAAI2hC,EAASJ,EAAW37C,UAqBxB,OAnBA+7C,EAAOr6B,kBAAoB,WACzB+5B,EAAiBruC,KAAKtN,MACtB47C,GACF,EAEAK,EAAOj5B,mBAAqB,WAC1B44B,GACF,EAEAK,EAAOl6B,qBAAuB,WAC5B,IAAIpU,EAAQguC,EAAiB72C,QAAQ9E,MACrC27C,EAAiB/tC,OAAOD,EAAO,GAC/BiuC,GACF,EAEAK,EAAOvhC,OAAS,WACd,OAAoB+pB,EAAAA,cAAoBiX,EAAkB17C,KAAKyI,MACjE,EAEOozC,CACT,CAlC8B,CAkC5BK,EAAAA,eAIF,OCzEJ,SAAyBpgD,EAAGS,EAAGkB,IACrBlB,ECAV,SAAuBkB,GACrB,IAAIjB,ECFN,SAAqBiB,GACnB,GAAI,UAAYstC,GAAQttC,KAAOA,EAAG,OAAOA,EACzC,IAAI3B,EAAI2B,EAAEutC,OAAOmR,aACjB,QAAI,IAAWrgD,EAAG,CAChB,IAAIU,EAAIV,EAAE4K,KAAKjJ,EAAGlB,UAClB,GAAI,UAAYwuC,GAAQvuC,GAAI,OAAOA,EACnC,MAAM,IAAI0R,UAAU,+CACtB,CACA,OAAyBvQ,OAAiBF,EAC5C,CDPU0+C,CAAY1+C,GACpB,MAAO,UAAYstC,GAAQvuC,GAAKA,EAAIA,EAAI,EAC1C,CDHc4/C,CAAc7/C,MAAOT,EAAII,OAAO4M,eAAehN,EAAGS,EAAG,CAC/DwS,MAAOtR,EACPkL,YAAY,EACZC,cAAc,EACdC,UAAU,IACP/M,EAAES,GAAKkB,CACd,CDgEI4+C,CAAgBR,EAAY,cAAe,cAzD7C,SAAwBH,GACtB,OAAOA,EAAiBxuB,aAAewuB,EAAiBt+C,MAAQ,WAClE,CAuD6Dk/C,CAAeZ,GAAoB,KAEvFG,CACT,IHoGiB,WACjB,OAAO,IACT,IG7KA,IAAwBZ,GAAoBG,GICxCmB,IAAoC3V,EAAAA,EAAAA,aAAW,SAAgCn+B,EAAOmC,GACxF,OAAoB65B,EAAAA,cAAoB+X,IAAavS,EAAAA,EAAAA,GAAS,CAC5DnB,QAAS2T,GACT7xC,IAAKA,GACJnC,GACL,IACIw9B,GAAOuW,GAAY5rC,WAAa,CAAC,EACzBq1B,GAAK6C,SACH4T,EAAAA,EAAAA,GAA8BzW,GAAM,CAAC,YACnDsW,GAAqB3rC,UAAgE,CAAC,EACtF,MCbA,GDaA,GEXa+rC,GAAyEl0C,IAE9E,gBAAK8H,UAAU,2DAA0D,UACrE,gBAAKA,UAAU,sCAAqC,UAChD,gBACI8rB,IAAI,8BACJ9rB,UAAU,gCACV+rB,IAAI,oECTXsgB,GAAwB,KAC1B,EAAA/Z,EAAA,GAAM,CACT1sB,IAAK,gCACL0mC,OAAQ,SACThoC,MAAKnD,GACGA,EAAOoC,OCJTgpC,GAA2B,qBAC3BC,GAAwC,kCAIxCC,GAA2B,aAC3BC,GAA4B,iBAC5BC,GAA8B,oBAC9BC,GAAsC,qBAItCC,GAAmC,CAACC,EAAa,sBAC1D,mBAAmBA,oBACVC,GAAiC,CAAC3mC,EAAiB4mC,EAAmBF,EAAa,uBAC5F,+BAA+B1mC,mBAAyB4mC,gBAAwBF,IAI9EG,GAAc,CAAC,4BAkCRC,GAA0B,CACnCC,EACAvjC,EACAwjC,EAAcb,MAEd,MAAMc,EAA2B,CAC7BC,mBAAoB,WAChB,OAAOjB,IACX,EACAe,YAAaA,EACbN,WA3CW,kBA4CXS,gBAAiBN,GACjBO,kBAAkB,GAOtB,OAJIL,IACAE,EAAOF,mBAAqBA,GAGxBvjC,GACJ,IAAK,QACDyjC,EAAOI,eAAiB,KACxB,MACJ,IAAK,MACDJ,EAAOI,eAAiB,MAIhC,OAAOJ,CAAM,ECpBjB,GA5CA,SAAyBn1C,GACrB,MAAMw1C,EAbV,SAA6B75B,EAA0BC,GACnD,MAAM45B,EAAe75B,EAAO,IAAMC,EAElC,OAAID,GAAQC,GAAS45B,EAAargD,QDSJ,GCRnBqgD,EACA75B,GAAQA,EAAKxmB,QDOM,GCNnBwmB,EAEA,KAEf,CAGyB85B,CACjBz1C,EAAM01C,oBAAoBC,YAC1B31C,EAAM01C,oBAAoBE,cAG9B,OACI,iBAAK3iD,GAAG,gBAAgB6U,UAAU,iBAAgB,WAC9C,4BACI,gBACI1E,MAAM,MACND,OAAO,MACPywB,IAAI,iCACJ9rB,UAAU,qBACV+rB,IAAI,yEAER,gBAAI/rB,UAAU,wBAAuB,mCAA6B0tC,EAAY,iBAC9E,cAAG1tC,UAAU,sBAAqB,sKAKtC,iBAAKA,UAAU,kCAAiC,WAC5C,uBACI+tC,QAAQ,MACRn7B,KAAMi6B,KACN50C,OAAO,SACP+1C,IAAI,sBACJzgB,MAAM,8BAA6B,0DAKvC,mBACIvtB,UAAU,oCACVmiB,QAAS,IAAMjqB,EAAM01C,oBAAoBK,kBAAiB,iCAO9E,ECwBA,GAjEA,SAAuC/1C,GACnC,MAAMg2C,EAAc,KAChB,MAAMC,EAAiBxzC,SAASkE,cAAc,IAAI2tC,MAC9C2B,IACI,mBAAoBxzC,SAASC,gBAAgBsF,MAC7CiuC,EAAeC,SAAS,CAAEhzC,KAAM,EAAGD,IAAK,EAAGkzC,SAAU,WAErDF,EAAeG,UAAY,EAEnC,EAoBJ,OAjBA,aAAgB,KACRp2C,EAAMwpB,QACN/mB,SAASC,gBAAgBsO,UAAUhb,IAAI,qBACvC2L,OAAOC,iBAAiB4yC,GAA2BwB,KAEnDvzC,SAASC,gBAAgBsO,UAAUE,OAAO,qBAC1CvP,OAAO6F,oBAAoBgtC,GAA2BwB,GAC1D,GACD,CAACh2C,EAAMwpB,SASLxpB,EAAMwpB,QAKP,SAAC,GAAS,CAACmW,UAZEz9B,IACb,MAAMm0C,EAAO5zC,SAASwa,eAAe,QACrC,OAAe,MAARo5B,GAAuBA,EAAKt/B,SAAS7U,EAAK,EAUpB,UACzB,iBAAK4F,UAAW,IAAW,mBAAoB,CAAEwuC,QAASt2C,EAAMwpB,SAAS,WACrE,mBAAQ1hB,UAAU,+BAA8B,UAC5C,iBAAKA,UAAU,oCAAmC,WAC9C,gBAAKA,UAAU,4FAA2F,SACrG,IAAMyuC,kBAEX,gBAAKzuC,UAAU,+CAA8C,UACzD,mBAAQA,UAAU,kCAAkCmiB,QAAS,IAAMjqB,EAAM4Q,UAAS,SAC7E,IAAMK,gBAKvB,gBACIhe,GAAIohD,GACJvsC,UAAW,IAAWwsC,GAAuC,CACzDgC,QAASt2C,EAAMw2C,4BAGtBx2C,EAAMy7B,YAAa,SAACyY,GAA0B,KAC7Cl0C,EAAMy7B,YAAcz7B,EAAMw2C,0BACxB,gBAAK1uC,UAAU,uCAAsC,UACjD,SAAC,GAAe,CAAC4tC,oBAAqB11C,EAAM01C,8BA3BrD,uBAiCf,ECjFe,SAASe,KACpB,MAAMC,EAAej0C,SAASwa,eHCO,6BGC/B05B,GACF,kCAAqB,gCAAgC7uC,UAAU,iBAAgB,UAC3E,gBAAKA,UAAU,4CAA2C,UACtD,gBAAKA,UAAU,iFAAgF,kZAU3G,OAAO4uC,EAAe,eAAsBC,EAAYD,GAAgB,IAC5E,C,sECMA,SAlBA,SAAgC12C,GAC5B,MAAM42C,EAAsB,MAAT52C,GAAiBA,EAAMsG,OAAS,GAAK9L,OAAOwF,EAAMsG,MAAMlN,WAAWy9C,OAAO,IAAM,EAC7FC,EACO,MAAT92C,GAAiBA,EAAMsG,OAAS,GAC1B9L,OAAOwF,EAAMsG,MAAMlN,WAAWy9C,OAAO,IACrCr8C,OAAOwF,EAAMsG,MAAMlN,WAAWy9C,OAAO,IAE/C,OACI,kBAAM/uC,UAAU,qDAAoD,WAChE,4BACI,iBAAMA,UAAU,iDAAgD,SAAE8uC,KAClE,iBAAM9uC,UAAU,iDAAgD,SAAEgvC,QAEtE,gBAAKhvC,UAAU,iDAAgD,SAAE9H,EAAMyoB,UAGnF,E,eCuGA,SA7GA,SAAuBzoB,GACnB,YAAa,MACb,YAAa,MAEb,MAAM+2C,EAAgC,IAC3B,cAAethD,KAAKmO,IAAI,EAAGi1B,EAAe39B,KAAK,UAGpD29B,EAAiB,KAAM74B,EAAMg3C,uBAAyBh3C,EAAMi3C,mBAC7DC,KAAK,IACLC,OAAO,IACPC,OAAO,KACLC,EAAsBC,GAA2B,WAAeP,KAEvE,aAAgB,KACZ,MAAMQ,EAAU,KACZzkB,cAAc0kB,EAAqB,EAGjCA,EAAuBrkB,aAAY,KACrC,MAAMskB,EAAmBV,IAEzBO,EAAwBG,GAEpBA,EAAiBt4C,aAAe,GAChCo4C,GACJ,GACD,KAEH,OAAOA,CAAO,GACf,IAEH,MAAMG,EAAY,IACPL,EAAqBl4C,aAAe,EASzCspB,EAAQivB,KACV,eAAI5vC,UAAU,4CAA2C,6CAEzD,gBAAIA,UAAU,4CAA2C,oBAC9C,EAAAnN,GAAA,GAAuBqF,EAAM23C,aAAY,mBAT7C33C,EAAM01C,oBAAoBC,aAAe31C,EAAM01C,oBAAoBE,aACpE,GAAG51C,EAAM01C,oBAAoBC,eAAe31C,EAAM01C,oBAAoBE,eACtE,UAQ2C,mBAIrD,OAA+B,MAAxByB,GACH,iBAAKvvC,UAAU,gCAA+B,WAC1C,iBAAKA,UAAU,kDAAiD,WAC5D,iBAAKA,UAAU,2CAA0C,WACrD,SAAC,GAAsB,CAAC2gB,MAAM,OAAOniB,MAAO+wC,EAAqB74C,UACjE,SAAC,GAAsB,CAACiqB,MAAM,QAAQniB,MAAO+wC,EAAqBn5C,WAClE,SAAC,GAAsB,CAACuqB,MAAM,UAAUniB,MAAO+wC,EAAqBh5C,eAEvEoqB,MAGL,gBAAK3gB,UAAU,+CAA8C,SACxD4vC,KACG,wBAAY7B,QAAQ,MAAM5rB,QAAS,IAAMjqB,EAAM01C,oBAAoBK,kBAAiB,wBACpE,QAGhB,iCACI,uBACIF,QAAQ,MACRxgB,MAAM,6CACN3a,KAAMm6B,GAA+B70C,EAAMkO,QAASlO,EAAM80C,WAC1D/0C,OAAO,SAAQ,iDAKnB,uBACI81C,QAAQ,WACRthC,KAAK,UACL8gB,MAAM,+CACN3jB,KAAK,SACLuY,QAAS,IAAMjqB,EAAM01C,oBAAoBK,kBAAiB,qDAS1E,gBAAKjuC,UAAU,6GAA4G,UACvH,cAAGA,UAAU,wDAAuD,SAC/D4vC,IAAc,yBACc7e,EAAel+B,OAAO,iBAE/C,+CACiBk+B,EAAel+B,OAAO,eACnC,iBAAMmN,UAAU,2DAA0D,eAAS,gBAC5E9H,EAAM80C,oBAMjC,IACR,E,eC1FA,SAvBA,SAAuB90C,GACnB,OACI,iBACI8H,UAAW,IAAW9H,EAAM8H,UAAW,CACnC8vC,QAAS53C,EAAM43C,QACfC,YAAa73C,EAAM63C,cACrB,WAEF,iBAAK/vC,UAAU,MAAK,WAChB,gBAAKA,UAAU,kBAAiB,SAAE9H,EAAM4H,WACvC5H,EAAM43C,UACH,gBAAK9vC,UAAU,sBAAqB,UAChC,gBAAKA,UAAU,sBAAqB,SAAE,IAAMgwC,mBAIvD93C,EAAM43C,UACH,gBAAK9vC,UAAU,+CAA8C,SAAE9H,EAAM+3C,sBAIrF,ECbA,GAXA,SAAgB/3C,GACZ,MAAM,UAAE8H,EAAS,GAAE7U,EAAE,SAAE2U,GAAa5H,EAC9Bg4C,EAAU,WAAevV,QAAQ76B,GAAUzS,OAEjD,OACI,gBAAKlC,GAAIA,EAAI6U,UAAW,IAAWA,EAAW,qBAAsBovB,KAAK,UAAS,SAC7E,WAAepkC,IAAI8U,GAAU,CAACgT,EAAO1V,IAAU,eAAmB0V,EAAO,CAAE1V,QAAO8yC,eAG/F,EChBaC,GAAiBhlD,GAAuB,GAAGA,UAsCxD,GAdA,SAAkB+M,GACd,MAAM,UAAE8H,EAAS,SAAEF,EAAQ,GAAE3U,EAAE,OAAEmvC,GAAWpiC,EAE5C,OAAKoiC,GAKD,gBAAKnvC,GAAIglD,GAAchlD,GAAK6U,UAAWA,EAAWovB,KAAK,WAAU,kBAAkBjkC,EAAE,SAChF2U,IALE,IAQf,ECmBA,GAvCA,SAAa5H,GACT,MAAM,UACF8H,EAAS,OACTs6B,EAAM,SACN1vB,GAAW,EAAK,GAChBzf,EAAE,WACFmgB,EAAU,OACVZ,EAAM,QACNyX,EAAO,QACP3X,EAAO,SACP1K,EAAQ,MACR1C,EAAK,QACL8yC,GACAh4C,EAEEk4C,EAAW,UAAUjlD,IAE3B,OACI,iCACI6U,UAAW,IAAWA,EAAW,gBAAiB,CAC9Cs6B,OAAQA,EACR4M,MAAiB,IAAV9pC,EACPiE,KAAMjE,IAAU8yC,EAAU,IAE9B/kD,GAAIilD,EACJhhB,KAAK,MAAK,gBACKkL,EAAS,OAAS,QAAO,gBACzB6V,GAAchlD,GAC7Byf,SAAUA,EACVuX,QAASA,EACTzX,OAAQA,EACRF,QAASA,GACLc,EAAU,WAEd,oCAAwB8kC,EAAQ,SAAGtwC,MAG/C,ECrDauwC,GAAc7xC,MAClBA,IAAUA,EAAMnR,QAA0B,IAAhBmR,EAAMnR,UACrCmR,GAAQ,EAAA3L,GAAA,GAAU2L,GACX8xC,GAAc9xC,IAAUA,EAAMuwC,OAAO,IAG1CuB,GAAiBnvB,IAEnB,GAAyB,UAArBA,EAAIovB,OAAO,EAAG,IAAuC,UAArBpvB,EAAIovB,OAAO,EAAG,GAC9C,OAAOpvB,EAAI4tB,OAAO,GAGtB,MAAM/jD,EAAM,cAEZ,IAAIwlD,EAAM,EACV,IAAK,IAAIvkD,EAAI,EAAGA,EAAI,KAAMA,EACtBukD,GAAOC,GAActvB,EAAI4tB,OAAO9iD,IAAMjB,EAAIuJ,QAH9B,oBAG8Cw6C,OAAO9iD,IAErE,OAAOjB,EAAI+jD,OAAOyB,EAAM,GAAG,EAGzBC,GAAiBC,GACZ,2CAA2Cn8C,QAAQm8C,GAAW,GCxB5DC,GAAY,CACrB,CACI7lC,MAAO,UACPtM,MAAO,KACPoyC,UAAU,GAEd,CACI9lC,MAAO,SACPtM,MAAO,KACPoyC,UAAU,GAEd,CACI9lC,MAAO,UACPtM,MAAO,KACPoyC,UAAU,GAEd,CACI9lC,MAAO,WACPtM,MAAO,KACPoyC,UAAU,GAEd,CACI9lC,MAAO,aACPtM,MAAO,KACPoyC,UAAU,GAEd,CACI9lC,MAAO,WACPtM,MAAO,KACPoyC,UAAU,GAEd,CACI9lC,MAAO,cACPtM,MAAO,KACPoyC,UAAU,GAEd,CACI9lC,MAAO,WACPtM,MAAO,KACPoyC,UAAU,GAEd,CACI9lC,MAAO,OACPtM,MAAO,KACPoyC,UAAU,GAEd,CACI9lC,MAAO,UACPtM,MAAO,KACPoyC,UAAU,GAEd,CACI9lC,MAAO,UACPtM,MAAO,KACPoyC,UAAU,GAEd,CACI9lC,MAAO,SACPtM,MAAO,KACPoyC,UAAU,GAEd,CACI9lC,MAAO,QACPtM,MAAO,KACPoyC,UAAU,GAEd,CACI9lC,MAAO,WACPtM,MAAO,KACPoyC,UAAU,GAEd,CACI9lC,MAAO,UACPtM,MAAO,KACPoyC,UAAU,GAEd,CACI9lC,MAAO,OACPtM,MAAO,KACPoyC,UAAU,GAEd,CACI9lC,MAAO,SACPtM,MAAO,KACPoyC,UAAU,GAEd,CACI9lC,MAAO,WACPtM,MAAO,KACPoyC,UAAU,GAEd,CACI9lC,MAAO,YACPtM,MAAO,KACPoyC,UAAU,GAEd,CACI9lC,MAAO,QACPtM,MAAO,KACPoyC,UAAU,GAEd,CACI9lC,MAAO,WACPtM,MAAO,KACPoyC,UAAU,GAEd,CACI9lC,MAAO,gBACPtM,MAAO,KACPoyC,UAAU,GAEd,CACI9lC,MAAO,WACPtM,MAAO,KACPoyC,UAAU,GAEd,CACI9lC,MAAO,YACPtM,MAAO,KACPoyC,UAAU,GAEd,CACI9lC,MAAO,cACPtM,MAAO,KACPoyC,UAAU,GAEd,CACI9lC,MAAO,WACPtM,MAAO,KACPoyC,UAAU,GAEd,CACI9lC,MAAO,UACPtM,MAAO,KACPoyC,UAAU,GAEd,CACI9lC,MAAO,WACPtM,MAAO,KACPoyC,UAAU,GAEd,CACI9lC,MAAO,SACPtM,MAAO,KACPoyC,UAAU,GAEd,CACI9lC,MAAO,gBACPtM,MAAO,KACPoyC,UAAU,GAEd,CACI9lC,MAAO,aACPtM,MAAO,KACPoyC,UAAU,GAEd,CACI9lC,MAAO,aACPtM,MAAO,KACPoyC,UAAU,GAEd,CACI9lC,MAAO,WACPtM,MAAO,KACPoyC,UAAU,GAEd,CACI9lC,MAAO,iBACPtM,MAAO,KACPoyC,UAAU,GAEd,CACI9lC,MAAO,eACPtM,MAAO,KACPoyC,UAAU,GAEd,CACI9lC,MAAO,OACPtM,MAAO,KACPoyC,UAAU,GAEd,CACI9lC,MAAO,WACPtM,MAAO,KACPoyC,UAAU,GAEd,CACI9lC,MAAO,SACPtM,MAAO,KACPoyC,UAAU,GAEd,CACI9lC,MAAO,eACPtM,MAAO,KACPoyC,UAAU,GAEd,CACI9lC,MAAO,eACPtM,MAAO,KACPoyC,UAAU,GAEd,CACI9lC,MAAO,iBACPtM,MAAO,KACPoyC,UAAU,GAEd,CACI9lC,MAAO,eACPtM,MAAO,KACPoyC,UAAU,GAEd,CACI9lC,MAAO,YACPtM,MAAO,KACPoyC,UAAU,GAEd,CACI9lC,MAAO,QACPtM,MAAO,KACPoyC,UAAU,GAEd,CACI9lC,MAAO,OACPtM,MAAO,KACPoyC,UAAU,GAEd,CACI9lC,MAAO,UACPtM,MAAO,KACPoyC,UAAU,GAEd,CACI9lC,MAAO,WACPtM,MAAO,KACPoyC,UAAU,GAEd,CACI9lC,MAAO,aACPtM,MAAO,KACPoyC,UAAU,GAEd,CACI9lC,MAAO,gBACPtM,MAAO,KACPoyC,UAAU,GAEd,CACI9lC,MAAO,YACPtM,MAAO,KACPoyC,UAAU,GAEd,CACI9lC,MAAO,UACPtM,MAAO,KACPoyC,UAAU,I,QCzOlB,MAEMC,GAAe,eAGN,SAASC,GAAkB54C,GACtC,MAIOipB,EAAK4vB,GAAU,WAAe,KAC9BhnC,EAAOU,GAAY,WAJP,KAKZumC,EAAOC,GAAY,WANL,KAOd5qC,EAASiT,GAAc,WALT,KAOd43B,EAAUC,GAAe,WAAe,KACxCC,EAAYC,GAAiB,WAAe,KAC5CC,EAAYC,GAAiB,WAAe,KAC5CC,EAAcC,GAAmB,WAAe,KAChDC,EAAgCC,GAAqC,WACxEz5C,EAAM05C,yBAGHvgD,EAASwgD,GAAc,YAAe,IACtCC,EAAWC,GAAgB,WAxBZ,GA0BtB,aAAgB,KAER1rC,GACkB,GAAlBA,EAAQhZ,SA7BM,IA8BZykD,GAAgC/nC,GAASinC,GAAS,gBAAgBjhD,KAAKihD,IA9BnD,IA+BjBc,GAA8B3wB,GAAqB,IAAdA,EAAI9zB,QAAgBgjD,GAAWlvB,IAEzE0wB,GAAW,GACVA,GAAW,EAAM,GACvB,CAAC1wB,EAAKpX,EAAOinC,EAAO3qC,EAASyrC,IAEhC,aAAgB,KACC,MAATd,GAA0B,IAATA,GAAeA,EAAMtiD,QAAQ,gBAAiB,IAAIrB,QAAU,EAC7EkkD,EAAc,iCACbA,EAAc,GAAG,GACvB,CAACP,EAAOjnC,IAEX,aAAgB,KACOsnC,EAAN,MAATtnC,EAA6B,gCACd,GAAG,GACvB,CAACA,EAAOinC,IAEX,aAAgB,KACR94C,EAAM05C,yBACNL,EAAc,KACdF,EAAc,KACdQ,GAAW,GACf,GACD,CAAC35C,EAAM05C,yBAEV,MAeMI,GACF,gBACIhyC,UAAW,IAAW,+BAAgC,CAClD,kBA1EU,IA0EW8xC,IACvB,UAEF,SAACG,GAAA,EAAS,CACNnnC,MAAM,wBACNP,SAAWhf,GAA2C+tB,EAAW/tB,EAAE0M,OAAOuG,MAAM9P,QAAQ,SAAU,KAClG8P,MAAO6H,EACPuE,SAAU1S,EAAMg6C,SAChBhnC,WAAYsmC,GAA8B,4BAC1ChmC,UAAW,EACX5B,KAAK,MACLze,GAAG,mBACHuf,OA9BK,KACG,OAAZrE,GAAuC,IAAnBA,EAAQhZ,OAAcokD,EAAgB,4BACrDprC,EAAQhZ,OAAS,GAAuB,GAAlBgZ,EAAQhZ,OAAaokD,EAAgB,6BAC/DA,EAAgB,GAAG,EA4BhB5kD,KAAK,cAKXslD,GACF,UAAC,GAAQ,CAAChnD,GAAI0lD,GAAcvW,OA7FV,IA6FkBwX,EAA4B,WAC5D,gBAAK9xC,UAAU,kCAAiC,UAC5C,SAACiyC,GAAA,EAAS,CACNnnC,MAAM,uBACNtM,MAAOwyC,EACPzmC,SAAWhf,GACP0lD,EAAS1lD,EAAE0M,OAAOuG,MAAM9P,QAAQ,mBAAoB,KAExD8c,UAAW,GACXN,WAAYomC,GAA0B,gCACtCnmD,GAAG,iBACH0B,KAAK,aAGb,SAAC,GAAa,CACVmT,UAAU,0CACV+vC,aAAa,EACbD,UAASsB,EACTnB,kBAAkB,IAAG,UAErB,SAAC5lC,EAAA,EAAS,CACNlf,GAAG,mBACH0f,QAAS8lC,GACTnyC,MAAOuL,EACPY,gBAAgB,EAChBJ,SAAWhf,GAAWkf,EAASlf,EAAE0M,OAAOuG,OACxCsM,MAAM,mCAGb4mC,IACG,6BAAkBluC,QAAQ,2CAE7BwuC,KAIHI,GACF,UAAC,GAAQ,CAACjnD,GA/HC,MA+HemvC,OAlIA,IAkIQwX,EAA0B,WACxD,gBAAK9xC,UAAU,+BAA8B,UACzC,SAACiyC,GAAA,EAAS,CACNnnC,MAAM,MACNtM,MAAO2iB,EACP5W,SAAWhf,IACPwlD,GAAO,EAAAl+C,GAAA,GAAUtH,EAAE0M,OAAOuG,OAAO,EAErCgN,UAAW,GACXN,WAAYgmC,GAAsB,2DAClC/lD,GAAG,eACH0B,KAAK,MACL6d,OAhFC,KACK,IAAdyW,EAAI9zB,OAAc8jD,EAAY,4DACxBd,GAAWlvB,GAIhBgwB,EAAY,IAHbA,EACI,2GAEY,OA6EhB,gBAAKnxC,UAAU,gBAAe,SAAEgyC,OAexC,OACI,iCACI,eAAIhyC,UAAU,6CAA4C,4BAC1D,gBAAIA,UAAU,yCAAwC,2BACrC,kBAAM,mBAEvB,UAAC,GAAM,CAACA,UAAU,SAAS7U,GAAG,uBAAsB,WAChD,SAAC,GAAG,CACAA,GAAI0lD,GACJ1uB,QAAS,MAEL,QAAU,CACNvgB,MAAO,KAAoB2Y,OAAOC,MAAMS,IACxCP,YAAa,CACT7tB,KAAM,gBACNkV,SAAU,cAIlBgwC,EAnLE,EAmL0B,EAEhCzX,OArLM,IAqLEwX,EACR5B,QAAS,EAAC,4BAId,SAAC,GAAG,CACAA,QAAS,EACT/kD,GAzLD,MA0LCg3B,QAAS,MAEL,QAAU,CACNvgB,MAAO,KAAoB2Y,OAAOC,MAAMS,IACxCP,YAAa,CACT7tB,KAAM,MACNkV,SAAU,cAIlBgwC,EAvMU,EAuMgB,EAE9BzX,OAzMc,IAyMNwX,EAA0B,qBAK1C,kBACIzlB,SAAW9gC,IAUP,IAAIqe,EACJ,IATA,QAAU,CACNhI,MAAO,KAAoB2Y,OAAOC,MAAMS,IACxCP,YAAa,CACT7tB,KAAM,cACNkV,SAAU,cAKdof,GA1NU,IA0NH2wB,EACPloC,EAAO,UACJ,KAAIonC,GA5NL,IA4Ncc,EAIhB,OAHAloC,EAAO,OAIX,CAEA1R,EAAMm0B,SAAS9gC,EAAG,CACd8F,QAASA,EACTuY,KAAMA,EACNG,MAAOA,EACP1D,QAASA,EACT8a,IAAKA,EACL6vB,MAAOA,GACT,EAENhxC,UAAU,SAAQ,UAvFV,MAChB,OAAQ8xC,GACJ,KAvJc,EA2Jd,QACI,OAAOK,EAHX,KAzJsB,EA0JlB,OAAOC,EAGf,EAiFSC,IAED,uBAAY9kB,MAAM,gBAAgBwgB,QAAQ,MAAMnkC,KAAK,SAASgB,UAAWvZ,QAAW0N,EAAS,0BAG7F,kBAAOiB,UAAU,4CAA2C,oEAM5E,CC5QO,MAAMsyC,GAA0B,CAACj4C,EAA6Bk4C,KACjE,MAAOC,EAAgBC,IAAqB,IAAAvmC,WAAkB,GA0B9D,OAxBA,IAAA7C,YAAU,KACN,MAAMzJ,EAAUvF,EAAIiP,QAEdopC,EAAW,IAAIC,sBAChB7rC,IACG,MAAMk7B,EAAQl7B,EAAQ,GACtB2rC,EAAkBzQ,EAAMwQ,eAAe,GAE3C,CACID,UAAWA,IAQnB,OAJI3yC,GACA8yC,EAASE,QAAQhzC,GAGd,KACCA,GACA8yC,EAASG,UAAUjzC,EACvB,CACH,GACF,CAACvF,EAAKk4C,IAEFC,CAAc,ECGzB,GAvBqB,EAAGM,aAAYhzC,eAChC,MAAMizC,GAAkB,IAAAnqC,QAAuB,MACzC4pC,EAAiBF,GAAwBS,EAAiB,GAchE,OAZA,IAAA1pC,YAAU,K,MACFmpC,IACuB,QAAvB,EAAAO,EAAgBzpC,eAAO,SAAEJ,UAAUhb,IAAI,yBAC3C,GACD,CAACskD,KAEJ,IAAAnpC,YAAU,KACF0pC,EAAgBzpC,UAChBypC,EAAgBzpC,QAAQpJ,MAAM8yC,gBAAkB,OAAOF,KAC3D,GACD,CAACA,KAGA,gBAAKz4C,IAAK04C,EAAiB/yC,UAAU,gBAAe,UAChD,gBAAKA,UAAU,oCAAmC,SAAEF,KAE3D,EC+BL,GAtCuB5H,IACnB,MAAM+6C,EAAoB/6C,EAAMg7C,uBAC5B,SAAC,GAAa,CACVrD,YAAa33C,EAAMi7C,WAAWtD,YAC9BV,kBAAmBj3C,EAAMi7C,WAAWhE,kBACpCD,sBAAuBh3C,EAAMi7C,WAAWjE,uBAAyBh3C,EAAMi7C,WAAWhE,kBAClFnC,UAAW90C,EAAMi7C,WAAWnG,UAC5B5mC,QAASlO,EAAMi7C,WAAW/sC,QAC1BwnC,oBAAqB11C,EAAM01C,sBAE/B11C,EAAMk7C,yBACN,SAAC,GAAe,CAACxF,oBAAqB11C,EAAM01C,uBAE5C,SAACkD,GAAiB,CAACc,uBAAwB15C,EAAM05C,uBAAwBvlB,SAAUn0B,EAAMm0B,WAG7F,OACI,SAAC,GAAY,CAACymB,WAAW,6CAA4C,UACjE,qBACIO,UAAU,SAAQ,gBACJ,QACd/e,QAAQ,OACR7nB,KAAMvU,EAAMg7C,sBAAwB,QAAU,UAC9C3lB,MAAM,uBAAsB,UAE5B,gBACIpiC,GAAG,gCACH6U,UAAW,IAAW,gCAAiC,CACnD,SAAc9H,EAAMg7C,wBACtB,SAEDD,OAIhB,E,eCzBL,MAAMK,GAA+B,eAC/BC,GAAiC,yBACjCC,GAA4B,MAErBC,GAAiC,KAC1C9kB,aAAa+kB,WAAWJ,IACxB,KAAQlqC,OAAOkqC,GAA6B,EAGnCK,GAA8B,KACvC,IACI,IAAIC,EAA0B,KAAQnhD,IAAI6gD,IAK1C,GAJKM,IACDA,EAA0BjlB,aAAa+B,QAAQ4iB,KAG/CM,EAAyB,CACzB,MAAMC,EAAwDl/B,KAAKjlB,MAAMkkD,GACnEE,EAAaD,EAA0B3E,sBACvC6E,EAAgBF,EAA0B1E,kBAC1C6E,EAAoB,IAAInkD,KAAKikD,GAAcC,GAEjD,GAAKC,KAAsBA,GAAqBA,EAAkBhiD,WAAY,IAAInC,MAAOmC,WAGrF,OAAO6hD,EAFPJ,IAIR,CACA,OAAO,IACX,CAAE,MAAOQ,GAEL,OADAxrC,QAAQyB,MAAM,yCACP,IACX,GCfW,MAAMgqC,WAA+B,YAIhD,WAAA31C,CAAYrG,GACR4R,MAAM5R,GAEN,MAAMi8C,EAAqBR,KACvBS,ED+CiC,MACzC,IACI,IAAIC,EAA4B,KAAQ5hD,IAAI8gD,IAK5C,GAJKc,IACDA,EAA4B1lB,aAAa+B,QAAQ6iB,KAGjDc,EAA2B,CAC3B,MAAMC,EAA4D3/B,KAAKjlB,MAAM2kD,GACvEP,EAAaQ,EAA4BpF,sBACzC6E,EAAgBO,EAA4BnF,kBAC5CoF,EAAsB,IAAI1kD,KAAKikD,GAAcC,GAEnD,GAAKQ,KAAwBA,GAAuBA,EAAoBviD,WAAY,IAAInC,MAAOmC,WAG3F,OAAOsiD,EApBnB3lB,aAAa+kB,WAAWH,IACxB,KAAQnqC,OAAOmqC,GAqBX,CACA,OAAO,IACX,CAAE,MAAOU,GAEL,OADAxrC,QAAQyB,MAAM,2CACP,IACX,GCtE+BsqC,GAE3B/kD,KAAKsa,MAAQ,CACT0qC,kBAAkB,EAClBC,cAAc,EACdC,iBAAiB,EACjBC,eAAe,EACfhD,wBAAwB,EACxBuC,mBAAoBA,EACpBC,qBAAsBA,EACtBvG,YAAauG,GAAwBA,EAAqBvgC,KAAOugC,EAAqBvgC,KAAO,GAC7Fi6B,aAAcsG,GAAwBA,EAAqBtgC,MAAQsgC,EAAqBtgC,MAAQ,IAGpGrkB,KAAKolD,qBAAuBplD,KAAKolD,qBAAqB/8C,KAAKrI,MAC3DA,KAAKqlD,oBAAsBrlD,KAAKqlD,oBAAoBh9C,KAAKrI,MACzDA,KAAKslD,aAAetlD,KAAKslD,aAAaj9C,KAAKrI,MAC3CA,KAAKulD,0BAA4BvlD,KAAKulD,0BAA0Bl9C,KAAKrI,MACrEA,KAAKslD,aAAetlD,KAAKslD,aAAaj9C,KAAKrI,MAC3CA,KAAKwlD,kBAAoBxlD,KAAKwlD,kBAAkBn9C,KAAKrI,MACrDA,KAAKylD,oBAAsBzlD,KAAKylD,oBAAoBp9C,KAAKrI,MACzDA,KAAK0lD,cAAgB1lD,KAAK0lD,cAAcr9C,KAAKrI,KACjD,CAEQ,oBAAAolD,GACJplD,KAAKgb,SAAS,CAAEkqC,iBAAiB,IAAS,KACG,MAApC96C,OAAeu7C,mBACfv7C,OAAeu7C,kBAAkBC,OAAO9I,GAC7C,GAER,CAEQ,iBAAA0I,CAAkBK,GACtB,MAAMC,EAAW5B,KACb4B,GACA9lD,KAAKgb,SAAS,CACV2pC,qBAAsB,KACtBD,mBAAoBoB,GAGhC,CAEQ,mBAAAL,CAAoBM,GACxB/B,KACA,MAAMW,ED6B6B,MACvC,IACI,MAAMmB,EAAW,CACbpG,mBAAmB,IAAIt/C,MAAOmC,UAAYwhD,GAC1CtE,uBAAuB,IAAIr/C,MAAOmC,UAAYwhD,GAC9C3/B,UClCyB4hC,EDmCzB3hC,WCnCyB2hC,GDuC7B,OAFA9mB,aAAaC,QAAQ2kB,GAAgC5+B,KAAKC,UAAU2gC,IACpE,KAAQ1jD,IAAI0hD,GAAgC5+B,KAAKC,UAAU2gC,IACpDA,CACX,CAAE,MAAOtB,GAEL,OADAxrC,QAAQyB,MAAM,mDAAoD+pC,GAC3D,IACX,GC3CiCwB,GAEvBC,EAAYF,GAAsB,CAAC,EACzCE,EAAUtB,qBAAuBA,EACjCsB,EAAUd,eAAgB,EAC1Bc,EAAUvB,mBAAqB,KAC/BuB,EAAUhB,cAAe,EAEzBjlD,KAAKgb,SAASirC,GAAW,KAQrBrzB,EAAA,GANkC,CAC9BzgB,MAFU,YAGV+zC,UAAW,CACPA,UAAW,kCAGS,GAEpC,CAEQ,aAAAR,GACJ1lD,KAAKgb,SAAS,CACViqC,cAAc,GAEtB,CAEQ,yBAAAM,CAA0BY,EAAqBvvC,EAAiBuD,GAC/DgsC,GAAmBA,EAAeC,QAMlCh8C,OAAeu7C,kBAAkBU,eAC9BF,EAAeC,QAAQhiC,KACvB+hC,EAAeC,QAAQ/hC,MACvB8hC,EAAeC,QAAQ9nD,KACvB6nD,EAAez0B,IACf9a,GACF/B,MAAMyxC,IACAA,GACAH,EAAeI,QAAU3vC,EAEzB5W,KAAKgb,SACD,CACImqC,eAAe,EACf/G,YAAa+H,EAAeC,QAAQhiC,KACpCi6B,aAAc8H,EAAeC,QAAQ/hC,QAEzC,KACKja,OAAeu7C,kBAAkBa,WAAW/I,GAAwB0I,EAAgBhsC,GAAM,KAInGna,KAAKylD,oBAAoB,CACrBR,cAAc,EACd7G,YAAa+H,EAAeC,QAAQhiC,KACpCi6B,aAAc8H,EAAeC,QAAQ/hC,OAE7C,IA/BJrkB,KAAKylD,oBAAoB,CACrBR,cAAc,EACd9C,wBAAwB,GAgCpC,CAEQ,YAAAmD,CAAanzC,EAAYs0C,GAC7Bt0C,EAAMsM,iBAEFgoC,EAAS7kD,SACT5B,KAAKgb,SACD,CACIiqC,cAAc,EACdC,iBAAiB,IAErB,KAC0B,QAAlBuB,EAAStsC,KACR/P,OAAeu7C,kBAAkBe,UAAUD,EAAS/0B,KAAK,WACtD,OAAOkrB,IACX,IACK/nC,MAAM8xC,GAAc3mD,KAAKulD,0BAA0BoB,EAAMF,EAAS7vC,QAAS6vC,EAAStsC,QACpFnF,OAAM,KACHhV,KAAKylD,oBAAoB,CACrBR,cAAc,EACd9C,wBAAwB,GAC1B,IAEe,UAAlBsE,EAAStsC,MACf/P,OAAeu7C,kBAAkBiB,YAAYH,EAASlF,MAAOkF,EAASnsC,OAAO,WAC1E,OAAOsiC,IACX,IACK/nC,MAAM8xC,GAAc3mD,KAAKulD,0BAA0BoB,EAAMF,EAAS7vC,QAAS6vC,EAAStsC,QACpFnF,OAAM,KACHhV,KAAKylD,oBAAoB,CACrBR,cAAc,EACd9C,wBAAwB,GAC1B,GAEd,GAIhB,CAEQ,mBAAAkD,GACCj7C,OAAeu7C,oBACZ3lD,KAAKsa,MAAM4qC,iBACV96C,OAAeu7C,kBAAkBC,OAAO9I,IAG7C98C,KAAKgb,SACD,CACImqC,eAAe,EACfD,iBAAiB,EACjBD,cAAc,IAElB,KACK76C,OAAeu7C,kBAAkBa,WAAW/I,KAA0B,IAIvF,CAEO,iBAAA77B,GACFxX,OAAeC,iBAAiB6yC,IAA6B,IAAMl9C,KAAKylD,wBACxEr7C,OAAeC,iBAAiB4yC,GAA2Bj9C,KAAKwlD,mBAChEp7C,OAAeC,iBAAiB2yC,GAA0Bh9C,KAAK0lD,eAC/Dt7C,OAAeC,iBAAiB8yC,IAAqC,IAAMn9C,KAAKylD,uBACrF,CAEO,oBAAA1jC,GACF3X,OAAe6F,oBAAoBitC,IAA6B,IAAMl9C,KAAKylD,wBAC3Er7C,OAAe6F,oBAAoBgtC,GAA2Bj9C,KAAKwlD,mBACnEp7C,OAAe6F,oBAAoB+sC,GAA0Bh9C,KAAK0lD,eAClEt7C,OAAe6F,oBAAoBktC,IAAqC,IAAMn9C,KAAKylD,uBACxF,CAEO,MAAA/qC,G,gBACH,OACI,iCACI,kCAAqB,qBAAqBhf,GAAG,oCAAmC,UAC5E,gBAAK6U,UAAU,gBAAe,UAC1B,SAAC,GAAa,CACVmzC,WAAY1jD,KAAKsa,MAAMoqC,mBACvBvC,uBAAwBniD,KAAKsa,MAAM6nC,uBACnCvlB,SAAU58B,KAAKslD,aACf7B,wBAAuBzjD,KAAKsa,MAAMoqC,mBAClCf,0BAAyB3jD,KAAKsa,MAAMqqC,qBACpCxG,oBAAqB,CACjBC,YAC+B,KAA3Bp+C,KAAKsa,MAAM8jC,YACqD,QAA1D,EAAiD,QAAjD,EAA6B,QAA7B,EAAAp+C,KAAKsa,MAAMoqC,0BAAkB,eAAEhH,0BAAkB,eAAE0I,eAAO,eAAEhiC,KAC5D,GACVi6B,aACgC,KAA5Br+C,KAAKsa,MAAM+jC,aACqD,QAA1D,EAAiD,QAAjD,EAA6B,QAA7B,EAAAr+C,KAAKsa,MAAMoqC,0BAAkB,eAAEhH,0BAAkB,eAAE0I,eAAO,eAAE/hC,MAC5D,GACVm6B,gBAAiBx+C,KAAKqlD,2BAKrC,gBACG,SAAC,GAA6B,CAC1BpzB,OAAQjyB,KAAKsa,MAAM4qC,gBACnBhhB,UAAWlkC,KAAKsa,MAAM2qC,aACtB5rC,QAASrZ,KAAKolD,qBACdnG,wBAAyBj/C,KAAKsa,MAAM6qC,cACpChH,oBAAqB,CACjBC,YAAap+C,KAAKsa,MAAM8jC,YACxBC,aAAcr+C,KAAKsa,MAAM+jC,aACzBG,gBAAiBx+C,KAAKqlD,uBAG9Bn6C,SAASwa,eAAe,sCAE3B1lB,KAAKsa,MAAMoqC,qBAAsB,SAACxF,GAAuB,MAGtE,EC3QW,MAAM2H,WAA6B,YAI9C,WAAA/3C,CAAYrG,GACR4R,MAAM5R,GAENzI,KAAKsa,MAAQ,CACTwsC,aAAa,EACbC,cAAc,EAEtB,CAEO,iBAAAnlC,GCxBqC,EAAColC,EAAiCC,KAC9E,MAAMC,EAAyBh8C,SAASkE,cAAc,6BAChD+3C,EAAwBj8C,SAASkE,cAAc,4BAC/Cg4C,EAAsBF,EAAuBx3C,aAAa,2BAC1D23C,EAAqBF,EAAsBz3C,aAAa,0BAExD43C,EAASp8C,SAASwF,cAAc,QACtC42C,EAAO13C,aAAa,MAAO,cAC3B03C,EAAO13C,aAAa,OAAQ,YAC5B03C,EAAO13C,aAAa,OAAQw3C,GAE5B,MAAMG,EAAWr8C,SAASwF,cAAc,UACxC62C,EAAS33C,aAAa,OAAQ,mBAC9B23C,EAAS33C,aAAa,MAAOy3C,GAE7Bn8C,SAASs8C,qBAAqB,QAAQ,GAAGC,YAAYH,GACrDp8C,SAASs8C,qBAAqB,QAAQ,GAAGC,YAAYF,GAEjDP,IACAO,EAASG,OAAS,IAAMV,KAGxBC,IACAK,EAAOI,OAAS,IAAMT,IAC1B,EDCIU,EACI,KACI3nD,KAAKgb,SAAS,CACV+rC,cAAc,GAChB,IAEN,KACI/mD,KAAKgb,SAAS,CACV8rC,aAAa,GACf,GAGd,CAEO,MAAApsC,GACH,OAAO1a,KAAKsa,MAAMysC,cAAgB/mD,KAAKsa,MAAMwsC,cAAe,SAACrC,GAAsB,GACvF,EEjCW,MAAMmD,WAA4B,YAC7C,WAAA94C,CAAYrG,GACR4R,MAAM5R,EACV,CAEO,MAAAiS,GACH,OACI,SAAC,KAAQ,CAAC7V,OAAQ,CAAC,IAAK,KAAM+G,OAAQxB,OAAO2B,YAAW,UACpD,SAAC86C,GAAoB,KAGjC,ECaJ,MAAM,WAAiB,YACnB,WAAA/3C,CAAYrG,GACR4R,MAAM5R,GAENzI,KAAKsa,MAAQ,CACT3M,MAAO,EACP6P,QAAS,EACT+D,WAAY,EACZC,gBAAgB,EAChBC,gBAAgB,GAGpBzhB,KAAK0hB,mBAAqB1hB,KAAK0hB,mBAAmBrZ,KAAKrI,MACvDA,KAAK2hB,eAAiB3hB,KAAK2hB,eAAetZ,KAAKrI,KACnD,CAKQ,kBAAA0hB,CAAmBU,GACvBpiB,KAAKgb,SAAS,CAAErN,MAAOyU,EAAKzU,MAAO6P,QAAS4E,EAAK5E,QAAS+D,WAAYa,EAAKb,YAC/E,CAEQ,kBAAAc,CAAmBC,GACvB,MAAMC,EAAwBviB,KAAKsa,MAAM3M,MACnC6U,EAAoBF,EAAWvQ,GAAGtG,wBAaxCzL,KAAKgb,SAAS,CACVwG,kBARJ,WACI,MACMiB,EACFD,EAAkB3iB,EAAI2iB,EAAkB3W,MAAQ,GACpD,OAAO2W,EAAkB3iB,EAAIuK,OAAO8B,YAAcuW,EAAwCrY,OAAO8B,UACrG,CAGoBwW,KAAwBJ,EAAWK,qBACnDlB,kBAZOa,EAAWM,gBAAkBN,EAAWO,YAAcN,GAYpBD,EAAWQ,sBAE5D,CAEQ,kBAAAC,IAC8B,IAA9B/iB,KAAKsa,MAAMkH,iBAAyD,IAA9BxhB,KAAKsa,MAAMmH,gBACjDzhB,KAAKgb,SAAS,CACVwG,gBAAgB,EAChBC,gBAAgB,GAG5B,CAEQ,gBAAAomC,CAAiBzqD,GACrB,MAAM0qD,EAAW1qD,EAAK4B,cAAc1B,MAAM,KAC1C,IAAIyqD,EAAY,GAChB,IAAK,IAAIvrD,EAAI,EAAGA,EAAIsrD,EAASlqD,OAAQpB,IACjCsrD,EAAStrD,GAAKsrD,EAAStrD,GAAG,GAAG8iD,OAAO,GAAGh5C,cAAgBwhD,EAAStrD,GAAGkG,MAAM,GACzEqlD,GAAaD,EAAStrD,GAAK,IAE/B,OAAOurD,CACX,CAEQ,cAAApmC,GACJ,MAAM,KAAEvkB,EAAI,UAAEyhB,EAAS,eAAEmpC,GAAmBhoD,KAAKyI,OAC3C,WAAEkV,EAAU,oBAAE0D,IAAwB,OAAa,CACrDxC,YACAqB,UAAW,IAAI9iB,oBACfojB,WAAY,IACZG,OAvEe,EAwEfE,WAAY,IAAIzjB,mBAChB0jB,WAAY,IAAI1jB,mBAChB0hB,UAAW,QAAQ1hB,aACnB2jB,WAAY,CACR,IAAK,CACDJ,OAAQ,OAIpB3gB,KAAK6hB,YAAclE,EACnB3d,KAAKiiB,qBAAuBZ,EAExBrhB,KAAK6hB,aAAemmC,GACpBhoD,KAAK6hB,YAAYM,OAAOnS,GAAG,eAAgBhQ,KAAK0hB,mBAExD,CAEO,MAAAhH,GACH,MAAM,SAAErK,EAAQ,KAAEjT,EAAI,UAAEyhB,GAAc7e,KAAKyI,OACrC,eAAE+Y,EAAc,eAAEC,GAAmBzhB,KAAKsa,MAC1C2tC,EAAWjoD,KAAK6nD,iBAAiBzqD,GAEvC,OACI,iCACI,eAAG1B,GAAI,OAAO0B,aAAiBmT,UAAU,YAAY4S,KAAMtE,EAAS,kBAC1DopC,EAAQ,gBAElB,gBACI13C,UAAW,IAAW,yBAA0B,CAC5C,WAAgBkR,GAAkBD,IACpC,UAEF,gBACI9lB,GAAI,GAAG0B,oBACPmT,UAAW,IAAW,mBAAoB,CACtC,4BAA+BF,EAASzS,OAAS,IACnD,uBACoB,WAAe+c,MAAMtK,GAAS,SAEnD,WAAe9U,IAAI8U,GAAU,CAACgT,EAAyB1V,KACpD,gBACI4C,UAAU,kBAAiB,wBACJvQ,KAAKsa,MAAM3M,QAAUA,EAE5C2V,aAAenR,GACXnS,KAAKqiB,mBAAmB,CACpBO,gBAAgB,EAChBD,qBAAqB,EACrBG,qBAAqB,EACrBD,WAAYlV,EACZoE,GAAII,EAAM3J,SAGlB+a,aAAc,IAAMvjB,KAAK+iB,qBAAoB,SAE5CM,GAZI,GAAG1V,kBAiBxB,iBAAK4C,UAAW,GAAGnT,qBAAuB,WACtC,oBACI1B,GAAI,GAAG0B,mBACPmT,UAAW,IAAW,iBAAkB,CACpC,gCAAiCkR,IAErC6B,aAAenR,GACXnS,KAAKqiB,mBAAmB,CACpBO,gBAAgB,EAChBD,qBAAqB,EACrBG,qBAAqB,EACrBD,WAAY7iB,KAAKsa,MAAM3M,MACvBoE,GAAII,EAAM3J,SAGlB+a,aAAc,IAAMvjB,KAAK+iB,qBACzBS,UAAW,EAAC,WAEZ,iBAAMjT,UAAU,kBAAiB,6BACjC,iBAAKoM,QAAQ,YAAYC,MAAM,6BAA4B,cAAa,OAAM,WAC1E,iBAAM7f,EAAE,wDACR,iBAAMA,EAAE,iBAAiB8f,KAAK,gBAGtC,oBACInhB,GAAI,GAAG0B,mBACPmT,UAAW,IAAW,iBAAkB,CACpC,gCAAiCiR,IAErC8B,aAAenR,GACXnS,KAAKqiB,mBAAmB,CACpBO,gBAAgB,EAChBD,qBAAqB,EACrBG,qBAAqB,EACrBD,WAAY7iB,KAAKsa,MAAM3M,MACvBoE,GAAII,EAAM3J,SAGlB+a,aAAc,IAAMvjB,KAAK+iB,qBACzBS,UAAW,EAAC,WAEZ,iBAAMjT,UAAU,kBAAiB,yBACjC,iBAAKoM,QAAQ,YAAYC,MAAM,6BAA4B,cAAa,OAAM,WAC1E,iBAAM7f,EAAE,sDACR,iBAAMA,EAAE,kBAAkB8f,KAAK,oBAMvD,CAIO,kBAAAmG,CAAmBC,EAAgB+B,GAClChlB,KAAKyI,MAAMy/C,aAAeloD,KAAK6hB,aAAeoB,EAAUklC,YAAcnoD,KAAKyI,MAAM0/C,UACjFnoD,KAAK2hB,iBACE3hB,KAAK6hB,aAAeoB,EAAU5S,WAAarQ,KAAKyI,MAAM4H,UAC7DrQ,KAAK6hB,YAAYoa,SAGzB,CAEO,iBAAAra,GACH5hB,KAAK2hB,gBACT,CAEO,oBAAAI,GACC/hB,KAAK6hB,aAAa7hB,KAAK6hB,YAAYG,UACnChiB,KAAKiiB,sBAAsBjiB,KAAKiiB,sBACxC,EAGJ,YCtNammC,GAA4B,CAACC,EAAeC,EAAkCC,EAAmCC,EAA6BC,EAAkCC,KACzL,MAAMC,EAAkD,CAAC,EAazD,OAZAN,EAAIrkD,SAAQtI,IACRitD,EAAqBjtD,GAAM,CACvBktD,eAAgBJ,EAAkB1jD,QAAQpJ,IAAO,EAAI,MAAQ,MAC7DmtD,cACIJ,EAAuB3jD,QAAQpJ,IAAO,GAAK6sD,EAAwBzjD,QAAQpJ,IAAO,EAC5E,YACAgtD,EAA0B5jD,QAAQpJ,IAAO,GAAK4sD,EAAuBxjD,QAAQpJ,IAAO,EAChF,eACA,GACdotD,WAAW,EACd,IAEEH,CAAoB,ECnBxB,MAAMI,WAAwB,YACjC,WAAAj6C,CAAYrG,GACR4R,MAAM5R,GAENzI,KAAKsa,MAAQ,CACT0uC,WAAW,EAEnB,CAEO,MAAAtuC,GACH,MAAM,aAAEuuC,EAAY,WAAEC,EAAU,OAAEC,GAAWnpD,KAAKyI,MAElD,OACI,qBACI8H,UAAW,IAAWvQ,KAAKyI,MAAMmgD,eAAgB,yBAAwB,aAC7D5oD,KAAKyI,MAAMyzB,UAGvB1Y,SAAU,EAAC,WAEX,gBACItH,QAAQ,OACRktC,QAAUttD,IACNkE,KAAKyI,MAAM2gD,QAAQppD,KAAKyI,MAAM4gD,OAAO,EAEzC94C,UAAW,IAAW,0BACtB+rB,IAAK2sB,EACL5sB,IAAK8sB,KAET,iBAAK54C,UAAU,2BAA0B,UACpC,IAAM+4C,WACP,iBAAK/4C,UAAU,kCAAiC,cAAG24C,UAInE,E,cC3CG,MAAMK,GAAiB,EAAGl5C,eAC7B,MAAMm5C,GAAU,IAAArwC,QAAuB,MACjC4pC,EAAiBF,GAAwB2G,EAAS,GAQxD,OANA,IAAA5vC,YAAU,K,MACFmpC,IACe,QAAf,EAAAyG,EAAQ3vC,eAAO,SAAEJ,UAAUhb,IAAI,4BACnC,GACD,CAACskD,KAGA,gBAAKn4C,IAAK4+C,EAASj5C,UAAU,mBAAkB,SAC1CF,GAER,ECXQo5C,GAAmB,EAAGrwC,YAAWswC,OAAMrwC,cAChD,MAAOswC,EAAiBC,IAAsB,IAAAntC,UAAS,KAEvD,IAAA7C,YAAU,KACN,IAAIiwC,EAOJ,OANIzwC,IAEAywC,EAAYh4C,YAAW,KACnB+3C,EAAmB,UAAU,GAC9B,KAEA,KACH32C,aAAa42C,EAAU,CAC1B,GACF,CAACzwC,IAEJ,MAAM0wC,EAAgB,KAGlBF,EAAmB,IACnB/3C,YAAW,KACPwH,GAAS,GACV,IAAI,EAGX,OAAKD,EAGDA,IACI,iBAAK7I,UAAW,sBAAsBo5C,IAAiB,WACnD,iBAAKp5C,UAAU,6BAA4B,WACvC,gBAAKA,UAAU,4BAA2B,UACtC,mBAAQ4J,KAAK,SAASuY,QAASo3B,EAAev5C,UAAU,4BAA2B,SAC9E,IAAMmJ,WAGf,cACInJ,UAAU,gCACV4S,KAAMumC,EAAKK,UACXvhD,OAAO,SACP+1C,IAAI,sBAAqB,UAEzB,gBAAKjiB,IAAKotB,EAAKT,aAAc5sB,IAAKqtB,EAAKP,YAE3C,iBAAK54C,UAAU,4BAA2B,UACrC,IAAM+4C,WACP,eAAGnmC,KAAMumC,EAAKK,UAAWvhD,OAAO,SAAS+1C,IAAI,sBAAqB,cAC5DmL,EAAKR,qBAInB,gBAAK34C,UAAU,8BAA6B,cAAa,OAAOmiB,QAASo3B,QA1B9D,uBA6BtB,ECjCL,MAAME,WAAoB,YAItB,WAAAl7C,CAAYrG,GACR4R,MAAM5R,GA8DF,KAAAwhD,qBAAuB,KAC3BjqD,KAAKgb,SAAS,CAAEkpB,WAAW,IAAQ,MAC/B,WAAyBrvB,MAAMq1C,IAC3B,MAAMC,EJxF0B,CACxC5sB,QAF8B6sB,EIyFyBF,GJvF9B/2C,SACzBqqB,KAAM4qB,GAA0BgC,EAAiBj3C,SAAUi3C,EAAiBh3C,aAAcg3C,EAAiB/2C,cAAe+2C,EAAiB92C,cAAe82C,EAAiB72C,aAAc62C,EAAiB52C,kBAH7K,IAAC42C,EI2FgB,GAAlCD,EAAiB5sB,OAAO3/B,OACxBoC,KAAKgb,SAAS,CAAEkpB,WAAW,ICtExC,SAA6BmkB,GAChC,IACI,MAAMgC,EAXP,SAAgChC,GACnC,MAAMiC,EAAejC,EAAI3lD,QAEzB,OADA4nD,EAAa3oB,OACN2oB,EAAa/iD,QAChB,CAAC+mC,EAAU5yC,EAAYqkB,IAAyB,GAAGuuB,IAAMvuB,EAAe,EAAI,IAAM,QAAQrkB,KAC1F,GAER,CAIkC6uD,CAAuBlC,GACjD,OAAOxlB,EAAA,EACF7/B,IAAI,yBAAyBqnD,KAC7Bx1C,MAAMC,GACCA,EAAShB,MAAQgB,EAAShB,KAAKA,KACcgB,EAAShB,KAAKA,KAAKvY,KAAIivD,IACzD,CACHnB,OAAQmB,EAAKC,QACbxB,aAAcuB,EAAKE,cACnBC,gBAAiBH,EAAKI,iBACtBC,eAAgBL,EAAKM,gBACrB5B,WAAYsB,EAAKO,YACjB5B,OAAQqB,EAAKQ,QACbjB,UAAWS,EAAKS,eAMrB,KAEVj2C,OAAM,IAAM,IACrB,CAAE,MAAOlZ,GACL,OAAOiZ,QAAQ5Y,QAAQ,GAC3B,CACJ,CD6CoB+uD,CAAoBf,EAAiB5sB,QAAQ1oB,MAAMs2C,IAC/C,MAAMC,EAAwBprD,KAAKqrD,4BAA4BF,EAAOhB,GACtEnqD,KAAKgb,SAAS,CAAEkpB,WAAW,EAAOonB,iBAAkBF,GAAwB,GAEpF,GACF,GACJ,EA1EFprD,KAAKsa,MAAQ,CACTixC,YAAY,EACZC,aAAc,GACdC,wBAAwB,EACxBC,yBAA0B,GAC1BxnB,WAAW,EACXonB,iBAAkB,CAAE/tB,OAAQ,GAAIC,KAAM,CAAC,IAG3Cx9B,KAAK2rD,+BAAiC,EACtC3rD,KAAK4rD,0BAA4B,GACjC5rD,KAAK6rD,2BAA6B7rD,KAAK6rD,2BAA2BxjD,KAAKrI,MACvEA,KAAK8rD,4BAA8B9rD,KAAK8rD,4BAA4BzjD,KAAKrI,KAC7E,CAEO,iBAAA4hB,GACH5hB,KAAKiqD,sBACT,CAEO,MAAAvvC,GACH,MAAM,UAAEwpB,EAAS,aAAEsnB,EAAY,WAAED,EAAU,iBAAED,GAAqBtrD,KAAKsa,MAEvE,OACM4pB,GAAgD,IAAnConB,EAAiB/tB,OAAO3/B,QACvC0tD,EAAiB/tB,OAAO3/B,SAAWoC,KAAKsa,MAAMoxC,yBAAyB9tD,OAEhE,KAGPsmC,GACO,SAACZ,EAAc,CAAC13B,OAAQ,WAG3B,mCAAsB,GAAG5L,KAAKyI,MAAMsjD,gCAA+B,WAC/D,gBAAIx7C,UAAU,wBAAuB,0BACnB,KACd,iBAAMA,UAAU,+BAA8B,UAC1C,oBACI,IAAG,iBAEX,cACI4S,KAAK,sDACL3a,OAAO,SACP+H,UAAU,iCACVguC,IAAI,aAAY,6BAKvBv+C,KAAKgsD,mBACN,SAACvC,GAAgB,CACbrwC,UAAWmyC,EACX7B,KAAM1pD,KAAKsa,MAAMgxC,iBAAiB9tB,KAAKguB,GACvCnyC,QAAS,IAAMrZ,KAAKgb,SAAS,CAAEuwC,YAAY,QAK/D,CAmBQ,2BAAAF,CACJF,EACAhB,GAEA,MAAM8B,EAAuBjsD,KAAKsa,MAAMgxC,iBAUxC,OATAW,EAAqB1uB,OAAS4sB,EAAiB5sB,OAE/C4tB,EAAMnnD,SAASwmD,IACXyB,EAAqBzuB,KAAKgtB,EAAKnB,QAAUmB,EACzCyB,EAAqBzuB,KAAKgtB,EAAKnB,QAAQP,WAAY,EACnDmD,EAAqBzuB,KAAKgtB,EAAKnB,QAAQT,eAAiBuB,EAAiB3sB,KAAKgtB,EAAKnB,QAAQT,eAC3FqD,EAAqBzuB,KAAKgtB,EAAKnB,QAAQR,cAAgBsB,EAAiB3sB,KAAKgtB,EAAKnB,QAAQR,aAAa,IAGpGoD,CACX,CAEQ,0BAAAJ,CAA2BnwD,GAC/BsE,KAAK2rD,iCAED3rD,KAAK2rD,iCAAmC3rD,KAAKsa,MAAMgxC,iBAAiB/tB,OAAO3/B,QAC3EoC,KAAKgb,SAAS,CAAEywC,wBAAwB,EAAMC,yBAA0B1rD,KAAK4rD,2BAErF,CAEQ,2BAAAE,CAA4BpwD,GAChCsE,KAAK2rD,iCACL3rD,KAAK4rD,0BAA0Bt+C,KAAK5R,GAEhCsE,KAAK2rD,iCAAmC3rD,KAAKsa,MAAMgxC,iBAAiB/tB,OAAO3/B,QAC3EoC,KAAKgb,SAAS,CAAEywC,wBAAwB,EAAMC,yBAA0B1rD,KAAK4rD,2BAErF,CAEQ,eAAAI,GACJ,MAAME,EAAgC,GActC,OAZAlsD,KAAKsa,MAAMgxC,iBAAiB/tB,OAAOv5B,SAAStI,IACpCsE,KAAKsa,MAAMgxC,iBAAiB9tB,KAAK9hC,IAE7BsE,KAAKsa,MAAMgxC,iBAAiB/tB,OAAOz4B,QAAQpJ,IAAO,IACG,IAArDsE,KAAKsa,MAAMoxC,yBAAyB5mD,QAAQpJ,IAC5CsE,KAAKsa,MAAMgxC,iBAAiB9tB,KAAK9hC,GAAIotD,WAErCoD,EAAoB5+C,KAAK5R,EAEjC,KAIA,SAAC6tD,GAAc,WACX,SAAC,GAAQ,CACLrB,YAAaloD,KAAKsa,MAAMmxC,uBACxBtD,UAAW+D,EAAoBtuD,OAC/BR,KAAK,eACLyhB,UAAW7e,KAAKyI,MAAMoW,UACtBmpC,eAAgB,KACZ,MAEMn9B,EAA4B,CAC9B1Y,MAFU,KAAoB2Y,OAAOC,MAAMS,IAG3CP,YAAa,CACT7tB,KALK,+BAQbw1B,EAAA,GAAoB/H,EAAQ,EAC/B,SAEAqhC,EAAoB3wD,KAAI,CAACG,EAAYiS,KAClC,gBACI+kB,QAAU52B,IACNA,EAAE2iB,iBACFze,KAAKgb,SAAS,CACVuwC,YAAY,EACZC,aAAc9vD,IAElB,MAEMmvB,EAA4B,CAC9B1Y,MAFU,KAAoB2Y,OAAOC,MAAMS,IAG3CP,YAAa,CACT7tB,KALK,gCAQbw1B,EAAA,GAAoB/H,EAAQ,EAC/B,UAGD,SAACk+B,GAAe,iBACR/oD,KAAKsa,MAAMgxC,iBAAiB9tB,KAAK9hC,GAAG,CACxCywD,OAAQnsD,KAAK6rD,2BACbzC,QAASppD,KAAK8rD,4BACd5vB,UAAWvuB,MANVjS,QAa7B,EAGJ,YE3MA,GARA,SAA8B+M,GAC1B,OACI,+BACI,SAAC,GAAW,CAACsjD,gBAAiBtjD,EAAMsjD,gBAAiBltC,UAAWpW,EAAMoW,aAGlF,ECiBA,MAAM,WAAiB,YACnB,WAAA/P,CAAYrG,GACR4R,MAAM5R,GAENzI,KAAKsa,MAAQ,CACT3M,MAAO,EACP6P,QAAS,EACT+D,WAAY,EACZC,gBAAgB,EAChBC,gBAAgB,GAGpBzhB,KAAK0hB,mBAAqB1hB,KAAK0hB,mBAAmBrZ,KAAKrI,MACvDA,KAAK2hB,eAAiB3hB,KAAK2hB,eAAetZ,KAAKrI,KACnD,CAKQ,kBAAA0hB,CAAmBU,GACvBpiB,KAAKgb,SAAS,CAAErN,MAAOyU,EAAKzU,MAAO6P,QAAS4E,EAAK5E,QAAS+D,WAAYa,EAAKb,YAC/E,CAEQ,kBAAAc,CAAmBC,GACvB,MAAMC,EAAwBviB,KAAKsa,MAAM3M,MACnC6U,EAAoBF,EAAWvQ,GAAGtG,wBAaxCzL,KAAKgb,SAAS,CACVwG,kBARJ,WACI,MACMiB,EACFD,EAAkB3iB,EAAI2iB,EAAkB3W,MAAQ,GACpD,OAAO2W,EAAkB3iB,EAAIuK,OAAO8B,YAAcuW,EAAwCrY,OAAO8B,UACrG,CAGoBwW,KAAwBJ,EAAWK,qBACnDlB,kBAZOa,EAAWM,gBAAkBN,EAAWO,YAAcN,GAYpBD,EAAWQ,sBAE5D,CAEQ,kBAAAC,IAC8B,IAA9B/iB,KAAKsa,MAAMkH,iBAAyD,IAA9BxhB,KAAKsa,MAAMmH,gBACjDzhB,KAAKgb,SAAS,CACVwG,gBAAgB,EAChBC,gBAAgB,GAG5B,CAEQ,gBAAAomC,CAAiBzqD,GACrB,MAAM0qD,EAAW1qD,EAAK4B,cAAc1B,MAAM,KAC1C,IAAIyqD,EAAY,GAChB,IAAK,IAAIvrD,EAAI,EAAGA,EAAIsrD,EAASlqD,OAAQpB,IACjCsrD,EAAStrD,GAAKsrD,EAAStrD,GAAG,GAAG8iD,OAAO,GAAGh5C,cAAgBwhD,EAAStrD,GAAGkG,MAAM,GACzEqlD,GAAaD,EAAStrD,GAAK,IAE/B,OAAOurD,CACX,CAEQ,cAAApmC,GACJ,MAAM,KAAEvkB,EAAI,UAAEyhB,EAAS,eAAEmpC,GAAmBhoD,KAAKyI,OAC3C,WAAEkV,EAAU,oBAAE0D,IAAwB,OAAa,CACrDxC,YACAqB,UAAW,IAAI9iB,oBACfojB,WAAY,IACZG,OAvEe,EAwEfE,WAAY,IAAIzjB,mBAChB0jB,WAAY,IAAI1jB,mBAChB0hB,UAAW,QAAQ1hB,aACnB2jB,WAAY,CACR,IAAK,CACDJ,OAAQ,OAIpB3gB,KAAK6hB,YAAclE,EACnB3d,KAAKiiB,qBAAuBZ,EAExBrhB,KAAK6hB,aAAemmC,GACpBhoD,KAAK6hB,YAAYM,OAAOnS,GAAG,eAAgBhQ,KAAK0hB,mBAExD,CAEO,MAAAhH,GACH,MAAM,SAAErK,EAAQ,KAAEjT,EAAI,UAAEyhB,GAAc7e,KAAKyI,OACrC,eAAE+Y,EAAc,eAAEC,GAAmBzhB,KAAKsa,MAC1C2tC,EAAWjoD,KAAK6nD,iBAAiBzqD,GAEvC,OACI,iCACI,eAAG1B,GAAI,OAAO0B,aAAiBmT,UAAU,yBAAyB4S,KAAMtE,EAAS,kBACvEopC,EAAQ,gBAElB,gBACI13C,UAAW,IAAW,yBAA0B,CAC5C,WAAgBkR,GAAkBD,IACpC,UAEF,gBACI9lB,GAAI,GAAG0B,oBACPmT,UAAW,IAAW,mBAAoB,CACtC,4BAA+BF,EAASzS,OAAS,IACnD,uBACoB,WAAe+c,MAAMtK,GAAS,SAEnD,WAAe9U,IAAI8U,GAAU,CAACgT,EAAyB1V,KACpD,gBACI4C,UAAU,kBAAiB,wBACJvQ,KAAKsa,MAAM3M,QAAUA,EAE5C2V,aAAenR,GACXnS,KAAKqiB,mBAAmB,CACpBO,gBAAgB,EAChBD,qBAAqB,EACrBG,qBAAqB,EACrBD,WAAYlV,EACZoE,GAAII,EAAM3J,SAGlB+a,aAAc,IAAMvjB,KAAK+iB,qBAAoB,SAE5CM,GAZI,GAAG1V,kBAiBxB,iBAAK4C,UAAW,GAAGnT,qBAAuB,WACtC,oBACI1B,GAAI,GAAG0B,mBACPmT,UAAW,IAAW,iBAAkB,CACpC,gCAAiCkR,IAErC6B,aAAenR,GACXnS,KAAKqiB,mBAAmB,CACpBO,gBAAgB,EAChBD,qBAAqB,EACrBG,qBAAqB,EACrBD,WAAY7iB,KAAKsa,MAAM3M,MACvBoE,GAAII,EAAM3J,SAGlB+a,aAAc,IAAMvjB,KAAK+iB,qBACzBS,UAAW,EAAC,WAEZ,iBAAMjT,UAAU,kBAAiB,6BACjC,iBAAKoM,QAAQ,YAAYC,MAAM,6BAA4B,cAAa,OAAM,WAC1E,iBAAM7f,EAAE,wDACR,iBAAMA,EAAE,iBAAiB8f,KAAK,gBAGtC,oBACInhB,GAAI,GAAG0B,mBACPmT,UAAW,IAAW,iBAAkB,CACpC,gCAAiCiR,IAErC8B,aAAenR,GACXnS,KAAKqiB,mBAAmB,CACpBO,gBAAgB,EAChBD,qBAAqB,EACrBG,qBAAqB,EACrBD,WAAY7iB,KAAKsa,MAAM3M,MACvBoE,GAAII,EAAM3J,SAGlB+a,aAAc,IAAMvjB,KAAK+iB,qBACzBS,UAAW,EAAC,WAEZ,iBAAMjT,UAAU,kBAAiB,yBACjC,iBAAKoM,QAAQ,YAAYC,MAAM,6BAA4B,cAAa,OAAM,WAC1E,iBAAM7f,EAAE,sDACR,iBAAMA,EAAE,kBAAkB8f,KAAK,oBAMvD,CAEO,iBAAA+E,GACH5hB,KAAK2hB,gBACT,CAEO,oBAAAI,GACC/hB,KAAK6hB,aAAa7hB,KAAK6hB,YAAYG,UACnChiB,KAAKiiB,sBAAsBjiB,KAAKiiB,sBACxC,EAGJ,YC5MA,MAAMmqC,WAA6B,YAC/B,WAAAt9C,CAAYrG,GACR4R,MAAM5R,GAOF,KAAA4jD,YAAc,CAACvkC,EAAcwkC,KACjC,OAAOA,GC3BcC,ED2BWzkC,GC3ByDlqB,ODepE,ICf8F,GAAG2uD,EAAK/rD,UAAU,EDehH,UCfgK+rD,ED2BjHzkC,EC3BhD,IAACykC,CD2BmD,EANxEvsD,KAAKsa,MAAQ,CACTgyC,WAAW,EAEnB,CAMO,MAAA5xC,GAEH,OADA1a,KAAKyI,MAAMsL,QAAQmd,MAAQlxB,KAAKyI,MAAMsL,QAAQmd,OAAS,IAEnD,cACI3gB,UAAU,0BACV4S,KAAMnjB,KAAKyI,MAAMsL,QAAQoC,IACzBuc,QAAUvgB,IACNA,EAAMsM,kBAGN,QAAU,CACNtM,MAAO,KAAoB2Y,OAAOC,MAAMS,IACxCP,YAAa,CACT7tB,KAAM4C,KAAKyI,MAAMsL,QAAQmd,MACzB5e,SAAU,cAKlBlI,OAAO6oB,SAAS9P,KAAOnjB,KAAKyI,MAAMsL,QAAQoC,GAAG,EAEjDmN,aAAc,KACVzR,YAAW,KACP7R,KAAKgb,SAAS,CAAEsxC,WAAW,GAAO,GACnC,GAAG,EAEV/oC,aAAc,KACV1R,YAAW,KACP7R,KAAKgb,SAAS,CAAEsxC,WAAW,GAAQ,GACpC,GAAG,EACT,aACWtsD,KAAKyI,MAAMsL,QAAQmd,MAAK,aACxBlxB,KAAKyI,MAAMyzB,UAAS,UAEhC,qBAAS3rB,UAAU,0BAAyB,WACxC,gBAAKA,UAAU,8BAA6B,UACxC,gBACI2L,QAAQ,OACRogB,IAAK,GAAGt8B,KAAKyI,MAAMsL,QAAQy4C,MAAMr2C,kBACjCkmB,IAAK,GAAGr8B,KAAKyI,MAAMsL,QAAQmd,aAGnC,iBAAK3gB,UAAU,yCAAwC,WACnD,cAAGA,UAAU,oCAAmC,SAAEvQ,KAAKyI,MAAMsL,QAAQ04C,YACrE,eAAIl8C,UAAU,qCAAoC,SAAEvQ,KAAKyI,MAAMsL,QAAQmd,SACvE,gBACI3gB,UAAU,oCACVm8C,wBAAyB,CACrBC,OAAQ3sD,KAAKqsD,YAAYrsD,KAAKyI,MAAMsL,QAAQ+T,KAAM9nB,KAAKsa,MAAMgyC,eAGrE,iBAAM/7C,UAAU,qCAAoC,SAAE,IAAM4b,mBAKhF,EAGJ,YEvFMygC,GAA8B,CAChC94C,KAAM,ICGV,IAAY+4C,IAAZ,SAAYA,GACR,iBACH,CAFD,CAAYA,KAAAA,GAAY,KAUxB,MAAMC,WAA+B,YACjC,WAAAh+C,CAAYrG,GACR4R,MAAM5R,EACV,CAEO,MAAAiS,GACH,OACI,cACIyI,KAAK,YACL5S,UAAU,0BAAyB,aACvBvQ,KAAKyI,MAAMsL,QAAQg5C,QAAU,IAAM/sD,KAAKyI,MAAMsL,QAAQi5C,YAAW,aACjEhtD,KAAKyI,MAAMyzB,UAAS,UAEhC,iBAAK3rB,UAAU,4DAA2D,WACtE,eAAIA,UAAU,4CAA2C,SAAEvQ,KAAKyI,MAAMsL,QAAQg5C,WAC9E,mBAAQx8C,UAAU,2CAA0C,SACvDvQ,KAAKyI,MAAMsL,QAAQi5C,kBAKxC,EAGJ,YCtBMC,GAAsC,CACxC9yC,KAAM0yC,GAAaK,OACnBH,QAAS,6CACTC,YAAa,qBAGjB,MAAMG,WAAkC,YAIpC,WAAAr+C,CAAYrG,GACR4R,MAAM5R,GAsDF,KAAA2kD,uBAAyB,MF9E9B,WACH,IACI,OAAOvqB,EAAA,EACF7/B,IAA4B,sCAC5B6R,MAAKC,GACEA,EAAShB,KACFgB,EAAShB,KAEbiB,QAAQ5Y,QAAQywD,MAE1B53C,OAAM,IAAM43C,IACrB,CAAE,MAAO9wD,GACL,OAAOiZ,QAAQ5Y,QAAQywD,GAC3B,CACJ,EEiEQS,GAAoBx4C,MAAMC,I,MACtB,IAAIgC,EAAmE,QAAjB,EAAAhC,aAAQ,EAARA,EAAUhB,KAAK,UAAE,eAAEC,QACzE+C,EAAQA,EAAMmN,QAAQC,IAAQ,MAAC,OAAmC,QAAnC,EAACA,aAAI,EAAJA,EAA6BsoC,aAAK,eAAEr2C,GAAG,IACvEW,EAAMxJ,KAAK2/C,IACXjtD,KAAKgb,SAAS,CAAEsyC,4BAA6Bx2C,GAAQ,GACvD,EA3DF9W,KAAKsa,MAAQ,CACTgzC,4BAA6B,GAErC,CAEO,iBAAA1rC,GACH5hB,KAAKotD,wBACT,CAEO,MAAA1yC,GACH,OAAI1a,KAAKsa,MAAMgzC,4BAA4B1vD,OAAS,GACzC,yBAGP,SAAC,GAAQ,CACLR,KAAK,oBACLyhB,UAAW7e,KAAKyI,MAAMoW,UACtBmpC,eAAgB,KACZ,MAEMn9B,EAA4B,CAC9B1Y,MAFU,KAAoB2Y,OAAOC,MAAMS,IAG3CP,YAAa,CACT7tB,KALK,mCAQbw1B,EAAA,GAAoB/H,EAAQ,EAC/B,SAEC7qB,KAAKsa,MAAMgzC,4BAAyE/xD,KAClF,CAACgyD,EAAgD5/C,KACxC4/C,aAAQ,EAARA,EAA8BpzC,QAAS0yC,GAAaK,QAEjD,SAAC,GAAsB,CACnBn5C,QAASk5C,GAET/wB,UAAWvuB,GADNA,IAMb,SAAC,GAAoB,CACjBoG,QAASw5C,EAETrxB,UAAWvuB,GADNA,MAQjC,EAYJ,Y,eCvFA,MAAM6/C,WAA+B,YAArC,c,oBACW,KAAAlzC,MAAQ,CACX0X,KAAM,GACNy7B,uBACI,4LAOD,KAAAC,2BAA6B,MCdjC,WACH,MAAM/2C,GAAU,UAEhB,GAAIA,EACA,IACI,OAAOksB,EAAA,EACF7/B,IAA4B,wBAAyB,CAClD8S,OAAQ,CAAEa,aAEb9B,MAAKC,GACEA,EAAShB,KAAK65C,cACP74C,EAAShB,KAAK65C,cAGlB54C,QAAQ5Y,QAAQ,MAE1B6Y,OAAM,IAAM,IACrB,CAAE,SACE,OAAOD,QAAQ5Y,QAAQ,GAC3B,CAGJ,OAAO4Y,QAAQ5Y,QAAQ,GAC3B,EDRQyxD,GAA4B/4C,MAAMmd,GAAiBhyB,KAAKgb,SAAS,CAAEgX,UAAQ,CAqBnF,CA1BW,iBAAApQ,GACH5hB,KAAK0tD,4BACT,CAMO,MAAAhzC,GACH,MAAM,uBAAE+yC,EAAsB,KAAEz7B,GAAShyB,KAAKsa,MAE9C,OAAoB,IAAhB0X,EAAKp0B,OACE,MAIP,kCACqB,GAAGoC,KAAKyI,MAAMsjD,sCAC/Bx7C,UAAU,sCAAqC,UAE/C,eAAGA,UAAU,iCAAgC,eACtCyhB,EAAI,IAAGy7B,MAI1B,EAGJ,YElCA,MAAM,WAA6B,YACxB,MAAA/yC,GACH,OACI,SAAC,KAAQ,CAAC7V,OAAQ,CAAC,IAAK,KAAM+G,OAAQ,EAAC,UACnC,SAAC,GAAsB,CAACmgD,gBAAiB/rD,KAAKyI,MAAMsjD,mBAGhE,EAGJ,Y,eCJe,MAAM8B,WAA4B,YAC7C,WAAA/+C,CAAYrG,GACR4R,MAAM5R,EACV,CAEO,MAAAiS,GACH,OACI,gBACInK,UAAW,gDAAgDvQ,KAAKyI,MAAMqlD,kJAAiJ,UAEvN,iBAAKv9C,UAAU,2CAA0C,WACrD,gBAAIA,UAAU,iCAAgC,WAC1C,iBAAMA,UAAU,qCAAoC,UAChD,8CAEJ,iBAAMA,UAAU,wCAAuC,UACnD,qDAGR,gBAAKA,UAAU,oCAAmC,UAC9C,iBAAMA,UAAU,yCAAwC,0DAI5D,uBACImiB,QAAS,MAaL,QAVkC,CAC9BvgB,MAFU,kBAGV8Y,YAAa,CACT7tB,KALK,cAMLkV,SAAU,YAEdutB,OAAQ,CACJC,iBAAkB,kCAGR,EAEtB3c,KAAK,YACL2a,MAAM,6BAA4B,SAEjC99B,KAAKyI,MAAMslD,eAKhC,EChDW,MAAMC,WAAsB,YAChC,iBAAApsC,GACH/P,YAAW,WACP,MAAMgZ,EAA4B,CAC9B1Y,MAAO,KAAoB2Y,OAAOmjC,KAAKC,MACvChI,UAAW,CACPA,UAAW,yBAGnB,QAAUr7B,EACd,GAAG,KAAoBsjC,qBAC3B,CAEQ,yBAAAC,GACJljD,SAAS4c,KAAKrO,UAAUE,OAAO,mBAE/B,MAAM00C,EAAWnjD,SAASwa,eAAe,UACrC2oC,IACAA,EAAS50C,UAAUE,OAAO,qBAC1B00C,EAAS50C,UAAUhb,IAAI,oBAE/B,CAEO,MAAAic,GAGH,OAFA1a,KAAKouD,6BAGD,oBACI1yD,GAAG,0BAAyB,kBACX,GAAGsE,KAAKyI,MAAMsjD,wBAC/Bx7C,UAAU,2CAA0C,UAEpD,iBAAKA,UAAU,+CAA8C,WACzD,gCACI,mBAAQ+9C,MAAM,qBAAqBC,OAAO,4CAC1C,mBACID,MAAM,+CACNC,OAAO,4CAEX,mBAAQD,MAAM,wBAAwBC,OAAO,wCAC7C,gBACIh+C,UAAU,8BACV+rB,IAAI,qCACJD,IAAI,0EACJxwB,MAAM,OACND,OAAO,aAGf,gBAAK2E,UAAU,iEAAgE,UAC3E,SAACs9C,GAAmB,CAACC,UAAW,KAAUU,KAAMT,SAAS,sBAK7E,EClEG,MAAMU,GAA4D,CACrE1iC,OAAQ,GACR9V,YAAa,G,0BCSV,MAAMy4C,GAA6Bp5C,UACtC,MAAMG,QAAe,UACrB,GAAIA,EAAQ,CACR,MAAMk5C,QDTPr5C,eAAoCG,GACvC,OAAIA,QACaL,MAAM,+CAA+CK,KAC7DZ,MAAMC,GAAuBA,EAASO,SACtCR,MAAMf,GAA4CA,IAClDkB,OAAM,IAAMy5C,KAGd15C,QAAQ5Y,QAAQsyD,GAC3B,CCAwCG,CAAqBn5C,IAC/C,OAAEsW,EAAM,YAAE9V,GAAgB04C,EAChC,GAAI5iC,GAAU9V,EAAc,EAAG,CAC3B,MAAM44C,QAAiB,QAAmB,CAAE74C,gBAAiB,CAACC,KAC9D,GAAI44C,EAASjxD,OAAS,EAClB,MAAO,CAAEumB,QAAS0qC,EAAS,GAAI9iC,OAAQA,EAE/C,CACJ,CAEA,MAAO,CAAE5H,QAAS,CAAC,EAAc4H,OAAQ,GAAqB,EAGrD+iC,GAAyBC,GACP,CACvB,KAAsBC,8BACtB,KAAsBC,8BACtB,KAAsBC,sBACtB,KAAsBC,uBAEAvvC,SAASmvC,aAAa,EAAbA,EAAehjC,Q,8CC/B/C,MAUMqjC,GAAuC,CAChD3pB,EACArgB,EACAiqC,KAEA,MAAMC,EAf8B,EAAClqC,EAAqCiqC,IACtEjqC,GAA4BA,EAAyBxnB,OAAS,EACvDwnB,EAAyB7pB,KAAK0a,GAAgBtY,OAAOsY,KACrDo5C,GAAqBA,EAAkBzxD,OAAS,EAChDyxD,EAAkB9zD,KAAK85B,GAAgB13B,OAAO03B,EAAYpf,eAE1D,GASgBs5C,CAAyBnqC,EAA0BiqC,IAE9E,QAA2B,CACvBC,qBACAE,KAAK,WACLC,MAAM,WACNC,WAAW,UACXC,aAAa,YACd96C,MAAM+6C,IACLnqB,EAAGmqB,EAAuB,GAC5B,E,0BC5BC,MAAMC,GAAgC,KAErC,gBAAKt/C,UAAU,wBAAuB,UAClC,iBACIqM,MAAM,6BACNkzC,WAAW,+BACXjkD,MAAM,MACND,OAAO,MACP+Q,QAAQ,cAAa,cACT,OAAM,WAElB,2BACI,4BACIozC,GAAG,UACHC,GAAG,OACHC,GAAG,UACHC,GAAG,OACHC,kBAAkB,uCAClBC,cAAc,iBAAgB,WAE9B,iBAAMvrD,OAAO,IAAIwrD,UAAU,UAAUC,YAAY,UACjD,iBAAMzrD,OAAO,IAAIwrD,UAAU,UAAUC,YAAY,eAGzD,6BACc,uCACVvzD,EAAE,kBACFwvB,SAAS,UACTgkC,YAAa,KAEjB,iBACI1wD,EAAE,KACF3C,EAAE,MACF2O,MAAM,MACND,OAAO,KACP4kD,GAAG,IACH3zC,KAAK,UACL4zC,QAAQ,OACRhgD,MAAO,CAAEigD,UAAW,cAExB,iBACI3zD,EAAE,gDACF8f,KAAK,UACL4zC,QAAQ,OACRhgD,MAAO,CAAEigD,UAAW,cAExB,iBACI3zD,EAAE,iDACF8f,KAAK,UACL4zC,QAAQ,OACRhgD,MAAO,CAAEigD,UAAW,cAExB,iBACI3zD,EAAE,gDACF8f,KAAK,UACL4zC,QAAQ,OACRhgD,MAAO,CAAEigD,UAAW,cAExB,iBAAM7kD,MAAM,MAAMD,OAAO,MAAMiR,KAAK,UAAU4zC,QAAQ,OAAOhgD,MAAO,CAAEigD,UAAW,kBCxDpFC,GAA+C,KAEpD,gBAAKpgD,UAAU,qGAAoG,UAC/G,eAAIA,UAAU,iCAAgC,UAC1C,UAAC,KAAQ,CACLnT,KAAK,8BACLyhB,UAAU,6BACVuE,UAAU,+BAA8B,WAExC,eAAI7S,UAAU,6CAA4C,UACtD,iBAAKA,UAAU,sBAAqB,WAChC,gBAAKA,UAAU,6DAA4D,qDAG3E,cAAG4S,KAAK,IAAI5S,UAAU,6DAA4D,+BAL3B,uCAU/D,eACIA,UAAU,uEAAsE,UAGhF,gBAAKA,UAAU,sBAAqB,UAChC,SAACs/C,GAAmB,OAHpB,uCAMR,eACIt/C,UAAU,uEAAsE,UAGhF,gBAAKA,UAAU,sBAAqB,UAChC,SAACs/C,GAAmB,OAHpB,uCAMR,eACIt/C,UAAU,uEAAsE,UAGhF,gBAAKA,UAAU,sBAAqB,UAChC,SAACs/C,GAAmB,OAHpB,6CCuF5B,GA5G6BpnD,IACzB,MAAM,wBACFmoD,EAAuB,uBACvBhB,EAAsB,UACtBx2C,EAAS,yBACTgM,EAAwB,wBACxByrC,EAAuB,mCACvBnsC,EAAkC,eAClCosC,GACAroD,EAEE2pB,EAAa,aAAiB3J,EAAA,GAG9BsoC,EAAoB,CAACrH,EAAesH,KAEtC,MAAM5zD,EAAOssD,EAAKh6C,aAAa,aAAe,GACxCuG,EAAcyzC,EAAKh6C,aAAa,oBACjCuG,IAGL,QAAU,CACN9D,MAAO,wBACP8Y,YAAa,CACT7tB,OACAkV,SAAU,gDAEdohB,gBAAiB,CACbzd,cACAg7C,gBAAiBD,EAAgB/sC,QAAQitC,GAAOA,IAAOj7C,IAAanY,KAAK,MAE7E1B,OAAQ,CACJw3B,iBAAkB,+BAExB,EAoDN,OAjDA,IAAAha,YAAU,KACN,IAAKg2C,EAAuBhyD,OAAQ,OAEpCw0B,EAAW5J,eAAeonC,GAG1B,MAAMuB,EAAQjmD,SAAS6a,iBAAiB,8CAGlCirC,EAAkBnzD,MAAMqsB,KAAKinC,GAC9B51D,KAAKoP,GAASA,EAAK+E,aAAa,sBAChCuU,QAAQC,GAASA,IA0BtB,OAvBA,QAAU,CACN/R,MAAO,0BACPuhB,gBAAiB,CACbu9B,gBAAiBD,EAAgBlzD,KAAK,MAE1C1B,OAAQ,CACJw3B,iBAAkB,gCAK1Bu9B,EAAMntD,SAAS0lD,I,QACSA,EAAKh6C,aAAa,sBAGC,QAAvC,EAAAg6C,EAAKt6C,cAAc,4BAAoB,SAAE/E,iBAAiB,SAAS,KAC/D0mD,EAAkBrH,EAAMsH,EAAgB,IAEL,QAAvC,EAAAtH,EAAKt6C,cAAc,4BAAoB,SAAE/E,iBAAiB,SAAS,KAC/D0mD,EAAkBrH,EAAMsH,EAAgB,IAC1C,IAGC,KACHG,EAAMntD,SAAS0lD,I,QAC4B,QAAvC,EAAAA,EAAKt6C,cAAc,4BAAoB,SAAEa,oBAAoB,SAAS,KAClE8gD,EAAkBrH,EAAMsH,EAAgB,IAEL,QAAvC,EAAAtH,EAAKt6C,cAAc,4BAAoB,SAAEa,oBAAoB,SAAS,KAClE8gD,EAAkBrH,EAAMsH,EAAgB,GAC1C,GACJ,CACL,GACF,CAACpB,IAEGgB,GAA2BhB,EAAuBhyD,OAAS,GAC9D,SAAC6lB,GAAA,EAAqB,CAClB/nB,GAAG,2BACHqrB,aAAc,KAAmByW,KAAK,KAAY4zB,aAAarqC,aAC/DsqC,cAAe,KAAmB7zB,KAAK,KAAY4zB,aAAaE,sBAChEl4C,UAAWA,EACX4K,gBAAiB4rC,EACjBxqC,yBAA0BA,EAC1BV,mCAAoCA,EACpCtB,UAAW,KAAmBoa,KAAK,KAAY4zB,aAAahuC,UAC5DoB,cAAc,EACdO,QAASqN,EAAWrN,QACpB+rC,eAAgBA,EAChBnsC,YAAY,mBAEhBksC,GACA,SAACvtB,EAAc,CAAC/yB,UAAW,OAC3BqgD,GAA6D,IAAlChB,EAAuBhyD,QAClD,SAAC+yD,GAAkC,IACnC,IAAI,E,eCxHL,MAAMY,GAA8C,KAEnD,gBAAKhhD,UAAU,yEAAwE,UACnF,eAAIA,UAAU,iCAAgC,UAC1C,UAAC,KAAQ,CACLnT,KAAK,qBACLyhB,UAAU,6BACVuE,UAAU,+BAA8B,WAExC,eAAI7S,UAAU,6CAA4C,UACtD,iBAAKA,UAAU,sBAAqB,WAChC,gBAAKA,UAAU,wBAAuB,SAAE,SACxC,gBAAKA,UAAU,6DAA4D,2CAG3E,cAAG4S,KAAK,QAAQ5S,UAAU,6DAA4D,iCAN/B,8BAW/D,eACIA,UAAU,uEAAsE,UAGhF,gBAAKA,UAAU,sBAAqB,UAChC,SAACs/C,GAAmB,OAHpB,8BAMR,eACIt/C,UAAU,uEAAsE,UAGhF,gBAAKA,UAAU,sBAAqB,UAChC,SAACs/C,GAAmB,OAHpB,8BAMR,eACIt/C,UAAU,uEAAsE,UAGhF,gBAAKA,UAAU,sBAAqB,UAChC,SAACs/C,GAAmB,OAHpB,oC,yBCzB5B,MAyCA,GAzCgCpnD,IAC5B,MAAM,UAAE2Q,EAAS,kBAAEi2C,EAAiB,mCAAE3qC,GAAuCjc,GAEvE,iBAAE8gB,EAAgB,oBAAEmC,IAAwB,SAC9C,SAAYpR,IAAU,CAClBiP,iBAAkBjP,EAAMiP,iBACxBqB,sBAAuBtQ,EAAMsQ,sBAC7BU,2BAA4BhR,EAAMgR,2BAClCI,oBAAqBpR,EAAMoR,yBAI7B1B,EAAM,aAAiBvB,EAAA,IACtB+oC,EAAYC,IAAiB,IAAAh1C,UAAShU,EAAM4mD,mBAOnD,OALA,IAAAz1C,YAAU,KACN63C,EAAchpD,EAAM4mD,mBACpB3jC,GAAqB,GACtB,CAACjjB,EAAM4mD,kBAAmB3jC,IAEtB2jC,EAAkBzxD,OAAS,GAC9B,SAAC6lB,GAAA,EAAqB,CAClB/nB,GAAG,sBACHqrB,aAAc,KAAmByW,KAAK,KAAYk0B,gBAAgB3qC,aAClEsqC,cAAe,KAAmB7zB,KAAK,KAAYk0B,gBAAgBJ,sBACnEl4C,UAAWA,EACX4K,gBAAiBwtC,EACjBpsC,yBAA0BmE,EAC1B7E,mCAAoCA,EACpCtB,UAAW,KAAmBoa,KAAK,KAAYk0B,gBAAgBtuC,UAC/DmB,mBAAoB9b,EAAM8b,mBAC1BC,cAAc,EACdO,QAASiF,EAAIjF,QACb+rC,eAAgBroD,EAAMqoD,eACtBnsC,YAAY,YAGhB,SAAC4sC,GAAiC,GACrC,ECxBL,GArBgC9oD,IAC5B,MAAM,MAAEyoB,EAAK,kBAAEygC,EAAiB,eAAEC,EAAc,mBAAEC,EAAkB,sBAAEC,GAA0BrpD,EAChG,OACI,wBAAY8H,UAAU,iCAAgC,WAClD,eAAIA,UAAU,+BAA8B,SAAE2gB,KAC9C,kBAAM3gB,UAAU,6CAA4C,UACvDohD,GACG,iBAAMphD,UAAU,2CAA0C,aAAa,GAAGohD,iBAAgC,SAAGA,IAC7G,MACJ,iBACIphD,UAAW,IAAW,sCAAuC,CACzD,2CAA+D,IAAnBqhD,IAAyBE,IACvE,SAEDD,SAIhB,ECkBL,GAhC6BppD,IACzB,MAAM,IAAE4zB,EAAG,IAAEC,EAAG,eAAEs1B,EAAc,aAAEG,GAAiBtpD,EAEnD,IAAIoD,EAf6B,IAgB7BD,EAf8B,IAsBlC,OAL6B,IAAzBnD,EAAMmpD,iBACN/lD,EAjByC,IAkBzCD,EAjB0C,MAqB1C,gBACI2E,UAAW,IAAW,yCAA0C,CAC5D,qDAAyE,IAAnBqhD,IACxD,UAEF,8BACgB,OACZt1B,IAAKA,EACLD,IAAKA,EACLxwB,MAAOA,EACPD,OAAQA,EACR2E,UAAW,IAAW,+BAAgC,CAClD,2CAA+D,IAAnBqhD,IAEhDzF,OAAQ4F,KAGnB,ECuCL,GAtEuBtpD,IACnB,MAAMupD,EAAa,WAAe9mB,QAAQziC,EAAM4H,UAC1C3U,ECRH,WACH,SAASu2D,EAAIx1D,GACT,MAAMkC,EAAI,GAAGT,KAAKg0D,SAASrwD,SAAS,eAAei/C,OAAO,EAAG,GAC7D,OAAOrkD,EAAI,IAAIkC,EAAEmiD,OAAO,EAAG,MAAMniD,EAAEmiD,OAAO,EAAG,KAAOniD,CACxD,CAEA,OAAOszD,IAAQA,GAAI,GAAQA,GAAI,GAAQA,GAC3C,CDCeE,IACJC,EAAYC,GAAiB,YAAwB,IACrDC,EAAgBC,GAAqB,YAAwB,GAC9DC,EAAU,SAA6B,MAEvCC,EAAY,eACbtgD,IACOigD,GAAcI,EAAQ34C,UAAY24C,EAAQ34C,QAAQ2F,SAASrN,EAAM3J,UACjE6pD,GAAc,GACdE,GAAkB,GACtB,GAEJ,CAACH,IAyBL,OAtBA,aAAgB,KACZlnD,SAASb,iBAAiB,QAASooD,GACnCvnD,SAASb,iBAAiB,UAAWooD,GAC9B,KACHvnD,SAAS+E,oBAAoB,QAASwiD,GACtCvnD,SAAS+E,oBAAoB,UAAWwiD,EAAU,IAEvD,CAACA,KAgBA,iBAAKliD,UAAU,YAAY3F,IAAK4nD,EAAO,WACnC,iCACIjiD,UAAU,oFAAmF,aAClF,yBAAwB,gBACpB,aAAa7U,IAAI,gBACjB42D,GACX7pD,EAAMiqD,YAAW,CACrBhgC,QArBQ,KAChB2/B,GAAeD,GACfG,GAAmBD,GACnB,MAAMznC,EAA4B,CAC9B1Y,MAAO,KAAoB2Y,OAAOC,MAAMS,IACxCP,YAAa,CACT7tB,KAAM,aACNkV,SAAU,YAAY7J,EAAMgkD,cAGpC,QAAU5hC,EAAQ,EAWU,SAEnB,IAAM8nC,aAEX,gBACIpiD,UAAW,IAAW,sBAAuB,CAAE,4BAA6B6hD,IAC5E12D,GAAI,aAAaA,IACjBikC,KAAK,OAAM,UAEX,eAAIpvB,UAAU,2BAA0B,SACnCyhD,EAAWz2D,KAAI,CAAC8nB,EAAY1V,KAErB,eAAI4C,UAAU,gCAA4CiT,UAAW,EAAC,SACjEH,GAD8C1V,WAQ1E,EElCL,GA/B2BlF,IACvB,MAAMmqD,EAAYnqD,EAAMmqD,UAAYnqD,EAAMmqD,UAAY,CAAC,EAEvD,OACI,4BACIriD,UAAW,IACP,wEACA9H,EAAMoqD,aAEV1vC,KAAM1a,EAAM0a,KACZK,SAAU,EACVkP,QAASjqB,EAAMqqD,aACXF,EAAS,WAEb,iBAAKriD,UAAU,wCAAuC,WAClD,gBAAKA,UAAU,8CAA6C,SACjC,iBAAf9H,EAAMgf,MACV,iBACIlX,UAAU,4CACVm8C,wBAAyB,CAAEC,OAAQlkD,EAAMgf,SAG7C,iBAAMlX,UAAU,4CAA2C,SAAE9H,EAAMgf,SAG1Ehf,EAAMupB,UAGlB,ECtCL,GALsB,CAAC7b,EAAa48C,KAChC,MAAMC,EAAiB78C,EAAIrR,QAAQ,MAAQ,EAC3C,OAAOqR,GAAO68C,EAAiB,IAAM,KAAOD,CAAQ,ECoIxD,GAnH0BtqD,IACtB,MAAM,MACFyoB,EAAK,KACL+hC,EAAI,kBACJtB,EAAiB,cACjBuB,EAAa,eACbtB,EAAc,mBACdC,EAAkB,SAClB99B,EAAQ,SACRo/B,EAAQ,sBACRrB,GACArpD,EAAM2qD,iBACJR,EAAYnqD,EAAMmqD,UAAYnqD,EAAMmqD,UAAY,CAAC,GAEhDS,EAAWC,GAAgB,YAAe,IAC1CC,EAAqBC,GAA0B,YAAwB,IACvEC,EAAyBC,GAA8B,YAAe,GAEvEC,EAAgB,SAAa,MAEnC,aAAgB,KACZ,MAAMC,EAAQC,GAAA,GAAK1tC,SAAS,CAAE2tC,QAAS,IAEnCrrD,EAAMy7B,YAAcmvB,EACpBO,EAAM/sC,OACF8sC,EAAc95C,QACd,CAAEk6C,WAAY,SACd,CACIA,WAAY,QACZztC,KAAM,OACNne,SAAU,KAIlByrD,EAAMI,MACV,IAGJ,MAKMC,EAAmB,CACrB,CACIjiC,KAAM,QACNvK,KAAM,IAAMuL,MACZ8/B,YAAch3D,IACVA,EAAE2iB,iBAVWnJ,iBACfyd,UAAUI,UAAUC,UAAU,GAAGhpB,OAAO6oB,SAASC,SAAS+/B,KAChEO,GAAuB,EAAK,EASpB1gC,GACA,MAAMjI,EAA4B,CAC9B1Y,MAAO,KAAoB2Y,OAAOC,MAAMS,IACxCP,YAAa,CACT7tB,KAAM,QACNkV,SAAU,YAAY4e,OAG9B,QAAUrG,EAAQ,EAEtB1H,KAAM,SACN0vC,YAAa,0BAcrB,OACI,iBAAKtiD,UAAU,yBAAwB,WACnC,oBAAQA,UAAU,gCAA+B,WAC3C9H,EAAMy7B,YAAcmvB,KAClB,gBAAK9iD,UAAU,+CAA8C,UACzD,gBAAK3F,IAAK+oD,EAAepjD,UAAU,0CAG3C,6BACIA,UAAU,8BACV4S,KAAO+vC,EAAuB,GAAcD,EAAM,iBAA3BA,GACnBL,EAAS,CACbpvC,SAAU,EAAC,WAEX,SAAC,GAAsB,CACnB0N,MAAOA,EACPygC,kBAAmBA,EACnBC,eAAgBA,EAChBC,mBAAoBA,EACpBC,sBAAuBA,KAE3B,gBAAKvhD,UAAU,qCACf,SAAC,GAAmB,CAChB+rB,IAAKvI,EACLsI,IAAK82B,EACLvB,eAAgBA,EAChBG,aAAc,IAAMuB,GAAa,aAI7C,SAAC,GAAa,CAAC7G,SAAUv7B,EAAK,SAxCX,MACvB,MAAMgjC,EAA+B,GAMrC,OAJAD,EAAiBjwD,SAAQ,CAACmwD,EAAe33D,KACrC03D,EAAc5mD,MAAK,SAAC,GAAiB,iBAAa6mD,GAAP33D,GAAyB,IAGjE03D,CAAa,EAiCiBE,MACjC,SAACj/B,GAAA,EAAyB,CACtB1N,KAAM,IAAMuL,MACZf,OAAQshC,EACR7rC,UAAU,gCACVF,aAAc,IAAMgsC,GAAuB,OAGtD,EChHU,MAAMa,WAA4C,YAI7D,WAAAvlD,CAAYrG,GACR4R,MAAM5R,GACNzI,KAAKsa,MAAQ,CACTg6C,qBAAsBt0D,KAAKyI,MAAM6rD,qBACjC5wC,cAAe1jB,KAAK2jB,mBAAmB3jB,KAAKyI,MAAM6rD,uBAGtDt0D,KAAK2jB,mBAAqB3jB,KAAK2jB,mBAAmBtb,KAAKrI,KAC3D,CAEQ,kBAAA2jB,CAAmB2wC,GACvB,MAAM5wC,EAAsC,GAiB5C,OAfI4wC,GAAwBA,EAAqB12D,OAAS,GACtD02D,EAAqBtwD,SAAQ,CAACovD,EAAqCzlD,KAI/D+V,EAAcpW,MACV,gBAAKiD,UAAU,kBAAiB,UAC5B,gBAAKA,UAAU,sBAAqB,UAChC,SAAC,GAAgB,CAACqiD,UANY,CAC1CA,SAAqB,GAK+BQ,iBAAkBA,OAF5B,uBAAuBzlD,KAKhE,IAIF+V,CACX,CAEO,kBAAAV,CAAmBC,GAElBiC,KAAKC,UAAUlC,EAAUqxC,wBAA0BpvC,KAAKC,UAAUnlB,KAAKyI,MAAM6rD,uBAG7Et0D,KAAKgb,SAAS,CACV0I,cAAe1jB,KAAK2jB,mBAAmB3jB,KAAKyI,MAAM6rD,uBAG9D,CAEO,MAAA55C,GACH,OACI,gBAAKhf,GAAG,+BAA+B6U,UAAU,qBAAoB,UACjE,gBAAKA,UAAU,iCAAgC,UAC3C,SAAC,KAAQ,CACLnT,KAAM,GAAG4C,KAAKyI,MAAMse,8BACpBlI,UAAU,6BACVuE,UAAWpjB,KAAKyI,MAAM2a,UACtBlB,YAAaliB,KAAKyI,MAAMyZ,YAAW,SAElCliB,KAAKsa,MAAMoJ,cAAcnoB,KAAK2oB,GAASA,SAK5D,EC3EG,MAAMqwC,GAAwC,KAE7C,gBAAKhkD,UAAU,8FAA6F,UACxG,eAAIA,UAAU,wBAAuB,UACjC,UAAC,KAAQ,CACLnT,KAAK,gCACLyhB,UAAU,6BACVuE,UAAU,qBACVlB,aAAa,EAAK,WAElB,eACI3R,UAAU,6CAA4C,UAGtD,iBAAKA,UAAU,sBAAqB,WAChC,gBAAKA,UAAU,wBAAuB,SAAE,SACxC,gBAAKA,UAAU,mCAAkC,yCACjD,cAAG4S,KAAK,QAAQ5S,UAAU,8BAA6B,UACnD,iDANJ,yCAUR,eACIA,UAAU,uEAAsE,UAGhF,gBAAKA,UAAU,sBAAqB,UAChC,SAACs/C,GAAmB,OAHpB,yCAMR,eACIt/C,UAAU,uEAAsE,UAGhF,gBAAKA,UAAU,sBAAqB,UAChC,SAACs/C,GAAmB,OAHpB,yCAMR,eACIt/C,UAAU,uEAAsE,UAGhF,gBAAKA,UAAU,sBAAqB,UAChC,SAACs/C,GAAmB,OAHpB,+CCX5B,GAnB0BpnD,IACtB,MAAM,UAAE2Q,EAAS,mBAAEo7C,EAAkB,qBAAEC,EAAoB,qBAAEC,EAAoB,YAAExyC,GAAgBzZ,EAEnG,OAAOisD,GAAwBF,EAAmB52D,OAAS,GACvD,SAACy2D,GAAmC,CAChCttC,aAAc,KAAmByW,KAAK,KAAYm3B,UAAU5tC,aAC5DsqC,cAAe,KAAmB7zB,KAAK,KAAYm3B,UAAUrD,sBAC7Dl4C,UAAWA,EACXk7C,qBAAsBE,EACtBpxC,UAAW,KAAmBoa,KAAK,KAAYm3B,UAAUvxC,UACzDlB,YAAaA,IAEjBuyC,GACA,SAACnxB,EAAc,CAAC/yB,UAAW,OAC3BmkD,GAAsD,IAA9BF,EAAmB52D,QAC3C,SAAC22D,GAA2B,IAC5B,IAAI,ECnBCK,GAAmC,CAC5CC,WAAY,GACZC,eAAgB,IAGPC,GAA8B,gBAAkDH,IAEhFI,GAAgCvsD,IACzC,MAAMsG,ECXyB,MAC/B,GAAI3E,OAAO6qD,eAAgB,CACL,IAAI79C,gBAAgBhN,OAAO6oB,SAAS4M,QAAtD,MAEMq1B,EAAsB,KAExBA,IACA9qD,OAAO6qD,eAAeJ,WAAaK,GAGvC,MAAM,WAAEL,EAAU,eAAEC,GAAmB1qD,OAAO6qD,eAE9C,MAAO,CAAEJ,aAAYC,iBACzB,CAEA,OAAO,IAAI,EDJGK,IAAyBP,GACvC,OACI,SAACG,GAA4B1rC,SAAQ,CAACta,MAAOA,EAAK,SAC7CtG,EAAM4H,UAEd,E,eErBE,SAAS+kD,KACZ,MAAM1F,GAAY,UACZ2F,GAAS,WACf,IACI,GAAI3F,EAAW,CACX,MAAMv5C,EAAM,sCAAsCu5C,YAAoB2F,IACtE,OAAOjgD,MAAMe,GACRtB,MAAMC,GAAaA,EAASO,SAC5BR,MAAMf,GACCA,GAAQA,EAAKgD,OAAShD,EAAKgD,MAAMlZ,OAAS,EACnCkW,EAAKgD,MAET,KAEV9B,OAAO+D,IACJC,QAAQyB,MAAM1B,GACP,KAEnB,CACA,OAAOhE,QAAQ5Y,QAAQ,GAC3B,CAAE,SACE,OAAO4Y,QAAQ5Y,QAAQ,GAC3B,CACJ,CCoBA,MAAqBm5D,WAAqB,YAOtC,WAAAxmD,CAAYrG,GACR4R,MAAM5R,GAENzI,KAAKu1D,cAAgB,CACjB,CAAC,KAAY7D,gBAAiB,cAC9B,CAAC,KAAYN,aAAc,cAC3B,CAAC,KAAYuD,UAAW,eAG5B30D,KAAKw1D,6BAA+B,cAEpCx1D,KAAKsa,MAAQ,CACTm7C,eAAgB,EAChBC,aAAc11D,KAAKu1D,cAAc,KAAmBI,qBAAqB,IACzEC,cAAe51D,KAAKu1D,cAAc,KAAmBI,qBAAqB,IAC1EE,aAAc,KAAmBF,qBACjC/F,uBAAwB,GACxB4B,WAAYxxD,KAAKyI,MAAM4mD,kBACvBwB,yBAAyB,EACzBD,yBAAyB,EACzB4D,mBAAoB,GACpBC,sBAAsB,EACtBC,sBAAsB,EACtBoB,kCAAmC91D,KAAKyI,MAAM2c,yBAC9C2wC,8BAA+B/1D,KAAKyI,MAAMutD,qBAC1CC,4BAA4B,GAGhCj2D,KAAKk2D,gBAAkBl2D,KAAKk2D,gBAAgB7tD,KAAKrI,MACjDA,KAAKm2D,uBAAyBn2D,KAAKm2D,uBAAuB9tD,KAAKrI,MAC/DA,KAAKo2D,gBAAkBp2D,KAAKo2D,gBAAgB/tD,KAAKrI,MACjDA,KAAKq2D,kBAAoBr2D,KAAKq2D,kBAAkBhuD,KAAKrI,MACrDA,KAAKs2D,eAAiBt2D,KAAKs2D,eAAejuD,KAAKrI,KACnD,CAEQ,wBAAAu2D,GACJ,MAAMC,EAAkBx2D,KAAKsa,MAAMs7C,cAAc/7C,QAAQpO,wBAGzDooD,GAAA,GAAKzxD,IAAIpC,KAAKw1D,6BAA6B37C,QAAS,CAChDhO,MAAO2qD,EAAgB3qD,MACvBhM,EAAG22D,EAAgB32D,EACnB81B,QAAS,QAEjB,CAEQ,yBAAA8gC,CAA0B7rD,EAAU8rD,GACxC,MAAMC,EAAqB/rD,EAAIiP,QAAQpO,wBACjCmrD,EAAyB52D,KAAKsa,MAAMo7C,aAAa77C,QAAQpO,wBACzDorD,EAAuB72D,KAAKw1D,6BAA6B37C,QAE3DzP,OAAO8B,WAAa,OACpBlM,KAAK82D,eAAiB,IAAI,MAAY,CAClCC,QAAS,KACL/2D,KAAKgb,SAAS,CACVi7C,4BAA4B,GAC9B,EAENe,WAAY,KACRh3D,KAAKgb,SACD,CACIi7C,4BAA4B,IAEhC,KACI,MAAS7zD,IAAIy0D,EAAsB,CAAElhC,QAAS,QAAS,GAE9D,IAKT31B,KAAK82D,eAAe10D,IAAIy0D,EAAsB,CAC1ChrD,MAAO+qD,EAAuB/qD,MAC9BhM,EAAG+2D,EAAuB/2D,EAC1B81B,QAAS,UAGT31B,KAAKsa,MAAMu7C,aAAa/wD,QAAQ4xD,GAAa12D,KAAKsa,MAAMm7C,gBAIxDz1D,KAAK82D,eAAezwC,GAAGwwC,EAAsB,IAAM,CAC/ChrD,MAAO+qD,EAAuB/qD,MAAQ8qD,EAAmB9qD,MACzDya,KAAM,iBAIVtmB,KAAK82D,eAAezwC,GAChBwwC,EACA,IACA,CACIhrD,MAAO8qD,EAAmB9qD,MAC1BhM,EAAG82D,EAAmB92D,EACtBymB,KAAM,gBAEV,YAMJtmB,KAAK82D,eAAezwC,GAAGwwC,EAAsB,IAAM,CAC/ChrD,MAAO+qD,EAAuB/qD,MAAQ8qD,EAAmB9qD,MACzDhM,EAAG82D,EAAmB92D,EACtBymB,KAAM,iBAIVtmB,KAAK82D,eAAezwC,GAChBwwC,EACA,IACA,CACIhrD,MAAO8qD,EAAmB9qD,MAC1Bya,KAAM,gBAEV,WAKRtmB,KAAK82D,eAAe10D,IAAI,CAAC,EAAG,CAAC,EAAG,IAExC,CAEQ,cAAAk0D,CAAej7C,EAAe47C,EAAsB9kD,GACxD,IAAI+kD,EAAkBl3D,KAAKsa,MAAMu7C,aAAa/wD,QAAQmyD,GAClDE,GAAgB,EACpB,MAAMC,EAAuC,IAApBF,EACnBG,EAAiBH,IAAoBl3D,KAAKsa,MAAMu7C,aAAaj4D,OAAS,EAE5E,OAAQuU,EAAMpJ,KACV,IAAK,aACDouD,EAAeE,EAAiB,IAAMH,EACtC,MACJ,IAAK,YACDC,EAAeC,EAAmBp3D,KAAKsa,MAAMu7C,aAAaj4D,OAAS,IAAMs5D,EAKjF,IAAsB,IAAlBC,EAAqB,CACrB,MAAMT,EAAY12D,KAAKsa,MAAMu7C,aAAasB,GACpCG,EAAat3D,KAAKu1D,cAAcmB,GAEtC12D,KAAKk2D,gBAAgB76C,EAAOq7C,EAAWY,GACvCA,EAAWz9C,QAAQiE,OACvB,CACJ,CAEQ,eAAAo4C,CAAgB76C,EAAeq7C,EAAmBY,GACtD,MAAMvR,EAAgB,CAClB0P,eAAgBz1D,KAAKsa,MAAMu7C,aAAa/wD,QAAQ4xD,GAChDhB,aAAc4B,GAGlBt3D,KAAKy2D,0BAA0Ba,EAAYZ,GAE3C12D,KAAKgb,SAAS+qC,GAAU,KAChB2Q,IAAc,KAAY/B,UAAa30D,KAAKsa,MAAMo6C,qBAE3CgC,IAAc,KAAYtF,aAAgBpxD,KAAKsa,MAAMs2C,yBAC5D5wD,KAAKm2D,yBAFLn2D,KAAKo2D,iBAGT,IAGJ,MAAMvrC,EAA4B,CAC9B1Y,MAAO,KAAoB2Y,OAAOC,MAAMS,IACxCP,YAAa,CACT7tB,KAAMie,EAAMk8C,YACZjlD,SAAU,aAIlBsgB,EAAA,GAAoB/H,EACxB,CAEQ,sBAAAsrC,GACJn2D,KAAKgb,SAAS,CAAE61C,yBAAyB,IAAQ,KAC7CzB,IACKoI,IACGx3D,KAAKgb,SAAS,CACV61C,yBAAyB,EACzBD,yBAAyB,EACzBhB,uBAAwB4H,GAC1B,GAENx3D,KAAKyI,MAAM2c,yBACXplB,KAAKyI,MAAM4mD,kBACd,GAET,CAEQ,eAAA+G,GACJp2D,KAAKgb,SAAS,CAAEy5C,sBAAsB,IAAQn/C,UAC1C,MAAMg/C,QAA6Bc,KAC7BrP,EAAgB,CAClB0O,sBAAsB,EACtBC,sBAAsB,GAEtBJ,EAAqB12D,OAAS,IAC9BmoD,EAASyO,mBAAqBF,GAElCt0D,KAAKgb,SAAS+qC,EAAS,GAE/B,CAEQ,iBAAAsQ,CAAkBoB,GACtB,MAAMC,EAAoC,GAC1C13D,KAAKsa,MAAMk3C,WAAWxtD,SAASupD,IACvBA,EAASt3C,cAAgBwhD,EAAaxhD,aAGtCyhD,EAAkBpqD,KAAKigD,EAC3B,KAGJ,QAAoCkK,GACpCz3D,KAAKgb,SAAS,CAAEw2C,WAAYkG,IAAqB,KAC7C13D,KAAKyI,MAAMqoD,eAAe,oCAAoC,GAEtE,CAEO,iBAAAlvC,GACH/P,YAAW,WACP,MAAMgZ,EAA4B,CAC9B1Y,MAAO,KAAoB2Y,OAAOmjC,KAAKC,MACvChI,UAAW,CACPA,UAAW,8BAGnBtzB,EAAA,GAAoB/H,EACxB,GAAG,KAAoBsjC,sBAEvBnuD,KAAKu2D,0BACT,CAEO,kBAAAvzC,CAAmBC,EAA+B+B,GAEjDhlB,KAAKyI,MAAM2c,yBAAyBxnB,QACpConB,EAAU8wC,oCAAsC91D,KAAKsa,MAAMw7C,mCAE3D91D,KAAKgb,SAAS,CACV86C,kCAAmC7yC,EAAUmC,2BAIjDplB,KAAKyI,MAAMutD,qBAAqBp4D,QAChConB,EAAU+wC,gCAAkC/1D,KAAKsa,MAAMy7C,+BAEvD/1D,KAAKgb,SAAS,CACV+6C,8BAA+B9yC,EAAU+yC,sBAGrD,CAEQ,aAAA2B,GACJ,MAAMC,EAAmC,GA8CzC,OA5CA53D,KAAKsa,MAAMu7C,aAAa7xD,SAAQ,CAAC6zD,EAAelqD,KAC5C,MAAMmqD,EAAS93D,KAAKu1D,cAAcsC,GAC9Bx8C,EAAQ,KAAmBmiB,KAAKq6B,GAAOx8C,MACvCoM,EAAO,KAAmB+V,KAAKq6B,GAAOE,cACtCC,EAAch4D,KAAKsa,MAAMm7C,iBAAmBz1D,KAAKsa,MAAMu7C,aAAa/wD,QAAQ+yD,GAC5EI,EAAc,KAAmBz6B,KAAKq6B,GAAOI,YAC7CC,EAAa,KAAmB16B,KAAKq6B,GAAOM,kBAC5C/0C,EAAY,KAAmBoa,KAAKq6B,GAAOz0C,UAE/Cw0C,EAAWtqD,MACP,oBAEI1C,IAAKktD,EACLvnD,UAAW,IAAW,qBAAsB,CACxC,cAAeynD,IAEnBr4B,KAAK,MACLnc,SAAUw0C,EAAc,GAAK,EAAC,aAClB50C,EAAS,gBACN40C,EAAc,OAAS,QAAO,gBAC9BE,EACfx8D,GAAIu8D,EACJvlC,QAAU52B,IACNkE,KAAKk2D,gBAAgB76C,EAAOw8C,EAAOC,EAAO,EAE9CM,UAAYC,IACRr4D,KAAKs2D,eAAej7C,EAAOw8C,EAAOQ,EAAc,EACnD,WAED,iBAAM9nD,UAAU,eAAc,UAC1B,kBAAMA,UAAU,kBAAiB,WAC7B,iBAAMA,UAAU,yCAAwC,SAAEkX,IACzDpM,QAGT,iBACI9K,UAAW,IAAW,gBAAiB,CACnC,wBAAyBynD,QA1B5BrqD,GA8BZ,KAID,gBAAK4C,UAAU,8CAA6C,UACxD,iBAAKA,UAAU,aAAaovB,KAAK,UAAS,aAAa,KAAmB,WACtE,gBACI/0B,IAAK5K,KAAKw1D,6BACVjlD,UAAU,mDAEbqnD,EAAWr8D,KAAK+8D,GAAQA,QAIzC,CAEQ,eAAAC,GACJ,MAAMC,EAKF,CACAj7B,OAAQ,CAAC,KAAYm0B,eAAgB,KAAYiD,SAAU,KAAYvD,aACvE5zB,KAAM,CACF,CAAC,KAAYk0B,gBAAiB,CAC1Bh3C,OAAQ,KACJ,SAAC,GAAsB,CACnBo2C,eAAgB9wD,KAAKyI,MAAMqoD,eAC3B13C,UACIpZ,KAAKsa,MAAMm7C,iBACXz1D,KAAKsa,MAAMu7C,aAAa/wD,QAAQ,KAAY4sD,gBAEhDrC,kBAAmB,IAAIrvD,KAAKsa,MAAMk3C,cAAexxD,KAAKsa,MAAMy7C,+BAC5DrxC,mCAAoC1kB,KAAKyI,MAAMic,mCAC/CH,mBAAoBvkB,KAAKq2D,qBAIrC,CAAC,KAAY1B,UAAW,CACpBj6C,OAAQ,KACJ,SAAC,GAAgB,CACbtB,UACIpZ,KAAKsa,MAAMm7C,iBAAmBz1D,KAAKsa,MAAMu7C,aAAa/wD,QAAQ,KAAY6vD,UAE9EH,mBAAoBx0D,KAAKsa,MAAMk6C,mBAC/BC,qBAAsBz0D,KAAKsa,MAAMm6C,qBACjCC,qBAAsB10D,KAAKsa,MAAMo6C,qBACjCxyC,aAAa,KAIzB,CAAC,KAAYkvC,aAAc,CACvB12C,OAAQ,KACJ,SAAC,GAAmB,CAChBk2C,wBAAyB5wD,KAAKsa,MAAMs2C,wBACpChB,uBAAwB5vD,KAAKsa,MAAMs1C,uBACnCx2C,UACIpZ,KAAKsa,MAAMm7C,iBAAmBz1D,KAAKsa,MAAMu7C,aAAa/wD,QAAQ,KAAYssD,aAE9EhsC,yBAA0BplB,KAAKyI,MAAM2c,yBACrCyrC,wBAAyB7wD,KAAKsa,MAAMu2C,wBACpCnsC,mCAAoC1kB,KAAKyI,MAAMic,mCAC/CosC,eAAgB9wD,KAAKyI,MAAMqoD,oBAO/C,OAAO0H,EAAUj7B,OAAOhiC,KAAKk9D,IACzB,gBAEIloD,UAAW,IAAW,iBAAkB,CACpCs6B,OAAQ7qC,KAAKsa,MAAMm7C,iBAAmBz1D,KAAKsa,MAAMu7C,aAAa/wD,QAAQ2zD,GACtE1Z,SAAU/+C,KAAKsa,MAAMm7C,iBAAmBz1D,KAAKsa,MAAMu7C,aAAa/wD,QAAQ2zD,MAE5E/8D,GAAI,KAAmB8hC,KAAKi7B,GAASN,kBACrCx4B,KAAK,WAAU,kBACE,KAAmBnC,KAAKi7B,GAASR,YAAW,aACjD,KAAmBz6B,KAAKi7B,GAASr1C,UAAS,SAErDo1C,EAAUh7B,KAAKi7B,GAAS/9C,UAVpB+9C,IAajB,CAEO,MAAA/9C,GACH,OACI,iBAAKnK,UAAU,iEAAgE,UAC1EvQ,KAAK23D,gBACL33D,KAAKu4D,oBAGlB,EA5YO,GAAAvxC,YAA+C+tC,G,YCpC3C,SAAS2D,GAA4BjwD,GAChD,MAAM,QAAE0b,GAAY1b,EAAMsmD,cAEpB4J,EAAe,GAAGx0C,EAAQ7lB,QAAQ6lB,EAAQC,QAAQD,EAAQE,SAC3C,OAAjBF,EAAQG,KAAgB,GAAKH,EAAQG,OAEnCmK,EAAU,GAAGvwB,KAAKQ,KAAKylB,EAAQsK,QAAU,QAE/C,OACI,qBACIjnB,GAAG,QAAO,gBACI,QACdq9B,QAAQ,OACRnpC,GAAG,uBACHoiC,MAAM,kBAAiB,aACZ,sCAAqC,UAEhD,mBAAOvtB,UAAU,iCAAgC,aAAa,+BAA8B,WACxF,gBAAKA,UAAU,sCAAqC,UAChD,cACIA,UAAU,8BACV4S,KAAM,QAAQgB,EAAQlO,cACtBib,MAAOynC,EAAY,UAEnB,gBACIt8B,IAAI,GACJ9rB,UAAU,6CACV+rB,IAAK,kCAAkCnY,EAAQlO,mDAI3D,iBAAK1F,UAAU,wBAAuB,aAAY,WAAU,WACxD,eAAG4S,KAAM,QAAQgB,EAAQlO,cAAeib,MAAOynC,EAAY,WACvD,oBAAQpoD,UAAU,0BAAyB,WACvC,sBAAW8K,MAAM,WAAW2B,KAAK,WAAW8gB,MAAM,yBAAyB86B,SAAO,YAC9E,gBACIC,KAAK,eACLpoD,MAAO,CAAEqoD,WAAY,OAAQC,aAAc,MAAOntD,OAAQ,MAAOC,MAAO,YAGhF,eACInQ,GAAG,2BACH6U,UAAU,2BAA0B,aACxBooD,EACZznC,MAAOynC,EAAY,UAvDjCK,EAyDwBL,GAxDlCK,aAAK,EAALA,EAAOp7D,QAwDyC,GAvDzC,GAAGo7D,EAAMt2D,MAAM,EAuD0B,OArD7Cs2D,SAwDa,iBAAKzoD,UAAU,2BAA0B,WACrC,iBAAKA,UAAU,yBAAwB,aAAY,QAAO,WACtD,iBAAMA,UAAU,+BAA8B,eAAS,KAEvD,iBAAMA,UAAU,gCAA+B,SAC1C4T,EAAQ80C,UAAUC,oBAEvB,oCAEJ,gBAAK3oD,UAAU,oCAAmC,gBAClD,iBAAKA,UAAU,qCAAoC,aAAY,WAAU,WACrE,iBAAMA,UAAU,4CAA2C,SAAEke,IAAe,KAE5E,iBAAMle,UAAU,2CAA0C,0BAItE,uBACI7U,GAAG,+BACHoiC,MAAM,uBACN3a,KAAM,wCAAwCgB,EAAQlO,cACtDqoC,QAAQ,YAAW,sDAjF1B,IAAC0a,CA0FlB,C,eC7De,MAAM,WAAiB,YAClC,WAAAlqD,CAAYrG,GACR4R,MAAM5R,GAENzI,KAAKsa,MAAQ,CACT3M,MAAO,EACP6P,QAAS,EACT+D,WAAY,EACZC,gBAAgB,EAChBC,gBAAgB,GAGpBzhB,KAAK0hB,mBAAqB1hB,KAAK0hB,mBAAmBrZ,KAAKrI,MACvDA,KAAK2hB,eAAiB3hB,KAAK2hB,eAAetZ,KAAKrI,KACnD,CAKO,iBAAA4hB,GAEH,GADA5hB,KAAK2hB,eAAe3hB,KAAKyI,MAAMrL,KAAM4C,KAAKyI,MAAMoW,WAC5C7e,KAAK6hB,YAAa,CAClB,MAAMC,EAAa9hB,KAAK6hB,YAAY5B,UACpCjgB,KAAKgb,SAAS,CACVrN,MAAOmU,EAAWnU,MAClB6P,QAASsE,EAAWtE,QACpB+D,WAAYO,EAAWP,YAE/B,CACJ,CAEO,oBAAAQ,GACC/hB,KAAK6hB,aAAa7hB,KAAK6hB,YAAYG,UACnChiB,KAAKiiB,sBAAsBjiB,KAAKiiB,sBACxC,CAEQ,cAAAN,CAAevkB,EAAcyhB,GACjC,MAAM,SAAExO,GAAarQ,KAAKyI,OACpB,WAAEkV,EAAU,oBAAE0D,IAAwB,OAAa,CACrDxC,UAAWA,EACXqB,UAAW,IAAI9iB,oBACfqjB,WAAW,EACXI,WAAY,IAAIzjB,mBAChB0jB,WAAY,IAAI1jB,mBAChB0hB,UAAW,QAAQ1hB,aACnBujB,OA/Ce,EAgDfnD,QAAS,OACT1G,MAlDe,EAmDfiK,WAAY,CACR,CAAC,OAAkB,CAAC,EACpB,CAAC,OAAmB,CAChBC,QAAQ,EACRL,OAAQ,IAEZ,EAAG,CACCK,OAAQ3Q,EAASzS,OAAS,IAAMoC,KAAKyI,MAAMyZ,gBAKvDliB,KAAK6hB,YAAclE,EACnB3d,KAAKiiB,qBAAuBZ,EACxBrhB,KAAK6hB,aACL7hB,KAAK6hB,YAAYM,OAAOnS,GAAG,eAAgBhQ,KAAK0hB,mBAExD,CAEQ,kBAAAA,CAAmBU,GACvBpiB,KAAKgb,SAAS,CAAErN,MAAOyU,EAAKzU,MAAO6P,QAAS4E,EAAK5E,QAAS+D,WAAYa,EAAKb,YAC/E,CAEQ,kBAAAc,CAAmBC,GACvB,MAAMC,EAAwBviB,KAAKsa,MAAM3M,MAAQ,EAC3C6U,EAAoBF,EAAWvQ,GAAGtG,wBAaxCzL,KAAKgb,SAAS,CACVwG,kBARJ,WACI,MACMiB,EACFD,EAAkB3iB,EAAI2iB,EAAkB3W,MAAQ,GACpD,OAAO2W,EAAkB3iB,EAAIuK,OAAO8B,YAAcuW,EAAwCrY,OAAO8B,UACrG,CAGoBwW,KAAwBJ,EAAWK,qBACnDlB,kBAZOa,EAAWM,gBAAkBN,EAAWO,YAAcN,GAYpBD,EAAWQ,sBAE5D,CAEQ,kBAAAC,IAC8B,IAA9B/iB,KAAKsa,MAAMkH,iBAAyD,IAA9BxhB,KAAKsa,MAAMmH,gBACjDzhB,KAAKgb,SAAS,CACVwG,gBAAgB,EAChBC,gBAAgB,GAG5B,CAEA,kBAAAuB,CAAmBC,GACXjjB,KAAK6hB,aAAe7hB,KAAKyI,MAAM4H,SAASzS,SAAWqlB,EAAU5S,SAASzS,QACtEoC,KAAK6hB,YAAYqB,SAEzB,CAEO,MAAAxI,GACH,MAAM,SAAErK,EAAQ,KAAEjT,EAAI,UAAEyhB,GAAc7e,KAAKyI,OACrC,eAAE+Y,EAAc,eAAEC,GAAmBzhB,KAAKsa,MAEhD,OACI,iCACI,cAAG5e,GAAI,OAAO0B,aAAiBmT,UAAU,YAAY4S,KAAMtE,EAAS,SAC/D,QAAQ7e,KAAKyI,MAAM2a,UAAYpjB,KAAKyI,MAAM2a,UAAYhmB,EAAK6B,QAAQ,KAAM,mBAE9E,gBACIsR,UAAW,IAAW,yBAA0B,CAC5C,WAAgBkR,GAAkBD,IACpC,UAEF,gBACI9lB,GAAI,GAAG0B,oBAAsB,uBACP,WAAeud,MAAMtK,GAC3CE,UAAW,IAAW,mBAAoB,CACtC,4BAA+BF,EAASzS,OAAS,IACnD,SAED,WAAerC,IAAI8U,GAAU,CAACgT,EAAyB1V,KACpD,gBACI4C,UAAU,kBAAiB,wBACJvQ,KAAKsa,MAAM3M,QAAUA,EAE5C2V,aAAenR,GACXnS,KAAKqiB,mBAAmB,CACpBO,gBAAgB,EAChBD,qBAAqB,EACrBG,qBAAqB,EACrBD,WAAYlV,EACZoE,GAAII,EAAM3J,SAGlB+a,aAAc,IAAMvjB,KAAK+iB,qBAAoB,SAE5CM,GAZI,GAAG1V,kBAkBxB,oBACIjS,GAAI,GAAG0B,mBACPmT,UAAW,IAAW,4CAA6C,CAC/D,gCAAiCkR,IAErC6B,aAAenR,GACXnS,KAAKqiB,mBAAmB,CACpBO,gBAAgB,EAChBD,qBAAqB,EACrBG,qBAAqB,EACrBD,WAAY7iB,KAAKsa,MAAM3M,MACvBoE,GAAII,EAAM3J,SAGlB+a,aAAc,IAAMvjB,KAAK+iB,qBACzBS,UAAW,EAAC,WAEZ,iBAAMjT,UAAU,kBAAiB,6BACjC,iBAAKoM,QAAQ,YAAYC,MAAM,6BAA4B,cAAa,OAAM,WAC1E,iBAAM7f,EAAE,wDACR,iBAAMA,EAAE,iBAAiB8f,KAAK,gBAGtC,oBACInhB,GAAI,GAAG0B,mBACPmT,UAAW,IAAW,4CAA6C,CAC/D,gCAAiCiR,IAErC8B,aAAenR,GACXnS,KAAKqiB,mBAAmB,CACpBO,gBAAgB,EAChBD,qBAAqB,EACrBG,qBAAqB,EACrBD,WAAY7iB,KAAKsa,MAAM3M,MACvBoE,GAAII,EAAM3J,SAGlB+a,aAAc,IAAMvjB,KAAK+iB,qBACzBS,UAAW,EAAC,WAEZ,iBAAMjT,UAAU,kBAAiB,yBACjC,iBAAKoM,QAAQ,YAAYC,MAAM,6BAA4B,cAAa,OAAM,WAC1E,iBAAM7f,EAAE,sDACR,iBAAMA,EAAE,kBAAkB8f,KAAK,iBAKnD,ECrOG,MAAM,GAAgC,KAErC,gBAAKtM,UAAU,wBAAuB,UAClC,iBACIqM,MAAM,6BACNkzC,WAAW,+BACXjkD,MAAM,MACND,OAAO,MACP+Q,QAAQ,cAAa,cACT,OAAM,WAElB,2BACI,4BACIozC,GAAG,UACHC,GAAG,OACHC,GAAG,UACHC,GAAG,OACHC,kBAAkB,uCAClBC,cAAc,iBAAgB,WAE9B,iBAAMvrD,OAAO,IAAIwrD,UAAU,UAAUC,YAAY,UACjD,iBAAMzrD,OAAO,IAAIwrD,UAAU,UAAUC,YAAY,eAGzD,6BACc,uCACVvzD,EAAE,kBACFwvB,SAAS,UACTgkC,YAAa,KAEjB,iBACI1wD,EAAE,KACF3C,EAAE,MACF2O,MAAM,MACND,OAAO,KACP4kD,GAAG,IACH3zC,KAAK,UACL4zC,QAAQ,OACRhgD,MAAO,CAAEigD,UAAW,cAExB,iBACI3zD,EAAE,gDACF8f,KAAK,UACL4zC,QAAQ,OACRhgD,MAAO,CAAEigD,UAAW,cAExB,iBACI3zD,EAAE,iDACF8f,KAAK,UACL4zC,QAAQ,OACRhgD,MAAO,CAAEigD,UAAW,cAExB,iBACI3zD,EAAE,gDACF8f,KAAK,UACL4zC,QAAQ,OACRhgD,MAAO,CAAEigD,UAAW,cAExB,iBAAM7kD,MAAM,MAAMD,OAAO,MAAMiR,KAAK,UAAU4zC,QAAQ,OAAOhgD,MAAO,CAAEigD,UAAW,kBClDpFyI,GAAsB,EAAGpyC,eAAcqyC,WAAUC,iBAEtD,gBAAK9oD,UAAU,kCAAiC,UAC5C,eAAIA,UAAU,iCAAgC,UAC1C,UAAC,GAAY,CACTnT,KAAM2pB,EACNlI,UAAU,6BACVuE,UAAU,+BAA8B,WAExC,eAAI7S,UAAU,6CAA4C,UACtD,iBAAKA,UAAU,sBAAqB,WAChC,gBAAKA,UAAU,wBAAuB,SAAE,SACxC,gBAAKA,UAAU,6DAA4D,SAAE6oD,KAC7E,cAAGj2C,KAAK,QAAQ5S,UAAU,6DAA4D,SACjF8oD,QALmD,GAAGtyC,YASlElpB,MAAMqsB,KAAK,CAAEtsB,OAAQ,IAAK,CAACwB,EAAGuO,KAC3B,eACI4C,UAAU,uEAAsE,UAGhF,gBAAKA,UAAU,sBAAqB,UAChC,SAAC,GAAmB,OAHnB,GAAGwW,UAAqBpZ,EAAQ,c,+CChBjE,MAWM2rD,GAAO,EAAGt/B,SAAQ9I,QAAOqoC,WAAUp2C,WACrC,eAAGuP,QAAU52B,GAZG,EAACA,EAAeo1B,EAAe/N,MAC/C,QAAiB,CACbq2C,WAAY19D,EACZ29D,aAAc,KAAoB3uC,OAAOC,MAAM6U,iBAC/C1O,QACA5e,SAAU,oBACV6Q,OACAu2C,KAAM,YACR,EAI6B5G,CAAYh3D,EAAGo1B,EAAO/N,GAAO5S,UAAU,8BAA8B4S,KAAMA,EAAI,WAC1G,iBAAK5S,UAAU,sCAAqC,WAChD,gBAAK+rB,IAAK,uDAAuDtC,IAAUqC,IAAKnL,KAChF,4BACI,iBAAM3gB,UAAU,oCAAmC,SAAE2gB,KACrD,0BAAOqoC,UAGd,IAAMI,kBAIFC,GAAgC,KACzC,MAAOC,EAAgBC,IAAqB,IAAAr9C,UAAS,IAC9Cs9C,EAAsBC,IAA2B,IAAAv9C,UAAS,IAC1Dw9C,EAAmBC,IAAwB,IAAAz9C,UAAS,IACpD09C,EAAeC,IAAoB,IAAA39C,UAAS,IAC7C,QAAE9F,IAAY,UAuCpB,OArCA,IAAAiD,YAAU,KACN,WACI,MAAMygD,EAAqB,CAAE1jD,UAASE,cAAe,UA+B/C9B,QAAQqB,IAAI,CALDd,WACb,MAAMqC,QAAmB,QAAsB,CAAC,GAChDyiD,EAAiBziD,EAAW,EAGb2iD,GA7BIhlD,WACnB,MAAMqC,QAAmB,QAAsB,OAAD,wBACvC0iD,GAAkB,CACrBrjD,eAAe,KAEnB8iD,EAAkBniD,EAAW,EAwBF4iD,GArBFjlD,WACzB,MAAMqC,QAAmB,QAAsB,OAAD,wBACvC0iD,GAAkB,CACrBpjD,cAAc,KAElB+iD,EAAwBriD,EAAW,EAgBU6iD,GAbvBllD,WACtB,MAAMqC,QAAmB,QAAsB,OAAD,wBACvC0iD,GAAkB,CACrBnjD,iBAAiB,KAErBgjD,EAAqBviD,EAAW,EAQqC8iD,IAC5E,EAjCD,EAiCI,GACL,CAAC9jD,KAGA,oBAASpG,UAAU,iBAAgB,UAC/B,gBAAKA,UAAU,kBAAiB,UAC5B,gBAAKA,UAAU,sBAAqB,UAChC,iBAAKA,UAAU,wBAAuB,UACjCspD,EAAiB,IACd,SAACP,GAAI,CACDt/B,OAAO,QACP9I,MAAM,mBACNqoC,SAAU,GAAGM,YACb12C,KAAK,uCAGZ42C,EAAuB,IACpB,SAACT,GAAI,CACDt/B,OAAO,QACP9I,MAAM,oBACNqoC,SAAU,GAAGQ,YACb52C,KAAK,0CAGZ82C,EAAoB,IACjB,SAACX,GAAI,CACDt/B,OAAO,QACP9I,MAAM,gBACNqoC,SAAU,GAAGU,YACb92C,KAAK,sCAGZg3C,EAAgB,IACb,SAACb,GAAI,CACDt/B,OAAO,QACP9I,MAAM,gBACNqoC,SAAU,IAAG,EAAAn2D,GAAA,GAAuB+2D,aACpCh3C,KAAK,sBAOhC,EC/FQu3C,GAAmB,EAC5Bx2B,aAAY,EACZy2B,aACAzpC,QACA5gB,cACAsqD,eACAh2C,iBACAi2C,kBACAC,WACAj8C,YACAk8C,mBACAp2C,cACAq2C,8BAEA,MAAM,QAAEj2C,EAAO,oBAAE2G,EAAmB,WAAE5C,IAAe,UAE/CmyC,GAAoC,SAA8BL,GAElEM,EAAeN,aAAY,EAAZA,EAAch9D,OAE7Bu9D,EAAuBP,aAAY,EAAZA,EAAc32C,QAAQC,GAAuBA,EAAK5M,aAAY1Z,OAErFw9D,GAAe,IAAA7xB,cAChBplB,IACG,MAAMxK,EAASihD,EAAarwC,MAAMxsB,GAAMA,EAAEkY,cAAgBkO,EAAQlO,cAC9D0D,GACAmhD,GAAYA,EAASnhD,EACzB,GAEJ,CAACmhD,EAAUF,IAiDf,OARA,IAAAhhD,YAAU,KACN8R,GAAqB,GACtB,CAACA,KAEJ,IAAA9R,YAAU,KACNkP,EAAW8xC,EAAar/D,KAAI,EAAG0a,iBAA2CA,IAAa,GACxF,CAAC6S,EAAY8xC,IAEZ12B,GACO,SAACZ,EAAc,CAAC/yB,UAAU,qBAIjC,+BACI,gBACI7U,GAAIi/D,EACJpqD,UAAU,sBAAqB,qBACX2qD,EAAY,8BACHC,EAAoB,UAEjD,iBAAK5qD,UAAW,mBAAkBwqD,EAAmB,qBAAuB,IAAI,UAC3E7pC,IAAS,eAAI3gB,UAAU,kBAAiB,SAAE2gB,IACzB,IAAjBgqC,IACG,SAAC/B,GAAmB,CAChBpyC,aAAc4zC,EACdvB,SAAU9oD,aAAW,EAAXA,EAAa8oD,SACvBC,WAAY/oD,aAAW,EAAXA,EAAa+oD,cAIjC,SAAC,GAAY,CACTj8D,KAAMu9D,EACNz4C,aAAa,EACbrD,UAAW,IAAIA,IACfuE,UAAWu3C,EAAU,SAxEd,MACvB,MAAM7jD,EAAQmkD,EACTh3C,QAAQC,GAAkB,OAATA,GAAiBipB,QAAQjpB,KAC1C3oB,KAAI,CAAC4oB,EAAuBxW,KACzB,MAAM,YAAEsI,GAA8BkO,EACtC,OACI,gBAAK5T,UAAU,kBAAiB,UAC5B,gBAAKA,UAAU,sBAAqB,UAChC,SAACohB,GAAA,EAAc,CACXxN,QAASA,EACTI,mBAAoB62C,EACpB52C,eAAcq2C,EACdp2C,+BACI,EAEJE,YAAcuM,GAAQvM,OATI,GAAG1O,WAAqBtI,IAajE,IAgBT,OAbIiX,GACA9N,EAAMxJ,MACF,SAAC4e,GAAA,EAAoB,CACjBrH,SAAUo2C,EAAkBr9D,OAAS,EAAI,6BAA+B,mBACxEknB,WAAYC,GAAWA,EAAQnnB,OAAS,KAKhDo9D,GACAlkD,EAAMxJ,MAAK,SAACssD,GAAmB,GAAK,0BAGjC9iD,CAAK,EAuCK6M,WAKpB,E,eCvIE,MAAM03C,IAAc,IAAA3yC,eAA6B,CACpD4yC,YAAa,GACbp3B,WAAW,EACXx5B,eAAW4E,IAMFisD,IAAe,UAAQn5D,IAAa,CAC7Ck5D,YAAa,GACbp3B,WAAW,EACXx5B,eAAW4E,EACXksD,iBAAkB,EAAGF,cAAa5wD,YAAWw5B,YAAWu3B,oBACpDr5D,EAAI,CACA8hC,YACAo3B,YAAaA,EACb5wD,UAAWA,EACX+wD,eAAgBA,IAExBA,eAAgB,KAChB1P,gBAAiB,SAWrB3hD,OAAOsxD,eAAiBH,IAAgB,CAAC,EC7BzC,MA4CA,GA5CkB,KACd,MAAM,eAAEE,EAAc,UAAEv3B,GAAcq3B,MAC/BI,EAAMC,IAAW,IAAAn/C,UAAyB,KAEjD,IAAA7C,YAAU,KACNgiD,EAAWH,EAAyCI,gBAAkB,GAAsB,GAC7F,CAACJ,IAEJ,MAAMX,GAAW,IAAAvxB,cACZplB,IACG,MAAM,YAAElO,GAAgBkO,EAElB23C,EAAaH,EAAwB13C,QAAQlmB,GAAMA,EAAEkY,cAAgBA,IACrE8lD,EAAgBJ,EAAwBpxC,MAAMxsB,GAAMA,EAAEkY,cAAgBA,IAE5E2lD,EAAQE,GACJC,IACA,QAAoCA,EACxC,GAEJ,CAACJ,IAGL,OACI,iCACMz3B,GAAay3B,EAAK/9D,OAAS,IACzB,SAAC88D,GAAgB,CACbxpC,MAAM,gBACNypC,WAAW,kBACXC,aAAce,EACdrrD,YAAa,CAAE8oD,SAAU,+BAAgCC,WAAY,mBACrEyB,SAAUA,EACVD,iBAAiB,IAGxB32B,IACG,gBAAKzzB,MAAO,CAAEqM,UAAW,SAAUC,WAAY,SAAS,UACpD,wBAAaC,KAAK,QAAQ3B,MAAM,kBAAkB4B,KAAK,cAItE,ECtBU,MAAM++C,WAAqB,YACtC,WAAAltD,CAAYrG,GACR4R,MAAM5R,GAwCF,KAAAwzD,mBAAsBjqC,IAC1BhyB,KAAKgb,SAAS,CAAEkhD,aAAclqC,IAC9BhyB,KAAKgb,SAAS,CAAEmhD,cAAc,GAAO,EAGjC,KAAAC,mCAAsCjqD,KACtCA,aAAK,EAALA,EAAOiZ,SAAUhhB,OAAOiyD,aAAaC,4BACrCt8D,KAAKgb,SAAS,CAAEuhD,wBAAyBpqD,EAAMiZ,OAAOwf,SAC1D,EA9CA5qC,KAAKsa,MAAQ,CACTixC,YAAY,EACZ4Q,cAAc,EACd/2C,yBAA0B,GAC1BV,mCAAoC,GACpCsxC,qBAAsB,GACtBkG,aAAc,GACdK,yBAAyB,GAG7Bv8D,KAAKw8D,iBAAmBx8D,KAAKw8D,iBAAiBn0D,KAAKrI,MACnDA,KAAKy8D,kBAAoBz8D,KAAKy8D,kBAAkBp0D,KAAKrI,MACrDA,KAAKi8D,mBAAqBj8D,KAAKi8D,mBAAmB5zD,KAAKrI,MACvDA,KAAKo8D,mCAAqCp8D,KAAKo8D,mCAAmC/zD,KAAKrI,KAC3F,CAEQ,wBAAA08D,GACJxxD,SAAS4c,KAAKrO,UAAUhb,IAAI,mBAE5B,MAAM4vD,EAAWnjD,SAASwa,eAAe,UACrC2oC,IACAA,EAAS50C,UAAUE,OAAO,oBAC1B00C,EAAS50C,UAAUhb,IAAI,qBAE/B,CAEQ,gBAAA+9D,GACJx8D,KAAKgb,SAAS,CACVuwC,YAAY,GAEpB,CAEQ,iBAAAkR,GACJz8D,KAAKgb,SAAS,CACVuwC,YAAY,GAEpB,CAaO,iBAAA3pC,GACH1W,SAASC,gBAAgBd,iBACrB,KACArK,KAAKo8D,mCAEb,CAEO,oBAAAr6C,GACH7W,SAASC,gBAAgB8E,oBACrB,KACAjQ,KAAKo8D,mCAEb,CAEO,MAAA1hD,GAEH,OADA1a,KAAK08D,4BAED,iBACIhhE,GAAG,iBAAgB,kBACF,GAAGsE,KAAKyI,MAAMsjD,gCAC/Bx7C,UAAU,iBAAgB,WAE1B,qBAASA,UAAU,mCAAkC,WACjD,mBAAQ+9C,MAAM,qBAAqBC,OAAO,4CAC1C,mBACID,MAAM,+CACNC,OAAO,4CAEX,gBAAKh+C,UAAU,mCAAmC+rB,IAAI,qCAAqCD,IAAI,QAGlGyyB,GAAsB9uD,KAAKyI,MAAMsmD,gBAC9B,SAAC2J,GAA2B,CAAC3J,cAAe/uD,KAAKyI,MAAMsmD,gBACvD/uD,KAAKsa,MAAMiiD,yBACX,SAAC,GAAS,KAEV,SAAC,GAAY,CACTlN,kBAAmBrvD,KAAKyI,MAAM4mD,kBAC9B2G,qBAAsBh2D,KAAKsa,MAAM07C,qBACjC5wC,yBAA0BplB,KAAKsa,MAAM8K,yBACrC0rC,eAAgB9wD,KAAKi8D,mBACrBv3C,mCAAoC1kB,KAAKsa,MAAMoK,sCAIvD,SAACyQ,GAAA,EAAyB,CACtB1N,UAAMnY,EACN2iB,OAAQjyB,KAAKsa,MAAM6hD,aACnBz0C,UAAW1nB,KAAKsa,MAAM4hD,aACtB10C,aAAc,KACVxnB,KAAKgb,SAAS,CAAEmhD,cAAc,GAAQ,MAK1D,E,eCrGJ,MAAqBQ,WAAsB,YAIvC,WAAA7tD,CAAYrG,GACR4R,MAAM5R,GAgDF,KAAAm0D,8BAAgC,KACpC,MAAMC,EAA0BzyD,OAAO80B,aAAa+B,QAAQ,cAG5D,GAF8B47B,IAA2BA,aAAuB,EAAvBA,EAAyBj/D,QAEvD,CACvB,MAAMk/D,EAAiB53C,KAAKjlB,MAAM48D,GAAyBthE,KACtD4oB,GAAqCA,EAAQlO,eAElD,QAAuB6mD,GAAiBC,IACpC/8D,KAAKgb,SAAS,CACVgiD,wBAAwB,EACxBC,wBAAwB,EACxBjH,qBAAsB+G,GACxB,GAEV,MACI/8D,KAAKgb,UAAS,KACVkiD,GAAA,IAAgClnD,KAC5B,QACIA,GACCgO,IACGhkB,KAAKgb,SAAS,CACVoK,yBAA0BpP,EAC1BggD,qBAAsBhyC,GACxB,IAEN,UACH,GACH,GAEV,EAGI,KAAAm5C,+BAAiC,KACrCn9D,KAAKgb,SAAS,CAAEoiD,yBAAyB,IAAQ,MAC7C,QAA8B,MAAmC,WAAcvoD,MAC1EmP,GACGhkB,KAAKgb,SACD,CACIqiD,yBAAyB,EACzBD,yBAAyB,EACzBE,sBAAuBt5C,IAE3B,KACIhkB,KAAKwR,QAAQgX,eAAexE,EAAgB,KAG3D,GACH,EAGE,KAAAu5C,kBAAoB,KACxBv9D,KAAKgb,SAAS,CAAEwiD,6BAA6B,IAAQ,KACjD9O,KAA6B75C,MAAMk6C,GAC/B/uD,KAAKgb,SAAS,CACVyiD,6BAA6B,EAC7BD,6BAA6B,EAC7BzO,cAAeA,KAEtB,GACH,EA1GF/uD,KAAKsa,MAAQ,CACT+iD,yBAAyB,EACzBD,yBAAyB,EACzBM,8BAA8B,EAC9BC,8BAA8B,EAC9BF,6BAA6B,EAC7BD,6BAA6B,EAC7BR,wBAAwB,EACxBC,wBAAwB,EACxBK,sBAAuB,GACvBtH,qBAAsB,GACtB5wC,yBAA0B,GAC1B2pC,cAAe,CAAC,GAGpB/uD,KAAK49D,wBAA0B59D,KAAK49D,wBAAwBv1D,KAAKrI,MACjEA,KAAKm9D,+BAAiCn9D,KAAKm9D,+BAA+B90D,KAAKrI,MAC/EA,KAAKu9D,kBAAoBv9D,KAAKu9D,kBAAkBl1D,KAAKrI,MACrDA,KAAK48D,8BAAgC58D,KAAK48D,8BAA8Bv0D,KAAKrI,KACjF,CAEO,iBAAA4hB,GACH5hB,KAAK49D,0BACL59D,KAAKm9D,iCACLn9D,KAAKu9D,mBACT,CAEO,kBAAAv6C,CACHC,EACA+B,EACA64C,IAEC74C,EAAU04C,8BAAgC19D,KAAKsa,MAAMojD,8BAChD19D,KAAK48D,+BAEf,CAEQ,uBAAAgB,GACJV,GAAA,IAAsC,KAClCl9D,KAAKgb,SAAS,CACV0iD,8BAA8B,EAC9BC,8BAA8B,GAChC,GAEV,CAiEO,MAAAjjD,GACH,MAAM,wBACF2iD,EAAuB,wBACvBD,EAAuB,6BACvBM,EAA4B,6BAC5BC,EAA4B,4BAC5BF,EAA2B,4BAC3BD,EAA2B,sBAC3BF,EAAqB,qBACrBtH,EAAoB,yBACpB5wC,EAAwB,cACxB2pC,GACA/uD,KAAKsa,MAET,GAAI8iD,GAA2BO,GAAgCH,EAC3D,OACI,gBAAKjtD,UAAU,yBAAwB,UACnC,gBAAKE,MAAO,CAAEqM,UAAW,SAAUC,WAAY,SAAS,UACpD,wBAAaC,KAAK,QAAQ3B,MAAM,kBAAkB4B,KAAK,cAKnE,GACIogD,GACAK,GACAD,GACAC,EACF,CACE,G9B5I0B,CAAC3O,IAChCA,aAAa,EAAbA,EAAehjC,UAAW,KAAsB+xC,wB8B2IvCC,CAA2BhP,GAC3B,OAAO,SAACf,GAAa,CAACjC,gBAAiB/rD,KAAKyI,MAAMsjD,kBAGtD,GACIuR,EAAsB1/D,OAAS,GAC/Bo4D,EAAqBp4D,OAAS,GAC9BkxD,GAAsBC,GAEtB,OACI,SAACiN,GAAY,CACTjQ,gBAAiB/rD,KAAKyI,MAAMsjD,gBAC5BsD,kBAAmBiO,EACnBl4C,yBAA0BA,EAC1B4wC,qBAAsBA,EACtBjH,cAAeA,GAI/B,CACA,OAAO,SAACf,GAAa,CAACjC,gBAAiB/rD,KAAKyI,MAAMsjD,iBAE1D,EAtKO,GAAA/kC,YAA+CyB,EAAA,E,YCzB1D,IAAYu1C,IAAZ,SAAYA,GACR,sBACA,sBACA,uBACH,CAJD,CAAYA,KAAAA,GAAK,KCJjB,MASMC,GAAkB,CAACpC,EAAgCqC,KACrD,IAAIC,EAA8B,GAUlC,OARID,EAAiBtgE,QAAUsgE,IAC3BC,EAAcA,EAAYp5D,OAAOm5D,IAGjCrC,EAAej+D,QAAUi+D,IACzBsC,EAAcA,EAAYp5D,OAAO82D,IAjBlB,CAACuC,IACpB,MAAMzlD,EAAeylD,EAAc7iE,KAAKwC,GAAMA,EAAEkY,cAKhD,OAHiBmoD,EAAcn6C,QAC3B,CAAClmB,EAAG4P,KAAWgL,EAAaiH,SAAS7hB,EAAEkY,YAAatI,EAAQ,SAAY2B,IAANvR,GAEvD,EAcRsgE,CAAeF,EAAY,EAGzBG,GAAkB,IAAIvpD,SAAS5Y,KACxC,QAA8B,IAAI,WAAc0Y,MAAMgnD,IAClDqB,GAAA,IAAgCqB,IACrB,QACHA,GACCL,IACG/hE,EAAQ,CACJiB,KAAM4gE,GAAMQ,SACZ3C,eAAgBoC,GAAgBpC,EAAgBqC,GAChDK,qBACF,IAEN,YAEN,GACJ,IAeOE,GAAuBnD,IAChC,MAAMoD,EARV,UAAgC,YAAEpD,EAAW,KAAEl+D,IAI3C,OAHmBk+D,EAAY/wC,MAAMo0C,GACzBA,EAAyBvhE,OAASA,GAGlD,CAG+BwhE,CAAuB,CAAEtD,cAAal+D,KAAM4gE,GAAMQ,WAE7E,OAAIE,aAAkB,EAAlBA,EAAoB7C,eAAej+D,QAAS,EACrC8gE,EAEA,CAAEthE,KAAM4gE,GAAMa,UAAWpD,oBAAgBnsD,EACpD,EC7BJ,GA5BA,WACI,MAAMwvD,EAAYvD,KAAeE,eAC3BrpC,GAAa,IAAAC,YAAW5J,EAAA,IACvBsmC,EAAegQ,IAAmB,IAAAtiD,UAAS,CAAC,IAE7C,eAAEo/C,EAAc,qBAAE7F,EAAoB,kBAAEuI,GAAuBO,EAYrE,OAVA,IAAAllD,YAAU,MACFiiD,aAAc,EAAdA,EAAgBj+D,QAAS,GACzBw0B,EAAW5J,eAAeqzC,EAC9B,GACD,CAACA,EAAgBzpC,KAEpB,IAAAxY,YAAU,KACN80C,KAA6B75C,MAAMk6C,GAAkBgQ,EAAgBhQ,IAAe,GACrF,KAGC,SAACiN,GAAY,CACTjN,cAAeA,EACfhD,gBAAgB,KAChBsD,kBAAmBwM,EACnB7F,qBAAsBA,EACtB5wC,yBAA0Bm5C,GAGtC,ECyBA,GA5CA,WAcI,OAbA,IAAA3kD,YAAU,MAXd,WACI1O,SAAS4c,KAAKrO,UAAUE,OAAO,mBAE/B,MAAM00C,EAAWnjD,SAASwa,eAAe,UACrC2oC,IACAA,EAAS50C,UAAUE,OAAO,qBAC1B00C,EAAS50C,UAAUhb,IAAI,oBAE/B,CAIQ2vD,GACAv8C,YAAW,WACP,MAAMgZ,EAA4B,CAC9B1Y,MAAO,KAAoB2Y,OAAOmjC,KAAKC,MACvChI,UAAW,CACPA,UAAW,yBAGnB,QAAUr7B,EACd,GAAG,KAAoBsjC,qBAAqB,GAC7C,KAGC,oBACIzyD,GAAG,0BAAyB,kBACX,WACjB6U,UAAU,2CAA0C,UAEpD,iBAAKA,UAAU,+CAA8C,WACzD,gCACI,mBAAQ+9C,MAAM,qBAAqBC,OAAO,6CAC1C,mBACID,MAAM,+CACNC,OAAO,6CAEX,mBAAQD,MAAM,wBAAwBC,OAAO,yCAC7C,gBACIh+C,UAAU,8BACV+rB,IAAI,sCACJD,IAAI,0EACJxwB,MAAM,OACND,OAAO,aAGf,gBAAK2E,UAAU,iEAAgE,UAC3E,SAACs9C,GAAmB,CAACC,UAAW,KAAUU,KAAMT,SAAS,sBAK7E,ECNA,GA7CA,WACI,MAAMhrB,EAAQw4B,MACP7wD,EAAWs0D,IAAgB,IAAAviD,YAE5BwiD,GAAkB,IAAA11B,cAAa21B,IACjC,OAAQA,GACJ,KAAKlB,GAAMQ,SACPQ,GAAa,SAAC,GAAQ,KACtB,MACJ,KAAKhB,GAAMa,UAGX,QACIG,GAAa,SAAC,GAAa,KAEnC,GACD,IASH,OAPA,IAAAplD,YAAU,KACN,IAAKmpB,EAAMmB,UAAW,CAClB,MAAMu3B,EAAiBgD,GAAoB17B,EAAMu4B,aACjD2D,EAAgBxD,EAAer+D,KACnC,IACD,CAAC6hE,EAAiBl8B,IAEhBr4B,GAQD,SAAC,EAAAy0D,SAAQ,CACLC,UACI,gBAAK3uD,MAAO,CAAEqM,UAAW,SAAUC,WAAY,SAAS,UACpD,wBAAaC,KAAK,QAAQC,KAAK,YAC7B,UAGV,SAACo+C,GAAYhyC,SAAQ,CAACta,MAAQg0B,EAAkC,SAAGr4B,OAbnE,gBAAK+F,MAAO,CAAEqM,UAAW,SAAUC,WAAY,SAAS,UACpD,wBAAaC,KAAK,QAAQ3B,MAAM,kBAAkB4B,KAAK,WAevE,E,0BC1CO,MAAMoiD,GAAgC52D,IAErC,iBAAK8H,UAAW,IAAW,wBAAyB,CAAE2L,QAASzT,EAAMy7B,YAAY,WAC7E,gBAAK3zB,UAAU,YACf,iBAAKA,UAAU,OAAM,WACjB,oBACA,oBACA,oBACA,yBCRH+uD,GAAgC72D,IAErC,gBAAK8H,UAAU,yBAAwB,UACnC,SAAC,KAAQ,CACLnT,KAAK,iCACLyhB,UAAU,gBACVuE,UAAU,qBACVlB,aAAa,EAAI,SAEhBrkB,MAAMqsB,KAAK,CAAEtsB,OAAQ,IAAK,CAACwB,EAAGuO,IAAUA,EAAQ,IAAGpS,KAAKoS,IACrD,oBACI4C,UAAU,gFAA+E,UAGzF,gBAAKA,UAAU,sBAAqB,UAChC,SAAC8uD,GAA4B,CAACn7B,UAAWz7B,EAAMy7B,eAH9C,+BAA+Bv2B,EAAQ,WCR9D4xD,GAAoB,EAAGC,kBAErB,uBACIlhB,QAAQ,YAAW,aACPkhB,EACZ9sC,QAAU52B,KACN,QAAiB,CACb09D,WAAY19D,EACZ29D,aAAc,KAAoB3uC,OAAOC,MAAMS,IAC/C0F,MAAO,sBACP5e,SAAU,oBACV6Q,KAAM,oBACNu2C,KAAM,WACN75B,OAAQ,CACJC,iBAAkB,mDAExB,EACL,iCAOA2/B,GAAY,KACrB,MAAM,cACFh2C,EAAa,iBACbe,EAAgB,uBAChBd,EAAsB,oBACtBgC,EAAmB,QACnB9B,EAAO,QACPhT,IACA,SACA,SAAY0D,IAAU,CAClBmP,cAAenP,EAAMmP,cACrBe,iBAAkBlQ,EAAMkQ,iBACxBd,uBAAwBpP,EAAMoP,uBAC9BgC,oBAAqBpR,EAAMoR,oBAC3B9B,QAAStP,EAAMsP,QACfhT,QAAS0D,EAAM1D,cAIhB8oD,EAAcC,IAAmB,IAAAljD,WAAS,IAEjD,IAAA7C,YAAU,KACNgQ,IACAY,IACAkB,GAAqB,GACtB,CAAC9B,EAASY,EAAkBkB,KAG/B,IAAA9R,YAAU,KACN,MAAMgmD,EAA+B,IAAMD,GAAgB,GAI3D,OAFAz0D,SAASb,iBAAiB,yBAA0Bu1D,GAE7C,KACH10D,SAAS+E,oBAAoB,yBAA0B2vD,EAA6B,CACvF,GACF,KAEH,IAAAhmD,YAAU,KACF6P,EAAc7rB,SACd,QAAU,CACNuU,MAAO,2BACPuhB,gBAAiB,CACbzd,YAAa,YACb4pD,eAAgBliE,OAAO8rB,EAAc7rB,SAEzCxB,OAAQ,CACJw3B,iBAAkB,sBAG9B,GACD,CAACnK,IAEJ,MAAMq2C,EAA0B,KAC5B,MAAM10C,EAAS,CAAE20C,WAAYnpD,IAG7B,QAAU,CACNzE,MAAO,cACP8Y,YAAa,CACT7tB,KAAMwZ,GAAW,GACjBtE,SAAU,wBAKlB,MAAMH,EAAQ,IAAI+Y,YAAY,6BAA8B,CAAEE,WAC9DlgB,SAASC,gBAAgBkgB,cAAclZ,EAAM,EAG3C6tD,EAAiB,IACZt2C,GACH,SAAC41C,GAA4B,CAACp7B,UAAWxa,IACzCD,EAAc7rB,OAAS,GACvB,SAAC88D,GAAgB,CACb/1C,YAAY,oBACZg2C,WAAW,sBACXC,aAAc8E,EAAej2C,EAAc/mB,MAAM,EAAG,GAAK+mB,EACzD5K,UAAU,eACVg8C,iBAAiB,EACjBG,wBAAyB0E,KAG7B,SAACJ,GAA4B,CAACp7B,UAAWxa,IAIjD,OACI,gCACKg2C,IACG,iBAAKhkE,GAAG,uBAAuB6U,UAAU,cAAa,WAClD,iBAAKA,UAAU,sBAAqB,WAChC,4BACI,+CACA,oBACI4J,KAAK,SACL5J,UAAU,WACVmiB,QAASotC,EAAuB,gBAClB,OAAM,aACT,2BAA0B,UAEpC,KAAKxzC,gBAAe,IAAG1V,SAGhC,SAAC2oD,GAAiB,OAErBS,KACD,gBAAKzvD,UAAU,4BAA2B,UACtC,SAACgvD,GAAiB,CAACC,aAAW,UAIxCE,IACE,iBAAKhkE,GAAG,uBAAsB,WAC1B,iBAAK6U,UAAU,sBAAqB,WAChC,+CACA,oBACI4J,KAAK,SACL5J,UAAU,WACVmiB,QAASotC,EAAuB,gBAClB,OAAM,aACT,2BAA0B,UAEpC,KAAKzzC,aAAY,IAAGzV,QAG5BopD,SAIhB,EClKQC,GAA4B,KAC7B,YAKJ,yBAJA,SAAC,KAAQ,CAACr0D,OAAQxB,OAAO2B,YAAW,UAChC,SAAC0zD,GAAS,MCATS,GAA0B,KACnC,MAAOC,EAAmBC,IAAwB,IAAA3jD,WAAS,IACpD4jD,EAAmBC,IAAwB,IAAA7jD,WAAS,IACpD+3C,EAAoB+L,IAAyB,IAAA9jD,UAA0B,KAExE,eAAEg/C,GAA4CF,KAC9CiF,EAAc/E,GAAkBA,EAAer+D,OAAS4gE,GAAMQ,SAepE,OAbA,IAAA5kD,YAAU,KACDumD,IACDG,GAAqB,GACrBlL,KAAoBvgD,MAAM4rD,IACtBH,GAAqB,GACrBF,GAAqB,GACjBK,EAAuB7iE,OAAS,GAChC2iE,EAAsBE,EAC1B,IAER,GACD,CAACN,IAEGK,GAAeL,GAAqB3L,EAAmB52D,OAAS,GACnE,iCACI,gBAAK2S,UAAU,2BAA0B,UACrC,kDAEJ,SAAC,GAAgB,CACbmkD,qBAAsByL,EACtB1L,qBAAsB4L,EACtBjnD,WAAW,EACXo7C,mBAAoBA,EACpBtyC,aAAa,QAIrB,uBACH,ECnCQw+C,GAAwB,KACjC,MAAOC,EAA8BC,IAAmC,IAAAnkD,WAAS,IAC1EokD,EAA8BC,IAAmC,IAAArkD,WAAS,IAC1EskD,EAAyBC,IAA8B,IAAAvkD,UAAyB,KAChF8M,EAAkB03C,IAAsB,IAAAxkD,UAAmB,KAC5D,eAAEg/C,EAAc,UAAEv3B,GAAcq3B,KA0BtC,OAxBA,IAAA3hD,YAAU,MACF6hD,GAAmBv3B,GAAcy8B,KACjC,UAAkB3qD,IACdirD,EAAmBjrD,EAAgB,IAGvC8qD,GAAgC,GAEhC1R,IACKoI,IACOA,EAA2B55D,OAAS,IACpCojE,EAA2BxJ,GAC3BoJ,GAAgC,GAChCE,GAAgC,GACpC,GAEJv3C,EACCkyC,EAA6BI,gBAGlC+E,GAAgC,GACpC,GACD,CAACD,EAA8Bz8B,EAAWu3B,EAAgBlyC,EAAkBw3C,IAExEJ,GAAgCI,EAAwBnjE,OAAS,GACpE,+BACI,SAAC88D,GAAgB,CACbx2B,UAAW28B,EACX3vC,MAAM,iBACNypC,WAAW,iBACXC,aAAcmG,EACdlG,iBAAiB,OAIzB,uBACH,ECLL,GA1CqBpyD,IACjB,MAAM,QAAEy4D,EAAO,kBAAEC,GAAoC14D,EAAM6vD,KACrD,UAAEjW,EAAS,SAAE7+B,EAAQ,aAAE8+B,GAAiB75C,GACvC8+B,EAAU65B,IAAe,IAAA3kD,WAAS,GAMzC,OAJA,IAAA7C,YAAU,KACNwnD,EAAY/e,IAAc7+B,EAAS,GACpC,CAAC6+B,KAGA,oBACIloC,KAAK,SACL5J,UAAW,kBAAkBg3B,GAAY,2BACzC5H,KAAK,MAAK,gBACK4H,EACf/jB,SAAU+jB,EAAW,GAAK,EAC1B7U,QAAS,MAEL,QAAU,CACNvgB,MAAO,KAAoB2Y,OAAOC,MAAMS,IACxCP,YAAa,CACT7tB,KAAM8jE,EACN5uD,SAAU,eAKlBgwC,EAAa9+B,EAAS,EACzB,qBACmB,SAAS09C,IAAS,WAEtC,iBAAM3wD,UAAU,iCAAgC,UAC5C,kBAAMA,UAAU,uBAAsB,WAClC,iBAAMA,UAAU,+BAA8B,SAAE2wD,KAChD,iBAAM3wD,UAAU,0CAAyC,SAAE4wD,UAGnE,iBAAM5wD,UAAU,+BAEvB,EC1BE,SAAS8wD,GAAaC,EAA8Bz8D,EAAS,GAChE,MAAM08D,EAKH,SAA4BD,EAA8Bz8D,EAAS,GAKtE,MAAO,CACHsD,SALa,IAMbq5D,sBALkCtjE,KAAKmO,IAAInB,SAASC,gBAAgB0zC,UAAW3zC,SAAS4c,KAAK+2B,WAM7F4iB,iBAL6BH,EAAgB71D,wBAAwBC,IAAM7G,EAOnF,CAfsB68D,CAAmBJ,EAAiBz8D,GAChD88D,EAgBH,SAA4B,G,IAAKJ,E3HOjC,SAAgB9kE,EAAGX,GACtB,IAAI2B,EAAI,CAAC,EACT,IAAK,IAAIkB,KAAKlC,EAAOP,OAAOgE,UAAU6kC,eAAer+B,KAAKjK,EAAGkC,IAAM7C,EAAEgJ,QAAQnG,GAAK,IAC9ElB,EAAEkB,GAAKlC,EAAEkC,IACb,GAAS,MAALlC,GAAqD,mBAAjCP,OAAO0lE,sBACtB,KAAIplE,EAAI,EAAb,IAAgBmC,EAAIzC,OAAO0lE,sBAAsBnlE,GAAID,EAAImC,EAAEf,OAAQpB,IAC3DV,EAAEgJ,QAAQnG,EAAEnC,IAAM,GAAKN,OAAOgE,UAAU2hE,qBAAqBn7D,KAAKjK,EAAGkC,EAAEnC,MACvEiB,EAAEkB,EAAEnC,IAAMC,EAAEkC,EAAEnC,IAF4B,CAItD,OAAOiB,CACX,C2HjBiD,GAAd,IAC/B,MAAMu9B,EAAwB,GACxBa,EAAqB39B,KAAKQ,KAAM6iE,EAAUp5D,SAAW,IAAQ,IAC7D2zB,EAAmBylC,EAAUE,iBAEnC,IAAK,IAAIjlE,EAAI,EAAGA,GAAKq/B,EAAYr/B,IAAK,CAClC,MAAMiB,EAAYjB,EAAIq/B,EAChBvV,EAAe7oB,EAAI,GAAM,EAAIA,EAAIA,EAAS,GAAK,EAAIA,GAAKA,EAAlB,EAC5Cu9B,EAAO1tB,KAAKi0D,EAAUC,sBAAwB1lC,EAAWxV,EAC7D,CACA,OAAO0U,CACX,CA3BsB8mC,CAAmBP,GACrCQ,GAAoBt/D,MAAM,KAAMk/D,EACpC,CA2BO,SAASI,MAAuBJ,GACnC,MAAMK,EAAYpmC,aAAY,KACtB+lC,EAAU/jE,OACVsN,SAASC,gBAAgB0zC,UAAY3zC,SAAS4c,KAAK+2B,UAAY8iB,EAAUM,SAAW,EAEpF1mC,cAAcymC,EAClB,GACD,IAAO,GACd,CCnDA,MA4GA,GA5G4Bv5D,IACxB,MAAM,QAAEy4D,EAAO,SAAEgB,GAA2Bz5D,EAAM6vD,KAC5C,KAAExkD,EAAI,UAAEuuC,EAAS,SAAE7+B,EAAQ,YAAE2+C,GAAgB15D,GAG5C25D,EAAgBC,IAAqB,IAAA5lD,WAAS,KAEjD,MAAM6lD,EAAwC,CAAC,EAI/C,OAHAxuD,EAAKK,SAASnQ,SAAQ,CAACs0D,EAAmB97D,KACtC8lE,EAAU3kE,OAAOnB,KAAM,CAAK,IAEzB8lE,CAAS,KAGb/6B,EAAU65B,IAAe,IAAA3kD,WAAS,GAuCzC,OArCA,IAAA7C,YAAU,KACNwnD,EAAY/e,IAAc7+B,EAAS,GACpC,CAAC6+B,KAoCA,gBAAK9xC,UAAU,mBAAkB,UAC7B,iBACI7U,GAAI,gCAAgCwlE,IACpC3wD,UAAW,gEAEP6xD,EAAe/f,GAAa,2CAA6C,kCAC7C9a,EAAW,WAAa,KAAI,WAE5D,iBAAKh3B,UAAU,gDAA+C,WAC1D,cAAGA,UAAU,YAAY4S,KAAK,eAAc,4CAG5C,eAAI5S,UAAU,4BAA2B,SAxCzD,SAAqB2wD,GACjB,OAAOgB,EAAS3mE,KAAI,CAAC03D,EAAwBz2D,KACzC,MAAM,QAAE+lE,EAAO,SAAEC,EAAQ,cAAEC,EAAa,mBAAEC,GAAuBzP,EAC3D0P,EAAkB,CAAE,CAACF,GAA0BC,GACrD,OACI,yBACI,4BACIv/C,KAAMo/C,EACN7vC,QAAU8mC,KACN,QAAiB,CACbA,aACAC,aAAc,KAAoB3uC,OAAOC,MAAMS,IAC/C0F,MAAOsxC,EACPlwD,SAAU,cAAc4uD,IACxB/9C,KAAMo/C,EACN7I,KAAM,YACR,GAEFiJ,EAAe,UAElBH,MAfAhmE,EAkBZ,GAET,CAe2DomE,CAAY1B,QAE1DgB,EAAStkE,OAjEM,KAkEZ,gBAAK2S,UAAU,sCAAqC,cAAa,OAAM,UACnE,oBACIA,UAAU,mCAAkC,WAClC,gCAAgC2wD,IAC1CxuC,QAAS,KArDjC,IAAgCl2B,GAuDJ,QAAU,CACN2V,MAAO,KAAoB2Y,OAAOC,MAAMS,IACxCP,YAAa,CACT7tB,KAAM,SAAQglE,EAAe5+C,GAAY,OAAS,QAClDlR,SAAU,eA3Dd9V,EA+DmBgnB,EA9D/C6+C,EAAkB,CAAE,CAAC7lE,IAAK4lE,EAAe5lE,KACM,IAAtB4lE,EAAe5lE,IACrB6kE,GAAcc,aAAW,EAAXA,EAAatoD,SAAqC,GA4D3B,EACnC,WAED,kBAAMtJ,UAAU,yCAAwC,kBAC9C6xD,EAAe5+C,GAAY,OAAS,WAE9C,iBAAMjT,UAAU,wCAAuC,UACnD,iBACIoM,QAAQ,YACRC,MAAM,6BAA4B,cACtB,OACZ8P,UAAU,QAAO,WAEjB,iBAAM3vB,EAAE,qDACR,iBAAMA,EAAE,kBAAkB8f,KAAK,uBAQ9D,ECzCL,GA7DkBpU,IACd,MAAO45C,EAAWC,IAAgB,IAAA7lC,UAAS,IACpC3I,EAAM+uD,IAAW,IAAApmD,UAAsC,QACvDynB,EAAWC,IAAgB,IAAA1nB,WAAS,GACrC0lD,GAAc,IAAAhpD,QAAO,MAS3B,OAPA,IAAAS,YAAU,MACN,WAAwB/E,MAAMf,IAC1B+uD,EAAQ/uD,GACRA,EAAKK,SAASvW,OAAS,GAAKumC,GAAa,EAAM,GACjD,GACH,IAECD,GACO,SAACZ,EAAc,KAGlB,iBAAK14B,IAAKu3D,EAAa5xD,UAAU,sCAAqC,WAClE,gBAAIA,UAAU,0BAA0B7U,GAAG,iBAAgB,yBAEvD,iBAAM6U,UAAU,gBAAe,gBAC/B,iBAAMA,UAAU,+BAA8B,UAC1C,oBACG,eAGX,gBAAK7U,GAAG,2BAA2B6U,UAAU,oBAAmB,UAC5D,gBAAKA,UAAU,kBAAiB,UAC5B,gBAAKA,UAAU,mCAAmCovB,KAAK,UAAS,SAC3D7rB,EAAKK,SAAS5Y,KAAI,CAAC+8D,EAAmB97D,KAE/B,SAAC,GAAW,CAER87D,IAAKA,EACL90C,SAAUhnB,EACV6lD,UAAWA,EACXC,aAAcA,GAJT9lD,WAY5BsX,EAAKK,SAAS5Y,KAAI,CAAC+8D,EAAmB97D,KAE/B,SAAC,GAAkB,CAEfsX,KAAMA,EACNuuC,UAAWA,EACXiW,IAAKA,EACL90C,SAAUhnB,EACV2lE,YAAaA,GALR3lE,OAW7B,E,2FC/DJ,MAAMiB,IAAI8H,EAAAA,GAAAA,IACQu9D,EAAAA,EAAAA,KAAEt+D,EAAAA,SAAG,CAAE6L,UAA0ByyD,EAAAA,EAAAA,KAC/C,OACA,CACE/lE,EAAG,gxCACH8f,KAAM,mBAGV,qBCRI7f,IAAInB,EAAAA,GAAAA,IACQinE,EAAAA,EAAAA,KAAEhnE,EAAAA,SAAG,CAAEuU,UAA0ByyD,EAAAA,EAAAA,KAC/C,OACA,CACE/lE,EAAG,0yBACH8f,KAAM,eACN0P,SAAU,UACVC,SAAU,cAGd,sB,eCJF,MAAMu2C,GACO,UAIPC,GAAa,CAAEp3D,OAAQ,OAAQC,MAAO,OAAQkyB,MAAOglC,IAErDE,GAAa,CACft8C,UAAW,CACPu8C,GAAI,SAERnK,aAAc,CACVoK,GAAI,EACJD,GAAI,GAERE,OAAQ,CACJD,GAAI,EACJD,GAAI,qBAERr+B,QAAS,CACLs+B,GAAI,GAERE,GAAI,CACAH,GAAI,GAERI,GAAI,CACAH,GAAI,EACJD,GAAI,GAERK,GAAI,CACAJ,GAAI,EACJD,GAAI,EACJM,GAAI,IAINzvD,GAAsB,CACxB,CACI0T,MAAM,SAAC,GAAiB,CAACg8C,GAAIT,KAC7BhxC,KAAM,uFAEV,CACIvK,MAAM,SAAC,GAAkB,CAACg8C,GAAIT,KAC9BhxC,KAAM,8EAEV,CACIvK,MAAM,SAACi8C,GAAA,EAAqB,CAACD,GAAIT,KACjChxC,KAAM,mFACNotB,WAAY,mCAIPukB,GAAsB,KAE3B,UAACl7B,GAAA,EAAS,CAACg7B,GAAI,CAAEF,GAAI,CAAEJ,GAAI,EAAGD,GAAI,EAAGU,GAAI,GAAKC,GAAI,CAAEV,GAAI,EAAGK,GAAI,IAAMM,GAAI,CAAEX,GAAI,GAAIK,GAAI,KAAM,WACzF,SAACO,GAAA,EAAU,CAACr5D,UAAU,KAAK4zC,QAAQ,KAAKvgB,MAAOglC,GAAgBU,GAAI,CAAEK,GAAI,GAAG,oCAG5E,SAACE,GAAA,EAAK,CAAChlD,UAAW,CAAEmkD,GAAI,SAAUD,GAAI,OAASe,QAAS,CAAEd,GAAI,EAAGK,GAAI,GAAG,SACnEzvD,GAAQxY,KAAI,CAAC2oB,EAAM1nB,KAChB,SAAC,KAAI,CAASygB,KAAM,CAAEkmD,GAAI,GAAID,GAAI,GAAG,UACjC,UAAC,KAAI,CAACtf,UAAW,EAAG6f,GAAIR,GAAU,UAC7B/+C,EAAKuD,MACN,SAACs8C,GAAA,EAAU,CAACr5D,UAAU,MAAM4zC,QAAQ,QAAQvgB,MAAOglC,GAAc,SAC5D7+C,EAAK8N,OAET9N,EAAKk7B,aACF,SAAC2kB,GAAA,EAAU,CACPr5D,UAAU,MACV4zC,QAAQ,UACRvgB,MAAM,iBACNmmC,UAAU,SACVT,GAAI,CAAEK,IAAK,KAAK,SAEf5/C,EAAKk7B,iBAdX5iD,WC6J/B,EAAA2nE,EAAA,IAAmB,MApMnB,WjBiB8B7uD,gBACRP,QAAQqB,IAAI,CAACkoD,KiBjB/B8F,GAAiBvvD,MAAMymD,IACnB,MAAMG,EAAiBgD,GAAoBnD,GAE3CC,GAAa8I,WAAW7I,iBAAiB,CACrCF,YAAaA,EACb5wD,UAAW+wD,EAAer+D,KAC1Bq+D,iBACAv3B,WAAW,GACb,IAGNogC,GAAA,IACA,MAAMC,EAAgBr5D,SAASwa,eAAe,QACxC8+C,EAAkBt5D,SAASwa,eAAe,YAC3C22C,aAAaoI,0BAA2B,cAA6B,YActE,WAbIF,GACA,UACI,SAACnqD,GAAA,EAAa,WACV,SAAC46C,GAA4B,WACzB,SAAC,KAAW,WACR,SAAC,GAAa,CAACjJ,gBAAiB,aAI5CwY,GAORlI,aAAaoI,wBACb,UACI,SAACrqD,GAAA,EAAa,WACV,SAAC46C,GAA4B,WACzB,SAAC,KAAW,WACR,SAAC0P,GAAA,EAAa,CAACC,MAAOA,GAAA,EAAK,UACvB,SAAC,GAAY,YAK7BH,GAIR,MAAMI,EAA0B15D,SAASwa,eAAe,6BAEpDk/C,GACA,UACI,SAACxqD,GAAA,EAAa,WACV,SAAC8lD,GAAuB,MAE5B0E,GAIR,MAAMC,EAAwB35D,SAASwa,eAAe,4BAElDm/C,GACA,UACI,SAACzqD,GAAA,EAAa,WACV,SAACsmD,GAAqB,MAE1BmE,GAIR,MAAMC,EAA4B55D,SAASwa,eAAe,6BAEtDo/C,GACA,UACI,SAAC1qD,GAAA,EAAa,WACV,SAAC46C,GAA4B,WACzB,SAAC,KAAW,WACR,SAAC,EAAyB,CACtBjJ,gBAAiB,KACjBhrB,sBAAsB,wBAKtC+jC,GAIR,MAAMC,EAAY75D,SAASwa,eAAe,cAEtCq/C,GACA,UACI,SAAC3qD,GAAA,EAAa,WACV,SAAC6lD,GAAe,MAEpB8E,GAIR,MAAMC,EAAuB95D,SAASwa,eAAe,gBAEjDs/C,GACA,UACI,SAAC5qD,GAAA,EAAa,WACV,SAAC,GAAoB,CACjB2xC,gBAAiB,KACjBltC,UAAU,mCAGlBmmD,GAIR,MAAMC,EAAyB/5D,SAASwa,e1F5IN,gB0F8I9Bu/C,GACA,UACI,SAAC7qD,GAAA,EAAa,WACV,SAACwtC,GAAmB,MAExBqd,GAIR,MAAMC,EAA2Bh6D,SAASwa,eAAe,wCAErDw/C,GACA,UACI,SAAC9qD,GAAA,EAAa,WACV,SAACmvC,GAAc,WACX,SAAC,GAAyB,CAACwC,gBAAiB,KAAyBltC,UAAU,wBAGvFqmD,GAIR,MAAMC,EAAsBj6D,SAASwa,eAAe,mCAEhDy/C,GACA,UACI,SAAC/qD,GAAA,EAAa,WACV,SAACsqD,GAAA,EAAa,CAACC,MAAOA,GAAA,EAAK,UACvB,SAAChB,GAAmB,QAG5BwB,GAIR,MAAMC,EAAkCl6D,SAASwa,eAAe,4BAE5D0/C,GACA,UACI,SAAChrD,GAAA,EAAa,WACV,SAACirD,GAA+B,CAACtZ,gBAAiB,SAEtDqZ,GAIR,MAAME,EAAoBp6D,SAASwa,eAAe,kBAC9C4/C,GACA,UACI,SAAClrD,GAAA,EAAa,WACV,SAACmvC,GAAc,WACX,SAAC,GAAQ,CAACwC,gBAAiB,WAGnCuZ,EAGZ,EA0BIC,GAXiDr6D,SAAS6a,iBAAiB,6BACjE/hB,SAASmM,IACfA,EAAQ9F,iBAAiB,SAAU8H,IAdjB,IAAC/U,EAef+U,EAAMsM,iBAfSrhB,EAgBG+S,EAAQT,aAAa,cAAgB,IAf/D,QAAU,CACNyC,MAAO,KAAoB2Y,OAAOC,MAAMS,IACxCP,YAAa,CACT7tB,OACAkV,SAW2D,UAC3DlI,OAAOo7D,KAAKr1D,EAAQgT,KAAM,SAAS,GACrC,GAMkB,G,0PClOrB,MAAMsiD,EAA4B,CACrC18D,IAAK,uBAII28D,EAA6B,CACtC38D,IAAK,kBAET,IAAY48D,EAKAC,GALZ,SAAYD,GACR,cACA,eACH,CAHD,CAAYA,IAAAA,EAAS,KAKrB,SAAYC,GACR,cACA,8BACA,sBACA,sBACA,2BACA,qBACA,8BACH,CARD,CAAYA,IAAAA,EAAe,KASpB,MAAMC,EAAyB,CAAC,IAAK,IAAK,KACpCC,EAAyB,CAAC,IAAK,IAAK,KACpCC,EAAsB,CAAC,IAAK,IAAK,IAAK,KACtCC,EAAiC,CAAC,IAAK,KACvCC,EAAsB,CAAC,IAAK,KAC5BC,EAAiC,CAAC,KAClCC,EAA8B,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAClEC,EAAoC,IAC1CP,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,GAGP,IAAYE,GAAZ,SAAYA,GACR,8CACA,0CACA,0CACA,8CACA,0CACA,wCACA,4CACA,gDACA,4CACA,oCACA,kCACA,2DACA,mEACA,uDACA,0DACA,wEACA,sDACA,oDACA,kDACA,gDACA,oDACA,wDACA,wDACA,gEACA,gEACA,gDACA,4CACA,kDACA,gDACA,kDACA,8CACA,gCACA,kEACA,wCACA,sCACA,8DACA,0CACA,0CACA,0CACA,8CACA,8CACA,kDACA,2CACH,CA5CD,CAAYA,IAAAA,EAAqB,KA8C1B,MAAMC,EAAwB,kBACxBC,EAA2B,IAC3BC,EAA0B,KAC1BC,EAAoC,GAGpCC,EAAqC,gCACrCC,EAAuC,GAEpD,IAAYC,GAAZ,SAAYA,GACR,uCACA,iCACA,0BACH,CAJD,CAAYA,IAAAA,EAAW,KAMhB,MAAMC,EAAsB,sCAC7BC,EAAqB,cACrBC,EAA2B,oBAEpBC,EAeT,CACArR,qBAAsB,CAACiR,EAAYlV,eAAgBkV,EAAYjS,SAAUiS,EAAYxV,aACrF5zB,KAAM,CACF,CAACopC,EAAYlV,gBAAiB,CAC1Br2C,MAAO,UACP+H,UAAW,2BACX2D,aAAc,SACduqC,sBAAuB,kBACvB2G,YAAa,GAAG6O,IAAqBF,EAAYlV,iBACjDyG,kBAAmB,GAAG4O,IAA2BH,EAAYlV,iBAC7DuV,yBAA0B,oCAC1BlP,cAAe,MAEnB,CAAC6O,EAAYxV,aAAc,CACvB/1C,MAAO,kBACP+H,UAAW,uBACX2D,aAAc,cACduqC,sBAAuB,cACvB2G,YAAa,GAAG6O,IAAqBF,EAAYxV,cACjD+G,kBAAmB,GAAG4O,IAA2BH,EAAYxV,cAC7D6V,yBAA0B,iCAC1BlP,cAAe,MAEnB,CAAC6O,EAAYjS,UAAW,CACpBt5C,MAAO,YACP+H,UAAW,0BACX2D,aAAc,WACduqC,sBAAuB,WACvB2G,YAAa,GAAG6O,IAAqBF,EAAYjS,WACjDwD,kBAAmB,GAAG4O,IAA2BH,EAAYjS,WAC7DsS,yBAA0B,oCAC1BlP,cAAe,O,+ICvIpB,MAAMmP,EAAgB,OAErB98D,OAAO2oB,UAAUo0C,YACiC,GAAjD/8D,OAAO2oB,UAAUo0C,UAAUriE,QAAQ,YACkC,GAAlEsF,OAAO2oB,UAAUo0C,UAAUnoE,cAAc8F,QAAQ,cAOhDsiE,EAAkB,OACvBh9D,OAAO2oB,UAAUo0C,YAA6E,GAAhE/8D,OAAO2oB,UAAUo0C,UAAUnoE,cAAc8F,QAAQ,YAM1EuiE,EAAkB,OACvBj9D,OAAO2oB,UAAUo0C,YAA6E,GAAhE/8D,OAAO2oB,UAAUo0C,UAAUnoE,cAAc8F,QAAQ,YAM1EwiE,EAA0B,KACnC,IAAIC,GAAe,EAEnB,IACI,MAAMC,EAA0BtoC,aAAa+B,QAAQ,KAA0Bl4B,KACzE0+D,EAAgBviD,KAAKjlB,MAAMunE,GAE7BC,GAA0C,kBAAlBA,IACxBF,GAAe,EAEvB,CAAE,MAAOzrE,GAAI,CAEb,OAAQyrE,GAAgBG,GAAmB,EAGlCC,EAAgC,KACzC,IACIzoC,aAAaC,QAAQ,KAA0Bp2B,IAAK,OACxD,CAAE,MAAOjN,GAAI,GAGJ8rE,EAAoB,KAC7B,MAAMhyD,EAAoB,IAAIxV,KAC9B,OAAOwV,EAAY4rB,QAAQ5rB,EAAY5U,UAAY,KAAqC,EAG/E6mE,EAA0B9+D,IACnC,MAAMgG,EAAuBmwB,aAAa+B,QAAQl4B,GAClD,OAAiB,OAAVgG,EAAiBmW,KAAKjlB,MAAM8O,GAAS,IAAI,EAGvC+4D,EAA2B,CACpCjZ,EACAvtB,KAEOutB,aAAQ,EAARA,EAAU5qC,QAAO,EAAGxS,eAAmBA,EAAY6vB,MAAmB,GAGpEomC,EAAoB,KAC7B,IAEI,MAAM7L,EAA+CgM,EAAoB,IAA2B9+D,MAAQ,GAGtGu4B,EAAiBsmC,IAGvB,OAFyBE,EAAyBjM,EAAgBv6B,GAE1C1jC,OAAS,CACrC,CAAE,MAAO6c,GAEL,OADAzB,QAAQyB,MAAM,oCAAqCA,IAC5C,CACX,GAGSstD,EAAiC/jD,IAC1C,MAAMgkD,EAAoC,GACpCC,EAAqC,GACrCC,EAAsC,GACtCC,EAA2C,GAC3CC,EAAsC,GACtCC,EAA+B,GAC/BC,EAA+B,GAC/BC,EAA2C,GACjD,IAAIC,EAAwC,GAiG5C,OA/FAxkD,EAAgBhgB,SAAQ,CAAC6hB,EAAMlY,KAqC3B,MAAMoe,EAAS08C,EAAuB5iD,GAGlCkG,IAAW,KAAgB28C,WAM3B38C,IAAW,KAAgB48C,QAM3B58C,IAAW,KAAgB68C,YAM3B78C,IAAW,KAAgB88C,SAM3B98C,IAAW,KAAgB+8C,SAM3B/8C,IAAW,KAAgBg9C,KAM3Bh9C,IAAW,KAAgBi9C,aAK/BhB,EAAkB16D,KAAKuY,GAJnB0iD,EAAyBj7D,KAAKuY,GAN9ByiD,EAAah7D,KAAKuY,GANlBwiD,EAAa/6D,KAAKuY,GANlBsiD,EAAyB76D,KAAKuY,GAN9BuiD,EAAoB96D,KAAKuY,GANzBqiD,EAAoB56D,KAAKuY,GANzBoiD,EAAmB36D,KAAKuY,EAwCA,IAGhC2iD,EAAwB,IACjBR,KACAC,KACAC,KACAE,KACAD,KACAE,KACAC,KACAC,GAGAC,CAAqB,EAGnBC,EAA0BtkD,IACnC,MAAM,sBAAE8kD,EAAqB,aAAEC,EAAY,cAAEC,EAAa,WAAEh1C,GAAehQ,EAC3E,IAAI4H,EAAS,GAoCb,OAlCI,KAAuBnM,SAASuU,KAChCpI,EAAS,KAAgBg9C,MAGzB,KAAuBnpD,SAASuU,KAChCpI,EAAS,KAAgB68C,cAIzB,KAAoBhpD,SAASuU,IAC5B,KAA+BvU,SAASuU,KAAgB80C,KAEzDl9C,EAAS,KAAgB+8C,WAIzB,KAAoBlpD,SAASuU,IAC5B,KAA+BvU,SAASuU,KAAgB+0C,KAEzDn9C,EAAS,KAAgB88C,UAGzBK,IACAn9C,EAAS,KAAgB28C,YAGzBS,IACAp9C,EAAS,KAAgB48C,SAGzB,KAA4B/oD,SAASuU,KACrCpI,EAAS,KAAgBi9C,cAGtBj9C,CAAM,C,+CCjPjB,MAAMq9C,EAA2B,0BAMpBC,EAAgB,KACzB,MAAMC,EAAoBp+D,SAAS6a,iBAAiB,IAAIqjD,MAIlDj3D,EAAQ,IAAI+Y,YAAY,qCAAsC,CAChEE,OAAQ,CACJuX,KAAOI,IACH,GAAIA,GAASumC,GAAqBA,EAAkB1rE,OAAS,EAAG,CAC5D,MAAM2rE,EAb1B,SAAmBxmC,GACf,OAAOA,EAAMymC,GAAK,WAAWzmC,EAAMymC,KAAO,SAC9C,CAW6CC,CAAU1mC,GAEnCumC,EAAkBtlE,SAAS0lE,IACvBA,EAAiB95D,aAAa,OAAQ25D,GACtCG,EAAiBx5D,gBAAgBk5D,EAAyB,GAElE,MAIZl+D,SAASC,gBAAgBkgB,cAAclZ,EAAM,C,yDC3B1C,MAAMw3D,EAAoBh/C,IAC7B,MAAMxY,EAAQ,IAAI+Y,YAAY,kBAAmB,CAC7CC,SAAS,EACTC,OAAQ,CACJnZ,SAAWP,IACPA,EAAOmD,MAAMmB,IACT2U,EAAkB3U,EAAgB,GACpC,KAId9K,SAASC,gBAAgBkgB,cAAclZ,EAAM,EAmCpCyrD,EAA2Bj7B,IACpC,MAAMinC,EAAyB1+D,SAASkE,cAAc,iCAChDy6D,EAAwB3+D,SAASkE,cAAc,gCAC/C06D,EAAsBF,EAAuBl6D,aAAa,+BAC1Dq6D,EAAqBF,EAAsBn6D,aAAa,8BAExD43C,EAASp8C,SAASwF,cAAc,QACtC42C,EAAO13C,aAAa,MAAO,cAC3B03C,EAAO13C,aAAa,OAAQ,YAC5B03C,EAAO13C,aAAa,OAAQk6D,GAE5B,MAAMviB,EAAWr8C,SAASwF,cAAc,UACxC62C,EAAS33C,aAAa,OAAQ,mBAC9B23C,EAAS33C,aAAa,MAAOm6D,GAE7BxiB,EAASG,OAAS,KACdJ,EAAOI,OAAS,IAAM/kB,IACtBz3B,SAASs8C,qBAAqB,QAAQ,GAAGC,YAAYH,EAAO,EAGhEp8C,SAASs8C,qBAAqB,QAAQ,GAAGC,YAAYF,EAAS,C,kGC/D9D,iBAAK5qC,QAAQ,YAAY9Q,MAAM,KAAKD,OAAO,KAAKgR,MAAM,6BAA4B,cAAa,OAAM,WACjG,iBACIrM,UAAU,cACVxT,EAAE,iIAEN,iBAAMA,EAAE,gBAAgB8f,KAAK,YAN9B,MAUMmtD,GACT,iBAAKrtD,QAAQ,YAAY9Q,MAAM,KAAKD,OAAO,KAAI,cAAa,OAAOgR,MAAM,6BAA4B,WACjG,iBAAM7f,EAAE,gBAAgB8f,KAAK,UAC7B,iBAAMtM,UAAU,cAAcxT,EAAE,6BAChC,iBAAMwT,UAAU,cAAcxT,EAAE,8BAChC,iBAAMwT,UAAU,cAAcxT,EAAE,8BAChC,oBACIwT,UAAU,cACV05D,OAAO,qFAsFNC,IAhFT,iBAAKvtD,QAAQ,YAAY9Q,MAAM,KAAKD,OAAO,KAAKgR,MAAM,6BAA4B,cAAa,OAAM,WACjG,iBAAM7f,EAAE,gBAAgB8f,KAAK,UAC7B,iBACItM,UAAU,cACVxT,EAAE,wRAMV,iBAAK8O,MAAM,QAAQD,OAAO,KAAKgR,MAAM,6BAA6BD,QAAQ,eAAc,cAAa,OAAM,WACvG,iBACI5f,EAAE,wEACF4vB,UAAU,iBACV9P,KAAK,aAET,iBACI9f,EAAE,wFACF4vB,UAAU,iBACV9P,KAAK,aAET,iBACI9f,EAAE,sGACF4vB,UAAU,iBACV9P,KAAK,aAET,iBACI9f,EAAE,oFACF4vB,UAAU,iBACV9P,KAAK,aAET,iBACI9f,EAAE,2EACF4vB,UAAU,iBACV9P,KAAK,aAET,iBACI9f,EAAE,0FACF4vB,UAAU,iBACV9P,KAAK,aAET,iBACI9f,EAAE,+fACF4vB,UAAU,iBACV9P,KAAK,aAET,iBACI9f,EAAE,sKACF4vB,UAAU,iBACV9P,KAAK,gBAMb,+BAAiB,OAAOD,MAAM,6BAA6B/Q,MAAM,OAAOD,OAAO,KAAK+Q,QAAQ,cAAa,WACrG,iBACI5f,EAAE,8LACF4vB,UAAU,mBACV9P,KAAK,aAET,iBACI9f,EAAE,iRACF4vB,UAAU,mBACV9P,KAAK,UAET,iBACI9f,EAAE,8QACF4vB,UAAU,mBACV9P,KAAK,UAET,iBACI9f,EAAE,sEACF4vB,UAAU,mBACV9P,KAAK,UAET,oBAASgnB,GAAG,OAAOC,GAAG,OAAO0sB,GAAG,OAAO2Z,GAAG,MAAMttD,KAAK,UAAU4zC,QAAQ,YAK3E,+BAAiB,OAAO7zC,MAAM,6BAA6B/Q,MAAM,KAAKD,OAAO,KAAK+Q,QAAQ,YAAW,WACjG,iBACIpM,UAAU,cACVxT,EAAE,wRAEN,wBACI,iBAAMrB,GAAG,uCAAuCmQ,MAAM,KAAKD,OAAO,KAAKiR,KAAK,eAK3EutD,GACT,8BAAiB,OAAOxtD,MAAM,6BAA6B/Q,MAAM,QAAQD,OAAO,QAAQ+Q,QAAQ,kBAAiB,UAC7G,wBACI,wBACI,wBACI,0BACI,iBAAM9Q,MAAM,QAAQD,OAAO,QAAQiR,KAAK,UACxC,oBAASgnB,GAAG,QAAQC,GAAG,QAAQ0sB,GAAG,QAAQ2Z,GAAG,OAAOttD,KAAK,UAAU0zC,YAAY,SAC/E,wBACI,iBACIxzD,EAAE,uJACF8f,KAAK,YAGb,iBACI9f,EAAE,mRACF8f,KAAK,UAET,iBACI9f,EAAE,2MACF8f,KAAK,UAET,iBAAM9f,EAAE,oEAAoE8f,KAAK,oBAQ5FwtD,GACT,+BAAiB,OAAOztD,MAAM,6BAA6B/Q,MAAM,KAAKD,OAAO,KAAK+Q,QAAQ,YAAW,WACjG,iBAAM9Q,MAAM,KAAKD,OAAO,KAAKiR,KAAK,UAClC,wBACI,wBACI,wBACI,wBACI,iBACItM,UAAU,cACVxT,EAAE,8K,6DCzJ9B,MAAMutE,EAA2Cr0D,GACtCA,EAAYpU,WAGV0oE,EAAuC9S,IAChD,MAAM+S,EAA2BtrC,aAAa+B,QAAQ,IAA2Bl4B,KAE3E0hE,EAAgD,IAElDD,aAAwB,EAAxBA,EAA0B5sE,QAC1BsnB,KAAKjlB,MAAMuqE,GAA0BxmE,SAASupD,IACnB+c,EAAwC/c,EAASt3C,eAC7Cq0D,EAAwC7S,EAAaxhD,cAK5Ew0D,EAAgBn9D,KAAKigD,EACzB,IAGJv0C,QAAQC,IACJ,WAAWw+C,EAAaxhD,+GAIhC7L,OAAO80B,aAAaC,QAAQ,IAA2Bp2B,IAAKmc,KAAKC,UAAUslD,GAAiB,C,iFC1BhG,SAAe,QACX,OAAU,IAAa,CACnBC,aAAc,CAAEC,MAAM,K,kECSvB,MAAMC,EAAsB,CAC/B9/C,OAAQ,CACJC,MAAO,CACHS,IAAK,WACLR,qBAAsB,0BACtB4U,iBAAkB,kBAClBnM,oBAAqB,yBAEzBw6B,KAAM,CACF4c,KAAM,WACN3c,MAAO,cAGfC,qBAAsB,IACtBt6B,eAAgB,KAGPi3C,EAAajgD,IACD,MAAjBA,EAAQ1Y,QACR0Y,EAAQ1Y,MAAQy4D,EAAoB9/C,OAAOC,MAAMS,KAIjDphB,OAAO2gE,eACP3gE,OAAO2gE,eAAez9D,KAAKud,GAE3B7R,QAAQC,IAAI,oEAChB,EAGS+xD,EAAmB,EAAGxR,aAAYC,eAAcvoC,QAAO5e,WAAU6Q,OAAMu2C,WAChFF,EAAW/6C,iBACX,MAAMoM,EAA4B,CAC9B1Y,MAAOsnD,EACPxuC,YAAa,CACT7tB,KAAM8zB,EACN5e,SAAUA,GAEdutB,OAAQ,CACJC,iBAAkB,GAAG45B,KAAQxoC,KAAS+B,aAG9C63C,EAAUjgD,GACVhZ,YAAW,KACPzH,OAAO6oB,SAAS9P,KAAOA,CAAI,GAC5BynD,EAAoB/2C,eAAe,C,qGC1DnC,MAAMo3C,EACF,aADEA,EAEA,eAKAC,EAAkB,KAC3B,IACI,QAAShgE,SAASigE,OAAO5qE,MAAM0qE,EACnC,CAAE,MAAOnvE,GACL,OAAO,CACX,GAESsvE,EAAiB,KAC1B,IACI,OAAIF,IACOhgE,SAASigE,OAAO7tE,MAAM,GAAG2tE,MAAkB,GAAG3tE,MAAM,KAAK,GAAGA,MAAM,WAAW,GAEjF,EACX,CAAE,MAAOxB,GACL,MAAO,EACX,GA6BEuvE,EAA0BC,IAC5B,IAEI,OAQR,SAAyBx3D,GACrB,GAAa,OAATA,EAAe,CACf,IAAIy3D,EAAY,IAAIp8B,IAMpB,OALAo8B,EAAYz3D,EAAKvY,KAAK2oB,GAAc,CAChCA,EAAK1jB,UAAU,EAAG0jB,EAAKpf,QAAQ,MAC/Bof,EAAK1jB,UAAU0jB,EAAKpf,QAAQ,KAAO,MAEpB5I,OAAOsvE,YAAYD,EAE1C,CACI,OAAO,IAEf,CApBeE,CADYvgE,SAASigE,OAAO7tE,MAAM,GAAGguE,MAAe,GAAGhuE,MAAM,KAAK,GACvCA,MAAM,KAC5C,CAAE,MAAOxB,GACL,OAAO,IACX,GAGS4vE,EAAmB,IAAWL,EAAuBJ,GAgBrDU,EAAa,IACfC,EAAeX,EAAiB,WAG9BY,EAAkB,IACpBD,EAAeX,EAAiB,OAG9Ba,EAAc,KACvB,MAAMC,EAAYH,EAAeX,EAAiB,OAClD,IAAIzb,EAAM,EAIV,YAHkBlgD,IAAdy8D,IACAvc,EAAMt5B,WAAW61C,IAEdvc,CAAG,EAGDwc,EAAe,KACxB,MAAMC,EAAaL,EAAeX,EAAiB,OACnD,IAAIxb,EAAO,EAIX,YAHmBngD,IAAf28D,IACAxc,EAAOv5B,WAAW+1C,IAEfxc,CAAI,EAGTmc,EAAiB,CAACN,EAAoBviE,KACxC,MAAMoiE,EAASE,EAAuBC,GACtC,OAAOH,aAAM,EAANA,EAASpiE,EAAI,C,iFCidxB,QAxjBA,MACI,gBAAW2Q,GACP,OACI,iBAAK7N,MAAM,OAAOD,OAAO,OAAO+Q,QAAQ,YAAYC,MAAM,6BAA4B,cAAa,OAAM,WACrG,iBAAM7f,EAAE,2GACR,iBAAMA,EAAE,gBAAgB8f,KAAK,WAGzC,CACA,iBAAW,GACP,OACI,iBAAKhR,MAAM,OAAOD,OAAO,OAAO+Q,QAAQ,YAAYC,MAAM,6BAA4B,cAAa,OAAM,WACrG,iBAAM7f,EAAE,kBAAkB8f,KAAK,UAC/B,iBAAM9f,EAAE,8MACR,iBAAMA,EAAE,gBAAgB8f,KAAK,WAGzC,CACA,eAAWuF,GACP,OACI,iBAAKzF,QAAQ,YAAY9Q,MAAM,OAAOD,OAAO,OAAOgR,MAAM,6BAA4B,cAAa,OAAM,WACrG,iBAAM7f,EAAE,gBAAgB8f,KAAK,UAC7B,iBAAM9f,EAAE,yEAGpB,CACA,uBAAW8gC,GACP,OACI,gBAAKhyB,MAAM,KAAKD,OAAO,KAAK+Q,QAAQ,YAAYE,KAAK,OAAOD,MAAM,6BAA4B,UAC1F,cAAGlhB,GAAG,uCAAsC,UACxC,iBACIA,GAAG,QACH6wB,SAAS,UACTC,SAAS,UACTzvB,EAAE,27BACF8f,KAAK,eAKzB,CACA,iBAAWgjB,GACP,OACI,iBAAKljB,QAAQ,YAAY9Q,MAAM,OAAOD,OAAO,OAAOgR,MAAM,6BAA4B,cAAa,OAAM,WACrG,iBACIC,KAAK,UACL9f,EAAE,iIAEN,iBAAMA,EAAE,gBAAgB8f,KAAK,WAGzC,CACA,sBAAWqvD,GACP,OACI,iBAAKrgE,MAAM,OAAOD,OAAO,OAAOgR,MAAM,6BAA6BD,QAAQ,YAAW,cAAa,OAAM,WACrG,iBAAM5f,EAAE,gBAAgB8f,KAAK,UAC7B,iBAAM9f,EAAE,w/CACR,iBAAMA,EAAE,4uCAGpB,CACA,0BAAWovE,GACP,OACI,iBAAKtgE,MAAM,OAAOD,OAAO,OAAOgR,MAAM,6BAA6BD,QAAQ,YAAW,cAAa,OAAM,WACrG,iBAAM5f,EAAE,gBAAgB8f,KAAK,UAC7B,iBAAM9f,EAAE,2fACR,iBAAMA,EAAE,+jCAGpB,CACA,yBAAWqvE,GACP,OACI,iBAAKvgE,MAAM,OAAOD,OAAO,OAAOgR,MAAM,6BAA6BD,QAAQ,YAAW,cAAa,OAAM,WACrG,iBAAM5f,EAAE,gBAAgB8f,KAAK,UAC7B,iBAAM9f,EAAE,ywBACR,iBAAMA,EAAE,+LAGpB,CACA,iBAAWsvE,GACP,OACI,iBAAKxgE,MAAM,OAAOD,OAAO,OAAOgR,MAAM,6BAA6BD,QAAQ,YAAW,cAAa,OAAM,WACrG,iBAAM5f,EAAE,gBAAgB8f,KAAK,UAC7B,iBAAM9f,EAAE,0rBACR,iBAAMA,EAAE,svEAGpB,CACA,sBAAWuvE,GACP,OACI,iBACI5wE,GAAG,uCACHkhB,MAAM,6BACN/Q,MAAM,QACND,OAAO,QACP+Q,QAAQ,kBAAiB,cACb,OAAM,WAElB,2BACI,iBACIjhB,GAAG,uCACHmE,EAAE,IACF3C,EAAE,IACF2O,MAAM,QACND,OAAO,QACP2gE,UAAU,iBAAgB,UAE1B,cAAG5/C,UAAU,qBAAoB,UAC7B,cAAGjxB,GAAG,uCAAsC,UACxC,cAAGA,GAAG,uCAAsC,UACxC,iBACIA,GAAG,uCACHqB,EAAE,k5BACF8f,KAAK,OACL0P,SAAS,uBAOjC,cAAG7wB,GAAG,uCAAsC,UACxC,cAAGA,GAAG,uCAAsC,UACxC,cAAGA,GAAG,uCAAsC,UACxC,eAAGA,GAAG,uCAAsC,WACxC,iBACIA,GAAG,uCACHmQ,MAAM,QACND,OAAO,QACPiR,KAAK,UAET,cAAGnhB,GAAG,uCAAsC,UACxC,iBACIqB,EAAE,k5BACF4vB,UAAU,qBACV9P,KAAK,YAGb,cAAG2vD,KAAK,6CAA4C,UAChD,cAAG9wE,GAAG,uCAAsC,UACxC,iBAAMmQ,MAAM,QAAQD,OAAO,QAAQiR,KAAK,iBAGhD,iBACInhB,GAAG,uCACHqB,EAAE,yCACF4vB,UAAU,qBACV9P,KAAK,OACL+P,OAAO,UACPC,cAAc,qBAQ9C,CACA,qBAAW4/C,GACP,OACI,iBAAK5gE,MAAM,OAAOD,OAAO,OAAOgR,MAAM,6BAA6BD,QAAQ,YAAW,cAAa,OAAM,WACrG,iBAAM5f,EAAE,gBAAgB8f,KAAK,UAC7B,iBACItM,UAAU,wBACVxT,EAAE,4bAEN,iBAAMA,EAAE,0zBAGpB,CACA,sBAAW2vE,GACP,OACI,iBACI7gE,MAAM,OACND,OAAO,OACPgR,MAAM,6BACND,QAAQ,YAAW,cACP,OACZE,KAAK,UAAS,WAEd,iBAAM9f,EAAE,gBAAgB8f,KAAK,UAC7B,iBAAM9f,EAAE,sRAGpB,CACA,6BAAW4vE,GACP,OACI,iBAAK9gE,MAAM,QAAQD,OAAO,KAAKgR,MAAM,6BAA6BD,QAAQ,eAAc,cAAa,OAAM,WACvG,iBACI5f,EAAE,wEACF4vB,UAAU,iBACV9P,KAAK,aAET,iBACI9f,EAAE,wFACF4vB,UAAU,iBACV9P,KAAK,aAET,iBACI9f,EAAE,sGACF4vB,UAAU,iBACV9P,KAAK,aAET,iBACI9f,EAAE,oFACF4vB,UAAU,iBACV9P,KAAK,aAET,iBACI9f,EAAE,2EACF4vB,UAAU,iBACV9P,KAAK,aAET,iBACI9f,EAAE,0FACF4vB,UAAU,iBACV9P,KAAK,aAET,iBACI9f,EAAE,+fACF4vB,UAAU,iBACV9P,KAAK,aAET,iBACI9f,EAAE,sKACF4vB,UAAU,iBACV9P,KAAK,cAIrB,CACA,gBAAW+vD,GACP,OACI,iBAAK/gE,MAAM,OAAOD,OAAO,OAAOgR,MAAM,6BAA6BD,QAAQ,YAAW,cAAa,OAAM,WACrG,iBAAM5f,EAAE,gBAAgB8f,KAAK,UAC7B,iBAAM9f,EAAE,4gCACR,iBAAMA,EAAE,shCAGpB,CACA,+BAAW8vE,GACP,OACI,8BACgB,OACZnxE,GAAG,uCACHkhB,MAAM,6BACN/Q,MAAM,KACND,OAAO,QACP+Q,QAAQ,eAAc,UAEtB,cAAGjhB,GAAG,uCAAsC,UACxC,cAAGA,GAAG,uCAAsC,UACxC,cAAGA,GAAG,uCAAsC,UACxC,cAAGA,GAAG,uCAAsC,UACxC,eAAGA,GAAG,uCAAsC,WACxC,iBACIA,GAAG,uCACHmQ,MAAM,KACND,OAAO,KACPiR,KAAK,UAET,cAAGnhB,GAAG,uCAAsC,UACxC,cAAGA,GAAG,uCAAsC,UACxC,eAAGA,GAAG,uCAAsC,WACxC,iBACIA,GAAG,uCACHqB,EAAE,0fACF8f,KAAK,OACL+P,OAAO,aAEX,iBACIlxB,GAAG,uCACHq0D,GAAG,QACHC,GAAG,OACHC,GAAG,QACHC,GAAG,OACHrzC,KAAK,OACL+P,OAAO,aAEX,iBACIlxB,GAAG,uCACHqB,EAAE,oCACF8f,KAAK,OACL+P,OAAO,aAEX,iBACIlxB,GAAG,uCACHqB,EAAE,2NACF8f,KAAK,OACL+P,OAAO,aAEX,oBACIlxB,GAAG,uCACHuuE,OAAO,yDACPptD,KAAK,OACL+P,OAAO,aAEX,iBACIlxB,GAAG,uCACHqB,EAAE,sCACF8f,KAAK,OACL+P,OAAO,UACPC,cAAc,QACdC,eAAe,6BAY/D,CACA,4BAAWggD,GACP,OACI,8BACgB,OACZpxE,GAAG,uCACHkhB,MAAM,6BACN/Q,MAAM,KACND,OAAO,KACP+Q,QAAQ,YAAW,UAEnB,cAAGjhB,GAAG,uCAAsC,UACxC,cAAGA,GAAG,uCAAsC,UACxC,cAAGA,GAAG,uCAAsC,UACxC,cAAGA,GAAG,uCAAsC,UACxC,eAAGA,GAAG,uCAAsC,WACxC,iBACIA,GAAG,uCACHmQ,MAAM,KACND,OAAO,KACPiR,KAAK,UAET,iBACInhB,GAAG,uCACHqB,EAAE,wPACF8f,KAAK,OACL+P,OAAO,aAEX,iBACIlxB,GAAG,uCACHqB,EAAE,4CACF8f,KAAK,OACL+P,OAAO,wBAS3C,CACA,eAAWmgD,GACP,OACI,iBAAKlhE,MAAM,OAAOD,OAAO,OAAO+Q,QAAQ,YAAYC,MAAM,6BAA4B,cAAa,OAAM,WACrG,iBAAM7f,EAAE,gBAAgB8f,KAAK,UAC7B,iBAAM9f,EAAE,6NAGpB,CACA,gBAAWm8C,GACP,OACI,iBAAKrtC,MAAM,OAAOD,OAAO,OAAO+Q,QAAQ,YAAYC,MAAM,6BAA4B,cAAa,OAAM,WACrG,iBAAM7f,EAAE,gBAAgB8f,KAAK,UAC7B,iBAAM9f,EAAE,wDAGpB,CACA,mBAAWk2B,GACP,OACI,iBAAK+5C,QAAQ,MAAMpwD,MAAM,6BAA6BD,QAAQ,YAAW,cAAa,OAAM,WACxF,iBAAM5f,EAAE,gKACR,iBAAMA,EAAE,gBAAgB8f,KAAK,WAGzC,CACA,oBAAWysC,GACP,OACI,gBAAKz9C,MAAM,OAAOD,OAAO,OAAOgR,MAAM,6BAA6BD,QAAQ,cAAa,cAAa,OAAM,UACvG,0BACI,iBAAM5f,EAAE,slDACR,iBAAMA,EAAE,kKACR,mBAAQ8mC,GAAG,UAAUC,GAAG,UAAUvnC,EAAE,cAIpD,CACA,yBAAWyiD,GACP,OACI,iBACIpzC,OAAO,OACPC,MAAM,QACN8Q,QAAQ,gBACRC,MAAM,6BAA4B,cACtB,OAAM,WAElB,iBACIC,KAAK,UACL9f,EAAE,qVAEN,iBACI8f,KAAK,UACL9f,EAAE,yIAEN,iBACI8f,KAAK,UACL9f,EAAE,6qBAEN,iBACI8f,KAAK,UACL9f,EAAE,olBAIlB,CACA,oBAAWovB,GACP,OACI,iBAAKvP,MAAM,6BAA6BD,QAAQ,YAAW,cAAa,OAAM,WAC1E,iBAAM5f,EAAE,iEACR,iBAAM8f,KAAK,OAAO9f,EAAE,sBAGhC,CACA,yBAAW48D,GACP,OACI,iBAAKh9C,QAAQ,YAAW,WACpB,iBACI5f,EAAE,2dACF8f,KAAK,eACLtM,UAAU,aAEd,iBACIxT,EAAE,2dACF8f,KAAK,eACLtM,UAAU,aAI1B,CACA,mBAAWoiD,GACP,OACI,iBAAK/1C,MAAM,6BAA6BD,QAAQ,YAAW,cAAa,OAAO+P,UAAU,QAAO,WAC5F,iBAAM3vB,EAAE,gBAAgB8f,KAAK,UAC7B,iBAAM9f,EAAE,wJAGpB,CACA,wBAAWw3B,GACP,OACI,iBAAK3X,MAAM,6BAA6BD,QAAQ,YAAYE,KAAK,OAAM,WACnE,iBACIA,KAAK,OACL9f,EAAE,wNAEN,iBACI8f,KAAK,OACL9f,EAAE,ubAEN,iBACI8f,KAAK,UACL9f,EAAE,wbAIlB,CACA,gBAAWi2B,GACP,MAAMi6C,EAAe,KAEb,iBAAKtwD,QAAQ,YAAYE,KAAK,OAAOD,MAAM,6BAA4B,WACnE,iBACI7f,EAAE,keACF8f,KAAK,aAET,iBACI9f,EAAE,+nBACF8f,KAAK,eAoBrB,OAAI,UACOowD,KAGP,YAAqB,WAhBjB,iBACI18D,UAAU,eACV7U,GAAG,4CACHkhB,MAAM,6BACND,QAAQ,YAAW,WAEnB,iBAAME,KAAK,UACX,iBAAM9f,EAAE,wsBAabkwE,GACX,CAEA,iBAAWtzD,GACP,OACI,8BAAiB,OAAOgD,QAAQ,YAAYC,MAAM,6BAA4B,UAC1E,iBACIC,KAAK,eACL9f,EAAE,uhBAIlB,CAEA,sBAAWmwE,GACP,OACI,iBAAKvwD,QAAQ,YAAYC,MAAM,6BAA4B,cAAa,OAAO8P,UAAU,QAAO,WAC5F,iBAAM7P,KAAK,OAAO9f,EAAE,qBACpB,iBAAMA,EAAE,iJACR,iBAAMA,EAAE,gBAAgB8f,KAAK,WAGzC,CAEA,sBAAW0jC,GACP,OACI,iBAAK5jC,QAAQ,YAAYC,MAAM,6BAA4B,cAAa,OAAO8P,UAAU,QAAO,WAC5F,iBAAM3vB,EAAE,gBAAgB8f,KAAK,UAC7B,iBAAM9f,EAAE,yDAGpB,CAEA,+BAAWy3B,GACP,OACI,gBAAK7X,QAAQ,YAAW,UACpB,iBACI4P,SAAS,UACTC,SAAS,UACTzvB,EAAE,mkDACF8f,KAAK,kBAIrB,CAEA,mBAAWswD,GACP,OACI,gBAAKxwD,QAAQ,YAAY9Q,MAAM,OAAM,UACjC,iBACI0gB,SAAS,UACTC,SAAS,UACTzvB,EAAE,4yBACF8f,KAAK,kBAIrB,E,8BCxjBW,WAAS0oD,GACQ,YAAxBr6D,SAASkiE,WACTliE,SAASb,iBAAiB,mBAAoBk7D,IAE9CA,IACAr6D,SAAS+E,oBAAoB,mBAAoBs1D,GAEzD,C,iKCaO,MAAM8H,EAAgC,CACzCC,EAAW,KACXC,KAGA,MAAM1R,GAA+C,QAAoB,IAA2B9yD,MAAQ,GAGtGu4B,GAAiB,UACjBksC,GAAmB,QAAyB3R,EAAgBv6B,GAGlE,GAAIksC,EAAiB5vE,OAAS,EAAG,CAC7B,MAAM6vE,EAAuBC,EAAyCF,GACtE,OAAO,OAAY,CACfx3D,gBAAiBy3D,EACjBj3D,KAAM82D,EACN52D,2BAA4B62D,IAC7B14D,MAAK,SAAU84D,GACd,GAAIA,EAAa/vE,OAAS,EAAG,CAGzB,MAAM,UAAEgwE,EAAS,aAAEC,GAAiBC,EAA0BH,EAAcF,GAC5E,OAAIG,GACO,OAAmB,CACtB53D,gBAAiB63D,IAClBh5D,MAAMiC,IACL,MAAMi3D,EAAgB,IAAIJ,KAAiB72D,GAC3C,OAAOk3D,EACHC,EAA4BR,EAAsBM,GACrD,IAGEC,EACHC,EAA4BR,EAAsBE,GAG9D,CACI,OAAO54D,QAAQ5Y,QAAQ,GAE/B,GACJ,CACI,OAAO4Y,QAAQ5Y,QAAQ,GAC3B,EAWS+xE,EAA6B,EACtC5e,qBACAE,MACAC,OACAC,YACAC,iBAEIL,GAAsBA,EAAmB1xD,OAAS,ECpEnD0X,gBAAyC,gBAC5CU,EAAe,IACfw5C,EAAG,KACHC,EAAI,UACJC,EAAS,YACTC,IAEA,IACI,GAAI35C,GAAmBA,EAAgBpY,OAAS,EAAG,CAC/C,MAAMuwE,EAAwBn4D,EAAgB2rB,OACxCysC,EAAe,IAAIh3D,gBACzBg3D,EAAahsE,IAAI,YAAastD,GAC9B0e,EAAahsE,IAAI,cAAeutD,GAChCye,EAAahsE,IAAI,MAAOotD,EAAI3tD,YAC5BusE,EAAahsE,IAAI,MAAOqtD,EAAK5tD,YAC7BssE,EAAsBnqE,SAASvH,IAC3B2xE,EAAa32D,OAAO,eAAgBhb,EAAE,IAG1C,MAAM0Z,EAAM,8BAA8Bi4D,EAAavsE,aACvD,aAAauT,MAAMe,GACdtB,MAAMC,GAAaA,EAASO,SAC5BR,MAAMf,GACCA,GAAQA,EAAKlW,OAAS,EACfkW,EAAKpR,MAAM,EAlCf,IAoCA,KAEVsS,OAAM,IAAM,IACrB,CACA,OAAOD,QAAQ5Y,QAAQ,GAC3B,CAAE,SACE,OAAO4Y,QAAQ5Y,QAAQ,GAC3B,CACJ,CDoCekyE,CAA0B,CAC7Br4D,gBAF6Bs5C,EAAmB3tB,OAGhD6tB,MACAC,OACAC,YACAC,gBACD96C,MAAK,SAAU84D,GACd,OAAIA,EAAa/vE,OAAS,EACfowE,EAAqCL,GAErC54D,QAAQ5Y,QAAQ,GAE/B,IAEO4Y,QAAQ5Y,QAAQ,IAqBlBmyE,EAAuBh5D,MAAOQ,IAMvC,MAAM63D,QAAqB,OAAY,CACnCn3D,KAAMV,EAAOU,KACbI,QAASd,EAAOc,QAChBC,cAAef,EAAOe,cACtBF,QAASb,EAAOa,UAEpB,OAAIg3D,EAAa/vE,OAAS,EACfowE,EAAqCL,GAErC54D,QAAQ5Y,QAAQ,GAC3B,EAGSoyE,EAAyB,CAClCC,EACA/oC,EACA8nC,KAEA,GAAIiB,GAA+BA,EAA4B5wE,OAAS,EACpE,OAAO,OAAY,CACfoY,gBAAiBw4D,EACjB93D,2BAA4B62D,IAC7B14D,MAAM84D,IACL,GAAIA,EAAa/vE,OAAS,EAAG,CACzB,MAAM6wE,EAAqBR,EAA4BO,EAA6Bb,GAC9E3pD,EAAkBgqD,EAAqCS,GAC7DhpC,EAAGzhB,EACP,MACIyhB,EAAG,GACP,IAGJA,EAAG,GACP,EAGEwoC,EAA8B,CAACS,EAAkCf,KACnE,MAAMc,EAAgC,GAEtC,IAAK,IAAIjyE,EAAI,EAAGA,EAAImxE,EAAa/vE,OAAQpB,IAErCiyE,EADqBC,EAAuB5pE,QAAQ6oE,EAAanxE,GAAGyZ,cACjC03D,EAAanxE,GAGpD,OAAOiyE,CAAkB,EAGhBT,EAAwCnlD,GAC1CA,EAAYttB,KACd4oB,IACG,MAAM6P,EAAY,kCAAkC7P,EAAQlO,4CAE5D,OADAkO,EAAQ6P,UAAYA,EACb7P,CAAO,IAKb2pD,EAA4B,CACrCa,EACAC,KAEA,GAAID,EAAiB/wE,SAAWgxE,EAAkBhxE,OAAQ,CACtD,MAAMixE,EAAaF,EAAiBpzE,KAAK2oB,GAASA,EAAKjO,cAEjD64D,EAAWF,aAAiB,EAAjBA,EAAmB3qD,QAAQhO,IAExC,IADmB44D,EAAWjvD,SAAS3J,GAEnC,OAAOA,CAEL,IAGV,MAAO,CACH23D,UAAWkB,EAASlxE,OAAS,EAC7BiwE,aAAciB,EAEtB,CACA,MAAO,CACHlB,WAAW,EACXC,aAAc,GACjB,EAGQkB,EAAmB15C,IACrB,QAAuBA,GAGrB25C,EAAuB,CAAC76C,EAAoB7c,KAC7CA,GAAc,KAAkCxS,QAAQqvB,IAAe,EAG7Eu5C,EAA4C7e,GACvCA,EACFltB,MAAK,EAAGlwB,UAAW9U,IAAmC8U,UAAWjS,KAAoCA,EAAI7C,IACzGpB,KAAI,EAAG0a,iBAA8ChT,OAAOgT,I,qEExN9D,SAAS01D,IACZ,MAAMsD,EAAmB,IAAQjsE,IAAI,gBACrC,GAAIisE,EAAkB,CAClB,MAAM1uE,EAAQ0uE,EAAiB1uE,MAAM,mBACrC,GAAIA,GAASA,EAAM3C,OAAS,EACxB,OAAO2C,EAAM,EAErB,CACA,MAAO,EACX,CACO,SAAS2uE,IACZ,MAAMD,EAAmB,IAAQjsE,IAAI,gBACrC,GAAIisE,EAAkB,CAClB,MAAM1uE,EAAQ0uE,EAAiB1uE,MAAM,2BACrC,GAAIA,GAASA,EAAM3C,OAAS,EACxB,OAAO2C,EAAM,EAErB,CACA,MAAO,EACX,C","sources":["webpack://CarMax.Online.Home.Micro.Site/./node_modules/@contentful/rich-text-types/dist/schemas/generated/ sync ^\\.\\/.*\\.json$","webpack://CarMax.Online.Home.Micro.Site/./node_modules/dayjs/dayjs.min.js","webpack://CarMax.Online.Home.Micro.Site/./node_modules/dayjs/plugin/customParseFormat.js","webpack://CarMax.Online.Home.Micro.Site/./node_modules/dayjs/plugin/duration.js","webpack://CarMax.Online.Home.Micro.Site/./node_modules/react-lazyload/lib/index.js","webpack://CarMax.Online.Home.Micro.Site/./node_modules/react-lazyload/lib/utils/debounce.js","webpack://CarMax.Online.Home.Micro.Site/./node_modules/react-lazyload/lib/utils/event.js","webpack://CarMax.Online.Home.Micro.Site/./node_modules/react-lazyload/lib/utils/scrollParent.js","webpack://CarMax.Online.Home.Micro.Site/./node_modules/react-lazyload/lib/utils/throttle.js","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/api/content-service-api.ts","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/api/myaccount-cookie-api.ts","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/api/rvc-api.ts","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/api/search-api.ts","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/api/small-batch-api.ts","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/components/Dialog/Dialog.tsx","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/components/Dialog/index.ts","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/components/ErrorBoundary.tsx","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/components/MDCSelect.tsx","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/components/TextField/TextField.tsx","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/components/instant-offers/utils/use-focus.tsx","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/components/carousels/carousel/constants.ts","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/components/carousels/carousel/helpers/focusOnActiveCta.ts","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/components/carousels/carousel/helpers/TouchController.ts","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/components/carousels/carousel/helpers/index.ts","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/components/carousels/carousel/helpers/leaveSlider.ts","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/components/carousels/carousel/helpers/getKeyPressHandler.ts","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/components/carousels/carousel/helpers/getFocusHandler.ts","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/components/carousels/carousel/index.ts","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/components/carousels/home-base-hero-carousel/Carousel.tsx","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/components/carousels/home-base-hero-carousel/ReturnVisitorCarousel.tsx","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/components/carousels/home-base-hero-carousel/constants.ts","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/components/instant-offers/utils/format.ts","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/components/snack-bar/SnackBar.tsx","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/context/FBSContext.tsx","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/context/localCarsStore.ts","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/pages/buying-online/components/MiniHomebaseSlideCTA.tsx","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/pages/buying-online/utils/svgs.tsx","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/pages/home/hero/car-tile/utils/allPriorUses.ts","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/pages/home/hero/car-tile/utils/additionalVehicleInfoHelper.ts","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/pages/home/hero/car-tile/VehicleDetailsDialog.tsx","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/pages/home/hero/car-tile/CarTileWrapper.tsx","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/api/getCarImages.ts","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/pages/home/hero/car-tile/carTileUtils.ts","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/pages/home/hero/tile-kebab-menu/TileKebabMenuItemSnackbar.tsx","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/utilities/formatter.ts","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/pages/home/budget-calculator/FinanceCalculator.ts","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/pages/home/budget-calculator/utils/financeCalculatorUtils.ts","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/pages/home/budget-calculator/utils/constants.ts","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/pages/home/budget-calculator/utils/content.tsx","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/components/NumberRoller.tsx","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/components/carousels/vehicle-type-multiselect/Carousel.tsx","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/components/carousels/vehicle-type-multiselect/VehicleTypeTile.tsx","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/components/carousels/vehicle-type-multiselect/VehicleTypeMultiselectCarousel.tsx","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/pages/home/budget-calculator/budget-search/BudgetSearchDialogContent.tsx","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/pages/home/budget-calculator/budget-search/BudgetSearch.tsx","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/pages/home/budget-calculator/utils/financeCalculatorLocalStorage.ts","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/pages/home/budget-calculator/utils/analytics.ts","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/pages/home/budget-calculator/preapproved-budget/PreapprovedBudget.tsx","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/pages/home/budget-calculator/utils/budgetCalculatorUtils.ts","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/pages/home/budget-calculator/BudgetCalculator.tsx","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/utilities/hooks/useInit.ts","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/api/taxes-and-fees-api.ts","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/components/loading-spinner.tsx","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/pages/home/budget-calculator/BudgetCalculatorContainer.tsx","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/api/credit-rates-api.ts","webpack://CarMax.Online.Home.Micro.Site/./node_modules/focus-lock/dist/es2015/constants.js","webpack://CarMax.Online.Home.Micro.Site/./node_modules/use-callback-ref/dist/es2015/assignRef.js","webpack://CarMax.Online.Home.Micro.Site/./node_modules/use-callback-ref/dist/es2015/useMergeRef.js","webpack://CarMax.Online.Home.Micro.Site/./node_modules/react-focus-lock/dist/es2015/FocusGuard.js","webpack://CarMax.Online.Home.Micro.Site/./node_modules/tslib/tslib.es6.js","webpack://CarMax.Online.Home.Micro.Site/./node_modules/use-sidecar/dist/es2015/medium.js","webpack://CarMax.Online.Home.Micro.Site/./node_modules/react-focus-lock/dist/es2015/medium.js","webpack://CarMax.Online.Home.Micro.Site/./node_modules/react-focus-lock/dist/es2015/scope.js","webpack://CarMax.Online.Home.Micro.Site/./node_modules/react-focus-lock/dist/es2015/Lock.js","webpack://CarMax.Online.Home.Micro.Site/./node_modules/use-callback-ref/dist/es2015/useRef.js","webpack://CarMax.Online.Home.Micro.Site/./node_modules/@babel/runtime/helpers/esm/typeof.js","webpack://CarMax.Online.Home.Micro.Site/./node_modules/focus-lock/dist/es2015/utils/array.js","webpack://CarMax.Online.Home.Micro.Site/./node_modules/focus-lock/dist/es2015/utils/is.js","webpack://CarMax.Online.Home.Micro.Site/./node_modules/focus-lock/dist/es2015/utils/tabOrder.js","webpack://CarMax.Online.Home.Micro.Site/./node_modules/focus-lock/dist/es2015/utils/tabUtils.js","webpack://CarMax.Online.Home.Micro.Site/./node_modules/focus-lock/dist/es2015/utils/tabbables.js","webpack://CarMax.Online.Home.Micro.Site/./node_modules/focus-lock/dist/es2015/utils/DOMutils.js","webpack://CarMax.Online.Home.Micro.Site/./node_modules/focus-lock/dist/es2015/utils/getActiveElement.js","webpack://CarMax.Online.Home.Micro.Site/./node_modules/focus-lock/dist/es2015/utils/safe.js","webpack://CarMax.Online.Home.Micro.Site/./node_modules/focus-lock/dist/es2015/utils/all-affected.js","webpack://CarMax.Online.Home.Micro.Site/./node_modules/focus-lock/dist/es2015/focusInside.js","webpack://CarMax.Online.Home.Micro.Site/./node_modules/focus-lock/dist/es2015/commands.js","webpack://CarMax.Online.Home.Micro.Site/./node_modules/focus-lock/dist/es2015/utils/correctFocus.js","webpack://CarMax.Online.Home.Micro.Site/./node_modules/focus-lock/dist/es2015/utils/firstFocus.js","webpack://CarMax.Online.Home.Micro.Site/./node_modules/focus-lock/dist/es2015/solver.js","webpack://CarMax.Online.Home.Micro.Site/./node_modules/focus-lock/dist/es2015/utils/auto-focus.js","webpack://CarMax.Online.Home.Micro.Site/./node_modules/focus-lock/dist/es2015/utils/parenting.js","webpack://CarMax.Online.Home.Micro.Site/./node_modules/focus-lock/dist/es2015/focusSolver.js","webpack://CarMax.Online.Home.Micro.Site/./node_modules/focus-lock/dist/es2015/moveFocusInside.js","webpack://CarMax.Online.Home.Micro.Site/./node_modules/focus-lock/dist/es2015/return-focus.js","webpack://CarMax.Online.Home.Micro.Site/./node_modules/focus-lock/dist/es2015/sibling.js","webpack://CarMax.Online.Home.Micro.Site/./node_modules/react-focus-lock/dist/es2015/util.js","webpack://CarMax.Online.Home.Micro.Site/./node_modules/react-focus-lock/dist/es2015/Trap.js","webpack://CarMax.Online.Home.Micro.Site/./node_modules/focus-lock/dist/es2015/focusables.js","webpack://CarMax.Online.Home.Micro.Site/./node_modules/focus-lock/dist/es2015/focusIsHidden.js","webpack://CarMax.Online.Home.Micro.Site/./node_modules/react-clientside-effect/lib/index.es.js","webpack://CarMax.Online.Home.Micro.Site/./node_modules/@babel/runtime/helpers/esm/defineProperty.js","webpack://CarMax.Online.Home.Micro.Site/./node_modules/@babel/runtime/helpers/esm/toPropertyKey.js","webpack://CarMax.Online.Home.Micro.Site/./node_modules/@babel/runtime/helpers/esm/toPrimitive.js","webpack://CarMax.Online.Home.Micro.Site/./node_modules/react-focus-lock/dist/es2015/Combination.js","webpack://CarMax.Online.Home.Micro.Site/./node_modules/react-focus-lock/dist/es2015/index.js","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/components/instant-offers/InstantOffersLoadingScreen.tsx","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/api/instant-offers-api.ts","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/components/instant-offers/utils/constants.ts","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/components/instant-offers/IneligibleOffer.tsx","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/components/instant-offers/InstantOffersFullScreenDialog.tsx","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/components/instant-offers/InstantOffersDisclaimer.tsx","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/components/instant-offers/EligibleOfferCountdown.tsx","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/components/instant-offers/EligibleOffer.tsx","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/components/instant-offers/ValidatedArea.tsx","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/components/instant-offers/TabBar.tsx","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/components/instant-offers/TabPanel.tsx","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/components/instant-offers/Tab.tsx","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/components/instant-offers/utils/vinValidator.ts","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/components/instant-offers/utils/lookups.ts","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/components/instant-offers/InstantOffersForm.tsx","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/utilities/hooks/useIntersectionObserver.tsx","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/components/CoverSection/CoverSection.tsx","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/components/instant-offers/InstantOffers.tsx","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/components/instant-offers/utils/instantOffersStorage.ts","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/components/instant-offers/InstantOffersContainer.tsx","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/components/instant-offers/InstantOffersSection.tsx","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/components/instant-offers/utils/loadInstantOffersComponentAssets.ts","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/components/instant-offers/InstantOffersLoader.tsx","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/components/carousels/social-proof/Carousel.tsx","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/components/carousels/social-proof/SocialProofPostBuilder.ts","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/components/carousels/social-proof/SocialProofCard.tsx","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/components/transitions/FadeInOnScroll.tsx","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/components/carousels/social-proof/SocialProofModal/SocialProofModal.tsx","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/components/carousels/social-proof/SocialProof.tsx","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/api/social-proof-api.ts","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/components/carousels/social-proof/SocialProofContainer.tsx","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/components/carousels/research-articles/Carousel.tsx","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/components/carousels/research-articles/ResearchArticlesTile.tsx","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/utilities/helpers.ts","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/api/research-service-api.ts","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/components/carousels/research-articles/ResearchArticlesPrompt.tsx","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/components/carousels/research-articles/ResearchArticlesContainer.tsx","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/components/StatePricingDisclaimer.tsx","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/api/disclaimers-api.ts","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/components/StatePricingDisclaimerContainer.tsx","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/pages/home/hero/HeroFeaturedContent.tsx","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/pages/home/hero/first-time/FirstTimeHero.tsx","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/api/customer-progression-api.ts","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/pages/home/utilities/transfersTileBuilder.ts","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/pages/home/utilities/recommendationsBuilder.ts","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/components/carousels/home-base-hero-carousel/SkeletonVehicleTile.tsx","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/components/carousels/home-base-hero-carousel/RecommendationsPlaceholderCarousel.tsx","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/pages/home/hero/home-base/carousels/RecommendedCarousel.tsx","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/components/carousels/home-base-hero-carousel/RecentlyViewedPlaceholderCarousel.tsx","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/pages/home/hero/home-base/carousels/RecentlyViewedCarousel.tsx","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/pages/home/hero/recent-search-tile/RecentSearchTileHeader.tsx","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/pages/home/hero/recent-search-tile/RecentSearchTileImg.tsx","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/pages/home/hero/tile-kebab-menu/TileKebabMenu.tsx","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/utilities/uuid.ts","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/pages/home/hero/tile-kebab-menu/TileKebabMenuItem.tsx","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/pages/home/utilities/addQueryParam.ts","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/pages/home/hero/recent-search-tile/RecentSearchTile.tsx","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/components/carousels/home-base-hero-carousel/ReturnVisitorRecentSearchesCarousel.tsx","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/components/carousels/home-base-hero-carousel/SearchedPlaceholderCarousel.tsx","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/pages/home/hero/home-base/carousels/SearchedCarousel.tsx","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/pages/home/campaigns/ServerSideExperimentContext.tsx","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/pages/home/utilities/experiments.ts","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/api/recent-search-api.ts","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/pages/home/hero/home-base/HomeBaseTabs.tsx","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/pages/home/hero/home-base/HomeBaseTransferStatusModal.tsx","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/components/carousels/car-tiles/CarTilesCarousel/BaseCarousel.tsx","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/components/carousels/car-tiles/CarTilesCarousel/SkeletonVehicleTile.tsx","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/components/carousels/car-tiles/CarTilesCarousel/PlaceholderCarousel.tsx","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/components/carousels/car-tiles/CarTilesCarousel/subcomponents/RelatedSearchesTile/RelatedSearchesTile.tsx","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/components/carousels/car-tiles/CarTilesCarousel/CarTilesCarousel.tsx","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/pages/home/HeroRefactor/Store/index.ts","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/pages/home/homebase-optimization-test/OptViewed/ViewedVehiclesCarousel/OptViewed.tsx","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/pages/home/hero/home-base/HomeBaseHero.tsx","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/pages/home/hero/HeroContainer.tsx","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/pages/home/HeroRefactor/Store/models.ts","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/pages/home/HeroRefactor/services/services.ts","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/pages/home/HeroRefactor/HomeBase/HomeBase.tsx","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/pages/home/HeroRefactor/FirstTimeHero/FirstTimeHero.tsx","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/pages/home/HeroRefactor/HeroRefactor.tsx","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/pages/home/local-cars/LocalCarsSkeletonVehicleTile.tsx","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/pages/home/local-cars/LocalCarsPlaceholderCarousel.tsx","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/pages/home/local-cars/LocalCars.tsx","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/pages/home/local-cars/LocalCarsLoader.tsx","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/pages/home/homebase-optimization-test/recent-searches/RecentSearchesContainer.tsx","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/pages/home/homebase-optimization-test/YouMightLikeContainer.tsx","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/pages/home/link-farm/LinkFarmTab.tsx","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/utilities/smoothScroll.ts","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/pages/home/link-farm/LinkFarmTabContent.tsx","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/pages/home/link-farm/LinkFarm.tsx","webpack://CarMax.Online.Home.Micro.Site/./node_modules/@kmx/mui-icons/dist/icons/KmxDiamondStroked.js","webpack://CarMax.Online.Home.Micro.Site/./node_modules/@kmx/mui-icons/dist/icons/KmxLocationStroked.js","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/pages/home/the-carmax-difference/TheCarMaxDifference.tsx","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/pages/home/index.tsx","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/pages/home/utilities/constants.ts","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/pages/home/utilities/helpers.ts","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/pages/home/utilities/nearestStoreLinkBuilder.ts","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/pages/home/utilities/savedVehicles.ts","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/pages/home/utilities/svg.tsx","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/pages/home/utilities/viewedVehiclesTileBuilder.ts","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/theme/index.ts","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/utilities/analytics.ts","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/utilities/cookieHelper.ts","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/utilities/icons.tsx","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/utilities/onDomContentLoaded.ts","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/utilities/vehicleTileBuilder.ts","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/api/vehicle-recommendations-api.ts","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/utilities/visitor-cookie.ts"],"sourcesContent":["var map = {\n\t\"./asset-hyperlink.json\": 3502,\n\t\"./blockquote.json\": 7784,\n\t\"./document.json\": 4634,\n\t\"./embedded-asset-block.json\": 6188,\n\t\"./embedded-entry-block.json\": 4160,\n\t\"./embedded-entry-inline.json\": 3290,\n\t\"./embedded-resource-block.json\": 7904,\n\t\"./embedded-resource-inline.json\": 7242,\n\t\"./entry-hyperlink.json\": 830,\n\t\"./heading-1.json\": 2713,\n\t\"./heading-2.json\": 3036,\n\t\"./heading-3.json\": 8399,\n\t\"./heading-4.json\": 1634,\n\t\"./heading-5.json\": 8317,\n\t\"./heading-6.json\": 2800,\n\t\"./hr.json\": 8381,\n\t\"./hyperlink.json\": 1203,\n\t\"./list-item.json\": 4421,\n\t\"./ordered-list.json\": 3867,\n\t\"./paragraph.json\": 6311,\n\t\"./resource-hyperlink.json\": 7272,\n\t\"./table-cell.json\": 5156,\n\t\"./table-header-cell.json\": 8132,\n\t\"./table-row.json\": 3388,\n\t\"./table.json\": 5825,\n\t\"./text.json\": 4084,\n\t\"./unordered-list.json\": 1464\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 5152;","!function(t,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define(e):(t=\"undefined\"!=typeof globalThis?globalThis:t||self).dayjs=e()}(this,(function(){\"use strict\";var t=1e3,e=6e4,n=36e5,r=\"millisecond\",i=\"second\",s=\"minute\",u=\"hour\",a=\"day\",o=\"week\",c=\"month\",f=\"quarter\",h=\"year\",d=\"date\",l=\"Invalid Date\",$=/^(\\d{4})[-/]?(\\d{1,2})?[-/]?(\\d{0,2})[Tt\\s]*(\\d{1,2})?:?(\\d{1,2})?:?(\\d{1,2})?[.:]?(\\d+)?$/,y=/\\[([^\\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,M={name:\"en\",weekdays:\"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\".split(\"_\"),months:\"January_February_March_April_May_June_July_August_September_October_November_December\".split(\"_\"),ordinal:function(t){var e=[\"th\",\"st\",\"nd\",\"rd\"],n=t%100;return\"[\"+t+(e[(n-20)%10]||e[n]||e[0])+\"]\"}},m=function(t,e,n){var r=String(t);return!r||r.length>=e?t:\"\"+Array(e+1-r.length).join(n)+t},v={s:m,z:function(t){var e=-t.utcOffset(),n=Math.abs(e),r=Math.floor(n/60),i=n%60;return(e<=0?\"+\":\"-\")+m(r,2,\"0\")+\":\"+m(i,2,\"0\")},m:function t(e,n){if(e.date()<n.date())return-t(n,e);var r=12*(n.year()-e.year())+(n.month()-e.month()),i=e.clone().add(r,c),s=n-i<0,u=e.clone().add(r+(s?-1:1),c);return+(-(r+(n-i)/(s?i-u:u-i))||0)},a:function(t){return t<0?Math.ceil(t)||0:Math.floor(t)},p:function(t){return{M:c,y:h,w:o,d:a,D:d,h:u,m:s,s:i,ms:r,Q:f}[t]||String(t||\"\").toLowerCase().replace(/s$/,\"\")},u:function(t){return void 0===t}},g=\"en\",D={};D[g]=M;var p=\"$isDayjsObject\",S=function(t){return t instanceof _||!(!t||!t[p])},w=function t(e,n,r){var i;if(!e)return g;if(\"string\"==typeof e){var s=e.toLowerCase();D[s]&&(i=s),n&&(D[s]=n,i=s);var u=e.split(\"-\");if(!i&&u.length>1)return t(u[0])}else{var a=e.name;D[a]=e,i=a}return!r&&i&&(g=i),i||!r&&g},O=function(t,e){if(S(t))return t.clone();var n=\"object\"==typeof e?e:{};return n.date=t,n.args=arguments,new _(n)},b=v;b.l=w,b.i=S,b.w=function(t,e){return O(t,{locale:e.$L,utc:e.$u,x:e.$x,$offset:e.$offset})};var _=function(){function M(t){this.$L=w(t.locale,null,!0),this.parse(t),this.$x=this.$x||t.x||{},this[p]=!0}var m=M.prototype;return m.parse=function(t){this.$d=function(t){var e=t.date,n=t.utc;if(null===e)return new Date(NaN);if(b.u(e))return new Date;if(e instanceof Date)return new Date(e);if(\"string\"==typeof e&&!/Z$/i.test(e)){var r=e.match($);if(r){var i=r[2]-1||0,s=(r[7]||\"0\").substring(0,3);return n?new Date(Date.UTC(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)):new Date(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)}}return new Date(e)}(t),this.init()},m.init=function(){var t=this.$d;this.$y=t.getFullYear(),this.$M=t.getMonth(),this.$D=t.getDate(),this.$W=t.getDay(),this.$H=t.getHours(),this.$m=t.getMinutes(),this.$s=t.getSeconds(),this.$ms=t.getMilliseconds()},m.$utils=function(){return b},m.isValid=function(){return!(this.$d.toString()===l)},m.isSame=function(t,e){var n=O(t);return this.startOf(e)<=n&&n<=this.endOf(e)},m.isAfter=function(t,e){return O(t)<this.startOf(e)},m.isBefore=function(t,e){return this.endOf(e)<O(t)},m.$g=function(t,e,n){return b.u(t)?this[e]:this.set(n,t)},m.unix=function(){return Math.floor(this.valueOf()/1e3)},m.valueOf=function(){return this.$d.getTime()},m.startOf=function(t,e){var n=this,r=!!b.u(e)||e,f=b.p(t),l=function(t,e){var i=b.w(n.$u?Date.UTC(n.$y,e,t):new Date(n.$y,e,t),n);return r?i:i.endOf(a)},$=function(t,e){return b.w(n.toDate()[t].apply(n.toDate(\"s\"),(r?[0,0,0,0]:[23,59,59,999]).slice(e)),n)},y=this.$W,M=this.$M,m=this.$D,v=\"set\"+(this.$u?\"UTC\":\"\");switch(f){case h:return r?l(1,0):l(31,11);case c:return r?l(1,M):l(0,M+1);case o:var g=this.$locale().weekStart||0,D=(y<g?y+7:y)-g;return l(r?m-D:m+(6-D),M);case a:case d:return $(v+\"Hours\",0);case u:return $(v+\"Minutes\",1);case s:return $(v+\"Seconds\",2);case i:return $(v+\"Milliseconds\",3);default:return this.clone()}},m.endOf=function(t){return this.startOf(t,!1)},m.$set=function(t,e){var n,o=b.p(t),f=\"set\"+(this.$u?\"UTC\":\"\"),l=(n={},n[a]=f+\"Date\",n[d]=f+\"Date\",n[c]=f+\"Month\",n[h]=f+\"FullYear\",n[u]=f+\"Hours\",n[s]=f+\"Minutes\",n[i]=f+\"Seconds\",n[r]=f+\"Milliseconds\",n)[o],$=o===a?this.$D+(e-this.$W):e;if(o===c||o===h){var y=this.clone().set(d,1);y.$d[l]($),y.init(),this.$d=y.set(d,Math.min(this.$D,y.daysInMonth())).$d}else l&&this.$d[l]($);return this.init(),this},m.set=function(t,e){return this.clone().$set(t,e)},m.get=function(t){return this[b.p(t)]()},m.add=function(r,f){var d,l=this;r=Number(r);var $=b.p(f),y=function(t){var e=O(l);return b.w(e.date(e.date()+Math.round(t*r)),l)};if($===c)return this.set(c,this.$M+r);if($===h)return this.set(h,this.$y+r);if($===a)return y(1);if($===o)return y(7);var M=(d={},d[s]=e,d[u]=n,d[i]=t,d)[$]||1,m=this.$d.getTime()+r*M;return b.w(m,this)},m.subtract=function(t,e){return this.add(-1*t,e)},m.format=function(t){var e=this,n=this.$locale();if(!this.isValid())return n.invalidDate||l;var r=t||\"YYYY-MM-DDTHH:mm:ssZ\",i=b.z(this),s=this.$H,u=this.$m,a=this.$M,o=n.weekdays,c=n.months,f=n.meridiem,h=function(t,n,i,s){return t&&(t[n]||t(e,r))||i[n].slice(0,s)},d=function(t){return b.s(s%12||12,t,\"0\")},$=f||function(t,e,n){var r=t<12?\"AM\":\"PM\";return n?r.toLowerCase():r};return r.replace(y,(function(t,r){return r||function(t){switch(t){case\"YY\":return String(e.$y).slice(-2);case\"YYYY\":return b.s(e.$y,4,\"0\");case\"M\":return a+1;case\"MM\":return b.s(a+1,2,\"0\");case\"MMM\":return h(n.monthsShort,a,c,3);case\"MMMM\":return h(c,a);case\"D\":return e.$D;case\"DD\":return b.s(e.$D,2,\"0\");case\"d\":return String(e.$W);case\"dd\":return h(n.weekdaysMin,e.$W,o,2);case\"ddd\":return h(n.weekdaysShort,e.$W,o,3);case\"dddd\":return o[e.$W];case\"H\":return String(s);case\"HH\":return b.s(s,2,\"0\");case\"h\":return d(1);case\"hh\":return d(2);case\"a\":return $(s,u,!0);case\"A\":return $(s,u,!1);case\"m\":return String(u);case\"mm\":return b.s(u,2,\"0\");case\"s\":return String(e.$s);case\"ss\":return b.s(e.$s,2,\"0\");case\"SSS\":return b.s(e.$ms,3,\"0\");case\"Z\":return i}return null}(t)||i.replace(\":\",\"\")}))},m.utcOffset=function(){return 15*-Math.round(this.$d.getTimezoneOffset()/15)},m.diff=function(r,d,l){var $,y=this,M=b.p(d),m=O(r),v=(m.utcOffset()-this.utcOffset())*e,g=this-m,D=function(){return b.m(y,m)};switch(M){case h:$=D()/12;break;case c:$=D();break;case f:$=D()/3;break;case o:$=(g-v)/6048e5;break;case a:$=(g-v)/864e5;break;case u:$=g/n;break;case s:$=g/e;break;case i:$=g/t;break;default:$=g}return l?$:b.a($)},m.daysInMonth=function(){return this.endOf(c).$D},m.$locale=function(){return D[this.$L]},m.locale=function(t,e){if(!t)return this.$L;var n=this.clone(),r=w(t,e,!0);return r&&(n.$L=r),n},m.clone=function(){return b.w(this.$d,this)},m.toDate=function(){return new Date(this.valueOf())},m.toJSON=function(){return this.isValid()?this.toISOString():null},m.toISOString=function(){return this.$d.toISOString()},m.toString=function(){return this.$d.toUTCString()},M}(),k=_.prototype;return O.prototype=k,[[\"$ms\",r],[\"$s\",i],[\"$m\",s],[\"$H\",u],[\"$W\",a],[\"$M\",c],[\"$y\",h],[\"$D\",d]].forEach((function(t){k[t[1]]=function(e){return this.$g(e,t[0],t[1])}})),O.extend=function(t,e){return t.$i||(t(e,_,O),t.$i=!0),O},O.locale=w,O.isDayjs=S,O.unix=function(t){return O(1e3*t)},O.en=D[g],O.Ls=D,O.p={},O}));","!function(e,t){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define(t):(e=\"undefined\"!=typeof globalThis?globalThis:e||self).dayjs_plugin_customParseFormat=t()}(this,(function(){\"use strict\";var e={LTS:\"h:mm:ss A\",LT:\"h:mm A\",L:\"MM/DD/YYYY\",LL:\"MMMM D, YYYY\",LLL:\"MMMM D, YYYY h:mm A\",LLLL:\"dddd, MMMM D, YYYY h:mm A\"},t=/(\\[[^[]*\\])|([-_:/.,()\\s]+)|(A|a|YYYY|YY?|MM?M?M?|Do|DD?|hh?|HH?|mm?|ss?|S{1,3}|z|ZZ?)/g,n=/\\d\\d/,r=/\\d\\d?/,i=/\\d*[^-_:/,()\\s\\d]+/,o={},s=function(e){return(e=+e)+(e>68?1900:2e3)};var a=function(e){return function(t){this[e]=+t}},f=[/[+-]\\d\\d:?(\\d\\d)?|Z/,function(e){(this.zone||(this.zone={})).offset=function(e){if(!e)return 0;if(\"Z\"===e)return 0;var t=e.match(/([+-]|\\d\\d)/g),n=60*t[1]+(+t[2]||0);return 0===n?0:\"+\"===t[0]?-n:n}(e)}],h=function(e){var t=o[e];return t&&(t.indexOf?t:t.s.concat(t.f))},u=function(e,t){var n,r=o.meridiem;if(r){for(var i=1;i<=24;i+=1)if(e.indexOf(r(i,0,t))>-1){n=i>12;break}}else n=e===(t?\"pm\":\"PM\");return n},d={A:[i,function(e){this.afternoon=u(e,!1)}],a:[i,function(e){this.afternoon=u(e,!0)}],S:[/\\d/,function(e){this.milliseconds=100*+e}],SS:[n,function(e){this.milliseconds=10*+e}],SSS:[/\\d{3}/,function(e){this.milliseconds=+e}],s:[r,a(\"seconds\")],ss:[r,a(\"seconds\")],m:[r,a(\"minutes\")],mm:[r,a(\"minutes\")],H:[r,a(\"hours\")],h:[r,a(\"hours\")],HH:[r,a(\"hours\")],hh:[r,a(\"hours\")],D:[r,a(\"day\")],DD:[n,a(\"day\")],Do:[i,function(e){var t=o.ordinal,n=e.match(/\\d+/);if(this.day=n[0],t)for(var r=1;r<=31;r+=1)t(r).replace(/\\[|\\]/g,\"\")===e&&(this.day=r)}],M:[r,a(\"month\")],MM:[n,a(\"month\")],MMM:[i,function(e){var t=h(\"months\"),n=(h(\"monthsShort\")||t.map((function(e){return e.slice(0,3)}))).indexOf(e)+1;if(n<1)throw new Error;this.month=n%12||n}],MMMM:[i,function(e){var t=h(\"months\").indexOf(e)+1;if(t<1)throw new Error;this.month=t%12||t}],Y:[/[+-]?\\d+/,a(\"year\")],YY:[n,function(e){this.year=s(e)}],YYYY:[/\\d{4}/,a(\"year\")],Z:f,ZZ:f};function c(n){var r,i;r=n,i=o&&o.formats;for(var s=(n=r.replace(/(\\[[^\\]]+])|(LTS?|l{1,4}|L{1,4})/g,(function(t,n,r){var o=r&&r.toUpperCase();return n||i[r]||e[r]||i[o].replace(/(\\[[^\\]]+])|(MMMM|MM|DD|dddd)/g,(function(e,t,n){return t||n.slice(1)}))}))).match(t),a=s.length,f=0;f<a;f+=1){var h=s[f],u=d[h],c=u&&u[0],l=u&&u[1];s[f]=l?{regex:c,parser:l}:h.replace(/^\\[|\\]$/g,\"\")}return function(e){for(var t={},n=0,r=0;n<a;n+=1){var i=s[n];if(\"string\"==typeof i)r+=i.length;else{var o=i.regex,f=i.parser,h=e.slice(r),u=o.exec(h)[0];f.call(t,u),e=e.replace(u,\"\")}}return function(e){var t=e.afternoon;if(void 0!==t){var n=e.hours;t?n<12&&(e.hours+=12):12===n&&(e.hours=0),delete e.afternoon}}(t),t}}return function(e,t,n){n.p.customParseFormat=!0,e&&e.parseTwoDigitYear&&(s=e.parseTwoDigitYear);var r=t.prototype,i=r.parse;r.parse=function(e){var t=e.date,r=e.utc,s=e.args;this.$u=r;var a=s[1];if(\"string\"==typeof a){var f=!0===s[2],h=!0===s[3],u=f||h,d=s[2];h&&(d=s[2]),o=this.$locale(),!f&&d&&(o=n.Ls[d]),this.$d=function(e,t,n){try{if([\"x\",\"X\"].indexOf(t)>-1)return new Date((\"X\"===t?1e3:1)*e);var r=c(t)(e),i=r.year,o=r.month,s=r.day,a=r.hours,f=r.minutes,h=r.seconds,u=r.milliseconds,d=r.zone,l=new Date,m=s||(i||o?1:l.getDate()),M=i||l.getFullYear(),Y=0;i&&!o||(Y=o>0?o-1:l.getMonth());var p=a||0,v=f||0,D=h||0,g=u||0;return d?new Date(Date.UTC(M,Y,m,p,v,D,g+60*d.offset*1e3)):n?new Date(Date.UTC(M,Y,m,p,v,D,g)):new Date(M,Y,m,p,v,D,g)}catch(e){return new Date(\"\")}}(t,a,r),this.init(),d&&!0!==d&&(this.$L=this.locale(d).$L),u&&t!=this.format(a)&&(this.$d=new Date(\"\")),o={}}else if(a instanceof Array)for(var l=a.length,m=1;m<=l;m+=1){s[1]=a[m-1];var M=n.apply(this,s);if(M.isValid()){this.$d=M.$d,this.$L=M.$L,this.init();break}m===l&&(this.$d=new Date(\"\"))}else i.call(this,e)}}}));","!function(t,s){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=s():\"function\"==typeof define&&define.amd?define(s):(t=\"undefined\"!=typeof globalThis?globalThis:t||self).dayjs_plugin_duration=s()}(this,(function(){\"use strict\";var t,s,n=1e3,i=6e4,e=36e5,r=864e5,o=/\\[([^\\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,u=31536e6,d=2628e6,a=/^(-|\\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/,h={years:u,months:d,days:r,hours:e,minutes:i,seconds:n,milliseconds:1,weeks:6048e5},c=function(t){return t instanceof g},f=function(t,s,n){return new g(t,n,s.$l)},m=function(t){return s.p(t)+\"s\"},l=function(t){return t<0},$=function(t){return l(t)?Math.ceil(t):Math.floor(t)},y=function(t){return Math.abs(t)},v=function(t,s){return t?l(t)?{negative:!0,format:\"\"+y(t)+s}:{negative:!1,format:\"\"+t+s}:{negative:!1,format:\"\"}},g=function(){function l(t,s,n){var i=this;if(this.$d={},this.$l=n,void 0===t&&(this.$ms=0,this.parseFromMilliseconds()),s)return f(t*h[m(s)],this);if(\"number\"==typeof t)return this.$ms=t,this.parseFromMilliseconds(),this;if(\"object\"==typeof t)return Object.keys(t).forEach((function(s){i.$d[m(s)]=t[s]})),this.calMilliseconds(),this;if(\"string\"==typeof t){var e=t.match(a);if(e){var r=e.slice(2).map((function(t){return null!=t?Number(t):0}));return this.$d.years=r[0],this.$d.months=r[1],this.$d.weeks=r[2],this.$d.days=r[3],this.$d.hours=r[4],this.$d.minutes=r[5],this.$d.seconds=r[6],this.calMilliseconds(),this}}return this}var y=l.prototype;return y.calMilliseconds=function(){var t=this;this.$ms=Object.keys(this.$d).reduce((function(s,n){return s+(t.$d[n]||0)*h[n]}),0)},y.parseFromMilliseconds=function(){var t=this.$ms;this.$d.years=$(t/u),t%=u,this.$d.months=$(t/d),t%=d,this.$d.days=$(t/r),t%=r,this.$d.hours=$(t/e),t%=e,this.$d.minutes=$(t/i),t%=i,this.$d.seconds=$(t/n),t%=n,this.$d.milliseconds=t},y.toISOString=function(){var t=v(this.$d.years,\"Y\"),s=v(this.$d.months,\"M\"),n=+this.$d.days||0;this.$d.weeks&&(n+=7*this.$d.weeks);var i=v(n,\"D\"),e=v(this.$d.hours,\"H\"),r=v(this.$d.minutes,\"M\"),o=this.$d.seconds||0;this.$d.milliseconds&&(o+=this.$d.milliseconds/1e3,o=Math.round(1e3*o)/1e3);var u=v(o,\"S\"),d=t.negative||s.negative||i.negative||e.negative||r.negative||u.negative,a=e.format||r.format||u.format?\"T\":\"\",h=(d?\"-\":\"\")+\"P\"+t.format+s.format+i.format+a+e.format+r.format+u.format;return\"P\"===h||\"-P\"===h?\"P0D\":h},y.toJSON=function(){return this.toISOString()},y.format=function(t){var n=t||\"YYYY-MM-DDTHH:mm:ss\",i={Y:this.$d.years,YY:s.s(this.$d.years,2,\"0\"),YYYY:s.s(this.$d.years,4,\"0\"),M:this.$d.months,MM:s.s(this.$d.months,2,\"0\"),D:this.$d.days,DD:s.s(this.$d.days,2,\"0\"),H:this.$d.hours,HH:s.s(this.$d.hours,2,\"0\"),m:this.$d.minutes,mm:s.s(this.$d.minutes,2,\"0\"),s:this.$d.seconds,ss:s.s(this.$d.seconds,2,\"0\"),SSS:s.s(this.$d.milliseconds,3,\"0\")};return n.replace(o,(function(t,s){return s||String(i[t])}))},y.as=function(t){return this.$ms/h[m(t)]},y.get=function(t){var s=this.$ms,n=m(t);return\"milliseconds\"===n?s%=1e3:s=\"weeks\"===n?$(s/h[n]):this.$d[n],s||0},y.add=function(t,s,n){var i;return i=s?t*h[m(s)]:c(t)?t.$ms:f(t,this).$ms,f(this.$ms+i*(n?-1:1),this)},y.subtract=function(t,s){return this.add(t,s,!0)},y.locale=function(t){var s=this.clone();return s.$l=t,s},y.clone=function(){return f(this.$ms,this)},y.humanize=function(s){return t().add(this.$ms,\"ms\").locale(this.$l).fromNow(!s)},y.valueOf=function(){return this.asMilliseconds()},y.milliseconds=function(){return this.get(\"milliseconds\")},y.asMilliseconds=function(){return this.as(\"milliseconds\")},y.seconds=function(){return this.get(\"seconds\")},y.asSeconds=function(){return this.as(\"seconds\")},y.minutes=function(){return this.get(\"minutes\")},y.asMinutes=function(){return this.as(\"minutes\")},y.hours=function(){return this.get(\"hours\")},y.asHours=function(){return this.as(\"hours\")},y.days=function(){return this.get(\"days\")},y.asDays=function(){return this.as(\"days\")},y.weeks=function(){return this.get(\"weeks\")},y.asWeeks=function(){return this.as(\"weeks\")},y.months=function(){return this.get(\"months\")},y.asMonths=function(){return this.as(\"months\")},y.years=function(){return this.get(\"years\")},y.asYears=function(){return this.as(\"years\")},l}(),p=function(t,s,n){return t.add(s.years()*n,\"y\").add(s.months()*n,\"M\").add(s.days()*n,\"d\").add(s.hours()*n,\"h\").add(s.minutes()*n,\"m\").add(s.seconds()*n,\"s\").add(s.milliseconds()*n,\"ms\")};return function(n,i,e){t=e,s=e().$utils(),e.duration=function(t,s){var n=e.locale();return f(t,{$l:n},s)},e.isDuration=c;var r=i.prototype.add,o=i.prototype.subtract;i.prototype.add=function(t,s){return c(t)?p(this,t,1):r.bind(this)(t,s)},i.prototype.subtract=function(t,s){return c(t)?p(this,t,-1):o.bind(this)(t,s)}}}));","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.forceVisible = exports.forceCheck = exports.lazyload = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _propTypes = require('prop-types');\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nvar _event = require('./utils/event');\n\nvar _scrollParent = require('./utils/scrollParent');\n\nvar _scrollParent2 = _interopRequireDefault(_scrollParent);\n\nvar _debounce = require('./utils/debounce');\n\nvar _debounce2 = _interopRequireDefault(_debounce);\n\nvar _throttle = require('./utils/throttle');\n\nvar _throttle2 = _interopRequireDefault(_throttle);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**\n                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * react-lazyload\n                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */\n\n\nvar defaultBoundingClientRect = {\n  top: 0,\n  right: 0,\n  bottom: 0,\n  left: 0,\n  width: 0,\n  height: 0\n};\nvar LISTEN_FLAG = 'data-lazyload-listened';\nvar listeners = [];\nvar pending = [];\n\n// try to handle passive events\nvar passiveEventSupported = false;\ntry {\n  var opts = Object.defineProperty({}, 'passive', {\n    get: function get() {\n      passiveEventSupported = true;\n    }\n  });\n  window.addEventListener('test', null, opts);\n} catch (e) {}\n// if they are supported, setup the optional params\n// IMPORTANT: FALSE doubles as the default CAPTURE value!\nvar passiveEvent = passiveEventSupported ? { capture: false, passive: true } : false;\n\n/**\n * Check if `component` is visible in overflow container `parent`\n * @param  {node} component React component\n * @param  {node} parent    component's scroll parent\n * @return {bool}\n */\nvar checkOverflowVisible = function checkOverflowVisible(component, parent) {\n  var node = component.ref;\n\n  var parentTop = void 0;\n  var parentLeft = void 0;\n  var parentHeight = void 0;\n  var parentWidth = void 0;\n\n  try {\n    var _parent$getBoundingCl = parent.getBoundingClientRect();\n\n    parentTop = _parent$getBoundingCl.top;\n    parentLeft = _parent$getBoundingCl.left;\n    parentHeight = _parent$getBoundingCl.height;\n    parentWidth = _parent$getBoundingCl.width;\n  } catch (e) {\n    parentTop = defaultBoundingClientRect.top;\n    parentLeft = defaultBoundingClientRect.left;\n    parentHeight = defaultBoundingClientRect.height;\n    parentWidth = defaultBoundingClientRect.width;\n  }\n\n  var windowInnerHeight = window.innerHeight || document.documentElement.clientHeight;\n  var windowInnerWidth = window.innerWidth || document.documentElement.clientWidth;\n\n  // calculate top and height of the intersection of the element's scrollParent and viewport\n  var intersectionTop = Math.max(parentTop, 0); // intersection's top relative to viewport\n  var intersectionLeft = Math.max(parentLeft, 0); // intersection's left relative to viewport\n  var intersectionHeight = Math.min(windowInnerHeight, parentTop + parentHeight) - intersectionTop; // height\n  var intersectionWidth = Math.min(windowInnerWidth, parentLeft + parentWidth) - intersectionLeft; // width\n\n  // check whether the element is visible in the intersection\n  var top = void 0;\n  var left = void 0;\n  var height = void 0;\n  var width = void 0;\n\n  try {\n    var _node$getBoundingClie = node.getBoundingClientRect();\n\n    top = _node$getBoundingClie.top;\n    left = _node$getBoundingClie.left;\n    height = _node$getBoundingClie.height;\n    width = _node$getBoundingClie.width;\n  } catch (e) {\n    top = defaultBoundingClientRect.top;\n    left = defaultBoundingClientRect.left;\n    height = defaultBoundingClientRect.height;\n    width = defaultBoundingClientRect.width;\n  }\n\n  var offsetTop = top - intersectionTop; // element's top relative to intersection\n  var offsetLeft = left - intersectionLeft; // element's left relative to intersection\n\n  var offsets = Array.isArray(component.props.offset) ? component.props.offset : [component.props.offset, component.props.offset]; // Be compatible with previous API\n\n  return offsetTop - offsets[0] <= intersectionHeight && offsetTop + height + offsets[1] >= 0 && offsetLeft - offsets[0] <= intersectionWidth && offsetLeft + width + offsets[1] >= 0;\n};\n\n/**\n * Check if `component` is visible in document\n * @param  {node} component React component\n * @return {bool}\n */\nvar checkNormalVisible = function checkNormalVisible(component) {\n  var node = component.ref;\n\n  // If this element is hidden by css rules somehow, it's definitely invisible\n  if (!(node.offsetWidth || node.offsetHeight || node.getClientRects().length)) return false;\n\n  var top = void 0;\n  var elementHeight = void 0;\n\n  try {\n    var _node$getBoundingClie2 = node.getBoundingClientRect();\n\n    top = _node$getBoundingClie2.top;\n    elementHeight = _node$getBoundingClie2.height;\n  } catch (e) {\n    top = defaultBoundingClientRect.top;\n    elementHeight = defaultBoundingClientRect.height;\n  }\n\n  var windowInnerHeight = window.innerHeight || document.documentElement.clientHeight;\n\n  var offsets = Array.isArray(component.props.offset) ? component.props.offset : [component.props.offset, component.props.offset]; // Be compatible with previous API\n\n  return top - offsets[0] <= windowInnerHeight && top + elementHeight + offsets[1] >= 0;\n};\n\n/**\n * Detect if element is visible in viewport, if so, set `visible` state to true.\n * If `once` prop is provided true, remove component as listener after checkVisible\n *\n * @param  {React} component   React component that respond to scroll and resize\n */\nvar checkVisible = function checkVisible(component) {\n  var node = component.ref;\n  if (!(node instanceof HTMLElement)) {\n    return;\n  }\n\n  var parent = (0, _scrollParent2.default)(node);\n  var isOverflow = component.props.overflow && parent !== node.ownerDocument && parent !== document && parent !== document.documentElement;\n  var visible = isOverflow ? checkOverflowVisible(component, parent) : checkNormalVisible(component);\n  if (visible) {\n    // Avoid extra render if previously is visible\n    if (!component.visible) {\n      if (component.props.once) {\n        pending.push(component);\n      }\n\n      component.visible = true;\n      component.forceUpdate();\n    }\n  } else if (!(component.props.once && component.visible)) {\n    component.visible = false;\n    if (component.props.unmountIfInvisible) {\n      component.forceUpdate();\n    }\n  }\n};\n\nvar purgePending = function purgePending() {\n  pending.forEach(function (component) {\n    var index = listeners.indexOf(component);\n    if (index !== -1) {\n      listeners.splice(index, 1);\n    }\n  });\n\n  pending = [];\n};\n\nvar lazyLoadHandler = function lazyLoadHandler() {\n  for (var i = 0; i < listeners.length; ++i) {\n    var listener = listeners[i];\n    checkVisible(listener);\n  }\n  // Remove `once` component in listeners\n  purgePending();\n};\n\n/**\n * Forces the component to display regardless of whether the element is visible in the viewport.\n */\nvar forceVisible = function forceVisible() {\n  for (var i = 0; i < listeners.length; ++i) {\n    var listener = listeners[i];\n    listener.visible = true;\n    listener.forceUpdate();\n  }\n  // Remove `once` component in listeners\n  purgePending();\n};\n\n// Depending on component's props\nvar delayType = void 0;\nvar finalLazyLoadHandler = null;\n\nvar isString = function isString(string) {\n  return typeof string === 'string';\n};\n\nvar LazyLoad = function (_Component) {\n  _inherits(LazyLoad, _Component);\n\n  function LazyLoad(props) {\n    _classCallCheck(this, LazyLoad);\n\n    var _this = _possibleConstructorReturn(this, (LazyLoad.__proto__ || Object.getPrototypeOf(LazyLoad)).call(this, props));\n\n    _this.visible = false;\n    _this.setRef = _this.setRef.bind(_this);\n    return _this;\n  }\n\n  _createClass(LazyLoad, [{\n    key: 'componentDidMount',\n    value: function componentDidMount() {\n      // It's unlikely to change delay type on the fly, this is mainly\n      // designed for tests\n      var scrollport = window;\n      var scrollContainer = this.props.scrollContainer;\n\n      if (scrollContainer) {\n        if (isString(scrollContainer)) {\n          scrollport = scrollport.document.querySelector(scrollContainer);\n        }\n      }\n      var needResetFinalLazyLoadHandler = this.props.debounce !== undefined && delayType === 'throttle' || delayType === 'debounce' && this.props.debounce === undefined;\n\n      if (needResetFinalLazyLoadHandler) {\n        (0, _event.off)(scrollport, 'scroll', finalLazyLoadHandler, passiveEvent);\n        (0, _event.off)(window, 'resize', finalLazyLoadHandler, passiveEvent);\n        finalLazyLoadHandler = null;\n      }\n\n      if (!finalLazyLoadHandler) {\n        if (this.props.debounce !== undefined) {\n          finalLazyLoadHandler = (0, _debounce2.default)(lazyLoadHandler, typeof this.props.debounce === 'number' ? this.props.debounce : 300);\n          delayType = 'debounce';\n        } else if (this.props.throttle !== undefined) {\n          finalLazyLoadHandler = (0, _throttle2.default)(lazyLoadHandler, typeof this.props.throttle === 'number' ? this.props.throttle : 300);\n          delayType = 'throttle';\n        } else {\n          finalLazyLoadHandler = lazyLoadHandler;\n        }\n      }\n\n      if (this.props.overflow) {\n        var parent = (0, _scrollParent2.default)(this.ref);\n        if (parent && typeof parent.getAttribute === 'function') {\n          var listenerCount = 1 + +parent.getAttribute(LISTEN_FLAG);\n          if (listenerCount === 1) {\n            parent.addEventListener('scroll', finalLazyLoadHandler, passiveEvent);\n          }\n          parent.setAttribute(LISTEN_FLAG, listenerCount);\n        }\n      } else if (listeners.length === 0 || needResetFinalLazyLoadHandler) {\n        var _props = this.props,\n            scroll = _props.scroll,\n            resize = _props.resize;\n\n\n        if (scroll) {\n          (0, _event.on)(scrollport, 'scroll', finalLazyLoadHandler, passiveEvent);\n        }\n\n        if (resize) {\n          (0, _event.on)(window, 'resize', finalLazyLoadHandler, passiveEvent);\n        }\n      }\n\n      listeners.push(this);\n      checkVisible(this);\n    }\n  }, {\n    key: 'shouldComponentUpdate',\n    value: function shouldComponentUpdate() {\n      return this.visible;\n    }\n  }, {\n    key: 'componentWillUnmount',\n    value: function componentWillUnmount() {\n      if (this.props.overflow) {\n        var parent = (0, _scrollParent2.default)(this.ref);\n        if (parent && typeof parent.getAttribute === 'function') {\n          var listenerCount = +parent.getAttribute(LISTEN_FLAG) - 1;\n          if (listenerCount === 0) {\n            parent.removeEventListener('scroll', finalLazyLoadHandler, passiveEvent);\n            parent.removeAttribute(LISTEN_FLAG);\n          } else {\n            parent.setAttribute(LISTEN_FLAG, listenerCount);\n          }\n        }\n      }\n\n      var index = listeners.indexOf(this);\n      if (index !== -1) {\n        listeners.splice(index, 1);\n      }\n\n      if (listeners.length === 0 && typeof window !== 'undefined') {\n        (0, _event.off)(window, 'resize', finalLazyLoadHandler, passiveEvent);\n        (0, _event.off)(window, 'scroll', finalLazyLoadHandler, passiveEvent);\n      }\n    }\n  }, {\n    key: 'setRef',\n    value: function setRef(element) {\n      if (element) {\n        this.ref = element;\n      }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      var _props2 = this.props,\n          height = _props2.height,\n          children = _props2.children,\n          placeholder = _props2.placeholder,\n          className = _props2.className,\n          classNamePrefix = _props2.classNamePrefix,\n          style = _props2.style;\n\n\n      return _react2.default.createElement(\n        'div',\n        { className: classNamePrefix + '-wrapper ' + className, ref: this.setRef, style: style },\n        this.visible ? children : placeholder ? placeholder : _react2.default.createElement('div', {\n          style: { height: height },\n          className: classNamePrefix + '-placeholder'\n        })\n      );\n    }\n  }]);\n\n  return LazyLoad;\n}(_react.Component);\n\nLazyLoad.propTypes = {\n  className: _propTypes2.default.string,\n  classNamePrefix: _propTypes2.default.string,\n  once: _propTypes2.default.bool,\n  height: _propTypes2.default.oneOfType([_propTypes2.default.number, _propTypes2.default.string]),\n  offset: _propTypes2.default.oneOfType([_propTypes2.default.number, _propTypes2.default.arrayOf(_propTypes2.default.number)]),\n  overflow: _propTypes2.default.bool,\n  resize: _propTypes2.default.bool,\n  scroll: _propTypes2.default.bool,\n  children: _propTypes2.default.node,\n  throttle: _propTypes2.default.oneOfType([_propTypes2.default.number, _propTypes2.default.bool]),\n  debounce: _propTypes2.default.oneOfType([_propTypes2.default.number, _propTypes2.default.bool]),\n  placeholder: _propTypes2.default.node,\n  scrollContainer: _propTypes2.default.oneOfType([_propTypes2.default.string, _propTypes2.default.object]),\n  unmountIfInvisible: _propTypes2.default.bool,\n  style: _propTypes2.default.object\n};\n\nLazyLoad.defaultProps = {\n  className: '',\n  classNamePrefix: 'lazyload',\n  once: false,\n  offset: 0,\n  overflow: false,\n  resize: false,\n  scroll: true,\n  unmountIfInvisible: false\n};\n\nvar getDisplayName = function getDisplayName(WrappedComponent) {\n  return WrappedComponent.displayName || WrappedComponent.name || 'Component';\n};\n\nvar decorator = function decorator() {\n  var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n  return function lazyload(WrappedComponent) {\n    return function (_Component2) {\n      _inherits(LazyLoadDecorated, _Component2);\n\n      function LazyLoadDecorated() {\n        _classCallCheck(this, LazyLoadDecorated);\n\n        var _this2 = _possibleConstructorReturn(this, (LazyLoadDecorated.__proto__ || Object.getPrototypeOf(LazyLoadDecorated)).call(this));\n\n        _this2.displayName = 'LazyLoad' + getDisplayName(WrappedComponent);\n        return _this2;\n      }\n\n      _createClass(LazyLoadDecorated, [{\n        key: 'render',\n        value: function render() {\n          return _react2.default.createElement(\n            LazyLoad,\n            options,\n            _react2.default.createElement(WrappedComponent, this.props)\n          );\n        }\n      }]);\n\n      return LazyLoadDecorated;\n    }(_react.Component);\n  };\n};\n\nexports.lazyload = decorator;\nexports.default = LazyLoad;\nexports.forceCheck = lazyLoadHandler;\nexports.forceVisible = forceVisible;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = debounce;\nfunction debounce(func, wait, immediate) {\n  var timeout = void 0;\n  var args = void 0;\n  var context = void 0;\n  var timestamp = void 0;\n  var result = void 0;\n\n  var later = function later() {\n    var last = +new Date() - timestamp;\n\n    if (last < wait && last >= 0) {\n      timeout = setTimeout(later, wait - last);\n    } else {\n      timeout = null;\n      if (!immediate) {\n        result = func.apply(context, args);\n        if (!timeout) {\n          context = null;\n          args = null;\n        }\n      }\n    }\n  };\n\n  return function debounced() {\n    context = this;\n    args = arguments;\n    timestamp = +new Date();\n\n    var callNow = immediate && !timeout;\n    if (!timeout) {\n      timeout = setTimeout(later, wait);\n    }\n\n    if (callNow) {\n      result = func.apply(context, args);\n      context = null;\n      args = null;\n    }\n\n    return result;\n  };\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.on = on;\nexports.off = off;\nfunction on(el, eventName, callback, opts) {\n  opts = opts || false;\n  if (el.addEventListener) {\n    el.addEventListener(eventName, callback, opts);\n  } else if (el.attachEvent) {\n    el.attachEvent(\"on\" + eventName, function (e) {\n      callback.call(el, e || window.event);\n    });\n  }\n}\n\nfunction off(el, eventName, callback, opts) {\n  opts = opts || false;\n  if (el.removeEventListener) {\n    el.removeEventListener(eventName, callback, opts);\n  } else if (el.detachEvent) {\n    el.detachEvent(\"on\" + eventName, callback);\n  }\n}","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\n/**\n * @fileOverview Find scroll parent\n */\n\nexports.default = function (node) {\n  if (!(node instanceof HTMLElement)) {\n    return document.documentElement;\n  }\n\n  var excludeStaticParent = node.style.position === 'absolute';\n  var overflowRegex = /(scroll|auto)/;\n  var parent = node;\n\n  while (parent) {\n    if (!parent.parentNode) {\n      return node.ownerDocument || document.documentElement;\n    }\n\n    var style = window.getComputedStyle(parent);\n    var position = style.position;\n    var overflow = style.overflow;\n    var overflowX = style['overflow-x'];\n    var overflowY = style['overflow-y'];\n\n    if (position === 'static' && excludeStaticParent) {\n      parent = parent.parentNode;\n      continue;\n    }\n\n    if (overflowRegex.test(overflow) && overflowRegex.test(overflowX) && overflowRegex.test(overflowY)) {\n      return parent;\n    }\n\n    parent = parent.parentNode;\n  }\n\n  return node.ownerDocument || node.documentElement || document.documentElement;\n};","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = throttle;\n/*eslint-disable */\nfunction throttle(fn, threshhold, scope) {\n  threshhold || (threshhold = 250);\n  var last, deferTimer;\n  return function () {\n    var context = scope || this;\n\n    var now = +new Date(),\n        args = arguments;\n    if (last && now < last + threshhold) {\n      // hold on to it\n      clearTimeout(deferTimer);\n      deferTimer = setTimeout(function () {\n        last = now;\n        fn.apply(context, args);\n      }, threshhold);\n    } else {\n      last = now;\n      fn.apply(context, args);\n    }\n  };\n}","import { BLOCKS } from '@contentful/rich-text-types';\r\nimport axios from 'axios';\r\nimport { ContentfulPageResponse, ContentResponse, IContentfulLinkFarmResponse } from './types/content-api';\r\n\r\nexport const emptyContentResponse: ContentResponse = {\r\n    allPosts: [],\r\n    portraitLeft: [],\r\n    portraitRight: [],\r\n    landscapeLeft: [],\r\n    landscapeTop: [],\r\n    landscapeBottom: [],\r\n};\r\n\r\nexport const emptyContentfulPageResponse: ContentfulPageResponse = {\r\n    pageContent: { nodeType: BLOCKS.DOCUMENT, value: 'string', data: {}, content: [], marks: [] },\r\n    pageName: '',\r\n};\r\n\r\nexport const emptyContentfulLinkFarmResponse: IContentfulLinkFarmResponse = {\r\n    tabItems: [],\r\n};\r\n\r\nexport const VENDOR_ENTRY_ID = '3AjnUxJHvcDLloMJrd9S57';\r\nexport const ESIGN_DISCLOSURE_ENTRY_ID = '6DRCwMIskHDvBTNFb5LY9F';\r\nexport const INTEREST_BASED_ADS_ENTRY_ID = '5B3g6V3uq5Ey2DtKsBEYXR';\r\nexport const TERMS_ENTRY_ID = '63qdtxuRpsn7BM7GAr5gg2';\r\nexport const NOTICE_OF_ACCESSIBILITY_ENTRY_ID = '1WBZGJXw3frXP3jDcQrx7X';\r\nexport const CAF_CONSUMER_DISCLOSURE_ENTRY_ID = '2rY1jUTSAt6lZvMGsFySkd';\r\nexport const RESPONSIBLE_DISCLOSURE_ENTRY_ID = '2zPrnnf7pUCMt3gjeItnjh';\r\nexport const TEXTING_TERMS_ID = '70wUNefD1CICMz2386SitB';\r\nexport const LINK_FARM_ID = '3KVahwtGapk95QovNLirRM';\r\n\r\nexport function getSocialProofCarousel(): Promise<ContentResponse> {\r\n    try {\r\n        return axios\r\n            .get<ContentResponse>(`/home/api/content/social-proof-carousel`)\r\n            .then((response) => {\r\n                if (response.data) {\r\n                    return response.data;\r\n                }\r\n                return Promise.resolve(emptyContentResponse);\r\n            })\r\n            .catch(() => emptyContentResponse);\r\n    } catch (e) {\r\n        return Promise.resolve(emptyContentResponse);\r\n    }\r\n}\r\n\r\nexport function getContentfulPage(entryId: string): Promise<ContentfulPageResponse> {\r\n    try {\r\n        return axios\r\n            .get<ContentfulPageResponse>(`/home/api/content/contentful-page/${entryId}`)\r\n            .then((response) => {\r\n                if (response.data) {\r\n                    return response.data;\r\n                }\r\n                return Promise.resolve(emptyContentfulPageResponse);\r\n            })\r\n            .catch(() => emptyContentfulPageResponse);\r\n    } catch (e) {\r\n        return Promise.resolve(emptyContentfulPageResponse);\r\n    }\r\n}\r\n\r\nexport function getContentfulLinkFarm(): Promise<IContentfulLinkFarmResponse> {\r\n    try {\r\n        return fetch(`/home/api/content/link-farm`)\r\n            .then((response: Response) => {\r\n                return Promise.resolve(response.json());\r\n            })\r\n            .catch(() => emptyContentfulLinkFarmResponse);\r\n    } catch (e) {\r\n        return Promise.resolve(emptyContentfulLinkFarmResponse);\r\n    }\r\n}\r\n","import { CookieValidateResponse } from './types/myaccount-cookie';\r\n\r\ndeclare global {\r\n    interface Window {\r\n        kmxDevTools: {\r\n            ciamId: string;\r\n            expireTime: string;\r\n        };\r\n    }\r\n}\r\n\r\nexport async function getCiamId(): Promise<string | null> {\r\n    if (window?.kmxDevTools?.ciamId) {\r\n        return Promise.resolve(window.kmxDevTools.ciamId);\r\n    }\r\n\r\n        return await fetch('/myaccount/token/svc/cookie/validate/low', {\r\n            credentials: 'include'\r\n        })\r\n            .then(response => response.json())\r\n            .then((data: CookieValidateResponse) => {\r\n                if (data.ciamId !== null && data.expireTime !== null) {\r\n                    const expireTime = new Date(data.expireTime);\r\n                    const currentDate = new Date();\r\n                    if (expireTime.getTime() > currentDate.getTime()) {\r\n                        return data.ciamId;\r\n                    }\r\n                }\r\n                return null;\r\n            })\r\n            .catch(() => null);\r\n}\r\n","import { Vehicle } from './types';\r\n\r\ninterface RequestParams {\r\n    stockNumberList?: number[];\r\n}\r\n\r\nexport async function getVehiclesFromRVC(params: RequestParams): Promise<Vehicle[]> {\r\n    try {\r\n        const urlsToFetch: string[] = [];\r\n        if (params.stockNumberList && params.stockNumberList.length > 0) {\r\n            params.stockNumberList.forEach((stockNumber) => {\r\n                urlsToFetch.push(`home/api/vehicles/catalog?StockNumber=${stockNumber}`);\r\n            });\r\n        }\r\n        const fetchPromises = urlsToFetch.map((url) => fetch(url).then((response) => response.json()));\r\n        const response = await Promise.all(fetchPromises);\r\n        if (response.length > 0) {\r\n            return response;\r\n        } else {\r\n            return [];\r\n        }\r\n    } catch {\r\n        return Promise.resolve([]);\r\n    }\r\n}\r\n","import axios from 'axios';\r\nimport { SearchApiResponse, Vehicle } from './types';\r\n\r\nexport function getVehicles(params: {\r\n    stockNumberList?: number[];\r\n    take?: number;\r\n    scoringProfile?: string;\r\n    transferDestinationStoreId?: string;\r\n    zipCode?: string;\r\n    radiusInMiles?: number;\r\n    storeId?: string;\r\n}): Promise<Vehicle[]> {\r\n    try {\r\n        let url = '/home/api/search';\r\n        const queryParamsArray = [];\r\n\r\n        queryParamsArray.push('isSaleable=true');\r\n\r\n        if (params.stockNumberList && params.stockNumberList.length > 0) {\r\n            params.stockNumberList.map((val) => {\r\n                queryParamsArray.push(`stockNumbers=${val}`);\r\n            });\r\n        }\r\n\r\n        if (params.take) {\r\n            queryParamsArray.push(`take=${params.take}`);\r\n        }\r\n\r\n        if (params.scoringProfile) {\r\n            queryParamsArray.push(`scoringProfile=${params.scoringProfile}`);\r\n        }\r\n\r\n        if (params.transferDestinationStoreId) {\r\n            queryParamsArray.push(`transferDestinationStoreId=${params.transferDestinationStoreId}`);\r\n        }\r\n\r\n        if (params.storeId) {\r\n            queryParamsArray.push(`storeId=${params.storeId}`);\r\n        }\r\n\r\n        if (params.zipCode) {\r\n            queryParamsArray.push(`zipcode=${params.zipCode}`);\r\n        }\r\n\r\n        if (params.radiusInMiles) {\r\n            queryParamsArray.push(`radiusInMiles=${params.radiusInMiles}`);\r\n        }\r\n\r\n        if (queryParamsArray.length) {\r\n            url += `?${queryParamsArray.join('&')}`;\r\n        }\r\n\r\n        return axios\r\n            .get<SearchApiResponse>(url)\r\n            .then((response) => {\r\n                if (response && response.data && response.data.items && response.data.items.length > 0) {\r\n                    return response.data.items;\r\n                }\r\n                return [];\r\n            })\r\n            .catch(() => []);\r\n    } catch {\r\n        return Promise.resolve([]);\r\n    }\r\n}\r\n\r\ninterface getVehiclesTotalCountParams {\r\n    zipCode?: string;\r\n    radiusInMiles?: number;\r\n    storeId?: string;\r\n    isInStoreOnly?: boolean;\r\n    hasPriceDrop?: boolean;\r\n    hasFreeShipping?: boolean;\r\n}\r\n\r\nexport async function getVehiclesTotalCount({\r\n    zipCode,\r\n    radiusInMiles,\r\n    storeId,\r\n    isInStoreOnly,\r\n    hasPriceDrop,\r\n    hasFreeShipping,\r\n}: getVehiclesTotalCountParams): Promise<number> {\r\n    try {\r\n        const baseUrl = '/home/api/search';\r\n\r\n        const params = new URLSearchParams();\r\n\r\n        Object.entries({\r\n            isSaleable: true,\r\n            resultsOnly: true,\r\n            take: 0,\r\n            zipCode,\r\n            radiusInMiles,\r\n            storeId,\r\n            isInStoreOnly,\r\n            hasPriceDrop,\r\n            hasFreeShipping,\r\n        }).forEach(([field, value]) => {\r\n            if (value !== undefined && value !== null) {\r\n                params.append(field, value.toString());\r\n            }\r\n        });\r\n\r\n        const response = await fetch(`${baseUrl}?${params}`);\r\n\r\n        if (!response.ok) {\r\n            return 0;\r\n        }\r\n\r\n        const data: SearchApiResponse = await response.json();\r\n        return data?.totalCount;\r\n    } catch {\r\n        return Promise.resolve(0);\r\n    }\r\n}\r\n","import { KmxVisitorObject } from '../utilities/cookieHelper';\r\nimport { IFBSDecision } from './types/finance';\r\n\r\nexport const emptyFBSResponse: IFBSDecision[] = [\r\n    {\r\n        fbsDecision: {\r\n            expirationDateFormatted: '',\r\n            downPayment: 0,\r\n            isSoftPull: true,\r\n            decision: '',\r\n            terms: [],\r\n            conditionAmount: 0,\r\n            conditionAmountRounded: 0,\r\n            lenderName: '',\r\n            totalFinanceAmount: 0,\r\n            stateAbbreviation: '',\r\n            taxesAndFeesRounded: 0,\r\n        },\r\n        stockNumber: 0,\r\n        taxesAndFeesRounded: 0,\r\n        applicationUrl: '',\r\n    },\r\n];\r\n\r\nexport async function getSmallBatchDecisions(\r\n    ciamId: string,\r\n    stockNumbers: number[],\r\n    storeId?: string\r\n): Promise<IFBSDecision[]> {\r\n    const stockNumbersString = stockNumbers.toString().replace(/,/g, '&stockNumbers=');\r\n    let storeIdToRequest = storeId;\r\n\r\n    if (!storeId) {\r\n        const { StoreId } = KmxVisitorObject();\r\n        storeIdToRequest = StoreId;\r\n    }\r\n\r\n    if (ciamId.length > 0 && stockNumbers.length > 0) {\r\n        return await fetch(\r\n            `/home/api/finance/smallbatch?ciamId=${ciamId}&stockNumbers=${stockNumbersString}&storeId=${storeIdToRequest}`,\r\n            {\r\n                credentials: 'include',\r\n            }\r\n        )\r\n            .then((response) => response.json())\r\n            .then((data: IFBSDecision[]) => {\r\n                return data;\r\n            })\r\n            .catch((err) => {\r\n                console.log(err);\r\n                return emptyFBSResponse;\r\n            });\r\n    } else {\r\n        return Promise.resolve(emptyFBSResponse);\r\n    }\r\n}\r\n","import { useEffect, useRef } from 'react';\r\nimport Icons from '../../utilities/icons';\r\nimport './dialog.scss';\r\n\r\nexport interface IDialogProps {\r\n    children: React.ReactChild;\r\n    isVisible: boolean;\r\n    onClose: () => void;\r\n}\r\n\r\nconst Dialog = (props: IDialogProps) => {\r\n    const dialogRef = useRef<HTMLDialogElement>(null);\r\n    const { children, isVisible, onClose } = props;\r\n\r\n    // animates-out the dialog before the native dialog api removes it from the DOM\r\n    const handleClose = (dialog: HTMLDialogElement) => {\r\n        const fadeOutCSSClass = `hp-dialog--fade-out`;\r\n        dialog.classList.add(fadeOutCSSClass);\r\n        dialog.addEventListener('transitionend', () => {\r\n            dialog.close();\r\n            dialog.classList.remove(fadeOutCSSClass);\r\n        });\r\n    };\r\n\r\n    useEffect(() => {\r\n        const dialog = dialogRef.current;\r\n\r\n        // watch for change in visibility from parent.\r\n        const closeIfBackgroundClicked = (e: MouseEvent, dialog: HTMLDialogElement) => {\r\n            const rect = dialog.getBoundingClientRect();\r\n            const isInDialog =\r\n                rect.top <= e.clientY &&\r\n                e.clientY <= rect.top + rect.height &&\r\n                rect.left <= e.clientX &&\r\n                e.clientX <= rect.left + rect.width;\r\n            if (!isInDialog) {\r\n                handleClose(dialog);\r\n            }\r\n        };\r\n\r\n        dialog?.querySelector('.hp-dialog__btn-close')?.addEventListener('click', () => {\r\n            handleClose(dialog);\r\n        });\r\n\r\n        // catch native dialog close event and update parent's state\r\n        dialog?.addEventListener('close', () => {\r\n            onClose();\r\n        });\r\n\r\n        // catch user click on backdrop\r\n        dialog?.addEventListener('click', (e: MouseEvent) => {\r\n            closeIfBackgroundClicked(e, dialog);\r\n        });\r\n\r\n        // parent state governs visibility\r\n        if (isVisible) {\r\n            dialog?.showModal();\r\n        }\r\n\r\n        // eslint-disable-next-line react-hooks/exhaustive-deps\r\n    }, [isVisible]);\r\n\r\n    if (!isVisible) return <></>;\r\n\r\n    return (\r\n        isVisible && (\r\n            <dialog data-testid=\"dialog\" className=\"hp-dialog\" ref={dialogRef}>\r\n                <button\r\n                    data-testid=\"dialog__btn-close\"\r\n                    type=\"button\"\r\n                    className=\"hp-dialog__btn-close\"\r\n                    aria-label=\"Close Popover\"\r\n                >\r\n                    {Icons.close}\r\n                </button>\r\n                <div className=\"hp-dialog__content\">{children}</div>\r\n            </dialog>\r\n        )\r\n    );\r\n};\r\n\r\nexport default Dialog;\r\n","import Dialog from './Dialog';\r\nexport default Dialog;\r\n","import * as React from 'react';\r\n\r\ninterface IErrorBoundaryProps {}\r\n\r\ninterface IErrorBoundaryState {\r\n    hasError: boolean;\r\n}\r\n\r\nexport default class ErrorBoundary extends React.Component<IErrorBoundaryProps, IErrorBoundaryState> {\r\n    constructor(props: any) {\r\n        super(props);\r\n        this.state = { hasError: false };\r\n    }\r\n\r\n    static getDerivedStateFromError(error: any) {\r\n        return { hasError: true };\r\n    }\r\n\r\n    render() {\r\n        return this.state.hasError || React.Children.count(this.props.children) === 0 ? null : this.props.children;\r\n    }\r\n}\r\n","import * as React from 'react';\r\nimport classNames from 'classnames';\r\n\r\ninterface IMDCSelectProps {\r\n    className?: string;\r\n    id: string;\r\n    label: string;\r\n    value: string;\r\n    noInitialValue?: boolean;\r\n    options: { label: string; value: string }[];\r\n    onChange: (event: React.ChangeEvent<HTMLSelectElement>) => any;\r\n}\r\n\r\ninterface IMDCSelectState {\r\n    focused: boolean;\r\n}\r\n\r\nexport default class MDCSelect extends React.Component<IMDCSelectProps, IMDCSelectState> {\r\n    constructor(props: any) {\r\n        super(props);\r\n\r\n        this.state = {\r\n            focused: false,\r\n        };\r\n    }\r\n\r\n    public render(): React.ReactNode {\r\n        return (\r\n            <>\r\n                <div className=\"mdc-select\">\r\n                    <select\r\n                        className={classNames('mdc-select__native-control', this.props.className)}\r\n                        id={this.props.id}\r\n                        onChange={this.props.onChange}\r\n                        onFocus={() => this.setState({ focused: true })}\r\n                        onBlur={() => this.setState({ focused: false })}\r\n                        value={this.props.value}\r\n                    >\r\n                        {this.props.noInitialValue === true && <option disabled value=\"\" />}\r\n                        {this.props.options.map(({ label, value }) => (\r\n                            <option key={value} value={value}>\r\n                                {label}\r\n                            </option>\r\n                        ))}\r\n                    </select>\r\n\r\n                    <label\r\n                        className={classNames('mdc-floating-label', {\r\n                            'mdc-floating-label--float-above': this.state.focused || this.props.value !== '',\r\n                        })}\r\n                        htmlFor={this.props.id}\r\n                    >\r\n                        {this.props.label}\r\n                    </label>\r\n\r\n                    <div\r\n                        className={classNames('mdc-line-ripple', {\r\n                            'mdc-line-ripple--active': this.state.focused,\r\n                        })}\r\n                    />\r\n                </div>\r\n            </>\r\n        );\r\n    }\r\n}\r\n","import React, { FC, useEffect } from 'react';\r\nimport classNames from 'classnames';\r\nimport useFocus from '../instant-offers/utils/use-focus';\r\nimport { nanoid } from 'nanoid';\r\nimport './TextField.scss';\r\n\r\nimport { AUTOCOMPLETE, INPUTMODE, INPUT_TYPES } from '../instant-offers/utils/constants';\r\n\r\ninterface TextFieldProps {\r\n    /**\r\n     * Controls whether and how the text value should be automatically capitalized as it is entered/edited by the user\r\n     *\r\n     * @default none\r\n     */\r\n    autoCapitalize?: 'none' | 'sentences' | 'words' | 'characters';\r\n\r\n    /**\r\n     * Provide a hint to the user-agent as to the expected nature of the user input, ideally allowing more sensible autocompletion\r\n     */\r\n    autoComplete?: AUTOCOMPLETE;\r\n\r\n    /**\r\n     * Additional CSS class(es) to add to the `<TextField />`\r\n     */\r\n    className?: string;\r\n\r\n    /**\r\n     * Attribute indicating the user cannot interact with the `<TextField />`\r\n     *\r\n     * @default false\r\n     */\r\n    disabled?: boolean;\r\n\r\n    /**\r\n     * Attribute indicating that there is something loading for the `<TextField />`\r\n     *\r\n     * @default false\r\n     */\r\n    loading?: boolean;\r\n\r\n    /**\r\n     * Phrase to render as input control ‘help’ message\r\n     */\r\n    helperText?: string;\r\n\r\n    /**\r\n     * Always show ‘help’ message, even when control is not focused\r\n     *\r\n     * @default false\r\n     */\r\n    helperTextIsPersistent?: boolean;\r\n\r\n    /**\r\n     * Unique identifier for the `<TextField />` instance. You may pass your own value to override the component’s auto-generated ID.\r\n     */\r\n    id?: string;\r\n\r\n    /*\r\n     * The `inputmode` attribute provides a hint to the browser for which type of onscreen keyboard to display. Inputmode is unique to text-input and text-area controls.\r\n     */\r\n    inputMode?: INPUTMODE;\r\n\r\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n    inputProps?: { [prop: string]: any };\r\n\r\n    /*\r\n     * Required accessible label associated with this input control.\r\n     */\r\n    label: string;\r\n\r\n    /**\r\n     * The maximum number of characters that the user can enter\r\n     */\r\n    maxLength?: number;\r\n\r\n    /**\r\n     * Name of the `<input>`\r\n     */\r\n    name?: string;\r\n\r\n    /*\r\n     * Input validation pattern\r\n     */\r\n    pattern?: string;\r\n\r\n    /**\r\n     * Boolean attribute indicating the `<input>` should be required\r\n     *\r\n     * @default false\r\n     */\r\n    required?: boolean;\r\n\r\n    /*\r\n     * Input type (text, password, tel, etc.)\r\n     */\r\n    type?: INPUT_TYPES;\r\n\r\n    /**\r\n     * Value of the `<input>`\r\n     */\r\n    value?: string;\r\n\r\n    /**\r\n     * Validation status of the `<input>`\r\n     */\r\n    validationStatus?: 'valid' | 'invalid';\r\n\r\n    onBlur?: (event: React.FocusEvent<HTMLInputElement>) => void;\r\n    onChange: (event: React.ChangeEvent<HTMLInputElement>) => void;\r\n    onFocus?: (event: React.FocusEvent<HTMLInputElement>) => void;\r\n}\r\n\r\nexport const TextField: FC<TextFieldProps> = (props) => {\r\n    const {\r\n        autoCapitalize = 'none',\r\n        autoComplete = 'off',\r\n        className,\r\n        disabled = false,\r\n        helperText,\r\n        helperTextIsPersistent = false,\r\n        id: initialId,\r\n        inputMode = 'text',\r\n        inputProps,\r\n        validationStatus,\r\n        label,\r\n        maxLength,\r\n        name,\r\n        onBlur,\r\n        onChange,\r\n        onFocus,\r\n        pattern,\r\n        required = false,\r\n        type = 'text',\r\n        value,\r\n        loading = false,\r\n    } = props;\r\n\r\n    const [id] = React.useState(initialId || nanoid(8));\r\n    const textFieldId = `text-field-${id}`;\r\n    const helperTextId = `text-field-helper-text-${id}`;\r\n    const textFieldRef = React.useRef<HTMLInputElement>(null);\r\n    const isFocused = useFocus(textFieldRef);\r\n\r\n    useEffect(() => {\r\n        const field = textFieldRef.current;\r\n        if (field) {\r\n            field.addEventListener(\r\n                'blur',\r\n                (event) => onBlur && onBlur((event as unknown) as React.FocusEvent<HTMLInputElement>)\r\n            );\r\n            field.addEventListener(\r\n                'change',\r\n                (event) => onChange && onChange((event as unknown) as React.ChangeEvent<HTMLInputElement>)\r\n            );\r\n        }\r\n    }, []);\r\n\r\n    useEffect(() => {\r\n        const elRef = textFieldRef?.current;\r\n        if (elRef) {\r\n            if (isFocused && inputProps?.placeholder) {\r\n                elRef.placeholder = inputProps?.placeholder;\r\n            } else {\r\n                elRef.placeholder = '';\r\n            }\r\n        }\r\n    }, [isFocused]);\r\n\r\n    return (\r\n        <>\r\n            <div\r\n                className={classNames(className, 'mdc-text-field', {\r\n                    'mdc-text-field--disabled': disabled,\r\n                    'mdc-text-field--focused': isFocused,\r\n                    'mdc-text-field--invalid': validationStatus === 'invalid',\r\n                    'icon-right': validationStatus !== undefined || loading,\r\n                })}\r\n            >\r\n                <input\r\n                    aria-controls={helperText ? helperTextId : undefined}\r\n                    aria-describedby={helperText ? helperTextId : undefined}\r\n                    autoCapitalize={autoCapitalize}\r\n                    autoComplete={autoComplete}\r\n                    className=\"mdc-text-field__input\"\r\n                    disabled={disabled}\r\n                    id={textFieldId}\r\n                    inputMode={inputMode}\r\n                    pattern={pattern}\r\n                    maxLength={maxLength}\r\n                    name={name}\r\n                    ref={textFieldRef}\r\n                    required={required}\r\n                    type={type}\r\n                    value={value}\r\n                    onBlur={onBlur}\r\n                    onChange={onChange}\r\n                    onFocus={onFocus}\r\n                    {...inputProps}\r\n                />\r\n                {validationStatus && (\r\n                    <div className={`mdc-text-field-icon${'--' + validationStatus}`}>\r\n                        {validationStatus === 'valid' ? (\r\n                            <svg viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\r\n                                <path d=\"M0 0h24v24H0z\" fill=\"none\"></path>\r\n                                <path d=\"M12 2a10 10 0 100 20 10 10 0 000-20zm-2 15l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z\"></path>\r\n                            </svg>\r\n                        ) : (\r\n                            <svg viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\r\n                                <path d=\"M0 0h24v24H0z\" fill=\"none\"></path>\r\n                                <path d=\"M1 21h22L12 2 1 21zm12-3h-2v-2h2v2zm0-4h-2v-4h2v4z\"></path>\r\n                            </svg>\r\n                        )}\r\n                    </div>\r\n                )}\r\n                {loading && (\r\n                    <div style={{ textAlign: 'center', paddingTop: '300px' }}>\r\n                        <hzn-loading tone=\"brand\" label=\"loading content\" size=\"large\"></hzn-loading>\r\n                    </div>\r\n                )}\r\n                <label\r\n                    className={classNames('mdc-floating-label', {\r\n                        'mdc-floating-label--float-above': isFocused || (value !== undefined && value !== ''),\r\n                    })}\r\n                    htmlFor={textFieldId}\r\n                >\r\n                    {label}\r\n                </label>\r\n                <div className={classNames('mdc-line-ripple', { 'mdc-line-ripple--active': isFocused })}></div>\r\n            </div>\r\n            {helperText ? (\r\n                <div\r\n                    className={classNames('mdc-text-field-helper-text', {\r\n                        'mdc-text-field-helper-text--persistent': helperTextIsPersistent,\r\n                        'mdc-text-field-helper-text--validation-msg': validationStatus === 'invalid',\r\n                    })}\r\n                    id={helperTextId}\r\n                >\r\n                    {helperText}\r\n                </div>\r\n            ) : null}\r\n        </>\r\n    );\r\n};\r\n","import React, { useEffect, useState } from 'react';\r\n\r\nconst useFocus = (ref: React.RefObject<HTMLElement | null>, defaultFocus = false) => {\r\n    const [isFocused, setFocus] = useState(defaultFocus);\r\n\r\n    useEffect(() => {\r\n        const current = ref.current;\r\n        const onBlur = () => setFocus(false);\r\n        const onFocus = () => setFocus(true);\r\n\r\n        if (current) {\r\n            current.addEventListener('blur', onBlur);\r\n            current.addEventListener('focus', onFocus);\r\n        }\r\n\r\n        return () => {\r\n            if (current) {\r\n                current.removeEventListener('blur', onBlur);\r\n                current.removeEventListener('focus', onFocus);\r\n            }\r\n        };\r\n    });\r\n\r\n    return isFocused;\r\n};\r\n\r\nexport default useFocus;\r\n","export const autoHeight = true;\r\nexport const autoplayButton = false;\r\nexport const autoplayButtonOutput = false;\r\nexport const autoplayHoverPause = true;\r\nexport const autoplayTimeout = 5000;\r\nexport const mouseDrag = true;\r\nexport const slideBy = 'page';\r\nexport const speed = 750;\r\nexport const swipeAngle = 40;\r\n","import { TinySliderInstance } from 'tiny-slider/src/tiny-slider';\r\n\r\nconst focusOnActiveCta = (tinySlider: TinySliderInstance) => {\r\n    const activeEl = document.activeElement as HTMLElement | null;\r\n    if (activeEl) {\r\n        activeEl.focus();\r\n    }\r\n};\r\n\r\nexport default focusOnActiveCta;\r\n","import { swipeAngle } from '../constants';\r\n\r\nclass TouchController {\r\n    private startPosition: { x: number; y: number };\r\n    constructor() {\r\n        this.startPosition = { x: 0, y: 0 };\r\n    }\r\n\r\n    public start = (event: TouchEvent) => {\r\n        const { clientX, clientY } = event.touches[0];\r\n        this.startPosition.x = clientX;\r\n        this.startPosition.y = clientY;\r\n    };\r\n\r\n    public move = (event: TouchEvent) => {\r\n        const { clientX, clientY } = event.touches[0];\r\n        const currentX = clientX;\r\n        const currentY = clientY;\r\n        const degree = this.toDegree(currentY - this.startPosition.y, currentX - this.startPosition.x);\r\n        const direction = this.getTouchDirection(degree);\r\n        if (direction === 'horizontal' && event.cancelable) {\r\n            event.preventDefault();\r\n        }\r\n    };\r\n\r\n    private toDegree(y: number, x: number): number {\r\n        return Math.atan2(y, x) * (180 / Math.PI);\r\n    }\r\n\r\n    private getTouchDirection(angle: number): string {\r\n        const gap = Math.abs(90 - Math.abs(angle));\r\n\r\n        if (gap <= swipeAngle) {\r\n            return 'vertical';\r\n        }\r\n\r\n        return 'horizontal';\r\n    }\r\n}\r\n\r\nexport default TouchController;\r\n","import getFocusHandler from './getFocusHandler';\r\nimport getKeyPressHandler from './getKeyPressHandler';\r\nimport leaveSlider from './leaveSlider';\r\nimport TouchController from './TouchController';\r\nimport { AddEventHandlers } from './types';\r\n\r\nconst addEventHandlers = ({ tinySlider, nextFocus, prevFocus }: AddEventHandlers) => {\r\n    const leaveCarousel = leaveSlider({ tinySlider, nextFocus, prevFocus });\r\n    const keyHandler: (event: Event) => void = getKeyPressHandler({ tinySlider, leaveCarousel });\r\n    const focusHandler: (event: Event) => void = getFocusHandler(tinySlider);\r\n    if (!tinySlider || !tinySlider.getInfo) {\r\n        return () => null;\r\n    }\r\n    const { container } = tinySlider.getInfo();\r\n    const carousel = container.offsetParent;\r\n    if (!carousel) {\r\n        return () => null;\r\n    }\r\n\r\n    const touch = new TouchController();\r\n\r\n    carousel.addEventListener('keydown', keyHandler);\r\n    carousel.addEventListener('focusin', focusHandler);\r\n    container.addEventListener('touchstart', touch.start, { passive: false });\r\n    container.addEventListener('touchmove', touch.move, { passive: false });\r\n    const removeEventHandlers = () => {\r\n        carousel.removeEventListener('keydown', keyHandler);\r\n        carousel.removeEventListener('focusin', focusHandler);\r\n        container.removeEventListener('touchstart', touch.start);\r\n        container.removeEventListener('touchmove', touch.move);\r\n    };\r\n    return removeEventHandlers;\r\n};\r\n\r\nexport default addEventHandlers;\r\n","import { AddEventHandlers } from './types';\r\n\r\nconst leaveSlider = ({\r\n    tinySlider,\r\n    nextFocus,\r\n    prevFocus,\r\n}: AddEventHandlers): ((direction: string) => void) => direction => {\r\n    const preCarousel = document.querySelector(prevFocus) as HTMLElement | null;\r\n    const postCarousel = document.querySelector(nextFocus) as HTMLElement | null;\r\n    if (direction === 'back' && preCarousel) {\r\n        preCarousel.focus();\r\n        tinySlider.play();\r\n    } else if (direction === 'forward' && postCarousel) {\r\n        postCarousel.focus();\r\n        tinySlider.play();\r\n    }\r\n};\r\n\r\nexport default leaveSlider;\r\n","import focusOnActiveCta from './focusOnActiveCta';\r\nimport { KeyPressHandler } from './types';\r\n\r\nconst getFocusedSlideIndex = (element: HTMLElement, id: string): number => {\r\n    let parent = element.parentNode as HTMLElement;\r\n    while (parent && !parent.id?.includes(id)) {\r\n        parent = parent.parentNode as HTMLElement;\r\n    }\r\n\r\n    // Extract index from the parent's id\r\n    const index = parent?.id.match(/(\\d+)$/)?.[1] || '0';\r\n\r\n    return parseInt(index);\r\n};\r\n\r\nconst getKeyPressHandler = ({ tinySlider, leaveCarousel }: KeyPressHandler): ((event: Event) => void) => (\r\n    event: Event\r\n): void => {\r\n    tinySlider.pause();\r\n    const { key, shiftKey } = event as KeyboardEvent;\r\n    const activeEl = document.activeElement as HTMLElement | null;\r\n\r\n    const ignoreSlideInteractiveContent = (): boolean => {\r\n        if (\r\n            activeEl &&\r\n            activeEl.classList &&\r\n            activeEl.classList.length > 0 &&\r\n            activeEl.classList.contains('carousel-slide-interactive-content')\r\n        ) {\r\n            return true;\r\n        }\r\n        return false;\r\n    };\r\n\r\n    switch (key) {\r\n        case 'Enter':\r\n        case ' ':\r\n        case 'Spacebar':\r\n            if (ignoreSlideInteractiveContent()) break;\r\n            if (activeEl) activeEl.click();\r\n            event.preventDefault();\r\n            break;\r\n        case 'Escape':\r\n        case 'Esc':\r\n            leaveCarousel('forward');\r\n            break;\r\n        case 'ArrowLeft':\r\n        case 'Left':\r\n            tinySlider.goTo('prev');\r\n            focusOnActiveCta(tinySlider);\r\n            break;\r\n        case 'ArrowRight':\r\n        case 'Right':\r\n            tinySlider.goTo('next');\r\n            focusOnActiveCta(tinySlider);\r\n            break;\r\n        case 'ArrowUp':\r\n        case 'Up':\r\n            if (ignoreSlideInteractiveContent()) break;\r\n            leaveCarousel('back');\r\n            break;\r\n        case 'ArrowDown':\r\n        case 'Down':\r\n            if (ignoreSlideInteractiveContent()) break;\r\n            leaveCarousel('forward');\r\n            break;\r\n        case 'Tab':\r\n            if (activeEl) {\r\n                // Get the closest parent that contains the slide index in its element's id\r\n                const indexString = getFocusedSlideIndex(activeEl, '-carousel-slides-item');\r\n\r\n                if (indexString !== null) {\r\n                    const currentIndex = indexString;\r\n                    if (shiftKey) {\r\n                        tinySlider.goTo(currentIndex - 1);\r\n                    } else {\r\n                        tinySlider.goTo(currentIndex);\r\n                    }\r\n                }\r\n            }\r\n            break;\r\n        default:\r\n    }\r\n};\r\n\r\nexport default getKeyPressHandler;\r\n","import focusOnActiveCta from './focusOnActiveCta';\r\nimport { TinySliderInstance } from 'tiny-slider/src/tiny-slider';\r\n\r\nconst getFocusHandler = (tinySlider: TinySliderInstance) => (event: Event) => {\r\n    event.preventDefault();\r\n    focusOnActiveCta(tinySlider);\r\n};\r\n\r\nexport default getFocusHandler;\r\n","import { tns, TinySliderInstance, TinySliderSettings } from 'tiny-slider/src/tiny-slider';\r\nimport * as constants from './constants';\r\nimport addEventHandlers from './helpers';\r\n// no type support for tiny-slider, so use as js module for now\r\n\r\ninterface ICarousel extends TinySliderSettings {\r\n    nextFocus: string;\r\n    prevFocus: string;\r\n}\r\n\r\nexport default function initCarousel({\r\n    autoplay = false,\r\n    container,\r\n    fixedWidth = false,\r\n    autoWidth,\r\n    autoHeight,\r\n    items = 1,\r\n    loop = false,\r\n    gutter = 0,\r\n    navContainer,\r\n    nextButton = false,\r\n    nextFocus = '',\r\n    prevButton = false,\r\n    prevFocus = '',\r\n    responsive = false,\r\n    center = false,\r\n}: ICarousel): { tinySlider: TinySliderInstance; removeEventHandlers: () => void } {\r\n    const tinySlider = tns({\r\n        autoplay,\r\n        container, // '.carousel__slides'\r\n        fixedWidth,\r\n        autoWidth,\r\n        items,\r\n        loop,\r\n        navContainer, // '.carousel__nav'\r\n        nextButton,\r\n        prevButton,\r\n        controls: !!nextButton,\r\n        edgePadding: fixedWidth ? 8 : 0,\r\n        nav: !!navContainer,\r\n        responsive,\r\n        gutter: gutter,\r\n        center,\r\n        preventScrollOnTouch: 'auto',\r\n        ...constants,\r\n    });\r\n    const removeEventHandlers = addEventHandlers({ tinySlider, nextFocus, prevFocus });\r\n    return { tinySlider, removeEventHandlers };\r\n}\r\n","import * as React from 'react';\r\nimport classNames from 'classnames';\r\nimport initCarousel from '../carousel/index';\r\nimport { TinySliderInstance, TinySliderInfo } from 'tiny-slider/src/tiny-slider';\r\nimport { largeBreakpoint, mediumBreakpoint } from './constants';\r\n\r\ninterface ICarouselProps {\r\n    children: any; //React.ReactElement[];\r\n    name: string;\r\n    nextFocus: string;\r\n    ariaLabel?: string;\r\n    leftAligned?: boolean;\r\n}\r\n\r\ninterface ICarouselState {\r\n    index: number;\r\n    slideBy: number;\r\n    slideCount: number;\r\n    showNextButton: boolean;\r\n    showPrevButton: boolean;\r\n}\r\n\r\ninterface INextPrevHoverData {\r\n    slideIsHovered: boolean;\r\n    nextButtonIsHovered: boolean;\r\n    prevButtonIsHovered: boolean;\r\n    slideIndex: number;\r\n    el: any;\r\n}\r\n\r\nconst ACTIVE_SLIDE_COUNT = 4;\r\nconst SLIDE_GUTTER_WIDTH = 8;\r\n\r\nexport default class Carousel extends React.Component<ICarouselProps, ICarouselState> {\r\n    constructor(props: any) {\r\n        super(props);\r\n\r\n        this.state = {\r\n            index: 0,\r\n            slideBy: 0,\r\n            slideCount: 0,\r\n            showNextButton: false,\r\n            showPrevButton: false,\r\n        };\r\n\r\n        this.handleIndexChanged = this.handleIndexChanged.bind(this);\r\n        this.initTinySlider = this.initTinySlider.bind(this);\r\n    }\r\n\r\n    private _tinySlider?: TinySliderInstance;\r\n    private _removeEventHandlers?: () => void;\r\n\r\n    public componentDidMount(): void {\r\n        this.initTinySlider(this.props.name, this.props.nextFocus);\r\n        if (this._tinySlider) {\r\n            const sliderInfo = this._tinySlider.getInfo();\r\n            this.setState({\r\n                index: sliderInfo.index,\r\n                slideBy: sliderInfo.slideBy,\r\n                slideCount: sliderInfo.slideCount,\r\n            });\r\n        }\r\n    }\r\n\r\n    public componentWillUnmount(): void {\r\n        if (this._tinySlider) this._tinySlider.destroy();\r\n        if (this._removeEventHandlers) this._removeEventHandlers();\r\n    }\r\n\r\n    private initTinySlider(name: string, nextFocus: string): void {\r\n        const { children } = this.props;\r\n        const { tinySlider, removeEventHandlers } = initCarousel({\r\n            nextFocus: nextFocus,\r\n            container: `#${name}-carousel-slides`,\r\n            autoWidth: true,\r\n            nextButton: `#${name}-carousel__next`,\r\n            prevButton: `#${name}-carousel__prev`,\r\n            prevFocus: `#pre-${name}-carousel`,\r\n            gutter: SLIDE_GUTTER_WIDTH,\r\n            slideBy: 'page',\r\n            items: ACTIVE_SLIDE_COUNT,\r\n            responsive: {\r\n                [largeBreakpoint]: {},\r\n                [mediumBreakpoint]: {\r\n                    center: false,\r\n                    gutter: 24,\r\n                },\r\n                0: {\r\n                    center: children.length > 1 && !this.props.leftAligned ? true : false,\r\n                },\r\n            },\r\n        });\r\n\r\n        this._tinySlider = tinySlider;\r\n        this._removeEventHandlers = removeEventHandlers;\r\n        if (this._tinySlider) {\r\n            this._tinySlider.events.on('indexChanged', this.handleIndexChanged);\r\n        }\r\n    }\r\n\r\n    private handleIndexChanged(info: TinySliderInfo) {\r\n        this.setState({ index: info.index, slideBy: info.slideBy, slideCount: info.slideCount });\r\n    }\r\n\r\n    private showSlideNavButton(hoverEvent: INextPrevHoverData): void {\r\n        const firstVisibleTileIndex = this.state.index - 1;\r\n        const targetClientRects = hoverEvent.el.getBoundingClientRect();\r\n\r\n        function firstSlideIsHovered() {\r\n            return hoverEvent.slideIsHovered && hoverEvent.slideIndex <= firstVisibleTileIndex;\r\n        }\r\n\r\n        function lastSlideIsHovered() {\r\n            const EXTRA_THRESHOLD = 80;\r\n            const vehicleTileLocationPlusExtraThreshold =\r\n                targetClientRects.x + targetClientRects.width + (SLIDE_GUTTER_WIDTH + EXTRA_THRESHOLD);\r\n            return targetClientRects.x < window.innerWidth && vehicleTileLocationPlusExtraThreshold > window.innerWidth;\r\n        }\r\n\r\n        this.setState({\r\n            showNextButton: lastSlideIsHovered() || hoverEvent.nextButtonIsHovered ? true : false,\r\n            showPrevButton: firstSlideIsHovered() || hoverEvent.prevButtonIsHovered ? true : false,\r\n        });\r\n    }\r\n\r\n    private hideSlideNavButton(): void {\r\n        if (this.state.showNextButton === true || this.state.showPrevButton === true) {\r\n            this.setState({\r\n                showNextButton: false,\r\n                showPrevButton: false,\r\n            });\r\n        }\r\n    }\r\n\r\n    componentDidUpdate(prevProps: ICarouselProps) {\r\n        if (this._tinySlider && this.props.children.length !== prevProps.children.length) {\r\n            this._tinySlider.rebuild();\r\n        }\r\n    }\r\n\r\n    public render(): React.ReactNode {\r\n        const { children, name, nextFocus } = this.props;\r\n        const { showNextButton, showPrevButton } = this.state;\r\n\r\n        return (\r\n            <>\r\n                <a id={`pre-${name}-carousel`} className=\"skip-link\" href={nextFocus}>\r\n                    {`Skip ${this.props.ariaLabel ? this.props.ariaLabel : name.replace(/-/g, ' ')} Carousel`}\r\n                </a>\r\n                <div\r\n                    className={classNames('carousel max-width--xl', {\r\n                        ['scrollable']: showPrevButton && showNextButton,\r\n                    })}\r\n                >\r\n                    <div\r\n                        id={`${name}-carousel-slides`}\r\n                        data-carousel-length={React.Children.count(children)}\r\n                        className={classNames('carousel__slides', {\r\n                            ['carousel-slides__centered']: children.length < 5,\r\n                        })}\r\n                    >\r\n                        {React.Children.map(children, (child: React.ReactChild, index: number) => (\r\n                            <div\r\n                                className=\"carousel__slide\"\r\n                                data-is-current-slide={this.state.index === index ? true : false}\r\n                                key={`${index}-slide`}\r\n                                onMouseEnter={(event: any) =>\r\n                                    this.showSlideNavButton({\r\n                                        slideIsHovered: true,\r\n                                        nextButtonIsHovered: false,\r\n                                        prevButtonIsHovered: false,\r\n                                        slideIndex: index,\r\n                                        el: event.target,\r\n                                    })\r\n                                }\r\n                                onMouseLeave={() => this.hideSlideNavButton()}\r\n                            >\r\n                                {child}\r\n                            </div>\r\n                        ))}\r\n                    </div>\r\n                </div>\r\n\r\n                <button\r\n                    id={`${name}-carousel__prev`}\r\n                    className={classNames('carousel__prev', {\r\n                        'carousel-prev-button__hidden': !showPrevButton,\r\n                    })}\r\n                    onMouseEnter={(event: any) =>\r\n                        this.showSlideNavButton({\r\n                            slideIsHovered: false,\r\n                            nextButtonIsHovered: false,\r\n                            prevButtonIsHovered: true,\r\n                            slideIndex: this.state.index,\r\n                            el: event.target,\r\n                        })\r\n                    }\r\n                    onMouseLeave={() => this.hideSlideNavButton()}\r\n                    tabIndex={-1}\r\n                >\r\n                    <span className=\"visually-hidden\">Previous Slide</span>\r\n                    <svg viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\r\n                        <path d=\"M15.41 16.09l-4.58-4.59 4.58-4.59L14 5.5l-6 6 6 6z\" />\r\n                        <path d=\"M0-.5h24v24H0z\" fill=\"none\" />\r\n                    </svg>\r\n                </button>\r\n                <button\r\n                    id={`${name}-carousel__next`}\r\n                    className={classNames('carousel__next', {\r\n                        'carousel-next-button__hidden': !showNextButton,\r\n                    })}\r\n                    onMouseEnter={(event: any) =>\r\n                        this.showSlideNavButton({\r\n                            slideIsHovered: false,\r\n                            nextButtonIsHovered: true,\r\n                            prevButtonIsHovered: false,\r\n                            slideIndex: this.state.index,\r\n                            el: event.target,\r\n                        })\r\n                    }\r\n                    onMouseLeave={() => this.hideSlideNavButton()}\r\n                    tabIndex={-1}\r\n                >\r\n                    <span className=\"visually-hidden\">Next Slide</span>\r\n                    <svg viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\r\n                        <path d=\"M8.59 16.34l4.58-4.59-4.58-4.59L10 5.75l6 6-6 6z\" />\r\n                        <path d=\"M0-.25h24v24H0z\" fill=\"none\" />\r\n                    </svg>\r\n                </button>\r\n            </>\r\n        );\r\n    }\r\n}\r\n","import * as React from 'react';\r\nimport { gsap } from 'gsap';\r\nimport Carousel from './Carousel';\r\nimport { FBSContext } from '../../../context';\r\nimport { IFBSDecision } from '../../../api/types/finance';\r\nimport { shiftUnavailableVehiclesToEnd } from '../../../pages/home/utilities/helpers';\r\nimport { IVehicleTile } from '../../../types/vehicleTile';\r\nimport { CarTileWrapper } from '../../../pages/home/hero/car-tile/CarTileWrapper';\r\nimport { MiniHomebaseSlideCTA } from '../../../pages/buying-online/components/MiniHomebaseSlideCTA';\r\n\r\ndeclare global {\r\n    const featureFlags: any;\r\n}\r\n\r\ninterface IReturnVisitorCarouselProps {\r\n    id: string;\r\n    isVisible: boolean;\r\n    vehicleTileList: IVehicleTile[];\r\n    vehicleTileLinkAttrs?: { [key: string]: any };\r\n    analyticsName: string;\r\n    carouselName: string;\r\n    favoritedStockNumberList: number[];\r\n    stockNumbersPendingFavoritesUpdate: number[];\r\n    ariaLabel?: string;\r\n    updatedViewedTiles?: (tileToRemove: IVehicleTile) => any;\r\n    enableRemove: boolean;\r\n    fbsData?: IFBSDecision[];\r\n    isMiniHomebase?: boolean;\r\n    onOpenSnackBar: (text: string) => void;\r\n    sectionName?: string;\r\n}\r\n\r\ninterface IReturnVisitorCarouselState {\r\n    carouselItems: React.ReactElement[];\r\n    vehicleTileRefs: HTMLElement[];\r\n}\r\n\r\nexport default class ReturnVisitorCarousel extends React.Component<\r\n    IReturnVisitorCarouselProps,\r\n    IReturnVisitorCarouselState\r\n> {\r\n    static contextType?: React.Context<any> | undefined = FBSContext;\r\n    context!: React.ContextType<typeof FBSContext>;\r\n\r\n    constructor(props: any) {\r\n        super(props);\r\n        this.state = {\r\n            carouselItems: this.buildCarouselItems(),\r\n            vehicleTileRefs: [],\r\n        };\r\n\r\n        this.buildCarouselItems = this.buildCarouselItems.bind(this);\r\n        this.addToRefsList = this.addToRefsList.bind(this);\r\n    }\r\n\r\n    private addToRefsList(tileRef: HTMLElement) {\r\n        this.setState((currState) => ({ vehicleTileRefs: [...currState.vehicleTileRefs, tileRef] }));\r\n    }\r\n\r\n    private buildCarouselItems(): React.ReactElement[] {\r\n        if (!this.props.vehicleTileList?.length) {\r\n            return [];\r\n        }\r\n\r\n        const sortedVehicleList: IVehicleTile[] = shiftUnavailableVehiclesToEnd(\r\n            this.props.vehicleTileList as IVehicleTile[]\r\n        );\r\n\r\n        const carouselItems = sortedVehicleList\r\n            .filter((item: any) => item !== null)\r\n            .map((vehicle: IVehicleTile, index: number) => {\r\n                const { stockNumber }: IVehicleTile = vehicle;\r\n\r\n                return (\r\n                    <div\r\n                        className=\"carousel__slide\"\r\n                        key={`${stockNumber}-slide-${index}`}\r\n                        data-ymm={`${vehicle.year || ''} ${vehicle.make} ${vehicle.model} ${vehicle.trim}`}\r\n                        data-stocknumber={`${vehicle.stockNumber}`}\r\n                    >\r\n                        <div className=\"carousel-slide-item\">\r\n                            <CarTileWrapper\r\n                                vehicle={vehicle as IVehicleTile}\r\n                                updatedViewedTiles={this.props.updatedViewedTiles}\r\n                                enableRemove={this.props.enableRemove}\r\n                                isWaitingForFavoritesResponse={\r\n                                    this.props.stockNumbersPendingFavoritesUpdate.indexOf(stockNumber) > -1\r\n                                }\r\n                                sectionName={this.props.sectionName}\r\n                            />\r\n                        </div>\r\n                    </div>\r\n                );\r\n            });\r\n\r\n        if (this.props.isMiniHomebase) {\r\n            const headline = carouselItems.length > 1 ? 'None of these quite right?' : 'Not quite right?';\r\n            const hasFbsData = this.props.fbsData && this.props.fbsData.length > 0;\r\n            carouselItems.push(\r\n                <MiniHomebaseSlideCTA key={'pusher-slide'} headline={headline} hasFbsData={hasFbsData} />\r\n            );\r\n        }\r\n\r\n        return carouselItems;\r\n    }\r\n\r\n    public componentDidUpdate(prevProps: IReturnVisitorCarouselProps, prevState: IReturnVisitorCarouselState) {\r\n        const favoritedStockNumberListHasChanged =\r\n            JSON.stringify(this.props.favoritedStockNumberList) !== JSON.stringify(prevProps.favoritedStockNumberList);\r\n        const vehicleTileListHasChanged =\r\n            JSON.stringify(this.props.vehicleTileList) !== JSON.stringify(prevProps.vehicleTileList);\r\n        const pendingFavoritesUpdates =\r\n            JSON.stringify(this.props.stockNumbersPendingFavoritesUpdate) !==\r\n            JSON.stringify(prevProps.stockNumbersPendingFavoritesUpdate);\r\n        const isVisibleHasChanged = prevProps.isVisible !== this.props.isVisible;\r\n        const fbsTermsHaveChanged = JSON.stringify(this.props.fbsData) !== JSON.stringify(prevProps.fbsData);\r\n        if (\r\n            vehicleTileListHasChanged ||\r\n            favoritedStockNumberListHasChanged ||\r\n            pendingFavoritesUpdates ||\r\n            fbsTermsHaveChanged\r\n        ) {\r\n            this.setState(\r\n                {\r\n                    carouselItems: this.buildCarouselItems(),\r\n                },\r\n                () => {\r\n                    if (this.props.fbsData && this.props.fbsData.length && this.props.fbsData[0].stockNumber > 0) {\r\n                        setTimeout(() => {\r\n                            const carouselElement = document.getElementById('viewed-return-visitor-carousel-slides-mw');\r\n                            const homeBaseHeroElement = document.getElementById('home-base-hero');\r\n                            const tileTermElements = this.state.vehicleTileRefs.map((tile) =>\r\n                                tile.querySelector('.sc--fbs-terms')\r\n                            );\r\n                            const tabElements = homeBaseHeroElement?.querySelectorAll<HTMLElement>('.hp-tab-content');\r\n                            const firstTabElement = tabElements && tabElements[0];\r\n                            const fbsStylesAreSet =\r\n                                firstTabElement && firstTabElement?.getAttribute('style')?.includes('min-height:');\r\n                            const animFbsIntro = gsap\r\n                                .timeline({ paused: true })\r\n                                .add(() => homeBaseHeroElement?.classList.add('home-base-hero-fbs-height'))\r\n                                .to(\r\n                                    carouselElement,\r\n                                    { duration: 0.15, height: 415, ease: 'expo.inOut' },\r\n                                    fbsStylesAreSet ? 1.2 : 0.3\r\n                                )\r\n                                .to(\r\n                                    this.state.vehicleTileRefs,\r\n                                    { duration: fbsStylesAreSet ? 0.35 : 0.15, translateY: -12, ease: 'ease.inOut' },\r\n                                    '<'\r\n                                )\r\n                                .to(\r\n                                    this.state.vehicleTileRefs,\r\n                                    { duration: 0.025, translateY: 0, stagger: 0.05, ease: 'expo.inOut' },\r\n                                    '>0.3'\r\n                                )\r\n                                .to(\r\n                                    this.state.vehicleTileRefs,\r\n                                    { duration: 0.01, height: 415, stagger: 0.05, ease: 'expo.inOut' },\r\n                                    '<'\r\n                                )\r\n                                .to(\r\n                                    tileTermElements,\r\n                                    { duration: 0.5, autoAlpha: 1, stagger: 0.05, ease: 'expo.inOut' },\r\n                                    '-=0.25'\r\n                                )\r\n                                .add(() => {\r\n                                    if (!fbsStylesAreSet) {\r\n                                        const tabHeight = firstTabElement?.clientHeight ?? 0;\r\n                                        tabElements?.forEach((t) => (t.style.minHeight = `${tabHeight}px`));\r\n                                    }\r\n                                });\r\n                            gsap.timeline({ delay: 0 }).fromTo(\r\n                                animFbsIntro,\r\n                                { progress: 0 },\r\n                                { duration: 2, progress: 1, ease: 'none' }\r\n                            );\r\n                        }, 0);\r\n                    }\r\n                }\r\n            );\r\n        } else {\r\n            if (isVisibleHasChanged) {\r\n                this.setState({\r\n                    carouselItems: this.buildCarouselItems(),\r\n                });\r\n            }\r\n        }\r\n    }\r\n\r\n    public render(): React.ReactNode {\r\n        return (\r\n            <div\r\n                id={this.props.id}\r\n                className=\"carousel-container\"\r\n                data-vehicle-count={this.state.carouselItems.length}\r\n                data-saleable-vehicle-count={this.props.vehicleTileList.filter((item) => item.isSaleable).length}\r\n            >\r\n                <div className=\"home-base-hero--grid-container\">\r\n                    <Carousel\r\n                        name={`${this.props.carouselName}-return-visitor`}\r\n                        nextFocus=\"#budget-calculator-section\"\r\n                        ariaLabel={this.props.ariaLabel}\r\n                    >\r\n                        {this.state.carouselItems}\r\n                    </Carousel>\r\n                </div>\r\n            </div>\r\n        );\r\n    }\r\n}\r\n","export const largeBreakpoint = 900;\r\nexport const mediumBreakpoint = 500;\r\nexport const ymmtCharacterLimit = {\r\n    mobile: 52,\r\n    desktop: 32\r\n};","export const formatSeperatedInteger = (value: any) => {\r\n    if (value == null) {\r\n        return null;\r\n    } else if (typeof value === 'number') {\r\n        return value ? value.toFixed(0).replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',') : '';\r\n    } else {\r\n        return value ? value.replace(/[^0-9]*/g, '').replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',') : '';\r\n    }\r\n};\r\n\r\nexport const formatVin = (input: any) => {\r\n    if (input == null || input == '') return input;\r\n    else\r\n        return input\r\n            .toUpperCase()\r\n            .replace(/I/g, '1')\r\n            .replace(/O/g, '0')\r\n            .replace(/Q/g, '0');\r\n};\r\n","import React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport classNames from 'classnames';\r\nimport './snack-bar.scss';\r\n\r\ninterface ISnackBarProps {\r\n    cancelAction: () => void;\r\n    className: string;\r\n    icon?: JSX.Element;\r\n    textLabel: string;\r\n}\r\n\r\nexport const SnackBar = (props: ISnackBarProps) => {\r\n    const { cancelAction, className, icon, textLabel } = props;\r\n    const CLOSE_TIMEOUT = 3000;\r\n    const SNACKBAR_ANIMATION_DURATION = CLOSE_TIMEOUT + 750;\r\n    const SNACKBAR_ACTIVE_CLASS = 'hp-snackbar--active';\r\n    const snackBarRef = React.useRef<HTMLDivElement | null>(null);\r\n    const bodyRef = React.useRef<HTMLElement>(document.body);\r\n\r\n    const openSnackbar = () => {\r\n        const sbRef = snackBarRef.current;\r\n        sbRef && !sbRef.classList.contains(SNACKBAR_ACTIVE_CLASS) && sbRef.classList.add(SNACKBAR_ACTIVE_CLASS);\r\n    };\r\n\r\n    const closeSnackbar = () => {\r\n        const sbRef = snackBarRef.current;\r\n        sbRef && sbRef.classList.contains(SNACKBAR_ACTIVE_CLASS) && sbRef.classList.remove(SNACKBAR_ACTIVE_CLASS);\r\n        sbRef && sbRef.getAttribute('aria-live') && sbRef.setAttribute('aria-live', 'off');\r\n    };\r\n\r\n    const keydownHandler = React.useCallback(\r\n        (event) => {\r\n            const { key } = event as KeyboardEvent;\r\n            if (['Escape', 'Esc'].includes(key)) {\r\n                cancelAction();\r\n            }\r\n        },\r\n        [cancelAction]\r\n    );\r\n\r\n    React.useEffect(() => {\r\n        setTimeout(() => {\r\n            openSnackbar();\r\n        }, 250);\r\n        document.addEventListener('keydown', keydownHandler);\r\n        return () => document.removeEventListener('keydown', keydownHandler);\r\n    }, []);\r\n\r\n    React.useEffect(() => {\r\n        const id = setTimeout(() => {\r\n            closeSnackbar();\r\n        }, CLOSE_TIMEOUT);\r\n        return () => {\r\n            clearTimeout(id);\r\n        };\r\n    }, [CLOSE_TIMEOUT]);\r\n\r\n    React.useEffect(() => {\r\n        const id = setTimeout(() => {\r\n            cancelAction();\r\n        }, SNACKBAR_ANIMATION_DURATION);\r\n        return () => {\r\n            clearTimeout(id);\r\n        };\r\n    }, [SNACKBAR_ANIMATION_DURATION, cancelAction]);\r\n\r\n    const snackbar = (\r\n        <div\r\n            test-id=\"snackbar\"\r\n            className={classNames(className, 'hp-snackbar')}\r\n            aria-live=\"polite\"\r\n            aria-atomic=\"true\"\r\n            ref={snackBarRef}\r\n        >\r\n            {icon && <div className=\"icon\">{icon}</div>}\r\n            <div className=\"label\">{textLabel}</div>\r\n        </div>\r\n    );\r\n\r\n    return ReactDOM.createPortal(snackbar, bodyRef.current);\r\n};\r\n","import { createContext, ReactNode, useState, useEffect } from 'react';\r\nimport { getSmallBatchDecisions } from '../api/small-batch-api';\r\nimport { getCiamId } from '../api/myaccount-cookie-api';\r\nimport { IVehicleTile } from '../types/vehicleTile';\r\nimport { IFBSDecision } from '../api/types/finance';\r\n\r\ninterface IFBSProviderProps {\r\n    children: ReactNode;\r\n}\r\n\r\nexport const emptyFbsTermsData = {\r\n    fbsApplication: {\r\n        downPayment: 0,\r\n        expirationDateFormatted: '',\r\n        stateAbbreviation: '',\r\n        stationUrl: '',\r\n    },\r\n    fbsDecision: {\r\n        downPayment: 0,\r\n        isSoftPull: true,\r\n        decision: '',\r\n        lenderName: '',\r\n        totalFinanceAmount: 0,\r\n        terms: [\r\n            {\r\n                length: 0,\r\n                maxTermRate: {\r\n                    monthlyPayment: 0,\r\n                    apr: 0,\r\n                },\r\n                minTermRate: {\r\n                    monthlyPayment: 0,\r\n                    apr: 0,\r\n                },\r\n            },\r\n        ],\r\n        conditionAmount: 0,\r\n        conditionAmountRounded: 0,\r\n        stateAbbreviation: '',\r\n        taxesAndFeesRounded: 0,\r\n    },\r\n    stockNumber: 0,\r\n    vehicleData: {\r\n        basePrice: 0,\r\n        stockNumber: 0,\r\n        year: 0,\r\n        make: '',\r\n        model: '',\r\n        trim: '',\r\n        stateCode: '',\r\n        taxesAndFeesRounded: 0,\r\n    },\r\n    downPayment: 0,\r\n};\r\n\r\nconst defaultFbsData: IFBSDecision[] = [];\r\nconst defaultSetVehicleList = () => {\r\n    // will be replaced by useState\r\n};\r\n\r\ninterface IFBSContext {\r\n    stationUrl: string;\r\n    downPayment: number;\r\n    enableFBS: boolean;\r\n    fbsData: IFBSDecision[];\r\n    setVehicleList: (vehicleTileList: IVehicleTile[]) => void;\r\n}\r\nconst defaultContext: IFBSContext = {\r\n    stationUrl: '',\r\n    downPayment: 0,\r\n    enableFBS: false,\r\n    fbsData: defaultFbsData,\r\n    setVehicleList: defaultSetVehicleList,\r\n};\r\n\r\nexport const FBSContext = createContext<IFBSContext>(defaultContext);\r\n\r\nexport const FBSProvider = (props: IFBSProviderProps) => {\r\n    const [enableFBS, setEnableFBS] = useState(false);\r\n    const [vehicleList, setVehicleList] = useState<IVehicleTile[]>([]);\r\n    const [fbsData, setFbsData] = useState<IFBSDecision[]>([]);\r\n    const [downPayment, setDownPayment] = useState<number>(0);\r\n    const [stationUrl, setStationUrl] = useState<string>('');\r\n\r\n    useEffect(() => {\r\n        const tryEnablingFBS = async () => {\r\n            const vehicleStockNumbers = vehicleList.reduce((stockNumbers: number[], vehicle: IVehicleTile) => {\r\n                if (vehicle) {\r\n                    return [...stockNumbers, vehicle.stockNumber];\r\n                }\r\n                return stockNumbers;\r\n            }, []);\r\n\r\n            const ciamId = await getCiamId();\r\n            if (ciamId) {\r\n                const smallBatchDecisions = await getSmallBatchDecisions(ciamId, vehicleStockNumbers);\r\n                setFbsData((prevFbsData) => [...prevFbsData, ...smallBatchDecisions]);\r\n                if (\r\n                    smallBatchDecisions.length > 0 &&\r\n                    smallBatchDecisions[0].fbsDecision !== null &&\r\n                    smallBatchDecisions[0].stockNumber !== 0 &&\r\n                    smallBatchDecisions[0].fbsDecision.terms !== null\r\n                ) {\r\n                    setDownPayment(smallBatchDecisions[0].fbsDecision.downPayment);\r\n                    setStationUrl(smallBatchDecisions[0].applicationUrl);\r\n                    setEnableFBS(true);\r\n                }\r\n            }\r\n        };\r\n\r\n        if (vehicleList.length > 0) {\r\n            tryEnablingFBS();\r\n        }\r\n    }, [vehicleList]);\r\n\r\n    return (\r\n        <FBSContext.Provider value={{ ...defaultContext, stationUrl, downPayment, enableFBS, fbsData, setVehicleList }}>\r\n            {props.children}\r\n        </FBSContext.Provider>\r\n    );\r\n};\r\n","import { create } from 'zustand';\r\nimport { getCiamId } from '../api/myaccount-cookie-api';\r\nimport { IVehicleTile } from '../types/vehicleTile';\r\nimport { IFBSDecision } from '../api/types/finance';\r\nimport { getStoreZipCode, getStoreId, hasPreviouslySignedIn } from '../utilities/cookieHelper';\r\nimport { getLocalVehiclesData, getRecentlyViewedVehicleTiles } from '../utilities/vehicleTileBuilder';\r\nimport { getSmallBatchDecisions } from '../api/small-batch-api';\r\nimport { IGetCarImagesResponse } from '../types/api/getCarImagesResponse';\r\nimport { MAX_RECENTLY_VIEWED_VEHICLE_TILES } from '../pages/home/utilities/constants';\r\nimport { hideSnackBarFromExternalScript } from '../pages/home/hero/car-tile/carTileUtils';\r\nimport * as savedVehicles from '../pages/home/utilities/savedVehicles';\r\nimport { ITrackingPayload } from '../types/analytics';\r\nimport { ANALYTICS_CONSTANTS } from '../utilities/analytics';\r\nimport * as analytics from '../utilities/analytics';\r\n\r\nexport interface ILocalCarsState {\r\n    favoriteVehicles: number[];\r\n    fbsData: IFBSDecision[];\r\n    ciamId: string;\r\n    zipCode?: string;\r\n    storeId?: string;\r\n    radiusInMiles: number; // !TODO: Do we need this or should this be a constant in our end? \"The Select your store\" modal doesn't give the user an option to specify radius\r\n    localVehicles: IVehicleTile[];\r\n    recentlyViewedVehicles: IVehicleTile[];\r\n    isLocalVehiclesLoading: boolean;\r\n    isRecentlyVehiclesLoading: boolean;\r\n}\r\n\r\nexport interface ILocalCarsActions {\r\n    setCiam: () => Promise<void>;\r\n    setZipCode: () => void;\r\n    setStoreId: () => void;\r\n    setFbsData: (stockNumbers: number[]) => Promise<void>;\r\n    setLocalVehicles: (includeFbsData?: boolean) => Promise<void>;\r\n    toggleFavoritesResponse: (isSuccess: boolean, componentCallback?: () => void) => void;\r\n    addVehicleToFavorites: (stockNumber: number) => Promise<void>;\r\n    removeVehicleFromFavorites: (stockNumber: number, hideSnackbar?: boolean) => Promise<void>;\r\n    setRecentlyViewedVehicleTiles: (localData?: any, includeFbsData?: boolean) => Promise<void>;\r\n    setFavoriteVehicles: () => Promise<void>;\r\n    getCarImages: (\r\n        stockNumber: number,\r\n        successCallback: (response: IGetCarImagesResponse) => void,\r\n        errorCallback: (error: unknown) => void\r\n    ) => Promise<void>;\r\n}\r\n\r\nexport interface ILocalCarsStore extends ILocalCarsState, ILocalCarsActions {}\r\n\r\nexport const useLocalCarsStore = create<ILocalCarsStore>((set, get) => ({\r\n    favoriteVehicles: [],\r\n    recentlyViewedVehicles: [],\r\n    localVehicles: [],\r\n    isLocalVehiclesLoading: false,\r\n    isRecentlyVehiclesLoading: false,\r\n    fbsData: [],\r\n    ciamId: '',\r\n    zipCode: undefined,\r\n    storeId: undefined,\r\n    radiusInMiles: 25,\r\n    setCiam: async () => {\r\n        const ciamId = await getCiamId();\r\n        if (ciamId) {\r\n            set({ ciamId });\r\n        }\r\n    },\r\n    setZipCode: () => {\r\n        const zipCode = getStoreZipCode();\r\n        set({ zipCode });\r\n    },\r\n    setStoreId: () => {\r\n        const storeId = getStoreId();\r\n        set({ storeId });\r\n    },\r\n    setFbsData: async (stockNumbers: number[]) => {\r\n        // Merge existing stock numbers from current fbsData with the new ones\r\n        const mergedStockNumbers = [...stockNumbers, ...(get().fbsData || []).map((fbs) => fbs.stockNumber)];\r\n        const uniqueStockNumbers = Array.from(new Set(mergedStockNumbers));\r\n\r\n        if (uniqueStockNumbers.length > 0) {\r\n            const fbsData = await getSmallBatchDecisions(get().ciamId, uniqueStockNumbers, getStoreId());\r\n            set({ fbsData });\r\n        }\r\n    },\r\n    setRecentlyViewedVehicleTiles: async (localData?: any, includeFbsData = true) => {\r\n        if (localData) {\r\n            set({ recentlyViewedVehicles: localData });\r\n            return;\r\n        }\r\n\r\n        set({ isRecentlyVehiclesLoading: true });\r\n\r\n        await get().setStoreId();\r\n        const recentlyViewedVehicles = await getRecentlyViewedVehicleTiles(\r\n            MAX_RECENTLY_VIEWED_VEHICLE_TILES,\r\n            get().storeId\r\n        );\r\n\r\n        // Include FBS data\r\n        if (includeFbsData && recentlyViewedVehicles?.length > 0) {\r\n            await get().setFbsData(recentlyViewedVehicles.map(({ stockNumber }) => stockNumber));\r\n\r\n            recentlyViewedVehicles.forEach((vehicle: IVehicleTile) => {\r\n                const decision = get().fbsData?.find((fbs) => fbs.stockNumber === vehicle.stockNumber);\r\n\r\n                if (decision) {\r\n                    vehicle.fbsData = decision;\r\n                }\r\n            });\r\n        }\r\n\r\n        set({ recentlyViewedVehicles });\r\n        set({ isRecentlyVehiclesLoading: false });\r\n    },\r\n    setLocalVehicles: async (includeFbsData = true) => {\r\n        set({ isLocalVehiclesLoading: true });\r\n        // Update zipCode\r\n        await get().setZipCode();\r\n\r\n        // Update storeId\r\n        await get().setStoreId();\r\n\r\n        // Get local vehicles\r\n        const localVehicles = await getLocalVehiclesData({\r\n            take: 10, // TODO: what should be the value?\r\n            zipCode: get().zipCode || '', // TODO: what happens if we send an empty string?\r\n            radiusInMiles: get().radiusInMiles, // TODO: what should be the value?\r\n            storeId: get().storeId || '',\r\n        });\r\n\r\n        // Include FBS data\r\n        if (includeFbsData && localVehicles?.length > 0) {\r\n            await get().setFbsData(localVehicles.map(({ stockNumber }) => stockNumber));\r\n\r\n            localVehicles.forEach((vehicle: IVehicleTile) => {\r\n                const decision = get().fbsData?.find((fbs) => fbs.stockNumber === vehicle.stockNumber);\r\n\r\n                if (decision) {\r\n                    vehicle.fbsData = decision;\r\n                }\r\n            });\r\n        }\r\n\r\n        // Update store\r\n        set({ localVehicles });\r\n        set({ isLocalVehiclesLoading: false });\r\n    },\r\n    toggleFavoritesResponse: (isSuccess: boolean, componentCallback?: () => void) => {\r\n        isSuccess && componentCallback && componentCallback();\r\n    },\r\n    addVehicleToFavorites: async (stockNumber: number) => {\r\n        const payload: ITrackingPayload = {\r\n            event: ANALYTICS_CONSTANTS.EVENTS.CLICK.SAVE_RECOMMENDED_CAR,\r\n            linkDetails: {\r\n                name: 'save car',\r\n                position: stockNumber.toString(),\r\n            },\r\n        };\r\n        analytics.trackEDDL(payload);\r\n        const event = new CustomEvent('kmxAddSavedCar', {\r\n            bubbles: true,\r\n            detail: {\r\n                stockNumber,\r\n                callback: async (result: Promise<boolean>) => {\r\n                    const isSuccess = await result;\r\n                    get().toggleFavoritesResponse(isSuccess, () => {\r\n                        set((state) => ({ favoriteVehicles: [...state.favoriteVehicles, stockNumber] }));\r\n                    });\r\n                },\r\n            },\r\n        });\r\n        document.documentElement.dispatchEvent(event);\r\n    },\r\n    removeVehicleFromFavorites: async (stockNumber: number, hideSnackbar?: boolean) => {\r\n        const payload: ITrackingPayload = {\r\n            event: ANALYTICS_CONSTANTS.EVENTS.CLICK.CTA,\r\n            linkDetails: {\r\n                name: 'remove from favorites',\r\n                position: stockNumber.toString(),\r\n            },\r\n        };\r\n        analytics.trackEDDL(payload);\r\n        const event = new CustomEvent('kmxRemoveSavedCar', {\r\n            bubbles: true,\r\n            detail: {\r\n                stockNumber,\r\n                callback: async (result: Promise<boolean>) => {\r\n                    const isSuccess = await result;\r\n                    get().toggleFavoritesResponse(isSuccess, () =>\r\n                        set((state) => ({\r\n                            favoriteVehicles: state.favoriteVehicles.filter(\r\n                                (favoriteStockNumber) => favoriteStockNumber !== stockNumber\r\n                            ),\r\n                        }))\r\n                    );\r\n                },\r\n            },\r\n        });\r\n\r\n        hideSnackbar && hideSnackBarFromExternalScript();\r\n\r\n        document.documentElement.dispatchEvent(event);\r\n    },\r\n    setFavoriteVehicles: async () => {\r\n        savedVehicles.getSavedVehicles((favoriteVehicles: number[]) => {\r\n            set({ favoriteVehicles });\r\n        });\r\n    },\r\n    getCarImages: async (\r\n        stockNumber: number,\r\n        successCallback: (response: IGetCarImagesResponse) => void,\r\n        errorCallback: (error: unknown) => void\r\n    ) => {\r\n        try {\r\n            const url = `https://img2.carmax.com/api/subject/${stockNumber}`;\r\n            const response = await fetch(url, { mode: 'cors' });\r\n            if (response.ok) {\r\n                const data = await response.json();\r\n                successCallback(data);\r\n            } else if (response.status === 404) {\r\n                throw new Error('Not Found');\r\n            } else {\r\n                throw new Error('Failed to fetch images');\r\n            }\r\n        } catch (error) {\r\n            errorCallback(error);\r\n        }\r\n    },\r\n}));\r\n\r\n// Access localCarsStore in browser console. Might want to put behind a flag.\r\nObject.assign(window, { _useLocalCarsStore: useLocalCarsStore });\r\n","import { FC } from 'react';\r\n\r\ninterface IMiniHomebaseSlideCTAProps {\r\n    headline: string;\r\n    hasFbsData?: boolean;\r\n}\r\n\r\nexport const MiniHomebaseSlideCTA: FC<IMiniHomebaseSlideCTAProps> = ({ headline, hasFbsData }) => {\r\n    return (\r\n        <div className=\"carousel__slide\" key=\"pusher-slide\">\r\n            <div className=\"carousel-slide-item\">\r\n                <div className={`mini-homebase-slide-pusher ${hasFbsData && 'has-fbs'}`}>\r\n                    <div className=\"mini-homebase-slide-pusher--flex-container\">\r\n                        <h2 className=\"mini-homebase-slide-pusher--heading\">{headline}</h2>\r\n                        <a id=\"mini-homebase-cta\" href=\"/cars/all\" className=\"mini-homebase-slide-pusher--cta\">\r\n                            Start a Search\r\n                        </a>\r\n                    </div>\r\n                </div>\r\n            </div>\r\n        </div>\r\n    );\r\n};\r\n","import * as React from 'react';\r\n\r\nclass SVGs {\r\n    static get arrowIcon() {\r\n        return (\r\n            <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-hidden=\"true\">\r\n                <path d=\"M4 12l1.41 1.41L11 7.83V20h2V7.83l5.58 5.59L20 12l-8-8-8 8z\" />\r\n                <path fill=\"none\" d=\"M0 0h24v24H0V0z\" />\r\n            </svg>\r\n        );\r\n    }\r\n    static get homeIcon() {\r\n        return (\r\n            <svg viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\r\n                <path d=\"M10 20v-6h4v6h5v-8h3L12 3 2 12h3v8z\" />\r\n                <path d=\"M0 0h24v24H0z\" fill=\"none\" />\r\n            </svg>\r\n        );\r\n    }\r\n    static get locationIcon() {\r\n        return (\r\n            <svg viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\r\n                <path d=\"M12 2a7 7 0 00-7 7c0 5.25 7 13 7 13s7-7.75 7-13a7 7 0 00-7-7zm0 9.5a2.5 2.5 0 110-5 2.5 2.5 0 010 5z\" />\r\n                <path d=\"M0 0h24v24H0z\" fill=\"none\" />\r\n            </svg>\r\n        );\r\n    }\r\n    static get locationMUIIcon() {\r\n        return (\r\n            <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"22\" height=\"22\" viewBox=\"0 0 22 22\" fill=\"none\">\r\n                <path\r\n                    fillRule=\"evenodd\"\r\n                    clipRule=\"evenodd\"\r\n                    d=\"M2.10156 10.0805C2.10156 5.17635 6.09823 1.17969 11.0024 1.17969C15.9066 1.17969 19.9032 4.95635 19.9032 10.0805C19.9032 15.1853 14.2629 18.8526 12.3804 20.0767L12.3591 20.0905C11.9466 20.3564 11.4699 20.4939 11.0024 20.4939C10.5349 20.4939 10.0582 20.3564 9.64573 20.0905C7.77573 18.8805 2.10156 14.9847 2.10156 10.0805ZM10.3249 18.9823L10.3516 18.9997C10.7457 19.2564 11.2591 19.2564 11.6532 18.9997C13.3674 17.8905 18.6016 14.4989 18.6016 10.0805C18.6016 5.89135 15.1916 2.48135 11.0024 2.48135C6.81323 2.48135 3.40323 5.67135 3.40323 10.0805C3.40323 14.467 8.58373 17.8465 10.3249 18.9823ZM7.60156 10.0805C7.60156 8.20135 9.12323 6.67969 11.0024 6.67969C12.8816 6.67969 14.4032 8.20135 14.4032 10.0805C14.4032 11.9597 12.8816 13.4814 11.0024 13.4814C9.12323 13.4814 7.60156 11.9597 7.60156 10.0805ZM8.90323 10.0805C8.90323 11.2355 9.8474 12.1797 11.0024 12.1797C12.1574 12.1797 13.1016 11.2355 13.1016 10.0805C13.1016 8.92552 12.1574 7.98135 11.0024 7.98135C9.8474 7.98135 8.90323 8.92552 8.90323 10.0805Z\"\r\n                    fill=\"currentColor\"\r\n                />\r\n            </svg>\r\n        );\r\n    }\r\n    static get signaturePath() {\r\n        return (\r\n            <svg\r\n                id=\"buying-online-steps--signature-svg\"\r\n                xmlns=\"http://www.w3.org/2000/svg\"\r\n                width=\"166.72\"\r\n                height=\"86.45\"\r\n                viewBox=\"0 0 166.72 86.45\"\r\n                aria-hidden=\"true\"\r\n                focusable=\"false\"\r\n            >\r\n                <path\r\n                    id=\"buying-online-steps--signature-path\"\r\n                    d=\"M62.73,59.39C77.26,54.76,78,26.35,78.6,10.76c0,0-.46,73.95-8.17,73.95S60.77,59,50.18,45.07C16.49.93-28.78,67.7,31,62.69c21-1.76,39-10.57,55-21.63,51.58-35.73,18.33-66.06.17-4.3C73.16,81,94.65,60.05,99,50.58c3.18-7,.33,21.91,12.83-.82,0,0-1.38,20.43,11.28,11.06,7.21-5.34,1.72-22.31-4-15.08-5.28,6.71,12.77,25.91,20.48,5.5,17.07-45.14-16.93-28.64-5.5,1.21,8.8,23,14.64,10.68,21.79,4.07,5.2-4.79-4.91,9.94,9.69,5.4\"\r\n                    transform=\"translate(-0.34 0.25)\"\r\n                    fill=\"none\"\r\n                    stroke=\"#000\"\r\n                    strokeLinecap=\"round\"\r\n                    strokeLinejoin=\"round\"\r\n                    strokeWidth=\"3\"\r\n                />\r\n            </svg>\r\n        );\r\n    }\r\n    static get calendarIcon() {\r\n        return (\r\n            <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"30\" height=\"32\" viewBox=\"0 0 30 32\" aria-hidden=\"true\">\r\n                <path\r\n                    d=\"M14.45,17a2.39,2.39,0,0,0,1.07-2.07c0-1.49-1.32-2.52-3.13-2.52A3.47,3.47,0,0,0,9,14.3l1.52.75a1.78,1.78,0,0,1,1.85-1.13c.93,0,1.42.54,1.42,1.07a1.18,1.18,0,0,1-1.12,1.24H11.29v1.62H12.5c.95,0,1.37.46,1.37,1.14a1.38,1.38,0,0,1-1.49,1.26,2.13,2.13,0,0,1-2-1.2l-1.52,1.1a3.91,3.91,0,0,0,3.48,1.7c2.06,0,3.26-1.23,3.26-2.81A2.18,2.18,0,0,0,14.45,17Z\"\r\n                    transform=\"translate(-0.93)\"\r\n                    fill=\"#fff\"\r\n                />\r\n                <path\r\n                    d=\"M22.84,18.84V15.46A3,3,0,0,0,19.9,12.4h-.2a3,3,0,0,0-3.13,2.86h0v3.57a2.83,2.83,0,0,0,2.65,3h0a1.85,1.85,0,0,0,.47,0,2.86,2.86,0,0,0,3.13-2.56A3.23,3.23,0,0,0,22.84,18.84Zm-4.52-.08V15.53a1.31,1.31,0,0,1,1.22-1.41h.17a1.29,1.29,0,0,1,1.38,1.19v0a.67.67,0,0,1,0,.2v3.24a1.29,1.29,0,0,1-1.24,1.33h-.16A1.26,1.26,0,0,1,18.32,19Z\"\r\n                    transform=\"translate(-0.93)\"\r\n                    fill=\"#fff\"\r\n                />\r\n                <path\r\n                    d=\"M28.5,2.07H25.72V0H24.14V2.07H7.86V0H6.28V2.07H3.5A2.58,2.58,0,0,0,.93,4.64v4H29.5V26.4c0,.84-.39,1.39-1,1.39H18l1.52-1.53-1.11-1.11L15,28.58,18.39,32l1.11-1.11L18,29.36H28.5a2.71,2.71,0,0,0,2.59-2.79V4.25A2.51,2.51,0,0,0,28.5,2.07Zm1,5H2.5V4.64a1,1,0,0,1,1-1H6.28V5.72H7.86V3.64H24.14V5.72h1.58V3.64H28.5a1.11,1.11,0,0,1,1,.61Z\"\r\n                    transform=\"translate(-0.93)\"\r\n                    fill=\"#fff\"\r\n                />\r\n                <rect y=\"16.25\" width=\"1.57\" height=\"4.72\" fill=\"#ffd900\" />\r\n                <rect y=\"9.97\" width=\"1.57\" height=\"4.72\" fill=\"#ffd900\" />\r\n                <rect x=\"8.09\" y=\"27.79\" width=\"4.72\" height=\"1.57\" fill=\"#ffd900\" />\r\n                <path\r\n                    d=\"M3.08,27.7l-.65,1.43a2.64,2.64,0,0,0,1.07.23h4V27.79h-4A1,1,0,0,1,3.08,27.7Z\"\r\n                    transform=\"translate(-0.93)\"\r\n                    fill=\"#ffd900\"\r\n                />\r\n                <path\r\n                    d=\"M2.5,26.79V22.54H.93v4.25a2.51,2.51,0,0,0,.08.67l1.52-.41A1.15,1.15,0,0,1,2.5,26.79Z\"\r\n                    transform=\"translate(-0.93)\"\r\n                    fill=\"#ffd900\"\r\n                />\r\n            </svg>\r\n        );\r\n    }\r\n}\r\n\r\nexport default SVGs;\r\n","export const allPriorUses = [\r\n    {\r\n        id: 10,\r\n        displayName: 'Fleet',\r\n    },\r\n    {\r\n        id: 20,\r\n        displayName: 'Leased Vehicle',\r\n    },\r\n    {\r\n        id: 30,\r\n        displayName: 'Rental',\r\n    },\r\n    {\r\n        id: 50,\r\n        displayName: 'Taxi',\r\n    },\r\n    {\r\n        id: 60,\r\n        displayName: 'Police',\r\n    },\r\n    {\r\n        id: 70,\r\n        displayName: 'Government Use',\r\n    },\r\n    {\r\n        id: 100,\r\n        displayName: 'Driver Education',\r\n    },\r\n    {\r\n        id: 140,\r\n        displayName: 'Canadian Renewal',\r\n    },\r\n    {\r\n        id: 440,\r\n        displayName: 'Miles Exempt',\r\n    },\r\n    {\r\n        id: 580,\r\n        displayName: 'Court Ordered Title',\r\n    },\r\n    {\r\n        id: 620,\r\n        displayName: 'Livery',\r\n    },\r\n    {\r\n        id: 630,\r\n        displayName: 'Prior Theft History',\r\n    },\r\n    {\r\n        id: 680,\r\n        displayName: 'Kit',\r\n    },\r\n    {\r\n        id: 681,\r\n        displayName: 'Police (Nmvtis)',\r\n    },\r\n    {\r\n        id: 683,\r\n        displayName: 'Possible Aftermarket Mods',\r\n    },\r\n    {\r\n        id: 684,\r\n        displayName: 'Rental (Nmvtis)',\r\n    },\r\n    {\r\n        id: 685,\r\n        displayName: 'Miles Exempt (Nmvtis)',\r\n    },\r\n    {\r\n        id: 686,\r\n        displayName: 'Canadian Odometer Reading',\r\n    },\r\n    {\r\n        id: 687,\r\n        displayName: 'Canadian Import',\r\n    },\r\n    {\r\n        id: 697,\r\n        displayName: 'Prior Theft History',\r\n    },\r\n];\r\n","// eslint-disable-next-line @typescript-eslint/ban-ts-comment\r\n// @ts-nocheck\r\nimport { formatSeperatedInteger } from '../../../../../components/instant-offers/utils/format';\r\nimport { allPriorUses } from './allPriorUses';\r\n\r\n/**\r\n * Conditionally adds a string value to the provided line items collection.\r\n * @param {string} label - the label of the item to add.\r\n * @param {string} value - the value to add.\r\n * @param {array} lineItems - array of line items to augment.\r\n */\r\nconst addStringLineItem = (label, value, lineItems) => {\r\n    if (value && typeof value === 'string') {\r\n        lineItems.push({\r\n            label,\r\n            value,\r\n        });\r\n    }\r\n};\r\n\r\n/**\r\n * Conditionally adds a number value to the provided line items collection.\r\n * @param {string} label - the label of the item to add.\r\n * @param {number} value - the value to add.\r\n * @param {boolean} addCommas - indicates whether the value should be formatted with commas.\r\n * @param {array} lineItems - array of line items to augment.\r\n */\r\nconst addNumberLineItem = (label, value, addCommas, lineItems) => {\r\n    if (typeof value === 'number') {\r\n        const numberValue = Number(value);\r\n\r\n        lineItems.push({\r\n            label,\r\n            value: addCommas ? formatSeperatedInteger(numberValue) : numberValue.toString(),\r\n        });\r\n    }\r\n};\r\n\r\n/**\r\n * Conditionally adds an array of string values to the provided line items collection.\r\n * @param {string} label - the label of the item to add.\r\n * @param {array} value - the array of values to add.\r\n * @param {array} lineItems - array of line items to augment.\r\n */\r\nconst addStringArrayLineItem = (label, value, lineItems) => {\r\n    if (Array.isArray(value) && value.length > 0 && value.every((v) => typeof v === 'string')) {\r\n        lineItems.push({\r\n            label,\r\n            value: value.join(', '),\r\n        });\r\n    }\r\n};\r\n\r\nconst excludedHighlights = ['warranty'];\r\nconst highlightValuesToDescriptions = {\r\n    singleowner: 'Single Owner',\r\n    allnewtires: 'All New Tires',\r\n    newpairtires: 'New Pair of Tires',\r\n    lowmiles: 'Low Miles',\r\n    lowmilesperyear: 'Low Miles Per Year',\r\n    fuelefficient: 'Fuel Efficient',\r\n    advancedfeatures: 'Advanced Features',\r\n    premiumaudio: 'Premium Audio',\r\n};\r\n\r\nexport const extractBaseSpecificationsLineItems = (car) => {\r\n    const {\r\n        body,\r\n        vehicleSize,\r\n        series,\r\n        types,\r\n        mileage,\r\n        storeCity,\r\n        state,\r\n        packages,\r\n        priorUses,\r\n        mpgCity,\r\n        mpgHighway,\r\n    } = car;\r\n\r\n    const lineItems = [];\r\n\r\n    addStringLineItem('Body', body, lineItems);\r\n    addStringLineItem('Vehicle Size', vehicleSize, lineItems);\r\n    addStringLineItem('Series', series, lineItems);\r\n    addStringArrayLineItem('Type', types, lineItems);\r\n    addNumberLineItem('Mileage', mileage, true, lineItems);\r\n\r\n    if (storeCity || state) {\r\n        let cityState = storeCity || '';\r\n        if (state) {\r\n            cityState = `${cityState}${cityState.length ? ', ' : ''}${state}`;\r\n        }\r\n\r\n        lineItems.push({\r\n            label: 'City, State',\r\n            value: cityState,\r\n        });\r\n    }\r\n    addStringArrayLineItem('Package', packages, lineItems);\r\n\r\n    if (!priorUses?.length) {\r\n        lineItems.push({\r\n            label: 'Prior Use',\r\n            value: 'None',\r\n        });\r\n    } else {\r\n        const displayNames = priorUses\r\n            .map((pu) => {\r\n                const priorUseWithDisplayName = allPriorUses.find((apu) => apu.id === +pu);\r\n                if (!priorUseWithDisplayName) {\r\n                    return null;\r\n                }\r\n\r\n                return priorUseWithDisplayName.displayName;\r\n            })\r\n            .filter((pu) => !!pu);\r\n\r\n        addStringArrayLineItem('Prior Use', displayNames, lineItems);\r\n    }\r\n\r\n    if (mpgCity || mpgHighway) {\r\n        let mpg = mpgCity ? mpgCity.toString() : '';\r\n        if (mpgHighway) {\r\n            mpg = `${mpg}${mpg ? '/' : ''}${mpgHighway.toString()}`;\r\n        }\r\n\r\n        lineItems.push({\r\n            label: 'City/Highway MPG',\r\n            value: mpg,\r\n        });\r\n    }\r\n\r\n    return lineItems;\r\n};\r\n\r\nexport const extractColorsLineItems = (car) => {\r\n    const { exteriorColor, interiorColor } = car;\r\n\r\n    const lineItems = [];\r\n\r\n    addStringLineItem('Exterior', exteriorColor, lineItems);\r\n    addStringLineItem('Interior', interiorColor, lineItems);\r\n\r\n    return lineItems;\r\n};\r\n\r\nexport const extractEngineLineItems = (car) => {\r\n    const {\r\n        engineSize,\r\n        engineType,\r\n        engineTorque,\r\n        engineTorqueRpm,\r\n        horsepower,\r\n        horsepowerRpm,\r\n        cylinders,\r\n        fuelType,\r\n        driveTrain,\r\n        transmission,\r\n    } = car;\r\n\r\n    const lineItems = [];\r\n\r\n    // if engine size is not null and the engine size string contains a positive float\r\n    if (engineSize && Number(engineSize.replace(/[^0-9]+/g, '')) > 0) {\r\n        addStringLineItem('Engine Size', engineSize, lineItems);\r\n    }\r\n\r\n    addStringLineItem('Engine Type', engineType, lineItems);\r\n\r\n    if (engineTorque || engineTorqueRpm) {\r\n        let torqueValue = engineTorque ? engineTorque.toString() : '';\r\n        if (engineTorqueRpm) {\r\n            torqueValue = `${torqueValue}${torqueValue ? '/' : ''}${engineTorqueRpm.toString()} RPM`;\r\n        }\r\n\r\n        lineItems.push({\r\n            label: 'Engine Torque',\r\n            value: torqueValue,\r\n        });\r\n    }\r\n\r\n    if (horsepower || horsepowerRpm) {\r\n        let horsepowerValue = horsepower ? horsepower.toString() : '';\r\n        if (horsepowerRpm) {\r\n            horsepowerValue = `${horsepowerValue}${horsepowerValue ? '/' : ''}${horsepowerRpm.toString()} RPM`;\r\n        }\r\n\r\n        lineItems.push({\r\n            label: 'Horsepower',\r\n            value: horsepowerValue,\r\n        });\r\n    }\r\n\r\n    if (cylinders && cylinders !== '0') {\r\n        addNumberLineItem('Cylinders', cylinders, false, lineItems);\r\n    }\r\n\r\n    addStringLineItem('Fuel Type', fuelType, lineItems);\r\n    addStringLineItem('Drive Train', driveTrain, lineItems);\r\n    addStringLineItem('Transmission', transmission, lineItems);\r\n\r\n    return lineItems;\r\n};\r\n\r\nexport const extractKeyFeatureLineItems = (car) => {\r\n    const { highlightedFeatures } = car;\r\n\r\n    if (!highlightedFeatures || highlightedFeatures.length === 0) {\r\n        return [];\r\n    }\r\n\r\n    return highlightedFeatures.map((f) => ({\r\n        label: null,\r\n        value: f.trim(),\r\n    }));\r\n};\r\n\r\nexport const extractHighlightsLineItems = (car) => {\r\n    const { highlights } = car;\r\n\r\n    if (!highlights) {\r\n        return [];\r\n    }\r\n\r\n    // Highlights come over as merged strings in camel case.\r\n    const readableHighlights = highlights\r\n        .filter((h) => !excludedHighlights.includes(h?.toLowerCase()))\r\n        .map((h) => highlightValuesToDescriptions[h?.toLowerCase()] || h);\r\n\r\n    return readableHighlights.map((h) => ({\r\n        label: null,\r\n        value: h,\r\n    }));\r\n};\r\n\r\nexport const extractFeaturesLineItems = (car) => {\r\n    const { featureScore, features } = car;\r\n\r\n    let lineItems = [];\r\n    if (features) {\r\n        lineItems = features.map((f) => ({\r\n            label: null,\r\n            value: f,\r\n        }));\r\n    }\r\n\r\n    if (typeof featureScore === 'number') {\r\n        let featureScoreCategory = 'Basic';\r\n        if (featureScore > 3 && featureScore < 8) {\r\n            featureScoreCategory = 'Well-Equipped';\r\n        } else if (featureScore >= 8) {\r\n            featureScoreCategory = 'Loaded';\r\n        }\r\n\r\n        lineItems.unshift({\r\n            label: 'Feature Summary',\r\n            value: `${featureScoreCategory} (${featureScore})`,\r\n        });\r\n    }\r\n\r\n    return lineItems;\r\n};\r\n\r\nexport const extractRatingsAndReviewsLineItems = (car) => {\r\n    const { averageRating, numberOfReviews } = car;\r\n\r\n    const lineItems = [];\r\n\r\n    if (typeof averageRating === 'number' && averageRating !== 0) {\r\n        addStringLineItem('Average Rating', `${Number(averageRating).toFixed(2)}/5`, lineItems);\r\n    }\r\n\r\n    if (numberOfReviews) {\r\n        addNumberLineItem('Number of Reviews', numberOfReviews, true, lineItems);\r\n    }\r\n\r\n    return lineItems;\r\n};\r\n","import { Dispatch, SetStateAction, useMemo } from 'react';\r\nimport Dialog from '../../../../components/Dialog';\r\nimport { IVehicleTile } from '../../../../types/vehicleTile';\r\nimport {\r\n    extractBaseSpecificationsLineItems,\r\n    extractColorsLineItems,\r\n    extractEngineLineItems,\r\n    extractFeaturesLineItems,\r\n    extractHighlightsLineItems,\r\n    extractKeyFeatureLineItems,\r\n    extractRatingsAndReviewsLineItems,\r\n} from './utils/additionalVehicleInfoHelper';\r\nimport './VehicleDetailsDialog.scss';\r\n\r\ninterface VehicleDetailsDialogProps {\r\n    isVisible: boolean;\r\n    vehicle: IVehicleTile;\r\n    setIsDialogVisible: Dispatch<SetStateAction<boolean>>;\r\n}\r\n\r\nconst Section = ({ title, items }: { title: string; items: { label: string; value: string }[] }) => {\r\n    const withLabels = useMemo(() => items.filter((li) => !!li.label), [items]);\r\n    const withoutLabels = useMemo(() => items.filter((li) => !li.label), [items]);\r\n\r\n    if (items.length > 0) <></>;\r\n\r\n    if (withLabels.length === 0 && withoutLabels.length === 0) {\r\n        return null;\r\n    }\r\n\r\n    // Display Features section\r\n    if (title === 'All features') {\r\n        return (\r\n            <section>\r\n                <h2>{title}</h2>\r\n                <div className=\"label-value-list\">\r\n                    <div>{items[0].label}</div>\r\n                    <div>{items[0].value}</div>\r\n                </div>\r\n                <div className=\"values-only-list\">\r\n                    {items.slice(1).map((item, i) => (\r\n                        <div key={i}>{item.value}</div>\r\n                    ))}\r\n                </div>\r\n            </section>\r\n        );\r\n    }\r\n\r\n    // Display values only\r\n    if (withoutLabels.length === items.length) {\r\n        return (\r\n            <section>\r\n                <h2>{title}</h2>\r\n                <div className=\"values-only-list\">\r\n                    {items.map((item, i) => (\r\n                        <div key={i}>{item.value}</div>\r\n                    ))}\r\n                </div>\r\n            </section>\r\n        );\r\n    }\r\n\r\n    // Display label and value pairs\r\n    return (\r\n        <section>\r\n            <h2>{title}</h2>\r\n            {items.map((item, i) => (\r\n                <div key={i} className=\"label-value-list\">\r\n                    <div>{item.label}</div>\r\n                    <div>{item.value}</div>\r\n                </div>\r\n            ))}\r\n        </section>\r\n    );\r\n};\r\n\r\nexport const VehicleDetailsDialog = ({ isVisible, vehicle, setIsDialogVisible }: VehicleDetailsDialogProps) => {\r\n    return (\r\n        <Dialog isVisible={isVisible} onClose={() => setIsDialogVisible(false)}>\r\n            <div className=\"vehicle-details-modal\">\r\n                <h3>About this car</h3>\r\n                <div className=\"vehicle-info\">\r\n                    <div>\r\n                        <hzn-copy-button value={vehicle.stockNumber?.toString()}></hzn-copy-button>\r\n                        Stock {vehicle.stockNumber}\r\n                    </div>\r\n                    <div>\r\n                        <hzn-copy-button value={vehicle.vin}></hzn-copy-button>\r\n                        VIN {vehicle.vin}\r\n                    </div>\r\n                </div>\r\n                <div className=\"vehicle-info-list\">\r\n                    <Section title=\"Base specifications\" items={extractBaseSpecificationsLineItems(vehicle)} />\r\n                    <Section title=\"Colors\" items={extractColorsLineItems(vehicle)} />\r\n                    <Section title=\"Engine\" items={extractEngineLineItems(vehicle)} />\r\n                    <Section title=\"Key features\" items={extractKeyFeatureLineItems(vehicle)} />\r\n                    <Section title=\"Highlights\" items={extractHighlightsLineItems(vehicle)} />\r\n                    <Section title=\"All features\" items={extractFeaturesLineItems(vehicle)} />\r\n                    <Section title=\"Ratings &amp; reviews\" items={extractRatingsAndReviewsLineItems(vehicle)} />\r\n                </div>\r\n            </div>\r\n        </Dialog>\r\n    );\r\n};\r\n","import { CarTile, ModalHandler } from '@kmx/car-tile';\r\nimport { IVehicleTile } from '../../../../types/vehicleTile';\r\nimport { vehicleIsUnavailable, buildStatusText } from '../../../../utilities/vehicleTileBuilder';\r\nimport { mapVehicleTileToCar } from './carTileUtils';\r\nimport { useEffect, useState, useContext, useRef } from 'react';\r\nimport Icons from '../../../../utilities/icons';\r\nimport { getCarImages } from '../../../../api/getCarImages';\r\nimport { FBSContext } from './../../../../context/';\r\nimport { IFBSDecision } from '../../../../api/types/finance';\r\nimport * as analytics from '../../../../utilities/analytics';\r\nimport TileKebabMenuItemSnackbar from '../tile-kebab-menu/TileKebabMenuItemSnackbar';\r\nimport { useLocalCarsStore } from '../../../../context/localCarsStore';\r\nimport { useShallow } from 'zustand/react/shallow';\r\nimport { ANALYTICS_CONSTANTS, trackEDDL } from '../../../../utilities/analytics';\r\nimport { ITrackingPayload } from '../../../../types/analytics';\r\nimport { VehicleDetailsDialog } from './VehicleDetailsDialog';\r\n\r\ninterface ICarTileWrapperProps {\r\n    vehicle: IVehicleTile;\r\n    updatedViewedTiles?: (VehicleTile: IVehicleTile) => any;\r\n    enableRemove: boolean;\r\n    isWaitingForFavoritesResponse: boolean;\r\n    isCompact?: boolean;\r\n    sectionName?: string;\r\n}\r\n\r\nexport const CarTileWrapper = ({\r\n    vehicle,\r\n    updatedViewedTiles,\r\n    enableRemove,\r\n    isCompact = true,\r\n    sectionName,\r\n}: ICarTileWrapperProps) => {\r\n    const ref = useRef(null);\r\n    const car = mapVehicleTileToCar(vehicle);\r\n    const [isFavoriteInUI, setIsFavoriteInUI] = useState<boolean>(false);\r\n    const [snackbar, setSnackBar] = useState<{ icon: any; text: string; isOpen: boolean }>({\r\n        icon: undefined,\r\n        text: '',\r\n        isOpen: false,\r\n    });\r\n    const [isDialogVisible, setIsDialogVisible] = useState(false);\r\n    const ribbonText = buildStatusText(vehicle);\r\n    const fbsContext = useContext(FBSContext);\r\n\r\n    const mapDecisionToFbsApplication = (decision: IFBSDecision) => {\r\n        const {\r\n            applicationUrl,\r\n            fbsDecision: { downPayment, expirationDateFormatted, stateAbbreviation, isSoftPull, tradeInBreakdown },\r\n        } = decision;\r\n        return {\r\n            downPayment: downPayment,\r\n            stateAbbreviation: stateAbbreviation,\r\n            stationUrl: applicationUrl,\r\n            expirationDateFormatted: expirationDateFormatted,\r\n            isSoftPull: isSoftPull,\r\n            tradeInBreakdown,\r\n        };\r\n    };\r\n\r\n    const { favoriteVehicles, addVehicleToFavorites, removeVehicleFromFavorites } = useLocalCarsStore(\r\n        useShallow((state) => ({\r\n            favoriteVehicles: state.favoriteVehicles,\r\n            addVehicleToFavorites: state.addVehicleToFavorites,\r\n            removeVehicleFromFavorites: state.removeVehicleFromFavorites,\r\n        }))\r\n    );\r\n\r\n    const decision = fbsContext.fbsData.find((d) => d.stockNumber === vehicle.stockNumber);\r\n    let fbsApplication: object | undefined;\r\n    if (decision) {\r\n        fbsApplication = mapDecisionToFbsApplication(decision);\r\n    }\r\n\r\n    const getMenuItems = (vehicle: IVehicleTile) => {\r\n        const menuItems = [\r\n            {\r\n                text: `${isFavoriteInUI ? 'Remove from' : 'Add to'} favorites`,\r\n                icon: Icons.favoriteHeart,\r\n                onClick: () => {\r\n                    handleHeartClick();\r\n                },\r\n                className: `tile-menu-item--favorite ${isFavoriteInUI ? 'saved' : ''}`,\r\n            },\r\n            {\r\n                text: 'Share',\r\n                icon: Icons.share,\r\n                onClick: () => {\r\n                    handleShareClick();\r\n                    const payload: ITrackingPayload = {\r\n                        event: ANALYTICS_CONSTANTS.EVENTS.CLICK.CTA,\r\n                        linkDetails: {\r\n                            name: 'share',\r\n                            position: vehicle.stockNumber.toString(),\r\n                        },\r\n                    };\r\n                    analytics.trackEDDL(payload);\r\n                },\r\n                className: 'tile-menu-item--share',\r\n            },\r\n        ];\r\n\r\n        if (vehicle.state) {\r\n            menuItems.push({\r\n                text: 'Features & specs',\r\n                icon: Icons.AdvancedFeaturesIcon,\r\n                onClick: () => {\r\n                    const payload: ITrackingPayload = {\r\n                        event: ANALYTICS_CONSTANTS.EVENTS.CLICK.CTA,\r\n                        linkDetails: {\r\n                            name: 'Features & specs',\r\n                            position: vehicle.stockNumber.toString(),\r\n                        },\r\n                    };\r\n                    analytics.trackEDDL(payload);\r\n\r\n                    setIsDialogVisible(true);\r\n                },\r\n                className: 'tile-menu-item--features',\r\n            });\r\n        }\r\n\r\n        return menuItems;\r\n    };\r\n\r\n    const CRITICAL_MENU_ITEM = {\r\n        text: 'Remove',\r\n        icon: Icons.remove,\r\n        onClick: () => {\r\n            handleRemoveVehicleTile();\r\n            const name = 'remove';\r\n            const event = ANALYTICS_CONSTANTS.EVENTS.CLICK.CTA;\r\n            const payload: ITrackingPayload = {\r\n                event: event,\r\n                linkDetails: {\r\n                    name: name,\r\n                    position: vehicle.stockNumber.toString(),\r\n                },\r\n            };\r\n            analytics.trackEDDL(payload);\r\n        },\r\n        className: 'tile-menu-item--remove',\r\n    };\r\n\r\n    useEffect(() => {\r\n        setIsFavoriteInUI(favoriteVehicles.includes(vehicle.stockNumber));\r\n    }, [favoriteVehicles, vehicle.stockNumber]);\r\n\r\n    const handleHeartClick = () => {\r\n        setIsFavoriteInUI(isFavoriteInUI);\r\n\r\n        if (isFavoriteInUI) {\r\n            removeVehicleFromFavorites(vehicle.stockNumber);\r\n        } else {\r\n            addVehicleToFavorites(vehicle.stockNumber);\r\n        }\r\n    };\r\n\r\n    // Wrap the get request so we can indirectly provide the built in image carousel with our context env.\r\n    const getImagesWithContext = (\r\n        stockNumber: any,\r\n        successCallback: (response: any) => void,\r\n        errorCallback: (error: any) => void\r\n    ) => {\r\n        return getCarImages(stockNumber, successCallback, errorCallback);\r\n    };\r\n\r\n    const handleRemoveVehicleTile = async () => {\r\n        if (updatedViewedTiles) {\r\n            updatedViewedTiles(vehicle);\r\n        }\r\n        removeVehicleFromFavorites(vehicle.stockNumber, true);\r\n    };\r\n\r\n    const handleShareClick = async () => {\r\n        if (navigator.share) {\r\n            navigator\r\n                .share({\r\n                    title: `${document.title}.`,\r\n                    text: `Check out ${document.title}.`,\r\n                    url: `${window.location.origin}/car/${vehicle.stockNumber}`,\r\n                })\r\n                .then(() => console.log('Successful Car Tile Share'))\r\n                .catch((error) => console.log('Error Sharing Car Tile', error));\r\n        } else {\r\n            await navigator.clipboard.writeText(`${window.location.origin}/car/${vehicle.stockNumber}`);\r\n            setSnackBar({ icon: Icons.share, isOpen: true, text: 'Link copied to your clipboard' });\r\n        }\r\n    };\r\n\r\n    const handleOnMenuOpen = () => {\r\n        const payload: ITrackingPayload = {\r\n            event: ANALYTICS_CONSTANTS.EVENTS.CLICK.CTA,\r\n            linkDetails: {\r\n                name: 'three dots',\r\n                position: String(vehicle.stockNumber),\r\n            },\r\n        };\r\n        analytics.trackEDDL(payload);\r\n    };\r\n\r\n    useEffect(() => {\r\n        const onCarTileClick = (e: Event) => {\r\n            // Get closest <a> element\r\n            const closestAElement = (e.target as HTMLElement)?.closest('a')?.classList;\r\n\r\n            // Check if user clicked either the title or car image\r\n            if (\r\n                closestAElement?.contains('scct--make-model-info-link') ||\r\n                closestAElement?.contains('scct--image-gallery__image-link')\r\n            ) {\r\n                // Prevent default\r\n                e.preventDefault();\r\n\r\n                const closestSection = (e.target as HTMLElement)?.closest('section')?.id;\r\n                const isRecommendedCarTile = closestSection ? ['local-cars', 'kmx-recommended-carousel'].includes(closestSection) : false;\r\n                const event = isRecommendedCarTile ? ANALYTICS_CONSTANTS.EVENTS.CLICK.RECOMMENDED_CARTILE : ANALYTICS_CONSTANTS.EVENTS.CLICK.CTA;\r\n\r\n                // Analytics\r\n                trackEDDL({\r\n                    event,\r\n                    linkDetails: {\r\n                        name: [car.year, car.make, car.model, car.trim].filter((item) => item).join(' '),\r\n                        position: sectionName,\r\n                    },\r\n                    // recommendations key is only read when the event is a \"recommended\" car tile click\r\n                    // both rec keys below should be set to stock number while DDS discusses. Ignore snippet in Github for now.\r\n                    recommendations: {\r\n                        recommendedCarClicked: `${car.stockNumber}`,\r\n                        stockNumber: `${car.stockNumber}`,\r\n                    },\r\n                    // similar to above, recommendations key is only read when the event is a recommended car tile click\r\n                    module: {\r\n                        moduleExperience: `VR|Homepage|${sectionName}`,\r\n                    },\r\n                });\r\n\r\n                // Redirect\r\n                setTimeout(() => {\r\n                    window.location.href = `/car/${car.stockNumber}`;\r\n                }, ANALYTICS_CONSTANTS.TRACKING_DELAY);\r\n            }\r\n        };\r\n\r\n        // Add event listener to CarTile\r\n        const tile = ref.current as HTMLElement | null;\r\n\r\n        if (tile) {\r\n            tile.addEventListener('click', onCarTileClick);\r\n            return () => {\r\n                tile.removeEventListener('click', onCarTileClick);\r\n            };\r\n        }\r\n    }, [sectionName, car.stockNumber, car.year, car.make, car.model, car.trim]);\r\n\r\n    return (\r\n        <div ref={ref}>\r\n            <ModalHandler>\r\n                <CarTile\r\n                    car={car}\r\n                    disableScrollNav={false}\r\n                    imageUrl={vehicle.imageLink}\r\n                    showFavorites={true}\r\n                    isDisabled={vehicleIsUnavailable(vehicle.statusCode, vehicle.isSaleable)}\r\n                    ribbonStyle=\"standard\"\r\n                    ribbonText={ribbonText}\r\n                    isFavorite={isFavoriteInUI}\r\n                    menuItems={getMenuItems(vehicle)}\r\n                    criticalMenuItem={enableRemove ? CRITICAL_MENU_ITEM : undefined}\r\n                    onFavorite={handleHeartClick}\r\n                    onUnfavorite={handleHeartClick}\r\n                    getCarImages={getImagesWithContext}\r\n                    fbsApplication={fbsApplication}\r\n                    fbsDecision={decision?.fbsDecision}\r\n                    downPayment={decision?.fbsDecision.downPayment}\r\n                    recommendationType={vehicle.recommendationType}\r\n                    onMenuOpen={handleOnMenuOpen}\r\n                    isCompact={isCompact}\r\n                    hasPriceDrop={vehicle.hasPriceDrop}\r\n                    originalPrice={vehicle.originalPrice}\r\n                    showElectricVehicleInfo\r\n                />\r\n            </ModalHandler>\r\n\r\n            <VehicleDetailsDialog\r\n                isVisible={isDialogVisible}\r\n                vehicle={vehicle}\r\n                setIsDialogVisible={setIsDialogVisible}\r\n            />\r\n\r\n            <TileKebabMenuItemSnackbar\r\n                icon={snackbar.icon}\r\n                isOpen={snackbar.isOpen}\r\n                textLabel={snackbar.text}\r\n                cancelAction={() => setSnackBar({ icon: undefined, isOpen: false, text: '' })}\r\n            />\r\n        </div>\r\n    );\r\n};\r\n","export async function getCarImages(\r\n    stockNumber: any,\r\n    successCallback: (response: any) => void,\r\n    errorCallback: (error: any) => void\r\n) {\r\n    try {\r\n        const url = `https://img2.carmax.com/api/subject/${stockNumber}`;\r\n        const res = await fetch(url, { mode: 'cors' });\r\n        const carImages = await res.json();\r\n        successCallback(carImages);\r\n        return carImages;\r\n    } catch (error) {\r\n        errorCallback(error);\r\n    }\r\n}\r\n","import { IVehicleTile } from '../../../../types/vehicleTile';\r\n\r\nexport const mapVehicleTileToCar = (vehicleTile: IVehicleTile) => {\r\n    return {\r\n        ...vehicleTile,\r\n        imageCount: 1, // TODO\r\n        highlights: [], // TODO\r\n        transferText: vehicleTile.shippingText,\r\n    };\r\n};\r\n\r\nexport const hideSnackBarFromExternalScript = () => {\r\n    const externalSnackbar = document.getElementById('parking-lot-snackbar');\r\n    if (externalSnackbar) {\r\n        externalSnackbar.style.display = 'none';\r\n        setTimeout(() => {\r\n            externalSnackbar.style.display = 'block';\r\n        }, 2900);\r\n    }\r\n};\r\n","import { SnackBar } from '../../../../components/snack-bar/SnackBar';\r\n\r\ninterface ITileKebabMenuItemSnackbarProps {\r\n    icon?: JSX.Element;\r\n    isOpen: boolean;\r\n    textLabel: string;\r\n    cancelAction: () => void;\r\n}\r\n\r\nconst TileKebabMenuItemSnackbar = ({ isOpen, textLabel, icon, cancelAction }: ITileKebabMenuItemSnackbarProps) => {\r\n    if (!isOpen) return null;\r\n\r\n    return <SnackBar icon={icon} className={'tile-snackbar'} textLabel={textLabel} cancelAction={cancelAction} />;\r\n};\r\n\r\nexport default TileKebabMenuItemSnackbar;\r\n","export const toDollars = (value: number, includeCents?: boolean): string => {\r\n    if (value) {\r\n        const returnValue = includeCents ? value.toFixed(2) : value.toFixed(0);\r\n\r\n        return '$' + returnValue.replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',');\r\n    } else {\r\n        return includeCents ? '$0.00' : '$0';\r\n    }\r\n};\r\n\r\nexport const extractNumberFromString = (value: string): number => {\r\n    if (typeof value === 'string') {\r\n        const number = stripNonNumeric(value);\r\n        return number;\r\n    }\r\n    return value;\r\n};\r\n\r\nexport const stripNonNumeric = (original: string): number => {\r\n    const value = original;\r\n    const parsedFloat = parseFloat(value.replace(/[^0-9.]+/g, ''));\r\n    return typeof parsedFloat === 'number' && parsedFloat !== parsedFloat ? 0 : parsedFloat;\r\n};\r\n","import * as financeCalculatorUtils from './utils/financeCalculatorUtils';\r\nimport { ITaxesAndFees } from '../../../api/taxes-and-fees-api';\r\n\r\nexport enum FinancingUpdateTypes {\r\n    NearestStoreState = 'NEAREST_STORE_STATE',\r\n    MonthlyPayment = 'MONTHLY_PAYMENT',\r\n    DownPayment = 'DOWN_PAYMENT',\r\n    InterestRate = 'INTEREST_RATE',\r\n    LoanTerm = 'LOAN_TERM'\r\n}\r\n\r\nexport interface IFinancingUpdate {\r\n    type: FinancingUpdateTypes;\r\n    value: string | number;\r\n}\r\n\r\nexport interface IFinanceCalculatorInitialValues {\r\n    name: string;\r\n    nearestStoreState: string;\r\n    monthlyPayment: number;\r\n    downPayment: number;\r\n    annualInterestRate: number;\r\n    loanTerm: number;\r\n    taxesAndFeesList: ITaxesAndFees[] | [];\r\n}\r\n\r\nexport interface IFinanceCalculator {\r\n    id: number;\r\n    name: string;\r\n    nearestStoreState: string;\r\n    monthlyPayment: number;\r\n    downPayment: number;\r\n    annualInterestRate: number;\r\n    loanTerm: number;\r\n    totalFees: number;\r\n    vehiclePrice: number;\r\n    totalPrice: number;\r\n    financePrice: number;\r\n    update(taxesAndFeesList: ITaxesAndFees[], financingUpdate: IFinancingUpdate): number;\r\n}\r\n\r\nexport default class FinanceCalculator implements IFinanceCalculator {\r\n    private _id: number;\r\n    private _name: string;\r\n    private _nearestStoreState: string;\r\n    private _monthlyPayment: number;\r\n    private _downPayment: number;\r\n    private _annualInterestRate: number;\r\n    private _loanTerm: number;\r\n    private _totalFees: number;\r\n    private _vehiclePrice: number;\r\n    private _totalPrice: number;\r\n    private _financePrice: number;\r\n    private _taxesAndFeesList: ITaxesAndFees[] | [];\r\n\r\n    constructor(initialValues: IFinanceCalculatorInitialValues) {\r\n        this._id = Date.now();\r\n        this._name = initialValues.name;\r\n        this._nearestStoreState = initialValues.nearestStoreState;\r\n        this._monthlyPayment = initialValues.monthlyPayment;\r\n        this._downPayment = initialValues.downPayment;\r\n        this._annualInterestRate = initialValues.annualInterestRate;\r\n        this._loanTerm = initialValues.loanTerm;\r\n        this._totalFees = 0;\r\n        this._vehiclePrice = 0;\r\n        this._totalPrice = 0;\r\n        this._financePrice = 0;\r\n        this._taxesAndFeesList = initialValues.taxesAndFeesList;\r\n\r\n        this.calculateAndSetAllPrices();\r\n    }\r\n\r\n    get id(): number {\r\n        return this._id;\r\n    }\r\n\r\n    get name(): string {\r\n        return this._name;\r\n    }\r\n\r\n    get nearestStoreState(): string {\r\n        return this._nearestStoreState;\r\n    }\r\n\r\n    get monthlyPayment(): number {\r\n        return this._monthlyPayment;\r\n    }\r\n\r\n    get downPayment(): number {\r\n        return this._downPayment;\r\n    }\r\n\r\n    get annualInterestRate(): number {\r\n        return this._annualInterestRate;\r\n    }\r\n\r\n    get loanTerm(): number {\r\n        return this._loanTerm;\r\n    }\r\n\r\n    get totalFees(): number {\r\n        return this._totalFees;\r\n    }\r\n\r\n    get vehiclePrice(): number {\r\n        return this._vehiclePrice;\r\n    }\r\n\r\n    get totalPrice(): number {\r\n        return this._totalPrice;\r\n    }\r\n\r\n    get financePrice(): number {\r\n        return this._financePrice;\r\n    }\r\n\r\n    private updateId(): void {\r\n        ++this._id;\r\n    }\r\n\r\n    private calculateAndSetAllPrices(): void {\r\n        const vehiclePriceAndTotalFees = financeCalculatorUtils.getVehiclePriceAndTotalFees(this._taxesAndFeesList, this);\r\n\r\n        this._vehiclePrice = vehiclePriceAndTotalFees.vehiclePrice;\r\n        this._totalFees = vehiclePriceAndTotalFees.totalFees;\r\n        this._totalPrice = financeCalculatorUtils.calculateTotalPrice(this);\r\n        this._financePrice = financeCalculatorUtils.calculateFinancePrice(this);\r\n    }\r\n\r\n    public update(taxesAndFeesList: ITaxesAndFees[], financingUpdate: IFinancingUpdate): number {\r\n        switch (financingUpdate.type) {\r\n            case FinancingUpdateTypes.NearestStoreState:\r\n                this._nearestStoreState = String(financingUpdate.value);\r\n                break;\r\n            case FinancingUpdateTypes.MonthlyPayment:\r\n                this._monthlyPayment = Number(financingUpdate.value);\r\n                break;\r\n            case FinancingUpdateTypes.DownPayment:\r\n                this._downPayment = Number(financingUpdate.value);\r\n                break;\r\n            case FinancingUpdateTypes.InterestRate:\r\n                this._annualInterestRate = Number(financingUpdate.value);\r\n                break;\r\n            case FinancingUpdateTypes.LoanTerm:\r\n                this._loanTerm = Number(financingUpdate.value);\r\n                break;\r\n            default:\r\n                console.log('FinanceCalculator: Type not found: ', financingUpdate.type);\r\n                return this._id;\r\n        }\r\n\r\n        this._taxesAndFeesList = taxesAndFeesList;\r\n        this.calculateAndSetAllPrices();\r\n        this.updateId();\r\n\r\n        return this._id;\r\n    }\r\n}\r\n","import { ITaxesAndFees } from '../../../../api/taxes-and-fees-api';\r\nimport { IFinanceCalculator, IFinanceCalculatorInitialValues } from '../FinanceCalculator';\r\nimport { IFinanceCalculatorLocalStorage } from './types';\r\nimport * as constants from './constants';\r\nimport { extractNumberFromString } from '../../../../utilities/formatter';\r\nimport * as budgetCalculatorUtils from './budgetCalculatorUtils';\r\n\r\nexport interface IFees {\r\n    totalFees: number;\r\n    plateTransfer: string[];\r\n    salesTax: string[];\r\n    registration: string;\r\n    title: string;\r\n    additionalFees: string;\r\n}\r\n\r\nexport const defaultFees: IFees = {\r\n    totalFees: 0,\r\n    plateTransfer: [],\r\n    salesTax: [],\r\n    registration: '',\r\n    title: '',\r\n    additionalFees: ''\r\n};\r\n\r\nexport interface ITotalCost {\r\n    vehiclePrice: number;\r\n    totalFees: number;\r\n}\r\n\r\nexport const buildFinanceCalculatorDefaults = (name: string, apr: string): IFinanceCalculatorInitialValues => {\r\n    return {\r\n        name: name,\r\n        nearestStoreState: '',\r\n        monthlyPayment: 400,\r\n        downPayment: 2500,\r\n        annualInterestRate: +apr,\r\n        loanTerm: 72,\r\n        taxesAndFeesList: []\r\n    };\r\n};\r\n\r\nexport const mapCachedFinanceCalculatorToInitialValues = (\r\n    financeCalculatorLocalStorage: IFinanceCalculatorLocalStorage,\r\n    financeCalculatorInitialValues: IFinanceCalculatorInitialValues,\r\n    creditScores: budgetCalculatorUtils.ICreditScores\r\n): IFinanceCalculatorInitialValues => {\r\n    financeCalculatorInitialValues.nearestStoreState = financeCalculatorLocalStorage.feeState;\r\n\r\n    if (typeof financeCalculatorLocalStorage.downPayment === 'string') {\r\n        financeCalculatorInitialValues.downPayment = Number(\r\n            extractNumberFromString(financeCalculatorLocalStorage.downPayment)\r\n        );\r\n    } else {\r\n        financeCalculatorInitialValues.downPayment = Number(financeCalculatorLocalStorage.downPayment);\r\n    }\r\n\r\n    financeCalculatorInitialValues.annualInterestRate = Number(\r\n        creditScores.allIds[\r\n            Number(financeCalculatorLocalStorage.apr) < 0 ? 2 : Number(financeCalculatorLocalStorage.apr)\r\n        ]\r\n    );\r\n\r\n    (financeCalculatorInitialValues.taxesAndFeesList as ITaxesAndFees[]) = financeCalculatorLocalStorage.feesList.sort(\r\n        (a, b) => a.minimum - b.minimum\r\n    );\r\n\r\n    if (typeof financeCalculatorLocalStorage.monthlyPayment === 'number') {\r\n        financeCalculatorInitialValues.monthlyPayment = financeCalculatorLocalStorage.monthlyPayment;\r\n    }\r\n\r\n    financeCalculatorInitialValues.loanTerm = Number(financeCalculatorLocalStorage.term);\r\n\r\n    return financeCalculatorInitialValues;\r\n};\r\n\r\nexport const calculateVehiclePrice = (financeCalculator: IFinanceCalculator): number => {\r\n    return calculateBudget(financeCalculator) - financeCalculator.totalFees;\r\n};\r\n\r\nexport const calculateBudget = (financeCalculator: IFinanceCalculator): number => {\r\n    let monthlyInterestRate = null;\r\n    const decimalMonthlyInterestRate = financeCalculator.annualInterestRate / 1200;\r\n\r\n    if (decimalMonthlyInterestRate !== 0) {\r\n        monthlyInterestRate =\r\n            (1 - 1 / Math.pow(1 + decimalMonthlyInterestRate, financeCalculator.loanTerm)) / decimalMonthlyInterestRate;\r\n    }\r\n    return (\r\n        financeCalculator.monthlyPayment * (monthlyInterestRate ? monthlyInterestRate : financeCalculator.loanTerm) +\r\n        financeCalculator.downPayment\r\n    );\r\n};\r\n\r\nexport const calculateTotalPrice = (financeCalculator: IFinanceCalculator): number => {\r\n    return financeCalculator.vehiclePrice + financeCalculator.totalFees;\r\n};\r\n\r\nexport const calculateFinancePrice = (financeCalculator: IFinanceCalculator): number => {\r\n    return financeCalculator.vehiclePrice + financeCalculator.totalFees - financeCalculator.downPayment;\r\n};\r\n\r\nexport const getRateTier = (i: number, rateOptions: any): number => {\r\n    return rateOptions.findIndex((r: { value: number }) => r.value == i);\r\n};\r\n\r\nexport const getVehiclePriceAndTotalFees = (\r\n    taxesAndFeesList: ITaxesAndFees[] | [],\r\n    financeCalculator: IFinanceCalculator\r\n): ITotalCost => {\r\n    const budget = calculateBudget(financeCalculator);\r\n    const roundedBudget = Math.round(budget);\r\n    const totalCost: ITotalCost = {\r\n        vehiclePrice: 0,\r\n        totalFees: 0\r\n    };\r\n\r\n    if (hasEmptytaxesAndFeesList(taxesAndFeesList)) {\r\n        totalCost.vehiclePrice = roundedBudget;\r\n    } else if (hasLowestBudget(roundedBudget, taxesAndFeesList)) {\r\n        totalCost.totalFees = taxesAndFeesList[0].estimatedFeesMaximum;\r\n    } else if (hasHighestBudget(roundedBudget, taxesAndFeesList)) {\r\n        totalCost.vehiclePrice = roundedBudget;\r\n        totalCost.totalFees = taxesAndFeesList[taxesAndFeesList.length - 1].estimatedFeesMaximum;\r\n    } else {\r\n        taxesAndFeesList.forEach((taxesAndFees, i) => {\r\n            if (budgetRangeExists(i, roundedBudget, taxesAndFeesList)) {\r\n                totalCost.totalFees = taxesAndFees.estimatedFeesMaximum;\r\n                totalCost.vehiclePrice = roundedBudget - totalCost.totalFees;\r\n                return totalCost;\r\n            } else {\r\n                if (budgetRangeDoesNotExist(i, roundedBudget, taxesAndFeesList)) {\r\n                    totalCost.totalFees = getHighFeesForBudgetInGap(i, taxesAndFeesList);\r\n                    totalCost.vehiclePrice = roundedBudget - totalCost.totalFees;\r\n                }\r\n            }\r\n        });\r\n    }\r\n\r\n    return totalCost;\r\n\r\n    function hasEmptytaxesAndFeesList(fsl: ITaxesAndFees[]): boolean {\r\n        return fsl.length === 0;\r\n    }\r\n\r\n    function hasLowestBudget(rb: number, fsl: ITaxesAndFees[]): boolean {\r\n        return rb === 0 || rb < fsl[0].minimum + fsl[0].estimatedFeesMaximum;\r\n    }\r\n\r\n    function hasHighestBudget(rb: number, fsl: ITaxesAndFees[]): boolean {\r\n        return rb > fsl[fsl.length - 1].maximum + fsl[fsl.length - 1].estimatedFeesMaximum;\r\n    }\r\n\r\n    function budgetRangeExists(i: number, rb: number, fsl: ITaxesAndFees[]): boolean {\r\n        return rb >= fsl[i].minimum + fsl[i].estimatedFeesMaximum && rb <= fsl[i].maximum + fsl[i].estimatedFeesMaximum;\r\n    }\r\n\r\n    function budgetRangeDoesNotExist(i: number, rb: number, fsl: ITaxesAndFees[]): boolean {\r\n        if (i === 0) {\r\n            return false;\r\n        } else {\r\n            return (\r\n                rb >= fsl[i - 1].maximum + fsl[i - 1].estimatedFeesMaximum &&\r\n                rb <= fsl[i].minimum + fsl[i].estimatedFeesMaximum\r\n            );\r\n        }\r\n    }\r\n\r\n    function getHighFeesForBudgetInGap(i: number, fsl: ITaxesAndFees[]): number {\r\n        return fsl[i].estimatedFeesMaximum;\r\n    }\r\n};\r\n","export const MAX_MONTHLY_PAYMENT = 5000;\r\n\r\nexport const MAX_DOWN_PAYMENT = 100000;\r\n\r\nexport const vehicleTypeListLocalStorage = {\r\n    key: 'kmxHP:vehicleTypeList',\r\n};\r\n\r\nexport const ENABLE_BUDGET_CALCULATOR_GROUP_B_CONTENT_EVENT = 'kmxEnableBudgetCalculatorGroupBContent';\r\n","import * as budgetCalculatorUtils from './budgetCalculatorUtils';\r\nimport { IBudgetSearchContent } from './types';\r\n\r\nexport const budgetSearch: IBudgetSearchContent = {\r\n    header: 'See cars your budget will love',\r\n    vehicleTypeCarouselSelect: {\r\n        header: 'What kinds of cars do you want?',\r\n        headerDetails: 'Pick all that apply',\r\n        vehicleTypeTileImageWidth: '78',\r\n        vehicleTypeTileImageHeight: '43',\r\n        vehicleTypeList: [\r\n            {\r\n                pathSegment: 'sport-utilities',\r\n                imgSrc: '/home/images/shared/icons/vehicle-types/sport-utilities.svg',\r\n                label: 'SUVs'\r\n            },\r\n            {\r\n                pathSegment: 'pickup-trucks',\r\n                imgSrc: '/home/images/shared/icons/vehicle-types/pickup-trucks.svg',\r\n                label: 'Trucks'\r\n            },\r\n            {\r\n                pathSegment: 'sedans',\r\n                imgSrc: '/home/images/shared/icons/vehicle-types/sedans.svg',\r\n                label: 'Sedans'\r\n            },\r\n            {\r\n                pathSegment: 'crossovers',\r\n                imgSrc: '/home/images/shared/icons/vehicle-types/crossovers.svg',\r\n                label: 'Crossovers'\r\n            },\r\n            {\r\n                pathSegment: 'coupes',\r\n                imgSrc: '/home/images/shared/icons/vehicle-types/coupes.svg',\r\n                label: 'Coupes'\r\n            },\r\n            {\r\n                pathSegment: 'convertibles',\r\n                imgSrc: '/home/images/shared/icons/vehicle-types/convertibles.svg',\r\n                label: 'Convertibles'\r\n            },\r\n            {\r\n                pathSegment: 'luxury-vehicles',\r\n                imgSrc: '/home/images/shared/icons/vehicle-types/luxury-vehicles.svg',\r\n                label: 'Luxury'\r\n            },\r\n            {\r\n                pathSegment: 'sports-cars',\r\n                imgSrc: '/home/images/shared/icons/vehicle-types/sports-cars.svg',\r\n                label: 'Sports Cars'\r\n            },\r\n            {\r\n                pathSegment: 'diesel-engines',\r\n                imgSrc: '/home/images/shared/icons/vehicle-types/diesel-engines.svg',\r\n                label: 'Diesel'\r\n            },\r\n            {\r\n                pathSegment: 'minivans-and-vans',\r\n                imgSrc: '/home/images/shared/icons/vehicle-types/minivans-and-vans.svg',\r\n                label: 'Vans'\r\n            },\r\n            {\r\n                pathSegment: 'hybrids',\r\n                imgSrc: '/home/images/shared/icons/vehicle-types/hybrids.svg',\r\n                label: 'Hybrids'\r\n            },\r\n            {\r\n                pathSegment: 'wagons',\r\n                imgSrc: '/home/images/shared/icons/vehicle-types/wagons.svg',\r\n                label: 'Wagons'\r\n            },\r\n            {\r\n                pathSegment: 'electric',\r\n                imgSrc: '/home/images/shared/icons/vehicle-types/electric-cars.svg',\r\n                label: 'Electric'\r\n            }\r\n        ]\r\n    },\r\n    monthlyPaymentInput: {\r\n        label: 'Monthly Payment'\r\n    },\r\n    downPaymentInput: {\r\n        label: 'Down Payment',\r\n        zeroDownPaymentPrompt: 'Any amount can help'\r\n    },\r\n    creditScoreSelect: {\r\n        label: 'Credit Score'\r\n    },\r\n    vehiclePriceHeader: 'Est. Vehicle Price',\r\n    vehiclePriceAriaLabel: 'Your budget is now around',\r\n    vehiclePriceDisclaimerButtonText: 'How we calculated this',\r\n    primaryCtaId: 'calc-button-shop-cars',\r\n    primaryCtaText: 'Get Pre-Qualified',\r\n    buildPrimaryCtaLink: options =>\r\n        `/pre-qual/app?op=homepagecalc&vehicleprice=${Math.round(options.upperRange)}&downpayment=${\r\n            options.downPayment\r\n        }&rate=${options.interestRate}`,\r\n    secondaryCtaText: 'See all cars'\r\n};\r\n\r\nexport const budgetSearchDialog = {\r\n    header: 'How we calculated this',\r\n    buildDisclaimer: (loanTerm: number) =>\r\n        `Tax, title, and tags vary by state and are calculated at time of purchase. Estimated values are for illustration purposes only, do not constitute an advertisement or offer of specific credit terms; and are based, where applicable, on the information you enter. APRs and terms used in estimates – including a ${loanTerm} month term – may be unavailable based on vehicle, state of purchase, or your credit profile. Actual terms are subject to credit approval and availability.`,\r\n    closeButtonText: 'Got it'\r\n};\r\n\r\nexport const buildCreditScoreSelectOptions = (\r\n    creditScores: budgetCalculatorUtils.ICreditScores\r\n): { label: string; value: string }[] => {\r\n    const creditScoreSelectOptions: { label: string; value: string }[] = [];\r\n\r\n    creditScores.allIds.forEach(id => {\r\n        creditScoreSelectOptions.push({\r\n            label: creditScores.byId[id].label,\r\n            value: creditScores.byId[id].value\r\n        });\r\n    });\r\n\r\n    return creditScoreSelectOptions;\r\n};\r\n","import * as React from 'react';\r\n\r\ninterface INumberRollerProps {\r\n    formatter: (arg0: number) => string;\r\n    value: number;\r\n    ariaLiveLabel: string;\r\n}\r\n\r\ninterface INumberRollerState {\r\n    formattedValue: string;\r\n    frames: number[] | null[];\r\n    interval: number;\r\n    value: string;\r\n    ariaValue: string;\r\n}\r\n\r\nconst maxFps = 30;\r\nconst duration = 750;\r\n\r\nexport default class NumberRoller extends React.Component<INumberRollerProps, INumberRollerState> {\r\n    constructor(props: any) {\r\n        super(props);\r\n\r\n        this.state = {\r\n            formattedValue: '',\r\n            frames: [],\r\n            interval: 0,\r\n            value: '',\r\n            ariaValue: ''\r\n        };\r\n\r\n        this.renderAnimationFrames = this.renderAnimationFrames.bind(this);\r\n    }\r\n\r\n    public componentDidMount() {\r\n        const startValue = this.props.value > 0 ? Math.floor(this.props.value / 4) * 3 : 0;\r\n        this.setAriaValue(startValue);\r\n        this.animate(startValue, this.props.value);\r\n    }\r\n\r\n    public componentDidUpdate(prevProps: INumberRollerProps) {\r\n        if (this.props.value === prevProps.value) {\r\n            return;\r\n        }\r\n        this.setAriaValue(this.props.value);\r\n        this.animate(prevProps.value, this.props.value);\r\n    }\r\n\r\n    public componentWillUnmount() {\r\n        if (this.state.interval) {\r\n            clearInterval(this.state.interval);\r\n        }\r\n    }\r\n\r\n    private setAriaValue(newValue: number) {\r\n        this.setState({ ariaValue: this.props.formatter(newValue) });\r\n    }\r\n\r\n    private animate(startValue: number, endValue: number) {\r\n        const frames = this.buildAnimationFrames(startValue, endValue);\r\n\r\n        if (this.state.interval) {\r\n            clearInterval(this.state.interval);\r\n        }\r\n\r\n        this.setState({\r\n            frames,\r\n            interval: window.setInterval(this.renderAnimationFrames, 1000 / maxFps)\r\n        });\r\n    }\r\n\r\n    private buildAnimationFrames(startValue: number, endValue: number): number[] {\r\n        const frames = [];\r\n        const frameCount = Math.ceil((duration / 1000) * maxFps);\r\n        const distance = startValue - endValue;\r\n\r\n        for (let i = 0; i <= frameCount; i += 1) {\r\n            const t = i / frameCount;\r\n            const ease = t < 0.5 ? 2 * t * t : -1 + 2 * (2 - t) * t;\r\n            frames.push(endValue + distance * ease);\r\n        }\r\n\r\n        return frames;\r\n    }\r\n\r\n    private renderAnimationFrames() {\r\n        if (this.state.frames.length === 0) {\r\n            clearInterval(this.state.interval);\r\n            return;\r\n        }\r\n\r\n        const frames = this.state.frames;\r\n        const value = frames.pop();\r\n        if (typeof value === 'number') {\r\n            const formattedValue = this.props.formatter(value);\r\n            this.setState({\r\n                frames,\r\n                value: formattedValue\r\n            });\r\n        }\r\n    }\r\n\r\n    public render() {\r\n        return (\r\n            <>\r\n                <div aria-live=\"assertive\" aria-atomic={true} className=\"visually-hidden\">\r\n                    {this.props.ariaLiveLabel} {this.state.ariaValue}\r\n                </div>\r\n                <div className=\"calculated-value\">{this.state.value}</div>\r\n            </>\r\n        );\r\n    }\r\n}\r\n","import * as React from 'react';\r\nimport classNames from 'classnames';\r\nimport initCarousel from '../carousel/index';\r\nimport { TinySliderInstance, TinySliderInfo } from 'tiny-slider/src/tiny-slider';\r\n\r\ninterface ICarouselProps {\r\n    children: React.ReactElement[];\r\n    name: string;\r\n    nextFocus: string;\r\n}\r\n\r\ninterface ICarouselState {\r\n    index: number;\r\n    slideBy: number;\r\n    slideCount: number;\r\n}\r\n\r\nclass Carousel extends React.Component<ICarouselProps, ICarouselState> {\r\n    constructor(props: any) {\r\n        super(props);\r\n\r\n        this.state = {\r\n            index: 0,\r\n            slideBy: 0,\r\n            slideCount: 0\r\n        };\r\n\r\n        this.handleIndexChanged = this.handleIndexChanged.bind(this);\r\n    }\r\n\r\n    private _tinySlider?: TinySliderInstance;\r\n    private _removeEventHandlers?: () => void;\r\n\r\n    public componentDidUpdate(prevProps: any, prevState: any) {\r\n        if (prevProps.children !== this.props.children && this._tinySlider) {\r\n            this._tinySlider.refresh();\r\n        }\r\n    }\r\n\r\n    public componentDidMount(): void {\r\n        const { name, nextFocus } = this.props;\r\n        const { tinySlider, removeEventHandlers } = initCarousel({\r\n            nextFocus,\r\n            container: `#${name}-carousel-slides`,\r\n            nextButton: `#${name}-carousel__next`,\r\n            prevButton: `#${name}-carousel__prev`,\r\n            prevFocus: `#pre-${name}-carousel`,\r\n            gutter: 4,\r\n            responsive: {\r\n                992: {\r\n                    edgePadding: 0,\r\n                    items: 5.5,\r\n                    slideBy: 3\r\n                },\r\n                876: {\r\n                    items: 4.5,\r\n                    slideBy: 3\r\n                },\r\n                768: {\r\n                    edgePadding: 0,\r\n                    items: 3.8,\r\n                    slideBy: 2\r\n                },\r\n                740: {\r\n                    items: 6.2\r\n                },\r\n                640: {\r\n                    items: 5.2\r\n                },\r\n                540: {\r\n                    items: 4.2\r\n                },\r\n                410: {\r\n                    items: 3.2\r\n                },\r\n                310: {\r\n                    items: 2.2\r\n                },\r\n                0: {\r\n                    edgePadding: 30,\r\n                    items: 1.2\r\n                }\r\n            }\r\n        });\r\n        this._tinySlider = tinySlider;\r\n        this._removeEventHandlers = removeEventHandlers;\r\n\r\n        if (this._tinySlider) {\r\n            this._tinySlider.events.on('indexChanged', this.handleIndexChanged);\r\n        }\r\n    }\r\n\r\n    public componentWillUnmount(): void {\r\n        if (this._tinySlider) this._tinySlider.destroy();\r\n        if (this._removeEventHandlers) this._removeEventHandlers();\r\n    }\r\n\r\n    private handleIndexChanged(info: TinySliderInfo) {\r\n        this.setState({ index: info.index, slideBy: info.slideBy, slideCount: info.slideCount });\r\n    }\r\n\r\n    private showPrevButton() {\r\n        return this.state.index > 0;\r\n    }\r\n\r\n    private showNextButton() {\r\n        if (!this.state.index && !this.state.slideBy && !this.state.slideCount) {\r\n            return true;\r\n        } else {\r\n            return this.state.index + this.state.slideBy * 2.5 < this.state.slideCount;\r\n        }\r\n    }\r\n\r\n    public render(): React.ReactNode {\r\n        const { children, name, nextFocus } = this.props;\r\n\r\n        const showPrevButton = this.showPrevButton(),\r\n            showNextButton = this.showNextButton();\r\n\r\n        return (\r\n            <>\r\n                <a id={`pre-${name}-carousel`} className=\"skip-link\" href={nextFocus}>\r\n                    Skip {name.replace(/-/g, ' ')} Carousel\r\n                </a>\r\n                <div\r\n                    className={classNames('carousel max-width--xl', {\r\n                        ['scrollable']: showPrevButton && showNextButton\r\n                    })}\r\n                >\r\n                    <div id={`${name}-carousel-slides`} className=\"carousel__slides\">\r\n                        {React.Children.map(children, (child: React.ReactChild, index: number) => (\r\n                            <div className=\"carousel__slide\" key={`${index}-slide`}>\r\n                                {child}\r\n                            </div>\r\n                        ))}\r\n                        <div className=\"carousel__slide\" key=\"dummy-slide\" />\r\n                    </div>\r\n                    <div className=\"carousel__prev-container\">\r\n                        <div\r\n                            className={classNames('carousel-button-bg-gradient', {\r\n                                ['carousel-button-bg-gradient--visible']: showPrevButton\r\n                            })}\r\n                        />\r\n                        <button\r\n                            id={`${name}-carousel__prev`}\r\n                            className={showPrevButton ? 'kmx-fab kmx-fab--secondary carousel__prev' : 'visually-hidden'}\r\n                            tabIndex={-1}\r\n                        >\r\n                            <span className=\"visually-hidden\">Previous Slide</span>\r\n                            <svg viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\r\n                                <path d=\"M15.41 16.09l-4.58-4.59 4.58-4.59L14 5.5l-6 6 6 6z\" />\r\n                                <path d=\"M0-.5h24v24H0z\" fill=\"none\" />\r\n                            </svg>\r\n                        </button>\r\n                    </div>\r\n                    <div className=\"carousel__next-container\">\r\n                        <div\r\n                            className={classNames('carousel-button-bg-gradient', {\r\n                                ['carousel-button-bg-gradient--visible']: showNextButton\r\n                            })}\r\n                        />\r\n                        <button\r\n                            id={`${name}-carousel__next`}\r\n                            className={showNextButton ? 'kmx-fab kmx-fab--secondary carousel__next' : 'visually-hidden'}\r\n                            tabIndex={-1}\r\n                        >\r\n                            <span className=\"visually-hidden\">Next Slide</span>\r\n                            <svg viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\r\n                                <path d=\"M8.59 16.34l4.58-4.59-4.58-4.59L10 5.75l6 6-6 6z\" />\r\n                                <path d=\"M0-.25h24v24H0z\" fill=\"none\" />\r\n                            </svg>\r\n                        </button>\r\n                    </div>\r\n                </div>\r\n            </>\r\n        );\r\n    }\r\n}\r\n\r\nexport default Carousel;\r\n","import * as React from 'react';\r\nimport classNames from 'classnames';\r\nimport { IVehicleTypeTile } from '../../../pages/home/budget-calculator/utils/types';\r\nimport { budgetSearch } from '../../../pages/home/budget-calculator/utils/content';\r\n\r\ninterface IVehicleTypeTileProps {\r\n    selected: boolean;\r\n    vehicleType: IVehicleTypeTile;\r\n    itemIndex: number;\r\n    onClick: (type: IVehicleTypeTile) => any;\r\n}\r\n\r\nconst VehicleTypeTile = (props: IVehicleTypeTileProps) => {\r\n    return (\r\n        <button\r\n            key={props.vehicleType.pathSegment}\r\n            data-index={props.itemIndex}\r\n            className={classNames('vehicle-type-tile', {\r\n                ['selected']: props.selected\r\n            })}\r\n            onClick={(e: any) => props.onClick(props.vehicleType)}\r\n        >\r\n            <div\r\n                className={classNames('selected-check', {\r\n                    'selected-check--visible': props.selected\r\n                })}\r\n            >\r\n                <div className=\"check-svg-container\">\r\n                    <svg\r\n                        viewBox=\"0 0 24 24\"\r\n                        height=\"24\"\r\n                        width=\"16\"\r\n                        fill=\"#fff\"\r\n                        aria-hidden=\"true\"\r\n                        className=\"check-svg\"\r\n                    >\r\n                        <path d=\"M0 0h24v24H0z\" fill=\"none\" />\r\n                        <path d=\"M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z\" />\r\n                    </svg>\r\n                </div>\r\n            </div>\r\n\r\n            <img\r\n                alt=\"\"\r\n                className=\"vehicle-type-tile-icon\"\r\n                src={props.vehicleType.imgSrc}\r\n                width={budgetSearch.vehicleTypeCarouselSelect.vehicleTypeTileImageWidth}\r\n                height={budgetSearch.vehicleTypeCarouselSelect.vehicleTypeTileImageHeight}\r\n            />\r\n            <div className=\"vehicle-type-tile-title\">{props.vehicleType.label}</div>\r\n        </button>\r\n    );\r\n};\r\n\r\nexport default VehicleTypeTile;\r\n","import * as React from 'react';\r\nimport Carousel from './Carousel';\r\nimport VehicleTypeTile from './VehicleTypeTile';\r\nimport { budgetSearch } from '../../../pages/home/budget-calculator/utils/content';\r\nimport { IVehicleTypeTile } from '../../../pages/home/budget-calculator/utils/types';\r\n\r\ninterface IVehicleTypeMultiselectCarouselProps {\r\n    vehicleTypeList: string[];\r\n    onVehicleTypeListChange: (vehicleTypeList: string[]) => any;\r\n}\r\n\r\nconst VehicleTypeMultiselectCarousel = (props: IVehicleTypeMultiselectCarouselProps) => {\r\n    const handleTypeTileClick = (type: IVehicleTypeTile) => {\r\n        const vehicleTypeList = props.vehicleTypeList;\r\n        const indexOfType = props.vehicleTypeList.indexOf(type.pathSegment);\r\n\r\n        if (indexOfType > -1) {\r\n            props.vehicleTypeList.indexOf(type.pathSegment) > -1;\r\n            vehicleTypeList.splice(indexOfType, 1);\r\n        } else {\r\n            vehicleTypeList.push(type.pathSegment);\r\n        }\r\n\r\n        props.onVehicleTypeListChange(vehicleTypeList);\r\n    };\r\n\r\n    return (\r\n        <div className=\"vehicle-type-multiselect-carousel-container\">\r\n            <Carousel name=\"vehicle-type-multiselect\" nextFocus=\"#budget-search-calculator__monthly-payment\">\r\n                {budgetSearch.vehicleTypeCarouselSelect.vehicleTypeList.map((type, index) => {\r\n                    const typeSelected = props.vehicleTypeList.indexOf(type.pathSegment) > -1;\r\n\r\n                    return (\r\n                        <VehicleTypeTile\r\n                            key={type.pathSegment}\r\n                            selected={typeSelected}\r\n                            vehicleType={type}\r\n                            itemIndex={index}\r\n                            onClick={handleTypeTileClick}\r\n                        />\r\n                    );\r\n                })}\r\n            </Carousel>\r\n        </div>\r\n    );\r\n};\r\n\r\nexport default VehicleTypeMultiselectCarousel;\r\n","import * as React from 'react';\r\nimport { IFinanceCalculator } from '../FinanceCalculator';\r\nimport * as formatter from '../../../../utilities/formatter';\r\nimport * as content from '../utils/content';\r\n\r\ninterface IBudgetSearchDialogProps {\r\n    financeCalculator: IFinanceCalculator;\r\n}\r\n\r\nconst BudgetSearchDialogContent = (props: IBudgetSearchDialogProps) => {\r\n    const { financeCalculator } = props;\r\n\r\n    return (\r\n        <div className=\"budget-search__dialog__body\">\r\n            <p className=\"budget-search__dialog__heading\">{content.budgetSearchDialog.header}</p>\r\n            <p className=\"budget-search__dialog__list-heading\">Estimate is based on:</p>\r\n            <ul className=\"budget-search__dialog__list\">\r\n                <li>\r\n                    A financed amount of {formatter.toDollars(financeCalculator.financePrice)} (which includes{' '}\r\n                    {formatter.toDollars(financeCalculator.totalFees)} estimated {financeCalculator.nearestStoreState}{' '}\r\n                    tax, title, and fees)\r\n                </li>\r\n                <li>\r\n                    APR of {financeCalculator.annualInterestRate}% and term of {financeCalculator.loanTerm} months\r\n                </li>\r\n                <li>Any information you selected</li>\r\n            </ul>\r\n            <p className=\"budget-search__dialog__fine-print\">\r\n                {content.budgetSearchDialog.buildDisclaimer(financeCalculator.loanTerm)}\r\n            </p>\r\n        </div>\r\n    );\r\n};\r\n\r\nexport default BudgetSearchDialogContent;\r\n","import * as React from 'react';\r\nimport MDCSelect from '../../../../components/MDCSelect';\r\nimport { budgetSearch, buildCreditScoreSelectOptions } from '../utils';\r\nimport * as constants from '../utils/constants';\r\nimport { getRateTier } from '../utils/financeCalculatorUtils';\r\nimport { IFinanceCalculator, FinancingUpdateTypes } from '../FinanceCalculator';\r\nimport NumberRoller from '../../../../components/NumberRoller';\r\nimport * as formatter from '../../../../utilities/formatter';\r\nimport Icons from '../../../../utilities/icons';\r\nimport VehicleTypeMultiselectCarousel from '../../../../components/carousels/vehicle-type-multiselect/VehicleTypeMultiselectCarousel';\r\nimport * as budgetCalculatorUtils from '../utils/budgetCalculatorUtils';\r\nimport { MAX_DOWN_PAYMENT, MAX_MONTHLY_PAYMENT } from '../utils/constants';\r\nimport Dialog from '../../../../components/Dialog';\r\nimport BudgetSearchDialogContent from './BudgetSearchDialogContent';\r\nimport { trackEDDL } from '../../../../utilities/analytics';\r\n\r\ninterface IBudgetSearchProps {\r\n    budgetSearchId: number;\r\n    financeCalculator: IFinanceCalculator;\r\n    vehicleTypeList: string[];\r\n    onInputChange: (\r\n        value: string,\r\n        type: FinancingUpdateTypes.MonthlyPayment | FinancingUpdateTypes.DownPayment | FinancingUpdateTypes.InterestRate\r\n    ) => any;\r\n    onSubmit: (event: any, href: string) => any;\r\n    onVehicleTypeListChange: (vehicleTypeList: string[]) => any;\r\n    creditScores: budgetCalculatorUtils.ICreditScores;\r\n}\r\n\r\nconst BudgetSearch = ({\r\n    financeCalculator,\r\n    vehicleTypeList,\r\n    creditScores,\r\n    onSubmit,\r\n    onInputChange,\r\n    onVehicleTypeListChange,\r\n}: IBudgetSearchProps) => {\r\n    const [budgetSearchDialogOpen, setBudgetSearchDialogOpen] = React.useState(false);\r\n\r\n    const buildVehiclePriceLowerRange = (): number | undefined => {\r\n        const inventorySearchPriceFloorDistanceFromMaximum = Math.round((vehiclePrice * 25) / 100);\r\n        const lowerRange =\r\n            vehiclePrice - inventorySearchPriceFloorDistanceFromMaximum > 0\r\n                ? vehiclePrice - inventorySearchPriceFloorDistanceFromMaximum\r\n                : undefined;\r\n        return lowerRange;\r\n    };\r\n\r\n    const {\r\n        monthlyPayment,\r\n        downPayment,\r\n        annualInterestRate,\r\n        vehiclePrice,\r\n        nearestStoreState,\r\n        loanTerm,\r\n    } = financeCalculator;\r\n\r\n    const primaryCtaLink = budgetSearch.buildPrimaryCtaLink({\r\n        upperRange: vehiclePrice,\r\n        lowerRange: buildVehiclePriceLowerRange(),\r\n        typesPath: vehicleTypeList.length > 0 ? '/' + vehicleTypeList.join('/') : '',\r\n        downPayment: downPayment,\r\n        interestRate: annualInterestRate,\r\n    });\r\n\r\n    const showZeroDownPaymentHelperText = downPayment === 0;\r\n    const creditScoreSelectOptions = buildCreditScoreSelectOptions(creditScores);\r\n\r\n    return (\r\n        <div id=\"budget_search_container\">\r\n            <div className=\"budget-search-container max-width--xl\">\r\n                <div className=\"budget-search-header text-centered\">\r\n                    <h2 id=\"budget-search-heading\" className=\"budget-search-heading\">\r\n                        <div className=\"budget-search-heading\">\r\n                            &nbsp; Pre-qualify with no&nbsp;\r\n                            <span className=\"budget-search-heading-partial__desktop\">impact to your credit</span>\r\n                            <span className=\"budget-search-heading-partial__mobile\">\r\n                                <br />\r\n                                impact to your credit\r\n                            </span>\r\n                        </div>\r\n                    </h2>\r\n                </div>\r\n                <div id=\"inner-budget-container\">\r\n                    <div\r\n                        className=\"budget-search-calculator-container\"\r\n                        data-clickprops={`Element type: Budget calculator,Down payment: ${downPayment},Monthly payment: ${monthlyPayment},Tier: ${getRateTier(\r\n                            annualInterestRate,\r\n                            creditScoreSelectOptions\r\n                        )},Term: ${loanTerm}`}\r\n                    >\r\n                        <div className=\"budget-search-calculator-row\">\r\n                            <div className=\"budget-search-form-row budget-search-form-row--vehicle-type\">\r\n                                <h2 className=\"budget-search-form--vehicle-type-header\">\r\n                                    {budgetSearch.vehicleTypeCarouselSelect.header}{' '}\r\n                                </h2>\r\n                                <VehicleTypeMultiselectCarousel\r\n                                    vehicleTypeList={vehicleTypeList}\r\n                                    onVehicleTypeListChange={onVehicleTypeListChange}\r\n                                />\r\n                            </div>\r\n                            <div>\r\n                                <div className=\"budget-search-calculator-input-container\">\r\n                                    <div className=\"budget-search-calculator-input-container-mp-dp-lt-row\">\r\n                                        <div\r\n                                            aria-describedby={`0 to ${MAX_MONTHLY_PAYMENT} dollars`}\r\n                                            className=\"budget-search-calculator-input-container__input__wrapper\"\r\n                                        >\r\n                                            <label\r\n                                                htmlFor=\"budget-search-calculator__monthly-payment\"\r\n                                                className=\"budget-search-calculator-input-container__input-label\"\r\n                                            >\r\n                                                {budgetSearch.monthlyPaymentInput.label}\r\n                                            </label>\r\n                                            <input\r\n                                                id=\"budget-search-calculator__monthly-payment\"\r\n                                                className=\"budget-search-calculator-input-container__input\"\r\n                                                type=\"text\"\r\n                                                value={formatter.toDollars(monthlyPayment)}\r\n                                                onChange={(e: React.ChangeEvent<HTMLInputElement>) =>\r\n                                                    formatter.extractNumberFromString(e.target.value) <=\r\n                                                    constants.MAX_MONTHLY_PAYMENT\r\n                                                        ? onInputChange(\r\n                                                              e.target.value,\r\n                                                              FinancingUpdateTypes.MonthlyPayment\r\n                                                          )\r\n                                                        : null\r\n                                                }\r\n                                                pattern={'\\\\d*'}\r\n                                                onPaste={(event: React.ClipboardEvent) => event.preventDefault()}\r\n                                            />\r\n                                        </div>\r\n                                        <div\r\n                                            aria-describedby={`0 to ${MAX_DOWN_PAYMENT} dollars`}\r\n                                            className=\"budget-search-calculator-input-container__input__wrapper\"\r\n                                        >\r\n                                            <label\r\n                                                htmlFor=\"budget-search-calculator__down-payment\"\r\n                                                className=\"budget-search-calculator-input-container__input-label\"\r\n                                            >\r\n                                                {budgetSearch.downPaymentInput.label}\r\n                                            </label>\r\n                                            <input\r\n                                                id=\"budget-search-calculator__down-payment\"\r\n                                                className=\"budget-search-calculator-input-container__input\"\r\n                                                type=\"text\"\r\n                                                value={formatter.toDollars(downPayment)}\r\n                                                onChange={(e: React.ChangeEvent<HTMLInputElement>) => {\r\n                                                    formatter.extractNumberFromString(e.target.value) <=\r\n                                                    constants.MAX_DOWN_PAYMENT\r\n                                                        ? onInputChange(\r\n                                                              e.target.value,\r\n                                                              FinancingUpdateTypes.DownPayment\r\n                                                          )\r\n                                                        : null;\r\n                                                }}\r\n                                                pattern=\"\\\\d*\"\r\n                                                onPaste={(event: React.ClipboardEvent) => event.preventDefault()}\r\n                                                title={\r\n                                                    showZeroDownPaymentHelperText\r\n                                                        ? budgetSearch.downPaymentInput.zeroDownPaymentPrompt\r\n                                                        : undefined\r\n                                                }\r\n                                            />\r\n                                            <div id=\"zero-downpayment-message\">\r\n                                                {showZeroDownPaymentHelperText &&\r\n                                                    budgetSearch.downPaymentInput.zeroDownPaymentPrompt}\r\n                                            </div>\r\n                                        </div>\r\n                                        <div\r\n                                            aria-describedby={`0 to ${MAX_DOWN_PAYMENT} dollars`}\r\n                                            className=\"budget-search-calculator-input-container__input__wrapper\"\r\n                                        >\r\n                                            <MDCSelect\r\n                                                id=\"credit-rating-select\"\r\n                                                label={budgetSearch.creditScoreSelect.label}\r\n                                                value={String(annualInterestRate)}\r\n                                                options={creditScoreSelectOptions}\r\n                                                onChange={(event) =>\r\n                                                    onInputChange(event.target.value, FinancingUpdateTypes.InterestRate)\r\n                                                }\r\n                                            />\r\n                                        </div>\r\n                                    </div>\r\n                                </div>\r\n                            </div>\r\n                        </div>\r\n                        <div className=\"budget-search-calculator-row\">\r\n                            <div className=\"budget-search-price-container \">\r\n                                <div className=\"budget-search-price-header\">\r\n                                    <h3 className=\"budget-search-price-heading\">{budgetSearch.vehiclePriceHeader}</h3>\r\n                                    <button\r\n                                        className=\"budget-search-disclaimer-dialog-button\"\r\n                                        onClick={(e: any) => {\r\n                                            e.preventDefault();\r\n                                            setBudgetSearchDialogOpen(true);\r\n                                        }}\r\n                                    >\r\n                                        <span className=\"visually-hidden\">\r\n                                            budget calculator details. content opens in popup.\r\n                                        </span>\r\n                                        {Icons.info_rebrand}\r\n                                    </button>\r\n                                </div>\r\n                                <div className=\"budget-search-price-section\">\r\n                                    <div className=\"budget-search-price\">\r\n                                        <NumberRoller\r\n                                            formatter={formatter.toDollars}\r\n                                            value={vehiclePrice < 0 ? 0 : vehiclePrice}\r\n                                            ariaLiveLabel={budgetSearch.vehiclePriceAriaLabel}\r\n                                        />\r\n                                    </div>\r\n                                    <hzn-button\r\n                                        full-width\r\n                                        id={`${budgetSearch.primaryCtaId}_tablet-mobile`}\r\n                                        class=\"budget-search-price-shop-button\"\r\n                                        color=\"primary\"\r\n                                        data-finance-lead-initiate=\"true\"\r\n                                        data-finance-op=\"HP_Finance1stModule\"\r\n                                        data-finance-formtype=\"Finance First Prequalification Application\"\r\n                                        data-finance-action=\"Init\"\r\n                                        onClick={(e: any) => {\r\n                                            // Analytics\r\n                                            trackEDDL({\r\n                                                event: 'getPreQualifiedLeadInitiated',\r\n                                                linkDetails: {\r\n                                                    name: 'get pre-qualified',\r\n                                                    position: 'Homepage',\r\n                                                },\r\n                                                leadDetail: {\r\n                                                    leadOriginationPage: 'HP_Finance1stModule',\r\n                                                    leadType: 'Finance First Prequalification Application',\r\n                                                },\r\n                                                calcDetail: {\r\n                                                    payment: String(monthlyPayment),\r\n                                                    downPayment: String(downPayment),\r\n                                                    creditScore: String(\r\n                                                        creditScoreSelectOptions.find(\r\n                                                            (cs) => cs.value === String(annualInterestRate)\r\n                                                        )?.label\r\n                                                    ),\r\n                                                    termLength: String(loanTerm),\r\n                                                    estimatedPayment: String(vehiclePrice),\r\n                                                    apr: String(annualInterestRate),\r\n                                                    state: String(nearestStoreState),\r\n                                                },\r\n                                            });\r\n\r\n                                            // Submit\r\n                                            onSubmit(e, primaryCtaLink);\r\n                                        }}\r\n                                    >\r\n                                        {budgetSearch.primaryCtaText}\r\n                                    </hzn-button>\r\n                                </div>\r\n                                <Dialog\r\n                                    isVisible={budgetSearchDialogOpen}\r\n                                    onClose={() => setBudgetSearchDialogOpen(false)}\r\n                                >\r\n                                    <BudgetSearchDialogContent financeCalculator={financeCalculator} />\r\n                                </Dialog>\r\n                            </div>\r\n                        </div>\r\n                    </div>\r\n                </div>\r\n            </div>\r\n        </div>\r\n    );\r\n};\r\n\r\nexport default BudgetSearch;\r\n","import { updateDigitalData } from './analytics';\r\nimport * as constants from './constants';\r\nimport { aprLocalStorage, IFinanceCalculatorLocalStorage } from './types';\r\nimport { IFinanceCalculator } from '../FinanceCalculator';\r\nimport { ITaxesAndFees } from '../../../../api/taxes-and-fees-api';\r\nimport * as budgetCalculatorUtils from './budgetCalculatorUtils';\r\n\r\nconst LocalStorageConstants = {\r\n    key: 'tst-session-key',\r\n    cacheTimeInDays: 7,\r\n};\r\n\r\nconst cachedDataNotExpired = (cacheDate: Date, maxAgeInDays: number): boolean => {\r\n    const expirationDate = new Date(cacheDate);\r\n    const cacheDateDay = cacheDate.getDate();\r\n\r\n    expirationDate.setDate(cacheDateDay + maxAgeInDays);\r\n    const today = new Date();\r\n\r\n    return today.getTime() < expirationDate.getTime();\r\n};\r\n\r\nconst setFinanceInfoObjectToStore = (localStorageValue: IFinanceCalculatorLocalStorage): void => {\r\n    localStorage.setItem(LocalStorageConstants.key, JSON.stringify(localStorageValue));\r\n};\r\n\r\nexport const setFinanceInfoToStore = (\r\n    apr: '0' | '1' | '2' | '3' | '4',\r\n    term: string,\r\n    downPayment: number,\r\n    feeState: string,\r\n    feesList: ITaxesAndFees[],\r\n    monthlyPayment: number | null,\r\n    hasInteraction = false\r\n): void => {\r\n    const localStorageValue: IFinanceCalculatorLocalStorage = {\r\n        apr,\r\n        term,\r\n        downPayment,\r\n        feeState,\r\n        feesList,\r\n        monthlyPayment,\r\n        hasInteraction,\r\n        updatedDateTime: new Date(),\r\n    };\r\n\r\n    setFinanceInfoObjectToStore(localStorageValue);\r\n};\r\n\r\nexport const getFinanceInfoFromStore = (): IFinanceCalculatorLocalStorage | null => {\r\n    let calculatorLocalStorage: IFinanceCalculatorLocalStorage | null = null;\r\n    const localStorageValue = localStorage.getItem(LocalStorageConstants.key);\r\n\r\n    if (localStorageValue) {\r\n        calculatorLocalStorage = JSON.parse(localStorageValue);\r\n    }\r\n\r\n    if (\r\n        calculatorLocalStorage &&\r\n        calculatorLocalStorage.updatedDateTime &&\r\n        cachedDataNotExpired(new Date(calculatorLocalStorage.updatedDateTime), LocalStorageConstants.cacheTimeInDays)\r\n    ) {\r\n        return calculatorLocalStorage;\r\n    }\r\n\r\n    return null;\r\n};\r\n\r\nexport const persistFinanceCalculatorAndUpdateAnalytics = (\r\n    financeCalculator: IFinanceCalculator,\r\n    taxesAndFeesList: ITaxesAndFees[] | null[],\r\n    hasInteraction: boolean,\r\n    creditScores: budgetCalculatorUtils.ICreditScores | null\r\n): void => {\r\n    if (taxesAndFeesList.length > 0 && creditScores) {\r\n        setFinanceInfoToStore(\r\n            String(creditScores.allIds.indexOf(String(financeCalculator.annualInterestRate))) as aprLocalStorage,\r\n            String(financeCalculator.loanTerm),\r\n            financeCalculator.downPayment,\r\n            financeCalculator.nearestStoreState,\r\n            taxesAndFeesList as ITaxesAndFees[],\r\n            financeCalculator.monthlyPayment,\r\n            hasInteraction\r\n        );\r\n        updateDigitalData(window, financeCalculator, creditScores);\r\n    }\r\n};\r\n\r\nexport const persistVehicleTypePreferences = (vehicleTypeList: string[]): void => {\r\n    localStorage.setItem(constants.vehicleTypeListLocalStorage.key, JSON.stringify(vehicleTypeList));\r\n};\r\n","import { IFinanceCalculator } from '../FinanceCalculator';\r\nimport * as budgetCalculatorUtils from './budgetCalculatorUtils';\r\n\r\nexport interface IFinanceCalculatorDigitalData {\r\n    calculatorName: string;\r\n    creditRating: string;\r\n    downPayment: string;\r\n    interestRate: string;\r\n    monthlyPayment: string;\r\n    selectedFeeState: string;\r\n    termLength: string;\r\n    vehiclePrice: string;\r\n}\r\n\r\nexport const updateDigitalData = (\r\n    window: Window,\r\n    financeCalculator: IFinanceCalculator,\r\n    creditScores: budgetCalculatorUtils.ICreditScores\r\n) => {\r\n    if (window.digitalData) {\r\n        const financeCalculatorDigitalData: IFinanceCalculatorDigitalData = {\r\n            calculatorName: financeCalculator.name,\r\n            creditRating: creditScores.byId[financeCalculator.annualInterestRate].name,\r\n            downPayment: String(financeCalculator.downPayment),\r\n            interestRate: String(financeCalculator.annualInterestRate),\r\n            monthlyPayment: String(financeCalculator.monthlyPayment),\r\n            selectedFeeState: financeCalculator.nearestStoreState,\r\n            termLength: String(financeCalculator.loanTerm),\r\n            vehiclePrice: String(financeCalculator.vehiclePrice)\r\n        };\r\n\r\n        window.digitalData.financeCalculator = financeCalculatorDigitalData;\r\n    }\r\n};\r\n","import * as React from 'react';\r\nimport { ANALYTICS_CONSTANTS, trackEDDL } from '../../../../utilities/analytics';\r\nimport { ITrackingPayload } from '../../../../types/analytics';\r\n\r\ninterface IPreapprovedBudgetProps {\r\n    stationUrl: string;\r\n}\r\n\r\nfunction PreapprovedBudget(props: IPreapprovedBudgetProps) {\r\n    const handleSearchClick = () => {\r\n        const payload: ITrackingPayload = {\r\n            event: ANALYTICS_CONSTANTS.EVENTS.CLICK.SEARCH_INITIATED,\r\n            linkDetails: {\r\n                name: 'search with my budget',\r\n                position: 'Homepage',\r\n            },\r\n            search: {\r\n                initiationMethod: 'Homepage|search with my budget|Homepage',\r\n            },\r\n        };\r\n\r\n        trackEDDL(payload);\r\n\r\n        setTimeout(() => {\r\n            window.location.href = '/cars/all';\r\n        }, 250);\r\n    };\r\n\r\n    const handleReviewClick = (e: any) => {\r\n        e.preventDefault();\r\n        const payload: ITrackingPayload = {\r\n            event: ANALYTICS_CONSTANTS.EVENTS.CLICK.CTA,\r\n            linkDetails: {\r\n                name: 'review my financing',\r\n                position: 'Homepage',\r\n            },\r\n        };\r\n\r\n        trackEDDL(payload);\r\n\r\n        setTimeout(() => {\r\n            window.location.href = props.stationUrl;\r\n        }, 250);\r\n    };\r\n\r\n    return (\r\n        <div className=\"preapproved-budget-container max-width--xl\">\r\n            <div className=\"preapproved-budget-card-container\">\r\n                <div className=\"preapproved-budget-card-img\" role=\"img\" aria-hidden=\"true\" />\r\n                <div className=\"preapproved-budget-card-img-label\" role=\"img\" aria-hidden=\"true\" />\r\n            </div>\r\n            <div className=\"preapproved-budget-details\">\r\n                <h2 className=\"preapproved-budget-heading\">\r\n                    Want to browse for cars that match your financing&nbsp;results?\r\n                </h2>\r\n                <hzn-button\r\n                    onClick={handleSearchClick}\r\n                    type=\"button\"\r\n                    class=\"preapproved-budget-primary-button\"\r\n                    href=\"/cars/all\"\r\n                >\r\n                    Search with my budget\r\n                </hzn-button>\r\n                <button onClick={handleReviewClick} className=\"preapproved-budget-tertiary-button\" type=\"button\">\r\n                    Review my financing\r\n                </button>\r\n            </div>\r\n        </div>\r\n    );\r\n}\r\n\r\nexport default PreapprovedBudget;\r\n","import { ICreditRate } from '../../../../api/credit-rates-api';\r\n\r\nexport const hideBudgetSearch = () => {\r\n    const budgetCalculator = document.querySelector('.budget-calculator-section');\r\n\r\n    if (budgetCalculator !== null) {\r\n        budgetCalculator.classList.add('budget-calculator-section-hidden');\r\n    }\r\n};\r\n\r\nconst buildCreditScoreLabel = (creditRate: ICreditRate): string => {\r\n    let creditScoreLabel = '';\r\n    const creditName = creditRate.type.split(/(?=[A-Z])/).join(' ');\r\n\r\n    if (creditRate.minimumFicoScore && creditRate.maximumFicoScore) {\r\n        creditScoreLabel = `${creditName} (${creditRate.minimumFicoScore}-${\r\n            creditRate.maximumFicoScore\r\n        } FICO\\u00ae Score)`;\r\n    } else if (!creditRate.minimumFicoScore && creditRate.maximumFicoScore) {\r\n        creditScoreLabel = `${creditName} (< ${creditRate.maximumFicoScore} FICO\\u00ae Score)`;\r\n    } else if (creditRate.minimumFicoScore && !creditRate.maximumFicoScore) {\r\n        creditScoreLabel = `${creditName} (${creditRate.minimumFicoScore}+ FICO\\u00ae Score)`;\r\n    }\r\n\r\n    return creditScoreLabel;\r\n};\r\n\r\nexport interface ICreditScores {\r\n    allIds: string[];\r\n    byId: { [key: string]: { name: string; label: string; value: string } };\r\n}\r\n\r\nexport const buildCreditScores = (creditRatesList: ICreditRate[]): ICreditScores => {\r\n    const creditScores: ICreditScores = { allIds: [], byId: {} };\r\n\r\n    creditRatesList.forEach(creditRate => {\r\n        creditScores.allIds.push(String(creditRate.medianRate));\r\n        creditScores.byId[creditRate.medianRate] = {\r\n            name: creditRate.type,\r\n            label: buildCreditScoreLabel(creditRate),\r\n            value: String(creditRate.medianRate)\r\n        };\r\n    });\r\n\r\n    return creditScores;\r\n};\r\n","import * as React from 'react';\r\nimport FinanceCalculator, { FinancingUpdateTypes, IFinanceCalculatorInitialValues } from './FinanceCalculator';\r\nimport * as formatter from '../../../utilities/formatter';\r\nimport { Store } from '../../../types/store';\r\nimport { vehicleTypeListLocalStorage } from './utils/constants';\r\nimport { getTaxesAndFeesList, ITaxesAndFees } from '../../../api/taxes-and-fees-api';\r\nimport BudgetSearch from './budget-search/BudgetSearch';\r\nimport * as financeCalculatorUtils from './utils/financeCalculatorUtils';\r\nimport { IFinanceCalculatorLocalStorage } from './utils/types';\r\nimport {\r\n    getFinanceInfoFromStore,\r\n    persistFinanceCalculatorAndUpdateAnalytics,\r\n    persistVehicleTypePreferences,\r\n} from './utils/financeCalculatorLocalStorage';\r\nimport PreapprovedBudget from './preapproved-budget/PreapprovedBudget';\r\nimport * as budgetCalculatorUtils from './utils/budgetCalculatorUtils';\r\nimport { useInit } from '../../../utilities/hooks';\r\nimport { FBSContext } from '../../../context';\r\nimport { viewedVehiclesLocalStorage } from '../utilities/constants';\r\nimport { IViewedVehicleLocalStorage } from '../utilities/types';\r\nimport { buildVehicleTilesListFromVehicleList } from '../../../utilities/vehicleTileBuilder';\r\nimport { Vehicle } from '../../../api/types';\r\n\r\nlet cachedTaxesAndFees: ITaxesAndFees[] | null[];\r\n\r\ninterface IBudgetCalculatorProps {\r\n    fullStoryPageId: string;\r\n    financeCalculatorName: string;\r\n    creditScores: budgetCalculatorUtils.ICreditScores;\r\n}\r\n\r\ninterface IBudgetCalculatorState {\r\n    completedBudgetCalculatorForm: {\r\n        hasSubmittedForm: boolean;\r\n        hasKmxFinanceInteraction: boolean;\r\n        submittedBudgetCalculatorHref: string;\r\n    };\r\n    financeCalculatorSettings: {\r\n        budgetSearchId: number;\r\n        taxesAndFeesList: ITaxesAndFees[] | null[];\r\n    };\r\n    vehicleTypePreferences: {\r\n        id: number;\r\n        vehicleTypeList: string[];\r\n    };\r\n    noNearestStore: boolean;\r\n}\r\n\r\nlet financeCalculator: FinanceCalculator;\r\nlet financeCalculatorDefaults: IFinanceCalculatorInitialValues;\r\nlet cachedFinanceCalculator: IFinanceCalculatorLocalStorage | null;\r\nlet cachedVehicleTypeList: string[];\r\nlet viewedVehiclesList: Vehicle[];\r\n\r\nconst BudgetCalculator = (props: IBudgetCalculatorProps) => {\r\n    const fbsContext = React.useContext(FBSContext);\r\n\r\n    useInit(() => {\r\n        if (props.creditScores) {\r\n            financeCalculatorDefaults = financeCalculatorUtils.buildFinanceCalculatorDefaults(\r\n                props.financeCalculatorName,\r\n                props.creditScores.allIds[2]\r\n            );\r\n        }\r\n\r\n        cachedVehicleTypeList = [];\r\n        const serializedVehicleTypeList = localStorage.getItem(vehicleTypeListLocalStorage.key);\r\n        if (serializedVehicleTypeList) {\r\n            cachedVehicleTypeList = JSON.parse(serializedVehicleTypeList);\r\n        }\r\n\r\n        cachedFinanceCalculator = getFinanceInfoFromStore();\r\n        if (cachedFinanceCalculator) {\r\n            financeCalculatorDefaults = financeCalculatorUtils.mapCachedFinanceCalculatorToInitialValues(\r\n                cachedFinanceCalculator,\r\n                financeCalculatorDefaults,\r\n                props.creditScores\r\n            );\r\n        }\r\n\r\n        financeCalculator = new FinanceCalculator(financeCalculatorDefaults);\r\n\r\n        if (cachedFinanceCalculator) {\r\n            persistFinanceCalculatorAndUpdateAnalytics(\r\n                financeCalculator,\r\n                financeCalculatorDefaults.taxesAndFeesList,\r\n                cachedFinanceCalculator.hasInteraction,\r\n                props.creditScores\r\n            );\r\n        }\r\n    });\r\n\r\n    const [completedBudgetCalculatorForm, setCompletedBudgetCalculatorForm] = React.useState<\r\n        IBudgetCalculatorState['completedBudgetCalculatorForm']\r\n    >({\r\n        hasSubmittedForm: false,\r\n        hasKmxFinanceInteraction: cachedFinanceCalculator ? cachedFinanceCalculator.hasInteraction : false,\r\n        submittedBudgetCalculatorHref: '',\r\n    });\r\n    const [financeCalculatorSettings, setFinanceCalculatorSettings] = React.useState<\r\n        IBudgetCalculatorState['financeCalculatorSettings']\r\n    >({\r\n        budgetSearchId: financeCalculator.id,\r\n        taxesAndFeesList: financeCalculatorDefaults.taxesAndFeesList,\r\n    });\r\n    const [vehicleTypePreferences, setVehicleTypePreferences] = React.useState<\r\n        IBudgetCalculatorState['vehicleTypePreferences']\r\n    >({\r\n        id: 0,\r\n        vehicleTypeList: cachedVehicleTypeList,\r\n    });\r\n    const [noNearestStore, setNoNearestStore] = React.useState<IBudgetCalculatorState['noNearestStore']>(false);\r\n\r\n    const subscribeToNearestStoreUpdates = (): void => {\r\n        const event = new CustomEvent('kmxSubscribeToMyStoreModuleUpdates', {\r\n            detail: {\r\n                done: (store: Store) => {\r\n                    if (store && store.State) {\r\n                        handleNearestStoreStateChange(store.State);\r\n                    } else {\r\n                        console.log('BudgetCalculator: No nearest store');\r\n\r\n                        setNoNearestStore(true);\r\n                    }\r\n                },\r\n            },\r\n        });\r\n        document.documentElement.dispatchEvent(event);\r\n    };\r\n    cachedTaxesAndFees = financeCalculatorSettings.taxesAndFeesList;\r\n\r\n    const buildVehicleTileList = () => {\r\n        const serializedViewedVehiclesLocalStorage = localStorage.getItem(viewedVehiclesLocalStorage.key) as string;\r\n        if (serializedViewedVehiclesLocalStorage) {\r\n            const viewedVehicles: IViewedVehicleLocalStorage[] = JSON.parse(serializedViewedVehiclesLocalStorage);\r\n            const viewedVehiclesList = viewedVehicles.map((vehicle: IViewedVehicleLocalStorage) => {\r\n                return { stockNumber: vehicle.stockNumber } as Vehicle;\r\n            });\r\n            fbsContext.setVehicleList(buildVehicleTilesListFromVehicleList(viewedVehiclesList));\r\n        }\r\n    };\r\n\r\n    const handleInputChange = (\r\n        value: string,\r\n        type: FinancingUpdateTypes.MonthlyPayment | FinancingUpdateTypes.DownPayment | FinancingUpdateTypes.InterestRate\r\n    ): void => {\r\n        if (cachedTaxesAndFees.length > 0) {\r\n            const budgetSearchId = financeCalculator.update(cachedTaxesAndFees as ITaxesAndFees[], {\r\n                type: type,\r\n                value: formatter.extractNumberFromString(value),\r\n            });\r\n\r\n            persistFinanceCalculatorAndUpdateAnalytics(\r\n                financeCalculator,\r\n                cachedTaxesAndFees,\r\n                completedBudgetCalculatorForm.hasKmxFinanceInteraction,\r\n                props.creditScores\r\n            );\r\n\r\n            setFinanceCalculatorSettings({\r\n                budgetSearchId: budgetSearchId,\r\n                taxesAndFeesList: cachedTaxesAndFees,\r\n            });\r\n        }\r\n    };\r\n\r\n    const handleSubmit = (event: any, href: string) => {\r\n        event.preventDefault();\r\n\r\n        setCompletedBudgetCalculatorForm({\r\n            hasSubmittedForm: true,\r\n            hasKmxFinanceInteraction: true,\r\n            submittedBudgetCalculatorHref: href,\r\n        });\r\n    };\r\n\r\n    const handleNearestStoreStateChange = (nearestStoreState: string): void => {\r\n        const nearestStoreStateHasChanged =\r\n            nearestStoreState && nearestStoreState !== financeCalculator.nearestStoreState;\r\n\r\n        if (nearestStoreStateHasChanged) {\r\n            fetchtaxesAndFeesList(nearestStoreState, (taxesAndFeesList) => {\r\n                if (taxesAndFeesList.length > 0) {\r\n                    const budgetSearchId = financeCalculator.update(taxesAndFeesList as ITaxesAndFees[], {\r\n                        type: FinancingUpdateTypes.NearestStoreState,\r\n                        value: nearestStoreState,\r\n                    });\r\n                    persistFinanceCalculatorAndUpdateAnalytics(\r\n                        financeCalculator,\r\n                        financeCalculatorSettings.taxesAndFeesList,\r\n                        completedBudgetCalculatorForm.hasKmxFinanceInteraction,\r\n                        props.creditScores\r\n                    );\r\n\r\n                    setFinanceCalculatorSettings({\r\n                        budgetSearchId: budgetSearchId,\r\n                        taxesAndFeesList: taxesAndFeesList as ITaxesAndFees[],\r\n                    });\r\n                }\r\n            });\r\n        }\r\n    };\r\n\r\n    const fetchtaxesAndFeesList = (\r\n        nearestStoreState: string,\r\n        done: (taxesAndFeesList: ITaxesAndFees[] | null[]) => any\r\n    ): void => {\r\n        const handleNoTaxesAndFeesList = (err: any): void => {\r\n            budgetCalculatorUtils.hideBudgetSearch();\r\n            console.error('BudgetCalculator: Failed to find taxes and fees list: ', err);\r\n        };\r\n\r\n        if (nearestStoreState) {\r\n            getTaxesAndFeesList(nearestStoreState)\r\n                .then((taxesAndFeesList) => {\r\n                    if (taxesAndFeesList && taxesAndFeesList.length > 0) {\r\n                        done(taxesAndFeesList);\r\n                    } else {\r\n                        handleNoTaxesAndFeesList(taxesAndFeesList);\r\n                    }\r\n                })\r\n                .catch((err: any) => {\r\n                    handleNoTaxesAndFeesList(err);\r\n                });\r\n        } else {\r\n            console.log('BudgetCalculator: No nearest store set');\r\n        }\r\n    };\r\n\r\n    React.useEffect(() => {\r\n        subscribeToNearestStoreUpdates();\r\n        buildVehicleTileList();\r\n    }, []);\r\n\r\n    React.useEffect(() => {\r\n        persistVehicleTypePreferences(vehicleTypePreferences.vehicleTypeList);\r\n    }, [vehicleTypePreferences.id]);\r\n\r\n    React.useEffect(() => {\r\n        if (completedBudgetCalculatorForm.hasSubmittedForm) {\r\n            persistFinanceCalculatorAndUpdateAnalytics(\r\n                financeCalculator,\r\n                financeCalculatorSettings.taxesAndFeesList,\r\n                completedBudgetCalculatorForm.hasKmxFinanceInteraction,\r\n                props.creditScores\r\n            );\r\n            window.location.href = completedBudgetCalculatorForm.submittedBudgetCalculatorHref;\r\n        }\r\n    }, [completedBudgetCalculatorForm.hasSubmittedForm]);\r\n\r\n    if (noNearestStore) {\r\n        budgetCalculatorUtils.hideBudgetSearch();\r\n        return null;\r\n    }\r\n\r\n    return fbsContext.stationUrl && fbsContext.enableFBS ? (\r\n        <PreapprovedBudget stationUrl={fbsContext.stationUrl} />\r\n    ) : (\r\n        <BudgetSearch\r\n            budgetSearchId={financeCalculatorSettings.budgetSearchId}\r\n            financeCalculator={financeCalculator}\r\n            onInputChange={handleInputChange}\r\n            onSubmit={handleSubmit}\r\n            vehicleTypeList={vehicleTypePreferences.vehicleTypeList}\r\n            onVehicleTypeListChange={(updatedVehicleTypeList) =>\r\n                setVehicleTypePreferences({ id: ++vehicleTypePreferences.id, vehicleTypeList: updatedVehicleTypeList })\r\n            }\r\n            creditScores={props.creditScores}\r\n        />\r\n    );\r\n};\r\n\r\nexport default BudgetCalculator;\r\n","import { useRef } from 'react';\r\n\r\nexport const useInit = (callBack: () => void) => {\r\n    const hasBeenCalled = useRef(false);\r\n    if (hasBeenCalled.current) return;\r\n    callBack();\r\n    hasBeenCalled.current = true;\r\n};\r\n","import axios from 'axios';\r\n\r\nexport interface ITaxesAndFeesApiResponse {\r\n    items: ITaxesAndFees[];\r\n    start: number;\r\n    count: number;\r\n    totalCount: number;\r\n}\r\n\r\nexport interface ITaxesAndFees {\r\n    minimum: number;\r\n    maximum: number;\r\n    estimatedFeesMinumum: number;\r\n    estimatedFeesMaximum: number;\r\n    details: {\r\n        salesTax: string[];\r\n        title: string[];\r\n        registration: string[];\r\n        plateTransfer: string[];\r\n        additionalFees: string[];\r\n        total: string;\r\n        highFeeEstimate: number;\r\n    };\r\n}\r\n\r\nexport const getTaxesAndFeesList = (state: string): Promise<ITaxesAndFees[] | null[]> => {\r\n    try {\r\n        return axios\r\n            .get(`/home/api/taxesandfees?state=${state}`)\r\n            .then((response: { data: ITaxesAndFeesApiResponse }) => {\r\n                if (response.data && response.data.items && response.data.items.length > 0) {\r\n                    return response.data.items;\r\n                }\r\n                return [];\r\n            })\r\n            .catch((error: any) => {\r\n                console.error('TaxesAndFeesApi: Error fetching fees: ', error);\r\n                return [];\r\n            });\r\n    } catch (e) {\r\n        return Promise.resolve([]);\r\n    }\r\n};\r\n","import * as React from 'react';\r\n\r\ninterface ILoadingSpinnerProps {\r\n    size?: string;\r\n    height?: string;\r\n    className?: string;\r\n}\r\n\r\ninterface ILoadingSpinnerState {\r\n    atHalfway: boolean;\r\n    dashArray: number[];\r\n    dashOffset: number;\r\n    speed: number;\r\n}\r\n\r\nexport default class LoadingSpinner extends React.Component<ILoadingSpinnerProps, ILoadingSpinnerState> {\r\n    constructor(props: ILoadingSpinnerProps) {\r\n        super(props);\r\n\r\n        this.state = {\r\n            atHalfway: false,\r\n            dashArray: [6.25, 143.75],\r\n            dashOffset: -293.02,\r\n            speed: 1\r\n        };\r\n\r\n        this.loop = this.loop.bind(this);\r\n    }\r\n\r\n    private animationFrameReq = 0;\r\n\r\n    public componentDidMount() {\r\n        this.animationFrameReq = window.requestAnimationFrame(this.loop);\r\n    }\r\n\r\n    public componentWillUnmount() {\r\n        window.cancelAnimationFrame(this.animationFrameReq);\r\n    }\r\n\r\n    private loop() {\r\n        const easing = 0.03;\r\n        const atHalfway = this.state.dashOffset > -300 && this.state.dashOffset <= 0 ? true : false;\r\n\r\n        let speed = this.state.speed;\r\n        let dashOffset = this.state.dashOffset <= -300 ? 150 : this.state.dashOffset;\r\n        let dashArray = this.state.dashOffset <= -300 ? [0, 150] : this.state.dashArray;\r\n\r\n        if (!atHalfway) {\r\n            speed += easing;\r\n            dashOffset -= speed;\r\n            dashArray = [(dashArray[0] += speed), (dashArray[1] -= speed)];\r\n        } else {\r\n            speed -= easing;\r\n            dashOffset -= speed * 2;\r\n            dashArray = [(dashArray[0] -= speed), (dashArray[1] += speed)];\r\n        }\r\n\r\n        this.setState({ dashArray, dashOffset, atHalfway, speed });\r\n\r\n        this.animationFrameReq = window.requestAnimationFrame(this.loop);\r\n    }\r\n\r\n    public render() {\r\n        const { size, height, className } = this.props;\r\n        return (\r\n            <div className={`${className ? className : ''}`} style={{ height: height || 'auto' }} aria-live=\"polite\">\r\n                <div\r\n                    className={`js-progress-circular-indeterminate kmx-progress-circular-indeterminate kmx-progress-circular-indeterminate-${size ||\r\n                        'medium'}`}\r\n                    role=\"alert\"\r\n                    aria-busy=\"true\"\r\n                >\r\n                    <span className=\"visually-hidden\">loading</span>\r\n                    <svg viewBox=\"0 0 60 60\" aria-hidden=\"true\">\r\n                        <circle\r\n                            cx=\"30\"\r\n                            cy=\"30\"\r\n                            r=\"24\"\r\n                            style={{\r\n                                strokeDasharray: this.state.dashArray.join(','),\r\n                                strokeDashoffset: this.state.dashOffset\r\n                            }}\r\n                        />\r\n                    </svg>\r\n                </div>\r\n            </div>\r\n        );\r\n    }\r\n}\r\n\r\ntype State = {\r\n    dashArray: number[];\r\n    dashOffset: number;\r\n    atHalfway: boolean;\r\n    speed: number;\r\n};\r\n\r\ntype Props = {\r\n    height?: number | string;\r\n    size?: string;\r\n};\r\n","import * as React from 'react';\r\nimport BudgetCalculator from './BudgetCalculator';\r\nimport { getCreditRatesList } from '../../../api/credit-rates-api';\r\nimport { buildCreditScores } from './utils/budgetCalculatorUtils';\r\nimport * as budgetCalculatorUtils from './utils/budgetCalculatorUtils';\r\nimport LoadingSpinner from '../../../components/loading-spinner';\r\n\r\ninterface IBudgetCalculatorContainerProps {\r\n    fullStoryPageId: string;\r\n    financeCalculatorName: string;\r\n}\r\n\r\nconst BudgetCalculatorContainer = (props: IBudgetCalculatorContainerProps) => {\r\n    const [creditRatesList, setCreditRatesList] = React.useState([]);\r\n    const [isLoading, setIsLoading] = React.useState(true);\r\n\r\n    React.useEffect(() => {\r\n        getCreditRatesList()\r\n            .then(creditRatesList => {\r\n                if (creditRatesList && creditRatesList.length > 0) {\r\n                    setCreditRatesList(creditRatesList as any);\r\n                } else {\r\n                    budgetCalculatorUtils.hideBudgetSearch();\r\n                    console.error('BudgetCalculatorContainer: Failed to fetch credit rates list: ', creditRatesList);\r\n                }\r\n                setIsLoading(false);\r\n            })\r\n            .catch((err: any) => {\r\n                budgetCalculatorUtils.hideBudgetSearch();\r\n                console.error('BudgetCalculatorContainer: Failed to fetch credit rates list: ', err);\r\n                setIsLoading(false);\r\n            });\r\n    }, []);\r\n\r\n    return isLoading ? (\r\n        <LoadingSpinner className=\"budget-calculator-loading-spinner\" />\r\n    ) : creditRatesList && creditRatesList.length > 0 ? (\r\n        <BudgetCalculator {...props} creditScores={buildCreditScores(creditRatesList)} />\r\n    ) : null;\r\n};\r\n\r\nexport default BudgetCalculatorContainer;\r\n","import axios from 'axios';\r\n\r\nexport interface ICreditRate {\r\n    type: string;\r\n    minimumRate: number;\r\n    maximumRate: number;\r\n    medianRate: number;\r\n    minimumFicoScore: number | null;\r\n    maximumFicoScore: number | null;\r\n}\r\n\r\nexport const getCreditRatesList = (): Promise<ICreditRate[] | []> => {\r\n    try {\r\n        return axios\r\n            .get('/home/api/creditrate')\r\n            .then((response: { data: ICreditRate[] }) => {\r\n                if (response.data && response.data.length > 0) {\r\n                    return response.data;\r\n                }\r\n                return [];\r\n            })\r\n            .catch((error: any) => {\r\n                console.error('CreditRatesApi: Error fetching credit rates: ', error);\r\n                return [];\r\n            });\r\n    } catch (e) {\r\n        return Promise.resolve([]);\r\n    }\r\n};\r\n","/**\n * defines a focus group\n */\nexport var FOCUS_GROUP = 'data-focus-lock';\n/**\n * disables element discovery inside a group marked by key\n */\nexport var FOCUS_DISABLED = 'data-focus-lock-disabled';\n/**\n * allows uncontrolled focus within the marked area, effectively disabling focus lock for it's content\n */\nexport var FOCUS_ALLOW = 'data-no-focus-lock';\n/**\n * instructs autofocus engine to pick default autofocus inside a given node\n * can be set on the element or container\n */\nexport var FOCUS_AUTO = 'data-autofocus-inside';\n/**\n * instructs autofocus to ignore elements within a given node\n * can be set on the element or container\n */\nexport var FOCUS_NO_AUTOFOCUS = 'data-no-autofocus';\n","/**\n * Assigns a value for a given ref, no matter of the ref format\n * @param {RefObject} ref - a callback function or ref object\n * @param value - a new value\n *\n * @see https://github.com/theKashey/use-callback-ref#assignref\n * @example\n * const refObject = useRef();\n * const refFn = (ref) => {....}\n *\n * assignRef(refObject, \"refValue\");\n * assignRef(refFn, \"refValue\");\n */\nexport function assignRef(ref, value) {\n    if (typeof ref === 'function') {\n        ref(value);\n    }\n    else if (ref) {\n        ref.current = value;\n    }\n    return ref;\n}\n","import * as React from 'react';\nimport { assignRef } from './assignRef';\nimport { useCallbackRef } from './useRef';\nvar useIsomorphicLayoutEffect = typeof window !== 'undefined' ? React.useLayoutEffect : React.useEffect;\nvar currentValues = new WeakMap();\n/**\n * Merges two or more refs together providing a single interface to set their value\n * @param {RefObject|Ref} refs\n * @returns {MutableRefObject} - a new ref, which translates all changes to {refs}\n *\n * @see {@link mergeRefs} a version without buit-in memoization\n * @see https://github.com/theKashey/use-callback-ref#usemergerefs\n * @example\n * const Component = React.forwardRef((props, ref) => {\n *   const ownRef = useRef();\n *   const domRef = useMergeRefs([ref, ownRef]); // 👈 merge together\n *   return <div ref={domRef}>...</div>\n * }\n */\nexport function useMergeRefs(refs, defaultValue) {\n    var callbackRef = useCallbackRef(defaultValue || null, function (newValue) {\n        return refs.forEach(function (ref) { return assignRef(ref, newValue); });\n    });\n    // handle refs changes - added or removed\n    useIsomorphicLayoutEffect(function () {\n        var oldValue = currentValues.get(callbackRef);\n        if (oldValue) {\n            var prevRefs_1 = new Set(oldValue);\n            var nextRefs_1 = new Set(refs);\n            var current_1 = callbackRef.current;\n            prevRefs_1.forEach(function (ref) {\n                if (!nextRefs_1.has(ref)) {\n                    assignRef(ref, null);\n                }\n            });\n            nextRefs_1.forEach(function (ref) {\n                if (!prevRefs_1.has(ref)) {\n                    assignRef(ref, current_1);\n                }\n            });\n        }\n        currentValues.set(callbackRef, refs);\n    }, [refs]);\n    return callbackRef;\n}\n","import React, { Fragment } from 'react';\nimport PropTypes from 'prop-types';\nexport var hiddenGuard = {\n  width: '1px',\n  height: '0px',\n  padding: 0,\n  overflow: 'hidden',\n  position: 'fixed',\n  top: '1px',\n  left: '1px'\n};\nvar InFocusGuard = function InFocusGuard(_ref) {\n  var _ref$children = _ref.children,\n    children = _ref$children === void 0 ? null : _ref$children;\n  return /*#__PURE__*/React.createElement(Fragment, null, /*#__PURE__*/React.createElement(\"div\", {\n    key: \"guard-first\",\n    \"data-focus-guard\": true,\n    \"data-focus-auto-guard\": true,\n    style: hiddenGuard\n  }), children, children && /*#__PURE__*/React.createElement(\"div\", {\n    key: \"guard-last\",\n    \"data-focus-guard\": true,\n    \"data-focus-auto-guard\": true,\n    style: hiddenGuard\n  }));\n};\nInFocusGuard.propTypes = process.env.NODE_ENV !== \"production\" ? {\n  children: PropTypes.node\n} : {};\nexport default InFocusGuard;","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n    extendStatics = Object.setPrototypeOf ||\r\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n        function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n    return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n    if (typeof b !== \"function\" && b !== null)\r\n        throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n    extendStatics(d, b);\r\n    function __() { this.constructor = d; }\r\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n    __assign = Object.assign || function __assign(t) {\r\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n            s = arguments[i];\r\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n        }\r\n        return t;\r\n    }\r\n    return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n    var t = {};\r\n    for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n        t[p] = s[p];\r\n    if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n        for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n            if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n                t[p[i]] = s[p[i]];\r\n        }\r\n    return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n    return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n    return new (P || (P = Promise))(function (resolve, reject) {\r\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n    });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n    function verb(n) { return function (v) { return step([n, v]); }; }\r\n    function step(op) {\r\n        if (f) throw new TypeError(\"Generator is already executing.\");\r\n        while (_) try {\r\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n            if (y = 0, t) op = [op[0] & 2, t.value];\r\n            switch (op[0]) {\r\n                case 0: case 1: t = op; break;\r\n                case 4: _.label++; return { value: op[1], done: false };\r\n                case 5: _.label++; y = op[1]; op = [0]; continue;\r\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n                default:\r\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n                    if (t[2]) _.ops.pop();\r\n                    _.trys.pop(); continue;\r\n            }\r\n            op = body.call(thisArg, _);\r\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n    }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n    if (k2 === undefined) k2 = k;\r\n    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n    if (k2 === undefined) k2 = k;\r\n    o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n    for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n    if (m) return m.call(o);\r\n    if (o && typeof o.length === \"number\") return {\r\n        next: function () {\r\n            if (o && i >= o.length) o = void 0;\r\n            return { value: o && o[i++], done: !o };\r\n        }\r\n    };\r\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n    if (!m) return o;\r\n    var i = m.call(o), r, ar = [], e;\r\n    try {\r\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n    }\r\n    catch (error) { e = { error: error }; }\r\n    finally {\r\n        try {\r\n            if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n        }\r\n        finally { if (e) throw e.error; }\r\n    }\r\n    return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n    for (var ar = [], i = 0; i < arguments.length; i++)\r\n        ar = ar.concat(__read(arguments[i]));\r\n    return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n    for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n    for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n        for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n            r[k] = a[j];\r\n    return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n    if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n        if (ar || !(i in from)) {\r\n            if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n            ar[i] = from[i];\r\n        }\r\n    }\r\n    return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n    return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n    if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n    var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n    return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n    function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n    function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n    function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n    function fulfill(value) { resume(\"next\", value); }\r\n    function reject(value) { resume(\"throw\", value); }\r\n    function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n    var i, p;\r\n    return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n    function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n    if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n    var m = o[Symbol.asyncIterator], i;\r\n    return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n    function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n    function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n    if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n    return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n    o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n    if (mod && mod.__esModule) return mod;\r\n    var result = {};\r\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n    __setModuleDefault(result, mod);\r\n    return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n    return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n    if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n    if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n    return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n    if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n    if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n    if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n    return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n","import { __assign } from \"tslib\";\nfunction ItoI(a) {\n    return a;\n}\nfunction innerCreateMedium(defaults, middleware) {\n    if (middleware === void 0) { middleware = ItoI; }\n    var buffer = [];\n    var assigned = false;\n    var medium = {\n        read: function () {\n            if (assigned) {\n                throw new Error('Sidecar: could not `read` from an `assigned` medium. `read` could be used only with `useMedium`.');\n            }\n            if (buffer.length) {\n                return buffer[buffer.length - 1];\n            }\n            return defaults;\n        },\n        useMedium: function (data) {\n            var item = middleware(data, assigned);\n            buffer.push(item);\n            return function () {\n                buffer = buffer.filter(function (x) { return x !== item; });\n            };\n        },\n        assignSyncMedium: function (cb) {\n            assigned = true;\n            while (buffer.length) {\n                var cbs = buffer;\n                buffer = [];\n                cbs.forEach(cb);\n            }\n            buffer = {\n                push: function (x) { return cb(x); },\n                filter: function () { return buffer; },\n            };\n        },\n        assignMedium: function (cb) {\n            assigned = true;\n            var pendingQueue = [];\n            if (buffer.length) {\n                var cbs = buffer;\n                buffer = [];\n                cbs.forEach(cb);\n                pendingQueue = buffer;\n            }\n            var executeQueue = function () {\n                var cbs = pendingQueue;\n                pendingQueue = [];\n                cbs.forEach(cb);\n            };\n            var cycle = function () { return Promise.resolve().then(executeQueue); };\n            cycle();\n            buffer = {\n                push: function (x) {\n                    pendingQueue.push(x);\n                    cycle();\n                },\n                filter: function (filter) {\n                    pendingQueue = pendingQueue.filter(filter);\n                    return buffer;\n                },\n            };\n        },\n    };\n    return medium;\n}\nexport function createMedium(defaults, middleware) {\n    if (middleware === void 0) { middleware = ItoI; }\n    return innerCreateMedium(defaults, middleware);\n}\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport function createSidecarMedium(options) {\n    if (options === void 0) { options = {}; }\n    var medium = innerCreateMedium(null);\n    medium.options = __assign({ async: true, ssr: false }, options);\n    return medium;\n}\n","import { createMedium, createSidecarMedium } from 'use-sidecar';\nexport var mediumFocus = createMedium({}, function (_ref) {\n  var target = _ref.target,\n    currentTarget = _ref.currentTarget;\n  return {\n    target: target,\n    currentTarget: currentTarget\n  };\n});\nexport var mediumBlur = createMedium();\nexport var mediumEffect = createMedium();\nexport var mediumSidecar = createSidecarMedium({\n  async: true,\n  ssr: typeof document !== 'undefined'\n});","import { createContext } from 'react';\nexport var focusScope = /*#__PURE__*/createContext(undefined);","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport React, { forwardRef, useRef, useState, useCallback, useEffect, useMemo, Fragment } from 'react';\nimport { node, bool, string, any, arrayOf, oneOfType, object, func } from 'prop-types';\nimport { FOCUS_DISABLED, FOCUS_GROUP } from 'focus-lock/constants';\nimport { useMergeRefs } from 'use-callback-ref';\nimport { hiddenGuard } from './FocusGuard';\nimport { mediumFocus, mediumBlur, mediumSidecar } from './medium';\nimport { focusScope } from './scope';\nvar emptyArray = [];\nvar FocusLock = /*#__PURE__*/forwardRef(function FocusLockUI(props, parentRef) {\n  var _extends2;\n  var _useState = useState(),\n    realObserved = _useState[0],\n    setObserved = _useState[1];\n  var observed = useRef();\n  var isActive = useRef(false);\n  var originalFocusedElement = useRef(null);\n  var _useState2 = useState({}),\n    update = _useState2[1];\n  var children = props.children,\n    _props$disabled = props.disabled,\n    disabled = _props$disabled === void 0 ? false : _props$disabled,\n    _props$noFocusGuards = props.noFocusGuards,\n    noFocusGuards = _props$noFocusGuards === void 0 ? false : _props$noFocusGuards,\n    _props$persistentFocu = props.persistentFocus,\n    persistentFocus = _props$persistentFocu === void 0 ? false : _props$persistentFocu,\n    _props$crossFrame = props.crossFrame,\n    crossFrame = _props$crossFrame === void 0 ? true : _props$crossFrame,\n    _props$autoFocus = props.autoFocus,\n    autoFocus = _props$autoFocus === void 0 ? true : _props$autoFocus,\n    allowTextSelection = props.allowTextSelection,\n    group = props.group,\n    className = props.className,\n    whiteList = props.whiteList,\n    hasPositiveIndices = props.hasPositiveIndices,\n    _props$shards = props.shards,\n    shards = _props$shards === void 0 ? emptyArray : _props$shards,\n    _props$as = props.as,\n    Container = _props$as === void 0 ? 'div' : _props$as,\n    _props$lockProps = props.lockProps,\n    containerProps = _props$lockProps === void 0 ? {} : _props$lockProps,\n    SideCar = props.sideCar,\n    _props$returnFocus = props.returnFocus,\n    shouldReturnFocus = _props$returnFocus === void 0 ? false : _props$returnFocus,\n    focusOptions = props.focusOptions,\n    onActivationCallback = props.onActivation,\n    onDeactivationCallback = props.onDeactivation;\n  var _useState3 = useState({}),\n    id = _useState3[0];\n  var onActivation = useCallback(function (_ref) {\n    var captureFocusRestore = _ref.captureFocusRestore;\n    if (!originalFocusedElement.current) {\n      var _document;\n      var activeElement = (_document = document) == null ? void 0 : _document.activeElement;\n      originalFocusedElement.current = activeElement;\n      if (activeElement !== document.body) {\n        originalFocusedElement.current = captureFocusRestore(activeElement);\n      }\n    }\n    if (observed.current && onActivationCallback) {\n      onActivationCallback(observed.current);\n    }\n    isActive.current = true;\n    update();\n  }, [onActivationCallback]);\n  var onDeactivation = useCallback(function () {\n    isActive.current = false;\n    if (onDeactivationCallback) {\n      onDeactivationCallback(observed.current);\n    }\n    update();\n  }, [onDeactivationCallback]);\n  var returnFocus = useCallback(function (allowDefer) {\n    var focusRestore = originalFocusedElement.current;\n    if (focusRestore) {\n      var returnFocusTo = (typeof focusRestore === 'function' ? focusRestore() : focusRestore) || document.body;\n      var howToReturnFocus = typeof shouldReturnFocus === 'function' ? shouldReturnFocus(returnFocusTo) : shouldReturnFocus;\n      if (howToReturnFocus) {\n        var returnFocusOptions = typeof howToReturnFocus === 'object' ? howToReturnFocus : undefined;\n        originalFocusedElement.current = null;\n        if (allowDefer) {\n          Promise.resolve().then(function () {\n            return returnFocusTo.focus(returnFocusOptions);\n          });\n        } else {\n          returnFocusTo.focus(returnFocusOptions);\n        }\n      }\n    }\n  }, [shouldReturnFocus]);\n  var onFocus = useCallback(function (event) {\n    if (isActive.current) {\n      mediumFocus.useMedium(event);\n    }\n  }, []);\n  var onBlur = mediumBlur.useMedium;\n  var setObserveNode = useCallback(function (newObserved) {\n    if (observed.current !== newObserved) {\n      observed.current = newObserved;\n      setObserved(newObserved);\n    }\n  }, []);\n  if (process.env.NODE_ENV !== 'production') {\n    if (typeof allowTextSelection !== 'undefined') {\n      console.warn('React-Focus-Lock: allowTextSelection is deprecated and enabled by default');\n    }\n    useEffect(function () {\n      if (!observed.current && typeof Container !== 'string') {\n        console.error('FocusLock: could not obtain ref to internal node');\n      }\n    }, []);\n  }\n  var lockProps = _extends((_extends2 = {}, _extends2[FOCUS_DISABLED] = disabled && 'disabled', _extends2[FOCUS_GROUP] = group, _extends2), containerProps);\n  var hasLeadingGuards = noFocusGuards !== true;\n  var hasTailingGuards = hasLeadingGuards && noFocusGuards !== 'tail';\n  var mergedRef = useMergeRefs([parentRef, setObserveNode]);\n  var focusScopeValue = useMemo(function () {\n    return {\n      observed: observed,\n      shards: shards,\n      enabled: !disabled,\n      active: isActive.current\n    };\n  }, [disabled, isActive.current, shards, realObserved]);\n  return /*#__PURE__*/React.createElement(Fragment, null, hasLeadingGuards && [\n  /*#__PURE__*/\n  React.createElement(\"div\", {\n    key: \"guard-first\",\n    \"data-focus-guard\": true,\n    tabIndex: disabled ? -1 : 0,\n    style: hiddenGuard\n  }), hasPositiveIndices ? /*#__PURE__*/React.createElement(\"div\", {\n    key: \"guard-nearest\",\n    \"data-focus-guard\": true,\n    tabIndex: disabled ? -1 : 1,\n    style: hiddenGuard\n  }) : null], !disabled && /*#__PURE__*/React.createElement(SideCar, {\n    id: id,\n    sideCar: mediumSidecar,\n    observed: realObserved,\n    disabled: disabled,\n    persistentFocus: persistentFocus,\n    crossFrame: crossFrame,\n    autoFocus: autoFocus,\n    whiteList: whiteList,\n    shards: shards,\n    onActivation: onActivation,\n    onDeactivation: onDeactivation,\n    returnFocus: returnFocus,\n    focusOptions: focusOptions,\n    noFocusGuards: noFocusGuards\n  }), /*#__PURE__*/React.createElement(Container, _extends({\n    ref: mergedRef\n  }, lockProps, {\n    className: className,\n    onBlur: onBlur,\n    onFocus: onFocus\n  }), /*#__PURE__*/React.createElement(focusScope.Provider, {\n    value: focusScopeValue\n  }, children)), hasTailingGuards && /*#__PURE__*/React.createElement(\"div\", {\n    \"data-focus-guard\": true,\n    tabIndex: disabled ? -1 : 0,\n    style: hiddenGuard\n  }));\n});\nFocusLock.propTypes = process.env.NODE_ENV !== \"production\" ? {\n  children: node,\n  disabled: bool,\n  returnFocus: oneOfType([bool, object, func]),\n  focusOptions: object,\n  noFocusGuards: bool,\n  hasPositiveIndices: bool,\n  allowTextSelection: bool,\n  autoFocus: bool,\n  persistentFocus: bool,\n  crossFrame: bool,\n  group: string,\n  className: string,\n  whiteList: func,\n  shards: arrayOf(any),\n  as: oneOfType([string, func, object]),\n  lockProps: object,\n  onActivation: func,\n  onDeactivation: func,\n  sideCar: any.isRequired\n} : {};\nexport default FocusLock;","import { useState } from 'react';\n/**\n * creates a MutableRef with ref change callback\n * @param initialValue - initial ref value\n * @param {Function} callback - a callback to run when value changes\n *\n * @example\n * const ref = useCallbackRef(0, (newValue, oldValue) => console.log(oldValue, '->', newValue);\n * ref.current = 1;\n * // prints 0 -> 1\n *\n * @see https://reactjs.org/docs/hooks-reference.html#useref\n * @see https://github.com/theKashey/use-callback-ref#usecallbackref---to-replace-reactuseref\n * @returns {MutableRefObject}\n */\nexport function useCallbackRef(initialValue, callback) {\n    var ref = useState(function () { return ({\n        // value\n        value: initialValue,\n        // last callback\n        callback: callback,\n        // \"memoized\" public interface\n        facade: {\n            get current() {\n                return ref.value;\n            },\n            set current(value) {\n                var last = ref.value;\n                if (last !== value) {\n                    ref.value = value;\n                    ref.callback(value, last);\n                }\n            },\n        },\n    }); })[0];\n    // update callback\n    ref.callback = callback;\n    return ref.facade;\n}\n","function _typeof(o) {\n  \"@babel/helpers - typeof\";\n\n  return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) {\n    return typeof o;\n  } : function (o) {\n    return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o;\n  }, _typeof(o);\n}\nexport { _typeof as default };","/*\nIE11 support\n */\nexport var toArray = function (a) {\n    var ret = Array(a.length);\n    for (var i = 0; i < a.length; ++i) {\n        ret[i] = a[i];\n    }\n    return ret;\n};\nexport var asArray = function (a) { return (Array.isArray(a) ? a : [a]); };\nexport var getFirst = function (a) { return (Array.isArray(a) ? a[0] : a); };\n","import { FOCUS_NO_AUTOFOCUS } from '../constants';\nvar isElementHidden = function (node) {\n    // we can measure only \"elements\"\n    // consider others as \"visible\"\n    if (node.nodeType !== Node.ELEMENT_NODE) {\n        return false;\n    }\n    var computedStyle = window.getComputedStyle(node, null);\n    if (!computedStyle || !computedStyle.getPropertyValue) {\n        return false;\n    }\n    return (computedStyle.getPropertyValue('display') === 'none' || computedStyle.getPropertyValue('visibility') === 'hidden');\n};\nvar getParentNode = function (node) {\n    // DOCUMENT_FRAGMENT_NODE can also point on ShadowRoot. In this case .host will point on the next node\n    return node.parentNode && node.parentNode.nodeType === Node.DOCUMENT_FRAGMENT_NODE\n        ? // eslint-disable-next-line @typescript-eslint/no-explicit-any\n            node.parentNode.host\n        : node.parentNode;\n};\nvar isTopNode = function (node) {\n    // @ts-ignore\n    return node === document || (node && node.nodeType === Node.DOCUMENT_NODE);\n};\nvar isInert = function (node) { return node.hasAttribute('inert'); };\n/**\n * @see https://github.com/testing-library/jest-dom/blob/main/src/to-be-visible.js\n */\nvar isVisibleUncached = function (node, checkParent) {\n    return !node || isTopNode(node) || (!isElementHidden(node) && !isInert(node) && checkParent(getParentNode(node)));\n};\nexport var isVisibleCached = function (visibilityCache, node) {\n    var cached = visibilityCache.get(node);\n    if (cached !== undefined) {\n        return cached;\n    }\n    var result = isVisibleUncached(node, isVisibleCached.bind(undefined, visibilityCache));\n    visibilityCache.set(node, result);\n    return result;\n};\nvar isAutoFocusAllowedUncached = function (node, checkParent) {\n    return node && !isTopNode(node) ? (isAutoFocusAllowed(node) ? checkParent(getParentNode(node)) : false) : true;\n};\nexport var isAutoFocusAllowedCached = function (cache, node) {\n    var cached = cache.get(node);\n    if (cached !== undefined) {\n        return cached;\n    }\n    var result = isAutoFocusAllowedUncached(node, isAutoFocusAllowedCached.bind(undefined, cache));\n    cache.set(node, result);\n    return result;\n};\nexport var getDataset = function (node) {\n    // @ts-ignore\n    return node.dataset;\n};\nexport var isHTMLButtonElement = function (node) { return node.tagName === 'BUTTON'; };\nexport var isHTMLInputElement = function (node) { return node.tagName === 'INPUT'; };\nexport var isRadioElement = function (node) {\n    return isHTMLInputElement(node) && node.type === 'radio';\n};\nexport var notHiddenInput = function (node) {\n    return !((isHTMLInputElement(node) || isHTMLButtonElement(node)) && (node.type === 'hidden' || node.disabled));\n};\nexport var isAutoFocusAllowed = function (node) {\n    var attribute = node.getAttribute(FOCUS_NO_AUTOFOCUS);\n    return ![true, 'true', ''].includes(attribute);\n};\nexport var isGuard = function (node) { var _a; return Boolean(node && ((_a = getDataset(node)) === null || _a === void 0 ? void 0 : _a.focusGuard)); };\nexport var isNotAGuard = function (node) { return !isGuard(node); };\nexport var isDefined = function (x) { return Boolean(x); };\n","import { toArray } from './array';\nexport var tabSort = function (a, b) {\n    var aTab = Math.max(0, a.tabIndex);\n    var bTab = Math.max(0, b.tabIndex);\n    var tabDiff = aTab - bTab;\n    var indexDiff = a.index - b.index;\n    if (tabDiff) {\n        if (!aTab) {\n            return 1;\n        }\n        if (!bTab) {\n            return -1;\n        }\n    }\n    return tabDiff || indexDiff;\n};\nvar getTabIndex = function (node) {\n    if (node.tabIndex < 0) {\n        // all \"focusable\" elements are already preselected\n        // but some might have implicit negative tabIndex\n        // return 0 for <audio without tabIndex attribute - it is \"tabbable\"\n        if (!node.hasAttribute('tabindex')) {\n            return 0;\n        }\n    }\n    return node.tabIndex;\n};\nexport var orderByTabIndex = function (nodes, filterNegative, keepGuards) {\n    return toArray(nodes)\n        .map(function (node, index) {\n        var tabIndex = getTabIndex(node);\n        return {\n            node: node,\n            index: index,\n            tabIndex: keepGuards && tabIndex === -1 ? ((node.dataset || {}).focusGuard ? 0 : -1) : tabIndex,\n        };\n    })\n        .filter(function (data) { return !filterNegative || data.tabIndex >= 0; })\n        .sort(tabSort);\n};\n","import { FOCUS_AUTO } from '../constants';\nimport { toArray } from './array';\nimport { tabbables } from './tabbables';\nvar queryTabbables = tabbables.join(',');\nvar queryGuardTabbables = \"\".concat(queryTabbables, \", [data-focus-guard]\");\nvar getFocusablesWithShadowDom = function (parent, withGuards) {\n    return toArray((parent.shadowRoot || parent).children).reduce(function (acc, child) {\n        return acc.concat(child.matches(withGuards ? queryGuardTabbables : queryTabbables) ? [child] : [], getFocusablesWithShadowDom(child));\n    }, []);\n};\nvar getFocusablesWithIFrame = function (parent, withGuards) {\n    var _a;\n    // contentDocument of iframe will be null if current origin cannot access it\n    if (parent instanceof HTMLIFrameElement && ((_a = parent.contentDocument) === null || _a === void 0 ? void 0 : _a.body)) {\n        return getFocusables([parent.contentDocument.body], withGuards);\n    }\n    return [parent];\n};\nexport var getFocusables = function (parents, withGuards) {\n    return parents.reduce(function (acc, parent) {\n        var _a;\n        var focusableWithShadowDom = getFocusablesWithShadowDom(parent, withGuards);\n        var focusableWithIframes = (_a = []).concat.apply(_a, focusableWithShadowDom.map(function (node) { return getFocusablesWithIFrame(node, withGuards); }));\n        return acc.concat(\n        // add all tabbables inside and within shadow DOMs in DOM order\n        focusableWithIframes, \n        // add if node is tabbable itself\n        parent.parentNode\n            ? toArray(parent.parentNode.querySelectorAll(queryTabbables)).filter(function (node) { return node === parent; })\n            : []);\n    }, []);\n};\n/**\n * return a list of focusable nodes within an area marked as \"auto-focusable\"\n * @param parent\n */\nexport var getParentAutofocusables = function (parent) {\n    var parentFocus = parent.querySelectorAll(\"[\".concat(FOCUS_AUTO, \"]\"));\n    return toArray(parentFocus)\n        .map(function (node) { return getFocusables([node]); })\n        .reduce(function (acc, nodes) { return acc.concat(nodes); }, []);\n};\n","/**\n * list of the object to be considered as focusable\n */\nexport var tabbables = [\n    'button:enabled',\n    'select:enabled',\n    'textarea:enabled',\n    'input:enabled',\n    // elements with explicit roles will also use explicit tabindex\n    // '[role=\"button\"]',\n    'a[href]',\n    'area[href]',\n    'summary',\n    'iframe',\n    'object',\n    'embed',\n    'audio[controls]',\n    'video[controls]',\n    '[tabindex]',\n    '[contenteditable]',\n    '[autofocus]',\n];\n","import { toArray } from './array';\nimport { isAutoFocusAllowedCached, isVisibleCached, notHiddenInput } from './is';\nimport { orderByTabIndex } from './tabOrder';\nimport { getFocusables, getParentAutofocusables } from './tabUtils';\n/**\n * given list of focusable elements keeps the ones user can interact with\n * @param nodes\n * @param visibilityCache\n */\nexport var filterFocusable = function (nodes, visibilityCache) {\n    return toArray(nodes)\n        .filter(function (node) { return isVisibleCached(visibilityCache, node); })\n        .filter(function (node) { return notHiddenInput(node); });\n};\nexport var filterAutoFocusable = function (nodes, cache) {\n    if (cache === void 0) { cache = new Map(); }\n    return toArray(nodes).filter(function (node) { return isAutoFocusAllowedCached(cache, node); });\n};\n/**\n * !__WARNING__! Low level API.\n * @returns all tabbable nodes\n *\n * @see {@link getFocusableNodes} to get any focusable element\n *\n * @param topNodes - array of top level HTMLElements to search inside\n * @param visibilityCache - an cache to store intermediate measurements. Expected to be a fresh `new Map` on every call\n */\nexport var getTabbableNodes = function (topNodes, visibilityCache, withGuards) {\n    return orderByTabIndex(filterFocusable(getFocusables(topNodes, withGuards), visibilityCache), true, withGuards);\n};\n/**\n * !__WARNING__! Low level API.\n *\n * @returns anything \"focusable\", not only tabbable. The difference is in `tabIndex=-1`\n * (without guards, as long as they are not expected to be ever focused)\n *\n * @see {@link getTabbableNodes} to get only tabble nodes element\n *\n * @param topNodes - array of top level HTMLElements to search inside\n * @param visibilityCache - an cache to store intermediate measurements. Expected to be a fresh `new Map` on every call\n */\nexport var getFocusableNodes = function (topNodes, visibilityCache) {\n    return orderByTabIndex(filterFocusable(getFocusables(topNodes), visibilityCache), false);\n};\n/**\n * return list of nodes which are expected to be auto-focused\n * @param topNode\n * @param visibilityCache\n */\nexport var parentAutofocusables = function (topNode, visibilityCache) {\n    return filterFocusable(getParentAutofocusables(topNode), visibilityCache);\n};\n/*\n * Determines if element is contained in scope, including nested shadow DOMs\n */\nexport var contains = function (scope, element) {\n    if (scope.shadowRoot) {\n        return contains(scope.shadowRoot, element);\n    }\n    else {\n        if (Object.getPrototypeOf(scope).contains !== undefined &&\n            Object.getPrototypeOf(scope).contains.call(scope, element)) {\n            return true;\n        }\n        return toArray(scope.children).some(function (child) {\n            var _a;\n            if (child instanceof HTMLIFrameElement) {\n                var iframeBody = (_a = child.contentDocument) === null || _a === void 0 ? void 0 : _a.body;\n                if (iframeBody) {\n                    return contains(iframeBody, element);\n                }\n                return false;\n            }\n            return contains(child, element);\n        });\n    }\n};\n","/**\n * returns active element from document or from nested shadowdoms\n */\nimport { safeProbe } from './safe';\n/**\n * returns current active element. If the active element is a \"container\" itself(shadowRoot or iframe) returns active element inside it\n * @param [inDocument]\n */\nexport var getActiveElement = function (inDocument) {\n    if (inDocument === void 0) { inDocument = document; }\n    if (!inDocument || !inDocument.activeElement) {\n        return undefined;\n    }\n    var activeElement = inDocument.activeElement;\n    return (activeElement.shadowRoot\n        ? getActiveElement(activeElement.shadowRoot)\n        : activeElement instanceof HTMLIFrameElement && safeProbe(function () { return activeElement.contentWindow.document; })\n            ? getActiveElement(activeElement.contentWindow.document)\n            : activeElement);\n};\n","export var safeProbe = function (cb) {\n    try {\n        return cb();\n    }\n    catch (e) {\n        return undefined;\n    }\n};\n","import { FOCUS_DISABLED, FOCUS_GROUP } from '../constants';\nimport { asArray, toArray } from './array';\n/**\n * in case of multiple nodes nested inside each other\n * keeps only top ones\n * this is O(nlogn)\n * @param nodes\n * @returns {*}\n */\nvar filterNested = function (nodes) {\n    var contained = new Set();\n    var l = nodes.length;\n    for (var i = 0; i < l; i += 1) {\n        for (var j = i + 1; j < l; j += 1) {\n            var position = nodes[i].compareDocumentPosition(nodes[j]);\n            /* eslint-disable no-bitwise */\n            if ((position & Node.DOCUMENT_POSITION_CONTAINED_BY) > 0) {\n                contained.add(j);\n            }\n            if ((position & Node.DOCUMENT_POSITION_CONTAINS) > 0) {\n                contained.add(i);\n            }\n            /* eslint-enable */\n        }\n    }\n    return nodes.filter(function (_, index) { return !contained.has(index); });\n};\n/**\n * finds top most parent for a node\n * @param node\n * @returns {*}\n */\nvar getTopParent = function (node) {\n    return node.parentNode ? getTopParent(node.parentNode) : node;\n};\n/**\n * returns all \"focus containers\" inside a given node\n * @param node - node or nodes to look inside\n * @returns Element[]\n */\nexport var getAllAffectedNodes = function (node) {\n    var nodes = asArray(node);\n    return nodes.filter(Boolean).reduce(function (acc, currentNode) {\n        var group = currentNode.getAttribute(FOCUS_GROUP);\n        acc.push.apply(acc, (group\n            ? filterNested(toArray(getTopParent(currentNode).querySelectorAll(\"[\".concat(FOCUS_GROUP, \"=\\\"\").concat(group, \"\\\"]:not([\").concat(FOCUS_DISABLED, \"=\\\"disabled\\\"])\"))))\n            : [currentNode]));\n        return acc;\n    }, []);\n};\n","import { contains } from './utils/DOMutils';\nimport { getAllAffectedNodes } from './utils/all-affected';\nimport { getFirst, toArray } from './utils/array';\nimport { getActiveElement } from './utils/getActiveElement';\nvar focusInFrame = function (frame, activeElement) { return frame === activeElement; };\nvar focusInsideIframe = function (topNode, activeElement) {\n    return Boolean(toArray(topNode.querySelectorAll('iframe')).some(function (node) { return focusInFrame(node, activeElement); }));\n};\n/**\n * @returns {Boolean} true, if the current focus is inside given node or nodes.\n * Supports nodes hidden inside shadowDom\n */\nexport var focusInside = function (topNode, activeElement) {\n    // const activeElement = document && getActiveElement();\n    if (activeElement === void 0) { activeElement = getActiveElement(getFirst(topNode).ownerDocument); }\n    if (!activeElement || (activeElement.dataset && activeElement.dataset.focusGuard)) {\n        return false;\n    }\n    return getAllAffectedNodes(topNode).some(function (node) {\n        return contains(node, activeElement) || focusInsideIframe(node, activeElement);\n    });\n};\n","export var focusOn = function (target, focusOptions) {\n    if (!target) {\n        // not clear how, but is possible https://github.com/theKashey/focus-lock/issues/53\n        return;\n    }\n    if ('focus' in target) {\n        target.focus(focusOptions);\n    }\n    if ('contentWindow' in target && target.contentWindow) {\n        target.contentWindow.focus();\n    }\n};\n","import { isRadioElement } from './is';\nvar findSelectedRadio = function (node, nodes) {\n    return nodes\n        .filter(isRadioElement)\n        .filter(function (el) { return el.name === node.name; })\n        .filter(function (el) { return el.checked; })[0] || node;\n};\nexport var correctNode = function (node, nodes) {\n    if (isRadioElement(node) && node.name) {\n        return findSelectedRadio(node, nodes);\n    }\n    return node;\n};\n/**\n * giving a set of radio inputs keeps only selected (tabbable) ones\n * @param nodes\n */\nexport var correctNodes = function (nodes) {\n    // IE11 has no Set(array) constructor\n    var resultSet = new Set();\n    nodes.forEach(function (node) { return resultSet.add(correctNode(node, nodes)); });\n    // using filter to support IE11\n    return nodes.filter(function (node) { return resultSet.has(node); });\n};\n","import { correctNode } from './correctFocus';\nexport var pickFirstFocus = function (nodes) {\n    if (nodes[0] && nodes.length > 1) {\n        return correctNode(nodes[0], nodes);\n    }\n    return nodes[0];\n};\nexport var pickFocusable = function (nodes, node) {\n    return nodes.indexOf(correctNode(node, nodes));\n};\n","import { correctNodes } from './utils/correctFocus';\nimport { pickFocusable } from './utils/firstFocus';\nimport { isGuard } from './utils/is';\nexport var NEW_FOCUS = 'NEW_FOCUS';\n/**\n * Main solver for the \"find next focus\" question\n * @param innerNodes - used to control \"return focus\"\n * @param innerTabbables - used to control \"autofocus\"\n * @param outerNodes\n * @param activeElement\n * @param lastNode\n * @returns {number|string|undefined|*}\n */\nexport var newFocus = function (innerNodes, innerTabbables, outerNodes, activeElement, lastNode) {\n    var cnt = innerNodes.length;\n    var firstFocus = innerNodes[0];\n    var lastFocus = innerNodes[cnt - 1];\n    var isOnGuard = isGuard(activeElement);\n    // focus is inside\n    if (activeElement && innerNodes.indexOf(activeElement) >= 0) {\n        return undefined;\n    }\n    var activeIndex = activeElement !== undefined ? outerNodes.indexOf(activeElement) : -1;\n    var lastIndex = lastNode ? outerNodes.indexOf(lastNode) : activeIndex;\n    var lastNodeInside = lastNode ? innerNodes.indexOf(lastNode) : -1;\n    // no active focus (or focus is on the body)\n    if (activeIndex === -1) {\n        // known fallback\n        if (lastNodeInside !== -1) {\n            return lastNodeInside;\n        }\n        return NEW_FOCUS;\n    }\n    // new focus, nothing to calculate\n    if (lastNodeInside === -1) {\n        return NEW_FOCUS;\n    }\n    var indexDiff = activeIndex - lastIndex;\n    var firstNodeIndex = outerNodes.indexOf(firstFocus);\n    var lastNodeIndex = outerNodes.indexOf(lastFocus);\n    var correctedNodes = correctNodes(outerNodes);\n    var currentFocusableIndex = activeElement !== undefined ? correctedNodes.indexOf(activeElement) : -1;\n    var previousFocusableIndex = lastNode ? correctedNodes.indexOf(lastNode) : currentFocusableIndex;\n    var tabbableNodes = correctedNodes.filter(function (node) { return node.tabIndex >= 0; });\n    var currentTabbableIndex = activeElement !== undefined ? tabbableNodes.indexOf(activeElement) : -1;\n    var previousTabbableIndex = lastNode ? tabbableNodes.indexOf(lastNode) : currentTabbableIndex;\n    var focusIndexDiff = currentTabbableIndex >= 0 && previousTabbableIndex >= 0\n        ? // old/new are tabbables, measure distance in tabbable space\n            previousTabbableIndex - currentTabbableIndex\n        : // or else measure in focusable space\n            previousFocusableIndex - currentFocusableIndex;\n    // old focus\n    if (!indexDiff && lastNodeInside >= 0) {\n        return lastNodeInside;\n    }\n    // no tabbable elements, autofocus is not possible\n    if (innerTabbables.length === 0) {\n        // an edge case with no tabbable elements\n        // return the last focusable one\n        // with some probability this will prevent focus from cycling across the lock, but there is no tabbale elements to cycle to\n        return lastNodeInside;\n    }\n    var returnFirstNode = pickFocusable(innerNodes, innerTabbables[0]);\n    var returnLastNode = pickFocusable(innerNodes, innerTabbables[innerTabbables.length - 1]);\n    // first element\n    if (activeIndex <= firstNodeIndex && isOnGuard && Math.abs(indexDiff) > 1) {\n        return returnLastNode;\n    }\n    // last element\n    if (activeIndex >= lastNodeIndex && isOnGuard && Math.abs(indexDiff) > 1) {\n        return returnFirstNode;\n    }\n    // jump out, but not on the guard\n    if (indexDiff && Math.abs(focusIndexDiff) > 1) {\n        return lastNodeInside;\n    }\n    // focus above lock\n    if (activeIndex <= firstNodeIndex) {\n        return returnLastNode;\n    }\n    // focus below lock\n    if (activeIndex > lastNodeIndex) {\n        return returnFirstNode;\n    }\n    // index is inside tab order, but outside Lock\n    if (indexDiff) {\n        if (Math.abs(indexDiff) > 1) {\n            return lastNodeInside;\n        }\n        return (cnt + lastNodeInside + indexDiff) % cnt;\n    }\n    // do nothing\n    return undefined;\n};\n","import { filterAutoFocusable } from './DOMutils';\nimport { pickFirstFocus } from './firstFocus';\nimport { getDataset } from './is';\nvar findAutoFocused = function (autoFocusables) {\n    return function (node) {\n        var _a;\n        var autofocus = (_a = getDataset(node)) === null || _a === void 0 ? void 0 : _a.autofocus;\n        return (\n        // @ts-expect-error\n        node.autofocus ||\n            //\n            (autofocus !== undefined && autofocus !== 'false') ||\n            //\n            autoFocusables.indexOf(node) >= 0);\n    };\n};\nexport var pickAutofocus = function (nodesIndexes, orderedNodes, groups) {\n    var nodes = nodesIndexes.map(function (_a) {\n        var node = _a.node;\n        return node;\n    });\n    var autoFocusable = filterAutoFocusable(nodes.filter(findAutoFocused(groups)));\n    if (autoFocusable && autoFocusable.length) {\n        return pickFirstFocus(autoFocusable);\n    }\n    return pickFirstFocus(filterAutoFocusable(orderedNodes));\n};\n","import { parentAutofocusables } from './DOMutils';\nimport { contains } from './DOMutils';\nimport { asArray } from './array';\nvar getParents = function (node, parents) {\n    if (parents === void 0) { parents = []; }\n    parents.push(node);\n    if (node.parentNode) {\n        getParents(node.parentNode.host || node.parentNode, parents);\n    }\n    return parents;\n};\n/**\n * finds a parent for both nodeA and nodeB\n * @param nodeA\n * @param nodeB\n * @returns {boolean|*}\n */\nexport var getCommonParent = function (nodeA, nodeB) {\n    var parentsA = getParents(nodeA);\n    var parentsB = getParents(nodeB);\n    // tslint:disable-next-line:prefer-for-of\n    for (var i = 0; i < parentsA.length; i += 1) {\n        var currentParent = parentsA[i];\n        if (parentsB.indexOf(currentParent) >= 0) {\n            return currentParent;\n        }\n    }\n    return false;\n};\nexport var getTopCommonParent = function (baseActiveElement, leftEntry, rightEntries) {\n    var activeElements = asArray(baseActiveElement);\n    var leftEntries = asArray(leftEntry);\n    var activeElement = activeElements[0];\n    var topCommon = false;\n    leftEntries.filter(Boolean).forEach(function (entry) {\n        topCommon = getCommonParent(topCommon || entry, entry) || topCommon;\n        rightEntries.filter(Boolean).forEach(function (subEntry) {\n            var common = getCommonParent(activeElement, subEntry);\n            if (common) {\n                if (!topCommon || contains(common, topCommon)) {\n                    topCommon = common;\n                }\n                else {\n                    topCommon = getCommonParent(common, topCommon);\n                }\n            }\n        });\n    });\n    // TODO: add assert here?\n    return topCommon;\n};\n/**\n * return list of nodes which are expected to be autofocused inside a given top nodes\n * @param entries\n * @param visibilityCache\n */\nexport var allParentAutofocusables = function (entries, visibilityCache) {\n    return entries.reduce(function (acc, node) { return acc.concat(parentAutofocusables(node, visibilityCache)); }, []);\n};\n","import { NEW_FOCUS, newFocus } from './solver';\nimport { getFocusableNodes } from './utils/DOMutils';\nimport { getAllAffectedNodes } from './utils/all-affected';\nimport { asArray, getFirst } from './utils/array';\nimport { pickAutofocus } from './utils/auto-focus';\nimport { getActiveElement } from './utils/getActiveElement';\nimport { isDefined, isNotAGuard } from './utils/is';\nimport { allParentAutofocusables, getTopCommonParent } from './utils/parenting';\nvar reorderNodes = function (srcNodes, dstNodes) {\n    var remap = new Map();\n    // no Set(dstNodes) for IE11 :(\n    dstNodes.forEach(function (entity) { return remap.set(entity.node, entity); });\n    // remap to dstNodes\n    return srcNodes.map(function (node) { return remap.get(node); }).filter(isDefined);\n};\n/**\n * contains the main logic of the `focus-lock` package.\n *\n * ! you probably dont need this function !\n *\n * given top node(s) and the last active element returns the element to be focused next\n * @returns element which should be focused to move focus inside\n * @param topNode\n * @param lastNode\n */\nexport var focusSolver = function (topNode, lastNode) {\n    var activeElement = getActiveElement(asArray(topNode).length > 0 ? document : getFirst(topNode).ownerDocument);\n    var entries = getAllAffectedNodes(topNode).filter(isNotAGuard);\n    var commonParent = getTopCommonParent(activeElement || topNode, topNode, entries);\n    var visibilityCache = new Map();\n    var anyFocusable = getFocusableNodes(entries, visibilityCache);\n    var innerElements = anyFocusable.filter(function (_a) {\n        var node = _a.node;\n        return isNotAGuard(node);\n    });\n    if (!innerElements[0]) {\n        return undefined;\n    }\n    var outerNodes = getFocusableNodes([commonParent], visibilityCache).map(function (_a) {\n        var node = _a.node;\n        return node;\n    });\n    var orderedInnerElements = reorderNodes(outerNodes, innerElements);\n    // collect inner focusable and separately tabbables\n    var innerFocusables = orderedInnerElements.map(function (_a) {\n        var node = _a.node;\n        return node;\n    });\n    var innerTabbable = orderedInnerElements.filter(function (_a) {\n        var tabIndex = _a.tabIndex;\n        return tabIndex >= 0;\n    }).map(function (_a) {\n        var node = _a.node;\n        return node;\n    });\n    var newId = newFocus(innerFocusables, innerTabbable, outerNodes, activeElement, lastNode);\n    if (newId === NEW_FOCUS) {\n        var focusNode = \n        // first try only tabbable, and the fallback to all focusable, as long as at least one element should be picked for focus\n        pickAutofocus(anyFocusable, innerTabbable, allParentAutofocusables(entries, visibilityCache)) ||\n            pickAutofocus(anyFocusable, innerFocusables, allParentAutofocusables(entries, visibilityCache));\n        if (focusNode) {\n            return { node: focusNode };\n        }\n        else {\n            console.warn('focus-lock: cannot find any node to move focus into');\n            return undefined;\n        }\n    }\n    if (newId === undefined) {\n        return newId;\n    }\n    return orderedInnerElements[newId];\n};\n","import { focusOn } from './commands';\nimport { focusSolver } from './focusSolver';\nvar guardCount = 0;\nvar lockDisabled = false;\n/**\n * The main functionality of the focus-lock package\n *\n * Contains focus at a given node.\n * The last focused element will help to determine which element(first or last) should be focused.\n * The found element will be focused.\n *\n * This is one time action (move), not a persistent focus-lock\n *\n * HTML markers (see {@link import('./constants').FOCUS_AUTO} constants) can control autofocus\n * @see {@link focusSolver} for the same functionality without autofocus\n */\nexport var moveFocusInside = function (topNode, lastNode, options) {\n    if (options === void 0) { options = {}; }\n    var focusable = focusSolver(topNode, lastNode);\n    // global local side effect to countain recursive lock activation and resolve focus-fighting\n    if (lockDisabled) {\n        return;\n    }\n    if (focusable) {\n        /** +FOCUS-FIGHTING prevention **/\n        if (guardCount > 2) {\n            // we have recursive entered back the lock activation\n            console.error('FocusLock: focus-fighting detected. Only one focus management system could be active. ' +\n                'See https://github.com/theKashey/focus-lock/#focus-fighting');\n            lockDisabled = true;\n            setTimeout(function () {\n                lockDisabled = false;\n            }, 1);\n            return;\n        }\n        guardCount++;\n        focusOn(focusable.node, options.focusOptions);\n        guardCount--;\n    }\n};\n","import { getTabbableNodes } from './utils/DOMutils';\nfunction weakRef(value) {\n    if (!value)\n        return null;\n    // #68 Safari 14.1 dont have it yet\n    // FIXME: remove in 2025\n    if (typeof WeakRef === 'undefined') {\n        return function () { return value || null; };\n    }\n    var w = value ? new WeakRef(value) : null;\n    return function () { return (w === null || w === void 0 ? void 0 : w.deref()) || null; };\n}\nexport var recordElementLocation = function (element) {\n    if (!element) {\n        return null;\n    }\n    var stack = [];\n    var currentElement = element;\n    while (currentElement && currentElement !== document.body) {\n        stack.push({\n            current: weakRef(currentElement),\n            parent: weakRef(currentElement.parentElement),\n            left: weakRef(currentElement.previousElementSibling),\n            right: weakRef(currentElement.nextElementSibling),\n        });\n        currentElement = currentElement.parentElement;\n    }\n    return {\n        element: weakRef(element),\n        stack: stack,\n        ownerDocument: element.ownerDocument,\n    };\n};\nvar restoreFocusTo = function (location) {\n    var _a, _b, _c, _d, _e;\n    if (!location) {\n        return undefined;\n    }\n    var stack = location.stack, ownerDocument = location.ownerDocument;\n    var visibilityCache = new Map();\n    for (var _i = 0, stack_1 = stack; _i < stack_1.length; _i++) {\n        var line = stack_1[_i];\n        var parent_1 = (_a = line.parent) === null || _a === void 0 ? void 0 : _a.call(line);\n        // is it still here?\n        if (parent_1 && ownerDocument.contains(parent_1)) {\n            var left = (_b = line.left) === null || _b === void 0 ? void 0 : _b.call(line);\n            var savedCurrent = line.current();\n            var current = parent_1.contains(savedCurrent) ? savedCurrent : undefined;\n            var right = (_c = line.right) === null || _c === void 0 ? void 0 : _c.call(line);\n            var focusables = getTabbableNodes([parent_1], visibilityCache);\n            var aim = \n            // that is element itself\n            (_e = (_d = current !== null && current !== void 0 ? current : \n            // or something in it's place\n            left === null || left === void 0 ? void 0 : left.nextElementSibling) !== null && _d !== void 0 ? _d : \n            // or somebody to the right, still close enough\n            right) !== null && _e !== void 0 ? _e : \n            // or somebody to the left, something?\n            left;\n            while (aim) {\n                for (var _f = 0, focusables_1 = focusables; _f < focusables_1.length; _f++) {\n                    var focusable = focusables_1[_f];\n                    if (aim === null || aim === void 0 ? void 0 : aim.contains(focusable.node)) {\n                        return focusable.node;\n                    }\n                }\n                aim = aim.nextElementSibling;\n            }\n            if (focusables.length) {\n                // if parent contains a focusable - move there\n                return focusables[0].node;\n            }\n        }\n    }\n    // nothing matched\n    return undefined;\n};\n/**\n * Captures the current focused element to restore focus as close as possible in the future\n * Handles situations where the focused element is removed from the DOM or no longer focusable\n * moving focus to the closest focusable element\n * @param targetElement - element where focus should be restored\n * @returns a function returning a new element to focus\n */\nexport var captureFocusRestore = function (targetElement) {\n    var location = recordElementLocation(targetElement);\n    return function () {\n        return restoreFocusTo(location);\n    };\n};\n","import { focusOn } from './commands';\nimport { getTabbableNodes, contains, getFocusableNodes } from './utils/DOMutils';\nimport { asArray } from './utils/array';\n/**\n * for a given `element` in a given `scope` returns focusable siblings\n * @param element - base element\n * @param scope - common parent. Can be document, but better to narrow it down for performance reasons\n * @returns {prev,next} - references to a focusable element before and after\n * @returns undefined - if operation is not applicable\n */\nexport var getRelativeFocusable = function (element, scope, useTabbables) {\n    if (!element || !scope) {\n        console.error('no element or scope given');\n        return {};\n    }\n    var shards = asArray(scope);\n    if (shards.every(function (shard) { return !contains(shard, element); })) {\n        console.error('Active element is not contained in the scope');\n        return {};\n    }\n    var focusables = useTabbables\n        ? getTabbableNodes(shards, new Map())\n        : getFocusableNodes(shards, new Map());\n    var current = focusables.findIndex(function (_a) {\n        var node = _a.node;\n        return node === element;\n    });\n    if (current === -1) {\n        // an edge case, when anchor element is not found\n        return undefined;\n    }\n    return {\n        prev: focusables[current - 1],\n        next: focusables[current + 1],\n        first: focusables[0],\n        last: focusables[focusables.length - 1],\n    };\n};\nvar getBoundary = function (shards, useTabbables) {\n    var set = useTabbables\n        ? getTabbableNodes(asArray(shards), new Map())\n        : getFocusableNodes(asArray(shards), new Map());\n    return {\n        first: set[0],\n        last: set[set.length - 1],\n    };\n};\nvar defaultOptions = function (options) {\n    return Object.assign({\n        scope: document.body,\n        cycle: true,\n        onlyTabbable: true,\n    }, options);\n};\nvar moveFocus = function (fromElement, options, cb) {\n    if (options === void 0) { options = {}; }\n    var newOptions = defaultOptions(options);\n    var solution = getRelativeFocusable(fromElement, newOptions.scope, newOptions.onlyTabbable);\n    if (!solution) {\n        return;\n    }\n    var target = cb(solution, newOptions.cycle);\n    if (target) {\n        focusOn(target.node, newOptions.focusOptions);\n    }\n};\n/**\n * focuses next element in the tab-order\n * @param fromElement - common parent to scope active element search or tab cycle order\n * @param {FocusNextOptions} [options] - focus options\n */\nexport var focusNextElement = function (fromElement, options) {\n    if (options === void 0) { options = {}; }\n    moveFocus(fromElement, options, function (_a, cycle) {\n        var next = _a.next, first = _a.first;\n        return next || (cycle && first);\n    });\n};\n/**\n * focuses prev element in the tab order\n * @param fromElement - common parent to scope active element search or tab cycle order\n * @param {FocusNextOptions} [options] - focus options\n */\nexport var focusPrevElement = function (fromElement, options) {\n    if (options === void 0) { options = {}; }\n    moveFocus(fromElement, options, function (_a, cycle) {\n        var prev = _a.prev, last = _a.last;\n        return prev || (cycle && last);\n    });\n};\nvar pickBoundary = function (scope, options, what) {\n    var _a;\n    var boundary = getBoundary(scope, (_a = options.onlyTabbable) !== null && _a !== void 0 ? _a : true);\n    var node = boundary[what];\n    if (node) {\n        focusOn(node.node, options.focusOptions);\n    }\n};\n/**\n * focuses first element in the tab-order\n * @param {FocusNextOptions} options - focus options\n */\nexport var focusFirstElement = function (scope, options) {\n    if (options === void 0) { options = {}; }\n    pickBoundary(scope, options, 'first');\n};\n/**\n * focuses last element in the tab order\n * @param {FocusNextOptions} options - focus options\n */\nexport var focusLastElement = function (scope, options) {\n    if (options === void 0) { options = {}; }\n    pickBoundary(scope, options, 'last');\n};\n","export function deferAction(action) {\n  setTimeout(action, 1);\n}\nexport var inlineProp = function inlineProp(name, value) {\n  var obj = {};\n  obj[name] = value;\n  return obj;\n};\nexport var extractRef = function extractRef(ref) {\n  return ref && 'current' in ref ? ref.current : ref;\n};","import React from 'react';\nimport PropTypes from 'prop-types';\nimport withSideEffect from 'react-clientside-effect';\nimport { moveFocusInside, focusInside, focusIsHidden, expandFocusableNodes, getFocusableNodes, focusNextElement, focusPrevElement, focusFirstElement, focusLastElement, captureFocusRestore } from 'focus-lock';\nimport { deferAction, extractRef } from './util';\nimport { mediumFocus, mediumBlur, mediumEffect } from './medium';\nvar focusOnBody = function focusOnBody() {\n  return document && document.activeElement === document.body;\n};\nvar isFreeFocus = function isFreeFocus() {\n  return focusOnBody() || focusIsHidden();\n};\nvar lastActiveTrap = null;\nvar lastActiveFocus = null;\nvar tryRestoreFocus = function tryRestoreFocus() {\n  return null;\n};\nvar lastPortaledElement = null;\nvar focusWasOutsideWindow = false;\nvar windowFocused = false;\nvar defaultWhitelist = function defaultWhitelist() {\n  return true;\n};\nvar focusWhitelisted = function focusWhitelisted(activeElement) {\n  return (lastActiveTrap.whiteList || defaultWhitelist)(activeElement);\n};\nvar recordPortal = function recordPortal(observerNode, portaledElement) {\n  lastPortaledElement = {\n    observerNode: observerNode,\n    portaledElement: portaledElement\n  };\n};\nvar focusIsPortaledPair = function focusIsPortaledPair(element) {\n  return lastPortaledElement && lastPortaledElement.portaledElement === element;\n};\nfunction autoGuard(startIndex, end, step, allNodes) {\n  var lastGuard = null;\n  var i = startIndex;\n  do {\n    var item = allNodes[i];\n    if (item.guard) {\n      if (item.node.dataset.focusAutoGuard) {\n        lastGuard = item;\n      }\n    } else if (item.lockItem) {\n      if (i !== startIndex) {\n        return;\n      }\n      lastGuard = null;\n    } else {\n      break;\n    }\n  } while ((i += step) !== end);\n  if (lastGuard) {\n    lastGuard.node.tabIndex = 0;\n  }\n}\nvar focusWasOutside = function focusWasOutside(crossFrameOption) {\n  if (crossFrameOption) {\n    return Boolean(focusWasOutsideWindow);\n  }\n  return focusWasOutsideWindow === 'meanwhile';\n};\nvar checkInHost = function checkInHost(check, el, boundary) {\n  return el && (el.host === check && (!el.activeElement || boundary.contains(el.activeElement)) || el.parentNode && checkInHost(check, el.parentNode, boundary));\n};\nvar withinHost = function withinHost(activeElement, workingArea) {\n  return workingArea.some(function (area) {\n    return checkInHost(activeElement, area, area);\n  });\n};\nvar getNodeFocusables = function getNodeFocusables(nodes) {\n  return getFocusableNodes(nodes, new Map());\n};\nvar isNotFocusable = function isNotFocusable(node) {\n  return !getNodeFocusables([node.parentNode]).some(function (el) {\n    return el.node === node;\n  });\n};\nvar activateTrap = function activateTrap() {\n  var result = false;\n  if (lastActiveTrap) {\n    var _lastActiveTrap = lastActiveTrap,\n      observed = _lastActiveTrap.observed,\n      persistentFocus = _lastActiveTrap.persistentFocus,\n      autoFocus = _lastActiveTrap.autoFocus,\n      shards = _lastActiveTrap.shards,\n      crossFrame = _lastActiveTrap.crossFrame,\n      focusOptions = _lastActiveTrap.focusOptions,\n      noFocusGuards = _lastActiveTrap.noFocusGuards;\n    var workingNode = observed || lastPortaledElement && lastPortaledElement.portaledElement;\n    if (focusOnBody() && lastActiveFocus && lastActiveFocus !== document.body) {\n      if (!document.body.contains(lastActiveFocus) || isNotFocusable(lastActiveFocus)) {\n        var newTarget = tryRestoreFocus();\n        if (newTarget) {\n          newTarget.focus();\n        }\n      }\n    }\n    var activeElement = document && document.activeElement;\n    if (workingNode) {\n      var workingArea = [workingNode].concat(shards.map(extractRef).filter(Boolean));\n      var shouldForceRestoreFocus = function shouldForceRestoreFocus() {\n        if (!focusWasOutside(crossFrame) || !noFocusGuards || !lastActiveFocus || windowFocused) {\n          return false;\n        }\n        var nodes = getNodeFocusables(workingArea);\n        var lastIndex = nodes.findIndex(function (_ref) {\n          var node = _ref.node;\n          return node === lastActiveFocus;\n        });\n        return lastIndex === 0 || lastIndex === nodes.length - 1;\n      };\n      if (!activeElement || focusWhitelisted(activeElement)) {\n        if (persistentFocus || shouldForceRestoreFocus() || !isFreeFocus() || !lastActiveFocus && autoFocus) {\n          if (workingNode && !(focusInside(workingArea) || activeElement && withinHost(activeElement, workingArea) || focusIsPortaledPair(activeElement, workingNode))) {\n            if (document && !lastActiveFocus && activeElement && !autoFocus) {\n              if (activeElement.blur) {\n                activeElement.blur();\n              }\n              document.body.focus();\n            } else {\n              result = moveFocusInside(workingArea, lastActiveFocus, {\n                focusOptions: focusOptions\n              });\n              lastPortaledElement = {};\n            }\n          }\n          lastActiveFocus = document && document.activeElement;\n          if (lastActiveFocus !== document.body) {\n            tryRestoreFocus = captureFocusRestore(lastActiveFocus);\n          }\n          focusWasOutsideWindow = false;\n        }\n      }\n      if (document && activeElement !== document.activeElement && document.querySelector('[data-focus-auto-guard]')) {\n        var newActiveElement = document && document.activeElement;\n        var allNodes = expandFocusableNodes(workingArea);\n        var focusedIndex = allNodes.map(function (_ref2) {\n          var node = _ref2.node;\n          return node;\n        }).indexOf(newActiveElement);\n        if (focusedIndex > -1) {\n          allNodes.filter(function (_ref3) {\n            var guard = _ref3.guard,\n              node = _ref3.node;\n            return guard && node.dataset.focusAutoGuard;\n          }).forEach(function (_ref4) {\n            var node = _ref4.node;\n            return node.removeAttribute('tabIndex');\n          });\n          autoGuard(focusedIndex, allNodes.length, +1, allNodes);\n          autoGuard(focusedIndex, -1, -1, allNodes);\n        }\n      }\n    }\n  }\n  return result;\n};\nvar onTrap = function onTrap(event) {\n  if (activateTrap() && event) {\n    event.stopPropagation();\n    event.preventDefault();\n  }\n};\nvar onBlur = function onBlur() {\n  return deferAction(activateTrap);\n};\nvar onFocus = function onFocus(event) {\n  var source = event.target;\n  var currentNode = event.currentTarget;\n  if (!currentNode.contains(source)) {\n    recordPortal(currentNode, source);\n  }\n};\nvar FocusWatcher = function FocusWatcher() {\n  return null;\n};\nvar FocusTrap = function FocusTrap(_ref5) {\n  var children = _ref5.children;\n  return /*#__PURE__*/React.createElement(\"div\", {\n    onBlur: onBlur,\n    onFocus: onFocus\n  }, children);\n};\nFocusTrap.propTypes = process.env.NODE_ENV !== \"production\" ? {\n  children: PropTypes.node.isRequired\n} : {};\nvar onWindowFocus = function onWindowFocus() {\n  windowFocused = true;\n};\nvar onWindowBlur = function onWindowBlur() {\n  windowFocused = false;\n  focusWasOutsideWindow = 'just';\n  deferAction(function () {\n    focusWasOutsideWindow = 'meanwhile';\n  });\n};\nvar attachHandler = function attachHandler() {\n  document.addEventListener('focusin', onTrap);\n  document.addEventListener('focusout', onBlur);\n  window.addEventListener('focus', onWindowFocus);\n  window.addEventListener('blur', onWindowBlur);\n};\nvar detachHandler = function detachHandler() {\n  document.removeEventListener('focusin', onTrap);\n  document.removeEventListener('focusout', onBlur);\n  window.removeEventListener('focus', onWindowFocus);\n  window.removeEventListener('blur', onWindowBlur);\n};\nfunction reducePropsToState(propsList) {\n  return propsList.filter(function (_ref6) {\n    var disabled = _ref6.disabled;\n    return !disabled;\n  });\n}\nvar focusLockAPI = {\n  moveFocusInside: moveFocusInside,\n  focusInside: focusInside,\n  focusNextElement: focusNextElement,\n  focusPrevElement: focusPrevElement,\n  focusFirstElement: focusFirstElement,\n  focusLastElement: focusLastElement,\n  captureFocusRestore: captureFocusRestore\n};\nfunction handleStateChangeOnClient(traps) {\n  var trap = traps.slice(-1)[0];\n  if (trap && !lastActiveTrap) {\n    attachHandler();\n  }\n  var lastTrap = lastActiveTrap;\n  var sameTrap = lastTrap && trap && trap.id === lastTrap.id;\n  lastActiveTrap = trap;\n  if (lastTrap && !sameTrap) {\n    lastTrap.onDeactivation();\n    if (!traps.filter(function (_ref7) {\n      var id = _ref7.id;\n      return id === lastTrap.id;\n    }).length) {\n      lastTrap.returnFocus(!trap);\n    }\n  }\n  if (trap) {\n    lastActiveFocus = null;\n    if (!sameTrap || lastTrap.observed !== trap.observed) {\n      trap.onActivation(focusLockAPI);\n    }\n    activateTrap(true);\n    deferAction(activateTrap);\n  } else {\n    detachHandler();\n    lastActiveFocus = null;\n  }\n}\nmediumFocus.assignSyncMedium(onFocus);\nmediumBlur.assignMedium(onBlur);\nmediumEffect.assignMedium(function (cb) {\n  return cb(focusLockAPI);\n});\nexport default withSideEffect(reducePropsToState, handleStateChangeOnClient)(FocusWatcher);","import { getAllAffectedNodes } from './utils/all-affected';\nimport { isGuard, isNotAGuard } from './utils/is';\nimport { getTopCommonParent } from './utils/parenting';\nimport { orderByTabIndex } from './utils/tabOrder';\nimport { getFocusables } from './utils/tabUtils';\n/**\n * traverses all related nodes (including groups) returning a list of all nodes(outer and internal) with meta information\n * This is low-level API!\n * @returns list of focusable elements inside a given top(!) node.\n * @see {@link getFocusableNodes} providing a simpler API\n */\nexport var expandFocusableNodes = function (topNode) {\n    var entries = getAllAffectedNodes(topNode).filter(isNotAGuard);\n    var commonParent = getTopCommonParent(topNode, topNode, entries);\n    var outerNodes = orderByTabIndex(getFocusables([commonParent], true), true, true);\n    var innerElements = getFocusables(entries, false);\n    return outerNodes.map(function (_a) {\n        var node = _a.node, index = _a.index;\n        return ({\n            node: node,\n            index: index,\n            lockItem: innerElements.indexOf(node) >= 0,\n            guard: isGuard(node),\n        });\n    });\n};\n","import { FOCUS_ALLOW } from './constants';\nimport { contains } from './utils/DOMutils';\nimport { toArray } from './utils/array';\nimport { getActiveElement } from './utils/getActiveElement';\n/**\n * checks if focus is hidden FROM the focus-lock\n * ie contained inside a node focus-lock shall ignore\n *\n * This is a utility function coupled with {@link FOCUS_ALLOW} constant\n *\n * @returns {boolean} focus is currently is in \"allow\" area\n */\nexport var focusIsHidden = function (inDocument) {\n    if (inDocument === void 0) { inDocument = document; }\n    var activeElement = getActiveElement(inDocument);\n    if (!activeElement) {\n        return false;\n    }\n    // this does not support setting FOCUS_ALLOW within shadow dom\n    return toArray(inDocument.querySelectorAll(\"[\".concat(FOCUS_ALLOW, \"]\"))).some(function (node) { return contains(node, activeElement); });\n};\n","import _inheritsLoose from '@babel/runtime/helpers/esm/inheritsLoose';\nimport _defineProperty from '@babel/runtime/helpers/esm/defineProperty';\nimport React, { PureComponent } from 'react';\n\nfunction withSideEffect(reducePropsToState, handleStateChangeOnClient) {\n  if (process.env.NODE_ENV !== \"production\") {\n    if (typeof reducePropsToState !== 'function') {\n      throw new Error('Expected reducePropsToState to be a function.');\n    }\n\n    if (typeof handleStateChangeOnClient !== 'function') {\n      throw new Error('Expected handleStateChangeOnClient to be a function.');\n    }\n  }\n\n  function getDisplayName(WrappedComponent) {\n    return WrappedComponent.displayName || WrappedComponent.name || 'Component';\n  }\n\n  return function wrap(WrappedComponent) {\n    if (process.env.NODE_ENV !== \"production\") {\n      if (typeof WrappedComponent !== 'function') {\n        throw new Error('Expected WrappedComponent to be a React component.');\n      }\n    }\n\n    var mountedInstances = [];\n    var state;\n\n    function emitChange() {\n      state = reducePropsToState(mountedInstances.map(function (instance) {\n        return instance.props;\n      }));\n      handleStateChangeOnClient(state);\n    }\n\n    var SideEffect = /*#__PURE__*/function (_PureComponent) {\n      _inheritsLoose(SideEffect, _PureComponent);\n\n      function SideEffect() {\n        return _PureComponent.apply(this, arguments) || this;\n      }\n\n      // Try to use displayName of wrapped component\n      SideEffect.peek = function peek() {\n        return state;\n      };\n\n      var _proto = SideEffect.prototype;\n\n      _proto.componentDidMount = function componentDidMount() {\n        mountedInstances.push(this);\n        emitChange();\n      };\n\n      _proto.componentDidUpdate = function componentDidUpdate() {\n        emitChange();\n      };\n\n      _proto.componentWillUnmount = function componentWillUnmount() {\n        var index = mountedInstances.indexOf(this);\n        mountedInstances.splice(index, 1);\n        emitChange();\n      };\n\n      _proto.render = function render() {\n        return /*#__PURE__*/React.createElement(WrappedComponent, this.props);\n      };\n\n      return SideEffect;\n    }(PureComponent);\n\n    _defineProperty(SideEffect, \"displayName\", \"SideEffect(\" + getDisplayName(WrappedComponent) + \")\");\n\n    return SideEffect;\n  };\n}\n\nexport default withSideEffect;\n","import toPropertyKey from \"./toPropertyKey.js\";\nfunction _defineProperty(e, r, t) {\n  return (r = toPropertyKey(r)) in e ? Object.defineProperty(e, r, {\n    value: t,\n    enumerable: !0,\n    configurable: !0,\n    writable: !0\n  }) : e[r] = t, e;\n}\nexport { _defineProperty as default };","import _typeof from \"./typeof.js\";\nimport toPrimitive from \"./toPrimitive.js\";\nfunction toPropertyKey(t) {\n  var i = toPrimitive(t, \"string\");\n  return \"symbol\" == _typeof(i) ? i : i + \"\";\n}\nexport { toPropertyKey as default };","import _typeof from \"./typeof.js\";\nfunction toPrimitive(t, r) {\n  if (\"object\" != _typeof(t) || !t) return t;\n  var e = t[Symbol.toPrimitive];\n  if (void 0 !== e) {\n    var i = e.call(t, r || \"default\");\n    if (\"object\" != _typeof(i)) return i;\n    throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n  }\n  return (\"string\" === r ? String : Number)(t);\n}\nexport { toPrimitive as default };","import _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nimport React, { forwardRef } from 'react';\nimport FocusLockUI from './Lock';\nimport FocusTrap from './Trap';\nvar FocusLockCombination = /*#__PURE__*/forwardRef(function FocusLockUICombination(props, ref) {\n  return /*#__PURE__*/React.createElement(FocusLockUI, _extends({\n    sideCar: FocusTrap,\n    ref: ref\n  }, props));\n});\nvar _ref = FocusLockUI.propTypes || {},\n  sideCar = _ref.sideCar,\n  propTypes = _objectWithoutPropertiesLoose(_ref, [\"sideCar\"]);\nFocusLockCombination.propTypes = process.env.NODE_ENV !== \"production\" ? propTypes : {};\nexport default FocusLockCombination;","import FocusLock from './Combination';\nexport * from './UI';\nexport default FocusLock;","import * as React from 'react';\r\n\r\ninterface IInstantOffersLoadingScreenProps {}\r\n\r\nexport const InstantOffersLoadingScreen: React.FC<IInstantOffersLoadingScreenProps> = props => {\r\n    return (\r\n        <div className=\"kxm-ico-animated-loader-outter animated-loader-container\">\r\n            <div className=\"kmx-ico-animated-loader-inner inner\">\r\n                <img\r\n                    alt=\"Instant offers form loading\"\r\n                    className=\"kmx-ico-animated-loader-image\"\r\n                    src=\"/home/images/home/instant-offers/animated-loader-part-1.gif\"\r\n                />\r\n            </div>\r\n        </div>\r\n    );\r\n};\r\n","import axios from 'axios';\r\n\r\nexport const getInstantOffersToken = () => {\r\n    return axios({\r\n        url: '/home/api/instantoffers/token',\r\n        method: 'POST'\r\n    }).then(result => {\r\n        return result.data;\r\n    });\r\n};\r\n","import { getInstantOffersToken } from '../../../api/instant-offers-api';\r\n\r\nexport const instantOffersSectionId = 'online-offer';\r\nexport const instantOffersContainerId = 'instant-cash-offer';\r\nexport const instantOffersDialogContainerClassName = 'instant-offers-dialog-container';\r\nexport const instantOffersDisclaimerId = 'instant-offers-disclaimer';\r\nexport const instantOffersComponentContainerClass = 'ico-container';\r\n\r\nexport const instantOfferStartedEvent = 'icoStarted';\r\nexport const instantOfferEligibleEvent = 'offerAvailable';\r\nexport const instantOfferIneligibleEvent = 'vehicleIneligible';\r\nexport const instantOfferZipCodeDecodeErrorEvent = 'zipCodeDecodeError';\r\n\r\nexport const instantOfferIneligibleAnalyticsEvent = 'Instant-Cash-Offer_Ineligible';\r\n\r\nexport const buildScheduleIneligibleOfferLink = (originPage = 'HP_ICO_Ineligible') =>\r\n    `/sell-my-car?op=${originPage}#AppointmentForm`;\r\nexport const buildScheduleEligibleOfferLink = (storeId: string, offerCode: string, originPage = 'HP_ICO_ActiveOffer') =>\r\n    `/appraisal-checkout?storeId=${storeId}&appraisalCode=${offerCode}&originPage=${originPage}`;\r\n\r\nexport const makeModelMaxLength = 20;\r\n\r\nconst icoFeatures = ['condition-question-email'];\r\nconst originPage = 'HP_ICO_NewOffer';\r\n\r\ninterface IcoConfiguration {\r\n    vehicleInformation?: IVehicleInfo;\r\n    containerId: string;\r\n    originPage?: string;\r\n    startingMethod?: string;\r\n    authRefreshHandler: () => Promise<string>;\r\n    enabledFeatures: string[];\r\n    handleIneligible: boolean;\r\n}\r\n\r\ninterface IVehicleInfo {\r\n    vin: string;\r\n    plate: string;\r\n    state: string;\r\n    mileage: number;\r\n    zipcode: string;\r\n    profile: IProfile;\r\n    styleCode: string;\r\n}\r\n\r\ninterface IProfile {\r\n    year: string;\r\n    yearCode: string;\r\n    make: string;\r\n    makeCode: string;\r\n    model: string;\r\n    modelCode: string;\r\n    trim: string;\r\n    trimCode: string;\r\n}\r\n\r\nexport const buildInstantOfferConfig = (\r\n    vehicleInformation?: any,\r\n    type?: string,\r\n    containerId = instantOffersContainerId\r\n): IcoConfiguration => {\r\n    const config: IcoConfiguration = {\r\n        authRefreshHandler: function () {\r\n            return getInstantOffersToken();\r\n        },\r\n        containerId: containerId,\r\n        originPage: originPage,\r\n        enabledFeatures: icoFeatures,\r\n        handleIneligible: true,\r\n    };\r\n\r\n    if (vehicleInformation) {\r\n        config.vehicleInformation = vehicleInformation;\r\n    }\r\n\r\n    switch (type) {\r\n        case 'PLATE':\r\n            config.startingMethod = 'LP';\r\n            break;\r\n        case 'VIN':\r\n            config.startingMethod = 'VIN';\r\n            break;\r\n    }\r\n\r\n    return config;\r\n};\r\n\r\nexport type AUTOCOMPLETE =\r\n    | 'off'\r\n    | 'on'\r\n    | 'name'\r\n    | 'honorific-prefix'\r\n    | 'given-name'\r\n    | 'additional-name'\r\n    | 'family-name'\r\n    | 'honorific-suffix'\r\n    | 'nickname'\r\n    | 'email'\r\n    | 'username'\r\n    | 'new-password'\r\n    | 'current-password'\r\n    | 'organizational-title'\r\n    | 'organization'\r\n    | 'street-address'\r\n    | 'street-address address-line1'\r\n    | 'street-address address-line2'\r\n    | 'street-address address-line3'\r\n    | 'address-level1'\r\n    | 'address-level2'\r\n    | 'country'\r\n    | 'postal-code'\r\n    | 'tel'\r\n    | 'tel-country-code'\r\n    | 'tel-national'\r\n    | 'tel-area-code'\r\n    | 'tel-local'\r\n    | 'tel-extension'\r\n    | 'url';\r\n\r\nexport type INPUTMODE = 'decimal' | 'email' | 'none' | 'numeric' | 'search' | 'tel' | 'text' | 'url';\r\nexport type INPUT_TYPES = 'email' | 'number' | 'password' | 'search' | 'tel' | 'text' | 'url';\r\n","import * as React from 'react';\r\nimport { IInstantOfferDetails } from './InstantOffers';\r\nimport { buildScheduleIneligibleOfferLink, makeModelMaxLength } from './utils/constants';\r\n\r\nexport interface IIneligibleOfferProps {\r\n    instantOfferDetails: IInstantOfferDetails;\r\n}\r\n\r\nfunction prepareVehicleTitle(make: string | undefined, model: string | undefined) {\r\n    const vehicleTitle = make + ' ' + model;\r\n\r\n    if (make && model && vehicleTitle.length <= makeModelMaxLength) {\r\n        return vehicleTitle;\r\n    } else if (make && make.length <= makeModelMaxLength) {\r\n        return make;\r\n    } else {\r\n        return 'car';\r\n    }\r\n}\r\n\r\nfunction IneligibleOffer(props: IIneligibleOfferProps) {\r\n    const vehicleTitle = prepareVehicleTitle(\r\n        props.instantOfferDetails.vehicleMake,\r\n        props.instantOfferDetails.vehicleModel\r\n    );\r\n\r\n    return (\r\n        <div id=\"icoIneligible\" className=\"ico-ineligible\">\r\n            <div>\r\n                <img\r\n                    width=\"368\"\r\n                    height=\"218\"\r\n                    alt=\"Vehicle condition verification\"\r\n                    className=\"ico-ineligible-img\"\r\n                    src=\"/home/images/home/instant-offers/condition-verification-graphic.png\"\r\n                />\r\n                <h4 className=\"ico-ineligible-title \">We&apos;d like to see your {vehicleTitle} in&nbsp;person</h4>\r\n                <p className=\"ico-ineligible-body\">\r\n                    Online offers are based on recent appraisals of similar cars, and we haven&apos;t seen many like\r\n                    yours lately. For your offer, stop by your local CarMax.\r\n                </p>\r\n            </div>\r\n            <div className=\"ico-ineligible-button-container\">\r\n                <hzn-button\r\n                    variant=\"cta\"\r\n                    href={buildScheduleIneligibleOfferLink()}\r\n                    target=\"_blank\"\r\n                    rel=\"noopener noreferrer\"\r\n                    class=\"ico-ineligible-schedule-btn\"\r\n                    full-width\r\n                >\r\n                    Schedule in-store appraisal\r\n                </hzn-button>\r\n                <button\r\n                    className=\"ico-ineligible-change-vehicle-btn\"\r\n                    onClick={() => props.instantOfferDetails.onStartNewOffer()}\r\n                >\r\n                    Change vehicle\r\n                </button>\r\n            </div>\r\n        </div>\r\n    );\r\n}\r\n\r\nexport default IneligibleOffer;\r\n","import * as React from 'react';\r\nimport classNames from 'classnames';\r\nimport FocusLock from 'react-focus-lock';\r\nimport { InstantOffersLoadingScreen } from './InstantOffersLoadingScreen';\r\nimport Icons from '../../utilities/icons';\r\nimport IneligibleOffer from './IneligibleOffer';\r\nimport {\r\n    instantOfferEligibleEvent,\r\n    instantOffersContainerId,\r\n    instantOffersDialogContainerClassName,\r\n} from './utils/constants';\r\nimport { IInstantOfferDetails } from './InstantOffers';\r\n\r\ninterface IInstantOffersFullScreenDialogProps {\r\n    isOpen: boolean;\r\n    isLoading: boolean;\r\n    onClose: Function;\r\n    isInstantOffersEligible: boolean;\r\n    instantOfferDetails: IInstantOfferDetails;\r\n}\r\n\r\nfunction InstantOffersFullScreenDialog(props: IInstantOffersFullScreenDialogProps) {\r\n    const scrollToTop = () => {\r\n        const icoContainerEl = document.querySelector(`.${instantOffersDialogContainerClassName}`);\r\n        if (icoContainerEl) {\r\n            if ('scrollBehavior' in document.documentElement.style) {\r\n                icoContainerEl.scrollTo({ left: 0, top: 0, behavior: 'smooth' });\r\n            } else {\r\n                icoContainerEl.scrollTop = 0;\r\n            }\r\n        }\r\n    };\r\n\r\n    React.useEffect(() => {\r\n        if (props.isOpen) {\r\n            document.documentElement.classList.add('kmx-suyc-ico-open');\r\n            window.addEventListener(instantOfferEligibleEvent, scrollToTop);\r\n        } else {\r\n            document.documentElement.classList.remove('kmx-suyc-ico-open');\r\n            window.removeEventListener(instantOfferEligibleEvent, scrollToTop);\r\n        }\r\n    }, [props.isOpen]);\r\n\r\n    const whiteFn = (node: HTMLElement) => {\r\n        const main = document.getElementById('main');\r\n        return main == null ? false : main.contains(node);\r\n    };\r\n\r\n    // Version 2.13.6 of React Focus Lock was finding our skip links and focusing them when at the end of the carousel\r\n    // Avoiding rendering the Full Screen Dialog until the dialog is actually open means that focus lock isn't on the page and causing unintended behavior\r\n    if (!props.isOpen) {\r\n        return <></>;\r\n    }\r\n\r\n    return (\r\n        <FocusLock whiteList={whiteFn}>\r\n            <div className={classNames('fullScreenDialog', { hidden: !props.isOpen })}>\r\n                <header className=\"fullScreenDialog-mini-header\">\r\n                    <div className=\"fullScreenDialog-header-container\">\r\n                        <div className=\"fullScreenDialog-mini-header--logo-center fullScreenDialog-mini-header--no-action-content\">\r\n                            {Icons.carMaxLogoDark}\r\n                        </div>\r\n                        <div className=\"fullScreenDialog-mini-header--action-content\">\r\n                            <button className=\"closeButton dialog-close-button\" onClick={() => props.onClose()}>\r\n                                {Icons.close}\r\n                            </button>\r\n                        </div>\r\n                    </div>\r\n                </header>\r\n                <div\r\n                    id={instantOffersContainerId}\r\n                    className={classNames(instantOffersDialogContainerClassName, {\r\n                        hidden: !props.isInstantOffersEligible,\r\n                    })}\r\n                />\r\n                {props.isLoading && <InstantOffersLoadingScreen />}\r\n                {!props.isLoading && !props.isInstantOffersEligible && (\r\n                    <div className=\"ico-ineligible-full-screen-container\">\r\n                        <IneligibleOffer instantOfferDetails={props.instantOfferDetails} />\r\n                    </div>\r\n                )}\r\n            </div>\r\n        </FocusLock>\r\n    );\r\n}\r\n\r\nexport default InstantOffersFullScreenDialog;\r\n","import * as ReactDOM from 'react-dom';\r\nimport { instantOffersDisclaimerId } from './utils/constants';\r\n\r\nexport default function InstantOffersDisclaimer() {\r\n    const disclaimerEl = document.getElementById(instantOffersDisclaimerId);\r\n\r\n    const disclaimer = (\r\n        <div data-fs-section=\"HP: Instant Offers Disclaimer\" className=\"hp-layout-grid\">\r\n            <div className=\"mdc-layout-grid__inner disclaimer-section\">\r\n                <div className=\"hp-typography--fine-print mdc-layout-grid__cell mdc-layout-grid__cell--span-12\">\r\n                    &dagger; The offer from CarMax is contingent on your providing accurate information. CarMax will\r\n                    conduct a verification of your vehicle and evaluate other vehicle use and history information prior\r\n                    to finalizing the offer. Any differences between the information you provide about your vehicle and\r\n                    the vehicle&apos;s actual condition, use, and history may impact the offer you receive from CarMax.\r\n                </div>\r\n            </div>\r\n        </div>\r\n    );\r\n\r\n    return disclaimerEl ? ReactDOM.createPortal(disclaimer, disclaimerEl) : null;\r\n}\r\n","import * as React from 'react';\r\nimport classNames from 'classnames';\r\n\r\ninterface IEligibleOfferCountdownProps {\r\n    title: string;\r\n    value: number;\r\n}\r\n\r\nfunction EligibleOfferCountdown(props: IEligibleOfferCountdownProps) {\r\n    const firstDigit = props != null && props.value >= 10 ? Number(props.value.toString().charAt(0)) : 0;\r\n    const secondDigit =\r\n        props != null && props.value >= 10\r\n            ? Number(props.value.toString().charAt(1))\r\n            : Number(props.value.toString().charAt(0));\r\n\r\n    return (\r\n        <span className=\"instant-offers-eligible-offer--countdown-container\">\r\n            <div>\r\n                <span className=\"instant-offers-eligible-offer--countdown-digit\">{firstDigit}</span>\r\n                <span className=\"instant-offers-eligible-offer--countdown-digit\">{secondDigit}</span>\r\n            </div>\r\n            <div className=\"instant-offers-eligible-offer--countdown-label\">{props.title}</div>\r\n        </span>\r\n    );\r\n}\r\n\r\nexport default EligibleOfferCountdown;\r\n","import * as React from 'react';\r\nimport dayjs from 'dayjs';\r\nimport customParseFormat from 'dayjs/plugin/customParseFormat';\r\nimport duration from 'dayjs/plugin/duration';\r\nimport EligibleOfferCountdown from './EligibleOfferCountdown';\r\nimport { formatSeperatedInteger } from './utils/format';\r\nimport { IInstantOfferDetails } from './InstantOffers';\r\nimport { buildScheduleEligibleOfferLink } from './utils/constants';\r\n\r\ninterface IEligibleOfferProps {\r\n    offerAmount: number;\r\n    expirationDateUtc: string;\r\n    expirationDisplayDate: string;\r\n    offerCode: string;\r\n    storeId: string;\r\n    instantOfferDetails: IInstantOfferDetails;\r\n}\r\n\r\nfunction EligibleOffer(props: IEligibleOfferProps) {\r\n    dayjs.extend(customParseFormat);\r\n    dayjs.extend(duration);\r\n\r\n    const calculateDurationToExpiration = () => {\r\n        return dayjs.duration(Math.max(0, expirationDate.diff(dayjs())));\r\n    };\r\n\r\n    const expirationDate = dayjs(props.expirationDisplayDate || props.expirationDateUtc)\r\n        .hour(23)\r\n        .minute(59)\r\n        .second(59);\r\n    const [durationToExpiration, setDurationToExpiration] = React.useState(calculateDurationToExpiration());\r\n\r\n    React.useEffect(() => {\r\n        const cleanup = () => {\r\n            clearInterval(durationCalcInterval);\r\n        };\r\n\r\n        const durationCalcInterval = setInterval(() => {\r\n            const timeToExpiration = calculateDurationToExpiration();\r\n\r\n            setDurationToExpiration(timeToExpiration);\r\n\r\n            if (timeToExpiration.asSeconds() <= 0) {\r\n                cleanup();\r\n            }\r\n        }, 10000);\r\n\r\n        return cleanup;\r\n    }, []);\r\n\r\n    const isExpired = () => {\r\n        return durationToExpiration.asSeconds() <= 0;\r\n    };\r\n\r\n    const vehicleMakeAndModel = () => {\r\n        return props.instantOfferDetails.vehicleMake && props.instantOfferDetails.vehicleModel\r\n            ? `${props.instantOfferDetails.vehicleMake} ${props.instantOfferDetails.vehicleModel}`\r\n            : 'vehicle';\r\n    };\r\n\r\n    const title = isExpired() ? (\r\n        <h2 className=\"instant-offers-eligible-offer--card-title\">It's time to update your offer</h2>\r\n    ) : (\r\n        <h2 className=\"instant-offers-eligible-offer--card-title\">\r\n            Your ${formatSeperatedInteger(props.offerAmount)}\r\n            &dagger; offer on your {vehicleMakeAndModel()} expires soon\r\n        </h2>\r\n    );\r\n\r\n    return durationToExpiration != null ? (\r\n        <div className=\"instant-offers-eligible-offer\">\r\n            <div className=\"instant-offers-eligible-offer--inner-containers\">\r\n                <div className=\"instant-offers-eligible-offer--countdown\">\r\n                    <EligibleOfferCountdown title=\"Days\" value={durationToExpiration.days()} />\r\n                    <EligibleOfferCountdown title=\"Hours\" value={durationToExpiration.hours()} />\r\n                    <EligibleOfferCountdown title=\"Minutes\" value={durationToExpiration.minutes()} />\r\n                </div>\r\n                {title}\r\n            </div>\r\n\r\n            <div className=\"instant-offers-eligible-offer--btn-container\">\r\n                {isExpired() ? (\r\n                    <hzn-button variant=\"cta\" onClick={() => props.instantOfferDetails.onStartNewOffer()}>\r\n                        Get Started{' '}\r\n                    </hzn-button>\r\n                ) : (\r\n                    <>\r\n                        <hzn-button\r\n                            variant=\"cta\"\r\n                            class=\"instant-offers-eligible-offer--primary-btn\"\r\n                            href={buildScheduleEligibleOfferLink(props.storeId, props.offerCode)}\r\n                            target=\"_blank\"\r\n                            full-width\r\n                        >\r\n                            Set my appointment\r\n                        </hzn-button>\r\n                        <hzn-button\r\n                            variant=\"tertiary\"\r\n                            tone=\"inverse\"\r\n                            class=\"instant-offers-eligible-offer--secondary-btn\"\r\n                            type=\"button\"\r\n                            onClick={() => props.instantOfferDetails.onStartNewOffer()}\r\n                            full-width\r\n                        >\r\n                            Start a new offer\r\n                        </hzn-button>\r\n                    </>\r\n                )}\r\n            </div>\r\n\r\n            <div className=\"instant-offers-eligible-offer--inner-containers instant-offers-eligible-offer--supplemental-info-container\">\r\n                <p className=\"instant-offers-eligible-offer--supplemental-info-copy\">\r\n                    {isExpired() ? (\r\n                        `Your offer expired on ${expirationDate.format('MM/DD/YYYY')}`\r\n                    ) : (\r\n                        <>\r\n                            Valid until {expirationDate.format('MM/DD/YYYY')}\r\n                            <span className=\"instant-offers-eligible-offer--supplemental-info-divider\">|</span> Offer\r\n                            Code: {props.offerCode}\r\n                        </>\r\n                    )}\r\n                </p>\r\n            </div>\r\n        </div>\r\n    ) : null;\r\n}\r\n\r\nexport default EligibleOffer;\r\n","import * as React from 'react';\r\nimport classNames from 'classnames';\r\nimport Icons from '../../utilities/icons';\r\n\r\ninterface IValidatedAreaProps {\r\n    overlayIcon: boolean;\r\n    invalid: boolean;\r\n    validationMessage: string;\r\n    className: string;\r\n    children: React.ReactElement;\r\n}\r\n\r\nfunction ValidatedArea(props: IValidatedAreaProps) {\r\n    return (\r\n        <div\r\n            className={classNames(props.className, {\r\n                invalid: props.invalid,\r\n                overlayIcon: props.overlayIcon,\r\n            })}\r\n        >\r\n            <div className=\"top\">\r\n                <div className=\"questionWrapper\">{props.children}</div>\r\n                {props.invalid && (\r\n                    <div className=\"validationIconOuter\">\r\n                        <div className=\"validationIconInner\">{Icons.IconWarning}</div>\r\n                    </div>\r\n                )}\r\n            </div>\r\n            {props.invalid && (\r\n                <div className=\"mdc-text-field-helper-text validationMessage\">{props.validationMessage}</div>\r\n            )}\r\n        </div>\r\n    );\r\n}\r\n\r\nexport default ValidatedArea;\r\n","import * as React from 'react';\r\nimport classNames from 'classnames';\r\n\r\ninterface ITabBar {\r\n    className: string;\r\n    id: string;\r\n    children: any;\r\n}\r\n\r\nfunction TabBar(props: ITabBar) {\r\n    const { className, id, children } = props;\r\n    const numTabs = React.Children.toArray(children).length;\r\n\r\n    return (\r\n        <div id={id} className={classNames(className, 'tab-bar-container')} role=\"tablist\">\r\n            {React.Children.map(children, (child, index) => React.cloneElement(child, { index, numTabs }))}\r\n        </div>\r\n    );\r\n}\r\n\r\nexport default TabBar;\r\n","import * as React from 'react';\r\n\r\nexport const getTabPanelId = (id: string): string => `${id}-panel`;\r\n\r\ninterface ITabPanelProps {\r\n    /**\r\n     * Class(es) to add to the form field container\r\n     */\r\n    className?: string;\r\n\r\n    /**\r\n     * ID used for the `<input>` and other accessibility concerns\r\n     */\r\n    id: string;\r\n\r\n    /**\r\n     * Content for the button\r\n     */\r\n    children: React.ReactNode;\r\n\r\n    /**\r\n     * Whether this tab is active or not\r\n     */\r\n    active: boolean;\r\n}\r\n\r\nfunction TabPanel(props: ITabPanelProps) {\r\n    const { className, children, id, active } = props;\r\n\r\n    if (!active) {\r\n        return null;\r\n    }\r\n\r\n    return (\r\n        <div id={getTabPanelId(id)} className={className} role=\"tabpanel\" aria-labelledby={id}>\r\n            {children}\r\n        </div>\r\n    );\r\n}\r\n\r\nexport default TabPanel;\r\n","import * as React from 'react';\r\nimport classNames from 'classnames';\r\nimport { getTabPanelId } from './TabPanel';\r\n\r\ninterface ITab {\r\n    className?: string;\r\n    active: boolean;\r\n    disabled?: boolean;\r\n    id: string;\r\n    inputProps?: any;\r\n    children: any;\r\n    index?: number;\r\n    numTabs: number;\r\n    onClick: Function;\r\n    onBlur?: Function;\r\n    onFocus?: Function;\r\n}\r\n\r\nfunction Tab(props: ITab) {\r\n    const {\r\n        className,\r\n        active,\r\n        disabled = false,\r\n        id,\r\n        inputProps,\r\n        onBlur,\r\n        onClick,\r\n        onFocus,\r\n        children,\r\n        index,\r\n        numTabs\r\n    } = props;\r\n\r\n    const buttonId = `button-${id}`;\r\n\r\n    return (\r\n        <button\r\n            className={classNames(className, 'tab-container', {\r\n                active: active,\r\n                first: index === 0,\r\n                last: index === numTabs - 1\r\n            })}\r\n            id={buttonId}\r\n            role=\"tab\"\r\n            aria-selected={active ? 'true' : 'false'}\r\n            aria-controls={getTabPanelId(id)}\r\n            disabled={disabled}\r\n            onClick={onClick}\r\n            onBlur={onBlur}\r\n            onFocus={onFocus}\r\n            {...inputProps}\r\n        >\r\n            <label aria-labelledby={buttonId}>{children}</label>\r\n        </button>\r\n    );\r\n}\r\n\r\nexport default Tab;\r\n","import { formatVin } from './format';\r\n\r\nexport const isValidVin = (value: any) => {\r\n    if (!value || !value.length || value.length != 17) return false;\r\n    value = formatVin(value);\r\n    return getCheckDigit(value) == value.charAt(8);\r\n};\r\n\r\nconst getCheckDigit = (vin: any) => {\r\n    // Override for 2015 Jeep Renegade and 2016 Fiat 500X that have check digit problems\r\n    if (vin.substr(0, 5) === 'ZACCJ' || vin.substr(0, 5) === 'ZFBCF') {\r\n        return vin.charAt(8);\r\n    }\r\n\r\n    const map = '0123456789X';\r\n    const weights = '8765432X098765432';\r\n    let sum = 0;\r\n    for (let i = 0; i < 17; ++i) {\r\n        sum += transliterate(vin.charAt(i)) * map.indexOf(weights.charAt(i));\r\n    }\r\n    return map.charAt(sum % 11);\r\n};\r\n\r\nconst transliterate = (vinChar: any) => {\r\n    return '0123456789.ABCDEFGH..JKLMN.P.R..STUVWXYZ'.indexOf(vinChar) % 10;\r\n};\r\n","export const usaStates = [\r\n    {\r\n        label: 'Alabama',\r\n        value: 'AL',\r\n        hasStore: true,\r\n    },\r\n    {\r\n        label: 'Alaska',\r\n        value: 'AK',\r\n        hasStore: false,\r\n    },\r\n    {\r\n        label: 'Arizona',\r\n        value: 'AZ',\r\n        hasStore: true,\r\n    },\r\n    {\r\n        label: 'Arkansas',\r\n        value: 'AR',\r\n        hasStore: false,\r\n    },\r\n    {\r\n        label: 'California',\r\n        value: 'CA',\r\n        hasStore: true,\r\n    },\r\n    {\r\n        label: 'Colorado',\r\n        value: 'CO',\r\n        hasStore: true,\r\n    },\r\n    {\r\n        label: 'Connecticut',\r\n        value: 'CT',\r\n        hasStore: true,\r\n    },\r\n    {\r\n        label: 'Delaware',\r\n        value: 'DE',\r\n        hasStore: true,\r\n    },\r\n    {\r\n        label: 'D.C.',\r\n        value: 'DC',\r\n        hasStore: false,\r\n    },\r\n    {\r\n        label: 'Florida',\r\n        value: 'FL',\r\n        hasStore: true,\r\n    },\r\n    {\r\n        label: 'Georgia',\r\n        value: 'GA',\r\n        hasStore: true,\r\n    },\r\n    {\r\n        label: 'Hawaii',\r\n        value: 'HI',\r\n        hasStore: false,\r\n    },\r\n    {\r\n        label: 'Idaho',\r\n        value: 'ID',\r\n        hasStore: true,\r\n    },\r\n    {\r\n        label: 'Illinois',\r\n        value: 'IL',\r\n        hasStore: true,\r\n    },\r\n    {\r\n        label: 'Indiana',\r\n        value: 'IN',\r\n        hasStore: true,\r\n    },\r\n    {\r\n        label: 'Iowa',\r\n        value: 'IA',\r\n        hasStore: true,\r\n    },\r\n    {\r\n        label: 'Kansas',\r\n        value: 'KS',\r\n        hasStore: true,\r\n    },\r\n    {\r\n        label: 'Kentucky',\r\n        value: 'KY',\r\n        hasStore: true,\r\n    },\r\n    {\r\n        label: 'Louisiana',\r\n        value: 'LA',\r\n        hasStore: true,\r\n    },\r\n    {\r\n        label: 'Maine',\r\n        value: 'ME',\r\n        hasStore: true,\r\n    },\r\n    {\r\n        label: 'Maryland',\r\n        value: 'MD',\r\n        hasStore: true,\r\n    },\r\n    {\r\n        label: 'Massachusetts',\r\n        value: 'MA',\r\n        hasStore: true,\r\n    },\r\n    {\r\n        label: 'Michigan',\r\n        value: 'MI',\r\n        hasStore: true,\r\n    },\r\n    {\r\n        label: 'Minnesota',\r\n        value: 'MN',\r\n        hasStore: true,\r\n    },\r\n    {\r\n        label: 'Mississippi',\r\n        value: 'MS',\r\n        hasStore: true,\r\n    },\r\n    {\r\n        label: 'Missouri',\r\n        value: 'MO',\r\n        hasStore: true,\r\n    },\r\n    {\r\n        label: 'Montana',\r\n        value: 'MT',\r\n        hasStore: false,\r\n    },\r\n    {\r\n        label: 'Nebraska',\r\n        value: 'NE',\r\n        hasStore: true,\r\n    },\r\n    {\r\n        label: 'Nevada',\r\n        value: 'NV',\r\n        hasStore: true,\r\n    },\r\n    {\r\n        label: 'New Hampshire',\r\n        value: 'NH',\r\n        hasStore: true,\r\n    },\r\n    {\r\n        label: 'New Jersey',\r\n        value: 'NJ',\r\n        hasStore: true,\r\n    },\r\n    {\r\n        label: 'New Mexico',\r\n        value: 'NM',\r\n        hasStore: true,\r\n    },\r\n    {\r\n        label: 'New York',\r\n        value: 'NY',\r\n        hasStore: true,\r\n    },\r\n    {\r\n        label: 'North Carolina',\r\n        value: 'NC',\r\n        hasStore: true,\r\n    },\r\n    {\r\n        label: 'North Dakota',\r\n        value: 'ND',\r\n        hasStore: false,\r\n    },\r\n    {\r\n        label: 'Ohio',\r\n        value: 'OH',\r\n        hasStore: true,\r\n    },\r\n    {\r\n        label: 'Oklahoma',\r\n        value: 'OK',\r\n        hasStore: true,\r\n    },\r\n    {\r\n        label: 'Oregon',\r\n        value: 'OR',\r\n        hasStore: true,\r\n    },\r\n    {\r\n        label: 'Pennsylvania',\r\n        value: 'PA',\r\n        hasStore: true,\r\n    },\r\n    {\r\n        label: 'Rhode Island',\r\n        value: 'RI',\r\n        hasStore: true,\r\n    },\r\n    {\r\n        label: 'South Carolina',\r\n        value: 'SC',\r\n        hasStore: true,\r\n    },\r\n    {\r\n        label: 'South Dakota',\r\n        value: 'SD',\r\n        hasStore: false,\r\n    },\r\n    {\r\n        label: 'Tennessee',\r\n        value: 'TN',\r\n        hasStore: true,\r\n    },\r\n    {\r\n        label: 'Texas',\r\n        value: 'TX',\r\n        hasStore: true,\r\n    },\r\n    {\r\n        label: 'Utah',\r\n        value: 'UT',\r\n        hasStore: true,\r\n    },\r\n    {\r\n        label: 'Vermont',\r\n        value: 'VT',\r\n        hasStore: false,\r\n    },\r\n    {\r\n        label: 'Virginia',\r\n        value: 'VA',\r\n        hasStore: true,\r\n    },\r\n    {\r\n        label: 'Washington',\r\n        value: 'WA',\r\n        hasStore: true,\r\n    },\r\n    {\r\n        label: 'West Virginia',\r\n        value: 'WV',\r\n        hasStore: false,\r\n    },\r\n    {\r\n        label: 'Wisconsin',\r\n        value: 'WI',\r\n        hasStore: true,\r\n    },\r\n    {\r\n        label: 'Wyoming',\r\n        value: 'WY',\r\n        hasStore: false,\r\n    },\r\n];\r\n","import * as React from 'react';\r\nimport { TextField } from '../TextField/TextField';\r\nimport ValidatedArea from './ValidatedArea';\r\nimport MDCSelect from '../MDCSelect';\r\nimport TabBar from './TabBar';\r\nimport Tab from './Tab';\r\nimport classNames from 'classnames';\r\nimport { isValidVin } from './utils/vinValidator';\r\nimport { formatVin } from './utils/format';\r\nimport { usaStates } from './utils/lookups';\r\nimport { IInstantOffersFormData } from './InstantOffersContainer';\r\nimport TabPanel from './TabPanel';\r\nimport { ANALYTICS_CONSTANTS, trackEDDL } from '../../utilities/analytics';\r\nimport '../TextField/TextField.scss';\r\n\r\ninterface IInstantOffersFormProps {\r\n    readonly?: boolean;\r\n    hasInvalidLicensePlate: boolean;\r\n    onSubmit: (event: any, formData: IInstantOffersFormData) => any;\r\n}\r\n\r\nconst tabState = { PLATE: 0, VIN: 1 };\r\n\r\nconst TAB_PLATE_ID = 'LicensePlate';\r\nconst TAB_VIN_ID = 'VIN';\r\n\r\nexport default function InstantOffersForm(props: IInstantOffersFormProps) {\r\n    const initialPlate = '',\r\n        initialState = '',\r\n        initialZipCode = '';\r\n\r\n    const [vin, setVin] = React.useState('');\r\n    const [state, setState] = React.useState(initialState);\r\n    const [plate, setPlate] = React.useState(initialPlate);\r\n    const [zipCode, setZipCode] = React.useState(initialZipCode);\r\n\r\n    const [vinError, setVinError] = React.useState('');\r\n    const [stateError, setStateError] = React.useState('');\r\n    const [plateError, setPlateError] = React.useState('');\r\n    const [zipCodeError, setZipCodeError] = React.useState('');\r\n    const [showInvalidLicensePlateMessage, setShowInvalidLicensePlateMessage] = React.useState(\r\n        props.hasInvalidLicensePlate\r\n    );\r\n\r\n    const [isValid, setIsValid] = React.useState(false);\r\n    const [activeTab, setActiveTab] = React.useState(tabState.PLATE);\r\n\r\n    React.useEffect(() => {\r\n        if (\r\n            zipCode &&\r\n            zipCode.length == 5 &&\r\n            ((activeTab === tabState.PLATE && state && plate && /[^0-9a-zA-Z]*/.test(plate)) ||\r\n                (activeTab === tabState.VIN && vin && vin.length == 17 && isValidVin(vin)))\r\n        )\r\n            setIsValid(true);\r\n        else setIsValid(false);\r\n    }, [vin, state, plate, zipCode, activeTab]);\r\n\r\n    React.useEffect(() => {\r\n        if (plate != null && plate != '' && plate.replace(/[^0-9a-zA-Z]*/, '').length <= 0)\r\n            setPlateError('License plate must be entered');\r\n        else setPlateError('');\r\n    }, [plate, state]);\r\n\r\n    React.useEffect(() => {\r\n        if (state == null) setStateError('Please make a selection above');\r\n        else setStateError('');\r\n    }, [state, plate]);\r\n\r\n    React.useEffect(() => {\r\n        if (props.hasInvalidLicensePlate) {\r\n            setPlateError(' ');\r\n            setStateError(' ');\r\n            setIsValid(false);\r\n        }\r\n    }, [props.hasInvalidLicensePlate]);\r\n\r\n    const zipValid = () => {\r\n        if (zipCode === null || zipCode.length === 0) setZipCodeError('ZIP code must be entered');\r\n        else if (zipCode.length > 0 && zipCode.length != 5) setZipCodeError('ZIP code must be 5 digits');\r\n        else setZipCodeError('');\r\n    };\r\n\r\n    const vinValid = () => {\r\n        if (vin.length != 17) setVinError('VIN must be a 17 character Vehicle Identification Number');\r\n        else if (!isValidVin(vin))\r\n            setVinError(\r\n                'VIN must be a valid Vehicle Identification Number. Please check that you have entered the VIN correctly.'\r\n            );\r\n        else setVinError('');\r\n    };\r\n\r\n    const zipInput = (\r\n        <div\r\n            className={classNames('input-field input-field--zip', {\r\n                ['collapsed-input']: activeTab === tabState.PLATE,\r\n            })}\r\n        >\r\n            <TextField\r\n                label=\"What's your zip code?\"\r\n                onChange={(e: React.ChangeEvent<HTMLInputElement>) => setZipCode(e.target.value.replace(/[^0-9]/, ''))}\r\n                value={zipCode}\r\n                disabled={props.readonly}\r\n                helperText={zipCodeError ? zipCodeError : 'ZIP code must be 5 digits'}\r\n                maxLength={5}\r\n                type=\"tel\"\r\n                id=\"ico-form-zipcode\"\r\n                onBlur={zipValid}\r\n                name=\"zipcode\"\r\n            />\r\n        </div>\r\n    );\r\n\r\n    const plateInput = (\r\n        <TabPanel id={TAB_PLATE_ID} active={activeTab === tabState.PLATE}>\r\n            <div className=\"input-field input-field--plate \">\r\n                <TextField\r\n                    label=\"License plate number\"\r\n                    value={plate}\r\n                    onChange={(e: React.ChangeEvent<HTMLInputElement>) =>\r\n                        setPlate(e.target.value.replace(/[^0-9a-zA-Z \\\\-]/, ''))\r\n                    }\r\n                    maxLength={10}\r\n                    helperText={plateError ? plateError : 'License Plate must be entered'}\r\n                    id=\"ico-form-plate\"\r\n                    name=\"plate\"\r\n                />\r\n            </div>\r\n            <ValidatedArea\r\n                className=\"select-input input-field collapsedInput\"\r\n                overlayIcon={true}\r\n                invalid={stateError ? true : false}\r\n                validationMessage=\" \"\r\n            >\r\n                <MDCSelect\r\n                    id=\"ico-state-select\"\r\n                    options={usaStates}\r\n                    value={state}\r\n                    noInitialValue={true}\r\n                    onChange={(e: any) => setState(e.target.value)}\r\n                    label=\"Where's your car registered?\"\r\n                />\r\n            </ValidatedArea>\r\n            {showInvalidLicensePlateMessage && (\r\n                <hzn-global-alert content=\" We could not find this license plate.\"></hzn-global-alert>\r\n            )}\r\n            {zipInput}\r\n        </TabPanel>\r\n    );\r\n\r\n    const vinInput = (\r\n        <TabPanel id={TAB_VIN_ID} active={activeTab === tabState.VIN}>\r\n            <div className=\"input-field input-field--vin\">\r\n                <TextField\r\n                    label=\"VIN\"\r\n                    value={vin}\r\n                    onChange={(e: React.ChangeEvent<HTMLInputElement>) => {\r\n                        setVin(formatVin(e.target.value));\r\n                    }}\r\n                    maxLength={17}\r\n                    helperText={vinError ? vinError : 'VIN must be a 17 character Vehicle Identification Number'}\r\n                    id=\"ico-form-vin\"\r\n                    name=\"vin\"\r\n                    onBlur={vinValid}\r\n                />\r\n            </div>\r\n            <div className=\"vin-zip-input\">{zipInput}</div>\r\n        </TabPanel>\r\n    );\r\n\r\n    const renderInput = () => {\r\n        switch (activeTab) {\r\n            case tabState.PLATE:\r\n                return plateInput;\r\n            case tabState.VIN:\r\n                return vinInput;\r\n            default:\r\n                return plateInput;\r\n        }\r\n    };\r\n\r\n    return (\r\n        <>\r\n            <h2 className=\"instant-offers__form__content__pre-heading\">Sell/Trade in</h2>\r\n            <h3 className=\"instant-offers__form__content__heading\">\r\n                Real offers, <br /> really fast\r\n            </h3>\r\n            <TabBar className=\"tabBar\" id=\"ICO: Vehicle Profile\">\r\n                <Tab\r\n                    id={TAB_PLATE_ID}\r\n                    onClick={() => {\r\n                        // Analytics\r\n                        trackEDDL({\r\n                            event: ANALYTICS_CONSTANTS.EVENTS.CLICK.CTA,\r\n                            linkDetails: {\r\n                                name: 'License Plate',\r\n                                position: 'Homepage',\r\n                            },\r\n                        });\r\n                        // Set tab\r\n                        setActiveTab(tabState.PLATE);\r\n                    }}\r\n                    active={activeTab === tabState.PLATE}\r\n                    numTabs={1}\r\n                >\r\n                    License Plate\r\n                </Tab>\r\n                <Tab\r\n                    numTabs={1}\r\n                    id={TAB_VIN_ID}\r\n                    onClick={() => {\r\n                        // Analytics\r\n                        trackEDDL({\r\n                            event: ANALYTICS_CONSTANTS.EVENTS.CLICK.CTA,\r\n                            linkDetails: {\r\n                                name: 'VIN',\r\n                                position: 'Homepage',\r\n                            },\r\n                        });\r\n                        // Set tab\r\n                        setActiveTab(tabState.VIN);\r\n                    }}\r\n                    active={activeTab === tabState.VIN}\r\n                >\r\n                    VIN\r\n                </Tab>\r\n            </TabBar>\r\n            <form\r\n                onSubmit={(e) => {\r\n                    // Analytics\r\n                    trackEDDL({\r\n                        event: ANALYTICS_CONSTANTS.EVENTS.CLICK.CTA,\r\n                        linkDetails: {\r\n                            name: 'Get Started',\r\n                            position: 'Homepage',\r\n                        },\r\n                    });\r\n\r\n                    let type: IInstantOffersFormData['type'];\r\n                    if (vin && activeTab === tabState.VIN) {\r\n                        type = 'VIN';\r\n                    } else if (plate && activeTab === tabState.PLATE) {\r\n                        type = 'PLATE';\r\n                    } else {\r\n                        // unexpected form state\r\n                        return;\r\n                    }\r\n\r\n                    props.onSubmit(e, {\r\n                        isValid: isValid,\r\n                        type: type,\r\n                        state: state,\r\n                        zipCode: zipCode,\r\n                        vin: vin,\r\n                        plate: plate,\r\n                    });\r\n                }}\r\n                className=\"inputs\"\r\n            >\r\n                {renderInput()}\r\n\r\n                <hzn-button class=\"submit-button\" variant=\"cta\" type=\"submit\" disabled={!isValid || undefined}>\r\n                    Get Started\r\n                </hzn-button>\r\n                <small className=\"instant-offers__form__content__disclaimer\">\r\n                    Most qualify. Some we&apos;ll ask to verify in-person.\r\n                </small>\r\n            </form>\r\n        </>\r\n    );\r\n}\r\n","import { useState, useEffect, RefObject } from 'react';\r\n\r\nexport const useIntersectionObserver = (ref: RefObject<HTMLElement>, threshold: number) => {\r\n    const [isIntersecting, setIsIntersecting] = useState<boolean>(false);\r\n\r\n    useEffect(() => {\r\n        const element = ref.current;\r\n\r\n        const observer = new IntersectionObserver(\r\n            (entries: IntersectionObserverEntry[]) => {\r\n                const entry = entries[0];\r\n                setIsIntersecting(entry.isIntersecting);\r\n            },\r\n            {\r\n                threshold: threshold,\r\n            }\r\n        );\r\n\r\n        if (element) {\r\n            observer.observe(element);\r\n        }\r\n\r\n        return () => {\r\n            if (element) {\r\n                observer.unobserve(element);\r\n            }\r\n        };\r\n    }, [ref, threshold]);\r\n\r\n    return isIntersecting;\r\n};\r\n","import { useEffect, useRef, ReactNode } from 'react';\r\nimport { useIntersectionObserver } from '../../utilities/hooks';\r\nimport './CoverSection.scss';\r\n\r\ntype Props = {\r\n    bgImageUrl: string;\r\n    children: ReactNode;\r\n};\r\n\r\nconst CoverSection = ({ bgImageUrl, children }: Props) => {\r\n    const coverSectionRef = useRef<HTMLDivElement>(null);\r\n    const isIntersecting = useIntersectionObserver(coverSectionRef, 0);\r\n\r\n    useEffect(() => {\r\n        if (isIntersecting) {\r\n            coverSectionRef.current?.classList.add('cover-section--active');\r\n        }\r\n    }, [isIntersecting]);\r\n\r\n    useEffect(() => {\r\n        if (coverSectionRef.current) {\r\n            coverSectionRef.current.style.backgroundImage = `url(${bgImageUrl})`;\r\n        }\r\n    }, [bgImageUrl]);\r\n\r\n    return (\r\n        <div ref={coverSectionRef} className=\"cover-section\">\r\n            <div className=\"cover-section--children-container\">{children}</div>\r\n        </div>\r\n    );\r\n};\r\n\r\nexport default CoverSection;\r\n","import EligibleOffer from './EligibleOffer';\r\nimport IneligibleOffer from './IneligibleOffer';\r\nimport InstantOffersForm from './InstantOffersForm';\r\nimport { IInstantOffersFormData } from './InstantOffersContainer';\r\nimport classNames from 'classnames';\r\nimport CoverSection from '../CoverSection/CoverSection';\r\n\r\nexport interface IInstantOfferDetails {\r\n    onStartNewOffer: Function;\r\n    vehicleMake?: string;\r\n    vehicleModel?: string;\r\n}\r\n\r\ninterface IInstantOffersProps {\r\n    savedOffer: any;\r\n    hasInvalidLicensePlate: boolean;\r\n    hasSavedEligibleOffer: boolean;\r\n    hasSavedIneligibleOffer: boolean;\r\n    onSubmit: (event: any, formData: IInstantOffersFormData) => any;\r\n    instantOfferDetails: IInstantOfferDetails;\r\n}\r\n\r\nconst InstantOffers = (props: IInstantOffersProps) => {\r\n    const instantOffersCard = props.hasSavedEligibleOffer ? (\r\n        <EligibleOffer\r\n            offerAmount={props.savedOffer.offerAmount}\r\n            expirationDateUtc={props.savedOffer.expirationDateUtc}\r\n            expirationDisplayDate={props.savedOffer.expirationDisplayDate || props.savedOffer.expirationDateUtc}\r\n            offerCode={props.savedOffer.offerCode}\r\n            storeId={props.savedOffer.storeId}\r\n            instantOfferDetails={props.instantOfferDetails}\r\n        />\r\n    ) : props.hasSavedIneligibleOffer ? (\r\n        <IneligibleOffer instantOfferDetails={props.instantOfferDetails} />\r\n    ) : (\r\n        <InstantOffersForm hasInvalidLicensePlate={props.hasInvalidLicensePlate} onSubmit={props.onSubmit} />\r\n    );\r\n\r\n    return (\r\n        <CoverSection bgImageUrl=\"/home/images/home/instant-offers/io-xl.jpg\">\r\n            <hzn-card\r\n                elevation=\"medium\"\r\n                border-radius=\"large\"\r\n                padding=\"none\"\r\n                tone={props.hasSavedEligibleOffer ? 'brand' : 'neutral'}\r\n                class=\"instant-offers__form\"\r\n            >\r\n                <div\r\n                    id=\"instantOffersContentContainer\"\r\n                    className={classNames('instant-offers__form__content', {\r\n                        ['eligible']: props.hasSavedEligibleOffer,\r\n                    })}\r\n                >\r\n                    {instantOffersCard}\r\n                </div>\r\n            </hzn-card>\r\n        </CoverSection>\r\n    );\r\n};\r\n\r\nexport default InstantOffers;\r\n","import Cookies from 'js-cookie';\r\n\r\ninterface IVehicleInformation {\r\n    vin: any;\r\n    mileage: any;\r\n    profile: {\r\n        year: any;\r\n        make: any;\r\n        model: any;\r\n        trim: any;\r\n        makeCode: any;\r\n        modelCode: any;\r\n        trimCode: any;\r\n    };\r\n}\r\n\r\nexport interface IEligibleOfferLocalStorage {\r\n    offerAmount: any;\r\n    offerCode: any;\r\n    expirationDateUtc: any;\r\n    expirationDisplayDate: any;\r\n    storeId: any;\r\n    vehicleInformation: IVehicleInformation;\r\n}\r\n\r\nexport interface IIneligibleOfferLocalStorage {\r\n    expirationDateUtc: any;\r\n    expirationDisplayDate: any;\r\n    make?: any;\r\n    model?: any;\r\n}\r\n\r\nconst eligibleOfferLocalStorageKey = 'suycIcoOffer';\r\nconst ineligibleOfferLocalStorageKey = 'suycIcoOfferIneligible';\r\nconst ineligibleOfferExpiration = 86400000;\r\n\r\nexport const removeEligibleOfferFromStorage = () => {\r\n    localStorage.removeItem(eligibleOfferLocalStorageKey);\r\n    Cookies.remove(eligibleOfferLocalStorageKey);\r\n};\r\n\r\nexport const getEligibleOfferFromStorage = (): IEligibleOfferLocalStorage | null => {\r\n    try {\r\n        let serializedEligibleOffer = Cookies.get(eligibleOfferLocalStorageKey);\r\n        if (!serializedEligibleOffer) {\r\n            serializedEligibleOffer = localStorage.getItem(eligibleOfferLocalStorageKey) as string;\r\n        }\r\n\r\n        if (serializedEligibleOffer) {\r\n            const eligibleOfferLocalStorage: IEligibleOfferLocalStorage = JSON.parse(serializedEligibleOffer);\r\n            const dateString = eligibleOfferLocalStorage.expirationDisplayDate as string;\r\n            const dateStringUtc = eligibleOfferLocalStorage.expirationDateUtc as string;\r\n            const eligibleOfferDate = new Date(dateString || dateStringUtc);\r\n\r\n            if (!eligibleOfferDate || (eligibleOfferDate && eligibleOfferDate.getTime() < new Date().getTime())) {\r\n                removeEligibleOfferFromStorage();\r\n            } else {\r\n                return eligibleOfferLocalStorage;\r\n            }\r\n        }\r\n        return null;\r\n    } catch (ex) {\r\n        console.error('Error retrieving saved eligible offer');\r\n        return null;\r\n    }\r\n};\r\n\r\nexport const setEligibleOfferToStorage = (message: any): IEligibleOfferLocalStorage | null => {\r\n    try {\r\n        const newOffer = {\r\n            offerAmount: message.detail.offerAmount,\r\n            offerCode: message.detail.offerCode,\r\n            expirationDateUtc: message.detail.expirationDateUtc,\r\n            expirationDisplayDate: message.detail.expirationDisplayDate,\r\n            storeId: message.detail.storeId,\r\n            vehicleInformation: {\r\n                vin: message.detail.vehicleInformation.vin,\r\n                mileage: message.detail.vehicleInformation.mileage,\r\n                profile: {\r\n                    year: message.detail.vehicleInformation.profile.year,\r\n                    make: message.detail.vehicleInformation.profile.make,\r\n                    model: message.detail.vehicleInformation.profile.model,\r\n                    trim: message.detail.vehicleInformation.profile.trim,\r\n                    makeCode: message.detail.vehicleInformation.profile.makeCode,\r\n                    modelCode: message.detail.vehicleInformation.profile.modelCode,\r\n                    trimCode: message.detail.vehicleInformation.profile.trimCode,\r\n                },\r\n            },\r\n            zipCode: message.detail.zipCode,\r\n        };\r\n        localStorage.setItem(eligibleOfferLocalStorageKey, JSON.stringify(newOffer));\r\n        Cookies.set(eligibleOfferLocalStorageKey, JSON.stringify(newOffer));\r\n        return newOffer;\r\n    } catch (ex) {\r\n        console.error('Unable to save eligible offer to local storage', ex);\r\n        return null;\r\n    }\r\n};\r\n\r\nexport const removeIneligibleOfferFromStorage = () => {\r\n    localStorage.removeItem(ineligibleOfferLocalStorageKey);\r\n    Cookies.remove(ineligibleOfferLocalStorageKey);\r\n};\r\n\r\nexport const getIneligibleOfferFromStorage = (): IIneligibleOfferLocalStorage | null => {\r\n    try {\r\n        let serializedIneligibleOffer = Cookies.get(ineligibleOfferLocalStorageKey);\r\n        if (!serializedIneligibleOffer) {\r\n            serializedIneligibleOffer = localStorage.getItem(ineligibleOfferLocalStorageKey) as string;\r\n        }\r\n\r\n        if (serializedIneligibleOffer) {\r\n            const ineligibleOfferLocalStorage: IIneligibleOfferLocalStorage = JSON.parse(serializedIneligibleOffer);\r\n            const dateString = ineligibleOfferLocalStorage.expirationDisplayDate as string;\r\n            const dateStringUtc = ineligibleOfferLocalStorage.expirationDateUtc as string;\r\n            const ineligibleOfferDate = new Date(dateString || dateStringUtc);\r\n\r\n            if (!ineligibleOfferDate || (ineligibleOfferDate && ineligibleOfferDate.getTime() < new Date().getTime())) {\r\n                removeIneligibleOfferFromStorage();\r\n            } else {\r\n                return ineligibleOfferLocalStorage;\r\n            }\r\n        }\r\n        return null;\r\n    } catch (ex) {\r\n        console.error('Error retrieving saved ineligible offer');\r\n        return null;\r\n    }\r\n};\r\n\r\nexport const setIneligibleOfferToStorage = (make?: string, model?: string): IIneligibleOfferLocalStorage | null => {\r\n    try {\r\n        const newOffer = {\r\n            expirationDateUtc: new Date().getTime() + ineligibleOfferExpiration,\r\n            expirationDisplayDate: new Date().getTime() + ineligibleOfferExpiration,\r\n            make: make,\r\n            model: model,\r\n        };\r\n        localStorage.setItem(ineligibleOfferLocalStorageKey, JSON.stringify(newOffer));\r\n        Cookies.set(ineligibleOfferLocalStorageKey, JSON.stringify(newOffer));\r\n        return newOffer;\r\n    } catch (ex) {\r\n        console.error('Unable to save ineligible offer to local storage', ex);\r\n        return null;\r\n    }\r\n};\r\n","import * as React from 'react';\r\nimport * as ReactDOM from 'react-dom';\r\nimport InstantOffersFullScreenDialog from './InstantOffersFullScreenDialog';\r\nimport InstantOffersDisclaimer from './InstantOffersDisclaimer';\r\nimport InstantOffers from './InstantOffers';\r\nimport * as analytics from '../../utilities/analytics';\r\nimport { getInstantOffersToken } from '../../api/instant-offers-api';\r\nimport {\r\n    instantOffersContainerId,\r\n    buildInstantOfferConfig,\r\n    instantOfferEligibleEvent,\r\n    instantOfferIneligibleEvent,\r\n    instantOfferIneligibleAnalyticsEvent,\r\n    instantOfferStartedEvent,\r\n    instantOfferZipCodeDecodeErrorEvent,\r\n} from './utils/constants';\r\nimport {\r\n    removeEligibleOfferFromStorage,\r\n    getEligibleOfferFromStorage,\r\n    setIneligibleOfferToStorage,\r\n    getIneligibleOfferFromStorage,\r\n    IEligibleOfferLocalStorage,\r\n    IIneligibleOfferLocalStorage,\r\n} from './utils/instantOffersStorage';\r\nimport { ITrackingPayload } from '../../types/analytics';\r\n\r\ninterface IInstantOffersContainerProps {}\r\n\r\ninterface IInstantOffersContainerState {\r\n    isIneligibleOpen: boolean;\r\n    isIcoLoading: boolean;\r\n    isIcoDialogOpen: boolean;\r\n    isIcoEligible: boolean;\r\n    hasInvalidLicensePlate: boolean;\r\n    savedEligibleOffer: IEligibleOfferLocalStorage | null;\r\n    savedIneligibleOffer: IIneligibleOfferLocalStorage | null;\r\n    vehicleMake?: string;\r\n    vehicleModel?: string;\r\n}\r\n\r\nexport interface IInstantOffersFormData {\r\n    isValid: boolean;\r\n    type: 'VIN' | 'PLATE';\r\n    state: string;\r\n    zipCode: string;\r\n    vin: string;\r\n    plate: string;\r\n}\r\n\r\nexport default class InstantOffersContainer extends React.Component<\r\n    IInstantOffersContainerProps,\r\n    IInstantOffersContainerState\r\n> {\r\n    constructor(props: any) {\r\n        super(props);\r\n\r\n        const savedEligibleOffer = getEligibleOfferFromStorage(),\r\n            savedIneligibleOffer = getIneligibleOfferFromStorage();\r\n\r\n        this.state = {\r\n            isIneligibleOpen: false,\r\n            isIcoLoading: true,\r\n            isIcoDialogOpen: false,\r\n            isIcoEligible: false,\r\n            hasInvalidLicensePlate: false,\r\n            savedEligibleOffer: savedEligibleOffer,\r\n            savedIneligibleOffer: savedIneligibleOffer,\r\n            vehicleMake: savedIneligibleOffer && savedIneligibleOffer.make ? savedIneligibleOffer.make : '',\r\n            vehicleModel: savedIneligibleOffer && savedIneligibleOffer.model ? savedIneligibleOffer.model : '',\r\n        };\r\n\r\n        this.handleIcoDialogClose = this.handleIcoDialogClose.bind(this);\r\n        this.handleStartNewOffer = this.handleStartNewOffer.bind(this);\r\n        this.handleSubmit = this.handleSubmit.bind(this);\r\n        this.checkEligibilityAndLaunch = this.checkEligibilityAndLaunch.bind(this);\r\n        this.handleSubmit = this.handleSubmit.bind(this);\r\n        this.handleEligibility = this.handleEligibility.bind(this);\r\n        this.handleIneligibility = this.handleIneligibility.bind(this);\r\n        this.handleStarted = this.handleStarted.bind(this);\r\n    }\r\n\r\n    private handleIcoDialogClose() {\r\n        this.setState({ isIcoDialogOpen: false }, () => {\r\n            if ((window as any).InstantCashOffers != null) {\r\n                (window as any).InstantCashOffers.cancel(instantOffersContainerId);\r\n            }\r\n        });\r\n    }\r\n\r\n    private handleEligibility(message: any) {\r\n        const newOffer = getEligibleOfferFromStorage();\r\n        if (newOffer) {\r\n            this.setState({\r\n                savedIneligibleOffer: null,\r\n                savedEligibleOffer: newOffer,\r\n            });\r\n        }\r\n    }\r\n\r\n    private handleIneligibility(newState?: any) {\r\n        removeEligibleOfferFromStorage();\r\n        const savedIneligibleOffer = setIneligibleOfferToStorage();\r\n\r\n        const nextState = newState ? newState : {};\r\n        nextState.savedIneligibleOffer = savedIneligibleOffer;\r\n        nextState.isIcoEligible = false;\r\n        nextState.savedEligibleOffer = null;\r\n        nextState.isIcoLoading = false;\r\n\r\n        this.setState(nextState, () => {\r\n            const event = 'pageState';\r\n            const payload: ITrackingPayload = {\r\n                event: event,\r\n                pageState: {\r\n                    pageState: 'Instant-Cash-Offer_Ineligible',\r\n                },\r\n            };\r\n            analytics.trackEDDL(payload);\r\n        });\r\n    }\r\n\r\n    private handleStarted() {\r\n        this.setState({\r\n            isIcoLoading: false,\r\n        });\r\n    }\r\n\r\n    private checkEligibilityAndLaunch(decodeResponse: any, zipCode: string, type: IInstantOffersFormData['type']) {\r\n        if (!decodeResponse || !decodeResponse.profile) {\r\n            this.handleIneligibility({\r\n                isIcoLoading: false,\r\n                hasInvalidLicensePlate: true,\r\n            });\r\n        } else {\r\n            (window as any).InstantCashOffers.getEligibility(\r\n                decodeResponse.profile.make,\r\n                decodeResponse.profile.model,\r\n                decodeResponse.profile.year,\r\n                decodeResponse.vin,\r\n                zipCode\r\n            ).then((isEligible: any) => {\r\n                if (isEligible) {\r\n                    decodeResponse.zipcode = zipCode;\r\n\r\n                    this.setState(\r\n                        {\r\n                            isIcoEligible: true,\r\n                            vehicleMake: decodeResponse.profile.make,\r\n                            vehicleModel: decodeResponse.profile.model,\r\n                        },\r\n                        () => {\r\n                            (window as any).InstantCashOffers.initialize(buildInstantOfferConfig(decodeResponse, type));\r\n                        }\r\n                    );\r\n                } else {\r\n                    this.handleIneligibility({\r\n                        isIcoLoading: false,\r\n                        vehicleMake: decodeResponse.profile.make,\r\n                        vehicleModel: decodeResponse.profile.model,\r\n                    });\r\n                }\r\n            });\r\n        }\r\n    }\r\n\r\n    private handleSubmit(event: any, formData: IInstantOffersFormData) {\r\n        event.preventDefault();\r\n\r\n        if (formData.isValid) {\r\n            this.setState(\r\n                {\r\n                    isIcoLoading: true,\r\n                    isIcoDialogOpen: true,\r\n                },\r\n                () => {\r\n                    if (formData.type === 'VIN') {\r\n                        (window as any).InstantCashOffers.decodeVin(formData.vin, function () {\r\n                            return getInstantOffersToken();\r\n                        })\r\n                            .then((resp: any) => this.checkEligibilityAndLaunch(resp, formData.zipCode, formData.type))\r\n                            .catch(() => {\r\n                                this.handleIneligibility({\r\n                                    isIcoLoading: false,\r\n                                    hasInvalidLicensePlate: true,\r\n                                });\r\n                            });\r\n                    } else if (formData.type === 'PLATE') {\r\n                        (window as any).InstantCashOffers.decodePlate(formData.plate, formData.state, function () {\r\n                            return getInstantOffersToken();\r\n                        })\r\n                            .then((resp: any) => this.checkEligibilityAndLaunch(resp, formData.zipCode, formData.type))\r\n                            .catch(() => {\r\n                                this.handleIneligibility({\r\n                                    isIcoLoading: false,\r\n                                    hasInvalidLicensePlate: true,\r\n                                });\r\n                            });\r\n                    }\r\n                }\r\n            );\r\n        }\r\n    }\r\n\r\n    private handleStartNewOffer() {\r\n        if ((window as any).InstantCashOffers) {\r\n            if (this.state.isIcoDialogOpen) {\r\n                (window as any).InstantCashOffers.cancel(instantOffersContainerId);\r\n            }\r\n\r\n            this.setState(\r\n                {\r\n                    isIcoEligible: true,\r\n                    isIcoDialogOpen: true,\r\n                    isIcoLoading: false,\r\n                },\r\n                () => {\r\n                    (window as any).InstantCashOffers.initialize(buildInstantOfferConfig());\r\n                }\r\n            );\r\n        }\r\n    }\r\n\r\n    public componentDidMount() {\r\n        (window as any).addEventListener(instantOfferIneligibleEvent, () => this.handleIneligibility());\r\n        (window as any).addEventListener(instantOfferEligibleEvent, this.handleEligibility);\r\n        (window as any).addEventListener(instantOfferStartedEvent, this.handleStarted);\r\n        (window as any).addEventListener(instantOfferZipCodeDecodeErrorEvent, () => this.handleIneligibility());\r\n    }\r\n\r\n    public componentWillUnmount() {\r\n        (window as any).removeEventListener(instantOfferIneligibleEvent, () => this.handleIneligibility());\r\n        (window as any).removeEventListener(instantOfferEligibleEvent, this.handleEligibility);\r\n        (window as any).removeEventListener(instantOfferStartedEvent, this.handleStarted);\r\n        (window as any).removeEventListener(instantOfferZipCodeDecodeErrorEvent, () => this.handleIneligibility());\r\n    }\r\n\r\n    public render(): React.ReactNode {\r\n        return (\r\n            <>\r\n                <div data-fs-section=\"HP: Instant Offers\" id=\"io-featured-story-telling-section\">\r\n                    <div className=\"ico-container\">\r\n                        <InstantOffers\r\n                            savedOffer={this.state.savedEligibleOffer}\r\n                            hasInvalidLicensePlate={this.state.hasInvalidLicensePlate}\r\n                            onSubmit={this.handleSubmit}\r\n                            hasSavedEligibleOffer={this.state.savedEligibleOffer ? true : false}\r\n                            hasSavedIneligibleOffer={this.state.savedIneligibleOffer ? true : false}\r\n                            instantOfferDetails={{\r\n                                vehicleMake:\r\n                                    this.state.vehicleMake === ''\r\n                                        ? this.state.savedEligibleOffer?.vehicleInformation?.profile?.make\r\n                                        : '',\r\n                                vehicleModel:\r\n                                    this.state.vehicleModel === ''\r\n                                        ? this.state.savedEligibleOffer?.vehicleInformation?.profile?.model\r\n                                        : '',\r\n                                onStartNewOffer: this.handleStartNewOffer,\r\n                            }}\r\n                        />\r\n                    </div>\r\n                </div>\r\n                {ReactDOM.createPortal(\r\n                    <InstantOffersFullScreenDialog\r\n                        isOpen={this.state.isIcoDialogOpen}\r\n                        isLoading={this.state.isIcoLoading}\r\n                        onClose={this.handleIcoDialogClose}\r\n                        isInstantOffersEligible={this.state.isIcoEligible}\r\n                        instantOfferDetails={{\r\n                            vehicleMake: this.state.vehicleMake,\r\n                            vehicleModel: this.state.vehicleModel,\r\n                            onStartNewOffer: this.handleStartNewOffer,\r\n                        }}\r\n                    />,\r\n                    document.getElementById('InstantOffersFullScreenDialogNode')!\r\n                )}\r\n                {this.state.savedEligibleOffer && <InstantOffersDisclaimer />}\r\n            </>\r\n        );\r\n    }\r\n}\r\n","import * as React from 'react';\r\nimport InstantOffersContainer from './InstantOffersContainer';\r\nimport { loadInstantOffersComponentAssets } from './utils/loadInstantOffersComponentAssets';\r\n\r\ninterface IInstantOffersSectionProps {}\r\n\r\ninterface IInstantOffersSectionState {\r\n    styleLoaded: boolean;\r\n    scriptLoaded: boolean;\r\n}\r\n\r\nexport default class InstantOffersSection extends React.Component<\r\n    IInstantOffersSectionProps,\r\n    IInstantOffersSectionState\r\n> {\r\n    constructor(props: any) {\r\n        super(props);\r\n\r\n        this.state = {\r\n            styleLoaded: false,\r\n            scriptLoaded: false,\r\n        };\r\n    }\r\n\r\n    public componentDidMount() {\r\n        loadInstantOffersComponentAssets(\r\n            () => {\r\n                this.setState({\r\n                    scriptLoaded: true,\r\n                });\r\n            },\r\n            () => {\r\n                this.setState({\r\n                    styleLoaded: true,\r\n                });\r\n            }\r\n        );\r\n    }\r\n\r\n    public render(): React.ReactNode {\r\n        return this.state.scriptLoaded && this.state.styleLoaded && <InstantOffersContainer />;\r\n    }\r\n}\r\n","export const loadInstantOffersComponentAssets = (scriptLoadedCallback: () => any, styleLoadedCallback: () => any) => {\r\n    const instantOffersCSSDataEl = document.querySelector('[data-appraisals-css-src]') as any;\r\n    const instantOffersJSDataEl = document.querySelector('[data-appraisals-js-src]') as any;\r\n    const instantOffersCSSSrc = instantOffersCSSDataEl.getAttribute('data-appraisals-css-src');\r\n    const instantOffersJSSrc = instantOffersJSDataEl.getAttribute('data-appraisals-js-src');\r\n\r\n    const linkEl = document.createElement('link');\r\n    linkEl.setAttribute('rel', 'stylesheet');\r\n    linkEl.setAttribute('type', 'text/css');\r\n    linkEl.setAttribute('href', instantOffersCSSSrc);\r\n\r\n    const scriptEl = document.createElement('script');\r\n    scriptEl.setAttribute('type', 'text/javascript');\r\n    scriptEl.setAttribute('src', instantOffersJSSrc);\r\n\r\n    document.getElementsByTagName('head')[0].appendChild(linkEl);\r\n    document.getElementsByTagName('head')[0].appendChild(scriptEl);\r\n\r\n    if (scriptLoadedCallback && typeof scriptLoadedCallback === 'function') {\r\n        scriptEl.onload = () => scriptLoadedCallback();\r\n    }\r\n\r\n    if (styleLoadedCallback && typeof styleLoadedCallback === 'function') {\r\n        linkEl.onload = () => styleLoadedCallback();\r\n    }\r\n};\r\n","import * as React from 'react';\r\nimport LazyLoad from 'react-lazyload';\r\nimport InstantOffersSection from './InstantOffersSection';\r\n\r\ninterface IInstantOffersLoaderProps {}\r\n\r\ninterface IInstantOffersLoaderState {}\r\n\r\nexport default class InstantOffersLoader extends React.Component<IInstantOffersLoaderProps, IInstantOffersLoaderState> {\r\n    constructor(props: IInstantOffersLoaderProps) {\r\n        super(props);\r\n    }\r\n\r\n    public render(): React.ReactNode {\r\n        return (\r\n            <LazyLoad offset={[250, 250]} height={window.innerHeight}>\r\n                <InstantOffersSection />\r\n            </LazyLoad>\r\n        );\r\n    }\r\n}\r\n","import * as React from 'react';\r\nimport classNames from 'classnames';\r\nimport initCarousel from '../carousel/index';\r\nimport { TinySliderInstance, TinySliderInfo } from 'tiny-slider/src/tiny-slider';\r\n\r\ninterface ICarouselProps {\r\n    itemsLoaded: boolean;\r\n    itemCount: number;\r\n    children: React.ReactElement[];\r\n    name: string;\r\n    nextFocus: string;\r\n    onIndexChanged?: () => void;\r\n}\r\n\r\ninterface ICarouselState {\r\n    index: number;\r\n    slideBy: number;\r\n    slideCount: number;\r\n    showNextButton: boolean;\r\n    showPrevButton: boolean;\r\n}\r\n\r\ninterface INextPrevHoverData {\r\n    slideIsHovered: boolean;\r\n    nextButtonIsHovered: boolean;\r\n    prevButtonIsHovered: boolean;\r\n    slideIndex: number;\r\n    el: any;\r\n}\r\n\r\nconst SLIDE_GUTTER_WIDTH = 8;\r\n\r\nclass Carousel extends React.Component<ICarouselProps, ICarouselState> {\r\n    constructor(props: any) {\r\n        super(props);\r\n\r\n        this.state = {\r\n            index: 0,\r\n            slideBy: 0,\r\n            slideCount: 0,\r\n            showNextButton: false,\r\n            showPrevButton: false,\r\n        };\r\n\r\n        this.handleIndexChanged = this.handleIndexChanged.bind(this);\r\n        this.initTinySlider = this.initTinySlider.bind(this);\r\n    }\r\n\r\n    private _tinySlider?: TinySliderInstance;\r\n    private _removeEventHandlers?: () => void;\r\n\r\n    private handleIndexChanged(info: TinySliderInfo) {\r\n        this.setState({ index: info.index, slideBy: info.slideBy, slideCount: info.slideCount });\r\n    }\r\n\r\n    private showSlideNavButton(hoverEvent: INextPrevHoverData): void {\r\n        const firstVisibleTileIndex = this.state.index;\r\n        const targetClientRects = hoverEvent.el.getBoundingClientRect();\r\n\r\n        function firstSlideIsHovered() {\r\n            return hoverEvent.slideIsHovered && hoverEvent.slideIndex <= firstVisibleTileIndex;\r\n        }\r\n\r\n        function lastSlideIsHovered() {\r\n            const EXTRA_THRESHOLD = 80;\r\n            const vehicleTileLocationPlusExtraThreshold =\r\n                targetClientRects.x + targetClientRects.width + (SLIDE_GUTTER_WIDTH + EXTRA_THRESHOLD);\r\n            return targetClientRects.x < window.innerWidth && vehicleTileLocationPlusExtraThreshold > window.innerWidth;\r\n        }\r\n\r\n        this.setState({\r\n            showNextButton: lastSlideIsHovered() || hoverEvent.nextButtonIsHovered ? true : false,\r\n            showPrevButton: firstSlideIsHovered() || hoverEvent.prevButtonIsHovered ? true : false,\r\n        });\r\n    }\r\n\r\n    private hideSlideNavButton(): void {\r\n        if (this.state.showNextButton === true || this.state.showPrevButton === true) {\r\n            this.setState({\r\n                showNextButton: false,\r\n                showPrevButton: false,\r\n            });\r\n        }\r\n    }\r\n\r\n    private makeSentenceCase(name: string): string {\r\n        const sentence = name.toLowerCase().split('-');\r\n        let titleCase = '';\r\n        for (let i = 0; i < sentence.length; i++) {\r\n            sentence[i] = sentence[i][0].charAt(0).toUpperCase() + sentence[i].slice(1);\r\n            titleCase += sentence[i] + ' ';\r\n        }\r\n        return titleCase;\r\n    }\r\n\r\n    private initTinySlider(): void {\r\n        const { name, nextFocus, onIndexChanged } = this.props;\r\n        const { tinySlider, removeEventHandlers } = initCarousel({\r\n            nextFocus,\r\n            container: `#${name}-carousel-slides`,\r\n            fixedWidth: 270,\r\n            gutter: SLIDE_GUTTER_WIDTH,\r\n            nextButton: `#${name}-carousel__next`,\r\n            prevButton: `#${name}-carousel__prev`,\r\n            prevFocus: `#pre-${name}-carousel`,\r\n            responsive: {\r\n                768: {\r\n                    gutter: 24,\r\n                },\r\n            },\r\n        });\r\n        this._tinySlider = tinySlider;\r\n        this._removeEventHandlers = removeEventHandlers;\r\n\r\n        if (this._tinySlider && onIndexChanged) {\r\n            this._tinySlider.events.on('indexChanged', this.handleIndexChanged);\r\n        }\r\n    }\r\n\r\n    public render(): React.ReactNode {\r\n        const { children, name, nextFocus } = this.props;\r\n        const { showNextButton, showPrevButton } = this.state;\r\n        const skipText = this.makeSentenceCase(name);\r\n\r\n        return (\r\n            <>\r\n                <a id={`pre-${name}-carousel`} className=\"skip-link\" href={nextFocus}>\r\n                    Skip {skipText} Carousel\r\n                </a>\r\n                <div\r\n                    className={classNames('carousel max-width--xl', {\r\n                        ['scrollable']: showPrevButton && showNextButton,\r\n                    })}\r\n                >\r\n                    <div\r\n                        id={`${name}-carousel-slides`}\r\n                        className={classNames('carousel__slides', {\r\n                            ['carousel-slides__centered']: children.length < 5,\r\n                        })}\r\n                        data-carousel-length={React.Children.count(children)}\r\n                    >\r\n                        {React.Children.map(children, (child: React.ReactChild, index: number) => (\r\n                            <div\r\n                                className=\"carousel__slide\"\r\n                                data-is-current-slide={this.state.index === index ? true : false}\r\n                                key={`${index}-slide`}\r\n                                onMouseEnter={(event: any) =>\r\n                                    this.showSlideNavButton({\r\n                                        slideIsHovered: true,\r\n                                        nextButtonIsHovered: false,\r\n                                        prevButtonIsHovered: false,\r\n                                        slideIndex: index,\r\n                                        el: event.target,\r\n                                    })\r\n                                }\r\n                                onMouseLeave={() => this.hideSlideNavButton()}\r\n                            >\r\n                                {child}\r\n                            </div>\r\n                        ))}\r\n                    </div>\r\n                </div>\r\n                <div className={`${name}-button-container`}>\r\n                    <button\r\n                        id={`${name}-carousel__prev`}\r\n                        className={classNames('carousel__prev', {\r\n                            'carousel-prev-button__hidden': !showPrevButton,\r\n                        })}\r\n                        onMouseEnter={(event: any) =>\r\n                            this.showSlideNavButton({\r\n                                slideIsHovered: false,\r\n                                nextButtonIsHovered: false,\r\n                                prevButtonIsHovered: true,\r\n                                slideIndex: this.state.index,\r\n                                el: event.target,\r\n                            })\r\n                        }\r\n                        onMouseLeave={() => this.hideSlideNavButton()}\r\n                        tabIndex={-1}\r\n                    >\r\n                        <span className=\"visually-hidden\">Previous Slide</span>\r\n                        <svg viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\r\n                            <path d=\"M15.41 16.09l-4.58-4.59 4.58-4.59L14 5.5l-6 6 6 6z\" />\r\n                            <path d=\"M0-.5h24v24H0z\" fill=\"none\" />\r\n                        </svg>\r\n                    </button>\r\n                    <button\r\n                        id={`${name}-carousel__next`}\r\n                        className={classNames('carousel__next', {\r\n                            'carousel-next-button__hidden': !showNextButton,\r\n                        })}\r\n                        onMouseEnter={(event: any) =>\r\n                            this.showSlideNavButton({\r\n                                slideIsHovered: false,\r\n                                nextButtonIsHovered: true,\r\n                                prevButtonIsHovered: false,\r\n                                slideIndex: this.state.index,\r\n                                el: event.target,\r\n                            })\r\n                        }\r\n                        onMouseLeave={() => this.hideSlideNavButton()}\r\n                        tabIndex={-1}\r\n                    >\r\n                        <span className=\"visually-hidden\">Next Slide</span>\r\n                        <svg viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\r\n                            <path d=\"M8.59 16.34l4.58-4.59-4.58-4.59L10 5.75l6 6-6 6z\" />\r\n                            <path d=\"M0-.25h24v24H0z\" fill=\"none\" />\r\n                        </svg>\r\n                    </button>\r\n                </div>\r\n            </>\r\n        );\r\n    }\r\n\r\n    // Bowler - Not sure this function is needed anymore. I don't notice a\r\n    // difference when I comment out both the init and refresh function calls.\r\n    public componentDidUpdate(prevProps: any, prevState: any) {\r\n        if (this.props.itemsLoaded && this._tinySlider && prevProps.itemCount !== this.props.itemCount) {\r\n            this.initTinySlider();\r\n        } else if (this._tinySlider && prevProps.children !== this.props.children) {\r\n            this._tinySlider.refresh();\r\n        } else {\r\n        }\r\n    }\r\n\r\n    public componentDidMount(): void {\r\n        this.initTinySlider();\r\n    }\r\n\r\n    public componentWillUnmount(): void {\r\n        if (this._tinySlider) this._tinySlider.destroy();\r\n        if (this._removeEventHandlers) this._removeEventHandlers();\r\n    }\r\n}\r\n\r\nexport default Carousel;\r\n","import { ContentResponse } from '../../../api/types/content-api'\r\n\r\nexport interface ISocialProofPost {\r\n    horizDirection: 'rtl' | 'ltr';\r\n    vertDirection: 'align-top' | 'align-bottom' | '';\r\n    validPost: boolean;\r\n}\r\n\r\nexport interface ISocialProofPosts {\r\n    allIds: string[];\r\n    byId: { [key: string]: ISocialProofPost };\r\n}\r\n\r\nexport const buildSocialProofPosts = (carouselResponse: ContentResponse): ISocialProofPosts => {\r\n    const socialProofPosts: ISocialProofPosts = {\r\n        allIds: carouselResponse.allPosts,\r\n        byId: buildSocialProofPostsById(carouselResponse.allPosts, carouselResponse.portraitLeft, carouselResponse.portraitRight, carouselResponse.landscapeLeft, carouselResponse.landscapeTop, carouselResponse.landscapeBottom)\r\n    }\r\n    return socialProofPosts;\r\n};\r\n\r\nexport const buildSocialProofPostsById = (ids: string[], portraitAlignLeftPosts: string[], portraitAlignRightPosts: string[], landscapeLTRPosts: string[], landscapeAlignTopPosts: string[], landscapeAlignBottomPosts: string[]): ISocialProofPosts['byId'] => {\r\n    const socialProofPostsById: ISocialProofPosts['byId'] = {};\r\n    ids.forEach(id => {\r\n        socialProofPostsById[id] = {\r\n            horizDirection: landscapeLTRPosts.indexOf(id) > -1 ? 'ltr' : 'rtl',\r\n            vertDirection:\r\n                landscapeAlignTopPosts.indexOf(id) > -1 || portraitAlignRightPosts.indexOf(id) > -1\r\n                    ? 'align-top'\r\n                    : landscapeAlignBottomPosts.indexOf(id) > -1 || portraitAlignLeftPosts.indexOf(id) > -1\r\n                        ? 'align-bottom'\r\n                        : '',\r\n            validPost: false,\r\n        };\r\n    });\r\n    return socialProofPostsById;\r\n};\r\n","import * as React from 'react';\r\nimport classNames from 'classnames';\r\nimport { ISocialProofApiPost } from '../../../api/social-proof-api';\r\nimport { ISocialProofPost } from './SocialProofPostBuilder';\r\nimport Icons from '../../../utilities/icons';\r\n\r\nexport interface ISocialProofCardProps extends ISocialProofPost, ISocialProofApiPost {\r\n    itemIndex: number;\r\n    onLoad: (id: string) => void;\r\n    onError: (id: string) => void;\r\n}\r\n\r\ninterface ISocialProofCardState {\r\n    hasLoaded: boolean;\r\n}\r\n\r\nexport class SocialProofCard extends React.Component<ISocialProofCardProps, ISocialProofCardState> {\r\n    constructor(props: ISocialProofCardProps) {\r\n        super(props);\r\n\r\n        this.state = {\r\n            hasLoaded: false,\r\n        };\r\n    }\r\n\r\n    public render(): React.ReactNode {\r\n        const { thumbnailUrl, authorName, imgAlt } = this.props;\r\n\r\n        return (\r\n            <article\r\n                className={classNames(this.props.horizDirection, 'social-proof-card cta')}\r\n                data-index={this.props.itemIndex}\r\n                // TODO figure out why we have this set with a tab index on an article\r\n                // eslint-disable-next-line jsx-a11y/no-noninteractive-tabindex\r\n                tabIndex={0}\r\n            >\r\n                <img\r\n                    loading=\"lazy\"\r\n                    onError={(e) => {\r\n                        this.props.onError(this.props.postId);\r\n                    }}\r\n                    className={classNames('social-proof-card--img')}\r\n                    src={thumbnailUrl}\r\n                    alt={imgAlt}\r\n                />\r\n                <div className=\"social-proof-card--label\">\r\n                    {Icons.instagram}\r\n                    <div className=\"social-proof-card--label-author\">@{authorName}</div>\r\n                </div>\r\n            </article>\r\n        );\r\n    }\r\n}\r\n","import { useEffect, useRef, ReactNode } from 'react';\r\nimport { useIntersectionObserver } from '../../utilities/hooks';\r\nimport './FadeInOnScroll.scss';\r\n\r\ntype Props = {\r\n    children: ReactNode;\r\n};\r\n\r\nexport const FadeInOnScroll = ({ children }: Props) => {\r\n    const wrapper = useRef<HTMLDivElement>(null);\r\n    const isIntersecting = useIntersectionObserver(wrapper, 0);\r\n\r\n    useEffect(() => {\r\n        if (isIntersecting) {\r\n            wrapper.current?.classList.add('fadein-on-scroll--active');\r\n        }\r\n    }, [isIntersecting]);\r\n\r\n    return (\r\n        <div ref={wrapper} className=\"fadein-on-scroll\">\r\n            {children}\r\n        </div>\r\n    );\r\n};\r\n","import { useEffect, useState } from 'react';\r\nimport { ISocialProofApiPost } from '../../../../api/social-proof-api';\r\nimport Icons from '../../../../utilities/icons';\r\nimport './social-proof-modal.scss';\r\n\r\ninterface ISocialProofModalProps {\r\n    isVisible: boolean;\r\n    card: Pick<ISocialProofApiPost, 'permaLink' | 'thumbnailUrl' | 'imgAlt' | 'authorName'>;\r\n    onClose: () => void;\r\n}\r\n\r\nexport const SocialProofModal = ({ isVisible, card, onClose }: ISocialProofModalProps) => {\r\n    const [visibleCssClass, setVisibleCssClass] = useState('');\r\n\r\n    useEffect(() => {\r\n        let timeoutId = undefined;\r\n        if (isVisible) {\r\n            // To show the entrance animation, we need to wait for the component to get mounted\r\n            timeoutId = setTimeout(() => {\r\n                setVisibleCssClass('visible');\r\n            }, 10);\r\n        }\r\n        return () => {\r\n            clearTimeout(timeoutId);\r\n        };\r\n    }, [isVisible]);\r\n\r\n    const handleOnClose = () => {\r\n        // To show the exit animation, we need to wait for the animation to complete before unmounting the component.\r\n        // 250ms matches the exit animation duration in the CSS\r\n        setVisibleCssClass('');\r\n        setTimeout(() => {\r\n            onClose();\r\n        }, 250);\r\n    };\r\n\r\n    if (!isVisible) return <></>;\r\n\r\n    return (\r\n        isVisible && (\r\n            <div className={`social-proof-modal ${visibleCssClass}`}>\r\n                <div className=\"social-proof-modal-content\">\r\n                    <div className=\"social-proof-modal-header\">\r\n                        <button type=\"button\" onClick={handleOnClose} className=\"social-proof-modal--close\">\r\n                            {Icons.close}\r\n                        </button>\r\n                    </div>\r\n                    <a\r\n                        className=\"social-proof-modal-background\"\r\n                        href={card.permaLink}\r\n                        target=\"_blank\"\r\n                        rel=\"noopener noreferrer\"\r\n                    >\r\n                        <img src={card.thumbnailUrl} alt={card.imgAlt} />\r\n                    </a>\r\n                    <div className=\"social-proof-modal-footer\">\r\n                        {Icons.instagram}\r\n                        <a href={card.permaLink} target=\"_blank\" rel=\"noopener noreferrer\">\r\n                            @{card.authorName}\r\n                        </a>\r\n                    </div>\r\n                </div>\r\n                <div className=\"social-proof-modal-backdrop\" aria-hidden=\"true\" onClick={handleOnClose}></div>\r\n            </div>\r\n        )\r\n    );\r\n};\r\n","import * as React from 'react';\r\nimport Carousel from './Carousel';\r\nimport LoadingSpinner from '../../loading-spinner';\r\nimport { getSocialProofPosts, ISocialProofApiPost } from '../../../api/social-proof-api';\r\nimport { buildSocialProofPosts, ISocialProofPosts } from './SocialProofPostBuilder';\r\nimport { ISocialProofCardProps, SocialProofCard } from './SocialProofCard';\r\nimport * as analytics from '../../../utilities/analytics';\r\nimport { getSocialProofCarousel } from '../../../api/content-service-api';\r\nimport { FadeInOnScroll } from '../../transitions/FadeInOnScroll';\r\nimport { ITrackingPayload } from '../../../types/analytics';\r\nimport { ANALYTICS_CONSTANTS } from '../../../utilities/analytics';\r\nimport { SocialProofModal } from './SocialProofModal/SocialProofModal';\r\n\r\ninterface ISocialProofProps {\r\n    fullStoryPageId: string;\r\n    nextFocus: string;\r\n}\r\n\r\ninterface ISocialProofState {\r\n    isLoading: boolean;\r\n    dialogOpen: boolean;\r\n    dialogPostId: string;\r\n    socialProofCardsLoaded: boolean;\r\n    socialProofCardErrorList: string[];\r\n    socialProofCards: {\r\n        allIds: string[];\r\n        byId: {\r\n            [id: string]: ISocialProofCardProps;\r\n        };\r\n    };\r\n}\r\n\r\nclass SocialProof extends React.Component<ISocialProofProps, ISocialProofState> {\r\n    private _socialProofCardsLoadedCounter: number;\r\n    private _socialProofCardErrorList: string[];\r\n\r\n    constructor(props: ISocialProofProps) {\r\n        super(props);\r\n\r\n        this.state = {\r\n            dialogOpen: false,\r\n            dialogPostId: '',\r\n            socialProofCardsLoaded: false,\r\n            socialProofCardErrorList: [],\r\n            isLoading: false,\r\n            socialProofCards: { allIds: [], byId: {} },\r\n        };\r\n\r\n        this._socialProofCardsLoadedCounter = 0;\r\n        this._socialProofCardErrorList = [];\r\n        this._handleSocialProofCardLoad = this._handleSocialProofCardLoad.bind(this);\r\n        this._handleSocialProofCardError = this._handleSocialProofCardError.bind(this);\r\n    }\r\n\r\n    public componentDidMount(): void {\r\n        this._loadSocialProofData();\r\n    }\r\n\r\n    public render(): React.ReactNode {\r\n        const { isLoading, dialogPostId, dialogOpen, socialProofCards } = this.state;\r\n\r\n        if (\r\n            (!isLoading && socialProofCards.allIds.length === 0) ||\r\n            socialProofCards.allIds.length === this.state.socialProofCardErrorList.length\r\n        ) {\r\n            return null;\r\n        }\r\n\r\n        if (isLoading) {\r\n            return <LoadingSpinner height={'384px'} />;\r\n        } else {\r\n            return (\r\n                <div data-fs-section={`${this.props.fullStoryPageId}: Social Proof`}>\r\n                    <h2 className=\"social-proof--heading\">\r\n                        A hassle-free{' '}\r\n                        <span className=\"desktop-hidden tablet-hidden\">\r\n                            <br />\r\n                        </span>{' '}\r\n                        kind of happy\r\n                        <a\r\n                            href=\"https://www.instagram.com/explore/tags/showyourbow/\"\r\n                            target=\"_blank\"\r\n                            className=\"social-proof--heading-hash-tag\"\r\n                            rel=\"noreferrer\"\r\n                        >\r\n                            #ShowYourBow\r\n                        </a>\r\n                    </h2>\r\n                    {this._renderCarousel()}\r\n                    <SocialProofModal\r\n                        isVisible={dialogOpen}\r\n                        card={this.state.socialProofCards.byId[dialogPostId]}\r\n                        onClose={() => this.setState({ dialogOpen: false })}\r\n                    />\r\n                </div>\r\n            );\r\n        }\r\n    }\r\n\r\n    private _loadSocialProofData = (): void => {\r\n        this.setState({ isLoading: true }, () => {\r\n            getSocialProofCarousel().then((socialProofCarousel) => {\r\n                const socialProofPosts = buildSocialProofPosts(socialProofCarousel);\r\n\r\n                if (socialProofPosts.allIds.length == 0) {\r\n                    this.setState({ isLoading: false });\r\n                } else {\r\n                    getSocialProofPosts(socialProofPosts.allIds).then((posts) => {\r\n                        const socialProofCardsState = this._buildSocialProofCardsState(posts, socialProofPosts);\r\n                        this.setState({ isLoading: false, socialProofCards: socialProofCardsState });\r\n                    });\r\n                }\r\n            });\r\n        });\r\n    };\r\n\r\n    private _buildSocialProofCardsState(\r\n        posts: ISocialProofApiPost[],\r\n        socialProofPosts: ISocialProofPosts\r\n    ): ISocialProofState['socialProofCards'] {\r\n        const SocialProofCardState = this.state.socialProofCards;\r\n        SocialProofCardState.allIds = socialProofPosts.allIds;\r\n\r\n        posts.forEach((post) => {\r\n            SocialProofCardState.byId[post.postId] = post as ISocialProofCardProps;\r\n            SocialProofCardState.byId[post.postId].validPost = true;\r\n            SocialProofCardState.byId[post.postId].horizDirection = socialProofPosts.byId[post.postId].horizDirection;\r\n            SocialProofCardState.byId[post.postId].vertDirection = socialProofPosts.byId[post.postId].vertDirection;\r\n        });\r\n\r\n        return SocialProofCardState;\r\n    }\r\n\r\n    private _handleSocialProofCardLoad(id: string) {\r\n        this._socialProofCardsLoadedCounter++;\r\n\r\n        if (this._socialProofCardsLoadedCounter === this.state.socialProofCards.allIds.length) {\r\n            this.setState({ socialProofCardsLoaded: true, socialProofCardErrorList: this._socialProofCardErrorList });\r\n        }\r\n    }\r\n\r\n    private _handleSocialProofCardError(id: string) {\r\n        this._socialProofCardsLoadedCounter++;\r\n        this._socialProofCardErrorList.push(id);\r\n\r\n        if (this._socialProofCardsLoadedCounter === this.state.socialProofCards.allIds.length) {\r\n            this.setState({ socialProofCardsLoaded: true, socialProofCardErrorList: this._socialProofCardErrorList });\r\n        }\r\n    }\r\n\r\n    private _renderCarousel() {\r\n        const validSocialProofIds: string[] = [];\r\n\r\n        this.state.socialProofCards.allIds.forEach((id) => {\r\n            if (this.state.socialProofCards.byId[id]) {\r\n                if (\r\n                    this.state.socialProofCards.allIds.indexOf(id) > -1 &&\r\n                    this.state.socialProofCardErrorList.indexOf(id) === -1 &&\r\n                    this.state.socialProofCards.byId[id].validPost\r\n                ) {\r\n                    validSocialProofIds.push(id);\r\n                }\r\n            }\r\n        });\r\n\r\n        return (\r\n            <FadeInOnScroll>\r\n                <Carousel\r\n                    itemsLoaded={this.state.socialProofCardsLoaded}\r\n                    itemCount={validSocialProofIds.length}\r\n                    name=\"social-proof\"\r\n                    nextFocus={this.props.nextFocus}\r\n                    onIndexChanged={() => {\r\n                        const name = 'IG Social Proof Slide View';\r\n                        const event = ANALYTICS_CONSTANTS.EVENTS.CLICK.CTA;\r\n                        const payload: ITrackingPayload = {\r\n                            event: event,\r\n                            linkDetails: {\r\n                                name: name,\r\n                            },\r\n                        };\r\n                        analytics.trackEDDL(payload);\r\n                    }}\r\n                >\r\n                    {validSocialProofIds.map((id: string, index: number) => (\r\n                        <div\r\n                            onClick={(e) => {\r\n                                e.preventDefault();\r\n                                this.setState({\r\n                                    dialogOpen: true,\r\n                                    dialogPostId: id,\r\n                                });\r\n                                const name = 'IG Social Proof Open Dialog';\r\n                                const event = ANALYTICS_CONSTANTS.EVENTS.CLICK.CTA;\r\n                                const payload: ITrackingPayload = {\r\n                                    event: event,\r\n                                    linkDetails: {\r\n                                        name: name,\r\n                                    },\r\n                                };\r\n                                analytics.trackEDDL(payload);\r\n                            }}\r\n                            key={id}\r\n                        >\r\n                            <SocialProofCard\r\n                                {...this.state.socialProofCards.byId[id]}\r\n                                onLoad={this._handleSocialProofCardLoad}\r\n                                onError={this._handleSocialProofCardError}\r\n                                itemIndex={index}\r\n                            />\r\n                        </div>\r\n                    ))}\r\n                </Carousel>\r\n            </FadeInOnScroll>\r\n        );\r\n    }\r\n}\r\n\r\nexport default SocialProof;\r\n","import axios from 'axios';\r\n\r\ninterface ISocialProofApiResponse {\r\n    data: {\r\n        data: {\r\n            post_id: string;\r\n            thumbnail_url: string;\r\n            thumbnail_height: string;\r\n            thumbnail_width: string;\r\n            author_name: string;\r\n            img_alt: string;\r\n            perma_link: string;\r\n        }[];\r\n    };\r\n}\r\n\r\nexport interface ISocialProofApiPost {\r\n    postId: string;\r\n    thumbnailUrl: string;\r\n    thumbnailHeight: string;\r\n    thumbnailWidth: string;\r\n    authorName: string;\r\n    imgAlt: string;\r\n    permaLink: string;\r\n}\r\n\r\nexport function buildPostIdQueryParams(ids: readonly string[]) {\r\n    const duplicateIds = ids.slice();\r\n    duplicateIds.sort();\r\n    return duplicateIds.reduce(\r\n        (acc: any, id: string, currentIndex: number) => `${acc}${currentIndex > 0 ? '&' : ''}id=${id}`,\r\n        ''\r\n    );\r\n}\r\n\r\nexport function getSocialProofPosts(ids: string[]): Promise<ISocialProofApiPost[] | []> {\r\n    try {\r\n        const postIdQueryParams = buildPostIdQueryParams(ids);\r\n        return axios\r\n            .get(`/home/api/socialproof?${postIdQueryParams}`)\r\n            .then((response: ISocialProofApiResponse) => {\r\n                if (response.data && response.data.data) {\r\n                    const camelCaseData: ISocialProofApiPost[] = response.data.data.map(post => {\r\n                        return {\r\n                            postId: post.post_id,\r\n                            thumbnailUrl: post.thumbnail_url,\r\n                            thumbnailHeight: post.thumbnail_height,\r\n                            thumbnailWidth: post.thumbnail_width,\r\n                            authorName: post.author_name,\r\n                            imgAlt: post.img_alt,\r\n                            permaLink: post.perma_link,\r\n                        };\r\n                    });\r\n                    return camelCaseData;\r\n                }\r\n\r\n                return [];\r\n            })\r\n            .catch(() => []);\r\n    } catch (e) {\r\n        return Promise.resolve([]);\r\n    }\r\n}\r\n","import SocialProof from './SocialProof';\r\n\r\ninterface ISocialProofContainerProps {\r\n    fullStoryPageId: string;\r\n    nextFocus: string;\r\n}\r\n\r\nfunction SocialProofContainer(props: ISocialProofContainerProps) {\r\n    return (\r\n        <>\r\n            <SocialProof fullStoryPageId={props.fullStoryPageId} nextFocus={props.nextFocus} />\r\n        </>\r\n    );\r\n}\r\n\r\nexport default SocialProofContainer;\r\n","import * as React from 'react';\r\nimport classNames from 'classnames';\r\nimport initCarousel from '../carousel/index';\r\nimport { TinySliderInstance, TinySliderInfo } from 'tiny-slider/src/tiny-slider';\r\n\r\ninterface ICarouselProps {\r\n    children: React.ReactElement[];\r\n    name: string;\r\n    nextFocus: string;\r\n    onIndexChanged?: () => void;\r\n}\r\n\r\ninterface ICarouselState {\r\n    index: number;\r\n    slideBy: number;\r\n    slideCount: number;\r\n    showNextButton: boolean;\r\n    showPrevButton: boolean;\r\n}\r\n\r\ninterface INextPrevHoverData {\r\n    slideIsHovered: boolean;\r\n    nextButtonIsHovered: boolean;\r\n    prevButtonIsHovered: boolean;\r\n    slideIndex: number;\r\n    el: any;\r\n}\r\n\r\nconst SLIDE_GUTTER_WIDTH = 8;\r\n\r\nclass Carousel extends React.Component<ICarouselProps, ICarouselState> {\r\n    constructor(props: any) {\r\n        super(props);\r\n\r\n        this.state = {\r\n            index: 0,\r\n            slideBy: 0,\r\n            slideCount: 0,\r\n            showNextButton: false,\r\n            showPrevButton: false,\r\n        };\r\n\r\n        this.handleIndexChanged = this.handleIndexChanged.bind(this);\r\n        this.initTinySlider = this.initTinySlider.bind(this);\r\n    }\r\n\r\n    private _tinySlider?: TinySliderInstance;\r\n    private _removeEventHandlers?: () => void;\r\n\r\n    private handleIndexChanged(info: TinySliderInfo) {\r\n        this.setState({ index: info.index, slideBy: info.slideBy, slideCount: info.slideCount });\r\n    }\r\n\r\n    private showSlideNavButton(hoverEvent: INextPrevHoverData): void {\r\n        const firstVisibleTileIndex = this.state.index;\r\n        const targetClientRects = hoverEvent.el.getBoundingClientRect();\r\n\r\n        function firstSlideIsHovered() {\r\n            return hoverEvent.slideIsHovered && hoverEvent.slideIndex <= firstVisibleTileIndex;\r\n        }\r\n\r\n        function lastSlideIsHovered() {\r\n            const EXTRA_THRESHOLD = 80;\r\n            const vehicleTileLocationPlusExtraThreshold =\r\n                targetClientRects.x + targetClientRects.width + (SLIDE_GUTTER_WIDTH + EXTRA_THRESHOLD);\r\n            return targetClientRects.x < window.innerWidth && vehicleTileLocationPlusExtraThreshold > window.innerWidth;\r\n        }\r\n\r\n        this.setState({\r\n            showNextButton: lastSlideIsHovered() || hoverEvent.nextButtonIsHovered ? true : false,\r\n            showPrevButton: firstSlideIsHovered() || hoverEvent.prevButtonIsHovered ? true : false,\r\n        });\r\n    }\r\n\r\n    private hideSlideNavButton(): void {\r\n        if (this.state.showNextButton === true || this.state.showPrevButton === true) {\r\n            this.setState({\r\n                showNextButton: false,\r\n                showPrevButton: false,\r\n            });\r\n        }\r\n    }\r\n\r\n    private makeSentenceCase(name: string): string {\r\n        const sentence = name.toLowerCase().split('-');\r\n        let titleCase = '';\r\n        for (let i = 0; i < sentence.length; i++) {\r\n            sentence[i] = sentence[i][0].charAt(0).toUpperCase() + sentence[i].slice(1);\r\n            titleCase += sentence[i] + ' ';\r\n        }\r\n        return titleCase;\r\n    }\r\n\r\n    private initTinySlider(): void {\r\n        const { name, nextFocus, onIndexChanged } = this.props;\r\n        const { tinySlider, removeEventHandlers } = initCarousel({\r\n            nextFocus,\r\n            container: `#${name}-carousel-slides`,\r\n            fixedWidth: 270,\r\n            gutter: SLIDE_GUTTER_WIDTH,\r\n            nextButton: `#${name}-carousel__next`,\r\n            prevButton: `#${name}-carousel__prev`,\r\n            prevFocus: `#pre-${name}-carousel`,\r\n            responsive: {\r\n                768: {\r\n                    gutter: 24,\r\n                },\r\n            },\r\n        });\r\n        this._tinySlider = tinySlider;\r\n        this._removeEventHandlers = removeEventHandlers;\r\n\r\n        if (this._tinySlider && onIndexChanged) {\r\n            this._tinySlider.events.on('indexChanged', this.handleIndexChanged);\r\n        }\r\n    }\r\n\r\n    public render(): React.ReactNode {\r\n        const { children, name, nextFocus } = this.props;\r\n        const { showNextButton, showPrevButton } = this.state;\r\n        const skipText = this.makeSentenceCase(name);\r\n\r\n        return (\r\n            <>\r\n                <a id={`pre-${name}-carousel`} className=\"skip-link skip-article\" href={nextFocus}>\r\n                    Skip {skipText} Carousel\r\n                </a>\r\n                <div\r\n                    className={classNames('carousel max-width--xl', {\r\n                        ['scrollable']: showPrevButton && showNextButton,\r\n                    })}\r\n                >\r\n                    <div\r\n                        id={`${name}-carousel-slides`}\r\n                        className={classNames('carousel__slides', {\r\n                            ['carousel-slides__centered']: children.length < 5,\r\n                        })}\r\n                        data-carousel-length={React.Children.count(children)}\r\n                    >\r\n                        {React.Children.map(children, (child: React.ReactChild, index: number) => (\r\n                            <div\r\n                                className=\"carousel__slide\"\r\n                                data-is-current-slide={this.state.index === index ? true : false}\r\n                                key={`${index}-slide`}\r\n                                onMouseEnter={(event: any) =>\r\n                                    this.showSlideNavButton({\r\n                                        slideIsHovered: true,\r\n                                        nextButtonIsHovered: false,\r\n                                        prevButtonIsHovered: false,\r\n                                        slideIndex: index,\r\n                                        el: event.target,\r\n                                    })\r\n                                }\r\n                                onMouseLeave={() => this.hideSlideNavButton()}\r\n                            >\r\n                                {child}\r\n                            </div>\r\n                        ))}\r\n                    </div>\r\n                </div>\r\n                <div className={`${name}-button-container`}>\r\n                    <button\r\n                        id={`${name}-carousel__prev`}\r\n                        className={classNames('carousel__prev', {\r\n                            'carousel-prev-button__hidden': !showPrevButton,\r\n                        })}\r\n                        onMouseEnter={(event: any) =>\r\n                            this.showSlideNavButton({\r\n                                slideIsHovered: false,\r\n                                nextButtonIsHovered: false,\r\n                                prevButtonIsHovered: true,\r\n                                slideIndex: this.state.index,\r\n                                el: event.target,\r\n                            })\r\n                        }\r\n                        onMouseLeave={() => this.hideSlideNavButton()}\r\n                        tabIndex={-1}\r\n                    >\r\n                        <span className=\"visually-hidden\">Previous Slide</span>\r\n                        <svg viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\r\n                            <path d=\"M15.41 16.09l-4.58-4.59 4.58-4.59L14 5.5l-6 6 6 6z\" />\r\n                            <path d=\"M0-.5h24v24H0z\" fill=\"none\" />\r\n                        </svg>\r\n                    </button>\r\n                    <button\r\n                        id={`${name}-carousel__next`}\r\n                        className={classNames('carousel__next', {\r\n                            'carousel-next-button__hidden': !showNextButton,\r\n                        })}\r\n                        onMouseEnter={(event: any) =>\r\n                            this.showSlideNavButton({\r\n                                slideIsHovered: false,\r\n                                nextButtonIsHovered: true,\r\n                                prevButtonIsHovered: false,\r\n                                slideIndex: this.state.index,\r\n                                el: event.target,\r\n                            })\r\n                        }\r\n                        onMouseLeave={() => this.hideSlideNavButton()}\r\n                        tabIndex={-1}\r\n                    >\r\n                        <span className=\"visually-hidden\">Next Slide</span>\r\n                        <svg viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\r\n                            <path d=\"M8.59 16.34l4.58-4.59-4.58-4.59L10 5.75l6 6-6 6z\" />\r\n                            <path d=\"M0-.25h24v24H0z\" fill=\"none\" />\r\n                        </svg>\r\n                    </button>\r\n                </div>\r\n            </>\r\n        );\r\n    }\r\n\r\n    public componentDidMount(): void {\r\n        this.initTinySlider();\r\n    }\r\n\r\n    public componentWillUnmount(): void {\r\n        if (this._tinySlider) this._tinySlider.destroy();\r\n        if (this._removeEventHandlers) this._removeEventHandlers();\r\n    }\r\n}\r\n\r\nexport default Carousel;\r\n","/* eslint-disable jsx-a11y/alt-text */\r\nimport * as React from 'react';\r\nimport { RelatedContentItem } from '../../../api/types/research-related-content-response';\r\nimport { truncateCopy } from '../../../utilities/helpers';\r\nimport Icons from '../../../utilities/icons';\r\nimport { ANALYTICS_CONSTANTS, trackEDDL } from '../../../utilities/analytics';\r\n\r\ninterface IResearchArticlesTileProps {\r\n    itemIndex: number;\r\n    content: RelatedContentItem;\r\n}\r\n\r\ninterface IResearchArticlesTileState {\r\n    isHovered: boolean;\r\n}\r\n\r\nconst BODY_CHARACTER_LIMIT = 220;\r\n\r\nclass ResearchArticlesTile extends React.Component<IResearchArticlesTileProps, IResearchArticlesTileState> {\r\n    constructor(props: any) {\r\n        super(props);\r\n\r\n        this.state = {\r\n            isHovered: false,\r\n        };\r\n    }\r\n\r\n    private getBodyText = (body: string, isHovered: boolean): string => {\r\n        return isHovered ? truncateCopy(body, BODY_CHARACTER_LIMIT, true) : body;\r\n    };\r\n\r\n    public render(): React.ReactNode {\r\n        this.props.content.title = this.props.content.title || '';\r\n        return (\r\n            <a\r\n                className=\"research-articles--link\"\r\n                href={this.props.content.url}\r\n                onClick={(event) => {\r\n                    event.preventDefault();\r\n\r\n                    // Analytics\r\n                    trackEDDL({\r\n                        event: ANALYTICS_CONSTANTS.EVENTS.CLICK.CTA,\r\n                        linkDetails: {\r\n                            name: this.props.content.title,\r\n                            position: 'Research',\r\n                        },\r\n                    });\r\n\r\n                    // Redirect\r\n                    window.location.href = this.props.content.url;\r\n                }}\r\n                onMouseEnter={() => {\r\n                    setTimeout(() => {\r\n                        this.setState({ isHovered: true });\r\n                    }, 75);\r\n                }}\r\n                onMouseLeave={() => {\r\n                    setTimeout(() => {\r\n                        this.setState({ isHovered: false });\r\n                    }, 75);\r\n                }}\r\n                aria-label={this.props.content.title}\r\n                data-index={this.props.itemIndex}\r\n            >\r\n                <article className=\"research-articles--tile\">\r\n                    <div className=\"research-articles--tile-img\">\r\n                        <img\r\n                            loading=\"lazy\"\r\n                            src={`${this.props.content.image.url}?w=270&h=230`}\r\n                            alt={`${this.props.content.title}`}\r\n                        />\r\n                    </div>\r\n                    <div className=\"research-articles--tile-info-container\">\r\n                        <p className=\"research-articles--tile-info-type\">{this.props.content.category}</p>\r\n                        <h3 className=\"research-articles--tile-info-title\">{this.props.content.title}</h3>\r\n                        <div\r\n                            className=\"research-articles--tile-info-copy\"\r\n                            dangerouslySetInnerHTML={{\r\n                                __html: this.getBodyText(this.props.content.body, this.state.isHovered),\r\n                            }}\r\n                        />\r\n                        <span className=\"research-articles--tile-info-arrow\">{Icons.arrowIcon}</span>\r\n                    </div>\r\n                </article>\r\n            </a>\r\n        );\r\n    }\r\n}\r\n\r\nexport default ResearchArticlesTile;\r\n","\r\nexport const truncateCopy = (copy: string, characterLimit: number, addElipsis?: boolean) => copy.length > characterLimit ? `${copy.substring(0, characterLimit)}${addElipsis ? '...' : ''}`: copy;\r\n ","import axios from 'axios';\r\nimport { RelatedContentResponse } from './types/research-related-content-response';\r\n\r\nconst emptyRelatedContentResponse = {\r\n    data: []\r\n};\r\nexport function getRelatedContent(): Promise<RelatedContentResponse> {\r\n    try {\r\n        return axios\r\n            .get<RelatedContentResponse>(`/home/api/research/related-content`)\r\n            .then(response => {\r\n                if (response.data) {\r\n                    return response.data;\r\n                }\r\n                return Promise.resolve(emptyRelatedContentResponse);\r\n            })\r\n            .catch(() => emptyRelatedContentResponse);\r\n    } catch (e) {\r\n        return Promise.resolve(emptyRelatedContentResponse);\r\n    }\r\n}\r\n","import * as React from 'react';\r\n\r\ninterface IResearchArticlesTileProps {\r\n    itemIndex: number;\r\n    content: IResearchPrompt;\r\n}\r\n\r\nexport enum ResearchTile {\r\n    Prompt = 'PROMPT',\r\n}\r\n\r\nexport interface IResearchPrompt {\r\n    type: ResearchTile.Prompt;\r\n    heading: string;\r\n    buttonLabel: string;\r\n}\r\n\r\nclass ResearchArticlesPrompt extends React.Component<IResearchArticlesTileProps> {\r\n    constructor(props: any) {\r\n        super(props);\r\n    }\r\n\r\n    public render(): React.ReactNode {\r\n        return (\r\n            <a\r\n                href=\"/research\"\r\n                className=\"research-articles--link\"\r\n                aria-label={this.props.content.heading + ' ' + this.props.content.buttonLabel}\r\n                data-index={this.props.itemIndex}\r\n            >\r\n                <div className=\"research-articles--end-cap-prompt research-articles--tile\">\r\n                    <h3 className=\"research-articles--end-cap-prompt-heading\">{this.props.content.heading}</h3>\r\n                    <button className=\"research-articles--end-cap-prompt-button\">\r\n                        {this.props.content.buttonLabel}\r\n                    </button>\r\n                </div>\r\n            </a>\r\n        );\r\n    }\r\n}\r\n\r\nexport default ResearchArticlesPrompt;\r\n","import * as React from 'react';\r\nimport Carousel from './Carousel';\r\nimport * as analytics from '../../../utilities/analytics';\r\nimport ResearchArticlesTile from './ResearchArticlesTile';\r\nimport { getRelatedContent } from '../../../api/research-service-api';\r\nimport { RelatedContentItem } from '../../../api/types/research-related-content-response';\r\nimport ResearchArticlesPrompt, { IResearchPrompt, ResearchTile } from './ResearchArticlesPrompt';\r\nimport { ITrackingPayload } from '../../../types/analytics';\r\nimport { ANALYTICS_CONSTANTS } from '../../../utilities/analytics';\r\n\r\ninterface IResearchArticlesContainerProps {\r\n    fullStoryPageId: string;\r\n    nextFocus: string;\r\n}\r\n\r\ninterface IResearchArticlesContainerState {\r\n    researchRelatedContentItems: (RelatedContentItem | IResearchPrompt)[];\r\n}\r\n\r\nconst researchPromptData: IResearchPrompt = {\r\n    type: ResearchTile.Prompt,\r\n    heading: 'Want to learn more about our best-sellers?',\r\n    buttonLabel: 'view all research',\r\n};\r\n\r\nclass ResearchArticlesContainer extends React.Component<\r\n    IResearchArticlesContainerProps,\r\n    IResearchArticlesContainerState\r\n> {\r\n    constructor(props: any) {\r\n        super(props);\r\n        this.state = {\r\n            researchRelatedContentItems: [],\r\n        };\r\n    }\r\n\r\n    public componentDidMount(): void {\r\n        this.loadRelatedContentData();\r\n    }\r\n\r\n    public render(): React.ReactNode {\r\n        if (this.state.researchRelatedContentItems.length < 1) {\r\n            return <></>;\r\n        }\r\n        return (\r\n            <Carousel\r\n                name=\"research-articles\"\r\n                nextFocus={this.props.nextFocus}\r\n                onIndexChanged={() => {\r\n                    const name = 'Research & Articles Slide View';\r\n                    const event = ANALYTICS_CONSTANTS.EVENTS.CLICK.CTA;\r\n                    const payload: ITrackingPayload = {\r\n                        event: event,\r\n                        linkDetails: {\r\n                            name: name,\r\n                        },\r\n                    };\r\n                    analytics.trackEDDL(payload);\r\n                }}\r\n            >\r\n                {(this.state.researchRelatedContentItems as (RelatedContentItem | IResearchPrompt)[]).map(\r\n                    (tileData: RelatedContentItem | IResearchPrompt, index: number) => {\r\n                        if ((tileData as IResearchPrompt)?.type === ResearchTile.Prompt) {\r\n                            return (\r\n                                <ResearchArticlesPrompt\r\n                                    content={researchPromptData as IResearchPrompt}\r\n                                    key={index}\r\n                                    itemIndex={index}\r\n                                />\r\n                            );\r\n                        }\r\n                        return (\r\n                            <ResearchArticlesTile\r\n                                content={tileData as RelatedContentItem}\r\n                                key={index}\r\n                                itemIndex={index}\r\n                            />\r\n                        );\r\n                    }\r\n                )}\r\n            </Carousel>\r\n        );\r\n    }\r\n\r\n    private loadRelatedContentData = (): void => {\r\n        getRelatedContent().then((response) => {\r\n            let items: (RelatedContentItem | IResearchPrompt)[] = response?.data[0]?.content;\r\n            items = items.filter((item) => (item as RelatedContentItem)?.image?.url);\r\n            items.push(researchPromptData);\r\n            this.setState({ researchRelatedContentItems: items });\r\n        });\r\n    };\r\n}\r\n\r\nexport default ResearchArticlesContainer;\r\n","import * as React from 'react';\r\nimport { getStatePricingDisclaimer } from '../api/disclaimers-api';\r\n\r\ninterface IStatePricingDisclaimerProps {\r\n    fullStoryPageId: string;\r\n}\r\n\r\nclass StatePricingDisclaimer extends React.Component<IStatePricingDisclaimerProps> {\r\n    public state = {\r\n        text: '',\r\n        warrantyDisclaimerText:\r\n            'Limited warranty is 90-Day/4,000-Miles, whichever comes first. See store for written details. We make every effort to provide accurate information, but please verify before purchasing.',\r\n    };\r\n\r\n    public componentDidMount(): void {\r\n        this.loadStatePricingDisclaimer();\r\n    }\r\n\r\n    public loadStatePricingDisclaimer = (): void => {\r\n        getStatePricingDisclaimer().then((text: string) => this.setState({ text }));\r\n    };\r\n\r\n    public render(): React.ReactNode {\r\n        const { warrantyDisclaimerText, text } = this.state;\r\n\r\n        if (text.length === 0) {\r\n            return null;\r\n        }\r\n\r\n        return (\r\n            <div\r\n                data-fs-section={`${this.props.fullStoryPageId}: Pricing Disclaimer`}\r\n                className=\"state-pricing-disclaimer--max-width\"\r\n            >\r\n                <p className=\"state-pricing-disclaimer--copy\">\r\n                    * {text} {warrantyDisclaimerText}\r\n                </p>\r\n            </div>\r\n        );\r\n    }\r\n}\r\n\r\nexport default StatePricingDisclaimer;\r\n","import axios from 'axios';\r\nimport { getStoreId } from './../utilities/visitor-cookie';\r\nimport { DisclaimersApiResponse } from './types';\r\n\r\nexport function getStatePricingDisclaimer(): Promise<string> {\r\n    const storeId = getStoreId();\r\n\r\n    if (storeId) {\r\n        try {\r\n            return axios\r\n                .get<DisclaimersApiResponse>(`/home/api/disclaimers`, {\r\n                    params: { storeId },\r\n                })\r\n                .then(response => {\r\n                    if (response.data.feeDisclaimer) {\r\n                        return response.data.feeDisclaimer;\r\n                    }\r\n\r\n                    return Promise.resolve('');\r\n                })\r\n                .catch(() => '');\r\n        } catch {\r\n            return Promise.resolve('');\r\n        }\r\n    }\r\n\r\n    return Promise.resolve('');\r\n}\r\n","import * as React from 'react';\r\nimport LazyLoad from 'react-lazyload';\r\nimport StatePricingDisclaimer from './StatePricingDisclaimer';\r\n\r\ninterface ISocialProofContainerProps {\r\n    fullStoryPageId: string;\r\n}\r\n\r\nclass SocialProofContainer extends React.Component<ISocialProofContainerProps> {\r\n    public render(): React.ReactNode | React.ReactPortal {\r\n        return (\r\n            <LazyLoad offset={[400, 400]} height={1}>\r\n                <StatePricingDisclaimer fullStoryPageId={this.props.fullStoryPageId} />\r\n            </LazyLoad>\r\n        );\r\n    }\r\n}\r\n\r\nexport default SocialProofContainer;\r\n","import * as React from 'react';\r\nimport { HeroTheme } from '../utilities/constants';\r\nimport { trackEDDL } from '../../../utilities/analytics';\r\nimport { ITrackingPayload } from '../../../types/analytics';\r\n\r\ninterface IHeroFeaturedContentProps {\r\n    heroTheme: HeroTheme.Light | HeroTheme.Dark;\r\n    ctaLabel: string;\r\n}\r\n\r\ninterface IHeroFeaturedContentState {\r\n    dialogOpen: boolean;\r\n}\r\n\r\nexport default class HeroFeaturedContent extends React.Component<IHeroFeaturedContentProps, IHeroFeaturedContentState> {\r\n    constructor(props: IHeroFeaturedContentProps) {\r\n        super(props);\r\n    }\r\n\r\n    public render(): React.ReactNode {\r\n        return (\r\n            <div\r\n                className={`hero-featured-content hero-featured-content__${this.props.heroTheme} mdc-layout-grid__cell mdc-layout-grid__cell--span-4-phone mdc-layout-grid__cell--span-8-tablet mdc-layout-grid__cell--span-12-desktop`}\r\n            >\r\n                <div className=\"hero-featured-content--content-container\">\r\n                    <h1 className=\"hero-featured-content--heading\">\r\n                        <span className=\"hero-featured-content--heading-top\">\r\n                            <span>The way car&nbsp;</span>\r\n                        </span>\r\n                        <span className=\"hero-featured-content--heading-bottom\">\r\n                            <span>buying should be</span>\r\n                        </span>\r\n                    </h1>\r\n                    <div className=\"hero-featured-content--subheading\">\r\n                        <span className=\"hero-featured-content--subheading-copy\">\r\n                            Upfront prices. CarMax Certified quality.\r\n                        </span>\r\n                    </div>\r\n                    <hzn-button\r\n                        onClick={() => {\r\n                            const name = 'Search Cars';\r\n                            const event = 'searchInitiated';\r\n                            const payload: ITrackingPayload = {\r\n                                event: event,\r\n                                linkDetails: {\r\n                                    name: name,\r\n                                    position: 'Homepage',\r\n                                },\r\n                                search: {\r\n                                    initiationMethod: 'Homepage|search cars|Homepage',\r\n                                },\r\n                            };\r\n                            trackEDDL(payload);\r\n                        }}\r\n                        href=\"/cars/all\"\r\n                        class=\"hero-featured-content--cta\"\r\n                    >\r\n                        {this.props.ctaLabel}\r\n                    </hzn-button>\r\n                </div>\r\n            </div>\r\n        );\r\n    }\r\n}\r\n","import * as React from 'react';\r\nimport { HeroTheme } from '../../utilities/constants';\r\nimport HeroFeaturedContent from '../HeroFeaturedContent';\r\nimport { ITrackingPayload } from '../../../../types/analytics';\r\nimport { trackEDDL, ANALYTICS_CONSTANTS } from '../../../../utilities/analytics';\r\n\r\ninterface IFirstTimeHeroProps {\r\n    fullStoryPageId: string;\r\n}\r\n\r\n/*\r\n        NOTE: Changes to this component must be duplicated in _FirstTimeHero.cshtml\r\n*/\r\n\r\nexport default class FirstTimeHero extends React.Component<IFirstTimeHeroProps> {\r\n    public componentDidMount(): void {\r\n        setTimeout(function () {\r\n            const payload: ITrackingPayload = {\r\n                event: ANALYTICS_CONSTANTS.EVENTS.PAGE.STATE,\r\n                pageState: {\r\n                    pageState: 'hp-HeroBrandMessage',\r\n                },\r\n            };\r\n            trackEDDL(payload);\r\n        }, ANALYTICS_CONSTANTS.PAGE_STATE_LOAD_TIME);\r\n    }\r\n\r\n    private disableHomebasePageStyles() {\r\n        document.body.classList.remove('is-return-visit');\r\n\r\n        const headerEl = document.getElementById('header');\r\n        if (headerEl) {\r\n            headerEl.classList.remove('transparent-light');\r\n            headerEl.classList.add('transparent-dark');\r\n        }\r\n    }\r\n\r\n    public render(): React.ReactNode {\r\n        this.disableHomebasePageStyles();\r\n\r\n        return (\r\n            <section\r\n                id=\"first-time-visitor-hero\"\r\n                data-fs-section={`${this.props.fullStoryPageId}: Hero`}\r\n                className=\"first-time-visitor-hero  mdc-layout-grid\"\r\n            >\r\n                <div className=\"first-time-visitor-hero--max-width-container\">\r\n                    <picture>\r\n                        <source media=\"(max-width: 767px)\" srcSet=\"/home/images/home/hero/lycg-mobile.jpg\" />\r\n                        <source\r\n                            media=\"(min-width: 767.1px) and (max-width: 1151px)\"\r\n                            srcSet=\"/home/images/home/hero/lycg-tablet.jpg\"\r\n                        />\r\n                        <source media=\"(min-width: 1151.1px)\" srcSet=\"/home/images/home/hero/lycg-xl.jpg\" />\r\n                        <img\r\n                            className=\"first-time-visitor-hero-img\"\r\n                            src=\"/home/images/home/hero/lycg-xl.jpg\"\r\n                            alt=\"Parent and child sitting in the rear of their vehicle putting on skates\"\r\n                            width=\"4366\"\r\n                            height=\"1522\"\r\n                        />\r\n                    </picture>\r\n                    <div className=\"first-time-visitor-hero--grid-container mdc-layout-grid__inner\">\r\n                        <HeroFeaturedContent heroTheme={HeroTheme.Dark} ctaLabel=\"Search Cars\" />\r\n                    </div>\r\n                </div>\r\n            </section>\r\n        );\r\n    }\r\n}\r\n","import { CustomerProgressionStatusResponse } from './types/customer-progression';\r\n\r\nexport const emptyProgressionStatus: CustomerProgressionStatusResponse = {\r\n    status: '',\r\n    stockNumber: 0\r\n};\r\n\r\nexport async function getProgressionStatus(ciamId: string): Promise<CustomerProgressionStatusResponse> {\r\n    if (ciamId) {\r\n        return await fetch(`/home/api/customerprogression/status?ciamId=${ciamId}`)\r\n            .then((response: Response) => response.json())\r\n            .then((data: CustomerProgressionStatusResponse) => data)\r\n            .catch(() => emptyProgressionStatus);\r\n    }\r\n\r\n    return Promise.resolve(emptyProgressionStatus);\r\n}\r\n","import { getProgressionStatus } from '../../../api/customer-progression-api';\r\nimport { getCiamId } from '../../../api/myaccount-cookie-api';\r\nimport { Vehicle } from '../../../api/types';\r\nimport { ProgressionActivities } from './constants';\r\nimport { getVehiclesFromRVC } from '../../../api/rvc-api';\r\n\r\ninterface ITransfersTile {\r\n    vehicle: Vehicle;\r\n    status: string;\r\n}\r\n\r\nexport type TransfersTile = ITransfersTile;\r\n\r\nexport const fetchAndBuildTransfersTile = async (): Promise<TransfersTile> => {\r\n    const ciamId = await getCiamId();\r\n    if (ciamId) {\r\n        const progressionStatus = await getProgressionStatus(ciamId);\r\n        const { status, stockNumber } = progressionStatus;\r\n        if (status && stockNumber > 0) {\r\n            const vehicles = await getVehiclesFromRVC({ stockNumberList: [stockNumber] });\r\n            if (vehicles.length > 0) {\r\n                return { vehicle: vehicles[0], status: status };\r\n            }\r\n        }\r\n    }\r\n\r\n    return { vehicle: {} as Vehicle, status: '' } as TransfersTile;\r\n};\r\n\r\nexport const hasInProgressTransfer = (transfersTile: ITransfersTile): boolean => {\r\n    const inProgressStatuses = [\r\n        ProgressionActivities.TransferOrderRequestSubmitted,\r\n        ProgressionActivities.TransferOrderAwaitingApproval,\r\n        ProgressionActivities.TransferOrderApproved,\r\n        ProgressionActivities.TransferOrderTendered,\r\n    ];\r\n    return inProgressStatuses.includes(transfersTile?.status as ProgressionActivities);\r\n};\r\n\r\nexport const hasCheckoutCreatedTransfer = (transfersTile: ITransfersTile): boolean => {\r\n    return transfersTile?.status === ProgressionActivities.TransferCheckoutCreated;\r\n};\r\n","import { getRecommendedVehicleTiles } from '../../../utilities/vehicleTileBuilder';\r\nimport { getStoreId, getVisitorId } from '../../../utilities/visitor-cookie';\r\nimport { IVehicleTile } from '../../../types/vehicleTile';\r\nimport { getLatitude, getLongitude } from '../../../utilities/cookieHelper';\r\n\r\nexport const selectSourceStockNumbers = (favoritedStockNumberList?: number[], viewedVehicleList?: IVehicleTile[]) => {\r\n    if (favoritedStockNumberList && favoritedStockNumberList.length > 0) {\r\n        return favoritedStockNumberList.map((stockNumber) => String(stockNumber));\r\n    } else if (viewedVehicleList && viewedVehicleList.length > 0) {\r\n        return viewedVehicleList.map((vehicleTile) => String(vehicleTile.stockNumber));\r\n    } else {\r\n        return [];\r\n    }\r\n};\r\n\r\nexport const fetchAndBuildRecommendedVehicleTiles = (\r\n    cb: (recommendedVehicleTileList: IVehicleTile[]) => any,\r\n    favoritedStockNumberList?: number[],\r\n    viewedVehicleList?: IVehicleTile[]\r\n) => {\r\n    const sourceStockNumbers = selectSourceStockNumbers(favoritedStockNumberList, viewedVehicleList);\r\n\r\n    getRecommendedVehicleTiles({\r\n        sourceStockNumbers,\r\n        lat: getLatitude(),\r\n        long: getLongitude(),\r\n        visitorId: getVisitorId(),\r\n        userStoreId: getStoreId(),\r\n    }).then((recommendedVehicleList: IVehicleTile[]) => {\r\n        cb(recommendedVehicleList);\r\n    });\r\n};\r\n","import * as React from 'react';\r\n\r\nexport const SkeletonVehicleTile: React.FC = () => {\r\n    return (\r\n        <div className=\"skeleton-vehicle-tile\">\r\n            <svg\r\n                xmlns=\"http://www.w3.org/2000/svg\"\r\n                xmlnsXlink=\"http://www.w3.org/1999/xlink\"\r\n                width=\"266\"\r\n                height=\"323\"\r\n                viewBox=\"0 0 270 318\"\r\n                aria-hidden=\"true\"\r\n            >\r\n                <defs>\r\n                    <linearGradient\r\n                        x1=\"-338.24\"\r\n                        y1=\"1.44\"\r\n                        x2=\"-338.24\"\r\n                        y2=\"2.44\"\r\n                        gradientTransform=\"translate(91460 -466) scale(270 325)\"\r\n                        gradientUnits=\"userSpaceOnUse\"\r\n                    >\r\n                        <stop offset=\"0\" stopColor=\"#0c629a\" stopOpacity=\"0.08\" />\r\n                        <stop offset=\"1\" stopColor=\"#053361\" stopOpacity=\"0.08\" />\r\n                    </linearGradient>\r\n                </defs>\r\n                <path\r\n                    data-name=\"a2841865-5eac-424c-aea4-f3711d32ec34\"\r\n                    d=\"M0,0H270V325H0Z\"\r\n                    fillRule=\"evenodd\"\r\n                    fillOpacity={0}\r\n                />\r\n                <rect\r\n                    x=\"16\"\r\n                    y=\"247\"\r\n                    width=\"216\"\r\n                    height=\"24\"\r\n                    rx=\"8\"\r\n                    fill=\"#053361\"\r\n                    opacity=\"0.16\"\r\n                    style={{ isolation: 'isolate' }}\r\n                />\r\n                <path\r\n                    d=\"M24,215H153a8,8,0,0,0,0-16H24a8,8,0,0,0,0,16Z\"\r\n                    fill=\"#053361\"\r\n                    opacity=\"0.16\"\r\n                    style={{ isolation: 'isolate' }}\r\n                />\r\n                <path\r\n                    d=\"M226,293H22a6,6,0,0,0,0,12H226a6,6,0,0,0,0-12Z\"\r\n                    fill=\"#053361\"\r\n                    opacity=\"0.16\"\r\n                    style={{ isolation: 'isolate' }}\r\n                />\r\n                <path\r\n                    d=\"M24,239H153a8,8,0,0,0,0-16H24a8,8,0,0,0,0,16Z\"\r\n                    fill=\"#053361\"\r\n                    opacity=\"0.16\"\r\n                    style={{ isolation: 'isolate' }}\r\n                />\r\n                <rect width=\"270\" height=\"181\" fill=\"#053361\" opacity=\"0.16\" style={{ isolation: 'isolate' }} />\r\n            </svg>\r\n        </div>\r\n    );\r\n};\r\n","import * as React from 'react';\r\nimport Carousel from './Carousel';\r\nimport { SkeletonVehicleTile } from './SkeletonVehicleTile';\r\n\r\nexport const RecommendationsPlaceholderCarousel: React.FC = () => {\r\n    return (\r\n        <div className=\"home-base-hero--tab-placeholder home-base-hero--recommandations-tab-placeholder carousel-container\">\r\n            <ul className=\"tab-placeholder--list kmx-list\">\r\n                <Carousel\r\n                    name=\"recommendations-placeholder\"\r\n                    nextFocus=\"#budget-calculator-section\"\r\n                    ariaLabel=\"No Recommendations Available\"\r\n                >\r\n                    <li className=\"tab-placeholder--list-item carousel__slide\" key=\"recommendations-placeholder-tile-1\">\r\n                        <div className=\"carousel-slide-item\">\r\n                            <div className=\"tab-placeholder--supportive-copy kmx-typography--display-3\">\r\n                                Hmm… we’re having trouble loading this\r\n                            </div>\r\n                            <a href=\"/\" className=\"tab-placeholder--cta-button kmx-button kmx-button--primary\">\r\n                                Try Reloading\r\n                            </a>\r\n                        </div>\r\n                    </li>\r\n                    <li\r\n                        className=\"tab-placeholder--list-item tab-placeholder--skeleton carousel__slide\"\r\n                        key=\"recommendations-placeholder-tile-2\"\r\n                    >\r\n                        <div className=\"carousel-slide-item\">\r\n                            <SkeletonVehicleTile />\r\n                        </div>\r\n                    </li>\r\n                    <li\r\n                        className=\"tab-placeholder--list-item tab-placeholder--skeleton carousel__slide\"\r\n                        key=\"recommendations-placeholder-tile-3\"\r\n                    >\r\n                        <div className=\"carousel-slide-item\">\r\n                            <SkeletonVehicleTile />\r\n                        </div>\r\n                    </li>\r\n                    <li\r\n                        className=\"tab-placeholder--list-item tab-placeholder--skeleton carousel__slide\"\r\n                        key=\"recommendations-placeholder-tile-4\"\r\n                    >\r\n                        <div className=\"carousel-slide-item\">\r\n                            <SkeletonVehicleTile />\r\n                        </div>\r\n                    </li>\r\n                </Carousel>\r\n            </ul>\r\n        </div>\r\n    );\r\n};\r\n","import * as React from 'react';\r\nimport { HomebaseTab, HOMEBASE_CAROUSELS, LOADING_SPINNER_CLASS } from '../../../utilities/constants';\r\nimport { IVehicleTile } from '../../../../../types/vehicleTile';\r\nimport LoadingSpinner from '../../../../../components/loading-spinner';\r\nimport ReturnVisitorCarousel from '../../../../../components/carousels/home-base-hero-carousel/ReturnVisitorCarousel';\r\nimport { RecommendationsPlaceholderCarousel } from '../../../../../components/carousels/home-base-hero-carousel/RecommendationsPlaceholderCarousel';\r\nimport { FBSContext } from '../../../../../context';\r\nimport { trackEDDL } from '../../../../../utilities/analytics';\r\nimport { useEffect } from 'react';\r\n\r\ninterface IRecommendedCarouselProps {\r\n    hasLoadedRecommendedTab: boolean;\r\n    recommendedVehicleList: IVehicleTile[];\r\n    isVisible: boolean;\r\n    favoritedStockNumberList: number[];\r\n    isLoadingRecommendedTab: boolean;\r\n    stockNumbersPendingFavoritesUpdate: number[];\r\n    onOpenSnackBar: (text: string) => any;\r\n}\r\n\r\nconst RecommendedCarousel = (props: IRecommendedCarouselProps) => {\r\n    const {\r\n        hasLoadedRecommendedTab,\r\n        recommendedVehicleList,\r\n        isVisible,\r\n        favoritedStockNumberList,\r\n        isLoadingRecommendedTab,\r\n        stockNumbersPendingFavoritesUpdate,\r\n        onOpenSnackBar,\r\n    } = props;\r\n\r\n    const fbsContext = React.useContext(FBSContext);\r\n\r\n    // Function to be called when a card's title is clicked\r\n    const handleEddlOnClick = (card: Element, allStockNumbers: string[]) => {\r\n        // Get vehicle's YMM\r\n        const name = card.getAttribute('data-ymm') || '';\r\n        const stockNumber = card.getAttribute('data-stocknumber');\r\n        if (!stockNumber) return;\r\n\r\n        // EDDL: Recommended Car - Clicked\r\n        trackEDDL({\r\n            event: 'recommendedCarClicked',\r\n            linkDetails: {\r\n                name,\r\n                position: 'homepage home base hero tile recommended car',\r\n            },\r\n            recommendations: {\r\n                stockNumber,\r\n                similarVehicles: allStockNumbers.filter((sn) => sn !== stockNumber).join(','), // Filters out the stock number clicked\r\n            },\r\n            module: {\r\n                moduleExperience: 'VR|Homepage|You might like',\r\n            },\r\n        });\r\n    };\r\n\r\n    useEffect(() => {\r\n        if (!recommendedVehicleList.length) return;\r\n\r\n        fbsContext.setVehicleList(recommendedVehicleList);\r\n\r\n        // Get all the cards from the DOM\r\n        const cards = document.querySelectorAll('#kmx-recommended-carousel .carousel__slide');\r\n\r\n        // Get all stock numbers\r\n        const allStockNumbers = Array.from(cards)\r\n            .map((node) => node.getAttribute('data-stocknumber'))\r\n            .filter((item) => item) as string[];\r\n\r\n        // EDDL: Recommended Car - Impression\r\n        trackEDDL({\r\n            event: 'recommededCarImpression',\r\n            recommendations: {\r\n                similarVehicles: allStockNumbers.join(','),\r\n            },\r\n            module: {\r\n                moduleExperience: 'VR|Homepage|You might like',\r\n            },\r\n        });\r\n\r\n        // Loop through all cards to add event listeners and execute the EDDL function on page load\r\n        cards.forEach((card) => {\r\n            const stockNumber = card.getAttribute('data-stocknumber');\r\n            if (!stockNumber) return;\r\n\r\n            card.querySelector('.sc--hero-image a')?.addEventListener('click', () => {\r\n                handleEddlOnClick(card, allStockNumbers);\r\n            });\r\n            card.querySelector('a.make-model-link')?.addEventListener('click', () => {\r\n                handleEddlOnClick(card, allStockNumbers);\r\n            });\r\n        });\r\n\r\n        return () => {\r\n            cards.forEach((card) => {\r\n                card.querySelector('.sc--hero-image a')?.removeEventListener('click', () => {\r\n                    handleEddlOnClick(card, allStockNumbers);\r\n                });\r\n                card.querySelector('a.make-model-link')?.removeEventListener('click', () => {\r\n                    handleEddlOnClick(card, allStockNumbers);\r\n                });\r\n            });\r\n        };\r\n    }, [recommendedVehicleList]);\r\n\r\n    return hasLoadedRecommendedTab && recommendedVehicleList.length > 0 ? (\r\n        <ReturnVisitorCarousel\r\n            id=\"kmx-recommended-carousel\"\r\n            carouselName={HOMEBASE_CAROUSELS.byId[HomebaseTab.Recommended].carouselName}\r\n            analyticsName={HOMEBASE_CAROUSELS.byId[HomebaseTab.Recommended].carouselAnalyticsName}\r\n            isVisible={isVisible}\r\n            vehicleTileList={recommendedVehicleList}\r\n            favoritedStockNumberList={favoritedStockNumberList}\r\n            stockNumbersPendingFavoritesUpdate={stockNumbersPendingFavoritesUpdate}\r\n            ariaLabel={HOMEBASE_CAROUSELS.byId[HomebaseTab.Recommended].ariaLabel}\r\n            enableRemove={false}\r\n            fbsData={fbsContext.fbsData}\r\n            onOpenSnackBar={onOpenSnackBar}\r\n            sectionName=\"You might like\"\r\n        />\r\n    ) : isLoadingRecommendedTab ? (\r\n        <LoadingSpinner className={LOADING_SPINNER_CLASS} />\r\n    ) : hasLoadedRecommendedTab && recommendedVehicleList.length === 0 ? (\r\n        <RecommendationsPlaceholderCarousel />\r\n    ) : null;\r\n};\r\n\r\nexport default RecommendedCarousel;\r\n","import * as React from 'react';\r\nimport { placeholderTileIcon } from '../../../pages/home/utilities/svg';\r\nimport Carousel from './Carousel';\r\nimport { SkeletonVehicleTile } from './SkeletonVehicleTile';\r\n\r\nexport const RecentlyViewedPlaceholderCarousel: React.FC = () => {\r\n    return (\r\n        <div className=\"home-base-hero--tab-placeholder home-base-hero--viewed-tab-placeholder\">\r\n            <ul className=\"tab-placeholder--list kmx-list\">\r\n                <Carousel\r\n                    name=\"viewed-placeholder\"\r\n                    nextFocus=\"#budget-calculator-section\"\r\n                    ariaLabel=\"No Viewed Vehicles Available\"\r\n                >\r\n                    <li className=\"tab-placeholder--list-item carousel__slide\" key=\"viewed-placeholder-tile-1\">\r\n                        <div className=\"carousel-slide-item\">\r\n                            <div className=\"tab-placeholder--icon\">{placeholderTileIcon}</div>\r\n                            <div className=\"tab-placeholder--supportive-copy kmx-typography--display-3\">\r\n                                Nothing feeling quite right?\r\n                            </div>\r\n                            <a href=\"/cars\" className=\"tab-placeholder--cta-button kmx-button kmx-button--primary\">\r\n                                Browse for cars\r\n                            </a>\r\n                        </div>\r\n                    </li>\r\n                    <li\r\n                        className=\"tab-placeholder--list-item tab-placeholder--skeleton carousel__slide\"\r\n                        key=\"viewed-placeholder-tile-2\"\r\n                    >\r\n                        <div className=\"carousel-slide-item\">\r\n                            <SkeletonVehicleTile />\r\n                        </div>\r\n                    </li>\r\n                    <li\r\n                        className=\"tab-placeholder--list-item tab-placeholder--skeleton carousel__slide\"\r\n                        key=\"viewed-placeholder-tile-3\"\r\n                    >\r\n                        <div className=\"carousel-slide-item\">\r\n                            <SkeletonVehicleTile />\r\n                        </div>\r\n                    </li>\r\n                    <li\r\n                        className=\"tab-placeholder--list-item tab-placeholder--skeleton carousel__slide\"\r\n                        key=\"viewed-placeholder-tile-4\"\r\n                    >\r\n                        <div className=\"carousel-slide-item\">\r\n                            <SkeletonVehicleTile />\r\n                        </div>\r\n                    </li>\r\n                </Carousel>\r\n            </ul>\r\n        </div>\r\n    );\r\n};\r\n","import * as React from 'react';\r\nimport { useState, useEffect } from 'react';\r\nimport { HomebaseTab, HOMEBASE_CAROUSELS } from '../../../utilities/constants';\r\nimport { IVehicleTile } from '../../../../../types/vehicleTile';\r\nimport ReturnVisitorCarousel from '../../../../../components/carousels/home-base-hero-carousel/ReturnVisitorCarousel';\r\nimport { RecentlyViewedPlaceholderCarousel } from '../../../../../components/carousels/home-base-hero-carousel/RecentlyViewedPlaceholderCarousel';\r\nimport { FBSContext } from '../../../../../context';\r\nimport { useLocalCarsStore } from '../../../../../context/localCarsStore';\r\nimport { useShallow } from 'zustand/react/shallow';\r\n\r\ninterface IRecentlyViewedCarouselProps {\r\n    isVisible: boolean;\r\n    viewedVehicleList: IVehicleTile[];\r\n    stockNumbersPendingFavoritesUpdate: number[];\r\n    updatedViewedTiles?: (tileToRemove: IVehicleTile) => any;\r\n    onOpenSnackBar: (text: string) => any;\r\n}\r\n\r\nconst RecentlyViewedCarousel = (props: IRecentlyViewedCarouselProps) => {\r\n    const { isVisible, viewedVehicleList, stockNumbersPendingFavoritesUpdate } = props;\r\n\r\n    const { favoriteVehicles, setFavoriteVehicles } = useLocalCarsStore(\r\n        useShallow((state) => ({\r\n            favoriteVehicles: state.favoriteVehicles,\r\n            addVehicleToFavorites: state.addVehicleToFavorites,\r\n            removeVehicleFromFavorites: state.removeVehicleFromFavorites,\r\n            setFavoriteVehicles: state.setFavoriteVehicles,\r\n        }))\r\n    );\r\n\r\n    const fbs = React.useContext(FBSContext);\r\n    const [viewedList, setViewedList] = useState(props.viewedVehicleList);\r\n\r\n    useEffect(() => {\r\n        setViewedList(props.viewedVehicleList);\r\n        setFavoriteVehicles();\r\n    }, [props.viewedVehicleList, setFavoriteVehicles]);\r\n\r\n    return viewedVehicleList.length > 0 ? (\r\n        <ReturnVisitorCarousel\r\n            id=\"kmx-viewed-carousel\"\r\n            carouselName={HOMEBASE_CAROUSELS.byId[HomebaseTab.RecentlyViewed].carouselName}\r\n            analyticsName={HOMEBASE_CAROUSELS.byId[HomebaseTab.RecentlyViewed].carouselAnalyticsName}\r\n            isVisible={isVisible}\r\n            vehicleTileList={viewedList}\r\n            favoritedStockNumberList={favoriteVehicles}\r\n            stockNumbersPendingFavoritesUpdate={stockNumbersPendingFavoritesUpdate}\r\n            ariaLabel={HOMEBASE_CAROUSELS.byId[HomebaseTab.RecentlyViewed].ariaLabel}\r\n            updatedViewedTiles={props.updatedViewedTiles}\r\n            enableRemove={true}\r\n            fbsData={fbs.fbsData}\r\n            onOpenSnackBar={props.onOpenSnackBar}\r\n            sectionName=\"Viewed\"\r\n        />\r\n    ) : (\r\n        <RecentlyViewedPlaceholderCarousel />\r\n    );\r\n};\r\n\r\nexport default RecentlyViewedCarousel;\r\n","import * as React from 'react';\r\nimport classNames from 'classnames';\r\n\r\ninterface IRecentSearchTileHeaderProps {\r\n    title: string;\r\n    inventoryCount: number;\r\n    inventoryCountText: string;\r\n    newMatchCountText?: string;\r\n    isPartialRecentSearch?: boolean;\r\n}\r\n\r\nconst RecentSearchTileHeader = (props: IRecentSearchTileHeaderProps) => {\r\n    const { title, newMatchCountText, inventoryCount, inventoryCountText, isPartialRecentSearch } = props;\r\n    return (\r\n        <figcaption className=\"kmx-recent-search-tile-caption\">\r\n            <h2 className=\"kmx-recent-search-tile-title\">{title}</h2>\r\n            <span className=\"kmx-recent-search-tile-inventory-count-row\">\r\n                {newMatchCountText ? (\r\n                    <span className=\"kmx-recent-search-tile-new-matches-badge\" aria-label={`${newMatchCountText} new matches.`}>{newMatchCountText}</span>\r\n                ) : null}\r\n                <span\r\n                    className={classNames('kmx-recent-search-tile-search-count', {\r\n                        'kmx-recent-search-tile-search-count-zero': inventoryCount === 0 && !isPartialRecentSearch\r\n                    })}\r\n                >\r\n                    {inventoryCountText}\r\n                </span>\r\n            </span>\r\n        </figcaption>\r\n    );\r\n};\r\n\r\nexport default RecentSearchTileHeader;\r\n","import * as React from 'react';\r\nimport classNames from 'classnames';\r\n\r\nconst RECENT_SEARCH_TILE_IMG_WIDTH = 800;\r\nconst RECENT_SEARCH_TILE_IMG_HEIGHT = 600;\r\nconst RECENT_SEARCH_TILE_PLACEHOLDER_IMG_WIDTH = 540;\r\nconst RECENT_SEARCH_TILE_PLACEHOLDER_IMG_HEIGHT = 650;\r\n\r\ninterface IRecentSearchTileImgProps {\r\n    alt: string;\r\n    src: string;\r\n    inventoryCount: number;\r\n    handleOnLoad: () => any;\r\n}\r\n\r\nconst RecentSearchTileImg = (props: IRecentSearchTileImgProps) => {\r\n    const { alt, src, inventoryCount, handleOnLoad } = props;\r\n\r\n    let width = RECENT_SEARCH_TILE_IMG_WIDTH,\r\n        height = RECENT_SEARCH_TILE_IMG_HEIGHT;\r\n\r\n    if (props.inventoryCount === 0) {\r\n        width = RECENT_SEARCH_TILE_PLACEHOLDER_IMG_WIDTH;\r\n        height = RECENT_SEARCH_TILE_PLACEHOLDER_IMG_HEIGHT;\r\n    }\r\n\r\n    return (\r\n        <div\r\n            className={classNames('kmx-recent-search-tile-image-container', {\r\n                'kmx-recent-search-tile-image-container-placeholder': inventoryCount === 0\r\n            })}\r\n        >\r\n            <img\r\n                aria-hidden=\"true\"\r\n                src={src}\r\n                alt={alt}\r\n                width={width}\r\n                height={height}\r\n                className={classNames('kmx-recent-search-tile-image', {\r\n                    'kmx-recent-search-tile-image-placeholder': inventoryCount === 0\r\n                })}\r\n                onLoad={handleOnLoad}\r\n            />\r\n        </div>\r\n    );\r\n};\r\n\r\nexport default RecentSearchTileImg;\r\n","import React from 'react';\r\nimport Icons from '../../../../utilities/icons';\r\nimport { uuid } from '../../../../utilities/uuid';\r\nimport classNames from 'classnames';\r\nimport { ITrackingPayload } from '../../../../types/analytics';\r\nimport { ANALYTICS_CONSTANTS, trackEDDL } from '../../../../utilities/analytics';\r\n\r\ninterface ITileKebabMenuProps {\r\n    children: any;\r\n    buttonAttrs?: { [key: string]: any };\r\n    category?: string;\r\n}\r\n\r\nconst TileKebabMenu = (props: ITileKebabMenuProps) => {\r\n    const childArray = React.Children.toArray(props.children);\r\n    const id = uuid();\r\n    const [isMenuOpen, setIsMenuOpen] = React.useState<boolean>(false);\r\n    const [isAriaExpanded, setIsAriaExpanded] = React.useState<boolean>(false);\r\n    const menuRef = React.useRef<HTMLDivElement>(null);\r\n\r\n    const closeMenu = React.useCallback(\r\n        (event) => {\r\n            if (isMenuOpen && menuRef.current && !menuRef.current.contains(event.target)) {\r\n                setIsMenuOpen(false);\r\n                setIsAriaExpanded(false);\r\n            }\r\n        },\r\n        [isMenuOpen]\r\n    );\r\n\r\n    React.useEffect(() => {\r\n        document.addEventListener('click', closeMenu);\r\n        document.addEventListener('keydown', closeMenu);\r\n        return () => {\r\n            document.removeEventListener('click', closeMenu);\r\n            document.removeEventListener('keydown', closeMenu);\r\n        };\r\n    }, [closeMenu]);\r\n\r\n    const handleClick = () => {\r\n        setIsMenuOpen(!isMenuOpen);\r\n        setIsAriaExpanded(!isAriaExpanded);\r\n        const payload: ITrackingPayload = {\r\n            event: ANALYTICS_CONSTANTS.EVENTS.CLICK.CTA,\r\n            linkDetails: {\r\n                name: 'three dots',\r\n                position: `Searched:${props.category}`,\r\n            },\r\n        };\r\n        trackEDDL(payload);\r\n    };\r\n\r\n    return (\r\n        <div className=\"tile-menu\" ref={menuRef}>\r\n            <button\r\n                className=\"tile-menu-button tile-menu--toggle-menu-button carousel-slide-interactive-content\"\r\n                aria-label=\"Toggle contextual menu\"\r\n                aria-controls={`tile-menu-${id}`}\r\n                aria-expanded={isAriaExpanded}\r\n                {...props.buttonAttrs}\r\n                onClick={handleClick}\r\n            >\r\n                {Icons.moreVert}\r\n            </button>\r\n            <div\r\n                className={classNames('tile-menu--dropdown', { 'tile-menu--dropdown__open': isMenuOpen })}\r\n                id={`tile-menu-${id}`}\r\n                role=\"menu\"\r\n            >\r\n                <ul className=\"tile-menu--dropdown-list\">\r\n                    {childArray.map((child: any, index: number) => {\r\n                        return (\r\n                            <li className=\"tile-menu--dropdown-list-item\" key={index} tabIndex={-1}>\r\n                                {child}\r\n                            </li>\r\n                        );\r\n                    })}\r\n                </ul>\r\n            </div>\r\n        </div>\r\n    );\r\n};\r\n\r\nexport default TileKebabMenu;\r\n","/**\r\n * Generates a GUID string.\r\n * @returns {String} The generated GUID.\r\n * @example af8a8416-6e18-a307-bd9c-f2c947bbb3aa\r\n * @author Slavik Meltser\r\n * @link http://slavik.meltser.info/?p=142\r\n */\r\nexport function uuid() {\r\n    function _p8(s?: boolean) {\r\n        const p = `${Math.random().toString(16)}000000000`.substr(2, 8);\r\n        return s ? `-${p.substr(0, 4)}-${p.substr(4, 4)}` : p;\r\n    }\r\n\r\n    return _p8() + _p8(true) + _p8(true) + _p8();\r\n}\r\n","import React from 'react';\r\nimport classNames from 'classnames';\r\n\r\nexport interface ITileKebabMenuItem {\r\n    href: string;\r\n    text: string;\r\n    icon: JSX.Element | string;\r\n    linkAttrs?: any;\r\n    linkClasses?: string;\r\n}\r\n\r\ninterface ITileKebabMenuItemProps extends ITileKebabMenuItem {\r\n    handleClick?: (e: any) => any;\r\n}\r\n\r\nconst TileKebabMenuItem = (props: ITileKebabMenuItemProps) => {\r\n    const linkAttrs = props.linkAttrs ? props.linkAttrs : {};\r\n\r\n    return (\r\n        <a\r\n            className={classNames(\r\n                'tile-menu--dropdown-list-item-link carousel-slide-interactive-content',\r\n                props.linkClasses\r\n            )}\r\n            href={props.href}\r\n            tabIndex={0}\r\n            onClick={props.handleClick}\r\n            {...linkAttrs}\r\n        >\r\n            <div className=\"tile-menu--dropdown-list-item-content\">\r\n                <div className=\"tile-menu--dropdown-list-item-svg-container\">\r\n                    {typeof props.icon === 'string' ? (\r\n                        <span\r\n                            className=\"tile-menu--dropdown-list-item-svg-wrapper\"\r\n                            dangerouslySetInnerHTML={{ __html: props.icon }}\r\n                        />\r\n                    ) : (\r\n                        <span className=\"tile-menu--dropdown-list-item-svg-wrapper\">{props.icon}</span>\r\n                    )}\r\n                </div>\r\n                {props.text}\r\n            </div>\r\n        </a>\r\n    );\r\n};\r\n\r\nexport default TileKebabMenuItem;\r\n","const addQueryParam = (url: string, newParam: string) => {\r\n    const hasQueryString = url.indexOf('?') > -1;\r\n    return url + (hasQueryString ? '&' : '?') + newParam;\r\n};\r\n\r\nexport default addQueryParam;\r\n","import * as React from 'react';\r\nimport { gsap } from 'gsap';\r\nimport { IRecentSearchTile } from '../../utilities/types';\r\nimport Icons from '../../../../utilities/icons';\r\nimport RecentSearchTileHeader from './RecentSearchTileHeader';\r\nimport RecentSearchTileImg from './RecentSearchTileImg';\r\nimport TileKebabMenu from '../tile-kebab-menu/TileKebabMenu';\r\nimport TileKebabMenuItem from '../tile-kebab-menu/TileKebabMenuItem';\r\nimport TileKebabMenuItemSnackbar from '../tile-kebab-menu/TileKebabMenuItemSnackbar';\r\nimport addQueryParam from '../../utilities/addQueryParam';\r\nimport { trackEDDL, ANALYTICS_CONSTANTS } from '../../../../utilities/analytics';\r\nimport { ITrackingPayload } from '../../../../types/analytics';\r\n\r\ninterface IRecentSearchTileProps {\r\n    linkAttrs?: { [key: string]: any };\r\n    recentSearchTile: IRecentSearchTile;\r\n    isLoading?: boolean;\r\n}\r\n\r\nconst RecentSearchTile = (props: IRecentSearchTileProps) => {\r\n    const {\r\n        title,\r\n        link,\r\n        newMatchCountText,\r\n        newMatchCount,\r\n        inventoryCount,\r\n        inventoryCountText,\r\n        imageUrl,\r\n        imageAlt,\r\n        isPartialRecentSearch,\r\n    } = props.recentSearchTile;\r\n    const linkAttrs = props.linkAttrs ? props.linkAttrs : {};\r\n\r\n    const [imgLoaded, setImgLoaded] = React.useState(false);\r\n    const [isShareSnackbarOpen, setIsShareSnackbarOpen] = React.useState<boolean>(false);\r\n    const [tileKebabMenuDialogOpen, setTileKebabMenuDialogOpen] = React.useState(false);\r\n\r\n    const loadingBarRef = React.useRef(null);\r\n\r\n    React.useEffect(() => {\r\n        const tween = gsap.timeline({ repeat: -1 });\r\n\r\n        if (props.isLoading || !imgLoaded) {\r\n            tween.fromTo(\r\n                loadingBarRef.current,\r\n                { translateX: '-48px' },\r\n                {\r\n                    translateX: '421px',\r\n                    ease: 'none',\r\n                    duration: 0.9,\r\n                }\r\n            );\r\n        } else {\r\n            tween.kill();\r\n        }\r\n    });\r\n\r\n    const handleShareClick = async () => {\r\n        await navigator.clipboard.writeText(`${window.location.origin}${link}`);\r\n        setIsShareSnackbarOpen(true);\r\n    };\r\n\r\n    const KEBAB_MENU_ITEMS = [\r\n        {\r\n            text: 'Share',\r\n            icon: Icons.share,\r\n            handleClick: (e: any) => {\r\n                e.preventDefault();\r\n                handleShareClick();\r\n                const payload: ITrackingPayload = {\r\n                    event: ANALYTICS_CONSTANTS.EVENTS.CLICK.CTA,\r\n                    linkDetails: {\r\n                        name: 'share',\r\n                        position: `Searched:${title}`,\r\n                    },\r\n                };\r\n                trackEDDL(payload);\r\n            },\r\n            href: '#share',\r\n            linkClasses: 'tile-menu-item--share',\r\n        },\r\n    ];\r\n\r\n    const buildTileMenuItems = () => {\r\n        const tileMenuItems: JSX.Element[] = [];\r\n\r\n        KEBAB_MENU_ITEMS.forEach((kebabMenuItem, i) => {\r\n            tileMenuItems.push(<TileKebabMenuItem key={i} {...kebabMenuItem} />);\r\n        });\r\n\r\n        return tileMenuItems;\r\n    };\r\n\r\n    return (\r\n        <div className=\"kmx-recent-search-tile\">\r\n            <figure className=\"kmx-recent-search-tile-figure\">\r\n                {(props.isLoading || !imgLoaded) && (\r\n                    <div className=\"kmx-recent-search-tile-loading-bar-container\">\r\n                        <div ref={loadingBarRef} className=\"kmx-recent-search-tile-loading-bar\" />\r\n                    </div>\r\n                )}\r\n                <a\r\n                    className=\"kmx-recent-search-tile-link\"\r\n                    href={!newMatchCount ? link : addQueryParam(link, 'newMatch=true')}\r\n                    {...linkAttrs}\r\n                    tabIndex={0}\r\n                >\r\n                    <RecentSearchTileHeader\r\n                        title={title}\r\n                        newMatchCountText={newMatchCountText}\r\n                        inventoryCount={inventoryCount}\r\n                        inventoryCountText={inventoryCountText}\r\n                        isPartialRecentSearch={isPartialRecentSearch}\r\n                    />\r\n                    <div className=\"kmx-recent-search-tile-gradient\" />\r\n                    <RecentSearchTileImg\r\n                        src={imageUrl}\r\n                        alt={imageAlt}\r\n                        inventoryCount={inventoryCount}\r\n                        handleOnLoad={() => setImgLoaded(true)}\r\n                    />\r\n                </a>\r\n            </figure>\r\n            <TileKebabMenu category={title}>{buildTileMenuItems()}</TileKebabMenu>\r\n            <TileKebabMenuItemSnackbar\r\n                icon={Icons.share}\r\n                isOpen={isShareSnackbarOpen}\r\n                textLabel=\"Link copied to your clipboard\"\r\n                cancelAction={() => setIsShareSnackbarOpen(false)}\r\n            />\r\n        </div>\r\n    );\r\n};\r\n\r\nexport default RecentSearchTile;\r\n","import * as React from 'react';\r\nimport { IRecentSearchTile } from '../../../pages/home/utilities/types';\r\nimport Carousel from './Carousel';\r\nimport RecentSearchTile from '../../../pages/home/hero/recent-search-tile/RecentSearchTile';\r\n\r\ninterface IReturnVisitorRecentSearchesCarouselProps {\r\n    isVisible: boolean;\r\n    recentSearchTileList: IRecentSearchTile[];\r\n    analyticsName: string;\r\n    carouselName: string;\r\n    ariaLabel: string;\r\n    leftAligned: boolean;\r\n}\r\n\r\ninterface IReturnVisitorRecentSearchesCarouselState {\r\n    recentSearchTileList: IRecentSearchTile[];\r\n    carouselItems: React.ReactElement[];\r\n}\r\n\r\nexport default class ReturnVisitorRecentSearchesCarousel extends React.Component<\r\n    IReturnVisitorRecentSearchesCarouselProps,\r\n    IReturnVisitorRecentSearchesCarouselState\r\n> {\r\n    constructor(props: any) {\r\n        super(props);\r\n        this.state = {\r\n            recentSearchTileList: this.props.recentSearchTileList,\r\n            carouselItems: this.buildCarouselItems(this.props.recentSearchTileList),\r\n        };\r\n\r\n        this.buildCarouselItems = this.buildCarouselItems.bind(this);\r\n    }\r\n\r\n    private buildCarouselItems(recentSearchTileList: IRecentSearchTile[]): React.ReactElement[] {\r\n        const carouselItems: React.ReactElement[] = [];\r\n\r\n        if (recentSearchTileList && recentSearchTileList.length > 0) {\r\n            recentSearchTileList.forEach((recentSearchTile: IRecentSearchTile, index: number) => {\r\n                const linkAttrs: { [key: string]: any } = {};\r\n                linkAttrs.tabIndex = 0;\r\n\r\n                carouselItems.push(\r\n                    <div className=\"carousel__slide\" key={`recent-search-slide-${index}`}>\r\n                        <div className=\"carousel-slide-item\">\r\n                            <RecentSearchTile linkAttrs={linkAttrs} recentSearchTile={recentSearchTile} />\r\n                        </div>\r\n                    </div>\r\n                );\r\n            });\r\n        }\r\n\r\n        return carouselItems;\r\n    }\r\n\r\n    public componentDidUpdate(prevProps: IReturnVisitorRecentSearchesCarouselProps): void {\r\n        const recentSearchTilesHaveUpdated =\r\n            JSON.stringify(prevProps.recentSearchTileList) !== JSON.stringify(this.props.recentSearchTileList);\r\n\r\n        if (recentSearchTilesHaveUpdated) {\r\n            this.setState({\r\n                carouselItems: this.buildCarouselItems(this.props.recentSearchTileList),\r\n            });\r\n        }\r\n    }\r\n\r\n    public render(): React.ReactNode {\r\n        return (\r\n            <div id=\"kmx-recent-searches-carousel\" className=\"carousel-container\">\r\n                <div className=\"home-base-hero--grid-container\">\r\n                    <Carousel\r\n                        name={`${this.props.carouselName}-return-visitor`}\r\n                        nextFocus=\"#budget-calculator-section\"\r\n                        ariaLabel={this.props.ariaLabel}\r\n                        leftAligned={this.props.leftAligned}\r\n                    >\r\n                        {this.state.carouselItems.map((item) => item)}\r\n                    </Carousel>\r\n                </div>\r\n            </div>\r\n        );\r\n    }\r\n}\r\n","import * as React from 'react';\r\nimport { placeholderTileIcon } from '../../../pages/home/utilities/svg';\r\nimport { SkeletonVehicleTile } from './SkeletonVehicleTile';\r\nimport Carousel from './Carousel';\r\n\r\nexport const SearchedPlaceholderCarousel: React.FC = () => {\r\n    return (\r\n        <div className=\"home-base-hero--tab-placeholder home-base-hero--searched-tab-placeholder carousel-container\">\r\n            <ul className=\"tab-placeholder--list\">\r\n                <Carousel\r\n                    name=\"searched-auth-tab-placeholder\"\r\n                    nextFocus=\"#budget-calculator-section\"\r\n                    ariaLabel=\"No Recent Searches\"\r\n                    leftAligned={false}\r\n                >\r\n                    <li\r\n                        className=\"tab-placeholder--list-item carousel__slide\"\r\n                        key=\"searched-auth-tab-placeholder-tile-1\"\r\n                    >\r\n                        <div className=\"carousel-slide-item\">\r\n                            <div className=\"tab-placeholder--icon\">{placeholderTileIcon}</div>\r\n                            <div className=\"tab-placeholder--supportive-copy\">Need help getting started?</div>\r\n                            <a href=\"/cars\" className=\"tab-placeholder--cta-button\">\r\n                                <button>Start here</button>\r\n                            </a>\r\n                        </div>\r\n                    </li>\r\n                    <li\r\n                        className=\"tab-placeholder--list-item tab-placeholder--skeleton carousel__slide\"\r\n                        key=\"searched-auth-tab-placeholder-tile-2\"\r\n                    >\r\n                        <div className=\"carousel-slide-item\">\r\n                            <SkeletonVehicleTile />\r\n                        </div>\r\n                    </li>\r\n                    <li\r\n                        className=\"tab-placeholder--list-item tab-placeholder--skeleton carousel__slide\"\r\n                        key=\"searched-auth-tab-placeholder-tile-3\"\r\n                    >\r\n                        <div className=\"carousel-slide-item\">\r\n                            <SkeletonVehicleTile />\r\n                        </div>\r\n                    </li>\r\n                    <li\r\n                        className=\"tab-placeholder--list-item tab-placeholder--skeleton carousel__slide\"\r\n                        key=\"searched-auth-tab-placeholder-tile-4\"\r\n                    >\r\n                        <div className=\"carousel-slide-item\">\r\n                            <SkeletonVehicleTile />\r\n                        </div>\r\n                    </li>\r\n                </Carousel>\r\n            </ul>\r\n        </div>\r\n    );\r\n};\r\n","import * as React from 'react';\r\nimport { HomebaseTab, HOMEBASE_CAROUSELS, LOADING_SPINNER_CLASS } from '../../../utilities/constants';\r\nimport { IRecentSearchTile } from '../../../utilities/types';\r\nimport ReturnVisitorRecentSearchesCarousel from '../../../../../components/carousels/home-base-hero-carousel/ReturnVisitorRecentSearchesCarousel';\r\nimport { SearchedPlaceholderCarousel } from '../../../../../components/carousels/home-base-hero-carousel/SearchedPlaceholderCarousel';\r\nimport LoadingSpinner from '../../../../../components/loading-spinner';\r\n\r\ninterface ISearchedCarouselProps {\r\n    isVisible: boolean;\r\n    recentSearchesList: IRecentSearchTile[];\r\n    isLoadingSearchedTab: boolean;\r\n    hasLoadedSearchedTab: boolean;\r\n    leftAligned: boolean;\r\n}\r\n\r\nconst SearchedCarousel = (props: ISearchedCarouselProps) => {\r\n    const { isVisible, recentSearchesList, isLoadingSearchedTab, hasLoadedSearchedTab, leftAligned } = props;\r\n\r\n    return hasLoadedSearchedTab && recentSearchesList.length > 0 ? (\r\n        <ReturnVisitorRecentSearchesCarousel\r\n            carouselName={HOMEBASE_CAROUSELS.byId[HomebaseTab.Searched].carouselName}\r\n            analyticsName={HOMEBASE_CAROUSELS.byId[HomebaseTab.Searched].carouselAnalyticsName}\r\n            isVisible={isVisible}\r\n            recentSearchTileList={recentSearchesList}\r\n            ariaLabel={HOMEBASE_CAROUSELS.byId[HomebaseTab.Searched].ariaLabel}\r\n            leftAligned={leftAligned}\r\n        />\r\n    ) : isLoadingSearchedTab ? (\r\n        <LoadingSpinner className={LOADING_SPINNER_CLASS} />\r\n    ) : hasLoadedSearchedTab && recentSearchesList.length === 0 ? (\r\n        <SearchedPlaceholderCarousel />\r\n    ) : null;\r\n};\r\n\r\nexport default SearchedCarousel;\r\n","import * as React from 'react';\r\nimport { getExperimentBucket } from '../utilities/experiments';\r\n\r\nexport interface IServerSideExperimentContext {\r\n    bucketName: string;\r\n    experimentName: string;\r\n};\r\n\r\ninterface IServerSideExperimentContextProps {\r\n    children: React.ReactNode;\r\n};\r\n\r\nexport const emptyServerSideExperimentContext = {\r\n    bucketName: '',\r\n    experimentName: ''\r\n};\r\n\r\nexport const ServerSideExperimentContext = React.createContext<IServerSideExperimentContext>(emptyServerSideExperimentContext);\r\n\r\nexport const ServerSideExperimentProvider = (props: IServerSideExperimentContextProps) => {\r\n    const value = getExperimentBucket() || emptyServerSideExperimentContext;\r\n    return (\r\n        <ServerSideExperimentContext.Provider value={value}>\r\n            {props.children}\r\n        </ServerSideExperimentContext.Provider>\r\n    );\r\n};\r\n","import { IServerSideExperimentContext } from '../campaigns/ServerSideExperimentContext';\r\nimport { Names } from '../HeroRefactor/Store/models';\r\n\r\ndeclare global {\r\n    interface Window {\r\n        kmxExperiments: any;\r\n    }\r\n}\r\n\r\nexport const getExperimentBucket = (): IServerSideExperimentContext | null => {\r\n    if (window.kmxExperiments) {\r\n        const urlParams = new URLSearchParams(window.location.search);\r\n\r\n        const preferredTestBucket = null;\r\n\r\n        if (preferredTestBucket) {\r\n            window.kmxExperiments.bucketName = preferredTestBucket;\r\n        }\r\n\r\n        const { bucketName, experimentName } = window.kmxExperiments;\r\n\r\n        return { bucketName, experimentName };\r\n    }\r\n\r\n    return null;\r\n};\r\n","import { IRecentSearch, IRecentSearchApiResponse } from './types';\r\nimport { getVisitorId } from '../utilities/visitor-cookie';\r\nimport { getMyKmxUserId } from '../utilities/cookieHelper';\r\n\r\nexport function getRecentSearches(): Promise<IRecentSearch[]> {\r\n    const visitorId = getVisitorId();\r\n    const userId = getMyKmxUserId();\r\n    try {\r\n        if (visitorId) {\r\n            const url = `/home/api/recentsearches?visitorId=${visitorId}&userId=${userId}`;\r\n            return fetch(url)\r\n                .then((response) => response.json())\r\n                .then((data: IRecentSearchApiResponse) => {\r\n                    if (data && data.items && data.items.length > 0) {\r\n                        return data.items;\r\n                    }\r\n                    return [];\r\n                })\r\n                .catch((err) => {\r\n                    console.error(err);\r\n                    return [];\r\n                });\r\n        }\r\n        return Promise.resolve([]);\r\n    } catch {\r\n        return Promise.resolve([]);\r\n    }\r\n}\r\n","import * as React from 'react';\r\nimport { gsap, TweenMax, TimelineMax } from 'gsap';\r\nimport { IRecentSearchTile } from '../../utilities/types';\r\nimport { IVehicleTile } from '../../../../types/vehicleTile';\r\nimport { fetchAndBuildRecommendedVehicleTiles } from '../../utilities/recommendationsBuilder';\r\nimport {\r\n    HomebaseTab,\r\n    HOMEBASE_CAROUSELS,\r\n    TAB_LIST_ARIA_LABEL,\r\n    MOBILE_TABLET_BREAKPOINT,\r\n} from '../../utilities/constants';\r\nimport * as analytics from '../../../../utilities/analytics';\r\nimport classNames from 'classnames';\r\nimport RecommendedCarousel from './carousels/RecommendedCarousel';\r\nimport RecentlyViewedCarousel from './carousels/RecentlyViewedCarousel';\r\nimport SearchedCarousel from './carousels/SearchedCarousel';\r\nimport { ServerSideExperimentContext } from '../../campaigns/ServerSideExperimentContext';\r\nimport { removeViewedVehicleItemLocalStorage } from '../../../../pages/home/utilities/viewedVehiclesTileBuilder';\r\nimport { getRecentSearches } from '../../../../api/recent-search-api';\r\nimport { ITrackingPayload } from '../../../../types/analytics';\r\nimport { ANALYTICS_CONSTANTS } from '../../../../utilities/analytics';\r\n\r\ninterface IHomeBaseTabsProps {\r\n    viewedVehicleList: IVehicleTile[];\r\n    favoritedVehicleList: IVehicleTile[];\r\n    favoritedStockNumberList: number[];\r\n    stockNumbersPendingFavoritesUpdate: number[];\r\n    onOpenSnackBar: (text: string) => void;\r\n}\r\n\r\ninterface IHomeBaseTabsState {\r\n    activeTabIndex: number;\r\n    activeTabRef: any;\r\n    defaultTabRef: any;\r\n    tabListOrder: number[];\r\n    recommendedVehicleList: IVehicleTile[];\r\n    viewedList: IVehicleTile[];\r\n    isLoadingRecommendedTab: boolean;\r\n    hasLoadedRecommendedTab: boolean;\r\n    recentSearchesList: IRecentSearchTile[];\r\n    isLoadingSearchedTab: boolean;\r\n    hasLoadedSearchedTab: boolean;\r\n    persistedFavoritedStockNumberList: number[];\r\n    persistedFavoritedVehicleList: IVehicleTile[];\r\n    pillCurrentlyTransitioning: boolean;\r\n}\r\n\r\nexport default class HomeBaseTabs extends React.Component<IHomeBaseTabsProps, IHomeBaseTabsState> {\r\n    tabButtonRefs: any;\r\n    animatedActiveStateIndicator: any;\r\n    pillTransition: any; // gsap timeline\r\n    static contextType?: React.Context<any> | undefined = ServerSideExperimentContext;\r\n    context!: React.ContextType<typeof ServerSideExperimentContext>;\r\n\r\n    constructor(props: IHomeBaseTabsProps) {\r\n        super(props);\r\n\r\n        this.tabButtonRefs = {\r\n            [HomebaseTab.RecentlyViewed]: React.createRef(),\r\n            [HomebaseTab.Recommended]: React.createRef(),\r\n            [HomebaseTab.Searched]: React.createRef(),\r\n        };\r\n\r\n        this.animatedActiveStateIndicator = React.createRef();\r\n\r\n        this.state = {\r\n            activeTabIndex: 0,\r\n            activeTabRef: this.tabButtonRefs[HOMEBASE_CAROUSELS.defaultCarouselOrder[0]],\r\n            defaultTabRef: this.tabButtonRefs[HOMEBASE_CAROUSELS.defaultCarouselOrder[0]],\r\n            tabListOrder: HOMEBASE_CAROUSELS.defaultCarouselOrder,\r\n            recommendedVehicleList: [],\r\n            viewedList: this.props.viewedVehicleList,\r\n            isLoadingRecommendedTab: false,\r\n            hasLoadedRecommendedTab: false,\r\n            recentSearchesList: [],\r\n            isLoadingSearchedTab: false,\r\n            hasLoadedSearchedTab: false,\r\n            persistedFavoritedStockNumberList: this.props.favoritedStockNumberList,\r\n            persistedFavoritedVehicleList: this.props.favoritedVehicleList,\r\n            pillCurrentlyTransitioning: false,\r\n        };\r\n\r\n        this.handleTabChange = this.handleTabChange.bind(this);\r\n        this.loadRecommendationsTab = this.loadRecommendationsTab.bind(this);\r\n        this.loadSearchedTab = this.loadSearchedTab.bind(this);\r\n        this.updateViewedTiles = this.updateViewedTiles.bind(this);\r\n        this.handleKeyPress = this.handleKeyPress.bind(this);\r\n    }\r\n\r\n    private initActiveStateIndicator() {\r\n        const refPositionInfo = this.state.defaultTabRef.current.getBoundingClientRect();\r\n\r\n        // set initial dimensions and position\r\n        gsap.set(this.animatedActiveStateIndicator.current, {\r\n            width: refPositionInfo.width,\r\n            x: refPositionInfo.x,\r\n            display: 'none',\r\n        });\r\n    }\r\n\r\n    private transitionPillActiveState(ref: any, nextTabId: number) {\r\n        const newTabPositionInfo = ref.current.getBoundingClientRect();\r\n        const currentTabPositionInfo = this.state.activeTabRef.current.getBoundingClientRect();\r\n        const activeStateIndicator = this.animatedActiveStateIndicator.current;\r\n\r\n        if (window.innerWidth < MOBILE_TABLET_BREAKPOINT) {\r\n            this.pillTransition = new TimelineMax({\r\n                onStart: () => {\r\n                    this.setState({\r\n                        pillCurrentlyTransitioning: true,\r\n                    });\r\n                },\r\n                onComplete: () => {\r\n                    this.setState(\r\n                        {\r\n                            pillCurrentlyTransitioning: false,\r\n                        },\r\n                        () => {\r\n                            TweenMax.set(activeStateIndicator, { display: 'none' });\r\n                        }\r\n                    );\r\n                },\r\n            });\r\n\r\n            // set dimensions and location of CURRENT active tab (start position of animation)\r\n            this.pillTransition.set(activeStateIndicator, {\r\n                width: currentTabPositionInfo.width,\r\n                x: currentTabPositionInfo.x,\r\n                display: 'block',\r\n            });\r\n\r\n            if (this.state.tabListOrder.indexOf(nextTabId) > this.state.activeTabIndex) {\r\n                // moving from left to right\r\n\r\n                // start transition of width\r\n                this.pillTransition.to(activeStateIndicator, 0.25, {\r\n                    width: currentTabPositionInfo.width + newTabPositionInfo.width,\r\n                    ease: 'power2.inOut',\r\n                });\r\n\r\n                // catch up x position during width transition (drag effect)\r\n                this.pillTransition.to(\r\n                    activeStateIndicator,\r\n                    0.25,\r\n                    {\r\n                        width: newTabPositionInfo.width,\r\n                        x: newTabPositionInfo.x,\r\n                        ease: 'power2.inOut',\r\n                    },\r\n                    '-=.125'\r\n                );\r\n            } else {\r\n                // moving from right to left\r\n\r\n                // start transition of width and x value\r\n                this.pillTransition.to(activeStateIndicator, 0.25, {\r\n                    width: currentTabPositionInfo.width + newTabPositionInfo.width,\r\n                    x: newTabPositionInfo.x,\r\n                    ease: 'power2.inOut',\r\n                });\r\n\r\n                // reduce width\r\n                this.pillTransition.to(\r\n                    activeStateIndicator,\r\n                    0.25,\r\n                    {\r\n                        width: newTabPositionInfo.width,\r\n                        ease: 'power2.inOut',\r\n                    },\r\n                    '-=.125'\r\n                );\r\n            }\r\n\r\n            // add timing buffer to end of timeline (dummy tween)\r\n            this.pillTransition.set({}, {}, 0.5);\r\n        }\r\n    }\r\n\r\n    private handleKeyPress(label: string, currentTabId: number, event: React.KeyboardEvent<HTMLButtonElement>) {\r\n        let currentTabIndex = this.state.tabListOrder.indexOf(currentTabId);\r\n        let nextTabIndex = -1;\r\n        const atStartOfTabList = currentTabIndex === 0;\r\n        const atEndOfTabList = currentTabIndex === this.state.tabListOrder.length - 1;\r\n\r\n        switch (event.key) {\r\n            case 'ArrowRight':\r\n                nextTabIndex = atEndOfTabList ? 0 : ++currentTabIndex;\r\n                break;\r\n            case 'ArrowLeft':\r\n                nextTabIndex = atStartOfTabList ? this.state.tabListOrder.length - 1 : --currentTabIndex;\r\n                break;\r\n            default:\r\n        }\r\n\r\n        if (nextTabIndex !== -1) {\r\n            const nextTabId = this.state.tabListOrder[nextTabIndex];\r\n            const nextTabRef = this.tabButtonRefs[nextTabId];\r\n\r\n            this.handleTabChange(label, nextTabId, nextTabRef);\r\n            nextTabRef.current.focus();\r\n        }\r\n    }\r\n\r\n    private handleTabChange(label: string, nextTabId: number, nextTabRef: any) {\r\n        const newState: any = {\r\n            activeTabIndex: this.state.tabListOrder.indexOf(nextTabId),\r\n            activeTabRef: nextTabRef,\r\n        };\r\n\r\n        this.transitionPillActiveState(nextTabRef, nextTabId);\r\n\r\n        this.setState(newState, () => {\r\n            if (nextTabId === HomebaseTab.Searched && !this.state.hasLoadedSearchedTab) {\r\n                this.loadSearchedTab();\r\n            } else if (nextTabId === HomebaseTab.Recommended && !this.state.hasLoadedRecommendedTab) {\r\n                this.loadRecommendationsTab();\r\n            }\r\n        });\r\n\r\n        const payload: ITrackingPayload = {\r\n            event: ANALYTICS_CONSTANTS.EVENTS.CLICK.CTA,\r\n            linkDetails: {\r\n                name: label.trimStart(),\r\n                position: 'homepage',\r\n            },\r\n        };\r\n\r\n        analytics.trackEDDL(payload);\r\n    }\r\n\r\n    private loadRecommendationsTab() {\r\n        this.setState({ isLoadingRecommendedTab: true }, () => {\r\n            fetchAndBuildRecommendedVehicleTiles(\r\n                (recommendedVehicleTileList: IVehicleTile[]) => {\r\n                    this.setState({\r\n                        isLoadingRecommendedTab: false,\r\n                        hasLoadedRecommendedTab: true,\r\n                        recommendedVehicleList: recommendedVehicleTileList,\r\n                    });\r\n                },\r\n                this.props.favoritedStockNumberList,\r\n                this.props.viewedVehicleList\r\n            );\r\n        });\r\n    }\r\n\r\n    private loadSearchedTab() {\r\n        this.setState({ isLoadingSearchedTab: true }, async () => {\r\n            const recentSearchTileList = await getRecentSearches();\r\n            const newState: any = {\r\n                isLoadingSearchedTab: false,\r\n                hasLoadedSearchedTab: true,\r\n            };\r\n            if (recentSearchTileList.length > 0) {\r\n                newState.recentSearchesList = recentSearchTileList;\r\n            }\r\n            this.setState(newState);\r\n        });\r\n    }\r\n\r\n    private updateViewedTiles(tileToRemove: IVehicleTile) {\r\n        const newViewedTileList: IVehicleTile[] = [];\r\n        this.state.viewedList.forEach((tileData) => {\r\n            if (tileData.stockNumber === tileToRemove.stockNumber) {\r\n                return;\r\n            } else {\r\n                newViewedTileList.push(tileData);\r\n            }\r\n        });\r\n\r\n        removeViewedVehicleItemLocalStorage(tileToRemove);\r\n        this.setState({ viewedList: newViewedTileList }, () => {\r\n            this.props.onOpenSnackBar('Removed from your recently viewed');\r\n        });\r\n    }\r\n\r\n    public componentDidMount(): void {\r\n        setTimeout(function () {\r\n            const payload: ITrackingPayload = {\r\n                event: ANALYTICS_CONSTANTS.EVENTS.PAGE.STATE,\r\n                pageState: {\r\n                    pageState: 'hp-HeroHomebaseMVP-Viewed',\r\n                },\r\n            };\r\n            analytics.trackEDDL(payload);\r\n        }, ANALYTICS_CONSTANTS.PAGE_STATE_LOAD_TIME);\r\n\r\n        this.initActiveStateIndicator();\r\n    }\r\n\r\n    public componentDidUpdate(prevProps: IHomeBaseTabsProps, prevState: IHomeBaseTabsState): void {\r\n        if (\r\n            this.props.favoritedStockNumberList.length &&\r\n            prevState.persistedFavoritedStockNumberList !== this.state.persistedFavoritedStockNumberList\r\n        ) {\r\n            this.setState({\r\n                persistedFavoritedStockNumberList: prevProps.favoritedStockNumberList,\r\n            });\r\n        }\r\n        if (\r\n            this.props.favoritedVehicleList.length &&\r\n            prevState.persistedFavoritedVehicleList !== this.state.persistedFavoritedVehicleList\r\n        ) {\r\n            this.setState({\r\n                persistedFavoritedVehicleList: prevProps.favoritedVehicleList,\r\n            });\r\n        }\r\n    }\r\n\r\n    private renderTabList(): React.ReactNode {\r\n        const tabButtons: React.ReactElement[] = [];\r\n\r\n        this.state.tabListOrder.forEach((tabId: number, index) => {\r\n            const tabRef = this.tabButtonRefs[tabId],\r\n                label = HOMEBASE_CAROUSELS.byId[tabId].label,\r\n                icon = HOMEBASE_CAROUSELS.byId[tabId].tabButtonIcon,\r\n                isActiveTab = this.state.activeTabIndex === this.state.tabListOrder.indexOf(tabId),\r\n                tabButtonId = HOMEBASE_CAROUSELS.byId[tabId].tabButtonId,\r\n                tabPanelId = HOMEBASE_CAROUSELS.byId[tabId].tabPanelElementId,\r\n                ariaLabel = HOMEBASE_CAROUSELS.byId[tabId].ariaLabel;\r\n\r\n            tabButtons.push(\r\n                <button\r\n                    key={index}\r\n                    ref={tabRef}\r\n                    className={classNames('tab tab--min-width', {\r\n                        'tab--active': isActiveTab,\r\n                    })}\r\n                    role=\"tab\"\r\n                    tabIndex={isActiveTab ? 0 : -1}\r\n                    aria-label={ariaLabel}\r\n                    aria-selected={isActiveTab ? 'true' : 'false'}\r\n                    aria-controls={tabPanelId}\r\n                    id={tabButtonId}\r\n                    onClick={(e) => {\r\n                        this.handleTabChange(label, tabId, tabRef);\r\n                    }}\r\n                    onKeyDown={(keyboardEvent) => {\r\n                        this.handleKeyPress(label, tabId, keyboardEvent);\r\n                    }}\r\n                >\r\n                    <span className=\"tab__content\">\r\n                        <span className=\"tab__text-label\">\r\n                            <span className=\"home-base-hero--personalized-tabs-icon\">{icon}</span>\r\n                            {label}\r\n                        </span>\r\n                    </span>\r\n                    <span\r\n                        className={classNames('tab-indicator', {\r\n                            'tab-indicator--active': isActiveTab,\r\n                        })}\r\n                    />\r\n                </button>\r\n            );\r\n        });\r\n\r\n        return (\r\n            <div className=\"home-base-hero--personalized-tabs-container\">\r\n                <div className=\"hp-tab-bar\" role=\"tablist\" aria-label={TAB_LIST_ARIA_LABEL}>\r\n                    <div\r\n                        ref={this.animatedActiveStateIndicator}\r\n                        className=\"home-base-hero--personalized-tabs-active-state\"\r\n                    />\r\n                    {tabButtons.map((tab) => tab)}\r\n                </div>\r\n            </div>\r\n        );\r\n    }\r\n\r\n    private renderTabPanels(): React.ReactNode {\r\n        const tabPanels: {\r\n            allIds: number[];\r\n            byId: {\r\n                [key: number]: { render: () => any };\r\n            };\r\n        } = {\r\n            allIds: [HomebaseTab.RecentlyViewed, HomebaseTab.Searched, HomebaseTab.Recommended],\r\n            byId: {\r\n                [HomebaseTab.RecentlyViewed]: {\r\n                    render: () => (\r\n                        <RecentlyViewedCarousel\r\n                            onOpenSnackBar={this.props.onOpenSnackBar}\r\n                            isVisible={\r\n                                this.state.activeTabIndex ===\r\n                                this.state.tabListOrder.indexOf(HomebaseTab.RecentlyViewed)\r\n                            }\r\n                            viewedVehicleList={[...this.state.viewedList, ...this.state.persistedFavoritedVehicleList]}\r\n                            stockNumbersPendingFavoritesUpdate={this.props.stockNumbersPendingFavoritesUpdate}\r\n                            updatedViewedTiles={this.updateViewedTiles}\r\n                        />\r\n                    ),\r\n                },\r\n                [HomebaseTab.Searched]: {\r\n                    render: () => (\r\n                        <SearchedCarousel\r\n                            isVisible={\r\n                                this.state.activeTabIndex === this.state.tabListOrder.indexOf(HomebaseTab.Searched)\r\n                            }\r\n                            recentSearchesList={this.state.recentSearchesList}\r\n                            isLoadingSearchedTab={this.state.isLoadingSearchedTab}\r\n                            hasLoadedSearchedTab={this.state.hasLoadedSearchedTab}\r\n                            leftAligned={false}\r\n                        />\r\n                    ),\r\n                },\r\n                [HomebaseTab.Recommended]: {\r\n                    render: () => (\r\n                        <RecommendedCarousel\r\n                            hasLoadedRecommendedTab={this.state.hasLoadedRecommendedTab}\r\n                            recommendedVehicleList={this.state.recommendedVehicleList}\r\n                            isVisible={\r\n                                this.state.activeTabIndex === this.state.tabListOrder.indexOf(HomebaseTab.Recommended)\r\n                            }\r\n                            favoritedStockNumberList={this.props.favoritedStockNumberList}\r\n                            isLoadingRecommendedTab={this.state.isLoadingRecommendedTab}\r\n                            stockNumbersPendingFavoritesUpdate={this.props.stockNumbersPendingFavoritesUpdate}\r\n                            onOpenSnackBar={this.props.onOpenSnackBar}\r\n                        />\r\n                    ),\r\n                },\r\n            },\r\n        };\r\n\r\n        return tabPanels.allIds.map((panelId) => (\r\n            <div\r\n                key={panelId}\r\n                className={classNames('hp-tab-content', {\r\n                    active: this.state.activeTabIndex === this.state.tabListOrder.indexOf(panelId),\r\n                    hidden: !(this.state.activeTabIndex === this.state.tabListOrder.indexOf(panelId)),\r\n                })}\r\n                id={HOMEBASE_CAROUSELS.byId[panelId].tabPanelElementId}\r\n                role=\"tabpanel\"\r\n                aria-labelledby={HOMEBASE_CAROUSELS.byId[panelId].tabButtonId}\r\n                aria-label={HOMEBASE_CAROUSELS.byId[panelId].ariaLabel}\r\n            >\r\n                {tabPanels.byId[panelId].render()}\r\n            </div>\r\n        ));\r\n    }\r\n\r\n    public render(): React.ReactNode {\r\n        return (\r\n            <div className=\"home-base-hero--main-content home-base-hero--personalized-tabs\">\r\n                {this.renderTabList()}\r\n                {this.renderTabPanels()}\r\n            </div>\r\n        );\r\n    }\r\n}\r\n","import { useEffect } from 'react';\r\nimport { TransfersTile } from '../../utilities/transfersTileBuilder';\r\nimport './hero-vehicle-transfer-modal.scss';\r\n\r\nconst truncate = (words: string, maxLength: number) => {\r\n    if (words?.length > maxLength) {\r\n        return `${words.slice(0, maxLength)}…`;\r\n    }\r\n    return words;\r\n};\r\n\r\ninterface HomeBaseTransferStatusModalProps {\r\n    transfersTile: TransfersTile;\r\n}\r\n\r\nexport default function HomeBaseTransferStatusModal(props: HomeBaseTransferStatusModalProps) {\r\n    const { vehicle } = props.transfersTile;\r\n    //TODO make a function for generating title and consider null values\r\n    const productTitle = `${vehicle.year} ${vehicle.make} ${vehicle.model} ${\r\n        vehicle.trim === null ? '' : vehicle.trim\r\n    }`;\r\n    const mileage = `${Math.ceil(vehicle.mileage / 1000)}K`;\r\n\r\n    return (\r\n        <hzn-card\r\n            as=\"aside\"\r\n            border-radius=\"large\"\r\n            padding=\"none\"\r\n            id=\"test__transfer-modal\"\r\n            class=\"transfer-status\"\r\n            aria-label=\"Your Car Transfer Status : Shipping\"\r\n        >\r\n            <aside className=\"transfer-status__inner-wrapper\" aria-label={`Your vehicle is now shipping`}>\r\n                <div className=\"transfer-status__main-image-wrapper\">\r\n                    <a\r\n                        className=\"transfer-status__image-link\"\r\n                        href={`/car/${vehicle.stockNumber}`}\r\n                        title={productTitle}\r\n                    >\r\n                        <img\r\n                            alt=\"\"\r\n                            className=\"transfer-status__main-image-wrapper__image\"\r\n                            src={`https://img2.carmax.com/assets/${vehicle.stockNumber}/hero.jpg?width=400&height=300`}\r\n                        />\r\n                    </a>\r\n                </div>\r\n                <div className=\"transfer-status__main\" aria-label=\"Contents\">\r\n                    <a href={`/car/${vehicle.stockNumber}`} title={productTitle}>\r\n                        <header className=\"transfer-status__header\">\r\n                            <hzn-badge label=\"Shipping\" tone=\"positive\" class=\"transfer-status__badge\" intense>\r\n                                <div\r\n                                    slot=\"leading-icon\"\r\n                                    style={{ background: '#fff', borderRadius: '50%', height: '6px', width: '6px' }}\r\n                                ></div>\r\n                            </hzn-badge>\r\n                            <h5\r\n                                id=\"transfer-status__heading\"\r\n                                className=\"transfer-status__heading\"\r\n                                aria-label={productTitle}\r\n                                title={productTitle}\r\n                            >\r\n                                {truncate(productTitle, 40)}\r\n                            </h5>\r\n                        </header>\r\n                        <div className=\"transfer-status__details\">\r\n                            <div className=\"transfer-status__price\" aria-label=\"price\">\r\n                                <span className=\"transfer-status__price__mark\">$</span>\r\n                                &nbsp;\r\n                                <span className=\"transfer-status__price__value\">\r\n                                    {vehicle.basePrice.toLocaleString()}\r\n                                </span>\r\n                                <span>*</span>\r\n                            </div>\r\n                            <div className=\"transfer-status__details__divider\">|</div>\r\n                            <div className=\"transfer-status__details__distance\" aria-label=\"distance\">\r\n                                <span className=\"transfer-status__details__distance__value\">{mileage}</span>\r\n                                &nbsp;\r\n                                <span className=\"transfer-status__details__distance__unit\">mi</span>\r\n                            </div>\r\n                        </div>\r\n                    </a>\r\n                    <hzn-button\r\n                        id=\"test__transfer-modal__button\"\r\n                        class=\"transfer-status__btn\"\r\n                        href={`/activity/transfer/track?stockNumber=${vehicle.stockNumber}`}\r\n                        variant=\"secondary\"\r\n                        full-width\r\n                    >\r\n                        track your order\r\n                    </hzn-button>\r\n                </div>\r\n            </aside>\r\n        </hzn-card>\r\n    );\r\n}\r\n","import * as React from 'react';\r\nimport classNames from 'classnames';\r\nimport initCarousel from '../../carousel/index';\r\nimport { TinySliderInstance, TinySliderInfo } from 'tiny-slider/src/tiny-slider';\r\nimport { largeBreakpoint, mediumBreakpoint } from '../../home-base-hero-carousel/constants';\r\n\r\ninterface ICarouselProps {\r\n    children: any; //React.ReactElement[];\r\n    name: string;\r\n    nextFocus: string;\r\n    ariaLabel?: string;\r\n    leftAligned?: boolean;\r\n}\r\n\r\ninterface ICarouselState {\r\n    index: number;\r\n    slideBy: number;\r\n    slideCount: number;\r\n    showNextButton: boolean;\r\n    showPrevButton: boolean;\r\n}\r\n\r\ninterface INextPrevHoverData {\r\n    slideIsHovered: boolean;\r\n    nextButtonIsHovered: boolean;\r\n    prevButtonIsHovered: boolean;\r\n    slideIndex: number;\r\n    el: any;\r\n}\r\n\r\nconst ACTIVE_SLIDE_COUNT = 4;\r\nconst SLIDE_GUTTER_WIDTH = 8;\r\n\r\nexport default class Carousel extends React.Component<ICarouselProps, ICarouselState> {\r\n    constructor(props: any) {\r\n        super(props);\r\n\r\n        this.state = {\r\n            index: 0,\r\n            slideBy: 0,\r\n            slideCount: 0,\r\n            showNextButton: false,\r\n            showPrevButton: false,\r\n        };\r\n\r\n        this.handleIndexChanged = this.handleIndexChanged.bind(this);\r\n        this.initTinySlider = this.initTinySlider.bind(this);\r\n    }\r\n\r\n    private _tinySlider?: TinySliderInstance;\r\n    private _removeEventHandlers?: () => void;\r\n\r\n    public componentDidMount(): void {\r\n        this.initTinySlider(this.props.name, this.props.nextFocus);\r\n        if (this._tinySlider) {\r\n            const sliderInfo = this._tinySlider.getInfo();\r\n            this.setState({\r\n                index: sliderInfo.index,\r\n                slideBy: sliderInfo.slideBy,\r\n                slideCount: sliderInfo.slideCount,\r\n            });\r\n        }\r\n    }\r\n\r\n    public componentWillUnmount(): void {\r\n        if (this._tinySlider) this._tinySlider.destroy();\r\n        if (this._removeEventHandlers) this._removeEventHandlers();\r\n    }\r\n\r\n    private initTinySlider(name: string, nextFocus: string): void {\r\n        const { children } = this.props;\r\n        const { tinySlider, removeEventHandlers } = initCarousel({\r\n            nextFocus: nextFocus,\r\n            container: `#${name}-carousel-slides`,\r\n            autoWidth: true,\r\n            nextButton: `#${name}-carousel__next`,\r\n            prevButton: `#${name}-carousel__prev`,\r\n            prevFocus: `#pre-${name}-carousel`,\r\n            gutter: SLIDE_GUTTER_WIDTH,\r\n            slideBy: 'page',\r\n            items: ACTIVE_SLIDE_COUNT,\r\n            responsive: {\r\n                [largeBreakpoint]: {},\r\n                [mediumBreakpoint]: {\r\n                    center: false,\r\n                    gutter: 24,\r\n                },\r\n                0: {\r\n                    center: children.length > 1 && !this.props.leftAligned ? true : false,\r\n                },\r\n            },\r\n        });\r\n\r\n        this._tinySlider = tinySlider;\r\n        this._removeEventHandlers = removeEventHandlers;\r\n        if (this._tinySlider) {\r\n            this._tinySlider.events.on('indexChanged', this.handleIndexChanged);\r\n        }\r\n    }\r\n\r\n    private handleIndexChanged(info: TinySliderInfo) {\r\n        this.setState({ index: info.index, slideBy: info.slideBy, slideCount: info.slideCount });\r\n    }\r\n\r\n    private showSlideNavButton(hoverEvent: INextPrevHoverData): void {\r\n        const firstVisibleTileIndex = this.state.index - 1;\r\n        const targetClientRects = hoverEvent.el.getBoundingClientRect();\r\n\r\n        function firstSlideIsHovered() {\r\n            return hoverEvent.slideIsHovered && hoverEvent.slideIndex <= firstVisibleTileIndex;\r\n        }\r\n\r\n        function lastSlideIsHovered() {\r\n            const EXTRA_THRESHOLD = 80;\r\n            const vehicleTileLocationPlusExtraThreshold =\r\n                targetClientRects.x + targetClientRects.width + (SLIDE_GUTTER_WIDTH + EXTRA_THRESHOLD);\r\n            return targetClientRects.x < window.innerWidth && vehicleTileLocationPlusExtraThreshold > window.innerWidth;\r\n        }\r\n\r\n        this.setState({\r\n            showNextButton: lastSlideIsHovered() || hoverEvent.nextButtonIsHovered ? true : false,\r\n            showPrevButton: firstSlideIsHovered() || hoverEvent.prevButtonIsHovered ? true : false,\r\n        });\r\n    }\r\n\r\n    private hideSlideNavButton(): void {\r\n        if (this.state.showNextButton === true || this.state.showPrevButton === true) {\r\n            this.setState({\r\n                showNextButton: false,\r\n                showPrevButton: false,\r\n            });\r\n        }\r\n    }\r\n\r\n    componentDidUpdate(prevProps: ICarouselProps) {\r\n        if (this._tinySlider && this.props.children.length !== prevProps.children.length) {\r\n            this._tinySlider.rebuild();\r\n        }\r\n    }\r\n\r\n    public render(): React.ReactNode {\r\n        const { children, name, nextFocus } = this.props;\r\n        const { showNextButton, showPrevButton } = this.state;\r\n\r\n        return (\r\n            <>\r\n                <a id={`pre-${name}-carousel`} className=\"skip-link\" href={nextFocus}>\r\n                    {`Skip ${this.props.ariaLabel ? this.props.ariaLabel : name.replace(/-/g, ' ')} Carousel`}\r\n                </a>\r\n                <div\r\n                    className={classNames('carousel max-width--xl', {\r\n                        ['scrollable']: showPrevButton && showNextButton,\r\n                    })}\r\n                >\r\n                    <div\r\n                        id={`${name}-carousel-slides`}\r\n                        data-carousel-length={React.Children.count(children)}\r\n                        className={classNames('carousel__slides', {\r\n                            ['carousel-slides__centered']: children.length < 5,\r\n                        })}\r\n                    >\r\n                        {React.Children.map(children, (child: React.ReactChild, index: number) => (\r\n                            <div\r\n                                className=\"carousel__slide\"\r\n                                data-is-current-slide={this.state.index === index ? true : false}\r\n                                key={`${index}-slide`}\r\n                                onMouseEnter={(event: any) =>\r\n                                    this.showSlideNavButton({\r\n                                        slideIsHovered: true,\r\n                                        nextButtonIsHovered: false,\r\n                                        prevButtonIsHovered: false,\r\n                                        slideIndex: index,\r\n                                        el: event.target,\r\n                                    })\r\n                                }\r\n                                onMouseLeave={() => this.hideSlideNavButton()}\r\n                            >\r\n                                {child}\r\n                            </div>\r\n                        ))}\r\n                    </div>\r\n                </div>\r\n\r\n                <button\r\n                    id={`${name}-carousel__prev`}\r\n                    className={classNames('kmx-fab kmx-fab--secondary carousel__prev', {\r\n                        'carousel-prev-button__hidden': !showPrevButton,\r\n                    })}\r\n                    onMouseEnter={(event: any) =>\r\n                        this.showSlideNavButton({\r\n                            slideIsHovered: false,\r\n                            nextButtonIsHovered: false,\r\n                            prevButtonIsHovered: true,\r\n                            slideIndex: this.state.index,\r\n                            el: event.target,\r\n                        })\r\n                    }\r\n                    onMouseLeave={() => this.hideSlideNavButton()}\r\n                    tabIndex={-1}\r\n                >\r\n                    <span className=\"visually-hidden\">Previous Slide</span>\r\n                    <svg viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\r\n                        <path d=\"M15.41 16.09l-4.58-4.59 4.58-4.59L14 5.5l-6 6 6 6z\" />\r\n                        <path d=\"M0-.5h24v24H0z\" fill=\"none\" />\r\n                    </svg>\r\n                </button>\r\n                <button\r\n                    id={`${name}-carousel__next`}\r\n                    className={classNames('kmx-fab kmx-fab--secondary carousel__next', {\r\n                        'carousel-next-button__hidden': !showNextButton,\r\n                    })}\r\n                    onMouseEnter={(event: any) =>\r\n                        this.showSlideNavButton({\r\n                            slideIsHovered: false,\r\n                            nextButtonIsHovered: true,\r\n                            prevButtonIsHovered: false,\r\n                            slideIndex: this.state.index,\r\n                            el: event.target,\r\n                        })\r\n                    }\r\n                    onMouseLeave={() => this.hideSlideNavButton()}\r\n                    tabIndex={-1}\r\n                >\r\n                    <span className=\"visually-hidden\">Next Slide</span>\r\n                    <svg viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\r\n                        <path d=\"M8.59 16.34l4.58-4.59-4.58-4.59L10 5.75l6 6-6 6z\" />\r\n                        <path d=\"M0-.25h24v24H0z\" fill=\"none\" />\r\n                    </svg>\r\n                </button>\r\n            </>\r\n        );\r\n    }\r\n}\r\n","import * as React from 'react';\r\n\r\nexport const SkeletonVehicleTile: React.FC = () => {\r\n    return (\r\n        <div className=\"skeleton-vehicle-tile\">\r\n            <svg\r\n                xmlns=\"http://www.w3.org/2000/svg\"\r\n                xmlnsXlink=\"http://www.w3.org/1999/xlink\"\r\n                width=\"266\"\r\n                height=\"323\"\r\n                viewBox=\"0 0 270 318\"\r\n                aria-hidden=\"true\"\r\n            >\r\n                <defs>\r\n                    <linearGradient\r\n                        x1=\"-338.24\"\r\n                        y1=\"1.44\"\r\n                        x2=\"-338.24\"\r\n                        y2=\"2.44\"\r\n                        gradientTransform=\"translate(91460 -466) scale(270 325)\"\r\n                        gradientUnits=\"userSpaceOnUse\"\r\n                    >\r\n                        <stop offset=\"0\" stopColor=\"#0c629a\" stopOpacity=\"0.08\" />\r\n                        <stop offset=\"1\" stopColor=\"#053361\" stopOpacity=\"0.08\" />\r\n                    </linearGradient>\r\n                </defs>\r\n                <path\r\n                    data-name=\"a2841865-5eac-424c-aea4-f3711d32ec34\"\r\n                    d=\"M0,0H270V325H0Z\"\r\n                    fillRule=\"evenodd\"\r\n                    fillOpacity={0}\r\n                />\r\n                <rect\r\n                    x=\"16\"\r\n                    y=\"247\"\r\n                    width=\"216\"\r\n                    height=\"24\"\r\n                    rx=\"8\"\r\n                    fill=\"#053361\"\r\n                    opacity=\"0.16\"\r\n                    style={{ isolation: 'isolate' }}\r\n                />\r\n                <path\r\n                    d=\"M24,215H153a8,8,0,0,0,0-16H24a8,8,0,0,0,0,16Z\"\r\n                    fill=\"#053361\"\r\n                    opacity=\"0.16\"\r\n                    style={{ isolation: 'isolate' }}\r\n                />\r\n                <path\r\n                    d=\"M226,293H22a6,6,0,0,0,0,12H226a6,6,0,0,0,0-12Z\"\r\n                    fill=\"#053361\"\r\n                    opacity=\"0.16\"\r\n                    style={{ isolation: 'isolate' }}\r\n                />\r\n                <path\r\n                    d=\"M24,239H153a8,8,0,0,0,0-16H24a8,8,0,0,0,0,16Z\"\r\n                    fill=\"#053361\"\r\n                    opacity=\"0.16\"\r\n                    style={{ isolation: 'isolate' }}\r\n                />\r\n                <rect width=\"270\" height=\"181\" fill=\"#053361\" opacity=\"0.16\" style={{ isolation: 'isolate' }} />\r\n            </svg>\r\n        </div>\r\n    );\r\n};\r\n","import BaseCarousel from './BaseCarousel';\r\nimport { SkeletonVehicleTile } from './SkeletonVehicleTile';\r\nimport { placeholderTileIcon } from '../../../../pages/home/utilities/svg';\r\n\r\ninterface IPlaceholderCarousel {\r\n    carouselName: string;\r\n    cardText?: string;\r\n    buttonText?: string;\r\n}\r\n\r\nexport const PlaceholderCarousel = ({ carouselName, cardText, buttonText }: IPlaceholderCarousel) => {\r\n    return (\r\n        <div className=\"home-base-hero--tab-placeholder\">\r\n            <ul className=\"tab-placeholder--list kmx-list\">\r\n                <BaseCarousel\r\n                    name={carouselName}\r\n                    nextFocus=\"#budget-calculator-section\"\r\n                    ariaLabel=\"No Viewed Vehicles Available\"\r\n                >\r\n                    <li className=\"tab-placeholder--list-item carousel__slide\" key={`${carouselName}-tile-0`}>\r\n                        <div className=\"carousel-slide-item\">\r\n                            <div className=\"tab-placeholder--icon\">{placeholderTileIcon}</div>\r\n                            <div className=\"tab-placeholder--supportive-copy kmx-typography--display-3\">{cardText}</div>\r\n                            <a href=\"/cars\" className=\"tab-placeholder--cta-button kmx-button kmx-button--primary\">\r\n                                {buttonText}\r\n                            </a>\r\n                        </div>\r\n                    </li>\r\n                    {Array.from({ length: 3 }, (_, index) => (\r\n                        <li\r\n                            className=\"tab-placeholder--list-item tab-placeholder--skeleton carousel__slide\"\r\n                            key={`${carouselName}-tile-${index + 1}`}\r\n                        >\r\n                            <div className=\"carousel-slide-item\">\r\n                                <SkeletonVehicleTile />\r\n                            </div>\r\n                        </li>\r\n                    ))}\r\n                </BaseCarousel>\r\n            </ul>\r\n        </div>\r\n    );\r\n};\r\n","import Icons from '../../../../../../utilities/icons';\r\nimport './RelatedSearchesTile.scss';\r\nimport { getVehiclesTotalCount } from '../../../../../../api/search-api';\r\nimport { MouseEvent, useEffect, useState } from 'react';\r\nimport { useLocalCarsStore } from '../../../../../../context/localCarsStore';\r\nimport { formatSeperatedInteger } from '../../../../../instant-offers/utils/format';\r\nimport { ANALYTICS_CONSTANTS, trackAnchorClick } from '../../../../../../utilities/analytics';\r\n\r\ninterface CardProps {\r\n    imgSrc: string;\r\n    title: string;\r\n    subtitle: string;\r\n    href: string;\r\n}\r\n\r\nconst handleClick = (e: MouseEvent, title: string, href: string) => {\r\n    trackAnchorClick({\r\n        clickEvent: e,\r\n        taggingEvent: ANALYTICS_CONSTANTS.EVENTS.CLICK.SEARCH_INITIATED,\r\n        title,\r\n        position: 'shop cars near me',\r\n        href,\r\n        page: 'Homepage',\r\n    });\r\n};\r\n\r\nconst Card = ({ imgSrc, title, subtitle, href }: CardProps) => (\r\n    <a onClick={(e: MouseEvent) => handleClick(e, title, href)} className=\"related-searches-tile__card\" href={href}>\r\n        <div className=\"related-searches-tile__card-content\">\r\n            <img src={`/home/images/related-searches-tile/related-searches-${imgSrc}`} alt={title} />\r\n            <div>\r\n                <span className=\"related-searches-tile__card-title\">{title}</span>\r\n                <span>{subtitle}</span>\r\n            </div>\r\n        </div>\r\n        {Icons.rightArrowIcon}\r\n    </a>\r\n);\r\n\r\nexport const RelatedSearchesTile: React.FC = () => {\r\n    const [testDriveCount, setTestDriveCount] = useState(0);\r\n    const [localPriceDropsCount, setLocalPriceDropsCount] = useState(0);\r\n    const [freeShippingCount, setFreeShippingCount] = useState(0);\r\n    const [allCarsCounts, setAllCarsCounts] = useState(0);\r\n    const { storeId } = useLocalCarsStore();\r\n\r\n    useEffect(() => {\r\n        (async () => {\r\n            const defaultSearchProps = { storeId, radiusInMiles: 25 };\r\n\r\n            const fetchTestDrive = async () => {\r\n                const totalCount = await getVehiclesTotalCount({\r\n                    ...defaultSearchProps,\r\n                    isInStoreOnly: true,\r\n                });\r\n                setTestDriveCount(totalCount);\r\n            };\r\n\r\n            const fetchLocalPriceDrops = async () => {\r\n                const totalCount = await getVehiclesTotalCount({\r\n                    ...defaultSearchProps,\r\n                    hasPriceDrop: true,\r\n                });\r\n                setLocalPriceDropsCount(totalCount);\r\n            };\r\n\r\n            const fetchFreeShipping = async () => {\r\n                const totalCount = await getVehiclesTotalCount({\r\n                    ...defaultSearchProps,\r\n                    hasFreeShipping: true,\r\n                });\r\n                setFreeShippingCount(totalCount);\r\n            };\r\n\r\n            const fetchAll = async () => {\r\n                const totalCount = await getVehiclesTotalCount({});\r\n                setAllCarsCounts(totalCount);\r\n            };\r\n\r\n            await Promise.all([fetchAll(), fetchTestDrive(), fetchLocalPriceDrops(), fetchFreeShipping()]);\r\n        })();\r\n    }, [storeId]);\r\n\r\n    return (\r\n        <article className=\"scct--car-tile\">\r\n            <div className=\"carousel__slide\">\r\n                <div className=\"carousel-slide-item\">\r\n                    <div className=\"related-searches-tile\">\r\n                        {testDriveCount > 0 && (\r\n                            <Card\r\n                                imgSrc=\"1.png\"\r\n                                title=\"Test drive today\"\r\n                                subtitle={`${testDriveCount} matches`}\r\n                                href=\"/cars?distance=25&comingsoon=false\"\r\n                            />\r\n                        )}\r\n                        {localPriceDropsCount > 0 && (\r\n                            <Card\r\n                                imgSrc=\"2.png\"\r\n                                title=\"Local price drops\"\r\n                                subtitle={`${localPriceDropsCount} matches`}\r\n                                href=\"/cars?distance=25&flag_PriceDrop=true\"\r\n                            />\r\n                        )}\r\n                        {freeShippingCount > 0 && (\r\n                            <Card\r\n                                imgSrc=\"3.png\"\r\n                                title=\"Free shipping\"\r\n                                subtitle={`${freeShippingCount} matches`}\r\n                                href=\"/cars?shipping=0&comingsoon=false\"\r\n                            />\r\n                        )}\r\n                        {allCarsCounts > 0 && (\r\n                            <Card\r\n                                imgSrc=\"4.png\"\r\n                                title=\"Shop all cars\"\r\n                                subtitle={`${formatSeperatedInteger(allCarsCounts)} matches`}\r\n                                href=\"/cars/all\"\r\n                            />\r\n                        )}\r\n                    </div>\r\n                </div>\r\n            </div>\r\n        </article>\r\n    );\r\n};\r\n","import { useLocalCarsStore } from '../../../../context/localCarsStore';\r\nimport { PlaceholderCarousel } from './PlaceholderCarousel';\r\nimport { CarTileWrapper } from '../../../../pages/home/hero/car-tile/CarTileWrapper';\r\nimport BaseCarousel from './BaseCarousel';\r\nimport { IVehicleTile } from '../../../../types/vehicleTile';\r\nimport { shiftUnavailableVehiclesToEnd } from '../../../../pages/home/utilities/helpers';\r\nimport { MiniHomebaseSlideCTA } from '../../../../pages/buying-online/components/MiniHomebaseSlideCTA';\r\nimport { useEffect, useCallback } from 'react';\r\nimport LoadingSpinner from '../../../loading-spinner';\r\nimport { RelatedSearchesTile } from './subcomponents/RelatedSearchesTile';\r\n\r\ninterface ICarouselProps {\r\n    isLoading?: boolean;\r\n    carouselId: string;\r\n    title?: string;\r\n    placeholder?: {\r\n        cardText: string;\r\n        buttonText: string;\r\n    };\r\n    vehiclesData: IVehicleTile[];\r\n    isMiniHomebase?: boolean; // TODO: MiniHomebase component use this. Need to replace ReturnVisitorCarousel found in that file with this new component\r\n    isRemoveEnabled?: boolean;\r\n    onRemove?: (vehicle: IVehicleTile) => void;\r\n    nextFocus?: string;\r\n    isInsideHomeBase?: boolean;\r\n    sectionName?: string;\r\n    showRelatedSearchesTile?: boolean;\r\n}\r\n\r\nexport const CarTilesCarousel = ({\r\n    isLoading = false,\r\n    carouselId,\r\n    title,\r\n    placeholder,\r\n    vehiclesData,\r\n    isMiniHomebase,\r\n    isRemoveEnabled,\r\n    onRemove,\r\n    nextFocus,\r\n    isInsideHomeBase,\r\n    sectionName,\r\n    showRelatedSearchesTile,\r\n}: ICarouselProps) => {\r\n    const { fbsData, setFavoriteVehicles, setFbsData } = useLocalCarsStore();\r\n\r\n    const sortedVehicleList: IVehicleTile[] = shiftUnavailableVehiclesToEnd(vehiclesData);\r\n\r\n    const vehicleCount = vehiclesData?.length;\r\n\r\n    const saleableVehicleCount = vehiclesData?.filter((item: IVehicleTile) => item.isSaleable).length;\r\n\r\n    const handleRemove = useCallback(\r\n        (vehicle: IVehicleTile) => {\r\n            const remove = vehiclesData.find((v) => v.stockNumber === vehicle.stockNumber);\r\n            if (remove) {\r\n                onRemove && onRemove(remove);\r\n            }\r\n        },\r\n        [onRemove, vehiclesData]\r\n    );\r\n\r\n    const buildCarouselItems = () => {\r\n        const items = sortedVehicleList\r\n            .filter((item) => item !== null && Boolean(item))\r\n            .map((vehicle: IVehicleTile, index: number) => {\r\n                const { stockNumber }: IVehicleTile = vehicle;\r\n                return (\r\n                    <div className=\"carousel__slide\" key={`${stockNumber}-slide-${index}`}>\r\n                        <div className=\"carousel-slide-item\">\r\n                            <CarTileWrapper\r\n                                vehicle={vehicle as IVehicleTile}\r\n                                updatedViewedTiles={handleRemove}\r\n                                enableRemove={isRemoveEnabled ? true : false}\r\n                                isWaitingForFavoritesResponse={\r\n                                    false //this.props.stockNumbersPendingFavoritesUpdate.indexOf(stockNumber) > -1\r\n                                }\r\n                                sectionName={!title ? sectionName : title}\r\n                            />\r\n                        </div>\r\n                    </div>\r\n                );\r\n            });\r\n\r\n        if (isMiniHomebase) {\r\n            items.push(\r\n                <MiniHomebaseSlideCTA\r\n                    headline={sortedVehicleList.length > 1 ? 'None of these quite right?' : 'Not quite right?'}\r\n                    hasFbsData={fbsData && fbsData.length > 0}\r\n                />\r\n            );\r\n        }\r\n\r\n        if (showRelatedSearchesTile) {\r\n            items.push(<RelatedSearchesTile key=\"related-searches-tile\" />);\r\n        }\r\n\r\n        return items;\r\n    };\r\n\r\n    useEffect(() => {\r\n        setFavoriteVehicles();\r\n    }, [setFavoriteVehicles]);\r\n\r\n    useEffect(() => {\r\n        setFbsData(vehiclesData.map(({ stockNumber }: { stockNumber: number }) => stockNumber));\r\n    }, [setFbsData, vehiclesData]);\r\n\r\n    if (isLoading) {\r\n        return <LoadingSpinner className=\"loading-spinner\" />;\r\n    }\r\n\r\n    return (\r\n        <>\r\n            <div\r\n                id={carouselId}\r\n                className=\"carousel--container\"\r\n                data-vehicle-count={vehicleCount}\r\n                data-saleable-vehicle-count={saleableVehicleCount}\r\n            >\r\n                <div className={`carousel--grid ${isInsideHomeBase ? 'is-inside-homebase' : ''}`}>\r\n                    {title && <h1 className=\"carousel--title\">{title}</h1>}\r\n                    {vehicleCount === 0 && (\r\n                        <PlaceholderCarousel\r\n                            carouselName={carouselId}\r\n                            cardText={placeholder?.cardText}\r\n                            buttonText={placeholder?.buttonText}\r\n                        />\r\n                    )}\r\n\r\n                    <BaseCarousel\r\n                        name={carouselId}\r\n                        leftAligned={true}\r\n                        nextFocus={`#${nextFocus}`}\r\n                        ariaLabel={carouselId}\r\n                    >\r\n                        {buildCarouselItems()}\r\n                    </BaseCarousel>\r\n                </div>\r\n            </div>\r\n        </>\r\n    );\r\n};\r\n","import { createContext, useContext } from 'react';\r\nimport { create } from 'zustand';\r\n\r\nimport { IExperienceV2 } from './models';\r\n\r\nexport const HeroContext = createContext<IExperienceV2>({\r\n    experiences: [],\r\n    isLoading: true,\r\n    component: undefined,\r\n});\r\n\r\nexport const useHeroContent = () => useContext(HeroContext);\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\nexport const useHomeStore = create((set: any) => ({\r\n    experiences: [],\r\n    isLoading: true,\r\n    component: undefined,\r\n    setInitialValues: ({ experiences, component, isLoading, experienceData }: IExperienceV2) =>\r\n        set({\r\n            isLoading,\r\n            experiences: experiences,\r\n            component: component,\r\n            experienceData: experienceData,\r\n        }),\r\n    experienceData: null,\r\n    fullStoryPageId: 'HP',\r\n    //This can be expanded to also contain the Favs list at a later date\r\n}));\r\n\r\ndeclare global {\r\n    interface Window {\r\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n        debugHomeStore: any;\r\n    }\r\n}\r\n\r\nwindow.debugHomeStore = useHomeStore || {};\r\n","import { useEffect, useState, useCallback } from 'react';\r\nimport { CarTilesCarousel } from '../../../../../components/carousels/car-tiles/CarTilesCarousel/CarTilesCarousel';\r\nimport { useHomeStore } from '../../../HeroRefactor/Store';\r\nimport { IHomeBase } from '../../../HeroRefactor/Store/models';\r\nimport { IVehicleTile } from '../../../../../types/vehicleTile';\r\n\r\nimport { removeViewedVehicleItemLocalStorage } from '../../../../home/utilities/viewedVehiclesTileBuilder';\r\n\r\nconst OptViewed = () => {\r\n    const { experienceData, isLoading } = useHomeStore();\r\n    const [cars, setCars] = useState<IVehicleTile[]>([]);\r\n\r\n    useEffect(() => {\r\n        setCars((((experienceData as unknown) as IHomeBase).viewedVehicles || []) as IVehicleTile[]);\r\n    }, [experienceData]);\r\n\r\n    const onRemove = useCallback(\r\n        (vehicle: IVehicleTile) => {\r\n            const { stockNumber } = vehicle;\r\n\r\n            const remaining = (cars as IVehicleTile[]).filter((v) => v.stockNumber !== stockNumber);\r\n            const itemToRemove = (cars as IVehicleTile[]).find((v) => v.stockNumber === stockNumber);\r\n\r\n            setCars(remaining);\r\n            if (itemToRemove) {\r\n                removeViewedVehicleItemLocalStorage(itemToRemove);\r\n            }\r\n        },\r\n        [cars]\r\n    );\r\n\r\n    return (\r\n        <>\r\n            {!isLoading && cars.length > 0 && (\r\n                <CarTilesCarousel\r\n                    title=\"You looked at\"\r\n                    carouselId=\"viewed-vehicles\"\r\n                    vehiclesData={cars}\r\n                    placeholder={{ cardText: 'Nothing feeling quite right?', buttonText: 'Browse for cars' }}\r\n                    onRemove={onRemove}\r\n                    isRemoveEnabled={true}\r\n                />\r\n            )}\r\n            {isLoading && (\r\n                <div style={{ textAlign: 'center', paddingTop: '300px' }}>\r\n                    <hzn-loading tone=\"brand\" label=\"loading content\" size=\"large\"></hzn-loading>\r\n                </div>\r\n            )}\r\n        </>\r\n    );\r\n};\r\n\r\nexport default OptViewed;\r\n","import * as React from 'react';\r\nimport { IVehicleTile } from '../../../../types/vehicleTile';\r\nimport { ENABLE_HOMEBASE_OPTIMIZATION_EVENT } from '../../utilities/constants';\r\nimport { TransfersTile, hasInProgressTransfer } from '../../utilities/transfersTileBuilder';\r\nimport TileKebabMenuItemSnackbar from '../tile-kebab-menu/TileKebabMenuItemSnackbar';\r\nimport HomeBaseTabs from './HomeBaseTabs';\r\nimport HomeBaseTransferStatusModal from './HomeBaseTransferStatusModal';\r\nimport OptViewed from '../../homebase-optimization-test/OptViewed/ViewedVehiclesCarousel/OptViewed';\r\n\r\ninterface IHomeBaseHeroProps {\r\n    fullStoryPageId: string;\r\n    viewedVehicleList: IVehicleTile[];\r\n    transfersTile: TransfersTile;\r\n    favoritedVehicleList: IVehicleTile[];\r\n    favoritedStockNumberList: number[];\r\n}\r\n\r\ninterface IHomeBaseHeroState {\r\n    dialogOpen: boolean;\r\n    snackbarOpen: boolean;\r\n    favoritedStockNumberList: number[];\r\n    stockNumbersPendingFavoritesUpdate: number[];\r\n    favoritedVehicleList: IVehicleTile[];\r\n    snackBarText: string;\r\n    hasHomebaseOptimization: boolean;\r\n}\r\n\r\nexport default class HomeBaseHero extends React.Component<IHomeBaseHeroProps, IHomeBaseHeroState> {\r\n    constructor(props: IHomeBaseHeroProps) {\r\n        super(props);\r\n\r\n        this.state = {\r\n            dialogOpen: false,\r\n            snackbarOpen: false,\r\n            favoritedStockNumberList: [],\r\n            stockNumbersPendingFavoritesUpdate: [],\r\n            favoritedVehicleList: [],\r\n            snackBarText: '',\r\n            hasHomebaseOptimization: false,\r\n        };\r\n\r\n        this.handleDialogOpen = this.handleDialogOpen.bind(this);\r\n        this.handleDialogClose = this.handleDialogClose.bind(this);\r\n        this.handleOpenSnackbar = this.handleOpenSnackbar.bind(this);\r\n        this.handleEnablingHomebaseOptimization = this.handleEnablingHomebaseOptimization.bind(this);\r\n    }\r\n\r\n    private enableHomebasePageStyles() {\r\n        document.body.classList.add('is-return-visit');\r\n\r\n        const headerEl = document.getElementById('header');\r\n        if (headerEl) {\r\n            headerEl.classList.remove('transparent-dark');\r\n            headerEl.classList.add('transparent-light');\r\n        }\r\n    }\r\n\r\n    private handleDialogOpen() {\r\n        this.setState({\r\n            dialogOpen: true,\r\n        });\r\n    }\r\n\r\n    private handleDialogClose() {\r\n        this.setState({\r\n            dialogOpen: false,\r\n        });\r\n    }\r\n\r\n    private handleOpenSnackbar = (text: string): void => {\r\n        this.setState({ snackBarText: text });\r\n        this.setState({ snackbarOpen: true });\r\n    };\r\n\r\n    private handleEnablingHomebaseOptimization = (event: CustomEvent<{ enabled: boolean }>) => {\r\n        if (event?.detail && window.featureFlags.enableHomeBaseOptimization) {\r\n            this.setState({ hasHomebaseOptimization: event.detail.enabled });\r\n        }\r\n    };\r\n\r\n    public componentDidMount(): void {\r\n        document.documentElement.addEventListener(\r\n            ENABLE_HOMEBASE_OPTIMIZATION_EVENT,\r\n            this.handleEnablingHomebaseOptimization as EventListener\r\n        );\r\n    }\r\n\r\n    public componentWillUnmount(): void {\r\n        document.documentElement.removeEventListener(\r\n            ENABLE_HOMEBASE_OPTIMIZATION_EVENT,\r\n            this.handleEnablingHomebaseOptimization as EventListener\r\n        );\r\n    }\r\n\r\n    public render(): React.ReactNode {\r\n        this.enableHomebasePageStyles();\r\n        return (\r\n            <div\r\n                id=\"home-base-hero\"\r\n                data-fs-section={`${this.props.fullStoryPageId}: HomeBaseHero`}\r\n                className=\"home-base-hero\"\r\n            >\r\n                <picture className=\"home-base-hero__background-image\">\r\n                    <source media=\"(max-width: 474px)\" srcSet=\"/images/home/hero/homebase-mobile.webp\" />\r\n                    <source\r\n                        media=\"(min-width: 474.1px) and (max-width: 1104px)\"\r\n                        srcSet=\"/images/home/hero/homebase-tablet.webp\"\r\n                    />\r\n                    <img className=\"home-base-hero__background-image\" src=\"/images/home/hero/homebase-xl.webp\" alt=\"\" />\r\n                </picture>\r\n\r\n                {hasInProgressTransfer(this.props.transfersTile) ? (\r\n                    <HomeBaseTransferStatusModal transfersTile={this.props.transfersTile} />\r\n                ) : this.state.hasHomebaseOptimization ? (\r\n                    <OptViewed />\r\n                ) : (\r\n                    <HomeBaseTabs\r\n                        viewedVehicleList={this.props.viewedVehicleList}\r\n                        favoritedVehicleList={this.state.favoritedVehicleList}\r\n                        favoritedStockNumberList={this.state.favoritedStockNumberList}\r\n                        onOpenSnackBar={this.handleOpenSnackbar}\r\n                        stockNumbersPendingFavoritesUpdate={this.state.stockNumbersPendingFavoritesUpdate}\r\n                    />\r\n                )}\r\n\r\n                <TileKebabMenuItemSnackbar\r\n                    icon={undefined}\r\n                    isOpen={this.state.snackbarOpen}\r\n                    textLabel={this.state.snackBarText}\r\n                    cancelAction={() => {\r\n                        this.setState({ snackbarOpen: false });\r\n                    }}\r\n                />\r\n            </div>\r\n        );\r\n    }\r\n}\r\n","import * as React from 'react';\r\nimport FirstTimeHero from './first-time/FirstTimeHero';\r\nimport HomeBaseHero from './home-base/HomeBaseHero';\r\nimport { getRecentlyViewedVehicleTiles, buildSavedVehicleTiles } from '../../../utilities/vehicleTileBuilder';\r\nimport { IVehicleTile } from '../../../types/vehicleTile';\r\nimport { MAX_RECENTLY_VIEWED_VEHICLE_TILES } from '../utilities/constants';\r\nimport * as savedVehicles from '../utilities/savedVehicles';\r\nimport { getStoreId } from '../../../utilities/visitor-cookie';\r\nimport { FBSContext } from '../../../context';\r\nimport {\r\n    TransfersTile,\r\n    fetchAndBuildTransfersTile,\r\n    hasCheckoutCreatedTransfer,\r\n    hasInProgressTransfer,\r\n} from '../utilities/transfersTileBuilder';\r\ninterface IHeroContainerProps {\r\n    fullStoryPageId: string;\r\n}\r\n\r\ninterface IHeroContainerState {\r\n    hasLoadedViewedVehicles: boolean;\r\n    isLoadingViewedVehicles: boolean;\r\n    hasLoadedSavedVehiclesAssets: boolean;\r\n    isLoadingSavedVehiclesAssets: boolean;\r\n    hasLoadedTransferredVehicle: boolean;\r\n    isLoadingTransferredVehicle: boolean;\r\n    hasLoadedSavedVehicles: boolean;\r\n    isLoadingSavedVehicles: boolean;\r\n    viewedVehicleTileList: IVehicleTile[];\r\n    favoritedVehicleList: IVehicleTile[];\r\n    favoritedStockNumberList: number[];\r\n    transfersTile: TransfersTile;\r\n}\r\n\r\nexport default class HeroContainer extends React.Component<IHeroContainerProps, IHeroContainerState> {\r\n    static contextType?: React.Context<any> | undefined = FBSContext;\r\n    context!: React.ContextType<typeof FBSContext>;\r\n\r\n    constructor(props: IHeroContainerProps) {\r\n        super(props);\r\n\r\n        this.state = {\r\n            hasLoadedViewedVehicles: false,\r\n            isLoadingViewedVehicles: true,\r\n            hasLoadedSavedVehiclesAssets: false,\r\n            isLoadingSavedVehiclesAssets: true,\r\n            hasLoadedTransferredVehicle: false,\r\n            isLoadingTransferredVehicle: true,\r\n            hasLoadedSavedVehicles: false,\r\n            isLoadingSavedVehicles: true,\r\n            viewedVehicleTileList: [],\r\n            favoritedVehicleList: [],\r\n            favoritedStockNumberList: [],\r\n            transfersTile: {} as TransfersTile,\r\n        };\r\n\r\n        this.loadSavedVehiclesAssets = this.loadSavedVehiclesAssets.bind(this);\r\n        this.loadRecentlyViewedVehicleTiles = this.loadRecentlyViewedVehicleTiles.bind(this);\r\n        this.loadTransfersTile = this.loadTransfersTile.bind(this);\r\n        this.loadAndBuildSavedVehicleTiles = this.loadAndBuildSavedVehicleTiles.bind(this);\r\n    }\r\n\r\n    public componentDidMount() {\r\n        this.loadSavedVehiclesAssets();\r\n        this.loadRecentlyViewedVehicleTiles();\r\n        this.loadTransfersTile();\r\n    }\r\n\r\n    public componentDidUpdate(\r\n        prevProps: Readonly<IHeroContainerProps>,\r\n        prevState: Readonly<IHeroContainerState>,\r\n        snapshot?: any\r\n    ): void {\r\n        !prevState.hasLoadedSavedVehiclesAssets && this.state.hasLoadedSavedVehiclesAssets\r\n            ? this.loadAndBuildSavedVehicleTiles()\r\n            : null;\r\n    }\r\n\r\n    private loadSavedVehiclesAssets() {\r\n        savedVehicles.loadSavedVehiclesAssets(() => {\r\n            this.setState({\r\n                hasLoadedSavedVehiclesAssets: true,\r\n                isLoadingSavedVehiclesAssets: false,\r\n            });\r\n        });\r\n    }\r\n\r\n    private loadAndBuildSavedVehicleTiles = (): void => {\r\n        const parkingLotSavedVehicles = window.localStorage.getItem('parkingLot');\r\n        const hasParkingLotVehicles = parkingLotSavedVehicles || parkingLotSavedVehicles?.length;\r\n\r\n        if (hasParkingLotVehicles) {\r\n            const parsedVehicles = JSON.parse(parkingLotSavedVehicles).map(\r\n                (vehicle: { stockNumber: number }) => vehicle.stockNumber\r\n            );\r\n            buildSavedVehicleTiles(parsedVehicles, (list) => {\r\n                this.setState({\r\n                    hasLoadedSavedVehicles: true,\r\n                    isLoadingSavedVehicles: false,\r\n                    favoritedVehicleList: list,\r\n                });\r\n            });\r\n        } else {\r\n            this.setState(() => {\r\n                savedVehicles.getSavedVehicles((stockNumberList) => {\r\n                    buildSavedVehicleTiles(\r\n                        stockNumberList,\r\n                        (vehicleTileList: IVehicleTile[]) => {\r\n                            this.setState({\r\n                                favoritedStockNumberList: stockNumberList,\r\n                                favoritedVehicleList: vehicleTileList,\r\n                            });\r\n                        },\r\n                        getStoreId()\r\n                    );\r\n                });\r\n            });\r\n        }\r\n    };\r\n\r\n    private loadRecentlyViewedVehicleTiles = (): void => {\r\n        this.setState({ isLoadingViewedVehicles: true }, () => {\r\n            getRecentlyViewedVehicleTiles(MAX_RECENTLY_VIEWED_VEHICLE_TILES, getStoreId()).then(\r\n                (vehicleTileList: IVehicleTile[]) =>\r\n                    this.setState(\r\n                        {\r\n                            hasLoadedViewedVehicles: true,\r\n                            isLoadingViewedVehicles: false,\r\n                            viewedVehicleTileList: vehicleTileList,\r\n                        },\r\n                        () => {\r\n                            this.context.setVehicleList(vehicleTileList);\r\n                        }\r\n                    )\r\n            );\r\n        });\r\n    };\r\n\r\n    private loadTransfersTile = (): void => {\r\n        this.setState({ isLoadingTransferredVehicle: true }, () => {\r\n            fetchAndBuildTransfersTile().then((transfersTile) =>\r\n                this.setState({\r\n                    hasLoadedTransferredVehicle: true,\r\n                    isLoadingTransferredVehicle: false,\r\n                    transfersTile: transfersTile,\r\n                })\r\n            );\r\n        });\r\n    };\r\n\r\n    public render(): React.ReactNode {\r\n        const {\r\n            hasLoadedViewedVehicles,\r\n            isLoadingViewedVehicles,\r\n            hasLoadedSavedVehiclesAssets,\r\n            isLoadingSavedVehiclesAssets,\r\n            hasLoadedTransferredVehicle,\r\n            isLoadingTransferredVehicle,\r\n            viewedVehicleTileList,\r\n            favoritedVehicleList,\r\n            favoritedStockNumberList,\r\n            transfersTile,\r\n        } = this.state;\r\n\r\n        if (isLoadingViewedVehicles || isLoadingSavedVehiclesAssets || isLoadingTransferredVehicle) {\r\n            return (\r\n                <div className=\"hero-loading-container\">\r\n                    <div style={{ textAlign: 'center', paddingTop: '300px' }}>\r\n                        <hzn-loading tone=\"brand\" label=\"loading content\" size=\"large\"></hzn-loading>\r\n                    </div>\r\n                </div>\r\n            );\r\n        } else {\r\n            if (\r\n                hasLoadedViewedVehicles &&\r\n                hasLoadedSavedVehiclesAssets &&\r\n                hasLoadedTransferredVehicle &&\r\n                hasLoadedSavedVehiclesAssets\r\n            ) {\r\n                if (hasCheckoutCreatedTransfer(transfersTile)) {\r\n                    return <FirstTimeHero fullStoryPageId={this.props.fullStoryPageId} />;\r\n                }\r\n\r\n                if (\r\n                    viewedVehicleTileList.length > 0 ||\r\n                    favoritedVehicleList.length > 0 ||\r\n                    hasInProgressTransfer(transfersTile)\r\n                ) {\r\n                    return (\r\n                        <HomeBaseHero\r\n                            fullStoryPageId={this.props.fullStoryPageId}\r\n                            viewedVehicleList={viewedVehicleTileList}\r\n                            favoritedStockNumberList={favoritedStockNumberList}\r\n                            favoritedVehicleList={favoritedVehicleList}\r\n                            transfersTile={transfersTile}\r\n                        />\r\n                    );\r\n                }\r\n            }\r\n            return <FirstTimeHero fullStoryPageId={this.props.fullStoryPageId} />;\r\n        }\r\n    }\r\n}\r\n","import { Vehicle } from '../../../../api/types';\r\nimport { IVehicleTile } from '../../../../types/vehicleTile';\r\n\r\nexport interface IExperienceV2 {\r\n    experiences?: (ITransfer | IHomeBase | unknown)[];\r\n    isLoading: boolean;\r\n    component?: string;\r\n    experienceData?: ITransfer | IHomeBase;\r\n}\r\n\r\nexport enum Names {\r\n    Transfer = 'Transfer',\r\n    HomeBase = 'HomeBase',\r\n    FirstTime = 'FirstTime',\r\n}\r\n\r\nexport interface ITransfer {\r\n    name: Names.Transfer;\r\n    vehicle: Vehicle;\r\n    status?: string;\r\n    viewedVehicles?: IVehicleTile[];\r\n}\r\n\r\nexport interface IHomeBase {\r\n    name: Names.HomeBase;\r\n    viewedVehicles: IVehicleTile[];\r\n    favoritedVehicleList: IVehicleTile[];\r\n    savedStockNumbers: number[];\r\n    favoritedStockNumberList: number[];\r\n    status?: string;\r\n}\r\n","import { Names, IHomeBase } from '../Store/models';\r\nimport { buildSavedVehicleTiles, getRecentlyViewedVehicleTiles } from '../../../../utilities/vehicleTileBuilder';\r\nimport { getStoreId } from '../../../../utilities/visitor-cookie';\r\nimport { IVehicleTile } from '../../../../types/vehicleTile';\r\nimport * as savedVehicles from '../../utilities/savedVehicles';\r\n\r\nconst dedupeVehicles = (vehiclesArray: IVehicleTile[]) => {\r\n    const stockNumbers = vehiclesArray.map((v) => v.stockNumber);\r\n\r\n    const filtered = vehiclesArray.filter(\r\n        (v, index) => !stockNumbers.includes(v.stockNumber, index + 1) && v !== undefined\r\n    );\r\n    return filtered;\r\n};\r\n\r\nconst processVehicles = (viewedVehicles: IVehicleTile[], savedVehicleList: IVehicleTile[]) => {\r\n    let allVehicles: IVehicleTile[] = [];\r\n\r\n    if (savedVehicleList.length && savedVehicleList) {\r\n        allVehicles = allVehicles.concat(savedVehicleList);\r\n    }\r\n\r\n    if (viewedVehicles.length && viewedVehicles) {\r\n        allVehicles = allVehicles.concat(viewedVehicles);\r\n    }\r\n\r\n    return dedupeVehicles(allVehicles);\r\n};\r\n\r\nexport const getHomeBaseData = new Promise((resolve) => {\r\n    getRecentlyViewedVehicleTiles(10, getStoreId()).then((viewedVehicles: IVehicleTile[]) => {\r\n        savedVehicles.getSavedVehicles((savedStockNumbers) => {\r\n            return buildSavedVehicleTiles(\r\n                savedStockNumbers,\r\n                (savedVehicleList: IVehicleTile[]) => {\r\n                    resolve({\r\n                        name: Names.HomeBase,\r\n                        viewedVehicles: processVehicles(viewedVehicles, savedVehicleList),\r\n                        savedStockNumbers,\r\n                    });\r\n                },\r\n                getStoreId()\r\n            );\r\n        });\r\n    });\r\n});\r\n\r\nexport const fetchAsyncData = async () => {\r\n    const res = await Promise.all([getHomeBaseData]);\r\n    return res;\r\n};\r\n\r\nfunction returnExperienceByName({ experiences, name }: { experiences: any[]; name: Names }) {\r\n    const experience = experiences.find((experience: IHomeBase | unknown) => {\r\n        return (experience as IHomeBase).name === name;\r\n    });\r\n    return experience;\r\n}\r\n\r\nexport const getComponentAndData = (experiences: (IHomeBase | unknown)[]) => {\r\n    const homeBaseExperience = returnExperienceByName({ experiences, name: Names.HomeBase });\r\n    // need to check if any of the experiences have truthy data\r\n    if (homeBaseExperience?.viewedVehicles.length > 0) {\r\n        return homeBaseExperience;\r\n    } else {\r\n        return { name: Names.FirstTime, experienceData: undefined };\r\n    }\r\n};\r\n","import { FBSContext } from '../../../../context';\r\nimport { IVehicleTile } from '../../../../types/vehicleTile';\r\nimport HomeBaseHero from '../../hero/home-base/HomeBaseHero';\r\nimport { TransfersTile } from '../../utilities/transfersTileBuilder';\r\nimport { useHomeStore } from '../Store';\r\nimport { IHomeBase } from '../Store/models';\r\nimport { useContext, useEffect, useState } from 'react';\r\nimport { fetchAndBuildTransfersTile } from '../../utilities/transfersTileBuilder';\r\n\r\nfunction HomeBase() {\r\n    const homeStore = useHomeStore().experienceData;\r\n    const fbsContext = useContext(FBSContext);\r\n    const [transfersTile, setTransferTile] = useState({});\r\n\r\n    const { viewedVehicles, favoritedVehicleList, savedStockNumbers } = (homeStore as unknown) as IHomeBase;\r\n\r\n    useEffect(() => {\r\n        if (viewedVehicles?.length > 0) {\r\n            fbsContext.setVehicleList(viewedVehicles);\r\n        }\r\n    }, [viewedVehicles, fbsContext]);\r\n\r\n    useEffect(() => {\r\n        fetchAndBuildTransfersTile().then((transfersTile) => setTransferTile(transfersTile));\r\n    }, []);\r\n\r\n    return (\r\n        <HomeBaseHero\r\n            transfersTile={transfersTile as TransfersTile}\r\n            fullStoryPageId=\"HP\"\r\n            viewedVehicleList={viewedVehicles as IVehicleTile[]}\r\n            favoritedVehicleList={favoritedVehicleList as IVehicleTile[]}\r\n            favoritedStockNumberList={savedStockNumbers}\r\n        />\r\n    );\r\n}\r\n\r\nexport default HomeBase;\r\n","import { useEffect } from 'react';\r\nimport { HeroTheme } from '../../utilities/constants';\r\nimport HeroFeaturedContent from '../../hero/HeroFeaturedContent';\r\nimport { ITrackingPayload } from '../../../../types/analytics';\r\nimport { trackEDDL, ANALYTICS_CONSTANTS } from '../../../../utilities/analytics';\r\n\r\nfunction disableHomebasePageStyles() {\r\n    document.body.classList.remove('is-return-visit');\r\n\r\n    const headerEl = document.getElementById('header');\r\n    if (headerEl) {\r\n        headerEl.classList.remove('transparent-light');\r\n        headerEl.classList.add('transparent-dark');\r\n    }\r\n}\r\n\r\nfunction FirstTimeHero() {\r\n    useEffect(() => {\r\n        disableHomebasePageStyles();\r\n        setTimeout(function () {\r\n            const payload: ITrackingPayload = {\r\n                event: ANALYTICS_CONSTANTS.EVENTS.PAGE.STATE,\r\n                pageState: {\r\n                    pageState: 'hp-HeroBrandMessage',\r\n                },\r\n            };\r\n            trackEDDL(payload);\r\n        }, ANALYTICS_CONSTANTS.PAGE_STATE_LOAD_TIME);\r\n    }, []);\r\n\r\n    return (\r\n        <section\r\n            id=\"first-time-visitor-hero\"\r\n            data-fs-section={`HP: Hero`}\r\n            className=\"first-time-visitor-hero  mdc-layout-grid\"\r\n        >\r\n            <div className=\"first-time-visitor-hero--max-width-container\">\r\n                <picture>\r\n                    <source media=\"(max-width: 767px)\" srcSet=\"/home/images/home/hero/lycg-mobile.webp\" />\r\n                    <source\r\n                        media=\"(min-width: 767.1px) and (max-width: 1151px)\"\r\n                        srcSet=\"/home/images/home/hero/lycg-tablet.webp\"\r\n                    />\r\n                    <source media=\"(min-width: 1151.1px)\" srcSet=\"/home/images/home/hero/lycg-xl.webp\" />\r\n                    <img\r\n                        className=\"first-time-visitor-hero-img\"\r\n                        src=\"/home/images/home/hero/lycg-xl.webp\"\r\n                        alt=\"Parent and child sitting in the rear of their vehicle putting on skates\"\r\n                        width=\"4366\"\r\n                        height=\"1522\"\r\n                    />\r\n                </picture>\r\n                <div className=\"first-time-visitor-hero--grid-container mdc-layout-grid__inner\">\r\n                    <HeroFeaturedContent heroTheme={HeroTheme.Dark} ctaLabel=\"Search Cars\" />\r\n                </div>\r\n            </div>\r\n        </section>\r\n    );\r\n}\r\n\r\nexport default FirstTimeHero;\r\n","import { useEffect, Suspense, useState, useCallback } from 'react';\r\nimport { useHomeStore, HeroContext } from './Store';\r\nimport { getComponentAndData } from './services';\r\nimport { IExperienceV2, Names } from './Store/models';\r\nimport HomeBase from './HomeBase';\r\nimport FirstTimeHero from './FirstTimeHero';\r\n\r\nfunction HeroRefactor() {\r\n    const store = useHomeStore();\r\n    const [component, setComponent] = useState<JSX.Element>();\r\n\r\n    const ReturnComponent = useCallback((componentName: string) => {\r\n        switch (componentName) {\r\n            case Names.HomeBase:\r\n                setComponent(<HomeBase />);\r\n                break;\r\n            case Names.FirstTime:\r\n                setComponent(<FirstTimeHero />);\r\n                break;\r\n            default:\r\n                setComponent(<FirstTimeHero />);\r\n                break;\r\n        }\r\n    }, []);\r\n\r\n    useEffect(() => {\r\n        if (!store.isLoading) {\r\n            const experienceData = getComponentAndData(store.experiences);\r\n            ReturnComponent(experienceData.name);\r\n        }\r\n    }, [ReturnComponent, store]);\r\n\r\n    if (!component) {\r\n        return (\r\n            <div style={{ textAlign: 'center', paddingTop: '300px' }}>\r\n                <hzn-loading tone=\"brand\" label=\"loading content\" size=\"large\"></hzn-loading>\r\n            </div>\r\n        );\r\n    }\r\n    return (\r\n        <Suspense\r\n            fallback={\r\n                <div style={{ textAlign: 'center', paddingTop: '300px' }}>\r\n                    <hzn-loading tone=\"brand\" size=\"large\"></hzn-loading>\r\n                </div>\r\n            }\r\n        >\r\n            <HeroContext.Provider value={(store as unknown) as IExperienceV2}>{component}</HeroContext.Provider>\r\n        </Suspense>\r\n    );\r\n}\r\n\r\nexport default HeroRefactor;\r\n","import * as React from 'react';\r\nimport classNames from 'classnames';\r\n\r\ninterface ILocalCarsSkeletonVehicleTileProps {\r\n    isLoading: boolean;\r\n    children?: React.ReactChildren;\r\n}\r\n\r\nexport const LocalCarsSkeletonVehicleTile = (props: ILocalCarsSkeletonVehicleTileProps) => {\r\n    return (\r\n        <div className={classNames('skeleton-vehicle-tile', { loading: props.isLoading })}>\r\n            <div className=\"header\"></div>\r\n            <div className=\"body\">\r\n                <div></div>\r\n                <div></div>\r\n                <div></div>\r\n                <div></div>\r\n            </div>\r\n        </div>\r\n    );\r\n};\r\n","import Carousel from '../../../components/carousels/home-base-hero-carousel/Carousel';\r\nimport { LocalCarsSkeletonVehicleTile } from './LocalCarsSkeletonVehicleTile';\r\n\r\ninterface ILocalCarsPlaceholderCarouselProps {\r\n    isLoading: boolean;\r\n    children?: React.ReactChildren;\r\n}\r\n\r\nexport const LocalCarsPlaceholderCarousel = (props: ILocalCarsPlaceholderCarouselProps) => {\r\n    return (\r\n        <div className=\"local-cars-placeholder\">\r\n            <Carousel\r\n                name=\"local-cars-loading-placeholder\"\r\n                nextFocus=\"#social-proof\"\r\n                ariaLabel=\"Loading local cars\"\r\n                leftAligned={true}\r\n            >\r\n                {Array.from({ length: 5 }, (_, index) => index + 1).map((index) => (\r\n                    <article\r\n                        className=\"local-cars-placeholder--item local-cars-placeholder--skeleton carousel__slide\"\r\n                        key={`local-cars-placeholder-tile-${index + 1}`}\r\n                    >\r\n                        <div className=\"carousel-slide-item\">\r\n                            <LocalCarsSkeletonVehicleTile isLoading={props.isLoading} />\r\n                        </div>\r\n                    </article>\r\n                ))}\r\n            </Carousel>\r\n        </div>\r\n    );\r\n};\r\n","import { useEffect, useState, MouseEvent } from 'react';\r\nimport { useShallow } from 'zustand/react/shallow';\r\nimport SVGs from '../../buying-online/utils/svgs';\r\nimport { useLocalCarsStore } from '../../../context/localCarsStore';\r\nimport { CarTilesCarousel } from '../../../components/carousels/car-tiles/CarTilesCarousel';\r\nimport { LocalCarsPlaceholderCarousel } from './LocalCarsPlaceholderCarousel';\r\nimport { ANALYTICS_CONSTANTS, trackAnchorClick, trackEDDL } from '../../../utilities/analytics';\r\n\r\ninterface ShopAllCarsButtonProps {\r\n    isFullWidth?: boolean;\r\n}\r\n\r\nconst ShopAllCarsButton = ({ isFullWidth }: ShopAllCarsButtonProps) => {\r\n    return (\r\n        <hzn-button\r\n            variant=\"secondary\"\r\n            full-width={isFullWidth}\r\n            onClick={(e) => {\r\n                trackAnchorClick({\r\n                    clickEvent: e as MouseEvent,\r\n                    taggingEvent: ANALYTICS_CONSTANTS.EVENTS.CLICK.CTA,\r\n                    title: 'shop all local cars',\r\n                    position: 'shop cars near me',\r\n                    href: '/cars?distance=50',\r\n                    page: 'Homepage',\r\n                    search: {\r\n                        initiationMethod: `Homepage|shop all local cars|shop cars near me`,\r\n                    },\r\n                });\r\n            }}\r\n        >\r\n            Shop all local cars\r\n        </hzn-button>\r\n    );\r\n};\r\n\r\nexport const LocalCars = () => {\r\n    const {\r\n        localVehicles,\r\n        setLocalVehicles,\r\n        isLocalVehiclesLoading,\r\n        setFavoriteVehicles,\r\n        setCiam,\r\n        zipCode,\r\n    } = useLocalCarsStore(\r\n        useShallow((state) => ({\r\n            localVehicles: state.localVehicles,\r\n            setLocalVehicles: state.setLocalVehicles,\r\n            isLocalVehiclesLoading: state.isLocalVehiclesLoading,\r\n            setFavoriteVehicles: state.setFavoriteVehicles,\r\n            setCiam: state.setCiam,\r\n            zipCode: state.zipCode,\r\n        }))\r\n    );\r\n\r\n    const [isTestActive, setIsTestActive] = useState(false);\r\n\r\n    useEffect(() => {\r\n        setCiam();\r\n        setLocalVehicles();\r\n        setFavoriteVehicles();\r\n    }, [setCiam, setLocalVehicles, setFavoriteVehicles]);\r\n\r\n    // Add listener for kmxEnableLocalCarsTest\r\n    useEffect(() => {\r\n        const handleKmxEnableLocalCarsTest = () => setIsTestActive(true);\r\n\r\n        document.addEventListener('kmxEnableLocalCarsTest', handleKmxEnableLocalCarsTest);\r\n\r\n        return () => {\r\n            document.removeEventListener('kmxEnableLocalCarsTest', handleKmxEnableLocalCarsTest);\r\n        };\r\n    }, []);\r\n\r\n    useEffect(() => {\r\n        if (localVehicles.length) {\r\n            trackEDDL({\r\n                event: 'recommendedCarImpression',\r\n                recommendations: {\r\n                    stockNumber: 'undefined',\r\n                    carouselLength: String(localVehicles.length),\r\n                },\r\n                module: {\r\n                    moduleExperience: 'Shop cars near me',\r\n                },\r\n            });\r\n        }\r\n    }, [localVehicles]);\r\n\r\n    const openStoreSelectionModal = () => {\r\n        const detail = { stateOrZip: zipCode };\r\n\r\n        // Analytics\r\n        trackEDDL({\r\n            event: 'storeChange',\r\n            linkDetails: {\r\n                name: zipCode || '',\r\n                position: 'Shop cars near you',\r\n            },\r\n        });\r\n\r\n        // Open modal\r\n        const event = new CustomEvent('kmxOpenStoreSelectionModal', { detail });\r\n        document.documentElement.dispatchEvent(event);\r\n    };\r\n\r\n    const renderCarousel = () => {\r\n        return isLocalVehiclesLoading ? (\r\n            <LocalCarsPlaceholderCarousel isLoading={isLocalVehiclesLoading} />\r\n        ) : localVehicles.length > 0 ? (\r\n            <CarTilesCarousel\r\n                sectionName=\"Shop cars near me\"\r\n                carouselId=\"local-cars-carousel\"\r\n                vehiclesData={isTestActive ? localVehicles.slice(0, 6) : localVehicles}\r\n                nextFocus=\"online-offer\"\r\n                isRemoveEnabled={false}\r\n                showRelatedSearchesTile={isTestActive}\r\n            />\r\n        ) : (\r\n            <LocalCarsPlaceholderCarousel isLoading={isLocalVehiclesLoading} />\r\n        );\r\n    };\r\n\r\n    return (\r\n        <>\r\n            {isTestActive && (\r\n                <div id=\"local-cars-container\" className=\"active-test\">\r\n                    <div className=\"local-cars--heading\">\r\n                        <div>\r\n                            <h2>Shop cars near me</h2>\r\n                            <button\r\n                                type=\"button\"\r\n                                className=\"zip-code\"\r\n                                onClick={openStoreSelectionModal}\r\n                                aria-haspopup=\"true\"\r\n                                aria-label=\"Change your CarMax store\"\r\n                            >\r\n                                {SVGs.locationMUIIcon} {zipCode}\r\n                            </button>\r\n                        </div>\r\n                        <ShopAllCarsButton />\r\n                    </div>\r\n                    {renderCarousel()}\r\n                    <div className=\"shop-all-button-container\">\r\n                        <ShopAllCarsButton isFullWidth />\r\n                    </div>\r\n                </div>\r\n            )}\r\n            {!isTestActive && (\r\n                <div id=\"local-cars-container\">\r\n                    <div className=\"local-cars--heading\">\r\n                        <h2>Shop cars near me</h2>\r\n                        <button\r\n                            type=\"button\"\r\n                            className=\"zip-code\"\r\n                            onClick={openStoreSelectionModal}\r\n                            aria-haspopup=\"true\"\r\n                            aria-label=\"Change your CarMax store\"\r\n                        >\r\n                            {SVGs.locationIcon} {zipCode}\r\n                        </button>\r\n                    </div>\r\n                    {renderCarousel()}\r\n                </div>\r\n            )}\r\n        </>\r\n    );\r\n};\r\n","import LazyLoad from 'react-lazyload';\r\nimport { LocalCars } from './LocalCars';\r\nimport { isReturnHomePageVisitor } from '../utilities/helpers';\r\n\r\nexport const LocalCarsLoader: React.FC = () => {\r\n    return !isReturnHomePageVisitor() ? (\r\n        <LazyLoad height={window.innerHeight}>\r\n            <LocalCars />\r\n        </LazyLoad>\r\n    ) : (\r\n        <></>\r\n    );\r\n};\r\n","import { useEffect, useState } from 'react';\r\nimport SearchedCarousel from '../../hero/home-base/carousels/SearchedCarousel';\r\nimport { getRecentSearches } from '../../../../api/recent-search-api';\r\nimport { IRecentSearch } from '../../../../api/types';\r\nimport { useHomeStore } from '../../HeroRefactor/Store';\r\nimport { Names } from '../../HeroRefactor/Store/models';\r\n\r\nexport const RecentSearchesContainer = () => {\r\n    const [hasLoadedSearches, setHasLoadedSearches] = useState(false);\r\n    const [isLoadingSearches, setIsLoadingSearches] = useState(false);\r\n    const [recentSearchesList, setRecentSearchesList] = useState<IRecentSearch[]>([]);\r\n\r\n    const { experienceData }: { experienceData: any } = useHomeStore();\r\n    const hasHomeBase = experienceData && experienceData.name === Names.HomeBase;\r\n\r\n    useEffect(() => {\r\n        if (!hasLoadedSearches) {\r\n            setIsLoadingSearches(true);\r\n            getRecentSearches().then((recentSearchesTileList) => {\r\n                setIsLoadingSearches(false);\r\n                setHasLoadedSearches(true);\r\n                if (recentSearchesTileList.length > 0) {\r\n                    setRecentSearchesList(recentSearchesTileList);\r\n                }\r\n            });\r\n        }\r\n    }, [hasLoadedSearches]);\r\n\r\n    return hasHomeBase && hasLoadedSearches && recentSearchesList.length > 0 ? (\r\n        <>\r\n            <div className=\"recent-searches--heading\">\r\n                <h2>Keep searching for</h2>\r\n            </div>\r\n            <SearchedCarousel\r\n                hasLoadedSearchedTab={hasLoadedSearches}\r\n                isLoadingSearchedTab={isLoadingSearches}\r\n                isVisible={true}\r\n                recentSearchesList={recentSearchesList}\r\n                leftAligned={true}\r\n            />\r\n        </>\r\n    ) : (\r\n        <></>\r\n    );\r\n};\r\n","import { useEffect, useState } from 'react';\r\nimport { fetchAndBuildRecommendedVehicleTiles } from '../utilities/recommendationsBuilder';\r\nimport { IVehicleTile } from '../../../types/vehicleTile';\r\nimport { getSavedVehicles } from '../utilities/savedVehicles';\r\nimport { useHomeStore } from '../HeroRefactor/Store';\r\nimport { IHomeBase } from '../HeroRefactor/Store/models';\r\nimport { CarTilesCarousel } from '../../../components/carousels/car-tiles/CarTilesCarousel/CarTilesCarousel';\r\n\r\nexport const YouMightLikeContainer = () => {\r\n    const [hasLoadedRecommendedVehicles, setHasLoadedRecommendedVehicles] = useState(false);\r\n    const [isLoadingRecommendedVehicles, setIsLoadingRecommendedVehicles] = useState(false);\r\n    const [recommendedVehiclesList, setRecommendedVehiclesList] = useState<IVehicleTile[]>([]);\r\n    const [favoriteVehicles, setFavoriteVehicle] = useState<number[]>([]);\r\n    const { experienceData, isLoading } = useHomeStore();\r\n\r\n    useEffect(() => {\r\n        if (experienceData && !isLoading && !hasLoadedRecommendedVehicles) {\r\n            getSavedVehicles((stockNumberList) => {\r\n                setFavoriteVehicle(stockNumberList);\r\n            });\r\n\r\n            setIsLoadingRecommendedVehicles(true);\r\n\r\n            fetchAndBuildRecommendedVehicleTiles(\r\n                (recommendedVehicleTileList: IVehicleTile[]) => {\r\n                    if (recommendedVehicleTileList.length > 0) {\r\n                        setRecommendedVehiclesList(recommendedVehicleTileList);\r\n                        setHasLoadedRecommendedVehicles(true);\r\n                        setIsLoadingRecommendedVehicles(false);\r\n                    }\r\n                },\r\n                favoriteVehicles,\r\n                (experienceData as IHomeBase).viewedVehicles as IVehicleTile[]\r\n            );\r\n\r\n            setHasLoadedRecommendedVehicles(true);\r\n        }\r\n    }, [hasLoadedRecommendedVehicles, isLoading, experienceData, favoriteVehicles, recommendedVehiclesList]);\r\n\r\n    return hasLoadedRecommendedVehicles && recommendedVehiclesList.length > 0 ? (\r\n        <>\r\n            <CarTilesCarousel\r\n                isLoading={isLoadingRecommendedVehicles}\r\n                title=\"You might like\"\r\n                carouselId=\"you-might-like\"\r\n                vehiclesData={recommendedVehiclesList}\r\n                isRemoveEnabled={false}\r\n            />\r\n        </>\r\n    ) : (\r\n        <></>\r\n    );\r\n};\r\n","import { useEffect, useState } from 'react';\r\nimport { ILinkFarmTab } from '../../../api/types/content-api';\r\nimport { ANALYTICS_CONSTANTS, trackEDDL } from '../../../utilities/analytics';\r\n\r\nconst LinkFarmTab = (props: any) => {\r\n    const { tabName, tabResponsiveName }: ILinkFarmTab = props.tab;\r\n    const { activeTab, tabIndex, setActiveTab } = props;\r\n    const [isActive, setIsActive] = useState(false);\r\n\r\n    useEffect(() => {\r\n        setIsActive(activeTab === tabIndex);\r\n    }, [activeTab]);\r\n\r\n    return (\r\n        <button\r\n            type=\"button\"\r\n            className={`hp-tabs-header ${isActive && 'hp-tabs-header--active'}`}\r\n            role=\"tab\"\r\n            aria-selected={isActive}\r\n            tabIndex={isActive ? 0 : -1}\r\n            onClick={() => {\r\n                // Analytics\r\n                trackEDDL({\r\n                    event: ANALYTICS_CONSTANTS.EVENTS.CLICK.CTA,\r\n                    linkDetails: {\r\n                        name: tabName,\r\n                        position: 'Browse By',\r\n                    },\r\n                });\r\n\r\n                // Change tab\r\n                setActiveTab(tabIndex);\r\n            }}\r\n            data-kmx-analytics={`prop5=${tabName}`}\r\n        >\r\n            <span className=\"hp-tabs-header-label-container\">\r\n                <span className=\"hp-tabs-header-label\">\r\n                    <span className=\"link-farm-tabs--button-label\">{tabName}</span>\r\n                    <span className=\"link-farm-tabs--button-responsive-label\">{tabResponsiveName}</span>\r\n                </span>\r\n            </span>\r\n            <span className=\"hp-tabs-header-indicator\"></span>\r\n        </button>\r\n    );\r\n};\r\n\r\nexport default LinkFarmTab;\r\n","export function initSmoothScrollEventListener(anchorElement: string, scrolledElement: string, offset = 0) {\r\n    const element = <HTMLElement>document.querySelector(anchorElement);\r\n    const elementToBeScrolledTo: HTMLElement = <HTMLElement>document.querySelector(scrolledElement);\r\n    if (element && elementToBeScrolledTo) {\r\n        element.addEventListener(\r\n            'click',\r\n            e => {\r\n                e.preventDefault();\r\n                smoothScroll(elementToBeScrolledTo, offset);\r\n                elementToBeScrolledTo.focus();\r\n                history.pushState({}, '', location.pathname + scrolledElement);\r\n            },\r\n            false\r\n        );\r\n    }\r\n}\r\n\r\nexport function smoothScroll(scrolledElement: HTMLElement, offset = 0): any {\r\n    const positions = calculatePositions(scrolledElement, offset);\r\n    const keyFrames = calculateKeyFrames(positions);\r\n    initSmoothScrolling.apply(null, keyFrames);\r\n}\r\n\r\nexport function calculatePositions(scrolledElement: HTMLElement, offset = 0) {\r\n    const duration = 500;\r\n    const currentScrollPosition: number = Math.max(document.documentElement.scrollTop, document.body.scrollTop);\r\n    const newScrollPostion: number = scrolledElement.getBoundingClientRect().top + offset;\r\n\r\n    return {\r\n        duration: duration,\r\n        currentScrollPosition: currentScrollPosition,\r\n        newScrollPostion: newScrollPostion,\r\n    };\r\n}\r\n\r\nexport function calculateKeyFrames({ ...positions }: any) {\r\n    const frames: Array<number> = [];\r\n    const frameCount: number = Math.ceil((positions.duration / 1000) * 30);\r\n    const distance: number = positions.newScrollPostion;\r\n\r\n    for (let i = 0; i <= frameCount; i++) {\r\n        const t: number = i / frameCount;\r\n        const ease: number = t < 0.5 ? 2 * t * t : -1 + 2 * (2 - t) * t;\r\n        frames.push(positions.currentScrollPosition + distance * ease);\r\n    }\r\n    return frames;\r\n}\r\n\r\nexport function initSmoothScrolling(...keyFrames: any) {\r\n    const animation = setInterval(() => {\r\n        if (keyFrames.length) {\r\n            document.documentElement.scrollTop = document.body.scrollTop = keyFrames.shift() || 0;\r\n        } else {\r\n            clearInterval(animation);\r\n        }\r\n    }, 1000 / 30);\r\n}\r\n","import { useEffect, useState } from 'react';\r\nimport { ILinkFarmTab, ILinkFarmTabLink } from '../../../api/types/content-api';\r\nimport { smoothScroll } from '../../../utilities/smoothScroll';\r\nimport { ANALYTICS_CONSTANTS, trackAnchorClick, trackEDDL } from '../../../utilities/analytics';\r\n\r\nconst LinkFarmTabContent = (props: any) => {\r\n    const { tabName, tabLinks }: ILinkFarmTab = props.tab;\r\n    const { data, activeTab, tabIndex, linkFarmRef } = props;\r\n    const moreButtonThreshold = 20;\r\n\r\n    const [tabsOpenStatus, setTabsOpenStatus] = useState(() => {\r\n        // creates { 0: true, 1:false, 2: false, ... }\r\n        const tabStatus: { [key: string]: boolean } = {};\r\n        data.tabItems.forEach((tab: ILinkFarmTab, i: number) => {\r\n            tabStatus[String(i)] = false;\r\n        });\r\n        return tabStatus;\r\n    });\r\n\r\n    const [isActive, setIsActive] = useState(false);\r\n\r\n    useEffect(() => {\r\n        setIsActive(activeTab === tabIndex);\r\n    }, [activeTab]);\r\n\r\n    function handleToggleTabContent(i: number) {\r\n        setTabsOpenStatus({ [i]: !tabsOpenStatus[i] });\r\n        const tabWillBeClosed = !tabsOpenStatus[i] === false;\r\n        tabWillBeClosed && smoothScroll((linkFarmRef?.current as unknown) as HTMLElement, -20);\r\n    }\r\n\r\n    function renderLinks(tabName: string) {\r\n        return tabLinks.map((link: ILinkFarmTabLink, i: number) => {\r\n            const { linkUrl, linkText, linkAttribute, linkAttributeValue } = link;\r\n            const customAttribute = { [linkAttribute as string]: linkAttributeValue };\r\n            return (\r\n                <li key={i}>\r\n                    <a\r\n                        href={linkUrl}\r\n                        onClick={(clickEvent) => {\r\n                            trackAnchorClick({\r\n                                clickEvent,\r\n                                taggingEvent: ANALYTICS_CONSTANTS.EVENTS.CLICK.CTA,\r\n                                title: linkText,\r\n                                position: `Browse By: ${tabName}`,\r\n                                href: linkUrl,\r\n                                page: 'Homepage',\r\n                            });\r\n                        }}\r\n                        {...customAttribute}\r\n                    >\r\n                        {linkText}\r\n                    </a>\r\n                </li>\r\n            );\r\n        });\r\n    }\r\n\r\n    return (\r\n        <div className=\"hp-tabs-contents\">\r\n            <div\r\n                id={`link-farm-tabs--tab-content__${tabName}`}\r\n                className={`hp-tabs-content link-farm-tabs--tab-content\r\n                ${\r\n                    tabsOpenStatus[activeTab] ? 'link-farm-tabs--tab-content__is-expanded' : ''\r\n                }  link-farm-tabs--tab-content${isActive ? '--active' : ''}`}\r\n            >\r\n                <div className=\"link-farm-tabs--link-list-expansion-container\">\r\n                    <a className=\"skip-link\" href=\"#mobile-apps\">\r\n                        Skip List of Popular Vehicles\r\n                    </a>\r\n                    <ul className=\"link-farm-tabs--link-list\">{renderLinks(tabName)}</ul>\r\n                </div>\r\n                {tabLinks.length > moreButtonThreshold && (\r\n                    <div className=\"link-farm-tabs--view-more-container\" aria-hidden=\"true\">\r\n                        <button\r\n                            className=\"link-farm-tabs--view-more-button\"\r\n                            data-for={`link-farm-tabs--tab-content__${tabName}`}\r\n                            onClick={() => {\r\n                                // Analytics\r\n                                trackEDDL({\r\n                                    event: ANALYTICS_CONSTANTS.EVENTS.CLICK.CTA,\r\n                                    linkDetails: {\r\n                                        name: `View ${tabsOpenStatus[tabIndex] ? 'less' : 'more'}`,\r\n                                        position: 'Browse By',\r\n                                    },\r\n                                });\r\n                                // Toggle content\r\n                                handleToggleTabContent(tabIndex);\r\n                            }}\r\n                        >\r\n                            <span className=\"link-farm-tabs--view-more-button-label\">\r\n                                View {tabsOpenStatus[tabIndex] ? 'less' : 'more'}\r\n                            </span>\r\n                            <span className=\"link-farm-tabs--view-more-button-icon\">\r\n                                <svg\r\n                                    viewBox=\"0 0 24 24\"\r\n                                    xmlns=\"http://www.w3.org/2000/svg\"\r\n                                    aria-hidden=\"true\"\r\n                                    focusable=\"false\"\r\n                                >\r\n                                    <path d=\"M7.41 7.84L12 12.42l4.59-4.58L18 9.25l-6 6-6-6z\"></path>\r\n                                    <path d=\"M0-.75h24v24H0z\" fill=\"none\"></path>\r\n                                </svg>\r\n                            </span>\r\n                        </button>\r\n                    </div>\r\n                )}\r\n            </div>\r\n        </div>\r\n    );\r\n};\r\n\r\nexport default LinkFarmTabContent;\r\n","import { useEffect, useRef, useState } from 'react';\r\nimport { emptyContentfulLinkFarmResponse, getContentfulLinkFarm } from '../../../api/content-service-api';\r\nimport { IContentfulLinkFarmResponse, ILinkFarmTab } from '../../../api/types/content-api';\r\nimport LoadingSpinner from '../../../components/loading-spinner';\r\nimport { revealAnimation } from '../../../utilities/revealAnimation';\r\nimport LinkFarmTab from './LinkFarmTab';\r\nimport LinkFarmTabContent from './LinkFarmTabContent';\r\n\r\nconst LinkFarm = (props: any) => {\r\n    const [activeTab, setActiveTab] = useState(0);\r\n    const [data, setTabs] = useState<IContentfulLinkFarmResponse>(emptyContentfulLinkFarmResponse);\r\n    const [isLoading, setIsLoading] = useState(true);\r\n    const linkFarmRef = useRef(null);\r\n\r\n    useEffect(() => {\r\n        getContentfulLinkFarm().then((data) => {\r\n            setTabs(data);\r\n            data.tabItems.length > 0 && setIsLoading(false);\r\n        });\r\n    }, []);\r\n\r\n    if (isLoading) {\r\n        return <LoadingSpinner />;\r\n    } else {\r\n        return (\r\n            <div ref={linkFarmRef} className=\"link-farm-tabs--max-width-container\">\r\n                <h2 className=\"link-farm-tabs--heading\" id=\"homepage-links\">\r\n                    Shop CarMax\r\n                    <span className=\"mobile-hidden\">&nbsp;</span>\r\n                    <span className=\"tablet-hidden desktop-hidden\">\r\n                        <br />\r\n                    </span>\r\n                    your way\r\n                </h2>\r\n                <div id=\"link-farm-tabs-container\" className=\"hp-tabs-container\">\r\n                    <nav className=\"hp-tabs-headers\">\r\n                        <div className=\"hp-tabs-headers-scroll-container\" role=\"tablist\">\r\n                            {data.tabItems.map((tab: ILinkFarmTab, i: number) => {\r\n                                return (\r\n                                    <LinkFarmTab\r\n                                        key={i}\r\n                                        tab={tab}\r\n                                        tabIndex={i}\r\n                                        activeTab={activeTab}\r\n                                        setActiveTab={setActiveTab}\r\n                                    />\r\n                                );\r\n                            })}\r\n                        </div>\r\n                    </nav>\r\n                </div>\r\n\r\n                {data.tabItems.map((tab: ILinkFarmTab, i: number) => {\r\n                    return (\r\n                        <LinkFarmTabContent\r\n                            key={i}\r\n                            data={data}\r\n                            activeTab={activeTab}\r\n                            tab={tab}\r\n                            tabIndex={i}\r\n                            linkFarmRef={linkFarmRef}\r\n                        />\r\n                    );\r\n                })}\r\n            </div>\r\n        );\r\n    }\r\n};\r\n\r\nexport default LinkFarm;\r\n","\"use client\";\nimport { jsx as C, Fragment as L } from \"react/jsx-runtime\";\nimport { createSvgIcon as H } from \"@mui/material/utils\";\nconst t = H(\n  /* @__PURE__ */ C(L, { children: /* @__PURE__ */ C(\n    \"path\",\n    {\n      d: \"M21.4299 8.47999C20.9699 7.55999 19.8299 5.77999 19.2199 4.82999L19.1499 4.72999C18.5699 3.81999 17.6999 3.29999 16.7599 3.29999H7.23993C6.30993 3.29999 5.43993 3.81999 4.84993 4.72999L4.76993 4.85999C4.11993 5.86999 3.02993 7.56999 2.56993 8.47999C2.08993 9.43999 2.23993 10.62 2.95993 11.49C4.16993 12.94 6.32993 15.48 8.08993 17.57L9.96993 19.79C10.4699 20.38 11.2099 20.72 11.9999 20.72C12.7899 20.72 13.5299 20.38 14.0299 19.79L15.2499 18.35C17.0999 16.16 19.6399 13.16 21.0399 11.5C21.7599 10.64 21.9199 9.45999 21.4299 8.48999V8.47999ZM17.9499 5.48999L18.0199 5.58999C18.6199 6.51999 19.7299 8.25999 20.1599 9.10999C20.1899 9.16999 20.1999 9.22999 20.2199 9.28999H16.5199L14.9899 4.70999H16.7699C17.3699 4.70999 17.7699 5.19999 17.9599 5.48999H17.9499ZM11.9999 18.09L9.04993 10.71H14.9499L11.9999 18.09ZM8.98993 9.28999L10.5199 4.70999H13.4999L15.0299 9.28999H8.99993H8.98993ZM5.96993 5.61999L6.04993 5.48999C6.23993 5.19999 6.63993 4.70999 7.23993 4.70999H9.01993L7.48993 9.28999H3.77993C3.79993 9.22999 3.80993 9.16999 3.83993 9.10999C4.25993 8.26999 5.36993 6.53999 5.95993 5.61999H5.96993ZM9.18993 16.64C7.47993 14.62 5.40993 12.17 4.17993 10.71H7.52993L10.5399 18.24L9.18993 16.64ZM14.1799 17.42L13.4799 18.25L16.4899 10.71H19.8399C18.4199 12.4 15.9799 15.29 14.1699 17.42H14.1799Z\",\n      fill: \"currentColor\"\n    }\n  ) }),\n  \"KmxDiamondStroked\"\n);\nexport {\n  t as default\n};\n","\"use client\";\nimport { jsx as C, Fragment as e } from \"react/jsx-runtime\";\nimport { createSvgIcon as o } from \"@mui/material/utils\";\nconst l = o(\n  /* @__PURE__ */ C(e, { children: /* @__PURE__ */ C(\n    \"path\",\n    {\n      d: \"M2.28998 11C2.28998 5.64998 6.64998 1.28998 12 1.28998C17.35 1.28998 21.71 5.40998 21.71 11C21.71 16.5688 15.5569 20.5695 13.5032 21.9048L13.48 21.92C13.03 22.21 12.51 22.36 12 22.36C11.49 22.36 10.97 22.21 10.52 21.92C8.47998 20.6 2.28998 16.35 2.28998 11ZM11.2608 20.711L11.29 20.73C11.72 21.01 12.28 21.01 12.71 20.73C14.58 19.52 20.29 15.82 20.29 11C20.29 6.42998 16.57 2.70998 12 2.70998C7.42998 2.70998 3.70998 6.18998 3.70998 11C3.70998 15.7853 9.36144 19.4719 11.2608 20.711ZM8.28998 11C8.28998 8.94998 9.94998 7.28998 12 7.28998C14.05 7.28998 15.71 8.94998 15.71 11C15.71 13.05 14.05 14.71 12 14.71C9.94998 14.71 8.28998 13.05 8.28998 11ZM9.70998 11C9.70998 12.26 10.74 13.29 12 13.29C13.26 13.29 14.29 12.26 14.29 11C14.29 9.73998 13.26 8.70998 12 8.70998C10.74 8.70998 9.70998 9.73998 9.70998 11Z\",\n      fill: \"currentColor\",\n      fillRule: \"evenodd\",\n      clipRule: \"evenodd\"\n    }\n  ) }),\n  \"KmxLocationStroked\"\n);\nexport {\n  l as default\n};\n","import { Card, Container, Grid2 as Grid, Stack, Typography } from '@mui/material';\r\nimport { KmxDiamondStroked, KmxLocationStroked, KmxShieldCheckStroked } from '@kmx/mui-icons';\r\n\r\ninterface IContent {\r\n    icon: JSX.Element;\r\n    text: string;\r\n    disclaimer?: string;\r\n}\r\n\r\nconst colors = {\r\n    neutral: '#2a343d',\r\n    neutralWeak: '#DEDFE0',\r\n};\r\n\r\nconst iconStyles = { height: '40px', width: '40px', color: colors.neutral };\r\n\r\nconst cardStyles = {\r\n    minHeight: {\r\n        sm: '195px',\r\n    },\r\n    borderRadius: {\r\n        xs: 0,\r\n        sm: 2,\r\n    },\r\n    border: {\r\n        xs: 0,\r\n        sm: `1px solid ${colors.neutralWeak}`,\r\n    },\r\n    padding: {\r\n        xs: 0,\r\n    },\r\n    pt: {\r\n        sm: 4,\r\n    },\r\n    pb: {\r\n        xs: 2,\r\n        sm: 5,\r\n    },\r\n    px: {\r\n        xs: 0,\r\n        sm: 3,\r\n        md: 5,\r\n    },\r\n};\r\n\r\nconst content: IContent[] = [\r\n    {\r\n        icon: <KmxDiamondStroked sx={iconStyles} />,\r\n        text: 'Upfront prices, CarMax Certified quality, and detailed history reports on every car',\r\n    },\r\n    {\r\n        icon: <KmxLocationStroked sx={iconStyles} />,\r\n        text: 'Shop online, in-store, or both. We provide no-pressure help along the way.',\r\n    },\r\n    {\r\n        icon: <KmxShieldCheckStroked sx={iconStyles} />,\r\n        text: '10-day returns and 90-day or 4,000 mile limited warranty (whichever comes first)',\r\n        disclaimer: 'See store for written details.',\r\n    },\r\n];\r\n\r\nexport const TheCarMaxDifference = () => {\r\n    return (\r\n        <Container sx={{ px: { xs: 3, sm: 5, lg: 3 }, mt: { xs: 7, md: 11 }, mb: { xs: 15, md: 23 } }}>\r\n            <Typography component=\"h2\" variant=\"h4\" color={colors.neutral} sx={{ mb: 6 }}>\r\n                The CarMax difference\r\n            </Typography>\r\n            <Stack direction={{ xs: 'column', sm: 'row' }} spacing={{ xs: 2, md: 3 }}>\r\n                {content.map((item, i) => (\r\n                    <Grid key={i} size={{ xs: 12, sm: 4 }}>\r\n                        <Card elevation={0} sx={cardStyles}>\r\n                            {item.icon}\r\n                            <Typography component=\"div\" variant=\"body1\" color={colors.neutral}>\r\n                                {item.text}\r\n                            </Typography>\r\n                            {item.disclaimer && (\r\n                                <Typography\r\n                                    component=\"div\"\r\n                                    variant=\"caption\"\r\n                                    color=\"text.secondary\"\r\n                                    fontStyle=\"italic\"\r\n                                    sx={{ mb: -2.5 }}\r\n                                >\r\n                                    {item.disclaimer}\r\n                                </Typography>\r\n                            )}\r\n                        </Card>\r\n                    </Grid>\r\n                ))}\r\n            </Stack>\r\n        </Container>\r\n    );\r\n};\r\n","import * as ReactDOM from 'react-dom';\r\nimport onDomContentLoaded from '../../utilities/onDomContentLoaded';\r\nimport BudgetCalculatorContainer from './budget-calculator/BudgetCalculatorContainer';\r\nimport InstantOffersLoader from '../../components/instant-offers/InstantOffersLoader';\r\nimport { instantOffersSectionId } from '../../components/instant-offers/utils/constants';\r\nimport SocialProofContainer from '../../components/carousels/social-proof/SocialProofContainer';\r\nimport ResearchArticlesContainer from '../../components/carousels/research-articles/ResearchArticlesContainer';\r\nimport StatePricingDisclaimerContainer from '../../components/StatePricingDisclaimerContainer';\r\nimport ErrorBoundary from '../../components/ErrorBoundary';\r\nimport HeroContainer from './hero/HeroContainer';\r\nimport HeroRefactor from './HeroRefactor';\r\nimport * as nearestStoreLinkBuilder from './utilities/nearestStoreLinkBuilder';\r\nimport { isReturnHomePageVisitor, trackFirstTimeHomePageVisitor } from './utilities/helpers';\r\nimport { FULL_STORY_HOME_PAGE_ID } from './utilities/constants';\r\nimport '../../../scss/pages/home/main.scss';\r\nimport { ServerSideExperimentProvider } from './campaigns/ServerSideExperimentContext';\r\nimport { FBSProvider } from '../../context';\r\nimport { isAuthenticated } from '../../utilities/cookieHelper';\r\nimport { LocalCarsLoader } from './local-cars/LocalCarsLoader';\r\nimport { RecentSearchesContainer } from './homebase-optimization-test/recent-searches/RecentSearchesContainer';\r\nimport { fetchAsyncData, getComponentAndData } from './HeroRefactor/services/services';\r\nimport { useHomeStore } from './HeroRefactor/Store';\r\nimport { YouMightLikeContainer } from './homebase-optimization-test/YouMightLikeContainer';\r\nimport LinkFarm from './link-farm';\r\nimport { FadeInOnScroll } from '../../components/transitions/FadeInOnScroll';\r\nimport { trackEDDL, ANALYTICS_CONSTANTS } from '../../utilities/analytics';\r\nimport ThemeProvider from '@mui/material/styles/ThemeProvider';\r\nimport theme from '../../theme';\r\nimport { TheCarMaxDifference } from './the-carmax-difference';\r\n\r\nfunction startup() {\r\n    fetchAsyncData().then((experiences) => {\r\n        const experienceData = getComponentAndData(experiences);\r\n\r\n        useHomeStore.getState().setInitialValues({\r\n            experiences: experiences as unknown[],\r\n            component: experienceData.name,\r\n            experienceData,\r\n            isLoading: false,\r\n        });\r\n    });\r\n\r\n    nearestStoreLinkBuilder.buildAllLinks();\r\n    const heroContainer = document.getElementById('hero') as HTMLElement;\r\n    const heroConainerNew = document.getElementById('hero-new') as HTMLElement;\r\n    if (!featureFlags.enableHomeBaseRefactor && (isReturnHomePageVisitor() || isAuthenticated())) {\r\n        if (heroContainer) {\r\n            ReactDOM.render(\r\n                <ErrorBoundary>\r\n                    <ServerSideExperimentProvider>\r\n                        <FBSProvider>\r\n                            <HeroContainer fullStoryPageId={FULL_STORY_HOME_PAGE_ID} />\r\n                        </FBSProvider>\r\n                    </ServerSideExperimentProvider>\r\n                </ErrorBoundary>,\r\n                heroContainer\r\n            );\r\n        }\r\n    } else {\r\n        trackFirstTimeHomePageVisitor();\r\n    }\r\n\r\n    if (featureFlags.enableHomeBaseRefactor) {\r\n        ReactDOM.render(\r\n            <ErrorBoundary>\r\n                <ServerSideExperimentProvider>\r\n                    <FBSProvider>\r\n                        <ThemeProvider theme={theme}>\r\n                            <HeroRefactor />\r\n                        </ThemeProvider>\r\n                    </FBSProvider>\r\n                </ServerSideExperimentProvider>\r\n            </ErrorBoundary>,\r\n            heroConainerNew\r\n        );\r\n    }\r\n\r\n    const recentSearchesContainer = document.getElementById('recent-searches-container');\r\n\r\n    if (recentSearchesContainer) {\r\n        ReactDOM.render(\r\n            <ErrorBoundary>\r\n                <RecentSearchesContainer />\r\n            </ErrorBoundary>,\r\n            recentSearchesContainer\r\n        );\r\n    }\r\n\r\n    const youMightLikeContainer = document.getElementById('you-might-like-container');\r\n\r\n    if (youMightLikeContainer) {\r\n        ReactDOM.render(\r\n            <ErrorBoundary>\r\n                <YouMightLikeContainer />\r\n            </ErrorBoundary>,\r\n            youMightLikeContainer\r\n        );\r\n    }\r\n\r\n    const budgetCalculatorContainer = document.getElementById('budget-calculator-section');\r\n\r\n    if (budgetCalculatorContainer) {\r\n        ReactDOM.render(\r\n            <ErrorBoundary>\r\n                <ServerSideExperimentProvider>\r\n                    <FBSProvider>\r\n                        <BudgetCalculatorContainer\r\n                            fullStoryPageId={FULL_STORY_HOME_PAGE_ID}\r\n                            financeCalculatorName=\"HP Calculator\"\r\n                        />\r\n                    </FBSProvider>\r\n                </ServerSideExperimentProvider>\r\n            </ErrorBoundary>,\r\n            budgetCalculatorContainer\r\n        );\r\n    }\r\n\r\n    const localCars = document.getElementById('local-cars');\r\n\r\n    if (localCars) {\r\n        ReactDOM.render(\r\n            <ErrorBoundary>\r\n                <LocalCarsLoader />\r\n            </ErrorBoundary>,\r\n            localCars\r\n        );\r\n    }\r\n\r\n    const socialProofContainer = document.getElementById('social-proof');\r\n\r\n    if (socialProofContainer) {\r\n        ReactDOM.render(\r\n            <ErrorBoundary>\r\n                <SocialProofContainer\r\n                    fullStoryPageId={FULL_STORY_HOME_PAGE_ID}\r\n                    nextFocus=\"#research-articles-component\"\r\n                />\r\n            </ErrorBoundary>,\r\n            socialProofContainer\r\n        );\r\n    }\r\n\r\n    const instantOffersContainer = document.getElementById(instantOffersSectionId);\r\n\r\n    if (instantOffersContainer) {\r\n        ReactDOM.render(\r\n            <ErrorBoundary>\r\n                <InstantOffersLoader />\r\n            </ErrorBoundary>,\r\n            instantOffersContainer\r\n        );\r\n    }\r\n\r\n    const researchArticleContainer = document.getElementById('research-articles-carousel-container');\r\n\r\n    if (researchArticleContainer) {\r\n        ReactDOM.render(\r\n            <ErrorBoundary>\r\n                <FadeInOnScroll>\r\n                    <ResearchArticlesContainer fullStoryPageId={FULL_STORY_HOME_PAGE_ID} nextFocus=\"#homepage-links\" />\r\n                </FadeInOnScroll>\r\n            </ErrorBoundary>,\r\n            researchArticleContainer\r\n        );\r\n    }\r\n\r\n    const theCarMaxDifference = document.getElementById('the-carmax-difference-container');\r\n\r\n    if (theCarMaxDifference) {\r\n        ReactDOM.render(\r\n            <ErrorBoundary>\r\n                <ThemeProvider theme={theme}>\r\n                    <TheCarMaxDifference />\r\n                </ThemeProvider>\r\n            </ErrorBoundary>,\r\n            theCarMaxDifference\r\n        );\r\n    }\r\n\r\n    const statePricingDisclaimerContainer = document.getElementById('state-pricing-disclaimer');\r\n\r\n    if (statePricingDisclaimerContainer) {\r\n        ReactDOM.render(\r\n            <ErrorBoundary>\r\n                <StatePricingDisclaimerContainer fullStoryPageId={FULL_STORY_HOME_PAGE_ID} />\r\n            </ErrorBoundary>,\r\n            statePricingDisclaimerContainer\r\n        );\r\n    }\r\n\r\n    const linkFarmContainer = document.getElementById('link-farm-tabs');\r\n    if (linkFarmContainer) {\r\n        ReactDOM.render(\r\n            <ErrorBoundary>\r\n                <FadeInOnScroll>\r\n                    <LinkFarm fullStoryPageId={FULL_STORY_HOME_PAGE_ID} />\r\n                </FadeInOnScroll>\r\n            </ErrorBoundary>,\r\n            linkFarmContainer\r\n        );\r\n    }\r\n}\r\n\r\n// Function to be called when a card's title is clicked\r\nconst handleEddlOnClick = (name: string, position: string) => {\r\n    trackEDDL({\r\n        event: ANALYTICS_CONSTANTS.EVENTS.CLICK.CTA,\r\n        linkDetails: {\r\n            name,\r\n            position,\r\n        },\r\n    });\r\n};\r\n\r\nconst registerEventListeners = () => {\r\n    // Get Apps Icons\r\n    const appsIcons: NodeListOf<HTMLAnchorElement> = document.querySelectorAll('a.mobile-apps--badge-link');\r\n    appsIcons.forEach((element) => {\r\n        element.addEventListener('click', (event) => {\r\n            event.preventDefault();\r\n            handleEddlOnClick(element.getAttribute('data-type') || '', 'apps');\r\n            window.open(element.href, '_blank');\r\n        });\r\n    });\r\n};\r\n\r\nonDomContentLoaded(() => {\r\n    startup();\r\n    registerEventListeners();\r\n});\r\n","import { viewedVehiclesHeaderIcon, recommendedIcon, recentSearchesHeaderIcon } from './svg';\r\n\r\nexport const returnVisitorLocalStorage = {\r\n    key: 'kmxHP:returnVisitor',\r\n};\r\nexport type IReturnVisitorLocalStorage = boolean;\r\n\r\nexport const viewedVehiclesLocalStorage = {\r\n    key: 'viewedVehicles',\r\n};\r\nexport enum HeroTheme {\r\n    Dark = 'dark',\r\n    Light = 'light',\r\n}\r\n\r\nexport enum VehicleStatuses {\r\n    Sold = 'Sold',\r\n    OnTestDrive = 'On Test Drive',\r\n    Reserved = 'Reserved',\r\n    Shipping = 'Shipping',\r\n    ComingSoon = 'Coming Soon',\r\n    OffSite = 'Off Site',\r\n    NotAvailable = 'Not Available',\r\n}\r\nexport const soldVehicleStatusCodes = [360, 370, 760];\r\nexport const onTestDriveStatusCodes = [340, 345, 740];\r\nexport const reservedStatusCodes = [347, 350, 747, 750];\r\nexport const reservedConditionalStatusCodes = [330, 730];\r\nexport const shippingStatusCodes = [640, 650];\r\nexport const shippingConditionalStatusCodes = [100];\r\nexport const otherUnavailableStatusCodes = [250, 270, 300, 320, 325, 700, 720, 735];\r\nexport const statusCodesForUnavailableVehicles = [\r\n    ...soldVehicleStatusCodes,\r\n    ...onTestDriveStatusCodes,\r\n    ...reservedStatusCodes,\r\n    ...reservedConditionalStatusCodes,\r\n    ...shippingStatusCodes,\r\n    ...shippingConditionalStatusCodes,\r\n    ...otherUnavailableStatusCodes,\r\n];\r\n\r\nexport enum ProgressionActivities {\r\n    ReservationRequested = 'ReservationRequested',\r\n    ReservationCreated = 'ReservationCreated',\r\n    ReservationUpdated = 'ReservationUpdated',\r\n    ReservationCancelled = 'ReservationCancelled',\r\n    ReservationRemoved = 'ReservationRemoved',\r\n    ReservationFailed = 'ReservationFailed',\r\n    VehicleOrderCreated = 'VehicleOrderCreated',\r\n    VehicleOrderSubmitted = 'VehicleOrderSubmitted',\r\n    VehicleOrderDeleted = 'VehicleOrderDeleted',\r\n    MaxCareSelected = 'MaxCareSelected',\r\n    MaxCareRemoved = 'MaxCareRemoved',\r\n    PreQualificationsSubmitted = 'Pre-QualificationsSubmitted',\r\n    PreQualificationsReceivingDone = 'Pre-QualificationsReceivingDone',\r\n    PreQualificationsExpired = 'Pre-QualificationsExpired',\r\n    CreditApplicationSubmitted = 'CreditApplicationSubmitted',\r\n    CreditApplicationDecisionReceived = 'CreditApplicationDecisionReceived',\r\n    CreditApplicationExpired = 'CreditApplicationExpired',\r\n    CreditApplicationViewed = 'CreditApplicationViewed',\r\n    CreditApplicationSaved = 'CreditApplicationSaved',\r\n    InstantOfferCompleted = 'InstantOfferCompleted',\r\n    TransferCheckoutCreated = 'TransferCheckoutCreated',\r\n    TransferCheckoutCompleted = 'TransferCheckoutCompleted',\r\n    TransferCheckoutAbandoned = 'TransferCheckoutAbandoned',\r\n    TransferOrderRequestSubmitted = 'TransferOrderRequestSubmitted',\r\n    TransferOrderAwaitingApproval = 'TransferOrderAwaitingApproval',\r\n    TransferOrderApproved = 'TransferOrderApproved',\r\n    TransferOrderDenied = 'TransferOrderDenied',\r\n    TransferOrderCancelled = 'TransferOrderCancelled',\r\n    TransferOrderTendered = 'TransferOrderTendered',\r\n    TransferOrderCompleted = 'TransferOrderCompleted',\r\n    PayoffAmountVerified = 'PayoffAmountVerified',\r\n    PayoffCreated = 'PayoffCreated',\r\n    VehicleAcquisitionOrderCreated = 'VehicleAcquisitionOrderCreated',\r\n    DocumentRequested = 'DocumentRequested',\r\n    DocumentUploaded = 'DocumentUploaded',\r\n    DocumentTransactionCompleted = 'DocumentTransactionCompleted',\r\n    SavedSearchCreated = 'SavedSearchCreated',\r\n    SavedSearchUpdated = 'SavedSearchUpdated',\r\n    SavedSearchRemoved = 'SavedSearchRemoved',\r\n    AppointmentScheduled = 'AppointmentScheduled',\r\n    AppointmentConfirmed = 'AppointmentConfirmed',\r\n    AppointmentRescheduled = 'AppointmentRescheduled',\r\n    AppointmentCanceled = 'AppointmentCanceled',\r\n}\r\n\r\nexport const LOADING_SPINNER_CLASS = 'loading-spinner';\r\nexport const MOBILE_TABLET_BREAKPOINT = 900;\r\nexport const FULL_STORY_HOME_PAGE_ID = 'HP';\r\nexport const MAX_RECENTLY_VIEWED_VEHICLE_TILES = 10;\r\nexport const MAX_BEST_MATCH_VEHICLE_TILES = 10;\r\nexport const BEST_MATCH_VERSION = 'BestMatchV4';\r\nexport const ENABLE_HOMEBASE_OPTIMIZATION_EVENT = 'kmxHomebaseEnableOptimization';\r\nexport const DAYS_BEFORE_HOMEBASE_VISITOR_EXPIRES = 30;\r\n\r\nexport enum HomebaseTab {\r\n    RecentlyViewed = 0,\r\n    Recommended = 1,\r\n    Searched = 2,\r\n}\r\n\r\nexport const TAB_LIST_ARIA_LABEL = 'Personalized vehicle shopping tools';\r\nconst TAB_ARIA_ID_PREFIX = 'kmx-hb-tab-';\r\nconst TAB_PANEL_ARIA_ID_PREFIX = 'kmx-hb-tab-panel-';\r\n\r\nexport const HOMEBASE_CAROUSELS: {\r\n    defaultCarouselOrder: HomebaseTab[];\r\n    byId: {\r\n        [key: number]: {\r\n            label: string;\r\n            ariaLabel: string;\r\n            carouselName: string;\r\n            carouselAnalyticsName: string;\r\n            tabButtonId: string;\r\n            tabPanelElementId: string;\r\n            initiationAnalyticsLabel: string;\r\n            dataAnalyticsAttr?: string;\r\n            tabButtonIcon: JSX.Element;\r\n        };\r\n    };\r\n} = {\r\n    defaultCarouselOrder: [HomebaseTab.RecentlyViewed, HomebaseTab.Searched, HomebaseTab.Recommended],\r\n    byId: {\r\n        [HomebaseTab.RecentlyViewed]: {\r\n            label: ' Viewed',\r\n            ariaLabel: 'Recently Viewed Vehicles',\r\n            carouselName: 'viewed',\r\n            carouselAnalyticsName: 'Recently Viewed',\r\n            tabButtonId: `${TAB_ARIA_ID_PREFIX}${HomebaseTab.RecentlyViewed}`,\r\n            tabPanelElementId: `${TAB_PANEL_ARIA_ID_PREFIX}${HomebaseTab.RecentlyViewed}`,\r\n            initiationAnalyticsLabel: 'HP Home Base Viewed Vehicles Init',\r\n            tabButtonIcon: viewedVehiclesHeaderIcon,\r\n        },\r\n        [HomebaseTab.Recommended]: {\r\n            label: ' You might like',\r\n            ariaLabel: 'Recommended Vehicles',\r\n            carouselName: 'recommended',\r\n            carouselAnalyticsName: 'Recommended',\r\n            tabButtonId: `${TAB_ARIA_ID_PREFIX}${HomebaseTab.Recommended}`,\r\n            tabPanelElementId: `${TAB_PANEL_ARIA_ID_PREFIX}${HomebaseTab.Recommended}`,\r\n            initiationAnalyticsLabel: 'HP Home Base Vehicle Recs Init',\r\n            tabButtonIcon: recommendedIcon,\r\n        },\r\n        [HomebaseTab.Searched]: {\r\n            label: ' Searched',\r\n            ariaLabel: 'Recent Vehicle Searches',\r\n            carouselName: 'searched',\r\n            carouselAnalyticsName: 'Searched',\r\n            tabButtonId: `${TAB_ARIA_ID_PREFIX}${HomebaseTab.Searched}`,\r\n            tabPanelElementId: `${TAB_PANEL_ARIA_ID_PREFIX}${HomebaseTab.Searched}`,\r\n            initiationAnalyticsLabel: 'HP Home Base Recent Searches Init',\r\n            tabButtonIcon: recentSearchesHeaderIcon,\r\n        },\r\n    },\r\n};\r\n","import {\r\n    returnVisitorLocalStorage,\r\n    viewedVehiclesLocalStorage,\r\n    IReturnVisitorLocalStorage,\r\n    VehicleStatuses,\r\n    soldVehicleStatusCodes,\r\n    onTestDriveStatusCodes,\r\n    reservedStatusCodes,\r\n    shippingStatusCodes,\r\n    otherUnavailableStatusCodes,\r\n    reservedConditionalStatusCodes,\r\n    shippingConditionalStatusCodes,\r\n    DAYS_BEFORE_HOMEBASE_VISITOR_EXPIRES,\r\n} from './constants';\r\nimport { IVehicleTile } from '../../../types/vehicleTile';\r\nimport { IRecentSearchLocalStorage, IViewedVehicleLocalStorage } from './types';\r\n\r\nexport const deviceIsApple = (): boolean => {\r\n    if (\r\n        window.navigator.userAgent &&\r\n        (window.navigator.userAgent.indexOf('Mac OS') != -1 ||\r\n            window.navigator.userAgent.toLowerCase().indexOf('iPhone OS') != -1)\r\n    ) {\r\n        return true;\r\n    }\r\n    return false;\r\n};\r\n\r\nexport const deviceIsAndroid = (): boolean => {\r\n    if (window.navigator.userAgent && window.navigator.userAgent.toLowerCase().indexOf('android') != -1) {\r\n        return true;\r\n    }\r\n    return false;\r\n};\r\n\r\nexport const deviceIsWindows = (): boolean => {\r\n    if (window.navigator.userAgent && window.navigator.userAgent.toLowerCase().indexOf('windows') != -1) {\r\n        return true;\r\n    }\r\n    return false;\r\n};\r\n\r\nexport const isReturnHomePageVisitor = (): boolean => {\r\n    let isFirstVisit = true;\r\n\r\n    try {\r\n        const serializedReturnVisitor = localStorage.getItem(returnVisitorLocalStorage.key) as string;\r\n        const returnVisitor = JSON.parse(serializedReturnVisitor) as IReturnVisitorLocalStorage | null;\r\n\r\n        if (returnVisitor && typeof returnVisitor === 'boolean') {\r\n            isFirstVisit = false;\r\n        }\r\n    } catch (e) {}\r\n\r\n    return !isFirstVisit && hasViewedVehicles();\r\n};\r\n\r\nexport const trackFirstTimeHomePageVisitor = () => {\r\n    try {\r\n        localStorage.setItem(returnVisitorLocalStorage.key, 'true');\r\n    } catch (e) {}\r\n};\r\n\r\nexport const getExpirationDate = (): number => {\r\n    const currentDate: Date = new Date();\r\n    return currentDate.setDate(currentDate.getDate() - DAYS_BEFORE_HOMEBASE_VISITOR_EXPIRES);\r\n};\r\n\r\nexport const getLocalStorageItem = <T>(key: string): T | null => {\r\n    const value: string | null = localStorage.getItem(key);\r\n    return value !== null ? JSON.parse(value) : null;\r\n};\r\n\r\nexport const filterOutExpiredVehicles = <T extends IViewedVehicleLocalStorage | IRecentSearchLocalStorage>(\r\n    vehicles: T[],\r\n    expirationDate: number\r\n): T[] => {\r\n    return vehicles?.filter(({ timestamp }: T) => timestamp > expirationDate) || [];\r\n};\r\n\r\nexport const hasViewedVehicles = (): boolean => {\r\n    try {\r\n        // Get viewed vehicles from localStorage\r\n        const viewedVehicles: IViewedVehicleLocalStorage[] = getLocalStorageItem(viewedVehiclesLocalStorage.key) || [];\r\n\r\n        // Keep only vehicles seen in the past {DAYS_BEFORE_HOMEBASE_VISITOR_EXPIRES}\r\n        const expirationDate = getExpirationDate();\r\n        const filteredVehicles = filterOutExpiredVehicles(viewedVehicles, expirationDate);\r\n\r\n        return filteredVehicles.length > 0;\r\n    } catch (error) {\r\n        console.error('Error retrieving viewed vehicles:', error);\r\n        return false;\r\n    }\r\n};\r\n\r\nexport const shiftUnavailableVehiclesToEnd = (vehicleTileList: IVehicleTile[]) => {\r\n    const availableVehicles: IVehicleTile[] = [];\r\n    const comingSoonVehicles: IVehicleTile[] = [];\r\n    const onRemoteLotVehicles: IVehicleTile[] = [];\r\n    const beingTransferredVehicles: IVehicleTile[] = [];\r\n    const onTestDriveVehicles: IVehicleTile[] = [];\r\n    const holdVehicles: IVehicleTile[] = [];\r\n    const soldVehicles: IVehicleTile[] = [];\r\n    const otherUnavailableVehicles: IVehicleTile[] = [];\r\n    let sortedVehicleTileList: IVehicleTile[] = [];\r\n\r\n    vehicleTileList.forEach((tile, index) => {\r\n        // use the below commented conditions to coerce DevTools recently viewed vehicles to have desired properties and test sorting\r\n\r\n        // // 0. make coming soon , doesn't comeback true when created\r\n        // if (index === 0) {\r\n        //     tile.isComingSoon = true;\r\n        // }\r\n\r\n        // // 1. make onRemoteLot\r\n        // if (index === 1) {\r\n        //     tile.isOnRemoteLot = true;\r\n        // }\r\n\r\n        // // 2. make being transferred\r\n        // if (index === 2) {\r\n        //     tile.statusCode = 100;\r\n        //     tile.isComingSoon = false;\r\n        // }\r\n\r\n        // // 3. make on test drive\r\n        // if (index === 3) tile.statusCode = 345;\r\n\r\n        // // 4. make on test drive\r\n        // if (index === 4) {\r\n        //     tile.statusCode = 330;\r\n        //     tile.isAvailableToTransact = false;\r\n        // }\r\n\r\n        // // 5. make sold\r\n        // if (index === 1) tile.statusCode = 360;\r\n\r\n        // 6. make other unavailable\r\n        // if (index === 1) {\r\n        //     tile.statusCode = 720;\r\n        //     tile.isSaleable = false;\r\n        // }\r\n\r\n        const status = translateVehicleStatus(tile);\r\n\r\n        // 0 - Coming soon\r\n        if (status === VehicleStatuses.ComingSoon) {\r\n            comingSoonVehicles.push(tile);\r\n            return;\r\n        }\r\n\r\n        // 1 Appointment Only\r\n        if (status === VehicleStatuses.OffSite) {\r\n            onRemoteLotVehicles.push(tile);\r\n            return;\r\n        }\r\n\r\n        // 2 On Test Drive\r\n        if (status === VehicleStatuses.OnTestDrive) {\r\n            onTestDriveVehicles.push(tile);\r\n            return;\r\n        }\r\n\r\n        // 3 Shipping\r\n        if (status === VehicleStatuses.Shipping) {\r\n            beingTransferredVehicles.push(tile);\r\n            return;\r\n        }\r\n\r\n        // 4 Reserved\r\n        if (status === VehicleStatuses.Reserved) {\r\n            holdVehicles.push(tile);\r\n            return;\r\n        }\r\n\r\n        // 5 sold\r\n        if (status === VehicleStatuses.Sold) {\r\n            soldVehicles.push(tile);\r\n            return;\r\n        }\r\n\r\n        // other\r\n        if (status === VehicleStatuses.NotAvailable) {\r\n            otherUnavailableVehicles.push(tile);\r\n            return;\r\n        }\r\n\r\n        availableVehicles.push(tile);\r\n    });\r\n\r\n    sortedVehicleTileList = [\r\n        ...availableVehicles,\r\n        ...comingSoonVehicles,\r\n        ...onRemoteLotVehicles,\r\n        ...onTestDriveVehicles,\r\n        ...beingTransferredVehicles,\r\n        ...holdVehicles,\r\n        ...soldVehicles,\r\n        ...otherUnavailableVehicles,\r\n    ];\r\n\r\n    return sortedVehicleTileList;\r\n};\r\n\r\nexport const translateVehicleStatus = (vehicle: IVehicleTile): string => {\r\n    const { isAvailableToTransact, isComingSoon, isOnRemoteLot, statusCode } = vehicle;\r\n    let status = '';\r\n\r\n    if (soldVehicleStatusCodes.includes(statusCode)) {\r\n        status = VehicleStatuses.Sold;\r\n    }\r\n\r\n    if (onTestDriveStatusCodes.includes(statusCode)) {\r\n        status = VehicleStatuses.OnTestDrive;\r\n    }\r\n\r\n    if (\r\n        reservedStatusCodes.includes(statusCode) ||\r\n        (reservedConditionalStatusCodes.includes(statusCode) && !isAvailableToTransact)\r\n    ) {\r\n        status = VehicleStatuses.Reserved;\r\n    }\r\n\r\n    if (\r\n        shippingStatusCodes.includes(statusCode) ||\r\n        (shippingConditionalStatusCodes.includes(statusCode) && !isComingSoon)\r\n    ) {\r\n        status = VehicleStatuses.Shipping;\r\n    }\r\n\r\n    if (isComingSoon) {\r\n        status = VehicleStatuses.ComingSoon;\r\n    }\r\n\r\n    if (isOnRemoteLot) {\r\n        status = VehicleStatuses.OffSite;\r\n    }\r\n\r\n    if (otherUnavailableStatusCodes.includes(statusCode)) {\r\n        status = VehicleStatuses.NotAvailable;\r\n    }\r\n\r\n    return status;\r\n};\r\n","import { Store } from '../../../types/store';\r\n\r\nconst nearestStoreLinkDataAttr = 'data-nearest-store-link';\r\n\r\nfunction buildHref(store: Store): string {\r\n    return store.Id ? `/stores/${store.Id}` : '/stores';\r\n}\r\n\r\nexport const buildAllLinks = () => {\r\n    const nearestStoreLinks = document.querySelectorAll(`[${nearestStoreLinkDataAttr}]`) as NodeListOf<\r\n        HTMLElement\r\n    > | null;\r\n\r\n    const event = new CustomEvent('kmxSubscribeToMyStoreModuleUpdates', {\r\n        detail: {\r\n            done: (store: Store) => {\r\n                if (store && nearestStoreLinks && nearestStoreLinks.length > 0) {\r\n                    const nearestStoreHref = buildHref(store);\r\n\r\n                    nearestStoreLinks.forEach((nearestStoreLink: HTMLElement) => {\r\n                        nearestStoreLink.setAttribute('href', nearestStoreHref);\r\n                        nearestStoreLink.removeAttribute(nearestStoreLinkDataAttr);\r\n                    });\r\n                }\r\n            }\r\n        }\r\n    });\r\n    document.documentElement.dispatchEvent(event);\r\n};\r\n","export const getSavedVehicles = (componentCallback: (stockNumberList: number[]) => any) => {\r\n    const event = new CustomEvent('kmxGetSavedCars', {\r\n        bubbles: true,\r\n        detail: {\r\n            callback: (result: Promise<any>) => {\r\n                result.then((stockNumberList: number[]) => {\r\n                    componentCallback(stockNumberList);\r\n                });\r\n            },\r\n        },\r\n    });\r\n    document.documentElement.dispatchEvent(event);\r\n};\r\n\r\nexport const setSavedVehicle = (sn: number, componentCallback?: (success: boolean) => any) => {\r\n    const event = new CustomEvent('kmxAddSavedCar', {\r\n        bubbles: true,\r\n        detail: {\r\n            stockNumber: sn,\r\n            callback: (result: Promise<any>) => {\r\n                toggleFavoritesResponse(result, componentCallback);\r\n            },\r\n        },\r\n    });\r\n    document.documentElement.dispatchEvent(event);\r\n};\r\n\r\nexport const removeSavedVehicle = (sn: number, componentCallback?: (success: boolean) => any) => {\r\n    const event = new CustomEvent('kmxRemoveSavedCar', {\r\n        bubbles: true,\r\n        detail: {\r\n            stockNumber: sn,\r\n            callback: (result: Promise<any>) => {\r\n                toggleFavoritesResponse(result, componentCallback);\r\n            },\r\n        },\r\n    });\r\n    document.documentElement.dispatchEvent(event);\r\n};\r\n\r\nconst toggleFavoritesResponse = (response: Promise<any>, componentCallback?: (success: boolean) => any) => {\r\n    response.then((success: boolean) => {\r\n        success && componentCallback && componentCallback(success);\r\n    });\r\n};\r\n\r\nexport const loadSavedVehiclesAssets = (done: () => any) => {\r\n    const savedVehiclesCSSDataEl = document.querySelector('[data-saved-vehicles-css-src]') as any;\r\n    const savedVehiclesJSDataEl = document.querySelector('[data-saved-vehicles-js-src]') as any;\r\n    const savedVehiclesCSSSrc = savedVehiclesCSSDataEl.getAttribute('data-saved-vehicles-css-src');\r\n    const savedVehiclesJSSrc = savedVehiclesJSDataEl.getAttribute('data-saved-vehicles-js-src');\r\n\r\n    const linkEl = document.createElement('link');\r\n    linkEl.setAttribute('rel', 'stylesheet');\r\n    linkEl.setAttribute('type', 'text/css');\r\n    linkEl.setAttribute('href', savedVehiclesCSSSrc);\r\n\r\n    const scriptEl = document.createElement('script');\r\n    scriptEl.setAttribute('type', 'text/javascript');\r\n    scriptEl.setAttribute('src', savedVehiclesJSSrc);\r\n\r\n    scriptEl.onload = () => {\r\n        linkEl.onload = () => done();\r\n        document.getElementsByTagName('head')[0].appendChild(linkEl);\r\n    };\r\n\r\n    document.getElementsByTagName('head')[0].appendChild(scriptEl);\r\n};\r\n","import * as React from 'react';\r\n\r\nexport const searchIcon = (\r\n    <svg viewBox=\"0 0 24 24\" width=\"32\" height=\"32\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\r\n        <path\r\n            className=\"filled-path\"\r\n            d=\"M15.5 14h-.79l-.28-.27a6.5 6.5 0 10-.7.7l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0a4.5 4.5 0 11-.01-8.99A4.5 4.5 0 019.5 14z\"\r\n        />\r\n        <path d=\"M0 0h24v24H0z\" fill=\"none\" />\r\n    </svg>\r\n);\r\n\r\nexport const recommendedIcon = (\r\n    <svg viewBox=\"0 0 24 24\" width=\"32\" height=\"32\" aria-hidden=\"true\" xmlns=\"http://www.w3.org/2000/svg\">\r\n        <path d=\"M0,0H24V24H0Z\" fill=\"none\" />\r\n        <path className=\"filled-path\" d=\"M3,11h8V3H3ZM5,5H9V9H5Z\" />\r\n        <path className=\"filled-path\" d=\"M13,3v8h8V3Zm6,6H15V5h4Z\" />\r\n        <path className=\"filled-path\" d=\"M3,21h8V13H3Zm2-6H9v4H5Z\" />\r\n        <polygon\r\n            className=\"filled-path\"\r\n            points=\"18 13 16 13 16 16 13 16 13 18 16 18 16 21 18 21 18 18 21 18 21 16 18 16 18 13\"\r\n        />\r\n    </svg>\r\n);\r\n\r\nexport const borderedHeartIcon = (\r\n    <svg viewBox=\"0 0 24 24\" width=\"32\" height=\"32\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\r\n        <path d=\"M0 0h24v24H0z\" fill=\"none\" />\r\n        <path\r\n            className=\"filled-path\"\r\n            d=\"M16.5 3A6 6 0 0012 5a6 6 0 00-4.5-2A5.5 5.5 0 002 8.5c0 3.8 3.4 6.9 8.6 11.5l1.4 1.4 1.4-1.4c5.2-4.6 8.6-7.7 8.6-11.5A5.5 5.5 0 0016.5 3zm.1 2A3.3 3.3 0 0120 8.4c0 2.8-3.2 5.8-8 10.2-4.8-4.4-8-7.4-8-10.2A3.3 3.3 0 017.4 5a3.9 3.9 0 012.9 1.4l1.7 2 1.7-2a3.9 3.9 0 013-1.4\"\r\n        />\r\n    </svg>\r\n);\r\n\r\nexport const lycgHeart = (\r\n    <svg width=\"53.91\" height=\"40\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 53.91 40\" aria-hidden=\"true\">\r\n        <path\r\n            d=\"M7.41,8.42A27.13,27.13,0,0,0,2.81,15l2.3,1.14a24.9,24.9,0,0,1,4.17-6Z\"\r\n            transform=\"translate(0 0)\"\r\n            fill=\"#ffc000\"\r\n        />\r\n        <path\r\n            d=\"M17.19,4.61l-1-2.35a26.69,26.69,0,0,0-6.8,4.3l1.67,1.93A24.55,24.55,0,0,1,17.19,4.61Z\"\r\n            transform=\"translate(0 0)\"\r\n            fill=\"#ffc000\"\r\n        />\r\n        <path\r\n            d=\"M23,2.9a22.43,22.43,0,0,1,3.66-.33V0a27.18,27.18,0,0,0-7.95,1.31l.79,2.44A23.19,23.19,0,0,1,23,2.9Z\"\r\n            transform=\"translate(0 0)\"\r\n            fill=\"#ffc000\"\r\n        />\r\n        <path\r\n            d=\"M46.05,7.92a27.35,27.35,0,0,0-6.47-4.79L38.38,5.4A24.41,24.41,0,0,1,44,9.54L46,8Z\"\r\n            transform=\"translate(0 0)\"\r\n            fill=\"#ffc000\"\r\n        />\r\n        <path\r\n            d=\"M29.1,2.65a24.63,24.63,0,0,1,7.07,1.72l1-2.37A26.91,26.91,0,0,0,29.32.1Z\"\r\n            transform=\"translate(0 0)\"\r\n            fill=\"#ffc000\"\r\n        />\r\n        <path\r\n            d=\"M51,39.06a27,27,0,0,0-.37-25l-2,1.62A23.88,23.88,0,0,1,51,23a24.17,24.17,0,0,1-2.28,15Z\"\r\n            transform=\"translate(0 0)\"\r\n            fill=\"#053361\"\r\n        />\r\n        <path\r\n            d=\"M49.36,11.86l-1.59-2L37.33,18.1a7.46,7.46,0,0,0-5.23-2.19,7.14,7.14,0,0,0-5.23,2.64,7.12,7.12,0,0,0-5.23-2.64,7.39,7.39,0,0,0-7.37,7.39c0,3.74,2,7.61,5.93,11.5a39.4,39.4,0,0,0,6,4.77l.68.43.69-.43a39.4,39.4,0,0,0,6-4.77c3.94-3.89,5.94-7.76,5.94-11.5V23a7.22,7.22,0,0,0-.67-2.74ZM36.91,23.3c0,3-1.74,6.28-5.17,9.67a36,36,0,0,1-4.87,4A37.3,37.3,0,0,1,22,33c-3.42-3.39-5.16-6.64-5.16-9.67a4.81,4.81,0,0,1,4.8-4.82h0c1.78,0,3,1.37,4,2.58l1.19,1.35L28,21.09c1.06-1.21,2.26-2.58,4-2.58a4.82,4.82,0,0,1,4.92,4.72h0Z\"\r\n            transform=\"translate(0 0)\"\r\n            fill=\"#053361\"\r\n        />\r\n        <path\r\n            d=\"M4.17,18.33l-2.4-.91a27.66,27.66,0,0,0-1,3.08,27.09,27.09,0,0,0,2.1,18.56l2.29-1.15a24.41,24.41,0,0,1-2-16.14,2.88,2.88,0,0,1,.13-.65A22.58,22.58,0,0,1,4.17,18.33Z\"\r\n            transform=\"translate(0 0)\"\r\n            fill=\"#053361\"\r\n        />\r\n    </svg>\r\n);\r\n\r\nexport const coloredHeartIcon = (\r\n    <svg aria-hidden=\"true\" xmlns=\"http://www.w3.org/2000/svg\" width=\"57.1\" height=\"64\" viewBox=\"0 0 57.1 64\">\r\n        <path\r\n            d=\"M40,50.67l-2.48-2.22c-8.81-7.83-14.62-13-14.62-19.34a9.23,9.23,0,0,1,9.4-9.23A10.31,10.31,0,0,1,40,23.39a10.31,10.31,0,0,1,7.7-3.51,9.23,9.23,0,0,1,9.4,9.23c0,6.34-5.81,11.51-14.62,19.36Z\"\r\n            transform=\"translate(-22.9)\"\r\n            fill=\"#fa8e92\"\r\n        />\r\n        <path\r\n            d=\"M59.28,18.23a6.62,6.62,0,0,1,2.93,2.92.33.33,0,0,0,.31.2.34.34,0,0,0,.31-.2,6.6,6.6,0,0,1,2.92-2.92.34.34,0,0,0,.2-.32.33.33,0,0,0-.2-.31,6.65,6.65,0,0,1-2.92-2.92.33.33,0,0,0-.31-.2.32.32,0,0,0-.31.2,6.67,6.67,0,0,1-2.93,2.92.34.34,0,0,0-.2.31A.36.36,0,0,0,59.28,18.23Z\"\r\n            transform=\"translate(-22.9)\"\r\n            fill=\"#fff\"\r\n        />\r\n        <path\r\n            d=\"M68.48,6.47a11.47,11.47,0,0,1,5,5.05.58.58,0,0,0,.54.35.61.61,0,0,0,.54-.35,11.5,11.5,0,0,1,5-5A.58.58,0,0,0,80,5.93a.61.61,0,0,0-.35-.54,11.47,11.47,0,0,1-5-5A.61.61,0,0,0,74.07,0a.58.58,0,0,0-.54.35,11.45,11.45,0,0,1-5,5,.61.61,0,0,0-.35.54A.58.58,0,0,0,68.48,6.47Z\"\r\n            transform=\"translate(-22.9)\"\r\n            fill=\"#fff\"\r\n        />\r\n        <path\r\n            d=\"M71.13,23.77a1.25,1.25,0,1,1-1.25-1.25A1.25,1.25,0,0,1,71.13,23.77Z\"\r\n            transform=\"translate(-22.9)\"\r\n            fill=\"#fff\"\r\n        />\r\n        <ellipse cx=\"17.1\" cy=\"61.7\" rx=\"16.9\" ry=\"2.3\" fill=\"#053361\" opacity=\"0.4\" />\r\n    </svg>\r\n);\r\n\r\nexport const recentSearchesHeaderIcon = (\r\n    <svg aria-hidden=\"true\" xmlns=\"http://www.w3.org/2000/svg\" width=\"32\" height=\"32\" viewBox=\"0 0 32 32\">\r\n        <path\r\n            className=\"filled-path\"\r\n            d=\"M22.7,19.1H21.6l-.4-.4a9.16,9.16,0,0,0,2.1-5.8A8.81,8.81,0,0,0,14.6,4,8.79,8.79,0,0,0,6,12.9H2.7l5.1,5.5,5.5-5.5H8.6a6.13,6.13,0,0,1,6-6.2,6.13,6.13,0,0,1,6,6.2,6.13,6.13,0,0,1-6,6.2,6,6,0,0,1-2.4-.5l-2,2a8.31,8.31,0,0,0,4.4,1.2,8.21,8.21,0,0,0,5.6-2.2l.4.4v1.1L27.3,28l2-2Z\"\r\n        />\r\n        <g>\r\n            <rect id=\"bad44000-0b53-4c86-a131-794ad20f5488\" width=\"32\" height=\"32\" fill=\"none\" />\r\n        </g>\r\n    </svg>\r\n);\r\n\r\nexport const placeholderTileIcon = (\r\n    <svg aria-hidden=\"true\" xmlns=\"http://www.w3.org/2000/svg\" width=\"77.01\" height=\"63.86\" viewBox=\"0 0 77.01 63.86\">\r\n        <g>\r\n            <g>\r\n                <g>\r\n                    <g>\r\n                        <rect width=\"76.96\" height=\"58.33\" fill=\"none\" />\r\n                        <ellipse cx=\"38.01\" cy=\"61.43\" rx=\"17.01\" ry=\"2.43\" fill=\"#053361\" fillOpacity=\"0.4\" />\r\n                        <g>\r\n                            <path\r\n                                d=\"M43.58,37.64H42l-.58-.55a13.39,13.39,0,1,0-1.44,1.44l.55.57v1.63L50.79,51l3.06-3.07Zm-12.35,0a9.26,9.26,0,1,1,9.26-9.26A9.25,9.25,0,0,1,31.23,37.64Z\"\r\n                                fill=\"#fff\"\r\n                            />\r\n                        </g>\r\n                        <path\r\n                            d=\"M53.71,18.12a6.2,6.2,0,0,1,2.75,2.75.33.33,0,0,0,.3.19.3.3,0,0,0,.29-.19,6.27,6.27,0,0,1,2.76-2.75.32.32,0,0,0,.19-.3.31.31,0,0,0-.19-.29,6.29,6.29,0,0,1-2.76-2.76.32.32,0,0,0-.29-.19.35.35,0,0,0-.3.19,6.22,6.22,0,0,1-2.75,2.76.31.31,0,0,0-.19.29A.32.32,0,0,0,53.71,18.12Z\"\r\n                            fill=\"#fff\"\r\n                        />\r\n                        <path\r\n                            d=\"M65.22,6.63a11.78,11.78,0,0,1,5.16,5.17.62.62,0,0,0,1.11,0,11.75,11.75,0,0,1,5.17-5.17.62.62,0,0,0,0-1.11A11.75,11.75,0,0,1,71.49.35a.62.62,0,0,0-1.11,0,11.78,11.78,0,0,1-5.16,5.17.61.61,0,0,0,0,1.11Z\"\r\n                            fill=\"#fff\"\r\n                        />\r\n                        <path d=\"M65.67,23.9a1.22,1.22,0,1,1-1.21-1.22A1.21,1.21,0,0,1,65.67,23.9Z\" fill=\"#fff\" />\r\n                    </g>\r\n                </g>\r\n            </g>\r\n        </g>\r\n    </svg>\r\n);\r\n\r\nexport const viewedVehiclesHeaderIcon = (\r\n    <svg aria-hidden=\"true\" xmlns=\"http://www.w3.org/2000/svg\" width=\"32\" height=\"32\" viewBox=\"0 0 32 32\">\r\n        <rect width=\"32\" height=\"32\" fill=\"none\" />\r\n        <g>\r\n            <g>\r\n                <g>\r\n                    <g>\r\n                        <path\r\n                            className=\"filled-path\"\r\n                            d=\"M16.5,4a12,12,0,0,0-12,12H.5l5.19,5.19.09.18L11.17,16h-4a9.36,9.36,0,1,1,2.74,6.59L8,24.48A12,12,0,1,0,16.5,4Zm-1.33,6.67v6.66l5.7,3.39,1-1.61-4.66-2.78V10.67Z\"\r\n                        />\r\n                    </g>\r\n                </g>\r\n            </g>\r\n        </g>\r\n    </svg>\r\n);\r\n","import { IVehicleTile } from '../../../types/vehicleTile';\r\nimport { viewedVehiclesLocalStorage } from './constants';\r\nimport { IViewedVehicleLocalStorage } from './types';\r\n\r\nconst transformStockNumberTypeForLocalStorage = (stockNumber: number): string => {\r\n    return stockNumber.toString();\r\n};\r\n\r\nexport const removeViewedVehicleItemLocalStorage = (tileToRemove: IVehicleTile): void => {\r\n    const serializedViewedVehicles = localStorage.getItem(viewedVehiclesLocalStorage.key) as string;\r\n\r\n    const newLocalStorage: IViewedVehicleLocalStorage[] = [];\r\n\r\n    if (serializedViewedVehicles?.length) {\r\n        JSON.parse(serializedViewedVehicles).forEach((tileData: IViewedVehicleLocalStorage) => {\r\n            const tileDataString = transformStockNumberTypeForLocalStorage(tileData.stockNumber);\r\n            const tileToRemoveString = transformStockNumberTypeForLocalStorage(tileToRemove.stockNumber);\r\n\r\n            if (tileDataString === tileToRemoveString) {\r\n                return;\r\n            } else {\r\n                newLocalStorage.push(tileData);\r\n            }\r\n        });\r\n    } else {\r\n        console.log(\r\n            `Vehicle ${tileToRemove.stockNumber} was not found in the user's viewed vehicles. It may be a vehicle that was only saved/favorited.`\r\n        );\r\n    }\r\n\r\n    window.localStorage.setItem(viewedVehiclesLocalStorage.key, JSON.stringify(newLocalStorage));\r\n};\r\n","import { themeConfig } from '@kmx/mui-resources';\r\nimport { createTheme } from '@mui/material/styles';\r\nimport { deepmerge } from '@mui/utils';\r\n\r\nexport default createTheme(\r\n    deepmerge(themeConfig, {\r\n        colorSchemes: { dark: false },\r\n    })\r\n);\r\n","import { ITrackingPayload, ITrackAnchorClick } from '../types/analytics';\r\n\r\ndeclare global {\r\n    interface Window {\r\n        _satellite: any;\r\n    }\r\n}\r\n\r\ndeclare global {\r\n    interface Window {\r\n        adobeDataLayer: any;\r\n        digitalData: any;\r\n    }\r\n}\r\n\r\nexport const ANALYTICS_CONSTANTS = {\r\n    EVENTS: {\r\n        CLICK: {\r\n            CTA: 'ctaClick',\r\n            SAVE_RECOMMENDED_CAR: 'recommendedSaveCarClick',\r\n            SEARCH_INITIATED: 'searchInitiated',\r\n            RECOMMENDED_CARTILE: 'recommendedCarClicked',\r\n        },\r\n        PAGE: {\r\n            LOAD: 'pageLoad',\r\n            STATE: 'pageState',\r\n        },\r\n    },\r\n    PAGE_STATE_LOAD_TIME: 2000,\r\n    TRACKING_DELAY: 250,\r\n};\r\n\r\nexport const trackEDDL = (payload: ITrackingPayload): void => {\r\n    if (payload.event == null) {\r\n        payload.event = ANALYTICS_CONSTANTS.EVENTS.CLICK.CTA;\r\n    }\r\n    // \"adobeDataLayer\" will appear in the console if the site in questions is using \"EDDL\"\r\n    // Note: adobeDataLayer is created by Adobe, not us. Thus, we don't create it if it doesn't exist.\r\n    if (window.adobeDataLayer) {\r\n        window.adobeDataLayer.push(payload);\r\n    } else {\r\n        console.log('Home Microsite : adobeDataLayer is undefined. Data did not track.');\r\n    }\r\n};\r\n\r\nexport const trackAnchorClick = ({ clickEvent, taggingEvent, title, position, href, page }: ITrackAnchorClick) => {\r\n    clickEvent.preventDefault();\r\n    const payload: ITrackingPayload = {\r\n        event: taggingEvent,\r\n        linkDetails: {\r\n            name: title,\r\n            position: position,\r\n        },\r\n        search: {\r\n            initiationMethod: `${page}|${title}|${location}`,\r\n        },\r\n    };\r\n    trackEDDL(payload);\r\n    setTimeout(() => {\r\n        window.location.href = href;\r\n    }, ANALYTICS_CONSTANTS.TRACKING_DELAY);\r\n};\r\n","import { Store } from '../types/store';\r\n\r\nexport const COOKIES = {\r\n    myKmx: 'KmxMyKmx_0',\r\n    visitor: 'KmxVisitor_0',\r\n    authSession: 'KmxAuthSession',\r\n    mxMyKmxInfo: 'KmxMyKmxInfo',\r\n};\r\n\r\nexport const isAuthenticated = (): boolean => {\r\n    try {\r\n        return !!document.cookie.match(COOKIES.myKmx);\r\n    } catch (e) {\r\n        return false;\r\n    }\r\n};\r\nexport const getMyKmxUserId = (): string => {\r\n    try {\r\n        if (isAuthenticated()) {\r\n            return document.cookie.split(`${COOKIES.myKmx}=`)[1].split(';')[0].split('userid=')[1];\r\n        }\r\n        return '';\r\n    } catch (e) {\r\n        return '';\r\n    }\r\n};\r\nexport const hasSignedIn = (): boolean => {\r\n    try {\r\n        const myKmxUserId = document.cookie.split(`${COOKIES.visitor}=`)[1].split(';')[0].split('MyKmxUser=')[1];\r\n        return myKmxUserId !== '' && myKmxUserId.length > 0;\r\n    } catch (e) {\r\n        return false;\r\n    }\r\n};\r\nexport const hasAuthSession = (): boolean => {\r\n    try {\r\n        const authSession = document.cookie.split(`${COOKIES.authSession}=`)[1].split(';')[0].split('tk=')[1];\r\n\r\n        return authSession !== '' && authSession.length > 0;\r\n    } catch (e) {\r\n        return false;\r\n    }\r\n};\r\nexport const hasPreviouslySignedIn = (): boolean => {\r\n    try {\r\n        return hasSignedIn() && !hasAuthSession();\r\n    } catch (e) {\r\n        return false;\r\n    }\r\n};\r\n\r\nexport const mxMyKmxInfoObject = (): any => createObjectFromCookie(COOKIES.mxMyKmxInfo);\r\n\r\nconst createObjectFromCookie = (cookieName: string) => {\r\n    try {\r\n        const cookieInfo = document.cookie.split(`${cookieName}=`)[1].split(';')[0];\r\n        return splitCookieData(cookieInfo.split('&'));\r\n    } catch (e) {\r\n        return null;\r\n    }\r\n};\r\n\r\nexport const KmxVisitorObject = (): any => createObjectFromCookie(COOKIES.visitor);\r\n\r\nfunction splitCookieData(data: any): any {\r\n    if (data !== null) {\r\n        let dataArray = new Map();\r\n        dataArray = data.map((item: any) => [\r\n            item.substring(0, item.indexOf('=')),\r\n            item.substring(item.indexOf('=') + 1),\r\n        ]);\r\n        const cookieData = Object.fromEntries(dataArray);\r\n        return cookieData;\r\n    } else {\r\n        return null;\r\n    }\r\n}\r\n\r\nexport const getStoreId = (): string | undefined => {\r\n    return getCookieValue(COOKIES.visitor, 'StoreId');\r\n};\r\n\r\nexport const getStoreZipCode = (): string | undefined => {\r\n    return getCookieValue(COOKIES.visitor, 'Zip');\r\n};\r\n\r\nexport const getLatitude = (): number => {\r\n    const latString = getCookieValue(COOKIES.visitor, 'Lat');\r\n    let lat = 0;\r\n    if (latString !== undefined) {\r\n        lat = parseFloat(latString);\r\n    }\r\n    return lat;\r\n};\r\n\r\nexport const getLongitude = (): number => {\r\n    const longString = getCookieValue(COOKIES.visitor, 'Lon');\r\n    let long = 0;\r\n    if (longString !== undefined) {\r\n        long = parseFloat(longString);\r\n    }\r\n    return long;\r\n};\r\n\r\nconst getCookieValue = (cookieName: string, key: string): string | undefined => {\r\n    const cookie = createObjectFromCookie(cookieName);\r\n    return cookie?.[key];\r\n};\r\n","import * as React from 'react';\r\nimport { deviceIsApple, deviceIsAndroid, deviceIsWindows } from '../pages/home/utilities/helpers';\r\n\r\nclass Icons {\r\n    static get close() {\r\n        return (\r\n            <svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\r\n                <path d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\" />\r\n                <path d=\"M0 0h24v24H0z\" fill=\"none\" />\r\n            </svg>\r\n        );\r\n    }\r\n    static get delete() {\r\n        return (\r\n            <svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\r\n                <path d=\"M0 0h24v24H0V0z\" fill=\"none\" />\r\n                <path d=\"M6 19c0 1.1.9 2 2 2h8a2 2 0 002-2V7H6v12zm2.46-7.12l1.41-1.41L12 12.59l2.12-2.12 1.41 1.41L13.41 14l2.12 2.12-1.41 1.41L12 15.41l-2.12 2.12-1.41-1.41L10.59 14l-2.13-2.12zM15.5 4l-1-1h-5l-1 1H5v2h14V4z\" />\r\n                <path d=\"M0 0h24v24H0z\" fill=\"none\" />\r\n            </svg>\r\n        );\r\n    }\r\n    static get info() {\r\n        return (\r\n            <svg viewBox=\"0 0 24 24\" width=\"20px\" height=\"20px\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\r\n                <path d=\"M0 0h24v24H0z\" fill=\"none\" />\r\n                <path d=\"M12 2a10 10 0 100 20 10 10 0 000-20zm1 15h-2v-6h2v6zm0-8h-2V7h2v2z\" />\r\n            </svg>\r\n        );\r\n    }\r\n    static get info_rebrand() {\r\n        return (\r\n            <svg width=\"22\" height=\"22\" viewBox=\"0 0 22 22\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n                <g id=\"icons / material system icons / info\">\r\n                    <path\r\n                        id=\"Union\"\r\n                        fillRule=\"evenodd\"\r\n                        clipRule=\"evenodd\"\r\n                        d=\"M1.1825 11C1.1825 5.5825 5.5825 1.1825 11 1.1825C16.4175 1.1825 20.8175 5.5825 20.8175 11C20.8175 16.4175 16.4175 20.8175 11 20.8175C5.5825 20.8175 1.1825 16.4175 1.1825 11ZM2.48416 11C2.48416 15.6933 6.30666 19.5158 11 19.5158C15.6933 19.5158 19.5158 15.6933 19.5158 11C19.5158 6.30666 15.6933 2.48416 11 2.48416C6.30666 2.48416 2.48416 6.30666 2.48416 11ZM11 8.24996C11.5063 8.24996 11.9167 7.83955 11.9167 7.33329C11.9167 6.82703 11.5063 6.41663 11 6.41663C10.4937 6.41663 10.0833 6.82703 10.0833 7.33329C10.0833 7.83955 10.4937 8.24996 11 8.24996ZM12.8333 14.0158H11.6508V10.0833C11.6508 9.72583 11.3575 9.4325 11 9.4325H9.16667C8.80917 9.4325 8.51584 9.72583 8.51584 10.0833C8.51584 10.4408 8.80917 10.7342 9.16667 10.7342H10.3492V14.0158H9.16667C8.80917 14.0158 8.51584 14.3092 8.51584 14.6667C8.51584 15.0242 8.80917 15.3175 9.16667 15.3175H12.8333C13.1908 15.3175 13.4842 15.0242 13.4842 14.6667C13.4842 14.3092 13.1908 14.0158 12.8333 14.0158Z\"\r\n                        fill=\"#001333\"\r\n                    />\r\n                </g>\r\n            </svg>\r\n        );\r\n    }\r\n    static get search() {\r\n        return (\r\n            <svg viewBox=\"0 0 24 24\" width=\"24px\" height=\"24px\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\r\n                <path\r\n                    fill=\"#2A343D\"\r\n                    d=\"M15.5 14h-.79l-.28-.27a6.5 6.5 0 10-.7.7l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0a4.5 4.5 0 11-.01-8.99A4.5 4.5 0 019.5 14z\"\r\n                />\r\n                <path d=\"M0 0h24v24H0z\" fill=\"none\" />\r\n            </svg>\r\n        );\r\n    }\r\n    static get carPriceTag() {\r\n        return (\r\n            <svg width=\"32px\" height=\"32px\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 64 64\" aria-hidden=\"true\">\r\n                <path d=\"M0 0h64v64H0z\" fill=\"none\" />\r\n                <path d=\"M10.3 43.4a3.9 3.9 0 00-3.88 3.8 4.07 4.07 0 001.1 2.7 3.73 3.73 0 002.77 1.27A3.8 3.8 0 0013 50a3.88 3.88 0 001.1-2.68 4 4 0 00-3.85-3.9zm1.85 3.88a1.9 1.9 0 01-.56 1.3 1.8 1.8 0 01-1.3.6 1.8 1.8 0 01-1.3-.63 2.1 2.1 0 01-.58-1.36 1.92 1.92 0 011.87-1.8 2 2 0 011.85 1.88zm25.56 3.9a3.73 3.73 0 002.77-1.28 4.07 4.07 0 001.1-2.7 3.9 3.9 0 00-3.86-3.8 4 4 0 00-3.85 3.88A3.88 3.88 0 0035 50a3.8 3.8 0 002.7 1.17zm0-5.8a1.92 1.92 0 011.88 1.8 2.1 2.1 0 01-.58 1.37 1.8 1.8 0 01-1.3.62 1.8 1.8 0 01-1.3-.6 1.9 1.9 0 01-.55-1.3 2 2 0 011.86-1.88zM25.6 30.66a1 1 0 010 2h-8.4c-1.8 0-2.27.34-2.5 1L13 37.47h14.4a1 1 0 010 2H11.45a1 1 0 01-.84-.45 1 1 0 01-.07-1l2.3-5.2c.85-2.22 3.22-2.22 4.36-2.22zM24 52.08a14.64 14.64 0 006.64-1.78 1 1 0 11.92 1.78 16.66 16.66 0 01-7.56 2 16.68 16.68 0 01-7.58-2 1 1 0 01.92-1.78A14.65 14.65 0 0024 52.08zm21.22-6.5a1 1 0 10-1.94.5 5.32 5.32 0 01.1 2.1L42.24 57H5.82l-1.2-8.76a5.6 5.6 0 011.82-5l1.37-1a1 1 0 00-.57-1.8h-3.3C2.92 40.4 2 39 2 37.87c0-.7.63-.94 1.17-.94H4.8a25.55 25.55 0 013 1.53 1 1 0 00.8.07 1 1 0 00.6-.58l2.54-6.5a3.7 3.7 0 013.62-2.12h9.54a1 1 0 000-2h-9.5a5.53 5.53 0 00-5.48 3.4L7.8 36.18c-2.28-1.23-2.73-1.23-2.94-1.23h-1.7a3 3 0 00-3.16 3C0 40 1.68 42.4 3.94 42.4h.52a7.48 7.48 0 00-1.83 6.06l1.2 8.76A2 2 0 005.76 59h.65v2.08a3 3 0 002.95 3h1.88a3 3 0 002.95-3V59h19.64v2.08a3 3 0 003 3h1.88a3 3 0 003-3V59h.65a2 2 0 001.9-1.75l1.22-8.77a7.83 7.83 0 00-.24-2.9zm-33 15.47a1 1 0 01-.95 1H9.35a1 1 0 01-.95-1V59h3.78zm27.42 0a1 1 0 01-1 1h-1.87a1 1 0 01-1-1V59h3.83z\" />\r\n                <path d=\"M49.17 11.26a1.1 1.1 0 00-.2-.4l-6.06-7.72a1 1 0 00-1-.36l-4.45 1-.7-3a1 1 0 00-2 .46l.7 3L31 5.3a1 1 0 00-.75.76l-2.05 9.6a.93.93 0 000 .45L34 41.24a1 1 0 001 .77.83.83 0 00.22 0l19-4.4a1 1 0 00.75-1.2zM35.77 39.8l-5.53-23.93L32.1 7.1l3.84-.9.46 2a4.32 4.32 0 00-1.7 1.54 4.2 4.2 0 00-.53 3.2 4.25 4.25 0 004.13 3.3 4.47 4.47 0 001-.12 4.25 4.25 0 002.64-1.9 4.2 4.2 0 00.53-3.2 4.23 4.23 0 00-4.08-3.26l-.46-1.95 3.84-.88 5.54 7.06 5.54 23.93zm1.1-29.58l.45 1.94a1 1 0 001 .78.85.85 0 00.23 0 1 1 0 00.75-1.2l-.45-1.94a2.22 2.22 0 011.65 1.66 2.24 2.24 0 11-4.36 1 2.2 2.2 0 01.28-1.7 2.38 2.38 0 01.45-.54zM47.2 29.48a3.8 3.8 0 01-.82 3.22 4.24 4.24 0 01-1.5 1l.25 1.1a1 1 0 01-.75 1.2h-.23a1 1 0 01-1-.8l-.23-1a16 16 0 01-2.85.24h-.67a1 1 0 010-2c3.54.1 4.9-.58 5.4-1.16a1.88 1.88 0 00.35-1.6c-.18-1.24-1.34-1.8-3.42-1.68-2.36.15-3.55-.7-4.14-1.43a3.78 3.78 0 01-.6-3.47 3.74 3.74 0 012.7-2.62l-.2-1.08a1 1 0 112-.45l.3 1.28a18.52 18.52 0 012.16 0 1 1 0 11-.12 2c-3.84-.23-4.58.64-4.84 1.5a1.9 1.9 0 00.2 1.67 3 3 0 002.47.7c4.5-.27 5.38 2.27 5.54 3.38zm13.8-2.1a1 1 0 010 1.42 1 1 0 01-1.4 0L55.76 25a1 1 0 011.4-1.4zm-5.24-8.94a1 1 0 010-1.4l3.84-3.84a1 1 0 011.4 1.4l-3.83 3.84a1 1 0 01-1.4 0zM64 21a1 1 0 01-1 1h-3.93a1 1 0 110-2H63a1 1 0 011 1z\" />\r\n            </svg>\r\n        );\r\n    }\r\n    static get financialSlider() {\r\n        return (\r\n            <svg width=\"32px\" height=\"32px\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 64 64\" aria-hidden=\"true\">\r\n                <path d=\"M0 0h64v64H0z\" fill=\"none\" />\r\n                <path d=\"M29.3 13.6a1 1 0 011-1H63a1 1 0 010 2H30.3a1 1 0 01-1-1zM0 13.6a1 1 0 011-1h6.64a9.1 9.1 0 110 2H1a1 1 0 01-1-1zm9.6-.08a7.06 7.06 0 107.05-7.06 7.07 7.07 0 00-7.06 7.06zM63 31.12h-4.62a1 1 0 000 2H63a1 1 0 000-2zm-63 1a1 1 0 011-1h34.85a9.1 9.1 0 110 2H1a1 1 0 01-1-1zM37.8 32a7.06 7.06 0 107.07-7.06A7.07 7.07 0 0037.8 32zM63 49.4H39.16a1 1 0 000 2H63a1 1 0 000-2zm-28.43 1.08a9.06 9.06 0 01-18.07.9H1a1 1 0 010-2h15.52a9.06 9.06 0 0118.05 1.1zm-2 0a7.06 7.06 0 10-7.06 7.06 7.07 7.07 0 007.07-7.06z\" />\r\n                <path d=\"M19.3 15.07a2.2 2.2 0 01-.92 1.7 2.26 2.26 0 01-.5.27v.07a1 1 0 01-2 .08 8.94 8.94 0 01-1.12-.18 1 1 0 11.5-1.93c1.55.4 2 .13 2 .12l.08-.25c0-.27-.52-.4-.84-.46a2.56 2.56 0 01-2-1.34 2.25 2.25 0 01.1-2.06 2.08 2.08 0 011.27-1.1v-.07a1 1 0 012 0v.13l.52.14a1 1 0 01.67 1.25 1 1 0 01-1.25.67c-.85-.25-1.43-.3-1.53-.1s-.1.2-.08.2.15.18.58.25c2.48.42 2.53 2.1 2.5 2.6zM45 31c-.43-.08-.57-.2-.58-.24a.4.4 0 01.07-.23c.1-.18.66-.14 1.53.12a1 1 0 00.57-1.92l-.53-.14v-.14a1 1 0 10-2 0v.06a2.08 2.08 0 00-1.34 1.06 2.25 2.25 0 00-.1 2.06 2.6 2.6 0 002 1.33c.3 0 .84.2.82.45a.4.4 0 01-.07.25s-.42.27-2-.13a1 1 0 00-.5 1.94 7.86 7.86 0 001.12.22 1 1 0 002-.06v-.07a2.74 2.74 0 00.5-.27 2.22 2.22 0 00.92-1.7c.13-.6.07-2.23-2.42-2.6zM25.65 49.42c-.43-.07-.57-.2-.58-.23a.54.54 0 01.07-.24c.1-.18.68-.14 1.54.12a1 1 0 00.57-1.92l-.53-.16v-.13a1 1 0 00-2 0V47a2.1 2.1 0 00-1.34 1 2.22 2.22 0 00-.1 2.06 2.55 2.55 0 002 1.33c.32.04.86.17.83.44a.4.4 0 01-.06.25s-.4.26-2-.14a1 1 0 00-.5 1.94c.4.1.77.17 1.12.22a1 1 0 002-.06V54a2.3 2.3 0 00.52-.26 2.22 2.22 0 00.97-1.74c.04-.48 0-2.15-2.5-2.58z\" />\r\n            </svg>\r\n        );\r\n    }\r\n    static get maxcareService() {\r\n        return (\r\n            <svg width=\"32px\" height=\"32px\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 64 64\" aria-hidden=\"true\">\r\n                <path d=\"M0 0h64v64H0z\" fill=\"none\" />\r\n                <path d=\"M32 59a1 1 0 01-.57-.18l-13-9A16.07 16.07 0 0111 37.05l-2-28A1 1 0 019.92 8C17.78 7.4 27 5.17 31 4.21l.77-.21a1 1 0 01.45 0l1.11.26c4 .93 13.47 3.11 20.75 3.72A1 1 0 0155 9.07l-2 28c-.29 6-2.33 10-6.45 12.76l-14 9A1 1 0 0132 59zM11.07 9.91l1.93 27a13.94 13.94 0 006.55 11.24L32 56.8l13.44-8.64C49 45.81 50.75 42.25 51 37l1.93-27a176.56 176.56 0 01-20-3.68L32 6l-.55.13a152.73 152.73 0 01-20.38 3.78zM32 64a1 1 0 01-.55-.17l-15.6-10.4A21.07 21.07 0 016.52 37L5 5.05a1 1 0 01.28-.74A1 1 0 016 4C15.76 4 31.6.07 31.76 0a.94.94 0 01.47 0c.17 0 17 4 25.77 4a1 1 0 01.72.31 1 1 0 01.28.74L57.48 37a21.07 21.07 0 01-9.33 16.47l-15.6 10.4A1 1 0 0132 64zM7.05 6l1.47 30.86A19 19 0 0017 51.77l15 10 15-10a19 19 0 008.44-14.91L57 6c-8.73-.27-22.91-3.49-25-4-2 .52-15.5 3.75-24.95 4z\" />\r\n                <path d=\"M30 36a1 1 0 01-.71-.29l-4-4a1 1 0 011.42-1.42l3.21 3.21 7.3-9.12a1 1 0 011.56 1.24l-8 10a1 1 0 01-.72.38zm16-6a14 14 0 10-14 14 14 14 0 0014-14zm-2 0a12 12 0 11-12-12 12 12 0 0112 12z\" />\r\n            </svg>\r\n        );\r\n    }\r\n    static get ribbon() {\r\n        return (\r\n            <svg width=\"32px\" height=\"32px\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 64 64\" aria-hidden=\"true\">\r\n                <path d=\"M0 0h64v64H0z\" fill=\"none\" />\r\n                <path d=\"M38.92 53.07l-2.37-6.52 1.46.54a2.2 2.2 0 00.92.12l1.88 5.17a1 1 0 01-.6 1.27 1 1 0 01-.34.06 1 1 0 01-.94-.66zM17.05 51.2a.83.83 0 00.34.08 1 1 0 00.93-.66l2.4-6.57-1.54.06a2 2 0 01-.6-.1l-2.15 5.9a1 1 0 00.6 1.3zm13.58-3.37L29 46.53l-5.4 14.8-4.7-3.78a1 1 0 00-.6-.22h-2.4l.92-2.53a1 1 0 10-1.82-.73l-1.16 3.18h-1.5l5.07-14a2.2 2.2 0 01-.4-.75l-.64-2.28-6.44 17.64a1 1 0 00.92 1.34l7.08.12 5.5 4.46a1 1 0 00.63.22 1.24 1.24 0 00.27 0 1 1 0 00.67-.63l5.64-15.5zm17-7.6L47 42.5a2.2 2.2 0 01-.38.75l5.08 14-6 .1a1 1 0 00-.6.22l-1.87 1.5-1.07-2.9a1 1 0 10-1.88.67l1.3 3.57-1.17 1L35 46.54l-1.65 1.3L39 63.33a1 1 0 00.67.64A1.24 1.24 0 0040 64a1 1 0 00.63-.22l5.5-4.46 7.08-.12a1 1 0 00.93-1.34z\" />\r\n                <path d=\"M55.68 25.52a2.2 2.2 0 000-2.74l-1.6-2a.2.2 0 010-.2l.9-2.42a2.2 2.2 0 00-.85-2.6L52 14.1a.2.2 0 01-.1-.18l.1-2.58a2.2 2.2 0 00-1.6-2.2l-2.48-.7a.2.2 0 01-.15-.15L47 5.8a2.2 2.2 0 00-2.2-1.6l-2.6.1a.24.24 0 01-.17-.1l-1.4-2.14A2.22 2.22 0 0038 1.2l-2.4.9a.23.23 0 01-.22 0l-2-1.58a2.2 2.2 0 00-2.74 0l-2 1.6a.26.26 0 01-.2 0L26 1.22a2.22 2.22 0 00-2.6.84L22 4.2a.28.28 0 01-.18.1l-2.58-.1A2.2 2.2 0 0017 5.8l-.7 2.5a.2.2 0 01-.15.13l-2.48.7a2.2 2.2 0 00-1.67 2.2l.1 2.6a.2.2 0 01-.1.17l-2.1 1.43a2.2 2.2 0 00-.84 2.6l.94 2.43a.2.2 0 010 .2l-1.6 2a2.2 2.2 0 000 2.74l1.6 2a.18.18 0 010 .2l-.9 2.42a2.2 2.2 0 00.86 2.6l2.14 1.43a.2.2 0 01.1.18L12 37a2.2 2.2 0 001.6 2.22l2.5.7a.23.23 0 01.14.14L17 42.5a2.2 2.2 0 002.2 1.6l2.6-.1a.2.2 0 01.17.1l1.43 2.14a2.2 2.2 0 002.6.85l2.42-.9a.2.2 0 01.2 0l2 1.6a2.23 2.23 0 002.75 0l2-1.6a.2.2 0 01.2 0l2.42.9a2.2 2.2 0 002.6-.85l1.43-2.15a.2.2 0 01.18-.1l2.6.1a2.23 2.23 0 002.2-1.6l.7-2.48a.23.23 0 01.15-.15l2.48-.7A2.2 2.2 0 0052 37l-.1-2.58a.2.2 0 01.1-.22l2.14-1.43a2.2 2.2 0 00.85-2.6l-.9-2.42a.2.2 0 010-.2zm-3.5 2.92l.88 2.42a.2.2 0 01-.08.25l-2.14 1.44a2.2 2.2 0 00-1 1.92L50 37a.22.22 0 01-.15.2l-2.5.7a2.2 2.2 0 00-1.5 1.54L45.1 42a.23.23 0 01-.2.15L42.3 42a2.23 2.23 0 00-1.9 1L39 45.13a.18.18 0 01-.24.08l-2.42-.88a2.25 2.25 0 00-2.14.34l-2 1.6a.2.2 0 01-.26 0l-2-1.6a2.27 2.27 0 00-2.14-.34l-2.42.9a.18.18 0 01-.24-.1L23.6 43a2.23 2.23 0 00-1.9-1l-2.6.1a.24.24 0 01-.2-.1l-.7-2.48A2.2 2.2 0 0016.67 38l-2.48-.7a.22.22 0 01-.2-.3l.1-2.58a2.2 2.2 0 00-1-1.92L11 31.1a.2.2 0 01-.08-.24l.9-2.42a2.23 2.23 0 00-.35-2.13l-1.6-2a.2.2 0 010-.25l1.6-2a2.25 2.25 0 00.34-2.14l-.88-2.4a.2.2 0 01.08-.3l2.14-1.43a2.22 2.22 0 001-1.93l-.15-2.6a.23.23 0 01.15-.2l2.5-.7a2.23 2.23 0 001.55-1.53l.7-2.48a.2.2 0 01.2-.16l2.6.1a2.23 2.23 0 001.9-1l1.45-2.15a.2.2 0 01.24-.08l2.4.93a2.2 2.2 0 002.15-.34l2-1.6a.2.2 0 01.26 0l2 1.6a2.2 2.2 0 002.2.34l2.4-.9a.2.2 0 01.25.1l1.44 2.13a2.2 2.2 0 001.9 1l2.6-.1a.23.23 0 01.2.16l.7 2.47a2.22 2.22 0 001.53 1.53l2.48.7a.23.23 0 01.16.2l-.1 2.58a2.22 2.22 0 001 1.93L53 17.2a.2.2 0 01.08.25l-.9 2.4a2.25 2.25 0 00.33 2.15l1.6 2a.2.2 0 010 .26l-1.6 2a2.23 2.23 0 00-.33 2.18zm-2.72-4.3a17.46 17.46 0 11-28-13.9 1 1 0 111.2 1.6 15.4 15.4 0 105-2.52 1 1 0 01-1.23-.67 1 1 0 01.67-1.25 17.48 17.48 0 0122.36 16.75z\" />\r\n            </svg>\r\n        );\r\n    }\r\n    static get simpleHeart() {\r\n        return (\r\n            <svg\r\n                id=\"a53ae08b-f65f-41e5-af0d-54ed3b75814d\"\r\n                xmlns=\"http://www.w3.org/2000/svg\"\r\n                width=\"31.88\"\r\n                height=\"31.77\"\r\n                viewBox=\"0 0 31.88 31.77\"\r\n                aria-hidden=\"true\"\r\n            >\r\n                <defs>\r\n                    <mask\r\n                        id=\"a83f0532-778d-411b-814d-865f0841a41a\"\r\n                        x=\"0\"\r\n                        y=\"0\"\r\n                        width=\"31.88\"\r\n                        height=\"31.77\"\r\n                        maskUnits=\"userSpaceOnUse\"\r\n                    >\r\n                        <g transform=\"translate(0 -0.17)\">\r\n                            <g id=\"bf1bc6af-ae5d-4cfb-a35a-4614236ecb95\">\r\n                                <g id=\"b021762b-787c-4824-9a12-a31dbee3b4a8\">\r\n                                    <path\r\n                                        id=\"a54e4f99-68d2-4145-b6c8-6291d65e9b45\"\r\n                                        d=\"M15.86,28.5a.66.66,0,0,1-.42-.15L13.5,26.7,9.62,23.2a42,42,0,0,1-3-3,21.66,21.66,0,0,1-2.62-3,15.31,15.31,0,0,1-1.35-2.72A8.49,8.49,0,0,1,2,11.26,7.43,7.43,0,0,1,4.3,5.77,7.7,7.7,0,0,1,9.91,3.5a8.12,8.12,0,0,1,5.94,2.43,8.1,8.1,0,0,1,6-2.43,7.78,7.78,0,0,1,5.66,2.25,7.43,7.43,0,0,1,2.29,5.47,8.27,8.27,0,0,1-.65,3.22,17.68,17.68,0,0,1-1.42,2.73,20.55,20.55,0,0,1-2.58,3.08c-1.19,1.22-2.2,2.21-3,3s-2.15,1.89-3.9,3.4l-1.93,1.69A.65.65,0,0,1,15.86,28.5ZM9.91,4.79A6.33,6.33,0,0,0,5.22,6.67a6.09,6.09,0,0,0-1.94,4.57,7.56,7.56,0,0,0,.54,2.7A15.35,15.35,0,0,0,5.11,16.5a20.84,20.84,0,0,0,2.43,2.87c1.17,1.2,2.17,2.18,3,2.91l3.88,3.49,1.49,1.29,1.49-1.33c1.77-1.53,3.07-2.68,3.88-3.41S23,20.57,24.2,19.37a20.91,20.91,0,0,0,2.44-2.87A17.31,17.31,0,0,0,27.93,14a7.08,7.08,0,0,0,.55-2.73,6.11,6.11,0,0,0-1.93-4.57A6.46,6.46,0,0,0,21.83,4.8a6.85,6.85,0,0,0-5.46,2.5.65.65,0,0,1-.93.07l-.07-.07A6.85,6.85,0,0,0,9.9,4.79Z\"\r\n                                        fill=\"#fff\"\r\n                                        fillRule=\"evenodd\"\r\n                                    />\r\n                                </g>\r\n                            </g>\r\n                        </g>\r\n                    </mask>\r\n                </defs>\r\n                <g id=\"add4aef5-e2c3-487d-9312-0ffcc6c11737\">\r\n                    <g id=\"a0e761c1-da19-45fc-8b95-6776afd1ac17\">\r\n                        <g id=\"a083f922-d9c3-47b0-a2cf-e689b396b81b\">\r\n                            <g id=\"e53e5cc1-130f-40ea-bc06-1360f114dc99\">\r\n                                <rect\r\n                                    id=\"acd43210-a7c6-421b-a3ce-3a8de28b88b4\"\r\n                                    width=\"31.88\"\r\n                                    height=\"31.77\"\r\n                                    fill=\"none\"\r\n                                />\r\n                                <g id=\"e79693ae-4e67-4113-b4cf-c2cdac59b7c1\">\r\n                                    <path\r\n                                        d=\"M15.86,28.5a.66.66,0,0,1-.42-.15L13.5,26.7,9.62,23.2a42,42,0,0,1-3-3,21.66,21.66,0,0,1-2.62-3,15.31,15.31,0,0,1-1.35-2.72A8.49,8.49,0,0,1,2,11.26,7.43,7.43,0,0,1,4.3,5.77,7.7,7.7,0,0,1,9.91,3.5a8.12,8.12,0,0,1,5.94,2.43,8.1,8.1,0,0,1,6-2.43,7.78,7.78,0,0,1,5.66,2.25,7.43,7.43,0,0,1,2.29,5.47,8.27,8.27,0,0,1-.65,3.22,17.68,17.68,0,0,1-1.42,2.73,20.55,20.55,0,0,1-2.58,3.08c-1.19,1.22-2.2,2.21-3,3s-2.15,1.89-3.9,3.4l-1.93,1.69A.65.65,0,0,1,15.86,28.5ZM9.91,4.79A6.33,6.33,0,0,0,5.22,6.67a6.09,6.09,0,0,0-1.94,4.57,7.56,7.56,0,0,0,.54,2.7A15.35,15.35,0,0,0,5.11,16.5a20.84,20.84,0,0,0,2.43,2.87c1.17,1.2,2.17,2.18,3,2.91l3.88,3.49,1.49,1.29,1.49-1.33c1.77-1.53,3.07-2.68,3.88-3.41S23,20.57,24.2,19.37a20.91,20.91,0,0,0,2.44-2.87A17.31,17.31,0,0,0,27.93,14a7.08,7.08,0,0,0,.55-2.73,6.11,6.11,0,0,0-1.93-4.57A6.46,6.46,0,0,0,21.83,4.8a6.85,6.85,0,0,0-5.46,2.5.65.65,0,0,1-.93.07l-.07-.07A6.85,6.85,0,0,0,9.9,4.79Z\"\r\n                                        transform=\"translate(0 -0.17)\"\r\n                                        fill=\"#fff\"\r\n                                    />\r\n                                </g>\r\n                                <g mask=\"url(#a83f0532-778d-411b-814d-865f0841a41a)\">\r\n                                    <g id=\"a8df6527-49fb-4b38-80ce-ab5b5e394dab\">\r\n                                        <rect width=\"31.88\" height=\"31.77\" fill=\"#053361\" />\r\n                                    </g>\r\n                                </g>\r\n                                <path\r\n                                    id=\"fd1d36f7-5a46-4efb-8906-b6fdef2b3418\"\r\n                                    d=\"M17.74,9.56c1.85-3.7,7.41-2.78,8.33.93\"\r\n                                    transform=\"translate(0 -0.17)\"\r\n                                    fill=\"none\"\r\n                                    stroke=\"#053361\"\r\n                                    strokeLinecap=\"round\"\r\n                                />\r\n                            </g>\r\n                        </g>\r\n                    </g>\r\n                </g>\r\n            </svg>\r\n        );\r\n    }\r\n    static get storefront() {\r\n        return (\r\n            <svg width=\"32px\" height=\"32px\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 64 64\" aria-hidden=\"true\">\r\n                <path d=\"M0 0h64v64H0z\" fill=\"none\" />\r\n                <path\r\n                    className=\"storefront_svg__cls-2\"\r\n                    d=\"M29.46 36.53h6.08v1.78h-6.08zm7.77 0v1.78h6.08v-1.78zm-12.51-7.65c.38 0 .7.17.74 1h2.8c0-2.26-1.66-3.05-3.6-3.05a3.64 3.64 0 00-4 4c0 2.45 1.25 4.09 4 4.09 1.91 0 3.61-.93 3.61-3.06H25.4c0 .82-.31 1-.71 1-.77 0-.83-.87-.83-2s.07-1.98.86-1.98zM38 30v4.83h3.11V29.7c0-2.05-.94-2.81-2.24-2.81a2.13 2.13 0 00-2 1.39 2.24 2.24 0 00-4.15 0l-.07-1.16h-3v7.7h3.11V30c0-.62.27-.86.57-.86s.54.29.54.83v4.83h3.03V30c0-.62.27-.86.57-.86s.53.31.53.86z\"\r\n                />\r\n                <path d=\"M63 58.49h-2.8V26.34a1 1 0 00-1-1H52v-4.91a.29.29 0 000-.09.94.94 0 00-.06-.29.55.55 0 00-.12-.19.91.91 0 00-.08-.13L33.14.31a1 1 0 00-.71-.31 1 1 0 00-.72.29L12.25 19.72a1 1 0 00-.29.7v4.91H4.8a1 1 0 00-1 1v32.16H1a1 1 0 000 2h15.43V63a1 1 0 001 1h29.14a1 1 0 001-1v-2.51H63a1 1 0 000-2zM5.8 32.63h10.63v8.94H5.8zm12.63-6.29v-2.73h27.14v18H18.43zm.49-4.73L32.29 8.26l12.82 13.35zm28.65 11H58.2v8.94H47.57zm10.63-2H47.57v-3.27H58.2zm-10.61-5.27L50 22.86v2.48zM32.4 2.43l17.24 18-2.07 2.1v-.83a1 1 0 00-.28-.69L33 6.14a1.05 1.05 0 00-.71-.31.94.94 0 00-.72.3L16.73 21a1 1 0 00-.3.7v.83l-2.06-2.08zM14 22.86l2.45 2.48H14zm2.47 4.48v3.29H5.8v-3.29zM5.8 58.49V43.57h10.63v14.92zm21 3.51v-9.39H31V62zm6.2 0v-9.39h4.19V62zm12.57 0h-6.38V51.61a1 1 0 00-1-1H25.81a1 1 0 00-1 1V62h-6.38V43.57h27.14V62zm2-18.43H58.2v14.92H47.57z\" />\r\n            </svg>\r\n        );\r\n    }\r\n    static get borderHeart() {\r\n        return (\r\n            <svg\r\n                width=\"20px\"\r\n                height=\"20px\"\r\n                xmlns=\"http://www.w3.org/2000/svg\"\r\n                viewBox=\"0 0 24 24\"\r\n                aria-hidden=\"true\"\r\n                fill=\"#053361\"\r\n            >\r\n                <path d=\"M0 0h24v24H0z\" fill=\"none\" />\r\n                <path d=\"M16.5 3A6 6 0 0012 5a6 6 0 00-4.5-2A5.5 5.5 0 002 8.5c0 3.8 3.4 6.9 8.6 11.5l1.4 1.4 1.4-1.4c5.2-4.6 8.6-7.7 8.6-11.5A5.5 5.5 0 0016.5 3zm.1 2A3.3 3.3 0 0120 8.4c0 2.8-3.2 5.8-8 10.2-4.8-4.4-8-7.4-8-10.2A3.3 3.3 0 017.4 5a3.9 3.9 0 012.9 1.4l1.7 2 1.7-2a3.9 3.9 0 013-1.4\" />\r\n            </svg>\r\n        );\r\n    }\r\n    static get coloredBorderHeart() {\r\n        return (\r\n            <svg width=\"53.91\" height=\"40\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 53.91 40\" aria-hidden=\"true\">\r\n                <path\r\n                    d=\"M7.41,8.42A27.13,27.13,0,0,0,2.81,15l2.3,1.14a24.9,24.9,0,0,1,4.17-6Z\"\r\n                    transform=\"translate(0 0)\"\r\n                    fill=\"#ffd900\"\r\n                />\r\n                <path\r\n                    d=\"M17.19,4.61l-1-2.35a26.69,26.69,0,0,0-6.8,4.3l1.67,1.93A24.55,24.55,0,0,1,17.19,4.61Z\"\r\n                    transform=\"translate(0 0)\"\r\n                    fill=\"#ffd900\"\r\n                />\r\n                <path\r\n                    d=\"M23,2.9a22.43,22.43,0,0,1,3.66-.33V0a27.18,27.18,0,0,0-7.95,1.31l.79,2.44A23.19,23.19,0,0,1,23,2.9Z\"\r\n                    transform=\"translate(0 0)\"\r\n                    fill=\"#ffd900\"\r\n                />\r\n                <path\r\n                    d=\"M46.05,7.92a27.35,27.35,0,0,0-6.47-4.79L38.38,5.4A24.41,24.41,0,0,1,44,9.54L46,8Z\"\r\n                    transform=\"translate(0 0)\"\r\n                    fill=\"#ffd900\"\r\n                />\r\n                <path\r\n                    d=\"M29.1,2.65a24.63,24.63,0,0,1,7.07,1.72l1-2.37A26.91,26.91,0,0,0,29.32.1Z\"\r\n                    transform=\"translate(0 0)\"\r\n                    fill=\"#ffd900\"\r\n                />\r\n                <path\r\n                    d=\"M51,39.06a27,27,0,0,0-.37-25l-2,1.62A23.88,23.88,0,0,1,51,23a24.17,24.17,0,0,1-2.28,15Z\"\r\n                    transform=\"translate(0 0)\"\r\n                    fill=\"#053361\"\r\n                />\r\n                <path\r\n                    d=\"M49.36,11.86l-1.59-2L37.33,18.1a7.46,7.46,0,0,0-5.23-2.19,7.14,7.14,0,0,0-5.23,2.64,7.12,7.12,0,0,0-5.23-2.64,7.39,7.39,0,0,0-7.37,7.39c0,3.74,2,7.61,5.93,11.5a39.4,39.4,0,0,0,6,4.77l.68.43.69-.43a39.4,39.4,0,0,0,6-4.77c3.94-3.89,5.94-7.76,5.94-11.5V23a7.22,7.22,0,0,0-.67-2.74ZM36.91,23.3c0,3-1.74,6.28-5.17,9.67a36,36,0,0,1-4.87,4A37.3,37.3,0,0,1,22,33c-3.42-3.39-5.16-6.64-5.16-9.67a4.81,4.81,0,0,1,4.8-4.82h0c1.78,0,3,1.37,4,2.58l1.19,1.35L28,21.09c1.06-1.21,2.26-2.58,4-2.58a4.82,4.82,0,0,1,4.92,4.72h0Z\"\r\n                    transform=\"translate(0 0)\"\r\n                    fill=\"#053361\"\r\n                />\r\n                <path\r\n                    d=\"M4.17,18.33l-2.4-.91a27.66,27.66,0,0,0-1,3.08,27.09,27.09,0,0,0,2.1,18.56l2.29-1.15a24.41,24.41,0,0,1-2-16.14,2.88,2.88,0,0,1,.13-.65A22.58,22.58,0,0,1,4.17,18.33Z\"\r\n                    transform=\"translate(0 0)\"\r\n                    fill=\"#053361\"\r\n                />\r\n            </svg>\r\n        );\r\n    }\r\n    static get tools() {\r\n        return (\r\n            <svg width=\"32px\" height=\"32px\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 64 64\" aria-hidden=\"true\">\r\n                <path d=\"M0 0h64v64H0z\" fill=\"none\" />\r\n                <path d=\"M61.91 6.33L57.5 1.92a1 1 0 00-1.2-.16L48.75 6a1 1 0 00-.49.67l-.83 3.91-14.94 14.94L32 25a1 1 0 00-.92-.27l-5.23 1.11a.45.45 0 00-.11 0h-.1a.94.94 0 00-.29.2l-3.17 3.16a1 1 0 00-.29.71c0 1.54-2.68 4.22-4.22 4.22a1.22 1.22 0 00-.38.07 1.19 1.19 0 00-.33.22L3.38 48.08a5.4 5.4 0 000 7.61l5.38 5.38a4.15 4.15 0 003 1.3 3.78 3.78 0 00.67 0 6.24 6.24 0 003.34-1.87l13.55-13.62a1.19 1.19 0 00.22-.33 1 1 0 00.07-.38c0-1.62 2.6-4.22 4.22-4.22a1 1 0 00.71-.29l3.16-3.17a.84.84 0 00.2-.29.3.3 0 010-.1l.1-.1 1.1-5.23a1 1 0 00-.27-.92l-.5-.49 14.94-15 3.91-.83a1 1 0 00.67-.49l4.24-7.55a1 1 0 00-.18-1.16zM31.78 27.64l4.41 4.41.82.82-.61 2.9-8.34-8.34 2.9-.61zM33.39 40c-2 .26-4.31 2.21-5.29 4.27l-2.83-2.83a1 1 0 10-1.41 1.41l3.34 3.34L14.34 59a4.47 4.47 0 01-2.24 1.32 2.15 2.15 0 01-1.93-.7L4.8 54.28a3.39 3.39 0 010-4.79l12.86-12.86L21 40a1 1 0 00.71.3 1 1 0 00.7-.3 1 1 0 000-1.41l-2.84-2.84c2-1 4-3.3 4.28-5.27l2.2-2.2 9.53 9.53zM56.3 13.71l-3.76.8a1 1 0 00-.5.27L36.89 29.93l-3-3 15.16-15.14a1 1 0 00.27-.5l.8-3.76 6.5-3.66L60 7.21z\" />\r\n                <path d=\"M29.85 20.58A1 1 0 0128.43 22l-2.83-2.87a1 1 0 01-.23-1 12.08 12.08 0 00-2.82-12.6A11.94 11.94 0 0014.47 2L19 6.58a3.94 3.94 0 011 3.79l-1.4 5.45a4 4 0 01-2.78 2.78l-5.45 1.46a3.94 3.94 0 01-3.79-1L2 14.47a12 12 0 0016 10.94 1 1 0 011 .24l1.43 1.43a1 1 0 010 1.41 1 1 0 01-1.41 0l-1-1A14 14 0 01.15 12a1 1 0 01.67-.81 1 1 0 011 .25L8 17.63a1.91 1.91 0 001.85.49l5.46-1.46a1.88 1.88 0 001.35-1.36l1.47-5.45a1.94 1.94 0 00-.5-1.85l-6.15-6.16a1 1 0 01-.24-1 1 1 0 01.76-.7 14 14 0 0115.41 18zM59.89 40a14.1 14.1 0 00-14-3.49L43 33.72a1 1 0 10-1.41 1.42l3.26 3.26a1 1 0 001 .24 12.1 12.1 0 0112.57 2.82A11.92 11.92 0 0162 49.54L57.43 45a3.93 3.93 0 00-3.79-1l-5.46 1.46a3.92 3.92 0 00-2.77 2.77L44 53.64a3.93 3.93 0 001 3.78L49.54 62A12 12 0 0138.6 46a1 1 0 00-.23-1l-1.22-1.28a1 1 0 10-1.45 1.38l.82.85A14.05 14.05 0 0049.93 64a14.21 14.21 0 002-.15 1 1 0 00.8-.67 1 1 0 00-.24-1L46.38 56a1.91 1.91 0 01-.5-1.86l1.46-5.45a1.94 1.94 0 011.36-1.36l5.46-1.46a1.89 1.89 0 011.85.5l6.15 6.15a1 1 0 001 .24 1 1 0 00.67-.81A13.92 13.92 0 0059.89 40z\" />\r\n            </svg>\r\n        );\r\n    }\r\n    static get cleaningDisinfecting() {\r\n        return (\r\n            <svg\r\n                aria-hidden=\"true\"\r\n                id=\"ab37b1d8-936e-4d23-8088-20a764fe19d1\"\r\n                xmlns=\"http://www.w3.org/2000/svg\"\r\n                width=\"32\"\r\n                height=\"32.27\"\r\n                viewBox=\"0 0 32 32.27\"\r\n            >\r\n                <g id=\"b89f7b9a-37a7-418e-bd90-382f18e1b68d\">\r\n                    <g id=\"e1d149d0-fce1-4f1e-b411-842cb0070391\">\r\n                        <g id=\"b81cf590-3741-4397-a1b0-e733c5f3cc7c\">\r\n                            <g id=\"fd82d239-a781-4bb9-98e3-dbaac4465762\">\r\n                                <g id=\"f7c125a6-bc31-4739-9bb1-3209d5626322\">\r\n                                    <rect\r\n                                        id=\"f727acbc-f343-4033-bd3b-ef171ca8770c\"\r\n                                        width=\"32\"\r\n                                        height=\"32\"\r\n                                        fill=\"none\"\r\n                                    />\r\n                                    <g id=\"bfdf3720-1d12-49ee-a946-7b130ae1ec74\">\r\n                                        <g id=\"b1625795-41ee-4bd5-b010-36ef02700306\">\r\n                                            <g id=\"a5395e56-7d4e-48b6-82da-aabefecc97ad\">\r\n                                                <path\r\n                                                    id=\"a7df7f0b-124e-47b0-8aca-994bbc0ab186\"\r\n                                                    d=\"M17,17.84A20.32,20.32,0,0,1,15.5,16c0-.23,1-1.55,1.09-2,.35-1.49,0-2-1.23-3.65V8a3.36,3.36,0,0,1,.41-1c1.12,1.32,2.3,2.18,3.66,2.18a.68.68,0,0,0,.69-.68V8.16c0-.24-.51-.47-.73-.59A3.88,3.88,0,0,1,17.48,5c.08-.24,1-.54,1.11-.57l2.23-.09a.68.68,0,0,0,.61-.67V2.6a.68.68,0,0,0-.56-.66l-2.25-.43H11A5.19,5.19,0,0,0,6.46,5a.68.68,0,0,0,.38.87c1.69.68,3,1.42,3,2v2.47C8,12,6.62,13.57,6.42,15.05a69.48,69.48,0,0,0,0,11,7.88,7.88,0,0,0,2.77,5.54.7.7,0,0,0,.44.16h8a.68.68,0,0,0,.66-.49c.52-1.78.9-3.31,1.15-4.62\"\r\n                                                    fill=\"none\"\r\n                                                    stroke=\"#053361\"\r\n                                                />\r\n                                                <line\r\n                                                    id=\"a1cf84d3-2ac1-4785-9a63-ca4d6b08746b\"\r\n                                                    x1=\"18.54\"\r\n                                                    y1=\"4.49\"\r\n                                                    x2=\"18.54\"\r\n                                                    y2=\"1.51\"\r\n                                                    fill=\"none\"\r\n                                                    stroke=\"#053361\"\r\n                                                />\r\n                                                <path\r\n                                                    id=\"a11f1e50-0fee-4131-b285-3094ed6ee89d\"\r\n                                                    d=\"M23.36,21A3.25,3.25,0,0,1,21,23.9\"\r\n                                                    fill=\"none\"\r\n                                                    stroke=\"#053361\"\r\n                                                />\r\n                                                <path\r\n                                                    id=\"b795b77f-4225-49db-8d1b-ea8ef4d9242c\"\r\n                                                    d=\"M20.88,26.77a6.21,6.21,0,0,1-1.38-.16,5.65,5.65,0,0,1-1.89-.83,4.88,4.88,0,0,1-2.19-4,4.57,4.57,0,0,1,.44-1.73,16.46,16.46,0,0,1,1-1.88,46.08,46.08,0,0,1,4-5.43c4.48,5.38,5.46,7.88,5.46,9A5.25,5.25,0,0,1,20.88,26.77Z\"\r\n                                                    fill=\"none\"\r\n                                                    stroke=\"#053361\"\r\n                                                />\r\n                                                <polygon\r\n                                                    id=\"bb48d9c6-b084-4b02-a77a-b209ee409f64\"\r\n                                                    points=\"9.87 10.44 15.33 10.44 15.33 8.08 9.87 8.08 9.87 10.44\"\r\n                                                    fill=\"none\"\r\n                                                    stroke=\"#053361\"\r\n                                                />\r\n                                                <path\r\n                                                    id=\"a3501a3d-4ef1-4116-934b-a66261822bb1\"\r\n                                                    d=\"M17.52,4.91A6.06,6.06,0,0,0,15.36,8\"\r\n                                                    fill=\"none\"\r\n                                                    stroke=\"#053361\"\r\n                                                    strokeLinecap=\"round\"\r\n                                                    strokeLinejoin=\"round\"\r\n                                                />\r\n                                            </g>\r\n                                        </g>\r\n                                    </g>\r\n                                </g>\r\n                            </g>\r\n                        </g>\r\n                    </g>\r\n                </g>\r\n            </svg>\r\n        );\r\n    }\r\n    static get healthPrecautions() {\r\n        return (\r\n            <svg\r\n                aria-hidden=\"true\"\r\n                id=\"b03a8145-5035-471d-aee6-fc3dfd654b3f\"\r\n                xmlns=\"http://www.w3.org/2000/svg\"\r\n                width=\"32\"\r\n                height=\"32\"\r\n                viewBox=\"0 0 32 32\"\r\n            >\r\n                <g id=\"a2ea9a08-0ea4-41d5-992b-f7d5bdbae5af\">\r\n                    <g id=\"ecf7c29f-52a8-4bb2-9503-49da15bac474\">\r\n                        <g id=\"aa927f7a-1f84-478e-9014-c6a1d9e6bb35\">\r\n                            <g id=\"b1b38044-3230-49ff-9f5d-51fc0e2b5245\">\r\n                                <g id=\"a0a5c31a-3331-44a7-aa1d-eea72404fcf6\">\r\n                                    <rect\r\n                                        id=\"bcaee203-a132-4dbd-867b-bc2450b5f768\"\r\n                                        width=\"32\"\r\n                                        height=\"32\"\r\n                                        fill=\"none\"\r\n                                    />\r\n                                    <path\r\n                                        id=\"e5625ea5-1da5-4158-b6f3-1a039a6a9500\"\r\n                                        d=\"M23.16,13.47H18.53V8.84A.85.85,0,0,0,17.68,8H14.32a.85.85,0,0,0-.85.84v4.63H8.84a.85.85,0,0,0-.84.85v3.36a.85.85,0,0,0,.84.85h4.63v4.63a.85.85,0,0,0,.85.84h3.36a.85.85,0,0,0,.85-.84V18.53h4.63a.85.85,0,0,0,.84-.85V14.32A.85.85,0,0,0,23.16,13.47Z\"\r\n                                        fill=\"none\"\r\n                                        stroke=\"#053361\"\r\n                                    />\r\n                                    <path\r\n                                        id=\"be8bec07-1764-4428-bd2f-94cc928a8442\"\r\n                                        d=\"M16,2A14,14,0,1,0,30,16,14,14,0,0,0,16,2Z\"\r\n                                        fill=\"none\"\r\n                                        stroke=\"#053361\"\r\n                                    />\r\n                                </g>\r\n                            </g>\r\n                        </g>\r\n                    </g>\r\n                </g>\r\n            </svg>\r\n        );\r\n    }\r\n    static get help() {\r\n        return (\r\n            <svg width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\r\n                <path d=\"M0 0h24v24H0z\" fill=\"none\" />\r\n                <path d=\"M12 2a10 10 0 100 20 10 10 0 000-20zm1 17h-2v-2h2v2zm2.07-7.75l-.9.92A3.4 3.4 0 0013 15h-2v-.5c0-1.1.45-2.1 1.17-2.83l1.24-1.26c.37-.36.59-.86.59-1.41 0-1.1-.9-2-2-2s-2 .9-2 2H8a4 4 0 118 0c0 .88-.36 1.68-.93 2.25z\" />\r\n            </svg>\r\n        );\r\n    }\r\n    static get check() {\r\n        return (\r\n            <svg width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\r\n                <path d=\"M0 0h24v24H0z\" fill=\"none\" />\r\n                <path d=\"M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z\" />\r\n            </svg>\r\n        );\r\n    }\r\n    static get location() {\r\n        return (\r\n            <svg version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-hidden=\"true\">\r\n                <path d=\"M12 2C8.13 2 5 5.13 5 9c0 5.25 7 13 7 13s7-7.75 7-13c0-3.87-3.13-7-7-7zm0 9.5c-1.38 0-2.5-1.12-2.5-2.5s1.12-2.5 2.5-2.5 2.5 1.12 2.5 2.5-1.12 2.5-2.5 2.5z\" />\r\n                <path d=\"M0 0h24v24H0z\" fill=\"none\" />\r\n            </svg>\r\n        );\r\n    }\r\n    static get instagram() {\r\n        return (\r\n            <svg width=\"28px\" height=\"28px\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\" aria-hidden=\"true\">\r\n                <g>\r\n                    <path d=\"M256,49.471c67.266,0,75.233.256,101.8,1.468,24.562,1.121,37.9,5.225,46.779,8.674a78.07,78.07,0,0,1,28.966,18.845,78.07,78.07,0,0,1,18.845,28.966c3.449,8.877,7.553,22.217,8.674,46.778,1.212,26.565,1.468,34.532,1.468,101.8s-.256,75.233-1.468,101.8c-1.121,24.562-5.225,37.9-8.674,46.779a83.431,83.431,0,0,1-47.811,47.811c-8.878,3.449-22.217,7.553-46.779,8.674-26.56,1.212-34.527,1.468-101.8,1.468s-75.237-.256-101.8-1.468c-24.562-1.121-37.9-5.225-46.779-8.674a78.07,78.07,0,0,1-28.966-18.845,78.062,78.062,0,0,1-18.845-28.966c-3.449-8.878-7.553-22.217-8.674-46.778-1.212-26.565-1.468-34.532-1.468-101.8s.256-75.233,1.468-101.8c1.121-24.562,5.225-37.9,8.674-46.779A78.07,78.07,0,0,1,78.458,78.458a78.07,78.07,0,0,1,28.966-18.845c8.877-3.449,22.217-7.553,46.778-8.674,26.565-1.212,34.532-1.468,101.8-1.468m0-45.392c-68.418,0-77,.29-103.866,1.516-26.815,1.224-45.127,5.482-61.152,11.71a123.485,123.485,0,0,0-44.62,29.057,123.485,123.485,0,0,0-29.057,44.62C11.077,107.007,6.819,125.319,5.6,152.134,4.369,179,4.079,187.582,4.079,256s.29,77,1.516,103.866c1.224,26.815,5.482,45.127,11.71,61.152a123.493,123.493,0,0,0,29.057,44.62A123.485,123.485,0,0,0,90.982,494.7c16.025,6.228,34.337,10.486,61.152,11.71C179,507.631,187.582,507.921,256,507.921s77-.29,103.866-1.516c26.815-1.224,45.127-5.482,61.152-11.71A128.82,128.82,0,0,0,494.7,421.018c6.228-16.025,10.486-34.337,11.71-61.152C507.631,333,507.921,324.418,507.921,256s-.29-77-1.516-103.866c-1.224-26.815-5.482-45.127-11.71-61.152a123.485,123.485,0,0,0-29.057-44.62,123.485,123.485,0,0,0-44.62-29.057C404.993,11.077,386.681,6.819,359.866,5.6,333,4.369,324.418,4.079,256,4.079Z\" />\r\n                    <path d=\"M256,126.635A129.365,129.365,0,1,0,385.365,256,129.365,129.365,0,0,0,256,126.635Zm0,213.338A83.974,83.974,0,1,1,339.974,256,83.974,83.974,0,0,1,256,339.973Z\" />\r\n                    <circle cx=\"390.476\" cy=\"121.524\" r=\"30.23\" />\r\n                </g>\r\n            </svg>\r\n        );\r\n    }\r\n    static get carMaxLogoDark() {\r\n        return (\r\n            <svg\r\n                height=\"22px\"\r\n                width=\"111px\"\r\n                viewBox=\"0 0 327.84 64\"\r\n                xmlns=\"http://www.w3.org/2000/svg\"\r\n                aria-hidden=\"true\"\r\n            >\r\n                <path\r\n                    fill=\"#053361\"\r\n                    d=\"M289.8 5.05a1.1 1.1 0 0 0 .85-1.12c0-1.17-1.23-1.17-1.57-1.17h-1.65V7.4h.64V5.3h.8c.76 0 .94.2 1 .9a5.26 5.26 0 0 0 .23 1.2h.66a6.74 6.74 0 0 1-.28-1.46c-.05-.57-.2-.77-.7-.9zm-.72-.3h-1V3.3h1c.34 0 .92 0 .92.74s-.6.7-.92.7zM289 .8a4.33 4.33 0 1 0 4.32 4.32A4.34 4.34 0 0 0 289 .8zm0 8.2a3.83 3.83 0 1 1 3.8-3.84A3.82 3.82 0 0 1 289 9z\"\r\n                />\r\n                <path\r\n                    fill=\"#053361\"\r\n                    d=\"M129.42 54.55h32.32V64h-32.32v-9.45zm41.53 0V64h32.32v-9.45zm41.52 0V64h32.32v-9.45zm41.52 0V64h32.3v-9.45zm41.52 0V64h32.32v-9.45z\"\r\n                />\r\n                <path\r\n                    fill=\"#053361\"\r\n                    d=\"M129.57 42.43V1.23h16.26l.4 6.24h.15c2.82-5.9 7-7.47 10.88-7.47 5.3 0 9.16 2.38 11.3 7.47 2.82-5.9 7-7.47 10.88-7.47 7 0 12 4.1 12 15v27.43h-16.7V16.58c0-2.87-1.3-4.43-2.88-4.43s-3 1.3-3 4.6v25.68h-16.7V16.58c0-2.87-1.3-4.43-2.9-4.43s-3 1.3-3 4.6v25.68zm138.26 0h16.75l-11.48-22 9.35-19H265l-4.64 13-5.6-13H237.3l10.16 19-11.15 22h16.95l7.1-15 7.48 15zm-48.7-14.2V24.8h-2.6c-5.1 0-6.2 2.46-6.2 4.74 0 2.62 1.5 4.25 4.44 4.25 3.34 0 4.37-2.2 4.37-5.56zm0-11.32v-4.23c0-2-1-3.27-3.72-3.27-2.37 0-3.65.82-3.88 4.25h-15.86c.64-11 10.5-13.4 20.57-13.4 15.33 0 20.25 5 20.25 14.54v27.6h-16.85l-.5-3.88c-2.78 3.76-7 5.15-11.36 5.15-8.1 0-13.8-4.4-13.8-12.5 0-10.12 7.93-14.3 22.86-14.3z\"\r\n                />\r\n                <path\r\n                    fill=\"#053361\"\r\n                    d=\"M25.18 27.16H40.5c0 11.38-9.1 16.35-19.32 16.35C6.7 43.5 0 34.7 0 21.6-.38 8.75 7.28.06 21.23.06c10.4 0 19.22 4.23 19.28 16.36h-15c-.22-4.68-1.93-5.6-3.93-5.6-4.24 0-4.64 4.35-4.64 11 0 6.3.35 11 4.46 11 2.1 0 3.54-1.26 3.77-5.6zm78.18-8.77h1.37c3.15 0 5.43-1.1 5.43-4.18s-2.1-3.66-5.3-3.66h-1.5v7.83zm-16 24V1.2h24.4c8.84 0 14 2.68 14 10.45 0 4.74-2 8.34-8.18 9.94 4 .33 6.17 2.1 7 5.24.9 3.54 1.3 8.08 2.07 15.6h-16c-1.5-9.25-.88-8.3-1.45-11.83-.35-2.05-1.37-2.85-4-2.85h-1.9v14.68zM58.53 25.72h7l-3.4-15.55-3.6 15.55zm-19.8 16.7L52 1.13h21.17l13.27 41.3H69.5l-1.6-6.64H56.08l-1.66 6.63z\"\r\n                />\r\n            </svg>\r\n        );\r\n    }\r\n    static get arrowIcon() {\r\n        return (\r\n            <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-hidden=\"true\">\r\n                <path d=\"M4 12l1.41 1.41L11 7.83V20h2V7.83l5.58 5.59L20 12l-8-8-8 8z\" />\r\n                <path fill=\"none\" d=\"M0 0h24v24H0V0z\" />\r\n            </svg>\r\n        );\r\n    }\r\n    static get rightArrowIcon() {\r\n        return (\r\n            <svg viewBox=\"0 0 24 24\">\r\n                <path\r\n                    d=\"M13.84 5.83999C13.56 6.11999 13.56 6.56999 13.84 6.83999L18.28 11.28H4.00004C3.61004 11.28 3.29004 11.6 3.29004 11.99C3.29004 12.38 3.61004 12.7 4.00004 12.7H18.29L13.85 17.14C13.57 17.42 13.57 17.87 13.85 18.14C14.13 18.41 14.58 18.42 14.85 18.14L20.51 12.48C20.58 12.42 20.63 12.34 20.66 12.25C20.7 12.16 20.72 12.07 20.72 11.98C20.72 11.89 20.7 11.79 20.66 11.71C20.62 11.62 20.57 11.55 20.51 11.48L14.85 5.81999C14.57 5.53999 14.12 5.53999 13.85 5.81999L13.84 5.83999Z\"\r\n                    fill=\"currentColor\"\r\n                    className=\"stroked\"\r\n                ></path>\r\n                <path\r\n                    d=\"M13.84 5.83999C13.56 6.11999 13.56 6.56999 13.84 6.83999L18.28 11.28H4.00004C3.61004 11.28 3.29004 11.6 3.29004 11.99C3.29004 12.38 3.61004 12.7 4.00004 12.7H18.29L13.85 17.14C13.57 17.42 13.57 17.87 13.85 18.14C14.13 18.41 14.58 18.42 14.85 18.14L20.51 12.48C20.58 12.42 20.63 12.34 20.66 12.25C20.7 12.16 20.72 12.07 20.72 11.98C20.72 11.89 20.7 11.79 20.66 11.71C20.62 11.62 20.57 11.55 20.51 11.48L14.85 5.81999C14.57 5.53999 14.12 5.53999 13.85 5.81999L13.84 5.83999Z\"\r\n                    fill=\"currentColor\"\r\n                    className=\"filled\"\r\n                ></path>\r\n            </svg>\r\n        );\r\n    }\r\n    static get moreVert() {\r\n        return (\r\n            <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-hidden=\"true\" focusable=\"false\">\r\n                <path d=\"M0 0h24v24H0z\" fill=\"none\" />\r\n                <path d=\"M12 8c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm0 2c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0 6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z\" />\r\n            </svg>\r\n        );\r\n    }\r\n    static get favoriteHeart() {\r\n        return (\r\n            <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"5 0 18 24\" fill=\"none\">\r\n                <path\r\n                    fill=\"#fff\"\r\n                    d=\"M17.41 3.18c-1.82-.35-4.03.27-5.41 2.3-1.37-2.03-3.59-2.65-5.41-2.3-1.99.38-4.3 2.14-4.3 5.82 0 5.02 4.7 10.1 8.92 11.51.26.08.52.13.79.13s.54-.04.79-.13c4.22-1.41 8.92-6.48 8.92-11.51 0-3.68-2.32-5.44-4.3-5.82\"\r\n                ></path>\r\n                <path\r\n                    fill=\"#fff\"\r\n                    d=\"M12 20.63c-.27 0-.54-.04-.79-.13-4.22-1.41-8.92-6.48-8.92-11.51 0-3.68 2.32-5.44 4.3-5.82 1.82-.35 4.03.27 5.41 2.3 1.37-2.03 3.59-2.65 5.41-2.3 1.99.38 4.3 2.14 4.3 5.82 0 5.02-4.7 10.1-8.92 11.51-.26.09-.52.13-.79.13m-.34-1.47c.22.07.46.07.68 0 3.75-1.25 7.95-5.87 7.95-10.16 0-2.81-1.63-4.13-3.15-4.42-1.57-.3-3.57.41-4.48 2.69-.22.54-1.1.54-1.32 0-.91-2.28-2.91-2.99-4.48-2.69C5.34 4.87 3.71 6.19 3.71 9c0 4.29 4.2 8.9 7.95 10.16\"\r\n                ></path>\r\n                <path\r\n                    fill=\"#2A343D\"\r\n                    d=\"M12 20.63c-.27 0-.54-.04-.79-.13-4.22-1.41-8.92-6.48-8.92-11.51 0-3.68 2.32-5.44 4.3-5.82 1.82-.35 4.03.27 5.41 2.3 1.37-2.03 3.59-2.65 5.41-2.3 1.99.38 4.3 2.14 4.3 5.82 0 5.02-4.7 10.1-8.92 11.51-.26.09-.52.13-.79.13m-.34-1.47c.22.07.46.07.68 0 3.75-1.25 7.95-5.87 7.95-10.16 0-2.81-1.63-4.13-3.15-4.42-1.57-.3-3.57.41-4.48 2.69-.22.54-1.1.54-1.32 0-.91-2.28-2.91-2.99-4.48-2.69C5.34 4.87 3.71 6.19 3.71 9c0 4.29 4.2 8.9 7.95 10.16\"\r\n                ></path>\r\n            </svg>\r\n        );\r\n    }\r\n    static get share() {\r\n        const shareIconIOS = () => {\r\n            return (\r\n                <svg viewBox=\"3 1 20 21\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n                    <path\r\n                        d=\"M8.70845 5.95878L10.3493 4.31794V13.7504C10.3493 14.1079 10.6426 14.4013 11.0001 14.4013C11.3576 14.4013 11.651 14.1079 11.651 13.7504V4.31794L13.2918 5.95878C13.4201 6.08711 13.5851 6.15128 13.7501 6.15128C13.9151 6.15128 14.0801 6.08711 14.2085 5.95878C14.4651 5.70211 14.4651 5.28961 14.2085 5.04211L11.4585 2.29211C11.2018 2.03544 10.7893 2.03544 10.5418 2.29211L7.79178 5.04211C7.53512 5.29878 7.53512 5.71128 7.79178 5.95878C8.04845 6.20628 8.46095 6.21544 8.70845 5.95878Z\"\r\n                        fill=\"#2A343D\"\r\n                    ></path>\r\n                    <path\r\n                        d=\"M15.5835 7.59961C15.226 7.59961 14.9326 7.89294 14.9326 8.25044C14.9326 8.60794 15.226 8.90128 15.5835 8.90128C16.2343 8.90128 16.766 9.43294 16.766 10.0838V17.4171C16.766 18.0679 16.2343 18.5996 15.5835 18.5996H6.41678C5.76595 18.5996 5.23428 18.0679 5.23428 17.4171V10.0838C5.23428 9.43294 5.76595 8.90128 6.41678 8.90128C6.77428 8.90128 7.06762 8.60794 7.06762 8.25044C7.06762 7.89294 6.77428 7.59961 6.41678 7.59961C5.05095 7.59961 3.93262 8.71794 3.93262 10.0838V17.4171C3.93262 18.7829 5.05095 19.9013 6.41678 19.9013H15.5835C16.9493 19.9013 18.0676 18.7829 18.0676 17.4171V10.0838C18.0676 8.71794 16.9493 7.59961 15.5835 7.59961Z\"\r\n                        fill=\"#2A343D\"\r\n                    ></path>\r\n                </svg>\r\n            );\r\n        };\r\n\r\n        const shareIconAndroid = () => {\r\n            return (\r\n                <svg\r\n                    className=\"shareAndroid\"\r\n                    id=\"uuid-50515006-23d9-4e72-970b-d2a1dce94fb3\"\r\n                    xmlns=\"http://www.w3.org/2000/svg\"\r\n                    viewBox=\"0 0 48 48\"\r\n                >\r\n                    <rect fill=\"none\" />\r\n                    <path d=\"M35.79,32.27c-1.53,0-2.89,.6-3.94,1.55l-14.32-8.33c.1-.46,.18-.92,.18-1.41s-.08-.94-.18-1.41l14.16-8.25c1.08,1,2.51,1.63,4.1,1.63,3.33,0,6.02-2.69,6.02-6.02s-2.69-6.02-6.02-6.02-6.02,2.69-6.02,6.02c0,.48,.08,.94,.18,1.41l-14.16,8.25c-1.08-1-2.51-1.63-4.1-1.63-3.33,0-6.02,2.69-6.02,6.02s2.69,6.02,6.02,6.02c1.59,0,3.01-.62,4.1-1.63l14.3,8.35c-.1,.42-.16,.86-.16,1.31,0,3.23,2.63,5.86,5.86,5.86s5.86-2.63,5.86-5.86-2.63-5.86-5.86-5.86Zm0-24.26c1.1,0,2.01,.9,2.01,2.01s-.9,2.01-2.01,2.01-2.01-.9-2.01-2.01,.9-2.01,2.01-2.01ZM11.69,26.09c-1.1,0-2.01-.9-2.01-2.01s.9-2.01,2.01-2.01,2.01,.9,2.01,2.01-.9,2.01-2.01,2.01Zm24.1,14.1c-1.1,0-2.01-.9-2.01-2.01s.9-2.01,2.01-2.01,2.01,.9,2.01,2.01-.9,2.01-2.01,2.01Z\" />\r\n                </svg>\r\n            );\r\n        };\r\n\r\n        if (deviceIsApple()) {\r\n            return shareIconIOS();\r\n        }\r\n\r\n        if (deviceIsAndroid() || deviceIsWindows()) {\r\n            return shareIconAndroid();\r\n        }\r\n\r\n        return shareIconIOS();\r\n    }\r\n\r\n    static get remove() {\r\n        return (\r\n            <svg aria-hidden=\"true\" viewBox=\"8 0 42 50\" xmlns=\"http://www.w3.org/2000/svg\">\r\n                <path\r\n                    fill=\"currentColor\"\r\n                    d=\"M40.65 44.95 35.9 40.2Q33.4 42 30.4 43q-3 1-6.4 1-4.25 0-7.9-1.525-3.65-1.525-6.35-4.225-2.7-2.7-4.225-6.35Q4 28.25 4 24q0-3.4 1-6.4 1-3 2.8-5.5L3.05 7.35 5.2 5.2l37.6 37.6ZM24 41q2.75 0 5.2-.775t4.55-2.175l-23.8-23.8q-1.4 2.1-2.175 4.55Q7 21.25 7 24q0 7.25 4.875 12.125T24 41Zm16.2-5.1-2.15-2.15q1.4-2.1 2.175-4.55Q41 26.75 41 24q0-7.25-4.875-12.125T24 7q-2.75 0-5.2.775T14.25 9.95L12.1 7.8Q14.6 6 17.6 5q3-1 6.4-1 4.2 0 7.85 1.55Q35.5 7.1 38.2 9.8q2.7 2.7 4.25 6.35Q44 19.8 44 24q0 3.4-1 6.4-1 3-2.8 5.5ZM26.15 21.85Zm-4.3 4.3Z\"\r\n                />\r\n            </svg>\r\n        );\r\n    }\r\n\r\n    static get IconSuccess() {\r\n        return (\r\n            <svg viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\" focusable=\"false\">\r\n                <path fill=\"none\" d=\"M0 0h24v24H0V0z\" />\r\n                <path d=\"M12 2a10 10 0 100 20 10 10 0 000-20zM9.29 16.29L5.7 12.7a1 1 0 111.41-1.41L10 14.17l6.88-6.88a1 1 0 111.41 1.41l-7.59 7.59a1 1 0 01-1.41 0z\" />\r\n                <path d=\"M0 0h24v24H0z\" fill=\"none\" />\r\n            </svg>\r\n        );\r\n    }\r\n\r\n    static get IconWarning() {\r\n        return (\r\n            <svg viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\" focusable=\"false\">\r\n                <path d=\"M0 0h24v24H0z\" fill=\"none\" />\r\n                <path d=\"M1 21h22L12 2 1 21zm12-3h-2v-2h2v2zm0-4h-2v-4h2v4z\" />\r\n            </svg>\r\n        );\r\n    }\r\n\r\n    static get AdvancedFeaturesIcon() {\r\n        return (\r\n            <svg viewBox=\"4 0 21 24\">\r\n                <path\r\n                    fillRule=\"evenodd\"\r\n                    clipRule=\"evenodd\"\r\n                    d=\"M20.99 9.28998H19.47L19.4401 9.04998C18.9701 5.76998 16.11 3.28998 12.8 3.28998H11.21C7.89005 3.28998 5.04005 5.76998 4.57005 9.04998L4.54005 9.28998H3.01005C2.62005 9.28998 2.30005 9.60998 2.30005 9.99998C2.30005 10.39 2.62005 10.71 3.01005 10.71H4.33005L4.30005 10.91C3.69005 11.41 3.29005 12.15 3.29005 13V19C3.29005 19.94 4.06005 20.71 5.00005 20.71H6.00005C6.94005 20.71 7.71005 19.94 7.71005 19V17.71H16.2901V19C16.2901 19.94 17.06 20.71 18 20.71H19C19.9401 20.71 20.71 19.94 20.71 19V13C20.71 12.16 20.3101 11.41 19.7001 10.91L19.67 10.71H20.99C21.38 10.71 21.7001 10.39 21.7001 9.99998C21.7001 9.60998 21.38 9.28998 20.99 9.28998ZM6.00005 16.29C5.29005 16.29 4.71005 15.71 4.71005 15V13C4.71005 12.29 5.29005 11.71 6.00005 11.71H18C18.71 11.71 19.2901 12.29 19.2901 13V15C19.2901 15.71 18.71 16.29 18 16.29H6.00005ZM11.21 4.70998H12.79C15.4 4.70998 17.66 6.65998 18.03 9.24998L18.18 10.31C18.15 10.31 18.12 10.305 18.09 10.3C18.06 10.295 18.03 10.29 18 10.29H6.00005C5.94005 10.29 5.88005 10.3 5.82005 10.31L5.97005 9.24998C6.34005 6.65998 8.59005 4.70998 11.21 4.70998ZM6.29005 19C6.29005 19.16 6.16005 19.29 6.00005 19.29H5.00005C4.84005 19.29 4.71005 19.16 4.71005 19V17.37C5.10005 17.58 5.53005 17.71 6.00005 17.71H6.29005V19ZM19 19.29H18C17.84 19.29 17.71 19.16 17.71 19V17.71H18C18.47 17.71 18.9001 17.58 19.2901 17.37V19C19.2901 19.16 19.16 19.29 19 19.29ZM17 15C17.5523 15 18 14.5523 18 14C18 13.4477 17.5523 13 17 13C16.4477 13 16 13.4477 16 14C16 14.5523 16.4477 15 17 15ZM8 14C8 14.5523 7.55228 15 7 15C6.44772 15 6 14.5523 6 14C6 13.4477 6.44772 13 7 13C7.55228 13 8 13.4477 8 14Z\"\r\n                    fill=\"currentColor\"\r\n                ></path>\r\n            </svg>\r\n        );\r\n    }\r\n\r\n    static get CopyIcon() {\r\n        return (\r\n            <svg viewBox=\"0 0 24 24\" width=\"24px\">\r\n                <path\r\n                    fillRule=\"evenodd\"\r\n                    clipRule=\"evenodd\"\r\n                    d=\"M11 2.79001H19C20.49 2.79001 21.71 4.01001 21.71 5.50001V13.5C21.71 14.99 20.49 16.21 19 16.21H18C17.61 16.21 17.29 15.89 17.29 15.5C17.29 15.11 17.61 14.79 18 14.79H19C19.71 14.79 20.29 14.21 20.29 13.5V5.50001C20.29 4.79001 19.71 4.21001 19 4.21001H11C10.29 4.21001 9.71004 4.79001 9.71004 5.50001C9.71004 5.89001 9.39004 6.21001 9.00004 6.21001C8.61004 6.21001 8.29004 5.89001 8.29004 5.50001C8.29004 4.01001 9.51004 2.79001 11 2.79001ZM2.29004 10C2.29004 8.51001 3.51004 7.29001 5.00004 7.29001H13C14.49 7.29001 15.71 8.51001 15.71 10V18C15.71 19.49 14.49 20.71 13 20.71H5.00004C3.51004 20.71 2.29004 19.49 2.29004 18V10ZM13 19.29C13.71 19.29 14.29 18.71 14.29 18V10C14.29 9.29001 13.71 8.71001 13 8.71001H5.00004C4.29004 8.71001 3.71004 9.29001 3.71004 10V18C3.71004 18.71 4.29004 19.29 5.00004 19.29H13Z\"\r\n                    fill=\"currentColor\"\r\n                ></path>\r\n            </svg>\r\n        );\r\n    }\r\n}\r\n\r\nexport default Icons;\r\n","export default function(startup: () => any) {\r\n    if (document.readyState === 'loading') {\r\n        document.addEventListener('DOMContentLoaded', startup);\r\n    } else {\r\n        startup();\r\n        document.removeEventListener('DOMContentLoaded', startup);\r\n    }\r\n}\r\n","import { getVehicles } from '../api/search-api';\r\nimport { getVehiclesFromRVC } from '../api/rvc-api';\r\nimport { getVehicleRecommendations } from '../api/vehicle-recommendations-api';\r\nimport { Vehicle } from '../api/types';\r\nimport { IVehicleTile } from '../types/vehicleTile';\r\nimport {\r\n    MAX_RECENTLY_VIEWED_VEHICLE_TILES,\r\n    MAX_BEST_MATCH_VEHICLE_TILES,\r\n    BEST_MATCH_VERSION,\r\n    statusCodesForUnavailableVehicles,\r\n    viewedVehiclesLocalStorage,\r\n} from '../pages/home/utilities/constants';\r\nimport {\r\n    filterOutExpiredVehicles,\r\n    getExpirationDate,\r\n    getLocalStorageItem,\r\n    translateVehicleStatus,\r\n} from '../pages/home/utilities/helpers';\r\nimport { IViewedVehicleLocalStorage } from '../pages/home/utilities/types';\r\n\r\nexport const getRecentlyViewedVehicleTiles = (\r\n    maxTiles = MAX_RECENTLY_VIEWED_VEHICLE_TILES,\r\n    nearestStoreId?: string\r\n): Promise<IVehicleTile[]> => {\r\n    // Get viewed vehicles from localStorage\r\n    const viewedVehicles: IViewedVehicleLocalStorage[] = getLocalStorageItem(viewedVehiclesLocalStorage.key) || [];\r\n\r\n    // Keep only vehicles seen in the past {DAYS_BEFORE_HOMEBASE_VISITOR_EXPIRES}\r\n    const expirationDate = getExpirationDate();\r\n    const filteredVehicles = filterOutExpiredVehicles(viewedVehicles, expirationDate);\r\n\r\n    // Call API to get data related to the viewed vehicles\r\n    if (filteredVehicles.length > 0) {\r\n        const sortedViewedVehicles = getSortedViewedVehicleStockNumbersByDate(filteredVehicles);\r\n        return getVehicles({\r\n            stockNumberList: sortedViewedVehicles,\r\n            take: maxTiles,\r\n            transferDestinationStoreId: nearestStoreId,\r\n        }).then(function (vehiclesList: Vehicle[]) {\r\n            if (vehiclesList.length > 0) {\r\n                // Sometimes, the API might not return some vehicles, and we need to call a different API endpoint (home/api/vehicles) to get vehicle details.\r\n                // Reason: The vehicle's status may have changed; for example, it is now reserved.\r\n                const { isMissing, missingItems } = isResponseMissingVehicles(vehiclesList, sortedViewedVehicles);\r\n                if (isMissing) {\r\n                    return getVehiclesFromRVC({\r\n                        stockNumberList: missingItems,\r\n                    }).then((items) => {\r\n                        const combinedItems = [...vehiclesList, ...items];\r\n                        return buildVehicleTilesListFromVehicleList(\r\n                            buildOrderedVehicleTileList(sortedViewedVehicles, combinedItems)\r\n                        );\r\n                    });\r\n                } else {\r\n                    return buildVehicleTilesListFromVehicleList(\r\n                        buildOrderedVehicleTileList(sortedViewedVehicles, vehiclesList)\r\n                    );\r\n                }\r\n            } else {\r\n                return Promise.resolve([]);\r\n            }\r\n        });\r\n    } else {\r\n        return Promise.resolve([]);\r\n    }\r\n};\r\n\r\ninterface getRecommendedVehicleTilesParams {\r\n    sourceStockNumbers: string[];\r\n    lat: number;\r\n    long: number;\r\n    visitorId: string;\r\n    userStoreId: string;\r\n}\r\n\r\nexport const getRecommendedVehicleTiles = ({\r\n    sourceStockNumbers,\r\n    lat,\r\n    long,\r\n    visitorId,\r\n    userStoreId,\r\n}: getRecommendedVehicleTilesParams): Promise<IVehicleTile[]> => {\r\n    if (sourceStockNumbers && sourceStockNumbers.length > 0) {\r\n        const sortedSourceStockNumbers = sourceStockNumbers.sort();\r\n        return getVehicleRecommendations({\r\n            stockNumberList: sortedSourceStockNumbers,\r\n            lat,\r\n            long,\r\n            visitorId,\r\n            userStoreId,\r\n        }).then(function (vehiclesList: Vehicle[]) {\r\n            if (vehiclesList.length > 0) {\r\n                return buildVehicleTilesListFromVehicleList(vehiclesList);\r\n            } else {\r\n                return Promise.resolve([]);\r\n            }\r\n        } as any);\r\n    } else {\r\n        return Promise.resolve([]);\r\n    }\r\n};\r\n\r\nexport const getBestMatchVehicleTiles = (\r\n    maxTiles = MAX_BEST_MATCH_VEHICLE_TILES,\r\n    nearestStoreId?: string\r\n): Promise<IVehicleTile[]> => {\r\n    return getVehicles({\r\n        take: maxTiles,\r\n        scoringProfile: BEST_MATCH_VERSION,\r\n        transferDestinationStoreId: nearestStoreId,\r\n    }).then(function (vehiclesList: Vehicle[]) {\r\n        if (vehiclesList.length > 0) {\r\n            return buildVehicleTilesListFromVehicleList(vehiclesList);\r\n        } else {\r\n            return Promise.resolve([]);\r\n        }\r\n    } as any);\r\n};\r\n\r\nexport const getLocalVehiclesData = async (params: {\r\n    take: number;\r\n    zipCode: string;\r\n    radiusInMiles: number;\r\n    storeId: string;\r\n}): Promise<IVehicleTile[]> => {\r\n    const vehiclesList = await getVehicles({\r\n        take: params.take,\r\n        zipCode: params.zipCode,\r\n        radiusInMiles: params.radiusInMiles,\r\n        storeId: params.storeId,\r\n    });\r\n    if (vehiclesList.length > 0) {\r\n        return buildVehicleTilesListFromVehicleList(vehiclesList);\r\n    } else {\r\n        return Promise.resolve([]);\r\n    }\r\n};\r\n\r\nexport const buildSavedVehicleTiles = (\r\n    savedVehicleStockNumberList: number[],\r\n    cb: (vehicleTileList: IVehicleTile[]) => any,\r\n    nearestStoreId?: string\r\n) => {\r\n    if (savedVehicleStockNumberList && savedVehicleStockNumberList.length > 0) {\r\n        return getVehicles({\r\n            stockNumberList: savedVehicleStockNumberList,\r\n            transferDestinationStoreId: nearestStoreId,\r\n        }).then((vehiclesList: Vehicle[]) => {\r\n            if (vehiclesList.length > 0) {\r\n                const orderedVehicleList = buildOrderedVehicleTileList(savedVehicleStockNumberList, vehiclesList);\r\n                const vehicleTileList = buildVehicleTilesListFromVehicleList(orderedVehicleList);\r\n                cb(vehicleTileList);\r\n            } else {\r\n                cb([]);\r\n            }\r\n        });\r\n    } else {\r\n        cb([]);\r\n    }\r\n};\r\n\r\nconst buildOrderedVehicleTileList = (orderedStockNumberList: number[], vehiclesList: Vehicle[]) => {\r\n    const orderedVehicleList: Vehicle[] = [];\r\n\r\n    for (let i = 0; i < vehiclesList.length; i++) {\r\n        const orderedIndex = orderedStockNumberList.indexOf(vehiclesList[i].stockNumber);\r\n        orderedVehicleList[orderedIndex] = vehiclesList[i];\r\n    }\r\n\r\n    return orderedVehicleList;\r\n};\r\n\r\nexport const buildVehicleTilesListFromVehicleList = (vehicleList: Vehicle[]): IVehicleTile[] => {\r\n    return vehicleList.map(\r\n        (vehicle: Vehicle): IVehicleTile => {\r\n            const imageLink = `https://img2.carmax.com/assets/${vehicle.stockNumber}/hero.jpg?width=270&height=203`;\r\n            vehicle.imageLink = imageLink;\r\n            return vehicle;\r\n        }\r\n    );\r\n};\r\n\r\nexport const isResponseMissingVehicles = (\r\n    vehiclesReturned: Vehicle[],\r\n    vehiclesRequested: number[]\r\n): { isMissing: boolean; missingItems: number[] } => {\r\n    if (vehiclesReturned.length !== vehiclesRequested.length) {\r\n        const foundItems = vehiclesReturned.map((item) => item.stockNumber);\r\n\r\n        const notFound = vehiclesRequested?.filter((stockNumber) => {\r\n            const isIncluded = foundItems.includes(stockNumber);\r\n            if (!isIncluded) {\r\n                return stockNumber;\r\n            }\r\n            return;\r\n        });\r\n\r\n        return {\r\n            isMissing: notFound.length > 0,\r\n            missingItems: notFound,\r\n        };\r\n    }\r\n    return {\r\n        isMissing: false,\r\n        missingItems: [],\r\n    };\r\n};\r\n\r\nexport const buildStatusText = (vehicleTile: IVehicleTile): string => {\r\n    return translateVehicleStatus(vehicleTile);\r\n};\r\n\r\nexport const vehicleIsUnavailable = (statusCode: number, isSaleable: boolean): boolean => {\r\n    return !isSaleable && statusCodesForUnavailableVehicles.indexOf(statusCode) > -1;\r\n};\r\n\r\nconst getSortedViewedVehicleStockNumbersByDate = (vehicles: IViewedVehicleLocalStorage[]): number[] => {\r\n    return vehicles\r\n        .sort(({ timestamp: a }: IViewedVehicleLocalStorage, { timestamp: b }: IViewedVehicleLocalStorage) => b - a)\r\n        .map(({ stockNumber }: IViewedVehicleLocalStorage) => Number(stockNumber));\r\n};\r\n","import { IVehicleRecommendationsApiResponse, Vehicle } from './types';\r\n\r\n// TODO: Set this max. value on the server\r\nconst maxRecommendations = 10;\r\n\r\ninterface getVehicleRecommendationsParams {\r\n    stockNumberList: string[];\r\n    lat: number;\r\n    long: number;\r\n    visitorId: string;\r\n    userStoreId: string;\r\n}\r\n\r\nexport async function getVehicleRecommendations({\r\n    stockNumberList,\r\n    lat,\r\n    long,\r\n    visitorId,\r\n    userStoreId,\r\n}: getVehicleRecommendationsParams): Promise<Vehicle[]> {\r\n    try {\r\n        if (stockNumberList && stockNumberList.length > 0) {\r\n            const sortedStockNumberList = stockNumberList.sort();\r\n            const searchParams = new URLSearchParams();\r\n            searchParams.set('visitorId', visitorId);\r\n            searchParams.set('userStoreId', userStoreId);\r\n            searchParams.set('lat', lat.toString());\r\n            searchParams.set('lon', long.toString());\r\n            sortedStockNumberList.forEach((s) => {\r\n                searchParams.append('stockNumbers', s);\r\n            });\r\n\r\n            const url = `/home/api/recommendations/?${searchParams.toString()}`;\r\n            return await fetch(url)\r\n                .then((response) => response.json())\r\n                .then((data: IVehicleRecommendationsApiResponse) => {\r\n                    if (data && data.length > 0) {\r\n                        return data.slice(0, maxRecommendations);\r\n                    }\r\n                    return [];\r\n                })\r\n                .catch(() => []);\r\n        }\r\n        return Promise.resolve([]);\r\n    } catch {\r\n        return Promise.resolve([]);\r\n    }\r\n}\r\n","import Cookies from 'js-cookie';\r\n\r\nexport function getStoreId(): string {\r\n    const kmxVisitorCookie = Cookies.get('KmxVisitor_0');\r\n    if (kmxVisitorCookie) {\r\n        const match = kmxVisitorCookie.match(/StoreId=(\\d{4})/);\r\n        if (match && match.length > 0) {\r\n            return match[1];\r\n        }\r\n    }\r\n    return '';\r\n}\r\nexport function getVisitorId(): string {\r\n    const kmxVisitorCookie = Cookies.get('KmxVisitor_0');\r\n    if (kmxVisitorCookie) {\r\n        const match = kmxVisitorCookie.match(/VisitorID=([a-z0-9\\-]+)/);\r\n        if (match && match.length > 0) {\r\n            return match[1];\r\n        }\r\n    }\r\n    return '';\r\n}\r\n"],"names":["map","webpackContext","req","id","webpackContextResolve","__webpack_require__","o","e","Error","code","keys","Object","resolve","module","exports","n","r","i","s","u","a","c","f","h","d","l","$","y","M","name","weekdays","split","months","ordinal","t","m","String","length","Array","join","v","z","utcOffset","Math","abs","floor","date","year","month","clone","add","ceil","p","w","D","ms","Q","toLowerCase","replace","g","S","_","O","args","arguments","b","locale","$L","utc","$u","x","$x","$offset","this","parse","prototype","$d","Date","NaN","test","match","substring","UTC","init","$y","getFullYear","$M","getMonth","$D","getDate","$W","getDay","$H","getHours","$m","getMinutes","$s","getSeconds","$ms","getMilliseconds","$utils","isValid","toString","isSame","startOf","endOf","isAfter","isBefore","$g","set","unix","valueOf","getTime","toDate","apply","slice","$locale","weekStart","$set","min","daysInMonth","get","Number","round","subtract","format","invalidDate","meridiem","monthsShort","weekdaysMin","weekdaysShort","getTimezoneOffset","diff","toJSON","toISOString","toUTCString","k","forEach","extend","$i","isDayjs","en","Ls","LTS","LT","L","LL","LLL","LLLL","zone","offset","indexOf","concat","A","afternoon","milliseconds","SS","SSS","ss","mm","H","HH","hh","DD","Do","day","MM","MMM","MMMM","Y","YY","YYYY","Z","ZZ","formats","toUpperCase","regex","parser","exec","call","hours","customParseFormat","parseTwoDigitYear","minutes","seconds","years","days","weeks","$l","negative","parseFromMilliseconds","calMilliseconds","reduce","as","humanize","fromNow","asMilliseconds","asSeconds","asMinutes","asHours","asDays","asWeeks","asMonths","asYears","duration","isDuration","bind","_createClass","defineProperties","target","props","descriptor","enumerable","configurable","writable","defineProperty","key","Constructor","protoProps","staticProps","_react","require","_react2","_interopRequireDefault","_propTypes2","_event","_scrollParent2","_debounce2","_throttle2","obj","__esModule","default","LISTEN_FLAG","listeners","pending","passiveEventSupported","opts","window","addEventListener","passiveEvent","capture","passive","checkVisible","component","node","ref","HTMLElement","parent","visible","overflow","ownerDocument","document","documentElement","parentTop","parentLeft","parentHeight","parentWidth","_parent$getBoundingCl","getBoundingClientRect","top","left","height","width","windowInnerHeight","innerHeight","clientHeight","windowInnerWidth","innerWidth","clientWidth","intersectionTop","max","intersectionLeft","intersectionHeight","intersectionWidth","_node$getBoundingClie","offsetTop","offsetLeft","offsets","isArray","checkOverflowVisible","offsetWidth","offsetHeight","getClientRects","elementHeight","_node$getBoundingClie2","checkNormalVisible","once","push","forceUpdate","unmountIfInvisible","lazyLoadHandler","listener","index","splice","delayType","finalLazyLoadHandler","LazyLoad","_Component","instance","TypeError","_classCallCheck","_this","self","ReferenceError","_possibleConstructorReturn","__proto__","getPrototypeOf","setRef","subClass","superClass","create","constructor","value","setPrototypeOf","_inherits","scrollport","scrollContainer","querySelector","needResetFinalLazyLoadHandler","undefined","debounce","off","throttle","getAttribute","listenerCount","setAttribute","_props","scroll","resize","on","removeEventListener","removeAttribute","element","_props2","children","placeholder","className","classNamePrefix","style","createElement","Component","propTypes","string","bool","oneOfType","number","arrayOf","object","defaultProps","func","wait","immediate","timeout","context","timestamp","result","later","last","setTimeout","callNow","el","eventName","callback","attachEvent","event","detachEvent","excludeStaticParent","position","overflowRegex","parentNode","getComputedStyle","overflowX","overflowY","fn","threshhold","scope","deferTimer","now","clearTimeout","emptyContentResponse","allPosts","portraitLeft","portraitRight","landscapeLeft","landscapeTop","landscapeBottom","emptyContentfulPageResponse","pageContent","nodeType","BLOCKS","DOCUMENT","data","content","marks","pageName","emptyContentfulLinkFarmResponse","tabItems","VENDOR_ENTRY_ID","ESIGN_DISCLOSURE_ENTRY_ID","INTEREST_BASED_ADS_ENTRY_ID","TERMS_ENTRY_ID","NOTICE_OF_ACCESSIBILITY_ENTRY_ID","CAF_CONSUMER_DISCLOSURE_ENTRY_ID","RESPONSIBLE_DISCLOSURE_ENTRY_ID","TEXTING_TERMS_ID","getSocialProofCarousel","then","response","Promise","catch","getContentfulPage","entryId","getContentfulLinkFarm","fetch","json","async","getCiamId","kmxDevTools","ciamId","credentials","expireTime","currentDate","getVehiclesFromRVC","params","urlsToFetch","stockNumberList","stockNumber","fetchPromises","url","all","getVehicles","queryParamsArray","val","take","scoringProfile","transferDestinationStoreId","storeId","zipCode","radiusInMiles","items","getVehiclesTotalCount","isInStoreOnly","hasPriceDrop","hasFreeShipping","baseUrl","URLSearchParams","entries","isSaleable","resultsOnly","field","append","ok","totalCount","emptyFBSResponse","fbsDecision","expirationDateFormatted","downPayment","isSoftPull","decision","terms","conditionAmount","conditionAmountRounded","lenderName","totalFinanceAmount","stateAbbreviation","taxesAndFeesRounded","applicationUrl","getSmallBatchDecisions","stockNumbers","stockNumbersString","storeIdToRequest","StoreId","err","console","log","dialogRef","useRef","isVisible","onClose","handleClose","dialog","fadeOutCSSClass","classList","close","remove","useEffect","current","rect","clientY","clientX","closeIfBackgroundClicked","showModal","type","ErrorBoundary","super","state","hasError","getDerivedStateFromError","error","render","count","MDCSelect","focused","onChange","onFocus","setState","onBlur","noInitialValue","disabled","options","label","htmlFor","autoCapitalize","autoComplete","helperText","helperTextIsPersistent","initialId","inputMode","inputProps","validationStatus","maxLength","pattern","required","loading","textFieldId","helperTextId","textFieldRef","isFocused","defaultFocus","setFocus","useState","elRef","viewBox","xmlns","fill","textAlign","paddingTop","tone","size","autoHeight","autoplayButton","autoplayButtonOutput","autoplayHoverPause","autoplayTimeout","mouseDrag","slideBy","speed","swipeAngle","tinySlider","activeEl","activeElement","focus","start","touches","startPosition","move","currentX","currentY","degree","toDegree","getTouchDirection","cancelable","preventDefault","atan2","PI","angle","nextFocus","prevFocus","leaveCarousel","direction","preCarousel","postCarousel","play","keyHandler","pause","shiftKey","ignoreSlideInteractiveContent","contains","click","goTo","indexString","includes","parseInt","getFocusedSlideIndex","currentIndex","focusHandler","getInfo","container","carousel","offsetParent","touch","initCarousel","autoplay","fixedWidth","autoWidth","loop","gutter","navContainer","nextButton","prevButton","responsive","center","controls","edgePadding","nav","preventScrollOnTouch","removeEventHandlers","Carousel","slideCount","showNextButton","showPrevButton","handleIndexChanged","initTinySlider","componentDidMount","_tinySlider","sliderInfo","componentWillUnmount","destroy","_removeEventHandlers","leftAligned","events","info","showSlideNavButton","hoverEvent","firstVisibleTileIndex","targetClientRects","vehicleTileLocationPlusExtraThreshold","lastSlideIsHovered","nextButtonIsHovered","slideIsHovered","slideIndex","prevButtonIsHovered","hideSlideNavButton","componentDidUpdate","prevProps","rebuild","href","ariaLabel","child","onMouseEnter","onMouseLeave","tabIndex","ReturnVisitorCarousel","carouselItems","buildCarouselItems","vehicleTileRefs","addToRefsList","tileRef","currState","vehicleTileList","filter","item","vehicle","make","model","trim","updatedViewedTiles","enableRemove","isWaitingForFavoritesResponse","stockNumbersPendingFavoritesUpdate","sectionName","isMiniHomebase","headline","hasFbsData","fbsData","prevState","favoritedStockNumberListHasChanged","JSON","stringify","favoritedStockNumberList","vehicleTileListHasChanged","pendingFavoritesUpdates","isVisibleHasChanged","fbsTermsHaveChanged","carouselElement","getElementById","homeBaseHeroElement","tileTermElements","tile","tabElements","querySelectorAll","firstTabElement","fbsStylesAreSet","animFbsIntro","timeline","paused","to","ease","translateY","stagger","autoAlpha","tabHeight","minHeight","delay","fromTo","progress","carouselName","contextType","largeBreakpoint","mediumBreakpoint","formatSeperatedInteger","toFixed","formatVin","input","SnackBar","cancelAction","icon","textLabel","SNACKBAR_ACTIVE_CLASS","snackBarRef","bodyRef","body","keydownHandler","sbRef","openSnackbar","closeSnackbar","CLOSE_TIMEOUT","snackbar","defaultContext","stationUrl","enableFBS","setVehicleList","FBSContext","createContext","FBSProvider","setEnableFBS","vehicleList","setFbsData","setDownPayment","setStationUrl","vehicleStockNumbers","smallBatchDecisions","prevFbsData","tryEnablingFBS","Provider","useLocalCarsStore","favoriteVehicles","recentlyViewedVehicles","localVehicles","isLocalVehiclesLoading","isRecentlyVehiclesLoading","setCiam","setZipCode","setStoreId","mergedStockNumbers","fbs","uniqueStockNumbers","from","Set","setRecentlyViewedVehicleTiles","localData","includeFbsData","find","setLocalVehicles","toggleFavoritesResponse","isSuccess","componentCallback","addVehicleToFavorites","payload","EVENTS","CLICK","SAVE_RECOMMENDED_CAR","linkDetails","CustomEvent","bubbles","detail","dispatchEvent","removeVehicleFromFavorites","hideSnackbar","CTA","favoriteStockNumber","setFavoriteVehicles","getCarImages","successCallback","errorCallback","mode","status","assign","_useLocalCarsStore","MiniHomebaseSlideCTA","arrowIcon","homeIcon","locationIcon","locationMUIIcon","fillRule","clipRule","signaturePath","focusable","transform","stroke","strokeLinecap","strokeLinejoin","strokeWidth","calendarIcon","allPriorUses","displayName","addStringLineItem","lineItems","addNumberLineItem","addCommas","numberValue","addStringArrayLineItem","every","excludedHighlights","highlightValuesToDescriptions","singleowner","allnewtires","newpairtires","lowmiles","lowmilesperyear","fuelefficient","advancedfeatures","premiumaudio","extractBaseSpecificationsLineItems","car","vehicleSize","series","types","mileage","storeCity","packages","priorUses","mpgCity","mpgHighway","cityState","displayNames","pu","priorUseWithDisplayName","apu","mpg","extractColorsLineItems","exteriorColor","interiorColor","extractEngineLineItems","engineSize","engineType","engineTorque","engineTorqueRpm","horsepower","horsepowerRpm","cylinders","fuelType","driveTrain","transmission","torqueValue","horsepowerValue","extractKeyFeatureLineItems","highlightedFeatures","extractHighlightsLineItems","highlights","extractFeaturesLineItems","featureScore","features","featureScoreCategory","unshift","extractRatingsAndReviewsLineItems","averageRating","numberOfReviews","Section","title","withLabels","useMemo","li","withoutLabels","VehicleDetailsDialog","setIsDialogVisible","Dialog","vin","CarTileWrapper","isCompact","isFavoriteInUI","setIsFavoriteInUI","setSnackBar","text","isOpen","isDialogVisible","ribbonText","fbsContext","useContext","fbsApplication","tradeInBreakdown","mapDecisionToFbsApplication","CRITICAL_MENU_ITEM","onClick","handleRemoveVehicleTile","analytics","handleHeartClick","handleShareClick","navigator","share","location","origin","clipboard","writeText","onCarTileClick","closestAElement","closest","closestSection","RECOMMENDED_CARTILE","recommendations","recommendedCarClicked","moduleExperience","TRACKING_DELAY","disableScrollNav","imageUrl","imageLink","showFavorites","isDisabled","statusCode","ribbonStyle","isFavorite","menuItems","favoriteHeart","AdvancedFeaturesIcon","getMenuItems","criticalMenuItem","onFavorite","onUnfavorite","res","carImages","recommendationType","onMenuOpen","originalPrice","showElectricVehicleInfo","TileKebabMenuItemSnackbar","mapVehicleTileToCar","vehicleTile","imageCount","transferText","shippingText","hideSnackBarFromExternalScript","externalSnackbar","display","toDollars","includeCents","extractNumberFromString","stripNonNumeric","original","parsedFloat","parseFloat","FinancingUpdateTypes","FinanceCalculator","initialValues","_id","_name","_nearestStoreState","nearestStoreState","_monthlyPayment","monthlyPayment","_downPayment","_annualInterestRate","annualInterestRate","_loanTerm","loanTerm","_totalFees","_vehiclePrice","_totalPrice","_financePrice","_taxesAndFeesList","taxesAndFeesList","calculateAndSetAllPrices","totalFees","vehiclePrice","totalPrice","financePrice","updateId","vehiclePriceAndTotalFees","budget","financeCalculator","monthlyInterestRate","decimalMonthlyInterestRate","pow","calculateBudget","roundedBudget","totalCost","fsl","rb","minimum","estimatedFeesMaximum","maximum","hasHighestBudget","taxesAndFees","budgetRangeExists","budgetRangeDoesNotExist","getHighFeesForBudgetInGap","update","financingUpdate","NearestStoreState","MonthlyPayment","DownPayment","InterestRate","LoanTerm","vehicleTypeListLocalStorage","budgetSearch","header","vehicleTypeCarouselSelect","headerDetails","vehicleTypeTileImageWidth","vehicleTypeTileImageHeight","vehicleTypeList","pathSegment","imgSrc","monthlyPaymentInput","downPaymentInput","zeroDownPaymentPrompt","creditScoreSelect","vehiclePriceHeader","vehiclePriceAriaLabel","vehiclePriceDisclaimerButtonText","primaryCtaId","primaryCtaText","buildPrimaryCtaLink","upperRange","interestRate","secondaryCtaText","NumberRoller","formattedValue","frames","interval","ariaValue","renderAnimationFrames","startValue","setAriaValue","animate","clearInterval","newValue","formatter","endValue","buildAnimationFrames","setInterval","frameCount","distance","pop","ariaLiveLabel","refresh","itemIndex","selected","vehicleType","alt","src","handleTypeTileClick","indexOfType","onVehicleTypeListChange","typeSelected","creditScores","onSubmit","onInputChange","budgetSearchDialogOpen","setBudgetSearchDialogOpen","primaryCtaLink","lowerRange","inventorySearchPriceFloorDistanceFromMaximum","buildVehiclePriceLowerRange","typesPath","showZeroDownPaymentHelperText","creditScoreSelectOptions","allIds","byId","buildCreditScoreSelectOptions","rateOptions","findIndex","onPaste","info_rebrand","class","color","leadDetail","leadOriginationPage","leadType","calcDetail","payment","creditScore","cs","termLength","estimatedPayment","apr","LocalStorageConstants","persistFinanceCalculatorAndUpdateAnalytics","hasInteraction","term","feeState","feesList","localStorageValue","updatedDateTime","localStorage","setItem","setFinanceInfoToStore","digitalData","financeCalculatorDigitalData","calculatorName","creditRating","selectedFeeState","updateDigitalData","role","SEARCH_INITIATED","search","initiationMethod","hideBudgetSearch","budgetCalculator","buildCreditScoreLabel","creditRate","creditScoreLabel","creditName","minimumFicoScore","maximumFicoScore","buildCreditScores","creditRatesList","medianRate","cachedTaxesAndFees","financeCalculatorDefaults","cachedFinanceCalculator","cachedVehicleTypeList","hasBeenCalled","financeCalculatorName","serializedVehicleTypeList","getItem","financeCalculatorLocalStorage","financeCalculatorInitialValues","calculatorLocalStorage","cacheDate","expirationDate","cacheDateDay","setDate","cachedDataNotExpired","getFinanceInfoFromStore","sort","callBack","useInit","completedBudgetCalculatorForm","setCompletedBudgetCalculatorForm","hasSubmittedForm","hasKmxFinanceInteraction","submittedBudgetCalculatorHref","financeCalculatorSettings","setFinanceCalculatorSettings","budgetSearchId","vehicleTypePreferences","setVehicleTypePreferences","noNearestStore","setNoNearestStore","fetchtaxesAndFeesList","done","handleNoTaxesAndFeesList","axios","getTaxesAndFeesList","store","State","subscribeToNearestStoreUpdates","serializedViewedVehiclesLocalStorage","viewedVehiclesList","buildVehicleTileList","updatedVehicleTypeList","LoadingSpinner","animationFrameReq","atHalfway","dashArray","dashOffset","requestAnimationFrame","cancelAnimationFrame","cx","cy","strokeDasharray","strokeDashoffset","setCreditRatesList","isLoading","setIsLoading","getCreditRatesList","FOCUS_GROUP","FOCUS_DISABLED","assignRef","useIsomorphicLayoutEffect","React","currentValues","WeakMap","hiddenGuard","padding","__assign","hasOwnProperty","ItoI","innerCreateMedium","defaults","middleware","buffer","assigned","read","useMedium","assignSyncMedium","cb","cbs","assignMedium","pendingQueue","executeQueue","cycle","createMedium","mediumFocus","_ref","currentTarget","mediumBlur","mediumEffect","mediumSidecar","medium","ssr","createSidecarMedium","focusScope","emptyArray","FocusLock","forwardRef","parentRef","_extends2","refs","defaultValue","initialValue","callbackRef","_useState","realObserved","setObserved","observed","isActive","originalFocusedElement","_props$disabled","_props$noFocusGuards","noFocusGuards","_props$persistentFocu","persistentFocus","_props$crossFrame","crossFrame","_props$autoFocus","autoFocus","group","allowTextSelection","whiteList","hasPositiveIndices","_props$shards","shards","_props$as","Container","_props$lockProps","lockProps","containerProps","SideCar","sideCar","_props$returnFocus","returnFocus","shouldReturnFocus","focusOptions","onActivationCallback","onActivation","onDeactivationCallback","onDeactivation","useCallback","captureFocusRestore","_document","allowDefer","focusRestore","returnFocusTo","howToReturnFocus","returnFocusOptions","setObserveNode","newObserved","_extends","hasLeadingGuards","hasTailingGuards","mergedRef","facade","oldValue","prevRefs_1","nextRefs_1","current_1","has","focusScopeValue","enabled","active","Fragment","_typeof","Symbol","iterator","toArray","ret","asArray","getFirst","getParentNode","Node","DOCUMENT_FRAGMENT_NODE","host","isTopNode","DOCUMENT_NODE","isVisibleCached","visibilityCache","cached","checkParent","ELEMENT_NODE","computedStyle","getPropertyValue","isElementHidden","hasAttribute","isInert","isVisibleUncached","isAutoFocusAllowedCached","cache","isAutoFocusAllowed","isAutoFocusAllowedUncached","getDataset","dataset","isHTMLInputElement","tagName","isRadioElement","attribute","isGuard","_a","Boolean","focusGuard","isNotAGuard","isDefined","tabSort","aTab","bTab","tabDiff","indexDiff","orderByTabIndex","nodes","filterNegative","keepGuards","getTabIndex","queryTabbables","queryGuardTabbables","getFocusablesWithShadowDom","withGuards","shadowRoot","acc","matches","getFocusables","parents","focusableWithShadowDom","focusableWithIframes","HTMLIFrameElement","contentDocument","getFocusablesWithIFrame","filterFocusable","isHTMLButtonElement","notHiddenInput","filterAutoFocusable","Map","getTabbableNodes","topNodes","getFocusableNodes","some","iframeBody","getActiveElement","inDocument","contentWindow","safeProbe","getTopParent","getAllAffectedNodes","currentNode","contained","j","compareDocumentPosition","DOCUMENT_POSITION_CONTAINED_BY","DOCUMENT_POSITION_CONTAINS","filterNested","focusInside","topNode","frame","focusInFrame","focusInsideIframe","focusOn","correctNode","checked","findSelectedRadio","pickFirstFocus","pickFocusable","NEW_FOCUS","pickAutofocus","nodesIndexes","orderedNodes","groups","autoFocusables","autoFocusable","autofocus","getParents","getCommonParent","nodeA","nodeB","parentsA","parentsB","currentParent","getTopCommonParent","baseActiveElement","leftEntry","rightEntries","activeElements","leftEntries","topCommon","entry","subEntry","common","allParentAutofocusables","parentFocus","parentAutofocusables","focusSolver","lastNode","commonParent","anyFocusable","innerElements","srcNodes","dstNodes","remap","outerNodes","orderedInnerElements","entity","innerFocusables","innerTabbable","newId","innerNodes","innerTabbables","cnt","firstFocus","lastFocus","isOnGuard","activeIndex","lastIndex","lastNodeInside","resultSet","firstNodeIndex","lastNodeIndex","correctedNodes","currentFocusableIndex","previousFocusableIndex","tabbableNodes","currentTabbableIndex","previousTabbableIndex","focusIndexDiff","returnFirstNode","returnLastNode","newFocus","focusNode","warn","guardCount","lockDisabled","moveFocusInside","weakRef","WeakRef","deref","targetElement","stack","currentElement","parentElement","previousElementSibling","right","nextElementSibling","recordElementLocation","_b","_c","_d","_e","_i","stack_1","line","parent_1","savedCurrent","focusables","aim","_f","focusables_1","restoreFocusTo","moveFocus","fromElement","newOptions","onlyTabbable","defaultOptions","solution","useTabbables","shard","prev","next","first","getRelativeFocusable","pickBoundary","what","deferAction","action","extractRef","focusOnBody","lastActiveTrap","lastActiveFocus","tryRestoreFocus","lastPortaledElement","focusWasOutsideWindow","windowFocused","defaultWhitelist","autoGuard","startIndex","end","step","allNodes","lastGuard","guard","focusAutoGuard","lockItem","checkInHost","check","boundary","getNodeFocusables","activateTrap","_lastActiveTrap","workingNode","portaledElement","newTarget","workingArea","focusWhitelisted","shouldForceRestoreFocus","focusIsHidden","area","withinHost","blur","newActiveElement","focusedIndex","_ref2","_ref3","_ref4","onTrap","stopPropagation","onWindowFocus","onWindowBlur","focusLockAPI","focusNextElement","focusPrevElement","focusFirstElement","focusLastElement","source","observerNode","reducePropsToState","propsList","_ref6","handleStateChangeOnClient","traps","trap","lastTrap","sameTrap","_ref7","WrappedComponent","mountedInstances","emitChange","SideEffect","_PureComponent","_inheritsLoose","peek","_proto","PureComponent","toPrimitive","toPropertyKey","_defineProperty","getDisplayName","FocusLockCombination","FocusLockUI","FocusTrap","_objectWithoutPropertiesLoose","InstantOffersLoadingScreen","getInstantOffersToken","method","instantOffersContainerId","instantOffersDialogContainerClassName","instantOfferStartedEvent","instantOfferEligibleEvent","instantOfferIneligibleEvent","instantOfferZipCodeDecodeErrorEvent","buildScheduleIneligibleOfferLink","originPage","buildScheduleEligibleOfferLink","offerCode","icoFeatures","buildInstantOfferConfig","vehicleInformation","containerId","config","authRefreshHandler","enabledFeatures","handleIneligible","startingMethod","vehicleTitle","prepareVehicleTitle","instantOfferDetails","vehicleMake","vehicleModel","variant","rel","onStartNewOffer","scrollToTop","icoContainerEl","scrollTo","behavior","scrollTop","main","hidden","carMaxLogoDark","isInstantOffersEligible","InstantOffersDisclaimer","disclaimerEl","disclaimer","firstDigit","charAt","secondDigit","calculateDurationToExpiration","expirationDisplayDate","expirationDateUtc","hour","minute","second","durationToExpiration","setDurationToExpiration","cleanup","durationCalcInterval","timeToExpiration","isExpired","offerAmount","invalid","overlayIcon","IconWarning","validationMessage","numTabs","getTabPanelId","buttonId","isValidVin","getCheckDigit","substr","sum","transliterate","vinChar","usaStates","hasStore","TAB_PLATE_ID","InstantOffersForm","setVin","plate","setPlate","vinError","setVinError","stateError","setStateError","plateError","setPlateError","zipCodeError","setZipCodeError","showInvalidLicensePlateMessage","setShowInvalidLicensePlateMessage","hasInvalidLicensePlate","setIsValid","activeTab","setActiveTab","zipInput","TextField","readonly","plateInput","vinInput","renderInput","useIntersectionObserver","threshold","isIntersecting","setIsIntersecting","observer","IntersectionObserver","observe","unobserve","bgImageUrl","coverSectionRef","backgroundImage","instantOffersCard","hasSavedEligibleOffer","savedOffer","hasSavedIneligibleOffer","elevation","eligibleOfferLocalStorageKey","ineligibleOfferLocalStorageKey","ineligibleOfferExpiration","removeEligibleOfferFromStorage","removeItem","getEligibleOfferFromStorage","serializedEligibleOffer","eligibleOfferLocalStorage","dateString","dateStringUtc","eligibleOfferDate","ex","InstantOffersContainer","savedEligibleOffer","savedIneligibleOffer","serializedIneligibleOffer","ineligibleOfferLocalStorage","ineligibleOfferDate","getIneligibleOfferFromStorage","isIneligibleOpen","isIcoLoading","isIcoDialogOpen","isIcoEligible","handleIcoDialogClose","handleStartNewOffer","handleSubmit","checkEligibilityAndLaunch","handleEligibility","handleIneligibility","handleStarted","InstantCashOffers","cancel","message","newOffer","newState","setIneligibleOfferToStorage","nextState","pageState","decodeResponse","profile","getEligibility","isEligible","zipcode","initialize","formData","decodeVin","resp","decodePlate","InstantOffersSection","styleLoaded","scriptLoaded","scriptLoadedCallback","styleLoadedCallback","instantOffersCSSDataEl","instantOffersJSDataEl","instantOffersCSSSrc","instantOffersJSSrc","linkEl","scriptEl","getElementsByTagName","appendChild","onload","loadInstantOffersComponentAssets","InstantOffersLoader","makeSentenceCase","sentence","titleCase","onIndexChanged","skipText","itemsLoaded","itemCount","buildSocialProofPostsById","ids","portraitAlignLeftPosts","portraitAlignRightPosts","landscapeLTRPosts","landscapeAlignTopPosts","landscapeAlignBottomPosts","socialProofPostsById","horizDirection","vertDirection","validPost","SocialProofCard","hasLoaded","thumbnailUrl","authorName","imgAlt","onError","postId","instagram","FadeInOnScroll","wrapper","SocialProofModal","card","visibleCssClass","setVisibleCssClass","timeoutId","handleOnClose","permaLink","SocialProof","_loadSocialProofData","socialProofCarousel","socialProofPosts","carouselResponse","postIdQueryParams","duplicateIds","buildPostIdQueryParams","post","post_id","thumbnail_url","thumbnailHeight","thumbnail_height","thumbnailWidth","thumbnail_width","author_name","img_alt","perma_link","getSocialProofPosts","posts","socialProofCardsState","_buildSocialProofCardsState","socialProofCards","dialogOpen","dialogPostId","socialProofCardsLoaded","socialProofCardErrorList","_socialProofCardsLoadedCounter","_socialProofCardErrorList","_handleSocialProofCardLoad","_handleSocialProofCardError","fullStoryPageId","_renderCarousel","SocialProofCardState","validSocialProofIds","onLoad","ResearchArticlesTile","getBodyText","isHovered","copy","image","category","dangerouslySetInnerHTML","__html","emptyRelatedContentResponse","ResearchTile","ResearchArticlesPrompt","heading","buttonLabel","researchPromptData","Prompt","ResearchArticlesContainer","loadRelatedContentData","getRelatedContent","researchRelatedContentItems","tileData","StatePricingDisclaimer","warrantyDisclaimerText","loadStatePricingDisclaimer","feeDisclaimer","getStatePricingDisclaimer","HeroFeaturedContent","heroTheme","ctaLabel","FirstTimeHero","PAGE","STATE","PAGE_STATE_LOAD_TIME","disableHomebasePageStyles","headerEl","media","srcSet","Dark","emptyProgressionStatus","fetchAndBuildTransfersTile","progressionStatus","getProgressionStatus","vehicles","hasInProgressTransfer","transfersTile","TransferOrderRequestSubmitted","TransferOrderAwaitingApproval","TransferOrderApproved","TransferOrderTendered","fetchAndBuildRecommendedVehicleTiles","viewedVehicleList","sourceStockNumbers","selectSourceStockNumbers","lat","long","visitorId","userStoreId","recommendedVehicleList","SkeletonVehicleTile","xmlnsXlink","x1","y1","x2","y2","gradientTransform","gradientUnits","stopColor","stopOpacity","fillOpacity","rx","opacity","isolation","RecommendationsPlaceholderCarousel","hasLoadedRecommendedTab","isLoadingRecommendedTab","onOpenSnackBar","handleEddlOnClick","allStockNumbers","similarVehicles","sn","cards","Recommended","analyticsName","carouselAnalyticsName","RecentlyViewedPlaceholderCarousel","viewedList","setViewedList","RecentlyViewed","newMatchCountText","inventoryCount","inventoryCountText","isPartialRecentSearch","handleOnLoad","childArray","_p8","random","uuid","isMenuOpen","setIsMenuOpen","isAriaExpanded","setIsAriaExpanded","menuRef","closeMenu","buttonAttrs","moreVert","linkAttrs","linkClasses","handleClick","newParam","hasQueryString","link","newMatchCount","imageAlt","recentSearchTile","imgLoaded","setImgLoaded","isShareSnackbarOpen","setIsShareSnackbarOpen","tileKebabMenuDialogOpen","setTileKebabMenuDialogOpen","loadingBarRef","tween","gsap","repeat","translateX","kill","KEBAB_MENU_ITEMS","tileMenuItems","kebabMenuItem","buildTileMenuItems","ReturnVisitorRecentSearchesCarousel","recentSearchTileList","SearchedPlaceholderCarousel","recentSearchesList","isLoadingSearchedTab","hasLoadedSearchedTab","Searched","emptyServerSideExperimentContext","bucketName","experimentName","ServerSideExperimentContext","ServerSideExperimentProvider","kmxExperiments","preferredTestBucket","getExperimentBucket","getRecentSearches","userId","HomeBaseTabs","tabButtonRefs","animatedActiveStateIndicator","activeTabIndex","activeTabRef","defaultCarouselOrder","defaultTabRef","tabListOrder","persistedFavoritedStockNumberList","persistedFavoritedVehicleList","favoritedVehicleList","pillCurrentlyTransitioning","handleTabChange","loadRecommendationsTab","loadSearchedTab","updateViewedTiles","handleKeyPress","initActiveStateIndicator","refPositionInfo","transitionPillActiveState","nextTabId","newTabPositionInfo","currentTabPositionInfo","activeStateIndicator","pillTransition","onStart","onComplete","currentTabId","currentTabIndex","nextTabIndex","atStartOfTabList","atEndOfTabList","nextTabRef","trimStart","recommendedVehicleTileList","tileToRemove","newViewedTileList","renderTabList","tabButtons","tabId","tabRef","tabButtonIcon","isActiveTab","tabButtonId","tabPanelId","tabPanelElementId","onKeyDown","keyboardEvent","tab","renderTabPanels","tabPanels","panelId","HomeBaseTransferStatusModal","productTitle","intense","slot","background","borderRadius","words","basePrice","toLocaleString","PlaceholderCarousel","cardText","buttonText","Card","subtitle","clickEvent","taggingEvent","page","rightArrowIcon","RelatedSearchesTile","testDriveCount","setTestDriveCount","localPriceDropsCount","setLocalPriceDropsCount","freeShippingCount","setFreeShippingCount","allCarsCounts","setAllCarsCounts","defaultSearchProps","fetchAll","fetchTestDrive","fetchLocalPriceDrops","fetchFreeShipping","CarTilesCarousel","carouselId","vehiclesData","isRemoveEnabled","onRemove","isInsideHomeBase","showRelatedSearchesTile","sortedVehicleList","vehicleCount","saleableVehicleCount","handleRemove","HeroContext","experiences","useHomeStore","setInitialValues","experienceData","debugHomeStore","cars","setCars","viewedVehicles","remaining","itemToRemove","HomeBaseHero","handleOpenSnackbar","snackBarText","snackbarOpen","handleEnablingHomebaseOptimization","featureFlags","enableHomeBaseOptimization","hasHomebaseOptimization","handleDialogOpen","handleDialogClose","enableHomebasePageStyles","HeroContainer","loadAndBuildSavedVehicleTiles","parkingLotSavedVehicles","parsedVehicles","list","hasLoadedSavedVehicles","isLoadingSavedVehicles","savedVehicles","loadRecentlyViewedVehicleTiles","isLoadingViewedVehicles","hasLoadedViewedVehicles","viewedVehicleTileList","loadTransfersTile","isLoadingTransferredVehicle","hasLoadedTransferredVehicle","hasLoadedSavedVehiclesAssets","isLoadingSavedVehiclesAssets","loadSavedVehiclesAssets","snapshot","TransferCheckoutCreated","hasCheckoutCreatedTransfer","Names","processVehicles","savedVehicleList","allVehicles","vehiclesArray","dedupeVehicles","getHomeBaseData","savedStockNumbers","HomeBase","getComponentAndData","homeBaseExperience","experience","returnExperienceByName","FirstTime","homeStore","setTransferTile","setComponent","ReturnComponent","componentName","Suspense","fallback","LocalCarsSkeletonVehicleTile","LocalCarsPlaceholderCarousel","ShopAllCarsButton","isFullWidth","LocalCars","isTestActive","setIsTestActive","handleKmxEnableLocalCarsTest","carouselLength","openStoreSelectionModal","stateOrZip","renderCarousel","LocalCarsLoader","RecentSearchesContainer","hasLoadedSearches","setHasLoadedSearches","isLoadingSearches","setIsLoadingSearches","setRecentSearchesList","hasHomeBase","recentSearchesTileList","YouMightLikeContainer","hasLoadedRecommendedVehicles","setHasLoadedRecommendedVehicles","isLoadingRecommendedVehicles","setIsLoadingRecommendedVehicles","recommendedVehiclesList","setRecommendedVehiclesList","setFavoriteVehicle","tabName","tabResponsiveName","setIsActive","smoothScroll","scrolledElement","positions","currentScrollPosition","newScrollPostion","calculatePositions","keyFrames","getOwnPropertySymbols","propertyIsEnumerable","calculateKeyFrames","initSmoothScrolling","animation","shift","tabLinks","linkFarmRef","tabsOpenStatus","setTabsOpenStatus","tabStatus","linkUrl","linkText","linkAttribute","linkAttributeValue","customAttribute","renderLinks","setTabs","C","colors","iconStyles","cardStyles","sm","xs","border","pt","pb","px","md","sx","KmxShieldCheckStroked","TheCarMaxDifference","lg","mt","mb","Typography","Stack","spacing","fontStyle","onDomContentLoaded","fetchAsyncData","getState","nearestStoreLinkBuilder","heroContainer","heroConainerNew","enableHomeBaseRefactor","ThemeProvider","theme","recentSearchesContainer","youMightLikeContainer","budgetCalculatorContainer","localCars","socialProofContainer","instantOffersContainer","researchArticleContainer","theCarMaxDifference","statePricingDisclaimerContainer","StatePricingDisclaimerContainer","linkFarmContainer","startup","open","returnVisitorLocalStorage","viewedVehiclesLocalStorage","HeroTheme","VehicleStatuses","soldVehicleStatusCodes","onTestDriveStatusCodes","reservedStatusCodes","reservedConditionalStatusCodes","shippingStatusCodes","shippingConditionalStatusCodes","otherUnavailableStatusCodes","statusCodesForUnavailableVehicles","ProgressionActivities","LOADING_SPINNER_CLASS","MOBILE_TABLET_BREAKPOINT","FULL_STORY_HOME_PAGE_ID","MAX_RECENTLY_VIEWED_VEHICLE_TILES","ENABLE_HOMEBASE_OPTIMIZATION_EVENT","DAYS_BEFORE_HOMEBASE_VISITOR_EXPIRES","HomebaseTab","TAB_LIST_ARIA_LABEL","TAB_ARIA_ID_PREFIX","TAB_PANEL_ARIA_ID_PREFIX","HOMEBASE_CAROUSELS","initiationAnalyticsLabel","deviceIsApple","userAgent","deviceIsAndroid","deviceIsWindows","isReturnHomePageVisitor","isFirstVisit","serializedReturnVisitor","returnVisitor","hasViewedVehicles","trackFirstTimeHomePageVisitor","getExpirationDate","getLocalStorageItem","filterOutExpiredVehicles","shiftUnavailableVehiclesToEnd","availableVehicles","comingSoonVehicles","onRemoteLotVehicles","beingTransferredVehicles","onTestDriveVehicles","holdVehicles","soldVehicles","otherUnavailableVehicles","sortedVehicleTileList","translateVehicleStatus","ComingSoon","OffSite","OnTestDrive","Shipping","Reserved","Sold","NotAvailable","isAvailableToTransact","isComingSoon","isOnRemoteLot","nearestStoreLinkDataAttr","buildAllLinks","nearestStoreLinks","nearestStoreHref","Id","buildHref","nearestStoreLink","getSavedVehicles","savedVehiclesCSSDataEl","savedVehiclesJSDataEl","savedVehiclesCSSSrc","savedVehiclesJSSrc","recommendedIcon","points","recentSearchesHeaderIcon","ry","placeholderTileIcon","viewedVehiclesHeaderIcon","transformStockNumberTypeForLocalStorage","removeViewedVehicleItemLocalStorage","serializedViewedVehicles","newLocalStorage","colorSchemes","dark","ANALYTICS_CONSTANTS","LOAD","trackEDDL","adobeDataLayer","trackAnchorClick","COOKIES","isAuthenticated","cookie","getMyKmxUserId","createObjectFromCookie","cookieName","dataArray","fromEntries","splitCookieData","KmxVisitorObject","getStoreId","getCookieValue","getStoreZipCode","getLatitude","latString","getLongitude","longString","carPriceTag","financialSlider","maxcareService","ribbon","simpleHeart","maskUnits","mask","storefront","borderHeart","coloredBorderHeart","tools","cleaningDisinfecting","healthPrecautions","help","version","shareIconIOS","IconSuccess","CopyIcon","readyState","getRecentlyViewedVehicleTiles","maxTiles","nearestStoreId","filteredVehicles","sortedViewedVehicles","getSortedViewedVehicleStockNumbersByDate","vehiclesList","isMissing","missingItems","isResponseMissingVehicles","combinedItems","buildVehicleTilesListFromVehicleList","buildOrderedVehicleTileList","getRecommendedVehicleTiles","sortedStockNumberList","searchParams","getVehicleRecommendations","getLocalVehiclesData","buildSavedVehicleTiles","savedVehicleStockNumberList","orderedVehicleList","orderedStockNumberList","vehiclesReturned","vehiclesRequested","foundItems","notFound","buildStatusText","vehicleIsUnavailable","kmxVisitorCookie","getVisitorId"],"sourceRoot":""}