{"version":3,"sources":["assets/images/backgrounds/banner.jpg","assets/images/logos/dirt.png","assets/images/ratings/esrb.png","assets/images/backgrounds/bg_info.png","assets/images/backgrounds/bg_paneledge.jpg","components/dishingTheDirtBanner/images/bg_dishdirt.jpg","components/dishingTheDirtBanner/images/thumbnails_left.png","components/dishingTheDirtBanner/images/thumbnails_right.png","components/dishingTheDirtBanner/images/txt_bg_box.png","components/dishingTheDirtBanner/images/txt_dishdirt_title.png","assets/images/backgrounds/bg_socialwall.png","assets/images/backgrounds/body.jpg","contexts/ConfigContext.ts","services/getWebsiteSettings.ts","consts.ts","containers/Application.tsx","components/backgrounds/BackgroundImage.tsx","components/backgrounds/TopBannerBackground.tsx","components/TopBanner.tsx","components/layout/StickyFooter.tsx","assetLocations.ts","components/inputs/StyledSelect.tsx","components/footer/licensing/languageSelector/LanguageSelector.tsx","components/links/LinkWrapper.tsx","components/links/NewTabLink.tsx","theme.ts","components/footer/licensing/rating/Rating.tsx","hooks/useResponsivePaddingSize.tsx","hooks/useResponsivePaddingClass.tsx","components/layout/PageSection.tsx","components/Spacer.tsx","links.ts","components/footer/licensing/legalLinks/LegalLinks.tsx","components/footer/licensing/LicensingSection.tsx","components/footer/Footer.tsx","components/layout/PageLayout.tsx","services/getHomePageData.ts","components/ResponsiveSpacer.tsx","components/buttons/StyledButton.tsx","components/links/SameTabLink.tsx","components/buttons/SameTabLinkButton.tsx","pages/homePage/gameDisplay/tiles/TileDescription.tsx","components/BorderedTile.tsx","pages/homePage/gameDisplay/tiles/Tile.tsx","hooks/useTileImage.tsx","components/aos/AosWrapper.tsx","errors/NonIntegerError.ts","errors/NonPositiveNumberError.ts","components/aos/RandomFlip.tsx","utils/arrayUtils/getRandomElement.ts","components/aos/DefaultAosAnimation.tsx","components/dishingTheDirtBanner/DishingTheDirtBanner.tsx","pages/homePage/gameDisplay/tiles/Tiles.tsx","pages/homePage/gameDisplay/Content.tsx","pages/homePage/gameDisplay/GameDisplay.tsx","components/backgrounds/SocialWallBackground.tsx","assets/icons/socialMedia/TwitterIcon.tsx","assets/icons/socialMedia/FacebookIcon.tsx","assets/icons/socialMedia/InstagramIcon.tsx","assets/icons/socialMedia/YouTubeIcon.tsx","components/SocialMediaIcons.tsx","pages/homePage/socialWall/post/PostAvatar.tsx","pages/homePage/socialWall/post/PostContent.tsx","pages/homePage/socialWall/post/PostCard.tsx","pages/homePage/socialWall/post/Post.tsx","pages/homePage/socialWall/post/PostSkeleton.tsx","components/masonry/MasonryController.ts","utils/arrayUtils/modSplitArray.ts","components/masonry/Masonry.tsx","pages/homePage/socialWall/SocialWallPosts.tsx","services/getCuratorContent.ts","pages/homePage/socialWall/SocialWall.tsx","components/backgrounds/GameDisplayBackground.tsx","pages/homePage/HomePage.tsx","App.tsx","serviceWorker.ts","index.tsx"],"names":["module","exports","ConfigContext","createContext","undefined","a","axios","get","response","data","settings","codemastersLogo","convertCodemasterLogoResponse","copyrightText","html","supportedCountries","countryListCountries","map","c","codename","supportedRatings","convertRatingsResponse","ratings","r","logo","ratingLogo","countries","country","name","code","imgSrc","image","url","description","href","link","src","id","system","defaultCountry","toLowerCase","Application","props","children","useState","config","setConfig","history","useHistory","useEffect","resolvedCountry","length","language","navigator","parsedLanguage","substring","indexOf","getCountryFromLanguage","resolveCountry","push","getWebsiteSettings","then","_country","find","Provider","value","BackgroundImage","styleProps","className","backgroundStyle","rest","classes","makeStyles","imageUrl","createStyles","root","backgroundImage","TopBannerBackground","backgroundImageSrc","backgroundSize","useStyles","display","justifyContent","alignItems","padding","TopBanner","dirtLogo","alt","style","width","theme","flex","flexDirection","minHeight","backgroundColor","palette","background","default","color","common","white","content","position","StickyFooter","footer","clsx","publicAssetsDirectory","process","flagsLocation","assetLocations","flags","at","au","be","ca","ch","de","es","fi","fr","it","nl","no","nz","pl","se","uk","us","world","primaryColour","minWidth","spacing","borderRadius","marginRight","primary","borderColor","grey","StyledSelect","label","variant","selectProps","FormControl","InputLabel","Select","LanguageSelector","useContext","getFlagSrc","iconSrc","onChange","event","handleLanguageChange","target","MenuItem","key","ListItemIcon","ListItemText","toUpperCase","LinkWrapper","Link","NewTabLink","rel","transition","createMuiTheme","main","secondary","black","typography","fontFamily","layoutConsts","opacity","Rating","rating","ratingForCountry","index","defaultRating","esrbImageSrc","getRatingForCountry","useResponsivePaddingSize","useTheme","paddingValues","xs","useMediaQuery","breakpoints","only","sm","md","lg","xl","useResponsivePaddingClass","paddingSize","responsivePadding","contentWrapper","maxWidthContainer","maxWidth","PageSection","noPadding","responsivePaddingClassName","Spacer","size","dimension","height","links","legal","termsAndConditions","privacyPolicy","contactUs","socialMedia","twitter","facebook","youtube","instagram","down","consent","textDecoration","LegalLinks","smallScreen","legalLinks","Typography","margin","textAlign","rightContent","paddingTop","LicensingSection","dangerouslySetInnerHTML","__html","Footer","bottom","zIndex","PageLayout","homePageData","metaData","convertMetaDataResponse","tiles","convertTilesResponse","keywords","metadataKeywords","title","metadataTitle","metadataDescription","tile","tileResponse","images","convertTileImagesResponse","button","convertTileButtonResponse","tileButtonResponse","text","hoverColour","desktop","convertTileImageResponse","desktopImage","tablet","tabletImage","mobile","mobileImage","imageResponse","backgroundColour","ResponsiveSpacer","multiplier","getBorder","colour","highlighted","uppercase","highlightedStyles","buttonStyles","contrastText","dark","border","transparent","getButtonStyles","primaryTheme","secondaryTheme","transparentTheme","boxShadow","textTransform","whiteSpace","lineHeight","fontSize","fontWeight","sizeSmall","sizeLarge","StyledButton","Button","SameTabLink","SameTabLinkButton","component","underline","TileDescription","pointerEvents","borderBackground","backgroundPositionY","paddingLeft","paddingBottom","marginTop","boxSizing","inner","overflow","BorderedTile","overideClasses","Tile","feature","useTileImage","hoverOverlay","top","left","fade","backgroundImageExtendible","descriptionContainer","descriptionContainerPlaceholder","visibility","descriptionContainerPlaceholderFeature","descriptionContainerPlaceholderDefault","descriptionContainerAbsolute","descriptionContainerAbsoluteExtendible","descriptionInner","extendible","AosWrapper","animation","offset","delay","duration","easingFunction","mirror","once","anchorPlacement","data-aos","data-aos-offset","data-aos-delay","data-aos-duration","data-aos-easing","data-aos-mirror","data-aos-once","data-aos-anchor-placement","NonIntegerError","propertyName","receivedValue","constructor","Error","NonPositiveNumberError","propName","recevedValue","RandomFlip","array","Math","floor","random","DefaultAosAnimation","order","backgroundPosition","thumbnailsContainer","thumbnailImage","thumbnailImageLeft","thumbnailImageRight","textSection","titleContainer","titleImage","textDescription","textboxBackgroundImageSrc","DishingTheDirtBanner","siteUrl","leftThumbnailImageSrc","titleImageSrc","rightThumbnailImageSrc","subTileContainer","aosContainer","Tiles","_tiles","featureTile","shift","i","Fragment","Content","setData","getHomePageData","Helmet","loader","GameDisplay","CircularProgress","SocialWallBackground","backgroundRepeat","TwitterIcon","SvgIcon","d","InstagramIcon","cx","cy","YouTubeIcon","socialMediaColours","icon","SocialMediaIcons","iconLinks","iconLink","IconButton","avatar","PostAvatar","user","Avatar","screenName","avatarImgSrc","fullName","PostContent","video","playsInline","poster","loop","disableCompletely","paper","PostCard","Post","post","PostSkeleton","Skeleton","Array","from","_","MasonryController","list","_list","_cachedColumns","this","numberOfColumns","hasOwnProperty","calculateColumns","numberOfOutputArrays","Number","isInteger","item","outputArray","forEach","element","modSplitArray","column","Masonry","items","renderItem","listDisplayController","breakpoint","DisplayGrid","breakPoint","columns","getColumns","numberOfColums","matches","flexWrap","SocialWallPosts","posts","masonryBreakPoints","convertPostsResponse","getPostContentResponse","getPostUserResponse","getPostImageResponse","getPostVideoResponse","thumbnail","user_image","userUrl","user_full_name","user_screen_name","socialWallPadding","SocialWall","borderBottom","subTitle","getCuratorContent","GameDisplayBackground","HomePage","App","useParams","Boolean","window","location","hostname","match","AOS","init","isIE","document","documentMode","ReactDOM","render","StrictMode","exact","path","to","getElementById","serviceWorker","ready","registration","unregister","catch","error","console","message"],"mappings":"+FAAAA,EAAOC,QAAU,IAA0B,oC,kBCA3CD,EAAOC,QAAU,05S,kBCAjBD,EAAOC,QAAU,8oF,oBCAjBD,EAAOC,QAAU,IAA0B,qC,oBCA3CD,EAAOC,QAAU,IAA0B,0C,oBCA3CD,EAAOC,QAAU,IAA0B,yC,oBCA3CD,EAAOC,QAAU,IAA0B,6C,oBCA3CD,EAAOC,QAAU,IAA0B,8C,kBCA3CD,EAAOC,QAAU,s0N,oBCAjBD,EAAOC,QAAU,IAA0B,gD,oBCA3CD,EAAOC,QAAU,IAA0B,2C,oBCA3CD,EAAOC,QAAU,IAA0B,kC,uMCc5BC,EAFOC,6BAAsCC,G,sFCD7C,gCAAAC,EAAA,sEACYC,IAAMC,IAAI,yBADtB,cACLC,EADK,OAGHC,EAASD,EAATC,KAEFC,EAA8B,CAChCC,gBAAiBC,EAA8BH,EAAKE,gBAAgB,IACpEE,cAAeJ,EAAKI,cAAc,GAAGC,KACrCC,mBAAoBN,EAAKO,qBAAqBC,KAAI,SAACC,GAAD,OAAYA,EAAEC,YAChEC,iBAAkBC,EAAuBZ,EAAKa,UATvC,kBAYJZ,GAZI,4C,sBAef,SAASW,EAAuBC,GAC5B,OAAOA,EAAQL,KAAI,SAACM,GAChB,IAAMC,EAAOD,EAAEE,WAAW,GAY1B,MAVwB,CACpBC,UAAWH,EAAEP,qBAAqBC,KAAI,SAACU,GACnC,MAAO,CAAEC,KAAMD,EAAQC,KAAMC,KAAMF,EAAQR,aAE/CW,OAAQN,EAAKO,MAAM,GAAGC,IACtBC,YAAaT,EAAKO,MAAM,GAAGE,YAC3BC,KAAMV,EAAKW,KACXP,KAAMJ,EAAKI,SAOvB,SAAShB,EAA8BD,GACnC,IAAMoB,EAAQpB,EAAgBoB,MAAM,GAEpC,MAAO,CACHK,IAAKL,EAAMC,IACXC,YAAaF,EAAME,YACnBC,KAAMvB,EAAgBwB,KACtBE,GAAI1B,EAAgB2B,OAAOnB,UCnD5B,IAAMoB,EAAiB,KAAKC,cCWpB,SAASC,EAAYC,GAAgB,IACxCC,EAAsBD,EAAtBC,SAAUhB,EAAYe,EAAZf,QAD6B,EAEnBiB,wBAAiCxC,GAFd,mBAExCyC,EAFwC,KAEhCC,EAFgC,KAG3CC,EAAUC,cAsCd,OApCAC,qBAAU,WACN,IAAMC,EAsCd,SAAwBvB,GACpB,MAAuB,qBAAZA,GAA8C,IAAnBA,EAAQwB,OAKlD,WACI,IAAMC,EAAWC,UAAUD,SAErBE,EAAiBF,EAASG,UAAUH,EAASI,QAAQ,KAAO,GAAGhB,cAErE,MAAuB,OAAnBc,GAA8C,OAAnBA,EAAgC,KAExDA,EAAed,cAZ6CiB,GAE5D9B,EAAQa,cAzCakB,CAAe/B,GAEnCA,IAAYuB,GACZH,EAAQY,KAAKT,GFTV,WAAf,+BEYQU,GAAqBC,MAAK,SAACnD,GAAc,IAEjCC,EAIAD,EAJAC,gBACAE,EAGAH,EAHAG,cACAE,EAEAL,EAFAK,mBACAK,EACAV,EADAU,iBAGA0C,EAAWZ,EAIU,qBAHPnC,EAAmBgD,MACjC,SAAC7C,GAAD,OAAOA,EAAEsB,gBAAkBsB,EAAStB,mBAGpCO,EAAQY,KAAKpB,GACbuB,EAAWvB,GAWfO,EAR8B,CAC1BnC,gBAAiBA,EACjBgB,QAASmC,EACTjD,cAAeA,EACfE,mBAAoBA,EACpBK,iBAAkBA,SAK3B,CAAC2B,EAASpB,IAEN,kBAAC,EAAcqC,SAAf,CAAwBC,MAAOpB,GAASF,G,6CC5BpC,SAASuB,EAAgBxB,GAAgB,IApBrCyB,EAqBPxB,EAAuDD,EAAvDC,SAD2C,EACYD,EAA7C0B,iBADiC,MACrB,GADqB,EACjBC,EAA6B3B,EAA7B2B,gBAAoBC,EADH,YACY5B,EADZ,4CAE7C6B,GAtBSJ,EAsBWE,EArB1BG,aAAW,WAAO,IACNC,EAAsBN,EAAtBM,SAAaH,EADR,YACiBH,EADjB,cAGb,OAAOO,YAAa,CAChBC,KAAK,aACDC,gBAAgB,OAAD,OAASH,EAAT,MACZH,WAiBf,OACI,uCAAKF,UAAS,UAAKA,EAAL,YAAkBG,EAAQI,OAAYL,GAC/C3B,G,sBCxBE,SAASkC,EAAoBnC,GACxC,OACI,kBAACwB,EAAD,eACIG,gBAAiB,CACbI,SAAUK,IACVC,eAAgB,UAEhBrC,I,sBCRVsC,EAAYR,aAAW,kBACzBE,YAAa,CACTC,KAAM,CACFM,QAAS,OACTC,eAAgB,SAChBC,WAAY,SACZC,QAAS,QAKN,SAASC,IACpB,IAAMd,EAAUS,IAEhB,OACI,kBAACH,EAAD,CAAqBT,UAAWG,EAAQI,MACpC,yBAAKvC,IAAKkD,IAAUC,IAAI,YAAYC,MAAO,CAAEC,MAAO,QChBhE,IAAMT,EAAYR,aAAW,SAACkB,GAAD,OACzBhB,YAAa,CACTC,KAAM,CACFM,QAAS,OACTU,KAAM,WACNC,cAAe,SACfC,UAAW,QACXC,gBAAiBJ,EAAMK,QAAQC,WAAWC,QAC1CC,MAAOR,EAAMK,QAAQI,OAAOC,OAEhCC,QAAS,CACLV,KAAM,WACNV,QAAS,OACTqB,SAAU,iBASP,SAASC,EAAa7D,GACjC,IAAM6B,EAAUS,IACRrC,EAAyCD,EAAzCC,SAAU6D,EAA+B9D,EAA/B8D,OAAQpC,EAAuB1B,EAAvB0B,UAAcE,EAFoB,YAEX5B,EAFW,mCAI5D,OACI,wCAAM0B,UAAWqC,YAAKrC,EAAWG,EAAQI,OAAWL,GAChD,kBAACe,EAAD,MACA,yBAAKjB,UAAWG,EAAQ8B,SAAU1D,GACjC6D,G,YCnCPE,EAAqB,UAAMC,GAAN,WACrBC,EAAa,UAAMF,EAAN,UAyBJG,EAvBQ,CACnBC,MAAO,CACHC,GAAG,GAAD,OAAKH,EAAL,WACFI,GAAG,GAAD,OAAKJ,EAAL,WACFK,GAAG,GAAD,OAAKL,EAAL,WACFM,GAAG,GAAD,OAAKN,EAAL,WACFO,GAAG,GAAD,OAAKP,EAAL,WACFQ,GAAG,GAAD,OAAKR,EAAL,WACFS,GAAG,GAAD,OAAKT,EAAL,WACFU,GAAG,GAAD,OAAKV,EAAL,WACFW,GAAG,GAAD,OAAKX,EAAL,WACFY,GAAG,GAAD,OAAKZ,EAAL,WACFa,GAAG,GAAD,OAAKb,EAAL,WACFc,GAAG,GAAD,OAAKd,EAAL,WACFe,GAAG,GAAD,OAAKf,EAAL,WACFgB,GAAG,GAAD,OAAKhB,EAAL,WACFiB,GAAG,GAAD,OAAKjB,EAAL,WACFkB,GAAG,GAAD,OAAKlB,EAAL,WACFmB,GAAG,GAAD,OAAKnB,EAAL,WACFoB,MAAM,GAAD,OAAKpB,EAAL,gB,2BCdP5B,EAAYR,aAAW,SAACkB,GAC1B,IAAMuC,EAAgBvC,EAAMK,QAAQI,OAAOC,MAE3C,OAAO1B,YAAa,CAChBC,KAAM,CACFuD,SAAU,IACVhC,MAAO,QACP,oBAAqB,CACjBd,QAASM,EAAMyC,QAAQ,IAE3B,uBAAwB,CACpBjC,MAAO,WAEX,uBAAwB,CACpBA,MAAO,WAEX,2BAA4B,CACxBkC,aAAc,GAElB,0BAA2B,CACvBnD,QAAS,OACTE,WAAY,UAEhB,0BAA2B,CACvB+C,SAAU,QACVG,YAAa3C,EAAMyC,QAAQ,KAGnCG,QAAS,CACL,uBAAwB,CACpBpC,MAAO+B,GAEX,uBAAwB,CACpB/B,MAAO+B,GAEX,oBAAqB,CACjB/B,MAAO+B,GAEX,qCAAsC,CAClCM,YAAaN,GAEjB,iEAAkE,CAC9DM,YAAa7C,EAAMK,QAAQyC,KAAK,MAEpC,uEAAwE,CACpED,YAAa7C,EAAMK,QAAQyC,KAAK,YAejC,SAASC,EAAa/F,GAAgB,IACzCC,EAAsDD,EAAtDC,SAAU+F,EAA4ChG,EAA5CgG,MAD8B,EACchG,EAArCiG,eADuB,MACb,UADa,EACFC,EAAgBlG,EAAhBkG,YACxCrE,EAAUS,IAEhB,OACI,kBAAC6D,EAAA,EAAD,CAAaF,QAAQ,WAAWvE,UAAWG,EAAQI,MAC/C,kBAACmE,EAAA,EAAD,KAAaJ,GACb,kBAACK,EAAA,EAAD,eAAQ3E,UAAWqC,YAAKlC,EAAQoE,KAAeC,GAC1CjG,I,+BCjEF,SAASqG,EAAiBtG,GACrC,IAAIK,EAAUC,cACRH,EAASoG,qBAAW/I,GAMpBgJ,EAAa,SAACvH,GAEhB,IAAIwH,EAAUtC,EAAeC,MAAMnF,GAGnC,MAFuB,qBAAZwH,IAAyBA,EAAUtC,EAAeC,MAAMkB,OAE5DmB,GAGX,GAAsB,qBAAXtG,EAAwB,OAAO,KAhBU,IAkB5C9B,EAAgC8B,EAAhC9B,mBAAoBY,EAAYkB,EAAZlB,QAE5B,OACI,6BACI,kBAAC8G,EAAD,CACIG,YAAa,CACT3E,MAAOtC,EACPyH,SAAU,SACNC,GADM,OArBG,SAAC1H,GAC1BoB,EAAQY,KAAKhC,GAyBI2H,CAAqBD,EAAME,OAAOtF,UAG1ClD,EAAmBE,KAAI,SAACC,GACrB,OACI,kBAACsI,EAAA,EAAD,CAAUvF,MAAO/C,EAAGuI,IAAKvI,GACrB,kBAACwI,EAAA,EAAD,KACI,yBAAKtH,IAAK8G,EAAWhI,GAAIqE,IAAKrE,KAElC,kBAACyI,EAAA,EAAD,CAAcrB,QAASpH,EAAE0I,qBAMzC,yBAAKpE,MAAO,CAAEP,QAAS,SAElBlE,EAAmBE,KAAI,SAACC,GACrB,OAAO,yBAAKkB,IAAK8G,EAAWhI,GAAIqE,IAAKrE,S,aCtD1C,SAAS2I,EAAYnH,GAA2B,IACnDC,EAAsBD,EAAtBC,SAAa2B,EADqC,YAC5B5B,EAD4B,cAE1D,OAAO,kBAACoH,EAAA,EAASxF,EAAO3B,GCFb,SAASoH,EAAWrH,GAAgB,IACvCC,EAA4BD,EAA5BC,SAAUT,EAAkBQ,EAAlBR,KAASoC,EADmB,YACV5B,EADU,qBAE9C,OACI,kBAACmH,EAAD,eAAaN,OAAO,SAASS,IAAI,aAAa9H,KAAMA,GAAUoC,GACzD3B,G,gCCJAsH,GAEC,QAFDA,GAIO,cAcdvE,GAAewE,aAAe,CAChCnE,QAAS,CACLuC,QAAS,CACL6B,KAAM,WAEVC,UAAW,CACPD,KAAM,WAEVhE,OAAQ,CACJC,MA9BE,UA+BFiE,MA9BE,WAgCNrE,WAAY,CACRC,QAAS,YAGjBqE,WAAY,CACRC,WArBK,gBAyBAC,GACY,KAGV9E,MCxCTV,GAAYR,aAAW,SAACkB,GAC1B,OAAOhB,YAAa,CAChBC,KAAM,CACF,UAAW,CACP8F,QDIY,UCIb,SAASC,GAAOhI,GAC3B,IAAM6B,EAAUS,KACVnC,EAASoG,qBAAW/I,GAE1B,GAAsB,qBAAX2C,EAAwB,OAAO,KAJA,IAOpC8H,EASV,SAA6BrJ,EAAoBK,GAG7C,IAFA,IAAIiJ,OAAwCxK,EAEnCyK,EAAQ,EAAGA,EAAQvJ,EAAQ6B,OAAQ0H,IAAS,CACjD,IAAMF,EAASrJ,EAAQuJ,GAKvB,GAFqD,qBAD5BF,EAAOjJ,UAAUqC,MAAK,SAAC7C,GAAD,OAAOA,EAAEW,OAASF,KAGzC,CACpBiJ,EAAmBD,EACnB,OAIR,IAAMG,EAAyB,CAC3BpJ,UAAW,GACXI,OAAQiJ,IACR9I,YAAa,YACbC,KAAM,wBACNN,KAAM,QAGV,MAAmC,qBAArBgJ,EAAmCE,EAAgBF,EAhClDI,CADuBnI,EAA9BzB,iBAA8ByB,EAAZlB,SAG1B,OACI,kBAACoI,EAAD,CAAY7H,KAAMyI,EAAOzI,KAAMkC,UAAWG,EAAQI,MAC9C,yBAAKvC,IAAKuI,EAAO7I,OAAQyD,IAAKoF,EAAO1I,e,uBCvBlC,SAASgJ,KACpB,IAAMvF,EAAQwF,eAGRC,EADe,EACfA,EADe,EACfA,EAGE,EAHFA,EAIE,EAJFA,EAKE,EAGFC,EAAKC,aAAc3F,EAAM4F,YAAYC,KAAK,OAC1CC,EAAKH,aAAc3F,EAAM4F,YAAYC,KAAK,OAC1CE,EAAKJ,aAAc3F,EAAM4F,YAAYC,KAAK,OAC1CG,EAAKL,aAAc3F,EAAM4F,YAAYC,KAAK,OAC1CI,EAAKN,aAAc3F,EAAM4F,YAAYC,KAAK,OAEhD,OAAIH,EAAWD,EACXK,EAAWL,EACXM,EAAWN,EACXO,EAAWP,EACXQ,EAAWR,EAnBM,ECCV,SAASS,KAIpB,OAbc,SAACC,GAAD,OACdrH,aAAW,SAACkB,GACR,OAAOhB,YAAa,CAChBoH,kBAAmB,CACf1G,QAASM,EAAMyC,QAAQ0D,SAOnB7G,CADIiG,KACJjG,GAED8G,kBCVnB,IAAM9G,GAAYR,aAAW,SAACkB,GAC1B,OAAOhB,YAAa,CAChBqH,eAAgB,CACZpG,KAAM,EACNV,QAAS,OACTC,eAAgB,UAEpB8G,kBAAmB,CACfrG,KAAM,EACNV,QAAS,OACTW,cAAe,SACfqG,SAAUzB,SAUP,SAAS0B,GAAYxJ,GAAgB,IACxCC,EAAoDD,EAApDC,SAAUyB,EAA0C1B,EAA1C0B,UAD6B,EACa1B,EAA/ByJ,iBADkB,SACI7H,EADJ,YACa5B,EADb,sCAEzC6B,EAAUS,KACVoH,EAA6BR,KAEnC,OACI,uCAAKxH,UAAWqC,YAAKrC,EAAWG,EAAQwH,iBAAqBzH,GACzD,yBACIF,UAAWqC,YAAKlC,EAAQyH,kBAAT,eACVI,GAA8BD,KAGlCxJ,I,cChCF,SAAS0J,GAAO3J,GAC3B,IAAMgD,EAAQwF,eAD4B,EAErBxI,EAAb4J,YAFkC,MAE3B,EAF2B,EAIpCC,EAAY7G,EAAMyC,QAAQmE,GAEhC,OAAO,yBAAK9G,MAAO,CAAEgH,OAAQD,EAAW9G,MAAO8G,EAAW5G,KAAM,cCbpE,IAce8G,GAdD,CACVC,MAAO,CACHC,mBAAoB,uCACpBC,cAAe,gDACfC,UAAW,2CAEfC,YAAa,CACTC,QAAS,+BACTC,SAAU,oCACVC,QAAS,mCACTC,UAAW,wCCFblI,GAAYR,aAAW,SAACkB,GAAD,OACzBhB,YAAa,CACTC,KAAK,aACDM,QAAS,QACRS,EAAM4F,YAAY6B,KAAK,MAAQ,CAAEvH,cAAe,SAAUT,WAAY,WAE3EiI,QAAS,CACL,UAAW,CACPC,eAAgB,mBAWjB,SAASC,KACpB,IAAM/I,EAAUS,KACVU,EAAQwF,eACRqC,EAAclC,aAAc3F,EAAM4F,YAAY6B,KAAK,OAEnDK,EAA2B,CAC7B,CACIrL,KAAMsK,GAAMC,MAAMC,mBAClBjE,MAAO,sBAEX,CACIvG,KAAMsK,GAAMC,MAAME,cAClBlE,MAAO,kBAEX,CACIvG,KAAMsK,GAAMC,MAAMG,UAClBnE,MAAO,eAIf,OACI,yBAAKtE,UAAWG,EAAQI,MACpB,yBAAKa,MAAO,CAAEP,QAAS,SACnB,kBAACwI,GAAA,EAAD,CAAY9E,QAAQ,SAChB,kBAACoB,EAAD,CACIvE,MAAO,CAAEU,MAAOR,EAAMK,QAAQI,OAAOC,OACrClE,KAAMsL,EAAW,GAAGrL,MAEnBqL,EAAW,GAAG9E,QAGtB6E,EACG,kBAAClB,GAAD,MAEA,0BAAM7G,MAAO,CAAEkI,OAAO,OAAD,OAAShI,EAAMyC,QAAQ,GAAvB,QAArB,KAEJ,kBAACsF,GAAA,EAAD,CAAY9E,QAAQ,SAChB,kBAACoB,EAAD,CACIvE,MAAO,CAAEU,MAAOR,EAAMK,QAAQI,OAAOC,OACrClE,KAAMsL,EAAW,GAAGrL,MAEnBqL,EAAW,GAAG9E,QAGtB6E,EACG,kBAAClB,GAAD,MAEA,0BAAM7G,MAAO,CAAEkI,OAAO,OAAD,OAAShI,EAAMyC,QAAQ,GAAvB,QAArB,KAEJ,kBAACsF,GAAA,EAAD,CAAY9E,QAAQ,SAChB,kBAACoB,EAAD,CACIvE,MAAO,CAAEU,MAAOR,EAAMK,QAAQI,OAAOC,OACrClE,KAAMsL,EAAW,GAAGrL,MAEnBqL,EAAW,GAAG9E,QAGtB6E,EACG,kBAAClB,GAAD,MAEA,0BAAM7G,MAAO,CAAEkI,OAAO,OAAD,OAAShI,EAAMyC,QAAQ,GAAvB,QAArB,KAEJ,kBAACsF,GAAA,EAAD,CAAYrJ,UAAWG,EAAQ6I,QAASzE,QAAQ,SAC5C,yBAAKnD,MAAO,CAAEU,MAAOR,EAAMK,QAAQI,OAAOC,OAAS/D,GAAG,iBChF1E,IAAM2C,GAAYR,aAAW,SAACkB,GAAD,OACzBhB,YAAa,CACTC,KAAK,aACDM,QAAS,OACTE,WAAY,SACZD,eAAgB,iBACfQ,EAAM4F,YAAY6B,KAAK,MAAQ,CAC5BvH,cAAe,WAGvBjF,gBAAiB,CACbuH,SAAU,IACV,QAAS,CACLzC,MAAO,QAEX,UAAW,CACP,QAAS,CACLgF,QAAS,MAIrB5J,cAAe,CACXoE,QAAS,OACTW,cAAe,SACfT,WAAY,SACZwI,UAAW,SACXvI,QAAQ,OAAD,OAASM,EAAMyC,QAAQ,GAAvB,OAEXyF,aAAa,aACT3I,QAAS,OACTE,WAAY,UACXO,EAAM4F,YAAY6B,KAAK,MAAQ,CAC5BvH,cAAe,SACfiI,WAAYnI,EAAMyC,QAAQ,UAM3B,SAAS2F,KACpB,IAAMvJ,EAAUS,KACVnC,EAASoG,qBAAW/I,GAE1B,GAAsB,qBAAX2C,EAAwB,OAAO,KAJH,IAM/BlC,EAAmCkC,EAAnClC,gBAAiBE,EAAkBgC,EAAlBhC,cAEzB,OACI,kBAACqL,GAAD,KACI,yBAAK9H,UAAWG,EAAQI,MACpB,kBAACoF,EAAD,CAAY7H,KAAK,+BAA+BkC,UAAWG,EAAQ5D,iBAC/D,yBAAKyB,IAAKzB,EAAgByB,IAAKmD,IAAI,qBAEvC,yBAAKnB,UAAWG,EAAQ1D,eACpB,kBAAC4M,GAAA,EAAD,CACI9E,QAAQ,QACRoF,wBAAyB,CAAEC,OAAQnN,KAEvC,kBAACyM,GAAD,OAEJ,yBAAKlJ,UAAWG,EAAQqJ,cACpB,kBAAC5E,EAAD,MACA,kBAAC0B,GAAD,SCnEpB,IAAM1F,GAAYR,aAAW,SAACkB,GAC1B,OAAOhB,YAAa,CAChBC,KAAM,CAAEmB,gBAAiB,gBAIlB,SAASmI,KACpB,IAAM1J,EAAUS,KAEhB,OACI,yBAAKZ,UAAWG,EAAQI,MAEpB,kBAACmJ,GAAD,MACA,yBACIzL,GAAG,mBACHmD,MAAO,CACHc,SAAU,QACV4H,OAAQ,EACRC,OAAQ,IACR1I,MAAO,QAEXrB,UAAU,sBCpBX,SAASgK,GAAW1L,GAC/B,OAAO,kBAAC6D,EAAD,eAAcC,OAAQ,kBAACyH,GAAD,OAAgBvL,I,8CC+BlC,WAA+Bf,GAA/B,mBAAAtB,EAAA,sEACYC,IAAMC,IAAN,iCAAoCoB,IADhD,cACLnB,EADK,OAGHC,EAASD,EAATC,KAEF4N,EAA8B,CAChCC,SAAUC,GAAwB9N,GAClC+N,MAAOC,GAAqBhO,IAPrB,kBAUJ4N,GAVI,4C,sBAaf,SAASE,GAAwB9N,GAC7B,MAAO,CACHiO,SAAUjO,EAAKkO,iBACfC,MAAOnO,EAAKoO,cACZ5M,YAAaxB,EAAKqO,qBAI1B,SAASL,GAAqBhO,GAC1B,OAAOA,EAAK+N,MAAMvN,KAAI,SAAC8N,GAAD,MAIf,CACHnN,MAFqBoN,EAHgCD,GAKlCzM,OAAOV,KAC1BqN,OAAQC,GAA0BF,GAClC/M,YAAa+M,EAAa/M,YAC1BkN,OAAQC,GAA0BJ,EAAaG,OAAO,GAAG,KALjE,IAA6BH,KAS7B,SAASI,GAA0BC,GAAuC,IAC9DC,EAA4BD,EAA5BC,KAAMnN,EAAsBkN,EAAtBlN,KAAMoN,EAAgBF,EAAhBE,YACpB,MAAO,CACHD,KAAMA,EACNpN,KAAMC,EACNoN,YAAoC,IAAvBA,EAAYpM,YAAe/C,EAAYmP,GAI5D,SAASL,GAA0BF,GAO/B,MAN4B,CACxBQ,QAASC,GAAyBT,EAAaU,aAAa,GAAG,IAC/DC,OAAQF,GAAyBT,EAAaY,YAAY,GAAG,IAC7DC,OAAQJ,GAAyBT,EAAac,YAAY,GAAG,KAMrE,SAASL,GAAyBM,GAC9B,IAAMhO,EAAQgO,EAAchO,MAAM,GAElC,MAAO,CACHK,IAAKL,EAAMC,IACXC,YAAaF,EAAME,YACnB+N,iBAAkBD,EAAcC,kB,uBCzFzB,SAASC,GAAiBvN,GACrC,IAAMgD,EAAQwF,eADsC,EAEzBxI,EAAnBwN,kBAF4C,MAE/B,EAF+B,EAI9C5D,EAAOrB,KACPsB,EAAY7G,EAAMyC,QAAQmE,EAAO4D,GAEvC,OAAO,yBAAK1K,MAAO,CAAEgH,OAAQD,EAAW9G,MAAO8G,EAAW5G,KAAM,c,cCRpE,SAASwK,GAAUC,GACf,MAAM,aAAN,OAAoBA,GAOxB,IA4CMpL,GAAY,SAACqL,EAAsBC,EAAoBC,GAA3C,OACd/L,aAAW,SAACkB,GACR,IAAM8K,EA9CU,SAAC9K,EAAc6K,GACnC,MAAO,CACHjI,QAAS,CACLrC,QAAS,CACLH,gBAAiBJ,EAAMK,QAAQuC,QAAQ6B,KACvCjE,MAAOR,EAAMK,QAAQuC,QAAQmI,cAEjCJ,YACiC,qBAAtBE,EACDA,EACA,CACIzK,gBAAiBJ,EAAMK,QAAQuC,QAAQoI,KACvCxK,MAAOR,EAAMK,QAAQuC,QAAQmI,eAG/CrG,UAAW,CACPnE,QAAS,CACL0K,OAAQR,GAAUzK,EAAMK,QAAQI,OAAOC,OACvCF,MAAOR,EAAMK,QAAQI,OAAOC,OAEhCiK,YACiC,qBAAtBE,EACDA,EACA,CACIzK,gBAAiBJ,EAAMK,QAAQqE,UAAUD,KACzCjE,MAAOR,EAAMK,QAAQqE,UAAUqG,eAGjDG,YAAa,CACT3K,QAAS,CACL0K,OAAQR,GAAUzK,EAAMK,QAAQI,OAAOC,OACvCF,MAAOR,EAAMK,QAAQI,OAAOC,OAEhCiK,YACiC,qBAAtBE,EACDA,EACA,CACIzK,gBAAiBJ,EAAMK,QAAQI,OAAOC,MACtCF,MAAOR,EAAMK,QAAQI,OAAOkE,SAQzBwG,CAAgBnL,EAAO6K,GAEtCO,EAAeT,EACfG,EAAalI,QAAQ+H,YACrBG,EAAalI,QAAQrC,QAErB8K,EAAiBV,EACjBG,EAAapG,UAAUiG,YACvBG,EAAapG,UAAUnE,QAEvB+K,EAAmBX,EACnBG,EAAaI,YAAYP,YACzBG,EAAaI,YAAY3K,QAE/B,OAAOvB,YAAa,CAChBC,KAAM,CACFsM,UAAW,OACXC,cAAeZ,EAAY,YAAc,OACzCrG,WAAW,OAAD,OAASA,GAAT,YAAgCA,IAC1C7B,aAAc,EACduI,OAAQR,GAAU,eAClBgB,WAAY,SACZC,WAAY,EACZhM,QAAQ,GAAD,OAAKM,EAAMyC,QAAQ,IAAnB,cAA6BzC,EAAMyC,QAAQ,GAA3C,MACPkJ,SAAU,OACVC,WAAY,KAEhBC,UAAW,CACPnM,QAASM,EAAMyC,QAAQ,IACvBkJ,SAAU,QAEdG,UAAW,CACPpM,QAASM,EAAMyC,QAAQ,GACvBkJ,SAAU,UAEd/I,QAAQ,2BACDwI,GADA,IAEH,UAAWN,EAAalI,QAAQ+H,cAEpCjG,UAAU,2BACH2G,GADE,IAEL,UAAWP,EAAapG,UAAUiG,cAEtCO,YAAY,2BACLI,GADI,IAEP,UAAWR,EAAaI,YAAYP,oBAerC,SAASoB,GAAa/O,GAA4B,IAEzDC,EAOAD,EAPAC,SAFwD,EASxDD,EANA0B,iBAHwD,MAG5C,GAH4C,IASxD1B,EALAiG,eAJwD,MAI9C,UAJ8C,IASxDjG,EAJA2N,mBALwD,SAMxDE,EAGA7N,EAHA6N,kBANwD,EASxD7N,EAFA4N,iBAPwD,SAQrDhM,EARqD,YASxD5B,EATwD,kFAUtD6B,EAAUS,GAAUqL,EAAaC,EAAWC,EAAlCvL,GAEhB,OACI,kBAAC0M,GAAA,EAAD,eACItN,UAAWqC,YAAKlC,EAAQI,KAAMP,EAAWG,EAAQoE,IACjDpE,QAAS,CAAEgN,UAAWhN,EAAQgN,UAAWC,UAAWjN,EAAQiN,YACxDlN,GAEH3B,GCtIE,SAASgP,GAAYjP,GAAgB,IACxCC,EAA4BD,EAA5BC,SAAUT,EAAkBQ,EAAlBR,KAASoC,EADoB,YACX5B,EADW,qBAE/C,OACI,kBAACmH,EAAD,eAAa3H,KAAMA,GAAUoC,GACxB3B,GCAE,SAASiP,GAAkBlP,GAAgB,IAC9CC,EAA4BD,EAA5BC,SAAUT,EAAkBQ,EAAlBR,KAASoC,EAD0B,YACjB5B,EADiB,qBAGrD,OACI,kBAAC+O,GAAD,eAEII,UAAWF,GACXzP,KAAMA,EACN4P,UAAU,QACNxN,GAEH3B,G,yBCXPqC,GAAYR,aAAW,SAACkB,GAC1B,OAAOhB,YAAa,CAChBC,KAAM,CACFC,gBAAgB,OAAD,OAASE,KAAT,KACfC,eAAgB,QAChBqD,aAAc,GACdhD,QAASM,EAAMyC,QAAQ,IAE3ByG,MAAO,CACHjB,UAAW,SACX2D,WAAY,IACZD,SAAU,SACVD,WAAY,UAEhBnP,YAAa,CACT0L,UAAW,SACX0D,SAAU,WACVD,WAAY,eAUT,SAASW,GAAgBrP,GAAgB,IAC5CqM,EAAyBrM,EAAzBqM,KAD2C,EAClBrM,EAAnB0B,iBADqC,MACzB,GADyB,EAE7CG,EAAUS,KACVU,EAAQwF,eAENtJ,EAA8BmN,EAA9BnN,KAAMK,EAAwB8M,EAAxB9M,YAAakN,EAAWJ,EAAXI,OAEnBI,EAAgBJ,EAAhBI,YAEFgB,EACqB,qBAAhBhB,OACDnP,EACA,CAAE0F,gBAAiByJ,EAAarJ,MAAOR,EAAMK,QAAQI,OAAOC,OAEtE,OACI,yBAAKhC,UAAWqC,YAAKrC,EAAWG,EAAQI,OACpC,kBAAC8I,GAAA,EAAD,CAAY9E,QAAQ,KAAKvE,UAAWG,EAAQqK,OACvChN,GAEL,kBAACqO,GAAD,CAAkBC,WAAY,KAC9B,kBAACzC,GAAA,EAAD,CAAY9E,QAAQ,QAAQvE,UAAWG,EAAQtC,aAC1CA,GAEL,kBAACgO,GAAD,CAAkBC,WAAY,KAC9B,yBAAK1K,MAAO,CAAEP,QAAS,OAAQC,eAAgB,WAC3C,kBAAC0M,GAAD,CACI1P,KAAMiN,EAAOjN,KACbyG,QAAQ,cACR4H,kBAAmBA,EACnB/K,MAAO,CACHwM,cAAe,QAGlB7C,EAAOG,Q,yBChEtBtK,GAAYR,aAAW,SAACkB,GAQ1B,OAAOhB,YAAa,CAChBC,KAAM,CACFC,gBAAgB,OAAD,OAASqN,KAAT,KACflN,eAAgB,UAChBmN,oBAAqB,OACrBpM,gBAAiBJ,EAAMK,QAAQI,OAAOC,MACtC+L,YAbW,EAcXC,cAdW,EAeXhK,aAZkB,GAalBiK,UAXa,EAYbhK,YAZa,EAabiK,UAAW,cAEfC,MAAO,CACHtN,QAAS,OACTQ,MAAM,eAAD,OAjBQ,EAiBR,OACL2C,aArBkB,GAsBlBiK,WAnBa,EAoBbG,SAAU,SACVF,UAAW,mBAWR,SAASG,GAAa/P,GACjC,IAAM6B,EAAUS,KACRZ,EAA0D1B,EAA1D0B,UAAWzB,EAA+CD,EAA/CC,SAAmB+P,EAA4BhQ,EAArC6B,QAA4BD,EAFT,YAEkB5B,EAFlB,oCAIhD,OACI,uCAAK0B,UAAWqC,YAAKrC,EAAWG,EAAQI,KAApB,OAA0B+N,QAA1B,IAA0BA,OAA1B,EAA0BA,EAAgB/N,OAAWL,GACrE,yBAAKF,UAAWqC,YAAKlC,EAAQgO,MAAT,OAAgBG,QAAhB,IAAgBA,OAAhB,EAAgBA,EAAgBH,QAAS5P,IC8C1D,SAASgQ,GAAKjQ,GAAgB,IACjCqM,EAA0BrM,EAA1BqM,KADgC,EACNrM,EAApBkQ,eAD0B,SAGlC7Q,EC9FK,SAAsBkN,GACjC,IAAMvJ,EAAQwF,eAER2E,EAASxE,aAAc3F,EAAM4F,YAAY6B,KAAK,OAC9CwC,EAAStE,aAAc3F,EAAM4F,YAAY6B,KAAK,OAEpD,OAAI0C,EAAeZ,EAAOY,OACtBF,EAAeV,EAAOU,OAEnBV,EAAOO,QDqFAqD,CAAa9D,EAAKE,QACxBe,EAAqBjO,EAArBiO,iBAEFzL,EA3FQ,SAACyL,GAAD,OACdxL,aAAW,SAACkB,GAAkB,IAAD,IACzB,OAAOhB,YAAa,CAChBC,KAAM,CACF6H,OAAQ,QAEZ+F,MAAO,CACHtN,QAAS,OACTW,cAAe,SACf4G,OAAQ,OACR1G,gBAAiBkK,EACjB1J,SAAU,WACV,wBAAyB,CACrBmE,QAAS,IAGjBqI,aAAc,CACVxM,SAAU,WACVyM,IAAK,EACLC,KAAM,EACNvN,MAAO,OACP+G,OAAQ,OACR/B,QAAS,EACTR,WAAW,OAAD,OAASA,GAAT,YAAgCA,IAC1CnE,gBAAiBmN,aAAKvN,EAAMK,QAAQI,OAAOkE,MlBnB5B,KkBqBnBzF,gBAAiB,CACb4H,OAAQ,OACR/G,MAAO,QAEXyN,0BAA2B,CACvB1G,OAAQ,SAEZ2G,qBAAqB,aACjBnB,cAAe,OACfvM,MAAO,OACPR,QAAS,OACTC,eAAgB,SAChBE,QAASM,EAAMyC,QAAQ,GACvBmK,UAAW,cACV5M,EAAM4F,YAAY6B,KAAK,MAAQ,CAC5B/H,QAASM,EAAMyC,QAAQ,KAG/BiL,gCAAiC,CAC7BC,WAAY,UAEhBC,wCAAsC,mBACjC5N,EAAM4F,YAAY6B,KAAK,MAAQ,CAC5BkF,UAAW,WAFmB,cAIjC3M,EAAM4F,YAAY6B,KAAK,MAAQ,CAC5BkF,UAAW,WALmB,GAQtCkB,wCAAsC,GAClClB,UAAW,UADuB,cAEjC3M,EAAM4F,YAAY6B,KAAK,MAAQ,CAC5BkF,UAAW,WAHmB,cAKjC3M,EAAM4F,YAAY6B,KAAK,MAAQ,CAC5BkF,UAAW,WANmB,GAStCmB,6BAA8B,CAC1BlN,SAAU,WACV4H,OAAQ,GAEZuF,uCAAuC,aACnCvF,OAAQ,MACPxI,EAAM4F,YAAY6B,KAAK,MAAQ,CAC5Be,OAAQ,MAGhBwF,iBAAkB,CACdzH,SAAU,UAgBNjH,CAAUgL,EAAVhL,GACV2O,EAAyC,qBAArB3D,GAAoCA,EAAiB7M,OAAS,EAExF,OACI,kBAACsP,GAAD,CAAcrO,UAAWG,EAAQI,KAAMJ,QAAS,CAAEgO,MAAOhO,EAAQgO,QAC7D,kBAACZ,GAAD,CACIzP,KAAM6M,EAAKI,OAAOjN,KAClBkC,UAAWG,EAAQuO,aACnBhB,UAAU,SAGd,yBACI1P,IAAKL,EAAMK,IACXmD,IAAKxD,EAAME,YACXmC,UAAWqC,YAAKlC,EAAQK,gBAAT,eACVL,EAAQ2O,0BAA4BS,MAG7C,yBACIvP,UAAWqC,YACPlC,EAAQ4O,qBACR5O,EAAQiP,6BAFG,eAINjP,EAAQkP,uCAAyCE,KAI1D,kBAAC5B,GAAD,CAAiB3N,UAAWG,EAAQmP,iBAAkB3E,KAAMA,KAE/D4E,EACG,yBACIvP,UAAWqC,YACPlC,EAAQ4O,qBACR5O,EAAQ6O,gCACRR,EACMrO,EAAQ+O,uCACR/O,EAAQgP,yCAGlB,kBAACxB,GAAD,CAAiB3N,UAAWG,EAAQmP,iBAAkB3E,KAAMA,KAEhE,MEnED,SAAS6E,GAAWlR,GAA0B,IAErDmR,EAUAnR,EAVAmR,UAFoD,EAYpDnR,EATAoR,cAHoD,MAG3C,IAH2C,IAYpDpR,EARAqR,aAJoD,MAI5C,EAJ4C,IAYpDrR,EAPAsR,gBALoD,MAKzC,IALyC,IAYpDtR,EANAuR,sBANoD,MAMnC,OANmC,IAYpDvR,EALAwR,cAPoD,WAYpDxR,EAJAyR,YARoD,WAYpDzR,EAHA0R,uBAToD,MASlC,aATkC,EAUpDzR,EAEAD,EAFAC,SACG2B,EAXiD,YAYpD5B,EAZoD,yGAcxD,OACI,uCACI2R,WAAUR,EACVS,kBAAiBR,EACjBS,iBAAgBR,EAChBS,oBAAmBR,EACnBS,kBAAiBR,EACjBS,kBAAiBR,EACjBS,gBAAeR,EACfS,4BAA2BR,GACvB9P,GAEH3B,G,4CCrGQkS,G,oDACjB,WAAYC,EAAsBC,GAAwB,IAAD,+BACrD,wBACOD,EADP,yCACoDA,EADpD,+CACuGC,EADvG,OAGKnT,KAAO,EAAKoT,YAAYpT,KAJwB,E,uBADhBqT,QCAxBC,G,oDACjB,WAAYC,EAAkBC,GAAuB,IAAD,+BAChD,iCAAkBD,EAAlB,8CAAgEC,KAC3DxT,KAAO,EAAKoT,YAAYpT,KAFmB,E,uBADJqT,QCOrC,SAASI,GAAW3S,GAC/B,ICRwC4S,EDUxC,OAAO,kBAAC1B,GAAD,eAAYC,WCVqByB,EDQJ,CAAC,UAAW,YAAa,YAAa,cCLnEA,EAFaC,KAAKC,MAAMD,KAAKE,SAAWH,EAAMnS,WDSWT,IEDrD,SAASgT,GAAoBhT,GAAgB,IAChDiT,EAAwCjT,EAAxCiT,MAAOhT,EAAiCD,EAAjCC,SAAUyB,EAAuB1B,EAAvB0B,UAAcE,EADgB,YACP5B,EADO,kCAEjDqR,EAAQ,IAAM4B,EAIpB,OACI,kBAACN,GAAD,eAAYtB,MAAOA,EAAOC,SAJb,IAIiCG,MAHrC,EAGiD/P,UAAWA,GAAeE,GAChF,kBAACsP,GAAD,CACIC,UAAU,UACVE,MAAOA,EACPC,SARK,IASLG,MARC,EASD/P,UAAWA,GAEVzB,I,6GCVXqC,GAAYR,aAAW,SAACkB,GAAkB,IAAD,EAC3C,OAAOhB,YAAa,CAChBC,KAAM,GACN4N,OAAK,GACD3N,gBAAgB,OAAD,OAASE,KAAT,KACf8Q,mBAAoB,SACpB7Q,eAAgB,QAChBE,QAAS,OACTC,eAAgB,iBALf,cAMAQ,EAAM4F,YAAY6B,KAAK,MAAQ,CAC5BjI,eAAgB,WAPnB,yBASS,YATT,cAUD,wBAAyB,CACrBuF,QAAS,IAXZ,GAcLqI,aAAc,CACVxM,SAAU,WACVyM,IAAK,EACLC,KAAM,EACNvN,MAAO,OACP+G,OAAQ,OACR2B,OAAQ,EACR1D,QAAS,EACTR,WAAW,OAAD,OAASA,GAAT,YAAgCA,IAC1ChF,QAAS,OACTE,WAAY,SACZD,eAAgB,SAChBY,gBAAiBmN,aAAKvN,EAAMK,QAAQI,OAAOkE,M1B5BxB,K0B8BvBwL,oBAAoB,aAChBlQ,KAAM,EACNW,SAAU,YACTZ,EAAM4F,YAAY6B,KAAK,MAAQ,CAC5BlI,QAAS,SAGjB6Q,eAAgB,CACZxP,SAAU,WACVyM,IAAK,EACLC,KAAM,EACNvN,MAAO,OACP+G,OAAQ,OACRvH,QAAS,OACTE,WAAY,SACZ,QAAS,CACLM,MAAO,OACPwG,SAAU,MAGlB8J,mBAAoB,CAChB7Q,eAAgB,cAEpB8Q,oBAAqB,CACjB9Q,eAAgB,YAEpB+Q,YAAa,CACTtQ,KAAM,EACN+H,OAAQhI,EAAMyC,QAAQ,GACtB8D,SAAU,KAEdiK,eAAgB,CACZjR,QAAS,OACTC,eAAgB,SAChBC,WAAY,UAEhBgR,WAAY,CACR1Q,MAAO,OACPwG,SAAU,KAEdmK,gBAAiB,CACbxR,gBAAgB,OAAD,OAASyR,KAAT,KACftR,eAAgB,YAChBK,QAASM,EAAMyC,QAAQ,GACvBkK,WAAY,SAOT,SAASiE,GAAqB5T,GACzC,IAAM6B,EAAUS,KACRZ,EAAiC1B,EAAjC0B,UAAwBE,GAAS5B,EAAtBC,SAFqC,YAEfD,EAFe,2BAIlD6T,EAAU,uCAEhB,OACI,kBAAC9D,GAAD,eACIrO,UAAWqC,YAAKrC,EAAWG,EAAQI,MACnCJ,QAAS,CAAEgO,MAAOhO,EAAQgO,QACtBjO,GAEJ,kBAACqN,GAAD,CAAazP,KAAMqU,EAASnS,UAAWG,EAAQuO,aAAchB,UAAU,QACnE,kBAACF,GAAD,CAAmB1P,KAAMqU,EAAS5N,QAAQ,eAA1C,eAKJ,yBAAKvE,UAAWG,EAAQsR,qBACpB,yBAAKzR,UAAWqC,YAAKlC,EAAQuR,eAAgBvR,EAAQwR,qBACjD,yBAAK3T,IAAKoU,SAIlB,yBAAKpS,UAAWG,EAAQ0R,aACpB,yBAAK7R,UAAWG,EAAQ2R,gBACpB,yBAAK9R,UAAWG,EAAQ4R,WAAY/T,IAAKqU,QAE7C,yBAAKrS,UAAWG,EAAQ6R,iBACpB,kBAAC3I,GAAA,EAAD,CAAYjI,MAAO,CAAE8L,WAAY,SAAjC,0HAOR,yBAAKlN,UAAWG,EAAQsR,qBACpB,yBAAKzR,UAAWqC,YAAKlC,EAAQuR,eAAgBvR,EAAQyR,sBACjD,yBAAK5T,IAAKsU,UC9H9B,IAAM1R,GAAYR,aAAW,SAACkB,GAC1B,OAAOhB,YAAa,CAChBiS,iBAAiB,aACb1R,QAAS,QACRS,EAAM4F,YAAY6B,KAAK,MAAQ,CAC5BvH,cAAe,WAGvBgR,aAAa,aACTpK,OAAQ,QACP9G,EAAM4F,YAAY6B,KAAK,MAAQ,CAC5BX,OAAQ,eAUT,SAASqK,GAAMnU,GAC1B,IAAM6B,EAAUS,KACRwJ,EAAU9L,EAAV8L,MAEJsI,EAAM,aAAOtI,GAEXuI,EAAcD,EAAOE,QAE3B,OACI,oCAC4B,qBAAhBD,EAA8B,KAClC,kBAACrB,GAAD,CAAqBC,MAAO,EAAGvR,UAAWG,EAAQqS,cAC9C,kBAACjE,GAAD,CAAM5D,KAAMgI,EAAanE,SAAO,KAGxC,kBAAC3C,GAAD,MAEA,kBAACyF,GAAD,CAAqBC,MAAO,EAAGvR,UAAWG,EAAQqS,cAC9C,kBAACN,GAAD,OAGJ,kBAACrG,GAAD,MAEA,yBAAK7L,UAAWG,EAAQoS,kBACnBG,EAAO7V,KAAI,SAAC8N,EAAMkI,GAAP,OACR,kBAAC,IAAMC,SAAP,CAAgBzN,IAAKwN,GACjB,kBAAChH,GAAD,CAAkBC,WAAkB,IAAN+G,EAAU,EAAI,IAC5C,kBAACvB,GAAD,CAAqBC,MAAOsB,EAAI,EAAG7S,UAAWG,EAAQqS,cAClD,kBAACjE,GAAD,CAAM5D,KAAMA,W,cC7CzB,SAASoI,GAAQzU,GAAgB,IACpCf,EAAYe,EAAZf,QADmC,EAEnBiB,qBAFmB,mBAEpCnC,EAFoC,KAE9B2W,EAF8B,KAQ3C,OAJAnU,qBAAU,YjBsBC,SAAf,oCiBrBQoU,CAAgB1V,GAASkC,MAAK,SAACrD,GAAD,OAAc4W,EAAQ5W,QACrD,CAACmB,IAEmB,qBAATlB,EAAuB,KACjC,oCACI,kBAAC6W,GAAA,EAAD,KACI,+BAAQ7W,EAAK6N,SAASM,OACtB,0BAAMhN,KAAK,WAAWyE,QAAS5F,EAAK6N,SAASI,WAC7C,0BAAM9M,KAAK,QAAQyE,QAAS5F,EAAK6N,SAASM,QAC1C,0BAAMhN,KAAK,cAAcyE,QAAS5F,EAAK6N,SAASrM,eAEpD,kBAACiK,GAAD,KACI,kBAAC2K,GAAD,CAAOrI,MAAO/N,EAAK+N,U,cCvB7BxJ,GAAYR,aAAW,SAACkB,GAAD,OACzBhB,YAAa,CACTC,KAAM,CACFkB,UAAW,IACXZ,QAAS,OACTC,eAAgB,SAChBC,WAAY,UAEhBoS,OAAQ,CACJrR,MAAOR,EAAMK,QAAQI,OAAOC,YAKzB,SAASoR,KACpB,IAAMjT,EAAUS,KACVnC,EAASoG,qBAAW/I,GAE1B,OACI,yBAAKkE,UAAWG,EAAQI,MACD,qBAAX9B,EACJ,yBAAKuB,UAAWG,EAAQgT,QACpB,kBAACE,GAAA,EAAD,CAAkBvR,MAAM,UAAUoG,KAAM,MAG5C,kBAAC6K,GAAD,CAASxV,QAASkB,EAAOlB,W,yBCzB1B,SAAS+V,GAAqBhV,GACzC,OACI,kBAACwB,EAAD,eACIG,gBAAiB,CACbI,SAAUK,KACVC,eAAgB,OAChB4S,iBAAkB,YAClBhS,KAAM,IAENjD,I,wBCZD,SAASkV,GAAYlV,GAChC,OACI,kBAACmV,GAAA,EAAYnV,EACT,0BAAMoV,EAAE,+nBCHL,SAASF,GAAYlV,GAChC,OACI,kBAACmV,GAAA,EAAYnV,EACT,0BAAMoV,EAAE,kVCHL,SAASC,GAAcrV,GAClC,OACI,kBAACmV,GAAA,EAAYnV,EACT,0BAAMoV,EAAE,6jDACR,0BAAMA,EAAE,mMACR,4BAAQE,GAAG,SAASC,GAAG,QAAQ1W,EAAE,UCL9B,SAAS2W,GAAYxV,GAChC,OACI,kBAACmV,GAAA,EAAYnV,EACT,0BAAMoV,EAAE,0aCQpB,IAAMK,GACO,UADPA,GAEQ,UAFRA,GAGO,OAHPA,GAIS,UAGTnT,GAAYR,aAAW,SAACkB,GAAD,OACzBhB,YAAa,CACTC,KAAM,CACFM,QAAS,QAEbmT,KAAM,CACFlS,MAAOR,EAAMK,QAAQI,OAAOC,MAC5B6D,WAAW,OAAD,OAASA,GAAT,YAAgCA,KAE9C8C,QAAS,CACL,UAAW,CACP7G,MAAOiS,GACPrS,gBAAiBJ,EAAMK,QAAQI,OAAOC,QAG9C4G,SAAU,CACN,UAAW,CACP9G,MAAOiS,GACPrS,gBAAiBJ,EAAMK,QAAQI,OAAOC,QAG9C6G,QAAS,CACL,UAAW,CACP/G,MAAOiS,GACPrS,gBAAiBJ,EAAMK,QAAQI,OAAOC,QAG9C8G,UAAW,CACP,UAAW,CACPhH,MAAOiS,GACPrS,gBAAiBJ,EAAMK,QAAQI,OAAOC,aAYvC,SAASiS,KACpB,IAAM9T,EAAUS,KAEVsT,EAAyB,CAC3B,CACIF,KAAM,kBAACR,GAAD,MACNzV,KAAMsK,GAAMK,YAAYC,QACxB3I,UAAWG,EAAQwI,SAEvB,CACIqL,KAAM,kBAAC,GAAD,MACNjW,KAAMsK,GAAMK,YAAYE,SACxB5I,UAAWG,EAAQyI,UAEvB,CACIoL,KAAM,kBAACF,GAAD,MACN/V,KAAMsK,GAAMK,YAAYG,QACxB7I,UAAWG,EAAQ0I,SAEvB,CACImL,KAAM,kBAACL,GAAD,MACN5V,KAAMsK,GAAMK,YAAYI,UACxB9I,UAAWG,EAAQ2I,YAI3B,OACI,yBAAK9I,UAAWG,EAAQI,MACnB2T,EAAUrX,KAAI,SAACsX,EAAqBtB,GAAO,IAChC9U,EAA+BoW,EAA/BpW,KAAMiW,EAAyBG,EAAzBH,KADyB,EACAG,EAAnBnU,iBADmB,MACP,GADO,EAEvC,OACI,kBAAC2F,EAAD,CAAYN,IAAKwN,EAAG/U,KAAMC,GACtB,kBAACqW,GAAA,EAAD,CAAYtS,MAAM,UAAU9B,UAAWqC,YAAKlC,EAAQ6T,KAAMhU,IACrDgU,Q,cCzFvBpT,GAAYR,aAAW,SAACkB,GAC1B,OAAOhB,YAAa,CAChBC,KAAM,CAAEM,QAAS,QACjBwT,OAAQ,CACJhT,MAAOC,EAAMyC,QAAQ,GACrBqE,OAAQ9G,EAAMyC,QAAQ,SASnB,SAASuQ,GAAWhW,GAC/B,IAAM6B,EAAUS,KACR2T,EAASjW,EAATiW,KAER,OACI,yBAAKvU,UAAWG,EAAQI,MACpB,kBAACiU,GAAA,EAAD,CAAQrT,IAAKoT,EAAKE,WAAYzW,IAAKuW,EAAKG,aAAc1U,UAAWG,EAAQkU,SACzE,6BACI,kBAACpM,GAAD,CAAQC,KAAM,KAElB,6BACI,kBAACmB,GAAA,EAAD,CAAY9E,QAAQ,SAASgQ,EAAKI,UAClC,kBAACtL,GAAA,EAAD,CAAY9E,QAAQ,SAApB,IAA8BgQ,EAAKE,c,cCvB7C7T,I,OAAYR,aAAW,SAACkB,GAC1B,OAAOhB,YAAa,CAChBC,KAAM,CACF,QAAS,CACLc,MAAO,QAEX,UAAW,CACPA,MAAO,SAGf6J,KAAM,CACF+B,SAAU,OACVD,WAAY,aAST,SAAS4H,GAAYtW,GAChC,IAAM6B,EAAUS,KACRqB,EAAY3D,EAAZ2D,QAEAiJ,EAAuBjJ,EAAvBiJ,KAAMvN,EAAiBsE,EAAjBtE,MAAOkX,EAAU5S,EAAV4S,MAErB,OACI,yBAAK7U,UAAWG,EAAQI,MACF,qBAAVsU,EACa,qBAAVlX,EAAwB,KAC3B,oCACI,yBAAKwD,IAAKxD,EAAMK,IAAKA,IAAKL,EAAMK,MAChC,kBAACiK,GAAD,CAAQC,KAAM,KAItB,oCACI,kBAAC,UAAD,CAAQ4M,aAAW,EAACC,OAAM,OAAEpX,QAAF,IAAEA,OAAF,EAAEA,EAAOK,IAAKA,IAAK6W,EAAM7W,IAAKgX,MAAM,GAC1D,kBAAC,iBAAD,CAAe9S,SAAS,WACxB,kBAAC,cAAD,CAAY+S,mBAAmB,KAEnC,kBAAChN,GAAD,CAAQC,KAAM,KAGtB,kBAACmB,GAAA,EAAD,CAAY9E,QAAQ,KAAKvE,UAAWG,EAAQ+K,MACvCA,ICnDjB,IAAMtK,GAAYR,aAAW,SAACkB,GAC1B,IAAM0C,EAAe1C,EAAMyC,QAAQ,GAEnC,OAAOzD,YAAa,CAChBC,KAAM,CACFmB,gBAAiBJ,EAAMK,QAAQC,WAAWsT,MAC1CpT,MAAOR,EAAMK,QAAQI,OAAOkE,MAC5BjF,QAASM,EAAMyC,QAAQ,GACvBC,aAAcA,EACd9B,SAAU,YAEdnE,KAAM,CACFmE,SAAU,WACVkG,OAAQ,OACR/G,MAAO,OACPsN,IAAK,EACLC,KAAM,EACN5K,aAAcA,QASX,SAASmR,GAAS7W,GAC7B,IAAM6B,EAAUS,KACR9C,EAAuCQ,EAAvCR,KAAMkC,EAAiC1B,EAAjC0B,UAAWzB,EAAsBD,EAAtBC,SAAa2B,EAFM,YAEG5B,EAFH,iCAI5C,OACI,uCAAK0B,UAAWqC,YAAKrC,EAAWG,EAAQI,OAAWL,GAC9B,qBAATpC,EAAuB,KAC3B,kBAAC6H,EAAD,CAAY7H,KAAMA,EAAM4P,UAAU,OAAO1N,UAAWG,EAAQpC,OAE/DQ,GC/Bb,IAAMqC,GAAYR,aAAW,SAACkB,GAC1B,OAAOhB,YAAa,CAChBC,KAAM,CACFgB,KAAM,IACNV,QAAS,OACTW,cAAe,SACfV,eAAgB,gBAChB,UAAW,CACPuF,QvCDY,UuCWb,SAAS+O,GAAK9W,GACzB,IAAM6B,EAAUS,KACRyU,EAAS/W,EAAT+W,KAEApT,EAAkBoT,EAAlBpT,QAASsS,EAASc,EAATd,KAEjB,OACI,kBAACY,GAAD,CAAUrX,KAAMuX,EAAKzX,IAAKoC,UAAWG,EAAQI,MACzC,kBAACqU,GAAD,CAAa3S,QAASA,IACtB,kBAACgG,GAAD,CAAQC,KAAM,IACd,kBAACoM,GAAD,CAAYC,KAAMA,K,cC/BxB3T,GAAYR,aAAW,SAACkB,GAC1B,OAAOhB,YAAa,CAChBC,KAAM,CACFgB,KAAM,UAKH,SAAS+T,KACpB,IAAMnV,EAAUS,KACVU,EAAQwF,eAId,OACI,kBAACqO,GAAD,CAAUnV,UAAWG,EAAQI,MACzB,kBAACgV,GAAA,EAAD,CAAU9F,UAJA,OAIsBlL,QAAQ,OAAO6D,OAAQ,MACvD,kBAACH,GAAD,CAAQC,KAAM,IACbsN,MAAMC,KAAK,IAAID,MAAM,IAAI3Y,KAAI,SAAC6Y,EAAGjP,GAAJ,OAC1B,kBAAC8O,GAAA,EAAD,CAAU9F,UAPJ,OAO0BlL,QAAQ,OAAOc,IAAKoB,OAExD,kBAACwB,GAAD,CAAQC,KAAM,IACd,yBAAK9G,MAAO,CAAEP,QAAS,SACnB,kBAAC0U,GAAA,EAAD,CACI9F,UAZE,OAaFlL,QAAQ,SACRlD,MAAOC,EAAMyC,QAAQ,GACrBqE,OAAQ9G,EAAMyC,QAAQ,KAE1B,6BACI,kBAACkE,GAAD,CAAQC,KAAM,KAElB,yBAAK9G,MAAO,CAAEG,KAAM,MAChB,kBAACgU,GAAA,EAAD,CAAU9F,UArBR,OAqB8BlL,QAAQ,OAAOlD,MAAO,KACtD,kBAACkU,GAAA,EAAD,CAAU9F,UAtBR,OAsB8BlL,QAAQ,OAAOlD,MAAO,Q,cChCrDsU,G,WAIjB,WAAYC,GAAY,0BAHPC,WAGM,OAFfC,oBAEe,EACnBC,KAAKF,MAAQD,EACbG,KAAKD,eAAiB,G,wDAGRE,GACd,OAAID,KAAKD,eAAeG,eAAeD,KAGvCD,KAAKD,eAAeE,GAAmBD,KAAKG,iBAAiBF,IAFlDD,KAAKD,eAAeE,K,uCAOVA,GACrB,OCxBO,SAA0B9E,EAAYiF,GACjD,GAAIA,GAAwB,EACxB,MAAM,IAAIrF,GAAuB,uBAAwBqF,GAE7D,IAAKC,OAAOC,UAAUF,GAClB,MAAM,IAAI1F,GAAgB,uBAAwB0F,GAEtD,GAAqB,IAAjBjF,EAAMnS,OAAc,MAAO,GAE/B,GAAIoX,GAAwBjF,EAAMnS,OAAQ,OAAOmS,EAAMrU,KAAI,SAACyZ,GAAD,MAAU,CAACA,MAGtE,IADA,IAAIC,EAAqB,GAChB9P,EAAQ,EAAGA,EAAQ0P,EAAsB1P,IAC9C8P,EAAYhX,KAAK,IASrB,OANA2R,EAAMsF,SAAQ,SAACC,EAAShQ,GAGpB8P,EAFyB9P,EAAQ0P,GAEH5W,KAAKkX,MAGhCF,EDEIG,CAAcX,KAAKF,MAAOG,O,KEpBnCpV,GAAYR,aAAW,SAACkB,GAAD,OACzBhB,YAAa,CACTC,KAAM,CAAEM,QAAS,OAAQU,KAAM,KAC/BoV,OAAQ,CAAEpV,KAAM,IAAKV,QAAS,OAAQW,cAAe,eAkB9C,SAASoV,GAAWtY,GAC/B,IAAM6B,EAAUS,KACRsG,EAA4E5I,EAA5E4I,YAAa2P,EAA+DvY,EAA/DuY,MAAOC,EAAwDxY,EAAxDwY,WAFqB,EAEmCxY,EAA5C0B,iBAFS,MAEG,GAFH,EAEgBsO,EAAmBhQ,EAA5B6B,QAElD4W,EAAwB,IAAIpB,GAAkBkB,GAEpD,OACI,yBAAK7W,UAAWqC,YAAKlC,EAAQI,KAAMP,EAAf,OAA0BsO,QAA1B,IAA0BA,OAA1B,EAA0BA,EAAgB/N,OACzD2G,EAAYrK,KAAI,SAACma,GAAD,OACb,kBAACC,GAAD,CACIC,WAAYF,EACZhX,UAAWqC,YAAKlC,EAAQwW,OAAT,OAAiBrI,QAAjB,IAAiBA,OAAjB,EAAiBA,EAAgBqI,QAChDQ,QAASJ,EAAsBK,WAAWJ,EAAWK,gBACrDP,WAAYA,QAahC,SAASG,GAAe3Y,GAA8B,IAC1C6Y,EAAoD7Y,EAApD6Y,QAASL,EAA2CxY,EAA3CwY,WAAYI,EAA+B5Y,EAA/B4Y,WADoB,EACW5Y,EAAnB0B,iBADQ,MACI,GADJ,EAG3CsX,EAAUrQ,cAAc,SAAC3F,GAAD,OAAkBA,EAAM4F,YAAYC,KAAK+P,EAAWF,eAElF,OACI,oCACKM,EACKH,EAAQta,KAAI,SAAC8Z,EAAa9D,GAAd,OACR,yBAAK7S,UAAWA,EAAWqF,IAAKwN,GAC3B8D,EAAO9Z,KAAI,SAACyZ,GAAD,OAAaQ,EAAWR,UAG5C,MC5DlB,IAAM1V,GAAYR,aAAW,SAACkB,GAC1B,OAAOhB,YAAa,CAChBC,KAAM,CACFM,QAAS,OACT0W,SAAU,QAEdjB,KAAM,CACFhN,OAAQhI,EAAMyC,QAAQ,GACtBtC,UAAW,IACXZ,QAAS,aASN,SAAS2W,GAAgBlZ,GACpC,IAAM6B,EAAUS,KACR6W,EAAUnZ,EAAVmZ,MAEFC,EAA2C,CAC7C,CAAEV,WAAY,KAAMK,eAAgB,GACpC,CAAEL,WAAY,KAAMK,eAAgB,GACpC,CAAEL,WAAY,KAAMK,eAAgB,GACpC,CAAEL,WAAY,KAAMK,eAAgB,GACpC,CAAEL,WAAY,KAAMK,eAAgB,IAGxC,OACI,yBAAKrX,UAAWG,EAAQI,MACF,qBAAVkX,EACJ,kBAACb,GAAD,CACIC,MAAOrB,MAAMC,KAAK,IAAID,MAAM,KAC5BsB,WAAY,SAACpB,GAAD,OACR,yBAAK1V,UAAWG,EAAQmW,MACpB,kBAAChB,GAAD,QAGRpO,YAAawQ,IAGjB,kBAACd,GAAD,CACIC,MAAOY,EACPX,WAAY,SAACzB,GAAD,OACR,yBAAKrV,UAAWG,EAAQmW,MACpB,kBAAClB,GAAD,CAAMC,KAAMA,MAGpBnO,YAAawQ,K,8CCvBlB,gCAAAzb,EAAA,sEACYC,IAAMC,IAAI,mBADtB,cACLC,EADK,OAGHC,EAASD,EAATC,KAEFC,EAA6B,CAC/Bmb,MAAOE,GAAqBtb,IANrB,kBASJC,GATI,4C,sBAYf,SAASqb,GAAqBtb,GAC1B,OAAOA,EAAKob,MAAM5a,KAAI,SAACwY,GACnB,MAAO,CACHzX,IAAKyX,EAAKzX,IACVqE,QAAS2V,GAAuBvC,GAChCd,KAAMsD,GAAoBxC,OAKtC,SAASuC,GAAuBvC,GAC5B,MAAO,CACHnK,KAAMmK,EAAKnK,KACXvN,MAAO0X,EAAK1X,MAAMoB,OAAS,EAAI+Y,GAAqBzC,QAAQrZ,EAC5D6Y,MAAOQ,EAAKR,MAAM9V,OAAS,EAAIgZ,GAAqB1C,QAAQrZ,EAC5Dgc,UAAW3C,EAAK2C,WAIxB,SAASF,GAAqBzC,GAC1B,MAAO,CACHrX,IAAKqX,EAAK1X,OAIlB,SAASoa,GAAqB1C,GAC1B,MAAO,CACHrX,IAAKqX,EAAKR,OAIlB,SAASgD,GAAoBxC,GACzB,MAAO,CACHX,aAAcW,EAAK4C,WACnBra,IAAKyX,EAAK6C,QACVvD,SAAUU,EAAK8C,eACf1D,WAAYY,EAAK+C,kB,cClEZC,GAAmC,CAC5CrK,cAHkB,SAqCP,SAASsK,KACpB,IACMnY,EAjCQ,SAACsH,GAAD,OACdrH,aAAW,SAACkB,GACR,OAAOhB,YAAa,CAChBC,KAAM,CACF6H,OAAQ,OACRmQ,aAAa,aAAD,OAAejX,EAAMK,QAAQI,OAAOkE,OAChDgI,UAAU,IAAD,OAZH,SAaN,4BAA6B,CACzBvM,gBAAiBJ,EAAMK,QAAQqE,UAAUD,K9ChBjC,e8CkBZ,4BAA6B,CACzBrE,gBAAiB,uBAGzByM,MAAO,CACHnN,QAAQ,OAAD,OAASM,EAAMyC,QAAQ0D,GAAvB,OAEX+C,MAAO,CACHjB,UAAW,SACXuD,cAAe,YACfhL,MAAOR,EAAMK,QAAQqE,UAAUD,KAC/BmH,WAAY,KAEhBsL,SAAU,CACNtL,WAAY,IACZ3D,UAAW,SACXyD,WAAY,UAORpM,CADIiG,KACJjG,GAFiB,EAITpC,qBAJS,mBAI1BnC,EAJ0B,KAIpB2W,EAJoB,KAUjC,OAJAnU,qBAAU,YDvBC,WAAf,iCCwBQ4Z,GAAoBhZ,MAAK,SAACrD,GAAD,OAAc4W,EAAQ5W,QAChD,IAGC,kBAACkX,GAAD,CAAsBtT,UAAWG,EAAQI,MACrC,kBAACuH,GAAD,CAAaC,WAAS,GAClB,yBAAK/H,UAAWG,EAAQgO,OACpB,kBAAClG,GAAD,CAAQC,KAAM,IACd,kBAACmB,GAAA,EAAD,CAAY9E,QAAQ,KAAKvE,UAAWG,EAAQqK,OAA5C,oBAGA,kBAACnB,GAAA,EAAD,CAAY9E,QAAQ,KAAKvE,UAAWG,EAAQqY,UAA5C,4BAGA,yBAAKpX,MAAO,CAAEP,QAAS,OAAQC,eAAgB,WAC3C,kBAACmT,GAAD,OAEJ,kBAAChM,GAAD,MACA,kBAAC,KAAD,CAAW7G,MAAO,CAAEC,MAAO,OAAQ+G,OAAQ,MACvC,kBAACoP,GAAD,CAAiBC,MAAK,OAAEpb,QAAF,IAAEA,OAAF,EAAEA,EAAMob,Y,yBCvEvC,SAASiB,GAAsBpa,GAC1C,OACI,kBAACwB,EAAD,eACIG,gBAAiB,CACbI,SAAUK,KACVC,eAAgB,QAChBY,KAAM,IAENjD,ICRhB,IAAMsC,GAAYR,aAAW,SAACkB,GAC1B,OAAOhB,YAAa,CAChBC,KAAM,CAAEgB,KAAM,WAAYV,QAAS,OAAQW,cAAe,eAInD,SAASmX,KACpB,IAAMxY,EAAUS,KAEhB,OACI,yBAAKZ,UAAWG,EAAQI,MACpB,kBAACmY,GAAD,CACItX,MAAK,eACEiX,KAGP,kBAACjF,GAAD,OAEJ,kBAACkF,GAAD,OCNGM,OAZf,WAAgB,IACNrb,EAAYsb,cAAZtb,QAEN,OACI,kBAACc,EAAD,CAAad,QAASA,GAClB,kBAACyM,GAAD,KACI,kBAAC2O,GAAD,SCAIG,QACa,cAA7BC,OAAOC,SAASC,UAEiB,UAA7BF,OAAOC,SAASC,UAEhBF,OAAOC,SAASC,SAASC,MAAM,2D,0DCQvCC,KAAIC,OAIJ,IAAMC,KAA+BC,SAASC,aAE9CC,IAASC,OACL,kBAAC,IAAMC,WAAP,KACKL,GACG,yBAAKjY,MAAO,CAAEU,MAAO,UAArB,sEAIA,kBAAC,KAAD,CAAkBR,MAAOA,IACrB,kBAAC,IAAD,KACI,kBAAC,IAAD,KACI,kBAAC,IAAD,CAAOqY,OAAK,EAACC,KAAK,aACd,kBAAC,GAAD,OAEJ,kBAAC,IAAD,CAAUC,GAAE,WAAM1b,SAMtCmb,SAASQ,eAAe,SDkFpB,kBAAmB7a,WACnBA,UAAU8a,cAAcC,MACnBva,MAAK,SAACwa,GACHA,EAAaC,gBAEhBC,OAAM,SAACC,GACJC,QAAQD,MAAMA,EAAME,c","file":"static/js/main.553bdb97.chunk.js","sourcesContent":["module.exports = __webpack_public_path__ + \"static/media/banner.fc127bce.jpg\";","module.exports = \"data:image/png;base64,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UmVhZHlxyWU8AAADc2lUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDggNzkuMTY0MDM2LCAyMDE5LzA4LzEzLTAxOjA2OjU3ICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOmRhOTE0OGQ3LWRjOWYtODk0ZS04NzNiLWY5ZTgzNWIyMzU2YSIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpDMjcyMjk1NDdGQkYxMUVBQjcxNEY2NEFBQ0ZCNEMzQSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpDMjcyMjk1MzdGQkYxMUVBQjcxNEY2NEFBQ0ZCNEMzQSIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgMjEuMCAoV2luZG93cykiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDozNDI1MTNkNi04NzJmLWU2NGYtYWE3ZS00OGRmZGI1OTE0ZjgiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6ZGE5MTQ4ZDctZGM5Zi04OTRlLTg3M2ItZjllODM1YjIzNTZhIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+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\"","module.exports = \"data:image/png;base64,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\"","module.exports = __webpack_public_path__ + \"static/media/bg_info.737aca5a.png\";","module.exports = __webpack_public_path__ + \"static/media/bg_paneledge.60e05785.jpg\";","module.exports = __webpack_public_path__ + \"static/media/bg_dishdirt.b75d4476.jpg\";","module.exports = __webpack_public_path__ + \"static/media/thumbnails_left.dc81479f.png\";","module.exports = __webpack_public_path__ + \"static/media/thumbnails_right.92551835.png\";","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAygAAAByCAYAAAC4CfX9AAAKQ2lDQ1BJQ0MgcHJvZmlsZQAAeNqdU3dYk/cWPt/3ZQ9WQtjwsZdsgQAiI6wIyBBZohCSAGGEEBJAxYWIClYUFRGcSFXEgtUKSJ2I4qAouGdBiohai1VcOO4f3Ke1fXrv7e371/u855zn/M55zw+AERImkeaiagA5UoU8Otgfj09IxMm9gAIVSOAEIBDmy8JnBcUAAPADeXh+dLA//AGvbwACAHDVLiQSx+H/g7pQJlcAIJEA4CIS5wsBkFIAyC5UyBQAyBgAsFOzZAoAlAAAbHl8QiIAqg0A7PRJPgUA2KmT3BcA2KIcqQgAjQEAmShHJAJAuwBgVYFSLALAwgCgrEAiLgTArgGAWbYyRwKAvQUAdo5YkA9AYACAmUIszAAgOAIAQx4TzQMgTAOgMNK/4KlfcIW4SAEAwMuVzZdL0jMUuJXQGnfy8ODiIeLCbLFCYRcpEGYJ5CKcl5sjE0jnA0zODAAAGvnRwf44P5Dn5uTh5mbnbO/0xaL+a/BvIj4h8d/+vIwCBAAQTs/v2l/l5dYDcMcBsHW/a6lbANpWAGjf+V0z2wmgWgrQevmLeTj8QB6eoVDIPB0cCgsL7SViob0w44s+/zPhb+CLfvb8QB7+23rwAHGaQJmtwKOD/XFhbnauUo7nywRCMW735yP+x4V//Y4p0eI0sVwsFYrxWIm4UCJNx3m5UpFEIcmV4hLpfzLxH5b9CZN3DQCshk/ATrYHtctswH7uAQKLDljSdgBAfvMtjBoLkQAQZzQyefcAAJO/+Y9AKwEAzZek4wAAvOgYXKiUF0zGCAAARKCBKrBBBwzBFKzADpzBHbzAFwJhBkRADCTAPBBCBuSAHAqhGJZBGVTAOtgEtbADGqARmuEQtMExOA3n4BJcgetwFwZgGJ7CGLyGCQRByAgTYSE6iBFijtgizggXmY4EImFINJKApCDpiBRRIsXIcqQCqUJqkV1II/ItchQ5jVxA+pDbyCAyivyKvEcxlIGyUQPUAnVAuagfGorGoHPRdDQPXYCWomvRGrQePYC2oqfRS+h1dAB9io5jgNExDmaM2WFcjIdFYIlYGibHFmPlWDVWjzVjHVg3dhUbwJ5h7wgkAouAE+wIXoQQwmyCkJBHWExYQ6gl7CO0EroIVwmDhDHCJyKTqE+0JXoS+cR4YjqxkFhGrCbuIR4hniVeJw4TX5NIJA7JkuROCiElkDJJC0lrSNtILaRTpD7SEGmcTCbrkG3J3uQIsoCsIJeRt5APkE+S+8nD5LcUOsWI4kwJoiRSpJQSSjVlP+UEpZ8yQpmgqlHNqZ7UCKqIOp9aSW2gdlAvU4epEzR1miXNmxZDy6Qto9XQmmlnafdoL+l0ugndgx5Fl9CX0mvoB+nn6YP0dwwNhg2Dx0hiKBlrGXsZpxi3GS+ZTKYF05eZyFQw1zIbmWeYD5hvVVgq9ip8FZHKEpU6lVaVfpXnqlRVc1U/1XmqC1SrVQ+rXlZ9pkZVs1DjqQnUFqvVqR1Vu6k2rs5Sd1KPUM9RX6O+X/2C+mMNsoaFRqCGSKNUY7fGGY0hFsYyZfFYQtZyVgPrLGuYTWJbsvnsTHYF+xt2L3tMU0NzqmasZpFmneZxzQEOxrHg8DnZnErOIc4NznstAy0/LbHWaq1mrX6tN9p62r7aYu1y7Rbt69rvdXCdQJ0snfU6bTr3dQm6NrpRuoW623XP6j7TY+t56Qn1yvUO6d3RR/Vt9KP1F+rv1u/RHzcwNAg2kBlsMThj8MyQY+hrmGm40fCE4agRy2i6kcRoo9FJoye4Ju6HZ+M1eBc+ZqxvHGKsNN5l3Gs8YWJpMtukxKTF5L4pzZRrmma60bTTdMzMyCzcrNisyeyOOdWca55hvtm82/yNhaVFnMVKizaLx5balnzLBZZNlvesmFY+VnlW9VbXrEnWXOss623WV2xQG1ebDJs6m8u2qK2brcR2m23fFOIUjynSKfVTbtox7PzsCuya7AbtOfZh9iX2bfbPHcwcEh3WO3Q7fHJ0dcx2bHC866ThNMOpxKnD6VdnG2ehc53zNRemS5DLEpd2lxdTbaeKp26fesuV5RruutK10/Wjm7ub3K3ZbdTdzD3Ffav7TS6bG8ldwz3vQfTw91jicczjnaebp8LzkOcvXnZeWV77vR5Ps5wmntYwbcjbxFvgvct7YDo+PWX6zukDPsY+Ap96n4e+pr4i3z2+I37Wfpl+B/ye+zv6y/2P+L/hefIW8U4FYAHBAeUBvYEagbMDawMfBJkEpQc1BY0FuwYvDD4VQgwJDVkfcpNvwBfyG/ljM9xnLJrRFcoInRVaG/owzCZMHtYRjobPCN8Qfm+m+UzpzLYIiOBHbIi4H2kZmRf5fRQpKjKqLupRtFN0cXT3LNas5Fn7Z72O8Y+pjLk722q2cnZnrGpsUmxj7Ju4gLiquIF4h/hF8ZcSdBMkCe2J5MTYxD2J43MC52yaM5zkmlSWdGOu5dyiuRfm6c7Lnnc8WTVZkHw4hZgSl7I/5YMgQlAvGE/lp25NHRPyhJuFT0W+oo2iUbG3uEo8kuadVpX2ON07fUP6aIZPRnXGMwlPUit5kRmSuSPzTVZE1t6sz9lx2S05lJyUnKNSDWmWtCvXMLcot09mKyuTDeR55m3KG5OHyvfkI/lz89sVbIVM0aO0Uq5QDhZML6greFsYW3i4SL1IWtQz32b+6vkjC4IWfL2QsFC4sLPYuHhZ8eAiv0W7FiOLUxd3LjFdUrpkeGnw0n3LaMuylv1Q4lhSVfJqedzyjlKD0qWlQyuCVzSVqZTJy26u9Fq5YxVhlWRV72qX1VtWfyoXlV+scKyorviwRrjm4ldOX9V89Xlt2treSrfK7etI66Trbqz3Wb+vSr1qQdXQhvANrRvxjeUbX21K3nShemr1js20zcrNAzVhNe1bzLas2/KhNqP2ep1/XctW/a2rt77ZJtrWv913e/MOgx0VO97vlOy8tSt4V2u9RX31btLugt2PGmIbur/mft24R3dPxZ6Pe6V7B/ZF7+tqdG9s3K+/v7IJbVI2jR5IOnDlm4Bv2pvtmne1cFoqDsJB5cEn36Z8e+NQ6KHOw9zDzd+Zf7f1COtIeSvSOr91rC2jbaA9ob3v6IyjnR1eHUe+t/9+7zHjY3XHNY9XnqCdKD3x+eSCk+OnZKeenU4/PdSZ3Hn3TPyZa11RXb1nQ8+ePxd07ky3X/fJ897nj13wvHD0Ivdi2yW3S609rj1HfnD94UivW2/rZffL7Vc8rnT0Tes70e/Tf/pqwNVz1/jXLl2feb3vxuwbt24m3Ry4Jbr1+Hb27Rd3Cu5M3F16j3iv/L7a/eoH+g/qf7T+sWXAbeD4YMBgz8NZD+8OCYee/pT/04fh0kfMR9UjRiONj50fHxsNGr3yZM6T4aeypxPPyn5W/3nrc6vn3/3i+0vPWPzY8Av5i8+/rnmp83Lvq6mvOscjxx+8znk98ab8rc7bfe+477rfx70fmSj8QP5Q89H6Y8en0E/3Pud8/vwv94Tz+4A5JREAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADc2lUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDggNzkuMTY0MDM2LCAyMDE5LzA4LzEzLTAxOjA2OjU3ICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjI4YWQ4MGFkLThhNmEtZjA0Ny04NTMxLWM2NmIwY2FkZmI1MSIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDo2QzE5NzlBQ0NDMDcxMUVBQTk1N0RDNzExMjNENDdGNCIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo2QzE5NzlBQkNDMDcxMUVBQTk1N0RDNzExMjNENDdGNCIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgMjEuMCAoV2luZG93cykiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDoyOGFkODBhZC04YTZhLWYwNDctODUzMS1jNjZiMGNhZGZiNTEiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MjhhZDgwYWQtOGE2YS1mMDQ3LTg1MzEtYzY2YjBjYWRmYjUxIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+Q4jCIgAABjVJREFUeNrs3V1vG0UUBmC3BCGKAFWol71C/P8fVSkfduym+bCbNImZVScobL327Hpmd508jzSFDqGYc7Wvz9mZN+v1egIAADAGb5UAAAAYi6Pql48fP96Ev7wL6yGsyw0/dx/WVYv9b2Fdt9i/C+umxf5tWMsW+1/DWrXYX8V/lrq/jP/t1H0AAKDm06dP3wNKcBLW32H9FNb7hp//oGTZ3MTwlbp/HcNd6v5VDI+p+5cxnKbufwnrccP+RVjrFvufG+qzaX8d/5zUfQAADtBTQJnGgEI/four7r3SZPMYg1TqflP3UFfxu6buIQBAkYByqhS8MG+3BL6/lCebXGOPL7WrmKvbCACvLqBMlQLo4Ne46nQD8yo5DqnbCMAoA4oOCsB4vW+5T3uHcsjKoXcbAZIDig4KAK/ZL3FRVulxSN1GeEEB5UwpAIDC/mzY1w3Mx5UO35XuNtJDQDHiBQBw+H4W+Hpx6IevjLrbaMQLAADa+b1hXzjcT9VBe/c2/saIFwAAMKR59ctTQLmcbJ4PBAAA6MPseUCpeA8FAAAYyrweUGZqAgAAjCWgnKgJAAAwkGk9oOigAAAAQ1nUA4oOCgAAMBTvoAAAAKPxwyleOigAAMBQdFAAAIDxBhQdFAAAYCjn9YAyVRMAAGAsAeUirFt1AQAAerYKa1kPKJUztQEAAHo2f/obAQUAABjaVEABAADGYtEUULwoDwAA9K1xxMtRwwAAQN8aR7xc1ggAAPStccTrVG0AAICeNY54eQcFAADo26wpoHgHBQAA6FtjB+VcbQAAgDEFlDv1AQAAenTeFFAqTvICAABGE1Cc5AUAAPRlFdZyW0BxkhcAANCX/70Hr4MCAAAMabYroOigAAAAfVnsCig6KAAAQF/muwLKmRoBAAA9me4KKEa8AACAvhjxAgAARmPniJcOCgAA0Jedp3hV5xDfqxMAANCDnR2U9aR2WQoAAMBQAaVyrE4AAEAPdt4k/8MPAQAADBlQTtQJAAAobBXWMiWgOMkLAAAo7YfJraaA4i4UAACgtFlqQJmpFQAAUNgiNaB4BwUAAChtnhpQvIMCAACUNk0NKGdqBQAAFJY84lW9g/KgXgAAQEHJI16PE5c1AgAAZSWf4lUx5gUAAJSU3EERUAAAgFEFFJc1AgAAJSXfJF9xWSMAAFBSq3dQXNYIAACUsoorOaDooAAAAKVsPDVYBwUAABjCrG1A0UEBAABKWbQNKDooAABAKfO2AaWaCVurGwAAUMC0bUC5nzS8uAIAALCn1iNeFbfJAwAAJbQe8RJQAACAUlqf4iWgAAAApeigAAAAAgoAAEBdpxGvqboBAAAFnHcJKC5rBAAAclvF1TqgzNQOAADIrPG+xV0B5VTtAACAzGZdA4p3UAAAgNwWXQPKt8mW9gsAAEAH864BZSKgAAAAmU33CSjH6gcAAGTUecSr4iQvAAAgp71GvJzkBQAA5NT5FK+Kk7wAAICcOt+DUtFBAQAActrrHRQdFAAAIKe9RrzO1A8AAMjIiBcAADAKq7g6BxQjXgAAQC5bL4JPCSi3YX1WRwAAIIPZvgGloosCAADksMgRULyHAgAA5DDPEVBm6ggAAGQwzRFQjtURAADIIMuI17k6AgAAGWQZ8TpRRwAAIIMsI15O8QIAAHLI0kFxihcAAJBDlndQnOIFAADkkOWiRu+gAAAAOWw9gOso8Q/5GtZlWH+oJwAAJHmIz9DP3Ya1rO3dhHVX27uM//6TdVgXtZ/5Ftb1huf2VW3vOv7scxfxz9z2We/iZ3tuGf8ftn3Wyufa7+/Dukop2lGLAp8JKAAA7HjQfQzrS8cH3av4INv2QTf1of9L/HzbPuumh/5VfPDf9VnrtaCDtgHlHyUDAF6ZlAfd1G+3Nz3odv12e9NDecq325s+66aH/tRv4mHQgAIAvDylxzhSH3RTvt3e9FlTv92uf9bUh35AQAGArEqPcRz6nDmAgAJAdqXHOA55zhyAFxhQXNYIDK30GMehz5kDwKsKKC5rhPIO/bjA0nPmAICA8h+XNZLLIR8XWHrOHABAQEmkg5Lu0I8LLD1nDgAAeweUkw4PumM9LrD0nDkAANDBm/XaZZcAAMA4/CvAAA0mCiOsS8b3AAAAAElFTkSuQmCC\"","module.exports = __webpack_public_path__ + \"static/media/txt_dishdirt_title.f2033016.png\";","module.exports = __webpack_public_path__ + \"static/media/bg_socialwall.9507223a.png\";","module.exports = __webpack_public_path__ + \"static/media/body.8b82df3f.jpg\";","import { createContext } from \"react\";\r\nimport ICodemastersLogo from \"models/ICodemastersLogo\";\r\nimport IRating from \"models/IRating\";\r\n\r\nexport interface IAppConfig {\r\n codemastersLogo: ICodemastersLogo;\r\n country: string;\r\n copyrightText: string;\r\n supportedCountries: string[];\r\n supportedRatings: IRating[];\r\n}\r\n\r\nconst ConfigContext = createContext(undefined);\r\n\r\nexport default ConfigContext;\r\n","import axios from \"axios\";\r\nimport ICodemastersLogo from \"models/ICodemastersLogo\";\r\nimport IRating from \"models/IRating\";\r\n\r\ninterface ISettingsResponse {\r\n codemastersLogo: ICodemastersLogo;\r\n copyrightText: string;\r\n supportedCountries: string[];\r\n supportedRatings: IRating[];\r\n}\r\n\r\nexport default async function getWebsiteSettings() {\r\n const response = await axios.get(\"/api/website/settings\");\r\n\r\n const { data } = response;\r\n\r\n const settings: ISettingsResponse = {\r\n codemastersLogo: convertCodemasterLogoResponse(data.codemastersLogo[0]),\r\n copyrightText: data.copyrightText[0].html,\r\n supportedCountries: data.countryListCountries.map((c: any) => c.codename),\r\n supportedRatings: convertRatingsResponse(data.ratings),\r\n };\r\n\r\n return settings;\r\n}\r\n\r\nfunction convertRatingsResponse(ratings: any[]): IRating[] {\r\n return ratings.map((r: any) => {\r\n const logo = r.ratingLogo[0];\r\n\r\n const rating: IRating = {\r\n countries: r.countryListCountries.map((country: any) => {\r\n return { name: country.name, code: country.codename };\r\n }),\r\n imgSrc: logo.image[0].url,\r\n description: logo.image[0].description,\r\n href: logo.link,\r\n name: logo.name,\r\n };\r\n\r\n return rating;\r\n });\r\n}\r\n\r\nfunction convertCodemasterLogoResponse(codemastersLogo: any): ICodemastersLogo {\r\n const image = codemastersLogo.image[0];\r\n\r\n return {\r\n src: image.url,\r\n description: image.description,\r\n href: codemastersLogo.link,\r\n id: codemastersLogo.system.codename,\r\n };\r\n}\r\n","export const defaultCountry = \"uk\".toLowerCase();\r\n","import React, { useState, ReactNode, useEffect } from \"react\";\r\nimport ConfigContext, { IAppConfig } from \"contexts/ConfigContext\";\r\nimport { useHistory } from \"react-router-dom\";\r\nimport getWebsiteSettings from \"services/getWebsiteSettings\";\r\nimport { defaultCountry } from \"consts\";\r\n\r\ninterface IProps {\r\n children?: ReactNode;\r\n country?: string;\r\n}\r\n\r\nexport default function Application(props: IProps) {\r\n const { children, country } = props;\r\n const [config, setConfig] = useState(undefined);\r\n let history = useHistory();\r\n\r\n useEffect(() => {\r\n const resolvedCountry = resolveCountry(country);\r\n\r\n if (country !== resolvedCountry) {\r\n history.push(resolvedCountry);\r\n }\r\n\r\n getWebsiteSettings().then((settings) => {\r\n const {\r\n codemastersLogo,\r\n copyrightText,\r\n supportedCountries,\r\n supportedRatings,\r\n } = settings;\r\n\r\n let _country = resolvedCountry;\r\n const isCountry = supportedCountries.find(\r\n (c) => c.toLowerCase() === _country.toLowerCase()\r\n );\r\n if (typeof isCountry === \"undefined\") {\r\n history.push(defaultCountry);\r\n _country = defaultCountry;\r\n }\r\n\r\n const appConfig: IAppConfig = {\r\n codemastersLogo: codemastersLogo,\r\n country: _country,\r\n copyrightText: copyrightText,\r\n supportedCountries: supportedCountries,\r\n supportedRatings: supportedRatings,\r\n };\r\n\r\n setConfig(appConfig);\r\n });\r\n }, [history, country]);\r\n\r\n return {children};\r\n}\r\n\r\nfunction resolveCountry(country?: string): string {\r\n if (typeof country === \"undefined\" || country.length !== 2) return getCountryFromLanguage();\r\n\r\n return country.toLowerCase();\r\n}\r\n\r\nfunction getCountryFromLanguage() {\r\n const language = navigator.language;\r\n\r\n const parsedLanguage = language.substring(language.indexOf(\"-\") + 1).toLowerCase();\r\n\r\n if (parsedLanguage === \"en\" || parsedLanguage === \"gb\") return \"uk\";\r\n\r\n return parsedLanguage.toLowerCase();\r\n}\r\n","import React, { HTMLAttributes } from \"react\";\r\nimport { makeStyles, createStyles } from \"@material-ui/core/styles\";\r\nimport { CSSProperties } from \"@material-ui/core/styles/withStyles\";\r\n\r\nconst useStyles = (styleProps: IBackgroundStyle) =>\r\n makeStyles(() => {\r\n const { imageUrl, ...rest } = styleProps;\r\n\r\n return createStyles({\r\n root: {\r\n backgroundImage: `url(${imageUrl})`,\r\n ...rest,\r\n },\r\n });\r\n });\r\n\r\ninterface IBackgroundStyle extends CSSProperties {\r\n imageUrl: string;\r\n}\r\n\r\ninterface IProps extends HTMLAttributes {\r\n backgroundStyle: IBackgroundStyle;\r\n}\r\n\r\nexport default function BackgroundImage(props: IProps) {\r\n const { children, className = \"\", backgroundStyle, ...rest } = props;\r\n const classes = useStyles(backgroundStyle)();\r\n\r\n return (\r\n
\r\n {children}\r\n
\r\n );\r\n}\r\n","import React, { HTMLAttributes } from \"react\";\r\nimport BackgroundImage from \"./BackgroundImage\";\r\nimport backgroundImageSrc from \"assets/images/backgrounds/banner.jpg\"\r\n\r\ninterface IProps extends HTMLAttributes {}\r\n\r\nexport default function TopBannerBackground(props: IProps) {\r\n return (\r\n \r\n );\r\n}\r\n","import React from \"react\";\r\nimport TopBannerBackground from \"./backgrounds/TopBannerBackground\";\r\nimport { makeStyles, createStyles } from \"@material-ui/core/styles\";\r\nimport dirtLogo from \"assets/images/logos/dirt.png\";\r\n\r\nconst useStyles = makeStyles(() =>\r\n createStyles({\r\n root: {\r\n display: \"flex\",\r\n justifyContent: \"center\",\r\n alignItems: \"center\",\r\n padding: 5,\r\n },\r\n })\r\n);\r\n\r\nexport default function TopBanner() {\r\n const classes = useStyles();\r\n\r\n return (\r\n \r\n \"Dirt\r\n \r\n );\r\n}\r\n","import React, { ReactNode } from \"react\";\r\nimport { makeStyles, createStyles, Theme } from \"@material-ui/core/styles\";\r\nimport clsx from \"clsx\";\r\nimport TopBanner from \"components/TopBanner\";\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n root: {\r\n display: \"flex\",\r\n flex: \"1 1 auto\",\r\n flexDirection: \"column\",\r\n minHeight: \"100vh\",\r\n backgroundColor: theme.palette.background.default,\r\n color: theme.palette.common.white,\r\n },\r\n content: {\r\n flex: \"1 1 auto\",\r\n display: \"flex\",\r\n position: \"relative\",\r\n },\r\n })\r\n);\r\n\r\ninterface IStickyFooterProps extends React.HTMLAttributes {\r\n footer: ReactNode;\r\n}\r\n\r\nexport default function StickyFooter(props: IStickyFooterProps) {\r\n const classes = useStyles();\r\n const { children, footer, className, ...rest } = props;\r\n\r\n return (\r\n
\r\n \r\n
{children}
\r\n {footer}\r\n
\r\n );\r\n}\r\n","const publicAssetsDirectory = `${process.env.PUBLIC_URL}/assets`;\r\nconst flagsLocation = `${publicAssetsDirectory}/flags`;\r\n\r\nconst assetLocations = {\r\n flags: {\r\n at: `${flagsLocation}/at.png`,\r\n au: `${flagsLocation}/au.png`,\r\n be: `${flagsLocation}/be.png`,\r\n ca: `${flagsLocation}/ca.png`,\r\n ch: `${flagsLocation}/ch.png`,\r\n de: `${flagsLocation}/de.png`,\r\n es: `${flagsLocation}/es.png`,\r\n fi: `${flagsLocation}/fi.png`,\r\n fr: `${flagsLocation}/fr.png`,\r\n it: `${flagsLocation}/it.png`,\r\n nl: `${flagsLocation}/nl.png`,\r\n no: `${flagsLocation}/no.png`,\r\n nz: `${flagsLocation}/nz.png`,\r\n pl: `${flagsLocation}/pl.png`,\r\n se: `${flagsLocation}/se.png`,\r\n uk: `${flagsLocation}/uk.png`,\r\n us: `${flagsLocation}/us.png`,\r\n world: `${flagsLocation}/world.png`,\r\n },\r\n};\r\n\r\nexport default assetLocations;\r\n","import React, { ReactNode } from \"react\";\r\nimport { makeStyles, createStyles, Theme } from \"@material-ui/core/styles\";\r\nimport { SelectProps } from \"@material-ui/core\";\r\nimport InputLabel from \"@material-ui/core/InputLabel\";\r\nimport FormControl from \"@material-ui/core/FormControl\";\r\nimport Select from \"@material-ui/core/Select\";\r\nimport clsx from \"clsx\";\r\n\r\nconst useStyles = makeStyles((theme: Theme) => {\r\n const primaryColour = theme.palette.common.white;\r\n\r\n return createStyles({\r\n root: {\r\n minWidth: 120,\r\n color: \"white\",\r\n \"& .MuiSelect-root\": {\r\n padding: theme.spacing(1),\r\n },\r\n \"& .MuiInputBase-root\": {\r\n color: \"inherit\",\r\n },\r\n \"& .MuiFormLabel-root\": {\r\n color: \"inherit\",\r\n },\r\n \"& .MuiOutlinedInput-root\": {\r\n borderRadius: 0,\r\n },\r\n \"& .MuiSelect-selectMenu\": {\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n },\r\n \"& .MuiListItemIcon-root\": {\r\n minWidth: \"unset\",\r\n marginRight: theme.spacing(1),\r\n },\r\n },\r\n primary: {\r\n \"& .MuiInputBase-root\": {\r\n color: primaryColour,\r\n },\r\n \"& .MuiFormLabel-root\": {\r\n color: primaryColour,\r\n },\r\n \"& .MuiSelect-icon\": {\r\n color: primaryColour,\r\n },\r\n \"& .MuiOutlinedInput-notchedOutline\": {\r\n borderColor: primaryColour,\r\n },\r\n \"&.MuiOutlinedInput-root:hover .MuiOutlinedInput-notchedOutline\": {\r\n borderColor: theme.palette.grey[500],\r\n },\r\n \"&.MuiOutlinedInput-root.Mui-focused .MuiOutlinedInput-notchedOutline\": {\r\n borderColor: theme.palette.grey[800],\r\n },\r\n },\r\n });\r\n});\r\n\r\ntype IVariant = \"primary\";\r\n\r\ninterface IProps {\r\n label?: string;\r\n variant?: IVariant;\r\n children?: ReactNode;\r\n selectProps?: SelectProps;\r\n}\r\n\r\nexport default function StyledSelect(props: IProps) {\r\n const { children, label, variant = \"primary\", selectProps } = props;\r\n const classes = useStyles();\r\n\r\n return (\r\n \r\n {label}\r\n \r\n \r\n );\r\n}\r\n","import React, { useContext } from \"react\";\r\nimport ConfigContext from \"contexts/ConfigContext\";\r\nimport { useHistory } from \"react-router-dom\";\r\nimport assetLocations from \"assetLocations\";\r\nimport StyledSelect from \"components/inputs/StyledSelect\";\r\nimport MenuItem from \"@material-ui/core/MenuItem\";\r\nimport ListItemIcon from \"@material-ui/core/ListItemIcon\";\r\nimport ListItemText from \"@material-ui/core/ListItemText\";\r\n\r\ninterface IProps {}\r\n\r\nexport default function LanguageSelector(props: IProps) {\r\n let history = useHistory();\r\n const config = useContext(ConfigContext);\r\n\r\n const handleLanguageChange = (country: string) => {\r\n history.push(country);\r\n };\r\n\r\n const getFlagSrc = (country: string) => {\r\n //@ts-ignore\r\n let iconSrc = assetLocations.flags[country];\r\n if (typeof iconSrc === \"undefined\") iconSrc = assetLocations.flags.world;\r\n\r\n return iconSrc;\r\n };\r\n\r\n if (typeof config === \"undefined\") return null;\r\n\r\n const { supportedCountries, country } = config;\r\n\r\n return (\r\n
\r\n \r\n ) => handleLanguageChange(event.target.value as string),\r\n }}\r\n >\r\n {supportedCountries.map((c: string) => {\r\n return (\r\n \r\n \r\n {c}\r\n \r\n \r\n \r\n );\r\n })}\r\n \r\n\r\n
\r\n {/* The following makes sure the country images are loaded before the menu is opened */}\r\n {supportedCountries.map((c: string) => {\r\n return {c};\r\n })}\r\n
\r\n
\r\n );\r\n}\r\n","import React from \"react\";\r\nimport Link, { LinkProps } from \"@material-ui/core/Link\";\r\n\r\nexport interface ILinkWrapperProps extends LinkProps {}\r\n\r\nexport default function LinkWrapper(props: ILinkWrapperProps) {\r\n const { children, ...rest } = props;\r\n return {children};\r\n}\r\n","import React from \"react\";\r\nimport LinkWrapper, { ILinkWrapperProps } from \"./LinkWrapper\";\r\n\r\ninterface IProps extends ILinkWrapperProps {}\r\n\r\nexport default function NewTabLink(props: IProps) {\r\n const { children, href, ...rest } = props;\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n}\r\n","import { createMuiTheme, Theme } from \"@material-ui/core/styles\";\r\n\r\nconst white = \"#F9F9F9\";\r\nconst black = \"#1C1C1C\";\r\n\r\nexport const transition = {\r\n delay: \"0s\",\r\n duration: \"0.15s\",\r\n property: \"all\",\r\n timingFunction: \"ease-in-out\",\r\n};\r\n\r\nexport const cssImportant = \" !important\";\r\nexport const transparentColour = \"transparent\";\r\n\r\nexport const hoverFadeAmount = 0.5\r\nexport const hoverOpacity = 0.9\r\n\r\nexport const fonts = {\r\n primary: \"montserrat\",\r\n secondary: \"roboto\",\r\n};\r\n\r\nconst theme: Theme = createMuiTheme({\r\n palette: {\r\n primary: {\r\n main: \"#012C3C\",\r\n },\r\n secondary: {\r\n main: \"#CF0B21\",\r\n },\r\n common: {\r\n white: white,\r\n black: black,\r\n },\r\n background: {\r\n default: \"#262626\",\r\n },\r\n },\r\n typography: {\r\n fontFamily: fonts.primary,\r\n },\r\n});\r\n\r\nexport const layoutConsts = {\r\n siteContentMaxWidth: 1500,\r\n};\r\n\r\nexport default theme;\r\n","import React, { useContext } from \"react\";\r\nimport { makeStyles, createStyles, Theme } from \"@material-ui/core/styles\";\r\nimport ConfigContext from \"contexts/ConfigContext\";\r\nimport IRating from \"models/IRating\";\r\nimport NewTabLink from \"components/links/NewTabLink\";\r\nimport esrbImageSrc from \"assets/images/ratings/esrb.png\"\r\nimport { hoverOpacity } from \"theme\";\r\n\r\nconst useStyles = makeStyles((theme: Theme) => {\r\n return createStyles({\r\n root: {\r\n \"&:hover\": {\r\n opacity: hoverOpacity\r\n }\r\n },\r\n });\r\n});\r\n\r\ninterface IProps {}\r\n\r\nexport default function Rating(props: IProps) {\r\n const classes = useStyles();\r\n const config = useContext(ConfigContext);\r\n\r\n if (typeof config === \"undefined\") return null;\r\n\r\n const { supportedRatings, country } = config;\r\n const rating = getRatingForCountry(supportedRatings, country);\r\n\r\n return (\r\n \r\n {rating.description}\r\n \r\n );\r\n}\r\n\r\nfunction getRatingForCountry(ratings: IRating[], country: string): IRating {\r\n let ratingForCountry: IRating | undefined = undefined;\r\n\r\n for (let index = 0; index < ratings.length; index++) {\r\n const rating = ratings[index];\r\n\r\n const matchedCountries = rating.countries.find((c) => c.code === country);\r\n let isRatingForCountry = typeof matchedCountries !== \"undefined\";\r\n\r\n if (isRatingForCountry) {\r\n ratingForCountry = rating;\r\n break;\r\n }\r\n }\r\n\r\n const defaultRating: IRating = {\r\n countries: [],\r\n imgSrc: esrbImageSrc,\r\n description: \"ESRB Logo\",\r\n href: \"https://www.esrb.org/\",\r\n name: \"ESRB\",\r\n };\r\n\r\n return typeof ratingForCountry === \"undefined\" ? defaultRating : ratingForCountry;\r\n}\r\n","import { useTheme } from \"@material-ui/core/styles\";\r\nimport { useMediaQuery } from \"@material-ui/core\";\r\nimport { Breakpoint } from \"@material-ui/core/styles/createBreakpoints\";\r\n\r\ntype BreakpointPadding = {\r\n [key in Breakpoint]: number;\r\n};\r\n\r\nexport default function useResponsivePaddingSize() {\r\n const theme = useTheme();\r\n\r\n const defaultValue = 3;\r\n const paddingValues: BreakpointPadding = {\r\n xl: defaultValue,\r\n lg: defaultValue,\r\n md: 2,\r\n sm: 2,\r\n xs: 1,\r\n };\r\n\r\n const xs = useMediaQuery(theme.breakpoints.only(\"xs\"));\r\n const sm = useMediaQuery(theme.breakpoints.only(\"sm\"));\r\n const md = useMediaQuery(theme.breakpoints.only(\"md\"));\r\n const lg = useMediaQuery(theme.breakpoints.only(\"lg\"));\r\n const xl = useMediaQuery(theme.breakpoints.only(\"xl\"));\r\n\r\n if (xs) return paddingValues.xs;\r\n if (sm) return paddingValues.sm;\r\n if (md) return paddingValues.md;\r\n if (lg) return paddingValues.lg;\r\n if (xl) return paddingValues.xl;\r\n\r\n return defaultValue;\r\n}\r\n","import useResponsivePaddingSize from \"hooks/useResponsivePaddingSize\";\r\nimport { makeStyles, createStyles, Theme } from \"@material-ui/core/styles\";\r\n\r\nconst useStyles = (paddingSize: number) =>\r\n makeStyles((theme: Theme) => {\r\n return createStyles({\r\n responsivePadding: {\r\n padding: theme.spacing(paddingSize),\r\n },\r\n });\r\n });\r\n\r\nexport default function useResponsivePaddingClass() {\r\n const paddingSize = useResponsivePaddingSize();\r\n const classes = useStyles(paddingSize)();\r\n\r\n return classes.responsivePadding;\r\n}\r\n","import React, { ReactNode } from \"react\";\r\nimport { makeStyles, createStyles, Theme } from \"@material-ui/core/styles\";\r\nimport { layoutConsts } from \"theme\";\r\nimport clsx from \"clsx\";\r\nimport useResponsivePaddingClass from \"hooks/useResponsivePaddingClass\";\r\n\r\nconst useStyles = makeStyles((theme: Theme) => {\r\n return createStyles({\r\n contentWrapper: {\r\n flex: 1,\r\n display: \"flex\",\r\n justifyContent: \"center\",\r\n },\r\n maxWidthContainer: {\r\n flex: 1,\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n maxWidth: layoutConsts.siteContentMaxWidth,\r\n },\r\n });\r\n});\r\n\r\ninterface IProps extends React.HTMLAttributes {\r\n children?: ReactNode;\r\n noPadding?: boolean;\r\n}\r\n\r\nexport default function PageSection(props: IProps) {\r\n const { children, className, noPadding = false, ...rest } = props;\r\n const classes = useStyles();\r\n const responsivePaddingClassName = useResponsivePaddingClass();\r\n\r\n return (\r\n
\r\n \r\n {children}\r\n
\r\n \r\n );\r\n}\r\n","import React from \"react\";\r\nimport { useTheme } from \"@material-ui/core/styles\";\r\n\r\ninterface IProps {\r\n size?: number;\r\n}\r\n\r\nexport default function Spacer(props: IProps) {\r\n const theme = useTheme();\r\n const { size = 1 } = props;\r\n\r\n const dimension = theme.spacing(size);\r\n\r\n return
;\r\n}\r\n","const links = {\r\n legal: {\r\n termsAndConditions: \"https://www.ea.com/terms-of-service.\",\r\n privacyPolicy: \"https://www.ea.com/en-gb/legal/privacy-policy\",\r\n contactUs: \"https://www.codemasters.com/contact-us/\",\r\n },\r\n socialMedia: {\r\n twitter: \"https://twitter.com/dirtgame\",\r\n facebook: \"https://www.facebook.com/dirtgame\",\r\n youtube: \"https://www.youtube.com/dirtgame\",\r\n instagram: \"https://www.instagram.com/dirtgame/\",\r\n },\r\n};\r\n\r\nexport default links;\r\n","import React from \"react\";\r\nimport { makeStyles, createStyles, Theme, useTheme } from \"@material-ui/core/styles\";\r\nimport NewTabLink from \"components/links/NewTabLink\";\r\nimport Typography from \"@material-ui/core/Typography\";\r\nimport useMediaQuery from \"@material-ui/core/useMediaQuery\";\r\nimport Spacer from \"components/Spacer\";\r\nimport links from \"links\";\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n root: {\r\n display: \"flex\",\r\n [theme.breakpoints.down(\"xs\")]: { flexDirection: \"column\", alignItems: \"center\" },\r\n },\r\n consent: {\r\n \"&:hover\": {\r\n textDecoration: \"underline\",\r\n },\r\n },\r\n })\r\n);\r\n\r\ninterface ILegalLink {\r\n link: string;\r\n label: string;\r\n}\r\n\r\nexport default function LegalLinks() {\r\n const classes = useStyles();\r\n const theme = useTheme();\r\n const smallScreen = useMediaQuery(theme.breakpoints.down(\"xs\"));\r\n\r\n const legalLinks: ILegalLink[] = [\r\n {\r\n link: links.legal.termsAndConditions,\r\n label: \"Terms & Conditions\",\r\n },\r\n {\r\n link: links.legal.privacyPolicy,\r\n label: \"Privacy Policy\",\r\n },\r\n {\r\n link: links.legal.contactUs,\r\n label: \"Contact Us\",\r\n },\r\n ];\r\n\r\n return (\r\n
\r\n
\r\n \r\n \r\n {legalLinks[0].label}\r\n \r\n \r\n {smallScreen ? (\r\n \r\n ) : (\r\n |\r\n )}\r\n \r\n \r\n {legalLinks[1].label}\r\n \r\n \r\n {smallScreen ? (\r\n \r\n ) : (\r\n |\r\n )}\r\n \r\n \r\n {legalLinks[2].label}\r\n \r\n \r\n {smallScreen ? (\r\n \r\n ) : (\r\n |\r\n )}\r\n \r\n
\r\n
\r\n
\r\n\r\n {/* {legalLinks.map((legalLink: ILegalLink, i) => {\r\n const { link, label } = legalLink;\r\n\r\n const showBar = i !== legalLinks.length - 1;\r\n\r\n return (\r\n
\r\n \r\n \r\n {label}\r\n \r\n \r\n {showBar ? (\r\n smallScreen ? (\r\n \r\n ) : (\r\n |\r\n )\r\n ) : null}\r\n
\r\n );\r\n })} */}\r\n
\r\n );\r\n}\r\n","import React, { useContext } from \"react\";\r\nimport { makeStyles, createStyles, Theme } from \"@material-ui/core/styles\";\r\nimport ConfigContext from \"contexts/ConfigContext\";\r\nimport LanguageSelector from \"./languageSelector/LanguageSelector\";\r\nimport Rating from \"./rating/Rating\";\r\nimport PageSection from \"components/layout/PageSection\";\r\nimport LegalLinks from \"./legalLinks/LegalLinks\";\r\nimport Typography from \"@material-ui/core/Typography\";\r\nimport NewTabLink from \"components/links/NewTabLink\";\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n root: {\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"space-between\",\r\n [theme.breakpoints.down(\"sm\")]: {\r\n flexDirection: \"column\",\r\n },\r\n },\r\n codemastersLogo: {\r\n minWidth: 200,\r\n \"& img\": {\r\n width: \"100%\",\r\n },\r\n \"&:hover\": {\r\n \"& img\": {\r\n opacity: 0.8,\r\n },\r\n },\r\n },\r\n copyrightText: {\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n alignItems: \"center\",\r\n textAlign: \"center\",\r\n padding: `0px ${theme.spacing(2)}px`,\r\n },\r\n rightContent: {\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n [theme.breakpoints.down(\"sm\")]: {\r\n flexDirection: \"column\",\r\n paddingTop: theme.spacing(2),\r\n },\r\n },\r\n })\r\n);\r\n\r\nexport default function LicensingSection() {\r\n const classes = useStyles();\r\n const config = useContext(ConfigContext);\r\n\r\n if (typeof config === \"undefined\") return null;\r\n\r\n const { codemastersLogo, copyrightText } = config;\r\n\r\n return (\r\n \r\n
\r\n \r\n \"CodemastersLogo\"\r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n );\r\n}\r\n","import React from \"react\";\r\nimport { makeStyles, createStyles, Theme } from \"@material-ui/core/styles\";\r\n// import Subscription from \"./subscription/Subscription\";\r\nimport LicensingSection from \"./licensing/LicensingSection\";\r\n\r\nconst useStyles = makeStyles((theme: Theme) => {\r\n return createStyles({\r\n root: { backgroundColor: \"#101113\" },\r\n });\r\n});\r\n\r\nexport default function Footer() {\r\n const classes = useStyles();\r\n\r\n return (\r\n
\r\n {/* */}\r\n \r\n
\r\n
\r\n );\r\n}\r\n","import React from \"react\";\r\nimport StickyFooter from \"./StickyFooter\";\r\nimport Footer from \"components/footer/Footer\";\r\n\r\ninterface IProps extends React.HTMLAttributes {}\r\n\r\nexport default function PageLayout(props: IProps) {\r\n return } {...props} />;\r\n}\r\n","import axios from \"axios\";\r\n\r\ninterface IMetaData {\r\n keywords: string;\r\n title: string;\r\n description: string;\r\n}\r\n\r\nexport interface ITileImage {\r\n src: string;\r\n description: string;\r\n backgroundColour?: string;\r\n}\r\n\r\ninterface ITileButton {\r\n text: string;\r\n href: string;\r\n hoverColour?: string;\r\n}\r\n\r\nexport interface ITileImages {\r\n desktop: ITileImage;\r\n tablet: ITileImage;\r\n mobile: ITileImage;\r\n}\r\n\r\nexport interface ITile {\r\n name: string;\r\n images: ITileImages;\r\n description: string;\r\n button: ITileButton;\r\n}\r\n\r\nexport interface IHomePageData {\r\n metaData: IMetaData;\r\n tiles: ITile[];\r\n}\r\n\r\nexport default async function getHomePageData(country: string) {\r\n const response = await axios.get(`/api/website/home_page/${country}`);\r\n\r\n const { data } = response;\r\n\r\n const homePageData: IHomePageData = {\r\n metaData: convertMetaDataResponse(data),\r\n tiles: convertTilesResponse(data),\r\n };\r\n\r\n return homePageData;\r\n}\r\n\r\nfunction convertMetaDataResponse(data: any): IMetaData {\r\n return {\r\n keywords: data.metadataKeywords,\r\n title: data.metadataTitle,\r\n description: data.metadataDescription,\r\n };\r\n}\r\n\r\nfunction convertTilesResponse(data: any): ITile[] {\r\n return data.tiles.map((tile: any) => convertTileResponse(tile));\r\n}\r\n\r\nfunction convertTileResponse(tileResponse: any): ITile {\r\n return {\r\n name: tileResponse.system.name,\r\n images: convertTileImagesResponse(tileResponse),\r\n description: tileResponse.description,\r\n button: convertTileButtonResponse(tileResponse.button[0][0]),\r\n };\r\n}\r\n\r\nfunction convertTileButtonResponse(tileButtonResponse: any): ITileButton {\r\n const { text, link, hoverColour } = tileButtonResponse;\r\n return {\r\n text: text,\r\n href: link,\r\n hoverColour: hoverColour.length === 0 ? undefined : hoverColour,\r\n };\r\n}\r\n\r\nfunction convertTileImagesResponse(tileResponse: any): ITileImages {\r\n const images: ITileImages = {\r\n desktop: convertTileImageResponse(tileResponse.desktopImage[0][0]),\r\n tablet: convertTileImageResponse(tileResponse.tabletImage[0][0]),\r\n mobile: convertTileImageResponse(tileResponse.mobileImage[0][0]),\r\n };\r\n\r\n return images;\r\n}\r\n\r\nfunction convertTileImageResponse(imageResponse: any): ITileImage {\r\n const image = imageResponse.image[0];\r\n\r\n return {\r\n src: image.url,\r\n description: image.description,\r\n backgroundColour: imageResponse.backgroundColour,\r\n };\r\n}\r\n","import React from \"react\";\r\nimport { useTheme } from \"@material-ui/core/styles\";\r\nimport useResponsivePaddingSize from \"hooks/useResponsivePaddingSize\";\r\n\r\ninterface IProps {\r\n multiplier?: number;\r\n}\r\n\r\nexport default function ResponsiveSpacer(props: IProps) {\r\n const theme = useTheme();\r\n const { multiplier = 1 } = props;\r\n\r\n const size = useResponsivePaddingSize();\r\n const dimension = theme.spacing(size * multiplier);\r\n\r\n return
;\r\n}\r\n","import React, { ReactNode, CSSProperties } from \"react\";\r\nimport Button, { ButtonProps } from \"@material-ui/core/Button\";\r\nimport { makeStyles, createStyles, Theme } from \"@material-ui/core/styles\";\r\nimport OmitType from \"customTypes/OmitType\";\r\nimport clsx from \"clsx\";\r\nimport { transition } from \"theme\";\r\n\r\nfunction getBorder(colour: string) {\r\n return `2px solid ${colour}`;\r\n}\r\n\r\ntype IButtonStyle = {\r\n [key in StyledButtonVariant]: { highlighted: CSSProperties; default: CSSProperties };\r\n};\r\n\r\nconst getButtonStyles = (theme: Theme, highlightedStyles?: CSSProperties): IButtonStyle => {\r\n return {\r\n primary: {\r\n default: {\r\n backgroundColor: theme.palette.primary.main,\r\n color: theme.palette.primary.contrastText,\r\n },\r\n highlighted:\r\n typeof highlightedStyles !== \"undefined\"\r\n ? highlightedStyles\r\n : {\r\n backgroundColor: theme.palette.primary.dark,\r\n color: theme.palette.primary.contrastText,\r\n },\r\n },\r\n secondary: {\r\n default: {\r\n border: getBorder(theme.palette.common.white),\r\n color: theme.palette.common.white,\r\n },\r\n highlighted:\r\n typeof highlightedStyles !== \"undefined\"\r\n ? highlightedStyles\r\n : {\r\n backgroundColor: theme.palette.secondary.main,\r\n color: theme.palette.secondary.contrastText,\r\n },\r\n },\r\n transparent: {\r\n default: {\r\n border: getBorder(theme.palette.common.white),\r\n color: theme.palette.common.white,\r\n },\r\n highlighted:\r\n typeof highlightedStyles !== \"undefined\"\r\n ? highlightedStyles\r\n : {\r\n backgroundColor: theme.palette.common.white,\r\n color: theme.palette.common.black,\r\n },\r\n },\r\n };\r\n};\r\n\r\nconst useStyles = (highlighted: boolean, uppercase: boolean, highlightedStyles?: CSSProperties) =>\r\n makeStyles((theme: Theme) => {\r\n const buttonStyles = getButtonStyles(theme, highlightedStyles);\r\n\r\n const primaryTheme = highlighted\r\n ? buttonStyles.primary.highlighted\r\n : buttonStyles.primary.default;\r\n\r\n const secondaryTheme = highlighted\r\n ? buttonStyles.secondary.highlighted\r\n : buttonStyles.secondary.default;\r\n\r\n const transparentTheme = highlighted\r\n ? buttonStyles.transparent.highlighted\r\n : buttonStyles.transparent.default;\r\n\r\n return createStyles({\r\n root: {\r\n boxShadow: \"none\",\r\n textTransform: uppercase ? \"uppercase\" : \"none\",\r\n transition: `all ${transition.duration} ${transition.timingFunction}`,\r\n borderRadius: 5,\r\n border: getBorder(\"transparent\"),\r\n whiteSpace: \"nowrap\",\r\n lineHeight: 1,\r\n padding: `${theme.spacing(0.8)}px ${theme.spacing(5)}px`,\r\n fontSize: \"1rem\",\r\n fontWeight: 700,\r\n },\r\n sizeSmall: {\r\n padding: theme.spacing(0.8),\r\n fontSize: \"1rem\",\r\n },\r\n sizeLarge: {\r\n padding: theme.spacing(1),\r\n fontSize: \"1.8rem\",\r\n },\r\n primary: {\r\n ...primaryTheme,\r\n \"&:hover\": buttonStyles.primary.highlighted,\r\n },\r\n secondary: {\r\n ...secondaryTheme,\r\n \"&:hover\": buttonStyles.secondary.highlighted,\r\n },\r\n transparent: {\r\n ...transparentTheme,\r\n \"&:hover\": buttonStyles.transparent.highlighted,\r\n },\r\n });\r\n });\r\n\r\ntype StyledButtonVariant = \"primary\" | \"secondary\" | \"transparent\";\r\n\r\nexport interface IStyledButtonProps extends OmitType {\r\n children?: ReactNode;\r\n variant?: StyledButtonVariant;\r\n highlighted?: boolean;\r\n highlightedStyles?: CSSProperties;\r\n uppercase?: boolean;\r\n}\r\n\r\nexport default function StyledButton(props: IStyledButtonProps) {\r\n const {\r\n children,\r\n className = \"\",\r\n variant = \"primary\",\r\n highlighted = false,\r\n highlightedStyles,\r\n uppercase = false,\r\n ...rest\r\n } = props;\r\n const classes = useStyles(highlighted, uppercase, highlightedStyles)();\r\n\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n}\r\n","import React from \"react\";\r\nimport LinkWrapper, { ILinkWrapperProps } from \"./LinkWrapper\";\r\n\r\ninterface IProps extends ILinkWrapperProps {}\r\n\r\nexport default function SameTabLink(props: IProps) {\r\n const { children, href, ...rest } = props;\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n}\r\n","import React, { ReactNode } from \"react\";\r\nimport StyledButton, { IStyledButtonProps } from \"./StyledButton\";\r\nimport SameTabLink from \"components/links/SameTabLink\";\r\n\r\ninterface IProps extends IStyledButtonProps {\r\n children?: ReactNode;\r\n href: string;\r\n}\r\n\r\nexport default function SameTabLinkButton(props: IProps) {\r\n const { children, href, ...rest } = props;\r\n\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n}\r\n","import React from \"react\";\r\nimport { ITile } from \"services/getHomePageData\";\r\nimport { makeStyles, createStyles, Theme, useTheme } from \"@material-ui/core/styles\";\r\nimport Typography from \"@material-ui/core/Typography\";\r\nimport ResponsiveSpacer from \"components/ResponsiveSpacer\";\r\nimport SameTabLinkButton from \"components/buttons/SameTabLinkButton\";\r\nimport clsx from \"clsx\";\r\nimport backgroundImageSrc from \"assets/images/backgrounds/bg_info.png\";\r\n\r\nconst useStyles = makeStyles((theme: Theme) => {\r\n return createStyles({\r\n root: {\r\n backgroundImage: `url(${backgroundImageSrc})`,\r\n backgroundSize: \"cover\",\r\n borderRadius: 12,\r\n padding: theme.spacing(1),\r\n },\r\n title: {\r\n textAlign: \"center\",\r\n fontWeight: 600,\r\n fontSize: \"1.5rem\",\r\n lineHeight: \"1.5rem\",\r\n },\r\n description: {\r\n textAlign: \"center\",\r\n fontSize: \"0.875rem\",\r\n lineHeight: \"1.2rem\",\r\n },\r\n });\r\n});\r\n\r\ninterface IProps {\r\n tile: ITile;\r\n className?: string;\r\n}\r\n\r\nexport default function TileDescription(props: IProps) {\r\n const { tile, className = \"\" } = props;\r\n const classes = useStyles();\r\n const theme = useTheme();\r\n\r\n const { name, description, button } = tile;\r\n\r\n const { hoverColour } = button;\r\n\r\n const highlightedStyles =\r\n typeof hoverColour === \"undefined\"\r\n ? undefined\r\n : { backgroundColor: hoverColour, color: theme.palette.common.white };\r\n\r\n return (\r\n
\r\n \r\n {name}\r\n \r\n \r\n \r\n {description}\r\n \r\n \r\n
\r\n \r\n {button.text}\r\n \r\n
\r\n
\r\n );\r\n}\r\n","import React, { HTMLAttributes } from \"react\";\r\nimport { makeStyles, createStyles, Theme } from \"@material-ui/core/styles\";\r\nimport clsx from \"clsx\";\r\nimport borderBackground from \"assets/images/backgrounds/bg_paneledge.jpg\"\r\n\r\nconst useStyles = makeStyles((theme: Theme) => {\r\n const borderSize = 4;\r\n\r\n const innerBorderRadius = 12;\r\n const outerBorderRadius = 15;\r\n\r\n const borderOffset = 3;\r\n\r\n return createStyles({\r\n root: {\r\n backgroundImage: `url(${borderBackground})`,\r\n backgroundSize: \"contain\",\r\n backgroundPositionY: \"100%\",\r\n backgroundColor: theme.palette.common.white,\r\n paddingLeft: borderSize,\r\n paddingBottom: borderSize,\r\n borderRadius: outerBorderRadius,\r\n marginTop: borderOffset,\r\n marginRight: borderOffset,\r\n boxSizing: \"border-box\",\r\n },\r\n inner: {\r\n display: \"flex\",\r\n width: `calc(100% + ${borderOffset}px)`,\r\n borderRadius: innerBorderRadius,\r\n marginTop: -borderOffset,\r\n overflow: \"hidden\",\r\n boxSizing: \"border-box\",\r\n },\r\n });\r\n});\r\n\r\ntype IClasses = Partial>;\r\n\r\ninterface IProps extends HTMLAttributes {\r\n classes?: IClasses;\r\n}\r\n\r\nexport default function BorderedTile(props: IProps) {\r\n const classes = useStyles();\r\n const { className, children, classes: overideClasses, ...rest } = props;\r\n\r\n return (\r\n
\r\n
{children}
\r\n
\r\n );\r\n}\r\n","import React from \"react\";\r\nimport { ITile } from \"services/getHomePageData\";\r\nimport { makeStyles, createStyles, Theme, fade } from \"@material-ui/core/styles\";\r\nimport TileDescription from \"./TileDescription\";\r\nimport clsx from \"clsx\";\r\nimport useTileImage from \"hooks/useTileImage\";\r\nimport BorderedTile from \"components/BorderedTile\";\r\nimport { transition, hoverFadeAmount } from \"theme\";\r\nimport SameTabLink from \"components/links/SameTabLink\";\r\n\r\nconst useStyles = (backgroundColour?: string) =>\r\n makeStyles((theme: Theme) => {\r\n return createStyles({\r\n root: {\r\n height: \"100%\",\r\n },\r\n inner: {\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n height: \"100%\",\r\n backgroundColor: backgroundColour,\r\n position: \"relative\",\r\n \"&:hover $hoverOverlay\": {\r\n opacity: 1,\r\n },\r\n },\r\n hoverOverlay: {\r\n position: \"absolute\",\r\n top: 0,\r\n left: 0,\r\n width: \"100%\",\r\n height: \"100%\",\r\n opacity: 0,\r\n transition: `all ${transition.duration} ${transition.timingFunction}`,\r\n backgroundColor: fade(theme.palette.common.black, hoverFadeAmount),\r\n },\r\n backgroundImage: {\r\n height: \"100%\",\r\n width: \"100%\",\r\n },\r\n backgroundImageExtendible: {\r\n height: \"unset\",\r\n },\r\n descriptionContainer: {\r\n pointerEvents: \"none\",\r\n width: \"100%\",\r\n display: \"flex\",\r\n justifyContent: \"center\",\r\n padding: theme.spacing(2),\r\n boxSizing: \"border-box\",\r\n [theme.breakpoints.down(\"md\")]: {\r\n padding: theme.spacing(1),\r\n },\r\n },\r\n descriptionContainerPlaceholder: {\r\n visibility: \"hidden\",\r\n },\r\n descriptionContainerPlaceholderFeature: {\r\n [theme.breakpoints.down(\"md\")]: {\r\n marginTop: \"-13.4%\",\r\n },\r\n [theme.breakpoints.down(\"xs\")]: {\r\n marginTop: \"-37.1%\",\r\n },\r\n },\r\n descriptionContainerPlaceholderDefault: {\r\n marginTop: \"-49.5%\",\r\n [theme.breakpoints.down(\"md\")]: {\r\n marginTop: \"-12.7%\",\r\n },\r\n [theme.breakpoints.down(\"xs\")]: {\r\n marginTop: \"-27.1%\",\r\n },\r\n },\r\n descriptionContainerAbsolute: {\r\n position: \"absolute\",\r\n bottom: 0,\r\n },\r\n descriptionContainerAbsoluteExtendible: {\r\n bottom: \"2%\",\r\n [theme.breakpoints.down(\"xs\")]: {\r\n bottom: \"0\",\r\n },\r\n },\r\n descriptionInner: {\r\n maxWidth: 750,\r\n },\r\n });\r\n });\r\n\r\ninterface IProps {\r\n tile: ITile;\r\n feature?: boolean;\r\n}\r\n\r\nexport default function Tile(props: IProps) {\r\n const { tile, feature = false } = props;\r\n\r\n const image = useTileImage(tile.images);\r\n const { backgroundColour } = image;\r\n\r\n const classes = useStyles(backgroundColour)();\r\n const extendible = typeof backgroundColour !== \"undefined\" && backgroundColour.length > 0;\r\n\r\n return (\r\n \r\n \r\n\r\n \r\n \r\n \r\n
\r\n {extendible ? (\r\n \r\n \r\n \r\n ) : null}\r\n \r\n );\r\n}\r\n","import { useTheme } from \"@material-ui/core/styles\";\r\nimport { useMediaQuery } from \"@material-ui/core\";\r\nimport { ITileImages, ITileImage } from \"services/getHomePageData\";\r\n\r\nexport default function useTileImage(images: ITileImages): ITileImage {\r\n const theme = useTheme();\r\n\r\n const mobile = useMediaQuery(theme.breakpoints.down(\"xs\"));\r\n const tablet = useMediaQuery(theme.breakpoints.down(\"md\"));\r\n\r\n if (mobile) return images.mobile;\r\n if (tablet) return images.tablet;\r\n\r\n return images.desktop;\r\n}\r\n","import React, { HtmlHTMLAttributes } from \"react\";\r\n\r\nexport type FadeAnimation =\r\n | \"fade\"\r\n | \"fade-up\"\r\n | \"fade-down\"\r\n | \"fade-left\"\r\n | \"fade-right\"\r\n | \"fade-up-right\"\r\n | \"fade-up-left\"\r\n | \"fade-down-right\"\r\n | \"fade-down-left\";\r\n\r\nexport type FlipAnimation = \"flip-up\" | \"flip-down\" | \"flip-left\" | \"flip-right\";\r\n\r\nexport type SlideAnimation = \"slide-up\" | \"slide-down\" | \"slide-left\" | \"slide-right\";\r\n\r\nexport type ZoomAnimation =\r\n | \"zoom-in\"\r\n | \"zoom-in-up\"\r\n | \"zoom-in-down\"\r\n | \"zoom-in-left\"\r\n | \"zoom-in-right\"\r\n | \"zoom-out\"\r\n | \"zoom-out-up\"\r\n | \"zoom-out-down\"\r\n | \"zoom-out-left\"\r\n | \"zoom-out-right\";\r\n\r\nexport type AosAnimation = FadeAnimation | FlipAnimation | SlideAnimation | ZoomAnimation;\r\n\r\nexport type AnchorPlacement =\r\n | \"top-bottom\"\r\n | \"top-center\"\r\n | \"top-top\"\r\n | \"center-bottom\"\r\n | \"center-center\"\r\n | \"center-top\"\r\n | \"bottom-bottom\"\r\n | \"bottom-center\"\r\n | \"bottom-top\";\r\n\r\nexport type EasingFunction =\r\n | \"linear\"\r\n | \"ease\"\r\n | \"ease-in\"\r\n | \"ease-out\"\r\n | \"ease-in-out\"\r\n | \"ease-in-back\"\r\n | \"ease-out-back\"\r\n | \"ease-in-out-back\"\r\n | \"ease-in-sine\"\r\n | \"ease-out-sine\"\r\n | \"ease-in-out-sine\"\r\n | \"ease-in-quad\"\r\n | \"ease-out-quad\"\r\n | \"ease-in-out-quad\"\r\n | \"ease-in-cubic\"\r\n | \"ease-out-cubic\"\r\n | \"ease-in-out-cubic\"\r\n | \"ease-in-quart\"\r\n | \"ease-out-quart\"\r\n | \"ease-in-out-quart\";\r\n\r\nexport interface IAosWrapperProps extends HtmlHTMLAttributes {\r\n animation: AosAnimation;\r\n offset?: number;\r\n delay?: number;\r\n duration?: number;\r\n easingFunction?: EasingFunction;\r\n mirror?: boolean;\r\n once?: boolean;\r\n anchorPlacement?: AnchorPlacement;\r\n}\r\n\r\nexport default function AosWrapper(props: IAosWrapperProps) {\r\n const {\r\n animation,\r\n offset = 120,\r\n delay = 0,\r\n duration = 400,\r\n easingFunction = \"ease\",\r\n mirror = false,\r\n once = false,\r\n anchorPlacement = \"top-bottom\",\r\n children,\r\n ...rest\r\n } = props;\r\n\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n}\r\n","export default class NonIntegerError extends Error {\r\n constructor(propertyName: string, receivedValue: number) {\r\n super(\r\n `${propertyName} parameter is not an integer. ${propertyName} must be a whole number. Received: \"${receivedValue}\"`\r\n );\r\n this.name = this.constructor.name;\r\n }\r\n}\r\n","export default class NonPositiveNumberError extends Error {\r\n constructor(propName: string, recevedValue: number) {\r\n super(`expected ${propName} to be a positive number, received ${recevedValue}`);\r\n this.name = this.constructor.name;\r\n }\r\n}\r\n","import React from \"react\";\r\nimport OmitType from \"customTypes/OmitType\";\r\nimport AosWrapper, { IAosWrapperProps, FlipAnimation } from \"./AosWrapper\";\r\nimport { getRandomElement } from \"utils/arrayUtils\";\r\n\r\ninterface IProps extends OmitType {}\r\n\r\nexport default function RandomFlip(props: IProps) {\r\n const animations: FlipAnimation[] = [\"flip-up\", \"flip-down\", \"flip-left\", \"flip-right\"];\r\n\r\n return ;\r\n}\r\n","export default function getRandomElement(array: T[]): T {\r\n const randomIndex = Math.floor(Math.random() * array.length);\r\n\r\n return array[randomIndex];\r\n}\r\n","import React, { ReactNode, HtmlHTMLAttributes } from \"react\";\r\nimport RandomFlip from \"./RandomFlip\";\r\nimport AosWrapper from \"./AosWrapper\";\r\n\r\ninterface IProps extends HtmlHTMLAttributes {\r\n order: number;\r\n children: ReactNode;\r\n}\r\n\r\nexport default function DefaultAosAnimation(props: IProps) {\r\n const { order, children, className, ...rest } = props;\r\n const delay = 150 * order;\r\n const duration = 400;\r\n const once = true;\r\n\r\n return (\r\n \r\n \r\n {children}\r\n \r\n \r\n );\r\n}\r\n","import React, { HTMLAttributes } from \"react\";\r\nimport { makeStyles, createStyles, Theme, fade } from \"@material-ui/core/styles\";\r\nimport clsx from \"clsx\";\r\nimport BorderedTile from \"components/BorderedTile\";\r\nimport Typography from \"@material-ui/core/Typography\";\r\nimport backgroundImageSrc from \"./images/bg_dishdirt.jpg\";\r\nimport leftThumbnailImageSrc from \"./images/thumbnails_left.png\";\r\nimport rightThumbnailImageSrc from \"./images/thumbnails_right.png\";\r\nimport textboxBackgroundImageSrc from \"./images/txt_bg_box.png\";\r\nimport titleImageSrc from \"./images/txt_dishdirt_title.png\";\r\nimport SameTabLinkButton from \"components/buttons/SameTabLinkButton\";\r\nimport SameTabLink from \"components/links/SameTabLink\";\r\nimport { transition, hoverFadeAmount } from \"theme\";\r\n\r\nconst useStyles = makeStyles((theme: Theme) => {\r\n return createStyles({\r\n root: {},\r\n inner: {\r\n backgroundImage: `url(${backgroundImageSrc})`,\r\n backgroundPosition: \"center\",\r\n backgroundSize: \"cover\",\r\n display: \"flex\",\r\n justifyContent: \"space-between\",\r\n [theme.breakpoints.down(\"sm\")]: {\r\n justifyContent: \"center\",\r\n },\r\n position: \"relative\",\r\n \"&:hover $hoverOverlay\": {\r\n opacity: 1,\r\n },\r\n },\r\n hoverOverlay: {\r\n position: \"absolute\",\r\n top: 0,\r\n left: 0,\r\n width: \"100%\",\r\n height: \"100%\",\r\n zIndex: 1,\r\n opacity: 0,\r\n transition: `all ${transition.duration} ${transition.timingFunction}`,\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n backgroundColor: fade(theme.palette.common.black, hoverFadeAmount),\r\n },\r\n thumbnailsContainer: {\r\n flex: 1,\r\n position: \"relative\",\r\n [theme.breakpoints.down(\"sm\")]: {\r\n display: \"none\",\r\n },\r\n },\r\n thumbnailImage: {\r\n position: \"absolute\",\r\n top: 0,\r\n left: 0,\r\n width: \"100%\",\r\n height: \"100%\",\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n \"& img\": {\r\n width: \"100%\",\r\n maxWidth: 350,\r\n },\r\n },\r\n thumbnailImageLeft: {\r\n justifyContent: \"flex-start\",\r\n },\r\n thumbnailImageRight: {\r\n justifyContent: \"flex-end\",\r\n },\r\n textSection: {\r\n flex: 2,\r\n margin: theme.spacing(3),\r\n maxWidth: 675,\r\n },\r\n titleContainer: {\r\n display: \"flex\",\r\n justifyContent: \"center\",\r\n alignItems: \"center\",\r\n },\r\n titleImage: {\r\n width: \"100%\",\r\n maxWidth: 575,\r\n },\r\n textDescription: {\r\n backgroundImage: `url(${textboxBackgroundImageSrc})`,\r\n backgroundSize: \"100% 100%\",\r\n padding: theme.spacing(3),\r\n marginTop: -12,\r\n },\r\n });\r\n});\r\n\r\ninterface IProps extends HTMLAttributes {}\r\n\r\nexport default function DishingTheDirtBanner(props: IProps) {\r\n const classes = useStyles();\r\n const { className, children, ...rest } = props;\r\n\r\n const siteUrl = \"https://dishingthedirt.dirtgame.com/\";\r\n\r\n return (\r\n \r\n \r\n \r\n Visit Site\r\n \r\n \r\n\r\n
\r\n
\r\n \r\n
\r\n
\r\n\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n Hear from the Dirt 5 and Dirt Rally 2.0 teams on how their different design\r\n ethos makes for two very different games\r\n \r\n
\r\n
\r\n\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n );\r\n}\r\n","import React from \"react\";\r\nimport { makeStyles, createStyles, Theme } from \"@material-ui/core/styles\";\r\nimport { ITile } from \"services/getHomePageData\";\r\nimport Tile from \"./Tile\";\r\nimport ResponsiveSpacer from \"components/ResponsiveSpacer\";\r\nimport DefaultAosAnimation from \"components/aos/DefaultAosAnimation\";\r\nimport DishingTheDirtBanner from \"components/dishingTheDirtBanner/DishingTheDirtBanner\";\r\n\r\nconst useStyles = makeStyles((theme: Theme) => {\r\n return createStyles({\r\n subTileContainer: {\r\n display: \"flex\",\r\n [theme.breakpoints.down(\"md\")]: {\r\n flexDirection: \"column\",\r\n },\r\n },\r\n aosContainer: {\r\n height: \"100%\",\r\n [theme.breakpoints.down(\"md\")]: {\r\n height: \"unset\",\r\n },\r\n },\r\n });\r\n});\r\n\r\ninterface IProps {\r\n tiles: ITile[];\r\n}\r\n\r\nexport default function Tiles(props: IProps) {\r\n const classes = useStyles();\r\n const { tiles } = props;\r\n\r\n let _tiles = [...tiles];\r\n\r\n const featureTile = _tiles.shift();\r\n\r\n return (\r\n <>\r\n {typeof featureTile === \"undefined\" ? null : (\r\n \r\n \r\n \r\n )}\r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n\r\n
\r\n {_tiles.map((tile, i) => (\r\n \r\n \r\n \r\n \r\n \r\n \r\n ))}\r\n
\r\n \r\n );\r\n}\r\n","import React, { useState, useEffect } from \"react\";\r\nimport getHomePageData, { IHomePageData } from \"services/getHomePageData\";\r\nimport Tiles from \"./tiles/Tiles\";\r\nimport PageSection from \"components/layout/PageSection\";\r\n\r\n//@ts-ignore\r\nimport Helmet from \"react-helmet\";\r\n\r\ninterface IProps {\r\n country: string;\r\n}\r\n\r\nexport default function Content(props: IProps) {\r\n const { country } = props;\r\n const [data, setData] = useState();\r\n\r\n useEffect(() => {\r\n getHomePageData(country).then((response) => setData(response));\r\n }, [country]);\r\n\r\n return typeof data === \"undefined\" ? null : (\r\n <>\r\n \r\n {data.metaData.title}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n}\r\n","import React, { useContext } from \"react\";\r\nimport ConfigContext from \"contexts/ConfigContext\";\r\nimport Content from \"./Content\";\r\nimport { makeStyles, createStyles, Theme } from \"@material-ui/core/styles\";\r\nimport CircularProgress from \"@material-ui/core/CircularProgress\";\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n root: {\r\n minHeight: 500,\r\n display: \"flex\",\r\n justifyContent: \"center\",\r\n alignItems: \"center\",\r\n },\r\n loader: {\r\n color: theme.palette.common.white,\r\n },\r\n })\r\n);\r\n\r\nexport default function GameDisplay() {\r\n const classes = useStyles();\r\n const config = useContext(ConfigContext);\r\n\r\n return (\r\n
\r\n {typeof config === \"undefined\" ? (\r\n
\r\n \r\n
\r\n ) : (\r\n \r\n )}\r\n
\r\n );\r\n}\r\n","import React, { HTMLAttributes } from \"react\";\r\nimport BackgroundImage from \"./BackgroundImage\";\r\nimport backgroundImageSrc from \"assets/images/backgrounds/bg_socialwall.png\"\r\n\r\ninterface IProps extends HTMLAttributes {}\r\n\r\nexport default function SocialWallBackground(props: IProps) {\r\n return (\r\n \r\n );\r\n}\r\n","import React from \"react\";\r\nimport SvgIcon, { SvgIconProps } from \"@material-ui/core/SvgIcon\";\r\n\r\nexport default function TwitterIcon(props: SvgIconProps) {\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n","import React from \"react\";\r\nimport SvgIcon, { SvgIconProps } from \"@material-ui/core/SvgIcon\";\r\n\r\nexport default function TwitterIcon(props: SvgIconProps) {\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n","import React from \"react\";\r\nimport SvgIcon, { SvgIconProps } from \"@material-ui/core/SvgIcon\";\r\n\r\nexport default function InstagramIcon(props: SvgIconProps) {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n );\r\n}\r\n","import React from \"react\";\r\nimport SvgIcon, { SvgIconProps } from \"@material-ui/core/SvgIcon\";\r\n\r\nexport default function YouTubeIcon(props: SvgIconProps) {\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n","import React, { ReactNode } from \"react\";\r\n\r\nimport IconButton from \"@material-ui/core/IconButton\";\r\nimport TwitterIcon from \"assets/icons/socialMedia/TwitterIcon\";\r\nimport FacebookIcon from \"assets/icons/socialMedia/FacebookIcon\";\r\nimport InstagramIcon from \"assets/icons/socialMedia/InstagramIcon\";\r\nimport YouTubeIcon from \"assets/icons/socialMedia/YouTubeIcon\";\r\n\r\nimport NewTabLink from \"./links/NewTabLink\";\r\nimport { makeStyles, createStyles, Theme } from \"@material-ui/core/styles\";\r\nimport { transition } from \"theme\";\r\nimport links from \"links\";\r\nimport clsx from \"clsx\";\r\n\r\nconst socialMediaColours = {\r\n twitter: \"#1da1f2\",\r\n facebook: \"#3d5a99\",\r\n youtube: \"#f00\",\r\n instagram: \"#ea0d78\",\r\n};\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n root: {\r\n display: \"flex\",\r\n },\r\n icon: {\r\n color: theme.palette.common.white,\r\n transition: `all ${transition.duration} ${transition.timingFunction}`,\r\n },\r\n twitter: {\r\n \"&:hover\": {\r\n color: socialMediaColours.twitter,\r\n backgroundColor: theme.palette.common.white,\r\n },\r\n },\r\n facebook: {\r\n \"&:hover\": {\r\n color: socialMediaColours.facebook,\r\n backgroundColor: theme.palette.common.white,\r\n },\r\n },\r\n youtube: {\r\n \"&:hover\": {\r\n color: socialMediaColours.youtube,\r\n backgroundColor: theme.palette.common.white,\r\n },\r\n },\r\n instagram: {\r\n \"&:hover\": {\r\n color: socialMediaColours.instagram,\r\n backgroundColor: theme.palette.common.white,\r\n },\r\n },\r\n })\r\n);\r\n\r\ninterface IIconLink {\r\n icon: ReactNode;\r\n link: string;\r\n className?: string;\r\n}\r\n\r\nexport default function SocialMediaIcons() {\r\n const classes = useStyles();\r\n\r\n const iconLinks: IIconLink[] = [\r\n {\r\n icon: ,\r\n link: links.socialMedia.twitter,\r\n className: classes.twitter,\r\n },\r\n {\r\n icon: ,\r\n link: links.socialMedia.facebook,\r\n className: classes.facebook,\r\n },\r\n {\r\n icon: ,\r\n link: links.socialMedia.youtube,\r\n className: classes.youtube,\r\n },\r\n {\r\n icon: ,\r\n link: links.socialMedia.instagram,\r\n className: classes.instagram,\r\n },\r\n ];\r\n\r\n return (\r\n
\r\n {iconLinks.map((iconLink: IIconLink, i) => {\r\n const { link, icon, className = \"\" } = iconLink;\r\n return (\r\n \r\n \r\n {icon}\r\n \r\n \r\n );\r\n })}\r\n
\r\n );\r\n}\r\n","import React from \"react\";\r\nimport { makeStyles, createStyles, Theme } from \"@material-ui/core/styles\";\r\nimport { IUser } from \"services/getCuratorContent\";\r\nimport Avatar from \"@material-ui/core/Avatar\";\r\nimport Spacer from \"components/Spacer\";\r\nimport Typography from \"@material-ui/core/Typography\";\r\n\r\nconst useStyles = makeStyles((theme: Theme) => {\r\n return createStyles({\r\n root: { display: \"flex\" },\r\n avatar: {\r\n width: theme.spacing(6),\r\n height: theme.spacing(6),\r\n },\r\n });\r\n});\r\n\r\ninterface IProps {\r\n user: IUser;\r\n}\r\n\r\nexport default function PostAvatar(props: IProps) {\r\n const classes = useStyles();\r\n const { user } = props;\r\n\r\n return (\r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n {user.fullName}\r\n @{user.screenName}\r\n
\r\n
\r\n );\r\n}\r\n","import React from \"react\";\r\nimport { makeStyles, createStyles, Theme } from \"@material-ui/core/styles\";\r\nimport { IPostContent } from \"services/getCuratorContent\";\r\nimport Typography from \"@material-ui/core/Typography\";\r\n\r\n//@ts-ignore\r\nimport { Player, ControlBar, BigPlayButton } from \"video-react\";\r\nimport \"assets/css/video-react.css\";\r\nimport Spacer from \"components/Spacer\";\r\n\r\nconst useStyles = makeStyles((theme: Theme) => {\r\n return createStyles({\r\n root: {\r\n \"& img\": {\r\n width: \"100%\",\r\n },\r\n \"& video\": {\r\n width: \"100%\",\r\n },\r\n },\r\n text: {\r\n fontSize: \"1rem\",\r\n lineHeight: \"1.4\",\r\n },\r\n });\r\n});\r\n\r\ninterface IProps {\r\n content: IPostContent;\r\n}\r\n\r\nexport default function PostContent(props: IProps) {\r\n const classes = useStyles();\r\n const { content } = props;\r\n\r\n const { text, image, video } = content;\r\n\r\n return (\r\n
\r\n {typeof video === \"undefined\" ? (\r\n typeof image === \"undefined\" ? null : (\r\n <>\r\n {image.src}\r\n \r\n \r\n )\r\n ) : (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n )}\r\n \r\n {text}\r\n \r\n
\r\n );\r\n}\r\n","import React, { HTMLAttributes } from \"react\";\r\nimport { makeStyles, createStyles, Theme } from \"@material-ui/core/styles\";\r\nimport NewTabLink from \"components/links/NewTabLink\";\r\nimport clsx from \"clsx\";\r\n\r\nconst useStyles = makeStyles((theme: Theme) => {\r\n const borderRadius = theme.spacing(2);\r\n\r\n return createStyles({\r\n root: {\r\n backgroundColor: theme.palette.background.paper,\r\n color: theme.palette.common.black,\r\n padding: theme.spacing(2),\r\n borderRadius: borderRadius,\r\n position: \"relative\",\r\n },\r\n link: {\r\n position: \"absolute\",\r\n height: \"100%\",\r\n width: \"100%\",\r\n top: 0,\r\n left: 0,\r\n borderRadius: borderRadius,\r\n },\r\n });\r\n});\r\n\r\ninterface IProps extends HTMLAttributes {\r\n href?: string;\r\n}\r\n\r\nexport default function PostCard(props: IProps) {\r\n const classes = useStyles();\r\n const { href, className, children, ...rest } = props;\r\n\r\n return (\r\n
\r\n {typeof href === \"undefined\" ? null : (\r\n \r\n )}\r\n {children}\r\n
\r\n );\r\n}\r\n","import React from \"react\";\r\nimport { makeStyles, createStyles, Theme } from \"@material-ui/core/styles\";\r\nimport { IPost } from \"services/getCuratorContent\";\r\nimport PostAvatar from \"./PostAvatar\";\r\nimport Spacer from \"components/Spacer\";\r\nimport PostContent from \"./PostContent\";\r\nimport PostCard from \"./PostCard\";\r\nimport { hoverOpacity } from \"theme\";\r\n\r\nconst useStyles = makeStyles((theme: Theme) => {\r\n return createStyles({\r\n root: {\r\n flex: \"1\",\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n justifyContent: \"space-between\",\r\n \"&:hover\": {\r\n opacity: hoverOpacity,\r\n },\r\n },\r\n });\r\n});\r\n\r\ninterface IProps {\r\n post: IPost;\r\n}\r\n\r\nexport default function Post(props: IProps) {\r\n const classes = useStyles();\r\n const { post } = props;\r\n\r\n const { content, user } = post;\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n );\r\n}\r\n","import React from \"react\";\r\nimport { makeStyles, createStyles, Theme, useTheme } from \"@material-ui/core/styles\";\r\nimport PostCard from \"./PostCard\";\r\nimport Skeleton from \"@material-ui/lab/Skeleton\";\r\nimport Spacer from \"components/Spacer\";\r\n\r\nconst useStyles = makeStyles((theme: Theme) => {\r\n return createStyles({\r\n root: {\r\n flex: \"1\",\r\n },\r\n });\r\n});\r\n\r\nexport default function PostSkeleton() {\r\n const classes = useStyles();\r\n const theme = useTheme();\r\n\r\n const animation = \"wave\";\r\n\r\n return (\r\n \r\n \r\n \r\n {Array.from(new Array(4)).map((_, index) => (\r\n \r\n ))}\r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n );\r\n}\r\n","import { modSplitArray } from \"utils/arrayUtils\";\r\n\r\nexport type IColumn = T[];\r\n\r\ntype ICachedColumns = {\r\n [numberOfColumns: number]: IColumn[];\r\n};\r\n\r\nexport default class MasonryController {\r\n private readonly _list: T[];\r\n private _cachedColumns: ICachedColumns;\r\n\r\n constructor(list: T[]) {\r\n this._list = list;\r\n this._cachedColumns = {};\r\n }\r\n\r\n public getColumns(numberOfColumns: number): IColumn[] {\r\n if (this._cachedColumns.hasOwnProperty(numberOfColumns))\r\n return this._cachedColumns[numberOfColumns];\r\n\r\n this._cachedColumns[numberOfColumns] = this.calculateColumns(numberOfColumns);\r\n\r\n return this._cachedColumns[numberOfColumns];\r\n }\r\n\r\n private calculateColumns(numberOfColumns: number): IColumn[] {\r\n return modSplitArray(this._list, numberOfColumns);\r\n }\r\n}\r\n","import NonIntegerError from \"errors/NonIntegerError\";\r\nimport NonPositiveNumberError from \"errors/NonPositiveNumberError\";\r\n\r\nexport default function modSplitArray(array: T[], numberOfOutputArrays: number): T[][] {\r\n if (numberOfOutputArrays <= 0)\r\n throw new NonPositiveNumberError(\"numberOfOutputArrays\", numberOfOutputArrays);\r\n\r\n if (!Number.isInteger(numberOfOutputArrays))\r\n throw new NonIntegerError(\"numberOfOutputArrays\", numberOfOutputArrays);\r\n\r\n if (array.length === 0) return [];\r\n\r\n if (numberOfOutputArrays >= array.length) return array.map((item) => [item]);\r\n\r\n let outputArray: T[][] = [];\r\n for (let index = 0; index < numberOfOutputArrays; index++) {\r\n outputArray.push([]);\r\n }\r\n\r\n array.forEach((element, index) => {\r\n const outputArrayIndex = index % numberOfOutputArrays;\r\n\r\n outputArray[outputArrayIndex].push(element);\r\n });\r\n\r\n return outputArray;\r\n}\r\n","import React, { HTMLAttributes, ReactNode } from \"react\";\r\nimport { makeStyles, createStyles, Theme } from \"@material-ui/core/styles\";\r\nimport { Breakpoint } from \"@material-ui/core/styles/createBreakpoints\";\r\nimport MasonryController, { IColumn } from \"./MasonryController\";\r\nimport clsx from \"clsx\";\r\nimport useMediaQuery from \"@material-ui/core/useMediaQuery\";\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n root: { display: \"flex\", flex: \"1\" },\r\n column: { flex: \"1\", display: \"flex\", flexDirection: \"column\" },\r\n })\r\n);\r\n\r\nexport interface IMasonryBreakPoint {\r\n breakpoint: Breakpoint;\r\n numberOfColums: number;\r\n}\r\n\r\ntype IClasses = Partial>;\r\n\r\ninterface IProps extends HTMLAttributes {\r\n breakpoints: IMasonryBreakPoint[]; // all brakpoints are calculated using up\r\n items: T[];\r\n classes?: IClasses;\r\n renderItem: (item: T) => ReactNode;\r\n}\r\n\r\nexport default function Masonry(props: IProps) {\r\n const classes = useStyles();\r\n const { breakpoints, items, renderItem, className = \"\", classes: overideClasses } = props;\r\n\r\n const listDisplayController = new MasonryController(items);\r\n\r\n return (\r\n
\r\n {breakpoints.map((breakpoint: IMasonryBreakPoint) => (\r\n \r\n ))}\r\n
\r\n );\r\n}\r\n\r\ninterface IDisplayGridProps extends HTMLAttributes {\r\n breakPoint: IMasonryBreakPoint;\r\n columns: IColumn[];\r\n renderItem: (item: T) => ReactNode;\r\n}\r\n\r\nfunction DisplayGrid(props: IDisplayGridProps) {\r\n const { columns, renderItem, breakPoint, className = \"\" } = props;\r\n\r\n const matches = useMediaQuery((theme: Theme) => theme.breakpoints.only(breakPoint.breakpoint));\r\n\r\n return (\r\n <>\r\n {matches\r\n ? columns.map((column: T[], i: number) => (\r\n
\r\n {column.map((item: T) => renderItem(item))}\r\n
\r\n ))\r\n : null}\r\n \r\n );\r\n}\r\n","import React from \"react\";\r\nimport { makeStyles, createStyles, Theme } from \"@material-ui/core/styles\";\r\nimport { IPost } from \"services/getCuratorContent\";\r\nimport Post from \"./post/Post\";\r\nimport PostSkeleton from \"./post/PostSkeleton\";\r\nimport Masonry, { IMasonryBreakPoint } from \"components/masonry/Masonry\";\r\n\r\nconst useStyles = makeStyles((theme: Theme) => {\r\n return createStyles({\r\n root: {\r\n display: \"flex\",\r\n flexWrap: \"wrap\",\r\n },\r\n item: {\r\n margin: theme.spacing(1),\r\n minHeight: 250,\r\n display: \"flex\",\r\n },\r\n });\r\n});\r\n\r\ninterface IProps {\r\n posts?: IPost[];\r\n}\r\n\r\nexport default function SocialWallPosts(props: IProps) {\r\n const classes = useStyles();\r\n const { posts } = props;\r\n\r\n const masonryBreakPoints: IMasonryBreakPoint[] = [\r\n { breakpoint: \"xs\", numberOfColums: 1 },\r\n { breakpoint: \"sm\", numberOfColums: 2 },\r\n { breakpoint: \"md\", numberOfColums: 3 },\r\n { breakpoint: \"lg\", numberOfColums: 4 },\r\n { breakpoint: \"xl\", numberOfColums: 4 },\r\n ];\r\n\r\n return (\r\n
\r\n {typeof posts === \"undefined\" ? (\r\n (\r\n
\r\n \r\n
\r\n )}\r\n breakpoints={masonryBreakPoints}\r\n />\r\n ) : (\r\n (\r\n
\r\n \r\n
\r\n )}\r\n breakpoints={masonryBreakPoints}\r\n />\r\n )}\r\n
\r\n );\r\n}\r\n","import axios from \"axios\";\r\n\r\nexport interface IUser {\r\n avatarImgSrc?: string;\r\n url?: string;\r\n fullName: string;\r\n screenName: string;\r\n}\r\n\r\ninterface IPostImage {\r\n src: string;\r\n}\r\n\r\ninterface IPostVideo {\r\n src: string;\r\n}\r\n\r\nexport interface IPostContent {\r\n text: string;\r\n image?: IPostImage;\r\n video?: IPostVideo;\r\n thumbnail: string;\r\n}\r\n\r\nexport interface IPost {\r\n url: string;\r\n content: IPostContent;\r\n user: IUser;\r\n}\r\n\r\nexport interface ICuratorResponse {\r\n posts: IPost[];\r\n}\r\n\r\nexport default async function getCuratorContent() {\r\n const response = await axios.get(\"/api/socialfeed\");\r\n\r\n const { data } = response;\r\n\r\n const settings: ICuratorResponse = {\r\n posts: convertPostsResponse(data),\r\n };\r\n\r\n return settings;\r\n}\r\n\r\nfunction convertPostsResponse(data: any): IPost[] {\r\n return data.posts.map((post: any) => {\r\n return {\r\n url: post.url,\r\n content: getPostContentResponse(post),\r\n user: getPostUserResponse(post),\r\n };\r\n });\r\n}\r\n\r\nfunction getPostContentResponse(post: any): IPostContent {\r\n return {\r\n text: post.text,\r\n image: post.image.length > 0 ? getPostImageResponse(post) : undefined,\r\n video: post.video.length > 0 ? getPostVideoResponse(post) : undefined,\r\n thumbnail: post.thumbnail,\r\n };\r\n}\r\n\r\nfunction getPostImageResponse(post: any): IPostImage {\r\n return {\r\n src: post.image,\r\n };\r\n}\r\n\r\nfunction getPostVideoResponse(post: any): IPostImage {\r\n return {\r\n src: post.video,\r\n };\r\n}\r\n\r\nfunction getPostUserResponse(post: any): IUser {\r\n return {\r\n avatarImgSrc: post.user_image,\r\n url: post.userUrl,\r\n fullName: post.user_full_name,\r\n screenName: post.user_screen_name,\r\n };\r\n}\r\n","import React, { useEffect, useState } from \"react\";\r\nimport { makeStyles, createStyles, Theme } from \"@material-ui/core/styles\";\r\nimport PageSection from \"components/layout/PageSection\";\r\nimport SocialWallBackground from \"components/backgrounds/SocialWallBackground\";\r\nimport { CSSProperties } from \"@material-ui/core/styles/withStyles\";\r\nimport Typography from \"@material-ui/core/Typography\";\r\nimport SocialMediaIcons from \"components/SocialMediaIcons\";\r\nimport SocialWallPosts from \"./SocialWallPosts\";\r\nimport getCuratorContent, { ICuratorResponse } from \"services/getCuratorContent\";\r\nimport Spacer from \"components/Spacer\";\r\nimport Scrollbar from \"react-scrollbars-custom\";\r\nimport { cssImportant } from \"theme\";\r\nimport useResponsivePaddingSize from \"hooks/useResponsivePaddingSize\";\r\n\r\nconst topMarginSize = \"1.1vw\";\r\n\r\nexport const socialWallPadding: CSSProperties = {\r\n paddingBottom: topMarginSize,\r\n};\r\n\r\nconst useStyles = (paddingSize: number) =>\r\n makeStyles((theme: Theme) => {\r\n return createStyles({\r\n root: {\r\n height: \"100%\",\r\n borderBottom: `5px solid ${theme.palette.common.black}`,\r\n marginTop: `-${topMarginSize}`,\r\n \"& .ScrollbarsCustom-Thumb\": {\r\n backgroundColor: theme.palette.secondary.main + cssImportant,\r\n },\r\n \"& .ScrollbarsCustom-Track\": {\r\n backgroundColor: \"#080808\" + cssImportant,\r\n },\r\n },\r\n inner: {\r\n padding: `0px ${theme.spacing(paddingSize)}px`,\r\n },\r\n title: {\r\n textAlign: \"center\",\r\n textTransform: \"uppercase\",\r\n color: theme.palette.secondary.main,\r\n fontWeight: 800,\r\n },\r\n subTitle: {\r\n fontWeight: 800,\r\n textAlign: \"center\",\r\n lineHeight: \"1\",\r\n },\r\n });\r\n });\r\n\r\nexport default function SocialWall() {\r\n const paddingSize = useResponsivePaddingSize();\r\n const classes = useStyles(paddingSize)();\r\n\r\n const [data, setData] = useState();\r\n\r\n useEffect(() => {\r\n getCuratorContent().then((response) => setData(response));\r\n }, []);\r\n\r\n return (\r\n \r\n \r\n
\r\n \r\n \r\n Dirt Social Wall\r\n \r\n \r\n Join in the conversation\r\n \r\n
\r\n \r\n
\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n );\r\n}\r\n","import React, { HTMLAttributes } from \"react\";\r\nimport BackgroundImage from \"./BackgroundImage\";\r\nimport backgroundImageSrc from \"assets/images/backgrounds/body.jpg\"\r\n\r\ninterface IProps extends HTMLAttributes {}\r\n\r\nexport default function GameDisplayBackground(props: IProps) {\r\n return (\r\n \r\n );\r\n}\r\n","import React from \"react\";\r\nimport { makeStyles, createStyles, Theme } from \"@material-ui/core/styles\";\r\nimport GameDisplay from \"./gameDisplay/GameDisplay\";\r\nimport SocialWall, { socialWallPadding } from \"./socialWall/SocialWall\";\r\nimport GameDisplayBackground from \"components/backgrounds/GameDisplayBackground\";\r\n\r\nconst useStyles = makeStyles((theme: Theme) => {\r\n return createStyles({\r\n root: { flex: \"1 1 auto\", display: \"flex\", flexDirection: \"column\" },\r\n });\r\n});\r\n\r\nexport default function HomePage() {\r\n const classes = useStyles();\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n );\r\n}\r\n","import React from \"react\";\r\nimport { useParams } from \"react-router-dom\";\r\nimport Application from \"containers/Application\";\r\nimport PageLayout from \"components/layout/PageLayout\";\r\nimport HomePage from \"pages/homePage/HomePage\";\r\n\r\nfunction App() {\r\n let { country } = useParams();\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport default App;\r\n","// This optional code is used to register a service worker.\r\n// register() is not called by default.\r\n\r\n// This lets the app load faster on subsequent visits in production, and gives\r\n// it offline capabilities. However, it also means that developers (and users)\r\n// will only see deployed updates on subsequent visits to a page, after all the\r\n// existing tabs open on the page have been closed, since previously cached\r\n// resources are updated in the background.\r\n\r\n// To learn more about the benefits of this model and instructions on how to\r\n// opt-in, read https://bit.ly/CRA-PWA\r\n\r\nconst isLocalhost = Boolean(\r\n window.location.hostname === \"localhost\" ||\r\n // [::1] is the IPv6 localhost address.\r\n window.location.hostname === \"[::1]\" ||\r\n // 127.0.0.0/8 are considered localhost for IPv4.\r\n window.location.hostname.match(/^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/)\r\n);\r\n\r\ntype Config = {\r\n onSuccess?: (registration: ServiceWorkerRegistration) => void;\r\n onUpdate?: (registration: ServiceWorkerRegistration) => void;\r\n};\r\n\r\nexport function register(config?: Config) {\r\n if (process.env.NODE_ENV === \"production\" && \"serviceWorker\" in navigator) {\r\n // The URL constructor is available in all browsers that support SW.\r\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href);\r\n if (publicUrl.origin !== window.location.origin) {\r\n // Our service worker won't work if PUBLIC_URL is on a different origin\r\n // from what our page is served on. This might happen if a CDN is used to\r\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\r\n return;\r\n }\r\n\r\n window.addEventListener(\"load\", () => {\r\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\r\n\r\n if (isLocalhost) {\r\n // This is running on localhost. Let's check if a service worker still exists or not.\r\n checkValidServiceWorker(swUrl, config);\r\n\r\n // Add some additional logging to localhost, pointing developers to the\r\n // service worker/PWA documentation.\r\n navigator.serviceWorker.ready.then(() => {\r\n console.log(\r\n \"This web app is being served cache-first by a service \" +\r\n \"worker. To learn more, visit https://bit.ly/CRA-PWA\"\r\n );\r\n });\r\n } else {\r\n // Is not localhost. Just register service worker\r\n registerValidSW(swUrl, config);\r\n }\r\n });\r\n }\r\n}\r\n\r\nfunction registerValidSW(swUrl: string, config?: Config) {\r\n navigator.serviceWorker\r\n .register(swUrl)\r\n .then((registration) => {\r\n registration.onupdatefound = () => {\r\n const installingWorker = registration.installing;\r\n if (installingWorker == null) {\r\n return;\r\n }\r\n installingWorker.onstatechange = () => {\r\n if (installingWorker.state === \"installed\") {\r\n if (navigator.serviceWorker.controller) {\r\n // At this point, the updated precached content has been fetched,\r\n // but the previous service worker will still serve the older\r\n // content until all client tabs are closed.\r\n console.log(\r\n \"New content is available and will be used when all \" +\r\n \"tabs for this page are closed. See https://bit.ly/CRA-PWA.\"\r\n );\r\n\r\n // Execute callback\r\n if (config && config.onUpdate) {\r\n config.onUpdate(registration);\r\n }\r\n } else {\r\n // At this point, everything has been precached.\r\n // It's the perfect time to display a\r\n // \"Content is cached for offline use.\" message.\r\n console.log(\"Content is cached for offline use.\");\r\n\r\n // Execute callback\r\n if (config && config.onSuccess) {\r\n config.onSuccess(registration);\r\n }\r\n }\r\n }\r\n };\r\n };\r\n })\r\n .catch((error) => {\r\n console.error(\"Error during service worker registration:\", error);\r\n });\r\n}\r\n\r\nfunction checkValidServiceWorker(swUrl: string, config?: Config) {\r\n // Check if the service worker can be found. If it can't reload the page.\r\n fetch(swUrl, {\r\n headers: { \"Service-Worker\": \"script\" },\r\n })\r\n .then((response) => {\r\n // Ensure service worker exists, and that we really are getting a JS file.\r\n const contentType = response.headers.get(\"content-type\");\r\n if (\r\n response.status === 404 ||\r\n (contentType != null && contentType.indexOf(\"javascript\") === -1)\r\n ) {\r\n // No service worker found. Probably a different app. Reload the page.\r\n navigator.serviceWorker.ready.then((registration) => {\r\n registration.unregister().then(() => {\r\n window.location.reload();\r\n });\r\n });\r\n } else {\r\n // Service worker found. Proceed as normal.\r\n registerValidSW(swUrl, config);\r\n }\r\n })\r\n .catch(() => {\r\n console.log(\"No internet connection found. App is running in offline mode.\");\r\n });\r\n}\r\n\r\nexport function unregister() {\r\n if (\"serviceWorker\" in navigator) {\r\n navigator.serviceWorker.ready\r\n .then((registration) => {\r\n registration.unregister();\r\n })\r\n .catch((error) => {\r\n console.error(error.message);\r\n });\r\n }\r\n}\r\n","import \"react-app-polyfill/ie11\";\r\nimport \"react-app-polyfill/stable\";\r\nimport React from \"react\";\r\nimport ReactDOM from \"react-dom\";\r\nimport { BrowserRouter, Route, Redirect, Switch } from \"react-router-dom\";\r\nimport App from \"./App\";\r\nimport { defaultCountry } from \"consts\";\r\nimport * as serviceWorker from \"./serviceWorker\";\r\nimport \"typeface-montserrat\";\r\n//@ts-ignore\r\n// import TagManager from \"react-gtm-module\";\r\n\r\nimport AOS from \"aos\";\r\nimport \"aos/dist/aos.css\";\r\n\r\nimport { MuiThemeProvider } from \"@material-ui/core/styles\";\r\nimport theme from \"./theme\";\r\nimport \"index.css\";\r\n\r\n// const tagManagerArgs = {\r\n// gtmId: \"GTM-K7XPKPR\",\r\n// };\r\n\r\n// TagManager.initialize(tagManagerArgs);\r\n\r\nAOS.init();\r\n\r\n// Internet Explorer 6-11\r\n// @ts-ignore\r\nconst isIE = /*@cc_on!@*/ false || !!document.documentMode;\r\n\r\nReactDOM.render(\r\n \r\n {isIE ? (\r\n
\r\n Internet Explorer 11 is not supported, please use another browser.\r\n
\r\n ) : (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )}\r\n
,\r\n document.getElementById(\"root\")\r\n);\r\n\r\n// If you want your app to work offline and load faster, you can change\r\n// unregister() to register() below. Note this comes with some pitfalls.\r\n// Learn more about service workers: https://bit.ly/CRA-PWA\r\nserviceWorker.unregister();\r\n"],"sourceRoot":""}